@unbrained/pm-cli 2026.5.31 → 2026.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +167 -0
- package/CONTRIBUTING.md +1 -0
- package/README.md +12 -4
- package/dist/cli/argv-utils.js +7 -3
- package/dist/cli/argv-utils.js.map +1 -1
- package/dist/cli/bootstrap-args.d.ts +1 -0
- package/dist/cli/bootstrap-args.js +23 -3
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commands/calendar.js +17 -3
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/close-many.d.ts +63 -0
- package/dist/cli/commands/close-many.js +302 -0
- package/dist/cli/commands/close-many.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +1 -0
- package/dist/cli/commands/completion.js +260 -32
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.d.ts +4 -4
- package/dist/cli/commands/config.js +115 -3
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/contracts.js +193 -162
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.d.ts +1 -0
- package/dist/cli/commands/create.js +77 -114
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/extension/doctor.d.ts +12 -0
- package/dist/cli/commands/extension/doctor.js +97 -2
- package/dist/cli/commands/extension/doctor.js.map +1 -1
- package/dist/cli/commands/extension/scaffold.js +49 -48
- package/dist/cli/commands/extension/scaffold.js.map +1 -1
- package/dist/cli/commands/extension.js +51 -23
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/gc.d.ts +8 -1
- package/dist/cli/commands/gc.js +26 -3
- package/dist/cli/commands/gc.js.map +1 -1
- package/dist/cli/commands/get.js +7 -7
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/health.js +51 -3
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history.d.ts +4 -1
- package/dist/cli/commands/history.js +12 -24
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/index.d.ts +3 -1
- package/dist/cli/commands/index.js +5 -3
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +10 -0
- package/dist/cli/commands/init.js +107 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/list.d.ts +5 -0
- package/dist/cli/commands/list.js +58 -26
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/reindex.js +163 -47
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/repeatable-metadata-parsers.d.ts +15 -0
- package/dist/cli/commands/repeatable-metadata-parsers.js +120 -0
- package/dist/cli/commands/repeatable-metadata-parsers.js.map +1 -0
- package/dist/cli/commands/restore.js +25 -4
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/schema.d.ts +122 -1
- package/dist/cli/commands/schema.js +536 -6
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/search.d.ts +1 -0
- package/dist/cli/commands/search.js +18 -4
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/stats.d.ts +8 -1
- package/dist/cli/commands/stats.js +18 -17
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/telemetry.d.ts +8 -0
- package/dist/cli/commands/telemetry.js +253 -0
- package/dist/cli/commands/telemetry.js.map +1 -0
- package/dist/cli/commands/test.js +4 -3
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.js +69 -140
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +2 -0
- package/dist/cli/commands/update.js +138 -119
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +1 -0
- package/dist/cli/commands/validate.js +63 -33
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/error-guidance.js +26 -3
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/help-content.js +91 -3
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/main.js +377 -23
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +14 -5
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +200 -28
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +31 -6
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +4 -2
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.js +31 -4
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/activity-CVXTCHYY.js +16 -0
- package/dist/cli-bundle/chunks/activity-JM6DTDND.js +20 -0
- package/dist/cli-bundle/chunks/activity-JM6DTDND.js.map +1 -0
- package/dist/cli-bundle/chunks/aggregate-GI7WSZPH.js +206 -0
- package/dist/cli-bundle/chunks/aggregate-GI7WSZPH.js.map +1 -0
- package/dist/cli-bundle/chunks/{aggregate-ADUOSFRO.js → aggregate-VNAHUNNF.js} +11 -11
- package/dist/cli-bundle/chunks/{append-JD2DETU7.js → append-7H5N64R2.js} +8 -9
- package/dist/cli-bundle/chunks/{append-JD2DETU7.js.map → append-7H5N64R2.js.map} +1 -1
- package/dist/cli-bundle/chunks/append-WMKRXKCE.js +69 -0
- package/dist/cli-bundle/chunks/append-WMKRXKCE.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-3M73P3G6.js → chunk-23YFZ3IG.js} +210 -132
- package/dist/cli-bundle/chunks/chunk-23YFZ3IG.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-2HVRUSQA.js +128 -0
- package/dist/cli-bundle/chunks/chunk-2HVRUSQA.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-2RSPZI5H.js +266 -0
- package/dist/cli-bundle/chunks/chunk-2RSPZI5H.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-2VBQ6ZXS.js +631 -0
- package/dist/cli-bundle/chunks/chunk-2VBQ6ZXS.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-2VVCGBNV.js +380 -0
- package/dist/cli-bundle/chunks/chunk-2VVCGBNV.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-3BWOVLTH.js +1664 -0
- package/dist/cli-bundle/chunks/chunk-3BWOVLTH.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6HT2F4TK.js → chunk-3FI4SEFT.js} +175 -54
- package/dist/cli-bundle/chunks/chunk-3FI4SEFT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JULRTHJQ.js → chunk-3LB74A67.js} +119 -6
- package/dist/cli-bundle/chunks/chunk-3LB74A67.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-3VAM3NNM.js +57 -0
- package/dist/cli-bundle/chunks/chunk-3VAM3NNM.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-4LL6TK5B.js +1832 -0
- package/dist/cli-bundle/chunks/chunk-4LL6TK5B.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-52MAOQ6J.js +422 -0
- package/dist/cli-bundle/chunks/chunk-52MAOQ6J.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-5FDATVEZ.js +412 -0
- package/dist/cli-bundle/chunks/chunk-5FDATVEZ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-5SFCOO6B.js +5622 -0
- package/dist/cli-bundle/chunks/chunk-5SFCOO6B.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-U7FMKRXH.js → chunk-6ER6DXH5.js} +37 -16
- package/dist/cli-bundle/chunks/chunk-6ER6DXH5.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-6P6GGMOG.js +218 -0
- package/dist/cli-bundle/chunks/chunk-6P6GGMOG.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-77GFDHGF.js +80 -0
- package/dist/cli-bundle/chunks/chunk-77GFDHGF.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-MD7K4JYF.js → chunk-AO442XLN.js} +26 -15
- package/dist/cli-bundle/chunks/chunk-AO442XLN.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-AY43SBIN.js +751 -0
- package/dist/cli-bundle/chunks/chunk-AY43SBIN.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-D7AOMPRH.js → chunk-BQHUILZS.js} +5 -5
- package/dist/cli-bundle/chunks/chunk-E5FJNAZA.js +242 -0
- package/dist/cli-bundle/chunks/chunk-E5FJNAZA.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-OGZEG5TT.js → chunk-ECCMVXGM.js} +164 -53
- package/dist/cli-bundle/chunks/chunk-ECCMVXGM.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-FRAUKRU2.js +182 -0
- package/dist/cli-bundle/chunks/chunk-FRAUKRU2.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-GCOQW437.js +130 -0
- package/dist/cli-bundle/chunks/chunk-GCOQW437.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-GGYWB3Y2.js +1340 -0
- package/dist/cli-bundle/chunks/chunk-GGYWB3Y2.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-G57E5D7T.js → chunk-GU2ZJ2VV.js} +5 -5
- package/dist/cli-bundle/chunks/chunk-GXSUPCBV.js +231 -0
- package/dist/cli-bundle/chunks/chunk-GXSUPCBV.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-HZGUAH22.js +76 -0
- package/dist/cli-bundle/chunks/chunk-HZGUAH22.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-I2HSTRJF.js +346 -0
- package/dist/cli-bundle/chunks/chunk-I2HSTRJF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-I6BNFU5X.js +140 -0
- package/dist/cli-bundle/chunks/chunk-I6BNFU5X.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-JTWRXG4B.js → chunk-IJGCZSIQ.js} +251 -251
- package/dist/cli-bundle/chunks/chunk-IJGCZSIQ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-IOR7LGF4.js +1491 -0
- package/dist/cli-bundle/chunks/chunk-IOR7LGF4.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-IUV734HF.js +17 -0
- package/dist/cli-bundle/chunks/chunk-IUV734HF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-J27KIHTG.js +15 -0
- package/dist/cli-bundle/chunks/chunk-J27KIHTG.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-AKOOMO3T.js → chunk-KAG77BY3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KBQY3YG5.js → chunk-KJ33AOCY.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-WDPXDQFG.js → chunk-KJE2FOS4.js} +6 -4
- package/dist/cli-bundle/chunks/chunk-KJE2FOS4.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-KWU6HG75.js +3883 -0
- package/dist/cli-bundle/chunks/chunk-KWU6HG75.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-LB3RUL2N.js +1325 -0
- package/dist/cli-bundle/chunks/chunk-LB3RUL2N.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-5HSEP75M.js → chunk-LCM63IXU.js} +18 -6
- package/dist/cli-bundle/chunks/chunk-LCM63IXU.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-LXYVKYMQ.js +24 -0
- package/dist/cli-bundle/chunks/chunk-LXYVKYMQ.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-ME2YH6FN.js +182 -0
- package/dist/cli-bundle/chunks/chunk-ME2YH6FN.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-MITFDD35.js +1809 -0
- package/dist/cli-bundle/chunks/chunk-MITFDD35.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-WJ2NAC37.js → chunk-N7ACFE26.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-NUZ5HKR4.js +332 -0
- package/dist/cli-bundle/chunks/chunk-NUZ5HKR4.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7Y53ZJIQ.js → chunk-OVQCEJPG.js} +22 -3
- package/dist/cli-bundle/chunks/chunk-OVQCEJPG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PXUAZUUY.js → chunk-OZ7NSQHL.js} +12 -11
- package/dist/cli-bundle/chunks/chunk-OZ7NSQHL.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-P53TN6IA.js → chunk-PDDFYW4X.js} +35 -8
- package/dist/cli-bundle/chunks/chunk-PDDFYW4X.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-6YCV7WSL.js → chunk-PIU6RSL3.js} +10 -12
- package/dist/cli-bundle/chunks/{chunk-6YCV7WSL.js.map → chunk-PIU6RSL3.js.map} +1 -1
- package/dist/cli-bundle/chunks/chunk-PO3GSVFV.js +338 -0
- package/dist/cli-bundle/chunks/chunk-PO3GSVFV.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-LRBOHPUE.js → chunk-PRJCELV4.js} +108 -21
- package/dist/cli-bundle/chunks/chunk-PRJCELV4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-GN7IJPCD.js → chunk-PROOHX4K.js} +332 -32
- package/dist/cli-bundle/chunks/chunk-PROOHX4K.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-FQE6XZDB.js → chunk-Q7SPNHLW.js} +54 -32
- package/dist/cli-bundle/chunks/chunk-Q7SPNHLW.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PVNQLCIS.js → chunk-QO7EBBOM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-A7E7PUVX.js → chunk-R6UFP2GE.js} +7 -7
- package/dist/cli-bundle/chunks/chunk-RWPSOIEE.js +154 -0
- package/dist/cli-bundle/chunks/chunk-RWPSOIEE.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-RZN6VURO.js +119 -0
- package/dist/cli-bundle/chunks/chunk-RZN6VURO.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-SKJWX3QB.js +1501 -0
- package/dist/cli-bundle/chunks/chunk-SKJWX3QB.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-CEFIVZPG.js → chunk-T3LC5LKB.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-TCD3R2PF.js +173 -0
- package/dist/cli-bundle/chunks/chunk-TCD3R2PF.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-TPH5XEVD.js +2988 -0
- package/dist/cli-bundle/chunks/chunk-TPH5XEVD.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-LSXGH6NE.js → chunk-U5SXYXSY.js} +821 -200
- package/dist/cli-bundle/chunks/chunk-U5SXYXSY.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-UBOPJT3S.js +540 -0
- package/dist/cli-bundle/chunks/chunk-UBOPJT3S.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-JFWUHHS2.js → chunk-UM2GBHS4.js} +5 -4
- package/dist/cli-bundle/chunks/chunk-W7XABV4H.js +454 -0
- package/dist/cli-bundle/chunks/chunk-W7XABV4H.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SEXQN4KL.js → chunk-WKY2IBOQ.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-WOPXVEZP.js +698 -0
- package/dist/cli-bundle/chunks/chunk-WOPXVEZP.js.map +1 -0
- package/dist/cli-bundle/chunks/chunk-WSMOSYRD.js +1704 -0
- package/dist/cli-bundle/chunks/chunk-WSMOSYRD.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-NGN7UV5K.js → chunk-XLTD2HN3.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-XSJCLN2R.js +131 -0
- package/dist/cli-bundle/chunks/chunk-XSJCLN2R.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js +53 -0
- package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-BUPWJ3IJ.js → chunk-XTGLRY2Y.js} +484 -49
- package/dist/cli-bundle/chunks/chunk-XTGLRY2Y.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-L2FXEKDB.js → chunk-YL2DJGYS.js} +7 -7
- package/dist/cli-bundle/chunks/{claim-EE4TKKCV.js → claim-4DBF6RVG.js} +10 -11
- package/dist/cli-bundle/chunks/{claim-EE4TKKCV.js.map → claim-4DBF6RVG.js.map} +1 -1
- package/dist/cli-bundle/chunks/claim-X2P4IB7J.js +129 -0
- package/dist/cli-bundle/chunks/claim-X2P4IB7J.js.map +1 -0
- package/dist/cli-bundle/chunks/close-3HDWDA3L.js +13 -0
- package/dist/cli-bundle/chunks/close-PTYFA45H.js +17 -0
- package/dist/cli-bundle/chunks/close-PTYFA45H.js.map +1 -0
- package/dist/cli-bundle/chunks/close-many-7CGIDPTJ.js +314 -0
- package/dist/cli-bundle/chunks/close-many-7CGIDPTJ.js.map +7 -0
- package/dist/cli-bundle/chunks/close-many-ERFO6LHR.js +311 -0
- package/dist/cli-bundle/chunks/close-many-ERFO6LHR.js.map +1 -0
- package/dist/cli-bundle/chunks/comments-OONGABK5.js +100 -0
- package/dist/cli-bundle/chunks/comments-OONGABK5.js.map +1 -0
- package/dist/cli-bundle/chunks/{comments-AAKJQ6LW.js → comments-QKBYCWKD.js} +10 -11
- package/dist/cli-bundle/chunks/{comments-AAKJQ6LW.js.map → comments-QKBYCWKD.js.map} +1 -1
- package/dist/cli-bundle/chunks/config-6FXCQKIF.js +1671 -0
- package/dist/cli-bundle/chunks/config-6FXCQKIF.js.map +1 -0
- package/dist/cli-bundle/chunks/{config-V3FZOKLI.js → config-U4RZ4CQB.js} +121 -10
- package/dist/cli-bundle/chunks/config-U4RZ4CQB.js.map +7 -0
- package/dist/cli-bundle/chunks/{context-RZ5QPNJB.js → context-FYYJGFWS.js} +32 -19
- package/dist/cli-bundle/chunks/{context-RZ5QPNJB.js.map → context-FYYJGFWS.js.map} +2 -2
- package/dist/cli-bundle/chunks/context-YMJ3Z2HQ.js +1461 -0
- package/dist/cli-bundle/chunks/context-YMJ3Z2HQ.js.map +1 -0
- package/dist/cli-bundle/chunks/contracts-QDB6OMLQ.js +1278 -0
- package/dist/cli-bundle/chunks/contracts-QDB6OMLQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-YLMH33VU.js → contracts-RFSPGVVJ.js} +198 -162
- package/dist/cli-bundle/chunks/contracts-RFSPGVVJ.js.map +7 -0
- package/dist/cli-bundle/chunks/create-I5L4EYYZ.js +31 -0
- package/dist/cli-bundle/chunks/create-I5L4EYYZ.js.map +1 -0
- package/dist/cli-bundle/chunks/create-JTZNCTQC.js +27 -0
- package/dist/cli-bundle/chunks/delete-7HPGI4GZ.js +55 -0
- package/dist/cli-bundle/chunks/delete-7HPGI4GZ.js.map +1 -0
- package/dist/cli-bundle/chunks/{delete-RHCTEORS.js → delete-VXUPH5RS.js} +7 -8
- package/dist/cli-bundle/chunks/{delete-RHCTEORS.js.map → delete-VXUPH5RS.js.map} +1 -1
- package/dist/cli-bundle/chunks/{deps-MZYCMLAO.js → deps-JSRRWC3Z.js} +7 -8
- package/dist/cli-bundle/chunks/{deps-MZYCMLAO.js.map → deps-JSRRWC3Z.js.map} +1 -1
- package/dist/cli-bundle/chunks/deps-SCZIFK2Z.js +225 -0
- package/dist/cli-bundle/chunks/deps-SCZIFK2Z.js.map +1 -0
- package/dist/cli-bundle/chunks/docs-GJK6K4VP.js +31 -0
- package/dist/cli-bundle/chunks/docs-GJK6K4VP.js.map +1 -0
- package/dist/cli-bundle/chunks/{docs-FXXUCZYU.js → docs-WW4N3MBM.js} +9 -10
- package/dist/cli-bundle/chunks/{docs-FXXUCZYU.js.map → docs-WW4N3MBM.js.map} +1 -1
- package/dist/cli-bundle/chunks/{extension-B4WL7BQU.js → extension-J7IBMFTD.js} +4 -5
- package/dist/cli-bundle/chunks/extension-VDY2U33M.js +28 -0
- package/dist/cli-bundle/chunks/extension-VDY2U33M.js.map +1 -0
- package/dist/cli-bundle/chunks/files-ISZJGILQ.js +282 -0
- package/dist/cli-bundle/chunks/files-ISZJGILQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{files-WVOX67PE.js → files-WKOD326U.js} +9 -10
- package/dist/cli-bundle/chunks/{files-WVOX67PE.js.map → files-WKOD326U.js.map} +1 -1
- package/dist/cli-bundle/chunks/gc-JDVJ6OQ2.js +362 -0
- package/dist/cli-bundle/chunks/gc-JDVJ6OQ2.js.map +1 -0
- package/dist/cli-bundle/chunks/gc-ULPVWMTN.js +372 -0
- package/dist/cli-bundle/chunks/gc-ULPVWMTN.js.map +7 -0
- package/dist/cli-bundle/chunks/get-RV37HT3G.js +194 -0
- package/dist/cli-bundle/chunks/get-RV37HT3G.js.map +1 -0
- package/dist/cli-bundle/chunks/{get-LTK3HOCQ.js → get-WXU6WI5P.js} +16 -17
- package/dist/cli-bundle/chunks/get-WXU6WI5P.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-TCWL55KM.js → health-6L6EH4WR.js} +57 -16
- package/dist/cli-bundle/chunks/health-6L6EH4WR.js.map +7 -0
- package/dist/cli-bundle/chunks/health-LOI2HHKB.js +1271 -0
- package/dist/cli-bundle/chunks/health-LOI2HHKB.js.map +1 -0
- package/dist/cli-bundle/chunks/history-2BA3T5AE.js +20 -0
- package/dist/cli-bundle/chunks/history-PKN67D5O.js +24 -0
- package/dist/cli-bundle/chunks/history-PKN67D5O.js.map +1 -0
- package/dist/cli-bundle/chunks/history-redact-JBZNXHGR.js +19 -0
- package/dist/cli-bundle/chunks/history-redact-V4FOJGS7.js +23 -0
- package/dist/cli-bundle/chunks/history-redact-V4FOJGS7.js.map +1 -0
- package/dist/cli-bundle/chunks/{history-repair-ZWSTDRH2.js → history-repair-HIBCBIKK.js} +12 -14
- package/dist/cli-bundle/chunks/{history-repair-ZWSTDRH2.js.map → history-repair-HIBCBIKK.js.map} +1 -1
- package/dist/cli-bundle/chunks/history-repair-SDMHR7JT.js +193 -0
- package/dist/cli-bundle/chunks/history-repair-SDMHR7JT.js.map +1 -0
- package/dist/cli-bundle/chunks/init-HIVSNX3O.js +16 -0
- package/dist/cli-bundle/chunks/init-P56QYWJF.js +20 -0
- package/dist/cli-bundle/chunks/init-P56QYWJF.js.map +1 -0
- package/dist/cli-bundle/chunks/learnings-GDFRG5J7.js +44 -0
- package/dist/cli-bundle/chunks/learnings-GDFRG5J7.js.map +1 -0
- package/dist/cli-bundle/chunks/{learnings-NXTWE3FR.js → learnings-MIXSESLK.js} +10 -11
- package/dist/cli-bundle/chunks/{learnings-NXTWE3FR.js.map → learnings-MIXSESLK.js.map} +1 -1
- package/dist/cli-bundle/chunks/list-FGOWQMSM.js +24 -0
- package/dist/cli-bundle/chunks/list-FGOWQMSM.js.map +1 -0
- package/dist/cli-bundle/chunks/list-MUSQNMTD.js +20 -0
- package/dist/cli-bundle/chunks/{notes-DFS5ZGOO.js → notes-4XVSH2AZ.js} +10 -11
- package/dist/cli-bundle/chunks/{notes-DFS5ZGOO.js.map → notes-4XVSH2AZ.js.map} +1 -1
- package/dist/cli-bundle/chunks/notes-5UK3GEH2.js +44 -0
- package/dist/cli-bundle/chunks/notes-5UK3GEH2.js.map +1 -0
- package/dist/cli-bundle/chunks/plan-DUMBV3QB.js +1171 -0
- package/dist/cli-bundle/chunks/plan-DUMBV3QB.js.map +1 -0
- package/dist/cli-bundle/chunks/{plan-67AB2PLM.js → plan-SLMODHWX.js} +13 -14
- package/dist/cli-bundle/chunks/{plan-67AB2PLM.js.map → plan-SLMODHWX.js.map} +1 -1
- package/dist/cli-bundle/chunks/register-list-query-POCFZ5JW.js +229 -0
- package/dist/cli-bundle/chunks/register-list-query-POCFZ5JW.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-list-query-UP3VRUFS.js → register-list-query-WST76HSQ.js} +26 -26
- package/dist/cli-bundle/chunks/register-list-query-WST76HSQ.js.map +7 -0
- package/dist/cli-bundle/chunks/register-mutation-N5GSUZJV.js +813 -0
- package/dist/cli-bundle/chunks/register-mutation-N5GSUZJV.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-mutation-YWSBF545.js → register-mutation-OA675SOU.js} +154 -43
- package/dist/cli-bundle/chunks/register-mutation-OA675SOU.js.map +7 -0
- package/dist/cli-bundle/chunks/register-operations-GNHBE5I3.js +383 -0
- package/dist/cli-bundle/chunks/register-operations-GNHBE5I3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-3BDTGSDH.js → register-operations-N3PMHXH5.js} +49 -37
- package/dist/cli-bundle/chunks/register-operations-N3PMHXH5.js.map +7 -0
- package/dist/cli-bundle/chunks/register-setup-JIMPKJKV.js +242 -0
- package/dist/cli-bundle/chunks/register-setup-JIMPKJKV.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-setup-V56GDRUS.js → register-setup-ZHJI2DI3.js} +18 -19
- package/dist/cli-bundle/chunks/{register-setup-V56GDRUS.js.map → register-setup-ZHJI2DI3.js.map} +2 -2
- package/dist/cli-bundle/chunks/restore-D4RGNX33.js +17 -0
- package/dist/cli-bundle/chunks/restore-PBL6T5TW.js +21 -0
- package/dist/cli-bundle/chunks/restore-PBL6T5TW.js.map +1 -0
- package/dist/cli-bundle/chunks/schema-2NOO6NGB.js +780 -0
- package/dist/cli-bundle/chunks/schema-2NOO6NGB.js.map +7 -0
- package/dist/cli-bundle/chunks/schema-EBI4NLUO.js +770 -0
- package/dist/cli-bundle/chunks/schema-EBI4NLUO.js.map +1 -0
- package/dist/cli-bundle/chunks/search-JPUQTVCY.js +1127 -0
- package/dist/cli-bundle/chunks/search-JPUQTVCY.js.map +1 -0
- package/dist/cli-bundle/chunks/{search-HENBL456.js → search-OA6JX27A.js} +25 -16
- package/dist/cli-bundle/chunks/search-OA6JX27A.js.map +7 -0
- package/dist/cli-bundle/chunks/stats-CV54BAWY.js +202 -0
- package/dist/cli-bundle/chunks/stats-CV54BAWY.js.map +1 -0
- package/dist/cli-bundle/chunks/stats-XYB6KTFG.js +212 -0
- package/dist/cli-bundle/chunks/stats-XYB6KTFG.js.map +7 -0
- package/dist/cli-bundle/chunks/telemetry-LMJ7PFUO.js +251 -0
- package/dist/cli-bundle/chunks/telemetry-LMJ7PFUO.js.map +7 -0
- package/dist/cli-bundle/chunks/telemetry-NCMEPJNR.js +248 -0
- package/dist/cli-bundle/chunks/telemetry-NCMEPJNR.js.map +1 -0
- package/dist/cli-bundle/chunks/test-MXX3E5JL.js +31 -0
- package/dist/cli-bundle/chunks/test-WBROAJIE.js +35 -0
- package/dist/cli-bundle/chunks/test-WBROAJIE.js.map +1 -0
- package/dist/cli-bundle/chunks/test-all-N6NSRDTV.js +328 -0
- package/dist/cli-bundle/chunks/test-all-N6NSRDTV.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-all-G2AZOHXI.js → test-all-NTOZ7C3M.js} +13 -14
- package/dist/cli-bundle/chunks/{test-all-G2AZOHXI.js.map → test-all-NTOZ7C3M.js.map} +1 -1
- package/dist/cli-bundle/chunks/test-runs-V6A7LPWZ.js +929 -0
- package/dist/cli-bundle/chunks/test-runs-V6A7LPWZ.js.map +1 -0
- package/dist/cli-bundle/chunks/{test-runs-GX5HTPSF.js → test-runs-WMVTQU3Y.js} +5 -5
- package/dist/cli-bundle/chunks/update-OSV3NAQB.js +25 -0
- package/dist/cli-bundle/chunks/update-OSV3NAQB.js.map +1 -0
- package/dist/cli-bundle/chunks/update-YRXSUGYQ.js +21 -0
- package/dist/cli-bundle/chunks/update-many-EM6OXYGO.js +605 -0
- package/dist/cli-bundle/chunks/update-many-EM6OXYGO.js.map +1 -0
- package/dist/cli-bundle/chunks/{update-many-46HRSP2Q.js → update-many-KGGEYABR.js} +78 -146
- package/dist/cli-bundle/chunks/update-many-KGGEYABR.js.map +7 -0
- package/dist/cli-bundle/chunks/{upgrade-H5HHM5UV.js → upgrade-BLI7XBAJ.js} +5 -7
- package/dist/cli-bundle/chunks/{upgrade-H5HHM5UV.js.map → upgrade-BLI7XBAJ.js.map} +1 -1
- package/dist/cli-bundle/chunks/upgrade-LXPOQKFV.js +266 -0
- package/dist/cli-bundle/chunks/upgrade-LXPOQKFV.js.map +1 -0
- package/dist/cli-bundle/chunks/{validate-TMCVKIGZ.js → validate-AGOAUOVW.js} +61 -48
- package/dist/cli-bundle/chunks/validate-AGOAUOVW.js.map +7 -0
- package/dist/cli-bundle/chunks/validate-L5J6A7YO.js +1120 -0
- package/dist/cli-bundle/chunks/validate-L5J6A7YO.js.map +1 -0
- package/dist/cli-bundle/main.js +534 -1505
- package/dist/cli-bundle/main.js.map +4 -4
- package/dist/core/checkpoint/mutation-checkpoint.d.ts +44 -0
- package/dist/core/checkpoint/mutation-checkpoint.js +119 -0
- package/dist/core/checkpoint/mutation-checkpoint.js.map +1 -0
- package/dist/core/config/positional-value.js +4 -2
- package/dist/core/config/positional-value.js.map +1 -1
- package/dist/core/diagnostics/remediation.d.ts +73 -0
- package/dist/core/diagnostics/remediation.js +328 -0
- package/dist/core/diagnostics/remediation.js.map +1 -0
- package/dist/core/extensions/extension-hook-runtime.js +9 -2
- package/dist/core/extensions/extension-hook-runtime.js.map +1 -1
- package/dist/core/extensions/extension-types.d.ts +60 -4
- package/dist/core/extensions/extension-types.js +2 -2
- package/dist/core/extensions/extension-types.js.map +1 -1
- package/dist/core/extensions/index.d.ts +5 -1
- package/dist/core/extensions/index.js +61 -2
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/item-fields.d.ts +5 -1
- package/dist/core/extensions/item-fields.js +126 -4
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/core/extensions/loader.js +283 -8
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/history/history-diff.d.ts +47 -0
- package/dist/core/history/history-diff.js +152 -0
- package/dist/core/history/history-diff.js.map +1 -0
- package/dist/core/history/history-storage-stats.d.ts +31 -0
- package/dist/core/history/history-storage-stats.js +101 -0
- package/dist/core/history/history-storage-stats.js.map +1 -0
- package/dist/core/item/item-format.d.ts +3 -2
- package/dist/core/item/item-format.js +15 -10
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/status-filter.d.ts +29 -0
- package/dist/core/item/status-filter.js +97 -0
- package/dist/core/item/status-filter.js.map +1 -0
- package/dist/core/item/type-registry.js +4 -2
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/lock/lock-gc.d.ts +46 -0
- package/dist/core/lock/lock-gc.js +194 -0
- package/dist/core/lock/lock-gc.js.map +1 -0
- package/dist/core/output/output.js +17 -5
- package/dist/core/output/output.js.map +1 -1
- package/dist/core/schema/item-types-file.d.ts +15 -0
- package/dist/core/schema/item-types-file.js +27 -2
- package/dist/core/schema/item-types-file.js.map +1 -1
- package/dist/core/schema/runtime-field-filters.js +4 -3
- package/dist/core/schema/runtime-field-filters.js.map +1 -1
- package/dist/core/schema/runtime-field-values.d.ts +1 -1
- package/dist/core/schema/runtime-field-values.js +10 -4
- package/dist/core/schema/runtime-field-values.js.map +1 -1
- package/dist/core/schema/runtime-schema.js +75 -2
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/schema/status-defs-file.d.ts +113 -0
- package/dist/core/schema/status-defs-file.js +260 -0
- package/dist/core/schema/status-defs-file.js.map +1 -0
- package/dist/core/schema/type-workflows.d.ts +64 -0
- package/dist/core/schema/type-workflows.js +98 -0
- package/dist/core/schema/type-workflows.js.map +1 -0
- package/dist/core/search/cache.d.ts +3 -1
- package/dist/core/search/cache.js +104 -28
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/http-client.d.ts +2 -2
- package/dist/core/search/http-client.js +2 -2
- package/dist/core/search/http-client.js.map +1 -1
- package/dist/core/search/vector-stores.d.ts +1 -0
- package/dist/core/search/vector-stores.js +64 -14
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/search/vectorization-metadata.d.ts +13 -0
- package/dist/core/search/vectorization-metadata.js +65 -0
- package/dist/core/search/vectorization-metadata.js.map +1 -0
- package/dist/core/shared/serial-queue.d.ts +12 -0
- package/dist/core/shared/serial-queue.js +43 -0
- package/dist/core/shared/serial-queue.js.map +1 -0
- package/dist/core/shared/serialization.d.ts +1 -0
- package/dist/core/shared/serialization.js +86 -2
- package/dist/core/shared/serialization.js.map +1 -1
- package/dist/core/store/front-matter-cache.js +14 -5
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/item-store.d.ts +2 -0
- package/dist/core/store/item-store.js +61 -6
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings-validator.js +18 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.d.ts +19 -1
- package/dist/core/store/settings.js +130 -10
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/consent.js +3 -3
- package/dist/core/telemetry/consent.js.map +1 -1
- package/dist/core/telemetry/observability.js +5 -4
- package/dist/core/telemetry/observability.js.map +1 -1
- package/dist/core/telemetry/runtime.js +16 -4
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +372 -45
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +16 -2
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-types.js +7 -2
- package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +2 -2
- package/dist/sdk/cli-contracts/enum-contracts.js +6 -2
- package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +1 -0
- package/dist/sdk/cli-contracts/tool-option-contracts.js +53 -3
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +42 -10
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +42 -1
- package/dist/sdk/cli-contracts.js +225 -19
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/errors.d.ts +22 -0
- package/dist/sdk/errors.js +46 -0
- package/dist/sdk/errors.js.map +1 -0
- package/dist/sdk/index.d.ts +2 -1
- package/dist/sdk/index.js +3 -2
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/package-import-adapters.js +14 -3
- package/dist/sdk/package-import-adapters.js.map +1 -1
- package/dist/sdk/runtime.d.ts +1 -0
- package/dist/sdk/runtime.js +3 -2
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/testing.d.ts +77 -0
- package/dist/sdk/testing.js +239 -0
- package/dist/sdk/testing.js.map +1 -0
- package/dist/types.d.ts +19 -0
- package/dist/types.js +3 -2
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +22 -3
- package/docs/ARCHITECTURE.md +11 -1
- package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +118 -7
- package/docs/CONFIGURATION.md +57 -2
- package/docs/EXTENSIONS.md +125 -6
- package/docs/EXTENSION_AUTHOR_CONTRACTS.md +73 -0
- package/docs/ONBOARDING.md +165 -0
- package/docs/QUICKSTART.md +3 -1
- package/docs/README.md +12 -4
- package/docs/RELEASING.md +38 -3
- package/docs/SDK.md +273 -1
- package/docs/TESTING.md +36 -1
- package/docs/examples/policy-restricted-extension/manifest.json +1 -0
- package/docs/examples/starter-extension/index.js +9 -1
- package/docs/examples/starter-extension/manifest.json +1 -0
- package/package.json +16 -7
- package/packages/pm-beads/extensions/beads/index.js +2 -4
- package/packages/pm-beads/extensions/beads/index.ts +43 -33
- package/packages/pm-beads/extensions/beads/manifest.json +12 -1
- package/packages/pm-calendar/README.md +6 -0
- package/packages/pm-calendar/extensions/calendar/index.js +6 -1
- package/packages/pm-calendar/extensions/calendar/index.ts +6 -1
- package/packages/pm-calendar/extensions/calendar/manifest.json +6 -1
- package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +6 -1
- package/packages/pm-guide-shell/README.md +4 -0
- package/packages/pm-guide-shell/extensions/guide-shell/index.js +22 -0
- package/packages/pm-guide-shell/extensions/guide-shell/index.ts +22 -0
- package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +6 -1
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +74 -3
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +84 -4
- package/packages/pm-lifecycle-hooks/README.md +29 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.js +18 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.ts +20 -0
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +9 -0
- package/packages/pm-lifecycle-hooks/package.json +52 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +13 -1
- package/packages/pm-search-advanced/extensions/search-advanced/index.js +69 -1
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +91 -2
- package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +13 -1
- package/packages/pm-templates/extensions/templates/manifest.json +6 -1
- package/packages/pm-todos/extensions/todos/index.js +3 -7
- package/packages/pm-todos/extensions/todos/index.ts +55 -42
- package/packages/pm-todos/extensions/todos/manifest.json +13 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/README.md +7 -4
- package/plugins/pm-claude/agents/pm-coordinator.md +1 -1
- package/plugins/pm-claude/commands/pm-init.md +1 -1
- package/scripts/bundle-cli.mjs +121 -17
- package/dist/cli-bundle/chunks/activity-OWYSUZOY.js +0 -17
- package/dist/cli-bundle/chunks/chunk-3M73P3G6.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-4AEZR5EJ.js +0 -189
- package/dist/cli-bundle/chunks/chunk-4AEZR5EJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5HSEP75M.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-6HT2F4TK.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-7Y53ZJIQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-BUPWJ3IJ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-EGUGFSNX.js +0 -47
- package/dist/cli-bundle/chunks/chunk-EGUGFSNX.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FM26RGSU.js +0 -56
- package/dist/cli-bundle/chunks/chunk-FM26RGSU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-FQE6XZDB.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-GN7IJPCD.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JTWRXG4B.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-JULRTHJQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-LRBOHPUE.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-LSXGH6NE.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-MD7K4JYF.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-OGZEG5TT.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-P53TN6IA.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-PXUAZUUY.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-U7FMKRXH.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-VGICHR7D.js +0 -141
- package/dist/cli-bundle/chunks/chunk-VGICHR7D.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-WDPXDQFG.js.map +0 -7
- package/dist/cli-bundle/chunks/close-XY4CSAYF.js +0 -14
- package/dist/cli-bundle/chunks/config-V3FZOKLI.js.map +0 -7
- package/dist/cli-bundle/chunks/contracts-YLMH33VU.js.map +0 -7
- package/dist/cli-bundle/chunks/create-PZVHRIZQ.js +0 -28
- package/dist/cli-bundle/chunks/gc-JWNF66EC.js +0 -181
- package/dist/cli-bundle/chunks/gc-JWNF66EC.js.map +0 -7
- package/dist/cli-bundle/chunks/get-LTK3HOCQ.js.map +0 -7
- package/dist/cli-bundle/chunks/health-TCWL55KM.js.map +0 -7
- package/dist/cli-bundle/chunks/history-A2JUDXUE.js +0 -21
- package/dist/cli-bundle/chunks/history-redact-ED6RFCPL.js +0 -20
- package/dist/cli-bundle/chunks/init-M2WUB4YH.js +0 -16
- package/dist/cli-bundle/chunks/list-OGWQPC26.js +0 -20
- package/dist/cli-bundle/chunks/register-list-query-UP3VRUFS.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-YWSBF545.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-3BDTGSDH.js.map +0 -7
- package/dist/cli-bundle/chunks/restore-MB2ISME7.js +0 -18
- package/dist/cli-bundle/chunks/schema-Q622KC46.js +0 -119
- package/dist/cli-bundle/chunks/schema-Q622KC46.js.map +0 -7
- package/dist/cli-bundle/chunks/search-HENBL456.js.map +0 -7
- package/dist/cli-bundle/chunks/stats-N6H3YP2F.js +0 -124
- package/dist/cli-bundle/chunks/stats-N6H3YP2F.js.map +0 -7
- package/dist/cli-bundle/chunks/test-VNBDRJ4Z.js +0 -32
- package/dist/cli-bundle/chunks/update-H6SCWNMA.js +0 -22
- package/dist/cli-bundle/chunks/update-many-46HRSP2Q.js.map +0 -7
- package/dist/cli-bundle/chunks/validate-TMCVKIGZ.js.map +0 -7
- /package/dist/cli-bundle/chunks/{activity-OWYSUZOY.js.map → activity-CVXTCHYY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-ADUOSFRO.js.map → aggregate-VNAHUNNF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D7AOMPRH.js.map → chunk-BQHUILZS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-G57E5D7T.js.map → chunk-GU2ZJ2VV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AKOOMO3T.js.map → chunk-KAG77BY3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KBQY3YG5.js.map → chunk-KJ33AOCY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WJ2NAC37.js.map → chunk-N7ACFE26.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PVNQLCIS.js.map → chunk-QO7EBBOM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A7E7PUVX.js.map → chunk-R6UFP2GE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CEFIVZPG.js.map → chunk-T3LC5LKB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JFWUHHS2.js.map → chunk-UM2GBHS4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SEXQN4KL.js.map → chunk-WKY2IBOQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NGN7UV5K.js.map → chunk-XLTD2HN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-L2FXEKDB.js.map → chunk-YL2DJGYS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-XY4CSAYF.js.map → close-3HDWDA3L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-PZVHRIZQ.js.map → create-JTZNCTQC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-B4WL7BQU.js.map → extension-J7IBMFTD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-A2JUDXUE.js.map → history-2BA3T5AE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-ED6RFCPL.js.map → history-redact-JBZNXHGR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-M2WUB4YH.js.map → init-HIVSNX3O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-OGWQPC26.js.map → list-MUSQNMTD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-MB2ISME7.js.map → restore-D4RGNX33.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-VNBDRJ4Z.js.map → test-MXX3E5JL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-GX5HTPSF.js.map → test-runs-WMVTQU3Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-H6SCWNMA.js.map → update-YRXSUGYQ.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../core/telemetry/observability.ts","../../../../../../../../core/telemetry/runtime.ts"],"sourcesContent":["import { EXIT_CODE, type TelemetryErrorCategory } from \"../shared/constants.js\";\n\nexport type TelemetryResolutionStage = \"parse\" | \"preflight\" | \"execute\" | \"unknown\";\n\nexport type TelemetryCommandResolution =\n | \"success\"\n | \"nonexistent_command\"\n | \"invalid_option\"\n | \"missing_required_option\"\n | \"missing_required_argument\"\n | \"invalid_usage\"\n | \"validation_failed\"\n | \"health_findings\"\n | \"validation_findings\"\n | \"conflict\"\n | \"runtime_failed\"\n | \"unknown_failed\";\n\nexport interface TelemetryCommandTaxonomy {\n command_path: string;\n command_root: string;\n command_leaf: string;\n command_depth: number;\n command_family: \"setup\" | \"query\" | \"mutation\" | \"testing\" | \"extension\" | \"diagnostics\" | \"other\";\n}\n\ninterface InferTelemetryErrorCodeParams {\n ok: boolean;\n errorCode?: string;\n errorMessage?: string;\n exitCode?: number;\n}\n\nconst SETUP_ROOT_COMMANDS = new Set([\"init\", \"config\", \"completion\", \"completion-statuses\", \"completion-tags\", \"completion-types\"]);\nconst QUERY_ROOT_COMMANDS = new Set([\n \"list\",\n \"list-all\",\n \"list-open\",\n \"list-in-progress\",\n \"list-blocked\",\n \"list-closed\",\n \"list-canceled\",\n \"list-draft\",\n \"search\",\n \"get\",\n \"context\",\n \"calendar\",\n \"history\",\n \"activity\",\n \"aggregate\",\n \"deps\",\n \"contracts\",\n \"stats\",\n \"dedupe-audit\",\n]);\nconst MUTATION_ROOT_COMMANDS = new Set([\n \"create\",\n \"update\",\n \"update-many\",\n \"close-many\",\n \"append\",\n \"close\",\n \"delete\",\n \"restore\",\n \"claim\",\n \"release\",\n \"comments\",\n \"notes\",\n \"learnings\",\n \"files\",\n \"docs\",\n \"start-task\",\n \"pause-task\",\n \"close-task\",\n]);\nconst TESTING_ROOT_COMMANDS = new Set([\"test\", \"test-all\", \"test-runs\", \"test-verify\", \"trace-test\", \"test-ping\"]);\nconst DIAGNOSTICS_ROOT_COMMANDS = new Set([\"health\", \"validate\", \"normalize\", \"reindex\", \"gc\", \"telemetry\", \"extension-doctor\"]);\n\nfunction normalizeCommandPath(commandPath: string): string {\n return commandPath\n .trim()\n .replaceAll(/\\s+/g, \" \")\n .toLowerCase();\n}\n\nfunction normalizeErrorCode(errorCode: string | undefined): string | undefined {\n const normalized = errorCode?.trim().toLowerCase();\n return normalized && normalized.length > 0 ? normalized : undefined;\n}\n\nexport function deriveTelemetryCommandTaxonomy(commandPath: string): TelemetryCommandTaxonomy {\n const normalizedPath = normalizeCommandPath(commandPath);\n const tokens = normalizedPath.length > 0 ? normalizedPath.split(\" \") : [\"<unknown>\"];\n const root = tokens[0] ?? \"<unknown>\";\n const leaf = tokens[tokens.length - 1] ?? root;\n\n let family: TelemetryCommandTaxonomy[\"command_family\"] = \"other\";\n if (SETUP_ROOT_COMMANDS.has(root)) {\n family = \"setup\";\n } else if (QUERY_ROOT_COMMANDS.has(root)) {\n family = \"query\";\n } else if (MUTATION_ROOT_COMMANDS.has(root)) {\n family = \"mutation\";\n } else if (TESTING_ROOT_COMMANDS.has(root)) {\n family = \"testing\";\n } else if (root === \"extension\") {\n family = \"extension\";\n } else if (DIAGNOSTICS_ROOT_COMMANDS.has(root)) {\n family = \"diagnostics\";\n }\n\n return {\n command_path: normalizedPath.length > 0 ? normalizedPath : \"<unknown>\",\n command_root: root,\n command_leaf: leaf,\n command_depth: tokens.length,\n command_family: family,\n };\n}\n\nexport function inferTelemetryErrorCode(params: InferTelemetryErrorCodeParams): string | undefined {\n if (params.ok) {\n return undefined;\n }\n\n const explicit = normalizeErrorCode(params.errorCode);\n if (explicit) {\n return explicit;\n }\n\n const message = (params.errorMessage ?? \"\").trim().toLowerCase();\n if (message.includes(\"unknown command\")) {\n return \"unknown_command\";\n }\n if (message.includes(\"unknown option\")) {\n return \"unknown_option\";\n }\n if (message.includes(\"missing required options\") || message.includes(\"missing required option\")) {\n return \"missing_required_option\";\n }\n if (message.includes(\"missing required argument\")) {\n return \"missing_required_argument\";\n }\n if (message.includes(\"no update flags provided\")) {\n return \"no_update_fields\";\n }\n if (message.includes(\"is assigned to\") && message.includes(\"use --force\")) {\n return \"ownership_conflict\";\n }\n if (message.includes(\"is locked\")) {\n return \"lock_conflict\";\n }\n if (message.includes(\"already terminal\") && message.includes(\"use --force\")) {\n return \"terminal_state_conflict\";\n }\n if (message.includes(\"tracker is not initialized\")) {\n return \"tracker_not_initialized\";\n }\n if (message.includes(\" not found\")) {\n return \"item_not_found\";\n }\n if (\n message.includes(\"use \\\"pm close <id> <text>\\\" to close an item\") ||\n (message.includes(\"invalid --status value\") && message.includes(\"\\\"closed\\\"\"))\n ) {\n return \"close_through_update\";\n }\n if (message.startsWith(\"invalid \") || message.includes(\" must be \") || message.includes(\" requires \")) {\n return \"invalid_argument_value\";\n }\n if (message.includes(\"strict create mode requires concrete values for --\")) {\n return \"missing_required_option\";\n }\n if (message.includes(\"either as positional\") && message.includes(\"not both\")) {\n return \"invalid_command_usage\";\n }\n\n const exitCode = Number.isFinite(params.exitCode) ? Math.max(0, Math.trunc(params.exitCode ?? 0)) : undefined;\n if (exitCode === EXIT_CODE.USAGE) {\n return \"invalid_command_usage\";\n }\n if (exitCode === EXIT_CODE.NOT_FOUND) {\n return \"item_not_found\";\n }\n if (exitCode === EXIT_CODE.CONFLICT) {\n return \"lock_conflict\";\n }\n if (exitCode === EXIT_CODE.DEPENDENCY_FAILED) {\n return \"dependency_failed\";\n }\n return \"command_failed\";\n}\n\nexport function deriveTelemetryCommandResolution(params: {\n ok: boolean;\n errorCode?: string;\n errorCategory?: TelemetryErrorCategory;\n}): TelemetryCommandResolution {\n if (params.ok) {\n return \"success\";\n }\n\n const normalizedCode = normalizeErrorCode(params.errorCode);\n if (normalizedCode === \"unknown_command\") {\n return \"nonexistent_command\";\n }\n if (normalizedCode === \"unknown_option\") {\n return \"invalid_option\";\n }\n if (normalizedCode === \"missing_required_option\") {\n return \"missing_required_option\";\n }\n if (normalizedCode === \"missing_required_argument\") {\n return \"missing_required_argument\";\n }\n if (normalizedCode === \"health_findings\") {\n return \"health_findings\";\n }\n if (normalizedCode === \"validation_findings\") {\n return \"validation_findings\";\n }\n\n if (params.errorCategory === \"usage\") {\n return \"invalid_usage\";\n }\n if (params.errorCategory === \"validation\") {\n return \"validation_failed\";\n }\n if (params.errorCategory === \"conflict\") {\n return \"conflict\";\n }\n if (params.errorCategory === \"runtime\") {\n return \"runtime_failed\";\n }\n return \"unknown_failed\";\n}\n","import crypto from \"node:crypto\";\nimport { spawn } from \"node:child_process\";\nimport { mkdirSync, rmSync, statSync } from \"node:fs\";\nimport { mkdir, readdir, rm, stat } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport type { GlobalOptions } from \"../shared/command-types.js\";\nimport { resolvePmPackageRootFromModule } from \"../packages/root.js\";\nimport { appendLineAtomic, readFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { resolveTelemetryErrorCategory, type TelemetryErrorCategory } from \"../shared/constants.js\";\nimport { nowIso } from \"../shared/time.js\";\nimport { resolveGlobalPmRoot } from \"../store/paths.js\";\nimport { readSettings, writeSettings } from \"../store/settings.js\";\nimport {\n deriveTelemetryCommandResolution,\n deriveTelemetryCommandTaxonomy,\n inferTelemetryErrorCode,\n type TelemetryCommandResolution,\n type TelemetryCommandTaxonomy,\n type TelemetryResolutionStage,\n} from \"./observability.js\";\n\nconst TELEMETRY_QUEUE_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\", \"events.jsonl\");\nconst TELEMETRY_STATE_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\", \"state.json\");\nconst TELEMETRY_SCHEMA_VERSION = 1;\nconst TELEMETRY_CLIENT_SCHEMA_VERSION = 1;\nconst TELEMETRY_FLUSH_BATCH_SIZE = 100;\nconst TELEMETRY_MAX_RETRY_DELAY_MS = 3_600_000;\nconst TELEMETRY_RETRY_BASE_DELAY_MS = 30_000;\nconst TELEMETRY_HTTP_TIMEOUT_MS = 5_000;\nconst MILLISECONDS_PER_DAY = 86_400_000;\nconst TELEMETRY_MAX_EVENT_BYTES = 65_536;\nconst TELEMETRY_SANITIZE_MAX_DEPTH = 6;\nconst TELEMETRY_SANITIZE_MAX_ARRAY_ITEMS = 20;\nconst TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS = 15;\nconst TELEMETRY_RESULT_PREVIEW_MAX_BYTES = 8_192;\nconst TELEMETRY_QUEUE_REWRITE_RETRY_DELAYS_MS = [25, 50, 100, 200] as const;\nconst TELEMETRY_QUEUE_TMP_ORPHAN_MAX_AGE_MS = 60 * 60 * 1000;\nconst TELEMETRY_FLUSH_LOCK_STALE_MS = 60_000;\nconst TELEMETRY_FLUSH_SPAWN_LOCK_STALE_MS = 60_000;\nconst OTEL_TRACES_ENDPOINT_ENV = \"OTEL_EXPORTER_OTLP_TRACES_ENDPOINT\";\nconst OTEL_BASE_ENDPOINT_ENV = \"OTEL_EXPORTER_OTLP_ENDPOINT\";\nconst OTEL_SERVICE_NAME_ENV = \"OTEL_SERVICE_NAME\";\nconst PM_TELEMETRY_DISABLED_ENV = \"PM_TELEMETRY_DISABLED\";\nconst PM_NO_TELEMETRY_ENV = \"PM_NO_TELEMETRY\";\nconst PM_TELEMETRY_DISABLED_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\"]);\nconst PM_TELEMETRY_OTEL_DISABLED_ENV = \"PM_TELEMETRY_OTEL_DISABLED\";\nconst PM_TELEMETRY_OTEL_DISABLED_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\"]);\nconst PM_TELEMETRY_INLINE_FLUSH_ENV = \"PM_TELEMETRY_INLINE_FLUSH\";\nconst PM_TELEMETRY_FLUSH_CHILD_ENV = \"PM_TELEMETRY_FLUSH_CHILD\";\nconst PM_TELEMETRY_SOURCE_CONTEXT_ENV = \"PM_TELEMETRY_SOURCE_CONTEXT\";\nconst PM_TELEMETRY_SOURCE_CONTEXT_VALUES = [\"user\", \"automation\", \"test\", \"dogfood\", \"audit_smoke\"] as const;\n\nlet _lastFlushPromise: Promise<void> = Promise.resolve();\nlet _queueMutationPromise: Promise<unknown> = Promise.resolve();\n\n/** Wait for the most recent background flush to settle. Test-only helper. */\nexport async function waitForPendingFlush(): Promise<void> {\n await _lastFlushPromise;\n await _queueMutationPromise;\n}\nconst PM_TELEMETRY_SOURCE_CONTEXT_SET = new Set<string>(PM_TELEMETRY_SOURCE_CONTEXT_VALUES);\nconst BOOLEAN_TRUE_VALUES = new Set([\"1\", \"true\", \"yes\", \"on\"]);\nconst PROCESS_SESSION_ID = crypto.randomUUID();\n\nconst SENSITIVE_KEYWORDS = [\n \"token\",\n \"secret\",\n \"password\",\n \"passwd\",\n \"api_key\",\n \"apikey\",\n \"authorization\",\n \"cookie\",\n \"session\",\n \"credentials\",\n \"bearer\",\n] as const;\nconst SENSITIVE_INLINE_KEY_PATTERN =\n \"(?:token|secret|password|passwd|api[_-]?key|apikey|authorization|cookie|session|credentials|bearer)\";\nconst INLINE_SENSITIVE_ASSIGNMENT_PATTERN = new RegExp(\n `\\\\b(${SENSITIVE_INLINE_KEY_PATTERN})\\\\s*([:=])\\\\s*([^\\\\s,;]+)`,\n \"giu\",\n);\nconst INLINE_SENSITIVE_FLAG_PATTERN = new RegExp(\n `(--${SENSITIVE_INLINE_KEY_PATTERN})(=|\\\\s+)([^\\\\s,;]+)`,\n \"giu\",\n);\nconst ABSOLUTE_PATH_TOKEN_PATTERN = /(^|[\\s\"'`(=])\\/(?:[^\\s\"'`),;]+)/g;\nconst EMAIL_PATTERN = /[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/giu;\nconst BEARER_TOKEN_PATTERN = /bearer\\s+[a-z0-9._=-]+/giu;\nconst PRIVATE_IP_PATTERN =\n /\\b(?:10\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)|172\\.(?:1[6-9]|2\\d|3[01])\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)|192\\.168\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))\\b/g;\n\ninterface TelemetryEvent {\n schema_version: number;\n event_id: string;\n event_type: \"command_start\" | \"command_finish\" | \"command_error\";\n occurred_at: string;\n installation_id: string;\n session_id: string;\n command: string;\n payload: Record<string, unknown>;\n}\n\ninterface QueuedTelemetryEvent {\n client_schema_version?: number;\n event: TelemetryEvent;\n attempts: number;\n last_attempt_at?: string;\n next_attempt_after?: string;\n}\n\ninterface TelemetryRuntimeState {\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 endpoint?: string;\n queue_entries?: number;\n}\n\ntype TelemetryCaptureLevel = \"minimal\" | \"redacted\" | \"max\";\ntype TelemetrySourceContext = (typeof PM_TELEMETRY_SOURCE_CONTEXT_VALUES)[number];\ntype TelemetrySourceContextSource = \"inferred\" | \"env_override\";\n\ninterface ResolvedTelemetrySourceContext {\n source_context: TelemetrySourceContext;\n source_context_source: TelemetrySourceContextSource;\n}\n\nexport interface ActiveTelemetryCommand {\n started_at: string;\n started_at_ms: number;\n command: string;\n command_taxonomy: TelemetryCommandTaxonomy;\n pm_version: string;\n source_context: TelemetrySourceContext;\n source_context_source: TelemetrySourceContextSource;\n installation_id: string;\n pm_root_hash: string;\n cwd_hash: string;\n endpoint: string;\n retention_days: number;\n global_pm_root: string;\n capture_level: TelemetryCaptureLevel;\n otel_traces_endpoint?: string;\n otel_trace_id?: string;\n otel_span_id?: string;\n}\n\nexport interface TelemetryCommandContext {\n command: string;\n pm_version: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_root: string;\n}\n\nexport interface TelemetryCommandOutcome {\n ok: boolean;\n error?: string;\n result?: unknown;\n exit_code?: number;\n error_code?: string;\n error_category?: TelemetryErrorCategory;\n command_resolution?: TelemetryCommandResolution;\n resolution_stage?: TelemetryResolutionStage;\n}\n\nexport interface TelemetryErrorEventContext {\n command: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_version: string;\n pm_root: string;\n error_code: string;\n error_message: string;\n exit_code: number;\n error_category?: TelemetryErrorCategory;\n command_resolution?: TelemetryCommandResolution;\n resolution_stage?: TelemetryResolutionStage;\n}\n\n\nfunction queuePath(globalPmRoot: string): string {\n return path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);\n}\n\nfunction telemetryRuntimeDirectory(globalPmRoot: string): string {\n return path.dirname(queuePath(globalPmRoot));\n}\n\nfunction runtimeStatePath(globalPmRoot: string): string {\n return path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);\n}\n\nfunction flushLockPath(globalPmRoot: string): string {\n return path.join(globalPmRoot, \"runtime\", \"telemetry\", \"flush.lock\");\n}\n\nfunction flushSpawnLockPath(globalPmRoot: string): string {\n return path.join(globalPmRoot, \"runtime\", \"telemetry\", \"flush.spawn.lock\");\n}\n\nfunction telemetryFlushRunnerPath(): string {\n return path.join(resolvePmPackageRootFromModule(import.meta.url, [\"../../..\"]), \"dist\", \"cli\", \"telemetry-flush.js\");\n}\n\nfunction shouldFlushInline(): boolean {\n if (parseBooleanTrueLike(process.env[PM_TELEMETRY_INLINE_FLUSH_ENV])) {\n return true;\n }\n if (parseBooleanTrueLike(process.env[PM_TELEMETRY_FLUSH_CHILD_ENV])) {\n return true;\n }\n const nodeEnv = (process.env.NODE_ENV ?? \"\").trim().toLowerCase();\n return typeof process.env.VITEST === \"string\" || typeof process.env.VITEST_WORKER_ID === \"string\" || nodeEnv === \"test\";\n}\n\nasync function readRuntimeState(globalPmRoot: string): Promise<TelemetryRuntimeState> {\n const raw = await readFileIfExists(runtimeStatePath(globalPmRoot));\n if (!raw || raw.trim().length === 0) {\n return {};\n }\n try {\n const parsed = JSON.parse(raw) as TelemetryRuntimeState;\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return {};\n }\n return parsed;\n } catch {\n return {};\n }\n}\n\nasync function writeRuntimeState(globalPmRoot: string, patch: TelemetryRuntimeState): Promise<void> {\n try {\n const current = await readRuntimeState(globalPmRoot);\n const next: TelemetryRuntimeState = {\n ...current,\n ...patch,\n };\n const normalized = Object.fromEntries(\n Object.entries(next)\n .filter(([, value]) => value !== undefined)\n .sort((left, right) => left[0].localeCompare(right[0])),\n );\n await writeFileAtomic(runtimeStatePath(globalPmRoot), `${JSON.stringify(normalized, null, 2)}\\n`);\n } catch {\n // Runtime state persistence is best effort and must not block command execution.\n }\n}\n\nfunction isSensitiveKey(key: string): boolean {\n const normalized = key.trim().toLowerCase().replaceAll(\"-\", \"_\").replaceAll(/[^a-z0-9_]+/g, \"_\");\n const tokens = normalized.split(\"_\").filter((token) => token.length > 0);\n return SENSITIVE_KEYWORDS.some(\n (keyword) => normalized === keyword || normalized.endsWith(`_${keyword}`) || tokens.includes(keyword),\n );\n}\n\nfunction redactInlineSensitiveAssignments(input: string): string {\n const withoutAssignments = input.replaceAll(\n INLINE_SENSITIVE_ASSIGNMENT_PATTERN,\n (_match: string, key: string, delimiter: string): string => `${key}${delimiter}[redacted]`,\n );\n return withoutAssignments.replaceAll(\n INLINE_SENSITIVE_FLAG_PATTERN,\n (_match: string, flag: string, delimiter: string): string => `${flag}${delimiter}[redacted]`,\n );\n}\n\nfunction redactAbsolutePathTokens(input: string): string {\n return input.replaceAll(\n ABSOLUTE_PATH_TOKEN_PATTERN,\n (_match: string, prefix: string): string => `${prefix}[redacted_path]`,\n );\n}\n\nfunction sanitizeCommonSensitiveTokens(input: string): string {\n const withoutEmails = input.replaceAll(EMAIL_PATTERN, \"[redacted_email]\");\n const withoutBearer = withoutEmails.replaceAll(BEARER_TOKEN_PATTERN, \"bearer [redacted_token]\");\n return withoutBearer.replaceAll(PRIVATE_IP_PATTERN, \"[redacted_ip]\");\n}\n\nfunction sanitizeStringRedacted(input: string): string {\n const withoutCommonSensitiveTokens = sanitizeCommonSensitiveTokens(input);\n const withoutInlineSecrets = redactInlineSensitiveAssignments(withoutCommonSensitiveTokens);\n const withoutAbsolutePaths = redactAbsolutePathTokens(withoutInlineSecrets);\n const trimmed = withoutAbsolutePaths.trim();\n if (trimmed.startsWith(\"/\") && trimmed.length > 1) {\n return \"[redacted_path]\";\n }\n if (withoutAbsolutePaths.length > 512) {\n return `${withoutAbsolutePaths.slice(0, 509)}...`;\n }\n return withoutAbsolutePaths;\n}\n\nfunction sanitizeStringMax(input: string): string {\n const withoutCommonSensitiveTokens = sanitizeCommonSensitiveTokens(input);\n const withoutInlineSecrets = redactInlineSensitiveAssignments(withoutCommonSensitiveTokens);\n const withoutAbsolutePaths = redactAbsolutePathTokens(withoutInlineSecrets);\n const trimmed = withoutAbsolutePaths.trim();\n if (trimmed.startsWith(\"/\") && trimmed.length > 1) {\n return \"[redacted_path]\";\n }\n if (withoutAbsolutePaths.length > 2048) {\n return `${withoutAbsolutePaths.slice(0, 2045)}...`;\n }\n return withoutAbsolutePaths;\n}\n\nfunction sanitizeString(input: string, captureLevel: Exclude<TelemetryCaptureLevel, \"minimal\"> = \"redacted\"): string {\n if (captureLevel === \"max\") {\n return sanitizeStringMax(input);\n }\n return sanitizeStringRedacted(input);\n}\n\nfunction sanitizeValue(\n value: unknown,\n keyHint?: string,\n captureLevel: Exclude<TelemetryCaptureLevel, \"minimal\"> = \"redacted\",\n depth = 0,\n): unknown {\n if (keyHint && isSensitiveKey(keyHint)) {\n return \"[redacted]\";\n }\n if (value === null || value === undefined) {\n return value;\n }\n if (typeof value === \"string\") {\n return sanitizeString(value, captureLevel);\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n if (depth >= TELEMETRY_SANITIZE_MAX_DEPTH) {\n return \"[depth_truncated]\";\n }\n if (Array.isArray(value)) {\n return value.slice(0, TELEMETRY_SANITIZE_MAX_ARRAY_ITEMS).map((entry) => sanitizeValue(entry, undefined, captureLevel, depth + 1));\n }\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const sanitized: Record<string, unknown> = {};\n for (const [key, nested] of Object.entries(record)) {\n sanitized[key] = sanitizeValue(nested, key, captureLevel, depth + 1);\n }\n return sanitized;\n }\n return String(value);\n}\n\nfunction sanitizeCommandArgs(\n args: string[],\n captureLevel: Exclude<TelemetryCaptureLevel, \"minimal\"> = \"redacted\",\n): string[] {\n const sanitized: string[] = [];\n let nextIsSensitiveValue = false;\n for (const rawArg of args) {\n const arg = sanitizeString(rawArg, captureLevel);\n if (nextIsSensitiveValue) {\n sanitized.push(\"[redacted]\");\n nextIsSensitiveValue = false;\n continue;\n }\n if (arg.startsWith(\"--\")) {\n const withoutPrefix = arg.slice(2);\n const delimiterIndex = withoutPrefix.indexOf(\"=\");\n if (delimiterIndex >= 0) {\n const key = withoutPrefix.slice(0, delimiterIndex);\n const value = withoutPrefix.slice(delimiterIndex + 1);\n if (isSensitiveKey(key)) {\n sanitized.push(`--${key}=[redacted]`);\n } else {\n sanitized.push(`--${key}=${sanitizeString(value, captureLevel)}`);\n }\n continue;\n }\n if (isSensitiveKey(withoutPrefix)) {\n sanitized.push(`--${withoutPrefix}`);\n nextIsSensitiveValue = true;\n continue;\n }\n }\n sanitized.push(arg);\n }\n return sanitized;\n}\n\nfunction normalizeCaptureLevel(value: string | undefined): TelemetryCaptureLevel {\n const normalized = value?.trim().toLowerCase();\n if (normalized === \"minimal\" || normalized === \"redacted\" || normalized === \"max\") {\n return normalized;\n }\n return \"redacted\";\n}\n\nfunction parseBooleanTrueLike(value: string | undefined): boolean {\n return BOOLEAN_TRUE_VALUES.has((value ?? \"\").trim().toLowerCase());\n}\n\nfunction normalizePmVersion(value: string | undefined): string {\n const trimmed = value?.trim() ?? \"\";\n return trimmed.length > 0 ? trimmed : \"0.0.0\";\n}\n\nfunction normalizeTelemetryErrorCode(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n return normalized && normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeTelemetryExitCode(exitCode: number | undefined, ok: boolean): number {\n if (Number.isFinite(exitCode)) {\n return Math.max(0, Math.trunc(exitCode ?? 0));\n }\n return ok ? 0 : 1;\n}\n\nfunction normalizeTelemetryErrorCategory(params: {\n ok: boolean;\n errorCode?: string;\n errorCategory?: TelemetryErrorCategory;\n}): TelemetryErrorCategory | undefined {\n if (params.ok) {\n return undefined;\n }\n if (typeof params.errorCategory === \"string\" && params.errorCategory.trim().length > 0) {\n return params.errorCategory;\n }\n if (typeof params.errorCode === \"string\" && params.errorCode.trim().length > 0) {\n return resolveTelemetryErrorCategory(params.errorCode);\n }\n return \"unknown\";\n}\n\nfunction resolveTelemetrySourceContext(globalOptions: GlobalOptions): ResolvedTelemetrySourceContext {\n const override = (process.env[PM_TELEMETRY_SOURCE_CONTEXT_ENV] ?? \"\").trim().toLowerCase();\n if (PM_TELEMETRY_SOURCE_CONTEXT_SET.has(override)) {\n return {\n source_context: override as TelemetrySourceContext,\n source_context_source: \"env_override\",\n };\n }\n const nodeEnv = (process.env.NODE_ENV ?? \"\").trim().toLowerCase();\n if (typeof process.env.VITEST === \"string\" || typeof process.env.VITEST_WORKER_ID === \"string\" || nodeEnv === \"test\") {\n return {\n source_context: \"test\",\n source_context_source: \"inferred\",\n };\n }\n const nonTty = process.stdin.isTTY !== true || process.stdout.isTTY !== true;\n const ci = parseBooleanTrueLike(process.env.CI);\n const scriptLikeMode = globalOptions.json === true || globalOptions.quiet === true;\n if (nonTty || ci || scriptLikeMode) {\n return {\n source_context: \"automation\",\n source_context_source: \"inferred\",\n };\n }\n return {\n source_context: \"user\",\n source_context_source: \"inferred\",\n };\n}\n\nfunction hashWithInstallationId(installationId: string, value: string): string {\n return crypto.createHash(\"sha256\").update(`${installationId}:${value}`).digest(\"hex\");\n}\n\nfunction normalizeForHash(value: unknown, depth = 0): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n if (depth >= TELEMETRY_SANITIZE_MAX_DEPTH) {\n return \"[depth_truncated]\";\n }\n if (Array.isArray(value)) {\n return value.slice(0, TELEMETRY_SANITIZE_MAX_ARRAY_ITEMS).map((entry) => normalizeForHash(entry, depth + 1));\n }\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const normalized: Record<string, unknown> = {};\n const sortedKeys = Object.keys(record).sort((left, right) => left.localeCompare(right));\n for (const key of sortedKeys) {\n normalized[key] = normalizeForHash(record[key], depth + 1);\n }\n return normalized;\n }\n return String(value);\n}\n\nfunction hashTelemetryValue(installationId: string, value: unknown): string {\n return hashWithInstallationId(installationId, JSON.stringify(normalizeForHash(value)));\n}\n\nfunction hashCommandArgs(installationId: string, args: string[]): { hashes: string[]; digest: string } {\n return {\n hashes: args.map((arg) => hashWithInstallationId(installationId, arg)),\n digest: hashWithInstallationId(installationId, args.join(\"\\u0000\")),\n };\n}\n\nfunction hashTelemetryErrorFingerprint(\n installationId: string,\n command: string,\n errorCode: string | undefined,\n errorMessage: string | undefined,\n): string {\n const normalizedMessage = sanitizeString(errorMessage ?? \"\", \"redacted\");\n const fingerprintSource = `${command}\\u0000${errorCode ?? \"unknown_error\"}\\u0000${normalizedMessage}`;\n return hashWithInstallationId(installationId, fingerprintSource);\n}\n\nfunction telemetryDisabledByEnvironment(): boolean {\n return (\n PM_TELEMETRY_DISABLED_VALUES.has((process.env[PM_TELEMETRY_DISABLED_ENV] ?? \"\").trim().toLowerCase()) ||\n PM_TELEMETRY_DISABLED_VALUES.has((process.env[PM_NO_TELEMETRY_ENV] ?? \"\").trim().toLowerCase())\n );\n}\n\nfunction resolveOtelTracesEndpoint(): string | null {\n if (PM_TELEMETRY_OTEL_DISABLED_VALUES.has((process.env[PM_TELEMETRY_OTEL_DISABLED_ENV] ?? \"\").trim().toLowerCase())) {\n return null;\n }\n\n const directEndpoint = (process.env[OTEL_TRACES_ENDPOINT_ENV] ?? \"\").trim();\n if (directEndpoint.length > 0) {\n try {\n return new URL(directEndpoint).toString();\n } catch {\n return null;\n }\n }\n\n const baseEndpoint = (process.env[OTEL_BASE_ENDPOINT_ENV] ?? \"\").trim();\n if (baseEndpoint.length === 0) {\n return null;\n }\n\n try {\n const url = new URL(baseEndpoint);\n const normalizedPath = url.pathname.replace(/\\/+$/, \"\");\n if (!normalizedPath.endsWith(\"/v1/traces\")) {\n url.pathname = `${normalizedPath.length === 0 ? \"\" : normalizedPath}/v1/traces`;\n }\n return url.toString();\n } catch {\n return null;\n }\n}\n\nfunction isoToUnixNano(iso: string): string {\n const parsedMs = Date.parse(iso);\n const epochMs = Number.isNaN(parsedMs) ? Date.now() : parsedMs;\n return `${BigInt(epochMs) * 1_000_000n}`;\n}\n\nfunction otlpStringAttribute(key: string, value: string): { key: string; value: { stringValue: string } } {\n return {\n key,\n value: { stringValue: value },\n };\n}\n\nfunction otlpBoolAttribute(key: string, value: boolean): { key: string; value: { boolValue: boolean } } {\n return {\n key,\n value: { boolValue: value },\n };\n}\n\nfunction otlpIntAttribute(key: string, value: number): { key: string; value: { intValue: string } } {\n return {\n key,\n value: { intValue: String(Math.max(0, Math.trunc(value))) },\n };\n}\n\nasync function exportLocalOtelSpan(\n activeCommand: ActiveTelemetryCommand,\n outcome: { ok: boolean; error?: string; exit_code?: number; error_code?: string; error_category?: TelemetryErrorCategory },\n finishedAtIso: string,\n durationMs: number,\n): Promise<void> {\n if (\n typeof activeCommand.otel_traces_endpoint !== \"string\" ||\n activeCommand.otel_traces_endpoint.trim().length === 0 ||\n typeof activeCommand.otel_trace_id !== \"string\" ||\n activeCommand.otel_trace_id.length === 0 ||\n typeof activeCommand.otel_span_id !== \"string\" ||\n activeCommand.otel_span_id.length === 0\n ) {\n return;\n }\n\n const serviceNameCandidate = sanitizeString((process.env[OTEL_SERVICE_NAME_ENV] ?? \"\").trim());\n const serviceName = serviceNameCandidate.length > 0 ? serviceNameCandidate : \"pm-cli\";\n const normalizedExitCode = normalizeTelemetryExitCode(outcome.exit_code, outcome.ok);\n const normalizedErrorCode = normalizeTelemetryErrorCode(outcome.error_code);\n const normalizedErrorCategory = normalizeTelemetryErrorCategory({\n ok: outcome.ok,\n errorCode: normalizedErrorCode,\n errorCategory: outcome.error_category,\n });\n const attributes: Array<\n | ReturnType<typeof otlpStringAttribute>\n | ReturnType<typeof otlpBoolAttribute>\n | ReturnType<typeof otlpIntAttribute>\n > = [\n otlpStringAttribute(\"pm.command\", sanitizeString(activeCommand.command)),\n otlpStringAttribute(\"pm.version\", activeCommand.pm_version),\n otlpStringAttribute(\"pm.source_context\", activeCommand.source_context),\n otlpStringAttribute(\"pm.source_context_source\", activeCommand.source_context_source),\n otlpStringAttribute(\"pm.installation_id\", activeCommand.installation_id),\n otlpStringAttribute(\"pm.session_id\", PROCESS_SESSION_ID),\n otlpStringAttribute(\"pm.pm_root_hash\", activeCommand.pm_root_hash),\n otlpStringAttribute(\"pm.cwd_hash\", activeCommand.cwd_hash),\n otlpBoolAttribute(\"pm.ok\", outcome.ok),\n otlpIntAttribute(\"pm.exit_code\", normalizedExitCode),\n otlpIntAttribute(\"pm.duration_ms\", durationMs),\n ];\n if (typeof normalizedErrorCode === \"string\") {\n attributes.push(otlpStringAttribute(\"pm.error_code\", normalizedErrorCode));\n }\n if (typeof normalizedErrorCategory === \"string\") {\n attributes.push(otlpStringAttribute(\"pm.error_category\", normalizedErrorCategory));\n }\n if (typeof outcome.error === \"string\" && outcome.error.trim().length > 0) {\n attributes.push(otlpStringAttribute(\"pm.error\", sanitizeString(outcome.error)));\n }\n\n const payload = {\n resourceSpans: [\n {\n resource: {\n attributes: [otlpStringAttribute(\"service.name\", serviceName)],\n },\n scopeSpans: [\n {\n scope: {\n name: \"pm-cli.telemetry\",\n version: \"1\",\n },\n spans: [\n {\n traceId: activeCommand.otel_trace_id,\n spanId: activeCommand.otel_span_id,\n name: `pm.command.${sanitizeString(activeCommand.command)}`,\n kind: 1,\n startTimeUnixNano: isoToUnixNano(activeCommand.started_at),\n endTimeUnixNano: isoToUnixNano(finishedAtIso),\n attributes,\n status: {\n code: outcome.ok ? 1 : 2,\n message: outcome.ok ? \"\" : sanitizeString(outcome.error ?? \"command_failed\"),\n },\n },\n ],\n },\n ],\n },\n ],\n };\n\n const response = await fetch(activeCommand.otel_traces_endpoint, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(TELEMETRY_HTTP_TIMEOUT_MS),\n });\n if (!response.ok) {\n throw new Error(`local_otel_export_http_${response.status}`);\n }\n}\n\nfunction summarizeResult(\n result: unknown,\n captureLevel: Exclude<TelemetryCaptureLevel, \"minimal\"> = \"redacted\",\n): Record<string, unknown> {\n if (result === null || result === undefined) {\n return { type: \"nullish\" };\n }\n if (typeof result === \"string\") {\n return { type: \"string\", value: sanitizeString(result, captureLevel) };\n }\n if (typeof result === \"number\" || typeof result === \"boolean\") {\n return { type: typeof result, value: result };\n }\n if (Array.isArray(result)) {\n return {\n type: \"array\",\n length: result.length,\n sample: result.slice(0, 5).map((entry) => sanitizeValue(entry, undefined, captureLevel)),\n };\n }\n if (typeof result === \"object\") {\n const record = result as Record<string, unknown>;\n const keys = Object.keys(record).sort((left, right) => left.localeCompare(right));\n const sanitized: Record<string, unknown> = {};\n let previewBytes = 0;\n for (const key of keys.slice(0, 25)) {\n const sanitizedValue = sanitizeValue(record[key], key, captureLevel);\n const entrySize = JSON.stringify(sanitizedValue)?.length ?? 0;\n if (previewBytes + entrySize > TELEMETRY_RESULT_PREVIEW_MAX_BYTES) {\n sanitized[key] = \"[preview_truncated]\";\n break;\n }\n previewBytes += entrySize;\n sanitized[key] = sanitizedValue;\n }\n return {\n type: \"object\",\n key_count: keys.length,\n keys_preview: keys.slice(0, 50),\n preview: sanitized,\n };\n }\n return { type: typeof result, value: String(result) };\n}\n\nfunction buildCommandStartPayload(params: {\n captureLevel: TelemetryCaptureLevel;\n context: TelemetryCommandContext;\n pmVersion: string;\n sourceContext: ResolvedTelemetrySourceContext;\n pmRootHash: string;\n cwdHash: string;\n installationId: string;\n}): Record<string, unknown> {\n const { captureLevel, context, pmVersion, sourceContext, pmRootHash, cwdHash, installationId } = params;\n const commandTaxonomy = deriveTelemetryCommandTaxonomy(context.command);\n const hashedArgs = hashCommandArgs(installationId, context.args);\n const commandInvocationDigest = hashWithInstallationId(installationId, `${context.command}\\u0000${context.args.join(\"\\u0000\")}`);\n const commandOptionsDigest = hashTelemetryValue(installationId, context.options);\n const globalOptionsDigest = hashTelemetryValue(installationId, context.global);\n if (captureLevel === \"minimal\") {\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_taxonomy: commandTaxonomy,\n command_args_digest: hashedArgs.digest,\n command_invocation_digest: commandInvocationDigest,\n command_options_digest: commandOptionsDigest,\n global_options_digest: globalOptionsDigest,\n };\n }\n return {\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_taxonomy: commandTaxonomy,\n command_args: sanitizeCommandArgs(context.args, captureLevel),\n command_args_hashes: hashedArgs.hashes,\n command_args_digest: hashedArgs.digest,\n command_invocation_digest: commandInvocationDigest,\n command_options: sanitizeValue(context.options, undefined, captureLevel) as Record<string, unknown>,\n command_options_digest: commandOptionsDigest,\n global_options: sanitizeValue(context.global, undefined, captureLevel) as Record<string, unknown>,\n global_options_digest: globalOptionsDigest,\n pm_root_hash: pmRootHash,\n cwd_hash: cwdHash,\n capture_level: captureLevel,\n runtime: {\n node: process.version,\n platform: process.platform,\n arch: process.arch,\n hostname_hash: hashWithInstallationId(installationId, os.hostname()),\n stdin_tty: process.stdin.isTTY === true,\n stdout_tty: process.stdout.isTTY === true,\n },\n };\n}\n\nfunction buildCommandFinishPayload(params: {\n captureLevel: TelemetryCaptureLevel;\n pmVersion: string;\n sourceContext: ResolvedTelemetrySourceContext;\n outcome: TelemetryCommandOutcome;\n durationMs: number;\n startedAt: string;\n command: string;\n installationId: string;\n commandTaxonomy: TelemetryCommandTaxonomy;\n exitCode: number;\n errorCode?: string;\n errorCategory?: TelemetryErrorCategory;\n commandResolution: TelemetryCommandResolution;\n resolutionStage: TelemetryResolutionStage;\n}): Record<string, unknown> {\n const {\n captureLevel,\n pmVersion,\n sourceContext,\n outcome,\n durationMs,\n startedAt,\n command,\n installationId,\n commandTaxonomy,\n exitCode,\n errorCode,\n errorCategory,\n commandResolution,\n resolutionStage,\n } = params;\n const errorFingerprint =\n outcome.ok === false\n ? hashTelemetryErrorFingerprint(installationId, command, errorCode, outcome.error)\n : undefined;\n if (captureLevel === \"minimal\") {\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_taxonomy: commandTaxonomy,\n command_resolution: commandResolution,\n resolution_stage: resolutionStage,\n ok: outcome.ok,\n exit_code: exitCode,\n error_code: errorCode,\n error_category: errorCategory,\n error: outcome.error ? sanitizeString(outcome.error, \"redacted\") : undefined,\n error_fingerprint: errorFingerprint,\n duration_ms: durationMs,\n };\n }\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_taxonomy: commandTaxonomy,\n command_resolution: commandResolution,\n resolution_stage: resolutionStage,\n ok: outcome.ok,\n exit_code: exitCode,\n error_code: errorCode,\n error_category: errorCategory,\n error: outcome.error ? sanitizeString(outcome.error, captureLevel) : undefined,\n error_fingerprint: errorFingerprint,\n duration_ms: durationMs,\n started_at: startedAt,\n result_summary: summarizeResult(outcome.result, captureLevel),\n };\n}\n\nfunction buildCommandErrorPayload(params: {\n captureLevel: TelemetryCaptureLevel;\n pmVersion: string;\n sourceContext: ResolvedTelemetrySourceContext;\n command: string;\n commandTaxonomy: TelemetryCommandTaxonomy;\n commandResolution: TelemetryCommandResolution;\n resolutionStage: TelemetryResolutionStage;\n args: string[];\n options: Record<string, unknown>;\n pmRootHash: string;\n cwdHash: string;\n installationId: string;\n errorCode: string;\n errorMessage: string;\n errorCategory: TelemetryErrorCategory;\n exitCode: number;\n}): Record<string, unknown> {\n const {\n captureLevel,\n pmVersion,\n sourceContext,\n command,\n commandTaxonomy,\n commandResolution,\n resolutionStage,\n args,\n options,\n pmRootHash,\n cwdHash,\n installationId,\n errorCode,\n errorMessage,\n errorCategory,\n exitCode,\n } = params;\n const attemptedArgHashes = hashCommandArgs(installationId, args);\n const attemptedCommandDigest = hashWithInstallationId(installationId, command);\n const attemptedOptionsDigest = hashTelemetryValue(installationId, options);\n const errorFingerprint = hashTelemetryErrorFingerprint(installationId, command, errorCode, errorMessage);\n if (captureLevel === \"minimal\") {\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_taxonomy: commandTaxonomy,\n command_resolution: commandResolution,\n resolution_stage: resolutionStage,\n attempted_command_digest: attemptedCommandDigest,\n attempted_args_digest: attemptedArgHashes.digest,\n attempted_options_digest: attemptedOptionsDigest,\n error_code: errorCode,\n error_category: errorCategory,\n exit_code: exitCode,\n error: sanitizeString(errorMessage, \"redacted\"),\n error_fingerprint: errorFingerprint,\n };\n }\n\n return {\n capture_level: captureLevel,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n command_taxonomy: commandTaxonomy,\n command_resolution: commandResolution,\n resolution_stage: resolutionStage,\n attempted_command: sanitizeString(command, captureLevel),\n attempted_command_digest: attemptedCommandDigest,\n attempted_args: sanitizeCommandArgs(args, captureLevel),\n attempted_args_hashes: attemptedArgHashes.hashes,\n attempted_args_digest: attemptedArgHashes.digest,\n attempted_options: sanitizeValue(options, undefined, captureLevel) as Record<string, unknown>,\n attempted_options_digest: attemptedOptionsDigest,\n error_code: errorCode,\n error_category: errorCategory,\n exit_code: exitCode,\n error: sanitizeString(errorMessage, captureLevel),\n error_fingerprint: errorFingerprint,\n pm_root_hash: pmRootHash,\n cwd_hash: cwdHash,\n runtime: {\n node: process.version,\n platform: process.platform,\n arch: process.arch,\n hostname_hash: hashWithInstallationId(installationId, os.hostname()),\n stdin_tty: process.stdin.isTTY === true,\n stdout_tty: process.stdout.isTTY === true,\n },\n };\n}\n\nasync function ensureInstallationId(\n globalPmRoot: string,\n): Promise<{ installationId: string; endpoint: string; retentionDays: number }> {\n const settings = await readSettings(globalPmRoot);\n let changed = false;\n if (settings.telemetry.installation_id.trim().length === 0) {\n settings.telemetry.installation_id = crypto.randomUUID();\n changed = true;\n }\n if (changed) {\n await writeSettings(globalPmRoot, settings, \"telemetry:install_id\");\n }\n return {\n installationId: settings.telemetry.installation_id,\n endpoint: settings.telemetry.endpoint,\n retentionDays: Math.max(1, Math.trunc(settings.telemetry.retention_days)),\n };\n}\n\nasync function enqueueTelemetryEvent(globalPmRoot: string, event: TelemetryEvent): Promise<void> {\n const queued: QueuedTelemetryEvent = {\n client_schema_version: TELEMETRY_CLIENT_SCHEMA_VERSION,\n event,\n attempts: 0,\n };\n let serialized = JSON.stringify(queued);\n if (serialized.length > TELEMETRY_MAX_EVENT_BYTES) {\n const trimmed = { ...event, payload: { ...event.payload, result_summary: { truncated: true, reason: \"payload_size_exceeded\", original_bytes: serialized.length } } };\n const trimmedQueued: QueuedTelemetryEvent = {\n client_schema_version: TELEMETRY_CLIENT_SCHEMA_VERSION,\n event: trimmed,\n attempts: 0,\n };\n serialized = JSON.stringify(trimmedQueued);\n }\n await withQueueMutation(async () => {\n await appendLineAtomic(queuePath(globalPmRoot), serialized);\n });\n}\n\nfunction parseQueueLines(raw: string): QueuedTelemetryEvent[] {\n const entries: QueuedTelemetryEvent[] = [];\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n try {\n const parsed = JSON.parse(trimmed) as QueuedTelemetryEvent;\n if (\n parsed &&\n typeof parsed === \"object\" &&\n parsed.event &&\n typeof parsed.event === \"object\" &&\n typeof parsed.attempts === \"number\" &&\n (\n parsed.client_schema_version === undefined ||\n (typeof parsed.client_schema_version === \"number\" && Number.isFinite(parsed.client_schema_version))\n )\n ) {\n entries.push(parsed);\n }\n } catch {\n // Drop malformed lines to preserve queue forward progress.\n }\n }\n return entries;\n}\n\nfunction nextRetryIso(attempts: number): string {\n const delay = Math.min(TELEMETRY_RETRY_BASE_DELAY_MS * 2 ** Math.max(attempts - 1, 0), TELEMETRY_MAX_RETRY_DELAY_MS);\n return new Date(Date.now() + delay).toISOString();\n}\n\nfunction isDueForRetry(entry: QueuedTelemetryEvent): boolean {\n if (typeof entry.next_attempt_after !== \"string\" || entry.next_attempt_after.trim().length === 0) {\n return true;\n }\n const dueAtMs = Date.parse(entry.next_attempt_after);\n if (Number.isNaN(dueAtMs)) {\n return true;\n }\n return dueAtMs <= Date.now();\n}\n\nfunction retentionCutoffMs(retentionDays: number): number {\n const normalizedDays = Number.isFinite(retentionDays) ? Math.max(1, Math.trunc(retentionDays)) : 1;\n return Date.now() - normalizedDays * MILLISECONDS_PER_DAY;\n}\n\nfunction isExpiredQueueEntry(entry: QueuedTelemetryEvent, cutoffMs: number): boolean {\n const occurredAt = entry.event?.occurred_at;\n if (typeof occurredAt !== \"string\" || occurredAt.trim().length === 0) {\n return false;\n }\n const occurredAtMs = Date.parse(occurredAt);\n if (Number.isNaN(occurredAtMs)) {\n return false;\n }\n return occurredAtMs < cutoffMs;\n}\n\nfunction pruneExpiredQueueEntries(\n entries: QueuedTelemetryEvent[],\n retentionDays: number,\n): { entries: QueuedTelemetryEvent[]; prunedCount: number } {\n const cutoffMs = retentionCutoffMs(retentionDays);\n const retained: QueuedTelemetryEvent[] = [];\n let prunedCount = 0;\n for (const entry of entries) {\n const serializedSize = JSON.stringify(entry).length;\n const oversized = serializedSize > TELEMETRY_MAX_EVENT_BYTES;\n if (oversized || isExpiredQueueEntry(entry, cutoffMs) || entry.attempts >= TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS) {\n prunedCount += 1;\n continue;\n }\n retained.push(entry);\n }\n return { entries: retained, prunedCount };\n}\n\nasync function rewriteQueue(globalPmRoot: string, entries: QueuedTelemetryEvent[]): Promise<void> {\n const serialized = entries.map((entry) => JSON.stringify(entry)).join(\"\\n\");\n const contents = serialized.length > 0 ? `${serialized}\\n` : \"\";\n for (let attempt = 0; ; attempt += 1) {\n try {\n await writeFileAtomic(queuePath(globalPmRoot), contents);\n return;\n } catch (error: unknown) {\n const retryDelay = TELEMETRY_QUEUE_REWRITE_RETRY_DELAYS_MS[attempt];\n if (retryDelay === undefined || !isRetryableQueueRewriteError(error)) {\n throw error;\n }\n await sleep(retryDelay);\n }\n }\n}\n\nfunction isRetryableQueueRewriteError(error: unknown): boolean {\n if (typeof error !== \"object\" || error === null || !(\"code\" in error)) {\n return false;\n }\n const code = (error as { code?: unknown }).code;\n return code === \"EACCES\" || code === \"EBUSY\" || code === \"EPERM\";\n}\n\nfunction sleep(milliseconds: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, milliseconds);\n });\n}\n\nasync function cleanupTelemetryQueueTempOrphans(\n globalPmRoot: string,\n maxAgeMs = TELEMETRY_QUEUE_TMP_ORPHAN_MAX_AGE_MS,\n): Promise<void> {\n try {\n const dirPath = telemetryRuntimeDirectory(globalPmRoot);\n const entries = await readdir(dirPath, { withFileTypes: true });\n const cutoffMs = Date.now() - Math.max(0, maxAgeMs);\n await Promise.all(\n entries\n .filter((entry) => entry.isFile() && /^\\.events\\.jsonl\\.\\d+\\.\\d+\\.[a-f0-9]+\\.tmp$/.test(entry.name))\n .map(async (entry) => {\n const candidate = path.join(dirPath, entry.name);\n const candidateStats = await stat(candidate);\n if (candidateStats.mtimeMs < cutoffMs) {\n await rm(candidate, { force: true });\n }\n }),\n );\n } catch {\n // Telemetry cleanup is best-effort and must not affect command execution.\n }\n}\n\nasync function withQueueMutation<T>(operation: () => Promise<T>): Promise<T> {\n const run = _queueMutationPromise.catch(() => {}).then(operation);\n _queueMutationPromise = run.catch(() => {});\n return run;\n}\n\nasync function readCurrentQueueEntries(globalPmRoot: string): Promise<QueuedTelemetryEvent[]> {\n const raw = await readFileIfExists(queuePath(globalPmRoot));\n if (raw === null || raw.trim().length === 0) {\n return [];\n }\n return parseQueueLines(raw);\n}\n\nasync function removeFlushedEntriesFromCurrentQueue(\n globalPmRoot: string,\n flushedIds: ReadonlySet<string>,\n retentionDays: number,\n): Promise<QueuedTelemetryEvent[]> {\n return withQueueMutation(async () => {\n const currentEntries = await readCurrentQueueEntries(globalPmRoot);\n const { entries: retainedEntries } = pruneExpiredQueueEntries(currentEntries, retentionDays);\n const remaining = retainedEntries.filter((entry) => !flushedIds.has(entry.event.event_id));\n await rewriteQueue(globalPmRoot, remaining);\n return remaining;\n });\n}\n\nasync function markFailedEntriesInCurrentQueue(\n globalPmRoot: string,\n failedIds: ReadonlySet<string>,\n attemptTime: string,\n retentionDays: number,\n): Promise<QueuedTelemetryEvent[]> {\n return withQueueMutation(async () => {\n const currentEntries = await readCurrentQueueEntries(globalPmRoot);\n const { entries: retainedEntries } = pruneExpiredQueueEntries(currentEntries, retentionDays);\n const retried = retainedEntries.map((entry) => {\n if (!failedIds.has(entry.event.event_id)) {\n return entry;\n }\n const attempts = entry.attempts + 1;\n return {\n ...entry,\n attempts,\n last_attempt_at: attemptTime,\n next_attempt_after: nextRetryIso(attempts),\n };\n });\n await rewriteQueue(globalPmRoot, retried);\n return retried;\n });\n}\n\nasync function flushQueue(globalPmRoot: string, endpoint: string, retentionDays: number): Promise<void> {\n await cleanupTelemetryQueueTempOrphans(globalPmRoot);\n const normalizedEndpoint = endpoint.trim();\n if (normalizedEndpoint.length === 0) {\n return;\n }\n const raw = await readFileIfExists(queuePath(globalPmRoot));\n if (raw === null || raw.trim().length === 0) {\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: 0,\n });\n return;\n }\n const queueEntries = parseQueueLines(raw);\n if (queueEntries.length === 0) {\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: 0,\n });\n return;\n }\n const { entries: retainedEntries, prunedCount } = pruneExpiredQueueEntries(queueEntries, retentionDays);\n if (retainedEntries.length === 0) {\n if (prunedCount > 0) {\n await rewriteQueue(globalPmRoot, []);\n }\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: 0,\n });\n return;\n }\n const dueEntries = retainedEntries.filter((entry) => isDueForRetry(entry)).slice(0, TELEMETRY_FLUSH_BATCH_SIZE);\n if (dueEntries.length === 0) {\n if (prunedCount > 0) {\n await rewriteQueue(globalPmRoot, retainedEntries);\n }\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: retainedEntries.length,\n });\n return;\n }\n const dueIds = new Set(dueEntries.map((entry) => entry.event.event_id));\n const attemptTime = nowIso();\n const requestHeaders: Record<string, string> = {\n \"content-type\": \"application/json\",\n };\n const ingestKey = process.env.PM_TELEMETRY_INGEST_KEY?.trim();\n if (ingestKey) {\n requestHeaders[\"x-pm-telemetry-key\"] = ingestKey;\n }\n\n try {\n const response = await fetch(normalizedEndpoint, {\n method: \"POST\",\n headers: requestHeaders,\n body: JSON.stringify({\n schema_version: TELEMETRY_SCHEMA_VERSION,\n events: dueEntries.map((entry) => entry.event),\n }),\n signal: AbortSignal.timeout(TELEMETRY_HTTP_TIMEOUT_MS),\n });\n if (!response.ok) {\n throw new Error(`telemetry_flush_http_${response.status}`);\n }\n } catch (error: unknown) {\n const retried = await markFailedEntriesInCurrentQueue(globalPmRoot, dueIds, attemptTime, retentionDays);\n const errorMessage = (() => {\n if (error instanceof Error) {\n return sanitizeString(error.message, \"redacted\");\n }\n return \"telemetry_flush_failed\";\n })();\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: retried.length,\n last_attempted_flush_at: attemptTime,\n last_failed_flush_at: attemptTime,\n last_failed_flush_error: errorMessage,\n });\n return;\n }\n\n try {\n const remaining = await removeFlushedEntriesFromCurrentQueue(globalPmRoot, dueIds, retentionDays);\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: remaining.length,\n last_attempted_flush_at: attemptTime,\n last_successful_flush_at: attemptTime,\n last_failed_flush_at: undefined,\n last_failed_flush_error: undefined,\n });\n } catch (error: unknown) {\n const errorMessage = (() => {\n if (error instanceof Error) {\n return sanitizeString(error.message, \"redacted\");\n }\n return \"telemetry_flush_failed\";\n })();\n const currentEntries = await readCurrentQueueEntries(globalPmRoot).catch(() => retainedEntries);\n await writeRuntimeState(globalPmRoot, {\n endpoint: normalizedEndpoint,\n queue_entries: currentEntries.length,\n last_attempted_flush_at: attemptTime,\n last_failed_flush_at: attemptTime,\n last_failed_flush_error: errorMessage,\n });\n }\n}\n\nasync function acquireTelemetryFlushLock(globalPmRoot: string): Promise<boolean> {\n const lockPath = flushLockPath(globalPmRoot);\n await mkdir(path.dirname(lockPath), { recursive: true });\n try {\n await mkdir(lockPath);\n return true;\n } catch (error: unknown) {\n if (typeof error !== \"object\" || error === null || !(\"code\" in error) || (error as { code?: unknown }).code !== \"EEXIST\") {\n throw error;\n }\n }\n\n try {\n const lockStats = await stat(lockPath);\n if (Date.now() - lockStats.mtimeMs < TELEMETRY_FLUSH_LOCK_STALE_MS) {\n return false;\n }\n await rm(lockPath, { recursive: true, force: true });\n await mkdir(lockPath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isFreshDirectoryLock(lockPath: string, staleMs: number): boolean {\n try {\n return Date.now() - statSync(lockPath).mtimeMs < staleMs;\n } catch {\n return false;\n }\n}\n\nfunction removeDirectoryLockBestEffort(lockPath: string): void {\n try {\n rmSync(lockPath, { recursive: true, force: true });\n } catch {\n // Flush scheduling is best effort and must never fail user commands.\n }\n}\n\nfunction errorCode(error: unknown): string | undefined {\n if (typeof error !== \"object\" || error === null || !(\"code\" in error)) {\n return undefined;\n }\n const code = (error as { code?: unknown }).code;\n return typeof code === \"string\" ? code : undefined;\n}\n\nfunction createDirectoryLock(lockPath: string): boolean {\n try {\n mkdirSync(lockPath);\n return true;\n } catch (error: unknown) {\n const code = errorCode(error);\n if (code === \"EEXIST\") {\n return false;\n }\n if (code !== \"ENOENT\") {\n return false;\n }\n }\n\n try {\n mkdirSync(path.dirname(lockPath), { recursive: true });\n mkdirSync(lockPath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction acquireTelemetryFlushSpawnGate(globalPmRoot: string): boolean {\n if (isFreshDirectoryLock(flushLockPath(globalPmRoot), TELEMETRY_FLUSH_LOCK_STALE_MS)) {\n return false;\n }\n\n const lockPath = flushSpawnLockPath(globalPmRoot);\n try {\n if (Date.now() - statSync(lockPath).mtimeMs < TELEMETRY_FLUSH_SPAWN_LOCK_STALE_MS) {\n return false;\n }\n removeDirectoryLockBestEffort(lockPath);\n } catch (error: unknown) {\n if (errorCode(error) !== \"ENOENT\") {\n return false;\n }\n }\n\n return createDirectoryLock(lockPath);\n}\n\nfunction releaseTelemetryFlushSpawnGate(globalPmRoot: string): void {\n removeDirectoryLockBestEffort(flushSpawnLockPath(globalPmRoot));\n}\n\nexport const _testOnly = {\n acquireTelemetryFlushSpawnGate,\n releaseTelemetryFlushSpawnGate,\n flushLockPath,\n flushSpawnLockPath,\n};\n\nasync function flushQueueWithProcessLock(globalPmRoot: string, endpoint: string, retentionDays: number): Promise<void> {\n const acquired = await acquireTelemetryFlushLock(globalPmRoot);\n releaseTelemetryFlushSpawnGate(globalPmRoot);\n if (!acquired) {\n return;\n }\n try {\n await flushQueue(globalPmRoot, endpoint, retentionDays);\n } finally {\n await rm(flushLockPath(globalPmRoot), { recursive: true, force: true }).catch(() => {});\n }\n}\n\nfunction scheduleTelemetryFlush(globalPmRoot: string, endpoint: string, retentionDays: number): void {\n if (shouldFlushInline()) {\n const previousFlush = _lastFlushPromise;\n const nextFlush = flushQueue(globalPmRoot, endpoint, retentionDays).catch(() => {});\n _lastFlushPromise = Promise.allSettled([previousFlush, nextFlush]).then(() => {});\n return;\n }\n\n try {\n const acquiredSpawnGate = acquireTelemetryFlushSpawnGate(globalPmRoot);\n if (!acquiredSpawnGate) {\n return;\n }\n const child = spawn(process.execPath, [telemetryFlushRunnerPath()], {\n detached: true,\n stdio: \"ignore\",\n env: {\n ...process.env,\n PM_GLOBAL_PATH: globalPmRoot,\n [PM_TELEMETRY_FLUSH_CHILD_ENV]: \"1\",\n },\n });\n child.unref();\n } catch {\n releaseTelemetryFlushSpawnGate(globalPmRoot);\n // Flush scheduling is best effort and must not keep the CLI alive.\n }\n}\n\nexport async function flushTelemetryQueueNow(globalPmRoot = resolveGlobalPmRoot(process.cwd())): Promise<void> {\n if (telemetryDisabledByEnvironment()) {\n return;\n }\n try {\n const settings = await readSettings(globalPmRoot);\n if (!settings.telemetry.enabled) {\n return;\n }\n const { endpoint, retentionDays } = await ensureInstallationId(globalPmRoot);\n await flushQueueWithProcessLock(globalPmRoot, endpoint, retentionDays);\n } catch {\n // Telemetry workers are best effort and must never fail user commands.\n }\n}\n\nexport async function startTelemetryCommand(context: TelemetryCommandContext): Promise<ActiveTelemetryCommand | null> {\n if (telemetryDisabledByEnvironment()) {\n return null;\n }\n if (\n context.command === \"telemetry\" &&\n context.args.some((token) => token.trim().toLowerCase() === \"clear\")\n ) {\n return null;\n }\n try {\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n const settings = await readSettings(globalPmRoot);\n if (!settings.telemetry.enabled) {\n return null;\n }\n const captureLevel = normalizeCaptureLevel(settings.telemetry.capture_level);\n const { installationId, endpoint, retentionDays } = await ensureInstallationId(globalPmRoot);\n const pmVersion = normalizePmVersion(context.pm_version);\n const sourceContext = resolveTelemetrySourceContext(context.global);\n const pmRootHash = hashWithInstallationId(installationId, context.pm_root);\n const cwdHash = hashWithInstallationId(installationId, process.cwd());\n const otelTracesEndpoint = resolveOtelTracesEndpoint();\n const occurredAt = nowIso();\n const event: TelemetryEvent = {\n schema_version: TELEMETRY_SCHEMA_VERSION,\n event_id: crypto.randomUUID(),\n event_type: \"command_start\",\n occurred_at: occurredAt,\n installation_id: installationId,\n session_id: PROCESS_SESSION_ID,\n command: context.command,\n payload: buildCommandStartPayload({\n captureLevel,\n context,\n pmVersion,\n sourceContext,\n pmRootHash,\n cwdHash,\n installationId,\n }),\n };\n await enqueueTelemetryEvent(globalPmRoot, event);\n scheduleTelemetryFlush(globalPmRoot, endpoint, retentionDays);\n const commandTaxonomy = deriveTelemetryCommandTaxonomy(context.command);\n return {\n started_at: occurredAt,\n started_at_ms: Date.now(),\n command: context.command,\n command_taxonomy: commandTaxonomy,\n pm_version: pmVersion,\n source_context: sourceContext.source_context,\n source_context_source: sourceContext.source_context_source,\n installation_id: installationId,\n pm_root_hash: pmRootHash,\n cwd_hash: cwdHash,\n endpoint,\n retention_days: retentionDays,\n global_pm_root: globalPmRoot,\n capture_level: captureLevel,\n otel_traces_endpoint: otelTracesEndpoint ?? undefined,\n otel_trace_id: otelTracesEndpoint ? crypto.randomBytes(16).toString(\"hex\") : undefined,\n otel_span_id: otelTracesEndpoint ? crypto.randomBytes(8).toString(\"hex\") : undefined,\n };\n } catch {\n // Telemetry must never block command execution.\n return null;\n }\n}\n\nexport async function finishTelemetryCommand(\n activeCommand: ActiveTelemetryCommand | null,\n outcome: TelemetryCommandOutcome,\n): Promise<void> {\n if (!activeCommand) {\n return;\n }\n try {\n const finishedAt = nowIso();\n const durationMs = Math.max(0, Date.now() - activeCommand.started_at_ms);\n const normalizedErrorCode = normalizeTelemetryErrorCode(\n inferTelemetryErrorCode({\n ok: outcome.ok,\n errorCode: outcome.error_code,\n errorMessage: outcome.error,\n exitCode: outcome.exit_code,\n }),\n );\n const normalizedErrorCategory = normalizeTelemetryErrorCategory({\n ok: outcome.ok,\n errorCode: normalizedErrorCode,\n errorCategory: outcome.error_category,\n });\n const normalizedExitCode = normalizeTelemetryExitCode(outcome.exit_code, outcome.ok);\n const commandResolution =\n outcome.command_resolution ??\n deriveTelemetryCommandResolution({\n ok: outcome.ok,\n errorCode: normalizedErrorCode,\n errorCategory: normalizedErrorCategory,\n });\n const resolutionStage = outcome.resolution_stage ?? \"execute\";\n const event: TelemetryEvent = {\n schema_version: TELEMETRY_SCHEMA_VERSION,\n event_id: crypto.randomUUID(),\n event_type: \"command_finish\",\n occurred_at: finishedAt,\n installation_id: activeCommand.installation_id,\n session_id: PROCESS_SESSION_ID,\n command: activeCommand.command,\n payload: buildCommandFinishPayload({\n captureLevel: activeCommand.capture_level,\n pmVersion: activeCommand.pm_version,\n sourceContext: {\n source_context: activeCommand.source_context,\n source_context_source: activeCommand.source_context_source,\n },\n outcome,\n durationMs,\n startedAt: activeCommand.started_at,\n command: activeCommand.command,\n installationId: activeCommand.installation_id,\n commandTaxonomy: activeCommand.command_taxonomy,\n exitCode: normalizedExitCode,\n errorCode: normalizedErrorCode,\n errorCategory: normalizedErrorCategory,\n commandResolution,\n resolutionStage,\n }),\n };\n await enqueueTelemetryEvent(activeCommand.global_pm_root, event);\n scheduleTelemetryFlush(activeCommand.global_pm_root, activeCommand.endpoint, activeCommand.retention_days);\n void exportLocalOtelSpan(\n activeCommand,\n {\n ...outcome,\n exit_code: normalizedExitCode,\n error_code: normalizedErrorCode,\n error_category: normalizedErrorCategory,\n },\n finishedAt,\n durationMs,\n ).catch(() => {});\n } catch {\n // Telemetry must never block command execution.\n }\n}\n\nexport async function emitTelemetryErrorEvent(context: TelemetryErrorEventContext): Promise<void> {\n if (telemetryDisabledByEnvironment()) {\n return;\n }\n try {\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n const settings = await readSettings(globalPmRoot);\n if (!settings.telemetry.enabled) {\n return;\n }\n const captureLevel = normalizeCaptureLevel(settings.telemetry.capture_level);\n const { installationId, endpoint, retentionDays } = await ensureInstallationId(globalPmRoot);\n const pmVersion = normalizePmVersion(context.pm_version);\n const sourceContext = resolveTelemetrySourceContext(context.global);\n const pmRootHash = hashWithInstallationId(installationId, context.pm_root);\n const cwdHash = hashWithInstallationId(installationId, process.cwd());\n const occurredAt = nowIso();\n const normalizedErrorCode =\n normalizeTelemetryErrorCode(\n inferTelemetryErrorCode({\n ok: false,\n errorCode: context.error_code,\n errorMessage: context.error_message,\n exitCode: context.exit_code,\n }),\n ) ?? \"unknown_error\";\n const normalizedErrorCategory =\n context.error_category ?? resolveTelemetryErrorCategory(normalizedErrorCode);\n const normalizedExitCode = normalizeTelemetryExitCode(context.exit_code, false);\n const normalizedCommand = context.command.trim().length > 0 ? context.command : \"<unknown>\";\n const commandTaxonomy = deriveTelemetryCommandTaxonomy(normalizedCommand);\n const commandResolution =\n context.command_resolution ??\n deriveTelemetryCommandResolution({\n ok: false,\n errorCode: normalizedErrorCode,\n errorCategory: normalizedErrorCategory,\n });\n const resolutionStage = context.resolution_stage ?? \"unknown\";\n\n const event: TelemetryEvent = {\n schema_version: TELEMETRY_SCHEMA_VERSION,\n event_id: crypto.randomUUID(),\n event_type: \"command_error\",\n occurred_at: occurredAt,\n installation_id: installationId,\n session_id: PROCESS_SESSION_ID,\n command: sanitizeString(normalizedCommand, \"redacted\"),\n payload: buildCommandErrorPayload({\n captureLevel,\n pmVersion,\n sourceContext,\n command: normalizedCommand,\n commandTaxonomy,\n commandResolution,\n resolutionStage,\n args: context.args,\n options: context.options,\n pmRootHash,\n cwdHash,\n installationId,\n errorCode: normalizedErrorCode,\n errorCategory: normalizedErrorCategory,\n exitCode: normalizedExitCode,\n errorMessage: context.error_message,\n }),\n };\n await enqueueTelemetryEvent(globalPmRoot, event);\n scheduleTelemetryFlush(globalPmRoot, endpoint, retentionDays);\n } catch {\n // Telemetry must never block command execution.\n }\n}\n"],"names":["errorCode","errorCode"],"mappings":"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","debugId":"705a511a-3aa8-5101-b1fa-07ed6544814a"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// dist/core/search/staleness.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]="d56343df-f5f2-5c7a-b02e-19c311035a85")}catch(e){}}();
|
|
4
|
+
function collectStaleVectorizationIds(items, ledgerEntries) {
|
|
5
|
+
const entries = ledgerEntries ?? {};
|
|
6
|
+
return items.filter((item) => {
|
|
7
|
+
const trackedUpdatedAt = entries[item.id];
|
|
8
|
+
return trackedUpdatedAt !== item.updated_at;
|
|
9
|
+
}).map((item) => item.id).sort((left, right) => left.localeCompare(right));
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
collectStaleVectorizationIds
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=chunk-IUV734HF.js.map
|
|
16
|
+
|
|
17
|
+
//# debugId=d56343df-f5f2-5c7a-b02e-19c311035a85
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../core/search/staleness.ts"],"sourcesContent":["/**\n * Vectorization-ledger staleness helpers.\n *\n * The vectorization status ledger at `search/vectorization-status.json`\n * records the `updated_at` of every item that has been embedded into the\n * vector store. When an item's current `updated_at` differs from the\n * ledger's recorded value (or the item is missing from the ledger\n * entirely), the vector store is stale for that item and a `pm reindex`\n * is needed.\n *\n * This module exposes the comparison helper as a tiny pure function so it\n * can be reused by `pm health` (gates), `pm reindex`, and `pm search`\n * (query-time staleness warning) without re-importing each other.\n */\n\nexport interface ItemWithUpdatedAt {\n id: string;\n updated_at: string;\n}\n\n/**\n * Return the sorted list of item IDs whose current `updated_at` does not\n * match the ledger entry. Missing ledger entries count as stale.\n */\nexport function collectStaleVectorizationIds<T extends ItemWithUpdatedAt>(\n items: readonly T[],\n ledgerEntries: Readonly<Record<string, string>> | null | undefined,\n): string[] {\n // Tolerate a missing / corrupted / partially-written ledger by treating\n // unknown items as stale (the same as having no entry).\n const entries = ledgerEntries ?? {};\n return items\n .filter((item) => {\n const trackedUpdatedAt = entries[item.id];\n return trackedUpdatedAt !== item.updated_at;\n })\n .map((item) => item.id)\n .sort((left, right) => left.localeCompare(right));\n}\n"],"names":[],"mappings":";;;AAwBM,SAAU,6BACd,OACA,eAAkE;AAIlE,QAAM,UAAU,iBAAiB,CAAA;AACjC,SAAO,MACJ,OAAO,CAAC,SAAQ;AACf,UAAM,mBAAmB,QAAQ,KAAK,EAAE;AACxC,WAAO,qBAAqB,KAAK;EACnC,CAAC,EACA,IAAI,CAAC,SAAS,KAAK,EAAE,EACrB,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;AACpD","debugId":"d56343df-f5f2-5c7a-b02e-19c311035a85"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// dist/core/shared/author.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]="8e7605f7-d4a4-5afb-b3c2-a555bd331f22")}catch(e){}}();
|
|
4
|
+
function resolveAuthor(candidate, fallback) {
|
|
5
|
+
const resolved = candidate ?? process.env.PM_AUTHOR ?? fallback;
|
|
6
|
+
const trimmed = resolved.trim();
|
|
7
|
+
return trimmed || "unknown";
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
resolveAuthor
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=chunk-J27KIHTG.js.map
|
|
14
|
+
|
|
15
|
+
//# debugId=8e7605f7-d4a4-5afb-b3c2-a555bd331f22
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../core/shared/author.ts"],"sourcesContent":["export function resolveAuthor(candidate: string | undefined, fallback: string): string {\n const resolved = candidate ?? process.env.PM_AUTHOR ?? fallback;\n const trimmed = resolved.trim();\n return trimmed || \"unknown\";\n}\n"],"names":[],"mappings":";;;AAAM,SAAU,cAAc,WAA+B,UAAgB;AAC3E,QAAM,WAAW,aAAa,QAAQ,IAAI,aAAa;AACvD,QAAM,UAAU,SAAS,KAAI;AAC7B,SAAO,WAAW;AACpB","debugId":"8e7605f7-d4a4-5afb-b3c2-a555bd331f22"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
EXIT_CODE,
|
|
3
3
|
PmCliError
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-U5SXYXSY.js";
|
|
5
5
|
|
|
6
6
|
// dist/core/item/parent-reference-policy.js
|
|
7
7
|
!(function() {
|
|
@@ -87,4 +87,4 @@ export {
|
|
|
87
87
|
normalizeSprintReleaseFormatPolicy,
|
|
88
88
|
validateSprintOrReleaseValue
|
|
89
89
|
};
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# sourceMappingURL=chunk-KAG77BY3.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
parseItemDocument,
|
|
3
3
|
serializeItemDocument
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AO442XLN.js";
|
|
5
5
|
import {
|
|
6
6
|
TYPE_TO_FOLDER,
|
|
7
7
|
getItemFormatFromPath,
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
removeFileIfExists,
|
|
11
11
|
runActiveOnWriteHooks,
|
|
12
12
|
writeFileAtomic
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-U5SXYXSY.js";
|
|
14
14
|
|
|
15
15
|
// dist/core/store/item-format-migration.js
|
|
16
16
|
import fs from "node:fs/promises";
|
|
@@ -119,4 +119,4 @@ async function migrateItemFilesToFormat(pmRoot, targetFormat, op = "item_format:
|
|
|
119
119
|
export {
|
|
120
120
|
migrateItemFilesToFormat
|
|
121
121
|
};
|
|
122
|
-
//# sourceMappingURL=chunk-
|
|
122
|
+
//# sourceMappingURL=chunk-KJ33AOCY.js.map
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
normalizeItemTypeDefinition,
|
|
5
5
|
normalizeItemTypeStringList,
|
|
6
6
|
strictPolicyCommand
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-U5SXYXSY.js";
|
|
8
8
|
|
|
9
9
|
// dist/core/item/type-registry.js
|
|
10
10
|
!(function() {
|
|
11
11
|
try {
|
|
12
12
|
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
13
|
-
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "
|
|
13
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "a9d817e7-a20f-58e2-a7ee-eed2f71c0743");
|
|
14
14
|
} catch (e2) {
|
|
15
15
|
}
|
|
16
16
|
})();
|
|
@@ -81,7 +81,8 @@ var CREATE_COMMAND_OPTION_KEYS = [
|
|
|
81
81
|
"doc",
|
|
82
82
|
"reminder",
|
|
83
83
|
"event",
|
|
84
|
-
"typeOption"
|
|
84
|
+
"typeOption",
|
|
85
|
+
"field"
|
|
85
86
|
];
|
|
86
87
|
var UPDATE_COMMAND_OPTION_KEYS = [
|
|
87
88
|
"title",
|
|
@@ -136,6 +137,7 @@ var UPDATE_COMMAND_OPTION_KEYS = [
|
|
|
136
137
|
"reminder",
|
|
137
138
|
"event",
|
|
138
139
|
"typeOption",
|
|
140
|
+
"field",
|
|
139
141
|
"allowAuditUpdate",
|
|
140
142
|
"force"
|
|
141
143
|
];
|
|
@@ -629,4 +631,4 @@ export {
|
|
|
629
631
|
resolveCommandOptionPolicyState,
|
|
630
632
|
validateTypeOptions
|
|
631
633
|
};
|
|
632
|
-
//# sourceMappingURL=chunk-
|
|
634
|
+
//# sourceMappingURL=chunk-KJE2FOS4.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../core/item/type-registry.ts"],
|
|
4
|
+
"sourcesContent": ["import { TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport type { ExtensionRegistrationRegistry } from \"../extensions/loader.js\";\nimport type {\n ItemTypeCommandOptionPolicy,\n ItemTypeDefinition,\n ItemTypeOptionDefinition,\n PmSettings,\n} from \"../../types/index.js\";\nimport { ITEM_TYPE_VALUES } from \"../../types/index.js\";\nimport {\n normalizeItemTypeDefinition as normalizeSharedItemTypeDefinition,\n normalizeItemTypeStringList,\n strictPolicyCommand,\n} from \"./item-type-definition.js\";\n\nexport const DEFAULT_REQUIRED_CREATE_FIELDS = [\n \"title\",\n \"description\",\n \"status\",\n \"priority\",\n \"tags\",\n \"body\",\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"author\",\n \"message\",\n \"assignee\",\n] as const;\n\nexport const DEFAULT_REQUIRED_CREATE_REPEATABLES = [\"dep\", \"comment\", \"note\", \"learning\", \"file\", \"test\", \"doc\"] as const;\n\nexport type CommandOptionPolicyCommand = \"create\" | \"update\";\n\nconst CREATE_COMMAND_OPTION_KEYS = [\n \"title\",\n \"description\",\n \"type\",\n \"status\",\n \"priority\",\n \"tags\",\n \"body\",\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"definitionOfReady\",\n \"order\",\n \"goal\",\n \"objective\",\n \"value\",\n \"impact\",\n \"outcome\",\n \"whyNow\",\n \"author\",\n \"message\",\n \"assignee\",\n \"parent\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n \"blockedBy\",\n \"blockedReason\",\n \"unblockNote\",\n \"reporter\",\n \"severity\",\n \"environment\",\n \"reproSteps\",\n \"resolution\",\n \"expectedResult\",\n \"actualResult\",\n \"affectedVersion\",\n \"fixedVersion\",\n \"component\",\n \"regression\",\n \"customerImpact\",\n \"dep\",\n \"comment\",\n \"note\",\n \"learning\",\n \"file\",\n \"test\",\n \"doc\",\n \"reminder\",\n \"event\",\n \"typeOption\",\n \"field\",\n] as const;\n\nconst UPDATE_COMMAND_OPTION_KEYS = [\n \"title\",\n \"description\",\n \"body\",\n \"status\",\n \"closeReason\",\n \"priority\",\n \"type\",\n \"tags\",\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"definitionOfReady\",\n \"order\",\n \"goal\",\n \"objective\",\n \"value\",\n \"impact\",\n \"outcome\",\n \"whyNow\",\n \"author\",\n \"message\",\n \"assignee\",\n \"parent\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n \"blockedBy\",\n \"blockedReason\",\n \"unblockNote\",\n \"reporter\",\n \"severity\",\n \"environment\",\n \"reproSteps\",\n \"resolution\",\n \"expectedResult\",\n \"actualResult\",\n \"affectedVersion\",\n \"fixedVersion\",\n \"component\",\n \"regression\",\n \"customerImpact\",\n \"comment\",\n \"note\",\n \"learning\",\n \"file\",\n \"test\",\n \"doc\",\n \"reminder\",\n \"event\",\n \"typeOption\",\n \"field\",\n \"allowAuditUpdate\",\n \"force\",\n] as const;\n\nconst SHARED_COMMAND_OPTION_ALIASES: Record<string, string> = {\n \"close-reason\": \"closeReason\",\n close_reason: \"closeReason\",\n \"estimated-minutes\": \"estimatedMinutes\",\n estimated_minutes: \"estimatedMinutes\",\n estimate: \"estimatedMinutes\",\n \"acceptance-criteria\": \"acceptanceCriteria\",\n acceptance_criteria: \"acceptanceCriteria\",\n ac: \"acceptanceCriteria\",\n \"definition-of-ready\": \"definitionOfReady\",\n definition_of_ready: \"definitionOfReady\",\n rank: \"order\",\n \"why-now\": \"whyNow\",\n why_now: \"whyNow\",\n \"blocked-by\": \"blockedBy\",\n blocked_by: \"blockedBy\",\n \"blocked-reason\": \"blockedReason\",\n blocked_reason: \"blockedReason\",\n \"unblock-note\": \"unblockNote\",\n unblock_note: \"unblockNote\",\n \"repro-steps\": \"reproSteps\",\n repro_steps: \"reproSteps\",\n \"expected-result\": \"expectedResult\",\n expected_result: \"expectedResult\",\n \"actual-result\": \"actualResult\",\n actual_result: \"actualResult\",\n \"affected-version\": \"affectedVersion\",\n affected_version: \"affectedVersion\",\n \"fixed-version\": \"fixedVersion\",\n fixed_version: \"fixedVersion\",\n \"customer-impact\": \"customerImpact\",\n customer_impact: \"customerImpact\",\n \"type-option\": \"typeOption\",\n type_option: \"typeOption\",\n type_options: \"typeOption\",\n};\n\nconst CREATE_COMMAND_OPTION_ALIASES: Record<string, string> = {\n ...SHARED_COMMAND_OPTION_ALIASES,\n};\n\nconst UPDATE_COMMAND_OPTION_ALIASES: Record<string, string> = {\n ...SHARED_COMMAND_OPTION_ALIASES,\n \"allow-audit-update\": \"allowAuditUpdate\",\n allow_audit_update: \"allowAuditUpdate\",\n};\n\nconst CREATE_COMMAND_OPTION_FLAG_LABELS: Record<string, string> = {\n title: \"--title\",\n description: \"--description\",\n type: \"--type\",\n status: \"--status\",\n priority: \"--priority\",\n tags: \"--tags\",\n body: \"--body\",\n deadline: \"--deadline\",\n estimatedMinutes: \"--estimate/--estimated-minutes\",\n acceptanceCriteria: \"--acceptance-criteria/--ac\",\n definitionOfReady: \"--definition-of-ready\",\n order: \"--order/--rank\",\n goal: \"--goal\",\n objective: \"--objective\",\n value: \"--value\",\n impact: \"--impact\",\n outcome: \"--outcome\",\n whyNow: \"--why-now\",\n author: \"--author\",\n message: \"--message\",\n assignee: \"--assignee\",\n parent: \"--parent\",\n reviewer: \"--reviewer\",\n risk: \"--risk\",\n confidence: \"--confidence\",\n sprint: \"--sprint\",\n release: \"--release\",\n blockedBy: \"--blocked-by\",\n blockedReason: \"--blocked-reason\",\n unblockNote: \"--unblock-note\",\n reporter: \"--reporter\",\n severity: \"--severity\",\n environment: \"--environment\",\n reproSteps: \"--repro-steps\",\n resolution: \"--resolution\",\n expectedResult: \"--expected-result\",\n actualResult: \"--actual-result\",\n affectedVersion: \"--affected-version\",\n fixedVersion: \"--fixed-version\",\n component: \"--component\",\n regression: \"--regression\",\n customerImpact: \"--customer-impact\",\n dep: \"--dep\",\n comment: \"--comment\",\n note: \"--note\",\n learning: \"--learning\",\n file: \"--file\",\n test: \"--test\",\n doc: \"--doc\",\n reminder: \"--reminder\",\n event: \"--event\",\n typeOption: \"--type-option\",\n};\n\nconst UPDATE_COMMAND_OPTION_FLAG_LABELS: Record<string, string> = {\n title: \"--title\",\n description: \"--description\",\n body: \"--body\",\n status: \"--status\",\n closeReason: \"--close-reason\",\n priority: \"--priority\",\n type: \"--type\",\n tags: \"--tags\",\n deadline: \"--deadline\",\n estimatedMinutes: \"--estimate/--estimated-minutes\",\n acceptanceCriteria: \"--acceptance-criteria/--ac\",\n definitionOfReady: \"--definition-of-ready\",\n order: \"--order/--rank\",\n goal: \"--goal\",\n objective: \"--objective\",\n value: \"--value\",\n impact: \"--impact\",\n outcome: \"--outcome\",\n whyNow: \"--why-now\",\n assignee: \"--assignee\",\n parent: \"--parent\",\n reviewer: \"--reviewer\",\n risk: \"--risk\",\n confidence: \"--confidence\",\n sprint: \"--sprint\",\n release: \"--release\",\n blockedBy: \"--blocked-by\",\n blockedReason: \"--blocked-reason\",\n unblockNote: \"--unblock-note\",\n reporter: \"--reporter\",\n severity: \"--severity\",\n environment: \"--environment\",\n reproSteps: \"--repro-steps\",\n resolution: \"--resolution\",\n expectedResult: \"--expected-result\",\n actualResult: \"--actual-result\",\n affectedVersion: \"--affected-version\",\n fixedVersion: \"--fixed-version\",\n component: \"--component\",\n regression: \"--regression\",\n customerImpact: \"--customer-impact\",\n comment: \"--comment\",\n note: \"--note\",\n learning: \"--learning\",\n file: \"--file\",\n test: \"--test\",\n doc: \"--doc\",\n reminder: \"--reminder\",\n event: \"--event\",\n typeOption: \"--type-option\",\n allowAuditUpdate: \"--allow-audit-update\",\n author: \"--author\",\n message: \"--message\",\n force: \"--force\",\n};\n\nexport interface CommandOptionPolicyState {\n required: string[];\n hidden: string[];\n disabled: string[];\n errors: string[];\n}\n\nexport interface ResolvedItemTypeDefinition {\n name: string;\n /** Optional human description carried from the type definition. */\n description?: string;\n folder: string;\n aliases: string[];\n /** Optional per-type status applied at create time when `--status` is omitted. */\n default_status?: string;\n required_create_fields: string[];\n required_create_repeatables: string[];\n options: ItemTypeOptionDefinition[];\n command_option_policies: ItemTypeCommandOptionPolicy[];\n}\n\nexport interface ItemTypeRegistry {\n types: string[];\n folders: string[];\n type_to_folder: Record<string, string>;\n by_type: Record<string, ResolvedItemTypeDefinition>;\n alias_to_type: Record<string, string>;\n}\n\nfunction normalizeCommandOptionToken(value: string): string {\n return value.trim().replace(/^--+/, \"\").toLowerCase();\n}\n\nfunction commandOptionKeys(command: CommandOptionPolicyCommand): readonly string[] {\n return command === \"create\" ? CREATE_COMMAND_OPTION_KEYS : UPDATE_COMMAND_OPTION_KEYS;\n}\n\nfunction commandOptionAliases(command: CommandOptionPolicyCommand): Record<string, string> {\n return command === \"create\" ? CREATE_COMMAND_OPTION_ALIASES : UPDATE_COMMAND_OPTION_ALIASES;\n}\n\nexport function canonicalizeCommandOptionKey(\n command: CommandOptionPolicyCommand,\n rawOption: string,\n): string | undefined {\n const normalizedToken = normalizeCommandOptionToken(rawOption);\n if (normalizedToken.length === 0) {\n return undefined;\n }\n const aliased = commandOptionAliases(command)[normalizedToken];\n if (aliased) {\n return aliased;\n }\n return commandOptionKeys(command).find((candidate) => candidate.toLowerCase() === normalizedToken);\n}\n\nexport function commandOptionFlagLabel(command: CommandOptionPolicyCommand, optionKey: string): string {\n const labels = command === \"create\" ? CREATE_COMMAND_OPTION_FLAG_LABELS : UPDATE_COMMAND_OPTION_FLAG_LABELS;\n return labels[optionKey] ?? `--${optionKey.replace(/([A-Z])/g, \"-$1\").toLowerCase()}`;\n}\n\nfunction toDefaultFolder(name: string): string {\n const normalized = name\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n if (normalized.length === 0) {\n return \"items\";\n }\n return normalized.endsWith(\"s\") ? normalized : `${normalized}s`;\n}\n\n// Runtime registry consumes untrusted extension/file definitions, so it uses the\n// strict policy-command resolver (trim + lowercase, reject non-create/update). All\n// other normalization is single-sourced from ./item-type-definition.ts (pm-v798).\nfunction normalizeTypeDefinition(definition: ItemTypeDefinition): ItemTypeDefinition | null {\n return normalizeSharedItemTypeDefinition(definition, { resolvePolicyCommand: strictPolicyCommand });\n}\n\nfunction coerceTypeDefinitionFromUnknown(raw: unknown): ItemTypeDefinition | null {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return null;\n }\n const record = raw as Record<string, unknown>;\n const name = typeof record.name === \"string\" ? record.name : \"\";\n if (name.trim().length === 0) {\n return null;\n }\n const folder = typeof record.folder === \"string\" ? record.folder : undefined;\n const description = typeof record.description === \"string\" ? record.description : undefined;\n const defaultStatus = typeof record.default_status === \"string\" ? record.default_status : undefined;\n const aliases = Array.isArray(record.aliases) ? record.aliases.filter((value): value is string => typeof value === \"string\") : undefined;\n const requiredCreateFields = Array.isArray(record.required_create_fields)\n ? record.required_create_fields.filter((value): value is string => typeof value === \"string\")\n : undefined;\n const requiredCreateRepeatables = Array.isArray(record.required_create_repeatables)\n ? record.required_create_repeatables.filter((value): value is string => typeof value === \"string\")\n : undefined;\n let options: ItemTypeOptionDefinition[] | undefined;\n if (Array.isArray(record.options)) {\n options = [];\n for (const entry of record.options) {\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n continue;\n }\n const optionRecord = entry as Record<string, unknown>;\n if (typeof optionRecord.key !== \"string\") {\n continue;\n }\n options.push({\n key: optionRecord.key,\n values: Array.isArray(optionRecord.values)\n ? optionRecord.values.filter((value): value is string => typeof value === \"string\")\n : [],\n required: optionRecord.required === undefined ? undefined : Boolean(optionRecord.required),\n aliases: Array.isArray(optionRecord.aliases)\n ? optionRecord.aliases.filter((value): value is string => typeof value === \"string\")\n : undefined,\n description: typeof optionRecord.description === \"string\" ? optionRecord.description : undefined,\n });\n }\n }\n let commandOptionPolicies: ItemTypeCommandOptionPolicy[] | undefined;\n if (Array.isArray(record.command_option_policies)) {\n commandOptionPolicies = [];\n for (const entry of record.command_option_policies) {\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n continue;\n }\n const policyRecord = entry as Record<string, unknown>;\n if (typeof policyRecord.command !== \"string\" || typeof policyRecord.option !== \"string\") {\n continue;\n }\n const normalizedCommand = policyRecord.command.trim().toLowerCase();\n if (normalizedCommand !== \"create\" && normalizedCommand !== \"update\") {\n continue;\n }\n commandOptionPolicies.push({\n command: normalizedCommand,\n option: policyRecord.option,\n required: policyRecord.required === undefined ? undefined : Boolean(policyRecord.required),\n visible: policyRecord.visible === undefined ? undefined : Boolean(policyRecord.visible),\n enabled: policyRecord.enabled === undefined ? undefined : Boolean(policyRecord.enabled),\n });\n }\n }\n return {\n name,\n description,\n default_status: defaultStatus,\n folder,\n aliases,\n required_create_fields: requiredCreateFields,\n required_create_repeatables: requiredCreateRepeatables,\n options,\n command_option_policies: commandOptionPolicies,\n };\n}\n\nfunction applyTypeDefinitions(\n source: ItemTypeDefinition[],\n target: Map<string, ResolvedItemTypeDefinition>,\n preserveBuiltinDefaults: boolean,\n): void {\n for (const rawDefinition of source) {\n const normalizedDefinition = normalizeTypeDefinition(rawDefinition);\n if (!normalizedDefinition) {\n continue;\n }\n const lowerName = normalizedDefinition.name.toLowerCase();\n const existing = target.get(lowerName);\n const keepName = existing?.name ?? normalizedDefinition.name;\n const folder = normalizedDefinition.folder ?? existing?.folder ?? toDefaultFolder(keepName);\n const aliases = normalizeItemTypeStringList([\n ...(existing?.aliases ?? []),\n ...(normalizedDefinition.aliases ?? []),\n ]);\n const requiredCreateFields = normalizedDefinition.required_create_fields\n ? normalizeItemTypeStringList(normalizedDefinition.required_create_fields)\n : existing?.required_create_fields ??\n (preserveBuiltinDefaults ? [...DEFAULT_REQUIRED_CREATE_FIELDS] : []);\n const requiredCreateRepeatables = normalizedDefinition.required_create_repeatables\n ? normalizeItemTypeStringList(normalizedDefinition.required_create_repeatables)\n : existing?.required_create_repeatables ??\n (preserveBuiltinDefaults ? [...DEFAULT_REQUIRED_CREATE_REPEATABLES] : []);\n const options = normalizedDefinition.options\n ? normalizedDefinition.options\n : existing?.options\n ? [...existing.options]\n : [];\n const commandOptionPolicies = normalizedDefinition.command_option_policies\n ? normalizedDefinition.command_option_policies\n : existing?.command_option_policies\n ? [...existing.command_option_policies]\n : [];\n const defaultStatus = normalizedDefinition.default_status ?? existing?.default_status;\n const description = normalizedDefinition.description ?? existing?.description;\n target.set(lowerName, {\n name: keepName,\n ...(description ? { description } : {}),\n ...(defaultStatus ? { default_status: defaultStatus } : {}),\n folder,\n aliases,\n required_create_fields: requiredCreateFields,\n required_create_repeatables: requiredCreateRepeatables,\n options,\n command_option_policies: commandOptionPolicies,\n });\n }\n}\n\nfunction collectExtensionTypeDefinitions(registrations: ExtensionRegistrationRegistry | null | undefined): ItemTypeDefinition[] {\n if (!registrations) {\n return [];\n }\n const definitions: ItemTypeDefinition[] = [];\n for (const registration of registrations.item_types ?? []) {\n const typeDefinitionsRaw = (registration as { types?: unknown[] }).types;\n if (!Array.isArray(typeDefinitionsRaw)) {\n continue;\n }\n for (const rawDefinition of typeDefinitionsRaw) {\n const normalized = coerceTypeDefinitionFromUnknown(rawDefinition);\n if (normalized) {\n definitions.push(normalized);\n }\n }\n }\n return definitions;\n}\n\nexport function resolveItemTypeRegistry(\n settings: PmSettings,\n extensionRegistrations: ExtensionRegistrationRegistry | null | undefined = null,\n): ItemTypeRegistry {\n const byLowerName = new Map<string, ResolvedItemTypeDefinition>();\n for (const builtin of ITEM_TYPE_VALUES) {\n byLowerName.set(builtin.toLowerCase(), {\n name: builtin,\n folder: TYPE_TO_FOLDER[builtin],\n aliases: [],\n required_create_fields: [...DEFAULT_REQUIRED_CREATE_FIELDS],\n required_create_repeatables: [...DEFAULT_REQUIRED_CREATE_REPEATABLES],\n options: [],\n command_option_policies: [],\n });\n }\n\n applyTypeDefinitions(settings.item_types?.definitions ?? [], byLowerName, false);\n applyTypeDefinitions(collectExtensionTypeDefinitions(extensionRegistrations), byLowerName, false);\n\n const definitions = [...byLowerName.values()].sort((left, right) => left.name.localeCompare(right.name));\n const byType: Record<string, ResolvedItemTypeDefinition> = {};\n const aliasToType: Record<string, string> = {};\n const typeToFolder: Record<string, string> = {};\n for (const definition of definitions) {\n byType[definition.name] = definition;\n typeToFolder[definition.name] = definition.folder;\n aliasToType[definition.name.toLowerCase()] = definition.name;\n for (const alias of definition.aliases) {\n aliasToType[alias.toLowerCase()] = definition.name;\n }\n }\n const folders = [...new Set(definitions.map((definition) => definition.folder))].sort((left, right) => left.localeCompare(right));\n return {\n types: definitions.map((definition) => definition.name),\n folders,\n type_to_folder: typeToFolder,\n by_type: byType,\n alias_to_type: aliasToType,\n };\n}\n\nexport function resolveTypeName(rawType: string | undefined, registry: ItemTypeRegistry): string | undefined {\n if (rawType === undefined) {\n return undefined;\n }\n return registry.alias_to_type[rawType.trim().toLowerCase()];\n}\n\nexport function resolveTypeDefinition(\n typeName: string | undefined,\n registry: ItemTypeRegistry,\n): ResolvedItemTypeDefinition | undefined {\n const resolvedName = resolveTypeName(typeName, registry);\n if (!resolvedName) {\n return undefined;\n }\n return registry.by_type[resolvedName];\n}\n\nexport function resolveCommandOptionPolicyState(\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n baseRequiredOptions: Iterable<string>,\n): CommandOptionPolicyState {\n const errors: string[] = [];\n const required = new Set<string>();\n const hidden = new Set<string>();\n const disabled = new Set<string>();\n\n for (const rawBase of baseRequiredOptions) {\n const canonical = canonicalizeCommandOptionKey(command, rawBase);\n if (!canonical) {\n errors.push(\n `Unsupported base required option \"${rawBase}\" for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n continue;\n }\n required.add(canonical);\n }\n\n for (const policy of typeDefinition.command_option_policies) {\n if (policy.command !== command) {\n continue;\n }\n const canonical = canonicalizeCommandOptionKey(command, policy.option);\n if (!canonical) {\n errors.push(\n `Unsupported command_option_policies option \"${policy.option}\" for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n continue;\n }\n if (policy.required !== undefined) {\n if (policy.required) {\n required.add(canonical);\n } else {\n required.delete(canonical);\n }\n }\n if (policy.visible !== undefined) {\n if (policy.visible) {\n hidden.delete(canonical);\n } else {\n hidden.add(canonical);\n }\n }\n if (policy.enabled !== undefined) {\n if (policy.enabled) {\n disabled.delete(canonical);\n } else {\n disabled.add(canonical);\n }\n }\n }\n\n for (const option of required) {\n if (disabled.has(option)) {\n errors.push(\n `Option \"${option}\" cannot be both required and disabled for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n }\n }\n\n return {\n required: [...required],\n hidden: [...hidden].sort((left, right) => left.localeCompare(right)),\n disabled: [...disabled].sort((left, right) => left.localeCompare(right)),\n errors,\n };\n}\n\nexport function validateTypeOptions(\n typeName: string,\n rawTypeOptions: Record<string, string> | undefined,\n registry: ItemTypeRegistry,\n): { normalized: Record<string, string> | undefined; errors: string[] } {\n const typeDefinition = resolveTypeDefinition(typeName, registry);\n if (!typeDefinition) {\n return {\n normalized: undefined,\n errors: [`Unknown type \"${typeName}\"`],\n };\n }\n const errors: string[] = [];\n const optionByAlias = new Map<string, ItemTypeOptionDefinition>();\n for (const option of typeDefinition.options) {\n optionByAlias.set(option.key.toLowerCase(), option);\n for (const alias of option.aliases ?? []) {\n optionByAlias.set(alias.toLowerCase(), option);\n }\n }\n\n const normalized: Record<string, string> = {};\n for (const [rawKey, rawValue] of Object.entries(rawTypeOptions ?? {})) {\n const trimmedKey = rawKey.trim();\n const trimmedValue = rawValue.trim();\n if (trimmedKey.length === 0) {\n errors.push(\"type option keys must not be empty\");\n continue;\n }\n if (trimmedValue.length === 0) {\n errors.push(`type option \"${trimmedKey}\" must not be empty`);\n continue;\n }\n const optionDefinition = optionByAlias.get(trimmedKey.toLowerCase());\n if (!optionDefinition) {\n const allowed = typeDefinition.options.map((option) => option.key).join(\", \");\n errors.push(\n typeDefinition.options.length > 0\n ? `Unknown type option \"${trimmedKey}\" for type \"${typeDefinition.name}\". Allowed: ${allowed}`\n : `Type \"${typeDefinition.name}\" does not define any configurable type options`,\n );\n continue;\n }\n const allowedValues = optionDefinition.values;\n let resolvedValue = trimmedValue;\n if (allowedValues.length > 0) {\n const valueLookup = new Map(allowedValues.map((value) => [value.toLowerCase(), value]));\n const canonical = valueLookup.get(trimmedValue.toLowerCase());\n if (!canonical) {\n errors.push(\n `Invalid value \"${trimmedValue}\" for type option \"${optionDefinition.key}\". Allowed: ${allowedValues.join(\", \")}`,\n );\n continue;\n }\n resolvedValue = canonical;\n }\n normalized[optionDefinition.key] = resolvedValue;\n }\n\n for (const option of typeDefinition.options) {\n if (option.required && !(option.key in normalized)) {\n errors.push(`Missing required type option \"${option.key}\" for type \"${typeDefinition.name}\"`);\n }\n }\n\n const sortedKeys = Object.keys(normalized).sort((left, right) => left.localeCompare(right));\n if (sortedKeys.length === 0) {\n return {\n normalized: undefined,\n errors,\n };\n }\n return {\n normalized: Object.fromEntries(sortedKeys.map((key) => [key, normalized[key]])),\n errors,\n };\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;AAeO,IAAM,iCAAiC;EAC5C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGK,IAAM,sCAAsC,CAAC,OAAO,WAAW,QAAQ,YAAY,QAAQ,QAAQ,KAAK;AAI/G,IAAM,6BAA6B;EACjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF,IAAM,6BAA6B;EACjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF,IAAM,gCAAwD;EAC5D,gBAAgB;EAChB,cAAc;EACd,qBAAqB;EACrB,mBAAmB;EACnB,UAAU;EACV,uBAAuB;EACvB,qBAAqB;EACrB,IAAI;EACJ,uBAAuB;EACvB,qBAAqB;EACrB,MAAM;EACN,WAAW;EACX,SAAS;EACT,cAAc;EACd,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;EAChB,gBAAgB;EAChB,cAAc;EACd,eAAe;EACf,aAAa;EACb,mBAAmB;EACnB,iBAAiB;EACjB,iBAAiB;EACjB,eAAe;EACf,oBAAoB;EACpB,kBAAkB;EAClB,iBAAiB;EACjB,eAAe;EACf,mBAAmB;EACnB,iBAAiB;EACjB,eAAe;EACf,aAAa;EACb,cAAc;;AAGhB,IAAM,gCAAwD;EAC5D,GAAG;;AAGL,IAAM,gCAAwD;EAC5D,GAA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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|