@unbrained/pm-cli 2026.7.1 → 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 (563) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cli/commander-usage.d.ts +2 -0
  3. package/dist/cli/commander-usage.js +58 -47
  4. package/dist/cli/commander-usage.js.map +1 -1
  5. package/dist/cli/commands/aggregate.js +102 -79
  6. package/dist/cli/commands/aggregate.js.map +1 -1
  7. package/dist/cli/commands/calendar.js +278 -243
  8. package/dist/cli/commands/calendar.js.map +1 -1
  9. package/dist/cli/commands/close-many.js +89 -68
  10. package/dist/cli/commands/close-many.js.map +1 -1
  11. package/dist/cli/commands/close.js +157 -129
  12. package/dist/cli/commands/close.js.map +1 -1
  13. package/dist/cli/commands/comments-audit.js +50 -42
  14. package/dist/cli/commands/comments-audit.js.map +1 -1
  15. package/dist/cli/commands/config.d.ts +2 -0
  16. package/dist/cli/commands/config.js +443 -879
  17. package/dist/cli/commands/config.js.map +1 -1
  18. package/dist/cli/commands/context.js +365 -287
  19. package/dist/cli/commands/context.js.map +1 -1
  20. package/dist/cli/commands/contracts.js +352 -238
  21. package/dist/cli/commands/contracts.js.map +1 -1
  22. package/dist/cli/commands/dedupe-audit.js +46 -39
  23. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  24. package/dist/cli/commands/dedupe-merge.js +88 -69
  25. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  26. package/dist/cli/commands/get.js +114 -81
  27. package/dist/cli/commands/get.js.map +1 -1
  28. package/dist/cli/commands/health.d.ts +17 -0
  29. package/dist/cli/commands/health.js +446 -307
  30. package/dist/cli/commands/health.js.map +1 -1
  31. package/dist/cli/commands/history-compact.js +209 -140
  32. package/dist/cli/commands/history-compact.js.map +1 -1
  33. package/dist/cli/commands/history-redact.js +162 -119
  34. package/dist/cli/commands/history-redact.js.map +1 -1
  35. package/dist/cli/commands/history-repair.js +120 -85
  36. package/dist/cli/commands/history-repair.js.map +1 -1
  37. package/dist/cli/commands/init.d.ts +8 -2
  38. package/dist/cli/commands/init.js +263 -162
  39. package/dist/cli/commands/init.js.map +1 -1
  40. package/dist/cli/commands/list.js +152 -102
  41. package/dist/cli/commands/list.js.map +1 -1
  42. package/dist/cli/commands/next.js +49 -32
  43. package/dist/cli/commands/next.js.map +1 -1
  44. package/dist/cli/commands/plan.js +373 -298
  45. package/dist/cli/commands/plan.js.map +1 -1
  46. package/dist/cli/commands/recurrence-parsers.js +43 -25
  47. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  48. package/dist/cli/commands/reindex.d.ts +21 -5
  49. package/dist/cli/commands/reindex.js +345 -205
  50. package/dist/cli/commands/reindex.js.map +1 -1
  51. package/dist/cli/commands/restore.d.ts +8 -7
  52. package/dist/cli/commands/restore.js +105 -69
  53. package/dist/cli/commands/restore.js.map +1 -1
  54. package/dist/cli/commands/schema.js +33 -30
  55. package/dist/cli/commands/schema.js.map +1 -1
  56. package/dist/cli/commands/search.d.ts +10 -2
  57. package/dist/cli/commands/search.js +503 -470
  58. package/dist/cli/commands/search.js.map +1 -1
  59. package/dist/cli/commands/telemetry.js +98 -87
  60. package/dist/cli/commands/telemetry.js.map +1 -1
  61. package/dist/cli/commands/test-all.js +237 -168
  62. package/dist/cli/commands/test-all.js.map +1 -1
  63. package/dist/cli/commands/test.d.ts +6 -5
  64. package/dist/cli/commands/test.js +424 -344
  65. package/dist/cli/commands/test.js.map +1 -1
  66. package/dist/cli/commands/update-many.js +57 -42
  67. package/dist/cli/commands/update-many.js.map +1 -1
  68. package/dist/cli/commands/update.d.ts +1 -1
  69. package/dist/cli/commands/update.js +738 -671
  70. package/dist/cli/commands/update.js.map +1 -1
  71. package/dist/cli/commands/validate.d.ts +18 -1
  72. package/dist/cli/commands/validate.js +466 -343
  73. package/dist/cli/commands/validate.js.map +1 -1
  74. package/dist/cli/error-guidance.js +399 -357
  75. package/dist/cli/error-guidance.js.map +1 -1
  76. package/dist/cli/main.d.ts +47 -0
  77. package/dist/cli/main.js +428 -341
  78. package/dist/cli/main.js.map +1 -1
  79. package/dist/cli/migration-gates.js +22 -45
  80. package/dist/cli/migration-gates.js.map +1 -1
  81. package/dist/cli/register-list-query.js +94 -105
  82. package/dist/cli/register-list-query.js.map +1 -1
  83. package/dist/cli/register-mutation.js +400 -416
  84. package/dist/cli/register-mutation.js.map +1 -1
  85. package/dist/cli/register-operations.js +86 -66
  86. package/dist/cli/register-operations.js.map +1 -1
  87. package/dist/cli/register-setup.js +120 -101
  88. package/dist/cli/register-setup.js.map +1 -1
  89. package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js → activity-CUC4JY3U.js} +9 -9
  90. package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
  91. package/dist/cli-bundle/chunks/{aggregate-JTEF4BP7.js → aggregate-DKUTRY6R.js} +108 -84
  92. package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
  93. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js → aggregate-SW5PNGCS.js} +107 -83
  94. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js.map → aggregate-SW5PNGCS.js.map} +2 -2
  95. package/dist/cli-bundle/chunks/{append-QCFJSDFL.js → append-H32VOR2Y.js} +6 -6
  96. package/dist/cli-bundle/chunks/{append-LOVPGVPT.js → append-UBM632FK.js} +6 -6
  97. package/dist/cli-bundle/chunks/{chunk-RLDHZHQS.js → chunk-2227673O.js} +158 -114
  98. package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
  99. package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js → chunk-2ASNV4DH.js} +4 -4
  100. package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js → chunk-2CHRYUXL.js} +2 -2
  101. package/dist/cli-bundle/chunks/{chunk-NWMZWYYB.js → chunk-2KWL5NPW.js} +42 -27
  102. package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
  103. package/dist/cli-bundle/chunks/{chunk-NFDPYAIP.js → chunk-36UGKF4O.js} +21 -29
  104. package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
  105. package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js → chunk-3AZUFQK6.js} +6 -6
  106. package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js → chunk-3LCUASYG.js} +2 -2
  107. package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js → chunk-3Q2HBMTI.js} +2 -2
  108. package/dist/cli-bundle/chunks/{chunk-IPYBJWTE.js → chunk-4NUOWFBT.js} +109 -72
  109. package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
  110. package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js → chunk-55XRYWEG.js} +6 -6
  111. package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js → chunk-5GVTFFTC.js} +2 -2
  112. package/dist/cli-bundle/chunks/{chunk-BDTISOSD.js → chunk-5PGBHRY3.js} +41 -26
  113. package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-YITK2PJ6.js → chunk-66Z3X7ZG.js} +261 -161
  115. package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-NUHHPVVS.js → chunk-6ITZLD4T.js} +712 -612
  117. package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
  118. package/dist/cli-bundle/chunks/{chunk-V3NOKJF2.js → chunk-6YCYF2AI.js} +262 -162
  119. package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
  120. package/dist/cli-bundle/chunks/{chunk-BZCEN4JA.js → chunk-6ZMBJRDJ.js} +492 -403
  121. package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
  122. package/dist/cli-bundle/chunks/{chunk-CF7RL6FR.js → chunk-7MYWF4ZX.js} +110 -73
  123. package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
  124. package/dist/cli-bundle/chunks/{chunk-RVUALSJF.js → chunk-7NSPKJUS.js} +356 -285
  125. package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
  126. package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js → chunk-7TH5NMVB.js} +95 -53
  127. package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-ZETXE4SE.js → chunk-7W4H4K26.js} +713 -613
  129. package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js → chunk-A6VOGKBA.js} +6 -6
  131. package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js → chunk-AIAIXG7I.js} +2 -2
  132. package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js → chunk-AJEBCRIY.js} +5 -5
  133. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  134. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  135. package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js → chunk-BTX5MIQF.js} +2 -2
  136. package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js → chunk-BVZZN2LH.js} +3 -3
  137. package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js → chunk-CYBDUHNO.js} +3 -3
  138. package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js → chunk-CZPVDLD2.js} +4 -4
  139. package/dist/cli-bundle/chunks/{chunk-3VGN2UWE.js → chunk-EMPGXBUF.js} +22 -30
  140. package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
  141. package/dist/cli-bundle/chunks/{chunk-JPECA746.js → chunk-EUKTMRN3.js} +2 -2
  142. package/dist/cli-bundle/chunks/{chunk-2466X6E4.js → chunk-FFOQHGNH.js} +6 -6
  143. package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js → chunk-GFMSLORL.js} +6 -6
  144. package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js → chunk-GRRG3MCT.js} +4 -4
  145. package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js → chunk-H4GRLYJS.js} +3 -3
  146. package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js → chunk-HQTPRV4D.js} +6 -6
  147. package/dist/cli-bundle/chunks/{chunk-7R4QEMZZ.js → chunk-I66WE2HE.js} +354 -283
  148. package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
  149. package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js → chunk-IEEJQCZ4.js} +3 -3
  150. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js → chunk-IG5JYZGU.js} +390 -312
  151. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js.map → chunk-IG5JYZGU.js.map} +2 -2
  152. package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js → chunk-JMK5GCK2.js} +2 -2
  153. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js → chunk-JXAUVO6X.js} +258 -169
  154. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js.map → chunk-JXAUVO6X.js.map} +2 -2
  155. package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js → chunk-K2VYLVX4.js} +2 -2
  156. package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js → chunk-KCO2EAN5.js} +3 -3
  157. package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js → chunk-KIYCOJ63.js} +4 -4
  158. package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js → chunk-KLXF7NCC.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js → chunk-KN3URLKS.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js → chunk-LRKMWUUV.js} +2 -2
  161. package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js → chunk-LTRAF2D7.js} +3 -3
  162. package/dist/cli-bundle/chunks/{chunk-VARHOHYV.js → chunk-MNBPX5JS.js} +55 -36
  163. package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
  164. package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js → chunk-MRD4T5LF.js} +2 -2
  165. package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js → chunk-N2JSWVWG.js} +4 -4
  166. package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js → chunk-N3QCJS4M.js} +6 -6
  167. package/dist/cli-bundle/chunks/{chunk-JSU5P7VS.js → chunk-NRZS637N.js} +258 -169
  168. package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
  169. package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js → chunk-OTUJZKGI.js} +3 -3
  170. package/dist/cli-bundle/chunks/{chunk-5CGRF3L5.js → chunk-Q6K2OACU.js} +153 -90
  171. package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
  172. package/dist/cli-bundle/chunks/{chunk-3XZCOZ5J.js → chunk-Q6NXOHS6.js} +391 -313
  173. package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
  174. package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js → chunk-QH3FSKRJ.js} +2 -2
  175. package/dist/cli-bundle/chunks/{chunk-4XOIEKSD.js → chunk-RM37OPYK.js} +56 -37
  176. package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
  177. package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js → chunk-S62UANU7.js} +3 -3
  178. package/dist/cli-bundle/chunks/{chunk-RMMQ74TG.js → chunk-SPM2XLWI.js} +37 -28
  179. package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
  180. package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js → chunk-SYNKD3ZG.js} +5 -5
  181. package/dist/cli-bundle/chunks/{chunk-FFMQB7WR.js → chunk-SYVUU7EK.js} +493 -404
  182. package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
  183. package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js → chunk-TPOFWBMY.js} +95 -53
  184. package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
  185. package/dist/cli-bundle/chunks/{chunk-OTUHB4HS.js → chunk-TTHCEV5Q.js} +92 -77
  186. package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js → chunk-U2BEEM2X.js} +3 -3
  188. package/dist/cli-bundle/chunks/{chunk-KNPEF7QG.js → chunk-UGLU6Q2I.js} +91 -76
  189. package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
  190. package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js → chunk-UT73HUPC.js} +3 -3
  191. package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js → chunk-UTSH5GWX.js} +4 -4
  192. package/dist/cli-bundle/chunks/{chunk-IZBR4NRW.js → chunk-UWKEJMZU.js} +157 -113
  193. package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
  194. package/dist/cli-bundle/chunks/{chunk-3S2KT7NG.js → chunk-W47SML5B.js} +152 -89
  195. package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
  196. package/dist/cli-bundle/chunks/{chunk-RGEMWD6Q.js → chunk-WJAMWAHZ.js} +157 -118
  197. package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
  198. package/dist/cli-bundle/chunks/{chunk-JWXRETDF.js → chunk-XCHUVHKU.js} +626 -484
  199. package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
  200. package/dist/cli-bundle/chunks/{chunk-55SNVXRQ.js → chunk-XEWQKDYZ.js} +626 -484
  201. package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
  202. package/dist/cli-bundle/chunks/{chunk-TP5Q5ZD3.js → chunk-XTHQWXVC.js} +158 -119
  203. package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
  204. package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js → chunk-XWGEMNBR.js} +2 -2
  205. package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js → chunk-Y4NRKBFW.js} +3 -3
  206. package/dist/cli-bundle/chunks/{chunk-2D4HATP2.js → chunk-YLZZ6T54.js} +38 -29
  207. package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
  208. package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js → chunk-YPKFV2JR.js} +6 -6
  209. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  210. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  211. package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js → chunk-ZNHEYCDD.js} +2 -2
  212. package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js → chunk-ZNT7KEWE.js} +2 -2
  213. package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js → claim-SENTPZBN.js} +8 -8
  214. package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js → claim-Z7MEQCBT.js} +8 -8
  215. package/dist/cli-bundle/chunks/{close-TQYAAFJP.js → close-424MX4CU.js} +7 -7
  216. package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
  217. package/dist/cli-bundle/chunks/{close-many-LDRVEQY2.js → close-many-2IV4J2TR.js} +102 -81
  218. package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
  219. package/dist/cli-bundle/chunks/{close-many-BG5QQIDQ.js → close-many-SWY34BII.js} +101 -80
  220. package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
  221. package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js → comments-4FGNTSNV.js} +8 -8
  222. package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js → comments-7YS5MY5X.js} +8 -8
  223. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
  224. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
  225. package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
  226. package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
  227. package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js → context-LHVKJSPJ.js} +12 -12
  228. package/dist/cli-bundle/chunks/{context-B6275WPX.js → context-ZQY54JNS.js} +12 -12
  229. package/dist/cli-bundle/chunks/{contracts-HN7ABKLP.js → contracts-CP2EZJC7.js} +320 -199
  230. package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
  231. package/dist/cli-bundle/chunks/{contracts-W4FZVVD6.js → contracts-FIZLMP7O.js} +321 -200
  232. package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
  233. package/dist/cli-bundle/chunks/{copy-DEM4DATS.js → copy-GYNQQPW2.js} +5 -5
  234. package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js → copy-TLW7JTQT.js} +5 -5
  235. package/dist/cli-bundle/chunks/{create-RLRJMRTM.js → create-VSKYSOCD.js} +12 -12
  236. package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
  237. package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js → delete-4W5JYCEG.js} +5 -5
  238. package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js → delete-ANTOTI2I.js} +5 -5
  239. package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js → deps-HPPE6MJN.js} +5 -5
  240. package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js → deps-ZQZN54EZ.js} +5 -5
  241. package/dist/cli-bundle/chunks/{docs-GYZNVS26.js → docs-RPOVFMP3.js} +7 -7
  242. package/dist/cli-bundle/chunks/{docs-26S44RXU.js → docs-XJNYBJGE.js} +7 -7
  243. package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js → eval-DM6JBZTS.js} +10 -10
  244. package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js → eval-RFBI5FGS.js} +10 -10
  245. package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js → extension-B3YY4WY5.js} +11 -11
  246. package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js → extension-TTSEFQTS.js} +11 -11
  247. package/dist/cli-bundle/chunks/{files-NQHEXUZD.js → files-5D65CHGE.js} +7 -7
  248. package/dist/cli-bundle/chunks/{files-MBNICQFM.js → files-GPIG77EN.js} +7 -7
  249. package/dist/cli-bundle/chunks/{focus-XZW5423D.js → focus-C3PEJV2C.js} +6 -6
  250. package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js → focus-ZHN7WIGX.js} +6 -6
  251. package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js → gc-D4JQ6OWN.js} +3 -3
  252. package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js → gc-VZIXDL32.js} +3 -3
  253. package/dist/cli-bundle/chunks/{get-DSDEKJ3L.js → get-GIBRUUOP.js} +121 -81
  254. package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
  255. package/dist/cli-bundle/chunks/{get-A7MAOHCU.js → get-IOVAN6RU.js} +120 -80
  256. package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
  257. package/dist/cli-bundle/chunks/{health-3IPFLKXB.js → health-L2U3AFKV.js} +437 -265
  258. package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
  259. package/dist/cli-bundle/chunks/{health-GZXGBZ36.js → health-MM7AWXYF.js} +436 -264
  260. package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
  261. package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
  262. package/dist/cli-bundle/chunks/{history-NERDJNUB.js → history-IL7XCEX2.js} +8 -8
  263. package/dist/cli-bundle/chunks/{history-compact-HR7BB4LR.js → history-compact-HALOTOU7.js} +214 -135
  264. package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
  265. package/dist/cli-bundle/chunks/{history-compact-2WRZ2WK4.js → history-compact-MV25P7DM.js} +213 -134
  266. package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
  267. package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
  268. package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js → history-redact-VYCWQFK7.js} +9 -9
  269. package/dist/cli-bundle/chunks/{history-repair-XA3LC4GA.js → history-repair-44MODPQF.js} +124 -84
  270. package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
  271. package/dist/cli-bundle/chunks/{history-repair-LCMOS45X.js → history-repair-CPNAOCNF.js} +123 -83
  272. package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
  273. package/dist/cli-bundle/chunks/{init-64XDLQJB.js → init-F27NHENZ.js} +12 -12
  274. package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
  275. package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js → learnings-HJVDQIGY.js} +8 -8
  276. package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js → learnings-XSFSUUWK.js} +8 -8
  277. package/dist/cli-bundle/chunks/{list-G5Y65VF6.js → list-HPMEKCAA.js} +8 -8
  278. package/dist/cli-bundle/chunks/{list-DNBJVO3E.js → list-VMPWTURB.js} +8 -8
  279. package/dist/cli-bundle/chunks/{next-BCERKDUR.js → next-ETXF2ZCN.js} +59 -37
  280. package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
  281. package/dist/cli-bundle/chunks/{next-FYTQF6HG.js → next-QM6YJIIS.js} +60 -38
  282. package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
  283. package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js → notes-GDZIKGR6.js} +8 -8
  284. package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js → notes-WDDBPC4D.js} +8 -8
  285. package/dist/cli-bundle/chunks/{plan-RKZHQVXR.js → plan-BGDR73Z6.js} +373 -279
  286. package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
  287. package/dist/cli-bundle/chunks/{plan-4WXEQCTN.js → plan-C5IMM335.js} +372 -278
  288. package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
  289. package/dist/cli-bundle/chunks/{profile-QLER5ENE.js → profile-CCOKZ2IQ.js} +9 -9
  290. package/dist/cli-bundle/chunks/{profile-4OMM32CD.js → profile-HUCENIEQ.js} +9 -9
  291. package/dist/cli-bundle/chunks/{register-list-query-7LV46VAU.js → register-list-query-ROSNIL52.js} +80 -83
  292. package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
  293. package/dist/cli-bundle/chunks/{register-list-query-SNG5PGA4.js → register-list-query-XN4ZRHSV.js} +79 -82
  294. package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
  295. package/dist/cli-bundle/chunks/{register-mutation-ENNDUAZG.js → register-mutation-CFSB2MS3.js} +403 -382
  296. package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
  297. package/dist/cli-bundle/chunks/{register-mutation-KK7PHYYU.js → register-mutation-KRLAHEL2.js} +402 -381
  298. package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
  299. package/dist/cli-bundle/chunks/{register-operations-HZ6XERQG.js → register-operations-4PASGJDB.js} +112 -93
  300. package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
  301. package/dist/cli-bundle/chunks/{register-operations-C6OWLDSH.js → register-operations-MBN4KGUM.js} +113 -94
  302. package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
  303. package/dist/cli-bundle/chunks/{register-setup-P67EMBDJ.js → register-setup-VIAWYFP5.js} +129 -104
  304. package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
  305. package/dist/cli-bundle/chunks/{register-setup-ZKJ53RS7.js → register-setup-ZCGKHDKL.js} +128 -103
  306. package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
  307. package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js → restore-4CBWUMCX.js} +9 -9
  308. package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
  309. package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
  310. package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
  311. package/dist/cli-bundle/chunks/{schema-73HR2OJW.js → schema-TDGK6N3I.js} +7 -7
  312. package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js → schema-UE5KKAUX.js} +7 -7
  313. package/dist/cli-bundle/chunks/{search-KILGT37L.js → search-FP7MEU4S.js} +10 -10
  314. package/dist/cli-bundle/chunks/{search-AXPXKZER.js → search-K4CFLQ5S.js} +10 -10
  315. package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js → stats-NJJCALEZ.js} +6 -6
  316. package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js → stats-XT6QRKQY.js} +6 -6
  317. package/dist/cli-bundle/chunks/{telemetry-GAHHQTOS.js → telemetry-5SQ5UDXC.js} +84 -70
  318. package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
  319. package/dist/cli-bundle/chunks/{telemetry-BZUF6H7G.js → telemetry-HVXFZA2U.js} +85 -71
  320. package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
  321. package/dist/cli-bundle/chunks/{test-ACD52Z3S.js → test-UFSJ5YIO.js} +15 -15
  322. package/dist/cli-bundle/chunks/{test-PWDIZ255.js → test-YCDAUBWF.js} +15 -15
  323. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
  324. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
  325. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
  326. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
  327. package/dist/cli-bundle/chunks/{test-runs-UXIXPDKU.js → test-runs-FK5E75AA.js} +185 -147
  328. package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
  329. package/dist/cli-bundle/chunks/{test-runs-PLRAZEFW.js → test-runs-H4TGWGRN.js} +184 -146
  330. package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
  331. package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
  332. package/dist/cli-bundle/chunks/{update-KFX2SIAC.js → update-Y5WQVT5O.js} +15 -15
  333. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js → update-many-6YAYYRLE.js} +82 -67
  334. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js.map → update-many-6YAYYRLE.js.map} +2 -2
  335. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js → update-many-JTKKSA7Y.js} +83 -68
  336. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js.map → update-many-JTKKSA7Y.js.map} +1 -1
  337. package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js → upgrade-DTAHZ236.js} +11 -11
  338. package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js → upgrade-JUDU7YL4.js} +11 -11
  339. package/dist/cli-bundle/chunks/{validate-MTUVL5VC.js → validate-732RWS5W.js} +440 -320
  340. package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
  341. package/dist/cli-bundle/chunks/{validate-X5W76YJL.js → validate-W7H5TEDC.js} +441 -321
  342. package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
  343. package/dist/cli-bundle/main.js +945 -812
  344. package/dist/cli-bundle/main.js.map +3 -3
  345. package/dist/core/config/nested-settings.js +89 -67
  346. package/dist/core/config/nested-settings.js.map +1 -1
  347. package/dist/core/governance/metadata-coverage.js +20 -28
  348. package/dist/core/governance/metadata-coverage.js.map +1 -1
  349. package/dist/core/history/drift-scan.js +93 -81
  350. package/dist/core/history/drift-scan.js.map +1 -1
  351. package/dist/core/item/item-type-definition.js +14 -14
  352. package/dist/core/item/item-type-definition.js.map +1 -1
  353. package/dist/core/item/type-registry.js +87 -82
  354. package/dist/core/item/type-registry.js.map +1 -1
  355. package/dist/core/output/mutation-projection.js +42 -26
  356. package/dist/core/output/mutation-projection.js.map +1 -1
  357. package/dist/core/schema/runtime-schema.js +34 -28
  358. package/dist/core/schema/runtime-schema.js.map +1 -1
  359. package/dist/core/search/semantic-defaults.js +64 -37
  360. package/dist/core/search/semantic-defaults.js.map +1 -1
  361. package/dist/core/search/vector-stores.js +32 -17
  362. package/dist/core/search/vector-stores.js.map +1 -1
  363. package/dist/core/sentry/helpers.js +31 -28
  364. package/dist/core/sentry/helpers.js.map +1 -1
  365. package/dist/core/sentry/instrument.js +54 -43
  366. package/dist/core/sentry/instrument.js.map +1 -1
  367. package/dist/core/store/front-matter-cache.js +239 -153
  368. package/dist/core/store/front-matter-cache.js.map +1 -1
  369. package/dist/core/store/item-store.js +33 -26
  370. package/dist/core/store/item-store.js.map +1 -1
  371. package/dist/core/store/settings.js +247 -203
  372. package/dist/core/store/settings.js.map +1 -1
  373. package/dist/core/test/background-runs.js +189 -160
  374. package/dist/core/test/background-runs.js.map +1 -1
  375. package/package.json +2 -2
  376. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  377. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  378. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  379. package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +0 -16
  380. package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +0 -1
  381. package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +0 -1
  382. package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +0 -7
  383. package/dist/cli-bundle/chunks/chunk-3VGN2UWE.js.map +0 -1
  384. package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +0 -1
  385. package/dist/cli-bundle/chunks/chunk-4DSGXSBL.js.map +0 -7
  386. package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +0 -1
  387. package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +0 -7
  388. package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +0 -1
  389. package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +0 -1
  390. package/dist/cli-bundle/chunks/chunk-BDTISOSD.js.map +0 -7
  391. package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +0 -7
  392. package/dist/cli-bundle/chunks/chunk-CF7RL6FR.js.map +0 -1
  393. package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +0 -1
  394. package/dist/cli-bundle/chunks/chunk-IPYBJWTE.js.map +0 -7
  395. package/dist/cli-bundle/chunks/chunk-IZBR4NRW.js.map +0 -7
  396. package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +0 -1
  397. package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +0 -1
  398. package/dist/cli-bundle/chunks/chunk-KNPEF7QG.js.map +0 -7
  399. package/dist/cli-bundle/chunks/chunk-NFDPYAIP.js.map +0 -7
  400. package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +0 -7
  401. package/dist/cli-bundle/chunks/chunk-NWMZWYYB.js.map +0 -1
  402. package/dist/cli-bundle/chunks/chunk-OTUHB4HS.js.map +0 -1
  403. package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +0 -7
  404. package/dist/cli-bundle/chunks/chunk-RLDHZHQS.js.map +0 -1
  405. package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +0 -7
  406. package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +0 -7
  407. package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +0 -1
  408. package/dist/cli-bundle/chunks/chunk-UYUYDGIB.js.map +0 -1
  409. package/dist/cli-bundle/chunks/chunk-V3NOKJF2.js.map +0 -1
  410. package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +0 -7
  411. package/dist/cli-bundle/chunks/chunk-YITK2PJ6.js.map +0 -7
  412. package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +0 -1
  413. package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +0 -14
  414. package/dist/cli-bundle/chunks/close-many-BG5QQIDQ.js.map +0 -7
  415. package/dist/cli-bundle/chunks/close-many-LDRVEQY2.js.map +0 -1
  416. package/dist/cli-bundle/chunks/config-DMSU64QO.js +0 -1541
  417. package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +0 -7
  418. package/dist/cli-bundle/chunks/config-QH2DICD6.js +0 -1531
  419. package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +0 -1
  420. package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +0 -7
  421. package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +0 -1
  422. package/dist/cli-bundle/chunks/create-OH3BDGBB.js +0 -28
  423. package/dist/cli-bundle/chunks/get-A7MAOHCU.js.map +0 -7
  424. package/dist/cli-bundle/chunks/get-DSDEKJ3L.js.map +0 -1
  425. package/dist/cli-bundle/chunks/health-3IPFLKXB.js.map +0 -1
  426. package/dist/cli-bundle/chunks/health-GZXGBZ36.js.map +0 -7
  427. package/dist/cli-bundle/chunks/history-WSZHY3PN.js +0 -18
  428. package/dist/cli-bundle/chunks/history-compact-2WRZ2WK4.js.map +0 -7
  429. package/dist/cli-bundle/chunks/history-compact-HR7BB4LR.js.map +0 -1
  430. package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +0 -19
  431. package/dist/cli-bundle/chunks/history-repair-LCMOS45X.js.map +0 -7
  432. package/dist/cli-bundle/chunks/history-repair-XA3LC4GA.js.map +0 -1
  433. package/dist/cli-bundle/chunks/init-PAX32BJA.js +0 -22
  434. package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +0 -7
  435. package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +0 -1
  436. package/dist/cli-bundle/chunks/plan-4WXEQCTN.js.map +0 -7
  437. package/dist/cli-bundle/chunks/plan-RKZHQVXR.js.map +0 -1
  438. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +0 -1
  439. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +0 -7
  440. package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +0 -1
  441. package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +0 -7
  442. package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js.map +0 -1
  443. package/dist/cli-bundle/chunks/register-operations-HZ6XERQG.js.map +0 -7
  444. package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +0 -1
  445. package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +0 -7
  446. package/dist/cli-bundle/chunks/restore-YALDGTQR.js +0 -17
  447. package/dist/cli-bundle/chunks/telemetry-BZUF6H7G.js.map +0 -1
  448. package/dist/cli-bundle/chunks/telemetry-GAHHQTOS.js.map +0 -7
  449. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js +0 -358
  450. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js.map +0 -1
  451. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js +0 -361
  452. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js.map +0 -7
  453. package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +0 -7
  454. package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +0 -1
  455. package/dist/cli-bundle/chunks/update-AMRSOIWP.js +0 -24
  456. package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +0 -7
  457. package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +0 -1
  458. /package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js.map → activity-CUC4JY3U.js.map} +0 -0
  459. /package/dist/cli-bundle/chunks/{activity-AW6XVFH6.js.map → activity-WEIEMM73.js.map} +0 -0
  460. /package/dist/cli-bundle/chunks/{append-QCFJSDFL.js.map → append-H32VOR2Y.js.map} +0 -0
  461. /package/dist/cli-bundle/chunks/{append-LOVPGVPT.js.map → append-UBM632FK.js.map} +0 -0
  462. /package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js.map → chunk-2ASNV4DH.js.map} +0 -0
  463. /package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js.map → chunk-2CHRYUXL.js.map} +0 -0
  464. /package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js.map → chunk-3AZUFQK6.js.map} +0 -0
  465. /package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js.map → chunk-3LCUASYG.js.map} +0 -0
  466. /package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js.map → chunk-3Q2HBMTI.js.map} +0 -0
  467. /package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js.map → chunk-55XRYWEG.js.map} +0 -0
  468. /package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js.map → chunk-5GVTFFTC.js.map} +0 -0
  469. /package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js.map → chunk-A6VOGKBA.js.map} +0 -0
  470. /package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js.map → chunk-AIAIXG7I.js.map} +0 -0
  471. /package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js.map → chunk-AJEBCRIY.js.map} +0 -0
  472. /package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js.map → chunk-BTX5MIQF.js.map} +0 -0
  473. /package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js.map → chunk-BVZZN2LH.js.map} +0 -0
  474. /package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js.map → chunk-CYBDUHNO.js.map} +0 -0
  475. /package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js.map → chunk-CZPVDLD2.js.map} +0 -0
  476. /package/dist/cli-bundle/chunks/{chunk-JPECA746.js.map → chunk-EUKTMRN3.js.map} +0 -0
  477. /package/dist/cli-bundle/chunks/{chunk-2466X6E4.js.map → chunk-FFOQHGNH.js.map} +0 -0
  478. /package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js.map → chunk-GFMSLORL.js.map} +0 -0
  479. /package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js.map → chunk-GRRG3MCT.js.map} +0 -0
  480. /package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js.map → chunk-H4GRLYJS.js.map} +0 -0
  481. /package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js.map → chunk-HQTPRV4D.js.map} +0 -0
  482. /package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js.map → chunk-IEEJQCZ4.js.map} +0 -0
  483. /package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js.map → chunk-JMK5GCK2.js.map} +0 -0
  484. /package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js.map → chunk-K2VYLVX4.js.map} +0 -0
  485. /package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js.map → chunk-KCO2EAN5.js.map} +0 -0
  486. /package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js.map → chunk-KIYCOJ63.js.map} +0 -0
  487. /package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js.map → chunk-KLXF7NCC.js.map} +0 -0
  488. /package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js.map → chunk-KN3URLKS.js.map} +0 -0
  489. /package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js.map → chunk-LRKMWUUV.js.map} +0 -0
  490. /package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js.map → chunk-LTRAF2D7.js.map} +0 -0
  491. /package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js.map → chunk-MRD4T5LF.js.map} +0 -0
  492. /package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js.map → chunk-N2JSWVWG.js.map} +0 -0
  493. /package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js.map → chunk-N3QCJS4M.js.map} +0 -0
  494. /package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js.map → chunk-OTUJZKGI.js.map} +0 -0
  495. /package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js.map → chunk-QH3FSKRJ.js.map} +0 -0
  496. /package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js.map → chunk-S62UANU7.js.map} +0 -0
  497. /package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js.map → chunk-SYNKD3ZG.js.map} +0 -0
  498. /package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js.map → chunk-U2BEEM2X.js.map} +0 -0
  499. /package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js.map → chunk-UT73HUPC.js.map} +0 -0
  500. /package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js.map → chunk-UTSH5GWX.js.map} +0 -0
  501. /package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js.map → chunk-XWGEMNBR.js.map} +0 -0
  502. /package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js.map → chunk-Y4NRKBFW.js.map} +0 -0
  503. /package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js.map → chunk-YPKFV2JR.js.map} +0 -0
  504. /package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js.map → chunk-ZNHEYCDD.js.map} +0 -0
  505. /package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
  506. /package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js.map → claim-SENTPZBN.js.map} +0 -0
  507. /package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js.map → claim-Z7MEQCBT.js.map} +0 -0
  508. /package/dist/cli-bundle/chunks/{close-TQYAAFJP.js.map → close-424MX4CU.js.map} +0 -0
  509. /package/dist/cli-bundle/chunks/{close-E6ZZGCJY.js.map → close-YCWQQPDS.js.map} +0 -0
  510. /package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js.map → comments-4FGNTSNV.js.map} +0 -0
  511. /package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js.map → comments-7YS5MY5X.js.map} +0 -0
  512. /package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js.map → context-LHVKJSPJ.js.map} +0 -0
  513. /package/dist/cli-bundle/chunks/{context-B6275WPX.js.map → context-ZQY54JNS.js.map} +0 -0
  514. /package/dist/cli-bundle/chunks/{copy-DEM4DATS.js.map → copy-GYNQQPW2.js.map} +0 -0
  515. /package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js.map → copy-TLW7JTQT.js.map} +0 -0
  516. /package/dist/cli-bundle/chunks/{create-RLRJMRTM.js.map → create-VSKYSOCD.js.map} +0 -0
  517. /package/dist/cli-bundle/chunks/{create-OH3BDGBB.js.map → create-XTMAPS7I.js.map} +0 -0
  518. /package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js.map → delete-4W5JYCEG.js.map} +0 -0
  519. /package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js.map → delete-ANTOTI2I.js.map} +0 -0
  520. /package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js.map → deps-HPPE6MJN.js.map} +0 -0
  521. /package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js.map → deps-ZQZN54EZ.js.map} +0 -0
  522. /package/dist/cli-bundle/chunks/{docs-GYZNVS26.js.map → docs-RPOVFMP3.js.map} +0 -0
  523. /package/dist/cli-bundle/chunks/{docs-26S44RXU.js.map → docs-XJNYBJGE.js.map} +0 -0
  524. /package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js.map → eval-DM6JBZTS.js.map} +0 -0
  525. /package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js.map → eval-RFBI5FGS.js.map} +0 -0
  526. /package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js.map → extension-B3YY4WY5.js.map} +0 -0
  527. /package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js.map → extension-TTSEFQTS.js.map} +0 -0
  528. /package/dist/cli-bundle/chunks/{files-NQHEXUZD.js.map → files-5D65CHGE.js.map} +0 -0
  529. /package/dist/cli-bundle/chunks/{files-MBNICQFM.js.map → files-GPIG77EN.js.map} +0 -0
  530. /package/dist/cli-bundle/chunks/{focus-XZW5423D.js.map → focus-C3PEJV2C.js.map} +0 -0
  531. /package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js.map → focus-ZHN7WIGX.js.map} +0 -0
  532. /package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js.map → gc-D4JQ6OWN.js.map} +0 -0
  533. /package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js.map → gc-VZIXDL32.js.map} +0 -0
  534. /package/dist/cli-bundle/chunks/{history-WSZHY3PN.js.map → history-DD7L7BNL.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{history-NERDJNUB.js.map → history-IL7XCEX2.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{history-redact-MP6CH7U5.js.map → history-redact-IX4YEWMY.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js.map → history-redact-VYCWQFK7.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{init-64XDLQJB.js.map → init-F27NHENZ.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{init-PAX32BJA.js.map → init-HHVQQP6C.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js.map → learnings-HJVDQIGY.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js.map → learnings-XSFSUUWK.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{list-G5Y65VF6.js.map → list-HPMEKCAA.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{list-DNBJVO3E.js.map → list-VMPWTURB.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js.map → notes-GDZIKGR6.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js.map → notes-WDDBPC4D.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{profile-QLER5ENE.js.map → profile-CCOKZ2IQ.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{profile-4OMM32CD.js.map → profile-HUCENIEQ.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js.map → restore-4CBWUMCX.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{restore-YALDGTQR.js.map → restore-5UEAGG3W.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{schema-73HR2OJW.js.map → schema-TDGK6N3I.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js.map → schema-UE5KKAUX.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{search-KILGT37L.js.map → search-FP7MEU4S.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{search-AXPXKZER.js.map → search-K4CFLQ5S.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js.map → stats-NJJCALEZ.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js.map → stats-XT6QRKQY.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{test-ACD52Z3S.js.map → test-UFSJ5YIO.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{test-PWDIZ255.js.map → test-YCDAUBWF.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{update-AMRSOIWP.js.map → update-MTCFES6X.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{update-KFX2SIAC.js.map → update-Y5WQVT5O.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js.map → upgrade-DTAHZ236.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js.map → upgrade-JUDU7YL4.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