@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 +1 @@
1
- {"version":3,"file":"index.js","sources":["sdk/index.ts"],"sourceRoot":"/","sourcesContent":["import {\n EXTENSION_CAPABILITY_CONTRACT,\n EXTENSION_CAPABILITY_CONTRACT_VERSION,\n EXTENSION_CAPABILITY_LEGACY_ALIASES,\n KNOWN_EXTENSION_CAPABILITIES,\n KNOWN_EXTENSION_POLICY_MODES,\n KNOWN_EXTENSION_POLICY_SURFACES,\n KNOWN_EXTENSION_SANDBOX_PROFILES,\n KNOWN_EXTENSION_TRUST_MODES,\n type ExtensionApi,\n type ExtensionManifest,\n} from \"../core/extensions/loader.js\";\nexport {\n PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS,\n PM_PACKAGE_RESOURCE_KINDS,\n collectPackageExtensionDirectories,\n readPmPackageManifest,\n type PmPackageCatalogLinkMap,\n type PmPackageCatalogMediaMap,\n type PmPackageCatalogMetadata,\n type PmPackageManifest,\n type PmPackageResourceKind,\n type PmPackageResourceMap,\n} from \"../core/packages/manifest.js\";\nexport * from \"./cli-contracts.js\";\nexport * from \"./runtime.js\";\nexport {\n assertPackageManifest,\n assertRegisteredCommandContract,\n assertRegisteredExporter,\n assertRegisteredHook,\n assertRegisteredImporter,\n assertRegisteredItemField,\n assertRegisteredItemType,\n assertRegisteredSearchProvider,\n assertRegisteredVectorStoreAdapter,\n activateExtensionForTest,\n type ActivateExtensionForTestOptions,\n type PackageManifestExpectation,\n type PackageManifestResourceExpectation,\n type RegisteredCommandContractAssertion,\n type RegisteredCommandContractExpectation,\n type RegisteredExporterExpectation,\n type RegisteredHookExpectation,\n type RegisteredHookKind,\n type RegisteredImporterExpectation,\n type RegisteredItemFieldAssertion,\n type RegisteredItemFieldExpectation,\n type RegisteredItemTypeAssertion,\n type RegisteredItemTypeExpectation,\n type RegisteredSearchProviderExpectation,\n type RegisteredVectorStoreAdapterExpectation,\n} from \"./testing.js\";\n\n/**\n * Canonical extension capability names accepted by pm.\n *\n * Extension manifests should declare one or more of these values in\n * `capabilities`.\n */\nexport const EXTENSION_CAPABILITIES = KNOWN_EXTENSION_CAPABILITIES;\nexport type ExtensionCapability = (typeof EXTENSION_CAPABILITIES)[number];\n\n/**\n * Canonical extension governance policy modes and registration surfaces.\n */\nexport const EXTENSION_POLICY_MODES = KNOWN_EXTENSION_POLICY_MODES;\nexport const EXTENSION_POLICY_SURFACES = KNOWN_EXTENSION_POLICY_SURFACES;\nexport const EXTENSION_TRUST_MODES = KNOWN_EXTENSION_TRUST_MODES;\nexport const EXTENSION_SANDBOX_PROFILES = KNOWN_EXTENSION_SANDBOX_PROFILES;\nexport type ExtensionPolicyMode = (typeof EXTENSION_POLICY_MODES)[number];\nexport type ExtensionPolicySurface = (typeof EXTENSION_POLICY_SURFACES)[number];\nexport type ExtensionTrustMode = (typeof EXTENSION_TRUST_MODES)[number];\nexport type ExtensionSandboxProfile = (typeof EXTENSION_SANDBOX_PROFILES)[number];\n\n/**\n * Versioned capability contract metadata emitted by runtime diagnostics.\n */\nexport { EXTENSION_CAPABILITY_CONTRACT, EXTENSION_CAPABILITY_CONTRACT_VERSION, EXTENSION_CAPABILITY_LEGACY_ALIASES };\n\nexport interface ExtensionModule {\n /**\n * Optional in-module metadata mirror.\n *\n * The authoritative manifest remains on-disk `manifest.json`; this field is\n * useful when authors want colocated metadata for tooling/tests.\n */\n manifest?: ExtensionManifest;\n activate(api: ExtensionApi): void | Promise<void>;\n}\n\n/**\n * Typed identity helper for extension module exports.\n *\n * Use as:\n * `export default defineExtension({ activate(api) { ... } })`\n */\nexport function defineExtension<TModule extends ExtensionModule>(module: TModule): TModule {\n return module;\n}\n\nexport type {\n AfterCommandAffectedItem,\n AfterCommandHook,\n AfterCommandHookContext,\n BeforeCommandHook,\n BeforeCommandHookContext,\n CommandDefinition,\n ExtensionCommandArgumentDefinition,\n CommandHandler,\n CommandHandlerContext,\n CommandOverride,\n CommandOverrideContext,\n ExtensionServiceName,\n Exporter,\n ExtensionActivationResult,\n ExtensionApi,\n ExtensionCommandRegistry,\n ExtensionDiagnostic,\n ExtensionDiscoveryResult,\n ExtensionHookRegistry,\n ExtensionLoadResult,\n ExtensionManifest,\n ExtensionManifestEngines,\n ExtensionGovernancePolicy,\n ExtensionPolicyOverride,\n ExtensionProvenanceMetadata,\n ExtensionRuntimePermissionDeclaration,\n ExtensionSearchMode,\n ExtensionParserRegistry,\n ExtensionPreflightRegistry,\n ExtensionRegistrationRegistry,\n ExtensionRendererRegistry,\n ExtensionServiceRegistry,\n FlagValueType,\n FlagDefinition,\n ImportExportContext,\n ImportExportRegistrationOptions,\n Importer,\n OnIndexHook,\n OnIndexHookContext,\n OnReadHook,\n OnReadHookContext,\n OnWriteHook,\n OnWriteHookContext,\n OutputRendererFormat,\n ParserOverride,\n ParserOverrideContext,\n ParserOverrideDelta,\n PreflightOverride,\n PreflightOverrideContext,\n PreflightOverrideDelta,\n PreflightRuntimeDecision,\n RegisteredExtensionExporter,\n RegisteredExtensionHook,\n RegisteredExtensionImporter,\n RegisteredExtensionSearchProvider,\n RegisteredExtensionVectorStoreAdapter,\n RendererOverride,\n RendererOverrideContext,\n SchemaFieldDefinition,\n SchemaItemTypeCommandOptionPolicyDefinition,\n SchemaItemTypeOptionDefinition,\n SchemaItemTypeDefinition,\n SchemaMigrationDefinition,\n SchemaMigrationRunContext,\n SchemaMigrationRunner,\n SearchProviderEmbedBatchContext,\n SearchProviderEmbedContext,\n SearchProviderDefinition,\n SearchProviderHit,\n SearchProviderQueryContext,\n SearchProviderQueryResult,\n ServiceOverride,\n ServiceOverrideContext,\n VectorStoreAdapterDefinition,\n VectorStoreDeleteContext,\n VectorStoreQueryContext,\n VectorStoreQueryHit,\n VectorStoreUpsertContext,\n VectorStoreUpsertPoint,\n} from \"../core/extensions/loader.js\";\n\nexport type { GlobalOptions } from \"../core/shared/command-types.js\";\nexport type { ItemDocument, ItemFrontMatter, ItemStatus, ItemType, PmSettings } from \"../types/index.js\";\n"],"names":[],"mappings":";;AAAA,OAAO,EACL,6BAA6B,EAC7B,qCAAqC,EACrC,mCAAmC,EACnC,4BAA4B,EAC5B,4BAA4B,EAC5B,+BAA+B,EAC/B,gCAAgC,EAChC,2BAA2B,GAG5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,sCAAsC,EACtC,yBAAyB,EACzB,kCAAkC,EAClC,qBAAqB,GAOtB,MAAM,8BAA8B,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,8BAA8B,EAC9B,kCAAkC,EAClC,wBAAwB,GAgBzB,MAAM,cAAc,CAAC;AAEtB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AAGnE;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AACnE,MAAM,CAAC,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AACzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AACjE,MAAM,CAAC,MAAM,0BAA0B,GAAG,gCAAgC,CAAC;AAM3E;;GAEG;AACH,OAAO,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,mCAAmC,EAAE,CAAC;AAarH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAkC,MAAe;IAC9E,OAAO,MAAM,CAAC;AAChB,CAAC","debugId":"d21b0078-6726-5b3d-ad1b-61299e524445"}
1
+ {"version":3,"file":"index.js","sources":["sdk/index.ts"],"sourceRoot":"/","sourcesContent":["import {\n EXTENSION_CAPABILITY_CONTRACT,\n EXTENSION_CAPABILITY_CONTRACT_VERSION,\n EXTENSION_CAPABILITY_LEGACY_ALIASES,\n KNOWN_EXTENSION_CAPABILITIES,\n KNOWN_EXTENSION_POLICY_MODES,\n KNOWN_EXTENSION_POLICY_SURFACES,\n KNOWN_EXTENSION_SANDBOX_PROFILES,\n KNOWN_EXTENSION_TRUST_MODES,\n type ExtensionApi,\n type ExtensionManifest,\n} from \"../core/extensions/loader.js\";\nexport {\n PM_PACKAGE_CONVENTIONAL_RESOURCE_ROOTS,\n PM_PACKAGE_RESOURCE_KINDS,\n collectPackageExtensionDirectories,\n readPmPackageManifest,\n type PmPackageCatalogLinkMap,\n type PmPackageCatalogMediaMap,\n type PmPackageCatalogMetadata,\n type PmPackageManifest,\n type PmPackageResourceKind,\n type PmPackageResourceMap,\n} from \"../core/packages/manifest.js\";\nexport * from \"./cli-contracts.js\";\nexport * from \"./runtime.js\";\nexport {\n assertPackageManifest,\n assertRegisteredCommandContract,\n assertRegisteredCommandOverride,\n assertRegisteredExporter,\n assertRegisteredHook,\n assertRegisteredImporter,\n assertRegisteredItemField,\n assertRegisteredItemType,\n assertRegisteredParserOverride,\n assertRegisteredPreflightOverride,\n assertRegisteredRendererOverride,\n assertRegisteredSearchProvider,\n assertRegisteredVectorStoreAdapter,\n activateExtensionForTest,\n type ActivateExtensionForTestOptions,\n type PackageManifestExpectation,\n type PackageManifestResourceExpectation,\n type RegisteredCommandContractAssertion,\n type RegisteredCommandContractExpectation,\n type RegisteredCommandOverrideExpectation,\n type RegisteredExporterExpectation,\n type RegisteredHookExpectation,\n type RegisteredHookKind,\n type RegisteredImporterExpectation,\n type RegisteredItemFieldAssertion,\n type RegisteredItemFieldExpectation,\n type RegisteredItemTypeAssertion,\n type RegisteredItemTypeExpectation,\n type RegisteredParserOverrideExpectation,\n type RegisteredPreflightOverrideExpectation,\n type RegisteredRendererOverrideExpectation,\n type RegisteredSearchProviderExpectation,\n type RegisteredVectorStoreAdapterExpectation,\n} from \"./testing.js\";\n\n/**\n * Canonical extension capability names accepted by pm.\n *\n * Extension manifests should declare one or more of these values in\n * `capabilities`.\n */\nexport const EXTENSION_CAPABILITIES = KNOWN_EXTENSION_CAPABILITIES;\nexport type ExtensionCapability = (typeof EXTENSION_CAPABILITIES)[number];\n\n/**\n * Canonical extension governance policy modes and registration surfaces.\n */\nexport const EXTENSION_POLICY_MODES = KNOWN_EXTENSION_POLICY_MODES;\nexport const EXTENSION_POLICY_SURFACES = KNOWN_EXTENSION_POLICY_SURFACES;\nexport const EXTENSION_TRUST_MODES = KNOWN_EXTENSION_TRUST_MODES;\nexport const EXTENSION_SANDBOX_PROFILES = KNOWN_EXTENSION_SANDBOX_PROFILES;\nexport type ExtensionPolicyMode = (typeof EXTENSION_POLICY_MODES)[number];\nexport type ExtensionPolicySurface = (typeof EXTENSION_POLICY_SURFACES)[number];\nexport type ExtensionTrustMode = (typeof EXTENSION_TRUST_MODES)[number];\nexport type ExtensionSandboxProfile = (typeof EXTENSION_SANDBOX_PROFILES)[number];\n\n/**\n * Versioned capability contract metadata emitted by runtime diagnostics.\n */\nexport { EXTENSION_CAPABILITY_CONTRACT, EXTENSION_CAPABILITY_CONTRACT_VERSION, EXTENSION_CAPABILITY_LEGACY_ALIASES };\n\nexport interface ExtensionModule {\n /**\n * Optional in-module metadata mirror.\n *\n * The authoritative manifest remains on-disk `manifest.json`; this field is\n * useful when authors want colocated metadata for tooling/tests.\n */\n manifest?: ExtensionManifest;\n activate(api: ExtensionApi): void | Promise<void>;\n /**\n * Optional teardown lifecycle hook (VS Code-style `deactivate`). Invoked by\n * the host on shutdown/reload to release resources opened during `activate`.\n */\n deactivate?(): void | Promise<void>;\n}\n\n/**\n * Typed identity helper for extension module exports.\n *\n * Use as:\n * `export default defineExtension({ activate(api) { ... } })`\n */\nexport function defineExtension<TModule extends ExtensionModule>(module: TModule): TModule {\n return module;\n}\n\nexport type {\n AfterCommandAffectedItem,\n AfterCommandHook,\n AfterCommandHookContext,\n BeforeCommandHook,\n BeforeCommandHookContext,\n CommandDefinition,\n ExtensionCommandArgumentDefinition,\n CommandHandler,\n CommandHandlerContext,\n CommandOverride,\n CommandOverrideContext,\n ExtensionServiceName,\n Exporter,\n ExtensionActivationResult,\n ExtensionApi,\n ExtensionCommandRegistry,\n ExtensionDeactivationFailure,\n ExtensionDeactivationResult,\n ExtensionDiagnostic,\n ExtensionDiscoveryResult,\n ExtensionHookRegistry,\n ExtensionSelfIdentity,\n ExtensionLoadResult,\n ExtensionManifest,\n ExtensionManifestEngines,\n ExtensionGovernancePolicy,\n ExtensionPolicyOverride,\n ExtensionProvenanceMetadata,\n ExtensionRuntimePermissionDeclaration,\n ExtensionSearchMode,\n ExtensionParserRegistry,\n ExtensionPreflightRegistry,\n ExtensionRegistrationRegistry,\n ExtensionRendererRegistry,\n ExtensionServiceRegistry,\n FlagValueType,\n FlagDefinition,\n ImportExportContext,\n ImportExportRegistrationOptions,\n Importer,\n OnIndexHook,\n OnIndexHookContext,\n OnReadHook,\n OnReadHookContext,\n OnWriteHook,\n OnWriteHookContext,\n OutputRendererFormat,\n ParserOverride,\n ParserOverrideContext,\n ParserOverrideDelta,\n PreflightOverride,\n PreflightOverrideContext,\n PreflightOverrideDelta,\n PreflightRuntimeDecision,\n RegisteredExtensionExporter,\n RegisteredExtensionHook,\n RegisteredExtensionImporter,\n RegisteredExtensionSearchProvider,\n RegisteredExtensionVectorStoreAdapter,\n RendererOverride,\n RendererOverrideContext,\n SchemaFieldDefinition,\n SchemaItemTypeCommandOptionPolicyDefinition,\n SchemaItemTypeOptionDefinition,\n SchemaItemTypeDefinition,\n SchemaMigrationDefinition,\n SchemaMigrationRunContext,\n SchemaMigrationRunner,\n SearchProviderEmbedBatchContext,\n SearchProviderEmbedContext,\n SearchProviderDefinition,\n SearchProviderHit,\n SearchProviderQueryContext,\n SearchProviderQueryResult,\n ServiceOverride,\n ServiceOverrideContext,\n VectorStoreAdapterDefinition,\n VectorStoreDeleteContext,\n VectorStoreQueryContext,\n VectorStoreQueryHit,\n VectorStoreUpsertContext,\n VectorStoreUpsertPoint,\n} from \"../core/extensions/loader.js\";\n\nexport type { GlobalOptions } from \"../core/shared/command-types.js\";\nexport type { ItemDocument, ItemFrontMatter, ItemStatus, ItemType, PmSettings } from \"../types/index.js\";\n"],"names":[],"mappings":";;AAAA,OAAO,EACL,6BAA6B,EAC7B,qCAAqC,EACrC,mCAAmC,EACnC,4BAA4B,EAC5B,4BAA4B,EAC5B,+BAA+B,EAC/B,gCAAgC,EAChC,2BAA2B,GAG5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,sCAAsC,EACtC,yBAAyB,EACzB,kCAAkC,EAClC,qBAAqB,GAOtB,MAAM,8BAA8B,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,8BAA8B,EAC9B,iCAAiC,EACjC,gCAAgC,EAChC,8BAA8B,EAC9B,kCAAkC,EAClC,wBAAwB,GAoBzB,MAAM,cAAc,CAAC;AAEtB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AAGnE;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AACnE,MAAM,CAAC,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AACzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AACjE,MAAM,CAAC,MAAM,0BAA0B,GAAG,gCAAgC,CAAC;AAM3E;;GAEG;AACH,OAAO,EAAE,6BAA6B,EAAE,qCAAqC,EAAE,mCAAmC,EAAE,CAAC;AAkBrH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAkC,MAAe;IAC9E,OAAO,MAAM,CAAC;AAChB,CAAC","debugId":"d13f5b40-8e83-5eab-998b-779d9130e847"}
@@ -1,4 +1,4 @@
1
- import type { ExtensionActivationResult, ExtensionCapability, ExtensionGovernancePolicy, ExtensionHookRegistry, ExtensionLayer, ExtensionRegistrationRegistry, FlagDefinition, RegisteredExtensionCommandDefinition, RegisteredExtensionExporter, RegisteredExtensionImporter, RegisteredExtensionSchemaFieldDefinitions, RegisteredExtensionSchemaItemTypeDefinitions, RegisteredExtensionSearchProvider, RegisteredExtensionVectorStoreAdapter, SchemaFieldDefinition, SchemaItemTypeDefinition } from "../core/extensions/loader.js";
1
+ import type { ExtensionActivationResult, ExtensionCapability, ExtensionCommandRegistry, ExtensionGovernancePolicy, ExtensionHookRegistry, ExtensionLayer, ExtensionParserRegistry, ExtensionPreflightRegistry, ExtensionRegistrationRegistry, ExtensionRendererRegistry, FlagDefinition, OutputRendererFormat, RegisteredExtensionCommandDefinition, RegisteredExtensionCommandOverride, RegisteredExtensionExporter, RegisteredExtensionImporter, RegisteredExtensionParserOverride, RegisteredExtensionPreflightOverride, RegisteredExtensionRendererOverride, RegisteredExtensionSchemaFieldDefinitions, RegisteredExtensionSchemaItemTypeDefinitions, RegisteredExtensionSearchProvider, RegisteredExtensionVectorStoreAdapter, SchemaFieldDefinition, SchemaItemTypeDefinition } from "../core/extensions/loader.js";
2
2
  import type { PmPackageManifest, PmPackageResourceKind } from "../core/packages/manifest.js";
