@unbrained/pm-cli 2026.6.8 → 2026.6.9

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 (374) hide show
  1. package/CHANGELOG.md +31 -11
  2. package/dist/cli/extension-command-options.js +40 -17
  3. package/dist/cli/extension-command-options.js.map +1 -1
  4. package/dist/cli-bundle/chunks/activity-HF3VJYKH.js +16 -0
  5. package/dist/cli-bundle/chunks/{activity-Q7XMIZIH.js → activity-RUJATACW.js} +11 -11
  6. package/dist/cli-bundle/chunks/{aggregate-GBSHSXOB.js → aggregate-IQ27NFBI.js} +10 -11
  7. package/dist/cli-bundle/chunks/{aggregate-GBSHSXOB.js.map → aggregate-IQ27NFBI.js.map} +1 -1
  8. package/dist/cli-bundle/chunks/{aggregate-HKQJZUBG.js → aggregate-TT7OCHHT.js} +12 -13
  9. package/dist/cli-bundle/chunks/{aggregate-HKQJZUBG.js.map → aggregate-TT7OCHHT.js.map} +1 -1
  10. package/dist/cli-bundle/chunks/{append-3RFOU7P5.js → append-CWQZBUWV.js} +8 -8
  11. package/dist/cli-bundle/chunks/{append-OM74OJVT.js → append-E7AJ5RTR.js} +8 -8
  12. package/dist/cli-bundle/chunks/{chunk-NLVCMVC7.js → chunk-23WNCJBA.js} +2 -2
  13. package/dist/cli-bundle/chunks/{chunk-KVXIQDJG.js → chunk-3RHE76G6.js} +12 -12
  14. package/dist/cli-bundle/chunks/{chunk-Z2HXAFFH.js → chunk-42IULX44.js} +2 -2
  15. package/dist/cli-bundle/chunks/{chunk-FO2TYSQZ.js → chunk-44JP4PYY.js} +2 -2
  16. package/dist/cli-bundle/chunks/{chunk-DV27WDA7.js → chunk-4LRVXVJK.js} +2 -2
  17. package/dist/cli-bundle/chunks/{chunk-CBJXWXI5.js → chunk-4TJWRPIH.js} +2 -2
  18. package/dist/cli-bundle/chunks/{chunk-XEKZCBCS.js → chunk-5ATRWEZO.js} +3 -3
  19. package/dist/cli-bundle/chunks/{chunk-YJAKN2N2.js → chunk-5JF76OJF.js} +203 -10
  20. package/dist/cli-bundle/chunks/chunk-5JF76OJF.js.map +1 -0
  21. package/dist/cli-bundle/chunks/{chunk-AEMKH5WQ.js → chunk-5MMLINZB.js} +3 -3
  22. package/dist/cli-bundle/chunks/{chunk-NGEEXR2R.js → chunk-6IGTNFE3.js} +2 -2
  23. package/dist/cli-bundle/chunks/{chunk-4TI3532H.js → chunk-7CR4GAYN.js} +2 -2
  24. package/dist/cli-bundle/chunks/{chunk-D7WK2PKB.js → chunk-7YTWXGE3.js} +5 -5
  25. package/dist/cli-bundle/chunks/{chunk-QQPZYP73.js → chunk-A5342JVL.js} +12 -12
  26. package/dist/cli-bundle/chunks/{chunk-KN4WSESY.js → chunk-AM2AXVFS.js} +5 -5
  27. package/dist/cli-bundle/chunks/{chunk-F33VC5EX.js → chunk-ANKG2JKL.js} +2 -2
  28. package/dist/cli-bundle/chunks/{chunk-ODN53S6H.js → chunk-AVGOVJGV.js} +10 -13
  29. package/dist/cli-bundle/chunks/chunk-AVGOVJGV.js.map +1 -0
  30. package/dist/cli-bundle/chunks/{chunk-PQDH3S54.js → chunk-BACSNVWE.js} +5 -5
  31. package/dist/cli-bundle/chunks/{chunk-L3LYL3ID.js → chunk-BIRVSIM2.js} +12 -12
  32. package/dist/cli-bundle/chunks/{chunk-3TXWDGPU.js → chunk-C72IQIBT.js} +224 -10
  33. package/dist/cli-bundle/chunks/chunk-C72IQIBT.js.map +7 -0
  34. package/dist/cli-bundle/chunks/{chunk-5WO2VKFA.js → chunk-CAXUGAAF.js} +8 -8
  35. package/dist/cli-bundle/chunks/{chunk-7NQIY7Z6.js → chunk-D5D7VKIC.js} +3 -3
  36. package/dist/cli-bundle/chunks/{chunk-KP4KIUQT.js → chunk-E7LOIIFP.js} +3 -3
  37. package/dist/cli-bundle/chunks/{chunk-SM3RMWGO.js → chunk-EFRHTZO4.js} +8 -8
  38. package/dist/cli-bundle/chunks/{chunk-OTY2YEH5.js → chunk-ENCVPOID.js} +12 -12
  39. package/dist/cli-bundle/chunks/{chunk-2YPVCD7T.js → chunk-EQ6N6IDR.js} +8 -8
  40. package/dist/cli-bundle/chunks/{chunk-BKQMJXWY.js → chunk-F2REA7VW.js} +4 -6
  41. package/dist/cli-bundle/chunks/{chunk-BKQMJXWY.js.map → chunk-F2REA7VW.js.map} +1 -1
  42. package/dist/cli-bundle/chunks/{chunk-SDLEYY6A.js → chunk-FHUI7AXS.js} +6 -8
  43. package/dist/cli-bundle/chunks/{chunk-SDLEYY6A.js.map → chunk-FHUI7AXS.js.map} +1 -1
  44. package/dist/cli-bundle/chunks/{chunk-OVSSE2JP.js → chunk-FJNJEWU4.js} +8 -8
  45. package/dist/cli-bundle/chunks/{chunk-QF4OPBAG.js → chunk-FKH7K6YP.js} +9 -9
  46. package/dist/cli-bundle/chunks/{chunk-KCGMABHM.js → chunk-GPOSGWCN.js} +2 -2
  47. package/dist/cli-bundle/chunks/{chunk-MSH23UWO.js → chunk-H37YPWLM.js} +4 -4
  48. package/dist/cli-bundle/chunks/{chunk-F33AQIB4.js → chunk-I26E6XA7.js} +17 -7
  49. package/dist/cli-bundle/chunks/chunk-I26E6XA7.js.map +1 -0
  50. package/dist/cli-bundle/chunks/{chunk-URJEZOLB.js → chunk-I3UILOUU.js} +2 -2
  51. package/dist/cli-bundle/chunks/{chunk-KS2U7BZ3.js → chunk-I4FGL3K2.js} +4 -4
  52. package/dist/cli-bundle/chunks/{chunk-HP35AVFS.js → chunk-JEGFLKSI.js} +2 -2
  53. package/dist/cli-bundle/chunks/{chunk-AXBUHLW7.js → chunk-JN3BT7UY.js} +9 -9
  54. package/dist/cli-bundle/chunks/{chunk-ALSRBNYB.js → chunk-JVMAOD54.js} +5 -5
  55. package/dist/cli-bundle/chunks/{chunk-4WYBLB6J.js → chunk-KDX6VC3P.js} +3 -3
  56. package/dist/cli-bundle/chunks/{chunk-UEXNNF3K.js → chunk-KTVXLI54.js} +7 -7
  57. package/dist/cli-bundle/chunks/{chunk-2HMD3JM2.js → chunk-LF2VNLEZ.js} +9 -12
  58. package/dist/cli-bundle/chunks/chunk-LF2VNLEZ.js.map +7 -0
  59. package/dist/cli-bundle/chunks/{chunk-XNGMIVQY.js → chunk-LU2HE272.js} +3 -3
  60. package/dist/cli-bundle/chunks/{chunk-3E3MDBTB.js → chunk-LU54Z4QI.js} +5 -5
  61. package/dist/cli-bundle/chunks/{chunk-TBLBEOEX.js → chunk-MNXJ6YDO.js} +9 -9
  62. package/dist/cli-bundle/chunks/{chunk-M7UBTVFT.js → chunk-NHRZSYAA.js} +3 -3
  63. package/dist/cli-bundle/chunks/{chunk-HOA3GMB6.js → chunk-NJRZIJ4N.js} +4 -4
  64. package/dist/cli-bundle/chunks/{chunk-XLSQ3QLT.js → chunk-NUGAWYEN.js} +2 -2
  65. package/dist/cli-bundle/chunks/{chunk-NUKHZZNM.js → chunk-O4L7Z6LB.js} +3 -3
  66. package/dist/cli-bundle/chunks/{chunk-5NVJA7IW.js → chunk-OPYA2HIU.js} +7 -7
  67. package/dist/cli-bundle/chunks/{chunk-7WXGR44E.js → chunk-OT6XAMO5.js} +16 -6
  68. package/dist/cli-bundle/chunks/chunk-OT6XAMO5.js.map +7 -0
  69. package/dist/cli-bundle/chunks/{chunk-NDSMKB2I.js → chunk-P2NVFE4L.js} +3 -3
  70. package/dist/cli-bundle/chunks/{chunk-BFJPMUF5.js → chunk-PUSOAQCR.js} +5 -5
  71. package/dist/cli-bundle/chunks/{chunk-XZS4MV37.js → chunk-PW7C262O.js} +2 -2
  72. package/dist/cli-bundle/chunks/{chunk-J4DKAGTM.js → chunk-RE2JQJZJ.js} +3 -3
  73. package/dist/cli-bundle/chunks/{chunk-YEFOCDIK.js → chunk-RKCJ2JMA.js} +7 -7
  74. package/dist/cli-bundle/chunks/{chunk-QWNUDGFQ.js → chunk-RLVI7KDW.js} +8 -8
  75. package/dist/cli-bundle/chunks/{chunk-KBKJVXUS.js → chunk-RMTI5R76.js} +5 -5
  76. package/dist/cli-bundle/chunks/{chunk-QFVASU44.js → chunk-SAUXUI6U.js} +2 -2
  77. package/dist/cli-bundle/chunks/{chunk-RISLL7XH.js → chunk-SD6H3RLA.js} +4 -4
  78. package/dist/cli-bundle/chunks/{chunk-VXBUXLVD.js → chunk-T7B5VAKD.js} +5 -5
  79. package/dist/cli-bundle/chunks/{chunk-JS47EKLP.js → chunk-T7NWFVOA.js} +7 -7
  80. package/dist/cli-bundle/chunks/{chunk-TXKENAQP.js → chunk-TLD3UYGY.js} +3 -3
  81. package/dist/cli-bundle/chunks/{chunk-2BYKYPWY.js → chunk-U3Z4OCZC.js} +2 -2
  82. package/dist/cli-bundle/chunks/{chunk-FGRJZVXD.js → chunk-VDVVOLR6.js} +3 -3
  83. package/dist/cli-bundle/chunks/{chunk-K62SNVVE.js → chunk-WCWIDJII.js} +2 -2
  84. package/dist/cli-bundle/chunks/{chunk-EPWT7BEA.js → chunk-WQZCEEQN.js} +8 -8
  85. package/dist/cli-bundle/chunks/{chunk-UMMJAJB2.js → chunk-XEOO6K5J.js} +9 -9
  86. package/dist/cli-bundle/chunks/{chunk-R4XIE7NQ.js → chunk-YI6W2DBN.js} +6 -6
  87. package/dist/cli-bundle/chunks/{chunk-N4SQZ7L3.js → chunk-YSANBZAE.js} +2 -2
  88. package/dist/cli-bundle/chunks/{chunk-ETZZU5QF.js → chunk-YX5LAKFJ.js} +2 -2
  89. package/dist/cli-bundle/chunks/{chunk-Z55JACL2.js → chunk-ZPXDD6RQ.js} +6 -6
  90. package/dist/cli-bundle/chunks/{claim-RNEBQCOO.js → claim-RV6WYUF7.js} +10 -10
  91. package/dist/cli-bundle/chunks/{claim-NHBIIBOW.js → claim-UXFGCF3P.js} +10 -10
  92. package/dist/cli-bundle/chunks/close-JTTGW7TS.js +13 -0
  93. package/dist/cli-bundle/chunks/{close-ZMXL2WDS.js → close-O4JK2JKD.js} +8 -8
  94. package/dist/cli-bundle/chunks/{close-many-CDPQGQUB.js → close-many-EQO4TPIE.js} +17 -18
  95. package/dist/cli-bundle/chunks/{close-many-CDPQGQUB.js.map → close-many-EQO4TPIE.js.map} +1 -1
  96. package/dist/cli-bundle/chunks/{close-many-IQV5C2SI.js → close-many-SRDBV3SI.js} +15 -16
  97. package/dist/cli-bundle/chunks/{close-many-IQV5C2SI.js.map → close-many-SRDBV3SI.js.map} +1 -1
  98. package/dist/cli-bundle/chunks/{comments-J5Q4IJPH.js → comments-OMB7YE27.js} +10 -10
  99. package/dist/cli-bundle/chunks/{comments-EFVBHWPT.js → comments-TTZUIB2O.js} +10 -10
  100. package/dist/cli-bundle/chunks/{config-72253M2O.js → config-5VPR42A6.js} +8 -8
  101. package/dist/cli-bundle/chunks/{config-VFYA6BMI.js → config-NNLXVGVC.js} +8 -8
  102. package/dist/cli-bundle/chunks/{context-WMSI2D65.js → context-4N7GYTVQ.js} +16 -18
  103. package/dist/cli-bundle/chunks/{context-WMSI2D65.js.map → context-4N7GYTVQ.js.map} +1 -1
  104. package/dist/cli-bundle/chunks/{context-AVLO4IFH.js → context-4QK6GRXO.js} +14 -16
  105. package/dist/cli-bundle/chunks/{context-AVLO4IFH.js.map → context-4QK6GRXO.js.map} +1 -1
  106. package/dist/cli-bundle/chunks/{contracts-D4BN3VSQ.js → contracts-AOBNEBVT.js} +4 -4
  107. package/dist/cli-bundle/chunks/{contracts-RGPOBLPL.js → contracts-DXCWXOSP.js} +4 -4
  108. package/dist/cli-bundle/chunks/{copy-WXE3OOLZ.js → copy-5NM3SVJA.js} +7 -7
  109. package/dist/cli-bundle/chunks/{copy-H6TXHK7S.js → copy-XSYEQTLA.js} +7 -7
  110. package/dist/cli-bundle/chunks/{create-PUAIJEZ7.js → create-FCCAATQV.js} +13 -13
  111. package/dist/cli-bundle/chunks/create-JAPLFDGJ.js +27 -0
  112. package/dist/cli-bundle/chunks/{delete-WBME6WG5.js → delete-5JFP6OG7.js} +7 -7
  113. package/dist/cli-bundle/chunks/{delete-PKR2JHLH.js → delete-PQXJQXQ7.js} +7 -7
  114. package/dist/cli-bundle/chunks/{deps-KWHQRO75.js → deps-S5322EOQ.js} +7 -7
  115. package/dist/cli-bundle/chunks/{deps-4BQEDV4L.js → deps-XXKBOQUA.js} +7 -7
  116. package/dist/cli-bundle/chunks/{docs-364GT3ZR.js → docs-C7CCVWAJ.js} +9 -9
  117. package/dist/cli-bundle/chunks/{docs-SCNBUGSV.js → docs-DZRPAW5S.js} +9 -9
  118. package/dist/cli-bundle/chunks/{extension-KK2UPXJD.js → extension-CSHP6FZX.js} +5 -5
  119. package/dist/cli-bundle/chunks/{extension-CRE7JM47.js → extension-XNNVUVAY.js} +5 -5
  120. package/dist/cli-bundle/chunks/{files-66EHM5ZR.js → files-OBWYYPKM.js} +9 -9
  121. package/dist/cli-bundle/chunks/{files-3GESQAWL.js → files-UPCNKEIZ.js} +9 -9
  122. package/dist/cli-bundle/chunks/{gc-D5IWOKQH.js → gc-FA2ONELT.js} +3 -3
  123. package/dist/cli-bundle/chunks/{gc-MOQDND5J.js → gc-KXK6KBRN.js} +3 -3
  124. package/dist/cli-bundle/chunks/{get-WXSLXV3K.js → get-FLHYTOBA.js} +11 -11
  125. package/dist/cli-bundle/chunks/{get-7J2ZCBV5.js → get-PNTSONGB.js} +11 -11
  126. package/dist/cli-bundle/chunks/{health-B6AEM7BV.js → health-CS5RNTJX.js} +13 -13
  127. package/dist/cli-bundle/chunks/{health-YMZGOMVX.js → health-KCRVYIYY.js} +13 -13
  128. package/dist/cli-bundle/chunks/history-6624XISO.js +20 -0
  129. package/dist/cli-bundle/chunks/{history-TJTO5GCR.js → history-COQTPBEU.js} +10 -10
  130. package/dist/cli-bundle/chunks/{history-compact-CKNN6UKW.js → history-compact-66PSRYL3.js} +11 -11
  131. package/dist/cli-bundle/chunks/{history-compact-N2Q7IR3T.js → history-compact-PVS2A3FS.js} +11 -11
  132. package/dist/cli-bundle/chunks/{history-redact-JUXUOH54.js → history-redact-DCXAWGTF.js} +11 -11
  133. package/dist/cli-bundle/chunks/history-redact-ZRQTI7NB.js +19 -0
  134. package/dist/cli-bundle/chunks/{history-repair-CCCPBNTF.js → history-repair-SEQDFTGW.js} +11 -11
  135. package/dist/cli-bundle/chunks/{history-repair-TDBBSRVK.js → history-repair-TA3NRIFO.js} +11 -11
  136. package/dist/cli-bundle/chunks/{init-6ZPKD3YN.js → init-IQJE3EKJ.js} +9 -9
  137. package/dist/cli-bundle/chunks/init-ZVE2HMKK.js +17 -0
  138. package/dist/cli-bundle/chunks/{learnings-U7U2FNIO.js → learnings-RJPGH2ME.js} +10 -10
  139. package/dist/cli-bundle/chunks/{learnings-WYNTYQ5T.js → learnings-XC6EMW5E.js} +10 -10
  140. package/dist/cli-bundle/chunks/{list-JGP7ODML.js → list-NJV6WBT4.js} +10 -11
  141. package/dist/cli-bundle/chunks/list-OO5P472O.js +19 -0
  142. package/dist/cli-bundle/chunks/{notes-P25YVTEG.js → notes-2KWHADK3.js} +10 -10
  143. package/dist/cli-bundle/chunks/{notes-QIF6A7XS.js → notes-FNCDMZW2.js} +10 -10
  144. package/dist/cli-bundle/chunks/{plan-SSBJFWXA.js → plan-CYK2P5PD.js} +13 -13
  145. package/dist/cli-bundle/chunks/{plan-RACB5PI6.js → plan-MQO5JTSV.js} +13 -13
  146. package/dist/cli-bundle/chunks/{register-list-query-5IXDPUZ6.js → register-list-query-6RA24SIZ.js} +18 -18
  147. package/dist/cli-bundle/chunks/{register-list-query-GQAEIG4K.js → register-list-query-IO3RR5K6.js} +18 -18
  148. package/dist/cli-bundle/chunks/{register-mutation-YZCUILGO.js → register-mutation-KVFUXCAZ.js} +32 -32
  149. package/dist/cli-bundle/chunks/{register-mutation-FAS4YG63.js → register-mutation-VV2SC2KL.js} +32 -32
  150. package/dist/cli-bundle/chunks/{register-operations-S2BOLUPF.js → register-operations-DFNVRSJ5.js} +30 -30
  151. package/dist/cli-bundle/chunks/{register-operations-IBYWNJN5.js → register-operations-TAUUTRJ4.js} +30 -30
  152. package/dist/cli-bundle/chunks/{register-setup-JRZ4UMWZ.js → register-setup-GAQZZRUA.js} +15 -15
  153. package/dist/cli-bundle/chunks/{register-setup-ABA2JPWO.js → register-setup-X2R5CFDV.js} +15 -15
  154. package/dist/cli-bundle/chunks/{restore-K72ZNPEP.js → restore-E3GZKRRK.js} +11 -11
  155. package/dist/cli-bundle/chunks/restore-F4ALFV4D.js +17 -0
  156. package/dist/cli-bundle/chunks/{schema-UL4B2JX5.js → schema-3CPFLDAY.js} +8 -8
  157. package/dist/cli-bundle/chunks/{schema-3VKRDBLC.js → schema-7EHBPNXM.js} +8 -8
  158. package/dist/cli-bundle/chunks/{search-EQDHSE4G.js → search-2T3NCCUR.js} +12 -13
  159. package/dist/cli-bundle/chunks/{search-EQDHSE4G.js.map → search-2T3NCCUR.js.map} +1 -1
  160. package/dist/cli-bundle/chunks/{search-632WJ7GO.js → search-OBZVYJJ2.js} +10 -11
  161. package/dist/cli-bundle/chunks/{search-632WJ7GO.js.map → search-OBZVYJJ2.js.map} +1 -1
  162. package/dist/cli-bundle/chunks/{stats-O4UTMJMC.js → stats-6LVK4JER.js} +7 -7
  163. package/dist/cli-bundle/chunks/{stats-WLJ3XBF5.js → stats-ULGQACF7.js} +7 -7
  164. package/dist/cli-bundle/chunks/{telemetry-EUVHFSQU.js → telemetry-6G27FLCP.js} +4 -4
  165. package/dist/cli-bundle/chunks/{telemetry-NRVWX25E.js → telemetry-HHKRTMZA.js} +4 -4
  166. package/dist/cli-bundle/chunks/{test-GXUBQNUC.js → test-2PP4YBV6.js} +14 -14
  167. package/dist/cli-bundle/chunks/test-PPOLRIBA.js +32 -0
  168. package/dist/cli-bundle/chunks/{test-all-XM6OKI3L.js → test-all-6Z272JRI.js} +14 -14
  169. package/dist/cli-bundle/chunks/{test-all-UTFXC7S2.js → test-all-NETGVNM6.js} +14 -14
  170. package/dist/cli-bundle/chunks/{test-runs-IK6E2HNX.js → test-runs-CRPQVMMG.js} +5 -5
  171. package/dist/cli-bundle/chunks/{test-runs-7FHCPEA3.js → test-runs-M24WA6TI.js} +5 -5
  172. package/dist/cli-bundle/chunks/update-MCPCPMHV.js +25 -0
  173. package/dist/cli-bundle/chunks/update-O7TBOUVQ.js +21 -0
  174. package/dist/cli-bundle/chunks/{update-many-5KD33MKY.js → update-many-JSRF5EH5.js} +22 -23
  175. package/dist/cli-bundle/chunks/{update-many-5KD33MKY.js.map → update-many-JSRF5EH5.js.map} +1 -1
  176. package/dist/cli-bundle/chunks/{update-many-N3YTM7K4.js → update-many-Y3HOL7WA.js} +24 -25
  177. package/dist/cli-bundle/chunks/{update-many-N3YTM7K4.js.map → update-many-Y3HOL7WA.js.map} +1 -1
  178. package/dist/cli-bundle/chunks/{upgrade-5SRFLUNW.js → upgrade-5RTQVKKE.js} +5 -5
  179. package/dist/cli-bundle/chunks/{upgrade-FFXGO43H.js → upgrade-ECB6GH3M.js} +5 -5
  180. package/dist/cli-bundle/chunks/{validate-T3LPWSZG.js → validate-J6Q444SD.js} +16 -16
  181. package/dist/cli-bundle/chunks/{validate-CRWXZILW.js → validate-MCNMAXVA.js} +16 -16
  182. package/dist/cli-bundle/main.js +43 -36
  183. package/dist/cli-bundle/main.js.map +2 -2
  184. package/dist/core/extensions/extension-types.d.ts +59 -1
  185. package/dist/core/extensions/extension-types.js +2 -2
  186. package/dist/core/extensions/extension-types.js.map +1 -1
  187. package/dist/core/extensions/flag-value-types.d.ts +29 -0
  188. package/dist/core/extensions/flag-value-types.js +78 -0
  189. package/dist/core/extensions/flag-value-types.js.map +1 -0
  190. package/dist/core/extensions/item-field-types.d.ts +22 -0
  191. package/dist/core/extensions/item-field-types.js +43 -0
  192. package/dist/core/extensions/item-field-types.js.map +1 -0
  193. package/dist/core/extensions/item-fields.js +4 -11
  194. package/dist/core/extensions/item-fields.js.map +1 -1
  195. package/dist/core/extensions/loader.d.ts +14 -1
  196. package/dist/core/extensions/loader.js +141 -10
  197. package/dist/core/extensions/loader.js.map +1 -1
  198. package/dist/core/packages/manifest.d.ts +1 -1
  199. package/dist/core/packages/manifest.js +12 -2
  200. package/dist/core/packages/manifest.js.map +1 -1
  201. package/dist/mcp/server.js +57 -31
  202. package/dist/mcp/server.js.map +1 -1
  203. package/dist/sdk/index.d.ts +7 -2
  204. package/dist/sdk/index.js +3 -3
  205. package/dist/sdk/index.js.map +1 -1
  206. package/dist/sdk/testing.d.ts +55 -1
  207. package/dist/sdk/testing.js +92 -2
  208. package/dist/sdk/testing.js.map +1 -1
  209. package/docs/EXTENSIONS.md +7 -3
  210. package/docs/SDK.md +98 -0
  211. package/package.json +1 -1
  212. package/dist/cli-bundle/chunks/activity-A3QKFSSF.js +0 -16
  213. package/dist/cli-bundle/chunks/chunk-2HMD3JM2.js.map +0 -7
  214. package/dist/cli-bundle/chunks/chunk-3TXWDGPU.js.map +0 -7
  215. package/dist/cli-bundle/chunks/chunk-7WXGR44E.js.map +0 -7
  216. package/dist/cli-bundle/chunks/chunk-EAOG77HM.js +0 -56
  217. package/dist/cli-bundle/chunks/chunk-EAOG77HM.js.map +0 -7
  218. package/dist/cli-bundle/chunks/chunk-F33AQIB4.js.map +0 -1
  219. package/dist/cli-bundle/chunks/chunk-ODN53S6H.js.map +0 -1
  220. package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js +0 -53
  221. package/dist/cli-bundle/chunks/chunk-XSLQSXAH.js.map +0 -1
  222. package/dist/cli-bundle/chunks/chunk-YJAKN2N2.js.map +0 -1
  223. package/dist/cli-bundle/chunks/close-UNTFXVM3.js +0 -13
  224. package/dist/cli-bundle/chunks/create-EZWAMUKR.js +0 -27
  225. package/dist/cli-bundle/chunks/history-ZERISU2L.js +0 -20
  226. package/dist/cli-bundle/chunks/history-redact-GODBYT5A.js +0 -19
  227. package/dist/cli-bundle/chunks/init-CBZHXBR3.js +0 -17
  228. package/dist/cli-bundle/chunks/list-7MTPPZHC.js +0 -20
  229. package/dist/cli-bundle/chunks/restore-3JRX27QW.js +0 -17
  230. package/dist/cli-bundle/chunks/test-XN7RJL5Z.js +0 -32
  231. package/dist/cli-bundle/chunks/update-LFBSEW3N.js +0 -21
  232. package/dist/cli-bundle/chunks/update-U4B4OMHZ.js +0 -25
  233. /package/dist/cli-bundle/chunks/{activity-A3QKFSSF.js.map → activity-HF3VJYKH.js.map} +0 -0
  234. /package/dist/cli-bundle/chunks/{activity-Q7XMIZIH.js.map → activity-RUJATACW.js.map} +0 -0
  235. /package/dist/cli-bundle/chunks/{append-3RFOU7P5.js.map → append-CWQZBUWV.js.map} +0 -0
  236. /package/dist/cli-bundle/chunks/{append-OM74OJVT.js.map → append-E7AJ5RTR.js.map} +0 -0
  237. /package/dist/cli-bundle/chunks/{chunk-NLVCMVC7.js.map → chunk-23WNCJBA.js.map} +0 -0
  238. /package/dist/cli-bundle/chunks/{chunk-KVXIQDJG.js.map → chunk-3RHE76G6.js.map} +0 -0
  239. /package/dist/cli-bundle/chunks/{chunk-Z2HXAFFH.js.map → chunk-42IULX44.js.map} +0 -0
  240. /package/dist/cli-bundle/chunks/{chunk-FO2TYSQZ.js.map → chunk-44JP4PYY.js.map} +0 -0
  241. /package/dist/cli-bundle/chunks/{chunk-DV27WDA7.js.map → chunk-4LRVXVJK.js.map} +0 -0
  242. /package/dist/cli-bundle/chunks/{chunk-CBJXWXI5.js.map → chunk-4TJWRPIH.js.map} +0 -0
  243. /package/dist/cli-bundle/chunks/{chunk-XEKZCBCS.js.map → chunk-5ATRWEZO.js.map} +0 -0
  244. /package/dist/cli-bundle/chunks/{chunk-AEMKH5WQ.js.map → chunk-5MMLINZB.js.map} +0 -0
  245. /package/dist/cli-bundle/chunks/{chunk-NGEEXR2R.js.map → chunk-6IGTNFE3.js.map} +0 -0
  246. /package/dist/cli-bundle/chunks/{chunk-4TI3532H.js.map → chunk-7CR4GAYN.js.map} +0 -0
  247. /package/dist/cli-bundle/chunks/{chunk-D7WK2PKB.js.map → chunk-7YTWXGE3.js.map} +0 -0
  248. /package/dist/cli-bundle/chunks/{chunk-QQPZYP73.js.map → chunk-A5342JVL.js.map} +0 -0
  249. /package/dist/cli-bundle/chunks/{chunk-KN4WSESY.js.map → chunk-AM2AXVFS.js.map} +0 -0
  250. /package/dist/cli-bundle/chunks/{chunk-F33VC5EX.js.map → chunk-ANKG2JKL.js.map} +0 -0
  251. /package/dist/cli-bundle/chunks/{chunk-PQDH3S54.js.map → chunk-BACSNVWE.js.map} +0 -0
  252. /package/dist/cli-bundle/chunks/{chunk-L3LYL3ID.js.map → chunk-BIRVSIM2.js.map} +0 -0
  253. /package/dist/cli-bundle/chunks/{chunk-5WO2VKFA.js.map → chunk-CAXUGAAF.js.map} +0 -0
  254. /package/dist/cli-bundle/chunks/{chunk-7NQIY7Z6.js.map → chunk-D5D7VKIC.js.map} +0 -0
  255. /package/dist/cli-bundle/chunks/{chunk-KP4KIUQT.js.map → chunk-E7LOIIFP.js.map} +0 -0
  256. /package/dist/cli-bundle/chunks/{chunk-SM3RMWGO.js.map → chunk-EFRHTZO4.js.map} +0 -0
  257. /package/dist/cli-bundle/chunks/{chunk-OTY2YEH5.js.map → chunk-ENCVPOID.js.map} +0 -0
  258. /package/dist/cli-bundle/chunks/{chunk-2YPVCD7T.js.map → chunk-EQ6N6IDR.js.map} +0 -0
  259. /package/dist/cli-bundle/chunks/{chunk-OVSSE2JP.js.map → chunk-FJNJEWU4.js.map} +0 -0
  260. /package/dist/cli-bundle/chunks/{chunk-QF4OPBAG.js.map → chunk-FKH7K6YP.js.map} +0 -0
  261. /package/dist/cli-bundle/chunks/{chunk-KCGMABHM.js.map → chunk-GPOSGWCN.js.map} +0 -0
  262. /package/dist/cli-bundle/chunks/{chunk-MSH23UWO.js.map → chunk-H37YPWLM.js.map} +0 -0
  263. /package/dist/cli-bundle/chunks/{chunk-URJEZOLB.js.map → chunk-I3UILOUU.js.map} +0 -0
  264. /package/dist/cli-bundle/chunks/{chunk-KS2U7BZ3.js.map → chunk-I4FGL3K2.js.map} +0 -0
  265. /package/dist/cli-bundle/chunks/{chunk-HP35AVFS.js.map → chunk-JEGFLKSI.js.map} +0 -0
  266. /package/dist/cli-bundle/chunks/{chunk-AXBUHLW7.js.map → chunk-JN3BT7UY.js.map} +0 -0
  267. /package/dist/cli-bundle/chunks/{chunk-ALSRBNYB.js.map → chunk-JVMAOD54.js.map} +0 -0
  268. /package/dist/cli-bundle/chunks/{chunk-4WYBLB6J.js.map → chunk-KDX6VC3P.js.map} +0 -0
  269. /package/dist/cli-bundle/chunks/{chunk-UEXNNF3K.js.map → chunk-KTVXLI54.js.map} +0 -0
  270. /package/dist/cli-bundle/chunks/{chunk-XNGMIVQY.js.map → chunk-LU2HE272.js.map} +0 -0
  271. /package/dist/cli-bundle/chunks/{chunk-3E3MDBTB.js.map → chunk-LU54Z4QI.js.map} +0 -0
  272. /package/dist/cli-bundle/chunks/{chunk-TBLBEOEX.js.map → chunk-MNXJ6YDO.js.map} +0 -0
  273. /package/dist/cli-bundle/chunks/{chunk-M7UBTVFT.js.map → chunk-NHRZSYAA.js.map} +0 -0
  274. /package/dist/cli-bundle/chunks/{chunk-HOA3GMB6.js.map → chunk-NJRZIJ4N.js.map} +0 -0
  275. /package/dist/cli-bundle/chunks/{chunk-XLSQ3QLT.js.map → chunk-NUGAWYEN.js.map} +0 -0
  276. /package/dist/cli-bundle/chunks/{chunk-NUKHZZNM.js.map → chunk-O4L7Z6LB.js.map} +0 -0
  277. /package/dist/cli-bundle/chunks/{chunk-5NVJA7IW.js.map → chunk-OPYA2HIU.js.map} +0 -0
  278. /package/dist/cli-bundle/chunks/{chunk-NDSMKB2I.js.map → chunk-P2NVFE4L.js.map} +0 -0
  279. /package/dist/cli-bundle/chunks/{chunk-BFJPMUF5.js.map → chunk-PUSOAQCR.js.map} +0 -0
  280. /package/dist/cli-bundle/chunks/{chunk-XZS4MV37.js.map → chunk-PW7C262O.js.map} +0 -0
  281. /package/dist/cli-bundle/chunks/{chunk-J4DKAGTM.js.map → chunk-RE2JQJZJ.js.map} +0 -0
  282. /package/dist/cli-bundle/chunks/{chunk-YEFOCDIK.js.map → chunk-RKCJ2JMA.js.map} +0 -0
  283. /package/dist/cli-bundle/chunks/{chunk-QWNUDGFQ.js.map → chunk-RLVI7KDW.js.map} +0 -0
  284. /package/dist/cli-bundle/chunks/{chunk-KBKJVXUS.js.map → chunk-RMTI5R76.js.map} +0 -0
  285. /package/dist/cli-bundle/chunks/{chunk-QFVASU44.js.map → chunk-SAUXUI6U.js.map} +0 -0
  286. /package/dist/cli-bundle/chunks/{chunk-RISLL7XH.js.map → chunk-SD6H3RLA.js.map} +0 -0
  287. /package/dist/cli-bundle/chunks/{chunk-VXBUXLVD.js.map → chunk-T7B5VAKD.js.map} +0 -0
  288. /package/dist/cli-bundle/chunks/{chunk-JS47EKLP.js.map → chunk-T7NWFVOA.js.map} +0 -0
  289. /package/dist/cli-bundle/chunks/{chunk-TXKENAQP.js.map → chunk-TLD3UYGY.js.map} +0 -0
  290. /package/dist/cli-bundle/chunks/{chunk-2BYKYPWY.js.map → chunk-U3Z4OCZC.js.map} +0 -0
  291. /package/dist/cli-bundle/chunks/{chunk-FGRJZVXD.js.map → chunk-VDVVOLR6.js.map} +0 -0
  292. /package/dist/cli-bundle/chunks/{chunk-K62SNVVE.js.map → chunk-WCWIDJII.js.map} +0 -0
  293. /package/dist/cli-bundle/chunks/{chunk-EPWT7BEA.js.map → chunk-WQZCEEQN.js.map} +0 -0
  294. /package/dist/cli-bundle/chunks/{chunk-UMMJAJB2.js.map → chunk-XEOO6K5J.js.map} +0 -0
  295. /package/dist/cli-bundle/chunks/{chunk-R4XIE7NQ.js.map → chunk-YI6W2DBN.js.map} +0 -0
  296. /package/dist/cli-bundle/chunks/{chunk-N4SQZ7L3.js.map → chunk-YSANBZAE.js.map} +0 -0
  297. /package/dist/cli-bundle/chunks/{chunk-ETZZU5QF.js.map → chunk-YX5LAKFJ.js.map} +0 -0
  298. /package/dist/cli-bundle/chunks/{chunk-Z55JACL2.js.map → chunk-ZPXDD6RQ.js.map} +0 -0
  299. /package/dist/cli-bundle/chunks/{claim-RNEBQCOO.js.map → claim-RV6WYUF7.js.map} +0 -0
  300. /package/dist/cli-bundle/chunks/{claim-NHBIIBOW.js.map → claim-UXFGCF3P.js.map} +0 -0
  301. /package/dist/cli-bundle/chunks/{close-UNTFXVM3.js.map → close-JTTGW7TS.js.map} +0 -0
  302. /package/dist/cli-bundle/chunks/{close-ZMXL2WDS.js.map → close-O4JK2JKD.js.map} +0 -0
  303. /package/dist/cli-bundle/chunks/{comments-J5Q4IJPH.js.map → comments-OMB7YE27.js.map} +0 -0
  304. /package/dist/cli-bundle/chunks/{comments-EFVBHWPT.js.map → comments-TTZUIB2O.js.map} +0 -0
  305. /package/dist/cli-bundle/chunks/{config-72253M2O.js.map → config-5VPR42A6.js.map} +0 -0
  306. /package/dist/cli-bundle/chunks/{config-VFYA6BMI.js.map → config-NNLXVGVC.js.map} +0 -0
  307. /package/dist/cli-bundle/chunks/{contracts-D4BN3VSQ.js.map → contracts-AOBNEBVT.js.map} +0 -0
  308. /package/dist/cli-bundle/chunks/{contracts-RGPOBLPL.js.map → contracts-DXCWXOSP.js.map} +0 -0
  309. /package/dist/cli-bundle/chunks/{copy-WXE3OOLZ.js.map → copy-5NM3SVJA.js.map} +0 -0
  310. /package/dist/cli-bundle/chunks/{copy-H6TXHK7S.js.map → copy-XSYEQTLA.js.map} +0 -0
  311. /package/dist/cli-bundle/chunks/{create-PUAIJEZ7.js.map → create-FCCAATQV.js.map} +0 -0
  312. /package/dist/cli-bundle/chunks/{create-EZWAMUKR.js.map → create-JAPLFDGJ.js.map} +0 -0
  313. /package/dist/cli-bundle/chunks/{delete-WBME6WG5.js.map → delete-5JFP6OG7.js.map} +0 -0
  314. /package/dist/cli-bundle/chunks/{delete-PKR2JHLH.js.map → delete-PQXJQXQ7.js.map} +0 -0
  315. /package/dist/cli-bundle/chunks/{deps-KWHQRO75.js.map → deps-S5322EOQ.js.map} +0 -0
  316. /package/dist/cli-bundle/chunks/{deps-4BQEDV4L.js.map → deps-XXKBOQUA.js.map} +0 -0
  317. /package/dist/cli-bundle/chunks/{docs-364GT3ZR.js.map → docs-C7CCVWAJ.js.map} +0 -0
  318. /package/dist/cli-bundle/chunks/{docs-SCNBUGSV.js.map → docs-DZRPAW5S.js.map} +0 -0
  319. /package/dist/cli-bundle/chunks/{extension-KK2UPXJD.js.map → extension-CSHP6FZX.js.map} +0 -0
  320. /package/dist/cli-bundle/chunks/{extension-CRE7JM47.js.map → extension-XNNVUVAY.js.map} +0 -0
  321. /package/dist/cli-bundle/chunks/{files-66EHM5ZR.js.map → files-OBWYYPKM.js.map} +0 -0
  322. /package/dist/cli-bundle/chunks/{files-3GESQAWL.js.map → files-UPCNKEIZ.js.map} +0 -0
  323. /package/dist/cli-bundle/chunks/{gc-D5IWOKQH.js.map → gc-FA2ONELT.js.map} +0 -0
  324. /package/dist/cli-bundle/chunks/{gc-MOQDND5J.js.map → gc-KXK6KBRN.js.map} +0 -0
  325. /package/dist/cli-bundle/chunks/{get-WXSLXV3K.js.map → get-FLHYTOBA.js.map} +0 -0
  326. /package/dist/cli-bundle/chunks/{get-7J2ZCBV5.js.map → get-PNTSONGB.js.map} +0 -0
  327. /package/dist/cli-bundle/chunks/{health-B6AEM7BV.js.map → health-CS5RNTJX.js.map} +0 -0
  328. /package/dist/cli-bundle/chunks/{health-YMZGOMVX.js.map → health-KCRVYIYY.js.map} +0 -0
  329. /package/dist/cli-bundle/chunks/{history-ZERISU2L.js.map → history-6624XISO.js.map} +0 -0
  330. /package/dist/cli-bundle/chunks/{history-TJTO5GCR.js.map → history-COQTPBEU.js.map} +0 -0
  331. /package/dist/cli-bundle/chunks/{history-compact-CKNN6UKW.js.map → history-compact-66PSRYL3.js.map} +0 -0
  332. /package/dist/cli-bundle/chunks/{history-compact-N2Q7IR3T.js.map → history-compact-PVS2A3FS.js.map} +0 -0
  333. /package/dist/cli-bundle/chunks/{history-redact-JUXUOH54.js.map → history-redact-DCXAWGTF.js.map} +0 -0
  334. /package/dist/cli-bundle/chunks/{history-redact-GODBYT5A.js.map → history-redact-ZRQTI7NB.js.map} +0 -0
  335. /package/dist/cli-bundle/chunks/{history-repair-CCCPBNTF.js.map → history-repair-SEQDFTGW.js.map} +0 -0
  336. /package/dist/cli-bundle/chunks/{history-repair-TDBBSRVK.js.map → history-repair-TA3NRIFO.js.map} +0 -0
  337. /package/dist/cli-bundle/chunks/{init-6ZPKD3YN.js.map → init-IQJE3EKJ.js.map} +0 -0
  338. /package/dist/cli-bundle/chunks/{init-CBZHXBR3.js.map → init-ZVE2HMKK.js.map} +0 -0
  339. /package/dist/cli-bundle/chunks/{learnings-U7U2FNIO.js.map → learnings-RJPGH2ME.js.map} +0 -0
  340. /package/dist/cli-bundle/chunks/{learnings-WYNTYQ5T.js.map → learnings-XC6EMW5E.js.map} +0 -0
  341. /package/dist/cli-bundle/chunks/{list-JGP7ODML.js.map → list-NJV6WBT4.js.map} +0 -0
  342. /package/dist/cli-bundle/chunks/{list-7MTPPZHC.js.map → list-OO5P472O.js.map} +0 -0
  343. /package/dist/cli-bundle/chunks/{notes-P25YVTEG.js.map → notes-2KWHADK3.js.map} +0 -0
  344. /package/dist/cli-bundle/chunks/{notes-QIF6A7XS.js.map → notes-FNCDMZW2.js.map} +0 -0
  345. /package/dist/cli-bundle/chunks/{plan-SSBJFWXA.js.map → plan-CYK2P5PD.js.map} +0 -0
  346. /package/dist/cli-bundle/chunks/{plan-RACB5PI6.js.map → plan-MQO5JTSV.js.map} +0 -0
  347. /package/dist/cli-bundle/chunks/{register-list-query-5IXDPUZ6.js.map → register-list-query-6RA24SIZ.js.map} +0 -0
  348. /package/dist/cli-bundle/chunks/{register-list-query-GQAEIG4K.js.map → register-list-query-IO3RR5K6.js.map} +0 -0
  349. /package/dist/cli-bundle/chunks/{register-mutation-YZCUILGO.js.map → register-mutation-KVFUXCAZ.js.map} +0 -0
  350. /package/dist/cli-bundle/chunks/{register-mutation-FAS4YG63.js.map → register-mutation-VV2SC2KL.js.map} +0 -0
  351. /package/dist/cli-bundle/chunks/{register-operations-S2BOLUPF.js.map → register-operations-DFNVRSJ5.js.map} +0 -0
  352. /package/dist/cli-bundle/chunks/{register-operations-IBYWNJN5.js.map → register-operations-TAUUTRJ4.js.map} +0 -0
  353. /package/dist/cli-bundle/chunks/{register-setup-JRZ4UMWZ.js.map → register-setup-GAQZZRUA.js.map} +0 -0
  354. /package/dist/cli-bundle/chunks/{register-setup-ABA2JPWO.js.map → register-setup-X2R5CFDV.js.map} +0 -0
  355. /package/dist/cli-bundle/chunks/{restore-K72ZNPEP.js.map → restore-E3GZKRRK.js.map} +0 -0
  356. /package/dist/cli-bundle/chunks/{restore-3JRX27QW.js.map → restore-F4ALFV4D.js.map} +0 -0
  357. /package/dist/cli-bundle/chunks/{schema-UL4B2JX5.js.map → schema-3CPFLDAY.js.map} +0 -0
  358. /package/dist/cli-bundle/chunks/{schema-3VKRDBLC.js.map → schema-7EHBPNXM.js.map} +0 -0
  359. /package/dist/cli-bundle/chunks/{stats-O4UTMJMC.js.map → stats-6LVK4JER.js.map} +0 -0
  360. /package/dist/cli-bundle/chunks/{stats-WLJ3XBF5.js.map → stats-ULGQACF7.js.map} +0 -0
  361. /package/dist/cli-bundle/chunks/{telemetry-EUVHFSQU.js.map → telemetry-6G27FLCP.js.map} +0 -0
  362. /package/dist/cli-bundle/chunks/{telemetry-NRVWX25E.js.map → telemetry-HHKRTMZA.js.map} +0 -0
  363. /package/dist/cli-bundle/chunks/{test-GXUBQNUC.js.map → test-2PP4YBV6.js.map} +0 -0
  364. /package/dist/cli-bundle/chunks/{test-XN7RJL5Z.js.map → test-PPOLRIBA.js.map} +0 -0
  365. /package/dist/cli-bundle/chunks/{test-all-XM6OKI3L.js.map → test-all-6Z272JRI.js.map} +0 -0
  366. /package/dist/cli-bundle/chunks/{test-all-UTFXC7S2.js.map → test-all-NETGVNM6.js.map} +0 -0
  367. /package/dist/cli-bundle/chunks/{test-runs-IK6E2HNX.js.map → test-runs-CRPQVMMG.js.map} +0 -0
  368. /package/dist/cli-bundle/chunks/{test-runs-7FHCPEA3.js.map → test-runs-M24WA6TI.js.map} +0 -0
  369. /package/dist/cli-bundle/chunks/{update-U4B4OMHZ.js.map → update-MCPCPMHV.js.map} +0 -0
  370. /package/dist/cli-bundle/chunks/{update-LFBSEW3N.js.map → update-O7TBOUVQ.js.map} +0 -0
  371. /package/dist/cli-bundle/chunks/{upgrade-5SRFLUNW.js.map → upgrade-5RTQVKKE.js.map} +0 -0
  372. /package/dist/cli-bundle/chunks/{upgrade-FFXGO43H.js.map → upgrade-ECB6GH3M.js.map} +0 -0
  373. /package/dist/cli-bundle/chunks/{validate-T3LPWSZG.js.map → validate-J6Q444SD.js.map} +0 -0
  374. /package/dist/cli-bundle/chunks/{validate-CRWXZILW.js.map → validate-MCNMAXVA.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- export declare const PM_PACKAGE_RESOURCE_KINDS: readonly ["extensions", "docs", "examples"];
1
+ export declare const PM_PACKAGE_RESOURCE_KINDS: readonly ["extensions", "docs", "examples", "assets", "prompts"];
2
2
  export type PmPackageResourceKind = (typeof PM_PACKAGE_RESOURCE_KINDS)[number];
3
3
  export type PmPackageResourceMap = Partial<Record<PmPackageResourceKind, string[]>>;
4
4
  export interface PmPackageCatalogLinkMap {
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="84dfbdeb-902c-58a1-a6c4-9411f5c2293e")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1b499df3-5c93-5f2f-9b74-4183a67d993a")}catch(e){}}();
3
3
  import fs from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import { pathExists } from "../fs/fs-utils.js";
@@ -10,6 +10,8 @@ export const PM_PACKAGE_RESOURCE_KINDS = [
10
10
  "extensions",
11
11
  "docs",
12
12
  "examples",
13
+ "assets",
14
+ "prompts",
13
15
  ];
14
16
  export const PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS = Object.freeze({
15
17
  extensions: Object.freeze([
@@ -26,6 +28,14 @@ export const PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS = Object.freeze({
26
28
  "examples",
27
29
  "docs/examples",
28
30
  ]),
31
+ assets: Object.freeze([
32
+ "assets",
33
+ ".agents/pm/assets",
34
+ ]),
35
+ prompts: Object.freeze([
36
+ "prompts",
37
+ ".agents/pm/prompts",
38
+ ]),
29
39
  });
30
40
  function isKnownPackageResourceKind(value) {
31
41
  return PM_PACKAGE_RESOURCE_KINDS.includes(value);
@@ -216,4 +226,4 @@ export async function collectPackageExtensionDirectories(packageRoot) {
216
226
  return [...discovered].sort((left, right) => left.localeCompare(right));
217
227
  }
218
228
  //# sourceMappingURL=manifest.js.map
219
- //# debugId=84dfbdeb-902c-58a1-a6c4-9411f5c2293e
229
+ //# debugId=1b499df3-5c93-5f2f-9b74-4183a67d993a
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sources":["core/packages/manifest.ts"],"sourceRoot":"/","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathExists } from \"../fs/fs-utils.js\";\nimport { isPathWithinDirectory } from \"../fs/path-utils.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\n\nexport const PM_PACKAGE_RESOURCE_KINDS = [\n \"extensions\",\n \"docs\",\n \"examples\",\n] as const;\n\nexport type PmPackageResourceKind = (typeof PM_PACKAGE_RESOURCE_KINDS)[number];\n\nexport type PmPackageResourceMap = Partial<Record<PmPackageResourceKind, string[]>>;\n\nexport interface PmPackageCatalogLinkMap {\n docs?: string;\n npm?: string;\n repository?: string;\n report?: string;\n}\n\nexport interface PmPackageCatalogMediaMap {\n image?: string;\n video?: string;\n}\n\nexport interface PmPackageCatalogMetadata {\n display_name?: string;\n category?: string;\n summary?: string;\n links?: PmPackageCatalogLinkMap;\n media?: PmPackageCatalogMediaMap;\n tags?: string[];\n}\n\nexport interface PmPackageManifest {\n source: \"pm\" | \"convention\";\n package_json_path?: string;\n package_name?: string;\n package_version?: string;\n package_private?: boolean;\n package_description?: string;\n package_keywords?: string[];\n package_homepage?: string;\n package_repository_url?: string;\n package_bugs_url?: string;\n aliases?: string[];\n resources: PmPackageResourceMap;\n catalog?: PmPackageCatalogMetadata;\n}\n\nexport const PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS: Readonly<Record<PmPackageResourceKind, readonly string[]>> =\n Object.freeze({\n extensions: Object.freeze([\n \".agents/pm/extensions\",\n \"extensions\",\n \".custom/pm-extensions\",\n \".custom/pm-extension\",\n ]),\n docs: Object.freeze([\n \"docs\",\n \"documentation\",\n ]),\n examples: Object.freeze([\n \"examples\",\n \"docs/examples\",\n ]),\n });\n\nfunction isKnownPackageResourceKind(value: string): value is PmPackageResourceKind {\n return (PM_PACKAGE_RESOURCE_KINDS as readonly string[]).includes(value);\n}\n\nfunction normalizePackageResourceEntries(kind: PmPackageResourceKind, raw: unknown): string[] {\n if (raw === undefined || raw === null) {\n return [];\n }\n const entries = Array.isArray(raw) ? raw : [raw];\n const normalized: string[] = [];\n for (const entry of entries) {\n if (typeof entry !== \"string\" || entry.trim().length === 0) {\n throw new PmCliError(`Package manifest field pm.${kind} must contain string paths.`, EXIT_CODE.USAGE);\n }\n normalized.push(entry.trim());\n }\n return [...new Set(normalized)].sort((left, right) => left.localeCompare(right));\n}\n\nfunction normalizePackageResourceMap(raw: unknown): PmPackageResourceMap {\n if (raw === undefined || raw === null) {\n return {};\n }\n if (typeof raw !== \"object\" || Array.isArray(raw)) {\n throw new PmCliError(\"Package manifest field pm must be an object.\", EXIT_CODE.USAGE);\n }\n const resources: PmPackageResourceMap = {};\n const candidate = raw as Record<string, unknown>;\n for (const [key, value] of Object.entries(candidate)) {\n if (!isKnownPackageResourceKind(key)) {\n continue;\n }\n const entries = normalizePackageResourceEntries(key, value);\n if (entries.length > 0) {\n resources[key] = entries;\n }\n }\n return resources;\n}\n\nfunction readStringField(source: Record<string, unknown>, key: string): string | undefined {\n const value = source[key];\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nfunction normalizeStringArray(raw: unknown): string[] | undefined {\n if (!Array.isArray(raw)) {\n return undefined;\n }\n const values = raw\n .map((value) => typeof value === \"string\" ? value.trim() : \"\")\n .filter((value) => value.length > 0);\n return values.length > 0 ? [...new Set(values)].sort((left, right) => left.localeCompare(right)) : undefined;\n}\n\nfunction readUrlLikeField(raw: unknown): string | undefined {\n if (typeof raw === \"string\" && raw.trim().length > 0) {\n return raw.trim();\n }\n if (typeof raw === \"object\" && raw !== null && !Array.isArray(raw)) {\n const value = (raw as Record<string, unknown>).url;\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n }\n return undefined;\n}\n\nfunction normalizeCatalogLinks(raw: unknown): PmPackageCatalogLinkMap | undefined {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return undefined;\n }\n const source = raw as Record<string, unknown>;\n const links: PmPackageCatalogLinkMap = {\n docs: readStringField(source, \"docs\"),\n npm: readStringField(source, \"npm\"),\n repository: readStringField(source, \"repository\"),\n report: readStringField(source, \"report\"),\n };\n return Object.values(links).some((value) => typeof value === \"string\") ? links : undefined;\n}\n\nfunction normalizeCatalogMedia(raw: unknown): PmPackageCatalogMediaMap | undefined {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return undefined;\n }\n const source = raw as Record<string, unknown>;\n const media: PmPackageCatalogMediaMap = {\n image: readStringField(source, \"image\"),\n video: readStringField(source, \"video\"),\n };\n return Object.values(media).some((value) => typeof value === \"string\") ? media : undefined;\n}\n\nfunction normalizePackageCatalogMetadata(raw: unknown): PmPackageCatalogMetadata | undefined {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return undefined;\n }\n const source = raw as Record<string, unknown>;\n const catalog: PmPackageCatalogMetadata = {\n display_name: readStringField(source, \"display_name\") ?? readStringField(source, \"displayName\"),\n category: readStringField(source, \"category\"),\n summary: readStringField(source, \"summary\"),\n links: normalizeCatalogLinks(source.links),\n media: normalizeCatalogMedia(source.media),\n tags: normalizeStringArray(source.tags),\n };\n return Object.values(catalog).some((value) => value !== undefined) ? catalog : undefined;\n}\n\nexport async function readPmPackageManifest(packageRoot: string): Promise<PmPackageManifest> {\n const packageJsonPath = path.join(packageRoot, \"package.json\");\n if (!(await pathExists(packageJsonPath))) {\n return {\n source: \"convention\",\n resources: {},\n };\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(await fs.readFile(packageJsonPath, \"utf8\")) as unknown;\n } catch (error: unknown) {\n throw new PmCliError(\n `Failed to parse package manifest at \"${packageJsonPath}\": ${String(error)}`,\n EXIT_CODE.USAGE,\n );\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new PmCliError(`Package manifest at \"${packageJsonPath}\" must be a JSON object.`, EXIT_CODE.USAGE);\n }\n\n const packageJson = parsed as Record<string, unknown>;\n const pmManifest = packageJson.pm;\n const hasPmManifest = pmManifest !== undefined && pmManifest !== null;\n const pmManifestRecord = typeof pmManifest === \"object\" && pmManifest !== null && !Array.isArray(pmManifest)\n ? pmManifest as Record<string, unknown>\n : {};\n return {\n source: hasPmManifest ? \"pm\" : \"convention\",\n package_json_path: packageJsonPath,\n package_name: typeof packageJson.name === \"string\" ? packageJson.name : undefined,\n package_version: typeof packageJson.version === \"string\" ? packageJson.version : undefined,\n package_private: packageJson.private === true,\n package_description: typeof packageJson.description === \"string\" ? packageJson.description : undefined,\n package_keywords: normalizeStringArray(packageJson.keywords),\n package_homepage: typeof packageJson.homepage === \"string\" ? packageJson.homepage : undefined,\n package_repository_url: readUrlLikeField(packageJson.repository),\n package_bugs_url: readUrlLikeField(packageJson.bugs),\n aliases: normalizeStringArray(pmManifestRecord.aliases),\n resources: normalizePackageResourceMap(pmManifest),\n catalog: normalizePackageCatalogMetadata(pmManifestRecord.catalog),\n };\n}\n\nasync function listExtensionManifestDirectories(parentDirectory: string): Promise<string[]> {\n if (!(await pathExists(parentDirectory))) {\n return [];\n }\n const entries = await fs.readdir(parentDirectory, { withFileTypes: true });\n const candidates: string[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n const directory = path.join(parentDirectory, entry.name);\n if (await pathExists(path.join(directory, \"manifest.json\"))) {\n candidates.push(directory);\n }\n }\n return candidates.sort((left, right) => left.localeCompare(right));\n}\n\nexport async function collectPackageExtensionDirectories(packageRoot: string): Promise<string[]> {\n if (await pathExists(path.join(packageRoot, \"manifest.json\"))) {\n return [packageRoot];\n }\n\n const manifest = await readPmPackageManifest(packageRoot);\n const manifestEntries = manifest.resources.extensions ?? [];\n const discovered = new Set<string>();\n\n for (const entry of manifestEntries) {\n if (entry.includes(\"*\") || entry.startsWith(\"!\")) {\n throw new PmCliError(\n `Package extension entry \"${entry}\" uses a glob/exclusion pattern. pm package installs currently require concrete extension paths or directories.`,\n EXIT_CODE.USAGE,\n );\n }\n const absolute = path.resolve(packageRoot, entry);\n if (!isPathWithinDirectory(packageRoot, absolute)) {\n throw new PmCliError(`Package extension entry \"${entry}\" resolves outside package root.`, EXIT_CODE.USAGE);\n }\n if (await pathExists(path.join(absolute, \"manifest.json\"))) {\n discovered.add(absolute);\n continue;\n }\n for (const child of await listExtensionManifestDirectories(absolute)) {\n discovered.add(child);\n }\n }\n\n if (manifestEntries.length === 0) {\n for (const root of PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS.extensions) {\n for (const child of await listExtensionManifestDirectories(path.join(packageRoot, root))) {\n discovered.add(child);\n }\n }\n }\n\n return [...discovered].sort((left, right) => left.localeCompare(right));\n}\n"],"names":[],"mappings":"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","debugId":"84dfbdeb-902c-58a1-a6c4-9411f5c2293e"}
1
+ {"version":3,"file":"manifest.js","sources":["core/packages/manifest.ts"],"sourceRoot":"/","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathExists } from \"../fs/fs-utils.js\";\nimport { isPathWithinDirectory } from \"../fs/path-utils.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\n\nexport const PM_PACKAGE_RESOURCE_KINDS = [\n \"extensions\",\n \"docs\",\n \"examples\",\n \"assets\",\n \"prompts\",\n] as const;\n\nexport type PmPackageResourceKind = (typeof PM_PACKAGE_RESOURCE_KINDS)[number];\n\nexport type PmPackageResourceMap = Partial<Record<PmPackageResourceKind, string[]>>;\n\nexport interface PmPackageCatalogLinkMap {\n docs?: string;\n npm?: string;\n repository?: string;\n report?: string;\n}\n\nexport interface PmPackageCatalogMediaMap {\n image?: string;\n video?: string;\n}\n\nexport interface PmPackageCatalogMetadata {\n display_name?: string;\n category?: string;\n summary?: string;\n links?: PmPackageCatalogLinkMap;\n media?: PmPackageCatalogMediaMap;\n tags?: string[];\n}\n\nexport interface PmPackageManifest {\n source: \"pm\" | \"convention\";\n package_json_path?: string;\n package_name?: string;\n package_version?: string;\n package_private?: boolean;\n package_description?: string;\n package_keywords?: string[];\n package_homepage?: string;\n package_repository_url?: string;\n package_bugs_url?: string;\n aliases?: string[];\n resources: PmPackageResourceMap;\n catalog?: PmPackageCatalogMetadata;\n}\n\nexport const PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS: Readonly<Record<PmPackageResourceKind, readonly string[]>> =\n Object.freeze({\n extensions: Object.freeze([\n \".agents/pm/extensions\",\n \"extensions\",\n \".custom/pm-extensions\",\n \".custom/pm-extension\",\n ]),\n docs: Object.freeze([\n \"docs\",\n \"documentation\",\n ]),\n examples: Object.freeze([\n \"examples\",\n \"docs/examples\",\n ]),\n assets: Object.freeze([\n \"assets\",\n \".agents/pm/assets\",\n ]),\n prompts: Object.freeze([\n \"prompts\",\n \".agents/pm/prompts\",\n ]),\n });\n\nfunction isKnownPackageResourceKind(value: string): value is PmPackageResourceKind {\n return (PM_PACKAGE_RESOURCE_KINDS as readonly string[]).includes(value);\n}\n\nfunction normalizePackageResourceEntries(kind: PmPackageResourceKind, raw: unknown): string[] {\n if (raw === undefined || raw === null) {\n return [];\n }\n const entries = Array.isArray(raw) ? raw : [raw];\n const normalized: string[] = [];\n for (const entry of entries) {\n if (typeof entry !== \"string\" || entry.trim().length === 0) {\n throw new PmCliError(`Package manifest field pm.${kind} must contain string paths.`, EXIT_CODE.USAGE);\n }\n normalized.push(entry.trim());\n }\n return [...new Set(normalized)].sort((left, right) => left.localeCompare(right));\n}\n\nfunction normalizePackageResourceMap(raw: unknown): PmPackageResourceMap {\n if (raw === undefined || raw === null) {\n return {};\n }\n if (typeof raw !== \"object\" || Array.isArray(raw)) {\n throw new PmCliError(\"Package manifest field pm must be an object.\", EXIT_CODE.USAGE);\n }\n const resources: PmPackageResourceMap = {};\n const candidate = raw as Record<string, unknown>;\n for (const [key, value] of Object.entries(candidate)) {\n if (!isKnownPackageResourceKind(key)) {\n continue;\n }\n const entries = normalizePackageResourceEntries(key, value);\n if (entries.length > 0) {\n resources[key] = entries;\n }\n }\n return resources;\n}\n\nfunction readStringField(source: Record<string, unknown>, key: string): string | undefined {\n const value = source[key];\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nfunction normalizeStringArray(raw: unknown): string[] | undefined {\n if (!Array.isArray(raw)) {\n return undefined;\n }\n const values = raw\n .map((value) => typeof value === \"string\" ? value.trim() : \"\")\n .filter((value) => value.length > 0);\n return values.length > 0 ? [...new Set(values)].sort((left, right) => left.localeCompare(right)) : undefined;\n}\n\nfunction readUrlLikeField(raw: unknown): string | undefined {\n if (typeof raw === \"string\" && raw.trim().length > 0) {\n return raw.trim();\n }\n if (typeof raw === \"object\" && raw !== null && !Array.isArray(raw)) {\n const value = (raw as Record<string, unknown>).url;\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n }\n return undefined;\n}\n\nfunction normalizeCatalogLinks(raw: unknown): PmPackageCatalogLinkMap | undefined {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return undefined;\n }\n const source = raw as Record<string, unknown>;\n const links: PmPackageCatalogLinkMap = {\n docs: readStringField(source, \"docs\"),\n npm: readStringField(source, \"npm\"),\n repository: readStringField(source, \"repository\"),\n report: readStringField(source, \"report\"),\n };\n return Object.values(links).some((value) => typeof value === \"string\") ? links : undefined;\n}\n\nfunction normalizeCatalogMedia(raw: unknown): PmPackageCatalogMediaMap | undefined {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return undefined;\n }\n const source = raw as Record<string, unknown>;\n const media: PmPackageCatalogMediaMap = {\n image: readStringField(source, \"image\"),\n video: readStringField(source, \"video\"),\n };\n return Object.values(media).some((value) => typeof value === \"string\") ? media : undefined;\n}\n\nfunction normalizePackageCatalogMetadata(raw: unknown): PmPackageCatalogMetadata | undefined {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return undefined;\n }\n const source = raw as Record<string, unknown>;\n const catalog: PmPackageCatalogMetadata = {\n display_name: readStringField(source, \"display_name\") ?? readStringField(source, \"displayName\"),\n category: readStringField(source, \"category\"),\n summary: readStringField(source, \"summary\"),\n links: normalizeCatalogLinks(source.links),\n media: normalizeCatalogMedia(source.media),\n tags: normalizeStringArray(source.tags),\n };\n return Object.values(catalog).some((value) => value !== undefined) ? catalog : undefined;\n}\n\nexport async function readPmPackageManifest(packageRoot: string): Promise<PmPackageManifest> {\n const packageJsonPath = path.join(packageRoot, \"package.json\");\n if (!(await pathExists(packageJsonPath))) {\n return {\n source: \"convention\",\n resources: {},\n };\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(await fs.readFile(packageJsonPath, \"utf8\")) as unknown;\n } catch (error: unknown) {\n throw new PmCliError(\n `Failed to parse package manifest at \"${packageJsonPath}\": ${String(error)}`,\n EXIT_CODE.USAGE,\n );\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new PmCliError(`Package manifest at \"${packageJsonPath}\" must be a JSON object.`, EXIT_CODE.USAGE);\n }\n\n const packageJson = parsed as Record<string, unknown>;\n const pmManifest = packageJson.pm;\n const hasPmManifest = pmManifest !== undefined && pmManifest !== null;\n const pmManifestRecord = typeof pmManifest === \"object\" && pmManifest !== null && !Array.isArray(pmManifest)\n ? pmManifest as Record<string, unknown>\n : {};\n return {\n source: hasPmManifest ? \"pm\" : \"convention\",\n package_json_path: packageJsonPath,\n package_name: typeof packageJson.name === \"string\" ? packageJson.name : undefined,\n package_version: typeof packageJson.version === \"string\" ? packageJson.version : undefined,\n package_private: packageJson.private === true,\n package_description: typeof packageJson.description === \"string\" ? packageJson.description : undefined,\n package_keywords: normalizeStringArray(packageJson.keywords),\n package_homepage: typeof packageJson.homepage === \"string\" ? packageJson.homepage : undefined,\n package_repository_url: readUrlLikeField(packageJson.repository),\n package_bugs_url: readUrlLikeField(packageJson.bugs),\n aliases: normalizeStringArray(pmManifestRecord.aliases),\n resources: normalizePackageResourceMap(pmManifest),\n catalog: normalizePackageCatalogMetadata(pmManifestRecord.catalog),\n };\n}\n\nasync function listExtensionManifestDirectories(parentDirectory: string): Promise<string[]> {\n if (!(await pathExists(parentDirectory))) {\n return [];\n }\n const entries = await fs.readdir(parentDirectory, { withFileTypes: true });\n const candidates: string[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n const directory = path.join(parentDirectory, entry.name);\n if (await pathExists(path.join(directory, \"manifest.json\"))) {\n candidates.push(directory);\n }\n }\n return candidates.sort((left, right) => left.localeCompare(right));\n}\n\nexport async function collectPackageExtensionDirectories(packageRoot: string): Promise<string[]> {\n if (await pathExists(path.join(packageRoot, \"manifest.json\"))) {\n return [packageRoot];\n }\n\n const manifest = await readPmPackageManifest(packageRoot);\n const manifestEntries = manifest.resources.extensions ?? [];\n const discovered = new Set<string>();\n\n for (const entry of manifestEntries) {\n if (entry.includes(\"*\") || entry.startsWith(\"!\")) {\n throw new PmCliError(\n `Package extension entry \"${entry}\" uses a glob/exclusion pattern. pm package installs currently require concrete extension paths or directories.`,\n EXIT_CODE.USAGE,\n );\n }\n const absolute = path.resolve(packageRoot, entry);\n if (!isPathWithinDirectory(packageRoot, absolute)) {\n throw new PmCliError(`Package extension entry \"${entry}\" resolves outside package root.`, EXIT_CODE.USAGE);\n }\n if (await pathExists(path.join(absolute, \"manifest.json\"))) {\n discovered.add(absolute);\n continue;\n }\n for (const child of await listExtensionManifestDirectories(absolute)) {\n discovered.add(child);\n }\n }\n\n if (manifestEntries.length === 0) {\n for (const root of PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS.extensions) {\n for (const child of await listExtensionManifestDirectories(path.join(packageRoot, root))) {\n discovered.add(child);\n }\n }\n }\n\n return [...discovered].sort((left, right) => left.localeCompare(right));\n}\n"],"names":[],"mappings":"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","debugId":"1b499df3-5c93-5f2f-9b74-4183a67d993a"}
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- !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]="f5cf4684-71f3-5373-886c-b57359653e23")}catch(e){}}();
3
+ !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]="3919b575-b5c2-5bb1-91d7-5c736d48c59e")}catch(e){}}();
4
4
  import readline from "node:readline";
