@unbrained/pm-cli 2026.6.8 → 2026.6.10
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 +74 -11
- package/dist/cli/bootstrap-args.js +4 -2
- 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/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/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 +89 -17
- 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-5QLX6DHN.js +16 -0
- package/dist/cli-bundle/chunks/{activity-Q7XMIZIH.js → activity-W6TS5F2L.js} +11 -11
- package/dist/cli-bundle/chunks/{aggregate-GBSHSXOB.js → aggregate-NNJLKGEK.js} +64 -24
- package/dist/cli-bundle/chunks/aggregate-NNJLKGEK.js.map +7 -0
- package/dist/cli-bundle/chunks/{aggregate-HKQJZUBG.js → aggregate-UK2WJ4Z3.js} +65 -25
- package/dist/cli-bundle/chunks/aggregate-UK2WJ4Z3.js.map +1 -0
- package/dist/cli-bundle/chunks/{append-3RFOU7P5.js → append-7BS36Z2L.js} +8 -8
- package/dist/cli-bundle/chunks/{append-OM74OJVT.js → append-DHGTLUZW.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-SDLEYY6A.js → chunk-2MKBPWMK.js} +6 -8
- package/dist/cli-bundle/chunks/{chunk-SDLEYY6A.js.map → chunk-2MKBPWMK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-Z2HXAFFH.js → chunk-344GDQTH.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-AEMKH5WQ.js → chunk-3VTWCBXL.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-XLSQ3QLT.js → chunk-4CYHWHZU.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JS47EKLP.js → chunk-4H2NDEGJ.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-QF4OPBAG.js → chunk-5HH6QRH5.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-5NVJA7IW.js → chunk-5OMABP7I.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-YEFOCDIK.js → chunk-6ADVKPVV.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-SM3RMWGO.js → chunk-6KQS23TX.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-ETZZU5QF.js → chunk-6N46IM44.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EPWT7BEA.js → chunk-6OSG3EMX.js} +157 -12
- package/dist/cli-bundle/chunks/chunk-6OSG3EMX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5WO2VKFA.js → chunk-73PSHEMT.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-J4DKAGTM.js → chunk-7DUVDW7C.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-2BYKYPWY.js → chunk-7GYMMDDW.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QFVASU44.js → chunk-7TW64BS5.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-VXBUXLVD.js → chunk-A6XVYNQJ.js} +13 -6
- package/dist/cli-bundle/chunks/chunk-A6XVYNQJ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KP4KIUQT.js → chunk-ANVZCNL5.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-HOA3GMB6.js → chunk-BE5G7HEL.js} +14 -8
- package/dist/cli-bundle/chunks/chunk-BE5G7HEL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-QWNUDGFQ.js → chunk-CMEHZD6G.js} +163 -11
- package/dist/cli-bundle/chunks/chunk-CMEHZD6G.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-7NQIY7Z6.js → chunk-CTW7QAHM.js} +6 -5
- package/dist/cli-bundle/chunks/chunk-CTW7QAHM.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-UEXNNF3K.js → chunk-D6JZBUZ6.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-F33AQIB4.js → chunk-DEYNERFX.js} +19 -7
- package/dist/cli-bundle/chunks/chunk-DEYNERFX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-R4XIE7NQ.js → chunk-DMDEC4QP.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-KN4WSESY.js → chunk-DTRIVUTN.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-KS2U7BZ3.js → chunk-EAQLLID6.js} +16 -6
- package/dist/cli-bundle/chunks/chunk-EAQLLID6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HP35AVFS.js → chunk-EIS32UA4.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-F2PVV7IX.js +528 -0
- package/dist/cli-bundle/chunks/chunk-F2PVV7IX.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-DV27WDA7.js → chunk-GF5XIBUH.js} +70 -9
- package/dist/cli-bundle/chunks/chunk-GF5XIBUH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BFJPMUF5.js → chunk-GP6SHEAI.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-URJEZOLB.js → chunk-GRHPU6EM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-K62SNVVE.js → chunk-I2FM2SMO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-F33VC5EX.js → chunk-IEQ3N7WP.js} +12 -5
- package/dist/cli-bundle/chunks/chunk-IEQ3N7WP.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-AXBUHLW7.js → chunk-K45NAJV2.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-NLVCMVC7.js → chunk-K7SXBA75.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-OVSSE2JP.js → chunk-KHBRV5JU.js} +14 -12
- package/dist/cli-bundle/chunks/chunk-KHBRV5JU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D7WK2PKB.js → chunk-KMMUDSSB.js} +112 -7
- package/dist/cli-bundle/chunks/chunk-KMMUDSSB.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ALSRBNYB.js → chunk-KRZQGRVL.js} +14 -7
- package/dist/cli-bundle/chunks/chunk-KRZQGRVL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-PQDH3S54.js → chunk-LUJQJR7G.js} +71 -69
- package/dist/cli-bundle/chunks/{chunk-PQDH3S54.js.map → chunk-LUJQJR7G.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-NDSMKB2I.js → chunk-LYL32FT6.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-ODN53S6H.js → chunk-MF6KSSMF.js} +11 -14
- package/dist/cli-bundle/chunks/chunk-MF6KSSMF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-Z55JACL2.js → chunk-O64EYNHF.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-3TXWDGPU.js → chunk-OQGJSCZZ.js} +522 -37
- package/dist/cli-bundle/chunks/chunk-OQGJSCZZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-FO2TYSQZ.js → chunk-OROMGSBP.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3E3MDBTB.js → chunk-OSGWBWLK.js} +76 -74
- package/dist/cli-bundle/chunks/{chunk-3E3MDBTB.js.map → chunk-OSGWBWLK.js.map} +3 -3
- package/dist/cli-bundle/chunks/{chunk-7WXGR44E.js → chunk-OVNSQHDG.js} +19 -7
- package/dist/cli-bundle/chunks/chunk-OVNSQHDG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-XZS4MV37.js → chunk-PYULT32I.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-M7UBTVFT.js → chunk-Q6PSD5DZ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-QQPZYP73.js → chunk-QGIWURY3.js} +12 -12
- package/dist/cli-bundle/chunks/{chunk-KCGMABHM.js → chunk-QJ2OIEOC.js} +68 -7
- package/dist/cli-bundle/chunks/chunk-QJ2OIEOC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XEKZCBCS.js → chunk-SNASEDXB.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-4WYBLB6J.js → chunk-T6QLB34N.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-NGEEXR2R.js → chunk-TALBUVWF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FGRJZVXD.js → chunk-TV6FZGVK.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-MSH23UWO.js → chunk-TXWMLDMG.js} +13 -7
- package/dist/cli-bundle/chunks/chunk-TXWMLDMG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TXKENAQP.js → chunk-TZLGCTA5.js} +5 -4
- package/dist/cli-bundle/chunks/chunk-TZLGCTA5.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4TI3532H.js → chunk-UDWUDUJI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-N4SQZ7L3.js → chunk-UMWF6ZAS.js} +12 -5
- package/dist/cli-bundle/chunks/chunk-UMWF6ZAS.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BKQMJXWY.js → chunk-UNH3KSHG.js} +4 -6
- package/dist/cli-bundle/chunks/{chunk-BKQMJXWY.js.map → chunk-UNH3KSHG.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-CBJXWXI5.js → chunk-UY26RIBR.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-TBLBEOEX.js → chunk-VSS3CSTF.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-2YPVCD7T.js → chunk-WBU257Z4.js} +13 -11
- package/dist/cli-bundle/chunks/chunk-WBU257Z4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YJAKN2N2.js → chunk-WNMRICXH.js} +489 -32
- package/dist/cli-bundle/chunks/chunk-WNMRICXH.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-WSWOQP3Z.js +518 -0
- package/dist/cli-bundle/chunks/chunk-WSWOQP3Z.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OTY2YEH5.js → chunk-WWEFBBVF.js} +12 -12
- package/dist/cli-bundle/chunks/{chunk-UMMJAJB2.js → chunk-X3IPJU2O.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-KBKJVXUS.js → chunk-X5YC5DZM.js} +111 -6
- package/dist/cli-bundle/chunks/chunk-X5YC5DZM.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-KVXIQDJG.js → chunk-XH6RA5A5.js} +15 -15
- package/dist/cli-bundle/chunks/chunk-XH6RA5A5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-2HMD3JM2.js → chunk-XRE4CTNP.js} +11 -14
- package/dist/cli-bundle/chunks/chunk-XRE4CTNP.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RISLL7XH.js → chunk-XSCGU4WT.js} +15 -5
- package/dist/cli-bundle/chunks/{chunk-RISLL7XH.js.map → chunk-XSCGU4WT.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-L3LYL3ID.js → chunk-ZH7C7ZVX.js} +14 -14
- package/dist/cli-bundle/chunks/chunk-ZH7C7ZVX.js.map +7 -0
- package/dist/cli-bundle/chunks/{claim-NHBIIBOW.js → claim-3TY5LE54.js} +10 -10
- package/dist/cli-bundle/chunks/{claim-RNEBQCOO.js → claim-LM4YY6QQ.js} +10 -10
- package/dist/cli-bundle/chunks/{close-ZMXL2WDS.js → close-CSD4LEMT.js} +8 -8
- package/dist/cli-bundle/chunks/close-SIQCDOBR.js +13 -0
- package/dist/cli-bundle/chunks/{close-many-CDPQGQUB.js → close-many-B5SHDX6W.js} +17 -18
- package/dist/cli-bundle/chunks/{close-many-CDPQGQUB.js.map → close-many-B5SHDX6W.js.map} +1 -1
- package/dist/cli-bundle/chunks/{close-many-IQV5C2SI.js → close-many-WRXB5KVY.js} +15 -16
- package/dist/cli-bundle/chunks/{close-many-IQV5C2SI.js.map → close-many-WRXB5KVY.js.map} +1 -1
- package/dist/cli-bundle/chunks/{comments-J5Q4IJPH.js → comments-A5ALOYTG.js} +10 -10
- package/dist/cli-bundle/chunks/{comments-EFVBHWPT.js → comments-BDDEK3VW.js} +10 -10
- package/dist/cli-bundle/chunks/{config-72253M2O.js → config-W2NHDNQT.js} +8 -8
- package/dist/cli-bundle/chunks/{config-VFYA6BMI.js → config-YUYBMJOW.js} +8 -8
- package/dist/cli-bundle/chunks/{context-AVLO4IFH.js → context-LRJ74NSU.js} +147 -36
- package/dist/cli-bundle/chunks/context-LRJ74NSU.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-WMSI2D65.js → context-R2QLOJCK.js} +148 -37
- package/dist/cli-bundle/chunks/context-R2QLOJCK.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-D4BN3VSQ.js → contracts-47X7RYUF.js} +4 -4
- package/dist/cli-bundle/chunks/{contracts-RGPOBLPL.js → contracts-HJHR4NCD.js} +4 -4
- package/dist/cli-bundle/chunks/{copy-H6TXHK7S.js → copy-B7HFOWFB.js} +7 -7
- package/dist/cli-bundle/chunks/{copy-WXE3OOLZ.js → copy-P4UVYZ7M.js} +7 -7
- package/dist/cli-bundle/chunks/{create-PUAIJEZ7.js → create-5ERJF64D.js} +13 -13
- package/dist/cli-bundle/chunks/create-TXNRPS4K.js +27 -0
- package/dist/cli-bundle/chunks/{delete-WBME6WG5.js → delete-LX3LGBCH.js} +7 -7
- package/dist/cli-bundle/chunks/{delete-PKR2JHLH.js → delete-S3WVK6LP.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-4BQEDV4L.js → deps-GWSNH7OZ.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-KWHQRO75.js → deps-YSM4LZQD.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-SCNBUGSV.js → docs-7RYFBHQD.js} +9 -9
- package/dist/cli-bundle/chunks/{docs-364GT3ZR.js → docs-TG6JMVMY.js} +9 -9
- package/dist/cli-bundle/chunks/{extension-KK2UPXJD.js → extension-R3LUKMX7.js} +5 -5
- package/dist/cli-bundle/chunks/{extension-CRE7JM47.js → extension-VNMRKIHI.js} +5 -5
- package/dist/cli-bundle/chunks/{files-66EHM5ZR.js → files-KAKU57OT.js} +9 -9
- package/dist/cli-bundle/chunks/{files-3GESQAWL.js → files-QB3EYPMO.js} +9 -9
- package/dist/cli-bundle/chunks/{gc-MOQDND5J.js → gc-B747VM4M.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-D5IWOKQH.js → gc-KNUPLPSW.js} +3 -3
- package/dist/cli-bundle/chunks/{get-7J2ZCBV5.js → get-GMGLIQ5I.js} +11 -11
- package/dist/cli-bundle/chunks/{get-WXSLXV3K.js → get-SBL6NHYQ.js} +11 -11
- package/dist/cli-bundle/chunks/{health-B6AEM7BV.js → health-IG43Z4KL.js} +47 -19
- package/dist/cli-bundle/chunks/health-IG43Z4KL.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-YMZGOMVX.js → health-WWZJ5KJS.js} +46 -18
- package/dist/cli-bundle/chunks/health-WWZJ5KJS.js.map +7 -0
- package/dist/cli-bundle/chunks/history-6UKSZTRT.js +20 -0
- package/dist/cli-bundle/chunks/{history-TJTO5GCR.js → history-XCWRXBXC.js} +10 -10
- package/dist/cli-bundle/chunks/{history-compact-CKNN6UKW.js → history-compact-IDH7E7VN.js} +11 -11
- package/dist/cli-bundle/chunks/{history-compact-N2Q7IR3T.js → history-compact-KICKUCR7.js} +11 -11
- package/dist/cli-bundle/chunks/history-redact-HKYBTK6X.js +19 -0
- package/dist/cli-bundle/chunks/{history-redact-JUXUOH54.js → history-redact-JJWH3QWK.js} +11 -11
- package/dist/cli-bundle/chunks/{history-repair-TDBBSRVK.js → history-repair-7HWBZKXN.js} +11 -11
- package/dist/cli-bundle/chunks/{history-repair-CCCPBNTF.js → history-repair-N5HXKJOI.js} +11 -11
- package/dist/cli-bundle/chunks/init-27JLDUO2.js +17 -0
- package/dist/cli-bundle/chunks/{init-6ZPKD3YN.js → init-OQA3TWIS.js} +9 -9
- package/dist/cli-bundle/chunks/{learnings-WYNTYQ5T.js → learnings-L7VQUSVI.js} +10 -10
- package/dist/cli-bundle/chunks/{learnings-U7U2FNIO.js → learnings-Z4GAIZQ5.js} +10 -10
- package/dist/cli-bundle/chunks/list-6U3CJVXS.js +19 -0
- package/dist/cli-bundle/chunks/{list-JGP7ODML.js → list-W5ROBC5U.js} +10 -11
- package/dist/cli-bundle/chunks/{notes-P25YVTEG.js → notes-JJDOEDFK.js} +10 -10
- package/dist/cli-bundle/chunks/{notes-QIF6A7XS.js → notes-SDCK7BEN.js} +10 -10
- package/dist/cli-bundle/chunks/{plan-RACB5PI6.js → plan-H5HYHMBB.js} +13 -13
- package/dist/cli-bundle/chunks/{plan-SSBJFWXA.js → plan-W2B5RYR3.js} +13 -13
- package/dist/cli-bundle/chunks/{register-list-query-GQAEIG4K.js → register-list-query-QGRFMDWA.js} +20 -20
- package/dist/cli-bundle/chunks/register-list-query-QGRFMDWA.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-5IXDPUZ6.js → register-list-query-V4S23735.js} +21 -21
- package/dist/cli-bundle/chunks/register-list-query-V4S23735.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-FAS4YG63.js → register-mutation-I57PLUHA.js} +36 -35
- package/dist/cli-bundle/chunks/register-mutation-I57PLUHA.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-YZCUILGO.js → register-mutation-ZPZNJXSA.js} +35 -34
- package/dist/cli-bundle/chunks/register-mutation-ZPZNJXSA.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-S2BOLUPF.js → register-operations-KAMLXAF5.js} +42 -37
- package/dist/cli-bundle/chunks/register-operations-KAMLXAF5.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-IBYWNJN5.js → register-operations-YEN4YEZ2.js} +41 -36
- package/dist/cli-bundle/chunks/register-operations-YEN4YEZ2.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-setup-JRZ4UMWZ.js → register-setup-BZ3TNE3G.js} +15 -15
- package/dist/cli-bundle/chunks/{register-setup-ABA2JPWO.js → register-setup-WLFL3OUF.js} +15 -15
- package/dist/cli-bundle/chunks/restore-GNI2W5CN.js +17 -0
- package/dist/cli-bundle/chunks/{restore-K72ZNPEP.js → restore-RGFSPG4K.js} +11 -11
- package/dist/cli-bundle/chunks/{schema-UL4B2JX5.js → schema-CCDU3RLC.js} +8 -8
- package/dist/cli-bundle/chunks/{schema-3VKRDBLC.js → schema-KZASL323.js} +8 -8
- package/dist/cli-bundle/chunks/{search-632WJ7GO.js → search-7KSOLI2E.js} +10 -11
- package/dist/cli-bundle/chunks/{search-632WJ7GO.js.map → search-7KSOLI2E.js.map} +1 -1
- package/dist/cli-bundle/chunks/{search-EQDHSE4G.js → search-DTL7CO22.js} +12 -13
- package/dist/cli-bundle/chunks/{search-EQDHSE4G.js.map → search-DTL7CO22.js.map} +1 -1
- package/dist/cli-bundle/chunks/{stats-WLJ3XBF5.js → stats-IOXQMGI6.js} +7 -7
- package/dist/cli-bundle/chunks/{stats-O4UTMJMC.js → stats-QNV7B2CE.js} +7 -7
- package/dist/cli-bundle/chunks/{telemetry-EUVHFSQU.js → telemetry-IV5C6JOM.js} +4 -4
- package/dist/cli-bundle/chunks/{telemetry-NRVWX25E.js → telemetry-NHR5RFXT.js} +4 -4
- package/dist/cli-bundle/chunks/test-4Z37CXW4.js +32 -0
- package/dist/cli-bundle/chunks/{test-GXUBQNUC.js → test-PIL2CEEB.js} +14 -14
- package/dist/cli-bundle/chunks/{test-all-UTFXC7S2.js → test-all-GRLYHBNP.js} +14 -14
- package/dist/cli-bundle/chunks/{test-all-XM6OKI3L.js → test-all-MFN4MYCV.js} +14 -14
- package/dist/cli-bundle/chunks/{test-runs-IK6E2HNX.js → test-runs-7LRFWWCA.js} +5 -5
- package/dist/cli-bundle/chunks/{test-runs-7FHCPEA3.js → test-runs-7WCSC3TY.js} +5 -5
- package/dist/cli-bundle/chunks/update-I4G34LKJ.js +21 -0
- package/dist/cli-bundle/chunks/{update-U4B4OMHZ.js → update-VI5DBZ3G.js} +15 -15
- package/dist/cli-bundle/chunks/{update-many-5KD33MKY.js → update-many-LOTAYUTN.js} +22 -23
- package/dist/cli-bundle/chunks/{update-many-5KD33MKY.js.map → update-many-LOTAYUTN.js.map} +1 -1
- package/dist/cli-bundle/chunks/{update-many-N3YTM7K4.js → update-many-UYMTVF42.js} +24 -25
- package/dist/cli-bundle/chunks/{update-many-N3YTM7K4.js.map → update-many-UYMTVF42.js.map} +1 -1
- package/dist/cli-bundle/chunks/{upgrade-FFXGO43H.js → upgrade-LT2MLLPS.js} +5 -5
- package/dist/cli-bundle/chunks/{upgrade-5SRFLUNW.js → upgrade-ZZSC7CLV.js} +5 -5
- package/dist/cli-bundle/chunks/{validate-T3LPWSZG.js → validate-3XRORNMP.js} +16 -16
- package/dist/cli-bundle/chunks/{validate-CRWXZILW.js → validate-IQIQSKUX.js} +16 -16
- package/dist/cli-bundle/main.js +157 -62
- 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 +99 -2
- package/dist/core/extensions/extension-types.js +28 -2
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/flag-value-types.d.ts +29 -0
- package/dist/core/extensions/flag-value-types.js +78 -0
- package/dist/core/extensions/flag-value-types.js.map +1 -0
- package/dist/core/extensions/item-field-types.d.ts +22 -0
- package/dist/core/extensions/item-field-types.js +43 -0
- package/dist/core/extensions/item-field-types.js.map +1 -0
- package/dist/core/extensions/item-fields.js +4 -11
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +16 -1
- package/dist/core/extensions/loader.js +202 -18
- 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/packages/manifest.d.ts +1 -1
- package/dist/core/packages/manifest.js +12 -2
- package/dist/core/packages/manifest.js.map +1 -1
- 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 +7 -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 +105 -40
- package/dist/mcp/server.js.map +1 -1
- 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 +7 -2
- package/dist/sdk/index.js +3 -3
- 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/sdk/testing.d.ts +55 -1
- package/dist/sdk/testing.js +92 -2
- package/dist/sdk/testing.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/COMMANDS.md +37 -3
- package/docs/CONFIGURATION.md +1 -1
- package/docs/EXTENSIONS.md +59 -53
- package/docs/SDK.md +104 -0
- package/docs/TESTING.md +60 -0
- package/docs/schemas/extension-manifest.schema.json +120 -0
- 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/dist/cli-bundle/chunks/activity-A3QKFSSF.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-GBSHSXOB.js.map +0 -7
- package/dist/cli-bundle/chunks/aggregate-HKQJZUBG.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-2HMD3JM2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-2YPVCD7T.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-3TXWDGPU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-7NQIY7Z6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7WXGR44E.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ALSRBNYB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-D7WK2PKB.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-DV27WDA7.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-EAOG77HM.js +0 -56
- package/dist/cli-bundle/chunks/chunk-EAOG77HM.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-EPWT7BEA.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-F33AQIB4.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-F33VC5EX.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-HOA3GMB6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KBKJVXUS.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-KCGMABHM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KS2U7BZ3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-KVXIQDJG.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-L3LYL3ID.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MSH23UWO.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-N4SQZ7L3.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-NUKHZZNM.js +0 -252
- package/dist/cli-bundle/chunks/chunk-NUKHZZNM.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ODN53S6H.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-OVSSE2JP.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-QWNUDGFQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-TXKENAQP.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-VXBUXLVD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-XNGMIVQY.js +0 -242
- package/dist/cli-bundle/chunks/chunk-XNGMIVQY.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js +0 -53
- package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-YJAKN2N2.js.map +0 -1
- package/dist/cli-bundle/chunks/close-UNTFXVM3.js +0 -13
- package/dist/cli-bundle/chunks/context-AVLO4IFH.js.map +0 -7
- package/dist/cli-bundle/chunks/context-WMSI2D65.js.map +0 -1
- package/dist/cli-bundle/chunks/create-EZWAMUKR.js +0 -27
- package/dist/cli-bundle/chunks/health-B6AEM7BV.js.map +0 -1
- package/dist/cli-bundle/chunks/health-YMZGOMVX.js.map +0 -7
- package/dist/cli-bundle/chunks/history-ZERISU2L.js +0 -20
- package/dist/cli-bundle/chunks/history-redact-GODBYT5A.js +0 -19
- package/dist/cli-bundle/chunks/init-CBZHXBR3.js +0 -17
- package/dist/cli-bundle/chunks/list-7MTPPZHC.js +0 -20
- package/dist/cli-bundle/chunks/register-list-query-5IXDPUZ6.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-GQAEIG4K.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-FAS4YG63.js.map +0 -1
- package/dist/cli-bundle/chunks/register-mutation-YZCUILGO.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-IBYWNJN5.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-S2BOLUPF.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-3JRX27QW.js +0 -17
- package/dist/cli-bundle/chunks/test-XN7RJL5Z.js +0 -32
- package/dist/cli-bundle/chunks/update-LFBSEW3N.js +0 -21
- /package/dist/cli-bundle/chunks/{activity-A3QKFSSF.js.map → activity-5QLX6DHN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-Q7XMIZIH.js.map → activity-W6TS5F2L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-3RFOU7P5.js.map → append-7BS36Z2L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-OM74OJVT.js.map → append-DHGTLUZW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Z2HXAFFH.js.map → chunk-344GDQTH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AEMKH5WQ.js.map → chunk-3VTWCBXL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XLSQ3QLT.js.map → chunk-4CYHWHZU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JS47EKLP.js.map → chunk-4H2NDEGJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QF4OPBAG.js.map → chunk-5HH6QRH5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5NVJA7IW.js.map → chunk-5OMABP7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YEFOCDIK.js.map → chunk-6ADVKPVV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SM3RMWGO.js.map → chunk-6KQS23TX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ETZZU5QF.js.map → chunk-6N46IM44.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5WO2VKFA.js.map → chunk-73PSHEMT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-J4DKAGTM.js.map → chunk-7DUVDW7C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2BYKYPWY.js.map → chunk-7GYMMDDW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QFVASU44.js.map → chunk-7TW64BS5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KP4KIUQT.js.map → chunk-ANVZCNL5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UEXNNF3K.js.map → chunk-D6JZBUZ6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-R4XIE7NQ.js.map → chunk-DMDEC4QP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KN4WSESY.js.map → chunk-DTRIVUTN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HP35AVFS.js.map → chunk-EIS32UA4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BFJPMUF5.js.map → chunk-GP6SHEAI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-URJEZOLB.js.map → chunk-GRHPU6EM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K62SNVVE.js.map → chunk-I2FM2SMO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AXBUHLW7.js.map → chunk-K45NAJV2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NLVCMVC7.js.map → chunk-K7SXBA75.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NDSMKB2I.js.map → chunk-LYL32FT6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Z55JACL2.js.map → chunk-O64EYNHF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FO2TYSQZ.js.map → chunk-OROMGSBP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XZS4MV37.js.map → chunk-PYULT32I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-M7UBTVFT.js.map → chunk-Q6PSD5DZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QQPZYP73.js.map → chunk-QGIWURY3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XEKZCBCS.js.map → chunk-SNASEDXB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4WYBLB6J.js.map → chunk-T6QLB34N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NGEEXR2R.js.map → chunk-TALBUVWF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FGRJZVXD.js.map → chunk-TV6FZGVK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4TI3532H.js.map → chunk-UDWUDUJI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CBJXWXI5.js.map → chunk-UY26RIBR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TBLBEOEX.js.map → chunk-VSS3CSTF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OTY2YEH5.js.map → chunk-WWEFBBVF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UMMJAJB2.js.map → chunk-X3IPJU2O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-NHBIIBOW.js.map → claim-3TY5LE54.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-RNEBQCOO.js.map → claim-LM4YY6QQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-ZMXL2WDS.js.map → close-CSD4LEMT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-UNTFXVM3.js.map → close-SIQCDOBR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-J5Q4IJPH.js.map → comments-A5ALOYTG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-EFVBHWPT.js.map → comments-BDDEK3VW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-72253M2O.js.map → config-W2NHDNQT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-VFYA6BMI.js.map → config-YUYBMJOW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{contracts-D4BN3VSQ.js.map → contracts-47X7RYUF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{contracts-RGPOBLPL.js.map → contracts-HJHR4NCD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-H6TXHK7S.js.map → copy-B7HFOWFB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-WXE3OOLZ.js.map → copy-P4UVYZ7M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-PUAIJEZ7.js.map → create-5ERJF64D.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-EZWAMUKR.js.map → create-TXNRPS4K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-WBME6WG5.js.map → delete-LX3LGBCH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-PKR2JHLH.js.map → delete-S3WVK6LP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-4BQEDV4L.js.map → deps-GWSNH7OZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-KWHQRO75.js.map → deps-YSM4LZQD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-SCNBUGSV.js.map → docs-7RYFBHQD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-364GT3ZR.js.map → docs-TG6JMVMY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-KK2UPXJD.js.map → extension-R3LUKMX7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-CRE7JM47.js.map → extension-VNMRKIHI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-66EHM5ZR.js.map → files-KAKU57OT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-3GESQAWL.js.map → files-QB3EYPMO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-MOQDND5J.js.map → gc-B747VM4M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-D5IWOKQH.js.map → gc-KNUPLPSW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-7J2ZCBV5.js.map → get-GMGLIQ5I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-WXSLXV3K.js.map → get-SBL6NHYQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-ZERISU2L.js.map → history-6UKSZTRT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-TJTO5GCR.js.map → history-XCWRXBXC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-CKNN6UKW.js.map → history-compact-IDH7E7VN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-N2Q7IR3T.js.map → history-compact-KICKUCR7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-GODBYT5A.js.map → history-redact-HKYBTK6X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-JUXUOH54.js.map → history-redact-JJWH3QWK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-TDBBSRVK.js.map → history-repair-7HWBZKXN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-CCCPBNTF.js.map → history-repair-N5HXKJOI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-CBZHXBR3.js.map → init-27JLDUO2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-6ZPKD3YN.js.map → init-OQA3TWIS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-WYNTYQ5T.js.map → learnings-L7VQUSVI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-U7U2FNIO.js.map → learnings-Z4GAIZQ5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-7MTPPZHC.js.map → list-6U3CJVXS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-JGP7ODML.js.map → list-W5ROBC5U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-P25YVTEG.js.map → notes-JJDOEDFK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-QIF6A7XS.js.map → notes-SDCK7BEN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-RACB5PI6.js.map → plan-H5HYHMBB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-SSBJFWXA.js.map → plan-W2B5RYR3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-JRZ4UMWZ.js.map → register-setup-BZ3TNE3G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-ABA2JPWO.js.map → register-setup-WLFL3OUF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-3JRX27QW.js.map → restore-GNI2W5CN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-K72ZNPEP.js.map → restore-RGFSPG4K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-UL4B2JX5.js.map → schema-CCDU3RLC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-3VKRDBLC.js.map → schema-KZASL323.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-WLJ3XBF5.js.map → stats-IOXQMGI6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-O4UTMJMC.js.map → stats-QNV7B2CE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-EUVHFSQU.js.map → telemetry-IV5C6JOM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-NRVWX25E.js.map → telemetry-NHR5RFXT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-XN7RJL5Z.js.map → test-4Z37CXW4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-GXUBQNUC.js.map → test-PIL2CEEB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-UTFXC7S2.js.map → test-all-GRLYHBNP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-XM6OKI3L.js.map → test-all-MFN4MYCV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-IK6E2HNX.js.map → test-runs-7LRFWWCA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-7FHCPEA3.js.map → test-runs-7WCSC3TY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-LFBSEW3N.js.map → update-I4G34LKJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-U4B4OMHZ.js.map → update-VI5DBZ3G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-FFXGO43H.js.map → upgrade-LT2MLLPS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-5SRFLUNW.js.map → upgrade-ZZSC7CLV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{validate-T3LPWSZG.js.map → validate-3XRORNMP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{validate-CRWXZILW.js.map → validate-IQIQSKUX.js.map} +0 -0
package/docs/EXTENSIONS.md
CHANGED
|
@@ -52,8 +52,7 @@ pm github validate --repo owner/repo
|
|
|
52
52
|
|
|
53
53
|
For `pm-github`, run `pm github validate --repo owner/repo` before mutating commands; write paths require `GITHUB_TOKEN`/`GH_TOKEN` or `gh auth login`.
|
|
54
54
|
|
|
55
|
-
For ecosystem maintenance, use the reusable external package smoke harness after
|
|
56
|
-
building `dist/`:
|
|
55
|
+
For ecosystem maintenance, use the reusable external package smoke harness after building `dist/`:
|
|
57
56
|
|
|
58
57
|
```bash
|
|
59
58
|
pnpm build
|
|
@@ -61,11 +60,7 @@ pnpm smoke:external-packages -- --limit 10
|
|
|
61
60
|
pnpm smoke:external-packages -- --package pm-changelog
|
|
62
61
|
```
|
|
63
62
|
|
|
64
|
-
The harness discovers npm packages with the `keywords:pm-package` query unless
|
|
65
|
-
explicit packages are provided. Each package is installed in a temporary project
|
|
66
|
-
with isolated `PM_PATH` and `PM_GLOBAL_PATH`, then checked with `pm package
|
|
67
|
-
doctor --project --detail deep --trace` and runtime availability contracts. The
|
|
68
|
-
JSON output is compact enough for agents to attach as tracker evidence.
|
|
63
|
+
The harness discovers npm packages with the `keywords:pm-package` query unless explicit packages are provided, installs each package in a temporary project with isolated `PM_PATH`/`PM_GLOBAL_PATH`, then checks `pm package doctor --project --detail deep --trace` and runtime availability contracts.
|
|
69
64
|
|
|
70
65
|
Prefer package-specific docs before invoking commands that require service credentials, such as GitHub, Jira, Linear, or Slack sync packages.
|
|
71
66
|
|
|
@@ -82,28 +77,14 @@ Package roots declare resources in `package.json` under `pm`:
|
|
|
82
77
|
"extensions": ["."],
|
|
83
78
|
"docs": ["README.md"],
|
|
84
79
|
"examples": ["examples/basic.md"],
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
"summary": "Adds a custom workflow to pm.",
|
|
89
|
-
"tags": ["workflow"],
|
|
90
|
-
"links": {
|
|
91
|
-
"docs": "https://example.com/docs",
|
|
92
|
-
"repository": "https://github.com/org/my-pm-package",
|
|
93
|
-
"report": "https://github.com/org/my-pm-package/issues"
|
|
94
|
-
}
|
|
95
|
-
}
|
|
80
|
+
"assets": ["assets"],
|
|
81
|
+
"prompts": ["prompts"],
|
|
82
|
+
"catalog": { "display_name": "My pm Package", "category": "workflow" }
|
|
96
83
|
}
|
|
97
84
|
}
|
|
98
85
|
```
|
|
99
86
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
- `extensions`
|
|
103
|
-
- `docs`
|
|
104
|
-
- `examples`
|
|
105
|
-
|
|
106
|
-
Installation activates `pm.extensions`. `pm.docs` and `pm.examples` are catalog metadata. Agent-specific assets such as prompts, skills, or MCP servers should live in agent adapter packages, not in the core `pm` package contract.
|
|
87
|
+
Installation activates `pm.extensions`. `pm.docs`, `pm.examples`, `pm.assets`, and `pm.prompts` are catalog metadata (metadata-only — they are discovered and surfaced in the catalog but not executed). Declare agent-facing prompt/slash-command markdown under `pm.prompts` and non-code assets (images, skills, fixtures) under `pm.assets`; their conventional roots are `prompts/` (also `.agents/pm/prompts/`) and `assets/` (also `.agents/pm/assets/`).
|
|
107
88
|
|
|
108
89
|
`pm package init` emits a root extension (`"extensions": ["."]`) so local package installs can activate without dependency bootstrapping. Larger packages may point at nested extension directories after declaring runtime dependencies and validating with `pm package doctor`.
|
|
109
90
|
|
|
@@ -140,6 +121,16 @@ A minimal standalone extension has a `manifest.json` and an import-free entrypoi
|
|
|
140
121
|
"manifest_version": 1,
|
|
141
122
|
"pm_min_version": "2026.5.0",
|
|
142
123
|
"pm_max_version": "2027.0.0",
|
|
124
|
+
"trusted": true,
|
|
125
|
+
"sandbox_profile": "strict",
|
|
126
|
+
"permissions": {
|
|
127
|
+
"fs_read": false,
|
|
128
|
+
"fs_write": false,
|
|
129
|
+
"network": false,
|
|
130
|
+
"env_read": false,
|
|
131
|
+
"env_write": false,
|
|
132
|
+
"process_spawn": false
|
|
133
|
+
},
|
|
143
134
|
"capabilities": ["commands"]
|
|
144
135
|
}
|
|
145
136
|
```
|
|
@@ -192,16 +183,19 @@ Runnable manifest examples are the source of truth:
|
|
|
192
183
|
- [starter extension manifest](examples/starter-extension/manifest.json)
|
|
193
184
|
- [policy-restricted manifest](examples/policy-restricted-extension/manifest.json)
|
|
194
185
|
|
|
186
|
+
Schema:
|
|
187
|
+
|
|
188
|
+
- Use [extension-manifest.schema.json](schemas/extension-manifest.schema.json) as the
|
|
189
|
+
`$schema` value for inline editor validation. The loader ignores `$schema` and
|
|
190
|
+
tolerates future manifest fields, but the schema documents the fields pm reads.
|
|
191
|
+
|
|
195
192
|
Rules:
|
|
196
193
|
|
|
197
194
|
- `entry` must resolve inside the extension directory.
|
|
198
195
|
- `manifest_version` is an optional integer identifying the manifest schema generation. Runtime contracts currently support manifest versions `1` and `2`, and first-party runnable examples use `2`. First-party packages declare it; the manifest governance test requires it on every first-party package.
|
|
199
196
|
- `pm_min_version` is an inclusive minimum pm CLI version. If the running CLI is older, discovery emits `extension_pm_min_version_unmet:<layer>:<name>:required=<version>:current=<version>` and skips the extension before import.
|
|
200
|
-
- `pm_max_version` is an optional inclusive maximum pm CLI version (the upper compatibility bound). If the running CLI is newer than this value, discovery emits `extension_pm_max_version_exceeded:<layer>:<name>:allowed=<version>:current=<version>` and skips the extension before import. Use it to stop a CLI major release from loading a stale package that would crash at activation.
|
|
201
|
-
- Both bounds share the same
|
|
202
|
-
- `*_invalid` (`required=`/`allowed=` only): the declared version is unparseable; the extension is **blocked**.
|
|
203
|
-
- `*_unchecked` (`...:current=unknown` or an uncomparable current version): the bound could not be compared against the running CLI; the extension is **allowed** but a warning is recorded.
|
|
204
|
-
- `extension_pm_min_version_unmet` / `extension_pm_max_version_exceeded`: the running CLI is outside the declared bound; the extension is **blocked**.
|
|
197
|
+
- `pm_max_version` is an optional inclusive maximum pm CLI version (the upper compatibility bound). If the running CLI is newer than this value, discovery emits `extension_pm_max_version_exceeded:<layer>:<name>:allowed=<version>:current=<version>` and skips the extension before import. Use it to stop a CLI major release from loading a stale package that would crash at activation. Operators can temporarily set `extensions.policy.pm_max_version_exceeded_mode` to `"warn"` (or `{ "project": "warn" }`) during controlled upgrade windows; the default remains `"block"`.
|
|
198
|
+
- Both bounds share the same warning-code shapes: `*_invalid` blocks, `*_unchecked` allows with a warning, and `extension_pm_min_version_unmet` / `extension_pm_max_version_exceeded` blocks unless the max-version warn mode is enabled.
|
|
205
199
|
- An empty-string or non-string `pm_min_version`/`pm_max_version` makes the whole manifest malformed (`extension_manifest_invalid:<layer>:<name>`). Omit the field instead of leaving it blank.
|
|
206
200
|
- Optional `engines.pm` and `engines.node` metadata is accepted for tooling, but `pm_min_version`/`pm_max_version` are the loader-enforced compatibility fields.
|
|
207
201
|
- Declare only capabilities the extension actually uses.
|
|
@@ -222,9 +216,16 @@ Supported capabilities:
|
|
|
222
216
|
|
|
223
217
|
First-party package exemplars:
|
|
224
218
|
|
|
225
|
-
- `pm-beads
|
|
219
|
+
- `pm-beads`: beads JSON/JSONL importer/exporter package with generated command contracts.
|
|
220
|
+
- `pm-calendar`: calendar view package for schedule/context surfaces.
|
|
221
|
+
- `pm-command-kit`: command capability exemplar for `registerCommand`, `registerFlags`, and `registerParser`.
|
|
222
|
+
- `pm-governance-audit`: governance hook exemplar for compact read/write sidecar logs.
|
|
223
|
+
- `pm-guide-shell`: guide-topic package for bundled workflow docs.
|
|
226
224
|
- `pm-lifecycle-hooks`: default-inert lifecycle hook registration.
|
|
225
|
+
- `pm-linked-test-adapters`: linked-test run-management adapters and reporters.
|
|
227
226
|
- `pm-search-advanced`: deterministic local search provider registration.
|
|
227
|
+
- `pm-templates`: reusable create-template package.
|
|
228
|
+
- `pm-todos`: todo import/export package with generated command contracts.
|
|
228
229
|
|
|
229
230
|
## Governance Policy
|
|
230
231
|
|
|
@@ -242,27 +243,30 @@ Sandbox profiles:
|
|
|
242
243
|
- `restricted`: safe default for normal package workflows
|
|
243
244
|
- `strict`: most restrictive policy profile
|
|
244
245
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
246
|
+
`sandbox_profile` and `permissions` are declaration-based load gates, not runtime
|
|
247
|
+
isolation. They let policy decide whether to load an extension; they do not stop
|
|
248
|
+
loaded JavaScript from using Node APIs at runtime. `pm package doctor --project`
|
|
249
|
+
reports the same advisory trust-model caveat in its policy summary.
|
|
250
|
+
|
|
251
|
+
`extensions.policy.pm_max_version_exceeded_mode` controls how `pm_max_version`
|
|
252
|
+
violations are handled. Use `"block"` (the default) for both global and project
|
|
253
|
+
layers, `"warn"` to allow exceeded extensions while emitting
|
|
254
|
+
`extension_pm_max_version_exceeded_warn`, or a per-layer object such as:
|
|
255
|
+
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"extensions": {
|
|
259
|
+
"policy": {
|
|
260
|
+
"pm_max_version_exceeded_mode": {
|
|
261
|
+
"global": "block",
|
|
262
|
+
"project": "warn"
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
```
|
|
264
268
|
|
|
265
|
-
Use `pm package doctor --project --detail deep --trace`
|
|
269
|
+
Surface tokens include command handlers/overrides, parser/preflight/services/renderers overrides, lifecycle hooks, schema registrations, importers, and search providers. Use `pm package doctor --project --detail deep --trace` for the exact active token names and policy warning codes.
|
|
266
270
|
|
|
267
271
|
## Registration Collisions
|
|
268
272
|
|
|
@@ -288,9 +292,10 @@ import { defineExtension } from "@unbrained/pm-cli/sdk";
|
|
|
288
292
|
|
|
289
293
|
Common APIs:
|
|
290
294
|
|
|
295
|
+
- `api.extension` is a read-only identity (`name`, `layer`, `version`, `capabilities`, `pm_min_version?`, `pm_max_version?`, `source_package?`) for self-identifying logs and version gating without re-reading the manifest.
|
|
291
296
|
- `api.registerCommand(definition)` adds package-owned commands.
|
|
292
|
-
- `api.registerFlags(command, flags)` adds runtime command flags.
|
|
293
|
-
- `api.registerItemFields(fields)` adds custom metadata fields. Agents can set declared fields with repeatable `pm create --field name=value` and `pm update <id> --field name=value`; undeclared names are rejected.
|
|
297
|
+
- `api.registerFlags(command, flags)` adds runtime command flags. A flag may declare `value_type` (canonical; the legacy `type` alias is honored only when `value_type` is absent), `list: true` to accumulate repeated/comma-joined values like core `--tags`, and a `default` applied when the flag is omitted.
|
|
298
|
+
- `api.registerItemFields(fields)` adds custom metadata fields. Agents can set declared fields with repeatable `pm create --field name=value` and `pm update <id> --field name=value`; undeclared names are rejected. Each field `type` is validated against `string | number | boolean | array | object` at activation, with a did-you-mean hint on typos.
|
|
294
299
|
- `api.registerItemTypes(types)` adds custom item types.
|
|
295
300
|
- `api.registerMigration(definition)` adds schema migrations.
|
|
296
301
|
- `api.registerService("output_format", handler)` customizes output formatting through the service override API. Return `context.payload`, `null`, or `undefined` for commands the extension does not own.
|
|
@@ -300,6 +305,7 @@ Common APIs:
|
|
|
300
305
|
item entries for mutations, including `previous_status`, `status`,
|
|
301
306
|
`changed_fields`, and partial `previous`/`current` front matter snapshots.
|
|
302
307
|
`onWrite` always includes `path`, `scope`, and `op`; item mutations also add optional `item_id`, `item_type`, `before`, `after`, and `changed_fields`.
|
|
308
|
+
- An optional module-level `deactivate()` export (VS Code-style) is invoked by the host on shutdown/reload — including by the long-running MCP server between native-action requests — to close connections, clear timers, and release resources opened during `activate`. Teardown is best-effort and timeout-bounded by default so it does not block other extensions, except when a host explicitly disables waiting limits with `deactivate_timeout_ms: 0` or `Infinity`, which can wait indefinitely for a hanging `deactivate()` hook.
|
|
303
309
|
|
|
304
310
|
The bundled `pm-lifecycle-hooks` package is the hook exemplar: it declares only
|
|
305
311
|
`hooks` and registers a default-inert `afterCommand` hook so authors can copy a
|
package/docs/SDK.md
CHANGED
|
@@ -68,6 +68,10 @@ Testing helper exports (also under `@unbrained/pm-cli/sdk/testing`):
|
|
|
68
68
|
- `activateExtensionForTest`
|
|
69
69
|
- `assertPackageManifest`
|
|
70
70
|
- `assertRegisteredCommandContract`
|
|
71
|
+
- `assertRegisteredCommandOverride`
|
|
72
|
+
- `assertRegisteredParserOverride`
|
|
73
|
+
- `assertRegisteredPreflightOverride`
|
|
74
|
+
- `assertRegisteredRendererOverride`
|
|
71
75
|
- `assertRegisteredHook`
|
|
72
76
|
- `assertRegisteredSearchProvider`
|
|
73
77
|
- `assertRegisteredImporter`
|
|
@@ -259,6 +263,86 @@ Manifest typing also accepts optional `engines` metadata:
|
|
|
259
263
|
|
|
260
264
|
Use `pm_min_version` for the loader gate. Keep `engines` as package-manager and tooling metadata.
|
|
261
265
|
|
|
266
|
+
For a complete commands-capability package that combines `registerCommand`,
|
|
267
|
+
`registerFlags`, and `registerParser`, see the first-party
|
|
268
|
+
[pm-command-kit exemplar](../packages/pm-command-kit/README.md).
|
|
269
|
+
|
|
270
|
+
## Self-Identity and Lifecycle
|
|
271
|
+
|
|
272
|
+
`activate(api)` receives a read-only `api.extension` describing the extension it
|
|
273
|
+
was created for, so authors can emit self-identifying logs, gate on their own
|
|
274
|
+
version, and build better error messages without re-reading the manifest:
|
|
275
|
+
|
|
276
|
+
```ts
|
|
277
|
+
export default defineExtension({
|
|
278
|
+
activate(api) {
|
|
279
|
+
// api.extension: { name, layer, version, capabilities, pm_min_version?, pm_max_version?, source_package? }
|
|
280
|
+
if (api.extension.version.startsWith("0.")) {
|
|
281
|
+
api.hooks.afterCommand(() => {
|
|
282
|
+
// ...pre-1.0 behaviour, labelled with api.extension.name
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
`api.extension.capabilities` is filtered to the canonical capability set, and both
|
|
290
|
+
the object and its `capabilities` array are frozen.
|
|
291
|
+
|
|
292
|
+
Modules may also export an optional VS Code-style `deactivate` teardown hook. The
|
|
293
|
+
host runs it on shutdown/reload — the long-running MCP server invokes it between
|
|
294
|
+
native-action requests — so an extension can close connections, clear timers, and
|
|
295
|
+
release buffers opened during `activate`. `deactivate` runs only for extensions
|
|
296
|
+
that activated successfully (a failed `activate` never fully initialized), and
|
|
297
|
+
teardowns run concurrently. Teardown is best-effort: a throwing `deactivate` is
|
|
298
|
+
recorded as a warning, never propagated, and each hook is bounded by a host
|
|
299
|
+
timeout so one extension cannot block another's cleanup or a host reload. Hosts
|
|
300
|
+
that call `deactivateExtensions` directly may pass `deactivate_timeout_ms: 0` or
|
|
301
|
+
`Infinity` only when they intentionally want to wait indefinitely.
|
|
302
|
+
|
|
303
|
+
```ts
|
|
304
|
+
export default defineExtension({
|
|
305
|
+
activate(api) {
|
|
306
|
+
/* open resources */
|
|
307
|
+
},
|
|
308
|
+
async deactivate() {
|
|
309
|
+
/* close connections, flush sinks, clear timers */
|
|
310
|
+
},
|
|
311
|
+
});
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
## Flag Contracts
|
|
315
|
+
|
|
316
|
+
`FlagDefinition` (used by `registerFlags` and inline command `flags`) supports the
|
|
317
|
+
same list/default semantics as core flags:
|
|
318
|
+
|
|
319
|
+
- `value_type` is the canonical coercion kind (`string` | `number` | `boolean`;
|
|
320
|
+
the aliases `int`/`integer`/`float` and `bool` are also accepted). The
|
|
321
|
+
deprecated `type` alias is still read, but `value_type` wins when both are set
|
|
322
|
+
(`value_type ?? type`). An unrecognized value type is rejected at registration.
|
|
323
|
+
- `list: true` makes a repeated, comma-joined flag accumulate into an array —
|
|
324
|
+
parity with core list flags such as `--tags`. `--scope a,b --scope c` resolves
|
|
325
|
+
to `["a", "b", "c"]`, with each element coerced by `value_type`.
|
|
326
|
+
- `default` (a scalar, or an array of scalars for a `list` flag) is applied when
|
|
327
|
+
the flag is omitted; for a `list` flag the default is flattened into the
|
|
328
|
+
accumulated array exactly like a provided value — comma-joined strings (e.g.
|
|
329
|
+
`default: "a,b"` or `default: ["a,b", "c"]`) are split into elements. A default
|
|
330
|
+
that would not cleanly coerce under the declared `value_type` (e.g.
|
|
331
|
+
`value_type: "number", default: "abc"`) is rejected at registration.
|
|
332
|
+
|
|
333
|
+
```ts
|
|
334
|
+
api.registerFlags("report", [
|
|
335
|
+
{ long: "--scope", value_type: "string", list: true, default: "all" },
|
|
336
|
+
{ long: "--limit", value_type: "number", default: 20 },
|
|
337
|
+
]);
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
`registerItemFields` validates each declared field `type` against the canonical
|
|
341
|
+
coercion kinds (`string`, `number`, `boolean`, `array`, `object`) at activation.
|
|
342
|
+
A typo fails activation with a did-you-mean hint (e.g. `type: "strnig"` →
|
|
343
|
+
`Did you mean "string"?`) instead of silently passing and failing opaquely at use
|
|
344
|
+
time.
|
|
345
|
+
|
|
262
346
|
## Expected CLI Errors
|
|
263
347
|
|
|
264
348
|
Package commands should throw expected user/action errors with the public SDK shape so the CLI can preserve exit codes and Sentry can filter expected retry failures:
|
|
@@ -408,6 +492,26 @@ const hook = assertRegisteredHook(activation.hooks, {
|
|
|
408
492
|
// hook.run is the registered OnWriteHook handler
|
|
409
493
|
```
|
|
410
494
|
|
|
495
|
+
Override registrations from `registerCommand(command, override)`, `registerParser`,
|
|
496
|
+
`registerPreflight`, and `registerRenderer` live on `activation.commands`,
|
|
497
|
+
`activation.parsers`, `activation.preflight`, and `activation.renderers` (not the
|
|
498
|
+
registration registry). Each override helper takes the matching registry and
|
|
499
|
+
returns the registered entry (so you can invoke `entry.run` directly):
|
|
500
|
+
|
|
501
|
+
```ts
|
|
502
|
+
import {
|
|
503
|
+
assertRegisteredCommandOverride,
|
|
504
|
+
assertRegisteredParserOverride,
|
|
505
|
+
assertRegisteredPreflightOverride,
|
|
506
|
+
assertRegisteredRendererOverride,
|
|
507
|
+
} from "@unbrained/pm-cli/sdk/testing";
|
|
508
|
+
|
|
509
|
+
assertRegisteredCommandOverride(activation.commands, { command: "list" });
|
|
510
|
+
assertRegisteredParserOverride(activation.parsers, { command: "list", extensionName: "my-ext" });
|
|
511
|
+
assertRegisteredPreflightOverride(activation.preflight); // preflight overrides are global (no command)
|
|
512
|
+
assertRegisteredRendererOverride(activation.renderers, { format: "toon" });
|
|
513
|
+
```
|
|
514
|
+
|
|
411
515
|
The bundled `pm-lifecycle-hooks` package is the first-party hooks exemplar. It
|
|
412
516
|
declares only the `hooks` capability and registers a default-inert `afterCommand`
|
|
413
517
|
hook, so package authors can copy a lifecycle pattern that does not write files,
|
package/docs/TESTING.md
CHANGED
|
@@ -31,6 +31,38 @@ node scripts/run-tests.mjs test -- tests/integration/cli.integration.spec.ts
|
|
|
31
31
|
|
|
32
32
|
Use focused runs while iterating, then run coverage before closure when risk or scope warrants it.
|
|
33
33
|
|
|
34
|
+
## Coverage Governance
|
|
35
|
+
|
|
36
|
+
Coverage gating now targets literal source coverage for `src/`:
|
|
37
|
+
|
|
38
|
+
- `vitest.config.ts` includes `src/*.ts` and `src/**/*.ts`.
|
|
39
|
+
- Thresholds are explicit ratchet baselines for the measured all-source corpus and should only move upward until they reach 100%.
|
|
40
|
+
- Avoid reintroducing a curated `include`/`exclude` allowlist for production `src` modules.
|
|
41
|
+
- Prefer extracting deterministic pure helpers (and unit-testing them) when an orchestration-heavy file is difficult to cover directly.
|
|
42
|
+
|
|
43
|
+
## Search Quality Evaluation
|
|
44
|
+
|
|
45
|
+
`search-advanced` exposes an advisory golden-query harness for relevance drift checks.
|
|
46
|
+
|
|
47
|
+
Fixture source:
|
|
48
|
+
|
|
49
|
+
- `tests/search-eval/golden-queries.json`
|
|
50
|
+
|
|
51
|
+
Local run:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pm install search-advanced --project
|
|
55
|
+
pm reindex --mode keyword --eval --eval-fixtures tests/search-eval/golden-queries.json --json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Fixture authoring notes:
|
|
59
|
+
|
|
60
|
+
- Each fixture must include `query`, `expected_top_ids`, and optionally `mode` (`keyword|semantic|hybrid`) and `min_ndcg_at_5` (`0..1`).
|
|
61
|
+
- Keep expected IDs deterministic and scoped to stable seed data so CI does not flap.
|
|
62
|
+
- Add new fixtures for regressions before tuning search defaults.
|
|
63
|
+
|
|
64
|
+
CI currently runs this gate in advisory mode (`continue-on-error: true`), so failures do not block merges by default; treat failing nDCG as a quality signal to investigate, not as a silent ignore.
|
|
65
|
+
|
|
34
66
|
## Linked Tests
|
|
35
67
|
|
|
36
68
|
Add tests to the item that owns the work:
|
|
@@ -77,6 +109,20 @@ pm test <item-id> --run --pm-context tracker
|
|
|
77
109
|
pm test <item-id> --run --pm-context auto --check-context --auto-pm-context
|
|
78
110
|
```
|
|
79
111
|
|
|
112
|
+
For complex linked-test commands, prefer JSON input so shell syntax survives unchanged:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
pm test <item-id> --add-json '{"command":"node scripts/run-tests.mjs test -- tests/unit/output.spec.ts","timeout_seconds":240}'
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
To rerun a focused subset without editing linked-test metadata:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
pm test <item-id> --run --match output
|
|
122
|
+
pm test <item-id> --run --only-index 2
|
|
123
|
+
pm test <item-id> --run --only-last
|
|
124
|
+
```
|
|
125
|
+
|
|
80
126
|
Strict governance flags:
|
|
81
127
|
|
|
82
128
|
```bash
|
|
@@ -120,6 +166,20 @@ pm test-runs resume <run-id>
|
|
|
120
166
|
|
|
121
167
|
Background run fingerprints prevent duplicate parallel runs for the same linked-test set.
|
|
122
168
|
|
|
169
|
+
The bundled `pm-linked-test-adapters` package is the first-party package
|
|
170
|
+
exemplar for background run management. Install it in an isolated project when
|
|
171
|
+
validating package-provided test-run surfaces:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
pm install linked-test-adapters --project
|
|
175
|
+
pm package doctor --project --detail deep --trace
|
|
176
|
+
pm test-runs list --json
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
The package activates the `test-runs` command family and keeps subprocess
|
|
180
|
+
handling behind an explicit package permission declaration, so it is a useful
|
|
181
|
+
smoke target for package, permission, and command-contract changes.
|
|
182
|
+
|
|
123
183
|
## Release-Readiness Checks
|
|
124
184
|
|
|
125
185
|
For substantial changes:
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/unbraind/pm-cli/main/docs/schemas/extension-manifest.schema.json",
|
|
4
|
+
"title": "pm extension manifest",
|
|
5
|
+
"description": "Schema for a pm extension's manifest.json. The loader tolerates unknown fields (including $schema), so additionalProperties stays true; only the fields listed here are read. Note: sandbox_profile and permissions are advisory, declaration-based load gates — pm does not isolate extension code at runtime (ADR pm-6ef3).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["name", "version", "entry"],
|
|
8
|
+
"additionalProperties": true,
|
|
9
|
+
"properties": {
|
|
10
|
+
"$schema": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "Optional pointer to this schema for inline IDE validation. Ignored by the loader."
|
|
13
|
+
},
|
|
14
|
+
"name": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"minLength": 1,
|
|
17
|
+
"description": "Unique extension name. A project-layer extension with the same name overrides a global-layer one."
|
|
18
|
+
},
|
|
19
|
+
"version": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"minLength": 1,
|
|
22
|
+
"description": "Extension version (semver recommended)."
|
|
23
|
+
},
|
|
24
|
+
"entry": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"minLength": 1,
|
|
27
|
+
"description": "Path to the entry module, relative to the extension directory. Must resolve inside the extension directory."
|
|
28
|
+
},
|
|
29
|
+
"priority": {
|
|
30
|
+
"type": "integer",
|
|
31
|
+
"description": "Load-order priority within a layer (lower loads first). Defaults to 100."
|
|
32
|
+
},
|
|
33
|
+
"manifest_version": {
|
|
34
|
+
"type": "integer",
|
|
35
|
+
"enum": [1, 2],
|
|
36
|
+
"description": "Optional manifest format version."
|
|
37
|
+
},
|
|
38
|
+
"pm_min_version": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"minLength": 1,
|
|
41
|
+
"description": "Minimum compatible pm CLI version. A leading \">=\" prefix is accepted. Unmet minimums block loading.",
|
|
42
|
+
"examples": ["2026.5.0", ">=2026.5.0"]
|
|
43
|
+
},
|
|
44
|
+
"pm_max_version": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"minLength": 1,
|
|
47
|
+
"pattern": "^[^<>=~^]",
|
|
48
|
+
"description": "Maximum compatible pm CLI version as an exact version (range prefixes like >=, <, ~, ^ are rejected). Exceeding it blocks loading by default; extensions.policy.pm_max_version_exceeded_mode can relax this to warn-only.",
|
|
49
|
+
"examples": ["2026.12.31"]
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"type": "object",
|
|
53
|
+
"description": "Engine compatibility declarations (e.g. pm, node). Every value must be a non-empty string.",
|
|
54
|
+
"additionalProperties": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"minLength": 1
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"trusted": {
|
|
60
|
+
"type": "boolean",
|
|
61
|
+
"description": "Declares the extension as trusted for extensions.policy.trust_mode evaluation."
|
|
62
|
+
},
|
|
63
|
+
"provenance": {
|
|
64
|
+
"type": "object",
|
|
65
|
+
"description": "Optional provenance metadata used by require_provenance policy checks.",
|
|
66
|
+
"properties": {
|
|
67
|
+
"source": { "type": "string", "minLength": 1 },
|
|
68
|
+
"signature": { "type": "string", "minLength": 1 },
|
|
69
|
+
"attestation": { "type": "string", "minLength": 1 },
|
|
70
|
+
"verified": { "type": "boolean" }
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"sandbox_profile": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"enum": ["none", "restricted", "strict"],
|
|
76
|
+
"description": "Advisory sandbox profile evaluated against declared permissions when extensions.policy.mode is active. Declaration-based load gate only — not runtime isolation (ADR pm-6ef3)."
|
|
77
|
+
},
|
|
78
|
+
"permissions": {
|
|
79
|
+
"type": "object",
|
|
80
|
+
"description": "Advisory runtime permission declarations checked against the sandbox profile. Not enforced at runtime (ADR pm-6ef3).",
|
|
81
|
+
"properties": {
|
|
82
|
+
"fs_read": { "type": "boolean" },
|
|
83
|
+
"fs_write": { "type": "boolean" },
|
|
84
|
+
"network": { "type": "boolean" },
|
|
85
|
+
"env_read": { "type": "boolean" },
|
|
86
|
+
"env_write": { "type": "boolean" },
|
|
87
|
+
"process_spawn": { "type": "boolean" }
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"capabilities": {
|
|
91
|
+
"type": "array",
|
|
92
|
+
"description": "Capabilities the extension's registrations may use. Known: commands, renderers, hooks, schema, importers, search, parser, preflight, services (legacy aliases migration/validation map to schema). Unknown values only warn.",
|
|
93
|
+
"items": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"examples": [
|
|
96
|
+
"commands",
|
|
97
|
+
"renderers",
|
|
98
|
+
"hooks",
|
|
99
|
+
"schema",
|
|
100
|
+
"importers",
|
|
101
|
+
"search",
|
|
102
|
+
"parser",
|
|
103
|
+
"preflight",
|
|
104
|
+
"services"
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"activation": {
|
|
109
|
+
"type": "object",
|
|
110
|
+
"description": "Lazy-activation metadata.",
|
|
111
|
+
"properties": {
|
|
112
|
+
"commands": {
|
|
113
|
+
"type": "array",
|
|
114
|
+
"description": "Command names that trigger activation.",
|
|
115
|
+
"items": { "type": "string" }
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-cli",
|
|
3
|
-
"version": "2026.6.
|
|
3
|
+
"version": "2026.6.10",
|
|
4
4
|
"description": "Git-native project management CLI for humans and agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "unbrained",
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
}
|
|
126
126
|
},
|
|
127
127
|
"dependencies": {
|
|
128
|
-
"@sentry/node": "^10.
|
|
128
|
+
"@sentry/node": "^10.57.0",
|
|
129
129
|
"@toon-format/toon": "^2.3.0",
|
|
130
130
|
"commander": "^14.0.3",
|
|
131
131
|
"fast-glob": "^3.3.3",
|
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
"version": "0.1.0",
|
|
4
4
|
"entry": "./index.js",
|
|
5
5
|
"priority": 0,
|
|
6
|
+
"trusted": true,
|
|
7
|
+
"sandbox_profile": "restricted",
|
|
8
|
+
"permissions": {
|
|
9
|
+
"fs_read": true,
|
|
10
|
+
"fs_write": true,
|
|
11
|
+
"network": false,
|
|
12
|
+
"env_read": true,
|
|
13
|
+
"env_write": false,
|
|
14
|
+
"process_spawn": false
|
|
15
|
+
},
|
|
6
16
|
"capabilities": [
|
|
7
17
|
"commands",
|
|
8
18
|
"schema",
|
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
"version": "0.1.0",
|
|
4
4
|
"entry": "./index.js",
|
|
5
5
|
"priority": 0,
|
|
6
|
+
"trusted": true,
|
|
7
|
+
"sandbox_profile": "strict",
|
|
8
|
+
"permissions": {
|
|
9
|
+
"fs_read": true,
|
|
10
|
+
"fs_write": false,
|
|
11
|
+
"network": false,
|
|
12
|
+
"env_read": true,
|
|
13
|
+
"env_write": false,
|
|
14
|
+
"process_spawn": false
|
|
15
|
+
},
|
|
6
16
|
"capabilities": ["commands", "schema", "services"],
|
|
7
17
|
"manifest_version": 1,
|
|
8
18
|
"pm_min_version": "2026.5.0",
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# @unbrained/pm-command-kit
|
|
2
|
+
|
|
3
|
+
First-party **exemplar package** for the pm extension `commands` capability. Copy this
|
|
4
|
+
package wholesale when you want to ship your own pm command: it demonstrates the three
|
|
5
|
+
command-facing SDK registration APIs in their smallest complete form.
|
|
6
|
+
|
|
7
|
+
## What it demonstrates
|
|
8
|
+
|
|
9
|
+
| API | What the exemplar does |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `api.registerCommand(definition)` | Registers `pm command-kit echo` with a FULL `CommandDefinition`: `name`, `action`, `description`, `intent`, `arguments` (required variadic positional), `flags`, `examples`, `failure_hints`, and a pure `run` handler. |
|
|
12
|
+
| `api.registerParser(command, override)` | Preprocesses parsed options before the handler runs: rewrites the deprecated `--shout` alias to `--upper`, coerces `--repeat` to a positive integer, and trims/dedupes `--decorations` values. The override returns a delta (`{ options }`) that is merged over the parsed input. |
|
|
13
|
+
| `api.registerFlags(targetCommand, flags)` | Injects an inert, namespaced `--kit-note <text>` flag into the EXISTING core `pm list` command — the pattern for augmenting commands you do not own. |
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pm install command-kit --project
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pm command-kit echo "hello world"
|
|
25
|
+
pm command-kit echo hello --upper --repeat 2
|
|
26
|
+
pm command-kit echo hello --decorations star,spark --decorations wave
|
|
27
|
+
pm command-kit echo hello --shout # parser rewrites --shout to --upper
|
|
28
|
+
pm list --kit-note "triage pass" # injected flag; core list ignores it
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The command returns a structured result (rendered as TOON or JSON by the host):
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"action": "command-kit-echo",
|
|
36
|
+
"message": "HELLO",
|
|
37
|
+
"lines": ["HELLO", "HELLO"],
|
|
38
|
+
"repeat": 2,
|
|
39
|
+
"upper": true,
|
|
40
|
+
"decorations": []
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Package anatomy
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
packages/pm-command-kit/
|
|
48
|
+
├── package.json # pm resources: aliases, extensions, catalog, docs
|
|
49
|
+
├── README.md
|
|
50
|
+
└── extensions/command-kit/
|
|
51
|
+
├── manifest.json # capabilities, trusted, sandbox_profile, permissions
|
|
52
|
+
├── index.ts # TypeScript source (type-only SDK imports)
|
|
53
|
+
└── index.js # hand-maintained runtime module (import-free)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Key conventions for authors:
|
|
57
|
+
|
|
58
|
+
- `index.js` is what actually runs. It is **import-free** so the extension loads in
|
|
59
|
+
extension-only installs without SDK module resolution. `index.ts` mirrors it with
|
|
60
|
+
`import type { ... } from` the SDK for editor/typecheck support; type-only imports are
|
|
61
|
+
erased and keep the shipped `.js` dependency-free.
|
|
62
|
+
- The module's `manifest.capabilities` literal must match `manifest.json` exactly
|
|
63
|
+
(`commands` for `registerCommand`, `schema` for flag definitions/`registerFlags`,
|
|
64
|
+
`parser` for `registerParser`).
|
|
65
|
+
- This extension is pure compute (no fs/network/env/process access), so the manifest
|
|
66
|
+
declares `"trusted": true`, `"sandbox_profile": "strict"`, and all six permission keys
|
|
67
|
+
(`fs_read`, `fs_write`, `network`, `env_read`, `env_write`, `process_spawn`) as `false`.
|
|
68
|
+
Declare only what your extension actually does — the extension policy engine evaluates
|
|
69
|
+
these fields when sandbox/trust enforcement is enabled.
|
|
70
|
+
- `activation.commands` in `manifest.json` lists both package-owned commands and
|
|
71
|
+
existing commands that receive injected flags so the host can lazily activate the
|
|
72
|
+
extension before option validation.
|