3
3
  export interface ActivateExtensionForTestOptions {
4
4
  name?: string;
@@ -60,6 +60,21 @@ export interface RegisteredItemTypeAssertion {
60
60
  registration: RegisteredExtensionSchemaItemTypeDefinitions;
61
61
  itemType: SchemaItemTypeDefinition;
62
62
  }
63
+ export interface RegisteredCommandOverrideExpectation {
64
+ command: string;
65
+ extensionName?: string;
66
+ }
67
+ export interface RegisteredParserOverrideExpectation {
68
+ command: string;
69
+ extensionName?: string;
70
+ }
71
+ export interface RegisteredPreflightOverrideExpectation {
72
+ extensionName?: string;
73
+ }
74
+ export interface RegisteredRendererOverrideExpectation {
75
+ format: OutputRendererFormat;
76
+ extensionName?: string;
77
+ }
63
78
  export type PackageManifestResourceExpectation = Partial<Record<PmPackageResourceKind, readonly string[]>>;
64
79
  export interface PackageManifestExpectation {
65
80
  packageName?: string;
@@ -124,4 +139,43 @@ export declare function assertRegisteredItemField(registrations: ExtensionRegist
124
139
  * item type definition (optionally scoped to a specific extension).
125
140
  */
126
141
  export declare function assertRegisteredItemType(registrations: ExtensionRegistrationRegistry, expectation: RegisteredItemTypeExpectation): RegisteredItemTypeAssertion;
142
+ /**
143
+ * Assert that an activated extension command registry contains a command
144
+ * override registered via `api.registerCommand(command, override)` (optionally
145
+ * scoped to a specific extension).
146
+ *
147
+ * Command overrides are surfaced via `ExtensionActivationResult.commands`, not
148
+ * the command registration registry, so this helper accepts an
149
+ * `ExtensionCommandRegistry`.
150
+ */
151
+ export declare function assertRegisteredCommandOverride(commands: ExtensionCommandRegistry, expectation: RegisteredCommandOverrideExpectation): RegisteredExtensionCommandOverride;
152
+ /**
153
+ * Assert that an activated extension parser registry contains a parser override
154
+ * registered via `api.registerParser(command, override)` (optionally scoped to
155
+ * a specific extension).
156
+ *
157
+ * Parser overrides are surfaced via `ExtensionActivationResult.parsers`, not the
158
+ * command registration registry, so this helper accepts an
159
+ * `ExtensionParserRegistry`.
160
+ */
161
+ export declare function assertRegisteredParserOverride(parsers: ExtensionParserRegistry, expectation: RegisteredParserOverrideExpectation): RegisteredExtensionParserOverride;
162
+ /**
163
+ * Assert that an activated extension preflight registry contains a preflight
164
+ * override registered via `api.registerPreflight(override)` (optionally scoped
165
+ * to a specific extension).
166
+ *
167
+ * Preflight overrides are global (they run for every command and carry no
168
+ * `command` field), so the expectation only accepts an optional
169
+ * `extensionName`. Preflight overrides are surfaced via
170
+ * `ExtensionActivationResult.preflight`.
171
+ */
172
+ export declare function assertRegisteredPreflightOverride(preflight: ExtensionPreflightRegistry, expectation?: RegisteredPreflightOverrideExpectation): RegisteredExtensionPreflightOverride;
173
+ /**
174
+ * Assert that an activated extension renderer registry contains a renderer
175
+ * override registered via `api.registerRenderer(format, renderer)` for the
176
+ * expected output format (optionally scoped to a specific extension).
177
+ *
178
+ * Renderer overrides are surfaced via `ExtensionActivationResult.renderers`.
179
+ */
180
+ export declare function assertRegisteredRendererOverride(renderers: ExtensionRendererRegistry, expectation: RegisteredRendererOverrideExpectation): RegisteredExtensionRendererOverride;
127
181
  export {};
@@ -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]="ad18423f-8581-56aa-a065-70561c5bcd5d")}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]="43b78d54-eeb1-571e-8e88-e67b2432cfd6")}catch(e){}}();
3
3
  import { activateExtensions } from "../core/extensions/loader.js";
