@unbrained/pm-cli 2026.5.31 → 2026.6.6
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/CHANGELOG.md +167 -0
- package/CONTRIBUTING.md +1 -0
- package/README.md +12 -4
- package/dist/cli/argv-utils.js +7 -3
- package/dist/cli/argv-utils.js.map +1 -1
- package/dist/cli/bootstrap-args.d.ts +1 -0
- package/dist/cli/bootstrap-args.js +23 -3
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commands/calendar.js +17 -3
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/close-many.d.ts +63 -0
- package/dist/cli/commands/close-many.js +302 -0
- package/dist/cli/commands/close-many.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +1 -0
- package/dist/cli/commands/completion.js +260 -32
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.d.ts +4 -4
- package/dist/cli/commands/config.js +115 -3
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/contracts.js +193 -162
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.d.ts +1 -0
- package/dist/cli/commands/create.js +77 -114
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/extension/doctor.d.ts +12 -0
- package/dist/cli/commands/extension/doctor.js +97 -2
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.js +49 -48
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension.js +51 -23
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/gc.d.ts +8 -1
- package/dist/cli/commands/gc.js +26 -3
- package/dist/cli/commands/gc.js.map +1 -1
- package/dist/cli/commands/get.js +7 -7
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/health.js +51 -3
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history.d.ts +4 -1
- package/dist/cli/commands/history.js +12 -24
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/index.d.ts +3 -1
- package/dist/cli/commands/index.js +5 -3
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +10 -0
- package/dist/cli/commands/init.js +107 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list.d.ts +5 -0
- package/dist/cli/commands/list.js +58 -26
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/reindex.js +163 -47
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/repeatable-metadata-parsers.d.ts +15 -0
- package/dist/cli/commands/repeatable-metadata-parsers.js +120 -0
- package/dist/cli/commands/repeatable-metadata-parsers.js.map +1 -0
- package/dist/cli/commands/restore.js +25 -4
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.d.ts +122 -1
- package/dist/cli/commands/schema.js +536 -6
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/search.d.ts +1 -0
- package/dist/cli/commands/search.js +18 -4
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/stats.d.ts +8 -1
- package/dist/cli/commands/stats.js +18 -17
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/telemetry.d.ts +8 -0
- package/dist/cli/commands/telemetry.js +253 -0
- package/dist/cli/commands/telemetry.js.map +1 -0
- package/dist/cli/commands/test.js +4 -3
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +69 -140
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +2 -0
- package/dist/cli/commands/update.js +138 -119
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +1 -0
- package/dist/cli/commands/validate.js +63 -33
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +26 -3
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/help-content.js +91 -3
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/main.js +377 -23
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +14 -5
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +200 -28
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +31 -6
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +4 -2
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.js +31 -4
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/activity-CVXTCHYY.js +16 -0
- package/dist/cli-bundle/chunks/activity-JM6DTDND.js +20 -0
- package/dist/cli-bundle/chunks/activity-JM6DTDND.js.map +1 -0
- package/dist/cli-bundle/chunks/aggregate-GI7WSZPH.js +206 -0
- package/dist/cli-bundle/chunks/aggregate-GI7WSZPH.js.map +1 -0
- package/dist/cli-bundle/chunks/{aggregate-ADUOSFRO.js → aggregate-VNAHUNNF.js} +11 -11
- package/dist/cli-bundle/chunks/{append-JD2DETU7.js → append-7H5N64R2.js} +8 -9
- package/dist/cli-bundle/chunks/{append-JD2DETU7.js.map → append-7H5N64R2.js.map} +1 -1
- package/dist/cli-bundle/chunks/append-WMKRXKCE.js +69 -0
- package/dist/cli-bundle/chunks/append-WMKRXKCE.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-3M73P3G6.js → chunk-23YFZ3IG.js} +210 -132
- package/dist/cli-bundle/chunks/chunk-23YFZ3IG.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-2HVRUSQA.js +128 -0
- package/dist/cli-bundle/chunks/chunk-2HVRUSQA.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-2RSPZI5H.js +266 -0
- package/dist/cli-bundle/chunks/chunk-2RSPZI5H.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-2VBQ6ZXS.js +631 -0
- package/dist/cli-bundle/chunks/chunk-2VBQ6ZXS.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-2VVCGBNV.js +380 -0
- package/dist/cli-bundle/chunks/chunk-2VVCGBNV.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-3BWOVLTH.js +1664 -0
- package/dist/cli-bundle/chunks/chunk-3BWOVLTH.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6HT2F4TK.js → chunk-3FI4SEFT.js} +175 -54
- package/dist/cli-bundle/chunks/chunk-3FI4SEFT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JULRTHJQ.js → chunk-3LB74A67.js} +119 -6
- package/dist/cli-bundle/chunks/chunk-3LB74A67.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-3VAM3NNM.js +57 -0
- package/dist/cli-bundle/chunks/chunk-3VAM3NNM.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-4LL6TK5B.js +1832 -0
- package/dist/cli-bundle/chunks/chunk-4LL6TK5B.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-52MAOQ6J.js +422 -0
- package/dist/cli-bundle/chunks/chunk-52MAOQ6J.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-5FDATVEZ.js +412 -0
- package/dist/cli-bundle/chunks/chunk-5FDATVEZ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-5SFCOO6B.js +5622 -0
- package/dist/cli-bundle/chunks/chunk-5SFCOO6B.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-U7FMKRXH.js → chunk-6ER6DXH5.js} +37 -16
- package/dist/cli-bundle/chunks/chunk-6ER6DXH5.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-6P6GGMOG.js +218 -0
- package/dist/cli-bundle/chunks/chunk-6P6GGMOG.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-77GFDHGF.js +80 -0
- package/dist/cli-bundle/chunks/chunk-77GFDHGF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-MD7K4JYF.js → chunk-AO442XLN.js} +26 -15
- package/dist/cli-bundle/chunks/chunk-AO442XLN.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-AY43SBIN.js +751 -0
- package/dist/cli-bundle/chunks/chunk-AY43SBIN.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D7AOMPRH.js → chunk-BQHUILZS.js} +5 -5
- package/dist/cli-bundle/chunks/chunk-E5FJNAZA.js +242 -0
- package/dist/cli-bundle/chunks/chunk-E5FJNAZA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OGZEG5TT.js → chunk-ECCMVXGM.js} +164 -53
- package/dist/cli-bundle/chunks/chunk-ECCMVXGM.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-FRAUKRU2.js +182 -0
- package/dist/cli-bundle/chunks/chunk-FRAUKRU2.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-GCOQW437.js +130 -0
- package/dist/cli-bundle/chunks/chunk-GCOQW437.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-GGYWB3Y2.js +1340 -0
- package/dist/cli-bundle/chunks/chunk-GGYWB3Y2.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-G57E5D7T.js → chunk-GU2ZJ2VV.js} +5 -5
- package/dist/cli-bundle/chunks/chunk-GXSUPCBV.js +231 -0
- package/dist/cli-bundle/chunks/chunk-GXSUPCBV.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-HZGUAH22.js +76 -0
- package/dist/cli-bundle/chunks/chunk-HZGUAH22.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-I2HSTRJF.js +346 -0
- package/dist/cli-bundle/chunks/chunk-I2HSTRJF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-I6BNFU5X.js +140 -0
- package/dist/cli-bundle/chunks/chunk-I6BNFU5X.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JTWRXG4B.js → chunk-IJGCZSIQ.js} +251 -251
- package/dist/cli-bundle/chunks/chunk-IJGCZSIQ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-IOR7LGF4.js +1491 -0
- package/dist/cli-bundle/chunks/chunk-IOR7LGF4.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-IUV734HF.js +17 -0
- package/dist/cli-bundle/chunks/chunk-IUV734HF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-J27KIHTG.js +15 -0
- package/dist/cli-bundle/chunks/chunk-J27KIHTG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-AKOOMO3T.js → chunk-KAG77BY3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KBQY3YG5.js → chunk-KJ33AOCY.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WDPXDQFG.js → chunk-KJE2FOS4.js} +6 -4
- package/dist/cli-bundle/chunks/chunk-KJE2FOS4.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-KWU6HG75.js +3883 -0
- package/dist/cli-bundle/chunks/chunk-KWU6HG75.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-LB3RUL2N.js +1325 -0
- package/dist/cli-bundle/chunks/chunk-LB3RUL2N.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5HSEP75M.js → chunk-LCM63IXU.js} +18 -6
- package/dist/cli-bundle/chunks/chunk-LCM63IXU.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-LXYVKYMQ.js +24 -0
- package/dist/cli-bundle/chunks/chunk-LXYVKYMQ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-ME2YH6FN.js +182 -0
- package/dist/cli-bundle/chunks/chunk-ME2YH6FN.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-MITFDD35.js +1809 -0
- package/dist/cli-bundle/chunks/chunk-MITFDD35.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-WJ2NAC37.js → chunk-N7ACFE26.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-NUZ5HKR4.js +332 -0
- package/dist/cli-bundle/chunks/chunk-NUZ5HKR4.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7Y53ZJIQ.js → chunk-OVQCEJPG.js} +22 -3
- package/dist/cli-bundle/chunks/chunk-OVQCEJPG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PXUAZUUY.js → chunk-OZ7NSQHL.js} +12 -11
- package/dist/cli-bundle/chunks/chunk-OZ7NSQHL.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-P53TN6IA.js → chunk-PDDFYW4X.js} +35 -8
- package/dist/cli-bundle/chunks/chunk-PDDFYW4X.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-6YCV7WSL.js → chunk-PIU6RSL3.js} +10 -12
- package/dist/cli-bundle/chunks/{chunk-6YCV7WSL.js.map → chunk-PIU6RSL3.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-PO3GSVFV.js +338 -0
- package/dist/cli-bundle/chunks/chunk-PO3GSVFV.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-LRBOHPUE.js → chunk-PRJCELV4.js} +108 -21
- package/dist/cli-bundle/chunks/chunk-PRJCELV4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GN7IJPCD.js → chunk-PROOHX4K.js} +332 -32
- package/dist/cli-bundle/chunks/chunk-PROOHX4K.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-FQE6XZDB.js → chunk-Q7SPNHLW.js} +54 -32
- package/dist/cli-bundle/chunks/chunk-Q7SPNHLW.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PVNQLCIS.js → chunk-QO7EBBOM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-A7E7PUVX.js → chunk-R6UFP2GE.js} +7 -7
- package/dist/cli-bundle/chunks/chunk-RWPSOIEE.js +154 -0
- package/dist/cli-bundle/chunks/chunk-RWPSOIEE.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-RZN6VURO.js +119 -0
- package/dist/cli-bundle/chunks/chunk-RZN6VURO.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-SKJWX3QB.js +1501 -0
- package/dist/cli-bundle/chunks/chunk-SKJWX3QB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-CEFIVZPG.js → chunk-T3LC5LKB.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-TCD3R2PF.js +173 -0
- package/dist/cli-bundle/chunks/chunk-TCD3R2PF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-TPH5XEVD.js +2988 -0
- package/dist/cli-bundle/chunks/chunk-TPH5XEVD.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-LSXGH6NE.js → chunk-U5SXYXSY.js} +821 -200
- package/dist/cli-bundle/chunks/chunk-U5SXYXSY.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-UBOPJT3S.js +540 -0
- package/dist/cli-bundle/chunks/chunk-UBOPJT3S.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JFWUHHS2.js → chunk-UM2GBHS4.js} +5 -4
- package/dist/cli-bundle/chunks/chunk-W7XABV4H.js +454 -0
- package/dist/cli-bundle/chunks/chunk-W7XABV4H.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SEXQN4KL.js → chunk-WKY2IBOQ.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-WOPXVEZP.js +698 -0
- package/dist/cli-bundle/chunks/chunk-WOPXVEZP.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-WSMOSYRD.js +1704 -0
- package/dist/cli-bundle/chunks/chunk-WSMOSYRD.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-NGN7UV5K.js → chunk-XLTD2HN3.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-XSJCLN2R.js +131 -0
- package/dist/cli-bundle/chunks/chunk-XSJCLN2R.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js +53 -0
- package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BUPWJ3IJ.js → chunk-XTGLRY2Y.js} +484 -49
- package/dist/cli-bundle/chunks/chunk-XTGLRY2Y.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-L2FXEKDB.js → chunk-YL2DJGYS.js} +7 -7
- package/dist/cli-bundle/chunks/{claim-EE4TKKCV.js → claim-4DBF6RVG.js} +10 -11
- package/dist/cli-bundle/chunks/{claim-EE4TKKCV.js.map → claim-4DBF6RVG.js.map} +1 -1
- package/dist/cli-bundle/chunks/claim-X2P4IB7J.js +129 -0
- package/dist/cli-bundle/chunks/claim-X2P4IB7J.js.map +1 -0
- package/dist/cli-bundle/chunks/close-3HDWDA3L.js +13 -0
- package/dist/cli-bundle/chunks/close-PTYFA45H.js +17 -0
- package/dist/cli-bundle/chunks/close-PTYFA45H.js.map +1 -0
- package/dist/cli-bundle/chunks/close-many-7CGIDPTJ.js +314 -0
- package/dist/cli-bundle/chunks/close-many-7CGIDPTJ.js.map +7 -0
- package/dist/cli-bundle/chunks/close-many-ERFO6LHR.js +311 -0
- package/dist/cli-bundle/chunks/close-many-ERFO6LHR.js.map +1 -0
- package/dist/cli-bundle/chunks/comments-OONGABK5.js +100 -0
- package/dist/cli-bundle/chunks/comments-OONGABK5.js.map +1 -0
- package/dist/cli-bundle/chunks/{comments-AAKJQ6LW.js → comments-QKBYCWKD.js} +10 -11
- package/dist/cli-bundle/chunks/{comments-AAKJQ6LW.js.map → comments-QKBYCWKD.js.map} +1 -1
- package/dist/cli-bundle/chunks/config-6FXCQKIF.js +1671 -0
- package/dist/cli-bundle/chunks/config-6FXCQKIF.js.map +1 -0
- package/dist/cli-bundle/chunks/{config-V3FZOKLI.js → config-U4RZ4CQB.js} +121 -10
- package/dist/cli-bundle/chunks/config-U4RZ4CQB.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-RZ5QPNJB.js → context-FYYJGFWS.js} +32 -19
- package/dist/cli-bundle/chunks/{context-RZ5QPNJB.js.map → context-FYYJGFWS.js.map} +2 -2
- package/dist/cli-bundle/chunks/context-YMJ3Z2HQ.js +1461 -0
- package/dist/cli-bundle/chunks/context-YMJ3Z2HQ.js.map +1 -0
- package/dist/cli-bundle/chunks/contracts-QDB6OMLQ.js +1278 -0
- package/dist/cli-bundle/chunks/contracts-QDB6OMLQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-YLMH33VU.js → contracts-RFSPGVVJ.js} +198 -162
- package/dist/cli-bundle/chunks/contracts-RFSPGVVJ.js.map +7 -0
- package/dist/cli-bundle/chunks/create-I5L4EYYZ.js +31 -0
- package/dist/cli-bundle/chunks/create-I5L4EYYZ.js.map +1 -0
- package/dist/cli-bundle/chunks/create-JTZNCTQC.js +27 -0
- package/dist/cli-bundle/chunks/delete-7HPGI4GZ.js +55 -0
- package/dist/cli-bundle/chunks/delete-7HPGI4GZ.js.map +1 -0
- package/dist/cli-bundle/chunks/{delete-RHCTEORS.js → delete-VXUPH5RS.js} +7 -8
- package/dist/cli-bundle/chunks/{delete-RHCTEORS.js.map → delete-VXUPH5RS.js.map} +1 -1
- package/dist/cli-bundle/chunks/{deps-MZYCMLAO.js → deps-JSRRWC3Z.js} +7 -8
- package/dist/cli-bundle/chunks/{deps-MZYCMLAO.js.map → deps-JSRRWC3Z.js.map} +1 -1
- package/dist/cli-bundle/chunks/deps-SCZIFK2Z.js +225 -0
- package/dist/cli-bundle/chunks/deps-SCZIFK2Z.js.map +1 -0
- package/dist/cli-bundle/chunks/docs-GJK6K4VP.js +31 -0
- package/dist/cli-bundle/chunks/docs-GJK6K4VP.js.map +1 -0
- package/dist/cli-bundle/chunks/{docs-FXXUCZYU.js → docs-WW4N3MBM.js} +9 -10
- package/dist/cli-bundle/chunks/{docs-FXXUCZYU.js.map → docs-WW4N3MBM.js.map} +1 -1
- package/dist/cli-bundle/chunks/{extension-B4WL7BQU.js → extension-J7IBMFTD.js} +4 -5
- package/dist/cli-bundle/chunks/extension-VDY2U33M.js +28 -0
- package/dist/cli-bundle/chunks/extension-VDY2U33M.js.map +1 -0
- package/dist/cli-bundle/chunks/files-ISZJGILQ.js +282 -0
- package/dist/cli-bundle/chunks/files-ISZJGILQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{files-WVOX67PE.js → files-WKOD326U.js} +9 -10
- package/dist/cli-bundle/chunks/{files-WVOX67PE.js.map → files-WKOD326U.js.map} +1 -1
- package/dist/cli-bundle/chunks/gc-JDVJ6OQ2.js +362 -0
- package/dist/cli-bundle/chunks/gc-JDVJ6OQ2.js.map +1 -0
- package/dist/cli-bundle/chunks/gc-ULPVWMTN.js +372 -0
- package/dist/cli-bundle/chunks/gc-ULPVWMTN.js.map +7 -0
- package/dist/cli-bundle/chunks/get-RV37HT3G.js +194 -0
- package/dist/cli-bundle/chunks/get-RV37HT3G.js.map +1 -0
- package/dist/cli-bundle/chunks/{get-LTK3HOCQ.js → get-WXU6WI5P.js} +16 -17
- package/dist/cli-bundle/chunks/get-WXU6WI5P.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-TCWL55KM.js → health-6L6EH4WR.js} +57 -16
- package/dist/cli-bundle/chunks/health-6L6EH4WR.js.map +7 -0
- package/dist/cli-bundle/chunks/health-LOI2HHKB.js +1271 -0
- package/dist/cli-bundle/chunks/health-LOI2HHKB.js.map +1 -0
- package/dist/cli-bundle/chunks/history-2BA3T5AE.js +20 -0
- package/dist/cli-bundle/chunks/history-PKN67D5O.js +24 -0
- package/dist/cli-bundle/chunks/history-PKN67D5O.js.map +1 -0
- package/dist/cli-bundle/chunks/history-redact-JBZNXHGR.js +19 -0
- package/dist/cli-bundle/chunks/history-redact-V4FOJGS7.js +23 -0
- package/dist/cli-bundle/chunks/history-redact-V4FOJGS7.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-repair-ZWSTDRH2.js → history-repair-HIBCBIKK.js} +12 -14
- package/dist/cli-bundle/chunks/{history-repair-ZWSTDRH2.js.map → history-repair-HIBCBIKK.js.map} +1 -1
- package/dist/cli-bundle/chunks/history-repair-SDMHR7JT.js +193 -0
- package/dist/cli-bundle/chunks/history-repair-SDMHR7JT.js.map +1 -0
- package/dist/cli-bundle/chunks/init-HIVSNX3O.js +16 -0
- package/dist/cli-bundle/chunks/init-P56QYWJF.js +20 -0
- package/dist/cli-bundle/chunks/init-P56QYWJF.js.map +1 -0
- package/dist/cli-bundle/chunks/learnings-GDFRG5J7.js +44 -0
- package/dist/cli-bundle/chunks/learnings-GDFRG5J7.js.map +1 -0
- package/dist/cli-bundle/chunks/{learnings-NXTWE3FR.js → learnings-MIXSESLK.js} +10 -11
- package/dist/cli-bundle/chunks/{learnings-NXTWE3FR.js.map → learnings-MIXSESLK.js.map} +1 -1
- package/dist/cli-bundle/chunks/list-FGOWQMSM.js +24 -0
- package/dist/cli-bundle/chunks/list-FGOWQMSM.js.map +1 -0
- package/dist/cli-bundle/chunks/list-MUSQNMTD.js +20 -0
- package/dist/cli-bundle/chunks/{notes-DFS5ZGOO.js → notes-4XVSH2AZ.js} +10 -11
- package/dist/cli-bundle/chunks/{notes-DFS5ZGOO.js.map → notes-4XVSH2AZ.js.map} +1 -1
- package/dist/cli-bundle/chunks/notes-5UK3GEH2.js +44 -0
- package/dist/cli-bundle/chunks/notes-5UK3GEH2.js.map +1 -0
- package/dist/cli-bundle/chunks/plan-DUMBV3QB.js +1171 -0
- package/dist/cli-bundle/chunks/plan-DUMBV3QB.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-67AB2PLM.js → plan-SLMODHWX.js} +13 -14
- package/dist/cli-bundle/chunks/{plan-67AB2PLM.js.map → plan-SLMODHWX.js.map} +1 -1
- package/dist/cli-bundle/chunks/register-list-query-POCFZ5JW.js +229 -0
- package/dist/cli-bundle/chunks/register-list-query-POCFZ5JW.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-UP3VRUFS.js → register-list-query-WST76HSQ.js} +26 -26
- package/dist/cli-bundle/chunks/register-list-query-WST76HSQ.js.map +7 -0
- package/dist/cli-bundle/chunks/register-mutation-N5GSUZJV.js +813 -0
- package/dist/cli-bundle/chunks/register-mutation-N5GSUZJV.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-YWSBF545.js → register-mutation-OA675SOU.js} +154 -43
- package/dist/cli-bundle/chunks/register-mutation-OA675SOU.js.map +7 -0
- package/dist/cli-bundle/chunks/register-operations-GNHBE5I3.js +383 -0
- package/dist/cli-bundle/chunks/register-operations-GNHBE5I3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-3BDTGSDH.js → register-operations-N3PMHXH5.js} +49 -37
- package/dist/cli-bundle/chunks/register-operations-N3PMHXH5.js.map +7 -0
- package/dist/cli-bundle/chunks/register-setup-JIMPKJKV.js +242 -0
- package/dist/cli-bundle/chunks/register-setup-JIMPKJKV.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-V56GDRUS.js → register-setup-ZHJI2DI3.js} +18 -19
- package/dist/cli-bundle/chunks/{register-setup-V56GDRUS.js.map → register-setup-ZHJI2DI3.js.map} +2 -2
- package/dist/cli-bundle/chunks/restore-D4RGNX33.js +17 -0
- package/dist/cli-bundle/chunks/restore-PBL6T5TW.js +21 -0
- package/dist/cli-bundle/chunks/restore-PBL6T5TW.js.map +1 -0
- package/dist/cli-bundle/chunks/schema-2NOO6NGB.js +780 -0
- package/dist/cli-bundle/chunks/schema-2NOO6NGB.js.map +7 -0
- package/dist/cli-bundle/chunks/schema-EBI4NLUO.js +770 -0
- package/dist/cli-bundle/chunks/schema-EBI4NLUO.js.map +1 -0
- package/dist/cli-bundle/chunks/search-JPUQTVCY.js +1127 -0
- package/dist/cli-bundle/chunks/search-JPUQTVCY.js.map +1 -0
- package/dist/cli-bundle/chunks/{search-HENBL456.js → search-OA6JX27A.js} +25 -16
- package/dist/cli-bundle/chunks/search-OA6JX27A.js.map +7 -0
- package/dist/cli-bundle/chunks/stats-CV54BAWY.js +202 -0
- package/dist/cli-bundle/chunks/stats-CV54BAWY.js.map +1 -0
- package/dist/cli-bundle/chunks/stats-XYB6KTFG.js +212 -0
- package/dist/cli-bundle/chunks/stats-XYB6KTFG.js.map +7 -0
- package/dist/cli-bundle/chunks/telemetry-LMJ7PFUO.js +251 -0
- package/dist/cli-bundle/chunks/telemetry-LMJ7PFUO.js.map +7 -0
- package/dist/cli-bundle/chunks/telemetry-NCMEPJNR.js +248 -0
- package/dist/cli-bundle/chunks/telemetry-NCMEPJNR.js.map +1 -0
- package/dist/cli-bundle/chunks/test-MXX3E5JL.js +31 -0
- package/dist/cli-bundle/chunks/test-WBROAJIE.js +35 -0
- package/dist/cli-bundle/chunks/test-WBROAJIE.js.map +1 -0
- package/dist/cli-bundle/chunks/test-all-N6NSRDTV.js +328 -0
- package/dist/cli-bundle/chunks/test-all-N6NSRDTV.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-all-G2AZOHXI.js → test-all-NTOZ7C3M.js} +13 -14
- package/dist/cli-bundle/chunks/{test-all-G2AZOHXI.js.map → test-all-NTOZ7C3M.js.map} +1 -1
- package/dist/cli-bundle/chunks/test-runs-V6A7LPWZ.js +929 -0
- package/dist/cli-bundle/chunks/test-runs-V6A7LPWZ.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-GX5HTPSF.js → test-runs-WMVTQU3Y.js} +5 -5
- package/dist/cli-bundle/chunks/update-OSV3NAQB.js +25 -0
- package/dist/cli-bundle/chunks/update-OSV3NAQB.js.map +1 -0
- package/dist/cli-bundle/chunks/update-YRXSUGYQ.js +21 -0
- package/dist/cli-bundle/chunks/update-many-EM6OXYGO.js +605 -0
- package/dist/cli-bundle/chunks/update-many-EM6OXYGO.js.map +1 -0
- package/dist/cli-bundle/chunks/{update-many-46HRSP2Q.js → update-many-KGGEYABR.js} +78 -146
- package/dist/cli-bundle/chunks/update-many-KGGEYABR.js.map +7 -0
- package/dist/cli-bundle/chunks/{upgrade-H5HHM5UV.js → upgrade-BLI7XBAJ.js} +5 -7
- package/dist/cli-bundle/chunks/{upgrade-H5HHM5UV.js.map → upgrade-BLI7XBAJ.js.map} +1 -1
- package/dist/cli-bundle/chunks/upgrade-LXPOQKFV.js +266 -0
- package/dist/cli-bundle/chunks/upgrade-LXPOQKFV.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-TMCVKIGZ.js → validate-AGOAUOVW.js} +61 -48
- package/dist/cli-bundle/chunks/validate-AGOAUOVW.js.map +7 -0
- package/dist/cli-bundle/chunks/validate-L5J6A7YO.js +1120 -0
- package/dist/cli-bundle/chunks/validate-L5J6A7YO.js.map +1 -0
- package/dist/cli-bundle/main.js +534 -1505
- package/dist/cli-bundle/main.js.map +4 -4
- package/dist/core/checkpoint/mutation-checkpoint.d.ts +44 -0
- package/dist/core/checkpoint/mutation-checkpoint.js +119 -0
- package/dist/core/checkpoint/mutation-checkpoint.js.map +1 -0
- package/dist/core/config/positional-value.js +4 -2
- package/dist/core/config/positional-value.js.map +1 -1
- package/dist/core/diagnostics/remediation.d.ts +73 -0
- package/dist/core/diagnostics/remediation.js +328 -0
- package/dist/core/diagnostics/remediation.js.map +1 -0
- package/dist/core/extensions/extension-hook-runtime.js +9 -2
- package/dist/core/extensions/extension-hook-runtime.js.map +1 -1
- package/dist/core/extensions/extension-types.d.ts +60 -4
- package/dist/core/extensions/extension-types.js +2 -2
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +5 -1
- package/dist/core/extensions/index.js +61 -2
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/item-fields.d.ts +5 -1
- package/dist/core/extensions/item-fields.js +126 -4
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/core/extensions/loader.js +283 -8
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/history/history-diff.d.ts +47 -0
- package/dist/core/history/history-diff.js +152 -0
- package/dist/core/history/history-diff.js.map +1 -0
- package/dist/core/history/history-storage-stats.d.ts +31 -0
- package/dist/core/history/history-storage-stats.js +101 -0
- package/dist/core/history/history-storage-stats.js.map +1 -0
- package/dist/core/item/item-format.d.ts +3 -2
- package/dist/core/item/item-format.js +15 -10
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/status-filter.d.ts +29 -0
- package/dist/core/item/status-filter.js +97 -0
- package/dist/core/item/status-filter.js.map +1 -0
- package/dist/core/item/type-registry.js +4 -2
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/lock/lock-gc.d.ts +46 -0
- package/dist/core/lock/lock-gc.js +194 -0
- package/dist/core/lock/lock-gc.js.map +1 -0
- package/dist/core/output/output.js +17 -5
- package/dist/core/output/output.js.map +1 -1
- package/dist/core/schema/item-types-file.d.ts +15 -0
- package/dist/core/schema/item-types-file.js +27 -2
- package/dist/core/schema/item-types-file.js.map +1 -1
- package/dist/core/schema/runtime-field-filters.js +4 -3
- package/dist/core/schema/runtime-field-filters.js.map +1 -1
- package/dist/core/schema/runtime-field-values.d.ts +1 -1
- package/dist/core/schema/runtime-field-values.js +10 -4
- package/dist/core/schema/runtime-field-values.js.map +1 -1
- package/dist/core/schema/runtime-schema.js +75 -2
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/schema/status-defs-file.d.ts +113 -0
- package/dist/core/schema/status-defs-file.js +260 -0
- package/dist/core/schema/status-defs-file.js.map +1 -0
- package/dist/core/schema/type-workflows.d.ts +64 -0
- package/dist/core/schema/type-workflows.js +98 -0
- package/dist/core/schema/type-workflows.js.map +1 -0
- package/dist/core/search/cache.d.ts +3 -1
- package/dist/core/search/cache.js +104 -28
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/http-client.d.ts +2 -2
- package/dist/core/search/http-client.js +2 -2
- package/dist/core/search/http-client.js.map +1 -1
- package/dist/core/search/vector-stores.d.ts +1 -0
- package/dist/core/search/vector-stores.js +64 -14
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/search/vectorization-metadata.d.ts +13 -0
- package/dist/core/search/vectorization-metadata.js +65 -0
- package/dist/core/search/vectorization-metadata.js.map +1 -0
- package/dist/core/shared/serial-queue.d.ts +12 -0
- package/dist/core/shared/serial-queue.js +43 -0
- package/dist/core/shared/serial-queue.js.map +1 -0
- package/dist/core/shared/serialization.d.ts +1 -0
- package/dist/core/shared/serialization.js +86 -2
- package/dist/core/shared/serialization.js.map +1 -1
- package/dist/core/store/front-matter-cache.js +14 -5
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/item-store.d.ts +2 -0
- package/dist/core/store/item-store.js +61 -6
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings-validator.js +18 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.d.ts +19 -1
- package/dist/core/store/settings.js +130 -10
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/consent.js +3 -3
- package/dist/core/telemetry/consent.js.map +1 -1
- package/dist/core/telemetry/observability.js +5 -4
- package/dist/core/telemetry/observability.js.map +1 -1
- package/dist/core/telemetry/runtime.js +16 -4
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +372 -45
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +16 -2
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-types.js +7 -2
- package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +2 -2
- package/dist/sdk/cli-contracts/enum-contracts.js +6 -2
- package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +1 -0
- package/dist/sdk/cli-contracts/tool-option-contracts.js +53 -3
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +42 -10
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +42 -1
- package/dist/sdk/cli-contracts.js +225 -19
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/errors.d.ts +22 -0
- package/dist/sdk/errors.js +46 -0
- package/dist/sdk/errors.js.map +1 -0
- package/dist/sdk/index.d.ts +2 -1
- package/dist/sdk/index.js +3 -2
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/package-import-adapters.js +14 -3
- package/dist/sdk/package-import-adapters.js.map +1 -1
- package/dist/sdk/runtime.d.ts +1 -0
- package/dist/sdk/runtime.js +3 -2
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/testing.d.ts +77 -0
- package/dist/sdk/testing.js +239 -0
- package/dist/sdk/testing.js.map +1 -0
- package/dist/types.d.ts +19 -0
- package/dist/types.js +3 -2
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +22 -3
- package/docs/ARCHITECTURE.md +11 -1
- package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +118 -7
- package/docs/CONFIGURATION.md +57 -2
- package/docs/EXTENSIONS.md +125 -6
- package/docs/EXTENSION_AUTHOR_CONTRACTS.md +73 -0
- package/docs/ONBOARDING.md +165 -0
- package/docs/QUICKSTART.md +3 -1
- package/docs/README.md +12 -4
- package/docs/RELEASING.md +38 -3
- package/docs/SDK.md +273 -1
- package/docs/TESTING.md +36 -1
- package/docs/examples/policy-restricted-extension/manifest.json +1 -0
- package/docs/examples/starter-extension/index.js +9 -1
- package/docs/examples/starter-extension/manifest.json +1 -0
- package/package.json +16 -7
- package/packages/pm-beads/extensions/beads/index.js +2 -4
- package/packages/pm-beads/extensions/beads/index.ts +43 -33
- package/packages/pm-beads/extensions/beads/manifest.json +12 -1
- package/packages/pm-calendar/README.md +6 -0
- package/packages/pm-calendar/extensions/calendar/index.js +6 -1
- package/packages/pm-calendar/extensions/calendar/index.ts +6 -1
- package/packages/pm-calendar/extensions/calendar/manifest.json +6 -1
- package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +6 -1
- package/packages/pm-guide-shell/README.md +4 -0
- package/packages/pm-guide-shell/extensions/guide-shell/index.js +22 -0
- package/packages/pm-guide-shell/extensions/guide-shell/index.ts +22 -0
- package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +6 -1
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +74 -3
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +84 -4
- package/packages/pm-lifecycle-hooks/README.md +29 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.js +18 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.ts +20 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +9 -0
- package/packages/pm-lifecycle-hooks/package.json +52 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +13 -1
- package/packages/pm-search-advanced/extensions/search-advanced/index.js +69 -1
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +91 -2
- package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +13 -1
- package/packages/pm-templates/extensions/templates/manifest.json +6 -1
- package/packages/pm-todos/extensions/todos/index.js +3 -7
- package/packages/pm-todos/extensions/todos/index.ts +55 -42
- package/packages/pm-todos/extensions/todos/manifest.json +13 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/README.md +7 -4
- package/plugins/pm-claude/agents/pm-coordinator.md +1 -1
- package/plugins/pm-claude/commands/pm-init.md +1 -1
- package/scripts/bundle-cli.mjs +121 -17
- package/dist/cli-bundle/chunks/activity-OWYSUZOY.js +0 -17
- package/dist/cli-bundle/chunks/chunk-3M73P3G6.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4AEZR5EJ.js +0 -189
- package/dist/cli-bundle/chunks/chunk-4AEZR5EJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5HSEP75M.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6HT2F4TK.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-7Y53ZJIQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-BUPWJ3IJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-EGUGFSNX.js +0 -47
- package/dist/cli-bundle/chunks/chunk-EGUGFSNX.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FM26RGSU.js +0 -56
- package/dist/cli-bundle/chunks/chunk-FM26RGSU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FQE6XZDB.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-GN7IJPCD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JTWRXG4B.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JULRTHJQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-LRBOHPUE.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-LSXGH6NE.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MD7K4JYF.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-OGZEG5TT.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-P53TN6IA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-PXUAZUUY.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-U7FMKRXH.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-VGICHR7D.js +0 -141
- package/dist/cli-bundle/chunks/chunk-VGICHR7D.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-WDPXDQFG.js.map +0 -7
- package/dist/cli-bundle/chunks/close-XY4CSAYF.js +0 -14
- package/dist/cli-bundle/chunks/config-V3FZOKLI.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-YLMH33VU.js.map +0 -7
- package/dist/cli-bundle/chunks/create-PZVHRIZQ.js +0 -28
- package/dist/cli-bundle/chunks/gc-JWNF66EC.js +0 -181
- package/dist/cli-bundle/chunks/gc-JWNF66EC.js.map +0 -7
- package/dist/cli-bundle/chunks/get-LTK3HOCQ.js.map +0 -7
- package/dist/cli-bundle/chunks/health-TCWL55KM.js.map +0 -7
- package/dist/cli-bundle/chunks/history-A2JUDXUE.js +0 -21
- package/dist/cli-bundle/chunks/history-redact-ED6RFCPL.js +0 -20
- package/dist/cli-bundle/chunks/init-M2WUB4YH.js +0 -16
- package/dist/cli-bundle/chunks/list-OGWQPC26.js +0 -20
- package/dist/cli-bundle/chunks/register-list-query-UP3VRUFS.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-YWSBF545.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-3BDTGSDH.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-MB2ISME7.js +0 -18
- package/dist/cli-bundle/chunks/schema-Q622KC46.js +0 -119
- package/dist/cli-bundle/chunks/schema-Q622KC46.js.map +0 -7
- package/dist/cli-bundle/chunks/search-HENBL456.js.map +0 -7
- package/dist/cli-bundle/chunks/stats-N6H3YP2F.js +0 -124
- package/dist/cli-bundle/chunks/stats-N6H3YP2F.js.map +0 -7
- package/dist/cli-bundle/chunks/test-VNBDRJ4Z.js +0 -32
- package/dist/cli-bundle/chunks/update-H6SCWNMA.js +0 -22
- package/dist/cli-bundle/chunks/update-many-46HRSP2Q.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-TMCVKIGZ.js.map +0 -7
- /package/dist/cli-bundle/chunks/{activity-OWYSUZOY.js.map → activity-CVXTCHYY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-ADUOSFRO.js.map → aggregate-VNAHUNNF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D7AOMPRH.js.map → chunk-BQHUILZS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-G57E5D7T.js.map → chunk-GU2ZJ2VV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AKOOMO3T.js.map → chunk-KAG77BY3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KBQY3YG5.js.map → chunk-KJ33AOCY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WJ2NAC37.js.map → chunk-N7ACFE26.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PVNQLCIS.js.map → chunk-QO7EBBOM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A7E7PUVX.js.map → chunk-R6UFP2GE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CEFIVZPG.js.map → chunk-T3LC5LKB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JFWUHHS2.js.map → chunk-UM2GBHS4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SEXQN4KL.js.map → chunk-WKY2IBOQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NGN7UV5K.js.map → chunk-XLTD2HN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-L2FXEKDB.js.map → chunk-YL2DJGYS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-XY4CSAYF.js.map → close-3HDWDA3L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-PZVHRIZQ.js.map → create-JTZNCTQC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-B4WL7BQU.js.map → extension-J7IBMFTD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-A2JUDXUE.js.map → history-2BA3T5AE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-ED6RFCPL.js.map → history-redact-JBZNXHGR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-M2WUB4YH.js.map → init-HIVSNX3O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-OGWQPC26.js.map → list-MUSQNMTD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-MB2ISME7.js.map → restore-D4RGNX33.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-VNBDRJ4Z.js.map → test-MXX3E5JL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-GX5HTPSF.js.map → test-runs-WMVTQU3Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-H6SCWNMA.js.map → update-YRXSUGYQ.js.map} +0 -0
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]="f59eb89f-30d4-55de-b785-a4bd3f3f0025")}catch(e){}}();
|
|
4
4
|
import readline from "node:readline";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { activateExtensions, loadExtensions, runActiveCommandHandler, setActiveExtensionCommands, setActiveExtensionHooks, setActiveExtensionParsers, setActiveExtensionPreflight, setActiveExtensionRegistrations, setActiveExtensionRenderers, setActiveExtensionServices, } from "../core/extensions/index.js";
|
|
@@ -8,10 +8,15 @@ import { pathExists } from "../core/fs/fs-utils.js";
|
|
|
8
8
|
import { projectMutationResult } from "../core/output/mutation-projection.js";
|
|
9
9
|
import { PmCliError } from "../core/shared/errors.js";
|
|
10
10
|
import { decodeHtmlEntitiesInOptions } from "../core/shared/html-entity-decode.js";
|
|
11
|
+
import { levenshteinDistanceWithinLimit } from "../core/shared/levenshtein.js";
|
|
11
12
|
import { asRecordClone } from "../core/shared/primitives.js";
|
|
13
|
+
import { createSerialQueue } from "../core/shared/serial-queue.js";
|
|
12
14
|
import { getSettingsPath, resolvePmRoot } from "../core/store/paths.js";
|
|
13
15
|
import { readSettings } from "../core/store/settings.js";
|
|
14
|
-
import {
|
|
16
|
+
import { normalizeListOptions, normalizeUpdateOptions } from "../cli/registration-helpers.js";
|
|
17
|
+
import { UPDATE_COMMANDER_STRING_OPTION_CONTRACTS } from "../sdk/cli-contracts/commander-mutation-options.js";
|
|
18
|
+
import { PM_TOOL_ACTIONS } from "../sdk/cli-contracts/enum-contracts.js";
|
|
19
|
+
import { runActivity, runAggregate, runAppend, runClaim, runClose, runCloseMany, runComments, runContracts, runContext, runCreate, runConfig, runDelete, runDeps, runDocs, runExtension, runFiles, runFilesDiscover, runGc, runGet, runHealth, runHistory, runHistoryRedact, runHistoryRepair, runInit, runLearnings, runList, runNotes, runPlan, runRelease, runSchemaAddStatus, runSchemaAddType, runSchemaList, runSchemaRemoveStatus, runSchemaRemoveType, runSchemaShow, runSearch, runStats, runTelemetry, runTest, runTestAll, runUpdate, runUpdateMany, runUpgrade, runValidate, } from "../cli/commands/index.js";
|
|
15
20
|
const PM_PACKAGE_ROOT_ENV = "PM_CLI_PACKAGE_ROOT";
|
|
16
21
|
function resolvePmPackageRoot() {
|
|
17
22
|
return fileURLToPath(new URL("../..", import.meta.url));
|
|
@@ -41,6 +46,11 @@ const idSchema = {
|
|
|
41
46
|
type: "string",
|
|
42
47
|
description: "pm item id, for example pm-abc1.",
|
|
43
48
|
};
|
|
49
|
+
// pm-fd8n: derive the pm_run action enumeration from the canonical
|
|
50
|
+
// PM_TOOL_ACTIONS contract instead of a hand-maintained prose list, so the
|
|
51
|
+
// MCP-facing description can never drift from the actual supported actions.
|
|
52
|
+
const PM_RUN_ACTION_DESCRIPTION = `Operation name (one of): ${PM_TOOL_ACTIONS.join(", ")}. ` +
|
|
53
|
+
"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.";
|
|
44
54
|
function objectSchema(properties, required = []) {
|
|
45
55
|
return {
|
|
46
56
|
...TOOL_SCHEMA_BASE,
|
|
@@ -58,12 +68,38 @@ const TOOLS = [
|
|
|
58
68
|
inputSchema: objectSchema({
|
|
59
69
|
action: {
|
|
60
70
|
type: "string",
|
|
61
|
-
description:
|
|
71
|
+
description: PM_RUN_ACTION_DESCRIPTION,
|
|
62
72
|
},
|
|
63
73
|
id: idSchema,
|
|
64
74
|
query: { type: "string", description: "Search query for action=search." },
|
|
65
75
|
reason: { type: "string", description: "Close reason for action=close." },
|
|
66
76
|
force: { type: "boolean", description: "Force ownership/terminal-state override when supported." },
|
|
77
|
+
subcommand: {
|
|
78
|
+
type: "string",
|
|
79
|
+
enum: ["list", "show", "add-type", "remove-type", "add-status", "remove-status"],
|
|
80
|
+
description: "Schema subcommand when action=schema.",
|
|
81
|
+
},
|
|
82
|
+
name: {
|
|
83
|
+
type: "string",
|
|
84
|
+
description: "Item type name for action=schema show/add-type/remove-type, or status id for add-status/remove-status.",
|
|
85
|
+
},
|
|
86
|
+
description: {
|
|
87
|
+
type: "string",
|
|
88
|
+
description: "Custom item type or status description for action=schema add-type/add-status.",
|
|
89
|
+
},
|
|
90
|
+
defaultStatus: { type: "string", description: "Default status for action=schema add-type." },
|
|
91
|
+
folder: { type: "string", description: "Storage folder for action=schema add-type." },
|
|
92
|
+
alias: {
|
|
93
|
+
type: "array",
|
|
94
|
+
items: { type: "string" },
|
|
95
|
+
description: "Aliases for action=schema add-type/add-status.",
|
|
96
|
+
},
|
|
97
|
+
role: {
|
|
98
|
+
type: "array",
|
|
99
|
+
items: { type: "string" },
|
|
100
|
+
description: "Lifecycle roles for action=schema add-status: draft, active, blocked, terminal, terminal_done, terminal_canceled, default_open, default_close, default_cancel.",
|
|
101
|
+
},
|
|
102
|
+
order: { type: "number", description: "Display/sort order for action=schema add-status." },
|
|
67
103
|
options: { type: "object", description: "Underlying pm command options using camelCase keys." },
|
|
68
104
|
fullChangedFields: {
|
|
69
105
|
type: "boolean",
|
|
@@ -159,6 +195,21 @@ const TOOLS = [
|
|
|
159
195
|
description: "List, add, or remove linked docs for a pm item.",
|
|
160
196
|
inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
|
|
161
197
|
},
|
|
198
|
+
{
|
|
199
|
+
name: "pm_notes",
|
|
200
|
+
description: "List or add structured notes on a pm item. Use options.add to append a note; omit it to list existing notes.",
|
|
201
|
+
inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
name: "pm_learnings",
|
|
205
|
+
description: "List or add learnings on a pm item. Use options.add to capture a learning/insight; omit it to list existing learnings.",
|
|
206
|
+
inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
name: "pm_deps",
|
|
210
|
+
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.",
|
|
211
|
+
inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
|
|
212
|
+
},
|
|
162
213
|
{
|
|
163
214
|
name: "pm_test",
|
|
164
215
|
description: "List, add, remove, or run linked tests for a pm item.",
|
|
@@ -190,10 +241,83 @@ const TOOLS = [
|
|
|
190
241
|
}),
|
|
191
242
|
},
|
|
192
243
|
];
|
|
244
|
+
// pm-qxwu: TOOL_SCHEMA_BASE keeps additionalProperties:true so legitimate
|
|
245
|
+
// passthrough keeps working, which means a typo'd top-level arg (e.g.
|
|
246
|
+
// "fullChangedField" missing the trailing "s") is silently swallowed and the
|
|
247
|
+
// agent gets default behavior with no signal. We precompute the declared
|
|
248
|
+
// top-level property keys for each tool and, on every tools/call, warn (without
|
|
249
|
+
// rejecting) when an unexpected top-level key appears. The warning is surfaced
|
|
250
|
+
// to stderr and additively in structuredContent.warnings.
|
|
251
|
+
const TOOL_DECLARED_KEYS = new Map(TOOLS.map((tool) => {
|
|
252
|
+
const schema = tool.inputSchema;
|
|
253
|
+
const properties = schema.properties ?? {};
|
|
254
|
+
return [tool.name, Object.keys(properties)];
|
|
255
|
+
}));
|
|
256
|
+
function nearestDeclaredKey(unexpected, declared) {
|
|
257
|
+
// Cheap did-you-mean: budget grows with key length but stays small so we only
|
|
258
|
+
// suggest genuine near-misses (a single typo / transposition for short keys).
|
|
259
|
+
const limit = Math.max(1, Math.min(3, Math.floor(unexpected.length / 4) + 1));
|
|
260
|
+
let best;
|
|
261
|
+
for (const candidate of declared) {
|
|
262
|
+
const distance = levenshteinDistanceWithinLimit(unexpected, candidate, limit);
|
|
263
|
+
if (distance === null) {
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
if (best === undefined || distance < best.distance) {
|
|
267
|
+
best = { key: candidate, distance };
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return best?.key;
|
|
271
|
+
}
|
|
272
|
+
// pm_run is the explicit catch-all passthrough tool: extension/package actions
|
|
273
|
+
// accept arbitrary top-level keys (see extensionOptionsFromArgs), so unexpected
|
|
274
|
+
// keys there are by-design rather than typos and must not be flagged.
|
|
275
|
+
const UNEXPECTED_KEY_WARNING_EXEMPT_TOOLS = new Set(["pm_run"]);
|
|
276
|
+
function detectUnexpectedTopLevelKeys(toolName, args) {
|
|
277
|
+
if (typeof args !== "object" || args === null || Array.isArray(args)) {
|
|
278
|
+
return [];
|
|
279
|
+
}
|
|
280
|
+
if (UNEXPECTED_KEY_WARNING_EXEMPT_TOOLS.has(toolName)) {
|
|
281
|
+
return [];
|
|
282
|
+
}
|
|
283
|
+
const declared = TOOL_DECLARED_KEYS.get(toolName);
|
|
284
|
+
if (declared === undefined) {
|
|
285
|
+
return [];
|
|
286
|
+
}
|
|
287
|
+
const declaredSet = new Set(declared);
|
|
288
|
+
const warnings = [];
|
|
289
|
+
for (const key of Object.keys(args)) {
|
|
290
|
+
if (declaredSet.has(key)) {
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
const suggestion = nearestDeclaredKey(key, declared);
|
|
294
|
+
warnings.push(suggestion !== undefined
|
|
295
|
+
? `Unexpected top-level argument "${key}" for ${toolName} (did you mean "${suggestion}"?). It was passed through unchanged; declared arguments are: ${declared.join(", ")}.`
|
|
296
|
+
: `Unexpected top-level argument "${key}" for ${toolName}. It was passed through unchanged; declared arguments are: ${declared.join(", ")}.`);
|
|
297
|
+
}
|
|
298
|
+
return warnings;
|
|
299
|
+
}
|
|
193
300
|
function readString(args, key) {
|
|
194
301
|
const value = args[key];
|
|
195
302
|
return typeof value === "string" && value.trim().length > 0 ? value : undefined;
|
|
196
303
|
}
|
|
304
|
+
function readScalarString(args, key) {
|
|
305
|
+
const value = args[key];
|
|
306
|
+
if (typeof value === "string") {
|
|
307
|
+
return value.trim().length > 0 ? value : undefined;
|
|
308
|
+
}
|
|
309
|
+
return typeof value === "number" && Number.isFinite(value) ? String(value) : undefined;
|
|
310
|
+
}
|
|
311
|
+
function readScalarStringAllowBlank(args, key) {
|
|
312
|
+
const value = args[key];
|
|
313
|
+
if (typeof value === "string") {
|
|
314
|
+
return value;
|
|
315
|
+
}
|
|
316
|
+
return typeof value === "number" && Number.isFinite(value) ? String(value) : undefined;
|
|
317
|
+
}
|
|
318
|
+
function isRecord(value) {
|
|
319
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
320
|
+
}
|
|
197
321
|
function readRequiredString(args, key) {
|
|
198
322
|
const value = readString(args, key);
|
|
199
323
|
if (!value) {
|
|
@@ -241,7 +365,7 @@ const ARRAY_ADD_REMOVE_ACTIONS = new Set([
|
|
|
241
365
|
"test",
|
|
242
366
|
"test-all",
|
|
243
367
|
]);
|
|
244
|
-
function
|
|
368
|
+
function normalizeMcpOptionsArrays(options, action) {
|
|
245
369
|
const result = {};
|
|
246
370
|
const promoteAddRemove = action !== undefined && ARRAY_ADD_REMOVE_ACTIONS.has(action);
|
|
247
371
|
for (const [key, value] of Object.entries(options)) {
|
|
@@ -262,7 +386,7 @@ function normalizeOptionsArrays(options, action) {
|
|
|
262
386
|
return result;
|
|
263
387
|
}
|
|
264
388
|
function optionsWithAuthor(args, action) {
|
|
265
|
-
const options =
|
|
389
|
+
const options = normalizeMcpOptionsArrays(asRecordClone(args.options), action);
|
|
266
390
|
const author = readString(args, "author");
|
|
267
391
|
return author && options.author === undefined ? { ...options, author } : options;
|
|
268
392
|
}
|
|
@@ -371,6 +495,116 @@ async function withCwd(cwd, run) {
|
|
|
371
495
|
function withMutationCompaction(args, options) {
|
|
372
496
|
return { changedFields: args.fullChangedFields === true ? "full" : "compact", runnerOptions: { ...(options ?? {}) } };
|
|
373
497
|
}
|
|
498
|
+
function mutationListOptions(options) {
|
|
499
|
+
return {
|
|
500
|
+
type: readScalarString(options, "filterType"),
|
|
501
|
+
tag: readScalarString(options, "filterTag"),
|
|
502
|
+
priority: readScalarString(options, "filterPriority"),
|
|
503
|
+
deadlineBefore: readScalarString(options, "filterDeadlineBefore"),
|
|
504
|
+
deadlineAfter: readScalarString(options, "filterDeadlineAfter"),
|
|
505
|
+
updatedAfter: readScalarString(options, "filterUpdatedAfter"),
|
|
506
|
+
updatedBefore: readScalarString(options, "filterUpdatedBefore"),
|
|
507
|
+
createdAfter: readScalarString(options, "filterCreatedAfter"),
|
|
508
|
+
createdBefore: readScalarString(options, "filterCreatedBefore"),
|
|
509
|
+
ids: readScalarStringAllowBlank(options, "ids"),
|
|
510
|
+
assignee: readScalarString(options, "filterAssignee"),
|
|
511
|
+
assigneeFilter: readScalarString(options, "filterAssigneeFilter") ?? readScalarString(options, "filterAssignee_filter"),
|
|
512
|
+
parent: readScalarString(options, "filterParent"),
|
|
513
|
+
sprint: readScalarString(options, "filterSprint"),
|
|
514
|
+
release: readScalarString(options, "filterRelease"),
|
|
515
|
+
limit: readScalarString(options, "limit"),
|
|
516
|
+
offset: readScalarString(options, "offset"),
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
function closeManyOptionsFromFlat(options) {
|
|
520
|
+
return {
|
|
521
|
+
status: readString(options, "filterStatus"),
|
|
522
|
+
list: isRecord(options.list) ? normalizeListOptions(options.list) : mutationListOptions(options),
|
|
523
|
+
reason: readString(options, "reason"),
|
|
524
|
+
resolution: readString(options, "resolution"),
|
|
525
|
+
expectedResult: readString(options, "expectedResult") ?? readString(options, "expected_result") ?? readString(options, "expected"),
|
|
526
|
+
actualResult: readString(options, "actualResult") ?? readString(options, "actual_result") ?? readString(options, "actual"),
|
|
527
|
+
validateClose: readString(options, "validateClose") ?? readString(options, "validate_close"),
|
|
528
|
+
author: readString(options, "author"),
|
|
529
|
+
message: readString(options, "message"),
|
|
530
|
+
force: options.force === true ? true : undefined,
|
|
531
|
+
dryRun: options.dryRun === true || options.dry_run === true ? true : undefined,
|
|
532
|
+
rollback: readString(options, "rollback"),
|
|
533
|
+
checkpoint: options.checkpoint === false || options.noCheckpoint === true || options.no_checkpoint === true ? false : undefined,
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
const UPDATE_MANY_FLAT_CONTROL_KEYS = new Set([
|
|
537
|
+
"filterStatus",
|
|
538
|
+
"filterType",
|
|
539
|
+
"filterTag",
|
|
540
|
+
"filterPriority",
|
|
541
|
+
"filterDeadlineBefore",
|
|
542
|
+
"filterDeadlineAfter",
|
|
543
|
+
"filterUpdatedAfter",
|
|
544
|
+
"filterUpdatedBefore",
|
|
545
|
+
"filterCreatedAfter",
|
|
546
|
+
"filterCreatedBefore",
|
|
547
|
+
"filterAssignee",
|
|
548
|
+
"filterAssigneeFilter",
|
|
549
|
+
"filterAssignee_filter",
|
|
550
|
+
"filterParent",
|
|
551
|
+
"filterSprint",
|
|
552
|
+
"filterRelease",
|
|
553
|
+
"ids",
|
|
554
|
+
"list",
|
|
555
|
+
"update",
|
|
556
|
+
"limit",
|
|
557
|
+
"offset",
|
|
558
|
+
"dryRun",
|
|
559
|
+
"dry_run",
|
|
560
|
+
"rollback",
|
|
561
|
+
"checkpoint",
|
|
562
|
+
"noCheckpoint",
|
|
563
|
+
"no_checkpoint",
|
|
564
|
+
]);
|
|
565
|
+
function updateManyUpdateOptionsFromFlat(options) {
|
|
566
|
+
const update = {};
|
|
567
|
+
for (const [key, value] of Object.entries(options)) {
|
|
568
|
+
if (UPDATE_MANY_FLAT_CONTROL_KEYS.has(key)) {
|
|
569
|
+
continue;
|
|
570
|
+
}
|
|
571
|
+
update[key] = value;
|
|
572
|
+
}
|
|
573
|
+
return normalizeMcpUpdateOptions(update);
|
|
574
|
+
}
|
|
575
|
+
function normalizeMcpUpdateOptions(options) {
|
|
576
|
+
const normalizedInput = normalizeMcpOptionsArrays(options, "update-many");
|
|
577
|
+
for (const contract of UPDATE_COMMANDER_STRING_OPTION_CONTRACTS) {
|
|
578
|
+
for (const key of contract.keys) {
|
|
579
|
+
const value = normalizedInput[key];
|
|
580
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
581
|
+
normalizedInput[key] = String(value);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
return normalizeUpdateOptions(normalizedInput);
|
|
586
|
+
}
|
|
587
|
+
function updateManyOptionsFromFlat(options) {
|
|
588
|
+
if (isRecord(options.list) || isRecord(options.update)) {
|
|
589
|
+
const updateSource = isRecord(options.update) ? options.update : updateManyUpdateOptionsFromFlat(options);
|
|
590
|
+
return {
|
|
591
|
+
status: readScalarString(options, "filterStatus"),
|
|
592
|
+
list: isRecord(options.list) ? normalizeListOptions(options.list) : mutationListOptions(options),
|
|
593
|
+
update: normalizeMcpUpdateOptions(updateSource),
|
|
594
|
+
dryRun: options.dryRun === true || options.dry_run === true ? true : undefined,
|
|
595
|
+
rollback: readString(options, "rollback"),
|
|
596
|
+
checkpoint: options.checkpoint === false || options.noCheckpoint === true || options.no_checkpoint === true ? false : undefined,
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
return {
|
|
600
|
+
status: readScalarString(options, "filterStatus"),
|
|
601
|
+
list: mutationListOptions(options),
|
|
602
|
+
update: updateManyUpdateOptionsFromFlat(options),
|
|
603
|
+
dryRun: options.dryRun === true || options.dry_run === true ? true : undefined,
|
|
604
|
+
rollback: readString(options, "rollback"),
|
|
605
|
+
checkpoint: options.checkpoint === false || options.noCheckpoint === true || options.no_checkpoint === true ? false : undefined,
|
|
606
|
+
};
|
|
607
|
+
}
|
|
374
608
|
async function runAction(args) {
|
|
375
609
|
const action = readRequiredString(args, "action");
|
|
376
610
|
const global = globalOptions(args);
|
|
@@ -443,6 +677,15 @@ async function runAction(args) {
|
|
|
443
677
|
return runTest(id ?? readRequiredString(options, "id"), options, global);
|
|
444
678
|
case "test-all":
|
|
445
679
|
return runTestAll(options, global);
|
|
680
|
+
case "telemetry":
|
|
681
|
+
return runTelemetry({
|
|
682
|
+
subcommand: readString(args, "subcommand") ?? readString(options, "subcommand"),
|
|
683
|
+
limit: typeof args.limit === "number" && Number.isFinite(args.limit)
|
|
684
|
+
? args.limit
|
|
685
|
+
: typeof options.limit === "number" && Number.isFinite(options.limit)
|
|
686
|
+
? options.limit
|
|
687
|
+
: readString(args, "limit") ?? readString(options, "limit"),
|
|
688
|
+
}, global);
|
|
446
689
|
case "validate":
|
|
447
690
|
return runValidate(options, global);
|
|
448
691
|
case "health":
|
|
@@ -513,12 +756,55 @@ async function runAction(args) {
|
|
|
513
756
|
// subcommand/name are top-level fields in the published action contract,
|
|
514
757
|
// so accept them from args first and fall back to options for parity.
|
|
515
758
|
const subcommand = readString(args, "subcommand") ?? readRequiredString(options, "subcommand");
|
|
516
|
-
|
|
517
|
-
|
|
759
|
+
const normalizedSubcommand = subcommand.trim().toLowerCase();
|
|
760
|
+
const schemaName = readString(args, "name") ?? readString(options, "name");
|
|
761
|
+
const schemaAuthor = readString(args, "author") ?? readString(options, "author");
|
|
762
|
+
const schemaForce = args.force === true || options.force === true;
|
|
763
|
+
if (normalizedSubcommand === "list") {
|
|
764
|
+
return runSchemaList(global);
|
|
765
|
+
}
|
|
766
|
+
if (normalizedSubcommand === "show") {
|
|
767
|
+
return runSchemaShow(schemaName, global);
|
|
768
|
+
}
|
|
769
|
+
if (normalizedSubcommand === "remove-type") {
|
|
770
|
+
return runSchemaRemoveType(schemaName, { author: schemaAuthor, force: schemaForce }, global);
|
|
518
771
|
}
|
|
519
772
|
const aliasSource = args.alias ?? options.alias;
|
|
520
773
|
const aliases = aliasSource === undefined ? undefined : readStringArray(aliasSource);
|
|
521
|
-
|
|
774
|
+
if (normalizedSubcommand === "add-status") {
|
|
775
|
+
const roleSource = args.role ?? options.role;
|
|
776
|
+
const roles = roleSource === undefined ? undefined : readStringArray(roleSource);
|
|
777
|
+
const orderSource = args.order ?? options.order;
|
|
778
|
+
let order;
|
|
779
|
+
if (typeof orderSource === "number") {
|
|
780
|
+
if (!Number.isInteger(orderSource)) {
|
|
781
|
+
throw new PmCliError("schema add-status order must be a finite integer.", 64);
|
|
782
|
+
}
|
|
783
|
+
order = orderSource;
|
|
784
|
+
}
|
|
785
|
+
else if (typeof orderSource === "string" && orderSource.trim().length > 0) {
|
|
786
|
+
const parsed = Number(orderSource);
|
|
787
|
+
if (!Number.isInteger(parsed)) {
|
|
788
|
+
throw new PmCliError("schema add-status order must be a finite integer.", 64);
|
|
789
|
+
}
|
|
790
|
+
order = parsed;
|
|
791
|
+
}
|
|
792
|
+
return runSchemaAddStatus(schemaName, {
|
|
793
|
+
role: roles,
|
|
794
|
+
alias: aliases,
|
|
795
|
+
description: readString(args, "description") ?? readString(options, "description"),
|
|
796
|
+
order,
|
|
797
|
+
author: schemaAuthor,
|
|
798
|
+
force: schemaForce,
|
|
799
|
+
}, global);
|
|
800
|
+
}
|
|
801
|
+
if (normalizedSubcommand === "remove-status") {
|
|
802
|
+
return runSchemaRemoveStatus(schemaName, { author: schemaAuthor, force: schemaForce }, global);
|
|
803
|
+
}
|
|
804
|
+
if (normalizedSubcommand !== "add-type") {
|
|
805
|
+
throw new PmCliError(`Unknown pm schema subcommand "${subcommand}". Allowed: add-type, remove-type, add-status, remove-status, list, show`, 64);
|
|
806
|
+
}
|
|
807
|
+
return runSchemaAddType(schemaName, {
|
|
522
808
|
description: readString(args, "description") ?? readString(options, "description"),
|
|
523
809
|
defaultStatus: readString(args, "defaultStatus") ??
|
|
524
810
|
readString(args, "default_status") ??
|
|
@@ -526,19 +812,30 @@ async function runAction(args) {
|
|
|
526
812
|
readString(options, "default_status"),
|
|
527
813
|
folder: readString(args, "folder") ?? readString(options, "folder"),
|
|
528
814
|
alias: aliases,
|
|
529
|
-
author:
|
|
530
|
-
force:
|
|
815
|
+
author: schemaAuthor,
|
|
816
|
+
force: schemaForce,
|
|
531
817
|
}, global);
|
|
532
818
|
}
|
|
533
819
|
case "stats":
|
|
534
|
-
return runStats(global);
|
|
820
|
+
return runStats(global, { storage: options.storage === true });
|
|
535
821
|
case "append": {
|
|
536
822
|
const { changedFields, runnerOptions } = withMutationCompaction(args, options);
|
|
537
823
|
return projectMutationResult(await runAppend(id ?? readRequiredString(runnerOptions, "id"), runnerOptions, global), { changedFields });
|
|
538
824
|
}
|
|
539
825
|
case "update-many": {
|
|
540
826
|
const { changedFields, runnerOptions } = withMutationCompaction(args, options);
|
|
541
|
-
return projectMutationResult(await runUpdateMany(runnerOptions, global), { changedFields });
|
|
827
|
+
return projectMutationResult(await runUpdateMany(updateManyOptionsFromFlat(runnerOptions), global), { changedFields });
|
|
828
|
+
}
|
|
829
|
+
case "close-many": {
|
|
830
|
+
const { changedFields, runnerOptions } = withMutationCompaction(args, options);
|
|
831
|
+
const topLevelReason = readString(args, "reason");
|
|
832
|
+
const closeManyRunnerOptions = topLevelReason !== undefined && runnerOptions.reason === undefined
|
|
833
|
+
? { ...runnerOptions, reason: topLevelReason }
|
|
834
|
+
: { ...runnerOptions };
|
|
835
|
+
if (force && closeManyRunnerOptions.force === undefined) {
|
|
836
|
+
closeManyRunnerOptions.force = true;
|
|
837
|
+
}
|
|
838
|
+
return projectMutationResult(await runCloseMany(closeManyOptionsFromFlat(closeManyRunnerOptions), global), { changedFields });
|
|
542
839
|
}
|
|
543
840
|
case "gc":
|
|
544
841
|
return runGc(global, options);
|
|
@@ -560,13 +857,19 @@ const HANDLERS = {
|
|
|
560
857
|
pm_comments: (args) => runAction({ ...args, action: "comments" }),
|
|
561
858
|
pm_files: (args) => runAction({ ...args, action: "files" }),
|
|
562
859
|
pm_docs: (args) => runAction({ ...args, action: "docs" }),
|
|
860
|
+
pm_notes: (args) => runAction({ ...args, action: "notes" }),
|
|
861
|
+
pm_learnings: (args) => runAction({ ...args, action: "learnings" }),
|
|
862
|
+
pm_deps: (args) => runAction({ ...args, action: "deps" }),
|
|
563
863
|
pm_test: (args) => runAction({ ...args, action: "test" }),
|
|
564
864
|
pm_validate: (args) => runAction({ ...args, action: "validate" }),
|
|
565
865
|
pm_health: (args) => runAction({ ...args, action: "health" }),
|
|
566
866
|
pm_contracts: (args) => runAction({ ...args, action: "contracts" }),
|
|
567
867
|
pm_plan: (args) => runAction({ ...args, action: "plan" }),
|
|
568
868
|
};
|
|
569
|
-
function resultContent(result) {
|
|
869
|
+
function resultContent(result, warnings) {
|
|
870
|
+
// pm-qxwu: warnings is additive — existing fields (content, structuredContent.result)
|
|
871
|
+
// are never removed or renamed. The warnings array only appears when non-empty.
|
|
872
|
+
const structuredContent = warnings !== undefined && warnings.length > 0 ? { result, warnings } : { result };
|
|
570
873
|
return {
|
|
571
874
|
content: [
|
|
572
875
|
{
|
|
@@ -574,7 +877,7 @@ function resultContent(result) {
|
|
|
574
877
|
text: JSON.stringify(result, null, 2),
|
|
575
878
|
},
|
|
576
879
|
],
|
|
577
|
-
structuredContent
|
|
880
|
+
structuredContent,
|
|
578
881
|
};
|
|
579
882
|
}
|
|
580
883
|
function errorContent(error) {
|
|
@@ -602,9 +905,9 @@ export async function handleRequest(request) {
|
|
|
602
905
|
serverInfo: { name: "pm-mcp", version: "1.0.0" },
|
|
603
906
|
instructions: "You have access to native pm CLI tools for git-based project management. " +
|
|
604
907
|
"Use pm_context or pm_search before creating new work. " +
|
|
605
|
-
"Prefer narrow tools (pm_context, pm_list, pm_get, pm_search, pm_create, pm_update, pm_claim, pm_release, pm_close, pm_comments, pm_files, pm_docs, pm_test, pm_validate, pm_health, pm_contracts, pm_plan) over pm_run when they cover the operation. " +
|
|
908
|
+
"Prefer narrow tools (pm_context, pm_list, pm_get, pm_search, pm_create, 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. " +
|
|
606
909
|
"Use pm_plan for agent harness Plan workflows: it provides Codex/Claude/Cursor-style planning with durable steps, dependencies, decisions, discoveries, validation, and materialization. " +
|
|
607
|
-
"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,
|
|
910
|
+
"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. " +
|
|
608
911
|
"Use history-redact for audited history-stream redaction workflows, and history-repair to re-anchor a drifted history chain so pm health/validate report ok. " +
|
|
609
912
|
"Set author to 'claude-code-agent' on all mutations. " +
|
|
610
913
|
"Do not pass path during real repository tracking — only pass path for sandbox or test runs.",
|
|
@@ -627,8 +930,14 @@ export async function handleRequest(request) {
|
|
|
627
930
|
// affected; decoding at the MCP boundary normalizes the agent path while
|
|
628
931
|
// leaving normal text untouched.
|
|
629
932
|
const args = decodeHtmlEntitiesInOptions(asRecordClone(params.arguments));
|
|
933
|
+
// pm-qxwu: non-breaking detection of typo'd / unexpected top-level keys.
|
|
934
|
+
// additionalProperties stays true so passthrough still works; we only warn.
|
|
935
|
+
const warnings = detectUnexpectedTopLevelKeys(name, args);
|
|
936
|
+
for (const warning of warnings) {
|
|
937
|
+
console.error(`[pm-mcp] ${warning}`);
|
|
938
|
+
}
|
|
630
939
|
const result = await withCwd(args.cwd, () => handler(args));
|
|
631
|
-
return resultContent(result);
|
|
940
|
+
return resultContent(result, warnings);
|
|
632
941
|
}
|
|
633
942
|
throw new PmCliError(`Unsupported MCP method: ${request.method ?? "(missing)"}`, 64);
|
|
634
943
|
}
|
|
@@ -640,40 +949,58 @@ function writeError(id, error) {
|
|
|
640
949
|
const message = error instanceof Error ? error.message : String(error);
|
|
641
950
|
process.stdout.write(`${JSON.stringify({ jsonrpc: "2.0", id, error: { code, message } })}\n`);
|
|
642
951
|
}
|
|
952
|
+
// pm-3puw: parse one JSON-RPC line, dispatch it, and write the response. Kept
|
|
953
|
+
// as a standalone async unit so the stdio loop can enqueue it onto a serial
|
|
954
|
+
// queue (process lines in arrival order) and tests can drive it directly.
|
|
955
|
+
export async function processRpcLine(line) {
|
|
956
|
+
if (line.trim().length === 0) {
|
|
957
|
+
return;
|
|
958
|
+
}
|
|
959
|
+
let request;
|
|
960
|
+
try {
|
|
961
|
+
request = JSON.parse(line);
|
|
962
|
+
}
|
|
963
|
+
catch (error) {
|
|
964
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
965
|
+
writeError(null, new PmCliError(`Parse error: ${message}`, -32700));
|
|
966
|
+
return;
|
|
967
|
+
}
|
|
968
|
+
if (typeof request !== "object" || request === null || Array.isArray(request)) {
|
|
969
|
+
writeError(null, new PmCliError("Invalid JSON-RPC request: expected an object", -32600));
|
|
970
|
+
return;
|
|
971
|
+
}
|
|
972
|
+
const shouldRespond = Object.prototype.hasOwnProperty.call(request, "id");
|
|
973
|
+
try {
|
|
974
|
+
const result = await handleRequest(request);
|
|
975
|
+
if (shouldRespond && result !== undefined) {
|
|
976
|
+
writeResponse(request.id, result);
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
catch (error) {
|
|
980
|
+
if (!shouldRespond) {
|
|
981
|
+
return;
|
|
982
|
+
}
|
|
983
|
+
if (request.method === "tools/call") {
|
|
984
|
+
writeResponse(request.id, errorContent(error));
|
|
985
|
+
}
|
|
986
|
+
else {
|
|
987
|
+
writeError(request.id, error);
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
}
|
|
643
991
|
export function startMcpServer() {
|
|
644
992
|
const rl = readline.createInterface({ input: process.stdin, crlfDelay: Infinity });
|
|
993
|
+
// pm-3puw: serialize line handling so pipelined requests are processed in
|
|
994
|
+
// arrival order. The previous fire-and-forget handler ran requests
|
|
995
|
+
// concurrently, so a client that pipelined two mutations on the same item
|
|
996
|
+
// (without awaiting the first response) hit a lock conflict on the second.
|
|
997
|
+
const queue = createSerialQueue();
|
|
645
998
|
rl.on("line", (line) => {
|
|
646
|
-
void (
|
|
647
|
-
if (line.trim().length === 0) {
|
|
648
|
-
return;
|
|
649
|
-
}
|
|
650
|
-
let request;
|
|
651
|
-
try {
|
|
652
|
-
request = JSON.parse(line);
|
|
653
|
-
}
|
|
654
|
-
catch (error) {
|
|
655
|
-
writeError(null, error);
|
|
656
|
-
return;
|
|
657
|
-
}
|
|
658
|
-
try {
|
|
659
|
-
const result = await handleRequest(request);
|
|
660
|
-
if (result !== undefined) {
|
|
661
|
-
writeResponse(request.id, result);
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
catch (error) {
|
|
665
|
-
if (request.method === "tools/call") {
|
|
666
|
-
writeResponse(request.id, errorContent(error));
|
|
667
|
-
}
|
|
668
|
-
else {
|
|
669
|
-
writeError(request.id, error);
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
})();
|
|
999
|
+
void queue.enqueue(() => processRpcLine(line));
|
|
673
1000
|
});
|
|
674
1001
|
}
|
|
675
1002
|
if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
676
1003
|
startMcpServer();
|
|
677
1004
|
}
|
|
678
1005
|
//# sourceMappingURL=server.js.map
|
|
679
|
-
//# debugId=
|
|
1006
|
+
//# debugId=f59eb89f-30d4-55de-b785-a4bd3f3f0025
|