@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +44 -0
- package/README.md +1 -1
- package/dist/cli/bootstrap-args.d.ts +11 -0
- package/dist/cli/bootstrap-args.js +88 -4
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commands/completion.js +20 -8
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/contracts.d.ts +2 -0
- package/dist/cli/commands/contracts.js +9 -2
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.js +6 -3
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/docs.d.ts +2 -0
- package/dist/cli/commands/docs.js +2 -2
- package/dist/cli/commands/docs.js.map +1 -1
- package/dist/cli/commands/files.d.ts +2 -0
- package/dist/cli/commands/files.js +2 -2
- package/dist/cli/commands/files.js.map +1 -1
- package/dist/cli/commands/health.d.ts +1 -1
- package/dist/cli/commands/health.js +77 -2
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-repair.d.ts +36 -0
- package/dist/cli/commands/history-repair.js +68 -3
- package/dist/cli/commands/history-repair.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -1
- package/dist/cli/commands/index.js +3 -3
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/linked-artifacts.d.ts +18 -0
- package/dist/cli/commands/linked-artifacts.js +26 -3
- package/dist/cli/commands/linked-artifacts.js.map +1 -1
- package/dist/cli/commands/plan.d.ts +6 -0
- package/dist/cli/commands/plan.js +93 -32
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +20 -0
- package/dist/cli/commands/validate.js +292 -28
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.d.ts +8 -0
- package/dist/cli/error-guidance.js +102 -2
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/help-content.js +7 -3
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/register-mutation.js +47 -16
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +10 -2
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +16 -16
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli-bundle/chunks/{activity-W6TS5F2L.js → activity-XADJOG6G.js} +11 -11
- package/dist/cli-bundle/chunks/activity-XZIUPGZH.js +16 -0
- package/dist/cli-bundle/chunks/{aggregate-UK2WJ4Z3.js → aggregate-6OTS3AOO.js} +10 -10
- package/dist/cli-bundle/chunks/{aggregate-NNJLKGEK.js → aggregate-OD36DJU5.js} +10 -10
- package/dist/cli-bundle/chunks/{append-DHGTLUZW.js → append-JYWO4P7W.js} +8 -8
- package/dist/cli-bundle/chunks/{append-7BS36Z2L.js → append-KG55G7S3.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-GF5XIBUH.js → chunk-35P4GT6E.js} +111 -10
- package/dist/cli-bundle/chunks/chunk-35P4GT6E.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-A6XVYNQJ.js → chunk-37CYVF73.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-XRE4CTNP.js → chunk-3KLPFWZ4.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-WSWOQP3Z.js → chunk-4HFU4UO2.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-UNH3KSHG.js → chunk-4JCSYR6F.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-73PSHEMT.js → chunk-4YFAGDRH.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-7GYMMDDW.js → chunk-5SCT2JCT.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-Q6PSD5DZ.js → chunk-73ZPG2I3.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-XH6RA5A5.js → chunk-7AMK6DOW.js} +15 -15
- package/dist/cli-bundle/chunks/{chunk-XH6RA5A5.js.map → chunk-7AMK6DOW.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-CTW7QAHM.js → chunk-7IYFN5R7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-OSGWBWLK.js → chunk-7UGSRQCL.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-WNMRICXH.js → chunk-A6LXQFO7.js} +4 -3
- package/dist/cli-bundle/chunks/chunk-A6LXQFO7.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-UDWUDUJI.js → chunk-ATEES5SX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-2MKBPWMK.js → chunk-AVGHVVF7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-ZH7C7ZVX.js → chunk-AX4GEVQC.js} +14 -14
- package/dist/cli-bundle/chunks/{chunk-ZH7C7ZVX.js.map → chunk-AX4GEVQC.js.map} +2 -2
- package/dist/cli-bundle/chunks/chunk-C6SAP27O.js +187 -0
- package/dist/cli-bundle/chunks/chunk-C6SAP27O.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-344GDQTH.js → chunk-CCX4RSYZ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-6KQS23TX.js → chunk-CW6E4NAT.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-K45NAJV2.js → chunk-DY6C42S6.js} +9 -9
- package/dist/cli-bundle/chunks/chunk-EKS6O2IR.js +217 -0
- package/dist/cli-bundle/chunks/chunk-EKS6O2IR.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ANVZCNL5.js → chunk-ESANVZF4.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-6OSG3EMX.js → chunk-EWFY7SLA.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-DMDEC4QP.js → chunk-F75JSIOZ.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-TALBUVWF.js → chunk-FDH2X65L.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-OQGJSCZZ.js → chunk-FY4SPXSC.js} +3 -2
- package/dist/cli-bundle/chunks/chunk-FY4SPXSC.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TZLGCTA5.js → chunk-GKIZW7SM.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-UMWF6ZAS.js → chunk-GWZSYR6X.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KHBRV5JU.js → chunk-HGLC63AU.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-CMEHZD6G.js → chunk-HHHJ2GI3.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-MF6KSSMF.js → chunk-HI7STVF2.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-IEQ3N7WP.js → chunk-I2IJY2NL.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-O64EYNHF.js → chunk-I53JBTJW.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-K7SXBA75.js → chunk-I7NYDZDV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-WBU257Z4.js → chunk-IGVJRZ6H.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-7TW64BS5.js → chunk-IUKD4W6Z.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-DTRIVUTN.js → chunk-KBPQHXWG.js} +21 -8
- package/dist/cli-bundle/chunks/chunk-KBPQHXWG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OVNSQHDG.js → chunk-KWAXVAXX.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-WWEFBBVF.js → chunk-L5EPZQIC.js} +12 -12
- package/dist/cli-bundle/chunks/chunk-NAWVUHXH.js +220 -0
- package/dist/cli-bundle/chunks/chunk-NAWVUHXH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-6ADVKPVV.js → chunk-OASDW5UI.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-EIS32UA4.js → chunk-OLKBSY4N.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-X3IPJU2O.js → chunk-P5BJOMBB.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-LYL32FT6.js → chunk-P5U5EOMA.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-EAQLLID6.js → chunk-PNYAAB4S.js} +21 -188
- package/dist/cli-bundle/chunks/chunk-PNYAAB4S.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-TV6FZGVK.js → chunk-QJMGRZO2.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-KMMUDSSB.js → chunk-QKW5D45B.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-4H2NDEGJ.js → chunk-QNJSITCX.js} +7 -7
- package/dist/cli-bundle/chunks/chunk-R2OUQVBK.js +190 -0
- package/dist/cli-bundle/chunks/chunk-R2OUQVBK.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-XSCGU4WT.js → chunk-R4VWYWRN.js} +19 -193
- package/dist/cli-bundle/chunks/chunk-R4VWYWRN.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-VSS3CSTF.js → chunk-RXAP6JL5.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-3VTWCBXL.js → chunk-S26FESD4.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-DEYNERFX.js → chunk-S2ZLDYGS.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-QGIWURY3.js → chunk-SO55HRA5.js} +12 -12
- package/dist/cli-bundle/chunks/{chunk-F2PVV7IX.js → chunk-SXKNJPQ7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-5OMABP7I.js → chunk-TK5VZFHY.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-UY26RIBR.js → chunk-TNAP7EJX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QJ2OIEOC.js → chunk-UIG4TW2H.js} +111 -10
- package/dist/cli-bundle/chunks/chunk-UIG4TW2H.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SNASEDXB.js → chunk-UUWGCWBU.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-6N46IM44.js → chunk-VAOUX6TK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-X5YC5DZM.js → chunk-VFUZV5EB.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-I2FM2SMO.js → chunk-VPEAS7PS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-7DUVDW7C.js → chunk-VSRZRLG3.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-GP6SHEAI.js → chunk-WPDMBIX6.js} +20 -7
- package/dist/cli-bundle/chunks/chunk-WPDMBIX6.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PYULT32I.js → chunk-WUNFKP7M.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LUJQJR7G.js → chunk-XJDGS74Y.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-TXWMLDMG.js → chunk-XMBI6TNW.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-4CYHWHZU.js → chunk-XTKJSVWH.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-T6QLB34N.js → chunk-XUC4C4PT.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-KRZQGRVL.js → chunk-XWMF3POR.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-OROMGSBP.js → chunk-Y3YKK7CY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-D6JZBUZ6.js → chunk-YW6Q3RYZ.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-GRHPU6EM.js → chunk-ZLMIWZUG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5HH6QRH5.js → chunk-ZMW77VWV.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-BE5G7HEL.js → chunk-ZYNJNPYD.js} +4 -4
- package/dist/cli-bundle/chunks/{claim-3TY5LE54.js → claim-2RDYMCTP.js} +10 -10
- package/dist/cli-bundle/chunks/{claim-LM4YY6QQ.js → claim-MJ7DZFC3.js} +10 -10
- package/dist/cli-bundle/chunks/close-4FMAPEMY.js +13 -0
- package/dist/cli-bundle/chunks/{close-CSD4LEMT.js → close-XLEKIQSW.js} +8 -8
- package/dist/cli-bundle/chunks/{close-many-B5SHDX6W.js → close-many-AOD4HSAZ.js} +15 -15
- package/dist/cli-bundle/chunks/{close-many-WRXB5KVY.js → close-many-XKAQY5CQ.js} +15 -15
- package/dist/cli-bundle/chunks/{comments-BDDEK3VW.js → comments-B4RWWDJT.js} +10 -10
- package/dist/cli-bundle/chunks/{comments-A5ALOYTG.js → comments-RN5TG4ZN.js} +10 -10
- package/dist/cli-bundle/chunks/{config-W2NHDNQT.js → config-3JXJ3XZ7.js} +8 -8
- package/dist/cli-bundle/chunks/{config-YUYBMJOW.js → config-FZ4UDC4B.js} +8 -8
- package/dist/cli-bundle/chunks/{context-LRJ74NSU.js → context-L36PIN35.js} +13 -13
- package/dist/cli-bundle/chunks/{context-R2QLOJCK.js → context-QBPO3BFM.js} +13 -13
- package/dist/cli-bundle/chunks/{contracts-HJHR4NCD.js → contracts-2G66IGIA.js} +309 -6
- package/dist/cli-bundle/chunks/contracts-2G66IGIA.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-47X7RYUF.js → contracts-PJCHYSO5.js} +315 -5
- package/dist/cli-bundle/chunks/contracts-PJCHYSO5.js.map +7 -0
- package/dist/cli-bundle/chunks/{copy-P4UVYZ7M.js → copy-ALU5WMHA.js} +7 -7
- package/dist/cli-bundle/chunks/{copy-B7HFOWFB.js → copy-FWIVTLBO.js} +7 -7
- package/dist/cli-bundle/chunks/{create-5ERJF64D.js → create-5433DP3G.js} +13 -13
- package/dist/cli-bundle/chunks/create-VWLWS34Z.js +27 -0
- package/dist/cli-bundle/chunks/{delete-LX3LGBCH.js → delete-IYTIYAJS.js} +7 -7
- package/dist/cli-bundle/chunks/{delete-S3WVK6LP.js → delete-Y2SGJBGY.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-YSM4LZQD.js → deps-6TSPOSGU.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-GWSNH7OZ.js → deps-CZ4PTVXU.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-TG6JMVMY.js → docs-I3BAF5WH.js} +11 -11
- package/dist/cli-bundle/chunks/docs-I3BAF5WH.js.map +1 -0
- package/dist/cli-bundle/chunks/{docs-7RYFBHQD.js → docs-MXLGZUIT.js} +10 -10
- package/dist/cli-bundle/chunks/docs-MXLGZUIT.js.map +7 -0
- package/dist/cli-bundle/chunks/{extension-R3LUKMX7.js → extension-Q34OEWO5.js} +5 -5
- package/dist/cli-bundle/chunks/{extension-VNMRKIHI.js → extension-WH2FOIOZ.js} +5 -5
- package/dist/cli-bundle/chunks/{files-KAKU57OT.js → files-FYP3MDPX.js} +10 -10
- package/dist/cli-bundle/chunks/files-FYP3MDPX.js.map +7 -0
- package/dist/cli-bundle/chunks/{files-QB3EYPMO.js → files-GUXUM2MB.js} +11 -11
- package/dist/cli-bundle/chunks/files-GUXUM2MB.js.map +1 -0
- package/dist/cli-bundle/chunks/{gc-KNUPLPSW.js → gc-FENB2ESG.js} +14 -176
- package/dist/cli-bundle/chunks/gc-FENB2ESG.js.map +1 -0
- package/dist/cli-bundle/chunks/{gc-B747VM4M.js → gc-KGQG66SA.js} +12 -181
- package/dist/cli-bundle/chunks/gc-KGQG66SA.js.map +7 -0
- package/dist/cli-bundle/chunks/{get-GMGLIQ5I.js → get-PCHS7RA6.js} +11 -11
- package/dist/cli-bundle/chunks/{get-SBL6NHYQ.js → get-QARTE6BL.js} +11 -11
- package/dist/cli-bundle/chunks/{health-WWZJ5KJS.js → health-7MTXAVR2.js} +82 -15
- package/dist/cli-bundle/chunks/health-7MTXAVR2.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-IG43Z4KL.js → health-E4D7KGHD.js} +83 -16
- package/dist/cli-bundle/chunks/health-E4D7KGHD.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-XCWRXBXC.js → history-7WUAEWHW.js} +10 -10
- package/dist/cli-bundle/chunks/history-L2FQFRTU.js +20 -0
- package/dist/cli-bundle/chunks/{history-compact-KICKUCR7.js → history-compact-3EJ3L2O7.js} +11 -11
- package/dist/cli-bundle/chunks/{history-compact-IDH7E7VN.js → history-compact-LW27IPFK.js} +11 -11
- package/dist/cli-bundle/chunks/{history-redact-JJWH3QWK.js → history-redact-G72A4EJ4.js} +11 -11
- package/dist/cli-bundle/chunks/history-redact-QWQCX5DZ.js +19 -0
- package/dist/cli-bundle/chunks/{history-repair-N5HXKJOI.js → history-repair-OSQOKJ3E.js} +71 -13
- package/dist/cli-bundle/chunks/history-repair-OSQOKJ3E.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-repair-7HWBZKXN.js → history-repair-SBK7P34V.js} +72 -14
- package/dist/cli-bundle/chunks/history-repair-SBK7P34V.js.map +1 -0
- package/dist/cli-bundle/chunks/init-4BKRHGWW.js +17 -0
- package/dist/cli-bundle/chunks/{init-OQA3TWIS.js → init-S5WEGUJY.js} +9 -9
- package/dist/cli-bundle/chunks/{learnings-L7VQUSVI.js → learnings-HQXSSKZ5.js} +10 -10
- package/dist/cli-bundle/chunks/{learnings-Z4GAIZQ5.js → learnings-XK3P4ZDR.js} +10 -10
- package/dist/cli-bundle/chunks/{list-W5ROBC5U.js → list-6CL3XFT6.js} +10 -10
- package/dist/cli-bundle/chunks/list-BYNN4ZEO.js +19 -0
- package/dist/cli-bundle/chunks/{notes-JJDOEDFK.js → notes-5T6P7C5V.js} +10 -10
- package/dist/cli-bundle/chunks/{notes-SDCK7BEN.js → notes-U5FZCSBT.js} +10 -10
- package/dist/cli-bundle/chunks/{plan-H5HYHMBB.js → plan-2YTQYWGM.js} +63 -23
- package/dist/cli-bundle/chunks/plan-2YTQYWGM.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-W2B5RYR3.js → plan-7IVSICR6.js} +62 -22
- package/dist/cli-bundle/chunks/plan-7IVSICR6.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-QGRFMDWA.js → register-list-query-4UPMHONX.js} +18 -18
- package/dist/cli-bundle/chunks/{register-list-query-V4S23735.js → register-list-query-7VOW2C3W.js} +18 -18
- package/dist/cli-bundle/chunks/{register-mutation-ZPZNJXSA.js → register-mutation-FARSGYRD.js} +64 -47
- package/dist/cli-bundle/chunks/{register-mutation-ZPZNJXSA.js.map → register-mutation-FARSGYRD.js.map} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-I57PLUHA.js → register-mutation-LJDNVREU.js} +65 -48
- package/dist/cli-bundle/chunks/{register-mutation-I57PLUHA.js.map → register-mutation-LJDNVREU.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-operations-KAMLXAF5.js → register-operations-FFTYAL42.js} +38 -34
- package/dist/cli-bundle/chunks/register-operations-FFTYAL42.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-YEN4YEZ2.js → register-operations-HCJKDUA6.js} +37 -33
- package/dist/cli-bundle/chunks/{register-operations-YEN4YEZ2.js.map → register-operations-HCJKDUA6.js.map} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-BZ3TNE3G.js → register-setup-6AVIUOCC.js} +31 -31
- package/dist/cli-bundle/chunks/register-setup-6AVIUOCC.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-WLFL3OUF.js → register-setup-KVNLO5OJ.js} +30 -30
- package/dist/cli-bundle/chunks/register-setup-KVNLO5OJ.js.map +7 -0
- package/dist/cli-bundle/chunks/restore-CHIOQAQL.js +17 -0
- package/dist/cli-bundle/chunks/{restore-RGFSPG4K.js → restore-M6AFHMV4.js} +11 -11
- package/dist/cli-bundle/chunks/{schema-CCDU3RLC.js → schema-76HDZJCC.js} +8 -8
- package/dist/cli-bundle/chunks/{schema-KZASL323.js → schema-AINZ2IMM.js} +8 -8
- package/dist/cli-bundle/chunks/{search-7KSOLI2E.js → search-JMLFQEPJ.js} +10 -10
- package/dist/cli-bundle/chunks/{search-DTL7CO22.js → search-NL3TSCYB.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-QNV7B2CE.js → stats-BKXCBIGT.js} +7 -7
- package/dist/cli-bundle/chunks/{stats-IOXQMGI6.js → stats-UBD56TGK.js} +7 -7
- package/dist/cli-bundle/chunks/{telemetry-NHR5RFXT.js → telemetry-N454RHG5.js} +4 -4
- package/dist/cli-bundle/chunks/{telemetry-IV5C6JOM.js → telemetry-ZJXK3H7X.js} +4 -4
- package/dist/cli-bundle/chunks/{test-PIL2CEEB.js → test-BQAKIXAT.js} +14 -14
- package/dist/cli-bundle/chunks/test-O74JFUH5.js +32 -0
- package/dist/cli-bundle/chunks/{test-all-MFN4MYCV.js → test-all-7LV3I6S5.js} +14 -14
- package/dist/cli-bundle/chunks/{test-all-GRLYHBNP.js → test-all-TDYCCBA4.js} +14 -14
- package/dist/cli-bundle/chunks/{test-runs-7WCSC3TY.js → test-runs-E64M6XS3.js} +5 -5
- package/dist/cli-bundle/chunks/{test-runs-7LRFWWCA.js → test-runs-LXZLULCI.js} +5 -5
- package/dist/cli-bundle/chunks/update-36JM7YZT.js +21 -0
- package/dist/cli-bundle/chunks/update-I246PCLO.js +25 -0
- package/dist/cli-bundle/chunks/{update-many-UYMTVF42.js → update-many-F4IKDWZB.js} +22 -22
- package/dist/cli-bundle/chunks/{update-many-LOTAYUTN.js → update-many-NTWZ5YT3.js} +22 -22
- package/dist/cli-bundle/chunks/{upgrade-ZZSC7CLV.js → upgrade-37F7JKES.js} +5 -5
- package/dist/cli-bundle/chunks/{upgrade-LT2MLLPS.js → upgrade-L32JA4TZ.js} +5 -5
- package/dist/cli-bundle/chunks/{validate-IQIQSKUX.js → validate-46KCRHL7.js} +462 -50
- package/dist/cli-bundle/chunks/validate-46KCRHL7.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-3XRORNMP.js → validate-CRFMPTYD.js} +482 -49
- package/dist/cli-bundle/chunks/validate-CRFMPTYD.js.map +7 -0
- package/dist/cli-bundle/main.js +180 -25
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/core/diagnostics/remediation.js +19 -6
- package/dist/core/diagnostics/remediation.js.map +1 -1
- package/dist/core/lock/lock-gc.d.ts +31 -0
- package/dist/core/lock/lock-gc.js +120 -62
- package/dist/core/lock/lock-gc.js.map +1 -1
- package/dist/core/output/query-summary.d.ts +31 -0
- package/dist/core/output/query-summary.js +62 -0
- package/dist/core/output/query-summary.js.map +1 -0
- package/dist/core/shared/constants.js +3 -2
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/telemetry/consent.js +18 -3
- package/dist/core/telemetry/consent.js.map +1 -1
- package/dist/core/validate/fix-planning.d.ts +130 -0
- package/dist/core/validate/fix-planning.js +202 -0
- package/dist/core/validate/fix-planning.js.map +1 -0
- package/dist/core/validate/missing-by-type.d.ts +21 -0
- package/dist/core/validate/missing-by-type.js +39 -0
- package/dist/core/validate/missing-by-type.js.map +1 -0
- package/dist/core/validate/stale-file-classification.d.ts +41 -0
- package/dist/core/validate/stale-file-classification.js +73 -0
- package/dist/core/validate/stale-file-classification.js.map +1 -0
- package/dist/mcp/server.js +74 -266
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-definitions.d.ts +27 -0
- package/dist/mcp/tool-definitions.js +330 -0
- package/dist/mcp/tool-definitions.js.map +1 -0
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +38 -2
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +6 -1
- package/dist/sdk/cli-contracts.js +74 -7
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/docs/AGENT_GUIDE.md +7 -2
- package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +25 -2
- package/marketplace.json +1 -1
- package/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/README.md +7 -3
- package/plugins/pm-claude/commands/pm-init.md +1 -1
- package/plugins/pm-codex/README.md +2 -2
- package/dist/cli-bundle/chunks/activity-5QLX6DHN.js +0 -16
- package/dist/cli-bundle/chunks/chunk-DTRIVUTN.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-EAQLLID6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-GF5XIBUH.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-GP6SHEAI.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-OQGJSCZZ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-QJ2OIEOC.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WNMRICXH.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-XSCGU4WT.js.map +0 -7
- package/dist/cli-bundle/chunks/close-SIQCDOBR.js +0 -13
- package/dist/cli-bundle/chunks/contracts-47X7RYUF.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-HJHR4NCD.js.map +0 -1
- package/dist/cli-bundle/chunks/create-TXNRPS4K.js +0 -27
- package/dist/cli-bundle/chunks/docs-7RYFBHQD.js.map +0 -7
- package/dist/cli-bundle/chunks/docs-TG6JMVMY.js.map +0 -1
- package/dist/cli-bundle/chunks/files-KAKU57OT.js.map +0 -7
- package/dist/cli-bundle/chunks/files-QB3EYPMO.js.map +0 -1
- package/dist/cli-bundle/chunks/gc-B747VM4M.js.map +0 -7
- package/dist/cli-bundle/chunks/gc-KNUPLPSW.js.map +0 -1
- package/dist/cli-bundle/chunks/health-IG43Z4KL.js.map +0 -1
- package/dist/cli-bundle/chunks/health-WWZJ5KJS.js.map +0 -7
- package/dist/cli-bundle/chunks/history-6UKSZTRT.js +0 -20
- package/dist/cli-bundle/chunks/history-redact-HKYBTK6X.js +0 -19
- package/dist/cli-bundle/chunks/history-repair-7HWBZKXN.js.map +0 -1
- package/dist/cli-bundle/chunks/history-repair-N5HXKJOI.js.map +0 -7
- package/dist/cli-bundle/chunks/init-27JLDUO2.js +0 -17
- package/dist/cli-bundle/chunks/list-6U3CJVXS.js +0 -19
- package/dist/cli-bundle/chunks/plan-H5HYHMBB.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-W2B5RYR3.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-KAMLXAF5.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-BZ3TNE3G.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-WLFL3OUF.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-GNI2W5CN.js +0 -17
- package/dist/cli-bundle/chunks/test-4Z37CXW4.js +0 -32
- package/dist/cli-bundle/chunks/update-I4G34LKJ.js +0 -21
- package/dist/cli-bundle/chunks/update-VI5DBZ3G.js +0 -25
- package/dist/cli-bundle/chunks/validate-3XRORNMP.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-IQIQSKUX.js.map +0 -1
- /package/dist/cli-bundle/chunks/{activity-W6TS5F2L.js.map → activity-XADJOG6G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-5QLX6DHN.js.map → activity-XZIUPGZH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-UK2WJ4Z3.js.map → aggregate-6OTS3AOO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-NNJLKGEK.js.map → aggregate-OD36DJU5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-DHGTLUZW.js.map → append-JYWO4P7W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-7BS36Z2L.js.map → append-KG55G7S3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A6XVYNQJ.js.map → chunk-37CYVF73.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XRE4CTNP.js.map → chunk-3KLPFWZ4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WSWOQP3Z.js.map → chunk-4HFU4UO2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UNH3KSHG.js.map → chunk-4JCSYR6F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-73PSHEMT.js.map → chunk-4YFAGDRH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7GYMMDDW.js.map → chunk-5SCT2JCT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Q6PSD5DZ.js.map → chunk-73ZPG2I3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CTW7QAHM.js.map → chunk-7IYFN5R7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OSGWBWLK.js.map → chunk-7UGSRQCL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UDWUDUJI.js.map → chunk-ATEES5SX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2MKBPWMK.js.map → chunk-AVGHVVF7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-344GDQTH.js.map → chunk-CCX4RSYZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6KQS23TX.js.map → chunk-CW6E4NAT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K45NAJV2.js.map → chunk-DY6C42S6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ANVZCNL5.js.map → chunk-ESANVZF4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6OSG3EMX.js.map → chunk-EWFY7SLA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DMDEC4QP.js.map → chunk-F75JSIOZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TALBUVWF.js.map → chunk-FDH2X65L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TZLGCTA5.js.map → chunk-GKIZW7SM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UMWF6ZAS.js.map → chunk-GWZSYR6X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KHBRV5JU.js.map → chunk-HGLC63AU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CMEHZD6G.js.map → chunk-HHHJ2GI3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MF6KSSMF.js.map → chunk-HI7STVF2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IEQ3N7WP.js.map → chunk-I2IJY2NL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-O64EYNHF.js.map → chunk-I53JBTJW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K7SXBA75.js.map → chunk-I7NYDZDV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WBU257Z4.js.map → chunk-IGVJRZ6H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7TW64BS5.js.map → chunk-IUKD4W6Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OVNSQHDG.js.map → chunk-KWAXVAXX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WWEFBBVF.js.map → chunk-L5EPZQIC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6ADVKPVV.js.map → chunk-OASDW5UI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EIS32UA4.js.map → chunk-OLKBSY4N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-X3IPJU2O.js.map → chunk-P5BJOMBB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LYL32FT6.js.map → chunk-P5U5EOMA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TV6FZGVK.js.map → chunk-QJMGRZO2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KMMUDSSB.js.map → chunk-QKW5D45B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4H2NDEGJ.js.map → chunk-QNJSITCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VSS3CSTF.js.map → chunk-RXAP6JL5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3VTWCBXL.js.map → chunk-S26FESD4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DEYNERFX.js.map → chunk-S2ZLDYGS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QGIWURY3.js.map → chunk-SO55HRA5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-F2PVV7IX.js.map → chunk-SXKNJPQ7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5OMABP7I.js.map → chunk-TK5VZFHY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UY26RIBR.js.map → chunk-TNAP7EJX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SNASEDXB.js.map → chunk-UUWGCWBU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6N46IM44.js.map → chunk-VAOUX6TK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-X5YC5DZM.js.map → chunk-VFUZV5EB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-I2FM2SMO.js.map → chunk-VPEAS7PS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7DUVDW7C.js.map → chunk-VSRZRLG3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PYULT32I.js.map → chunk-WUNFKP7M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LUJQJR7G.js.map → chunk-XJDGS74Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TXWMLDMG.js.map → chunk-XMBI6TNW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4CYHWHZU.js.map → chunk-XTKJSVWH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-T6QLB34N.js.map → chunk-XUC4C4PT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KRZQGRVL.js.map → chunk-XWMF3POR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OROMGSBP.js.map → chunk-Y3YKK7CY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D6JZBUZ6.js.map → chunk-YW6Q3RYZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GRHPU6EM.js.map → chunk-ZLMIWZUG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5HH6QRH5.js.map → chunk-ZMW77VWV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BE5G7HEL.js.map → chunk-ZYNJNPYD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-3TY5LE54.js.map → claim-2RDYMCTP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-LM4YY6QQ.js.map → claim-MJ7DZFC3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-SIQCDOBR.js.map → close-4FMAPEMY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-CSD4LEMT.js.map → close-XLEKIQSW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-B5SHDX6W.js.map → close-many-AOD4HSAZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-WRXB5KVY.js.map → close-many-XKAQY5CQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-BDDEK3VW.js.map → comments-B4RWWDJT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-A5ALOYTG.js.map → comments-RN5TG4ZN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-W2NHDNQT.js.map → config-3JXJ3XZ7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-YUYBMJOW.js.map → config-FZ4UDC4B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-LRJ74NSU.js.map → context-L36PIN35.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-R2QLOJCK.js.map → context-QBPO3BFM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-P4UVYZ7M.js.map → copy-ALU5WMHA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-B7HFOWFB.js.map → copy-FWIVTLBO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-5ERJF64D.js.map → create-5433DP3G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-TXNRPS4K.js.map → create-VWLWS34Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-LX3LGBCH.js.map → delete-IYTIYAJS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-S3WVK6LP.js.map → delete-Y2SGJBGY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-YSM4LZQD.js.map → deps-6TSPOSGU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-GWSNH7OZ.js.map → deps-CZ4PTVXU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-R3LUKMX7.js.map → extension-Q34OEWO5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-VNMRKIHI.js.map → extension-WH2FOIOZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-GMGLIQ5I.js.map → get-PCHS7RA6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-SBL6NHYQ.js.map → get-QARTE6BL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-XCWRXBXC.js.map → history-7WUAEWHW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-6UKSZTRT.js.map → history-L2FQFRTU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-KICKUCR7.js.map → history-compact-3EJ3L2O7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-IDH7E7VN.js.map → history-compact-LW27IPFK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-JJWH3QWK.js.map → history-redact-G72A4EJ4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-HKYBTK6X.js.map → history-redact-QWQCX5DZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-27JLDUO2.js.map → init-4BKRHGWW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-OQA3TWIS.js.map → init-S5WEGUJY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-L7VQUSVI.js.map → learnings-HQXSSKZ5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-Z4GAIZQ5.js.map → learnings-XK3P4ZDR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-W5ROBC5U.js.map → list-6CL3XFT6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-6U3CJVXS.js.map → list-BYNN4ZEO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-JJDOEDFK.js.map → notes-5T6P7C5V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-SDCK7BEN.js.map → notes-U5FZCSBT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-list-query-QGRFMDWA.js.map → register-list-query-4UPMHONX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-list-query-V4S23735.js.map → register-list-query-7VOW2C3W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-GNI2W5CN.js.map → restore-CHIOQAQL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-RGFSPG4K.js.map → restore-M6AFHMV4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-CCDU3RLC.js.map → schema-76HDZJCC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-KZASL323.js.map → schema-AINZ2IMM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-7KSOLI2E.js.map → search-JMLFQEPJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-DTL7CO22.js.map → search-NL3TSCYB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-QNV7B2CE.js.map → stats-BKXCBIGT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-IOXQMGI6.js.map → stats-UBD56TGK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-NHR5RFXT.js.map → telemetry-N454RHG5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-IV5C6JOM.js.map → telemetry-ZJXK3H7X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-PIL2CEEB.js.map → test-BQAKIXAT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-4Z37CXW4.js.map → test-O74JFUH5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-MFN4MYCV.js.map → test-all-7LV3I6S5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-GRLYHBNP.js.map → test-all-TDYCCBA4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-7WCSC3TY.js.map → test-runs-E64M6XS3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-7LRFWWCA.js.map → test-runs-LXZLULCI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-I4G34LKJ.js.map → update-36JM7YZT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-VI5DBZ3G.js.map → update-I246PCLO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-UYMTVF42.js.map → update-many-F4IKDWZB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-LOTAYUTN.js.map → update-many-NTWZ5YT3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-ZZSC7CLV.js.map → upgrade-37F7JKES.js.map} +0 -0
- /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"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -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]="
|
|
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 {
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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=
|
|
969
|
+
//# debugId=e3feb52b-3154-5b9c-85ec-f0639c808233
|