4
4
  import { createDefaultExtensionGovernancePolicy } from "../core/extensions/extension-types.js";
5
5
  const HOOK_KIND_TO_REGISTRY_FIELD = {
@@ -326,5 +326,95 @@ export function assertRegisteredItemType(registrations, expectation) {
326
326
  }
327
327
  return match;
328
328
  }
329
+ /**
330
+ * Assert that an activated extension command registry contains a command
331
+ * override registered via `api.registerCommand(command, override)` (optionally
332
+ * scoped to a specific extension).
333
+ *
334
+ * Command overrides are surfaced via `ExtensionActivationResult.commands`, not
335
+ * the command registration registry, so this helper accepts an
336
+ * `ExtensionCommandRegistry`.
337
+ */
338
+ export function assertRegisteredCommandOverride(commands, expectation) {
339
+ const expectedCommand = normalizeSdkCommandName(expectation.command);
340
+ if (expectedCommand.length === 0) {
341
+ throw new Error("Expected command name must be a non-empty string");
342
+ }
343
+ const candidates = commands.overrides.filter((entry) => entry.command === expectedCommand);
344
+ const override = expectation.extensionName
345
+ ? candidates.find((entry) => entry.name === expectation.extensionName)
346
+ : candidates[0];
347
+ if (!override) {
348
+ const available = sortedUnique(commands.overrides.map((entry) => entry.command));
349
+ throw new Error(`Expected command override "${expectedCommand}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available command overrides: ${formatAvailable(available)}`);
350
+ }
351
+ return override;
352
+ }
353
+ /**
354
+ * Assert that an activated extension parser registry contains a parser override
355
+ * registered via `api.registerParser(command, override)` (optionally scoped to
356
+ * a specific extension).
357
+ *
358
+ * Parser overrides are surfaced via `ExtensionActivationResult.parsers`, not the
359
+ * command registration registry, so this helper accepts an
360
+ * `ExtensionParserRegistry`.
361
+ */
362
+ export function assertRegisteredParserOverride(parsers, expectation) {
363
+ const expectedCommand = normalizeSdkCommandName(expectation.command);
364
+ if (expectedCommand.length === 0) {
365
+ throw new Error("Expected command name must be a non-empty string");
366
+ }
367
+ const candidates = parsers.overrides.filter((entry) => entry.command === expectedCommand);
368
+ const override = expectation.extensionName
369
+ ? candidates.find((entry) => entry.name === expectation.extensionName)
370
+ : candidates[0];
371
+ if (!override) {
372
+ const available = sortedUnique(parsers.overrides.map((entry) => entry.command));
373
+ throw new Error(`Expected parser override "${expectedCommand}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available parser overrides: ${formatAvailable(available)}`);
374
+ }
375
+ return override;
376
+ }
377
+ /**
378
+ * Assert that an activated extension preflight registry contains a preflight
379
+ * override registered via `api.registerPreflight(override)` (optionally scoped
380
+ * to a specific extension).
381
+ *
382
+ * Preflight overrides are global (they run for every command and carry no
383
+ * `command` field), so the expectation only accepts an optional
384
+ * `extensionName`. Preflight overrides are surfaced via
385
+ * `ExtensionActivationResult.preflight`.
386
+ */
387
+ export function assertRegisteredPreflightOverride(preflight, expectation = {}) {
388
+ const override = expectation.extensionName
389
+ ? preflight.overrides.find((entry) => entry.name === expectation.extensionName)
390
+ : preflight.overrides[0];
391
+ if (!override) {
392
+ const available = sortedUnique(preflight.overrides.map((entry) => entry.name));
393
+ throw new Error(`Expected a preflight override${extensionNameSuffix(expectation.extensionName)} to be registered. Available preflight overrides: ${formatAvailable(available)}`);
394
+ }
395
+ return override;
396
+ }
397
+ /**
398
+ * Assert that an activated extension renderer registry contains a renderer
399
+ * override registered via `api.registerRenderer(format, renderer)` for the
400
+ * expected output format (optionally scoped to a specific extension).
401
+ *
402
+ * Renderer overrides are surfaced via `ExtensionActivationResult.renderers`.
403
+ */
404
+ export function assertRegisteredRendererOverride(renderers, expectation) {
405
+ const expectedFormat = normalizeSdkIdentifier(expectation.format);
406
+ if (expectedFormat.length === 0) {
407
+ throw new Error("Expected renderer format must be a non-empty string");
408
+ }
409
+ const candidates = renderers.overrides.filter((entry) => entry.format === expectedFormat);
410
+ const override = expectation.extensionName
411
+ ? candidates.find((entry) => entry.name === expectation.extensionName)
412
+ : candidates[0];
413
+ if (!override) {
414
+ const available = sortedUnique(renderers.overrides.map((entry) => entry.format));
415
+ throw new Error(`Expected renderer override "${expectedFormat}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available renderer overrides: ${formatAvailable(available)}`);
416
+ }
417
+ return override;
418
+ }
329
419
  //# sourceMappingURL=testing.js.map