5
5
  import { fileURLToPath } from "node:url";
6
- import { activateExtensions, loadExtensions, runActiveCommandHandler, setActiveExtensionCommands, setActiveExtensionHooks, setActiveExtensionParsers, setActiveExtensionPreflight, setActiveExtensionRegistrations, setActiveExtensionRenderers, setActiveExtensionServices, } from "../core/extensions/index.js";
6
+ import { createEmptyExtensionCommandRegistry, createEmptyExtensionHookRegistry, createEmptyExtensionParserRegistry, createEmptyExtensionPreflightRegistry, createEmptyExtensionRegistrationRegistry, createEmptyExtensionRendererRegistry, createEmptyExtensionServiceRegistry, } from "../core/extensions/extension-registries.js";
7
+ import { activateExtensions, deactivateExtensions, loadExtensions, runActiveCommandHandler, setActiveExtensionCommands, setActiveExtensionHooks, setActiveExtensionParsers, setActiveExtensionPreflight, setActiveExtensionRegistrations, setActiveExtensionRenderers, setActiveExtensionServices, } from "../core/extensions/index.js";
7
8
  import { pathExists } from "../core/fs/fs-utils.js";
8
9
  import { resolvePmCliVersion } from "../core/packages/root.js";
9
10
  import { projectMutationResult } from "../core/output/mutation-projection.js";
