@unbrained/pm-cli 2026.7.1 → 2026.7.3

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 (625) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/CHANGELOG.md +25 -0
  3. package/CONTRIBUTING.md +2 -2
  4. package/README.md +1 -1
  5. package/dist/cli/commander-usage.d.ts +2 -0
  6. package/dist/cli/commander-usage.js +110 -86
  7. package/dist/cli/commander-usage.js.map +1 -1
  8. package/dist/cli/commands/activity.js +79 -57
  9. package/dist/cli/commands/activity.js.map +1 -1
  10. package/dist/cli/commands/aggregate.js +102 -79
  11. package/dist/cli/commands/aggregate.js.map +1 -1
  12. package/dist/cli/commands/calendar.js +278 -243
  13. package/dist/cli/commands/calendar.js.map +1 -1
  14. package/dist/cli/commands/close-many.js +176 -114
  15. package/dist/cli/commands/close-many.js.map +1 -1
  16. package/dist/cli/commands/close.js +157 -129
  17. package/dist/cli/commands/close.js.map +1 -1
  18. package/dist/cli/commands/comments-audit.js +50 -42
  19. package/dist/cli/commands/comments-audit.js.map +1 -1
  20. package/dist/cli/commands/config.d.ts +2 -0
  21. package/dist/cli/commands/config.js +443 -879
  22. package/dist/cli/commands/config.js.map +1 -1
  23. package/dist/cli/commands/context.js +365 -287
  24. package/dist/cli/commands/context.js.map +1 -1
  25. package/dist/cli/commands/contracts.js +352 -238
  26. package/dist/cli/commands/contracts.js.map +1 -1
  27. package/dist/cli/commands/create.js +32 -17
  28. package/dist/cli/commands/create.js.map +1 -1
  29. package/dist/cli/commands/dedupe-audit.js +46 -39
  30. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  31. package/dist/cli/commands/dedupe-merge.js +88 -69
  32. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  33. package/dist/cli/commands/extension/doctor.js +56 -67
  34. package/dist/cli/commands/extension/doctor.js.map +1 -1
  35. package/dist/cli/commands/extension/shared.js +21 -15
  36. package/dist/cli/commands/extension/shared.js.map +1 -1
  37. package/dist/cli/commands/get.js +114 -81
  38. package/dist/cli/commands/get.js.map +1 -1
  39. package/dist/cli/commands/health.d.ts +17 -0
  40. package/dist/cli/commands/health.js +545 -417
  41. package/dist/cli/commands/health.js.map +1 -1
  42. package/dist/cli/commands/history-compact.js +209 -140
  43. package/dist/cli/commands/history-compact.js.map +1 -1
  44. package/dist/cli/commands/history-redact.js +162 -119
  45. package/dist/cli/commands/history-redact.js.map +1 -1
  46. package/dist/cli/commands/history-repair.js +120 -85
  47. package/dist/cli/commands/history-repair.js.map +1 -1
  48. package/dist/cli/commands/init-agent-guidance.js +32 -19
  49. package/dist/cli/commands/init-agent-guidance.js.map +1 -1
  50. package/dist/cli/commands/init.d.ts +8 -2
  51. package/dist/cli/commands/init.js +263 -162
  52. package/dist/cli/commands/init.js.map +1 -1
  53. package/dist/cli/commands/list.js +152 -102
  54. package/dist/cli/commands/list.js.map +1 -1
  55. package/dist/cli/commands/next.js +60 -40
  56. package/dist/cli/commands/next.js.map +1 -1
  57. package/dist/cli/commands/plan.js +373 -298
  58. package/dist/cli/commands/plan.js.map +1 -1
  59. package/dist/cli/commands/profile.js +23 -15
  60. package/dist/cli/commands/profile.js.map +1 -1
  61. package/dist/cli/commands/recurrence-parsers.js +43 -25
  62. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  63. package/dist/cli/commands/reindex.d.ts +21 -5
  64. package/dist/cli/commands/reindex.js +345 -205
  65. package/dist/cli/commands/reindex.js.map +1 -1
  66. package/dist/cli/commands/restore.d.ts +8 -7
  67. package/dist/cli/commands/restore.js +105 -69
  68. package/dist/cli/commands/restore.js.map +1 -1
  69. package/dist/cli/commands/schema.js +33 -30
  70. package/dist/cli/commands/schema.js.map +1 -1
  71. package/dist/cli/commands/search.d.ts +10 -2
  72. package/dist/cli/commands/search.js +503 -470
  73. package/dist/cli/commands/search.js.map +1 -1
  74. package/dist/cli/commands/telemetry.js +98 -87
  75. package/dist/cli/commands/telemetry.js.map +1 -1
  76. package/dist/cli/commands/test-all.js +237 -168
  77. package/dist/cli/commands/test-all.js.map +1 -1
  78. package/dist/cli/commands/test.d.ts +6 -5
  79. package/dist/cli/commands/test.js +424 -344
  80. package/dist/cli/commands/test.js.map +1 -1
  81. package/dist/cli/commands/update-many.js +57 -42
  82. package/dist/cli/commands/update-many.js.map +1 -1
  83. package/dist/cli/commands/update.d.ts +1 -1
  84. package/dist/cli/commands/update.js +738 -671
  85. package/dist/cli/commands/update.js.map +1 -1
  86. package/dist/cli/commands/validate.d.ts +20 -1
  87. package/dist/cli/commands/validate.js +478 -343
  88. package/dist/cli/commands/validate.js.map +1 -1
  89. package/dist/cli/error-guidance.js +406 -361
  90. package/dist/cli/error-guidance.js.map +1 -1
  91. package/dist/cli/extension-command-help.js +27 -19
  92. package/dist/cli/extension-command-help.js.map +1 -1
  93. package/dist/cli/help-json-payload.js +57 -49
  94. package/dist/cli/help-json-payload.js.map +1 -1
  95. package/dist/cli/main.d.ts +47 -0
  96. package/dist/cli/main.js +474 -371
  97. package/dist/cli/main.js.map +1 -1
  98. package/dist/cli/migration-gates.js +22 -45
  99. package/dist/cli/migration-gates.js.map +1 -1
  100. package/dist/cli/register-list-query.js +299 -310
  101. package/dist/cli/register-list-query.js.map +1 -1
  102. package/dist/cli/register-mutation.js +763 -779
  103. package/dist/cli/register-mutation.js.map +1 -1
  104. package/dist/cli/register-operations.js +386 -362
  105. package/dist/cli/register-operations.js.map +1 -1
  106. package/dist/cli/register-setup.js +120 -101
  107. package/dist/cli/register-setup.js.map +1 -1
  108. package/dist/cli/registration-helpers.d.ts +4 -0
  109. package/dist/cli/registration-helpers.js +45 -56
  110. package/dist/cli/registration-helpers.js.map +1 -1
  111. package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js → activity-5YWLSPGE.js} +9 -9
  112. package/dist/cli-bundle/chunks/activity-BIML7K2D.js +16 -0
  113. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js → aggregate-2V2M3JZU.js} +107 -83
  114. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js.map → aggregate-2V2M3JZU.js.map} +2 -2
  115. package/dist/cli-bundle/chunks/{aggregate-JTEF4BP7.js → aggregate-EK7DXML7.js} +108 -84
  116. package/dist/cli-bundle/chunks/aggregate-EK7DXML7.js.map +1 -0
  117. package/dist/cli-bundle/chunks/{append-LOVPGVPT.js → append-EZESUVJT.js} +8 -8
  118. package/dist/cli-bundle/chunks/{append-QCFJSDFL.js → append-JFG4WQMG.js} +8 -8
  119. package/dist/cli-bundle/chunks/{chunk-TP5Q5ZD3.js → chunk-32IUNTG4.js} +158 -119
  120. package/dist/cli-bundle/chunks/chunk-32IUNTG4.js.map +1 -0
  121. package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js → chunk-3W2HJKJX.js} +3 -3
  122. package/dist/cli-bundle/chunks/{chunk-VARHOHYV.js → chunk-4EXFFP7T.js} +86 -52
  123. package/dist/cli-bundle/chunks/chunk-4EXFFP7T.js.map +7 -0
  124. package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js → chunk-4PFVUUYV.js} +2 -2
  125. package/dist/cli-bundle/chunks/{chunk-JSU5P7VS.js → chunk-4WB6S4YX.js} +308 -184
  126. package/dist/cli-bundle/chunks/chunk-4WB6S4YX.js.map +1 -0
  127. package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js → chunk-572FKBRL.js} +61 -102
  128. package/dist/cli-bundle/chunks/chunk-572FKBRL.js.map +1 -0
  129. package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js → chunk-5E7N4T2Z.js} +2 -2
  130. package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js → chunk-5IZUBZBR.js} +3 -3
  131. package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js → chunk-5JIWFWOZ.js} +2 -2
  132. package/dist/cli-bundle/chunks/{chunk-FFMQB7WR.js → chunk-67LARBDL.js} +493 -404
  133. package/dist/cli-bundle/chunks/chunk-67LARBDL.js.map +1 -0
  134. package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js → chunk-6CDCWKSX.js} +4 -4
  135. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js → chunk-6KRFL33E.js} +308 -184
  136. package/dist/cli-bundle/chunks/chunk-6KRFL33E.js.map +7 -0
  137. package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js → chunk-6NYJGMTY.js} +2 -2
  138. package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js → chunk-7CLLC75T.js} +4 -4
  139. package/dist/cli-bundle/chunks/{chunk-2466X6E4.js → chunk-7LYO6S5A.js} +8 -8
  140. package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js → chunk-A3OQ7TFW.js} +8 -8
  141. package/dist/cli-bundle/chunks/{chunk-5CGRF3L5.js → chunk-AIKU3IIL.js} +153 -90
  142. package/dist/cli-bundle/chunks/chunk-AIKU3IIL.js.map +1 -0
  143. package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js → chunk-AJHYQCBJ.js} +39 -5
  144. package/dist/cli-bundle/chunks/chunk-AJHYQCBJ.js.map +7 -0
  145. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  146. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  147. package/dist/cli-bundle/chunks/{chunk-OTUHB4HS.js → chunk-BE2SR6QL.js} +92 -77
  148. package/dist/cli-bundle/chunks/chunk-BE2SR6QL.js.map +1 -0
  149. package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js → chunk-BI4R7HI2.js} +75 -53
  150. package/dist/cli-bundle/chunks/chunk-BI4R7HI2.js.map +7 -0
  151. package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js → chunk-CXR3CMBQ.js} +33 -6
  152. package/dist/cli-bundle/chunks/chunk-CXR3CMBQ.js.map +1 -0
  153. package/dist/cli-bundle/chunks/{chunk-ZETXE4SE.js → chunk-ECU6MMTQ.js} +713 -613
  154. package/dist/cli-bundle/chunks/chunk-ECU6MMTQ.js.map +1 -0
  155. package/dist/cli-bundle/chunks/{chunk-2D4HATP2.js → chunk-EJ2OCBHF.js} +54 -30
  156. package/dist/cli-bundle/chunks/chunk-EJ2OCBHF.js.map +1 -0
  157. package/dist/cli-bundle/chunks/{chunk-BDTISOSD.js → chunk-EQURFOMH.js} +41 -26
  158. package/dist/cli-bundle/chunks/chunk-EQURFOMH.js.map +7 -0
  159. package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js → chunk-ER4ME5U2.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js → chunk-ERG65A2L.js} +2 -2
  161. package/dist/cli-bundle/chunks/{chunk-IZBR4NRW.js → chunk-F6WNBITZ.js} +157 -113
  162. package/dist/cli-bundle/chunks/chunk-F6WNBITZ.js.map +7 -0
  163. package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js → chunk-FH2H3CBD.js} +3 -3
  164. package/dist/cli-bundle/chunks/{chunk-JPECA746.js → chunk-FUFFPIYA.js} +2 -2
  165. package/dist/cli-bundle/chunks/{chunk-CF7RL6FR.js → chunk-FZJM2TXF.js} +110 -73
  166. package/dist/cli-bundle/chunks/chunk-FZJM2TXF.js.map +1 -0
  167. package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js → chunk-GUYNUXQT.js} +3 -3
  168. package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js → chunk-GVJE5T7Q.js} +2 -2
  169. package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js → chunk-HB4FAT3O.js} +42 -60
  170. package/dist/cli-bundle/chunks/chunk-HB4FAT3O.js.map +7 -0
  171. package/dist/cli-bundle/chunks/{chunk-55SNVXRQ.js → chunk-HQAF23Q2.js} +626 -484
  172. package/dist/cli-bundle/chunks/chunk-HQAF23Q2.js.map +7 -0
  173. package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js → chunk-JBZ2NTKX.js} +2 -2
  174. package/dist/cli-bundle/chunks/{chunk-RMMQ74TG.js → chunk-JPATY4SE.js} +54 -30
  175. package/dist/cli-bundle/chunks/chunk-JPATY4SE.js.map +7 -0
  176. package/dist/cli-bundle/chunks/{chunk-IPYBJWTE.js → chunk-K5DT2YKM.js} +109 -72
  177. package/dist/cli-bundle/chunks/chunk-K5DT2YKM.js.map +7 -0
  178. package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js → chunk-KEZOIPCR.js} +3 -3
  179. package/dist/cli-bundle/chunks/{chunk-RVUALSJF.js → chunk-KHVGM5CS.js} +466 -365
  180. package/dist/cli-bundle/chunks/chunk-KHVGM5CS.js.map +7 -0
  181. package/dist/cli-bundle/chunks/{chunk-YITK2PJ6.js → chunk-KS6ATO47.js} +288 -175
  182. package/dist/cli-bundle/chunks/chunk-KS6ATO47.js.map +7 -0
  183. package/dist/cli-bundle/chunks/{chunk-7R4QEMZZ.js → chunk-L4SLHV6G.js} +463 -362
  184. package/dist/cli-bundle/chunks/chunk-L4SLHV6G.js.map +1 -0
  185. package/dist/cli-bundle/chunks/{chunk-RLDHZHQS.js → chunk-LBE5QFMZ.js} +158 -114
  186. package/dist/cli-bundle/chunks/chunk-LBE5QFMZ.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js → chunk-LCWQP6NM.js} +76 -54
  188. package/dist/cli-bundle/chunks/chunk-LCWQP6NM.js.map +1 -0
  189. package/dist/cli-bundle/chunks/{chunk-KNPEF7QG.js → chunk-LOWVNZBZ.js} +91 -76
  190. package/dist/cli-bundle/chunks/chunk-LOWVNZBZ.js.map +7 -0
  191. package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js → chunk-MDHWWBNZ.js} +3 -3
  192. package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js → chunk-MEZZZBYX.js} +2 -2
  193. package/dist/cli-bundle/chunks/{chunk-V3NOKJF2.js → chunk-MHRS5FUX.js} +288 -175
  194. package/dist/cli-bundle/chunks/chunk-MHRS5FUX.js.map +1 -0
  195. package/dist/cli-bundle/chunks/{chunk-3XZCOZ5J.js → chunk-NOIEVOK5.js} +391 -313
  196. package/dist/cli-bundle/chunks/chunk-NOIEVOK5.js.map +1 -0
  197. package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js → chunk-NZ7QIUP5.js} +4 -4
  198. package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js → chunk-OGLGI22K.js} +115 -67
  199. package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js.map → chunk-OGLGI22K.js.map} +1 -1
  200. package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js → chunk-P5L7Z2O6.js} +2 -2
  201. package/dist/cli-bundle/chunks/{chunk-BZCEN4JA.js → chunk-PULUSQAV.js} +492 -403
  202. package/dist/cli-bundle/chunks/chunk-PULUSQAV.js.map +7 -0
  203. package/dist/cli-bundle/chunks/{chunk-3VGN2UWE.js → chunk-QCDTQCMW.js} +22 -30
  204. package/dist/cli-bundle/chunks/chunk-QCDTQCMW.js.map +1 -0
  205. package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js → chunk-QNNQAAZ5.js} +24 -18
  206. package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js.map → chunk-QNNQAAZ5.js.map} +1 -1
  207. package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js → chunk-RAHINBVP.js} +60 -101
  208. package/dist/cli-bundle/chunks/chunk-RAHINBVP.js.map +7 -0
  209. package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js → chunk-RJH5VQHW.js} +43 -61
  210. package/dist/cli-bundle/chunks/chunk-RJH5VQHW.js.map +1 -0
  211. package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js → chunk-SU2E4AWU.js} +6 -6
  212. package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js → chunk-SU3TB4NS.js} +2 -2
  213. package/dist/cli-bundle/chunks/{chunk-JWXRETDF.js → chunk-SYE6WMV6.js} +626 -484
  214. package/dist/cli-bundle/chunks/chunk-SYE6WMV6.js.map +1 -0
  215. package/dist/cli-bundle/chunks/{chunk-NWMZWYYB.js → chunk-T3P7PMZP.js} +42 -27
  216. package/dist/cli-bundle/chunks/chunk-T3P7PMZP.js.map +1 -0
  217. package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js → chunk-T4XBKJ3F.js} +4 -4
  218. package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js → chunk-T6AXEBOP.js} +23 -17
  219. package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js.map → chunk-T6AXEBOP.js.map} +2 -2
  220. package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js → chunk-TQ6AX5SQ.js} +58 -69
  221. package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js.map → chunk-TQ6AX5SQ.js.map} +2 -2
  222. package/dist/cli-bundle/chunks/{chunk-4XOIEKSD.js → chunk-U3S2B7TA.js} +86 -52
  223. package/dist/cli-bundle/chunks/chunk-U3S2B7TA.js.map +1 -0
  224. package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js → chunk-U5TR4N7J.js} +7 -7
  225. package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js → chunk-UMNQZS4H.js} +3 -3
  226. package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js → chunk-WJA3PXW7.js} +7 -7
  227. package/dist/cli-bundle/chunks/{chunk-RGEMWD6Q.js → chunk-WRYERRZX.js} +157 -118
  228. package/dist/cli-bundle/chunks/chunk-WRYERRZX.js.map +7 -0
  229. package/dist/cli-bundle/chunks/{chunk-NUHHPVVS.js → chunk-WYOIIFSE.js} +712 -612
  230. package/dist/cli-bundle/chunks/chunk-WYOIIFSE.js.map +7 -0
  231. package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js → chunk-XRYSCRZR.js} +116 -68
  232. package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js.map → chunk-XRYSCRZR.js.map} +3 -3
  233. package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js → chunk-YF746GTH.js} +59 -70
  234. package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js.map → chunk-YF746GTH.js.map} +1 -1
  235. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js → chunk-YPWUSH72.js} +390 -312
  236. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js.map → chunk-YPWUSH72.js.map} +2 -2
  237. package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js → chunk-YSDFIY7N.js} +3 -3
  238. package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js → chunk-YSGTMDWC.js} +2 -2
  239. package/dist/cli-bundle/chunks/{chunk-NFDPYAIP.js → chunk-YVKZ3ANP.js} +21 -29
  240. package/dist/cli-bundle/chunks/chunk-YVKZ3ANP.js.map +7 -0
  241. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  242. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  243. package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js → chunk-Z5F6XZXE.js} +6 -6
  244. package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js → chunk-Z7RPDF2Y.js} +3 -3
  245. package/dist/cli-bundle/chunks/{chunk-3S2KT7NG.js → chunk-ZFTKYWIF.js} +152 -89
  246. package/dist/cli-bundle/chunks/chunk-ZFTKYWIF.js.map +7 -0
  247. package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js → claim-2BGBGSVI.js} +8 -8
  248. package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js → claim-5GU7OE67.js} +8 -8
  249. package/dist/cli-bundle/chunks/close-6YODBUIV.js +14 -0
  250. package/dist/cli-bundle/chunks/{close-TQYAAFJP.js → close-AFVKPR57.js} +7 -7
  251. package/dist/cli-bundle/chunks/{close-many-BG5QQIDQ.js → close-many-7KLOSYLP.js} +186 -122
  252. package/dist/cli-bundle/chunks/close-many-7KLOSYLP.js.map +7 -0
  253. package/dist/cli-bundle/chunks/{close-many-LDRVEQY2.js → close-many-JKUJMHLG.js} +187 -123
  254. package/dist/cli-bundle/chunks/close-many-JKUJMHLG.js.map +1 -0
  255. package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js → comments-DNWHEBOS.js} +9 -9
  256. package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js → comments-RW23R3VE.js} +9 -9
  257. package/dist/cli-bundle/chunks/config-AUM5WBYA.js +1072 -0
  258. package/dist/cli-bundle/chunks/config-AUM5WBYA.js.map +7 -0
  259. package/dist/cli-bundle/chunks/config-OZWSA2NP.js +1062 -0
  260. package/dist/cli-bundle/chunks/config-OZWSA2NP.js.map +1 -0
  261. package/dist/cli-bundle/chunks/{context-B6275WPX.js → context-OYXRGY7S.js} +12 -12
  262. package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js → context-PKCEHQY3.js} +12 -12
  263. package/dist/cli-bundle/chunks/{contracts-HN7ABKLP.js → contracts-L6ODXNUM.js} +320 -199
  264. package/dist/cli-bundle/chunks/contracts-L6ODXNUM.js.map +7 -0
  265. package/dist/cli-bundle/chunks/{contracts-W4FZVVD6.js → contracts-X74F2GSM.js} +321 -200
  266. package/dist/cli-bundle/chunks/contracts-X74F2GSM.js.map +1 -0
  267. package/dist/cli-bundle/chunks/{copy-DEM4DATS.js → copy-6XOR3HKN.js} +5 -5
  268. package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js → copy-I4NCLBR4.js} +5 -5
  269. package/dist/cli-bundle/chunks/{create-RLRJMRTM.js → create-PM45M6PE.js} +12 -12
  270. package/dist/cli-bundle/chunks/create-Z7YCH3BE.js +28 -0
  271. package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js → delete-7YXHYG67.js} +5 -5
  272. package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js → delete-LPISP43T.js} +5 -5
  273. package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js → deps-N2T26FME.js} +5 -5
  274. package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js → deps-WATKQDE3.js} +5 -5
  275. package/dist/cli-bundle/chunks/{docs-GYZNVS26.js → docs-6LQ3GLM7.js} +7 -7
  276. package/dist/cli-bundle/chunks/{docs-26S44RXU.js → docs-Z3X6JZLT.js} +7 -7
  277. package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js → eval-6DCLG52D.js} +10 -10
  278. package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js → eval-Y3ZCUTHK.js} +10 -10
  279. package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js → extension-BNINIMT7.js} +11 -11
  280. package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js → extension-QWE4YYK5.js} +11 -11
  281. package/dist/cli-bundle/chunks/{files-NQHEXUZD.js → files-6SGKHS6O.js} +7 -7
  282. package/dist/cli-bundle/chunks/{files-MBNICQFM.js → files-FUYPSOFJ.js} +7 -7
  283. package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js → focus-2Q3K76G2.js} +6 -6
  284. package/dist/cli-bundle/chunks/{focus-XZW5423D.js → focus-ATLBWXXD.js} +6 -6
  285. package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js → gc-RUYEMNRF.js} +3 -3
  286. package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js → gc-TDWSDR66.js} +3 -3
  287. package/dist/cli-bundle/chunks/{get-A7MAOHCU.js → get-2WGLX74N.js} +120 -80
  288. package/dist/cli-bundle/chunks/get-2WGLX74N.js.map +7 -0
  289. package/dist/cli-bundle/chunks/{get-DSDEKJ3L.js → get-LY6M2JIM.js} +121 -81
  290. package/dist/cli-bundle/chunks/get-LY6M2JIM.js.map +1 -0
  291. package/dist/cli-bundle/chunks/{health-3IPFLKXB.js → health-4RKHYS3T.js} +535 -371
  292. package/dist/cli-bundle/chunks/health-4RKHYS3T.js.map +1 -0
  293. package/dist/cli-bundle/chunks/{health-GZXGBZ36.js → health-TMFVNYRA.js} +534 -370
  294. package/dist/cli-bundle/chunks/health-TMFVNYRA.js.map +7 -0
  295. package/dist/cli-bundle/chunks/history-CGNQJXFE.js +18 -0
  296. package/dist/cli-bundle/chunks/{history-NERDJNUB.js → history-SGRRS72R.js} +8 -8
  297. package/dist/cli-bundle/chunks/{history-compact-2WRZ2WK4.js → history-compact-LOED43R3.js} +213 -134
  298. package/dist/cli-bundle/chunks/history-compact-LOED43R3.js.map +7 -0
  299. package/dist/cli-bundle/chunks/{history-compact-HR7BB4LR.js → history-compact-V5DNAQHH.js} +214 -135
  300. package/dist/cli-bundle/chunks/history-compact-V5DNAQHH.js.map +1 -0
  301. package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js → history-redact-IRL7WJ3E.js} +9 -9
  302. package/dist/cli-bundle/chunks/history-redact-N3JK7VBW.js +19 -0
  303. package/dist/cli-bundle/chunks/{history-repair-XA3LC4GA.js → history-repair-4WVBVHFR.js} +124 -84
  304. package/dist/cli-bundle/chunks/history-repair-4WVBVHFR.js.map +1 -0
  305. package/dist/cli-bundle/chunks/{history-repair-LCMOS45X.js → history-repair-PGYQJMGD.js} +123 -83
  306. package/dist/cli-bundle/chunks/history-repair-PGYQJMGD.js.map +7 -0
  307. package/dist/cli-bundle/chunks/{init-64XDLQJB.js → init-4GESW7RM.js} +12 -12
  308. package/dist/cli-bundle/chunks/init-XIDPABA4.js +22 -0
  309. package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js → learnings-4BHWFFUV.js} +9 -9
  310. package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js → learnings-4FJY7WIW.js} +9 -9
  311. package/dist/cli-bundle/chunks/{list-G5Y65VF6.js → list-472TIOVK.js} +8 -8
  312. package/dist/cli-bundle/chunks/{list-DNBJVO3E.js → list-D7BF5CL2.js} +8 -8
  313. package/dist/cli-bundle/chunks/{next-FYTQF6HG.js → next-D5STGWI2.js} +71 -46
  314. package/dist/cli-bundle/chunks/next-D5STGWI2.js.map +1 -0
  315. package/dist/cli-bundle/chunks/{next-BCERKDUR.js → next-SFQZVX2B.js} +70 -45
  316. package/dist/cli-bundle/chunks/next-SFQZVX2B.js.map +7 -0
  317. package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js → notes-6KNOSLIT.js} +9 -9
  318. package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js → notes-W4UEICGF.js} +9 -9
  319. package/dist/cli-bundle/chunks/{plan-RKZHQVXR.js → plan-JO6V7BXO.js} +373 -279
  320. package/dist/cli-bundle/chunks/plan-JO6V7BXO.js.map +1 -0
  321. package/dist/cli-bundle/chunks/{plan-4WXEQCTN.js → plan-MJQW5XK3.js} +372 -278
  322. package/dist/cli-bundle/chunks/plan-MJQW5XK3.js.map +7 -0
  323. package/dist/cli-bundle/chunks/{profile-4OMM32CD.js → profile-3TOTMUR4.js} +27 -19
  324. package/dist/cli-bundle/chunks/profile-3TOTMUR4.js.map +7 -0
  325. package/dist/cli-bundle/chunks/{profile-QLER5ENE.js → profile-WIQY2KCV.js} +28 -20
  326. package/dist/cli-bundle/chunks/profile-WIQY2KCV.js.map +1 -0
  327. package/dist/cli-bundle/chunks/register-list-query-ELBHCCFI.js +416 -0
  328. package/dist/cli-bundle/chunks/register-list-query-ELBHCCFI.js.map +7 -0
  329. package/dist/cli-bundle/chunks/register-list-query-GAPQ6DM3.js +406 -0
  330. package/dist/cli-bundle/chunks/register-list-query-GAPQ6DM3.js.map +1 -0
  331. package/dist/cli-bundle/chunks/{register-mutation-KK7PHYYU.js → register-mutation-ROFE2YPC.js} +729 -702
  332. package/dist/cli-bundle/chunks/register-mutation-ROFE2YPC.js.map +7 -0
  333. package/dist/cli-bundle/chunks/{register-mutation-ENNDUAZG.js → register-mutation-SJWMVIJ2.js} +730 -703
  334. package/dist/cli-bundle/chunks/register-mutation-SJWMVIJ2.js.map +1 -0
  335. package/dist/cli-bundle/chunks/{register-operations-HZ6XERQG.js → register-operations-IADFVH53.js} +389 -365
  336. package/dist/cli-bundle/chunks/register-operations-IADFVH53.js.map +7 -0
  337. package/dist/cli-bundle/chunks/register-operations-MEKU3AKC.js +510 -0
  338. package/dist/cli-bundle/chunks/register-operations-MEKU3AKC.js.map +1 -0
  339. package/dist/cli-bundle/chunks/{register-setup-ZKJ53RS7.js → register-setup-3QJY43CY.js} +128 -103
  340. package/dist/cli-bundle/chunks/register-setup-3QJY43CY.js.map +7 -0
  341. package/dist/cli-bundle/chunks/{register-setup-P67EMBDJ.js → register-setup-AJWUSSQX.js} +129 -104
  342. package/dist/cli-bundle/chunks/register-setup-AJWUSSQX.js.map +1 -0
  343. package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js → restore-44IHMMZZ.js} +9 -9
  344. package/dist/cli-bundle/chunks/restore-EXHU34EU.js +17 -0
  345. package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js → scheduling-shortcuts-OLHNLAZY.js} +12 -12
  346. package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js → scheduling-shortcuts-TSBK4AY5.js} +12 -12
  347. package/dist/cli-bundle/chunks/{schema-73HR2OJW.js → schema-IB2NZZWD.js} +7 -7
  348. package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js → schema-VBCELP5G.js} +7 -7
  349. package/dist/cli-bundle/chunks/{search-AXPXKZER.js → search-7UBETML4.js} +10 -10
  350. package/dist/cli-bundle/chunks/{search-KILGT37L.js → search-R227JOL6.js} +10 -10
  351. package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js → stats-FAG7COEH.js} +6 -6
  352. package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js → stats-MCK7PLYS.js} +6 -6
  353. package/dist/cli-bundle/chunks/{telemetry-GAHHQTOS.js → telemetry-DRPDZMAO.js} +84 -70
  354. package/dist/cli-bundle/chunks/telemetry-DRPDZMAO.js.map +7 -0
  355. package/dist/cli-bundle/chunks/{telemetry-BZUF6H7G.js → telemetry-GVVUQSJQ.js} +85 -71
  356. package/dist/cli-bundle/chunks/telemetry-GVVUQSJQ.js.map +1 -0
  357. package/dist/cli-bundle/chunks/{test-PWDIZ255.js → test-QY44WAMR.js} +15 -15
  358. package/dist/cli-bundle/chunks/{test-ACD52Z3S.js → test-SY76DZTO.js} +15 -15
  359. package/dist/cli-bundle/chunks/test-all-QD6QAEG7.js +430 -0
  360. package/dist/cli-bundle/chunks/test-all-QD6QAEG7.js.map +7 -0
  361. package/dist/cli-bundle/chunks/test-all-USPJHXFR.js +427 -0
  362. package/dist/cli-bundle/chunks/test-all-USPJHXFR.js.map +1 -0
  363. package/dist/cli-bundle/chunks/{test-runs-UXIXPDKU.js → test-runs-MG5VIGSK.js} +185 -147
  364. package/dist/cli-bundle/chunks/test-runs-MG5VIGSK.js.map +1 -0
  365. package/dist/cli-bundle/chunks/{test-runs-PLRAZEFW.js → test-runs-QIR5MJPL.js} +184 -146
  366. package/dist/cli-bundle/chunks/test-runs-QIR5MJPL.js.map +7 -0
  367. package/dist/cli-bundle/chunks/update-A7EICML6.js +24 -0
  368. package/dist/cli-bundle/chunks/{update-KFX2SIAC.js → update-IKJZWLQC.js} +15 -15
  369. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js → update-many-BEMTDA2X.js} +84 -69
  370. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js.map → update-many-BEMTDA2X.js.map} +1 -1
  371. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js → update-many-RATAARHU.js} +83 -68
  372. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js.map → update-many-RATAARHU.js.map} +2 -2
  373. package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js → upgrade-NWMR3VQL.js} +11 -11
  374. package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js → upgrade-VU46BLJZ.js} +11 -11
  375. package/dist/cli-bundle/chunks/{validate-X5W76YJL.js → validate-GAJ6FUSI.js} +451 -321
  376. package/dist/cli-bundle/chunks/validate-GAJ6FUSI.js.map +1 -0
  377. package/dist/cli-bundle/chunks/{validate-MTUVL5VC.js → validate-NRY6MFXN.js} +450 -320
  378. package/dist/cli-bundle/chunks/validate-NRY6MFXN.js.map +7 -0
  379. package/dist/cli-bundle/main.js +1107 -916
  380. package/dist/cli-bundle/main.js.map +3 -3
  381. package/dist/core/config/nested-settings.js +89 -67
  382. package/dist/core/config/nested-settings.js.map +1 -1
  383. package/dist/core/governance/metadata-coverage.js +20 -28
  384. package/dist/core/governance/metadata-coverage.js.map +1 -1
  385. package/dist/core/history/drift-scan.js +93 -81
  386. package/dist/core/history/drift-scan.js.map +1 -1
  387. package/dist/core/item/item-type-definition.js +14 -14
  388. package/dist/core/item/item-type-definition.js.map +1 -1
  389. package/dist/core/item/type-registry.js +114 -99
  390. package/dist/core/item/type-registry.js.map +1 -1
  391. package/dist/core/output/mutation-projection.js +42 -26
  392. package/dist/core/output/mutation-projection.js.map +1 -1
  393. package/dist/core/schema/runtime-schema.js +97 -80
  394. package/dist/core/schema/runtime-schema.js.map +1 -1
  395. package/dist/core/schema/status-defs-file.js +26 -3
  396. package/dist/core/schema/status-defs-file.js.map +1 -1
  397. package/dist/core/search/corpus.js +25 -19
  398. package/dist/core/search/corpus.js.map +1 -1
  399. package/dist/core/search/semantic-defaults.js +64 -37
  400. package/dist/core/search/semantic-defaults.js.map +1 -1
  401. package/dist/core/search/vector-stores.js +32 -17
  402. package/dist/core/search/vector-stores.js.map +1 -1
  403. package/dist/core/sentry/helpers.js +31 -28
  404. package/dist/core/sentry/helpers.js.map +1 -1
  405. package/dist/core/sentry/instrument.js +54 -43
  406. package/dist/core/sentry/instrument.js.map +1 -1
  407. package/dist/core/shared/memo.d.ts +12 -0
  408. package/dist/core/shared/memo.js +25 -0
  409. package/dist/core/shared/memo.js.map +1 -0
  410. package/dist/core/shared/serialization.js +24 -14
  411. package/dist/core/shared/serialization.js.map +1 -1
  412. package/dist/core/shared/time.js +26 -4
  413. package/dist/core/shared/time.js.map +1 -1
  414. package/dist/core/store/front-matter-cache.d.ts +5 -0
  415. package/dist/core/store/front-matter-cache.js +316 -171
  416. package/dist/core/store/front-matter-cache.js.map +1 -1
  417. package/dist/core/store/item-store.js +33 -26
  418. package/dist/core/store/item-store.js.map +1 -1
  419. package/dist/core/store/settings.js +247 -203
  420. package/dist/core/store/settings.js.map +1 -1
  421. package/dist/core/test/background-runs.js +189 -160
  422. package/dist/core/test/background-runs.js.map +1 -1
  423. package/dist/sdk/cli-contracts/flag-contracts.js +71 -99
  424. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  425. package/dist/sdk/compose.js +51 -42
  426. package/dist/sdk/compose.js.map +1 -1
  427. package/docs/AGENT_GUIDE.md +2 -2
  428. package/docs/ARCHITECTURE.md +2 -2
  429. package/docs/COMMANDS.md +8 -4
  430. package/docs/CONFIGURATION.md +1 -1
  431. package/docs/EXTENSIONS.md +12 -12
  432. package/docs/ONBOARDING.md +4 -2
  433. package/docs/README.md +2 -0
  434. package/docs/examples/starter-extension/README.md +11 -10
  435. package/marketplace.json +3 -3
  436. package/package.json +2 -2
  437. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  438. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  439. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  440. package/plugins/pm-claude/.claude-plugin/plugin.json +2 -2
  441. package/plugins/pm-claude/README.md +6 -3
  442. package/plugins/pm-claude/commands/pm-init.md +1 -1
  443. package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +0 -16
  444. package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +0 -1
  445. package/dist/cli-bundle/chunks/chunk-22WKIL3H.js.map +0 -1
  446. package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +0 -1
  447. package/dist/cli-bundle/chunks/chunk-3J6JRJ3I.js.map +0 -7
  448. package/dist/cli-bundle/chunks/chunk-3K2M5OYU.js.map +0 -7
  449. package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +0 -7
  450. package/dist/cli-bundle/chunks/chunk-3VGN2UWE.js.map +0 -1
  451. package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +0 -1
  452. package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +0 -1
  453. package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +0 -7
  454. package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +0 -1
  455. package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +0 -1
  456. package/dist/cli-bundle/chunks/chunk-AXIDKKAT.js.map +0 -1
  457. package/dist/cli-bundle/chunks/chunk-BDTISOSD.js.map +0 -7
  458. package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +0 -7
  459. package/dist/cli-bundle/chunks/chunk-CF7RL6FR.js.map +0 -1
  460. package/dist/cli-bundle/chunks/chunk-CWFNTKQJ.js.map +0 -1
  461. package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +0 -1
  462. package/dist/cli-bundle/chunks/chunk-HXTQJXWT.js.map +0 -1
  463. package/dist/cli-bundle/chunks/chunk-IPYBJWTE.js.map +0 -7
  464. package/dist/cli-bundle/chunks/chunk-IZBR4NRW.js.map +0 -7
  465. package/dist/cli-bundle/chunks/chunk-JLM7BHI7.js.map +0 -7
  466. package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +0 -1
  467. package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +0 -1
  468. package/dist/cli-bundle/chunks/chunk-KNPEF7QG.js.map +0 -7
  469. package/dist/cli-bundle/chunks/chunk-MDPEOIGN.js.map +0 -7
  470. package/dist/cli-bundle/chunks/chunk-NFDPYAIP.js.map +0 -7
  471. package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +0 -7
  472. package/dist/cli-bundle/chunks/chunk-NWMZWYYB.js.map +0 -1
  473. package/dist/cli-bundle/chunks/chunk-OTUHB4HS.js.map +0 -1
  474. package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +0 -7
  475. package/dist/cli-bundle/chunks/chunk-RLDHZHQS.js.map +0 -1
  476. package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +0 -7
  477. package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +0 -7
  478. package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +0 -1
  479. package/dist/cli-bundle/chunks/chunk-V3NOKJF2.js.map +0 -1
  480. package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +0 -7
  481. package/dist/cli-bundle/chunks/chunk-WYDHYJPO.js.map +0 -7
  482. package/dist/cli-bundle/chunks/chunk-YITK2PJ6.js.map +0 -7
  483. package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +0 -1
  484. package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +0 -14
  485. package/dist/cli-bundle/chunks/close-many-BG5QQIDQ.js.map +0 -7
  486. package/dist/cli-bundle/chunks/close-many-LDRVEQY2.js.map +0 -1
  487. package/dist/cli-bundle/chunks/config-DMSU64QO.js +0 -1541
  488. package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +0 -7
  489. package/dist/cli-bundle/chunks/config-QH2DICD6.js +0 -1531
  490. package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +0 -1
  491. package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +0 -7
  492. package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +0 -1
  493. package/dist/cli-bundle/chunks/create-OH3BDGBB.js +0 -28
  494. package/dist/cli-bundle/chunks/get-A7MAOHCU.js.map +0 -7
  495. package/dist/cli-bundle/chunks/get-DSDEKJ3L.js.map +0 -1
  496. package/dist/cli-bundle/chunks/health-3IPFLKXB.js.map +0 -1
  497. package/dist/cli-bundle/chunks/health-GZXGBZ36.js.map +0 -7
  498. package/dist/cli-bundle/chunks/history-WSZHY3PN.js +0 -18
  499. package/dist/cli-bundle/chunks/history-compact-2WRZ2WK4.js.map +0 -7
  500. package/dist/cli-bundle/chunks/history-compact-HR7BB4LR.js.map +0 -1
  501. package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +0 -19
  502. package/dist/cli-bundle/chunks/history-repair-LCMOS45X.js.map +0 -7
  503. package/dist/cli-bundle/chunks/history-repair-XA3LC4GA.js.map +0 -1
  504. package/dist/cli-bundle/chunks/init-PAX32BJA.js +0 -22
  505. package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +0 -7
  506. package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +0 -1
  507. package/dist/cli-bundle/chunks/plan-4WXEQCTN.js.map +0 -7
  508. package/dist/cli-bundle/chunks/plan-RKZHQVXR.js.map +0 -1
  509. package/dist/cli-bundle/chunks/profile-4OMM32CD.js.map +0 -7
  510. package/dist/cli-bundle/chunks/profile-QLER5ENE.js.map +0 -1
  511. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js +0 -400
  512. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +0 -1
  513. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js +0 -410
  514. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +0 -7
  515. package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +0 -1
  516. package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +0 -7
  517. package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js +0 -486
  518. package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js.map +0 -1
  519. package/dist/cli-bundle/chunks/register-operations-HZ6XERQG.js.map +0 -7
  520. package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +0 -1
  521. package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +0 -7
  522. package/dist/cli-bundle/chunks/restore-YALDGTQR.js +0 -17
  523. package/dist/cli-bundle/chunks/telemetry-BZUF6H7G.js.map +0 -1
  524. package/dist/cli-bundle/chunks/telemetry-GAHHQTOS.js.map +0 -7
  525. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js +0 -358
  526. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js.map +0 -1
  527. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js +0 -361
  528. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js.map +0 -7
  529. package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +0 -7
  530. package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +0 -1
  531. package/dist/cli-bundle/chunks/update-AMRSOIWP.js +0 -24
  532. package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +0 -7
  533. package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +0 -1
  534. /package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js.map → activity-5YWLSPGE.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{activity-AW6XVFH6.js.map → activity-BIML7K2D.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{append-LOVPGVPT.js.map → append-EZESUVJT.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{append-QCFJSDFL.js.map → append-JFG4WQMG.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js.map → chunk-3W2HJKJX.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js.map → chunk-4PFVUUYV.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js.map → chunk-5E7N4T2Z.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js.map → chunk-5IZUBZBR.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js.map → chunk-5JIWFWOZ.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js.map → chunk-6CDCWKSX.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js.map → chunk-6NYJGMTY.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js.map → chunk-7CLLC75T.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-2466X6E4.js.map → chunk-7LYO6S5A.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js.map → chunk-A3OQ7TFW.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js.map → chunk-ER4ME5U2.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js.map → chunk-ERG65A2L.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js.map → chunk-FH2H3CBD.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-JPECA746.js.map → chunk-FUFFPIYA.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js.map → chunk-GUYNUXQT.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js.map → chunk-GVJE5T7Q.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js.map → chunk-JBZ2NTKX.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js.map → chunk-KEZOIPCR.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js.map → chunk-MDHWWBNZ.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js.map → chunk-MEZZZBYX.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js.map → chunk-NZ7QIUP5.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js.map → chunk-P5L7Z2O6.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js.map → chunk-SU2E4AWU.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js.map → chunk-SU3TB4NS.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js.map → chunk-T4XBKJ3F.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js.map → chunk-U5TR4N7J.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js.map → chunk-UMNQZS4H.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js.map → chunk-WJA3PXW7.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js.map → chunk-YSDFIY7N.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js.map → chunk-YSGTMDWC.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js.map → chunk-Z5F6XZXE.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js.map → chunk-Z7RPDF2Y.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js.map → claim-2BGBGSVI.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js.map → claim-5GU7OE67.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{close-E6ZZGCJY.js.map → close-6YODBUIV.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{close-TQYAAFJP.js.map → close-AFVKPR57.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js.map → comments-DNWHEBOS.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js.map → comments-RW23R3VE.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{context-B6275WPX.js.map → context-OYXRGY7S.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js.map → context-PKCEHQY3.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{copy-DEM4DATS.js.map → copy-6XOR3HKN.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js.map → copy-I4NCLBR4.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{create-RLRJMRTM.js.map → create-PM45M6PE.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{create-OH3BDGBB.js.map → create-Z7YCH3BE.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js.map → delete-7YXHYG67.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js.map → delete-LPISP43T.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js.map → deps-N2T26FME.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js.map → deps-WATKQDE3.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{docs-GYZNVS26.js.map → docs-6LQ3GLM7.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{docs-26S44RXU.js.map → docs-Z3X6JZLT.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js.map → eval-6DCLG52D.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js.map → eval-Y3ZCUTHK.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js.map → extension-BNINIMT7.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js.map → extension-QWE4YYK5.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{files-NQHEXUZD.js.map → files-6SGKHS6O.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{files-MBNICQFM.js.map → files-FUYPSOFJ.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js.map → focus-2Q3K76G2.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{focus-XZW5423D.js.map → focus-ATLBWXXD.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js.map → gc-RUYEMNRF.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js.map → gc-TDWSDR66.js.map} +0 -0
  598. /package/dist/cli-bundle/chunks/{history-WSZHY3PN.js.map → history-CGNQJXFE.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{history-NERDJNUB.js.map → history-SGRRS72R.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js.map → history-redact-IRL7WJ3E.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{history-redact-MP6CH7U5.js.map → history-redact-N3JK7VBW.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{init-64XDLQJB.js.map → init-4GESW7RM.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{init-PAX32BJA.js.map → init-XIDPABA4.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js.map → learnings-4BHWFFUV.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js.map → learnings-4FJY7WIW.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{list-G5Y65VF6.js.map → list-472TIOVK.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{list-DNBJVO3E.js.map → list-D7BF5CL2.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js.map → notes-6KNOSLIT.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js.map → notes-W4UEICGF.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js.map → restore-44IHMMZZ.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{restore-YALDGTQR.js.map → restore-EXHU34EU.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js.map → scheduling-shortcuts-OLHNLAZY.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js.map → scheduling-shortcuts-TSBK4AY5.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{schema-73HR2OJW.js.map → schema-IB2NZZWD.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js.map → schema-VBCELP5G.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{search-AXPXKZER.js.map → search-7UBETML4.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{search-KILGT37L.js.map → search-R227JOL6.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js.map → stats-FAG7COEH.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js.map → stats-MCK7PLYS.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{test-PWDIZ255.js.map → test-QY44WAMR.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{test-ACD52Z3S.js.map → test-SY76DZTO.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{update-AMRSOIWP.js.map → update-A7EICML6.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{update-KFX2SIAC.js.map → update-IKJZWLQC.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js.map → upgrade-NWMR3VQL.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js.map → upgrade-VU46BLJZ.js.map} +0 -0
@@ -1,5 +1,5 @@
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]="a2588018-8995-5c3e-b957-a7afc236729b")}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]="4f00aa88-9fd7-5416-a1a3-4df09dba7e93")}catch(e){}}();
3
3
  import {
4
4
  LINKED_TEST_PM_CONTEXT_MODE_VALUES,
5
5
  LINKED_TEST_PROTECTED_ENV_KEYS,
@@ -15,24 +15,24 @@ import {
15
15
  parseLinkedTestMinLines,
16
16
  parseLinkedTestRegexList,
17
17
  parseLinkedTestStringList
18
- } from "./chunk-EJUDVUYZ.js";
18
+ } from "./chunk-KEZOIPCR.js";
19
19
  import {
20
20
  createStdinTokenResolver,
21
21
  parseCsvKv,
22
22
  parseOptionalNumber
23
- } from "./chunk-ZRP4VG5U.js";
23
+ } from "./chunk-JBZ2NTKX.js";
24
24
  import {
25
25
  runInit
26
- } from "./chunk-V3NOKJF2.js";
26
+ } from "./chunk-MHRS5FUX.js";
27
27
  import {
28
28
  locateItem,
29
29
  mutateItem,
30
30
  readLocatedItem
31
- } from "./chunk-JSU5P7VS.js";
31
+ } from "./chunk-4WB6S4YX.js";
32
32
  import {
33
33
  compareTimestampStrings,
34
34
  nowIso
35
- } from "./chunk-AXIDKKAT.js";
35
+ } from "./chunk-CXR3CMBQ.js";
36
36
  import {
37
37
  EXIT_CODE,
38
38
  ITEM_FILE_EXTENSIONS,
@@ -46,7 +46,7 @@ import {
46
46
  resolveItemTypeRegistry,
47
47
  resolvePmRoot,
48
48
  stableValueEquals
49
- } from "./chunk-7R4QEMZZ.js";
49
+ } from "./chunk-L4SLHV6G.js";
50
50
 
51
51
  // dist/cli/commands/test.js
52
52
  import { spawn } from "node:child_process";
@@ -1472,300 +1472,343 @@ ${stderr}`;
1472
1472
  }
1473
1473
  return null;
1474
1474
  }
1475
+ function createLinkedTestSandboxLayout(sandboxRoot) {
1476
+ return {
1477
+ root: sandboxRoot,
1478
+ schemaProjectPmPath: path.join(sandboxRoot, "schema", "project", ".agents", "pm"),
1479
+ schemaGlobalPmPath: path.join(sandboxRoot, "schema", "global"),
1480
+ trackerProjectPmPath: path.join(sandboxRoot, "tracker", "project", ".agents", "pm"),
1481
+ trackerGlobalPmPath: path.join(sandboxRoot, "tracker", "global")
1482
+ };
1483
+ }
1484
+ async function initializeLinkedTestSandboxes(layout) {
1485
+ await runInit(void 0, { path: layout.schemaProjectPmPath });
1486
+ await runInit(void 0, { path: layout.schemaGlobalPmPath });
1487
+ await runInit(void 0, { path: layout.trackerProjectPmPath });
1488
+ await runInit(void 0, { path: layout.trackerGlobalPmPath });
1489
+ }
1490
+ async function seedLinkedTestSandboxesFromSource(layout, sourceRoots) {
1491
+ if (!sourceRoots) {
1492
+ return;
1493
+ }
1494
+ await seedLinkedTestSandbox(layout.schemaProjectPmPath, layout.schemaGlobalPmPath, sourceRoots);
1495
+ await seedLinkedTestSandbox(layout.trackerProjectPmPath, layout.trackerGlobalPmPath, sourceRoots);
1496
+ await seedLinkedTestTrackerData(sourceRoots.projectPmRoot, layout.trackerProjectPmPath);
1497
+ await seedLinkedTestTrackerData(sourceRoots.globalPmRoot, layout.trackerGlobalPmPath);
1498
+ }
1499
+ async function countLinkedTestSandboxItems(layout, sourceRoots) {
1500
+ return {
1501
+ sourceProjectItemCount: sourceRoots ? await countLinkedTestItemFiles(sourceRoots.projectPmRoot) : 0,
1502
+ sourceGlobalItemCount: sourceRoots ? await countLinkedTestItemFiles(sourceRoots.globalPmRoot) : 0,
1503
+ schemaProjectItemCount: await countLinkedTestItemFiles(layout.schemaProjectPmPath),
1504
+ schemaGlobalItemCount: await countLinkedTestItemFiles(layout.schemaGlobalPmPath),
1505
+ trackerProjectItemCount: await countLinkedTestItemFiles(layout.trackerProjectPmPath),
1506
+ trackerGlobalItemCount: await countLinkedTestItemFiles(layout.trackerGlobalPmPath)
1507
+ };
1508
+ }
1509
+ function buildLinkedTestExecutionContext(params) {
1510
+ const trackerMode = params.effectivePmContextMode === "tracker";
1511
+ const selectedSandboxProjectPmPath = trackerMode ? params.layout.trackerProjectPmPath : params.layout.schemaProjectPmPath;
1512
+ const selectedSandboxGlobalPmPath = trackerMode ? params.layout.trackerGlobalPmPath : params.layout.schemaGlobalPmPath;
1513
+ const selectedSandboxProjectItemCount = trackerMode ? params.counts.trackerProjectItemCount : params.counts.schemaProjectItemCount;
1514
+ const selectedSandboxGlobalItemCount = trackerMode ? params.counts.trackerGlobalItemCount : params.counts.schemaGlobalItemCount;
1515
+ return {
1516
+ requested_pm_context_mode: params.requestedPmContextMode,
1517
+ pm_context_mode: params.effectivePmContextMode,
1518
+ auto_pm_context_applied: params.autoPmContextApplied,
1519
+ is_pm_command: params.isPmCommand,
1520
+ is_pm_tracker_read_command: params.isPmTrackerReadCommand,
1521
+ source_project_pm_path: params.sourceRoots?.projectPmRoot ?? "",
1522
+ sandbox_project_pm_path: selectedSandboxProjectPmPath,
1523
+ source_global_pm_path: params.sourceRoots?.globalPmRoot ?? "",
1524
+ sandbox_global_pm_path: selectedSandboxGlobalPmPath,
1525
+ source_project_item_count: params.counts.sourceProjectItemCount,
1526
+ sandbox_project_item_count: selectedSandboxProjectItemCount,
1527
+ source_global_item_count: params.counts.sourceGlobalItemCount,
1528
+ sandbox_global_item_count: selectedSandboxGlobalItemCount,
1529
+ mismatch_detected: params.isPmCommand && params.counts.sourceProjectItemCount !== selectedSandboxProjectItemCount,
1530
+ project_extensions_seeded: Boolean(params.sourceRoots),
1531
+ global_extensions_seeded: Boolean(params.sourceRoots)
1532
+ };
1533
+ }
1534
+ function resolveLinkedTestCommandContext(params) {
1535
+ 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;
1536
+ const command = typeof params.linkedTest.command === "string" && params.linkedTest.command.length > 0 ? params.linkedTest.command : void 0;
1537
+ const isPmCommand = command ? commandInvokesPmCli(command) : false;
1538
+ const isPmTrackerReadCommand = isPmCommand && command ? commandInvokesPmTrackerReadCommand(command) : false;
1539
+ const autoPmContextApplied = params.options?.autoPmContext === true && isPmTrackerReadCommand;
1540
+ const requestedPmContextMode = autoPmContextApplied ? "auto" : resolveLinkedTestRequestedContextMode(params.linkedTest, params.runLevelPmContextMode, params.options?.overrideLinkedPmContext === true);
1541
+ const effectivePmContextMode = resolveLinkedTestEffectiveContextMode(requestedPmContextMode, isPmTrackerReadCommand);
1542
+ return {
1543
+ linkedOverridePmContextMode,
1544
+ executionContext: buildLinkedTestExecutionContext({
1545
+ layout: params.layout,
1546
+ counts: params.counts,
1547
+ sourceRoots: params.sourceRoots,
1548
+ isPmCommand,
1549
+ isPmTrackerReadCommand,
1550
+ requestedPmContextMode,
1551
+ effectivePmContextMode,
1552
+ autoPmContextApplied
1553
+ })
1554
+ };
1555
+ }
1556
+ function buildLinkedTestSkippedResult(linkedTest, executionContext, error) {
1557
+ return {
1558
+ command: linkedTest.command,
1559
+ path: linkedTest.path,
1560
+ status: "skipped",
1561
+ execution_context: executionContext,
1562
+ error
1563
+ };
1564
+ }
1565
+ function buildLinkedTestAssertionFailureResult(linkedTest, executionContext, error, output) {
1566
+ return {
1567
+ command: linkedTest.command,
1568
+ path: linkedTest.path,
1569
+ status: "failed",
1570
+ exit_code: 1,
1571
+ failure_category: "assertion_failure",
1572
+ execution_context: executionContext,
1573
+ ...output ? { stdout: output.stdout, stderr: output.stderr } : {},
1574
+ error
1575
+ };
1576
+ }
1577
+ function resolveLinkedTestPreflightResult(params) {
1578
+ if (!params.linkedTest.command) {
1579
+ return buildLinkedTestSkippedResult(params.linkedTest, params.executionContext, "No command configured for this linked test.");
1580
+ }
1581
+ const runtimeSafetySkipReason = getRuntimeSafetySkipReason(params.linkedTest.command);
1582
+ if (runtimeSafetySkipReason) {
1583
+ return buildLinkedTestSkippedResult(params.linkedTest, params.executionContext, runtimeSafetySkipReason);
1584
+ }
1585
+ const failOnMismatchByDefault = params.executionContext.pm_context_mode === "schema" && params.executionContext.is_pm_tracker_read_command && params.executionContext.mismatch_detected;
1586
+ const failOnMismatchByFlag = params.options?.failOnContextMismatch === true && params.executionContext.is_pm_command && params.executionContext.mismatch_detected;
1587
+ if (failOnMismatchByDefault || failOnMismatchByFlag) {
1588
+ const mismatchHint = buildPmContextMismatchHint({
1589
+ executionContext: params.executionContext,
1590
+ runLevelPmContextMode: params.runLevelPmContextMode,
1591
+ linkedOverridePmContextMode: params.linkedOverridePmContextMode
1592
+ });
1593
+ const mismatchPrefix = params.options?.checkContext === true ? "Linked test preflight PM context mismatch detected" : "Linked test PM context mismatch detected";
1594
+ 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}`);
1595
+ }
1596
+ if (params.options?.requireAssertionsForPm === true && params.executionContext.is_pm_command && !hasLinkedTestAssertions(params.linkedTest)) {
1597
+ return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, "Linked PM command requires assertions when --require-assertions-for-pm is enabled.");
1598
+ }
1599
+ return null;
1600
+ }
1601
+ function buildLinkedTestExecutionEnv(params) {
1602
+ const effectiveDirectives = resolveEffectiveLinkedTestDirectives(params.runtimeDirectives, params.linkedTest);
1603
+ const executionEnv = { ...process.env };
1604
+ applyEnvDirectiveStage(executionEnv, params.runtimeDirectives);
1605
+ applyEnvDirectiveStage(executionEnv, {
1606
+ env_set: params.linkedTest.env_set ?? {},
1607
+ env_clear: params.linkedTest.env_clear ?? []
1608
+ });
1609
+ if (effectiveDirectives.shared_host_safe) {
1610
+ applySharedHostSafeDefaults(executionEnv);
1611
+ }
1612
+ executionEnv.FORCE_COLOR = "0";
1613
+ executionEnv.PM_PATH = params.executionContext.sandbox_project_pm_path;
1614
+ executionEnv.PM_GLOBAL_PATH = params.executionContext.sandbox_global_pm_path;
1615
+ return executionEnv;
1616
+ }
1617
+ function buildLinkedTestPassedResult(linkedTest, executionContext, execution) {
1618
+ return {
1619
+ command: linkedTest.command,
1620
+ path: linkedTest.path,
1621
+ status: "passed",
1622
+ exit_code: 0,
1623
+ execution_context: executionContext,
1624
+ stdout: execution.stdout,
1625
+ stderr: execution.stderr
1626
+ };
1627
+ }
1628
+ function buildLinkedTestEmptyRunResult(params) {
1629
+ return {
1630
+ command: params.linkedTest.command,
1631
+ path: params.linkedTest.path,
1632
+ status: "failed",
1633
+ exit_code: 1,
1634
+ failure_category: "empty_run",
1635
+ execution_context: params.executionContext,
1636
+ stdout: params.execution.stdout,
1637
+ stderr: params.execution.stderr,
1638
+ 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.`
1639
+ };
1640
+ }
1641
+ function buildLinkedTestCommandFailureResult(params) {
1642
+ return {
1643
+ command: params.linkedTest.command,
1644
+ path: params.linkedTest.path,
1645
+ status: "failed",
1646
+ exit_code: resolveLinkedTestFailureExitCode(params.execution),
1647
+ failure_category: classifyLinkedTestFailure(params.execution),
1648
+ execution_context: params.executionContext,
1649
+ stdout: params.execution.stdout,
1650
+ stderr: params.execution.stderr,
1651
+ error: formatLinkedTestExecutionError(params.execution, params.timeoutMs)
1652
+ };
1653
+ }
1654
+ function buildLinkedTestPassedExecutionResult(params) {
1655
+ if (params.options?.failOnEmptyTestRun === true) {
1656
+ const emptyRunSignal = detectEmptyLinkedTestRun(params.execution.stdout, params.execution.stderr);
1657
+ if (emptyRunSignal) {
1658
+ return buildLinkedTestEmptyRunResult({ ...params, emptyRunSignal });
1659
+ }
1660
+ }
1661
+ const assertionFailures = evaluateLinkedTestAssertions(params.linkedTest, params.execution.stdout, params.execution.stderr);
1662
+ if (assertionFailures.length > 0) {
1663
+ return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, `Linked test assertion(s) failed: ${assertionFailures.join("; ")}`, params.execution);
1664
+ }
1665
+ return buildLinkedTestPassedResult(params.linkedTest, params.executionContext, params.execution);
1666
+ }
1667
+ async function runSingleLinkedTest(params) {
1668
+ const command = params.linkedTest.command ?? "";
1669
+ const timeoutMs = (params.linkedTest.timeout_seconds ?? params.defaultTimeoutSeconds ?? 120) * 1e3;
1670
+ const execution = await runLinkedTestCommand(command, timeoutMs, buildLinkedTestExecutionEnv(params), {
1671
+ index: params.index + 1,
1672
+ total: params.total,
1673
+ timeoutMs,
1674
+ command
1675
+ }, params.progressMode);
1676
+ const passed = execution.exitCode === 0 && !execution.timedOut && !execution.maxBufferExceeded;
1677
+ return passed ? buildLinkedTestPassedExecutionResult({ ...params, execution }) : buildLinkedTestCommandFailureResult({ ...params, execution, timeoutMs });
1678
+ }
1475
1679
  async function runLinkedTests(tests, defaultTimeoutSeconds, options) {
1476
1680
  const results = [];
1477
1681
  const sandboxRoot = await mkdtemp(path.join(tmpdir(), "pm-linked-test-"));
1478
- const schemaSandboxPmPath = path.join(sandboxRoot, "schema", "project", ".agents", "pm");
1479
- const schemaSandboxGlobalPath = path.join(sandboxRoot, "schema", "global");
1480
- const trackerSandboxPmPath = path.join(sandboxRoot, "tracker", "project", ".agents", "pm");
1481
- const trackerSandboxGlobalPath = path.join(sandboxRoot, "tracker", "global");
1682
+ const layout = createLinkedTestSandboxLayout(sandboxRoot);
1482
1683
  const runLevelPmContextMode = parsePmContextMode(options?.pmContext);
1483
1684
  const progressMode = options?.progress === true ? "always" : "auto";
1484
1685
  const runtimeDirectives = resolveRuntimeDirectives(options?.envSet, options?.envClear, options?.sharedHostSafe);
1485
- let sourceProjectItemCount = 0;
1486
- let sourceGlobalItemCount = 0;
1487
- let schemaSandboxProjectItemCount = 0;
1488
- let schemaSandboxGlobalItemCount = 0;
1489
- let trackerSandboxProjectItemCount = 0;
1490
- let trackerSandboxGlobalItemCount = 0;
1491
1686
  const sourceRoots = options?.sourceRoots;
1492
- const projectExtensionsSeeded = Boolean(sourceRoots);
1493
- const globalExtensionsSeeded = Boolean(sourceRoots);
1494
1687
  try {
1495
- await runInit(void 0, { path: schemaSandboxPmPath });
1496
- await runInit(void 0, { path: schemaSandboxGlobalPath });
1497
- await runInit(void 0, { path: trackerSandboxPmPath });
1498
- await runInit(void 0, { path: trackerSandboxGlobalPath });
1499
- if (sourceRoots) {
1500
- await seedLinkedTestSandbox(schemaSandboxPmPath, schemaSandboxGlobalPath, sourceRoots);
1501
- await seedLinkedTestSandbox(trackerSandboxPmPath, trackerSandboxGlobalPath, sourceRoots);
1502
- await seedLinkedTestTrackerData(sourceRoots.projectPmRoot, trackerSandboxPmPath);
1503
- await seedLinkedTestTrackerData(sourceRoots.globalPmRoot, trackerSandboxGlobalPath);
1504
- sourceProjectItemCount = await countLinkedTestItemFiles(sourceRoots.projectPmRoot);
1505
- sourceGlobalItemCount = await countLinkedTestItemFiles(sourceRoots.globalPmRoot);
1506
- }
1507
- schemaSandboxProjectItemCount = await countLinkedTestItemFiles(schemaSandboxPmPath);
1508
- schemaSandboxGlobalItemCount = await countLinkedTestItemFiles(schemaSandboxGlobalPath);
1509
- trackerSandboxProjectItemCount = await countLinkedTestItemFiles(trackerSandboxPmPath);
1510
- trackerSandboxGlobalItemCount = await countLinkedTestItemFiles(trackerSandboxGlobalPath);
1511
- const buildExecutionContext = (isPmCommand, isPmTrackerReadCommand, requestedPmContextMode, effectivePmContextMode, autoPmContextApplied) => {
1512
- const selectedSandboxProjectPmPath = effectivePmContextMode === "tracker" ? trackerSandboxPmPath : schemaSandboxPmPath;
1513
- const selectedSandboxGlobalPmPath = effectivePmContextMode === "tracker" ? trackerSandboxGlobalPath : schemaSandboxGlobalPath;
1514
- const selectedSandboxProjectItemCount = effectivePmContextMode === "tracker" ? trackerSandboxProjectItemCount : schemaSandboxProjectItemCount;
1515
- const selectedSandboxGlobalItemCount = effectivePmContextMode === "tracker" ? trackerSandboxGlobalItemCount : schemaSandboxGlobalItemCount;
1516
- const mismatchDetected = isPmCommand && sourceProjectItemCount !== selectedSandboxProjectItemCount;
1517
- return {
1518
- requested_pm_context_mode: requestedPmContextMode,
1519
- pm_context_mode: effectivePmContextMode,
1520
- auto_pm_context_applied: autoPmContextApplied,
1521
- is_pm_command: isPmCommand,
1522
- is_pm_tracker_read_command: isPmTrackerReadCommand,
1523
- source_project_pm_path: sourceRoots?.projectPmRoot ?? "",
1524
- sandbox_project_pm_path: selectedSandboxProjectPmPath,
1525
- source_global_pm_path: sourceRoots?.globalPmRoot ?? "",
1526
- sandbox_global_pm_path: selectedSandboxGlobalPmPath,
1527
- source_project_item_count: sourceProjectItemCount,
1528
- sandbox_project_item_count: selectedSandboxProjectItemCount,
1529
- source_global_item_count: sourceGlobalItemCount,
1530
- sandbox_global_item_count: selectedSandboxGlobalItemCount,
1531
- mismatch_detected: mismatchDetected,
1532
- project_extensions_seeded: projectExtensionsSeeded,
1533
- global_extensions_seeded: globalExtensionsSeeded
1534
- };
1535
- };
1688
+ await initializeLinkedTestSandboxes(layout);
1689
+ await seedLinkedTestSandboxesFromSource(layout, sourceRoots);
1690
+ const counts = await countLinkedTestSandboxItems(layout, sourceRoots);
1536
1691
  for (let index = 0; index < tests.length; index += 1) {
1537
1692
  const linkedTest = tests[index];
1538
- const linkedOverridePmContextMode = typeof linkedTest.pm_context_mode === "string" && linkedTest.pm_context_mode.trim().length > 0 ? parsePmContextMode(linkedTest.pm_context_mode) : void 0;
1539
- const isPmCommand = typeof linkedTest.command === "string" && linkedTest.command.length > 0 ? commandInvokesPmCli(linkedTest.command) : false;
1540
- const isPmTrackerReadCommand = isPmCommand && typeof linkedTest.command === "string" && linkedTest.command.length > 0 ? commandInvokesPmTrackerReadCommand(linkedTest.command) : false;
1541
- const autoPmContextApplied = options?.autoPmContext === true && isPmTrackerReadCommand;
1542
- const requestedPmContextMode = autoPmContextApplied ? "auto" : resolveLinkedTestRequestedContextMode(linkedTest, runLevelPmContextMode, options?.overrideLinkedPmContext === true);
1543
- const effectivePmContextMode = resolveLinkedTestEffectiveContextMode(requestedPmContextMode, isPmTrackerReadCommand);
1544
- const executionContext = buildExecutionContext(isPmCommand, isPmTrackerReadCommand, requestedPmContextMode, effectivePmContextMode, autoPmContextApplied);
1545
- if (!linkedTest.command) {
1546
- results.push({
1547
- command: linkedTest.command,
1548
- path: linkedTest.path,
1549
- status: "skipped",
1550
- execution_context: executionContext,
1551
- error: "No command configured for this linked test."
1552
- });
1553
- continue;
1554
- }
1555
- const runtimeSafetySkipReason = getRuntimeSafetySkipReason(linkedTest.command);
1556
- if (runtimeSafetySkipReason) {
1557
- results.push({
1558
- command: linkedTest.command,
1559
- path: linkedTest.path,
1560
- status: "skipped",
1561
- execution_context: executionContext,
1562
- error: runtimeSafetySkipReason
1563
- });
1564
- continue;
1565
- }
1566
- const failOnMismatchByDefault = executionContext.pm_context_mode === "schema" && executionContext.is_pm_tracker_read_command && executionContext.mismatch_detected;
1567
- const failOnMismatchByFlag = options?.failOnContextMismatch === true && executionContext.is_pm_command && executionContext.mismatch_detected;
1568
- if (failOnMismatchByDefault || failOnMismatchByFlag) {
1569
- const mismatchHint = buildPmContextMismatchHint({
1570
- executionContext,
1571
- runLevelPmContextMode,
1572
- linkedOverridePmContextMode
1573
- });
1574
- const mismatchPrefix = options?.checkContext === true ? "Linked test preflight PM context mismatch detected" : "Linked test PM context mismatch detected";
1575
- results.push({
1576
- command: linkedTest.command,
1577
- path: linkedTest.path,
1578
- status: "failed",
1579
- exit_code: 1,
1580
- failure_category: "assertion_failure",
1581
- execution_context: executionContext,
1582
- error: `${mismatchPrefix} (source_project_items=${executionContext.source_project_item_count}, sandbox_project_items=${executionContext.sandbox_project_item_count}).${mismatchHint}`
1583
- });
1584
- continue;
1585
- }
1586
- if (options?.requireAssertionsForPm === true && executionContext.is_pm_command && !hasLinkedTestAssertions(linkedTest)) {
1587
- results.push({
1588
- command: linkedTest.command,
1589
- path: linkedTest.path,
1590
- status: "failed",
1591
- exit_code: 1,
1592
- failure_category: "assertion_failure",
1593
- execution_context: executionContext,
1594
- error: "Linked PM command requires assertions when --require-assertions-for-pm is enabled."
1595
- });
1596
- continue;
1597
- }
1598
- const timeoutMs = (linkedTest.timeout_seconds ?? defaultTimeoutSeconds ?? 120) * 1e3;
1599
- const effectiveDirectives = resolveEffectiveLinkedTestDirectives(runtimeDirectives, linkedTest);
1600
- const executionEnv = { ...process.env };
1601
- applyEnvDirectiveStage(executionEnv, runtimeDirectives);
1602
- applyEnvDirectiveStage(executionEnv, {
1603
- env_set: linkedTest.env_set ?? {},
1604
- env_clear: linkedTest.env_clear ?? []
1693
+ const commandContext = resolveLinkedTestCommandContext({
1694
+ linkedTest,
1695
+ layout,
1696
+ counts,
1697
+ sourceRoots,
1698
+ runLevelPmContextMode,
1699
+ options
1605
1700
  });
1606
- if (effectiveDirectives.shared_host_safe) {
1607
- applySharedHostSafeDefaults(executionEnv);
1608
- }
1609
- executionEnv.FORCE_COLOR = "0";
1610
- executionEnv.PM_PATH = executionContext.sandbox_project_pm_path;
1611
- executionEnv.PM_GLOBAL_PATH = executionContext.sandbox_global_pm_path;
1612
- const execution = await runLinkedTestCommand(linkedTest.command, timeoutMs, executionEnv, {
1613
- index: index + 1,
1614
- total: tests.length,
1615
- timeoutMs,
1616
- command: linkedTest.command
1617
- }, progressMode);
1618
- const passed = execution.exitCode === 0 && !execution.timedOut && !execution.maxBufferExceeded;
1619
- if (passed) {
1620
- if (options?.failOnEmptyTestRun === true) {
1621
- const emptyRunSignal = detectEmptyLinkedTestRun(execution.stdout, execution.stderr);
1622
- if (emptyRunSignal) {
1623
- results.push({
1624
- command: linkedTest.command,
1625
- path: linkedTest.path,
1626
- status: "failed",
1627
- exit_code: 1,
1628
- failure_category: "empty_run",
1629
- execution_context: executionContext,
1630
- stdout: execution.stdout,
1631
- stderr: execution.stderr,
1632
- 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.`
1633
- });
1634
- continue;
1635
- }
1636
- }
1637
- const assertionFailures = evaluateLinkedTestAssertions(linkedTest, execution.stdout, execution.stderr);
1638
- if (assertionFailures.length > 0) {
1639
- results.push({
1640
- command: linkedTest.command,
1641
- path: linkedTest.path,
1642
- status: "failed",
1643
- exit_code: 1,
1644
- failure_category: "assertion_failure",
1645
- execution_context: executionContext,
1646
- stdout: execution.stdout,
1647
- stderr: execution.stderr,
1648
- error: `Linked test assertion(s) failed: ${assertionFailures.join("; ")}`
1649
- });
1650
- continue;
1651
- }
1652
- results.push({
1653
- command: linkedTest.command,
1654
- path: linkedTest.path,
1655
- status: "passed",
1656
- exit_code: 0,
1657
- execution_context: executionContext,
1658
- stdout: execution.stdout,
1659
- stderr: execution.stderr
1660
- });
1701
+ const preflightResult = resolveLinkedTestPreflightResult({
1702
+ linkedTest,
1703
+ executionContext: commandContext.executionContext,
1704
+ runLevelPmContextMode,
1705
+ linkedOverridePmContextMode: commandContext.linkedOverridePmContextMode,
1706
+ options
1707
+ });
1708
+ if (preflightResult) {
1709
+ results.push(preflightResult);
1661
1710
  continue;
1662
1711
  }
1663
- const failureCategory = classifyLinkedTestFailure(execution);
1664
- results.push({
1665
- command: linkedTest.command,
1666
- path: linkedTest.path,
1667
- status: "failed",
1668
- exit_code: resolveLinkedTestFailureExitCode(execution),
1669
- failure_category: failureCategory,
1670
- execution_context: executionContext,
1671
- stdout: execution.stdout,
1672
- stderr: execution.stderr,
1673
- error: formatLinkedTestExecutionError(execution, timeoutMs)
1674
- });
1712
+ results.push(await runSingleLinkedTest({
1713
+ linkedTest,
1714
+ index,
1715
+ total: tests.length,
1716
+ defaultTimeoutSeconds,
1717
+ runtimeDirectives,
1718
+ progressMode,
1719
+ executionContext: commandContext.executionContext,
1720
+ options
1721
+ }));
1675
1722
  }
1676
1723
  } finally {
1677
- await rm(sandboxRoot, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
1724
+ await rm(layout.root, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
1678
1725
  }
1679
1726
  return results;
1680
1727
  }
1681
- async function runTest(id, options, global) {
1682
- const stdinResolver = createStdinTokenResolver();
1683
- const pmRoot = resolvePmRoot(process.cwd(), global.path);
1684
- if (!await pathExists(getSettingsPath(pmRoot))) {
1685
- throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1686
- }
1687
- const settings = await readSettings(pmRoot);
1688
- const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1689
- const resolvedAdds = await stdinResolver.resolveList(options.add, "--add");
1690
- const resolvedAddJsons = await stdinResolver.resolveList(options.addJson, "--add-json");
1691
- const resolvedRemoves = await stdinResolver.resolveList(options.remove, "--remove");
1692
- const adds = [...parseAddEntries(resolvedAdds), ...parseAddJsonEntries(resolvedAddJsons)];
1693
- const removes = parseRemoveEntries(resolvedRemoves);
1694
- const shouldMutate = adds.length > 0 || removes.length > 0;
1695
- let tests = [];
1696
- let itemId;
1697
- let changed = false;
1698
- if (shouldMutate) {
1699
- const author = resolveAuthor(options.author, settings.author_default);
1700
- const result = await mutateItem({
1701
- pmRoot,
1702
- settings,
1703
- id,
1704
- op: "tests_add",
1705
- author,
1706
- message: options.message,
1707
- force: options.force,
1708
- skipNoop: true,
1709
- mutate(document) {
1710
- const previous = document.metadata.tests ?? [];
1711
- const next = [...document.metadata.tests ?? []];
1712
- for (const add of adds) {
1713
- 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);
1714
- if (!exists) {
1715
- next.push(add);
1716
- }
1717
- }
1718
- if (removes.length > 0) {
1719
- for (let i = next.length - 1; i >= 0; i -= 1) {
1720
- const entry = next[i];
1721
- if (removes.includes(entry.path ?? "") || removes.includes(entry.command ?? "")) {
1722
- next.splice(i, 1);
1723
- }
1724
- }
1725
- }
1726
- document.metadata.tests = next;
1727
- return { changedFields: stableValueEquals(previous, next) ? [] : ["tests"] };
1728
- }
1729
- });
1730
- tests = result.item.tests ?? [];
1731
- itemId = result.item.id;
1732
- changed = result.changedFields.length > 0;
1733
- } else {
1734
- const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
1735
- if (!located) {
1736
- throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
1737
- }
1738
- itemId = located.id;
1739
- const loaded = await readLocatedItem(located, { schema: settings.schema });
1740
- tests = loaded.document.metadata.tests ?? [];
1741
- }
1742
- let defaultTimeoutSeconds;
1743
- if (options.timeout !== void 0) {
1744
- defaultTimeoutSeconds = parseOptionalNumber(options.timeout, "timeout");
1745
- }
1746
- const pmContextMode = parsePmContextMode(options.pmContext);
1747
- 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;
1748
- if (hasRuntimeDirectiveFlags && options.run !== true) {
1728
+ function hasTestRuntimeDirectiveFlags(options) {
1729
+ 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;
1730
+ }
1731
+ function assertTestRunFlagUsage(options) {
1732
+ if (hasTestRuntimeDirectiveFlags(options) && options.run !== true) {
1749
1733
  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);
1750
1734
  }
1751
1735
  const hasSelectorFlags = options.match !== void 0 || options.onlyIndex !== void 0 || options.onlyLast === true;
1752
1736
  if (hasSelectorFlags && options.run !== true) {
1753
1737
  throw new PmCliError("--match, --only-index, and --only-last require --run", EXIT_CODE.USAGE);
1754
1738
  }
1739
+ }
1740
+ async function resolveLinkedTestItem(params) {
1741
+ const { id, options, pmRoot, settings, typeToFolder, adds, removes } = params;
1742
+ if (adds.length === 0 && removes.length === 0) {
1743
+ const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeToFolder);
1744
+ if (!located) {
1745
+ throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
1746
+ }
1747
+ const loaded = await readLocatedItem(located, { schema: settings.schema });
1748
+ return { itemId: located.id, tests: loaded.document.metadata.tests ?? [], changed: false };
1749
+ }
1750
+ const result = await mutateItem({
1751
+ pmRoot,
1752
+ settings,
1753
+ id,
1754
+ op: "tests_add",
1755
+ author: resolveAuthor(options.author, settings.author_default),
1756
+ message: options.message,
1757
+ force: options.force,
1758
+ skipNoop: true,
1759
+ mutate(document) {
1760
+ const previous = document.metadata.tests ?? [];
1761
+ const next = [...previous];
1762
+ for (const add of adds) {
1763
+ 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);
1764
+ if (!exists) {
1765
+ next.push(add);
1766
+ }
1767
+ }
1768
+ if (removes.length > 0) {
1769
+ for (let i = next.length - 1; i >= 0; i -= 1) {
1770
+ const entry = next[i];
1771
+ if (removes.includes(entry.path ?? "") || removes.includes(entry.command ?? "")) {
1772
+ next.splice(i, 1);
1773
+ }
1774
+ }
1775
+ }
1776
+ document.metadata.tests = next;
1777
+ return { changedFields: stableValueEquals(previous, next) ? [] : ["tests"] };
1778
+ }
1779
+ });
1780
+ return {
1781
+ itemId: result.item.id,
1782
+ tests: result.item.tests ?? [],
1783
+ changed: result.changedFields.length > 0
1784
+ };
1785
+ }
1786
+ function resolveTestRunOptions(options, tests) {
1787
+ assertTestRunFlagUsage(options);
1755
1788
  const selectorInput = {
1756
1789
  match: options.match,
1757
1790
  onlyIndex: options.onlyIndex === void 0 ? void 0 : parseOnlyIndexValue(options.onlyIndex),
1758
1791
  onlyLast: options.onlyLast
1759
1792
  };
1760
1793
  const runSelection = options.run === true ? resolveLinkedTestRunSelection(tests, selectorInput) : void 0;
1761
- const testsToRun = runSelection?.selected ?? tests;
1762
- const runStartedAt = options.run === true ? nowIso() : void 0;
1763
- const runResults = options.run === true ? await runLinkedTests(testsToRun, defaultTimeoutSeconds, {
1794
+ return {
1795
+ defaultTimeoutSeconds: options.timeout === void 0 ? void 0 : parseOptionalNumber(options.timeout, "timeout"),
1796
+ pmContextMode: parsePmContextMode(options.pmContext),
1797
+ runSelection,
1798
+ testsToRun: runSelection?.selected ?? tests
1799
+ };
1800
+ }
1801
+ async function executeSelectedLinkedTests(params) {
1802
+ const { options, runOptions, pmRoot } = params;
1803
+ if (options.run !== true) {
1804
+ return [];
1805
+ }
1806
+ return await runLinkedTests(runOptions.testsToRun, runOptions.defaultTimeoutSeconds, {
1764
1807
  progress: options.progress,
1765
1808
  envSet: options.envSet,
1766
1809
  envClear: options.envClear,
1767
1810
  sharedHostSafe: options.sharedHostSafe,
1768
- pmContext: pmContextMode,
1811
+ pmContext: runOptions.pmContextMode,
1769
1812
  overrideLinkedPmContext: options.overrideLinkedPmContext,
1770
1813
  failOnContextMismatch: options.failOnContextMismatch,
1771
1814
  failOnEmptyTestRun: options.failOnEmptyTestRun,
@@ -1776,9 +1819,9 @@ async function runTest(id, options, global) {
1776
1819
  projectPmRoot: pmRoot,
1777
1820
  globalPmRoot: resolveGlobalPmRoot(process.cwd())
1778
1821
  }
1779
- }) : [];
1780
- const failureCategories = countFailureCategories(runResults);
1781
- const failOnSkippedTriggered = options.run === true && options.failOnSkipped === true && runResults.some((entry) => entry.status === "skipped");
1822
+ });
1823
+ }
1824
+ function buildTestWarnings(options, runSelection, runResults) {
1782
1825
  const warnings = [];
1783
1826
  if (runSelection && runSelection.selector !== null) {
1784
1827
  warnings.push(`linked_test_selection:${runSelection.selector}=${runSelection.requested};selected=${runSelection.selected_count};skipped=${runSelection.skipped_count};indexes=${runSelection.selected_indexes.join(",")}`);
@@ -1787,55 +1830,90 @@ async function runTest(id, options, global) {
1787
1830
  const preflight = summarizeContextPreflight(runResults);
1788
1831
  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}`);
1789
1832
  }
1790
- if (options.run === true && runStartedAt && settings.testing.record_results_to_items === true) {
1791
- const summary = summarizeRunResultStatuses(runResults);
1792
- const trackedRunId = resolveTrackedRunId("test");
1793
- const attemptRaw = process.env.PM_BACKGROUND_TEST_RUN_ATTEMPT?.trim();
1794
- const parsedAttempt = attemptRaw ? Number.parseInt(attemptRaw, 10) : Number.NaN;
1795
- const resumedFrom = process.env.PM_BACKGROUND_TEST_RUN_RESUMED_FROM?.trim();
1796
- try {
1797
- await appendTrackedTestRunSummary({
1798
- pmRoot,
1799
- settings,
1800
- itemId,
1801
- author: resolveAuthor(options.author, settings.author_default),
1802
- message: `Track test run summary (${trackedRunId})`,
1803
- entry: {
1804
- run_id: trackedRunId,
1805
- kind: "test",
1806
- status: summary.failed > 0 || failOnSkippedTriggered === true ? "failed" : "passed",
1807
- started_at: runStartedAt,
1808
- finished_at: nowIso(),
1809
- recorded_at: nowIso(),
1810
- attempt: Number.isFinite(parsedAttempt) && parsedAttempt >= 1 ? parsedAttempt : void 0,
1811
- resumed_from: resumedFrom && resumedFrom.length > 0 ? resumedFrom : void 0,
1812
- passed: summary.passed,
1813
- failed: summary.failed,
1814
- skipped: summary.skipped,
1815
- fail_on_skipped_triggered: failOnSkippedTriggered ? true : void 0
1816
- }
1817
- });
1818
- } catch (error) {
1819
- warnings.push(`test_result_tracking_failed:${itemId}:${error instanceof Error ? error.message : String(error)}`);
1820
- }
1833
+ return warnings;
1834
+ }
1835
+ async function recordTestRunSummary(params) {
1836
+ const { options, pmRoot, settings, itemId, runStartedAt, runResults, failOnSkippedTriggered, warnings } = params;
1837
+ if (options.run !== true || !runStartedAt || settings.testing.record_results_to_items !== true) {
1838
+ return;
1839
+ }
1840
+ const summary = summarizeRunResultStatuses(runResults);
1841
+ const trackedRunId = resolveTrackedRunId("test");
1842
+ const attemptRaw = process.env.PM_BACKGROUND_TEST_RUN_ATTEMPT?.trim();
1843
+ const parsedAttempt = attemptRaw ? Number.parseInt(attemptRaw, 10) : Number.NaN;
1844
+ const resumedFrom = process.env.PM_BACKGROUND_TEST_RUN_RESUMED_FROM?.trim();
1845
+ try {
1846
+ await appendTrackedTestRunSummary({
1847
+ pmRoot,
1848
+ settings,
1849
+ itemId,
1850
+ author: resolveAuthor(options.author, settings.author_default),
1851
+ message: `Track test run summary (${trackedRunId})`,
1852
+ entry: {
1853
+ run_id: trackedRunId,
1854
+ kind: "test",
1855
+ status: summary.failed > 0 || failOnSkippedTriggered === true ? "failed" : "passed",
1856
+ started_at: runStartedAt,
1857
+ finished_at: nowIso(),
1858
+ recorded_at: nowIso(),
1859
+ attempt: Number.isFinite(parsedAttempt) && parsedAttempt >= 1 ? parsedAttempt : void 0,
1860
+ resumed_from: resumedFrom && resumedFrom.length > 0 ? resumedFrom : void 0,
1861
+ passed: summary.passed,
1862
+ failed: summary.failed,
1863
+ skipped: summary.skipped,
1864
+ fail_on_skipped_triggered: failOnSkippedTriggered ? true : void 0
1865
+ }
1866
+ });
1867
+ } catch (error) {
1868
+ warnings.push(`test_result_tracking_failed:${itemId}:${error instanceof Error ? error.message : String(error)}`);
1821
1869
  }
1870
+ }
1871
+ async function runTest(id, options, global) {
1872
+ const stdinResolver = createStdinTokenResolver();
1873
+ const pmRoot = resolvePmRoot(process.cwd(), global.path);
1874
+ if (!await pathExists(getSettingsPath(pmRoot))) {
1875
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1876
+ }
1877
+ const settings = await readSettings(pmRoot);
1878
+ const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1879
+ const resolvedAdds = await stdinResolver.resolveList(options.add, "--add");
1880
+ const resolvedAddJsons = await stdinResolver.resolveList(options.addJson, "--add-json");
1881
+ const resolvedRemoves = await stdinResolver.resolveList(options.remove, "--remove");
1882
+ const adds = [...parseAddEntries(resolvedAdds), ...parseAddJsonEntries(resolvedAddJsons)];
1883
+ const removes = parseRemoveEntries(resolvedRemoves);
1884
+ const item = await resolveLinkedTestItem({
1885
+ id,
1886
+ options,
1887
+ pmRoot,
1888
+ settings,
1889
+ typeToFolder: typeRegistry.type_to_folder,
1890
+ adds,
1891
+ removes
1892
+ });
1893
+ const runOptions = resolveTestRunOptions(options, item.tests);
1894
+ const runStartedAt = options.run === true ? nowIso() : void 0;
1895
+ const runResults = await executeSelectedLinkedTests({ options, runOptions, pmRoot });
1896
+ const failureCategories = countFailureCategories(runResults);
1897
+ const failOnSkippedTriggered = options.run === true && options.failOnSkipped === true && runResults.some((entry) => entry.status === "skipped");
1898
+ const warnings = buildTestWarnings(options, runOptions.runSelection, runResults);
1899
+ await recordTestRunSummary({ options, pmRoot, settings, itemId: item.itemId, runStartedAt, runResults, failOnSkippedTriggered, warnings });
1822
1900
  return {
1823
1901
  ok: runResults.every((entry) => entry.status !== "failed") && failOnSkippedTriggered !== true,
1824
- id: itemId,
1825
- tests,
1902
+ id: item.itemId,
1903
+ tests: item.tests,
1826
1904
  run_results: runResults,
1827
1905
  failure_categories: failureCategories,
1828
- selection: runSelection ? {
1829
- selector: runSelection.selector,
1830
- requested: runSelection.requested,
1831
- selected_indexes: runSelection.selected_indexes,
1832
- selected_count: runSelection.selected_count,
1833
- skipped_count: runSelection.skipped_count
1906
+ selection: runOptions.runSelection ? {
1907
+ selector: runOptions.runSelection.selector,
1908
+ requested: runOptions.runSelection.requested,
1909
+ selected_indexes: runOptions.runSelection.selected_indexes,
1910
+ selected_count: runOptions.runSelection.selected_count,
1911
+ skipped_count: runOptions.runSelection.skipped_count
1834
1912
  } : void 0,
1835
1913
  fail_on_skipped_triggered: failOnSkippedTriggered ? true : void 0,
1836
1914
  warnings: warnings.length > 0 ? warnings : void 0,
1837
- changed,
1838
- count: tests.length
1915
+ changed: item.changed,
1916
+ count: item.tests.length
1839
1917
  };
1840
1918
  }
1841
1919
  var _testOnlyTestCommand = {
@@ -1876,6 +1954,6 @@ export {
1876
1954
  runTest,
1877
1955
  _testOnlyTestCommand
1878
1956
  };
1879
- //# sourceMappingURL=chunk-3XZCOZ5J.js.map
1957
+ //# sourceMappingURL=chunk-NOIEVOK5.js.map
1880
1958
 
1881
- //# debugId=a2588018-8995-5c3e-b957-a7afc236729b
1959
+ //# debugId=4f00aa88-9fd7-5416-a1a3-4df09dba7e93