330
- //# debugId=ad18423f-8581-56aa-a065-70561c5bcd5d
420
+ //# debugId=43b78d54-eeb1-571e-8e88-e67b2432cfd6
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sources":["sdk/testing.ts"],"sourceRoot":"/","sourcesContent":["import type {\n ExtensionActivationResult,\n ExtensionCapability,\n ExtensionGovernancePolicy,\n ExtensionHookRegistry,\n ExtensionLayer,\n ExtensionManifest,\n ExtensionRegistrationRegistry,\n FlagDefinition,\n RegisteredExtensionCommandDefinition,\n RegisteredExtensionExporter,\n RegisteredExtensionHook,\n RegisteredExtensionImporter,\n RegisteredExtensionSchemaFieldDefinitions,\n RegisteredExtensionSchemaItemTypeDefinitions,\n RegisteredExtensionSearchProvider,\n RegisteredExtensionVectorStoreAdapter,\n SchemaFieldDefinition,\n SchemaItemTypeDefinition,\n} from \"../core/extensions/loader.js\";\nimport { activateExtensions } from \"../core/extensions/loader.js\";\nimport { createDefaultExtensionGovernancePolicy } from \"../core/extensions/extension-types.js\";\nimport type { PmPackageManifest, PmPackageResourceKind } from \"../core/packages/manifest.js\";\n\ninterface TestExtensionModule {\n manifest?: Partial<ExtensionManifest>;\n activate?: unknown;\n default?: TestExtensionModule;\n}\n\nexport interface ActivateExtensionForTestOptions {\n name?: string;\n layer?: ExtensionLayer;\n capabilities?: readonly ExtensionCapability[];\n policy?: ExtensionGovernancePolicy;\n}\n\nexport interface RegisteredCommandContractExpectation {\n command: string;\n action?: string;\n extensionName?: string;\n arguments?: string[];\n flags?: string[];\n}\n\nexport interface RegisteredCommandContractAssertion {\n command: RegisteredExtensionCommandDefinition;\n flags: FlagDefinition[];\n}\n\n/**\n * Public hook lifecycle kinds an extension can register through `api.hooks.*`.\n */\nexport type RegisteredHookKind = \"before_command\" | \"after_command\" | \"on_read\" | \"on_write\" | \"on_index\";\n\nconst HOOK_KIND_TO_REGISTRY_FIELD: Record<RegisteredHookKind, keyof ExtensionHookRegistry> = {\n before_command: \"beforeCommand\",\n after_command: \"afterCommand\",\n on_read: \"onRead\",\n on_write: \"onWrite\",\n on_index: \"onIndex\",\n};\n\nexport interface RegisteredHookExpectation {\n kind: RegisteredHookKind;\n extensionName?: string;\n}\n\nexport interface RegisteredSearchProviderExpectation {\n provider: string;\n extensionName?: string;\n}\n\nexport interface RegisteredVectorStoreAdapterExpectation {\n adapter: string;\n extensionName?: string;\n}\n\nexport interface RegisteredImporterExpectation {\n importer: string;\n extensionName?: string;\n}\n\nexport interface RegisteredExporterExpectation {\n exporter: string;\n extensionName?: string;\n}\n\nexport interface RegisteredItemFieldExpectation {\n field: string;\n extensionName?: string;\n type?: SchemaFieldDefinition[\"type\"];\n}\n\nexport interface RegisteredItemFieldAssertion {\n registration: RegisteredExtensionSchemaFieldDefinitions;\n field: SchemaFieldDefinition;\n}\n\nexport interface RegisteredItemTypeExpectation {\n itemType: string;\n extensionName?: string;\n folder?: string;\n}\n\nexport interface RegisteredItemTypeAssertion {\n registration: RegisteredExtensionSchemaItemTypeDefinitions;\n itemType: SchemaItemTypeDefinition;\n}\n\nexport type PackageManifestResourceExpectation = Partial<Record<PmPackageResourceKind, readonly string[]>>;\n\nexport interface PackageManifestExpectation {\n packageName?: string;\n aliases?: readonly string[];\n resources?: PackageManifestResourceExpectation;\n}\n\nfunction normalizeSdkIdentifier(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction extensionNameSuffix(extensionName: string | undefined): string {\n return extensionName ? ` from extension \"${extensionName}\"` : \"\";\n}\n\nfunction sortedUnique(values: readonly string[]): string[] {\n return [...new Set(values)].sort((left, right) => left.localeCompare(right));\n}\n\nfunction normalizeSdkCommandName(command: string): string {\n return command\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\nfunction formatAvailable(values: readonly string[]): string {\n return values.length > 0 ? values.join(\", \") : \"(none)\";\n}\n\nfunction assertStringSetIncludes(\n actual: readonly string[] | undefined,\n expected: readonly string[],\n label: string,\n): void {\n const actualValues = new Set(actual ?? []);\n const missing = sortedUnique(expected.filter((value) => !actualValues.has(value)));\n if (missing.length > 0) {\n throw new Error(\n `Expected package manifest ${label} to include ${missing.join(\", \")}; available: ${formatAvailable(\n sortedUnique(actual ?? []),\n )}`,\n );\n }\n}\n\nfunction collectFlagLabels(flags: readonly FlagDefinition[]): Set<string> {\n const labels = new Set<string>();\n for (const flag of flags) {\n if (typeof flag.long === \"string\" && flag.long.trim().length > 0) {\n labels.add(flag.long.trim());\n }\n if (typeof flag.short === \"string\" && flag.short.trim().length > 0) {\n labels.add(flag.short.trim());\n }\n }\n return labels;\n}\n\nfunction readTestExtensionManifest(module: unknown): Partial<ExtensionManifest> {\n if (module && typeof module === \"object\") {\n const testModule = module as TestExtensionModule;\n const manifest = testModule.manifest;\n if (manifest && typeof manifest === \"object\") {\n return manifest;\n }\n const defaultExport = testModule.default;\n const defaultManifest = defaultExport?.manifest;\n if (defaultManifest && typeof defaultManifest === \"object\") {\n return defaultManifest;\n }\n if (defaultExport && typeof defaultExport === \"object\" && (\"name\" in defaultExport || \"capabilities\" in defaultExport)) {\n return defaultExport as Partial<ExtensionManifest>;\n }\n if (\"name\" in testModule || \"capabilities\" in testModule) {\n return testModule as Partial<ExtensionManifest>;\n }\n }\n return {};\n}\n\nfunction readTestExtensionCapabilities(\n manifest: Partial<ExtensionManifest>,\n options: ActivateExtensionForTestOptions,\n): ExtensionCapability[] {\n if (Array.isArray(options.capabilities)) {\n return [...options.capabilities];\n }\n if (Array.isArray(manifest.capabilities)) {\n return manifest.capabilities.filter((capability): capability is ExtensionCapability => typeof capability === \"string\");\n }\n return [];\n}\n\n/**\n * Activate one in-memory extension module for package tests.\n *\n * This uses pm's real registration validation and activation engine while\n * avoiding private loader imports, filesystem manifests, or workspace setup.\n */\nexport async function activateExtensionForTest(\n module: unknown,\n options: ActivateExtensionForTestOptions = {},\n): Promise<ExtensionActivationResult> {\n const manifest = readTestExtensionManifest(module);\n const name =\n options.name ??\n (typeof manifest.name === \"string\" && manifest.name.trim().length > 0 ? manifest.name.trim() : \"test-extension\");\n const layer = options.layer ?? \"project\";\n const capabilities = readTestExtensionCapabilities(manifest, options);\n\n return activateExtensions({\n disabled_by_flag: false,\n roots: { global: \"\", project: \"\" },\n configured_enabled: [],\n configured_disabled: [],\n discovered: [],\n effective: [],\n warnings: [],\n policy: options.policy ?? createDefaultExtensionGovernancePolicy(),\n failed: [],\n loaded: [\n {\n layer,\n directory: \"\",\n manifest_path: \"\",\n name,\n version: typeof manifest.version === \"string\" ? manifest.version : \"0.0.0\",\n entry: typeof manifest.entry === \"string\" ? manifest.entry : \"./index.js\",\n priority: typeof manifest.priority === \"number\" ? manifest.priority : 0,\n entry_path: \"\",\n capabilities,\n manifest_version: typeof manifest.manifest_version === \"number\" ? manifest.manifest_version : undefined,\n pm_min_version: typeof manifest.pm_min_version === \"string\" ? manifest.pm_min_version : undefined,\n pm_max_version: typeof manifest.pm_max_version === \"string\" ? manifest.pm_max_version : undefined,\n engines: manifest.engines,\n trusted: manifest.trusted,\n provenance: manifest.provenance,\n sandbox_profile: manifest.sandbox_profile,\n permissions: manifest.permissions,\n activation: manifest.activation,\n module,\n },\n ],\n });\n}\n\n/**\n * Assert that a normalized package manifest advertises expected package\n * resources. Pair with `readPmPackageManifest(packageRoot)` in package tests.\n */\nexport function assertPackageManifest(\n manifest: PmPackageManifest,\n expectation: PackageManifestExpectation,\n): PmPackageManifest {\n if (expectation.packageName !== undefined && manifest.package_name !== expectation.packageName) {\n throw new Error(\n `Expected package manifest package_name to be \"${expectation.packageName}\"; received \"${\n manifest.package_name ?? \"(none)\"\n }\"`,\n );\n }\n if (expectation.aliases !== undefined) {\n assertStringSetIncludes(manifest.aliases, expectation.aliases, \"aliases\");\n }\n if (expectation.resources !== undefined) {\n for (const [kind, expectedPaths] of Object.entries(expectation.resources) as Array<\n [PmPackageResourceKind, readonly string[]]\n >) {\n assertStringSetIncludes(manifest.resources[kind], expectedPaths, `pm.${kind}`);\n }\n }\n return manifest;\n}\n\n/**\n * Assert that an activated extension registration registry contains a command\n * contract with the expected public metadata.\n */\nexport function assertRegisteredCommandContract(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredCommandContractExpectation,\n): RegisteredCommandContractAssertion {\n const expectedCommand = normalizeSdkCommandName(expectation.command);\n if (expectedCommand.length === 0) {\n throw new Error(\"Expected command name must be a non-empty string\");\n }\n\n const commandCandidates = registrations.commands.filter((entry) => entry.command === expectedCommand);\n const command = expectation.extensionName\n ? commandCandidates.find((entry) => entry.name === expectation.extensionName)\n : commandCandidates[0];\n if (!command) {\n const available = registrations.commands.map((entry) => entry.command).sort((left, right) => left.localeCompare(right));\n const extensionSuffix = expectation.extensionName ? ` from extension \"${expectation.extensionName}\"` : \"\";\n throw new Error(\n `Expected extension command \"${expectedCommand}\"${extensionSuffix} to be registered. Available commands: ${formatAvailable(\n available,\n )}`,\n );\n }\n\n if (expectation.action !== undefined && command.action !== expectation.action) {\n throw new Error(\n `Expected extension command \"${expectedCommand}\" action \"${expectation.action}\", received \"${command.action}\"`,\n );\n }\n\n if (expectation.arguments !== undefined) {\n const actualArguments = (command.arguments ?? []).map((argument) => argument.name);\n const missingArguments = expectation.arguments.filter((argument) => !actualArguments.includes(argument));\n if (missingArguments.length > 0) {\n throw new Error(\n `Expected extension command \"${expectedCommand}\" arguments ${formatAvailable(\n expectation.arguments,\n )}; missing ${formatAvailable(missingArguments)}; available ${formatAvailable(actualArguments)}`,\n );\n }\n }\n\n const flags = registrations.flags\n .filter(\n (entry) =>\n entry.target_command === expectedCommand &&\n (expectation.extensionName === undefined || entry.name === expectation.extensionName),\n )\n .flatMap((entry) => entry.flags);\n\n if (expectation.flags !== undefined) {\n const actualFlagLabels = collectFlagLabels(flags);\n const missingFlags = expectation.flags.filter((flag) => !actualFlagLabels.has(flag));\n if (missingFlags.length > 0) {\n throw new Error(\n `Expected extension command \"${expectedCommand}\" flags ${formatAvailable(expectation.flags)}; missing ${formatAvailable(\n missingFlags,\n )}; available ${formatAvailable([...actualFlagLabels].sort((left, right) => left.localeCompare(right)))}`,\n );\n }\n }\n\n return { command, flags };\n}\n\n/**\n * Assert that an activated extension hook registry contains a hook of the\n * expected lifecycle kind (optionally scoped to a specific extension).\n *\n * Hooks are surfaced via `ExtensionActivationResult.hooks`, not the command\n * registration registry, so this helper accepts an `ExtensionHookRegistry`.\n */\nexport function assertRegisteredHook<TKind extends RegisteredHookKind>(\n hooks: ExtensionHookRegistry,\n expectation: RegisteredHookExpectation & { kind: TKind },\n): ExtensionHookRegistry[(typeof HOOK_KIND_TO_REGISTRY_FIELD)[TKind]][number] {\n const field = HOOK_KIND_TO_REGISTRY_FIELD[expectation.kind];\n const candidates = hooks[field] as ReadonlyArray<RegisteredExtensionHook<unknown>>;\n const hook = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!hook) {\n const available = sortedUnique(candidates.map((entry) => entry.name));\n throw new Error(\n `Expected a \"${expectation.kind}\" hook${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available \"${expectation.kind}\" hooks: ${formatAvailable(available)}`,\n );\n }\n\n return hook as ExtensionHookRegistry[(typeof HOOK_KIND_TO_REGISTRY_FIELD)[TKind]][number];\n}\n\n/**\n * Assert that an activated extension registration registry contains a search\n * provider with the expected name (optionally scoped to a specific extension).\n */\nexport function assertRegisteredSearchProvider(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredSearchProviderExpectation,\n): RegisteredExtensionSearchProvider {\n const expectedProvider = normalizeSdkIdentifier(expectation.provider);\n if (expectedProvider.length === 0) {\n throw new Error(\"Expected search provider name must be a non-empty string\");\n }\n\n const candidates = registrations.search_providers.filter(\n (entry) => normalizeSdkIdentifier(entry.definition.name) === expectedProvider,\n );\n const provider = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!provider) {\n const available = sortedUnique(registrations.search_providers.map((entry) => entry.definition.name));\n throw new Error(\n `Expected search provider \"${expectedProvider}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available search providers: ${formatAvailable(available)}`,\n );\n }\n\n return provider;\n}\n\n/**\n * Assert that an activated extension registration registry contains a vector\n * store adapter with the expected name (optionally scoped to a specific\n * extension).\n */\nexport function assertRegisteredVectorStoreAdapter(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredVectorStoreAdapterExpectation,\n): RegisteredExtensionVectorStoreAdapter {\n const expectedAdapter = normalizeSdkIdentifier(expectation.adapter);\n if (expectedAdapter.length === 0) {\n throw new Error(\"Expected vector store adapter name must be a non-empty string\");\n }\n\n const candidates = registrations.vector_store_adapters.filter(\n (entry) => normalizeSdkIdentifier(entry.definition.name) === expectedAdapter,\n );\n const adapter = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!adapter) {\n const available = sortedUnique(registrations.vector_store_adapters.map((entry) => entry.definition.name));\n throw new Error(\n `Expected vector store adapter \"${expectedAdapter}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available vector store adapters: ${formatAvailable(available)}`,\n );\n }\n\n return adapter;\n}\n\n/**\n * Assert that an activated extension registration registry contains an importer\n * for the expected format/name (optionally scoped to a specific extension).\n */\nexport function assertRegisteredImporter(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredImporterExpectation,\n): RegisteredExtensionImporter {\n const expectedImporter = normalizeSdkIdentifier(expectation.importer);\n if (expectedImporter.length === 0) {\n throw new Error(\"Expected importer name must be a non-empty string\");\n }\n\n const candidates = registrations.importers.filter(\n (entry) => normalizeSdkIdentifier(entry.importer) === expectedImporter,\n );\n const importer = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!importer) {\n const available = sortedUnique(registrations.importers.map((entry) => entry.importer));\n throw new Error(\n `Expected importer \"${expectedImporter}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available importers: ${formatAvailable(available)}`,\n );\n }\n\n return importer;\n}\n\n/**\n * Assert that an activated extension registration registry contains an exporter\n * for the expected format/name (optionally scoped to a specific extension).\n */\nexport function assertRegisteredExporter(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredExporterExpectation,\n): RegisteredExtensionExporter {\n const expectedExporter = normalizeSdkIdentifier(expectation.exporter);\n if (expectedExporter.length === 0) {\n throw new Error(\"Expected exporter name must be a non-empty string\");\n }\n\n const candidates = registrations.exporters.filter(\n (entry) => normalizeSdkIdentifier(entry.exporter) === expectedExporter,\n );\n const exporter = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!exporter) {\n const available = sortedUnique(registrations.exporters.map((entry) => entry.exporter));\n throw new Error(\n `Expected exporter \"${expectedExporter}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available exporters: ${formatAvailable(available)}`,\n );\n }\n\n return exporter;\n}\n\n/**\n * Assert that an activated extension registration registry contains a custom\n * item field definition (optionally scoped to a specific extension).\n */\nexport function assertRegisteredItemField(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredItemFieldExpectation,\n): RegisteredItemFieldAssertion {\n const expectedField = normalizeSdkIdentifier(expectation.field);\n if (expectedField.length === 0) {\n throw new Error(\"Expected item field name must be a non-empty string\");\n }\n\n const candidates = registrations.item_fields\n .filter((entry) => expectation.extensionName === undefined || entry.name === expectation.extensionName)\n .map((registration) => ({\n registration,\n field: registration.fields.find((field) => normalizeSdkIdentifier(field.name) === expectedField),\n }))\n .filter((entry): entry is RegisteredItemFieldAssertion => entry.field !== undefined);\n\n const match = candidates.find((entry) => expectation.type === undefined || entry.field.type === expectation.type);\n if (!match) {\n const available = sortedUnique(\n registrations.item_fields.flatMap((entry) => entry.fields.map((field) => `${field.name}:${field.type}`)),\n );\n throw new Error(\n `Expected item field \"${expectedField}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available item fields: ${formatAvailable(available)}`,\n );\n }\n\n return match;\n}\n\n/**\n * Assert that an activated extension registration registry contains a custom\n * item type definition (optionally scoped to a specific extension).\n */\nexport function assertRegisteredItemType(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredItemTypeExpectation,\n): RegisteredItemTypeAssertion {\n const expectedType = normalizeSdkIdentifier(expectation.itemType);\n if (expectedType.length === 0) {\n throw new Error(\"Expected item type name must be a non-empty string\");\n }\n\n const candidates = registrations.item_types\n .filter((entry) => expectation.extensionName === undefined || entry.name === expectation.extensionName)\n .map((registration) => ({\n registration,\n itemType: registration.types.find((itemType) => normalizeSdkIdentifier(itemType.name) === expectedType),\n }))\n .filter((entry): entry is RegisteredItemTypeAssertion => entry.itemType !== undefined);\n\n const match = candidates.find((entry) => expectation.folder === undefined || entry.itemType.folder === expectation.folder);\n if (!match) {\n const available = sortedUnique(\n registrations.item_types.flatMap((entry) => entry.types.map((itemType) => `${itemType.name}:${itemType.folder}`)),\n );\n throw new Error(\n `Expected item type \"${expectedType}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available item types: ${formatAvailable(available)}`,\n );\n }\n\n return match;\n}\n"],"names":[],"mappings":"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","debugId":"ad18423f-8581-56aa-a065-70561c5bcd5d"}
1
+ {"version":3,"file":"testing.js","sources":["sdk/testing.ts"],"sourceRoot":"/","sourcesContent":["import type {\n ExtensionActivationResult,\n ExtensionCapability,\n ExtensionCommandRegistry,\n ExtensionGovernancePolicy,\n ExtensionHookRegistry,\n ExtensionLayer,\n ExtensionManifest,\n ExtensionParserRegistry,\n ExtensionPreflightRegistry,\n ExtensionRegistrationRegistry,\n ExtensionRendererRegistry,\n FlagDefinition,\n OutputRendererFormat,\n RegisteredExtensionCommandDefinition,\n RegisteredExtensionCommandOverride,\n RegisteredExtensionExporter,\n RegisteredExtensionHook,\n RegisteredExtensionImporter,\n RegisteredExtensionParserOverride,\n RegisteredExtensionPreflightOverride,\n RegisteredExtensionRendererOverride,\n RegisteredExtensionSchemaFieldDefinitions,\n RegisteredExtensionSchemaItemTypeDefinitions,\n RegisteredExtensionSearchProvider,\n RegisteredExtensionVectorStoreAdapter,\n SchemaFieldDefinition,\n SchemaItemTypeDefinition,\n} from \"../core/extensions/loader.js\";\nimport { activateExtensions } from \"../core/extensions/loader.js\";\nimport { createDefaultExtensionGovernancePolicy } from \"../core/extensions/extension-types.js\";\nimport type { PmPackageManifest, PmPackageResourceKind } from \"../core/packages/manifest.js\";\n\ninterface TestExtensionModule {\n manifest?: Partial<ExtensionManifest>;\n activate?: unknown;\n default?: TestExtensionModule;\n}\n\nexport interface ActivateExtensionForTestOptions {\n name?: string;\n layer?: ExtensionLayer;\n capabilities?: readonly ExtensionCapability[];\n policy?: ExtensionGovernancePolicy;\n}\n\nexport interface RegisteredCommandContractExpectation {\n command: string;\n action?: string;\n extensionName?: string;\n arguments?: string[];\n flags?: string[];\n}\n\nexport interface RegisteredCommandContractAssertion {\n command: RegisteredExtensionCommandDefinition;\n flags: FlagDefinition[];\n}\n\n/**\n * Public hook lifecycle kinds an extension can register through `api.hooks.*`.\n */\nexport type RegisteredHookKind = \"before_command\" | \"after_command\" | \"on_read\" | \"on_write\" | \"on_index\";\n\nconst HOOK_KIND_TO_REGISTRY_FIELD: Record<RegisteredHookKind, keyof ExtensionHookRegistry> = {\n before_command: \"beforeCommand\",\n after_command: \"afterCommand\",\n on_read: \"onRead\",\n on_write: \"onWrite\",\n on_index: \"onIndex\",\n};\n\nexport interface RegisteredHookExpectation {\n kind: RegisteredHookKind;\n extensionName?: string;\n}\n\nexport interface RegisteredSearchProviderExpectation {\n provider: string;\n extensionName?: string;\n}\n\nexport interface RegisteredVectorStoreAdapterExpectation {\n adapter: string;\n extensionName?: string;\n}\n\nexport interface RegisteredImporterExpectation {\n importer: string;\n extensionName?: string;\n}\n\nexport interface RegisteredExporterExpectation {\n exporter: string;\n extensionName?: string;\n}\n\nexport interface RegisteredItemFieldExpectation {\n field: string;\n extensionName?: string;\n type?: SchemaFieldDefinition[\"type\"];\n}\n\nexport interface RegisteredItemFieldAssertion {\n registration: RegisteredExtensionSchemaFieldDefinitions;\n field: SchemaFieldDefinition;\n}\n\nexport interface RegisteredItemTypeExpectation {\n itemType: string;\n extensionName?: string;\n folder?: string;\n}\n\nexport interface RegisteredItemTypeAssertion {\n registration: RegisteredExtensionSchemaItemTypeDefinitions;\n itemType: SchemaItemTypeDefinition;\n}\n\nexport interface RegisteredCommandOverrideExpectation {\n command: string;\n extensionName?: string;\n}\n\nexport interface RegisteredParserOverrideExpectation {\n command: string;\n extensionName?: string;\n}\n\nexport interface RegisteredPreflightOverrideExpectation {\n extensionName?: string;\n}\n\nexport interface RegisteredRendererOverrideExpectation {\n format: OutputRendererFormat;\n extensionName?: string;\n}\n\nexport type PackageManifestResourceExpectation = Partial<Record<PmPackageResourceKind, readonly string[]>>;\n\nexport interface PackageManifestExpectation {\n packageName?: string;\n aliases?: readonly string[];\n resources?: PackageManifestResourceExpectation;\n}\n\nfunction normalizeSdkIdentifier(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction extensionNameSuffix(extensionName: string | undefined): string {\n return extensionName ? ` from extension \"${extensionName}\"` : \"\";\n}\n\nfunction sortedUnique(values: readonly string[]): string[] {\n return [...new Set(values)].sort((left, right) => left.localeCompare(right));\n}\n\nfunction normalizeSdkCommandName(command: string): string {\n return command\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\nfunction formatAvailable(values: readonly string[]): string {\n return values.length > 0 ? values.join(\", \") : \"(none)\";\n}\n\nfunction assertStringSetIncludes(\n actual: readonly string[] | undefined,\n expected: readonly string[],\n label: string,\n): void {\n const actualValues = new Set(actual ?? []);\n const missing = sortedUnique(expected.filter((value) => !actualValues.has(value)));\n if (missing.length > 0) {\n throw new Error(\n `Expected package manifest ${label} to include ${missing.join(\", \")}; available: ${formatAvailable(\n sortedUnique(actual ?? []),\n )}`,\n );\n }\n}\n\nfunction collectFlagLabels(flags: readonly FlagDefinition[]): Set<string> {\n const labels = new Set<string>();\n for (const flag of flags) {\n if (typeof flag.long === \"string\" && flag.long.trim().length > 0) {\n labels.add(flag.long.trim());\n }\n if (typeof flag.short === \"string\" && flag.short.trim().length > 0) {\n labels.add(flag.short.trim());\n }\n }\n return labels;\n}\n\nfunction readTestExtensionManifest(module: unknown): Partial<ExtensionManifest> {\n if (module && typeof module === \"object\") {\n const testModule = module as TestExtensionModule;\n const manifest = testModule.manifest;\n if (manifest && typeof manifest === \"object\") {\n return manifest;\n }\n const defaultExport = testModule.default;\n const defaultManifest = defaultExport?.manifest;\n if (defaultManifest && typeof defaultManifest === \"object\") {\n return defaultManifest;\n }\n if (defaultExport && typeof defaultExport === \"object\" && (\"name\" in defaultExport || \"capabilities\" in defaultExport)) {\n return defaultExport as Partial<ExtensionManifest>;\n }\n if (\"name\" in testModule || \"capabilities\" in testModule) {\n return testModule as Partial<ExtensionManifest>;\n }\n }\n return {};\n}\n\nfunction readTestExtensionCapabilities(\n manifest: Partial<ExtensionManifest>,\n options: ActivateExtensionForTestOptions,\n): ExtensionCapability[] {\n if (Array.isArray(options.capabilities)) {\n return [...options.capabilities];\n }\n if (Array.isArray(manifest.capabilities)) {\n return manifest.capabilities.filter((capability): capability is ExtensionCapability => typeof capability === \"string\");\n }\n return [];\n}\n\n/**\n * Activate one in-memory extension module for package tests.\n *\n * This uses pm's real registration validation and activation engine while\n * avoiding private loader imports, filesystem manifests, or workspace setup.\n */\nexport async function activateExtensionForTest(\n module: unknown,\n options: ActivateExtensionForTestOptions = {},\n): Promise<ExtensionActivationResult> {\n const manifest = readTestExtensionManifest(module);\n const name =\n options.name ??\n (typeof manifest.name === \"string\" && manifest.name.trim().length > 0 ? manifest.name.trim() : \"test-extension\");\n const layer = options.layer ?? \"project\";\n const capabilities = readTestExtensionCapabilities(manifest, options);\n\n return activateExtensions({\n disabled_by_flag: false,\n roots: { global: \"\", project: \"\" },\n configured_enabled: [],\n configured_disabled: [],\n discovered: [],\n effective: [],\n warnings: [],\n policy: options.policy ?? createDefaultExtensionGovernancePolicy(),\n failed: [],\n loaded: [\n {\n layer,\n directory: \"\",\n manifest_path: \"\",\n name,\n version: typeof manifest.version === \"string\" ? manifest.version : \"0.0.0\",\n entry: typeof manifest.entry === \"string\" ? manifest.entry : \"./index.js\",\n priority: typeof manifest.priority === \"number\" ? manifest.priority : 0,\n entry_path: \"\",\n capabilities,\n manifest_version: typeof manifest.manifest_version === \"number\" ? manifest.manifest_version : undefined,\n pm_min_version: typeof manifest.pm_min_version === \"string\" ? manifest.pm_min_version : undefined,\n pm_max_version: typeof manifest.pm_max_version === \"string\" ? manifest.pm_max_version : undefined,\n engines: manifest.engines,\n trusted: manifest.trusted,\n provenance: manifest.provenance,\n sandbox_profile: manifest.sandbox_profile,\n permissions: manifest.permissions,\n activation: manifest.activation,\n module,\n },\n ],\n });\n}\n\n/**\n * Assert that a normalized package manifest advertises expected package\n * resources. Pair with `readPmPackageManifest(packageRoot)` in package tests.\n */\nexport function assertPackageManifest(\n manifest: PmPackageManifest,\n expectation: PackageManifestExpectation,\n): PmPackageManifest {\n if (expectation.packageName !== undefined && manifest.package_name !== expectation.packageName) {\n throw new Error(\n `Expected package manifest package_name to be \"${expectation.packageName}\"; received \"${\n manifest.package_name ?? \"(none)\"\n }\"`,\n );\n }\n if (expectation.aliases !== undefined) {\n assertStringSetIncludes(manifest.aliases, expectation.aliases, \"aliases\");\n }\n if (expectation.resources !== undefined) {\n for (const [kind, expectedPaths] of Object.entries(expectation.resources) as Array<\n [PmPackageResourceKind, readonly string[]]\n >) {\n assertStringSetIncludes(manifest.resources[kind], expectedPaths, `pm.${kind}`);\n }\n }\n return manifest;\n}\n\n/**\n * Assert that an activated extension registration registry contains a command\n * contract with the expected public metadata.\n */\nexport function assertRegisteredCommandContract(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredCommandContractExpectation,\n): RegisteredCommandContractAssertion {\n const expectedCommand = normalizeSdkCommandName(expectation.command);\n if (expectedCommand.length === 0) {\n throw new Error(\"Expected command name must be a non-empty string\");\n }\n\n const commandCandidates = registrations.commands.filter((entry) => entry.command === expectedCommand);\n const command = expectation.extensionName\n ? commandCandidates.find((entry) => entry.name === expectation.extensionName)\n : commandCandidates[0];\n if (!command) {\n const available = registrations.commands.map((entry) => entry.command).sort((left, right) => left.localeCompare(right));\n const extensionSuffix = expectation.extensionName ? ` from extension \"${expectation.extensionName}\"` : \"\";\n throw new Error(\n `Expected extension command \"${expectedCommand}\"${extensionSuffix} to be registered. Available commands: ${formatAvailable(\n available,\n )}`,\n );\n }\n\n if (expectation.action !== undefined && command.action !== expectation.action) {\n throw new Error(\n `Expected extension command \"${expectedCommand}\" action \"${expectation.action}\", received \"${command.action}\"`,\n );\n }\n\n if (expectation.arguments !== undefined) {\n const actualArguments = (command.arguments ?? []).map((argument) => argument.name);\n const missingArguments = expectation.arguments.filter((argument) => !actualArguments.includes(argument));\n if (missingArguments.length > 0) {\n throw new Error(\n `Expected extension command \"${expectedCommand}\" arguments ${formatAvailable(\n expectation.arguments,\n )}; missing ${formatAvailable(missingArguments)}; available ${formatAvailable(actualArguments)}`,\n );\n }\n }\n\n const flags = registrations.flags\n .filter(\n (entry) =>\n entry.target_command === expectedCommand &&\n (expectation.extensionName === undefined || entry.name === expectation.extensionName),\n )\n .flatMap((entry) => entry.flags);\n\n if (expectation.flags !== undefined) {\n const actualFlagLabels = collectFlagLabels(flags);\n const missingFlags = expectation.flags.filter((flag) => !actualFlagLabels.has(flag));\n if (missingFlags.length > 0) {\n throw new Error(\n `Expected extension command \"${expectedCommand}\" flags ${formatAvailable(expectation.flags)}; missing ${formatAvailable(\n missingFlags,\n )}; available ${formatAvailable([...actualFlagLabels].sort((left, right) => left.localeCompare(right)))}`,\n );\n }\n }\n\n return { command, flags };\n}\n\n/**\n * Assert that an activated extension hook registry contains a hook of the\n * expected lifecycle kind (optionally scoped to a specific extension).\n *\n * Hooks are surfaced via `ExtensionActivationResult.hooks`, not the command\n * registration registry, so this helper accepts an `ExtensionHookRegistry`.\n */\nexport function assertRegisteredHook<TKind extends RegisteredHookKind>(\n hooks: ExtensionHookRegistry,\n expectation: RegisteredHookExpectation & { kind: TKind },\n): ExtensionHookRegistry[(typeof HOOK_KIND_TO_REGISTRY_FIELD)[TKind]][number] {\n const field = HOOK_KIND_TO_REGISTRY_FIELD[expectation.kind];\n const candidates = hooks[field] as ReadonlyArray<RegisteredExtensionHook<unknown>>;\n const hook = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!hook) {\n const available = sortedUnique(candidates.map((entry) => entry.name));\n throw new Error(\n `Expected a \"${expectation.kind}\" hook${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available \"${expectation.kind}\" hooks: ${formatAvailable(available)}`,\n );\n }\n\n return hook as ExtensionHookRegistry[(typeof HOOK_KIND_TO_REGISTRY_FIELD)[TKind]][number];\n}\n\n/**\n * Assert that an activated extension registration registry contains a search\n * provider with the expected name (optionally scoped to a specific extension).\n */\nexport function assertRegisteredSearchProvider(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredSearchProviderExpectation,\n): RegisteredExtensionSearchProvider {\n const expectedProvider = normalizeSdkIdentifier(expectation.provider);\n if (expectedProvider.length === 0) {\n throw new Error(\"Expected search provider name must be a non-empty string\");\n }\n\n const candidates = registrations.search_providers.filter(\n (entry) => normalizeSdkIdentifier(entry.definition.name) === expectedProvider,\n );\n const provider = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!provider) {\n const available = sortedUnique(registrations.search_providers.map((entry) => entry.definition.name));\n throw new Error(\n `Expected search provider \"${expectedProvider}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available search providers: ${formatAvailable(available)}`,\n );\n }\n\n return provider;\n}\n\n/**\n * Assert that an activated extension registration registry contains a vector\n * store adapter with the expected name (optionally scoped to a specific\n * extension).\n */\nexport function assertRegisteredVectorStoreAdapter(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredVectorStoreAdapterExpectation,\n): RegisteredExtensionVectorStoreAdapter {\n const expectedAdapter = normalizeSdkIdentifier(expectation.adapter);\n if (expectedAdapter.length === 0) {\n throw new Error(\"Expected vector store adapter name must be a non-empty string\");\n }\n\n const candidates = registrations.vector_store_adapters.filter(\n (entry) => normalizeSdkIdentifier(entry.definition.name) === expectedAdapter,\n );\n const adapter = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!adapter) {\n const available = sortedUnique(registrations.vector_store_adapters.map((entry) => entry.definition.name));\n throw new Error(\n `Expected vector store adapter \"${expectedAdapter}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available vector store adapters: ${formatAvailable(available)}`,\n );\n }\n\n return adapter;\n}\n\n/**\n * Assert that an activated extension registration registry contains an importer\n * for the expected format/name (optionally scoped to a specific extension).\n */\nexport function assertRegisteredImporter(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredImporterExpectation,\n): RegisteredExtensionImporter {\n const expectedImporter = normalizeSdkIdentifier(expectation.importer);\n if (expectedImporter.length === 0) {\n throw new Error(\"Expected importer name must be a non-empty string\");\n }\n\n const candidates = registrations.importers.filter(\n (entry) => normalizeSdkIdentifier(entry.importer) === expectedImporter,\n );\n const importer = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!importer) {\n const available = sortedUnique(registrations.importers.map((entry) => entry.importer));\n throw new Error(\n `Expected importer \"${expectedImporter}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available importers: ${formatAvailable(available)}`,\n );\n }\n\n return importer;\n}\n\n/**\n * Assert that an activated extension registration registry contains an exporter\n * for the expected format/name (optionally scoped to a specific extension).\n */\nexport function assertRegisteredExporter(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredExporterExpectation,\n): RegisteredExtensionExporter {\n const expectedExporter = normalizeSdkIdentifier(expectation.exporter);\n if (expectedExporter.length === 0) {\n throw new Error(\"Expected exporter name must be a non-empty string\");\n }\n\n const candidates = registrations.exporters.filter(\n (entry) => normalizeSdkIdentifier(entry.exporter) === expectedExporter,\n );\n const exporter = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!exporter) {\n const available = sortedUnique(registrations.exporters.map((entry) => entry.exporter));\n throw new Error(\n `Expected exporter \"${expectedExporter}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available exporters: ${formatAvailable(available)}`,\n );\n }\n\n return exporter;\n}\n\n/**\n * Assert that an activated extension registration registry contains a custom\n * item field definition (optionally scoped to a specific extension).\n */\nexport function assertRegisteredItemField(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredItemFieldExpectation,\n): RegisteredItemFieldAssertion {\n const expectedField = normalizeSdkIdentifier(expectation.field);\n if (expectedField.length === 0) {\n throw new Error(\"Expected item field name must be a non-empty string\");\n }\n\n const candidates = registrations.item_fields\n .filter((entry) => expectation.extensionName === undefined || entry.name === expectation.extensionName)\n .map((registration) => ({\n registration,\n field: registration.fields.find((field) => normalizeSdkIdentifier(field.name) === expectedField),\n }))\n .filter((entry): entry is RegisteredItemFieldAssertion => entry.field !== undefined);\n\n const match = candidates.find((entry) => expectation.type === undefined || entry.field.type === expectation.type);\n if (!match) {\n const available = sortedUnique(\n registrations.item_fields.flatMap((entry) => entry.fields.map((field) => `${field.name}:${field.type}`)),\n );\n throw new Error(\n `Expected item field \"${expectedField}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available item fields: ${formatAvailable(available)}`,\n );\n }\n\n return match;\n}\n\n/**\n * Assert that an activated extension registration registry contains a custom\n * item type definition (optionally scoped to a specific extension).\n */\nexport function assertRegisteredItemType(\n registrations: ExtensionRegistrationRegistry,\n expectation: RegisteredItemTypeExpectation,\n): RegisteredItemTypeAssertion {\n const expectedType = normalizeSdkIdentifier(expectation.itemType);\n if (expectedType.length === 0) {\n throw new Error(\"Expected item type name must be a non-empty string\");\n }\n\n const candidates = registrations.item_types\n .filter((entry) => expectation.extensionName === undefined || entry.name === expectation.extensionName)\n .map((registration) => ({\n registration,\n itemType: registration.types.find((itemType) => normalizeSdkIdentifier(itemType.name) === expectedType),\n }))\n .filter((entry): entry is RegisteredItemTypeAssertion => entry.itemType !== undefined);\n\n const match = candidates.find((entry) => expectation.folder === undefined || entry.itemType.folder === expectation.folder);\n if (!match) {\n const available = sortedUnique(\n registrations.item_types.flatMap((entry) => entry.types.map((itemType) => `${itemType.name}:${itemType.folder}`)),\n );\n throw new Error(\n `Expected item type \"${expectedType}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available item types: ${formatAvailable(available)}`,\n );\n }\n\n return match;\n}\n\n/**\n * Assert that an activated extension command registry contains a command\n * override registered via `api.registerCommand(command, override)` (optionally\n * scoped to a specific extension).\n *\n * Command overrides are surfaced via `ExtensionActivationResult.commands`, not\n * the command registration registry, so this helper accepts an\n * `ExtensionCommandRegistry`.\n */\nexport function assertRegisteredCommandOverride(\n commands: ExtensionCommandRegistry,\n expectation: RegisteredCommandOverrideExpectation,\n): RegisteredExtensionCommandOverride {\n const expectedCommand = normalizeSdkCommandName(expectation.command);\n if (expectedCommand.length === 0) {\n throw new Error(\"Expected command name must be a non-empty string\");\n }\n\n const candidates = commands.overrides.filter((entry) => entry.command === expectedCommand);\n const override = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!override) {\n const available = sortedUnique(commands.overrides.map((entry) => entry.command));\n throw new Error(\n `Expected command override \"${expectedCommand}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available command overrides: ${formatAvailable(available)}`,\n );\n }\n\n return override;\n}\n\n/**\n * Assert that an activated extension parser registry contains a parser override\n * registered via `api.registerParser(command, override)` (optionally scoped to\n * a specific extension).\n *\n * Parser overrides are surfaced via `ExtensionActivationResult.parsers`, not the\n * command registration registry, so this helper accepts an\n * `ExtensionParserRegistry`.\n */\nexport function assertRegisteredParserOverride(\n parsers: ExtensionParserRegistry,\n expectation: RegisteredParserOverrideExpectation,\n): RegisteredExtensionParserOverride {\n const expectedCommand = normalizeSdkCommandName(expectation.command);\n if (expectedCommand.length === 0) {\n throw new Error(\"Expected command name must be a non-empty string\");\n }\n\n const candidates = parsers.overrides.filter((entry) => entry.command === expectedCommand);\n const override = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!override) {\n const available = sortedUnique(parsers.overrides.map((entry) => entry.command));\n throw new Error(\n `Expected parser override \"${expectedCommand}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available parser overrides: ${formatAvailable(available)}`,\n );\n }\n\n return override;\n}\n\n/**\n * Assert that an activated extension preflight registry contains a preflight\n * override registered via `api.registerPreflight(override)` (optionally scoped\n * to a specific extension).\n *\n * Preflight overrides are global (they run for every command and carry no\n * `command` field), so the expectation only accepts an optional\n * `extensionName`. Preflight overrides are surfaced via\n * `ExtensionActivationResult.preflight`.\n */\nexport function assertRegisteredPreflightOverride(\n preflight: ExtensionPreflightRegistry,\n expectation: RegisteredPreflightOverrideExpectation = {},\n): RegisteredExtensionPreflightOverride {\n const override = expectation.extensionName\n ? preflight.overrides.find((entry) => entry.name === expectation.extensionName)\n : preflight.overrides[0];\n if (!override) {\n const available = sortedUnique(preflight.overrides.map((entry) => entry.name));\n throw new Error(\n `Expected a preflight override${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available preflight overrides: ${formatAvailable(available)}`,\n );\n }\n\n return override;\n}\n\n/**\n * Assert that an activated extension renderer registry contains a renderer\n * override registered via `api.registerRenderer(format, renderer)` for the\n * expected output format (optionally scoped to a specific extension).\n *\n * Renderer overrides are surfaced via `ExtensionActivationResult.renderers`.\n */\nexport function assertRegisteredRendererOverride(\n renderers: ExtensionRendererRegistry,\n expectation: RegisteredRendererOverrideExpectation,\n): RegisteredExtensionRendererOverride {\n const expectedFormat = normalizeSdkIdentifier(expectation.format);\n if (expectedFormat.length === 0) {\n throw new Error(\"Expected renderer format must be a non-empty string\");\n }\n\n const candidates = renderers.overrides.filter((entry) => entry.format === expectedFormat);\n const override = expectation.extensionName\n ? candidates.find((entry) => entry.name === expectation.extensionName)\n : candidates[0];\n if (!override) {\n const available = sortedUnique(renderers.overrides.map((entry) => entry.format));\n throw new Error(\n `Expected renderer override \"${expectedFormat}\"${extensionNameSuffix(\n expectation.extensionName,\n )} to be registered. Available renderer overrides: ${formatAvailable(available)}`,\n );\n }\n\n return override;\n}\n"],"names":[],"mappings":"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","debugId":"43b78d54-eeb1-571e-8e88-e67b2432cfd6"}
@@ -102,8 +102,10 @@ Current resource kinds are:
102
102
  - `extensions`
