@unbrained/pm-cli 2026.6.10 → 2026.6.12
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 +44 -0
- package/README.md +1 -1
- package/dist/cli/bootstrap-args.d.ts +11 -0
- package/dist/cli/bootstrap-args.js +88 -4
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commands/completion.js +20 -8
- package/dist/cli/commands/completion.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.js +6 -3
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/docs.d.ts +2 -0
- package/dist/cli/commands/docs.js +2 -2
- package/dist/cli/commands/docs.js.map +1 -1
- package/dist/cli/commands/files.d.ts +2 -0
- package/dist/cli/commands/files.js +2 -2
- package/dist/cli/commands/files.js.map +1 -1
- package/dist/cli/commands/health.d.ts +1 -1
- package/dist/cli/commands/health.js +77 -2
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history-repair.d.ts +36 -0
- package/dist/cli/commands/history-repair.js +68 -3
- package/dist/cli/commands/history-repair.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -1
- package/dist/cli/commands/index.js +3 -3
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/linked-artifacts.d.ts +18 -0
- package/dist/cli/commands/linked-artifacts.js +26 -3
- package/dist/cli/commands/linked-artifacts.js.map +1 -1
- package/dist/cli/commands/plan.d.ts +6 -0
- package/dist/cli/commands/plan.js +93 -32
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +20 -0
- package/dist/cli/commands/validate.js +292 -28
- package/dist/cli/commands/validate.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/help-content.js +7 -3
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/register-mutation.js +47 -16
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +10 -2
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +16 -16
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli-bundle/chunks/{activity-W6TS5F2L.js → activity-XADJOG6G.js} +11 -11
- package/dist/cli-bundle/chunks/activity-XZIUPGZH.js +16 -0
- package/dist/cli-bundle/chunks/{aggregate-UK2WJ4Z3.js → aggregate-6OTS3AOO.js} +10 -10
- package/dist/cli-bundle/chunks/{aggregate-NNJLKGEK.js → aggregate-OD36DJU5.js} +10 -10
- package/dist/cli-bundle/chunks/{append-DHGTLUZW.js → append-JYWO4P7W.js} +8 -8
- package/dist/cli-bundle/chunks/{append-7BS36Z2L.js → append-KG55G7S3.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-GF5XIBUH.js → chunk-35P4GT6E.js} +111 -10
- package/dist/cli-bundle/chunks/chunk-35P4GT6E.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-A6XVYNQJ.js → chunk-37CYVF73.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-XRE4CTNP.js → chunk-3KLPFWZ4.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-WSWOQP3Z.js → chunk-4HFU4UO2.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-UNH3KSHG.js → chunk-4JCSYR6F.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-73PSHEMT.js → chunk-4YFAGDRH.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-7GYMMDDW.js → chunk-5SCT2JCT.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-Q6PSD5DZ.js → chunk-73ZPG2I3.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-XH6RA5A5.js → chunk-7AMK6DOW.js} +15 -15
- package/dist/cli-bundle/chunks/{chunk-XH6RA5A5.js.map → chunk-7AMK6DOW.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-CTW7QAHM.js → chunk-7IYFN5R7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-OSGWBWLK.js → chunk-7UGSRQCL.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-WNMRICXH.js → chunk-A6LXQFO7.js} +4 -3
- package/dist/cli-bundle/chunks/chunk-A6LXQFO7.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-UDWUDUJI.js → chunk-ATEES5SX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-2MKBPWMK.js → chunk-AVGHVVF7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-ZH7C7ZVX.js → chunk-AX4GEVQC.js} +14 -14
- package/dist/cli-bundle/chunks/{chunk-ZH7C7ZVX.js.map → chunk-AX4GEVQC.js.map} +2 -2
- package/dist/cli-bundle/chunks/chunk-C6SAP27O.js +187 -0
- package/dist/cli-bundle/chunks/chunk-C6SAP27O.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-344GDQTH.js → chunk-CCX4RSYZ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-6KQS23TX.js → chunk-CW6E4NAT.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-K45NAJV2.js → chunk-DY6C42S6.js} +9 -9
- package/dist/cli-bundle/chunks/chunk-EKS6O2IR.js +217 -0
- package/dist/cli-bundle/chunks/chunk-EKS6O2IR.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-ANVZCNL5.js → chunk-ESANVZF4.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-6OSG3EMX.js → chunk-EWFY7SLA.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-DMDEC4QP.js → chunk-F75JSIOZ.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-TALBUVWF.js → chunk-FDH2X65L.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-OQGJSCZZ.js → chunk-FY4SPXSC.js} +3 -2
- package/dist/cli-bundle/chunks/chunk-FY4SPXSC.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TZLGCTA5.js → chunk-GKIZW7SM.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-UMWF6ZAS.js → chunk-GWZSYR6X.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KHBRV5JU.js → chunk-HGLC63AU.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-CMEHZD6G.js → chunk-HHHJ2GI3.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-MF6KSSMF.js → chunk-HI7STVF2.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-IEQ3N7WP.js → chunk-I2IJY2NL.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-O64EYNHF.js → chunk-I53JBTJW.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-K7SXBA75.js → chunk-I7NYDZDV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-WBU257Z4.js → chunk-IGVJRZ6H.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-7TW64BS5.js → chunk-IUKD4W6Z.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-DTRIVUTN.js → chunk-KBPQHXWG.js} +21 -8
- package/dist/cli-bundle/chunks/chunk-KBPQHXWG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OVNSQHDG.js → chunk-KWAXVAXX.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-WWEFBBVF.js → chunk-L5EPZQIC.js} +12 -12
- package/dist/cli-bundle/chunks/chunk-NAWVUHXH.js +220 -0
- package/dist/cli-bundle/chunks/chunk-NAWVUHXH.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-6ADVKPVV.js → chunk-OASDW5UI.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-EIS32UA4.js → chunk-OLKBSY4N.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-X3IPJU2O.js → chunk-P5BJOMBB.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-LYL32FT6.js → chunk-P5U5EOMA.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-EAQLLID6.js → chunk-PNYAAB4S.js} +21 -188
- package/dist/cli-bundle/chunks/chunk-PNYAAB4S.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-TV6FZGVK.js → chunk-QJMGRZO2.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-KMMUDSSB.js → chunk-QKW5D45B.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-4H2NDEGJ.js → chunk-QNJSITCX.js} +7 -7
- package/dist/cli-bundle/chunks/chunk-R2OUQVBK.js +190 -0
- package/dist/cli-bundle/chunks/chunk-R2OUQVBK.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-XSCGU4WT.js → chunk-R4VWYWRN.js} +19 -193
- package/dist/cli-bundle/chunks/chunk-R4VWYWRN.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-VSS3CSTF.js → chunk-RXAP6JL5.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-3VTWCBXL.js → chunk-S26FESD4.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-DEYNERFX.js → chunk-S2ZLDYGS.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-QGIWURY3.js → chunk-SO55HRA5.js} +12 -12
- package/dist/cli-bundle/chunks/{chunk-F2PVV7IX.js → chunk-SXKNJPQ7.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-5OMABP7I.js → chunk-TK5VZFHY.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-UY26RIBR.js → chunk-TNAP7EJX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QJ2OIEOC.js → chunk-UIG4TW2H.js} +111 -10
- package/dist/cli-bundle/chunks/chunk-UIG4TW2H.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SNASEDXB.js → chunk-UUWGCWBU.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-6N46IM44.js → chunk-VAOUX6TK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-X5YC5DZM.js → chunk-VFUZV5EB.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-I2FM2SMO.js → chunk-VPEAS7PS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-7DUVDW7C.js → chunk-VSRZRLG3.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-GP6SHEAI.js → chunk-WPDMBIX6.js} +20 -7
- package/dist/cli-bundle/chunks/chunk-WPDMBIX6.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PYULT32I.js → chunk-WUNFKP7M.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LUJQJR7G.js → chunk-XJDGS74Y.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-TXWMLDMG.js → chunk-XMBI6TNW.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-4CYHWHZU.js → chunk-XTKJSVWH.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-T6QLB34N.js → chunk-XUC4C4PT.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-KRZQGRVL.js → chunk-XWMF3POR.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-OROMGSBP.js → chunk-Y3YKK7CY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-D6JZBUZ6.js → chunk-YW6Q3RYZ.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-GRHPU6EM.js → chunk-ZLMIWZUG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5HH6QRH5.js → chunk-ZMW77VWV.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-BE5G7HEL.js → chunk-ZYNJNPYD.js} +4 -4
- package/dist/cli-bundle/chunks/{claim-3TY5LE54.js → claim-2RDYMCTP.js} +10 -10
- package/dist/cli-bundle/chunks/{claim-LM4YY6QQ.js → claim-MJ7DZFC3.js} +10 -10
- package/dist/cli-bundle/chunks/close-4FMAPEMY.js +13 -0
- package/dist/cli-bundle/chunks/{close-CSD4LEMT.js → close-XLEKIQSW.js} +8 -8
- package/dist/cli-bundle/chunks/{close-many-B5SHDX6W.js → close-many-AOD4HSAZ.js} +15 -15
- package/dist/cli-bundle/chunks/{close-many-WRXB5KVY.js → close-many-XKAQY5CQ.js} +15 -15
- package/dist/cli-bundle/chunks/{comments-BDDEK3VW.js → comments-B4RWWDJT.js} +10 -10
- package/dist/cli-bundle/chunks/{comments-A5ALOYTG.js → comments-RN5TG4ZN.js} +10 -10
- package/dist/cli-bundle/chunks/{config-W2NHDNQT.js → config-3JXJ3XZ7.js} +8 -8
- package/dist/cli-bundle/chunks/{config-YUYBMJOW.js → config-FZ4UDC4B.js} +8 -8
- package/dist/cli-bundle/chunks/{context-LRJ74NSU.js → context-L36PIN35.js} +13 -13
- package/dist/cli-bundle/chunks/{context-R2QLOJCK.js → context-QBPO3BFM.js} +13 -13
- package/dist/cli-bundle/chunks/{contracts-HJHR4NCD.js → contracts-2G66IGIA.js} +309 -6
- package/dist/cli-bundle/chunks/contracts-2G66IGIA.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-47X7RYUF.js → contracts-PJCHYSO5.js} +315 -5
- package/dist/cli-bundle/chunks/contracts-PJCHYSO5.js.map +7 -0
- package/dist/cli-bundle/chunks/{copy-P4UVYZ7M.js → copy-ALU5WMHA.js} +7 -7
- package/dist/cli-bundle/chunks/{copy-B7HFOWFB.js → copy-FWIVTLBO.js} +7 -7
- package/dist/cli-bundle/chunks/{create-5ERJF64D.js → create-5433DP3G.js} +13 -13
- package/dist/cli-bundle/chunks/create-VWLWS34Z.js +27 -0
- package/dist/cli-bundle/chunks/{delete-LX3LGBCH.js → delete-IYTIYAJS.js} +7 -7
- package/dist/cli-bundle/chunks/{delete-S3WVK6LP.js → delete-Y2SGJBGY.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-YSM4LZQD.js → deps-6TSPOSGU.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-GWSNH7OZ.js → deps-CZ4PTVXU.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-TG6JMVMY.js → docs-I3BAF5WH.js} +11 -11
- package/dist/cli-bundle/chunks/docs-I3BAF5WH.js.map +1 -0
- package/dist/cli-bundle/chunks/{docs-7RYFBHQD.js → docs-MXLGZUIT.js} +10 -10
- package/dist/cli-bundle/chunks/docs-MXLGZUIT.js.map +7 -0
- package/dist/cli-bundle/chunks/{extension-R3LUKMX7.js → extension-Q34OEWO5.js} +5 -5
- package/dist/cli-bundle/chunks/{extension-VNMRKIHI.js → extension-WH2FOIOZ.js} +5 -5
- package/dist/cli-bundle/chunks/{files-KAKU57OT.js → files-FYP3MDPX.js} +10 -10
- package/dist/cli-bundle/chunks/files-FYP3MDPX.js.map +7 -0
- package/dist/cli-bundle/chunks/{files-QB3EYPMO.js → files-GUXUM2MB.js} +11 -11
- package/dist/cli-bundle/chunks/files-GUXUM2MB.js.map +1 -0
- package/dist/cli-bundle/chunks/{gc-KNUPLPSW.js → gc-FENB2ESG.js} +14 -176
- package/dist/cli-bundle/chunks/gc-FENB2ESG.js.map +1 -0
- package/dist/cli-bundle/chunks/{gc-B747VM4M.js → gc-KGQG66SA.js} +12 -181
- package/dist/cli-bundle/chunks/gc-KGQG66SA.js.map +7 -0
- package/dist/cli-bundle/chunks/{get-GMGLIQ5I.js → get-PCHS7RA6.js} +11 -11
- package/dist/cli-bundle/chunks/{get-SBL6NHYQ.js → get-QARTE6BL.js} +11 -11
- package/dist/cli-bundle/chunks/{health-WWZJ5KJS.js → health-7MTXAVR2.js} +82 -15
- package/dist/cli-bundle/chunks/health-7MTXAVR2.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-IG43Z4KL.js → health-E4D7KGHD.js} +83 -16
- package/dist/cli-bundle/chunks/health-E4D7KGHD.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-XCWRXBXC.js → history-7WUAEWHW.js} +10 -10
- package/dist/cli-bundle/chunks/history-L2FQFRTU.js +20 -0
- package/dist/cli-bundle/chunks/{history-compact-KICKUCR7.js → history-compact-3EJ3L2O7.js} +11 -11
- package/dist/cli-bundle/chunks/{history-compact-IDH7E7VN.js → history-compact-LW27IPFK.js} +11 -11
- package/dist/cli-bundle/chunks/{history-redact-JJWH3QWK.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-N5HXKJOI.js → history-repair-OSQOKJ3E.js} +71 -13
- package/dist/cli-bundle/chunks/history-repair-OSQOKJ3E.js.map +7 -0
- package/dist/cli-bundle/chunks/{history-repair-7HWBZKXN.js → history-repair-SBK7P34V.js} +72 -14
- package/dist/cli-bundle/chunks/history-repair-SBK7P34V.js.map +1 -0
- package/dist/cli-bundle/chunks/init-4BKRHGWW.js +17 -0
- package/dist/cli-bundle/chunks/{init-OQA3TWIS.js → init-S5WEGUJY.js} +9 -9
- package/dist/cli-bundle/chunks/{learnings-L7VQUSVI.js → learnings-HQXSSKZ5.js} +10 -10
- package/dist/cli-bundle/chunks/{learnings-Z4GAIZQ5.js → learnings-XK3P4ZDR.js} +10 -10
- package/dist/cli-bundle/chunks/{list-W5ROBC5U.js → list-6CL3XFT6.js} +10 -10
- package/dist/cli-bundle/chunks/list-BYNN4ZEO.js +19 -0
- package/dist/cli-bundle/chunks/{notes-JJDOEDFK.js → notes-5T6P7C5V.js} +10 -10
- package/dist/cli-bundle/chunks/{notes-SDCK7BEN.js → notes-U5FZCSBT.js} +10 -10
- package/dist/cli-bundle/chunks/{plan-H5HYHMBB.js → plan-2YTQYWGM.js} +63 -23
- package/dist/cli-bundle/chunks/plan-2YTQYWGM.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-W2B5RYR3.js → plan-7IVSICR6.js} +62 -22
- package/dist/cli-bundle/chunks/plan-7IVSICR6.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-QGRFMDWA.js → register-list-query-4UPMHONX.js} +18 -18
- package/dist/cli-bundle/chunks/{register-list-query-V4S23735.js → register-list-query-7VOW2C3W.js} +18 -18
- package/dist/cli-bundle/chunks/{register-mutation-ZPZNJXSA.js → register-mutation-FARSGYRD.js} +64 -47
- package/dist/cli-bundle/chunks/{register-mutation-ZPZNJXSA.js.map → register-mutation-FARSGYRD.js.map} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-I57PLUHA.js → register-mutation-LJDNVREU.js} +65 -48
- package/dist/cli-bundle/chunks/{register-mutation-I57PLUHA.js.map → register-mutation-LJDNVREU.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-operations-KAMLXAF5.js → register-operations-FFTYAL42.js} +38 -34
- package/dist/cli-bundle/chunks/register-operations-FFTYAL42.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-YEN4YEZ2.js → register-operations-HCJKDUA6.js} +37 -33
- package/dist/cli-bundle/chunks/{register-operations-YEN4YEZ2.js.map → register-operations-HCJKDUA6.js.map} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-BZ3TNE3G.js → register-setup-6AVIUOCC.js} +31 -31
- package/dist/cli-bundle/chunks/register-setup-6AVIUOCC.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-WLFL3OUF.js → register-setup-KVNLO5OJ.js} +30 -30
- package/dist/cli-bundle/chunks/register-setup-KVNLO5OJ.js.map +7 -0
- package/dist/cli-bundle/chunks/restore-CHIOQAQL.js +17 -0
- package/dist/cli-bundle/chunks/{restore-RGFSPG4K.js → restore-M6AFHMV4.js} +11 -11
- package/dist/cli-bundle/chunks/{schema-CCDU3RLC.js → schema-76HDZJCC.js} +8 -8
- package/dist/cli-bundle/chunks/{schema-KZASL323.js → schema-AINZ2IMM.js} +8 -8
- package/dist/cli-bundle/chunks/{search-7KSOLI2E.js → search-JMLFQEPJ.js} +10 -10
- package/dist/cli-bundle/chunks/{search-DTL7CO22.js → search-NL3TSCYB.js} +10 -10
- package/dist/cli-bundle/chunks/{stats-QNV7B2CE.js → stats-BKXCBIGT.js} +7 -7
- package/dist/cli-bundle/chunks/{stats-IOXQMGI6.js → stats-UBD56TGK.js} +7 -7
- package/dist/cli-bundle/chunks/{telemetry-NHR5RFXT.js → telemetry-N454RHG5.js} +4 -4
- package/dist/cli-bundle/chunks/{telemetry-IV5C6JOM.js → telemetry-ZJXK3H7X.js} +4 -4
- package/dist/cli-bundle/chunks/{test-PIL2CEEB.js → test-BQAKIXAT.js} +14 -14
- package/dist/cli-bundle/chunks/test-O74JFUH5.js +32 -0
- package/dist/cli-bundle/chunks/{test-all-MFN4MYCV.js → test-all-7LV3I6S5.js} +14 -14
- package/dist/cli-bundle/chunks/{test-all-GRLYHBNP.js → test-all-TDYCCBA4.js} +14 -14
- package/dist/cli-bundle/chunks/{test-runs-7WCSC3TY.js → test-runs-E64M6XS3.js} +5 -5
- package/dist/cli-bundle/chunks/{test-runs-7LRFWWCA.js → test-runs-LXZLULCI.js} +5 -5
- package/dist/cli-bundle/chunks/update-36JM7YZT.js +21 -0
- package/dist/cli-bundle/chunks/update-I246PCLO.js +25 -0
- package/dist/cli-bundle/chunks/{update-many-UYMTVF42.js → update-many-F4IKDWZB.js} +22 -22
- package/dist/cli-bundle/chunks/{update-many-LOTAYUTN.js → update-many-NTWZ5YT3.js} +22 -22
- package/dist/cli-bundle/chunks/{upgrade-ZZSC7CLV.js → upgrade-37F7JKES.js} +5 -5
- package/dist/cli-bundle/chunks/{upgrade-LT2MLLPS.js → upgrade-L32JA4TZ.js} +5 -5
- package/dist/cli-bundle/chunks/{validate-IQIQSKUX.js → validate-46KCRHL7.js} +462 -50
- package/dist/cli-bundle/chunks/validate-46KCRHL7.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-3XRORNMP.js → validate-CRFMPTYD.js} +482 -49
- package/dist/cli-bundle/chunks/validate-CRFMPTYD.js.map +7 -0
- package/dist/cli-bundle/main.js +180 -25
- package/dist/cli-bundle/main.js.map +2 -2
- package/dist/core/diagnostics/remediation.js +19 -6
- package/dist/core/diagnostics/remediation.js.map +1 -1
- package/dist/core/lock/lock-gc.d.ts +31 -0
- package/dist/core/lock/lock-gc.js +120 -62
- package/dist/core/lock/lock-gc.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/constants.js +3 -2
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/telemetry/consent.js +18 -3
- package/dist/core/telemetry/consent.js.map +1 -1
- package/dist/core/validate/fix-planning.d.ts +130 -0
- package/dist/core/validate/fix-planning.js +202 -0
- package/dist/core/validate/fix-planning.js.map +1 -0
- package/dist/core/validate/missing-by-type.d.ts +21 -0
- package/dist/core/validate/missing-by-type.js +39 -0
- package/dist/core/validate/missing-by-type.js.map +1 -0
- package/dist/core/validate/stale-file-classification.d.ts +41 -0
- package/dist/core/validate/stale-file-classification.js +73 -0
- package/dist/core/validate/stale-file-classification.js.map +1 -0
- package/dist/mcp/server.js +74 -266
- 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/tool-parameter-tables.js +38 -2
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +6 -1
- package/dist/sdk/cli-contracts.js +74 -7
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/docs/AGENT_GUIDE.md +7 -2
- package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +25 -2
- package/marketplace.json +1 -1
- package/package.json +1 -1
- 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-5QLX6DHN.js +0 -16
- package/dist/cli-bundle/chunks/chunk-DTRIVUTN.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-EAQLLID6.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-GF5XIBUH.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-GP6SHEAI.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-OQGJSCZZ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-QJ2OIEOC.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WNMRICXH.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-XSCGU4WT.js.map +0 -7
- package/dist/cli-bundle/chunks/close-SIQCDOBR.js +0 -13
- package/dist/cli-bundle/chunks/contracts-47X7RYUF.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-HJHR4NCD.js.map +0 -1
- package/dist/cli-bundle/chunks/create-TXNRPS4K.js +0 -27
- package/dist/cli-bundle/chunks/docs-7RYFBHQD.js.map +0 -7
- package/dist/cli-bundle/chunks/docs-TG6JMVMY.js.map +0 -1
- package/dist/cli-bundle/chunks/files-KAKU57OT.js.map +0 -7
- package/dist/cli-bundle/chunks/files-QB3EYPMO.js.map +0 -1
- package/dist/cli-bundle/chunks/gc-B747VM4M.js.map +0 -7
- package/dist/cli-bundle/chunks/gc-KNUPLPSW.js.map +0 -1
- package/dist/cli-bundle/chunks/health-IG43Z4KL.js.map +0 -1
- package/dist/cli-bundle/chunks/health-WWZJ5KJS.js.map +0 -7
- package/dist/cli-bundle/chunks/history-6UKSZTRT.js +0 -20
- package/dist/cli-bundle/chunks/history-redact-HKYBTK6X.js +0 -19
- package/dist/cli-bundle/chunks/history-repair-7HWBZKXN.js.map +0 -1
- package/dist/cli-bundle/chunks/history-repair-N5HXKJOI.js.map +0 -7
- package/dist/cli-bundle/chunks/init-27JLDUO2.js +0 -17
- package/dist/cli-bundle/chunks/list-6U3CJVXS.js +0 -19
- package/dist/cli-bundle/chunks/plan-H5HYHMBB.js.map +0 -1
- package/dist/cli-bundle/chunks/plan-W2B5RYR3.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-KAMLXAF5.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-BZ3TNE3G.js.map +0 -1
- package/dist/cli-bundle/chunks/register-setup-WLFL3OUF.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-GNI2W5CN.js +0 -17
- package/dist/cli-bundle/chunks/test-4Z37CXW4.js +0 -32
- package/dist/cli-bundle/chunks/update-I4G34LKJ.js +0 -21
- package/dist/cli-bundle/chunks/update-VI5DBZ3G.js +0 -25
- package/dist/cli-bundle/chunks/validate-3XRORNMP.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-IQIQSKUX.js.map +0 -1
- /package/dist/cli-bundle/chunks/{activity-W6TS5F2L.js.map → activity-XADJOG6G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-5QLX6DHN.js.map → activity-XZIUPGZH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-UK2WJ4Z3.js.map → aggregate-6OTS3AOO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-NNJLKGEK.js.map → aggregate-OD36DJU5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-DHGTLUZW.js.map → append-JYWO4P7W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-7BS36Z2L.js.map → append-KG55G7S3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A6XVYNQJ.js.map → chunk-37CYVF73.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XRE4CTNP.js.map → chunk-3KLPFWZ4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WSWOQP3Z.js.map → chunk-4HFU4UO2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UNH3KSHG.js.map → chunk-4JCSYR6F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-73PSHEMT.js.map → chunk-4YFAGDRH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7GYMMDDW.js.map → chunk-5SCT2JCT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Q6PSD5DZ.js.map → chunk-73ZPG2I3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CTW7QAHM.js.map → chunk-7IYFN5R7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OSGWBWLK.js.map → chunk-7UGSRQCL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UDWUDUJI.js.map → chunk-ATEES5SX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2MKBPWMK.js.map → chunk-AVGHVVF7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-344GDQTH.js.map → chunk-CCX4RSYZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6KQS23TX.js.map → chunk-CW6E4NAT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K45NAJV2.js.map → chunk-DY6C42S6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ANVZCNL5.js.map → chunk-ESANVZF4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6OSG3EMX.js.map → chunk-EWFY7SLA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DMDEC4QP.js.map → chunk-F75JSIOZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TALBUVWF.js.map → chunk-FDH2X65L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TZLGCTA5.js.map → chunk-GKIZW7SM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UMWF6ZAS.js.map → chunk-GWZSYR6X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KHBRV5JU.js.map → chunk-HGLC63AU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CMEHZD6G.js.map → chunk-HHHJ2GI3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MF6KSSMF.js.map → chunk-HI7STVF2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IEQ3N7WP.js.map → chunk-I2IJY2NL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-O64EYNHF.js.map → chunk-I53JBTJW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K7SXBA75.js.map → chunk-I7NYDZDV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WBU257Z4.js.map → chunk-IGVJRZ6H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7TW64BS5.js.map → chunk-IUKD4W6Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OVNSQHDG.js.map → chunk-KWAXVAXX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WWEFBBVF.js.map → chunk-L5EPZQIC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6ADVKPVV.js.map → chunk-OASDW5UI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EIS32UA4.js.map → chunk-OLKBSY4N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-X3IPJU2O.js.map → chunk-P5BJOMBB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LYL32FT6.js.map → chunk-P5U5EOMA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TV6FZGVK.js.map → chunk-QJMGRZO2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KMMUDSSB.js.map → chunk-QKW5D45B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4H2NDEGJ.js.map → chunk-QNJSITCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VSS3CSTF.js.map → chunk-RXAP6JL5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3VTWCBXL.js.map → chunk-S26FESD4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DEYNERFX.js.map → chunk-S2ZLDYGS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QGIWURY3.js.map → chunk-SO55HRA5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-F2PVV7IX.js.map → chunk-SXKNJPQ7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5OMABP7I.js.map → chunk-TK5VZFHY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UY26RIBR.js.map → chunk-TNAP7EJX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SNASEDXB.js.map → chunk-UUWGCWBU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6N46IM44.js.map → chunk-VAOUX6TK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-X5YC5DZM.js.map → chunk-VFUZV5EB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-I2FM2SMO.js.map → chunk-VPEAS7PS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7DUVDW7C.js.map → chunk-VSRZRLG3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PYULT32I.js.map → chunk-WUNFKP7M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LUJQJR7G.js.map → chunk-XJDGS74Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TXWMLDMG.js.map → chunk-XMBI6TNW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4CYHWHZU.js.map → chunk-XTKJSVWH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-T6QLB34N.js.map → chunk-XUC4C4PT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KRZQGRVL.js.map → chunk-XWMF3POR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OROMGSBP.js.map → chunk-Y3YKK7CY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D6JZBUZ6.js.map → chunk-YW6Q3RYZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GRHPU6EM.js.map → chunk-ZLMIWZUG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5HH6QRH5.js.map → chunk-ZMW77VWV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BE5G7HEL.js.map → chunk-ZYNJNPYD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-3TY5LE54.js.map → claim-2RDYMCTP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-LM4YY6QQ.js.map → claim-MJ7DZFC3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-SIQCDOBR.js.map → close-4FMAPEMY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-CSD4LEMT.js.map → close-XLEKIQSW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-B5SHDX6W.js.map → close-many-AOD4HSAZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-WRXB5KVY.js.map → close-many-XKAQY5CQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-BDDEK3VW.js.map → comments-B4RWWDJT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-A5ALOYTG.js.map → comments-RN5TG4ZN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-W2NHDNQT.js.map → config-3JXJ3XZ7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-YUYBMJOW.js.map → config-FZ4UDC4B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-LRJ74NSU.js.map → context-L36PIN35.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-R2QLOJCK.js.map → context-QBPO3BFM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-P4UVYZ7M.js.map → copy-ALU5WMHA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-B7HFOWFB.js.map → copy-FWIVTLBO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-5ERJF64D.js.map → create-5433DP3G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-TXNRPS4K.js.map → create-VWLWS34Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-LX3LGBCH.js.map → delete-IYTIYAJS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-S3WVK6LP.js.map → delete-Y2SGJBGY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-YSM4LZQD.js.map → deps-6TSPOSGU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-GWSNH7OZ.js.map → deps-CZ4PTVXU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-R3LUKMX7.js.map → extension-Q34OEWO5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-VNMRKIHI.js.map → extension-WH2FOIOZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-GMGLIQ5I.js.map → get-PCHS7RA6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-SBL6NHYQ.js.map → get-QARTE6BL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-XCWRXBXC.js.map → history-7WUAEWHW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-6UKSZTRT.js.map → history-L2FQFRTU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-KICKUCR7.js.map → history-compact-3EJ3L2O7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-IDH7E7VN.js.map → history-compact-LW27IPFK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-JJWH3QWK.js.map → history-redact-G72A4EJ4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-HKYBTK6X.js.map → history-redact-QWQCX5DZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-27JLDUO2.js.map → init-4BKRHGWW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-OQA3TWIS.js.map → init-S5WEGUJY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-L7VQUSVI.js.map → learnings-HQXSSKZ5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-Z4GAIZQ5.js.map → learnings-XK3P4ZDR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-W5ROBC5U.js.map → list-6CL3XFT6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-6U3CJVXS.js.map → list-BYNN4ZEO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-JJDOEDFK.js.map → notes-5T6P7C5V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-SDCK7BEN.js.map → notes-U5FZCSBT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-list-query-QGRFMDWA.js.map → register-list-query-4UPMHONX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-list-query-V4S23735.js.map → register-list-query-7VOW2C3W.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-GNI2W5CN.js.map → restore-CHIOQAQL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-RGFSPG4K.js.map → restore-M6AFHMV4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-CCDU3RLC.js.map → schema-76HDZJCC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-KZASL323.js.map → schema-AINZ2IMM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-7KSOLI2E.js.map → search-JMLFQEPJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-DTL7CO22.js.map → search-NL3TSCYB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-QNV7B2CE.js.map → stats-BKXCBIGT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{stats-IOXQMGI6.js.map → stats-UBD56TGK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-NHR5RFXT.js.map → telemetry-N454RHG5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{telemetry-IV5C6JOM.js.map → telemetry-ZJXK3H7X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-PIL2CEEB.js.map → test-BQAKIXAT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-4Z37CXW4.js.map → test-O74JFUH5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-MFN4MYCV.js.map → test-all-7LV3I6S5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-GRLYHBNP.js.map → test-all-TDYCCBA4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-7WCSC3TY.js.map → test-runs-E64M6XS3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-7LRFWWCA.js.map → test-runs-LXZLULCI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-I4G34LKJ.js.map → update-36JM7YZT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-VI5DBZ3G.js.map → update-I246PCLO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-UYMTVF42.js.map → update-many-F4IKDWZB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-LOTAYUTN.js.map → update-many-NTWZ5YT3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-ZZSC7CLV.js.map → upgrade-37F7JKES.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-LT2MLLPS.js.map → upgrade-L32JA4TZ.js.map} +0 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
// dist/core/lock/lock-gc.js
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
!(function() {
|
|
5
|
+
try {
|
|
6
|
+
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
7
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "925ee778-ffe1-587a-9916-bdbd16065381");
|
|
8
|
+
} catch (e2) {
|
|
9
|
+
}
|
|
10
|
+
})();
|
|
11
|
+
function parseLock(raw) {
|
|
12
|
+
let parsed;
|
|
13
|
+
try {
|
|
14
|
+
parsed = JSON.parse(raw);
|
|
15
|
+
} catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const candidate = parsed;
|
|
22
|
+
const { id, owner, created_at, ttl_seconds } = candidate;
|
|
23
|
+
if (typeof id !== "string" || typeof owner !== "string" || typeof created_at !== "string" || typeof ttl_seconds !== "number" || !Number.isFinite(ttl_seconds)) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return { id, owner, created_at, ttl_seconds };
|
|
27
|
+
}
|
|
28
|
+
function isErrno(error, code) {
|
|
29
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === code;
|
|
30
|
+
}
|
|
31
|
+
function classifyLockContent(file, raw, nowMs) {
|
|
32
|
+
const lock = parseLock(raw);
|
|
33
|
+
if (lock === null) {
|
|
34
|
+
return {
|
|
35
|
+
detail: "unparseable_json",
|
|
36
|
+
entry: {
|
|
37
|
+
file,
|
|
38
|
+
id: null,
|
|
39
|
+
owner: null,
|
|
40
|
+
created_at: null,
|
|
41
|
+
ttl_seconds: null,
|
|
42
|
+
age_seconds: null,
|
|
43
|
+
stale: false,
|
|
44
|
+
reason: "unparseable"
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const createdAtMs = Date.parse(lock.created_at);
|
|
49
|
+
if (!Number.isFinite(createdAtMs)) {
|
|
50
|
+
return {
|
|
51
|
+
detail: "invalid_timestamp",
|
|
52
|
+
entry: {
|
|
53
|
+
file,
|
|
54
|
+
id: lock.id,
|
|
55
|
+
owner: lock.owner,
|
|
56
|
+
created_at: lock.created_at,
|
|
57
|
+
ttl_seconds: lock.ttl_seconds,
|
|
58
|
+
age_seconds: null,
|
|
59
|
+
stale: false,
|
|
60
|
+
reason: "unparseable"
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const ageMs = nowMs - createdAtMs;
|
|
65
|
+
const age_seconds = Math.floor(ageMs / 1e3);
|
|
66
|
+
const stale = ageMs > lock.ttl_seconds * 1e3;
|
|
67
|
+
return {
|
|
68
|
+
detail: stale ? "expired" : "active",
|
|
69
|
+
entry: {
|
|
70
|
+
file,
|
|
71
|
+
id: lock.id,
|
|
72
|
+
owner: lock.owner,
|
|
73
|
+
created_at: lock.created_at,
|
|
74
|
+
ttl_seconds: lock.ttl_seconds,
|
|
75
|
+
age_seconds,
|
|
76
|
+
stale,
|
|
77
|
+
reason: stale ? "expired" : "active"
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async function scanLockHealth(pmRoot, now) {
|
|
82
|
+
const nowMs = now ?? Date.now();
|
|
83
|
+
const locksDir = path.join(pmRoot, "locks");
|
|
84
|
+
const scan = {
|
|
85
|
+
scanned: 0,
|
|
86
|
+
active_lock_count: 0,
|
|
87
|
+
stale_lock_count: 0,
|
|
88
|
+
unreadable_lock_count: 0,
|
|
89
|
+
unparseable_lock_count: 0
|
|
90
|
+
};
|
|
91
|
+
let dirEntries;
|
|
92
|
+
try {
|
|
93
|
+
const rawDir = await fs.readdir(locksDir);
|
|
94
|
+
dirEntries = rawDir.filter((f) => f.endsWith(".lock")).sort();
|
|
95
|
+
} catch (error) {
|
|
96
|
+
if (isErrno(error, "ENOENT")) {
|
|
97
|
+
return scan;
|
|
98
|
+
}
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
for (const file of dirEntries) {
|
|
102
|
+
let raw;
|
|
103
|
+
try {
|
|
104
|
+
raw = await fs.readFile(path.join(locksDir, file), "utf8");
|
|
105
|
+
} catch (readError) {
|
|
106
|
+
if (isErrno(readError, "ENOENT")) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
scan.scanned += 1;
|
|
110
|
+
scan.unreadable_lock_count += 1;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
scan.scanned += 1;
|
|
114
|
+
const { detail } = classifyLockContent(file, raw, nowMs);
|
|
115
|
+
if (detail === "active") {
|
|
116
|
+
scan.active_lock_count += 1;
|
|
117
|
+
} else if (detail === "expired") {
|
|
118
|
+
scan.stale_lock_count += 1;
|
|
119
|
+
} else {
|
|
120
|
+
scan.unparseable_lock_count += 1;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return scan;
|
|
124
|
+
}
|
|
125
|
+
async function runLockGc(pmRoot, options) {
|
|
126
|
+
const { dryRun, hooks } = options;
|
|
127
|
+
const nowMs = options.now ?? Date.now();
|
|
128
|
+
const locksDir = path.join(pmRoot, "locks");
|
|
129
|
+
const result = {
|
|
130
|
+
scanned: 0,
|
|
131
|
+
removed: [],
|
|
132
|
+
retained: [],
|
|
133
|
+
warnings: [],
|
|
134
|
+
entries: []
|
|
135
|
+
};
|
|
136
|
+
let dirEntries;
|
|
137
|
+
try {
|
|
138
|
+
const raw = await fs.readdir(locksDir);
|
|
139
|
+
dirEntries = raw.filter((f) => f.endsWith(".lock")).sort();
|
|
140
|
+
} catch (error) {
|
|
141
|
+
if (isErrno(error, "ENOENT")) {
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
for (const file of dirEntries) {
|
|
147
|
+
result.scanned += 1;
|
|
148
|
+
const absPath = path.join(locksDir, file);
|
|
149
|
+
const relPath = `locks/${file}`;
|
|
150
|
+
if (hooks?.onRead) {
|
|
151
|
+
const hookWarnings = await hooks.onRead(absPath);
|
|
152
|
+
result.warnings.push(...hookWarnings);
|
|
153
|
+
}
|
|
154
|
+
let raw;
|
|
155
|
+
try {
|
|
156
|
+
raw = await fs.readFile(absPath, "utf8");
|
|
157
|
+
} catch (readError) {
|
|
158
|
+
if (isErrno(readError, "ENOENT")) {
|
|
159
|
+
result.scanned -= 1;
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
result.warnings.push(`lock_unreadable:${file}`);
|
|
163
|
+
result.retained.push(relPath);
|
|
164
|
+
result.entries.push({
|
|
165
|
+
file,
|
|
166
|
+
id: null,
|
|
167
|
+
owner: null,
|
|
168
|
+
created_at: null,
|
|
169
|
+
ttl_seconds: null,
|
|
170
|
+
age_seconds: null,
|
|
171
|
+
stale: false,
|
|
172
|
+
reason: "unparseable"
|
|
173
|
+
});
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
const classified = classifyLockContent(file, raw, nowMs);
|
|
177
|
+
if (classified.detail === "unparseable_json") {
|
|
178
|
+
result.warnings.push(`lock_unparseable:${file}`);
|
|
179
|
+
result.retained.push(relPath);
|
|
180
|
+
result.entries.push(classified.entry);
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
if (classified.detail === "invalid_timestamp") {
|
|
184
|
+
result.warnings.push(`lock_invalid_timestamp:${file}`);
|
|
185
|
+
result.retained.push(relPath);
|
|
186
|
+
result.entries.push(classified.entry);
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (classified.detail === "active") {
|
|
190
|
+
result.retained.push(relPath);
|
|
191
|
+
result.entries.push(classified.entry);
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
if (!dryRun) {
|
|
195
|
+
try {
|
|
196
|
+
await fs.unlink(absPath);
|
|
197
|
+
} catch (unlinkError) {
|
|
198
|
+
if (!isErrno(unlinkError, "ENOENT")) {
|
|
199
|
+
result.warnings.push(`lock_remove_failed:${file}`);
|
|
200
|
+
result.retained.push(relPath);
|
|
201
|
+
result.entries.push(classified.entry);
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (hooks?.onWrite) {
|
|
206
|
+
const hookWarnings = await hooks.onWrite(absPath);
|
|
207
|
+
result.warnings.push(...hookWarnings);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
result.removed.push(relPath);
|
|
211
|
+
result.entries.push(classified.entry);
|
|
212
|
+
}
|
|
213
|
+
return result;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export {
|
|
217
|
+
scanLockHealth,
|
|
218
|
+
runLockGc
|
|
219
|
+
};
|
|
220
|
+
//# sourceMappingURL=chunk-NAWVUHXH.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../core/lock/lock-gc.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * lock-gc.ts — Stale lock file garbage collector.\n *\n * Safety-first policy: if a lock file cannot be read or parsed, it is RETAINED\n * rather than deleted. We only remove locks whose staleness can be conclusively\n * determined from the lock's own embedded `ttl_seconds` field.\n *\n * Staleness formula: (now_ms - Date.parse(created_at)) > ttl_seconds * 1000\n * Zero ttl means any lock older than 0 ms is stale. Negative ttl means always stale.\n */\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport interface StaleLockScanEntry {\n /** e.g. \"pm-abc1.lock\" */\n file: string;\n /** parsed id, or null if unparseable */\n id: string | null;\n owner: string | null;\n created_at: string | null;\n ttl_seconds: number | null;\n /** floor((now - created_at)/1000), null if unparseable */\n age_seconds: number | null;\n /** true only when classified expired */\n stale: boolean;\n reason: \"expired\" | \"active\" | \"unparseable\";\n}\n\nexport interface LockGcHooks {\n onRead?: (lockPath: string) => Promise<string[]> | string[];\n onWrite?: (lockPath: string) => Promise<string[]> | string[];\n}\n\nexport interface LockGcOptions {\n dryRun: boolean;\n /** epoch ms; defaults to Date.now() — injectable for deterministic tests */\n now?: number;\n hooks?: LockGcHooks;\n}\n\nexport interface LockGcResult {\n /** number of *.lock files examined */\n scanned: number;\n /** relative paths like \"locks/pm-abc1.lock\" (removed, or would-remove under dryRun) */\n removed: string[];\n /** relative paths retained (active OR unparseable — never delete what we can't reason about) */\n retained: string[];\n warnings: string[];\n /** one per scanned *.lock file, sorted by file name asc */\n entries: StaleLockScanEntry[];\n}\n\ninterface ParsedLock {\n id: string;\n owner: string;\n created_at: string;\n ttl_seconds: number;\n}\n\nfunction parseLock(raw: string): ParsedLock | null {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n return null;\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return null;\n }\n const candidate = parsed as Record<string, unknown>;\n const { id, owner, created_at, ttl_seconds } = candidate;\n if (\n typeof id !== \"string\" ||\n typeof owner !== \"string\" ||\n typeof created_at !== \"string\" ||\n typeof ttl_seconds !== \"number\" ||\n !Number.isFinite(ttl_seconds)\n ) {\n return null;\n }\n return { id, owner, created_at, ttl_seconds };\n}\n\nfunction isErrno(error: unknown, code: string): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: string }).code === code\n );\n}\n\n/**\n * Fine-grained classification outcome for one readable lock file's content.\n * `unparseable_json` and `invalid_timestamp` both surface as the coarse\n * `reason: \"unparseable\"` on the scan entry (gc retains both), but stay\n * distinct here so callers can emit precise warnings.\n */\nexport type LockClassificationDetail = \"active\" | \"expired\" | \"unparseable_json\" | \"invalid_timestamp\";\n\nexport interface LockContentClassification {\n detail: LockClassificationDetail;\n entry: StaleLockScanEntry;\n}\n\n/**\n * Pure classification of one lock file's raw content against `nowMs`. This is\n * the single staleness/parse policy shared by `pm gc --scope locks` (which acts\n * on it) and the `pm health` locks check (which only reports it).\n */\nexport function classifyLockContent(file: string, raw: string, nowMs: number): LockContentClassification {\n const lock = parseLock(raw);\n if (lock === null) {\n return {\n detail: \"unparseable_json\",\n entry: {\n file,\n id: null,\n owner: null,\n created_at: null,\n ttl_seconds: null,\n age_seconds: null,\n stale: false,\n reason: \"unparseable\",\n },\n };\n }\n const createdAtMs = Date.parse(lock.created_at);\n if (!Number.isFinite(createdAtMs)) {\n return {\n detail: \"invalid_timestamp\",\n entry: {\n file,\n id: lock.id,\n owner: lock.owner,\n created_at: lock.created_at,\n ttl_seconds: lock.ttl_seconds,\n age_seconds: null,\n stale: false,\n reason: \"unparseable\",\n },\n };\n }\n const ageMs = nowMs - createdAtMs;\n const age_seconds = Math.floor(ageMs / 1000);\n const stale = ageMs > lock.ttl_seconds * 1000;\n return {\n detail: stale ? \"expired\" : \"active\",\n entry: {\n file,\n id: lock.id,\n owner: lock.owner,\n created_at: lock.created_at,\n ttl_seconds: lock.ttl_seconds,\n age_seconds,\n stale,\n reason: stale ? \"expired\" : \"active\",\n },\n };\n}\n\nexport interface LockHealthScan {\n /** number of *.lock files examined (ghost files that vanish mid-scan are skipped) */\n scanned: number;\n active_lock_count: number;\n stale_lock_count: number;\n unreadable_lock_count: number;\n /** invalid JSON, wrong shape, or an unparseable created_at timestamp */\n unparseable_lock_count: number;\n}\n\n/**\n * Read-only locks scan for `pm health`: classifies every lock file with the\n * same policy `pm gc --scope locks` uses but never removes anything.\n */\nexport async function scanLockHealth(pmRoot: string, now?: number): Promise<LockHealthScan> {\n const nowMs = now ?? Date.now();\n const locksDir = path.join(pmRoot, \"locks\");\n const scan: LockHealthScan = {\n scanned: 0,\n active_lock_count: 0,\n stale_lock_count: 0,\n unreadable_lock_count: 0,\n unparseable_lock_count: 0,\n };\n\n let dirEntries: string[];\n try {\n const rawDir = await fs.readdir(locksDir);\n dirEntries = rawDir.filter((f) => f.endsWith(\".lock\")).sort();\n } catch (error: unknown) {\n if (isErrno(error, \"ENOENT\")) {\n return scan;\n }\n throw error;\n }\n\n for (const file of dirEntries) {\n let raw: string;\n try {\n raw = await fs.readFile(path.join(locksDir, file), \"utf8\");\n } catch (readError: unknown) {\n if (isErrno(readError, \"ENOENT\")) {\n // Disappeared between readdir and readFile — treat as a ghost; skip quietly.\n continue;\n }\n scan.scanned += 1;\n scan.unreadable_lock_count += 1;\n continue;\n }\n scan.scanned += 1;\n const { detail } = classifyLockContent(file, raw, nowMs);\n if (detail === \"active\") {\n scan.active_lock_count += 1;\n } else if (detail === \"expired\") {\n scan.stale_lock_count += 1;\n } else {\n scan.unparseable_lock_count += 1;\n }\n }\n\n return scan;\n}\n\nexport async function runLockGc(pmRoot: string, options: LockGcOptions): Promise<LockGcResult> {\n const { dryRun, hooks } = options;\n const nowMs = options.now ?? Date.now();\n const locksDir = path.join(pmRoot, \"locks\");\n\n const result: LockGcResult = {\n scanned: 0,\n removed: [],\n retained: [],\n warnings: [],\n entries: [],\n };\n\n let dirEntries: string[];\n try {\n const raw = await fs.readdir(locksDir);\n dirEntries = raw.filter((f) => f.endsWith(\".lock\")).sort();\n } catch (error: unknown) {\n if (isErrno(error, \"ENOENT\")) {\n return result;\n }\n throw error;\n }\n\n for (const file of dirEntries) {\n result.scanned += 1;\n const absPath = path.join(locksDir, file);\n const relPath = `locks/${file}`;\n\n // --- onRead hook ---\n if (hooks?.onRead) {\n const hookWarnings = await hooks.onRead(absPath);\n result.warnings.push(...hookWarnings);\n }\n\n // --- read file ---\n let raw: string;\n try {\n raw = await fs.readFile(absPath, \"utf8\");\n } catch (readError: unknown) {\n if (isErrno(readError, \"ENOENT\")) {\n // Disappeared between readdir and readFile — treat as a ghost; skip quietly.\n result.scanned -= 1;\n continue;\n }\n result.warnings.push(`lock_unreadable:${file}`);\n result.retained.push(relPath);\n result.entries.push({\n file,\n id: null,\n owner: null,\n created_at: null,\n ttl_seconds: null,\n age_seconds: null,\n stale: false,\n reason: \"unparseable\",\n });\n continue;\n }\n\n // --- classify (shared with the read-only pm health locks scan) ---\n const classified = classifyLockContent(file, raw, nowMs);\n if (classified.detail === \"unparseable_json\") {\n result.warnings.push(`lock_unparseable:${file}`);\n result.retained.push(relPath);\n result.entries.push(classified.entry);\n continue;\n }\n if (classified.detail === \"invalid_timestamp\") {\n result.warnings.push(`lock_invalid_timestamp:${file}`);\n result.retained.push(relPath);\n result.entries.push(classified.entry);\n continue;\n }\n if (classified.detail === \"active\") {\n result.retained.push(relPath);\n result.entries.push(classified.entry);\n continue;\n }\n\n // --- stale: remove or preview ---\n if (!dryRun) {\n try {\n await fs.unlink(absPath);\n } catch (unlinkError: unknown) {\n if (!isErrno(unlinkError, \"ENOENT\")) {\n result.warnings.push(`lock_remove_failed:${file}`);\n result.retained.push(relPath);\n result.entries.push(classified.entry);\n continue;\n }\n // ENOENT on unlink = already gone (race); treat as removed\n }\n // onWrite hook after successful removal\n if (hooks?.onWrite) {\n const hookWarnings = await hooks.onWrite(absPath);\n result.warnings.push(...hookWarnings);\n }\n }\n\n result.removed.push(relPath);\n result.entries.push(classified.entry);\n }\n\n return result;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -5,21 +5,21 @@ import {
|
|
|
5
5
|
} from "./chunk-J27KIHTG.js";
|
|
6
6
|
import {
|
|
7
7
|
parseCsvKv
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-I7NYDZDV.js";
|
|
9
9
|
import {
|
|
10
10
|
parseLimit
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-P5U5EOMA.js";
|
|
12
12
|
import {
|
|
13
13
|
locateItem,
|
|
14
14
|
mutateItem,
|
|
15
15
|
readLocatedItem
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-HI7STVF2.js";
|
|
17
17
|
import {
|
|
18
18
|
resolveItemTypeRegistry
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-CCX4RSYZ.js";
|
|
20
20
|
import {
|
|
21
21
|
nowIso
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-WUNFKP7M.js";
|
|
23
23
|
import {
|
|
24
24
|
EXIT_CODE,
|
|
25
25
|
PmCliError,
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
pathExists,
|
|
29
29
|
readSettings,
|
|
30
30
|
resolvePmRoot
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-A6LXQFO7.js";
|
|
32
32
|
|
|
33
33
|
// dist/cli/commands/annotation-command.js
|
|
34
34
|
function limitAnnotationEntries(values, limit) {
|
|
@@ -149,6 +149,6 @@ export {
|
|
|
149
149
|
wrapOwnershipConflict,
|
|
150
150
|
runAnnotationCommand
|
|
151
151
|
};
|
|
152
|
-
//# sourceMappingURL=chunk-
|
|
152
|
+
//# sourceMappingURL=chunk-OASDW5UI.js.map
|
|
153
153
|
|
|
154
154
|
//# debugId=2663dc72-ebe4-5c50-8d4c-28022abebefe
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
BUILTIN_ITEM_TYPE_VALUES
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FY4SPXSC.js";
|
|
4
4
|
|
|
5
5
|
// dist/core/schema/item-types-file.js
|
|
6
6
|
!(function() {
|
|
@@ -218,4 +218,4 @@ export {
|
|
|
218
218
|
buildInvalidTypeHint,
|
|
219
219
|
buildInvalidTypeError
|
|
220
220
|
};
|
|
221
|
-
//# sourceMappingURL=chunk-
|
|
221
|
+
//# sourceMappingURL=chunk-OLKBSY4N.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
} from "./chunk-J27KIHTG.js";
|
|
6
6
|
import {
|
|
7
7
|
readHistoryEntries
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-HGLC63AU.js";
|
|
9
9
|
import {
|
|
10
10
|
EMPTY_REPLAY_DOCUMENT,
|
|
11
11
|
historyEntriesToRaw,
|
|
@@ -13,27 +13,27 @@ import {
|
|
|
13
13
|
replayToItemDocument,
|
|
14
14
|
tryApplyReplayPatch,
|
|
15
15
|
verifyHistoryChain
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-ZYNJNPYD.js";
|
|
17
17
|
import {
|
|
18
18
|
acquireLock,
|
|
19
19
|
createHistoryEntry,
|
|
20
20
|
locateItem,
|
|
21
21
|
readLocatedItem
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-HI7STVF2.js";
|
|
23
23
|
import {
|
|
24
24
|
normalizeItemId,
|
|
25
25
|
normalizeRawItemId
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-ATEES5SX.js";
|
|
27
27
|
import {
|
|
28
28
|
canonicalDocument,
|
|
29
29
|
serializeItemDocument
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-UUWGCWBU.js";
|
|
31
31
|
import {
|
|
32
32
|
resolveItemTypeRegistry
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-CCX4RSYZ.js";
|
|
34
34
|
import {
|
|
35
35
|
nowIso
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-WUNFKP7M.js";
|
|
37
37
|
import {
|
|
38
38
|
EXIT_CODE,
|
|
39
39
|
PmCliError,
|
|
@@ -48,7 +48,7 @@ import {
|
|
|
48
48
|
resolvePmRoot,
|
|
49
49
|
runActiveOnWriteHooks,
|
|
50
50
|
writeFileAtomic
|
|
51
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-A6LXQFO7.js";
|
|
52
52
|
|
|
53
53
|
// dist/cli/commands/history-redact.js
|
|
54
54
|
import fs from "node:fs/promises";
|
|
@@ -535,6 +535,6 @@ export {
|
|
|
535
535
|
resolveHistorySubject,
|
|
536
536
|
runHistoryRedact
|
|
537
537
|
};
|
|
538
|
-
//# sourceMappingURL=chunk-
|
|
538
|
+
//# sourceMappingURL=chunk-P5BJOMBB.js.map
|
|
539
539
|
|
|
540
540
|
//# debugId=50104455-b180-5239-87c7-308e9abf62a2
|
|
@@ -2,11 +2,11 @@
|
|
|
2
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]="5290e29c-a147-56df-94c4-59907951e37f")}catch(e){}}();
|
|
3
3
|
import {
|
|
4
4
|
resolveTypeName
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-CCX4RSYZ.js";
|
|
6
6
|
import {
|
|
7
7
|
EXIT_CODE,
|
|
8
8
|
PmCliError
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-A6LXQFO7.js";
|
|
10
10
|
|
|
11
11
|
// dist/cli/shared-parsers.js
|
|
12
12
|
function parseLimit(raw, label = "--limit") {
|
|
@@ -52,6 +52,6 @@ export {
|
|
|
52
52
|
parsePriority,
|
|
53
53
|
parseType
|
|
54
54
|
};
|
|
55
|
-
//# sourceMappingURL=chunk-
|
|
55
|
+
//# sourceMappingURL=chunk-P5U5EOMA.js.map
|
|
56
56
|
|
|
57
57
|
//# debugId=5290e29c-a147-56df-94c4-59907951e37f
|
|
@@ -1,185 +1,6 @@
|
|
|
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]="5597e7ea-39ad-5bd4-9a7a-5a7428ea5e27")}catch(e){}}();
|
|
3
|
-
import {
|
|
4
|
-
verifyHistoryChain
|
|
5
|
-
} from "./chunk-BE5G7HEL.js";
|
|
6
|
-
import {
|
|
7
|
-
hashDocument
|
|
8
|
-
} from "./chunk-MF6KSSMF.js";
|
|
9
|
-
import {
|
|
10
|
-
getHistoryPath,
|
|
11
|
-
writeFileAtomic
|
|
12
|
-
} from "./chunk-WNMRICXH.js";
|
|
13
|
-
|
|
14
|
-
// dist/core/history/drift-scan.js
|
|
15
|
-
import fs from "fs/promises";
|
|
16
|
-
import { createHash } from "node:crypto";
|
|
17
|
-
import path from "node:path";
|
|
18
|
-
var DRIFT_CACHE_VERSION = 2;
|
|
19
|
-
var DRIFT_CACHE_FILENAME = "history-drift-cache.json";
|
|
20
|
-
function getDriftCachePath(pmRoot) {
|
|
21
|
-
return path.join(pmRoot, "runtime", DRIFT_CACHE_FILENAME);
|
|
22
|
-
}
|
|
23
|
-
async function loadDriftCache(pmRoot) {
|
|
24
|
-
try {
|
|
25
|
-
const raw = await fs.readFile(getDriftCachePath(pmRoot), "utf8");
|
|
26
|
-
const parsed = JSON.parse(raw);
|
|
27
|
-
if (parsed.version !== DRIFT_CACHE_VERSION || typeof parsed.entries !== "object" || parsed.entries === null) {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
return parsed;
|
|
31
|
-
} catch {
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
function isErrno(error, code) {
|
|
36
|
-
return typeof error === "object" && error !== null && "code" in error && error.code === code;
|
|
37
|
-
}
|
|
38
|
-
function hashContent(raw) {
|
|
39
|
-
return createHash("sha256").update(raw).digest("hex");
|
|
40
|
-
}
|
|
41
|
-
async function readHistoryContentHash(historyPath) {
|
|
42
|
-
const raw = await fs.readFile(historyPath, "utf8");
|
|
43
|
-
return hashContent(raw);
|
|
44
|
-
}
|
|
45
|
-
async function verifyHistoryStream(historyPath) {
|
|
46
|
-
const raw = await fs.readFile(historyPath, "utf8");
|
|
47
|
-
const contentHash = hashContent(raw);
|
|
48
|
-
if (raw.trim().length === 0) {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
const entries = [];
|
|
52
|
-
let latestAfterHash = null;
|
|
53
|
-
for (const line of raw.split(/\r?\n/)) {
|
|
54
|
-
const trimmed = line.trim();
|
|
55
|
-
if (trimmed.length === 0) {
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
const parsed = JSON.parse(trimmed);
|
|
59
|
-
if (typeof parsed.after_hash !== "string" || parsed.after_hash.trim().length === 0) {
|
|
60
|
-
throw new Error("missing after_hash");
|
|
61
|
-
}
|
|
62
|
-
entries.push(parsed);
|
|
63
|
-
latestAfterHash = parsed.after_hash;
|
|
64
|
-
}
|
|
65
|
-
if (!latestAfterHash) {
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
latestAfterHash,
|
|
70
|
-
chainOk: verifyHistoryChain(entries).ok,
|
|
71
|
-
contentHash
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
async function scanHistoryDrift(pmRoot, items) {
|
|
75
|
-
const missingStreams = [];
|
|
76
|
-
const unreadableStreams = [];
|
|
77
|
-
const hashMismatches = [];
|
|
78
|
-
const chainMismatches = [];
|
|
79
|
-
const cache = await loadDriftCache(pmRoot);
|
|
80
|
-
const previousEntries = cache?.entries ?? {};
|
|
81
|
-
const nextEntries = {};
|
|
82
|
-
let cacheDirty = false;
|
|
83
|
-
for (const item of items) {
|
|
84
|
-
const historyPath = getHistoryPath(pmRoot, item.id);
|
|
85
|
-
let stat;
|
|
86
|
-
try {
|
|
87
|
-
stat = await fs.stat(historyPath);
|
|
88
|
-
} catch (error) {
|
|
89
|
-
if (isErrno(error, "ENOENT")) {
|
|
90
|
-
missingStreams.push(item.id);
|
|
91
|
-
} else {
|
|
92
|
-
unreadableStreams.push(item.id);
|
|
93
|
-
}
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
const loadStreamVerification = async () => {
|
|
97
|
-
try {
|
|
98
|
-
return await verifyHistoryStream(historyPath);
|
|
99
|
-
} catch {
|
|
100
|
-
return "unreadable";
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
const loadFreshVerification = async () => {
|
|
104
|
-
const loaded = await loadStreamVerification();
|
|
105
|
-
if (loaded === "unreadable") {
|
|
106
|
-
unreadableStreams.push(item.id);
|
|
107
|
-
return null;
|
|
108
|
-
}
|
|
109
|
-
if (!loaded) {
|
|
110
|
-
missingStreams.push(item.id);
|
|
111
|
-
return null;
|
|
112
|
-
}
|
|
113
|
-
return loaded;
|
|
114
|
-
};
|
|
115
|
-
const cached = previousEntries[item.id];
|
|
116
|
-
let verification;
|
|
117
|
-
const metadataMatchesCache = cached !== void 0 && cached.mtime_ms === stat.mtimeMs && cached.ctime_ms === stat.ctimeMs && cached.size === stat.size;
|
|
118
|
-
const cachedContentHash = typeof cached?.content_hash === "string" && cached.content_hash.length > 0 ? cached.content_hash : void 0;
|
|
119
|
-
const canUseCache = metadataMatchesCache && cachedContentHash !== void 0;
|
|
120
|
-
if (canUseCache && cached) {
|
|
121
|
-
let currentContentHash;
|
|
122
|
-
try {
|
|
123
|
-
currentContentHash = await readHistoryContentHash(historyPath);
|
|
124
|
-
} catch {
|
|
125
|
-
unreadableStreams.push(item.id);
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
if (currentContentHash === cachedContentHash) {
|
|
129
|
-
verification = {
|
|
130
|
-
latestAfterHash: cached.latest_after_hash,
|
|
131
|
-
chainOk: cached.chain_ok,
|
|
132
|
-
contentHash: currentContentHash
|
|
133
|
-
};
|
|
134
|
-
} else {
|
|
135
|
-
cacheDirty = true;
|
|
136
|
-
const refreshed = await loadFreshVerification();
|
|
137
|
-
if (!refreshed) {
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
verification = refreshed;
|
|
141
|
-
}
|
|
142
|
-
} else {
|
|
143
|
-
cacheDirty = true;
|
|
144
|
-
const refreshed = await loadFreshVerification();
|
|
145
|
-
if (!refreshed) {
|
|
146
|
-
continue;
|
|
147
|
-
}
|
|
148
|
-
verification = refreshed;
|
|
149
|
-
}
|
|
150
|
-
if (!verification.chainOk) {
|
|
151
|
-
chainMismatches.push(item.id);
|
|
152
|
-
}
|
|
153
|
-
nextEntries[item.id] = {
|
|
154
|
-
mtime_ms: stat.mtimeMs,
|
|
155
|
-
ctime_ms: stat.ctimeMs,
|
|
156
|
-
size: stat.size,
|
|
157
|
-
content_hash: verification.contentHash,
|
|
158
|
-
latest_after_hash: verification.latestAfterHash,
|
|
159
|
-
chain_ok: verification.chainOk
|
|
160
|
-
};
|
|
161
|
-
const { body, ...frontMatter } = item;
|
|
162
|
-
const currentHash = hashDocument({
|
|
163
|
-
metadata: frontMatter,
|
|
164
|
-
body
|
|
165
|
-
});
|
|
166
|
-
if (currentHash !== verification.latestAfterHash) {
|
|
167
|
-
hashMismatches.push(item.id);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
if (cacheDirty || Object.keys(previousEntries).length !== Object.keys(nextEntries).length) {
|
|
171
|
-
const cachePath = getDriftCachePath(pmRoot);
|
|
172
|
-
try {
|
|
173
|
-
await fs.mkdir(path.dirname(cachePath), { recursive: true });
|
|
174
|
-
await writeFileAtomic(cachePath, JSON.stringify({ version: DRIFT_CACHE_VERSION, entries: nextEntries }));
|
|
175
|
-
} catch {
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
const driftedItems = [.../* @__PURE__ */ new Set([...missingStreams, ...unreadableStreams, ...hashMismatches, ...chainMismatches])].sort((a, b) => a.localeCompare(b));
|
|
179
|
-
return { missingStreams, unreadableStreams, hashMismatches, chainMismatches, driftedItems };
|
|
180
|
-
}
|
|
181
|
-
|
|
182
1
|
// dist/core/diagnostics/remediation.js
|
|
2
|
+
|
|
3
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2348b67c-04ba-55f5-9eed-37c06b56f4cb")}catch(e){}}();
|
|
183
4
|
var REMEDIATION_REGISTRY = Object.freeze([
|
|
184
5
|
// --- pm health: directories ---
|
|
185
6
|
{
|
|
@@ -282,25 +103,38 @@ var REMEDIATION_REGISTRY = Object.freeze([
|
|
|
282
103
|
summary: "A history stream contains Git conflict markers; resolve the markers, then re-anchor the chain."
|
|
283
104
|
},
|
|
284
105
|
// --- pm health: history_drift ---
|
|
106
|
+
// `pm health` rewrites these commands to `pm history-repair --all` in the
|
|
107
|
+
// per-check remediation_map when more than one stream is drifted.
|
|
285
108
|
{
|
|
286
109
|
code: "history_drift_missing_stream",
|
|
287
110
|
command: "pm history-repair <id>",
|
|
288
|
-
summary: "The item has no history stream; re-anchor the chain to rebuild it."
|
|
111
|
+
summary: "The item has no history stream; re-anchor the chain to rebuild it (pm history-repair --all repairs every drifted stream in one pass)."
|
|
289
112
|
},
|
|
290
113
|
{
|
|
291
114
|
code: "history_drift_unreadable_stream",
|
|
292
115
|
command: "pm history-repair <id>",
|
|
293
|
-
summary: "The item's history stream is unreadable; re-anchor the chain."
|
|
116
|
+
summary: "The item's history stream is unreadable; re-anchor the chain (pm history-repair --all repairs every drifted stream in one pass)."
|
|
294
117
|
},
|
|
295
118
|
{
|
|
296
119
|
code: "history_drift_hash_mismatch",
|
|
297
120
|
command: "pm history-repair <id>",
|
|
298
|
-
summary: "The item's content hash no longer matches its history; re-anchor the chain."
|
|
121
|
+
summary: "The item's content hash no longer matches its history; re-anchor the chain (pm history-repair --all repairs every drifted stream in one pass)."
|
|
299
122
|
},
|
|
300
123
|
{
|
|
301
124
|
code: "history_drift_chain_mismatch",
|
|
302
125
|
command: "pm history-repair <id>",
|
|
303
|
-
summary: "The item's history chain is broken; re-anchor the chain."
|
|
126
|
+
summary: "The item's history chain is broken; re-anchor the chain (pm history-repair --all repairs every drifted stream in one pass)."
|
|
127
|
+
},
|
|
128
|
+
// --- pm health: locks ---
|
|
129
|
+
{
|
|
130
|
+
code: "locks_stale_count",
|
|
131
|
+
command: "pm gc --scope locks",
|
|
132
|
+
summary: "Stale item-claim locks (embedded ttl elapsed) can block mutations; sweep them \u2014 gc retains active and unparseable locks."
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
code: "locks_unreadable",
|
|
136
|
+
command: "pm gc --scope locks --dry-run",
|
|
137
|
+
summary: "Some lock files could not be read; preview the sweep and inspect the unreadable files manually \u2014 gc never deletes what it cannot read."
|
|
304
138
|
},
|
|
305
139
|
// --- pm health: vectorization ---
|
|
306
140
|
{
|
|
@@ -467,10 +301,9 @@ function buildRemediationCommands(warnings) {
|
|
|
467
301
|
}
|
|
468
302
|
|
|
469
303
|
export {
|
|
470
|
-
scanHistoryDrift,
|
|
471
304
|
buildRemediationMap,
|
|
472
305
|
buildRemediationCommands
|
|
473
306
|
};
|
|
474
|
-
//# sourceMappingURL=chunk-
|
|
307
|
+
//# sourceMappingURL=chunk-PNYAAB4S.js.map
|
|
475
308
|
|
|
476
|
-
//# debugId=
|
|
309
|
+
//# debugId=2348b67c-04ba-55f5-9eed-37c06b56f4cb
|