@unbrained/pm-cli 2026.6.5 → 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 +40 -0
- package/CONTRIBUTING.md +1 -0
- package/README.md +12 -4
- package/dist/cli/commands/completion.js +21 -7
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/contracts.js +5 -3
- package/dist/cli/commands/contracts.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/health.js +15 -2
- 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 +1 -0
- package/dist/cli/commands/index.js +3 -2
- package/dist/cli/commands/index.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/help-content.js +11 -2
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/register-list-query.js +7 -4
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-operations.js +29 -6
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli-bundle/chunks/activity-CVXTCHYY.js +16 -0
- package/dist/cli-bundle/chunks/{activity-3RWRRNOW.js → activity-JM6DTDND.js} +11 -11
- package/dist/cli-bundle/chunks/{aggregate-J35K7WZB.js → aggregate-GI7WSZPH.js} +10 -10
- package/dist/cli-bundle/chunks/{aggregate-OOAGKWRG.js → aggregate-VNAHUNNF.js} +10 -10
- package/dist/cli-bundle/chunks/{append-5JE3YGXU.js → append-7H5N64R2.js} +8 -8
- package/dist/cli-bundle/chunks/{append-PNN6UIBZ.js → append-WMKRXKCE.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-D5X7N6FI.js → chunk-23YFZ3IG.js} +12 -12
- package/dist/cli-bundle/chunks/{chunk-FVXM3GKS.js → chunk-2HVRUSQA.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-V3JQ4IPL.js → chunk-2RSPZI5H.js} +102 -22
- package/dist/cli-bundle/chunks/chunk-2RSPZI5H.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SZQCER6S.js → chunk-2VBQ6ZXS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-A6PEXMYN.js → chunk-2VVCGBNV.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-UOVLWB47.js → chunk-3BWOVLTH.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-5IRA6IYD.js → chunk-3FI4SEFT.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-3OH4DAEB.js → chunk-3LB74A67.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-GFWHHMVV.js → chunk-3VAM3NNM.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-4QCR4QW3.js → chunk-4LL6TK5B.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-TBQVUNVH.js → chunk-52MAOQ6J.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-5KB4X7YY.js → chunk-5FDATVEZ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-4LTBNUYT.js → chunk-5SFCOO6B.js} +76 -7
- package/dist/cli-bundle/chunks/{chunk-4LTBNUYT.js.map → chunk-5SFCOO6B.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-GCAVRLGE.js → chunk-6ER6DXH5.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-26KTVXJW.js → chunk-6P6GGMOG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-MISYRLEP.js → chunk-77GFDHGF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-HPH6X4ZZ.js → chunk-AO442XLN.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-ORTLYVA4.js → chunk-AY43SBIN.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-D3WUNETC.js → chunk-BQHUILZS.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-KCMIYKTA.js → chunk-E5FJNAZA.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-OIQIXTNB.js → chunk-ECCMVXGM.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-5PAOPUZX.js → chunk-FRAUKRU2.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-JQI2HE55.js → chunk-GCOQW437.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-CWT53EYT.js → chunk-GGYWB3Y2.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-ATBVS6WW.js → chunk-GU2ZJ2VV.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-ASQM3IF5.js → chunk-GXSUPCBV.js} +5 -4
- package/dist/cli-bundle/chunks/{chunk-SSFMJCPF.js → chunk-HZGUAH22.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-GPGAYASV.js → chunk-I2HSTRJF.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-RQAWLSUU.js → chunk-I6BNFU5X.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-OUF3ARDX.js → chunk-IJGCZSIQ.js} +12 -12
- 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-XX5LRINW.js → chunk-KAG77BY3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BNL6S7QH.js → chunk-KJ33AOCY.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-4PJQSECJ.js → chunk-KJE2FOS4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-GNHVV4SY.js → chunk-KWU6HG75.js} +37 -14
- package/dist/cli-bundle/chunks/chunk-KWU6HG75.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-KBG47ZOY.js → chunk-LB3RUL2N.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-HZOS2UG5.js → chunk-LCM63IXU.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-VGO2T3TY.js → chunk-ME2YH6FN.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-ZRVSMOMR.js → chunk-MITFDD35.js} +12 -12
- package/dist/cli-bundle/chunks/{chunk-Y2AKE2HS.js → chunk-N7ACFE26.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-AXXKLVTW.js → chunk-NUZ5HKR4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KK6YPGH3.js → chunk-OVQCEJPG.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-B3N4TKNL.js → chunk-OZ7NSQHL.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-TK633IVD.js → chunk-PDDFYW4X.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-DFIZGAI5.js → chunk-PIU6RSL3.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-O5IBJE6S.js → chunk-PO3GSVFV.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-WIKR7KFL.js → chunk-PRJCELV4.js} +108 -21
- package/dist/cli-bundle/chunks/chunk-PRJCELV4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-ZQ4F6EC4.js → chunk-PROOHX4K.js} +38 -15
- package/dist/cli-bundle/chunks/chunk-PROOHX4K.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-N5YF3VFN.js → chunk-Q7SPNHLW.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-RANZIID5.js → chunk-QO7EBBOM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LDJK7SHN.js → chunk-R6UFP2GE.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-CCUFLH4J.js → chunk-RWPSOIEE.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-UFCG3SWR.js → chunk-RZN6VURO.js} +3 -3
- 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-KA24HME7.js → chunk-T3LC5LKB.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NQP3ECKF.js → chunk-TCD3R2PF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EHXPIKKP.js → chunk-TPH5XEVD.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-SRVKTWPR.js → chunk-U5SXYXSY.js} +75 -6
- package/dist/cli-bundle/chunks/{chunk-SRVKTWPR.js.map → chunk-U5SXYXSY.js.map} +2 -2
- package/dist/cli-bundle/chunks/{chunk-T2ORWB6D.js → chunk-UBOPJT3S.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-S3CV7JGJ.js → chunk-UM2GBHS4.js} +5 -4
- package/dist/cli-bundle/chunks/{chunk-G5BACLYH.js → chunk-W7XABV4H.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-K47WAYQV.js → chunk-WKY2IBOQ.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-7K24QB23.js → chunk-WOPXVEZP.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-DFUSXJDE.js → chunk-WSMOSYRD.js} +12 -12
- package/dist/cli-bundle/chunks/{chunk-CJDQB2ED.js → chunk-XLTD2HN3.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-TQ3ZK6VD.js → chunk-XSJCLN2R.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-XG7RJYHV.js → chunk-XTGLRY2Y.js} +6 -6
- package/dist/cli-bundle/chunks/{chunk-JB4RGL4V.js → chunk-YL2DJGYS.js} +7 -7
- package/dist/cli-bundle/chunks/{claim-AZLP7YFO.js → claim-4DBF6RVG.js} +10 -10
- package/dist/cli-bundle/chunks/{claim-ZFA7HKU4.js → claim-X2P4IB7J.js} +10 -10
- package/dist/cli-bundle/chunks/close-3HDWDA3L.js +13 -0
- package/dist/cli-bundle/chunks/{close-65DFYAVS.js → close-PTYFA45H.js} +8 -8
- package/dist/cli-bundle/chunks/{close-many-UKZSQGM7.js → close-many-7CGIDPTJ.js} +15 -15
- package/dist/cli-bundle/chunks/{close-many-AKPZNSGI.js → close-many-ERFO6LHR.js} +15 -15
- package/dist/cli-bundle/chunks/{comments-CJWXQI7X.js → comments-OONGABK5.js} +10 -10
- package/dist/cli-bundle/chunks/{comments-AGBNSJJH.js → comments-QKBYCWKD.js} +10 -10
- package/dist/cli-bundle/chunks/{config-DDPYIA6J.js → config-6FXCQKIF.js} +8 -8
- package/dist/cli-bundle/chunks/{config-5ON3ADRH.js → config-U4RZ4CQB.js} +8 -8
- package/dist/cli-bundle/chunks/{context-E6U3DWVM.js → context-FYYJGFWS.js} +13 -13
- package/dist/cli-bundle/chunks/{context-ZOJEN5VT.js → context-YMJ3Z2HQ.js} +13 -13
- package/dist/cli-bundle/chunks/{contracts-LCSX5R53.js → contracts-QDB6OMLQ.js} +10 -6
- package/dist/cli-bundle/chunks/contracts-QDB6OMLQ.js.map +1 -0
- package/dist/cli-bundle/chunks/{contracts-CXSFM45B.js → contracts-RFSPGVVJ.js} +9 -5
- package/dist/cli-bundle/chunks/{contracts-LCSX5R53.js.map → contracts-RFSPGVVJ.js.map} +7 -1
- package/dist/cli-bundle/chunks/{create-WYFKN2U4.js → create-I5L4EYYZ.js} +13 -13
- package/dist/cli-bundle/chunks/create-JTZNCTQC.js +27 -0
- package/dist/cli-bundle/chunks/{delete-ZXWC56WO.js → delete-7HPGI4GZ.js} +7 -7
- package/dist/cli-bundle/chunks/{delete-RONNH4F4.js → delete-VXUPH5RS.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-WII3O4HB.js → deps-JSRRWC3Z.js} +7 -7
- package/dist/cli-bundle/chunks/{deps-EHXIFOZR.js → deps-SCZIFK2Z.js} +7 -7
- package/dist/cli-bundle/chunks/{docs-PDREIMLS.js → docs-GJK6K4VP.js} +9 -9
- package/dist/cli-bundle/chunks/{docs-JMVCFNHH.js → docs-WW4N3MBM.js} +9 -9
- package/dist/cli-bundle/chunks/{extension-G6UXSM5S.js → extension-J7IBMFTD.js} +4 -4
- package/dist/cli-bundle/chunks/{extension-B4ROVWJD.js → extension-VDY2U33M.js} +4 -4
- package/dist/cli-bundle/chunks/{files-2PN7UM2D.js → files-ISZJGILQ.js} +9 -9
- package/dist/cli-bundle/chunks/{files-MXYS5W4M.js → files-WKOD326U.js} +9 -9
- 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-WXMLRG7M.js → get-RV37HT3G.js} +10 -10
- package/dist/cli-bundle/chunks/{get-CINFEUIY.js → get-WXU6WI5P.js} +10 -10
- package/dist/cli-bundle/chunks/{health-IT5DBPRJ.js → health-6L6EH4WR.js} +26 -13
- package/dist/cli-bundle/chunks/health-6L6EH4WR.js.map +7 -0
- package/dist/cli-bundle/chunks/{health-5VPOJQ53.js → health-LOI2HHKB.js} +27 -14
- 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-FLZIP7PM.js → history-PKN67D5O.js} +10 -10
- package/dist/cli-bundle/chunks/history-redact-JBZNXHGR.js +19 -0
- package/dist/cli-bundle/chunks/{history-redact-SSZBAD76.js → history-redact-V4FOJGS7.js} +11 -11
- package/dist/cli-bundle/chunks/{history-repair-KC5ZOJRZ.js → history-repair-HIBCBIKK.js} +11 -11
- package/dist/cli-bundle/chunks/{history-repair-X7CO5JJZ.js → history-repair-SDMHR7JT.js} +11 -11
- package/dist/cli-bundle/chunks/init-HIVSNX3O.js +16 -0
- package/dist/cli-bundle/chunks/{init-6MRFVOLH.js → init-P56QYWJF.js} +8 -8
- package/dist/cli-bundle/chunks/{learnings-DCX55BNX.js → learnings-GDFRG5J7.js} +10 -10
- package/dist/cli-bundle/chunks/{learnings-A3CLB5CO.js → learnings-MIXSESLK.js} +10 -10
- package/dist/cli-bundle/chunks/{list-DBRECOG4.js → list-FGOWQMSM.js} +10 -10
- package/dist/cli-bundle/chunks/list-MUSQNMTD.js +20 -0
- package/dist/cli-bundle/chunks/{notes-42LIC3UE.js → notes-4XVSH2AZ.js} +10 -10
- package/dist/cli-bundle/chunks/{notes-P5O3VMQ3.js → notes-5UK3GEH2.js} +10 -10
- package/dist/cli-bundle/chunks/{plan-IGTE3WOJ.js → plan-DUMBV3QB.js} +13 -13
- package/dist/cli-bundle/chunks/{plan-HDQXEUKD.js → plan-SLMODHWX.js} +13 -13
- package/dist/cli-bundle/chunks/{register-list-query-EMNSIUO4.js → register-list-query-POCFZ5JW.js} +24 -22
- package/dist/cli-bundle/chunks/{register-list-query-EMNSIUO4.js.map → register-list-query-POCFZ5JW.js.map} +1 -1
- package/dist/cli-bundle/chunks/{register-list-query-AG3XKXWL.js → register-list-query-WST76HSQ.js} +23 -21
- package/dist/cli-bundle/chunks/{register-list-query-AG3XKXWL.js.map → register-list-query-WST76HSQ.js.map} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-M3YS6XDO.js → register-mutation-N5GSUZJV.js} +30 -30
- package/dist/cli-bundle/chunks/{register-mutation-RSMT6DPK.js → register-mutation-OA675SOU.js} +30 -30
- package/dist/cli-bundle/chunks/{register-operations-KYUOOOOD.js → register-operations-GNHBE5I3.js} +47 -34
- package/dist/cli-bundle/chunks/register-operations-GNHBE5I3.js.map +1 -0
- package/dist/cli-bundle/chunks/{register-operations-Q54JQZUN.js → register-operations-N3PMHXH5.js} +46 -33
- package/dist/cli-bundle/chunks/{register-operations-Q54JQZUN.js.map → register-operations-N3PMHXH5.js.map} +2 -2
- package/dist/cli-bundle/chunks/{register-setup-DI6P7X75.js → register-setup-JIMPKJKV.js} +15 -15
- package/dist/cli-bundle/chunks/{register-setup-YJKIQRKA.js → register-setup-ZHJI2DI3.js} +15 -15
- package/dist/cli-bundle/chunks/restore-D4RGNX33.js +17 -0
- package/dist/cli-bundle/chunks/{restore-2XVTBLKQ.js → restore-PBL6T5TW.js} +11 -11
- package/dist/cli-bundle/chunks/{schema-V6BX65Q2.js → schema-2NOO6NGB.js} +8 -8
- package/dist/cli-bundle/chunks/{schema-LVXZWFGY.js → schema-EBI4NLUO.js} +8 -8
- package/dist/cli-bundle/chunks/{search-C7NPB7G7.js → search-JPUQTVCY.js} +10 -10
- package/dist/cli-bundle/chunks/{search-5A3BMFA7.js → search-OA6JX27A.js} +10 -10
- 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-RJ4ZF35X.js → test-MXX3E5JL.js} +13 -13
- package/dist/cli-bundle/chunks/{test-OFYONO3C.js → test-WBROAJIE.js} +13 -13
- package/dist/cli-bundle/chunks/{test-all-OJE6CIO7.js → test-all-N6NSRDTV.js} +13 -13
- package/dist/cli-bundle/chunks/{test-all-EEMKNTGU.js → test-all-NTOZ7C3M.js} +13 -13
- package/dist/cli-bundle/chunks/{test-runs-IPOPFOAF.js → test-runs-V6A7LPWZ.js} +5 -5
- package/dist/cli-bundle/chunks/{test-runs-L2M7WKH7.js → test-runs-WMVTQU3Y.js} +5 -5
- package/dist/cli-bundle/chunks/update-OSV3NAQB.js +25 -0
- package/dist/cli-bundle/chunks/update-YRXSUGYQ.js +21 -0
- package/dist/cli-bundle/chunks/{update-many-DYWGW57M.js → update-many-EM6OXYGO.js} +22 -22
- package/dist/cli-bundle/chunks/{update-many-322CCH2L.js → update-many-KGGEYABR.js} +22 -22
- package/dist/cli-bundle/chunks/{upgrade-2U727SAM.js → upgrade-BLI7XBAJ.js} +4 -4
- package/dist/cli-bundle/chunks/{upgrade-3W3RVSNM.js → upgrade-LXPOQKFV.js} +4 -4
- package/dist/cli-bundle/chunks/{validate-ZFVWPEEN.js → validate-AGOAUOVW.js} +15 -15
- package/dist/cli-bundle/chunks/{validate-GZ24NYHO.js → validate-L5J6A7YO.js} +15 -15
- package/dist/cli-bundle/main.js +42 -1451
- package/dist/cli-bundle/main.js.map +4 -4
- 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/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/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/store/settings.d.ts +19 -1
- package/dist/core/store/settings.js +92 -7
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/observability.js +3 -3
- 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 +155 -37
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/enum-contracts.d.ts +2 -2
- package/dist/sdk/cli-contracts/enum-contracts.js +4 -2
- package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +10 -7
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.d.ts +23 -0
- package/dist/sdk/cli-contracts.js +41 -7
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/docs/AGENT_GUIDE.md +1 -1
- package/docs/ARCHITECTURE.md +11 -1
- package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
- package/docs/COMMANDS.md +33 -2
- package/docs/CONFIGURATION.md +9 -1
- package/docs/EXTENSIONS.md +7 -0
- package/docs/EXTENSION_AUTHOR_CONTRACTS.md +73 -0
- package/docs/ONBOARDING.md +165 -0
- package/docs/QUICKSTART.md +1 -1
- package/docs/README.md +12 -4
- package/docs/RELEASING.md +36 -1
- package/docs/TESTING.md +19 -1
- package/package.json +5 -2
- 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/dist/cli-bundle/chunks/activity-P5BUMWP3.js +0 -16
- package/dist/cli-bundle/chunks/chunk-GNHVV4SY.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-V3JQ4IPL.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-WIKR7KFL.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ZQ4F6EC4.js.map +0 -7
- package/dist/cli-bundle/chunks/close-RMHQ3KWH.js +0 -13
- package/dist/cli-bundle/chunks/contracts-CXSFM45B.js.map +0 -7
- package/dist/cli-bundle/chunks/create-ATONSAZW.js +0 -27
- package/dist/cli-bundle/chunks/gc-GT552UJH.js +0 -178
- package/dist/cli-bundle/chunks/gc-GT552UJH.js.map +0 -1
- package/dist/cli-bundle/chunks/gc-QNBRJG6H.js +0 -181
- package/dist/cli-bundle/chunks/gc-QNBRJG6H.js.map +0 -7
- package/dist/cli-bundle/chunks/health-5VPOJQ53.js.map +0 -1
- package/dist/cli-bundle/chunks/health-IT5DBPRJ.js.map +0 -7
- package/dist/cli-bundle/chunks/history-6FC4H6HI.js +0 -20
- package/dist/cli-bundle/chunks/history-redact-XKYEZDBL.js +0 -19
- package/dist/cli-bundle/chunks/init-KHX3FEEM.js +0 -16
- package/dist/cli-bundle/chunks/list-53LZ2AEO.js +0 -20
- package/dist/cli-bundle/chunks/register-operations-KYUOOOOD.js.map +0 -1
- package/dist/cli-bundle/chunks/restore-JL5QIH7H.js +0 -17
- package/dist/cli-bundle/chunks/stats-FNLYVXTB.js +0 -120
- package/dist/cli-bundle/chunks/stats-FNLYVXTB.js.map +0 -1
- package/dist/cli-bundle/chunks/stats-Y2CBTZSL.js +0 -123
- package/dist/cli-bundle/chunks/stats-Y2CBTZSL.js.map +0 -7
- package/dist/cli-bundle/chunks/update-6YEHPVXH.js +0 -25
- package/dist/cli-bundle/chunks/update-PYLVHMRD.js +0 -21
- /package/dist/cli-bundle/chunks/{activity-P5BUMWP3.js.map → activity-CVXTCHYY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{activity-3RWRRNOW.js.map → activity-JM6DTDND.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-J35K7WZB.js.map → aggregate-GI7WSZPH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{aggregate-OOAGKWRG.js.map → aggregate-VNAHUNNF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-5JE3YGXU.js.map → append-7H5N64R2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-PNN6UIBZ.js.map → append-WMKRXKCE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D5X7N6FI.js.map → chunk-23YFZ3IG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FVXM3GKS.js.map → chunk-2HVRUSQA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SZQCER6S.js.map → chunk-2VBQ6ZXS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-A6PEXMYN.js.map → chunk-2VVCGBNV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UOVLWB47.js.map → chunk-3BWOVLTH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5IRA6IYD.js.map → chunk-3FI4SEFT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3OH4DAEB.js.map → chunk-3LB74A67.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GFWHHMVV.js.map → chunk-3VAM3NNM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4QCR4QW3.js.map → chunk-4LL6TK5B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TBQVUNVH.js.map → chunk-52MAOQ6J.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5KB4X7YY.js.map → chunk-5FDATVEZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GCAVRLGE.js.map → chunk-6ER6DXH5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-26KTVXJW.js.map → chunk-6P6GGMOG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-MISYRLEP.js.map → chunk-77GFDHGF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HPH6X4ZZ.js.map → chunk-AO442XLN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ORTLYVA4.js.map → chunk-AY43SBIN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-D3WUNETC.js.map → chunk-BQHUILZS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KCMIYKTA.js.map → chunk-E5FJNAZA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OIQIXTNB.js.map → chunk-ECCMVXGM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-5PAOPUZX.js.map → chunk-FRAUKRU2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JQI2HE55.js.map → chunk-GCOQW437.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CWT53EYT.js.map → chunk-GGYWB3Y2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ATBVS6WW.js.map → chunk-GU2ZJ2VV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ASQM3IF5.js.map → chunk-GXSUPCBV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SSFMJCPF.js.map → chunk-HZGUAH22.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GPGAYASV.js.map → chunk-I2HSTRJF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RQAWLSUU.js.map → chunk-I6BNFU5X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OUF3ARDX.js.map → chunk-IJGCZSIQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XX5LRINW.js.map → chunk-KAG77BY3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BNL6S7QH.js.map → chunk-KJ33AOCY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4PJQSECJ.js.map → chunk-KJE2FOS4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KBG47ZOY.js.map → chunk-LB3RUL2N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HZOS2UG5.js.map → chunk-LCM63IXU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-VGO2T3TY.js.map → chunk-ME2YH6FN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZRVSMOMR.js.map → chunk-MITFDD35.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Y2AKE2HS.js.map → chunk-N7ACFE26.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AXXKLVTW.js.map → chunk-NUZ5HKR4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KK6YPGH3.js.map → chunk-OVQCEJPG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-B3N4TKNL.js.map → chunk-OZ7NSQHL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TK633IVD.js.map → chunk-PDDFYW4X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DFIZGAI5.js.map → chunk-PIU6RSL3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-O5IBJE6S.js.map → chunk-PO3GSVFV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-N5YF3VFN.js.map → chunk-Q7SPNHLW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RANZIID5.js.map → chunk-QO7EBBOM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LDJK7SHN.js.map → chunk-R6UFP2GE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CCUFLH4J.js.map → chunk-RWPSOIEE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UFCG3SWR.js.map → chunk-RZN6VURO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KA24HME7.js.map → chunk-T3LC5LKB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NQP3ECKF.js.map → chunk-TCD3R2PF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EHXPIKKP.js.map → chunk-TPH5XEVD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-T2ORWB6D.js.map → chunk-UBOPJT3S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-S3CV7JGJ.js.map → chunk-UM2GBHS4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-G5BACLYH.js.map → chunk-W7XABV4H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K47WAYQV.js.map → chunk-WKY2IBOQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7K24QB23.js.map → chunk-WOPXVEZP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DFUSXJDE.js.map → chunk-WSMOSYRD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CJDQB2ED.js.map → chunk-XLTD2HN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TQ3ZK6VD.js.map → chunk-XSJCLN2R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XG7RJYHV.js.map → chunk-XTGLRY2Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JB4RGL4V.js.map → chunk-YL2DJGYS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-AZLP7YFO.js.map → claim-4DBF6RVG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{claim-ZFA7HKU4.js.map → claim-X2P4IB7J.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-RMHQ3KWH.js.map → close-3HDWDA3L.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-65DFYAVS.js.map → close-PTYFA45H.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-UKZSQGM7.js.map → close-many-7CGIDPTJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-AKPZNSGI.js.map → close-many-ERFO6LHR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-CJWXQI7X.js.map → comments-OONGABK5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-AGBNSJJH.js.map → comments-QKBYCWKD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-DDPYIA6J.js.map → config-6FXCQKIF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{config-5ON3ADRH.js.map → config-U4RZ4CQB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-E6U3DWVM.js.map → context-FYYJGFWS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{context-ZOJEN5VT.js.map → context-YMJ3Z2HQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-WYFKN2U4.js.map → create-I5L4EYYZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-ATONSAZW.js.map → create-JTZNCTQC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-ZXWC56WO.js.map → delete-7HPGI4GZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-RONNH4F4.js.map → delete-VXUPH5RS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-WII3O4HB.js.map → deps-JSRRWC3Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-EHXIFOZR.js.map → deps-SCZIFK2Z.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-PDREIMLS.js.map → docs-GJK6K4VP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-JMVCFNHH.js.map → docs-WW4N3MBM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-G6UXSM5S.js.map → extension-J7IBMFTD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{extension-B4ROVWJD.js.map → extension-VDY2U33M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-2PN7UM2D.js.map → files-ISZJGILQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-MXYS5W4M.js.map → files-WKOD326U.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-WXMLRG7M.js.map → get-RV37HT3G.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{get-CINFEUIY.js.map → get-WXU6WI5P.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-6FC4H6HI.js.map → history-2BA3T5AE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-FLZIP7PM.js.map → history-PKN67D5O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-XKYEZDBL.js.map → history-redact-JBZNXHGR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-SSZBAD76.js.map → history-redact-V4FOJGS7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-KC5ZOJRZ.js.map → history-repair-HIBCBIKK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-X7CO5JJZ.js.map → history-repair-SDMHR7JT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-KHX3FEEM.js.map → init-HIVSNX3O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{init-6MRFVOLH.js.map → init-P56QYWJF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-DCX55BNX.js.map → learnings-GDFRG5J7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-A3CLB5CO.js.map → learnings-MIXSESLK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-DBRECOG4.js.map → list-FGOWQMSM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{list-53LZ2AEO.js.map → list-MUSQNMTD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-42LIC3UE.js.map → notes-4XVSH2AZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-P5O3VMQ3.js.map → notes-5UK3GEH2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-IGTE3WOJ.js.map → plan-DUMBV3QB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-HDQXEUKD.js.map → plan-SLMODHWX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-M3YS6XDO.js.map → register-mutation-N5GSUZJV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-RSMT6DPK.js.map → register-mutation-OA675SOU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-DI6P7X75.js.map → register-setup-JIMPKJKV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-YJKIQRKA.js.map → register-setup-ZHJI2DI3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-JL5QIH7H.js.map → restore-D4RGNX33.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-2XVTBLKQ.js.map → restore-PBL6T5TW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-V6BX65Q2.js.map → schema-2NOO6NGB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-LVXZWFGY.js.map → schema-EBI4NLUO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-C7NPB7G7.js.map → search-JPUQTVCY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{search-5A3BMFA7.js.map → search-OA6JX27A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-RJ4ZF35X.js.map → test-MXX3E5JL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-OFYONO3C.js.map → test-WBROAJIE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-OJE6CIO7.js.map → test-all-N6NSRDTV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-all-EEMKNTGU.js.map → test-all-NTOZ7C3M.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-IPOPFOAF.js.map → test-runs-V6A7LPWZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{test-runs-L2M7WKH7.js.map → test-runs-WMVTQU3Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-6YEHPVXH.js.map → update-OSV3NAQB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-PYLVHMRD.js.map → update-YRXSUGYQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-DYWGW57M.js.map → update-many-EM6OXYGO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-322CCH2L.js.map → update-many-KGGEYABR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-2U727SAM.js.map → upgrade-BLI7XBAJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{upgrade-3W3RVSNM.js.map → upgrade-LXPOQKFV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{validate-ZFVWPEEN.js.map → validate-AGOAUOVW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{validate-GZ24NYHO.js.map → validate-L5J6A7YO.js.map} +0 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import {
|
|
2
|
+
flushTelemetryQueueNow
|
|
3
|
+
} from "./chunk-SKJWX3QB.js";
|
|
4
|
+
import {
|
|
5
|
+
nowIso
|
|
6
|
+
} from "./chunk-QO7EBBOM.js";
|
|
7
|
+
import {
|
|
8
|
+
EXIT_CODE,
|
|
9
|
+
PmCliError,
|
|
10
|
+
pathExists,
|
|
11
|
+
readFileIfExists,
|
|
12
|
+
readSettings,
|
|
13
|
+
resolveGlobalPmRoot,
|
|
14
|
+
writeSettings
|
|
15
|
+
} from "./chunk-U5SXYXSY.js";
|
|
16
|
+
|
|
17
|
+
// dist/cli/commands/telemetry.js
|
|
18
|
+
import fs from "node:fs/promises";
|
|
19
|
+
import path from "node:path";
|
|
20
|
+
!(function() {
|
|
21
|
+
try {
|
|
22
|
+
var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
|
|
23
|
+
n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "4d50d256-348c-5406-a377-ea98099b9ec6");
|
|
24
|
+
} catch (e2) {
|
|
25
|
+
}
|
|
26
|
+
})();
|
|
27
|
+
var TELEMETRY_QUEUE_RELATIVE_PATH = path.join("runtime", "telemetry", "events.jsonl");
|
|
28
|
+
var TELEMETRY_STATE_RELATIVE_PATH = path.join("runtime", "telemetry", "state.json");
|
|
29
|
+
var TELEMETRY_RUNTIME_RELATIVE_PATH = path.join("runtime", "telemetry");
|
|
30
|
+
var DEFAULT_STATS_LIMIT = 20;
|
|
31
|
+
var TELEMETRY_SUBCOMMANDS = ["status", "flush", "stats", "clear"];
|
|
32
|
+
function normalizeTelemetrySubcommand(value) {
|
|
33
|
+
const normalized = (value ?? "status").trim().toLowerCase();
|
|
34
|
+
if (TELEMETRY_SUBCOMMANDS.includes(normalized)) {
|
|
35
|
+
return normalized;
|
|
36
|
+
}
|
|
37
|
+
throw new PmCliError(`Unknown pm telemetry subcommand "${value ?? ""}". Allowed: ${TELEMETRY_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, {
|
|
38
|
+
code: "unknown_subcommand",
|
|
39
|
+
examples: [
|
|
40
|
+
"pm telemetry status",
|
|
41
|
+
"pm telemetry flush",
|
|
42
|
+
"pm telemetry stats --limit 10",
|
|
43
|
+
"pm telemetry clear"
|
|
44
|
+
]
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function parseTelemetryStatsLimit(raw) {
|
|
48
|
+
if (raw === void 0) {
|
|
49
|
+
return DEFAULT_STATS_LIMIT;
|
|
50
|
+
}
|
|
51
|
+
if (typeof raw === "number") {
|
|
52
|
+
if (!Number.isFinite(raw) || !Number.isInteger(raw) || raw <= 0) {
|
|
53
|
+
throw new PmCliError("--limit must be a positive integer", EXIT_CODE.USAGE);
|
|
54
|
+
}
|
|
55
|
+
return raw;
|
|
56
|
+
}
|
|
57
|
+
const trimmed = raw.trim();
|
|
58
|
+
if (trimmed.length === 0 || !/^\d+$/.test(trimmed)) {
|
|
59
|
+
throw new PmCliError("--limit must be a positive integer", EXIT_CODE.USAGE);
|
|
60
|
+
}
|
|
61
|
+
const parsed = Number.parseInt(trimmed, 10);
|
|
62
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
63
|
+
throw new PmCliError("--limit must be a positive integer", EXIT_CODE.USAGE);
|
|
64
|
+
}
|
|
65
|
+
return parsed;
|
|
66
|
+
}
|
|
67
|
+
function parseTelemetryQueue(raw) {
|
|
68
|
+
if (raw === null || raw.trim().length === 0) {
|
|
69
|
+
return {
|
|
70
|
+
rows_total: 0,
|
|
71
|
+
valid_entries: 0,
|
|
72
|
+
invalid_rows: 0,
|
|
73
|
+
entries: []
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const entries = [];
|
|
77
|
+
let rowsTotal = 0;
|
|
78
|
+
let invalidRows = 0;
|
|
79
|
+
for (const line of raw.split("\n")) {
|
|
80
|
+
const trimmed = line.trim();
|
|
81
|
+
if (trimmed.length === 0) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
rowsTotal += 1;
|
|
85
|
+
try {
|
|
86
|
+
const parsed = JSON.parse(trimmed);
|
|
87
|
+
if (typeof parsed === "object" && parsed !== null && typeof parsed.attempts === "number" && typeof parsed.event === "object" && parsed.event !== null) {
|
|
88
|
+
entries.push(parsed);
|
|
89
|
+
} else {
|
|
90
|
+
invalidRows += 1;
|
|
91
|
+
}
|
|
92
|
+
} catch {
|
|
93
|
+
invalidRows += 1;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
rows_total: rowsTotal,
|
|
98
|
+
valid_entries: entries.length,
|
|
99
|
+
invalid_rows: invalidRows,
|
|
100
|
+
entries
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
async function readTelemetryRuntimeState(statePath) {
|
|
104
|
+
const stateRaw = await readFileIfExists(statePath);
|
|
105
|
+
if (stateRaw === null || stateRaw.trim().length === 0) {
|
|
106
|
+
return {};
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
const parsed = JSON.parse(stateRaw);
|
|
110
|
+
if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
|
|
111
|
+
return parsed;
|
|
112
|
+
}
|
|
113
|
+
} catch {
|
|
114
|
+
}
|
|
115
|
+
return {};
|
|
116
|
+
}
|
|
117
|
+
async function buildTelemetryStatusSummary(globalPmRoot) {
|
|
118
|
+
const settings = await readSettings(globalPmRoot);
|
|
119
|
+
const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);
|
|
120
|
+
const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);
|
|
121
|
+
const queueRaw = await readFileIfExists(queuePath);
|
|
122
|
+
const queue = parseTelemetryQueue(queueRaw);
|
|
123
|
+
const runtimeState = await readTelemetryRuntimeState(statePath);
|
|
124
|
+
return {
|
|
125
|
+
enabled: settings.telemetry.enabled,
|
|
126
|
+
endpoint: settings.telemetry.endpoint,
|
|
127
|
+
queue_path: queuePath,
|
|
128
|
+
state_path: statePath,
|
|
129
|
+
queue_rows_total: queue.rows_total,
|
|
130
|
+
queue_entries: queue.valid_entries,
|
|
131
|
+
queue_invalid_rows: queue.invalid_rows,
|
|
132
|
+
queue_size_bytes: queueRaw === null ? 0 : Buffer.byteLength(queueRaw, "utf8"),
|
|
133
|
+
last_attempted_flush_at: runtimeState.last_attempted_flush_at ?? null,
|
|
134
|
+
last_successful_flush_at: runtimeState.last_successful_flush_at ?? null,
|
|
135
|
+
last_failed_flush_at: runtimeState.last_failed_flush_at ?? null,
|
|
136
|
+
last_failed_flush_error: runtimeState.last_failed_flush_error ?? null
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function buildTelemetryStatsBuckets(entries) {
|
|
140
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
141
|
+
for (const entry of entries) {
|
|
142
|
+
const command = typeof entry.event.command === "string" && entry.event.command.trim().length > 0 ? entry.event.command : "<unknown>";
|
|
143
|
+
const eventType = typeof entry.event.event_type === "string" && entry.event.event_type.trim().length > 0 ? entry.event.event_type : "unknown";
|
|
144
|
+
const eventSchemaVersion = typeof entry.event.schema_version === "number" && Number.isFinite(entry.event.schema_version) ? Math.trunc(entry.event.schema_version) : void 0;
|
|
145
|
+
const clientSchemaVersion = typeof entry.client_schema_version === "number" && Number.isFinite(entry.client_schema_version) ? Math.trunc(entry.client_schema_version) : void 0;
|
|
146
|
+
const current = grouped.get(command) ?? {
|
|
147
|
+
count: 0,
|
|
148
|
+
max_attempts: 0,
|
|
149
|
+
event_type_counts: {},
|
|
150
|
+
event_schema_versions: /* @__PURE__ */ new Set(),
|
|
151
|
+
client_schema_versions: /* @__PURE__ */ new Set()
|
|
152
|
+
};
|
|
153
|
+
current.count += 1;
|
|
154
|
+
current.max_attempts = Math.max(current.max_attempts, Math.max(0, Math.trunc(entry.attempts)));
|
|
155
|
+
current.event_type_counts[eventType] = (current.event_type_counts[eventType] ?? 0) + 1;
|
|
156
|
+
if (eventSchemaVersion !== void 0) {
|
|
157
|
+
current.event_schema_versions.add(eventSchemaVersion);
|
|
158
|
+
}
|
|
159
|
+
if (clientSchemaVersion !== void 0) {
|
|
160
|
+
current.client_schema_versions.add(clientSchemaVersion);
|
|
161
|
+
}
|
|
162
|
+
grouped.set(command, current);
|
|
163
|
+
}
|
|
164
|
+
return [...grouped.entries()].map(([command, value]) => ({
|
|
165
|
+
command,
|
|
166
|
+
count: value.count,
|
|
167
|
+
event_type_counts: Object.fromEntries(Object.entries(value.event_type_counts).sort((left, right) => left[0].localeCompare(right[0]))),
|
|
168
|
+
max_attempts: value.max_attempts,
|
|
169
|
+
event_schema_versions: [...value.event_schema_versions].sort((left, right) => left - right),
|
|
170
|
+
client_schema_versions: [...value.client_schema_versions].sort((left, right) => left - right)
|
|
171
|
+
})).sort((left, right) => right.count - left.count || left.command.localeCompare(right.command));
|
|
172
|
+
}
|
|
173
|
+
async function runTelemetry(options, _global) {
|
|
174
|
+
void _global;
|
|
175
|
+
const subcommand = normalizeTelemetrySubcommand(options.subcommand);
|
|
176
|
+
const globalPmRoot = resolveGlobalPmRoot(process.cwd());
|
|
177
|
+
const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);
|
|
178
|
+
const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);
|
|
179
|
+
if (subcommand === "status") {
|
|
180
|
+
return {
|
|
181
|
+
action: "telemetry",
|
|
182
|
+
subcommand,
|
|
183
|
+
status: await buildTelemetryStatusSummary(globalPmRoot),
|
|
184
|
+
generated_at: nowIso()
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
if (subcommand === "flush") {
|
|
188
|
+
const before = await buildTelemetryStatusSummary(globalPmRoot);
|
|
189
|
+
await flushTelemetryQueueNow(globalPmRoot);
|
|
190
|
+
const after = await buildTelemetryStatusSummary(globalPmRoot);
|
|
191
|
+
return {
|
|
192
|
+
action: "telemetry",
|
|
193
|
+
subcommand,
|
|
194
|
+
queue_entries_before: before.queue_entries,
|
|
195
|
+
queue_entries_after: after.queue_entries,
|
|
196
|
+
queue_drained: after.queue_entries < before.queue_entries,
|
|
197
|
+
status: after,
|
|
198
|
+
generated_at: nowIso()
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
if (subcommand === "stats") {
|
|
202
|
+
const limit = parseTelemetryStatsLimit(options.limit);
|
|
203
|
+
const queueRaw = await readFileIfExists(queuePath);
|
|
204
|
+
const queue = parseTelemetryQueue(queueRaw);
|
|
205
|
+
const buckets = buildTelemetryStatsBuckets(queue.entries);
|
|
206
|
+
const selected = buckets.slice(0, limit);
|
|
207
|
+
return {
|
|
208
|
+
action: "telemetry",
|
|
209
|
+
subcommand,
|
|
210
|
+
limit,
|
|
211
|
+
total_commands: buckets.length,
|
|
212
|
+
queue_entries: queue.valid_entries,
|
|
213
|
+
queue_invalid_rows: queue.invalid_rows,
|
|
214
|
+
queue_rows_total: queue.rows_total,
|
|
215
|
+
truncated: buckets.length > selected.length,
|
|
216
|
+
stats: selected,
|
|
217
|
+
generated_at: nowIso()
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
const settings = await readSettings(globalPmRoot);
|
|
221
|
+
const previousEnabled = settings.telemetry.enabled;
|
|
222
|
+
const previousInstallationId = settings.telemetry.installation_id;
|
|
223
|
+
const previousFirstRunPromptCompleted = settings.telemetry.first_run_prompt_completed;
|
|
224
|
+
settings.telemetry.enabled = false;
|
|
225
|
+
settings.telemetry.first_run_prompt_completed = true;
|
|
226
|
+
settings.telemetry.installation_id = "";
|
|
227
|
+
const settingsChanged = previousEnabled !== settings.telemetry.enabled || previousInstallationId !== settings.telemetry.installation_id || previousFirstRunPromptCompleted !== settings.telemetry.first_run_prompt_completed;
|
|
228
|
+
if (settingsChanged) {
|
|
229
|
+
await writeSettings(globalPmRoot, settings, "telemetry:clear");
|
|
230
|
+
}
|
|
231
|
+
const telemetryRuntimePath = path.join(globalPmRoot, TELEMETRY_RUNTIME_RELATIVE_PATH);
|
|
232
|
+
const existed = await pathExists(telemetryRuntimePath);
|
|
233
|
+
await fs.rm(telemetryRuntimePath, { recursive: true, force: true });
|
|
234
|
+
const queueExistsAfter = await pathExists(queuePath);
|
|
235
|
+
const stateExistsAfter = await pathExists(statePath);
|
|
236
|
+
return {
|
|
237
|
+
action: "telemetry",
|
|
238
|
+
subcommand,
|
|
239
|
+
settings_changed: settingsChanged,
|
|
240
|
+
runtime_dir_removed: existed && !await pathExists(telemetryRuntimePath),
|
|
241
|
+
queue_exists_after: queueExistsAfter,
|
|
242
|
+
state_exists_after: stateExistsAfter,
|
|
243
|
+
status: await buildTelemetryStatusSummary(globalPmRoot),
|
|
244
|
+
generated_at: nowIso()
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
export {
|
|
248
|
+
TELEMETRY_SUBCOMMANDS,
|
|
249
|
+
runTelemetry
|
|
250
|
+
};
|
|
251
|
+
//# sourceMappingURL=telemetry-LMJ7PFUO.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../cli/commands/telemetry.ts"],
|
|
4
|
+
"sourcesContent": ["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathExists, readFileIfExists } from \"../../core/fs/fs-utils.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { resolveGlobalPmRoot } from \"../../core/store/paths.js\";\nimport { readSettings, writeSettings } from \"../../core/store/settings.js\";\nimport { flushTelemetryQueueNow } from \"../../core/telemetry/runtime.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_RUNTIME_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\");\nconst DEFAULT_STATS_LIMIT = 20;\n\nexport const TELEMETRY_SUBCOMMANDS = [\"status\", \"flush\", \"stats\", \"clear\"] as const;\nexport type TelemetrySubcommand = (typeof TELEMETRY_SUBCOMMANDS)[number];\n\ninterface TelemetryRuntimeStateRecord {\n endpoint?: string;\n queue_entries?: number;\n last_attempted_flush_at?: string;\n last_successful_flush_at?: string;\n last_failed_flush_at?: string;\n last_failed_flush_error?: string;\n}\n\ninterface QueuedTelemetryEventRecord {\n attempts: number;\n client_schema_version?: number;\n event: {\n event_id?: string;\n event_type?: string;\n schema_version?: number;\n command?: string;\n };\n}\n\ninterface ParsedTelemetryQueue {\n rows_total: number;\n valid_entries: number;\n invalid_rows: number;\n entries: QueuedTelemetryEventRecord[];\n}\n\ninterface TelemetryStatusSummary {\n enabled: boolean;\n endpoint: string;\n queue_path: string;\n state_path: string;\n queue_rows_total: number;\n queue_entries: number;\n queue_invalid_rows: number;\n queue_size_bytes: number;\n last_attempted_flush_at: string | null;\n last_successful_flush_at: string | null;\n last_failed_flush_at: string | null;\n last_failed_flush_error: string | null;\n}\n\nexport interface TelemetryCommandOptions {\n subcommand?: string;\n limit?: string | number;\n}\n\ninterface TelemetryStatsBucket {\n command: string;\n count: number;\n event_type_counts: Record<string, number>;\n max_attempts: number;\n event_schema_versions: number[];\n client_schema_versions: number[];\n}\n\nfunction normalizeTelemetrySubcommand(value: string | undefined): TelemetrySubcommand {\n const normalized = (value ?? \"status\").trim().toLowerCase();\n if ((TELEMETRY_SUBCOMMANDS as readonly string[]).includes(normalized)) {\n return normalized as TelemetrySubcommand;\n }\n throw new PmCliError(\n `Unknown pm telemetry subcommand \"${value ?? \"\"}\". Allowed: ${TELEMETRY_SUBCOMMANDS.join(\", \")}`,\n EXIT_CODE.USAGE,\n {\n code: \"unknown_subcommand\",\n examples: [\n \"pm telemetry status\",\n \"pm telemetry flush\",\n \"pm telemetry stats --limit 10\",\n \"pm telemetry clear\",\n ],\n },\n );\n}\n\nfunction parseTelemetryStatsLimit(raw: string | number | undefined): number {\n if (raw === undefined) {\n return DEFAULT_STATS_LIMIT;\n }\n if (typeof raw === \"number\") {\n if (!Number.isFinite(raw) || !Number.isInteger(raw) || raw <= 0) {\n throw new PmCliError(\"--limit must be a positive integer\", EXIT_CODE.USAGE);\n }\n return raw;\n }\n const trimmed = raw.trim();\n if (trimmed.length === 0 || !/^\\d+$/.test(trimmed)) {\n throw new PmCliError(\"--limit must be a positive integer\", EXIT_CODE.USAGE);\n }\n const parsed = Number.parseInt(trimmed, 10);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new PmCliError(\"--limit must be a positive integer\", EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\nfunction parseTelemetryQueue(raw: string | null): ParsedTelemetryQueue {\n if (raw === null || raw.trim().length === 0) {\n return {\n rows_total: 0,\n valid_entries: 0,\n invalid_rows: 0,\n entries: [],\n };\n }\n const entries: QueuedTelemetryEventRecord[] = [];\n let rowsTotal = 0;\n let invalidRows = 0;\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n rowsTotal += 1;\n try {\n const parsed = JSON.parse(trimmed) as QueuedTelemetryEventRecord;\n if (\n typeof parsed === \"object\" &&\n parsed !== null &&\n typeof parsed.attempts === \"number\" &&\n typeof parsed.event === \"object\" &&\n parsed.event !== null\n ) {\n entries.push(parsed);\n } else {\n invalidRows += 1;\n }\n } catch {\n invalidRows += 1;\n }\n }\n return {\n rows_total: rowsTotal,\n valid_entries: entries.length,\n invalid_rows: invalidRows,\n entries,\n };\n}\n\nasync function readTelemetryRuntimeState(statePath: string): Promise<TelemetryRuntimeStateRecord> {\n const stateRaw = await readFileIfExists(statePath);\n if (stateRaw === null || stateRaw.trim().length === 0) {\n return {};\n }\n try {\n const parsed = JSON.parse(stateRaw) as TelemetryRuntimeStateRecord;\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n return parsed;\n }\n } catch {\n // Ignore malformed state files; status command is observational.\n }\n return {};\n}\n\nasync function buildTelemetryStatusSummary(globalPmRoot: string): Promise<TelemetryStatusSummary> {\n const settings = await readSettings(globalPmRoot);\n const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);\n const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);\n const queueRaw = await readFileIfExists(queuePath);\n const queue = parseTelemetryQueue(queueRaw);\n const runtimeState = await readTelemetryRuntimeState(statePath);\n return {\n enabled: settings.telemetry.enabled,\n endpoint: settings.telemetry.endpoint,\n queue_path: queuePath,\n state_path: statePath,\n queue_rows_total: queue.rows_total,\n queue_entries: queue.valid_entries,\n queue_invalid_rows: queue.invalid_rows,\n queue_size_bytes: queueRaw === null ? 0 : Buffer.byteLength(queueRaw, \"utf8\"),\n last_attempted_flush_at: runtimeState.last_attempted_flush_at ?? null,\n last_successful_flush_at: runtimeState.last_successful_flush_at ?? null,\n last_failed_flush_at: runtimeState.last_failed_flush_at ?? null,\n last_failed_flush_error: runtimeState.last_failed_flush_error ?? null,\n };\n}\n\nfunction buildTelemetryStatsBuckets(entries: QueuedTelemetryEventRecord[]): TelemetryStatsBucket[] {\n const grouped = new Map<\n string,\n {\n count: number;\n max_attempts: number;\n event_type_counts: Record<string, number>;\n event_schema_versions: Set<number>;\n client_schema_versions: Set<number>;\n }\n >();\n for (const entry of entries) {\n const command = typeof entry.event.command === \"string\" && entry.event.command.trim().length > 0\n ? entry.event.command\n : \"<unknown>\";\n const eventType = typeof entry.event.event_type === \"string\" && entry.event.event_type.trim().length > 0\n ? entry.event.event_type\n : \"unknown\";\n const eventSchemaVersion = typeof entry.event.schema_version === \"number\" && Number.isFinite(entry.event.schema_version)\n ? Math.trunc(entry.event.schema_version)\n : undefined;\n const clientSchemaVersion =\n typeof entry.client_schema_version === \"number\" && Number.isFinite(entry.client_schema_version)\n ? Math.trunc(entry.client_schema_version)\n : undefined;\n const current = grouped.get(command) ?? {\n count: 0,\n max_attempts: 0,\n event_type_counts: {},\n event_schema_versions: new Set<number>(),\n client_schema_versions: new Set<number>(),\n };\n current.count += 1;\n current.max_attempts = Math.max(current.max_attempts, Math.max(0, Math.trunc(entry.attempts)));\n current.event_type_counts[eventType] = (current.event_type_counts[eventType] ?? 0) + 1;\n if (eventSchemaVersion !== undefined) {\n current.event_schema_versions.add(eventSchemaVersion);\n }\n if (clientSchemaVersion !== undefined) {\n current.client_schema_versions.add(clientSchemaVersion);\n }\n grouped.set(command, current);\n }\n return [...grouped.entries()]\n .map(([command, value]) => ({\n command,\n count: value.count,\n event_type_counts: Object.fromEntries(\n Object.entries(value.event_type_counts).sort((left, right) => left[0].localeCompare(right[0])),\n ),\n max_attempts: value.max_attempts,\n event_schema_versions: [...value.event_schema_versions].sort((left, right) => left - right),\n client_schema_versions: [...value.client_schema_versions].sort((left, right) => left - right),\n }))\n .sort((left, right) => right.count - left.count || left.command.localeCompare(right.command));\n}\n\nexport async function runTelemetry(options: TelemetryCommandOptions, _global: GlobalOptions): Promise<Record<string, unknown>> {\n void _global;\n const subcommand = normalizeTelemetrySubcommand(options.subcommand);\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);\n const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);\n if (subcommand === \"status\") {\n return {\n action: \"telemetry\",\n subcommand,\n status: await buildTelemetryStatusSummary(globalPmRoot),\n generated_at: nowIso(),\n };\n }\n\n if (subcommand === \"flush\") {\n const before = await buildTelemetryStatusSummary(globalPmRoot);\n await flushTelemetryQueueNow(globalPmRoot);\n const after = await buildTelemetryStatusSummary(globalPmRoot);\n return {\n action: \"telemetry\",\n subcommand,\n queue_entries_before: before.queue_entries,\n queue_entries_after: after.queue_entries,\n queue_drained: after.queue_entries < before.queue_entries,\n status: after,\n generated_at: nowIso(),\n };\n }\n\n if (subcommand === \"stats\") {\n const limit = parseTelemetryStatsLimit(options.limit);\n const queueRaw = await readFileIfExists(queuePath);\n const queue = parseTelemetryQueue(queueRaw);\n const buckets = buildTelemetryStatsBuckets(queue.entries);\n const selected = buckets.slice(0, limit);\n return {\n action: \"telemetry\",\n subcommand,\n limit,\n total_commands: buckets.length,\n queue_entries: queue.valid_entries,\n queue_invalid_rows: queue.invalid_rows,\n queue_rows_total: queue.rows_total,\n truncated: buckets.length > selected.length,\n stats: selected,\n generated_at: nowIso(),\n };\n }\n\n const settings = await readSettings(globalPmRoot);\n const previousEnabled = settings.telemetry.enabled;\n const previousInstallationId = settings.telemetry.installation_id;\n const previousFirstRunPromptCompleted = settings.telemetry.first_run_prompt_completed;\n settings.telemetry.enabled = false;\n settings.telemetry.first_run_prompt_completed = true;\n settings.telemetry.installation_id = \"\";\n const settingsChanged =\n previousEnabled !== settings.telemetry.enabled ||\n previousInstallationId !== settings.telemetry.installation_id ||\n previousFirstRunPromptCompleted !== settings.telemetry.first_run_prompt_completed;\n if (settingsChanged) {\n await writeSettings(globalPmRoot, settings, \"telemetry:clear\");\n }\n\n const telemetryRuntimePath = path.join(globalPmRoot, TELEMETRY_RUNTIME_RELATIVE_PATH);\n const existed = await pathExists(telemetryRuntimePath);\n await fs.rm(telemetryRuntimePath, { recursive: true, force: true });\n const queueExistsAfter = await pathExists(queuePath);\n const stateExistsAfter = await pathExists(statePath);\n return {\n action: \"telemetry\",\n subcommand,\n settings_changed: settingsChanged,\n runtime_dir_removed: existed && !(await pathExists(telemetryRuntimePath)),\n queue_exists_after: queueExistsAfter,\n state_exists_after: stateExistsAfter,\n status: await buildTelemetryStatusSummary(globalPmRoot),\n generated_at: nowIso(),\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f44193c2-a0d9-5256-8add-5d49275e71a1")}catch(e){}}();
|
|
3
|
+
import {
|
|
4
|
+
flushTelemetryQueueNow
|
|
5
|
+
} from "./chunk-IOR7LGF4.js";
|
|
6
|
+
import {
|
|
7
|
+
nowIso
|
|
8
|
+
} from "./chunk-TCD3R2PF.js";
|
|
9
|
+
import {
|
|
10
|
+
EXIT_CODE,
|
|
11
|
+
PmCliError,
|
|
12
|
+
pathExists,
|
|
13
|
+
readFileIfExists,
|
|
14
|
+
readSettings,
|
|
15
|
+
resolveGlobalPmRoot,
|
|
16
|
+
writeSettings
|
|
17
|
+
} from "./chunk-5SFCOO6B.js";
|
|
18
|
+
|
|
19
|
+
// dist/cli/commands/telemetry.js
|
|
20
|
+
import fs from "node:fs/promises";
|
|
21
|
+
import path from "node:path";
|
|
22
|
+
var TELEMETRY_QUEUE_RELATIVE_PATH = path.join("runtime", "telemetry", "events.jsonl");
|
|
23
|
+
var TELEMETRY_STATE_RELATIVE_PATH = path.join("runtime", "telemetry", "state.json");
|
|
24
|
+
var TELEMETRY_RUNTIME_RELATIVE_PATH = path.join("runtime", "telemetry");
|
|
25
|
+
var DEFAULT_STATS_LIMIT = 20;
|
|
26
|
+
var TELEMETRY_SUBCOMMANDS = ["status", "flush", "stats", "clear"];
|
|
27
|
+
function normalizeTelemetrySubcommand(value) {
|
|
28
|
+
const normalized = (value ?? "status").trim().toLowerCase();
|
|
29
|
+
if (TELEMETRY_SUBCOMMANDS.includes(normalized)) {
|
|
30
|
+
return normalized;
|
|
31
|
+
}
|
|
32
|
+
throw new PmCliError(`Unknown pm telemetry subcommand "${value ?? ""}". Allowed: ${TELEMETRY_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, {
|
|
33
|
+
code: "unknown_subcommand",
|
|
34
|
+
examples: [
|
|
35
|
+
"pm telemetry status",
|
|
36
|
+
"pm telemetry flush",
|
|
37
|
+
"pm telemetry stats --limit 10",
|
|
38
|
+
"pm telemetry clear"
|
|
39
|
+
]
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function parseTelemetryStatsLimit(raw) {
|
|
43
|
+
if (raw === void 0) {
|
|
44
|
+
return DEFAULT_STATS_LIMIT;
|
|
45
|
+
}
|
|
46
|
+
if (typeof raw === "number") {
|
|
47
|
+
if (!Number.isFinite(raw) || !Number.isInteger(raw) || raw <= 0) {
|
|
48
|
+
throw new PmCliError("--limit must be a positive integer", EXIT_CODE.USAGE);
|
|
49
|
+
}
|
|
50
|
+
return raw;
|
|
51
|
+
}
|
|
52
|
+
const trimmed = raw.trim();
|
|
53
|
+
if (trimmed.length === 0 || !/^\d+$/.test(trimmed)) {
|
|
54
|
+
throw new PmCliError("--limit must be a positive integer", EXIT_CODE.USAGE);
|
|
55
|
+
}
|
|
56
|
+
const parsed = Number.parseInt(trimmed, 10);
|
|
57
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
58
|
+
throw new PmCliError("--limit must be a positive integer", EXIT_CODE.USAGE);
|
|
59
|
+
}
|
|
60
|
+
return parsed;
|
|
61
|
+
}
|
|
62
|
+
function parseTelemetryQueue(raw) {
|
|
63
|
+
if (raw === null || raw.trim().length === 0) {
|
|
64
|
+
return {
|
|
65
|
+
rows_total: 0,
|
|
66
|
+
valid_entries: 0,
|
|
67
|
+
invalid_rows: 0,
|
|
68
|
+
entries: []
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const entries = [];
|
|
72
|
+
let rowsTotal = 0;
|
|
73
|
+
let invalidRows = 0;
|
|
74
|
+
for (const line of raw.split("\n")) {
|
|
75
|
+
const trimmed = line.trim();
|
|
76
|
+
if (trimmed.length === 0) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
rowsTotal += 1;
|
|
80
|
+
try {
|
|
81
|
+
const parsed = JSON.parse(trimmed);
|
|
82
|
+
if (typeof parsed === "object" && parsed !== null && typeof parsed.attempts === "number" && typeof parsed.event === "object" && parsed.event !== null) {
|
|
83
|
+
entries.push(parsed);
|
|
84
|
+
} else {
|
|
85
|
+
invalidRows += 1;
|
|
86
|
+
}
|
|
87
|
+
} catch {
|
|
88
|
+
invalidRows += 1;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
rows_total: rowsTotal,
|
|
93
|
+
valid_entries: entries.length,
|
|
94
|
+
invalid_rows: invalidRows,
|
|
95
|
+
entries
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async function readTelemetryRuntimeState(statePath) {
|
|
99
|
+
const stateRaw = await readFileIfExists(statePath);
|
|
100
|
+
if (stateRaw === null || stateRaw.trim().length === 0) {
|
|
101
|
+
return {};
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
const parsed = JSON.parse(stateRaw);
|
|
105
|
+
if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
|
|
106
|
+
return parsed;
|
|
107
|
+
}
|
|
108
|
+
} catch {
|
|
109
|
+
}
|
|
110
|
+
return {};
|
|
111
|
+
}
|
|
112
|
+
async function buildTelemetryStatusSummary(globalPmRoot) {
|
|
113
|
+
const settings = await readSettings(globalPmRoot);
|
|
114
|
+
const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);
|
|
115
|
+
const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);
|
|
116
|
+
const queueRaw = await readFileIfExists(queuePath);
|
|
117
|
+
const queue = parseTelemetryQueue(queueRaw);
|
|
118
|
+
const runtimeState = await readTelemetryRuntimeState(statePath);
|
|
119
|
+
return {
|
|
120
|
+
enabled: settings.telemetry.enabled,
|
|
121
|
+
endpoint: settings.telemetry.endpoint,
|
|
122
|
+
queue_path: queuePath,
|
|
123
|
+
state_path: statePath,
|
|
124
|
+
queue_rows_total: queue.rows_total,
|
|
125
|
+
queue_entries: queue.valid_entries,
|
|
126
|
+
queue_invalid_rows: queue.invalid_rows,
|
|
127
|
+
queue_size_bytes: queueRaw === null ? 0 : Buffer.byteLength(queueRaw, "utf8"),
|
|
128
|
+
last_attempted_flush_at: runtimeState.last_attempted_flush_at ?? null,
|
|
129
|
+
last_successful_flush_at: runtimeState.last_successful_flush_at ?? null,
|
|
130
|
+
last_failed_flush_at: runtimeState.last_failed_flush_at ?? null,
|
|
131
|
+
last_failed_flush_error: runtimeState.last_failed_flush_error ?? null
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function buildTelemetryStatsBuckets(entries) {
|
|
135
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
136
|
+
for (const entry of entries) {
|
|
137
|
+
const command = typeof entry.event.command === "string" && entry.event.command.trim().length > 0 ? entry.event.command : "<unknown>";
|
|
138
|
+
const eventType = typeof entry.event.event_type === "string" && entry.event.event_type.trim().length > 0 ? entry.event.event_type : "unknown";
|
|
139
|
+
const eventSchemaVersion = typeof entry.event.schema_version === "number" && Number.isFinite(entry.event.schema_version) ? Math.trunc(entry.event.schema_version) : void 0;
|
|
140
|
+
const clientSchemaVersion = typeof entry.client_schema_version === "number" && Number.isFinite(entry.client_schema_version) ? Math.trunc(entry.client_schema_version) : void 0;
|
|
141
|
+
const current = grouped.get(command) ?? {
|
|
142
|
+
count: 0,
|
|
143
|
+
max_attempts: 0,
|
|
144
|
+
event_type_counts: {},
|
|
145
|
+
event_schema_versions: /* @__PURE__ */ new Set(),
|
|
146
|
+
client_schema_versions: /* @__PURE__ */ new Set()
|
|
147
|
+
};
|
|
148
|
+
current.count += 1;
|
|
149
|
+
current.max_attempts = Math.max(current.max_attempts, Math.max(0, Math.trunc(entry.attempts)));
|
|
150
|
+
current.event_type_counts[eventType] = (current.event_type_counts[eventType] ?? 0) + 1;
|
|
151
|
+
if (eventSchemaVersion !== void 0) {
|
|
152
|
+
current.event_schema_versions.add(eventSchemaVersion);
|
|
153
|
+
}
|
|
154
|
+
if (clientSchemaVersion !== void 0) {
|
|
155
|
+
current.client_schema_versions.add(clientSchemaVersion);
|
|
156
|
+
}
|
|
157
|
+
grouped.set(command, current);
|
|
158
|
+
}
|
|
159
|
+
return [...grouped.entries()].map(([command, value]) => ({
|
|
160
|
+
command,
|
|
161
|
+
count: value.count,
|
|
162
|
+
event_type_counts: Object.fromEntries(Object.entries(value.event_type_counts).sort((left, right) => left[0].localeCompare(right[0]))),
|
|
163
|
+
max_attempts: value.max_attempts,
|
|
164
|
+
event_schema_versions: [...value.event_schema_versions].sort((left, right) => left - right),
|
|
165
|
+
client_schema_versions: [...value.client_schema_versions].sort((left, right) => left - right)
|
|
166
|
+
})).sort((left, right) => right.count - left.count || left.command.localeCompare(right.command));
|
|
167
|
+
}
|
|
168
|
+
async function runTelemetry(options, _global) {
|
|
169
|
+
void _global;
|
|
170
|
+
const subcommand = normalizeTelemetrySubcommand(options.subcommand);
|
|
171
|
+
const globalPmRoot = resolveGlobalPmRoot(process.cwd());
|
|
172
|
+
const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);
|
|
173
|
+
const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);
|
|
174
|
+
if (subcommand === "status") {
|
|
175
|
+
return {
|
|
176
|
+
action: "telemetry",
|
|
177
|
+
subcommand,
|
|
178
|
+
status: await buildTelemetryStatusSummary(globalPmRoot),
|
|
179
|
+
generated_at: nowIso()
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
if (subcommand === "flush") {
|
|
183
|
+
const before = await buildTelemetryStatusSummary(globalPmRoot);
|
|
184
|
+
await flushTelemetryQueueNow(globalPmRoot);
|
|
185
|
+
const after = await buildTelemetryStatusSummary(globalPmRoot);
|
|
186
|
+
return {
|
|
187
|
+
action: "telemetry",
|
|
188
|
+
subcommand,
|
|
189
|
+
queue_entries_before: before.queue_entries,
|
|
190
|
+
queue_entries_after: after.queue_entries,
|
|
191
|
+
queue_drained: after.queue_entries < before.queue_entries,
|
|
192
|
+
status: after,
|
|
193
|
+
generated_at: nowIso()
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
if (subcommand === "stats") {
|
|
197
|
+
const limit = parseTelemetryStatsLimit(options.limit);
|
|
198
|
+
const queueRaw = await readFileIfExists(queuePath);
|
|
199
|
+
const queue = parseTelemetryQueue(queueRaw);
|
|
200
|
+
const buckets = buildTelemetryStatsBuckets(queue.entries);
|
|
201
|
+
const selected = buckets.slice(0, limit);
|
|
202
|
+
return {
|
|
203
|
+
action: "telemetry",
|
|
204
|
+
subcommand,
|
|
205
|
+
limit,
|
|
206
|
+
total_commands: buckets.length,
|
|
207
|
+
queue_entries: queue.valid_entries,
|
|
208
|
+
queue_invalid_rows: queue.invalid_rows,
|
|
209
|
+
queue_rows_total: queue.rows_total,
|
|
210
|
+
truncated: buckets.length > selected.length,
|
|
211
|
+
stats: selected,
|
|
212
|
+
generated_at: nowIso()
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const settings = await readSettings(globalPmRoot);
|
|
216
|
+
const previousEnabled = settings.telemetry.enabled;
|
|
217
|
+
const previousInstallationId = settings.telemetry.installation_id;
|
|
218
|
+
const previousFirstRunPromptCompleted = settings.telemetry.first_run_prompt_completed;
|
|
219
|
+
settings.telemetry.enabled = false;
|
|
220
|
+
settings.telemetry.first_run_prompt_completed = true;
|
|
221
|
+
settings.telemetry.installation_id = "";
|
|
222
|
+
const settingsChanged = previousEnabled !== settings.telemetry.enabled || previousInstallationId !== settings.telemetry.installation_id || previousFirstRunPromptCompleted !== settings.telemetry.first_run_prompt_completed;
|
|
223
|
+
if (settingsChanged) {
|
|
224
|
+
await writeSettings(globalPmRoot, settings, "telemetry:clear");
|
|
225
|
+
}
|
|
226
|
+
const telemetryRuntimePath = path.join(globalPmRoot, TELEMETRY_RUNTIME_RELATIVE_PATH);
|
|
227
|
+
const existed = await pathExists(telemetryRuntimePath);
|
|
228
|
+
await fs.rm(telemetryRuntimePath, { recursive: true, force: true });
|
|
229
|
+
const queueExistsAfter = await pathExists(queuePath);
|
|
230
|
+
const stateExistsAfter = await pathExists(statePath);
|
|
231
|
+
return {
|
|
232
|
+
action: "telemetry",
|
|
233
|
+
subcommand,
|
|
234
|
+
settings_changed: settingsChanged,
|
|
235
|
+
runtime_dir_removed: existed && !await pathExists(telemetryRuntimePath),
|
|
236
|
+
queue_exists_after: queueExistsAfter,
|
|
237
|
+
state_exists_after: stateExistsAfter,
|
|
238
|
+
status: await buildTelemetryStatusSummary(globalPmRoot),
|
|
239
|
+
generated_at: nowIso()
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
export {
|
|
243
|
+
TELEMETRY_SUBCOMMANDS,
|
|
244
|
+
runTelemetry
|
|
245
|
+
};
|
|
246
|
+
//# sourceMappingURL=telemetry-NCMEPJNR.js.map
|
|
247
|
+
|
|
248
|
+
//# debugId=f44193c2-a0d9-5256-8add-5d49275e71a1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../cli/commands/telemetry.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathExists, readFileIfExists } from \"../../core/fs/fs-utils.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { resolveGlobalPmRoot } from \"../../core/store/paths.js\";\nimport { readSettings, writeSettings } from \"../../core/store/settings.js\";\nimport { flushTelemetryQueueNow } from \"../../core/telemetry/runtime.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_RUNTIME_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\");\nconst DEFAULT_STATS_LIMIT = 20;\n\nexport const TELEMETRY_SUBCOMMANDS = [\"status\", \"flush\", \"stats\", \"clear\"] as const;\nexport type TelemetrySubcommand = (typeof TELEMETRY_SUBCOMMANDS)[number];\n\ninterface TelemetryRuntimeStateRecord {\n endpoint?: string;\n queue_entries?: number;\n last_attempted_flush_at?: string;\n last_successful_flush_at?: string;\n last_failed_flush_at?: string;\n last_failed_flush_error?: string;\n}\n\ninterface QueuedTelemetryEventRecord {\n attempts: number;\n client_schema_version?: number;\n event: {\n event_id?: string;\n event_type?: string;\n schema_version?: number;\n command?: string;\n };\n}\n\ninterface ParsedTelemetryQueue {\n rows_total: number;\n valid_entries: number;\n invalid_rows: number;\n entries: QueuedTelemetryEventRecord[];\n}\n\ninterface TelemetryStatusSummary {\n enabled: boolean;\n endpoint: string;\n queue_path: string;\n state_path: string;\n queue_rows_total: number;\n queue_entries: number;\n queue_invalid_rows: number;\n queue_size_bytes: number;\n last_attempted_flush_at: string | null;\n last_successful_flush_at: string | null;\n last_failed_flush_at: string | null;\n last_failed_flush_error: string | null;\n}\n\nexport interface TelemetryCommandOptions {\n subcommand?: string;\n limit?: string | number;\n}\n\ninterface TelemetryStatsBucket {\n command: string;\n count: number;\n event_type_counts: Record<string, number>;\n max_attempts: number;\n event_schema_versions: number[];\n client_schema_versions: number[];\n}\n\nfunction normalizeTelemetrySubcommand(value: string | undefined): TelemetrySubcommand {\n const normalized = (value ?? \"status\").trim().toLowerCase();\n if ((TELEMETRY_SUBCOMMANDS as readonly string[]).includes(normalized)) {\n return normalized as TelemetrySubcommand;\n }\n throw new PmCliError(\n `Unknown pm telemetry subcommand \"${value ?? \"\"}\". Allowed: ${TELEMETRY_SUBCOMMANDS.join(\", \")}`,\n EXIT_CODE.USAGE,\n {\n code: \"unknown_subcommand\",\n examples: [\n \"pm telemetry status\",\n \"pm telemetry flush\",\n \"pm telemetry stats --limit 10\",\n \"pm telemetry clear\",\n ],\n },\n );\n}\n\nfunction parseTelemetryStatsLimit(raw: string | number | undefined): number {\n if (raw === undefined) {\n return DEFAULT_STATS_LIMIT;\n }\n if (typeof raw === \"number\") {\n if (!Number.isFinite(raw) || !Number.isInteger(raw) || raw <= 0) {\n throw new PmCliError(\"--limit must be a positive integer\", EXIT_CODE.USAGE);\n }\n return raw;\n }\n const trimmed = raw.trim();\n if (trimmed.length === 0 || !/^\\d+$/.test(trimmed)) {\n throw new PmCliError(\"--limit must be a positive integer\", EXIT_CODE.USAGE);\n }\n const parsed = Number.parseInt(trimmed, 10);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new PmCliError(\"--limit must be a positive integer\", EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\nfunction parseTelemetryQueue(raw: string | null): ParsedTelemetryQueue {\n if (raw === null || raw.trim().length === 0) {\n return {\n rows_total: 0,\n valid_entries: 0,\n invalid_rows: 0,\n entries: [],\n };\n }\n const entries: QueuedTelemetryEventRecord[] = [];\n let rowsTotal = 0;\n let invalidRows = 0;\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n rowsTotal += 1;\n try {\n const parsed = JSON.parse(trimmed) as QueuedTelemetryEventRecord;\n if (\n typeof parsed === \"object\" &&\n parsed !== null &&\n typeof parsed.attempts === \"number\" &&\n typeof parsed.event === \"object\" &&\n parsed.event !== null\n ) {\n entries.push(parsed);\n } else {\n invalidRows += 1;\n }\n } catch {\n invalidRows += 1;\n }\n }\n return {\n rows_total: rowsTotal,\n valid_entries: entries.length,\n invalid_rows: invalidRows,\n entries,\n };\n}\n\nasync function readTelemetryRuntimeState(statePath: string): Promise<TelemetryRuntimeStateRecord> {\n const stateRaw = await readFileIfExists(statePath);\n if (stateRaw === null || stateRaw.trim().length === 0) {\n return {};\n }\n try {\n const parsed = JSON.parse(stateRaw) as TelemetryRuntimeStateRecord;\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n return parsed;\n }\n } catch {\n // Ignore malformed state files; status command is observational.\n }\n return {};\n}\n\nasync function buildTelemetryStatusSummary(globalPmRoot: string): Promise<TelemetryStatusSummary> {\n const settings = await readSettings(globalPmRoot);\n const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);\n const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);\n const queueRaw = await readFileIfExists(queuePath);\n const queue = parseTelemetryQueue(queueRaw);\n const runtimeState = await readTelemetryRuntimeState(statePath);\n return {\n enabled: settings.telemetry.enabled,\n endpoint: settings.telemetry.endpoint,\n queue_path: queuePath,\n state_path: statePath,\n queue_rows_total: queue.rows_total,\n queue_entries: queue.valid_entries,\n queue_invalid_rows: queue.invalid_rows,\n queue_size_bytes: queueRaw === null ? 0 : Buffer.byteLength(queueRaw, \"utf8\"),\n last_attempted_flush_at: runtimeState.last_attempted_flush_at ?? null,\n last_successful_flush_at: runtimeState.last_successful_flush_at ?? null,\n last_failed_flush_at: runtimeState.last_failed_flush_at ?? null,\n last_failed_flush_error: runtimeState.last_failed_flush_error ?? null,\n };\n}\n\nfunction buildTelemetryStatsBuckets(entries: QueuedTelemetryEventRecord[]): TelemetryStatsBucket[] {\n const grouped = new Map<\n string,\n {\n count: number;\n max_attempts: number;\n event_type_counts: Record<string, number>;\n event_schema_versions: Set<number>;\n client_schema_versions: Set<number>;\n }\n >();\n for (const entry of entries) {\n const command = typeof entry.event.command === \"string\" && entry.event.command.trim().length > 0\n ? entry.event.command\n : \"<unknown>\";\n const eventType = typeof entry.event.event_type === \"string\" && entry.event.event_type.trim().length > 0\n ? entry.event.event_type\n : \"unknown\";\n const eventSchemaVersion = typeof entry.event.schema_version === \"number\" && Number.isFinite(entry.event.schema_version)\n ? Math.trunc(entry.event.schema_version)\n : undefined;\n const clientSchemaVersion =\n typeof entry.client_schema_version === \"number\" && Number.isFinite(entry.client_schema_version)\n ? Math.trunc(entry.client_schema_version)\n : undefined;\n const current = grouped.get(command) ?? {\n count: 0,\n max_attempts: 0,\n event_type_counts: {},\n event_schema_versions: new Set<number>(),\n client_schema_versions: new Set<number>(),\n };\n current.count += 1;\n current.max_attempts = Math.max(current.max_attempts, Math.max(0, Math.trunc(entry.attempts)));\n current.event_type_counts[eventType] = (current.event_type_counts[eventType] ?? 0) + 1;\n if (eventSchemaVersion !== undefined) {\n current.event_schema_versions.add(eventSchemaVersion);\n }\n if (clientSchemaVersion !== undefined) {\n current.client_schema_versions.add(clientSchemaVersion);\n }\n grouped.set(command, current);\n }\n return [...grouped.entries()]\n .map(([command, value]) => ({\n command,\n count: value.count,\n event_type_counts: Object.fromEntries(\n Object.entries(value.event_type_counts).sort((left, right) => left[0].localeCompare(right[0])),\n ),\n max_attempts: value.max_attempts,\n event_schema_versions: [...value.event_schema_versions].sort((left, right) => left - right),\n client_schema_versions: [...value.client_schema_versions].sort((left, right) => left - right),\n }))\n .sort((left, right) => right.count - left.count || left.command.localeCompare(right.command));\n}\n\nexport async function runTelemetry(options: TelemetryCommandOptions, _global: GlobalOptions): Promise<Record<string, unknown>> {\n void _global;\n const subcommand = normalizeTelemetrySubcommand(options.subcommand);\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);\n const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);\n if (subcommand === \"status\") {\n return {\n action: \"telemetry\",\n subcommand,\n status: await buildTelemetryStatusSummary(globalPmRoot),\n generated_at: nowIso(),\n };\n }\n\n if (subcommand === \"flush\") {\n const before = await buildTelemetryStatusSummary(globalPmRoot);\n await flushTelemetryQueueNow(globalPmRoot);\n const after = await buildTelemetryStatusSummary(globalPmRoot);\n return {\n action: \"telemetry\",\n subcommand,\n queue_entries_before: before.queue_entries,\n queue_entries_after: after.queue_entries,\n queue_drained: after.queue_entries < before.queue_entries,\n status: after,\n generated_at: nowIso(),\n };\n }\n\n if (subcommand === \"stats\") {\n const limit = parseTelemetryStatsLimit(options.limit);\n const queueRaw = await readFileIfExists(queuePath);\n const queue = parseTelemetryQueue(queueRaw);\n const buckets = buildTelemetryStatsBuckets(queue.entries);\n const selected = buckets.slice(0, limit);\n return {\n action: \"telemetry\",\n subcommand,\n limit,\n total_commands: buckets.length,\n queue_entries: queue.valid_entries,\n queue_invalid_rows: queue.invalid_rows,\n queue_rows_total: queue.rows_total,\n truncated: buckets.length > selected.length,\n stats: selected,\n generated_at: nowIso(),\n };\n }\n\n const settings = await readSettings(globalPmRoot);\n const previousEnabled = settings.telemetry.enabled;\n const previousInstallationId = settings.telemetry.installation_id;\n const previousFirstRunPromptCompleted = settings.telemetry.first_run_prompt_completed;\n settings.telemetry.enabled = false;\n settings.telemetry.first_run_prompt_completed = true;\n settings.telemetry.installation_id = \"\";\n const settingsChanged =\n previousEnabled !== settings.telemetry.enabled ||\n previousInstallationId !== settings.telemetry.installation_id ||\n previousFirstRunPromptCompleted !== settings.telemetry.first_run_prompt_completed;\n if (settingsChanged) {\n await writeSettings(globalPmRoot, settings, \"telemetry:clear\");\n }\n\n const telemetryRuntimePath = path.join(globalPmRoot, TELEMETRY_RUNTIME_RELATIVE_PATH);\n const existed = await pathExists(telemetryRuntimePath);\n await fs.rm(telemetryRuntimePath, { recursive: true, force: true });\n const queueExistsAfter = await pathExists(queuePath);\n const stateExistsAfter = await pathExists(statePath);\n return {\n action: \"telemetry\",\n subcommand,\n settings_changed: settingsChanged,\n runtime_dir_removed: existed && !(await pathExists(telemetryRuntimePath)),\n queue_exists_after: queueExistsAfter,\n state_exists_after: stateExistsAfter,\n status: await buildTelemetryStatusSummary(globalPmRoot),\n generated_at: nowIso(),\n };\n}\n"],"names":[],"mappings":"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","debugId":"f44193c2-a0d9-5256-8add-5d49275e71a1"}
|
|
@@ -6,19 +6,19 @@ import {
|
|
|
6
6
|
runLinkedTests,
|
|
7
7
|
runTest,
|
|
8
8
|
summarizeContextPreflight
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-OZ7NSQHL.js";
|
|
10
|
+
import "./chunk-N7ACFE26.js";
|
|
11
|
+
import "./chunk-XLTD2HN3.js";
|
|
12
|
+
import "./chunk-3LB74A67.js";
|
|
13
|
+
import "./chunk-OVQCEJPG.js";
|
|
14
|
+
import "./chunk-ECCMVXGM.js";
|
|
15
15
|
import "./chunk-3HUE7XOF.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-XTGLRY2Y.js";
|
|
17
|
+
import "./chunk-T3LC5LKB.js";
|
|
18
|
+
import "./chunk-AO442XLN.js";
|
|
19
|
+
import "./chunk-KJE2FOS4.js";
|
|
20
|
+
import "./chunk-QO7EBBOM.js";
|
|
21
|
+
import "./chunk-U5SXYXSY.js";
|
|
22
22
|
export {
|
|
23
23
|
classifyLinkedTestFailure,
|
|
24
24
|
countFailureCategories,
|
|
@@ -28,4 +28,4 @@ export {
|
|
|
28
28
|
runTest,
|
|
29
29
|
summarizeContextPreflight
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=test-
|
|
31
|
+
//# sourceMappingURL=test-MXX3E5JL.js.map
|
|
@@ -8,19 +8,19 @@ import {
|
|
|
8
8
|
runLinkedTests,
|
|
9
9
|
runTest,
|
|
10
10
|
summarizeContextPreflight
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-3BWOVLTH.js";
|
|
12
|
+
import "./chunk-E5FJNAZA.js";
|
|
13
|
+
import "./chunk-PO3GSVFV.js";
|
|
14
|
+
import "./chunk-AY43SBIN.js";
|
|
15
|
+
import "./chunk-6P6GGMOG.js";
|
|
16
|
+
import "./chunk-TPH5XEVD.js";
|
|
17
17
|
import "./chunk-LXYVKYMQ.js";
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-GGYWB3Y2.js";
|
|
19
|
+
import "./chunk-HZGUAH22.js";
|
|
20
|
+
import "./chunk-LB3RUL2N.js";
|
|
21
|
+
import "./chunk-2VBQ6ZXS.js";
|
|
22
|
+
import "./chunk-TCD3R2PF.js";
|
|
23
|
+
import "./chunk-5SFCOO6B.js";
|
|
24
24
|
export {
|
|
25
25
|
classifyLinkedTestFailure,
|
|
26
26
|
countFailureCategories,
|
|
@@ -30,6 +30,6 @@ export {
|
|
|
30
30
|
runTest,
|
|
31
31
|
summarizeContextPreflight
|
|
32
32
|
};
|
|
33
|
-
//# sourceMappingURL=test-
|
|
33
|
+
//# sourceMappingURL=test-WBROAJIE.js.map
|
|
34
34
|
|
|
35
35
|
//# debugId=45eac7fa-f181-5cca-93b7-cfb58909dbb3
|