103
103
  - `docs`
104
104
  - `examples`
105
+ - `assets`
106
+ - `prompts`
105
107
 
106
- Installation activates `pm.extensions`. `pm.docs` and `pm.examples` are catalog metadata. Agent-specific assets such as prompts, skills, or MCP servers should live in agent adapter packages, not in the core `pm` package contract.
108
+ Installation activates `pm.extensions`. `pm.docs`, `pm.examples`, `pm.assets`, and `pm.prompts` are catalog metadata (metadata-only they are discovered and surfaced in the catalog but not executed). Declare agent-facing prompt/slash-command markdown under `pm.prompts` and non-code assets (images, skills, fixtures) under `pm.assets`; their conventional roots are `prompts/` (also `.agents/pm/prompts/`) and `assets/` (also `.agents/pm/assets/`).
107
109
 
108
110
  `pm package init` emits a root extension (`"extensions": ["."]`) so local package installs can activate without dependency bootstrapping. Larger packages may point at nested extension directories after declaring runtime dependencies and validating with `pm package doctor`.
109
111
 
@@ -288,9 +290,10 @@ import { defineExtension } from "@unbrained/pm-cli/sdk";
288
290
 
289
291
  Common APIs:
290
292
 
293
+ - `api.extension` is a read-only identity (`name`, `layer`, `version`, `capabilities`, `pm_min_version?`, `pm_max_version?`, `source_package?`) for self-identifying logs and version gating without re-reading the manifest.
291
294
  - `api.registerCommand(definition)` adds package-owned commands.
