@unbrained/pm-cli 2026.7.16 → 2026.7.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +17 -2
- package/CONTRIBUTING.md +2 -2
- package/dist/cli/bootstrap-args.d.ts +2 -115
- package/dist/cli/bootstrap-args.js +4 -831
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commands/eval.d.ts +4 -64
- package/dist/cli/commands/eval.js +4 -153
- package/dist/cli/commands/eval.js.map +1 -1
- package/dist/cli/commands/linked-test-entry.d.ts +6 -6
- package/dist/cli/commands/linked-test-entry.js +4 -65
- package/dist/cli/commands/linked-test-entry.js.map +1 -1
- package/dist/cli/commands/linked-test-parsers.d.ts +3 -45
- package/dist/cli/commands/linked-test-parsers.js +4 -516
- package/dist/cli/commands/linked-test-parsers.js.map +1 -1
- package/dist/cli/commands/list.d.ts +3 -210
- package/dist/cli/commands/list.js +4 -1068
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/search.d.ts +3 -464
- package/dist/cli/commands/search.js +4 -2236
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/stats.d.ts +6 -66
- package/dist/cli/commands/stats.js +4 -157
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/telemetry.d.ts +6 -14
- package/dist/cli/commands/telemetry.js +4 -349
- package/dist/cli/commands/telemetry.js.map +1 -1
- package/dist/cli/commands/test-all.d.ts +6 -95
- package/dist/cli/commands/test-all.js +4 -439
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test-runs.d.ts +6 -92
- package/dist/cli/commands/test-runs.js +4 -189
- package/dist/cli/commands/test-runs.js.map +1 -1
- package/dist/cli/commands/test.d.ts +6 -244
- package/dist/cli/commands/test.js +4 -1780
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.d.ts +15 -29
- package/dist/cli/commands/update-many.js +355 -259
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/main.js +140 -133
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/search-refresh.js +4 -9
- package/dist/cli/search-refresh.js.map +1 -1
- package/dist/cli/shared-parsers.d.ts +6 -9
- package/dist/cli/shared-parsers.js +4 -37
- package/dist/cli/shared-parsers.js.map +1 -1
- package/dist/cli/telemetry-flush.js +4 -4
- package/dist/cli/telemetry-flush.js.map +1 -1
- package/dist/cli-bundle/bundle-manifest.json +341 -341
- package/dist/cli-bundle/chunks/{append-OJQFUQ4T.js → append-5YF3TO7I.js} +5 -5
- package/dist/cli-bundle/chunks/append-JHO5K6RP.js +11 -0
- package/dist/cli-bundle/chunks/{chunk-WT3ZEOGH.js → chunk-23TCGBRK.js} +16 -7
- package/dist/cli-bundle/chunks/{chunk-WT3ZEOGH.js.map → chunk-23TCGBRK.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-BCOFWYW4.js → chunk-2BX74BAS.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-APRVSW2O.js → chunk-2CXL335K.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-KG44YSKD.js → chunk-2FUOXSRN.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-HDH3JUGG.js → chunk-2IPNL3DR.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-J6364LFM.js → chunk-2MPMKJF2.js} +9 -18
- package/dist/cli-bundle/chunks/{chunk-J6364LFM.js.map → chunk-2MPMKJF2.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-GM5QHQU6.js → chunk-2XOSFSTH.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-K3WII2ME.js → chunk-37DRDP2B.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-2WSE6PO2.js → chunk-37V5MXAU.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-UWQHLMEB.js → chunk-3D4YVTNG.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-PMOSXADO.js → chunk-47HXN6RX.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-6CFNAVTF.js → chunk-5HGZKQUL.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-2IFFUZLC.js → chunk-5UKQLQM2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-DM4H7FP4.js → chunk-633PKXLT.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-XSJUSQAE.js → chunk-646MQXFW.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ZI6VQWQ7.js → chunk-66MKH7SZ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-S6MQESFR.js → chunk-67RO3H4N.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-34L5OT3Y.js → chunk-6DYOZS6C.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-RRM5JYJC.js → chunk-6O44IN44.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ONG5V5CI.js → chunk-6XAZB6SE.js} +97 -69
- package/dist/cli-bundle/chunks/chunk-6XAZB6SE.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-PENXZX3U.js → chunk-74FKFFXO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-LPYWLWDS.js → chunk-7CTQ7WW5.js} +37 -37
- package/dist/cli-bundle/chunks/chunk-7CTQ7WW5.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-HO4KXD6I.js → chunk-7H5NNCJ5.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-XXXF6PAQ.js → chunk-7LTCLTRG.js} +69 -61
- package/dist/cli-bundle/chunks/chunk-7LTCLTRG.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-TQSZFPIS.js → chunk-AFGKSHAM.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-JXQUXVMI.js → chunk-AFSV5HBB.js} +77 -7
- package/dist/cli-bundle/chunks/{chunk-JXQUXVMI.js.map → chunk-AFSV5HBB.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-6N2VXVTQ.js → chunk-ARGDWQ4J.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3U7ZR6M4.js → chunk-B57RJHBZ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-7B67ZL4N.js → chunk-B6SH2YNN.js} +75 -5
- package/dist/cli-bundle/chunks/{chunk-7B67ZL4N.js.map → chunk-B6SH2YNN.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-YCQET3OT.js → chunk-BAP7G3N2.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-QKXHFPYM.js → chunk-BIRYX32V.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-RMLWNPH2.js → chunk-BVLOMU6O.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YBLZ2VE7.js → chunk-CFSUNEL7.js} +320 -239
- package/dist/cli-bundle/chunks/chunk-CFSUNEL7.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-2VPAVL7O.js → chunk-CKX4WOPC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-TKOVBP6C.js → chunk-D52ZN3BF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KPMKHGEA.js → chunk-D53RTYVI.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-ODALILG3.js → chunk-D5XHO4Q7.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-E2OJMKML.js → chunk-DCC2AQBD.js} +18 -9
- package/dist/cli-bundle/chunks/{chunk-E2OJMKML.js.map → chunk-DCC2AQBD.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-YAQEBNY7.js → chunk-DDFGYUCQ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-EAB64KLB.js → chunk-DG2EQRIH.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-IG3SWA4A.js → chunk-EHJFUOXL.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-ONREO4ST.js → chunk-EY7ZE3TG.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-EJEXHTY5.js → chunk-FHOBCGQO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-H3EIEWGR.js → chunk-FL4D53ND.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-WUJQK4YV.js → chunk-FVNWHUME.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-INU6DKT5.js → chunk-FXFCFL73.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-QEHQ2GVG.js → chunk-FY4RLHSC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-EACOH7AU.js → chunk-FZGM3PNA.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-FNSPG7MU.js → chunk-G6KM4YKY.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-AHVTB5I5.js → chunk-G6MYGULG.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-TSMHDIW4.js → chunk-GLZKZON6.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-2JKGO6QX.js → chunk-H5IOT54C.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-5ZSLZLDN.js → chunk-HF63SBLC.js} +585 -456
- package/dist/cli-bundle/chunks/chunk-HF63SBLC.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-SELVXEZK.js → chunk-HO4DLBNK.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3CLU2XZO.js → chunk-HSYV4ZYT.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-EH2OPHBI.js → chunk-HTXXXF45.js} +23 -19
- package/dist/cli-bundle/chunks/chunk-HTXXXF45.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-CRVF2JDM.js → chunk-HXVHBERL.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-NU3IMIEA.js → chunk-I7DIDUSP.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-2NCIPMQP.js → chunk-I7GY4X6Y.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-JYFOV7FC.js → chunk-IE5KRAKN.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-UY2ACEMF.js → chunk-ILVOOAT4.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-GOSLKLFE.js → chunk-KH6QAHME.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-J6EY5V4N.js → chunk-KOEZCHRF.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-QKECXBBG.js → chunk-KX62NMZC.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-QKECXBBG.js.map → chunk-KX62NMZC.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-WQPUU7XD.js → chunk-L337QKWJ.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-LSG2U345.js → chunk-L6FVNR7X.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-ILX33QXL.js → chunk-LLODAQMP.js} +706 -532
- package/dist/cli-bundle/chunks/chunk-LLODAQMP.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-FMBNM2EN.js → chunk-LSOWTLEM.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-4223PVZT.js → chunk-M7MVOKVV.js} +3 -3
- package/dist/cli-bundle/chunks/chunk-MNV226E4.js +834 -0
- package/dist/cli-bundle/chunks/chunk-MNV226E4.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-UMOPHQSU.js → chunk-MR4SHYR4.js} +41 -19
- package/dist/cli-bundle/chunks/chunk-MR4SHYR4.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-BKVG6XOA.js → chunk-MSGETE6I.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-3WM75PWC.js → chunk-N33FD2UI.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-UFXU44HV.js → chunk-N7I2DGLP.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-3S5QVM5H.js → chunk-NCAFUBJX.js} +13 -13
- package/dist/cli-bundle/chunks/chunk-NCAFUBJX.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-6S3YSUYG.js → chunk-NNANAWFH.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-IJIICKVW.js → chunk-NTRQLE2R.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SDQLJWBO.js → chunk-NVZ6NVHJ.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-H2Z3FYXQ.js → chunk-OWP6QFBV.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-Q7A43DS4.js → chunk-P22HGFFI.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NLDFBC6J.js → chunk-P56LKFQX.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-NVPZIJVR.js → chunk-PT7MCCGD.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-P74IZQ7A.js → chunk-QKVVV6QO.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-5JLUII3O.js → chunk-QNUAZYGW.js} +321 -240
- package/dist/cli-bundle/chunks/chunk-QNUAZYGW.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-QIPLHNP7.js → chunk-QWBKN3QC.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-7PIWCHTW.js → chunk-R5XTTZSJ.js} +5 -5
- package/dist/cli-bundle/chunks/{chunk-JOUQZENX.js → chunk-RC4UOUXA.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-BEP7WJA2.js → chunk-RGMWJLXF.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-NP22ERDF.js → chunk-RTBX3C4C.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-HYB5AZ63.js → chunk-S46R2M3W.js} +117 -71
- package/dist/cli-bundle/chunks/chunk-S46R2M3W.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-H5APFTHZ.js → chunk-S6FF7VW6.js} +18 -18
- package/dist/cli-bundle/chunks/chunk-S6FF7VW6.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-UXONS674.js → chunk-SIJV365F.js} +54 -55
- package/dist/cli-bundle/chunks/chunk-SIJV365F.js.map +1 -0
- package/dist/cli-bundle/chunks/{chunk-7Z4LKRS4.js → chunk-SPFZV2GR.js} +9 -9
- package/dist/cli-bundle/chunks/{chunk-ULTHRDBP.js → chunk-TM5CIO3F.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-4XQ3BDV4.js → chunk-V3VBXQQV.js} +36 -36
- package/dist/cli-bundle/chunks/chunk-V3VBXQQV.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-YAROI3PD.js → chunk-V7MP6YTN.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-OW4JWD5M.js → chunk-VAHZIPWS.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-DYH63FX7.js → chunk-VE6ZSTQW.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-3AUGG2DP.js → chunk-W5E2UUSH.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-BSEQUTQP.js → chunk-WACRQ26A.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-BSEQUTQP.js.map → chunk-WACRQ26A.js.map} +1 -1
- package/dist/cli-bundle/chunks/{chunk-UOHFKBUV.js → chunk-WL3SS45P.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-QKJGPFAF.js → chunk-WU3KAN6A.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-IA5FKNII.js → chunk-X2MGQMZO.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-TD3LVC7D.js → chunk-X5YCTFKT.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-B7PE22W6.js → chunk-XC2HEEOV.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-J5AOEGDC.js → chunk-XNPMDSQQ.js} +8 -8
- package/dist/cli-bundle/chunks/{chunk-K2X6U4UA.js → chunk-XXLXJL7V.js} +4 -4
- package/dist/cli-bundle/chunks/chunk-XYJK6GIQ.js +851 -0
- package/dist/cli-bundle/chunks/chunk-XYJK6GIQ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RLCHOOHC.js → chunk-YJSURTBB.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-PGY23YTC.js → chunk-YKFHF37B.js} +3 -3
- package/dist/cli-bundle/chunks/{chunk-JFTKLTEF.js → chunk-YQCWK2MB.js} +4 -4
- package/dist/cli-bundle/chunks/{chunk-EYLCSJAI.js → chunk-YQEZWI3R.js} +2 -2
- package/dist/cli-bundle/chunks/close-BEP7MHF3.js +12 -0
- package/dist/cli-bundle/chunks/{close-CWODTPKG.js → close-Y6QFUJQN.js} +5 -5
- package/dist/cli-bundle/chunks/{close-many-CQFUY7MR.js → close-many-JJFW7KTT.js} +14 -14
- package/dist/cli-bundle/chunks/close-many-QJ6FKJUE.js +23 -0
- package/dist/cli-bundle/chunks/comments-2AOZQ5D2.js +13 -0
- package/dist/cli-bundle/chunks/{comments-WGLHR7LB.js → comments-TMHMALA5.js} +7 -7
- package/dist/cli-bundle/chunks/{copy-LXVDXH7B.js → copy-FWQA5OU4.js} +4 -4
- package/dist/cli-bundle/chunks/copy-N3LCQBMC.js +9 -0
- package/dist/cli-bundle/chunks/{create-LBVCYMEG.js → create-AQ5SIGZC.js} +9 -9
- package/dist/cli-bundle/chunks/{create-J5U6ND4K.js → create-KOGQ3JKD.js} +9 -9
- package/dist/cli-bundle/chunks/delete-6G3MBZ6S.js +10 -0
- package/dist/cli-bundle/chunks/{delete-PMJBNY5G.js → delete-YYYFOSEA.js} +4 -4
- package/dist/cli-bundle/chunks/{deps-OA26IS25.js → deps-5NC4IZH7.js} +5 -5
- package/dist/cli-bundle/chunks/{deps-JZ7TMVCB.js → deps-EVTOQMKW.js} +5 -5
- package/dist/cli-bundle/chunks/{docs-FEWB2DQB.js → docs-53NUGMIQ.js} +6 -6
- package/dist/cli-bundle/chunks/docs-OWRGDMNY.js +14 -0
- package/dist/cli-bundle/chunks/{files-EFIWKFTM.js → files-3PXGXYDB.js} +6 -6
- package/dist/cli-bundle/chunks/{files-6YFBJRBG.js → files-EGLKHD7O.js} +6 -6
- package/dist/cli-bundle/chunks/focus-KZLIA6WS.js +10 -0
- package/dist/cli-bundle/chunks/{focus-4QJR7FOQ.js → focus-SRPASFTN.js} +5 -5
- package/dist/cli-bundle/chunks/{history-compact-CKRPDTJN.js → history-compact-G4DULDCX.js} +6 -6
- package/dist/cli-bundle/chunks/history-compact-HHIUOMZ7.js +16 -0
- package/dist/cli-bundle/chunks/{history-redact-BB3TGDAE.js → history-redact-IUSJ6X3E.js} +4 -4
- package/dist/cli-bundle/chunks/{history-redact-D225BHOZ.js → history-redact-THHGRQXV.js} +4 -4
- package/dist/cli-bundle/chunks/history-repair-KG7SWXI6.js +16 -0
- package/dist/cli-bundle/chunks/{history-repair-RQXKQHL4.js → history-repair-LUQWRS7X.js} +6 -6
- package/dist/cli-bundle/chunks/{learnings-JLNLCOL5.js → learnings-2MRNBFJF.js} +7 -7
- package/dist/cli-bundle/chunks/learnings-ZVHSALJY.js +13 -0
- package/dist/cli-bundle/chunks/{notes-GB47XXQQ.js → notes-73JWKWUD.js} +7 -7
- package/dist/cli-bundle/chunks/notes-BAKUL5DJ.js +13 -0
- package/dist/cli-bundle/chunks/{plan-VDCJ2PCN.js → plan-AZPMCG37.js} +10 -10
- package/dist/cli-bundle/chunks/plan-LEAGLPGP.js +24 -0
- package/dist/cli-bundle/chunks/{profile-IVXQEL3D.js → profile-AGUKS52S.js} +9 -9
- package/dist/cli-bundle/chunks/{profile-FAU7NZML.js → profile-U2B6Y7GE.js} +9 -9
- package/dist/cli-bundle/chunks/{register-list-query-UL4UKBBN.js → register-list-query-A5KRJ5J2.js} +16 -16
- package/dist/cli-bundle/chunks/{register-list-query-DKA3EH5D.js → register-list-query-NEYP3TXO.js} +16 -16
- package/dist/cli-bundle/chunks/{register-mutation-RBBJ52DK.js → register-mutation-6LOPBAHC.js} +29 -29
- package/dist/cli-bundle/chunks/{register-mutation-ARFHRW55.js → register-mutation-GCZOALNJ.js} +29 -29
- package/dist/cli-bundle/chunks/{register-operations-ZIBBRSED.js → register-operations-6ZZIF27A.js} +35 -35
- package/dist/cli-bundle/chunks/{register-operations-ZUJ5JWPE.js → register-operations-REDIAEGI.js} +35 -35
- package/dist/cli-bundle/chunks/{register-setup-TDCGWIOS.js → register-setup-BHPMN5SK.js} +15 -15
- package/dist/cli-bundle/chunks/{register-setup-BCVLFEYS.js → register-setup-J3JS2ZVT.js} +15 -15
- package/dist/cli-bundle/chunks/{restore-25DLT2Q2.js → restore-E3PRGDN3.js} +6 -6
- package/dist/cli-bundle/chunks/restore-KIUYTAEJ.js +14 -0
- package/dist/cli-bundle/chunks/{schema-FNU3WE4O.js → schema-5JNFQFUW.js} +6 -6
- package/dist/cli-bundle/chunks/{schema-NBCM3RAD.js → schema-TMIW4XZC.js} +6 -6
- package/dist/cli-bundle/chunks/update-PQQHLYCC.js +21 -0
- package/dist/cli-bundle/chunks/{update-XHSIAIXE.js → update-SA6AG23P.js} +12 -12
- package/dist/cli-bundle/chunks/update-many-RQVTFJPD.js +36 -0
- package/dist/cli-bundle/chunks/update-many-TV3L3KBX.js +32 -0
- package/dist/cli-bundle/main.js +153 -855
- package/dist/cli-bundle/main.js.map +4 -4
- package/dist/cli-bundle/sdk-runtime.js +54 -54
- package/dist/cli-bundle/sdk-testing.js +6 -6
- package/dist/cli-bundle/sdk.js +195 -59
- package/dist/cli-bundle/sdk.js.map +3 -3
- package/dist/core/extensions/item-fields.js +2 -2
- package/dist/core/extensions/item-fields.js.map +1 -1
- package/dist/sdk/cli-bootstrap.d.ts +122 -0
- package/dist/sdk/cli-bootstrap.js +879 -0
- package/dist/sdk/cli-bootstrap.js.map +1 -0
- package/dist/sdk/eval.d.ts +66 -0
- package/dist/sdk/eval.js +186 -0
- package/dist/sdk/eval.js.map +1 -0
- package/dist/sdk/index.d.ts +16 -4
- package/dist/sdk/index.js +18 -6
- package/dist/sdk/index.js.map +1 -1
- package/dist/{cli/commands → sdk/query}/item-filter-options.d.ts +1 -1
- package/dist/{cli/commands → sdk/query}/item-filter-options.js +3 -3
- package/dist/sdk/query/item-filter-options.js.map +1 -0
- package/dist/sdk/query/list.d.ts +254 -0
- package/dist/sdk/query/list.js +1073 -0
- package/dist/sdk/query/list.js.map +1 -0
- package/dist/sdk/query/parsers.d.ts +9 -0
- package/dist/sdk/query/parsers.js +45 -0
- package/dist/sdk/query/parsers.js.map +1 -0
- package/dist/{cli/commands → sdk/query}/search-pagination.js +4 -4
- package/dist/sdk/query/search-pagination.js.map +1 -0
- package/dist/{cli/commands → sdk/query}/search-rendering.js +3 -3
- package/dist/sdk/query/search-rendering.js.map +1 -0
- package/dist/sdk/query/search.d.ts +469 -0
- package/dist/sdk/query/search.js +2247 -0
- package/dist/sdk/query/search.js.map +1 -0
- package/dist/sdk/runtime.d.ts +7 -7
- package/dist/sdk/runtime.js +13 -7
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/sdk/search-refresh-worker.d.ts +2 -0
- package/dist/sdk/search-refresh-worker.js +19 -0
- package/dist/sdk/search-refresh-worker.js.map +1 -0
- package/dist/sdk/stats.d.ts +66 -0
- package/dist/sdk/stats.js +151 -0
- package/dist/sdk/stats.js.map +1 -0
- package/dist/sdk/telemetry-flush.d.ts +2 -0
- package/dist/sdk/telemetry-flush.js +14 -0
- package/dist/sdk/telemetry-flush.js.map +1 -0
- package/dist/sdk/telemetry.d.ts +14 -0
- package/dist/sdk/telemetry.js +398 -0
- package/dist/sdk/telemetry.js.map +1 -0
- package/dist/sdk/test/batch.d.ts +94 -0
- package/dist/sdk/test/batch.js +492 -0
- package/dist/sdk/test/batch.js.map +1 -0
- package/dist/sdk/test/entry.d.ts +6 -0
- package/dist/sdk/test/entry.js +74 -0
- package/dist/sdk/test/entry.js.map +1 -0
- package/dist/sdk/test/execution.d.ts +282 -0
- package/dist/sdk/test/execution.js +1817 -0
- package/dist/sdk/test/execution.js.map +1 -0
- package/dist/sdk/test/parsers.d.ts +48 -0
- package/dist/sdk/test/parsers.js +522 -0
- package/dist/sdk/test/parsers.js.map +1 -0
- package/dist/sdk/test/runs.d.ts +92 -0
- package/dist/sdk/test/runs.js +195 -0
- package/dist/sdk/test/runs.js.map +1 -0
- package/docs/SDK.md +122 -0
- package/docs/SDK_PRIMITIVE_INVENTORY.md +5 -3
- package/docs/examples/sdk-custom-tool/README.md +27 -0
- package/docs/examples/sdk-custom-tool/package.json +13 -0
- package/docs/examples/sdk-custom-tool/src/cli.ts +36 -0
- package/docs/examples/sdk-custom-tool/src/entry.ts +15 -0
- package/docs/examples/sdk-custom-tool/src/index.ts +223 -0
- package/marketplace.json +2 -2
- package/package.json +4 -4
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-governance-audit/extensions/governance-audit/comments-audit.ts +77 -57
- package/packages/pm-governance-audit/extensions/governance-audit/dedupe-audit.ts +202 -194
- package/packages/pm-governance-audit/extensions/governance-audit/dedupe-merge.ts +227 -153
- package/packages/pm-governance-audit/extensions/governance-audit/normalize.ts +169 -125
- package/packages/pm-governance-audit/extensions/governance-audit/runtime-utils.ts +130 -81
- package/packages/pm-governance-audit/extensions/governance-audit/sdk.ts +53 -4
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/dist/cli/commands/item-filter-options.js.map +0 -1
- package/dist/cli/commands/search-pagination.js.map +0 -1
- package/dist/cli/commands/search-rendering.js.map +0 -1
- package/dist/cli-bundle/chunks/append-UZVHUO74.js +0 -11
- package/dist/cli-bundle/chunks/chunk-3S5QVM5H.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-4XQ3BDV4.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-5JLUII3O.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-5ZSLZLDN.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-EH2OPHBI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-H5APFTHZ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-HYB5AZ63.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-ILX33QXL.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-LPYWLWDS.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ONG5V5CI.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-UMOPHQSU.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-UXONS674.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-XXXF6PAQ.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-YBLZ2VE7.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js +0 -58
- package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js.map +0 -1
- package/dist/cli-bundle/chunks/chunk-ZKRZY773.js +0 -68
- package/dist/cli-bundle/chunks/chunk-ZKRZY773.js.map +0 -7
- package/dist/cli-bundle/chunks/close-W6LI2PKM.js +0 -12
- package/dist/cli-bundle/chunks/close-many-DLDDVSH5.js +0 -23
- package/dist/cli-bundle/chunks/comments-E3TNTK24.js +0 -13
- package/dist/cli-bundle/chunks/copy-Q5ZJPUKR.js +0 -9
- package/dist/cli-bundle/chunks/delete-WNHB3LYW.js +0 -10
- package/dist/cli-bundle/chunks/docs-HA2AIDBB.js +0 -14
- package/dist/cli-bundle/chunks/focus-POIW5LTJ.js +0 -10
- package/dist/cli-bundle/chunks/history-compact-FWG2C7FZ.js +0 -16
- package/dist/cli-bundle/chunks/history-repair-6GEAM7HE.js +0 -16
- package/dist/cli-bundle/chunks/learnings-RSNLSWDC.js +0 -13
- package/dist/cli-bundle/chunks/notes-2WDH6DXU.js +0 -13
- package/dist/cli-bundle/chunks/plan-DOVI2VMW.js +0 -24
- package/dist/cli-bundle/chunks/restore-YPMVUUEX.js +0 -14
- package/dist/cli-bundle/chunks/update-WWBYOPXO.js +0 -21
- package/dist/cli-bundle/chunks/update-many-OUGIU5SF.js +0 -32
- package/dist/cli-bundle/chunks/update-many-TA7NGQBO.js +0 -36
- /package/dist/cli-bundle/chunks/{append-OJQFUQ4T.js.map → append-5YF3TO7I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{append-UZVHUO74.js.map → append-JHO5K6RP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BCOFWYW4.js.map → chunk-2BX74BAS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-APRVSW2O.js.map → chunk-2CXL335K.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KG44YSKD.js.map → chunk-2FUOXSRN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HDH3JUGG.js.map → chunk-2IPNL3DR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GM5QHQU6.js.map → chunk-2XOSFSTH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K3WII2ME.js.map → chunk-37DRDP2B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2WSE6PO2.js.map → chunk-37V5MXAU.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UWQHLMEB.js.map → chunk-3D4YVTNG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PMOSXADO.js.map → chunk-47HXN6RX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6CFNAVTF.js.map → chunk-5HGZKQUL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2IFFUZLC.js.map → chunk-5UKQLQM2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DM4H7FP4.js.map → chunk-633PKXLT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-XSJUSQAE.js.map → chunk-646MQXFW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ZI6VQWQ7.js.map → chunk-66MKH7SZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-S6MQESFR.js.map → chunk-67RO3H4N.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-34L5OT3Y.js.map → chunk-6DYOZS6C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RRM5JYJC.js.map → chunk-6O44IN44.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PENXZX3U.js.map → chunk-74FKFFXO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-HO4KXD6I.js.map → chunk-7H5NNCJ5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TQSZFPIS.js.map → chunk-AFGKSHAM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6N2VXVTQ.js.map → chunk-ARGDWQ4J.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3U7ZR6M4.js.map → chunk-B57RJHBZ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YCQET3OT.js.map → chunk-BAP7G3N2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QKXHFPYM.js.map → chunk-BIRYX32V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RMLWNPH2.js.map → chunk-BVLOMU6O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2VPAVL7O.js.map → chunk-CKX4WOPC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TKOVBP6C.js.map → chunk-D52ZN3BF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-KPMKHGEA.js.map → chunk-D53RTYVI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ODALILG3.js.map → chunk-D5XHO4Q7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YAQEBNY7.js.map → chunk-DDFGYUCQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EAB64KLB.js.map → chunk-DG2EQRIH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IG3SWA4A.js.map → chunk-EHJFUOXL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ONREO4ST.js.map → chunk-EY7ZE3TG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EJEXHTY5.js.map → chunk-FHOBCGQO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-H3EIEWGR.js.map → chunk-FL4D53ND.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WUJQK4YV.js.map → chunk-FVNWHUME.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-INU6DKT5.js.map → chunk-FXFCFL73.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QEHQ2GVG.js.map → chunk-FY4RLHSC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EACOH7AU.js.map → chunk-FZGM3PNA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FNSPG7MU.js.map → chunk-G6KM4YKY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-AHVTB5I5.js.map → chunk-G6MYGULG.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TSMHDIW4.js.map → chunk-GLZKZON6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2JKGO6QX.js.map → chunk-H5IOT54C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SELVXEZK.js.map → chunk-HO4DLBNK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3CLU2XZO.js.map → chunk-HSYV4ZYT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-CRVF2JDM.js.map → chunk-HXVHBERL.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NU3IMIEA.js.map → chunk-I7DIDUSP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-2NCIPMQP.js.map → chunk-I7GY4X6Y.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JYFOV7FC.js.map → chunk-IE5KRAKN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UY2ACEMF.js.map → chunk-ILVOOAT4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-GOSLKLFE.js.map → chunk-KH6QAHME.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-J6EY5V4N.js.map → chunk-KOEZCHRF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-WQPUU7XD.js.map → chunk-L337QKWJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-LSG2U345.js.map → chunk-L6FVNR7X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-FMBNM2EN.js.map → chunk-LSOWTLEM.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-4223PVZT.js.map → chunk-M7MVOKVV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BKVG6XOA.js.map → chunk-MSGETE6I.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3WM75PWC.js.map → chunk-N33FD2UI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UFXU44HV.js.map → chunk-N7I2DGLP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-6S3YSUYG.js.map → chunk-NNANAWFH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IJIICKVW.js.map → chunk-NTRQLE2R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-SDQLJWBO.js.map → chunk-NVZ6NVHJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-H2Z3FYXQ.js.map → chunk-OWP6QFBV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-Q7A43DS4.js.map → chunk-P22HGFFI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NLDFBC6J.js.map → chunk-P56LKFQX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NVPZIJVR.js.map → chunk-PT7MCCGD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-P74IZQ7A.js.map → chunk-QKVVV6QO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QIPLHNP7.js.map → chunk-QWBKN3QC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7PIWCHTW.js.map → chunk-R5XTTZSJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JOUQZENX.js.map → chunk-RC4UOUXA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-BEP7WJA2.js.map → chunk-RGMWJLXF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-NP22ERDF.js.map → chunk-RTBX3C4C.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-7Z4LKRS4.js.map → chunk-SPFZV2GR.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-ULTHRDBP.js.map → chunk-TM5CIO3F.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-YAROI3PD.js.map → chunk-V7MP6YTN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-OW4JWD5M.js.map → chunk-VAHZIPWS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-DYH63FX7.js.map → chunk-VE6ZSTQW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-3AUGG2DP.js.map → chunk-W5E2UUSH.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-UOHFKBUV.js.map → chunk-WL3SS45P.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-QKJGPFAF.js.map → chunk-WU3KAN6A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-IA5FKNII.js.map → chunk-X2MGQMZO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-TD3LVC7D.js.map → chunk-X5YCTFKT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-B7PE22W6.js.map → chunk-XC2HEEOV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-J5AOEGDC.js.map → chunk-XNPMDSQQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-K2X6U4UA.js.map → chunk-XXLXJL7V.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-RLCHOOHC.js.map → chunk-YJSURTBB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-PGY23YTC.js.map → chunk-YKFHF37B.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-JFTKLTEF.js.map → chunk-YQCWK2MB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{chunk-EYLCSJAI.js.map → chunk-YQEZWI3R.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-W6LI2PKM.js.map → close-BEP7MHF3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-CWODTPKG.js.map → close-Y6QFUJQN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-CQFUY7MR.js.map → close-many-JJFW7KTT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{close-many-DLDDVSH5.js.map → close-many-QJ6FKJUE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-E3TNTK24.js.map → comments-2AOZQ5D2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{comments-WGLHR7LB.js.map → comments-TMHMALA5.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-LXVDXH7B.js.map → copy-FWQA5OU4.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{copy-Q5ZJPUKR.js.map → copy-N3LCQBMC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-LBVCYMEG.js.map → create-AQ5SIGZC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{create-J5U6ND4K.js.map → create-KOGQ3JKD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-WNHB3LYW.js.map → delete-6G3MBZ6S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{delete-PMJBNY5G.js.map → delete-YYYFOSEA.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-OA26IS25.js.map → deps-5NC4IZH7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{deps-JZ7TMVCB.js.map → deps-EVTOQMKW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-FEWB2DQB.js.map → docs-53NUGMIQ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{docs-HA2AIDBB.js.map → docs-OWRGDMNY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-EFIWKFTM.js.map → files-3PXGXYDB.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{files-6YFBJRBG.js.map → files-EGLKHD7O.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-POIW5LTJ.js.map → focus-KZLIA6WS.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{focus-4QJR7FOQ.js.map → focus-SRPASFTN.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-CKRPDTJN.js.map → history-compact-G4DULDCX.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-compact-FWG2C7FZ.js.map → history-compact-HHIUOMZ7.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-BB3TGDAE.js.map → history-redact-IUSJ6X3E.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-redact-D225BHOZ.js.map → history-redact-THHGRQXV.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-6GEAM7HE.js.map → history-repair-KG7SWXI6.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{history-repair-RQXKQHL4.js.map → history-repair-LUQWRS7X.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-JLNLCOL5.js.map → learnings-2MRNBFJF.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{learnings-RSNLSWDC.js.map → learnings-ZVHSALJY.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-GB47XXQQ.js.map → notes-73JWKWUD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{notes-2WDH6DXU.js.map → notes-BAKUL5DJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-VDCJ2PCN.js.map → plan-AZPMCG37.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{plan-DOVI2VMW.js.map → plan-LEAGLPGP.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-IVXQEL3D.js.map → profile-AGUKS52S.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{profile-FAU7NZML.js.map → profile-U2B6Y7GE.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-list-query-UL4UKBBN.js.map → register-list-query-A5KRJ5J2.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-list-query-DKA3EH5D.js.map → register-list-query-NEYP3TXO.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-RBBJ52DK.js.map → register-mutation-6LOPBAHC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-mutation-ARFHRW55.js.map → register-mutation-GCZOALNJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-operations-ZIBBRSED.js.map → register-operations-6ZZIF27A.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-operations-ZUJ5JWPE.js.map → register-operations-REDIAEGI.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-TDCGWIOS.js.map → register-setup-BHPMN5SK.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{register-setup-BCVLFEYS.js.map → register-setup-J3JS2ZVT.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-25DLT2Q2.js.map → restore-E3PRGDN3.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{restore-YPMVUUEX.js.map → restore-KIUYTAEJ.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-FNU3WE4O.js.map → schema-5JNFQFUW.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{schema-NBCM3RAD.js.map → schema-TMIW4XZC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-WWBYOPXO.js.map → update-PQQHLYCC.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-XHSIAIXE.js.map → update-SA6AG23P.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-TA7NGQBO.js.map → update-many-RQVTFJPD.js.map} +0 -0
- /package/dist/cli-bundle/chunks/{update-many-OUGIU5SF.js.map → update-many-TV3L3KBX.js.map} +0 -0
- /package/dist/{cli/commands → sdk/query}/search-pagination.d.ts +0 -0
- /package/dist/{cli/commands → sdk/query}/search-rendering.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sources":["cli/commands/telemetry.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module cli/commands/telemetry\n *\n * Implements the pm telemetry command surface and its agent-facing runtime behavior.\n */\nimport 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(\n \"runtime\",\n \"telemetry\",\n \"events.jsonl\",\n);\nconst TELEMETRY_STATE_RELATIVE_PATH = path.join(\n \"runtime\",\n \"telemetry\",\n \"state.json\",\n);\nconst TELEMETRY_RUNTIME_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\");\nconst DEFAULT_STATS_LIMIT = 20;\n\n/** Public contract for telemetry subcommands, shared by SDK and presentation-layer consumers. */\nexport const TELEMETRY_SUBCOMMANDS = [\n \"status\",\n \"flush\",\n \"stats\",\n \"clear\",\n] as const;\n/** Restricts telemetry subcommand values accepted by command, SDK, and storage contracts. */\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 payload?: Record<string, unknown>;\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\n/** Documents the telemetry command options payload exchanged by command, SDK, and package integrations. */\nexport interface TelemetryCommandOptions {\n /** Value that configures or reports subcommand for this contract. */\n subcommand?: string;\n /** Value that configures or reports limit for this contract. */\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 /** Latency percentiles (nearest-rank) over `duration_ms` from the bucket's `command_finish` events. Present only when at least one finish event carries a finite `duration_ms`; `command_start`/`command_error` events are excluded. */\n duration_p50_ms?: number;\n duration_p95_ms?: number;\n duration_max_ms?: number;\n /** Success/failure tally derived from `command_finish` payload `ok`. A finish event whose `ok` is missing or not strictly `true` is counted as an error (conservative). Present only when the bucket has at least one finish event; `ok_count + error_count` equals that finish-event count. */\n ok_count?: number;\n error_count?: number;\n error_rate?: number;\n /** Distribution of `command_resolution` over `command_finish` events; present only when non-empty. */\n command_resolution_counts?: Record<string, number>;\n}\n\ninterface TelemetryStatsBucketAccumulator {\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 finish_durations_ms: number[];\n ok_count: number;\n error_count: number;\n resolution_counts: Record<string, number>;\n}\n\ninterface NormalizedTelemetryQueueEntry {\n command: string;\n eventType: string;\n eventSchemaVersion: number | undefined;\n clientSchemaVersion: number | undefined;\n}\n\n/**\n * Returns the nearest-rank percentile of an ascending-sorted, non-empty array.\n *\n * Uses the nearest-rank method (rank = ceil(fraction × n), 1-based, clamped into\n * range) so the result is always an observed sample value with no interpolation.\n */\nfunction nearestRankPercentile(\n sortedAscending: number[],\n fraction: number,\n): number {\n const rank = Math.ceil(fraction * sortedAscending.length);\n const index = Math.min(sortedAscending.length - 1, Math.max(0, rank - 1));\n return sortedAscending[index];\n}\n\nfunction normalizeTelemetryQueueEntry(\n entry: QueuedTelemetryEventRecord,\n): NormalizedTelemetryQueueEntry {\n const command =\n typeof entry.event.command === \"string\" &&\n entry.event.command.trim().length > 0\n ? entry.event.command\n : \"<unknown>\";\n const eventType =\n typeof entry.event.event_type === \"string\" &&\n entry.event.event_type.trim().length > 0\n ? entry.event.event_type\n : \"unknown\";\n const eventSchemaVersion =\n typeof entry.event.schema_version === \"number\" &&\n 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\" &&\n Number.isFinite(entry.client_schema_version)\n ? Math.trunc(entry.client_schema_version)\n : undefined;\n return { command, eventType, eventSchemaVersion, clientSchemaVersion };\n}\n\nfunction createTelemetryStatsAccumulator(): TelemetryStatsBucketAccumulator {\n return {\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 finish_durations_ms: [],\n ok_count: 0,\n error_count: 0,\n resolution_counts: {},\n };\n}\n\nfunction recordTelemetryFinishPayload(\n current: TelemetryStatsBucketAccumulator,\n payload: Record<string, unknown> | undefined,\n): void {\n const durationMs =\n typeof payload?.duration_ms === \"number\" &&\n Number.isFinite(payload.duration_ms)\n ? payload.duration_ms\n : undefined;\n if (durationMs !== undefined) {\n current.finish_durations_ms.push(durationMs);\n }\n if (payload?.ok === true) {\n current.ok_count += 1;\n } else {\n current.error_count += 1;\n }\n const resolution =\n typeof payload?.command_resolution === \"string\" &&\n payload.command_resolution.trim().length > 0\n ? payload.command_resolution\n : undefined;\n if (resolution !== undefined) {\n current.resolution_counts[resolution] =\n (current.resolution_counts[resolution] ?? 0) + 1;\n }\n}\n\nfunction recordTelemetryQueueEntry(\n grouped: Map<string, TelemetryStatsBucketAccumulator>,\n entry: QueuedTelemetryEventRecord,\n): void {\n const normalized = normalizeTelemetryQueueEntry(entry);\n const current =\n grouped.get(normalized.command) ?? createTelemetryStatsAccumulator();\n const attempts = Number.isFinite(entry.attempts)\n ? Math.max(0, Math.trunc(entry.attempts))\n : 0;\n current.count += 1;\n current.max_attempts = Math.max(current.max_attempts, attempts);\n current.event_type_counts[normalized.eventType] =\n (current.event_type_counts[normalized.eventType] ?? 0) + 1;\n if (normalized.eventSchemaVersion !== undefined) {\n current.event_schema_versions.add(normalized.eventSchemaVersion);\n }\n if (normalized.clientSchemaVersion !== undefined) {\n current.client_schema_versions.add(normalized.clientSchemaVersion);\n }\n if (normalized.eventType === \"command_finish\") {\n recordTelemetryFinishPayload(current, entry.event.payload);\n }\n grouped.set(normalized.command, current);\n}\n\nfunction buildTelemetryStatsBucket(\n command: string,\n value: TelemetryStatsBucketAccumulator,\n): TelemetryStatsBucket {\n const finishCount = value.ok_count + value.error_count;\n const sortedDurations = [...value.finish_durations_ms].sort(\n (left, right) => left - right,\n );\n const resolutionEntries = Object.entries(value.resolution_counts).sort(\n (left, right) => left[0].localeCompare(right[0]),\n );\n return {\n command,\n count: value.count,\n event_type_counts: Object.fromEntries(\n Object.entries(value.event_type_counts).sort((left, right) =>\n left[0].localeCompare(right[0]),\n ),\n ),\n max_attempts: value.max_attempts,\n event_schema_versions: [...value.event_schema_versions].sort(\n (left, right) => left - right,\n ),\n client_schema_versions: [...value.client_schema_versions].sort(\n (left, right) => left - right,\n ),\n ...(sortedDurations.length > 0\n ? {\n duration_p50_ms: nearestRankPercentile(sortedDurations, 0.5),\n duration_p95_ms: nearestRankPercentile(sortedDurations, 0.95),\n duration_max_ms: sortedDurations[sortedDurations.length - 1],\n }\n : {}),\n ...(finishCount > 0\n ? {\n ok_count: value.ok_count,\n error_count: value.error_count,\n error_rate: value.error_count / finishCount,\n }\n : {}),\n ...(resolutionEntries.length > 0\n ? { command_resolution_counts: Object.fromEntries(resolutionEntries) }\n : {}),\n };\n}\n\nfunction normalizeTelemetrySubcommand(\n value: string | undefined,\n): TelemetrySubcommand {\n const normalized = (value ?? \"status\").trim().toLowerCase();\n if ((TELEMETRY_SUBCOMMANDS as readonly string[]).includes(normalized)) {\n return normalized as TelemetrySubcommand;\n }\n // `value` is always a defined string here: an undefined subcommand normalizes\n // to \"status\" above (a valid value) and never reaches this throw.\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(\n \"--limit must be a positive integer\",\n EXIT_CODE.USAGE,\n );\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(\n statePath: string,\n): 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 (\n typeof parsed === \"object\" &&\n parsed !== null &&\n !Array.isArray(parsed)\n ) {\n return parsed;\n }\n } catch {\n // Ignore malformed state files; status command is observational.\n }\n return {};\n}\n\nasync function buildTelemetryStatusSummary(\n globalPmRoot: string,\n): 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:\n 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(\n entries: QueuedTelemetryEventRecord[],\n): TelemetryStatsBucket[] {\n const grouped = new Map<string, TelemetryStatsBucketAccumulator>();\n for (const entry of entries) {\n // Latency + outcome distribution come from command_finish payloads only:\n // command_finish always carries duration_ms/ok/command_resolution at every\n // capture level, while start/error events do not.\n recordTelemetryQueueEntry(grouped, entry);\n }\n return [...grouped.entries()]\n .map(([command, value]) => buildTelemetryStatsBucket(command, value))\n .sort(\n (left, right) =>\n right.count - left.count || left.command.localeCompare(right.command),\n );\n}\n\n/** Implements run telemetry for the public runtime surface of this module. */\nexport async function runTelemetry(\n options: TelemetryCommandOptions,\n _global: GlobalOptions,\n): 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 =\n 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 !==\n settings.telemetry.first_run_prompt_completed;\n if (settingsChanged) {\n await writeSettings(globalPmRoot, settings, \"telemetry:clear\");\n }\n\n const telemetryRuntimePath = path.join(\n globalPmRoot,\n TELEMETRY_RUNTIME_RELATIVE_PATH,\n );\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":"a0a5873e-adac-517e-901b-9462c208164c"}
|
|
1
|
+
{"version":3,"file":"telemetry.js","sources":["cli/commands/telemetry.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module cli/commands/telemetry\n *\n * Compatibility export for SDK-owned telemetry diagnostics.\n */\nexport * from \"../../sdk/telemetry.js\";\n"],"names":[],"mappings":"AAAA;;;;GAIG;;;AACH,cAAc,wBAAwB,CAAC","debugId":"d305520e-3ead-55e7-8382-3a12e9692e93"}
|
|
@@ -1,95 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
status?: string;
|
|
8
|
-
/** Value that configures or reports limit for this contract. */
|
|
9
|
-
limit?: string;
|
|
10
|
-
/** Value that configures or reports offset for this contract. */
|
|
11
|
-
offset?: string;
|
|
12
|
-
/** Value that configures or reports timeout for this contract. */
|
|
13
|
-
timeout?: string;
|
|
14
|
-
/** Value that configures or reports progress for this contract. */
|
|
15
|
-
progress?: boolean;
|
|
16
|
-
/** Value that configures or reports env set for this contract. */
|
|
17
|
-
envSet?: string[];
|
|
18
|
-
/** Value that configures or reports env clear for this contract. */
|
|
19
|
-
envClear?: string[];
|
|
20
|
-
/** Value that configures or reports shared host safe for this contract. */
|
|
21
|
-
sharedHostSafe?: boolean;
|
|
22
|
-
/** Value that configures or reports pm context for this contract. */
|
|
23
|
-
pmContext?: string;
|
|
24
|
-
/** Value that configures or reports override linked pm context for this contract. */
|
|
25
|
-
overrideLinkedPmContext?: boolean;
|
|
26
|
-
/** Value that configures or reports fail on context mismatch for this contract. */
|
|
27
|
-
failOnContextMismatch?: boolean;
|
|
28
|
-
/** Value that configures or reports fail on skipped for this contract. */
|
|
29
|
-
failOnSkipped?: boolean;
|
|
30
|
-
/** Value that configures or reports fail on empty test run for this contract. */
|
|
31
|
-
failOnEmptyTestRun?: boolean;
|
|
32
|
-
/** Value that configures or reports require assertions for pm for this contract. */
|
|
33
|
-
requireAssertionsForPm?: boolean;
|
|
34
|
-
/** Value that configures or reports check context for this contract. */
|
|
35
|
-
checkContext?: boolean;
|
|
36
|
-
/** Value that configures or reports auto pm context for this contract. */
|
|
37
|
-
autoPmContext?: boolean;
|
|
38
|
-
}
|
|
39
|
-
/** Documents the test all item result payload exchanged by command, SDK, and package integrations. */
|
|
40
|
-
export interface TestAllItemResult {
|
|
41
|
-
/** Whether the operation completed without a blocking failure. */
|
|
42
|
-
ok: boolean;
|
|
43
|
-
/** Stable identifier used to reference this record across commands and storage. */
|
|
44
|
-
id: string;
|
|
45
|
-
/** Lifecycle state reported for status. */
|
|
46
|
-
status: ItemStatus;
|
|
47
|
-
/** Number of test entries represented by this result. */
|
|
48
|
-
test_count: number;
|
|
49
|
-
/** Value that configures or reports passed for this contract. */
|
|
50
|
-
passed: number;
|
|
51
|
-
/** Value that configures or reports failed for this contract. */
|
|
52
|
-
failed: number;
|
|
53
|
-
/** Value that configures or reports skipped for this contract. */
|
|
54
|
-
skipped: number;
|
|
55
|
-
/** Executes the results operation through the package runtime. */
|
|
56
|
-
run_results: TestRunResult[];
|
|
57
|
-
/** Value that configures or reports failure categories for this contract. */
|
|
58
|
-
failure_categories: Record<LinkedTestFailureCategory, number>;
|
|
59
|
-
}
|
|
60
|
-
/** Documents the test all result payload exchanged by command, SDK, and package integrations. */
|
|
61
|
-
export interface TestAllResult {
|
|
62
|
-
/** Whether the operation completed without a blocking failure. */
|
|
63
|
-
ok: boolean;
|
|
64
|
-
/** Value that configures or reports totals for this contract. */
|
|
65
|
-
totals: {
|
|
66
|
-
items: number;
|
|
67
|
-
linked_tests: number;
|
|
68
|
-
passed: number;
|
|
69
|
-
failed: number;
|
|
70
|
-
skipped: number;
|
|
71
|
-
failure_categories: Record<LinkedTestFailureCategory, number>;
|
|
72
|
-
};
|
|
73
|
-
/** Value that configures or reports failed for this contract. */
|
|
74
|
-
failed: number;
|
|
75
|
-
/** Value that configures or reports passed for this contract. */
|
|
76
|
-
passed: number;
|
|
77
|
-
/** Value that configures or reports skipped for this contract. */
|
|
78
|
-
skipped: number;
|
|
79
|
-
/** Value that configures or reports fail on skipped triggered for this contract. */
|
|
80
|
-
fail_on_skipped_triggered?: boolean;
|
|
81
|
-
/** Value that configures or reports fail on empty test run triggered for this contract. */
|
|
82
|
-
fail_on_empty_test_run_triggered?: boolean;
|
|
83
|
-
/** Value that configures or reports warnings for this contract. */
|
|
84
|
-
warnings?: string[];
|
|
85
|
-
/** Value that configures or reports results for this contract. */
|
|
86
|
-
results: TestAllItemResult[];
|
|
87
|
-
}
|
|
88
|
-
declare function formatTrackingError(error: unknown): string;
|
|
89
|
-
/** Implements run test all for the public runtime surface of this module. */
|
|
90
|
-
export declare function runTestAll(options: TestAllCommandOptions, global: GlobalOptions): Promise<TestAllResult>;
|
|
91
|
-
/** Public contract for test only test all, shared by SDK and presentation-layer consumers. */
|
|
92
|
-
export declare const _testOnlyTestAll: {
|
|
93
|
-
formatTrackingError: typeof formatTrackingError;
|
|
94
|
-
};
|
|
95
|
-
export {};
|
|
1
|
+
/**
|
|
2
|
+
* @module cli/commands/test-all
|
|
3
|
+
*
|
|
4
|
+
* Compatibility export for SDK-owned batch linked-test orchestration.
|
|
5
|
+
*/
|
|
6
|
+
export * from "../../sdk/test/batch.js";
|
|
@@ -1,445 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module cli/commands/test-all
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Compatibility export for SDK-owned batch linked-test orchestration.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
!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]="
|
|
8
|
-
|
|
9
|
-
import { getActiveExtensionRegistrations } from "../../core/extensions/index.js";
|
|
10
|
-
import { resolveItemTypeRegistry } from "../../core/item/type-registry.js";
|
|
11
|
-
import { parseOptionalNumber } from "../../core/item/parse.js";
|
|
12
|
-
import { normalizeStatusInput } from "../../core/item/status.js";
|
|
13
|
-
import { resolveRuntimeStatusRegistry, } from "../../core/schema/runtime-schema.js";
|
|
14
|
-
import { EXIT_CODE } from "../../core/shared/constants.js";
|
|
15
|
-
import { PmCliError } from "../../core/shared/errors.js";
|
|
16
|
-
import { nowIso } from "../../core/shared/time.js";
|
|
17
|
-
import { listAllItemMetadataLight } from "../../core/store/item-store.js";
|
|
18
|
-
import { getSettingsPath, resolveGlobalPmRoot, resolvePmRoot, } from "../../core/store/paths.js";
|
|
19
|
-
import { readSettings } from "../../core/store/settings.js";
|
|
20
|
-
import { appendTrackedTestRunSummary } from "../../core/test/item-test-run-tracking.js";
|
|
21
|
-
import { resolveAuthor } from "../../core/shared/author.js";
|
|
22
|
-
import { countFailureCategories, runLinkedTests, runTest, summarizeContextPreflight, } from "./test.js";
|
|
23
|
-
function parseStatus(raw, statusRegistry) {
|
|
24
|
-
if (raw === undefined) {
|
|
25
|
-
return undefined;
|
|
26
|
-
}
|
|
27
|
-
const normalized = normalizeStatusInput(raw, statusRegistry);
|
|
28
|
-
if (!normalized) {
|
|
29
|
-
const allowedStatuses = statusRegistry.definitions.map((definition) => definition.id);
|
|
30
|
-
throw new PmCliError(`Invalid --status value "${raw}". Allowed: ${allowedStatuses.join(", ")}`, EXIT_CODE.USAGE);
|
|
31
|
-
}
|
|
32
|
-
return normalized;
|
|
33
|
-
}
|
|
34
|
-
function parseTimeout(raw) {
|
|
35
|
-
if (raw === undefined) {
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
|
-
return parseOptionalNumber(raw, "timeout");
|
|
39
|
-
}
|
|
40
|
-
function parseNonNegativeInteger(raw, flag) {
|
|
41
|
-
if (raw === undefined) {
|
|
42
|
-
return undefined;
|
|
43
|
-
}
|
|
44
|
-
const parsed = Number(raw);
|
|
45
|
-
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
46
|
-
throw new PmCliError(`${flag} must be a non-negative integer`, EXIT_CODE.USAGE);
|
|
47
|
-
}
|
|
48
|
-
return parsed;
|
|
49
|
-
}
|
|
50
|
-
function formatTrackingError(error) {
|
|
51
|
-
return error instanceof Error ? error.message : String(error);
|
|
52
|
-
}
|
|
53
|
-
function resolveTrackedRunId() {
|
|
54
|
-
const fromEnv = process.env.PM_BACKGROUND_TEST_RUN_ID?.trim();
|
|
55
|
-
if (fromEnv && fromEnv.length > 0) {
|
|
56
|
-
return fromEnv;
|
|
57
|
-
}
|
|
58
|
-
return `test-all-local-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
59
|
-
}
|
|
60
|
-
function normalizeCommand(command) {
|
|
61
|
-
return command.trim().replaceAll(/\s+/g, " ");
|
|
62
|
-
}
|
|
63
|
-
function normalizeEnvSetSignature(value) {
|
|
64
|
-
if (!value || Object.keys(value).length === 0) {
|
|
65
|
-
return "{}";
|
|
66
|
-
}
|
|
67
|
-
return JSON.stringify(Object.fromEntries(Object.entries(value).sort(([left], [right]) => left.localeCompare(right))));
|
|
68
|
-
}
|
|
69
|
-
function normalizeEnvClearSignature(value) {
|
|
70
|
-
if (!value || value.length === 0) {
|
|
71
|
-
return "[]";
|
|
72
|
-
}
|
|
73
|
-
return JSON.stringify([...value].sort((left, right) => left.localeCompare(right)));
|
|
74
|
-
}
|
|
75
|
-
function normalizePmContextModeSignature(value) {
|
|
76
|
-
const normalized = value?.trim().toLowerCase();
|
|
77
|
-
return normalized && normalized.length > 0 ? normalized : "none";
|
|
78
|
-
}
|
|
79
|
-
function normalizeAssertionSignature(test) {
|
|
80
|
-
const normalized = {
|
|
81
|
-
assert_stdout_contains: [
|
|
82
|
-
...new Set(test.assert_stdout_contains ?? []),
|
|
83
|
-
].sort((left, right) => left.localeCompare(right)),
|
|
84
|
-
assert_stdout_regex: [...new Set(test.assert_stdout_regex ?? [])].sort((left, right) => left.localeCompare(right)),
|
|
85
|
-
assert_stderr_contains: [
|
|
86
|
-
...new Set(test.assert_stderr_contains ?? []),
|
|
87
|
-
].sort((left, right) => left.localeCompare(right)),
|
|
88
|
-
assert_stderr_regex: [...new Set(test.assert_stderr_regex ?? [])].sort((left, right) => left.localeCompare(right)),
|
|
89
|
-
assert_stdout_min_lines: typeof test.assert_stdout_min_lines === "number"
|
|
90
|
-
? test.assert_stdout_min_lines
|
|
91
|
-
: undefined,
|
|
92
|
-
assert_json_field_equals: Object.fromEntries(Object.entries(test.assert_json_field_equals ?? {}).sort(([left], [right]) => left.localeCompare(right))),
|
|
93
|
-
assert_json_field_gte: Object.fromEntries(Object.entries(test.assert_json_field_gte ?? {}).sort(([left], [right]) => left.localeCompare(right))),
|
|
94
|
-
};
|
|
95
|
-
return JSON.stringify(normalized);
|
|
96
|
-
}
|
|
97
|
-
function buildLinkedTestKey(test) {
|
|
98
|
-
const command = test.command?.trim();
|
|
99
|
-
if (command && command.length > 0) {
|
|
100
|
-
const envSet = normalizeEnvSetSignature(test.env_set);
|
|
101
|
-
const envClear = normalizeEnvClearSignature(test.env_clear);
|
|
102
|
-
const pmContextMode = normalizePmContextModeSignature(test.pm_context_mode);
|
|
103
|
-
const sharedHostSafe = test.shared_host_safe === true ? "true" : "false";
|
|
104
|
-
const assertions = normalizeAssertionSignature(test);
|
|
105
|
-
return `command:${test.scope}:${normalizeCommand(command)}:${envSet}:${envClear}:${pmContextMode}:${sharedHostSafe}:${assertions}`;
|
|
106
|
-
}
|
|
107
|
-
const linkedPath = test.path?.trim() ?? "";
|
|
108
|
-
return `path:${test.scope}:${linkedPath}`;
|
|
109
|
-
}
|
|
110
|
-
function maxTimeoutSeconds(current, candidate) {
|
|
111
|
-
if (candidate === undefined) {
|
|
112
|
-
/* c8 ignore next - exercised implicitly by duplicate timeout normalization */
|
|
113
|
-
return current;
|
|
114
|
-
}
|
|
115
|
-
if (current === undefined || candidate > current) {
|
|
116
|
-
return candidate;
|
|
117
|
-
}
|
|
118
|
-
return current;
|
|
119
|
-
}
|
|
120
|
-
function countStatuses(runResults) {
|
|
121
|
-
let passed = 0;
|
|
122
|
-
let failed = 0;
|
|
123
|
-
let skipped = 0;
|
|
124
|
-
for (const result of runResults) {
|
|
125
|
-
if (result.status === "passed") {
|
|
126
|
-
passed += 1;
|
|
127
|
-
continue;
|
|
128
|
-
}
|
|
129
|
-
if (result.status === "failed") {
|
|
130
|
-
failed += 1;
|
|
131
|
-
continue;
|
|
132
|
-
}
|
|
133
|
-
skipped += 1;
|
|
134
|
-
}
|
|
135
|
-
return { passed, failed, skipped };
|
|
136
|
-
}
|
|
137
|
-
function mergeFailureCategoryCounts(target, source) {
|
|
138
|
-
for (const [key, value] of Object.entries(source)) {
|
|
139
|
-
target[key] += value;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
function emitTestAllProgress(options, message) {
|
|
143
|
-
if (options.progress !== true) {
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
try {
|
|
147
|
-
process.stderr.write(`[pm test-all] ${message}\n`);
|
|
148
|
-
}
|
|
149
|
-
catch {
|
|
150
|
-
// Ignore transient stderr write failures.
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
async function collectTestAllItemTests(filteredItems, global, pmRoot) {
|
|
154
|
-
const itemTests = [];
|
|
155
|
-
let linkedTests = 0;
|
|
156
|
-
for (const item of filteredItems) {
|
|
157
|
-
const readResult = await runTest(item.id, { run: false }, {
|
|
158
|
-
...global,
|
|
159
|
-
path: pmRoot,
|
|
160
|
-
});
|
|
161
|
-
linkedTests += readResult.tests.length;
|
|
162
|
-
itemTests.push({ item, tests: readResult.tests });
|
|
163
|
-
}
|
|
164
|
-
return { itemTests, linkedTests };
|
|
165
|
-
}
|
|
166
|
-
async function selectTestAllItems(params) {
|
|
167
|
-
const statusRegistry = resolveRuntimeStatusRegistry(params.settings.schema);
|
|
168
|
-
const typeRegistry = resolveItemTypeRegistry(params.settings, getActiveExtensionRegistrations());
|
|
169
|
-
const statusFilter = parseStatus(params.options.status, statusRegistry);
|
|
170
|
-
const limitFilter = parseNonNegativeInteger(params.options.limit, "--limit");
|
|
171
|
-
const offsetFilter = parseNonNegativeInteger(params.options.offset, "--offset") ?? 0;
|
|
172
|
-
const allItems = await listAllItemMetadataLight(params.pmRoot, params.settings.item_format, typeRegistry.type_to_folder, undefined, params.settings.schema);
|
|
173
|
-
const statusFilteredItems = allItems
|
|
174
|
-
.filter((item) => (statusFilter ? item.status === statusFilter : true))
|
|
175
|
-
.sort((a, b) => a.id.localeCompare(b.id));
|
|
176
|
-
const filteredItems = limitFilter === undefined
|
|
177
|
-
? statusFilteredItems.slice(offsetFilter)
|
|
178
|
-
: statusFilteredItems.slice(offsetFilter, offsetFilter + limitFilter);
|
|
179
|
-
return { filteredItems, statusFilter, limitFilter, offsetFilter };
|
|
180
|
-
}
|
|
181
|
-
function buildEffectiveTimeoutByKey(itemTests) {
|
|
182
|
-
const effectiveTimeoutByKey = new Map();
|
|
183
|
-
for (const { tests } of itemTests) {
|
|
184
|
-
for (const test of tests) {
|
|
185
|
-
const key = buildLinkedTestKey(test);
|
|
186
|
-
if (!effectiveTimeoutByKey.has(key)) {
|
|
187
|
-
effectiveTimeoutByKey.set(key, test.timeout_seconds);
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
effectiveTimeoutByKey.set(key, maxTimeoutSeconds(effectiveTimeoutByKey.get(key), test.timeout_seconds));
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
return effectiveTimeoutByKey;
|
|
194
|
-
}
|
|
195
|
-
async function runTestAllItem(entry, context) {
|
|
196
|
-
const testsToRun = [];
|
|
197
|
-
const keyedTests = entry.tests.map((test) => {
|
|
198
|
-
const key = buildLinkedTestKey(test);
|
|
199
|
-
const duplicate = context.seenTestKeys.has(key);
|
|
200
|
-
if (!duplicate) {
|
|
201
|
-
context.seenTestKeys.add(key);
|
|
202
|
-
const effectiveTimeoutSeconds = context.effectiveTimeoutByKey.get(key);
|
|
203
|
-
testsToRun.push(effectiveTimeoutSeconds === undefined
|
|
204
|
-
? test
|
|
205
|
-
: { ...test, timeout_seconds: effectiveTimeoutSeconds });
|
|
206
|
-
}
|
|
207
|
-
return { test, key, duplicate };
|
|
208
|
-
});
|
|
209
|
-
const executedResults = testsToRun.length > 0
|
|
210
|
-
? await runLinkedTests(testsToRun, context.defaultTimeoutSeconds, {
|
|
211
|
-
progress: context.options.progress,
|
|
212
|
-
sourceRoots: context.sourceRoots,
|
|
213
|
-
envSet: context.options.envSet,
|
|
214
|
-
envClear: context.options.envClear,
|
|
215
|
-
sharedHostSafe: context.options.sharedHostSafe,
|
|
216
|
-
pmContext: context.options.pmContext,
|
|
217
|
-
overrideLinkedPmContext: context.options.overrideLinkedPmContext,
|
|
218
|
-
failOnContextMismatch: context.options.failOnContextMismatch,
|
|
219
|
-
failOnEmptyTestRun: context.options.failOnEmptyTestRun,
|
|
220
|
-
requireAssertionsForPm: context.options.requireAssertionsForPm,
|
|
221
|
-
checkContext: context.options.checkContext,
|
|
222
|
-
autoPmContext: context.options.autoPmContext,
|
|
223
|
-
})
|
|
224
|
-
: [];
|
|
225
|
-
let executedIndex = 0;
|
|
226
|
-
const runResults = keyedTests.map(({ test, key, duplicate }) => {
|
|
227
|
-
if (!duplicate) {
|
|
228
|
-
const executed = executedResults[executedIndex];
|
|
229
|
-
executedIndex += 1;
|
|
230
|
-
return executed;
|
|
231
|
-
}
|
|
232
|
-
return {
|
|
233
|
-
command: test.command,
|
|
234
|
-
path: test.path,
|
|
235
|
-
status: "skipped",
|
|
236
|
-
error: `Duplicate linked test skipped (key=${key}).`,
|
|
237
|
-
};
|
|
238
|
-
});
|
|
239
|
-
const summary = countStatuses(runResults);
|
|
240
|
-
const failureCategories = countFailureCategories(runResults);
|
|
241
|
-
const trackingWarnings = await appendTestAllItemTracking(entry, summary, context);
|
|
242
|
-
return {
|
|
243
|
-
passed: summary.passed,
|
|
244
|
-
failed: summary.failed,
|
|
245
|
-
skipped: summary.skipped,
|
|
246
|
-
trackingWarnings,
|
|
247
|
-
failureCategories,
|
|
248
|
-
result: {
|
|
249
|
-
ok: summary.failed === 0 &&
|
|
250
|
-
!(context.options.failOnSkipped === true && summary.skipped > 0),
|
|
251
|
-
id: entry.item.id,
|
|
252
|
-
status: entry.item.status,
|
|
253
|
-
test_count: entry.tests.length,
|
|
254
|
-
passed: summary.passed,
|
|
255
|
-
failed: summary.failed,
|
|
256
|
-
skipped: summary.skipped,
|
|
257
|
-
run_results: runResults,
|
|
258
|
-
failure_categories: failureCategories,
|
|
259
|
-
},
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
async function appendTestAllItemTracking(entry, summary, context) {
|
|
263
|
-
if (!context.trackingEnabled) {
|
|
264
|
-
return [];
|
|
265
|
-
}
|
|
266
|
-
try {
|
|
267
|
-
await appendTrackedTestRunSummary({
|
|
268
|
-
pmRoot: context.pmRoot,
|
|
269
|
-
settings: context.settings,
|
|
270
|
-
itemId: entry.item.id,
|
|
271
|
-
author: context.trackingAuthor,
|
|
272
|
-
message: `Track test-all run summary (${context.trackingRunId})`,
|
|
273
|
-
entry: {
|
|
274
|
-
run_id: context.trackingRunId,
|
|
275
|
-
kind: "test-all",
|
|
276
|
-
status: summary.failed > 0 ||
|
|
277
|
-
(context.options.failOnSkipped === true && summary.skipped > 0)
|
|
278
|
-
? "failed"
|
|
279
|
-
: "passed",
|
|
280
|
-
started_at: context.runStartedAt,
|
|
281
|
-
finished_at: nowIso(),
|
|
282
|
-
recorded_at: nowIso(),
|
|
283
|
-
attempt: context.trackingAttempt,
|
|
284
|
-
resumed_from: context.trackingResumedFrom,
|
|
285
|
-
passed: summary.passed,
|
|
286
|
-
failed: summary.failed,
|
|
287
|
-
skipped: summary.skipped,
|
|
288
|
-
items: 1,
|
|
289
|
-
linked_tests: entry.tests.length,
|
|
290
|
-
fail_on_skipped_triggered: context.options.failOnSkipped === true && summary.skipped > 0
|
|
291
|
-
? true
|
|
292
|
-
: undefined,
|
|
293
|
-
},
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
catch (error) {
|
|
297
|
-
return [
|
|
298
|
-
`test_result_tracking_failed:${entry.item.id}:${formatTrackingError(error)}`,
|
|
299
|
-
];
|
|
300
|
-
}
|
|
301
|
-
return [];
|
|
302
|
-
}
|
|
303
|
-
function buildTestAllItemRunContext(params) {
|
|
304
|
-
const trackingAttemptRaw = process.env.PM_BACKGROUND_TEST_RUN_ATTEMPT?.trim();
|
|
305
|
-
const trackingParsedAttempt = trackingAttemptRaw
|
|
306
|
-
? Number.parseInt(trackingAttemptRaw, 10)
|
|
307
|
-
: Number.NaN;
|
|
308
|
-
const trackingResumedFrom = process.env.PM_BACKGROUND_TEST_RUN_RESUMED_FROM?.trim();
|
|
309
|
-
return {
|
|
310
|
-
pmRoot: params.pmRoot,
|
|
311
|
-
settings: params.settings,
|
|
312
|
-
options: params.options,
|
|
313
|
-
defaultTimeoutSeconds: params.defaultTimeoutSeconds,
|
|
314
|
-
sourceRoots: {
|
|
315
|
-
projectPmRoot: params.pmRoot,
|
|
316
|
-
globalPmRoot: resolveGlobalPmRoot(process.cwd()),
|
|
317
|
-
},
|
|
318
|
-
seenTestKeys: new Set(),
|
|
319
|
-
effectiveTimeoutByKey: buildEffectiveTimeoutByKey(params.itemTests),
|
|
320
|
-
trackingEnabled: params.settings.testing.record_results_to_items === true,
|
|
321
|
-
trackingAuthor: resolveAuthor(undefined, params.settings.author_default),
|
|
322
|
-
trackingRunId: resolveTrackedRunId(),
|
|
323
|
-
trackingAttempt: Number.isFinite(trackingParsedAttempt) && trackingParsedAttempt >= 1
|
|
324
|
-
? trackingParsedAttempt
|
|
325
|
-
: undefined,
|
|
326
|
-
trackingResumedFrom: trackingResumedFrom && trackingResumedFrom.length > 0
|
|
327
|
-
? trackingResumedFrom
|
|
328
|
-
: undefined,
|
|
329
|
-
runStartedAt: params.runStartedAt,
|
|
330
|
-
};
|
|
331
|
-
}
|
|
332
|
-
function initializeTestAllAccumulation(options, linkedTests, filteredItems) {
|
|
333
|
-
const accumulation = {
|
|
334
|
-
results: [],
|
|
335
|
-
passed: 0,
|
|
336
|
-
failed: 0,
|
|
337
|
-
skipped: 0,
|
|
338
|
-
failureCategories: countFailureCategories([]),
|
|
339
|
-
trackingWarnings: [],
|
|
340
|
-
};
|
|
341
|
-
const failOnEmptyTestRunTriggered = options.failOnEmptyTestRun === true && linkedTests === 0;
|
|
342
|
-
if (failOnEmptyTestRunTriggered) {
|
|
343
|
-
accumulation.failed += 1;
|
|
344
|
-
accumulation.failureCategories.empty_run += 1;
|
|
345
|
-
accumulation.trackingWarnings.push(`empty_linked_test_selection:items=${filteredItems.length};linked_tests=0;fail_on_empty_test_run=true`);
|
|
346
|
-
}
|
|
347
|
-
return { accumulation, failOnEmptyTestRunTriggered };
|
|
348
|
-
}
|
|
349
|
-
async function runTestAllItems(itemTests, context, accumulation) {
|
|
350
|
-
for (const [itemIndex, entry] of itemTests.entries()) {
|
|
351
|
-
emitTestAllProgress(context.options, `item ${itemIndex + 1}/${itemTests.length} start id=${entry.item.id} linked_tests=${entry.tests.length}`);
|
|
352
|
-
const execution = await runTestAllItem(entry, context);
|
|
353
|
-
mergeFailureCategoryCounts(accumulation.failureCategories, execution.failureCategories);
|
|
354
|
-
accumulation.passed += execution.passed;
|
|
355
|
-
accumulation.failed += execution.failed;
|
|
356
|
-
accumulation.skipped += execution.skipped;
|
|
357
|
-
accumulation.trackingWarnings.push(...execution.trackingWarnings);
|
|
358
|
-
accumulation.results.push(execution.result);
|
|
359
|
-
emitTestAllProgress(context.options, `item ${itemIndex + 1}/${itemTests.length} end id=${entry.item.id}` +
|
|
360
|
-
` status=${execution.failed === 0 ? "passed" : "failed"}` +
|
|
361
|
-
` passed=${execution.passed} failed=${execution.failed} skipped=${execution.skipped}`);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
function appendContextPreflightWarning(options, accumulation) {
|
|
365
|
-
if (options.checkContext !== true) {
|
|
366
|
-
return;
|
|
367
|
-
}
|
|
368
|
-
const allRunResults = accumulation.results.flatMap((entry) => entry.run_results);
|
|
369
|
-
const preflight = summarizeContextPreflight(allRunResults);
|
|
370
|
-
accumulation.trackingWarnings.push(`context_preflight:checked_pm_commands=${preflight.checked_pm_commands};` +
|
|
371
|
-
`tracker_read_commands=${preflight.tracker_read_commands};` +
|
|
372
|
-
`mismatches=${preflight.mismatches};` +
|
|
373
|
-
`auto_remediated=${preflight.auto_remediated}`);
|
|
374
|
-
}
|
|
375
|
-
function buildTestAllResult(params) {
|
|
376
|
-
return {
|
|
377
|
-
ok: params.ok,
|
|
378
|
-
totals: {
|
|
379
|
-
items: params.filteredItems.length,
|
|
380
|
-
linked_tests: params.linkedTests,
|
|
381
|
-
passed: params.accumulation.passed,
|
|
382
|
-
failed: params.accumulation.failed,
|
|
383
|
-
skipped: params.accumulation.skipped,
|
|
384
|
-
failure_categories: params.accumulation.failureCategories,
|
|
385
|
-
},
|
|
386
|
-
failed: params.accumulation.failed,
|
|
387
|
-
passed: params.accumulation.passed,
|
|
388
|
-
skipped: params.accumulation.skipped,
|
|
389
|
-
fail_on_skipped_triggered: params.failOnSkippedTriggered ? true : undefined,
|
|
390
|
-
fail_on_empty_test_run_triggered: params.failOnEmptyTestRunTriggered
|
|
391
|
-
? true
|
|
392
|
-
: undefined,
|
|
393
|
-
warnings: params.accumulation.trackingWarnings.length > 0
|
|
394
|
-
? params.accumulation.trackingWarnings
|
|
395
|
-
: undefined,
|
|
396
|
-
results: params.accumulation.results,
|
|
397
|
-
};
|
|
398
|
-
}
|
|
399
|
-
/** Implements run test all for the public runtime surface of this module. */
|
|
400
|
-
export async function runTestAll(options, global) {
|
|
401
|
-
const pmRoot = resolvePmRoot(process.cwd(), global.path);
|
|
402
|
-
if (!(await pathExists(getSettingsPath(pmRoot)))) {
|
|
403
|
-
throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
|
|
404
|
-
}
|
|
405
|
-
const settings = await readSettings(pmRoot);
|
|
406
|
-
const { filteredItems, statusFilter, limitFilter, offsetFilter } = await selectTestAllItems({ pmRoot, settings, options });
|
|
407
|
-
const defaultTimeoutSeconds = parseTimeout(options.timeout);
|
|
408
|
-
const runStartedAt = nowIso();
|
|
409
|
-
const { itemTests, linkedTests } = await collectTestAllItemTests(filteredItems, global, pmRoot);
|
|
410
|
-
emitTestAllProgress(options, `selection items=${filteredItems.length} linked_tests=${linkedTests}` +
|
|
411
|
-
`${statusFilter ? ` status=${statusFilter}` : ""}` +
|
|
412
|
-
`${limitFilter === undefined ? "" : ` limit=${limitFilter}`}` +
|
|
413
|
-
`${offsetFilter > 0 ? ` offset=${offsetFilter}` : ""}`);
|
|
414
|
-
const { accumulation, failOnEmptyTestRunTriggered } = initializeTestAllAccumulation(options, linkedTests, filteredItems);
|
|
415
|
-
const itemRunContext = buildTestAllItemRunContext({
|
|
416
|
-
pmRoot,
|
|
417
|
-
settings,
|
|
418
|
-
options,
|
|
419
|
-
itemTests,
|
|
420
|
-
defaultTimeoutSeconds,
|
|
421
|
-
runStartedAt,
|
|
422
|
-
});
|
|
423
|
-
await runTestAllItems(itemTests, itemRunContext, accumulation);
|
|
424
|
-
const failOnSkippedTriggered = options.failOnSkipped === true && accumulation.skipped > 0;
|
|
425
|
-
appendContextPreflightWarning(options, accumulation);
|
|
426
|
-
const ok = accumulation.failed === 0 &&
|
|
427
|
-
failOnSkippedTriggered !== true &&
|
|
428
|
-
failOnEmptyTestRunTriggered !== true;
|
|
429
|
-
emitTestAllProgress(options, `end status=${ok ? "passed" : "failed"} items=${filteredItems.length} linked_tests=${linkedTests}` +
|
|
430
|
-
` passed=${accumulation.passed} failed=${accumulation.failed} skipped=${accumulation.skipped}`);
|
|
431
|
-
return buildTestAllResult({
|
|
432
|
-
ok,
|
|
433
|
-
filteredItems,
|
|
434
|
-
linkedTests,
|
|
435
|
-
accumulation,
|
|
436
|
-
failOnSkippedTriggered,
|
|
437
|
-
failOnEmptyTestRunTriggered,
|
|
438
|
-
});
|
|
439
|
-
}
|
|
440
|
-
/** Public contract for test only test all, shared by SDK and presentation-layer consumers. */
|
|
441
|
-
export const _testOnlyTestAll = {
|
|
442
|
-
formatTrackingError,
|
|
443
|
-
};
|
|
7
|
+
!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]="de410bd9-d77f-5438-af06-3dfd3bfa0426")}catch(e){}}();
|
|
8
|
+
export * from "../../sdk/test/batch.js";
|
|
444
9
|
//# sourceMappingURL=test-all.js.map
|
|
445
|
-
//# debugId=
|
|
10
|
+
//# debugId=de410bd9-d77f-5438-af06-3dfd3bfa0426
|