@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
@@ -4,7 +4,7 @@
4
4
  * Provides CLI runtime support for Register Mutation.
5
5
  */
6
6
 
7
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="703247b2-e81d-5a78-999d-6d493a4cf9bf")}catch(e){}}();
7
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6581ddaf-4643-5ccc-9aff-1569d1759846")}catch(e){}}();
8
8
  import { Option } from "commander";
9
9
  import { resolveBodyFileContent } from "../core/io/body-file.js";
10
10
  import { EXIT_CODE } from "../core/shared/constants.js";
@@ -399,6 +399,398 @@ function buildUpdateManyListOptions(options) {
399
399
  includeBody: true,
400
400
  };
401
401
  }
402
+ function pickStringOption(...candidates) {
403
+ for (const candidate of candidates) {
404
+ if (typeof candidate === "string") {
405
+ return candidate;
406
+ }
407
+ }
408
+ return undefined;
409
+ }
410
+ function readOptionString(options, key) {
411
+ return typeof options[key] === "string" ? options[key] : undefined;
412
+ }
413
+ function stringArrayOption(value) {
414
+ if (Array.isArray(value)) {
415
+ return value;
416
+ }
417
+ if (typeof value === "string") {
418
+ return [value];
419
+ }
420
+ return undefined;
421
+ }
422
+ function resolveCreatePositionals(typeOrTitle, secondTitle, options) {
423
+ if (typeof secondTitle === "string" && secondTitle.length > 0) {
424
+ return { positionalType: typeOrTitle, positionalTitle: secondTitle };
425
+ }
426
+ if (typeof typeOrTitle !== "string" || typeOrTitle.length === 0) {
427
+ return { positionalType: undefined, positionalTitle: undefined };
428
+ }
429
+ const explicitTitleProvided = typeof options.title === "string" && options.title.trim().length > 0;
430
+ return explicitTitleProvided && options.type === undefined
431
+ ? { positionalType: typeOrTitle, positionalTitle: undefined }
432
+ : { positionalType: undefined, positionalTitle: typeOrTitle };
433
+ }
434
+ function assertCreatePositionalTypeHasTitle(positionalType, positionalTitle, options) {
435
+ if (positionalType !== undefined ||
436
+ typeof positionalTitle !== "string" ||
437
+ positionalTitle.length === 0 ||
438
+ options.title !== undefined ||
439
+ options.type !== undefined ||
440
+ !BUILTIN_TYPE_NAME_LOOKUP.has(positionalTitle.trim().toLowerCase())) {
441
+ return;
442
+ }
443
+ const matchedType = positionalTitle.trim();
444
+ throw new PmCliError(`pm create needs a title — "${matchedType}" looks like an item type, not a title. Use either: pm create ${matchedType} "<title>" or pm create "<title>" --type ${matchedType}.`, EXIT_CODE.USAGE, {
445
+ code: "create_positional_type_without_title",
446
+ why: "Without this guard the single positional is used as the title and the type defaults to Task — so the command would silently create a Task literally titled \"" + matchedType + "\".",
447
+ examples: [
448
+ `pm create ${matchedType} "Wire up SSO for the agent harness"`,
449
+ `pm create "Wire up SSO for the agent harness" --type ${matchedType}`,
450
+ ],
451
+ nextSteps: [
452
+ `Re-run with both type and title: pm create ${matchedType} "<title>"`,
453
+ ],
454
+ });
455
+ }
456
+ async function runCreateAction(typeOrTitle, secondTitle, options, command) {
457
+ const globalOptions = getGlobalOptions(command);
458
+ const startedAt = Date.now();
459
+ const positionals = resolveCreatePositionals(typeOrTitle, secondTitle, options);
460
+ assertCreatePositionalTypeHasTitle(positionals.positionalType, positionals.positionalTitle, options);
461
+ if (typeof positionals.positionalType === "string" && positionals.positionalType.length > 0 && options.type === undefined) {
462
+ options.type = positionals.positionalType;
463
+ }
464
+ if (typeof positionals.positionalTitle === "string" && positionals.positionalTitle.length > 0 && options.title === undefined) {
465
+ options.title = positionals.positionalTitle;
466
+ }
467
+ if (typeof options.bodyFile === "string") {
468
+ options.body = await resolveBodyFileContent(options.bodyFile, options.body !== undefined ? String(options.body) : undefined);
469
+ delete options.bodyFile;
470
+ }
471
+ const normalized = normalizeCreateOptions(options, { requireType: false });
472
+ const { runCreate } = await import("./commands/create.js");
473
+ const result = await runCreate(normalized, globalOptions);
474
+ await invalidateSearchCachesForMutation(globalOptions, result);
475
+ printResult(result, globalOptions);
476
+ if (globalOptions.profile) {
477
+ printError(`profile:command=create took_ms=${Date.now() - startedAt}`);
478
+ }
479
+ }
480
+ function buildCloseManyListOptions(options) {
481
+ return {
482
+ type: readOptionString(options, "filterType"),
483
+ tag: readOptionString(options, "filterTag"),
484
+ priority: readOptionString(options, "filterPriority"),
485
+ deadlineBefore: readOptionString(options, "filterDeadlineBefore"),
486
+ deadlineAfter: readOptionString(options, "filterDeadlineAfter"),
487
+ updatedAfter: readOptionString(options, "filterUpdatedAfter"),
488
+ updatedBefore: readOptionString(options, "filterUpdatedBefore"),
489
+ createdAfter: readOptionString(options, "filterCreatedAfter"),
490
+ createdBefore: readOptionString(options, "filterCreatedBefore"),
491
+ ids: readOptionString(options, "ids"),
492
+ assignee: readOptionString(options, "filterAssignee"),
493
+ assigneeFilter: pickStringOption(options.filterAssigneeFilter, options.filterAssignee_filter),
494
+ parent: readOptionString(options, "filterParent"),
495
+ sprint: readOptionString(options, "filterSprint"),
496
+ release: readOptionString(options, "filterRelease"),
497
+ ...mapBulkContentAndGovernanceFilters(options),
498
+ limit: readOptionString(options, "limit"),
499
+ offset: readOptionString(options, "offset"),
500
+ };
501
+ }
502
+ async function runCloseManyAction(options, command) {
503
+ const globalOptions = getGlobalOptions(command);
504
+ const startedAt = Date.now();
505
+ const { runCloseMany } = await import("./commands/close-many.js");
506
+ const result = await runCloseMany({
507
+ status: readOptionString(options, "filterStatus"),
508
+ list: buildCloseManyListOptions(options),
509
+ reason: readOptionString(options, "reason"),
510
+ resolution: readOptionString(options, "resolution"),
511
+ expectedResult: pickStringOption(options.expectedResult, options.expected_result, options.expected),
512
+ actualResult: pickStringOption(options.actualResult, options.actual_result, options.actual),
513
+ validateClose: options.validateClose === true
514
+ ? "warn"
515
+ : readOptionString(options, "validateClose"),
516
+ author: readOptionString(options, "author"),
517
+ message: readOptionString(options, "message"),
518
+ force: Boolean(options.force),
519
+ dryRun: options.dryRun === true ? true : undefined,
520
+ rollback: readOptionString(options, "rollback"),
521
+ checkpoint: options.checkpoint === false ? false : undefined,
522
+ }, globalOptions);
523
+ await invalidateSearchCachesForMutation(globalOptions, result);
524
+ printResult(result, globalOptions);
525
+ if (globalOptions.profile) {
526
+ printError(`profile:command=close-many took_ms=${Date.now() - startedAt}`);
527
+ }
528
+ }
529
+ function normalizePlanAliases(options) {
530
+ const planOptions = { ...options };
531
+ const aliasPairs = [
532
+ ["blocked_by", "blockedBy"],
533
+ ["resume_context", "resumeContext"],
534
+ ["from_search", "fromSearch"],
535
+ ["step_title", "stepTitle"],
536
+ ["step_body", "stepBody"],
537
+ ["step_owner", "stepOwner"],
538
+ ["step_status", "stepStatus"],
539
+ ["step_evidence", "stepEvidence"],
540
+ ["step_blocked_reason", "stepBlockedReason"],
541
+ ["step_replacement", "stepReplacement"],
542
+ ["depends_on", "dependsOn"],
543
+ ["link_kind", "linkKind"],
544
+ ["link_note", "linkNote"],
545
+ ["promote_to_item_dep", "promoteToItemDep"],
546
+ ["allow_multiple_active", "allowMultipleActive"],
547
+ ["decision_text", "decisionText"],
548
+ ["decision_rationale", "decisionRationale"],
549
+ ["decision_evidence", "decisionEvidence"],
550
+ ["discovery_text", "discoveryText"],
551
+ ["validation_text", "validationText"],
552
+ ["validation_command", "validationCommand"],
553
+ ["validation_expected", "validationExpected"],
554
+ ["materialize_type", "materializeType"],
555
+ ["materialize_parent", "materializeParent"],
556
+ ["materialize_tags", "materializeTags"],
557
+ ];
558
+ for (const [snake, camel] of aliasPairs) {
559
+ if (planOptions[snake] !== undefined && planOptions[camel] === undefined) {
560
+ planOptions[camel] = planOptions[snake];
561
+ }
562
+ }
563
+ return planOptions;
564
+ }
565
+ function assertKnownPlanSubcommand(subcommand, normalized, allowed) {
566
+ if (!normalized) {
567
+ throw new PmCliError(`pm plan requires a subcommand. Allowed: ${allowed.join(", ")}`, EXIT_CODE.USAGE, {
568
+ code: "missing_required_argument",
569
+ examples: [
570
+ 'pm plan create --title "Refactor lock retry"',
571
+ "pm plan show pm-a1b2 --depth standard",
572
+ 'pm plan add-step pm-a1b2 --step-title "Read lock.ts"',
573
+ ],
574
+ });
575
+ }
576
+ if (allowed.includes(normalized)) {
577
+ return;
578
+ }
579
+ const examples = normalized === "list" || normalized === "ls" ? ['pm list --type Plan', 'pm list-all --type Plan'] : undefined;
580
+ throw new PmCliError(`Unknown pm plan subcommand "${subcommand}". Allowed: ${allowed.join(", ")}`, EXIT_CODE.USAGE, examples ? { code: "unknown_subcommand", examples } : undefined);
581
+ }
582
+ function parsePlanReorderTo(normalizedSubcommand, reorderToken) {
583
+ if (normalizedSubcommand !== "reorder-step" || typeof reorderToken !== "string") {
584
+ return undefined;
585
+ }
586
+ const parsed = Number.parseInt(reorderToken, 10);
587
+ if (!Number.isFinite(parsed)) {
588
+ throw new PmCliError(`reorder-step requires an integer new order, got "${reorderToken}"`, EXIT_CODE.USAGE);
589
+ }
590
+ return parsed;
591
+ }
592
+ async function runPlanAction(subcommand, id, stepRef, reorderToken, options, command) {
593
+ const globalOptions = getGlobalOptions(command);
594
+ const startedAt = Date.now();
595
+ const { runPlan, PLAN_SUBCOMMANDS } = await import("./commands/plan.js");
596
+ const normalizedSubcommand = (subcommand ?? "").trim().toLowerCase();
597
+ assertKnownPlanSubcommand(subcommand, normalizedSubcommand, PLAN_SUBCOMMANDS);
598
+ const planOptions = normalizePlanAliases(options);
599
+ const reorderTo = parsePlanReorderTo(normalizedSubcommand, reorderToken);
600
+ const planId = normalizedSubcommand === "create" && typeof id === "string" && id.length > 0 && planOptions.title === undefined
601
+ ? undefined
602
+ : id;
603
+ if (planId === undefined && typeof id === "string" && id.length > 0) {
604
+ planOptions.title = id;
605
+ }
606
+ const result = await runPlan({
607
+ subcommand: normalizedSubcommand,
608
+ id: planId,
609
+ stepRef,
610
+ reorderTo,
611
+ options: planOptions,
612
+ global: globalOptions,
613
+ });
614
+ await invalidateSearchCachesForMutation(globalOptions, result);
615
+ printResult(result, globalOptions);
616
+ if (globalOptions.profile) {
617
+ printError(`profile:command=plan took_ms=${Date.now() - startedAt}`);
618
+ }
619
+ }
620
+ function parseNonNegativeIntFlag(raw, flag) {
621
+ if (typeof raw !== "string") {
622
+ return undefined;
623
+ }
624
+ if (!/^\d+$/.test(raw.trim())) {
625
+ throw new PmCliError(`history-compact ${flag} must be a non-negative integer.`, EXIT_CODE.USAGE);
626
+ }
627
+ return Number.parseInt(raw, 10);
628
+ }
629
+ async function runHistoryCompactAction(id, options, command) {
630
+ const globalOptions = getGlobalOptions(command);
631
+ const startedAt = Date.now();
632
+ const { runHistoryCompact, runHistoryCompactBulk, assertHistoryCompactTarget } = await import("./commands/history-compact.js");
633
+ const ids = typeof options.ids === "string" ? splitCommaList(options.ids) : undefined;
634
+ const allOver = parseNonNegativeIntFlag(options.allOver, "--all-over");
635
+ const minEntries = parseNonNegativeIntFlag(options.minEntries, "--min-entries");
636
+ if (options.closed === true && options.allStreams === true) {
637
+ throw new PmCliError("history-compact: --closed and --all-streams are mutually exclusive; pick one lifecycle scope.", EXIT_CODE.USAGE);
638
+ }
639
+ const scope = options.closed === true ? "closed" : options.allStreams === true ? "all-streams" : undefined;
640
+ const isBulk = ids !== undefined || allOver !== undefined || scope !== undefined;
641
+ if (isBulk && typeof options.before === "string") {
642
+ throw new PmCliError("history-compact: --before applies only in single-id mode (bulk mode always compacts full streams).", EXIT_CODE.USAGE);
643
+ }
644
+ assertHistoryCompactTarget(id, { ids, allOver, scope });
645
+ if (id === undefined) {
646
+ const result = await runHistoryCompactBulk({
647
+ ids,
648
+ scope,
649
+ allOver,
650
+ minEntries,
651
+ dryRun: options.dryRun === true,
652
+ author: readOptionString(options, "author"),
653
+ message: readOptionString(options, "message"),
654
+ force: Boolean(options.force),
655
+ }, globalOptions);
656
+ printResult(result, globalOptions);
657
+ if (result.totals.items_errored > 0) {
658
+ process.exitCode = EXIT_CODE.GENERIC_FAILURE;
659
+ }
660
+ }
661
+ else {
662
+ const result = await runHistoryCompact(id, {
663
+ before: readOptionString(options, "before"),
664
+ dryRun: options.dryRun === true,
665
+ author: readOptionString(options, "author"),
666
+ message: readOptionString(options, "message"),
667
+ force: Boolean(options.force),
668
+ }, globalOptions);
669
+ printResult(result, globalOptions);
670
+ }
671
+ if (globalOptions.profile) {
672
+ printError(`profile:command=history-compact took_ms=${Date.now() - startedAt}`);
673
+ }
674
+ }
675
+ function splitCollectedCommaList(raw) {
676
+ if (!Array.isArray(raw)) {
677
+ return undefined;
678
+ }
679
+ return raw
680
+ .flatMap((value) => value.split(","))
681
+ .map((value) => value.trim())
682
+ .filter((value) => value.length > 0);
683
+ }
684
+ async function runSchemaAction(subcommand, name, options, command) {
685
+ const globalOptions = getGlobalOptions(command);
686
+ const startedAt = Date.now();
687
+ const schemaModule = await import("./commands/schema.js");
688
+ const { SCHEMA_SUBCOMMANDS } = schemaModule;
689
+ let normalizedSubcommand = (subcommand ?? "").trim().toLowerCase();
690
+ let typeName = name;
691
+ assertSchemaSubcommandPresent(normalizedSubcommand, SCHEMA_SUBCOMMANDS);
692
+ if (!SCHEMA_SUBCOMMANDS.includes(normalizedSubcommand) &&
693
+ typeName === undefined &&
694
+ !looksLikeSchemaSubcommandTypo(normalizedSubcommand)) {
695
+ typeName = subcommand;
696
+ normalizedSubcommand = "add-type";
697
+ }
698
+ if (!SCHEMA_SUBCOMMANDS.includes(normalizedSubcommand)) {
699
+ throw new PmCliError(`Unknown pm schema subcommand "${subcommand}". Allowed: ${SCHEMA_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, { code: "unknown_subcommand" });
700
+ }
701
+ const result = await dispatchSchemaSubcommand(schemaModule, {
702
+ normalizedSubcommand,
703
+ typeName,
704
+ options,
705
+ aliases: stringArrayOption(options.alias),
706
+ roles: stringArrayOption(options.role),
707
+ commands: splitCollectedCommaList(options.commands),
708
+ requiredTypes: splitCollectedCommaList(options.requiredTypes),
709
+ defaultStatus: pickStringOption(options.defaultStatus, options.default_status),
710
+ order: parseSchemaOrderOption(options.order),
711
+ minCount: parseSchemaOrderOption(options.minCount),
712
+ author: readOptionString(options, "author"),
713
+ force: Boolean(options.force),
714
+ description: readOptionString(options, "description"),
715
+ globalOptions,
716
+ });
717
+ if (globalOptions.json === true || globalOptions.defaultOutputFormat === "json") {
718
+ printResult(result, globalOptions);
719
+ }
720
+ else if (!globalOptions.quiet) {
721
+ renderSchemaResultHuman(schemaModule, result);
722
+ }
723
+ if (globalOptions.profile) {
724
+ printError(`profile:command=schema took_ms=${Date.now() - startedAt}`);
725
+ }
726
+ }
727
+ function assertSchemaSubcommandPresent(normalizedSubcommand, allowed) {
728
+ if (normalizedSubcommand) {
729
+ return;
730
+ }
731
+ throw new PmCliError(`pm schema requires a subcommand. Allowed: ${allowed.join(", ")}`, EXIT_CODE.USAGE, {
732
+ code: "missing_required_argument",
733
+ examples: [
734
+ "pm schema list",
735
+ "pm schema show Task",
736
+ "pm schema show-status open",
737
+ 'pm schema add-type Spike --description "Time-boxed investigation" --default-status open',
738
+ "pm schema remove-type Spike",
739
+ "pm schema add-status review --role active --alias in_review",
740
+ "pm schema remove-status review",
741
+ "pm schema add-field severity_level --type string --commands create,update",
742
+ "pm schema list-fields",
743
+ "pm schema apply-preset agile",
744
+ "pm schema add-type --infer --min-count 10",
745
+ ],
746
+ });
747
+ }
748
+ function resolveCommentSources(text, options) {
749
+ const editIndex = typeof options.edit === "number" ? options.edit : undefined;
750
+ const deleteIndex = typeof options.delete === "number" ? options.delete : undefined;
751
+ const addFromOption = readOptionString(options, "add");
752
+ const addFromPositional = typeof text === "string" ? text : undefined;
753
+ const readFromStdin = options.stdin === true;
754
+ const readFromFile = readOptionString(options, "file");
755
+ const sourceCount = Number(addFromOption !== undefined) +
756
+ Number(addFromPositional !== undefined) +
757
+ Number(readFromStdin) +
758
+ Number(readFromFile !== undefined);
759
+ if (sourceCount > 1) {
760
+ if (addFromOption !== undefined && addFromPositional !== undefined && !readFromStdin && readFromFile === undefined) {
761
+ throw new PmCliError("Specify comment text either as positional [text] or with --add, not both", EXIT_CODE.USAGE);
762
+ }
763
+ throw new PmCliError("Specify comment text with exactly one source: positional [text], --add, --stdin, or --file", EXIT_CODE.USAGE);
764
+ }
765
+ const add = addFromOption ?? addFromPositional;
766
+ const isMutation = typeof add === "string" || readFromStdin || readFromFile !== undefined || editIndex !== undefined || deleteIndex !== undefined;
767
+ return { add, readFromStdin, readFromFile, editIndex, deleteIndex, isMutation };
768
+ }
769
+ async function runCommentsAction(id, text, options, command) {
770
+ const globalOptions = getGlobalOptions(command);
771
+ const startedAt = Date.now();
772
+ const sources = resolveCommentSources(text, options);
773
+ const { runComments } = await import("./commands/comments.js");
774
+ const result = await runComments(id, {
775
+ add: sources.add,
776
+ stdin: sources.readFromStdin,
777
+ file: sources.readFromFile,
778
+ edit: sources.editIndex,
779
+ delete: sources.deleteIndex,
780
+ limit: readOptionString(options, "limit"),
781
+ author: readOptionString(options, "author"),
782
+ message: readOptionString(options, "message"),
783
+ allowAuditComment: Boolean(options.allowAuditComment),
784
+ force: Boolean(options.force),
785
+ }, globalOptions);
786
+ if (sources.isMutation) {
787
+ await invalidateSearchCachesForMutation(globalOptions, result);
788
+ }
789
+ printResult(result, globalOptions);
790
+ if (globalOptions.profile) {
791
+ printError(`profile:command=comments took_ms=${Date.now() - startedAt}`);
792
+ }
793
+ }
402
794
  /**
403
795
  * Implements register mutation commands for the public runtime surface of this module.
404
796
  */
@@ -421,75 +813,7 @@ export function registerMutationCommands(program) {
421
813
  .option("--clear-reminders", "Clear reminders")
422
814
  .option("--clear-events", "Clear events")
423
815
  .option("--clear-type-options", "Clear type options")
424
- .action(async (typeOrTitle, secondTitle, options, command) => {
425
- const globalOptions = getGlobalOptions(command);
426
- const startedAt = Date.now();
427
- // Support both `pm create "<title>"` and the natural subcommand-style
428
- // `pm create <type> "<title>"` so agents are never blocked by argument
429
- // count. When two positionals are given, the first is the item type.
430
- let positionalType;
431
- let positionalTitle;
432
- if (typeof secondTitle === "string" && secondTitle.length > 0) {
433
- positionalType = typeOrTitle;
434
- positionalTitle = secondTitle;
435
- }
436
- else if (typeof typeOrTitle === "string" && typeOrTitle.length > 0) {
437
- // Honor `pm create <type> --title ...` by treating the lone positional as
438
- // type when an explicit --title is already present.
439
- const explicitTitleProvided = typeof options.title === "string" && options.title.trim().length > 0;
440
- if (explicitTitleProvided && options.type === undefined) {
441
- positionalType = typeOrTitle;
442
- }
443
- else {
444
- positionalTitle = typeOrTitle;
445
- }
446
- }
447
- // pm-edge #1 (2026-05-28): when the sole positional matches a known
448
- // item type AND no --title was supplied, refuse early instead of
449
- // silently creating a Task titled with the type name (e.g. `pm create
450
- // Epic` would previously produce a Task literally titled "Epic"). The
451
- // guard fires only for the ambiguous single-positional case so the
452
- // documented `pm create <type> <title>` flow stays a never-block.
453
- if (positionalType === undefined &&
454
- typeof positionalTitle === "string" &&
455
- positionalTitle.length > 0 &&
456
- options.title === undefined &&
457
- options.type === undefined &&
458
- BUILTIN_TYPE_NAME_LOOKUP.has(positionalTitle.trim().toLowerCase())) {
459
- const matchedType = positionalTitle.trim();
460
- throw new PmCliError(`pm create needs a title — "${matchedType}" looks like an item type, not a title. Use either: pm create ${matchedType} "<title>" or pm create "<title>" --type ${matchedType}.`, EXIT_CODE.USAGE, {
461
- code: "create_positional_type_without_title",
462
- why: "Without this guard the single positional is used as the title and the type defaults to Task — so the command would silently create a Task literally titled \"" + matchedType + "\".",
463
- examples: [
464
- `pm create ${matchedType} "Wire up SSO for the agent harness"`,
465
- `pm create "Wire up SSO for the agent harness" --type ${matchedType}`,
466
- ],
467
- nextSteps: [
468
- `Re-run with both type and title: pm create ${matchedType} "<title>"`,
469
- ],
470
- });
471
- }
472
- if (typeof positionalType === "string" && positionalType.length > 0 && options.type === undefined) {
473
- options.type = positionalType;
474
- }
475
- if (typeof positionalTitle === "string" && positionalTitle.length > 0 && options.title === undefined) {
476
- options.title = positionalTitle;
477
- }
478
- // GH-214: resolve --body-file into the existing body field before
479
- // normalization so the rest of create is unchanged. CLI-only input alias.
480
- if (typeof options.bodyFile === "string") {
481
- options.body = await resolveBodyFileContent(options.bodyFile, options.body !== undefined ? String(options.body) : undefined);
482
- delete options.bodyFile;
483
- }
484
- const normalized = normalizeCreateOptions(options, { requireType: false });
485
- const { runCreate } = await import("./commands/create.js");
486
- const result = await runCreate(normalized, globalOptions);
487
- await invalidateSearchCachesForMutation(globalOptions, result);
488
- printResult(result, globalOptions);
489
- if (globalOptions.profile) {
490
- printError(`profile:command=create took_ms=${Date.now() - startedAt}`);
491
- }
492
- });
816
+ .action(runCreateAction);
493
817
  program
494
818
  .command("copy")
495
819
  .argument("<id>", "Source item id")
@@ -822,62 +1146,7 @@ export function registerMutationCommands(program) {
822
1146
  addHiddenOption(closeManyCommand, "--filter-assignee_filter <value>", "Alias for --filter-assignee-filter", false);
823
1147
  addHiddenOption(closeManyCommand, "--expected_result <value>", "Alias for --expected-result", false);
824
1148
  addHiddenOption(closeManyCommand, "--actual_result <value>", "Alias for --actual-result", false);
825
- closeManyCommand.action(async (options, command) => {
826
- const globalOptions = getGlobalOptions(command);
827
- const startedAt = Date.now();
828
- const pickString = (...candidates) => {
829
- for (const candidate of candidates) {
830
- if (typeof candidate === "string") {
831
- return candidate;
832
- }
833
- }
834
- return undefined;
835
- };
836
- const { runCloseMany } = await import("./commands/close-many.js");
837
- const result = await runCloseMany({
838
- status: typeof options.filterStatus === "string" ? options.filterStatus : undefined,
839
- list: {
840
- type: typeof options.filterType === "string" ? options.filterType : undefined,
841
- tag: typeof options.filterTag === "string" ? options.filterTag : undefined,
842
- priority: typeof options.filterPriority === "string" ? options.filterPriority : undefined,
843
- deadlineBefore: typeof options.filterDeadlineBefore === "string" ? options.filterDeadlineBefore : undefined,
844
- deadlineAfter: typeof options.filterDeadlineAfter === "string" ? options.filterDeadlineAfter : undefined,
845
- updatedAfter: typeof options.filterUpdatedAfter === "string" ? options.filterUpdatedAfter : undefined,
846
- updatedBefore: typeof options.filterUpdatedBefore === "string" ? options.filterUpdatedBefore : undefined,
847
- createdAfter: typeof options.filterCreatedAfter === "string" ? options.filterCreatedAfter : undefined,
848
- createdBefore: typeof options.filterCreatedBefore === "string" ? options.filterCreatedBefore : undefined,
849
- ids: typeof options.ids === "string" ? options.ids : undefined,
850
- assignee: typeof options.filterAssignee === "string" ? options.filterAssignee : undefined,
851
- assigneeFilter: pickString(options.filterAssigneeFilter, options.filterAssignee_filter),
852
- parent: typeof options.filterParent === "string" ? options.filterParent : undefined,
853
- sprint: typeof options.filterSprint === "string" ? options.filterSprint : undefined,
854
- release: typeof options.filterRelease === "string" ? options.filterRelease : undefined,
855
- ...mapBulkContentAndGovernanceFilters(options),
856
- limit: typeof options.limit === "string" ? options.limit : undefined,
857
- offset: typeof options.offset === "string" ? options.offset : undefined,
858
- },
859
- reason: typeof options.reason === "string" ? options.reason : undefined,
860
- resolution: typeof options.resolution === "string" ? options.resolution : undefined,
861
- expectedResult: pickString(options.expectedResult, options.expected_result, options.expected),
862
- actualResult: pickString(options.actualResult, options.actual_result, options.actual),
863
- validateClose: options.validateClose === true
864
- ? "warn"
865
- : typeof options.validateClose === "string"
866
- ? options.validateClose
867
- : undefined,
868
- author: typeof options.author === "string" ? options.author : undefined,
869
- message: typeof options.message === "string" ? options.message : undefined,
870
- force: Boolean(options.force),
871
- dryRun: options.dryRun === true ? true : undefined,
872
- rollback: typeof options.rollback === "string" ? options.rollback : undefined,
873
- checkpoint: options.checkpoint === false ? false : undefined,
874
- }, globalOptions);
875
- await invalidateSearchCachesForMutation(globalOptions, result);
876
- printResult(result, globalOptions);
877
- if (globalOptions.profile) {
878
- printError(`profile:command=close-many took_ms=${Date.now() - startedAt}`);
879
- }
880
- });
1149
+ closeManyCommand.action(runCloseManyAction);
881
1150
  program
882
1151
  .command("delete")
883
1152
  .argument("<id>", "Item id")
@@ -1063,95 +1332,7 @@ export function registerMutationCommands(program) {
1063
1332
  ]) {
1064
1333
  addHiddenOption(planCommand, flags, description, true);
1065
1334
  }
1066
- planCommand
1067
- .action(async (subcommand, id, stepRef, reorderToken, options, command) => {
1068
- const globalOptions = getGlobalOptions(command);
1069
- const startedAt = Date.now();
1070
- const { runPlan, PLAN_SUBCOMMANDS } = await import("./commands/plan.js");
1071
- const normalizedSubcommand = (subcommand ?? "").trim().toLowerCase();
1072
- if (!normalizedSubcommand) {
1073
- throw new PmCliError(`pm plan requires a subcommand. Allowed: ${PLAN_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, {
1074
- code: "missing_required_argument",
1075
- examples: [
1076
- 'pm plan create --title "Refactor lock retry"',
1077
- "pm plan show pm-a1b2 --depth standard",
1078
- 'pm plan add-step pm-a1b2 --step-title "Read lock.ts"',
1079
- ],
1080
- });
1081
- }
1082
- if (!PLAN_SUBCOMMANDS.includes(normalizedSubcommand)) {
1083
- const didYouMean = normalizedSubcommand === "list" || normalizedSubcommand === "ls"
1084
- ? ['pm list --type Plan', 'pm list-all --type Plan']
1085
- : undefined;
1086
- throw new PmCliError(`Unknown pm plan subcommand "${subcommand}". Allowed: ${PLAN_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, didYouMean ? { code: "unknown_subcommand", examples: didYouMean } : undefined);
1087
- }
1088
- const planOptions = { ...options };
1089
- // Normalize alternate-snake/camel aliases that Commander parses as different keys.
1090
- const aliasPairs = [
1091
- ["blocked_by", "blockedBy"],
1092
- ["resume_context", "resumeContext"],
1093
- ["from_search", "fromSearch"],
1094
- // pm-6mit: "step" is no longer folded into stepTitle here — it is a
1095
- // first-class repeatable option normalized inside runPlan (create
1096
- // accumulates ordered steps; other subcommands accept a single value
1097
- // as a stepTitle alias).
1098
- ["step_title", "stepTitle"],
1099
- ["step_body", "stepBody"],
1100
- ["step_owner", "stepOwner"],
1101
- ["step_status", "stepStatus"],
1102
- ["step_evidence", "stepEvidence"],
1103
- ["step_blocked_reason", "stepBlockedReason"],
1104
- ["step_replacement", "stepReplacement"],
1105
- ["depends_on", "dependsOn"],
1106
- ["link_kind", "linkKind"],
1107
- ["link_note", "linkNote"],
1108
- ["promote_to_item_dep", "promoteToItemDep"],
1109
- ["allow_multiple_active", "allowMultipleActive"],
1110
- ["decision_text", "decisionText"],
1111
- ["decision_rationale", "decisionRationale"],
1112
- ["decision_evidence", "decisionEvidence"],
1113
- ["discovery_text", "discoveryText"],
1114
- ["validation_text", "validationText"],
1115
- ["validation_command", "validationCommand"],
1116
- ["validation_expected", "validationExpected"],
1117
- ["materialize_type", "materializeType"],
1118
- ["materialize_parent", "materializeParent"],
1119
- ["materialize_tags", "materializeTags"],
1120
- ];
1121
- for (const [snake, camel] of aliasPairs) {
1122
- if (planOptions[snake] !== undefined && planOptions[camel] === undefined) {
1123
- planOptions[camel] = planOptions[snake];
1124
- }
1125
- }
1126
- let reorderTo;
1127
- if (normalizedSubcommand === "reorder-step" && typeof reorderToken === "string") {
1128
- const parsed = Number.parseInt(reorderToken, 10);
1129
- if (!Number.isFinite(parsed)) {
1130
- throw new PmCliError(`reorder-step requires an integer new order, got "${reorderToken}"`, EXIT_CODE.USAGE);
1131
- }
1132
- reorderTo = parsed;
1133
- }
1134
- // Allow positional title for `pm plan create "Title"` (mirrors pm create UX).
1135
- // Plan create never takes an id positional; the second token is the title.
1136
- let planId = id;
1137
- if (normalizedSubcommand === "create" && typeof id === "string" && id.length > 0 && planOptions.title === undefined) {
1138
- planOptions.title = id;
1139
- planId = undefined;
1140
- }
1141
- const result = await runPlan({
1142
- subcommand: normalizedSubcommand,
1143
- id: planId,
1144
- stepRef,
1145
- reorderTo,
1146
- options: planOptions,
1147
- global: globalOptions,
1148
- });
1149
- await invalidateSearchCachesForMutation(globalOptions, result);
1150
- printResult(result, globalOptions);
1151
- if (globalOptions.profile) {
1152
- printError(`profile:command=plan took_ms=${Date.now() - startedAt}`);
1153
- }
1154
- });
1335
+ planCommand.action(runPlanAction);
1155
1336
  void planCommand;
1156
1337
  program
1157
1338
  .command("history-redact")
@@ -1241,65 +1422,7 @@ export function registerMutationCommands(program) {
1241
1422
  .option("--message <value>", "Audit history message for the compaction marker entry")
1242
1423
  .option("--force", "Force ownership/lock override")
1243
1424
  .description("Compact item history streams into a synthetic baseline plus retained tail entries. Pass an item id for one stream, or a bulk selector (--ids/--all-over/--closed/--all-streams) to compact many.")
1244
- .action(async (id, options, command) => {
1245
- const globalOptions = getGlobalOptions(command);
1246
- const startedAt = Date.now();
1247
- const { runHistoryCompact, runHistoryCompactBulk, assertHistoryCompactTarget } = await import("./commands/history-compact.js");
1248
- const parseNonNegativeIntFlag = (raw, flag) => {
1249
- if (typeof raw !== "string") {
1250
- return undefined;
1251
- }
1252
- // Strict: reject "10abc"/"3.5"/"-3" that Number.parseInt would silently truncate.
1253
- if (!/^\d+$/.test(raw.trim())) {
1254
- throw new PmCliError(`history-compact ${flag} must be a non-negative integer.`, EXIT_CODE.USAGE);
1255
- }
1256
- return Number.parseInt(raw, 10);
1257
- };
1258
- const ids = typeof options.ids === "string" ? splitCommaList(options.ids) : undefined;
1259
- const allOver = parseNonNegativeIntFlag(options.allOver, "--all-over");
1260
- const minEntries = parseNonNegativeIntFlag(options.minEntries, "--min-entries");
1261
- if (options.closed === true && options.allStreams === true) {
1262
- throw new PmCliError("history-compact: --closed and --all-streams are mutually exclusive; pick one lifecycle scope.", EXIT_CODE.USAGE);
1263
- }
1264
- const scope = options.closed === true ? "closed" : options.allStreams === true ? "all-streams" : undefined;
1265
- const isBulk = ids !== undefined || allOver !== undefined || scope !== undefined;
1266
- if (isBulk && typeof options.before === "string") {
1267
- throw new PmCliError("history-compact: --before applies only in single-id mode (bulk mode always compacts full streams).", EXIT_CODE.USAGE);
1268
- }
1269
- assertHistoryCompactTarget(id, { ids, allOver, scope });
1270
- if (id === undefined) {
1271
- const result = await runHistoryCompactBulk({
1272
- ids,
1273
- scope,
1274
- allOver,
1275
- minEntries,
1276
- dryRun: options.dryRun === true,
1277
- author: typeof options.author === "string" ? options.author : undefined,
1278
- message: typeof options.message === "string" ? options.message : undefined,
1279
- force: Boolean(options.force),
1280
- }, globalOptions);
1281
- printResult(result, globalOptions);
1282
- if (result.totals.items_errored > 0) {
1283
- // One failing stream never aborts the pass, but the command must still
1284
- // fail for gating callers.
1285
- process.exitCode = EXIT_CODE.GENERIC_FAILURE;
1286
- }
1287
- }
1288
- else {
1289
- const result = await runHistoryCompact(id, {
1290
- before: typeof options.before === "string" ? options.before : undefined,
1291
- dryRun: options.dryRun === true,
1292
- author: typeof options.author === "string" ? options.author : undefined,
1293
- message: typeof options.message === "string" ? options.message : undefined,
1294
- force: Boolean(options.force),
1295
- }, globalOptions);
1296
- printResult(result, globalOptions);
1297
- }
1298
- // history-compact only rewrites the history stream; item content is untouched.
1299
- if (globalOptions.profile) {
1300
- printError(`profile:command=history-compact took_ms=${Date.now() - startedAt}`);
1301
- }
1302
- });
1425
+ .action(runHistoryCompactAction);
1303
1426
  const schemaCommand = program
1304
1427
  .command("schema")
1305
1428
  .argument("[subcommand]", "Schema subcommand: list, show, show-status, add-type, remove-type, add-status, remove-status, or a custom item type name shorthand")
@@ -1326,105 +1449,7 @@ export function registerMutationCommands(program) {
1326
1449
  // Hidden pure snake_case underscore-duplicate alias.
1327
1450
  addHiddenOption(schemaCommand, "--default_status <status>", "Alias for --default-status", false);
1328
1451
  schemaCommand
1329
- .action(async (subcommand, name, options, command) => {
1330
- const globalOptions = getGlobalOptions(command);
1331
- const startedAt = Date.now();
1332
- const schemaModule = await import("./commands/schema.js");
1333
- const { SCHEMA_SUBCOMMANDS } = schemaModule;
1334
- let normalizedSubcommand = (subcommand ?? "").trim().toLowerCase();
1335
- let typeName = name;
1336
- if (!normalizedSubcommand) {
1337
- throw new PmCliError(`pm schema requires a subcommand. Allowed: ${SCHEMA_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, {
1338
- code: "missing_required_argument",
1339
- examples: [
1340
- "pm schema list",
1341
- "pm schema show Task",
1342
- "pm schema show-status open",
1343
- 'pm schema add-type Spike --description "Time-boxed investigation" --default-status open',
1344
- "pm schema remove-type Spike",
1345
- "pm schema add-status review --role active --alias in_review",
1346
- "pm schema remove-status review",
1347
- "pm schema add-field severity_level --type string --commands create,update",
1348
- "pm schema list-fields",
1349
- "pm schema apply-preset agile",
1350
- "pm schema add-type --infer --min-count 10",
1351
- ],
1352
- });
1353
- }
1354
- const aliases =
1355
- /* c8 ignore next -- --alias is registered with commander `collect`, so it is always an array here; the string arm is a defensive guard for non-CLI (programmatic) callers */
1356
- typeof options.alias === "string"
1357
- ? [options.alias]
1358
- : Array.isArray(options.alias)
1359
- ? options.alias
1360
- : undefined;
1361
- const roles =
1362
- /* c8 ignore next -- --role is registered with commander `collect`, so it is always an array here; the string arm is a defensive guard for non-CLI (programmatic) callers */
1363
- typeof options.role === "string"
1364
- ? [options.role]
1365
- : Array.isArray(options.role)
1366
- ? options.role
1367
- : undefined;
1368
- const defaultStatus = typeof options.defaultStatus === "string"
1369
- ? options.defaultStatus
1370
- : typeof options.default_status === "string"
1371
- ? options.default_status
1372
- : undefined;
1373
- const order = parseSchemaOrderOption(options.order);
1374
- // --commands/--required-types are repeatable Commander `collect` flags, so
1375
- // their value is always a string[] (or undefined when omitted); each entry
1376
- // may itself be a comma-list, which we split and flatten here.
1377
- const splitCollectedCommaList = (raw) => {
1378
- if (!Array.isArray(raw)) {
1379
- return undefined;
1380
- }
1381
- return raw
1382
- .flatMap((value) => value.split(","))
1383
- .map((value) => value.trim())
1384
- .filter((value) => value.length > 0);
1385
- };
1386
- const commands = splitCollectedCommaList(options.commands);
1387
- const requiredTypes = splitCollectedCommaList(options.requiredTypes);
1388
- const minCount = parseSchemaOrderOption(options.minCount);
1389
- if (!SCHEMA_SUBCOMMANDS.includes(normalizedSubcommand) &&
1390
- typeName === undefined &&
1391
- !looksLikeSchemaSubcommandTypo(normalizedSubcommand)) {
1392
- typeName = subcommand;
1393
- normalizedSubcommand = "add-type";
1394
- }
1395
- if (!SCHEMA_SUBCOMMANDS.includes(normalizedSubcommand)) {
1396
- throw new PmCliError(`Unknown pm schema subcommand "${subcommand}". Allowed: ${SCHEMA_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, { code: "unknown_subcommand" });
1397
- }
1398
- const author = typeof options.author === "string" ? options.author : undefined;
1399
- const force = Boolean(options.force);
1400
- const description = typeof options.description === "string" ? options.description : undefined;
1401
- const result = await dispatchSchemaSubcommand(schemaModule, {
1402
- normalizedSubcommand,
1403
- typeName,
1404
- options,
1405
- aliases,
1406
- roles,
1407
- commands,
1408
- requiredTypes,
1409
- defaultStatus,
1410
- order,
1411
- minCount,
1412
- author,
1413
- force,
1414
- description,
1415
- globalOptions,
1416
- });
1417
- // Schema inspection and type registration do not touch item content, so search caches stay valid.
1418
- if (globalOptions.json === true || globalOptions.defaultOutputFormat === "json") {
1419
- printResult(result, globalOptions);
1420
- }
1421
- else if (!globalOptions.quiet) {
1422
- renderSchemaResultHuman(schemaModule, result);
1423
- }
1424
- if (globalOptions.profile) {
1425
- printError(`profile:command=schema took_ms=${Date.now() - startedAt}`);
1426
- }
1427
- });
1452
+ .action(runSchemaAction);
1428
1453
  const profileCommand = program
1429
1454
  .command("profile")
1430
1455
  .argument("[subcommand]", "Profile subcommand: list, show, apply, or lint")
@@ -1481,48 +1506,7 @@ export function registerMutationCommands(program) {
1481
1506
  .option("--allow-audit-comment", "Allow non-owner append-only comment audits (add/edit/delete) without requiring --force")
1482
1507
  .option("--force", "Force ownership override")
1483
1508
  .description("List, add, edit, or delete comments for an item.")
1484
- .action(async (id, text, options, command) => {
1485
- const globalOptions = getGlobalOptions(command);
1486
- const startedAt = Date.now();
1487
- const editIndex = typeof options.edit === "number" ? options.edit : undefined;
1488
- const deleteIndex = typeof options.delete === "number" ? options.delete : undefined;
1489
- const addFromOption = typeof options.add === "string" ? options.add : undefined;
1490
- const addFromPositional = typeof text === "string" ? text : undefined;
1491
- const readFromStdin = options.stdin === true;
1492
- const readFromFile = typeof options.file === "string" ? options.file : undefined;
1493
- const sourceCount = Number(addFromOption !== undefined) +
1494
- Number(addFromPositional !== undefined) +
1495
- Number(readFromStdin) +
1496
- Number(readFromFile !== undefined);
1497
- if (sourceCount > 1) {
1498
- if (addFromOption !== undefined && addFromPositional !== undefined && !readFromStdin && readFromFile === undefined) {
1499
- throw new PmCliError("Specify comment text either as positional [text] or with --add, not both", EXIT_CODE.USAGE);
1500
- }
1501
- throw new PmCliError("Specify comment text with exactly one source: positional [text], --add, --stdin, or --file", EXIT_CODE.USAGE);
1502
- }
1503
- const add = addFromOption ?? addFromPositional;
1504
- const { runComments } = await import("./commands/comments.js");
1505
- const result = await runComments(id, {
1506
- add,
1507
- stdin: readFromStdin,
1508
- file: readFromFile,
1509
- edit: editIndex,
1510
- delete: deleteIndex,
1511
- limit: typeof options.limit === "string" ? options.limit : undefined,
1512
- author: typeof options.author === "string" ? options.author : undefined,
1513
- message: typeof options.message === "string" ? options.message : undefined,
1514
- allowAuditComment: Boolean(options.allowAuditComment),
1515
- force: Boolean(options.force),
1516
- }, globalOptions);
1517
- const isMutation = typeof add === "string" || readFromStdin || readFromFile !== undefined || editIndex !== undefined || deleteIndex !== undefined;
1518
- if (isMutation) {
1519
- await invalidateSearchCachesForMutation(globalOptions, result);
1520
- }
1521
- printResult(result, globalOptions);
1522
- if (globalOptions.profile) {
1523
- printError(`profile:command=comments took_ms=${Date.now() - startedAt}`);
1524
- }
1525
- });
1509
+ .action(runCommentsAction);
1526
1510
  program
1527
1511
  .command("notes")
1528
1512
  .argument("<id>", "Item id")
@@ -1753,4 +1737,4 @@ export function registerMutationCommands(program) {
1753
1737
  });
1754
1738
  }
1755
1739
  //# sourceMappingURL=register-mutation.js.map
1756
- //# debugId=703247b2-e81d-5a78-999d-6d493a4cf9bf
1740
+ //# debugId=6581ddaf-4643-5ccc-9aff-1569d1759846