292
- - `api.registerFlags(command, flags)` adds runtime command flags.
293
- - `api.registerItemFields(fields)` adds custom metadata fields. Agents can set declared fields with repeatable `pm create --field name=value` and `pm update <id> --field name=value`; undeclared names are rejected.
295
+ - `api.registerFlags(command, flags)` adds runtime command flags. A flag may declare `value_type` (canonical; the legacy `type` alias is honored only when `value_type` is absent), `list: true` to accumulate repeated/comma-joined values like core `--tags`, and a `default` applied when the flag is omitted.
296
+ - `api.registerItemFields(fields)` adds custom metadata fields. Agents can set declared fields with repeatable `pm create --field name=value` and `pm update <id> --field name=value`; undeclared names are rejected. Each field `type` is validated against `string | number | boolean | array | object` at activation, with a did-you-mean hint on typos.
294
297
  - `api.registerItemTypes(types)` adds custom item types.
295
298
  - `api.registerMigration(definition)` adds schema migrations.
296
299
  - `api.registerService("output_format", handler)` customizes output formatting through the service override API. Return `context.payload`, `null`, or `undefined` for commands the extension does not own.
@@ -300,6 +303,7 @@ Common APIs:
300
303
  item entries for mutations, including `previous_status`, `status`,
301
304
  `changed_fields`, and partial `previous`/`current` front matter snapshots.
