@unbrained/pm-cli 2026.6.9 → 2026.6.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +59 -0
- package/README.md +1 -1
- package/dist/cli/bootstrap-args.d.ts +11 -0
- package/dist/cli/bootstrap-args.js +90 -4
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commands/aggregate.d.ts +7 -0
- package/dist/cli/commands/aggregate.js +53 -12
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/close.d.ts +1 -0
- package/dist/cli/commands/close.js +106 -3
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/completion.js +20 -7
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/context.d.ts +9 -0
- package/dist/cli/commands/context.js +149 -20
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/contracts.d.ts +2 -0
- package/dist/cli/commands/contracts.js +9 -2
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.d.ts +1 -0
- package/dist/cli/commands/create.js +5 -3
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/extension.js +4 -2
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/health.js +44 -6
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history.js +6 -5
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/linked-test-parsers.d.ts +1 -0
- package/dist/cli/commands/linked-test-parsers.js +289 -2
- package/dist/cli/commands/linked-test-parsers.js.map +1 -1
- package/dist/cli/commands/reindex.d.ts +1 -0
- package/dist/cli/commands/reindex.js +33 -4
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/test.d.ts +6 -0
- package/dist/cli/commands/test.js +46 -5
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/error-guidance.d.ts +8 -0
- package/dist/cli/error-guidance.js +102 -2
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-help.d.ts +1 -0
- package/dist/cli/extension-command-help.js +42 -2
- package/dist/cli/extension-command-help.js.map +1 -1
- package/dist/cli/extension-command-options.d.ts +2 -0
- package/dist/cli/extension-command-options.js +51 -2
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/main.js +26 -26
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +3 -2
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +4 -2
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +15 -6
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/registration-helpers.js +9 -2
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/{activity-RUJATACW.js → activity-XADJOG6G.js} +11 -11
- package/dist/cli-bundle/chunks/activity-XZIUPGZH.js +16 -0
- package/dist/cli-bundle/chunks/{aggregate-TT7OCHHT.js → aggregate-6OTS3AOO.js} +65 -24
- package/dist/cli-bundle/chunks/aggregate-6OTS3AOO.js.map +1 -0
- package/dist/cli-bundle/chunks/{aggregate-IQ27NFBI.js → aggregate-OD36DJU5.js} +64 -23
- package/dist/cli-bundle/chunks/aggregate-OD36DJU5.js.map +7 -0
- package/dist/cli-bundle/chunks/{append-E7AJ5RTR.js → append-JYWO4P7W.js} +8 -8
- package/dist/cli-bundle/chunks/{append-CWQZBUWV.js → append-KG55G7S3.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-LF2VNLEZ.js → chunk-3KLPFWZ4.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-LF2VNLEZ.js.map → chunk-3KLPFWZ4.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ENCVPOID.js → chunk-3SLOMKCJ.js} +12 -12
- package/dist/cli-bundle/chunks/chunk-4HFU4UO2.js +518 -0
- package/dist/cli-bundle/chunks/chunk-4HFU4UO2.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-F2REA7VW.js → chunk-4JCSYR6F.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-CAXUGAAF.js → chunk-4YFAGDRH.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-U3Z4OCZC.js → chunk-5SCT2JCT.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NHRZSYAA.js → chunk-73ZPG2I3.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-D5D7VKIC.js → chunk-7IYFN5R7.js} +6 -5
- package/dist/cli-bundle/chunks/chunk-7IYFN5R7.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-A5342JVL.js → chunk-7RIT3OCD.js} +12 -12
- package/dist/cli-bundle/chunks/{chunk-LU54Z4QI.js → chunk-7UGSRQCL.js} +76 -74
- package/dist/cli-bundle/chunks/{chunk-LU54Z4QI.js.map → chunk-7UGSRQCL.js.map} +3 -3
- package/dist/cli-bundle/chunks/{chunk-5JF76OJF.js → chunk-A6LXQFO7.js} +290 -25
- package/dist/cli-bundle/chunks/chunk-A6LXQFO7.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7CR4GAYN.js → chunk-ATEES5SX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FHUI7AXS.js → chunk-AVGHVVF7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-T7B5VAKD.js → chunk-B65UUCGQ.js} +13 -6
- package/dist/cli-bundle/chunks/chunk-B65UUCGQ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-42IULX44.js → chunk-CCX4RSYZ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EFRHTZO4.js → chunk-CW6E4NAT.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-JN3BT7UY.js → chunk-DY6C42S6.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-PUSOAQCR.js → chunk-E5DUIJA4.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-E7LOIIFP.js → chunk-ESANVZF4.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WQZCEEQN.js → chunk-EWFY7SLA.js} +157 -12
- package/dist/cli-bundle/chunks/chunk-EWFY7SLA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-YI6W2DBN.js → chunk-F75JSIOZ.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-6IGTNFE3.js → chunk-FDH2X65L.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-GPOSGWCN.js → chunk-FXRU333M.js} +68 -7
- package/dist/cli-bundle/chunks/chunk-FXRU333M.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-C72IQIBT.js → chunk-FY4SPXSC.js} +302 -30
- package/dist/cli-bundle/chunks/chunk-FY4SPXSC.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TLD3UYGY.js → chunk-GKIZW7SM.js} +5 -4
- package/dist/cli-bundle/chunks/chunk-GKIZW7SM.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YSANBZAE.js → chunk-GWZSYR6X.js} +12 -5
- package/dist/cli-bundle/chunks/chunk-GWZSYR6X.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-FJNJEWU4.js → chunk-HGLC63AU.js} +14 -12
- package/dist/cli-bundle/chunks/chunk-HGLC63AU.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-RLVI7KDW.js → chunk-HHHJ2GI3.js} +163 -11
- package/dist/cli-bundle/chunks/chunk-HHHJ2GI3.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-AVGOVJGV.js → chunk-HI7STVF2.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-AVGOVJGV.js.map → chunk-HI7STVF2.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-ANKG2JKL.js → chunk-I2IJY2NL.js} +12 -5
- package/dist/cli-bundle/chunks/chunk-I2IJY2NL.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ZPXDD6RQ.js → chunk-I53JBTJW.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-23WNCJBA.js → chunk-I7NYDZDV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EQ6N6IDR.js → chunk-IGVJRZ6H.js} +13 -11
- package/dist/cli-bundle/chunks/chunk-IGVJRZ6H.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JVMAOD54.js → chunk-IH4MBKK7.js} +14 -7
- package/dist/cli-bundle/chunks/chunk-IH4MBKK7.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BIRVSIM2.js → chunk-IKOH24GZ.js} +14 -14
- package/dist/cli-bundle/chunks/chunk-IKOH24GZ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-SAUXUI6U.js → chunk-IUKD4W6Z.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3RHE76G6.js → chunk-J3GD64J2.js} +15 -15
- package/dist/cli-bundle/chunks/chunk-J3GD64J2.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OT6XAMO5.js → chunk-KWAXVAXX.js} +7 -5
- package/dist/cli-bundle/chunks/{chunk-OT6XAMO5.js.map → chunk-KWAXVAXX.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SD6H3RLA.js → chunk-LCSCXBGT.js} +15 -5
- package/dist/cli-bundle/chunks/{chunk-SD6H3RLA.js.map → chunk-LCSCXBGT.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RKCJ2JMA.js → chunk-OASDW5UI.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-JEGFLKSI.js → chunk-OLKBSY4N.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4LRVXVJK.js → chunk-P2PSODAQ.js} +70 -9
- package/dist/cli-bundle/chunks/chunk-P2PSODAQ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-XEOO6K5J.js → chunk-P5BJOMBB.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-P2NVFE4L.js → chunk-P5U5EOMA.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-AM2AXVFS.js → chunk-PSD7F7DX.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-VDVVOLR6.js → chunk-QJMGRZO2.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-7YTWXGE3.js → chunk-QKW5D45B.js} +112 -7
- package/dist/cli-bundle/chunks/chunk-QKW5D45B.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-T7NWFVOA.js → chunk-QNJSITCX.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-MNXJ6YDO.js → chunk-RXAP6JL5.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-5MMLINZB.js → chunk-S26FESD4.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-I26E6XA7.js → chunk-S2ZLDYGS.js} +8 -6
- package/dist/cli-bundle/chunks/chunk-S2ZLDYGS.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-SXKNJPQ7.js +528 -0
- package/dist/cli-bundle/chunks/chunk-SXKNJPQ7.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-OPYA2HIU.js → chunk-TK5VZFHY.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-4TJWRPIH.js → chunk-TNAP7EJX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-I4FGL3K2.js → chunk-UOO6BYIA.js} +16 -6
- package/dist/cli-bundle/chunks/chunk-UOO6BYIA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5ATRWEZO.js → chunk-UUWGCWBU.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-YX5LAKFJ.js → chunk-VAOUX6TK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RMTI5R76.js → chunk-VFUZV5EB.js} +111 -6
- package/dist/cli-bundle/chunks/chunk-VFUZV5EB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-WCWIDJII.js → chunk-VPEAS7PS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RE2JQJZJ.js → chunk-VSRZRLG3.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-PW7C262O.js → chunk-WUNFKP7M.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BACSNVWE.js → chunk-XJDGS74Y.js} +71 -69
- package/dist/cli-bundle/chunks/{chunk-BACSNVWE.js.map → chunk-XJDGS74Y.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-H37YPWLM.js → chunk-XMBI6TNW.js} +13 -7
- package/dist/cli-bundle/chunks/chunk-XMBI6TNW.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-NUGAWYEN.js → chunk-XTKJSVWH.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KDX6VC3P.js → chunk-XUC4C4PT.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-44JP4PYY.js → chunk-Y3YKK7CY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KTVXLI54.js → chunk-YW6Q3RYZ.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-I3UILOUU.js → chunk-ZLMIWZUG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-FKH7K6YP.js → chunk-ZMW77VWV.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-NJRZIJ4N.js → chunk-ZYNJNPYD.js} +14 -8
- package/dist/cli-bundle/chunks/chunk-ZYNJNPYD.js.map +1 -0
- package/dist/cli-bundle/chunks/{claim-UXFGCF3P.js → claim-2RDYMCTP.js} +10 -10
- package/dist/cli-bundle/chunks/{claim-RV6WYUF7.js → claim-MJ7DZFC3.js} +10 -10
- package/dist/cli-bundle/chunks/close-4FMAPEMY.js +13 -0
- package/dist/cli-bundle/chunks/{close-O4JK2JKD.js → close-XLEKIQSW.js} +8 -8
- package/dist/cli-bundle/chunks/{close-many-EQO4TPIE.js → close-many-AOD4HSAZ.js} +15 -15
- package/dist/cli-bundle/chunks/{close-many-SRDBV3SI.js → close-many-XKAQY5CQ.js} +15 -15
- package/dist/cli-bundle/chunks/{comments-TTZUIB2O.js → comments-B4RWWDJT.js} +10 -10
- package/dist/cli-bundle/chunks/{comments-OMB7YE27.js → comments-RN5TG4ZN.js} +10 -10
- package/dist/cli-bundle/chunks/{config-5VPR42A6.js → config-3JXJ3XZ7.js} +8 -8
- package/dist/cli-bundle/chunks/{config-NNLXVGVC.js → config-FZ4UDC4B.js} +8 -8
- package/dist/cli-bundle/chunks/{context-4QK6GRXO.js → context-L36PIN35.js} +146 -33
- package/dist/cli-bundle/chunks/{context-4QK6GRXO.js.map → context-L36PIN35.js.map} +2 -2
- package/dist/cli-bundle/chunks/{context-4N7GYTVQ.js → context-QBPO3BFM.js} +147 -34
- package/dist/cli-bundle/chunks/context-QBPO3BFM.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-DXCWXOSP.js → contracts-3NKWYKKU.js} +309 -6
- package/dist/cli-bundle/chunks/contracts-3NKWYKKU.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-AOBNEBVT.js → contracts-MIXBWJIB.js} +315 -5
- package/dist/cli-bundle/chunks/contracts-MIXBWJIB.js.map +7 -0
- package/dist/cli-bundle/chunks/{copy-5NM3SVJA.js → copy-ALU5WMHA.js} +7 -7
- package/dist/cli-bundle/chunks/{copy-XSYEQTLA.js → copy-FWIVTLBO.js} +7 -7
- package/dist/cli-bundle/chunks/{create-FCCAATQV.js → create-IFA26O2I.js} +13 -13
- package/dist/cli-bundle/chunks/create-JVXYHYH4.js +27 -0
- package/dist/cli-bundle/chunks/{delete-5JFP6OG7.js → delete-IYTIYAJS.js} +7 -7
- package/dist/cli-bundle/chunks/{delete-PQXJQXQ7.js → delete-Y2SGJBGY.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-S5322EOQ.js → deps-6TSPOSGU.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-XXKBOQUA.js → deps-CZ4PTVXU.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-C7CCVWAJ.js → docs-5WMBVQT2.js} +9 -9
- package/dist/cli-bundle/chunks/{docs-DZRPAW5S.js → docs-MB53UJAJ.js} +9 -9
- package/dist/cli-bundle/chunks/{extension-CSHP6FZX.js → extension-Q34OEWO5.js} +5 -5
- package/dist/cli-bundle/chunks/{extension-XNNVUVAY.js → extension-WH2FOIOZ.js} +5 -5
- package/dist/cli-bundle/chunks/{files-UPCNKEIZ.js → files-DLB5LJEP.js} +9 -9
- package/dist/cli-bundle/chunks/{files-OBWYYPKM.js → files-GVMNVLCB.js} +9 -9
- package/dist/cli-bundle/chunks/{gc-FA2ONELT.js → gc-2WEPW6D6.js} +3 -3
- package/dist/cli-bundle/chunks/{gc-KXK6KBRN.js → gc-4Z3IKHAZ.js} +3 -3
- package/dist/cli-bundle/chunks/{get-PNTSONGB.js → get-PCHS7RA6.js} +11 -11
- package/dist/cli-bundle/chunks/{get-FLHYTOBA.js → get-QARTE6BL.js} +11 -11
- package/dist/cli-bundle/chunks/{health-CS5RNTJX.js → health-4ZYB3IYQ.js} +47 -19
- package/dist/cli-bundle/chunks/health-4ZYB3IYQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{health-KCRVYIYY.js → health-YO5LRWN4.js} +46 -18
- package/dist/cli-bundle/chunks/health-YO5LRWN4.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-COQTPBEU.js → history-7WUAEWHW.js} +10 -10
- package/dist/cli-bundle/chunks/history-L2FQFRTU.js +20 -0
- package/dist/cli-bundle/chunks/{history-compact-PVS2A3FS.js → history-compact-3EJ3L2O7.js} +11 -11
- package/dist/cli-bundle/chunks/{history-compact-66PSRYL3.js → history-compact-LW27IPFK.js} +11 -11
- package/dist/cli-bundle/chunks/{history-redact-DCXAWGTF.js → history-redact-G72A4EJ4.js} +11 -11
- package/dist/cli-bundle/chunks/history-redact-QWQCX5DZ.js +19 -0
- package/dist/cli-bundle/chunks/{history-repair-SEQDFTGW.js → history-repair-KVPFJKOS.js} +11 -11
- package/dist/cli-bundle/chunks/{history-repair-TA3NRIFO.js → history-repair-RUGKD3YR.js} +11 -11
- package/dist/cli-bundle/chunks/init-4BKRHGWW.js +17 -0
- package/dist/cli-bundle/chunks/{init-IQJE3EKJ.js → init-S5WEGUJY.js} +9 -9
- package/dist/cli-bundle/chunks/{learnings-XC6EMW5E.js → learnings-HQXSSKZ5.js} +10 -10
- package/dist/cli-bundle/chunks/{learnings-RJPGH2ME.js → learnings-XK3P4ZDR.js} +10 -10
- package/dist/cli-bundle/chunks/{list-NJV6WBT4.js → list-6CL3XFT6.js} +10 -10
- package/dist/cli-bundle/chunks/list-BYNN4ZEO.js +19 -0
- package/dist/cli-bundle/chunks/{notes-2KWHADK3.js → notes-5T6P7C5V.js} +10 -10
- package/dist/cli-bundle/chunks/{notes-FNCDMZW2.js → notes-U5FZCSBT.js} +10 -10
- package/dist/cli-bundle/chunks/{plan-CYK2P5PD.js → plan-FQLMJRLZ.js} +13 -13
- package/dist/cli-bundle/chunks/{plan-MQO5JTSV.js → plan-VNUG3WZZ.js} +13 -13
- package/dist/cli-bundle/chunks/{register-list-query-6RA24SIZ.js → register-list-query-NPE3ECJQ.js} +21 -21
- package/dist/cli-bundle/chunks/register-list-query-NPE3ECJQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-IO3RR5K6.js → register-list-query-VHDXWEPP.js} +20 -20
- package/dist/cli-bundle/chunks/register-list-query-VHDXWEPP.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-VV2SC2KL.js → register-mutation-DG53FCBV.js} +36 -35
- package/dist/cli-bundle/chunks/register-mutation-DG53FCBV.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-KVFUXCAZ.js → register-mutation-EAYNLGOS.js} +35 -34
- package/dist/cli-bundle/chunks/register-mutation-EAYNLGOS.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-DFNVRSJ5.js → register-operations-AM6KTWB6.js} +42 -37
- package/dist/cli-bundle/chunks/register-operations-AM6KTWB6.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-TAUUTRJ4.js → register-operations-FWFE64JG.js} +41 -36
- package/dist/cli-bundle/chunks/register-operations-FWFE64JG.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-setup-X2R5CFDV.js → register-setup-G4QYI3RX.js} +15 -15
- package/dist/cli-bundle/chunks/{register-setup-GAQZZRUA.js → register-setup-IKX5524L.js} +15 -15
- package/dist/cli-bundle/chunks/restore-CHIOQAQL.js +17 -0
- package/dist/cli-bundle/chunks/{restore-E3GZKRRK.js → restore-M6AFHMV4.js} +11 -11
- package/dist/cli-bundle/chunks/{schema-3CPFLDAY.js → schema-76HDZJCC.js} +8 -8
- package/dist/cli-bundle/chunks/{schema-7EHBPNXM.js → schema-AINZ2IMM.js} +8 -8
- package/dist/cli-bundle/chunks/{search-OBZVYJJ2.js → search-JMLFQEPJ.js} +10 -10
- package/dist/cli-bundle/chunks/{search-2T3NCCUR.js → search-NL3TSCYB.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-6LVK4JER.js → stats-BKXCBIGT.js} +7 -7
- package/dist/cli-bundle/chunks/{stats-ULGQACF7.js → stats-UBD56TGK.js} +7 -7
- package/dist/cli-bundle/chunks/{telemetry-HHKRTMZA.js → telemetry-N454RHG5.js} +4 -4
- package/dist/cli-bundle/chunks/{telemetry-6G27FLCP.js → telemetry-ZJXK3H7X.js} +4 -4
- package/dist/cli-bundle/chunks/{test-2PP4YBV6.js → test-BQAKIXAT.js} +14 -14
- package/dist/cli-bundle/chunks/test-O74JFUH5.js +32 -0
- package/dist/cli-bundle/chunks/{test-all-6Z272JRI.js → test-all-7LV3I6S5.js} +14 -14
- package/dist/cli-bundle/chunks/{test-all-NETGVNM6.js → test-all-TDYCCBA4.js} +14 -14
- package/dist/cli-bundle/chunks/{test-runs-M24WA6TI.js → test-runs-E64M6XS3.js} +5 -5
- package/dist/cli-bundle/chunks/{test-runs-CRPQVMMG.js → test-runs-LXZLULCI.js} +5 -5
- package/dist/cli-bundle/chunks/update-2EVXOC7V.js +21 -0
- package/dist/cli-bundle/chunks/update-5A2B6QYB.js +25 -0
- package/dist/cli-bundle/chunks/{update-many-JSRF5EH5.js → update-many-TUGU5YXQ.js} +22 -22
- package/dist/cli-bundle/chunks/{update-many-Y3HOL7WA.js → update-many-V4LA3C4H.js} +22 -22
- package/dist/cli-bundle/chunks/{upgrade-5RTQVKKE.js → upgrade-37F7JKES.js} +5 -5
- package/dist/cli-bundle/chunks/{upgrade-ECB6GH3M.js → upgrade-L32JA4TZ.js} +5 -5
- package/dist/cli-bundle/chunks/{validate-MCNMAXVA.js → validate-EQTT6WVX.js} +16 -16
- package/dist/cli-bundle/chunks/{validate-J6Q444SD.js → validate-XN4I4DPL.js} +16 -16
- package/dist/cli-bundle/main.js +276 -47
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/core/diagnostics/remediation.js +12 -2
- package/dist/core/diagnostics/remediation.js.map +1 -1
- package/dist/core/extensions/extension-policy.d.ts +14 -1
- package/dist/core/extensions/extension-policy.js +38 -3
- package/dist/core/extensions/extension-policy.js.map +1 -1
- package/dist/core/extensions/extension-types.d.ts +40 -1
- package/dist/core/extensions/extension-types.js +28 -2
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +6 -4
- package/dist/core/extensions/loader.js +67 -14
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/history/replay.d.ts +1 -1
- package/dist/core/history/replay.js +13 -4
- package/dist/core/history/replay.js.map +1 -1
- package/dist/core/output/mutation-projection.d.ts +2 -0
- package/dist/core/output/mutation-projection.js +9 -2
- package/dist/core/output/mutation-projection.js.map +1 -1
- package/dist/core/output/output.d.ts +2 -0
- package/dist/core/output/output.js +7 -3
- package/dist/core/output/output.js.map +1 -1
- package/dist/core/output/query-summary.d.ts +31 -0
- package/dist/core/output/query-summary.js +62 -0
- package/dist/core/output/query-summary.js.map +1 -0
- package/dist/core/shared/command-types.d.ts +1 -0
- package/dist/core/shared/command-types.js +2 -2
- package/dist/core/shared/command-types.js.map +1 -1
- package/dist/core/shared/constants.js +8 -4
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/store/item-store.d.ts +1 -1
- package/dist/core/store/item-store.js +3 -3
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings-read-cache.d.ts +15 -0
- package/dist/core/store/settings-read-cache.js +72 -0
- package/dist/core/store/settings-read-cache.js.map +1 -0
- package/dist/core/store/settings-validator.d.ts +4 -1
- package/dist/core/store/settings-validator.js +14 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.js +166 -16
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/runtime.d.ts +1 -0
- package/dist/core/telemetry/runtime.js +3 -3
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/core/test/run-selectors.d.ts +27 -0
- package/dist/core/test/run-selectors.js +110 -0
- package/dist/core/test/run-selectors.js.map +1 -0
- package/dist/mcp/server.js +76 -262
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-definitions.d.ts +27 -0
- package/dist/mcp/tool-definitions.js +330 -0
- package/dist/mcp/tool-definitions.js.map +1 -0
- package/dist/sdk/cli-contracts/commander-mutation-options.js +3 -2
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.js +3 -2
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +29 -2
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.js +37 -5
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/index.js +2 -2
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runtime.d.ts +6 -0
- package/dist/sdk/runtime.js +51 -3
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/types.d.ts +4 -1
- package/dist/types.js +4 -2
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +7 -1
- package/docs/ARCHITECTURE.md +7 -0
- package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +38 -3
- package/docs/CONFIGURATION.md +1 -1
- package/docs/EXTENSIONS.md +55 -53
- package/docs/SDK.md +8 -2
- package/docs/TESTING.md +60 -0
- package/docs/schemas/extension-manifest.schema.json +120 -0
- package/marketplace.json +1 -1
- package/package.json +2 -2
- package/packages/pm-beads/extensions/beads/manifest.json +10 -0
- package/packages/pm-calendar/extensions/calendar/manifest.json +10 -0
- package/packages/pm-command-kit/README.md +72 -0
- package/packages/pm-command-kit/extensions/command-kit/index.js +181 -0
- package/packages/pm-command-kit/extensions/command-kit/index.ts +176 -0
- package/packages/pm-command-kit/extensions/command-kit/manifest.json +22 -0
- package/packages/pm-command-kit/package.json +53 -0
- package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +10 -0
- package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +10 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +10 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +10 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.js +6 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +6 -0
- package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +10 -0
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +1 -0
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +1 -0
- package/packages/pm-templates/extensions/templates/manifest.json +10 -0
- package/packages/pm-todos/extensions/todos/manifest.json +10 -0
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/README.md +7 -3
- package/plugins/pm-claude/commands/pm-init.md +1 -1
- package/plugins/pm-codex/README.md +2 -2
- package/dist/cli-bundle/chunks/activity-HF3VJYKH.js +0 -16
- package/dist/cli-bundle/chunks/aggregate-IQ27NFBI.js.map +0 -7
- package/dist/cli-bundle/chunks/aggregate-TT7OCHHT.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-3RHE76G6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4LRVXVJK.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5JF76OJF.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-7YTWXGE3.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ANKG2JKL.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-BIRVSIM2.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-C72IQIBT.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-D5D7VKIC.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-EQ6N6IDR.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FJNJEWU4.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-GPOSGWCN.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-H37YPWLM.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-I26E6XA7.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-I4FGL3K2.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-JVMAOD54.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-LU2HE272.js +0 -242
- package/dist/cli-bundle/chunks/chunk-LU2HE272.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-NJRZIJ4N.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-O4L7Z6LB.js +0 -252
- package/dist/cli-bundle/chunks/chunk-O4L7Z6LB.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RLVI7KDW.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RMTI5R76.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-T7B5VAKD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-TLD3UYGY.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-WQZCEEQN.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-YSANBZAE.js.map +0 -7
- package/dist/cli-bundle/chunks/close-JTTGW7TS.js +0 -13
- package/dist/cli-bundle/chunks/context-4N7GYTVQ.js.map +0 -1
- package/dist/cli-bundle/chunks/contracts-AOBNEBVT.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-DXCWXOSP.js.map +0 -1
- package/dist/cli-bundle/chunks/create-JAPLFDGJ.js +0 -27
- package/dist/cli-bundle/chunks/health-CS5RNTJX.js.map +0 -1
- package/dist/cli-bundle/chunks/health-KCRVYIYY.js.map +0 -7
- package/dist/cli-bundle/chunks/history-6624XISO.js +0 -20
- package/dist/cli-bundle/chunks/history-redact-ZRQTI7NB.js +0 -19
- package/dist/cli-bundle/chunks/init-ZVE2HMKK.js +0 -17
- package/dist/cli-bundle/chunks/list-OO5P472O.js +0 -19
- package/dist/cli-bundle/chunks/register-list-query-6RA24SIZ.js.map +0 -1
- package/dist/cli-bundle/chunks/register-list-query-IO3RR5K6.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-KVFUXCAZ.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-VV2SC2KL.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-DFNVRSJ5.js.map +0 -1
- package/dist/cli-bundle/chunks/register-operations-TAUUTRJ4.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-F4ALFV4D.js +0 -17
- package/dist/cli-bundle/chunks/test-PPOLRIBA.js +0 -32
- package/dist/cli-bundle/chunks/update-MCPCPMHV.js +0 -25
- package/dist/cli-bundle/chunks/update-O7TBOUVQ.js +0 -21
- /package/dist/cli-bundle/chunks/{activity-RUJATACW.js.map → activity-XADJOG6G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-HF3VJYKH.js.map → activity-XZIUPGZH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-E7AJ5RTR.js.map → append-JYWO4P7W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-CWQZBUWV.js.map → append-KG55G7S3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ENCVPOID.js.map → chunk-3SLOMKCJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-F2REA7VW.js.map → chunk-4JCSYR6F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CAXUGAAF.js.map → chunk-4YFAGDRH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-U3Z4OCZC.js.map → chunk-5SCT2JCT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NHRZSYAA.js.map → chunk-73ZPG2I3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A5342JVL.js.map → chunk-7RIT3OCD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7CR4GAYN.js.map → chunk-ATEES5SX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FHUI7AXS.js.map → chunk-AVGHVVF7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-42IULX44.js.map → chunk-CCX4RSYZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EFRHTZO4.js.map → chunk-CW6E4NAT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JN3BT7UY.js.map → chunk-DY6C42S6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PUSOAQCR.js.map → chunk-E5DUIJA4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-E7LOIIFP.js.map → chunk-ESANVZF4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YI6W2DBN.js.map → chunk-F75JSIOZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6IGTNFE3.js.map → chunk-FDH2X65L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZPXDD6RQ.js.map → chunk-I53JBTJW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-23WNCJBA.js.map → chunk-I7NYDZDV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SAUXUI6U.js.map → chunk-IUKD4W6Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RKCJ2JMA.js.map → chunk-OASDW5UI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JEGFLKSI.js.map → chunk-OLKBSY4N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XEOO6K5J.js.map → chunk-P5BJOMBB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-P2NVFE4L.js.map → chunk-P5U5EOMA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AM2AXVFS.js.map → chunk-PSD7F7DX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VDVVOLR6.js.map → chunk-QJMGRZO2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-T7NWFVOA.js.map → chunk-QNJSITCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MNXJ6YDO.js.map → chunk-RXAP6JL5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5MMLINZB.js.map → chunk-S26FESD4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OPYA2HIU.js.map → chunk-TK5VZFHY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4TJWRPIH.js.map → chunk-TNAP7EJX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5ATRWEZO.js.map → chunk-UUWGCWBU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YX5LAKFJ.js.map → chunk-VAOUX6TK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WCWIDJII.js.map → chunk-VPEAS7PS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RE2JQJZJ.js.map → chunk-VSRZRLG3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PW7C262O.js.map → chunk-WUNFKP7M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NUGAWYEN.js.map → chunk-XTKJSVWH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KDX6VC3P.js.map → chunk-XUC4C4PT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-44JP4PYY.js.map → chunk-Y3YKK7CY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KTVXLI54.js.map → chunk-YW6Q3RYZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-I3UILOUU.js.map → chunk-ZLMIWZUG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FKH7K6YP.js.map → chunk-ZMW77VWV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-UXFGCF3P.js.map → claim-2RDYMCTP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-RV6WYUF7.js.map → claim-MJ7DZFC3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-JTTGW7TS.js.map → close-4FMAPEMY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-O4JK2JKD.js.map → close-XLEKIQSW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-EQO4TPIE.js.map → close-many-AOD4HSAZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-SRDBV3SI.js.map → close-many-XKAQY5CQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-TTZUIB2O.js.map → comments-B4RWWDJT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-OMB7YE27.js.map → comments-RN5TG4ZN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-5VPR42A6.js.map → config-3JXJ3XZ7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-NNLXVGVC.js.map → config-FZ4UDC4B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-5NM3SVJA.js.map → copy-ALU5WMHA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-XSYEQTLA.js.map → copy-FWIVTLBO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-FCCAATQV.js.map → create-IFA26O2I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-JAPLFDGJ.js.map → create-JVXYHYH4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-5JFP6OG7.js.map → delete-IYTIYAJS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-PQXJQXQ7.js.map → delete-Y2SGJBGY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-S5322EOQ.js.map → deps-6TSPOSGU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-XXKBOQUA.js.map → deps-CZ4PTVXU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-C7CCVWAJ.js.map → docs-5WMBVQT2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-DZRPAW5S.js.map → docs-MB53UJAJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-CSHP6FZX.js.map → extension-Q34OEWO5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-XNNVUVAY.js.map → extension-WH2FOIOZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-UPCNKEIZ.js.map → files-DLB5LJEP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-OBWYYPKM.js.map → files-GVMNVLCB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-FA2ONELT.js.map → gc-2WEPW6D6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{gc-KXK6KBRN.js.map → gc-4Z3IKHAZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-PNTSONGB.js.map → get-PCHS7RA6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-FLHYTOBA.js.map → get-QARTE6BL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-COQTPBEU.js.map → history-7WUAEWHW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-6624XISO.js.map → history-L2FQFRTU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-PVS2A3FS.js.map → history-compact-3EJ3L2O7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-66PSRYL3.js.map → history-compact-LW27IPFK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-DCXAWGTF.js.map → history-redact-G72A4EJ4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-ZRQTI7NB.js.map → history-redact-QWQCX5DZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-SEQDFTGW.js.map → history-repair-KVPFJKOS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-TA3NRIFO.js.map → history-repair-RUGKD3YR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-ZVE2HMKK.js.map → init-4BKRHGWW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-IQJE3EKJ.js.map → init-S5WEGUJY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-XC6EMW5E.js.map → learnings-HQXSSKZ5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-RJPGH2ME.js.map → learnings-XK3P4ZDR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-NJV6WBT4.js.map → list-6CL3XFT6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-OO5P472O.js.map → list-BYNN4ZEO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-2KWHADK3.js.map → notes-5T6P7C5V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-FNCDMZW2.js.map → notes-U5FZCSBT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-CYK2P5PD.js.map → plan-FQLMJRLZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-MQO5JTSV.js.map → plan-VNUG3WZZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-X2R5CFDV.js.map → register-setup-G4QYI3RX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-GAQZZRUA.js.map → register-setup-IKX5524L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-F4ALFV4D.js.map → restore-CHIOQAQL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-E3GZKRRK.js.map → restore-M6AFHMV4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-3CPFLDAY.js.map → schema-76HDZJCC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-7EHBPNXM.js.map → schema-AINZ2IMM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-OBZVYJJ2.js.map → search-JMLFQEPJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-2T3NCCUR.js.map → search-NL3TSCYB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-6LVK4JER.js.map → stats-BKXCBIGT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-ULGQACF7.js.map → stats-UBD56TGK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-HHKRTMZA.js.map → telemetry-N454RHG5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-6G27FLCP.js.map → telemetry-ZJXK3H7X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-2PP4YBV6.js.map → test-BQAKIXAT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-PPOLRIBA.js.map → test-O74JFUH5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-6Z272JRI.js.map → test-all-7LV3I6S5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-NETGVNM6.js.map → test-all-TDYCCBA4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-M24WA6TI.js.map → test-runs-E64M6XS3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-CRPQVMMG.js.map → test-runs-LXZLULCI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-O7TBOUVQ.js.map → update-2EVXOC7V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-MCPCPMHV.js.map → update-5A2B6QYB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-JSRF5EH5.js.map → update-many-TUGU5YXQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-Y3HOL7WA.js.map → update-many-V4LA3C4H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-5RTQVKKE.js.map → upgrade-37F7JKES.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-ECB6GH3M.js.map → upgrade-L32JA4TZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{validate-MCNMAXVA.js.map → validate-EQTT6WVX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{validate-J6Q444SD.js.map → validate-XN4I4DPL.js.map} +0 -0
|
@@ -1,46 +1,49 @@
|
|
|
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]="c3f5d149-5ae7-5c20-908e-5cdf4be91693")}catch(e){}}();
|
|
3
3
|
import {
|
|
4
4
|
buildRemediationMap,
|
|
5
5
|
scanHistoryDrift
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-UOO6BYIA.js";
|
|
7
7
|
import {
|
|
8
8
|
collectStaleVectorizationIds
|
|
9
9
|
} from "./chunk-IUV734HF.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-ZYNJNPYD.js";
|
|
11
11
|
import {
|
|
12
|
+
TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS,
|
|
12
13
|
TELEMETRY_SCHEMA_VERSION
|
|
13
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-7IYFN5R7.js";
|
|
14
15
|
import {
|
|
15
16
|
buildRegistrationCollisionRemediation,
|
|
16
17
|
readManagedExtensionState
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-S2ZLDYGS.js";
|
|
19
|
+
import "./chunk-VAOUX6TK.js";
|
|
19
20
|
import {
|
|
21
|
+
buildVectorizationEmbeddingIdentity,
|
|
22
|
+
hasVectorizationEmbeddingIdentityChanged,
|
|
20
23
|
readVectorizationStatusLedger,
|
|
21
24
|
refreshSemanticEmbeddingsForMutatedItems,
|
|
22
25
|
resolveEmbeddingProviders,
|
|
23
26
|
resolveSettingsWithSemanticRuntimeDefaults,
|
|
24
27
|
resolveVectorStores
|
|
25
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-XJDGS74Y.js";
|
|
26
29
|
import "./chunk-LXYVKYMQ.js";
|
|
27
30
|
import {
|
|
28
31
|
collectRegisteredItemFieldNames,
|
|
29
32
|
enforceHistoryStreamPolicyForItems,
|
|
30
33
|
listAllFrontMatter,
|
|
31
34
|
listAllFrontMatterWithBody
|
|
32
|
-
} from "./chunk-
|
|
33
|
-
import "./chunk-
|
|
35
|
+
} from "./chunk-HI7STVF2.js";
|
|
36
|
+
import "./chunk-ATEES5SX.js";
|
|
34
37
|
import {
|
|
35
38
|
findFirstMergeConflictMarker,
|
|
36
39
|
parseItemDocument
|
|
37
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-UUWGCWBU.js";
|
|
38
41
|
import {
|
|
39
42
|
resolveItemTypeRegistry
|
|
40
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-CCX4RSYZ.js";
|
|
41
44
|
import {
|
|
42
45
|
nowIso
|
|
43
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-WUNFKP7M.js";
|
|
44
47
|
import {
|
|
45
48
|
EXIT_CODE,
|
|
46
49
|
EXTENSION_CAPABILITY_CONTRACT,
|
|
@@ -63,7 +66,7 @@ import {
|
|
|
63
66
|
resolvePmRoot,
|
|
64
67
|
runActiveOnReadHooks,
|
|
65
68
|
toNonEmptyStringOrUndefined
|
|
66
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-A6LXQFO7.js";
|
|
67
70
|
|
|
68
71
|
// dist/cli/commands/health.js
|
|
69
72
|
import fs from "node:fs/promises";
|
|
@@ -74,6 +77,7 @@ var TELEMETRY_QUEUE_RELATIVE_PATH = path.join("runtime", "telemetry", "events.js
|
|
|
74
77
|
var TELEMETRY_STATE_RELATIVE_PATH = path.join("runtime", "telemetry", "state.json");
|
|
75
78
|
var TELEMETRY_ENDPOINT_PROBE_TIMEOUT_MS = 2500;
|
|
76
79
|
var TELEMETRY_QUEUE_HIGH_WATER_MARK = 500;
|
|
80
|
+
var TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD = TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS - 3;
|
|
77
81
|
var TELEMETRY_SERVER_MAX_SCHEMA_VERSION_HEADERS = [
|
|
78
82
|
"x-pm-telemetry-max-schema-version",
|
|
79
83
|
"x-pm-telemetry-max-version"
|
|
@@ -833,6 +837,8 @@ function parseTelemetryQueue(raw) {
|
|
|
833
837
|
let validEntries = 0;
|
|
834
838
|
let invalidRows = 0;
|
|
835
839
|
let totalRows = 0;
|
|
840
|
+
let highRetryEntries = 0;
|
|
841
|
+
let maxAttempts = 0;
|
|
836
842
|
for (const line of raw.split("\n")) {
|
|
837
843
|
const trimmed = line.trim();
|
|
838
844
|
if (trimmed.length === 0) {
|
|
@@ -841,8 +847,13 @@ function parseTelemetryQueue(raw) {
|
|
|
841
847
|
totalRows += 1;
|
|
842
848
|
try {
|
|
843
849
|
const parsed = JSON.parse(trimmed);
|
|
844
|
-
if (typeof parsed === "object" && parsed !== null && typeof parsed.attempts === "number") {
|
|
850
|
+
if (typeof parsed === "object" && parsed !== null && typeof parsed.attempts === "number" && Number.isFinite(parsed.attempts)) {
|
|
851
|
+
const attempts = Math.max(0, Math.trunc(parsed.attempts));
|
|
845
852
|
validEntries += 1;
|
|
853
|
+
maxAttempts = Math.max(maxAttempts, attempts);
|
|
854
|
+
if (attempts >= TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD) {
|
|
855
|
+
highRetryEntries += 1;
|
|
856
|
+
}
|
|
846
857
|
} else {
|
|
847
858
|
invalidRows += 1;
|
|
848
859
|
}
|
|
@@ -853,7 +864,9 @@ function parseTelemetryQueue(raw) {
|
|
|
853
864
|
return {
|
|
854
865
|
validEntries,
|
|
855
866
|
invalidRows,
|
|
856
|
-
totalRows
|
|
867
|
+
totalRows,
|
|
868
|
+
highRetryEntries,
|
|
869
|
+
maxAttempts
|
|
857
870
|
};
|
|
858
871
|
}
|
|
859
872
|
async function probeTelemetryEndpointHealth(endpoint) {
|
|
@@ -900,7 +913,7 @@ async function buildTelemetryCheck(settings, options) {
|
|
|
900
913
|
const queueRaw = await readFileIfExists(queuePath);
|
|
901
914
|
const queueExists = queueRaw !== null;
|
|
902
915
|
const queueSizeBytes = queueRaw ? Buffer.byteLength(queueRaw, "utf8") : 0;
|
|
903
|
-
const queueSummary = queueRaw ? parseTelemetryQueue(queueRaw) : { validEntries: 0, invalidRows: 0, totalRows: 0 };
|
|
916
|
+
const queueSummary = queueRaw ? parseTelemetryQueue(queueRaw) : { validEntries: 0, invalidRows: 0, totalRows: 0, highRetryEntries: 0, maxAttempts: 0 };
|
|
904
917
|
const stateRaw = await readFileIfExists(statePath);
|
|
905
918
|
let runtimeState = {};
|
|
906
919
|
let stateParseFailed = false;
|
|
@@ -940,9 +953,13 @@ async function buildTelemetryCheck(settings, options) {
|
|
|
940
953
|
const activeFailure = lastFailure && (!lastSuccess || lastFailure > lastSuccess);
|
|
941
954
|
const neverFlushed = !lastSuccess;
|
|
942
955
|
const highWater = queueSummary.validEntries >= TELEMETRY_QUEUE_HIGH_WATER_MARK;
|
|
956
|
+
const highRetries = queueSummary.highRetryEntries > 0;
|
|
943
957
|
if (activeFailure || neverFlushed || highWater) {
|
|
944
958
|
warnings.push(`telemetry_queue_pending:${queueSummary.validEntries}`);
|
|
945
959
|
}
|
|
960
|
+
if (highRetries) {
|
|
961
|
+
warnings.push(`telemetry_queue_high_retries:${queueSummary.highRetryEntries}`);
|
|
962
|
+
}
|
|
946
963
|
}
|
|
947
964
|
if (endpointProbe && !endpointProbe.ok) {
|
|
948
965
|
if (typeof endpointProbe.status === "number") {
|
|
@@ -967,10 +984,13 @@ async function buildTelemetryCheck(settings, options) {
|
|
|
967
984
|
queue_path: queuePath,
|
|
968
985
|
queue_exists: queueExists,
|
|
969
986
|
queue_entries: queueSummary.validEntries,
|
|
970
|
-
queue_draining: queueHasEntries && warnings.every((
|
|
987
|
+
queue_draining: queueHasEntries && warnings.every((warning) => !warning.startsWith("telemetry_queue_pending:") && !warning.startsWith("telemetry_queue_high_retries:")),
|
|
971
988
|
queue_invalid_rows: queueSummary.invalidRows,
|
|
972
989
|
queue_rows_total: queueSummary.totalRows,
|
|
973
990
|
queue_size_bytes: queueSizeBytes,
|
|
991
|
+
queue_high_retry_entries: queueSummary.highRetryEntries,
|
|
992
|
+
queue_high_retry_threshold: TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD,
|
|
993
|
+
queue_max_attempts: queueSummary.maxAttempts,
|
|
974
994
|
runtime_state_path: statePath,
|
|
975
995
|
last_attempted_flush_at: runtimeState.last_attempted_flush_at ?? null,
|
|
976
996
|
last_successful_flush_at: runtimeState.last_successful_flush_at ?? null,
|
|
@@ -1024,6 +1044,7 @@ async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, v
|
|
|
1024
1044
|
const runtimeDefaults = resolveSettingsWithSemanticRuntimeDefaults(settings);
|
|
1025
1045
|
const providerResolution = resolveEmbeddingProviders(runtimeDefaults.settings);
|
|
1026
1046
|
const vectorStoreResolution = resolveVectorStores(runtimeDefaults.settings);
|
|
1047
|
+
const runtimeEmbeddingIdentity = providerResolution.active ? buildVectorizationEmbeddingIdentity(providerResolution.active.name, providerResolution.active.model) : null;
|
|
1027
1048
|
const semanticRuntimeAvailable = Boolean(providerResolution.active && vectorStoreResolution.active);
|
|
1028
1049
|
const ledgerBefore = await readVectorizationStatusLedger(pmRoot);
|
|
1029
1050
|
const staleBefore = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerBefore.entries) : [];
|
|
@@ -1041,12 +1062,16 @@ async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, v
|
|
|
1041
1062
|
const ledgerAfter = await readVectorizationStatusLedger(pmRoot);
|
|
1042
1063
|
const staleAfter = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerAfter.entries) : [];
|
|
1043
1064
|
const strictVectorizationWarnings = !runtimeDefaults.auto_ollama_defaults_applied;
|
|
1065
|
+
const embeddingIdentityChanged = strictVectorizationWarnings && semanticRuntimeAvailable && Boolean(ledgerBefore.embedding && runtimeEmbeddingIdentity && hasVectorizationEmbeddingIdentityChanged(ledgerBefore.embedding, runtimeEmbeddingIdentity));
|
|
1044
1066
|
const warningSet = /* @__PURE__ */ new Set([...ledgerBefore.warnings, ...ledgerAfter.warnings]);
|
|
1045
1067
|
if (strictVectorizationWarnings) {
|
|
1046
1068
|
for (const warning of refreshResult.warnings) {
|
|
1047
1069
|
warningSet.add(warning);
|
|
1048
1070
|
}
|
|
1049
1071
|
}
|
|
1072
|
+
if (embeddingIdentityChanged) {
|
|
1073
|
+
warningSet.add("vectorization_embedding_identity_changed");
|
|
1074
|
+
}
|
|
1050
1075
|
if (strictVectorizationWarnings && semanticRuntimeAvailable && staleAfter.length > 0) {
|
|
1051
1076
|
warningSet.add(`vectorization_stale_items_remaining:${staleAfter.length}`);
|
|
1052
1077
|
}
|
|
@@ -1069,6 +1094,9 @@ async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, v
|
|
|
1069
1094
|
},
|
|
1070
1095
|
provider_active: providerResolution.active?.name ?? null,
|
|
1071
1096
|
vector_store_active: vectorStoreResolution.active?.name ?? null,
|
|
1097
|
+
embedding_identity_changed: embeddingIdentityChanged,
|
|
1098
|
+
embedding_identity_before: ledgerBefore.embedding ?? null,
|
|
1099
|
+
embedding_identity_runtime: runtimeEmbeddingIdentity ?? null,
|
|
1072
1100
|
items: items.length,
|
|
1073
1101
|
ledger_entries_before: Object.keys(ledgerBefore.entries).length,
|
|
1074
1102
|
stale_items_detail_mode: verboseStaleItems ? "full" : "summary",
|
|
@@ -1274,6 +1302,6 @@ async function runHealth(global, options = {}) {
|
|
|
1274
1302
|
export {
|
|
1275
1303
|
runHealth
|
|
1276
1304
|
};
|
|
1277
|
-
//# sourceMappingURL=health-
|
|
1305
|
+
//# sourceMappingURL=health-4ZYB3IYQ.js.map
|
|
1278
1306
|
|
|
1279
|
-
//# debugId=
|
|
1307
|
+
//# debugId=c3f5d149-5ae7-5c20-908e-5cdf4be91693
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../cli/commands/health.ts"],"sourcesContent":["import 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 EXTENSION_CAPABILITY_CONTRACT,\n KNOWN_EXTENSION_CAPABILITIES,\n parseLegacyExtensionCapabilityAliasWarning,\n parseUnknownExtensionCapabilityWarning,\n type LoadedExtension,\n type UnknownExtensionCapabilityWarningDetails,\n} from \"../../core/extensions/loader.js\";\nimport { enforceHistoryStreamPolicyForItems } from \"../../core/history/history-stream-policy.js\";\nimport { scanHistoryDrift } from \"../../core/history/drift-scan.js\";\nimport {\n readVectorizationStatusLedger,\n refreshSemanticEmbeddingsForMutatedItems,\n} from \"../../core/search/cache.js\";\nimport { resolveEmbeddingProviders } 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 { listAllFrontMatter, listAllFrontMatterWithBody } from \"../../core/store/item-store.js\";\nimport { TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS, TELEMETRY_SCHEMA_VERSION } from \"../../core/telemetry/runtime.js\";\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 { ItemFormat, ItemMetadata, PmSettings } from \"../../types/index.js\";\nimport { readManagedExtensionState } from \"./extension.js\";\nimport { buildRegistrationCollisionRemediation } from \"./extension/doctor.js\";\n\ntype HealthStatus = \"ok\" | \"warn\";\ntype MigrationRuntimeStatus = \"pending\" | \"failed\" | \"applied\";\n\nexport interface HealthCheck {\n name:\n | \"settings\"\n | \"directories\"\n | \"settings_values\"\n | \"telemetry\"\n | \"extensions\"\n | \"storage\"\n | \"integrity\"\n | \"history_drift\"\n | \"vectorization\";\n status: HealthStatus;\n details: Record<string, unknown>;\n}\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\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`.\n */\nfunction isAdvisoryHealthWarning(warning: string): boolean {\n return warning.startsWith(\"telemetry_\");\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 collectUnknownCapabilityGuidance(warnings: string[]): UnknownExtensionCapabilityWarningDetails[] {\n const seen = new Set<string>();\n const guidance: UnknownExtensionCapabilityWarningDetails[] = [];\n for (const warning of warnings) {\n const parsedDetails = (() => {\n const unknownWarning = parseUnknownExtensionCapabilityWarning(warning);\n if (unknownWarning) {\n return [unknownWarning];\n }\n return parseLegacyExtensionCapabilityAliasWarning(warning);\n })();\n for (const parsed of parsedDetails) {\n const key = `${parsed.layer}:${parsed.name}:${parsed.capability}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n guidance.push(parsed);\n }\n }\n return guidance;\n}\n\nfunction buildCapabilityContractMetadata(): {\n version: number;\n capabilities: string[];\n legacy_aliases: Record<string, string>;\n} {\n return {\n version: EXTENSION_CAPABILITY_CONTRACT.version,\n capabilities: [...EXTENSION_CAPABILITY_CONTRACT.capabilities],\n legacy_aliases: { ...EXTENSION_CAPABILITY_CONTRACT.legacy_aliases },\n };\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\nasync function countHistoryStreams(pmRoot: string): Promise<{ count: number; warnings: string[] }> {\n const historyDir = path.join(pmRoot, \"history\");\n if (!(await isDirectory(historyDir))) {\n return {\n count: 0,\n warnings: [],\n };\n }\n const historyFiles = (await fs.readdir(historyDir))\n .filter((entry) => entry.endsWith(\".jsonl\"))\n .sort((left, right) => left.localeCompare(right));\n\n const warnings: string[] = [];\n for (const fileName of historyFiles) {\n warnings.push(\n ...(await runActiveOnReadHooks({\n path: path.join(historyDir, fileName),\n scope: \"project\",\n })),\n );\n }\n\n return {\n count: historyFiles.length,\n warnings,\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 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 parseItemDocument(raw, { format: getItemFormatFromPath(itemPath) as ItemFormat, schema, extensionFieldNames });\n } catch {\n itemParseFailures.push(relativePath);\n }\n }\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 if (!(typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === \"ENOENT\")) {\n historyUnreadable.push(\"history\");\n }\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 ];\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 },\n item_unreadable: itemUnreadable,\n item_conflict_markers: itemConflictMarkers,\n item_parse_failures: itemParseFailures,\n history_unreadable: historyUnreadable,\n history_conflict_markers: historyConflictMarkers,\n history_invalid_json: historyInvalidJson,\n },\n },\n warnings: normalizedWarnings,\n };\n}\n\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\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 if (Array.isArray(extension.capabilities)) {\n summary.capabilities = [...extension.capabilities];\n }\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\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\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 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 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\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 === \"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\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}\n\nfunction telemetryEnvFlagEnabled(envKey: \"PM_TELEMETRY_DISABLED\" | \"PM_TELEMETRY_OTEL_DISABLED\" | \"PM_NO_TELEMETRY\"): boolean {\n const value = (process.env[envKey] ?? \"\").trim().toLowerCase();\n return value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\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 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 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 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 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\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 endpoint_probe: endpointProbe ?? {\n attempted: false,\n },\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 },\n },\n },\n warnings,\n };\n}\n\nasync function buildHistoryDriftCheck(\n pmRoot: string,\n items: ItemWithBody[],\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const { missingStreams, unreadableStreams, hashMismatches, chainMismatches, driftedItems } = await scanHistoryDrift(\n pmRoot,\n items,\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 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 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 vector_store_active: vectorStoreResolution.active?.name ?? null,\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}\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\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);\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 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: \"ok\",\n details: {\n items: items.length,\n history_streams: historySummary.count,\n },\n },\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 ...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 const checkRemediationSources: Partial<Record<HealthCheck[\"name\"], string[]>> = {\n settings: normalizedSettingsReadWarnings,\n directories: missingDirs.map((dir) => `missing_directory:${dir}`),\n settings_values: settingWarnings,\n telemetry: telemetryCheck.warnings,\n integrity: integrityCheck.warnings,\n history_drift: historyDriftCheck.warnings,\n vectorization: vectorizationCheck.warnings,\n };\n for (const check of checks) {\n const sources = checkRemediationSources[check.name];\n if (sources === undefined) {\n continue;\n }\n const remediationMap = buildRemediationMap(sources);\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"],"names":[],"mappings":"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","debugId":"c3f5d149-5ae7-5c20-908e-5cdf4be91693"}
|
|
@@ -1,44 +1,47 @@
|
|
|
1
1
|
import {
|
|
2
2
|
buildRemediationMap,
|
|
3
3
|
scanHistoryDrift
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-LCSCXBGT.js";
|
|
5
5
|
import {
|
|
6
6
|
collectStaleVectorizationIds
|
|
7
7
|
} from "./chunk-QAJBIGRA.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-XMBI6TNW.js";
|
|
9
9
|
import {
|
|
10
|
+
TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS,
|
|
10
11
|
TELEMETRY_SCHEMA_VERSION
|
|
11
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-GKIZW7SM.js";
|
|
12
13
|
import {
|
|
13
14
|
buildRegistrationCollisionRemediation,
|
|
14
15
|
readManagedExtensionState
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
import "./chunk-
|
|
16
|
+
} from "./chunk-KWAXVAXX.js";
|
|
17
|
+
import "./chunk-ZLMIWZUG.js";
|
|
17
18
|
import {
|
|
19
|
+
buildVectorizationEmbeddingIdentity,
|
|
20
|
+
hasVectorizationEmbeddingIdentityChanged,
|
|
18
21
|
readVectorizationStatusLedger,
|
|
19
22
|
refreshSemanticEmbeddingsForMutatedItems,
|
|
20
23
|
resolveEmbeddingProviders,
|
|
21
24
|
resolveSettingsWithSemanticRuntimeDefaults,
|
|
22
25
|
resolveVectorStores
|
|
23
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-7UGSRQCL.js";
|
|
24
27
|
import "./chunk-3HUE7XOF.js";
|
|
25
28
|
import {
|
|
26
29
|
collectRegisteredItemFieldNames,
|
|
27
30
|
enforceHistoryStreamPolicyForItems,
|
|
28
31
|
listAllFrontMatter,
|
|
29
32
|
listAllFrontMatterWithBody
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import "./chunk-
|
|
33
|
+
} from "./chunk-3KLPFWZ4.js";
|
|
34
|
+
import "./chunk-VPEAS7PS.js";
|
|
32
35
|
import {
|
|
33
36
|
findFirstMergeConflictMarker,
|
|
34
37
|
parseItemDocument
|
|
35
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-73ZPG2I3.js";
|
|
36
39
|
import {
|
|
37
40
|
resolveItemTypeRegistry
|
|
38
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-5SCT2JCT.js";
|
|
39
42
|
import {
|
|
40
43
|
nowIso
|
|
41
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-IUKD4W6Z.js";
|
|
42
45
|
import {
|
|
43
46
|
EXIT_CODE,
|
|
44
47
|
EXTENSION_CAPABILITY_CONTRACT,
|
|
@@ -61,7 +64,7 @@ import {
|
|
|
61
64
|
resolvePmRoot,
|
|
62
65
|
runActiveOnReadHooks,
|
|
63
66
|
toNonEmptyStringOrUndefined
|
|
64
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-FY4SPXSC.js";
|
|
65
68
|
|
|
66
69
|
// dist/cli/commands/health.js
|
|
67
70
|
import fs from "node:fs/promises";
|
|
@@ -69,7 +72,7 @@ import path from "node:path";
|
|
|
69
72
|
!(function() {
|
|
70
73
|
try {
|
|
71
74
|
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
72
|
-
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "
|
|
75
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "aa444802-31ea-5656-a3d6-8ed0ea39244f");
|
|
73
76
|
} catch (e2) {
|
|
74
77
|
}
|
|
75
78
|
})();
|
|
@@ -79,6 +82,7 @@ var TELEMETRY_QUEUE_RELATIVE_PATH = path.join("runtime", "telemetry", "events.js
|
|
|
79
82
|
var TELEMETRY_STATE_RELATIVE_PATH = path.join("runtime", "telemetry", "state.json");
|
|
80
83
|
var TELEMETRY_ENDPOINT_PROBE_TIMEOUT_MS = 2500;
|
|
81
84
|
var TELEMETRY_QUEUE_HIGH_WATER_MARK = 500;
|
|
85
|
+
var TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD = TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS - 3;
|
|
82
86
|
var TELEMETRY_SERVER_MAX_SCHEMA_VERSION_HEADERS = [
|
|
83
87
|
"x-pm-telemetry-max-schema-version",
|
|
84
88
|
"x-pm-telemetry-max-version"
|
|
@@ -838,6 +842,8 @@ function parseTelemetryQueue(raw) {
|
|
|
838
842
|
let validEntries = 0;
|
|
839
843
|
let invalidRows = 0;
|
|
840
844
|
let totalRows = 0;
|
|
845
|
+
let highRetryEntries = 0;
|
|
846
|
+
let maxAttempts = 0;
|
|
841
847
|
for (const line of raw.split("\n")) {
|
|
842
848
|
const trimmed = line.trim();
|
|
843
849
|
if (trimmed.length === 0) {
|
|
@@ -846,8 +852,13 @@ function parseTelemetryQueue(raw) {
|
|
|
846
852
|
totalRows += 1;
|
|
847
853
|
try {
|
|
848
854
|
const parsed = JSON.parse(trimmed);
|
|
849
|
-
if (typeof parsed === "object" && parsed !== null && typeof parsed.attempts === "number") {
|
|
855
|
+
if (typeof parsed === "object" && parsed !== null && typeof parsed.attempts === "number" && Number.isFinite(parsed.attempts)) {
|
|
856
|
+
const attempts = Math.max(0, Math.trunc(parsed.attempts));
|
|
850
857
|
validEntries += 1;
|
|
858
|
+
maxAttempts = Math.max(maxAttempts, attempts);
|
|
859
|
+
if (attempts >= TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD) {
|
|
860
|
+
highRetryEntries += 1;
|
|
861
|
+
}
|
|
851
862
|
} else {
|
|
852
863
|
invalidRows += 1;
|
|
853
864
|
}
|
|
@@ -858,7 +869,9 @@ function parseTelemetryQueue(raw) {
|
|
|
858
869
|
return {
|
|
859
870
|
validEntries,
|
|
860
871
|
invalidRows,
|
|
861
|
-
totalRows
|
|
872
|
+
totalRows,
|
|
873
|
+
highRetryEntries,
|
|
874
|
+
maxAttempts
|
|
862
875
|
};
|
|
863
876
|
}
|
|
864
877
|
async function probeTelemetryEndpointHealth(endpoint) {
|
|
@@ -905,7 +918,7 @@ async function buildTelemetryCheck(settings, options) {
|
|
|
905
918
|
const queueRaw = await readFileIfExists(queuePath);
|
|
906
919
|
const queueExists = queueRaw !== null;
|
|
907
920
|
const queueSizeBytes = queueRaw ? Buffer.byteLength(queueRaw, "utf8") : 0;
|
|
908
|
-
const queueSummary = queueRaw ? parseTelemetryQueue(queueRaw) : { validEntries: 0, invalidRows: 0, totalRows: 0 };
|
|
921
|
+
const queueSummary = queueRaw ? parseTelemetryQueue(queueRaw) : { validEntries: 0, invalidRows: 0, totalRows: 0, highRetryEntries: 0, maxAttempts: 0 };
|
|
909
922
|
const stateRaw = await readFileIfExists(statePath);
|
|
910
923
|
let runtimeState = {};
|
|
911
924
|
let stateParseFailed = false;
|
|
@@ -945,9 +958,13 @@ async function buildTelemetryCheck(settings, options) {
|
|
|
945
958
|
const activeFailure = lastFailure && (!lastSuccess || lastFailure > lastSuccess);
|
|
946
959
|
const neverFlushed = !lastSuccess;
|
|
947
960
|
const highWater = queueSummary.validEntries >= TELEMETRY_QUEUE_HIGH_WATER_MARK;
|
|
961
|
+
const highRetries = queueSummary.highRetryEntries > 0;
|
|
948
962
|
if (activeFailure || neverFlushed || highWater) {
|
|
949
963
|
warnings.push(`telemetry_queue_pending:${queueSummary.validEntries}`);
|
|
950
964
|
}
|
|
965
|
+
if (highRetries) {
|
|
966
|
+
warnings.push(`telemetry_queue_high_retries:${queueSummary.highRetryEntries}`);
|
|
967
|
+
}
|
|
951
968
|
}
|
|
952
969
|
if (endpointProbe && !endpointProbe.ok) {
|
|
953
970
|
if (typeof endpointProbe.status === "number") {
|
|
@@ -972,10 +989,13 @@ async function buildTelemetryCheck(settings, options) {
|
|
|
972
989
|
queue_path: queuePath,
|
|
973
990
|
queue_exists: queueExists,
|
|
974
991
|
queue_entries: queueSummary.validEntries,
|
|
975
|
-
queue_draining: queueHasEntries && warnings.every((
|
|
992
|
+
queue_draining: queueHasEntries && warnings.every((warning) => !warning.startsWith("telemetry_queue_pending:") && !warning.startsWith("telemetry_queue_high_retries:")),
|
|
976
993
|
queue_invalid_rows: queueSummary.invalidRows,
|
|
977
994
|
queue_rows_total: queueSummary.totalRows,
|
|
978
995
|
queue_size_bytes: queueSizeBytes,
|
|
996
|
+
queue_high_retry_entries: queueSummary.highRetryEntries,
|
|
997
|
+
queue_high_retry_threshold: TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD,
|
|
998
|
+
queue_max_attempts: queueSummary.maxAttempts,
|
|
979
999
|
runtime_state_path: statePath,
|
|
980
1000
|
last_attempted_flush_at: runtimeState.last_attempted_flush_at ?? null,
|
|
981
1001
|
last_successful_flush_at: runtimeState.last_successful_flush_at ?? null,
|
|
@@ -1029,6 +1049,7 @@ async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, v
|
|
|
1029
1049
|
const runtimeDefaults = resolveSettingsWithSemanticRuntimeDefaults(settings);
|
|
1030
1050
|
const providerResolution = resolveEmbeddingProviders(runtimeDefaults.settings);
|
|
1031
1051
|
const vectorStoreResolution = resolveVectorStores(runtimeDefaults.settings);
|
|
1052
|
+
const runtimeEmbeddingIdentity = providerResolution.active ? buildVectorizationEmbeddingIdentity(providerResolution.active.name, providerResolution.active.model) : null;
|
|
1032
1053
|
const semanticRuntimeAvailable = Boolean(providerResolution.active && vectorStoreResolution.active);
|
|
1033
1054
|
const ledgerBefore = await readVectorizationStatusLedger(pmRoot);
|
|
1034
1055
|
const staleBefore = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerBefore.entries) : [];
|
|
@@ -1046,12 +1067,16 @@ async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, v
|
|
|
1046
1067
|
const ledgerAfter = await readVectorizationStatusLedger(pmRoot);
|
|
1047
1068
|
const staleAfter = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerAfter.entries) : [];
|
|
1048
1069
|
const strictVectorizationWarnings = !runtimeDefaults.auto_ollama_defaults_applied;
|
|
1070
|
+
const embeddingIdentityChanged = strictVectorizationWarnings && semanticRuntimeAvailable && Boolean(ledgerBefore.embedding && runtimeEmbeddingIdentity && hasVectorizationEmbeddingIdentityChanged(ledgerBefore.embedding, runtimeEmbeddingIdentity));
|
|
1049
1071
|
const warningSet = /* @__PURE__ */ new Set([...ledgerBefore.warnings, ...ledgerAfter.warnings]);
|
|
1050
1072
|
if (strictVectorizationWarnings) {
|
|
1051
1073
|
for (const warning of refreshResult.warnings) {
|
|
1052
1074
|
warningSet.add(warning);
|
|
1053
1075
|
}
|
|
1054
1076
|
}
|
|
1077
|
+
if (embeddingIdentityChanged) {
|
|
1078
|
+
warningSet.add("vectorization_embedding_identity_changed");
|
|
1079
|
+
}
|
|
1055
1080
|
if (strictVectorizationWarnings && semanticRuntimeAvailable && staleAfter.length > 0) {
|
|
1056
1081
|
warningSet.add(`vectorization_stale_items_remaining:${staleAfter.length}`);
|
|
1057
1082
|
}
|
|
@@ -1074,6 +1099,9 @@ async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, v
|
|
|
1074
1099
|
},
|
|
1075
1100
|
provider_active: providerResolution.active?.name ?? null,
|
|
1076
1101
|
vector_store_active: vectorStoreResolution.active?.name ?? null,
|
|
1102
|
+
embedding_identity_changed: embeddingIdentityChanged,
|
|
1103
|
+
embedding_identity_before: ledgerBefore.embedding ?? null,
|
|
1104
|
+
embedding_identity_runtime: runtimeEmbeddingIdentity ?? null,
|
|
1077
1105
|
items: items.length,
|
|
1078
1106
|
ledger_entries_before: Object.keys(ledgerBefore.entries).length,
|
|
1079
1107
|
stale_items_detail_mode: verboseStaleItems ? "full" : "summary",
|
|
@@ -1279,4 +1307,4 @@ async function runHealth(global2, options = {}) {
|
|
|
1279
1307
|
export {
|
|
1280
1308
|
runHealth
|
|
1281
1309
|
};
|
|
1282
|
-
//# sourceMappingURL=health-
|
|
1310
|
+
//# sourceMappingURL=health-YO5LRWN4.js.map
|