@@ -495,36 +496,61 @@ async function runDynamicExtensionAction(action, args, options, global) {
495
496
  cwd: process.cwd(),
496
497
  noExtensions: false,
497
498
  });
498
- const activationResult = await activateExtensions({
499
- ...loadResult,
500
- loaded: loadResult.loaded,
501
- });
502
- const normalizedAction = normalizeActionName(action);
503
- const definition = activationResult.registrations.commands.find((entry) => normalizeActionName(entry.action) === normalizedAction);
504
- const command = definition?.command ??
505
- activationResult.commands.handlers.find((entry) => normalizeActionName(entry.command) === normalizedAction)?.command;
506
- if (!command) {
507
- throw new PmCliError(`Unsupported native pm action: ${action}`, 64);
499
+ // This MCP server reloads + reactivates extensions per native-action request,
500
+ // so each request is a fresh activation cycle. Run the extension teardown
501
+ // lifecycle in a finally to release any resources opened during activate(),
502
+ // matching the long-running-server reload contract (pm-k1e4).
503
+ let activationResult;
504
+ try {
505
+ activationResult = await activateExtensions({
506
+ ...loadResult,
507
+ loaded: loadResult.loaded,
508
+ });
509
+ const normalizedAction = normalizeActionName(action);
510
+ const definition = activationResult.registrations.commands.find((entry) => normalizeActionName(entry.action) === normalizedAction);
511
+ const command = definition?.command ??
512
+ activationResult.commands.handlers.find((entry) => normalizeActionName(entry.command) === normalizedAction)?.command;
513
+ if (!command) {
514
+ throw new PmCliError(`Unsupported native pm action: ${action}`, 64);
515
+ }
516
+ setActiveExtensionHooks(activationResult.hooks);
517
+ setActiveExtensionCommands(activationResult.commands);
518
+ setActiveExtensionParsers(activationResult.parsers);
519
+ setActiveExtensionPreflight(activationResult.preflight);
520
+ setActiveExtensionServices(activationResult.services);
521
+ setActiveExtensionRenderers(activationResult.renderers);
522
+ setActiveExtensionRegistrations(activationResult.registrations);
523
+ const handlerResult = await runActiveCommandHandler({
524
+ command: normalizeCommandPath(command),
525
+ args: readStringArray(options.args ?? args.args),
526
+ options: extensionOptionsFromArgs(args, options),
527
+ global,
528
+ pm_root: pmRoot,
529
+ });
530
+ if (!handlerResult.handled) {
531
+ const suffix = handlerResult.warnings.length > 0 ? ` (${handlerResult.warnings.join(", ")})` : "";
532
+ throw new PmCliError(`Unsupported native pm action: ${action}${suffix}`, 64);
533
+ }
534
+ return handlerResult.result;
508
535
  }
509
- setActiveExtensionHooks(activationResult.hooks);
510
- setActiveExtensionCommands(activationResult.commands);
511
- setActiveExtensionParsers(activationResult.parsers);
512
- setActiveExtensionPreflight(activationResult.preflight);
513
- setActiveExtensionServices(activationResult.services);
514
- setActiveExtensionRenderers(activationResult.renderers);
515
- setActiveExtensionRegistrations(activationResult.registrations);
516
- const handlerResult = await runActiveCommandHandler({
517
- command: normalizeCommandPath(command),
518
- args: readStringArray(options.args ?? args.args),
519
- options: extensionOptionsFromArgs(args, options),
520
- global,
521
- pm_root: pmRoot,
522
- });
523
- if (!handlerResult.handled) {
524
- const suffix = handlerResult.warnings.length > 0 ? ` (${handlerResult.warnings.join(", ")})` : "";
525
- throw new PmCliError(`Unsupported native pm action: ${action}${suffix}`, 64);
536
+ finally {
537
+ // Reset the process-global active registries FIRST so a torn-down extension's
538
+ // overrides/hooks cannot leak into a later request in this long-running server
539
+ // (e.g. a subsequent pm_list/pm_create) even if teardown below misbehaves.
540
+ setActiveExtensionHooks(createEmptyExtensionHookRegistry());
541
+ setActiveExtensionCommands(createEmptyExtensionCommandRegistry());
542
+ setActiveExtensionParsers(createEmptyExtensionParserRegistry());
543
+ setActiveExtensionPreflight(createEmptyExtensionPreflightRegistry());
544
+ setActiveExtensionServices(createEmptyExtensionServiceRegistry());
545
+ setActiveExtensionRenderers(createEmptyExtensionRendererRegistry());
546
+ setActiveExtensionRegistrations(createEmptyExtensionRegistrationRegistry());
547
+ // Best-effort teardown of extensions that activated successfully. Skip
548
+ // entirely if activation itself never produced a result (nothing was set
549
+ // up), and guard so an unexpected throw cannot escape the finally.
550
+ if (activationResult) {
551
+ await deactivateExtensions(loadResult, activationResult).catch(() => undefined);
552
+ }
526
553
  }
527
- return handlerResult.result;
528
554
  }
529
555
  async function withCwd(cwd, run) {
530
556
  if (typeof cwd !== "string" || cwd.trim().length === 0) {
@@ -1093,4 +1119,4 @@ if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
1093
1119
  startMcpServer();
1094
1120
  }
1095
1121
  //# sourceMappingURL=server.js.map
1096
- //# debugId=f5cf4684-71f3-5373-886c-b57359653e23
1122
+ //# debugId=3919b575-b5c2-5bb1-91d7-5c736d48c59e