302
305
  `onWrite` always includes `path`, `scope`, and `op`; item mutations also add optional `item_id`, `item_type`, `before`, `after`, and `changed_fields`.
306
+ - An optional module-level `deactivate()` export (VS Code-style) is invoked by the host on shutdown/reload — including by the long-running MCP server between native-action requests — to close connections, clear timers, and release resources opened during `activate`. Teardown is best-effort and never blocks other extensions.
303
307
 
304
308
  The bundled `pm-lifecycle-hooks` package is the hook exemplar: it declares only
305
309
  `hooks` and registers a default-inert `afterCommand` hook so authors can copy a
package/docs/SDK.md CHANGED
@@ -68,6 +68,10 @@ Testing helper exports (also under `@unbrained/pm-cli/sdk/testing`):
68
68
  - `activateExtensionForTest`
69
69
  - `assertPackageManifest`
70
70
  - `assertRegisteredCommandContract`
71
+ - `assertRegisteredCommandOverride`
72
+ - `assertRegisteredParserOverride`
73
+ - `assertRegisteredPreflightOverride`
74
+ - `assertRegisteredRendererOverride`
71
75
  - `assertRegisteredHook`
72
76
  - `assertRegisteredSearchProvider`
73
77
  - `assertRegisteredImporter`
@@ -259,6 +263,80 @@ Manifest typing also accepts optional `engines` metadata:
259
263
 
