@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
@@ -4,7 +4,7 @@
4
4
  * Implements the pm test command surface and its agent-facing runtime behavior.
5
5
  */
6
6
 
7
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="8f5d4783-6790-59c5-b9fa-9b1f1abd13b9")}catch(e){}}();
7
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="caa941ed-c848-506c-9a3c-3d4959be0246")}catch(e){}}();
8
8
  import { spawn } from "node:child_process";
9
9
  import { cp, mkdir, mkdtemp, readdir, rm } from "node:fs/promises";
10
10
  import { tmpdir } from "node:os";
@@ -1206,303 +1206,283 @@ function detectEmptyLinkedTestRun(stdout, stderr) {
1206
1206
  }
1207
1207
  return null;
1208
1208
  }
1209
- /* c8 ignore start -- linked-test orchestration branch matrix is covered by end-to-end command integration runs */
1209
+ function createLinkedTestSandboxLayout(sandboxRoot) {
1210
+ return {
1211
+ root: sandboxRoot,
1212
+ schemaProjectPmPath: path.join(sandboxRoot, "schema", "project", ".agents", "pm"),
1213
+ schemaGlobalPmPath: path.join(sandboxRoot, "schema", "global"),
1214
+ trackerProjectPmPath: path.join(sandboxRoot, "tracker", "project", ".agents", "pm"),
1215
+ trackerGlobalPmPath: path.join(sandboxRoot, "tracker", "global"),
1216
+ };
1217
+ }
1218
+ async function initializeLinkedTestSandboxes(layout) {
1219
+ await runInit(undefined, { path: layout.schemaProjectPmPath });
1220
+ await runInit(undefined, { path: layout.schemaGlobalPmPath });
1221
+ await runInit(undefined, { path: layout.trackerProjectPmPath });
1222
+ await runInit(undefined, { path: layout.trackerGlobalPmPath });
1223
+ }
1224
+ async function seedLinkedTestSandboxesFromSource(layout, sourceRoots) {
1225
+ if (!sourceRoots) {
1226
+ return;
1227
+ }
1228
+ await seedLinkedTestSandbox(layout.schemaProjectPmPath, layout.schemaGlobalPmPath, sourceRoots);
1229
+ await seedLinkedTestSandbox(layout.trackerProjectPmPath, layout.trackerGlobalPmPath, sourceRoots);
1230
+ await seedLinkedTestTrackerData(sourceRoots.projectPmRoot, layout.trackerProjectPmPath);
1231
+ await seedLinkedTestTrackerData(sourceRoots.globalPmRoot, layout.trackerGlobalPmPath);
1232
+ }
1233
+ async function countLinkedTestSandboxItems(layout, sourceRoots) {
1234
+ return {
1235
+ sourceProjectItemCount: sourceRoots ? await countLinkedTestItemFiles(sourceRoots.projectPmRoot) : 0,
1236
+ sourceGlobalItemCount: sourceRoots ? await countLinkedTestItemFiles(sourceRoots.globalPmRoot) : 0,
1237
+ schemaProjectItemCount: await countLinkedTestItemFiles(layout.schemaProjectPmPath),
1238
+ schemaGlobalItemCount: await countLinkedTestItemFiles(layout.schemaGlobalPmPath),
1239
+ trackerProjectItemCount: await countLinkedTestItemFiles(layout.trackerProjectPmPath),
1240
+ trackerGlobalItemCount: await countLinkedTestItemFiles(layout.trackerGlobalPmPath),
1241
+ };
1242
+ }
1243
+ function buildLinkedTestExecutionContext(params) {
1244
+ const trackerMode = params.effectivePmContextMode === "tracker";
1245
+ const selectedSandboxProjectPmPath = trackerMode ? params.layout.trackerProjectPmPath : params.layout.schemaProjectPmPath;
1246
+ const selectedSandboxGlobalPmPath = trackerMode ? params.layout.trackerGlobalPmPath : params.layout.schemaGlobalPmPath;
1247
+ const selectedSandboxProjectItemCount = trackerMode ? params.counts.trackerProjectItemCount : params.counts.schemaProjectItemCount;
1248
+ const selectedSandboxGlobalItemCount = trackerMode ? params.counts.trackerGlobalItemCount : params.counts.schemaGlobalItemCount;
1249
+ return {
1250
+ requested_pm_context_mode: params.requestedPmContextMode,
1251
+ pm_context_mode: params.effectivePmContextMode,
1252
+ auto_pm_context_applied: params.autoPmContextApplied,
1253
+ is_pm_command: params.isPmCommand,
1254
+ is_pm_tracker_read_command: params.isPmTrackerReadCommand,
1255
+ source_project_pm_path: params.sourceRoots?.projectPmRoot ?? "",
1256
+ sandbox_project_pm_path: selectedSandboxProjectPmPath,
1257
+ source_global_pm_path: params.sourceRoots?.globalPmRoot ?? "",
1258
+ sandbox_global_pm_path: selectedSandboxGlobalPmPath,
1259
+ source_project_item_count: params.counts.sourceProjectItemCount,
1260
+ sandbox_project_item_count: selectedSandboxProjectItemCount,
1261
+ source_global_item_count: params.counts.sourceGlobalItemCount,
1262
+ sandbox_global_item_count: selectedSandboxGlobalItemCount,
1263
+ mismatch_detected: params.isPmCommand && params.counts.sourceProjectItemCount !== selectedSandboxProjectItemCount,
1264
+ project_extensions_seeded: Boolean(params.sourceRoots),
1265
+ global_extensions_seeded: Boolean(params.sourceRoots),
1266
+ };
1267
+ }
1268
+ function resolveLinkedTestCommandContext(params) {
1269
+ const linkedOverridePmContextMode = typeof params.linkedTest.pm_context_mode === "string" && params.linkedTest.pm_context_mode.trim().length > 0
1270
+ ? parsePmContextMode(params.linkedTest.pm_context_mode)
1271
+ : undefined;
1272
+ const command = typeof params.linkedTest.command === "string" && params.linkedTest.command.length > 0
1273
+ ? params.linkedTest.command
1274
+ : undefined;
1275
+ const isPmCommand = command ? commandInvokesPmCli(command) : false;
1276
+ const isPmTrackerReadCommand = isPmCommand && command ? commandInvokesPmTrackerReadCommand(command) : false;
1277
+ const autoPmContextApplied = params.options?.autoPmContext === true && isPmTrackerReadCommand;
1278
+ const requestedPmContextMode = autoPmContextApplied
1279
+ ? "auto"
1280
+ : resolveLinkedTestRequestedContextMode(params.linkedTest, params.runLevelPmContextMode, params.options?.overrideLinkedPmContext === true);
1281
+ const effectivePmContextMode = resolveLinkedTestEffectiveContextMode(requestedPmContextMode, isPmTrackerReadCommand);
1282
+ return {
1283
+ linkedOverridePmContextMode,
1284
+ executionContext: buildLinkedTestExecutionContext({
1285
+ layout: params.layout,
1286
+ counts: params.counts,
1287
+ sourceRoots: params.sourceRoots,
1288
+ isPmCommand,
1289
+ isPmTrackerReadCommand,
1290
+ requestedPmContextMode,
1291
+ effectivePmContextMode,
1292
+ autoPmContextApplied,
1293
+ }),
1294
+ };
1295
+ }
1296
+ function buildLinkedTestSkippedResult(linkedTest, executionContext, error) {
1297
+ return {
1298
+ command: linkedTest.command,
1299
+ path: linkedTest.path,
1300
+ status: "skipped",
1301
+ execution_context: executionContext,
1302
+ error,
1303
+ };
1304
+ }
1305
+ function buildLinkedTestAssertionFailureResult(linkedTest, executionContext, error, output) {
1306
+ return {
1307
+ command: linkedTest.command,
1308
+ path: linkedTest.path,
1309
+ status: "failed",
1310
+ exit_code: 1,
1311
+ failure_category: "assertion_failure",
1312
+ execution_context: executionContext,
1313
+ ...(output ? { stdout: output.stdout, stderr: output.stderr } : {}),
1314
+ error,
1315
+ };
1316
+ }
1317
+ function resolveLinkedTestPreflightResult(params) {
1318
+ if (!params.linkedTest.command) {
1319
+ return buildLinkedTestSkippedResult(params.linkedTest, params.executionContext, "No command configured for this linked test.");
1320
+ }
1321
+ const runtimeSafetySkipReason = getRuntimeSafetySkipReason(params.linkedTest.command);
1322
+ if (runtimeSafetySkipReason) {
1323
+ return buildLinkedTestSkippedResult(params.linkedTest, params.executionContext, runtimeSafetySkipReason);
1324
+ }
1325
+ const failOnMismatchByDefault = params.executionContext.pm_context_mode === "schema" &&
1326
+ params.executionContext.is_pm_tracker_read_command &&
1327
+ params.executionContext.mismatch_detected;
1328
+ const failOnMismatchByFlag = params.options?.failOnContextMismatch === true &&
1329
+ params.executionContext.is_pm_command &&
1330
+ params.executionContext.mismatch_detected;
1331
+ if (failOnMismatchByDefault || failOnMismatchByFlag) {
1332
+ const mismatchHint = buildPmContextMismatchHint({
1333
+ executionContext: params.executionContext,
1334
+ runLevelPmContextMode: params.runLevelPmContextMode,
1335
+ linkedOverridePmContextMode: params.linkedOverridePmContextMode,
1336
+ });
1337
+ const mismatchPrefix = params.options?.checkContext === true
1338
+ ? "Linked test preflight PM context mismatch detected"
1339
+ : "Linked test PM context mismatch detected";
1340
+ return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, `${mismatchPrefix} (source_project_items=${params.executionContext.source_project_item_count}, ` +
1341
+ `sandbox_project_items=${params.executionContext.sandbox_project_item_count}).${mismatchHint}`);
1342
+ }
1343
+ if (params.options?.requireAssertionsForPm === true &&
1344
+ params.executionContext.is_pm_command &&
1345
+ !hasLinkedTestAssertions(params.linkedTest)) {
1346
+ return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, "Linked PM command requires assertions when --require-assertions-for-pm is enabled.");
1347
+ }
1348
+ return null;
1349
+ }
1350
+ function buildLinkedTestExecutionEnv(params) {
1351
+ const effectiveDirectives = resolveEffectiveLinkedTestDirectives(params.runtimeDirectives, params.linkedTest);
1352
+ const executionEnv = { ...process.env };
1353
+ applyEnvDirectiveStage(executionEnv, params.runtimeDirectives);
1354
+ applyEnvDirectiveStage(executionEnv, {
1355
+ env_set: params.linkedTest.env_set ?? {},
1356
+ env_clear: params.linkedTest.env_clear ?? [],
1357
+ });
1358
+ if (effectiveDirectives.shared_host_safe) {
1359
+ applySharedHostSafeDefaults(executionEnv);
1360
+ }
1361
+ executionEnv.FORCE_COLOR = "0";
1362
+ executionEnv.PM_PATH = params.executionContext.sandbox_project_pm_path;
1363
+ executionEnv.PM_GLOBAL_PATH = params.executionContext.sandbox_global_pm_path;
1364
+ return executionEnv;
1365
+ }
1366
+ function buildLinkedTestPassedResult(linkedTest, executionContext, execution) {
1367
+ return {
1368
+ command: linkedTest.command,
1369
+ path: linkedTest.path,
1370
+ status: "passed",
1371
+ exit_code: 0,
1372
+ execution_context: executionContext,
1373
+ stdout: execution.stdout,
1374
+ stderr: execution.stderr,
1375
+ };
1376
+ }
1377
+ function buildLinkedTestEmptyRunResult(params) {
1378
+ return {
1379
+ command: params.linkedTest.command,
1380
+ path: params.linkedTest.path,
1381
+ status: "failed",
1382
+ exit_code: 1,
1383
+ failure_category: "empty_run",
1384
+ execution_context: params.executionContext,
1385
+ stdout: params.execution.stdout,
1386
+ stderr: params.execution.stderr,
1387
+ error: `Linked test reported an empty test run (${params.emptyRunSignal}) while --fail-on-empty-test-run is enabled. ` +
1388
+ "Update test selection or disable --fail-on-empty-test-run for this run.",
1389
+ };
1390
+ }
1391
+ function buildLinkedTestCommandFailureResult(params) {
1392
+ return {
1393
+ command: params.linkedTest.command,
1394
+ path: params.linkedTest.path,
1395
+ status: "failed",
1396
+ exit_code: resolveLinkedTestFailureExitCode(params.execution),
1397
+ failure_category: classifyLinkedTestFailure(params.execution),
1398
+ execution_context: params.executionContext,
1399
+ stdout: params.execution.stdout,
1400
+ stderr: params.execution.stderr,
1401
+ error: formatLinkedTestExecutionError(params.execution, params.timeoutMs),
1402
+ };
1403
+ }
1404
+ function buildLinkedTestPassedExecutionResult(params) {
1405
+ if (params.options?.failOnEmptyTestRun === true) {
1406
+ const emptyRunSignal = detectEmptyLinkedTestRun(params.execution.stdout, params.execution.stderr);
1407
+ if (emptyRunSignal) {
1408
+ return buildLinkedTestEmptyRunResult({ ...params, emptyRunSignal });
1409
+ }
1410
+ }
1411
+ const assertionFailures = evaluateLinkedTestAssertions(params.linkedTest, params.execution.stdout, params.execution.stderr);
1412
+ if (assertionFailures.length > 0) {
1413
+ return buildLinkedTestAssertionFailureResult(params.linkedTest, params.executionContext, `Linked test assertion(s) failed: ${assertionFailures.join("; ")}`, params.execution);
1414
+ }
1415
+ return buildLinkedTestPassedResult(params.linkedTest, params.executionContext, params.execution);
1416
+ }
1417
+ async function runSingleLinkedTest(params) {
1418
+ const command = params.linkedTest.command ?? "";
1419
+ const timeoutMs = (params.linkedTest.timeout_seconds ?? params.defaultTimeoutSeconds ?? 120) * 1000;
1420
+ const execution = await runLinkedTestCommand(command, timeoutMs, buildLinkedTestExecutionEnv(params), {
1421
+ index: params.index + 1,
1422
+ total: params.total,
1423
+ timeoutMs,
1424
+ command,
1425
+ }, params.progressMode);
1426
+ const passed = execution.exitCode === 0 && !execution.timedOut && !execution.maxBufferExceeded;
1427
+ return passed
1428
+ ? buildLinkedTestPassedExecutionResult({ ...params, execution })
1429
+ : buildLinkedTestCommandFailureResult({ ...params, execution, timeoutMs });
1430
+ }
1210
1431
  /**
1211
1432
  * Implements run linked tests for the public runtime surface of this module.
1212
1433
  */
