@unbrained/pm-cli 2026.7.1 → 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 (563) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cli/commander-usage.d.ts +2 -0
  3. package/dist/cli/commander-usage.js +58 -47
  4. package/dist/cli/commander-usage.js.map +1 -1
  5. package/dist/cli/commands/aggregate.js +102 -79
  6. package/dist/cli/commands/aggregate.js.map +1 -1
  7. package/dist/cli/commands/calendar.js +278 -243
  8. package/dist/cli/commands/calendar.js.map +1 -1
  9. package/dist/cli/commands/close-many.js +89 -68
  10. package/dist/cli/commands/close-many.js.map +1 -1
  11. package/dist/cli/commands/close.js +157 -129
  12. package/dist/cli/commands/close.js.map +1 -1
  13. package/dist/cli/commands/comments-audit.js +50 -42
  14. package/dist/cli/commands/comments-audit.js.map +1 -1
  15. package/dist/cli/commands/config.d.ts +2 -0
  16. package/dist/cli/commands/config.js +443 -879
  17. package/dist/cli/commands/config.js.map +1 -1
  18. package/dist/cli/commands/context.js +365 -287
  19. package/dist/cli/commands/context.js.map +1 -1
  20. package/dist/cli/commands/contracts.js +352 -238
  21. package/dist/cli/commands/contracts.js.map +1 -1
  22. package/dist/cli/commands/dedupe-audit.js +46 -39
  23. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  24. package/dist/cli/commands/dedupe-merge.js +88 -69
  25. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  26. package/dist/cli/commands/get.js +114 -81
  27. package/dist/cli/commands/get.js.map +1 -1
  28. package/dist/cli/commands/health.d.ts +17 -0
  29. package/dist/cli/commands/health.js +446 -307
  30. package/dist/cli/commands/health.js.map +1 -1
  31. package/dist/cli/commands/history-compact.js +209 -140
  32. package/dist/cli/commands/history-compact.js.map +1 -1
  33. package/dist/cli/commands/history-redact.js +162 -119
  34. package/dist/cli/commands/history-redact.js.map +1 -1
  35. package/dist/cli/commands/history-repair.js +120 -85
  36. package/dist/cli/commands/history-repair.js.map +1 -1
  37. package/dist/cli/commands/init.d.ts +8 -2
  38. package/dist/cli/commands/init.js +263 -162
  39. package/dist/cli/commands/init.js.map +1 -1
  40. package/dist/cli/commands/list.js +152 -102
  41. package/dist/cli/commands/list.js.map +1 -1
  42. package/dist/cli/commands/next.js +49 -32
  43. package/dist/cli/commands/next.js.map +1 -1
  44. package/dist/cli/commands/plan.js +373 -298
  45. package/dist/cli/commands/plan.js.map +1 -1
  46. package/dist/cli/commands/recurrence-parsers.js +43 -25
  47. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  48. package/dist/cli/commands/reindex.d.ts +21 -5
  49. package/dist/cli/commands/reindex.js +345 -205
  50. package/dist/cli/commands/reindex.js.map +1 -1
  51. package/dist/cli/commands/restore.d.ts +8 -7
  52. package/dist/cli/commands/restore.js +105 -69
  53. package/dist/cli/commands/restore.js.map +1 -1
  54. package/dist/cli/commands/schema.js +33 -30
  55. package/dist/cli/commands/schema.js.map +1 -1
  56. package/dist/cli/commands/search.d.ts +10 -2
  57. package/dist/cli/commands/search.js +503 -470
  58. package/dist/cli/commands/search.js.map +1 -1
  59. package/dist/cli/commands/telemetry.js +98 -87
  60. package/dist/cli/commands/telemetry.js.map +1 -1
  61. package/dist/cli/commands/test-all.js +237 -168
  62. package/dist/cli/commands/test-all.js.map +1 -1
  63. package/dist/cli/commands/test.d.ts +6 -5
  64. package/dist/cli/commands/test.js +424 -344
  65. package/dist/cli/commands/test.js.map +1 -1
  66. package/dist/cli/commands/update-many.js +57 -42
  67. package/dist/cli/commands/update-many.js.map +1 -1
  68. package/dist/cli/commands/update.d.ts +1 -1
  69. package/dist/cli/commands/update.js +738 -671
  70. package/dist/cli/commands/update.js.map +1 -1
  71. package/dist/cli/commands/validate.d.ts +18 -1
  72. package/dist/cli/commands/validate.js +466 -343
  73. package/dist/cli/commands/validate.js.map +1 -1
  74. package/dist/cli/error-guidance.js +399 -357
  75. package/dist/cli/error-guidance.js.map +1 -1
  76. package/dist/cli/main.d.ts +47 -0
  77. package/dist/cli/main.js +428 -341
  78. package/dist/cli/main.js.map +1 -1
  79. package/dist/cli/migration-gates.js +22 -45
  80. package/dist/cli/migration-gates.js.map +1 -1
  81. package/dist/cli/register-list-query.js +94 -105
  82. package/dist/cli/register-list-query.js.map +1 -1
  83. package/dist/cli/register-mutation.js +400 -416
  84. package/dist/cli/register-mutation.js.map +1 -1
  85. package/dist/cli/register-operations.js +86 -66
  86. package/dist/cli/register-operations.js.map +1 -1
  87. package/dist/cli/register-setup.js +120 -101
  88. package/dist/cli/register-setup.js.map +1 -1
  89. package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js → activity-CUC4JY3U.js} +9 -9
  90. package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
  91. package/dist/cli-bundle/chunks/{aggregate-JTEF4BP7.js → aggregate-DKUTRY6R.js} +108 -84
  92. package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
  93. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js → aggregate-SW5PNGCS.js} +107 -83
  94. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js.map → aggregate-SW5PNGCS.js.map} +2 -2
  95. package/dist/cli-bundle/chunks/{append-QCFJSDFL.js → append-H32VOR2Y.js} +6 -6
  96. package/dist/cli-bundle/chunks/{append-LOVPGVPT.js → append-UBM632FK.js} +6 -6
  97. package/dist/cli-bundle/chunks/{chunk-RLDHZHQS.js → chunk-2227673O.js} +158 -114
  98. package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
  99. package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js → chunk-2ASNV4DH.js} +4 -4
  100. package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js → chunk-2CHRYUXL.js} +2 -2
  101. package/dist/cli-bundle/chunks/{chunk-NWMZWYYB.js → chunk-2KWL5NPW.js} +42 -27
  102. package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
  103. package/dist/cli-bundle/chunks/{chunk-NFDPYAIP.js → chunk-36UGKF4O.js} +21 -29
  104. package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
  105. package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js → chunk-3AZUFQK6.js} +6 -6
  106. package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js → chunk-3LCUASYG.js} +2 -2
  107. package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js → chunk-3Q2HBMTI.js} +2 -2
  108. package/dist/cli-bundle/chunks/{chunk-IPYBJWTE.js → chunk-4NUOWFBT.js} +109 -72
  109. package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
  110. package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js → chunk-55XRYWEG.js} +6 -6
  111. package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js → chunk-5GVTFFTC.js} +2 -2
  112. package/dist/cli-bundle/chunks/{chunk-BDTISOSD.js → chunk-5PGBHRY3.js} +41 -26
  113. package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-YITK2PJ6.js → chunk-66Z3X7ZG.js} +261 -161
  115. package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-NUHHPVVS.js → chunk-6ITZLD4T.js} +712 -612
  117. package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
  118. package/dist/cli-bundle/chunks/{chunk-V3NOKJF2.js → chunk-6YCYF2AI.js} +262 -162
  119. package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
  120. package/dist/cli-bundle/chunks/{chunk-BZCEN4JA.js → chunk-6ZMBJRDJ.js} +492 -403
  121. package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
  122. package/dist/cli-bundle/chunks/{chunk-CF7RL6FR.js → chunk-7MYWF4ZX.js} +110 -73
  123. package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
  124. package/dist/cli-bundle/chunks/{chunk-RVUALSJF.js → chunk-7NSPKJUS.js} +356 -285
  125. package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
  126. package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js → chunk-7TH5NMVB.js} +95 -53
  127. package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-ZETXE4SE.js → chunk-7W4H4K26.js} +713 -613
  129. package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js → chunk-A6VOGKBA.js} +6 -6
  131. package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js → chunk-AIAIXG7I.js} +2 -2
  132. package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js → chunk-AJEBCRIY.js} +5 -5
  133. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  134. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  135. package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js → chunk-BTX5MIQF.js} +2 -2
  136. package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js → chunk-BVZZN2LH.js} +3 -3
  137. package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js → chunk-CYBDUHNO.js} +3 -3
  138. package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js → chunk-CZPVDLD2.js} +4 -4
  139. package/dist/cli-bundle/chunks/{chunk-3VGN2UWE.js → chunk-EMPGXBUF.js} +22 -30
  140. package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
  141. package/dist/cli-bundle/chunks/{chunk-JPECA746.js → chunk-EUKTMRN3.js} +2 -2
  142. package/dist/cli-bundle/chunks/{chunk-2466X6E4.js → chunk-FFOQHGNH.js} +6 -6
  143. package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js → chunk-GFMSLORL.js} +6 -6
  144. package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js → chunk-GRRG3MCT.js} +4 -4
  145. package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js → chunk-H4GRLYJS.js} +3 -3
  146. package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js → chunk-HQTPRV4D.js} +6 -6
  147. package/dist/cli-bundle/chunks/{chunk-7R4QEMZZ.js → chunk-I66WE2HE.js} +354 -283
  148. package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
  149. package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js → chunk-IEEJQCZ4.js} +3 -3
  150. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js → chunk-IG5JYZGU.js} +390 -312
  151. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js.map → chunk-IG5JYZGU.js.map} +2 -2
  152. package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js → chunk-JMK5GCK2.js} +2 -2
  153. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js → chunk-JXAUVO6X.js} +258 -169
  154. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js.map → chunk-JXAUVO6X.js.map} +2 -2
  155. package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js → chunk-K2VYLVX4.js} +2 -2
  156. package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js → chunk-KCO2EAN5.js} +3 -3
  157. package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js → chunk-KIYCOJ63.js} +4 -4
  158. package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js → chunk-KLXF7NCC.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js → chunk-KN3URLKS.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js → chunk-LRKMWUUV.js} +2 -2
  161. package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js → chunk-LTRAF2D7.js} +3 -3
  162. package/dist/cli-bundle/chunks/{chunk-VARHOHYV.js → chunk-MNBPX5JS.js} +55 -36
  163. package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
  164. package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js → chunk-MRD4T5LF.js} +2 -2
  165. package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js → chunk-N2JSWVWG.js} +4 -4
  166. package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js → chunk-N3QCJS4M.js} +6 -6
  167. package/dist/cli-bundle/chunks/{chunk-JSU5P7VS.js → chunk-NRZS637N.js} +258 -169
  168. package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
  169. package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js → chunk-OTUJZKGI.js} +3 -3
  170. package/dist/cli-bundle/chunks/{chunk-5CGRF3L5.js → chunk-Q6K2OACU.js} +153 -90
  171. package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
  172. package/dist/cli-bundle/chunks/{chunk-3XZCOZ5J.js → chunk-Q6NXOHS6.js} +391 -313
  173. package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
  174. package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js → chunk-QH3FSKRJ.js} +2 -2
  175. package/dist/cli-bundle/chunks/{chunk-4XOIEKSD.js → chunk-RM37OPYK.js} +56 -37
  176. package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
  177. package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js → chunk-S62UANU7.js} +3 -3
  178. package/dist/cli-bundle/chunks/{chunk-RMMQ74TG.js → chunk-SPM2XLWI.js} +37 -28
  179. package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
  180. package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js → chunk-SYNKD3ZG.js} +5 -5
  181. package/dist/cli-bundle/chunks/{chunk-FFMQB7WR.js → chunk-SYVUU7EK.js} +493 -404
  182. package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
  183. package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js → chunk-TPOFWBMY.js} +95 -53
  184. package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
  185. package/dist/cli-bundle/chunks/{chunk-OTUHB4HS.js → chunk-TTHCEV5Q.js} +92 -77
  186. package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js → chunk-U2BEEM2X.js} +3 -3
  188. package/dist/cli-bundle/chunks/{chunk-KNPEF7QG.js → chunk-UGLU6Q2I.js} +91 -76
  189. package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
  190. package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js → chunk-UT73HUPC.js} +3 -3
  191. package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js → chunk-UTSH5GWX.js} +4 -4
  192. package/dist/cli-bundle/chunks/{chunk-IZBR4NRW.js → chunk-UWKEJMZU.js} +157 -113
  193. package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
  194. package/dist/cli-bundle/chunks/{chunk-3S2KT7NG.js → chunk-W47SML5B.js} +152 -89
  195. package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
  196. package/dist/cli-bundle/chunks/{chunk-RGEMWD6Q.js → chunk-WJAMWAHZ.js} +157 -118
  197. package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
  198. package/dist/cli-bundle/chunks/{chunk-JWXRETDF.js → chunk-XCHUVHKU.js} +626 -484
  199. package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
  200. package/dist/cli-bundle/chunks/{chunk-55SNVXRQ.js → chunk-XEWQKDYZ.js} +626 -484
  201. package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
  202. package/dist/cli-bundle/chunks/{chunk-TP5Q5ZD3.js → chunk-XTHQWXVC.js} +158 -119
  203. package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
  204. package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js → chunk-XWGEMNBR.js} +2 -2
  205. package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js → chunk-Y4NRKBFW.js} +3 -3
  206. package/dist/cli-bundle/chunks/{chunk-2D4HATP2.js → chunk-YLZZ6T54.js} +38 -29
  207. package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
  208. package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js → chunk-YPKFV2JR.js} +6 -6
  209. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  210. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  211. package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js → chunk-ZNHEYCDD.js} +2 -2
  212. package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js → chunk-ZNT7KEWE.js} +2 -2
  213. package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js → claim-SENTPZBN.js} +8 -8
  214. package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js → claim-Z7MEQCBT.js} +8 -8
  215. package/dist/cli-bundle/chunks/{close-TQYAAFJP.js → close-424MX4CU.js} +7 -7
  216. package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
  217. package/dist/cli-bundle/chunks/{close-many-LDRVEQY2.js → close-many-2IV4J2TR.js} +102 -81
  218. package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
  219. package/dist/cli-bundle/chunks/{close-many-BG5QQIDQ.js → close-many-SWY34BII.js} +101 -80
  220. package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
  221. package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js → comments-4FGNTSNV.js} +8 -8
  222. package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js → comments-7YS5MY5X.js} +8 -8
  223. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
  224. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
  225. package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
  226. package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
  227. package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js → context-LHVKJSPJ.js} +12 -12
  228. package/dist/cli-bundle/chunks/{context-B6275WPX.js → context-ZQY54JNS.js} +12 -12
  229. package/dist/cli-bundle/chunks/{contracts-HN7ABKLP.js → contracts-CP2EZJC7.js} +320 -199
  230. package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
  231. package/dist/cli-bundle/chunks/{contracts-W4FZVVD6.js → contracts-FIZLMP7O.js} +321 -200
  232. package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
  233. package/dist/cli-bundle/chunks/{copy-DEM4DATS.js → copy-GYNQQPW2.js} +5 -5
  234. package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js → copy-TLW7JTQT.js} +5 -5
  235. package/dist/cli-bundle/chunks/{create-RLRJMRTM.js → create-VSKYSOCD.js} +12 -12
  236. package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
  237. package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js → delete-4W5JYCEG.js} +5 -5
  238. package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js → delete-ANTOTI2I.js} +5 -5
  239. package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js → deps-HPPE6MJN.js} +5 -5
  240. package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js → deps-ZQZN54EZ.js} +5 -5
  241. package/dist/cli-bundle/chunks/{docs-GYZNVS26.js → docs-RPOVFMP3.js} +7 -7
  242. package/dist/cli-bundle/chunks/{docs-26S44RXU.js → docs-XJNYBJGE.js} +7 -7
  243. package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js → eval-DM6JBZTS.js} +10 -10
  244. package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js → eval-RFBI5FGS.js} +10 -10
  245. package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js → extension-B3YY4WY5.js} +11 -11
  246. package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js → extension-TTSEFQTS.js} +11 -11
  247. package/dist/cli-bundle/chunks/{files-NQHEXUZD.js → files-5D65CHGE.js} +7 -7
  248. package/dist/cli-bundle/chunks/{files-MBNICQFM.js → files-GPIG77EN.js} +7 -7
  249. package/dist/cli-bundle/chunks/{focus-XZW5423D.js → focus-C3PEJV2C.js} +6 -6
  250. package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js → focus-ZHN7WIGX.js} +6 -6
  251. package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js → gc-D4JQ6OWN.js} +3 -3
  252. package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js → gc-VZIXDL32.js} +3 -3
  253. package/dist/cli-bundle/chunks/{get-DSDEKJ3L.js → get-GIBRUUOP.js} +121 -81
  254. package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
  255. package/dist/cli-bundle/chunks/{get-A7MAOHCU.js → get-IOVAN6RU.js} +120 -80
  256. package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
  257. package/dist/cli-bundle/chunks/{health-3IPFLKXB.js → health-L2U3AFKV.js} +437 -265
  258. package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
  259. package/dist/cli-bundle/chunks/{health-GZXGBZ36.js → health-MM7AWXYF.js} +436 -264
  260. package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
  261. package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
  262. package/dist/cli-bundle/chunks/{history-NERDJNUB.js → history-IL7XCEX2.js} +8 -8
  263. package/dist/cli-bundle/chunks/{history-compact-HR7BB4LR.js → history-compact-HALOTOU7.js} +214 -135
  264. package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
  265. package/dist/cli-bundle/chunks/{history-compact-2WRZ2WK4.js → history-compact-MV25P7DM.js} +213 -134
  266. package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
  267. package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
  268. package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js → history-redact-VYCWQFK7.js} +9 -9
  269. package/dist/cli-bundle/chunks/{history-repair-XA3LC4GA.js → history-repair-44MODPQF.js} +124 -84
  270. package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
  271. package/dist/cli-bundle/chunks/{history-repair-LCMOS45X.js → history-repair-CPNAOCNF.js} +123 -83
  272. package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
  273. package/dist/cli-bundle/chunks/{init-64XDLQJB.js → init-F27NHENZ.js} +12 -12
  274. package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
  275. package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js → learnings-HJVDQIGY.js} +8 -8
  276. package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js → learnings-XSFSUUWK.js} +8 -8
  277. package/dist/cli-bundle/chunks/{list-G5Y65VF6.js → list-HPMEKCAA.js} +8 -8
  278. package/dist/cli-bundle/chunks/{list-DNBJVO3E.js → list-VMPWTURB.js} +8 -8
  279. package/dist/cli-bundle/chunks/{next-BCERKDUR.js → next-ETXF2ZCN.js} +59 -37
  280. package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
  281. package/dist/cli-bundle/chunks/{next-FYTQF6HG.js → next-QM6YJIIS.js} +60 -38
  282. package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
  283. package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js → notes-GDZIKGR6.js} +8 -8
  284. package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js → notes-WDDBPC4D.js} +8 -8
  285. package/dist/cli-bundle/chunks/{plan-RKZHQVXR.js → plan-BGDR73Z6.js} +373 -279
  286. package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
  287. package/dist/cli-bundle/chunks/{plan-4WXEQCTN.js → plan-C5IMM335.js} +372 -278
  288. package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
  289. package/dist/cli-bundle/chunks/{profile-QLER5ENE.js → profile-CCOKZ2IQ.js} +9 -9
  290. package/dist/cli-bundle/chunks/{profile-4OMM32CD.js → profile-HUCENIEQ.js} +9 -9
  291. package/dist/cli-bundle/chunks/{register-list-query-7LV46VAU.js → register-list-query-ROSNIL52.js} +80 -83
  292. package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
  293. package/dist/cli-bundle/chunks/{register-list-query-SNG5PGA4.js → register-list-query-XN4ZRHSV.js} +79 -82
  294. package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
  295. package/dist/cli-bundle/chunks/{register-mutation-ENNDUAZG.js → register-mutation-CFSB2MS3.js} +403 -382
  296. package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
  297. package/dist/cli-bundle/chunks/{register-mutation-KK7PHYYU.js → register-mutation-KRLAHEL2.js} +402 -381
  298. package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
  299. package/dist/cli-bundle/chunks/{register-operations-HZ6XERQG.js → register-operations-4PASGJDB.js} +112 -93
  300. package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
  301. package/dist/cli-bundle/chunks/{register-operations-C6OWLDSH.js → register-operations-MBN4KGUM.js} +113 -94
  302. package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
  303. package/dist/cli-bundle/chunks/{register-setup-P67EMBDJ.js → register-setup-VIAWYFP5.js} +129 -104
  304. package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
  305. package/dist/cli-bundle/chunks/{register-setup-ZKJ53RS7.js → register-setup-ZCGKHDKL.js} +128 -103
  306. package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
  307. package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js → restore-4CBWUMCX.js} +9 -9
  308. package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
  309. package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
  310. package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
  311. package/dist/cli-bundle/chunks/{schema-73HR2OJW.js → schema-TDGK6N3I.js} +7 -7
  312. package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js → schema-UE5KKAUX.js} +7 -7
  313. package/dist/cli-bundle/chunks/{search-KILGT37L.js → search-FP7MEU4S.js} +10 -10
  314. package/dist/cli-bundle/chunks/{search-AXPXKZER.js → search-K4CFLQ5S.js} +10 -10
  315. package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js → stats-NJJCALEZ.js} +6 -6
  316. package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js → stats-XT6QRKQY.js} +6 -6
  317. package/dist/cli-bundle/chunks/{telemetry-GAHHQTOS.js → telemetry-5SQ5UDXC.js} +84 -70
  318. package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
  319. package/dist/cli-bundle/chunks/{telemetry-BZUF6H7G.js → telemetry-HVXFZA2U.js} +85 -71
  320. package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
  321. package/dist/cli-bundle/chunks/{test-ACD52Z3S.js → test-UFSJ5YIO.js} +15 -15
  322. package/dist/cli-bundle/chunks/{test-PWDIZ255.js → test-YCDAUBWF.js} +15 -15
  323. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
  324. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
  325. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
  326. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
  327. package/dist/cli-bundle/chunks/{test-runs-UXIXPDKU.js → test-runs-FK5E75AA.js} +185 -147
  328. package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
  329. package/dist/cli-bundle/chunks/{test-runs-PLRAZEFW.js → test-runs-H4TGWGRN.js} +184 -146
  330. package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
  331. package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
  332. package/dist/cli-bundle/chunks/{update-KFX2SIAC.js → update-Y5WQVT5O.js} +15 -15
  333. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js → update-many-6YAYYRLE.js} +82 -67
  334. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js.map → update-many-6YAYYRLE.js.map} +2 -2
  335. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js → update-many-JTKKSA7Y.js} +83 -68
  336. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js.map → update-many-JTKKSA7Y.js.map} +1 -1
  337. package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js → upgrade-DTAHZ236.js} +11 -11
  338. package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js → upgrade-JUDU7YL4.js} +11 -11
  339. package/dist/cli-bundle/chunks/{validate-MTUVL5VC.js → validate-732RWS5W.js} +440 -320
  340. package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
  341. package/dist/cli-bundle/chunks/{validate-X5W76YJL.js → validate-W7H5TEDC.js} +441 -321
  342. package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
  343. package/dist/cli-bundle/main.js +945 -812
  344. package/dist/cli-bundle/main.js.map +3 -3
  345. package/dist/core/config/nested-settings.js +89 -67
  346. package/dist/core/config/nested-settings.js.map +1 -1
  347. package/dist/core/governance/metadata-coverage.js +20 -28
  348. package/dist/core/governance/metadata-coverage.js.map +1 -1
  349. package/dist/core/history/drift-scan.js +93 -81
  350. package/dist/core/history/drift-scan.js.map +1 -1
  351. package/dist/core/item/item-type-definition.js +14 -14
  352. package/dist/core/item/item-type-definition.js.map +1 -1
  353. package/dist/core/item/type-registry.js +87 -82
  354. package/dist/core/item/type-registry.js.map +1 -1
  355. package/dist/core/output/mutation-projection.js +42 -26
  356. package/dist/core/output/mutation-projection.js.map +1 -1
  357. package/dist/core/schema/runtime-schema.js +34 -28
  358. package/dist/core/schema/runtime-schema.js.map +1 -1
  359. package/dist/core/search/semantic-defaults.js +64 -37
  360. package/dist/core/search/semantic-defaults.js.map +1 -1
  361. package/dist/core/search/vector-stores.js +32 -17
  362. package/dist/core/search/vector-stores.js.map +1 -1
  363. package/dist/core/sentry/helpers.js +31 -28
  364. package/dist/core/sentry/helpers.js.map +1 -1
  365. package/dist/core/sentry/instrument.js +54 -43
  366. package/dist/core/sentry/instrument.js.map +1 -1
  367. package/dist/core/store/front-matter-cache.js +239 -153
  368. package/dist/core/store/front-matter-cache.js.map +1 -1
  369. package/dist/core/store/item-store.js +33 -26
  370. package/dist/core/store/item-store.js.map +1 -1
  371. package/dist/core/store/settings.js +247 -203
  372. package/dist/core/store/settings.js.map +1 -1
  373. package/dist/core/test/background-runs.js +189 -160
  374. package/dist/core/test/background-runs.js.map +1 -1
  375. package/package.json +2 -2
  376. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  377. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  378. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  379. package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +0 -16
  380. package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +0 -1
  381. package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +0 -1
  382. package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +0 -7
  383. package/dist/cli-bundle/chunks/chunk-3VGN2UWE.js.map +0 -1
  384. package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +0 -1
  385. package/dist/cli-bundle/chunks/chunk-4DSGXSBL.js.map +0 -7
  386. package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +0 -1
  387. package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +0 -7
  388. package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +0 -1
  389. package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +0 -1
  390. package/dist/cli-bundle/chunks/chunk-BDTISOSD.js.map +0 -7
  391. package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +0 -7
  392. package/dist/cli-bundle/chunks/chunk-CF7RL6FR.js.map +0 -1
  393. package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +0 -1
  394. package/dist/cli-bundle/chunks/chunk-IPYBJWTE.js.map +0 -7
  395. package/dist/cli-bundle/chunks/chunk-IZBR4NRW.js.map +0 -7
  396. package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +0 -1
  397. package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +0 -1
  398. package/dist/cli-bundle/chunks/chunk-KNPEF7QG.js.map +0 -7
  399. package/dist/cli-bundle/chunks/chunk-NFDPYAIP.js.map +0 -7
  400. package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +0 -7
  401. package/dist/cli-bundle/chunks/chunk-NWMZWYYB.js.map +0 -1
  402. package/dist/cli-bundle/chunks/chunk-OTUHB4HS.js.map +0 -1
  403. package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +0 -7
  404. package/dist/cli-bundle/chunks/chunk-RLDHZHQS.js.map +0 -1
  405. package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +0 -7
  406. package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +0 -7
  407. package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +0 -1
  408. package/dist/cli-bundle/chunks/chunk-UYUYDGIB.js.map +0 -1
  409. package/dist/cli-bundle/chunks/chunk-V3NOKJF2.js.map +0 -1
  410. package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +0 -7
  411. package/dist/cli-bundle/chunks/chunk-YITK2PJ6.js.map +0 -7
  412. package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +0 -1
  413. package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +0 -14
  414. package/dist/cli-bundle/chunks/close-many-BG5QQIDQ.js.map +0 -7
  415. package/dist/cli-bundle/chunks/close-many-LDRVEQY2.js.map +0 -1
  416. package/dist/cli-bundle/chunks/config-DMSU64QO.js +0 -1541
  417. package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +0 -7
  418. package/dist/cli-bundle/chunks/config-QH2DICD6.js +0 -1531
  419. package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +0 -1
  420. package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +0 -7
  421. package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +0 -1
  422. package/dist/cli-bundle/chunks/create-OH3BDGBB.js +0 -28
  423. package/dist/cli-bundle/chunks/get-A7MAOHCU.js.map +0 -7
  424. package/dist/cli-bundle/chunks/get-DSDEKJ3L.js.map +0 -1
  425. package/dist/cli-bundle/chunks/health-3IPFLKXB.js.map +0 -1
  426. package/dist/cli-bundle/chunks/health-GZXGBZ36.js.map +0 -7
  427. package/dist/cli-bundle/chunks/history-WSZHY3PN.js +0 -18
  428. package/dist/cli-bundle/chunks/history-compact-2WRZ2WK4.js.map +0 -7
  429. package/dist/cli-bundle/chunks/history-compact-HR7BB4LR.js.map +0 -1
  430. package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +0 -19
  431. package/dist/cli-bundle/chunks/history-repair-LCMOS45X.js.map +0 -7
  432. package/dist/cli-bundle/chunks/history-repair-XA3LC4GA.js.map +0 -1
  433. package/dist/cli-bundle/chunks/init-PAX32BJA.js +0 -22
  434. package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +0 -7
  435. package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +0 -1
  436. package/dist/cli-bundle/chunks/plan-4WXEQCTN.js.map +0 -7
  437. package/dist/cli-bundle/chunks/plan-RKZHQVXR.js.map +0 -1
  438. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +0 -1
  439. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +0 -7
  440. package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +0 -1
  441. package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +0 -7
  442. package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js.map +0 -1
  443. package/dist/cli-bundle/chunks/register-operations-HZ6XERQG.js.map +0 -7
  444. package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +0 -1
  445. package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +0 -7
  446. package/dist/cli-bundle/chunks/restore-YALDGTQR.js +0 -17
  447. package/dist/cli-bundle/chunks/telemetry-BZUF6H7G.js.map +0 -1
  448. package/dist/cli-bundle/chunks/telemetry-GAHHQTOS.js.map +0 -7
  449. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js +0 -358
  450. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js.map +0 -1
  451. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js +0 -361
  452. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js.map +0 -7
  453. package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +0 -7
  454. package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +0 -1
  455. package/dist/cli-bundle/chunks/update-AMRSOIWP.js +0 -24
  456. package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +0 -7
  457. package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +0 -1
  458. /package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js.map → activity-CUC4JY3U.js.map} +0 -0
  459. /package/dist/cli-bundle/chunks/{activity-AW6XVFH6.js.map → activity-WEIEMM73.js.map} +0 -0
  460. /package/dist/cli-bundle/chunks/{append-QCFJSDFL.js.map → append-H32VOR2Y.js.map} +0 -0
  461. /package/dist/cli-bundle/chunks/{append-LOVPGVPT.js.map → append-UBM632FK.js.map} +0 -0
  462. /package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js.map → chunk-2ASNV4DH.js.map} +0 -0
  463. /package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js.map → chunk-2CHRYUXL.js.map} +0 -0
  464. /package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js.map → chunk-3AZUFQK6.js.map} +0 -0
  465. /package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js.map → chunk-3LCUASYG.js.map} +0 -0
  466. /package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js.map → chunk-3Q2HBMTI.js.map} +0 -0
  467. /package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js.map → chunk-55XRYWEG.js.map} +0 -0
  468. /package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js.map → chunk-5GVTFFTC.js.map} +0 -0
  469. /package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js.map → chunk-A6VOGKBA.js.map} +0 -0
  470. /package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js.map → chunk-AIAIXG7I.js.map} +0 -0
  471. /package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js.map → chunk-AJEBCRIY.js.map} +0 -0
  472. /package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js.map → chunk-BTX5MIQF.js.map} +0 -0
  473. /package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js.map → chunk-BVZZN2LH.js.map} +0 -0
  474. /package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js.map → chunk-CYBDUHNO.js.map} +0 -0
  475. /package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js.map → chunk-CZPVDLD2.js.map} +0 -0
  476. /package/dist/cli-bundle/chunks/{chunk-JPECA746.js.map → chunk-EUKTMRN3.js.map} +0 -0
  477. /package/dist/cli-bundle/chunks/{chunk-2466X6E4.js.map → chunk-FFOQHGNH.js.map} +0 -0
  478. /package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js.map → chunk-GFMSLORL.js.map} +0 -0
  479. /package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js.map → chunk-GRRG3MCT.js.map} +0 -0
  480. /package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js.map → chunk-H4GRLYJS.js.map} +0 -0
  481. /package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js.map → chunk-HQTPRV4D.js.map} +0 -0
  482. /package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js.map → chunk-IEEJQCZ4.js.map} +0 -0
  483. /package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js.map → chunk-JMK5GCK2.js.map} +0 -0
  484. /package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js.map → chunk-K2VYLVX4.js.map} +0 -0
  485. /package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js.map → chunk-KCO2EAN5.js.map} +0 -0
  486. /package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js.map → chunk-KIYCOJ63.js.map} +0 -0
  487. /package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js.map → chunk-KLXF7NCC.js.map} +0 -0
  488. /package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js.map → chunk-KN3URLKS.js.map} +0 -0
  489. /package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js.map → chunk-LRKMWUUV.js.map} +0 -0
  490. /package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js.map → chunk-LTRAF2D7.js.map} +0 -0
  491. /package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js.map → chunk-MRD4T5LF.js.map} +0 -0
  492. /package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js.map → chunk-N2JSWVWG.js.map} +0 -0
  493. /package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js.map → chunk-N3QCJS4M.js.map} +0 -0
  494. /package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js.map → chunk-OTUJZKGI.js.map} +0 -0
  495. /package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js.map → chunk-QH3FSKRJ.js.map} +0 -0
  496. /package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js.map → chunk-S62UANU7.js.map} +0 -0
  497. /package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js.map → chunk-SYNKD3ZG.js.map} +0 -0
  498. /package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js.map → chunk-U2BEEM2X.js.map} +0 -0
  499. /package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js.map → chunk-UT73HUPC.js.map} +0 -0
  500. /package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js.map → chunk-UTSH5GWX.js.map} +0 -0
  501. /package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js.map → chunk-XWGEMNBR.js.map} +0 -0
  502. /package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js.map → chunk-Y4NRKBFW.js.map} +0 -0
  503. /package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js.map → chunk-YPKFV2JR.js.map} +0 -0
  504. /package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js.map → chunk-ZNHEYCDD.js.map} +0 -0
  505. /package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
  506. /package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js.map → claim-SENTPZBN.js.map} +0 -0
  507. /package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js.map → claim-Z7MEQCBT.js.map} +0 -0
  508. /package/dist/cli-bundle/chunks/{close-TQYAAFJP.js.map → close-424MX4CU.js.map} +0 -0
  509. /package/dist/cli-bundle/chunks/{close-E6ZZGCJY.js.map → close-YCWQQPDS.js.map} +0 -0
  510. /package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js.map → comments-4FGNTSNV.js.map} +0 -0
  511. /package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js.map → comments-7YS5MY5X.js.map} +0 -0
  512. /package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js.map → context-LHVKJSPJ.js.map} +0 -0
  513. /package/dist/cli-bundle/chunks/{context-B6275WPX.js.map → context-ZQY54JNS.js.map} +0 -0
  514. /package/dist/cli-bundle/chunks/{copy-DEM4DATS.js.map → copy-GYNQQPW2.js.map} +0 -0
  515. /package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js.map → copy-TLW7JTQT.js.map} +0 -0
  516. /package/dist/cli-bundle/chunks/{create-RLRJMRTM.js.map → create-VSKYSOCD.js.map} +0 -0
  517. /package/dist/cli-bundle/chunks/{create-OH3BDGBB.js.map → create-XTMAPS7I.js.map} +0 -0
  518. /package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js.map → delete-4W5JYCEG.js.map} +0 -0
  519. /package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js.map → delete-ANTOTI2I.js.map} +0 -0
  520. /package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js.map → deps-HPPE6MJN.js.map} +0 -0
  521. /package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js.map → deps-ZQZN54EZ.js.map} +0 -0
  522. /package/dist/cli-bundle/chunks/{docs-GYZNVS26.js.map → docs-RPOVFMP3.js.map} +0 -0
  523. /package/dist/cli-bundle/chunks/{docs-26S44RXU.js.map → docs-XJNYBJGE.js.map} +0 -0
  524. /package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js.map → eval-DM6JBZTS.js.map} +0 -0
  525. /package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js.map → eval-RFBI5FGS.js.map} +0 -0
  526. /package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js.map → extension-B3YY4WY5.js.map} +0 -0
  527. /package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js.map → extension-TTSEFQTS.js.map} +0 -0
  528. /package/dist/cli-bundle/chunks/{files-NQHEXUZD.js.map → files-5D65CHGE.js.map} +0 -0
  529. /package/dist/cli-bundle/chunks/{files-MBNICQFM.js.map → files-GPIG77EN.js.map} +0 -0
  530. /package/dist/cli-bundle/chunks/{focus-XZW5423D.js.map → focus-C3PEJV2C.js.map} +0 -0
  531. /package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js.map → focus-ZHN7WIGX.js.map} +0 -0
  532. /package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js.map → gc-D4JQ6OWN.js.map} +0 -0
  533. /package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js.map → gc-VZIXDL32.js.map} +0 -0
  534. /package/dist/cli-bundle/chunks/{history-WSZHY3PN.js.map → history-DD7L7BNL.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{history-NERDJNUB.js.map → history-IL7XCEX2.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{history-redact-MP6CH7U5.js.map → history-redact-IX4YEWMY.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js.map → history-redact-VYCWQFK7.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{init-64XDLQJB.js.map → init-F27NHENZ.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{init-PAX32BJA.js.map → init-HHVQQP6C.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js.map → learnings-HJVDQIGY.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js.map → learnings-XSFSUUWK.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{list-G5Y65VF6.js.map → list-HPMEKCAA.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{list-DNBJVO3E.js.map → list-VMPWTURB.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js.map → notes-GDZIKGR6.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js.map → notes-WDDBPC4D.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{profile-QLER5ENE.js.map → profile-CCOKZ2IQ.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{profile-4OMM32CD.js.map → profile-HUCENIEQ.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js.map → restore-4CBWUMCX.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{restore-YALDGTQR.js.map → restore-5UEAGG3W.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{schema-73HR2OJW.js.map → schema-TDGK6N3I.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js.map → schema-UE5KKAUX.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{search-KILGT37L.js.map → search-FP7MEU4S.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{search-AXPXKZER.js.map → search-K4CFLQ5S.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js.map → stats-NJJCALEZ.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js.map → stats-XT6QRKQY.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{test-ACD52Z3S.js.map → test-UFSJ5YIO.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{test-PWDIZ255.js.map → test-YCDAUBWF.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{update-AMRSOIWP.js.map → update-MTCFES6X.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{update-KFX2SIAC.js.map → update-Y5WQVT5O.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js.map → upgrade-DTAHZ236.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js.map → upgrade-JUDU7YL4.js.map} +0 -0
@@ -13,24 +13,24 @@ import {
13
13
  parseLinkedTestMinLines,
14
14
  parseLinkedTestRegexList,
15
15
  parseLinkedTestStringList
16
- } from "./chunk-HYTGA6GI.js";
16
+ } from "./chunk-Y4NRKBFW.js";
17
17
  import {
18
18
  createStdinTokenResolver,
19
19
  parseCsvKv,
20
20
  parseOptionalNumber
21
- } from "./chunk-DDPTYJIM.js";
21
+ } from "./chunk-ZNHEYCDD.js";
22
22
  import {
23
23
  runInit
24
- } from "./chunk-YITK2PJ6.js";
24
+ } from "./chunk-66Z3X7ZG.js";
25
25
  import {
26
26
  locateItem,
27
27
  mutateItem,
28
28
  readLocatedItem
29
- } from "./chunk-3K2M5OYU.js";
29
+ } from "./chunk-JXAUVO6X.js";
30
30
  import {
31
31
  compareTimestampStrings,
32
32
  nowIso
33
- } from "./chunk-WYDHYJPO.js";
33
+ } from "./chunk-AIAIXG7I.js";
34
34
  import {
35
35
  EXIT_CODE,
36
36
  ITEM_FILE_EXTENSIONS,
@@ -44,7 +44,7 @@ import {
44
44
  resolveItemTypeRegistry,
45
45
  resolvePmRoot,
46
46
  stableValueEquals
47
- } from "./chunk-RVUALSJF.js";
47
+ } from "./chunk-7NSPKJUS.js";
48
48
 
49
49
  // dist/cli/commands/test.js
50
50
  import { spawn } from "node:child_process";
@@ -408,7 +408,7 @@ function firstPositionalToken(tokens) {
408
408
  !(function() {
409
409
  try {
410
410
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
411
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "8f5d4783-6790-59c5-b9fa-9b1f1abd13b9");
411
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "caa941ed-c848-506c-9a3c-3d4959be0246");
412
412
  } catch (e2) {
413
413
  }
414
414
  })();
@@ -1498,300 +1498,343 @@ ${stderr}`;
1498
1498
  }
1499
1499
  return null;
1500
1500
  }
1501
+ function createLinkedTestSandboxLayout(sandboxRoot) {
1502
+ return {
1503
+ root: sandboxRoot,
1504
+ schemaProjectPmPath: path.join(sandboxRoot, "schema", "project", ".agents", "pm"),
1505
+ schemaGlobalPmPath: path.join(sandboxRoot, "schema", "global"),
1506
+ trackerProjectPmPath: path.join(sandboxRoot, "tracker", "project", ".agents", "pm"),
1507
+ trackerGlobalPmPath: path.join(sandboxRoot, "tracker", "global")
1508
+ };
1509
+ }
1510
+ async function initializeLinkedTestSandboxes(layout) {
1511
+ await runInit(void 0, { path: layout.schemaProjectPmPath });
1512
+ await runInit(void 0, { path: layout.schemaGlobalPmPath });
1513
+ await runInit(void 0, { path: layout.trackerProjectPmPath });
1514
+ await runInit(void 0, { path: layout.trackerGlobalPmPath });
1515
+ }
1516
+ async function seedLinkedTestSandboxesFromSource(layout, sourceRoots) {
1517
+ if (!sourceRoots) {
1518
+ return;
1519
+ }
1520
+ await seedLinkedTestSandbox(layout.schemaProjectPmPath, layout.schemaGlobalPmPath, sourceRoots);
1521
+ await seedLinkedTestSandbox(layout.trackerProjectPmPath, layout.trackerGlobalPmPath, sourceRoots);
1522
+ await seedLinkedTestTrackerData(sourceRoots.projectPmRoot, layout.trackerProjectPmPath);
1523
+ await seedLinkedTestTrackerData(sourceRoots.globalPmRoot, layout.trackerGlobalPmPath);
1524
+ }
1525
+ async function countLinkedTestSandboxItems(layout, sourceRoots) {
1526
+ return {
1527
+ sourceProjectItemCount: sourceRoots ? await countLinkedTestItemFiles(sourceRoots.projectPmRoot) : 0,
1528
+ sourceGlobalItemCount: sourceRoots ? await countLinkedTestItemFiles(sourceRoots.globalPmRoot) : 0,
1529
+ schemaProjectItemCount: await countLinkedTestItemFiles(layout.schemaProjectPmPath),
1530
+ schemaGlobalItemCount: await countLinkedTestItemFiles(layout.schemaGlobalPmPath),
1531
+ trackerProjectItemCount: await countLinkedTestItemFiles(layout.trackerProjectPmPath),
1532
+ trackerGlobalItemCount: await countLinkedTestItemFiles(layout.trackerGlobalPmPath)
1533
+ };
1534
+ }
1535
+ function buildLinkedTestExecutionContext(params) {
1536
+ const trackerMode = params.effectivePmContextMode === "tracker";
1537
+ const selectedSandboxProjectPmPath = trackerMode ? params.layout.trackerProjectPmPath : params.layout.schemaProjectPmPath;
1538
+ const selectedSandboxGlobalPmPath = trackerMode ? params.layout.trackerGlobalPmPath : params.layout.schemaGlobalPmPath;
1539
+ const selectedSandboxProjectItemCount = trackerMode ? params.counts.trackerProjectItemCount : params.counts.schemaProjectItemCount;
1540
+ const selectedSandboxGlobalItemCount = trackerMode ? params.counts.trackerGlobalItemCount : params.counts.schemaGlobalItemCount;
1541
+ return {
1542
+ requested_pm_context_mode: params.requestedPmContextMode,
1543
+ pm_context_mode: params.effectivePmContextMode,
1544
+ auto_pm_context_applied: params.autoPmContextApplied,
1545
+ is_pm_command: params.isPmCommand,
1546
+ is_pm_tracker_read_command: params.isPmTrackerReadCommand,
1547
+ source_project_pm_path: params.sourceRoots?.projectPmRoot ?? "",
1548
+ sandbox_project_pm_path: selectedSandboxProjectPmPath,
1549
+ source_global_pm_path: params.sourceRoots?.globalPmRoot ?? "",
1550
+ sandbox_global_pm_path: selectedSandboxGlobalPmPath,
1551
+ source_project_item_count: params.counts.sourceProjectItemCount,
1552
+ sandbox_project_item_count: selectedSandboxProjectItemCount,
1553
+ source_global_item_count: params.counts.sourceGlobalItemCount,
1554
+ sandbox_global_item_count: selectedSandboxGlobalItemCount,
1555
+ mismatch_detected: params.isPmCommand && params.counts.sourceProjectItemCount !== selectedSandboxProjectItemCount,
1556
+ project_extensions_seeded: Boolean(params.sourceRoots),
1557
+ global_extensions_seeded: Boolean(params.sourceRoots)
1558
+ };
1559
+ }
1560
+ function resolveLinkedTestCommandContext(params) {
1561
+ const linkedOverridePmContextMode = typeof params.linkedTest.pm_context_mode === "string" && params.linkedTest.pm_context_mode.trim().length > 0 ? parsePmContextMode(params.linkedTest.pm_context_mode) : void 0;
1562
+ const command = typeof params.linkedTest.command === "string" && params.linkedTest.command.length > 0 ? params.linkedTest.command : void 0;
1563
+ const isPmCommand = command ? commandInvokesPmCli(command) : false;
1564
+ const isPmTrackerReadCommand = isPmCommand && command ? commandInvokesPmTrackerReadCommand(command) : false;
1565
+ const autoPmContextApplied = params.options?.autoPmContext === true && isPmTrackerReadCommand;
1566
+ const requestedPmContextMode = autoPmContextApplied ? "auto" : resolveLinkedTestRequestedContextMode(params.linkedTest, params.runLevelPmContextMode, params.options?.overrideLinkedPmContext === true);
1567
+ const effectivePmContextMode = resolveLinkedTestEffectiveContextMode(requestedPmContextMode, isPmTrackerReadCommand);
1568
+ return {
1569
+ linkedOverridePmContextMode,
1570
+ executionContext: buildLinkedTestExecutionContext({
1571
+ layout: params.layout,
1572
+ counts: params.counts,
1573
+ sourceRoots: params.sourceRoots,
1574
+ isPmCommand,
1575
+ isPmTrackerReadCommand,
1576
+ requestedPmContextMode,
1577
+ effectivePmContextMode,
1578
+ autoPmContextApplied
1579
+ })
1580
+ };
1581
+ }
1582
+ function buildLinkedTestSkippedResult(linkedTest, executionContext, error) {
1583
+ return {
1584
+ command: linkedTest.command,
1585
+ path: linkedTest.path,
1586
+ status: "skipped",
1587
+ execution_context: executionContext,
1588
+ error
1589
+ };
1590
+ }
1591
+ function buildLinkedTestAssertionFailureResult(linkedTest, executionContext, error, output) {
1592
+ return {
1593
+ command: linkedTest.command,
1594
+ path: linkedTest.path,
1595
+ status: "failed",
1596
+ exit_code: 1,
1597
+ failure_category: "assertion_failure",
1598
+ execution_context: executionContext,
1599
+ ...output ? { stdout: output.stdout, stderr: output.stderr } : {},
1600
+ error
1601
+ };
1602
+ }
1603
+ function resolveLinkedTestPreflightResult(params) {
1604
+ if (!params.linkedTest.command) {
1605
+ return buildLinkedTestSkippedResult(params.linkedTest, params.executionContext, "No command configured for this linked test.");
1606
+ }
1607
+ const runtimeSafetySkipReason = getRuntimeSafetySkipReason(params.linkedTest.command);
1608
+ if (runtimeSafetySkipReason) {
1609
+ return buildLinkedTestSkippedResult(params.linkedTest, params.executionContext, runtimeSafetySkipReason);
1610
+ }
1611
+ const failOnMismatchByDefault = params.executionContext.pm_context_mode === "schema" && params.executionContext.is_pm_tracker_read_command && params.executionContext.mismatch_detected;
1612
+ const failOnMismatchByFlag = params.options?.failOnContextMismatch === true && params.executionContext.is_pm_command && params.executionContext.mismatch_detected;
1613
+ if (failOnMismatchByDefault || failOnMismatchByFlag) {
1614
+ const mismatchHint = buildPmContextMismatchHint({
1615
+ executionContext: params.executionContext,
1616
+ runLevelPmContextMode: params.runLevelPmContextMode,
1617
+ linkedOverridePmContextMode: params.linkedOverridePmContextMode
1618
+ });
1619
+ const mismatchPrefix = params.options?.checkContext === true ? "Linked test preflight PM context mismatch detected" : "Linked test PM context mismatch detected";
1620
+ return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, `${mismatchPrefix} (source_project_items=${params.executionContext.source_project_item_count}, sandbox_project_items=${params.executionContext.sandbox_project_item_count}).${mismatchHint}`);
1621
+ }
1622
+ if (params.options?.requireAssertionsForPm === true && params.executionContext.is_pm_command && !hasLinkedTestAssertions(params.linkedTest)) {
1623
+ return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, "Linked PM command requires assertions when --require-assertions-for-pm is enabled.");
1624
+ }
1625
+ return null;
1626
+ }
1627
+ function buildLinkedTestExecutionEnv(params) {
1628
+ const effectiveDirectives = resolveEffectiveLinkedTestDirectives(params.runtimeDirectives, params.linkedTest);
1629
+ const executionEnv = { ...process.env };
1630
+ applyEnvDirectiveStage(executionEnv, params.runtimeDirectives);
1631
+ applyEnvDirectiveStage(executionEnv, {
1632
+ env_set: params.linkedTest.env_set ?? {},
1633
+ env_clear: params.linkedTest.env_clear ?? []
1634
+ });
1635
+ if (effectiveDirectives.shared_host_safe) {
1636
+ applySharedHostSafeDefaults(executionEnv);
1637
+ }
1638
+ executionEnv.FORCE_COLOR = "0";
1639
+ executionEnv.PM_PATH = params.executionContext.sandbox_project_pm_path;
1640
+ executionEnv.PM_GLOBAL_PATH = params.executionContext.sandbox_global_pm_path;
1641
+ return executionEnv;
1642
+ }
1643
+ function buildLinkedTestPassedResult(linkedTest, executionContext, execution) {
1644
+ return {
1645
+ command: linkedTest.command,
1646
+ path: linkedTest.path,
1647
+ status: "passed",
1648
+ exit_code: 0,
1649
+ execution_context: executionContext,
1650
+ stdout: execution.stdout,
1651
+ stderr: execution.stderr
1652
+ };
1653
+ }
1654
+ function buildLinkedTestEmptyRunResult(params) {
1655
+ return {
1656
+ command: params.linkedTest.command,
1657
+ path: params.linkedTest.path,
1658
+ status: "failed",
1659
+ exit_code: 1,
1660
+ failure_category: "empty_run",
1661
+ execution_context: params.executionContext,
1662
+ stdout: params.execution.stdout,
1663
+ stderr: params.execution.stderr,
1664
+ error: `Linked test reported an empty test run (${params.emptyRunSignal}) while --fail-on-empty-test-run is enabled. Update test selection or disable --fail-on-empty-test-run for this run.`
1665
+ };
1666
+ }
1667
+ function buildLinkedTestCommandFailureResult(params) {
1668
+ return {
1669
+ command: params.linkedTest.command,
1670
+ path: params.linkedTest.path,
1671
+ status: "failed",
1672
+ exit_code: resolveLinkedTestFailureExitCode(params.execution),
1673
+ failure_category: classifyLinkedTestFailure(params.execution),
1674
+ execution_context: params.executionContext,
1675
+ stdout: params.execution.stdout,
1676
+ stderr: params.execution.stderr,
1677
+ error: formatLinkedTestExecutionError(params.execution, params.timeoutMs)
1678
+ };
1679
+ }
1680
+ function buildLinkedTestPassedExecutionResult(params) {
1681
+ if (params.options?.failOnEmptyTestRun === true) {
1682
+ const emptyRunSignal = detectEmptyLinkedTestRun(params.execution.stdout, params.execution.stderr);
1683
+ if (emptyRunSignal) {
1684
+ return buildLinkedTestEmptyRunResult({ ...params, emptyRunSignal });
1685
+ }
1686
+ }
1687
+ const assertionFailures = evaluateLinkedTestAssertions(params.linkedTest, params.execution.stdout, params.execution.stderr);
1688
+ if (assertionFailures.length > 0) {
1689
+ return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, `Linked test assertion(s) failed: ${assertionFailures.join("; ")}`, params.execution);
1690
+ }
1691
+ return buildLinkedTestPassedResult(params.linkedTest, params.executionContext, params.execution);
1692
+ }
1693
+ async function runSingleLinkedTest(params) {
1694
+ const command = params.linkedTest.command ?? "";
1695
+ const timeoutMs = (params.linkedTest.timeout_seconds ?? params.defaultTimeoutSeconds ?? 120) * 1e3;
1696
+ const execution = await runLinkedTestCommand(command, timeoutMs, buildLinkedTestExecutionEnv(params), {
1697
+ index: params.index + 1,
1698
+ total: params.total,
1699
+ timeoutMs,
1700
+ command
1701
+ }, params.progressMode);
1702
+ const passed = execution.exitCode === 0 && !execution.timedOut && !execution.maxBufferExceeded;
1703
+ return passed ? buildLinkedTestPassedExecutionResult({ ...params, execution }) : buildLinkedTestCommandFailureResult({ ...params, execution, timeoutMs });
1704
+ }
1501
1705
  async function runLinkedTests(tests, defaultTimeoutSeconds, options) {
1502
1706
  const results = [];
1503
1707
  const sandboxRoot = await mkdtemp(path.join(tmpdir(), "pm-linked-test-"));
1504
- const schemaSandboxPmPath = path.join(sandboxRoot, "schema", "project", ".agents", "pm");
1505
- const schemaSandboxGlobalPath = path.join(sandboxRoot, "schema", "global");
1506
- const trackerSandboxPmPath = path.join(sandboxRoot, "tracker", "project", ".agents", "pm");
1507
- const trackerSandboxGlobalPath = path.join(sandboxRoot, "tracker", "global");
1708
+ const layout = createLinkedTestSandboxLayout(sandboxRoot);
1508
1709
  const runLevelPmContextMode = parsePmContextMode(options?.pmContext);
1509
1710
  const progressMode = options?.progress === true ? "always" : "auto";
1510
1711
  const runtimeDirectives = resolveRuntimeDirectives(options?.envSet, options?.envClear, options?.sharedHostSafe);
1511
- let sourceProjectItemCount = 0;
1512
- let sourceGlobalItemCount = 0;
1513
- let schemaSandboxProjectItemCount = 0;
1514
- let schemaSandboxGlobalItemCount = 0;
1515
- let trackerSandboxProjectItemCount = 0;
1516
- let trackerSandboxGlobalItemCount = 0;
1517
1712
  const sourceRoots = options?.sourceRoots;
1518
- const projectExtensionsSeeded = Boolean(sourceRoots);
1519
- const globalExtensionsSeeded = Boolean(sourceRoots);
1520
1713
  try {
1521
- await runInit(void 0, { path: schemaSandboxPmPath });
1522
- await runInit(void 0, { path: schemaSandboxGlobalPath });
1523
- await runInit(void 0, { path: trackerSandboxPmPath });
1524
- await runInit(void 0, { path: trackerSandboxGlobalPath });
1525
- if (sourceRoots) {
1526
- await seedLinkedTestSandbox(schemaSandboxPmPath, schemaSandboxGlobalPath, sourceRoots);
1527
- await seedLinkedTestSandbox(trackerSandboxPmPath, trackerSandboxGlobalPath, sourceRoots);
1528
- await seedLinkedTestTrackerData(sourceRoots.projectPmRoot, trackerSandboxPmPath);
1529
- await seedLinkedTestTrackerData(sourceRoots.globalPmRoot, trackerSandboxGlobalPath);
1530
- sourceProjectItemCount = await countLinkedTestItemFiles(sourceRoots.projectPmRoot);
1531
- sourceGlobalItemCount = await countLinkedTestItemFiles(sourceRoots.globalPmRoot);
1532
- }
1533
- schemaSandboxProjectItemCount = await countLinkedTestItemFiles(schemaSandboxPmPath);
1534
- schemaSandboxGlobalItemCount = await countLinkedTestItemFiles(schemaSandboxGlobalPath);
1535
- trackerSandboxProjectItemCount = await countLinkedTestItemFiles(trackerSandboxPmPath);
1536
- trackerSandboxGlobalItemCount = await countLinkedTestItemFiles(trackerSandboxGlobalPath);
1537
- const buildExecutionContext = (isPmCommand, isPmTrackerReadCommand, requestedPmContextMode, effectivePmContextMode, autoPmContextApplied) => {
1538
- const selectedSandboxProjectPmPath = effectivePmContextMode === "tracker" ? trackerSandboxPmPath : schemaSandboxPmPath;
1539
- const selectedSandboxGlobalPmPath = effectivePmContextMode === "tracker" ? trackerSandboxGlobalPath : schemaSandboxGlobalPath;
1540
- const selectedSandboxProjectItemCount = effectivePmContextMode === "tracker" ? trackerSandboxProjectItemCount : schemaSandboxProjectItemCount;
1541
- const selectedSandboxGlobalItemCount = effectivePmContextMode === "tracker" ? trackerSandboxGlobalItemCount : schemaSandboxGlobalItemCount;
1542
- const mismatchDetected = isPmCommand && sourceProjectItemCount !== selectedSandboxProjectItemCount;
1543
- return {
1544
- requested_pm_context_mode: requestedPmContextMode,
1545
- pm_context_mode: effectivePmContextMode,
1546
- auto_pm_context_applied: autoPmContextApplied,
1547
- is_pm_command: isPmCommand,
1548
- is_pm_tracker_read_command: isPmTrackerReadCommand,
1549
- source_project_pm_path: sourceRoots?.projectPmRoot ?? "",
1550
- sandbox_project_pm_path: selectedSandboxProjectPmPath,
1551
- source_global_pm_path: sourceRoots?.globalPmRoot ?? "",
1552
- sandbox_global_pm_path: selectedSandboxGlobalPmPath,
1553
- source_project_item_count: sourceProjectItemCount,
1554
- sandbox_project_item_count: selectedSandboxProjectItemCount,
1555
- source_global_item_count: sourceGlobalItemCount,
1556
- sandbox_global_item_count: selectedSandboxGlobalItemCount,
1557
- mismatch_detected: mismatchDetected,
1558
- project_extensions_seeded: projectExtensionsSeeded,
1559
- global_extensions_seeded: globalExtensionsSeeded
1560
- };
1561
- };
1714
+ await initializeLinkedTestSandboxes(layout);
1715
+ await seedLinkedTestSandboxesFromSource(layout, sourceRoots);
1716
+ const counts = await countLinkedTestSandboxItems(layout, sourceRoots);
1562
1717
  for (let index = 0; index < tests.length; index += 1) {
1563
1718
  const linkedTest = tests[index];
1564
- const linkedOverridePmContextMode = typeof linkedTest.pm_context_mode === "string" && linkedTest.pm_context_mode.trim().length > 0 ? parsePmContextMode(linkedTest.pm_context_mode) : void 0;
1565
- const isPmCommand = typeof linkedTest.command === "string" && linkedTest.command.length > 0 ? commandInvokesPmCli(linkedTest.command) : false;
1566
- const isPmTrackerReadCommand = isPmCommand && typeof linkedTest.command === "string" && linkedTest.command.length > 0 ? commandInvokesPmTrackerReadCommand(linkedTest.command) : false;
1567
- const autoPmContextApplied = options?.autoPmContext === true && isPmTrackerReadCommand;
1568
- const requestedPmContextMode = autoPmContextApplied ? "auto" : resolveLinkedTestRequestedContextMode(linkedTest, runLevelPmContextMode, options?.overrideLinkedPmContext === true);
1569
- const effectivePmContextMode = resolveLinkedTestEffectiveContextMode(requestedPmContextMode, isPmTrackerReadCommand);
1570
- const executionContext = buildExecutionContext(isPmCommand, isPmTrackerReadCommand, requestedPmContextMode, effectivePmContextMode, autoPmContextApplied);
1571
- if (!linkedTest.command) {
1572
- results.push({
1573
- command: linkedTest.command,
1574
- path: linkedTest.path,
1575
- status: "skipped",
1576
- execution_context: executionContext,
1577
- error: "No command configured for this linked test."
1578
- });
1579
- continue;
1580
- }
1581
- const runtimeSafetySkipReason = getRuntimeSafetySkipReason(linkedTest.command);
1582
- if (runtimeSafetySkipReason) {
1583
- results.push({
1584
- command: linkedTest.command,
1585
- path: linkedTest.path,
1586
- status: "skipped",
1587
- execution_context: executionContext,
1588
- error: runtimeSafetySkipReason
1589
- });
1590
- continue;
1591
- }
1592
- const failOnMismatchByDefault = executionContext.pm_context_mode === "schema" && executionContext.is_pm_tracker_read_command && executionContext.mismatch_detected;
1593
- const failOnMismatchByFlag = options?.failOnContextMismatch === true && executionContext.is_pm_command && executionContext.mismatch_detected;
1594
- if (failOnMismatchByDefault || failOnMismatchByFlag) {
1595
- const mismatchHint = buildPmContextMismatchHint({
1596
- executionContext,
1597
- runLevelPmContextMode,
1598
- linkedOverridePmContextMode
1599
- });
1600
- const mismatchPrefix = options?.checkContext === true ? "Linked test preflight PM context mismatch detected" : "Linked test PM context mismatch detected";
1601
- results.push({
1602
- command: linkedTest.command,
1603
- path: linkedTest.path,
1604
- status: "failed",
1605
- exit_code: 1,
1606
- failure_category: "assertion_failure",
1607
- execution_context: executionContext,
1608
- error: `${mismatchPrefix} (source_project_items=${executionContext.source_project_item_count}, sandbox_project_items=${executionContext.sandbox_project_item_count}).${mismatchHint}`
1609
- });
1610
- continue;
1611
- }
1612
- if (options?.requireAssertionsForPm === true && executionContext.is_pm_command && !hasLinkedTestAssertions(linkedTest)) {
1613
- results.push({
1614
- command: linkedTest.command,
1615
- path: linkedTest.path,
1616
- status: "failed",
1617
- exit_code: 1,
1618
- failure_category: "assertion_failure",
1619
- execution_context: executionContext,
1620
- error: "Linked PM command requires assertions when --require-assertions-for-pm is enabled."
1621
- });
1622
- continue;
1623
- }
1624
- const timeoutMs = (linkedTest.timeout_seconds ?? defaultTimeoutSeconds ?? 120) * 1e3;
1625
- const effectiveDirectives = resolveEffectiveLinkedTestDirectives(runtimeDirectives, linkedTest);
1626
- const executionEnv = { ...process.env };
1627
- applyEnvDirectiveStage(executionEnv, runtimeDirectives);
1628
- applyEnvDirectiveStage(executionEnv, {
1629
- env_set: linkedTest.env_set ?? {},
1630
- env_clear: linkedTest.env_clear ?? []
1719
+ const commandContext = resolveLinkedTestCommandContext({
1720
+ linkedTest,
1721
+ layout,
1722
+ counts,
1723
+ sourceRoots,
1724
+ runLevelPmContextMode,
1725
+ options
1631
1726
  });
1632
- if (effectiveDirectives.shared_host_safe) {
1633
- applySharedHostSafeDefaults(executionEnv);
1634
- }
1635
- executionEnv.FORCE_COLOR = "0";
1636
- executionEnv.PM_PATH = executionContext.sandbox_project_pm_path;
1637
- executionEnv.PM_GLOBAL_PATH = executionContext.sandbox_global_pm_path;
1638
- const execution = await runLinkedTestCommand(linkedTest.command, timeoutMs, executionEnv, {
1639
- index: index + 1,
1640
- total: tests.length,
1641
- timeoutMs,
1642
- command: linkedTest.command
1643
- }, progressMode);
1644
- const passed = execution.exitCode === 0 && !execution.timedOut && !execution.maxBufferExceeded;
1645
- if (passed) {
1646
- if (options?.failOnEmptyTestRun === true) {
1647
- const emptyRunSignal = detectEmptyLinkedTestRun(execution.stdout, execution.stderr);
1648
- if (emptyRunSignal) {
1649
- results.push({
1650
- command: linkedTest.command,
1651
- path: linkedTest.path,
1652
- status: "failed",
1653
- exit_code: 1,
1654
- failure_category: "empty_run",
1655
- execution_context: executionContext,
1656
- stdout: execution.stdout,
1657
- stderr: execution.stderr,
1658
- error: `Linked test reported an empty test run (${emptyRunSignal}) while --fail-on-empty-test-run is enabled. Update test selection or disable --fail-on-empty-test-run for this run.`
1659
- });
1660
- continue;
1661
- }
1662
- }
1663
- const assertionFailures = evaluateLinkedTestAssertions(linkedTest, execution.stdout, execution.stderr);
1664
- if (assertionFailures.length > 0) {
1665
- results.push({
1666
- command: linkedTest.command,
1667
- path: linkedTest.path,
1668
- status: "failed",
1669
- exit_code: 1,
1670
- failure_category: "assertion_failure",
1671
- execution_context: executionContext,
1672
- stdout: execution.stdout,
1673
- stderr: execution.stderr,
1674
- error: `Linked test assertion(s) failed: ${assertionFailures.join("; ")}`
1675
- });
1676
- continue;
1677
- }
1678
- results.push({
1679
- command: linkedTest.command,
1680
- path: linkedTest.path,
1681
- status: "passed",
1682
- exit_code: 0,
1683
- execution_context: executionContext,
1684
- stdout: execution.stdout,
1685
- stderr: execution.stderr
1686
- });
1727
+ const preflightResult = resolveLinkedTestPreflightResult({
1728
+ linkedTest,
1729
+ executionContext: commandContext.executionContext,
1730
+ runLevelPmContextMode,
1731
+ linkedOverridePmContextMode: commandContext.linkedOverridePmContextMode,
1732
+ options
1733
+ });
1734
+ if (preflightResult) {
1735
+ results.push(preflightResult);
1687
1736
  continue;
1688
1737
  }
1689
- const failureCategory = classifyLinkedTestFailure(execution);
1690
- results.push({
1691
- command: linkedTest.command,
1692
- path: linkedTest.path,
1693
- status: "failed",
1694
- exit_code: resolveLinkedTestFailureExitCode(execution),
1695
- failure_category: failureCategory,
1696
- execution_context: executionContext,
1697
- stdout: execution.stdout,
1698
- stderr: execution.stderr,
1699
- error: formatLinkedTestExecutionError(execution, timeoutMs)
1700
- });
1738
+ results.push(await runSingleLinkedTest({
1739
+ linkedTest,
1740
+ index,
1741
+ total: tests.length,
1742
+ defaultTimeoutSeconds,
1743
+ runtimeDirectives,
1744
+ progressMode,
1745
+ executionContext: commandContext.executionContext,
1746
+ options
1747
+ }));
1701
1748
  }
1702
1749
  } finally {
1703
- await rm(sandboxRoot, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
1750
+ await rm(layout.root, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
1704
1751
  }
1705
1752
  return results;
1706
1753
  }
1707
- async function runTest(id, options, global2) {
1708
- const stdinResolver = createStdinTokenResolver();
1709
- const pmRoot = resolvePmRoot(process.cwd(), global2.path);
1710
- if (!await pathExists(getSettingsPath(pmRoot))) {
1711
- throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1712
- }
1713
- const settings = await readSettings(pmRoot);
1714
- const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1715
- const resolvedAdds = await stdinResolver.resolveList(options.add, "--add");
1716
- const resolvedAddJsons = await stdinResolver.resolveList(options.addJson, "--add-json");
1717
- const resolvedRemoves = await stdinResolver.resolveList(options.remove, "--remove");
1718
- const adds = [...parseAddEntries(resolvedAdds), ...parseAddJsonEntries(resolvedAddJsons)];
1719
- const removes = parseRemoveEntries(resolvedRemoves);
1720
- const shouldMutate = adds.length > 0 || removes.length > 0;
1721
- let tests = [];
1722
- let itemId;
1723
- let changed = false;
1724
- if (shouldMutate) {
1725
- const author = resolveAuthor(options.author, settings.author_default);
1726
- const result = await mutateItem({
1727
- pmRoot,
1728
- settings,
1729
- id,
1730
- op: "tests_add",
1731
- author,
1732
- message: options.message,
1733
- force: options.force,
1734
- skipNoop: true,
1735
- mutate(document) {
1736
- const previous = document.metadata.tests ?? [];
1737
- const next = [...document.metadata.tests ?? []];
1738
- for (const add of adds) {
1739
- const exists = next.some((entry) => entry.command === add.command && entry.path === add.path && entry.scope === add.scope && entry.pm_context_mode === add.pm_context_mode);
1740
- if (!exists) {
1741
- next.push(add);
1742
- }
1743
- }
1744
- if (removes.length > 0) {
1745
- for (let i = next.length - 1; i >= 0; i -= 1) {
1746
- const entry = next[i];
1747
- if (removes.includes(entry.path ?? "") || removes.includes(entry.command ?? "")) {
1748
- next.splice(i, 1);
1749
- }
1750
- }
1751
- }
1752
- document.metadata.tests = next;
1753
- return { changedFields: stableValueEquals(previous, next) ? [] : ["tests"] };
1754
- }
1755
- });
1756
- tests = result.item.tests ?? [];
1757
- itemId = result.item.id;
1758
- changed = result.changedFields.length > 0;
1759
- } else {
1760
- const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
1761
- if (!located) {
1762
- throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
1763
- }
1764
- itemId = located.id;
1765
- const loaded = await readLocatedItem(located, { schema: settings.schema });
1766
- tests = loaded.document.metadata.tests ?? [];
1767
- }
1768
- let defaultTimeoutSeconds;
1769
- if (options.timeout !== void 0) {
1770
- defaultTimeoutSeconds = parseOptionalNumber(options.timeout, "timeout");
1771
- }
1772
- const pmContextMode = parsePmContextMode(options.pmContext);
1773
- const hasRuntimeDirectiveFlags = (options.envSet?.length ?? 0) > 0 || (options.envClear?.length ?? 0) > 0 || options.sharedHostSafe === true || options.pmContext !== void 0 || options.overrideLinkedPmContext === true || options.failOnContextMismatch === true || options.failOnSkipped === true || options.failOnEmptyTestRun === true || options.requireAssertionsForPm === true || options.checkContext === true || options.autoPmContext === true;
1774
- if (hasRuntimeDirectiveFlags && options.run !== true) {
1754
+ function hasTestRuntimeDirectiveFlags(options) {
1755
+ return (options.envSet?.length ?? 0) > 0 || (options.envClear?.length ?? 0) > 0 || options.sharedHostSafe === true || options.pmContext !== void 0 || options.overrideLinkedPmContext === true || options.failOnContextMismatch === true || options.failOnSkipped === true || options.failOnEmptyTestRun === true || options.requireAssertionsForPm === true || options.checkContext === true || options.autoPmContext === true;
1756
+ }
1757
+ function assertTestRunFlagUsage(options) {
1758
+ if (hasTestRuntimeDirectiveFlags(options) && options.run !== true) {
1775
1759
  throw new PmCliError("--env-set, --env-clear, --shared-host-safe, --pm-context, --override-linked-pm-context, --fail-on-context-mismatch, --fail-on-skipped, --fail-on-empty-test-run, --require-assertions-for-pm, --check-context, and --auto-pm-context require --run", EXIT_CODE.USAGE);
1776
1760
  }
1777
1761
  const hasSelectorFlags = options.match !== void 0 || options.onlyIndex !== void 0 || options.onlyLast === true;
1778
1762
  if (hasSelectorFlags && options.run !== true) {
1779
1763
  throw new PmCliError("--match, --only-index, and --only-last require --run", EXIT_CODE.USAGE);
1780
1764
  }
1765
+ }
1766
+ async function resolveLinkedTestItem(params) {
1767
+ const { id, options, pmRoot, settings, typeToFolder, adds, removes } = params;
1768
+ if (adds.length === 0 && removes.length === 0) {
1769
+ const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeToFolder);
1770
+ if (!located) {
1771
+ throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
1772
+ }
1773
+ const loaded = await readLocatedItem(located, { schema: settings.schema });
1774
+ return { itemId: located.id, tests: loaded.document.metadata.tests ?? [], changed: false };
1775
+ }
1776
+ const result = await mutateItem({
1777
+ pmRoot,
1778
+ settings,
1779
+ id,
1780
+ op: "tests_add",
1781
+ author: resolveAuthor(options.author, settings.author_default),
1782
+ message: options.message,
1783
+ force: options.force,
1784
+ skipNoop: true,
1785
+ mutate(document) {
1786
+ const previous = document.metadata.tests ?? [];
1787
+ const next = [...previous];
1788
+ for (const add of adds) {
1789
+ const exists = next.some((entry) => entry.command === add.command && entry.path === add.path && entry.scope === add.scope && entry.pm_context_mode === add.pm_context_mode);
1790
+ if (!exists) {
1791
+ next.push(add);
1792
+ }
1793
+ }
1794
+ if (removes.length > 0) {
1795
+ for (let i = next.length - 1; i >= 0; i -= 1) {
1796
+ const entry = next[i];
1797
+ if (removes.includes(entry.path ?? "") || removes.includes(entry.command ?? "")) {
1798
+ next.splice(i, 1);
1799
+ }
1800
+ }
1801
+ }
1802
+ document.metadata.tests = next;
1803
+ return { changedFields: stableValueEquals(previous, next) ? [] : ["tests"] };
1804
+ }
1805
+ });
1806
+ return {
1807
+ itemId: result.item.id,
1808
+ tests: result.item.tests ?? [],
1809
+ changed: result.changedFields.length > 0
1810
+ };
1811
+ }
1812
+ function resolveTestRunOptions(options, tests) {
1813
+ assertTestRunFlagUsage(options);
1781
1814
  const selectorInput = {
1782
1815
  match: options.match,
1783
1816
  onlyIndex: options.onlyIndex === void 0 ? void 0 : parseOnlyIndexValue(options.onlyIndex),
1784
1817
  onlyLast: options.onlyLast
1785
1818
  };
1786
1819
  const runSelection = options.run === true ? resolveLinkedTestRunSelection(tests, selectorInput) : void 0;
1787
- const testsToRun = runSelection?.selected ?? tests;
1788
- const runStartedAt = options.run === true ? nowIso() : void 0;
1789
- const runResults = options.run === true ? await runLinkedTests(testsToRun, defaultTimeoutSeconds, {
1820
+ return {
1821
+ defaultTimeoutSeconds: options.timeout === void 0 ? void 0 : parseOptionalNumber(options.timeout, "timeout"),
1822
+ pmContextMode: parsePmContextMode(options.pmContext),
1823
+ runSelection,
1824
+ testsToRun: runSelection?.selected ?? tests
1825
+ };
1826
+ }
1827
+ async function executeSelectedLinkedTests(params) {
1828
+ const { options, runOptions, pmRoot } = params;
1829
+ if (options.run !== true) {
1830
+ return [];
1831
+ }
1832
+ return await runLinkedTests(runOptions.testsToRun, runOptions.defaultTimeoutSeconds, {
1790
1833
  progress: options.progress,
1791
1834
  envSet: options.envSet,
1792
1835
  envClear: options.envClear,
1793
1836
  sharedHostSafe: options.sharedHostSafe,
1794
- pmContext: pmContextMode,
1837
+ pmContext: runOptions.pmContextMode,
1795
1838
  overrideLinkedPmContext: options.overrideLinkedPmContext,
1796
1839
  failOnContextMismatch: options.failOnContextMismatch,
1797
1840
  failOnEmptyTestRun: options.failOnEmptyTestRun,
@@ -1802,9 +1845,9 @@ async function runTest(id, options, global2) {
1802
1845
  projectPmRoot: pmRoot,
1803
1846
  globalPmRoot: resolveGlobalPmRoot(process.cwd())
1804
1847
  }
1805
- }) : [];
1806
- const failureCategories = countFailureCategories(runResults);
1807
- const failOnSkippedTriggered = options.run === true && options.failOnSkipped === true && runResults.some((entry) => entry.status === "skipped");
1848
+ });
1849
+ }
1850
+ function buildTestWarnings(options, runSelection, runResults) {
1808
1851
  const warnings = [];
1809
1852
  if (runSelection && runSelection.selector !== null) {
1810
1853
  warnings.push(`linked_test_selection:${runSelection.selector}=${runSelection.requested};selected=${runSelection.selected_count};skipped=${runSelection.skipped_count};indexes=${runSelection.selected_indexes.join(",")}`);
@@ -1813,55 +1856,90 @@ async function runTest(id, options, global2) {
1813
1856
  const preflight = summarizeContextPreflight(runResults);
1814
1857
  warnings.push(`context_preflight:checked_pm_commands=${preflight.checked_pm_commands};tracker_read_commands=${preflight.tracker_read_commands};mismatches=${preflight.mismatches};auto_remediated=${preflight.auto_remediated}`);
1815
1858
  }
1816
- if (options.run === true && runStartedAt && settings.testing.record_results_to_items === true) {
1817
- const summary = summarizeRunResultStatuses(runResults);
1818
- const trackedRunId = resolveTrackedRunId("test");
1819
- const attemptRaw = process.env.PM_BACKGROUND_TEST_RUN_ATTEMPT?.trim();
1820
- const parsedAttempt = attemptRaw ? Number.parseInt(attemptRaw, 10) : Number.NaN;
1821
- const resumedFrom = process.env.PM_BACKGROUND_TEST_RUN_RESUMED_FROM?.trim();
1822
- try {
1823
- await appendTrackedTestRunSummary({
1824
- pmRoot,
1825
- settings,
1826
- itemId,
1827
- author: resolveAuthor(options.author, settings.author_default),
1828
- message: `Track test run summary (${trackedRunId})`,
1829
- entry: {
1830
- run_id: trackedRunId,
1831
- kind: "test",
1832
- status: summary.failed > 0 || failOnSkippedTriggered === true ? "failed" : "passed",
1833
- started_at: runStartedAt,
1834
- finished_at: nowIso(),
1835
- recorded_at: nowIso(),
1836
- attempt: Number.isFinite(parsedAttempt) && parsedAttempt >= 1 ? parsedAttempt : void 0,
1837
- resumed_from: resumedFrom && resumedFrom.length > 0 ? resumedFrom : void 0,
1838
- passed: summary.passed,
1839
- failed: summary.failed,
1840
- skipped: summary.skipped,
1841
- fail_on_skipped_triggered: failOnSkippedTriggered ? true : void 0
1842
- }
1843
- });
1844
- } catch (error) {
1845
- warnings.push(`test_result_tracking_failed:${itemId}:${error instanceof Error ? error.message : String(error)}`);
1846
- }
1859
+ return warnings;
1860
+ }
1861
+ async function recordTestRunSummary(params) {
1862
+ const { options, pmRoot, settings, itemId, runStartedAt, runResults, failOnSkippedTriggered, warnings } = params;
1863
+ if (options.run !== true || !runStartedAt || settings.testing.record_results_to_items !== true) {
1864
+ return;
1865
+ }
1866
+ const summary = summarizeRunResultStatuses(runResults);
1867
+ const trackedRunId = resolveTrackedRunId("test");
1868
+ const attemptRaw = process.env.PM_BACKGROUND_TEST_RUN_ATTEMPT?.trim();
1869
+ const parsedAttempt = attemptRaw ? Number.parseInt(attemptRaw, 10) : Number.NaN;
1870
+ const resumedFrom = process.env.PM_BACKGROUND_TEST_RUN_RESUMED_FROM?.trim();
1871
+ try {
1872
+ await appendTrackedTestRunSummary({
1873
+ pmRoot,
1874
+ settings,
1875
+ itemId,
1876
+ author: resolveAuthor(options.author, settings.author_default),
1877
+ message: `Track test run summary (${trackedRunId})`,
1878
+ entry: {
1879
+ run_id: trackedRunId,
1880
+ kind: "test",
1881
+ status: summary.failed > 0 || failOnSkippedTriggered === true ? "failed" : "passed",
1882
+ started_at: runStartedAt,
1883
+ finished_at: nowIso(),
1884
+ recorded_at: nowIso(),
1885
+ attempt: Number.isFinite(parsedAttempt) && parsedAttempt >= 1 ? parsedAttempt : void 0,
1886
+ resumed_from: resumedFrom && resumedFrom.length > 0 ? resumedFrom : void 0,
1887
+ passed: summary.passed,
1888
+ failed: summary.failed,
1889
+ skipped: summary.skipped,
1890
+ fail_on_skipped_triggered: failOnSkippedTriggered ? true : void 0
1891
+ }
1892
+ });
1893
+ } catch (error) {
1894
+ warnings.push(`test_result_tracking_failed:${itemId}:${error instanceof Error ? error.message : String(error)}`);
1847
1895
  }
1896
+ }
1897
+ async function runTest(id, options, global2) {
1898
+ const stdinResolver = createStdinTokenResolver();
1899
+ const pmRoot = resolvePmRoot(process.cwd(), global2.path);
1900
+ if (!await pathExists(getSettingsPath(pmRoot))) {
1901
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1902
+ }
1903
+ const settings = await readSettings(pmRoot);
1904
+ const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1905
+ const resolvedAdds = await stdinResolver.resolveList(options.add, "--add");
1906
+ const resolvedAddJsons = await stdinResolver.resolveList(options.addJson, "--add-json");
1907
+ const resolvedRemoves = await stdinResolver.resolveList(options.remove, "--remove");
1908
+ const adds = [...parseAddEntries(resolvedAdds), ...parseAddJsonEntries(resolvedAddJsons)];
1909
+ const removes = parseRemoveEntries(resolvedRemoves);
1910
+ const item = await resolveLinkedTestItem({
1911
+ id,
1912
+ options,
1913
+ pmRoot,
1914
+ settings,
1915
+ typeToFolder: typeRegistry.type_to_folder,
1916
+ adds,
1917
+ removes
1918
+ });
1919
+ const runOptions = resolveTestRunOptions(options, item.tests);
1920
+ const runStartedAt = options.run === true ? nowIso() : void 0;
1921
+ const runResults = await executeSelectedLinkedTests({ options, runOptions, pmRoot });
1922
+ const failureCategories = countFailureCategories(runResults);
1923
+ const failOnSkippedTriggered = options.run === true && options.failOnSkipped === true && runResults.some((entry) => entry.status === "skipped");
1924
+ const warnings = buildTestWarnings(options, runOptions.runSelection, runResults);
1925
+ await recordTestRunSummary({ options, pmRoot, settings, itemId: item.itemId, runStartedAt, runResults, failOnSkippedTriggered, warnings });
1848
1926
  return {
1849
1927
  ok: runResults.every((entry) => entry.status !== "failed") && failOnSkippedTriggered !== true,
1850
- id: itemId,
1851
- tests,
1928
+ id: item.itemId,
1929
+ tests: item.tests,
1852
1930
  run_results: runResults,
1853
1931
  failure_categories: failureCategories,
1854
- selection: runSelection ? {
1855
- selector: runSelection.selector,
1856
- requested: runSelection.requested,
1857
- selected_indexes: runSelection.selected_indexes,
1858
- selected_count: runSelection.selected_count,
1859
- skipped_count: runSelection.skipped_count
1932
+ selection: runOptions.runSelection ? {
1933
+ selector: runOptions.runSelection.selector,
1934
+ requested: runOptions.runSelection.requested,
1935
+ selected_indexes: runOptions.runSelection.selected_indexes,
1936
+ selected_count: runOptions.runSelection.selected_count,
1937
+ skipped_count: runOptions.runSelection.skipped_count
1860
1938
  } : void 0,
1861
1939
  fail_on_skipped_triggered: failOnSkippedTriggered ? true : void 0,
1862
1940
  warnings: warnings.length > 0 ? warnings : void 0,
1863
- changed,
1864
- count: tests.length
1941
+ changed: item.changed,
1942
+ count: item.tests.length
1865
1943
  };
1866
1944
  }
1867
1945
  var _testOnlyTestCommand = {
@@ -1902,4 +1980,4 @@ export {
1902
1980
  runTest,
1903
1981
  _testOnlyTestCommand
1904
1982
  };
1905
- //# sourceMappingURL=chunk-JMP4E6D7.js.map
1983
+ //# sourceMappingURL=chunk-IG5JYZGU.js.map