260
264
  Use `pm_min_version` for the loader gate. Keep `engines` as package-manager and tooling metadata.
261
265
 
266
+ ## Self-Identity and Lifecycle
267
+
268
+ `activate(api)` receives a read-only `api.extension` describing the extension it
269
+ was created for, so authors can emit self-identifying logs, gate on their own
270
+ version, and build better error messages without re-reading the manifest:
271
+
272
+ ```ts
273
+ export default defineExtension({
274
+ activate(api) {
275
+ // api.extension: { name, layer, version, capabilities, pm_min_version?, pm_max_version?, source_package? }
276
+ if (api.extension.version.startsWith("0.")) {
277
+ api.hooks.afterCommand(() => {
278
+ // ...pre-1.0 behaviour, labelled with api.extension.name
279
+ });
280
+ }
281
+ },
282
+ });
283
+ ```
284
+
285
+ `api.extension.capabilities` is filtered to the canonical capability set, and both
286
+ the object and its `capabilities` array are frozen.
287
+
288
+ Modules may also export an optional VS Code-style `deactivate` teardown hook. The
289
+ host runs it on shutdown/reload — the long-running MCP server invokes it between
290
+ native-action requests — so an extension can close connections, clear timers, and
291
+ release buffers opened during `activate`. `deactivate` runs only for extensions
292
+ that activated successfully (a failed `activate` never fully initialized), and
293
+ teardowns run concurrently. Teardown is best-effort: a throwing `deactivate` is
294
+ recorded as a warning, never propagated, so one extension cannot block another's
295
+ cleanup.
296
+
297
+ ```ts
298
+ export default defineExtension({
299
+ activate(api) {
300
+ /* open resources */
301
+ },
302
+ async deactivate() {
303
+ /* close connections, flush sinks, clear timers */
304
+ },
305
+ });
306
+ ```
307
+
308
+ ## Flag Contracts
309
+
310
+ `FlagDefinition` (used by `registerFlags` and inline command `flags`) supports the
311
+ same list/default semantics as core flags:
312
+
313
+ - `value_type` is the canonical coercion kind (`string` | `number` | `boolean`;
314
+ the aliases `int`/`integer`/`float` and `bool` are also accepted). The
315
+ deprecated `type` alias is still read, but `value_type` wins when both are set
316
+ (`value_type ?? type`). An unrecognized value type is rejected at registration.
317
+ - `list: true` makes a repeated, comma-joined flag accumulate into an array —
318
+ parity with core list flags such as `--tags`. `--scope a,b --scope c` resolves
319
+ to `["a", "b", "c"]`, with each element coerced by `value_type`.
320
+ - `default` (a scalar, or an array of scalars for a `list` flag) is applied when
321
+ the flag is omitted; for a `list` flag the default is flattened into the
322
+ accumulated array exactly like a provided value — comma-joined strings (e.g.
323
+ `default: "a,b"` or `default: ["a,b", "c"]`) are split into elements. A default
324
+ that would not cleanly coerce under the declared `value_type` (e.g.
325
+ `value_type: "number", default: "abc"`) is rejected at registration.
326
+
327
+ ```ts
328
+ api.registerFlags("report", [
329
+ { long: "--scope", value_type: "string", list: true, default: "all" },
330
+ { long: "--limit", value_type: "number", default: 20 },
331
+ ]);
332
+ ```
333
+
334
+ `registerItemFields` validates each declared field `type` against the canonical
335
+ coercion kinds (`string`, `number`, `boolean`, `array`, `object`) at activation.
336
+ A typo fails activation with a did-you-mean hint (e.g. `type: "strnig"` →
337
+ `Did you mean "string"?`) instead of silently passing and failing opaquely at use
338
+ time.
339
+
262
340
  ## Expected CLI Errors
263
341
 
264
342
  Package commands should throw expected user/action errors with the public SDK shape so the CLI can preserve exit codes and Sentry can filter expected retry failures:
@@ -408,6 +486,26 @@ const hook = assertRegisteredHook(activation.hooks, {
408
486
  // hook.run is the registered OnWriteHook handler
409
487
  ```
410
488
 
489
+ Override registrations from `registerCommand(command, override)`, `registerParser`,
490
+ `registerPreflight`, and `registerRenderer` live on `activation.commands`,
491
+ `activation.parsers`, `activation.preflight`, and `activation.renderers` (not the
492
+ registration registry). Each override helper takes the matching registry and
493
+ returns the registered entry (so you can invoke `entry.run` directly):
494
+
495
+ ```ts
496
+ import {
497
+ assertRegisteredCommandOverride,
498
+ assertRegisteredParserOverride,
499
+ assertRegisteredPreflightOverride,
500
+ assertRegisteredRendererOverride,
501
+ } from "@unbrained/pm-cli/sdk/testing";
502
+
503
+ assertRegisteredCommandOverride(activation.commands, { command: "list" });
504
+ assertRegisteredParserOverride(activation.parsers, { command: "list", extensionName: "my-ext" });
505
+ assertRegisteredPreflightOverride(activation.preflight); // preflight overrides are global (no command)
506
+ assertRegisteredRendererOverride(activation.renderers, { format: "toon" });
507
+ ```
508
+
411
509
  The bundled `pm-lifecycle-hooks` package is the first-party hooks exemplar. It
412
510
  declares only the `hooks` capability and registers a default-inert `afterCommand`
413
511
  hook, so package authors can copy a lifecycle pattern that does not write files,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unbrained/pm-cli",
3
- "version": "2026.6.8",
3
+ "version": "2026.6.9",
4
4
  "description": "Git-native project management CLI for humans and agents.",
5
5
  "type": "module",
6
6
  "author": "unbrained",
@@ -1,16 +0,0 @@
1
- import {
2
- runActivity
3
- } from "./chunk-UEXNNF3K.js";
4
- import "./chunk-2YPVCD7T.js";
5
- import "./chunk-MSH23UWO.js";
6
- import "./chunk-FGRJZVXD.js";
7
- import "./chunk-2HMD3JM2.js";
8
- import "./chunk-K62SNVVE.js";
9
- import "./chunk-M7UBTVFT.js";
10
- import "./chunk-2BYKYPWY.js";
11
- import "./chunk-QFVASU44.js";
12
- import "./chunk-3TXWDGPU.js";
13
- export {
14
- runActivity
15
- };
16
- //# sourceMappingURL=activity-A3QKFSSF.js.map