@unbrained/pm-cli 2026.6.30 → 2026.7.2

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 (628) hide show
  1. package/AGENTS.md +2 -0
  2. package/CHANGELOG.md +26 -0
  3. package/dist/cli/bootstrap-args.js +89 -79
  4. package/dist/cli/bootstrap-args.js.map +1 -1
  5. package/dist/cli/commander-usage.d.ts +2 -0
  6. package/dist/cli/commander-usage.js +58 -47
  7. package/dist/cli/commander-usage.js.map +1 -1
  8. package/dist/cli/commands/aggregate.js +102 -79
  9. package/dist/cli/commands/aggregate.js.map +1 -1
  10. package/dist/cli/commands/calendar.js +339 -303
  11. package/dist/cli/commands/calendar.js.map +1 -1
  12. package/dist/cli/commands/close-many.js +89 -68
  13. package/dist/cli/commands/close-many.js.map +1 -1
  14. package/dist/cli/commands/close.js +157 -129
  15. package/dist/cli/commands/close.js.map +1 -1
  16. package/dist/cli/commands/comments-audit.js +50 -42
  17. package/dist/cli/commands/comments-audit.js.map +1 -1
  18. package/dist/cli/commands/config.d.ts +2 -0
  19. package/dist/cli/commands/config.js +443 -879
  20. package/dist/cli/commands/config.js.map +1 -1
  21. package/dist/cli/commands/context.js +365 -287
  22. package/dist/cli/commands/context.js.map +1 -1
  23. package/dist/cli/commands/contracts.js +352 -238
  24. package/dist/cli/commands/contracts.js.map +1 -1
  25. package/dist/cli/commands/create.js +483 -434
  26. package/dist/cli/commands/create.js.map +1 -1
  27. package/dist/cli/commands/dedupe-audit.js +46 -39
  28. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  29. package/dist/cli/commands/dedupe-merge.js +88 -69
  30. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  31. package/dist/cli/commands/extension/bundled-catalog.js +59 -46
  32. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  33. package/dist/cli/commands/extension/doctor.js +129 -78
  34. package/dist/cli/commands/extension/doctor.js.map +1 -1
  35. package/dist/cli/commands/extension/managed-state.js +101 -57
  36. package/dist/cli/commands/extension/managed-state.js.map +1 -1
  37. package/dist/cli/commands/extension/scaffold.d.ts +7 -0
  38. package/dist/cli/commands/extension/scaffold.js +214 -186
  39. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  40. package/dist/cli/commands/extension.d.ts +6 -1
  41. package/dist/cli/commands/extension.js +1034 -902
  42. package/dist/cli/commands/extension.js.map +1 -1
  43. package/dist/cli/commands/get.js +114 -81
  44. package/dist/cli/commands/get.js.map +1 -1
  45. package/dist/cli/commands/health.d.ts +17 -0
  46. package/dist/cli/commands/health.js +446 -307
  47. package/dist/cli/commands/health.js.map +1 -1
  48. package/dist/cli/commands/history-compact.js +209 -140
  49. package/dist/cli/commands/history-compact.js.map +1 -1
  50. package/dist/cli/commands/history-redact.js +162 -119
  51. package/dist/cli/commands/history-redact.js.map +1 -1
  52. package/dist/cli/commands/history-repair.js +120 -85
  53. package/dist/cli/commands/history-repair.js.map +1 -1
  54. package/dist/cli/commands/init.d.ts +8 -2
  55. package/dist/cli/commands/init.js +263 -162
  56. package/dist/cli/commands/init.js.map +1 -1
  57. package/dist/cli/commands/list-filter-shared.js +55 -48
  58. package/dist/cli/commands/list-filter-shared.js.map +1 -1
  59. package/dist/cli/commands/list.js +152 -102
  60. package/dist/cli/commands/list.js.map +1 -1
  61. package/dist/cli/commands/next.js +49 -32
  62. package/dist/cli/commands/next.js.map +1 -1
  63. package/dist/cli/commands/plan.js +373 -298
  64. package/dist/cli/commands/plan.js.map +1 -1
  65. package/dist/cli/commands/recurrence-parsers.js +43 -25
  66. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  67. package/dist/cli/commands/reindex.d.ts +21 -5
  68. package/dist/cli/commands/reindex.js +345 -205
  69. package/dist/cli/commands/reindex.js.map +1 -1
  70. package/dist/cli/commands/restore.d.ts +8 -7
  71. package/dist/cli/commands/restore.js +105 -69
  72. package/dist/cli/commands/restore.js.map +1 -1
  73. package/dist/cli/commands/schema.js +33 -30
  74. package/dist/cli/commands/schema.js.map +1 -1
  75. package/dist/cli/commands/search.d.ts +10 -2
  76. package/dist/cli/commands/search.js +595 -536
  77. package/dist/cli/commands/search.js.map +1 -1
  78. package/dist/cli/commands/telemetry.js +98 -87
  79. package/dist/cli/commands/telemetry.js.map +1 -1
  80. package/dist/cli/commands/test-all.js +237 -168
  81. package/dist/cli/commands/test-all.js.map +1 -1
  82. package/dist/cli/commands/test.d.ts +6 -5
  83. package/dist/cli/commands/test.js +530 -464
  84. package/dist/cli/commands/test.js.map +1 -1
  85. package/dist/cli/commands/update-many.js +57 -42
  86. package/dist/cli/commands/update-many.js.map +1 -1
  87. package/dist/cli/commands/update.d.ts +1 -1
  88. package/dist/cli/commands/update.js +764 -747
  89. package/dist/cli/commands/update.js.map +1 -1
  90. package/dist/cli/commands/validate.d.ts +18 -1
  91. package/dist/cli/commands/validate.js +466 -343
  92. package/dist/cli/commands/validate.js.map +1 -1
  93. package/dist/cli/error-guidance.js +399 -357
  94. package/dist/cli/error-guidance.js.map +1 -1
  95. package/dist/cli/extension-command-options.js +48 -21
  96. package/dist/cli/extension-command-options.js.map +1 -1
  97. package/dist/cli/main.d.ts +47 -0
  98. package/dist/cli/main.js +428 -341
  99. package/dist/cli/main.js.map +1 -1
  100. package/dist/cli/migration-gates.js +22 -45
  101. package/dist/cli/migration-gates.js.map +1 -1
  102. package/dist/cli/register-list-query.js +94 -105
  103. package/dist/cli/register-list-query.js.map +1 -1
  104. package/dist/cli/register-mutation.js +400 -416
  105. package/dist/cli/register-mutation.js.map +1 -1
  106. package/dist/cli/register-operations.js +86 -66
  107. package/dist/cli/register-operations.js.map +1 -1
  108. package/dist/cli/register-setup.js +120 -101
  109. package/dist/cli/register-setup.js.map +1 -1
  110. package/dist/cli/registration-helpers.js +117 -122
  111. package/dist/cli/registration-helpers.js.map +1 -1
  112. package/dist/cli-bundle/chunks/{activity-MVSEND6D.js → activity-CUC4JY3U.js} +9 -9
  113. package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
  114. package/dist/cli-bundle/chunks/{aggregate-MOC4TR2G.js → aggregate-DKUTRY6R.js} +109 -85
  115. package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
  116. package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js → aggregate-SW5PNGCS.js} +108 -84
  117. package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js.map → aggregate-SW5PNGCS.js.map} +2 -2
  118. package/dist/cli-bundle/chunks/{append-KDHT4GHI.js → append-H32VOR2Y.js} +6 -6
  119. package/dist/cli-bundle/chunks/{append-LEDBAM3K.js → append-UBM632FK.js} +6 -6
  120. package/dist/cli-bundle/chunks/{chunk-Z55WX4IQ.js → chunk-2227673O.js} +158 -114
  121. package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
  122. package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js → chunk-2ASNV4DH.js} +4 -4
  123. package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js → chunk-2CHRYUXL.js} +2 -2
  124. package/dist/cli-bundle/chunks/{chunk-QE5UFCCO.js → chunk-2KWL5NPW.js} +42 -27
  125. package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
  126. package/dist/cli-bundle/chunks/{chunk-ZEATCVAC.js → chunk-36UGKF4O.js} +21 -29
  127. package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-JZG5ADVE.js → chunk-3AZUFQK6.js} +1103 -963
  129. package/dist/cli-bundle/chunks/chunk-3AZUFQK6.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-DRPF274X.js → chunk-3LCUASYG.js} +2 -2
  131. package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js → chunk-3Q2HBMTI.js} +2 -2
  132. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +87 -0
  133. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +7 -0
  134. package/dist/cli-bundle/chunks/{chunk-GF7EAR22.js → chunk-4NUOWFBT.js} +109 -72
  135. package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
  136. package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js → chunk-55XRYWEG.js} +6 -6
  137. package/dist/cli-bundle/chunks/{chunk-5IRVSKPS.js → chunk-5GVTFFTC.js} +150 -224
  138. package/dist/cli-bundle/chunks/chunk-5GVTFFTC.js.map +1 -0
  139. package/dist/cli-bundle/chunks/{chunk-CHRNYKNI.js → chunk-5PGBHRY3.js} +41 -26
  140. package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
  141. package/dist/cli-bundle/chunks/{chunk-53ARXF2O.js → chunk-66Z3X7ZG.js} +261 -161
  142. package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
  143. package/dist/cli-bundle/chunks/{chunk-A3UNLXNJ.js → chunk-6ITZLD4T.js} +738 -688
  144. package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
  145. package/dist/cli-bundle/chunks/{chunk-JTRKME24.js → chunk-6YCYF2AI.js} +262 -162
  146. package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
  147. package/dist/cli-bundle/chunks/{chunk-RM6MHL6A.js → chunk-6ZMBJRDJ.js} +580 -467
  148. package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
  149. package/dist/cli-bundle/chunks/{chunk-RPRW26NG.js → chunk-7MYWF4ZX.js} +110 -73
  150. package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
  151. package/dist/cli-bundle/chunks/{chunk-SNUK7H5J.js → chunk-7NSPKJUS.js} +716 -606
  152. package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
  153. package/dist/cli-bundle/chunks/{chunk-KYDYQMNW.js → chunk-7TH5NMVB.js} +95 -53
  154. package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
  155. package/dist/cli-bundle/chunks/{chunk-VD3LKZFX.js → chunk-7W4H4K26.js} +739 -689
  156. package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
  157. package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js → chunk-A6VOGKBA.js} +6 -6
  158. package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js → chunk-AIAIXG7I.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-NIBP3I7A.js → chunk-AJEBCRIY.js} +128 -126
  160. package/dist/cli-bundle/chunks/chunk-AJEBCRIY.js.map +1 -0
  161. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  162. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  163. package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js → chunk-BTX5MIQF.js} +2 -2
  164. package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js +809 -0
  165. package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js.map +7 -0
  166. package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js → chunk-CYBDUHNO.js} +3 -3
  167. package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js → chunk-CZPVDLD2.js} +4 -4
  168. package/dist/cli-bundle/chunks/{chunk-FDEVKXC4.js → chunk-EMPGXBUF.js} +22 -30
  169. package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
  170. package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js → chunk-EUKTMRN3.js} +2 -2
  171. package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js → chunk-FFOQHGNH.js} +6 -6
  172. package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js → chunk-GFMSLORL.js} +6 -6
  173. package/dist/cli-bundle/chunks/{chunk-IZQOJR2B.js → chunk-GRRG3MCT.js} +198 -189
  174. package/dist/cli-bundle/chunks/chunk-GRRG3MCT.js.map +7 -0
  175. package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js → chunk-H4GRLYJS.js} +3 -3
  176. package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js → chunk-HQTPRV4D.js} +6 -6
  177. package/dist/cli-bundle/chunks/{chunk-CY5IJMUM.js → chunk-I66WE2HE.js} +712 -602
  178. package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
  179. package/dist/cli-bundle/chunks/{chunk-ZFIEEDTJ.js → chunk-IEEJQCZ4.js} +509 -363
  180. package/dist/cli-bundle/chunks/chunk-IEEJQCZ4.js.map +7 -0
  181. package/dist/cli-bundle/chunks/{chunk-DU66JUGT.js → chunk-IG5JYZGU.js} +488 -420
  182. package/dist/cli-bundle/chunks/chunk-IG5JYZGU.js.map +7 -0
  183. package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js → chunk-JMK5GCK2.js} +2 -2
  184. package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js → chunk-JXAUVO6X.js} +258 -169
  185. package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js.map → chunk-JXAUVO6X.js.map} +2 -2
  186. package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js → chunk-K2VYLVX4.js} +2 -2
  187. package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js → chunk-KCO2EAN5.js} +3 -3
  188. package/dist/cli-bundle/chunks/{chunk-T7ZMQI4J.js → chunk-KIYCOJ63.js} +198 -189
  189. package/dist/cli-bundle/chunks/chunk-KIYCOJ63.js.map +1 -0
  190. package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js → chunk-KLXF7NCC.js} +2 -2
  191. package/dist/cli-bundle/chunks/{chunk-V3KLX7U7.js → chunk-KN3URLKS.js} +510 -364
  192. package/dist/cli-bundle/chunks/chunk-KN3URLKS.js.map +1 -0
  193. package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js → chunk-LRKMWUUV.js} +2 -2
  194. package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js → chunk-LTRAF2D7.js} +3 -3
  195. package/dist/cli-bundle/chunks/{chunk-5T6WPLRO.js → chunk-MNBPX5JS.js} +394 -354
  196. package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
  197. package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js → chunk-MRD4T5LF.js} +2 -2
  198. package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js → chunk-N2JSWVWG.js} +4 -4
  199. package/dist/cli-bundle/chunks/{chunk-7WDETKGP.js → chunk-N3QCJS4M.js} +1105 -965
  200. package/dist/cli-bundle/chunks/chunk-N3QCJS4M.js.map +7 -0
  201. package/dist/cli-bundle/chunks/{chunk-KGQ3W65B.js → chunk-NRZS637N.js} +258 -169
  202. package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
  203. package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js +799 -0
  204. package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js.map +1 -0
  205. package/dist/cli-bundle/chunks/{chunk-ZIE6WXJ2.js → chunk-Q6K2OACU.js} +153 -90
  206. package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
  207. package/dist/cli-bundle/chunks/{chunk-K46GQ265.js → chunk-Q6NXOHS6.js} +489 -421
  208. package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
  209. package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js → chunk-QH3FSKRJ.js} +2 -2
  210. package/dist/cli-bundle/chunks/{chunk-UB3V5WUI.js → chunk-RM37OPYK.js} +394 -354
  211. package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
  212. package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js → chunk-S62UANU7.js} +3 -3
  213. package/dist/cli-bundle/chunks/{chunk-NO6Y6FB2.js → chunk-SPM2XLWI.js} +37 -28
  214. package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
  215. package/dist/cli-bundle/chunks/{chunk-DORJSBGJ.js → chunk-SYNKD3ZG.js} +127 -125
  216. package/dist/cli-bundle/chunks/chunk-SYNKD3ZG.js.map +7 -0
  217. package/dist/cli-bundle/chunks/{chunk-6YRAMXRS.js → chunk-SYVUU7EK.js} +581 -468
  218. package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
  219. package/dist/cli-bundle/chunks/{chunk-D5LYZVGB.js → chunk-TPOFWBMY.js} +95 -53
  220. package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
  221. package/dist/cli-bundle/chunks/{chunk-IHXXUIXS.js → chunk-TTHCEV5Q.js} +92 -77
  222. package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
  223. package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js → chunk-U2BEEM2X.js} +3 -3
  224. package/dist/cli-bundle/chunks/{chunk-Z5BM2FKQ.js → chunk-UGLU6Q2I.js} +91 -76
  225. package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
  226. package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js → chunk-UT73HUPC.js} +3 -3
  227. package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js → chunk-UTSH5GWX.js} +4 -4
  228. package/dist/cli-bundle/chunks/{chunk-AWN4PPH5.js → chunk-UWKEJMZU.js} +157 -113
  229. package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
  230. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +84 -0
  231. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +1 -0
  232. package/dist/cli-bundle/chunks/{chunk-KTMMTOIP.js → chunk-W47SML5B.js} +152 -89
  233. package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
  234. package/dist/cli-bundle/chunks/{chunk-UFKNF23C.js → chunk-WJAMWAHZ.js} +157 -118
  235. package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
  236. package/dist/cli-bundle/chunks/{chunk-HIBK6H4S.js → chunk-XCHUVHKU.js} +685 -544
  237. package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
  238. package/dist/cli-bundle/chunks/{chunk-DJDXAU74.js → chunk-XEWQKDYZ.js} +685 -544
  239. package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
  240. package/dist/cli-bundle/chunks/{chunk-BOWQWXLI.js → chunk-XTHQWXVC.js} +158 -119
  241. package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
  242. package/dist/cli-bundle/chunks/{chunk-6T5ZIWBS.js → chunk-XWGEMNBR.js} +150 -224
  243. package/dist/cli-bundle/chunks/chunk-XWGEMNBR.js.map +7 -0
  244. package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js → chunk-Y4NRKBFW.js} +3 -3
  245. package/dist/cli-bundle/chunks/{chunk-WTRUDJ3R.js → chunk-YLZZ6T54.js} +38 -29
  246. package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
  247. package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js → chunk-YPKFV2JR.js} +6 -6
  248. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  249. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  250. package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js → chunk-ZNHEYCDD.js} +2 -2
  251. package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js → chunk-ZNT7KEWE.js} +2 -2
  252. package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js → claim-SENTPZBN.js} +8 -8
  253. package/dist/cli-bundle/chunks/{claim-6NINZYB3.js → claim-Z7MEQCBT.js} +8 -8
  254. package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js → close-424MX4CU.js} +7 -7
  255. package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
  256. package/dist/cli-bundle/chunks/{close-many-CXJBOWWY.js → close-many-2IV4J2TR.js} +103 -82
  257. package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
  258. package/dist/cli-bundle/chunks/{close-many-BFMP6HHK.js → close-many-SWY34BII.js} +102 -81
  259. package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
  260. package/dist/cli-bundle/chunks/{comments-ETHABIY6.js → comments-4FGNTSNV.js} +8 -8
  261. package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js → comments-7YS5MY5X.js} +8 -8
  262. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
  263. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
  264. package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
  265. package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
  266. package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js → context-LHVKJSPJ.js} +12 -12
  267. package/dist/cli-bundle/chunks/{context-XDI4DKKT.js → context-ZQY54JNS.js} +12 -12
  268. package/dist/cli-bundle/chunks/{contracts-SMOAN5NF.js → contracts-CP2EZJC7.js} +320 -199
  269. package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
  270. package/dist/cli-bundle/chunks/{contracts-KP4QAGVW.js → contracts-FIZLMP7O.js} +321 -200
  271. package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
  272. package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js → copy-GYNQQPW2.js} +5 -5
  273. package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js → copy-TLW7JTQT.js} +5 -5
  274. package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js → create-VSKYSOCD.js} +12 -12
  275. package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
  276. package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js → delete-4W5JYCEG.js} +5 -5
  277. package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js → delete-ANTOTI2I.js} +5 -5
  278. package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js → deps-HPPE6MJN.js} +5 -5
  279. package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js → deps-ZQZN54EZ.js} +5 -5
  280. package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js → docs-RPOVFMP3.js} +7 -7
  281. package/dist/cli-bundle/chunks/{docs-2TIFR62T.js → docs-XJNYBJGE.js} +7 -7
  282. package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js → eval-DM6JBZTS.js} +10 -10
  283. package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js → eval-RFBI5FGS.js} +10 -10
  284. package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js → extension-B3YY4WY5.js} +11 -10
  285. package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js → extension-TTSEFQTS.js} +11 -10
  286. package/dist/cli-bundle/chunks/{files-DF3HO6XK.js → files-5D65CHGE.js} +7 -7
  287. package/dist/cli-bundle/chunks/{files-T5ODMETM.js → files-GPIG77EN.js} +7 -7
  288. package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js → focus-C3PEJV2C.js} +6 -6
  289. package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js → focus-ZHN7WIGX.js} +6 -6
  290. package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js → gc-D4JQ6OWN.js} +3 -3
  291. package/dist/cli-bundle/chunks/{gc-FULIVYR4.js → gc-VZIXDL32.js} +3 -3
  292. package/dist/cli-bundle/chunks/{get-VYPIICPC.js → get-GIBRUUOP.js} +121 -81
  293. package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
  294. package/dist/cli-bundle/chunks/{get-AWK324RS.js → get-IOVAN6RU.js} +120 -80
  295. package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
  296. package/dist/cli-bundle/chunks/{health-Q66C43GN.js → health-L2U3AFKV.js} +437 -264
  297. package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
  298. package/dist/cli-bundle/chunks/{health-FBCVZGSX.js → health-MM7AWXYF.js} +436 -263
  299. package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
  300. package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
  301. package/dist/cli-bundle/chunks/{history-X4OSES6K.js → history-IL7XCEX2.js} +8 -8
  302. package/dist/cli-bundle/chunks/{history-compact-2GHT32UX.js → history-compact-HALOTOU7.js} +214 -135
  303. package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
  304. package/dist/cli-bundle/chunks/{history-compact-WLCQEKXS.js → history-compact-MV25P7DM.js} +213 -134
  305. package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
  306. package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
  307. package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js → history-redact-VYCWQFK7.js} +9 -9
  308. package/dist/cli-bundle/chunks/{history-repair-FY75IC26.js → history-repair-44MODPQF.js} +124 -84
  309. package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
  310. package/dist/cli-bundle/chunks/{history-repair-GABSDSVD.js → history-repair-CPNAOCNF.js} +123 -83
  311. package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
  312. package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js → init-F27NHENZ.js} +12 -11
  313. package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
  314. package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js → learnings-HJVDQIGY.js} +8 -8
  315. package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js → learnings-XSFSUUWK.js} +8 -8
  316. package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js → list-HPMEKCAA.js} +8 -8
  317. package/dist/cli-bundle/chunks/{list-ROT7JF62.js → list-VMPWTURB.js} +8 -8
  318. package/dist/cli-bundle/chunks/{next-66BJB4N2.js → next-ETXF2ZCN.js} +59 -37
  319. package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
  320. package/dist/cli-bundle/chunks/{next-N5MWJTBY.js → next-QM6YJIIS.js} +60 -38
  321. package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
  322. package/dist/cli-bundle/chunks/{notes-FW6YFLND.js → notes-GDZIKGR6.js} +8 -8
  323. package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js → notes-WDDBPC4D.js} +8 -8
  324. package/dist/cli-bundle/chunks/{plan-ZHKZ7JVF.js → plan-BGDR73Z6.js} +373 -279
  325. package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
  326. package/dist/cli-bundle/chunks/{plan-DQ7G4EDC.js → plan-C5IMM335.js} +372 -278
  327. package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
  328. package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js → profile-CCOKZ2IQ.js} +9 -9
  329. package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js → profile-HUCENIEQ.js} +9 -9
  330. package/dist/cli-bundle/chunks/{register-list-query-Y2VRHPCL.js → register-list-query-ROSNIL52.js} +80 -83
  331. package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
  332. package/dist/cli-bundle/chunks/{register-list-query-KY6Z6WV7.js → register-list-query-XN4ZRHSV.js} +79 -82
  333. package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
  334. package/dist/cli-bundle/chunks/{register-mutation-PCARIGZS.js → register-mutation-CFSB2MS3.js} +406 -385
  335. package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
  336. package/dist/cli-bundle/chunks/{register-mutation-N6AYSKPM.js → register-mutation-KRLAHEL2.js} +405 -384
  337. package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
  338. package/dist/cli-bundle/chunks/{register-operations-L6CYTOIH.js → register-operations-4PASGJDB.js} +112 -93
  339. package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
  340. package/dist/cli-bundle/chunks/{register-operations-YAT6FUUB.js → register-operations-MBN4KGUM.js} +113 -94
  341. package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
  342. package/dist/cli-bundle/chunks/{register-setup-N7UGXYJC.js → register-setup-VIAWYFP5.js} +129 -104
  343. package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
  344. package/dist/cli-bundle/chunks/{register-setup-MPANILQF.js → register-setup-ZCGKHDKL.js} +128 -103
  345. package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
  346. package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js → restore-4CBWUMCX.js} +9 -9
  347. package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
  348. package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
  349. package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
  350. package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js → schema-TDGK6N3I.js} +7 -7
  351. package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js → schema-UE5KKAUX.js} +7 -7
  352. package/dist/cli-bundle/chunks/{search-KP6H7COV.js → search-FP7MEU4S.js} +10 -10
  353. package/dist/cli-bundle/chunks/{search-CX5UMV4H.js → search-K4CFLQ5S.js} +10 -10
  354. package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js → stats-NJJCALEZ.js} +6 -6
  355. package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js → stats-XT6QRKQY.js} +6 -6
  356. package/dist/cli-bundle/chunks/{telemetry-DIFPXCAT.js → telemetry-5SQ5UDXC.js} +84 -70
  357. package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
  358. package/dist/cli-bundle/chunks/{telemetry-WTYFUPRL.js → telemetry-HVXFZA2U.js} +85 -71
  359. package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
  360. package/dist/cli-bundle/chunks/{test-QNDXZQCW.js → test-UFSJ5YIO.js} +15 -14
  361. package/dist/cli-bundle/chunks/{test-HU2BS7EY.js → test-YCDAUBWF.js} +15 -14
  362. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
  363. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
  364. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
  365. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
  366. package/dist/cli-bundle/chunks/{test-runs-CA6K32RD.js → test-runs-FK5E75AA.js} +185 -147
  367. package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
  368. package/dist/cli-bundle/chunks/{test-runs-LANLLPVO.js → test-runs-H4TGWGRN.js} +184 -146
  369. package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
  370. package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
  371. package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js → update-Y5WQVT5O.js} +15 -15
  372. package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js → update-many-6YAYYRLE.js} +83 -68
  373. package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js.map → update-many-6YAYYRLE.js.map} +2 -2
  374. package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js → update-many-JTKKSA7Y.js} +84 -69
  375. package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js.map → update-many-JTKKSA7Y.js.map} +1 -1
  376. package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js → upgrade-DTAHZ236.js} +11 -10
  377. package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js.map → upgrade-DTAHZ236.js.map} +1 -1
  378. package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js → upgrade-JUDU7YL4.js} +13 -12
  379. package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js.map → upgrade-JUDU7YL4.js.map} +1 -1
  380. package/dist/cli-bundle/chunks/{validate-2G566PKQ.js → validate-732RWS5W.js} +440 -319
  381. package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
  382. package/dist/cli-bundle/chunks/{validate-BDPVXHHH.js → validate-W7H5TEDC.js} +441 -320
  383. package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
  384. package/dist/cli-bundle/main.js +986 -1500
  385. package/dist/cli-bundle/main.js.map +4 -4
  386. package/dist/core/config/nested-settings.js +89 -67
  387. package/dist/core/config/nested-settings.js.map +1 -1
  388. package/dist/core/extensions/activation-summary-markdown.js +23 -12
  389. package/dist/core/extensions/activation-summary-markdown.js.map +1 -1
  390. package/dist/core/extensions/extension-policy.d.ts +18 -3
  391. package/dist/core/extensions/extension-policy.js +116 -106
  392. package/dist/core/extensions/extension-policy.js.map +1 -1
  393. package/dist/core/extensions/loader.js +310 -232
  394. package/dist/core/extensions/loader.js.map +1 -1
  395. package/dist/core/governance/metadata-coverage.js +20 -28
  396. package/dist/core/governance/metadata-coverage.js.map +1 -1
  397. package/dist/core/history/drift-scan.js +93 -81
  398. package/dist/core/history/drift-scan.js.map +1 -1
  399. package/dist/core/item/item-format.js +523 -410
  400. package/dist/core/item/item-format.js.map +1 -1
  401. package/dist/core/item/item-type-definition.js +14 -14
  402. package/dist/core/item/item-type-definition.js.map +1 -1
  403. package/dist/core/item/type-registry.js +87 -82
  404. package/dist/core/item/type-registry.js.map +1 -1
  405. package/dist/core/output/mutation-projection.js +42 -26
  406. package/dist/core/output/mutation-projection.js.map +1 -1
  407. package/dist/core/schema/runtime-schema.js +34 -28
  408. package/dist/core/schema/runtime-schema.js.map +1 -1
  409. package/dist/core/search/semantic-defaults.js +64 -37
  410. package/dist/core/search/semantic-defaults.js.map +1 -1
  411. package/dist/core/search/vector-stores.js +32 -17
  412. package/dist/core/search/vector-stores.js.map +1 -1
  413. package/dist/core/sentry/helpers.js +31 -28
  414. package/dist/core/sentry/helpers.js.map +1 -1
  415. package/dist/core/sentry/instrument.js +54 -43
  416. package/dist/core/sentry/instrument.js.map +1 -1
  417. package/dist/core/store/front-matter-cache.js +239 -153
  418. package/dist/core/store/front-matter-cache.js.map +1 -1
  419. package/dist/core/store/item-store.js +33 -26
  420. package/dist/core/store/item-store.js.map +1 -1
  421. package/dist/core/store/settings.js +247 -203
  422. package/dist/core/store/settings.js.map +1 -1
  423. package/dist/core/test/background-runs.js +189 -160
  424. package/dist/core/test/background-runs.js.map +1 -1
  425. package/dist/mcp/server.js +387 -367
  426. package/dist/mcp/server.js.map +1 -1
  427. package/dist/sdk/cli-contracts/flag-contracts.js +111 -180
  428. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  429. package/dist/sdk/cli-contracts/tool-schema.js +76 -45
  430. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  431. package/dist/sdk/compose.d.ts +4 -1
  432. package/dist/sdk/compose.js +181 -115
  433. package/dist/sdk/compose.js.map +1 -1
  434. package/docs/RELEASING.md +2 -3
  435. package/package.json +2 -2
  436. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  437. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  438. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  439. package/dist/cli-bundle/chunks/activity-EJBMXUBH.js +0 -16
  440. package/dist/cli-bundle/chunks/aggregate-MOC4TR2G.js.map +0 -1
  441. package/dist/cli-bundle/chunks/chunk-53ARXF2O.js.map +0 -7
  442. package/dist/cli-bundle/chunks/chunk-5IRVSKPS.js.map +0 -1
  443. package/dist/cli-bundle/chunks/chunk-5T6WPLRO.js.map +0 -7
  444. package/dist/cli-bundle/chunks/chunk-6T5ZIWBS.js.map +0 -7
  445. package/dist/cli-bundle/chunks/chunk-6YRAMXRS.js.map +0 -1
  446. package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +0 -7
  447. package/dist/cli-bundle/chunks/chunk-A3UNLXNJ.js.map +0 -7
  448. package/dist/cli-bundle/chunks/chunk-AWN4PPH5.js.map +0 -7
  449. package/dist/cli-bundle/chunks/chunk-BOWQWXLI.js.map +0 -1
  450. package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js +0 -115
  451. package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js.map +0 -1
  452. package/dist/cli-bundle/chunks/chunk-CHRNYKNI.js.map +0 -7
  453. package/dist/cli-bundle/chunks/chunk-CY5IJMUM.js.map +0 -1
  454. package/dist/cli-bundle/chunks/chunk-D5LYZVGB.js.map +0 -1
  455. package/dist/cli-bundle/chunks/chunk-DJDXAU74.js.map +0 -7
  456. package/dist/cli-bundle/chunks/chunk-DORJSBGJ.js.map +0 -7
  457. package/dist/cli-bundle/chunks/chunk-DU66JUGT.js.map +0 -7
  458. package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js +0 -118
  459. package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js.map +0 -7
  460. package/dist/cli-bundle/chunks/chunk-FDEVKXC4.js.map +0 -1
  461. package/dist/cli-bundle/chunks/chunk-GF7EAR22.js.map +0 -7
  462. package/dist/cli-bundle/chunks/chunk-HIBK6H4S.js.map +0 -1
  463. package/dist/cli-bundle/chunks/chunk-IHXXUIXS.js.map +0 -1
  464. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js +0 -35
  465. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js.map +0 -7
  466. package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js.map +0 -7
  467. package/dist/cli-bundle/chunks/chunk-JTRKME24.js.map +0 -1
  468. package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +0 -1
  469. package/dist/cli-bundle/chunks/chunk-K46GQ265.js.map +0 -1
  470. package/dist/cli-bundle/chunks/chunk-KGQ3W65B.js.map +0 -1
  471. package/dist/cli-bundle/chunks/chunk-KTMMTOIP.js.map +0 -7
  472. package/dist/cli-bundle/chunks/chunk-KYDYQMNW.js.map +0 -7
  473. package/dist/cli-bundle/chunks/chunk-NIBP3I7A.js.map +0 -1
  474. package/dist/cli-bundle/chunks/chunk-NO6Y6FB2.js.map +0 -7
  475. package/dist/cli-bundle/chunks/chunk-QE5UFCCO.js.map +0 -1
  476. package/dist/cli-bundle/chunks/chunk-RM6MHL6A.js.map +0 -7
  477. package/dist/cli-bundle/chunks/chunk-RPRW26NG.js.map +0 -1
  478. package/dist/cli-bundle/chunks/chunk-SNUK7H5J.js.map +0 -7
  479. package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js.map +0 -1
  480. package/dist/cli-bundle/chunks/chunk-UB3V5WUI.js.map +0 -1
  481. package/dist/cli-bundle/chunks/chunk-UFKNF23C.js.map +0 -7
  482. package/dist/cli-bundle/chunks/chunk-V3KLX7U7.js.map +0 -1
  483. package/dist/cli-bundle/chunks/chunk-VD3LKZFX.js.map +0 -1
  484. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js +0 -32
  485. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js.map +0 -1
  486. package/dist/cli-bundle/chunks/chunk-WTRUDJ3R.js.map +0 -1
  487. package/dist/cli-bundle/chunks/chunk-Z55WX4IQ.js.map +0 -1
  488. package/dist/cli-bundle/chunks/chunk-Z5BM2FKQ.js.map +0 -7
  489. package/dist/cli-bundle/chunks/chunk-ZEATCVAC.js.map +0 -7
  490. package/dist/cli-bundle/chunks/chunk-ZFIEEDTJ.js.map +0 -7
  491. package/dist/cli-bundle/chunks/chunk-ZIE6WXJ2.js.map +0 -1
  492. package/dist/cli-bundle/chunks/close-37KEHLYM.js +0 -14
  493. package/dist/cli-bundle/chunks/close-many-BFMP6HHK.js.map +0 -7
  494. package/dist/cli-bundle/chunks/close-many-CXJBOWWY.js.map +0 -1
  495. package/dist/cli-bundle/chunks/config-FIXJZEQK.js +0 -1541
  496. package/dist/cli-bundle/chunks/config-FIXJZEQK.js.map +0 -7
  497. package/dist/cli-bundle/chunks/config-X3ZVCUUG.js +0 -1531
  498. package/dist/cli-bundle/chunks/config-X3ZVCUUG.js.map +0 -1
  499. package/dist/cli-bundle/chunks/contracts-KP4QAGVW.js.map +0 -1
  500. package/dist/cli-bundle/chunks/contracts-SMOAN5NF.js.map +0 -7
  501. package/dist/cli-bundle/chunks/create-DFMNBKBS.js +0 -28
  502. package/dist/cli-bundle/chunks/get-AWK324RS.js.map +0 -7
  503. package/dist/cli-bundle/chunks/get-VYPIICPC.js.map +0 -1
  504. package/dist/cli-bundle/chunks/health-FBCVZGSX.js.map +0 -7
  505. package/dist/cli-bundle/chunks/health-Q66C43GN.js.map +0 -1
  506. package/dist/cli-bundle/chunks/history-5XUSLAJA.js +0 -18
  507. package/dist/cli-bundle/chunks/history-compact-2GHT32UX.js.map +0 -1
  508. package/dist/cli-bundle/chunks/history-compact-WLCQEKXS.js.map +0 -7
  509. package/dist/cli-bundle/chunks/history-redact-BVHWDXPR.js +0 -19
  510. package/dist/cli-bundle/chunks/history-repair-FY75IC26.js.map +0 -1
  511. package/dist/cli-bundle/chunks/history-repair-GABSDSVD.js.map +0 -7
  512. package/dist/cli-bundle/chunks/init-TRYJELH4.js +0 -21
  513. package/dist/cli-bundle/chunks/next-66BJB4N2.js.map +0 -7
  514. package/dist/cli-bundle/chunks/next-N5MWJTBY.js.map +0 -1
  515. package/dist/cli-bundle/chunks/plan-DQ7G4EDC.js.map +0 -7
  516. package/dist/cli-bundle/chunks/plan-ZHKZ7JVF.js.map +0 -1
  517. package/dist/cli-bundle/chunks/register-list-query-KY6Z6WV7.js.map +0 -7
  518. package/dist/cli-bundle/chunks/register-list-query-Y2VRHPCL.js.map +0 -1
  519. package/dist/cli-bundle/chunks/register-mutation-N6AYSKPM.js.map +0 -7
  520. package/dist/cli-bundle/chunks/register-mutation-PCARIGZS.js.map +0 -1
  521. package/dist/cli-bundle/chunks/register-operations-L6CYTOIH.js.map +0 -7
  522. package/dist/cli-bundle/chunks/register-operations-YAT6FUUB.js.map +0 -1
  523. package/dist/cli-bundle/chunks/register-setup-MPANILQF.js.map +0 -7
  524. package/dist/cli-bundle/chunks/register-setup-N7UGXYJC.js.map +0 -1
  525. package/dist/cli-bundle/chunks/restore-IRAKSWIW.js +0 -17
  526. package/dist/cli-bundle/chunks/telemetry-DIFPXCAT.js.map +0 -7
  527. package/dist/cli-bundle/chunks/telemetry-WTYFUPRL.js.map +0 -1
  528. package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js +0 -360
  529. package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js.map +0 -7
  530. package/dist/cli-bundle/chunks/test-all-XLPI4USF.js +0 -357
  531. package/dist/cli-bundle/chunks/test-all-XLPI4USF.js.map +0 -1
  532. package/dist/cli-bundle/chunks/test-runs-CA6K32RD.js.map +0 -1
  533. package/dist/cli-bundle/chunks/test-runs-LANLLPVO.js.map +0 -7
  534. package/dist/cli-bundle/chunks/update-UXDLTEOZ.js +0 -24
  535. package/dist/cli-bundle/chunks/validate-2G566PKQ.js.map +0 -7
  536. package/dist/cli-bundle/chunks/validate-BDPVXHHH.js.map +0 -1
  537. /package/dist/cli-bundle/chunks/{activity-MVSEND6D.js.map → activity-CUC4JY3U.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{activity-EJBMXUBH.js.map → activity-WEIEMM73.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{append-KDHT4GHI.js.map → append-H32VOR2Y.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{append-LEDBAM3K.js.map → append-UBM632FK.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js.map → chunk-2ASNV4DH.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js.map → chunk-2CHRYUXL.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-DRPF274X.js.map → chunk-3LCUASYG.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js.map → chunk-3Q2HBMTI.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js.map → chunk-55XRYWEG.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js.map → chunk-A6VOGKBA.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js.map → chunk-AIAIXG7I.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js.map → chunk-BTX5MIQF.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js.map → chunk-CYBDUHNO.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js.map → chunk-CZPVDLD2.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js.map → chunk-EUKTMRN3.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js.map → chunk-FFOQHGNH.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js.map → chunk-GFMSLORL.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js.map → chunk-H4GRLYJS.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js.map → chunk-HQTPRV4D.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js.map → chunk-JMK5GCK2.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js.map → chunk-K2VYLVX4.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js.map → chunk-KCO2EAN5.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js.map → chunk-KLXF7NCC.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js.map → chunk-LRKMWUUV.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js.map → chunk-LTRAF2D7.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js.map → chunk-MRD4T5LF.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js.map → chunk-N2JSWVWG.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js.map → chunk-QH3FSKRJ.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js.map → chunk-S62UANU7.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js.map → chunk-U2BEEM2X.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js.map → chunk-UT73HUPC.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js.map → chunk-UTSH5GWX.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js.map → chunk-Y4NRKBFW.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js.map → chunk-YPKFV2JR.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js.map → chunk-ZNHEYCDD.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js.map → claim-SENTPZBN.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{claim-6NINZYB3.js.map → claim-Z7MEQCBT.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js.map → close-424MX4CU.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{close-37KEHLYM.js.map → close-YCWQQPDS.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{comments-ETHABIY6.js.map → comments-4FGNTSNV.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js.map → comments-7YS5MY5X.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js.map → context-LHVKJSPJ.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{context-XDI4DKKT.js.map → context-ZQY54JNS.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js.map → copy-GYNQQPW2.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js.map → copy-TLW7JTQT.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js.map → create-VSKYSOCD.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{create-DFMNBKBS.js.map → create-XTMAPS7I.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js.map → delete-4W5JYCEG.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js.map → delete-ANTOTI2I.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js.map → deps-HPPE6MJN.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js.map → deps-ZQZN54EZ.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js.map → docs-RPOVFMP3.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{docs-2TIFR62T.js.map → docs-XJNYBJGE.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js.map → eval-DM6JBZTS.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js.map → eval-RFBI5FGS.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js.map → extension-B3YY4WY5.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js.map → extension-TTSEFQTS.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{files-DF3HO6XK.js.map → files-5D65CHGE.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{files-T5ODMETM.js.map → files-GPIG77EN.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js.map → focus-C3PEJV2C.js.map} +0 -0
  598. /package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js.map → focus-ZHN7WIGX.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js.map → gc-D4JQ6OWN.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{gc-FULIVYR4.js.map → gc-VZIXDL32.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{history-5XUSLAJA.js.map → history-DD7L7BNL.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{history-X4OSES6K.js.map → history-IL7XCEX2.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{history-redact-BVHWDXPR.js.map → history-redact-IX4YEWMY.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js.map → history-redact-VYCWQFK7.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js.map → init-F27NHENZ.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{init-TRYJELH4.js.map → init-HHVQQP6C.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js.map → learnings-HJVDQIGY.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js.map → learnings-XSFSUUWK.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js.map → list-HPMEKCAA.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{list-ROT7JF62.js.map → list-VMPWTURB.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{notes-FW6YFLND.js.map → notes-GDZIKGR6.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js.map → notes-WDDBPC4D.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js.map → profile-CCOKZ2IQ.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js.map → profile-HUCENIEQ.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js.map → restore-4CBWUMCX.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{restore-IRAKSWIW.js.map → restore-5UEAGG3W.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js.map → schema-TDGK6N3I.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js.map → schema-UE5KKAUX.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{search-KP6H7COV.js.map → search-FP7MEU4S.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{search-CX5UMV4H.js.map → search-K4CFLQ5S.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js.map → stats-NJJCALEZ.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js.map → stats-XT6QRKQY.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{test-QNDXZQCW.js.map → test-UFSJ5YIO.js.map} +0 -0
  626. /package/dist/cli-bundle/chunks/{test-HU2BS7EY.js.map → test-YCDAUBWF.js.map} +0 -0
  627. /package/dist/cli-bundle/chunks/{update-UXDLTEOZ.js.map → update-MTCFES6X.js.map} +0 -0
  628. /package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js.map → update-Y5WQVT5O.js.map} +0 -0
@@ -1,11 +1,11 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="883aa05b-84b3-5651-8b99-ea04681d4f70")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5fee19a0-e879-5644-9726-fdf6ad3fc754")}catch(e){}}();
3
3
  import {
4
4
  parseLimit
5
- } from "./chunk-JVQ7UOYC.js";
5
+ } from "./chunk-2CHRYUXL.js";
6
6
  import {
7
7
  nowIso
8
- } from "./chunk-KRASIL6M.js";
8
+ } from "./chunk-K2VYLVX4.js";
9
9
  import {
10
10
  EXIT_CODE,
11
11
  PmCliError,
@@ -26,7 +26,7 @@ import {
26
26
  resolveGlobalPmRoot,
27
27
  resolvePmRoot,
28
28
  writeFileAtomic
29
- } from "./chunk-CY5IJMUM.js";
29
+ } from "./chunk-I66WE2HE.js";
30
30
 
31
31
  // dist/cli/commands/test-runs.js
32
32
  import os from "node:os";
@@ -449,6 +449,143 @@ async function appendFileOrdered(queue, filePath, text) {
449
449
  await queue;
450
450
  await fs.appendFile(filePath, text, "utf8");
451
451
  }
452
+ function resolvePositiveEnvInteger(name, fallback) {
453
+ const parsed = Number.parseInt(process.env[name] ?? "", 10);
454
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
455
+ }
456
+ function buildBackgroundWorkerEnv(record) {
457
+ return {
458
+ ...process.env,
459
+ PM_PATH: record.pm_root,
460
+ PM_GLOBAL_PATH: record.global_pm_root,
461
+ FORCE_COLOR: "0"
462
+ };
463
+ }
464
+ function buildBackgroundWorkerChildArgs(record, noExtensions) {
465
+ return noExtensions ? ["--no-extensions", ...record.command_args] : [...record.command_args];
466
+ }
467
+ function createBackgroundRunRecordWriteScheduler(pmRoot, record) {
468
+ let writeQueue = Promise.resolve();
469
+ return {
470
+ schedule() {
471
+ writeQueue = writeQueue.then(async () => {
472
+ try {
473
+ await writeBackgroundRunRecord(pmRoot, record);
474
+ } catch {
475
+ }
476
+ });
477
+ },
478
+ async flush() {
479
+ await writeQueue;
480
+ }
481
+ };
482
+ }
483
+ function requestChildSignal(child, signal) {
484
+ try {
485
+ child.kill(signal);
486
+ } catch {
487
+ }
488
+ }
489
+ async function requestBackgroundWorkerStop(record, child, state, scheduleRecordWrite) {
490
+ if (state.stopRequested) {
491
+ return;
492
+ }
493
+ state.stopRequested = true;
494
+ record.stop_requested_at = nowIso();
495
+ record.progress = {
496
+ ...record.progress,
497
+ phase: "stopping",
498
+ message: "Stop requested for background run.",
499
+ heartbeat_at: nowIso()
500
+ };
501
+ scheduleRecordWrite();
502
+ requestChildSignal(child, "SIGTERM");
503
+ const forceTimer = setTimeout(() => requestChildSignal(child, "SIGKILL"), resolvePositiveEnvInteger("PM_BACKGROUND_RUN_FORCE_KILL_DELAY_MS", DEFAULT_BACKGROUND_RUN_FORCE_KILL_DELAY_MS));
504
+ forceTimer.unref?.();
505
+ }
506
+ function buildItemBackgroundProgress(line, progressPatch, phase) {
507
+ return {
508
+ phase,
509
+ message: line,
510
+ heartbeat_at: nowIso(),
511
+ item_index: progressPatch.item_index,
512
+ item_total: progressPatch.item_total,
513
+ item_id: progressPatch.item_id,
514
+ linked_test_index: void 0,
515
+ linked_test_total: void 0,
516
+ current_command: void 0,
517
+ elapsed_ms: void 0
518
+ };
519
+ }
520
+ function buildLinkedTestBackgroundProgress(line, record, progressPatch, phase) {
521
+ return {
522
+ phase,
523
+ message: line,
524
+ heartbeat_at: nowIso(),
525
+ item_index: progressPatch.item_index ?? record.progress?.item_index,
526
+ item_total: progressPatch.item_total ?? record.progress?.item_total,
527
+ item_id: progressPatch.item_id ?? record.progress?.item_id,
528
+ linked_test_index: progressPatch.linked_test_index,
529
+ linked_test_total: progressPatch.linked_test_total,
530
+ current_command: progressPatch.current_command,
531
+ elapsed_ms: progressPatch.elapsed_ms
532
+ };
533
+ }
534
+ function applyBackgroundWorkerProgressLine(record, line, stopRequested) {
535
+ const progressPatch = parseProgressLine(line);
536
+ if (!progressPatch) {
537
+ return false;
538
+ }
539
+ const phase = record.progress?.phase === "stopping" ? "stopping" : "running";
540
+ record.progress = progressPatch.item_id ? buildItemBackgroundProgress(line, progressPatch, phase) : buildLinkedTestBackgroundProgress(line, record, progressPatch, phase);
541
+ if (progressPatch.phase === "finished" && !stopRequested) {
542
+ record.progress.phase = "running";
543
+ }
544
+ return true;
545
+ }
546
+ function parseBackgroundWorkerStdout(stdoutBuffer) {
547
+ if (stdoutBuffer.trim().length === 0) {
548
+ return null;
549
+ }
550
+ try {
551
+ return JSON.parse(stdoutBuffer);
552
+ } catch {
553
+ return null;
554
+ }
555
+ }
556
+ function resolveBackgroundWorkerFinalStatus(record, stopRequested) {
557
+ if (stopRequested) {
558
+ return "stopped";
559
+ }
560
+ const passed = record.exit_code === 0 && (record.summary?.failed ?? 0) === 0 && record.summary?.fail_on_skipped_triggered !== true;
561
+ return passed ? "passed" : "failed";
562
+ }
563
+ function buildFinishedBackgroundProgress(record, stopRequested) {
564
+ return {
565
+ phase: "finished",
566
+ message: stopRequested ? "Background run stopped." : `Background run finished with status=${record.status}.`,
567
+ heartbeat_at: nowIso(),
568
+ item_index: record.progress?.item_index,
569
+ item_total: record.progress?.item_total,
570
+ item_id: record.progress?.item_id,
571
+ linked_test_index: record.progress?.linked_test_index,
572
+ linked_test_total: record.progress?.linked_test_total,
573
+ current_command: record.progress?.current_command,
574
+ elapsed_ms: record.progress?.elapsed_ms
575
+ };
576
+ }
577
+ async function writeBackgroundWorkerResult(record, parsedResult, stdoutBuffer) {
578
+ if (parsedResult !== null) {
579
+ await writeFileAtomic(record.result_path, `${JSON.stringify(parsedResult, null, 2)}
580
+ `);
581
+ return;
582
+ }
583
+ await writeFileAtomic(record.result_path, `${JSON.stringify({
584
+ parse_error: "Background run output was not valid JSON.",
585
+ stdout_excerpt: tailLines(stdoutBuffer, DEFAULT_BACKGROUND_RUN_LOG_TAIL_LINES)
586
+ }, null, 2)}
587
+ `);
588
+ }
452
589
  async function runBackgroundTestRunWorker(pmRoot, runId, noExtensions = false) {
453
590
  const loaded = await readBackgroundTestRunRecord(pmRoot, runId);
454
591
  if (!loaded) {
@@ -466,14 +603,9 @@ async function runBackgroundTestRunWorker(pmRoot, runId, noExtensions = false) {
466
603
  }
467
604
  };
468
605
  const cliEntry = await resolveBackgroundCliEntry(process.cwd());
469
- const env = {
470
- ...process.env,
471
- PM_PATH: record.pm_root,
472
- PM_GLOBAL_PATH: record.global_pm_root,
473
- FORCE_COLOR: "0"
474
- };
606
+ const env = buildBackgroundWorkerEnv(record);
475
607
  await writeBackgroundRunRecord(pmRoot, record);
476
- const childArgs = noExtensions ? ["--no-extensions", ...record.command_args] : [...record.command_args];
608
+ const childArgs = buildBackgroundWorkerChildArgs(record, noExtensions);
477
609
  const child = spawn(process.execPath, [cliEntry, ...childArgs], {
478
610
  cwd: process.cwd(),
479
611
  env,
@@ -482,104 +614,31 @@ async function runBackgroundTestRunWorker(pmRoot, runId, noExtensions = false) {
482
614
  windowsHide: true
483
615
  });
484
616
  record.child_pid = child.pid;
485
- let writeQueue = Promise.resolve();
486
- const scheduleRecordWrite = () => {
487
- writeQueue = writeQueue.then(async () => {
488
- try {
489
- await writeBackgroundRunRecord(pmRoot, record);
490
- } catch {
491
- }
492
- });
493
- };
617
+ const recordWriteScheduler = createBackgroundRunRecordWriteScheduler(pmRoot, record);
618
+ const scheduleRecordWrite = recordWriteScheduler.schedule;
494
619
  let stdoutWriteQueue = Promise.resolve();
495
620
  let stderrWriteQueue = Promise.resolve();
496
621
  let stdoutBuffer = "";
497
622
  let stderrBuffer = "";
498
- let stopRequested = false;
499
- const requestStop = async () => {
500
- if (stopRequested) {
501
- return;
502
- }
503
- stopRequested = true;
504
- record.stop_requested_at = nowIso();
505
- record.progress = {
506
- ...record.progress,
507
- phase: "stopping",
508
- message: "Stop requested for background run.",
509
- heartbeat_at: nowIso()
510
- };
511
- scheduleRecordWrite();
512
- try {
513
- child.kill("SIGTERM");
514
- } catch {
515
- }
516
- const forceKillDelayMs = Number.parseInt(process.env.PM_BACKGROUND_RUN_FORCE_KILL_DELAY_MS ?? "", 10);
517
- const delay = Number.isFinite(forceKillDelayMs) && forceKillDelayMs > 0 ? forceKillDelayMs : DEFAULT_BACKGROUND_RUN_FORCE_KILL_DELAY_MS;
518
- const forceTimer = setTimeout(() => {
519
- try {
520
- child.kill("SIGKILL");
521
- } catch {
522
- }
523
- }, delay);
524
- forceTimer.unref?.();
525
- };
623
+ const stopState = { stopRequested: false };
526
624
  const onSignal = () => {
527
- void requestStop();
625
+ void requestBackgroundWorkerStop(record, child, stopState, scheduleRecordWrite);
528
626
  };
529
627
  process.on("SIGTERM", onSignal);
530
628
  process.on("SIGINT", onSignal);
531
- const resourceIntervalMs = Number.parseInt(process.env.PM_BACKGROUND_RUN_RESOURCE_INTERVAL_MS ?? "", 10);
532
- const resourceInterval = Number.isFinite(resourceIntervalMs) && resourceIntervalMs > 0 ? resourceIntervalMs : DEFAULT_BACKGROUND_RUN_RESOURCE_SNAPSHOT_INTERVAL_MS;
533
629
  const resourceTimer = setInterval(() => {
534
630
  void (async () => {
535
631
  record.resource = await buildResourceSnapshot(record);
536
632
  record.progress.heartbeat_at = nowIso();
537
633
  scheduleRecordWrite();
538
634
  })();
539
- }, resourceInterval);
635
+ }, resolvePositiveEnvInteger("PM_BACKGROUND_RUN_RESOURCE_INTERVAL_MS", DEFAULT_BACKGROUND_RUN_RESOURCE_SNAPSHOT_INTERVAL_MS));
540
636
  resourceTimer.unref?.();
541
637
  child.stdout?.on("data", (chunk) => {
542
638
  const text = chunk.toString("utf8");
543
639
  stdoutBuffer += text;
544
640
  stdoutWriteQueue = appendFileOrdered(stdoutWriteQueue, record.stdout_path, text);
545
641
  });
546
- const applyProgressLine = (line) => {
547
- const progressPatch = parseProgressLine(line);
548
- if (!progressPatch) {
549
- return false;
550
- }
551
- if (progressPatch.item_id) {
552
- record.progress = {
553
- phase: record.progress.phase === "stopping" ? "stopping" : "running",
554
- message: line,
555
- heartbeat_at: nowIso(),
556
- item_index: progressPatch.item_index,
557
- item_total: progressPatch.item_total,
558
- item_id: progressPatch.item_id,
559
- linked_test_index: void 0,
560
- linked_test_total: void 0,
561
- current_command: void 0,
562
- elapsed_ms: void 0
563
- };
564
- return true;
565
- }
566
- record.progress = {
567
- phase: record.progress.phase === "stopping" ? "stopping" : "running",
568
- message: line,
569
- heartbeat_at: nowIso(),
570
- item_index: progressPatch.item_index ?? record.progress?.item_index,
571
- item_total: progressPatch.item_total ?? record.progress?.item_total,
572
- item_id: progressPatch.item_id ?? record.progress?.item_id,
573
- linked_test_index: progressPatch.linked_test_index,
574
- linked_test_total: progressPatch.linked_test_total,
575
- current_command: progressPatch.current_command,
576
- elapsed_ms: progressPatch.elapsed_ms
577
- };
578
- if (progressPatch.phase === "finished" && !stopRequested) {
579
- record.progress.phase = "running";
580
- }
581
- return true;
582
- };
583
642
  child.stderr?.on("data", (chunk) => {
584
643
  const text = chunk.toString("utf8");
585
644
  stderrWriteQueue = appendFileOrdered(stderrWriteQueue, record.stderr_path, text);
@@ -589,7 +648,7 @@ async function runBackgroundTestRunWorker(pmRoot, runId, noExtensions = false) {
589
648
  let progressChanged = false;
590
649
  for (const part of parts) {
591
650
  const line = part.trimEnd();
592
- if (line.length > 0 && applyProgressLine(line)) {
651
+ if (line.length > 0 && applyBackgroundWorkerProgressLine(record, line, stopState.stopRequested)) {
593
652
  progressChanged = true;
594
653
  }
595
654
  }
@@ -613,49 +672,22 @@ async function runBackgroundTestRunWorker(pmRoot, runId, noExtensions = false) {
613
672
  await stdoutWriteQueue;
614
673
  await stderrWriteQueue;
615
674
  const trailingStderrLine = stderrBuffer.trimEnd();
616
- if (trailingStderrLine.length > 0 && applyProgressLine(trailingStderrLine)) {
675
+ if (trailingStderrLine.length > 0 && applyBackgroundWorkerProgressLine(record, trailingStderrLine, stopState.stopRequested)) {
617
676
  scheduleRecordWrite();
618
677
  }
619
678
  stderrBuffer = "";
620
- let parsedResult = null;
621
- if (stdoutBuffer.trim().length > 0) {
622
- try {
623
- parsedResult = JSON.parse(stdoutBuffer);
624
- } catch {
625
- parsedResult = null;
626
- }
627
- }
679
+ const parsedResult = parseBackgroundWorkerStdout(stdoutBuffer);
628
680
  const evaluated = evaluateWorkerResult(record.kind, parsedResult);
629
681
  record.summary = evaluated.summary;
630
682
  record.exit_code = typeof exitCode === "number" ? exitCode : void 0;
631
683
  record.signal = signal ?? void 0;
632
684
  record.finished_at = nowIso();
633
- record.status = stopRequested ? "stopped" : record.exit_code === 0 && (record.summary.failed ?? 0) === 0 && record.summary.fail_on_skipped_triggered !== true ? "passed" : "failed";
634
- record.progress = {
635
- phase: "finished",
636
- message: stopRequested ? "Background run stopped." : `Background run finished with status=${record.status}.`,
637
- heartbeat_at: nowIso(),
638
- item_index: record.progress?.item_index,
639
- item_total: record.progress?.item_total,
640
- item_id: record.progress?.item_id,
641
- linked_test_index: record.progress?.linked_test_index,
642
- linked_test_total: record.progress?.linked_test_total,
643
- current_command: record.progress?.current_command,
644
- elapsed_ms: record.progress?.elapsed_ms
645
- };
685
+ record.status = resolveBackgroundWorkerFinalStatus(record, stopState.stopRequested);
686
+ record.progress = buildFinishedBackgroundProgress(record, stopState.stopRequested);
646
687
  record.resource = await buildResourceSnapshot(record);
647
- if (parsedResult !== null) {
648
- await writeFileAtomic(record.result_path, `${JSON.stringify(parsedResult, null, 2)}
649
- `);
650
- } else {
651
- await writeFileAtomic(record.result_path, `${JSON.stringify({
652
- parse_error: "Background run output was not valid JSON.",
653
- stdout_excerpt: tailLines(stdoutBuffer, DEFAULT_BACKGROUND_RUN_LOG_TAIL_LINES)
654
- }, null, 2)}
655
- `);
656
- }
688
+ await writeBackgroundWorkerResult(record, parsedResult, stdoutBuffer);
657
689
  await writeBackgroundRunRecord(pmRoot, record);
658
- await writeQueue;
690
+ await recordWriteScheduler.flush();
659
691
  return record;
660
692
  }
661
693
  async function listBackgroundTestRuns(pmRoot, options) {
@@ -719,6 +751,32 @@ async function getBackgroundTestRunStatus(pmRoot, runId) {
719
751
  }
720
752
  };
721
753
  }
754
+ function sendBackgroundRunStopSignal(record, force) {
755
+ const signal = force ? "SIGKILL" : "SIGTERM";
756
+ if (!isPidRunning(record.worker_pid) || !record.worker_pid) {
757
+ return "none";
758
+ }
759
+ try {
760
+ process.kill(record.worker_pid, signal);
761
+ return signal;
762
+ } catch {
763
+ return "none";
764
+ }
765
+ }
766
+ function buildStoppingBackgroundProgress(record, signalSent) {
767
+ return {
768
+ phase: "stopping",
769
+ message: signalSent === "none" ? "Run marked stopped." : `Stop requested via ${signalSent}.`,
770
+ heartbeat_at: nowIso(),
771
+ item_index: record.progress?.item_index,
772
+ item_total: record.progress?.item_total,
773
+ item_id: record.progress?.item_id,
774
+ linked_test_index: record.progress?.linked_test_index,
775
+ linked_test_total: record.progress?.linked_test_total,
776
+ current_command: record.progress?.current_command,
777
+ elapsed_ms: record.progress?.elapsed_ms
778
+ };
779
+ }
722
780
  async function stopBackgroundTestRun(pmRoot, runId, force = false) {
723
781
  const loaded = await readBackgroundTestRunRecord(pmRoot, runId);
724
782
  if (!loaded) {
@@ -731,33 +789,13 @@ async function stopBackgroundTestRun(pmRoot, runId, force = false) {
731
789
  signal_sent: "none"
732
790
  };
733
791
  }
734
- let signalSent = "none";
735
- const signal = force ? "SIGKILL" : "SIGTERM";
736
- if (isPidRunning(refreshed.worker_pid) && refreshed.worker_pid) {
737
- try {
738
- process.kill(refreshed.worker_pid, signal);
739
- signalSent = signal;
740
- } catch {
741
- signalSent = "none";
742
- }
743
- }
792
+ const signalSent = sendBackgroundRunStopSignal(refreshed, force);
744
793
  if (signalSent === "none") {
745
794
  refreshed.status = "stopped";
746
795
  refreshed.finished_at = refreshed.finished_at ?? nowIso();
747
796
  }
748
797
  refreshed.stop_requested_at = nowIso();
749
- refreshed.progress = {
750
- phase: "stopping",
751
- message: signalSent === "none" ? "Run marked stopped." : `Stop requested via ${signalSent}.`,
752
- heartbeat_at: nowIso(),
753
- item_index: refreshed.progress?.item_index,
754
- item_total: refreshed.progress?.item_total,
755
- item_id: refreshed.progress?.item_id,
756
- linked_test_index: refreshed.progress?.linked_test_index,
757
- linked_test_total: refreshed.progress?.linked_test_total,
758
- current_command: refreshed.progress?.current_command,
759
- elapsed_ms: refreshed.progress?.elapsed_ms
760
- };
798
+ refreshed.progress = buildStoppingBackgroundProgress(refreshed, signalSent);
761
799
  await writeBackgroundRunRecord(pmRoot, refreshed);
762
800
  return {
763
801
  run: refreshed,
@@ -985,6 +1023,6 @@ export {
985
1023
  runTestRunsStop,
986
1024
  runTestRunsWorker
987
1025
  };
988
- //# sourceMappingURL=test-runs-CA6K32RD.js.map
1026
+ //# sourceMappingURL=test-runs-FK5E75AA.js.map
989
1027
 
990
- //# debugId=883aa05b-84b3-5651-8b99-ea04681d4f70
1028
+ //# debugId=5fee19a0-e879-5644-9726-fdf6ad3fc754
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../cli/commands/test-runs.ts","../../../../../../../../core/test/background-runs.ts"],"sourcesContent":["/**\n * @module cli/commands/test-runs\n *\n * Implements the pm test runs command surface and its agent-facing runtime behavior.\n */\nimport os from \"node:os\";\nimport { pathExists } 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 {\n type BackgroundLogStream,\n type BackgroundTestRunKind,\n type BackgroundTestRunStatus,\n getBackgroundTestRunStatus,\n listBackgroundTestRuns,\n readBackgroundTestRunLogs,\n resumeBackgroundTestRun,\n runBackgroundTestRunWorker,\n spawnBackgroundTestRunWorker,\n startBackgroundTestRun,\n stopBackgroundTestRun,\n} from \"../../core/test/background-runs.js\";\nimport { getSettingsPath, resolveGlobalPmRoot, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { parseLimit } from \"../shared-parsers.js\";\n\nconst BACKGROUND_STATUS_VALUES: readonly BackgroundTestRunStatus[] = [\"queued\", \"running\", \"passed\", \"failed\", \"stopped\", \"canceled\"];\nconst BACKGROUND_STREAM_VALUES: readonly BackgroundLogStream[] = [\"stdout\", \"stderr\", \"both\"];\n\nfunction normalizeStatus(value: string | undefined): BackgroundTestRunStatus | undefined {\n if (value === undefined) {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n if ((BACKGROUND_STATUS_VALUES as readonly string[]).includes(normalized)) {\n return normalized as BackgroundTestRunStatus;\n }\n throw new PmCliError(`Invalid --status value \"${value}\"`, EXIT_CODE.USAGE);\n}\n\nfunction normalizeStream(value: string | undefined): BackgroundLogStream {\n if (value === undefined || value.trim().length === 0) {\n return \"stderr\";\n }\n const normalized = value.trim().toLowerCase();\n if ((BACKGROUND_STREAM_VALUES as readonly string[]).includes(normalized)) {\n return normalized as BackgroundLogStream;\n }\n throw new PmCliError(`Invalid --stream value \"${value}\"`, EXIT_CODE.USAGE);\n}\n\nfunction resolveWhoamiFallback(): string | undefined {\n try {\n const username = os.userInfo().username.trim();\n if (username.length > 0) {\n return username;\n }\n } catch {\n // Fall back to environment-derived attribution.\n }\n return undefined;\n}\n\nfunction resolveRequestedBy(author: string | undefined, fallback: string): string {\n const candidates = [\n author,\n process.env.PM_AUTHOR,\n fallback,\n process.env.USER,\n process.env.LOGNAME,\n process.env.USERNAME,\n resolveWhoamiFallback(),\n ];\n for (const candidate of candidates) {\n if (typeof candidate !== \"string\") {\n continue;\n }\n const trimmed = candidate.trim();\n if (trimmed.length > 0) {\n return trimmed;\n }\n }\n return \"unknown\";\n}\n\nasync function ensureInitialized(pmRoot: string): Promise<void> {\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n}\n\n/**\n * Documents the start background run command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface StartBackgroundRunCommandOptions {\n kind: BackgroundTestRunKind;\n commandArgs: string[];\n targetId?: string;\n statusFilter?: string;\n author?: string;\n noExtensions?: boolean;\n}\n\n/**\n * Documents the start background run result payload exchanged by command, SDK, and package integrations.\n */\nexport interface StartBackgroundRunResult {\n started: boolean;\n duplicate_of?: string;\n run: unknown;\n}\n\n/**\n * Implements run start background run for the public runtime surface of this module.\n */\nexport async function runStartBackgroundRun(\n options: StartBackgroundRunCommandOptions,\n global: GlobalOptions,\n): Promise<StartBackgroundRunResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n await ensureInitialized(pmRoot);\n const settings = await readSettings(pmRoot);\n const requestedBy = resolveRequestedBy(options.author, settings.author_default);\n const started = await startBackgroundTestRun({\n pmRoot,\n globalPmRoot,\n kind: options.kind,\n commandArgs: options.commandArgs,\n requestedBy,\n targetId: options.targetId,\n statusFilter: options.statusFilter,\n });\n if (!started.started) {\n return {\n started: false,\n duplicate_of: started.duplicate_of,\n run: started.run,\n };\n }\n const spawned = await spawnBackgroundTestRunWorker({\n pmRoot,\n runId: started.run.id,\n noExtensions: options.noExtensions === true,\n });\n return {\n started: true,\n run: spawned,\n };\n}\n\n/**\n * Documents the test runs list command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface TestRunsListCommandOptions {\n status?: string;\n limit?: string;\n}\n\n/**\n * Implements run test runs list for the public runtime surface of this module.\n */\nexport async function runTestRunsList(options: TestRunsListCommandOptions, global: GlobalOptions): Promise<{\n runs: unknown[];\n count: number;\n filters: {\n status?: BackgroundTestRunStatus;\n limit?: number;\n };\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n const status = normalizeStatus(options.status);\n const limit = parseLimit(options.limit, \"limit\");\n const runs = await listBackgroundTestRuns(pmRoot, { status, limit });\n return {\n runs,\n count: runs.length,\n filters: {\n status,\n limit,\n },\n };\n}\n\n/**\n * Implements run test runs status for the public runtime surface of this module.\n */\nexport async function runTestRunsStatus(runId: string, global: GlobalOptions): Promise<{\n run: unknown;\n health: unknown;\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n const status = await getBackgroundTestRunStatus(pmRoot, runId);\n return {\n run: status.run,\n health: status.health,\n };\n}\n\n/**\n * Documents the test runs logs command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface TestRunsLogsCommandOptions {\n stream?: string;\n tail?: string;\n}\n\n/**\n * Implements run test runs logs for the public runtime surface of this module.\n */\nexport async function runTestRunsLogs(\n runId: string,\n options: TestRunsLogsCommandOptions,\n global: GlobalOptions,\n): Promise<{\n run: unknown;\n stream: BackgroundLogStream;\n tail: number;\n stdout: string[];\n stderr: string[];\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n const stream = normalizeStream(options.stream);\n const tail = parseLimit(options.tail, \"tail\");\n const logs = await readBackgroundTestRunLogs(pmRoot, runId, stream, tail);\n return {\n run: logs.run,\n stream: logs.stream,\n tail: logs.tail,\n stdout: logs.stdout,\n stderr: logs.stderr,\n };\n}\n\n/**\n * Documents the test runs stop command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface TestRunsStopCommandOptions {\n force?: boolean;\n}\n\n/**\n * Implements run test runs stop for the public runtime surface of this module.\n */\nexport async function runTestRunsStop(\n runId: string,\n options: TestRunsStopCommandOptions,\n global: GlobalOptions,\n): Promise<{\n run: unknown;\n signal_sent: \"SIGTERM\" | \"SIGKILL\" | \"none\";\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n const stopped = await stopBackgroundTestRun(pmRoot, runId, options.force === true);\n return {\n run: stopped.run,\n signal_sent: stopped.signal_sent,\n };\n}\n\n/**\n * Documents the test runs resume command options payload exchanged by command, SDK, and package integrations.\n */\nexport interface TestRunsResumeCommandOptions {\n author?: string;\n noExtensions?: boolean;\n}\n\n/**\n * Implements run test runs resume for the public runtime surface of this module.\n */\nexport async function runTestRunsResume(\n runId: string,\n options: TestRunsResumeCommandOptions,\n global: GlobalOptions,\n): Promise<{\n resumed_from: string;\n run: unknown;\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n const settings = await readSettings(pmRoot);\n const requestedBy = resolveRequestedBy(options.author, settings.author_default);\n const resumed = await resumeBackgroundTestRun(pmRoot, runId, requestedBy, options.noExtensions === true);\n return {\n resumed_from: runId,\n run: resumed,\n };\n}\n\n/**\n * Implements run test runs worker for the public runtime surface of this module.\n */\nexport async function runTestRunsWorker(runId: string, global: GlobalOptions): Promise<{\n id: string;\n status: BackgroundTestRunStatus;\n exit_code?: number;\n}> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n await ensureInitialized(pmRoot);\n const finished = await runBackgroundTestRunWorker(pmRoot, runId, global.noExtensions === true);\n return {\n id: finished.id,\n status: finished.status,\n exit_code: finished.exit_code,\n };\n}\n","/**\n * @module core/test/background-runs\n *\n * Runs and records linked-test orchestration for Background Runs.\n */\nimport fs from \"node:fs/promises\";\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { createHash, randomBytes } from \"node:crypto\";\nimport path from \"node:path\";\nimport { ensureDir, pathExists, readFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { nowIso } from \"../shared/time.js\";\nimport {\n getTestRunRecordPath,\n getTestRunResultPath,\n getTestRunStderrPath,\n getTestRunStdoutPath,\n getTestRunsPath,\n getTestRunsRecordsPath,\n getTestRunsResultsPath,\n getTestRunsStderrPath,\n getTestRunsStdoutPath,\n} from \"../store/paths.js\";\n\nconst BACKGROUND_RUN_ACTIVE_STATUSES = new Set<BackgroundTestRunStatus>([\"queued\", \"running\"]);\nconst BACKGROUND_RUN_TERMINAL_STATUSES = new Set<BackgroundTestRunStatus>([\"passed\", \"failed\", \"stopped\", \"canceled\"]);\nconst DEFAULT_BACKGROUND_RUN_RESOURCE_SNAPSHOT_INTERVAL_MS = 3000;\nconst DEFAULT_BACKGROUND_RUN_FORCE_KILL_DELAY_MS = 3000;\nconst DEFAULT_BACKGROUND_RUN_HEARTBEAT_STALE_MS = 30000;\nconst DEFAULT_BACKGROUND_RUN_LOG_TAIL_LINES = 100;\nconst PROC_STAT_TICKS_PER_SECOND = 100;\n\n/**\n * Restricts background test run kind values accepted by command, SDK, and storage contracts.\n */\nexport type BackgroundTestRunKind = \"test\" | \"test-all\";\n\n/**\n * Restricts background test run status values accepted by command, SDK, and storage contracts.\n */\nexport type BackgroundTestRunStatus = \"queued\" | \"running\" | \"passed\" | \"failed\" | \"stopped\" | \"canceled\";\n\n/**\n * Restricts background log stream values accepted by command, SDK, and storage contracts.\n */\nexport type BackgroundLogStream = \"stdout\" | \"stderr\" | \"both\";\n\n/**\n * Documents the background run progress payload exchanged by command, SDK, and package integrations.\n */\nexport interface BackgroundRunProgress {\n phase: \"queued\" | \"running\" | \"stopping\" | \"finished\";\n message?: string;\n item_index?: number;\n item_total?: number;\n item_id?: string;\n linked_test_index?: number;\n linked_test_total?: number;\n current_command?: string;\n elapsed_ms?: number;\n heartbeat_at?: string;\n}\n\n/**\n * Documents the background run resource snapshot payload exchanged by command, SDK, and package integrations.\n */\nexport interface BackgroundRunResourceSnapshot {\n recorded_at: string;\n rss_bytes?: number;\n cpu_user_seconds?: number;\n cpu_system_seconds?: number;\n uptime_seconds?: number;\n}\n\n/**\n * Documents the background run summary payload exchanged by command, SDK, and package integrations.\n */\nexport interface BackgroundRunSummary {\n items?: number;\n linked_tests?: number;\n passed: number;\n failed: number;\n skipped: number;\n fail_on_skipped_triggered?: boolean;\n}\n\n/**\n * Documents the background test run record payload exchanged by command, SDK, and package integrations.\n */\nexport interface BackgroundTestRunRecord {\n id: string;\n kind: BackgroundTestRunKind;\n status: BackgroundTestRunStatus;\n created_at: string;\n started_at?: string;\n finished_at?: string;\n updated_at: string;\n requested_by: string;\n fingerprint: string;\n command_args: string[];\n command_label: string;\n pm_root: string;\n global_pm_root: string;\n target_id?: string;\n status_filter?: string;\n attempt: number;\n resumed_from?: string;\n resumed_by?: string;\n worker_pid?: number;\n child_pid?: number;\n exit_code?: number;\n signal?: string;\n stdout_path: string;\n stderr_path: string;\n result_path: string;\n progress?: BackgroundRunProgress;\n resource?: BackgroundRunResourceSnapshot;\n summary?: BackgroundRunSummary;\n stop_requested_at?: string;\n duplicate_of?: string;\n error?: string;\n}\n\n/**\n * Documents the start background test run options payload exchanged by command, SDK, and package integrations.\n */\nexport interface StartBackgroundTestRunOptions {\n pmRoot: string;\n globalPmRoot: string;\n kind: BackgroundTestRunKind;\n commandArgs: string[];\n requestedBy: string;\n targetId?: string;\n statusFilter?: string;\n resumedFrom?: string;\n resumedBy?: string;\n attempt?: number;\n}\n\n/**\n * Documents the start background test run result payload exchanged by command, SDK, and package integrations.\n */\nexport interface StartBackgroundTestRunResult {\n started: boolean;\n run: BackgroundTestRunRecord;\n duplicate_of?: string;\n}\n\n/**\n * Documents the spawn background test run worker options payload exchanged by command, SDK, and package integrations.\n */\nexport interface SpawnBackgroundTestRunWorkerOptions {\n pmRoot: string;\n runId: string;\n noExtensions?: boolean;\n}\n\n/**\n * Documents the stop background test run result payload exchanged by command, SDK, and package integrations.\n */\nexport interface StopBackgroundTestRunResult {\n run: BackgroundTestRunRecord;\n signal_sent: \"SIGTERM\" | \"SIGKILL\" | \"none\";\n}\n\n/**\n * Documents the list background test run options payload exchanged by command, SDK, and package integrations.\n */\nexport interface ListBackgroundTestRunOptions {\n status?: BackgroundTestRunStatus;\n limit?: number;\n}\n\n/**\n * Documents the background run health payload exchanged by command, SDK, and package integrations.\n */\nexport interface BackgroundRunHealth {\n state: \"healthy\" | \"stale\" | \"inactive\";\n last_heartbeat_at?: string;\n heartbeat_lag_ms?: number;\n worker_alive: boolean;\n child_alive: boolean;\n}\n\n/**\n * Documents the background run status view payload exchanged by command, SDK, and package integrations.\n */\nexport interface BackgroundRunStatusView {\n run: BackgroundTestRunRecord;\n health: BackgroundRunHealth;\n}\n\n/**\n * Documents the background run logs result payload exchanged by command, SDK, and package integrations.\n */\nexport interface BackgroundRunLogsResult {\n run: BackgroundTestRunRecord;\n stream: BackgroundLogStream;\n tail: number;\n stdout: string[];\n stderr: string[];\n}\n\ninterface WorkerEvaluationResult {\n summary: BackgroundRunSummary;\n parsedResult: unknown | null;\n}\n\ninterface BackgroundWorkerStopState {\n stopRequested: boolean;\n}\n\ninterface BackgroundRunRecordWriteScheduler {\n schedule: () => void;\n flush: () => Promise<void>;\n}\n\nfunction nowMs(): number {\n return Date.now();\n}\n\nfunction normalizeCommandArgs(args: string[]): string[] {\n return args.map((entry) => entry.trim()).filter((entry) => entry.length > 0);\n}\n\nfunction summarizeCommandLabel(args: string[]): string {\n const joined = args.join(\" \").replaceAll(/\\s+/g, \" \").trim();\n if (joined.length <= 180) {\n return joined;\n }\n return `${joined.slice(0, 177)}...`;\n}\n\nfunction buildRunId(): string {\n const timePart = Date.now().toString(36);\n const randomPart = randomBytes(3).toString(\"hex\");\n return `tr-${timePart}-${randomPart}`;\n}\n\n/**\n * Implements build background test run fingerprint for the public runtime surface of this module.\n */\nexport function buildBackgroundTestRunFingerprint(kind: BackgroundTestRunKind, commandArgs: string[], pmRoot: string): string {\n const payload = {\n kind,\n command: normalizeCommandArgs(commandArgs),\n pm_root: path.resolve(pmRoot),\n };\n return createHash(\"sha256\").update(JSON.stringify(payload)).digest(\"hex\");\n}\n\nfunction isPidRunning(pid: number | undefined): boolean {\n if (!Number.isInteger(pid) || !pid || pid <= 0) {\n return false;\n }\n try {\n process.kill(pid, 0);\n return true;\n } catch (error: unknown) {\n const code = typeof error === \"object\" && error !== null && \"code\" in error ? (error as { code?: string }).code : undefined;\n return code === \"EPERM\";\n }\n}\n\nasync function ensureBackgroundRunStorage(pmRoot: string): Promise<void> {\n await ensureDir(getTestRunsPath(pmRoot));\n await ensureDir(getTestRunsRecordsPath(pmRoot));\n await ensureDir(getTestRunsStdoutPath(pmRoot));\n await ensureDir(getTestRunsStderrPath(pmRoot));\n await ensureDir(getTestRunsResultsPath(pmRoot));\n}\n\nasync function parseBackgroundRunRecord(raw: string, recordPath: string): Promise<BackgroundTestRunRecord> {\n try {\n const parsed = JSON.parse(raw) as BackgroundTestRunRecord;\n if (!parsed || typeof parsed !== \"object\" || typeof parsed.id !== \"string\") {\n throw new Error(\"invalid run record payload\");\n }\n return parsed;\n } catch (error: unknown) {\n throw new PmCliError(\n `Failed to parse background test run record at ${recordPath}: ${error instanceof Error ? error.message : String(error)}`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n}\n\nasync function writeBackgroundRunRecord(pmRoot: string, record: BackgroundTestRunRecord): Promise<void> {\n const next: BackgroundTestRunRecord = {\n ...record,\n updated_at: nowIso(),\n };\n await writeFileAtomic(getTestRunRecordPath(pmRoot, record.id), `${JSON.stringify(next, null, 2)}\\n`);\n}\n\n/**\n * Implements read background test run record for the public runtime surface of this module.\n */\nexport async function readBackgroundTestRunRecord(pmRoot: string, runId: string): Promise<BackgroundTestRunRecord | null> {\n const recordPath = getTestRunRecordPath(pmRoot, runId);\n const raw = await readFileIfExists(recordPath);\n if (!raw) {\n return null;\n }\n return parseBackgroundRunRecord(raw, recordPath);\n}\n\nasync function listBackgroundRunRecordPaths(pmRoot: string): Promise<string[]> {\n const recordsRoot = getTestRunsRecordsPath(pmRoot);\n if (!(await pathExists(recordsRoot))) {\n return [];\n }\n const entries = await fs.readdir(recordsRoot, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".json\"))\n .map((entry) => path.join(recordsRoot, entry.name))\n .sort((left, right) => right.localeCompare(left));\n}\n\nfunction parseLinuxRssStatus(raw: string): number | undefined {\n const match = raw.match(/^VmRSS:\\s+(\\d+)\\s+kB$/m);\n if (!match) {\n return undefined;\n }\n return Number.parseInt(match[1], 10) * 1024;\n}\n\nasync function readLinuxRssBytes(pid: number): Promise<number | undefined> {\n if (process.platform !== \"linux\") {\n return undefined;\n }\n try {\n const raw = await fs.readFile(`/proc/${pid}/status`, \"utf8\");\n return parseLinuxRssStatus(raw);\n } catch {\n return undefined;\n }\n}\n\nfunction parseLinuxCpuStat(raw: string): { cpu_user_seconds?: number; cpu_system_seconds?: number } {\n const closeParenIndex = raw.lastIndexOf(\")\");\n if (closeParenIndex < 0) {\n return {};\n }\n const remainder = raw.slice(closeParenIndex + 2).trim();\n const parts = remainder.split(/\\s+/);\n const utimeTicks = Number.parseInt(parts[11], 10);\n const stimeTicks = Number.parseInt(parts[12], 10);\n if (!Number.isFinite(utimeTicks) || !Number.isFinite(stimeTicks)) {\n return {};\n }\n return {\n cpu_user_seconds: utimeTicks / PROC_STAT_TICKS_PER_SECOND,\n cpu_system_seconds: stimeTicks / PROC_STAT_TICKS_PER_SECOND,\n };\n}\n\nasync function readLinuxCpuSeconds(\n pid: number,\n): Promise<{ cpu_user_seconds?: number; cpu_system_seconds?: number }> {\n if (process.platform !== \"linux\") {\n return {};\n }\n try {\n const raw = await fs.readFile(`/proc/${pid}/stat`, \"utf8\");\n return parseLinuxCpuStat(raw);\n } catch {\n /* c8 ignore next -- /proc entries can disappear between liveness and stat reads. */\n return {};\n }\n}\n\nasync function buildResourceSnapshot(record: BackgroundTestRunRecord): Promise<BackgroundRunResourceSnapshot | undefined> {\n const pid = record.child_pid ?? record.worker_pid;\n if (!isPidRunning(pid)) {\n return undefined;\n }\n const rssBytes = await readLinuxRssBytes(pid as number);\n const cpu = await readLinuxCpuSeconds(pid as number);\n const startedAtMs = record.started_at ? Date.parse(record.started_at) : Number.NaN;\n const uptimeSeconds = Number.isFinite(startedAtMs) ? Math.max(0, (nowMs() - startedAtMs) / 1000) : undefined;\n return {\n recorded_at: nowIso(),\n rss_bytes: rssBytes,\n cpu_user_seconds: cpu.cpu_user_seconds,\n cpu_system_seconds: cpu.cpu_system_seconds,\n uptime_seconds: uptimeSeconds,\n };\n}\n\nfunction readCount(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\nfunction evaluateWorkerResult(kind: BackgroundTestRunKind, payload: unknown): WorkerEvaluationResult {\n if (!payload || typeof payload !== \"object\") {\n return {\n summary: {\n passed: 0,\n failed: 1,\n skipped: 0,\n },\n parsedResult: null,\n };\n }\n const record = payload as Record<string, unknown>;\n if (kind === \"test-all\") {\n const totals = (record.totals ?? {}) as Record<string, unknown>;\n return {\n summary: {\n items: typeof totals.items === \"number\" ? totals.items : undefined,\n linked_tests: typeof totals.linked_tests === \"number\" ? totals.linked_tests : undefined,\n passed: readCount(totals.passed),\n failed: readCount(totals.failed),\n skipped: readCount(totals.skipped),\n fail_on_skipped_triggered: record.fail_on_skipped_triggered === true ? true : undefined,\n },\n parsedResult: payload,\n };\n }\n const runResults = Array.isArray(record.run_results) ? record.run_results : [];\n let passed = 0;\n let failed = 0;\n let skipped = 0;\n for (const entry of runResults) {\n if (!entry || typeof entry !== \"object\") {\n continue;\n }\n const status = (entry as { status?: unknown }).status;\n if (status === \"passed\") {\n passed += 1;\n continue;\n }\n if (status === \"failed\") {\n failed += 1;\n continue;\n }\n skipped += 1;\n }\n return {\n summary: {\n passed,\n failed,\n skipped,\n fail_on_skipped_triggered: record.fail_on_skipped_triggered === true ? true : undefined,\n },\n parsedResult: payload,\n };\n}\n\nfunction parseProgressLine(stderrLine: string): Partial<BackgroundRunProgress> | null {\n const line = stderrLine.trim();\n if (line.length === 0) {\n return null;\n }\n const testAllMatch = line.match(/\\[pm test-all\\]\\s+item\\s+(\\d+)\\/(\\d+)\\s+(start|end)\\s+id=([^\\s]+)/i);\n if (testAllMatch) {\n const itemIndex = Number.parseInt(testAllMatch[1], 10);\n const itemTotal = Number.parseInt(testAllMatch[2], 10);\n return {\n item_index: itemIndex,\n item_total: itemTotal,\n item_id: testAllMatch[4],\n linked_test_index: undefined,\n linked_test_total: undefined,\n current_command: undefined,\n elapsed_ms: undefined,\n heartbeat_at: nowIso(),\n phase: testAllMatch[3]?.toLowerCase() === \"end\" ? \"finished\" : \"running\",\n };\n }\n const linkedTestMatch = line.match(/\\[pm test\\]\\s+linked-test\\s+(\\d+)\\/(\\d+)\\s+(start|running|end)(?:.*elapsed_ms=(\\d+))?/i);\n if (!linkedTestMatch) {\n return null;\n }\n const index = Number.parseInt(linkedTestMatch[1], 10);\n const total = Number.parseInt(linkedTestMatch[2], 10);\n const elapsed = linkedTestMatch[4] ? Number.parseInt(linkedTestMatch[4], 10) : undefined;\n const commandMatch = line.match(/\\scommand=\"((?:\\\\.|[^\"\\\\])*)\"/);\n const currentCommand = commandMatch\n ? commandMatch[1].replaceAll('\\\\\"', '\"').replaceAll(\"\\\\\\\\\", \"\\\\\")\n : undefined;\n return {\n linked_test_index: index,\n linked_test_total: total,\n current_command: currentCommand,\n elapsed_ms: Number.isFinite(elapsed) ? elapsed : undefined,\n heartbeat_at: nowIso(),\n phase: linkedTestMatch[3]?.toLowerCase() === \"end\" ? \"finished\" : \"running\",\n };\n}\n\nfunction splitLines(value: string): string[] {\n return value\n .split(/\\r?\\n/)\n .map((entry) => entry.trimEnd())\n .filter((entry) => entry.length > 0);\n}\n\nfunction tailLines(value: string, limit: number): string[] {\n if (limit <= 0) {\n return [];\n }\n const lines = splitLines(value);\n if (lines.length <= limit) {\n return lines;\n }\n return lines.slice(lines.length - limit);\n}\n\nasync function resolveBackgroundCliEntry(cwd: string): Promise<string> {\n const configured = process.env.PM_BACKGROUND_CLI_ENTRY?.trim();\n if (configured && configured.length > 0) {\n const resolvedConfigured = path.resolve(cwd, configured);\n if (await pathExists(resolvedConfigured)) {\n return resolvedConfigured;\n }\n }\n const distEntry = path.resolve(cwd, \"dist\", \"cli.js\");\n if (await pathExists(distEntry)) {\n return distEntry;\n }\n const argvEntry = process.argv[1]?.trim();\n if (argvEntry && argvEntry.length > 0) {\n const resolvedArgvEntry = path.resolve(cwd, argvEntry);\n if (await pathExists(resolvedArgvEntry)) {\n return resolvedArgvEntry;\n }\n }\n throw new PmCliError(\n \"Unable to resolve a CLI entrypoint for background test runs. Build the project or set PM_BACKGROUND_CLI_ENTRY.\",\n EXIT_CODE.GENERIC_FAILURE,\n );\n}\n\nasync function refreshRunIfStale(pmRoot: string, record: BackgroundTestRunRecord): Promise<BackgroundTestRunRecord> {\n if (!BACKGROUND_RUN_ACTIVE_STATUSES.has(record.status)) {\n return record;\n }\n const workerAlive = isPidRunning(record.worker_pid);\n if (workerAlive) {\n return record;\n }\n if (record.finished_at) {\n return record;\n }\n const next: BackgroundTestRunRecord = {\n ...record,\n status: \"failed\",\n finished_at: nowIso(),\n error: record.error ?? \"Background test run worker exited before writing terminal status.\",\n };\n await writeBackgroundRunRecord(pmRoot, next);\n return next;\n}\n\n/**\n * Implements start background test run for the public runtime surface of this module.\n */\nexport async function startBackgroundTestRun(options: StartBackgroundTestRunOptions): Promise<StartBackgroundTestRunResult> {\n await ensureBackgroundRunStorage(options.pmRoot);\n const normalizedArgs = normalizeCommandArgs(options.commandArgs);\n if (normalizedArgs.length === 0) {\n throw new PmCliError(\"Background test run requires command arguments.\", EXIT_CODE.USAGE);\n }\n const fingerprint = buildBackgroundTestRunFingerprint(options.kind, normalizedArgs, options.pmRoot);\n const existingRuns = await listBackgroundTestRuns(options.pmRoot, {});\n for (const existing of existingRuns) {\n const refreshed = await refreshRunIfStale(options.pmRoot, existing);\n if (refreshed.fingerprint !== fingerprint) {\n continue;\n }\n if (!BACKGROUND_RUN_ACTIVE_STATUSES.has(refreshed.status) || !isPidRunning(refreshed.worker_pid)) {\n continue;\n }\n return {\n started: false,\n run: {\n ...refreshed,\n duplicate_of: refreshed.id,\n },\n duplicate_of: refreshed.id,\n };\n }\n\n const runId = buildRunId();\n const createdAt = nowIso();\n const stdoutPath = getTestRunStdoutPath(options.pmRoot, runId);\n const stderrPath = getTestRunStderrPath(options.pmRoot, runId);\n const resultPath = getTestRunResultPath(options.pmRoot, runId);\n await fs.writeFile(stdoutPath, \"\", \"utf8\");\n await fs.writeFile(stderrPath, \"\", \"utf8\");\n const record: BackgroundTestRunRecord = {\n id: runId,\n kind: options.kind,\n status: \"queued\",\n created_at: createdAt,\n updated_at: createdAt,\n requested_by: options.requestedBy,\n fingerprint,\n command_args: normalizedArgs,\n command_label: summarizeCommandLabel(normalizedArgs),\n pm_root: options.pmRoot,\n global_pm_root: options.globalPmRoot,\n target_id: options.targetId,\n status_filter: options.statusFilter,\n attempt: typeof options.attempt === \"number\" && Number.isFinite(options.attempt) && options.attempt >= 1\n ? Math.floor(options.attempt)\n : 1,\n resumed_from: options.resumedFrom,\n resumed_by: options.resumedBy,\n stdout_path: stdoutPath,\n stderr_path: stderrPath,\n result_path: resultPath,\n progress: {\n phase: \"queued\",\n message: \"Queued for background execution.\",\n heartbeat_at: createdAt,\n },\n };\n await writeBackgroundRunRecord(options.pmRoot, record);\n return {\n started: true,\n run: record,\n };\n}\n\n/**\n * Implements spawn background test run worker for the public runtime surface of this module.\n */\nexport async function spawnBackgroundTestRunWorker(options: SpawnBackgroundTestRunWorkerOptions): Promise<BackgroundTestRunRecord> {\n const record = await readBackgroundTestRunRecord(options.pmRoot, options.runId);\n if (!record) {\n throw new PmCliError(`Background test run ${options.runId} not found`, EXIT_CODE.NOT_FOUND);\n }\n if (BACKGROUND_RUN_TERMINAL_STATUSES.has(record.status)) {\n throw new PmCliError(`Background test run ${record.id} is already terminal (${record.status}).`, EXIT_CODE.CONFLICT);\n }\n const cliEntry = await resolveBackgroundCliEntry(process.cwd());\n const args: string[] = [];\n if (options.noExtensions === true) {\n args.push(\"--no-extensions\");\n }\n args.push(\"--path\", record.pm_root, \"test-runs-worker\", record.id);\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n PM_PATH: record.pm_root,\n PM_GLOBAL_PATH: record.global_pm_root,\n PM_BACKGROUND_TEST_RUN_ID: record.id,\n PM_BACKGROUND_TEST_RUN_ATTEMPT: String(record.attempt),\n PM_BACKGROUND_TEST_RUN_RESUMED_FROM: record.resumed_from ?? \"\",\n FORCE_COLOR: \"0\",\n };\n const child = spawn(process.execPath, [cliEntry, ...args], {\n cwd: process.cwd(),\n env,\n detached: true,\n stdio: \"ignore\",\n windowsHide: true,\n });\n child.unref();\n const next: BackgroundTestRunRecord = {\n ...record,\n status: \"queued\",\n worker_pid: child.pid as number | undefined,\n progress: {\n phase: \"queued\",\n message: \"Worker process started.\",\n heartbeat_at: nowIso(),\n },\n };\n await writeBackgroundRunRecord(options.pmRoot, next);\n return next;\n}\n\nasync function appendFileOrdered(queue: Promise<void>, filePath: string, text: string): Promise<void> {\n await queue;\n await fs.appendFile(filePath, text, \"utf8\");\n}\n\nfunction resolvePositiveEnvInteger(name: string, fallback: number): number {\n const parsed = Number.parseInt(process.env[name] ?? \"\", 10);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;\n}\n\nfunction buildBackgroundWorkerEnv(record: BackgroundTestRunRecord): NodeJS.ProcessEnv {\n return {\n ...process.env,\n PM_PATH: record.pm_root,\n PM_GLOBAL_PATH: record.global_pm_root,\n FORCE_COLOR: \"0\",\n };\n}\n\nfunction buildBackgroundWorkerChildArgs(record: BackgroundTestRunRecord, noExtensions: boolean): string[] {\n return noExtensions ? [\"--no-extensions\", ...record.command_args] : [...record.command_args];\n}\n\nfunction createBackgroundRunRecordWriteScheduler(\n pmRoot: string,\n record: BackgroundTestRunRecord,\n): BackgroundRunRecordWriteScheduler {\n let writeQueue: Promise<void> = Promise.resolve();\n return {\n schedule(): void {\n writeQueue = writeQueue.then(async () => {\n try {\n await writeBackgroundRunRecord(pmRoot, record);\n } catch {\n // Keep worker alive even if a single metadata write fails.\n }\n });\n },\n async flush(): Promise<void> {\n await writeQueue;\n },\n };\n}\n\nfunction requestChildSignal(child: ChildProcess, signal: NodeJS.Signals): void {\n try {\n child.kill(signal);\n } catch {\n // Child may already be gone.\n }\n}\n\nasync function requestBackgroundWorkerStop(\n record: BackgroundTestRunRecord,\n child: ChildProcess,\n state: BackgroundWorkerStopState,\n scheduleRecordWrite: () => void,\n): Promise<void> {\n if (state.stopRequested) {\n return;\n }\n state.stopRequested = true;\n record.stop_requested_at = nowIso();\n record.progress = {\n ...record.progress,\n phase: \"stopping\",\n message: \"Stop requested for background run.\",\n heartbeat_at: nowIso(),\n };\n scheduleRecordWrite();\n requestChildSignal(child, \"SIGTERM\");\n const forceTimer = setTimeout(() => requestChildSignal(child, \"SIGKILL\"), resolvePositiveEnvInteger(\n \"PM_BACKGROUND_RUN_FORCE_KILL_DELAY_MS\",\n DEFAULT_BACKGROUND_RUN_FORCE_KILL_DELAY_MS,\n ));\n forceTimer.unref?.();\n}\n\nfunction buildItemBackgroundProgress(line: string, progressPatch: Partial<BackgroundRunProgress>, phase: \"running\" | \"stopping\"): BackgroundRunProgress {\n return {\n phase,\n message: line,\n heartbeat_at: nowIso(),\n item_index: progressPatch.item_index,\n item_total: progressPatch.item_total,\n item_id: progressPatch.item_id,\n linked_test_index: undefined,\n linked_test_total: undefined,\n current_command: undefined,\n elapsed_ms: undefined,\n };\n}\n\nfunction buildLinkedTestBackgroundProgress(\n line: string,\n record: BackgroundTestRunRecord,\n progressPatch: Partial<BackgroundRunProgress>,\n phase: \"running\" | \"stopping\",\n): BackgroundRunProgress {\n return {\n phase,\n message: line,\n heartbeat_at: nowIso(),\n item_index: progressPatch.item_index ?? record.progress?.item_index,\n item_total: progressPatch.item_total ?? record.progress?.item_total,\n item_id: progressPatch.item_id ?? record.progress?.item_id,\n linked_test_index: progressPatch.linked_test_index,\n linked_test_total: progressPatch.linked_test_total,\n current_command: progressPatch.current_command,\n elapsed_ms: progressPatch.elapsed_ms,\n };\n}\n\nfunction applyBackgroundWorkerProgressLine(record: BackgroundTestRunRecord, line: string, stopRequested: boolean): boolean {\n const progressPatch = parseProgressLine(line);\n if (!progressPatch) {\n return false;\n }\n const phase = record.progress?.phase === \"stopping\" ? \"stopping\" : \"running\";\n record.progress = progressPatch.item_id\n ? buildItemBackgroundProgress(line, progressPatch, phase)\n : buildLinkedTestBackgroundProgress(line, record, progressPatch, phase);\n if (progressPatch.phase === \"finished\" && !stopRequested) {\n record.progress.phase = \"running\";\n }\n return true;\n}\n\nfunction parseBackgroundWorkerStdout(stdoutBuffer: string): unknown | null {\n if (stdoutBuffer.trim().length === 0) {\n return null;\n }\n try {\n return JSON.parse(stdoutBuffer) as unknown;\n } catch {\n return null;\n }\n}\n\nfunction resolveBackgroundWorkerFinalStatus(record: BackgroundTestRunRecord, stopRequested: boolean): BackgroundTestRunStatus {\n if (stopRequested) {\n return \"stopped\";\n }\n const passed = record.exit_code === 0 && (record.summary?.failed ?? 0) === 0 && record.summary?.fail_on_skipped_triggered !== true;\n return passed ? \"passed\" : \"failed\";\n}\n\nfunction buildFinishedBackgroundProgress(record: BackgroundTestRunRecord, stopRequested: boolean): BackgroundRunProgress {\n return {\n phase: \"finished\",\n message: stopRequested ? \"Background run stopped.\" : `Background run finished with status=${record.status}.`,\n heartbeat_at: nowIso(),\n item_index: record.progress?.item_index,\n item_total: record.progress?.item_total,\n item_id: record.progress?.item_id,\n linked_test_index: record.progress?.linked_test_index,\n linked_test_total: record.progress?.linked_test_total,\n current_command: record.progress?.current_command,\n elapsed_ms: record.progress?.elapsed_ms,\n };\n}\n\nasync function writeBackgroundWorkerResult(record: BackgroundTestRunRecord, parsedResult: unknown | null, stdoutBuffer: string): Promise<void> {\n if (parsedResult !== null) {\n await writeFileAtomic(record.result_path, `${JSON.stringify(parsedResult, null, 2)}\\n`);\n return;\n }\n await writeFileAtomic(\n record.result_path,\n `${JSON.stringify(\n {\n parse_error: \"Background run output was not valid JSON.\",\n stdout_excerpt: tailLines(stdoutBuffer, DEFAULT_BACKGROUND_RUN_LOG_TAIL_LINES),\n },\n null,\n 2,\n )}\\n`,\n );\n}\n\n/**\n * Implements run background test run worker for the public runtime surface of this module.\n */\nexport async function runBackgroundTestRunWorker(pmRoot: string, runId: string, noExtensions = false): Promise<BackgroundTestRunRecord> {\n const loaded = await readBackgroundTestRunRecord(pmRoot, runId);\n if (!loaded) {\n throw new PmCliError(`Background test run ${runId} not found`, EXIT_CODE.NOT_FOUND);\n }\n const record: BackgroundTestRunRecord = {\n ...loaded,\n status: \"running\",\n started_at: loaded.started_at ?? nowIso(),\n worker_pid: process.pid,\n progress: {\n phase: \"running\",\n message: \"Worker started.\",\n heartbeat_at: nowIso(),\n },\n };\n const cliEntry = await resolveBackgroundCliEntry(process.cwd());\n const env = buildBackgroundWorkerEnv(record);\n await writeBackgroundRunRecord(pmRoot, record);\n\n const childArgs = buildBackgroundWorkerChildArgs(record, noExtensions);\n const child = spawn(process.execPath, [cliEntry, ...childArgs], {\n cwd: process.cwd(),\n env,\n detached: false,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n windowsHide: true,\n });\n record.child_pid = child.pid as number | undefined;\n\n const recordWriteScheduler = createBackgroundRunRecordWriteScheduler(pmRoot, record);\n const scheduleRecordWrite = recordWriteScheduler.schedule;\n\n let stdoutWriteQueue: Promise<void> = Promise.resolve();\n let stderrWriteQueue: Promise<void> = Promise.resolve();\n let stdoutBuffer = \"\";\n let stderrBuffer = \"\";\n const stopState: BackgroundWorkerStopState = { stopRequested: false };\n\n const onSignal = (): void => {\n void requestBackgroundWorkerStop(record, child, stopState, scheduleRecordWrite);\n };\n process.on(\"SIGTERM\", onSignal);\n process.on(\"SIGINT\", onSignal);\n\n const resourceTimer = setInterval(() => {\n void (async () => {\n record.resource = await buildResourceSnapshot(record);\n (record.progress as BackgroundRunProgress).heartbeat_at = nowIso();\n scheduleRecordWrite();\n })();\n }, resolvePositiveEnvInteger(\"PM_BACKGROUND_RUN_RESOURCE_INTERVAL_MS\", DEFAULT_BACKGROUND_RUN_RESOURCE_SNAPSHOT_INTERVAL_MS));\n resourceTimer.unref?.();\n\n child.stdout?.on(\"data\", (chunk) => {\n const text = chunk.toString(\"utf8\");\n stdoutBuffer += text;\n stdoutWriteQueue = appendFileOrdered(stdoutWriteQueue, record.stdout_path, text);\n });\n\n child.stderr?.on(\"data\", (chunk) => {\n const text = chunk.toString(\"utf8\");\n stderrWriteQueue = appendFileOrdered(stderrWriteQueue, record.stderr_path, text);\n stderrBuffer += text;\n const parts = stderrBuffer.split(/\\r?\\n/);\n stderrBuffer = parts.pop()!;\n let progressChanged = false;\n for (const part of parts) {\n const line = part.trimEnd();\n if (line.length > 0 && applyBackgroundWorkerProgressLine(record, line, stopState.stopRequested)) {\n progressChanged = true;\n }\n }\n if (progressChanged) {\n scheduleRecordWrite();\n }\n });\n\n let exitCode: number | null = null;\n let signal: NodeJS.Signals | null = null;\n try {\n ({ code: exitCode, signal } = await new Promise<{ code: number | null; signal: NodeJS.Signals | null }>((resolve) => {\n child.on(\"close\", (code, closeSignal) => {\n resolve({ code, signal: closeSignal });\n });\n }));\n } finally {\n clearInterval(resourceTimer);\n process.off(\"SIGTERM\", onSignal);\n process.off(\"SIGINT\", onSignal);\n }\n\n await stdoutWriteQueue;\n await stderrWriteQueue;\n const trailingStderrLine = stderrBuffer.trimEnd();\n if (trailingStderrLine.length > 0 && applyBackgroundWorkerProgressLine(record, trailingStderrLine, stopState.stopRequested)) {\n scheduleRecordWrite();\n }\n stderrBuffer = \"\";\n\n const parsedResult = parseBackgroundWorkerStdout(stdoutBuffer);\n const evaluated = evaluateWorkerResult(record.kind, parsedResult);\n record.summary = evaluated.summary;\n record.exit_code = typeof exitCode === \"number\" ? exitCode : undefined;\n record.signal = signal ?? undefined;\n record.finished_at = nowIso();\n record.status = resolveBackgroundWorkerFinalStatus(record, stopState.stopRequested);\n record.progress = buildFinishedBackgroundProgress(record, stopState.stopRequested);\n record.resource = await buildResourceSnapshot(record);\n await writeBackgroundWorkerResult(record, parsedResult, stdoutBuffer);\n await writeBackgroundRunRecord(pmRoot, record);\n await recordWriteScheduler.flush();\n return record;\n}\n\n/**\n * Implements list background test runs for the public runtime surface of this module.\n */\nexport async function listBackgroundTestRuns(\n pmRoot: string,\n options: ListBackgroundTestRunOptions,\n): Promise<BackgroundTestRunRecord[]> {\n const recordPaths = await listBackgroundRunRecordPaths(pmRoot);\n const runs: BackgroundTestRunRecord[] = [];\n for (const recordPath of recordPaths) {\n const raw = await readFileIfExists(recordPath);\n if (!raw) {\n continue;\n }\n const parsed = await parseBackgroundRunRecord(raw, recordPath);\n runs.push(parsed);\n }\n const refreshed: BackgroundTestRunRecord[] = [];\n for (const run of runs) {\n refreshed.push(await refreshRunIfStale(pmRoot, run));\n }\n const filtered = options.status ? refreshed.filter((entry) => entry.status === options.status) : refreshed;\n const sorted = filtered.sort((left, right) => {\n const byUpdated = Date.parse(right.updated_at) - Date.parse(left.updated_at);\n if (Number.isFinite(byUpdated) && byUpdated !== 0) {\n return byUpdated;\n }\n return right.id.localeCompare(left.id);\n });\n const limit = typeof options.limit === \"number\" && options.limit >= 0 ? options.limit : undefined;\n return limit === undefined ? sorted : sorted.slice(0, limit);\n}\n\n/**\n * Implements get background test run status for the public runtime surface of this module.\n */\nexport async function getBackgroundTestRunStatus(pmRoot: string, runId: string): Promise<BackgroundRunStatusView> {\n const loaded = await readBackgroundTestRunRecord(pmRoot, runId);\n if (!loaded) {\n throw new PmCliError(`Background test run ${runId} not found`, EXIT_CODE.NOT_FOUND);\n }\n const refreshed = await refreshRunIfStale(pmRoot, loaded);\n const workerAlive = isPidRunning(refreshed.worker_pid);\n const childAlive = isPidRunning(refreshed.child_pid);\n if (refreshed.status === \"running\" && !childAlive && !refreshed.finished_at && !workerAlive) {\n refreshed.status = \"failed\";\n refreshed.finished_at = nowIso();\n refreshed.error = refreshed.error ?? \"Background run process exited unexpectedly.\";\n await writeBackgroundRunRecord(pmRoot, refreshed);\n }\n if (refreshed.status === \"running\") {\n refreshed.resource = await buildResourceSnapshot(refreshed);\n await writeBackgroundRunRecord(pmRoot, refreshed);\n }\n const heartbeatAt = refreshed.progress?.heartbeat_at;\n const heartbeatAtMs = heartbeatAt ? Date.parse(heartbeatAt) : Number.NaN;\n const lagMs = Number.isFinite(heartbeatAtMs) ? Math.max(0, nowMs() - heartbeatAtMs) : undefined;\n const staleMs = Number.parseInt(process.env.PM_BACKGROUND_RUN_HEARTBEAT_STALE_MS ?? \"\", 10);\n const staleThresholdMs = Number.isFinite(staleMs) && staleMs > 0 ? staleMs : DEFAULT_BACKGROUND_RUN_HEARTBEAT_STALE_MS;\n const healthState = refreshed.status === \"running\"\n ? lagMs !== undefined && lagMs > staleThresholdMs\n ? \"stale\"\n : \"healthy\"\n : \"inactive\";\n return {\n run: refreshed,\n health: {\n state: healthState,\n last_heartbeat_at: heartbeatAt,\n heartbeat_lag_ms: lagMs,\n worker_alive: workerAlive,\n child_alive: childAlive,\n },\n };\n}\n\n/* v8 ignore start -- stop-signal branches depend on live process state; command tests cover observable stop behavior */\nfunction sendBackgroundRunStopSignal(record: BackgroundTestRunRecord, force: boolean): \"SIGTERM\" | \"SIGKILL\" | \"none\" {\n const signal: NodeJS.Signals = force ? \"SIGKILL\" : \"SIGTERM\";\n if (!isPidRunning(record.worker_pid) || !record.worker_pid) {\n return \"none\";\n }\n try {\n process.kill(record.worker_pid, signal);\n return signal;\n } catch {\n return \"none\";\n }\n}\n/* v8 ignore stop */\n\nfunction buildStoppingBackgroundProgress(\n record: BackgroundTestRunRecord,\n signalSent: \"SIGTERM\" | \"SIGKILL\" | \"none\",\n): BackgroundRunProgress {\n return {\n phase: \"stopping\",\n message: signalSent === \"none\" ? \"Run marked stopped.\" : `Stop requested via ${signalSent}.`,\n heartbeat_at: nowIso(),\n item_index: record.progress?.item_index,\n item_total: record.progress?.item_total,\n item_id: record.progress?.item_id,\n linked_test_index: record.progress?.linked_test_index,\n linked_test_total: record.progress?.linked_test_total,\n current_command: record.progress?.current_command,\n elapsed_ms: record.progress?.elapsed_ms,\n };\n}\n\n/**\n * Implements stop background test run for the public runtime surface of this module.\n */\nexport async function stopBackgroundTestRun(pmRoot: string, runId: string, force = false): Promise<StopBackgroundTestRunResult> {\n const loaded = await readBackgroundTestRunRecord(pmRoot, runId);\n if (!loaded) {\n throw new PmCliError(`Background test run ${runId} not found`, EXIT_CODE.NOT_FOUND);\n }\n const refreshed = await refreshRunIfStale(pmRoot, loaded);\n if (BACKGROUND_RUN_TERMINAL_STATUSES.has(refreshed.status)) {\n return {\n run: refreshed,\n signal_sent: \"none\",\n };\n }\n const signalSent = sendBackgroundRunStopSignal(refreshed, force);\n if (signalSent === \"none\") {\n refreshed.status = \"stopped\";\n refreshed.finished_at = refreshed.finished_at ?? nowIso();\n }\n refreshed.stop_requested_at = nowIso();\n refreshed.progress = buildStoppingBackgroundProgress(refreshed, signalSent);\n await writeBackgroundRunRecord(pmRoot, refreshed);\n return {\n run: refreshed,\n signal_sent: signalSent,\n };\n}\n\n/**\n * Implements resume background test run for the public runtime surface of this module.\n */\nexport async function resumeBackgroundTestRun(\n pmRoot: string,\n runId: string,\n requestedBy: string,\n noExtensions = false,\n): Promise<BackgroundTestRunRecord> {\n const loaded = await readBackgroundTestRunRecord(pmRoot, runId);\n if (!loaded) {\n throw new PmCliError(`Background test run ${runId} not found`, EXIT_CODE.NOT_FOUND);\n }\n const refreshed = await refreshRunIfStale(pmRoot, loaded);\n if (!BACKGROUND_RUN_TERMINAL_STATUSES.has(refreshed.status)) {\n throw new PmCliError(`Background test run ${runId} is not terminal and cannot be resumed.`, EXIT_CODE.CONFLICT);\n }\n const started = await startBackgroundTestRun({\n pmRoot: refreshed.pm_root,\n globalPmRoot: refreshed.global_pm_root,\n kind: refreshed.kind,\n commandArgs: refreshed.command_args,\n requestedBy,\n targetId: refreshed.target_id,\n statusFilter: refreshed.status_filter,\n resumedFrom: refreshed.id,\n resumedBy: requestedBy,\n attempt: refreshed.attempt + 1,\n });\n if (!started.started) {\n return started.run;\n }\n const spawned = await spawnBackgroundTestRunWorker({\n pmRoot,\n runId: started.run.id,\n noExtensions,\n });\n const prior: BackgroundTestRunRecord = {\n ...refreshed,\n resumed_by: spawned.id,\n };\n await writeBackgroundRunRecord(pmRoot, prior);\n return spawned;\n}\n\n/**\n * Implements read background test run logs for the public runtime surface of this module.\n */\nexport async function readBackgroundTestRunLogs(\n pmRoot: string,\n runId: string,\n stream: BackgroundLogStream,\n tail: number | undefined,\n): Promise<BackgroundRunLogsResult> {\n const loaded = await readBackgroundTestRunRecord(pmRoot, runId);\n if (!loaded) {\n throw new PmCliError(`Background test run ${runId} not found`, EXIT_CODE.NOT_FOUND);\n }\n const resolvedTail = typeof tail === \"number\" && Number.isFinite(tail) && tail >= 0 ? Math.floor(tail) : DEFAULT_BACKGROUND_RUN_LOG_TAIL_LINES;\n const stdoutRaw = stream === \"stdout\" || stream === \"both\" ? (await readFileIfExists(loaded.stdout_path)) ?? \"\" : \"\";\n const stderrRaw = stream === \"stderr\" || stream === \"both\" ? (await readFileIfExists(loaded.stderr_path)) ?? \"\" : \"\";\n return {\n run: loaded,\n stream,\n tail: resolvedTail,\n stdout: stream === \"stdout\" || stream === \"both\" ? tailLines(stdoutRaw, resolvedTail) : [],\n stderr: stream === \"stderr\" || stream === \"both\" ? tailLines(stderrRaw, resolvedTail) : [],\n };\n}\n\nexport const _testOnly = {\n buildResourceSnapshot,\n evaluateWorkerResult,\n isPidRunning,\n parseLinuxCpuStat,\n parseLinuxRssStatus,\n parseProgressLine,\n readLinuxCpuSeconds,\n readLinuxRssBytes,\n refreshRunIfStale,\n splitLines,\n tailLines,\n};\n"],"names":[],"mappings":"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","debugId":"5fee19a0-e879-5644-9726-fdf6ad3fc754"}