@unbrained/pm-cli 2026.7.18 → 2026.7.19

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 (497) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +17 -0
  3. package/dist/cli/commands/claim.js +6 -4
  4. package/dist/cli/commands/claim.js.map +1 -1
  5. package/dist/cli/commands/comments.js +5 -2
  6. package/dist/cli/commands/comments.js.map +1 -1
  7. package/dist/cli/commands/context.d.ts +10 -1
  8. package/dist/cli/commands/context.js +44 -6
  9. package/dist/cli/commands/context.js.map +1 -1
  10. package/dist/cli/commands/create.js +15 -4
  11. package/dist/cli/commands/create.js.map +1 -1
  12. package/dist/cli/commands/next.js +13 -3
  13. package/dist/cli/commands/next.js.map +1 -1
  14. package/dist/cli/commands/update.js +14 -3
  15. package/dist/cli/commands/update.js.map +1 -1
  16. package/dist/cli/error-guidance.js +23 -4
  17. package/dist/cli/error-guidance.js.map +1 -1
  18. package/dist/cli/extension-command-help.d.ts +11 -0
  19. package/dist/cli/extension-command-help.js +62 -2
  20. package/dist/cli/extension-command-help.js.map +1 -1
  21. package/dist/cli/main.d.ts +1 -0
  22. package/dist/cli/main.js +16 -11
  23. package/dist/cli/main.js.map +1 -1
  24. package/dist/cli-bundle/bundle-manifest.json +326 -350
  25. package/dist/cli-bundle/chunks/{append-5YF3TO7I.js → append-MBXHNWSX.js} +5 -5
  26. package/dist/cli-bundle/chunks/append-XUYF7NON.js +11 -0
  27. package/dist/cli-bundle/chunks/{chunk-BIRYX32V.js → chunk-2UCG5H6B.js} +3 -3
  28. package/dist/cli-bundle/chunks/{chunk-VE6ZSTQW.js → chunk-2XPDCXK5.js} +4 -4
  29. package/dist/cli-bundle/chunks/{chunk-I3INI567.js → chunk-3EZZTFL2.js} +909 -124
  30. package/dist/cli-bundle/chunks/chunk-3EZZTFL2.js.map +7 -0
  31. package/dist/cli-bundle/chunks/{chunk-GLZKZON6.js → chunk-3HSRP6T2.js} +2 -2
  32. package/dist/cli-bundle/chunks/{chunk-XWBD6DSR.js → chunk-3KPNOZOH.js} +23 -23
  33. package/dist/cli-bundle/chunks/{chunk-MR4SHYR4.js → chunk-3QNUDDY2.js} +104 -23
  34. package/dist/cli-bundle/chunks/chunk-3QNUDDY2.js.map +7 -0
  35. package/dist/cli-bundle/chunks/{chunk-SIPOACV5.js → chunk-46Z6FAVP.js} +888 -124
  36. package/dist/cli-bundle/chunks/chunk-46Z6FAVP.js.map +1 -0
  37. package/dist/cli-bundle/chunks/{chunk-HO4DLBNK.js → chunk-4M6RZJXF.js} +2 -2
  38. package/dist/cli-bundle/chunks/{chunk-RXPQ5Q23.js → chunk-4PSJVGRE.js} +11 -11
  39. package/dist/cli-bundle/chunks/{chunk-ADXDCAKP.js → chunk-5S6IZXK7.js} +146 -32
  40. package/dist/cli-bundle/chunks/{chunk-IL5SPRMH.js.map → chunk-5S6IZXK7.js.map} +7 -1
  41. package/dist/cli-bundle/chunks/chunk-66SRNEBK.js +143 -0
  42. package/dist/cli-bundle/chunks/chunk-66SRNEBK.js.map +7 -0
  43. package/dist/cli-bundle/chunks/{chunk-YFE7JHX3.js → chunk-6BNV3G6C.js} +2 -2
  44. package/dist/cli-bundle/chunks/{chunk-43UMFKCK.js → chunk-6V4T4RD3.js} +23 -23
  45. package/dist/cli-bundle/chunks/chunk-77XFQRTD.js +140 -0
  46. package/dist/cli-bundle/chunks/chunk-77XFQRTD.js.map +1 -0
  47. package/dist/cli-bundle/chunks/{chunk-EHJFUOXL.js → chunk-7B7IHMLH.js} +3 -3
  48. package/dist/cli-bundle/chunks/{chunk-I7DIDUSP.js → chunk-7CHWLT2J.js} +2 -2
  49. package/dist/cli-bundle/chunks/{chunk-L6FVNR7X.js → chunk-A3GAQLBH.js} +5 -5
  50. package/dist/cli-bundle/chunks/{chunk-B57RJHBZ.js → chunk-A4FVWFZY.js} +4 -4
  51. package/dist/cli-bundle/chunks/{chunk-D52ZN3BF.js → chunk-A5EQPNV7.js} +2 -2
  52. package/dist/cli-bundle/chunks/{chunk-TZAE66GQ.js → chunk-AGEBQRBG.js} +15 -15
  53. package/dist/cli-bundle/chunks/{chunk-WU3KAN6A.js → chunk-AQUNTB7G.js} +3 -3
  54. package/dist/cli-bundle/chunks/{chunk-OGVTB5VO.js → chunk-AR24KW26.js} +237 -36
  55. package/dist/cli-bundle/chunks/chunk-AR24KW26.js.map +7 -0
  56. package/dist/cli-bundle/chunks/{chunk-XWYQ2LT4.js → chunk-BBGR4FKQ.js} +4 -4
  57. package/dist/cli-bundle/chunks/{chunk-HTXXXF45.js → chunk-BDC4TW4B.js} +98 -24
  58. package/dist/cli-bundle/chunks/chunk-BDC4TW4B.js.map +1 -0
  59. package/dist/cli-bundle/chunks/{chunk-2FUOXSRN.js → chunk-BFJP4VYC.js} +4 -4
  60. package/dist/cli-bundle/chunks/{chunk-633PKXLT.js → chunk-BZKE2O5V.js} +3 -3
  61. package/dist/cli-bundle/chunks/{chunk-XPUTSGJU.js → chunk-CZA2DXCV.js} +230 -36
  62. package/dist/cli-bundle/chunks/chunk-CZA2DXCV.js.map +1 -0
  63. package/dist/cli-bundle/chunks/{chunk-KX62NMZC.js → chunk-D35WYXWC.js} +626 -5
  64. package/dist/cli-bundle/chunks/chunk-D35WYXWC.js.map +1 -0
  65. package/dist/cli-bundle/chunks/chunk-DOASIOQR.js +289 -0
  66. package/dist/cli-bundle/chunks/chunk-DOASIOQR.js.map +7 -0
  67. package/dist/cli-bundle/chunks/{chunk-L337QKWJ.js → chunk-DUDLSQFG.js} +5 -5
  68. package/dist/cli-bundle/chunks/{chunk-BVLOMU6O.js → chunk-E7KBMWEF.js} +2 -2
  69. package/dist/cli-bundle/chunks/{chunk-3QDR6ZLU.js → chunk-EAV3P54W.js} +9 -9
  70. package/dist/cli-bundle/chunks/{chunk-3QDR6ZLU.js.map → chunk-EAV3P54W.js.map} +2 -2
  71. package/dist/cli-bundle/chunks/{chunk-WQXRZMFN.js → chunk-EEECAV5M.js} +2 -2
  72. package/dist/cli-bundle/chunks/{chunk-35FHWD4C.js → chunk-EI3UIMZM.js} +4 -4
  73. package/dist/cli-bundle/chunks/{chunk-RGMWJLXF.js → chunk-EVAN5VJA.js} +8 -5
  74. package/dist/cli-bundle/chunks/{chunk-RGMWJLXF.js.map → chunk-EVAN5VJA.js.map} +2 -2
  75. package/dist/cli-bundle/chunks/{chunk-PT7MCCGD.js → chunk-FIUTBFC6.js} +2 -2
  76. package/dist/cli-bundle/chunks/{chunk-7H5NNCJ5.js → chunk-FQF6VVPH.js} +4 -4
  77. package/dist/cli-bundle/chunks/{chunk-6DYOZS6C.js → chunk-FQO5THHM.js} +2 -2
  78. package/dist/cli-bundle/chunks/{chunk-5HGZKQUL.js → chunk-FQODDTE7.js} +4 -4
  79. package/dist/cli-bundle/chunks/{chunk-67RO3H4N.js → chunk-G33XIMRT.js} +6 -6
  80. package/dist/cli-bundle/chunks/{chunk-D53RTYVI.js → chunk-GFZB5CLP.js} +20 -10
  81. package/dist/cli-bundle/chunks/chunk-GFZB5CLP.js.map +7 -0
  82. package/dist/cli-bundle/chunks/{chunk-QWBKN3QC.js → chunk-GKCEEXMA.js} +8 -8
  83. package/dist/cli-bundle/chunks/{chunk-DG2EQRIH.js → chunk-GRDK25BN.js} +7 -7
  84. package/dist/cli-bundle/chunks/{chunk-FXFCFL73.js → chunk-H3YKUVDR.js} +5 -5
  85. package/dist/cli-bundle/chunks/{chunk-IL5SPRMH.js → chunk-IEMXESIS.js} +123 -16
  86. package/dist/cli-bundle/chunks/chunk-IEMXESIS.js.map +1 -0
  87. package/dist/cli-bundle/chunks/{chunk-ARGDWQ4J.js → chunk-IGBBTPM5.js} +2 -2
  88. package/dist/cli-bundle/chunks/{chunk-QPGQNLPI.js → chunk-IR3GOO6E.js} +3842 -4109
  89. package/dist/cli-bundle/chunks/chunk-IR3GOO6E.js.map +1 -0
  90. package/dist/cli-bundle/chunks/{chunk-FY4RLHSC.js → chunk-IRJ6F23W.js} +2 -2
  91. package/dist/cli-bundle/chunks/{chunk-66MKH7SZ.js → chunk-IXG5CMBR.js} +4 -4
  92. package/dist/cli-bundle/chunks/{chunk-F3VC3GOV.js → chunk-JBW2S2C6.js} +2090 -253
  93. package/dist/cli-bundle/chunks/chunk-JBW2S2C6.js.map +7 -0
  94. package/dist/cli-bundle/chunks/{chunk-7UCY6DR5.js → chunk-JPWUZOMR.js} +2 -2
  95. package/dist/cli-bundle/chunks/{chunk-FVNWHUME.js → chunk-K2L6FZBX.js} +8 -8
  96. package/dist/cli-bundle/chunks/chunk-KGPLSHJD.js +286 -0
  97. package/dist/cli-bundle/chunks/chunk-KGPLSHJD.js.map +1 -0
  98. package/dist/cli-bundle/chunks/{chunk-YQEZWI3R.js → chunk-KZ5AC6B5.js} +5 -3
  99. package/dist/cli-bundle/chunks/chunk-KZ5AC6B5.js.map +7 -0
  100. package/dist/cli-bundle/chunks/{chunk-X2MGQMZO.js → chunk-LT5UWU7H.js} +2 -2
  101. package/dist/cli-bundle/chunks/{chunk-KH6QAHME.js → chunk-M4B4RK4J.js} +3 -3
  102. package/dist/cli-bundle/chunks/{chunk-QRZNCRNA.js → chunk-MI3346YW.js} +377 -240
  103. package/dist/cli-bundle/chunks/chunk-MI3346YW.js.map +1 -0
  104. package/dist/cli-bundle/chunks/{chunk-2XOSFSTH.js → chunk-MQOSMBWV.js} +5 -5
  105. package/dist/cli-bundle/chunks/{chunk-YIIIAKCE.js → chunk-MRXAHR4B.js} +28 -22
  106. package/dist/cli-bundle/chunks/chunk-MRXAHR4B.js.map +1 -0
  107. package/dist/cli-bundle/chunks/{chunk-7R6UIHYY.js → chunk-N2TEEOXJ.js} +5 -5
  108. package/dist/cli-bundle/chunks/{chunk-NTRQLE2R.js → chunk-N7FCFJ76.js} +2 -2
  109. package/dist/cli-bundle/chunks/{chunk-37DRDP2B.js → chunk-NPEYH6CE.js} +5 -5
  110. package/dist/cli-bundle/chunks/{chunk-GKPCTQYG.js → chunk-NTS2RKHN.js} +3942 -4216
  111. package/dist/cli-bundle/chunks/chunk-NTS2RKHN.js.map +7 -0
  112. package/dist/cli-bundle/chunks/{chunk-6VHUGVNP.js → chunk-ODEIDKGW.js} +2062 -246
  113. package/dist/cli-bundle/chunks/chunk-ODEIDKGW.js.map +1 -0
  114. package/dist/cli-bundle/chunks/{chunk-2CXL335K.js → chunk-OK7VSX3N.js} +3 -3
  115. package/dist/cli-bundle/chunks/{chunk-NNANAWFH.js → chunk-OKPZDH43.js} +3 -3
  116. package/dist/cli-bundle/chunks/{chunk-G6MYGULG.js → chunk-OKWJUL6F.js} +6 -6
  117. package/dist/cli-bundle/chunks/{chunk-HPAYDSR2.js → chunk-P24ZU5QV.js} +27 -21
  118. package/dist/cli-bundle/chunks/chunk-P24ZU5QV.js.map +7 -0
  119. package/dist/cli-bundle/chunks/{chunk-TGBTLGPX.js → chunk-Q4PSG2GV.js} +13 -4
  120. package/dist/cli-bundle/chunks/{chunk-TGBTLGPX.js.map → chunk-Q4PSG2GV.js.map} +1 -1
  121. package/dist/cli-bundle/chunks/{chunk-5UKQLQM2.js → chunk-Q5NHJ6RO.js} +6 -4
  122. package/dist/cli-bundle/chunks/chunk-Q5NHJ6RO.js.map +1 -0
  123. package/dist/cli-bundle/chunks/{chunk-D5XHO4Q7.js → chunk-Q6JPYR7I.js} +2 -2
  124. package/dist/cli-bundle/chunks/{chunk-P22HGFFI.js → chunk-QFG4MB7P.js} +5 -5
  125. package/dist/cli-bundle/chunks/{chunk-P22HGFFI.js.map → chunk-QFG4MB7P.js.map} +1 -1
  126. package/dist/cli-bundle/chunks/{chunk-IE5KRAKN.js → chunk-QQ77W23U.js} +4 -4
  127. package/dist/cli-bundle/chunks/{chunk-M7MVOKVV.js → chunk-QYGK2XQ3.js} +3 -3
  128. package/dist/cli-bundle/chunks/{chunk-646MQXFW.js → chunk-RLLOZAM2.js} +4 -4
  129. package/dist/cli-bundle/chunks/{chunk-646MQXFW.js.map → chunk-RLLOZAM2.js.map} +2 -2
  130. package/dist/cli-bundle/chunks/{chunk-X5YCTFKT.js → chunk-RWAIRGBC.js} +3 -3
  131. package/dist/cli-bundle/chunks/{chunk-W5E2UUSH.js → chunk-RX53WHFI.js} +3 -3
  132. package/dist/cli-bundle/chunks/{chunk-R5XTTZSJ.js → chunk-SBW7EQC4.js} +5 -5
  133. package/dist/cli-bundle/chunks/{chunk-TM5CIO3F.js → chunk-SGJB6PXA.js} +3 -3
  134. package/dist/cli-bundle/chunks/{chunk-DDFGYUCQ.js → chunk-STBCBDKF.js} +7 -7
  135. package/dist/cli-bundle/chunks/{chunk-EX7OQT3Y.js → chunk-SUNZKVAH.js} +10 -10
  136. package/dist/cli-bundle/chunks/{chunk-EX7OQT3Y.js.map → chunk-SUNZKVAH.js.map} +1 -1
  137. package/dist/cli-bundle/chunks/{chunk-FHOBCGQO.js → chunk-SVAWG7EE.js} +2 -2
  138. package/dist/cli-bundle/chunks/{chunk-6O44IN44.js → chunk-T6MOTLOJ.js} +2 -2
  139. package/dist/cli-bundle/chunks/{chunk-HSYV4ZYT.js → chunk-TELI67UP.js} +9 -6
  140. package/dist/cli-bundle/chunks/{chunk-HSYV4ZYT.js.map → chunk-TELI67UP.js.map} +1 -1
  141. package/dist/cli-bundle/chunks/{chunk-EWIT5WIC.js → chunk-U6RYD446.js} +11 -11
  142. package/dist/cli-bundle/chunks/{chunk-E4FXM2XB.js → chunk-UE7LK3RE.js} +5 -5
  143. package/dist/cli-bundle/chunks/{chunk-N33FD2UI.js → chunk-UNNCT5QY.js} +3 -3
  144. package/dist/cli-bundle/chunks/{chunk-2IPNL3DR.js → chunk-UOIFZ66L.js} +3 -3
  145. package/dist/cli-bundle/chunks/{chunk-LSOWTLEM.js → chunk-UU6EP25G.js} +2 -2
  146. package/dist/cli-bundle/chunks/{chunk-HYTOJW2Q.js → chunk-UW6HCMP2.js} +15 -15
  147. package/dist/cli-bundle/chunks/{chunk-47HXN6RX.js → chunk-UWAQI3B7.js} +3 -3
  148. package/dist/cli-bundle/chunks/{chunk-YKFHF37B.js → chunk-V4QHAMI5.js} +3 -3
  149. package/dist/cli-bundle/chunks/{chunk-VAHZIPWS.js → chunk-VA3H7VVC.js} +4 -4
  150. package/dist/cli-bundle/chunks/{chunk-XC2HEEOV.js → chunk-VFA5EIEN.js} +21 -11
  151. package/dist/cli-bundle/chunks/chunk-VFA5EIEN.js.map +1 -0
  152. package/dist/cli-bundle/chunks/{chunk-TLWJP5BF.js → chunk-VQOG2ETB.js} +4 -4
  153. package/dist/cli-bundle/chunks/{chunk-H5IOT54C.js → chunk-VSQE43NO.js} +8 -8
  154. package/dist/cli-bundle/chunks/{chunk-BDA35QG5.js → chunk-W6IEJXNC.js} +2 -2
  155. package/dist/cli-bundle/chunks/{chunk-WACRQ26A.js → chunk-WCBB6VI3.js} +637 -9
  156. package/dist/cli-bundle/chunks/chunk-WCBB6VI3.js.map +7 -0
  157. package/dist/cli-bundle/chunks/{chunk-OWP6QFBV.js → chunk-XDWXPG2E.js} +4 -4
  158. package/dist/cli-bundle/chunks/{chunk-CKX4WOPC.js → chunk-XKVHL3MB.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-WL3SS45P.js → chunk-XVB6BATY.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-NVZ6NVHJ.js → chunk-XXWDEQ6O.js} +4 -4
  161. package/dist/cli-bundle/chunks/{chunk-ILVOOAT4.js → chunk-Y2VSGFT4.js} +8 -8
  162. package/dist/cli-bundle/chunks/{chunk-NCVT6XEL.js → chunk-YG56M3NE.js} +11 -11
  163. package/dist/cli-bundle/chunks/{chunk-AFGKSHAM.js → chunk-YGEA4CLH.js} +4 -4
  164. package/dist/cli-bundle/chunks/{chunk-AXRT7K5V.js → chunk-YIC5NGXF.js} +11 -11
  165. package/dist/cli-bundle/chunks/{chunk-DHNG452T.js → chunk-ZF52NVRT.js} +396 -245
  166. package/dist/cli-bundle/chunks/chunk-ZF52NVRT.js.map +7 -0
  167. package/dist/cli-bundle/chunks/{chunk-XXLXJL7V.js → chunk-ZUCBPXNA.js} +4 -4
  168. package/dist/cli-bundle/chunks/{close-X3CF6FQP.js → close-7NWA3GLA.js} +5 -5
  169. package/dist/cli-bundle/chunks/close-ZZCDDWJT.js +12 -0
  170. package/dist/cli-bundle/chunks/close-many-QCZHFCON.js +23 -0
  171. package/dist/cli-bundle/chunks/{close-many-J7A5EHOQ.js → close-many-YALQ7AXS.js} +14 -14
  172. package/dist/cli-bundle/chunks/comments-FMQNYPSZ.js +13 -0
  173. package/dist/cli-bundle/chunks/{comments-TMHMALA5.js → comments-SQIQ5WYR.js} +7 -7
  174. package/dist/cli-bundle/chunks/copy-GI3RCVZP.js +9 -0
  175. package/dist/cli-bundle/chunks/{copy-FWQA5OU4.js → copy-YDAMENCP.js} +4 -4
  176. package/dist/cli-bundle/chunks/{create-AQ5SIGZC.js → create-JSL6CXU3.js} +11 -9
  177. package/dist/cli-bundle/chunks/create-LXMLYJNM.js +29 -0
  178. package/dist/cli-bundle/chunks/delete-5DFAXJNI.js +10 -0
  179. package/dist/cli-bundle/chunks/{delete-YYYFOSEA.js → delete-IGVOZEU2.js} +4 -4
  180. package/dist/cli-bundle/chunks/{deps-NIIKXLPB.js → deps-BQAXUQAK.js} +6 -6
  181. package/dist/cli-bundle/chunks/{deps-MQ4ZIGZB.js → deps-CBPPSS6J.js} +6 -6
  182. package/dist/cli-bundle/chunks/docs-KCWPLQOV.js +14 -0
  183. package/dist/cli-bundle/chunks/{docs-53NUGMIQ.js → docs-NS2AZWCN.js} +7 -7
  184. package/dist/cli-bundle/chunks/{files-3PXGXYDB.js → files-PVWEPT5J.js} +7 -7
  185. package/dist/cli-bundle/chunks/{files-EGLKHD7O.js → files-XUUBQ76I.js} +7 -7
  186. package/dist/cli-bundle/chunks/focus-3EJVFI3D.js +10 -0
  187. package/dist/cli-bundle/chunks/{focus-SRPASFTN.js → focus-DHBHKK3E.js} +5 -5
  188. package/dist/cli-bundle/chunks/{history-compact-G4DULDCX.js → history-compact-3TNPYVFG.js} +6 -6
  189. package/dist/cli-bundle/chunks/history-compact-JHYVDYLW.js +16 -0
  190. package/dist/cli-bundle/chunks/{history-redact-IUSJ6X3E.js → history-redact-ELRL73XN.js} +4 -4
  191. package/dist/cli-bundle/chunks/{history-redact-THHGRQXV.js → history-redact-KKFDICCF.js} +4 -4
  192. package/dist/cli-bundle/chunks/{history-repair-LUQWRS7X.js → history-repair-J7WKZFAG.js} +6 -6
  193. package/dist/cli-bundle/chunks/history-repair-REMI7DDI.js +16 -0
  194. package/dist/cli-bundle/chunks/learnings-O6V5WDCV.js +13 -0
  195. package/dist/cli-bundle/chunks/{learnings-2MRNBFJF.js → learnings-X4D6JCCG.js} +7 -7
  196. package/dist/cli-bundle/chunks/{notes-73JWKWUD.js → notes-UQC6VS6N.js} +7 -7
  197. package/dist/cli-bundle/chunks/notes-ZSZREWZA.js +13 -0
  198. package/dist/cli-bundle/chunks/{plan-AZPMCG37.js → plan-5GKRBJJO.js} +12 -10
  199. package/dist/cli-bundle/chunks/plan-EZW2YDDY.js +26 -0
  200. package/dist/cli-bundle/chunks/{profile-AVCIIZID.js → profile-5PQAPCLF.js} +10 -10
  201. package/dist/cli-bundle/chunks/{profile-LFYO3HHX.js → profile-CW4BD3FO.js} +10 -10
  202. package/dist/cli-bundle/chunks/{register-list-query-UKMF55FT.js → register-list-query-HTDQE6VI.js} +24 -24
  203. package/dist/cli-bundle/chunks/{register-list-query-MZUF2EEC.js → register-list-query-PHIPDFP2.js} +24 -24
  204. package/dist/cli-bundle/chunks/{register-mutation-T6RVNJC4.js → register-mutation-BLEWM5I6.js} +32 -32
  205. package/dist/cli-bundle/chunks/{register-mutation-2PBW2GEX.js → register-mutation-OTYHR7J6.js} +32 -32
  206. package/dist/cli-bundle/chunks/{register-operations-KHZYR6MG.js → register-operations-AMCUFYEW.js} +38 -40
  207. package/dist/cli-bundle/chunks/{register-operations-KHZYR6MG.js.map → register-operations-AMCUFYEW.js.map} +1 -1
  208. package/dist/cli-bundle/chunks/{register-operations-WPQ2LWZJ.js → register-operations-MRLHOZYR.js} +36 -38
  209. package/dist/cli-bundle/chunks/{register-operations-WPQ2LWZJ.js.map → register-operations-MRLHOZYR.js.map} +1 -1
  210. package/dist/cli-bundle/chunks/{register-setup-PGDNOXDQ.js → register-setup-N2FOSWAG.js} +15 -17
  211. package/dist/cli-bundle/chunks/{register-setup-PGDNOXDQ.js.map → register-setup-N2FOSWAG.js.map} +1 -1
  212. package/dist/cli-bundle/chunks/{register-setup-TDN7WAO6.js → register-setup-ZVKTDL4G.js} +17 -19
  213. package/dist/cli-bundle/chunks/{register-setup-TDN7WAO6.js.map → register-setup-ZVKTDL4G.js.map} +1 -1
  214. package/dist/cli-bundle/chunks/restore-A55MLFAI.js +14 -0
  215. package/dist/cli-bundle/chunks/{restore-E3PRGDN3.js → restore-HEQAG6EK.js} +6 -6
  216. package/dist/cli-bundle/chunks/{schema-5JNFQFUW.js → schema-MAXAIHEC.js} +6 -6
  217. package/dist/cli-bundle/chunks/{schema-TMIW4XZC.js → schema-Q5DAWJ2S.js} +6 -6
  218. package/dist/cli-bundle/chunks/update-5DTSCWVF.js +23 -0
  219. package/dist/cli-bundle/chunks/{update-SQYZA3ZW.js → update-DWFXXJKP.js} +15 -13
  220. package/dist/cli-bundle/chunks/update-many-6T4ZLZS7.js +34 -0
  221. package/dist/cli-bundle/chunks/update-many-MYRK6VBJ.js +38 -0
  222. package/dist/cli-bundle/main.js +152 -29
  223. package/dist/cli-bundle/main.js.map +3 -3
  224. package/dist/cli-bundle/sdk-runtime.js +72 -75
  225. package/dist/cli-bundle/sdk-testing.js +8 -8
  226. package/dist/cli-bundle/sdk.js +288 -642
  227. package/dist/cli-bundle/sdk.js.map +4 -4
  228. package/dist/core/extensions/activation-summary.d.ts +2 -0
  229. package/dist/core/extensions/activation-summary.js +7 -2
  230. package/dist/core/extensions/activation-summary.js.map +1 -1
  231. package/dist/core/extensions/capability-usage.d.ts +1 -1
  232. package/dist/core/extensions/capability-usage.js +5 -2
  233. package/dist/core/extensions/capability-usage.js.map +1 -1
  234. package/dist/core/extensions/extension-hook-runtime.js +3 -2
  235. package/dist/core/extensions/extension-hook-runtime.js.map +1 -1
  236. package/dist/core/extensions/extension-registries.js +3 -2
  237. package/dist/core/extensions/extension-registries.js.map +1 -1
  238. package/dist/core/extensions/extension-types.d.ts +38 -1
  239. package/dist/core/extensions/extension-types.js +3 -2
  240. package/dist/core/extensions/extension-types.js.map +1 -1
  241. package/dist/core/extensions/loader.js +36 -2
  242. package/dist/core/extensions/loader.js.map +1 -1
  243. package/dist/core/store/item-store.d.ts +4 -1
  244. package/dist/core/store/item-store.js +3 -3
  245. package/dist/core/store/item-store.js.map +1 -1
  246. package/dist/core/store/paths.d.ts +2 -0
  247. package/dist/core/store/paths.js +26 -3
  248. package/dist/core/store/paths.js.map +1 -1
  249. package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
  250. package/dist/sdk/compose.d.ts +3 -0
  251. package/dist/sdk/compose.js +14 -2
  252. package/dist/sdk/compose.js.map +1 -1
  253. package/dist/sdk/dependencies.js +3 -3
  254. package/dist/sdk/dependencies.js.map +1 -1
  255. package/dist/sdk/extension-command-context.d.ts +10 -0
  256. package/dist/sdk/extension-command-context.js +30 -0
  257. package/dist/sdk/extension-command-context.js.map +1 -0
  258. package/dist/sdk/graph/assembly.js +14 -4
  259. package/dist/sdk/graph/assembly.js.map +1 -1
  260. package/dist/sdk/graph/index.d.ts +1 -0
  261. package/dist/sdk/graph/index.js +3 -2
  262. package/dist/sdk/graph/index.js.map +1 -1
  263. package/dist/sdk/graph/mutation-advisory.d.ts +20 -0
  264. package/dist/sdk/graph/mutation-advisory.js +80 -0
  265. package/dist/sdk/graph/mutation-advisory.js.map +1 -0
  266. package/dist/sdk/graph/run.d.ts +5 -1
  267. package/dist/sdk/graph/run.js +11 -3
  268. package/dist/sdk/graph/run.js.map +1 -1
  269. package/dist/sdk/index.d.ts +4 -1
  270. package/dist/sdk/index.js +5 -2
  271. package/dist/sdk/index.js.map +1 -1
  272. package/dist/sdk/ownership-source.d.ts +2 -0
  273. package/dist/sdk/ownership-source.js +22 -0
  274. package/dist/sdk/ownership-source.js.map +1 -0
  275. package/dist/sdk/relationship-history.d.ts +38 -0
  276. package/dist/sdk/relationship-history.js +60 -2
  277. package/dist/sdk/relationship-history.js.map +1 -1
  278. package/dist/sdk/relationships.js +49 -8
  279. package/dist/sdk/relationships.js.map +1 -1
  280. package/dist/sdk/runtime-input.js +3 -2
  281. package/dist/sdk/runtime-input.js.map +1 -1
  282. package/dist/sdk/runtime.d.ts +2 -0
  283. package/dist/sdk/runtime.js +19 -2
  284. package/dist/sdk/runtime.js.map +1 -1
  285. package/dist/sdk/tracker-root-discovery.d.ts +6 -0
  286. package/dist/sdk/tracker-root-discovery.js +10 -0
  287. package/dist/sdk/tracker-root-discovery.js.map +1 -0
  288. package/dist/sdk/workspace-transaction.d.ts +83 -0
  289. package/dist/sdk/workspace-transaction.js +364 -0
  290. package/dist/sdk/workspace-transaction.js.map +1 -0
  291. package/docs/AGENT_UX_CONTRACTS.md +41 -0
  292. package/docs/EXTENSIONS.md +4 -4
  293. package/docs/README.md +1 -0
  294. package/docs/SDK.md +102 -1
  295. package/marketplace.json +2 -2
  296. package/package.json +1 -1
  297. package/packages/pm-beads/package.json +1 -1
  298. package/packages/pm-calendar/package.json +1 -1
  299. package/packages/pm-command-kit/package.json +1 -1
  300. package/packages/pm-governance-audit/package.json +1 -1
  301. package/packages/pm-guide-shell/package.json +1 -1
  302. package/packages/pm-kanban/package.json +1 -1
  303. package/packages/pm-lifecycle-hooks/package.json +1 -1
  304. package/packages/pm-linked-test-adapters/package.json +1 -1
  305. package/packages/pm-search-advanced/package.json +1 -1
  306. package/packages/pm-templates/package.json +1 -1
  307. package/packages/pm-todos/package.json +1 -1
  308. package/packages/pm-vcs/GAP_REPORT.md +31 -0
  309. package/packages/pm-vcs/README.md +62 -0
  310. package/packages/pm-vcs/extensions/vcs/index.ts +745 -0
  311. package/packages/pm-vcs/extensions/vcs/manifest.json +19 -0
  312. package/packages/pm-vcs/extensions/vcs/package.json +3 -0
  313. package/packages/pm-vcs/package.json +55 -0
  314. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  315. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  316. package/dist/cli-bundle/chunks/append-JHO5K6RP.js +0 -11
  317. package/dist/cli-bundle/chunks/chunk-2BX74BAS.js +0 -125
  318. package/dist/cli-bundle/chunks/chunk-2BX74BAS.js.map +0 -7
  319. package/dist/cli-bundle/chunks/chunk-3CUQZNQ6.js +0 -672
  320. package/dist/cli-bundle/chunks/chunk-3CUQZNQ6.js.map +0 -7
  321. package/dist/cli-bundle/chunks/chunk-5UKQLQM2.js.map +0 -1
  322. package/dist/cli-bundle/chunks/chunk-6VHUGVNP.js.map +0 -1
  323. package/dist/cli-bundle/chunks/chunk-74FKFFXO.js +0 -172
  324. package/dist/cli-bundle/chunks/chunk-74FKFFXO.js.map +0 -7
  325. package/dist/cli-bundle/chunks/chunk-ADXDCAKP.js.map +0 -7
  326. package/dist/cli-bundle/chunks/chunk-BAP7G3N2.js +0 -178
  327. package/dist/cli-bundle/chunks/chunk-BAP7G3N2.js.map +0 -7
  328. package/dist/cli-bundle/chunks/chunk-D53RTYVI.js.map +0 -7
  329. package/dist/cli-bundle/chunks/chunk-DHNG452T.js.map +0 -7
  330. package/dist/cli-bundle/chunks/chunk-EY7ZE3TG.js +0 -1831
  331. package/dist/cli-bundle/chunks/chunk-EY7ZE3TG.js.map +0 -1
  332. package/dist/cli-bundle/chunks/chunk-F3VC3GOV.js.map +0 -7
  333. package/dist/cli-bundle/chunks/chunk-FL4D53ND.js +0 -162
  334. package/dist/cli-bundle/chunks/chunk-FL4D53ND.js.map +0 -1
  335. package/dist/cli-bundle/chunks/chunk-GKPCTQYG.js.map +0 -7
  336. package/dist/cli-bundle/chunks/chunk-HPAYDSR2.js.map +0 -7
  337. package/dist/cli-bundle/chunks/chunk-HTXXXF45.js.map +0 -1
  338. package/dist/cli-bundle/chunks/chunk-I3INI567.js.map +0 -7
  339. package/dist/cli-bundle/chunks/chunk-KX62NMZC.js.map +0 -1
  340. package/dist/cli-bundle/chunks/chunk-L5BTTDU5.js +0 -662
  341. package/dist/cli-bundle/chunks/chunk-L5BTTDU5.js.map +0 -1
  342. package/dist/cli-bundle/chunks/chunk-MR4SHYR4.js.map +0 -7
  343. package/dist/cli-bundle/chunks/chunk-OGVTB5VO.js.map +0 -7
  344. package/dist/cli-bundle/chunks/chunk-QPGQNLPI.js.map +0 -1
  345. package/dist/cli-bundle/chunks/chunk-QRZNCRNA.js.map +0 -1
  346. package/dist/cli-bundle/chunks/chunk-RC4UOUXA.js +0 -122
  347. package/dist/cli-bundle/chunks/chunk-RC4UOUXA.js.map +0 -1
  348. package/dist/cli-bundle/chunks/chunk-RTBX3C4C.js +0 -1841
  349. package/dist/cli-bundle/chunks/chunk-RTBX3C4C.js.map +0 -7
  350. package/dist/cli-bundle/chunks/chunk-SIPOACV5.js.map +0 -1
  351. package/dist/cli-bundle/chunks/chunk-WACRQ26A.js.map +0 -7
  352. package/dist/cli-bundle/chunks/chunk-XC2HEEOV.js.map +0 -1
  353. package/dist/cli-bundle/chunks/chunk-XPUTSGJU.js.map +0 -1
  354. package/dist/cli-bundle/chunks/chunk-YIIIAKCE.js.map +0 -1
  355. package/dist/cli-bundle/chunks/chunk-YJSURTBB.js +0 -175
  356. package/dist/cli-bundle/chunks/chunk-YJSURTBB.js.map +0 -1
  357. package/dist/cli-bundle/chunks/chunk-YQEZWI3R.js.map +0 -7
  358. package/dist/cli-bundle/chunks/close-GPD7DTJV.js +0 -12
  359. package/dist/cli-bundle/chunks/close-many-NQLYGPYW.js +0 -23
  360. package/dist/cli-bundle/chunks/comments-2AOZQ5D2.js +0 -13
  361. package/dist/cli-bundle/chunks/copy-N3LCQBMC.js +0 -9
  362. package/dist/cli-bundle/chunks/create-KOGQ3JKD.js +0 -27
  363. package/dist/cli-bundle/chunks/delete-6G3MBZ6S.js +0 -10
  364. package/dist/cli-bundle/chunks/docs-OWRGDMNY.js +0 -14
  365. package/dist/cli-bundle/chunks/focus-KZLIA6WS.js +0 -10
  366. package/dist/cli-bundle/chunks/history-compact-HHIUOMZ7.js +0 -16
  367. package/dist/cli-bundle/chunks/history-repair-KG7SWXI6.js +0 -16
  368. package/dist/cli-bundle/chunks/learnings-ZVHSALJY.js +0 -13
  369. package/dist/cli-bundle/chunks/notes-BAKUL5DJ.js +0 -13
  370. package/dist/cli-bundle/chunks/plan-LEAGLPGP.js +0 -24
  371. package/dist/cli-bundle/chunks/restore-KIUYTAEJ.js +0 -14
  372. package/dist/cli-bundle/chunks/update-XZJYS5X7.js +0 -21
  373. package/dist/cli-bundle/chunks/update-many-R24B3GBK.js +0 -36
  374. package/dist/cli-bundle/chunks/update-many-WQ3R3J6N.js +0 -32
  375. /package/dist/cli-bundle/chunks/{append-5YF3TO7I.js.map → append-MBXHNWSX.js.map} +0 -0
  376. /package/dist/cli-bundle/chunks/{append-JHO5K6RP.js.map → append-XUYF7NON.js.map} +0 -0
  377. /package/dist/cli-bundle/chunks/{chunk-BIRYX32V.js.map → chunk-2UCG5H6B.js.map} +0 -0
  378. /package/dist/cli-bundle/chunks/{chunk-VE6ZSTQW.js.map → chunk-2XPDCXK5.js.map} +0 -0
  379. /package/dist/cli-bundle/chunks/{chunk-GLZKZON6.js.map → chunk-3HSRP6T2.js.map} +0 -0
  380. /package/dist/cli-bundle/chunks/{chunk-XWBD6DSR.js.map → chunk-3KPNOZOH.js.map} +0 -0
  381. /package/dist/cli-bundle/chunks/{chunk-HO4DLBNK.js.map → chunk-4M6RZJXF.js.map} +0 -0
  382. /package/dist/cli-bundle/chunks/{chunk-RXPQ5Q23.js.map → chunk-4PSJVGRE.js.map} +0 -0
  383. /package/dist/cli-bundle/chunks/{chunk-YFE7JHX3.js.map → chunk-6BNV3G6C.js.map} +0 -0
  384. /package/dist/cli-bundle/chunks/{chunk-43UMFKCK.js.map → chunk-6V4T4RD3.js.map} +0 -0
  385. /package/dist/cli-bundle/chunks/{chunk-EHJFUOXL.js.map → chunk-7B7IHMLH.js.map} +0 -0
  386. /package/dist/cli-bundle/chunks/{chunk-I7DIDUSP.js.map → chunk-7CHWLT2J.js.map} +0 -0
  387. /package/dist/cli-bundle/chunks/{chunk-L6FVNR7X.js.map → chunk-A3GAQLBH.js.map} +0 -0
  388. /package/dist/cli-bundle/chunks/{chunk-B57RJHBZ.js.map → chunk-A4FVWFZY.js.map} +0 -0
  389. /package/dist/cli-bundle/chunks/{chunk-D52ZN3BF.js.map → chunk-A5EQPNV7.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{chunk-TZAE66GQ.js.map → chunk-AGEBQRBG.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{chunk-WU3KAN6A.js.map → chunk-AQUNTB7G.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{chunk-XWYQ2LT4.js.map → chunk-BBGR4FKQ.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{chunk-2FUOXSRN.js.map → chunk-BFJP4VYC.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{chunk-633PKXLT.js.map → chunk-BZKE2O5V.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{chunk-L337QKWJ.js.map → chunk-DUDLSQFG.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{chunk-BVLOMU6O.js.map → chunk-E7KBMWEF.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{chunk-WQXRZMFN.js.map → chunk-EEECAV5M.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{chunk-35FHWD4C.js.map → chunk-EI3UIMZM.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{chunk-PT7MCCGD.js.map → chunk-FIUTBFC6.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{chunk-7H5NNCJ5.js.map → chunk-FQF6VVPH.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{chunk-6DYOZS6C.js.map → chunk-FQO5THHM.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{chunk-5HGZKQUL.js.map → chunk-FQODDTE7.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{chunk-67RO3H4N.js.map → chunk-G33XIMRT.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{chunk-QWBKN3QC.js.map → chunk-GKCEEXMA.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{chunk-DG2EQRIH.js.map → chunk-GRDK25BN.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{chunk-FXFCFL73.js.map → chunk-H3YKUVDR.js.map} +0 -0
  407. /package/dist/cli-bundle/chunks/{chunk-ARGDWQ4J.js.map → chunk-IGBBTPM5.js.map} +0 -0
  408. /package/dist/cli-bundle/chunks/{chunk-FY4RLHSC.js.map → chunk-IRJ6F23W.js.map} +0 -0
  409. /package/dist/cli-bundle/chunks/{chunk-66MKH7SZ.js.map → chunk-IXG5CMBR.js.map} +0 -0
  410. /package/dist/cli-bundle/chunks/{chunk-7UCY6DR5.js.map → chunk-JPWUZOMR.js.map} +0 -0
  411. /package/dist/cli-bundle/chunks/{chunk-FVNWHUME.js.map → chunk-K2L6FZBX.js.map} +0 -0
  412. /package/dist/cli-bundle/chunks/{chunk-X2MGQMZO.js.map → chunk-LT5UWU7H.js.map} +0 -0
  413. /package/dist/cli-bundle/chunks/{chunk-KH6QAHME.js.map → chunk-M4B4RK4J.js.map} +0 -0
  414. /package/dist/cli-bundle/chunks/{chunk-2XOSFSTH.js.map → chunk-MQOSMBWV.js.map} +0 -0
  415. /package/dist/cli-bundle/chunks/{chunk-7R6UIHYY.js.map → chunk-N2TEEOXJ.js.map} +0 -0
  416. /package/dist/cli-bundle/chunks/{chunk-NTRQLE2R.js.map → chunk-N7FCFJ76.js.map} +0 -0
  417. /package/dist/cli-bundle/chunks/{chunk-37DRDP2B.js.map → chunk-NPEYH6CE.js.map} +0 -0
  418. /package/dist/cli-bundle/chunks/{chunk-2CXL335K.js.map → chunk-OK7VSX3N.js.map} +0 -0
  419. /package/dist/cli-bundle/chunks/{chunk-NNANAWFH.js.map → chunk-OKPZDH43.js.map} +0 -0
  420. /package/dist/cli-bundle/chunks/{chunk-G6MYGULG.js.map → chunk-OKWJUL6F.js.map} +0 -0
  421. /package/dist/cli-bundle/chunks/{chunk-D5XHO4Q7.js.map → chunk-Q6JPYR7I.js.map} +0 -0
  422. /package/dist/cli-bundle/chunks/{chunk-IE5KRAKN.js.map → chunk-QQ77W23U.js.map} +0 -0
  423. /package/dist/cli-bundle/chunks/{chunk-M7MVOKVV.js.map → chunk-QYGK2XQ3.js.map} +0 -0
  424. /package/dist/cli-bundle/chunks/{chunk-X5YCTFKT.js.map → chunk-RWAIRGBC.js.map} +0 -0
  425. /package/dist/cli-bundle/chunks/{chunk-W5E2UUSH.js.map → chunk-RX53WHFI.js.map} +0 -0
  426. /package/dist/cli-bundle/chunks/{chunk-R5XTTZSJ.js.map → chunk-SBW7EQC4.js.map} +0 -0
  427. /package/dist/cli-bundle/chunks/{chunk-TM5CIO3F.js.map → chunk-SGJB6PXA.js.map} +0 -0
  428. /package/dist/cli-bundle/chunks/{chunk-DDFGYUCQ.js.map → chunk-STBCBDKF.js.map} +0 -0
  429. /package/dist/cli-bundle/chunks/{chunk-FHOBCGQO.js.map → chunk-SVAWG7EE.js.map} +0 -0
  430. /package/dist/cli-bundle/chunks/{chunk-6O44IN44.js.map → chunk-T6MOTLOJ.js.map} +0 -0
  431. /package/dist/cli-bundle/chunks/{chunk-EWIT5WIC.js.map → chunk-U6RYD446.js.map} +0 -0
  432. /package/dist/cli-bundle/chunks/{chunk-E4FXM2XB.js.map → chunk-UE7LK3RE.js.map} +0 -0
  433. /package/dist/cli-bundle/chunks/{chunk-N33FD2UI.js.map → chunk-UNNCT5QY.js.map} +0 -0
  434. /package/dist/cli-bundle/chunks/{chunk-2IPNL3DR.js.map → chunk-UOIFZ66L.js.map} +0 -0
  435. /package/dist/cli-bundle/chunks/{chunk-LSOWTLEM.js.map → chunk-UU6EP25G.js.map} +0 -0
  436. /package/dist/cli-bundle/chunks/{chunk-HYTOJW2Q.js.map → chunk-UW6HCMP2.js.map} +0 -0
  437. /package/dist/cli-bundle/chunks/{chunk-47HXN6RX.js.map → chunk-UWAQI3B7.js.map} +0 -0
  438. /package/dist/cli-bundle/chunks/{chunk-YKFHF37B.js.map → chunk-V4QHAMI5.js.map} +0 -0
  439. /package/dist/cli-bundle/chunks/{chunk-VAHZIPWS.js.map → chunk-VA3H7VVC.js.map} +0 -0
  440. /package/dist/cli-bundle/chunks/{chunk-TLWJP5BF.js.map → chunk-VQOG2ETB.js.map} +0 -0
  441. /package/dist/cli-bundle/chunks/{chunk-H5IOT54C.js.map → chunk-VSQE43NO.js.map} +0 -0
  442. /package/dist/cli-bundle/chunks/{chunk-BDA35QG5.js.map → chunk-W6IEJXNC.js.map} +0 -0
  443. /package/dist/cli-bundle/chunks/{chunk-OWP6QFBV.js.map → chunk-XDWXPG2E.js.map} +0 -0
  444. /package/dist/cli-bundle/chunks/{chunk-CKX4WOPC.js.map → chunk-XKVHL3MB.js.map} +0 -0
  445. /package/dist/cli-bundle/chunks/{chunk-WL3SS45P.js.map → chunk-XVB6BATY.js.map} +0 -0
  446. /package/dist/cli-bundle/chunks/{chunk-NVZ6NVHJ.js.map → chunk-XXWDEQ6O.js.map} +0 -0
  447. /package/dist/cli-bundle/chunks/{chunk-ILVOOAT4.js.map → chunk-Y2VSGFT4.js.map} +0 -0
  448. /package/dist/cli-bundle/chunks/{chunk-NCVT6XEL.js.map → chunk-YG56M3NE.js.map} +0 -0
  449. /package/dist/cli-bundle/chunks/{chunk-AFGKSHAM.js.map → chunk-YGEA4CLH.js.map} +0 -0
  450. /package/dist/cli-bundle/chunks/{chunk-AXRT7K5V.js.map → chunk-YIC5NGXF.js.map} +0 -0
  451. /package/dist/cli-bundle/chunks/{chunk-XXLXJL7V.js.map → chunk-ZUCBPXNA.js.map} +0 -0
  452. /package/dist/cli-bundle/chunks/{close-X3CF6FQP.js.map → close-7NWA3GLA.js.map} +0 -0
  453. /package/dist/cli-bundle/chunks/{close-GPD7DTJV.js.map → close-ZZCDDWJT.js.map} +0 -0
  454. /package/dist/cli-bundle/chunks/{close-many-NQLYGPYW.js.map → close-many-QCZHFCON.js.map} +0 -0
  455. /package/dist/cli-bundle/chunks/{close-many-J7A5EHOQ.js.map → close-many-YALQ7AXS.js.map} +0 -0
  456. /package/dist/cli-bundle/chunks/{comments-2AOZQ5D2.js.map → comments-FMQNYPSZ.js.map} +0 -0
  457. /package/dist/cli-bundle/chunks/{comments-TMHMALA5.js.map → comments-SQIQ5WYR.js.map} +0 -0
  458. /package/dist/cli-bundle/chunks/{copy-N3LCQBMC.js.map → copy-GI3RCVZP.js.map} +0 -0
  459. /package/dist/cli-bundle/chunks/{copy-FWQA5OU4.js.map → copy-YDAMENCP.js.map} +0 -0
  460. /package/dist/cli-bundle/chunks/{create-AQ5SIGZC.js.map → create-JSL6CXU3.js.map} +0 -0
  461. /package/dist/cli-bundle/chunks/{create-KOGQ3JKD.js.map → create-LXMLYJNM.js.map} +0 -0
  462. /package/dist/cli-bundle/chunks/{delete-6G3MBZ6S.js.map → delete-5DFAXJNI.js.map} +0 -0
  463. /package/dist/cli-bundle/chunks/{delete-YYYFOSEA.js.map → delete-IGVOZEU2.js.map} +0 -0
  464. /package/dist/cli-bundle/chunks/{deps-NIIKXLPB.js.map → deps-BQAXUQAK.js.map} +0 -0
  465. /package/dist/cli-bundle/chunks/{deps-MQ4ZIGZB.js.map → deps-CBPPSS6J.js.map} +0 -0
  466. /package/dist/cli-bundle/chunks/{docs-OWRGDMNY.js.map → docs-KCWPLQOV.js.map} +0 -0
  467. /package/dist/cli-bundle/chunks/{docs-53NUGMIQ.js.map → docs-NS2AZWCN.js.map} +0 -0
  468. /package/dist/cli-bundle/chunks/{files-3PXGXYDB.js.map → files-PVWEPT5J.js.map} +0 -0
  469. /package/dist/cli-bundle/chunks/{files-EGLKHD7O.js.map → files-XUUBQ76I.js.map} +0 -0
  470. /package/dist/cli-bundle/chunks/{focus-KZLIA6WS.js.map → focus-3EJVFI3D.js.map} +0 -0
  471. /package/dist/cli-bundle/chunks/{focus-SRPASFTN.js.map → focus-DHBHKK3E.js.map} +0 -0
  472. /package/dist/cli-bundle/chunks/{history-compact-G4DULDCX.js.map → history-compact-3TNPYVFG.js.map} +0 -0
  473. /package/dist/cli-bundle/chunks/{history-compact-HHIUOMZ7.js.map → history-compact-JHYVDYLW.js.map} +0 -0
  474. /package/dist/cli-bundle/chunks/{history-redact-IUSJ6X3E.js.map → history-redact-ELRL73XN.js.map} +0 -0
  475. /package/dist/cli-bundle/chunks/{history-redact-THHGRQXV.js.map → history-redact-KKFDICCF.js.map} +0 -0
  476. /package/dist/cli-bundle/chunks/{history-repair-LUQWRS7X.js.map → history-repair-J7WKZFAG.js.map} +0 -0
  477. /package/dist/cli-bundle/chunks/{history-repair-KG7SWXI6.js.map → history-repair-REMI7DDI.js.map} +0 -0
  478. /package/dist/cli-bundle/chunks/{learnings-ZVHSALJY.js.map → learnings-O6V5WDCV.js.map} +0 -0
  479. /package/dist/cli-bundle/chunks/{learnings-2MRNBFJF.js.map → learnings-X4D6JCCG.js.map} +0 -0
  480. /package/dist/cli-bundle/chunks/{notes-73JWKWUD.js.map → notes-UQC6VS6N.js.map} +0 -0
  481. /package/dist/cli-bundle/chunks/{notes-BAKUL5DJ.js.map → notes-ZSZREWZA.js.map} +0 -0
  482. /package/dist/cli-bundle/chunks/{plan-AZPMCG37.js.map → plan-5GKRBJJO.js.map} +0 -0
  483. /package/dist/cli-bundle/chunks/{plan-LEAGLPGP.js.map → plan-EZW2YDDY.js.map} +0 -0
  484. /package/dist/cli-bundle/chunks/{profile-AVCIIZID.js.map → profile-5PQAPCLF.js.map} +0 -0
  485. /package/dist/cli-bundle/chunks/{profile-LFYO3HHX.js.map → profile-CW4BD3FO.js.map} +0 -0
  486. /package/dist/cli-bundle/chunks/{register-list-query-UKMF55FT.js.map → register-list-query-HTDQE6VI.js.map} +0 -0
  487. /package/dist/cli-bundle/chunks/{register-list-query-MZUF2EEC.js.map → register-list-query-PHIPDFP2.js.map} +0 -0
  488. /package/dist/cli-bundle/chunks/{register-mutation-T6RVNJC4.js.map → register-mutation-BLEWM5I6.js.map} +0 -0
  489. /package/dist/cli-bundle/chunks/{register-mutation-2PBW2GEX.js.map → register-mutation-OTYHR7J6.js.map} +0 -0
  490. /package/dist/cli-bundle/chunks/{restore-KIUYTAEJ.js.map → restore-A55MLFAI.js.map} +0 -0
  491. /package/dist/cli-bundle/chunks/{restore-E3PRGDN3.js.map → restore-HEQAG6EK.js.map} +0 -0
  492. /package/dist/cli-bundle/chunks/{schema-5JNFQFUW.js.map → schema-MAXAIHEC.js.map} +0 -0
  493. /package/dist/cli-bundle/chunks/{schema-TMIW4XZC.js.map → schema-Q5DAWJ2S.js.map} +0 -0
  494. /package/dist/cli-bundle/chunks/{update-XZJYS5X7.js.map → update-5DTSCWVF.js.map} +0 -0
  495. /package/dist/cli-bundle/chunks/{update-SQYZA3ZW.js.map → update-DWFXXJKP.js.map} +0 -0
  496. /package/dist/cli-bundle/chunks/{update-many-WQ3R3J6N.js.map → update-many-6T4ZLZS7.js.map} +0 -0
  497. /package/dist/cli-bundle/chunks/{update-many-R24B3GBK.js.map → update-many-MYRK6VBJ.js.map} +0 -0
@@ -11,7 +11,7 @@ import {
11
11
  PLAN_MODE_VALUES,
12
12
  PLAN_STEP_LINK_KIND_VALUES,
13
13
  PLAN_STEP_STATUS_VALUES
14
- } from "./chunk-KX62NMZC.js";
14
+ } from "./chunk-D35WYXWC.js";
15
15
 
16
16
  // dist/sdk/cli-contracts/command-aliases.js
17
17
  var EXECUTABLE_COMMAND_ALIASES = {
@@ -5651,6 +5651,6 @@ export {
5651
5651
  PM_TOOL_PARAMETERS_SCHEMA,
5652
5652
  PM_PROVIDER_TOOL_PARAMETERS_SCHEMA
5653
5653
  };
5654
- //# sourceMappingURL=chunk-7UCY6DR5.js.map
5654
+ //# sourceMappingURL=chunk-JPWUZOMR.js.map
5655
5655
 
5656
5656
  //# debugId=ebed3dd6-7ac3-5ba9-81af-461fa44a9c47
@@ -1,22 +1,22 @@
1
1
  import {
2
- resolveAuthor
3
- } from "./chunk-YRYYFGV3.js";
2
+ splitCommaList
3
+ } from "./chunk-D6HZN36B.js";
4
4
  import {
5
5
  assertNoUnknownCsvKeys,
6
6
  createStdinTokenResolver,
7
7
  looksLikeGenericKeyValueEntry,
8
8
  parseCsvKv
9
- } from "./chunk-D52ZN3BF.js";
9
+ } from "./chunk-A5EQPNV7.js";
10
10
  import {
11
- splitCommaList
12
- } from "./chunk-D6HZN36B.js";
11
+ resolveAuthor
12
+ } from "./chunk-YRYYFGV3.js";
13
13
  import {
14
14
  getActiveExtensionRegistrations,
15
15
  locateItem,
16
16
  mutateItem,
17
17
  readLocatedItem,
18
18
  readSettings
19
- } from "./chunk-646MQXFW.js";
19
+ } from "./chunk-RLLOZAM2.js";
20
20
  import {
21
21
  EXIT_CODE,
22
22
  PmCliError,
@@ -26,7 +26,7 @@ import {
26
26
  resolveItemTypeRegistry,
27
27
  resolvePmRoot,
28
28
  resolveWorkspaceRoot
29
- } from "./chunk-WACRQ26A.js";
29
+ } from "./chunk-WCBB6VI3.js";
30
30
 
31
31
  // dist/sdk/linked-artifacts.js
32
32
  import fs from "node:fs/promises";
@@ -444,4 +444,4 @@ export {
444
444
  runLinkedArtifacts,
445
445
  renameArtifactsResultKey
446
446
  };
447
- //# sourceMappingURL=chunk-FVNWHUME.js.map
447
+ //# sourceMappingURL=chunk-K2L6FZBX.js.map
@@ -0,0 +1,286 @@
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]="5638f886-de83-5daf-8c42-386c898c57c0")}catch(e){}}();
3
+ import {
4
+ createRelationshipKindRegistry
5
+ } from "./chunk-D35WYXWC.js";
6
+
7
+ // dist/sdk/relationship-analytics.js
8
+ function appendNeighbor(adjacency, source, target) {
9
+ adjacency.get(source).add(target);
10
+ }
11
+ function createAdjacency(nodes) {
12
+ return new Map(nodes.map((node) => [node, /* @__PURE__ */ new Set()]));
13
+ }
14
+ function sortComponents(components) {
15
+ for (const component of components)
16
+ component.sort();
17
+ return components.sort((left, right) => right.length - left.length || left[0].localeCompare(right[0]));
18
+ }
19
+ function stableJsonValue(value) {
20
+ if (Array.isArray(value))
21
+ return value.map((entry) => stableJsonValue(entry));
22
+ if (value === null || typeof value !== "object")
23
+ return value;
24
+ const toJSON = value.toJSON;
25
+ if (typeof toJSON === "function")
26
+ return stableJsonValue(toJSON.call(value));
27
+ return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => [key, stableJsonValue(entry)]));
28
+ }
29
+ function relationshipEdgeKey(edge) {
30
+ return JSON.stringify(stableJsonValue(edge));
31
+ }
32
+ function appendFinishingOrder(start, adjacency, visited, order) {
33
+ const stack = [{ id: start, expanded: false }];
34
+ while (stack.length > 0) {
35
+ const current = stack.pop();
36
+ if (current.expanded) {
37
+ order.push(current.id);
38
+ continue;
39
+ }
40
+ if (visited.has(current.id))
41
+ continue;
42
+ visited.add(current.id);
43
+ stack.push({ id: current.id, expanded: true });
44
+ const neighbors = [...adjacency.get(current.id)].sort().reverse();
45
+ for (const neighbor of neighbors)
46
+ if (!visited.has(neighbor))
47
+ stack.push({ id: neighbor, expanded: false });
48
+ }
49
+ }
50
+ function computeFinishingOrder(nodes, adjacency) {
51
+ const visited = /* @__PURE__ */ new Set();
52
+ const order = [];
53
+ for (const start of nodes)
54
+ if (!visited.has(start))
55
+ appendFinishingOrder(start, adjacency, visited, order);
56
+ return order;
57
+ }
58
+ function collectReverseComponents(order, reverse) {
59
+ const visited = /* @__PURE__ */ new Set();
60
+ const components = [];
61
+ for (const start of [...order].reverse()) {
62
+ if (visited.has(start))
63
+ continue;
64
+ const component = [];
65
+ const stack = [start];
66
+ visited.add(start);
67
+ while (stack.length > 0) {
68
+ const current = stack.pop();
69
+ component.push(current);
70
+ for (const neighbor of reverse.get(current)) {
71
+ if (visited.has(neighbor))
72
+ continue;
73
+ visited.add(neighbor);
74
+ stack.push(neighbor);
75
+ }
76
+ }
77
+ components.push(component);
78
+ }
79
+ return sortComponents(components);
80
+ }
81
+ function stronglyConnectedComponents(nodes, adjacency) {
82
+ const reverse = createAdjacency(nodes);
83
+ for (const [source, targets] of adjacency)
84
+ for (const target of targets)
85
+ appendNeighbor(reverse, target, source);
86
+ return collectReverseComponents(computeFinishingOrder(nodes, adjacency), reverse);
87
+ }
88
+ function buildExecutionAdjacency(graph, registry) {
89
+ const adjacency = createAdjacency(graph.nodes());
90
+ for (const edge of graph.edges()) {
91
+ const definition = registry.require(edge.kind);
92
+ if (!definition.ordering)
93
+ continue;
94
+ const sourceFirst = (definition.precedence ?? "source_before_target") === "source_before_target";
95
+ appendNeighbor(adjacency, sourceFirst ? edge.source : edge.target, sourceFirst ? edge.target : edge.source);
96
+ }
97
+ return adjacency;
98
+ }
99
+ function topologicalLayers(nodes, adjacency) {
100
+ const indegree = new Map(nodes.map((node) => [node, 0]));
101
+ for (const targets of adjacency.values())
102
+ for (const target of targets)
103
+ indegree.set(target, indegree.get(target) + 1);
104
+ let frontier = nodes.filter((node) => indegree.get(node) === 0).sort();
105
+ const layers = [];
106
+ while (frontier.length > 0) {
107
+ layers.push(frontier);
108
+ const next = [];
109
+ for (const source of frontier) {
110
+ for (const target of adjacency.get(source)) {
111
+ const remaining = indegree.get(target) - 1;
112
+ indegree.set(target, remaining);
113
+ if (remaining === 0)
114
+ next.push(target);
115
+ }
116
+ }
117
+ frontier = next.sort();
118
+ }
119
+ return layers;
120
+ }
121
+ function longestPath(order, adjacency) {
122
+ const depth = new Map(order.map((node) => [node, 0]));
123
+ const parent = /* @__PURE__ */ new Map();
124
+ for (const source of order) {
125
+ for (const target of adjacency.get(source)) {
126
+ if (!depth.has(target))
127
+ continue;
128
+ const candidate = depth.get(source) + 1;
129
+ const currentParent = parent.get(target);
130
+ if (candidate > depth.get(target) || candidate === depth.get(target) && (currentParent === void 0 || source.localeCompare(currentParent) < 0)) {
131
+ depth.set(target, candidate);
132
+ parent.set(target, source);
133
+ }
134
+ }
135
+ }
136
+ const end = [...order].sort((left, right) => depth.get(right) - depth.get(left) || left.localeCompare(right))[0];
137
+ const path = end === void 0 ? [] : [end];
138
+ while (path[0] !== void 0 && parent.has(path[0]))
139
+ path.unshift(parent.get(path[0]));
140
+ return { depth: Object.fromEntries(depth), path };
141
+ }
142
+ function reconstructImpactPath(root, target, parents) {
143
+ const path = [target];
144
+ let cursor = target;
145
+ while (cursor !== root) {
146
+ cursor = parents.get(cursor);
147
+ path.push(cursor);
148
+ }
149
+ return path.reverse();
150
+ }
151
+ function analyzeRelationshipExecution(graph, options = {}) {
152
+ const registry = options.registry ?? createRelationshipKindRegistry();
153
+ const nodes = [...graph.nodes()];
154
+ const adjacency = buildExecutionAdjacency(graph, registry);
155
+ const layers = topologicalLayers(nodes, adjacency);
156
+ const order = layers.flat();
157
+ const acyclic = order.length === nodes.length;
158
+ const cycles = acyclic ? [] : stronglyConnectedComponents(nodes, adjacency).filter((component) => component.length > 1 || adjacency.get(component[0]).has(component[0]));
159
+ const longest = longestPath(order, adjacency);
160
+ return {
161
+ exact: true,
162
+ acyclic,
163
+ order,
164
+ layers,
165
+ frontier: layers[0] ?? [],
166
+ depth: longest.depth,
167
+ criticalPath: longest.path,
168
+ criticalPathLength: Math.max(0, longest.path.length - 1),
169
+ cycles,
170
+ provenance: { algorithm: "kahn-longest-path", edgeFamily: "ordering" }
171
+ };
172
+ }
173
+ function analyzeGraphImpact(graph, root, options = {}) {
174
+ const direction = options.direction ?? "outgoing";
175
+ const maxDepth = options.maxDepth ?? Number.POSITIVE_INFINITY;
176
+ const limit = options.limit ?? Number.POSITIVE_INFINITY;
177
+ const queue = [{ id: root, depth: 0 }];
178
+ const seen = /* @__PURE__ */ new Set([root]);
179
+ const parents = /* @__PURE__ */ new Map();
180
+ const affected = [];
181
+ let visitedNodes = 0;
182
+ let inspectedEdges = 0;
183
+ let truncated = false;
184
+ traversal: for (let index = 0; index < queue.length; index += 1) {
185
+ options.signal?.throwIfAborted();
186
+ const current = queue[index];
187
+ visitedNodes += 1;
188
+ const adjacent = graph.adjacency(current.id, {
189
+ direction,
190
+ kinds: options.kinds,
191
+ signal: options.signal
192
+ });
193
+ inspectedEdges += adjacent.meta.inspectedEdges;
194
+ if (current.depth >= maxDepth) {
195
+ if (adjacent.value.some((id) => !seen.has(id)))
196
+ truncated = true;
197
+ continue;
198
+ }
199
+ for (const id of adjacent.value) {
200
+ if (seen.has(id))
201
+ continue;
202
+ if (affected.length >= limit) {
203
+ truncated = true;
204
+ break traversal;
205
+ }
206
+ seen.add(id);
207
+ parents.set(id, current.id);
208
+ const depth = current.depth + 1;
209
+ affected.push({
210
+ id,
211
+ distance: depth,
212
+ path: reconstructImpactPath(root, id, parents)
213
+ });
214
+ queue.push({ id, depth });
215
+ }
216
+ }
217
+ return {
218
+ root,
219
+ affected,
220
+ exact: true,
221
+ truncated,
222
+ cost: { visitedNodes, inspectedEdges }
223
+ };
224
+ }
225
+ function analyzeKnowledgeGraph(graph) {
226
+ const nodes = [...graph.nodes()];
227
+ const weak = createAdjacency(nodes);
228
+ const directed = createAdjacency(nodes);
229
+ for (const edge of graph.edges()) {
230
+ appendNeighbor(weak, edge.source, edge.target);
231
+ appendNeighbor(weak, edge.target, edge.source);
232
+ appendNeighbor(directed, edge.source, edge.target);
233
+ }
234
+ const components = [];
235
+ const visited = /* @__PURE__ */ new Set();
236
+ for (const start of nodes) {
237
+ if (visited.has(start))
238
+ continue;
239
+ const component = [];
240
+ const stack = [start];
241
+ visited.add(start);
242
+ while (stack.length > 0) {
243
+ const current = stack.pop();
244
+ component.push(current);
245
+ for (const neighbor of weak.get(current)) {
246
+ if (visited.has(neighbor))
247
+ continue;
248
+ visited.add(neighbor);
249
+ stack.push(neighbor);
250
+ }
251
+ }
252
+ components.push(component);
253
+ }
254
+ const degrees = nodes.map((id) => ({ id, degree: weak.get(id).size }));
255
+ const maximum = Math.max(0, ...degrees.map(({ degree }) => degree));
256
+ return {
257
+ components: sortComponents(components),
258
+ stronglyConnected: stronglyConnectedComponents(nodes, directed),
259
+ orphans: degrees.filter(({ degree }) => degree === 0).map(({ id }) => id),
260
+ hubs: degrees.filter(({ degree }) => degree > 0 && degree === maximum),
261
+ exact: true,
262
+ provenance: { algorithm: "component-degree", edgeFamily: "all" }
263
+ };
264
+ }
265
+ function compareRelationshipSnapshots(before, after) {
266
+ const earlier = new Map(before.edges.map((edge) => [relationshipEdgeKey(edge), edge]));
267
+ const later = new Map(after.edges.map((edge) => [relationshipEdgeKey(edge), edge]));
268
+ return {
269
+ fromVersion: before.version,
270
+ toVersion: after.version,
271
+ added: [...later].filter(([key]) => !earlier.has(key)).map(([, edge]) => edge),
272
+ removed: [...earlier].filter(([key]) => !later.has(key)).map(([, edge]) => edge),
273
+ unchangedCount: [...earlier.keys()].filter((key) => later.has(key)).length,
274
+ exact: true
275
+ };
276
+ }
277
+
278
+ export {
279
+ analyzeRelationshipExecution,
280
+ analyzeGraphImpact,
281
+ analyzeKnowledgeGraph,
282
+ compareRelationshipSnapshots
283
+ };
284
+ //# sourceMappingURL=chunk-KGPLSHJD.js.map
285
+
286
+ //# debugId=5638f886-de83-5daf-8c42-386c898c57c0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../sdk/relationship-analytics.ts"],"sourcesContent":["/**\n * @module sdk/relationship-analytics\n *\n * Provides exact, deterministic graph analytics with explicit semantics and\n * provenance suitable for planning, impact analysis, and context selection.\n */\nimport type { RelationshipSnapshot } from \"./relationship-history.js\";\nimport {\n RelationshipGraph,\n RelationshipKindRegistry,\n createRelationshipKindRegistry,\n type RelationshipEdge,\n type RelationshipQueryOptions,\n} from \"./relationships.js\";\n\n/** Exact execution-graph analysis over registered ordering kinds. */\nexport interface RelationshipExecutionAnalysis {\n /** Whether the result is exact rather than sampled or approximate. */\n exact: true;\n /** Whether the order-bearing graph is acyclic. */\n acyclic: boolean;\n /** Deterministic topological order for acyclic nodes. */\n order: string[];\n /** Parallelizable topological layers. */\n layers: string[][];\n /** Nodes with no prerequisites. */\n frontier: string[];\n /** Longest prerequisite distance for each acyclic node. */\n depth: Record<string, number>;\n /** Longest deterministic execution path. */\n criticalPath: string[];\n /** Edge count of the critical path. */\n criticalPathLength: number;\n /** Strongly connected order-bearing components that represent cycles. */\n cycles: string[][];\n /** Semantic provenance for the analysis. */\n provenance: { algorithm: \"kahn-longest-path\"; edgeFamily: \"ordering\" };\n}\n\n/** One affected node with its exact shortest explanation path. */\nexport interface RelationshipImpactRow {\n /** Affected node identifier. */\n id: string;\n /** Shortest relationship distance from the root. */\n distance: number;\n /** Exact path explaining why the node is affected. */\n path: string[];\n}\n\n/** Bounded reverse- or forward-impact result. */\nexport interface RelationshipImpactAnalysis {\n /** Impact origin. */\n root: string;\n /** Deterministic affected-node rows. */\n affected: RelationshipImpactRow[];\n /** Returned rows are exact even when the bounded result is incomplete. */\n exact: true;\n /** Whether configured traversal bounds omitted reachable work. */\n truncated: boolean;\n /** Query work retained for performance and explainability. */\n cost: { visitedNodes: number; inspectedEdges: number };\n}\n\n/** Exact structural summary of the complete graph snapshot. */\nexport interface RelationshipKnowledgeAnalysis {\n /** Weakly connected components, largest then lexicographic. */\n components: string[][];\n /** Strongly connected components over directed stored edges. */\n stronglyConnected: string[][];\n /** Nodes with no relationship edges. */\n orphans: string[];\n /** Maximum-degree nodes and their unique-neighbor degree. */\n hubs: { id: string; degree: number }[];\n /** Whether the result is exact. */\n exact: true;\n /** Semantic provenance for the analysis. */\n provenance: { algorithm: \"component-degree\"; edgeFamily: \"all\" };\n}\n\n/** Edge-level delta between two immutable snapshots. */\nexport interface RelationshipSnapshotComparison {\n /** Earlier snapshot version. */\n fromVersion: number;\n /** Later snapshot version. */\n toVersion: number;\n /** Edges introduced in the later snapshot. */\n added: RelationshipEdge[];\n /** Edges absent from the later snapshot. */\n removed: RelationshipEdge[];\n /** Number of byte-equivalent edges retained. */\n unchangedCount: number;\n /** Whether the comparison is exact. */\n exact: true;\n}\n\n/** Registry override for custom domain semantics. */\nexport interface RelationshipAnalyticsOptions {\n /** Registry used to interpret ordering direction and custom kinds. */\n registry?: RelationshipKindRegistry;\n}\n\nfunction appendNeighbor(\n adjacency: Map<string, Set<string>>,\n source: string,\n target: string,\n): void {\n adjacency.get(source)!.add(target);\n}\n\nfunction createAdjacency(nodes: readonly string[]): Map<string, Set<string>> {\n return new Map(nodes.map((node) => [node, new Set<string>()]));\n}\n\nfunction sortComponents(components: string[][]): string[][] {\n for (const component of components) component.sort();\n return components.sort(\n (left, right) =>\n right.length - left.length || left[0]!.localeCompare(right[0]!),\n );\n}\n\nfunction stableJsonValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map((entry) => stableJsonValue(entry));\n if (value === null || typeof value !== \"object\") return value;\n const toJSON = (value as { toJSON?: (this: object) => unknown }).toJSON;\n if (typeof toJSON === \"function\") return stableJsonValue(toJSON.call(value));\n return Object.fromEntries(\n Object.entries(value)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, stableJsonValue(entry)]),\n );\n}\n\nfunction relationshipEdgeKey(edge: RelationshipEdge): string {\n return JSON.stringify(stableJsonValue(edge));\n}\n\nfunction appendFinishingOrder(\n start: string,\n adjacency: ReadonlyMap<string, ReadonlySet<string>>,\n visited: Set<string>,\n order: string[],\n): void {\n const stack = [{ id: start, expanded: false }];\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (current.expanded) {\n order.push(current.id);\n continue;\n }\n if (visited.has(current.id)) continue;\n visited.add(current.id);\n stack.push({ id: current.id, expanded: true });\n const neighbors = [...adjacency.get(current.id)!].sort().reverse();\n for (const neighbor of neighbors)\n if (!visited.has(neighbor)) stack.push({ id: neighbor, expanded: false });\n }\n}\n\nfunction computeFinishingOrder(\n nodes: readonly string[],\n adjacency: ReadonlyMap<string, ReadonlySet<string>>,\n): string[] {\n const visited = new Set<string>();\n const order: string[] = [];\n for (const start of nodes)\n if (!visited.has(start))\n appendFinishingOrder(start, adjacency, visited, order);\n return order;\n}\n\nfunction collectReverseComponents(\n order: readonly string[],\n reverse: ReadonlyMap<string, ReadonlySet<string>>,\n): string[][] {\n const visited = new Set<string>();\n const components: string[][] = [];\n for (const start of [...order].reverse()) {\n if (visited.has(start)) continue;\n const component: string[] = [];\n const stack = [start];\n visited.add(start);\n while (stack.length > 0) {\n const current = stack.pop()!;\n component.push(current);\n for (const neighbor of reverse.get(current)!) {\n if (visited.has(neighbor)) continue;\n visited.add(neighbor);\n stack.push(neighbor);\n }\n }\n components.push(component);\n }\n return sortComponents(components);\n}\n\nfunction stronglyConnectedComponents(\n nodes: readonly string[],\n adjacency: ReadonlyMap<string, ReadonlySet<string>>,\n): string[][] {\n const reverse = createAdjacency(nodes);\n for (const [source, targets] of adjacency)\n for (const target of targets) appendNeighbor(reverse, target, source);\n return collectReverseComponents(\n computeFinishingOrder(nodes, adjacency),\n reverse,\n );\n}\n\nfunction buildExecutionAdjacency(\n graph: RelationshipGraph,\n registry: RelationshipKindRegistry,\n): Map<string, Set<string>> {\n const adjacency = createAdjacency(graph.nodes());\n for (const edge of graph.edges()) {\n const definition = registry.require(edge.kind);\n if (!definition.ordering) continue;\n // Legacy and JSON-parsed definitions may predate explicit precedence.\n const sourceFirst =\n (definition.precedence ?? \"source_before_target\") ===\n \"source_before_target\";\n appendNeighbor(\n adjacency,\n sourceFirst ? edge.source : edge.target,\n sourceFirst ? edge.target : edge.source,\n );\n }\n return adjacency;\n}\n\nfunction topologicalLayers(\n nodes: readonly string[],\n adjacency: ReadonlyMap<string, ReadonlySet<string>>,\n): string[][] {\n const indegree = new Map(nodes.map((node) => [node, 0]));\n for (const targets of adjacency.values())\n for (const target of targets)\n indegree.set(target, indegree.get(target)! + 1);\n let frontier = nodes.filter((node) => indegree.get(node) === 0).sort();\n const layers: string[][] = [];\n while (frontier.length > 0) {\n layers.push(frontier);\n const next: string[] = [];\n for (const source of frontier) {\n for (const target of adjacency.get(source)!) {\n const remaining = indegree.get(target)! - 1;\n indegree.set(target, remaining);\n if (remaining === 0) next.push(target);\n }\n }\n frontier = next.sort();\n }\n return layers;\n}\n\nfunction longestPath(\n order: readonly string[],\n adjacency: ReadonlyMap<string, ReadonlySet<string>>,\n): { depth: Record<string, number>; path: string[] } {\n const depth = new Map(order.map((node) => [node, 0]));\n const parent = new Map<string, string>();\n for (const source of order) {\n for (const target of adjacency.get(source)!) {\n if (!depth.has(target)) continue;\n const candidate = depth.get(source)! + 1;\n const currentParent = parent.get(target);\n if (\n candidate > depth.get(target)! ||\n (candidate === depth.get(target)! &&\n (currentParent === undefined ||\n source.localeCompare(currentParent) < 0))\n ) {\n depth.set(target, candidate);\n parent.set(target, source);\n }\n }\n }\n const end = [...order].sort(\n (left, right) =>\n depth.get(right)! - depth.get(left)! || left.localeCompare(right),\n )[0];\n const path = end === undefined ? [] : [end];\n while (path[0] !== undefined && parent.has(path[0]!))\n path.unshift(parent.get(path[0]!)!);\n return { depth: Object.fromEntries(depth), path };\n}\n\nfunction reconstructImpactPath(\n root: string,\n target: string,\n parents: ReadonlyMap<string, string>,\n): string[] {\n const path = [target];\n let cursor = target;\n while (cursor !== root) {\n cursor = parents.get(cursor)!;\n path.push(cursor);\n }\n return path.reverse();\n}\n\n/** Analyze registered order-bearing relationships without treating associative cycles as blockers. */\nexport function analyzeRelationshipExecution(\n graph: RelationshipGraph,\n options: RelationshipAnalyticsOptions = {},\n): RelationshipExecutionAnalysis {\n const registry = options.registry ?? createRelationshipKindRegistry();\n const nodes = [...graph.nodes()];\n const adjacency = buildExecutionAdjacency(graph, registry);\n const layers = topologicalLayers(nodes, adjacency);\n const order = layers.flat();\n const acyclic = order.length === nodes.length;\n const cycles = acyclic\n ? []\n : stronglyConnectedComponents(nodes, adjacency).filter(\n (component) =>\n component.length > 1 ||\n adjacency.get(component[0]!)!.has(component[0]!),\n );\n const longest = longestPath(order, adjacency);\n return {\n exact: true,\n acyclic,\n order,\n layers,\n frontier: layers[0] ?? [],\n depth: longest.depth,\n criticalPath: longest.path,\n criticalPathLength: Math.max(0, longest.path.length - 1),\n cycles,\n provenance: { algorithm: \"kahn-longest-path\", edgeFamily: \"ordering\" },\n };\n}\n\n/** Compute bounded impact rows and exact shortest explanation paths. */\nexport function analyzeGraphImpact(\n graph: RelationshipGraph,\n root: string,\n options: RelationshipQueryOptions = {},\n): RelationshipImpactAnalysis {\n const direction = options.direction ?? \"outgoing\";\n const maxDepth = options.maxDepth ?? Number.POSITIVE_INFINITY;\n const limit = options.limit ?? Number.POSITIVE_INFINITY;\n const queue = [{ id: root, depth: 0 }];\n const seen = new Set([root]);\n const parents = new Map<string, string>();\n const affected: RelationshipImpactRow[] = [];\n let visitedNodes = 0;\n let inspectedEdges = 0;\n let truncated = false;\n traversal: for (let index = 0; index < queue.length; index += 1) {\n options.signal?.throwIfAborted();\n const current = queue[index]!;\n visitedNodes += 1;\n const adjacent = graph.adjacency(current.id, {\n direction,\n kinds: options.kinds,\n signal: options.signal,\n });\n inspectedEdges += adjacent.meta.inspectedEdges;\n if (current.depth >= maxDepth) {\n if (adjacent.value.some((id) => !seen.has(id))) truncated = true;\n continue;\n }\n for (const id of adjacent.value) {\n if (seen.has(id)) continue;\n if (affected.length >= limit) {\n truncated = true;\n break traversal;\n }\n seen.add(id);\n parents.set(id, current.id);\n const depth = current.depth + 1;\n affected.push({\n id,\n distance: depth,\n path: reconstructImpactPath(root, id, parents),\n });\n queue.push({ id, depth });\n }\n }\n return {\n root,\n affected,\n exact: true,\n truncated,\n cost: { visitedNodes, inspectedEdges },\n };\n}\n\n/** Analyze weak/strong components, isolates, and exact unique-neighbor hubs. */\nexport function analyzeKnowledgeGraph(\n graph: RelationshipGraph,\n): RelationshipKnowledgeAnalysis {\n const nodes = [...graph.nodes()];\n const weak = createAdjacency(nodes);\n const directed = createAdjacency(nodes);\n for (const edge of graph.edges()) {\n appendNeighbor(weak, edge.source, edge.target);\n appendNeighbor(weak, edge.target, edge.source);\n appendNeighbor(directed, edge.source, edge.target);\n }\n const components: string[][] = [];\n const visited = new Set<string>();\n for (const start of nodes) {\n if (visited.has(start)) continue;\n const component: string[] = [];\n const stack = [start];\n visited.add(start);\n while (stack.length > 0) {\n const current = stack.pop()!;\n component.push(current);\n for (const neighbor of weak.get(current)!) {\n if (visited.has(neighbor)) continue;\n visited.add(neighbor);\n stack.push(neighbor);\n }\n }\n components.push(component);\n }\n const degrees = nodes.map((id) => ({ id, degree: weak.get(id)!.size }));\n const maximum = Math.max(0, ...degrees.map(({ degree }) => degree));\n return {\n components: sortComponents(components),\n stronglyConnected: stronglyConnectedComponents(nodes, directed),\n orphans: degrees.filter(({ degree }) => degree === 0).map(({ id }) => id),\n hubs: degrees.filter(({ degree }) => degree > 0 && degree === maximum),\n exact: true,\n provenance: { algorithm: \"component-degree\", edgeFamily: \"all\" },\n };\n}\n\n/** Compare two immutable relationship snapshots by full normalized edge value. */\nexport function compareRelationshipSnapshots(\n before: RelationshipSnapshot,\n after: RelationshipSnapshot,\n): RelationshipSnapshotComparison {\n const earlier = new Map(\n before.edges.map((edge) => [relationshipEdgeKey(edge), edge]),\n );\n const later = new Map(\n after.edges.map((edge) => [relationshipEdgeKey(edge), edge]),\n );\n return {\n fromVersion: before.version,\n toVersion: after.version,\n added: [...later]\n .filter(([key]) => !earlier.has(key))\n .map(([, edge]) => edge),\n removed: [...earlier]\n .filter(([key]) => !later.has(key))\n .map(([, edge]) => edge),\n unchangedCount: [...earlier.keys()].filter((key) => later.has(key)).length,\n exact: true,\n };\n}\n"],"names":[],"mappings":"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","debugId":"5638f886-de83-5daf-8c42-386c898c57c0"}
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  collectUsedExtensionCapabilities,
3
3
  normalizeExtensionName
4
- } from "./chunk-WACRQ26A.js";
4
+ } from "./chunk-WCBB6VI3.js";
5
5
 
6
6
  // dist/core/extensions/activation-summary.js
7
7
  !(function() {
8
8
  try {
9
9
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
10
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "5fe77bdc-8d36-559b-9e5f-51a3cd63cd9e");
10
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "47bc7f94-775b-5e2c-85cf-ec263029ca56");
11
11
  } catch (e2) {
12
12
  }
13
13
  })();
@@ -30,6 +30,7 @@ function describeExtensionActivation(activation, options = {}) {
30
30
  const collect = (entries, identify) => sortUnique(entries.filter((entry) => matches(entry.name)).map(identify));
31
31
  const collectFlat = (entries, expand) => sortUnique(entries.filter((entry) => matches(entry.name)).flatMap(expand));
32
32
  const { registrations, commands, parsers, preflight, services, renderers, hooks } = activation;
33
+ const relationshipKinds = collectFlat(registrations.relationship_kinds ?? [], (entry) => entry.definitions.map((definition) => definition.kind));
33
34
  return {
34
35
  capabilities: collectUsedExtensionCapabilities(activation, options),
35
36
  commands: collect(registrations.commands, (entry) => entry.command),
@@ -39,6 +40,7 @@ function describeExtensionActivation(activation, options = {}) {
39
40
  flag_commands: collect(registrations.flags, (entry) => entry.target_command),
40
41
  item_types: collectFlat(registrations.item_types, (entry) => entry.types.map((type) => type.name)),
41
42
  item_fields: collectFlat(registrations.item_fields, (entry) => entry.fields.map((field) => field.name)),
43
+ ...relationshipKinds.length > 0 ? { relationship_kinds: relationshipKinds } : {},
42
44
  migrations: collectFlat(registrations.migrations, (entry) => typeof entry.definition.id === "string" ? [entry.definition.id] : []),
43
45
  profiles: collect(registrations.profiles, (entry) => entry.profile.name),
44
46
  importers: collect(registrations.importers, (entry) => entry.importer),
@@ -157,4 +159,4 @@ export {
157
159
  describeExtensionActivation,
158
160
  renderExtensionSurfaceMarkdown
159
161
  };
160
- //# sourceMappingURL=chunk-YQEZWI3R.js.map
162
+ //# sourceMappingURL=chunk-KZ5AC6B5.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../core/extensions/activation-summary.ts", "../../../../../../../../core/extensions/activation-summary-markdown.ts"],
4
+ "sourcesContent": ["/**\n * @module core/extensions/activation-summary\n *\n * Enumerates *what* an extension activation registered, by name, in one pass.\n *\n * {@link ./extension-types.js#ExtensionActivationResult | `ExtensionActivationResult`}\n * already carries per-surface *counts* (`hook_counts`, `registration_counts`,\n * the various `*_count` fields), but answering \"what does this extension\n * register?\" otherwise means walking fifteen-plus sub-registries by hand\n * (`registrations.commands`/`flags`/`item_types`/`item_fields`/`migrations`/\n * `importers`/`exporters`/`search_providers`/`vector_store_adapters`,\n * `commands.overrides`/`handlers`, the `parsers`/`preflight`/`services`/\n * `renderers` override registries, and the five `hooks.*` arrays).\n *\n * {@link describeExtensionActivation} flattens all of them into one sorted,\n * deterministic {@link ExtensionActivationSummary} of identifiers — the\n * `describe` (enumerate-all) verb that complements the SDK's `assert*`\n * (verify-one) and `run*` (invoke-one) testing helpers. It serves two callers:\n *\n * - **Agents** get a single token-efficient view of an activation instead of\n * traversing every registry (\"project management = context management\").\n * - **Package authors** can assert their *entire* registration surface in one\n * `deepEqual` — a least-privilege \"I register exactly these surfaces and\n * nothing more\" check, the positive counterpart to\n * {@link ./capability-usage.js#reconcileExtensionCapabilityUsage}.\n */\nimport type {\n ExtensionActivationResult,\n ExtensionCapability,\n ExtensionHookRegistry,\n ExtensionServiceName,\n OutputRendererFormat,\n} from \"./extension-types.js\";\nimport {\n collectUsedExtensionCapabilities,\n normalizeExtensionName,\n} from \"./capability-usage.js\";\n\n/**\n * Canonical lifecycle hook kinds paired with their {@link ExtensionHookRegistry}\n * field, ordered to match `ExtensionActivationResult.hook_counts` so a summary's\n * `hooks` list reads in the same stable order the runtime reports counts in.\n */\nconst HOOK_REGISTRY_FIELD_TO_KIND = [\n [\"beforeCommand\", \"before_command\"],\n [\"afterCommand\", \"after_command\"],\n [\"onWrite\", \"on_write\"],\n [\"onRead\", \"on_read\"],\n [\"onIndex\", \"on_index\"],\n] as const satisfies ReadonlyArray<\n readonly [keyof ExtensionHookRegistry, string]\n>;\n\n/**\n * Flat, name-level enumeration of every surface an activation registered.\n *\n * Arrays are de-duplicated for deterministic equality. Most are locale-sorted;\n * {@link ExtensionActivationSummary.hooks} is the exception — it is emitted in\n * canonical lifecycle order to mirror `ExtensionActivationResult.hook_counts`,\n * not alphabetically. The three command fields capture distinct dimensions and\n * can overlap: a command\n * registered via `api.registerCommand(definition)` appears in both\n * {@link ExtensionActivationSummary.commands} (its declared definition) and\n * {@link ExtensionActivationSummary.command_handlers} (its executable handler),\n * whereas a built-in command replaced via `api.registerCommand(name, override)`\n * appears only in {@link ExtensionActivationSummary.command_overrides}.\n */\nexport interface ExtensionActivationSummary {\n /** Known capabilities the registered surfaces exercise (sorted, de-duplicated). */\n capabilities: ExtensionCapability[];\n /** Full command paths declared via `registerCommand`'s definition form. */\n commands: string[];\n /** Built-in command paths replaced by an `registerCommand(name, override)` handler. */\n command_overrides: string[];\n /**\n * Full command paths backed by an extension-provided handler. A superset of\n * {@link ExtensionActivationSummary.commands} that also includes the\n * `<name> import`/`<name> export` paths synthesized for importers/exporters.\n */\n command_handlers: string[];\n /** Lifecycle hook kinds with at least one registered hook (canonical order). */\n hooks: string[];\n /** Command paths that received extension-registered flags. */\n flag_commands: string[];\n /** Custom item-type names registered via `registerItemTypes`. */\n item_types: string[];\n /** Custom item-metadata field names registered via `registerItemFields`. */\n item_fields: string[];\n /** Custom relationship-kind names registered via `registerRelationshipKinds`. */\n relationship_kinds?: string[];\n /** Schema migration ids registered via `registerMigration` (id-less migrations are omitted — they carry no identifier). */\n migrations: string[];\n /** Project profile names registered via `registerProfile`. */\n profiles: string[];\n /** Importer names registered via `registerImporter`. */\n importers: string[];\n /** Exporter names registered via `registerExporter`. */\n exporters: string[];\n /** Search-provider names registered via `registerSearchProvider`. */\n search_providers: string[];\n /** Vector-store adapter names registered via `registerVectorStoreAdapter`. */\n vector_store_adapters: string[];\n /** Command paths with a parser override registered via `registerParser`. */\n parser_overrides: string[];\n /** Built-in service names overridden via `registerService`. */\n service_overrides: ExtensionServiceName[];\n /** Output formats with a renderer override registered via `registerRenderer`. */\n renderer_overrides: OutputRendererFormat[];\n /** Count of registered preflight overrides. The surface carries no per-entry identifier, so this is a `number` rather than `string[]` — the only numeric field in the summary. */\n preflight_overrides: number;\n}\n\n/**\n * Options for {@link describeExtensionActivation}.\n */\nexport interface DescribeExtensionActivationOptions {\n /**\n * Restrict the summary to a single extension by name. Names are matched\n * case-insensitively after trimming, mirroring\n * {@link ./capability-usage.js#collectUsedExtensionCapabilities}. Omit to\n * union across every extension in the activation result.\n */\n extensionName?: string;\n /** Restrict the summary to a set of extension names. This supports package aliases that resolve to multiple extensions while keeping the historical single-name option intact. */\n extensionNames?: readonly string[];\n}\n\n/**\n * Summarize, by name, every registration surface an activation exercised.\n *\n * Walks the same sub-registries the loader populates and the capability\n * reconciler attributes, returning a flat {@link ExtensionActivationSummary}\n * whose arrays are sorted and de-duplicated. With\n * {@link DescribeExtensionActivationOptions.extensionName} only the matching\n * extension's registrations contribute (across both layers); without it the\n * summary unions every extension in the activation. Failed activations register\n * nothing, so they contribute only an empty summary.\n */\nexport function describeExtensionActivation(\n activation: ExtensionActivationResult,\n options: DescribeExtensionActivationOptions = {},\n): ExtensionActivationSummary {\n // Match both sides with the same normalizer collectUsedExtensionCapabilities\n // uses for the `capabilities` field below, so a filtered summary's named\n // surfaces and capabilities never disagree for a stored name with whitespace.\n const filters = new Set<string>();\n if (options.extensionName !== undefined) {\n filters.add(normalizeExtensionName(options.extensionName));\n }\n for (const name of options.extensionNames ?? []) {\n filters.add(normalizeExtensionName(name));\n }\n const matches = (name: string): boolean =>\n filters.size === 0 || filters.has(normalizeExtensionName(name));\n const collect = <TEntry extends { name: string }, TValue extends string>(\n entries: readonly TEntry[],\n identify: (entry: TEntry) => TValue,\n ): TValue[] =>\n sortUnique(entries.filter((entry) => matches(entry.name)).map(identify));\n const collectFlat = <TEntry extends { name: string }>(\n entries: readonly TEntry[],\n expand: (entry: TEntry) => readonly string[],\n ): string[] =>\n sortUnique(entries.filter((entry) => matches(entry.name)).flatMap(expand));\n const {\n registrations,\n commands,\n parsers,\n preflight,\n services,\n renderers,\n hooks,\n } = activation;\n // Preserve compatibility with activation payloads produced before this registry existed.\n const relationshipKinds = collectFlat(\n registrations.relationship_kinds ?? [],\n (entry) => entry.definitions.map((definition) => definition.kind),\n );\n return {\n capabilities: collectUsedExtensionCapabilities(activation, options),\n commands: collect(registrations.commands, (entry) => entry.command),\n command_overrides: collect(commands.overrides, (entry) => entry.command),\n command_handlers: collect(commands.handlers, (entry) => entry.command),\n hooks: HOOK_REGISTRY_FIELD_TO_KIND.filter(([field]) =>\n hooks[field].some((entry) => matches(entry.name)),\n ).map(([, kind]) => kind),\n flag_commands: collect(\n registrations.flags,\n (entry) => entry.target_command,\n ),\n item_types: collectFlat(registrations.item_types, (entry) =>\n entry.types.map((type) => type.name),\n ),\n item_fields: collectFlat(registrations.item_fields, (entry) =>\n entry.fields.map((field) => field.name),\n ),\n ...(relationshipKinds.length > 0\n ? { relationship_kinds: relationshipKinds }\n : {}),\n migrations: collectFlat(registrations.migrations, (entry) =>\n typeof entry.definition.id === \"string\" ? [entry.definition.id] : [],\n ),\n profiles: collect(registrations.profiles, (entry) => entry.profile.name),\n importers: collect(registrations.importers, (entry) => entry.importer),\n exporters: collect(registrations.exporters, (entry) => entry.exporter),\n search_providers: collect(\n registrations.search_providers,\n (entry) => entry.definition.name,\n ),\n vector_store_adapters: collect(\n registrations.vector_store_adapters,\n (entry) => entry.definition.name,\n ),\n parser_overrides: collect(parsers.overrides, (entry) => entry.command),\n service_overrides: collect(services.overrides, (entry) => entry.service),\n renderer_overrides: collect(renderers.overrides, (entry) => entry.format),\n preflight_overrides: preflight.overrides.filter((entry) =>\n matches(entry.name),\n ).length,\n };\n}\n\nfunction sortUnique<TValue extends string>(\n values: readonly TValue[],\n): TValue[] {\n return [...new Set(values)].sort((left, right) => left.localeCompare(right));\n}\n", "/**\n * @module core/extensions/activation-summary-markdown\n *\n * Renders an {@link ExtensionActivationSummary} to a deterministic Markdown\n * reference document — the *render* leg that completes the `describe`\n * (enumerate-all) verb.\n *\n * {@link ./activation-summary.js#describeExtensionActivation | `describeExtensionActivation`}\n * (and its author-time twin\n * {@link ../../sdk/compose.js#describeExtensionBlueprint | `describeExtensionBlueprint`})\n * already answer \"what does this package register?\" as a structured summary, and\n * the `assert*`/`run*` testing helpers verify and invoke each surface. What was\n * missing is a way to turn that summary into human-readable docs: package\n * authors hand-wrote the README \"commands & capabilities\" reference, which\n * silently drifted from the surface the loader actually registers.\n *\n * {@link renderExtensionSurfaceMarkdown} closes that gap. It is a pure,\n * dependency-free projection of the summary, so an author can pipe\n * `describeExtensionBlueprint(blueprint)` straight into it during their build or\n * test step and embed the result in their README — a reference that can never\n * drift from the registered surface (\"project management = context management\").\n * The CLI's `pm extension|package describe --markdown` composes the same\n * primitive across every loaded extension.\n */\nimport type { ExtensionActivationSummary } from \"./activation-summary.js\";\n\n/**\n * The lowest and highest ATX heading levels Markdown supports, used to validate\n * {@link ExtensionSurfaceMarkdownOptions.headingLevel} and to clamp nested\n * section headings so a deep title never emits an invalid `#######` run.\n */\nconst MIN_HEADING_LEVEL = 1;\nconst MAX_HEADING_LEVEL = 6;\n\n/**\n * Options for {@link renderExtensionSurfaceMarkdown}.\n */\nexport interface ExtensionSurfaceMarkdownOptions {\n /**\n * Heading text for the document title. Defaults to `\"Extension surfaces\"`.\n * The title always renders as an ATX heading at\n * {@link ExtensionSurfaceMarkdownOptions.headingLevel}; per-surface sections\n * render one level deeper.\n */\n title?: string;\n /**\n * ATX heading level for the title, an integer in `[1, 6]` (default `2`, i.e.\n * `##`, so the document embeds cleanly under a `# Package` README heading).\n * Section headings render at `headingLevel + 1`, clamped to `6`. Values\n * outside `[1, 6]` throw a {@link RangeError}.\n */\n headingLevel?: number;\n /** When `true`, render every surface section even when it has no entries (emitting `_None._` under the heading) and always emit the capabilities line. Defaults to `false`, which omits empty sections so the reference lists only what the package actually contributes. */\n includeEmpty?: boolean;\n}\n\n/**\n * A surface section paired with the {@link ExtensionActivationSummary} field\n * whose identifiers populate it. Ordered for an author-facing reference:\n * commands first, then schema, then importers/exporters, retrieval, lifecycle\n * hooks, and finally the override surfaces. {@link ExtensionActivationSummary.command_handlers}\n * is intentionally omitted — it is a documented superset of `commands` plus the\n * synthesized `<name> import`/`<name> export` paths already covered by the\n * Importers and Exporters sections, so rendering it would duplicate information.\n */\nconst SURFACE_SECTIONS = [\n [\"commands\", \"Commands\"],\n [\"command_overrides\", \"Command overrides\"],\n [\"flag_commands\", \"Flag commands\"],\n [\"item_types\", \"Item types\"],\n [\"item_fields\", \"Item fields\"],\n [\"migrations\", \"Migrations\"],\n [\"profiles\", \"Profiles\"],\n [\"importers\", \"Importers\"],\n [\"exporters\", \"Exporters\"],\n [\"search_providers\", \"Search providers\"],\n [\"vector_store_adapters\", \"Vector store adapters\"],\n [\"hooks\", \"Lifecycle hooks\"],\n [\"parser_overrides\", \"Parser overrides\"],\n [\"service_overrides\", \"Service overrides\"],\n [\"renderer_overrides\", \"Renderer overrides\"],\n] as const satisfies ReadonlyArray<\n readonly [\n {\n [K in keyof ExtensionActivationSummary]: ExtensionActivationSummary[K] extends readonly string[]\n ? K\n : never;\n }[keyof ExtensionActivationSummary],\n string,\n ]\n>;\n\n/** Repeat `#` `level` times to form an ATX heading prefix. */\nfunction headingPrefix(level: number): string {\n return \"#\".repeat(level);\n}\n\n/** Render `value` as an inline Markdown code span. Backslash escapes do not work inside CommonMark code spans, so when `value` contains backticks the span is delimited by a run of backticks one longer than the longest internal run, and padded with a space when the value borders a backtick — the CommonMark rule for embedding literal backticks in a code span. */\nfunction code(value: string): string {\n if (!value.includes(\"`\")) {\n return `\\`${value}\\``;\n }\n let longestRun = 0;\n let currentRun = 0;\n for (const char of value) {\n currentRun = char === \"`\" ? currentRun + 1 : 0;\n longestRun = Math.max(longestRun, currentRun);\n }\n const fence = \"`\".repeat(longestRun + 1);\n const pad = value.startsWith(\"`\") || value.endsWith(\"`\") ? \" \" : \"\";\n return `${fence}${pad}${value}${pad}${fence}`;\n}\n\n/** Render the comma-separated capabilities summary line (or `_none registered_` when the activation exercised no known capability). */\nfunction renderCapabilitiesLine(capabilities: readonly string[]): string {\n if (capabilities.length === 0) {\n return \"Capabilities: _none registered_\";\n }\n return `Capabilities: ${capabilities.map(code).join(\", \")}`;\n}\n\n/**\n * Render one surface section as `heading` + a bullet per identifier, or, when\n * `entries` is empty, `heading` + `_None._`. Callers decide whether an empty\n * section is rendered at all via {@link ExtensionSurfaceMarkdownOptions.includeEmpty}.\n */\nfunction renderSection(\n heading: string,\n level: number,\n entries: readonly string[],\n): string[] {\n const lines = [`${headingPrefix(level)} ${heading}`, \"\"];\n if (entries.length === 0) {\n lines.push(\"_None._\", \"\");\n return lines;\n }\n lines.push(...entries.map((entry) => `- ${code(entry)}`), \"\");\n return lines;\n}\n\n/**\n * Render the preflight-overrides section: a count line when any are registered,\n * `_None._` when {@link ExtensionSurfaceMarkdownOptions.includeEmpty} forces the\n * empty section, or no lines at all otherwise. Preflight overrides carry no\n * per-entry identifier, so they have a bespoke renderer rather than reusing\n * {@link renderSection}.\n */\nfunction renderPreflightSection(\n count: number,\n level: number,\n includeEmpty: boolean,\n): string[] {\n if (count === 0 && !includeEmpty) {\n return [];\n }\n return [\n `${headingPrefix(level)} Preflight overrides`,\n \"\",\n count > 0\n ? `- ${count} registered (this surface carries no per-entry identifier)`\n : \"_None._\",\n \"\",\n ];\n}\n\n/**\n * Render an {@link ExtensionActivationSummary} as a deterministic Markdown\n * reference document.\n *\n * The output is a title heading, a one-line capabilities summary, and a section\n * per registered surface (commands, overrides, flags, item types/fields,\n * migrations, importers/exporters, search providers, vector adapters, lifecycle\n * hooks, and the parser/service/renderer override surfaces), followed by a\n * preflight-override count line when any are registered. Section order and\n * within-section identifier order both come straight from the summary, so the\n * same summary always renders byte-for-byte the same document.\n *\n * By default empty sections are omitted so the reference lists only what the\n * package contributes; set {@link ExtensionSurfaceMarkdownOptions.includeEmpty}\n * to render every section. A summary with no surfaces at all renders the title,\n * the capabilities line, and a `_This extension registers no surfaces._` note.\n *\n * @throws {RangeError} when `options.headingLevel` is not an integer in `[1, 6]`.\n */\nexport function renderExtensionSurfaceMarkdown(\n summary: ExtensionActivationSummary,\n options: ExtensionSurfaceMarkdownOptions = {},\n): string {\n const titleLevel = options.headingLevel ?? 2;\n if (\n !Number.isInteger(titleLevel) ||\n titleLevel < MIN_HEADING_LEVEL ||\n titleLevel > MAX_HEADING_LEVEL\n ) {\n throw new RangeError(\n `headingLevel must be an integer in [${MIN_HEADING_LEVEL}, ${MAX_HEADING_LEVEL}], received ${String(options.headingLevel)}`,\n );\n }\n const sectionLevel = Math.min(titleLevel + 1, MAX_HEADING_LEVEL);\n const includeEmpty = options.includeEmpty === true;\n const title = options.title ?? \"Extension surfaces\";\n\n const lines = [`${headingPrefix(titleLevel)} ${title}`, \"\"];\n if (includeEmpty || summary.capabilities.length > 0) {\n lines.push(renderCapabilitiesLine(summary.capabilities), \"\");\n }\n\n for (const [field, heading] of SURFACE_SECTIONS) {\n const entries = summary[field];\n if (entries.length === 0 && !includeEmpty) {\n continue;\n }\n lines.push(...renderSection(heading, sectionLevel, entries));\n }\n\n lines.push(\n ...renderPreflightSection(\n summary.preflight_overrides,\n sectionLevel,\n includeEmpty,\n ),\n );\n\n const hasAnySurface =\n summary.preflight_overrides > 0 ||\n SURFACE_SECTIONS.some(([field]) => summary[field].length > 0);\n if (!hasAnySurface && !includeEmpty) {\n lines.push(\"_This extension registers no surfaces._\", \"\");\n }\n\n return `${lines.join(\"\\n\").trimEnd()}\\n`;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  renameArtifactsResultKey,
5
5
  runLinkedArtifacts
6
- } from "./chunk-H5IOT54C.js";
6
+ } from "./chunk-VSQE43NO.js";
7
7
 
8
8
  // dist/sdk/docs.js
9
9
  async function runDocs(id, options, global) {
@@ -19,6 +19,6 @@ async function runDocs(id, options, global) {
19
19
  export {
20
20
  runDocs
21
21
  };
22
- //# sourceMappingURL=chunk-X2MGQMZO.js.map
22
+ //# sourceMappingURL=chunk-LT5UWU7H.js.map
23
23
 
24
24
  //# debugId=db3e4dc9-8bda-5f4e-bf43-3c1ce147c9a2
@@ -24,7 +24,7 @@ import {
24
24
  sha256Hex,
25
25
  stableStringify,
26
26
  toItemRecord
27
- } from "./chunk-P22HGFFI.js";
27
+ } from "./chunk-QFG4MB7P.js";
28
28
  import {
29
29
  EXIT_CODE,
30
30
  ITEM_METADATA_KEY_ORDER,
@@ -37,7 +37,7 @@ import {
37
37
  resolveItemTypeRegistry,
38
38
  resolvePmRoot,
39
39
  writeFileAtomic
40
- } from "./chunk-KX62NMZC.js";
40
+ } from "./chunk-D35WYXWC.js";
41
41
 
42
42
  // dist/core/history/replay.js
43
43
  import jsonPatch from "fast-json-patch";
@@ -1038,6 +1038,6 @@ export {
1038
1038
  runHistoryRedact,
1039
1039
  _testOnly
1040
1040
  };
1041
- //# sourceMappingURL=chunk-KH6QAHME.js.map
1041
+ //# sourceMappingURL=chunk-M4B4RK4J.js.map
1042
1042
 
1043
1043
  //# debugId=19224557-a97b-5405-9dc9-894cdbf821fc