@unbrained/pm-cli 2026.7.2 → 2026.7.3

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 (476) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/CHANGELOG.md +19 -0
  3. package/CONTRIBUTING.md +2 -2
  4. package/README.md +1 -1
  5. package/dist/cli/commander-usage.js +54 -41
  6. package/dist/cli/commander-usage.js.map +1 -1
  7. package/dist/cli/commands/activity.js +79 -57
  8. package/dist/cli/commands/activity.js.map +1 -1
  9. package/dist/cli/commands/close-many.js +106 -65
  10. package/dist/cli/commands/close-many.js.map +1 -1
  11. package/dist/cli/commands/create.js +32 -17
  12. package/dist/cli/commands/create.js.map +1 -1
  13. package/dist/cli/commands/extension/doctor.js +56 -67
  14. package/dist/cli/commands/extension/doctor.js.map +1 -1
  15. package/dist/cli/commands/extension/shared.js +21 -15
  16. package/dist/cli/commands/extension/shared.js.map +1 -1
  17. package/dist/cli/commands/health.js +101 -112
  18. package/dist/cli/commands/health.js.map +1 -1
  19. package/dist/cli/commands/init-agent-guidance.js +32 -19
  20. package/dist/cli/commands/init-agent-guidance.js.map +1 -1
  21. package/dist/cli/commands/next.js +13 -10
  22. package/dist/cli/commands/next.js.map +1 -1
  23. package/dist/cli/commands/profile.js +23 -15
  24. package/dist/cli/commands/profile.js.map +1 -1
  25. package/dist/cli/commands/validate.d.ts +2 -0
  26. package/dist/cli/commands/validate.js +14 -2
  27. package/dist/cli/commands/validate.js.map +1 -1
  28. package/dist/cli/error-guidance.js +9 -6
  29. package/dist/cli/error-guidance.js.map +1 -1
  30. package/dist/cli/extension-command-help.js +27 -19
  31. package/dist/cli/extension-command-help.js.map +1 -1
  32. package/dist/cli/help-json-payload.js +57 -49
  33. package/dist/cli/help-json-payload.js.map +1 -1
  34. package/dist/cli/main.js +48 -32
  35. package/dist/cli/main.js.map +1 -1
  36. package/dist/cli/register-list-query.js +213 -213
  37. package/dist/cli/register-list-query.js.map +1 -1
  38. package/dist/cli/register-mutation.js +368 -368
  39. package/dist/cli/register-mutation.js.map +1 -1
  40. package/dist/cli/register-operations.js +303 -299
  41. package/dist/cli/register-operations.js.map +1 -1
  42. package/dist/cli/registration-helpers.d.ts +4 -0
  43. package/dist/cli/registration-helpers.js +45 -56
  44. package/dist/cli/registration-helpers.js.map +1 -1
  45. package/dist/cli-bundle/chunks/{activity-CUC4JY3U.js → activity-5YWLSPGE.js} +9 -9
  46. package/dist/cli-bundle/chunks/activity-BIML7K2D.js +16 -0
  47. package/dist/cli-bundle/chunks/{aggregate-SW5PNGCS.js → aggregate-2V2M3JZU.js} +8 -8
  48. package/dist/cli-bundle/chunks/{aggregate-DKUTRY6R.js → aggregate-EK7DXML7.js} +8 -8
  49. package/dist/cli-bundle/chunks/{append-UBM632FK.js → append-EZESUVJT.js} +8 -8
  50. package/dist/cli-bundle/chunks/{append-H32VOR2Y.js → append-JFG4WQMG.js} +8 -8
  51. package/dist/cli-bundle/chunks/{chunk-XTHQWXVC.js → chunk-32IUNTG4.js} +5 -5
  52. package/dist/cli-bundle/chunks/{chunk-IEEJQCZ4.js → chunk-3W2HJKJX.js} +3 -3
  53. package/dist/cli-bundle/chunks/{chunk-MNBPX5JS.js → chunk-4EXFFP7T.js} +42 -27
  54. package/dist/cli-bundle/chunks/{chunk-MNBPX5JS.js.map → chunk-4EXFFP7T.js.map} +2 -2
  55. package/dist/cli-bundle/chunks/{chunk-JMK5GCK2.js → chunk-4PFVUUYV.js} +2 -2
  56. package/dist/cli-bundle/chunks/{chunk-NRZS637N.js → chunk-4WB6S4YX.js} +56 -21
  57. package/dist/cli-bundle/chunks/chunk-4WB6S4YX.js.map +1 -0
  58. package/dist/cli-bundle/chunks/{chunk-5GVTFFTC.js → chunk-572FKBRL.js} +61 -102
  59. package/dist/cli-bundle/chunks/chunk-572FKBRL.js.map +1 -0
  60. package/dist/cli-bundle/chunks/{chunk-MRD4T5LF.js → chunk-5E7N4T2Z.js} +2 -2
  61. package/dist/cli-bundle/chunks/{chunk-S62UANU7.js → chunk-5IZUBZBR.js} +3 -3
  62. package/dist/cli-bundle/chunks/{chunk-BTX5MIQF.js → chunk-5JIWFWOZ.js} +2 -2
  63. package/dist/cli-bundle/chunks/{chunk-SYVUU7EK.js → chunk-67LARBDL.js} +9 -9
  64. package/dist/cli-bundle/chunks/{chunk-KIYCOJ63.js → chunk-6CDCWKSX.js} +4 -4
  65. package/dist/cli-bundle/chunks/{chunk-JXAUVO6X.js → chunk-6KRFL33E.js} +55 -20
  66. package/dist/cli-bundle/chunks/chunk-6KRFL33E.js.map +7 -0
  67. package/dist/cli-bundle/chunks/{chunk-3LCUASYG.js → chunk-6NYJGMTY.js} +2 -2
  68. package/dist/cli-bundle/chunks/{chunk-2ASNV4DH.js → chunk-7CLLC75T.js} +4 -4
  69. package/dist/cli-bundle/chunks/{chunk-FFOQHGNH.js → chunk-7LYO6S5A.js} +8 -8
  70. package/dist/cli-bundle/chunks/{chunk-55XRYWEG.js → chunk-A3OQ7TFW.js} +8 -8
  71. package/dist/cli-bundle/chunks/{chunk-Q6K2OACU.js → chunk-AIKU3IIL.js} +7 -7
  72. package/dist/cli-bundle/chunks/{chunk-AIAIXG7I.js → chunk-AJHYQCBJ.js} +39 -5
  73. package/dist/cli-bundle/chunks/chunk-AJHYQCBJ.js.map +7 -0
  74. package/dist/cli-bundle/chunks/{chunk-TTHCEV5Q.js → chunk-BE2SR6QL.js} +4 -4
  75. package/dist/cli-bundle/chunks/{chunk-GFMSLORL.js → chunk-BI4R7HI2.js} +75 -53
  76. package/dist/cli-bundle/chunks/chunk-BI4R7HI2.js.map +7 -0
  77. package/dist/cli-bundle/chunks/{chunk-K2VYLVX4.js → chunk-CXR3CMBQ.js} +33 -6
  78. package/dist/cli-bundle/chunks/chunk-CXR3CMBQ.js.map +1 -0
  79. package/dist/cli-bundle/chunks/{chunk-7W4H4K26.js → chunk-ECU6MMTQ.js} +10 -10
  80. package/dist/cli-bundle/chunks/{chunk-YLZZ6T54.js → chunk-EJ2OCBHF.js} +23 -8
  81. package/dist/cli-bundle/chunks/chunk-EJ2OCBHF.js.map +1 -0
  82. package/dist/cli-bundle/chunks/{chunk-5PGBHRY3.js → chunk-EQURFOMH.js} +2 -2
  83. package/dist/cli-bundle/chunks/{chunk-H4GRLYJS.js → chunk-ER4ME5U2.js} +3 -3
  84. package/dist/cli-bundle/chunks/{chunk-QH3FSKRJ.js → chunk-ERG65A2L.js} +2 -2
  85. package/dist/cli-bundle/chunks/{chunk-UWKEJMZU.js → chunk-F6WNBITZ.js} +7 -7
  86. package/dist/cli-bundle/chunks/{chunk-U2BEEM2X.js → chunk-FH2H3CBD.js} +3 -3
  87. package/dist/cli-bundle/chunks/{chunk-EUKTMRN3.js → chunk-FUFFPIYA.js} +2 -2
  88. package/dist/cli-bundle/chunks/{chunk-7MYWF4ZX.js → chunk-FZJM2TXF.js} +7 -7
  89. package/dist/cli-bundle/chunks/{chunk-CYBDUHNO.js → chunk-GUYNUXQT.js} +3 -3
  90. package/dist/cli-bundle/chunks/{chunk-ZNT7KEWE.js → chunk-GVJE5T7Q.js} +2 -2
  91. package/dist/cli-bundle/chunks/{chunk-SYNKD3ZG.js → chunk-HB4FAT3O.js} +42 -60
  92. package/dist/cli-bundle/chunks/chunk-HB4FAT3O.js.map +7 -0
  93. package/dist/cli-bundle/chunks/{chunk-XEWQKDYZ.js → chunk-HQAF23Q2.js} +8 -8
  94. package/dist/cli-bundle/chunks/{chunk-KLXF7NCC.js → chunk-JBZ2NTKX.js} +2 -2
  95. package/dist/cli-bundle/chunks/{chunk-SPM2XLWI.js → chunk-JPATY4SE.js} +22 -7
  96. package/dist/cli-bundle/chunks/chunk-JPATY4SE.js.map +7 -0
  97. package/dist/cli-bundle/chunks/{chunk-4NUOWFBT.js → chunk-K5DT2YKM.js} +7 -7
  98. package/dist/cli-bundle/chunks/{chunk-KCO2EAN5.js → chunk-KEZOIPCR.js} +3 -3
  99. package/dist/cli-bundle/chunks/{chunk-7NSPKJUS.js → chunk-KHVGM5CS.js} +113 -83
  100. package/dist/cli-bundle/chunks/chunk-KHVGM5CS.js.map +7 -0
  101. package/dist/cli-bundle/chunks/{chunk-66Z3X7ZG.js → chunk-KS6ATO47.js} +33 -20
  102. package/dist/cli-bundle/chunks/{chunk-66Z3X7ZG.js.map → chunk-KS6ATO47.js.map} +2 -2
  103. package/dist/cli-bundle/chunks/{chunk-I66WE2HE.js → chunk-L4SLHV6G.js} +112 -82
  104. package/dist/cli-bundle/chunks/chunk-L4SLHV6G.js.map +1 -0
  105. package/dist/cli-bundle/chunks/{chunk-2227673O.js → chunk-LBE5QFMZ.js} +7 -7
  106. package/dist/cli-bundle/chunks/{chunk-YPKFV2JR.js → chunk-LCWQP6NM.js} +76 -54
  107. package/dist/cli-bundle/chunks/chunk-LCWQP6NM.js.map +1 -0
  108. package/dist/cli-bundle/chunks/{chunk-UGLU6Q2I.js → chunk-LOWVNZBZ.js} +4 -4
  109. package/dist/cli-bundle/chunks/{chunk-Y4NRKBFW.js → chunk-MDHWWBNZ.js} +3 -3
  110. package/dist/cli-bundle/chunks/{chunk-LRKMWUUV.js → chunk-MEZZZBYX.js} +2 -2
  111. package/dist/cli-bundle/chunks/{chunk-6YCYF2AI.js → chunk-MHRS5FUX.js} +34 -21
  112. package/dist/cli-bundle/chunks/{chunk-6YCYF2AI.js.map → chunk-MHRS5FUX.js.map} +1 -1
  113. package/dist/cli-bundle/chunks/{chunk-Q6NXOHS6.js → chunk-NOIEVOK5.js} +7 -7
  114. package/dist/cli-bundle/chunks/{chunk-GRRG3MCT.js → chunk-NZ7QIUP5.js} +4 -4
  115. package/dist/cli-bundle/chunks/{chunk-TPOFWBMY.js → chunk-OGLGI22K.js} +26 -20
  116. package/dist/cli-bundle/chunks/chunk-OGLGI22K.js.map +1 -0
  117. package/dist/cli-bundle/chunks/{chunk-ZNHEYCDD.js → chunk-P5L7Z2O6.js} +2 -2
  118. package/dist/cli-bundle/chunks/{chunk-6ZMBJRDJ.js → chunk-PULUSQAV.js} +9 -9
  119. package/dist/cli-bundle/chunks/{chunk-EMPGXBUF.js → chunk-QCDTQCMW.js} +2 -2
  120. package/dist/cli-bundle/chunks/{chunk-OTUJZKGI.js → chunk-QNNQAAZ5.js} +24 -18
  121. package/dist/cli-bundle/chunks/{chunk-OTUJZKGI.js.map → chunk-QNNQAAZ5.js.map} +1 -1
  122. package/dist/cli-bundle/chunks/{chunk-XWGEMNBR.js → chunk-RAHINBVP.js} +60 -101
  123. package/dist/cli-bundle/chunks/chunk-RAHINBVP.js.map +7 -0
  124. package/dist/cli-bundle/chunks/{chunk-AJEBCRIY.js → chunk-RJH5VQHW.js} +43 -61
  125. package/dist/cli-bundle/chunks/chunk-RJH5VQHW.js.map +1 -0
  126. package/dist/cli-bundle/chunks/{chunk-HQTPRV4D.js → chunk-SU2E4AWU.js} +6 -6
  127. package/dist/cli-bundle/chunks/{chunk-3Q2HBMTI.js → chunk-SU3TB4NS.js} +2 -2
  128. package/dist/cli-bundle/chunks/{chunk-XCHUVHKU.js → chunk-SYE6WMV6.js} +8 -8
  129. package/dist/cli-bundle/chunks/{chunk-2KWL5NPW.js → chunk-T3P7PMZP.js} +2 -2
  130. package/dist/cli-bundle/chunks/{chunk-N2JSWVWG.js → chunk-T4XBKJ3F.js} +4 -4
  131. package/dist/cli-bundle/chunks/{chunk-BVZZN2LH.js → chunk-T6AXEBOP.js} +23 -17
  132. package/dist/cli-bundle/chunks/{chunk-BVZZN2LH.js.map → chunk-T6AXEBOP.js.map} +2 -2
  133. package/dist/cli-bundle/chunks/{chunk-N3QCJS4M.js → chunk-TQ6AX5SQ.js} +58 -69
  134. package/dist/cli-bundle/chunks/{chunk-N3QCJS4M.js.map → chunk-TQ6AX5SQ.js.map} +2 -2
  135. package/dist/cli-bundle/chunks/{chunk-RM37OPYK.js → chunk-U3S2B7TA.js} +43 -28
  136. package/dist/cli-bundle/chunks/{chunk-RM37OPYK.js.map → chunk-U3S2B7TA.js.map} +1 -1
  137. package/dist/cli-bundle/chunks/{chunk-UTSH5GWX.js → chunk-U5TR4N7J.js} +7 -7
  138. package/dist/cli-bundle/chunks/{chunk-UT73HUPC.js → chunk-UMNQZS4H.js} +3 -3
  139. package/dist/cli-bundle/chunks/{chunk-CZPVDLD2.js → chunk-WJA3PXW7.js} +7 -7
  140. package/dist/cli-bundle/chunks/{chunk-WJAMWAHZ.js → chunk-WRYERRZX.js} +5 -5
  141. package/dist/cli-bundle/chunks/{chunk-6ITZLD4T.js → chunk-WYOIIFSE.js} +10 -10
  142. package/dist/cli-bundle/chunks/{chunk-7TH5NMVB.js → chunk-XRYSCRZR.js} +25 -19
  143. package/dist/cli-bundle/chunks/chunk-XRYSCRZR.js.map +7 -0
  144. package/dist/cli-bundle/chunks/{chunk-3AZUFQK6.js → chunk-YF746GTH.js} +59 -70
  145. package/dist/cli-bundle/chunks/{chunk-3AZUFQK6.js.map → chunk-YF746GTH.js.map} +1 -1
  146. package/dist/cli-bundle/chunks/{chunk-IG5JYZGU.js → chunk-YPWUSH72.js} +7 -7
  147. package/dist/cli-bundle/chunks/{chunk-KN3URLKS.js → chunk-YSDFIY7N.js} +3 -3
  148. package/dist/cli-bundle/chunks/{chunk-2CHRYUXL.js → chunk-YSGTMDWC.js} +2 -2
  149. package/dist/cli-bundle/chunks/{chunk-36UGKF4O.js → chunk-YVKZ3ANP.js} +2 -2
  150. package/dist/cli-bundle/chunks/{chunk-A6VOGKBA.js → chunk-Z5F6XZXE.js} +6 -6
  151. package/dist/cli-bundle/chunks/{chunk-LTRAF2D7.js → chunk-Z7RPDF2Y.js} +3 -3
  152. package/dist/cli-bundle/chunks/{chunk-W47SML5B.js → chunk-ZFTKYWIF.js} +7 -7
  153. package/dist/cli-bundle/chunks/{claim-SENTPZBN.js → claim-2BGBGSVI.js} +8 -8
  154. package/dist/cli-bundle/chunks/{claim-Z7MEQCBT.js → claim-5GU7OE67.js} +8 -8
  155. package/dist/cli-bundle/chunks/close-6YODBUIV.js +14 -0
  156. package/dist/cli-bundle/chunks/{close-424MX4CU.js → close-AFVKPR57.js} +7 -7
  157. package/dist/cli-bundle/chunks/{close-many-SWY34BII.js → close-many-7KLOSYLP.js} +119 -76
  158. package/dist/cli-bundle/chunks/close-many-7KLOSYLP.js.map +7 -0
  159. package/dist/cli-bundle/chunks/{close-many-2IV4J2TR.js → close-many-JKUJMHLG.js} +120 -77
  160. package/dist/cli-bundle/chunks/close-many-JKUJMHLG.js.map +1 -0
  161. package/dist/cli-bundle/chunks/{comments-4FGNTSNV.js → comments-DNWHEBOS.js} +9 -9
  162. package/dist/cli-bundle/chunks/{comments-7YS5MY5X.js → comments-RW23R3VE.js} +9 -9
  163. package/dist/cli-bundle/chunks/{config-G74GISC4.js → config-AUM5WBYA.js} +7 -7
  164. package/dist/cli-bundle/chunks/{config-BZJKK7FZ.js → config-OZWSA2NP.js} +7 -7
  165. package/dist/cli-bundle/chunks/{context-ZQY54JNS.js → context-OYXRGY7S.js} +12 -12
  166. package/dist/cli-bundle/chunks/{context-LHVKJSPJ.js → context-PKCEHQY3.js} +12 -12
  167. package/dist/cli-bundle/chunks/{contracts-CP2EZJC7.js → contracts-L6ODXNUM.js} +3 -3
  168. package/dist/cli-bundle/chunks/{contracts-FIZLMP7O.js → contracts-X74F2GSM.js} +3 -3
  169. package/dist/cli-bundle/chunks/{copy-GYNQQPW2.js → copy-6XOR3HKN.js} +5 -5
  170. package/dist/cli-bundle/chunks/{copy-TLW7JTQT.js → copy-I4NCLBR4.js} +5 -5
  171. package/dist/cli-bundle/chunks/{create-VSKYSOCD.js → create-PM45M6PE.js} +12 -12
  172. package/dist/cli-bundle/chunks/create-Z7YCH3BE.js +28 -0
  173. package/dist/cli-bundle/chunks/{delete-ANTOTI2I.js → delete-7YXHYG67.js} +5 -5
  174. package/dist/cli-bundle/chunks/{delete-4W5JYCEG.js → delete-LPISP43T.js} +5 -5
  175. package/dist/cli-bundle/chunks/{deps-HPPE6MJN.js → deps-N2T26FME.js} +5 -5
  176. package/dist/cli-bundle/chunks/{deps-ZQZN54EZ.js → deps-WATKQDE3.js} +5 -5
  177. package/dist/cli-bundle/chunks/{docs-RPOVFMP3.js → docs-6LQ3GLM7.js} +7 -7
  178. package/dist/cli-bundle/chunks/{docs-XJNYBJGE.js → docs-Z3X6JZLT.js} +7 -7
  179. package/dist/cli-bundle/chunks/{eval-RFBI5FGS.js → eval-6DCLG52D.js} +10 -10
  180. package/dist/cli-bundle/chunks/{eval-DM6JBZTS.js → eval-Y3ZCUTHK.js} +10 -10
  181. package/dist/cli-bundle/chunks/{extension-B3YY4WY5.js → extension-BNINIMT7.js} +11 -11
  182. package/dist/cli-bundle/chunks/{extension-TTSEFQTS.js → extension-QWE4YYK5.js} +11 -11
  183. package/dist/cli-bundle/chunks/{files-5D65CHGE.js → files-6SGKHS6O.js} +7 -7
  184. package/dist/cli-bundle/chunks/{files-GPIG77EN.js → files-FUYPSOFJ.js} +7 -7
  185. package/dist/cli-bundle/chunks/{focus-ZHN7WIGX.js → focus-2Q3K76G2.js} +6 -6
  186. package/dist/cli-bundle/chunks/{focus-C3PEJV2C.js → focus-ATLBWXXD.js} +6 -6
  187. package/dist/cli-bundle/chunks/{gc-D4JQ6OWN.js → gc-RUYEMNRF.js} +3 -3
  188. package/dist/cli-bundle/chunks/{gc-VZIXDL32.js → gc-TDWSDR66.js} +3 -3
  189. package/dist/cli-bundle/chunks/{get-IOVAN6RU.js → get-2WGLX74N.js} +10 -10
  190. package/dist/cli-bundle/chunks/{get-GIBRUUOP.js → get-LY6M2JIM.js} +10 -10
  191. package/dist/cli-bundle/chunks/{health-L2U3AFKV.js → health-4RKHYS3T.js} +115 -123
  192. package/dist/cli-bundle/chunks/health-4RKHYS3T.js.map +1 -0
  193. package/dist/cli-bundle/chunks/{health-MM7AWXYF.js → health-TMFVNYRA.js} +114 -122
  194. package/dist/cli-bundle/chunks/health-TMFVNYRA.js.map +7 -0
  195. package/dist/cli-bundle/chunks/history-CGNQJXFE.js +18 -0
  196. package/dist/cli-bundle/chunks/{history-IL7XCEX2.js → history-SGRRS72R.js} +8 -8
  197. package/dist/cli-bundle/chunks/{history-compact-MV25P7DM.js → history-compact-LOED43R3.js} +10 -10
  198. package/dist/cli-bundle/chunks/{history-compact-HALOTOU7.js → history-compact-V5DNAQHH.js} +10 -10
  199. package/dist/cli-bundle/chunks/{history-redact-VYCWQFK7.js → history-redact-IRL7WJ3E.js} +9 -9
  200. package/dist/cli-bundle/chunks/history-redact-N3JK7VBW.js +19 -0
  201. package/dist/cli-bundle/chunks/{history-repair-44MODPQF.js → history-repair-4WVBVHFR.js} +10 -10
  202. package/dist/cli-bundle/chunks/{history-repair-CPNAOCNF.js → history-repair-PGYQJMGD.js} +10 -10
  203. package/dist/cli-bundle/chunks/{init-F27NHENZ.js → init-4GESW7RM.js} +12 -12
  204. package/dist/cli-bundle/chunks/init-XIDPABA4.js +22 -0
  205. package/dist/cli-bundle/chunks/{learnings-HJVDQIGY.js → learnings-4BHWFFUV.js} +9 -9
  206. package/dist/cli-bundle/chunks/{learnings-XSFSUUWK.js → learnings-4FJY7WIW.js} +9 -9
  207. package/dist/cli-bundle/chunks/{list-HPMEKCAA.js → list-472TIOVK.js} +8 -8
  208. package/dist/cli-bundle/chunks/{list-VMPWTURB.js → list-D7BF5CL2.js} +8 -8
  209. package/dist/cli-bundle/chunks/{next-QM6YJIIS.js → next-D5STGWI2.js} +26 -23
  210. package/dist/cli-bundle/chunks/next-D5STGWI2.js.map +1 -0
  211. package/dist/cli-bundle/chunks/{next-ETXF2ZCN.js → next-SFQZVX2B.js} +25 -22
  212. package/dist/cli-bundle/chunks/{next-ETXF2ZCN.js.map → next-SFQZVX2B.js.map} +2 -2
  213. package/dist/cli-bundle/chunks/{notes-GDZIKGR6.js → notes-6KNOSLIT.js} +9 -9
  214. package/dist/cli-bundle/chunks/{notes-WDDBPC4D.js → notes-W4UEICGF.js} +9 -9
  215. package/dist/cli-bundle/chunks/{plan-BGDR73Z6.js → plan-JO6V7BXO.js} +12 -12
  216. package/dist/cli-bundle/chunks/{plan-C5IMM335.js → plan-MJQW5XK3.js} +12 -12
  217. package/dist/cli-bundle/chunks/{profile-HUCENIEQ.js → profile-3TOTMUR4.js} +26 -18
  218. package/dist/cli-bundle/chunks/profile-3TOTMUR4.js.map +7 -0
  219. package/dist/cli-bundle/chunks/{profile-CCOKZ2IQ.js → profile-WIQY2KCV.js} +27 -19
  220. package/dist/cli-bundle/chunks/profile-WIQY2KCV.js.map +1 -0
  221. package/dist/cli-bundle/chunks/{register-list-query-XN4ZRHSV.js → register-list-query-ELBHCCFI.js} +179 -170
  222. package/dist/cli-bundle/chunks/register-list-query-ELBHCCFI.js.map +7 -0
  223. package/dist/cli-bundle/chunks/{register-list-query-ROSNIL52.js → register-list-query-GAPQ6DM3.js} +180 -171
  224. package/dist/cli-bundle/chunks/register-list-query-GAPQ6DM3.js.map +1 -0
  225. package/dist/cli-bundle/chunks/{register-mutation-KRLAHEL2.js → register-mutation-ROFE2YPC.js} +367 -361
  226. package/dist/cli-bundle/chunks/register-mutation-ROFE2YPC.js.map +7 -0
  227. package/dist/cli-bundle/chunks/{register-mutation-CFSB2MS3.js → register-mutation-SJWMVIJ2.js} +368 -362
  228. package/dist/cli-bundle/chunks/register-mutation-SJWMVIJ2.js.map +1 -0
  229. package/dist/cli-bundle/chunks/{register-operations-4PASGJDB.js → register-operations-IADFVH53.js} +309 -304
  230. package/dist/cli-bundle/chunks/register-operations-IADFVH53.js.map +7 -0
  231. package/dist/cli-bundle/chunks/{register-operations-MBN4KGUM.js → register-operations-MEKU3AKC.js} +310 -305
  232. package/dist/cli-bundle/chunks/register-operations-MEKU3AKC.js.map +1 -0
  233. package/dist/cli-bundle/chunks/{register-setup-ZCGKHDKL.js → register-setup-3QJY43CY.js} +15 -15
  234. package/dist/cli-bundle/chunks/{register-setup-VIAWYFP5.js → register-setup-AJWUSSQX.js} +15 -15
  235. package/dist/cli-bundle/chunks/{restore-4CBWUMCX.js → restore-44IHMMZZ.js} +9 -9
  236. package/dist/cli-bundle/chunks/restore-EXHU34EU.js +17 -0
  237. package/dist/cli-bundle/chunks/{scheduling-shortcuts-6VFKNKCM.js → scheduling-shortcuts-OLHNLAZY.js} +12 -12
  238. package/dist/cli-bundle/chunks/{scheduling-shortcuts-ERHCVTEM.js → scheduling-shortcuts-TSBK4AY5.js} +12 -12
  239. package/dist/cli-bundle/chunks/{schema-TDGK6N3I.js → schema-IB2NZZWD.js} +7 -7
  240. package/dist/cli-bundle/chunks/{schema-UE5KKAUX.js → schema-VBCELP5G.js} +7 -7
  241. package/dist/cli-bundle/chunks/{search-K4CFLQ5S.js → search-7UBETML4.js} +10 -10
  242. package/dist/cli-bundle/chunks/{search-FP7MEU4S.js → search-R227JOL6.js} +10 -10
  243. package/dist/cli-bundle/chunks/{stats-XT6QRKQY.js → stats-FAG7COEH.js} +6 -6
  244. package/dist/cli-bundle/chunks/{stats-NJJCALEZ.js → stats-MCK7PLYS.js} +6 -6
  245. package/dist/cli-bundle/chunks/{telemetry-5SQ5UDXC.js → telemetry-DRPDZMAO.js} +4 -4
  246. package/dist/cli-bundle/chunks/{telemetry-HVXFZA2U.js → telemetry-GVVUQSJQ.js} +4 -4
  247. package/dist/cli-bundle/chunks/{test-YCDAUBWF.js → test-QY44WAMR.js} +15 -15
  248. package/dist/cli-bundle/chunks/{test-UFSJ5YIO.js → test-SY76DZTO.js} +15 -15
  249. package/dist/cli-bundle/chunks/{test-all-PM7UYN42.js → test-all-QD6QAEG7.js} +17 -17
  250. package/dist/cli-bundle/chunks/{test-all-2BWKY3GQ.js → test-all-USPJHXFR.js} +17 -17
  251. package/dist/cli-bundle/chunks/{test-runs-FK5E75AA.js → test-runs-MG5VIGSK.js} +4 -4
  252. package/dist/cli-bundle/chunks/{test-runs-H4TGWGRN.js → test-runs-QIR5MJPL.js} +4 -4
  253. package/dist/cli-bundle/chunks/update-A7EICML6.js +24 -0
  254. package/dist/cli-bundle/chunks/{update-Y5WQVT5O.js → update-IKJZWLQC.js} +15 -15
  255. package/dist/cli-bundle/chunks/{update-many-JTKKSA7Y.js → update-many-BEMTDA2X.js} +28 -28
  256. package/dist/cli-bundle/chunks/{update-many-6YAYYRLE.js → update-many-RATAARHU.js} +28 -28
  257. package/dist/cli-bundle/chunks/{upgrade-JUDU7YL4.js → upgrade-NWMR3VQL.js} +11 -11
  258. package/dist/cli-bundle/chunks/{upgrade-DTAHZ236.js → upgrade-VU46BLJZ.js} +11 -11
  259. package/dist/cli-bundle/chunks/{validate-W7H5TEDC.js → validate-GAJ6FUSI.js} +32 -22
  260. package/dist/cli-bundle/chunks/validate-GAJ6FUSI.js.map +1 -0
  261. package/dist/cli-bundle/chunks/{validate-732RWS5W.js → validate-NRY6MFXN.js} +31 -21
  262. package/dist/cli-bundle/chunks/validate-NRY6MFXN.js.map +7 -0
  263. package/dist/cli-bundle/main.js +180 -122
  264. package/dist/cli-bundle/main.js.map +3 -3
  265. package/dist/core/item/type-registry.js +29 -19
  266. package/dist/core/item/type-registry.js.map +1 -1
  267. package/dist/core/schema/runtime-schema.js +65 -54
  268. package/dist/core/schema/runtime-schema.js.map +1 -1
  269. package/dist/core/schema/status-defs-file.js +26 -3
  270. package/dist/core/schema/status-defs-file.js.map +1 -1
  271. package/dist/core/search/corpus.js +25 -19
  272. package/dist/core/search/corpus.js.map +1 -1
  273. package/dist/core/shared/memo.d.ts +12 -0
  274. package/dist/core/shared/memo.js +25 -0
  275. package/dist/core/shared/memo.js.map +1 -0
  276. package/dist/core/shared/serialization.js +24 -14
  277. package/dist/core/shared/serialization.js.map +1 -1
  278. package/dist/core/shared/time.js +26 -4
  279. package/dist/core/shared/time.js.map +1 -1
  280. package/dist/core/store/front-matter-cache.d.ts +5 -0
  281. package/dist/core/store/front-matter-cache.js +79 -20
  282. package/dist/core/store/front-matter-cache.js.map +1 -1
  283. package/dist/sdk/cli-contracts/flag-contracts.js +71 -99
  284. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  285. package/dist/sdk/compose.js +51 -42
  286. package/dist/sdk/compose.js.map +1 -1
  287. package/docs/AGENT_GUIDE.md +2 -2
  288. package/docs/ARCHITECTURE.md +2 -2
  289. package/docs/COMMANDS.md +8 -4
  290. package/docs/CONFIGURATION.md +1 -1
  291. package/docs/EXTENSIONS.md +12 -12
  292. package/docs/ONBOARDING.md +4 -2
  293. package/docs/README.md +2 -0
  294. package/docs/examples/starter-extension/README.md +11 -10
  295. package/marketplace.json +3 -3
  296. package/package.json +1 -1
  297. package/plugins/pm-claude/.claude-plugin/plugin.json +2 -2
  298. package/plugins/pm-claude/README.md +6 -3
  299. package/plugins/pm-claude/commands/pm-init.md +1 -1
  300. package/dist/cli-bundle/chunks/activity-WEIEMM73.js +0 -16
  301. package/dist/cli-bundle/chunks/chunk-5GVTFFTC.js.map +0 -1
  302. package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +0 -7
  303. package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +0 -7
  304. package/dist/cli-bundle/chunks/chunk-AIAIXG7I.js.map +0 -7
  305. package/dist/cli-bundle/chunks/chunk-AJEBCRIY.js.map +0 -1
  306. package/dist/cli-bundle/chunks/chunk-GFMSLORL.js.map +0 -7
  307. package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +0 -1
  308. package/dist/cli-bundle/chunks/chunk-JXAUVO6X.js.map +0 -7
  309. package/dist/cli-bundle/chunks/chunk-K2VYLVX4.js.map +0 -1
  310. package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +0 -1
  311. package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +0 -7
  312. package/dist/cli-bundle/chunks/chunk-SYNKD3ZG.js.map +0 -7
  313. package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +0 -1
  314. package/dist/cli-bundle/chunks/chunk-XWGEMNBR.js.map +0 -7
  315. package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +0 -1
  316. package/dist/cli-bundle/chunks/chunk-YPKFV2JR.js.map +0 -1
  317. package/dist/cli-bundle/chunks/close-YCWQQPDS.js +0 -14
  318. package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +0 -1
  319. package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +0 -7
  320. package/dist/cli-bundle/chunks/create-XTMAPS7I.js +0 -28
  321. package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +0 -1
  322. package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +0 -7
  323. package/dist/cli-bundle/chunks/history-DD7L7BNL.js +0 -18
  324. package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +0 -19
  325. package/dist/cli-bundle/chunks/init-HHVQQP6C.js +0 -22
  326. package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +0 -1
  327. package/dist/cli-bundle/chunks/profile-CCOKZ2IQ.js.map +0 -1
  328. package/dist/cli-bundle/chunks/profile-HUCENIEQ.js.map +0 -7
  329. package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +0 -1
  330. package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +0 -7
  331. package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +0 -1
  332. package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +0 -7
  333. package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +0 -7
  334. package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +0 -1
  335. package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +0 -17
  336. package/dist/cli-bundle/chunks/update-MTCFES6X.js +0 -24
  337. package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +0 -7
  338. package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +0 -1
  339. /package/dist/cli-bundle/chunks/{activity-CUC4JY3U.js.map → activity-5YWLSPGE.js.map} +0 -0
  340. /package/dist/cli-bundle/chunks/{activity-WEIEMM73.js.map → activity-BIML7K2D.js.map} +0 -0
  341. /package/dist/cli-bundle/chunks/{aggregate-SW5PNGCS.js.map → aggregate-2V2M3JZU.js.map} +0 -0
  342. /package/dist/cli-bundle/chunks/{aggregate-DKUTRY6R.js.map → aggregate-EK7DXML7.js.map} +0 -0
  343. /package/dist/cli-bundle/chunks/{append-UBM632FK.js.map → append-EZESUVJT.js.map} +0 -0
  344. /package/dist/cli-bundle/chunks/{append-H32VOR2Y.js.map → append-JFG4WQMG.js.map} +0 -0
  345. /package/dist/cli-bundle/chunks/{chunk-XTHQWXVC.js.map → chunk-32IUNTG4.js.map} +0 -0
  346. /package/dist/cli-bundle/chunks/{chunk-IEEJQCZ4.js.map → chunk-3W2HJKJX.js.map} +0 -0
  347. /package/dist/cli-bundle/chunks/{chunk-JMK5GCK2.js.map → chunk-4PFVUUYV.js.map} +0 -0
  348. /package/dist/cli-bundle/chunks/{chunk-MRD4T5LF.js.map → chunk-5E7N4T2Z.js.map} +0 -0
  349. /package/dist/cli-bundle/chunks/{chunk-S62UANU7.js.map → chunk-5IZUBZBR.js.map} +0 -0
  350. /package/dist/cli-bundle/chunks/{chunk-BTX5MIQF.js.map → chunk-5JIWFWOZ.js.map} +0 -0
  351. /package/dist/cli-bundle/chunks/{chunk-SYVUU7EK.js.map → chunk-67LARBDL.js.map} +0 -0
  352. /package/dist/cli-bundle/chunks/{chunk-KIYCOJ63.js.map → chunk-6CDCWKSX.js.map} +0 -0
  353. /package/dist/cli-bundle/chunks/{chunk-3LCUASYG.js.map → chunk-6NYJGMTY.js.map} +0 -0
  354. /package/dist/cli-bundle/chunks/{chunk-2ASNV4DH.js.map → chunk-7CLLC75T.js.map} +0 -0
  355. /package/dist/cli-bundle/chunks/{chunk-FFOQHGNH.js.map → chunk-7LYO6S5A.js.map} +0 -0
  356. /package/dist/cli-bundle/chunks/{chunk-55XRYWEG.js.map → chunk-A3OQ7TFW.js.map} +0 -0
  357. /package/dist/cli-bundle/chunks/{chunk-Q6K2OACU.js.map → chunk-AIKU3IIL.js.map} +0 -0
  358. /package/dist/cli-bundle/chunks/{chunk-TTHCEV5Q.js.map → chunk-BE2SR6QL.js.map} +0 -0
  359. /package/dist/cli-bundle/chunks/{chunk-7W4H4K26.js.map → chunk-ECU6MMTQ.js.map} +0 -0
  360. /package/dist/cli-bundle/chunks/{chunk-5PGBHRY3.js.map → chunk-EQURFOMH.js.map} +0 -0
  361. /package/dist/cli-bundle/chunks/{chunk-H4GRLYJS.js.map → chunk-ER4ME5U2.js.map} +0 -0
  362. /package/dist/cli-bundle/chunks/{chunk-QH3FSKRJ.js.map → chunk-ERG65A2L.js.map} +0 -0
  363. /package/dist/cli-bundle/chunks/{chunk-UWKEJMZU.js.map → chunk-F6WNBITZ.js.map} +0 -0
  364. /package/dist/cli-bundle/chunks/{chunk-U2BEEM2X.js.map → chunk-FH2H3CBD.js.map} +0 -0
  365. /package/dist/cli-bundle/chunks/{chunk-EUKTMRN3.js.map → chunk-FUFFPIYA.js.map} +0 -0
  366. /package/dist/cli-bundle/chunks/{chunk-7MYWF4ZX.js.map → chunk-FZJM2TXF.js.map} +0 -0
  367. /package/dist/cli-bundle/chunks/{chunk-CYBDUHNO.js.map → chunk-GUYNUXQT.js.map} +0 -0
  368. /package/dist/cli-bundle/chunks/{chunk-ZNT7KEWE.js.map → chunk-GVJE5T7Q.js.map} +0 -0
  369. /package/dist/cli-bundle/chunks/{chunk-XEWQKDYZ.js.map → chunk-HQAF23Q2.js.map} +0 -0
  370. /package/dist/cli-bundle/chunks/{chunk-KLXF7NCC.js.map → chunk-JBZ2NTKX.js.map} +0 -0
  371. /package/dist/cli-bundle/chunks/{chunk-4NUOWFBT.js.map → chunk-K5DT2YKM.js.map} +0 -0
  372. /package/dist/cli-bundle/chunks/{chunk-KCO2EAN5.js.map → chunk-KEZOIPCR.js.map} +0 -0
  373. /package/dist/cli-bundle/chunks/{chunk-2227673O.js.map → chunk-LBE5QFMZ.js.map} +0 -0
  374. /package/dist/cli-bundle/chunks/{chunk-UGLU6Q2I.js.map → chunk-LOWVNZBZ.js.map} +0 -0
  375. /package/dist/cli-bundle/chunks/{chunk-Y4NRKBFW.js.map → chunk-MDHWWBNZ.js.map} +0 -0
  376. /package/dist/cli-bundle/chunks/{chunk-LRKMWUUV.js.map → chunk-MEZZZBYX.js.map} +0 -0
  377. /package/dist/cli-bundle/chunks/{chunk-Q6NXOHS6.js.map → chunk-NOIEVOK5.js.map} +0 -0
  378. /package/dist/cli-bundle/chunks/{chunk-GRRG3MCT.js.map → chunk-NZ7QIUP5.js.map} +0 -0
  379. /package/dist/cli-bundle/chunks/{chunk-ZNHEYCDD.js.map → chunk-P5L7Z2O6.js.map} +0 -0
  380. /package/dist/cli-bundle/chunks/{chunk-6ZMBJRDJ.js.map → chunk-PULUSQAV.js.map} +0 -0
  381. /package/dist/cli-bundle/chunks/{chunk-EMPGXBUF.js.map → chunk-QCDTQCMW.js.map} +0 -0
  382. /package/dist/cli-bundle/chunks/{chunk-HQTPRV4D.js.map → chunk-SU2E4AWU.js.map} +0 -0
  383. /package/dist/cli-bundle/chunks/{chunk-3Q2HBMTI.js.map → chunk-SU3TB4NS.js.map} +0 -0
  384. /package/dist/cli-bundle/chunks/{chunk-XCHUVHKU.js.map → chunk-SYE6WMV6.js.map} +0 -0
  385. /package/dist/cli-bundle/chunks/{chunk-2KWL5NPW.js.map → chunk-T3P7PMZP.js.map} +0 -0
  386. /package/dist/cli-bundle/chunks/{chunk-N2JSWVWG.js.map → chunk-T4XBKJ3F.js.map} +0 -0
  387. /package/dist/cli-bundle/chunks/{chunk-UTSH5GWX.js.map → chunk-U5TR4N7J.js.map} +0 -0
  388. /package/dist/cli-bundle/chunks/{chunk-UT73HUPC.js.map → chunk-UMNQZS4H.js.map} +0 -0
  389. /package/dist/cli-bundle/chunks/{chunk-CZPVDLD2.js.map → chunk-WJA3PXW7.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{chunk-WJAMWAHZ.js.map → chunk-WRYERRZX.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{chunk-6ITZLD4T.js.map → chunk-WYOIIFSE.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{chunk-IG5JYZGU.js.map → chunk-YPWUSH72.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{chunk-KN3URLKS.js.map → chunk-YSDFIY7N.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{chunk-2CHRYUXL.js.map → chunk-YSGTMDWC.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{chunk-36UGKF4O.js.map → chunk-YVKZ3ANP.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{chunk-A6VOGKBA.js.map → chunk-Z5F6XZXE.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{chunk-LTRAF2D7.js.map → chunk-Z7RPDF2Y.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{chunk-W47SML5B.js.map → chunk-ZFTKYWIF.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{claim-SENTPZBN.js.map → claim-2BGBGSVI.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{claim-Z7MEQCBT.js.map → claim-5GU7OE67.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{close-YCWQQPDS.js.map → close-6YODBUIV.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{close-424MX4CU.js.map → close-AFVKPR57.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{comments-4FGNTSNV.js.map → comments-DNWHEBOS.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{comments-7YS5MY5X.js.map → comments-RW23R3VE.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{config-G74GISC4.js.map → config-AUM5WBYA.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{config-BZJKK7FZ.js.map → config-OZWSA2NP.js.map} +0 -0
  407. /package/dist/cli-bundle/chunks/{context-ZQY54JNS.js.map → context-OYXRGY7S.js.map} +0 -0
  408. /package/dist/cli-bundle/chunks/{context-LHVKJSPJ.js.map → context-PKCEHQY3.js.map} +0 -0
  409. /package/dist/cli-bundle/chunks/{contracts-CP2EZJC7.js.map → contracts-L6ODXNUM.js.map} +0 -0
  410. /package/dist/cli-bundle/chunks/{contracts-FIZLMP7O.js.map → contracts-X74F2GSM.js.map} +0 -0
  411. /package/dist/cli-bundle/chunks/{copy-GYNQQPW2.js.map → copy-6XOR3HKN.js.map} +0 -0
  412. /package/dist/cli-bundle/chunks/{copy-TLW7JTQT.js.map → copy-I4NCLBR4.js.map} +0 -0
  413. /package/dist/cli-bundle/chunks/{create-VSKYSOCD.js.map → create-PM45M6PE.js.map} +0 -0
  414. /package/dist/cli-bundle/chunks/{create-XTMAPS7I.js.map → create-Z7YCH3BE.js.map} +0 -0
  415. /package/dist/cli-bundle/chunks/{delete-ANTOTI2I.js.map → delete-7YXHYG67.js.map} +0 -0
  416. /package/dist/cli-bundle/chunks/{delete-4W5JYCEG.js.map → delete-LPISP43T.js.map} +0 -0
  417. /package/dist/cli-bundle/chunks/{deps-HPPE6MJN.js.map → deps-N2T26FME.js.map} +0 -0
  418. /package/dist/cli-bundle/chunks/{deps-ZQZN54EZ.js.map → deps-WATKQDE3.js.map} +0 -0
  419. /package/dist/cli-bundle/chunks/{docs-RPOVFMP3.js.map → docs-6LQ3GLM7.js.map} +0 -0
  420. /package/dist/cli-bundle/chunks/{docs-XJNYBJGE.js.map → docs-Z3X6JZLT.js.map} +0 -0
  421. /package/dist/cli-bundle/chunks/{eval-RFBI5FGS.js.map → eval-6DCLG52D.js.map} +0 -0
  422. /package/dist/cli-bundle/chunks/{eval-DM6JBZTS.js.map → eval-Y3ZCUTHK.js.map} +0 -0
  423. /package/dist/cli-bundle/chunks/{extension-B3YY4WY5.js.map → extension-BNINIMT7.js.map} +0 -0
  424. /package/dist/cli-bundle/chunks/{extension-TTSEFQTS.js.map → extension-QWE4YYK5.js.map} +0 -0
  425. /package/dist/cli-bundle/chunks/{files-5D65CHGE.js.map → files-6SGKHS6O.js.map} +0 -0
  426. /package/dist/cli-bundle/chunks/{files-GPIG77EN.js.map → files-FUYPSOFJ.js.map} +0 -0
  427. /package/dist/cli-bundle/chunks/{focus-ZHN7WIGX.js.map → focus-2Q3K76G2.js.map} +0 -0
  428. /package/dist/cli-bundle/chunks/{focus-C3PEJV2C.js.map → focus-ATLBWXXD.js.map} +0 -0
  429. /package/dist/cli-bundle/chunks/{gc-D4JQ6OWN.js.map → gc-RUYEMNRF.js.map} +0 -0
  430. /package/dist/cli-bundle/chunks/{gc-VZIXDL32.js.map → gc-TDWSDR66.js.map} +0 -0
  431. /package/dist/cli-bundle/chunks/{get-IOVAN6RU.js.map → get-2WGLX74N.js.map} +0 -0
  432. /package/dist/cli-bundle/chunks/{get-GIBRUUOP.js.map → get-LY6M2JIM.js.map} +0 -0
  433. /package/dist/cli-bundle/chunks/{history-DD7L7BNL.js.map → history-CGNQJXFE.js.map} +0 -0
  434. /package/dist/cli-bundle/chunks/{history-IL7XCEX2.js.map → history-SGRRS72R.js.map} +0 -0
  435. /package/dist/cli-bundle/chunks/{history-compact-MV25P7DM.js.map → history-compact-LOED43R3.js.map} +0 -0
  436. /package/dist/cli-bundle/chunks/{history-compact-HALOTOU7.js.map → history-compact-V5DNAQHH.js.map} +0 -0
  437. /package/dist/cli-bundle/chunks/{history-redact-VYCWQFK7.js.map → history-redact-IRL7WJ3E.js.map} +0 -0
  438. /package/dist/cli-bundle/chunks/{history-redact-IX4YEWMY.js.map → history-redact-N3JK7VBW.js.map} +0 -0
  439. /package/dist/cli-bundle/chunks/{history-repair-44MODPQF.js.map → history-repair-4WVBVHFR.js.map} +0 -0
  440. /package/dist/cli-bundle/chunks/{history-repair-CPNAOCNF.js.map → history-repair-PGYQJMGD.js.map} +0 -0
  441. /package/dist/cli-bundle/chunks/{init-F27NHENZ.js.map → init-4GESW7RM.js.map} +0 -0
  442. /package/dist/cli-bundle/chunks/{init-HHVQQP6C.js.map → init-XIDPABA4.js.map} +0 -0
  443. /package/dist/cli-bundle/chunks/{learnings-HJVDQIGY.js.map → learnings-4BHWFFUV.js.map} +0 -0
  444. /package/dist/cli-bundle/chunks/{learnings-XSFSUUWK.js.map → learnings-4FJY7WIW.js.map} +0 -0
  445. /package/dist/cli-bundle/chunks/{list-HPMEKCAA.js.map → list-472TIOVK.js.map} +0 -0
  446. /package/dist/cli-bundle/chunks/{list-VMPWTURB.js.map → list-D7BF5CL2.js.map} +0 -0
  447. /package/dist/cli-bundle/chunks/{notes-GDZIKGR6.js.map → notes-6KNOSLIT.js.map} +0 -0
  448. /package/dist/cli-bundle/chunks/{notes-WDDBPC4D.js.map → notes-W4UEICGF.js.map} +0 -0
  449. /package/dist/cli-bundle/chunks/{plan-BGDR73Z6.js.map → plan-JO6V7BXO.js.map} +0 -0
  450. /package/dist/cli-bundle/chunks/{plan-C5IMM335.js.map → plan-MJQW5XK3.js.map} +0 -0
  451. /package/dist/cli-bundle/chunks/{register-setup-ZCGKHDKL.js.map → register-setup-3QJY43CY.js.map} +0 -0
  452. /package/dist/cli-bundle/chunks/{register-setup-VIAWYFP5.js.map → register-setup-AJWUSSQX.js.map} +0 -0
  453. /package/dist/cli-bundle/chunks/{restore-4CBWUMCX.js.map → restore-44IHMMZZ.js.map} +0 -0
  454. /package/dist/cli-bundle/chunks/{restore-5UEAGG3W.js.map → restore-EXHU34EU.js.map} +0 -0
  455. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-6VFKNKCM.js.map → scheduling-shortcuts-OLHNLAZY.js.map} +0 -0
  456. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-ERHCVTEM.js.map → scheduling-shortcuts-TSBK4AY5.js.map} +0 -0
  457. /package/dist/cli-bundle/chunks/{schema-TDGK6N3I.js.map → schema-IB2NZZWD.js.map} +0 -0
  458. /package/dist/cli-bundle/chunks/{schema-UE5KKAUX.js.map → schema-VBCELP5G.js.map} +0 -0
  459. /package/dist/cli-bundle/chunks/{search-K4CFLQ5S.js.map → search-7UBETML4.js.map} +0 -0
  460. /package/dist/cli-bundle/chunks/{search-FP7MEU4S.js.map → search-R227JOL6.js.map} +0 -0
  461. /package/dist/cli-bundle/chunks/{stats-XT6QRKQY.js.map → stats-FAG7COEH.js.map} +0 -0
  462. /package/dist/cli-bundle/chunks/{stats-NJJCALEZ.js.map → stats-MCK7PLYS.js.map} +0 -0
  463. /package/dist/cli-bundle/chunks/{telemetry-5SQ5UDXC.js.map → telemetry-DRPDZMAO.js.map} +0 -0
  464. /package/dist/cli-bundle/chunks/{telemetry-HVXFZA2U.js.map → telemetry-GVVUQSJQ.js.map} +0 -0
  465. /package/dist/cli-bundle/chunks/{test-YCDAUBWF.js.map → test-QY44WAMR.js.map} +0 -0
  466. /package/dist/cli-bundle/chunks/{test-UFSJ5YIO.js.map → test-SY76DZTO.js.map} +0 -0
  467. /package/dist/cli-bundle/chunks/{test-all-PM7UYN42.js.map → test-all-QD6QAEG7.js.map} +0 -0
  468. /package/dist/cli-bundle/chunks/{test-all-2BWKY3GQ.js.map → test-all-USPJHXFR.js.map} +0 -0
  469. /package/dist/cli-bundle/chunks/{test-runs-FK5E75AA.js.map → test-runs-MG5VIGSK.js.map} +0 -0
  470. /package/dist/cli-bundle/chunks/{test-runs-H4TGWGRN.js.map → test-runs-QIR5MJPL.js.map} +0 -0
  471. /package/dist/cli-bundle/chunks/{update-MTCFES6X.js.map → update-A7EICML6.js.map} +0 -0
  472. /package/dist/cli-bundle/chunks/{update-Y5WQVT5O.js.map → update-IKJZWLQC.js.map} +0 -0
  473. /package/dist/cli-bundle/chunks/{update-many-JTKKSA7Y.js.map → update-many-BEMTDA2X.js.map} +0 -0
  474. /package/dist/cli-bundle/chunks/{update-many-6YAYYRLE.js.map → update-many-RATAARHU.js.map} +0 -0
  475. /package/dist/cli-bundle/chunks/{upgrade-JUDU7YL4.js.map → upgrade-NWMR3VQL.js.map} +0 -0
  476. /package/dist/cli-bundle/chunks/{upgrade-DTAHZ236.js.map → upgrade-VU46BLJZ.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../cli/register-mutation.ts", "../../../../../../../../core/io/body-file.ts", "../../../../../../../../core/shared/option-alias-visibility.ts"],
4
+ "sourcesContent": ["/**\n * @module cli/register-mutation\n *\n * Provides CLI runtime support for Register Mutation.\n */\nimport { Option, type Command } from \"commander\";\nimport type { GlobalOptions } from \"../core/shared/command-types.js\";\nimport { resolveBodyFileContent } from \"../core/io/body-file.js\";\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport { splitCommaList } from \"../core/shared/split-comma-list.js\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport { isPureSnakeCaseAlias } from \"../core/shared/option-alias-visibility.js\";\nimport {\n CREATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS,\n UPDATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS,\n type CommanderOptionRegistrationContract,\n} from \"../sdk/cli-contracts.js\";\nimport { BUILTIN_ITEM_TYPE_VALUES } from \"../types/index.js\";\n\n// Lowercase set of built-in type names (\"epic\", \"feature\", ...) used by the\n// `pm create` positional guard (pm-edge #1, 2026-05-28): if the single\n// positional exactly matches a known type AND no --title was given, we throw\n// instead of silently creating a Task titled with the type name.\nconst BUILTIN_TYPE_NAME_LOOKUP = new Set<string>(BUILTIN_ITEM_TYPE_VALUES.map((value) => value.toLowerCase()));\nimport {\n collect,\n extractUpdateManyMutationOptionSource,\n formatHookWarnings,\n getGlobalOptions,\n invalidateSearchCachesForMutation,\n normalizeCreateOptions,\n normalizeUpdateOptions,\n printError,\n printResult,\n readOptionString,\n writeStdout,\n} from \"./registration-helpers.js\";\n\n\n\n/**\n * Register a flag and hide it from `--help` text while keeping it fully\n * functional as a parse-time alias. The option still appears in\n * `command.options`, so the JSON help payload and shell completion (which read\n * from the contracts/commander option list, not the rendered text) are\n * unchanged — only commander's text `--help` omits it.\n */\nfunction addHiddenOption(command: Command, flags: string, description: string, repeatable: boolean): void {\n const option = new Option(flags, description).hideHelp();\n if (repeatable) {\n option.argParser(collect);\n }\n command.addOption(option);\n}\n\nfunction addHiddenOptions(\n command: Command,\n aliases: ReadonlyArray<readonly [flags: string, description: string]>,\n repeatable: boolean,\n): void {\n for (const [flags, description] of aliases) {\n addHiddenOption(command, flags, description, repeatable);\n }\n}\n\nconst SCHEMA_SHORTHAND_RESERVED_PREFIXES = [\"add-\", \"apply-\", \"list-\", \"remove-\", \"show-\"] as const;\nconst SCHEMA_SHORTHAND_RESERVED_TOKENS = new Set([\n \"field\",\n \"fields\",\n \"help\",\n \"status\",\n \"statuses\",\n \"type\",\n \"types\",\n]);\n\n/**\n * Implements looks like schema subcommand typo for the public runtime surface of this module.\n */\nexport function looksLikeSchemaSubcommandTypo(value: string): boolean {\n const normalized = value.trim().toLowerCase();\n if (normalized.length === 0) {\n return false;\n }\n return (\n SCHEMA_SHORTHAND_RESERVED_TOKENS.has(normalized) ||\n SCHEMA_SHORTHAND_RESERVED_PREFIXES.some((prefix) => normalized.startsWith(prefix))\n );\n}\n\n/**\n * Parse the `--order` value for `pm schema add-status`. Accepts a value that is\n * already a number or a numeric string; throws a usage error when the flag was\n * supplied but does not parse to a finite integer (rather than silently dropping\n * it). Returns `undefined` only when the flag was genuinely not provided.\n */\nexport function parseSchemaOrderOption(raw: unknown): number | undefined {\n if (raw === undefined || raw === null) {\n return undefined;\n }\n if (typeof raw === \"number\") {\n if (!Number.isInteger(raw)) {\n throw new PmCliError(\"--order must be a finite integer.\", EXIT_CODE.USAGE);\n }\n return raw;\n }\n if (typeof raw === \"string\") {\n if (raw.trim().length === 0) {\n return undefined;\n }\n const parsed = Number(raw);\n if (!Number.isInteger(parsed)) {\n throw new PmCliError(\"--order must be a finite integer.\", EXIT_CODE.USAGE);\n }\n return parsed;\n }\n throw new PmCliError(\"--order must be a finite integer.\", EXIT_CODE.USAGE);\n}\n\ntype SchemaCommandModule = typeof import(\"./commands/schema.js\");\ntype SchemaCommandResult = Awaited<ReturnType<SchemaCommandModule[\"runSchemaList\"]>>\n | Awaited<ReturnType<SchemaCommandModule[\"runSchemaAddType\"]>>\n | Awaited<ReturnType<SchemaCommandModule[\"runSchemaShow\"]>>\n | Awaited<ReturnType<SchemaCommandModule[\"runSchemaShowStatus\"]>>\n | Awaited<ReturnType<SchemaCommandModule[\"runSchemaRemoveType\"]>>\n | Awaited<ReturnType<SchemaCommandModule[\"runSchemaAddStatus\"]>>\n | Awaited<ReturnType<SchemaCommandModule[\"runSchemaRemoveStatus\"]>>\n | Awaited<ReturnType<SchemaCommandModule[\"runSchemaAddField\"]>>\n | Awaited<ReturnType<SchemaCommandModule[\"runSchemaRemoveField\"]>>\n | Awaited<ReturnType<SchemaCommandModule[\"runSchemaListFields\"]>>\n | Awaited<ReturnType<SchemaCommandModule[\"runSchemaShowField\"]>>\n | Awaited<ReturnType<SchemaCommandModule[\"runSchemaApplyPreset\"]>>\n | Awaited<ReturnType<SchemaCommandModule[\"runSchemaInferTypes\"]>>;\n\ninterface SchemaDispatchInputs {\n normalizedSubcommand: string;\n typeName: string | undefined;\n options: Record<string, unknown>;\n aliases: string[] | undefined;\n roles: string[] | undefined;\n commands: string[] | undefined;\n requiredTypes: string[] | undefined;\n defaultStatus: string | undefined;\n order: number | undefined;\n minCount: number | undefined;\n author: string | undefined;\n force: boolean;\n description: string | undefined;\n globalOptions: GlobalOptions;\n}\n\n/**\n * Routes a normalized `pm schema` subcommand to its run function. Extracted from\n * the schema `.action()` body so the per-subcommand dispatch lives in one\n * single-purpose function and registerMutationCommands stays under the\n * cyclomatic-complexity gate.\n */\nasync function dispatchSchemaSubcommand(\n schema: SchemaCommandModule,\n inputs: SchemaDispatchInputs,\n): Promise<SchemaCommandResult> {\n const { normalizedSubcommand, typeName, options, globalOptions } = inputs;\n const { author, force, description } = inputs;\n switch (normalizedSubcommand) {\n case \"list\":\n return schema.runSchemaList(globalOptions);\n case \"show\":\n return schema.runSchemaShow(typeName, globalOptions);\n case \"show-status\":\n return schema.runSchemaShowStatus(typeName, globalOptions);\n case \"list-fields\":\n return schema.runSchemaListFields(globalOptions);\n case \"show-field\":\n return schema.runSchemaShowField(typeName, globalOptions);\n case \"remove-type\":\n return schema.runSchemaRemoveType(typeName, { author, force }, globalOptions);\n case \"remove-field\":\n return schema.runSchemaRemoveField(typeName, { author, force }, globalOptions);\n case \"apply-preset\":\n return schema.runSchemaApplyPreset(typeName, { author, force }, globalOptions);\n case \"add-field\":\n return schema.runSchemaAddField(\n typeName,\n {\n type: typeof options.type === \"string\" ? options.type : undefined,\n commands: inputs.commands,\n description,\n cliFlag: typeof options.cliFlag === \"string\" ? options.cliFlag : undefined,\n alias: inputs.aliases,\n required: Boolean(options.required),\n requiredOnCreate: Boolean(options.requiredOnCreate),\n // commander stores --no-allow-unset as allowUnset:false; the default\n // (flag omitted) is true. Forward the tri-state faithfully.\n allowUnset: options.allowUnset !== false,\n requiredTypes: inputs.requiredTypes,\n author,\n force,\n },\n globalOptions,\n );\n case \"add-status\":\n return schema.runSchemaAddStatus(\n typeName,\n { role: inputs.roles, alias: inputs.aliases, description, order: inputs.order, author, force },\n globalOptions,\n );\n case \"remove-status\":\n return schema.runSchemaRemoveStatus(typeName, { author, force }, globalOptions);\n default:\n // add-type, optionally in --infer mode.\n if (options.infer === true) {\n return schema.runSchemaInferTypes(\n { minCount: inputs.minCount, apply: Boolean(options.apply), author, force },\n globalOptions,\n );\n }\n return schema.runSchemaAddType(\n typeName,\n {\n description,\n defaultStatus: inputs.defaultStatus,\n folder: typeof options.folder === \"string\" ? options.folder : undefined,\n alias: inputs.aliases,\n author,\n force,\n },\n globalOptions,\n );\n }\n}\n\n/**\n * Renders a schema command result for non-JSON, non-quiet output and surfaces\n * any on-write hook warnings. Extracted from the schema `.action()` body to keep\n * registerMutationCommands under the cyclomatic-complexity gate.\n */\nfunction renderSchemaResultHuman(schema: SchemaCommandModule, result: SchemaCommandResult): void {\n switch (result.action) {\n case \"list\":\n writeStdout(`${schema.formatSchemaListHuman(result)}\\n`);\n return;\n case \"show\":\n writeStdout(`${schema.formatSchemaShowHuman(result)}\\n`);\n return;\n case \"show-status\":\n writeStdout(`${schema.formatSchemaShowStatusHuman(result)}\\n`);\n return;\n case \"list-fields\":\n writeStdout(`${schema.formatSchemaListFieldsHuman(result)}\\n`);\n return;\n case \"show-field\":\n writeStdout(`${schema.formatSchemaShowFieldHuman(result)}\\n`);\n return;\n case \"remove-type\":\n writeStdout(`${schema.formatSchemaRemoveTypeHuman(result)}\\n`);\n break;\n case \"remove-field\":\n writeStdout(`${schema.formatSchemaRemoveFieldHuman(result)}\\n`);\n break;\n case \"apply-preset\":\n writeStdout(`${schema.formatSchemaApplyPresetHuman(result)}\\n`);\n break;\n case \"infer-types\":\n writeStdout(`${schema.formatSchemaInferTypesHuman(result)}\\n`);\n break;\n case \"add-field\":\n writeStdout(`${schema.formatSchemaAddFieldHuman(result)}\\n`);\n break;\n case \"add-status\":\n writeStdout(`${schema.formatSchemaAddStatusHuman(result)}\\n`);\n break;\n case \"remove-status\":\n writeStdout(`${schema.formatSchemaRemoveStatusHuman(result)}\\n`);\n break;\n default:\n writeStdout(`${schema.formatSchemaAddTypeHuman(result)}\\n`);\n break;\n }\n // Surface extension on-write hook diagnostics (mutation subcommands only;\n // inspection results carry no warnings array).\n if (result.warnings.length > 0) {\n printError(`schema ${result.action} warnings: ${formatHookWarnings(result.warnings)}`);\n }\n}\n\ntype ProfileCommandModule = typeof import(\"./commands/profile.js\");\ntype ProfileCommandResult =\n | ReturnType<ProfileCommandModule[\"runProfileList\"]>\n | ReturnType<ProfileCommandModule[\"runProfileShow\"]>\n | ReturnType<ProfileCommandModule[\"runProfileLint\"]>\n | Awaited<ReturnType<ProfileCommandModule[\"runProfileApply\"]>>;\n\n/**\n * Routes a normalized `pm profile` subcommand to its run function. Extracted from\n * the profile `.action()` body so the per-subcommand dispatch lives in one place.\n */\nasync function dispatchProfileSubcommand(\n profile: ProfileCommandModule,\n subcommand: string,\n name: string | undefined,\n options: Record<string, unknown>,\n globalOptions: GlobalOptions,\n): Promise<ProfileCommandResult> {\n switch (subcommand) {\n case \"list\":\n return profile.runProfileList();\n case \"show\":\n return profile.runProfileShow(name);\n case \"lint\":\n return profile.runProfileLint(name);\n default:\n return profile.runProfileApply(\n name,\n {\n dryRun: options.dryRun === true,\n author: typeof options.author === \"string\" ? options.author : undefined,\n force: options.force === true,\n },\n globalOptions,\n );\n }\n}\n\n/**\n * Renders a profile command result for non-JSON, non-quiet output and surfaces\n * any on-write hook warnings from an apply.\n */\nfunction renderProfileResultHuman(profile: ProfileCommandModule, result: ProfileCommandResult): void {\n switch (result.action) {\n case \"list\":\n writeStdout(`${profile.formatProfileListHuman(result)}\\n`);\n return;\n case \"show\":\n writeStdout(`${profile.formatProfileShowHuman(result)}\\n`);\n return;\n case \"lint\":\n writeStdout(`${profile.formatProfileLintHuman(result)}\\n`);\n return;\n default:\n writeStdout(`${profile.formatProfileApplyHuman(result)}\\n`);\n if (result.warnings.length > 0) {\n printError(`profile apply warnings: ${formatHookWarnings(result.warnings)}`);\n }\n break;\n }\n}\n\n/**\n * Build a commander argParser that coerces a flag value into a positive\n * (1-based) integer, throwing a usage error when the supplied value is not a\n * whole number >= 1. Used by `pm comments --edit/--delete <index>` so an\n * invalid index fails fast with a clear message instead of silently coercing.\n */\nexport function parsePositiveIntOption(flag: string): (value: string) => number {\n return (value: string): number => {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < 1) {\n throw new PmCliError(`${flag} must be a positive integer (1-based index).`, EXIT_CODE.USAGE);\n }\n return parsed;\n };\n}\n\n// Bulk content-field selection filters (GH-242) shared by update-many and\n// close-many. Each pair mirrors the list-family presence/absence flags but uses\n// the `--filter-` prefix so they live in the bulk-selection namespace. The\n// governance-missing filters (GH-236) reuse the same `--filter-<gov>-missing`\n// spelling as the list family.\nfunction registerBulkContentAndGovernanceFilters(command: Command, action: string): void {\n command\n .option(\"--filter-has-notes\", `Select only items that have notes before ${action}`)\n .option(\"--filter-no-notes\", `Select only items that have no notes before ${action}`)\n .option(\"--filter-has-learnings\", `Select only items that have learnings before ${action}`)\n .option(\"--filter-no-learnings\", `Select only items that have no learnings before ${action}`)\n .option(\"--filter-has-files\", `Select only items that have linked files before ${action}`)\n .option(\"--filter-no-files\", `Select only items that have no linked files before ${action}`)\n .option(\"--filter-has-docs\", `Select only items that have linked docs before ${action}`)\n .option(\"--filter-no-docs\", `Select only items that have no linked docs before ${action}`)\n .option(\"--filter-has-tests\", `Select only items that have linked tests before ${action}`)\n .option(\"--filter-no-tests\", `Select only items that have no linked tests before ${action}`)\n .option(\"--filter-has-comments\", `Select only items that have comments before ${action}`)\n .option(\"--filter-no-comments\", `Select only items that have no comments before ${action}`)\n .option(\"--filter-has-deps\", `Select only items that have dependencies before ${action}`)\n .option(\"--filter-no-deps\", `Select only items that have no dependencies before ${action}`)\n .option(\"--filter-has-body\", `Select only items that have a non-empty body before ${action}`)\n .option(\"--filter-empty-body\", `Select only items with an empty body before ${action}`)\n .option(\"--filter-has-linked-command\", `Select only items whose linked tests carry a runnable command before ${action}`)\n .option(\"--filter-no-linked-command\", `Select only items whose linked tests carry no runnable command before ${action}`)\n .option(\"--filter-reviewer-missing\", `Select only items missing reviewer before ${action}`)\n .option(\"--filter-risk-missing\", `Select only items missing risk before ${action}`)\n .option(\"--filter-confidence-missing\", `Select only items missing confidence before ${action}`)\n .option(\"--filter-sprint-missing\", `Select only items missing sprint before ${action}`)\n .option(\"--filter-release-missing\", `Select only items missing release before ${action}`);\n}\n\n// Map the bulk content/governance `--filter-*` commander options into the\n// ListOptions content/governance fields runList consumes. Shared by update-many\n// and close-many.\n// [hasCommanderKey, noCommanderKey, --filter-has flag, --filter-no flag]\nconst BULK_CONTENT_FILTER_CONFLICTS: ReadonlyArray<readonly [string, string, string, string]> = [\n [\"filterHasNotes\", \"filterNoNotes\", \"--filter-has-notes\", \"--filter-no-notes\"],\n [\"filterHasLearnings\", \"filterNoLearnings\", \"--filter-has-learnings\", \"--filter-no-learnings\"],\n [\"filterHasFiles\", \"filterNoFiles\", \"--filter-has-files\", \"--filter-no-files\"],\n [\"filterHasDocs\", \"filterNoDocs\", \"--filter-has-docs\", \"--filter-no-docs\"],\n [\"filterHasTests\", \"filterNoTests\", \"--filter-has-tests\", \"--filter-no-tests\"],\n [\"filterHasComments\", \"filterNoComments\", \"--filter-has-comments\", \"--filter-no-comments\"],\n [\"filterHasDeps\", \"filterNoDeps\", \"--filter-has-deps\", \"--filter-no-deps\"],\n [\"filterHasBody\", \"filterEmptyBody\", \"--filter-has-body\", \"--filter-empty-body\"],\n [\"filterHasLinkedCommand\", \"filterNoLinkedCommand\", \"--filter-has-linked-command\", \"--filter-no-linked-command\"],\n];\n\nfunction mapBulkContentAndGovernanceFilters(options: Record<string, unknown>): Record<string, unknown> {\n const presence = (key: string): true | undefined => (options[key] === true ? true : undefined);\n // Catch a both-present-and-absent bulk request here so the error names the\n // bulk --filter-* flags the user actually typed, rather than the downstream\n // list-level --has-/--no- flags resolveContentFieldFilters would report.\n for (const [hasKey, noKey, hasFlag, noFlag] of BULK_CONTENT_FILTER_CONFLICTS) {\n if (options[hasKey] === true && options[noKey] === true) {\n throw new PmCliError(`Cannot combine ${hasFlag} with ${noFlag} for the same field.`, EXIT_CODE.USAGE);\n }\n }\n return {\n filterReviewerMissing: presence(\"filterReviewerMissing\"),\n filterRiskMissing: presence(\"filterRiskMissing\"),\n filterConfidenceMissing: presence(\"filterConfidenceMissing\"),\n filterSprintMissing: presence(\"filterSprintMissing\"),\n filterReleaseMissing: presence(\"filterReleaseMissing\"),\n hasNotes: presence(\"filterHasNotes\"),\n hasLearnings: presence(\"filterHasLearnings\"),\n hasFiles: presence(\"filterHasFiles\"),\n hasDocs: presence(\"filterHasDocs\"),\n hasTests: presence(\"filterHasTests\"),\n hasComments: presence(\"filterHasComments\"),\n hasDeps: presence(\"filterHasDeps\"),\n hasBody: presence(\"filterHasBody\"),\n hasLinkedCommand: presence(\"filterHasLinkedCommand\"),\n noNotes: presence(\"filterNoNotes\"),\n noLearnings: presence(\"filterNoLearnings\"),\n noFiles: presence(\"filterNoFiles\"),\n noDocs: presence(\"filterNoDocs\"),\n noTests: presence(\"filterNoTests\"),\n noComments: presence(\"filterNoComments\"),\n noDeps: presence(\"filterNoDeps\"),\n emptyBody: presence(\"filterEmptyBody\"),\n noLinkedCommand: presence(\"filterNoLinkedCommand\"),\n };\n}\n\n/**\n * Implements register commander option contracts for the public runtime surface of this module.\n */\nexport function registerCommanderOptionContracts(command: Command, contracts: CommanderOptionRegistrationContract[]): void {\n for (const contract of contracts) {\n if (contract.required) {\n command.requiredOption(contract.option, contract.description);\n } else if (contract.repeatable) {\n command.option(contract.option, contract.description, collect);\n } else {\n command.option(contract.option, contract.description);\n }\n for (const aliasContract of contract.aliasOptions ?? []) {\n // Hide pure snake_case underscore-duplicate aliases (e.g. --create_mode\n // for --create-mode) from --help, but keep semantically-distinct aliases\n // (e.g. --ac for --acceptance-criteria) visible.\n if (isPureSnakeCaseAlias(contract.option, aliasContract.option)) {\n addHiddenOption(command, aliasContract.option, aliasContract.description, contract.repeatable === true);\n } else if (contract.repeatable) {\n command.option(aliasContract.option, aliasContract.description, collect);\n } else {\n command.option(aliasContract.option, aliasContract.description);\n }\n }\n }\n}\n\n/**\n * Map raw `update-many --filter-*` commander options into the ListOptions shape\n * runList consumes. Extracted from registerMutationCommands so its many\n * string/boolean coercions do not inflate that function's cyclomatic complexity.\n */\nfunction buildUpdateManyListOptions(options: Record<string, unknown>): Record<string, unknown> {\n const readString = (key: string): string | undefined =>\n typeof options[key] === \"string\" ? (options[key] as string) : undefined;\n return {\n type: readString(\"filterType\"),\n tag: readString(\"filterTag\"),\n priority: readString(\"filterPriority\"),\n deadlineBefore: readString(\"filterDeadlineBefore\"),\n deadlineAfter: readString(\"filterDeadlineAfter\"),\n updatedAfter: readString(\"filterUpdatedAfter\"),\n updatedBefore: readString(\"filterUpdatedBefore\"),\n createdAfter: readString(\"filterCreatedAfter\"),\n createdBefore: readString(\"filterCreatedBefore\"),\n ids: readString(\"ids\"),\n assignee: readString(\"filterAssignee\"),\n assigneeFilter: readString(\"filterAssigneeFilter\") ?? readString(\"filterAssignee_filter\"),\n parent: readString(\"filterParent\"),\n sprint: readString(\"filterSprint\"),\n release: readString(\"filterRelease\"),\n filterAcMissing: options.filterAcMissing === true ? true : undefined,\n filterEstimatesMissing:\n options.filterEstimatesMissing === true || options.filterEstimateMissing === true ? true : undefined,\n filterResolutionMissing: options.filterResolutionMissing === true ? true : undefined,\n filterMetadataMissing: options.filterMetadataMissing === true ? true : undefined,\n ...mapBulkContentAndGovernanceFilters(options),\n limit: readString(\"limit\"),\n offset: readString(\"offset\"),\n includeBody: true,\n };\n}\n\nfunction pickStringOption(...candidates: unknown[]): string | undefined {\n for (const candidate of candidates) {\n if (typeof candidate === \"string\") {\n return candidate;\n }\n }\n return undefined;\n}\n\nfunction stringArrayOption(value: unknown): string[] | undefined {\n if (Array.isArray(value)) {\n return value as string[];\n }\n if (typeof value === \"string\") {\n return [value];\n }\n return undefined;\n}\n\nfunction resolveCreatePositionals(\n typeOrTitle: string | undefined,\n secondTitle: string | undefined,\n options: Record<string, unknown>,\n): { positionalType: string | undefined; positionalTitle: string | undefined } {\n if (typeof secondTitle === \"string\" && secondTitle.length > 0) {\n return { positionalType: typeOrTitle, positionalTitle: secondTitle };\n }\n if (typeof typeOrTitle !== \"string\" || typeOrTitle.length === 0) {\n return { positionalType: undefined, positionalTitle: undefined };\n }\n const explicitTitleProvided = typeof options.title === \"string\" && options.title.trim().length > 0;\n return explicitTitleProvided && options.type === undefined\n ? { positionalType: typeOrTitle, positionalTitle: undefined }\n : { positionalType: undefined, positionalTitle: typeOrTitle };\n}\n\nfunction assertCreatePositionalTypeHasTitle(positionalType: string | undefined, positionalTitle: string | undefined, options: Record<string, unknown>): void {\n if (\n positionalType !== undefined ||\n typeof positionalTitle !== \"string\" ||\n positionalTitle.length === 0 ||\n options.title !== undefined ||\n options.type !== undefined ||\n !BUILTIN_TYPE_NAME_LOOKUP.has(positionalTitle.trim().toLowerCase())\n ) {\n return;\n }\n const matchedType = positionalTitle.trim();\n throw new PmCliError(\n `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}.`,\n EXIT_CODE.USAGE,\n {\n code: \"create_positional_type_without_title\",\n 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 + \"\\\".\",\n examples: [\n `pm create ${matchedType} \"Wire up SSO for the agent harness\"`,\n `pm create \"Wire up SSO for the agent harness\" --type ${matchedType}`,\n ],\n nextSteps: [\n `Re-run with both type and title: pm create ${matchedType} \"<title>\"`,\n ],\n },\n );\n}\n\nasync function runCreateAction(\n typeOrTitle: string | undefined,\n secondTitle: string | undefined,\n options: Record<string, unknown>,\n command: Command,\n): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const positionals = resolveCreatePositionals(typeOrTitle, secondTitle, options);\n assertCreatePositionalTypeHasTitle(positionals.positionalType, positionals.positionalTitle, options);\n if (typeof positionals.positionalType === \"string\" && positionals.positionalType.length > 0 && options.type === undefined) {\n options.type = positionals.positionalType;\n }\n if (typeof positionals.positionalTitle === \"string\" && positionals.positionalTitle.length > 0 && options.title === undefined) {\n options.title = positionals.positionalTitle;\n }\n if (typeof options.bodyFile === \"string\") {\n options.body = await resolveBodyFileContent(\n options.bodyFile,\n options.body !== undefined ? String(options.body) : undefined,\n );\n delete options.bodyFile;\n }\n const normalized = normalizeCreateOptions(options, { requireType: false });\n const { runCreate } = await import(\"./commands/create.js\");\n const result = await runCreate(normalized, globalOptions);\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=create took_ms=${Date.now() - startedAt}`);\n }\n}\n\nfunction buildCloseManyListOptions(options: Record<string, unknown>): Record<string, unknown> {\n return {\n type: readOptionString(options, \"filterType\"),\n tag: readOptionString(options, \"filterTag\"),\n priority: readOptionString(options, \"filterPriority\"),\n deadlineBefore: readOptionString(options, \"filterDeadlineBefore\"),\n deadlineAfter: readOptionString(options, \"filterDeadlineAfter\"),\n updatedAfter: readOptionString(options, \"filterUpdatedAfter\"),\n updatedBefore: readOptionString(options, \"filterUpdatedBefore\"),\n createdAfter: readOptionString(options, \"filterCreatedAfter\"),\n createdBefore: readOptionString(options, \"filterCreatedBefore\"),\n ids: readOptionString(options, \"ids\"),\n assignee: readOptionString(options, \"filterAssignee\"),\n assigneeFilter: pickStringOption(options.filterAssigneeFilter, options.filterAssignee_filter),\n parent: readOptionString(options, \"filterParent\"),\n sprint: readOptionString(options, \"filterSprint\"),\n release: readOptionString(options, \"filterRelease\"),\n ...mapBulkContentAndGovernanceFilters(options),\n limit: readOptionString(options, \"limit\"),\n offset: readOptionString(options, \"offset\"),\n };\n}\n\nasync function runCloseManyAction(options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runCloseMany } = await import(\"./commands/close-many.js\");\n const result = await runCloseMany(\n {\n status: readOptionString(options, \"filterStatus\"),\n list: buildCloseManyListOptions(options),\n reason: readOptionString(options, \"reason\"),\n resolution: readOptionString(options, \"resolution\"),\n expectedResult: pickStringOption(options.expectedResult, options.expected_result, options.expected),\n actualResult: pickStringOption(options.actualResult, options.actual_result, options.actual),\n validateClose:\n options.validateClose === true\n ? \"warn\"\n : readOptionString(options, \"validateClose\"),\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n force: Boolean(options.force),\n dryRun: options.dryRun === true ? true : undefined,\n rollback: readOptionString(options, \"rollback\"),\n checkpoint: options.checkpoint === false ? false : undefined,\n },\n globalOptions,\n );\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=close-many took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runUpdateManyAction(options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runUpdateMany } = await import(\"./commands/update-many.js\");\n const result = await runUpdateMany(\n {\n status: readOptionString(options, \"filterStatus\"),\n list: buildUpdateManyListOptions(options),\n update: normalizeUpdateOptions(extractUpdateManyMutationOptionSource(options)),\n dryRun: options.dryRun === true ? true : undefined,\n rollback: readOptionString(options, \"rollback\"),\n checkpoint: options.checkpoint === false ? false : undefined,\n },\n globalOptions,\n );\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=update-many took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runCloseAction(\n id: string,\n text: string | undefined,\n options: Record<string, unknown>,\n command: Command,\n): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runClose } = await import(\"./commands/close.js\");\n const reasonFromOption =\n (typeof options.reason === \"string\" && options.reason.trim().length > 0 && options.reason) ||\n (typeof options.closeReason === \"string\" && options.closeReason.trim().length > 0 && options.closeReason) ||\n undefined;\n const resolvedText = typeof text === \"string\" && text.length > 0 ? text : reasonFromOption;\n const result = await runClose(\n id,\n resolvedText,\n {\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n validateClose:\n options.validateClose === true\n ? \"warn\"\n : readOptionString(options, \"validateClose\"),\n force: Boolean(options.force),\n duplicateOf: readOptionString(options, \"duplicateOf\"),\n resolution: readOptionString(options, \"resolution\"),\n expectedResult: pickStringOption(options.expectedResult, options.expected_result, options.expected),\n actualResult: pickStringOption(options.actualResult, options.actual_result, options.actual),\n },\n globalOptions,\n );\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=close took_ms=${Date.now() - startedAt}`);\n }\n}\n\nfunction normalizePlanAliases(options: Record<string, unknown>): Record<string, unknown> {\n const planOptions: Record<string, unknown> = { ...options };\n const aliasPairs: Array<[string, string]> = [\n [\"blocked_by\", \"blockedBy\"],\n [\"resume_context\", \"resumeContext\"],\n [\"from_search\", \"fromSearch\"],\n [\"step_title\", \"stepTitle\"],\n [\"step_body\", \"stepBody\"],\n [\"step_owner\", \"stepOwner\"],\n [\"step_status\", \"stepStatus\"],\n [\"step_evidence\", \"stepEvidence\"],\n [\"step_blocked_reason\", \"stepBlockedReason\"],\n [\"step_replacement\", \"stepReplacement\"],\n [\"depends_on\", \"dependsOn\"],\n [\"link_kind\", \"linkKind\"],\n [\"link_note\", \"linkNote\"],\n [\"promote_to_item_dep\", \"promoteToItemDep\"],\n [\"allow_multiple_active\", \"allowMultipleActive\"],\n [\"decision_text\", \"decisionText\"],\n [\"decision_rationale\", \"decisionRationale\"],\n [\"decision_evidence\", \"decisionEvidence\"],\n [\"discovery_text\", \"discoveryText\"],\n [\"validation_text\", \"validationText\"],\n [\"validation_command\", \"validationCommand\"],\n [\"validation_expected\", \"validationExpected\"],\n [\"materialize_type\", \"materializeType\"],\n [\"materialize_parent\", \"materializeParent\"],\n [\"materialize_tags\", \"materializeTags\"],\n ];\n for (const [snake, camel] of aliasPairs) {\n if (planOptions[snake] !== undefined && planOptions[camel] === undefined) {\n planOptions[camel] = planOptions[snake];\n }\n }\n return planOptions;\n}\n\nfunction assertKnownPlanSubcommand(subcommand: string | undefined, normalized: string, allowed: readonly string[]): void {\n if (!normalized) {\n throw new PmCliError(\n `pm plan requires a subcommand. Allowed: ${allowed.join(\", \")}`,\n EXIT_CODE.USAGE,\n {\n code: \"missing_required_argument\",\n examples: [\n 'pm plan create --title \"Refactor lock retry\"',\n \"pm plan show pm-a1b2 --depth standard\",\n 'pm plan add-step pm-a1b2 --step-title \"Read lock.ts\"',\n ],\n },\n );\n }\n if (allowed.includes(normalized)) {\n return;\n }\n const examples = normalized === \"list\" || normalized === \"ls\" ? ['pm list --type Plan', 'pm list-all --type Plan'] : undefined;\n throw new PmCliError(\n `Unknown pm plan subcommand \"${subcommand}\". Allowed: ${allowed.join(\", \")}`,\n EXIT_CODE.USAGE,\n examples ? { code: \"unknown_subcommand\", examples } : undefined,\n );\n}\n\nfunction parsePlanReorderTo(normalizedSubcommand: string, reorderToken: string | undefined): number | undefined {\n if (normalizedSubcommand !== \"reorder-step\" || typeof reorderToken !== \"string\") {\n return undefined;\n }\n const parsed = Number.parseInt(reorderToken, 10);\n if (!Number.isFinite(parsed)) {\n throw new PmCliError(`reorder-step requires an integer new order, got \"${reorderToken}\"`, EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\nasync function runPlanAction(\n subcommand: string | undefined,\n id: string | undefined,\n stepRef: string | undefined,\n reorderToken: string | undefined,\n options: Record<string, unknown>,\n command: Command,\n): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runPlan, PLAN_SUBCOMMANDS } = await import(\"./commands/plan.js\");\n const normalizedSubcommand = (subcommand ?? \"\").trim().toLowerCase();\n assertKnownPlanSubcommand(subcommand, normalizedSubcommand, PLAN_SUBCOMMANDS);\n const planOptions = normalizePlanAliases(options);\n const reorderTo = parsePlanReorderTo(normalizedSubcommand, reorderToken);\n const planId = normalizedSubcommand === \"create\" && typeof id === \"string\" && id.length > 0 && planOptions.title === undefined\n ? undefined\n : id;\n if (planId === undefined && typeof id === \"string\" && id.length > 0) {\n planOptions.title = id;\n }\n const result = await runPlan({\n subcommand: normalizedSubcommand as typeof PLAN_SUBCOMMANDS[number],\n id: planId,\n stepRef,\n reorderTo,\n options: planOptions as Record<string, never>,\n global: globalOptions,\n });\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=plan took_ms=${Date.now() - startedAt}`);\n }\n}\n\nfunction parseNonNegativeIntFlag(raw: unknown, flag: string): number | undefined {\n if (typeof raw !== \"string\") {\n return undefined;\n }\n if (!/^\\d+$/.test(raw.trim())) {\n throw new PmCliError(`history-compact ${flag} must be a non-negative integer.`, EXIT_CODE.USAGE);\n }\n return Number.parseInt(raw, 10);\n}\n\nasync function runHistoryCompactAction(id: string | undefined, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runHistoryCompact, runHistoryCompactBulk, assertHistoryCompactTarget } = await import(\n \"./commands/history-compact.js\"\n );\n const ids = typeof options.ids === \"string\" ? splitCommaList(options.ids) : undefined;\n const allOver = parseNonNegativeIntFlag(options.allOver, \"--all-over\");\n const minEntries = parseNonNegativeIntFlag(options.minEntries, \"--min-entries\");\n if (options.closed === true && options.allStreams === true) {\n throw new PmCliError(\n \"history-compact: --closed and --all-streams are mutually exclusive; pick one lifecycle scope.\",\n EXIT_CODE.USAGE,\n );\n }\n const scope = options.closed === true ? \"closed\" : options.allStreams === true ? \"all-streams\" : undefined;\n const isBulk = ids !== undefined || allOver !== undefined || scope !== undefined;\n if (isBulk && typeof options.before === \"string\") {\n throw new PmCliError(\n \"history-compact: --before applies only in single-id mode (bulk mode always compacts full streams).\",\n EXIT_CODE.USAGE,\n );\n }\n assertHistoryCompactTarget(id, { ids, allOver, scope });\n if (id === undefined) {\n const result = await runHistoryCompactBulk(\n {\n ids,\n scope,\n allOver,\n minEntries,\n dryRun: options.dryRun === true,\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n force: Boolean(options.force),\n },\n globalOptions,\n );\n printResult(result, globalOptions);\n if (result.totals.items_errored > 0) {\n process.exitCode = EXIT_CODE.GENERIC_FAILURE;\n }\n } else {\n const result = await runHistoryCompact(\n id,\n {\n before: readOptionString(options, \"before\"),\n dryRun: options.dryRun === true,\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n force: Boolean(options.force),\n },\n globalOptions,\n );\n printResult(result, globalOptions);\n }\n if (globalOptions.profile) {\n printError(`profile:command=history-compact took_ms=${Date.now() - startedAt}`);\n }\n}\n\nfunction splitCollectedCommaList(raw: unknown): string[] | undefined {\n if (!Array.isArray(raw)) {\n return undefined;\n }\n return (raw as string[])\n .flatMap((value) => value.split(\",\"))\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n}\n\nasync function runSchemaAction(\n subcommand: string | undefined,\n name: string | undefined,\n options: Record<string, unknown>,\n command: Command,\n): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const schemaModule = await import(\"./commands/schema.js\");\n const { SCHEMA_SUBCOMMANDS } = schemaModule;\n let normalizedSubcommand = (subcommand ?? \"\").trim().toLowerCase();\n let typeName = name;\n assertSchemaSubcommandPresent(normalizedSubcommand, SCHEMA_SUBCOMMANDS);\n if (\n !SCHEMA_SUBCOMMANDS.includes(normalizedSubcommand as typeof SCHEMA_SUBCOMMANDS[number]) &&\n typeName === undefined &&\n !looksLikeSchemaSubcommandTypo(normalizedSubcommand)\n ) {\n typeName = subcommand;\n normalizedSubcommand = \"add-type\";\n }\n if (!SCHEMA_SUBCOMMANDS.includes(normalizedSubcommand as typeof SCHEMA_SUBCOMMANDS[number])) {\n throw new PmCliError(\n `Unknown pm schema subcommand \"${subcommand}\". Allowed: ${SCHEMA_SUBCOMMANDS.join(\", \")}`,\n EXIT_CODE.USAGE,\n { code: \"unknown_subcommand\" },\n );\n }\n const result = await dispatchSchemaSubcommand(schemaModule, {\n normalizedSubcommand,\n typeName,\n options,\n aliases: stringArrayOption(options.alias),\n roles: stringArrayOption(options.role),\n commands: splitCollectedCommaList(options.commands),\n requiredTypes: splitCollectedCommaList(options.requiredTypes),\n defaultStatus: pickStringOption(options.defaultStatus, options.default_status),\n order: parseSchemaOrderOption(options.order),\n minCount: parseSchemaOrderOption(options.minCount),\n author: readOptionString(options, \"author\"),\n force: Boolean(options.force),\n description: readOptionString(options, \"description\"),\n globalOptions,\n });\n if (globalOptions.json === true || globalOptions.defaultOutputFormat === \"json\") {\n printResult(result, globalOptions);\n } else if (!globalOptions.quiet) {\n renderSchemaResultHuman(schemaModule, result);\n }\n if (globalOptions.profile) {\n printError(`profile:command=schema took_ms=${Date.now() - startedAt}`);\n }\n}\n\nfunction assertSchemaSubcommandPresent(normalizedSubcommand: string, allowed: readonly string[]): void {\n if (normalizedSubcommand) {\n return;\n }\n throw new PmCliError(\n `pm schema requires a subcommand. Allowed: ${allowed.join(\", \")}`,\n EXIT_CODE.USAGE,\n {\n code: \"missing_required_argument\",\n examples: [\n \"pm schema list\",\n \"pm schema show Task\",\n \"pm schema show-status open\",\n 'pm schema add-type Spike --description \"Time-boxed investigation\" --default-status open',\n \"pm schema remove-type Spike\",\n \"pm schema add-status review --role active --alias in_review\",\n \"pm schema remove-status review\",\n \"pm schema add-field severity_level --type string --commands create,update\",\n \"pm schema list-fields\",\n \"pm schema apply-preset agile\",\n \"pm schema add-type --infer --min-count 10\",\n ],\n },\n );\n}\n\nfunction resolveCommentSources(text: string | undefined, options: Record<string, unknown>): {\n add: string | undefined;\n readFromStdin: boolean;\n readFromFile: string | undefined;\n editIndex: number | undefined;\n deleteIndex: number | undefined;\n isMutation: boolean;\n} {\n const editIndex = typeof options.edit === \"number\" ? options.edit : undefined;\n const deleteIndex = typeof options.delete === \"number\" ? options.delete : undefined;\n const addFromOption = readOptionString(options, \"add\");\n const addFromPositional = typeof text === \"string\" ? text : undefined;\n const readFromStdin = options.stdin === true;\n const readFromFile = readOptionString(options, \"file\");\n const sourceCount =\n Number(addFromOption !== undefined) +\n Number(addFromPositional !== undefined) +\n Number(readFromStdin) +\n Number(readFromFile !== undefined);\n if (sourceCount > 1) {\n if (addFromOption !== undefined && addFromPositional !== undefined && !readFromStdin && readFromFile === undefined) {\n throw new PmCliError(\"Specify comment text either as positional [text] or with --add, not both\", EXIT_CODE.USAGE);\n }\n throw new PmCliError(\n \"Specify comment text with exactly one source: positional [text], --add, --stdin, or --file\",\n EXIT_CODE.USAGE,\n );\n }\n const add = addFromOption ?? addFromPositional;\n const isMutation =\n typeof add === \"string\" || readFromStdin || readFromFile !== undefined || editIndex !== undefined || deleteIndex !== undefined;\n return { add, readFromStdin, readFromFile, editIndex, deleteIndex, isMutation };\n}\n\nasync function runCommentsAction(id: string, text: string | undefined, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const sources = resolveCommentSources(text, options);\n const { runComments } = await import(\"./commands/comments.js\");\n const result = await runComments(id, {\n add: sources.add,\n stdin: sources.readFromStdin,\n file: sources.readFromFile,\n edit: sources.editIndex,\n delete: sources.deleteIndex,\n limit: readOptionString(options, \"limit\"),\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n allowAuditComment: Boolean(options.allowAuditComment),\n force: Boolean(options.force),\n }, globalOptions);\n if (sources.isMutation) {\n await invalidateSearchCachesForMutation(globalOptions, result);\n }\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=comments took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runCopyAction(id: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runCopy } = await import(\"./commands/copy.js\");\n const result = await runCopy(\n id,\n {\n title: readOptionString(options, \"title\"),\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n },\n globalOptions,\n );\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=copy took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runFocusAction(id: string | undefined, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runFocus } = await import(\"./commands/focus.js\");\n const result = await runFocus(id, { clear: options.clear === true }, globalOptions);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=focus took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runUpdateAction(id: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n // GH-214: resolve --body-file into the existing body field before\n // normalization so the rest of update is unchanged. CLI-only input alias.\n if (typeof options.bodyFile === \"string\") {\n options.body = await resolveBodyFileContent(\n options.bodyFile,\n options.body !== undefined ? String(options.body) : undefined,\n );\n delete options.bodyFile;\n }\n const { runUpdate } = await import(\"./commands/update.js\");\n const result = await runUpdate(id, normalizeUpdateOptions(options), globalOptions);\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=update took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runDeleteAction(id: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runDelete } = await import(\"./commands/delete.js\");\n const result = await runDelete(id, {\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n force: Boolean(options.force),\n dryRun: options.dryRun === true,\n }, globalOptions);\n if (result.dry_run !== true) {\n await invalidateSearchCachesForMutation(globalOptions, result);\n }\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=delete took_ms=${Date.now() - startedAt}`);\n }\n}\n\nfunction resolveSingleTextSource(label: string, positional: string | undefined, options: Record<string, unknown>): string | undefined {\n const addFromOption = readOptionString(options, \"add\");\n const addFromPositional = typeof positional === \"string\" ? positional : undefined;\n if (addFromOption !== undefined && addFromPositional !== undefined) {\n throw new PmCliError(`Specify ${label} text either as positional [text] or with --add, not both`, EXIT_CODE.USAGE);\n }\n return addFromOption ?? addFromPositional;\n}\n\nfunction resolveAppendBody(text: string | undefined, options: Record<string, unknown>): string {\n const bodyFromOption = readOptionString(options, \"body\");\n const bodyFromAlias = readOptionString(options, \"text\");\n const bodyFromPositional = typeof text === \"string\" ? text : undefined;\n const bodySourceCount = [bodyFromOption, bodyFromAlias, bodyFromPositional].filter((value) => value !== undefined).length;\n if (bodySourceCount > 1) {\n throw new PmCliError(\"Specify append text with exactly one source: positional [text], --body, or --text\", EXIT_CODE.USAGE);\n }\n const resolvedBody = bodyFromOption ?? bodyFromAlias ?? bodyFromPositional;\n if (resolvedBody === undefined) {\n throw new PmCliError(\n \"Missing append text. Provide it as positional [text], --body <value>, or --text <value> (use - for stdin).\",\n EXIT_CODE.USAGE,\n );\n }\n return resolvedBody;\n}\n\nasync function runAppendAction(id: string, text: string | undefined, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runAppend } = await import(\"./commands/append.js\");\n const result = await runAppend(id, {\n body: resolveAppendBody(text, options),\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n force: Boolean(options.force),\n }, globalOptions);\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=append took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runRestoreAction(id: string, target: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runRestore } = await import(\"./commands/restore.js\");\n const result = await runRestore(id, target, {\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n force: Boolean(options.force),\n }, globalOptions);\n await invalidateSearchCachesForMutation(globalOptions, result);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=restore took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runProfileAction(\n subcommand: string | undefined,\n name: string | undefined,\n options: Record<string, unknown>,\n command: Command,\n): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const profileModule = await import(\"./commands/profile.js\");\n const { PROFILE_SUBCOMMANDS } = profileModule;\n const normalizedSubcommand = (subcommand ?? \"\").trim().toLowerCase();\n if (!normalizedSubcommand) {\n throw new PmCliError(`pm profile requires a subcommand. Allowed: ${PROFILE_SUBCOMMANDS.join(\", \")}`, EXIT_CODE.USAGE, {\n code: \"missing_required_argument\",\n examples: [\"pm profile list\", \"pm profile show agile\", \"pm profile apply agile --dry-run\", \"pm profile lint agile\"],\n });\n }\n if (!PROFILE_SUBCOMMANDS.includes(normalizedSubcommand as (typeof PROFILE_SUBCOMMANDS)[number])) {\n throw new PmCliError(\n `Unknown pm profile subcommand \"${subcommand}\". Allowed: ${PROFILE_SUBCOMMANDS.join(\", \")}`,\n EXIT_CODE.USAGE,\n { code: \"unknown_subcommand\" },\n );\n }\n const result = await dispatchProfileSubcommand(profileModule, normalizedSubcommand, name, options, globalOptions);\n // Profile inspection and schema staging do not mutate item content, so search caches stay valid (mirrors pm schema).\n if (globalOptions.json === true || globalOptions.defaultOutputFormat === \"json\") {\n printResult(result, globalOptions);\n } else if (!globalOptions.quiet) {\n renderProfileResultHuman(profileModule, result);\n }\n // `pm profile lint` is a validation gate: exit non-zero when the profile has\n // error-severity findings so shell/CI callers can fail on them. Warnings keep\n // `ok` true and never fail the command.\n if (result.action === \"lint\" && !result.ok) {\n process.exitCode = EXIT_CODE.GENERIC_FAILURE;\n }\n if (globalOptions.profile) {\n printError(`profile:command=profile took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runNotesAction(id: string, text: string | undefined, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const add = resolveSingleTextSource(\"note\", text, options);\n const { runNotes } = await import(\"./commands/notes.js\");\n const result = await runNotes(id, {\n add,\n limit: readOptionString(options, \"limit\"),\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n allowAuditComment: Boolean(options.allowAuditNote || options.allowAuditComment),\n force: Boolean(options.force),\n }, globalOptions);\n if (typeof add === \"string\") {\n await invalidateSearchCachesForMutation(globalOptions, result);\n }\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=notes took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runLearningsAction(id: string, text: string | undefined, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const add = resolveSingleTextSource(\"learning\", text, options);\n const { runLearnings } = await import(\"./commands/learnings.js\");\n const result = await runLearnings(id, {\n add,\n limit: readOptionString(options, \"limit\"),\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n allowAuditComment: Boolean(options.allowAuditLearning || options.allowAuditComment),\n force: Boolean(options.force),\n }, globalOptions);\n if (typeof add === \"string\") {\n await invalidateSearchCachesForMutation(globalOptions, result);\n }\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=learnings took_ms=${Date.now() - startedAt}`);\n }\n}\n\nfunction readStringArrayOption(options: Record<string, unknown>, key: string): string[] {\n return stringArrayOption(options[key]) ?? [];\n}\n\nasync function runFilesAction(id: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const addValues = readStringArrayOption(options, \"add\");\n const addGlobValues = readStringArrayOption(options, \"addGlob\");\n const removeValues = readStringArrayOption(options, \"remove\");\n const migrateValues = readStringArrayOption(options, \"migrate\");\n const { runFiles } = await import(\"./commands/files.js\");\n const result = await runFiles(id, {\n add: addValues,\n addGlob: addGlobValues,\n remove: removeValues,\n migrate: migrateValues,\n note: readOptionString(options, \"note\"),\n list: Boolean(options.list),\n appendStable: Boolean(options.appendStable),\n validatePaths: Boolean(options.validatePaths),\n audit: Boolean(options.audit),\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n force: Boolean(options.force),\n }, globalOptions);\n if (addValues.length > 0 || addGlobValues.length > 0 || removeValues.length > 0 || migrateValues.length > 0) {\n await invalidateSearchCachesForMutation(globalOptions, result);\n }\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=files took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runFilesDiscoverAction(id: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n // Flags also declared on the parent files command (--note/--append-stable/\n // --author/--message/--force) are consumed by the parent during parse, so\n // merge ancestor opts back in (own options win) instead of reading opts() alone.\n const mergedOptions: Record<string, unknown> = { ...command.optsWithGlobals(), ...options };\n const { runFilesDiscover } = await import(\"./commands/files.js\");\n const result = await runFilesDiscover(id, {\n apply: Boolean(mergedOptions.apply),\n note: readOptionString(mergedOptions, \"note\"),\n appendStable: Boolean(mergedOptions.appendStable),\n author: readOptionString(mergedOptions, \"author\"),\n message: readOptionString(mergedOptions, \"message\"),\n force: Boolean(mergedOptions.force),\n }, globalOptions);\n if (result.changed) {\n await invalidateSearchCachesForMutation(globalOptions, result);\n }\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=files.discover took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runDocsAction(id: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const addValues = readStringArrayOption(options, \"add\");\n const addGlobValues = readStringArrayOption(options, \"addGlob\");\n const removeValues = readStringArrayOption(options, \"remove\");\n const migrateValues = readStringArrayOption(options, \"migrate\");\n const { runDocs } = await import(\"./commands/docs.js\");\n const result = await runDocs(id, {\n add: addValues,\n addGlob: addGlobValues,\n remove: removeValues,\n migrate: migrateValues,\n note: readOptionString(options, \"note\"),\n list: Boolean(options.list),\n validatePaths: Boolean(options.validatePaths),\n audit: Boolean(options.audit),\n author: readOptionString(options, \"author\"),\n message: readOptionString(options, \"message\"),\n force: Boolean(options.force),\n }, globalOptions);\n if (addValues.length > 0 || addGlobValues.length > 0 || removeValues.length > 0 || migrateValues.length > 0) {\n await invalidateSearchCachesForMutation(globalOptions, result);\n }\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=docs took_ms=${Date.now() - startedAt}`);\n }\n}\n\nasync function runDepsAction(id: string, options: Record<string, unknown>, command: Command): Promise<void> {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runDeps } = await import(\"./commands/deps.js\");\n // --format and --collapse carry commander defaults (\"tree\"/\"none\"), so\n // they are always strings by the time the action runs; --maxDepth has no\n // default and may be unset. Use `as string` rather than String(...) so an\n // omitted option stays undefined instead of becoming the literal \"undefined\".\n const result = await runDeps(id, {\n format: options.format as string,\n maxDepth: readOptionString(options, \"maxDepth\"),\n collapse: options.collapse as string,\n summary: options.summary === true,\n }, globalOptions);\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=deps took_ms=${Date.now() - startedAt}`);\n }\n}\n\n/**\n * Implements register mutation commands for the public runtime surface of this module.\n */\nexport function registerMutationCommands(program: Command): void {\n const createCommand = program\n .command(\"create\")\n .argument(\"[typeOrTitle]\", \"Item title, or item type when a title follows (e.g. `pm create task \\\"Fix bug\\\"`)\")\n .argument(\"[title]\", \"Item title when the first argument is an item type\")\n .description(\"Create a new project management item.\");\n registerCommanderOptionContracts(createCommand, CREATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS);\n createCommand\n .option(\"--body-file <path>\", \"Load the item markdown body from a file (mutually exclusive with --body)\")\n .option(\"--clear-deps\", \"Clear dependency entries\")\n .option(\"--clear-comments\", \"Clear comments\")\n .option(\"--clear-notes\", \"Clear notes\")\n .option(\"--clear-learnings\", \"Clear learnings\")\n .option(\"--clear-files\", \"Clear linked files\")\n .option(\"--clear-tests\", \"Clear linked tests\")\n .option(\"--clear-docs\", \"Clear linked docs\")\n .option(\"--clear-reminders\", \"Clear reminders\")\n .option(\"--clear-events\", \"Clear events\")\n .option(\"--clear-type-options\", \"Clear type options\")\n .action(runCreateAction);\n\n program\n .command(\"copy\")\n .argument(\"<id>\", \"Source item id\")\n .option(\"--title <value>\", \"Optional title override for the copied item\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .description(\"Copy an item into a new item id while resetting lifecycle fields.\")\n .action(runCopyAction);\n\n program\n .command(\"focus\")\n .argument(\"[id]\", \"Item id to focus (omit to show current focus)\")\n .option(\"--clear\", \"Clear the focused item\")\n .description(\"Set/clear/show the session focused item that new items default --parent to.\")\n .action(runFocusAction);\n\n const updateCommand = program\n .command(\"update\")\n .argument(\"<id>\", \"Item id\")\n .description(\"Update item fields and metadata.\");\n registerCommanderOptionContracts(updateCommand, UPDATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS);\n updateCommand\n .option(\"--body-file <path>\", \"Load the item markdown body from a file (mutually exclusive with --body)\")\n .option(\"--replace-deps\", \"Atomically replace dependency entries with the provided --dep values\")\n .option(\"--replace-tests\", \"Atomically replace linked test entries with the provided --test values\")\n .option(\"--clear-deps\", \"Clear dependency entries\")\n .option(\"--clear-comments\", \"Clear comments\")\n .option(\"--clear-notes\", \"Clear notes\")\n .option(\"--clear-learnings\", \"Clear learnings\")\n .option(\"--clear-files\", \"Clear linked files\")\n .option(\"--clear-tests\", \"Clear linked tests\")\n .option(\"--clear-docs\", \"Clear linked docs\")\n .option(\"--clear-reminders\", \"Clear reminders\")\n .option(\"--clear-events\", \"Clear events\")\n .option(\"--clear-type-options\", \"Clear type options\")\n .option(\"--allow-audit-update\", \"Allow non-owner metadata-only audit updates without requiring --force\")\n .option(\"--allow-audit-dep-update\", \"Allow non-owner append-only dependency updates without requiring --force\")\n .option(\"--force\", \"Force ownership override\");\n addHiddenOption(updateCommand, \"--allow_audit_update\", \"Alias for --allow-audit-update\", false);\n addHiddenOption(updateCommand, \"--allow_audit_dep_update\", \"Alias for --allow-audit-dep-update\", false);\n updateCommand.action(runUpdateAction);\n\n const updateManyCommand = program\n .command(\"update-many\")\n .description(\"Bulk-update matched items with dry-run plans and rollback checkpoints.\")\n .option(\"--filter-status <value>\", \"Filter by status before applying updates\")\n .option(\"--filter-type <value>\", \"Filter by item type before applying updates\")\n .option(\"--filter-tag <value>\", \"Filter by tag before applying updates\")\n .option(\"--filter-priority <value>\", \"Filter by priority before applying updates\")\n .option(\"--filter-deadline-before <value>\", \"Filter by deadline upper bound before applying updates\")\n .option(\"--filter-deadline-after <value>\", \"Filter by deadline lower bound before applying updates\")\n .option(\"--filter-updated-after <value>\", \"Filter by updated_at lower bound before applying updates (ISO/relative)\")\n .option(\"--filter-updated-before <value>\", \"Filter by updated_at upper bound before applying updates (ISO/relative)\")\n .option(\"--filter-created-after <value>\", \"Filter by created_at lower bound before applying updates (ISO/relative)\")\n .option(\"--filter-created-before <value>\", \"Filter by created_at upper bound before applying updates (ISO/relative)\")\n .option(\"--filter-assignee <value>\", \"Filter by assignee before applying updates\")\n .option(\"--filter-assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned before applying updates\")\n .option(\"--filter-parent <value>\", \"Filter by parent item ID before applying updates\")\n .option(\"--filter-sprint <value>\", \"Filter by sprint before applying updates\")\n .option(\"--filter-release <value>\", \"Filter by release before applying updates\")\n .option(\"--filter-ac-missing\", \"Select only items missing acceptance_criteria (bulk backfill)\")\n .option(\"--filter-estimates-missing\", \"Select only items missing estimated_minutes (bulk backfill)\")\n .option(\"--filter-resolution-missing\", \"Select only terminal items missing resolution (bulk backfill)\")\n .option(\"--filter-metadata-missing\", \"Select only items missing any tracked metadata (AC, estimate, or resolution)\");\n registerBulkContentAndGovernanceFilters(updateManyCommand, \"applying updates\");\n updateManyCommand\n .option(\"--ids <value>\", \"Restrict to an explicit comma-separated ID allowlist (intersected with other filters)\")\n .option(\"--limit <n>\", \"Limit matched item count before apply/preview\")\n .option(\"--offset <n>\", \"Skip first n matched rows before apply/preview\")\n .option(\"--dry-run\", \"Preview per-item diffs and checkpoint intent without mutating\")\n .option(\"--rollback <value>\", \"Rollback a prior update-many checkpoint ID\")\n .option(\"--no-checkpoint\", \"Disable checkpoint creation during apply mode\")\n .option(\"--title, -t <value>\", \"Set title\")\n .option(\"--description, -d <value>\", \"Set description\")\n .option(\"--body, -b <value>\", \"Set body (allow empty string)\")\n .option(\"--status, -s <value>\", \"Set status (use close command for closed)\")\n .option(\"--priority, -p <value>\", \"Set priority\")\n .option(\"--type <value>\", \"Set type\")\n .option(\"--tags <value>\", \"Set comma-separated tags (replaces existing). Use --add-tags / --remove-tags to mutate additively.\")\n .option(\"--add-tags <value>\", \"Add tags additively without replacing existing (repeatable; CSV accepted)\", collect)\n .option(\"--remove-tags <value>\", \"Remove tags from the existing list (repeatable; CSV accepted)\", collect)\n .option(\"--deadline <value>\", \"Set deadline (ISO/date string or relative)\")\n .option(\"--estimate, --estimated-minutes <value>\", \"Set estimated minutes\")\n .option(\"--acceptance-criteria <value>\", \"Set acceptance criteria\")\n .option(\"--ac <value>\", \"Alias for --acceptance-criteria\")\n .option(\"--definition-of-ready <value>\", \"Set definition of ready\")\n .option(\"--order <value>\", \"Set planning order/rank integer\")\n .option(\"--rank <value>\", \"Alias for --order\")\n .option(\"--goal <value>\", \"Set goal identifier\")\n .option(\"--objective <value>\", \"Set objective identifier\")\n .option(\"--value <value>\", \"Set business value summary\")\n .option(\"--impact <value>\", \"Set business impact summary\")\n .option(\"--outcome <value>\", \"Set expected outcome summary\")\n .option(\"--why-now <value>\", \"Set why-now rationale\")\n .option(\"--assignee <value>\", \"Set assignee\")\n .option(\"--parent <value>\", \"Set parent item ID\")\n .option(\"--reviewer <value>\", \"Set reviewer\")\n .option(\"--risk <value>\", \"Set risk level\")\n .option(\"--confidence <value>\", \"Set confidence level\")\n .option(\"--sprint <value>\", \"Set sprint identifier\")\n .option(\"--release <value>\", \"Set release identifier\")\n .option(\"--blocked-by <value>\", \"Set blocked-by item ID or reason\")\n .option(\"--blocked-reason <value>\", \"Set blocked reason\")\n .option(\"--unblock-note <value>\", \"Set unblock rationale note\")\n .option(\"--reporter <value>\", \"Set issue reporter\")\n .option(\"--severity <value>\", \"Set issue severity\")\n .option(\"--environment <value>\", \"Set issue environment context\")\n .option(\"--repro-steps <value>\", \"Set issue reproduction steps\")\n .option(\"--resolution <value>\", \"Set issue resolution summary\")\n .option(\"--expected-result <value>\", \"Set issue expected behavior\")\n .option(\"--expected <value>\", \"Short alias for --expected-result\")\n .option(\"--actual-result <value>\", \"Set issue observed behavior\")\n .option(\"--actual <value>\", \"Short alias for --actual-result\")\n .option(\"--affected-version <value>\", \"Set affected version identifier\")\n .option(\"--fixed-version <value>\", \"Set fixed version identifier\")\n .option(\"--component <value>\", \"Set issue component ownership\")\n .option(\"--regression <value>\", \"Set regression marker: true|false|1|0\")\n .option(\"--customer-impact <value>\", \"Set customer impact summary\")\n .option(\"--dep <value>\", \"Add dependency entry id=<id>,kind=<kind>,author=<author>,created_at=<timestamp>\", collect)\n .option(\"--dep-remove <value>\", \"Remove dependency entries by id/kind/author/timestamp signature\", collect)\n .option(\"--replace-deps\", \"Atomically replace dependency entries with provided --dep values\")\n .option(\"--replace-tests\", \"Atomically replace linked tests with provided --test values\")\n .option(\"--comment <value>\", \"Add comment seed author=<value>,created_at=<iso|now>,text=<value>\", collect)\n .option(\"--note <value>\", \"Add note seed author=<value>,created_at=<iso|now>,text=<value>\", collect)\n .option(\"--learning <value>\", \"Add learning seed author=<value>,created_at=<iso|now>,text=<value>\", collect)\n .option(\"--file <value>\", \"Add linked file path=<value>,scope=<project|global>,note=<text>\", collect)\n .option(\"--test <value>\", \"Add linked test command=<value>,path=<value>,scope=<project|global>\", collect)\n .option(\"--doc <value>\", \"Add linked doc path=<value>,scope=<project|global>,note=<text>\", collect)\n .option(\"--reminder <value>\", \"Add reminder entry at=<iso|relative>|date=<iso|relative>,text=<text>|title=<text>\", collect)\n .option(\"--event <value>\", \"Add event entry start=<iso|relative>,end=<iso|relative>,recur_*\", collect)\n .option(\"--type-option <value>\", \"Set type options key=value (repeatable)\", collect)\n .option(\"--unset <field>\", \"Clear scalar metadata field by name (repeatable)\", collect)\n .option(\"--clear-deps\", \"Clear dependency entries\")\n .option(\"--clear-comments\", \"Clear comments\")\n .option(\"--clear-notes\", \"Clear notes\")\n .option(\"--clear-learnings\", \"Clear learnings\")\n .option(\"--clear-files\", \"Clear linked files\")\n .option(\"--clear-tests\", \"Clear linked tests\")\n .option(\"--clear-docs\", \"Clear linked docs\")\n .option(\"--clear-reminders\", \"Clear reminders\")\n .option(\"--clear-events\", \"Clear events\")\n .option(\"--clear-type-options\", \"Clear type options\")\n .option(\"--allow-audit-update\", \"Allow non-owner metadata-only audit updates without requiring --force\")\n .option(\"--allow-audit-dep-update\", \"Allow non-owner append-only dependency updates without requiring --force\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"Mutation message\")\n .option(\"--force\", \"Force ownership override\");\n // Hidden pure snake_case underscore-duplicate aliases (kept parse-functional,\n // omitted from --help to save agent context).\n addHiddenOptions(updateManyCommand, [\n [\"--filter-assignee_filter <value>\", \"Alias for --filter-assignee-filter\"],\n [\"--estimated_minutes <value>\", \"Alias for --estimated-minutes\"],\n [\"--acceptance_criteria <value>\", \"Alias for --acceptance-criteria\"],\n [\"--definition_of_ready <value>\", \"Alias for --definition-of-ready\"],\n [\"--why_now <value>\", \"Alias for --why-now\"],\n [\"--blocked_by <value>\", \"Alias for --blocked-by\"],\n [\"--blocked_reason <value>\", \"Alias for --blocked-reason\"],\n [\"--unblock_note <value>\", \"Alias for --unblock-note\"],\n [\"--repro_steps <value>\", \"Alias for --repro-steps\"],\n [\"--expected_result <value>\", \"Alias for --expected-result\"],\n [\"--actual_result <value>\", \"Alias for --actual-result\"],\n [\"--affected_version <value>\", \"Alias for --affected-version\"],\n [\"--fixed_version <value>\", \"Alias for --fixed-version\"],\n [\"--customer_impact <value>\", \"Alias for --customer-impact\"],\n [\"--allow_audit_update\", \"Alias for --allow-audit-update\"],\n [\"--allow_audit_dep_update\", \"Alias for --allow-audit-dep-update\"],\n [\"--filter-estimate-missing\", \"Alias for --filter-estimates-missing\"],\n ], false);\n addHiddenOptions(updateManyCommand, [\n [\"--dep_remove <value>\", \"Alias for --dep-remove\"],\n [\"--type_option <value>\", \"Alias for --type-option\"],\n [\"--add_tags <value>\", \"Alias for --add-tags\"],\n [\"--remove_tags <value>\", \"Alias for --remove-tags\"],\n ], true);\n updateManyCommand.action(runUpdateManyAction);\n\n const closeCommand = program\n .command(\"close\")\n .argument(\"<id>\", \"Item id\")\n .argument(\"[text]\", \"Close reason text (alias: --reason)\")\n .option(\"-r, --reason <value>\", \"Close reason text (alias for positional <text>)\")\n .option(\"--close-reason <value>\", \"Close reason text (alias for positional <text>)\")\n .option(\"-d, --duplicate-of <id>\", \"Close as a duplicate of the canonical item id and auto-fill duplicate closure metadata\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"-m, --message <value>\", \"History message\")\n .option(\"--validate-close [mode]\", 'Validate closure metadata before close: \"off\", \"warn\", or \"strict\" (default: settings governance preset)')\n .option(\"--resolution <value>\", \"Set the closure resolution summary inline (same field --validate-close strict checks; previously required a prior pm update)\")\n .option(\"--expected-result <value>\", \"Set the expected-result note inline (closure validation field)\")\n .option(\"--expected <value>\", \"Short alias for --expected-result\")\n .option(\"--actual-result <value>\", \"Set the actual-result note inline (closure validation field)\")\n .option(\"--actual <value>\", \"Short alias for --actual-result\")\n .option(\"--force\", \"Force ownership override\")\n .description(\"Close an item. Close reason requirement follows governance.require_close_reason.\");\n // pm-fl0c #11 (2026-05-28): expose snake_case aliases alongside the canonical\n // kebab-case so agents using --expected_result/--actual_result do not get an\n // Unknown option error; the rendered help stays clean (aliases hidden).\n addHiddenOption(closeCommand, \"--expected_result <value>\", \"Alias for --expected-result\", false);\n addHiddenOption(closeCommand, \"--actual_result <value>\", \"Alias for --actual-result\", false);\n closeCommand.action(runCloseAction);\n\n const closeManyCommand = program\n .command(\"close-many\")\n .description(\"Bulk-close matched items with a shared reason and full runClose semantics (dry-run + rollback checkpoint).\")\n .option(\"--filter-status <value>\", \"Filter by status before closing\")\n .option(\"--filter-type <value>\", \"Filter by item type before closing\")\n .option(\"--filter-tag <value>\", \"Filter by tag before closing\")\n .option(\"--filter-priority <value>\", \"Filter by priority before closing\")\n .option(\"--filter-deadline-before <value>\", \"Filter by deadline upper bound before closing\")\n .option(\"--filter-deadline-after <value>\", \"Filter by deadline lower bound before closing\")\n .option(\"--filter-updated-after <value>\", \"Filter by updated_at lower bound before closing (ISO/relative)\")\n .option(\"--filter-updated-before <value>\", \"Filter by updated_at upper bound before closing (ISO/relative)\")\n .option(\"--filter-created-after <value>\", \"Filter by created_at lower bound before closing (ISO/relative)\")\n .option(\"--filter-created-before <value>\", \"Filter by created_at upper bound before closing (ISO/relative)\")\n .option(\"--filter-assignee <value>\", \"Filter by assignee before closing\")\n .option(\"--filter-assignee-filter <value>\", \"Filter assignee presence: assigned|unassigned before closing\")\n .option(\"--filter-parent <value>\", \"Filter by parent item ID before closing\")\n .option(\"--filter-sprint <value>\", \"Filter by sprint before closing\")\n .option(\"--filter-release <value>\", \"Filter by release before closing\");\n registerBulkContentAndGovernanceFilters(closeManyCommand, \"closing\");\n closeManyCommand\n .option(\"--ids <value>\", \"Restrict to an explicit comma-separated ID allowlist (intersected with other filters)\")\n .option(\"--limit <n>\", \"Limit matched item count before apply/preview\")\n .option(\"--offset <n>\", \"Skip first n matched rows before apply/preview\")\n .option(\"--reason <value>\", \"Shared close reason applied to matched items (required when governance.require_close_reason is enabled)\")\n .option(\"--resolution <value>\", \"Shared closure resolution applied to every matched item (closure-validation field)\")\n .option(\"--expected-result <value>\", \"Shared expected-result note (closure-validation field)\")\n .option(\"--expected <value>\", \"Short alias for --expected-result\")\n .option(\"--actual-result <value>\", \"Shared actual-result note (closure-validation field)\")\n .option(\"--actual <value>\", \"Short alias for --actual-result\")\n .option(\"--validate-close [mode]\", 'Validate closure metadata per item: \"off\", \"warn\", or \"strict\" (default: settings governance preset)')\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--force\", \"Re-close already-terminal matches and override ownership\")\n .option(\"--dry-run\", \"Preview matched items + per-item skip/active-child plan without mutating\")\n .option(\"--rollback <value>\", \"Rollback a prior close-many checkpoint ID\")\n .option(\"--no-checkpoint\", \"Disable checkpoint creation during apply mode\");\n addHiddenOption(closeManyCommand, \"--filter-assignee_filter <value>\", \"Alias for --filter-assignee-filter\", false);\n addHiddenOption(closeManyCommand, \"--expected_result <value>\", \"Alias for --expected-result\", false);\n addHiddenOption(closeManyCommand, \"--actual_result <value>\", \"Alias for --actual-result\", false);\n closeManyCommand.action(runCloseManyAction);\n\n program\n .command(\"delete\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--force\", \"Force ownership override\")\n .option(\"--dry-run\", \"Preview the item file that would be deleted without mutating\")\n .description(\"Delete an item and record the change in history.\")\n .action(runDeleteAction);\n\n program\n .command(\"append\")\n .argument(\"<id>\", \"Item id\")\n .argument(\"[text]\", \"Optional body text shorthand (equivalent to --body; use - for stdin)\")\n .option(\"--body <value>\", \"Text to append to body (or - for stdin)\")\n .option(\"--text <value>\", \"Alias for --body\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"Mutation message\")\n .option(\"--force\", \"Force ownership override\")\n .description(\"Append text to an item's body.\")\n .action(runAppendAction);\n\n program\n .command(\"restore\")\n .argument(\"<id>\", \"Item id\")\n .argument(\"<target>\", \"Restore target timestamp or version number\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--force\", \"Force ownership/lock override\")\n .description(\"Restore an item to an earlier timestamp or version.\")\n .action(runRestoreAction);\n\n const planCommand = program\n .command(\"plan\")\n .description(\"Agent-optimized Plan item workflow: create, manage steps, link dependencies, approve, and materialize.\")\n .argument(\"[subcommand]\", \"Plan subcommand: create|show|add-step|update-step|complete-step|block-step|reorder-step|remove-step|link|unlink|decision|discovery|validation|resume|approve|materialize\")\n .argument(\"[id]\", \"Plan id (required for non-create subcommands); for create this may be the positional title\")\n .argument(\"[stepRef]\", \"Step reference: stable id (plan-step-001) or order integer\")\n .argument(\"[reorderTo]\", \"New order integer for reorder-step\")\n .option(\"--title <value>\", \"Plan title\")\n .option(\"--description <value>\", \"Plan description\")\n .option(\"--scope <value>\", \"Short scope statement of the target change or investigation\")\n .option(\"--parent <value>\", \"Parent pm item id\")\n .option(\"--related <value>\", \"Related pm item ids (repeatable, csv-friendly)\", collect)\n .option(\"--blocks <value>\", \"Pm item ids this plan blocks (repeatable, csv-friendly)\", collect)\n .option(\"--blocked-by <value>\", \"Pm item ids that block this plan (repeatable, csv-friendly)\", collect)\n .option(\"--harness <value>\", \"Plan harness provenance: codex|claude-code|cursor|generic\")\n .option(\"--mode <value>\", \"Plan mode: draft|research|review|approved|executing|paused|completed|superseded\")\n .option(\"--resume-context <value>\", \"Compact context summary for a future stateless agent\")\n .option(\"--tags <value>\", \"Comma-separated tags\")\n .option(\"--priority <value>\", \"Priority 0-4\")\n .option(\"--body <value>\", \"Plan item body\")\n .option(\"--claim\", \"Claim the plan on create for the author\")\n .option(\"--from-search <value>\", \"Record the search query that led to plan creation\")\n .option(\"--template <value>\", \"Seed plan steps from a built-in template: bug-investigation|feature-implementation|refactoring-sprint\")\n .option(\"--step-title <value>\", \"Step title for add-step / update-step\")\n // pm-6mit: --step is a Commander collect repeatable so `pm plan create\n // --step A --step B` seeds ordered steps (previously a single-value alias\n // for --step-title where the last value silently won). It must NOT be\n // list:true in contracts — the bootstrap coalescer would comma-join values\n // and corrupt titles containing commas.\n .option(\"--step <value>\", \"Step title (repeatable on create: each --step appends an ordered step; elsewhere a single value aliases --step-title)\", collect)\n .option(\"--step-body <value>\", \"Step body text\")\n .option(\"--step-owner <value>\", \"Step owner\")\n .option(\"--step-status <value>\", \"Step status: pending|in_progress|completed|blocked|skipped|superseded\")\n .option(\"--step-evidence <value>\", \"Step evidence text (used by update-step/complete-step)\")\n .option(\"--step-blocked-reason <value>\", \"Step blocked reason (required when blocking)\")\n .option(\"--step-replacement <value>\", \"Replacement reference for a superseded step\")\n .option(\"--depends-on <value>\", \"Pm item ids the step depends on (repeatable, csv-friendly)\", collect)\n .option(\"--link <value>\", \"Pm item id to link (repeatable, csv-friendly)\", collect)\n .option(\"--link-kind <value>\", \"Link kind: related|blocks|blocked_by|depends_on|discovered_from|implements|verifies|supersedes\")\n .option(\"--link-note <value>\", \"Optional note for the link\")\n .option(\"--promote-to-item-dep\", \"Also add the linked id as a top-level item dependency when linking\")\n .option(\"--allow-multiple-active\", \"Allow multiple steps to be in_progress at once\")\n .option(\"--file <value>\", \"Step linked file path=<value>[,scope=project|global,note=<text>] (repeatable)\", collect)\n .option(\"--test <value>\", \"Step linked test command=<value>[,path=<value>,note=<text>] (repeatable)\", collect)\n .option(\"--doc <value>\", \"Step linked doc path=<value>[,scope=project|global,note=<text>] (repeatable)\", collect)\n .option(\"--decision-text <value>\", \"Decision log entry text\")\n .option(\"--decision <value>\", \"Alias for --decision-text\")\n .option(\"--decision-rationale <value>\", \"Decision log entry rationale\")\n .option(\"--decision-evidence <value>\", \"Decision log entry evidence\")\n .option(\"--discovery-text <value>\", \"Discovery log entry text\")\n .option(\"--discovery <value>\", \"Alias for --discovery-text\")\n .option(\"--validation-text <value>\", \"Validation log entry text\")\n .option(\"--validation <value>\", \"Alias for --validation-text\")\n .option(\"--validation-command <value>\", \"Validation log entry command\")\n .option(\"--validation-expected <value>\", \"Validation log entry expected outcome\")\n .option(\"--depth <value>\", \"Show depth: brief|standard|deep (default: brief)\")\n .option(\"--fields <value>\", \"Comma-separated field projection for show output\")\n .option(\"--steps <value>\", \"Comma-separated step ids/orders for materialize\")\n .option(\"--materialize-type <value>\", \"Item type for materialized steps (default: Task)\")\n .option(\"--materialize-parent <value>\", \"Parent item id for materialized children (default: the plan)\")\n .option(\"--materialize-tags <value>\", \"Comma-separated tags for materialized children\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"Mutation message\")\n .option(\"--force\", \"Force ownership override\");\n // Hidden pure snake_case underscore-duplicate aliases (kept parse-functional,\n // omitted from --help to save agent context).\n addHiddenOptions(planCommand, [\n [\"--resume_context <value>\", \"Alias for --resume-context\"],\n [\"--from_search <value>\", \"Alias for --from-search\"],\n [\"--step_title <value>\", \"Alias for --step-title\"],\n [\"--step_body <value>\", \"Alias for --step-body\"],\n [\"--step_owner <value>\", \"Alias for --step-owner\"],\n [\"--step_status <value>\", \"Alias for --step-status\"],\n [\"--step_evidence <value>\", \"Alias for --step-evidence\"],\n [\"--step_blocked_reason <value>\", \"Alias for --step-blocked-reason\"],\n [\"--step_replacement <value>\", \"Alias for --step-replacement\"],\n [\"--link_kind <value>\", \"Alias for --link-kind\"],\n [\"--link_note <value>\", \"Alias for --link-note\"],\n [\"--promote_to_item_dep\", \"Alias for --promote-to-item-dep\"],\n [\"--allow_multiple_active\", \"Alias for --allow-multiple-active\"],\n [\"--decision_text <value>\", \"Alias for --decision-text\"],\n [\"--decision_rationale <value>\", \"Alias for --decision-rationale\"],\n [\"--decision_evidence <value>\", \"Alias for --decision-evidence\"],\n [\"--discovery_text <value>\", \"Alias for --discovery-text\"],\n [\"--validation_text <value>\", \"Alias for --validation-text\"],\n [\"--validation_command <value>\", \"Alias for --validation-command\"],\n [\"--validation_expected <value>\", \"Alias for --validation-expected\"],\n [\"--materialize_type <value>\", \"Alias for --materialize-type\"],\n [\"--materialize_parent <value>\", \"Alias for --materialize-parent\"],\n [\"--materialize_tags <value>\", \"Alias for --materialize-tags\"],\n ], false);\n addHiddenOptions(planCommand, [\n [\"--blocked_by <value>\", \"Alias for --blocked-by\"],\n [\"--depends_on <value>\", \"Alias for --depends-on\"],\n ], true);\n planCommand.action(runPlanAction);\n void planCommand;\n\n program\n .command(\"history-redact\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--literal <value>\", \"Literal string to redact (repeatable)\", collect)\n .option(\"--regex <value>\", \"Regex pattern to redact (repeatable; accepts /pattern/flags or raw pattern)\", collect)\n .option(\"--replacement <value>\", 'Replacement string (default: \"[redacted]\")')\n .option(\"--dry-run\", \"Preview redaction impact without writing item/history files\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"Audit history message for the redaction marker entry\")\n .option(\"--force\", \"Force ownership/lock override\")\n .description(\"Redact sensitive literals/patterns from an item history stream and recompute hashes.\")\n .action(async (id: string, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runHistoryRedact } = await import(\"./commands/history-redact.js\");\n const literal = Array.isArray(options.literal) ? (options.literal as string[]) : undefined;\n const regex = Array.isArray(options.regex) ? (options.regex as string[]) : undefined;\n const result = await runHistoryRedact(\n id,\n {\n literal,\n regex,\n replacement: typeof options.replacement === \"string\" ? options.replacement : undefined,\n dryRun: options.dryRun === true,\n author: typeof options.author === \"string\" ? options.author : undefined,\n message: typeof options.message === \"string\" ? options.message : undefined,\n force: Boolean(options.force),\n },\n globalOptions,\n );\n if (result.changed && !result.dry_run) {\n await invalidateSearchCachesForMutation(globalOptions, result);\n }\n printResult(result, globalOptions);\n if (globalOptions.profile) {\n printError(`profile:command=history-redact took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"history-repair\")\n .argument(\"[id]\", \"Item id (omit with --all)\")\n .option(\"--all\", \"Scan every stream for drift and repair each drifted stream in one audited pass\")\n .option(\"--dry-run\", \"Preview the re-anchor impact without writing the history file\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"Audit history message for the repair marker entry\")\n .option(\"--force\", \"Force ownership/lock override\")\n .description(\"Re-anchor a drifted item history chain (recompute hashes, reconcile with the on-disk item) and record an audit marker. Use --all to repair every drifted stream.\")\n .action(async (id: string | undefined, options: Record<string, unknown>, command) => {\n const globalOptions = getGlobalOptions(command);\n const startedAt = Date.now();\n const { runHistoryRepair, runHistoryRepairAll, assertHistoryRepairTarget } = await import(\n \"./commands/history-repair.js\"\n );\n const all = options.all === true;\n assertHistoryRepairTarget(id, all);\n const repairOptions = {\n dryRun: options.dryRun === true,\n author: typeof options.author === \"string\" ? options.author : undefined,\n message: typeof options.message === \"string\" ? options.message : undefined,\n force: Boolean(options.force),\n };\n // history-repair only re-anchors the audit stream; item content is untouched,\n // so search caches do not need invalidation.\n if (all) {\n const result = await runHistoryRepairAll(repairOptions, globalOptions);\n printResult(result, globalOptions);\n if (result.totals.failed > 0) {\n // Per-stream failures are collected (one bad stream never aborts the\n // pass) but must still fail the command for gating callers.\n process.exitCode = EXIT_CODE.GENERIC_FAILURE;\n }\n } else {\n const result = await runHistoryRepair(id as string, repairOptions, globalOptions);\n printResult(result, globalOptions);\n }\n if (globalOptions.profile) {\n printError(`profile:command=history-repair took_ms=${Date.now() - startedAt}`);\n }\n });\n\n program\n .command(\"history-compact\")\n .argument(\"[id]\", \"Item id (omit when using a bulk selector)\")\n .option(\"--before <value>\", \"Compact entries strictly before this version number or ISO timestamp (single-id mode only)\")\n .option(\"--ids <value>\", \"Bulk: compact an explicit comma-separated list of item ids\")\n .option(\"--all-over <n>\", \"Bulk: compact every stream with more than N entries\")\n .option(\"--closed\", \"Bulk: compact only closed (terminal) items' streams\")\n .option(\"--all-streams\", \"Bulk: compact every history stream regardless of lifecycle state\")\n .option(\"--min-entries <n>\", \"Bulk: skip streams with at most N entries (already compact; default 3)\")\n .option(\"--dry-run\", \"Preview compaction impact without writing the history file\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"Audit history message for the compaction marker entry\")\n .option(\"--force\", \"Force ownership/lock override\")\n .description(\n \"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.\",\n )\n .action(runHistoryCompactAction);\n\n const schemaCommand = program\n .command(\"schema\")\n .argument(\n \"[subcommand]\",\n \"Schema subcommand: list, show, show-status, add-type, remove-type, add-status, remove-status, or a custom item type name shorthand\",\n )\n .argument(\"[name]\", \"Item type name (add-type/remove-type/show) or status id (show-status/add-status/remove-status)\")\n .option(\"--description <text>\", \"Human description for the custom item type, status, or field\")\n .option(\"--default-status <status>\", \"Default status hint recorded for the custom item type\")\n .option(\"--folder <dir>\", \"Storage folder for items of this custom type\")\n .option(\"--alias <name>\", \"Alias for the custom type, status, or field flag (repeatable, csv-friendly)\", collect)\n .option(\"--role <value>\", \"Lifecycle role for a custom status (repeatable): draft, active, blocked, terminal, terminal_done, terminal_canceled, default_open, default_close, default_cancel\", collect)\n .option(\"--order <n>\", \"Display/sort order for a custom status\")\n .option(\"--type <type>\", \"Value type for a custom field (add-field): string, number, boolean, string_array\")\n .option(\"--commands <list>\", \"Commands a custom field is wired onto (add-field; repeatable, comma-friendly): create, update, update_many, list, search, calendar, context\", collect)\n .option(\"--cli-flag <flag>\", \"Override the auto-derived CLI flag for a custom field (add-field)\")\n .option(\"--required\", \"Mark a custom field as always required (add-field)\")\n .option(\"--required-on-create\", \"Mark a custom field as required at create time (add-field)\")\n .option(\"--no-allow-unset\", \"Disallow clearing a custom field via --unset (add-field)\")\n .option(\"--required-types <list>\", \"Restrict a custom field's requirement to specific item types (add-field; repeatable, comma-friendly)\", collect)\n .option(\"--infer\", \"Infer custom item types from title-prefix conventions (add-type; preview unless --apply)\")\n .option(\"--min-count <n>\", \"Minimum items sharing a prefix for add-type --infer (default 10)\")\n .option(\"--apply\", \"Register inferred types (add-type --infer); without it the command previews only\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--force\", \"Force ownership/lock override\")\n .description(\"Inspect and manage config-driven runtime schema (types, statuses, fields, presets).\");\n // Hidden pure snake_case underscore-duplicate alias.\n addHiddenOption(schemaCommand, \"--default_status <status>\", \"Alias for --default-status\", false);\n schemaCommand\n .action(runSchemaAction);\n\n const profileCommand = program\n .command(\"profile\")\n .argument(\"[subcommand]\", \"Profile subcommand: list, show, apply, or lint\")\n .argument(\"[name]\", \"Profile name for show/apply/lint: agile, ops, or research\")\n .option(\"--dry-run\", \"Preview the apply diff without writing any files (apply)\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--force\", \"Force ownership/lock override\")\n .description(\n \"List, show, apply, and lint project profiles — archetype bundles of item types, statuses, fields, workflows, config, templates, and recommended packages.\",\n );\n profileCommand.action(runProfileAction);\n\n program\n .command(\"comments\")\n .argument(\"<id>\", \"Item id\")\n .argument(\"[text]\", \"Optional comment text shorthand (equivalent to --add)\")\n .option(\"--add <text>\", \"Add one comment entry (plain text fallback, text=<value>, markdown pairs, or - for stdin; CSV-like key fragments are preserved as plain text unless text is explicit)\")\n .option(\"--stdin\", \"Read comment text from stdin (supports multiline markdown)\")\n .option(\"--file <path>\", \"Read comment text from file (supports multiline markdown)\")\n .option(\"--edit <index>\", \"Replace the comment at 1-based <index> (replacement text from positional [text], --add, --stdin, or --file)\", parsePositiveIntOption(\"--edit\"))\n .option(\"--delete <index>\", \"Delete the comment at 1-based <index>\", parsePositiveIntOption(\"--delete\"))\n .option(\"--limit <n>\", \"Return only latest n comments\")\n .option(\"--author [value]\", \"Comment author (optional; falls back to PM_AUTHOR/settings)\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--allow-audit-comment\", \"Allow non-owner append-only comment audits (add/edit/delete) without requiring --force\")\n .option(\"--force\", \"Force ownership override\")\n .description(\"List, add, edit, or delete comments for an item.\")\n .action(runCommentsAction);\n\n program\n .command(\"notes\")\n .argument(\"<id>\", \"Item id\")\n .argument(\"[text]\", \"Optional note text shorthand (equivalent to --add; use - for stdin)\")\n .option(\"--add <text>\", \"Add one note entry (plain text fallback, text=<value>, markdown pairs, or - for stdin; CSV-like key fragments are preserved as plain text unless text is explicit)\")\n .option(\"--limit <n>\", \"Return only latest n notes\")\n .option(\"--author [value]\", \"Note author (optional; falls back to PM_AUTHOR/settings)\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--allow-audit-note\", \"Allow non-owner append-only note audits without requiring --force\")\n .option(\"--allow-audit-comment\", \"Backward-compatible alias for --allow-audit-note\")\n .option(\"--force\", \"Force ownership override\")\n .description(\"List or add notes for an item.\")\n .action(runNotesAction);\n\n program\n .command(\"learnings\")\n .argument(\"<id>\", \"Item id\")\n .argument(\"[text]\", \"Optional learning text shorthand (equivalent to --add; use - for stdin)\")\n .option(\"--add <text>\", \"Add one learning entry (plain text fallback, text=<value>, markdown pairs, or - for stdin; CSV-like key fragments are preserved as plain text unless text is explicit)\")\n .option(\"--limit <n>\", \"Return only latest n learnings\")\n .option(\"--author [value]\", \"Learning author (optional; falls back to PM_AUTHOR/settings)\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--allow-audit-learning\", \"Allow non-owner append-only learning audits without requiring --force\")\n .option(\"--allow-audit-comment\", \"Backward-compatible alias for --allow-audit-learning\")\n .option(\"--force\", \"Force ownership override\")\n .description(\"List or add learnings for an item.\")\n .action(runLearningsAction);\n\n const filesCommand = program\n .command(\"files\")\n .description(\"Manage files linked to an item.\");\n\n filesCommand\n .argument(\"<id>\", \"Item id\")\n .option(\"--add <value>\", \"Add linked file entry (CSV/markdown pairs or - for stdin)\", collect)\n .option(\"--add-glob <value>\", \"Add linked file entries from a glob (plain glob or pattern=<glob>,scope=<scope>,note=<text>; repeatable)\", collect)\n .option(\"--remove <value>\", \"Remove linked file by path only (path=<value>, path:<value>, plain path, or - for stdin); does not accept note=/scope= — record removal context with --message\", collect)\n .option(\"--migrate <value>\", \"Migrate linked file paths in-place (from=<prefix>,to=<prefix>; repeatable)\", collect)\n .option(\"--note <value>\", \"Note attached to every link added by --add/--add-glob in this invocation (embedded note= wins)\")\n .option(\"--list\", \"List linked files without mutating\")\n .option(\"--append-stable\", \"Preserve existing linked-file order and append new links without full-array resorting\")\n .option(\"--validate-paths\", \"Validate linked file paths for existence and file shape\")\n .option(\"--audit\", \"Audit linked file usage across all items for this item's linked paths\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--force\", \"Force ownership override\")\n .action(runFilesAction);\n\n filesCommand\n .command(\"discover\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--apply\", \"Add discovered missing files to the item\")\n .option(\"--note <value>\", \"Note to attach to discovered file links\")\n .option(\"--append-stable\", \"Preserve existing linked-file order and append discovered links without full-array resorting\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--force\", \"Force ownership override\")\n .description(\"Discover existing file paths referenced in item text and optionally link missing files.\")\n .action(runFilesDiscoverAction);\n\n program\n .command(\"docs\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--add <value>\", \"Add linked doc entry (CSV/markdown pairs or - for stdin)\", collect)\n .option(\"--add-glob <value>\", \"Add linked doc entries from a glob (plain glob or pattern=<glob>,scope=<scope>,note=<text>; repeatable)\", collect)\n .option(\"--remove <value>\", \"Remove linked doc by path only (path=<value>, path:<value>, plain path, or - for stdin); does not accept note=/scope= — record removal context with --message\", collect)\n .option(\"--migrate <value>\", \"Migrate linked doc paths in-place (from=<prefix>,to=<prefix>; repeatable)\", collect)\n .option(\"--note <value>\", \"Note attached to every link added by --add/--add-glob in this invocation (embedded note= wins)\")\n .option(\"--list\", \"List linked docs without mutating\")\n .option(\"--validate-paths\", \"Validate linked doc paths for existence and file shape\")\n .option(\"--audit\", \"Audit linked doc usage across all items for this item's linked paths\")\n .option(\"--author <value>\", \"Mutation author\")\n .option(\"--message <value>\", \"History message\")\n .option(\"--force\", \"Force ownership override\")\n .description(\"Manage docs linked to an item.\")\n .action(runDocsAction);\n\n program\n .command(\"deps\")\n .argument(\"<id>\", \"Item id\")\n .option(\"--format <value>\", \"Output format (tree or graph)\", \"tree\")\n .option(\"--max-depth <value>\", \"Maximum dependency traversal depth (0 keeps only the root)\")\n .option(\"--collapse <value>\", \"Collapse mode (none or repeated)\", \"none\")\n .option(\"--summary\", \"Return counts only without full tree/graph payload\")\n .description(\"Show dependency relationships for an item.\")\n .action(runDepsAction);\n}\n", "/**\n * @module core/io/body-file\n *\n * Reads command body content from files, stdin, and inline arguments.\n */\nimport { readFile } from \"node:fs/promises\";\n\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\n\n/**\n * GH-214: shared resolver for the `--body-file <path>` input convenience on\n * `pm create` and `pm update`. It loads a long markdown body from a file so\n * agents do not have to escape multi-paragraph content (code blocks, tables)\n * into a single inline `--body` string or issue a second `pm append` call.\n *\n * This is a CLI-only input alias that maps onto the existing `body` field, so\n * it deliberately does NOT flow through the MCP/contract field surface (a file\n * path is meaningless over MCP, mirroring `pm history --diff`). The file read is\n * injectable so the pure resolution logic stays fully unit-coverable without\n * touching disk.\n */\nexport type BodyFileReader = (path: string) => Promise<string>;\n\nconst defaultBodyFileReader: BodyFileReader = (path) => readFile(path, \"utf8\");\n\n/**\n * Implements resolve body file content for the public runtime surface of this module.\n */\nexport async function resolveBodyFileContent(\n bodyFile: string,\n inlineBody: string | undefined,\n readFileImpl: BodyFileReader = defaultBodyFileReader,\n): Promise<string> {\n // Mutual exclusion: --body and --body-file both define the body, so accepting\n // both silently would hide which one wins. Fail with an actionable message.\n if (inlineBody !== undefined) {\n throw new PmCliError(\n \"--body and --body-file are mutually exclusive; provide the body inline with --body or from a file with --body-file, not both.\",\n EXIT_CODE.USAGE,\n {\n code: \"body_file_conflicts_with_body\",\n required: \"Choose exactly one body source.\",\n why: \"Both --body and --body-file set the item body; allowing both would make the effective body ambiguous.\",\n nextSteps: [\"Re-run with only --body <text> or only --body-file <path>.\"],\n },\n );\n }\n const path = bodyFile.trim();\n if (path.length === 0) {\n throw new PmCliError(\"--body-file requires a file path.\", EXIT_CODE.USAGE, {\n code: \"body_file_missing_path\",\n required: \"Pass a readable file path: --body-file <path>.\",\n why: \"An empty --body-file value has no file to read the body from.\",\n });\n }\n try {\n return await readFileImpl(path);\n } catch (error: unknown) {\n // Preserve the underlying errno (ENOENT/EACCES/EISDIR/...) so the failure\n // is debuggable, and tailor the directory case (a real footgun: pointing\n // --body-file at a folder) to an exact message instead of a generic one.\n const errno = (error as NodeJS.ErrnoException | undefined)?.code;\n const isDirectory = errno === \"EISDIR\";\n const detail = errno ? ` (${errno})` : \"\";\n throw new PmCliError(\n isDirectory\n ? `--body-file \"${path}\" is a directory, not a file. Point it at a readable file.`\n : `--body-file could not read \"${path}\"${detail}. Check that the file exists and is readable.`,\n EXIT_CODE.NOT_FOUND,\n {\n code: \"body_file_unreadable\",\n required: \"Point --body-file at an existing, readable file.\",\n why: `The body content is loaded from the file at the supplied path, so an unreadable path cannot produce a body${errno ? ` (underlying error: ${errno})` : \"\"}.`,\n nextSteps: [`Verify the path: ls -l \"${path}\"`, \"Or pass the body inline with --body <text>.\"],\n },\n );\n }\n}\n", "/**\n * Helpers for deciding whether a CLI option alias is a pure snake_case\n * underscore-duplicate of an existing kebab-case flag.\n *\n * Mutation commands historically register every `--foo-bar` flag together with\n * a `--foo_bar` alias so agents are never blocked by a snake/kebab mismatch.\n * Those underscore duplicates roughly double the option list of every\n * `--help` and waste agent context. We keep them functional as parse-time\n * aliases but hide them from the rendered `--help` text.\n *\n * The rule is intentionally narrow: an alias is hidden ONLY when its long flag\n * is exactly the underscore form of an existing kebab flag (for example\n * `--create_mode` is the `-`→`_` form of `--create-mode`). Semantically-distinct\n * aliases (for example `--fail-on-warn` for `--strict-exit`, `--local` for\n * `--project`, `--ac` for `--acceptance-criteria`) are NOT snake duplicates and\n * stay visible.\n */\n\n/**\n * Extract every long flag (for example `--create-mode`) from a commander flag\n * spec that may include short aliases and a value placeholder. A spec can list\n * more than one long flag, for example `\"--estimate, --estimated-minutes\n * <value>\"` → `[\"--estimate\", \"--estimated-minutes\"]`.\n */\nexport function extractLongFlags(flagSpec: string): string[] {\n return flagSpec\n .split(/[\\s,|]+/)\n .map((token) => token.trim())\n .filter((token) => token.startsWith(\"--\"));\n}\n\n/**\n * Extract the first long flag from a commander flag spec, or null when none is\n * present.\n */\nexport function extractLongFlag(flagSpec: string): string | null {\n return extractLongFlags(flagSpec)[0] ?? null;\n}\n\n/**\n * Returns true when `aliasFlagSpec` differs from `canonicalFlagSpec` ONLY by\n * substituting one or more interior hyphens with underscores — i.e. it is a\n * pure snake_case underscore-duplicate of the canonical kebab flag.\n *\n * Examples that match (alias hidden):\n * --create-mode <- --create_mode\n * --filter-assignee-filter <- --filter-assignee_filter\n *\n * Examples that do NOT match (alias stays visible):\n * --acceptance-criteria <- --ac (different identifier)\n * --order <- --rank (different identifier)\n * --strict-exit <- --fail-on-warn (semantically distinct)\n */\nexport function isPureSnakeCaseAlias(canonicalFlagSpec: string, aliasFlagSpec: string): boolean {\n const aliasLong = extractLongFlag(aliasFlagSpec);\n if (aliasLong === null) {\n return false;\n }\n const normalize = (long: string): string => long.slice(2).replaceAll(\"-\", \"_\");\n // The canonical spec may declare multiple long flags (e.g.\n // \"--estimate, --estimated-minutes <value>\"); the alias is hidden when it is\n // the underscore form of ANY of them.\n return extractLongFlags(canonicalFlagSpec).some((canonicalLong) => {\n if (!canonicalLong.slice(2).includes(\"-\")) {\n // No interior hyphen to convert, so there is no kebab form to snake-duplicate.\n return false;\n }\n if (aliasLong === canonicalLong) {\n // Identical flags are not aliases of one another.\n return false;\n }\n // Reachable from the canonical purely by hyphen→underscore substitution.\n return normalize(aliasLong) === normalize(canonicalLong);\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }