@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
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fff5e3e1-ebbe-586a-b8e4-34f2882d28a3")}catch(e){}}();
|
|
3
3
|
import {
|
|
4
4
|
buildRemediationMap
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-R2EMWY7Q.js";
|
|
6
6
|
import {
|
|
7
7
|
scanLockHealth
|
|
8
8
|
} from "./chunk-37E72CNS.js";
|
|
9
9
|
import {
|
|
10
10
|
scanHistoryDrift
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-NXS7ZKAK.js";
|
|
12
12
|
import {
|
|
13
13
|
collectStaleVectorizationIds
|
|
14
14
|
} from "./chunk-ROGZTCCB.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-Z6T4PQI2.js";
|
|
16
16
|
import {
|
|
17
17
|
PM_TELEMETRY_SOURCE_CONTEXT_VALUES,
|
|
18
18
|
TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS,
|
|
19
19
|
TELEMETRY_SCHEMA_VERSION
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-SBGXDO7A.js";
|
|
21
21
|
import {
|
|
22
22
|
buildCapabilityContractMetadata,
|
|
23
23
|
buildRegistrationCollisionRemediation,
|
|
24
24
|
collectUnknownCapabilityGuidance,
|
|
25
25
|
readManagedExtensionState
|
|
26
|
-
} from "./chunk-
|
|
27
|
-
import "./chunk-
|
|
26
|
+
} from "./chunk-32R4PIC6.js";
|
|
27
|
+
import "./chunk-SRYYRVPB.js";
|
|
28
28
|
import {
|
|
29
29
|
buildVectorizationEmbeddingIdentity,
|
|
30
30
|
hasVectorizationEmbeddingIdentityChanged,
|
|
@@ -34,25 +34,27 @@ import {
|
|
|
34
34
|
resolveProviderConfigSource,
|
|
35
35
|
resolveSettingsWithSemanticRuntimeDefaults,
|
|
36
36
|
resolveVectorStores
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-OTHIWLMB.js";
|
|
38
38
|
import "./chunk-P4SESZGT.js";
|
|
39
39
|
import {
|
|
40
40
|
collectRegisteredItemFieldNames,
|
|
41
41
|
enforceHistoryStreamPolicyForItems,
|
|
42
42
|
listAllFrontMatter,
|
|
43
43
|
listAllFrontMatterWithBody
|
|
44
|
-
} from "./chunk-
|
|
45
|
-
import "./chunk-
|
|
44
|
+
} from "./chunk-NIUEXCFS.js";
|
|
45
|
+
import "./chunk-D7FYS6PG.js";
|
|
46
46
|
import {
|
|
47
|
+
effectiveItemFormatVersion,
|
|
47
48
|
findFirstMergeConflictMarker,
|
|
48
|
-
parseItemDocument
|
|
49
|
-
|
|
49
|
+
parseItemDocument,
|
|
50
|
+
scanItemFormatVersions
|
|
51
|
+
} from "./chunk-LEU5GHRC.js";
|
|
50
52
|
import {
|
|
51
53
|
resolveItemTypeRegistry
|
|
52
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-QZTWBFXJ.js";
|
|
53
55
|
import {
|
|
54
56
|
nowIso
|
|
55
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-NSBZ2CKF.js";
|
|
56
58
|
import {
|
|
57
59
|
EXIT_CODE,
|
|
58
60
|
ITEM_FILE_EXTENSIONS,
|
|
@@ -72,7 +74,7 @@ import {
|
|
|
72
74
|
resolvePmRoot,
|
|
73
75
|
runActiveOnReadHooks,
|
|
74
76
|
toNonEmptyStringOrUndefined
|
|
75
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-434HM6Z5.js";
|
|
76
78
|
|
|
77
79
|
// dist/cli/commands/health.js
|
|
78
80
|
import fs from "node:fs/promises";
|
|
@@ -185,6 +187,7 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
|
|
|
185
187
|
const itemUnreadable = [];
|
|
186
188
|
const itemConflictMarkers = [];
|
|
187
189
|
const itemParseFailures = [];
|
|
190
|
+
const formatVersionEntries = [];
|
|
188
191
|
const extensionFieldNames = collectRegisteredItemFieldNames(getActiveExtensionRegistrations());
|
|
189
192
|
for (const itemPath of itemPaths) {
|
|
190
193
|
const relativePath = normalizeRelativePath(pmRoot, itemPath);
|
|
@@ -205,11 +208,13 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
|
|
|
205
208
|
continue;
|
|
206
209
|
}
|
|
207
210
|
try {
|
|
208
|
-
parseItemDocument(raw, { format: getItemFormatFromPath(itemPath), schema, extensionFieldNames });
|
|
211
|
+
const parsed = parseItemDocument(raw, { format: getItemFormatFromPath(itemPath), schema, extensionFieldNames });
|
|
212
|
+
formatVersionEntries.push({ ref: relativePath, version: effectiveItemFormatVersion(parsed.metadata) });
|
|
209
213
|
} catch {
|
|
210
214
|
itemParseFailures.push(relativePath);
|
|
211
215
|
}
|
|
212
216
|
}
|
|
217
|
+
const formatVersionScan = scanItemFormatVersions(formatVersionEntries);
|
|
213
218
|
const historyDir = path.join(pmRoot, "history");
|
|
214
219
|
const historyUnreadable = [];
|
|
215
220
|
const historyConflictMarkers = [];
|
|
@@ -263,7 +268,11 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
|
|
|
263
268
|
...itemParseFailures.map((entry) => `integrity_item_parse_failed:${entry}`),
|
|
264
269
|
...historyUnreadable.map((entry) => `integrity_history_unreadable:${entry}`),
|
|
265
270
|
...historyConflictMarkers.map((entry) => `integrity_history_conflict_marker:${entry.id}:L${entry.line}`),
|
|
266
|
-
...historyInvalidJson.map((entry) => `integrity_history_invalid_json:${entry.id}:L${entry.line}`)
|
|
271
|
+
...historyInvalidJson.map((entry) => `integrity_history_invalid_json:${entry.id}:L${entry.line}`),
|
|
272
|
+
/* c8 ignore start -- outdated-version items are unreachable until CURRENT_ITEM_FORMAT_VERSION advances past the baseline (an effective version below 1 cannot occur); the per-item mapping is covered in item-format-version.spec, and the ahead path below is covered by health-command.spec */
|
|
273
|
+
...formatVersionScan.outdated.map((entry) => `integrity_item_outdated_format_version:${entry}`),
|
|
274
|
+
/* c8 ignore stop */
|
|
275
|
+
...formatVersionScan.ahead.map((entry) => `integrity_item_ahead_format_version:${entry}`)
|
|
267
276
|
];
|
|
268
277
|
const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));
|
|
269
278
|
return {
|
|
@@ -279,11 +288,15 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
|
|
|
279
288
|
item_parse_failures: itemParseFailures.length,
|
|
280
289
|
history_unreadable: historyUnreadable.length,
|
|
281
290
|
history_conflict_markers: historyConflictMarkers.length,
|
|
282
|
-
history_invalid_json: historyInvalidJson.length
|
|
291
|
+
history_invalid_json: historyInvalidJson.length,
|
|
292
|
+
item_outdated_format_version: formatVersionScan.outdated.length,
|
|
293
|
+
item_ahead_format_version: formatVersionScan.ahead.length
|
|
283
294
|
},
|
|
284
295
|
item_unreadable: itemUnreadable,
|
|
285
296
|
item_conflict_markers: itemConflictMarkers,
|
|
286
297
|
item_parse_failures: itemParseFailures,
|
|
298
|
+
item_outdated_format_version: formatVersionScan.outdated,
|
|
299
|
+
item_ahead_format_version: formatVersionScan.ahead,
|
|
287
300
|
history_unreadable: historyUnreadable,
|
|
288
301
|
history_conflict_markers: historyConflictMarkers,
|
|
289
302
|
history_invalid_json: historyInvalidJson
|
|
@@ -1076,7 +1089,8 @@ async function buildLocksCheck(pmRoot) {
|
|
|
1076
1089
|
};
|
|
1077
1090
|
}
|
|
1078
1091
|
async function buildHistoryDriftCheck(pmRoot, items) {
|
|
1079
|
-
const
|
|
1092
|
+
const cacheHitVerification = "metadata";
|
|
1093
|
+
const { missingStreams, unreadableStreams, hashMismatches, chainMismatches, driftedItems } = await scanHistoryDrift(pmRoot, items, { cacheHitVerification });
|
|
1080
1094
|
const warnings = [
|
|
1081
1095
|
...missingStreams.map((id) => `history_drift_missing_stream:${id}`),
|
|
1082
1096
|
...unreadableStreams.map((id) => `history_drift_unreadable_stream:${id}`),
|
|
@@ -1089,6 +1103,7 @@ async function buildHistoryDriftCheck(pmRoot, items) {
|
|
|
1089
1103
|
status: warnings.length === 0 ? "ok" : "warn",
|
|
1090
1104
|
details: {
|
|
1091
1105
|
checked_items: items.length,
|
|
1106
|
+
cache_hit_verification: cacheHitVerification,
|
|
1092
1107
|
drifted_items: driftedItems,
|
|
1093
1108
|
counts: {
|
|
1094
1109
|
drifted: driftedItems.length,
|
|
@@ -1360,6 +1375,7 @@ async function runHealth(global, options = {}) {
|
|
|
1360
1375
|
directories: missingDirs.map((dir) => `missing_directory:${dir}`),
|
|
1361
1376
|
settings_values: settingWarnings,
|
|
1362
1377
|
telemetry: telemetryCheck.warnings,
|
|
1378
|
+
extensions: extensionCheck.warnings,
|
|
1363
1379
|
storage: historySummary.over_threshold.map((id) => `history_stream_over_compact_threshold:${id}`),
|
|
1364
1380
|
locks: locksCheck.warnings,
|
|
1365
1381
|
integrity: integrityCheck.warnings,
|
|
@@ -1368,11 +1384,7 @@ async function runHealth(global, options = {}) {
|
|
|
1368
1384
|
};
|
|
1369
1385
|
const historyDriftedCount = typeof historyDriftCheck.check.details.counts?.drifted === "number" ? historyDriftCheck.check.details.counts.drifted : 0;
|
|
1370
1386
|
for (const check of checks) {
|
|
1371
|
-
const
|
|
1372
|
-
if (sources === void 0) {
|
|
1373
|
-
continue;
|
|
1374
|
-
}
|
|
1375
|
-
const remediationMap = buildRemediationMap(sources);
|
|
1387
|
+
const remediationMap = buildRemediationMap(checkRemediationSources[check.name]);
|
|
1376
1388
|
if (check.name === "history_drift" && historyDriftedCount > 1) {
|
|
1377
1389
|
for (const code of Object.keys(remediationMap)) {
|
|
1378
1390
|
remediationMap[code] = "pm history-repair --all";
|
|
@@ -1423,6 +1435,6 @@ export {
|
|
|
1423
1435
|
_testOnlyHealthCommand,
|
|
1424
1436
|
runHealth
|
|
1425
1437
|
};
|
|
1426
|
-
//# sourceMappingURL=health-
|
|
1438
|
+
//# sourceMappingURL=health-IVMA3XQC.js.map
|
|
1427
1439
|
|
|
1428
|
-
//# debugId=
|
|
1440
|
+
//# debugId=fff5e3e1-ebbe-586a-b8e4-34f2882d28a3
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../cli/commands/health.ts"],"sourcesContent":["/**\n * @module cli/commands/health\n *\n * Implements the pm health command surface and its agent-facing runtime behavior.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { pathExists, readFileIfExists } from \"../../core/fs/fs-utils.js\";\nimport { activateExtensions, getActiveExtensionRegistrations, loadExtensions, runActiveOnReadHooks } from \"../../core/extensions/index.js\";\nimport { collectRegisteredItemFieldNames } from \"../../core/extensions/item-fields.js\";\nimport {\n KNOWN_EXTENSION_CAPABILITIES,\n type LoadedExtension,\n} from \"../../core/extensions/loader.js\";\nimport { enforceHistoryStreamPolicyForItems } from \"../../core/history/history-stream-policy.js\";\nimport { scanHistoryDrift } from \"../../core/history/drift-scan.js\";\nimport { scanLockHealth } from \"../../core/lock/lock-gc.js\";\nimport {\n readVectorizationStatusLedger,\n refreshSemanticEmbeddingsForMutatedItems,\n} from \"../../core/search/cache.js\";\nimport { resolveEmbeddingProviders, resolveProviderConfigSource } from \"../../core/search/providers.js\";\nimport { resolveSettingsWithSemanticRuntimeDefaults } from \"../../core/search/semantic-defaults.js\";\nimport { collectStaleVectorizationIds } from \"../../core/search/staleness.js\";\nimport {\n buildVectorizationEmbeddingIdentity,\n hasVectorizationEmbeddingIdentityChanged,\n} from \"../../core/search/vectorization-metadata.js\";\nimport { resolveVectorStores } from \"../../core/search/vector-stores.js\";\nimport { EXIT_CODE, PM_CORE_REQUIRED_SUBDIRS, PM_OPTIONAL_TYPE_SUBDIRS } from \"../../core/shared/constants.js\";\nimport { findFirstMergeConflictMarker } from \"../../core/shared/conflict-markers.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { toNonEmptyStringOrUndefined } from \"../../core/shared/primitives.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { parseItemDocument } from \"../../core/item/item-format.js\";\nimport { effectiveItemFormatVersion, scanItemFormatVersions } from \"../../core/item/item-format-version.js\";\nimport { listAllFrontMatter, listAllFrontMatterWithBody } from \"../../core/store/item-store.js\";\nimport {\n PM_TELEMETRY_SOURCE_CONTEXT_VALUES,\n TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS,\n TELEMETRY_SCHEMA_VERSION,\n} from \"../../core/telemetry/runtime.js\";\n\nconst PM_TELEMETRY_SOURCE_CONTEXT_SET = new Set<string>(PM_TELEMETRY_SOURCE_CONTEXT_VALUES);\nimport {\n getItemFormatFromPath,\n getSettingsPath,\n ITEM_FILE_EXTENSIONS,\n resolveGlobalPmRoot,\n resolvePmRoot,\n} from \"../../core/store/paths.js\";\nimport { readSettingsWithMetadata } from \"../../core/store/settings.js\";\nimport { buildRemediationMap } from \"../../core/diagnostics/remediation.js\";\nimport type { HistoryCompactPolicy, ItemFormat, ItemMetadata, PmSettings } from \"../../types/index.js\";\nimport { readManagedExtensionState } from \"./extension.js\";\nimport {\n buildCapabilityContractMetadata,\n buildRegistrationCollisionRemediation,\n collectUnknownCapabilityGuidance,\n} from \"./extension/doctor.js\";\n\ntype HealthStatus = \"ok\" | \"warn\";\ntype MigrationRuntimeStatus = \"pending\" | \"failed\" | \"applied\";\n\n/**\n * Documents the health check payload exchanged by command, SDK, and package integrations.\n */\nexport interface HealthCheck {\n name:\n | \"settings\"\n | \"directories\"\n | \"settings_values\"\n | \"telemetry\"\n | \"extensions\"\n | \"storage\"\n | \"locks\"\n | \"integrity\"\n | \"history_drift\"\n | \"vectorization\";\n status: HealthStatus;\n details: Record<string, unknown>;\n}\n\n/**\n * Documents the health result payload exchanged by command, SDK, and package integrations.\n */\nexport interface HealthResult {\n ok: boolean;\n checks: HealthCheck[];\n warning_count?: number;\n warnings: string[];\n projection?: {\n mode: \"brief\" | \"summary\" | \"full\";\n warning_count: number;\n warnings_truncated: boolean;\n detail_limit: number;\n omitted_checks?: HealthCheck[\"name\"][];\n };\n generated_at: string;\n}\n\n/**\n * Documents the run health options payload exchanged by command, SDK, and package integrations.\n */\nexport interface RunHealthOptions {\n strictDirectories?: boolean;\n checkOnly?: boolean;\n checkTelemetry?: boolean;\n noRefresh?: boolean;\n refreshVectors?: boolean;\n verboseStaleItems?: boolean;\n skipVectors?: boolean;\n skipIntegrity?: boolean;\n skipDrift?: boolean;\n full?: boolean;\n brief?: boolean;\n summary?: boolean;\n}\n\ninterface MigrationStatusEntry {\n layer: \"global\" | \"project\";\n name: string;\n id: string;\n status: MigrationRuntimeStatus;\n reason?: string;\n}\n\ninterface MigrationStatusSummary {\n applied: MigrationStatusEntry[];\n pending: MigrationStatusEntry[];\n failed: MigrationStatusEntry[];\n applied_count: number;\n pending_count: number;\n failed_count: number;\n}\n\ninterface ExtensionHealthTriageSummary {\n status: \"ok\" | \"warn\";\n warning_count: number;\n warning_codes: string[];\n load_failure_count: number;\n activation_failure_count: number;\n migration_failed_count: number;\n migration_pending_count: number;\n managed_state_warning_count: number;\n managed_extension_entries_count: number;\n unmanaged_loaded_extension_count: number;\n unmanaged_loaded_extensions: string[];\n unmanaged_expected_extension_count: number;\n unmanaged_expected_extensions: string[];\n unmanaged_action_required_extension_count: number;\n unmanaged_action_required_extensions: string[];\n update_health_coverage: \"full\" | \"partial\";\n update_health_partial: boolean;\n unknown_capability_count: number;\n top_warnings: string[];\n remediation: string[];\n}\n\ntype ItemWithBody = Awaited<ReturnType<typeof listAllFrontMatterWithBody>>[number];\nconst STALE_VECTORIZATION_SUMMARY_LIMIT = 25;\nconst BRIEF_HEALTH_DETAIL_LIMIT = 8;\nconst TELEMETRY_QUEUE_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\", \"events.jsonl\");\nconst TELEMETRY_STATE_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\", \"state.json\");\nconst TELEMETRY_ENDPOINT_PROBE_TIMEOUT_MS = 2_500;\nconst TELEMETRY_QUEUE_HIGH_WATER_MARK = 500;\nconst TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD = TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS - 3;\nconst TELEMETRY_SERVER_MAX_SCHEMA_VERSION_HEADERS = [\n \"x-pm-telemetry-max-schema-version\",\n \"x-pm-telemetry-max-version\",\n] as const;\n\n/**\n * Advisory warnings are surfaced for visibility but never flip overall health to\n * not-ok. Telemetry is opt-out, non-critical observability: a queued/unreachable\n * telemetry endpoint or corrupt local telemetry state is not a project-health\n * failure and must not block agents that gate on `pm health` `ok`. History\n * over-compaction-threshold warnings are likewise advisory maintenance hints —\n * a deep stream is healthy, just a candidate for `pm history-compact`.\n */\nfunction isAdvisoryHealthWarning(warning: string): boolean {\n return warning.startsWith(\"telemetry_\") || warning.startsWith(\"history_stream_over_compact_threshold:\");\n}\n\nfunction warningCode(value: string): string {\n const normalized = value.trim();\n const separator = normalized.indexOf(\":\");\n if (separator === -1) {\n return normalized;\n }\n return normalized.slice(0, separator);\n}\n\nfunction normalizeExtensionNameForMatch(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction isExpectedUnmanagedExtension(name: string, directory: string): boolean {\n const normalizedName = normalizeExtensionNameForMatch(name);\n const normalizedDirectory = normalizeExtensionNameForMatch(directory);\n if (normalizedName.startsWith(\"builtin-\")) {\n return true;\n }\n return normalizedDirectory === \"beads\" || normalizedDirectory === \"todos\";\n}\n\nasync function isDirectory(targetPath: string): Promise<boolean> {\n try {\n const stats = await fs.stat(targetPath);\n return stats.isDirectory();\n } catch {\n return false;\n }\n}\n\n/**\n * Summary of the history-stream directory used by the storage health check.\n * `over_threshold` is populated only when the compaction policy is enabled —\n * counting entries requires reading every stream, so the default (policy-off)\n * path stays a cheap directory listing.\n */\ninterface HistoryStreamSummary {\n count: number;\n warnings: string[];\n over_threshold: string[];\n max_entries: number | null;\n}\n\nasync function countHistoryStreams(\n pmRoot: string,\n compactPolicy: HistoryCompactPolicy,\n): Promise<HistoryStreamSummary> {\n const historyDir = path.join(pmRoot, \"history\");\n if (!(await isDirectory(historyDir))) {\n return { count: 0, warnings: [], over_threshold: [], max_entries: null };\n }\n const historyFiles = (await fs.readdir(historyDir))\n .filter((entry) => entry.endsWith(\".jsonl\"))\n .sort((left, right) => left.localeCompare(right));\n\n const policyActive = compactPolicy.enabled;\n const maxEntries = policyActive ? compactPolicy.max_entries : null;\n const warnings: string[] = [];\n const overThreshold: string[] = [];\n for (const fileName of historyFiles) {\n const streamPath = path.join(historyDir, fileName);\n warnings.push(...(await runActiveOnReadHooks({ path: streamPath, scope: \"project\" })));\n if (!policyActive) {\n continue;\n }\n const raw = await fs.readFile(streamPath, \"utf8\");\n let entries = 0;\n for (const line of raw.split(/\\r?\\n/)) {\n if (line.trim().length > 0) {\n entries += 1;\n }\n }\n if (entries > compactPolicy.max_entries) {\n overThreshold.push(fileName.slice(0, -\".jsonl\".length));\n }\n }\n\n return {\n count: historyFiles.length,\n warnings: [...warnings, ...overThreshold.map((id) => `history_stream_over_compact_threshold:${id}`)],\n over_threshold: overThreshold,\n max_entries: maxEntries,\n };\n}\n\nfunction normalizeRelativePath(pmRoot: string, targetPath: string): string {\n return path.relative(pmRoot, targetPath).replaceAll(\"\\\\\", \"/\");\n}\n\nasync function listItemDocumentPaths(pmRoot: string, typeToFolder: Record<string, string>): Promise<string[]> {\n const folders = [...new Set(Object.values(typeToFolder))].sort((left, right) => left.localeCompare(right));\n const itemPaths: string[] = [];\n for (const folder of folders) {\n const directoryPath = path.join(pmRoot, folder);\n let entries: string[] = [];\n try {\n entries = await fs.readdir(directoryPath);\n } catch (error: unknown) {\n if (typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === \"ENOENT\") {\n continue;\n }\n continue;\n }\n for (const entry of entries) {\n if (!ITEM_FILE_EXTENSIONS.some((extension) => entry.toLowerCase().endsWith(extension))) {\n continue;\n }\n itemPaths.push(path.join(directoryPath, entry));\n }\n }\n itemPaths.sort((left, right) => normalizeRelativePath(pmRoot, left).localeCompare(normalizeRelativePath(pmRoot, right)));\n return itemPaths;\n}\n\nasync function buildIntegrityCheck(\n pmRoot: string,\n typeToFolder: Record<string, string>,\n schema: PmSettings[\"schema\"],\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const itemPaths = await listItemDocumentPaths(pmRoot, typeToFolder);\n const itemUnreadable: string[] = [];\n const itemConflictMarkers: Array<{ path: string; line: number; marker: string }> = [];\n const itemParseFailures: string[] = [];\n const formatVersionEntries: Array<{ ref: string; version: number }> = [];\n const extensionFieldNames = collectRegisteredItemFieldNames(getActiveExtensionRegistrations());\n\n for (const itemPath of itemPaths) {\n const relativePath = normalizeRelativePath(pmRoot, itemPath);\n let raw = \"\";\n try {\n raw = await fs.readFile(itemPath, \"utf8\");\n } catch {\n itemUnreadable.push(relativePath);\n continue;\n }\n const conflictMarker = findFirstMergeConflictMarker(raw);\n if (conflictMarker) {\n itemConflictMarkers.push({\n path: relativePath,\n line: conflictMarker.line,\n marker: conflictMarker.marker,\n });\n continue;\n }\n try {\n const parsed = parseItemDocument(raw, { format: getItemFormatFromPath(itemPath) as ItemFormat, schema, extensionFieldNames });\n formatVersionEntries.push({ ref: relativePath, version: effectiveItemFormatVersion(parsed.metadata) });\n } catch {\n itemParseFailures.push(relativePath);\n }\n }\n const formatVersionScan = scanItemFormatVersions(formatVersionEntries);\n\n const historyDir = path.join(pmRoot, \"history\");\n const historyUnreadable: string[] = [];\n const historyConflictMarkers: Array<{ id: string; line: number; marker: string }> = [];\n const historyInvalidJson: Array<{ id: string; line: number }> = [];\n let historyFiles: string[] = [];\n try {\n historyFiles = (await fs.readdir(historyDir)).filter((entry) => entry.endsWith(\".jsonl\")).sort((left, right) => left.localeCompare(right));\n } catch (error: unknown) {\n /* c8 ignore start -- ENOENT/non-ENOENT differentiation requires filesystem fault injection */\n if (!(typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === \"ENOENT\")) {\n historyUnreadable.push(\"history\");\n }\n /* c8 ignore stop */\n }\n for (const fileName of historyFiles) {\n const itemId = fileName.slice(0, -\".jsonl\".length);\n const historyPath = path.join(historyDir, fileName);\n let raw = \"\";\n try {\n raw = await fs.readFile(historyPath, \"utf8\");\n } catch {\n historyUnreadable.push(itemId);\n continue;\n }\n const conflictMarker = findFirstMergeConflictMarker(raw);\n if (conflictMarker) {\n historyConflictMarkers.push({\n id: itemId,\n line: conflictMarker.line,\n marker: conflictMarker.marker,\n });\n continue;\n }\n const lines = raw.split(/\\r?\\n/);\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index]?.trim();\n if (!line) {\n continue;\n }\n try {\n JSON.parse(line);\n } catch {\n historyInvalidJson.push({\n id: itemId,\n line: index + 1,\n });\n }\n }\n }\n\n const warnings = [\n ...itemUnreadable.map((entry) => `integrity_item_unreadable:${entry}`),\n ...itemConflictMarkers.map((entry) => `integrity_item_conflict_marker:${entry.path}:L${entry.line}`),\n ...itemParseFailures.map((entry) => `integrity_item_parse_failed:${entry}`),\n ...historyUnreadable.map((entry) => `integrity_history_unreadable:${entry}`),\n ...historyConflictMarkers.map((entry) => `integrity_history_conflict_marker:${entry.id}:L${entry.line}`),\n ...historyInvalidJson.map((entry) => `integrity_history_invalid_json:${entry.id}:L${entry.line}`),\n /* c8 ignore start -- outdated-version items are unreachable until CURRENT_ITEM_FORMAT_VERSION advances past the baseline (an effective version below 1 cannot occur); the per-item mapping is covered in item-format-version.spec, and the ahead path below is covered by health-command.spec */\n ...formatVersionScan.outdated.map((entry) => `integrity_item_outdated_format_version:${entry}`),\n /* c8 ignore stop */\n ...formatVersionScan.ahead.map((entry) => `integrity_item_ahead_format_version:${entry}`),\n ];\n const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));\n\n return {\n check: {\n name: \"integrity\",\n status: normalizedWarnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n checked_item_files: itemPaths.length,\n checked_history_streams: historyFiles.length,\n counts: {\n item_unreadable: itemUnreadable.length,\n item_conflict_markers: itemConflictMarkers.length,\n item_parse_failures: itemParseFailures.length,\n history_unreadable: historyUnreadable.length,\n history_conflict_markers: historyConflictMarkers.length,\n history_invalid_json: historyInvalidJson.length,\n item_outdated_format_version: formatVersionScan.outdated.length,\n item_ahead_format_version: formatVersionScan.ahead.length,\n },\n item_unreadable: itemUnreadable,\n item_conflict_markers: itemConflictMarkers,\n item_parse_failures: itemParseFailures,\n item_outdated_format_version: formatVersionScan.outdated,\n item_ahead_format_version: formatVersionScan.ahead,\n history_unreadable: historyUnreadable,\n history_conflict_markers: historyConflictMarkers,\n history_invalid_json: historyInvalidJson,\n },\n },\n warnings: normalizedWarnings,\n };\n}\n\n/* c8 ignore start -- activate export shape variants are exercised through integration load tests */\nfunction hasActivateExport(moduleRecord: Record<string, unknown>): boolean {\n if (typeof moduleRecord.activate === \"function\") {\n return true;\n }\n const defaultExport = moduleRecord.default;\n if (typeof defaultExport !== \"object\" || defaultExport === null) {\n return false;\n }\n return typeof (defaultExport as Record<string, unknown>).activate === \"function\";\n}\n/* c8 ignore stop */\n\nfunction summarizeLoadedExtension(extension: LoadedExtension): Record<string, unknown> {\n const summary: Record<string, unknown> = {\n layer: extension.layer,\n directory: extension.directory,\n manifest_path: extension.manifest_path,\n name: extension.name,\n version: extension.version,\n entry: extension.entry,\n priority: extension.priority,\n entry_path: extension.entry_path,\n has_activate: hasActivateExport(extension.module as Record<string, unknown>),\n };\n /* c8 ignore start -- capability list optionality is exercised by extension load integration suites */\n if (Array.isArray(extension.capabilities)) {\n summary.capabilities = [...extension.capabilities];\n }\n /* c8 ignore stop */\n return summary;\n}\n\nfunction resolveMigrationId(definition: Record<string, unknown>, fallbackIndex: number): string {\n const explicitId = toNonEmptyStringOrUndefined(definition.id);\n if (explicitId) {\n return explicitId;\n }\n return `migration-${String(fallbackIndex + 1).padStart(3, \"0\")}`;\n}\n\nfunction resolveMigrationStatus(definition: Record<string, unknown>): MigrationRuntimeStatus {\n const rawStatus = toNonEmptyStringOrUndefined(definition.status);\n const normalized = rawStatus?.toLowerCase();\n if (normalized === \"failed\") {\n return \"failed\";\n }\n if (normalized === \"applied\") {\n return \"applied\";\n }\n return \"pending\";\n}\n\nfunction resolveMigrationFailureReason(definition: Record<string, unknown>): string | undefined {\n return toNonEmptyStringOrUndefined(definition.reason) ?? toNonEmptyStringOrUndefined(definition.error) ?? toNonEmptyStringOrUndefined(definition.message);\n}\n\n/* c8 ignore start -- comparator tie-break branches are deterministic ordering glue exercised via migration integration tests */\nfunction compareMigrationEntries(left: MigrationStatusEntry, right: MigrationStatusEntry): number {\n const byLayer = (left.layer ?? \"\").localeCompare(right.layer ?? \"\");\n if (byLayer !== 0) {\n return byLayer;\n }\n const byName = (left.name ?? \"\").localeCompare(right.name ?? \"\");\n if (byName !== 0) {\n return byName;\n }\n return (left.id ?? \"\").localeCompare(right.id ?? \"\");\n}\n/* c8 ignore stop */\n\nfunction summarizeMigrationStatuses(\n migrations: Array<{\n layer: \"global\" | \"project\";\n name: string;\n definition: Record<string, unknown>;\n }>,\n): { summary: MigrationStatusSummary; warnings: string[] } {\n const applied: MigrationStatusEntry[] = [];\n const pending: MigrationStatusEntry[] = [];\n const failed: MigrationStatusEntry[] = [];\n\n migrations.forEach((migration, index) => {\n const id = resolveMigrationId(migration.definition, index);\n const status = resolveMigrationStatus(migration.definition);\n if (status === \"applied\") {\n applied.push({\n layer: migration.layer,\n name: migration.name,\n id,\n status,\n });\n return;\n }\n if (status === \"failed\") {\n failed.push({\n layer: migration.layer,\n name: migration.name,\n id,\n status,\n reason: resolveMigrationFailureReason(migration.definition),\n });\n return;\n }\n pending.push({\n layer: migration.layer,\n name: migration.name,\n id,\n status,\n });\n });\n\n applied.sort(compareMigrationEntries);\n pending.sort(compareMigrationEntries);\n failed.sort(compareMigrationEntries);\n\n const warnings = [\n ...failed.map((entry) => `extension_migration_failed:${entry.layer}:${entry.name}:${entry.id}`),\n ...pending.map((entry) => `extension_migration_pending:${entry.layer}:${entry.name}:${entry.id}`),\n ];\n\n return {\n summary: {\n applied,\n pending,\n failed,\n applied_count: applied.length,\n pending_count: pending.length,\n failed_count: failed.length,\n },\n warnings,\n };\n}\n\nfunction buildExtensionHealthTriageSummary(\n warnings: string[],\n loadFailureCount: number,\n activationFailureCount: number,\n migrationStatus: MigrationStatusSummary,\n managedStateWarningCount: number,\n managedExtensionEntriesCount: number,\n unmanagedLoadedExtensions: string[],\n unmanagedExpectedExtensions: string[],\n unmanagedActionRequiredExtensions: string[],\n): ExtensionHealthTriageSummary {\n const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));\n const warningCodes = [...new Set(normalizedWarnings.map((value) => warningCode(value)))].sort((left, right) =>\n left.localeCompare(right),\n );\n const unknownCapabilityCount = normalizedWarnings.filter((warning) => warning.startsWith(\"extension_capability_unknown:\")).length;\n const updateHealthPartial = unmanagedActionRequiredExtensions.length > 0;\n const updateHealthCoverage = updateHealthPartial ? \"partial\" : \"full\";\n const remediation: string[] = [];\n const registrationCollisionRemediation = buildRegistrationCollisionRemediation(normalizedWarnings, {\n deactivate: \"pm extension --deactivate <name> --project/--global\",\n doctor: \"pm extension --doctor --project/--global --detail deep --trace\",\n });\n if (registrationCollisionRemediation) {\n remediation.push(registrationCollisionRemediation);\n }\n if (loadFailureCount > 0) {\n remediation.push(\"Run pm extension --explore --project and pm extension --explore --global to inspect load failures.\");\n }\n if (activationFailureCount > 0) {\n remediation.push(\"Review checks[name=extensions].details.activation.failed in pm health --json for activation error details.\");\n }\n if (migrationStatus.failed_count > 0 || migrationStatus.pending_count > 0) {\n remediation.push(\"Resolve pending/failed extension migrations before write commands; use --force only when policy allows.\");\n }\n if (managedStateWarningCount > 0) {\n remediation.push(\"Run pm extension --manage --project and pm extension --manage --global to refresh managed-state diagnostics.\");\n }\n if (unknownCapabilityCount > 0) {\n remediation.push(\n `Unknown extension capabilities detected. Allowed capabilities: ${KNOWN_EXTENSION_CAPABILITIES.join(\", \")}. ` +\n \"Review extension_capability_unknown warning details for suggested replacements.\",\n );\n }\n if (normalizedWarnings.some((warning) => warning.startsWith(\"extension_capability_legacy_alias:\"))) {\n remediation.push(\n \"Legacy extension capability aliases were auto-remapped to canonical capabilities. \" +\n \"Update manifests to canonical names (migration/validation -> schema).\",\n );\n }\n if (normalizedWarnings.some((warning) => warning.startsWith(\"extension_command_definition_legacy_handler_alias:\"))) {\n remediation.push(\n \"Extension command definitions using legacy handler were auto-remapped. \" +\n \"Update command definitions to use run: (context) => ... for forward compatibility.\",\n );\n }\n if (updateHealthPartial) {\n remediation.push(\n \"Update-check coverage is partial because unmanaged extensions need adoption. Adopt existing installs via pm extension --manage --project/--global --fix-managed-state, pm extension --adopt-all --project/--global, or pm extension --adopt <name>.\",\n );\n } else if (unmanagedLoadedExtensions.length > 0) {\n remediation.push(\n \"Loaded unmanaged extensions are currently treated as informational. Use pm extension --manage --project/--global --fix-managed-state to adopt them for update checks.\",\n );\n }\n if (remediation.length === 0) {\n remediation.push(\"No immediate action required. Re-run pm health after extension configuration changes.\");\n }\n return {\n status: normalizedWarnings.length === 0 ? \"ok\" : \"warn\",\n warning_count: normalizedWarnings.length,\n warning_codes: warningCodes,\n load_failure_count: loadFailureCount,\n activation_failure_count: activationFailureCount,\n migration_failed_count: migrationStatus.failed_count,\n migration_pending_count: migrationStatus.pending_count,\n managed_state_warning_count: managedStateWarningCount,\n managed_extension_entries_count: managedExtensionEntriesCount,\n unmanaged_loaded_extension_count: unmanagedLoadedExtensions.length,\n unmanaged_loaded_extensions: unmanagedLoadedExtensions,\n unmanaged_expected_extension_count: unmanagedExpectedExtensions.length,\n unmanaged_expected_extensions: unmanagedExpectedExtensions,\n unmanaged_action_required_extension_count: unmanagedActionRequiredExtensions.length,\n unmanaged_action_required_extensions: unmanagedActionRequiredExtensions,\n update_health_coverage: updateHealthCoverage,\n update_health_partial: updateHealthPartial,\n unknown_capability_count: unknownCapabilityCount,\n top_warnings: normalizedWarnings.slice(0, 8),\n remediation,\n };\n}\n\nasync function buildExtensionCheck(\n pmRoot: string,\n settings: PmSettings,\n noExtensionsFlag: boolean,\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const loadResult = await loadExtensions({\n pmRoot,\n settings,\n cwd: process.cwd(),\n noExtensions: noExtensionsFlag,\n });\n const loadedSummaries = loadResult.loaded.map((extension) => summarizeLoadedExtension(extension));\n const activationResult = await activateExtensions({\n ...loadResult,\n loaded: loadResult.loaded,\n });\n const [projectManagedState, globalManagedState] = await Promise.all([\n readManagedExtensionState(loadResult.roots.project),\n readManagedExtensionState(loadResult.roots.global),\n ]);\n const migrationStatus = summarizeMigrationStatuses(activationResult.registrations.migrations);\n const activationDetails = {\n failed: activationResult.failed,\n warnings: activationResult.warnings,\n hook_counts: activationResult.hook_counts,\n command_override_count: activationResult.command_override_count,\n command_handler_count: activationResult.command_handler_count,\n parser_override_count: activationResult.parser_override_count,\n preflight_override_count: activationResult.preflight_override_count,\n service_override_count: activationResult.service_override_count,\n renderer_override_count: activationResult.renderer_override_count,\n registration_counts: activationResult.registration_counts,\n registrations: activationResult.registrations,\n migration_status: migrationStatus.summary,\n managed_extensions: {\n project: {\n path: projectManagedState.path,\n count: projectManagedState.state.entries.length,\n entries: projectManagedState.state.entries,\n },\n global: {\n path: globalManagedState.path,\n count: globalManagedState.state.entries.length,\n entries: globalManagedState.state.entries,\n },\n },\n };\n /* c8 ignore start -- unmanaged/expected grouping matrices are exercised in doctor + extension integration suites */\n const managedProjectNames = new Set(\n projectManagedState.state.entries.map((entry) => normalizeExtensionNameForMatch(entry.name)),\n );\n const managedGlobalNames = new Set(globalManagedState.state.entries.map((entry) => normalizeExtensionNameForMatch(entry.name)));\n const unmanagedLoadedEntries = [\n ...new Map(\n loadResult.loaded\n .filter((entry) => {\n const managedNames = entry.layer === \"project\" ? managedProjectNames : managedGlobalNames;\n return !managedNames.has(normalizeExtensionNameForMatch(entry.name));\n })\n .map((entry) => [\n `${entry.layer}:${entry.name}`,\n {\n layer: entry.layer,\n name: entry.name,\n directory: entry.directory,\n },\n ]),\n ).values(),\n ].sort((left, right) => {\n const leftKey = `${left.layer}:${left.name}`;\n const rightKey = `${right.layer}:${right.name}`;\n return leftKey.localeCompare(rightKey);\n });\n const unmanagedLoadedExtensions = unmanagedLoadedEntries\n .map((entry) => `${entry.layer}:${entry.name}`)\n .sort((left, right) => left.localeCompare(right));\n const unmanagedExpectedExtensions = unmanagedLoadedEntries\n .filter((entry) => isExpectedUnmanagedExtension(entry.name, entry.directory))\n .map((entry) => `${entry.layer}:${entry.name}`)\n .sort((left, right) => left.localeCompare(right));\n const unmanagedActionRequiredExtensions = unmanagedLoadedEntries\n .filter((entry) => !isExpectedUnmanagedExtension(entry.name, entry.directory))\n .map((entry) => `${entry.layer}:${entry.name}`)\n .sort((left, right) => left.localeCompare(right));\n /* c8 ignore stop */\n const updateCoverageWarnings =\n unmanagedActionRequiredExtensions.length > 0\n ? [`extension_update_health_partial_coverage:skipped_unmanaged:${unmanagedActionRequiredExtensions.length}`]\n : [];\n const extensionWarnings = [\n ...loadResult.warnings,\n ...activationDetails.warnings,\n ...migrationStatus.warnings,\n ...projectManagedState.warnings,\n ...globalManagedState.warnings,\n ...updateCoverageWarnings,\n ];\n const capabilityGuidance = collectUnknownCapabilityGuidance(extensionWarnings);\n const capabilityContract = buildCapabilityContractMetadata();\n const extensionTriage = buildExtensionHealthTriageSummary(\n extensionWarnings,\n loadResult.failed.length,\n activationResult.failed.length,\n migrationStatus.summary,\n projectManagedState.warnings.length + globalManagedState.warnings.length,\n projectManagedState.state.entries.length + globalManagedState.state.entries.length,\n unmanagedLoadedExtensions,\n unmanagedExpectedExtensions,\n unmanagedActionRequiredExtensions,\n );\n\n return {\n check: {\n name: \"extensions\",\n status: extensionWarnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n ...loadResult,\n loaded: loadedSummaries,\n warnings: extensionWarnings,\n activation: activationDetails,\n triage: extensionTriage,\n capability_contract: capabilityContract,\n capability_guidance: capabilityGuidance,\n } as Record<string, unknown>,\n },\n warnings: extensionWarnings,\n };\n}\n\nfunction summarizeList(values: string[], limit: number): { values: string[]; truncated: boolean } {\n if (values.length <= limit) {\n return { values, truncated: false };\n }\n return {\n values: values.slice(0, limit),\n truncated: true,\n };\n}\n\nfunction summarizeRecordList(value: unknown, limit: number): { count: number; sample: unknown[]; truncated: boolean } {\n if (!Array.isArray(value)) {\n return {\n count: 0,\n sample: [],\n truncated: false,\n };\n }\n return {\n count: value.length,\n sample: value.slice(0, limit),\n truncated: value.length > limit,\n };\n}\n\nfunction summarizeExtensionRecord(value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return {};\n }\n const record = value as Record<string, unknown>;\n return {\n layer: record.layer,\n directory: record.directory,\n name: record.name,\n version: record.version,\n enabled: record.enabled,\n status: record.status,\n has_activate: record.has_activate,\n capabilities: record.capabilities,\n };\n}\n\nfunction summarizeExtensionList(value: unknown, limit: number): { count: number; sample: unknown[]; truncated: boolean } {\n const summary = summarizeRecordList(value, limit);\n return {\n ...summary,\n sample: summary.sample.map((entry) => summarizeExtensionRecord(entry)),\n };\n}\n\nfunction summarizeStringList(value: unknown, limit: number): { count: number; sample: string[]; truncated: boolean } {\n if (!Array.isArray(value)) {\n return {\n count: 0,\n sample: [],\n truncated: false,\n };\n }\n const strings = value.filter((entry): entry is string => typeof entry === \"string\");\n return {\n count: strings.length,\n sample: strings.slice(0, limit),\n truncated: strings.length > limit,\n };\n}\n\n/* c8 ignore start -- brief/summary projection matrix branches are validated in projection integration tests */\nfunction summarizeHealthCheckDetails(check: HealthCheck, limit: number): Record<string, unknown> {\n const details = check.details;\n if (check.name === \"settings\") {\n return {\n version: details.version,\n id_prefix: details.id_prefix,\n locks_ttl_seconds: details.locks_ttl_seconds,\n warnings: summarizeStringList(details.warnings, limit),\n };\n }\n if (check.name === \"directories\") {\n return {\n required_count: Array.isArray(details.required) ? details.required.length : 0,\n optional_count: Array.isArray(details.optional) ? details.optional.length : 0,\n missing_required: summarizeStringList(details.missing_required, limit),\n missing_optional: summarizeStringList(details.missing_optional, limit),\n missing: summarizeStringList(details.missing, limit),\n strict_directories: details.strict_directories,\n };\n }\n if (check.name === \"settings_values\") {\n return {\n warnings: summarizeStringList(details.warnings, limit),\n };\n }\n if (check.name === \"telemetry\") {\n return {\n enabled: details.enabled,\n capture_level: details.capture_level,\n endpoint: details.endpoint,\n queue_exists: details.queue_exists,\n queue_entries: details.queue_entries,\n queue_draining: details.queue_draining,\n queue_invalid_rows: details.queue_invalid_rows,\n queue_rows_total: details.queue_rows_total,\n last_successful_flush_at: details.last_successful_flush_at,\n last_failed_flush_at: details.last_failed_flush_at,\n endpoint_probe: details.endpoint_probe,\n env_overrides: details.env_overrides,\n };\n }\n if (check.name === \"extensions\") {\n const activation = typeof details.activation === \"object\" && details.activation !== null ? (details.activation as Record<string, unknown>) : {};\n return {\n disabled_by_flag: details.disabled_by_flag,\n discovered: summarizeExtensionList(details.discovered, limit),\n effective: summarizeExtensionList(details.effective, limit),\n loaded: summarizeExtensionList(details.loaded, limit),\n failed: summarizeRecordList(details.failed, limit),\n warnings: summarizeStringList(details.warnings, limit),\n activation: {\n failed: summarizeRecordList(activation.failed, limit),\n warnings: summarizeStringList(activation.warnings, limit),\n hook_counts: activation.hook_counts,\n command_handler_count: activation.command_handler_count,\n service_override_count: activation.service_override_count,\n renderer_override_count: activation.renderer_override_count,\n registration_counts: activation.registration_counts,\n migration_status:\n typeof activation.migration_status === \"object\" && activation.migration_status !== null\n ? {\n applied_count: (activation.migration_status as Record<string, unknown>).applied_count,\n pending_count: (activation.migration_status as Record<string, unknown>).pending_count,\n failed_count: (activation.migration_status as Record<string, unknown>).failed_count,\n }\n : null,\n },\n triage: details.triage,\n capability_contract: details.capability_contract,\n capability_guidance: summarizeRecordList(details.capability_guidance, limit),\n };\n }\n if (check.name === \"storage\") {\n return details;\n }\n if (check.name === \"locks\") {\n // Counts only: drops remediation_map, which is full-output-only by contract.\n return {\n active_lock_count: details.active_lock_count,\n stale_lock_count: details.stale_lock_count,\n unreadable_lock_count: details.unreadable_lock_count,\n unparseable_lock_count: details.unparseable_lock_count,\n };\n }\n if (check.name === \"integrity\") {\n return {\n checked_item_files: details.checked_item_files,\n checked_history_streams: details.checked_history_streams,\n counts: details.counts,\n item_unreadable: summarizeStringList(details.item_unreadable, limit),\n item_conflict_markers: summarizeRecordList(details.item_conflict_markers, limit),\n item_parse_failures: summarizeStringList(details.item_parse_failures, limit),\n history_unreadable: summarizeStringList(details.history_unreadable, limit),\n history_conflict_markers: summarizeRecordList(details.history_conflict_markers, limit),\n history_invalid_json: summarizeRecordList(details.history_invalid_json, limit),\n skipped: details.skipped,\n };\n }\n if (check.name === \"history_drift\") {\n return {\n checked_items: details.checked_items,\n counts: details.counts,\n drifted_items: summarizeStringList(details.drifted_items, limit),\n missing_streams: summarizeStringList(details.missing_streams, limit),\n unreadable_streams: summarizeStringList(details.unreadable_streams, limit),\n hash_mismatches: summarizeStringList(details.hash_mismatches, limit),\n chain_mismatches: summarizeStringList(details.chain_mismatches, limit),\n skipped: details.skipped,\n };\n }\n if (check.name === \"vectorization\") {\n return {\n semantic_runtime_available: details.semantic_runtime_available,\n compatibility_mode_auto_defaults: details.compatibility_mode_auto_defaults,\n auto_ollama_defaults_applied: details.auto_ollama_defaults_applied,\n refresh_policy: details.refresh_policy,\n provider_active: details.provider_active,\n vector_store_active: details.vector_store_active,\n items: details.items,\n ledger_entries_before: details.ledger_entries_before,\n stale_items_before_total: details.stale_items_before_total,\n stale_items_before: summarizeStringList(details.stale_items_before, limit),\n refresh_attempted: details.refresh_attempted,\n refresh_skipped_reason: details.refresh_skipped_reason,\n refresh_result: details.refresh_result,\n ledger_entries_after: details.ledger_entries_after,\n stale_items_after_total: details.stale_items_after_total,\n stale_items_after: summarizeStringList(details.stale_items_after, limit),\n skipped: details.skipped,\n };\n }\n return details;\n}\n/* c8 ignore stop */\n\nfunction applyBriefHealthProjection(result: HealthResult): HealthResult {\n const warningsSummary = summarizeStringList(result.warnings, BRIEF_HEALTH_DETAIL_LIMIT);\n return {\n ok: result.ok,\n checks: result.checks.map((check) => ({\n name: check.name,\n status: check.status,\n details: summarizeHealthCheckDetails(check, BRIEF_HEALTH_DETAIL_LIMIT),\n })),\n warnings: warningsSummary.sample,\n projection: {\n mode: \"brief\",\n warning_count: warningsSummary.count,\n warnings_truncated: warningsSummary.truncated,\n detail_limit: BRIEF_HEALTH_DETAIL_LIMIT,\n },\n generated_at: result.generated_at,\n };\n}\n\nfunction isSkippedHealthCheck(check: HealthCheck): boolean {\n return check.details.skipped === true;\n}\n\nfunction applySummaryHealthProjection(result: HealthResult): HealthResult {\n const warningsSummary = summarizeStringList(result.warnings, BRIEF_HEALTH_DETAIL_LIMIT);\n const omittedChecks = result.checks.filter(isSkippedHealthCheck).map((check) => check.name);\n return {\n ok: result.ok,\n checks: result.checks\n .filter((check) => !isSkippedHealthCheck(check))\n .map((check) => ({\n name: check.name,\n status: check.status,\n details: {},\n })),\n warning_count: warningsSummary.count,\n warnings: warningsSummary.sample,\n projection: {\n mode: \"summary\",\n warning_count: warningsSummary.count,\n warnings_truncated: warningsSummary.truncated,\n detail_limit: BRIEF_HEALTH_DETAIL_LIMIT,\n omitted_checks: omittedChecks,\n },\n generated_at: result.generated_at,\n };\n}\n\nfunction selectStaleItemDetail(\n values: string[],\n verboseStaleItems: boolean,\n): {\n values: string[];\n truncated: boolean;\n total: number;\n} {\n if (verboseStaleItems) {\n return {\n values,\n truncated: false,\n total: values.length,\n };\n }\n const summary = summarizeList(values, STALE_VECTORIZATION_SUMMARY_LIMIT);\n return {\n values: summary.values,\n truncated: summary.truncated,\n total: values.length,\n };\n}\n\ninterface TelemetryRuntimeStateRecord {\n endpoint?: string;\n queue_entries?: number;\n last_attempted_flush_at?: string;\n last_successful_flush_at?: string;\n last_failed_flush_at?: string;\n last_failed_flush_error?: string;\n pending_otel_spans?: number;\n last_otel_attempt_at?: string;\n last_otel_success_at?: string;\n last_otel_failure_at?: string;\n last_otel_failure_error?: string;\n}\n\nfunction telemetryEnvFlagEnabled(\n envKey: \"PM_TELEMETRY_DISABLED\" | \"PM_TELEMETRY_OTEL_DISABLED\" | \"PM_NO_TELEMETRY\" | \"PM_TELEMETRY_INLINE_FLUSH\",\n): boolean {\n const value = (process.env[envKey] ?? \"\").trim().toLowerCase();\n return value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\n\n/* c8 ignore start -- environment override permutations are covered by runtime integration tests */\nfunction telemetrySourceContextOverride(): string | null {\n // Only report an override the runtime actually honours: runtime.ts ignores any\n // value outside the enum and falls back to the inferred context, so health must\n // report null for an unrecognized value rather than implying it took effect.\n const value = (process.env.PM_TELEMETRY_SOURCE_CONTEXT ?? \"\").trim().toLowerCase();\n return PM_TELEMETRY_SOURCE_CONTEXT_SET.has(value) ? value : null;\n}\n/* c8 ignore stop */\n\nfunction normalizeEndpointForDisplay(rawEndpoint: string): string {\n const trimmed = rawEndpoint.trim();\n if (trimmed.length === 0) {\n return \"\";\n }\n try {\n const parsed = new URL(trimmed);\n parsed.username = \"\";\n parsed.password = \"\";\n parsed.search = \"\";\n parsed.hash = \"\";\n return parsed.toString();\n } catch {\n return trimmed;\n }\n}\n\nfunction parseTelemetryQueue(raw: string): {\n validEntries: number;\n invalidRows: number;\n totalRows: number;\n highRetryEntries: number;\n maxAttempts: number;\n} {\n let validEntries = 0;\n let invalidRows = 0;\n let totalRows = 0;\n let highRetryEntries = 0;\n let maxAttempts = 0;\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n totalRows += 1;\n try {\n const parsed = JSON.parse(trimmed) as Record<string, unknown>;\n if (\n typeof parsed === \"object\" &&\n parsed !== null &&\n typeof parsed.attempts === \"number\" &&\n Number.isFinite(parsed.attempts)\n ) {\n const attempts = Math.max(0, Math.trunc(parsed.attempts));\n validEntries += 1;\n maxAttempts = Math.max(maxAttempts, attempts);\n if (attempts >= TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD) {\n highRetryEntries += 1;\n }\n } else {\n /* c8 ignore next -- invalid queue rows are covered by end-to-end telemetry fixtures */\n invalidRows += 1;\n }\n } catch {\n invalidRows += 1;\n }\n }\n return {\n validEntries,\n invalidRows,\n totalRows,\n highRetryEntries,\n maxAttempts,\n };\n}\n\nasync function probeTelemetryEndpointHealth(endpoint: string): Promise<{\n probe_url: string;\n ok: boolean;\n status?: number;\n max_schema_version?: string;\n error?: string;\n}> {\n let probeUrl = endpoint;\n try {\n const parsed = new URL(endpoint);\n parsed.pathname = \"/healthz\";\n parsed.search = \"\";\n parsed.hash = \"\";\n probeUrl = parsed.toString();\n } catch {\n // keep original endpoint when URL parsing fails\n }\n try {\n const response = await fetch(probeUrl, {\n method: \"GET\",\n signal: AbortSignal.timeout(TELEMETRY_ENDPOINT_PROBE_TIMEOUT_MS),\n });\n return {\n probe_url: normalizeEndpointForDisplay(probeUrl),\n ok: response.ok,\n status: response.status,\n max_schema_version: (() => {\n for (const headerName of TELEMETRY_SERVER_MAX_SCHEMA_VERSION_HEADERS) {\n const value = response.headers.get(headerName)?.trim();\n if (value && value.length > 0) {\n return value;\n }\n }\n return undefined;\n })(),\n };\n } catch (error: unknown) {\n return {\n probe_url: normalizeEndpointForDisplay(probeUrl),\n ok: false,\n /* c8 ignore next -- non-Error throwables require transport-layer fault injection */\n error: error instanceof Error ? error.message : \"probe_failed\",\n };\n }\n}\n\nasync function buildTelemetryCheck(\n settings: PmSettings,\n options: { checkTelemetry: boolean },\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);\n const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);\n\n const queueRaw = await readFileIfExists(queuePath);\n const queueExists = queueRaw !== null;\n const queueSizeBytes = queueRaw ? Buffer.byteLength(queueRaw, \"utf8\") : 0;\n const queueSummary = queueRaw\n ? parseTelemetryQueue(queueRaw)\n : { validEntries: 0, invalidRows: 0, totalRows: 0, highRetryEntries: 0, maxAttempts: 0 };\n\n const stateRaw = await readFileIfExists(statePath);\n let runtimeState: TelemetryRuntimeStateRecord = {};\n let stateParseFailed = false;\n /* c8 ignore start -- telemetry state corruption and otel-failure branches require runtime-coordinated fixture mutation */\n if (stateRaw && stateRaw.trim().length > 0) {\n try {\n const parsed = JSON.parse(stateRaw) as TelemetryRuntimeStateRecord;\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n runtimeState = parsed;\n } else {\n /* c8 ignore next -- malformed runtime-state payloads are integration-only corruption cases */\n stateParseFailed = true;\n }\n } catch {\n stateParseFailed = true;\n }\n }\n\n const endpoint = settings.telemetry.endpoint.trim();\n const endpointDisplay = normalizeEndpointForDisplay(endpoint);\n let endpointProbe:\n | {\n attempted: boolean;\n probe_url: string;\n ok: boolean;\n status?: number;\n max_schema_version?: string;\n error?: string;\n }\n | undefined;\n if (options.checkTelemetry && settings.telemetry.enabled && endpoint.length > 0) {\n const probe = await probeTelemetryEndpointHealth(endpoint);\n endpointProbe = {\n attempted: true,\n ...probe,\n };\n }\n\n const warnings: string[] = [];\n if (stateParseFailed) {\n warnings.push(\"telemetry_state_invalid_json\");\n }\n if (queueSummary.invalidRows > 0) {\n warnings.push(`telemetry_queue_invalid_rows:${queueSummary.invalidRows}`);\n }\n const queueHasEntries = settings.telemetry.enabled && queueSummary.validEntries > 0;\n if (queueHasEntries) {\n const lastSuccess = runtimeState.last_successful_flush_at;\n const lastFailure = runtimeState.last_failed_flush_at;\n const activeFailure = lastFailure && (!lastSuccess || lastFailure > lastSuccess);\n const neverFlushed = !lastSuccess;\n const highWater = queueSummary.validEntries >= TELEMETRY_QUEUE_HIGH_WATER_MARK;\n const highRetries = queueSummary.highRetryEntries > 0;\n if (activeFailure || neverFlushed || highWater) {\n warnings.push(`telemetry_queue_pending:${queueSummary.validEntries}`);\n }\n if (highRetries) {\n warnings.push(`telemetry_queue_high_retries:${queueSummary.highRetryEntries}`);\n }\n }\n if (endpointProbe && !endpointProbe.ok) {\n if (typeof endpointProbe.status === \"number\") {\n warnings.push(`telemetry_endpoint_probe_http_status:${endpointProbe.status}`);\n } else {\n warnings.push(\"telemetry_endpoint_probe_failed\");\n }\n }\n const parsedMaxSchemaVersion = Number.parseInt(endpointProbe?.max_schema_version ?? \"\", 10);\n if (\n endpointProbe &&\n endpointProbe.ok &&\n Number.isInteger(parsedMaxSchemaVersion) &&\n parsedMaxSchemaVersion > TELEMETRY_SCHEMA_VERSION\n ) {\n warnings.push(`telemetry_schema_version_behind:${parsedMaxSchemaVersion}`);\n }\n const pendingOtelSpans = typeof runtimeState.pending_otel_spans === \"number\" ? runtimeState.pending_otel_spans : 0;\n const lastOtelSuccess = runtimeState.last_otel_success_at;\n const lastOtelFailure = runtimeState.last_otel_failure_at;\n const otelExportFailing =\n settings.telemetry.enabled &&\n pendingOtelSpans > 0 &&\n Boolean(lastOtelFailure) &&\n // >= so a mixed-outcome batch (success + failure share the same attempt\n // timestamp) still surfaces the warning rather than being masked by the tie.\n (!lastOtelSuccess || (lastOtelFailure as string) >= lastOtelSuccess);\n if (otelExportFailing) {\n warnings.push(`telemetry_otel_export_failing:${pendingOtelSpans}`);\n }\n /* c8 ignore stop */\n\n return {\n check: {\n name: \"telemetry\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n enabled: settings.telemetry.enabled,\n capture_level: settings.telemetry.capture_level,\n endpoint: endpointDisplay,\n global_pm_root: globalPmRoot,\n queue_path: queuePath,\n queue_exists: queueExists,\n queue_entries: queueSummary.validEntries,\n queue_draining:\n queueHasEntries &&\n warnings.every(\n (warning) =>\n !warning.startsWith(\"telemetry_queue_pending:\") && !warning.startsWith(\"telemetry_queue_high_retries:\"),\n ),\n queue_invalid_rows: queueSummary.invalidRows,\n queue_rows_total: queueSummary.totalRows,\n queue_size_bytes: queueSizeBytes,\n queue_high_retry_entries: queueSummary.highRetryEntries,\n queue_high_retry_threshold: TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD,\n queue_max_attempts: queueSummary.maxAttempts,\n runtime_state_path: statePath,\n last_attempted_flush_at: runtimeState.last_attempted_flush_at ?? null,\n last_successful_flush_at: runtimeState.last_successful_flush_at ?? null,\n last_failed_flush_at: runtimeState.last_failed_flush_at ?? null,\n last_failed_flush_error: runtimeState.last_failed_flush_error ?? null,\n pending_otel_spans: pendingOtelSpans,\n last_otel_attempt_at: runtimeState.last_otel_attempt_at ?? null,\n last_otel_success_at: runtimeState.last_otel_success_at ?? null,\n last_otel_failure_at: runtimeState.last_otel_failure_at ?? null,\n last_otel_failure_error: runtimeState.last_otel_failure_error ?? null,\n endpoint_probe: endpointProbe ?? {\n attempted: false,\n },\n /* c8 ignore start -- env-override combinations are validated through runtime integration suites */\n env_overrides: {\n telemetry_disabled: telemetryEnvFlagEnabled(\"PM_TELEMETRY_DISABLED\") || telemetryEnvFlagEnabled(\"PM_NO_TELEMETRY\"),\n pm_no_telemetry: telemetryEnvFlagEnabled(\"PM_NO_TELEMETRY\"),\n telemetry_otel_disabled: telemetryEnvFlagEnabled(\"PM_TELEMETRY_OTEL_DISABLED\"),\n telemetry_inline_flush: telemetryEnvFlagEnabled(\"PM_TELEMETRY_INLINE_FLUSH\"),\n telemetry_source_context: telemetrySourceContextOverride(),\n },\n /* c8 ignore stop */\n },\n },\n warnings,\n };\n}\n\n/**\n * Read-only locks check (pm-xo1n): surfaces active/stale/unreadable/unparseable\n * lock counts using the exact classification `pm gc --scope locks` acts on, so\n * agents can gate on stale item-claim locks before running gc speculatively.\n */\nasync function buildLocksCheck(pmRoot: string): Promise<{ check: HealthCheck; warnings: string[] }> {\n /* c8 ignore start -- scan failure branches require filesystem-level fault injection */\n let scan: Awaited<ReturnType<typeof scanLockHealth>>;\n try {\n scan = await scanLockHealth(pmRoot);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n check: {\n name: \"locks\",\n status: \"warn\",\n details: {\n active_lock_count: 0,\n stale_lock_count: 0,\n unreadable_lock_count: 0,\n unparseable_lock_count: 0,\n scan_failed: true,\n error: message,\n pm_root: pmRoot,\n },\n },\n warnings: [`locks_scan_failed:${message}`],\n };\n }\n const warnings: string[] = [];\n if (scan.stale_lock_count > 0) {\n warnings.push(`locks_stale_count:${scan.stale_lock_count}`);\n }\n if (scan.unreadable_lock_count > 0) {\n warnings.push(`locks_unreadable:${scan.unreadable_lock_count}`);\n }\n /* c8 ignore stop */\n return {\n check: {\n name: \"locks\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n active_lock_count: scan.active_lock_count,\n stale_lock_count: scan.stale_lock_count,\n unreadable_lock_count: scan.unreadable_lock_count,\n unparseable_lock_count: scan.unparseable_lock_count,\n },\n },\n warnings,\n };\n}\n\nasync function buildHistoryDriftCheck(\n pmRoot: string,\n items: ItemWithBody[],\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const cacheHitVerification = \"metadata\" as const;\n const { missingStreams, unreadableStreams, hashMismatches, chainMismatches, driftedItems } = await scanHistoryDrift(\n pmRoot,\n items,\n { cacheHitVerification },\n );\n const warnings = [\n ...missingStreams.map((id) => `history_drift_missing_stream:${id}`),\n ...unreadableStreams.map((id) => `history_drift_unreadable_stream:${id}`),\n ...hashMismatches.map((id) => `history_drift_hash_mismatch:${id}`),\n ...chainMismatches.map((id) => `history_drift_chain_mismatch:${id}`),\n ];\n return {\n check: {\n name: \"history_drift\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n checked_items: items.length,\n cache_hit_verification: cacheHitVerification,\n drifted_items: driftedItems,\n counts: {\n drifted: driftedItems.length,\n missing_streams: missingStreams.length,\n unreadable_streams: unreadableStreams.length,\n hash_mismatches: hashMismatches.length,\n chain_mismatches: chainMismatches.length,\n },\n missing_streams: missingStreams,\n unreadable_streams: unreadableStreams,\n hash_mismatches: hashMismatches,\n chain_mismatches: chainMismatches,\n },\n },\n warnings,\n };\n}\n\nasync function buildVectorizationCheck(\n pmRoot: string,\n settings: PmSettings,\n items: ItemWithBody[],\n refreshPolicy: {\n enabled: boolean;\n checkOnly: boolean;\n noRefresh: boolean;\n refreshVectors: boolean;\n },\n verboseStaleItems: boolean,\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const runtimeDefaults = resolveSettingsWithSemanticRuntimeDefaults(settings);\n const providerResolution = resolveEmbeddingProviders(runtimeDefaults.settings);\n const vectorStoreResolution = resolveVectorStores(runtimeDefaults.settings);\n const runtimeEmbeddingIdentity = providerResolution.active\n ? buildVectorizationEmbeddingIdentity(providerResolution.active.name, providerResolution.active.model)\n : null;\n const semanticRuntimeAvailable = Boolean(providerResolution.active && vectorStoreResolution.active);\n const ledgerBefore = await readVectorizationStatusLedger(pmRoot);\n const staleBefore = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerBefore.entries) : [];\n let refreshResult: Awaited<ReturnType<typeof refreshSemanticEmbeddingsForMutatedItems>> = {\n refreshed: [],\n skipped: [],\n warnings: [],\n };\n if (refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0) {\n refreshResult = await refreshSemanticEmbeddingsForMutatedItems(pmRoot, staleBefore, {\n settings: runtimeDefaults.settings,\n apply_runtime_defaults: false,\n });\n }\n const ledgerAfter = await readVectorizationStatusLedger(pmRoot);\n const staleAfter = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerAfter.entries) : [];\n const strictVectorizationWarnings = !runtimeDefaults.auto_ollama_defaults_applied;\n const embeddingIdentityChanged =\n strictVectorizationWarnings &&\n semanticRuntimeAvailable &&\n Boolean(\n ledgerBefore.embedding &&\n runtimeEmbeddingIdentity &&\n hasVectorizationEmbeddingIdentityChanged(ledgerBefore.embedding, runtimeEmbeddingIdentity),\n );\n /* c8 ignore start -- strict-vectorization warning synthesis branches are integration-only policy permutations */\n const warningSet = new Set<string>([...ledgerBefore.warnings, ...ledgerAfter.warnings]);\n if (strictVectorizationWarnings) {\n for (const warning of refreshResult.warnings) {\n warningSet.add(warning);\n }\n }\n if (embeddingIdentityChanged) {\n warningSet.add(\"vectorization_embedding_identity_changed\");\n }\n if (strictVectorizationWarnings && semanticRuntimeAvailable && staleAfter.length > 0) {\n warningSet.add(`vectorization_stale_items_remaining:${staleAfter.length}`);\n }\n const warnings = [...warningSet].sort((left, right) => left.localeCompare(right));\n const staleBeforeDetail = selectStaleItemDetail(staleBefore, verboseStaleItems);\n const staleAfterDetail = selectStaleItemDetail(staleAfter, verboseStaleItems);\n\n return {\n check: {\n name: \"vectorization\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n semantic_runtime_available: semanticRuntimeAvailable,\n compatibility_mode_auto_defaults: runtimeDefaults.auto_ollama_defaults_applied,\n auto_ollama_defaults_applied: runtimeDefaults.auto_ollama_defaults_applied,\n refresh_policy: {\n enabled: refreshPolicy.enabled,\n check_only: refreshPolicy.checkOnly,\n no_refresh: refreshPolicy.noRefresh,\n refresh_vectors: refreshPolicy.refreshVectors,\n },\n provider_active: providerResolution.active?.name ?? null,\n // GH-244: surface the persisted (possibly empty) configured value and\n // how the active resolution was sourced, so a config audit can tell\n // \"auto-detected\" apart from a genuine misconfiguration when\n // settings.search.provider / vector_store.adapter are empty strings.\n provider_configured: typeof settings.search?.provider === \"string\" ? settings.search.provider : null,\n provider_source: resolveProviderConfigSource(\n providerResolution.active?.name ?? null,\n settings.search?.provider ?? null,\n ),\n vector_store_active: vectorStoreResolution.active?.name ?? null,\n vector_store_configured: typeof settings.vector_store?.adapter === \"string\" ? settings.vector_store.adapter : null,\n vector_store_source: resolveProviderConfigSource(\n vectorStoreResolution.active?.name ?? null,\n settings.vector_store?.adapter ?? null,\n ),\n embedding_identity_changed: embeddingIdentityChanged,\n embedding_identity_before: ledgerBefore.embedding ?? null,\n embedding_identity_runtime: runtimeEmbeddingIdentity ?? null,\n items: items.length,\n ledger_entries_before: Object.keys(ledgerBefore.entries).length,\n stale_items_detail_mode: verboseStaleItems ? \"full\" : \"summary\",\n stale_items_summary_limit: STALE_VECTORIZATION_SUMMARY_LIMIT,\n stale_items_before_total: staleBeforeDetail.total,\n stale_items_before: staleBeforeDetail.values,\n stale_items_before_truncated: staleBeforeDetail.truncated,\n refresh_attempted: refreshPolicy.enabled && staleBefore.length > 0 && semanticRuntimeAvailable,\n refresh_skipped_reason:\n refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0\n ? null\n : !refreshPolicy.enabled\n ? \"refresh_disabled\"\n : !semanticRuntimeAvailable\n ? \"semantic_runtime_unavailable\"\n : \"no_stale_items\",\n refresh_result: refreshResult,\n ledger_entries_after: Object.keys(ledgerAfter.entries).length,\n stale_items_after_total: staleAfterDetail.total,\n stale_items_after: staleAfterDetail.values,\n stale_items_after_truncated: staleAfterDetail.truncated,\n },\n },\n warnings,\n };\n /* c8 ignore stop */\n}\n\nfunction validateSettingsValues(settings: PmSettings): string[] {\n const warnings: string[] = [];\n if (settings.id_prefix.trim().length === 0) {\n warnings.push(\"settings:id_prefix_empty\");\n }\n if (settings.locks.ttl_seconds <= 0) {\n warnings.push(\"settings:locks_ttl_non_positive\");\n }\n return warnings;\n}\n\nfunction resolveVectorRefreshPolicy(options: RunHealthOptions): {\n enabled: boolean;\n checkOnly: boolean;\n noRefresh: boolean;\n refreshVectors: boolean;\n} {\n const checkOnly = options.checkOnly === true;\n const noRefresh = options.noRefresh === true || checkOnly;\n const refreshVectors = options.refreshVectors === true;\n if (refreshVectors && checkOnly) {\n throw new PmCliError(\"--check-only cannot be combined with --refresh-vectors\", EXIT_CODE.USAGE);\n }\n if (refreshVectors && options.noRefresh === true) {\n throw new PmCliError(\"--no-refresh cannot be combined with --refresh-vectors\", EXIT_CODE.USAGE);\n }\n return {\n enabled: refreshVectors || !noRefresh,\n checkOnly,\n noRefresh,\n refreshVectors,\n };\n}\n\n/**\n * Implements run health for the public runtime surface of this module.\n */\nexport async function runHealth(global: GlobalOptions, options: RunHealthOptions = {}): Promise<HealthResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n const settingsPath = getSettingsPath(pmRoot);\n if (!(await pathExists(settingsPath))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const { settings, warnings: settingsReadWarnings } = await readSettingsWithMetadata(pmRoot);\n const normalizedSettingsReadWarnings = [...new Set(settingsReadWarnings)];\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const strictDirectories = options.strictDirectories === true;\n const refreshPolicy = resolveVectorRefreshPolicy(options);\n const optionalBuiltinDirs = new Set<string>(PM_OPTIONAL_TYPE_SUBDIRS.filter((entry) => entry.length > 0));\n const requiredDirSet = new Set<string>(PM_CORE_REQUIRED_SUBDIRS.filter((entry) => entry.length > 0));\n const optionalDirSet = new Set<string>();\n for (const folder of typeRegistry.folders) {\n if (optionalBuiltinDirs.has(folder)) {\n optionalDirSet.add(folder);\n continue;\n }\n requiredDirSet.add(folder);\n }\n const requiredDirs = [...requiredDirSet].sort((left, right) => left.localeCompare(right));\n const optionalDirs = [...optionalDirSet].sort((left, right) => left.localeCompare(right));\n const missingRequiredDirs: string[] = [];\n const missingOptionalDirs: string[] = [];\n const hookWarnings: string[] = [];\n for (const relativeDir of [...requiredDirs, ...optionalDirs]) {\n const directoryPath = path.join(pmRoot, relativeDir);\n hookWarnings.push(\n ...(await runActiveOnReadHooks({\n path: directoryPath,\n scope: \"project\",\n })),\n );\n if (!(await isDirectory(directoryPath))) {\n if (optionalDirSet.has(relativeDir)) {\n missingOptionalDirs.push(relativeDir);\n } else {\n missingRequiredDirs.push(relativeDir);\n }\n }\n }\n const missingDirs = strictDirectories ? [...missingRequiredDirs, ...missingOptionalDirs] : [...missingRequiredDirs];\n\n const settingWarnings = validateSettingsValues(settings);\n const telemetryCheck = await buildTelemetryCheck(settings, {\n checkTelemetry: options.checkTelemetry === true,\n });\n const extensionCheck = await buildExtensionCheck(pmRoot, settings, Boolean(global.noExtensions));\n const summaryMode = options.summary === true && options.full !== true;\n const fastProjectionCheckOnly =\n options.checkOnly === true && (options.brief === true || options.summary === true) && options.full !== true;\n const skipIntegrity = (options.skipIntegrity === true || fastProjectionCheckOnly) && options.full !== true;\n const skipDrift = (options.skipDrift === true || fastProjectionCheckOnly) && options.full !== true;\n const skipVectors = (options.skipVectors === true || fastProjectionCheckOnly) && options.full !== true;\n const itemReadWarnings: string[] = [];\n const items = skipDrift && skipVectors\n ? await listAllFrontMatter(pmRoot, settings.item_format, typeRegistry.type_to_folder, itemReadWarnings, settings.schema)\n : await listAllFrontMatterWithBody(\n pmRoot,\n settings.item_format,\n typeRegistry.type_to_folder,\n itemReadWarnings,\n settings.schema,\n );\n const itemsWithBody = items as Array<ItemMetadata & { body: string }>;\n const normalizedItemReadWarnings = [...new Set(itemReadWarnings)];\n const historyPolicy = skipDrift\n ? { warnings: [] }\n : await enforceHistoryStreamPolicyForItems({\n pmRoot,\n settings,\n itemIds: items.map((item) => item.id),\n commandLabel: \"health\",\n });\n const historySummary = await countHistoryStreams(pmRoot, settings.history.compact_policy);\n const locksCheck = await buildLocksCheck(pmRoot);\n const integrityCheck = skipIntegrity\n ? { check: { name: \"integrity\" as const, status: \"ok\" as const, details: { skipped: true } }, warnings: [] }\n : await buildIntegrityCheck(pmRoot, typeRegistry.type_to_folder, settings.schema);\n const historyDriftCheck = skipDrift\n ? { check: { name: \"history_drift\" as const, status: \"ok\" as const, details: { skipped: true } }, warnings: [] }\n : await buildHistoryDriftCheck(pmRoot, itemsWithBody);\n const vectorizationCheck = skipVectors\n ? { check: { name: \"vectorization\" as const, status: \"ok\" as const, details: { skipped: true } }, warnings: [] }\n : await buildVectorizationCheck(pmRoot, settings, itemsWithBody, refreshPolicy, options.verboseStaleItems === true);\n\n const checks: HealthCheck[] = [\n {\n name: \"settings\",\n /* c8 ignore next -- settings read-warning status split is covered in broader read-settings integration tests */\n status: normalizedSettingsReadWarnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n path: settingsPath,\n version: settings.version,\n id_prefix: settings.id_prefix,\n locks_ttl_seconds: settings.locks.ttl_seconds,\n warnings: normalizedSettingsReadWarnings,\n },\n },\n {\n name: \"directories\",\n status: missingDirs.length === 0 ? \"ok\" : \"warn\",\n details: {\n required: requiredDirs,\n optional: optionalDirs,\n missing_required: missingRequiredDirs,\n missing_optional: missingOptionalDirs,\n missing: missingDirs,\n strict_directories: strictDirectories,\n },\n },\n {\n name: \"settings_values\",\n status: settingWarnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n warnings: settingWarnings,\n },\n },\n telemetryCheck.check,\n extensionCheck.check,\n {\n name: \"storage\",\n status: historySummary.over_threshold.length === 0 ? \"ok\" : \"warn\",\n details: {\n items: items.length,\n history_streams: historySummary.count,\n ...(historySummary.max_entries !== null\n ? {\n compact_policy: {\n enabled: settings.history.compact_policy.enabled,\n max_entries: historySummary.max_entries,\n trigger: settings.history.compact_policy.trigger,\n over_threshold_count: historySummary.over_threshold.length,\n over_threshold: historySummary.over_threshold,\n },\n }\n : {}),\n },\n },\n locksCheck.check,\n integrityCheck.check,\n historyDriftCheck.check,\n vectorizationCheck.check,\n ];\n\n const warnings = [\n ...missingDirs.map((dir) => `missing_directory:${dir}`),\n ...normalizedSettingsReadWarnings,\n ...settingWarnings,\n ...normalizedItemReadWarnings,\n ...telemetryCheck.warnings,\n ...extensionCheck.warnings,\n ...historyPolicy.warnings,\n ...historySummary.warnings,\n ...locksCheck.warnings,\n ...integrityCheck.warnings,\n ...historyDriftCheck.warnings,\n ...vectorizationCheck.warnings,\n ...hookWarnings,\n ];\n const normalizedWarnings = [...new Set(warnings)];\n // Attach a machine-executable remediation_map (warning-code-prefix -> fix\n // command) to each non-extension check so agents gating on `pm health --json`\n // never have to hardcode the warning-code -> fix mapping. The extensions check\n // keeps its richer, contextual `details.triage.remediation`; brief/summary\n // projections omit remediation_map (it lives only in full check details).\n // Every health check contributes its warning tokens as a remediation source.\n // Most resolve to a registered fix command; the extensions check passes its\n // full warning list because only the system-wide partial-coverage adoption\n // gap is registered — per-extension findings resolve to nothing here and keep\n // their richer `details.triage.remediation`, so buildRemediationMap simply\n // skips every unregistered code (pm-bdvm). The map is total over\n // HealthCheck[\"name\"], so no check is ever silently missing a source.\n const checkRemediationSources: Record<HealthCheck[\"name\"], string[]> = {\n settings: normalizedSettingsReadWarnings,\n directories: missingDirs.map((dir) => `missing_directory:${dir}`),\n settings_values: settingWarnings,\n telemetry: telemetryCheck.warnings,\n extensions: extensionCheck.warnings,\n storage: historySummary.over_threshold.map((id) => `history_stream_over_compact_threshold:${id}`),\n locks: locksCheck.warnings,\n integrity: integrityCheck.warnings,\n history_drift: historyDriftCheck.warnings,\n vectorization: vectorizationCheck.warnings,\n };\n const historyDriftedCount =\n typeof (historyDriftCheck.check.details.counts as { drifted?: unknown } | undefined)?.drifted === \"number\"\n ? ((historyDriftCheck.check.details.counts as { drifted: number }).drifted)\n : 0;\n for (const check of checks) {\n const remediationMap = buildRemediationMap(checkRemediationSources[check.name]);\n // With multiple drifted streams the per-item `pm history-repair <id>`\n // template would have to be run once per stream; suggest the bulk audited\n // pass instead so agents repair everything in one command.\n if (check.name === \"history_drift\" && historyDriftedCount > 1) {\n for (const code of Object.keys(remediationMap)) {\n remediationMap[code] = \"pm history-repair --all\";\n }\n }\n // With multiple over-threshold streams, point at the one-pass bulk sweep\n // rather than a per-stream `pm history-compact <id>` template.\n if (check.name === \"storage\" && historySummary.over_threshold.length > 1) {\n for (const code of Object.keys(remediationMap)) {\n remediationMap[code] = \"pm history-compact --all-streams\";\n }\n }\n if (Object.keys(remediationMap).length > 0) {\n check.details = { ...check.details, remediation_map: remediationMap };\n }\n }\n // Telemetry is an opt-out, non-critical observability feature. Its operational\n // state (queue backlog, unreachable endpoint, corrupt local state) is advisory:\n // it must never flip overall project health to not-ok. Such warnings are still\n // surfaced in `warnings` and the telemetry check's own `warn` status.\n const blockingWarnings = normalizedWarnings.filter((warning) => !isAdvisoryHealthWarning(warning));\n const result: HealthResult = {\n ok: blockingWarnings.length === 0,\n checks,\n warnings: normalizedWarnings,\n generated_at: nowIso(),\n };\n if (summaryMode) {\n return applySummaryHealthProjection(result);\n }\n return options.brief === true ? applyBriefHealthProjection(result) : result;\n}\n\nexport const _testOnlyHealthCommand = {\n buildExtensionHealthTriageSummary,\n buildCapabilityContractMetadata,\n collectUnknownCapabilityGuidance,\n isAdvisoryHealthWarning,\n isDirectory,\n isExpectedUnmanagedExtension,\n listItemDocumentPaths,\n normalizeEndpointForDisplay,\n normalizeExtensionNameForMatch,\n parseTelemetryQueue,\n probeTelemetryEndpointHealth,\n selectStaleItemDetail,\n summarizeHealthCheckDetails,\n summarizeExtensionList,\n summarizeRecordList,\n summarizeStringList,\n telemetryEnvFlagEnabled,\n warningCode,\n};\n"],"names":[],"mappings":"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","debugId":"fff5e3e1-ebbe-586a-b8e4-34f2882d28a3"}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildRemediationMap
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JINYH2DB.js";
|
|
4
4
|
import {
|
|
5
5
|
scanLockHealth
|
|
6
6
|
} from "./chunk-QZ342C63.js";
|
|
7
7
|
import {
|
|
8
8
|
scanHistoryDrift
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-WQ7NIVDK.js";
|
|
10
10
|
import {
|
|
11
11
|
collectStaleVectorizationIds
|
|
12
12
|
} from "./chunk-VPLDQMW2.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-HIP7WVTL.js";
|
|
14
14
|
import {
|
|
15
15
|
PM_TELEMETRY_SOURCE_CONTEXT_VALUES,
|
|
16
16
|
TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS,
|
|
17
17
|
TELEMETRY_SCHEMA_VERSION
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-QQHISQBJ.js";
|
|
19
19
|
import {
|
|
20
20
|
buildCapabilityContractMetadata,
|
|
21
21
|
buildRegistrationCollisionRemediation,
|
|
22
22
|
collectUnknownCapabilityGuidance,
|
|
23
23
|
readManagedExtensionState
|
|
24
|
-
} from "./chunk-
|
|
25
|
-
import "./chunk-
|
|
24
|
+
} from "./chunk-5PCI3UBT.js";
|
|
25
|
+
import "./chunk-CF55WVVS.js";
|
|
26
26
|
import {
|
|
27
27
|
buildVectorizationEmbeddingIdentity,
|
|
28
28
|
hasVectorizationEmbeddingIdentityChanged,
|
|
@@ -32,25 +32,27 @@ import {
|
|
|
32
32
|
resolveProviderConfigSource,
|
|
33
33
|
resolveSettingsWithSemanticRuntimeDefaults,
|
|
34
34
|
resolveVectorStores
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-NB3PYLQ6.js";
|
|
36
36
|
import "./chunk-5HIZDR5A.js";
|
|
37
37
|
import {
|
|
38
38
|
collectRegisteredItemFieldNames,
|
|
39
39
|
enforceHistoryStreamPolicyForItems,
|
|
40
40
|
listAllFrontMatter,
|
|
41
41
|
listAllFrontMatterWithBody
|
|
42
|
-
} from "./chunk-
|
|
43
|
-
import "./chunk-
|
|
42
|
+
} from "./chunk-SX75ADBK.js";
|
|
43
|
+
import "./chunk-7D3SAQXM.js";
|
|
44
44
|
import {
|
|
45
|
+
effectiveItemFormatVersion,
|
|
45
46
|
findFirstMergeConflictMarker,
|
|
46
|
-
parseItemDocument
|
|
47
|
-
|
|
47
|
+
parseItemDocument,
|
|
48
|
+
scanItemFormatVersions
|
|
49
|
+
} from "./chunk-QGG32QHW.js";
|
|
48
50
|
import {
|
|
49
51
|
resolveItemTypeRegistry
|
|
50
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-FRUFKWNK.js";
|
|
51
53
|
import {
|
|
52
54
|
nowIso
|
|
53
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-YCJX76PW.js";
|
|
54
56
|
import {
|
|
55
57
|
EXIT_CODE,
|
|
56
58
|
ITEM_FILE_EXTENSIONS,
|
|
@@ -70,7 +72,7 @@ import {
|
|
|
70
72
|
resolvePmRoot,
|
|
71
73
|
runActiveOnReadHooks,
|
|
72
74
|
toNonEmptyStringOrUndefined
|
|
73
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-HMOADQVT.js";
|
|
74
76
|
|
|
75
77
|
// dist/cli/commands/health.js
|
|
76
78
|
import fs from "node:fs/promises";
|
|
@@ -78,7 +80,7 @@ import path from "node:path";
|
|
|
78
80
|
!(function() {
|
|
79
81
|
try {
|
|
80
82
|
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
81
|
-
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "
|
|
83
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "7b0dc685-2469-5d2e-98c8-07eebf79ee3e");
|
|
82
84
|
} catch (e2) {
|
|
83
85
|
}
|
|
84
86
|
})();
|
|
@@ -190,6 +192,7 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
|
|
|
190
192
|
const itemUnreadable = [];
|
|
191
193
|
const itemConflictMarkers = [];
|
|
192
194
|
const itemParseFailures = [];
|
|
195
|
+
const formatVersionEntries = [];
|
|
193
196
|
const extensionFieldNames = collectRegisteredItemFieldNames(getActiveExtensionRegistrations());
|
|
194
197
|
for (const itemPath of itemPaths) {
|
|
195
198
|
const relativePath = normalizeRelativePath(pmRoot, itemPath);
|
|
@@ -210,11 +213,13 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
|
|
|
210
213
|
continue;
|
|
211
214
|
}
|
|
212
215
|
try {
|
|
213
|
-
parseItemDocument(raw, { format: getItemFormatFromPath(itemPath), schema, extensionFieldNames });
|
|
216
|
+
const parsed = parseItemDocument(raw, { format: getItemFormatFromPath(itemPath), schema, extensionFieldNames });
|
|
217
|
+
formatVersionEntries.push({ ref: relativePath, version: effectiveItemFormatVersion(parsed.metadata) });
|
|
214
218
|
} catch {
|
|
215
219
|
itemParseFailures.push(relativePath);
|
|
216
220
|
}
|
|
217
221
|
}
|
|
222
|
+
const formatVersionScan = scanItemFormatVersions(formatVersionEntries);
|
|
218
223
|
const historyDir = path.join(pmRoot, "history");
|
|
219
224
|
const historyUnreadable = [];
|
|
220
225
|
const historyConflictMarkers = [];
|
|
@@ -268,7 +273,11 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
|
|
|
268
273
|
...itemParseFailures.map((entry) => `integrity_item_parse_failed:${entry}`),
|
|
269
274
|
...historyUnreadable.map((entry) => `integrity_history_unreadable:${entry}`),
|
|
270
275
|
...historyConflictMarkers.map((entry) => `integrity_history_conflict_marker:${entry.id}:L${entry.line}`),
|
|
271
|
-
...historyInvalidJson.map((entry) => `integrity_history_invalid_json:${entry.id}:L${entry.line}`)
|
|
276
|
+
...historyInvalidJson.map((entry) => `integrity_history_invalid_json:${entry.id}:L${entry.line}`),
|
|
277
|
+
/* c8 ignore start -- outdated-version items are unreachable until CURRENT_ITEM_FORMAT_VERSION advances past the baseline (an effective version below 1 cannot occur); the per-item mapping is covered in item-format-version.spec, and the ahead path below is covered by health-command.spec */
|
|
278
|
+
...formatVersionScan.outdated.map((entry) => `integrity_item_outdated_format_version:${entry}`),
|
|
279
|
+
/* c8 ignore stop */
|
|
280
|
+
...formatVersionScan.ahead.map((entry) => `integrity_item_ahead_format_version:${entry}`)
|
|
272
281
|
];
|
|
273
282
|
const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));
|
|
274
283
|
return {
|
|
@@ -284,11 +293,15 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
|
|
|
284
293
|
item_parse_failures: itemParseFailures.length,
|
|
285
294
|
history_unreadable: historyUnreadable.length,
|
|
286
295
|
history_conflict_markers: historyConflictMarkers.length,
|
|
287
|
-
history_invalid_json: historyInvalidJson.length
|
|
296
|
+
history_invalid_json: historyInvalidJson.length,
|
|
297
|
+
item_outdated_format_version: formatVersionScan.outdated.length,
|
|
298
|
+
item_ahead_format_version: formatVersionScan.ahead.length
|
|
288
299
|
},
|
|
289
300
|
item_unreadable: itemUnreadable,
|
|
290
301
|
item_conflict_markers: itemConflictMarkers,
|
|
291
302
|
item_parse_failures: itemParseFailures,
|
|
303
|
+
item_outdated_format_version: formatVersionScan.outdated,
|
|
304
|
+
item_ahead_format_version: formatVersionScan.ahead,
|
|
292
305
|
history_unreadable: historyUnreadable,
|
|
293
306
|
history_conflict_markers: historyConflictMarkers,
|
|
294
307
|
history_invalid_json: historyInvalidJson
|
|
@@ -1081,7 +1094,8 @@ async function buildLocksCheck(pmRoot) {
|
|
|
1081
1094
|
};
|
|
1082
1095
|
}
|
|
1083
1096
|
async function buildHistoryDriftCheck(pmRoot, items) {
|
|
1084
|
-
const
|
|
1097
|
+
const cacheHitVerification = "metadata";
|
|
1098
|
+
const { missingStreams, unreadableStreams, hashMismatches, chainMismatches, driftedItems } = await scanHistoryDrift(pmRoot, items, { cacheHitVerification });
|
|
1085
1099
|
const warnings = [
|
|
1086
1100
|
...missingStreams.map((id) => `history_drift_missing_stream:${id}`),
|
|
1087
1101
|
...unreadableStreams.map((id) => `history_drift_unreadable_stream:${id}`),
|
|
@@ -1094,6 +1108,7 @@ async function buildHistoryDriftCheck(pmRoot, items) {
|
|
|
1094
1108
|
status: warnings.length === 0 ? "ok" : "warn",
|
|
1095
1109
|
details: {
|
|
1096
1110
|
checked_items: items.length,
|
|
1111
|
+
cache_hit_verification: cacheHitVerification,
|
|
1097
1112
|
drifted_items: driftedItems,
|
|
1098
1113
|
counts: {
|
|
1099
1114
|
drifted: driftedItems.length,
|
|
@@ -1365,6 +1380,7 @@ async function runHealth(global2, options = {}) {
|
|
|
1365
1380
|
directories: missingDirs.map((dir) => `missing_directory:${dir}`),
|
|
1366
1381
|
settings_values: settingWarnings,
|
|
1367
1382
|
telemetry: telemetryCheck.warnings,
|
|
1383
|
+
extensions: extensionCheck.warnings,
|
|
1368
1384
|
storage: historySummary.over_threshold.map((id) => `history_stream_over_compact_threshold:${id}`),
|
|
1369
1385
|
locks: locksCheck.warnings,
|
|
1370
1386
|
integrity: integrityCheck.warnings,
|
|
@@ -1373,11 +1389,7 @@ async function runHealth(global2, options = {}) {
|
|
|
1373
1389
|
};
|
|
1374
1390
|
const historyDriftedCount = typeof historyDriftCheck.check.details.counts?.drifted === "number" ? historyDriftCheck.check.details.counts.drifted : 0;
|
|
1375
1391
|
for (const check of checks) {
|
|
1376
|
-
const
|
|
1377
|
-
if (sources === void 0) {
|
|
1378
|
-
continue;
|
|
1379
|
-
}
|
|
1380
|
-
const remediationMap = buildRemediationMap(sources);
|
|
1392
|
+
const remediationMap = buildRemediationMap(checkRemediationSources[check.name]);
|
|
1381
1393
|
if (check.name === "history_drift" && historyDriftedCount > 1) {
|
|
1382
1394
|
for (const code of Object.keys(remediationMap)) {
|
|
1383
1395
|
remediationMap[code] = "pm history-repair --all";
|
|
@@ -1428,4 +1440,4 @@ export {
|
|
|
1428
1440
|
_testOnlyHealthCommand,
|
|
1429
1441
|
runHealth
|
|
1430
1442
|
};
|
|
1431
|
-
//# sourceMappingURL=health-
|
|
1443
|
+
//# sourceMappingURL=health-WOYBR3KU.js.map
|