1213
1434
  export async function runLinkedTests(tests, defaultTimeoutSeconds, options) {
1214
1435
  const results = [];
1215
1436
  const sandboxRoot = await mkdtemp(path.join(tmpdir(), "pm-linked-test-"));
1216
- const schemaSandboxPmPath = path.join(sandboxRoot, "schema", "project", ".agents", "pm");
1217
- const schemaSandboxGlobalPath = path.join(sandboxRoot, "schema", "global");
1218
- const trackerSandboxPmPath = path.join(sandboxRoot, "tracker", "project", ".agents", "pm");
1219
- const trackerSandboxGlobalPath = path.join(sandboxRoot, "tracker", "global");
1437
+ const layout = createLinkedTestSandboxLayout(sandboxRoot);
1220
1438
  const runLevelPmContextMode = parsePmContextMode(options?.pmContext);
1221
1439
  const progressMode = options?.progress === true ? "always" : "auto";
1222
1440
  const runtimeDirectives = resolveRuntimeDirectives(options?.envSet, options?.envClear, options?.sharedHostSafe);
1223
- let sourceProjectItemCount = 0;
1224
- let sourceGlobalItemCount = 0;
1225
- let schemaSandboxProjectItemCount = 0;
1226
- let schemaSandboxGlobalItemCount = 0;
1227
- let trackerSandboxProjectItemCount = 0;
1228
- let trackerSandboxGlobalItemCount = 0;
1229
1441
  const sourceRoots = options?.sourceRoots;
1230
- const projectExtensionsSeeded = Boolean(sourceRoots);
1231
- const globalExtensionsSeeded = Boolean(sourceRoots);
1232
1442
  try {
1233
- await runInit(undefined, { path: schemaSandboxPmPath });
1234
- await runInit(undefined, { path: schemaSandboxGlobalPath });
1235
- await runInit(undefined, { path: trackerSandboxPmPath });
1236
- await runInit(undefined, { path: trackerSandboxGlobalPath });
1237
- if (sourceRoots) {
1238
- await seedLinkedTestSandbox(schemaSandboxPmPath, schemaSandboxGlobalPath, sourceRoots);
1239
- await seedLinkedTestSandbox(trackerSandboxPmPath, trackerSandboxGlobalPath, sourceRoots);
1240
- await seedLinkedTestTrackerData(sourceRoots.projectPmRoot, trackerSandboxPmPath);
1241
- await seedLinkedTestTrackerData(sourceRoots.globalPmRoot, trackerSandboxGlobalPath);
1242
- sourceProjectItemCount = await countLinkedTestItemFiles(sourceRoots.projectPmRoot);
1243
- sourceGlobalItemCount = await countLinkedTestItemFiles(sourceRoots.globalPmRoot);
1244
- }
1245
- schemaSandboxProjectItemCount = await countLinkedTestItemFiles(schemaSandboxPmPath);
1246
- schemaSandboxGlobalItemCount = await countLinkedTestItemFiles(schemaSandboxGlobalPath);
1247
- trackerSandboxProjectItemCount = await countLinkedTestItemFiles(trackerSandboxPmPath);
1248
- trackerSandboxGlobalItemCount = await countLinkedTestItemFiles(trackerSandboxGlobalPath);
1249
- const buildExecutionContext = (isPmCommand, isPmTrackerReadCommand, requestedPmContextMode, effectivePmContextMode, autoPmContextApplied) => {
1250
- const selectedSandboxProjectPmPath = effectivePmContextMode === "tracker" ? trackerSandboxPmPath : schemaSandboxPmPath;
1251
- const selectedSandboxGlobalPmPath = effectivePmContextMode === "tracker" ? trackerSandboxGlobalPath : schemaSandboxGlobalPath;
1252
- const selectedSandboxProjectItemCount = effectivePmContextMode === "tracker" ? trackerSandboxProjectItemCount : schemaSandboxProjectItemCount;
1253
- const selectedSandboxGlobalItemCount = effectivePmContextMode === "tracker" ? trackerSandboxGlobalItemCount : schemaSandboxGlobalItemCount;
1254
- const mismatchDetected = isPmCommand && sourceProjectItemCount !== selectedSandboxProjectItemCount;
1255
- return {
1256
- requested_pm_context_mode: requestedPmContextMode,
1257
- pm_context_mode: effectivePmContextMode,
1258
- auto_pm_context_applied: autoPmContextApplied,
1259
- is_pm_command: isPmCommand,
1260
- is_pm_tracker_read_command: isPmTrackerReadCommand,
1261
- source_project_pm_path: sourceRoots?.projectPmRoot ?? "",
1262
- sandbox_project_pm_path: selectedSandboxProjectPmPath,
1263
- source_global_pm_path: sourceRoots?.globalPmRoot ?? "",
1264
- sandbox_global_pm_path: selectedSandboxGlobalPmPath,
1265
- source_project_item_count: sourceProjectItemCount,
1266
- sandbox_project_item_count: selectedSandboxProjectItemCount,
1267
- source_global_item_count: sourceGlobalItemCount,
1268
- sandbox_global_item_count: selectedSandboxGlobalItemCount,
1269
- mismatch_detected: mismatchDetected,
1270
- project_extensions_seeded: projectExtensionsSeeded,
1271
- global_extensions_seeded: globalExtensionsSeeded,
1272
- };
1273
- };
1443
+ await initializeLinkedTestSandboxes(layout);
1444
+ await seedLinkedTestSandboxesFromSource(layout, sourceRoots);
1445
+ const counts = await countLinkedTestSandboxItems(layout, sourceRoots);
1274
1446
  for (let index = 0; index < tests.length; index += 1) {
1275
1447
  const linkedTest = tests[index];
1276
- const linkedOverridePmContextMode = typeof linkedTest.pm_context_mode === "string" && linkedTest.pm_context_mode.trim().length > 0
1277
- ? parsePmContextMode(linkedTest.pm_context_mode)
1278
- : undefined;
1279
- const isPmCommand = typeof linkedTest.command === "string" && linkedTest.command.length > 0
1280
- ? commandInvokesPmCli(linkedTest.command)
1281
- : false;
1282
- const isPmTrackerReadCommand = isPmCommand && typeof linkedTest.command === "string" && linkedTest.command.length > 0
1283
- ? commandInvokesPmTrackerReadCommand(linkedTest.command)
1284
- : false;
1285
- const autoPmContextApplied = options?.autoPmContext === true && isPmTrackerReadCommand;
1286
- const requestedPmContextMode = autoPmContextApplied
1287
- ? "auto"
1288
- : resolveLinkedTestRequestedContextMode(linkedTest, runLevelPmContextMode, options?.overrideLinkedPmContext === true);
1289
- const effectivePmContextMode = resolveLinkedTestEffectiveContextMode(requestedPmContextMode, isPmTrackerReadCommand);
1290
- const executionContext = buildExecutionContext(isPmCommand, isPmTrackerReadCommand, requestedPmContextMode, effectivePmContextMode, autoPmContextApplied);
1291
- if (!linkedTest.command) {
1292
- results.push({
1293
- command: linkedTest.command,
1294
- path: linkedTest.path,
1295
- status: "skipped",
1296
- execution_context: executionContext,
1297
- error: "No command configured for this linked test.",
1298
- });
1299
- continue;
1300
- }
1301
- const runtimeSafetySkipReason = getRuntimeSafetySkipReason(linkedTest.command);
1302
- if (runtimeSafetySkipReason) {
1303
- results.push({
1304
- command: linkedTest.command,
1305
- path: linkedTest.path,
1306
- status: "skipped",
1307
- execution_context: executionContext,
1308
- error: runtimeSafetySkipReason,
1309
- });
1310
- continue;
1311
- }
1312
- const failOnMismatchByDefault = executionContext.pm_context_mode === "schema" &&
1313
- executionContext.is_pm_tracker_read_command &&
1314
- executionContext.mismatch_detected;
1315
- const failOnMismatchByFlag = options?.failOnContextMismatch === true && executionContext.is_pm_command && executionContext.mismatch_detected;
1316
- if (failOnMismatchByDefault || failOnMismatchByFlag) {
1317
- const mismatchHint = buildPmContextMismatchHint({
1318
- executionContext,
1319
- runLevelPmContextMode,
1320
- linkedOverridePmContextMode,
1321
- });
1322
- const mismatchPrefix = options?.checkContext === true ? "Linked test preflight PM context mismatch detected" : "Linked test PM context mismatch detected";
1323
- results.push({
1324
- command: linkedTest.command,
1325
- path: linkedTest.path,
1326
- status: "failed",
1327
- exit_code: 1,
1328
- failure_category: "assertion_failure",
1329
- execution_context: executionContext,
1330
- error: `${mismatchPrefix} (source_project_items=${executionContext.source_project_item_count}, ` +
1331
- `sandbox_project_items=${executionContext.sandbox_project_item_count}).${mismatchHint}`,
1332
- });
1333
- continue;
1334
- }
1335
- if (options?.requireAssertionsForPm === true && executionContext.is_pm_command && !hasLinkedTestAssertions(linkedTest)) {
1336
- results.push({
1337
- command: linkedTest.command,
1338
- path: linkedTest.path,
1339
- status: "failed",
1340
- exit_code: 1,
1341
- failure_category: "assertion_failure",
1342
- execution_context: executionContext,
1343
- error: "Linked PM command requires assertions when --require-assertions-for-pm is enabled.",
1344
- });
1345
- continue;
1346
- }
1347
- const timeoutMs = ((linkedTest.timeout_seconds ?? defaultTimeoutSeconds ?? 120) * 1000);
1348
- const effectiveDirectives = resolveEffectiveLinkedTestDirectives(runtimeDirectives, linkedTest);
1349
- const executionEnv = { ...process.env };
1350
- applyEnvDirectiveStage(executionEnv, runtimeDirectives);
1351
- applyEnvDirectiveStage(executionEnv, {
1352
- env_set: linkedTest.env_set ?? {},
1353
- env_clear: linkedTest.env_clear ?? [],
1448
+ const commandContext = resolveLinkedTestCommandContext({
1449
+ linkedTest,
1450
+ layout,
1451
+ counts,
1452
+ sourceRoots,
1453
+ runLevelPmContextMode,
1454
+ options,
1354
1455
  });
1355
- if (effectiveDirectives.shared_host_safe) {
1356
- applySharedHostSafeDefaults(executionEnv);
1357
- }
1358
- executionEnv.FORCE_COLOR = "0";
1359
- executionEnv.PM_PATH = executionContext.sandbox_project_pm_path;
1360
- executionEnv.PM_GLOBAL_PATH = executionContext.sandbox_global_pm_path;
1361
- const execution = await runLinkedTestCommand(linkedTest.command, timeoutMs, executionEnv, {
1362
- index: index + 1,
1363
- total: tests.length,
1364
- timeoutMs,
1365
- command: linkedTest.command,
1366
- }, progressMode);
1367
- const passed = execution.exitCode === 0 && !execution.timedOut && !execution.maxBufferExceeded;
1368
- if (passed) {
1369
- if (options?.failOnEmptyTestRun === true) {
1370
- const emptyRunSignal = detectEmptyLinkedTestRun(execution.stdout, execution.stderr);
1371
- if (emptyRunSignal) {
1372
- results.push({
1373
- command: linkedTest.command,
1374
- path: linkedTest.path,
1375
- status: "failed",
1376
- exit_code: 1,
1377
- failure_category: "empty_run",
1378
- execution_context: executionContext,
1379
- stdout: execution.stdout,
1380
- stderr: execution.stderr,
1381
- error: `Linked test reported an empty test run (${emptyRunSignal}) while --fail-on-empty-test-run is enabled. ` +
1382
- "Update test selection or disable --fail-on-empty-test-run for this run.",
1383
- });
1384
- continue;
1385
- }
1386
- }
1387
- const assertionFailures = evaluateLinkedTestAssertions(linkedTest, execution.stdout, execution.stderr);
1388
- if (assertionFailures.length > 0) {
1389
- results.push({
1390
- command: linkedTest.command,
1391
- path: linkedTest.path,
1392
- status: "failed",
1393
- exit_code: 1,
1394
- failure_category: "assertion_failure",
1395
- execution_context: executionContext,
1396
- stdout: execution.stdout,
1397
- stderr: execution.stderr,
1398
- error: `Linked test assertion(s) failed: ${assertionFailures.join("; ")}`,
1399
- });
1400
- continue;
1401
- }
1402
- results.push({
1403
- command: linkedTest.command,
1404
- path: linkedTest.path,
1405
- status: "passed",
1406
- exit_code: 0,
1407
- execution_context: executionContext,
1408
- stdout: execution.stdout,
1409
- stderr: execution.stderr,
1410
- });
1456
+ const preflightResult = resolveLinkedTestPreflightResult({
1457
+ linkedTest,
1458
+ executionContext: commandContext.executionContext,
1459
+ runLevelPmContextMode,
1460
+ linkedOverridePmContextMode: commandContext.linkedOverridePmContextMode,
1461
+ options,
1462
+ });
1463
+ if (preflightResult) {
1464
+ results.push(preflightResult);
1411
1465
  continue;
1412
1466
  }
1413
- const failureCategory = classifyLinkedTestFailure(execution);
1414
- results.push({
1415
- command: linkedTest.command,
1416
- path: linkedTest.path,
1417
- status: "failed",
1418
- exit_code: resolveLinkedTestFailureExitCode(execution),
1419
- failure_category: failureCategory,
1420
- execution_context: executionContext,
1421
- stdout: execution.stdout,
1422
- stderr: execution.stderr,
1423
- error: formatLinkedTestExecutionError(execution, timeoutMs),
1424
- });
1467
+ results.push(await runSingleLinkedTest({
1468
+ linkedTest,
1469
+ index,
1470
+ total: tests.length,
1471
+ defaultTimeoutSeconds,
1472
+ runtimeDirectives,
1473
+ progressMode,
1474
+ executionContext: commandContext.executionContext,
1475
+ options,
1476
+ }));
1425
1477
  }
1426
1478
  }
1427
1479
  finally {
1428
- await rm(sandboxRoot, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
1480
+ await rm(layout.root, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 });
1429
1481
  }
1430
1482
  return results;
1431
1483
  }
1432
- /**
1433
- * Implements run test for the public runtime surface of this module.
1434
- */
1435
- export async function runTest(id, options, global) {
1436
- const stdinResolver = createStdinTokenResolver();
1437
- const pmRoot = resolvePmRoot(process.cwd(), global.path);
1438
- if (!(await pathExists(getSettingsPath(pmRoot)))) {
1439
- throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1440
- }
1441
- const settings = await readSettings(pmRoot);
1442
- const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1443
- const resolvedAdds = await stdinResolver.resolveList(options.add, "--add");
1444
- const resolvedAddJsons = await stdinResolver.resolveList(options.addJson, "--add-json");
1445
- const resolvedRemoves = await stdinResolver.resolveList(options.remove, "--remove");
1446
- const adds = [...parseAddEntries(resolvedAdds), ...parseAddJsonEntries(resolvedAddJsons)];
1447
- const removes = parseRemoveEntries(resolvedRemoves);
1448
- const shouldMutate = adds.length > 0 || removes.length > 0;
1449
- let tests = [];
1450
- let itemId;
1451
- let changed = false;
1452
- if (shouldMutate) {
1453
- const author = resolveAuthor(options.author, settings.author_default);
1454
- const result = await mutateItem({
1455
- pmRoot,
1456
- settings,
1457
- id,
1458
- op: "tests_add",
1459
- author,
1460
- message: options.message,
1461
- force: options.force,
1462
- skipNoop: true,
1463
- mutate(document) {
1464
- const previous = document.metadata.tests ?? [];
1465
- const next = [...(document.metadata.tests ?? [])];
1466
- for (const add of adds) {
1467
- const exists = next.some((entry) => entry.command === add.command &&
1468
- entry.path === add.path &&
1469
- entry.scope === add.scope &&
1470
- entry.pm_context_mode === add.pm_context_mode);
1471
- if (!exists) {
1472
- next.push(add);
1473
- }
1474
- }
1475
- if (removes.length > 0) {
1476
- for (let i = next.length - 1; i >= 0; i -= 1) {
1477
- const entry = next[i];
1478
- if (removes.includes(entry.path ?? "") || removes.includes(entry.command ?? "")) {
1479
- next.splice(i, 1);
1480
- }
1481
- }
1482
- }
1483
- document.metadata.tests = next;
1484
- return { changedFields: stableValueEquals(previous, next) ? [] : ["tests"] };
1485
- },
1486
- });
1487
- tests = result.item.tests ?? [];
1488
- itemId = result.item.id;
1489
- changed = result.changedFields.length > 0;
1490
- }
1491
- else {
1492
- const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeRegistry.type_to_folder);
1493
- if (!located) {
1494
- throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
1495
- }
1496
- itemId = located.id;
1497
- const loaded = await readLocatedItem(located, { schema: settings.schema });
1498
- tests = loaded.document.metadata.tests ?? [];
1499
- }
1500
- let defaultTimeoutSeconds;
1501
- if (options.timeout !== undefined) {
1502
- defaultTimeoutSeconds = parseOptionalNumber(options.timeout, "timeout");
1503
- }
1504
- const pmContextMode = parsePmContextMode(options.pmContext);
1505
- const hasRuntimeDirectiveFlags = (options.envSet?.length ?? 0) > 0 ||
1484
+ function hasTestRuntimeDirectiveFlags(options) {
1485
+ return ((options.envSet?.length ?? 0) > 0 ||
1506
1486
  (options.envClear?.length ?? 0) > 0 ||
1507
1487
  options.sharedHostSafe === true ||
1508
1488
  options.pmContext !== undefined ||
@@ -1512,43 +1492,105 @@ export async function runTest(id, options, global) {
1512
1492
  options.failOnEmptyTestRun === true ||
1513
1493
  options.requireAssertionsForPm === true ||
1514
1494
  options.checkContext === true ||
1515
- options.autoPmContext === true;
1516
- if (hasRuntimeDirectiveFlags && options.run !== true) {
1495
+ options.autoPmContext === true);
1496
+ }
1497
+ function assertTestRunFlagUsage(options) {
1498
+ if (hasTestRuntimeDirectiveFlags(options) && options.run !== true) {
1517
1499
  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);
1518
1500
  }
1519
1501
  const hasSelectorFlags = options.match !== undefined || options.onlyIndex !== undefined || options.onlyLast === true;
1520
1502
  if (hasSelectorFlags && options.run !== true) {
1521
1503
  throw new PmCliError("--match, --only-index, and --only-last require --run", EXIT_CODE.USAGE);
1522
1504
  }
1505
+ }
1506
+ async function resolveLinkedTestItem(params) {
1507
+ const { id, options, pmRoot, settings, typeToFolder, adds, removes } = params;
1508
+ if (adds.length === 0 && removes.length === 0) {
1509
+ const located = await locateItem(pmRoot, id, settings.id_prefix, settings.item_format, typeToFolder);
1510
+ if (!located) {
1511
+ throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);
1512
+ }
1513
+ const loaded = await readLocatedItem(located, { schema: settings.schema });
1514
+ return { itemId: located.id, tests: loaded.document.metadata.tests ?? [], changed: false };
1515
+ }
1516
+ const result = await mutateItem({
1517
+ pmRoot,
1518
+ settings,
1519
+ id,
1520
+ op: "tests_add",
1521
+ author: resolveAuthor(options.author, settings.author_default),
1522
+ message: options.message,
1523
+ force: options.force,
1524
+ skipNoop: true,
1525
+ mutate(document) {
1526
+ const previous = document.metadata.tests ?? [];
1527
+ const next = [...previous];
1528
+ for (const add of adds) {
1529
+ const exists = next.some((entry) => entry.command === add.command &&
1530
+ entry.path === add.path &&
1531
+ entry.scope === add.scope &&
1532
+ entry.pm_context_mode === add.pm_context_mode);
1533
+ if (!exists) {
1534
+ next.push(add);
1535
+ }
1536
+ }
1537
+ if (removes.length > 0) {
1538
+ for (let i = next.length - 1; i >= 0; i -= 1) {
1539
+ const entry = next[i];
1540
+ if (removes.includes(entry.path ?? "") || removes.includes(entry.command ?? "")) {
1541
+ next.splice(i, 1);
1542
+ }
1543
+ }
1544
+ }
1545
+ document.metadata.tests = next;
1546
+ return { changedFields: stableValueEquals(previous, next) ? [] : ["tests"] };
1547
+ },
1548
+ });
1549
+ return {
1550
+ itemId: result.item.id,
1551
+ tests: result.item.tests ?? [],
1552
+ changed: result.changedFields.length > 0,
1553
+ };
1554
+ }
1555
+ function resolveTestRunOptions(options, tests) {
1556
+ assertTestRunFlagUsage(options);
1523
1557
  const selectorInput = {
1524
1558
  match: options.match,
1525
1559
  onlyIndex: options.onlyIndex === undefined ? undefined : parseOnlyIndexValue(options.onlyIndex),
1526
1560
  onlyLast: options.onlyLast,
1527
1561
  };
1528
1562
  const runSelection = options.run === true ? resolveLinkedTestRunSelection(tests, selectorInput) : undefined;
1529
- const testsToRun = runSelection?.selected ?? tests;
1530
- const runStartedAt = options.run === true ? nowIso() : undefined;
1531
- const runResults = options.run === true
1532
- ? await runLinkedTests(testsToRun, defaultTimeoutSeconds, {
1533
- progress: options.progress,
1534
- envSet: options.envSet,
1535
- envClear: options.envClear,
1536
- sharedHostSafe: options.sharedHostSafe,
1537
- pmContext: pmContextMode,
1538
- overrideLinkedPmContext: options.overrideLinkedPmContext,
1539
- failOnContextMismatch: options.failOnContextMismatch,
1540
- failOnEmptyTestRun: options.failOnEmptyTestRun,
1541
- requireAssertionsForPm: options.requireAssertionsForPm,
1542
- checkContext: options.checkContext,
1543
- autoPmContext: options.autoPmContext,
1544
- sourceRoots: {
1545
- projectPmRoot: pmRoot,
1546
- globalPmRoot: resolveGlobalPmRoot(process.cwd()),
1547
- },
1548
- })
1549
- : [];
1550
- const failureCategories = countFailureCategories(runResults);
1551
- const failOnSkippedTriggered = options.run === true && options.failOnSkipped === true && runResults.some((entry) => entry.status === "skipped");
1563
+ return {
1564
+ defaultTimeoutSeconds: options.timeout === undefined ? undefined : parseOptionalNumber(options.timeout, "timeout"),
1565
+ pmContextMode: parsePmContextMode(options.pmContext),
1566
+ runSelection,
1567
+ testsToRun: runSelection?.selected ?? tests,
1568
+ };
1569
+ }
1570
+ async function executeSelectedLinkedTests(params) {
1571
+ const { options, runOptions, pmRoot } = params;
1572
+ if (options.run !== true) {
1573
+ return [];
1574
+ }
1575
+ return await runLinkedTests(runOptions.testsToRun, runOptions.defaultTimeoutSeconds, {
1576
+ progress: options.progress,
1577
+ envSet: options.envSet,
1578
+ envClear: options.envClear,
1579
+ sharedHostSafe: options.sharedHostSafe,
1580
+ pmContext: runOptions.pmContextMode,
1581
+ overrideLinkedPmContext: options.overrideLinkedPmContext,
1582
+ failOnContextMismatch: options.failOnContextMismatch,
1583
+ failOnEmptyTestRun: options.failOnEmptyTestRun,
1584
+ requireAssertionsForPm: options.requireAssertionsForPm,
1585
+ checkContext: options.checkContext,
1586
+ autoPmContext: options.autoPmContext,
1587
+ sourceRoots: {
1588
+ projectPmRoot: pmRoot,
1589
+ globalPmRoot: resolveGlobalPmRoot(process.cwd()),
1590
+ },
1591
+ });
1592
+ }
1593
+ function buildTestWarnings(options, runSelection, runResults) {
1552
1594
  const warnings = [];
1553
1595
  if (runSelection && runSelection.selector !== null) {
1554
1596
  warnings.push(`linked_test_selection:${runSelection.selector}=${runSelection.requested};selected=${runSelection.selected_count};skipped=${runSelection.skipped_count};indexes=${runSelection.selected_indexes.join(",")}`);
@@ -1560,58 +1602,96 @@ export async function runTest(id, options, global) {
1560
1602
  `mismatches=${preflight.mismatches};` +
1561
1603
  `auto_remediated=${preflight.auto_remediated}`);
1562
1604
  }
1563
- if (options.run === true && runStartedAt && settings.testing.record_results_to_items === true) {
1564
- const summary = summarizeRunResultStatuses(runResults);
1565
- const trackedRunId = resolveTrackedRunId("test");
1566
- const attemptRaw = process.env.PM_BACKGROUND_TEST_RUN_ATTEMPT?.trim();
1567
- const parsedAttempt = attemptRaw ? Number.parseInt(attemptRaw, 10) : Number.NaN;
1568
- const resumedFrom = process.env.PM_BACKGROUND_TEST_RUN_RESUMED_FROM?.trim();
1569
- try {
1570
- await appendTrackedTestRunSummary({
1571
- pmRoot,
1572
- settings,
1573
- itemId,
1574
- author: resolveAuthor(options.author, settings.author_default),
1575
- message: `Track test run summary (${trackedRunId})`,
1576
- entry: {
1577
- run_id: trackedRunId,
1578
- kind: "test",
1579
- status: summary.failed > 0 || failOnSkippedTriggered === true ? "failed" : "passed",
1580
- started_at: runStartedAt,
1581
- finished_at: nowIso(),
1582
- recorded_at: nowIso(),
1583
- attempt: Number.isFinite(parsedAttempt) && parsedAttempt >= 1 ? parsedAttempt : undefined,
1584
- resumed_from: resumedFrom && resumedFrom.length > 0 ? resumedFrom : undefined,
1585
- passed: summary.passed,
1586
- failed: summary.failed,
1587
- skipped: summary.skipped,
1588
- fail_on_skipped_triggered: failOnSkippedTriggered ? true : undefined,
1589
- },
1590
- });
1591
- }
1592
- catch (error) {
1593
- warnings.push(`test_result_tracking_failed:${itemId}:${error instanceof Error ? error.message : String(error)}`);
1594
- }
1605
+ return warnings;
1606
+ }
1607
+ async function recordTestRunSummary(params) {
1608
+ const { options, pmRoot, settings, itemId, runStartedAt, runResults, failOnSkippedTriggered, warnings } = params;
1609
+ if (options.run !== true || !runStartedAt || settings.testing.record_results_to_items !== true) {
1610
+ return;
1595
1611
  }
1612
+ const summary = summarizeRunResultStatuses(runResults);
1613
+ const trackedRunId = resolveTrackedRunId("test");
1614
+ const attemptRaw = process.env.PM_BACKGROUND_TEST_RUN_ATTEMPT?.trim();
1615
+ const parsedAttempt = attemptRaw ? Number.parseInt(attemptRaw, 10) : Number.NaN;
1616
+ const resumedFrom = process.env.PM_BACKGROUND_TEST_RUN_RESUMED_FROM?.trim();
1617
+ try {
1618
+ await appendTrackedTestRunSummary({
1619
+ pmRoot,
1620
+ settings,
1621
+ itemId,
1622
+ author: resolveAuthor(options.author, settings.author_default),
1623
+ message: `Track test run summary (${trackedRunId})`,
1624
+ entry: {
1625
+ run_id: trackedRunId,
1626
+ kind: "test",
1627
+ status: summary.failed > 0 || failOnSkippedTriggered === true ? "failed" : "passed",
1628
+ started_at: runStartedAt,
1629
+ finished_at: nowIso(),
1630
+ recorded_at: nowIso(),
1631
+ attempt: Number.isFinite(parsedAttempt) && parsedAttempt >= 1 ? parsedAttempt : undefined,
1632
+ resumed_from: resumedFrom && resumedFrom.length > 0 ? resumedFrom : undefined,
1633
+ passed: summary.passed,
1634
+ failed: summary.failed,
1635
+ skipped: summary.skipped,
1636
+ fail_on_skipped_triggered: failOnSkippedTriggered ? true : undefined,
1637
+ },
1638
+ });
1639
+ }
1640
+ catch (error) {
1641
+ warnings.push(`test_result_tracking_failed:${itemId}:${error instanceof Error ? error.message : String(error)}`);
1642
+ }
1643
+ }
1644
+ /**
1645
+ * Implements run test for the public runtime surface of this module.
1646
+ */
1647
+ export async function runTest(id, options, global) {
1648
+ const stdinResolver = createStdinTokenResolver();
1649
+ const pmRoot = resolvePmRoot(process.cwd(), global.path);
1650
+ if (!(await pathExists(getSettingsPath(pmRoot)))) {
1651
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1652
+ }
1653
+ const settings = await readSettings(pmRoot);
1654
+ const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1655
+ const resolvedAdds = await stdinResolver.resolveList(options.add, "--add");
1656
+ const resolvedAddJsons = await stdinResolver.resolveList(options.addJson, "--add-json");
1657
+ const resolvedRemoves = await stdinResolver.resolveList(options.remove, "--remove");
1658
+ const adds = [...parseAddEntries(resolvedAdds), ...parseAddJsonEntries(resolvedAddJsons)];
1659
+ const removes = parseRemoveEntries(resolvedRemoves);
1660
+ const item = await resolveLinkedTestItem({
1661
+ id,
1662
+ options,
1663
+ pmRoot,
1664
+ settings,
1665
+ typeToFolder: typeRegistry.type_to_folder,
1666
+ adds,
1667
+ removes,
1668
+ });
1669
+ const runOptions = resolveTestRunOptions(options, item.tests);
1670
+ const runStartedAt = options.run === true ? nowIso() : undefined;
1671
+ const runResults = await executeSelectedLinkedTests({ options, runOptions, pmRoot });
1672
+ const failureCategories = countFailureCategories(runResults);
1673
+ const failOnSkippedTriggered = options.run === true && options.failOnSkipped === true && runResults.some((entry) => entry.status === "skipped");
1674
+ const warnings = buildTestWarnings(options, runOptions.runSelection, runResults);
1675
+ await recordTestRunSummary({ options, pmRoot, settings, itemId: item.itemId, runStartedAt, runResults, failOnSkippedTriggered, warnings });
1596
1676
  return {
1597
1677
  ok: runResults.every((entry) => entry.status !== "failed") && failOnSkippedTriggered !== true,
1598
- id: itemId,
1599
- tests,
1678
+ id: item.itemId,
1679
+ tests: item.tests,
1600
1680
  run_results: runResults,
1601
1681
  failure_categories: failureCategories,
1602
- selection: runSelection
1682
+ selection: runOptions.runSelection
1603
1683
  ? {
1604
- selector: runSelection.selector,
1605
- requested: runSelection.requested,
1606
- selected_indexes: runSelection.selected_indexes,
1607
- selected_count: runSelection.selected_count,
1608
- skipped_count: runSelection.skipped_count,
1684
+ selector: runOptions.runSelection.selector,
1685
+ requested: runOptions.runSelection.requested,
1686
+ selected_indexes: runOptions.runSelection.selected_indexes,
1687
+ selected_count: runOptions.runSelection.selected_count,
1688
+ skipped_count: runOptions.runSelection.skipped_count,
1609
1689
  }
1610
1690
  : undefined,
1611
1691
  fail_on_skipped_triggered: failOnSkippedTriggered ? true : undefined,
1612
1692
  warnings: warnings.length > 0 ? warnings : undefined,
1613
- changed,
1614
- count: tests.length,
1693
+ changed: item.changed,
1694
+ count: item.tests.length,
1615
1695
  };
1616
1696
  }
1617
1697
  /* c8 ignore stop */
@@ -1642,4 +1722,4 @@ export const _testOnlyTestCommand = {
1642
1722
  summarizeRunResultStatuses,
1643
1723
  };
1644
1724
  //# sourceMappingURL=test.js.map
1645
- //# debugId=8f5d4783-6790-59c5-b9fa-9b1f1abd13b9
1725
+ //# debugId=caa941ed-c848-506c-9a3c-3d4959be0246