@unbrained/pm-cli 2026.7.14 → 2026.7.15

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 (708) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +48 -0
  3. package/README.md +14 -11
  4. package/dist/cli/argv-utils.d.ts +1 -4
  5. package/dist/cli/argv-utils.js +3 -13
  6. package/dist/cli/argv-utils.js.map +1 -1
  7. package/dist/cli/bootstrap-args.d.ts +6 -4
  8. package/dist/cli/bootstrap-args.js +51 -16
  9. package/dist/cli/bootstrap-args.js.map +1 -1
  10. package/dist/cli/bundle-integrity.d.ts +49 -0
  11. package/dist/cli/bundle-integrity.js +111 -0
  12. package/dist/cli/bundle-integrity.js.map +1 -0
  13. package/dist/cli/commands/completion.js +7 -2
  14. package/dist/cli/commands/completion.js.map +1 -1
  15. package/dist/cli/commands/config.d.ts +6 -163
  16. package/dist/cli/commands/config.js +4 -1133
  17. package/dist/cli/commands/config.js.map +1 -1
  18. package/dist/cli/commands/context.d.ts +2 -4
  19. package/dist/cli/commands/context.js +10 -85
  20. package/dist/cli/commands/context.js.map +1 -1
  21. package/dist/cli/commands/create.d.ts +1 -0
  22. package/dist/cli/commands/create.js +3 -2
  23. package/dist/cli/commands/create.js.map +1 -1
  24. package/dist/cli/commands/extension/describe.d.ts +2 -91
  25. package/dist/cli/commands/extension/describe.js +4 -142
  26. package/dist/cli/commands/extension/describe.js.map +1 -1
  27. package/dist/cli/commands/extension/scaffold.d.ts +2 -36
  28. package/dist/cli/commands/extension/scaffold.js +4 -2435
  29. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  30. package/dist/cli/commands/extension/shared.d.ts +2 -28
  31. package/dist/cli/commands/extension/shared.js +4 -130
  32. package/dist/cli/commands/extension/shared.js.map +1 -1
  33. package/dist/cli/commands/extension.d.ts +3 -400
  34. package/dist/cli/commands/extension.js +4 -2183
  35. package/dist/cli/commands/extension.js.map +1 -1
  36. package/dist/cli/commands/gc.d.ts +6 -56
  37. package/dist/cli/commands/gc.js +4 -270
  38. package/dist/cli/commands/gc.js.map +1 -1
  39. package/dist/cli/commands/get.d.ts +18 -5
  40. package/dist/cli/commands/get.js +117 -58
  41. package/dist/cli/commands/get.js.map +1 -1
  42. package/dist/cli/commands/health.d.ts +6 -184
  43. package/dist/cli/commands/health.js +4 -1747
  44. package/dist/cli/commands/health.js.map +1 -1
  45. package/dist/cli/commands/history-compact.d.ts +4 -139
  46. package/dist/cli/commands/history-compact.js +5 -510
  47. package/dist/cli/commands/history-compact.js.map +1 -1
  48. package/dist/cli/commands/history-redact.d.ts +8 -120
  49. package/dist/cli/commands/history-redact.js +6 -581
  50. package/dist/cli/commands/history-redact.js.map +1 -1
  51. package/dist/cli/commands/history-repair.d.ts +7 -89
  52. package/dist/cli/commands/history-repair.js +5 -257
  53. package/dist/cli/commands/history-repair.js.map +1 -1
  54. package/dist/cli/commands/history.d.ts +1 -2
  55. package/dist/cli/commands/history.js +6 -48
  56. package/dist/cli/commands/history.js.map +1 -1
  57. package/dist/cli/commands/index.d.ts +1 -0
  58. package/dist/cli/commands/index.js +3 -2
  59. package/dist/cli/commands/index.js.map +1 -1
  60. package/dist/cli/commands/init-agent-guidance.d.ts +6 -113
  61. package/dist/cli/commands/init-agent-guidance.js +4 -431
  62. package/dist/cli/commands/init-agent-guidance.js.map +1 -1
  63. package/dist/cli/commands/init.d.ts +6 -181
  64. package/dist/cli/commands/init.js +4 -690
  65. package/dist/cli/commands/init.js.map +1 -1
  66. package/dist/cli/commands/next.js +3 -3
  67. package/dist/cli/commands/next.js.map +1 -1
  68. package/dist/cli/commands/profile.d.ts +4 -174
  69. package/dist/cli/commands/profile.js +4 -425
  70. package/dist/cli/commands/profile.js.map +1 -1
  71. package/dist/cli/commands/restore.d.ts +4 -19
  72. package/dist/cli/commands/restore.js +9 -158
  73. package/dist/cli/commands/restore.js.map +1 -1
  74. package/dist/cli/commands/schema.d.ts +7 -507
  75. package/dist/cli/commands/schema.js +5 -1254
  76. package/dist/cli/commands/schema.js.map +1 -1
  77. package/dist/cli/commands/test.d.ts +2 -4
  78. package/dist/cli/commands/test.js +7 -97
  79. package/dist/cli/commands/test.js.map +1 -1
  80. package/dist/cli/commands/validate.d.ts +9 -249
  81. package/dist/cli/commands/validate.js +9 -2150
  82. package/dist/cli/commands/validate.js.map +1 -1
  83. package/dist/cli/extension-command-help.js +18 -4
  84. package/dist/cli/extension-command-help.js.map +1 -1
  85. package/dist/cli/extension-command-options.js +3 -3
  86. package/dist/cli/extension-command-options.js.map +1 -1
  87. package/dist/cli/help-content.js +7 -3
  88. package/dist/cli/help-content.js.map +1 -1
  89. package/dist/cli/main.js +20 -30
  90. package/dist/cli/main.js.map +1 -1
  91. package/dist/cli/register-list-query.js +4 -2
  92. package/dist/cli/register-list-query.js.map +1 -1
  93. package/dist/cli/register-mutation.js +11 -3
  94. package/dist/cli/register-mutation.js.map +1 -1
  95. package/dist/cli/register-setup.js +4 -2
  96. package/dist/cli/register-setup.js.map +1 -1
  97. package/dist/cli/registration-helpers.js +3 -2
  98. package/dist/cli/registration-helpers.js.map +1 -1
  99. package/dist/cli-bundle/bundle-manifest.json +782 -0
  100. package/dist/cli-bundle/chunks/{append-PVZJDM6J.js → append-OJQFUQ4T.js} +5 -5
  101. package/dist/cli-bundle/chunks/append-UZVHUO74.js +11 -0
  102. package/dist/cli-bundle/chunks/{chunk-MQZ3PLCF.js → chunk-2IFFUZLC.js} +2 -2
  103. package/dist/cli-bundle/chunks/{chunk-P6MYFH6K.js → chunk-2JKGO6QX.js} +4 -4
  104. package/dist/cli-bundle/chunks/{chunk-X3GYR4P2.js → chunk-2NCIPMQP.js} +2 -2
  105. package/dist/cli-bundle/chunks/{chunk-Q7E6OYZK.js → chunk-2VPAVL7O.js} +2 -2
  106. package/dist/cli-bundle/chunks/{chunk-DRNJPEPQ.js → chunk-2WSE6PO2.js} +4 -4
  107. package/dist/cli-bundle/chunks/{chunk-FDSBDNYE.js → chunk-34L5OT3Y.js} +2 -2
  108. package/dist/cli-bundle/chunks/{chunk-TH7U4KLY.js → chunk-3AUGG2DP.js} +3 -3
  109. package/dist/cli-bundle/chunks/{chunk-NKW36AMT.js → chunk-3CLU2XZO.js} +4 -4
  110. package/dist/cli-bundle/chunks/{chunk-N3CMP4NI.js → chunk-3S5QVM5H.js} +43 -7
  111. package/dist/cli-bundle/chunks/chunk-3S5QVM5H.js.map +1 -0
  112. package/dist/cli-bundle/chunks/chunk-3U7ZR6M4.js +64 -0
  113. package/dist/cli-bundle/chunks/chunk-3U7ZR6M4.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-ABRCOSDC.js → chunk-3WM75PWC.js} +3 -3
  115. package/dist/cli-bundle/chunks/chunk-4223PVZT.js +121 -0
  116. package/dist/cli-bundle/chunks/chunk-4223PVZT.js.map +7 -0
  117. package/dist/cli-bundle/chunks/{chunk-5URI7TPJ.js → chunk-4XQ3BDV4.js} +281 -164
  118. package/dist/cli-bundle/chunks/chunk-4XQ3BDV4.js.map +7 -0
  119. package/dist/cli-bundle/chunks/{chunk-X6BVXQ52.js → chunk-5JLUII3O.js} +13 -13
  120. package/dist/cli-bundle/chunks/{chunk-MKL4CP2I.js → chunk-5ZSLZLDN.js} +631 -246
  121. package/dist/cli-bundle/chunks/chunk-5ZSLZLDN.js.map +1 -0
  122. package/dist/cli-bundle/chunks/{chunk-Q37E63AM.js → chunk-6CFNAVTF.js} +21 -141
  123. package/dist/cli-bundle/chunks/chunk-6CFNAVTF.js.map +7 -0
  124. package/dist/cli-bundle/chunks/{chunk-3TL7WOEF.js → chunk-6N2VXVTQ.js} +2 -2
  125. package/dist/cli-bundle/chunks/{chunk-ERL2YFJ2.js → chunk-6S3YSUYG.js} +3 -3
  126. package/dist/cli-bundle/chunks/{chunk-ZUKSZVBW.js → chunk-7B67ZL4N.js} +8 -7
  127. package/dist/cli-bundle/chunks/chunk-7B67ZL4N.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-IA3YFTXT.js → chunk-7PIWCHTW.js} +11 -13
  129. package/dist/cli-bundle/chunks/chunk-7PIWCHTW.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-BPD26E3P.js → chunk-7Z4LKRS4.js} +291 -81
  131. package/dist/cli-bundle/chunks/chunk-7Z4LKRS4.js.map +1 -0
  132. package/dist/cli-bundle/chunks/{chunk-IFZA4VB5.js → chunk-AHVTB5I5.js} +4 -4
  133. package/dist/cli-bundle/chunks/{chunk-DO5RGJXT.js → chunk-APRVSW2O.js} +3 -3
  134. package/dist/cli-bundle/chunks/{chunk-NAQYVWSQ.js → chunk-B7PE22W6.js} +4 -4
  135. package/dist/cli-bundle/chunks/{chunk-MD6ULIPJ.js → chunk-BCOFWYW4.js} +3 -3
  136. package/dist/cli-bundle/chunks/{chunk-KADLSPIU.js → chunk-BEP7WJA2.js} +4 -4
  137. package/dist/cli-bundle/chunks/chunk-BKVG6XOA.js +1114 -0
  138. package/dist/cli-bundle/chunks/chunk-BKVG6XOA.js.map +7 -0
  139. package/dist/cli-bundle/chunks/{chunk-AFWZRL7M.js → chunk-BSEQUTQP.js} +2 -2
  140. package/dist/cli-bundle/chunks/{chunk-AFWZRL7M.js.map → chunk-BSEQUTQP.js.map} +2 -2
  141. package/dist/cli-bundle/chunks/{chunk-OBDLEQG5.js → chunk-CRVF2JDM.js} +10 -10
  142. package/dist/cli-bundle/chunks/{chunk-FJZDA6MS.js → chunk-DM4H7FP4.js} +3 -3
  143. package/dist/cli-bundle/chunks/chunk-DUT67M43.js +5 -0
  144. package/dist/cli-bundle/chunks/{chunk-44LNIULG.js → chunk-DYH63FX7.js} +4 -4
  145. package/dist/cli-bundle/chunks/{chunk-LWTIRS3Y.js → chunk-E2OJMKML.js} +306 -82
  146. package/dist/cli-bundle/chunks/chunk-E2OJMKML.js.map +7 -0
  147. package/dist/cli-bundle/chunks/{chunk-HAMLIWAF.js → chunk-EAB64KLB.js} +4 -4
  148. package/dist/cli-bundle/chunks/{chunk-CIOZ376P.js → chunk-EACOH7AU.js} +10 -10
  149. package/dist/cli-bundle/chunks/{chunk-HL7V2PHX.js → chunk-EH2OPHBI.js} +10 -10
  150. package/dist/cli-bundle/chunks/{chunk-HL7V2PHX.js.map → chunk-EH2OPHBI.js.map} +1 -1
  151. package/dist/cli-bundle/chunks/{chunk-QK2ZN6UL.js → chunk-EJEXHTY5.js} +2 -2
  152. package/dist/cli-bundle/chunks/{chunk-WQUEHPZB.js → chunk-EYLCSJAI.js} +2 -2
  153. package/dist/cli-bundle/chunks/{chunk-655STMGA.js → chunk-FMBNM2EN.js} +2 -2
  154. package/dist/cli-bundle/chunks/{chunk-RMF3IOYQ.js → chunk-FNSPG7MU.js} +12 -12
  155. package/dist/cli-bundle/chunks/{chunk-5CT5BW6E.js → chunk-GM5QHQU6.js} +46 -40
  156. package/dist/cli-bundle/chunks/chunk-GM5QHQU6.js.map +7 -0
  157. package/dist/cli-bundle/chunks/{chunk-FTQLW4JD.js → chunk-GOSLKLFE.js} +418 -24
  158. package/dist/cli-bundle/chunks/chunk-GOSLKLFE.js.map +1 -0
  159. package/dist/cli-bundle/chunks/{chunk-KB726FMH.js → chunk-H2Z3FYXQ.js} +4 -4
  160. package/dist/cli-bundle/chunks/chunk-H3EIEWGR.js +162 -0
  161. package/dist/cli-bundle/chunks/chunk-H3EIEWGR.js.map +1 -0
  162. package/dist/cli-bundle/chunks/{chunk-2QIQGYPW.js → chunk-H5APFTHZ.js} +53 -10
  163. package/dist/cli-bundle/chunks/chunk-H5APFTHZ.js.map +7 -0
  164. package/dist/cli-bundle/chunks/chunk-HDH3JUGG.js +118 -0
  165. package/dist/cli-bundle/chunks/chunk-HDH3JUGG.js.map +1 -0
  166. package/dist/cli-bundle/chunks/{chunk-ZAYYDNB3.js → chunk-HO4KXD6I.js} +22 -142
  167. package/dist/cli-bundle/chunks/chunk-HO4KXD6I.js.map +1 -0
  168. package/dist/cli-bundle/chunks/{chunk-ILLUE5DI.js → chunk-HYB5AZ63.js} +203 -62
  169. package/dist/cli-bundle/chunks/{chunk-ILLUE5DI.js.map → chunk-HYB5AZ63.js.map} +3 -3
  170. package/dist/cli-bundle/chunks/{chunk-BN62TO2S.js → chunk-IA5FKNII.js} +2 -2
  171. package/dist/cli-bundle/chunks/{chunk-JL7WZ4O2.js → chunk-IG3SWA4A.js} +33 -9
  172. package/dist/cli-bundle/chunks/chunk-IG3SWA4A.js.map +7 -0
  173. package/dist/cli-bundle/chunks/{chunk-W6HZ55JO.js → chunk-IJIICKVW.js} +2 -2
  174. package/dist/cli-bundle/chunks/{chunk-IGED7NH2.js → chunk-ILX33QXL.js} +668 -251
  175. package/dist/cli-bundle/chunks/chunk-ILX33QXL.js.map +7 -0
  176. package/dist/cli-bundle/chunks/{chunk-UGTVWL3E.js → chunk-INU6DKT5.js} +47 -41
  177. package/dist/cli-bundle/chunks/chunk-INU6DKT5.js.map +1 -0
  178. package/dist/cli-bundle/chunks/{chunk-UB2QYSTO.js → chunk-J5AOEGDC.js} +26 -18
  179. package/dist/cli-bundle/chunks/chunk-J5AOEGDC.js.map +1 -0
  180. package/dist/cli-bundle/chunks/{chunk-4DY4KPQI.js → chunk-J6364LFM.js} +1330 -937
  181. package/dist/cli-bundle/chunks/chunk-J6364LFM.js.map +7 -0
  182. package/dist/cli-bundle/chunks/{chunk-DVOLZJ3C.js → chunk-J6EY5V4N.js} +1295 -939
  183. package/dist/cli-bundle/chunks/chunk-J6EY5V4N.js.map +1 -0
  184. package/dist/cli-bundle/chunks/chunk-JFTKLTEF.js +1097 -0
  185. package/dist/cli-bundle/chunks/chunk-JFTKLTEF.js.map +1 -0
  186. package/dist/cli-bundle/chunks/{chunk-M7EWN4TF.js → chunk-JOUQZENX.js} +3 -3
  187. package/dist/cli-bundle/chunks/{chunk-J4NZOP3I.js → chunk-JXQUXVMI.js} +9 -8
  188. package/dist/cli-bundle/chunks/chunk-JXQUXVMI.js.map +1 -0
  189. package/dist/cli-bundle/chunks/{chunk-2FNWQXZ2.js → chunk-JYFOV7FC.js} +4 -4
  190. package/dist/cli-bundle/chunks/{chunk-HLHSQ5CA.js → chunk-K2X6U4UA.js} +4 -4
  191. package/dist/cli-bundle/chunks/{chunk-6OTZMORS.js → chunk-K3WII2ME.js} +27 -27
  192. package/dist/cli-bundle/chunks/chunk-K3WII2ME.js.map +7 -0
  193. package/dist/cli-bundle/chunks/{chunk-M6ASXYCU.js → chunk-KG44YSKD.js} +4 -4
  194. package/dist/cli-bundle/chunks/{chunk-YVKE5ZDM.js → chunk-KPMKHGEA.js} +4 -4
  195. package/dist/cli-bundle/chunks/{chunk-QASRVKUQ.js → chunk-LPYWLWDS.js} +257 -163
  196. package/dist/cli-bundle/chunks/chunk-LPYWLWDS.js.map +1 -0
  197. package/dist/cli-bundle/chunks/{chunk-RGXD5JJR.js → chunk-LSG2U345.js} +19 -12
  198. package/dist/cli-bundle/chunks/chunk-LSG2U345.js.map +7 -0
  199. package/dist/cli-bundle/chunks/chunk-MIQDDLB5.js +5 -0
  200. package/dist/cli-bundle/chunks/{chunk-UJ4HJYWL.js → chunk-NLDFBC6J.js} +2 -2
  201. package/dist/cli-bundle/chunks/{chunk-WRKB56FC.js → chunk-NP22ERDF.js} +3 -3
  202. package/dist/cli-bundle/chunks/{chunk-YQYG2V23.js → chunk-NU3IMIEA.js} +2 -2
  203. package/dist/cli-bundle/chunks/{chunk-3I3LRT2G.js → chunk-NVPZIJVR.js} +2 -2
  204. package/dist/cli-bundle/chunks/{chunk-JAF4TUQ7.js → chunk-ODALILG3.js} +2 -2
  205. package/dist/cli-bundle/chunks/{chunk-CDJYP7OQ.js → chunk-ONG5V5CI.js} +190 -63
  206. package/dist/cli-bundle/chunks/chunk-ONG5V5CI.js.map +1 -0
  207. package/dist/cli-bundle/chunks/{chunk-QZ7LT3XE.js → chunk-ONREO4ST.js} +3 -3
  208. package/dist/cli-bundle/chunks/chunk-OW4JWD5M.js +61 -0
  209. package/dist/cli-bundle/chunks/chunk-OW4JWD5M.js.map +1 -0
  210. package/dist/cli-bundle/chunks/{chunk-3CMRNVTO.js → chunk-P74IZQ7A.js} +12 -12
  211. package/dist/cli-bundle/chunks/chunk-PENXZX3U.js +172 -0
  212. package/dist/cli-bundle/chunks/chunk-PENXZX3U.js.map +7 -0
  213. package/dist/cli-bundle/chunks/{chunk-ZTRBSABY.js → chunk-PGY23YTC.js} +3 -3
  214. package/dist/cli-bundle/chunks/{chunk-H2QBAKLQ.js → chunk-PMOSXADO.js} +3 -3
  215. package/dist/cli-bundle/chunks/chunk-PNTULOGU.js +9 -0
  216. package/dist/cli-bundle/chunks/{chunk-GSEADLRH.js → chunk-Q7A43DS4.js} +2 -2
  217. package/dist/cli-bundle/chunks/{chunk-QSPARJWF.js → chunk-QEHQ2GVG.js} +2 -2
  218. package/dist/cli-bundle/chunks/{chunk-VJTAEIPC.js → chunk-QIPLHNP7.js} +7 -7
  219. package/dist/cli-bundle/chunks/{chunk-GXXC7QSK.js → chunk-QKECXBBG.js} +3 -3
  220. package/dist/cli-bundle/chunks/{chunk-GXXC7QSK.js.map → chunk-QKECXBBG.js.map} +1 -1
  221. package/dist/cli-bundle/chunks/{chunk-K7WNZ7KD.js → chunk-QKJGPFAF.js} +3 -3
  222. package/dist/cli-bundle/chunks/{chunk-F7PSHRNO.js → chunk-QKXHFPYM.js} +27 -10
  223. package/dist/cli-bundle/chunks/chunk-QKXHFPYM.js.map +1 -0
  224. package/dist/cli-bundle/chunks/{chunk-ZNP64HOW.js → chunk-RLCHOOHC.js} +2 -2
  225. package/dist/cli-bundle/chunks/{chunk-IAPHYPRL.js → chunk-RMLWNPH2.js} +2 -2
  226. package/dist/cli-bundle/chunks/{chunk-UVBA6F5A.js → chunk-RRM5JYJC.js} +2 -2
  227. package/dist/cli-bundle/chunks/{chunk-6IIVBC56.js → chunk-S6MQESFR.js} +4 -4
  228. package/dist/cli-bundle/chunks/{chunk-QABYZYLU.js → chunk-SDQLJWBO.js} +4 -4
  229. package/dist/cli-bundle/chunks/{chunk-ANSJHDOZ.js → chunk-SELVXEZK.js} +2 -2
  230. package/dist/cli-bundle/chunks/{chunk-DYEX6NFH.js → chunk-TD3LVC7D.js} +438 -23
  231. package/dist/cli-bundle/chunks/chunk-TD3LVC7D.js.map +7 -0
  232. package/dist/cli-bundle/chunks/{chunk-WD6MSYMP.js → chunk-TKOVBP6C.js} +2 -2
  233. package/dist/cli-bundle/chunks/{chunk-TZ2PSLLT.js → chunk-TQSZFPIS.js} +4 -4
  234. package/dist/cli-bundle/chunks/{chunk-WPAWZW7S.js → chunk-TSMHDIW4.js} +2 -2
  235. package/dist/cli-bundle/chunks/{chunk-TZRTLMWM.js → chunk-UFXU44HV.js} +4 -4
  236. package/dist/cli-bundle/chunks/{chunk-TWLDBKQU.js → chunk-ULTHRDBP.js} +3 -3
  237. package/dist/cli-bundle/chunks/{chunk-OI4S4KCI.js → chunk-UMOPHQSU.js} +9 -9
  238. package/dist/cli-bundle/chunks/{chunk-OI4S4KCI.js.map → chunk-UMOPHQSU.js.map} +2 -2
  239. package/dist/cli-bundle/chunks/{chunk-RA5AIAMP.js → chunk-UOHFKBUV.js} +3 -3
  240. package/dist/cli-bundle/chunks/{chunk-PHKP3AGR.js → chunk-UWQHLMEB.js} +35 -18
  241. package/dist/cli-bundle/chunks/chunk-UWQHLMEB.js.map +7 -0
  242. package/dist/cli-bundle/chunks/{chunk-6TTOHMTB.js → chunk-UXONS674.js} +45 -112
  243. package/dist/cli-bundle/chunks/chunk-UXONS674.js.map +1 -0
  244. package/dist/cli-bundle/chunks/{chunk-4RXTMU57.js → chunk-UY2ACEMF.js} +7 -7
  245. package/dist/cli-bundle/chunks/{chunk-6PKA3SJQ.js → chunk-WQPUU7XD.js} +19 -28
  246. package/dist/cli-bundle/chunks/chunk-WQPUU7XD.js.map +1 -0
  247. package/dist/cli-bundle/chunks/{chunk-7TQMR6LK.js → chunk-WT3ZEOGH.js} +70 -20
  248. package/dist/cli-bundle/chunks/chunk-WT3ZEOGH.js.map +7 -0
  249. package/dist/cli-bundle/chunks/{chunk-FIGXOCEQ.js → chunk-WUJQK4YV.js} +4 -4
  250. package/dist/cli-bundle/chunks/{chunk-T4BRCB6Z.js → chunk-XSJUSQAE.js} +2 -2
  251. package/dist/cli-bundle/chunks/{chunk-6MHSBDGD.js → chunk-XXXF6PAQ.js} +50 -117
  252. package/dist/cli-bundle/chunks/chunk-XXXF6PAQ.js.map +7 -0
  253. package/dist/cli-bundle/chunks/{chunk-UKUIIBDW.js → chunk-YAQEBNY7.js} +4 -4
  254. package/dist/cli-bundle/chunks/{chunk-7QDSYUMF.js → chunk-YAROI3PD.js} +44 -21
  255. package/dist/cli-bundle/chunks/chunk-YAROI3PD.js.map +1 -0
  256. package/dist/cli-bundle/chunks/{chunk-E2WC6S4P.js → chunk-YBLZ2VE7.js} +13 -13
  257. package/dist/cli-bundle/chunks/{chunk-Y72FV7RM.js → chunk-YCQET3OT.js} +2 -2
  258. package/dist/cli-bundle/chunks/chunk-YUSOJDWM.js +9 -0
  259. package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js +58 -0
  260. package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js.map +1 -0
  261. package/dist/cli-bundle/chunks/{chunk-FS6UM5WH.js → chunk-ZI6VQWQ7.js} +4 -4
  262. package/dist/cli-bundle/chunks/chunk-ZKRZY773.js +68 -0
  263. package/dist/cli-bundle/chunks/chunk-ZKRZY773.js.map +7 -0
  264. package/dist/cli-bundle/chunks/{close-LZECOMHO.js → close-CWODTPKG.js} +5 -5
  265. package/dist/cli-bundle/chunks/close-W6LI2PKM.js +12 -0
  266. package/dist/cli-bundle/chunks/{close-many-ZHI6A5TN.js → close-many-CQFUY7MR.js} +15 -13
  267. package/dist/cli-bundle/chunks/close-many-DLDDVSH5.js +23 -0
  268. package/dist/cli-bundle/chunks/comments-E3TNTK24.js +13 -0
  269. package/dist/cli-bundle/chunks/{comments-AJWRTFZ5.js → comments-WGLHR7LB.js} +7 -7
  270. package/dist/cli-bundle/chunks/{copy-GMXYKBXT.js → copy-LXVDXH7B.js} +4 -4
  271. package/dist/cli-bundle/chunks/copy-Q5ZJPUKR.js +9 -0
  272. package/dist/cli-bundle/chunks/{create-F53OBTOU.js → create-J5U6ND4K.js} +9 -9
  273. package/dist/cli-bundle/chunks/{create-HU4Q7RJX.js → create-LBVCYMEG.js} +9 -9
  274. package/dist/cli-bundle/chunks/{delete-GSDZLTRC.js → delete-PMJBNY5G.js} +4 -4
  275. package/dist/cli-bundle/chunks/delete-WNHB3LYW.js +10 -0
  276. package/dist/cli-bundle/chunks/{deps-WWB7P2GT.js → deps-JZ7TMVCB.js} +7 -4
  277. package/dist/cli-bundle/chunks/{deps-U57I7EAK.js → deps-OA26IS25.js} +7 -4
  278. package/dist/cli-bundle/chunks/{docs-MQIY2ZQS.js → docs-FEWB2DQB.js} +6 -6
  279. package/dist/cli-bundle/chunks/docs-HA2AIDBB.js +14 -0
  280. package/dist/cli-bundle/chunks/{files-TBZD7V6H.js → files-6YFBJRBG.js} +6 -6
  281. package/dist/cli-bundle/chunks/{files-TTY6N2AV.js → files-EFIWKFTM.js} +6 -6
  282. package/dist/cli-bundle/chunks/{focus-XT6YVFFX.js → focus-4QJR7FOQ.js} +5 -5
  283. package/dist/cli-bundle/chunks/focus-POIW5LTJ.js +10 -0
  284. package/dist/cli-bundle/chunks/{history-compact-KKVUWB4V.js → history-compact-CKRPDTJN.js} +6 -10
  285. package/dist/cli-bundle/chunks/history-compact-FWG2C7FZ.js +16 -0
  286. package/dist/cli-bundle/chunks/history-redact-BB3TGDAE.js +15 -0
  287. package/dist/cli-bundle/chunks/{history-redact-3DVZOILD.js → history-redact-D225BHOZ.js} +5 -6
  288. package/dist/cli-bundle/chunks/history-repair-6GEAM7HE.js +16 -0
  289. package/dist/cli-bundle/chunks/{history-repair-ITDUMK4N.js → history-repair-RQXKQHL4.js} +6 -8
  290. package/dist/cli-bundle/chunks/{learnings-FGO3NSFW.js → learnings-JLNLCOL5.js} +7 -7
  291. package/dist/cli-bundle/chunks/learnings-RSNLSWDC.js +13 -0
  292. package/dist/cli-bundle/chunks/notes-2WDH6DXU.js +13 -0
  293. package/dist/cli-bundle/chunks/{notes-NQ6RXVW6.js → notes-GB47XXQQ.js} +7 -7
  294. package/dist/cli-bundle/chunks/plan-DOVI2VMW.js +24 -0
  295. package/dist/cli-bundle/chunks/{plan-2NNEO46V.js → plan-VDCJ2PCN.js} +10 -10
  296. package/dist/cli-bundle/chunks/{profile-AAQUU6T3.js → profile-FAU7NZML.js} +10 -10
  297. package/dist/cli-bundle/chunks/{profile-U725ATWZ.js → profile-IVXQEL3D.js} +10 -10
  298. package/dist/cli-bundle/chunks/{register-list-query-BUWCYHBT.js → register-list-query-DKA3EH5D.js} +22 -19
  299. package/dist/cli-bundle/chunks/register-list-query-DKA3EH5D.js.map +7 -0
  300. package/dist/cli-bundle/chunks/{register-list-query-KTZ6AGE7.js → register-list-query-UL4UKBBN.js} +23 -20
  301. package/dist/cli-bundle/chunks/register-list-query-UL4UKBBN.js.map +1 -0
  302. package/dist/cli-bundle/chunks/{register-mutation-UELYYOR7.js → register-mutation-ARFHRW55.js} +36 -32
  303. package/dist/cli-bundle/chunks/{register-mutation-UELYYOR7.js.map → register-mutation-ARFHRW55.js.map} +2 -2
  304. package/dist/cli-bundle/chunks/{register-mutation-4FMGJJF7.js → register-mutation-RBBJ52DK.js} +37 -33
  305. package/dist/cli-bundle/chunks/register-mutation-RBBJ52DK.js.map +1 -0
  306. package/dist/cli-bundle/chunks/{register-operations-JVW24J2Y.js → register-operations-ZIBBRSED.js} +41 -39
  307. package/dist/cli-bundle/chunks/{register-operations-JVW24J2Y.js.map → register-operations-ZIBBRSED.js.map} +1 -1
  308. package/dist/cli-bundle/chunks/{register-operations-ISUX6LY5.js → register-operations-ZUJ5JWPE.js} +39 -37
  309. package/dist/cli-bundle/chunks/{register-operations-ISUX6LY5.js.map → register-operations-ZUJ5JWPE.js.map} +1 -1
  310. package/dist/cli-bundle/chunks/{register-setup-5XNGKJ22.js → register-setup-BCVLFEYS.js} +29 -17
  311. package/dist/cli-bundle/chunks/{register-setup-5XNGKJ22.js.map → register-setup-BCVLFEYS.js.map} +2 -2
  312. package/dist/cli-bundle/chunks/{register-setup-ZTNY6S7R.js → register-setup-TDCGWIOS.js} +19 -18
  313. package/dist/cli-bundle/chunks/{register-setup-ZTNY6S7R.js.map → register-setup-TDCGWIOS.js.map} +1 -1
  314. package/dist/cli-bundle/chunks/{restore-B3BAB6X2.js → restore-25DLT2Q2.js} +6 -6
  315. package/dist/cli-bundle/chunks/restore-YPMVUUEX.js +14 -0
  316. package/dist/cli-bundle/chunks/{schema-U7IM2DXV.js → schema-FNU3WE4O.js} +7 -6
  317. package/dist/cli-bundle/chunks/{schema-LZNUYHDB.js → schema-NBCM3RAD.js} +7 -6
  318. package/dist/cli-bundle/chunks/update-WWBYOPXO.js +21 -0
  319. package/dist/cli-bundle/chunks/update-WWBYOPXO.js.map +7 -0
  320. package/dist/cli-bundle/chunks/{update-Q3UCILNR.js → update-XHSIAIXE.js} +12 -12
  321. package/dist/cli-bundle/chunks/update-XHSIAIXE.js.map +1 -0
  322. package/dist/cli-bundle/chunks/update-many-OUGIU5SF.js +32 -0
  323. package/dist/cli-bundle/chunks/update-many-OUGIU5SF.js.map +7 -0
  324. package/dist/cli-bundle/chunks/update-many-TA7NGQBO.js +36 -0
  325. package/dist/cli-bundle/chunks/update-many-TA7NGQBO.js.map +1 -0
  326. package/dist/cli-bundle/main.js +826 -43
  327. package/dist/cli-bundle/main.js.map +4 -4
  328. package/dist/cli-bundle/sdk-runtime.js +70 -57
  329. package/dist/cli-bundle/sdk-testing.js +6 -6
  330. package/dist/cli-bundle/sdk.js +876 -74
  331. package/dist/cli-bundle/sdk.js.map +4 -4
  332. package/dist/cli.js +5 -4
  333. package/dist/cli.js.map +1 -1
  334. package/dist/core/diagnostics/remediation.js +12 -2
  335. package/dist/core/diagnostics/remediation.js.map +1 -1
  336. package/dist/core/history/projection.d.ts +39 -0
  337. package/dist/core/history/projection.js +164 -0
  338. package/dist/core/history/projection.js.map +1 -0
  339. package/dist/core/history/read.d.ts +3 -0
  340. package/dist/core/history/read.js +55 -0
  341. package/dist/core/history/read.js.map +1 -0
  342. package/dist/core/output/output-control.d.ts +18 -0
  343. package/dist/core/output/output-control.js +26 -0
  344. package/dist/core/output/output-control.js.map +1 -0
  345. package/dist/core/output/output.js +20 -8
  346. package/dist/core/output/output.js.map +1 -1
  347. package/dist/core/sentry/helpers.js +10 -2
  348. package/dist/core/sentry/helpers.js.map +1 -1
  349. package/dist/core/shared/command-types.d.ts +2 -0
  350. package/dist/core/shared/command-types.js +2 -2
  351. package/dist/core/shared/command-types.js.map +1 -1
  352. package/dist/core/shared/errors.d.ts +11 -0
  353. package/dist/core/shared/errors.js +2 -2
  354. package/dist/core/shared/errors.js.map +1 -1
  355. package/dist/mcp/server.d.ts +2 -2
  356. package/dist/mcp/tool-definitions.js +5 -5
  357. package/dist/mcp/tool-definitions.js.map +1 -1
  358. package/dist/sdk/author-attribution.d.ts +35 -0
  359. package/dist/sdk/author-attribution.js +118 -0
  360. package/dist/sdk/author-attribution.js.map +1 -0
  361. package/dist/sdk/cli-contracts/command-aliases.d.ts +7 -0
  362. package/dist/sdk/cli-contracts/command-aliases.js +17 -0
  363. package/dist/sdk/cli-contracts/command-aliases.js.map +1 -0
  364. package/dist/sdk/cli-contracts/flag-contracts.js +5 -2
  365. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  366. package/dist/sdk/cli-contracts/tool-option-contracts.js +6 -2
  367. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  368. package/dist/sdk/cli-contracts/tool-parameter-tables.js +21 -2
  369. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  370. package/dist/sdk/cli-contracts/tool-schema.js +3 -3
  371. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  372. package/dist/sdk/cli-contracts.d.ts +1 -0
  373. package/dist/sdk/cli-contracts.js +3 -2
  374. package/dist/sdk/cli-contracts.js.map +1 -1
  375. package/dist/sdk/cli-program.d.ts +8 -0
  376. package/dist/sdk/cli-program.js +39 -0
  377. package/dist/sdk/cli-program.js.map +1 -0
  378. package/dist/sdk/command-line.d.ts +11 -0
  379. package/dist/sdk/command-line.js +40 -0
  380. package/dist/sdk/command-line.js.map +1 -0
  381. package/dist/sdk/config.d.ts +163 -0
  382. package/dist/sdk/config.js +1087 -0
  383. package/dist/sdk/config.js.map +1 -0
  384. package/dist/sdk/context-relevance.d.ts +21 -0
  385. package/dist/sdk/context-relevance.js +70 -2
  386. package/dist/sdk/context-relevance.js.map +1 -1
  387. package/dist/sdk/dependencies.d.ts +15 -2
  388. package/dist/sdk/dependencies.js +97 -8
  389. package/dist/sdk/dependencies.js.map +1 -1
  390. package/dist/{cli/commands → sdk}/extension/bundled-catalog.d.ts +1 -1
  391. package/dist/{cli/commands → sdk}/extension/bundled-catalog.js +12 -12
  392. package/dist/sdk/extension/bundled-catalog.js.map +1 -0
  393. package/dist/sdk/extension/concurrency.d.ts +7 -0
  394. package/dist/sdk/extension/concurrency.js +26 -0
  395. package/dist/sdk/extension/concurrency.js.map +1 -0
  396. package/dist/sdk/extension/describe.d.ts +91 -0
  397. package/dist/sdk/extension/describe.js +144 -0
  398. package/dist/sdk/extension/describe.js.map +1 -0
  399. package/dist/{cli/commands → sdk}/extension/doctor.d.ts +3 -3
  400. package/dist/{cli/commands → sdk}/extension/doctor.js +7 -7
  401. package/dist/sdk/extension/doctor.js.map +1 -0
  402. package/dist/sdk/extension/install-runtime.d.ts +26 -0
  403. package/dist/sdk/extension/install-runtime.js +269 -0
  404. package/dist/sdk/extension/install-runtime.js.map +1 -0
  405. package/dist/sdk/extension/install-snapshot.d.ts +23 -0
  406. package/dist/sdk/extension/install-snapshot.js +66 -0
  407. package/dist/sdk/extension/install-snapshot.js.map +1 -0
  408. package/dist/{cli/commands → sdk}/extension/install-sources.d.ts +3 -3
  409. package/dist/{cli/commands → sdk}/extension/install-sources.js +15 -12
  410. package/dist/sdk/extension/install-sources.js.map +1 -0
  411. package/dist/{cli/commands → sdk}/extension/managed-state.js +6 -6
  412. package/dist/sdk/extension/managed-state.js.map +1 -0
  413. package/dist/sdk/extension/scaffold.d.ts +36 -0
  414. package/dist/sdk/extension/scaffold.js +2436 -0
  415. package/dist/sdk/extension/scaffold.js.map +1 -0
  416. package/dist/sdk/extension/shared.d.ts +28 -0
  417. package/dist/sdk/extension/shared.js +140 -0
  418. package/dist/sdk/extension/shared.js.map +1 -0
  419. package/dist/sdk/extension/update-check.d.ts +15 -0
  420. package/dist/sdk/extension/update-check.js +68 -0
  421. package/dist/sdk/extension/update-check.js.map +1 -0
  422. package/dist/sdk/extension.d.ts +367 -0
  423. package/dist/sdk/extension.js +2174 -0
  424. package/dist/sdk/extension.js.map +1 -0
  425. package/dist/sdk/governance/gc.d.ts +56 -0
  426. package/dist/sdk/governance/gc.js +276 -0
  427. package/dist/sdk/governance/gc.js.map +1 -0
  428. package/dist/sdk/governance/health.d.ts +187 -0
  429. package/dist/sdk/governance/health.js +1796 -0
  430. package/dist/sdk/governance/health.js.map +1 -0
  431. package/dist/sdk/governance/validate.d.ts +255 -0
  432. package/dist/sdk/governance/validate.js +2175 -0
  433. package/dist/sdk/governance/validate.js.map +1 -0
  434. package/dist/sdk/history-compact.d.ts +142 -0
  435. package/dist/sdk/history-compact.js +508 -0
  436. package/dist/sdk/history-compact.js.map +1 -0
  437. package/dist/sdk/history-mcp.d.ts +17 -0
  438. package/dist/sdk/history-mcp.js +68 -0
  439. package/dist/sdk/history-mcp.js.map +1 -0
  440. package/dist/sdk/history-read.d.ts +31 -0
  441. package/dist/sdk/history-read.js +58 -0
  442. package/dist/sdk/history-read.js.map +1 -0
  443. package/dist/sdk/history-redact.d.ts +120 -0
  444. package/dist/sdk/history-redact.js +577 -0
  445. package/dist/sdk/history-redact.js.map +1 -0
  446. package/dist/sdk/history-repair.d.ts +89 -0
  447. package/dist/sdk/history-repair.js +263 -0
  448. package/dist/sdk/history-repair.js.map +1 -0
  449. package/dist/sdk/index.d.ts +25 -1
  450. package/dist/sdk/index.js +27 -3
  451. package/dist/sdk/index.js.map +1 -1
  452. package/dist/sdk/init-agent-guidance.d.ts +113 -0
  453. package/dist/sdk/init-agent-guidance.js +437 -0
  454. package/dist/sdk/init-agent-guidance.js.map +1 -0
  455. package/dist/sdk/init.d.ts +186 -0
  456. package/dist/sdk/init.js +733 -0
  457. package/dist/sdk/init.js.map +1 -0
  458. package/dist/sdk/invocation-author.d.ts +2 -0
  459. package/dist/sdk/invocation-author.js +39 -0
  460. package/dist/sdk/invocation-author.js.map +1 -0
  461. package/dist/sdk/item-children.d.ts +45 -0
  462. package/dist/sdk/item-children.js +75 -0
  463. package/dist/sdk/item-children.js.map +1 -0
  464. package/dist/sdk/item-schedule.d.ts +26 -0
  465. package/dist/sdk/item-schedule.js +28 -0
  466. package/dist/sdk/item-schedule.js.map +1 -0
  467. package/dist/sdk/output.d.ts +7 -0
  468. package/dist/sdk/output.js +11 -0
  469. package/dist/sdk/output.js.map +1 -0
  470. package/dist/sdk/pagination.d.ts +4 -1
  471. package/dist/sdk/pagination.js +13 -5
  472. package/dist/sdk/pagination.js.map +1 -1
  473. package/dist/sdk/profile.d.ts +176 -0
  474. package/dist/sdk/profile.js +431 -0
  475. package/dist/sdk/profile.js.map +1 -0
  476. package/dist/sdk/relationship-analytics.d.ts +108 -0
  477. package/dist/sdk/relationship-analytics.js +292 -0
  478. package/dist/sdk/relationship-analytics.js.map +1 -0
  479. package/dist/sdk/relationship-context.d.ts +67 -0
  480. package/dist/sdk/relationship-context.js +207 -0
  481. package/dist/sdk/relationship-context.js.map +1 -0
  482. package/dist/sdk/relationship-history.d.ts +109 -0
  483. package/dist/sdk/relationship-history.js +401 -0
  484. package/dist/sdk/relationship-history.js.map +1 -0
  485. package/dist/sdk/relationships.d.ts +145 -0
  486. package/dist/sdk/relationships.js +551 -0
  487. package/dist/sdk/relationships.js.map +1 -0
  488. package/dist/sdk/runtime-input.d.ts +10 -0
  489. package/dist/sdk/runtime-input.js +60 -0
  490. package/dist/sdk/runtime-input.js.map +1 -0
  491. package/dist/sdk/runtime.d.ts +31 -8
  492. package/dist/sdk/runtime.js +61 -57
  493. package/dist/sdk/runtime.js.map +1 -1
  494. package/dist/sdk/schema.d.ts +507 -0
  495. package/dist/sdk/schema.js +1269 -0
  496. package/dist/sdk/schema.js.map +1 -0
  497. package/dist/{cli/commands → sdk}/templates.d.ts +1 -1
  498. package/dist/{cli/commands → sdk}/templates.js +9 -9
  499. package/dist/sdk/templates.js.map +1 -0
  500. package/dist/{cli/commands → sdk}/test/linked-command-detection.d.ts +10 -2
  501. package/dist/sdk/test/linked-command-detection.js +525 -0
  502. package/dist/sdk/test/linked-command-detection.js.map +1 -0
  503. package/docs/COMMANDS.md +58 -40
  504. package/docs/EXTENSIONS.md +10 -1
  505. package/docs/RELATIONSHIP_GRAPH.md +113 -0
  506. package/docs/RELEASING.md +2 -0
  507. package/docs/SDK.md +156 -9
  508. package/docs/SDK_CUSTOMIZATION_PRIMITIVES.md +79 -0
  509. package/marketplace.json +2 -2
  510. package/package.json +3 -2
  511. package/packages/pm-beads/package.json +1 -1
  512. package/packages/pm-calendar/package.json +1 -1
  513. package/packages/pm-command-kit/package.json +1 -1
  514. package/packages/pm-governance-audit/extensions/governance-audit/runtime-utils.ts +76 -16
  515. package/packages/pm-governance-audit/extensions/governance-audit/sdk.ts +8 -0
  516. package/packages/pm-governance-audit/package.json +1 -1
  517. package/packages/pm-guide-shell/package.json +1 -1
  518. package/packages/pm-kanban/package.json +1 -1
  519. package/packages/pm-lifecycle-hooks/package.json +1 -1
  520. package/packages/pm-linked-test-adapters/package.json +1 -1
  521. package/packages/pm-search-advanced/package.json +1 -1
  522. package/packages/pm-templates/package.json +1 -1
  523. package/packages/pm-todos/package.json +1 -1
  524. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  525. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  526. package/scripts/bundle-cli.mjs +66 -23
  527. package/dist/cli/commands/extension/bundled-catalog.js.map +0 -1
  528. package/dist/cli/commands/extension/doctor.js.map +0 -1
  529. package/dist/cli/commands/extension/install-sources.js.map +0 -1
  530. package/dist/cli/commands/extension/managed-state.js.map +0 -1
  531. package/dist/cli/commands/templates.js.map +0 -1
  532. package/dist/cli/commands/test/linked-command-detection.js +0 -248
  533. package/dist/cli/commands/test/linked-command-detection.js.map +0 -1
  534. package/dist/cli-bundle/chunks/append-DYQWQK2J.js +0 -11
  535. package/dist/cli-bundle/chunks/chunk-2GA3NK35.js +0 -530
  536. package/dist/cli-bundle/chunks/chunk-2GA3NK35.js.map +0 -1
  537. package/dist/cli-bundle/chunks/chunk-2QIQGYPW.js.map +0 -7
  538. package/dist/cli-bundle/chunks/chunk-4DY4KPQI.js.map +0 -7
  539. package/dist/cli-bundle/chunks/chunk-4WREH7RT.js +0 -554
  540. package/dist/cli-bundle/chunks/chunk-4WREH7RT.js.map +0 -7
  541. package/dist/cli-bundle/chunks/chunk-5CT5BW6E.js.map +0 -7
  542. package/dist/cli-bundle/chunks/chunk-5URI7TPJ.js.map +0 -7
  543. package/dist/cli-bundle/chunks/chunk-6MHSBDGD.js.map +0 -7
  544. package/dist/cli-bundle/chunks/chunk-6OTZMORS.js.map +0 -7
  545. package/dist/cli-bundle/chunks/chunk-6PKA3SJQ.js.map +0 -1
  546. package/dist/cli-bundle/chunks/chunk-6TTOHMTB.js.map +0 -1
  547. package/dist/cli-bundle/chunks/chunk-7QDSYUMF.js.map +0 -1
  548. package/dist/cli-bundle/chunks/chunk-7TQMR6LK.js.map +0 -7
  549. package/dist/cli-bundle/chunks/chunk-B5DZYTT3.js +0 -312
  550. package/dist/cli-bundle/chunks/chunk-B5DZYTT3.js.map +0 -7
  551. package/dist/cli-bundle/chunks/chunk-BPD26E3P.js.map +0 -1
  552. package/dist/cli-bundle/chunks/chunk-CDJYP7OQ.js.map +0 -1
  553. package/dist/cli-bundle/chunks/chunk-DBZVUJTK.js +0 -858
  554. package/dist/cli-bundle/chunks/chunk-DBZVUJTK.js.map +0 -1
  555. package/dist/cli-bundle/chunks/chunk-DVOLZJ3C.js.map +0 -1
  556. package/dist/cli-bundle/chunks/chunk-DYEX6NFH.js.map +0 -7
  557. package/dist/cli-bundle/chunks/chunk-F7PSHRNO.js.map +0 -1
  558. package/dist/cli-bundle/chunks/chunk-FO7GMJKG.js +0 -875
  559. package/dist/cli-bundle/chunks/chunk-FO7GMJKG.js.map +0 -7
  560. package/dist/cli-bundle/chunks/chunk-FTQLW4JD.js.map +0 -1
  561. package/dist/cli-bundle/chunks/chunk-IA3YFTXT.js.map +0 -1
  562. package/dist/cli-bundle/chunks/chunk-IGED7NH2.js.map +0 -7
  563. package/dist/cli-bundle/chunks/chunk-J4NZOP3I.js.map +0 -1
  564. package/dist/cli-bundle/chunks/chunk-JL7WZ4O2.js.map +0 -7
  565. package/dist/cli-bundle/chunks/chunk-L24HCJFC.js +0 -309
  566. package/dist/cli-bundle/chunks/chunk-L24HCJFC.js.map +0 -1
  567. package/dist/cli-bundle/chunks/chunk-LWTIRS3Y.js.map +0 -7
  568. package/dist/cli-bundle/chunks/chunk-MKL4CP2I.js.map +0 -1
  569. package/dist/cli-bundle/chunks/chunk-N3CMP4NI.js.map +0 -1
  570. package/dist/cli-bundle/chunks/chunk-PHKP3AGR.js.map +0 -7
  571. package/dist/cli-bundle/chunks/chunk-Q37E63AM.js.map +0 -7
  572. package/dist/cli-bundle/chunks/chunk-QASRVKUQ.js.map +0 -1
  573. package/dist/cli-bundle/chunks/chunk-RGXD5JJR.js.map +0 -7
  574. package/dist/cli-bundle/chunks/chunk-UB2QYSTO.js.map +0 -1
  575. package/dist/cli-bundle/chunks/chunk-UGTVWL3E.js.map +0 -1
  576. package/dist/cli-bundle/chunks/chunk-ZAYYDNB3.js.map +0 -1
  577. package/dist/cli-bundle/chunks/chunk-ZUKSZVBW.js.map +0 -7
  578. package/dist/cli-bundle/chunks/close-RI4JQQHU.js +0 -12
  579. package/dist/cli-bundle/chunks/close-many-LY2XJ52M.js +0 -21
  580. package/dist/cli-bundle/chunks/comments-35M273DN.js +0 -13
  581. package/dist/cli-bundle/chunks/copy-NPYM7M7U.js +0 -9
  582. package/dist/cli-bundle/chunks/delete-ODRWJWAM.js +0 -10
  583. package/dist/cli-bundle/chunks/docs-G7N4E2JO.js +0 -14
  584. package/dist/cli-bundle/chunks/focus-U5TRVCRS.js +0 -10
  585. package/dist/cli-bundle/chunks/history-compact-M7GHYVFN.js +0 -20
  586. package/dist/cli-bundle/chunks/history-redact-JIHZLHDP.js +0 -16
  587. package/dist/cli-bundle/chunks/history-repair-NAFCHLH7.js +0 -18
  588. package/dist/cli-bundle/chunks/learnings-SONGPSHI.js +0 -13
  589. package/dist/cli-bundle/chunks/notes-BSD53H2W.js +0 -13
  590. package/dist/cli-bundle/chunks/plan-AWLYGBNV.js +0 -24
  591. package/dist/cli-bundle/chunks/register-list-query-BUWCYHBT.js.map +0 -7
  592. package/dist/cli-bundle/chunks/register-list-query-KTZ6AGE7.js.map +0 -1
  593. package/dist/cli-bundle/chunks/register-mutation-4FMGJJF7.js.map +0 -1
  594. package/dist/cli-bundle/chunks/restore-66GLMHIX.js +0 -14
  595. package/dist/cli-bundle/chunks/update-2XGHIVQ2.js +0 -21
  596. package/dist/cli-bundle/chunks/update-many-75K57FS3.js +0 -34
  597. package/dist/cli-bundle/chunks/update-many-U42YA445.js +0 -30
  598. /package/dist/cli-bundle/chunks/{append-PVZJDM6J.js.map → append-OJQFUQ4T.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{append-DYQWQK2J.js.map → append-UZVHUO74.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{chunk-MQZ3PLCF.js.map → chunk-2IFFUZLC.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{chunk-P6MYFH6K.js.map → chunk-2JKGO6QX.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{chunk-X3GYR4P2.js.map → chunk-2NCIPMQP.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{chunk-Q7E6OYZK.js.map → chunk-2VPAVL7O.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{chunk-DRNJPEPQ.js.map → chunk-2WSE6PO2.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{chunk-FDSBDNYE.js.map → chunk-34L5OT3Y.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{chunk-TH7U4KLY.js.map → chunk-3AUGG2DP.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{chunk-NKW36AMT.js.map → chunk-3CLU2XZO.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{chunk-ABRCOSDC.js.map → chunk-3WM75PWC.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{chunk-X6BVXQ52.js.map → chunk-5JLUII3O.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{chunk-3TL7WOEF.js.map → chunk-6N2VXVTQ.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{chunk-ERL2YFJ2.js.map → chunk-6S3YSUYG.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{chunk-IFZA4VB5.js.map → chunk-AHVTB5I5.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{chunk-DO5RGJXT.js.map → chunk-APRVSW2O.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{chunk-NAQYVWSQ.js.map → chunk-B7PE22W6.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{chunk-MD6ULIPJ.js.map → chunk-BCOFWYW4.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{chunk-KADLSPIU.js.map → chunk-BEP7WJA2.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{chunk-OBDLEQG5.js.map → chunk-CRVF2JDM.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{chunk-FJZDA6MS.js.map → chunk-DM4H7FP4.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{close-LZECOMHO.js.map → chunk-DUT67M43.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{chunk-44LNIULG.js.map → chunk-DYH63FX7.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{chunk-HAMLIWAF.js.map → chunk-EAB64KLB.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{chunk-CIOZ376P.js.map → chunk-EACOH7AU.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{chunk-QK2ZN6UL.js.map → chunk-EJEXHTY5.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{chunk-WQUEHPZB.js.map → chunk-EYLCSJAI.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{chunk-655STMGA.js.map → chunk-FMBNM2EN.js.map} +0 -0
  626. /package/dist/cli-bundle/chunks/{chunk-RMF3IOYQ.js.map → chunk-FNSPG7MU.js.map} +0 -0
  627. /package/dist/cli-bundle/chunks/{chunk-KB726FMH.js.map → chunk-H2Z3FYXQ.js.map} +0 -0
  628. /package/dist/cli-bundle/chunks/{chunk-BN62TO2S.js.map → chunk-IA5FKNII.js.map} +0 -0
  629. /package/dist/cli-bundle/chunks/{chunk-W6HZ55JO.js.map → chunk-IJIICKVW.js.map} +0 -0
  630. /package/dist/cli-bundle/chunks/{chunk-M7EWN4TF.js.map → chunk-JOUQZENX.js.map} +0 -0
  631. /package/dist/cli-bundle/chunks/{chunk-2FNWQXZ2.js.map → chunk-JYFOV7FC.js.map} +0 -0
  632. /package/dist/cli-bundle/chunks/{chunk-HLHSQ5CA.js.map → chunk-K2X6U4UA.js.map} +0 -0
  633. /package/dist/cli-bundle/chunks/{chunk-M6ASXYCU.js.map → chunk-KG44YSKD.js.map} +0 -0
  634. /package/dist/cli-bundle/chunks/{chunk-YVKE5ZDM.js.map → chunk-KPMKHGEA.js.map} +0 -0
  635. /package/dist/cli-bundle/chunks/{close-many-ZHI6A5TN.js.map → chunk-MIQDDLB5.js.map} +0 -0
  636. /package/dist/cli-bundle/chunks/{chunk-UJ4HJYWL.js.map → chunk-NLDFBC6J.js.map} +0 -0
  637. /package/dist/cli-bundle/chunks/{chunk-WRKB56FC.js.map → chunk-NP22ERDF.js.map} +0 -0
  638. /package/dist/cli-bundle/chunks/{chunk-YQYG2V23.js.map → chunk-NU3IMIEA.js.map} +0 -0
  639. /package/dist/cli-bundle/chunks/{chunk-3I3LRT2G.js.map → chunk-NVPZIJVR.js.map} +0 -0
  640. /package/dist/cli-bundle/chunks/{chunk-JAF4TUQ7.js.map → chunk-ODALILG3.js.map} +0 -0
  641. /package/dist/cli-bundle/chunks/{chunk-QZ7LT3XE.js.map → chunk-ONREO4ST.js.map} +0 -0
  642. /package/dist/cli-bundle/chunks/{chunk-3CMRNVTO.js.map → chunk-P74IZQ7A.js.map} +0 -0
  643. /package/dist/cli-bundle/chunks/{chunk-ZTRBSABY.js.map → chunk-PGY23YTC.js.map} +0 -0
  644. /package/dist/cli-bundle/chunks/{chunk-H2QBAKLQ.js.map → chunk-PMOSXADO.js.map} +0 -0
  645. /package/dist/cli-bundle/chunks/{close-RI4JQQHU.js.map → chunk-PNTULOGU.js.map} +0 -0
  646. /package/dist/cli-bundle/chunks/{chunk-GSEADLRH.js.map → chunk-Q7A43DS4.js.map} +0 -0
  647. /package/dist/cli-bundle/chunks/{chunk-QSPARJWF.js.map → chunk-QEHQ2GVG.js.map} +0 -0
  648. /package/dist/cli-bundle/chunks/{chunk-VJTAEIPC.js.map → chunk-QIPLHNP7.js.map} +0 -0
  649. /package/dist/cli-bundle/chunks/{chunk-K7WNZ7KD.js.map → chunk-QKJGPFAF.js.map} +0 -0
  650. /package/dist/cli-bundle/chunks/{chunk-ZNP64HOW.js.map → chunk-RLCHOOHC.js.map} +0 -0
  651. /package/dist/cli-bundle/chunks/{chunk-IAPHYPRL.js.map → chunk-RMLWNPH2.js.map} +0 -0
  652. /package/dist/cli-bundle/chunks/{chunk-UVBA6F5A.js.map → chunk-RRM5JYJC.js.map} +0 -0
  653. /package/dist/cli-bundle/chunks/{chunk-6IIVBC56.js.map → chunk-S6MQESFR.js.map} +0 -0
  654. /package/dist/cli-bundle/chunks/{chunk-QABYZYLU.js.map → chunk-SDQLJWBO.js.map} +0 -0
  655. /package/dist/cli-bundle/chunks/{chunk-ANSJHDOZ.js.map → chunk-SELVXEZK.js.map} +0 -0
  656. /package/dist/cli-bundle/chunks/{chunk-WD6MSYMP.js.map → chunk-TKOVBP6C.js.map} +0 -0
  657. /package/dist/cli-bundle/chunks/{chunk-TZ2PSLLT.js.map → chunk-TQSZFPIS.js.map} +0 -0
  658. /package/dist/cli-bundle/chunks/{chunk-WPAWZW7S.js.map → chunk-TSMHDIW4.js.map} +0 -0
  659. /package/dist/cli-bundle/chunks/{chunk-TZRTLMWM.js.map → chunk-UFXU44HV.js.map} +0 -0
  660. /package/dist/cli-bundle/chunks/{chunk-TWLDBKQU.js.map → chunk-ULTHRDBP.js.map} +0 -0
  661. /package/dist/cli-bundle/chunks/{chunk-RA5AIAMP.js.map → chunk-UOHFKBUV.js.map} +0 -0
  662. /package/dist/cli-bundle/chunks/{chunk-4RXTMU57.js.map → chunk-UY2ACEMF.js.map} +0 -0
  663. /package/dist/cli-bundle/chunks/{chunk-FIGXOCEQ.js.map → chunk-WUJQK4YV.js.map} +0 -0
  664. /package/dist/cli-bundle/chunks/{chunk-T4BRCB6Z.js.map → chunk-XSJUSQAE.js.map} +0 -0
  665. /package/dist/cli-bundle/chunks/{chunk-UKUIIBDW.js.map → chunk-YAQEBNY7.js.map} +0 -0
  666. /package/dist/cli-bundle/chunks/{chunk-E2WC6S4P.js.map → chunk-YBLZ2VE7.js.map} +0 -0
  667. /package/dist/cli-bundle/chunks/{chunk-Y72FV7RM.js.map → chunk-YCQET3OT.js.map} +0 -0
  668. /package/dist/cli-bundle/chunks/{close-many-LY2XJ52M.js.map → chunk-YUSOJDWM.js.map} +0 -0
  669. /package/dist/cli-bundle/chunks/{chunk-FS6UM5WH.js.map → chunk-ZI6VQWQ7.js.map} +0 -0
  670. /package/dist/cli-bundle/chunks/{comments-AJWRTFZ5.js.map → close-CWODTPKG.js.map} +0 -0
  671. /package/dist/cli-bundle/chunks/{comments-35M273DN.js.map → close-W6LI2PKM.js.map} +0 -0
  672. /package/dist/cli-bundle/chunks/{copy-GMXYKBXT.js.map → close-many-CQFUY7MR.js.map} +0 -0
  673. /package/dist/cli-bundle/chunks/{copy-NPYM7M7U.js.map → close-many-DLDDVSH5.js.map} +0 -0
  674. /package/dist/cli-bundle/chunks/{create-F53OBTOU.js.map → comments-E3TNTK24.js.map} +0 -0
  675. /package/dist/cli-bundle/chunks/{create-HU4Q7RJX.js.map → comments-WGLHR7LB.js.map} +0 -0
  676. /package/dist/cli-bundle/chunks/{delete-GSDZLTRC.js.map → copy-LXVDXH7B.js.map} +0 -0
  677. /package/dist/cli-bundle/chunks/{delete-ODRWJWAM.js.map → copy-Q5ZJPUKR.js.map} +0 -0
  678. /package/dist/cli-bundle/chunks/{deps-U57I7EAK.js.map → create-J5U6ND4K.js.map} +0 -0
  679. /package/dist/cli-bundle/chunks/{deps-WWB7P2GT.js.map → create-LBVCYMEG.js.map} +0 -0
  680. /package/dist/cli-bundle/chunks/{docs-MQIY2ZQS.js.map → delete-PMJBNY5G.js.map} +0 -0
  681. /package/dist/cli-bundle/chunks/{docs-G7N4E2JO.js.map → delete-WNHB3LYW.js.map} +0 -0
  682. /package/dist/cli-bundle/chunks/{files-TTY6N2AV.js.map → deps-JZ7TMVCB.js.map} +0 -0
  683. /package/dist/cli-bundle/chunks/{files-TBZD7V6H.js.map → deps-OA26IS25.js.map} +0 -0
  684. /package/dist/cli-bundle/chunks/{focus-XT6YVFFX.js.map → docs-FEWB2DQB.js.map} +0 -0
  685. /package/dist/cli-bundle/chunks/{focus-U5TRVCRS.js.map → docs-HA2AIDBB.js.map} +0 -0
  686. /package/dist/cli-bundle/chunks/{history-compact-M7GHYVFN.js.map → files-6YFBJRBG.js.map} +0 -0
  687. /package/dist/cli-bundle/chunks/{history-compact-KKVUWB4V.js.map → files-EFIWKFTM.js.map} +0 -0
  688. /package/dist/cli-bundle/chunks/{history-redact-3DVZOILD.js.map → focus-4QJR7FOQ.js.map} +0 -0
  689. /package/dist/cli-bundle/chunks/{history-redact-JIHZLHDP.js.map → focus-POIW5LTJ.js.map} +0 -0
  690. /package/dist/cli-bundle/chunks/{history-repair-ITDUMK4N.js.map → history-compact-CKRPDTJN.js.map} +0 -0
  691. /package/dist/cli-bundle/chunks/{history-repair-NAFCHLH7.js.map → history-compact-FWG2C7FZ.js.map} +0 -0
  692. /package/dist/cli-bundle/chunks/{learnings-SONGPSHI.js.map → history-redact-BB3TGDAE.js.map} +0 -0
  693. /package/dist/cli-bundle/chunks/{learnings-FGO3NSFW.js.map → history-redact-D225BHOZ.js.map} +0 -0
  694. /package/dist/cli-bundle/chunks/{notes-BSD53H2W.js.map → history-repair-6GEAM7HE.js.map} +0 -0
  695. /package/dist/cli-bundle/chunks/{notes-NQ6RXVW6.js.map → history-repair-RQXKQHL4.js.map} +0 -0
  696. /package/dist/cli-bundle/chunks/{plan-2NNEO46V.js.map → learnings-JLNLCOL5.js.map} +0 -0
  697. /package/dist/cli-bundle/chunks/{plan-AWLYGBNV.js.map → learnings-RSNLSWDC.js.map} +0 -0
  698. /package/dist/cli-bundle/chunks/{profile-U725ATWZ.js.map → notes-2WDH6DXU.js.map} +0 -0
  699. /package/dist/cli-bundle/chunks/{profile-AAQUU6T3.js.map → notes-GB47XXQQ.js.map} +0 -0
  700. /package/dist/cli-bundle/chunks/{restore-66GLMHIX.js.map → plan-DOVI2VMW.js.map} +0 -0
  701. /package/dist/cli-bundle/chunks/{restore-B3BAB6X2.js.map → plan-VDCJ2PCN.js.map} +0 -0
  702. /package/dist/cli-bundle/chunks/{schema-U7IM2DXV.js.map → profile-FAU7NZML.js.map} +0 -0
  703. /package/dist/cli-bundle/chunks/{schema-LZNUYHDB.js.map → profile-IVXQEL3D.js.map} +0 -0
  704. /package/dist/cli-bundle/chunks/{update-Q3UCILNR.js.map → restore-25DLT2Q2.js.map} +0 -0
  705. /package/dist/cli-bundle/chunks/{update-2XGHIVQ2.js.map → restore-YPMVUUEX.js.map} +0 -0
  706. /package/dist/cli-bundle/chunks/{update-many-75K57FS3.js.map → schema-FNU3WE4O.js.map} +0 -0
  707. /package/dist/cli-bundle/chunks/{update-many-U42YA445.js.map → schema-NBCM3RAD.js.map} +0 -0
  708. /package/dist/{cli/commands → sdk}/extension/managed-state.d.ts +0 -0
@@ -1,57 +1,58 @@
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]="d5e1e32d-df71-5281-bc83-9c8c5fd37e21")}catch(e){}}();
3
- import {
4
- runFiles
5
- } from "./chunk-TZ2PSLLT.js";
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]="1a18538c-3ee2-5ab6-b7c2-b913c780563a")}catch(e){}}();
6
3
  import {
7
4
  runDocs
8
- } from "./chunk-BN62TO2S.js";
9
- import {
10
- isRemoteLinkedArtifactReference
11
- } from "./chunk-P6MYFH6K.js";
5
+ } from "./chunk-IA5FKNII.js";
12
6
  import {
13
- collectDanglingDependencyReferences
14
- } from "./chunk-L24HCJFC.js";
7
+ collectDanglingDependencyReferences,
8
+ createRelationshipKindRegistry
9
+ } from "./chunk-JFTKLTEF.js";
15
10
  import {
16
11
  scanHistoryDrift
17
- } from "./chunk-QABYZYLU.js";
12
+ } from "./chunk-SDQLJWBO.js";
18
13
  import {
19
- wrapOwnershipConflict
20
- } from "./chunk-4RXTMU57.js";
14
+ runFiles
15
+ } from "./chunk-TQSZFPIS.js";
16
+ import {
17
+ isRemoteLinkedArtifactReference
18
+ } from "./chunk-2JKGO6QX.js";
21
19
  import {
22
20
  runUpdate
23
- } from "./chunk-CIOZ376P.js";
21
+ } from "./chunk-EACOH7AU.js";
24
22
  import {
25
- resolveAuthor
26
- } from "./chunk-CUFW7ITY.js";
23
+ wrapOwnershipConflict
24
+ } from "./chunk-UY2ACEMF.js";
27
25
  import {
28
26
  PM_TELEMETRY_SOURCE_CONTEXT_VALUES,
29
27
  TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS,
30
28
  TELEMETRY_SCHEMA_VERSION,
31
29
  flushTelemetryQueueNow
32
- } from "./chunk-QZ7LT3XE.js";
30
+ } from "./chunk-ONREO4ST.js";
33
31
  import {
34
32
  buildCapabilityContractMetadata,
35
33
  buildRegistrationCollisionRemediation,
36
34
  collectUnknownCapabilityGuidance,
37
35
  readManagedExtensionState,
38
36
  runInit
39
- } from "./chunk-DVOLZJ3C.js";
37
+ } from "./chunk-J6EY5V4N.js";
40
38
  import {
41
39
  collectStaleVectorizationIds,
42
40
  runNext
43
- } from "./chunk-BPD26E3P.js";
41
+ } from "./chunk-7Z4LKRS4.js";
44
42
  import {
45
43
  computeContentFieldUtilization
46
- } from "./chunk-6TTOHMTB.js";
44
+ } from "./chunk-UXONS674.js";
47
45
  import {
48
46
  computeMetadataCoverage,
49
47
  groupItemsByDimension,
50
48
  lifecycleClassifierFromStatusRegistry
51
- } from "./chunk-Q7E6OYZK.js";
49
+ } from "./chunk-2VPAVL7O.js";
52
50
  import {
53
51
  parseLimit
54
- } from "./chunk-3I3LRT2G.js";
52
+ } from "./chunk-NVPZIJVR.js";
53
+ import {
54
+ resolveAuthor
55
+ } from "./chunk-CUFW7ITY.js";
55
56
  import {
56
57
  buildVectorizationEmbeddingIdentity,
57
58
  hasVectorizationEmbeddingIdentityChanged,
@@ -61,7 +62,7 @@ import {
61
62
  resolveProviderConfigSource,
62
63
  resolveSettingsWithSemanticRuntimeDefaults,
63
64
  resolveVectorStores
64
- } from "./chunk-J4NZOP3I.js";
65
+ } from "./chunk-JXQUXVMI.js";
65
66
  import {
66
67
  ACTIVITY_COMMANDER_STRING_OPTION_CONTRACTS,
67
68
  ACTIVITY_FLAG_CONTRACTS,
@@ -151,7 +152,7 @@ import {
151
152
  UPGRADE_FLAG_CONTRACTS,
152
153
  VALIDATE_FLAG_CONTRACTS,
153
154
  compactFlagAliasContracts
154
- } from "./chunk-N3CMP4NI.js";
155
+ } from "./chunk-3S5QVM5H.js";
155
156
  import {
156
157
  LINKED_TEST_PM_CONTEXT_MODE_VALUES,
157
158
  LINKED_TEST_PROTECTED_ENV_KEYS,
@@ -168,12 +169,12 @@ import {
168
169
  parseLinkedTestRegexList,
169
170
  parseLinkedTestStringList,
170
171
  runCreate
171
- } from "./chunk-HL7V2PHX.js";
172
+ } from "./chunk-EH2OPHBI.js";
172
173
  import {
173
174
  createStdinTokenResolver,
174
175
  parseCsvKv,
175
176
  parseOptionalNumber
176
- } from "./chunk-QK2ZN6UL.js";
177
+ } from "./chunk-EJEXHTY5.js";
177
178
  import {
178
179
  CURRENT_ITEM_FORMAT_VERSION,
179
180
  compareTimestampStrings,
@@ -200,7 +201,7 @@ import {
200
201
  stableValueEquals,
201
202
  toItemRecord,
202
203
  writeSettings
203
- } from "./chunk-GSEADLRH.js";
204
+ } from "./chunk-Q7A43DS4.js";
204
205
  import {
205
206
  DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS,
206
207
  DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS,
@@ -242,7 +243,7 @@ import {
242
243
  statusIsTerminal,
243
244
  toNonEmptyStringOrUndefined,
244
245
  writeFileAtomic
245
- } from "./chunk-GXXC7QSK.js";
246
+ } from "./chunk-QKECXBBG.js";
246
247
 
247
248
  // dist/sdk/start-task-status.js
248
249
  function resolveStartTaskInProgressStatus(statusRegistry) {
@@ -559,12 +560,12 @@ var TOOLS = [
559
560
  },
560
561
  {
561
562
  name: "pm_get",
562
- description: "Read one pm item. Pass options.depth='brief' or options.fields='id,title,status' for low-token inspection.",
563
+ description: "Read one pm item with shared SDK projections. Pass options.depth='brief' or options.fields='id,title,status' for low-token inspection, options.fields='id,schedule.start_at' for schedule context, or options.at='7' / an ISO timestamp for a verified mutation-free historical read. Parent results include bounded child counts, samples, and continuation metadata.",
563
564
  inputSchema: objectSchema({
564
565
  id: idSchema,
565
566
  options: {
566
567
  type: "object",
567
- description: "Get options such as depth=brief|standard|deep|full or fields=id,title,status."
568
+ description: "Get options such as depth=brief|standard|deep|full, fields=id,title,status, or at=<version|ISO timestamp>."
568
569
  }
569
570
  }, ["id"])
570
571
  },
@@ -720,7 +721,7 @@ var TOOLS = [
720
721
  },
721
722
  {
722
723
  name: "pm_deps",
723
- description: "List, add, or remove dependencies for a pm item. Use options.add to declare a dependency and options.remove to drop one; omit both to list current dependencies.",
724
+ description: "Read dependency trees/graphs or one bounded explainable relationship context packet. Use options.format=context with depth, node, edge, token, and cursor bounds.",
724
725
  inputSchema: objectSchema({ id: idSchema, options: { type: "object" } }, [
725
726
  "id"
726
727
  ])
@@ -2372,7 +2373,7 @@ async function runContracts(options, global) {
2372
2373
  return result;
2373
2374
  }
2374
2375
 
2375
- // dist/cli/commands/gc.js
2376
+ // dist/sdk/governance/gc.js
2376
2377
  import fs3 from "node:fs/promises";
2377
2378
  import path3 from "node:path";
2378
2379
 
@@ -2725,7 +2726,7 @@ async function runLockGc(pmRoot, options) {
2725
2726
  return result;
2726
2727
  }
2727
2728
 
2728
- // dist/cli/commands/gc.js
2729
+ // dist/sdk/governance/gc.js
2729
2730
  var GC_SCOPE_VALUES = [
2730
2731
  "index",
2731
2732
  "embeddings",
@@ -2960,9 +2961,104 @@ async function runGc(global, options = {}) {
2960
2961
  };
2961
2962
  }
2962
2963
 
2963
- // dist/cli/commands/health.js
2964
+ // dist/sdk/author-attribution.js
2964
2965
  import fs4 from "node:fs/promises";
2965
2966
  import path4 from "node:path";
2967
+ var HISTORY_AUTHOR_ATTRIBUTION_BASELINE = "2026-07-15T06:22:12.276Z";
2968
+ var HISTORY_AUTHOR_ATTRIBUTION_BASELINE_MS = Date.parse(HISTORY_AUTHOR_ATTRIBUTION_BASELINE);
2969
+ var HISTORY_AUTHOR_EVENT_CLASSIFICATIONS = [
2970
+ ["attributed", "attributed"],
2971
+ ["legacy_unknown", "actionable_unknown"]
2972
+ ];
2973
+ var historyStringValue = (value) => typeof value === "string" ? value : "";
2974
+ var classifyHistoryAuthorEvent = (parsed) => {
2975
+ const record = parsed ?? {};
2976
+ const author = historyStringValue(record.author).trim().toLowerCase();
2977
+ const authorClass = Number(["", "unknown"].includes(author));
2978
+ const timestampClass = Number(Date.parse(historyStringValue(record.ts)) >= HISTORY_AUTHOR_ATTRIBUTION_BASELINE_MS);
2979
+ return HISTORY_AUTHOR_EVENT_CLASSIFICATIONS[authorClass][timestampClass];
2980
+ };
2981
+ var inspectHistoryAuthorStream = (itemId, raw, sampleLimit = 20) => {
2982
+ const samples = [];
2983
+ const unknownCounts = {
2984
+ legacy_unknown: 0,
2985
+ actionable_unknown: 0
2986
+ };
2987
+ const boundedSampleLimit = Math.max(0, sampleLimit);
2988
+ let checkedEvents = 0;
2989
+ for (const [index, line] of raw.split(/\r?\n/).entries()) {
2990
+ let parsed;
2991
+ try {
2992
+ parsed = JSON.parse(line);
2993
+ } catch {
2994
+ continue;
2995
+ }
2996
+ checkedEvents += 1;
2997
+ const classification = classifyHistoryAuthorEvent(parsed);
2998
+ if (classification === "attributed") {
2999
+ continue;
3000
+ }
3001
+ unknownCounts[classification] += 1;
3002
+ if (samples.length < boundedSampleLimit) {
3003
+ samples.push({ item_id: itemId, line: index + 1 });
3004
+ }
3005
+ }
3006
+ return {
3007
+ checked_events: checkedEvents,
3008
+ unknown_event_count: unknownCounts.legacy_unknown + unknownCounts.actionable_unknown,
3009
+ legacy_unknown_event_count: unknownCounts.legacy_unknown,
3010
+ actionable_unknown_event_count: unknownCounts.actionable_unknown,
3011
+ samples
3012
+ };
3013
+ };
3014
+ var scanHistoryAuthorAttribution = async (pmRoot, sampleLimit = 20) => {
3015
+ const historyDirectory = path4.join(pmRoot, "history");
3016
+ let fileNames;
3017
+ try {
3018
+ fileNames = (await fs4.readdir(historyDirectory)).filter((fileName) => fileName.endsWith(".jsonl")).sort((left, right) => left.localeCompare(right));
3019
+ } catch {
3020
+ fileNames = [];
3021
+ }
3022
+ const affectedItemIds = /* @__PURE__ */ new Set();
3023
+ const samples = [];
3024
+ let checkedStreams = 0;
3025
+ let checkedEvents = 0;
3026
+ let unknownEventCount = 0;
3027
+ let legacyUnknownEventCount = 0;
3028
+ let actionableUnknownEventCount = 0;
3029
+ for (const fileName of fileNames) {
3030
+ let raw;
3031
+ try {
3032
+ raw = await fs4.readFile(path4.join(historyDirectory, fileName), "utf8");
3033
+ } catch {
3034
+ continue;
3035
+ }
3036
+ const itemId = fileName.slice(0, -".jsonl".length);
3037
+ const inspected = inspectHistoryAuthorStream(itemId, raw, sampleLimit - samples.length);
3038
+ checkedStreams += 1;
3039
+ checkedEvents += inspected.checked_events;
3040
+ unknownEventCount += inspected.unknown_event_count;
3041
+ legacyUnknownEventCount += inspected.legacy_unknown_event_count;
3042
+ actionableUnknownEventCount += inspected.actionable_unknown_event_count;
3043
+ if (inspected.unknown_event_count > 0) {
3044
+ affectedItemIds.add(itemId);
3045
+ }
3046
+ samples.push(...inspected.samples);
3047
+ }
3048
+ return {
3049
+ checked_streams: checkedStreams,
3050
+ checked_events: checkedEvents,
3051
+ unknown_event_count: unknownEventCount,
3052
+ legacy_unknown_event_count: legacyUnknownEventCount,
3053
+ actionable_unknown_event_count: actionableUnknownEventCount,
3054
+ affected_item_ids: [...affectedItemIds].sort((left, right) => left.localeCompare(right)),
3055
+ samples
3056
+ };
3057
+ };
3058
+
3059
+ // dist/sdk/governance/health.js
3060
+ import fs5 from "node:fs/promises";
3061
+ import path5 from "node:path";
2966
3062
 
2967
3063
  // dist/core/diagnostics/remediation.js
2968
3064
  var REMEDIATION_REGISTRY = Object.freeze([
@@ -3111,6 +3207,11 @@ var REMEDIATION_REGISTRY = Object.freeze([
3111
3207
  command: "pm history-compact <id>",
3112
3208
  summary: "The history stream exceeds the configured compaction threshold; compact it (pm history-compact --all-streams sweeps every over-threshold stream in one pass)."
3113
3209
  },
3210
+ {
3211
+ code: "history_unknown_author_events",
3212
+ command: "pm validate --check-history-drift --fix-hints",
3213
+ summary: "Historical mutations lack attributable authorship. Configure PM_AUTHOR, pass global --author, or set author_default so future audit events are attributable."
3214
+ },
3114
3215
  // --- pm health: locks ---
3115
3216
  {
3116
3217
  code: "locks_stale_count",
@@ -3280,6 +3381,11 @@ var REMEDIATION_REGISTRY = Object.freeze([
3280
3381
  command: "pm history-repair <id>",
3281
3382
  summary: "Re-anchor the history chains of the items with a broken history chain."
3282
3383
  },
3384
+ {
3385
+ code: "validate_history_unknown_author_events",
3386
+ command: "pm config project set author_default <stable-agent-id>",
3387
+ summary: "Historical mutations lack attributable authorship. Set a stable default or use invocation-wide --author for future events; existing audit history remains append-only."
3388
+ },
3283
3389
  // --- pm validate: command_references ---
3284
3390
  {
3285
3391
  code: "validate_command_references_stale_pm_ids",
@@ -3323,12 +3429,12 @@ function buildRemediationCommands(warnings) {
3323
3429
  return Object.values(buildRemediationMap(warnings));
3324
3430
  }
3325
3431
 
3326
- // dist/cli/commands/health.js
3432
+ // dist/sdk/governance/health.js
3327
3433
  var PM_TELEMETRY_SOURCE_CONTEXT_SET = new Set(PM_TELEMETRY_SOURCE_CONTEXT_VALUES);
3328
3434
  var STALE_VECTORIZATION_SUMMARY_LIMIT = 25;
3329
3435
  var BRIEF_HEALTH_DETAIL_LIMIT = 8;
3330
- var TELEMETRY_QUEUE_RELATIVE_PATH = path4.join("runtime", "telemetry", "events.jsonl");
3331
- var TELEMETRY_STATE_RELATIVE_PATH = path4.join("runtime", "telemetry", "state.json");
3436
+ var TELEMETRY_QUEUE_RELATIVE_PATH = path5.join("runtime", "telemetry", "events.jsonl");
3437
+ var TELEMETRY_STATE_RELATIVE_PATH = path5.join("runtime", "telemetry", "state.json");
3332
3438
  var TELEMETRY_ENDPOINT_PROBE_TIMEOUT_MS = 2500;
3333
3439
  var TELEMETRY_QUEUE_HIGH_WATER_MARK = 500;
3334
3440
  var TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD = TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS - 3;
@@ -3360,29 +3466,29 @@ function isExpectedUnmanagedExtension(name, directory) {
3360
3466
  }
3361
3467
  async function isDirectory(targetPath) {
3362
3468
  try {
3363
- const stats = await fs4.stat(targetPath);
3469
+ const stats = await fs5.stat(targetPath);
3364
3470
  return stats.isDirectory();
3365
3471
  } catch {
3366
3472
  return false;
3367
3473
  }
3368
3474
  }
3369
3475
  async function countHistoryStreams(pmRoot, compactPolicy) {
3370
- const historyDir = path4.join(pmRoot, "history");
3476
+ const historyDir = path5.join(pmRoot, "history");
3371
3477
  if (!await isDirectory(historyDir)) {
3372
3478
  return { count: 0, warnings: [], over_threshold: [], max_entries: null };
3373
3479
  }
3374
- const historyFiles = (await fs4.readdir(historyDir)).filter((entry) => entry.endsWith(".jsonl")).sort((left, right) => left.localeCompare(right));
3480
+ const historyFiles = (await fs5.readdir(historyDir)).filter((entry) => entry.endsWith(".jsonl")).sort((left, right) => left.localeCompare(right));
3375
3481
  const policyActive = compactPolicy.enabled;
3376
3482
  const maxEntries = policyActive ? compactPolicy.max_entries : null;
3377
3483
  const warnings = [];
3378
3484
  const overThreshold = [];
3379
3485
  for (const fileName of historyFiles) {
3380
- const streamPath = path4.join(historyDir, fileName);
3486
+ const streamPath = path5.join(historyDir, fileName);
3381
3487
  warnings.push(...await runActiveOnReadHooks({ path: streamPath, scope: "project" }));
3382
3488
  if (!policyActive) {
3383
3489
  continue;
3384
3490
  }
3385
- const raw = await fs4.readFile(streamPath, "utf8");
3491
+ const raw = await fs5.readFile(streamPath, "utf8");
3386
3492
  let entries = 0;
3387
3493
  for (const line of raw.split(/\r?\n/)) {
3388
3494
  if (line.trim().length > 0) {
@@ -3404,16 +3510,16 @@ async function countHistoryStreams(pmRoot, compactPolicy) {
3404
3510
  };
3405
3511
  }
3406
3512
  function normalizeRelativePath(pmRoot, targetPath) {
3407
- return path4.relative(pmRoot, targetPath).replaceAll("\\", "/");
3513
+ return path5.relative(pmRoot, targetPath).replaceAll("\\", "/");
3408
3514
  }
3409
3515
  async function listItemDocumentPaths(pmRoot, typeToFolder) {
3410
3516
  const folders = [...new Set(Object.values(typeToFolder))].sort((left, right) => left.localeCompare(right));
3411
3517
  const itemPaths = [];
3412
3518
  for (const folder of folders) {
3413
- const directoryPath = path4.join(pmRoot, folder);
3519
+ const directoryPath = path5.join(pmRoot, folder);
3414
3520
  let entries = [];
3415
3521
  try {
3416
- entries = await fs4.readdir(directoryPath);
3522
+ entries = await fs5.readdir(directoryPath);
3417
3523
  } catch (error) {
3418
3524
  if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT") {
3419
3525
  continue;
@@ -3424,7 +3530,7 @@ async function listItemDocumentPaths(pmRoot, typeToFolder) {
3424
3530
  if (!ITEM_FILE_EXTENSIONS.some((extension) => entry.toLowerCase().endsWith(extension))) {
3425
3531
  continue;
3426
3532
  }
3427
- itemPaths.push(path4.join(directoryPath, entry));
3533
+ itemPaths.push(path5.join(directoryPath, entry));
3428
3534
  }
3429
3535
  }
3430
3536
  itemPaths.sort((left, right) => normalizeRelativePath(pmRoot, left).localeCompare(normalizeRelativePath(pmRoot, right)));
@@ -3444,7 +3550,7 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
3444
3550
  const relativePath = normalizeRelativePath(pmRoot, itemPath);
3445
3551
  let raw = "";
3446
3552
  try {
3447
- raw = await fs4.readFile(itemPath, "utf8");
3553
+ raw = await fs5.readFile(itemPath, "utf8");
3448
3554
  } catch {
3449
3555
  itemUnreadable.push(relativePath);
3450
3556
  continue;
@@ -3473,13 +3579,13 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
3473
3579
  }
3474
3580
  }
3475
3581
  const formatVersionScan = scanItemFormatVersions(formatVersionEntries);
3476
- const historyDir = path4.join(pmRoot, "history");
3582
+ const historyDir = path5.join(pmRoot, "history");
3477
3583
  const historyUnreadable = [];
3478
3584
  const historyConflictMarkers = [];
3479
3585
  const historyInvalidJson = [];
3480
3586
  let historyFiles = [];
3481
3587
  try {
3482
- historyFiles = (await fs4.readdir(historyDir)).filter((entry) => entry.endsWith(".jsonl")).sort((left, right) => left.localeCompare(right));
3588
+ historyFiles = (await fs5.readdir(historyDir)).filter((entry) => entry.endsWith(".jsonl")).sort((left, right) => left.localeCompare(right));
3483
3589
  } catch (error) {
3484
3590
  if (shouldReportHistoryDirectoryUnreadable(error)) {
3485
3591
  historyUnreadable.push("history");
@@ -3487,10 +3593,10 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
3487
3593
  }
3488
3594
  for (const fileName of historyFiles) {
3489
3595
  const itemId = fileName.slice(0, -".jsonl".length);
3490
- const historyPath = path4.join(historyDir, fileName);
3596
+ const historyPath = path5.join(historyDir, fileName);
3491
3597
  let raw = "";
3492
3598
  try {
3493
- raw = await fs4.readFile(historyPath, "utf8");
3599
+ raw = await fs5.readFile(historyPath, "utf8");
3494
3600
  } catch {
3495
3601
  historyUnreadable.push(itemId);
3496
3602
  continue;
@@ -3966,8 +4072,19 @@ var HEALTH_DETAIL_SUMMARIZERS = {
3966
4072
  capability_guidance: summarizeRecordList(details.capability_guidance, limit)
3967
4073
  };
3968
4074
  },
3969
- // Storage details are already compact counters; keep the pre-refactor pass-through shape.
3970
- storage: (details) => details,
4075
+ storage: (details, limit) => {
4076
+ const authorAttribution = typeof details.author_attribution === "object" && details.author_attribution !== null ? details.author_attribution : void 0;
4077
+ return {
4078
+ ...details,
4079
+ ...authorAttribution ? {
4080
+ author_attribution: {
4081
+ ...authorAttribution,
4082
+ affected_item_ids: summarizeStringList(authorAttribution.affected_item_ids, limit),
4083
+ samples: summarizeRecordList(authorAttribution.samples, limit)
4084
+ }
4085
+ } : {}
4086
+ };
4087
+ },
3971
4088
  locks: (details) => ({
3972
4089
  active_lock_count: details.active_lock_count,
3973
4090
  stale_lock_count: details.stale_lock_count,
@@ -4273,8 +4390,8 @@ async function probeTelemetryEndpointHealth(endpoint) {
4273
4390
  }
4274
4391
  async function buildTelemetryCheck(settings, options) {
4275
4392
  const globalPmRoot = resolveGlobalPmRoot(process.cwd());
4276
- const queuePath = path4.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);
4277
- const statePath = path4.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);
4393
+ const queuePath = path5.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);
4394
+ const statePath = path5.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);
4278
4395
  const queueRaw = await readFileIfExists(queuePath);
4279
4396
  const queueExists = queueRaw !== null;
4280
4397
  const queueSizeBytes = queueRaw ? Buffer.byteLength(queueRaw, "utf8") : 0;
@@ -4605,7 +4722,7 @@ async function scanHealthDirectories(pmRoot, typeRegistry, strictDirectories) {
4605
4722
  const missingOptionalDirs = [];
4606
4723
  const hookWarnings = [];
4607
4724
  for (const relativeDir of [...requiredDirs, ...optionalDirs]) {
4608
- const directoryPath = path4.join(pmRoot, relativeDir);
4725
+ const directoryPath = path5.join(pmRoot, relativeDir);
4609
4726
  hookWarnings.push(...await runActiveOnReadHooks({
4610
4727
  path: directoryPath,
4611
4728
  scope: "project"
@@ -4685,13 +4802,20 @@ function buildSettingsValuesHealthCheck(settingWarnings) {
4685
4802
  details: { warnings: settingWarnings }
4686
4803
  };
4687
4804
  }
4688
- function buildStorageHealthCheck(items, settings, historySummary) {
4805
+ var resolveUnknownAuthorEventCount = (authorAttribution) => authorAttribution.unknown_event_count ?? 0;
4806
+ var resolveActionableUnknownAuthorEventCount = (authorAttribution) => authorAttribution.actionable_unknown_event_count ?? resolveUnknownAuthorEventCount(authorAttribution);
4807
+ function buildStorageHealthCheck(items, settings, historySummary, authorAttribution) {
4808
+ const unknownAuthorEventCount = resolveUnknownAuthorEventCount(authorAttribution);
4809
+ const actionableUnknownAuthorEventCount = resolveActionableUnknownAuthorEventCount(authorAttribution);
4810
+ const hasAuthorEvents = unknownAuthorEventCount > 0;
4811
+ const hasActionableAuthorWarnings = actionableUnknownAuthorEventCount > 0;
4689
4812
  return {
4690
4813
  name: "storage",
4691
- status: historySummary.over_threshold.length === 0 ? "ok" : "warn",
4814
+ status: historySummary.over_threshold.length === 0 && !hasActionableAuthorWarnings ? "ok" : "warn",
4692
4815
  details: {
4693
4816
  items: items.length,
4694
4817
  history_streams: historySummary.count,
4818
+ ...hasAuthorEvents ? { author_attribution: authorAttribution } : {},
4695
4819
  ...historySummary.max_entries !== null ? {
4696
4820
  compact_policy: {
4697
4821
  enabled: settings.history.compact_policy.enabled,
@@ -4714,6 +4838,7 @@ function collectHealthWarnings(params) {
4714
4838
  ...params.extensionCheck.warnings,
4715
4839
  ...params.historyPolicyWarnings,
4716
4840
  ...params.historySummary.warnings,
4841
+ ...params.authorAttributionWarnings,
4717
4842
  ...params.locksCheck.warnings,
4718
4843
  ...params.integrityCheck.warnings,
4719
4844
  ...params.historyDriftCheck.warnings,
@@ -4733,7 +4858,10 @@ function buildHealthRemediationSources(params) {
4733
4858
  settings_values: params.settingWarnings,
4734
4859
  telemetry: params.telemetryCheck.warnings,
4735
4860
  extensions: params.extensionCheck.warnings,
4736
- storage: params.historySummary.over_threshold.map((id) => `history_stream_over_compact_threshold:${id}`),
4861
+ storage: [
4862
+ ...params.historySummary.over_threshold.map((id) => `history_stream_over_compact_threshold:${id}`),
4863
+ ...params.authorAttributionWarnings
4864
+ ],
4737
4865
  locks: params.locksCheck.warnings,
4738
4866
  integrity: params.integrityCheck.warnings,
4739
4867
  history_drift: params.historyDriftCheck.warnings,
@@ -4807,6 +4935,9 @@ async function runHealth(global, options = {}) {
4807
4935
  commandLabel: "health"
4808
4936
  });
4809
4937
  const historySummary = await countHistoryStreams(pmRoot, settings.history.compact_policy);
4938
+ const authorAttribution = await scanHistoryAuthorAttribution(pmRoot);
4939
+ const actionableUnknownAuthorEventCount = resolveActionableUnknownAuthorEventCount(authorAttribution);
4940
+ const authorAttributionWarnings = actionableUnknownAuthorEventCount > 0 ? [`history_unknown_author_events:${actionableUnknownAuthorEventCount}`] : [];
4810
4941
  const locksCheck = await buildLocksCheck(pmRoot);
4811
4942
  const integrityCheck = skipPolicy.skipIntegrity ? buildSkippedHealthCheck("integrity") : await buildIntegrityCheck(pmRoot, typeRegistry.type_to_folder, settings.schema);
4812
4943
  const historyDriftCheck = skipPolicy.skipDrift ? buildSkippedHealthCheck("history_drift") : await buildHistoryDriftCheck(pmRoot, itemsWithBody);
@@ -4817,7 +4948,7 @@ async function runHealth(global, options = {}) {
4817
4948
  buildSettingsValuesHealthCheck(settingWarnings),
4818
4949
  telemetryCheck.check,
4819
4950
  extensionCheck.check,
4820
- buildStorageHealthCheck(items, settings, historySummary),
4951
+ buildStorageHealthCheck(items, settings, historySummary, authorAttribution),
4821
4952
  locksCheck.check,
4822
4953
  integrityCheck.check,
4823
4954
  historyDriftCheck.check,
@@ -4832,6 +4963,7 @@ async function runHealth(global, options = {}) {
4832
4963
  extensionCheck,
4833
4964
  historyPolicyWarnings: historyPolicy.warnings,
4834
4965
  historySummary,
4966
+ authorAttributionWarnings,
4835
4967
  locksCheck,
4836
4968
  integrityCheck,
4837
4969
  historyDriftCheck,
@@ -4846,6 +4978,7 @@ async function runHealth(global, options = {}) {
4846
4978
  telemetryCheck,
4847
4979
  extensionCheck,
4848
4980
  historySummary,
4981
+ authorAttributionWarnings,
4849
4982
  locksCheck,
4850
4983
  integrityCheck,
4851
4984
  historyDriftCheck,
@@ -4863,6 +4996,29 @@ async function runHealth(global, options = {}) {
4863
4996
  };
4864
4997
  return projectHealthResult(result, options, skipPolicy.summaryMode);
4865
4998
  }
4999
+ var _testOnlyHealthCommand = {
5000
+ buildExtensionHealthTriageSummary,
5001
+ buildCapabilityContractMetadata,
5002
+ buildVectorizationProviderDetails,
5003
+ collectUnknownCapabilityGuidance,
5004
+ isAdvisoryHealthWarning,
5005
+ isDirectory,
5006
+ isExpectedUnmanagedExtension,
5007
+ listItemDocumentPaths,
5008
+ normalizeEndpointForDisplay,
5009
+ normalizeExtensionNameForMatch,
5010
+ parseTelemetryQueue,
5011
+ probeTelemetryEndpointHealth,
5012
+ resolveActionableUnknownAuthorEventCount,
5013
+ resolveUnknownAuthorEventCount,
5014
+ selectStaleItemDetail,
5015
+ summarizeHealthCheckDetails,
5016
+ summarizeExtensionList,
5017
+ summarizeRecordList,
5018
+ summarizeStringList,
5019
+ telemetryEnvFlagEnabled,
5020
+ warningCode
5021
+ };
4866
5022
 
4867
5023
  // dist/cli/commands/scheduling-shortcuts.js
4868
5024
  var DEFAULT_DURATION = "1h";
@@ -4927,8 +5083,8 @@ function runRemind(title, options, global) {
4927
5083
  }
4928
5084
 
4929
5085
  // dist/cli/commands/stats.js
4930
- import fs5 from "node:fs/promises";
4931
- import path5 from "node:path";
5086
+ import fs6 from "node:fs/promises";
5087
+ import path6 from "node:path";
4932
5088
 
4933
5089
  // dist/core/history/history-storage-stats.js
4934
5090
  function shouldReplaceExtreme(candidate, current, candidateTieBreaker, currentTieBreaker, direction, tieDirection = "min") {
@@ -5038,7 +5194,7 @@ function isNotFoundError(error) {
5038
5194
  return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
5039
5195
  }
5040
5196
  async function readHistoryStreamContents(pmRoot) {
5041
- const historyDir = path5.join(pmRoot, "history");
5197
+ const historyDir = path6.join(pmRoot, "history");
5042
5198
  if (!await pathExists(historyDir)) {
5043
5199
  return [];
5044
5200
  }
@@ -5046,13 +5202,13 @@ async function readHistoryStreamContents(pmRoot) {
5046
5202
  path: historyDir,
5047
5203
  scope: "project"
5048
5204
  });
5049
- const historyFiles = (await fs5.readdir(historyDir)).filter((entry) => entry.endsWith(".jsonl")).sort((a, b) => a.localeCompare(b));
5205
+ const historyFiles = (await fs6.readdir(historyDir)).filter((entry) => entry.endsWith(".jsonl")).sort((a, b) => a.localeCompare(b));
5050
5206
  const streams = [];
5051
5207
  for (const file of historyFiles) {
5052
- const historyPath = path5.join(historyDir, file);
5208
+ const historyPath = path6.join(historyDir, file);
5053
5209
  let raw;
5054
5210
  try {
5055
- raw = await fs5.readFile(historyPath, "utf8");
5211
+ raw = await fs6.readFile(historyPath, "utf8");
5056
5212
  } catch (error) {
5057
5213
  if (isNotFoundError(error)) {
5058
5214
  continue;
@@ -5127,11 +5283,11 @@ async function runStats(global, options = {}) {
5127
5283
  }
5128
5284
 
5129
5285
  // dist/cli/commands/telemetry.js
5130
- import fs6 from "node:fs/promises";
5131
- import path6 from "node:path";
5132
- var TELEMETRY_QUEUE_RELATIVE_PATH2 = path6.join("runtime", "telemetry", "events.jsonl");
5133
- var TELEMETRY_STATE_RELATIVE_PATH2 = path6.join("runtime", "telemetry", "state.json");
5134
- var TELEMETRY_RUNTIME_RELATIVE_PATH = path6.join("runtime", "telemetry");
5286
+ import fs7 from "node:fs/promises";
5287
+ import path7 from "node:path";
5288
+ var TELEMETRY_QUEUE_RELATIVE_PATH2 = path7.join("runtime", "telemetry", "events.jsonl");
5289
+ var TELEMETRY_STATE_RELATIVE_PATH2 = path7.join("runtime", "telemetry", "state.json");
5290
+ var TELEMETRY_RUNTIME_RELATIVE_PATH = path7.join("runtime", "telemetry");
5135
5291
  var DEFAULT_STATS_LIMIT = 20;
5136
5292
  var TELEMETRY_SUBCOMMANDS = [
5137
5293
  "status",
@@ -5308,8 +5464,8 @@ async function readTelemetryRuntimeState(statePath) {
5308
5464
  }
5309
5465
  async function buildTelemetryStatusSummary(globalPmRoot) {
5310
5466
  const settings = await readSettings(globalPmRoot);
5311
- const queuePath = path6.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH2);
5312
- const statePath = path6.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH2);
5467
+ const queuePath = path7.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH2);
5468
+ const statePath = path7.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH2);
5313
5469
  const queueRaw = await readFileIfExists(queuePath);
5314
5470
  const queue = parseTelemetryQueue2(queueRaw);
5315
5471
  const runtimeState = await readTelemetryRuntimeState(statePath);
@@ -5339,8 +5495,8 @@ async function runTelemetry(options, _global) {
5339
5495
  void _global;
5340
5496
  const subcommand = normalizeTelemetrySubcommand(options.subcommand);
5341
5497
  const globalPmRoot = resolveGlobalPmRoot(process.cwd());
5342
- const queuePath = path6.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH2);
5343
- const statePath = path6.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH2);
5498
+ const queuePath = path7.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH2);
5499
+ const statePath = path7.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH2);
5344
5500
  if (subcommand === "status") {
5345
5501
  return {
5346
5502
  action: "telemetry",
@@ -5393,9 +5549,9 @@ async function runTelemetry(options, _global) {
5393
5549
  if (settingsChanged) {
5394
5550
  await writeSettings(globalPmRoot, settings, "telemetry:clear");
5395
5551
  }
5396
- const telemetryRuntimePath = path6.join(globalPmRoot, TELEMETRY_RUNTIME_RELATIVE_PATH);
5552
+ const telemetryRuntimePath = path7.join(globalPmRoot, TELEMETRY_RUNTIME_RELATIVE_PATH);
5397
5553
  const existed = await pathExists(telemetryRuntimePath);
5398
- await fs6.rm(telemetryRuntimePath, { recursive: true, force: true });
5554
+ await fs7.rm(telemetryRuntimePath, { recursive: true, force: true });
5399
5555
  const queueExistsAfter = await pathExists(queuePath);
5400
5556
  const stateExistsAfter = await pathExists(statePath);
5401
5557
  return {
@@ -5414,7 +5570,7 @@ async function runTelemetry(options, _global) {
5414
5570
  import { spawn } from "node:child_process";
5415
5571
  import { cp, mkdir, mkdtemp, readdir, rm } from "node:fs/promises";
5416
5572
  import { tmpdir } from "node:os";
5417
- import path7 from "node:path";
5573
+ import path8 from "node:path";
5418
5574
 
5419
5575
  // dist/core/test/item-test-run-tracking.js
5420
5576
  var DEFAULT_TRACKED_TEST_RUN_HISTORY_LIMIT = 20;
@@ -5569,14 +5725,227 @@ function resolveLinkedTestRunSelection(tests, selector) {
5569
5725
  };
5570
5726
  }
5571
5727
 
5572
- // dist/cli/commands/test/linked-command-detection.js
5573
- var PM_GLOBAL_FLAGS_WITH_VALUE = /* @__PURE__ */ new Set(["--path"]);
5574
- var NPX_FLAGS_WITH_VALUE = /* @__PURE__ */ new Set([
5575
- "-p",
5576
- "--package",
5577
- "-c",
5578
- "--call"
5728
+ // dist/sdk/test/linked-command-detection.js
5729
+ var PM_SUBCOMMANDS_WITH_ITEM_REFERENCE = /* @__PURE__ */ new Set([
5730
+ "get",
5731
+ "history",
5732
+ "restore",
5733
+ "update",
5734
+ "close",
5735
+ "delete",
5736
+ "append",
5737
+ "claim",
5738
+ "release",
5739
+ "comments",
5740
+ "notes",
5741
+ "learnings",
5742
+ "files",
5743
+ "docs",
5744
+ "deps",
5745
+ "test"
5746
+ ]);
5747
+ var PM_GLOBAL_FLAGS_WITH_VALUE = /* @__PURE__ */ new Set([
5748
+ "--pm-path",
5749
+ "--path",
5750
+ "--author"
5579
5751
  ]);
5752
+ var PM_ITEM_REFERENCE_FLAGS_WITH_VALUE = {
5753
+ get: /* @__PURE__ */ new Set([
5754
+ "--depth",
5755
+ "--fields",
5756
+ "--tree-depth",
5757
+ "--tree_depth",
5758
+ "--at",
5759
+ "--format"
5760
+ ]),
5761
+ history: /* @__PURE__ */ new Set(["--limit", "--field", "--format"]),
5762
+ restore: /* @__PURE__ */ new Set(["--message"]),
5763
+ update: /* @__PURE__ */ new Set([
5764
+ "--title",
5765
+ "-t",
5766
+ "--description",
5767
+ "-d",
5768
+ "--body",
5769
+ "-b",
5770
+ "--status",
5771
+ "-s",
5772
+ "--close-reason",
5773
+ "--close_reason",
5774
+ "--priority",
5775
+ "-p",
5776
+ "--type",
5777
+ "--tags",
5778
+ "--add-tags",
5779
+ "--add_tags",
5780
+ "--remove-tags",
5781
+ "--remove_tags",
5782
+ "--deadline",
5783
+ "--estimated-minutes",
5784
+ "--estimate",
5785
+ "--estimated_minutes",
5786
+ "--acceptance-criteria",
5787
+ "--ac",
5788
+ "--acceptance_criteria",
5789
+ "--definition-of-ready",
5790
+ "--definition_of_ready",
5791
+ "--order",
5792
+ "--rank",
5793
+ "--goal",
5794
+ "--objective",
5795
+ "--value",
5796
+ "--impact",
5797
+ "--outcome",
5798
+ "--why-now",
5799
+ "--why_now",
5800
+ "--message",
5801
+ "--assignee",
5802
+ "--parent",
5803
+ "--reviewer",
5804
+ "--risk",
5805
+ "--confidence",
5806
+ "--sprint",
5807
+ "--release",
5808
+ "--blocked-by",
5809
+ "--blocked_by",
5810
+ "--blocked-reason",
5811
+ "--blocked_reason",
5812
+ "--unblock-note",
5813
+ "--unblock_note",
5814
+ "--reporter",
5815
+ "--severity",
5816
+ "--environment",
5817
+ "--repro-steps",
5818
+ "--repro_steps",
5819
+ "--resolution",
5820
+ "--expected-result",
5821
+ "--expected_result",
5822
+ "--expected",
5823
+ "--actual-result",
5824
+ "--actual_result",
5825
+ "--actual",
5826
+ "--affected-version",
5827
+ "--affected_version",
5828
+ "--fixed-version",
5829
+ "--fixed_version",
5830
+ "--component",
5831
+ "--regression",
5832
+ "--customer-impact",
5833
+ "--customer_impact",
5834
+ "--dep",
5835
+ "--dep-remove",
5836
+ "--dep_remove",
5837
+ "--comment",
5838
+ "--note",
5839
+ "--learning",
5840
+ "--file",
5841
+ "--test",
5842
+ "--doc",
5843
+ "--reminder",
5844
+ "--event",
5845
+ "--type-option",
5846
+ "--type_option",
5847
+ "--field",
5848
+ "--unset",
5849
+ "--body-file"
5850
+ ]),
5851
+ close: /* @__PURE__ */ new Set([
5852
+ "--reason",
5853
+ "-r",
5854
+ "--close-reason",
5855
+ "--duplicate-of",
5856
+ "-d",
5857
+ "--message",
5858
+ "-m",
5859
+ "--validate-close",
5860
+ "--resolution",
5861
+ "--expected-result",
5862
+ "--expected_result",
5863
+ "--expected",
5864
+ "--actual-result",
5865
+ "--actual_result",
5866
+ "--actual"
5867
+ ]),
5868
+ delete: /* @__PURE__ */ new Set(["--message"]),
5869
+ append: /* @__PURE__ */ new Set(["--body", "--text", "--message"]),
5870
+ claim: /* @__PURE__ */ new Set([
5871
+ "--assignee",
5872
+ "--message",
5873
+ "--type",
5874
+ "--tag",
5875
+ "--priority",
5876
+ "--assignee-filter",
5877
+ "--parent",
5878
+ "--sprint",
5879
+ "--release",
5880
+ "--max-attempts"
5881
+ ]),
5882
+ release: /* @__PURE__ */ new Set(["--assignee", "--message"]),
5883
+ comments: /* @__PURE__ */ new Set([
5884
+ "--add",
5885
+ "--body",
5886
+ "--comment",
5887
+ "--file",
5888
+ "--edit",
5889
+ "--delete",
5890
+ "--limit",
5891
+ "--message"
5892
+ ]),
5893
+ notes: /* @__PURE__ */ new Set([
5894
+ "--add",
5895
+ "--file",
5896
+ "--edit",
5897
+ "--delete",
5898
+ "--limit",
5899
+ "--message"
5900
+ ]),
5901
+ learnings: /* @__PURE__ */ new Set([
5902
+ "--add",
5903
+ "--file",
5904
+ "--edit",
5905
+ "--delete",
5906
+ "--limit",
5907
+ "--message"
5908
+ ]),
5909
+ files: /* @__PURE__ */ new Set([
5910
+ "--add",
5911
+ "--add-glob",
5912
+ "--remove",
5913
+ "--migrate",
5914
+ "--note",
5915
+ "--message"
5916
+ ]),
5917
+ docs: /* @__PURE__ */ new Set([
5918
+ "--add",
5919
+ "--add-glob",
5920
+ "--remove",
5921
+ "--migrate",
5922
+ "--note",
5923
+ "--message"
5924
+ ]),
5925
+ deps: /* @__PURE__ */ new Set([
5926
+ "--format",
5927
+ "--max-depth",
5928
+ "--collapse",
5929
+ "--node-limit",
5930
+ "--edge-limit",
5931
+ "--token-budget",
5932
+ "--cursor"
5933
+ ]),
5934
+ test: /* @__PURE__ */ new Set([
5935
+ "--add",
5936
+ "--add-json",
5937
+ "--remove",
5938
+ "--match",
5939
+ "--only-index",
5940
+ "--timeout",
5941
+ "--env-set",
5942
+ "--env-clear",
5943
+ "--pm-context",
5944
+ "--message"
5945
+ ])
5946
+ };
5947
+ var NPX_FLAGS_WITH_VALUE = /* @__PURE__ */ new Set(["-p", "--package"]);
5948
+ var NPX_COMMAND_STRING_FLAGS = /* @__PURE__ */ new Set(["-c", "--call"]);
5580
5949
  var PNPM_GLOBAL_FLAGS_WITH_VALUE = /* @__PURE__ */ new Set([
5581
5950
  "-c",
5582
5951
  "-C",
@@ -5606,6 +5975,37 @@ var SCRIPT_RUN_FLAGS_WITH_VALUE = /* @__PURE__ */ new Set([
5606
5975
  function splitNormalizedCommandSegments(normalizedCommand) {
5607
5976
  return normalizedCommand.split(/&&|\|\||\||;/).map((segment) => segment.trim()).filter((segment) => segment.length > 0);
5608
5977
  }
5978
+ function extractPmInvocationArgsFromSegment(segment) {
5979
+ const tokens = stripLeadingEnvAssignments(segment.split(" ").filter((token) => token.length > 0));
5980
+ if (tokens.length === 0)
5981
+ return null;
5982
+ const [executable, ...args] = tokens;
5983
+ if (isPmExecutableToken(executable) || isPmCliScriptToken(executable)) {
5984
+ return args;
5985
+ }
5986
+ if (executable === "node" && args[0] && isPmCliScriptToken(args[0])) {
5987
+ return args.slice(1);
5988
+ }
5989
+ const invocation = executable === "npx" || executable === "bunx" ? parseNpxCommand(args) : executable === "pnpm" ? parsePnpmDlxCommand(args) : executable === "npm" ? parseNpmExecCommand(args) : null;
5990
+ return invocation && (isPmExecutableToken(invocation.command) || isPmCliPackageToken(invocation.command)) ? invocation.args : null;
5991
+ }
5992
+ var extractReferencedPmItemIdsFromCommand = (command, idPrefix = "pm") => {
5993
+ const normalizedPrefix = idPrefix.trim().toLowerCase().replace(/-+$/, "");
5994
+ if (normalizedPrefix.length === 0)
5995
+ return [];
5996
+ const normalizedCommand = command.trim().replaceAll("\\", "/").replaceAll('"', "").replaceAll("'", "").replaceAll(/\s+/g, " ").toLowerCase();
5997
+ const ids = /* @__PURE__ */ new Set();
5998
+ for (const segment of splitNormalizedCommandSegments(normalizedCommand)) {
5999
+ const invocationArgs = extractPmInvocationArgsFromSegment(segment);
6000
+ const context = invocationArgs ? resolvePmSubcommandContext(invocationArgs) : null;
6001
+ const candidate = context && PM_SUBCOMMANDS_WITH_ITEM_REFERENCE.has(context.subcommand) ? firstPositionalToken(context.remaining, PM_ITEM_REFERENCE_FLAGS_WITH_VALUE[context.subcommand]) : void 0;
6002
+ const normalizedCandidate = candidate?.trim().toLowerCase();
6003
+ if (normalizedCandidate?.startsWith(`${normalizedPrefix}-`) === true && normalizedCandidate.length > normalizedPrefix.length + 1) {
6004
+ ids.add(candidate);
6005
+ }
6006
+ }
6007
+ return [...ids].sort((left, right) => left.localeCompare(right));
6008
+ };
5609
6009
  function stripLeadingEnvAssignments(tokens) {
5610
6010
  let start = 0;
5611
6011
  if (tokens[start] === "env") {
@@ -5675,15 +6075,16 @@ function parseNpxCommand(tokens) {
5675
6075
  if (!token.startsWith("-")) {
5676
6076
  break;
5677
6077
  }
5678
- if (token.includes("=")) {
5679
- index += 1;
5680
- continue;
6078
+ const inlineCommandMatch = /^(?:-c|--call)=(.*)$/.exec(token);
6079
+ if (inlineCommandMatch) {
6080
+ const command2 = inlineCommandMatch[1];
6081
+ return command2 ? { command: command2, args: tokens.slice(index + 1) } : null;
5681
6082
  }
5682
- if (NPX_FLAGS_WITH_VALUE.has(token)) {
5683
- index += 2;
5684
- continue;
6083
+ if (NPX_COMMAND_STRING_FLAGS.has(token)) {
6084
+ index += 1;
6085
+ break;
5685
6086
  }
5686
- index += 1;
6087
+ index += NPX_FLAGS_WITH_VALUE.has(token) && !token.includes("=") ? 2 : 1;
5687
6088
  }
5688
6089
  const command = tokens[index];
5689
6090
  if (!command) {
@@ -5758,11 +6159,18 @@ function resolvePmSubcommandContext(args) {
5758
6159
  }
5759
6160
  return null;
5760
6161
  }
5761
- function firstPositionalToken(tokens) {
5762
- for (const token of tokens) {
6162
+ function firstPositionalToken(tokens, flagsWithValue = /* @__PURE__ */ new Set()) {
6163
+ for (let index = 0; index < tokens.length; index += 1) {
6164
+ const token = tokens[index];
6165
+ if (token === "--") {
6166
+ return tokens[index + 1];
6167
+ }
5763
6168
  if (!token.startsWith("-")) {
5764
6169
  return token;
5765
6170
  }
6171
+ if (!token.includes("=") && (PM_GLOBAL_FLAGS_WITH_VALUE.has(token) || flagsWithValue.has(token))) {
6172
+ index += 1;
6173
+ }
5766
6174
  }
5767
6175
  return void 0;
5768
6176
  }
@@ -5793,24 +6201,6 @@ var LINKED_TEST_INFRA_COLLISION_PATTERNS = [
5793
6201
  /web server[^.\n]*already running/i,
5794
6202
  /failed to listen on/i
5795
6203
  ];
5796
- var PM_SUBCOMMANDS_WITH_ITEM_REFERENCE = /* @__PURE__ */ new Set([
5797
- "get",
5798
- "history",
5799
- "restore",
5800
- "update",
5801
- "close",
5802
- "delete",
5803
- "append",
5804
- "claim",
5805
- "release",
5806
- "comments",
5807
- "notes",
5808
- "learnings",
5809
- "files",
5810
- "docs",
5811
- "deps",
5812
- "test"
5813
- ]);
5814
6204
  var PM_TRACKER_READ_SUBCOMMANDS = /* @__PURE__ */ new Set([
5815
6205
  "activity",
5816
6206
  "calendar",
@@ -5987,51 +6377,6 @@ function mergeEnvClearDirectives(entries, optionName) {
5987
6377
  }
5988
6378
  return [...new Set(values)];
5989
6379
  }
5990
- function looksLikePrefixedItemId(token, idPrefix) {
5991
- const normalizedPrefix = idPrefix.trim().toLowerCase().replace(/-+$/, "");
5992
- if (normalizedPrefix.length === 0) {
5993
- return false;
5994
- }
5995
- const normalized = token.trim().toLowerCase();
5996
- if (!normalized.startsWith(`${normalizedPrefix}-`)) {
5997
- return false;
5998
- }
5999
- return normalized.length > normalizedPrefix.length + 1;
6000
- }
6001
- function extractPmInvocationArgsFromSegment(segment) {
6002
- const rawTokens = segment.split(" ").filter((token) => token.length > 0);
6003
- const tokens = stripLeadingEnvAssignments(rawTokens);
6004
- if (tokens.length === 0) {
6005
- return null;
6006
- }
6007
- const [executable, ...args] = tokens;
6008
- if (isPmExecutableToken(executable) || isPmCliScriptToken(executable)) {
6009
- return args;
6010
- }
6011
- if (executable === "node" && args.length > 0 && isPmCliScriptToken(args[0])) {
6012
- return args.slice(1);
6013
- }
6014
- return extractPackageManagerPmInvocationArgs(executable, args);
6015
- }
6016
- function extractPackageManagerPmInvocationArgs(executable, args) {
6017
- const parsed = parsePackageManagerPmInvocation(executable, args);
6018
- if (!parsed || !isPmExecutableToken(parsed.command) && !isPmCliPackageToken(parsed.command)) {
6019
- return null;
6020
- }
6021
- return parsed.args;
6022
- }
6023
- function parsePackageManagerPmInvocation(executable, args) {
6024
- if (executable === "npx" || executable === "bunx") {
6025
- return parseNpxCommand(args);
6026
- }
6027
- if (executable === "pnpm") {
6028
- return parsePnpmDlxCommand(args);
6029
- }
6030
- if (executable === "npm") {
6031
- return parseNpmExecCommand(args);
6032
- }
6033
- return null;
6034
- }
6035
6380
  function commandInvokesPmCli(command) {
6036
6381
  const normalizedCommand = normalizeCommandForValidation(command);
6037
6382
  return splitNormalizedCommandSegments(normalizedCommand).some((segment) => extractPmInvocationArgsFromSegment(segment) !== null);
@@ -6050,31 +6395,6 @@ function commandInvokesPmTrackerReadCommand(command) {
6050
6395
  return PM_TRACKER_READ_SUBCOMMANDS.has(context.subcommand);
6051
6396
  });
6052
6397
  }
6053
- function extractReferencedPmItemIdsFromCommand(command, idPrefix = "pm") {
6054
- const normalizedCommand = normalizeCommandForValidation(command);
6055
- const ids = /* @__PURE__ */ new Set();
6056
- for (const segment of splitNormalizedCommandSegments(normalizedCommand)) {
6057
- const invocationArgs = extractPmInvocationArgsFromSegment(segment);
6058
- if (!invocationArgs) {
6059
- continue;
6060
- }
6061
- const context = resolvePmSubcommandContext(invocationArgs);
6062
- if (!context) {
6063
- continue;
6064
- }
6065
- if (!PM_SUBCOMMANDS_WITH_ITEM_REFERENCE.has(context.subcommand)) {
6066
- continue;
6067
- }
6068
- const candidate = firstPositionalToken(context.remaining);
6069
- if (!candidate) {
6070
- continue;
6071
- }
6072
- if (looksLikePrefixedItemId(candidate, idPrefix)) {
6073
- ids.add(candidate);
6074
- }
6075
- }
6076
- return [...ids].sort((left, right) => left.localeCompare(right));
6077
- }
6078
6398
  function resolveDirectRunnerSubcommand(parsed) {
6079
6399
  if (!parsed) {
6080
6400
  return void 0;
@@ -6184,7 +6504,7 @@ function packageManagerInvokesUnsafeDirectTestRunner(executable, args) {
6184
6504
  return isDirectTestRunnerSubcommand(parseNpxCommand(args)?.command);
6185
6505
  }
6186
6506
  if (executable === "pnpm" || executable === "npm") {
6187
- return isDirectTestRunnerSubcommand(parsePackageManagerPmInvocation(executable, args)?.command) || firstDirectTestRunnerSubcommand(executable, args) === "vitest";
6507
+ return isDirectTestRunnerSubcommand((executable === "pnpm" ? parsePnpmDlxCommand(args) : parseNpmExecCommand(args))?.command) || firstDirectTestRunnerSubcommand(executable, args) === "vitest";
6188
6508
  }
6189
6509
  return (executable === "yarn" || executable === "bun") && firstDirectTestRunnerSubcommand(executable, args) === "vitest";
6190
6510
  }
@@ -6661,7 +6981,7 @@ async function copyIntoSandboxIfPresent(sourcePath, targetPath, recursive = fals
6661
6981
  if (!await pathExists(sourcePath)) {
6662
6982
  return;
6663
6983
  }
6664
- await mkdir(path7.dirname(targetPath), { recursive: true });
6984
+ await mkdir(path8.dirname(targetPath), { recursive: true });
6665
6985
  try {
6666
6986
  if (recursive) {
6667
6987
  await cp(sourcePath, targetPath, { recursive: true, force: true });
@@ -6677,9 +6997,9 @@ async function copyIntoSandboxIfPresent(sourcePath, targetPath, recursive = fals
6677
6997
  }
6678
6998
  async function seedLinkedTestSandbox(sandboxPmPath, sandboxGlobalPath, sourceRoots) {
6679
6999
  await copyIntoSandboxIfPresent(getSettingsPath(sourceRoots.projectPmRoot), getSettingsPath(sandboxPmPath));
6680
- await copyIntoSandboxIfPresent(path7.join(sourceRoots.projectPmRoot, "extensions"), path7.join(sandboxPmPath, "extensions"), true);
7000
+ await copyIntoSandboxIfPresent(path8.join(sourceRoots.projectPmRoot, "extensions"), path8.join(sandboxPmPath, "extensions"), true);
6681
7001
  await copyIntoSandboxIfPresent(getSettingsPath(sourceRoots.globalPmRoot), getSettingsPath(sandboxGlobalPath));
6682
- await copyIntoSandboxIfPresent(path7.join(sourceRoots.globalPmRoot, "extensions"), path7.join(sandboxGlobalPath, "extensions"), true);
7002
+ await copyIntoSandboxIfPresent(path8.join(sourceRoots.globalPmRoot, "extensions"), path8.join(sandboxGlobalPath, "extensions"), true);
6683
7003
  }
6684
7004
  async function seedLinkedTestTrackerData(sourceRoot, sandboxRoot) {
6685
7005
  if (!await pathExists(sourceRoot)) {
@@ -6690,8 +7010,8 @@ async function seedLinkedTestTrackerData(sourceRoot, sandboxRoot) {
6690
7010
  if (LINKED_TEST_TRACKER_DIRS_TO_SKIP.has(entry.name)) {
6691
7011
  continue;
6692
7012
  }
6693
- const sourcePath = path7.join(sourceRoot, entry.name);
6694
- const targetPath = path7.join(sandboxRoot, entry.name);
7013
+ const sourcePath = path8.join(sourceRoot, entry.name);
7014
+ const targetPath = path8.join(sandboxRoot, entry.name);
6695
7015
  if (entry.isDirectory()) {
6696
7016
  await copyIntoSandboxIfPresent(sourcePath, targetPath, true);
6697
7017
  continue;
@@ -6711,7 +7031,7 @@ async function countLinkedTestItemFiles(pmRoot) {
6711
7031
  if (!entry.isDirectory() || LINKED_TEST_ITEM_COUNT_DIRS_TO_SKIP.has(entry.name)) {
6712
7032
  continue;
6713
7033
  }
6714
- const folderPath = path7.join(pmRoot, entry.name);
7034
+ const folderPath = path8.join(pmRoot, entry.name);
6715
7035
  let files;
6716
7036
  try {
6717
7037
  files = await readdir(folderPath, { withFileTypes: true });
@@ -6906,10 +7226,10 @@ ${stderr}`;
6906
7226
  function createLinkedTestSandboxLayout(sandboxRoot) {
6907
7227
  return {
6908
7228
  root: sandboxRoot,
6909
- schemaProjectPmPath: path7.join(sandboxRoot, "schema", "project", ".agents", "pm"),
6910
- schemaGlobalPmPath: path7.join(sandboxRoot, "schema", "global"),
6911
- trackerProjectPmPath: path7.join(sandboxRoot, "tracker", "project", ".agents", "pm"),
6912
- trackerGlobalPmPath: path7.join(sandboxRoot, "tracker", "global")
7229
+ schemaProjectPmPath: path8.join(sandboxRoot, "schema", "project", ".agents", "pm"),
7230
+ schemaGlobalPmPath: path8.join(sandboxRoot, "schema", "global"),
7231
+ trackerProjectPmPath: path8.join(sandboxRoot, "tracker", "project", ".agents", "pm"),
7232
+ trackerGlobalPmPath: path8.join(sandboxRoot, "tracker", "global")
6913
7233
  };
6914
7234
  }
6915
7235
  async function initializeLinkedTestSandboxes(layout) {
@@ -7109,7 +7429,7 @@ async function runSingleLinkedTest(params) {
7109
7429
  }
7110
7430
  async function runLinkedTests(tests, defaultTimeoutSeconds, options) {
7111
7431
  const results = [];
7112
- const sandboxRoot = await mkdtemp(path7.join(tmpdir(), "pm-linked-test-"));
7432
+ const sandboxRoot = await mkdtemp(path8.join(tmpdir(), "pm-linked-test-"));
7113
7433
  const layout = createLinkedTestSandboxLayout(sandboxRoot);
7114
7434
  const runLevelPmContextMode = parsePmContextMode(options?.pmContext);
7115
7435
  const progressMode = options?.progress === true ? "always" : "auto";
@@ -7768,10 +8088,10 @@ async function runTestAll(options, global) {
7768
8088
  import os from "node:os";
7769
8089
 
7770
8090
  // dist/core/test/background-runs.js
7771
- import fs7 from "node:fs/promises";
8091
+ import fs8 from "node:fs/promises";
7772
8092
  import { spawn as spawn2 } from "node:child_process";
7773
8093
  import { createHash, randomBytes } from "node:crypto";
7774
- import path8 from "node:path";
8094
+ import path9 from "node:path";
7775
8095
  var BACKGROUND_RUN_ACTIVE_STATUSES = /* @__PURE__ */ new Set([
7776
8096
  "queued",
7777
8097
  "running"
@@ -7809,7 +8129,7 @@ function buildBackgroundTestRunFingerprint(kind, commandArgs, pmRoot) {
7809
8129
  const payload = {
7810
8130
  kind,
7811
8131
  command: normalizeCommandArgs(commandArgs),
7812
- pm_root: path8.resolve(pmRoot)
8132
+ pm_root: path9.resolve(pmRoot)
7813
8133
  };
7814
8134
  return createHash("sha256").update(JSON.stringify(payload)).digest("hex");
7815
8135
  }
@@ -7864,8 +8184,8 @@ async function listBackgroundRunRecordPaths(pmRoot) {
7864
8184
  if (!await pathExists(recordsRoot)) {
7865
8185
  return [];
7866
8186
  }
7867
- const entries = await fs7.readdir(recordsRoot, { withFileTypes: true });
7868
- return entries.filter((entry) => entry.isFile() && entry.name.endsWith(".json")).map((entry) => path8.join(recordsRoot, entry.name)).sort((left, right) => right.localeCompare(left));
8187
+ const entries = await fs8.readdir(recordsRoot, { withFileTypes: true });
8188
+ return entries.filter((entry) => entry.isFile() && entry.name.endsWith(".json")).map((entry) => path9.join(recordsRoot, entry.name)).sort((left, right) => right.localeCompare(left));
7869
8189
  }
7870
8190
  function parseLinuxRssStatus(raw) {
7871
8191
  const match = raw.match(/^VmRSS:\s+(\d+)\s+kB$/m);
@@ -7879,7 +8199,7 @@ async function readLinuxRssBytes(pid) {
7879
8199
  return void 0;
7880
8200
  }
7881
8201
  try {
7882
- const raw = await fs7.readFile(`/proc/${pid}/status`, "utf8");
8202
+ const raw = await fs8.readFile(`/proc/${pid}/status`, "utf8");
7883
8203
  return parseLinuxRssStatus(raw);
7884
8204
  } catch {
7885
8205
  return void 0;
@@ -7907,7 +8227,7 @@ async function readLinuxCpuSeconds(pid) {
7907
8227
  return {};
7908
8228
  }
7909
8229
  try {
7910
- const raw = await fs7.readFile(`/proc/${pid}/stat`, "utf8");
8230
+ const raw = await fs8.readFile(`/proc/${pid}/stat`, "utf8");
7911
8231
  return parseLinuxCpuStat(raw);
7912
8232
  } catch {
7913
8233
  return {};
@@ -8043,18 +8363,18 @@ function tailLines(value, limit) {
8043
8363
  async function resolveBackgroundCliEntry(cwd) {
8044
8364
  const configured = process.env.PM_BACKGROUND_CLI_ENTRY?.trim();
8045
8365
  if (configured && configured.length > 0) {
8046
- const resolvedConfigured = path8.resolve(cwd, configured);
8366
+ const resolvedConfigured = path9.resolve(cwd, configured);
8047
8367
  if (await pathExists(resolvedConfigured)) {
8048
8368
  return resolvedConfigured;
8049
8369
  }
8050
8370
  }
8051
- const distEntry = path8.resolve(cwd, "dist", "cli.js");
8371
+ const distEntry = path9.resolve(cwd, "dist", "cli.js");
8052
8372
  if (await pathExists(distEntry)) {
8053
8373
  return distEntry;
8054
8374
  }
8055
8375
  const argvEntry = process.argv[1]?.trim();
8056
8376
  if (argvEntry && argvEntry.length > 0) {
8057
- const resolvedArgvEntry = path8.resolve(cwd, argvEntry);
8377
+ const resolvedArgvEntry = path9.resolve(cwd, argvEntry);
8058
8378
  if (await pathExists(resolvedArgvEntry)) {
8059
8379
  return resolvedArgvEntry;
8060
8380
  }
@@ -8111,8 +8431,8 @@ async function startBackgroundTestRun(options) {
8111
8431
  const stdoutPath = getTestRunStdoutPath(options.pmRoot, runId);
8112
8432
  const stderrPath = getTestRunStderrPath(options.pmRoot, runId);
8113
8433
  const resultPath = getTestRunResultPath(options.pmRoot, runId);
8114
- await fs7.writeFile(stdoutPath, "", "utf8");
8115
- await fs7.writeFile(stderrPath, "", "utf8");
8434
+ await fs8.writeFile(stdoutPath, "", "utf8");
8435
+ await fs8.writeFile(stderrPath, "", "utf8");
8116
8436
  const record = {
8117
8437
  id: runId,
8118
8438
  kind: options.kind,
@@ -8191,7 +8511,7 @@ async function spawnBackgroundTestRunWorker(options) {
8191
8511
  }
8192
8512
  async function appendFileOrdered(queue, filePath, text) {
8193
8513
  await queue;
8194
- await fs7.appendFile(filePath, text, "utf8");
8514
+ await fs8.appendFile(filePath, text, "utf8");
8195
8515
  }
8196
8516
  function resolvePositiveEnvInteger(name, fallback) {
8197
8517
  const parsed = Number.parseInt(process.env[name] ?? "", 10);
@@ -8770,11 +9090,11 @@ async function runTestRunsWorker(runId, global) {
8770
9090
  };
8771
9091
  }
8772
9092
 
8773
- // dist/cli/commands/validate.js
8774
- import fs8 from "node:fs/promises";
9093
+ // dist/sdk/governance/validate.js
9094
+ import fs9 from "node:fs/promises";
8775
9095
  import { realpathSync } from "node:fs";
8776
9096
  import { execFile } from "node:child_process";
8777
- import path9 from "node:path";
9097
+ import path10 from "node:path";
8778
9098
  import { promisify } from "node:util";
8779
9099
 
8780
9100
  // dist/core/validate/fix-planning.js
@@ -9080,8 +9400,8 @@ function buildMissingLinkedPathRows(rows, lookup) {
9080
9400
  });
9081
9401
  }
9082
9402
  }
9083
- return [...buckets.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([path10, bucket]) => ({
9084
- path: path10,
9403
+ return [...buckets.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([path11, bucket]) => ({
9404
+ path: path11,
9085
9405
  classification: bucket.classification,
9086
9406
  items: [...bucket.owners.values()].map((owner) => {
9087
9407
  const metadata = lookup(owner.item_id);
@@ -9111,7 +9431,7 @@ function summarizeMissingLinkedPathRows(rows) {
9111
9431
  return lines;
9112
9432
  }
9113
9433
 
9114
- // dist/cli/commands/validate.js
9434
+ // dist/sdk/governance/validate.js
9115
9435
  var FILE_SCAN_DIRECTORIES = ["src", "tests", "docs"];
9116
9436
  var FILE_SCAN_ROOT_FILES = [
9117
9437
  "README.md",
@@ -9222,6 +9542,7 @@ var METADATA_TRUNCATED_KEY_BY_FIELD = {
9222
9542
  release: "missing_release_truncated"
9223
9543
  };
9224
9544
  var GIT_LS_FILES_MAX_BUFFER = 32 * 1024 * 1024;
9545
+ var GIT_LS_FILES_TIMEOUT_MS = 1e4;
9225
9546
  var FILE_LIST_SUMMARY_LIMIT = 40;
9226
9547
  var DIAGNOSTIC_LIST_SUMMARY_LIMIT = 5;
9227
9548
  var LINKED_ARTIFACT_MAX_PATH_LENGTH = 4096;
@@ -9417,16 +9738,16 @@ function resolveFileScanMode(scanMode) {
9417
9738
  throw new PmCliError(`Unknown --scan-mode value "${scanMode}". Supported values: ${VALIDATE_FILE_SCAN_MODES.join(", ")}.`, EXIT_CODE.USAGE);
9418
9739
  }
9419
9740
  function resolveWorkspaceRoot(pmRoot) {
9420
- const resolvedPmRoot = path9.resolve(pmRoot);
9741
+ const resolvedPmRoot = path10.resolve(pmRoot);
9421
9742
  const normalizedPmRoot = resolvedPmRoot.replaceAll("\\", "/");
9422
9743
  if (normalizedPmRoot.endsWith("/.agents/pm")) {
9423
- return path9.dirname(path9.dirname(resolvedPmRoot));
9744
+ return path10.dirname(path10.dirname(resolvedPmRoot));
9424
9745
  }
9425
- const resolvedCwd = path9.resolve(process.cwd());
9746
+ const resolvedCwd = path10.resolve(process.cwd());
9426
9747
  const canonicalPmRoot = realpathForWorkspaceRoot(resolvedPmRoot);
9427
9748
  const canonicalCwd = realpathForWorkspaceRoot(resolvedCwd);
9428
- const relativeFromPmRoot = path9.relative(canonicalPmRoot, canonicalCwd);
9429
- const cwdInsidePmRoot = relativeFromPmRoot.length === 0 || !relativeFromPmRoot.startsWith("..") && !path9.isAbsolute(relativeFromPmRoot);
9749
+ const relativeFromPmRoot = path10.relative(canonicalPmRoot, canonicalCwd);
9750
+ const cwdInsidePmRoot = relativeFromPmRoot.length === 0 || !relativeFromPmRoot.startsWith("..") && !path10.isAbsolute(relativeFromPmRoot);
9430
9751
  if (cwdInsidePmRoot) {
9431
9752
  return resolvedPmRoot;
9432
9753
  }
@@ -9436,14 +9757,14 @@ function realpathForWorkspaceRoot(inputPath) {
9436
9757
  try {
9437
9758
  return realpathSync.native(inputPath);
9438
9759
  } catch {
9439
- return path9.resolve(inputPath);
9760
+ return path10.resolve(inputPath);
9440
9761
  }
9441
9762
  }
9442
9763
  async function listFilesRecursive(basePath, relativePath, output) {
9443
- const targetDirectory = relativePath.length > 0 ? path9.join(basePath, relativePath) : basePath;
9764
+ const targetDirectory = relativePath.length > 0 ? path10.join(basePath, relativePath) : basePath;
9444
9765
  let entries;
9445
9766
  try {
9446
- entries = await fs8.readdir(targetDirectory, { withFileTypes: true });
9767
+ entries = await fs9.readdir(targetDirectory, { withFileTypes: true });
9447
9768
  } catch (error) {
9448
9769
  if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT") {
9449
9770
  return;
@@ -9454,7 +9775,7 @@ async function listFilesRecursive(basePath, relativePath, output) {
9454
9775
  if (entry.name.startsWith(".")) {
9455
9776
  continue;
9456
9777
  }
9457
- const childRelative = relativePath.length > 0 ? path9.join(relativePath, entry.name) : entry.name;
9778
+ const childRelative = relativePath.length > 0 ? path10.join(relativePath, entry.name) : entry.name;
9458
9779
  if (entry.isDirectory()) {
9459
9780
  if (DIRECTORY_IGNORE_SET.has(entry.name)) {
9460
9781
  continue;
@@ -9474,9 +9795,9 @@ async function collectDefaultProjectFileCandidates(workspaceRoot) {
9474
9795
  await listFilesRecursive(workspaceRoot, directory, discovered);
9475
9796
  }
9476
9797
  for (const candidate of FILE_SCAN_ROOT_FILES) {
9477
- const absolute = path9.join(workspaceRoot, candidate);
9798
+ const absolute = path10.join(workspaceRoot, candidate);
9478
9799
  try {
9479
- const stats = await fs8.stat(absolute);
9800
+ const stats = await fs9.stat(absolute);
9480
9801
  if (stats.isFile()) {
9481
9802
  discovered.push(normalizeRelativePath2(candidate));
9482
9803
  }
@@ -9491,7 +9812,8 @@ async function collectTrackedGitFileCandidates(workspaceRoot) {
9491
9812
  cwd: workspaceRoot,
9492
9813
  encoding: "utf8",
9493
9814
  maxBuffer: GIT_LS_FILES_MAX_BUFFER,
9494
- windowsHide: true
9815
+ windowsHide: true,
9816
+ timeout: GIT_LS_FILES_TIMEOUT_MS
9495
9817
  });
9496
9818
  const discovered = stdout.split("\0").map((value) => normalizeRelativePath2(value)).filter((value) => value.length > 0);
9497
9819
  return [...new Set(discovered)].sort((left, right) => left.localeCompare(right));
@@ -9505,7 +9827,7 @@ function resolvePmInternalCandidatePrefixes(pmRoot, workspaceRoot) {
9505
9827
  if (configuredDefault.length > 0) {
9506
9828
  prefixes.add(configuredDefault);
9507
9829
  }
9508
- const relativePmRoot = normalizeRelativeDirectoryPath(path9.relative(workspaceRoot, pmRoot));
9830
+ const relativePmRoot = normalizeRelativeDirectoryPath(path10.relative(workspaceRoot, pmRoot));
9509
9831
  if (relativePmRoot.length > 0 && !relativePmRoot.startsWith("..")) {
9510
9832
  prefixes.add(relativePmRoot);
9511
9833
  }
@@ -9851,7 +10173,7 @@ function buildResolutionCheck(items, statusRegistry, verboseDiagnostics) {
9851
10173
  function escapeRegExp(value) {
9852
10174
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
9853
10175
  }
9854
- function buildLifecycleDependencyGraph(activeItems, idPrefix = "pm") {
10176
+ function buildLifecycleDependencyGraph(activeItems, idPrefix = "pm", relationshipRegistry = createRelationshipKindRegistry()) {
9855
10177
  const activeItemIds = new Set(activeItems.map((item) => item.id));
9856
10178
  const graph = /* @__PURE__ */ new Map();
9857
10179
  const sortedItems = [...activeItems].sort((left, right) => left.id.localeCompare(right.id));
@@ -9862,6 +10184,12 @@ function buildLifecycleDependencyGraph(activeItems, idPrefix = "pm") {
9862
10184
  edges.add(blockedBy);
9863
10185
  }
9864
10186
  for (const dependency of item.dependencies ?? []) {
10187
+ const dependencyKind = toMeaningfulString(dependency.kind);
10188
+ if (!dependencyKind)
10189
+ continue;
10190
+ const relationshipDefinition = relationshipRegistry.resolve(dependencyKind);
10191
+ if (!relationshipDefinition?.ordering)
10192
+ continue;
9865
10193
  const dependencyId = toMeaningfulString(dependency.id);
9866
10194
  if (!dependencyId || !activeItemIds.has(dependencyId)) {
9867
10195
  continue;
@@ -9979,30 +10307,30 @@ function resolveLifecycleDependencyCycleSamplePath(component, graph) {
9979
10307
  return [start, start];
9980
10308
  }
9981
10309
  const componentSet = new Set(component);
9982
- const path10 = [start];
10310
+ const path11 = [start];
9983
10311
  const visited = /* @__PURE__ */ new Set([start]);
9984
10312
  const search = (current) => {
9985
10313
  const neighbors = (graph.get(current) ?? []).filter((candidate) => componentSet.has(candidate));
9986
10314
  for (const next of neighbors) {
9987
- if (next === start && path10.length > 1) {
9988
- path10.push(start);
10315
+ if (next === start && path11.length > 1) {
10316
+ path11.push(start);
9989
10317
  return true;
9990
10318
  }
9991
10319
  if (visited.has(next)) {
9992
10320
  continue;
9993
10321
  }
9994
10322
  visited.add(next);
9995
- path10.push(next);
10323
+ path11.push(next);
9996
10324
  if (search(next)) {
9997
10325
  return true;
9998
10326
  }
9999
- path10.pop();
10327
+ path11.pop();
10000
10328
  visited.delete(next);
10001
10329
  }
10002
10330
  return false;
10003
10331
  };
10004
10332
  if (search(start)) {
10005
- return [...path10];
10333
+ return [...path11];
10006
10334
  }
10007
10335
  return [...component, start];
10008
10336
  }
@@ -10260,12 +10588,12 @@ function linkedArtifactPathExceedsFilesystemLimits(artifactPath) {
10260
10588
  return normalized.length > LINKED_ARTIFACT_MAX_PATH_LENGTH || normalized.split(/[\\/]/).some((segment) => segment.length > LINKED_ARTIFACT_MAX_SEGMENT_LENGTH);
10261
10589
  }
10262
10590
  async function linkedArtifactIsMissing(workspaceRoot, artifactPath) {
10263
- const absolutePath = path9.isAbsolute(artifactPath) ? artifactPath : path9.resolve(workspaceRoot, artifactPath);
10591
+ const absolutePath = path10.isAbsolute(artifactPath) ? artifactPath : path10.resolve(workspaceRoot, artifactPath);
10264
10592
  if (linkedArtifactPathExceedsFilesystemLimits(absolutePath)) {
10265
10593
  return false;
10266
10594
  }
10267
10595
  try {
10268
- const stats = await fs8.stat(absolutePath);
10596
+ const stats = await fs9.stat(absolutePath);
10269
10597
  return !stats.isFile() && !stats.isDirectory();
10270
10598
  } catch (error) {
10271
10599
  const code = typeof error === "object" && error !== null && "code" in error ? error.code : void 0;
@@ -10639,7 +10967,7 @@ function buildFormatVersionCheck(items, verboseDiagnostics) {
10639
10967
  };
10640
10968
  }
10641
10969
  var VALIDATE_AUTO_FIX_MESSAGE = "pm validate auto-fix";
10642
- async function applyValidateFix(fix, global) {
10970
+ async function applyValidateFix(fix, global, services) {
10643
10971
  switch (fix.kind) {
10644
10972
  case "set_resolution":
10645
10973
  case "set_close_reason":
@@ -10660,7 +10988,10 @@ async function applyValidateFix(fix, global) {
10660
10988
  } else {
10661
10989
  updateOptions.unset = ["parent"];
10662
10990
  }
10663
- await runUpdate(fix.item_id, updateOptions, global);
10991
+ if (!services.runUpdate) {
10992
+ throw new PmCliError("Applying validate metadata/lifecycle fixes requires a runUpdate mutation service.", EXIT_CODE.USAGE);
10993
+ }
10994
+ await services.runUpdate(fix.item_id, updateOptions, global);
10664
10995
  return;
10665
10996
  }
10666
10997
  case "prune_file_link": {
@@ -10677,7 +11008,7 @@ function pruneBatchKey(fix) {
10677
11008
  }
10678
11009
  return `${fix.kind}:${fix.item_id}`;
10679
11010
  }
10680
- async function applyValidateFixes(applicable, global) {
11011
+ async function applyValidateFixes(applicable, global, services) {
10681
11012
  const applied = [];
10682
11013
  const failed = [];
10683
11014
  const pruneBatches = /* @__PURE__ */ new Map();
@@ -10685,7 +11016,7 @@ async function applyValidateFixes(applicable, global) {
10685
11016
  const batchKey = pruneBatchKey(fix);
10686
11017
  if (batchKey === null) {
10687
11018
  try {
10688
- await applyValidateFix(fix, global);
11019
+ await applyValidateFix(fix, global, services);
10689
11020
  applied.push(fix);
10690
11021
  } catch (error) {
10691
11022
  failed.push({ fix, error });
@@ -10718,6 +11049,44 @@ async function applyValidateFixes(applicable, global) {
10718
11049
  }
10719
11050
  return { applied, failed };
10720
11051
  }
11052
+ var _testOnlyValidateCommand = {
11053
+ applyValidateFix,
11054
+ applyValidateFixes,
11055
+ attachValidateFixHints,
11056
+ buildCommandReferencesCheck,
11057
+ buildDependencyReferencesCheck,
11058
+ buildCloseReasonBackfillRows,
11059
+ buildFilesCheck,
11060
+ buildLifecycleCheck,
11061
+ buildLifecycleDependencyGraph,
11062
+ buildLifecycleParentGraph,
11063
+ buildEstimateBackfillRows,
11064
+ buildMetadataCounts,
11065
+ buildMissingFieldOccurrences,
11066
+ buildOrphanedPathRows,
11067
+ classifyOrphanedPath,
11068
+ collectDefaultProjectFileCandidates,
11069
+ collectTrackedGitFileCandidates,
11070
+ detectLifecycleDependencyCycles,
11071
+ detectLifecycleParentCycles,
11072
+ escapeRegExp,
11073
+ extractItemIds,
11074
+ findLifecycleDependencyCycleComponents,
11075
+ isMetadataFieldMissing,
11076
+ linkedArtifactPathExceedsFilesystemLimits,
11077
+ listFilesRecursive,
11078
+ resolveDependencyCycleSeverity,
11079
+ resolveParentCycleSeverity,
11080
+ resolveFileScanMode,
11081
+ resolveLifecycleDependencyCycleSamplePath,
11082
+ resolveRequestedChecks,
11083
+ resolveValidateMetadataProfile,
11084
+ resolveWorkspaceRoot,
11085
+ sharedDirectoryPrefixLength,
11086
+ summarizeOrphanedPathRows,
11087
+ summarizeDuplicateIssueCodes,
11088
+ toMeaningfulString
11089
+ };
10721
11090
  function recordValidateCheck(state, built, fixHintsEnabled) {
10722
11091
  if (fixHintsEnabled) {
10723
11092
  attachValidateFixHints(built.check, built.warnings);
@@ -10783,7 +11152,7 @@ function planValidateFixes(options, state, settings) {
10783
11152
  }
10784
11153
  return planned;
10785
11154
  }
10786
- async function buildValidateFixesSummary(options, state, settings, grantedFixScopes, global) {
11155
+ async function buildValidateFixesSummary(options, state, settings, grantedFixScopes, global, services) {
10787
11156
  if (options.autoFix !== true && options.pruneMissing !== true) {
10788
11157
  return void 0;
10789
11158
  }
@@ -10793,7 +11162,7 @@ async function buildValidateFixesSummary(options, state, settings, grantedFixSco
10793
11162
  const appliedFixRows = [];
10794
11163
  const failedFixRows = [];
10795
11164
  if (!dryRun) {
10796
- const applied = await applyValidateFixes(applicable, global);
11165
+ const applied = await applyValidateFixes(applicable, global, services);
10797
11166
  appliedFixRows.push(...applied.applied.map(toFixOutputRow));
10798
11167
  failedFixRows.push(...applied.failed.map(({ fix, error }) => ({
10799
11168
  ...toFixOutputRow(fix),
@@ -10818,7 +11187,7 @@ async function buildValidateFixesSummary(options, state, settings, grantedFixSco
10818
11187
  failed_fixes: failedFixRows
10819
11188
  };
10820
11189
  }
10821
- async function runValidate(options, global) {
11190
+ async function runValidate(options, global, services = {}) {
10822
11191
  const fixesRequested = options.autoFix === true || options.pruneMissing === true;
10823
11192
  if (options.dryRun === true && !fixesRequested) {
10824
11193
  throw new PmCliError("--dry-run requires --auto-fix or --prune-missing (there is nothing to preview otherwise).", EXIT_CODE.USAGE);
@@ -10837,6 +11206,12 @@ async function runValidate(options, global) {
10837
11206
  const itemReadWarnings = [];
10838
11207
  const items = await listAllItemMetadataWithBody(pmRoot, settings.item_format, typeRegistry.type_to_folder, itemReadWarnings, settings.schema);
10839
11208
  const requestedChecks = resolveRequestedChecks(options);
11209
+ if (requestedChecks.has("history_drift")) {
11210
+ const authorAttribution = await scanHistoryAuthorAttribution(pmRoot);
11211
+ if (authorAttribution.actionable_unknown_event_count > 0) {
11212
+ itemReadWarnings.push(`validate_history_unknown_author_events:${authorAttribution.actionable_unknown_event_count}`);
11213
+ }
11214
+ }
10840
11215
  const metadataProfileSource = typeof options.metadataProfile === "string" ? "option" : "settings";
10841
11216
  const metadataProfile = resolveValidateMetadataProfile(typeof options.metadataProfile === "string" ? options.metadataProfile : settings.validation.metadata_profile);
10842
11217
  const metadataPolicy = resolveValidateMetadataPolicy(metadataProfile, metadataProfileSource, settings.validation.metadata_required_fields);
@@ -10861,7 +11236,7 @@ async function runValidate(options, global) {
10861
11236
  fileScanMode,
10862
11237
  initialWarnings: [...new Set(itemReadWarnings)]
10863
11238
  });
10864
- const fixes = fixesRequested ? await buildValidateFixesSummary(options, state, settings, grantedFixScopes, global) : void 0;
11239
+ const fixes = fixesRequested ? await buildValidateFixesSummary(options, state, settings, grantedFixScopes, global, services) : void 0;
10865
11240
  const normalizedWarnings = [...new Set(state.warnings)].sort((left, right) => left.localeCompare(right));
10866
11241
  const hasErrors = state.checks.some((check) => check.status === "error");
10867
11242
  return {
@@ -10874,6 +11249,11 @@ async function runValidate(options, global) {
10874
11249
  };
10875
11250
  }
10876
11251
 
11252
+ // dist/cli/commands/validate.js
11253
+ var runValidate2 = (options, global) => runValidate(options, global, {
11254
+ runUpdate: (id, updateOptions, updateGlobal) => runUpdate(id, updateOptions, updateGlobal)
11255
+ });
11256
+
10877
11257
  export {
10878
11258
  resolveStartTaskInProgressStatus,
10879
11259
  runClaim,
@@ -10881,7 +11261,10 @@ export {
10881
11261
  runRelease,
10882
11262
  runContracts,
10883
11263
  runGc,
11264
+ inspectHistoryAuthorStream,
11265
+ scanHistoryAuthorAttribution,
10884
11266
  runHealth,
11267
+ _testOnlyHealthCommand,
10885
11268
  runMeet,
10886
11269
  runEvent,
10887
11270
  runRemind,
@@ -10896,8 +11279,10 @@ export {
10896
11279
  runTestRunsStop,
10897
11280
  runTestRunsResume,
10898
11281
  runTestRunsWorker,
10899
- runValidate
11282
+ _testOnlyValidateCommand,
11283
+ runValidate,
11284
+ runValidate2
10900
11285
  };
10901
- //# sourceMappingURL=chunk-MKL4CP2I.js.map
11286
+ //# sourceMappingURL=chunk-5ZSLZLDN.js.map
10902
11287
 
10903
- //# debugId=d5e1e32d-df71-5281-bc83-9c8c5fd37e21
11288
+ //# debugId=1a18538c-3ee2-5ab6-b7c2-b913c780563a