@unbrained/pm-cli 2026.6.19 → 2026.6.21
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 +328 -258
- package/README.md +1 -1
- package/dist/cli/bootstrap-args.d.ts +12 -1
- package/dist/cli/bootstrap-args.js +20 -9
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commander-usage.js +31 -25
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/completion.js +3 -3
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/contracts.js +4 -3
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/eval.d.ts +62 -0
- package/dist/cli/commands/eval.js +158 -0
- package/dist/cli/commands/eval.js.map +1 -0
- package/dist/cli/commands/extension/install-sources.d.ts +12 -0
- package/dist/cli/commands/extension/install-sources.js +77 -10
- package/dist/cli/commands/extension/install-sources.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.js +49 -3
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension.js +9 -2
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/gc.d.ts +12 -1
- package/dist/cli/commands/gc.js +53 -6
- package/dist/cli/commands/gc.js.map +1 -1
- package/dist/cli/commands/health.js +27 -9
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.js +3 -2
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/linked-artifacts.js +13 -3
- package/dist/cli/commands/linked-artifacts.js.map +1 -1
- package/dist/cli/commands/list.js +12 -9
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/plan.js +2 -2
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/restore.js +5 -11
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/search.d.ts +39 -1
- package/dist/cli/commands/search.js +89 -12
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/update.js +96 -58
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +1 -1
- package/dist/cli/commands/validate.js +44 -2
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/extension-command-help.d.ts +9 -0
- package/dist/cli/extension-command-help.js +13 -2
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/extension-command-options.d.ts +8 -0
- package/dist/cli/extension-command-options.js +27 -2
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/help-content.js +15 -2
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/main.d.ts +12 -0
- package/dist/cli/main.js +49 -9
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +34 -4
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-operations.js +3 -3
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli-bundle/chunks/activity-CIHV64UC.js +18 -0
- package/dist/cli-bundle/chunks/{activity-XJ7WRNWS.js → activity-KW3IRP44.js} +11 -11
- package/dist/cli-bundle/chunks/{aggregate-LBCWF6UJ.js → aggregate-3ZKQG5SW.js} +10 -10
- package/dist/cli-bundle/chunks/{aggregate-OFT4YVB6.js → aggregate-FIGQEIL3.js} +10 -10
- package/dist/cli-bundle/chunks/{append-BP2ARHOK.js → append-EWJYJ7CH.js} +8 -8
- package/dist/cli-bundle/chunks/{append-5U3XR5SD.js → append-QEOLX3XB.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-CSRFOIHG.js → chunk-2EIMPCE4.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-MAKOMXVM.js → chunk-2GCDRRIF.js} +106 -67
- package/dist/cli-bundle/chunks/chunk-2GCDRRIF.js.map +1 -0
- package/dist/cli-bundle/chunks/{search-AZR2JITW.js → chunk-2PKHRP6G.js} +190 -22
- package/dist/cli-bundle/chunks/chunk-2PKHRP6G.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YWAYOWDQ.js → chunk-32R4PIC6.js} +118 -15
- package/dist/cli-bundle/chunks/chunk-32R4PIC6.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-II3WDRCM.js → chunk-37QXHBIB.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-UCNEPMPY.js → chunk-3EWSGA7N.js} +105 -66
- package/dist/cli-bundle/chunks/chunk-3EWSGA7N.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-UMTPQMEG.js → chunk-3MDHREEV.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-I2VJM36R.js → chunk-434HM6Z5.js} +21 -21
- package/dist/cli-bundle/chunks/chunk-434HM6Z5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-Y4IBSEQ2.js → chunk-52OCIDPG.js} +20 -8
- package/dist/cli-bundle/chunks/chunk-52OCIDPG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-DJ3YYLHG.js → chunk-5FIEHKEX.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-OURX4WVG.js → chunk-5IDI42VV.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-UA4ANRJY.js → chunk-5PCI3UBT.js} +119 -16
- package/dist/cli-bundle/chunks/chunk-5PCI3UBT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RVG3WLY3.js → chunk-5QICDWMV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LIVRA6VG.js → chunk-6CJWZAN7.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-AVMSP2HH.js → chunk-6H4LF7AO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-B2NEFANY.js → chunk-6M4RJS4M.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-4BFNWAMQ.js → chunk-6ZXM2XNF.js} +29 -12
- package/dist/cli-bundle/chunks/chunk-6ZXM2XNF.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-A5JPMD4Q.js → chunk-76Z3YSHV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5NS6TJ2F.js → chunk-7D3SAQXM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-DVUU3AHP.js → chunk-A4Z7ZOL5.js} +17 -6
- package/dist/cli-bundle/chunks/chunk-A4Z7ZOL5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-2E3KSWFG.js → chunk-AIS5PGI3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-47BYN6CA.js → chunk-AZMOLBN3.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-DYZKSIVX.js → chunk-B473GZWW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-RNWE2HZR.js → chunk-C3AZ5ZML.js} +15 -15
- package/dist/cli-bundle/chunks/{chunk-S673PVHD.js → chunk-C4N5I7ZW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-TYQBGXH2.js → chunk-CF55WVVS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4EOS35RL.js → chunk-CZPXY7UW.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-MPEWACTG.js → chunk-CZUB4XWO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-22YA6GCA.js → chunk-D7FYS6PG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5SRID7DV.js → chunk-EBH56IXK.js} +29 -12
- package/dist/cli-bundle/chunks/chunk-EBH56IXK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-UIMLAFOE.js → chunk-F5NZWFSW.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-PSWSQHM7.js → chunk-F7K5GWP3.js} +15 -19
- package/dist/cli-bundle/chunks/chunk-F7K5GWP3.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-H3DP6OUM.js → chunk-FKBDKV7Y.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-SO2IOH37.js → chunk-FRUFKWNK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-7R5YKVKO.js → chunk-FWPDUYEY.js} +7 -7
- package/dist/cli-bundle/chunks/{search-2JX776KX.js → chunk-GMHPNNYG.js} +184 -23
- package/dist/cli-bundle/chunks/chunk-GMHPNNYG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-USVOBLGB.js → chunk-GOZUHWFD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ZBVYKWT2.js → chunk-H7NJZWG2.js} +15 -15
- package/dist/cli-bundle/chunks/{chunk-FPQA4ZMA.js → chunk-HC4AWIKT.js} +18 -7
- package/dist/cli-bundle/chunks/chunk-HC4AWIKT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-4L7Q4OVT.js → chunk-HCU6WUSY.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-2RI3BDFK.js → chunk-HIP7WVTL.js} +10 -9
- package/dist/cli-bundle/chunks/chunk-HIP7WVTL.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-5QLHQK7V.js → chunk-HMOADQVT.js} +26 -26
- package/dist/cli-bundle/chunks/chunk-HMOADQVT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-K5TD74VU.js → chunk-J4MYYSOL.js} +19 -7
- package/dist/cli-bundle/chunks/chunk-J4MYYSOL.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GDOTTY2S.js → chunk-JINYH2DB.js} +40 -2
- package/dist/cli-bundle/chunks/chunk-JINYH2DB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-EMFDZ7N3.js → chunk-LEU5GHRC.js} +55 -5
- package/dist/cli-bundle/chunks/chunk-LEU5GHRC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-PRUB7RI4.js → chunk-LUWW7L4B.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-N7LDJRB4.js → chunk-M5XALUSL.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NPNNW5TU.js → chunk-N5ZJACJ6.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-NNMBNN6Q.js → chunk-NB3PYLQ6.js} +7 -5
- package/dist/cli-bundle/chunks/{chunk-USKTNI7P.js → chunk-NIGXMNNI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-GL3QKIET.js → chunk-NIUEXCFS.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-OUG4CL4H.js → chunk-NJHMAJ6N.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-2K56AWDP.js → chunk-NJN7LL7U.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-5P2LQV2F.js → chunk-NSBZ2CKF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ZZEM2PH7.js → chunk-NXS7ZKAK.js} +19 -14
- package/dist/cli-bundle/chunks/chunk-NXS7ZKAK.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-XV6N3QND.js → chunk-O47BPOPC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-X26ODPU4.js → chunk-OFYMIDF2.js} +14 -18
- package/dist/cli-bundle/chunks/chunk-OFYMIDF2.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-QCHNPN24.js → chunk-OTHIWLMB.js} +7 -5
- package/dist/cli-bundle/chunks/{chunk-YVYJQR6S.js → chunk-PFSRUHDH.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-M35R7LFX.js → chunk-PP2U4NMT.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-ZGEWEO7B.js → chunk-PUH4D67U.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LEC57E7K.js → chunk-Q2J2HJUN.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QSH34DSQ.js → chunk-QGG32QHW.js} +61 -4
- package/dist/cli-bundle/chunks/chunk-QGG32QHW.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-QG6M6XQE.js → chunk-QQHISQBJ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-BQVESTOG.js → chunk-QZTWBFXJ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-COHNQLB2.js → chunk-R2EMWY7Q.js} +41 -3
- package/dist/cli-bundle/chunks/chunk-R2EMWY7Q.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5LZPDRFW.js → chunk-RLK7P77C.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-QTWWHFI3.js → chunk-RVHYI7SL.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-FVZSUIN5.js → chunk-SBGXDO7A.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-VP4Z36GO.js → chunk-SRYYRVPB.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-X7RKOJXL.js → chunk-SX75ADBK.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-MTDEEUGV.js → chunk-TKBHZPKD.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-HMQMRHQJ.js → chunk-UEMNL33O.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-SDUZTZ55.js → chunk-UPE3CDD7.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-VG3B2CYD.js → chunk-UV6IYE5U.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YOGXK3ON.js → chunk-WQ7NIVDK.js} +18 -13
- package/dist/cli-bundle/chunks/chunk-WQ7NIVDK.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-MTGMNUMJ.js → chunk-YCJX76PW.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FP7YLQ52.js → chunk-Z6T4PQI2.js} +11 -10
- package/dist/cli-bundle/chunks/chunk-Z6T4PQI2.js.map +1 -0
- package/dist/cli-bundle/chunks/{claim-2BSYPJTJ.js → claim-RC56YUWG.js} +10 -10
- package/dist/cli-bundle/chunks/{claim-EZ6JKY5X.js → claim-THOJ6CMV.js} +10 -10
- package/dist/cli-bundle/chunks/close-DNMHGOCX.js +15 -0
- package/dist/cli-bundle/chunks/{close-3TSX6BYF.js → close-SG5MNCVQ.js} +8 -8
- package/dist/cli-bundle/chunks/{close-many-HB4UFCS3.js → close-many-3L3AQZBU.js} +15 -15
- package/dist/cli-bundle/chunks/{close-many-B7DBVA46.js → close-many-DKQLBGLV.js} +15 -15
- package/dist/cli-bundle/chunks/{comments-M7PAINZT.js → comments-M7ZOZNBX.js} +10 -10
- package/dist/cli-bundle/chunks/{comments-X7M7XM6I.js → comments-SKWMDWCW.js} +10 -10
- package/dist/cli-bundle/chunks/{config-YICACPHA.js → config-7CK62S7T.js} +30 -10
- package/dist/cli-bundle/chunks/config-7CK62S7T.js.map +1 -0
- package/dist/cli-bundle/chunks/{config-UWF3KRP5.js → config-OZCUABPB.js} +29 -9
- package/dist/cli-bundle/chunks/config-OZCUABPB.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-EGUGU4K7.js → context-OEC366TO.js} +13 -13
- package/dist/cli-bundle/chunks/{context-V32ZAPL6.js → context-PUG2A7RC.js} +13 -13
- package/dist/cli-bundle/chunks/{contracts-B2YWYUV5.js → contracts-3THOLA7L.js} +10 -8
- package/dist/cli-bundle/chunks/contracts-3THOLA7L.js.map +7 -0
- package/dist/cli-bundle/chunks/{contracts-7G553BHP.js → contracts-N65FXEOL.js} +10 -8
- package/dist/cli-bundle/chunks/contracts-N65FXEOL.js.map +1 -0
- package/dist/cli-bundle/chunks/{copy-NWFFRYWM.js → copy-6QLHILAC.js} +7 -7
- package/dist/cli-bundle/chunks/{copy-RMLXLZOL.js → copy-JPX7VZCH.js} +7 -7
- package/dist/cli-bundle/chunks/create-NNP6TSFO.js +30 -0
- package/dist/cli-bundle/chunks/{create-GK4MX2LJ.js → create-Y54ZVVZH.js} +14 -14
- package/dist/cli-bundle/chunks/{delete-RMGNIL2S.js → delete-63PCMQAJ.js} +7 -7
- package/dist/cli-bundle/chunks/{delete-EFQLVEAS.js → delete-GDSMGAGJ.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-WKHUPVD3.js → deps-T4ZF5G54.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-K2I7QV4Y.js → deps-XYQ73XRH.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-3FXRDYA7.js → docs-C75YIXHC.js} +10 -9
- package/dist/cli-bundle/chunks/{docs-3FXRDYA7.js.map → docs-C75YIXHC.js.map} +1 -1
- package/dist/cli-bundle/chunks/{docs-2H2UGIT6.js → docs-EHNPDWUL.js} +12 -11
- package/dist/cli-bundle/chunks/{docs-2H2UGIT6.js.map → docs-EHNPDWUL.js.map} +1 -1
- package/dist/cli-bundle/chunks/eval-3WKDTRMH.js +276 -0
- package/dist/cli-bundle/chunks/eval-3WKDTRMH.js.map +1 -0
- package/dist/cli-bundle/chunks/eval-GTENKE24.js +286 -0
- package/dist/cli-bundle/chunks/eval-GTENKE24.js.map +7 -0
- package/dist/cli-bundle/chunks/{extension-4LPTFTV4.js → extension-46NWACO3.js} +5 -5
- package/dist/cli-bundle/chunks/{extension-ASUPTDCC.js → extension-D5FDZ2CO.js} +5 -5
- package/dist/cli-bundle/chunks/{files-TXEQOA7C.js → files-DSZBOSSN.js} +12 -11
- package/dist/cli-bundle/chunks/{files-TXEQOA7C.js.map → files-DSZBOSSN.js.map} +1 -1
- package/dist/cli-bundle/chunks/{files-UAZFB3EA.js → files-X3H7CCBQ.js} +10 -9
- package/dist/cli-bundle/chunks/{files-UAZFB3EA.js.map → files-X3H7CCBQ.js.map} +1 -1
- package/dist/cli-bundle/chunks/{focus-UGROAMAX.js → focus-5STQXDPU.js} +8 -8
- package/dist/cli-bundle/chunks/{focus-ELOPN2SR.js → focus-MDVPOWB5.js} +8 -8
- package/dist/cli-bundle/chunks/gc-ZC7JHBG7.js +395 -0
- package/dist/cli-bundle/chunks/gc-ZC7JHBG7.js.map +7 -0
- package/dist/cli-bundle/chunks/gc-ZMST3WQP.js +385 -0
- package/dist/cli-bundle/chunks/gc-ZMST3WQP.js.map +1 -0
- package/dist/cli-bundle/chunks/{get-OTXPLWYW.js → get-J2IPJRZW.js} +11 -11
- package/dist/cli-bundle/chunks/{get-IWZ7IMPS.js → get-NT7L2HUZ.js} +11 -11
- package/dist/cli-bundle/chunks/{health-PPTJ7XKW.js → health-IVMA3XQC.js} +38 -26
- package/dist/cli-bundle/chunks/health-IVMA3XQC.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-JEBESKID.js → health-WOYBR3KU.js} +37 -25
- package/dist/cli-bundle/chunks/health-WOYBR3KU.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-HNWBUDMI.js → history-RLH2QCRO.js} +10 -10
- package/dist/cli-bundle/chunks/history-WX3MGFS2.js +20 -0
- package/dist/cli-bundle/chunks/{history-compact-MMQC7MCW.js → history-compact-UXDIFC33.js} +12 -12
- package/dist/cli-bundle/chunks/{history-compact-EQXVPK3V.js → history-compact-ZBEBGJM7.js} +12 -12
- package/dist/cli-bundle/chunks/{history-redact-UBDHBEJE.js → history-redact-P7I7AWMB.js} +11 -11
- package/dist/cli-bundle/chunks/history-redact-YQGU3XRA.js +21 -0
- package/dist/cli-bundle/chunks/{history-repair-GMMHFAGH.js → history-repair-52KINVIK.js} +12 -12
- package/dist/cli-bundle/chunks/{history-repair-7DSDRPMX.js → history-repair-RM5ITLU5.js} +12 -12
- package/dist/cli-bundle/chunks/{init-QGK4JFF6.js → init-2BNZOO6F.js} +10 -10
- package/dist/cli-bundle/chunks/init-SC2P6CHP.js +20 -0
- package/dist/cli-bundle/chunks/{learnings-DR53TWRA.js → learnings-W6F3FIPL.js} +10 -10
- package/dist/cli-bundle/chunks/{learnings-A6DGBMG3.js → learnings-YGYVHWJK.js} +10 -10
- package/dist/cli-bundle/chunks/{list-LJ5DBXC3.js → list-K6FPV4J4.js} +10 -10
- package/dist/cli-bundle/chunks/{list-KOJN23UL.js → list-KPAYU5KZ.js} +10 -10
- package/dist/cli-bundle/chunks/{notes-7VLTHKPW.js → notes-PU74EPKV.js} +10 -10
- package/dist/cli-bundle/chunks/{notes-K5I3TAYR.js → notes-YTD6ZILW.js} +10 -10
- package/dist/cli-bundle/chunks/{plan-X3STKLED.js → plan-FNXHXRCI.js} +15 -15
- package/dist/cli-bundle/chunks/plan-FNXHXRCI.js.map +7 -0
- package/dist/cli-bundle/chunks/{plan-BK3OMLGP.js → plan-GEQYUCBW.js} +16 -16
- package/dist/cli-bundle/chunks/plan-GEQYUCBW.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-XDLFESU7.js → register-list-query-PHWYHENI.js} +43 -22
- package/dist/cli-bundle/chunks/register-list-query-PHWYHENI.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-FUMXPWZ4.js → register-list-query-QI45RMKN.js} +42 -21
- package/dist/cli-bundle/chunks/register-list-query-QI45RMKN.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-RXRX4P7D.js → register-mutation-X3BUOQEL.js} +33 -33
- package/dist/cli-bundle/chunks/{register-mutation-ZAGVKMBQ.js → register-mutation-YINRTS7L.js} +33 -33
- package/dist/cli-bundle/chunks/{register-operations-DGSHCS75.js → register-operations-E5JEASRK.js} +35 -35
- package/dist/cli-bundle/chunks/register-operations-E5JEASRK.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-6UURPZN5.js → register-operations-MIDTRW7S.js} +34 -34
- package/dist/cli-bundle/chunks/{register-operations-6UURPZN5.js.map → register-operations-MIDTRW7S.js.map} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-LTJG52WP.js → register-setup-DYBFLEZX.js} +15 -15
- package/dist/cli-bundle/chunks/{register-setup-2FEGSFLM.js → register-setup-EG2U6CEU.js} +15 -15
- package/dist/cli-bundle/chunks/restore-5KHR2YYQ.js +19 -0
- package/dist/cli-bundle/chunks/{restore-SJUWYOCK.js → restore-XQYSWBV7.js} +11 -11
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-VWAMP2S2.js → scheduling-shortcuts-HJMTEXKE.js} +14 -14
- package/dist/cli-bundle/chunks/{scheduling-shortcuts-W4F2LKHW.js → scheduling-shortcuts-NNT5ASZR.js} +14 -14
- package/dist/cli-bundle/chunks/{schema-N5ETYD4P.js → schema-263RI4WW.js} +9 -9
- package/dist/cli-bundle/chunks/{schema-DXQRIEFM.js → schema-TZXW6XWD.js} +9 -9
- package/dist/cli-bundle/chunks/search-LECJYSXE.js +33 -0
- package/dist/cli-bundle/chunks/search-SFRJOVDG.js +37 -0
- package/dist/cli-bundle/chunks/{stats-ZFESFVQC.js → stats-N7ER2PNK.js} +8 -8
- package/dist/cli-bundle/chunks/{stats-J563NJBY.js → stats-VPBGSRQH.js} +8 -8
- package/dist/cli-bundle/chunks/{telemetry-BNGLIFEM.js → telemetry-L6K3BUIQ.js} +4 -4
- package/dist/cli-bundle/chunks/{telemetry-SC7HPRXX.js → telemetry-PP3FUNBU.js} +4 -4
- package/dist/cli-bundle/chunks/{test-47UQGEXE.js → test-3EGNS3T5.js} +15 -15
- package/dist/cli-bundle/chunks/{test-55RJCGRU.js → test-RQCTSWUK.js} +15 -15
- package/dist/cli-bundle/chunks/{test-all-DN6KG4FX.js → test-all-NJ5V2QFS.js} +15 -15
- package/dist/cli-bundle/chunks/{test-all-5SFTTRNL.js → test-all-ZHFAWNC3.js} +15 -15
- package/dist/cli-bundle/chunks/{test-runs-NHRBT7SN.js → test-runs-AJHR6IQF.js} +5 -5
- package/dist/cli-bundle/chunks/{test-runs-DZEDJ4GH.js → test-runs-GN3C6GOI.js} +5 -5
- package/dist/cli-bundle/chunks/update-6YXOGHRT.js +24 -0
- package/dist/cli-bundle/chunks/update-6YXOGHRT.js.map +7 -0
- package/dist/cli-bundle/chunks/update-V33YUBRP.js +28 -0
- package/dist/cli-bundle/chunks/update-V33YUBRP.js.map +1 -0
- package/dist/cli-bundle/chunks/{update-many-IRNV3OTG.js → update-many-N2AN6ZDH.js} +23 -23
- package/dist/cli-bundle/chunks/{update-many-OKYWFCBO.js → update-many-RYQ64CFW.js} +23 -23
- package/dist/cli-bundle/chunks/{upgrade-KP4I45V5.js → upgrade-TJXFLZIX.js} +5 -5
- package/dist/cli-bundle/chunks/{upgrade-3RIAFQIK.js → upgrade-VPCIYAVW.js} +5 -5
- package/dist/cli-bundle/chunks/{validate-GVY4VE43.js → validate-JMNWEUYF.js} +62 -24
- package/dist/cli-bundle/chunks/validate-JMNWEUYF.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-ADKGN37M.js → validate-PHKIYGSY.js} +61 -23
- package/dist/cli-bundle/chunks/validate-PHKIYGSY.js.map +7 -0
- package/dist/cli-bundle/main.js +133 -55
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/core/checkpoint/checkpoint-gc.d.ts +69 -0
- package/dist/core/checkpoint/checkpoint-gc.js +175 -0
- package/dist/core/checkpoint/checkpoint-gc.js.map +1 -0
- package/dist/core/config/nested-settings.js +22 -2
- package/dist/core/config/nested-settings.js.map +1 -1
- package/dist/core/diagnostics/remediation.js +40 -2
- package/dist/core/diagnostics/remediation.js.map +1 -1
- package/dist/core/extensions/extension-types.d.ts +0 -9
- package/dist/core/extensions/extension-types.js +2 -27
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/fs/fs-utils.d.ts +17 -1
- package/dist/core/fs/fs-utils.js +19 -3
- package/dist/core/fs/fs-utils.js.map +1 -1
- package/dist/core/history/drift-scan.d.ts +17 -5
- package/dist/core/history/drift-scan.js +22 -14
- package/dist/core/history/drift-scan.js.map +1 -1
- package/dist/core/history/replay.d.ts +7 -0
- package/dist/core/history/replay.js +11 -6
- package/dist/core/history/replay.js.map +1 -1
- package/dist/core/item/item-format-version.d.ts +87 -0
- package/dist/core/item/item-format-version.js +85 -0
- package/dist/core/item/item-format-version.js.map +1 -0
- package/dist/core/item/item-format.js +8 -2
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/status-filter.d.ts +7 -3
- package/dist/core/item/status-filter.js +26 -5
- package/dist/core/item/status-filter.js.map +1 -1
- package/dist/core/search/bm25.d.ts +113 -0
- package/dist/core/search/bm25.js +178 -0
- package/dist/core/search/bm25.js.map +1 -0
- package/dist/core/search/eval.d.ts +114 -0
- package/dist/core/search/eval.js +217 -0
- package/dist/core/search/eval.js.map +1 -0
- package/dist/core/sentry/instrument.d.ts +14 -0
- package/dist/core/sentry/instrument.js +43 -3
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/shared/constants.js +6 -2
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/store/paths.js +4 -3
- package/dist/core/store/paths.js.map +1 -1
- package/dist/core/store/settings-validator.d.ts +7 -0
- package/dist/core/store/settings-validator.js +10 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.js +6 -2
- package/dist/core/store/settings.js.map +1 -1
- package/dist/mcp/tool-definitions.js +4 -3
- package/dist/mcp/tool-definitions.js.map +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.js +3 -2
- package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +4 -4
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +1 -0
- package/dist/sdk/cli-contracts.js +11 -2
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/index.d.ts +2 -2
- package/dist/sdk/index.js +3 -3
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runtime.d.ts +1 -0
- package/dist/sdk/runtime.js +3 -2
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/testing.d.ts +48 -1
- package/dist/sdk/testing.js +98 -2
- package/dist/sdk/testing.js.map +1 -1
- package/dist/types.d.ts +26 -0
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +1 -0
- package/docs/ARCHITECTURE.md +126 -11
- package/docs/CLAUDE_CODE_PLUGIN.md +5 -13
- package/docs/COMMANDS.md +57 -5
- package/docs/CONFIGURATION.md +39 -0
- package/docs/EXTENSIONS.md +2 -2
- package/docs/MIGRATION_CLI_SIMPLIFICATION.md +9 -2
- package/docs/QUICKSTART.md +2 -0
- package/docs/README.md +2 -0
- package/docs/RELEASING.md +2 -1
- package/docs/SDK.md +80 -1
- package/docs/TESTING.md +18 -0
- package/package.json +4 -3
- package/packages/pm-command-kit/README.md +4 -0
- package/packages/pm-todos/extensions/todos/index.js +2 -0
- package/packages/pm-todos/extensions/todos/index.ts +2 -0
- package/packages/pm-todos/extensions/todos/runtime.js +192 -9
- package/packages/pm-todos/extensions/todos/runtime.ts +211 -8
- package/dist/cli-bundle/chunks/activity-62I26XZB.js +0 -18
- package/dist/cli-bundle/chunks/chunk-2RI3BDFK.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4BFNWAMQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5QLHQK7V.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5SRID7DV.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-COHNQLB2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-DVUU3AHP.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-EMFDZ7N3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-FP7YLQ52.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-FPQA4ZMA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-GDOTTY2S.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-I2VJM36R.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-K5TD74VU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MAKOMXVM.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-PSWSQHM7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-QSH34DSQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-UA4ANRJY.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-UCNEPMPY.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-X26ODPU4.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-Y4IBSEQ2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-YOGXK3ON.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-YWAYOWDQ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ZZEM2PH7.js.map +0 -1
- package/dist/cli-bundle/chunks/close-TQZK43Z5.js +0 -15
- package/dist/cli-bundle/chunks/config-UWF3KRP5.js.map +0 -7
- package/dist/cli-bundle/chunks/config-YICACPHA.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-7G553BHP.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-B2YWYUV5.js.map +0 -7
- package/dist/cli-bundle/chunks/create-UZLJXHLA.js +0 -30
- package/dist/cli-bundle/chunks/gc-5RTYXLQU.js +0 -211
- package/dist/cli-bundle/chunks/gc-5RTYXLQU.js.map +0 -7
- package/dist/cli-bundle/chunks/gc-FK5732EK.js +0 -208
- package/dist/cli-bundle/chunks/gc-FK5732EK.js.map +0 -1
- package/dist/cli-bundle/chunks/health-JEBESKID.js.map +0 -7
- package/dist/cli-bundle/chunks/health-PPTJ7XKW.js.map +0 -1
- package/dist/cli-bundle/chunks/history-TKTULEVE.js +0 -20
- package/dist/cli-bundle/chunks/history-redact-SPIFIXVY.js +0 -21
- package/dist/cli-bundle/chunks/init-A6FTZ5UC.js +0 -20
- package/dist/cli-bundle/chunks/plan-BK3OMLGP.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-X3STKLED.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-FUMXPWZ4.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-XDLFESU7.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-DGSHCS75.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-PI3WM4GK.js +0 -19
- package/dist/cli-bundle/chunks/search-2JX776KX.js.map +0 -1
- package/dist/cli-bundle/chunks/search-AZR2JITW.js.map +0 -7
- package/dist/cli-bundle/chunks/update-2BZEAI7B.js +0 -24
- package/dist/cli-bundle/chunks/update-GCNLER2H.js +0 -28
- package/dist/cli-bundle/chunks/validate-ADKGN37M.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-GVY4VE43.js.map +0 -1
- /package/dist/cli-bundle/chunks/{activity-62I26XZB.js.map → activity-CIHV64UC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-XJ7WRNWS.js.map → activity-KW3IRP44.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-LBCWF6UJ.js.map → aggregate-3ZKQG5SW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-OFT4YVB6.js.map → aggregate-FIGQEIL3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-BP2ARHOK.js.map → append-EWJYJ7CH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-5U3XR5SD.js.map → append-QEOLX3XB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CSRFOIHG.js.map → chunk-2EIMPCE4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-II3WDRCM.js.map → chunk-37QXHBIB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UMTPQMEG.js.map → chunk-3MDHREEV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DJ3YYLHG.js.map → chunk-5FIEHKEX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OURX4WVG.js.map → chunk-5IDI42VV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RVG3WLY3.js.map → chunk-5QICDWMV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LIVRA6VG.js.map → chunk-6CJWZAN7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AVMSP2HH.js.map → chunk-6H4LF7AO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-B2NEFANY.js.map → chunk-6M4RJS4M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A5JPMD4Q.js.map → chunk-76Z3YSHV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5NS6TJ2F.js.map → chunk-7D3SAQXM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2E3KSWFG.js.map → chunk-AIS5PGI3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-47BYN6CA.js.map → chunk-AZMOLBN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DYZKSIVX.js.map → chunk-B473GZWW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RNWE2HZR.js.map → chunk-C3AZ5ZML.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-S673PVHD.js.map → chunk-C4N5I7ZW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TYQBGXH2.js.map → chunk-CF55WVVS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4EOS35RL.js.map → chunk-CZPXY7UW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MPEWACTG.js.map → chunk-CZUB4XWO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-22YA6GCA.js.map → chunk-D7FYS6PG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UIMLAFOE.js.map → chunk-F5NZWFSW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-H3DP6OUM.js.map → chunk-FKBDKV7Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SO2IOH37.js.map → chunk-FRUFKWNK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7R5YKVKO.js.map → chunk-FWPDUYEY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-USVOBLGB.js.map → chunk-GOZUHWFD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZBVYKWT2.js.map → chunk-H7NJZWG2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4L7Q4OVT.js.map → chunk-HCU6WUSY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PRUB7RI4.js.map → chunk-LUWW7L4B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-N7LDJRB4.js.map → chunk-M5XALUSL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NPNNW5TU.js.map → chunk-N5ZJACJ6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NNMBNN6Q.js.map → chunk-NB3PYLQ6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-USKTNI7P.js.map → chunk-NIGXMNNI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GL3QKIET.js.map → chunk-NIUEXCFS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OUG4CL4H.js.map → chunk-NJHMAJ6N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2K56AWDP.js.map → chunk-NJN7LL7U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5P2LQV2F.js.map → chunk-NSBZ2CKF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XV6N3QND.js.map → chunk-O47BPOPC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QCHNPN24.js.map → chunk-OTHIWLMB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YVYJQR6S.js.map → chunk-PFSRUHDH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-M35R7LFX.js.map → chunk-PP2U4NMT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZGEWEO7B.js.map → chunk-PUH4D67U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LEC57E7K.js.map → chunk-Q2J2HJUN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QG6M6XQE.js.map → chunk-QQHISQBJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BQVESTOG.js.map → chunk-QZTWBFXJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5LZPDRFW.js.map → chunk-RLK7P77C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QTWWHFI3.js.map → chunk-RVHYI7SL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FVZSUIN5.js.map → chunk-SBGXDO7A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VP4Z36GO.js.map → chunk-SRYYRVPB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-X7RKOJXL.js.map → chunk-SX75ADBK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MTDEEUGV.js.map → chunk-TKBHZPKD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HMQMRHQJ.js.map → chunk-UEMNL33O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SDUZTZ55.js.map → chunk-UPE3CDD7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VG3B2CYD.js.map → chunk-UV6IYE5U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MTGMNUMJ.js.map → chunk-YCJX76PW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-2BSYPJTJ.js.map → claim-RC56YUWG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-EZ6JKY5X.js.map → claim-THOJ6CMV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-TQZK43Z5.js.map → close-DNMHGOCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-3TSX6BYF.js.map → close-SG5MNCVQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-HB4UFCS3.js.map → close-many-3L3AQZBU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-B7DBVA46.js.map → close-many-DKQLBGLV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-M7PAINZT.js.map → comments-M7ZOZNBX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-X7M7XM6I.js.map → comments-SKWMDWCW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-EGUGU4K7.js.map → context-OEC366TO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-V32ZAPL6.js.map → context-PUG2A7RC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-NWFFRYWM.js.map → copy-6QLHILAC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-RMLXLZOL.js.map → copy-JPX7VZCH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-UZLJXHLA.js.map → create-NNP6TSFO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-GK4MX2LJ.js.map → create-Y54ZVVZH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-RMGNIL2S.js.map → delete-63PCMQAJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-EFQLVEAS.js.map → delete-GDSMGAGJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-WKHUPVD3.js.map → deps-T4ZF5G54.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-K2I7QV4Y.js.map → deps-XYQ73XRH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-4LPTFTV4.js.map → extension-46NWACO3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-ASUPTDCC.js.map → extension-D5FDZ2CO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-UGROAMAX.js.map → focus-5STQXDPU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-ELOPN2SR.js.map → focus-MDVPOWB5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-OTXPLWYW.js.map → get-J2IPJRZW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-IWZ7IMPS.js.map → get-NT7L2HUZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-HNWBUDMI.js.map → history-RLH2QCRO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-TKTULEVE.js.map → history-WX3MGFS2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-MMQC7MCW.js.map → history-compact-UXDIFC33.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-EQXVPK3V.js.map → history-compact-ZBEBGJM7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-UBDHBEJE.js.map → history-redact-P7I7AWMB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-SPIFIXVY.js.map → history-redact-YQGU3XRA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-GMMHFAGH.js.map → history-repair-52KINVIK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-7DSDRPMX.js.map → history-repair-RM5ITLU5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-QGK4JFF6.js.map → init-2BNZOO6F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-A6FTZ5UC.js.map → init-SC2P6CHP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-DR53TWRA.js.map → learnings-W6F3FIPL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-A6DGBMG3.js.map → learnings-YGYVHWJK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-LJ5DBXC3.js.map → list-K6FPV4J4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-KOJN23UL.js.map → list-KPAYU5KZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-7VLTHKPW.js.map → notes-PU74EPKV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-K5I3TAYR.js.map → notes-YTD6ZILW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-RXRX4P7D.js.map → register-mutation-X3BUOQEL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-ZAGVKMBQ.js.map → register-mutation-YINRTS7L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-LTJG52WP.js.map → register-setup-DYBFLEZX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-2FEGSFLM.js.map → register-setup-EG2U6CEU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-PI3WM4GK.js.map → restore-5KHR2YYQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-SJUWYOCK.js.map → restore-XQYSWBV7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-VWAMP2S2.js.map → scheduling-shortcuts-HJMTEXKE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{scheduling-shortcuts-W4F2LKHW.js.map → scheduling-shortcuts-NNT5ASZR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-N5ETYD4P.js.map → schema-263RI4WW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-DXQRIEFM.js.map → schema-TZXW6XWD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-55RJCGRU.js.map → search-LECJYSXE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-47UQGEXE.js.map → search-SFRJOVDG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-ZFESFVQC.js.map → stats-N7ER2PNK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-J563NJBY.js.map → stats-VPBGSRQH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-BNGLIFEM.js.map → telemetry-L6K3BUIQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-SC7HPRXX.js.map → telemetry-PP3FUNBU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-GCNLER2H.js.map → test-3EGNS3T5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-2BZEAI7B.js.map → test-RQCTSWUK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-DN6KG4FX.js.map → test-all-NJ5V2QFS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-5SFTTRNL.js.map → test-all-ZHFAWNC3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-NHRBT7SN.js.map → test-runs-AJHR6IQF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-DZEDJ4GH.js.map → test-runs-GN3C6GOI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-IRNV3OTG.js.map → update-many-N2AN6ZDH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-OKYWFCBO.js.map → update-many-RYQ64CFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-KP4I45V5.js.map → upgrade-TJXFLZIX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-3RIAFQIK.js.map → upgrade-VPCIYAVW.js.map} +0 -0
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -47,11 +47,15 @@ src/
|
|
|
47
47
|
item/
|
|
48
48
|
lock/
|
|
49
49
|
output/
|
|
50
|
+
schema/
|
|
50
51
|
search/
|
|
51
52
|
store/
|
|
52
53
|
front-matter-cache.ts
|
|
53
54
|
test/
|
|
55
|
+
validate/
|
|
54
56
|
shared/
|
|
57
|
+
mcp/
|
|
58
|
+
server.ts
|
|
55
59
|
sdk/
|
|
56
60
|
cli-contracts.ts
|
|
57
61
|
index.ts
|
|
@@ -91,13 +95,25 @@ Project tracker root defaults to `.agents/pm/`.
|
|
|
91
95
|
reminders/
|
|
92
96
|
milestones/
|
|
93
97
|
meetings/
|
|
98
|
+
plans/
|
|
99
|
+
stories/
|
|
94
100
|
history/
|
|
95
101
|
locks/
|
|
96
|
-
|
|
102
|
+
schema/
|
|
103
|
+
checkpoints/
|
|
104
|
+
runtime/
|
|
97
105
|
search/
|
|
98
106
|
extensions/
|
|
99
107
|
```
|
|
100
108
|
|
|
109
|
+
Type folders are created on demand: the listing above shows the built-in item
|
|
110
|
+
types plus `stories/`, a representative folder created by a custom or preset
|
|
111
|
+
type. `schema/` holds config-driven customization (`types.json`,
|
|
112
|
+
`statuses.json`, `fields.json`), `checkpoints/` holds bulk-mutation rollback
|
|
113
|
+
snapshots, and `runtime/` holds non-canonical operational state (for example
|
|
114
|
+
background-refresh coordination). The legacy required `index/` directory was
|
|
115
|
+
removed in 2026-05-31 ([pm-yf31](../.agents/pm/issues/pm-yf31.toon)).
|
|
116
|
+
|
|
101
117
|
Required data:
|
|
102
118
|
|
|
103
119
|
- item documents under type folders
|
|
@@ -106,8 +122,8 @@ Required data:
|
|
|
106
122
|
|
|
107
123
|
Optional rebuildable data:
|
|
108
124
|
|
|
109
|
-
- keyword and vector search cache files
|
|
110
|
-
-
|
|
125
|
+
- keyword and vector search cache files (`search/`)
|
|
126
|
+
- `checkpoints/` and `runtime/` operational state
|
|
111
127
|
|
|
112
128
|
## Item Documents
|
|
113
129
|
|
|
@@ -127,7 +143,9 @@ body: |
|
|
|
127
143
|
|
|
128
144
|
Legacy JSON-front-matter markdown files are read only for one-way migration into TOON. Runtime internals use `metadata` as the item metadata model key.
|
|
129
145
|
|
|
130
|
-
|
|
146
|
+
Front-matter carries an explicit, monotonically increasing storage format version (`pm_format_version`). The baseline version (`1`) is the implicit default and is **never** serialized, so the field stays absent for the entire current corpus and adds no per-item token cost; it only materializes once an item advances past the baseline via a future breaking migration. Absence therefore always means the baseline. `core/item/item-format-version.ts` owns the constant and the classification helpers (`effectiveItemFormatVersion`, `classifyItemFormatVersion`, `scanItemFormatVersions`) that `pm health` (the `integrity` check) and `pm validate` (the `format_version` check) use to flag items that are outdated (a future migration would rewrite them) or ahead of the runtime (written by a newer pm). When a breaking front-matter change ships, bump `CURRENT_ITEM_FORMAT_VERSION` and add a migration that rewrites items below it — the version gate makes that a per-item decision instead of a full-corpus structural re-parse.
|
|
147
|
+
|
|
148
|
+
Built-in item types (11; confirm at runtime with `pm schema list`):
|
|
131
149
|
|
|
132
150
|
- `Epic`
|
|
133
151
|
- `Feature`
|
|
@@ -139,8 +157,12 @@ Built-in item types:
|
|
|
139
157
|
- `Reminder`
|
|
140
158
|
- `Milestone`
|
|
141
159
|
- `Meeting`
|
|
160
|
+
- `Plan`
|
|
142
161
|
|
|
143
|
-
Runtime type resolution merges built-ins,
|
|
162
|
+
Runtime type resolution merges built-ins, persisted project schema in
|
|
163
|
+
`.agents/pm/schema/types.json` (`pm schema add-type` / `pm init --type-preset`),
|
|
164
|
+
`settings.item_types.definitions`, and extension `registerItemTypes(...)`
|
|
165
|
+
registrations.
|
|
144
166
|
|
|
145
167
|
## Mutation Contract
|
|
146
168
|
|
|
@@ -205,6 +227,43 @@ pm contracts --command create --flags-only --json
|
|
|
205
227
|
pm help create --json
|
|
206
228
|
```
|
|
207
229
|
|
|
230
|
+
### Adding a Command or Flag (Wiring Checklist)
|
|
231
|
+
|
|
232
|
+
A new command or field-mutating flag touches several registries. Missing one
|
|
233
|
+
produces a silently partial surface (for example a flag that parses on the CLI
|
|
234
|
+
but is absent from `pm contracts`, MCP, or completions). Wire each site that
|
|
235
|
+
applies:
|
|
236
|
+
|
|
237
|
+
1. **Commander registration** — register the command/flag in the relevant
|
|
238
|
+
`src/cli/register-*.ts` family module (`register-setup`, `register-list-query`,
|
|
239
|
+
`register-mutation`, `register-operations`).
|
|
240
|
+
2. **Command module** — implement the handler under `src/cli/commands/` and add
|
|
241
|
+
it to the `src/cli/commands/index.ts` barrel. The static orphan-modules gate
|
|
242
|
+
fails on a command module that only the dynamic dispatcher imports, so the
|
|
243
|
+
barrel export is mandatory.
|
|
244
|
+
3. **Flag contracts** — declare flags in `src/sdk/cli-contracts.ts` (the
|
|
245
|
+
`*_FLAG_CONTRACTS` registries). Use `list: true` only for comma-list
|
|
246
|
+
accumulation flags, never for Commander `collect` repeatable flags. Flags that
|
|
247
|
+
should not appear in the public surface go through the `NO_SURFACE` set.
|
|
248
|
+
4. **MCP exposure** — if the command is agent-callable, add or extend its tool in
|
|
249
|
+
`src/mcp/tool-definitions.ts` (tool definition plus parameter properties).
|
|
250
|
+
Shared parameter names (`fields`, `scope`) are owned centrally — prefer a new
|
|
251
|
+
boolean over overloading a shared enum.
|
|
252
|
+
5. **Option policies** — if the flag participates in `command_option_policies`
|
|
253
|
+
(provided-set governance), wire it into the command's policy declaration.
|
|
254
|
+
6. **Dependency-audit scope** — field mutations that must be excluded from
|
|
255
|
+
audit-only update scopes belong in the update command's disallowed list.
|
|
256
|
+
7. **Docs and completions** — document the command in
|
|
257
|
+
[Command Reference](COMMANDS.md); completion output is generated from the
|
|
258
|
+
contracts, so confirm `pm completion` reflects the new surface.
|
|
259
|
+
8. **Contract snapshot** — run `pnpm contracts:update` to regenerate
|
|
260
|
+
`tests/fixtures/contracts/full.json`; the static gate compares against it.
|
|
261
|
+
9. **Coverage** — add focused tests so the new module keeps the corpus at
|
|
262
|
+
`100/100/100/100` (see [Testing Architecture](#testing-architecture)).
|
|
263
|
+
|
|
264
|
+
Verify the end-to-end surface with `pm contracts --command <name> --json`,
|
|
265
|
+
`pm help <name> --json`, and the matching MCP tool listing.
|
|
266
|
+
|
|
208
267
|
## Telemetry Schema Negotiation
|
|
209
268
|
|
|
210
269
|
Telemetry preserves wire compatibility through an explicit client/server negotiation split:
|
|
@@ -249,6 +308,46 @@ pm reindex --mode hybrid --progress
|
|
|
249
308
|
pm health --check-only
|
|
250
309
|
```
|
|
251
310
|
|
|
311
|
+
## Performance and Startup Latency
|
|
312
|
+
|
|
313
|
+
`pm-cli` is optimized for the agent loop, where many short commands run back to
|
|
314
|
+
back. The performance model has three layers (the absolute timings below are
|
|
315
|
+
indicative order-of-magnitude figures at the time of writing — treat the relative
|
|
316
|
+
behavior, not the exact milliseconds, as the durable contract):
|
|
317
|
+
|
|
318
|
+
- **Per-command startup.** After a command-family code split, each handler
|
|
319
|
+
imports only its own command module rather than the full command barrel, so a
|
|
320
|
+
read command does not pay for mutation/search modules. On a clean project the
|
|
321
|
+
dominant remaining cost is Node ESM module resolution (~90ms); this is the last
|
|
322
|
+
structural startup lever and is tracked under the observability epic.
|
|
323
|
+
- **Reads.** The front-matter cache splits item metadata from body text and skips
|
|
324
|
+
re-reads of unchanged files, and on-read hooks are skipped when no extension
|
|
325
|
+
registers one. `pm health` uses a drift-scan verification cache so repeated
|
|
326
|
+
health checks do not re-hash every history stream.
|
|
327
|
+
- **Mutations.** Mutations are non-blocking: the semantic reindex runs in a
|
|
328
|
+
detached background worker behind a reindex lock instead of inline embedding,
|
|
329
|
+
and item-format migration skips already-migrated items rather than re-parsing
|
|
330
|
+
the whole corpus on every write. This is what keeps `create`/`update` in the
|
|
331
|
+
hundreds-of-milliseconds range instead of multi-second inline-embed latency.
|
|
332
|
+
|
|
333
|
+
What dominates latency in a given repository:
|
|
334
|
+
|
|
335
|
+
- a clean project is fast (~140ms); a large dev repo is slower mainly from many
|
|
336
|
+
auto-loaded extensions and any inline embedding provider, not from item count.
|
|
337
|
+
- `pm --version` short-circuits before the main entrypoint, so it is **not** a
|
|
338
|
+
valid probe for command startup cost.
|
|
339
|
+
|
|
340
|
+
Profiling startup cost:
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
node --cpu-prof --cpu-prof-dir=/tmp/pmprof dist/cli.js list >/dev/null
|
|
344
|
+
pm health --check-only # drift-scan + telemetry timings
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Reindex and embedding remain the heaviest background operations; keep them off
|
|
348
|
+
the synchronous mutation path. See the observability epic
|
|
349
|
+
([pm-5oj5](../.agents/pm/epics/pm-5oj5.toon)) for tracked perf work.
|
|
350
|
+
|
|
252
351
|
## Extension Host
|
|
253
352
|
|
|
254
353
|
Load order:
|
|
@@ -292,12 +391,28 @@ node scripts/run-tests.mjs coverage
|
|
|
292
391
|
|
|
293
392
|
Linked-test execution also creates sandbox roots and can seed settings/extensions for schema parity. See [Testing](TESTING.md).
|
|
294
393
|
|
|
295
|
-
Coverage governance is literal all-source
|
|
296
|
-
|
|
297
|
-
- `vitest.config.ts` coverage
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
394
|
+
Coverage governance is literal all-source, not a curated allowlist:
|
|
395
|
+
|
|
396
|
+
- `vitest.config.ts` `coverage.include` is the full ship surface: `src/*.ts`,
|
|
397
|
+
`src/**/*.ts`, `packages/**/*.ts`, `scripts/*.mjs`, `scripts/**/*.mjs`,
|
|
398
|
+
`plugins/*.mjs`, `plugins/**/*.mjs`, and the `docs/examples/**/*.{ts,js,mjs}`
|
|
399
|
+
reference snippets. The only `coverage.exclude` entry is `src/**/*.d.ts`
|
|
400
|
+
(type-only declarations have no executable lines).
|
|
401
|
+
- Global thresholds are `100/100/100/100` (lines/branches/functions/statements)
|
|
402
|
+
for the whole measured corpus — there is no per-file ratchet and no per-file
|
|
403
|
+
`/* c8 ignore */` allowlist for production modules.
|
|
404
|
+
- Adding a new module under any included root automatically pulls it into the
|
|
405
|
+
gate. There is no include-list to edit; if a new module is genuinely not
|
|
406
|
+
shippable source (a throwaway script), it belongs outside these roots rather
|
|
407
|
+
than in a hand-maintained exclude list.
|
|
408
|
+
- When authoring example snippets under `docs/examples/`, import the published
|
|
409
|
+
SDK by its bare specifier (`@unbrained/pm-cli/sdk`); `vitest.config.ts` aliases
|
|
410
|
+
that to `src/sdk/index.ts` so the example specs cover without the workspace
|
|
411
|
+
self-link present in a clean CI install.
|
|
412
|
+
- When a module is hard to test end-to-end (for example CLI orchestration),
|
|
413
|
+
extract pure logic helpers into small modules and cover those directly instead
|
|
414
|
+
of weakening thresholds. Run `node scripts/run-tests.mjs coverage` locally to
|
|
415
|
+
confirm `100/100/100/100` before pushing.
|
|
301
416
|
|
|
302
417
|
## Terminal Compatibility
|
|
303
418
|
|
|
@@ -18,21 +18,11 @@ pm-cli/ (repo root)
|
|
|
18
18
|
│ │ ├── pm-release/ # Release gate sequence and evidence linking
|
|
19
19
|
│ │ ├── pm-audit/ # Comprehensive audit suite
|
|
20
20
|
│ │ └── pm-planner/ # Planning: decompose, prioritize, triage
|
|
21
|
-
│ ├── commands/
|
|
22
|
-
│ │ ├── pm-status.md # /pm-status
|
|
23
|
-
│ │ ├── pm-start-task.md # /pm-start-task [id|keywords]
|
|
24
|
-
│ │ ├── pm-close-task.md # /pm-close-task [id]
|
|
25
|
-
│ │ ├── pm-triage.md # /pm-triage <request>
|
|
26
|
-
│ │ ├── pm-audit.md # /pm-audit
|
|
27
|
-
│ │ ├── pm-search.md # /pm-search <query>
|
|
28
|
-
│ │ ├── pm-new.md # /pm-new <title>
|
|
29
|
-
│ │ ├── pm-list.md # /pm-list [filter]
|
|
30
|
-
│ │ └── pm-calendar.md # /pm-calendar [view]
|
|
21
|
+
│ ├── commands/ # Slash-command definitions (one .md per /pm-* command)
|
|
31
22
|
│ ├── hooks/
|
|
32
23
|
│ │ ├── hooks.json # SessionStart hook definition
|
|
33
24
|
│ │ └── session-start.mjs # Injects pm context at session start
|
|
34
|
-
│ ├── agents/
|
|
35
|
-
│ │ └── pm-coordinator.md # Subagent for multi-item coordination
|
|
25
|
+
│ ├── agents/ # Subagent definitions (one .md per coordinator/triage/verification subagent)
|
|
36
26
|
│ ├── scripts/
|
|
37
27
|
│ │ └── pm-mcp-server.mjs # MCP server launcher (repo → npx fallback)
|
|
38
28
|
│ └── README.md # User-facing installation guide
|
|
@@ -186,7 +176,9 @@ After installing the plugin:
|
|
|
186
176
|
|
|
187
177
|
| pm-cli version | Plugin version | Claude Code version |
|
|
188
178
|
|---------------|----------------|---------------------|
|
|
189
|
-
| 2026.5.x+ | 1.
|
|
179
|
+
| 2026.5.x+ | 1.x | Any current |
|
|
180
|
+
|
|
181
|
+
The authoritative plugin version is `plugins/pm-claude/.claude-plugin/plugin.json`; this row stays on the `1.x` major line so it does not drift with each plugin release.
|
|
190
182
|
|
|
191
183
|
The MCP server uses JSON-RPC 2.0 over stdio with protocol version `2025-06-18`.
|
|
192
184
|
|
package/docs/COMMANDS.md
CHANGED
|
@@ -25,8 +25,9 @@ Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon).
|
|
|
25
25
|
| Family | Commands | Purpose |
|
|
26
26
|
|--------|----------|---------|
|
|
27
27
|
| Bootstrap | `init`, `config`, `health`, `telemetry` | create and inspect tracker setup |
|
|
28
|
-
| Triage | `context`, `search`, `list*`, `aggregate`, `dedupe-audit`*, `dedupe-merge`* | find work and audit decomposition |
|
|
28
|
+
| Triage | `context`, `search`, `eval`, `get`, `list*`, `aggregate`, `dedupe-audit`*, `dedupe-merge`* | find work, read a single item, measure search relevance, and audit decomposition |
|
|
29
29
|
| Lifecycle | `create`, `copy`, `focus`, `claim`, `update`, `append`, `close`, `release`, `delete`, `start-task`, `pause-task`, `close-task` | mutate item state |
|
|
30
|
+
| Bulk | `update-many`, `close-many` | apply one change across a matched, dry-run-previewed set with a rollback checkpoint |
|
|
30
31
|
| Scheduling | `meet`, `event`, `remind` | low-friction Meeting/Event/Reminder creation |
|
|
31
32
|
| Planning | `plan create`, `plan add-step`, `plan update-step`, `plan complete-step`, `plan link`, `plan approve`, `plan materialize` | agent-optimized living plans with ordered steps, evidence, decisions, validation, and materialization |
|
|
32
33
|
| Logs | `comments`, `notes`, `learnings`, `comments-audit` | record progress and durable context |
|
|
@@ -78,6 +79,8 @@ When package-owned commands are unavailable, usage guidance includes an install-
|
|
|
78
79
|
```bash
|
|
79
80
|
pm context --limit 10
|
|
80
81
|
pm search "calendar reminder validation" --limit 10
|
|
82
|
+
pm get pm-a1b2 # read one item; add --fields/--depth for lower-token projections
|
|
83
|
+
pm get pm-a1b2 --tree --tree-depth 2 # item plus its descendant subtree
|
|
81
84
|
pm list-open --type Task --priority 1 --limit 20
|
|
82
85
|
pm list-in-progress --limit 20
|
|
83
86
|
pm aggregate --group-by parent,type --status open
|
|
@@ -88,6 +91,7 @@ pm dedupe-merge --keep pm-canonical --close pm-duplicate --dry-run
|
|
|
88
91
|
```
|
|
89
92
|
|
|
90
93
|
Use `context` first for a compact active-work snapshot. Use `search` when the request names a concept, component, or prior issue.
|
|
94
|
+
Use `pm get <id>` to read a single item by ID — the single-item read primitive used throughout the agent loop. It accepts `--fields <list>` and `--depth brief|standard|deep|full` for token-minimal projections, and `--tree`/`--tree-depth <n>` to include descendants. `pm get <id> --json` returns the `body` inside the `item` object (`.item.body`); see [Full results, totals, and bodies](#full-results-totals-and-bodies). To duplicate an existing item as a starting point, `pm copy <id> --title "New title"` clones it into a fresh id with lifecycle fields reset.
|
|
91
95
|
`context` standard/deep views include high-level child completion counters plus `recently_created` and `unparented` sections, so agents can spot new orphan work before creating duplicates.
|
|
92
96
|
Use `pm aggregate --completion` when you need per-group `open`, `in_progress`, `closed`, `other`, and `completion_pct` progress context.
|
|
93
97
|
Each aggregate row carries an explicit `group_label`: a blank/null group value (e.g. unassigned items under `--group-by assignee`) renders as `(unassigned)`/`(untagged)`/`(unparented)` rather than an ambiguous empty key, while the structured `group` value keeps the raw `null` for machine consumers. Multi-field grouping joins each `field=value` pair into the label.
|
|
@@ -111,11 +115,14 @@ pm list-all --updated-after 2026-06-04T15:18:32Z --brief
|
|
|
111
115
|
pm list-open --updated-after=-2h --brief
|
|
112
116
|
pm list-all --created-after=-7d --status open
|
|
113
117
|
|
|
114
|
-
# Search scoped to open work only (drops closed-history noise); statuses
|
|
115
|
-
# open/closed/canceled aliases or configured
|
|
116
|
-
# did-you-mean hint on typos.
|
|
118
|
+
# Search scoped to open work only (drops closed-history noise); statuses accept
|
|
119
|
+
# all (no lifecycle restriction), open/closed/canceled aliases, or configured
|
|
120
|
+
# ids, comma-separated, with a did-you-mean hint on typos.
|
|
117
121
|
pm search "reminder validation" --status open --limit 10
|
|
118
122
|
|
|
123
|
+
# Duplicate checks can deliberately scan every lifecycle bucket with one flag.
|
|
124
|
+
pm search "reminder validation" --status all --limit 10
|
|
125
|
+
|
|
119
126
|
# Full filter parity with list — scope retrieval before ranking.
|
|
120
127
|
pm search "calendar" --type Task --assignee alice --updated-after=-7d --parent pm-abcd
|
|
121
128
|
```
|
|
@@ -159,6 +166,47 @@ pm search "auth" --highlight # adds highlights:[{field,sni
|
|
|
159
166
|
pm search "auth" --full --highlight # full hit payloads + highlight snippets
|
|
160
167
|
```
|
|
161
168
|
|
|
169
|
+
### Offline BM25 provider (pm-75k9)
|
|
170
|
+
|
|
171
|
+
`semantic`/`hybrid` search normally needs an embedding service (Ollama/OpenAI) plus a vector store. For air-gapped, CI, or zero-setup environments there is a built-in **BM25** lexical ranker that runs entirely in-process over the item corpus — no network, no service. BM25 improves on naive keyword counting with inverse-document-frequency weighting, term-frequency saturation, and document-length normalization.
|
|
172
|
+
|
|
173
|
+
Activate it by setting the search provider:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
pm config project set search_provider bm25 # always use offline BM25 for semantic/hybrid
|
|
177
|
+
pm config project set search_provider auto # use BM25 only when no embedding provider is configured
|
|
178
|
+
pm search "connection pool leak" --semantic # BM25-ranked; hits carry matched_fields:["bm25"]
|
|
179
|
+
pm search "retry backoff" --hybrid # blends BM25 with the keyword scorer
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
- `bm25` — always use BM25 for `--semantic`/`--hybrid`, even if an embedding provider is configured.
|
|
183
|
+
- `auto` — use BM25 as the **offline fallback** only when no embedding provider (and no extension search provider) is available; the result carries a `search_<mode>_offline_bm25:no_embedding_provider:using_lexical_bm25` warning so the offline path is observable.
|
|
184
|
+
- Plain `keyword` mode is unchanged. BM25 quality is lexical — strong, but below true dense retrieval; configure an embedding provider when you need semantic similarity.
|
|
185
|
+
|
|
186
|
+
Tune ranking via `search.bm25.k1` (term-frequency saturation, default `1.2`) and `search.bm25.b` (length normalization in `[0,1]`, default `0.75`): `pm config project set search_bm25_k1 1.5`.
|
|
187
|
+
|
|
188
|
+
### Search relevance evaluation — `pm eval` (pm-u8n5)
|
|
189
|
+
|
|
190
|
+
`pm eval` measures retrieval quality against a curated golden-query set so relevance regressions (from corpus, weight, or provider changes) are caught instead of guessed. Ground truth lives in a git-tracked `<pmRoot>/search/eval-queries.json` — an array of `{ query, relevant_ids, mode? }` objects:
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
[
|
|
194
|
+
{ "query": "offline search ranking", "relevant_ids": ["pm-75k9"], "mode": "keyword" },
|
|
195
|
+
{ "query": "relevance regression gate", "relevant_ids": ["pm-u8n5"] }
|
|
196
|
+
]
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
It runs each query through the live search path and reports nDCG@k, MRR@k, precision@k, and recall@k per query plus the macro average:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
pm eval --json # full per-query + aggregate metrics
|
|
203
|
+
pm eval --mode hybrid --k 10 # default mode for queries without their own; cutoff @k
|
|
204
|
+
pm eval --queries ./my-eval.json # evaluate an alternate golden set
|
|
205
|
+
pm eval --fail-under 0.6 --json # CI gate: exit non-zero when aggregate nDCG@k < 0.6
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
`--fail-under <0..1>` turns `pm eval` into a CI gate: it still prints the report (stdout) but exits non-zero when the aggregate nDCG@k falls below the threshold, so a relevance drop fails the build.
|
|
209
|
+
|
|
162
210
|
### Full results, totals, and bodies
|
|
163
211
|
|
|
164
212
|
`pm list*` returns every matched row when neither `--limit` nor `--offset` is set. When a `--limit`/`--offset` *does* drop rows, the result adds a top-level `total` (the pre-pagination match count) so an agent knows how many remain. Pass `--no-truncate` (alias `--all`) to force the entire matched set and override any `--limit` in one call — the canonical "give me everything" flag for large-corpus audits:
|
|
@@ -547,7 +595,9 @@ pm gc --scope locks --dry-run
|
|
|
547
595
|
|
|
548
596
|
Use dry-run modes before broad lifecycle or cleanup changes.
|
|
549
597
|
|
|
550
|
-
`pm gc` accepts `--scope` values `index`, `embeddings`, `runtime`, and `
|
|
598
|
+
`pm gc` accepts `--scope` values `index`, `embeddings`, `runtime`, `locks`, and `checkpoints` (comma-separated or repeatable); with no `--scope` it sweeps all of them. The `runtime` scope clears `runtime/test-runs/` and `runtime/history-drift-cache.json`; removing the drift cache forces the next `pm health` run to perform a full history-drift re-scan. The `embeddings` scope removes the keyword/semantic index artifacts (`search/embeddings.jsonl`, `search/vectorization-status.json`, `search/lancedb/`) **and** the background-refresh queue (`search/pending-refresh.json`) and its gate so a worker draining a stale queue cannot rebuild a partial index against an empty ledger; it invalidates the entire semantic index, so run `pm reindex --mode keyword` (and `--mode semantic` when enabled) afterwards. The `locks` scope removes only **expired** lock files in `locks/` — those whose own embedded `created_at + ttl_seconds` has elapsed (debris left by crashed processes). Active locks and any lock file that cannot be parsed are always retained (never deleted when staleness cannot be proven), and the result includes a `locks` summary (`scanned`/`removed`/`retained`).
|
|
599
|
+
|
|
600
|
+
The `checkpoints` scope prunes bulk-mutation rollback checkpoints under `checkpoints/` (written by `pm update-many`/`pm close-many`) that are older than `checkpoints.retention_days` (default 14; set via `pm config <scope> set checkpoints_retention_days <n>`). Checkpoints whose `created_at` cannot be parsed are retained (safety-first, like the locks sweep), and the result includes a `checkpoints` summary (`scanned`/`removed`/`retained`/`retention_days`). Removing aged checkpoints permanently closes their `--rollback` window.
|
|
551
601
|
|
|
552
602
|
`--fix-hints` is a read-only flag: each failing check gains `details.fix_hints`, an array of `pm` command templates derived from the warning codes it raised (for example `pm history-repair <id>` for history drift, or `pm update <id> --reviewer "<name>"` for a missing reviewer). Generic hints may contain `<id>`/`<field>`/`<path>` placeholders the agent substitutes from the check's detail rows; the resolution check aliases concrete per-row commands and marks `fix_hints_truncated` when the list is summarized. It never mutates items. The mapping comes from the shared remediation registry that also backs `pm health --json` (see Self-Repair Remediation below), so agents gating on `pm validate` can auto-repair findings without hardcoding warning-code-to-command lookups.
|
|
553
603
|
|
|
@@ -568,6 +618,8 @@ pm validate --check-metadata --json | jq -r '.checks[] | select(.name=="metadata
|
|
|
568
618
|
|
|
569
619
|
`pm validate --check-files` classifies every stale linked path in `details.missing_linked_path_classifications` as either `moved` (a file with the same basename still exists in the scan — the row carries the top relink candidate, e.g. `old/path.md:moved:new/path.md`) or `deleted` (no candidate anywhere, e.g. `old/path.md:deleted`). It also reports `details.missing_linked_path_rows` — owner attribution so cleanup is evidence-based without a reverse lookup. By default these are token-efficient one-liners (`<path>:<classification> owner=<id> status=<status> field=<files|docs> title="…"`); `--verbose-file-lists` expands them to the full structured shape (`{ path, classification, items: [{ id, type, title, status, field }] }`). Orphaned existing files get the same treatment through `details.orphaned_path_classifications` and `details.orphaned_path_rows`; classifications start with `docs_unowned`, `tests_unowned`, `source_unowned`, or `unlinked_existing`, and rows include a concrete `pm docs|files <id> --add ...` hint when a likely owner is found from nearby linked paths. `--prune-missing` bulk-removes the stale links classified `deleted` from their items (link removal only — real files are never touched; `moved` links are kept so their relink candidates are not lost) and reports each removal in `fixes.applied_fixes[]` as the equivalent `pm files <id> --remove <path>` / `pm docs <id> --remove <path>` command. It honors `--dry-run` and implies `--check-files`.
|
|
570
620
|
|
|
621
|
+
The default `pm validate` run also includes a `format_version` check that compares every item's stored front-matter format version (`pm_format_version`, absent meaning the implicit baseline version `1`) against the version this pm runtime writes. `details.outdated_items` lists items that predate the current version (a future storage migration would rewrite them — advisory `warn`); `details.ahead_items` lists items written by a *newer* pm than the one running, which is an `error` because validation cannot vouch for fields it does not understand (upgrade pm to read them safely). At the current baseline version both lists are empty and the check is `ok`. The same `pm_format_version` integrity is surfaced by `pm health` under the `integrity` check (`details.counts.item_outdated_format_version` / `item_ahead_format_version`).
|
|
622
|
+
|
|
571
623
|
### Telemetry Local Analytics
|
|
572
624
|
|
|
573
625
|
`pm telemetry` surfaces local queue/runtime telemetry state without running full health checks:
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -83,6 +83,7 @@ pm config project set id_prefix task # (id_prefix) IDs bec
|
|
|
83
83
|
pm config project set author_default release-bot # (author_default) default mutation author
|
|
84
84
|
pm config project set output_default_format json # (output.default_format) toon | json
|
|
85
85
|
pm config project set locks_ttl_seconds 60 # (locks.ttl_seconds) integer >= 1
|
|
86
|
+
pm config project set checkpoints_retention_days 30 # (checkpoints.retention_days) integer >= 1; pm gc --scope checkpoints prunes checkpoints older than this many days
|
|
86
87
|
pm config project set schema_unknown_field_policy reject # (schema.unknown_field_policy) allow | warn | reject
|
|
87
88
|
```
|
|
88
89
|
|
|
@@ -128,6 +129,19 @@ Interaction rules:
|
|
|
128
129
|
|
|
129
130
|
`pm telemetry stats` reads the local queue and reports, per command bucket, latency percentiles (`duration_p50_ms`/`duration_p95_ms`/`duration_max_ms`, nearest-rank over `command_finish` `duration_ms`), outcome rates (`ok_count`/`error_count`/`error_rate`; a finish event whose `ok` is missing or not strictly `true` is counted conservatively as an error), and `command_resolution_counts`. These are an always-available, zero-network performance and reliability signal for the most recent queued window.
|
|
130
131
|
|
|
132
|
+
### Sentry environment variables
|
|
133
|
+
|
|
134
|
+
Crash and error diagnostics are reported to Sentry only when telemetry is enabled and the process is not opted out. These environment variables tune the Sentry client.
|
|
135
|
+
|
|
136
|
+
| Variable | Values | Use |
|
|
137
|
+
|----------|--------|-----|
|
|
138
|
+
| `PM_SENTRY_DISABLED` | boolean | Disable Sentry error reporting for this process (the Sentry SDK is not even imported). `PM_TELEMETRY_DISABLED` / `PM_NO_TELEMETRY` also disable it. |
|
|
139
|
+
| `SENTRY_DSN` | URL | Override the destination DSN. Defaults to the bundled pm-cli project DSN. |
|
|
140
|
+
| `SENTRY_ENVIRONMENT` | string | Override the reported environment tag. Defaults to `test` under Vitest, `ci` when `CI` is set, otherwise `production`. |
|
|
141
|
+
| `SENTRY_TRACES_SAMPLE_RATE` | number `0`–`1` | Fraction of command spans sampled for performance tracing. Defaults to `0.2` (20%). Set to `1` for full-trace performance debugging or `0` to disable tracing. Non-numeric or out-of-range values fall back to the default. |
|
|
142
|
+
|
|
143
|
+
> Sentry is hard-disabled under Vitest (`VITEST` / `VITEST_WORKER_ID`), so these knobs are no-ops inside the test suite.
|
|
144
|
+
|
|
131
145
|
## Item Storage Format
|
|
132
146
|
|
|
133
147
|
TOON is the default:
|
|
@@ -231,6 +245,31 @@ pm search "release docs" --mode keyword --limit 10
|
|
|
231
245
|
|
|
232
246
|
Semantic and hybrid search can use built-in OpenAI-compatible or Ollama providers plus vector stores such as Qdrant or LanceDB. If local Ollama is available and semantic settings are unset, `pm` can resolve local defaults automatically.
|
|
233
247
|
|
|
248
|
+
### Offline BM25 provider (pm-75k9)
|
|
249
|
+
|
|
250
|
+
For air-gapped, CI, or zero-setup environments there is a built-in **BM25** lexical ranker that powers `--semantic`/`--hybrid` search entirely in-process — no embedding service or vector store required. Select it via `search.provider`:
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
pm config project set search_provider bm25 # always use BM25 for semantic/hybrid
|
|
254
|
+
pm config project set search_provider auto # use BM25 only when no embedding provider is configured
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
- `bm25` always uses the offline ranker for semantic/hybrid queries, even when an embedding provider is set.
|
|
258
|
+
- `auto` falls back to BM25 only when no embedding provider (and no extension search provider) is available; the search result then carries a `search_<mode>_offline_bm25:no_embedding_provider:using_lexical_bm25` warning.
|
|
259
|
+
- Any other value (e.g. `openai`, `ollama`, or an extension provider name) keeps the existing embedding/vector path.
|
|
260
|
+
|
|
261
|
+
Tune BM25 ranking with two persisted, validated knobs:
|
|
262
|
+
|
|
263
|
+
- `search.bm25.k1` (number `>= 0`, default `1.2`) — term-frequency saturation; higher values let repeated terms keep accruing weight, lower values saturate sooner.
|
|
264
|
+
- `search.bm25.b` (number `0..1`, default `0.75`) — document-length normalization; `0` disables it, `1` fully normalizes by length.
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
pm config project set search_bm25_k1 1.5
|
|
268
|
+
pm config project set search_bm25_b 0.5
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
BM25 quality is lexical — a strong baseline, but below true dense retrieval; configure an embedding provider when semantic similarity matters. Measure either path against a golden-query set with `pm eval` (see COMMANDS.md).
|
|
272
|
+
|
|
234
273
|
`search.hybrid_semantic_weight` (number `0..1`, default `0.7`) is the persistent default blend used in **hybrid** mode: it weights the semantic (vector) score against the lexical score during score fusion — higher favours semantic retrieval, lower favours keyword matching. A per-query `pm search --semantic-weight <value>` overrides it for a single query; when the flag is omitted the persistent setting applies. Set it once with:
|
|
235
274
|
|
|
236
275
|
```bash
|
package/docs/EXTENSIONS.md
CHANGED
|
@@ -150,7 +150,7 @@ export function activate(api) {
|
|
|
150
150
|
}
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
Package-backed extensions can use the SDK helper after declaring `@unbrained/pm-cli` in `package.json` and installing dependencies. Use this shape for packages published to npm or installed from a package root:
|
|
153
|
+
Package-backed extensions can use the SDK helper after declaring `@unbrained/pm-cli` in `package.json` and installing dependencies. Registry installs satisfy that SDK import from the running host CLI instead of downloading a nested CLI copy into each project extension directory, so package authors can declare `@unbrained/pm-cli` as a peer dependency without adding the CLI's own telemetry/runtime dependencies to every workspace. Use this shape for packages published to npm or installed from a package root:
|
|
154
154
|
|
|
155
155
|
```js
|
|
156
156
|
import { defineExtension } from "@unbrained/pm-cli/sdk";
|
|
@@ -427,7 +427,7 @@ requiring private loader imports or a temporary `.agents/pm/extensions` tree.
|
|
|
427
427
|
Keep `pm package doctor --project --detail deep --trace` and runtime contracts
|
|
428
428
|
for integration tests against installed packages.
|
|
429
429
|
|
|
430
|
-
`PM_CLI_PACKAGE_ROOT` is first-party only. Bundled packages in this repository use it to find the running CLI's `dist/sdk/runtime.js` before they are published or installed independently. External packages must not read this environment variable or import from `dist/` or `src/core`; use `@unbrained/pm-cli/sdk`, `@unbrained/pm-cli/sdk/runtime`, and `@unbrained/pm-cli/sdk/testing`.
|
|
430
|
+
`PM_CLI_PACKAGE_ROOT` is first-party only. Bundled packages in this repository use it to find the running CLI's `dist/sdk/runtime.js` before they are published or installed independently. External packages must not read this environment variable or import from `dist/` or `src/core`; use `@unbrained/pm-cli/sdk`, `@unbrained/pm-cli/sdk/runtime`, and `@unbrained/pm-cli/sdk/testing`. During `pm install npm:<package>`, pm links the installed package's `@unbrained/pm-cli` dependency back to the running host CLI so SDK imports resolve without a duplicate nested CLI install.
|
|
431
431
|
|
|
432
432
|
## Troubleshooting
|
|
433
433
|
|
|
@@ -19,12 +19,19 @@ Normalization runs across command families and preserves a normalization trace f
|
|
|
19
19
|
|
|
20
20
|
`resolvePmRoot()` precedence is now:
|
|
21
21
|
|
|
22
|
-
1. explicit `--path`
|
|
22
|
+
1. explicit `--pm-path` (or its compatibility alias `--path`)
|
|
23
23
|
2. `PM_PATH`
|
|
24
24
|
3. upward discovery of initialized `.agents/pm` roots (must contain `settings.json`)
|
|
25
25
|
4. local default (`<cwd>/.agents/pm`)
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
`--pm-path` is the preferred explicit flag; `--path` remains a backward-compatible
|
|
28
|
+
alias for the same tracker-storage directory (not a workspace/cwd flag). An
|
|
29
|
+
explicit path that points at a project root is redirected to its `.agents/pm`
|
|
30
|
+
subdirectory (pm-ryik), so `--pm-path <repo>` and `--pm-path <repo>/.agents/pm`
|
|
31
|
+
resolve to the same tracker. See [Configuration](CONFIGURATION.md) for the
|
|
32
|
+
current contract.
|
|
33
|
+
|
|
34
|
+
If you need the old local-only behavior from nested directories, pass an explicit path (`--pm-path .agents/pm`).
|
|
28
35
|
|
|
29
36
|
### 3) Structured recovery bundles in CLI error output
|
|
30
37
|
|
package/docs/QUICKSTART.md
CHANGED
|
@@ -83,8 +83,10 @@ Useful item types:
|
|
|
83
83
|
| `Epic` | broad outcome or initiative |
|
|
84
84
|
| `Feature` | user-facing capability or major slice |
|
|
85
85
|
| `Task` | implementation work |
|
|
86
|
+
| `Chore` | maintenance, refactoring, or housekeeping work |
|
|
86
87
|
| `Issue` | bug or defect |
|
|
87
88
|
| `Decision` | recorded choice and rationale |
|
|
89
|
+
| `Plan` | agent-optimized living plan with ordered steps and evidence |
|
|
88
90
|
| `Event`, `Reminder`, `Milestone`, `Meeting` | calendar-aware planning |
|
|
89
91
|
|
|
90
92
|
## Find and Claim Work
|
package/docs/README.md
CHANGED
|
@@ -38,9 +38,11 @@ pm guide release --json
|
|
|
38
38
|
- [Testing](TESTING.md) - sandbox-safe local tests and linked-test orchestration.
|
|
39
39
|
- [Architecture](ARCHITECTURE.md) - contributor internals: storage, mutation flow, search, extensions, and command contracts.
|
|
40
40
|
- [Packages and Extensions](EXTENSIONS.md) - package install workflows, runtime extension lifecycle, and API reference.
|
|
41
|
+
- [Extension Author Contracts](EXTENSION_AUTHOR_CONTRACTS.md) - the stability guarantees and contract surface package authors build against.
|
|
41
42
|
- [SDK](SDK.md) - public import surfaces and typed authoring examples.
|
|
42
43
|
- [Codex Plugin](CODEX_PLUGIN.md) - native MCP plugin install, tools, skills, and safety notes.
|
|
43
44
|
- [Claude Code Plugin](CLAUDE_CODE_PLUGIN.md) - native Claude Code plugin architecture and install flow.
|
|
45
|
+
- [CLI Simplification Migration](MIGRATION_CLI_SIMPLIFICATION.md) - root discovery (`--pm-path`), recovery bundles, and clear/unset semantics for automation maintainers.
|
|
44
46
|
- [Releasing](RELEASING.md) - maintainer release checklist and failure handling.
|
|
45
47
|
- [starter extension](examples/starter-extension/README.md) - compact extension scaffold reference.
|
|
46
48
|
|
package/docs/RELEASING.md
CHANGED
|
@@ -166,7 +166,7 @@ git push origin v<version>
|
|
|
166
166
|
- build, typecheck, test, and coverage
|
|
167
167
|
- static quality gate (complexity, duplication, dead/orphan module, file/folder hygiene)
|
|
168
168
|
- temporary-project compatibility gate against latest published tracker data
|
|
169
|
-
- reliability threshold gate (Sentry severity threshold; `--telemetry-mode` gate policy: `off` | `best-effort` | `required`)
|
|
169
|
+
- reliability threshold gate (Sentry severity threshold, bounded to a recent-activity window via `--sentry-window-days` (default `14`, `0` = unbounded) so a stale benign unresolved issue cannot block every scheduled release; `--telemetry-mode` gate policy: `off` | `best-effort` | `required`). Scheduled `auto-release.yml` failures open/update an `Auto Release blocked` GitHub issue so blocked daily releases are never silently skipped.
|
|
170
170
|
- sandboxed `pm` coverage
|
|
171
171
|
- optional Sentry release metadata and sourcemap upload when `SENTRY_AUTH_TOKEN` is configured
|
|
172
172
|
- npm pack dry run and npx tarball smoke test
|
|
@@ -201,6 +201,7 @@ Use the npm registry package for maintainer global updates. Do not use `npm inst
|
|
|
201
201
|
## Failure Handling
|
|
202
202
|
|
|
203
203
|
- If local gates fail, fix and rerun before tagging.
|
|
204
|
+
- Treat failed scheduled Nightly Validation jobs as release-health blockers until triaged. The nightly workflow opens or updates a GitHub issue for each failing scheduled OS/Node matrix entry, with the run URL and commit SHA, so cross-platform regressions do not rely on someone manually scanning the Actions tab.
|
|
204
205
|
- If the tag workflow fails before npm publish, confirm no package was published before moving or replacing a tag.
|
|
205
206
|
- If npm publish succeeds but GitHub Release creation fails, rerun `.github/workflows/release.yml` with `workflow_dispatch` and `tag=v<version>`; the workflow skips duplicate npm publish, reruns public verification, and creates the GitHub Release for the existing tag.
|
|
206
207
|
- Record failure evidence and remediation in the release `pm` item.
|
package/docs/SDK.md
CHANGED
|
@@ -55,6 +55,14 @@ Package manifest exports:
|
|
|
55
55
|
- `readPmPackageManifest`
|
|
56
56
|
- `collectPackageExtensionDirectories`
|
|
57
57
|
|
|
58
|
+
Storage format-version exports (under `@unbrained/pm-cli/sdk/runtime`):
|
|
59
|
+
|
|
60
|
+
- `CURRENT_ITEM_FORMAT_VERSION` / `BASELINE_ITEM_FORMAT_VERSION`
|
|
61
|
+
- `effectiveItemFormatVersion` (resolve an item's stored version; absent means the baseline)
|
|
62
|
+
- `normalizeItemFormatVersion` (persisted form; the baseline is dropped so it is never serialized)
|
|
63
|
+
- `classifyItemFormatVersion` (`current` / `outdated` / `ahead`)
|
|
64
|
+
- `scanItemFormatVersions` (partition items into outdated/ahead reference lists)
|
|
65
|
+
|
|
58
66
|
Command/action contract exports:
|
|
59
67
|
|
|
60
68
|
- `PM_CORE_COMMAND_NAMES`
|
|
@@ -68,6 +76,7 @@ Testing helper exports (also under `@unbrained/pm-cli/sdk/testing`):
|
|
|
68
76
|
- `activateExtensionForTest`
|
|
69
77
|
- `assertPackageManifest`
|
|
70
78
|
- `assertRegisteredCommandContract`
|
|
79
|
+
- `assertRegisteredFlags`
|
|
71
80
|
- `assertRegisteredCommandOverride`
|
|
72
81
|
- `assertRegisteredParserOverride`
|
|
73
82
|
- `assertRegisteredPreflightOverride`
|
|
@@ -77,6 +86,10 @@ Testing helper exports (also under `@unbrained/pm-cli/sdk/testing`):
|
|
|
77
86
|
- `assertRegisteredImporter`
|
|
78
87
|
- `assertRegisteredExporter`
|
|
79
88
|
- `assertRegisteredVectorStoreAdapter`
|
|
89
|
+
- `assertRegisteredItemField`
|
|
90
|
+
- `assertRegisteredItemType`
|
|
91
|
+
- `assertRegisteredServiceOverride`
|
|
92
|
+
- `assertRegisteredMigration`
|
|
80
93
|
|
|
81
94
|
Commander option contract exports:
|
|
82
95
|
|
|
@@ -182,6 +195,29 @@ assertPackageManifest(manifest, {
|
|
|
182
195
|
});
|
|
183
196
|
```
|
|
184
197
|
|
|
198
|
+
Package tests can also assert extension registrations without importing private
|
|
199
|
+
loader internals. Use `activateExtensionForTest` plus the targeted assertion for
|
|
200
|
+
the surface your package owns:
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
import {
|
|
204
|
+
activateExtensionForTest,
|
|
205
|
+
assertRegisteredCommandContract,
|
|
206
|
+
assertRegisteredFlags,
|
|
207
|
+
} from "@unbrained/pm-cli/sdk/testing";
|
|
208
|
+
|
|
209
|
+
const activation = await activateExtensionForTest(extensionModule);
|
|
210
|
+
|
|
211
|
+
assertRegisteredCommandContract(activation.registrations, {
|
|
212
|
+
command: "incident triage",
|
|
213
|
+
flags: ["--severity"],
|
|
214
|
+
});
|
|
215
|
+
assertRegisteredFlags(activation.registrations, {
|
|
216
|
+
targetCommand: "list",
|
|
217
|
+
flags: ["--incident-filter"],
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
185
221
|
For provider-safe schemas, use `PM_PROVIDER_TOOL_PARAMETERS_SCHEMA`. It is flat and avoids advanced schema constructs such as root `oneOf`.
|
|
186
222
|
|
|
187
223
|
## Capability Requirements
|
|
@@ -372,7 +408,7 @@ import { defineExtension } from "@unbrained/pm-cli/sdk";
|
|
|
372
408
|
import { createPmCliExpectedError } from "@unbrained/pm-cli/sdk/runtime";
|
|
373
409
|
```
|
|
374
410
|
|
|
375
|
-
`PM_CLI_PACKAGE_ROOT` is reserved for first-party packages bundled inside this repository. Those packages use it to locate the running CLI's `dist/sdk/runtime.js` before they are installed as independent npm packages. External packages must not depend on `PM_CLI_PACKAGE_ROOT`, `dist/` paths, or `src/core/...`; declare `@unbrained/pm-cli` as a dependency or peer dependency and import the public SDK subpaths instead.
|
|
411
|
+
`PM_CLI_PACKAGE_ROOT` is reserved for first-party packages bundled inside this repository. Those packages use it to locate the running CLI's `dist/sdk/runtime.js` before they are installed as independent npm packages. External packages must not depend on `PM_CLI_PACKAGE_ROOT`, `dist/` paths, or `src/core/...`; declare `@unbrained/pm-cli` as a dependency or peer dependency and import the public SDK subpaths instead. When pm installs a registry package, it links that dependency to the running host CLI so the package gets the active SDK without downloading a second CLI copy into the project.
|
|
376
412
|
|
|
377
413
|
## Testing Helpers
|
|
378
414
|
|
|
@@ -514,6 +550,41 @@ assertRegisteredPreflightOverride(activation.preflight); // preflight overrides
|
|
|
514
550
|
assertRegisteredRendererOverride(activation.renderers, { format: "toon" });
|
|
515
551
|
```
|
|
516
552
|
|
|
553
|
+
Service overrides from `registerService(service, override)` live on
|
|
554
|
+
`activation.services` (an `ExtensionServiceRegistry`), so
|
|
555
|
+
`assertRegisteredServiceOverride` takes the service registry and a known service
|
|
556
|
+
name (`output_format` | `error_format` | `help_format` | `lock_acquire` |
|
|
557
|
+
`lock_release` | `history_append` | `item_store_write` | `item_store_delete`):
|
|
558
|
+
|
|
559
|
+
```ts
|
|
560
|
+
import { assertRegisteredServiceOverride } from "@unbrained/pm-cli/sdk/testing";
|
|
561
|
+
|
|
562
|
+
const service = assertRegisteredServiceOverride(activation.services, {
|
|
563
|
+
service: "output_format",
|
|
564
|
+
extensionName: "my-ext",
|
|
565
|
+
});
|
|
566
|
+
// service.run is the registered ServiceOverride handler
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
Schema migrations from `registerMigration(definition)` live on
|
|
570
|
+
`activation.registrations.migrations`. `assertRegisteredMigration` matches by the
|
|
571
|
+
migration `id` and can additionally assert the `mandatory` governance flag (an
|
|
572
|
+
unset flag is treated as non-mandatory):
|
|
573
|
+
|
|
574
|
+
```ts
|
|
575
|
+
import { assertRegisteredMigration } from "@unbrained/pm-cli/sdk/testing";
|
|
576
|
+
|
|
577
|
+
const migration = assertRegisteredMigration(activation.registrations, {
|
|
578
|
+
migration: "backfill-severity",
|
|
579
|
+
mandatory: true,
|
|
580
|
+
});
|
|
581
|
+
// migration.definition is the normalized SchemaMigrationDefinition
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
Together these complete the SDK assertion surface: every extension `register*`
|
|
585
|
+
method now has a matching `assertRegistered*` helper, so packages can prove any
|
|
586
|
+
registration without importing private registry internals.
|
|
587
|
+
|
|
517
588
|
The bundled `pm-lifecycle-hooks` package is the first-party hooks exemplar. It
|
|
518
589
|
declares only the `hooks` capability and registers a default-inert `afterCommand`
|
|
519
590
|
hook, so package authors can copy a lifecycle pattern that does not write files,
|
|
@@ -630,6 +701,14 @@ Manifest capability: `importers` (and `schema` when supplying `flags`). The two-
|
|
|
630
701
|
form remains supported; supplying the options object never produces a command-handler
|
|
631
702
|
collision because the definition and handler share the same command path and extension.
|
|
632
703
|
|
|
704
|
+
Importers and exporters read their source/destination through flags (e.g. `--file`,
|
|
705
|
+
`--folder`) and take **no positional argument** unless one is declared via `arguments`.
|
|
706
|
+
An unexpected positional (such as `pm jsonl import data.jsonl` instead of
|
|
707
|
+
`pm jsonl import --file data.jsonl`) is rejected with a usage error rather than being
|
|
708
|
+
silently ignored, and any `failure_hints` you register are appended to that error so an
|
|
709
|
+
agent is steered to the correct flag. Flags declared via `flags` render once, as
|
|
710
|
+
first-class options in the standard `Options:` section of `--help`.
|
|
711
|
+
|
|
633
712
|
The bundled `pm-beads` and `pm-todos` packages are first-party importer/exporter
|
|
634
713
|
exemplars that use this registration path and expose runtime contracts for their
|
|
635
714
|
generated commands.
|