@unbrained/pm-cli 2026.6.9 → 2026.6.11
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 +59 -0
- package/README.md +1 -1
- package/dist/cli/bootstrap-args.d.ts +11 -0
- package/dist/cli/bootstrap-args.js +90 -4
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commands/aggregate.d.ts +7 -0
- package/dist/cli/commands/aggregate.js +53 -12
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/close.d.ts +1 -0
- package/dist/cli/commands/close.js +106 -3
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/completion.js +20 -7
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/context.d.ts +9 -0
- package/dist/cli/commands/context.js +149 -20
- package/dist/cli/commands/context.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.d.ts +1 -0
- package/dist/cli/commands/create.js +5 -3
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/extension.js +4 -2
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/health.js +44 -6
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history.js +6 -5
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/linked-test-parsers.d.ts +1 -0
- package/dist/cli/commands/linked-test-parsers.js +289 -2
- package/dist/cli/commands/linked-test-parsers.js.map +1 -1
- package/dist/cli/commands/reindex.d.ts +1 -0
- package/dist/cli/commands/reindex.js +33 -4
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/test.d.ts +6 -0
- package/dist/cli/commands/test.js +46 -5
- package/dist/cli/commands/test.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/extension-command-help.d.ts +1 -0
- package/dist/cli/extension-command-help.js +42 -2
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/extension-command-options.d.ts +2 -0
- package/dist/cli/extension-command-options.js +51 -2
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/main.js +26 -26
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +3 -2
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +4 -2
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +15 -6
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/registration-helpers.js +9 -2
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/{activity-RUJATACW.js → activity-XADJOG6G.js} +11 -11
- package/dist/cli-bundle/chunks/activity-XZIUPGZH.js +16 -0
- package/dist/cli-bundle/chunks/{aggregate-TT7OCHHT.js → aggregate-6OTS3AOO.js} +65 -24
- package/dist/cli-bundle/chunks/aggregate-6OTS3AOO.js.map +1 -0
- package/dist/cli-bundle/chunks/{aggregate-IQ27NFBI.js → aggregate-OD36DJU5.js} +64 -23
- package/dist/cli-bundle/chunks/aggregate-OD36DJU5.js.map +7 -0
- package/dist/cli-bundle/chunks/{append-E7AJ5RTR.js → append-JYWO4P7W.js} +8 -8
- package/dist/cli-bundle/chunks/{append-CWQZBUWV.js → append-KG55G7S3.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-LF2VNLEZ.js → chunk-3KLPFWZ4.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-LF2VNLEZ.js.map → chunk-3KLPFWZ4.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ENCVPOID.js → chunk-3SLOMKCJ.js} +12 -12
- package/dist/cli-bundle/chunks/chunk-4HFU4UO2.js +518 -0
- package/dist/cli-bundle/chunks/chunk-4HFU4UO2.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-F2REA7VW.js → chunk-4JCSYR6F.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-CAXUGAAF.js → chunk-4YFAGDRH.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-U3Z4OCZC.js → chunk-5SCT2JCT.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NHRZSYAA.js → chunk-73ZPG2I3.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-D5D7VKIC.js → chunk-7IYFN5R7.js} +6 -5
- package/dist/cli-bundle/chunks/chunk-7IYFN5R7.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-A5342JVL.js → chunk-7RIT3OCD.js} +12 -12
- package/dist/cli-bundle/chunks/{chunk-LU54Z4QI.js → chunk-7UGSRQCL.js} +76 -74
- package/dist/cli-bundle/chunks/{chunk-LU54Z4QI.js.map → chunk-7UGSRQCL.js.map} +3 -3
- package/dist/cli-bundle/chunks/{chunk-5JF76OJF.js → chunk-A6LXQFO7.js} +290 -25
- package/dist/cli-bundle/chunks/chunk-A6LXQFO7.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7CR4GAYN.js → chunk-ATEES5SX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FHUI7AXS.js → chunk-AVGHVVF7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-T7B5VAKD.js → chunk-B65UUCGQ.js} +13 -6
- package/dist/cli-bundle/chunks/chunk-B65UUCGQ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-42IULX44.js → chunk-CCX4RSYZ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EFRHTZO4.js → chunk-CW6E4NAT.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-JN3BT7UY.js → chunk-DY6C42S6.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-PUSOAQCR.js → chunk-E5DUIJA4.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-E7LOIIFP.js → chunk-ESANVZF4.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WQZCEEQN.js → chunk-EWFY7SLA.js} +157 -12
- package/dist/cli-bundle/chunks/chunk-EWFY7SLA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-YI6W2DBN.js → chunk-F75JSIOZ.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-6IGTNFE3.js → chunk-FDH2X65L.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-GPOSGWCN.js → chunk-FXRU333M.js} +68 -7
- package/dist/cli-bundle/chunks/chunk-FXRU333M.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-C72IQIBT.js → chunk-FY4SPXSC.js} +302 -30
- package/dist/cli-bundle/chunks/chunk-FY4SPXSC.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TLD3UYGY.js → chunk-GKIZW7SM.js} +5 -4
- package/dist/cli-bundle/chunks/chunk-GKIZW7SM.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YSANBZAE.js → chunk-GWZSYR6X.js} +12 -5
- package/dist/cli-bundle/chunks/chunk-GWZSYR6X.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-FJNJEWU4.js → chunk-HGLC63AU.js} +14 -12
- package/dist/cli-bundle/chunks/chunk-HGLC63AU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RLVI7KDW.js → chunk-HHHJ2GI3.js} +163 -11
- package/dist/cli-bundle/chunks/chunk-HHHJ2GI3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-AVGOVJGV.js → chunk-HI7STVF2.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-AVGOVJGV.js.map → chunk-HI7STVF2.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-ANKG2JKL.js → chunk-I2IJY2NL.js} +12 -5
- package/dist/cli-bundle/chunks/chunk-I2IJY2NL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZPXDD6RQ.js → chunk-I53JBTJW.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-23WNCJBA.js → chunk-I7NYDZDV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EQ6N6IDR.js → chunk-IGVJRZ6H.js} +13 -11
- package/dist/cli-bundle/chunks/chunk-IGVJRZ6H.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JVMAOD54.js → chunk-IH4MBKK7.js} +14 -7
- package/dist/cli-bundle/chunks/chunk-IH4MBKK7.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BIRVSIM2.js → chunk-IKOH24GZ.js} +14 -14
- package/dist/cli-bundle/chunks/chunk-IKOH24GZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-SAUXUI6U.js → chunk-IUKD4W6Z.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3RHE76G6.js → chunk-J3GD64J2.js} +15 -15
- package/dist/cli-bundle/chunks/chunk-J3GD64J2.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OT6XAMO5.js → chunk-KWAXVAXX.js} +7 -5
- package/dist/cli-bundle/chunks/{chunk-OT6XAMO5.js.map → chunk-KWAXVAXX.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SD6H3RLA.js → chunk-LCSCXBGT.js} +15 -5
- package/dist/cli-bundle/chunks/{chunk-SD6H3RLA.js.map → chunk-LCSCXBGT.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RKCJ2JMA.js → chunk-OASDW5UI.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-JEGFLKSI.js → chunk-OLKBSY4N.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4LRVXVJK.js → chunk-P2PSODAQ.js} +70 -9
- package/dist/cli-bundle/chunks/chunk-P2PSODAQ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-XEOO6K5J.js → chunk-P5BJOMBB.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-P2NVFE4L.js → chunk-P5U5EOMA.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-AM2AXVFS.js → chunk-PSD7F7DX.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-VDVVOLR6.js → chunk-QJMGRZO2.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-7YTWXGE3.js → chunk-QKW5D45B.js} +112 -7
- package/dist/cli-bundle/chunks/chunk-QKW5D45B.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-T7NWFVOA.js → chunk-QNJSITCX.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-MNXJ6YDO.js → chunk-RXAP6JL5.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-5MMLINZB.js → chunk-S26FESD4.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-I26E6XA7.js → chunk-S2ZLDYGS.js} +8 -6
- package/dist/cli-bundle/chunks/chunk-S2ZLDYGS.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-SXKNJPQ7.js +528 -0
- package/dist/cli-bundle/chunks/chunk-SXKNJPQ7.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-OPYA2HIU.js → chunk-TK5VZFHY.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-4TJWRPIH.js → chunk-TNAP7EJX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-I4FGL3K2.js → chunk-UOO6BYIA.js} +16 -6
- package/dist/cli-bundle/chunks/chunk-UOO6BYIA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5ATRWEZO.js → chunk-UUWGCWBU.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-YX5LAKFJ.js → chunk-VAOUX6TK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RMTI5R76.js → chunk-VFUZV5EB.js} +111 -6
- package/dist/cli-bundle/chunks/chunk-VFUZV5EB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-WCWIDJII.js → chunk-VPEAS7PS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RE2JQJZJ.js → chunk-VSRZRLG3.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-PW7C262O.js → chunk-WUNFKP7M.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BACSNVWE.js → chunk-XJDGS74Y.js} +71 -69
- package/dist/cli-bundle/chunks/{chunk-BACSNVWE.js.map → chunk-XJDGS74Y.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-H37YPWLM.js → chunk-XMBI6TNW.js} +13 -7
- package/dist/cli-bundle/chunks/chunk-XMBI6TNW.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-NUGAWYEN.js → chunk-XTKJSVWH.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KDX6VC3P.js → chunk-XUC4C4PT.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-44JP4PYY.js → chunk-Y3YKK7CY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KTVXLI54.js → chunk-YW6Q3RYZ.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-I3UILOUU.js → chunk-ZLMIWZUG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FKH7K6YP.js → chunk-ZMW77VWV.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-NJRZIJ4N.js → chunk-ZYNJNPYD.js} +14 -8
- package/dist/cli-bundle/chunks/chunk-ZYNJNPYD.js.map +1 -0
- package/dist/cli-bundle/chunks/{claim-UXFGCF3P.js → claim-2RDYMCTP.js} +10 -10
- package/dist/cli-bundle/chunks/{claim-RV6WYUF7.js → claim-MJ7DZFC3.js} +10 -10
- package/dist/cli-bundle/chunks/close-4FMAPEMY.js +13 -0
- package/dist/cli-bundle/chunks/{close-O4JK2JKD.js → close-XLEKIQSW.js} +8 -8
- package/dist/cli-bundle/chunks/{close-many-EQO4TPIE.js → close-many-AOD4HSAZ.js} +15 -15
- package/dist/cli-bundle/chunks/{close-many-SRDBV3SI.js → close-many-XKAQY5CQ.js} +15 -15
- package/dist/cli-bundle/chunks/{comments-TTZUIB2O.js → comments-B4RWWDJT.js} +10 -10
- package/dist/cli-bundle/chunks/{comments-OMB7YE27.js → comments-RN5TG4ZN.js} +10 -10
- package/dist/cli-bundle/chunks/{config-5VPR42A6.js → config-3JXJ3XZ7.js} +8 -8
- package/dist/cli-bundle/chunks/{config-NNLXVGVC.js → config-FZ4UDC4B.js} +8 -8
- package/dist/cli-bundle/chunks/{context-4QK6GRXO.js → context-L36PIN35.js} +146 -33
- package/dist/cli-bundle/chunks/{context-4QK6GRXO.js.map → context-L36PIN35.js.map} +2 -2
- package/dist/cli-bundle/chunks/{context-4N7GYTVQ.js → context-QBPO3BFM.js} +147 -34
- package/dist/cli-bundle/chunks/context-QBPO3BFM.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-DXCWXOSP.js → contracts-3NKWYKKU.js} +309 -6
- package/dist/cli-bundle/chunks/contracts-3NKWYKKU.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-AOBNEBVT.js → contracts-MIXBWJIB.js} +315 -5
- package/dist/cli-bundle/chunks/contracts-MIXBWJIB.js.map +7 -0
- package/dist/cli-bundle/chunks/{copy-5NM3SVJA.js → copy-ALU5WMHA.js} +7 -7
- package/dist/cli-bundle/chunks/{copy-XSYEQTLA.js → copy-FWIVTLBO.js} +7 -7
- package/dist/cli-bundle/chunks/{create-FCCAATQV.js → create-IFA26O2I.js} +13 -13
- package/dist/cli-bundle/chunks/create-JVXYHYH4.js +27 -0
- package/dist/cli-bundle/chunks/{delete-5JFP6OG7.js → delete-IYTIYAJS.js} +7 -7
- package/dist/cli-bundle/chunks/{delete-PQXJQXQ7.js → delete-Y2SGJBGY.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-S5322EOQ.js → deps-6TSPOSGU.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-XXKBOQUA.js → deps-CZ4PTVXU.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-C7CCVWAJ.js → docs-5WMBVQT2.js} +9 -9
- package/dist/cli-bundle/chunks/{docs-DZRPAW5S.js → docs-MB53UJAJ.js} +9 -9
- package/dist/cli-bundle/chunks/{extension-CSHP6FZX.js → extension-Q34OEWO5.js} +5 -5
- package/dist/cli-bundle/chunks/{extension-XNNVUVAY.js → extension-WH2FOIOZ.js} +5 -5
- package/dist/cli-bundle/chunks/{files-UPCNKEIZ.js → files-DLB5LJEP.js} +9 -9
- package/dist/cli-bundle/chunks/{files-OBWYYPKM.js → files-GVMNVLCB.js} +9 -9
- package/dist/cli-bundle/chunks/{gc-FA2ONELT.js → gc-2WEPW6D6.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-KXK6KBRN.js → gc-4Z3IKHAZ.js} +3 -3
- package/dist/cli-bundle/chunks/{get-PNTSONGB.js → get-PCHS7RA6.js} +11 -11
- package/dist/cli-bundle/chunks/{get-FLHYTOBA.js → get-QARTE6BL.js} +11 -11
- package/dist/cli-bundle/chunks/{health-CS5RNTJX.js → health-4ZYB3IYQ.js} +47 -19
- package/dist/cli-bundle/chunks/health-4ZYB3IYQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-KCRVYIYY.js → health-YO5LRWN4.js} +46 -18
- package/dist/cli-bundle/chunks/health-YO5LRWN4.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-COQTPBEU.js → history-7WUAEWHW.js} +10 -10
- package/dist/cli-bundle/chunks/history-L2FQFRTU.js +20 -0
- package/dist/cli-bundle/chunks/{history-compact-PVS2A3FS.js → history-compact-3EJ3L2O7.js} +11 -11
- package/dist/cli-bundle/chunks/{history-compact-66PSRYL3.js → history-compact-LW27IPFK.js} +11 -11
- package/dist/cli-bundle/chunks/{history-redact-DCXAWGTF.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-SEQDFTGW.js → history-repair-KVPFJKOS.js} +11 -11
- package/dist/cli-bundle/chunks/{history-repair-TA3NRIFO.js → history-repair-RUGKD3YR.js} +11 -11
- package/dist/cli-bundle/chunks/init-4BKRHGWW.js +17 -0
- package/dist/cli-bundle/chunks/{init-IQJE3EKJ.js → init-S5WEGUJY.js} +9 -9
- package/dist/cli-bundle/chunks/{learnings-XC6EMW5E.js → learnings-HQXSSKZ5.js} +10 -10
- package/dist/cli-bundle/chunks/{learnings-RJPGH2ME.js → learnings-XK3P4ZDR.js} +10 -10
- package/dist/cli-bundle/chunks/{list-NJV6WBT4.js → list-6CL3XFT6.js} +10 -10
- package/dist/cli-bundle/chunks/list-BYNN4ZEO.js +19 -0
- package/dist/cli-bundle/chunks/{notes-2KWHADK3.js → notes-5T6P7C5V.js} +10 -10
- package/dist/cli-bundle/chunks/{notes-FNCDMZW2.js → notes-U5FZCSBT.js} +10 -10
- package/dist/cli-bundle/chunks/{plan-CYK2P5PD.js → plan-FQLMJRLZ.js} +13 -13
- package/dist/cli-bundle/chunks/{plan-MQO5JTSV.js → plan-VNUG3WZZ.js} +13 -13
- package/dist/cli-bundle/chunks/{register-list-query-6RA24SIZ.js → register-list-query-NPE3ECJQ.js} +21 -21
- package/dist/cli-bundle/chunks/register-list-query-NPE3ECJQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-IO3RR5K6.js → register-list-query-VHDXWEPP.js} +20 -20
- package/dist/cli-bundle/chunks/register-list-query-VHDXWEPP.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-VV2SC2KL.js → register-mutation-DG53FCBV.js} +36 -35
- package/dist/cli-bundle/chunks/register-mutation-DG53FCBV.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-KVFUXCAZ.js → register-mutation-EAYNLGOS.js} +35 -34
- package/dist/cli-bundle/chunks/register-mutation-EAYNLGOS.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-DFNVRSJ5.js → register-operations-AM6KTWB6.js} +42 -37
- package/dist/cli-bundle/chunks/register-operations-AM6KTWB6.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-TAUUTRJ4.js → register-operations-FWFE64JG.js} +41 -36
- package/dist/cli-bundle/chunks/register-operations-FWFE64JG.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-setup-X2R5CFDV.js → register-setup-G4QYI3RX.js} +15 -15
- package/dist/cli-bundle/chunks/{register-setup-GAQZZRUA.js → register-setup-IKX5524L.js} +15 -15
- package/dist/cli-bundle/chunks/restore-CHIOQAQL.js +17 -0
- package/dist/cli-bundle/chunks/{restore-E3GZKRRK.js → restore-M6AFHMV4.js} +11 -11
- package/dist/cli-bundle/chunks/{schema-3CPFLDAY.js → schema-76HDZJCC.js} +8 -8
- package/dist/cli-bundle/chunks/{schema-7EHBPNXM.js → schema-AINZ2IMM.js} +8 -8
- package/dist/cli-bundle/chunks/{search-OBZVYJJ2.js → search-JMLFQEPJ.js} +10 -10
- package/dist/cli-bundle/chunks/{search-2T3NCCUR.js → search-NL3TSCYB.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-6LVK4JER.js → stats-BKXCBIGT.js} +7 -7
- package/dist/cli-bundle/chunks/{stats-ULGQACF7.js → stats-UBD56TGK.js} +7 -7
- package/dist/cli-bundle/chunks/{telemetry-HHKRTMZA.js → telemetry-N454RHG5.js} +4 -4
- package/dist/cli-bundle/chunks/{telemetry-6G27FLCP.js → telemetry-ZJXK3H7X.js} +4 -4
- package/dist/cli-bundle/chunks/{test-2PP4YBV6.js → test-BQAKIXAT.js} +14 -14
- package/dist/cli-bundle/chunks/test-O74JFUH5.js +32 -0
- package/dist/cli-bundle/chunks/{test-all-6Z272JRI.js → test-all-7LV3I6S5.js} +14 -14
- package/dist/cli-bundle/chunks/{test-all-NETGVNM6.js → test-all-TDYCCBA4.js} +14 -14
- package/dist/cli-bundle/chunks/{test-runs-M24WA6TI.js → test-runs-E64M6XS3.js} +5 -5
- package/dist/cli-bundle/chunks/{test-runs-CRPQVMMG.js → test-runs-LXZLULCI.js} +5 -5
- package/dist/cli-bundle/chunks/update-2EVXOC7V.js +21 -0
- package/dist/cli-bundle/chunks/update-5A2B6QYB.js +25 -0
- package/dist/cli-bundle/chunks/{update-many-JSRF5EH5.js → update-many-TUGU5YXQ.js} +22 -22
- package/dist/cli-bundle/chunks/{update-many-Y3HOL7WA.js → update-many-V4LA3C4H.js} +22 -22
- package/dist/cli-bundle/chunks/{upgrade-5RTQVKKE.js → upgrade-37F7JKES.js} +5 -5
- package/dist/cli-bundle/chunks/{upgrade-ECB6GH3M.js → upgrade-L32JA4TZ.js} +5 -5
- package/dist/cli-bundle/chunks/{validate-MCNMAXVA.js → validate-EQTT6WVX.js} +16 -16
- package/dist/cli-bundle/chunks/{validate-J6Q444SD.js → validate-XN4I4DPL.js} +16 -16
- package/dist/cli-bundle/main.js +276 -47
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/core/diagnostics/remediation.js +12 -2
- package/dist/core/diagnostics/remediation.js.map +1 -1
- package/dist/core/extensions/extension-policy.d.ts +14 -1
- package/dist/core/extensions/extension-policy.js +38 -3
- package/dist/core/extensions/extension-policy.js.map +1 -1
- package/dist/core/extensions/extension-types.d.ts +40 -1
- package/dist/core/extensions/extension-types.js +28 -2
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +6 -4
- package/dist/core/extensions/loader.js +67 -14
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/history/replay.d.ts +1 -1
- package/dist/core/history/replay.js +13 -4
- package/dist/core/history/replay.js.map +1 -1
- package/dist/core/output/mutation-projection.d.ts +2 -0
- package/dist/core/output/mutation-projection.js +9 -2
- package/dist/core/output/mutation-projection.js.map +1 -1
- package/dist/core/output/output.d.ts +2 -0
- package/dist/core/output/output.js +7 -3
- package/dist/core/output/output.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/command-types.d.ts +1 -0
- package/dist/core/shared/command-types.js +2 -2
- package/dist/core/shared/command-types.js.map +1 -1
- package/dist/core/shared/constants.js +8 -4
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/store/item-store.d.ts +1 -1
- package/dist/core/store/item-store.js +3 -3
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings-read-cache.d.ts +15 -0
- package/dist/core/store/settings-read-cache.js +72 -0
- package/dist/core/store/settings-read-cache.js.map +1 -0
- package/dist/core/store/settings-validator.d.ts +4 -1
- package/dist/core/store/settings-validator.js +14 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.js +166 -16
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/runtime.d.ts +1 -0
- package/dist/core/telemetry/runtime.js +3 -3
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/core/test/run-selectors.d.ts +27 -0
- package/dist/core/test/run-selectors.js +110 -0
- package/dist/core/test/run-selectors.js.map +1 -0
- package/dist/mcp/server.js +76 -262
- 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/commander-mutation-options.js +3 -2
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.js +3 -2
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +29 -2
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.js +37 -5
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/index.js +2 -2
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runtime.d.ts +6 -0
- package/dist/sdk/runtime.js +51 -3
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/types.d.ts +4 -1
- package/dist/types.js +4 -2
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +7 -1
- package/docs/ARCHITECTURE.md +7 -0
- package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +38 -3
- package/docs/CONFIGURATION.md +1 -1
- package/docs/EXTENSIONS.md +55 -53
- package/docs/SDK.md +8 -2
- package/docs/TESTING.md +60 -0
- package/docs/schemas/extension-manifest.schema.json +120 -0
- package/marketplace.json +1 -1
- package/package.json +2 -2
- package/packages/pm-beads/extensions/beads/manifest.json +10 -0
- package/packages/pm-calendar/extensions/calendar/manifest.json +10 -0
- package/packages/pm-command-kit/README.md +72 -0
- package/packages/pm-command-kit/extensions/command-kit/index.js +181 -0
- package/packages/pm-command-kit/extensions/command-kit/index.ts +176 -0
- package/packages/pm-command-kit/extensions/command-kit/manifest.json +22 -0
- package/packages/pm-command-kit/package.json +53 -0
- package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +10 -0
- package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +10 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +10 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +10 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.js +6 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +6 -0
- package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +10 -0
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +1 -0
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +1 -0
- package/packages/pm-templates/extensions/templates/manifest.json +10 -0
- package/packages/pm-todos/extensions/todos/manifest.json +10 -0
- 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-HF3VJYKH.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-IQ27NFBI.js.map +0 -7
- package/dist/cli-bundle/chunks/aggregate-TT7OCHHT.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3RHE76G6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4LRVXVJK.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5JF76OJF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7YTWXGE3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ANKG2JKL.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-BIRVSIM2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-C72IQIBT.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-D5D7VKIC.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-EQ6N6IDR.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FJNJEWU4.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-GPOSGWCN.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-H37YPWLM.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-I26E6XA7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-I4FGL3K2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JVMAOD54.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-LU2HE272.js +0 -242
- package/dist/cli-bundle/chunks/chunk-LU2HE272.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-NJRZIJ4N.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-O4L7Z6LB.js +0 -252
- package/dist/cli-bundle/chunks/chunk-O4L7Z6LB.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RLVI7KDW.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RMTI5R76.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-T7B5VAKD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-TLD3UYGY.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-WQZCEEQN.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-YSANBZAE.js.map +0 -7
- package/dist/cli-bundle/chunks/close-JTTGW7TS.js +0 -13
- package/dist/cli-bundle/chunks/context-4N7GYTVQ.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-AOBNEBVT.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-DXCWXOSP.js.map +0 -1
- package/dist/cli-bundle/chunks/create-JAPLFDGJ.js +0 -27
- package/dist/cli-bundle/chunks/health-CS5RNTJX.js.map +0 -1
- package/dist/cli-bundle/chunks/health-KCRVYIYY.js.map +0 -7
- package/dist/cli-bundle/chunks/history-6624XISO.js +0 -20
- package/dist/cli-bundle/chunks/history-redact-ZRQTI7NB.js +0 -19
- package/dist/cli-bundle/chunks/init-ZVE2HMKK.js +0 -17
- package/dist/cli-bundle/chunks/list-OO5P472O.js +0 -19
- package/dist/cli-bundle/chunks/register-list-query-6RA24SIZ.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-IO3RR5K6.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-KVFUXCAZ.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-VV2SC2KL.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-DFNVRSJ5.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-TAUUTRJ4.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-F4ALFV4D.js +0 -17
- package/dist/cli-bundle/chunks/test-PPOLRIBA.js +0 -32
- package/dist/cli-bundle/chunks/update-MCPCPMHV.js +0 -25
- package/dist/cli-bundle/chunks/update-O7TBOUVQ.js +0 -21
- /package/dist/cli-bundle/chunks/{activity-RUJATACW.js.map → activity-XADJOG6G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-HF3VJYKH.js.map → activity-XZIUPGZH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-E7AJ5RTR.js.map → append-JYWO4P7W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-CWQZBUWV.js.map → append-KG55G7S3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ENCVPOID.js.map → chunk-3SLOMKCJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-F2REA7VW.js.map → chunk-4JCSYR6F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CAXUGAAF.js.map → chunk-4YFAGDRH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-U3Z4OCZC.js.map → chunk-5SCT2JCT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NHRZSYAA.js.map → chunk-73ZPG2I3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A5342JVL.js.map → chunk-7RIT3OCD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7CR4GAYN.js.map → chunk-ATEES5SX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FHUI7AXS.js.map → chunk-AVGHVVF7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-42IULX44.js.map → chunk-CCX4RSYZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EFRHTZO4.js.map → chunk-CW6E4NAT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JN3BT7UY.js.map → chunk-DY6C42S6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PUSOAQCR.js.map → chunk-E5DUIJA4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-E7LOIIFP.js.map → chunk-ESANVZF4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YI6W2DBN.js.map → chunk-F75JSIOZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6IGTNFE3.js.map → chunk-FDH2X65L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZPXDD6RQ.js.map → chunk-I53JBTJW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-23WNCJBA.js.map → chunk-I7NYDZDV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SAUXUI6U.js.map → chunk-IUKD4W6Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RKCJ2JMA.js.map → chunk-OASDW5UI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JEGFLKSI.js.map → chunk-OLKBSY4N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XEOO6K5J.js.map → chunk-P5BJOMBB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-P2NVFE4L.js.map → chunk-P5U5EOMA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AM2AXVFS.js.map → chunk-PSD7F7DX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VDVVOLR6.js.map → chunk-QJMGRZO2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-T7NWFVOA.js.map → chunk-QNJSITCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MNXJ6YDO.js.map → chunk-RXAP6JL5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5MMLINZB.js.map → chunk-S26FESD4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OPYA2HIU.js.map → chunk-TK5VZFHY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4TJWRPIH.js.map → chunk-TNAP7EJX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5ATRWEZO.js.map → chunk-UUWGCWBU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YX5LAKFJ.js.map → chunk-VAOUX6TK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WCWIDJII.js.map → chunk-VPEAS7PS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RE2JQJZJ.js.map → chunk-VSRZRLG3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PW7C262O.js.map → chunk-WUNFKP7M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NUGAWYEN.js.map → chunk-XTKJSVWH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KDX6VC3P.js.map → chunk-XUC4C4PT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-44JP4PYY.js.map → chunk-Y3YKK7CY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KTVXLI54.js.map → chunk-YW6Q3RYZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-I3UILOUU.js.map → chunk-ZLMIWZUG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FKH7K6YP.js.map → chunk-ZMW77VWV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-UXFGCF3P.js.map → claim-2RDYMCTP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-RV6WYUF7.js.map → claim-MJ7DZFC3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-JTTGW7TS.js.map → close-4FMAPEMY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-O4JK2JKD.js.map → close-XLEKIQSW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-EQO4TPIE.js.map → close-many-AOD4HSAZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-SRDBV3SI.js.map → close-many-XKAQY5CQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-TTZUIB2O.js.map → comments-B4RWWDJT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-OMB7YE27.js.map → comments-RN5TG4ZN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-5VPR42A6.js.map → config-3JXJ3XZ7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-NNLXVGVC.js.map → config-FZ4UDC4B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-5NM3SVJA.js.map → copy-ALU5WMHA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-XSYEQTLA.js.map → copy-FWIVTLBO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-FCCAATQV.js.map → create-IFA26O2I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-JAPLFDGJ.js.map → create-JVXYHYH4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-5JFP6OG7.js.map → delete-IYTIYAJS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-PQXJQXQ7.js.map → delete-Y2SGJBGY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-S5322EOQ.js.map → deps-6TSPOSGU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-XXKBOQUA.js.map → deps-CZ4PTVXU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-C7CCVWAJ.js.map → docs-5WMBVQT2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-DZRPAW5S.js.map → docs-MB53UJAJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-CSHP6FZX.js.map → extension-Q34OEWO5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-XNNVUVAY.js.map → extension-WH2FOIOZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-UPCNKEIZ.js.map → files-DLB5LJEP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-OBWYYPKM.js.map → files-GVMNVLCB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-FA2ONELT.js.map → gc-2WEPW6D6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-KXK6KBRN.js.map → gc-4Z3IKHAZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-PNTSONGB.js.map → get-PCHS7RA6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-FLHYTOBA.js.map → get-QARTE6BL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-COQTPBEU.js.map → history-7WUAEWHW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-6624XISO.js.map → history-L2FQFRTU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-PVS2A3FS.js.map → history-compact-3EJ3L2O7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-66PSRYL3.js.map → history-compact-LW27IPFK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-DCXAWGTF.js.map → history-redact-G72A4EJ4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-ZRQTI7NB.js.map → history-redact-QWQCX5DZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-SEQDFTGW.js.map → history-repair-KVPFJKOS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-TA3NRIFO.js.map → history-repair-RUGKD3YR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-ZVE2HMKK.js.map → init-4BKRHGWW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-IQJE3EKJ.js.map → init-S5WEGUJY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-XC6EMW5E.js.map → learnings-HQXSSKZ5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-RJPGH2ME.js.map → learnings-XK3P4ZDR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-NJV6WBT4.js.map → list-6CL3XFT6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-OO5P472O.js.map → list-BYNN4ZEO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-2KWHADK3.js.map → notes-5T6P7C5V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-FNCDMZW2.js.map → notes-U5FZCSBT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-CYK2P5PD.js.map → plan-FQLMJRLZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-MQO5JTSV.js.map → plan-VNUG3WZZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-X2R5CFDV.js.map → register-setup-G4QYI3RX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-GAQZZRUA.js.map → register-setup-IKX5524L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-F4ALFV4D.js.map → restore-CHIOQAQL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-E3GZKRRK.js.map → restore-M6AFHMV4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-3CPFLDAY.js.map → schema-76HDZJCC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-7EHBPNXM.js.map → schema-AINZ2IMM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-OBZVYJJ2.js.map → search-JMLFQEPJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-2T3NCCUR.js.map → search-NL3TSCYB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-6LVK4JER.js.map → stats-BKXCBIGT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-ULGQACF7.js.map → stats-UBD56TGK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-HHKRTMZA.js.map → telemetry-N454RHG5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-6G27FLCP.js.map → telemetry-ZJXK3H7X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-2PP4YBV6.js.map → test-BQAKIXAT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-PPOLRIBA.js.map → test-O74JFUH5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-6Z272JRI.js.map → test-all-7LV3I6S5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-NETGVNM6.js.map → test-all-TDYCCBA4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-M24WA6TI.js.map → test-runs-E64M6XS3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-CRPQVMMG.js.map → test-runs-LXZLULCI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-O7TBOUVQ.js.map → update-2EVXOC7V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-MCPCPMHV.js.map → update-5A2B6QYB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-JSRF5EH5.js.map → update-many-TUGU5YXQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-Y3HOL7WA.js.map → update-many-V4LA3C4H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-5RTQVKKE.js.map → upgrade-37F7JKES.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-ECB6GH3M.js.map → upgrade-L32JA4TZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{validate-MCNMAXVA.js.map → validate-EQTT6WVX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{validate-J6Q444SD.js.map → validate-XN4I4DPL.js.map} +0 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
|
|
2
|
+
!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]="89480c78-9cf5-55e5-a881-aaa130d9c509")}catch(e){}}();
|
|
3
|
+
import { EXIT_CODE } from "../shared/constants.js";
|
|
4
|
+
import { PmCliError } from "../shared/errors.js";
|
|
5
|
+
const MAX_SELECTOR_ENTRY_LABEL_LENGTH = 100;
|
|
6
|
+
export function parseOnlyIndexValue(raw, optionName = "--only-index") {
|
|
7
|
+
const value = typeof raw === "number" ? raw : Number(String(raw).trim());
|
|
8
|
+
if (!Number.isInteger(value) || value < 1) {
|
|
9
|
+
throw new PmCliError(`${optionName} requires a 1-based integer index into the linked-test list (got "${raw}"). Use pm test <id> --list to inspect positions.`, EXIT_CODE.USAGE);
|
|
10
|
+
}
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
function summarizeSelectorEntry(entry) {
|
|
14
|
+
const label = entry.command ?? entry.path ?? "<no command>";
|
|
15
|
+
const normalized = label.replaceAll(/\s+/g, " ").trim() || "<no command>";
|
|
16
|
+
if (normalized.length <= MAX_SELECTOR_ENTRY_LABEL_LENGTH) {
|
|
17
|
+
return normalized;
|
|
18
|
+
}
|
|
19
|
+
return `${normalized.slice(0, MAX_SELECTOR_ENTRY_LABEL_LENGTH - 3)}...`;
|
|
20
|
+
}
|
|
21
|
+
export function describeLinkedTestEntries(tests) {
|
|
22
|
+
return tests.map((entry, index) => `${index + 1}. ${summarizeSelectorEntry(entry)}`).join("; ");
|
|
23
|
+
}
|
|
24
|
+
function activeSelectorKinds(selector) {
|
|
25
|
+
const kinds = [];
|
|
26
|
+
if (selector.match !== undefined) {
|
|
27
|
+
kinds.push("match");
|
|
28
|
+
}
|
|
29
|
+
if (selector.onlyIndex !== undefined) {
|
|
30
|
+
kinds.push("only-index");
|
|
31
|
+
}
|
|
32
|
+
if (selector.onlyLast === true) {
|
|
33
|
+
kinds.push("only-last");
|
|
34
|
+
}
|
|
35
|
+
return kinds;
|
|
36
|
+
}
|
|
37
|
+
function entryMatchesSubstring(entry, needle) {
|
|
38
|
+
const command = entry.command?.toLowerCase() ?? "";
|
|
39
|
+
const entryPath = entry.path?.toLowerCase() ?? "";
|
|
40
|
+
return command.includes(needle) || entryPath.includes(needle);
|
|
41
|
+
}
|
|
42
|
+
export function resolveLinkedTestRunSelection(tests, selector) {
|
|
43
|
+
const kinds = activeSelectorKinds(selector);
|
|
44
|
+
if (kinds.length === 0) {
|
|
45
|
+
return {
|
|
46
|
+
selector: null,
|
|
47
|
+
requested: null,
|
|
48
|
+
selected: tests,
|
|
49
|
+
selected_indexes: tests.map((_, index) => index + 1),
|
|
50
|
+
selected_count: tests.length,
|
|
51
|
+
skipped_count: 0,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if (kinds.length > 1) {
|
|
55
|
+
throw new PmCliError(`Combine at most one linked-test selector per run: ${kinds.map((kind) => `--${kind}`).join(" and ")} were provided. Pick one of --match, --only-index, --only-last.`, EXIT_CODE.USAGE);
|
|
56
|
+
}
|
|
57
|
+
const kind = kinds[0];
|
|
58
|
+
if (tests.length === 0) {
|
|
59
|
+
throw new PmCliError(`--${kind} matched no linked tests because this item has none. Add one first with --add, --command, or --add-json.`, EXIT_CODE.USAGE);
|
|
60
|
+
}
|
|
61
|
+
if (kind === "match") {
|
|
62
|
+
const needle = (selector.match ?? "").trim().toLowerCase();
|
|
63
|
+
if (needle.length === 0) {
|
|
64
|
+
throw new PmCliError("--match requires a non-empty substring to match against linked-test command/path values", EXIT_CODE.USAGE);
|
|
65
|
+
}
|
|
66
|
+
const selectedIndexes = [];
|
|
67
|
+
const selected = [];
|
|
68
|
+
for (let index = 0; index < tests.length; index += 1) {
|
|
69
|
+
if (entryMatchesSubstring(tests[index], needle)) {
|
|
70
|
+
selected.push(tests[index]);
|
|
71
|
+
selectedIndexes.push(index + 1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (selected.length === 0) {
|
|
75
|
+
throw new PmCliError(`--match "${selector.match}" matched none of the ${tests.length} linked test(s). Available entries: ${describeLinkedTestEntries(tests)}`, EXIT_CODE.USAGE);
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
selector: "match",
|
|
79
|
+
requested: selector.match ?? "",
|
|
80
|
+
selected,
|
|
81
|
+
selected_indexes: selectedIndexes,
|
|
82
|
+
selected_count: selected.length,
|
|
83
|
+
skipped_count: tests.length - selected.length,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (kind === "only-index") {
|
|
87
|
+
const index = parseOnlyIndexValue(selector.onlyIndex);
|
|
88
|
+
if (index > tests.length) {
|
|
89
|
+
throw new PmCliError(`--only-index ${index} is out of range: this item has ${tests.length} linked test(s). Available entries: ${describeLinkedTestEntries(tests)}`, EXIT_CODE.USAGE);
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
selector: "only-index",
|
|
93
|
+
requested: String(index),
|
|
94
|
+
selected: [tests[index - 1]],
|
|
95
|
+
selected_indexes: [index],
|
|
96
|
+
selected_count: 1,
|
|
97
|
+
skipped_count: tests.length - 1,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
selector: "only-last",
|
|
102
|
+
requested: "last",
|
|
103
|
+
selected: [tests[tests.length - 1]],
|
|
104
|
+
selected_indexes: [tests.length],
|
|
105
|
+
selected_count: 1,
|
|
106
|
+
skipped_count: tests.length - 1,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=run-selectors.js.map
|
|
110
|
+
//# debugId=89480c78-9cf5-55e5-a881-aaa130d9c509
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-selectors.js","sources":["core/test/run-selectors.ts"],"sourceRoot":"/","sourcesContent":["import { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport type { LinkedTest } from \"../../types.js\";\n\n/**\n * Pure selection logic for `pm test --run` selectors (pm-p86h / GitHub #194).\n *\n * Selectors pick WHICH linked tests execute without mutating item metadata:\n * - `--match <substring>`: case-insensitive substring on command/path.\n * - `--only-index <n>`: 1-based index into the `--list` order.\n * - `--only-last`: most recently added entry (last in `--list` order).\n */\n\nexport type LinkedTestSelectorKind = \"match\" | \"only-index\" | \"only-last\";\n\nexport interface LinkedTestRunSelector {\n match?: string;\n onlyIndex?: number;\n onlyLast?: boolean;\n}\n\nexport interface LinkedTestRunSelection {\n selector: LinkedTestSelectorKind | null;\n requested: string | null;\n selected: LinkedTest[];\n /** 1-based positions of selected entries in the original `--list` order. */\n selected_indexes: number[];\n selected_count: number;\n skipped_count: number;\n}\n\nconst MAX_SELECTOR_ENTRY_LABEL_LENGTH = 100;\n\nexport function parseOnlyIndexValue(raw: string | number, optionName = \"--only-index\"): number {\n const value = typeof raw === \"number\" ? raw : Number(String(raw).trim());\n if (!Number.isInteger(value) || value < 1) {\n throw new PmCliError(\n `${optionName} requires a 1-based integer index into the linked-test list (got \"${raw}\"). Use pm test <id> --list to inspect positions.`,\n EXIT_CODE.USAGE,\n );\n }\n return value;\n}\n\nfunction summarizeSelectorEntry(entry: LinkedTest): string {\n const label = entry.command ?? entry.path ?? \"<no command>\";\n const normalized = label.replaceAll(/\\s+/g, \" \").trim() || \"<no command>\";\n if (normalized.length <= MAX_SELECTOR_ENTRY_LABEL_LENGTH) {\n return normalized;\n }\n return `${normalized.slice(0, MAX_SELECTOR_ENTRY_LABEL_LENGTH - 3)}...`;\n}\n\nexport function describeLinkedTestEntries(tests: LinkedTest[]): string {\n return tests.map((entry, index) => `${index + 1}. ${summarizeSelectorEntry(entry)}`).join(\"; \");\n}\n\nfunction activeSelectorKinds(selector: LinkedTestRunSelector): LinkedTestSelectorKind[] {\n const kinds: LinkedTestSelectorKind[] = [];\n if (selector.match !== undefined) {\n kinds.push(\"match\");\n }\n if (selector.onlyIndex !== undefined) {\n kinds.push(\"only-index\");\n }\n if (selector.onlyLast === true) {\n kinds.push(\"only-last\");\n }\n return kinds;\n}\n\nfunction entryMatchesSubstring(entry: LinkedTest, needle: string): boolean {\n const command = entry.command?.toLowerCase() ?? \"\";\n const entryPath = entry.path?.toLowerCase() ?? \"\";\n return command.includes(needle) || entryPath.includes(needle);\n}\n\nexport function resolveLinkedTestRunSelection(tests: LinkedTest[], selector: LinkedTestRunSelector): LinkedTestRunSelection {\n const kinds = activeSelectorKinds(selector);\n if (kinds.length === 0) {\n return {\n selector: null,\n requested: null,\n selected: tests,\n selected_indexes: tests.map((_, index) => index + 1),\n selected_count: tests.length,\n skipped_count: 0,\n };\n }\n if (kinds.length > 1) {\n throw new PmCliError(\n `Combine at most one linked-test selector per run: ${kinds.map((kind) => `--${kind}`).join(\" and \")} were provided. Pick one of --match, --only-index, --only-last.`,\n EXIT_CODE.USAGE,\n );\n }\n const kind = kinds[0];\n if (tests.length === 0) {\n throw new PmCliError(\n `--${kind} matched no linked tests because this item has none. Add one first with --add, --command, or --add-json.`,\n EXIT_CODE.USAGE,\n );\n }\n if (kind === \"match\") {\n const needle = (selector.match ?? \"\").trim().toLowerCase();\n if (needle.length === 0) {\n throw new PmCliError(\"--match requires a non-empty substring to match against linked-test command/path values\", EXIT_CODE.USAGE);\n }\n const selectedIndexes: number[] = [];\n const selected: LinkedTest[] = [];\n for (let index = 0; index < tests.length; index += 1) {\n if (entryMatchesSubstring(tests[index], needle)) {\n selected.push(tests[index]);\n selectedIndexes.push(index + 1);\n }\n }\n if (selected.length === 0) {\n throw new PmCliError(\n `--match \"${selector.match}\" matched none of the ${tests.length} linked test(s). Available entries: ${describeLinkedTestEntries(tests)}`,\n EXIT_CODE.USAGE,\n );\n }\n return {\n selector: \"match\",\n requested: selector.match ?? \"\",\n selected,\n selected_indexes: selectedIndexes,\n selected_count: selected.length,\n skipped_count: tests.length - selected.length,\n };\n }\n if (kind === \"only-index\") {\n const index = parseOnlyIndexValue(selector.onlyIndex as number);\n if (index > tests.length) {\n throw new PmCliError(\n `--only-index ${index} is out of range: this item has ${tests.length} linked test(s). Available entries: ${describeLinkedTestEntries(tests)}`,\n EXIT_CODE.USAGE,\n );\n }\n return {\n selector: \"only-index\",\n requested: String(index),\n selected: [tests[index - 1]],\n selected_indexes: [index],\n selected_count: 1,\n skipped_count: tests.length - 1,\n };\n }\n return {\n selector: \"only-last\",\n requested: \"last\",\n selected: [tests[tests.length - 1]],\n selected_indexes: [tests.length],\n selected_count: 1,\n skipped_count: tests.length - 1,\n };\n}\n"],"names":[],"mappings":"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","debugId":"89480c78-9cf5-55e5-a881-aaa130d9c509"}
|
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]="5d14434e-fc25-502b-9aa8-8efd7ab7fd6a")}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,7 +18,8 @@ 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 {
|
|
21
|
+
import { clearWorkspaceContractsCache } from "../sdk/runtime.js";
|
|
22
|
+
import { TOOLS } from "./tool-definitions.js";
|
|
21
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, runInit, runLearnings, runList, runNotes, runPlan, runRelease, runSchemaAddStatus, runSchemaAddType, runSchemaList, runSchemaRemoveStatus, runSchemaRemoveType, runSchemaShow, runSchemaShowStatus, runSearch, runStats, runTelemetry, runTest, runTestAll, runUpdate, runUpdateMany, runUpgrade, runValidate, } from "../cli/commands/index.js";
|
|
22
24
|
const PM_PACKAGE_ROOT_ENV = "PM_CLI_PACKAGE_ROOT";
|
|
23
25
|
function resolvePmPackageRoot() {
|
|
@@ -29,249 +31,9 @@ if (typeof process.env[PM_PACKAGE_ROOT_ENV] !== "string" || process.env[PM_PACKA
|
|
|
29
31
|
// Reflect the real package.json version so agents/telemetry can identify the
|
|
30
32
|
// build serving requests (was hard-coded "1.0.0"; see pm-2nvw).
|
|
31
33
|
const PM_MCP_SERVER_VERSION = resolvePmCliVersion(import.meta.url, ["../.."]) ?? "0.0.0";
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
cwd: {
|
|
36
|
-
type: "string",
|
|
37
|
-
description: "Workspace directory to run the native pm operation in. Defaults to the MCP server process cwd.",
|
|
38
|
-
},
|
|
39
|
-
path: {
|
|
40
|
-
type: "string",
|
|
41
|
-
description: "Optional pm data root, equivalent to PM_PATH/global --path. Leave unset for real repository tracking.",
|
|
42
|
-
},
|
|
43
|
-
author: {
|
|
44
|
-
type: "string",
|
|
45
|
-
description: "Mutation author. Defaults to PM_AUTHOR or pm settings when supported by the underlying operation.",
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
additionalProperties: true,
|
|
49
|
-
};
|
|
50
|
-
const idSchema = {
|
|
51
|
-
type: "string",
|
|
52
|
-
description: "pm item id, for example pm-abc1.",
|
|
53
|
-
};
|
|
54
|
-
// pm-fd8n: derive the pm_run action enumeration from the canonical
|
|
55
|
-
// PM_TOOL_ACTIONS contract instead of a hand-maintained prose list, so the
|
|
56
|
-
// MCP-facing description can never drift from the actual supported actions.
|
|
57
|
-
const PM_RUN_ACTION_DESCRIPTION = `Operation name (one of): ${PM_TOOL_ACTIONS.join(", ")}. ` +
|
|
58
|
-
"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.";
|
|
59
|
-
const LIST_TOP_LEVEL_OPTION_PROPERTIES = {
|
|
60
|
-
status: { type: "string", description: "Alias for options.status." },
|
|
61
|
-
type: { type: "string", description: "Alias for options.type." },
|
|
62
|
-
tag: { type: "string", description: "Alias for options.tag." },
|
|
63
|
-
priority: { type: "string", description: "Alias for options.priority." },
|
|
64
|
-
limit: { type: ["string", "number"], description: "Alias for options.limit." },
|
|
65
|
-
offset: { type: ["string", "number"], description: "Alias for options.offset." },
|
|
66
|
-
};
|
|
67
|
-
const SEARCH_TOP_LEVEL_OPTION_PROPERTIES = {
|
|
68
|
-
mode: { type: "string", description: "Alias for options.mode." },
|
|
69
|
-
status: { type: "string", description: "Alias for options.status." },
|
|
70
|
-
type: { type: "string", description: "Alias for options.type." },
|
|
71
|
-
tag: { type: "string", description: "Alias for options.tag." },
|
|
72
|
-
priority: { type: "string", description: "Alias for options.priority." },
|
|
73
|
-
limit: { type: ["string", "number"], description: "Alias for options.limit." },
|
|
74
|
-
};
|
|
75
|
-
function objectSchema(properties, required = []) {
|
|
76
|
-
return {
|
|
77
|
-
...TOOL_SCHEMA_BASE,
|
|
78
|
-
properties: {
|
|
79
|
-
...TOOL_SCHEMA_BASE.properties,
|
|
80
|
-
...properties,
|
|
81
|
-
},
|
|
82
|
-
required,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
const TOOLS = [
|
|
86
|
-
{
|
|
87
|
-
name: "pm_run",
|
|
88
|
-
description: "Run any supported pm operation natively through the pm library. Use this for commands not covered by narrower pm_* tools.",
|
|
89
|
-
inputSchema: objectSchema({
|
|
90
|
-
action: {
|
|
91
|
-
type: "string",
|
|
92
|
-
description: PM_RUN_ACTION_DESCRIPTION,
|
|
93
|
-
},
|
|
94
|
-
id: idSchema,
|
|
95
|
-
query: { type: "string", description: "Search query for action=search." },
|
|
96
|
-
reason: { type: "string", description: "Close reason for action=close." },
|
|
97
|
-
force: { type: "boolean", description: "Force ownership/terminal-state override when supported." },
|
|
98
|
-
subcommand: {
|
|
99
|
-
type: "string",
|
|
100
|
-
enum: ["list", "show", "show-status", "add-type", "remove-type", "add-status", "remove-status"],
|
|
101
|
-
description: "Schema subcommand when action=schema.",
|
|
102
|
-
},
|
|
103
|
-
name: {
|
|
104
|
-
type: "string",
|
|
105
|
-
description: "Item type name for action=schema show/add-type/remove-type, or status id for show-status/add-status/remove-status.",
|
|
106
|
-
},
|
|
107
|
-
description: {
|
|
108
|
-
type: "string",
|
|
109
|
-
description: "Custom item type or status description for action=schema add-type/add-status.",
|
|
110
|
-
},
|
|
111
|
-
defaultStatus: { type: "string", description: "Default status for action=schema add-type." },
|
|
112
|
-
folder: { type: "string", description: "Storage folder for action=schema add-type." },
|
|
113
|
-
alias: {
|
|
114
|
-
type: "array",
|
|
115
|
-
items: { type: "string" },
|
|
116
|
-
description: "Aliases for action=schema add-type/add-status.",
|
|
117
|
-
},
|
|
118
|
-
role: {
|
|
119
|
-
type: "array",
|
|
120
|
-
items: { type: "string" },
|
|
121
|
-
description: "Lifecycle roles for action=schema add-status: draft, active, blocked, terminal, terminal_done, terminal_canceled, default_open, default_close, default_cancel.",
|
|
122
|
-
},
|
|
123
|
-
order: { type: "number", description: "Display/sort order for action=schema add-status." },
|
|
124
|
-
options: { type: "object", description: "Underlying pm command options using camelCase keys." },
|
|
125
|
-
fullChangedFields: {
|
|
126
|
-
type: "boolean",
|
|
127
|
-
description: "For mutation actions, return the full changed_fields array instead of the default changed_field_count.",
|
|
128
|
-
},
|
|
129
|
-
}, ["action"]),
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
name: "pm_context",
|
|
133
|
-
description: "Return the agent-oriented project context snapshot.",
|
|
134
|
-
inputSchema: objectSchema({ options: { type: "object" } }),
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
name: "pm_search",
|
|
138
|
-
description: "Search pm items with keyword, semantic, or hybrid search. " +
|
|
139
|
-
"Defaults to a compact projection for token efficiency. " +
|
|
140
|
-
"Pass options.mode=keyword|semantic|hybrid, options.limit=N to cap hits, " +
|
|
141
|
-
"options.fields='id,title,score' for a custom projection, or options.full=true for full item bodies (can be large).",
|
|
142
|
-
inputSchema: objectSchema({ query: { type: "string" }, options: { type: "object" }, ...SEARCH_TOP_LEVEL_OPTION_PROPERTIES }, ["query"]),
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
name: "pm_list",
|
|
146
|
-
description: "List pm items with status/type/tag/priority filters. Defaults to compact projection for token efficiency. " +
|
|
147
|
-
"options.status accepts CSV (open,in_progress). " +
|
|
148
|
-
"Pass options.compact=false or options.includeBody=true for full bodies/comments. " +
|
|
149
|
-
"Pass options.brief=true for ultra-terse (id/status/type/title only). " +
|
|
150
|
-
"Pass options.fields='id,title,priority' for custom projection. " +
|
|
151
|
-
"Pass options.limit=N to cap row count.",
|
|
152
|
-
inputSchema: objectSchema({ options: { type: "object" }, ...LIST_TOP_LEVEL_OPTION_PROPERTIES }),
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
name: "pm_get",
|
|
156
|
-
description: "Read one pm item. Pass options.depth='brief' or options.fields='id,title,status' for low-token inspection.",
|
|
157
|
-
inputSchema: objectSchema({
|
|
158
|
-
id: idSchema,
|
|
159
|
-
options: { type: "object", description: "Get options such as depth=brief|standard|deep|full or fields=id,title,status." },
|
|
160
|
-
}, ["id"]),
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
name: "pm_create",
|
|
164
|
-
description: "Create a pm item natively and write pm history. " +
|
|
165
|
-
"Output is compact by default (changed_fields replaced with changed_field_count for token efficiency); pass fullChangedFields=true for the full changed_fields array.",
|
|
166
|
-
inputSchema: objectSchema({
|
|
167
|
-
fullChangedFields: { type: "boolean", description: "Return full changed_fields instead of changed_field_count." },
|
|
168
|
-
options: { type: "object", description: "Create options. title and description are required." },
|
|
169
|
-
}, ["options"]),
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
name: "pm_copy",
|
|
173
|
-
description: "Copy an existing pm item into a new id while resetting lifecycle fields. " +
|
|
174
|
-
"Output is compact by default (changed_fields replaced with changed_field_count); pass fullChangedFields=true for the full changed_fields array.",
|
|
175
|
-
inputSchema: objectSchema({
|
|
176
|
-
id: idSchema,
|
|
177
|
-
fullChangedFields: { type: "boolean", description: "Return full changed_fields instead of changed_field_count." },
|
|
178
|
-
options: { type: "object", description: "Copy options such as title override, author, and message." },
|
|
179
|
-
}, ["id"]),
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
name: "pm_update",
|
|
183
|
-
description: "Update pm item metadata/body/dependencies/log seeds natively. " +
|
|
184
|
-
"Output is compact by default (changed_fields replaced with changed_field_count); pass fullChangedFields=true for the full changed_fields delta.",
|
|
185
|
-
inputSchema: objectSchema({
|
|
186
|
-
id: idSchema,
|
|
187
|
-
fullChangedFields: { type: "boolean", description: "Return full changed_fields instead of changed_field_count." },
|
|
188
|
-
options: { type: "object" },
|
|
189
|
-
}, ["id", "options"]),
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
name: "pm_claim",
|
|
193
|
-
description: "Claim a pm item.",
|
|
194
|
-
inputSchema: objectSchema({ id: idSchema, force: { type: "boolean" }, options: { type: "object" } }, ["id"]),
|
|
195
|
-
},
|
|
196
|
-
{
|
|
197
|
-
name: "pm_release",
|
|
198
|
-
description: "Release a pm item claim.",
|
|
199
|
-
inputSchema: objectSchema({ id: idSchema, force: { type: "boolean" }, options: { type: "object" } }, ["id"]),
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
name: "pm_close",
|
|
203
|
-
description: "Close a pm item with optional close reason and optional close validation (reason requirement follows governance settings). " +
|
|
204
|
-
"Output is compact by default (changed_fields replaced with changed_field_count); pass fullChangedFields=true for the full changed_fields array.",
|
|
205
|
-
inputSchema: objectSchema({
|
|
206
|
-
id: idSchema,
|
|
207
|
-
reason: { type: "string", description: "Close reason text when provided or required by governance settings." },
|
|
208
|
-
fullChangedFields: { type: "boolean", description: "Return full changed_fields instead of changed_field_count." },
|
|
209
|
-
options: { type: "object" },
|
|
210
|
-
}, ["id"]),
|
|
211
|
-
},
|
|
212
|
-
{
|
|
213
|
-
name: "pm_comments",
|
|
214
|
-
description: "List or add comments on a pm item. Use options.add to append. " +
|
|
215
|
-
"List calls default to the most recent 20 comments with total_count/has_more metadata for token efficiency. " +
|
|
216
|
-
"Pass options.limit=N to choose a page size, options.limit=0 for summary-only metadata, or options.full=true for full history.",
|
|
217
|
-
inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
name: "pm_files",
|
|
221
|
-
description: "List, add, remove, audit, or validate linked files for a pm item.",
|
|
222
|
-
inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
|
|
223
|
-
},
|
|
224
|
-
{
|
|
225
|
-
name: "pm_docs",
|
|
226
|
-
description: "List, add, or remove linked docs for a pm item.",
|
|
227
|
-
inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
|
|
228
|
-
},
|
|
229
|
-
{
|
|
230
|
-
name: "pm_notes",
|
|
231
|
-
description: "List or add structured notes on a pm item. Use options.add to append a note; omit it to list existing notes.",
|
|
232
|
-
inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
name: "pm_learnings",
|
|
236
|
-
description: "List or add learnings on a pm item. Use options.add to capture a learning/insight; omit it to list existing learnings.",
|
|
237
|
-
inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
|
|
238
|
-
},
|
|
239
|
-
{
|
|
240
|
-
name: "pm_deps",
|
|
241
|
-
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.",
|
|
242
|
-
inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
|
|
243
|
-
},
|
|
244
|
-
{
|
|
245
|
-
name: "pm_test",
|
|
246
|
-
description: "List, add, remove, or run linked tests for a pm item.",
|
|
247
|
-
inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, ["id"]),
|
|
248
|
-
},
|
|
249
|
-
{
|
|
250
|
-
name: "pm_validate",
|
|
251
|
-
description: "Run pm validation checks.",
|
|
252
|
-
inputSchema: objectSchema({ options: { type: "object" } }),
|
|
253
|
-
},
|
|
254
|
-
{
|
|
255
|
-
name: "pm_health",
|
|
256
|
-
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.",
|
|
257
|
-
inputSchema: objectSchema({ options: { type: "object" } }),
|
|
258
|
-
},
|
|
259
|
-
{
|
|
260
|
-
name: "pm_contracts",
|
|
261
|
-
description: "Inspect pm command, flag, schema, and availability contracts.",
|
|
262
|
-
inputSchema: objectSchema({ options: { type: "object" } }),
|
|
263
|
-
},
|
|
264
|
-
{
|
|
265
|
-
name: "pm_plan",
|
|
266
|
-
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.",
|
|
267
|
-
inputSchema: objectSchema({
|
|
268
|
-
id: { type: "string", description: "Plan id (required for all subcommands except create)." },
|
|
269
|
-
stepRef: { type: "string", description: "Step id or order for step lifecycle subcommands." },
|
|
270
|
-
reorderTo: { type: "number", description: "New order for reorder-step." },
|
|
271
|
-
options: { type: "object", description: "Plan options including subcommand, stepRef, stepStatus, link, depth, etc." },
|
|
272
|
-
}),
|
|
273
|
-
},
|
|
274
|
-
];
|
|
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.
|
|
275
37
|
// pm-qxwu: TOOL_SCHEMA_BASE keeps additionalProperties:true so legitimate
|
|
276
38
|
// passthrough keeps working, which means a typo'd top-level arg (e.g.
|
|
277
39
|
// "fullChangedField" missing the trailing "s") is silently swallowed and the
|
|
@@ -364,7 +126,7 @@ function globalOptions(args) {
|
|
|
364
126
|
noPager: true,
|
|
365
127
|
};
|
|
366
128
|
}
|
|
367
|
-
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"]);
|
|
368
130
|
const SCALAR_TO_ARRAY_FIELDS = new Set([
|
|
369
131
|
"comment",
|
|
370
132
|
"note",
|
|
@@ -441,6 +203,19 @@ function optionsWithAuthor(args, action) {
|
|
|
441
203
|
hoistKey("priority");
|
|
442
204
|
hoistKey("limit");
|
|
443
205
|
}
|
|
206
|
+
else if (action === "create") {
|
|
207
|
+
hoistKey("allowMissingParent");
|
|
208
|
+
}
|
|
209
|
+
else if (action === "close") {
|
|
210
|
+
hoistKey("duplicateOf");
|
|
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
|
+
}
|
|
444
219
|
const options = normalizeMcpOptionsArrays({ ...hoistedTopLevel, ...baseOptions }, action);
|
|
445
220
|
const author = readString(args, "author");
|
|
446
221
|
return author && options.author === undefined ? { ...options, author } : options;
|
|
@@ -481,6 +256,18 @@ function extensionOptionsFromArgs(args, options) {
|
|
|
481
256
|
delete normalizedOptions.args;
|
|
482
257
|
return normalizedOptions;
|
|
483
258
|
}
|
|
259
|
+
// pm-bl6m: runDynamicExtensionAction mutates the process-global active extension
|
|
260
|
+
// registries (set globals -> run handler -> clear globals in a finally). The stdio
|
|
261
|
+
// transport already processes JSON-RPC lines sequentially, but handleRequest is a
|
|
262
|
+
// public entry point (tests, future concurrent transports) — if two native-action
|
|
263
|
+
// requests ever ran concurrently, the newer request would overwrite the globals
|
|
264
|
+
// mid-flight and whichever finished first would clear them out from under the
|
|
265
|
+
// other (its lazily-read hooks/overrides would silently vanish). Serialize the
|
|
266
|
+
// whole activation cycle (load -> activate -> set -> run -> clear -> deactivate)
|
|
267
|
+
// on a dedicated FIFO queue so the critical section can never interleave. Full
|
|
268
|
+
// request-scoped registry plumbing remains possible later if true intra-server
|
|
269
|
+
// concurrency is ever needed.
|
|
270
|
+
const dynamicExtensionActionQueue = createSerialQueue();
|
|
484
271
|
async function runDynamicExtensionAction(action, args, options, global) {
|
|
485
272
|
if (global.noExtensions) {
|
|
486
273
|
throw new PmCliError(`Unsupported native pm action: ${action}`, 64);
|
|
@@ -489,6 +276,19 @@ async function runDynamicExtensionAction(action, args, options, global) {
|
|
|
489
276
|
if (!(await pathExists(getSettingsPath(pmRoot)))) {
|
|
490
277
|
throw new PmCliError(`Unsupported native pm action: ${action}`, 64);
|
|
491
278
|
}
|
|
279
|
+
return dynamicExtensionActionQueue.enqueue(async () => {
|
|
280
|
+
try {
|
|
281
|
+
return await runDynamicExtensionActionExclusively(action, args, options, global, pmRoot);
|
|
282
|
+
}
|
|
283
|
+
finally {
|
|
284
|
+
clearWorkspaceContractsCache();
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
// Body of the dynamic-action activation cycle. Must only ever run under
|
|
289
|
+
// dynamicExtensionActionQueue (see runDynamicExtensionAction above): it is the
|
|
290
|
+
// exclusive owner of the process-global active extension registries while it runs.
|
|
291
|
+
async function runDynamicExtensionActionExclusively(action, args, options, global, pmRoot) {
|
|
492
292
|
const settings = await readSettings(pmRoot);
|
|
493
293
|
const loadResult = await loadExtensions({
|
|
494
294
|
pmRoot,
|
|
@@ -573,7 +373,7 @@ async function withCwd(cwd, run) {
|
|
|
573
373
|
* are forwarded unchanged so runtime fields named `full` remain valid user data.
|
|
574
374
|
*/
|
|
575
375
|
function withMutationCompaction(args, options) {
|
|
576
|
-
return { changedFields: args.fullChangedFields === true ? "full" : "compact", runnerOptions: { ...(options ?? {}) } };
|
|
376
|
+
return { changedFields: args.fullChangedFields === true ? "full" : "compact", idOnly: args.idOnly === true, runnerOptions: { ...(options ?? {}) } };
|
|
577
377
|
}
|
|
578
378
|
function mutationListOptions(options) {
|
|
579
379
|
return {
|
|
@@ -704,7 +504,9 @@ async function runAction(args) {
|
|
|
704
504
|
listOptions.includeBody === undefined) {
|
|
705
505
|
listOptions.compact = true;
|
|
706
506
|
}
|
|
707
|
-
|
|
507
|
+
// pm-rmjy: echo the applied filters + resolved projection mode so agents
|
|
508
|
+
// get structured confirmation of what the server actually ran.
|
|
509
|
+
return withQuerySummary((await runList(readString(args, "status"), listOptions, global)), listOptions);
|
|
708
510
|
}
|
|
709
511
|
case "get":
|
|
710
512
|
return runGet(id ?? readRequiredString(options, "id"), global, options);
|
|
@@ -715,37 +517,38 @@ async function runAction(args) {
|
|
|
715
517
|
searchOptions.fields === undefined) {
|
|
716
518
|
searchOptions.compact = true;
|
|
717
519
|
}
|
|
718
|
-
|
|
520
|
+
// pm-rmjy: echo the applied filters + resolved projection mode (see list).
|
|
521
|
+
return withQuerySummary((await runSearch(readRequiredString(args, "query"), searchOptions, global)), searchOptions);
|
|
719
522
|
}
|
|
720
523
|
case "create": {
|
|
721
|
-
const { changedFields, runnerOptions } = withMutationCompaction(args, options);
|
|
722
|
-
return projectMutationResult(await runCreate(runnerOptions, global), { changedFields });
|
|
524
|
+
const { changedFields, idOnly, runnerOptions } = withMutationCompaction(args, options);
|
|
525
|
+
return projectMutationResult(await runCreate(runnerOptions, global), { changedFields, idOnly });
|
|
723
526
|
}
|
|
724
527
|
case "copy": {
|
|
725
|
-
const { changedFields, runnerOptions } = withMutationCompaction(args, options);
|
|
528
|
+
const { changedFields, idOnly, runnerOptions } = withMutationCompaction(args, options);
|
|
726
529
|
const copyOptions = {
|
|
727
530
|
...runnerOptions,
|
|
728
531
|
...(runnerOptions.title === undefined && typeof args.title === "string" ? { title: args.title } : {}),
|
|
729
532
|
...(runnerOptions.message === undefined && typeof args.message === "string" ? { message: args.message } : {}),
|
|
730
533
|
...(runnerOptions.author === undefined && typeof args.author === "string" ? { author: args.author } : {}),
|
|
731
534
|
};
|
|
732
|
-
return projectMutationResult(await runCopy(id ?? readRequiredString(copyOptions, "id"), copyOptions, global), { changedFields });
|
|
535
|
+
return projectMutationResult(await runCopy(id ?? readRequiredString(copyOptions, "id"), copyOptions, global), { changedFields, idOnly });
|
|
733
536
|
}
|
|
734
537
|
case "update": {
|
|
735
|
-
const { changedFields, runnerOptions } = withMutationCompaction(args, options);
|
|
736
|
-
return projectMutationResult(await runUpdate(id ?? readRequiredString(runnerOptions, "id"), runnerOptions, global), { changedFields });
|
|
538
|
+
const { changedFields, idOnly, runnerOptions } = withMutationCompaction(args, options);
|
|
539
|
+
return projectMutationResult(await runUpdate(id ?? readRequiredString(runnerOptions, "id"), runnerOptions, global), { changedFields, idOnly });
|
|
737
540
|
}
|
|
738
541
|
case "claim":
|
|
739
542
|
return runClaim(id ?? readRequiredString(options, "id"), force, global, options);
|
|
740
543
|
case "release":
|
|
741
544
|
return runRelease(id ?? readRequiredString(options, "id"), force, global, options);
|
|
742
545
|
case "close": {
|
|
743
|
-
const { changedFields, runnerOptions } = withMutationCompaction(args, options);
|
|
546
|
+
const { changedFields, idOnly, runnerOptions } = withMutationCompaction(args, options);
|
|
744
547
|
const closeReason = readString(args, "reason") ??
|
|
745
548
|
readString(args, "text") ??
|
|
746
549
|
readString(runnerOptions, "reason") ??
|
|
747
550
|
readString(runnerOptions, "text");
|
|
748
|
-
return projectMutationResult(await runClose(id ?? readRequiredString(runnerOptions, "id"), closeReason, runnerOptions, global), { changedFields });
|
|
551
|
+
return projectMutationResult(await runClose(id ?? readRequiredString(runnerOptions, "id"), closeReason, runnerOptions, global), { changedFields, idOnly });
|
|
749
552
|
}
|
|
750
553
|
case "comments": {
|
|
751
554
|
const commentOptions = { ...options };
|
|
@@ -797,8 +600,15 @@ async function runAction(args) {
|
|
|
797
600
|
}
|
|
798
601
|
case "contracts":
|
|
799
602
|
return runContracts(options, global);
|
|
800
|
-
case "config":
|
|
801
|
-
|
|
603
|
+
case "config": {
|
|
604
|
+
// pm-v68d: the narrow pm_config tool declares configAction top-level;
|
|
605
|
+
// options.configAction/options.action remain accepted for pm_run parity.
|
|
606
|
+
const configAction = readString(args, "configAction") ?? readString(options, "configAction") ?? readString(options, "action");
|
|
607
|
+
if (configAction === undefined) {
|
|
608
|
+
throw new PmCliError("Missing required argument: configAction", 64);
|
|
609
|
+
}
|
|
610
|
+
return runConfig(readString(args, "scope") ?? readString(options, "scope") ?? "project", configAction, readString(args, "key") ?? readString(options, "key"), options, global, readString(args, "value") ?? readString(options, "value"));
|
|
611
|
+
}
|
|
802
612
|
case "activity": {
|
|
803
613
|
const activityOptions = { ...options };
|
|
804
614
|
if (activityOptions.compact === undefined) {
|
|
@@ -962,6 +772,7 @@ const HANDLERS = {
|
|
|
962
772
|
pm_create: (args) => runAction({ ...args, action: "create" }),
|
|
963
773
|
pm_copy: (args) => runAction({ ...args, action: "copy" }),
|
|
964
774
|
pm_update: (args) => runAction({ ...args, action: "update" }),
|
|
775
|
+
pm_append: (args) => runAction({ ...args, action: "append" }),
|
|
965
776
|
pm_claim: (args) => runAction({ ...args, action: "claim" }),
|
|
966
777
|
pm_release: (args) => runAction({ ...args, action: "release" }),
|
|
967
778
|
pm_close: (args) => runAction({ ...args, action: "close" }),
|
|
@@ -975,6 +786,8 @@ const HANDLERS = {
|
|
|
975
786
|
pm_validate: (args) => runAction({ ...args, action: "validate" }),
|
|
976
787
|
pm_health: (args) => runAction({ ...args, action: "health" }),
|
|
977
788
|
pm_contracts: (args) => runAction({ ...args, action: "contracts" }),
|
|
789
|
+
pm_schema: (args) => runAction({ ...args, action: "schema" }),
|
|
790
|
+
pm_config: (args) => runAction({ ...args, action: "config" }),
|
|
978
791
|
pm_plan: (args) => runAction({ ...args, action: "plan" }),
|
|
979
792
|
};
|
|
980
793
|
function resultContent(result, warnings) {
|
|
@@ -1021,9 +834,10 @@ export async function handleRequest(request) {
|
|
|
1021
834
|
serverInfo: { name: "pm-mcp", version: PM_MCP_SERVER_VERSION },
|
|
1022
835
|
instructions: "You have access to native pm CLI tools for git-based project management. " +
|
|
1023
836
|
"Use pm_context or pm_search before creating new work. " +
|
|
1024
|
-
"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. " +
|
|
837
|
+
"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. " +
|
|
1025
838
|
"Use pm_plan for agent harness Plan workflows: it provides Codex/Claude/Cursor-style planning with durable steps, dependencies, decisions, discoveries, validation, and materialization. " +
|
|
1026
|
-
"Use
|
|
839
|
+
"Use pm_schema and pm_config for workspace configuration: pm_schema manages custom item types/statuses and pm_config reads or writes settings keys. " +
|
|
840
|
+
"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. " +
|
|
1027
841
|
"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. " +
|
|
1028
842
|
"Set author to 'claude-code-agent' on all mutations. " +
|
|
1029
843
|
"Do not pass path during real repository tracking — only pass path for sandbox or test runs.",
|
|
@@ -1119,4 +933,4 @@ if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
|
1119
933
|
startMcpServer();
|
|
1120
934
|
}
|
|
1121
935
|
//# sourceMappingURL=server.js.map
|
|
1122
|
-
//# debugId=
|
|
936
|
+
//# debugId=5d14434e-fc25-502b-9aa8-8efd7ab7fd6a
|