@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,492 @@
1
+ /**
2
+ * @module sdk/test/batch
3
+ *
4
+ * Implements the pm test all 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]="524ce953-9a81-51e3-a428-689aecec60fc")}catch(e){}}();
8
+ import { pathExists } from "../../core/fs/fs-utils.js";
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 "./execution.js";
23
+ const 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
+ const parseTimeout = (raw) => {
35
+ if (raw === undefined) {
36
+ return undefined;
37
+ }
38
+ const parsed = parseOptionalNumber(raw, "timeout");
39
+ if (parsed <= 0) {
40
+ throw new PmCliError("timeout must be a positive number", EXIT_CODE.USAGE);
41
+ }
42
+ return parsed;
43
+ };
44
+ const parseNonNegativeInteger = (raw, flag) => {
45
+ if (raw === undefined) {
46
+ return undefined;
47
+ }
48
+ const parsed = Number(raw);
49
+ if (!Number.isInteger(parsed) || parsed < 0) {
50
+ throw new PmCliError(`${flag} must be a non-negative integer`, EXIT_CODE.USAGE);
51
+ }
52
+ return parsed;
53
+ };
54
+ const formatTrackingError = (error) => {
55
+ return error instanceof Error ? error.message : String(error);
56
+ };
57
+ const resolveTrackedRunId = () => {
58
+ const fromEnv = process.env.PM_BACKGROUND_TEST_RUN_ID?.trim();
59
+ if (fromEnv && fromEnv.length > 0) {
60
+ return fromEnv;
61
+ }
62
+ return `test-all-local-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
63
+ };
64
+ const normalizeCommand = (command) => {
65
+ return command.trim().replaceAll(/\s+/g, " ");
66
+ };
67
+ const normalizeEnvSetSignature = (value) => {
68
+ if (!value || Object.keys(value).length === 0) {
69
+ return "{}";
70
+ }
71
+ return JSON.stringify(Object.fromEntries(Object.entries(value).sort(([left], [right]) => left.localeCompare(right))));
72
+ };
73
+ const normalizeEnvClearSignature = (value) => {
74
+ if (!value || value.length === 0) {
75
+ return "[]";
76
+ }
77
+ return JSON.stringify([...value].sort((left, right) => left.localeCompare(right)));
78
+ };
79
+ const normalizePmContextModeSignature = (value) => {
80
+ const normalized = value?.trim().toLowerCase();
81
+ return normalized && normalized.length > 0 ? normalized : "none";
82
+ };
83
+ /** Sorts and deduplicates optional assertion string lists. */
84
+ const normalizeAssertionStrings = (values) => [...new Set(values ?? [])].sort((left, right) => left.localeCompare(right));
85
+ /** Sorts optional assertion maps into deterministic key order. */
86
+ const normalizeAssertionMap = (value) => Object.fromEntries(Object.entries(value ?? {}).sort(([left], [right]) => left.localeCompare(right)));
87
+ /** Keeps a numeric assertion threshold while omitting other runtime shapes. */
88
+ const normalizeAssertionLineCount = (value) => typeof value === "number" ? value : undefined;
89
+ const normalizeAssertionSignature = (test) => {
90
+ const normalized = {
91
+ assert_stdout_contains: normalizeAssertionStrings(test.assert_stdout_contains),
92
+ assert_stdout_regex: normalizeAssertionStrings(test.assert_stdout_regex),
93
+ assert_stderr_contains: normalizeAssertionStrings(test.assert_stderr_contains),
94
+ assert_stderr_regex: normalizeAssertionStrings(test.assert_stderr_regex),
95
+ assert_stdout_min_lines: normalizeAssertionLineCount(test.assert_stdout_min_lines),
96
+ assert_json_field_equals: normalizeAssertionMap(test.assert_json_field_equals),
97
+ assert_json_field_gte: normalizeAssertionMap(test.assert_json_field_gte),
98
+ };
99
+ return JSON.stringify(normalized);
100
+ };
101
+ /** Resolves a linked test's command-or-path identity segment. */
102
+ const resolveLinkedTestTargetSignature = (test) => {
103
+ const command = resolveOptionalEnvironmentValue(test.command);
104
+ if (command !== undefined) {
105
+ return `command:${test.scope}:${normalizeCommand(command)}`;
106
+ }
107
+ return `path:${test.scope}:${resolveOptionalEnvironmentValue(test.path) ?? ""}`;
108
+ };
109
+ const buildLinkedTestKey = (test) => {
110
+ const envSet = normalizeEnvSetSignature(test.env_set);
111
+ const envClear = normalizeEnvClearSignature(test.env_clear);
112
+ const pmContextMode = normalizePmContextModeSignature(test.pm_context_mode);
113
+ const sharedHostSafe = test.shared_host_safe === true ? "true" : "false";
114
+ const assertions = normalizeAssertionSignature(test);
115
+ return `${resolveLinkedTestTargetSignature(test)}:${envSet}:${envClear}:${pmContextMode}:${sharedHostSafe}:${assertions}`;
116
+ };
117
+ const maxTimeoutSeconds = (current, candidate) => {
118
+ if (candidate === undefined) {
119
+ /* c8 ignore next - exercised implicitly by duplicate timeout normalization */
120
+ return current;
121
+ }
122
+ if (current === undefined || candidate > current) {
123
+ return candidate;
124
+ }
125
+ return current;
126
+ };
127
+ const countStatuses = (runResults) => {
128
+ let passed = 0;
129
+ let failed = 0;
130
+ let skipped = 0;
131
+ for (const result of runResults) {
132
+ if (result.status === "passed") {
133
+ passed += 1;
134
+ continue;
135
+ }
136
+ if (result.status === "failed") {
137
+ failed += 1;
138
+ continue;
139
+ }
140
+ skipped += 1;
141
+ }
142
+ return { passed, failed, skipped };
143
+ };
144
+ const mergeFailureCategoryCounts = (target, source) => {
145
+ for (const [key, value] of Object.entries(source)) {
146
+ target[key] += value;
147
+ }
148
+ };
149
+ const emitTestAllProgress = (options, message) => {
150
+ if (options.progress !== true) {
151
+ return;
152
+ }
153
+ try {
154
+ process.stderr.write(`[pm test-all] ${message}\n`);
155
+ }
156
+ catch {
157
+ // Ignore transient stderr write failures.
158
+ }
159
+ };
160
+ const collectTestAllItemTests = async (filteredItems, global, pmRoot) => {
161
+ const itemTests = [];
162
+ let linkedTests = 0;
163
+ for (const item of filteredItems) {
164
+ const readResult = await runTest(item.id, { run: false }, {
165
+ ...global,
166
+ path: pmRoot,
167
+ });
168
+ linkedTests += readResult.tests.length;
169
+ itemTests.push({ item, tests: readResult.tests });
170
+ }
171
+ return { itemTests, linkedTests };
172
+ };
173
+ const selectTestAllItems = async (params) => {
174
+ const statusRegistry = resolveRuntimeStatusRegistry(params.settings.schema);
175
+ const typeRegistry = resolveItemTypeRegistry(params.settings, getActiveExtensionRegistrations());
176
+ const statusFilter = parseStatus(params.options.status, statusRegistry);
177
+ const limitFilter = parseNonNegativeInteger(params.options.limit, "--limit");
178
+ const offsetFilter = parseNonNegativeInteger(params.options.offset, "--offset") ?? 0;
179
+ const allItems = await listAllItemMetadataLight(params.pmRoot, params.settings.item_format, typeRegistry.type_to_folder, undefined, params.settings.schema);
180
+ const statusFilteredItems = allItems
181
+ .filter((item) => (statusFilter ? item.status === statusFilter : true))
182
+ .sort((a, b) => a.id.localeCompare(b.id));
183
+ const filteredItems = limitFilter === undefined
184
+ ? statusFilteredItems.slice(offsetFilter)
185
+ : statusFilteredItems.slice(offsetFilter, offsetFilter + limitFilter);
186
+ return { filteredItems, statusFilter, limitFilter, offsetFilter };
187
+ };
188
+ const buildEffectiveTimeoutByKey = (itemTests) => {
189
+ const effectiveTimeoutByKey = new Map();
190
+ for (const { tests } of itemTests) {
191
+ for (const test of tests) {
192
+ const key = buildLinkedTestKey(test);
193
+ if (!effectiveTimeoutByKey.has(key)) {
194
+ effectiveTimeoutByKey.set(key, test.timeout_seconds);
195
+ continue;
196
+ }
197
+ effectiveTimeoutByKey.set(key, maxTimeoutSeconds(effectiveTimeoutByKey.get(key), test.timeout_seconds));
198
+ }
199
+ }
200
+ return effectiveTimeoutByKey;
201
+ };
202
+ const runTestAllItem = async (entry, context) => {
203
+ const testsToRun = [];
204
+ const keyedTests = entry.tests.map((test) => {
205
+ const key = buildLinkedTestKey(test);
206
+ const duplicate = context.seenTestKeys.has(key);
207
+ if (!duplicate) {
208
+ context.seenTestKeys.add(key);
209
+ const effectiveTimeoutSeconds = context.effectiveTimeoutByKey.get(key);
210
+ testsToRun.push(effectiveTimeoutSeconds === undefined
211
+ ? test
212
+ : { ...test, timeout_seconds: effectiveTimeoutSeconds });
213
+ }
214
+ return { test, key, duplicate };
215
+ });
216
+ const executedResults = testsToRun.length > 0
217
+ ? await runLinkedTests(testsToRun, context.defaultTimeoutSeconds, {
218
+ progress: context.options.progress,
219
+ sourceRoots: context.sourceRoots,
220
+ envSet: context.options.envSet,
221
+ envClear: context.options.envClear,
222
+ sharedHostSafe: context.options.sharedHostSafe,
223
+ pmContext: context.options.pmContext,
224
+ overrideLinkedPmContext: context.options.overrideLinkedPmContext,
225
+ failOnContextMismatch: context.options.failOnContextMismatch,
226
+ failOnEmptyTestRun: context.options.failOnEmptyTestRun,
227
+ requireAssertionsForPm: context.options.requireAssertionsForPm,
228
+ checkContext: context.options.checkContext,
229
+ autoPmContext: context.options.autoPmContext,
230
+ })
231
+ : [];
232
+ let executedIndex = 0;
233
+ const runResults = keyedTests.map(({ test, key, duplicate }) => {
234
+ if (!duplicate) {
235
+ const executed = executedResults[executedIndex];
236
+ executedIndex += 1;
237
+ return executed;
238
+ }
239
+ return {
240
+ command: test.command,
241
+ path: test.path,
242
+ status: "skipped",
243
+ error: `Duplicate linked test skipped (key=${key}).`,
244
+ };
245
+ });
246
+ const summary = countStatuses(runResults);
247
+ const failureCategories = countFailureCategories(runResults);
248
+ const trackingWarnings = await appendTestAllItemTracking(entry, summary, context);
249
+ return {
250
+ passed: summary.passed,
251
+ failed: summary.failed,
252
+ skipped: summary.skipped,
253
+ trackingWarnings,
254
+ failureCategories,
255
+ result: {
256
+ ok: summary.failed === 0 &&
257
+ !(context.options.failOnSkipped === true && summary.skipped > 0),
258
+ id: entry.item.id,
259
+ status: entry.item.status,
260
+ test_count: entry.tests.length,
261
+ passed: summary.passed,
262
+ failed: summary.failed,
263
+ skipped: summary.skipped,
264
+ run_results: runResults,
265
+ failure_categories: failureCategories,
266
+ },
267
+ };
268
+ };
269
+ /** Resolves whether skip policy makes a tracked item run fail. */
270
+ const trackedRunFailed = (summary, options) => [
271
+ summary.failed > 0,
272
+ options.failOnSkipped === true && summary.skipped > 0,
273
+ ].includes(true);
274
+ /** Projects true flags while keeping false values absent from persisted rows. */
275
+ const optionalTrue = (value) => value ? true : undefined;
276
+ const appendTestAllItemTracking = async (entry, summary, context) => {
277
+ if (!context.trackingEnabled) {
278
+ return [];
279
+ }
280
+ try {
281
+ const failed = trackedRunFailed(summary, context.options);
282
+ await appendTrackedTestRunSummary({
283
+ pmRoot: context.pmRoot,
284
+ settings: context.settings,
285
+ itemId: entry.item.id,
286
+ author: context.trackingAuthor,
287
+ message: `Track test-all run summary (${context.trackingRunId})`,
288
+ entry: {
289
+ run_id: context.trackingRunId,
290
+ kind: "test-all",
291
+ status: failed ? "failed" : "passed",
292
+ started_at: context.runStartedAt,
293
+ finished_at: nowIso(),
294
+ recorded_at: nowIso(),
295
+ attempt: context.trackingAttempt,
296
+ resumed_from: context.trackingResumedFrom,
297
+ passed: summary.passed,
298
+ failed: summary.failed,
299
+ skipped: summary.skipped,
300
+ items: 1,
301
+ linked_tests: entry.tests.length,
302
+ fail_on_skipped_triggered: optionalTrue(context.options.failOnSkipped === true && summary.skipped > 0),
303
+ },
304
+ });
305
+ }
306
+ catch (error) {
307
+ return [
308
+ `test_result_tracking_failed:${entry.item.id}:${formatTrackingError(error)}`,
309
+ ];
310
+ }
311
+ return [];
312
+ };
313
+ /** Parses the optional background-attempt environment contract. */
314
+ const resolveTrackingAttempt = () => {
315
+ const raw = process.env.PM_BACKGROUND_TEST_RUN_ATTEMPT?.trim();
316
+ const parsed = raw ? Number.parseInt(raw, 10) : Number.NaN;
317
+ return Number.isFinite(parsed) && parsed >= 1 ? parsed : undefined;
318
+ };
319
+ /** Normalizes an optional non-blank environment value. */
320
+ const resolveOptionalEnvironmentValue = (value) => {
321
+ const trimmed = value?.trim();
322
+ return trimmed && trimmed.length > 0 ? trimmed : undefined;
323
+ };
324
+ const buildTestAllItemRunContext = (params) => {
325
+ return {
326
+ pmRoot: params.pmRoot,
327
+ settings: params.settings,
328
+ options: params.options,
329
+ defaultTimeoutSeconds: params.defaultTimeoutSeconds,
330
+ sourceRoots: {
331
+ projectPmRoot: params.pmRoot,
332
+ globalPmRoot: resolveGlobalPmRoot(process.cwd()),
333
+ },
334
+ seenTestKeys: new Set(),
335
+ effectiveTimeoutByKey: buildEffectiveTimeoutByKey(params.itemTests),
336
+ trackingEnabled: params.settings.testing.record_results_to_items === true,
337
+ trackingAuthor: resolveAuthor(undefined, params.settings.author_default),
338
+ trackingRunId: resolveTrackedRunId(),
339
+ trackingAttempt: resolveTrackingAttempt(),
340
+ trackingResumedFrom: resolveOptionalEnvironmentValue(process.env.PM_BACKGROUND_TEST_RUN_RESUMED_FROM),
341
+ runStartedAt: params.runStartedAt,
342
+ };
343
+ };
344
+ const initializeTestAllAccumulation = (options, linkedTests, filteredItems) => {
345
+ const accumulation = {
346
+ results: [],
347
+ passed: 0,
348
+ failed: 0,
349
+ skipped: 0,
350
+ failureCategories: countFailureCategories([]),
351
+ trackingWarnings: [],
352
+ };
353
+ const failOnEmptyTestRunTriggered = options.failOnEmptyTestRun === true && linkedTests === 0;
354
+ if (failOnEmptyTestRunTriggered) {
355
+ accumulation.failed += 1;
356
+ accumulation.failureCategories.empty_run += 1;
357
+ accumulation.trackingWarnings.push(`empty_linked_test_selection:items=${filteredItems.length};linked_tests=0;fail_on_empty_test_run=true`);
358
+ }
359
+ return { accumulation, failOnEmptyTestRunTriggered };
360
+ };
361
+ const runTestAllItems = async (itemTests, context, accumulation) => {
362
+ for (const [itemIndex, entry] of itemTests.entries()) {
363
+ emitTestAllProgress(context.options, `item ${itemIndex + 1}/${itemTests.length} start id=${entry.item.id} linked_tests=${entry.tests.length}`);
364
+ const execution = await runTestAllItem(entry, context);
365
+ mergeFailureCategoryCounts(accumulation.failureCategories, execution.failureCategories);
366
+ accumulation.passed += execution.passed;
367
+ accumulation.failed += execution.failed;
368
+ accumulation.skipped += execution.skipped;
369
+ accumulation.trackingWarnings.push(...execution.trackingWarnings);
370
+ accumulation.results.push(execution.result);
371
+ emitTestAllProgress(context.options, `item ${itemIndex + 1}/${itemTests.length} end id=${entry.item.id}` +
372
+ ` status=${execution.failed === 0 ? "passed" : "failed"}` +
373
+ ` passed=${execution.passed} failed=${execution.failed} skipped=${execution.skipped}`);
374
+ }
375
+ };
376
+ const appendContextPreflightWarning = (options, accumulation) => {
377
+ if (options.checkContext !== true) {
378
+ return;
379
+ }
380
+ const allRunResults = accumulation.results.flatMap((entry) => entry.run_results);
381
+ const preflight = summarizeContextPreflight(allRunResults);
382
+ accumulation.trackingWarnings.push(`context_preflight:checked_pm_commands=${preflight.checked_pm_commands};` +
383
+ `tracker_read_commands=${preflight.tracker_read_commands};` +
384
+ `mismatches=${preflight.mismatches};` +
385
+ `auto_remediated=${preflight.auto_remediated}`);
386
+ };
387
+ const buildTestAllResult = (params) => {
388
+ return {
389
+ ok: params.ok,
390
+ totals: {
391
+ items: params.filteredItems.length,
392
+ linked_tests: params.linkedTests,
393
+ passed: params.accumulation.passed,
394
+ failed: params.accumulation.failed,
395
+ skipped: params.accumulation.skipped,
396
+ failure_categories: params.accumulation.failureCategories,
397
+ },
398
+ failed: params.accumulation.failed,
399
+ passed: params.accumulation.passed,
400
+ skipped: params.accumulation.skipped,
401
+ fail_on_skipped_triggered: params.failOnSkippedTriggered ? true : undefined,
402
+ fail_on_empty_test_run_triggered: params.failOnEmptyTestRunTriggered
403
+ ? true
404
+ : undefined,
405
+ warnings: params.accumulation.trackingWarnings.length > 0
406
+ ? params.accumulation.trackingWarnings
407
+ : undefined,
408
+ results: params.accumulation.results,
409
+ };
410
+ };
411
+ /** Formats the selected test-all window without branching command execution. */
412
+ const buildTestAllSelectionProgress = (params) => [
413
+ `selection items=${params.filteredItems.length}`,
414
+ `linked_tests=${params.linkedTests}`,
415
+ params.statusFilter === undefined ? "" : `status=${params.statusFilter}`,
416
+ params.limitFilter === undefined ? "" : `limit=${params.limitFilter}`,
417
+ params.offsetFilter > 0 ? `offset=${params.offsetFilter}` : "",
418
+ ]
419
+ .filter((entry) => entry.length > 0)
420
+ .join(" ");
421
+ /** Loads the tracker selection and linked tests for one test-all run. */
422
+ const prepareTestAllRun = async (options, global) => {
423
+ const pmRoot = resolvePmRoot(process.cwd(), global.path);
424
+ if (!(await pathExists(getSettingsPath(pmRoot)))) {
425
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
426
+ }
427
+ const settings = await readSettings(pmRoot);
428
+ const selection = await selectTestAllItems({ pmRoot, settings, options });
429
+ const defaultTimeoutSeconds = parseTimeout(options.timeout);
430
+ const runStartedAt = nowIso();
431
+ const collected = await collectTestAllItemTests(selection.filteredItems, global, pmRoot);
432
+ emitTestAllProgress(options, buildTestAllSelectionProgress({
433
+ ...selection,
434
+ linkedTests: collected.linkedTests,
435
+ }));
436
+ return {
437
+ pmRoot,
438
+ settings,
439
+ filteredItems: selection.filteredItems,
440
+ itemTests: collected.itemTests,
441
+ linkedTests: collected.linkedTests,
442
+ defaultTimeoutSeconds,
443
+ runStartedAt,
444
+ };
445
+ };
446
+ /** Resolves aggregate strict-policy state after every item has run. */
447
+ const resolveTestAllOutcome = (params) => {
448
+ const failOnSkippedTriggered = params.options.failOnSkipped === true && params.accumulation.skipped > 0;
449
+ const ok = ![
450
+ params.accumulation.failed > 0,
451
+ failOnSkippedTriggered,
452
+ params.failOnEmptyTestRunTriggered,
453
+ ].includes(true);
454
+ return { failOnSkippedTriggered, ok };
455
+ };
456
+ /** Implements run test all for the public runtime surface of this module. */
457
+ export const runTestAll = async (options, global) => {
458
+ const prepared = await prepareTestAllRun(options, global);
459
+ const { accumulation, failOnEmptyTestRunTriggered } = initializeTestAllAccumulation(options, prepared.linkedTests, prepared.filteredItems);
460
+ const itemRunContext = buildTestAllItemRunContext({
461
+ pmRoot: prepared.pmRoot,
462
+ settings: prepared.settings,
463
+ options,
464
+ itemTests: prepared.itemTests,
465
+ defaultTimeoutSeconds: prepared.defaultTimeoutSeconds,
466
+ runStartedAt: prepared.runStartedAt,
467
+ });
468
+ await runTestAllItems(prepared.itemTests, itemRunContext, accumulation);
469
+ appendContextPreflightWarning(options, accumulation);
470
+ const outcome = resolveTestAllOutcome({
471
+ options,
472
+ accumulation,
473
+ failOnEmptyTestRunTriggered,
474
+ });
475
+ emitTestAllProgress(options, `end status=${outcome.ok ? "passed" : "failed"} items=${prepared.filteredItems.length} linked_tests=${prepared.linkedTests}` +
476
+ ` passed=${accumulation.passed} failed=${accumulation.failed} skipped=${accumulation.skipped}`);
477
+ return buildTestAllResult({
478
+ ok: outcome.ok,
479
+ filteredItems: prepared.filteredItems,
480
+ linkedTests: prepared.linkedTests,
481
+ accumulation,
482
+ failOnSkippedTriggered: outcome.failOnSkippedTriggered,
483
+ failOnEmptyTestRunTriggered,
484
+ });
485
+ };
486
+ /** Public contract for test only test all, shared by SDK and presentation-layer consumers. */
487
+ export const _testOnlyTestAll = {
488
+ buildLinkedTestKey,
489
+ formatTrackingError,
490
+ };
491
+ //# sourceMappingURL=batch.js.map
492
+ //# debugId=524ce953-9a81-51e3-a428-689aecec60fc
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sources":["sdk/test/batch.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module sdk/test/batch\n *\n * Implements the pm test all command surface and its agent-facing runtime behavior.\n */\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { parseOptionalNumber } from \"../../core/item/parse.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport {\n resolveRuntimeStatusRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.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 { listAllItemMetadataLight } from \"../../core/store/item-store.js\";\nimport {\n getSettingsPath,\n resolveGlobalPmRoot,\n resolvePmRoot,\n} from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { appendTrackedTestRunSummary } from \"../../core/test/item-test-run-tracking.js\";\nimport { resolveAuthor } from \"../../core/shared/author.js\";\nimport type { ItemStatus, LinkedTest } from \"../../types/index.js\";\nimport {\n countFailureCategories,\n runLinkedTests,\n runTest,\n summarizeContextPreflight,\n type LinkedTestFailureCategory,\n type TestRunResult,\n} from \"./execution.js\";\n\n/** Documents the test all command options payload exchanged by command, SDK, and package integrations. */\nexport interface TestAllCommandOptions {\n /** Lifecycle state reported for status. */\n status?: string;\n /** Value that configures or reports limit for this contract. */\n limit?: string;\n /** Value that configures or reports offset for this contract. */\n offset?: string;\n /** Value that configures or reports timeout for this contract. */\n timeout?: string;\n /** Value that configures or reports progress for this contract. */\n progress?: boolean;\n /** Value that configures or reports env set for this contract. */\n envSet?: string[];\n /** Value that configures or reports env clear for this contract. */\n envClear?: string[];\n /** Value that configures or reports shared host safe for this contract. */\n sharedHostSafe?: boolean;\n /** Value that configures or reports pm context for this contract. */\n pmContext?: string;\n /** Value that configures or reports override linked pm context for this contract. */\n overrideLinkedPmContext?: boolean;\n /** Value that configures or reports fail on context mismatch for this contract. */\n failOnContextMismatch?: boolean;\n /** Value that configures or reports fail on skipped for this contract. */\n failOnSkipped?: boolean;\n /** Value that configures or reports fail on empty test run for this contract. */\n failOnEmptyTestRun?: boolean;\n /** Value that configures or reports require assertions for pm for this contract. */\n requireAssertionsForPm?: boolean;\n /** Value that configures or reports check context for this contract. */\n checkContext?: boolean;\n /** Value that configures or reports auto pm context for this contract. */\n autoPmContext?: boolean;\n}\n\n/** Documents the test all item result payload exchanged by command, SDK, and package integrations. */\nexport interface TestAllItemResult {\n /** Whether the operation completed without a blocking failure. */\n ok: boolean;\n /** Stable identifier used to reference this record across commands and storage. */\n id: string;\n /** Lifecycle state reported for status. */\n status: ItemStatus;\n /** Number of test entries represented by this result. */\n test_count: number;\n /** Value that configures or reports passed for this contract. */\n passed: number;\n /** Value that configures or reports failed for this contract. */\n failed: number;\n /** Value that configures or reports skipped for this contract. */\n skipped: number;\n /** Executes the results operation through the package runtime. */\n run_results: TestRunResult[];\n /** Value that configures or reports failure categories for this contract. */\n failure_categories: Record<LinkedTestFailureCategory, number>;\n}\n\n/** Documents the test all result payload exchanged by command, SDK, and package integrations. */\nexport interface TestAllResult {\n /** Whether the operation completed without a blocking failure. */\n ok: boolean;\n /** Value that configures or reports totals for this contract. */\n totals: {\n items: number;\n linked_tests: number;\n passed: number;\n failed: number;\n skipped: number;\n failure_categories: Record<LinkedTestFailureCategory, number>;\n };\n /** Value that configures or reports failed for this contract. */\n failed: number;\n /** Value that configures or reports passed for this contract. */\n passed: number;\n /** Value that configures or reports skipped for this contract. */\n skipped: number;\n /** Value that configures or reports fail on skipped triggered for this contract. */\n fail_on_skipped_triggered?: boolean;\n /** Value that configures or reports fail on empty test run triggered for this contract. */\n fail_on_empty_test_run_triggered?: boolean;\n /** Value that configures or reports warnings for this contract. */\n warnings?: string[];\n /** Value that configures or reports results for this contract. */\n results: TestAllItemResult[];\n}\n\ntype TestAllSelectedItem = Awaited<\n ReturnType<typeof listAllItemMetadataLight>\n>[number];\n\ninterface TestAllItemTests {\n item: TestAllSelectedItem;\n tests: LinkedTest[];\n}\n\ninterface TestAllItemRunContext {\n pmRoot: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n options: TestAllCommandOptions;\n defaultTimeoutSeconds: number | undefined;\n sourceRoots: { projectPmRoot: string; globalPmRoot: string };\n seenTestKeys: Set<string>;\n effectiveTimeoutByKey: Map<string, number | undefined>;\n trackingEnabled: boolean;\n trackingAuthor: string;\n trackingRunId: string;\n trackingAttempt: number | undefined;\n trackingResumedFrom: string | undefined;\n runStartedAt: string;\n}\n\ninterface TestAllItemExecution {\n result: TestAllItemResult;\n passed: number;\n failed: number;\n skipped: number;\n trackingWarnings: string[];\n failureCategories: Record<LinkedTestFailureCategory, number>;\n}\n\ninterface TestAllSelection {\n filteredItems: TestAllSelectedItem[];\n statusFilter: ItemStatus | undefined;\n limitFilter: number | undefined;\n offsetFilter: number;\n}\n\ninterface TestAllAccumulation {\n results: TestAllItemResult[];\n passed: number;\n failed: number;\n skipped: number;\n failureCategories: Record<LinkedTestFailureCategory, number>;\n trackingWarnings: string[];\n}\n\nconst parseStatus = (\n raw: string | undefined,\n statusRegistry: RuntimeStatusRegistry,\n): ItemStatus | undefined => {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = normalizeStatusInput(raw, statusRegistry);\n if (!normalized) {\n const allowedStatuses = statusRegistry.definitions.map(\n (definition) => definition.id,\n );\n throw new PmCliError(\n `Invalid --status value \"${raw}\". Allowed: ${allowedStatuses.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized;\n};\n\nconst parseTimeout = (raw: string | undefined): number | undefined => {\n if (raw === undefined) {\n return undefined;\n }\n const parsed = parseOptionalNumber(raw, \"timeout\");\n if (parsed <= 0) {\n throw new PmCliError(\"timeout must be a positive number\", EXIT_CODE.USAGE);\n }\n return parsed;\n};\n\nconst parseNonNegativeInteger = (\n raw: string | undefined,\n flag: string,\n): number | undefined => {\n if (raw === undefined) {\n return undefined;\n }\n const parsed = Number(raw);\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new PmCliError(\n `${flag} must be a non-negative integer`,\n EXIT_CODE.USAGE,\n );\n }\n return parsed;\n};\n\nconst formatTrackingError = (error: unknown): string => {\n return error instanceof Error ? error.message : String(error);\n};\n\nconst resolveTrackedRunId = (): string => {\n const fromEnv = process.env.PM_BACKGROUND_TEST_RUN_ID?.trim();\n if (fromEnv && fromEnv.length > 0) {\n return fromEnv;\n }\n return `test-all-local-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;\n};\n\nconst normalizeCommand = (command: string): string => {\n return command.trim().replaceAll(/\\s+/g, \" \");\n};\n\nconst normalizeEnvSetSignature = (value: LinkedTest[\"env_set\"]): string => {\n if (!value || Object.keys(value).length === 0) {\n return \"{}\";\n }\n return JSON.stringify(\n Object.fromEntries(\n Object.entries(value).sort(([left], [right]) =>\n left.localeCompare(right),\n ),\n ),\n );\n};\n\nconst normalizeEnvClearSignature = (value: LinkedTest[\"env_clear\"]): string => {\n if (!value || value.length === 0) {\n return \"[]\";\n }\n return JSON.stringify(\n [...value].sort((left, right) => left.localeCompare(right)),\n );\n};\n\nconst normalizePmContextModeSignature = (\n value: LinkedTest[\"pm_context_mode\"],\n): string => {\n const normalized = value?.trim().toLowerCase();\n return normalized && normalized.length > 0 ? normalized : \"none\";\n};\n\n/** Sorts and deduplicates optional assertion string lists. */\nconst normalizeAssertionStrings = (values: string[] | undefined): string[] =>\n [...new Set(values ?? [])].sort((left, right) => left.localeCompare(right));\n\n/** Sorts optional assertion maps into deterministic key order. */\nconst normalizeAssertionMap = <Value>(\n value: Record<string, Value> | undefined,\n): Record<string, Value> =>\n Object.fromEntries(\n Object.entries(value ?? {}).sort(([left], [right]) =>\n left.localeCompare(right),\n ),\n );\n\n/** Keeps a numeric assertion threshold while omitting other runtime shapes. */\nconst normalizeAssertionLineCount = (value: unknown): number | undefined =>\n typeof value === \"number\" ? value : undefined;\n\nconst normalizeAssertionSignature = (test: LinkedTest): string => {\n const normalized = {\n assert_stdout_contains: normalizeAssertionStrings(\n test.assert_stdout_contains,\n ),\n assert_stdout_regex: normalizeAssertionStrings(test.assert_stdout_regex),\n assert_stderr_contains: normalizeAssertionStrings(\n test.assert_stderr_contains,\n ),\n assert_stderr_regex: normalizeAssertionStrings(test.assert_stderr_regex),\n assert_stdout_min_lines: normalizeAssertionLineCount(\n test.assert_stdout_min_lines,\n ),\n assert_json_field_equals: normalizeAssertionMap(\n test.assert_json_field_equals,\n ),\n assert_json_field_gte: normalizeAssertionMap(test.assert_json_field_gte),\n };\n return JSON.stringify(normalized);\n};\n\n/** Resolves a linked test's command-or-path identity segment. */\nconst resolveLinkedTestTargetSignature = (test: LinkedTest): string => {\n const command = resolveOptionalEnvironmentValue(test.command);\n if (command !== undefined) {\n return `command:${test.scope}:${normalizeCommand(command)}`;\n }\n return `path:${test.scope}:${resolveOptionalEnvironmentValue(test.path) ?? \"\"}`;\n};\n\nconst buildLinkedTestKey = (test: LinkedTest): string => {\n const envSet = normalizeEnvSetSignature(test.env_set);\n const envClear = normalizeEnvClearSignature(test.env_clear);\n const pmContextMode = normalizePmContextModeSignature(test.pm_context_mode);\n const sharedHostSafe = test.shared_host_safe === true ? \"true\" : \"false\";\n const assertions = normalizeAssertionSignature(test);\n return `${resolveLinkedTestTargetSignature(test)}:${envSet}:${envClear}:${pmContextMode}:${sharedHostSafe}:${assertions}`;\n};\n\nconst maxTimeoutSeconds = (\n current: number | undefined,\n candidate: number | undefined,\n): number | undefined => {\n if (candidate === undefined) {\n /* c8 ignore next - exercised implicitly by duplicate timeout normalization */\n return current;\n }\n if (current === undefined || candidate > current) {\n return candidate;\n }\n return current;\n};\n\nconst countStatuses = (\n runResults: TestRunResult[],\n): {\n passed: number;\n failed: number;\n skipped: number;\n} => {\n let passed = 0;\n let failed = 0;\n let skipped = 0;\n for (const result of runResults) {\n if (result.status === \"passed\") {\n passed += 1;\n continue;\n }\n if (result.status === \"failed\") {\n failed += 1;\n continue;\n }\n skipped += 1;\n }\n return { passed, failed, skipped };\n};\n\nconst mergeFailureCategoryCounts = (\n target: Record<LinkedTestFailureCategory, number>,\n source: Record<LinkedTestFailureCategory, number>,\n): void => {\n for (const [key, value] of Object.entries(source)) {\n target[key as LinkedTestFailureCategory] += value;\n }\n};\n\nconst emitTestAllProgress = (\n options: TestAllCommandOptions,\n message: string,\n): void => {\n if (options.progress !== true) {\n return;\n }\n try {\n process.stderr.write(`[pm test-all] ${message}\\n`);\n } catch {\n // Ignore transient stderr write failures.\n }\n};\n\nconst collectTestAllItemTests = async (\n filteredItems: TestAllSelectedItem[],\n global: GlobalOptions,\n pmRoot: string,\n): Promise<{ itemTests: TestAllItemTests[]; linkedTests: number }> => {\n const itemTests: TestAllItemTests[] = [];\n let linkedTests = 0;\n for (const item of filteredItems) {\n const readResult = await runTest(\n item.id,\n { run: false },\n {\n ...global,\n path: pmRoot,\n },\n );\n linkedTests += readResult.tests.length;\n itemTests.push({ item, tests: readResult.tests });\n }\n return { itemTests, linkedTests };\n};\n\nconst selectTestAllItems = async (params: {\n pmRoot: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n options: TestAllCommandOptions;\n}): Promise<TestAllSelection> => {\n const statusRegistry = resolveRuntimeStatusRegistry(params.settings.schema);\n const typeRegistry = resolveItemTypeRegistry(\n params.settings,\n getActiveExtensionRegistrations(),\n );\n const statusFilter = parseStatus(params.options.status, statusRegistry);\n const limitFilter = parseNonNegativeInteger(params.options.limit, \"--limit\");\n const offsetFilter =\n parseNonNegativeInteger(params.options.offset, \"--offset\") ?? 0;\n const allItems = await listAllItemMetadataLight(\n params.pmRoot,\n params.settings.item_format,\n typeRegistry.type_to_folder,\n undefined,\n params.settings.schema,\n );\n const statusFilteredItems = allItems\n .filter((item) => (statusFilter ? item.status === statusFilter : true))\n .sort((a, b) => a.id.localeCompare(b.id));\n const filteredItems =\n limitFilter === undefined\n ? statusFilteredItems.slice(offsetFilter)\n : statusFilteredItems.slice(offsetFilter, offsetFilter + limitFilter);\n return { filteredItems, statusFilter, limitFilter, offsetFilter };\n};\n\nconst buildEffectiveTimeoutByKey = (\n itemTests: TestAllItemTests[],\n): Map<string, number | undefined> => {\n const effectiveTimeoutByKey = new Map<string, number | undefined>();\n for (const { tests } of itemTests) {\n for (const test of tests) {\n const key = buildLinkedTestKey(test);\n if (!effectiveTimeoutByKey.has(key)) {\n effectiveTimeoutByKey.set(key, test.timeout_seconds);\n continue;\n }\n effectiveTimeoutByKey.set(\n key,\n maxTimeoutSeconds(effectiveTimeoutByKey.get(key), test.timeout_seconds),\n );\n }\n }\n return effectiveTimeoutByKey;\n};\n\nconst runTestAllItem = async (\n entry: TestAllItemTests,\n context: TestAllItemRunContext,\n): Promise<TestAllItemExecution> => {\n const testsToRun: LinkedTest[] = [];\n const keyedTests = entry.tests.map((test) => {\n const key = buildLinkedTestKey(test);\n const duplicate = context.seenTestKeys.has(key);\n if (!duplicate) {\n context.seenTestKeys.add(key);\n const effectiveTimeoutSeconds = context.effectiveTimeoutByKey.get(key);\n testsToRun.push(\n effectiveTimeoutSeconds === undefined\n ? test\n : { ...test, timeout_seconds: effectiveTimeoutSeconds },\n );\n }\n return { test, key, duplicate };\n });\n\n const executedResults =\n testsToRun.length > 0\n ? await runLinkedTests(testsToRun, context.defaultTimeoutSeconds, {\n progress: context.options.progress,\n sourceRoots: context.sourceRoots,\n envSet: context.options.envSet,\n envClear: context.options.envClear,\n sharedHostSafe: context.options.sharedHostSafe,\n pmContext: context.options.pmContext,\n overrideLinkedPmContext: context.options.overrideLinkedPmContext,\n failOnContextMismatch: context.options.failOnContextMismatch,\n failOnEmptyTestRun: context.options.failOnEmptyTestRun,\n requireAssertionsForPm: context.options.requireAssertionsForPm,\n checkContext: context.options.checkContext,\n autoPmContext: context.options.autoPmContext,\n })\n : [];\n let executedIndex = 0;\n const runResults = keyedTests.map(({ test, key, duplicate }) => {\n if (!duplicate) {\n const executed = executedResults[executedIndex];\n executedIndex += 1;\n return executed;\n }\n return {\n command: test.command,\n path: test.path,\n status: \"skipped\" as const,\n error: `Duplicate linked test skipped (key=${key}).`,\n };\n });\n const summary = countStatuses(runResults);\n const failureCategories = countFailureCategories(runResults);\n const trackingWarnings = await appendTestAllItemTracking(\n entry,\n summary,\n context,\n );\n return {\n passed: summary.passed,\n failed: summary.failed,\n skipped: summary.skipped,\n trackingWarnings,\n failureCategories,\n result: {\n ok:\n summary.failed === 0 &&\n !(context.options.failOnSkipped === true && summary.skipped > 0),\n id: entry.item.id,\n status: entry.item.status,\n test_count: entry.tests.length,\n passed: summary.passed,\n failed: summary.failed,\n skipped: summary.skipped,\n run_results: runResults,\n failure_categories: failureCategories,\n },\n };\n};\n\n/** Resolves whether skip policy makes a tracked item run fail. */\nconst trackedRunFailed = (\n summary: { passed: number; failed: number; skipped: number },\n options: TestAllCommandOptions,\n): boolean =>\n [\n summary.failed > 0,\n options.failOnSkipped === true && summary.skipped > 0,\n ].includes(true);\n\n/** Projects true flags while keeping false values absent from persisted rows. */\nconst optionalTrue = (value: boolean): true | undefined =>\n value ? true : undefined;\n\nconst appendTestAllItemTracking = async (\n entry: TestAllItemTests,\n summary: { passed: number; failed: number; skipped: number },\n context: TestAllItemRunContext,\n): Promise<string[]> => {\n if (!context.trackingEnabled) {\n return [];\n }\n try {\n const failed = trackedRunFailed(summary, context.options);\n await appendTrackedTestRunSummary({\n pmRoot: context.pmRoot,\n settings: context.settings,\n itemId: entry.item.id,\n author: context.trackingAuthor,\n message: `Track test-all run summary (${context.trackingRunId})`,\n entry: {\n run_id: context.trackingRunId,\n kind: \"test-all\",\n status: failed ? \"failed\" : \"passed\",\n started_at: context.runStartedAt,\n finished_at: nowIso(),\n recorded_at: nowIso(),\n attempt: context.trackingAttempt,\n resumed_from: context.trackingResumedFrom,\n passed: summary.passed,\n failed: summary.failed,\n skipped: summary.skipped,\n items: 1,\n linked_tests: entry.tests.length,\n fail_on_skipped_triggered: optionalTrue(\n context.options.failOnSkipped === true && summary.skipped > 0,\n ),\n },\n });\n } catch (error: unknown) {\n return [\n `test_result_tracking_failed:${entry.item.id}:${formatTrackingError(error)}`,\n ];\n }\n return [];\n};\n\n/** Parses the optional background-attempt environment contract. */\nconst resolveTrackingAttempt = (): number | undefined => {\n const raw = process.env.PM_BACKGROUND_TEST_RUN_ATTEMPT?.trim();\n const parsed = raw ? Number.parseInt(raw, 10) : Number.NaN;\n return Number.isFinite(parsed) && parsed >= 1 ? parsed : undefined;\n};\n\n/** Normalizes an optional non-blank environment value. */\nconst resolveOptionalEnvironmentValue = (\n value: string | undefined,\n): string | undefined => {\n const trimmed = value?.trim();\n return trimmed && trimmed.length > 0 ? trimmed : undefined;\n};\n\nconst buildTestAllItemRunContext = (params: {\n pmRoot: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n options: TestAllCommandOptions;\n itemTests: TestAllItemTests[];\n defaultTimeoutSeconds: number | undefined;\n runStartedAt: string;\n}): TestAllItemRunContext => {\n return {\n pmRoot: params.pmRoot,\n settings: params.settings,\n options: params.options,\n defaultTimeoutSeconds: params.defaultTimeoutSeconds,\n sourceRoots: {\n projectPmRoot: params.pmRoot,\n globalPmRoot: resolveGlobalPmRoot(process.cwd()),\n },\n seenTestKeys: new Set<string>(),\n effectiveTimeoutByKey: buildEffectiveTimeoutByKey(params.itemTests),\n trackingEnabled: params.settings.testing.record_results_to_items === true,\n trackingAuthor: resolveAuthor(undefined, params.settings.author_default),\n trackingRunId: resolveTrackedRunId(),\n trackingAttempt: resolveTrackingAttempt(),\n trackingResumedFrom: resolveOptionalEnvironmentValue(\n process.env.PM_BACKGROUND_TEST_RUN_RESUMED_FROM,\n ),\n runStartedAt: params.runStartedAt,\n };\n};\n\nconst initializeTestAllAccumulation = (\n options: TestAllCommandOptions,\n linkedTests: number,\n filteredItems: TestAllSelectedItem[],\n): {\n accumulation: TestAllAccumulation;\n failOnEmptyTestRunTriggered: boolean;\n} => {\n const accumulation: TestAllAccumulation = {\n results: [],\n passed: 0,\n failed: 0,\n skipped: 0,\n failureCategories: countFailureCategories([]),\n trackingWarnings: [],\n };\n const failOnEmptyTestRunTriggered =\n options.failOnEmptyTestRun === true && linkedTests === 0;\n if (failOnEmptyTestRunTriggered) {\n accumulation.failed += 1;\n accumulation.failureCategories.empty_run += 1;\n accumulation.trackingWarnings.push(\n `empty_linked_test_selection:items=${filteredItems.length};linked_tests=0;fail_on_empty_test_run=true`,\n );\n }\n return { accumulation, failOnEmptyTestRunTriggered };\n};\n\nconst runTestAllItems = async (\n itemTests: TestAllItemTests[],\n context: TestAllItemRunContext,\n accumulation: TestAllAccumulation,\n): Promise<void> => {\n for (const [itemIndex, entry] of itemTests.entries()) {\n emitTestAllProgress(\n context.options,\n `item ${itemIndex + 1}/${itemTests.length} start id=${entry.item.id} linked_tests=${entry.tests.length}`,\n );\n const execution = await runTestAllItem(entry, context);\n mergeFailureCategoryCounts(\n accumulation.failureCategories,\n execution.failureCategories,\n );\n accumulation.passed += execution.passed;\n accumulation.failed += execution.failed;\n accumulation.skipped += execution.skipped;\n accumulation.trackingWarnings.push(...execution.trackingWarnings);\n accumulation.results.push(execution.result);\n emitTestAllProgress(\n context.options,\n `item ${itemIndex + 1}/${itemTests.length} end id=${entry.item.id}` +\n ` status=${execution.failed === 0 ? \"passed\" : \"failed\"}` +\n ` passed=${execution.passed} failed=${execution.failed} skipped=${execution.skipped}`,\n );\n }\n};\n\nconst appendContextPreflightWarning = (\n options: TestAllCommandOptions,\n accumulation: TestAllAccumulation,\n): void => {\n if (options.checkContext !== true) {\n return;\n }\n const allRunResults = accumulation.results.flatMap(\n (entry) => entry.run_results,\n );\n const preflight = summarizeContextPreflight(allRunResults);\n accumulation.trackingWarnings.push(\n `context_preflight:checked_pm_commands=${preflight.checked_pm_commands};` +\n `tracker_read_commands=${preflight.tracker_read_commands};` +\n `mismatches=${preflight.mismatches};` +\n `auto_remediated=${preflight.auto_remediated}`,\n );\n};\n\nconst buildTestAllResult = (params: {\n ok: boolean;\n filteredItems: TestAllSelectedItem[];\n linkedTests: number;\n accumulation: TestAllAccumulation;\n failOnSkippedTriggered: boolean;\n failOnEmptyTestRunTriggered: boolean;\n}): TestAllResult => {\n return {\n ok: params.ok,\n totals: {\n items: params.filteredItems.length,\n linked_tests: params.linkedTests,\n passed: params.accumulation.passed,\n failed: params.accumulation.failed,\n skipped: params.accumulation.skipped,\n failure_categories: params.accumulation.failureCategories,\n },\n failed: params.accumulation.failed,\n passed: params.accumulation.passed,\n skipped: params.accumulation.skipped,\n fail_on_skipped_triggered: params.failOnSkippedTriggered ? true : undefined,\n fail_on_empty_test_run_triggered: params.failOnEmptyTestRunTriggered\n ? true\n : undefined,\n warnings:\n params.accumulation.trackingWarnings.length > 0\n ? params.accumulation.trackingWarnings\n : undefined,\n results: params.accumulation.results,\n };\n};\n\ninterface PreparedTestAllRun {\n pmRoot: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n filteredItems: TestAllSelectedItem[];\n itemTests: TestAllItemTests[];\n linkedTests: number;\n defaultTimeoutSeconds: number | undefined;\n runStartedAt: string;\n}\n\n/** Formats the selected test-all window without branching command execution. */\nconst buildTestAllSelectionProgress = (params: {\n filteredItems: TestAllSelectedItem[];\n linkedTests: number;\n statusFilter: ItemStatus | undefined;\n limitFilter: number | undefined;\n offsetFilter: number;\n}): string =>\n [\n `selection items=${params.filteredItems.length}`,\n `linked_tests=${params.linkedTests}`,\n params.statusFilter === undefined ? \"\" : `status=${params.statusFilter}`,\n params.limitFilter === undefined ? \"\" : `limit=${params.limitFilter}`,\n params.offsetFilter > 0 ? `offset=${params.offsetFilter}` : \"\",\n ]\n .filter((entry) => entry.length > 0)\n .join(\" \");\n\n/** Loads the tracker selection and linked tests for one test-all run. */\nconst prepareTestAllRun = async (\n options: TestAllCommandOptions,\n global: GlobalOptions,\n): Promise<PreparedTestAllRun> => {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(\n `Tracker is not initialized at ${pmRoot}. Run pm init first.`,\n EXIT_CODE.NOT_FOUND,\n );\n }\n const settings = await readSettings(pmRoot);\n const selection = await selectTestAllItems({ pmRoot, settings, options });\n const defaultTimeoutSeconds = parseTimeout(options.timeout);\n const runStartedAt = nowIso();\n const collected = await collectTestAllItemTests(\n selection.filteredItems,\n global,\n pmRoot,\n );\n emitTestAllProgress(\n options,\n buildTestAllSelectionProgress({\n ...selection,\n linkedTests: collected.linkedTests,\n }),\n );\n return {\n pmRoot,\n settings,\n filteredItems: selection.filteredItems,\n itemTests: collected.itemTests,\n linkedTests: collected.linkedTests,\n defaultTimeoutSeconds,\n runStartedAt,\n };\n};\n\n/** Resolves aggregate strict-policy state after every item has run. */\nconst resolveTestAllOutcome = (params: {\n options: TestAllCommandOptions;\n accumulation: TestAllAccumulation;\n failOnEmptyTestRunTriggered: boolean;\n}): { failOnSkippedTriggered: boolean; ok: boolean } => {\n const failOnSkippedTriggered =\n params.options.failOnSkipped === true && params.accumulation.skipped > 0;\n const ok = ![\n params.accumulation.failed > 0,\n failOnSkippedTriggered,\n params.failOnEmptyTestRunTriggered,\n ].includes(true);\n return { failOnSkippedTriggered, ok };\n};\n\n/** Implements run test all for the public runtime surface of this module. */\nexport const runTestAll = async (\n options: TestAllCommandOptions,\n global: GlobalOptions,\n): Promise<TestAllResult> => {\n const prepared = await prepareTestAllRun(options, global);\n const { accumulation, failOnEmptyTestRunTriggered } =\n initializeTestAllAccumulation(\n options,\n prepared.linkedTests,\n prepared.filteredItems,\n );\n const itemRunContext = buildTestAllItemRunContext({\n pmRoot: prepared.pmRoot,\n settings: prepared.settings,\n options,\n itemTests: prepared.itemTests,\n defaultTimeoutSeconds: prepared.defaultTimeoutSeconds,\n runStartedAt: prepared.runStartedAt,\n });\n await runTestAllItems(prepared.itemTests, itemRunContext, accumulation);\n appendContextPreflightWarning(options, accumulation);\n const outcome = resolveTestAllOutcome({\n options,\n accumulation,\n failOnEmptyTestRunTriggered,\n });\n emitTestAllProgress(\n options,\n `end status=${outcome.ok ? \"passed\" : \"failed\"} items=${prepared.filteredItems.length} linked_tests=${prepared.linkedTests}` +\n ` passed=${accumulation.passed} failed=${accumulation.failed} skipped=${accumulation.skipped}`,\n );\n\n return buildTestAllResult({\n ok: outcome.ok,\n filteredItems: prepared.filteredItems,\n linkedTests: prepared.linkedTests,\n accumulation,\n failOnSkippedTriggered: outcome.failOnSkippedTriggered,\n failOnEmptyTestRunTriggered,\n });\n};\n\n/** Public contract for test only test all, shared by SDK and presentation-layer consumers. */\nexport const _testOnlyTestAll = {\n buildLinkedTestKey,\n formatTrackingError,\n};\n"],"names":[],"mappings":"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","debugId":"524ce953-9a81-51e3-a428-689aecec60fc"}
@@ -0,0 +1,6 @@
1
+ /** Public contract for structured linked test keys, shared by SDK and presentation-layer consumers. */
2
+ export declare const STRUCTURED_LINKED_TEST_KEYS: readonly ["command", "cmd", "path", "scope", "timeout", "timeout_seconds", "pm_context_mode", "env_set", "env_clear", "shared_host_safe", "assert_stdout_contains", "assert_stdout_regex", "assert_stderr_contains", "assert_stderr_regex", "assert_stdout_min_lines", "assert_json_field_equals", "assert_json_field_gte", "note"];
3
+ /** Implements looks like structured linked test entry for the public runtime surface of this module. */
4
+ export declare function looksLikeStructuredLinkedTestEntry(raw: string): boolean;
5
+ /** Implements normalize structured linked test entry for the public runtime surface of this module. */
6
+ export declare function normalizeStructuredLinkedTestEntry(kv: Record<string, string>, optionName: "--add" | "--test"): Record<string, string>;