@unbrained/pm-cli 2026.6.10 → 2026.6.12

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 (456) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +44 -0
  3. package/README.md +1 -1
  4. package/dist/cli/bootstrap-args.d.ts +11 -0
  5. package/dist/cli/bootstrap-args.js +88 -4
  6. package/dist/cli/bootstrap-args.js.map +1 -1
  7. package/dist/cli/commands/completion.js +20 -8
  8. package/dist/cli/commands/completion.js.map +1 -1
  9. package/dist/cli/commands/contracts.d.ts +2 -0
  10. package/dist/cli/commands/contracts.js +9 -2
  11. package/dist/cli/commands/contracts.js.map +1 -1
  12. package/dist/cli/commands/create.js +6 -3
  13. package/dist/cli/commands/create.js.map +1 -1
  14. package/dist/cli/commands/docs.d.ts +2 -0
  15. package/dist/cli/commands/docs.js +2 -2
  16. package/dist/cli/commands/docs.js.map +1 -1
  17. package/dist/cli/commands/files.d.ts +2 -0
  18. package/dist/cli/commands/files.js +2 -2
  19. package/dist/cli/commands/files.js.map +1 -1
  20. package/dist/cli/commands/health.d.ts +1 -1
  21. package/dist/cli/commands/health.js +77 -2
  22. package/dist/cli/commands/health.js.map +1 -1
  23. package/dist/cli/commands/history-repair.d.ts +36 -0
  24. package/dist/cli/commands/history-repair.js +68 -3
  25. package/dist/cli/commands/history-repair.js.map +1 -1
  26. package/dist/cli/commands/index.d.ts +1 -1
  27. package/dist/cli/commands/index.js +3 -3
  28. package/dist/cli/commands/index.js.map +1 -1
  29. package/dist/cli/commands/linked-artifacts.d.ts +18 -0
  30. package/dist/cli/commands/linked-artifacts.js +26 -3
  31. package/dist/cli/commands/linked-artifacts.js.map +1 -1
  32. package/dist/cli/commands/plan.d.ts +6 -0
  33. package/dist/cli/commands/plan.js +93 -32
  34. package/dist/cli/commands/plan.js.map +1 -1
  35. package/dist/cli/commands/validate.d.ts +20 -0
  36. package/dist/cli/commands/validate.js +292 -28
  37. package/dist/cli/commands/validate.js.map +1 -1
  38. package/dist/cli/error-guidance.d.ts +8 -0
  39. package/dist/cli/error-guidance.js +102 -2
  40. package/dist/cli/error-guidance.js.map +1 -1
  41. package/dist/cli/help-content.js +7 -3
  42. package/dist/cli/help-content.js.map +1 -1
  43. package/dist/cli/register-mutation.js +47 -16
  44. package/dist/cli/register-mutation.js.map +1 -1
  45. package/dist/cli/register-operations.js +10 -2
  46. package/dist/cli/register-operations.js.map +1 -1
  47. package/dist/cli/register-setup.js +16 -16
  48. package/dist/cli/register-setup.js.map +1 -1
  49. package/dist/cli-bundle/chunks/{activity-W6TS5F2L.js → activity-XADJOG6G.js} +11 -11
  50. package/dist/cli-bundle/chunks/activity-XZIUPGZH.js +16 -0
  51. package/dist/cli-bundle/chunks/{aggregate-UK2WJ4Z3.js → aggregate-6OTS3AOO.js} +10 -10
  52. package/dist/cli-bundle/chunks/{aggregate-NNJLKGEK.js → aggregate-OD36DJU5.js} +10 -10
  53. package/dist/cli-bundle/chunks/{append-DHGTLUZW.js → append-JYWO4P7W.js} +8 -8
  54. package/dist/cli-bundle/chunks/{append-7BS36Z2L.js → append-KG55G7S3.js} +8 -8
  55. package/dist/cli-bundle/chunks/{chunk-GF5XIBUH.js → chunk-35P4GT6E.js} +111 -10
  56. package/dist/cli-bundle/chunks/chunk-35P4GT6E.js.map +7 -0
  57. package/dist/cli-bundle/chunks/{chunk-A6XVYNQJ.js → chunk-37CYVF73.js} +5 -5
  58. package/dist/cli-bundle/chunks/{chunk-XRE4CTNP.js → chunk-3KLPFWZ4.js} +6 -6
  59. package/dist/cli-bundle/chunks/{chunk-WSWOQP3Z.js → chunk-4HFU4UO2.js} +3 -3
  60. package/dist/cli-bundle/chunks/{chunk-UNH3KSHG.js → chunk-4JCSYR6F.js} +3 -3
  61. package/dist/cli-bundle/chunks/{chunk-73PSHEMT.js → chunk-4YFAGDRH.js} +8 -8
  62. package/dist/cli-bundle/chunks/{chunk-7GYMMDDW.js → chunk-5SCT2JCT.js} +2 -2
  63. package/dist/cli-bundle/chunks/{chunk-Q6PSD5DZ.js → chunk-73ZPG2I3.js} +3 -3
  64. package/dist/cli-bundle/chunks/{chunk-XH6RA5A5.js → chunk-7AMK6DOW.js} +15 -15
  65. package/dist/cli-bundle/chunks/{chunk-XH6RA5A5.js.map → chunk-7AMK6DOW.js.map} +1 -1
  66. package/dist/cli-bundle/chunks/{chunk-CTW7QAHM.js → chunk-7IYFN5R7.js} +3 -3
  67. package/dist/cli-bundle/chunks/{chunk-OSGWBWLK.js → chunk-7UGSRQCL.js} +5 -5
  68. package/dist/cli-bundle/chunks/{chunk-WNMRICXH.js → chunk-A6LXQFO7.js} +4 -3
  69. package/dist/cli-bundle/chunks/chunk-A6LXQFO7.js.map +1 -0
  70. package/dist/cli-bundle/chunks/{chunk-UDWUDUJI.js → chunk-ATEES5SX.js} +2 -2
  71. package/dist/cli-bundle/chunks/{chunk-2MKBPWMK.js → chunk-AVGHVVF7.js} +3 -3
  72. package/dist/cli-bundle/chunks/{chunk-ZH7C7ZVX.js → chunk-AX4GEVQC.js} +14 -14
  73. package/dist/cli-bundle/chunks/{chunk-ZH7C7ZVX.js.map → chunk-AX4GEVQC.js.map} +2 -2
  74. package/dist/cli-bundle/chunks/chunk-C6SAP27O.js +187 -0
  75. package/dist/cli-bundle/chunks/chunk-C6SAP27O.js.map +1 -0
  76. package/dist/cli-bundle/chunks/{chunk-344GDQTH.js → chunk-CCX4RSYZ.js} +2 -2
  77. package/dist/cli-bundle/chunks/{chunk-6KQS23TX.js → chunk-CW6E4NAT.js} +8 -8
  78. package/dist/cli-bundle/chunks/{chunk-K45NAJV2.js → chunk-DY6C42S6.js} +9 -9
  79. package/dist/cli-bundle/chunks/chunk-EKS6O2IR.js +217 -0
  80. package/dist/cli-bundle/chunks/chunk-EKS6O2IR.js.map +1 -0
  81. package/dist/cli-bundle/chunks/{chunk-ANVZCNL5.js → chunk-ESANVZF4.js} +3 -3
  82. package/dist/cli-bundle/chunks/{chunk-6OSG3EMX.js → chunk-EWFY7SLA.js} +8 -8
  83. package/dist/cli-bundle/chunks/{chunk-DMDEC4QP.js → chunk-F75JSIOZ.js} +6 -6
  84. package/dist/cli-bundle/chunks/{chunk-TALBUVWF.js → chunk-FDH2X65L.js} +2 -2
  85. package/dist/cli-bundle/chunks/{chunk-OQGJSCZZ.js → chunk-FY4SPXSC.js} +3 -2
  86. package/dist/cli-bundle/chunks/chunk-FY4SPXSC.js.map +7 -0
  87. package/dist/cli-bundle/chunks/{chunk-TZLGCTA5.js → chunk-GKIZW7SM.js} +3 -3
  88. package/dist/cli-bundle/chunks/{chunk-UMWF6ZAS.js → chunk-GWZSYR6X.js} +2 -2
  89. package/dist/cli-bundle/chunks/{chunk-KHBRV5JU.js → chunk-HGLC63AU.js} +8 -8
  90. package/dist/cli-bundle/chunks/{chunk-CMEHZD6G.js → chunk-HHHJ2GI3.js} +8 -8
  91. package/dist/cli-bundle/chunks/{chunk-MF6KSSMF.js → chunk-HI7STVF2.js} +6 -6
  92. package/dist/cli-bundle/chunks/{chunk-IEQ3N7WP.js → chunk-I2IJY2NL.js} +2 -2
  93. package/dist/cli-bundle/chunks/{chunk-O64EYNHF.js → chunk-I53JBTJW.js} +6 -6
  94. package/dist/cli-bundle/chunks/{chunk-K7SXBA75.js → chunk-I7NYDZDV.js} +2 -2
  95. package/dist/cli-bundle/chunks/{chunk-WBU257Z4.js → chunk-IGVJRZ6H.js} +8 -8
  96. package/dist/cli-bundle/chunks/{chunk-7TW64BS5.js → chunk-IUKD4W6Z.js} +2 -2
  97. package/dist/cli-bundle/chunks/{chunk-DTRIVUTN.js → chunk-KBPQHXWG.js} +21 -8
  98. package/dist/cli-bundle/chunks/chunk-KBPQHXWG.js.map +1 -0
  99. package/dist/cli-bundle/chunks/{chunk-OVNSQHDG.js → chunk-KWAXVAXX.js} +4 -4
  100. package/dist/cli-bundle/chunks/{chunk-WWEFBBVF.js → chunk-L5EPZQIC.js} +12 -12
  101. package/dist/cli-bundle/chunks/chunk-NAWVUHXH.js +220 -0
  102. package/dist/cli-bundle/chunks/chunk-NAWVUHXH.js.map +7 -0
  103. package/dist/cli-bundle/chunks/{chunk-6ADVKPVV.js → chunk-OASDW5UI.js} +7 -7
  104. package/dist/cli-bundle/chunks/{chunk-EIS32UA4.js → chunk-OLKBSY4N.js} +2 -2
  105. package/dist/cli-bundle/chunks/{chunk-X3IPJU2O.js → chunk-P5BJOMBB.js} +9 -9
  106. package/dist/cli-bundle/chunks/{chunk-LYL32FT6.js → chunk-P5U5EOMA.js} +3 -3
  107. package/dist/cli-bundle/chunks/{chunk-EAQLLID6.js → chunk-PNYAAB4S.js} +21 -188
  108. package/dist/cli-bundle/chunks/chunk-PNYAAB4S.js.map +1 -0
  109. package/dist/cli-bundle/chunks/{chunk-TV6FZGVK.js → chunk-QJMGRZO2.js} +3 -3
  110. package/dist/cli-bundle/chunks/{chunk-KMMUDSSB.js → chunk-QKW5D45B.js} +5 -5
  111. package/dist/cli-bundle/chunks/{chunk-4H2NDEGJ.js → chunk-QNJSITCX.js} +7 -7
  112. package/dist/cli-bundle/chunks/chunk-R2OUQVBK.js +190 -0
  113. package/dist/cli-bundle/chunks/chunk-R2OUQVBK.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-XSCGU4WT.js → chunk-R4VWYWRN.js} +19 -193
  115. package/dist/cli-bundle/chunks/chunk-R4VWYWRN.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-VSS3CSTF.js → chunk-RXAP6JL5.js} +9 -9
  117. package/dist/cli-bundle/chunks/{chunk-3VTWCBXL.js → chunk-S26FESD4.js} +3 -3
  118. package/dist/cli-bundle/chunks/{chunk-DEYNERFX.js → chunk-S2ZLDYGS.js} +4 -4
  119. package/dist/cli-bundle/chunks/{chunk-QGIWURY3.js → chunk-SO55HRA5.js} +12 -12
  120. package/dist/cli-bundle/chunks/{chunk-F2PVV7IX.js → chunk-SXKNJPQ7.js} +3 -3
  121. package/dist/cli-bundle/chunks/{chunk-5OMABP7I.js → chunk-TK5VZFHY.js} +7 -7
  122. package/dist/cli-bundle/chunks/{chunk-UY26RIBR.js → chunk-TNAP7EJX.js} +2 -2
  123. package/dist/cli-bundle/chunks/{chunk-QJ2OIEOC.js → chunk-UIG4TW2H.js} +111 -10
  124. package/dist/cli-bundle/chunks/chunk-UIG4TW2H.js.map +1 -0
  125. package/dist/cli-bundle/chunks/{chunk-SNASEDXB.js → chunk-UUWGCWBU.js} +3 -3
  126. package/dist/cli-bundle/chunks/{chunk-6N46IM44.js → chunk-VAOUX6TK.js} +2 -2
  127. package/dist/cli-bundle/chunks/{chunk-X5YC5DZM.js → chunk-VFUZV5EB.js} +5 -5
  128. package/dist/cli-bundle/chunks/{chunk-I2FM2SMO.js → chunk-VPEAS7PS.js} +2 -2
  129. package/dist/cli-bundle/chunks/{chunk-7DUVDW7C.js → chunk-VSRZRLG3.js} +3 -3
  130. package/dist/cli-bundle/chunks/{chunk-GP6SHEAI.js → chunk-WPDMBIX6.js} +20 -7
  131. package/dist/cli-bundle/chunks/chunk-WPDMBIX6.js.map +7 -0
  132. package/dist/cli-bundle/chunks/{chunk-PYULT32I.js → chunk-WUNFKP7M.js} +2 -2
  133. package/dist/cli-bundle/chunks/{chunk-LUJQJR7G.js → chunk-XJDGS74Y.js} +5 -5
  134. package/dist/cli-bundle/chunks/{chunk-TXWMLDMG.js → chunk-XMBI6TNW.js} +4 -4
  135. package/dist/cli-bundle/chunks/{chunk-4CYHWHZU.js → chunk-XTKJSVWH.js} +2 -2
  136. package/dist/cli-bundle/chunks/{chunk-T6QLB34N.js → chunk-XUC4C4PT.js} +3 -3
  137. package/dist/cli-bundle/chunks/{chunk-KRZQGRVL.js → chunk-XWMF3POR.js} +5 -5
  138. package/dist/cli-bundle/chunks/{chunk-OROMGSBP.js → chunk-Y3YKK7CY.js} +2 -2
  139. package/dist/cli-bundle/chunks/{chunk-D6JZBUZ6.js → chunk-YW6Q3RYZ.js} +7 -7
  140. package/dist/cli-bundle/chunks/{chunk-GRHPU6EM.js → chunk-ZLMIWZUG.js} +2 -2
  141. package/dist/cli-bundle/chunks/{chunk-5HH6QRH5.js → chunk-ZMW77VWV.js} +9 -9
  142. package/dist/cli-bundle/chunks/{chunk-BE5G7HEL.js → chunk-ZYNJNPYD.js} +4 -4
  143. package/dist/cli-bundle/chunks/{claim-3TY5LE54.js → claim-2RDYMCTP.js} +10 -10
  144. package/dist/cli-bundle/chunks/{claim-LM4YY6QQ.js → claim-MJ7DZFC3.js} +10 -10
  145. package/dist/cli-bundle/chunks/close-4FMAPEMY.js +13 -0
  146. package/dist/cli-bundle/chunks/{close-CSD4LEMT.js → close-XLEKIQSW.js} +8 -8
  147. package/dist/cli-bundle/chunks/{close-many-B5SHDX6W.js → close-many-AOD4HSAZ.js} +15 -15
  148. package/dist/cli-bundle/chunks/{close-many-WRXB5KVY.js → close-many-XKAQY5CQ.js} +15 -15
  149. package/dist/cli-bundle/chunks/{comments-BDDEK3VW.js → comments-B4RWWDJT.js} +10 -10
  150. package/dist/cli-bundle/chunks/{comments-A5ALOYTG.js → comments-RN5TG4ZN.js} +10 -10
  151. package/dist/cli-bundle/chunks/{config-W2NHDNQT.js → config-3JXJ3XZ7.js} +8 -8
  152. package/dist/cli-bundle/chunks/{config-YUYBMJOW.js → config-FZ4UDC4B.js} +8 -8
  153. package/dist/cli-bundle/chunks/{context-LRJ74NSU.js → context-L36PIN35.js} +13 -13
  154. package/dist/cli-bundle/chunks/{context-R2QLOJCK.js → context-QBPO3BFM.js} +13 -13
  155. package/dist/cli-bundle/chunks/{contracts-HJHR4NCD.js → contracts-2G66IGIA.js} +309 -6
  156. package/dist/cli-bundle/chunks/contracts-2G66IGIA.js.map +1 -0
  157. package/dist/cli-bundle/chunks/{contracts-47X7RYUF.js → contracts-PJCHYSO5.js} +315 -5
  158. package/dist/cli-bundle/chunks/contracts-PJCHYSO5.js.map +7 -0
  159. package/dist/cli-bundle/chunks/{copy-P4UVYZ7M.js → copy-ALU5WMHA.js} +7 -7
  160. package/dist/cli-bundle/chunks/{copy-B7HFOWFB.js → copy-FWIVTLBO.js} +7 -7
  161. package/dist/cli-bundle/chunks/{create-5ERJF64D.js → create-5433DP3G.js} +13 -13
  162. package/dist/cli-bundle/chunks/create-VWLWS34Z.js +27 -0
  163. package/dist/cli-bundle/chunks/{delete-LX3LGBCH.js → delete-IYTIYAJS.js} +7 -7
  164. package/dist/cli-bundle/chunks/{delete-S3WVK6LP.js → delete-Y2SGJBGY.js} +7 -7
  165. package/dist/cli-bundle/chunks/{deps-YSM4LZQD.js → deps-6TSPOSGU.js} +7 -7
  166. package/dist/cli-bundle/chunks/{deps-GWSNH7OZ.js → deps-CZ4PTVXU.js} +7 -7
  167. package/dist/cli-bundle/chunks/{docs-TG6JMVMY.js → docs-I3BAF5WH.js} +11 -11
  168. package/dist/cli-bundle/chunks/docs-I3BAF5WH.js.map +1 -0
  169. package/dist/cli-bundle/chunks/{docs-7RYFBHQD.js → docs-MXLGZUIT.js} +10 -10
  170. package/dist/cli-bundle/chunks/docs-MXLGZUIT.js.map +7 -0
  171. package/dist/cli-bundle/chunks/{extension-R3LUKMX7.js → extension-Q34OEWO5.js} +5 -5
  172. package/dist/cli-bundle/chunks/{extension-VNMRKIHI.js → extension-WH2FOIOZ.js} +5 -5
  173. package/dist/cli-bundle/chunks/{files-KAKU57OT.js → files-FYP3MDPX.js} +10 -10
  174. package/dist/cli-bundle/chunks/files-FYP3MDPX.js.map +7 -0
  175. package/dist/cli-bundle/chunks/{files-QB3EYPMO.js → files-GUXUM2MB.js} +11 -11
  176. package/dist/cli-bundle/chunks/files-GUXUM2MB.js.map +1 -0
  177. package/dist/cli-bundle/chunks/{gc-KNUPLPSW.js → gc-FENB2ESG.js} +14 -176
  178. package/dist/cli-bundle/chunks/gc-FENB2ESG.js.map +1 -0
  179. package/dist/cli-bundle/chunks/{gc-B747VM4M.js → gc-KGQG66SA.js} +12 -181
  180. package/dist/cli-bundle/chunks/gc-KGQG66SA.js.map +7 -0
  181. package/dist/cli-bundle/chunks/{get-GMGLIQ5I.js → get-PCHS7RA6.js} +11 -11
  182. package/dist/cli-bundle/chunks/{get-SBL6NHYQ.js → get-QARTE6BL.js} +11 -11
  183. package/dist/cli-bundle/chunks/{health-WWZJ5KJS.js → health-7MTXAVR2.js} +82 -15
  184. package/dist/cli-bundle/chunks/health-7MTXAVR2.js.map +7 -0
  185. package/dist/cli-bundle/chunks/{health-IG43Z4KL.js → health-E4D7KGHD.js} +83 -16
  186. package/dist/cli-bundle/chunks/health-E4D7KGHD.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{history-XCWRXBXC.js → history-7WUAEWHW.js} +10 -10
  188. package/dist/cli-bundle/chunks/history-L2FQFRTU.js +20 -0
  189. package/dist/cli-bundle/chunks/{history-compact-KICKUCR7.js → history-compact-3EJ3L2O7.js} +11 -11
  190. package/dist/cli-bundle/chunks/{history-compact-IDH7E7VN.js → history-compact-LW27IPFK.js} +11 -11
  191. package/dist/cli-bundle/chunks/{history-redact-JJWH3QWK.js → history-redact-G72A4EJ4.js} +11 -11
  192. package/dist/cli-bundle/chunks/history-redact-QWQCX5DZ.js +19 -0
  193. package/dist/cli-bundle/chunks/{history-repair-N5HXKJOI.js → history-repair-OSQOKJ3E.js} +71 -13
  194. package/dist/cli-bundle/chunks/history-repair-OSQOKJ3E.js.map +7 -0
  195. package/dist/cli-bundle/chunks/{history-repair-7HWBZKXN.js → history-repair-SBK7P34V.js} +72 -14
  196. package/dist/cli-bundle/chunks/history-repair-SBK7P34V.js.map +1 -0
  197. package/dist/cli-bundle/chunks/init-4BKRHGWW.js +17 -0
  198. package/dist/cli-bundle/chunks/{init-OQA3TWIS.js → init-S5WEGUJY.js} +9 -9
  199. package/dist/cli-bundle/chunks/{learnings-L7VQUSVI.js → learnings-HQXSSKZ5.js} +10 -10
  200. package/dist/cli-bundle/chunks/{learnings-Z4GAIZQ5.js → learnings-XK3P4ZDR.js} +10 -10
  201. package/dist/cli-bundle/chunks/{list-W5ROBC5U.js → list-6CL3XFT6.js} +10 -10
  202. package/dist/cli-bundle/chunks/list-BYNN4ZEO.js +19 -0
  203. package/dist/cli-bundle/chunks/{notes-JJDOEDFK.js → notes-5T6P7C5V.js} +10 -10
  204. package/dist/cli-bundle/chunks/{notes-SDCK7BEN.js → notes-U5FZCSBT.js} +10 -10
  205. package/dist/cli-bundle/chunks/{plan-H5HYHMBB.js → plan-2YTQYWGM.js} +63 -23
  206. package/dist/cli-bundle/chunks/plan-2YTQYWGM.js.map +1 -0
  207. package/dist/cli-bundle/chunks/{plan-W2B5RYR3.js → plan-7IVSICR6.js} +62 -22
  208. package/dist/cli-bundle/chunks/plan-7IVSICR6.js.map +7 -0
  209. package/dist/cli-bundle/chunks/{register-list-query-QGRFMDWA.js → register-list-query-4UPMHONX.js} +18 -18
  210. package/dist/cli-bundle/chunks/{register-list-query-V4S23735.js → register-list-query-7VOW2C3W.js} +18 -18
  211. package/dist/cli-bundle/chunks/{register-mutation-ZPZNJXSA.js → register-mutation-FARSGYRD.js} +64 -47
  212. package/dist/cli-bundle/chunks/{register-mutation-ZPZNJXSA.js.map → register-mutation-FARSGYRD.js.map} +2 -2
  213. package/dist/cli-bundle/chunks/{register-mutation-I57PLUHA.js → register-mutation-LJDNVREU.js} +65 -48
  214. package/dist/cli-bundle/chunks/{register-mutation-I57PLUHA.js.map → register-mutation-LJDNVREU.js.map} +1 -1
  215. package/dist/cli-bundle/chunks/{register-operations-KAMLXAF5.js → register-operations-FFTYAL42.js} +38 -34
  216. package/dist/cli-bundle/chunks/register-operations-FFTYAL42.js.map +1 -0
  217. package/dist/cli-bundle/chunks/{register-operations-YEN4YEZ2.js → register-operations-HCJKDUA6.js} +37 -33
  218. package/dist/cli-bundle/chunks/{register-operations-YEN4YEZ2.js.map → register-operations-HCJKDUA6.js.map} +2 -2
  219. package/dist/cli-bundle/chunks/{register-setup-BZ3TNE3G.js → register-setup-6AVIUOCC.js} +31 -31
  220. package/dist/cli-bundle/chunks/register-setup-6AVIUOCC.js.map +1 -0
  221. package/dist/cli-bundle/chunks/{register-setup-WLFL3OUF.js → register-setup-KVNLO5OJ.js} +30 -30
  222. package/dist/cli-bundle/chunks/register-setup-KVNLO5OJ.js.map +7 -0
  223. package/dist/cli-bundle/chunks/restore-CHIOQAQL.js +17 -0
  224. package/dist/cli-bundle/chunks/{restore-RGFSPG4K.js → restore-M6AFHMV4.js} +11 -11
  225. package/dist/cli-bundle/chunks/{schema-CCDU3RLC.js → schema-76HDZJCC.js} +8 -8
  226. package/dist/cli-bundle/chunks/{schema-KZASL323.js → schema-AINZ2IMM.js} +8 -8
  227. package/dist/cli-bundle/chunks/{search-7KSOLI2E.js → search-JMLFQEPJ.js} +10 -10
  228. package/dist/cli-bundle/chunks/{search-DTL7CO22.js → search-NL3TSCYB.js} +10 -10
  229. package/dist/cli-bundle/chunks/{stats-QNV7B2CE.js → stats-BKXCBIGT.js} +7 -7
  230. package/dist/cli-bundle/chunks/{stats-IOXQMGI6.js → stats-UBD56TGK.js} +7 -7
  231. package/dist/cli-bundle/chunks/{telemetry-NHR5RFXT.js → telemetry-N454RHG5.js} +4 -4
  232. package/dist/cli-bundle/chunks/{telemetry-IV5C6JOM.js → telemetry-ZJXK3H7X.js} +4 -4
  233. package/dist/cli-bundle/chunks/{test-PIL2CEEB.js → test-BQAKIXAT.js} +14 -14
  234. package/dist/cli-bundle/chunks/test-O74JFUH5.js +32 -0
  235. package/dist/cli-bundle/chunks/{test-all-MFN4MYCV.js → test-all-7LV3I6S5.js} +14 -14
  236. package/dist/cli-bundle/chunks/{test-all-GRLYHBNP.js → test-all-TDYCCBA4.js} +14 -14
  237. package/dist/cli-bundle/chunks/{test-runs-7WCSC3TY.js → test-runs-E64M6XS3.js} +5 -5
  238. package/dist/cli-bundle/chunks/{test-runs-7LRFWWCA.js → test-runs-LXZLULCI.js} +5 -5
  239. package/dist/cli-bundle/chunks/update-36JM7YZT.js +21 -0
  240. package/dist/cli-bundle/chunks/update-I246PCLO.js +25 -0
  241. package/dist/cli-bundle/chunks/{update-many-UYMTVF42.js → update-many-F4IKDWZB.js} +22 -22
  242. package/dist/cli-bundle/chunks/{update-many-LOTAYUTN.js → update-many-NTWZ5YT3.js} +22 -22
  243. package/dist/cli-bundle/chunks/{upgrade-ZZSC7CLV.js → upgrade-37F7JKES.js} +5 -5
  244. package/dist/cli-bundle/chunks/{upgrade-LT2MLLPS.js → upgrade-L32JA4TZ.js} +5 -5
  245. package/dist/cli-bundle/chunks/{validate-IQIQSKUX.js → validate-46KCRHL7.js} +462 -50
  246. package/dist/cli-bundle/chunks/validate-46KCRHL7.js.map +1 -0
  247. package/dist/cli-bundle/chunks/{validate-3XRORNMP.js → validate-CRFMPTYD.js} +482 -49
  248. package/dist/cli-bundle/chunks/validate-CRFMPTYD.js.map +7 -0
  249. package/dist/cli-bundle/main.js +180 -25
  250. package/dist/cli-bundle/main.js.map +2 -2
  251. package/dist/core/diagnostics/remediation.js +19 -6
  252. package/dist/core/diagnostics/remediation.js.map +1 -1
  253. package/dist/core/lock/lock-gc.d.ts +31 -0
  254. package/dist/core/lock/lock-gc.js +120 -62
  255. package/dist/core/lock/lock-gc.js.map +1 -1
  256. package/dist/core/output/query-summary.d.ts +31 -0
  257. package/dist/core/output/query-summary.js +62 -0
  258. package/dist/core/output/query-summary.js.map +1 -0
  259. package/dist/core/shared/constants.js +3 -2
  260. package/dist/core/shared/constants.js.map +1 -1
  261. package/dist/core/telemetry/consent.js +18 -3
  262. package/dist/core/telemetry/consent.js.map +1 -1
  263. package/dist/core/validate/fix-planning.d.ts +130 -0
  264. package/dist/core/validate/fix-planning.js +202 -0
  265. package/dist/core/validate/fix-planning.js.map +1 -0
  266. package/dist/core/validate/missing-by-type.d.ts +21 -0
  267. package/dist/core/validate/missing-by-type.js +39 -0
  268. package/dist/core/validate/missing-by-type.js.map +1 -0
  269. package/dist/core/validate/stale-file-classification.d.ts +41 -0
  270. package/dist/core/validate/stale-file-classification.js +73 -0
  271. package/dist/core/validate/stale-file-classification.js.map +1 -0
  272. package/dist/mcp/server.js +74 -266
  273. package/dist/mcp/server.js.map +1 -1
  274. package/dist/mcp/tool-definitions.d.ts +27 -0
  275. package/dist/mcp/tool-definitions.js +330 -0
  276. package/dist/mcp/tool-definitions.js.map +1 -0
  277. package/dist/sdk/cli-contracts/tool-parameter-tables.js +38 -2
  278. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  279. package/dist/sdk/cli-contracts.d.ts +6 -1
  280. package/dist/sdk/cli-contracts.js +74 -7
  281. package/dist/sdk/cli-contracts.js.map +1 -1
  282. package/docs/AGENT_GUIDE.md +7 -2
  283. package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
  284. package/docs/COMMANDS.md +25 -2
  285. package/marketplace.json +1 -1
  286. package/package.json +1 -1
  287. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  288. package/plugins/pm-claude/README.md +7 -3
  289. package/plugins/pm-claude/commands/pm-init.md +1 -1
  290. package/plugins/pm-codex/README.md +2 -2
  291. package/dist/cli-bundle/chunks/activity-5QLX6DHN.js +0 -16
  292. package/dist/cli-bundle/chunks/chunk-DTRIVUTN.js.map +0 -1
  293. package/dist/cli-bundle/chunks/chunk-EAQLLID6.js.map +0 -1
  294. package/dist/cli-bundle/chunks/chunk-GF5XIBUH.js.map +0 -7
  295. package/dist/cli-bundle/chunks/chunk-GP6SHEAI.js.map +0 -7
  296. package/dist/cli-bundle/chunks/chunk-OQGJSCZZ.js.map +0 -7
  297. package/dist/cli-bundle/chunks/chunk-QJ2OIEOC.js.map +0 -1
  298. package/dist/cli-bundle/chunks/chunk-WNMRICXH.js.map +0 -1
  299. package/dist/cli-bundle/chunks/chunk-XSCGU4WT.js.map +0 -7
  300. package/dist/cli-bundle/chunks/close-SIQCDOBR.js +0 -13
  301. package/dist/cli-bundle/chunks/contracts-47X7RYUF.js.map +0 -7
  302. package/dist/cli-bundle/chunks/contracts-HJHR4NCD.js.map +0 -1
  303. package/dist/cli-bundle/chunks/create-TXNRPS4K.js +0 -27
  304. package/dist/cli-bundle/chunks/docs-7RYFBHQD.js.map +0 -7
  305. package/dist/cli-bundle/chunks/docs-TG6JMVMY.js.map +0 -1
  306. package/dist/cli-bundle/chunks/files-KAKU57OT.js.map +0 -7
  307. package/dist/cli-bundle/chunks/files-QB3EYPMO.js.map +0 -1
  308. package/dist/cli-bundle/chunks/gc-B747VM4M.js.map +0 -7
  309. package/dist/cli-bundle/chunks/gc-KNUPLPSW.js.map +0 -1
  310. package/dist/cli-bundle/chunks/health-IG43Z4KL.js.map +0 -1
  311. package/dist/cli-bundle/chunks/health-WWZJ5KJS.js.map +0 -7
  312. package/dist/cli-bundle/chunks/history-6UKSZTRT.js +0 -20
  313. package/dist/cli-bundle/chunks/history-redact-HKYBTK6X.js +0 -19
  314. package/dist/cli-bundle/chunks/history-repair-7HWBZKXN.js.map +0 -1
  315. package/dist/cli-bundle/chunks/history-repair-N5HXKJOI.js.map +0 -7
  316. package/dist/cli-bundle/chunks/init-27JLDUO2.js +0 -17
  317. package/dist/cli-bundle/chunks/list-6U3CJVXS.js +0 -19
  318. package/dist/cli-bundle/chunks/plan-H5HYHMBB.js.map +0 -1
  319. package/dist/cli-bundle/chunks/plan-W2B5RYR3.js.map +0 -7
  320. package/dist/cli-bundle/chunks/register-operations-KAMLXAF5.js.map +0 -1
  321. package/dist/cli-bundle/chunks/register-setup-BZ3TNE3G.js.map +0 -1
  322. package/dist/cli-bundle/chunks/register-setup-WLFL3OUF.js.map +0 -7
  323. package/dist/cli-bundle/chunks/restore-GNI2W5CN.js +0 -17
  324. package/dist/cli-bundle/chunks/test-4Z37CXW4.js +0 -32
  325. package/dist/cli-bundle/chunks/update-I4G34LKJ.js +0 -21
  326. package/dist/cli-bundle/chunks/update-VI5DBZ3G.js +0 -25
  327. package/dist/cli-bundle/chunks/validate-3XRORNMP.js.map +0 -7
  328. package/dist/cli-bundle/chunks/validate-IQIQSKUX.js.map +0 -1
  329. /package/dist/cli-bundle/chunks/{activity-W6TS5F2L.js.map → activity-XADJOG6G.js.map} +0 -0
  330. /package/dist/cli-bundle/chunks/{activity-5QLX6DHN.js.map → activity-XZIUPGZH.js.map} +0 -0
  331. /package/dist/cli-bundle/chunks/{aggregate-UK2WJ4Z3.js.map → aggregate-6OTS3AOO.js.map} +0 -0
  332. /package/dist/cli-bundle/chunks/{aggregate-NNJLKGEK.js.map → aggregate-OD36DJU5.js.map} +0 -0
  333. /package/dist/cli-bundle/chunks/{append-DHGTLUZW.js.map → append-JYWO4P7W.js.map} +0 -0
  334. /package/dist/cli-bundle/chunks/{append-7BS36Z2L.js.map → append-KG55G7S3.js.map} +0 -0
  335. /package/dist/cli-bundle/chunks/{chunk-A6XVYNQJ.js.map → chunk-37CYVF73.js.map} +0 -0
  336. /package/dist/cli-bundle/chunks/{chunk-XRE4CTNP.js.map → chunk-3KLPFWZ4.js.map} +0 -0
  337. /package/dist/cli-bundle/chunks/{chunk-WSWOQP3Z.js.map → chunk-4HFU4UO2.js.map} +0 -0
  338. /package/dist/cli-bundle/chunks/{chunk-UNH3KSHG.js.map → chunk-4JCSYR6F.js.map} +0 -0
  339. /package/dist/cli-bundle/chunks/{chunk-73PSHEMT.js.map → chunk-4YFAGDRH.js.map} +0 -0
  340. /package/dist/cli-bundle/chunks/{chunk-7GYMMDDW.js.map → chunk-5SCT2JCT.js.map} +0 -0
  341. /package/dist/cli-bundle/chunks/{chunk-Q6PSD5DZ.js.map → chunk-73ZPG2I3.js.map} +0 -0
  342. /package/dist/cli-bundle/chunks/{chunk-CTW7QAHM.js.map → chunk-7IYFN5R7.js.map} +0 -0
  343. /package/dist/cli-bundle/chunks/{chunk-OSGWBWLK.js.map → chunk-7UGSRQCL.js.map} +0 -0
  344. /package/dist/cli-bundle/chunks/{chunk-UDWUDUJI.js.map → chunk-ATEES5SX.js.map} +0 -0
  345. /package/dist/cli-bundle/chunks/{chunk-2MKBPWMK.js.map → chunk-AVGHVVF7.js.map} +0 -0
  346. /package/dist/cli-bundle/chunks/{chunk-344GDQTH.js.map → chunk-CCX4RSYZ.js.map} +0 -0
  347. /package/dist/cli-bundle/chunks/{chunk-6KQS23TX.js.map → chunk-CW6E4NAT.js.map} +0 -0
  348. /package/dist/cli-bundle/chunks/{chunk-K45NAJV2.js.map → chunk-DY6C42S6.js.map} +0 -0
  349. /package/dist/cli-bundle/chunks/{chunk-ANVZCNL5.js.map → chunk-ESANVZF4.js.map} +0 -0
  350. /package/dist/cli-bundle/chunks/{chunk-6OSG3EMX.js.map → chunk-EWFY7SLA.js.map} +0 -0
  351. /package/dist/cli-bundle/chunks/{chunk-DMDEC4QP.js.map → chunk-F75JSIOZ.js.map} +0 -0
  352. /package/dist/cli-bundle/chunks/{chunk-TALBUVWF.js.map → chunk-FDH2X65L.js.map} +0 -0
  353. /package/dist/cli-bundle/chunks/{chunk-TZLGCTA5.js.map → chunk-GKIZW7SM.js.map} +0 -0
  354. /package/dist/cli-bundle/chunks/{chunk-UMWF6ZAS.js.map → chunk-GWZSYR6X.js.map} +0 -0
  355. /package/dist/cli-bundle/chunks/{chunk-KHBRV5JU.js.map → chunk-HGLC63AU.js.map} +0 -0
  356. /package/dist/cli-bundle/chunks/{chunk-CMEHZD6G.js.map → chunk-HHHJ2GI3.js.map} +0 -0
  357. /package/dist/cli-bundle/chunks/{chunk-MF6KSSMF.js.map → chunk-HI7STVF2.js.map} +0 -0
  358. /package/dist/cli-bundle/chunks/{chunk-IEQ3N7WP.js.map → chunk-I2IJY2NL.js.map} +0 -0
  359. /package/dist/cli-bundle/chunks/{chunk-O64EYNHF.js.map → chunk-I53JBTJW.js.map} +0 -0
  360. /package/dist/cli-bundle/chunks/{chunk-K7SXBA75.js.map → chunk-I7NYDZDV.js.map} +0 -0
  361. /package/dist/cli-bundle/chunks/{chunk-WBU257Z4.js.map → chunk-IGVJRZ6H.js.map} +0 -0
  362. /package/dist/cli-bundle/chunks/{chunk-7TW64BS5.js.map → chunk-IUKD4W6Z.js.map} +0 -0
  363. /package/dist/cli-bundle/chunks/{chunk-OVNSQHDG.js.map → chunk-KWAXVAXX.js.map} +0 -0
  364. /package/dist/cli-bundle/chunks/{chunk-WWEFBBVF.js.map → chunk-L5EPZQIC.js.map} +0 -0
  365. /package/dist/cli-bundle/chunks/{chunk-6ADVKPVV.js.map → chunk-OASDW5UI.js.map} +0 -0
  366. /package/dist/cli-bundle/chunks/{chunk-EIS32UA4.js.map → chunk-OLKBSY4N.js.map} +0 -0
  367. /package/dist/cli-bundle/chunks/{chunk-X3IPJU2O.js.map → chunk-P5BJOMBB.js.map} +0 -0
  368. /package/dist/cli-bundle/chunks/{chunk-LYL32FT6.js.map → chunk-P5U5EOMA.js.map} +0 -0
  369. /package/dist/cli-bundle/chunks/{chunk-TV6FZGVK.js.map → chunk-QJMGRZO2.js.map} +0 -0
  370. /package/dist/cli-bundle/chunks/{chunk-KMMUDSSB.js.map → chunk-QKW5D45B.js.map} +0 -0
  371. /package/dist/cli-bundle/chunks/{chunk-4H2NDEGJ.js.map → chunk-QNJSITCX.js.map} +0 -0
  372. /package/dist/cli-bundle/chunks/{chunk-VSS3CSTF.js.map → chunk-RXAP6JL5.js.map} +0 -0
  373. /package/dist/cli-bundle/chunks/{chunk-3VTWCBXL.js.map → chunk-S26FESD4.js.map} +0 -0
  374. /package/dist/cli-bundle/chunks/{chunk-DEYNERFX.js.map → chunk-S2ZLDYGS.js.map} +0 -0
  375. /package/dist/cli-bundle/chunks/{chunk-QGIWURY3.js.map → chunk-SO55HRA5.js.map} +0 -0
  376. /package/dist/cli-bundle/chunks/{chunk-F2PVV7IX.js.map → chunk-SXKNJPQ7.js.map} +0 -0
  377. /package/dist/cli-bundle/chunks/{chunk-5OMABP7I.js.map → chunk-TK5VZFHY.js.map} +0 -0
  378. /package/dist/cli-bundle/chunks/{chunk-UY26RIBR.js.map → chunk-TNAP7EJX.js.map} +0 -0
  379. /package/dist/cli-bundle/chunks/{chunk-SNASEDXB.js.map → chunk-UUWGCWBU.js.map} +0 -0
  380. /package/dist/cli-bundle/chunks/{chunk-6N46IM44.js.map → chunk-VAOUX6TK.js.map} +0 -0
  381. /package/dist/cli-bundle/chunks/{chunk-X5YC5DZM.js.map → chunk-VFUZV5EB.js.map} +0 -0
  382. /package/dist/cli-bundle/chunks/{chunk-I2FM2SMO.js.map → chunk-VPEAS7PS.js.map} +0 -0
  383. /package/dist/cli-bundle/chunks/{chunk-7DUVDW7C.js.map → chunk-VSRZRLG3.js.map} +0 -0
  384. /package/dist/cli-bundle/chunks/{chunk-PYULT32I.js.map → chunk-WUNFKP7M.js.map} +0 -0
  385. /package/dist/cli-bundle/chunks/{chunk-LUJQJR7G.js.map → chunk-XJDGS74Y.js.map} +0 -0
  386. /package/dist/cli-bundle/chunks/{chunk-TXWMLDMG.js.map → chunk-XMBI6TNW.js.map} +0 -0
  387. /package/dist/cli-bundle/chunks/{chunk-4CYHWHZU.js.map → chunk-XTKJSVWH.js.map} +0 -0
  388. /package/dist/cli-bundle/chunks/{chunk-T6QLB34N.js.map → chunk-XUC4C4PT.js.map} +0 -0
  389. /package/dist/cli-bundle/chunks/{chunk-KRZQGRVL.js.map → chunk-XWMF3POR.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{chunk-OROMGSBP.js.map → chunk-Y3YKK7CY.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{chunk-D6JZBUZ6.js.map → chunk-YW6Q3RYZ.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{chunk-GRHPU6EM.js.map → chunk-ZLMIWZUG.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{chunk-5HH6QRH5.js.map → chunk-ZMW77VWV.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{chunk-BE5G7HEL.js.map → chunk-ZYNJNPYD.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{claim-3TY5LE54.js.map → claim-2RDYMCTP.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{claim-LM4YY6QQ.js.map → claim-MJ7DZFC3.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{close-SIQCDOBR.js.map → close-4FMAPEMY.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{close-CSD4LEMT.js.map → close-XLEKIQSW.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{close-many-B5SHDX6W.js.map → close-many-AOD4HSAZ.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{close-many-WRXB5KVY.js.map → close-many-XKAQY5CQ.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{comments-BDDEK3VW.js.map → comments-B4RWWDJT.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{comments-A5ALOYTG.js.map → comments-RN5TG4ZN.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{config-W2NHDNQT.js.map → config-3JXJ3XZ7.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{config-YUYBMJOW.js.map → config-FZ4UDC4B.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{context-LRJ74NSU.js.map → context-L36PIN35.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{context-R2QLOJCK.js.map → context-QBPO3BFM.js.map} +0 -0
  407. /package/dist/cli-bundle/chunks/{copy-P4UVYZ7M.js.map → copy-ALU5WMHA.js.map} +0 -0
  408. /package/dist/cli-bundle/chunks/{copy-B7HFOWFB.js.map → copy-FWIVTLBO.js.map} +0 -0
  409. /package/dist/cli-bundle/chunks/{create-5ERJF64D.js.map → create-5433DP3G.js.map} +0 -0
  410. /package/dist/cli-bundle/chunks/{create-TXNRPS4K.js.map → create-VWLWS34Z.js.map} +0 -0
  411. /package/dist/cli-bundle/chunks/{delete-LX3LGBCH.js.map → delete-IYTIYAJS.js.map} +0 -0
  412. /package/dist/cli-bundle/chunks/{delete-S3WVK6LP.js.map → delete-Y2SGJBGY.js.map} +0 -0
  413. /package/dist/cli-bundle/chunks/{deps-YSM4LZQD.js.map → deps-6TSPOSGU.js.map} +0 -0
  414. /package/dist/cli-bundle/chunks/{deps-GWSNH7OZ.js.map → deps-CZ4PTVXU.js.map} +0 -0
  415. /package/dist/cli-bundle/chunks/{extension-R3LUKMX7.js.map → extension-Q34OEWO5.js.map} +0 -0
  416. /package/dist/cli-bundle/chunks/{extension-VNMRKIHI.js.map → extension-WH2FOIOZ.js.map} +0 -0
  417. /package/dist/cli-bundle/chunks/{get-GMGLIQ5I.js.map → get-PCHS7RA6.js.map} +0 -0
  418. /package/dist/cli-bundle/chunks/{get-SBL6NHYQ.js.map → get-QARTE6BL.js.map} +0 -0
  419. /package/dist/cli-bundle/chunks/{history-XCWRXBXC.js.map → history-7WUAEWHW.js.map} +0 -0
  420. /package/dist/cli-bundle/chunks/{history-6UKSZTRT.js.map → history-L2FQFRTU.js.map} +0 -0
  421. /package/dist/cli-bundle/chunks/{history-compact-KICKUCR7.js.map → history-compact-3EJ3L2O7.js.map} +0 -0
  422. /package/dist/cli-bundle/chunks/{history-compact-IDH7E7VN.js.map → history-compact-LW27IPFK.js.map} +0 -0
  423. /package/dist/cli-bundle/chunks/{history-redact-JJWH3QWK.js.map → history-redact-G72A4EJ4.js.map} +0 -0
  424. /package/dist/cli-bundle/chunks/{history-redact-HKYBTK6X.js.map → history-redact-QWQCX5DZ.js.map} +0 -0
  425. /package/dist/cli-bundle/chunks/{init-27JLDUO2.js.map → init-4BKRHGWW.js.map} +0 -0
  426. /package/dist/cli-bundle/chunks/{init-OQA3TWIS.js.map → init-S5WEGUJY.js.map} +0 -0
  427. /package/dist/cli-bundle/chunks/{learnings-L7VQUSVI.js.map → learnings-HQXSSKZ5.js.map} +0 -0
  428. /package/dist/cli-bundle/chunks/{learnings-Z4GAIZQ5.js.map → learnings-XK3P4ZDR.js.map} +0 -0
  429. /package/dist/cli-bundle/chunks/{list-W5ROBC5U.js.map → list-6CL3XFT6.js.map} +0 -0
  430. /package/dist/cli-bundle/chunks/{list-6U3CJVXS.js.map → list-BYNN4ZEO.js.map} +0 -0
  431. /package/dist/cli-bundle/chunks/{notes-JJDOEDFK.js.map → notes-5T6P7C5V.js.map} +0 -0
  432. /package/dist/cli-bundle/chunks/{notes-SDCK7BEN.js.map → notes-U5FZCSBT.js.map} +0 -0
  433. /package/dist/cli-bundle/chunks/{register-list-query-QGRFMDWA.js.map → register-list-query-4UPMHONX.js.map} +0 -0
  434. /package/dist/cli-bundle/chunks/{register-list-query-V4S23735.js.map → register-list-query-7VOW2C3W.js.map} +0 -0
  435. /package/dist/cli-bundle/chunks/{restore-GNI2W5CN.js.map → restore-CHIOQAQL.js.map} +0 -0
  436. /package/dist/cli-bundle/chunks/{restore-RGFSPG4K.js.map → restore-M6AFHMV4.js.map} +0 -0
  437. /package/dist/cli-bundle/chunks/{schema-CCDU3RLC.js.map → schema-76HDZJCC.js.map} +0 -0
  438. /package/dist/cli-bundle/chunks/{schema-KZASL323.js.map → schema-AINZ2IMM.js.map} +0 -0
  439. /package/dist/cli-bundle/chunks/{search-7KSOLI2E.js.map → search-JMLFQEPJ.js.map} +0 -0
  440. /package/dist/cli-bundle/chunks/{search-DTL7CO22.js.map → search-NL3TSCYB.js.map} +0 -0
  441. /package/dist/cli-bundle/chunks/{stats-QNV7B2CE.js.map → stats-BKXCBIGT.js.map} +0 -0
  442. /package/dist/cli-bundle/chunks/{stats-IOXQMGI6.js.map → stats-UBD56TGK.js.map} +0 -0
  443. /package/dist/cli-bundle/chunks/{telemetry-NHR5RFXT.js.map → telemetry-N454RHG5.js.map} +0 -0
  444. /package/dist/cli-bundle/chunks/{telemetry-IV5C6JOM.js.map → telemetry-ZJXK3H7X.js.map} +0 -0
  445. /package/dist/cli-bundle/chunks/{test-PIL2CEEB.js.map → test-BQAKIXAT.js.map} +0 -0
  446. /package/dist/cli-bundle/chunks/{test-4Z37CXW4.js.map → test-O74JFUH5.js.map} +0 -0
  447. /package/dist/cli-bundle/chunks/{test-all-MFN4MYCV.js.map → test-all-7LV3I6S5.js.map} +0 -0
  448. /package/dist/cli-bundle/chunks/{test-all-GRLYHBNP.js.map → test-all-TDYCCBA4.js.map} +0 -0
  449. /package/dist/cli-bundle/chunks/{test-runs-7WCSC3TY.js.map → test-runs-E64M6XS3.js.map} +0 -0
  450. /package/dist/cli-bundle/chunks/{test-runs-7LRFWWCA.js.map → test-runs-LXZLULCI.js.map} +0 -0
  451. /package/dist/cli-bundle/chunks/{update-I4G34LKJ.js.map → update-36JM7YZT.js.map} +0 -0
  452. /package/dist/cli-bundle/chunks/{update-VI5DBZ3G.js.map → update-I246PCLO.js.map} +0 -0
  453. /package/dist/cli-bundle/chunks/{update-many-UYMTVF42.js.map → update-many-F4IKDWZB.js.map} +0 -0
  454. /package/dist/cli-bundle/chunks/{update-many-LOTAYUTN.js.map → update-many-NTWZ5YT3.js.map} +0 -0
  455. /package/dist/cli-bundle/chunks/{upgrade-ZZSC7CLV.js.map → upgrade-37F7JKES.js.map} +0 -0
  456. /package/dist/cli-bundle/chunks/{upgrade-LT2MLLPS.js.map → upgrade-L32JA4TZ.js.map} +0 -0
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Classification of stale linked paths reported by `pm validate --check-files`.
3
+ *
4
+ * A linked file path that no longer exists is either:
5
+ * - `moved`: a file with the same basename still exists elsewhere in the
6
+ * scanned candidate set — the candidates are reported so an agent can relink
7
+ * the item to the new location instead of dropping the link, or
8
+ * - `deleted`: no candidate with that basename exists anywhere in the scan,
9
+ * so the link points at content that is gone and pruning it is safe.
10
+ *
11
+ * Pure module (pm-0v2m / GH-184): no filesystem access — callers pass the
12
+ * already-collected candidate file list from the files check scan.
13
+ */
14
+ export type StaleLinkedPathClassification = "moved" | "deleted";
15
+ export interface ClassifiedStaleLinkedPath {
16
+ /** Normalized workspace-relative stale linked path. */
17
+ path: string;
18
+ classification: StaleLinkedPathClassification;
19
+ /**
20
+ * Candidate new locations (same basename, different path), sorted and capped
21
+ * at `candidateLimit`. Empty for `deleted`.
22
+ */
23
+ candidates: string[];
24
+ /** True when more candidates existed than `candidateLimit` allowed. */
25
+ candidates_truncated: boolean;
26
+ }
27
+ export declare const DEFAULT_STALE_PATH_CANDIDATE_LIMIT = 3;
28
+ /**
29
+ * Classify each stale (missing) linked path as `moved` or `deleted` by
30
+ * matching its basename against the candidate file list. Output preserves the
31
+ * input order of `stalePaths` (callers pass an already-sorted unique list).
32
+ * A candidate equal to the stale path itself never matches (the path is known
33
+ * missing; an identical candidate would be self-referential noise).
34
+ */
35
+ export declare function classifyStaleLinkedPaths(stalePaths: readonly string[], candidateFiles: readonly string[], candidateLimit?: number): ClassifiedStaleLinkedPath[];
36
+ /**
37
+ * Render compact `<path>:moved:<top-candidate>` / `<path>:deleted` rows for
38
+ * the files check details (token-efficient counterpart to the full
39
+ * classification objects).
40
+ */
41
+ export declare function summarizeStaleLinkedPathClassifications(classified: readonly ClassifiedStaleLinkedPath[]): string[];
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Classification of stale linked paths reported by `pm validate --check-files`.
3
+ *
4
+ * A linked file path that no longer exists is either:
5
+ * - `moved`: a file with the same basename still exists elsewhere in the
6
+ * scanned candidate set — the candidates are reported so an agent can relink
7
+ * the item to the new location instead of dropping the link, or
8
+ * - `deleted`: no candidate with that basename exists anywhere in the scan,
9
+ * so the link points at content that is gone and pruning it is safe.
10
+ *
11
+ * Pure module (pm-0v2m / GH-184): no filesystem access — callers pass the
12
+ * already-collected candidate file list from the files check scan.
13
+ */
14
+
15
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2df68560-32a7-5762-9470-cf82e978a90d")}catch(e){}}();
16
+ export const DEFAULT_STALE_PATH_CANDIDATE_LIMIT = 3;
17
+ function basenameOf(relativePath) {
18
+ const lastSlash = Math.max(relativePath.lastIndexOf("/"), relativePath.lastIndexOf("\\"));
19
+ return lastSlash === -1 ? relativePath : relativePath.slice(lastSlash + 1);
20
+ }
21
+ /**
22
+ * Classify each stale (missing) linked path as `moved` or `deleted` by
23
+ * matching its basename against the candidate file list. Output preserves the
24
+ * input order of `stalePaths` (callers pass an already-sorted unique list).
25
+ * A candidate equal to the stale path itself never matches (the path is known
26
+ * missing; an identical candidate would be self-referential noise).
27
+ */
28
+ export function classifyStaleLinkedPaths(stalePaths, candidateFiles, candidateLimit = DEFAULT_STALE_PATH_CANDIDATE_LIMIT) {
29
+ const limit = Number.isFinite(candidateLimit) && candidateLimit >= 1 ? Math.floor(candidateLimit) : DEFAULT_STALE_PATH_CANDIDATE_LIMIT;
30
+ const candidatesByBasename = new Map();
31
+ for (const candidate of candidateFiles) {
32
+ const basename = basenameOf(candidate);
33
+ if (basename.length === 0) {
34
+ continue;
35
+ }
36
+ const bucket = candidatesByBasename.get(basename);
37
+ if (bucket) {
38
+ bucket.push(candidate);
39
+ }
40
+ else {
41
+ candidatesByBasename.set(basename, [candidate]);
42
+ }
43
+ }
44
+ return stalePaths.map((stalePath) => {
45
+ const matches = (candidatesByBasename.get(basenameOf(stalePath)) ?? [])
46
+ .filter((candidate) => candidate !== stalePath)
47
+ .sort((left, right) => left.localeCompare(right));
48
+ if (matches.length === 0) {
49
+ return {
50
+ path: stalePath,
51
+ classification: "deleted",
52
+ candidates: [],
53
+ candidates_truncated: false,
54
+ };
55
+ }
56
+ return {
57
+ path: stalePath,
58
+ classification: "moved",
59
+ candidates: matches.slice(0, limit),
60
+ candidates_truncated: matches.length > limit,
61
+ };
62
+ });
63
+ }
64
+ /**
65
+ * Render compact `<path>:moved:<top-candidate>` / `<path>:deleted` rows for
66
+ * the files check details (token-efficient counterpart to the full
67
+ * classification objects).
68
+ */
69
+ export function summarizeStaleLinkedPathClassifications(classified) {
70
+ return classified.map((entry) => entry.classification === "moved" ? `${entry.path}:moved:${entry.candidates[0]}` : `${entry.path}:deleted`);
71
+ }
72
+ //# sourceMappingURL=stale-file-classification.js.map
73
+ //# debugId=2df68560-32a7-5762-9470-cf82e978a90d
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale-file-classification.js","sources":["core/validate/stale-file-classification.ts"],"sourceRoot":"/","sourcesContent":["/**\n * Classification of stale linked paths reported by `pm validate --check-files`.\n *\n * A linked file path that no longer exists is either:\n * - `moved`: a file with the same basename still exists elsewhere in the\n * scanned candidate set — the candidates are reported so an agent can relink\n * the item to the new location instead of dropping the link, or\n * - `deleted`: no candidate with that basename exists anywhere in the scan,\n * so the link points at content that is gone and pruning it is safe.\n *\n * Pure module (pm-0v2m / GH-184): no filesystem access — callers pass the\n * already-collected candidate file list from the files check scan.\n */\n\nexport type StaleLinkedPathClassification = \"moved\" | \"deleted\";\n\nexport interface ClassifiedStaleLinkedPath {\n /** Normalized workspace-relative stale linked path. */\n path: string;\n classification: StaleLinkedPathClassification;\n /**\n * Candidate new locations (same basename, different path), sorted and capped\n * at `candidateLimit`. Empty for `deleted`.\n */\n candidates: string[];\n /** True when more candidates existed than `candidateLimit` allowed. */\n candidates_truncated: boolean;\n}\n\nexport const DEFAULT_STALE_PATH_CANDIDATE_LIMIT = 3;\n\nfunction basenameOf(relativePath: string): string {\n const lastSlash = Math.max(relativePath.lastIndexOf(\"/\"), relativePath.lastIndexOf(\"\\\\\"));\n return lastSlash === -1 ? relativePath : relativePath.slice(lastSlash + 1);\n}\n\n/**\n * Classify each stale (missing) linked path as `moved` or `deleted` by\n * matching its basename against the candidate file list. Output preserves the\n * input order of `stalePaths` (callers pass an already-sorted unique list).\n * A candidate equal to the stale path itself never matches (the path is known\n * missing; an identical candidate would be self-referential noise).\n */\nexport function classifyStaleLinkedPaths(\n stalePaths: readonly string[],\n candidateFiles: readonly string[],\n candidateLimit: number = DEFAULT_STALE_PATH_CANDIDATE_LIMIT,\n): ClassifiedStaleLinkedPath[] {\n const limit = Number.isFinite(candidateLimit) && candidateLimit >= 1 ? Math.floor(candidateLimit) : DEFAULT_STALE_PATH_CANDIDATE_LIMIT;\n const candidatesByBasename = new Map<string, string[]>();\n for (const candidate of candidateFiles) {\n const basename = basenameOf(candidate);\n if (basename.length === 0) {\n continue;\n }\n const bucket = candidatesByBasename.get(basename);\n if (bucket) {\n bucket.push(candidate);\n } else {\n candidatesByBasename.set(basename, [candidate]);\n }\n }\n\n return stalePaths.map((stalePath) => {\n const matches = (candidatesByBasename.get(basenameOf(stalePath)) ?? [])\n .filter((candidate) => candidate !== stalePath)\n .sort((left, right) => left.localeCompare(right));\n if (matches.length === 0) {\n return {\n path: stalePath,\n classification: \"deleted\" as const,\n candidates: [],\n candidates_truncated: false,\n };\n }\n return {\n path: stalePath,\n classification: \"moved\" as const,\n candidates: matches.slice(0, limit),\n candidates_truncated: matches.length > limit,\n };\n });\n}\n\n/**\n * Render compact `<path>:moved:<top-candidate>` / `<path>:deleted` rows for\n * the files check details (token-efficient counterpart to the full\n * classification objects).\n */\nexport function summarizeStaleLinkedPathClassifications(classified: readonly ClassifiedStaleLinkedPath[]): string[] {\n return classified.map((entry) =>\n entry.classification === \"moved\" ? `${entry.path}:moved:${entry.candidates[0]}` : `${entry.path}:deleted`,\n );\n}\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;;;AAiBH,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AAEpD,SAAS,UAAU,CAAC,YAAoB;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1F,OAAO,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAA6B,EAC7B,cAAiC,EACjC,iBAAyB,kCAAkC;IAE3D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC;IACvI,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzD,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QAClC,MAAM,OAAO,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;aACpE,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC;aAC9C,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE,SAAkB;gBAClC,UAAU,EAAE,EAAE;gBACd,oBAAoB,EAAE,KAAK;aAC5B,CAAC;QACJ,CAAC;QACD,OAAO;YACL,IAAI,EAAE,SAAS;YACf,cAAc,EAAE,OAAgB;YAChC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;YACnC,oBAAoB,EAAE,OAAO,CAAC,MAAM,GAAG,KAAK;SAC7C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uCAAuC,CAAC,UAAgD;IACtG,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9B,KAAK,CAAC,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,UAAU,CAC1G,CAAC;AACJ,CAAC","debugId":"2df68560-32a7-5762-9470-cf82e978a90d"}
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c65aa3d0-c69f-561b-8e23-939348167e21")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e3feb52b-3154-5b9c-85ec-f0639c808233")}catch(e){}}();
4
4
  import readline from "node:readline";
5
5
  import { fileURLToPath } from "node:url";
6
6
  import { createEmptyExtensionCommandRegistry, createEmptyExtensionHookRegistry, createEmptyExtensionParserRegistry, createEmptyExtensionPreflightRegistry, createEmptyExtensionRegistrationRegistry, createEmptyExtensionRendererRegistry, createEmptyExtensionServiceRegistry, } from "../core/extensions/extension-registries.js";
@@ -8,6 +8,7 @@ import { activateExtensions, deactivateExtensions, loadExtensions, runActiveComm
8
8
  import { pathExists } from "../core/fs/fs-utils.js";
9
9
  import { resolvePmCliVersion } from "../core/packages/root.js";
10
10
  import { projectMutationResult } from "../core/output/mutation-projection.js";
11
+ import { withQuerySummary } from "../core/output/query-summary.js";
11
12
  import { PmCliError } from "../core/shared/errors.js";
12
13
  import { decodeHtmlEntitiesInOptions } from "../core/shared/html-entity-decode.js";
13
14
  import { levenshteinDistanceWithinLimit } from "../core/shared/levenshtein.js";
@@ -17,9 +18,9 @@ import { getSettingsPath, resolvePmRoot } from "../core/store/paths.js";
17
18
  import { readSettings } from "../core/store/settings.js";
18
19
  import { normalizeListOptions, normalizeUpdateOptions } from "../cli/registration-helpers.js";
19
20
  import { UPDATE_COMMANDER_STRING_OPTION_CONTRACTS } from "../sdk/cli-contracts/commander-mutation-options.js";
20
- import { PM_TOOL_ACTIONS } from "../sdk/cli-contracts/enum-contracts.js";
21
21
  import { clearWorkspaceContractsCache } from "../sdk/runtime.js";
22
- import { runActivity, runAggregate, runAppend, runClaim, runClose, runCloseMany, runComments, runContracts, runContext, runCreate, runCopy, runConfig, runDelete, runDeps, runDocs, runExtension, runFiles, runFilesDiscover, runGc, runGet, runHealth, runHistory, runHistoryCompact, runHistoryRedact, runHistoryRepair, runInit, runLearnings, runList, runNotes, runPlan, runRelease, runSchemaAddStatus, runSchemaAddType, runSchemaList, runSchemaRemoveStatus, runSchemaRemoveType, runSchemaShow, runSchemaShowStatus, runSearch, runStats, runTelemetry, runTest, runTestAll, runUpdate, runUpdateMany, runUpgrade, runValidate, } from "../cli/commands/index.js";
22
+ import { TOOLS } from "./tool-definitions.js";
23
+ import { runActivity, runAggregate, runAppend, runClaim, runClose, runCloseMany, runComments, runContracts, runContext, runCreate, runCopy, runConfig, runDelete, runDeps, runDocs, runExtension, runFiles, runFilesDiscover, runGc, runGet, runHealth, runHistory, runHistoryCompact, runHistoryRedact, runHistoryRepair, runHistoryRepairAll, assertHistoryRepairTarget, runInit, runLearnings, runList, runNotes, runPlan, runRelease, runSchemaAddStatus, runSchemaAddType, runSchemaList, runSchemaRemoveStatus, runSchemaRemoveType, runSchemaShow, runSchemaShowStatus, runSearch, runStats, runTelemetry, runTest, runTestAll, runUpdate, runUpdateMany, runUpgrade, runValidate, } from "../cli/commands/index.js";
23
24
  const PM_PACKAGE_ROOT_ENV = "PM_CLI_PACKAGE_ROOT";
24
25
  function resolvePmPackageRoot() {
25
26
  return fileURLToPath(new URL("../..", import.meta.url));
@@ -30,256 +31,9 @@ if (typeof process.env[PM_PACKAGE_ROOT_ENV] !== "string" || process.env[PM_PACKA
30
31
  // Reflect the real package.json version so agents/telemetry can identify the
31
32
  // build serving requests (was hard-coded "1.0.0"; see pm-2nvw).
32
33
  const PM_MCP_SERVER_VERSION = resolvePmCliVersion(import.meta.url, ["../.."]) ?? "0.0.0";
33
- const TOOL_SCHEMA_BASE = {
34
- type: "object",
35
- properties: {
36
- cwd: {
37
- type: "string",
38
- description: "Workspace directory to run the native pm operation in. Defaults to the MCP server process cwd.",
39
- },
40
- path: {
41
- type: "string",
42
- description: "Optional pm data root, equivalent to PM_PATH/global --path. Leave unset for real repository tracking.",
43
- },
44
- author: {
45
- type: "string",
46
- description: "Mutation author. Defaults to PM_AUTHOR or pm settings when supported by the underlying operation.",
47
- },
48
- },
49
- additionalProperties: true,
50
- };
51
- const idSchema = {
52
- type: "string",
53
- description: "pm item id, for example pm-abc1.",
54
- };
55
- // pm-fd8n: derive the pm_run action enumeration from the canonical
56
- // PM_TOOL_ACTIONS contract instead of a hand-maintained prose list, so the
57
- // MCP-facing description can never drift from the actual supported actions.
58
- const PM_RUN_ACTION_DESCRIPTION = `Operation name (one of): ${PM_TOOL_ACTIONS.join(", ")}. ` +
59
- "Package-owned actions (for example calendar/templates/guide/dedupe-audit/normalize/reindex/comments-audit/completion/test-runs-list/test-runs-status/test-runs-logs/test-runs-stop/test-runs-resume) are available dynamically when installed.";
60
- const LIST_TOP_LEVEL_OPTION_PROPERTIES = {
61
- status: { type: "string", description: "Alias for options.status." },
62
- type: { type: "string", description: "Alias for options.type." },
63
- tag: { type: "string", description: "Alias for options.tag." },
64
- priority: { type: "string", description: "Alias for options.priority." },
65
- limit: { type: ["string", "number"], description: "Alias for options.limit." },
66
- offset: { type: ["string", "number"], description: "Alias for options.offset." },
67
- };
68
- const SEARCH_TOP_LEVEL_OPTION_PROPERTIES = {
69
- mode: { type: "string", description: "Alias for options.mode." },
70
- status: { type: "string", description: "Alias for options.status." },
71
- type: { type: "string", description: "Alias for options.type." },
72
- tag: { type: "string", description: "Alias for options.tag." },
73
- priority: { type: "string", description: "Alias for options.priority." },
74
- limit: { type: ["string", "number"], description: "Alias for options.limit." },
75
- };
76
- function objectSchema(properties, required = []) {
77
- return {
78
- ...TOOL_SCHEMA_BASE,
79
- properties: {
80
- ...TOOL_SCHEMA_BASE.properties,
81
- ...properties,
82
- },
83
- required,
84
- };
85
- }
86
- const TOOLS = [
87
- {
88
- name: "pm_run",
89
- description: "Run any supported pm operation natively through the pm library. Use this for commands not covered by narrower pm_* tools.",
90
- inputSchema: objectSchema({
91
- action: {
92
- type: "string",
93
- description: PM_RUN_ACTION_DESCRIPTION,
94
- },
95
- id: idSchema,
96
- query: { type: "string", description: "Search query for action=search." },
97
- reason: { type: "string", description: "Close reason for action=close." },
98
- force: { type: "boolean", description: "Force ownership/terminal-state override when supported." },
99
- subcommand: {
100
- type: "string",
101
- enum: ["list", "show", "show-status", "add-type", "remove-type", "add-status", "remove-status"],
102
- description: "Schema subcommand when action=schema.",
103
- },
104
- name: {
105
- type: "string",
106
- description: "Item type name for action=schema show/add-type/remove-type, or status id for show-status/add-status/remove-status.",
107
- },
108
- description: {
109
- type: "string",
110
- description: "Custom item type or status description for action=schema add-type/add-status.",
111
- },
112
- defaultStatus: { type: "string", description: "Default status for action=schema add-type." },
113
- folder: { type: "string", description: "Storage folder for action=schema add-type." },
114
- alias: {
115
- type: "array",
116
- items: { type: "string" },
117
- description: "Aliases for action=schema add-type/add-status.",
118
- },
119
- role: {
120
- type: "array",
121
- items: { type: "string" },
122
- description: "Lifecycle roles for action=schema add-status: draft, active, blocked, terminal, terminal_done, terminal_canceled, default_open, default_close, default_cancel.",
123
- },
124
- order: { type: "number", description: "Display/sort order for action=schema add-status." },
125
- options: { type: "object", description: "Underlying pm command options using camelCase keys." },
126
- fullChangedFields: {
127
- type: "boolean",
128
- description: "For mutation actions, return the full changed_fields array instead of the default changed_field_count.",
129
- },
130
- idOnly: {
131
- type: "boolean",
132
- description: "For single-item mutation actions, return only id and status.",
133
- },
134
- }, ["action"]),
135
- },
136
- {
137
- name: "pm_context",
138
- description: "Return the agent-oriented project context snapshot.",
139
- inputSchema: objectSchema({ options: { type: "object" } }),
140
- },
141
- {
142
- name: "pm_search",
143
- description: "Search pm items with keyword, semantic, or hybrid search. " +
144
- "Defaults to a compact projection for token efficiency. " +
145
- "Pass options.mode=keyword|semantic|hybrid, options.limit=N to cap hits, " +
146
- "options.fields='id,title,score' for a custom projection, or options.full=true for full item bodies (can be large).",
147
- inputSchema: objectSchema({ query: { type: "string" }, options: { type: "object" }, ...SEARCH_TOP_LEVEL_OPTION_PROPERTIES }, ["query"]),
148
- },
149
- {
150
- name: "pm_list",
151
- description: "List pm items with status/type/tag/priority filters. Defaults to compact projection for token efficiency. " +
152
- "options.status accepts CSV (open,in_progress). " +
153
- "Pass options.compact=false or options.includeBody=true for full bodies/comments. " +
154
- "Pass options.brief=true for ultra-terse (id/status/type/title only). " +
155
- "Pass options.fields='id,title,priority' for custom projection. " +
156
- "Pass options.limit=N to cap row count.",
157
- inputSchema: objectSchema({ options: { type: "object" }, ...LIST_TOP_LEVEL_OPTION_PROPERTIES }),
158
- },
159
- {
160
- name: "pm_get",
161
- description: "Read one pm item. Pass options.depth='brief' or options.fields='id,title,status' for low-token inspection.",
162
- inputSchema: objectSchema({
163
- id: idSchema,
164
- options: { type: "object", description: "Get options such as depth=brief|standard|deep|full or fields=id,title,status." },
165
- }, ["id"]),
166
- },
167
- {
168
- name: "pm_create",
169
- description: "Create a pm item natively and write pm history. " +
170
- "Output is compact by default (changed_fields replaced with changed_field_count for token efficiency); pass fullChangedFields=true for the full changed_fields array.",
171
- inputSchema: objectSchema({
172
- fullChangedFields: { type: "boolean", description: "Return full changed_fields instead of changed_field_count." },
173
- allowMissingParent: { type: "boolean", description: "Allow unresolved parent references and emit a validation warning." },
174
- options: { type: "object", description: "Create options. title and description are required." },
175
- }, ["options"]),
176
- },
177
- {
178
- name: "pm_copy",
179
- description: "Copy an existing pm item into a new id while resetting lifecycle fields. " +
180
- "Output is compact by default (changed_fields replaced with changed_field_count); pass fullChangedFields=true for the full changed_fields array.",
181
- inputSchema: objectSchema({
182
- id: idSchema,
183
- fullChangedFields: { type: "boolean", description: "Return full changed_fields instead of changed_field_count." },
184
- options: { type: "object", description: "Copy options such as title override, author, and message." },
185
- }, ["id"]),
186
- },
187
- {
188
- name: "pm_update",
189
- description: "Update pm item metadata/body/dependencies/log seeds natively. " +
190
- "Output is compact by default (changed_fields replaced with changed_field_count); pass fullChangedFields=true for the full changed_fields delta.",
191
- inputSchema: objectSchema({
192
- id: idSchema,
193
- fullChangedFields: { type: "boolean", description: "Return full changed_fields instead of changed_field_count." },
194
- options: { type: "object" },
195
- }, ["id", "options"]),
196
- },
197
- {
198
- name: "pm_claim",
199
- description: "Claim a pm item.",
200
- inputSchema: objectSchema({ id: idSchema, force: { type: "boolean" }, options: { type: "object" } }, ["id"]),
201
- },
202
- {
203
- name: "pm_release",
204
- description: "Release a pm item claim.",
205
- inputSchema: objectSchema({ id: idSchema, force: { type: "boolean" }, options: { type: "object" } }, ["id"]),
206
- },
207
- {
208
- name: "pm_close",
209
- description: "Close a pm item with optional close reason and optional close validation (reason requirement follows governance settings). " +
210
- "Output is compact by default (changed_fields replaced with changed_field_count); pass fullChangedFields=true for the full changed_fields array.",
211
- inputSchema: objectSchema({
212
- id: idSchema,
213
- reason: { type: "string", description: "Close reason text when provided or required by governance settings." },
214
- duplicateOf: { type: "string", description: "Canonical item id when closing this item as a duplicate." },
215
- fullChangedFields: { type: "boolean", description: "Return full changed_fields instead of changed_field_count." },
216
- idOnly: { type: "boolean", description: "Return only id and status." },
217
- options: { type: "object" },
218
- }, ["id"]),
219
- },
220
- {
221
- name: "pm_comments",
222
- description: "List or add comments on a pm item. Use options.add to append. " +
223
- "List calls default to the most recent 20 comments with total_count/has_more metadata for token efficiency. " +
224
- "Pass options.limit=N to choose a page size, options.limit=0 for summary-only metadata, or options.full=true for full history.",
225
- inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
226
- },
227
- {
228
- name: "pm_files",
229
- description: "List, add, remove, audit, or validate linked files for a pm item.",
230
- inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
231
- },
232
- {
233
- name: "pm_docs",
234
- description: "List, add, or remove linked docs for a pm item.",
235
- inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
236
- },
237
- {
238
- name: "pm_notes",
239
- description: "List or add structured notes on a pm item. Use options.add to append a note; omit it to list existing notes.",
240
- inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
241
- },
242
- {
243
- name: "pm_learnings",
244
- description: "List or add learnings on a pm item. Use options.add to capture a learning/insight; omit it to list existing learnings.",
245
- inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
246
- },
247
- {
248
- name: "pm_deps",
249
- description: "List, add, or remove dependencies for a pm item. Use options.add to declare a dependency and options.remove to drop one; omit both to list current dependencies.",
250
- inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
251
- },
252
- {
253
- name: "pm_test",
254
- description: "List, add, remove, or run linked tests for a pm item.",
255
- inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
256
- },
257
- {
258
- name: "pm_validate",
259
- description: "Run pm validation checks.",
260
- inputSchema: objectSchema({ options: { type: "object" } }),
261
- },
262
- {
263
- name: "pm_health",
264
- description: "Run pm health diagnostics. Pass options.brief=true for compact low-token details, options.skipIntegrity=true, options.skipDrift=true, options.skipVectors=true for a fast status-only check, or options.full=true for the complete deep check.",
265
- inputSchema: objectSchema({ options: { type: "object" } }),
266
- },
267
- {
268
- name: "pm_contracts",
269
- description: "Inspect pm command, flag, schema, and availability contracts.",
270
- inputSchema: objectSchema({ options: { type: "object" } }),
271
- },
272
- {
273
- name: "pm_plan",
274
- description: "Run agent-optimized Plan workflows. options.subcommand selects: create|show|add-step|update-step|complete-step|block-step|reorder-step|remove-step|link|unlink|decision|discovery|validation|resume|approve|materialize. Provide id for all non-create subcommands; provide stepRef for step lifecycle subcommands. Plans store agent-readable steps with dependencies, decisions, discoveries, validation, and resume context.",
275
- inputSchema: objectSchema({
276
- id: { type: "string", description: "Plan id (required for all subcommands except create)." },
277
- stepRef: { type: "string", description: "Step id or order for step lifecycle subcommands." },
278
- reorderTo: { type: "number", description: "New order for reorder-step." },
279
- options: { type: "object", description: "Plan options including subcommand, stepRef, stepStatus, link, depth, etc." },
280
- }),
281
- },
282
- ];
34
+ // Tool definitions (TOOLS) live in ./tool-definitions.ts so the `pm contracts`
35
+ // golden-file snapshot can import the surface without loading the server
36
+ // runtime (pm-4os2). This file owns dispatch, normalization, and transport.
283
37
  // pm-qxwu: TOOL_SCHEMA_BASE keeps additionalProperties:true so legitimate
284
38
  // passthrough keeps working, which means a typo'd top-level arg (e.g.
285
39
  // "fullChangedField" missing the trailing "s") is silently swallowed and the
@@ -372,7 +126,7 @@ function globalOptions(args) {
372
126
  noPager: true,
373
127
  };
374
128
  }
375
- const ARRAY_TO_CSV_FIELDS = new Set(["tags", "blockedBy", "blocked_by", "skills"]);
129
+ const ARRAY_TO_CSV_FIELDS = new Set(["tags", "blockedBy", "blocked_by", "skills", "fields"]);
376
130
  const SCALAR_TO_ARRAY_FIELDS = new Set([
377
131
  "comment",
378
132
  "note",
@@ -455,10 +209,41 @@ function optionsWithAuthor(args, action) {
455
209
  else if (action === "close") {
456
210
  hoistKey("duplicateOf");
457
211
  }
212
+ else if (action === "append") {
213
+ // pm-7u9j: the narrow pm_append tool declares `body` top-level; runAppend
214
+ // reads it from options, so hoist unless options.body already wins.
215
+ // (pm_schema/pm_config top-level args are consumed directly by runAction's
216
+ // schema/config cases, which read args before options — no hoist needed.)
217
+ hoistKey("body");
218
+ }
458
219
  const options = normalizeMcpOptionsArrays({ ...hoistedTopLevel, ...baseOptions }, action);
459
220
  const author = readString(args, "author");
460
221
  return author && options.author === undefined ? { ...options, author } : options;
461
222
  }
223
+ // GH-170 (pm-pfnx): the narrow pm_files/pm_docs tools spell the CLI --note flag
224
+ // as `addNote` (the shared `note` parameter is the array-typed create/update
225
+ // note seed). Translate it onto the runner's `note` option; an explicit
226
+ // options.note (pm_run callers) wins.
227
+ function withAddNoteOption(options) {
228
+ if (options.addNote === undefined) {
229
+ return options;
230
+ }
231
+ const next = { ...options };
232
+ if (next.note === undefined && typeof next.addNote === "string") {
233
+ next.note = next.addNote;
234
+ }
235
+ delete next.addNote;
236
+ return next;
237
+ }
238
+ function withFilesDiscoveryOptions(options) {
239
+ const next = { ...options };
240
+ if (next.discoveryNote !== undefined && next.note === undefined && typeof next.discoveryNote === "string") {
241
+ next.note = next.discoveryNote;
242
+ }
243
+ delete next.discover;
244
+ delete next.discoveryNote;
245
+ return next;
246
+ }
462
247
  function normalizeActionName(value) {
463
248
  return value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
464
249
  }
@@ -743,7 +528,9 @@ async function runAction(args) {
743
528
  listOptions.includeBody === undefined) {
744
529
  listOptions.compact = true;
745
530
  }
746
- return runList(readString(args, "status"), listOptions, global);
531
+ // pm-rmjy: echo the applied filters + resolved projection mode so agents
532
+ // get structured confirmation of what the server actually ran.
533
+ return withQuerySummary((await runList(readString(args, "status"), listOptions, global)), listOptions);
747
534
  }
748
535
  case "get":
749
536
  return runGet(id ?? readRequiredString(options, "id"), global, options);
@@ -754,7 +541,8 @@ async function runAction(args) {
754
541
  searchOptions.fields === undefined) {
755
542
  searchOptions.compact = true;
756
543
  }
757
- return runSearch(readRequiredString(args, "query"), searchOptions, global);
544
+ // pm-rmjy: echo the applied filters + resolved projection mode (see list).
545
+ return withQuerySummary((await runSearch(readRequiredString(args, "query"), searchOptions, global)), searchOptions);
758
546
  }
759
547
  case "create": {
760
548
  const { changedFields, idOnly, runnerOptions } = withMutationCompaction(args, options);
@@ -802,10 +590,15 @@ async function runAction(args) {
802
590
  return runNotes(id ?? readRequiredString(options, "id"), options, global);
803
591
  case "learnings":
804
592
  return runLearnings(id ?? readRequiredString(options, "id"), options, global);
805
- case "files":
806
- return runFiles(id ?? readRequiredString(options, "id"), options, global);
593
+ case "files": {
594
+ const fileId = id ?? readRequiredString(options, "id");
595
+ if (options.discover === true) {
596
+ return runFilesDiscover(fileId, withFilesDiscoveryOptions(options), global);
597
+ }
598
+ return runFiles(fileId, withAddNoteOption(options), global);
599
+ }
807
600
  case "docs":
808
- return runDocs(id ?? readRequiredString(options, "id"), options, global);
601
+ return runDocs(id ?? readRequiredString(options, "id"), withAddNoteOption(options), global);
809
602
  case "test":
810
603
  return runTest(id ?? readRequiredString(options, "id"), options, global);
811
604
  case "test-all":
@@ -836,8 +629,15 @@ async function runAction(args) {
836
629
  }
837
630
  case "contracts":
838
631
  return runContracts(options, global);
839
- case "config":
840
- return runConfig(readString(args, "scope") ?? readString(options, "scope") ?? "project", readString(args, "configAction") ?? readRequiredString(options, "action"), readString(args, "key") ?? readString(options, "key"), options, global, readString(args, "value") ?? readString(options, "value"));
632
+ case "config": {
633
+ // pm-v68d: the narrow pm_config tool declares configAction top-level;
634
+ // options.configAction/options.action remain accepted for pm_run parity.
635
+ const configAction = readString(args, "configAction") ?? readString(options, "configAction") ?? readString(options, "action");
636
+ if (configAction === undefined) {
637
+ throw new PmCliError("Missing required argument: configAction", 64);
638
+ }
639
+ return runConfig(readString(args, "scope") ?? readString(options, "scope") ?? "project", configAction, readString(args, "key") ?? readString(options, "key"), options, global, readString(args, "value") ?? readString(options, "value"));
640
+ }
841
641
  case "activity": {
842
642
  const activityOptions = { ...options };
843
643
  if (activityOptions.compact === undefined) {
@@ -871,8 +671,12 @@ async function runAction(args) {
871
671
  return runHistory(id ?? readRequiredString(options, "id"), options, global);
872
672
  case "history-redact":
873
673
  return runHistoryRedact(id ?? readRequiredString(options, "id"), options, global);
874
- case "history-repair":
875
- return runHistoryRepair(id ?? readRequiredString(options, "id"), options, global);
674
+ case "history-repair": {
675
+ const repairAll = options.all === true;
676
+ const repairId = id ?? readString(options, "id");
677
+ assertHistoryRepairTarget(repairId, repairAll);
678
+ return repairAll ? runHistoryRepairAll(options, global) : runHistoryRepair(repairId, options, global);
679
+ }
876
680
  case "history-compact":
877
681
  return runHistoryCompact(id ?? readRequiredString(options, "id"), options, global);
878
682
  case "plan": {
@@ -1001,6 +805,7 @@ const HANDLERS = {
1001
805
  pm_create: (args) => runAction({ ...args, action: "create" }),
1002
806
  pm_copy: (args) => runAction({ ...args, action: "copy" }),
1003
807
  pm_update: (args) => runAction({ ...args, action: "update" }),
808
+ pm_append: (args) => runAction({ ...args, action: "append" }),
1004
809
  pm_claim: (args) => runAction({ ...args, action: "claim" }),
1005
810
  pm_release: (args) => runAction({ ...args, action: "release" }),
1006
811
  pm_close: (args) => runAction({ ...args, action: "close" }),
@@ -1014,6 +819,8 @@ const HANDLERS = {
1014
819
  pm_validate: (args) => runAction({ ...args, action: "validate" }),
1015
820
  pm_health: (args) => runAction({ ...args, action: "health" }),
1016
821
  pm_contracts: (args) => runAction({ ...args, action: "contracts" }),
822
+ pm_schema: (args) => runAction({ ...args, action: "schema" }),
823
+ pm_config: (args) => runAction({ ...args, action: "config" }),
1017
824
  pm_plan: (args) => runAction({ ...args, action: "plan" }),
1018
825
  };
1019
826
  function resultContent(result, warnings) {
@@ -1060,9 +867,10 @@ export async function handleRequest(request) {
1060
867
  serverInfo: { name: "pm-mcp", version: PM_MCP_SERVER_VERSION },
1061
868
  instructions: "You have access to native pm CLI tools for git-based project management. " +
1062
869
  "Use pm_context or pm_search before creating new work. " +
1063
- "Prefer narrow tools (pm_context, pm_list, pm_get, pm_search, pm_create, pm_copy, pm_update, pm_claim, pm_release, pm_close, pm_comments, pm_files, pm_docs, pm_notes, pm_learnings, pm_deps, pm_test, pm_validate, pm_health, pm_contracts, pm_plan) over pm_run when they cover the operation. " +
870
+ "Prefer narrow tools (pm_context, pm_list, pm_get, pm_search, pm_create, pm_copy, pm_update, pm_append, pm_claim, pm_release, pm_close, pm_comments, pm_files, pm_docs, pm_notes, pm_learnings, pm_deps, pm_test, pm_validate, pm_health, pm_contracts, pm_schema, pm_config, pm_plan) over pm_run when they cover the operation. " +
1064
871
  "Use pm_plan for agent harness Plan workflows: it provides Codex/Claude/Cursor-style planning with durable steps, dependencies, decisions, discoveries, validation, and materialization. " +
1065
- "Use pm_run with an explicit action for package-owned operations (calendar/templates/guide/dedupe-audit/normalize/reindex/comments-audit/completion/test-runs-list/test-runs-status/test-runs-logs/test-runs-stop/test-runs-resume), plus activity, aggregate, history, stats, append, test-all, and gc. " +
872
+ "Use pm_schema and pm_config for workspace configuration: pm_schema manages custom item types/statuses and pm_config reads or writes settings keys. " +
873
+ "Use pm_run with an explicit action for package-owned operations (calendar/templates/guide/dedupe-audit/normalize/reindex/comments-audit/completion/test-runs-list/test-runs-status/test-runs-logs/test-runs-stop/test-runs-resume), plus activity, aggregate, history, stats, test-all, and gc. " +
1066
874
  "Use history-redact for audited history-stream redaction workflows, history-repair to re-anchor a drifted history chain, and history-compact to checkpoint/prune long history streams while preserving replay integrity. " +
1067
875
  "Set author to 'claude-code-agent' on all mutations. " +
1068
876
  "Do not pass path during real repository tracking — only pass path for sandbox or test runs.",
@@ -1158,4 +966,4 @@ if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
1158
966
  startMcpServer();
1159
967
  }
1160
968
  //# sourceMappingURL=server.js.map
1161
- //# debugId=c65aa3d0-c69f-561b-8e23-939348167e21
969
+ //# debugId=e3feb52b-3154-5b9c-85ec-f0639c808233