@unbrained/pm-cli 2026.7.15 → 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.
Files changed (508) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +23 -2
  3. package/CONTRIBUTING.md +2 -2
  4. package/dist/cli/bootstrap-args.d.ts +2 -115
  5. package/dist/cli/bootstrap-args.js +4 -831
  6. package/dist/cli/bootstrap-args.js.map +1 -1
  7. package/dist/cli/commands/eval.d.ts +4 -64
  8. package/dist/cli/commands/eval.js +4 -153
  9. package/dist/cli/commands/eval.js.map +1 -1
  10. package/dist/cli/commands/linked-test-entry.d.ts +6 -6
  11. package/dist/cli/commands/linked-test-entry.js +4 -65
  12. package/dist/cli/commands/linked-test-entry.js.map +1 -1
  13. package/dist/cli/commands/linked-test-parsers.d.ts +3 -45
  14. package/dist/cli/commands/linked-test-parsers.js +4 -516
  15. package/dist/cli/commands/linked-test-parsers.js.map +1 -1
  16. package/dist/cli/commands/list.d.ts +3 -210
  17. package/dist/cli/commands/list.js +4 -1068
  18. package/dist/cli/commands/list.js.map +1 -1
  19. package/dist/cli/commands/search.d.ts +3 -464
  20. package/dist/cli/commands/search.js +4 -2236
  21. package/dist/cli/commands/search.js.map +1 -1
  22. package/dist/cli/commands/stats.d.ts +6 -66
  23. package/dist/cli/commands/stats.js +4 -157
  24. package/dist/cli/commands/stats.js.map +1 -1
  25. package/dist/cli/commands/telemetry.d.ts +6 -14
  26. package/dist/cli/commands/telemetry.js +4 -349
  27. package/dist/cli/commands/telemetry.js.map +1 -1
  28. package/dist/cli/commands/test-all.d.ts +6 -95
  29. package/dist/cli/commands/test-all.js +4 -439
  30. package/dist/cli/commands/test-all.js.map +1 -1
  31. package/dist/cli/commands/test-runs.d.ts +6 -92
  32. package/dist/cli/commands/test-runs.js +4 -189
  33. package/dist/cli/commands/test-runs.js.map +1 -1
  34. package/dist/cli/commands/test.d.ts +6 -244
  35. package/dist/cli/commands/test.js +4 -1780
  36. package/dist/cli/commands/test.js.map +1 -1
  37. package/dist/cli/commands/update-many.d.ts +15 -29
  38. package/dist/cli/commands/update-many.js +355 -259
  39. package/dist/cli/commands/update-many.js.map +1 -1
  40. package/dist/cli/main.js +140 -133
  41. package/dist/cli/main.js.map +1 -1
  42. package/dist/cli/search-refresh.js +4 -9
  43. package/dist/cli/search-refresh.js.map +1 -1
  44. package/dist/cli/shared-parsers.d.ts +6 -9
  45. package/dist/cli/shared-parsers.js +4 -37
  46. package/dist/cli/shared-parsers.js.map +1 -1
  47. package/dist/cli/telemetry-flush.js +4 -4
  48. package/dist/cli/telemetry-flush.js.map +1 -1
  49. package/dist/cli-bundle/bundle-manifest.json +341 -341
  50. package/dist/cli-bundle/chunks/{append-OJQFUQ4T.js → append-5YF3TO7I.js} +5 -5
  51. package/dist/cli-bundle/chunks/append-JHO5K6RP.js +11 -0
  52. package/dist/cli-bundle/chunks/{chunk-WT3ZEOGH.js → chunk-23TCGBRK.js} +16 -7
  53. package/dist/cli-bundle/chunks/{chunk-WT3ZEOGH.js.map → chunk-23TCGBRK.js.map} +1 -1
  54. package/dist/cli-bundle/chunks/{chunk-BCOFWYW4.js → chunk-2BX74BAS.js} +3 -3
  55. package/dist/cli-bundle/chunks/{chunk-APRVSW2O.js → chunk-2CXL335K.js} +3 -3
  56. package/dist/cli-bundle/chunks/{chunk-KG44YSKD.js → chunk-2FUOXSRN.js} +4 -4
  57. package/dist/cli-bundle/chunks/{chunk-HDH3JUGG.js → chunk-2IPNL3DR.js} +3 -3
  58. package/dist/cli-bundle/chunks/{chunk-J6364LFM.js → chunk-2MPMKJF2.js} +9 -18
  59. package/dist/cli-bundle/chunks/{chunk-J6364LFM.js.map → chunk-2MPMKJF2.js.map} +1 -1
  60. package/dist/cli-bundle/chunks/{chunk-GM5QHQU6.js → chunk-2XOSFSTH.js} +5 -5
  61. package/dist/cli-bundle/chunks/{chunk-K3WII2ME.js → chunk-37DRDP2B.js} +5 -5
  62. package/dist/cli-bundle/chunks/{chunk-2WSE6PO2.js → chunk-37V5MXAU.js} +4 -4
  63. package/dist/cli-bundle/chunks/{chunk-UWQHLMEB.js → chunk-3D4YVTNG.js} +8 -8
  64. package/dist/cli-bundle/chunks/{chunk-PMOSXADO.js → chunk-47HXN6RX.js} +3 -3
  65. package/dist/cli-bundle/chunks/{chunk-6CFNAVTF.js → chunk-5HGZKQUL.js} +4 -4
  66. package/dist/cli-bundle/chunks/{chunk-2IFFUZLC.js → chunk-5UKQLQM2.js} +2 -2
  67. package/dist/cli-bundle/chunks/{chunk-DM4H7FP4.js → chunk-633PKXLT.js} +3 -3
  68. package/dist/cli-bundle/chunks/{chunk-XSJUSQAE.js → chunk-646MQXFW.js} +2 -2
  69. package/dist/cli-bundle/chunks/{chunk-ZI6VQWQ7.js → chunk-66MKH7SZ.js} +4 -4
  70. package/dist/cli-bundle/chunks/{chunk-S6MQESFR.js → chunk-67RO3H4N.js} +4 -4
  71. package/dist/cli-bundle/chunks/{chunk-34L5OT3Y.js → chunk-6DYOZS6C.js} +2 -2
  72. package/dist/cli-bundle/chunks/{chunk-RRM5JYJC.js → chunk-6O44IN44.js} +2 -2
  73. package/dist/cli-bundle/chunks/{chunk-ONG5V5CI.js → chunk-6XAZB6SE.js} +97 -69
  74. package/dist/cli-bundle/chunks/chunk-6XAZB6SE.js.map +1 -0
  75. package/dist/cli-bundle/chunks/{chunk-PENXZX3U.js → chunk-74FKFFXO.js} +2 -2
  76. package/dist/cli-bundle/chunks/{chunk-LPYWLWDS.js → chunk-7CTQ7WW5.js} +37 -37
  77. package/dist/cli-bundle/chunks/chunk-7CTQ7WW5.js.map +1 -0
  78. package/dist/cli-bundle/chunks/{chunk-HO4KXD6I.js → chunk-7H5NNCJ5.js} +4 -4
  79. package/dist/cli-bundle/chunks/{chunk-XXXF6PAQ.js → chunk-7LTCLTRG.js} +69 -61
  80. package/dist/cli-bundle/chunks/chunk-7LTCLTRG.js.map +7 -0
  81. package/dist/cli-bundle/chunks/{chunk-TQSZFPIS.js → chunk-AFGKSHAM.js} +4 -4
  82. package/dist/cli-bundle/chunks/{chunk-JXQUXVMI.js → chunk-AFSV5HBB.js} +77 -7
  83. package/dist/cli-bundle/chunks/{chunk-JXQUXVMI.js.map → chunk-AFSV5HBB.js.map} +1 -1
  84. package/dist/cli-bundle/chunks/{chunk-6N2VXVTQ.js → chunk-ARGDWQ4J.js} +2 -2
  85. package/dist/cli-bundle/chunks/{chunk-3U7ZR6M4.js → chunk-B57RJHBZ.js} +4 -4
  86. package/dist/cli-bundle/chunks/{chunk-7B67ZL4N.js → chunk-B6SH2YNN.js} +75 -5
  87. package/dist/cli-bundle/chunks/{chunk-7B67ZL4N.js.map → chunk-B6SH2YNN.js.map} +1 -1
  88. package/dist/cli-bundle/chunks/{chunk-YCQET3OT.js → chunk-BAP7G3N2.js} +2 -2
  89. package/dist/cli-bundle/chunks/{chunk-QKXHFPYM.js → chunk-BIRYX32V.js} +3 -3
  90. package/dist/cli-bundle/chunks/{chunk-RMLWNPH2.js → chunk-BVLOMU6O.js} +2 -2
  91. package/dist/cli-bundle/chunks/{chunk-YBLZ2VE7.js → chunk-CFSUNEL7.js} +320 -239
  92. package/dist/cli-bundle/chunks/chunk-CFSUNEL7.js.map +7 -0
  93. package/dist/cli-bundle/chunks/{chunk-2VPAVL7O.js → chunk-CKX4WOPC.js} +2 -2
  94. package/dist/cli-bundle/chunks/{chunk-TKOVBP6C.js → chunk-D52ZN3BF.js} +2 -2
  95. package/dist/cli-bundle/chunks/{chunk-KPMKHGEA.js → chunk-D53RTYVI.js} +4 -4
  96. package/dist/cli-bundle/chunks/{chunk-ODALILG3.js → chunk-D5XHO4Q7.js} +2 -2
  97. package/dist/cli-bundle/chunks/{chunk-E2OJMKML.js → chunk-DCC2AQBD.js} +18 -9
  98. package/dist/cli-bundle/chunks/{chunk-E2OJMKML.js.map → chunk-DCC2AQBD.js.map} +1 -1
  99. package/dist/cli-bundle/chunks/{chunk-YAQEBNY7.js → chunk-DDFGYUCQ.js} +4 -4
  100. package/dist/cli-bundle/chunks/{chunk-EAB64KLB.js → chunk-DG2EQRIH.js} +4 -4
  101. package/dist/cli-bundle/chunks/{chunk-IG3SWA4A.js → chunk-EHJFUOXL.js} +3 -3
  102. package/dist/cli-bundle/chunks/{chunk-ONREO4ST.js → chunk-EY7ZE3TG.js} +3 -3
  103. package/dist/cli-bundle/chunks/{chunk-EJEXHTY5.js → chunk-FHOBCGQO.js} +2 -2
  104. package/dist/cli-bundle/chunks/{chunk-H3EIEWGR.js → chunk-FL4D53ND.js} +2 -2
  105. package/dist/cli-bundle/chunks/{chunk-WUJQK4YV.js → chunk-FVNWHUME.js} +4 -4
  106. package/dist/cli-bundle/chunks/{chunk-INU6DKT5.js → chunk-FXFCFL73.js} +5 -5
  107. package/dist/cli-bundle/chunks/{chunk-QEHQ2GVG.js → chunk-FY4RLHSC.js} +2 -2
  108. package/dist/cli-bundle/chunks/{chunk-EACOH7AU.js → chunk-FZGM3PNA.js} +8 -8
  109. package/dist/cli-bundle/chunks/{chunk-FNSPG7MU.js → chunk-G6KM4YKY.js} +7 -7
  110. package/dist/cli-bundle/chunks/{chunk-AHVTB5I5.js → chunk-G6MYGULG.js} +4 -4
  111. package/dist/cli-bundle/chunks/{chunk-TSMHDIW4.js → chunk-GLZKZON6.js} +2 -2
  112. package/dist/cli-bundle/chunks/{chunk-2JKGO6QX.js → chunk-H5IOT54C.js} +4 -4
  113. package/dist/cli-bundle/chunks/{chunk-5ZSLZLDN.js → chunk-HF63SBLC.js} +585 -456
  114. package/dist/cli-bundle/chunks/chunk-HF63SBLC.js.map +1 -0
  115. package/dist/cli-bundle/chunks/{chunk-SELVXEZK.js → chunk-HO4DLBNK.js} +2 -2
  116. package/dist/cli-bundle/chunks/{chunk-3CLU2XZO.js → chunk-HSYV4ZYT.js} +4 -4
  117. package/dist/cli-bundle/chunks/{chunk-EH2OPHBI.js → chunk-HTXXXF45.js} +23 -19
  118. package/dist/cli-bundle/chunks/chunk-HTXXXF45.js.map +1 -0
  119. package/dist/cli-bundle/chunks/{chunk-CRVF2JDM.js → chunk-HXVHBERL.js} +8 -8
  120. package/dist/cli-bundle/chunks/{chunk-NU3IMIEA.js → chunk-I7DIDUSP.js} +2 -2
  121. package/dist/cli-bundle/chunks/{chunk-2NCIPMQP.js → chunk-I7GY4X6Y.js} +2 -2
  122. package/dist/cli-bundle/chunks/{chunk-JYFOV7FC.js → chunk-IE5KRAKN.js} +4 -4
  123. package/dist/cli-bundle/chunks/{chunk-UY2ACEMF.js → chunk-ILVOOAT4.js} +5 -5
  124. package/dist/cli-bundle/chunks/{chunk-GOSLKLFE.js → chunk-KH6QAHME.js} +3 -3
  125. package/dist/cli-bundle/chunks/{chunk-J6EY5V4N.js → chunk-KOEZCHRF.js} +9 -9
  126. package/dist/cli-bundle/chunks/{chunk-QKECXBBG.js → chunk-KX62NMZC.js} +3 -3
  127. package/dist/cli-bundle/chunks/{chunk-QKECXBBG.js.map → chunk-KX62NMZC.js.map} +1 -1
  128. package/dist/cli-bundle/chunks/{chunk-WQPUU7XD.js → chunk-L337QKWJ.js} +5 -5
  129. package/dist/cli-bundle/chunks/{chunk-LSG2U345.js → chunk-L6FVNR7X.js} +5 -5
  130. package/dist/cli-bundle/chunks/{chunk-ILX33QXL.js → chunk-LLODAQMP.js} +706 -532
  131. package/dist/cli-bundle/chunks/chunk-LLODAQMP.js.map +7 -0
  132. package/dist/cli-bundle/chunks/{chunk-FMBNM2EN.js → chunk-LSOWTLEM.js} +2 -2
  133. package/dist/cli-bundle/chunks/{chunk-4223PVZT.js → chunk-M7MVOKVV.js} +3 -3
  134. package/dist/cli-bundle/chunks/chunk-MNV226E4.js +834 -0
  135. package/dist/cli-bundle/chunks/chunk-MNV226E4.js.map +1 -0
  136. package/dist/cli-bundle/chunks/{chunk-UMOPHQSU.js → chunk-MR4SHYR4.js} +41 -19
  137. package/dist/cli-bundle/chunks/chunk-MR4SHYR4.js.map +7 -0
  138. package/dist/cli-bundle/chunks/{chunk-BKVG6XOA.js → chunk-MSGETE6I.js} +4 -4
  139. package/dist/cli-bundle/chunks/{chunk-3WM75PWC.js → chunk-N33FD2UI.js} +3 -3
  140. package/dist/cli-bundle/chunks/{chunk-UFXU44HV.js → chunk-N7I2DGLP.js} +4 -4
  141. package/dist/cli-bundle/chunks/{chunk-3S5QVM5H.js → chunk-NCAFUBJX.js} +13 -13
  142. package/dist/cli-bundle/chunks/chunk-NCAFUBJX.js.map +1 -0
  143. package/dist/cli-bundle/chunks/{chunk-6S3YSUYG.js → chunk-NNANAWFH.js} +3 -3
  144. package/dist/cli-bundle/chunks/{chunk-IJIICKVW.js → chunk-NTRQLE2R.js} +2 -2
  145. package/dist/cli-bundle/chunks/{chunk-SDQLJWBO.js → chunk-NVZ6NVHJ.js} +4 -4
  146. package/dist/cli-bundle/chunks/{chunk-H2Z3FYXQ.js → chunk-OWP6QFBV.js} +4 -4
  147. package/dist/cli-bundle/chunks/{chunk-Q7A43DS4.js → chunk-P22HGFFI.js} +2 -2
  148. package/dist/cli-bundle/chunks/{chunk-NLDFBC6J.js → chunk-P56LKFQX.js} +2 -2
  149. package/dist/cli-bundle/chunks/{chunk-NVPZIJVR.js → chunk-PT7MCCGD.js} +2 -2
  150. package/dist/cli-bundle/chunks/{chunk-P74IZQ7A.js → chunk-QKVVV6QO.js} +7 -7
  151. package/dist/cli-bundle/chunks/{chunk-5JLUII3O.js → chunk-QNUAZYGW.js} +321 -240
  152. package/dist/cli-bundle/chunks/chunk-QNUAZYGW.js.map +1 -0
  153. package/dist/cli-bundle/chunks/{chunk-QIPLHNP7.js → chunk-QWBKN3QC.js} +5 -5
  154. package/dist/cli-bundle/chunks/{chunk-7PIWCHTW.js → chunk-R5XTTZSJ.js} +5 -5
  155. package/dist/cli-bundle/chunks/{chunk-JOUQZENX.js → chunk-RC4UOUXA.js} +3 -3
  156. package/dist/cli-bundle/chunks/{chunk-BEP7WJA2.js → chunk-RGMWJLXF.js} +4 -4
  157. package/dist/cli-bundle/chunks/{chunk-NP22ERDF.js → chunk-RTBX3C4C.js} +3 -3
  158. package/dist/cli-bundle/chunks/{chunk-HYB5AZ63.js → chunk-S46R2M3W.js} +117 -71
  159. package/dist/cli-bundle/chunks/chunk-S46R2M3W.js.map +7 -0
  160. package/dist/cli-bundle/chunks/{chunk-H5APFTHZ.js → chunk-S6FF7VW6.js} +18 -18
  161. package/dist/cli-bundle/chunks/chunk-S6FF7VW6.js.map +7 -0
  162. package/dist/cli-bundle/chunks/{chunk-UXONS674.js → chunk-SIJV365F.js} +54 -55
  163. package/dist/cli-bundle/chunks/chunk-SIJV365F.js.map +1 -0
  164. package/dist/cli-bundle/chunks/{chunk-7Z4LKRS4.js → chunk-SPFZV2GR.js} +9 -9
  165. package/dist/cli-bundle/chunks/{chunk-ULTHRDBP.js → chunk-TM5CIO3F.js} +3 -3
  166. package/dist/cli-bundle/chunks/{chunk-4XQ3BDV4.js → chunk-V3VBXQQV.js} +36 -36
  167. package/dist/cli-bundle/chunks/chunk-V3VBXQQV.js.map +7 -0
  168. package/dist/cli-bundle/chunks/{chunk-YAROI3PD.js → chunk-V7MP6YTN.js} +7 -7
  169. package/dist/cli-bundle/chunks/{chunk-OW4JWD5M.js → chunk-VAHZIPWS.js} +4 -4
  170. package/dist/cli-bundle/chunks/{chunk-DYH63FX7.js → chunk-VE6ZSTQW.js} +4 -4
  171. package/dist/cli-bundle/chunks/{chunk-3AUGG2DP.js → chunk-W5E2UUSH.js} +3 -3
  172. package/dist/cli-bundle/chunks/{chunk-BSEQUTQP.js → chunk-WACRQ26A.js} +2 -2
  173. package/dist/cli-bundle/chunks/{chunk-BSEQUTQP.js.map → chunk-WACRQ26A.js.map} +1 -1
  174. package/dist/cli-bundle/chunks/{chunk-UOHFKBUV.js → chunk-WL3SS45P.js} +3 -3
  175. package/dist/cli-bundle/chunks/{chunk-QKJGPFAF.js → chunk-WU3KAN6A.js} +3 -3
  176. package/dist/cli-bundle/chunks/{chunk-IA5FKNII.js → chunk-X2MGQMZO.js} +2 -2
  177. package/dist/cli-bundle/chunks/{chunk-TD3LVC7D.js → chunk-X5YCTFKT.js} +3 -3
  178. package/dist/cli-bundle/chunks/{chunk-B7PE22W6.js → chunk-XC2HEEOV.js} +4 -4
  179. package/dist/cli-bundle/chunks/{chunk-J5AOEGDC.js → chunk-XNPMDSQQ.js} +8 -8
  180. package/dist/cli-bundle/chunks/{chunk-K2X6U4UA.js → chunk-XXLXJL7V.js} +4 -4
  181. package/dist/cli-bundle/chunks/chunk-XYJK6GIQ.js +851 -0
  182. package/dist/cli-bundle/chunks/chunk-XYJK6GIQ.js.map +7 -0
  183. package/dist/cli-bundle/chunks/{chunk-RLCHOOHC.js → chunk-YJSURTBB.js} +2 -2
  184. package/dist/cli-bundle/chunks/{chunk-PGY23YTC.js → chunk-YKFHF37B.js} +3 -3
  185. package/dist/cli-bundle/chunks/{chunk-JFTKLTEF.js → chunk-YQCWK2MB.js} +4 -4
  186. package/dist/cli-bundle/chunks/{chunk-EYLCSJAI.js → chunk-YQEZWI3R.js} +2 -2
  187. package/dist/cli-bundle/chunks/close-BEP7MHF3.js +12 -0
  188. package/dist/cli-bundle/chunks/{close-CWODTPKG.js → close-Y6QFUJQN.js} +5 -5
  189. package/dist/cli-bundle/chunks/{close-many-CQFUY7MR.js → close-many-JJFW7KTT.js} +14 -14
  190. package/dist/cli-bundle/chunks/close-many-QJ6FKJUE.js +23 -0
  191. package/dist/cli-bundle/chunks/comments-2AOZQ5D2.js +13 -0
  192. package/dist/cli-bundle/chunks/{comments-WGLHR7LB.js → comments-TMHMALA5.js} +7 -7
  193. package/dist/cli-bundle/chunks/{copy-LXVDXH7B.js → copy-FWQA5OU4.js} +4 -4
  194. package/dist/cli-bundle/chunks/copy-N3LCQBMC.js +9 -0
  195. package/dist/cli-bundle/chunks/{create-LBVCYMEG.js → create-AQ5SIGZC.js} +9 -9
  196. package/dist/cli-bundle/chunks/{create-J5U6ND4K.js → create-KOGQ3JKD.js} +9 -9
  197. package/dist/cli-bundle/chunks/delete-6G3MBZ6S.js +10 -0
  198. package/dist/cli-bundle/chunks/{delete-PMJBNY5G.js → delete-YYYFOSEA.js} +4 -4
  199. package/dist/cli-bundle/chunks/{deps-OA26IS25.js → deps-5NC4IZH7.js} +5 -5
  200. package/dist/cli-bundle/chunks/{deps-JZ7TMVCB.js → deps-EVTOQMKW.js} +5 -5
  201. package/dist/cli-bundle/chunks/{docs-FEWB2DQB.js → docs-53NUGMIQ.js} +6 -6
  202. package/dist/cli-bundle/chunks/docs-OWRGDMNY.js +14 -0
  203. package/dist/cli-bundle/chunks/{files-EFIWKFTM.js → files-3PXGXYDB.js} +6 -6
  204. package/dist/cli-bundle/chunks/{files-6YFBJRBG.js → files-EGLKHD7O.js} +6 -6
  205. package/dist/cli-bundle/chunks/focus-KZLIA6WS.js +10 -0
  206. package/dist/cli-bundle/chunks/{focus-4QJR7FOQ.js → focus-SRPASFTN.js} +5 -5
  207. package/dist/cli-bundle/chunks/{history-compact-CKRPDTJN.js → history-compact-G4DULDCX.js} +6 -6
  208. package/dist/cli-bundle/chunks/history-compact-HHIUOMZ7.js +16 -0
  209. package/dist/cli-bundle/chunks/{history-redact-BB3TGDAE.js → history-redact-IUSJ6X3E.js} +4 -4
  210. package/dist/cli-bundle/chunks/{history-redact-D225BHOZ.js → history-redact-THHGRQXV.js} +4 -4
  211. package/dist/cli-bundle/chunks/history-repair-KG7SWXI6.js +16 -0
  212. package/dist/cli-bundle/chunks/{history-repair-RQXKQHL4.js → history-repair-LUQWRS7X.js} +6 -6
  213. package/dist/cli-bundle/chunks/{learnings-JLNLCOL5.js → learnings-2MRNBFJF.js} +7 -7
  214. package/dist/cli-bundle/chunks/learnings-ZVHSALJY.js +13 -0
  215. package/dist/cli-bundle/chunks/{notes-GB47XXQQ.js → notes-73JWKWUD.js} +7 -7
  216. package/dist/cli-bundle/chunks/notes-BAKUL5DJ.js +13 -0
  217. package/dist/cli-bundle/chunks/{plan-VDCJ2PCN.js → plan-AZPMCG37.js} +10 -10
  218. package/dist/cli-bundle/chunks/plan-LEAGLPGP.js +24 -0
  219. package/dist/cli-bundle/chunks/{profile-IVXQEL3D.js → profile-AGUKS52S.js} +9 -9
  220. package/dist/cli-bundle/chunks/{profile-FAU7NZML.js → profile-U2B6Y7GE.js} +9 -9
  221. package/dist/cli-bundle/chunks/{register-list-query-UL4UKBBN.js → register-list-query-A5KRJ5J2.js} +16 -16
  222. package/dist/cli-bundle/chunks/{register-list-query-DKA3EH5D.js → register-list-query-NEYP3TXO.js} +16 -16
  223. package/dist/cli-bundle/chunks/{register-mutation-RBBJ52DK.js → register-mutation-6LOPBAHC.js} +29 -29
  224. package/dist/cli-bundle/chunks/{register-mutation-ARFHRW55.js → register-mutation-GCZOALNJ.js} +29 -29
  225. package/dist/cli-bundle/chunks/{register-operations-ZIBBRSED.js → register-operations-6ZZIF27A.js} +35 -35
  226. package/dist/cli-bundle/chunks/{register-operations-ZUJ5JWPE.js → register-operations-REDIAEGI.js} +35 -35
  227. package/dist/cli-bundle/chunks/{register-setup-TDCGWIOS.js → register-setup-BHPMN5SK.js} +15 -15
  228. package/dist/cli-bundle/chunks/{register-setup-BCVLFEYS.js → register-setup-J3JS2ZVT.js} +15 -15
  229. package/dist/cli-bundle/chunks/{restore-25DLT2Q2.js → restore-E3PRGDN3.js} +6 -6
  230. package/dist/cli-bundle/chunks/restore-KIUYTAEJ.js +14 -0
  231. package/dist/cli-bundle/chunks/{schema-FNU3WE4O.js → schema-5JNFQFUW.js} +6 -6
  232. package/dist/cli-bundle/chunks/{schema-NBCM3RAD.js → schema-TMIW4XZC.js} +6 -6
  233. package/dist/cli-bundle/chunks/update-PQQHLYCC.js +21 -0
  234. package/dist/cli-bundle/chunks/{update-XHSIAIXE.js → update-SA6AG23P.js} +12 -12
  235. package/dist/cli-bundle/chunks/update-many-RQVTFJPD.js +36 -0
  236. package/dist/cli-bundle/chunks/update-many-TV3L3KBX.js +32 -0
  237. package/dist/cli-bundle/main.js +153 -855
  238. package/dist/cli-bundle/main.js.map +4 -4
  239. package/dist/cli-bundle/sdk-runtime.js +54 -54
  240. package/dist/cli-bundle/sdk-testing.js +6 -6
  241. package/dist/cli-bundle/sdk.js +195 -59
  242. package/dist/cli-bundle/sdk.js.map +3 -3
  243. package/dist/core/extensions/item-fields.js +2 -2
  244. package/dist/core/extensions/item-fields.js.map +1 -1
  245. package/dist/sdk/cli-bootstrap.d.ts +122 -0
  246. package/dist/sdk/cli-bootstrap.js +879 -0
  247. package/dist/sdk/cli-bootstrap.js.map +1 -0
  248. package/dist/sdk/eval.d.ts +66 -0
  249. package/dist/sdk/eval.js +186 -0
  250. package/dist/sdk/eval.js.map +1 -0
  251. package/dist/sdk/index.d.ts +16 -4
  252. package/dist/sdk/index.js +18 -6
  253. package/dist/sdk/index.js.map +1 -1
  254. package/dist/{cli/commands → sdk/query}/item-filter-options.d.ts +1 -1
  255. package/dist/{cli/commands → sdk/query}/item-filter-options.js +3 -3
  256. package/dist/sdk/query/item-filter-options.js.map +1 -0
  257. package/dist/sdk/query/list.d.ts +254 -0
  258. package/dist/sdk/query/list.js +1073 -0
  259. package/dist/sdk/query/list.js.map +1 -0
  260. package/dist/sdk/query/parsers.d.ts +9 -0
  261. package/dist/sdk/query/parsers.js +45 -0
  262. package/dist/sdk/query/parsers.js.map +1 -0
  263. package/dist/{cli/commands → sdk/query}/search-pagination.js +4 -4
  264. package/dist/sdk/query/search-pagination.js.map +1 -0
  265. package/dist/{cli/commands → sdk/query}/search-rendering.js +3 -3
  266. package/dist/sdk/query/search-rendering.js.map +1 -0
  267. package/dist/sdk/query/search.d.ts +469 -0
  268. package/dist/sdk/query/search.js +2247 -0
  269. package/dist/sdk/query/search.js.map +1 -0
  270. package/dist/sdk/runtime.d.ts +7 -7
  271. package/dist/sdk/runtime.js +13 -7
  272. package/dist/sdk/runtime.js.map +1 -1
  273. package/dist/sdk/search-refresh-worker.d.ts +2 -0
  274. package/dist/sdk/search-refresh-worker.js +19 -0
  275. package/dist/sdk/search-refresh-worker.js.map +1 -0
  276. package/dist/sdk/stats.d.ts +66 -0
  277. package/dist/sdk/stats.js +151 -0
  278. package/dist/sdk/stats.js.map +1 -0
  279. package/dist/sdk/telemetry-flush.d.ts +2 -0
  280. package/dist/sdk/telemetry-flush.js +14 -0
  281. package/dist/sdk/telemetry-flush.js.map +1 -0
  282. package/dist/sdk/telemetry.d.ts +14 -0
  283. package/dist/sdk/telemetry.js +398 -0
  284. package/dist/sdk/telemetry.js.map +1 -0
  285. package/dist/sdk/test/batch.d.ts +94 -0
  286. package/dist/sdk/test/batch.js +492 -0
  287. package/dist/sdk/test/batch.js.map +1 -0
  288. package/dist/sdk/test/entry.d.ts +6 -0
  289. package/dist/sdk/test/entry.js +74 -0
  290. package/dist/sdk/test/entry.js.map +1 -0
  291. package/dist/sdk/test/execution.d.ts +282 -0
  292. package/dist/sdk/test/execution.js +1817 -0
  293. package/dist/sdk/test/execution.js.map +1 -0
  294. package/dist/sdk/test/parsers.d.ts +48 -0
  295. package/dist/sdk/test/parsers.js +522 -0
  296. package/dist/sdk/test/parsers.js.map +1 -0
  297. package/dist/sdk/test/runs.d.ts +92 -0
  298. package/dist/sdk/test/runs.js +195 -0
  299. package/dist/sdk/test/runs.js.map +1 -0
  300. package/docs/SDK.md +122 -0
  301. package/docs/SDK_PRIMITIVE_INVENTORY.md +5 -3
  302. package/docs/examples/sdk-custom-tool/README.md +27 -0
  303. package/docs/examples/sdk-custom-tool/package.json +13 -0
  304. package/docs/examples/sdk-custom-tool/src/cli.ts +36 -0
  305. package/docs/examples/sdk-custom-tool/src/entry.ts +15 -0
  306. package/docs/examples/sdk-custom-tool/src/index.ts +223 -0
  307. package/marketplace.json +2 -2
  308. package/package.json +4 -4
  309. package/packages/pm-beads/package.json +1 -1
  310. package/packages/pm-calendar/package.json +1 -1
  311. package/packages/pm-command-kit/package.json +1 -1
  312. package/packages/pm-governance-audit/extensions/governance-audit/comments-audit.ts +77 -57
  313. package/packages/pm-governance-audit/extensions/governance-audit/dedupe-audit.ts +202 -194
  314. package/packages/pm-governance-audit/extensions/governance-audit/dedupe-merge.ts +227 -153
  315. package/packages/pm-governance-audit/extensions/governance-audit/normalize.ts +169 -125
  316. package/packages/pm-governance-audit/extensions/governance-audit/runtime-utils.ts +130 -81
  317. package/packages/pm-governance-audit/extensions/governance-audit/sdk.ts +53 -4
  318. package/packages/pm-governance-audit/package.json +1 -1
  319. package/packages/pm-guide-shell/package.json +1 -1
  320. package/packages/pm-kanban/package.json +1 -1
  321. package/packages/pm-lifecycle-hooks/package.json +1 -1
  322. package/packages/pm-linked-test-adapters/package.json +1 -1
  323. package/packages/pm-search-advanced/package.json +1 -1
  324. package/packages/pm-templates/package.json +1 -1
  325. package/packages/pm-todos/package.json +1 -1
  326. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  327. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  328. package/dist/cli/commands/item-filter-options.js.map +0 -1
  329. package/dist/cli/commands/search-pagination.js.map +0 -1
  330. package/dist/cli/commands/search-rendering.js.map +0 -1
  331. package/dist/cli-bundle/chunks/append-UZVHUO74.js +0 -11
  332. package/dist/cli-bundle/chunks/chunk-3S5QVM5H.js.map +0 -1
  333. package/dist/cli-bundle/chunks/chunk-4XQ3BDV4.js.map +0 -7
  334. package/dist/cli-bundle/chunks/chunk-5JLUII3O.js.map +0 -1
  335. package/dist/cli-bundle/chunks/chunk-5ZSLZLDN.js.map +0 -1
  336. package/dist/cli-bundle/chunks/chunk-EH2OPHBI.js.map +0 -1
  337. package/dist/cli-bundle/chunks/chunk-H5APFTHZ.js.map +0 -7
  338. package/dist/cli-bundle/chunks/chunk-HYB5AZ63.js.map +0 -7
  339. package/dist/cli-bundle/chunks/chunk-ILX33QXL.js.map +0 -7
  340. package/dist/cli-bundle/chunks/chunk-LPYWLWDS.js.map +0 -1
  341. package/dist/cli-bundle/chunks/chunk-ONG5V5CI.js.map +0 -1
  342. package/dist/cli-bundle/chunks/chunk-UMOPHQSU.js.map +0 -7
  343. package/dist/cli-bundle/chunks/chunk-UXONS674.js.map +0 -1
  344. package/dist/cli-bundle/chunks/chunk-XXXF6PAQ.js.map +0 -7
  345. package/dist/cli-bundle/chunks/chunk-YBLZ2VE7.js.map +0 -7
  346. package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js +0 -58
  347. package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js.map +0 -1
  348. package/dist/cli-bundle/chunks/chunk-ZKRZY773.js +0 -68
  349. package/dist/cli-bundle/chunks/chunk-ZKRZY773.js.map +0 -7
  350. package/dist/cli-bundle/chunks/close-W6LI2PKM.js +0 -12
  351. package/dist/cli-bundle/chunks/close-many-DLDDVSH5.js +0 -23
  352. package/dist/cli-bundle/chunks/comments-E3TNTK24.js +0 -13
  353. package/dist/cli-bundle/chunks/copy-Q5ZJPUKR.js +0 -9
  354. package/dist/cli-bundle/chunks/delete-WNHB3LYW.js +0 -10
  355. package/dist/cli-bundle/chunks/docs-HA2AIDBB.js +0 -14
  356. package/dist/cli-bundle/chunks/focus-POIW5LTJ.js +0 -10
  357. package/dist/cli-bundle/chunks/history-compact-FWG2C7FZ.js +0 -16
  358. package/dist/cli-bundle/chunks/history-repair-6GEAM7HE.js +0 -16
  359. package/dist/cli-bundle/chunks/learnings-RSNLSWDC.js +0 -13
  360. package/dist/cli-bundle/chunks/notes-2WDH6DXU.js +0 -13
  361. package/dist/cli-bundle/chunks/plan-DOVI2VMW.js +0 -24
  362. package/dist/cli-bundle/chunks/restore-YPMVUUEX.js +0 -14
  363. package/dist/cli-bundle/chunks/update-WWBYOPXO.js +0 -21
  364. package/dist/cli-bundle/chunks/update-many-OUGIU5SF.js +0 -32
  365. package/dist/cli-bundle/chunks/update-many-TA7NGQBO.js +0 -36
  366. /package/dist/cli-bundle/chunks/{append-OJQFUQ4T.js.map → append-5YF3TO7I.js.map} +0 -0
  367. /package/dist/cli-bundle/chunks/{append-UZVHUO74.js.map → append-JHO5K6RP.js.map} +0 -0
  368. /package/dist/cli-bundle/chunks/{chunk-BCOFWYW4.js.map → chunk-2BX74BAS.js.map} +0 -0
  369. /package/dist/cli-bundle/chunks/{chunk-APRVSW2O.js.map → chunk-2CXL335K.js.map} +0 -0
  370. /package/dist/cli-bundle/chunks/{chunk-KG44YSKD.js.map → chunk-2FUOXSRN.js.map} +0 -0
  371. /package/dist/cli-bundle/chunks/{chunk-HDH3JUGG.js.map → chunk-2IPNL3DR.js.map} +0 -0
  372. /package/dist/cli-bundle/chunks/{chunk-GM5QHQU6.js.map → chunk-2XOSFSTH.js.map} +0 -0
  373. /package/dist/cli-bundle/chunks/{chunk-K3WII2ME.js.map → chunk-37DRDP2B.js.map} +0 -0
  374. /package/dist/cli-bundle/chunks/{chunk-2WSE6PO2.js.map → chunk-37V5MXAU.js.map} +0 -0
  375. /package/dist/cli-bundle/chunks/{chunk-UWQHLMEB.js.map → chunk-3D4YVTNG.js.map} +0 -0
  376. /package/dist/cli-bundle/chunks/{chunk-PMOSXADO.js.map → chunk-47HXN6RX.js.map} +0 -0
  377. /package/dist/cli-bundle/chunks/{chunk-6CFNAVTF.js.map → chunk-5HGZKQUL.js.map} +0 -0
  378. /package/dist/cli-bundle/chunks/{chunk-2IFFUZLC.js.map → chunk-5UKQLQM2.js.map} +0 -0
  379. /package/dist/cli-bundle/chunks/{chunk-DM4H7FP4.js.map → chunk-633PKXLT.js.map} +0 -0
  380. /package/dist/cli-bundle/chunks/{chunk-XSJUSQAE.js.map → chunk-646MQXFW.js.map} +0 -0
  381. /package/dist/cli-bundle/chunks/{chunk-ZI6VQWQ7.js.map → chunk-66MKH7SZ.js.map} +0 -0
  382. /package/dist/cli-bundle/chunks/{chunk-S6MQESFR.js.map → chunk-67RO3H4N.js.map} +0 -0
  383. /package/dist/cli-bundle/chunks/{chunk-34L5OT3Y.js.map → chunk-6DYOZS6C.js.map} +0 -0
  384. /package/dist/cli-bundle/chunks/{chunk-RRM5JYJC.js.map → chunk-6O44IN44.js.map} +0 -0
  385. /package/dist/cli-bundle/chunks/{chunk-PENXZX3U.js.map → chunk-74FKFFXO.js.map} +0 -0
  386. /package/dist/cli-bundle/chunks/{chunk-HO4KXD6I.js.map → chunk-7H5NNCJ5.js.map} +0 -0
  387. /package/dist/cli-bundle/chunks/{chunk-TQSZFPIS.js.map → chunk-AFGKSHAM.js.map} +0 -0
  388. /package/dist/cli-bundle/chunks/{chunk-6N2VXVTQ.js.map → chunk-ARGDWQ4J.js.map} +0 -0
  389. /package/dist/cli-bundle/chunks/{chunk-3U7ZR6M4.js.map → chunk-B57RJHBZ.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{chunk-YCQET3OT.js.map → chunk-BAP7G3N2.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{chunk-QKXHFPYM.js.map → chunk-BIRYX32V.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{chunk-RMLWNPH2.js.map → chunk-BVLOMU6O.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{chunk-2VPAVL7O.js.map → chunk-CKX4WOPC.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{chunk-TKOVBP6C.js.map → chunk-D52ZN3BF.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{chunk-KPMKHGEA.js.map → chunk-D53RTYVI.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{chunk-ODALILG3.js.map → chunk-D5XHO4Q7.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{chunk-YAQEBNY7.js.map → chunk-DDFGYUCQ.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{chunk-EAB64KLB.js.map → chunk-DG2EQRIH.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{chunk-IG3SWA4A.js.map → chunk-EHJFUOXL.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{chunk-ONREO4ST.js.map → chunk-EY7ZE3TG.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{chunk-EJEXHTY5.js.map → chunk-FHOBCGQO.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{chunk-H3EIEWGR.js.map → chunk-FL4D53ND.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{chunk-WUJQK4YV.js.map → chunk-FVNWHUME.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{chunk-INU6DKT5.js.map → chunk-FXFCFL73.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{chunk-QEHQ2GVG.js.map → chunk-FY4RLHSC.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{chunk-EACOH7AU.js.map → chunk-FZGM3PNA.js.map} +0 -0
  407. /package/dist/cli-bundle/chunks/{chunk-FNSPG7MU.js.map → chunk-G6KM4YKY.js.map} +0 -0
  408. /package/dist/cli-bundle/chunks/{chunk-AHVTB5I5.js.map → chunk-G6MYGULG.js.map} +0 -0
  409. /package/dist/cli-bundle/chunks/{chunk-TSMHDIW4.js.map → chunk-GLZKZON6.js.map} +0 -0
  410. /package/dist/cli-bundle/chunks/{chunk-2JKGO6QX.js.map → chunk-H5IOT54C.js.map} +0 -0
  411. /package/dist/cli-bundle/chunks/{chunk-SELVXEZK.js.map → chunk-HO4DLBNK.js.map} +0 -0
  412. /package/dist/cli-bundle/chunks/{chunk-3CLU2XZO.js.map → chunk-HSYV4ZYT.js.map} +0 -0
  413. /package/dist/cli-bundle/chunks/{chunk-CRVF2JDM.js.map → chunk-HXVHBERL.js.map} +0 -0
  414. /package/dist/cli-bundle/chunks/{chunk-NU3IMIEA.js.map → chunk-I7DIDUSP.js.map} +0 -0
  415. /package/dist/cli-bundle/chunks/{chunk-2NCIPMQP.js.map → chunk-I7GY4X6Y.js.map} +0 -0
  416. /package/dist/cli-bundle/chunks/{chunk-JYFOV7FC.js.map → chunk-IE5KRAKN.js.map} +0 -0
  417. /package/dist/cli-bundle/chunks/{chunk-UY2ACEMF.js.map → chunk-ILVOOAT4.js.map} +0 -0
  418. /package/dist/cli-bundle/chunks/{chunk-GOSLKLFE.js.map → chunk-KH6QAHME.js.map} +0 -0
  419. /package/dist/cli-bundle/chunks/{chunk-J6EY5V4N.js.map → chunk-KOEZCHRF.js.map} +0 -0
  420. /package/dist/cli-bundle/chunks/{chunk-WQPUU7XD.js.map → chunk-L337QKWJ.js.map} +0 -0
  421. /package/dist/cli-bundle/chunks/{chunk-LSG2U345.js.map → chunk-L6FVNR7X.js.map} +0 -0
  422. /package/dist/cli-bundle/chunks/{chunk-FMBNM2EN.js.map → chunk-LSOWTLEM.js.map} +0 -0
  423. /package/dist/cli-bundle/chunks/{chunk-4223PVZT.js.map → chunk-M7MVOKVV.js.map} +0 -0
  424. /package/dist/cli-bundle/chunks/{chunk-BKVG6XOA.js.map → chunk-MSGETE6I.js.map} +0 -0
  425. /package/dist/cli-bundle/chunks/{chunk-3WM75PWC.js.map → chunk-N33FD2UI.js.map} +0 -0
  426. /package/dist/cli-bundle/chunks/{chunk-UFXU44HV.js.map → chunk-N7I2DGLP.js.map} +0 -0
  427. /package/dist/cli-bundle/chunks/{chunk-6S3YSUYG.js.map → chunk-NNANAWFH.js.map} +0 -0
  428. /package/dist/cli-bundle/chunks/{chunk-IJIICKVW.js.map → chunk-NTRQLE2R.js.map} +0 -0
  429. /package/dist/cli-bundle/chunks/{chunk-SDQLJWBO.js.map → chunk-NVZ6NVHJ.js.map} +0 -0
  430. /package/dist/cli-bundle/chunks/{chunk-H2Z3FYXQ.js.map → chunk-OWP6QFBV.js.map} +0 -0
  431. /package/dist/cli-bundle/chunks/{chunk-Q7A43DS4.js.map → chunk-P22HGFFI.js.map} +0 -0
  432. /package/dist/cli-bundle/chunks/{chunk-NLDFBC6J.js.map → chunk-P56LKFQX.js.map} +0 -0
  433. /package/dist/cli-bundle/chunks/{chunk-NVPZIJVR.js.map → chunk-PT7MCCGD.js.map} +0 -0
  434. /package/dist/cli-bundle/chunks/{chunk-P74IZQ7A.js.map → chunk-QKVVV6QO.js.map} +0 -0
  435. /package/dist/cli-bundle/chunks/{chunk-QIPLHNP7.js.map → chunk-QWBKN3QC.js.map} +0 -0
  436. /package/dist/cli-bundle/chunks/{chunk-7PIWCHTW.js.map → chunk-R5XTTZSJ.js.map} +0 -0
  437. /package/dist/cli-bundle/chunks/{chunk-JOUQZENX.js.map → chunk-RC4UOUXA.js.map} +0 -0
  438. /package/dist/cli-bundle/chunks/{chunk-BEP7WJA2.js.map → chunk-RGMWJLXF.js.map} +0 -0
  439. /package/dist/cli-bundle/chunks/{chunk-NP22ERDF.js.map → chunk-RTBX3C4C.js.map} +0 -0
  440. /package/dist/cli-bundle/chunks/{chunk-7Z4LKRS4.js.map → chunk-SPFZV2GR.js.map} +0 -0
  441. /package/dist/cli-bundle/chunks/{chunk-ULTHRDBP.js.map → chunk-TM5CIO3F.js.map} +0 -0
  442. /package/dist/cli-bundle/chunks/{chunk-YAROI3PD.js.map → chunk-V7MP6YTN.js.map} +0 -0
  443. /package/dist/cli-bundle/chunks/{chunk-OW4JWD5M.js.map → chunk-VAHZIPWS.js.map} +0 -0
  444. /package/dist/cli-bundle/chunks/{chunk-DYH63FX7.js.map → chunk-VE6ZSTQW.js.map} +0 -0
  445. /package/dist/cli-bundle/chunks/{chunk-3AUGG2DP.js.map → chunk-W5E2UUSH.js.map} +0 -0
  446. /package/dist/cli-bundle/chunks/{chunk-UOHFKBUV.js.map → chunk-WL3SS45P.js.map} +0 -0
  447. /package/dist/cli-bundle/chunks/{chunk-QKJGPFAF.js.map → chunk-WU3KAN6A.js.map} +0 -0
  448. /package/dist/cli-bundle/chunks/{chunk-IA5FKNII.js.map → chunk-X2MGQMZO.js.map} +0 -0
  449. /package/dist/cli-bundle/chunks/{chunk-TD3LVC7D.js.map → chunk-X5YCTFKT.js.map} +0 -0
  450. /package/dist/cli-bundle/chunks/{chunk-B7PE22W6.js.map → chunk-XC2HEEOV.js.map} +0 -0
  451. /package/dist/cli-bundle/chunks/{chunk-J5AOEGDC.js.map → chunk-XNPMDSQQ.js.map} +0 -0
  452. /package/dist/cli-bundle/chunks/{chunk-K2X6U4UA.js.map → chunk-XXLXJL7V.js.map} +0 -0
  453. /package/dist/cli-bundle/chunks/{chunk-RLCHOOHC.js.map → chunk-YJSURTBB.js.map} +0 -0
  454. /package/dist/cli-bundle/chunks/{chunk-PGY23YTC.js.map → chunk-YKFHF37B.js.map} +0 -0
  455. /package/dist/cli-bundle/chunks/{chunk-JFTKLTEF.js.map → chunk-YQCWK2MB.js.map} +0 -0
  456. /package/dist/cli-bundle/chunks/{chunk-EYLCSJAI.js.map → chunk-YQEZWI3R.js.map} +0 -0
  457. /package/dist/cli-bundle/chunks/{close-W6LI2PKM.js.map → close-BEP7MHF3.js.map} +0 -0
  458. /package/dist/cli-bundle/chunks/{close-CWODTPKG.js.map → close-Y6QFUJQN.js.map} +0 -0
  459. /package/dist/cli-bundle/chunks/{close-many-CQFUY7MR.js.map → close-many-JJFW7KTT.js.map} +0 -0
  460. /package/dist/cli-bundle/chunks/{close-many-DLDDVSH5.js.map → close-many-QJ6FKJUE.js.map} +0 -0
  461. /package/dist/cli-bundle/chunks/{comments-E3TNTK24.js.map → comments-2AOZQ5D2.js.map} +0 -0
  462. /package/dist/cli-bundle/chunks/{comments-WGLHR7LB.js.map → comments-TMHMALA5.js.map} +0 -0
  463. /package/dist/cli-bundle/chunks/{copy-LXVDXH7B.js.map → copy-FWQA5OU4.js.map} +0 -0
  464. /package/dist/cli-bundle/chunks/{copy-Q5ZJPUKR.js.map → copy-N3LCQBMC.js.map} +0 -0
  465. /package/dist/cli-bundle/chunks/{create-LBVCYMEG.js.map → create-AQ5SIGZC.js.map} +0 -0
  466. /package/dist/cli-bundle/chunks/{create-J5U6ND4K.js.map → create-KOGQ3JKD.js.map} +0 -0
  467. /package/dist/cli-bundle/chunks/{delete-WNHB3LYW.js.map → delete-6G3MBZ6S.js.map} +0 -0
  468. /package/dist/cli-bundle/chunks/{delete-PMJBNY5G.js.map → delete-YYYFOSEA.js.map} +0 -0
  469. /package/dist/cli-bundle/chunks/{deps-OA26IS25.js.map → deps-5NC4IZH7.js.map} +0 -0
  470. /package/dist/cli-bundle/chunks/{deps-JZ7TMVCB.js.map → deps-EVTOQMKW.js.map} +0 -0
  471. /package/dist/cli-bundle/chunks/{docs-FEWB2DQB.js.map → docs-53NUGMIQ.js.map} +0 -0
  472. /package/dist/cli-bundle/chunks/{docs-HA2AIDBB.js.map → docs-OWRGDMNY.js.map} +0 -0
  473. /package/dist/cli-bundle/chunks/{files-EFIWKFTM.js.map → files-3PXGXYDB.js.map} +0 -0
  474. /package/dist/cli-bundle/chunks/{files-6YFBJRBG.js.map → files-EGLKHD7O.js.map} +0 -0
  475. /package/dist/cli-bundle/chunks/{focus-POIW5LTJ.js.map → focus-KZLIA6WS.js.map} +0 -0
  476. /package/dist/cli-bundle/chunks/{focus-4QJR7FOQ.js.map → focus-SRPASFTN.js.map} +0 -0
  477. /package/dist/cli-bundle/chunks/{history-compact-CKRPDTJN.js.map → history-compact-G4DULDCX.js.map} +0 -0
  478. /package/dist/cli-bundle/chunks/{history-compact-FWG2C7FZ.js.map → history-compact-HHIUOMZ7.js.map} +0 -0
  479. /package/dist/cli-bundle/chunks/{history-redact-BB3TGDAE.js.map → history-redact-IUSJ6X3E.js.map} +0 -0
  480. /package/dist/cli-bundle/chunks/{history-redact-D225BHOZ.js.map → history-redact-THHGRQXV.js.map} +0 -0
  481. /package/dist/cli-bundle/chunks/{history-repair-6GEAM7HE.js.map → history-repair-KG7SWXI6.js.map} +0 -0
  482. /package/dist/cli-bundle/chunks/{history-repair-RQXKQHL4.js.map → history-repair-LUQWRS7X.js.map} +0 -0
  483. /package/dist/cli-bundle/chunks/{learnings-JLNLCOL5.js.map → learnings-2MRNBFJF.js.map} +0 -0
  484. /package/dist/cli-bundle/chunks/{learnings-RSNLSWDC.js.map → learnings-ZVHSALJY.js.map} +0 -0
  485. /package/dist/cli-bundle/chunks/{notes-GB47XXQQ.js.map → notes-73JWKWUD.js.map} +0 -0
  486. /package/dist/cli-bundle/chunks/{notes-2WDH6DXU.js.map → notes-BAKUL5DJ.js.map} +0 -0
  487. /package/dist/cli-bundle/chunks/{plan-VDCJ2PCN.js.map → plan-AZPMCG37.js.map} +0 -0
  488. /package/dist/cli-bundle/chunks/{plan-DOVI2VMW.js.map → plan-LEAGLPGP.js.map} +0 -0
  489. /package/dist/cli-bundle/chunks/{profile-IVXQEL3D.js.map → profile-AGUKS52S.js.map} +0 -0
  490. /package/dist/cli-bundle/chunks/{profile-FAU7NZML.js.map → profile-U2B6Y7GE.js.map} +0 -0
  491. /package/dist/cli-bundle/chunks/{register-list-query-UL4UKBBN.js.map → register-list-query-A5KRJ5J2.js.map} +0 -0
  492. /package/dist/cli-bundle/chunks/{register-list-query-DKA3EH5D.js.map → register-list-query-NEYP3TXO.js.map} +0 -0
  493. /package/dist/cli-bundle/chunks/{register-mutation-RBBJ52DK.js.map → register-mutation-6LOPBAHC.js.map} +0 -0
  494. /package/dist/cli-bundle/chunks/{register-mutation-ARFHRW55.js.map → register-mutation-GCZOALNJ.js.map} +0 -0
  495. /package/dist/cli-bundle/chunks/{register-operations-ZIBBRSED.js.map → register-operations-6ZZIF27A.js.map} +0 -0
  496. /package/dist/cli-bundle/chunks/{register-operations-ZUJ5JWPE.js.map → register-operations-REDIAEGI.js.map} +0 -0
  497. /package/dist/cli-bundle/chunks/{register-setup-TDCGWIOS.js.map → register-setup-BHPMN5SK.js.map} +0 -0
  498. /package/dist/cli-bundle/chunks/{register-setup-BCVLFEYS.js.map → register-setup-J3JS2ZVT.js.map} +0 -0
  499. /package/dist/cli-bundle/chunks/{restore-25DLT2Q2.js.map → restore-E3PRGDN3.js.map} +0 -0
  500. /package/dist/cli-bundle/chunks/{restore-YPMVUUEX.js.map → restore-KIUYTAEJ.js.map} +0 -0
  501. /package/dist/cli-bundle/chunks/{schema-FNU3WE4O.js.map → schema-5JNFQFUW.js.map} +0 -0
  502. /package/dist/cli-bundle/chunks/{schema-NBCM3RAD.js.map → schema-TMIW4XZC.js.map} +0 -0
  503. /package/dist/cli-bundle/chunks/{update-WWBYOPXO.js.map → update-PQQHLYCC.js.map} +0 -0
  504. /package/dist/cli-bundle/chunks/{update-XHSIAIXE.js.map → update-SA6AG23P.js.map} +0 -0
  505. /package/dist/cli-bundle/chunks/{update-many-TA7NGQBO.js.map → update-many-RQVTFJPD.js.map} +0 -0
  506. /package/dist/cli-bundle/chunks/{update-many-OUGIU5SF.js.map → update-many-TV3L3KBX.js.map} +0 -0
  507. /package/dist/{cli/commands → sdk/query}/search-pagination.d.ts +0 -0
  508. /package/dist/{cli/commands → sdk/query}/search-rendering.d.ts +0 -0
@@ -0,0 +1,398 @@
1
+ /**
2
+ * @module sdk/telemetry
3
+ *
4
+ * Implements the pm telemetry command surface and its agent-facing runtime behavior.
5
+ */
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]="0f28d1b5-3b78-5a74-8c2d-592f5dbdadda")}catch(e){}}();
8
+ import fs from "node:fs/promises";
9
+ import path from "node:path";
10
+ import { pathExists, readFileIfExists } from "../core/fs/fs-utils.js";
11
+ import { EXIT_CODE } from "../core/shared/constants.js";
12
+ import { PmCliError } from "../core/shared/errors.js";
13
+ import { nowIso } from "../core/shared/time.js";
14
+ import { resolveGlobalPmRoot } from "../core/store/paths.js";
15
+ import { readSettings, writeSettings } from "../core/store/settings.js";
16
+ import { flushTelemetryQueueNow } from "../core/telemetry/runtime.js";
17
+ const TELEMETRY_QUEUE_RELATIVE_PATH = path.join("runtime", "telemetry", "events.jsonl");
18
+ const TELEMETRY_STATE_RELATIVE_PATH = path.join("runtime", "telemetry", "state.json");
19
+ const TELEMETRY_RUNTIME_RELATIVE_PATH = path.join("runtime", "telemetry");
20
+ const DEFAULT_STATS_LIMIT = 20;
21
+ /** Public contract for telemetry subcommands, shared by SDK and presentation-layer consumers. */
22
+ export const TELEMETRY_SUBCOMMANDS = [
23
+ "status",
24
+ "flush",
25
+ "stats",
26
+ "clear",
27
+ ];
28
+ /**
29
+ * Returns the nearest-rank percentile of an ascending-sorted, non-empty array.
30
+ *
31
+ * Uses the nearest-rank method (rank = ceil(fraction × n), 1-based, clamped into
32
+ * range) so the result is always an observed sample value with no interpolation.
33
+ */
34
+ const nearestRankPercentile = (sortedAscending, fraction) => {
35
+ const rank = Math.ceil(fraction * sortedAscending.length);
36
+ const index = Math.min(sortedAscending.length - 1, Math.max(0, rank - 1));
37
+ return sortedAscending[index];
38
+ };
39
+ /** Normalizes optional text while substituting a stable fallback for blanks. */
40
+ const normalizeTelemetryText = (value, fallback) => {
41
+ if (typeof value !== "string") {
42
+ return fallback;
43
+ }
44
+ return value.trim().length > 0 ? value : fallback;
45
+ };
46
+ /** Truncates finite numeric metadata while rejecting other runtime shapes. */
47
+ const normalizeFiniteInteger = (value) => {
48
+ if (typeof value !== "number" || !Number.isFinite(value)) {
49
+ return undefined;
50
+ }
51
+ return Math.trunc(value);
52
+ };
53
+ const normalizeTelemetryQueueEntry = (entry) => {
54
+ return {
55
+ command: normalizeTelemetryText(entry.event.command, "<unknown>"),
56
+ eventType: normalizeTelemetryText(entry.event.event_type, "unknown"),
57
+ eventSchemaVersion: normalizeFiniteInteger(entry.event.schema_version),
58
+ clientSchemaVersion: normalizeFiniteInteger(entry.client_schema_version),
59
+ };
60
+ };
61
+ const createTelemetryStatsAccumulator = () => {
62
+ return {
63
+ count: 0,
64
+ max_attempts: 0,
65
+ event_type_counts: {},
66
+ event_schema_versions: new Set(),
67
+ client_schema_versions: new Set(),
68
+ finish_durations_ms: [],
69
+ ok_count: 0,
70
+ error_count: 0,
71
+ resolution_counts: {},
72
+ };
73
+ };
74
+ /** Keeps a finite duration sample from an optional finish payload. */
75
+ const readTelemetryDuration = (payload) => {
76
+ const value = payload?.duration_ms;
77
+ return typeof value === "number" && Number.isFinite(value)
78
+ ? value
79
+ : undefined;
80
+ };
81
+ /** Keeps a non-blank resolution from an optional finish payload. */
82
+ const readTelemetryResolution = (payload) => {
83
+ const value = payload?.command_resolution;
84
+ return normalizeTelemetryText(value, "") || undefined;
85
+ };
86
+ /** Increments a named counter in an object-backed frequency map. */
87
+ const incrementTelemetryCount = (counts, key) => {
88
+ counts[key] = (counts[key] ?? 0) + 1;
89
+ };
90
+ const recordTelemetryFinishPayload = (current, payload) => {
91
+ const durationMs = readTelemetryDuration(payload);
92
+ if (durationMs !== undefined) {
93
+ current.finish_durations_ms.push(durationMs);
94
+ }
95
+ if (payload?.ok === true) {
96
+ current.ok_count += 1;
97
+ }
98
+ else {
99
+ current.error_count += 1;
100
+ }
101
+ const resolution = readTelemetryResolution(payload);
102
+ if (resolution !== undefined) {
103
+ incrementTelemetryCount(current.resolution_counts, resolution);
104
+ }
105
+ };
106
+ /** Normalizes retry attempts to a non-negative finite integer. */
107
+ const normalizeTelemetryAttempts = (attempts) => Number.isFinite(attempts) ? Math.max(0, Math.trunc(attempts)) : 0;
108
+ /** Adds a defined numeric value to a set-backed telemetry dimension. */
109
+ const addTelemetryDimension = (values, value) => {
110
+ if (value !== undefined) {
111
+ values.add(value);
112
+ }
113
+ };
114
+ const recordTelemetryQueueEntry = (grouped, entry) => {
115
+ const normalized = normalizeTelemetryQueueEntry(entry);
116
+ const current = grouped.get(normalized.command) ?? createTelemetryStatsAccumulator();
117
+ current.count += 1;
118
+ current.max_attempts = Math.max(current.max_attempts, normalizeTelemetryAttempts(entry.attempts));
119
+ incrementTelemetryCount(current.event_type_counts, normalized.eventType);
120
+ addTelemetryDimension(current.event_schema_versions, normalized.eventSchemaVersion);
121
+ addTelemetryDimension(current.client_schema_versions, normalized.clientSchemaVersion);
122
+ if (normalized.eventType === "command_finish") {
123
+ recordTelemetryFinishPayload(current, entry.event.payload);
124
+ }
125
+ grouped.set(normalized.command, current);
126
+ };
127
+ const buildTelemetryStatsBucket = (command, value) => {
128
+ const finishCount = value.ok_count + value.error_count;
129
+ const sortedDurations = [...value.finish_durations_ms].sort((left, right) => left - right);
130
+ const resolutionEntries = Object.entries(value.resolution_counts).sort((left, right) => left[0].localeCompare(right[0]));
131
+ return {
132
+ command,
133
+ count: value.count,
134
+ event_type_counts: Object.fromEntries(Object.entries(value.event_type_counts).sort((left, right) => left[0].localeCompare(right[0]))),
135
+ max_attempts: value.max_attempts,
136
+ event_schema_versions: [...value.event_schema_versions].sort((left, right) => left - right),
137
+ client_schema_versions: [...value.client_schema_versions].sort((left, right) => left - right),
138
+ ...(sortedDurations.length > 0
139
+ ? {
140
+ duration_p50_ms: nearestRankPercentile(sortedDurations, 0.5),
141
+ duration_p95_ms: nearestRankPercentile(sortedDurations, 0.95),
142
+ duration_max_ms: sortedDurations[sortedDurations.length - 1],
143
+ }
144
+ : {}),
145
+ ...(finishCount > 0
146
+ ? {
147
+ ok_count: value.ok_count,
148
+ error_count: value.error_count,
149
+ error_rate: value.error_count / finishCount,
150
+ }
151
+ : {}),
152
+ ...(resolutionEntries.length > 0
153
+ ? { command_resolution_counts: Object.fromEntries(resolutionEntries) }
154
+ : {}),
155
+ };
156
+ };
157
+ const normalizeTelemetrySubcommand = (value) => {
158
+ const normalized = (value ?? "status").trim().toLowerCase();
159
+ if (TELEMETRY_SUBCOMMANDS.includes(normalized)) {
160
+ return normalized;
161
+ }
162
+ // `value` is always a defined string here: an undefined subcommand normalizes
163
+ // to "status" above (a valid value) and never reaches this throw.
164
+ throw new PmCliError(`Unknown pm telemetry subcommand "${value}". Allowed: ${TELEMETRY_SUBCOMMANDS.join(", ")}`, EXIT_CODE.USAGE, {
165
+ code: "unknown_subcommand",
166
+ examples: [
167
+ "pm telemetry status",
168
+ "pm telemetry flush",
169
+ "pm telemetry stats --limit 10",
170
+ "pm telemetry clear",
171
+ ],
172
+ });
173
+ };
174
+ /** Throws the stable usage diagnostic for invalid telemetry stats windows. */
175
+ const throwInvalidTelemetryLimit = () => {
176
+ throw new PmCliError("--limit must be a positive integer", EXIT_CODE.USAGE);
177
+ };
178
+ /** Validates one already-parsed stats limit. */
179
+ const requirePositiveTelemetryLimit = (value) => {
180
+ if ([!Number.isFinite(value), !Number.isInteger(value), value <= 0].includes(true)) {
181
+ return throwInvalidTelemetryLimit();
182
+ }
183
+ return value;
184
+ };
185
+ /** Parses and validates the string form accepted by the CLI flag surface. */
186
+ const parseTelemetryStringLimit = (raw) => {
187
+ const trimmed = raw.trim();
188
+ if ([trimmed.length === 0, !/^\d+$/.test(trimmed)].includes(true)) {
189
+ return throwInvalidTelemetryLimit();
190
+ }
191
+ return requirePositiveTelemetryLimit(Number.parseInt(trimmed, 10));
192
+ };
193
+ const parseTelemetryStatsLimit = (raw) => {
194
+ if (raw === undefined) {
195
+ return DEFAULT_STATS_LIMIT;
196
+ }
197
+ if (typeof raw === "number") {
198
+ return requirePositiveTelemetryLimit(raw);
199
+ }
200
+ if (typeof raw === "string") {
201
+ return parseTelemetryStringLimit(raw);
202
+ }
203
+ return throwInvalidTelemetryLimit();
204
+ };
205
+ /** Recognizes the persisted telemetry queue record shape. */
206
+ const isTelemetryQueueEntry = (value) => {
207
+ if (typeof value !== "object" || value === null) {
208
+ return false;
209
+ }
210
+ const candidate = value;
211
+ return (typeof candidate.attempts === "number" &&
212
+ typeof candidate.event === "object" &&
213
+ candidate.event !== null);
214
+ };
215
+ /** Parses one non-blank queue row without leaking JSON failures. */
216
+ const parseTelemetryQueueRow = (row) => {
217
+ try {
218
+ const parsed = JSON.parse(row);
219
+ return isTelemetryQueueEntry(parsed) ? parsed : undefined;
220
+ }
221
+ catch {
222
+ return undefined;
223
+ }
224
+ };
225
+ /** Splits queue content into non-blank persisted rows. */
226
+ const splitTelemetryQueueRows = (raw) => {
227
+ if (raw === null) {
228
+ return [];
229
+ }
230
+ return raw
231
+ .split("\n")
232
+ .map((line) => line.trim())
233
+ .filter((line) => line.length > 0);
234
+ };
235
+ const parseTelemetryQueue = (raw) => {
236
+ const rows = splitTelemetryQueueRows(raw);
237
+ const entries = [];
238
+ let invalidRows = 0;
239
+ for (const row of rows) {
240
+ const parsed = parseTelemetryQueueRow(row);
241
+ if (parsed === undefined) {
242
+ invalidRows += 1;
243
+ }
244
+ else {
245
+ entries.push(parsed);
246
+ }
247
+ }
248
+ return {
249
+ rows_total: rows.length,
250
+ valid_entries: entries.length,
251
+ invalid_rows: invalidRows,
252
+ entries,
253
+ };
254
+ };
255
+ /** Recognizes an object-shaped telemetry runtime state payload. */
256
+ const isTelemetryRuntimeState = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
257
+ /** Parses observational runtime state while treating malformed content as empty. */
258
+ const parseTelemetryRuntimeState = (raw) => {
259
+ try {
260
+ const parsed = JSON.parse(raw);
261
+ return isTelemetryRuntimeState(parsed) ? parsed : {};
262
+ }
263
+ catch {
264
+ return {};
265
+ }
266
+ };
267
+ const readTelemetryRuntimeState = async (statePath) => {
268
+ const stateRaw = await readFileIfExists(statePath);
269
+ if (stateRaw === null || stateRaw.trim().length === 0) {
270
+ return {};
271
+ }
272
+ return parseTelemetryRuntimeState(stateRaw);
273
+ };
274
+ /** Converts an optional telemetry state value to an explicit nullable field. */
275
+ const nullableTelemetryStateValue = (value) => value ?? null;
276
+ const buildTelemetryStatusSummary = async (globalPmRoot) => {
277
+ const settings = await readSettings(globalPmRoot);
278
+ const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);
279
+ const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);
280
+ const queueRaw = await readFileIfExists(queuePath);
281
+ const queue = parseTelemetryQueue(queueRaw);
282
+ const runtimeState = await readTelemetryRuntimeState(statePath);
283
+ return {
284
+ enabled: settings.telemetry.enabled,
285
+ endpoint: settings.telemetry.endpoint,
286
+ queue_path: queuePath,
287
+ state_path: statePath,
288
+ queue_rows_total: queue.rows_total,
289
+ queue_entries: queue.valid_entries,
290
+ queue_invalid_rows: queue.invalid_rows,
291
+ queue_size_bytes: Buffer.byteLength(queueRaw ?? "", "utf8"),
292
+ last_attempted_flush_at: nullableTelemetryStateValue(runtimeState.last_attempted_flush_at),
293
+ last_successful_flush_at: nullableTelemetryStateValue(runtimeState.last_successful_flush_at),
294
+ last_failed_flush_at: nullableTelemetryStateValue(runtimeState.last_failed_flush_at),
295
+ last_failed_flush_error: nullableTelemetryStateValue(runtimeState.last_failed_flush_error),
296
+ };
297
+ };
298
+ const buildTelemetryStatsBuckets = (entries) => {
299
+ const grouped = new Map();
300
+ for (const entry of entries) {
301
+ // Latency + outcome distribution come from command_finish payloads only:
302
+ // command_finish always carries duration_ms/ok/command_resolution at every
303
+ // capture level, while start/error events do not.
304
+ recordTelemetryQueueEntry(grouped, entry);
305
+ }
306
+ return [...grouped.entries()]
307
+ .map(([command, value]) => buildTelemetryStatsBucket(command, value))
308
+ .sort((left, right) => right.count - left.count || left.command.localeCompare(right.command));
309
+ };
310
+ /** Returns current telemetry queue and runtime state without mutation. */
311
+ const runTelemetryStatus = async (_options, context) => ({
312
+ action: "telemetry",
313
+ subcommand: "status",
314
+ status: await buildTelemetryStatusSummary(context.globalPmRoot),
315
+ generated_at: nowIso(),
316
+ });
317
+ /** Flushes queued telemetry and reports the before/after queue state. */
318
+ const runTelemetryFlush = async (_options, context) => {
319
+ const before = await buildTelemetryStatusSummary(context.globalPmRoot);
320
+ await flushTelemetryQueueNow(context.globalPmRoot);
321
+ const after = await buildTelemetryStatusSummary(context.globalPmRoot);
322
+ return {
323
+ action: "telemetry",
324
+ subcommand: "flush",
325
+ queue_entries_before: before.queue_entries,
326
+ queue_entries_after: after.queue_entries,
327
+ queue_drained: after.queue_entries < before.queue_entries,
328
+ status: after,
329
+ generated_at: nowIso(),
330
+ };
331
+ };
332
+ /** Aggregates the offline telemetry queue into bounded command statistics. */
333
+ const runTelemetryStats = async (options, context) => {
334
+ const limit = parseTelemetryStatsLimit(options.limit);
335
+ const queueRaw = await readFileIfExists(context.queuePath);
336
+ const queue = parseTelemetryQueue(queueRaw);
337
+ const buckets = buildTelemetryStatsBuckets(queue.entries);
338
+ const selected = buckets.slice(0, limit);
339
+ return {
340
+ action: "telemetry",
341
+ subcommand: "stats",
342
+ limit,
343
+ total_commands: buckets.length,
344
+ queue_entries: queue.valid_entries,
345
+ queue_invalid_rows: queue.invalid_rows,
346
+ queue_rows_total: queue.rows_total,
347
+ truncated: buckets.length > selected.length,
348
+ stats: selected,
349
+ generated_at: nowIso(),
350
+ };
351
+ };
352
+ /** Clears local telemetry consent identifiers, queue data, and runtime state. */
353
+ const runTelemetryClear = async (_options, context) => {
354
+ const settings = await readSettings(context.globalPmRoot);
355
+ const settingsChanged = [
356
+ settings.telemetry.enabled !== false,
357
+ settings.telemetry.installation_id !== "",
358
+ settings.telemetry.first_run_prompt_completed !== true,
359
+ ].includes(true);
360
+ settings.telemetry.enabled = false;
361
+ settings.telemetry.first_run_prompt_completed = true;
362
+ settings.telemetry.installation_id = "";
363
+ if (settingsChanged) {
364
+ await writeSettings(context.globalPmRoot, settings, "telemetry:clear");
365
+ }
366
+ const telemetryRuntimePath = path.join(context.globalPmRoot, TELEMETRY_RUNTIME_RELATIVE_PATH);
367
+ const existed = await pathExists(telemetryRuntimePath);
368
+ await fs.rm(telemetryRuntimePath, { recursive: true, force: true });
369
+ return {
370
+ action: "telemetry",
371
+ subcommand: "clear",
372
+ settings_changed: settingsChanged,
373
+ runtime_dir_removed: existed && !(await pathExists(telemetryRuntimePath)),
374
+ queue_exists_after: await pathExists(context.queuePath),
375
+ state_exists_after: await pathExists(context.statePath),
376
+ status: await buildTelemetryStatusSummary(context.globalPmRoot),
377
+ generated_at: nowIso(),
378
+ };
379
+ };
380
+ const TELEMETRY_COMMAND_HANDLERS = {
381
+ status: runTelemetryStatus,
382
+ flush: runTelemetryFlush,
383
+ stats: runTelemetryStats,
384
+ clear: runTelemetryClear,
385
+ };
386
+ /** Implements run telemetry for the public runtime surface of this module. */
387
+ export const runTelemetry = async (options, _global) => {
388
+ void _global;
389
+ const subcommand = normalizeTelemetrySubcommand(options.subcommand);
390
+ const globalPmRoot = resolveGlobalPmRoot(process.cwd());
391
+ return TELEMETRY_COMMAND_HANDLERS[subcommand](options, {
392
+ globalPmRoot,
393
+ queuePath: path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH),
394
+ statePath: path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH),
395
+ });
396
+ };
397
+ //# sourceMappingURL=telemetry.js.map
398
+ //# debugId=0f28d1b5-3b78-5a74-8c2d-592f5dbdadda
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sources":["sdk/telemetry.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module sdk/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 */\nconst 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\n/** Normalizes optional text while substituting a stable fallback for blanks. */\nconst normalizeTelemetryText = (value: unknown, fallback: string): string => {\n if (typeof value !== \"string\") {\n return fallback;\n }\n return value.trim().length > 0 ? value : fallback;\n};\n\n/** Truncates finite numeric metadata while rejecting other runtime shapes. */\nconst normalizeFiniteInteger = (value: unknown): number | undefined => {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return undefined;\n }\n return Math.trunc(value);\n};\n\nconst normalizeTelemetryQueueEntry = (\n entry: QueuedTelemetryEventRecord,\n): NormalizedTelemetryQueueEntry => {\n return {\n command: normalizeTelemetryText(entry.event.command, \"<unknown>\"),\n eventType: normalizeTelemetryText(entry.event.event_type, \"unknown\"),\n eventSchemaVersion: normalizeFiniteInteger(entry.event.schema_version),\n clientSchemaVersion: normalizeFiniteInteger(entry.client_schema_version),\n };\n};\n\nconst 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\n/** Keeps a finite duration sample from an optional finish payload. */\nconst readTelemetryDuration = (\n payload: Record<string, unknown> | undefined,\n): number | undefined => {\n const value = payload?.duration_ms;\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n};\n\n/** Keeps a non-blank resolution from an optional finish payload. */\nconst readTelemetryResolution = (\n payload: Record<string, unknown> | undefined,\n): string | undefined => {\n const value = payload?.command_resolution;\n return normalizeTelemetryText(value, \"\") || undefined;\n};\n\n/** Increments a named counter in an object-backed frequency map. */\nconst incrementTelemetryCount = (\n counts: Record<string, number>,\n key: string,\n): void => {\n counts[key] = (counts[key] ?? 0) + 1;\n};\n\nconst recordTelemetryFinishPayload = (\n current: TelemetryStatsBucketAccumulator,\n payload: Record<string, unknown> | undefined,\n): void => {\n const durationMs = readTelemetryDuration(payload);\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 = readTelemetryResolution(payload);\n if (resolution !== undefined) {\n incrementTelemetryCount(current.resolution_counts, resolution);\n }\n};\n\n/** Normalizes retry attempts to a non-negative finite integer. */\nconst normalizeTelemetryAttempts = (attempts: number): number =>\n Number.isFinite(attempts) ? Math.max(0, Math.trunc(attempts)) : 0;\n\n/** Adds a defined numeric value to a set-backed telemetry dimension. */\nconst addTelemetryDimension = (\n values: Set<number>,\n value: number | undefined,\n): void => {\n if (value !== undefined) {\n values.add(value);\n }\n};\n\nconst 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 current.count += 1;\n current.max_attempts = Math.max(\n current.max_attempts,\n normalizeTelemetryAttempts(entry.attempts),\n );\n incrementTelemetryCount(current.event_type_counts, normalized.eventType);\n addTelemetryDimension(\n current.event_schema_versions,\n normalized.eventSchemaVersion,\n );\n addTelemetryDimension(\n current.client_schema_versions,\n normalized.clientSchemaVersion,\n );\n if (normalized.eventType === \"command_finish\") {\n recordTelemetryFinishPayload(current, entry.event.payload);\n }\n grouped.set(normalized.command, current);\n};\n\nconst 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\nconst 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\n/** Throws the stable usage diagnostic for invalid telemetry stats windows. */\nconst throwInvalidTelemetryLimit = (): never => {\n throw new PmCliError(\"--limit must be a positive integer\", EXIT_CODE.USAGE);\n};\n\n/** Validates one already-parsed stats limit. */\nconst requirePositiveTelemetryLimit = (value: number): number => {\n if (\n [!Number.isFinite(value), !Number.isInteger(value), value <= 0].includes(\n true,\n )\n ) {\n return throwInvalidTelemetryLimit();\n }\n return value;\n};\n\n/** Parses and validates the string form accepted by the CLI flag surface. */\nconst parseTelemetryStringLimit = (raw: string): number => {\n const trimmed = raw.trim();\n if ([trimmed.length === 0, !/^\\d+$/.test(trimmed)].includes(true)) {\n return throwInvalidTelemetryLimit();\n }\n return requirePositiveTelemetryLimit(Number.parseInt(trimmed, 10));\n};\n\nconst parseTelemetryStatsLimit = (raw: unknown): number => {\n if (raw === undefined) {\n return DEFAULT_STATS_LIMIT;\n }\n if (typeof raw === \"number\") {\n return requirePositiveTelemetryLimit(raw);\n }\n if (typeof raw === \"string\") {\n return parseTelemetryStringLimit(raw);\n }\n return throwInvalidTelemetryLimit();\n};\n\n/** Recognizes the persisted telemetry queue record shape. */\nconst isTelemetryQueueEntry = (\n value: unknown,\n): value is QueuedTelemetryEventRecord => {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const candidate = value as Partial<QueuedTelemetryEventRecord>;\n return (\n typeof candidate.attempts === \"number\" &&\n typeof candidate.event === \"object\" &&\n candidate.event !== null\n );\n};\n\n/** Parses one non-blank queue row without leaking JSON failures. */\nconst parseTelemetryQueueRow = (\n row: string,\n): QueuedTelemetryEventRecord | undefined => {\n try {\n const parsed: unknown = JSON.parse(row);\n return isTelemetryQueueEntry(parsed) ? parsed : undefined;\n } catch {\n return undefined;\n }\n};\n\n/** Splits queue content into non-blank persisted rows. */\nconst splitTelemetryQueueRows = (raw: string | null): string[] => {\n if (raw === null) {\n return [];\n }\n return raw\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n};\n\nconst parseTelemetryQueue = (raw: string | null): ParsedTelemetryQueue => {\n const rows = splitTelemetryQueueRows(raw);\n const entries: QueuedTelemetryEventRecord[] = [];\n let invalidRows = 0;\n for (const row of rows) {\n const parsed = parseTelemetryQueueRow(row);\n if (parsed === undefined) {\n invalidRows += 1;\n } else {\n entries.push(parsed);\n }\n }\n return {\n rows_total: rows.length,\n valid_entries: entries.length,\n invalid_rows: invalidRows,\n entries,\n };\n};\n\n/** Recognizes an object-shaped telemetry runtime state payload. */\nconst isTelemetryRuntimeState = (\n value: unknown,\n): value is TelemetryRuntimeStateRecord =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/** Parses observational runtime state while treating malformed content as empty. */\nconst parseTelemetryRuntimeState = (\n raw: string,\n): TelemetryRuntimeStateRecord => {\n try {\n const parsed: unknown = JSON.parse(raw);\n return isTelemetryRuntimeState(parsed) ? parsed : {};\n } catch {\n return {};\n }\n};\n\nconst readTelemetryRuntimeState = async (\n statePath: string,\n): Promise<TelemetryRuntimeStateRecord> => {\n const stateRaw = await readFileIfExists(statePath);\n if (stateRaw === null || stateRaw.trim().length === 0) {\n return {};\n }\n return parseTelemetryRuntimeState(stateRaw);\n};\n\n/** Converts an optional telemetry state value to an explicit nullable field. */\nconst nullableTelemetryStateValue = (\n value: string | undefined,\n): string | null => value ?? null;\n\nconst buildTelemetryStatusSummary = async (\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: Buffer.byteLength(queueRaw ?? \"\", \"utf8\"),\n last_attempted_flush_at: nullableTelemetryStateValue(\n runtimeState.last_attempted_flush_at,\n ),\n last_successful_flush_at: nullableTelemetryStateValue(\n runtimeState.last_successful_flush_at,\n ),\n last_failed_flush_at: nullableTelemetryStateValue(\n runtimeState.last_failed_flush_at,\n ),\n last_failed_flush_error: nullableTelemetryStateValue(\n runtimeState.last_failed_flush_error,\n ),\n };\n};\n\nconst 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\ninterface TelemetryCommandContext {\n globalPmRoot: string;\n queuePath: string;\n statePath: string;\n}\n\ntype TelemetryCommandHandler = (\n options: TelemetryCommandOptions,\n context: TelemetryCommandContext,\n) => Promise<Record<string, unknown>>;\n\n/** Returns current telemetry queue and runtime state without mutation. */\nconst runTelemetryStatus: TelemetryCommandHandler = async (\n _options,\n context,\n) => ({\n action: \"telemetry\",\n subcommand: \"status\",\n status: await buildTelemetryStatusSummary(context.globalPmRoot),\n generated_at: nowIso(),\n});\n\n/** Flushes queued telemetry and reports the before/after queue state. */\nconst runTelemetryFlush: TelemetryCommandHandler = async (\n _options,\n context,\n) => {\n const before = await buildTelemetryStatusSummary(context.globalPmRoot);\n await flushTelemetryQueueNow(context.globalPmRoot);\n const after = await buildTelemetryStatusSummary(context.globalPmRoot);\n return {\n action: \"telemetry\",\n subcommand: \"flush\",\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/** Aggregates the offline telemetry queue into bounded command statistics. */\nconst runTelemetryStats: TelemetryCommandHandler = async (options, context) => {\n const limit = parseTelemetryStatsLimit(options.limit);\n const queueRaw = await readFileIfExists(context.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: \"stats\",\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/** Clears local telemetry consent identifiers, queue data, and runtime state. */\nconst runTelemetryClear: TelemetryCommandHandler = async (\n _options,\n context,\n) => {\n const settings = await readSettings(context.globalPmRoot);\n const settingsChanged = [\n settings.telemetry.enabled !== false,\n settings.telemetry.installation_id !== \"\",\n settings.telemetry.first_run_prompt_completed !== true,\n ].includes(true);\n settings.telemetry.enabled = false;\n settings.telemetry.first_run_prompt_completed = true;\n settings.telemetry.installation_id = \"\";\n if (settingsChanged) {\n await writeSettings(context.globalPmRoot, settings, \"telemetry:clear\");\n }\n const telemetryRuntimePath = path.join(\n context.globalPmRoot,\n TELEMETRY_RUNTIME_RELATIVE_PATH,\n );\n const existed = await pathExists(telemetryRuntimePath);\n await fs.rm(telemetryRuntimePath, { recursive: true, force: true });\n return {\n action: \"telemetry\",\n subcommand: \"clear\",\n settings_changed: settingsChanged,\n runtime_dir_removed: existed && !(await pathExists(telemetryRuntimePath)),\n queue_exists_after: await pathExists(context.queuePath),\n state_exists_after: await pathExists(context.statePath),\n status: await buildTelemetryStatusSummary(context.globalPmRoot),\n generated_at: nowIso(),\n };\n};\n\nconst TELEMETRY_COMMAND_HANDLERS: Record<\n TelemetrySubcommand,\n TelemetryCommandHandler\n> = {\n status: runTelemetryStatus,\n flush: runTelemetryFlush,\n stats: runTelemetryStats,\n clear: runTelemetryClear,\n};\n\n/** Implements run telemetry for the public runtime surface of this module. */\nexport const runTelemetry = async (\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 return TELEMETRY_COMMAND_HANDLERS[subcommand](options, {\n globalPmRoot,\n queuePath: path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH),\n statePath: path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH),\n });\n};\n"],"names":[],"mappings":"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","debugId":"0f28d1b5-3b78-5a74-8c2d-592f5dbdadda"}
@@ -0,0 +1,94 @@
1
+ import type { GlobalOptions } from "../../core/shared/command-types.js";
2
+ import type { ItemStatus, LinkedTest } from "../../types/index.js";
3
+ import { type LinkedTestFailureCategory, type TestRunResult } from "./execution.js";
4
+ /** Documents the test all command options payload exchanged by command, SDK, and package integrations. */
5
+ export interface TestAllCommandOptions {
6
+ /** Lifecycle state reported for status. */
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
+ /** Implements run test all for the public runtime surface of this module. */
89
+ export declare const runTestAll: (options: TestAllCommandOptions, global: GlobalOptions) => Promise<TestAllResult>;
90
+ /** Public contract for test only test all, shared by SDK and presentation-layer consumers. */
91
+ export declare const _testOnlyTestAll: {
92
+ buildLinkedTestKey: (test: LinkedTest) => string;
93
+ formatTrackingError: (error: unknown) => string;
94
+ };