@unbrained/pm-cli 2026.6.21 → 2026.6.22

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 (406) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/cli/commands/completion.js +5 -3
  3. package/dist/cli/commands/completion.js.map +1 -1
  4. package/dist/cli/commands/extension/doctor.d.ts +11 -0
  5. package/dist/cli/commands/extension/doctor.js +31 -2
  6. package/dist/cli/commands/extension/doctor.js.map +1 -1
  7. package/dist/cli/commands/extension/scaffold.d.ts +16 -2
  8. package/dist/cli/commands/extension/scaffold.js +481 -48
  9. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  10. package/dist/cli/commands/extension.d.ts +1 -0
  11. package/dist/cli/commands/extension.js +9 -4
  12. package/dist/cli/commands/extension.js.map +1 -1
  13. package/dist/cli/help-content.js +16 -4
  14. package/dist/cli/help-content.js.map +1 -1
  15. package/dist/cli/register-setup.js +6 -2
  16. package/dist/cli/register-setup.js.map +1 -1
  17. package/dist/cli-bundle/chunks/{activity-KW3IRP44.js → activity-DXS2XMQU.js} +11 -11
  18. package/dist/cli-bundle/chunks/activity-NEOI45NX.js +18 -0
  19. package/dist/cli-bundle/chunks/{aggregate-FIGQEIL3.js → aggregate-IHM4KMQ3.js} +10 -10
  20. package/dist/cli-bundle/chunks/{aggregate-3ZKQG5SW.js → aggregate-NMYDVQF7.js} +10 -10
  21. package/dist/cli-bundle/chunks/{append-EWJYJ7CH.js → append-3HY5G7ET.js} +8 -8
  22. package/dist/cli-bundle/chunks/{append-QEOLX3XB.js → append-K54MDQYC.js} +8 -8
  23. package/dist/cli-bundle/chunks/{chunk-CF55WVVS.js → chunk-25XZN3JD.js} +2 -2
  24. package/dist/cli-bundle/chunks/{chunk-WQ7NIVDK.js → chunk-2LEYMXI6.js} +4 -4
  25. package/dist/cli-bundle/chunks/chunk-3GL6LTUL.js +643 -0
  26. package/dist/cli-bundle/chunks/chunk-3GL6LTUL.js.map +1 -0
  27. package/dist/cli-bundle/chunks/{chunk-FRUFKWNK.js → chunk-3VLPDG3J.js} +2 -2
  28. package/dist/cli-bundle/chunks/{chunk-C3AZ5ZML.js → chunk-44O4JIN6.js} +13 -13
  29. package/dist/cli-bundle/chunks/{chunk-J4MYYSOL.js → chunk-47HTJ6BU.js} +5 -5
  30. package/dist/cli-bundle/chunks/{chunk-YCJX76PW.js → chunk-4JXWVHMN.js} +2 -2
  31. package/dist/cli-bundle/chunks/{chunk-37QXHBIB.js → chunk-4SDKF5BG.js} +3 -3
  32. package/dist/cli-bundle/chunks/chunk-4YJA4LGU.js +646 -0
  33. package/dist/cli-bundle/chunks/chunk-4YJA4LGU.js.map +7 -0
  34. package/dist/cli-bundle/chunks/{chunk-NJHMAJ6N.js → chunk-5SESR24H.js} +8 -8
  35. package/dist/cli-bundle/chunks/{chunk-2EIMPCE4.js → chunk-6FQHNHQQ.js} +3 -3
  36. package/dist/cli-bundle/chunks/{chunk-5FIEHKEX.js → chunk-6UPTNMVW.js} +5 -5
  37. package/dist/cli-bundle/chunks/{chunk-FKBDKV7Y.js → chunk-75VEYQJS.js} +3 -3
  38. package/dist/cli-bundle/chunks/{chunk-GMHPNNYG.js → chunk-77VKGH4L.js} +10 -10
  39. package/dist/cli-bundle/chunks/{chunk-5PCI3UBT.js → chunk-7GCCDXXN.js} +55 -266
  40. package/dist/cli-bundle/chunks/chunk-7GCCDXXN.js.map +7 -0
  41. package/dist/cli-bundle/chunks/{chunk-OFYMIDF2.js → chunk-7MALIV5H.js} +9 -9
  42. package/dist/cli-bundle/chunks/{chunk-A4Z7ZOL5.js → chunk-7MPTFYT3.js} +20 -15
  43. package/dist/cli-bundle/chunks/chunk-7MPTFYT3.js.map +1 -0
  44. package/dist/cli-bundle/chunks/{chunk-RLK7P77C.js → chunk-7PBGTIN3.js} +5 -5
  45. package/dist/cli-bundle/chunks/{chunk-6H4LF7AO.js → chunk-A25LOPRG.js} +2 -2
  46. package/dist/cli-bundle/chunks/{chunk-M5XALUSL.js → chunk-A7E4ZXG2.js} +2 -2
  47. package/dist/cli-bundle/chunks/{chunk-7D3SAQXM.js → chunk-AJXYOYJV.js} +2 -2
  48. package/dist/cli-bundle/chunks/{chunk-HCU6WUSY.js → chunk-B2KR24R4.js} +9 -9
  49. package/dist/cli-bundle/chunks/{chunk-2GCDRRIF.js → chunk-C5SWTISA.js} +12 -12
  50. package/dist/cli-bundle/chunks/{chunk-AIS5PGI3.js → chunk-CLLVBO3I.js} +2 -2
  51. package/dist/cli-bundle/chunks/{chunk-QGG32QHW.js → chunk-CR7KFPAQ.js} +3 -3
  52. package/dist/cli-bundle/chunks/{chunk-UV6IYE5U.js → chunk-CWPBGUC7.js} +2 -2
  53. package/dist/cli-bundle/chunks/{chunk-32R4PIC6.js → chunk-D35LTIFR.js} +55 -259
  54. package/dist/cli-bundle/chunks/chunk-D35LTIFR.js.map +1 -0
  55. package/dist/cli-bundle/chunks/{chunk-QQHISQBJ.js → chunk-DBQUQ3AS.js} +3 -3
  56. package/dist/cli-bundle/chunks/{chunk-5QICDWMV.js → chunk-DHBPJ7VG.js} +2 -2
  57. package/dist/cli-bundle/chunks/{chunk-SRYYRVPB.js → chunk-DMT4ODVN.js} +2 -2
  58. package/dist/cli-bundle/chunks/{chunk-PUH4D67U.js → chunk-DU64SZUQ.js} +2 -2
  59. package/dist/cli-bundle/chunks/{chunk-C4N5I7ZW.js → chunk-EVPVCE4R.js} +3 -3
  60. package/dist/cli-bundle/chunks/{chunk-3EWSGA7N.js → chunk-FK6MV5F5.js} +12 -12
  61. package/dist/cli-bundle/chunks/{chunk-NIUEXCFS.js → chunk-GGAXE22C.js} +6 -6
  62. package/dist/cli-bundle/chunks/{chunk-SX75ADBK.js → chunk-GNDHOR64.js} +6 -6
  63. package/dist/cli-bundle/chunks/{chunk-GOZUHWFD.js → chunk-GU7YHKYP.js} +2 -2
  64. package/dist/cli-bundle/chunks/{chunk-NXS7ZKAK.js → chunk-GXBSFKSX.js} +4 -4
  65. package/dist/cli-bundle/chunks/{chunk-NJN7LL7U.js → chunk-H6FNDCDI.js} +5 -5
  66. package/dist/cli-bundle/chunks/{chunk-FWPDUYEY.js → chunk-HYQV75IB.js} +7 -7
  67. package/dist/cli-bundle/chunks/{chunk-F5NZWFSW.js → chunk-I367IDZP.js} +7 -7
  68. package/dist/cli-bundle/chunks/{chunk-52OCIDPG.js → chunk-I6XE47J2.js} +5 -5
  69. package/dist/cli-bundle/chunks/{chunk-HIP7WVTL.js → chunk-J2TSPY5L.js} +4 -4
  70. package/dist/cli-bundle/chunks/{chunk-2PKHRP6G.js → chunk-JLSC5NPC.js} +10 -10
  71. package/dist/cli-bundle/chunks/{chunk-PP2U4NMT.js → chunk-JY25IOEZ.js} +5 -5
  72. package/dist/cli-bundle/chunks/{chunk-Q2J2HJUN.js → chunk-K25UDYJ4.js} +2 -2
  73. package/dist/cli-bundle/chunks/{chunk-SBGXDO7A.js → chunk-KBTREGVO.js} +3 -3
  74. package/dist/cli-bundle/chunks/{chunk-QZTWBFXJ.js → chunk-KK4TQ3ZP.js} +2 -2
  75. package/dist/cli-bundle/chunks/{chunk-434HM6Z5.js → chunk-KL5ELX2X.js} +81 -3
  76. package/dist/cli-bundle/chunks/chunk-KL5ELX2X.js.map +1 -0
  77. package/dist/cli-bundle/chunks/{chunk-NIGXMNNI.js → chunk-KRJJPDUO.js} +2 -2
  78. package/dist/cli-bundle/chunks/{chunk-AZMOLBN3.js → chunk-MD7XKVWI.js} +7 -7
  79. package/dist/cli-bundle/chunks/{chunk-6ZXM2XNF.js → chunk-MNGAQB2E.js} +8 -8
  80. package/dist/cli-bundle/chunks/{chunk-3MDHREEV.js → chunk-NIWY4V4Z.js} +3 -3
  81. package/dist/cli-bundle/chunks/{chunk-TKBHZPKD.js → chunk-NKZOJPXK.js} +3 -3
  82. package/dist/cli-bundle/chunks/{chunk-CZPXY7UW.js → chunk-NVUATMTC.js} +3 -3
  83. package/dist/cli-bundle/chunks/{chunk-LEU5GHRC.js → chunk-P7ZU73BO.js} +3 -3
  84. package/dist/cli-bundle/chunks/{chunk-NSBZ2CKF.js → chunk-PCH2JTEO.js} +2 -2
  85. package/dist/cli-bundle/chunks/{chunk-B473GZWW.js → chunk-PJS2J7Z4.js} +3 -3
  86. package/dist/cli-bundle/chunks/{chunk-5IDI42VV.js → chunk-QQWEROGS.js} +7 -7
  87. package/dist/cli-bundle/chunks/{chunk-6M4RJS4M.js → chunk-RPRFBXND.js} +3 -3
  88. package/dist/cli-bundle/chunks/{chunk-HMOADQVT.js → chunk-RZZMSY4P.js} +88 -3
  89. package/dist/cli-bundle/chunks/chunk-RZZMSY4P.js.map +7 -0
  90. package/dist/cli-bundle/chunks/{chunk-N5ZJACJ6.js → chunk-SFKQAVZA.js} +8 -8
  91. package/dist/cli-bundle/chunks/{chunk-EBH56IXK.js → chunk-THKDPOS5.js} +8 -8
  92. package/dist/cli-bundle/chunks/{chunk-LUWW7L4B.js → chunk-TIKJAXQW.js} +3 -3
  93. package/dist/cli-bundle/chunks/{chunk-OTHIWLMB.js → chunk-TJABI6PR.js} +5 -5
  94. package/dist/cli-bundle/chunks/{chunk-HC4AWIKT.js → chunk-TRUFOER3.js} +19 -14
  95. package/dist/cli-bundle/chunks/{chunk-HC4AWIKT.js.map → chunk-TRUFOER3.js.map} +2 -2
  96. package/dist/cli-bundle/chunks/{chunk-76Z3YSHV.js → chunk-TZQKEBKF.js} +2 -2
  97. package/dist/cli-bundle/chunks/{chunk-PFSRUHDH.js → chunk-UKK2VTTH.js} +9 -9
  98. package/dist/cli-bundle/chunks/{chunk-H7NJZWG2.js → chunk-V4SM4UAL.js} +13 -13
  99. package/dist/cli-bundle/chunks/{chunk-CZUB4XWO.js → chunk-VB54F347.js} +2 -2
  100. package/dist/cli-bundle/chunks/{chunk-O47BPOPC.js → chunk-WBSYW3NT.js} +2 -2
  101. package/dist/cli-bundle/chunks/{chunk-UPE3CDD7.js → chunk-WQDX7DVG.js} +7 -7
  102. package/dist/cli-bundle/chunks/{chunk-NB3PYLQ6.js → chunk-XKNF3VRJ.js} +5 -5
  103. package/dist/cli-bundle/chunks/{chunk-F7K5GWP3.js → chunk-Y335KFHD.js} +9 -9
  104. package/dist/cli-bundle/chunks/{chunk-D7FYS6PG.js → chunk-Y4BZEND6.js} +2 -2
  105. package/dist/cli-bundle/chunks/{chunk-6CJWZAN7.js → chunk-YATDFWYK.js} +7 -7
  106. package/dist/cli-bundle/chunks/{chunk-UEMNL33O.js → chunk-YJICYNAV.js} +8 -8
  107. package/dist/cli-bundle/chunks/{chunk-Z6T4PQI2.js → chunk-YQSWTVZF.js} +4 -4
  108. package/dist/cli-bundle/chunks/{chunk-RVHYI7SL.js → chunk-YRLLL5TY.js} +8 -8
  109. package/dist/cli-bundle/chunks/{claim-RC56YUWG.js → claim-MPXNVBZQ.js} +10 -10
  110. package/dist/cli-bundle/chunks/{claim-THOJ6CMV.js → claim-SKHJDLW6.js} +10 -10
  111. package/dist/cli-bundle/chunks/{close-SG5MNCVQ.js → close-4RKSL5L6.js} +8 -8
  112. package/dist/cli-bundle/chunks/close-Z6AI736U.js +15 -0
  113. package/dist/cli-bundle/chunks/{close-many-DKQLBGLV.js → close-many-AWTPXLHJ.js} +15 -15
  114. package/dist/cli-bundle/chunks/{close-many-3L3AQZBU.js → close-many-SXODYBDP.js} +15 -15
  115. package/dist/cli-bundle/chunks/{comments-SKWMDWCW.js → comments-OOH64LWW.js} +10 -10
  116. package/dist/cli-bundle/chunks/{comments-M7ZOZNBX.js → comments-YYW5P7AG.js} +10 -10
  117. package/dist/cli-bundle/chunks/{config-OZCUABPB.js → config-3445MCQQ.js} +8 -8
  118. package/dist/cli-bundle/chunks/{config-7CK62S7T.js → config-LCDMKRB2.js} +8 -8
  119. package/dist/cli-bundle/chunks/{context-PUG2A7RC.js → context-DZMIBIVP.js} +13 -13
  120. package/dist/cli-bundle/chunks/{context-OEC366TO.js → context-PJCURODY.js} +13 -13
  121. package/dist/cli-bundle/chunks/{contracts-3THOLA7L.js → contracts-7YDFEJB3.js} +4 -4
  122. package/dist/cli-bundle/chunks/{contracts-N65FXEOL.js → contracts-MP2P3HL5.js} +4 -4
  123. package/dist/cli-bundle/chunks/{copy-JPX7VZCH.js → copy-63IQQRRS.js} +7 -7
  124. package/dist/cli-bundle/chunks/{copy-6QLHILAC.js → copy-TASIH2AZ.js} +7 -7
  125. package/dist/cli-bundle/chunks/create-3BV2VA3Q.js +30 -0
  126. package/dist/cli-bundle/chunks/{create-Y54ZVVZH.js → create-TGSB5GV4.js} +14 -14
  127. package/dist/cli-bundle/chunks/{delete-63PCMQAJ.js → delete-ARILQQLB.js} +7 -7
  128. package/dist/cli-bundle/chunks/{delete-GDSMGAGJ.js → delete-ZQKBZYNK.js} +7 -7
  129. package/dist/cli-bundle/chunks/{deps-T4ZF5G54.js → deps-MSHQR2GY.js} +7 -7
  130. package/dist/cli-bundle/chunks/{deps-XYQ73XRH.js → deps-NJFJIMQ5.js} +7 -7
  131. package/dist/cli-bundle/chunks/{docs-C75YIXHC.js → docs-SS4UKYYA.js} +9 -9
  132. package/dist/cli-bundle/chunks/{docs-EHNPDWUL.js → docs-XK2UVUXX.js} +9 -9
  133. package/dist/cli-bundle/chunks/{eval-GTENKE24.js → eval-FVZGX5IZ.js} +12 -12
  134. package/dist/cli-bundle/chunks/{eval-3WKDTRMH.js → eval-JOTG2YHU.js} +12 -12
  135. package/dist/cli-bundle/chunks/{extension-46NWACO3.js → extension-NLMS47I4.js} +6 -5
  136. package/dist/cli-bundle/chunks/{extension-D5FDZ2CO.js → extension-OQPS27B4.js} +6 -5
  137. package/dist/cli-bundle/chunks/{files-X3H7CCBQ.js → files-3EVJQZ2N.js} +9 -9
  138. package/dist/cli-bundle/chunks/{files-DSZBOSSN.js → files-Y2P6LN5A.js} +9 -9
  139. package/dist/cli-bundle/chunks/{focus-5STQXDPU.js → focus-D5ZUPTII.js} +8 -8
  140. package/dist/cli-bundle/chunks/{focus-MDVPOWB5.js → focus-ZPIFTY4R.js} +8 -8
  141. package/dist/cli-bundle/chunks/{gc-ZMST3WQP.js → gc-LXXDY456.js} +3 -3
  142. package/dist/cli-bundle/chunks/{gc-ZC7JHBG7.js → gc-RNOEQHSX.js} +3 -3
  143. package/dist/cli-bundle/chunks/{get-NT7L2HUZ.js → get-Q3SZGQHD.js} +11 -11
  144. package/dist/cli-bundle/chunks/{get-J2IPJRZW.js → get-W23G7MJX.js} +11 -11
  145. package/dist/cli-bundle/chunks/{health-WOYBR3KU.js → health-5LHSX365.js} +14 -13
  146. package/dist/cli-bundle/chunks/{health-WOYBR3KU.js.map → health-5LHSX365.js.map} +1 -1
  147. package/dist/cli-bundle/chunks/{health-IVMA3XQC.js → health-UDDGJLPP.js} +16 -15
  148. package/dist/cli-bundle/chunks/{health-IVMA3XQC.js.map → health-UDDGJLPP.js.map} +1 -1
  149. package/dist/cli-bundle/chunks/{history-RLH2QCRO.js → history-6CZVFIUJ.js} +10 -10
  150. package/dist/cli-bundle/chunks/history-YRQUD4YM.js +20 -0
  151. package/dist/cli-bundle/chunks/{history-compact-ZBEBGJM7.js → history-compact-M35PDQ4G.js} +12 -12
  152. package/dist/cli-bundle/chunks/{history-compact-UXDIFC33.js → history-compact-VWUSQH6Z.js} +12 -12
  153. package/dist/cli-bundle/chunks/history-redact-27OEOZRZ.js +21 -0
  154. package/dist/cli-bundle/chunks/{history-redact-P7I7AWMB.js → history-redact-AJGARHT3.js} +11 -11
  155. package/dist/cli-bundle/chunks/{history-repair-52KINVIK.js → history-repair-5RDMF7K4.js} +12 -12
  156. package/dist/cli-bundle/chunks/{history-repair-RM5ITLU5.js → history-repair-YUAHIPIN.js} +12 -12
  157. package/dist/cli-bundle/chunks/init-DWAKYRXI.js +21 -0
  158. package/dist/cli-bundle/chunks/{init-2BNZOO6F.js → init-HASX3YNJ.js} +11 -10
  159. package/dist/cli-bundle/chunks/{learnings-W6F3FIPL.js → learnings-JNGUIJDK.js} +10 -10
  160. package/dist/cli-bundle/chunks/{learnings-YGYVHWJK.js → learnings-M4KA6MQE.js} +10 -10
  161. package/dist/cli-bundle/chunks/{list-KPAYU5KZ.js → list-5UU2W24O.js} +10 -10
  162. package/dist/cli-bundle/chunks/{list-K6FPV4J4.js → list-6FMKTIH3.js} +10 -10
  163. package/dist/cli-bundle/chunks/{notes-YTD6ZILW.js → notes-MODH5CBT.js} +10 -10
  164. package/dist/cli-bundle/chunks/{notes-PU74EPKV.js → notes-PYCPLA5Y.js} +10 -10
  165. package/dist/cli-bundle/chunks/{plan-GEQYUCBW.js → plan-DXRIRYRU.js} +14 -14
  166. package/dist/cli-bundle/chunks/{plan-FNXHXRCI.js → plan-EHQALWSC.js} +14 -14
  167. package/dist/cli-bundle/chunks/{register-list-query-QI45RMKN.js → register-list-query-QAASVP2J.js} +19 -19
  168. package/dist/cli-bundle/chunks/{register-list-query-PHWYHENI.js → register-list-query-WE54YJMH.js} +19 -19
  169. package/dist/cli-bundle/chunks/{register-mutation-YINRTS7L.js → register-mutation-B6DZJTY2.js} +33 -33
  170. package/dist/cli-bundle/chunks/{register-mutation-X3BUOQEL.js → register-mutation-CPV4C2KR.js} +33 -33
  171. package/dist/cli-bundle/chunks/{register-operations-E5JEASRK.js → register-operations-AT3BVVX2.js} +32 -32
  172. package/dist/cli-bundle/chunks/{register-operations-MIDTRW7S.js → register-operations-RC4C3423.js} +32 -32
  173. package/dist/cli-bundle/chunks/{register-setup-EG2U6CEU.js → register-setup-HXEHMDHE.js} +23 -18
  174. package/dist/cli-bundle/chunks/register-setup-HXEHMDHE.js.map +7 -0
  175. package/dist/cli-bundle/chunks/{register-setup-DYBFLEZX.js → register-setup-JSMJEFCJ.js} +24 -19
  176. package/dist/cli-bundle/chunks/register-setup-JSMJEFCJ.js.map +1 -0
  177. package/dist/cli-bundle/chunks/{restore-XQYSWBV7.js → restore-FNBV4GWE.js} +11 -11
  178. package/dist/cli-bundle/chunks/restore-XY4YE2OV.js +19 -0
  179. package/dist/cli-bundle/chunks/{scheduling-shortcuts-HJMTEXKE.js → scheduling-shortcuts-ECL6GBMZ.js} +14 -14
  180. package/dist/cli-bundle/chunks/{scheduling-shortcuts-NNT5ASZR.js → scheduling-shortcuts-JRIUREEU.js} +14 -14
  181. package/dist/cli-bundle/chunks/{schema-TZXW6XWD.js → schema-74YENAJL.js} +9 -9
  182. package/dist/cli-bundle/chunks/{schema-263RI4WW.js → schema-TCW3I7QR.js} +9 -9
  183. package/dist/cli-bundle/chunks/{search-SFRJOVDG.js → search-7USZ6XZA.js} +12 -12
  184. package/dist/cli-bundle/chunks/{search-LECJYSXE.js → search-GNAUE65M.js} +12 -12
  185. package/dist/cli-bundle/chunks/{stats-VPBGSRQH.js → stats-CVHASAEU.js} +8 -8
  186. package/dist/cli-bundle/chunks/{stats-N7ER2PNK.js → stats-DQMKJMFT.js} +8 -8
  187. package/dist/cli-bundle/chunks/{telemetry-PP3FUNBU.js → telemetry-7P5EUWCS.js} +4 -4
  188. package/dist/cli-bundle/chunks/{telemetry-L6K3BUIQ.js → telemetry-PQTL5YS2.js} +4 -4
  189. package/dist/cli-bundle/chunks/test-COWPCGBE.js +36 -0
  190. package/dist/cli-bundle/chunks/{test-3EGNS3T5.js → test-FDQZQNZ4.js} +16 -15
  191. package/dist/cli-bundle/chunks/{test-all-ZHFAWNC3.js → test-all-PIPPS4S5.js} +18 -17
  192. package/dist/cli-bundle/chunks/{test-all-ZHFAWNC3.js.map → test-all-PIPPS4S5.js.map} +1 -1
  193. package/dist/cli-bundle/chunks/{test-all-NJ5V2QFS.js → test-all-WQIAZVA6.js} +16 -15
  194. package/dist/cli-bundle/chunks/{test-all-NJ5V2QFS.js.map → test-all-WQIAZVA6.js.map} +1 -1
  195. package/dist/cli-bundle/chunks/{test-runs-GN3C6GOI.js → test-runs-JS6DNCCI.js} +5 -5
  196. package/dist/cli-bundle/chunks/{test-runs-AJHR6IQF.js → test-runs-NZD2QGL5.js} +5 -5
  197. package/dist/cli-bundle/chunks/update-7IYQHX4Q.js +24 -0
  198. package/dist/cli-bundle/chunks/update-IJKDRBIX.js +28 -0
  199. package/dist/cli-bundle/chunks/{update-many-RYQ64CFW.js → update-many-6NTZ5J5D.js} +23 -23
  200. package/dist/cli-bundle/chunks/{update-many-N2AN6ZDH.js → update-many-B3TH5TDS.js} +23 -23
  201. package/dist/cli-bundle/chunks/{upgrade-VPCIYAVW.js → upgrade-4C7VE7MS.js} +8 -7
  202. package/dist/cli-bundle/chunks/{upgrade-VPCIYAVW.js.map → upgrade-4C7VE7MS.js.map} +1 -1
  203. package/dist/cli-bundle/chunks/{upgrade-TJXFLZIX.js → upgrade-76IKZ6EZ.js} +6 -5
  204. package/dist/cli-bundle/chunks/{upgrade-TJXFLZIX.js.map → upgrade-76IKZ6EZ.js.map} +1 -1
  205. package/dist/cli-bundle/chunks/{validate-PHKIYGSY.js → validate-AQU7OCL3.js} +21 -20
  206. package/dist/cli-bundle/chunks/{validate-PHKIYGSY.js.map → validate-AQU7OCL3.js.map} +1 -1
  207. package/dist/cli-bundle/chunks/{validate-JMNWEUYF.js → validate-BPM6Z3OT.js} +23 -22
  208. package/dist/cli-bundle/chunks/{validate-JMNWEUYF.js.map → validate-BPM6Z3OT.js.map} +1 -1
  209. package/dist/cli-bundle/main.js +34 -22
  210. package/dist/cli-bundle/main.js.map +2 -2
  211. package/dist/cli.js +3 -3
  212. package/dist/cli.js.map +1 -1
  213. package/dist/core/extensions/capability-usage.d.ts +82 -0
  214. package/dist/core/extensions/capability-usage.js +133 -0
  215. package/dist/core/extensions/capability-usage.js.map +1 -0
  216. package/dist/core/extensions/extension-capability-aliases.d.ts +7 -0
  217. package/dist/core/extensions/extension-capability-aliases.js +12 -2
  218. package/dist/core/extensions/extension-capability-aliases.js.map +1 -1
  219. package/dist/core/extensions/index.d.ts +1 -0
  220. package/dist/core/extensions/index.js +3 -2
  221. package/dist/core/extensions/index.js.map +1 -1
  222. package/dist/sdk/cli-contracts.d.ts +1 -0
  223. package/dist/sdk/cli-contracts.js +18 -13
  224. package/dist/sdk/cli-contracts.js.map +1 -1
  225. package/dist/sdk/index.d.ts +7 -2
  226. package/dist/sdk/index.js +8 -3
  227. package/dist/sdk/index.js.map +1 -1
  228. package/dist/sdk/testing.d.ts +520 -1
  229. package/dist/sdk/testing.js +477 -18
  230. package/dist/sdk/testing.js.map +1 -1
  231. package/docs/EXTENSIONS.md +4 -8
  232. package/docs/SDK.md +257 -0
  233. package/package.json +2 -2
  234. package/dist/cli-bundle/chunks/activity-CIHV64UC.js +0 -18
  235. package/dist/cli-bundle/chunks/chunk-32R4PIC6.js.map +0 -1
  236. package/dist/cli-bundle/chunks/chunk-434HM6Z5.js.map +0 -1
  237. package/dist/cli-bundle/chunks/chunk-5PCI3UBT.js.map +0 -7
  238. package/dist/cli-bundle/chunks/chunk-A4Z7ZOL5.js.map +0 -1
  239. package/dist/cli-bundle/chunks/chunk-HMOADQVT.js.map +0 -7
  240. package/dist/cli-bundle/chunks/close-DNMHGOCX.js +0 -15
  241. package/dist/cli-bundle/chunks/create-NNP6TSFO.js +0 -30
  242. package/dist/cli-bundle/chunks/history-WX3MGFS2.js +0 -20
  243. package/dist/cli-bundle/chunks/history-redact-YQGU3XRA.js +0 -21
  244. package/dist/cli-bundle/chunks/init-SC2P6CHP.js +0 -20
  245. package/dist/cli-bundle/chunks/register-setup-DYBFLEZX.js.map +0 -1
  246. package/dist/cli-bundle/chunks/register-setup-EG2U6CEU.js.map +0 -7
  247. package/dist/cli-bundle/chunks/restore-5KHR2YYQ.js +0 -19
  248. package/dist/cli-bundle/chunks/test-RQCTSWUK.js +0 -35
  249. package/dist/cli-bundle/chunks/update-6YXOGHRT.js +0 -24
  250. package/dist/cli-bundle/chunks/update-V33YUBRP.js +0 -28
  251. /package/dist/cli-bundle/chunks/{activity-KW3IRP44.js.map → activity-DXS2XMQU.js.map} +0 -0
  252. /package/dist/cli-bundle/chunks/{activity-CIHV64UC.js.map → activity-NEOI45NX.js.map} +0 -0
  253. /package/dist/cli-bundle/chunks/{aggregate-FIGQEIL3.js.map → aggregate-IHM4KMQ3.js.map} +0 -0
  254. /package/dist/cli-bundle/chunks/{aggregate-3ZKQG5SW.js.map → aggregate-NMYDVQF7.js.map} +0 -0
  255. /package/dist/cli-bundle/chunks/{append-EWJYJ7CH.js.map → append-3HY5G7ET.js.map} +0 -0
  256. /package/dist/cli-bundle/chunks/{append-QEOLX3XB.js.map → append-K54MDQYC.js.map} +0 -0
  257. /package/dist/cli-bundle/chunks/{chunk-CF55WVVS.js.map → chunk-25XZN3JD.js.map} +0 -0
  258. /package/dist/cli-bundle/chunks/{chunk-WQ7NIVDK.js.map → chunk-2LEYMXI6.js.map} +0 -0
  259. /package/dist/cli-bundle/chunks/{chunk-FRUFKWNK.js.map → chunk-3VLPDG3J.js.map} +0 -0
  260. /package/dist/cli-bundle/chunks/{chunk-C3AZ5ZML.js.map → chunk-44O4JIN6.js.map} +0 -0
  261. /package/dist/cli-bundle/chunks/{chunk-J4MYYSOL.js.map → chunk-47HTJ6BU.js.map} +0 -0
  262. /package/dist/cli-bundle/chunks/{chunk-YCJX76PW.js.map → chunk-4JXWVHMN.js.map} +0 -0
  263. /package/dist/cli-bundle/chunks/{chunk-37QXHBIB.js.map → chunk-4SDKF5BG.js.map} +0 -0
  264. /package/dist/cli-bundle/chunks/{chunk-NJHMAJ6N.js.map → chunk-5SESR24H.js.map} +0 -0
  265. /package/dist/cli-bundle/chunks/{chunk-2EIMPCE4.js.map → chunk-6FQHNHQQ.js.map} +0 -0
  266. /package/dist/cli-bundle/chunks/{chunk-5FIEHKEX.js.map → chunk-6UPTNMVW.js.map} +0 -0
  267. /package/dist/cli-bundle/chunks/{chunk-FKBDKV7Y.js.map → chunk-75VEYQJS.js.map} +0 -0
  268. /package/dist/cli-bundle/chunks/{chunk-GMHPNNYG.js.map → chunk-77VKGH4L.js.map} +0 -0
  269. /package/dist/cli-bundle/chunks/{chunk-OFYMIDF2.js.map → chunk-7MALIV5H.js.map} +0 -0
  270. /package/dist/cli-bundle/chunks/{chunk-RLK7P77C.js.map → chunk-7PBGTIN3.js.map} +0 -0
  271. /package/dist/cli-bundle/chunks/{chunk-6H4LF7AO.js.map → chunk-A25LOPRG.js.map} +0 -0
  272. /package/dist/cli-bundle/chunks/{chunk-M5XALUSL.js.map → chunk-A7E4ZXG2.js.map} +0 -0
  273. /package/dist/cli-bundle/chunks/{chunk-7D3SAQXM.js.map → chunk-AJXYOYJV.js.map} +0 -0
  274. /package/dist/cli-bundle/chunks/{chunk-HCU6WUSY.js.map → chunk-B2KR24R4.js.map} +0 -0
  275. /package/dist/cli-bundle/chunks/{chunk-2GCDRRIF.js.map → chunk-C5SWTISA.js.map} +0 -0
  276. /package/dist/cli-bundle/chunks/{chunk-AIS5PGI3.js.map → chunk-CLLVBO3I.js.map} +0 -0
  277. /package/dist/cli-bundle/chunks/{chunk-QGG32QHW.js.map → chunk-CR7KFPAQ.js.map} +0 -0
  278. /package/dist/cli-bundle/chunks/{chunk-UV6IYE5U.js.map → chunk-CWPBGUC7.js.map} +0 -0
  279. /package/dist/cli-bundle/chunks/{chunk-QQHISQBJ.js.map → chunk-DBQUQ3AS.js.map} +0 -0
  280. /package/dist/cli-bundle/chunks/{chunk-5QICDWMV.js.map → chunk-DHBPJ7VG.js.map} +0 -0
  281. /package/dist/cli-bundle/chunks/{chunk-SRYYRVPB.js.map → chunk-DMT4ODVN.js.map} +0 -0
  282. /package/dist/cli-bundle/chunks/{chunk-PUH4D67U.js.map → chunk-DU64SZUQ.js.map} +0 -0
  283. /package/dist/cli-bundle/chunks/{chunk-C4N5I7ZW.js.map → chunk-EVPVCE4R.js.map} +0 -0
  284. /package/dist/cli-bundle/chunks/{chunk-3EWSGA7N.js.map → chunk-FK6MV5F5.js.map} +0 -0
  285. /package/dist/cli-bundle/chunks/{chunk-NIUEXCFS.js.map → chunk-GGAXE22C.js.map} +0 -0
  286. /package/dist/cli-bundle/chunks/{chunk-SX75ADBK.js.map → chunk-GNDHOR64.js.map} +0 -0
  287. /package/dist/cli-bundle/chunks/{chunk-GOZUHWFD.js.map → chunk-GU7YHKYP.js.map} +0 -0
  288. /package/dist/cli-bundle/chunks/{chunk-NXS7ZKAK.js.map → chunk-GXBSFKSX.js.map} +0 -0
  289. /package/dist/cli-bundle/chunks/{chunk-NJN7LL7U.js.map → chunk-H6FNDCDI.js.map} +0 -0
  290. /package/dist/cli-bundle/chunks/{chunk-FWPDUYEY.js.map → chunk-HYQV75IB.js.map} +0 -0
  291. /package/dist/cli-bundle/chunks/{chunk-F5NZWFSW.js.map → chunk-I367IDZP.js.map} +0 -0
  292. /package/dist/cli-bundle/chunks/{chunk-52OCIDPG.js.map → chunk-I6XE47J2.js.map} +0 -0
  293. /package/dist/cli-bundle/chunks/{chunk-HIP7WVTL.js.map → chunk-J2TSPY5L.js.map} +0 -0
  294. /package/dist/cli-bundle/chunks/{chunk-2PKHRP6G.js.map → chunk-JLSC5NPC.js.map} +0 -0
  295. /package/dist/cli-bundle/chunks/{chunk-PP2U4NMT.js.map → chunk-JY25IOEZ.js.map} +0 -0
  296. /package/dist/cli-bundle/chunks/{chunk-Q2J2HJUN.js.map → chunk-K25UDYJ4.js.map} +0 -0
  297. /package/dist/cli-bundle/chunks/{chunk-SBGXDO7A.js.map → chunk-KBTREGVO.js.map} +0 -0
  298. /package/dist/cli-bundle/chunks/{chunk-QZTWBFXJ.js.map → chunk-KK4TQ3ZP.js.map} +0 -0
  299. /package/dist/cli-bundle/chunks/{chunk-NIGXMNNI.js.map → chunk-KRJJPDUO.js.map} +0 -0
  300. /package/dist/cli-bundle/chunks/{chunk-AZMOLBN3.js.map → chunk-MD7XKVWI.js.map} +0 -0
  301. /package/dist/cli-bundle/chunks/{chunk-6ZXM2XNF.js.map → chunk-MNGAQB2E.js.map} +0 -0
  302. /package/dist/cli-bundle/chunks/{chunk-3MDHREEV.js.map → chunk-NIWY4V4Z.js.map} +0 -0
  303. /package/dist/cli-bundle/chunks/{chunk-TKBHZPKD.js.map → chunk-NKZOJPXK.js.map} +0 -0
  304. /package/dist/cli-bundle/chunks/{chunk-CZPXY7UW.js.map → chunk-NVUATMTC.js.map} +0 -0
  305. /package/dist/cli-bundle/chunks/{chunk-LEU5GHRC.js.map → chunk-P7ZU73BO.js.map} +0 -0
  306. /package/dist/cli-bundle/chunks/{chunk-NSBZ2CKF.js.map → chunk-PCH2JTEO.js.map} +0 -0
  307. /package/dist/cli-bundle/chunks/{chunk-B473GZWW.js.map → chunk-PJS2J7Z4.js.map} +0 -0
  308. /package/dist/cli-bundle/chunks/{chunk-5IDI42VV.js.map → chunk-QQWEROGS.js.map} +0 -0
  309. /package/dist/cli-bundle/chunks/{chunk-6M4RJS4M.js.map → chunk-RPRFBXND.js.map} +0 -0
  310. /package/dist/cli-bundle/chunks/{chunk-N5ZJACJ6.js.map → chunk-SFKQAVZA.js.map} +0 -0
  311. /package/dist/cli-bundle/chunks/{chunk-EBH56IXK.js.map → chunk-THKDPOS5.js.map} +0 -0
  312. /package/dist/cli-bundle/chunks/{chunk-LUWW7L4B.js.map → chunk-TIKJAXQW.js.map} +0 -0
  313. /package/dist/cli-bundle/chunks/{chunk-OTHIWLMB.js.map → chunk-TJABI6PR.js.map} +0 -0
  314. /package/dist/cli-bundle/chunks/{chunk-76Z3YSHV.js.map → chunk-TZQKEBKF.js.map} +0 -0
  315. /package/dist/cli-bundle/chunks/{chunk-PFSRUHDH.js.map → chunk-UKK2VTTH.js.map} +0 -0
  316. /package/dist/cli-bundle/chunks/{chunk-H7NJZWG2.js.map → chunk-V4SM4UAL.js.map} +0 -0
  317. /package/dist/cli-bundle/chunks/{chunk-CZUB4XWO.js.map → chunk-VB54F347.js.map} +0 -0
  318. /package/dist/cli-bundle/chunks/{chunk-O47BPOPC.js.map → chunk-WBSYW3NT.js.map} +0 -0
  319. /package/dist/cli-bundle/chunks/{chunk-UPE3CDD7.js.map → chunk-WQDX7DVG.js.map} +0 -0
  320. /package/dist/cli-bundle/chunks/{chunk-NB3PYLQ6.js.map → chunk-XKNF3VRJ.js.map} +0 -0
  321. /package/dist/cli-bundle/chunks/{chunk-F7K5GWP3.js.map → chunk-Y335KFHD.js.map} +0 -0
  322. /package/dist/cli-bundle/chunks/{chunk-D7FYS6PG.js.map → chunk-Y4BZEND6.js.map} +0 -0
  323. /package/dist/cli-bundle/chunks/{chunk-6CJWZAN7.js.map → chunk-YATDFWYK.js.map} +0 -0
  324. /package/dist/cli-bundle/chunks/{chunk-UEMNL33O.js.map → chunk-YJICYNAV.js.map} +0 -0
  325. /package/dist/cli-bundle/chunks/{chunk-Z6T4PQI2.js.map → chunk-YQSWTVZF.js.map} +0 -0
  326. /package/dist/cli-bundle/chunks/{chunk-RVHYI7SL.js.map → chunk-YRLLL5TY.js.map} +0 -0
  327. /package/dist/cli-bundle/chunks/{claim-RC56YUWG.js.map → claim-MPXNVBZQ.js.map} +0 -0
  328. /package/dist/cli-bundle/chunks/{claim-THOJ6CMV.js.map → claim-SKHJDLW6.js.map} +0 -0
  329. /package/dist/cli-bundle/chunks/{close-SG5MNCVQ.js.map → close-4RKSL5L6.js.map} +0 -0
  330. /package/dist/cli-bundle/chunks/{close-DNMHGOCX.js.map → close-Z6AI736U.js.map} +0 -0
  331. /package/dist/cli-bundle/chunks/{close-many-DKQLBGLV.js.map → close-many-AWTPXLHJ.js.map} +0 -0
  332. /package/dist/cli-bundle/chunks/{close-many-3L3AQZBU.js.map → close-many-SXODYBDP.js.map} +0 -0
  333. /package/dist/cli-bundle/chunks/{comments-SKWMDWCW.js.map → comments-OOH64LWW.js.map} +0 -0
  334. /package/dist/cli-bundle/chunks/{comments-M7ZOZNBX.js.map → comments-YYW5P7AG.js.map} +0 -0
  335. /package/dist/cli-bundle/chunks/{config-OZCUABPB.js.map → config-3445MCQQ.js.map} +0 -0
  336. /package/dist/cli-bundle/chunks/{config-7CK62S7T.js.map → config-LCDMKRB2.js.map} +0 -0
  337. /package/dist/cli-bundle/chunks/{context-PUG2A7RC.js.map → context-DZMIBIVP.js.map} +0 -0
  338. /package/dist/cli-bundle/chunks/{context-OEC366TO.js.map → context-PJCURODY.js.map} +0 -0
  339. /package/dist/cli-bundle/chunks/{contracts-3THOLA7L.js.map → contracts-7YDFEJB3.js.map} +0 -0
  340. /package/dist/cli-bundle/chunks/{contracts-N65FXEOL.js.map → contracts-MP2P3HL5.js.map} +0 -0
  341. /package/dist/cli-bundle/chunks/{copy-JPX7VZCH.js.map → copy-63IQQRRS.js.map} +0 -0
  342. /package/dist/cli-bundle/chunks/{copy-6QLHILAC.js.map → copy-TASIH2AZ.js.map} +0 -0
  343. /package/dist/cli-bundle/chunks/{create-NNP6TSFO.js.map → create-3BV2VA3Q.js.map} +0 -0
  344. /package/dist/cli-bundle/chunks/{create-Y54ZVVZH.js.map → create-TGSB5GV4.js.map} +0 -0
  345. /package/dist/cli-bundle/chunks/{delete-63PCMQAJ.js.map → delete-ARILQQLB.js.map} +0 -0
  346. /package/dist/cli-bundle/chunks/{delete-GDSMGAGJ.js.map → delete-ZQKBZYNK.js.map} +0 -0
  347. /package/dist/cli-bundle/chunks/{deps-T4ZF5G54.js.map → deps-MSHQR2GY.js.map} +0 -0
  348. /package/dist/cli-bundle/chunks/{deps-XYQ73XRH.js.map → deps-NJFJIMQ5.js.map} +0 -0
  349. /package/dist/cli-bundle/chunks/{docs-C75YIXHC.js.map → docs-SS4UKYYA.js.map} +0 -0
  350. /package/dist/cli-bundle/chunks/{docs-EHNPDWUL.js.map → docs-XK2UVUXX.js.map} +0 -0
  351. /package/dist/cli-bundle/chunks/{eval-GTENKE24.js.map → eval-FVZGX5IZ.js.map} +0 -0
  352. /package/dist/cli-bundle/chunks/{eval-3WKDTRMH.js.map → eval-JOTG2YHU.js.map} +0 -0
  353. /package/dist/cli-bundle/chunks/{extension-46NWACO3.js.map → extension-NLMS47I4.js.map} +0 -0
  354. /package/dist/cli-bundle/chunks/{extension-D5FDZ2CO.js.map → extension-OQPS27B4.js.map} +0 -0
  355. /package/dist/cli-bundle/chunks/{files-X3H7CCBQ.js.map → files-3EVJQZ2N.js.map} +0 -0
  356. /package/dist/cli-bundle/chunks/{files-DSZBOSSN.js.map → files-Y2P6LN5A.js.map} +0 -0
  357. /package/dist/cli-bundle/chunks/{focus-5STQXDPU.js.map → focus-D5ZUPTII.js.map} +0 -0
  358. /package/dist/cli-bundle/chunks/{focus-MDVPOWB5.js.map → focus-ZPIFTY4R.js.map} +0 -0
  359. /package/dist/cli-bundle/chunks/{gc-ZMST3WQP.js.map → gc-LXXDY456.js.map} +0 -0
  360. /package/dist/cli-bundle/chunks/{gc-ZC7JHBG7.js.map → gc-RNOEQHSX.js.map} +0 -0
  361. /package/dist/cli-bundle/chunks/{get-NT7L2HUZ.js.map → get-Q3SZGQHD.js.map} +0 -0
  362. /package/dist/cli-bundle/chunks/{get-J2IPJRZW.js.map → get-W23G7MJX.js.map} +0 -0
  363. /package/dist/cli-bundle/chunks/{history-RLH2QCRO.js.map → history-6CZVFIUJ.js.map} +0 -0
  364. /package/dist/cli-bundle/chunks/{history-WX3MGFS2.js.map → history-YRQUD4YM.js.map} +0 -0
  365. /package/dist/cli-bundle/chunks/{history-compact-ZBEBGJM7.js.map → history-compact-M35PDQ4G.js.map} +0 -0
  366. /package/dist/cli-bundle/chunks/{history-compact-UXDIFC33.js.map → history-compact-VWUSQH6Z.js.map} +0 -0
  367. /package/dist/cli-bundle/chunks/{history-redact-YQGU3XRA.js.map → history-redact-27OEOZRZ.js.map} +0 -0
  368. /package/dist/cli-bundle/chunks/{history-redact-P7I7AWMB.js.map → history-redact-AJGARHT3.js.map} +0 -0
  369. /package/dist/cli-bundle/chunks/{history-repair-52KINVIK.js.map → history-repair-5RDMF7K4.js.map} +0 -0
  370. /package/dist/cli-bundle/chunks/{history-repair-RM5ITLU5.js.map → history-repair-YUAHIPIN.js.map} +0 -0
  371. /package/dist/cli-bundle/chunks/{init-SC2P6CHP.js.map → init-DWAKYRXI.js.map} +0 -0
  372. /package/dist/cli-bundle/chunks/{init-2BNZOO6F.js.map → init-HASX3YNJ.js.map} +0 -0
  373. /package/dist/cli-bundle/chunks/{learnings-W6F3FIPL.js.map → learnings-JNGUIJDK.js.map} +0 -0
  374. /package/dist/cli-bundle/chunks/{learnings-YGYVHWJK.js.map → learnings-M4KA6MQE.js.map} +0 -0
  375. /package/dist/cli-bundle/chunks/{list-KPAYU5KZ.js.map → list-5UU2W24O.js.map} +0 -0
  376. /package/dist/cli-bundle/chunks/{list-K6FPV4J4.js.map → list-6FMKTIH3.js.map} +0 -0
  377. /package/dist/cli-bundle/chunks/{notes-YTD6ZILW.js.map → notes-MODH5CBT.js.map} +0 -0
  378. /package/dist/cli-bundle/chunks/{notes-PU74EPKV.js.map → notes-PYCPLA5Y.js.map} +0 -0
  379. /package/dist/cli-bundle/chunks/{plan-GEQYUCBW.js.map → plan-DXRIRYRU.js.map} +0 -0
  380. /package/dist/cli-bundle/chunks/{plan-FNXHXRCI.js.map → plan-EHQALWSC.js.map} +0 -0
  381. /package/dist/cli-bundle/chunks/{register-list-query-QI45RMKN.js.map → register-list-query-QAASVP2J.js.map} +0 -0
  382. /package/dist/cli-bundle/chunks/{register-list-query-PHWYHENI.js.map → register-list-query-WE54YJMH.js.map} +0 -0
  383. /package/dist/cli-bundle/chunks/{register-mutation-YINRTS7L.js.map → register-mutation-B6DZJTY2.js.map} +0 -0
  384. /package/dist/cli-bundle/chunks/{register-mutation-X3BUOQEL.js.map → register-mutation-CPV4C2KR.js.map} +0 -0
  385. /package/dist/cli-bundle/chunks/{register-operations-E5JEASRK.js.map → register-operations-AT3BVVX2.js.map} +0 -0
  386. /package/dist/cli-bundle/chunks/{register-operations-MIDTRW7S.js.map → register-operations-RC4C3423.js.map} +0 -0
  387. /package/dist/cli-bundle/chunks/{restore-XQYSWBV7.js.map → restore-FNBV4GWE.js.map} +0 -0
  388. /package/dist/cli-bundle/chunks/{restore-5KHR2YYQ.js.map → restore-XY4YE2OV.js.map} +0 -0
  389. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-HJMTEXKE.js.map → scheduling-shortcuts-ECL6GBMZ.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-NNT5ASZR.js.map → scheduling-shortcuts-JRIUREEU.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{schema-TZXW6XWD.js.map → schema-74YENAJL.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{schema-263RI4WW.js.map → schema-TCW3I7QR.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{search-SFRJOVDG.js.map → search-7USZ6XZA.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{search-LECJYSXE.js.map → search-GNAUE65M.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{stats-VPBGSRQH.js.map → stats-CVHASAEU.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{stats-N7ER2PNK.js.map → stats-DQMKJMFT.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{telemetry-PP3FUNBU.js.map → telemetry-7P5EUWCS.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{telemetry-L6K3BUIQ.js.map → telemetry-PQTL5YS2.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{test-RQCTSWUK.js.map → test-COWPCGBE.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{test-3EGNS3T5.js.map → test-FDQZQNZ4.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{test-runs-GN3C6GOI.js.map → test-runs-JS6DNCCI.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{test-runs-AJHR6IQF.js.map → test-runs-NZD2QGL5.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{update-6YXOGHRT.js.map → update-7IYQHX4Q.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{update-V33YUBRP.js.map → update-IJKDRBIX.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{update-many-RYQ64CFW.js.map → update-many-6NTZ5J5D.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{update-many-N2AN6ZDH.js.map → update-many-B3TH5TDS.js.map} +0 -0
@@ -1,7 +1,10 @@
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]="cdb9b0c1-6fbc-5b77-bcd0-c4630a719641")}catch(e){}}();
3
- import { activateExtensions } from "../core/extensions/loader.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7a8097be-5b9f-5313-9ac3-6120d2fce878")}catch(e){}}();
3
+ import { activateExtensions, deactivateExtensions, runAfterCommandHooks, runBeforeCommandHooks, runCommandHandler, runCommandOverride, runOnIndexHooks, runOnReadHooks, runOnWriteHooks, runParserOverride, runPreflightOverride, runRendererOverride, runServiceOverride, } from "../core/extensions/loader.js";
4
4
  import { createDefaultExtensionGovernancePolicy } from "../core/extensions/extension-types.js";
5
+ import { getMigrationRuntimeDefinition, resolveRegisteredSearchProvider, resolveRegisteredVectorStoreAdapter, } from "../core/extensions/runtime-registrations.js";
6
+ import { collectUsedExtensionCapabilities } from "../core/extensions/capability-usage.js";
7
+ import { normalizeKnownExtensionCapability } from "../core/extensions/extension-capability-aliases.js";
5
8
  const HOOK_KIND_TO_REGISTRY_FIELD = {
6
9
  before_command: "beforeCommand",
7
10
  after_command: "afterCommand",
@@ -69,6 +72,10 @@ function readTestExtensionManifest(module) {
69
72
  }
70
73
  return {};
71
74
  }
75
+ function resolveTestExtensionName(manifest, explicitName) {
76
+ return (explicitName ??
77
+ (typeof manifest.name === "string" && manifest.name.trim().length > 0 ? manifest.name.trim() : "test-extension"));
78
+ }
72
79
  function readTestExtensionCapabilities(manifest, options) {
73
80
  if (Array.isArray(options.capabilities)) {
74
81
  return [...options.capabilities];
@@ -79,18 +86,14 @@ function readTestExtensionCapabilities(manifest, options) {
79
86
  return [];
80
87
  }
81
88
  /**
82
- * Activate one in-memory extension module for package tests.
83
- *
84
- * This uses pm's real registration validation and activation engine while
85
- * avoiding private loader imports, filesystem manifests, or workspace setup.
89
+ * Build the synthetic single-extension {@link ExtensionLoadResult} shared by the
90
+ * activate/deactivate test helpers, so both stay aligned with the loader's load
91
+ * contract as it evolves. The `loaded` entry mirrors the real on-disk shape
92
+ * (including `capabilities` and the compatibility fields) while leaving
93
+ * filesystem paths empty, since the module is supplied in memory.
86
94
  */
87
- export async function activateExtensionForTest(module, options = {}) {
88
- const manifest = readTestExtensionManifest(module);
89
- const name = options.name ??
90
- (typeof manifest.name === "string" && manifest.name.trim().length > 0 ? manifest.name.trim() : "test-extension");
91
- const layer = options.layer ?? "project";
92
- const capabilities = readTestExtensionCapabilities(manifest, options);
93
- return activateExtensions({
95
+ function buildSingleExtensionLoadResult(module, manifest, identity) {
96
+ return {
94
97
  disabled_by_flag: false,
95
98
  roots: { global: "", project: "" },
96
99
  configured_enabled: [],
@@ -98,19 +101,19 @@ export async function activateExtensionForTest(module, options = {}) {
98
101
  discovered: [],
99
102
  effective: [],
100
103
  warnings: [],
101
- policy: options.policy ?? createDefaultExtensionGovernancePolicy(),
104
+ policy: identity.policy,
102
105
  failed: [],
103
106
  loaded: [
104
107
  {
105
- layer,
108
+ layer: identity.layer,
106
109
  directory: "",
107
110
  manifest_path: "",
108
- name,
111
+ name: identity.name,
109
112
  version: typeof manifest.version === "string" ? manifest.version : "0.0.0",
110
113
  entry: typeof manifest.entry === "string" ? manifest.entry : "./index.js",
111
114
  priority: typeof manifest.priority === "number" ? manifest.priority : 0,
112
115
  entry_path: "",
113
- capabilities,
116
+ capabilities: identity.capabilities,
114
117
  manifest_version: typeof manifest.manifest_version === "number" ? manifest.manifest_version : undefined,
115
118
  pm_min_version: typeof manifest.pm_min_version === "string" ? manifest.pm_min_version : undefined,
116
119
  pm_max_version: typeof manifest.pm_max_version === "string" ? manifest.pm_max_version : undefined,
@@ -123,8 +126,427 @@ export async function activateExtensionForTest(module, options = {}) {
123
126
  module,
124
127
  },
125
128
  ],
129
+ };
130
+ }
131
+ /**
132
+ * Activate one in-memory extension module for package tests.
133
+ *
134
+ * This uses pm's real registration validation and activation engine while
135
+ * avoiding private loader imports, filesystem manifests, or workspace setup.
136
+ */
137
+ export async function activateExtensionForTest(module, options = {}) {
138
+ const manifest = readTestExtensionManifest(module);
139
+ return activateExtensions(buildSingleExtensionLoadResult(module, manifest, {
140
+ name: resolveTestExtensionName(manifest, options.name),
141
+ layer: options.layer ?? "project",
142
+ capabilities: readTestExtensionCapabilities(manifest, options),
143
+ policy: options.policy ?? createDefaultExtensionGovernancePolicy(),
144
+ }));
145
+ }
146
+ /**
147
+ * Deactivate one in-memory extension module for package tests — the teardown
148
+ * counterpart to {@link activateExtensionForTest}.
149
+ *
150
+ * Runs pm's real `deactivateExtensions` engine (including its bounded per-hook
151
+ * timeout and best-effort failure capture) over a single synthetic load entry,
152
+ * so authors can prove an extension's `deactivate` releases the resources its
153
+ * `activate` opened — without importing private loader internals or staging a
154
+ * workspace. Resolve `name`/`layer` the same way {@link activateExtensionForTest}
155
+ * does so a forwarded `activation` result skips a failed extension correctly.
156
+ */
157
+ export async function deactivateExtensionForTest(module, options = {}) {
158
+ const manifest = readTestExtensionManifest(module);
159
+ return deactivateExtensions(buildSingleExtensionLoadResult(module, manifest, {
160
+ name: resolveTestExtensionName(manifest, options.name),
161
+ layer: options.layer ?? "project",
162
+ capabilities: readTestExtensionCapabilities(manifest, {}),
163
+ policy: createDefaultExtensionGovernancePolicy(),
164
+ }), options.activation, options.deactivateTimeoutMs === undefined ? {} : { deactivate_timeout_ms: options.deactivateTimeoutMs });
165
+ }
166
+ /**
167
+ * Invoke a registered extension command handler and return its real
168
+ * {@link CommandHandlerResult} so package tests can assert on behavior — not
169
+ * just that the command was registered.
170
+ *
171
+ * This is the "invoke" verb that completes the package-author testing loop:
172
+ * `activateExtensionForTest` → `assertRegisteredCommandContract` → **run** →
173
+ * `deactivateExtensionForTest`. It runs pm's real handler-dispatch engine
174
+ * (`runCommandHandler`) over `activation.commands`, building the
175
+ * `CommandHandlerContext` with agent-safe global defaults
176
+ * (`{ json: true, quiet: true, noPager: true }`) that callers may override.
177
+ *
178
+ * Because `registerImporter`/`registerExporter` register their handlers under
179
+ * the `"<name> import"` / `"<name> export"` command paths, this same helper
180
+ * exercises importer and exporter handlers too.
181
+ *
182
+ * Throws a descriptive error (listing the available handler command paths) when
183
+ * no handler is registered for `command`, since that is a wiring/typo bug in the
184
+ * test rather than a behavior under test. When a handler is found, the result is
185
+ * returned verbatim: a clean run yields `{ handled: true, result, warnings: [] }`,
186
+ * while a handler that throws a non-exit error yields
187
+ * `{ handled: false, warnings: [code], errorMessage }` so the failure can be
188
+ * asserted. A handler that throws an error carrying a numeric `exitCode`
189
+ * propagates the throw, matching runtime semantics.
190
+ */
191
+ export async function runRegisteredCommandForTest(commands, options) {
192
+ const command = normalizeSdkCommandName(options.command);
193
+ if (command.length === 0) {
194
+ throw new Error("Expected command name must be a non-empty string");
195
+ }
196
+ const hasHandler = commands.handlers.some((entry) => entry.command === command);
197
+ if (!hasHandler) {
198
+ const available = sortedUnique(commands.handlers.map((entry) => entry.command));
199
+ throw new Error(`Expected a registered command handler for "${command}" to invoke. Available command handlers: ${formatAvailable(available)}`);
200
+ }
201
+ return runCommandHandler(commands, {
202
+ command,
203
+ args: options.args ? [...options.args] : [],
204
+ options: options.options ? { ...options.options } : {},
205
+ global: { json: true, quiet: true, noPager: true, ...options.global },
206
+ pm_root: options.pmRoot ?? "",
126
207
  });
127
208
  }
209
+ /**
210
+ * Fire every registered lifecycle hook of a given `kind` through pm's real hook
211
+ * runner and return the warnings array so package tests can assert on behavior —
212
+ * not just that a hook was registered.
213
+ *
214
+ * This is the hook counterpart to {@link runRegisteredCommandForTest}, extending
215
+ * the package-author "invoke" verb to the `api.hooks.*` surface. Pass the
216
+ * `ExtensionHookRegistry` from `activateExtensionForTest(...).hooks` together with
217
+ * the lifecycle `kind` and a synthetic context. Hooks observe their inputs via a
218
+ * cloned context snapshot (mutations never leak back to the caller), so the
219
+ * observable signal is twofold: any side effects the hook performs, and the
220
+ * returned warnings. A clean run returns `[]`; a hook that throws contributes one
221
+ * `extension_hook_failed:<layer>:<name>:<hookName>` warning, mirroring runtime
222
+ * dispatch which isolates a failing hook without aborting the others.
223
+ *
224
+ * Throws a descriptive error (listing the hook kinds that do have registrations)
225
+ * when no hook of `kind` is registered, since firing a hook the extension never
226
+ * registered is a wiring/typo bug in the test rather than a behavior under test.
227
+ */
228
+ export async function runRegisteredHookForTest(hooks, options) {
229
+ if (hooks[HOOK_KIND_TO_REGISTRY_FIELD[options.kind]].length === 0) {
230
+ const populatedKinds = sortedUnique(Object.keys(HOOK_KIND_TO_REGISTRY_FIELD).filter((kind) => hooks[HOOK_KIND_TO_REGISTRY_FIELD[kind]].length > 0));
231
+ throw new Error(`Expected a registered "${options.kind}" hook to invoke. Hook kinds with registrations: ${formatAvailable(populatedKinds)}`);
232
+ }
233
+ switch (options.kind) {
234
+ case "before_command":
235
+ return runBeforeCommandHooks(hooks, options.context);
236
+ case "after_command":
237
+ return runAfterCommandHooks(hooks, options.context);
238
+ case "on_read":
239
+ return runOnReadHooks(hooks, options.context);
240
+ case "on_write":
241
+ return runOnWriteHooks(hooks, options.context);
242
+ case "on_index":
243
+ return runOnIndexHooks(hooks, options.context);
244
+ }
245
+ }
246
+ /**
247
+ * Invoke a registered parser override through pm's real runner and return the
248
+ * resolved {@link ParserOverrideResult}, so package tests can assert the rewritten
249
+ * args/options/global an override produces for a command before dispatch.
250
+ *
251
+ * Guards that a parser override is registered for the (normalized) target command
252
+ * before delegating: without a match `runParserOverride` would silently return
253
+ * `overridden: false`, hiding a typo'd command name in the test. When a match
254
+ * exists the result is returned verbatim — `overridden: true` with the rewritten
255
+ * context on success, or `overridden: false` with an
256
+ * `extension_parser_override_failed:*` warning when the override throws.
257
+ */
258
+ export async function runRegisteredParserOverrideForTest(parsers, context) {
259
+ const command = normalizeSdkCommandName(context.command);
260
+ if (!parsers.overrides.some((entry) => entry.command === command)) {
261
+ throw new Error(`Expected a registered parser override for command "${command}" to invoke. Available parser override commands: ${formatAvailable(sortedUnique(parsers.overrides.map((entry) => entry.command)))}`);
262
+ }
263
+ return runParserOverride(parsers, context);
264
+ }
265
+ /**
266
+ * Invoke the active preflight override through pm's real runner and return the
267
+ * resolved {@link PreflightOverrideResult}, so package tests can assert the
268
+ * migration/format gate decision an override yields.
269
+ *
270
+ * Unlike command-scoped overrides, the runtime applies the **last** registered
271
+ * preflight override regardless of command, so this helper guards only that at
272
+ * least one preflight override is registered before delegating. The result is
273
+ * returned verbatim — `overridden: true` with the adjusted decision on success,
274
+ * or `overridden: false` with an `extension_preflight_override_failed:*` warning
275
+ * when the override throws.
276
+ */
277
+ export async function runRegisteredPreflightOverrideForTest(preflight, context) {
278
+ if (preflight.overrides.length === 0) {
279
+ throw new Error("Expected a registered preflight override to invoke, but none are registered.");
280
+ }
281
+ return runPreflightOverride(preflight, context);
282
+ }
283
+ /**
284
+ * Invoke a registered command-result override through pm's real runner and return
285
+ * the resolved {@link CommandOverrideResult}, so package tests can assert how an
286
+ * override transforms a command's result payload.
287
+ *
288
+ * Accepts the same `ExtensionCommandRegistry` exposed as
289
+ * `activateExtensionForTest(...).commands` (it carries both handlers and
290
+ * overrides). Guards that an override is registered for the (normalized) target
291
+ * command before delegating, so a typo'd command name surfaces as a clear error
292
+ * rather than a silent `overridden: false`. The result is returned verbatim —
293
+ * including the `extension_command_override_async_unsupported:*` warning the
294
+ * runtime emits when an override returns a Promise (command overrides are
295
+ * synchronous), or an `extension_command_override_failed:*` warning on throw.
296
+ */
297
+ export async function runRegisteredCommandOverrideForTest(commands, context) {
298
+ const command = normalizeSdkCommandName(context.command);
299
+ if (!commands.overrides.some((entry) => entry.command === command)) {
300
+ throw new Error(`Expected a registered command override for command "${command}" to invoke. Available command override commands: ${formatAvailable(sortedUnique(commands.overrides.map((entry) => entry.command)))}`);
301
+ }
302
+ return runCommandOverride(commands, context);
303
+ }
304
+ /**
305
+ * Invoke a registered renderer override through pm's real runner and return the
306
+ * resolved {@link RendererOverrideResult}, so package tests can assert the custom
307
+ * string an override renders for a given output `format`.
308
+ *
309
+ * Guards that a renderer override is registered for `context.format` before
310
+ * delegating, so a wrong format surfaces as a clear error rather than a silent
311
+ * `overridden: false`. The result is returned verbatim — `overridden: true` with
312
+ * the rendered string on success, or `overridden: false` (with an
313
+ * `extension_renderer_invalid_result:*` / `extension_renderer_failed:*` warning
314
+ * where applicable) when the override returns a non-string or throws.
315
+ */
316
+ export async function runRegisteredRendererOverrideForTest(renderers, context) {
317
+ if (!renderers.overrides.some((entry) => entry.format === context.format)) {
318
+ throw new Error(`Expected a registered renderer override for format "${context.format}" to invoke. Available renderer override formats: ${formatAvailable(sortedUnique(renderers.overrides.map((entry) => entry.format)))}`);
319
+ }
320
+ return runRendererOverride(renderers, context);
321
+ }
322
+ /**
323
+ * Invoke a registered service override through pm's real runner and return the
324
+ * resolved {@link ServiceOverrideResult}, so package tests can assert how an
325
+ * override handles an internal service payload (e.g. `output_format`).
326
+ *
327
+ * Guards that a service override is registered for `context.service` before
328
+ * delegating, so a wrong service name surfaces as a clear error rather than a
329
+ * silent `handled: false`. The result is returned verbatim — `handled: true` with
330
+ * the override's result when it claims the payload, or `handled: false` with the
331
+ * original payload (and any `extension_service_override_*` warnings) otherwise.
332
+ */
333
+ export async function runRegisteredServiceOverrideForTest(services, context) {
334
+ if (!services.overrides.some((entry) => entry.service === context.service)) {
335
+ throw new Error(`Expected a registered service override for service "${context.service}" to invoke. Available service override services: ${formatAvailable(sortedUnique(services.overrides.map((entry) => entry.service)))}`);
336
+ }
337
+ return runServiceOverride(services, context);
338
+ }
339
+ /**
340
+ * Maps each search-provider operation to the runtime-definition keys that may
341
+ * hold its function, in priority order. The host accepts both camelCase and
342
+ * snake_case spellings for the multi-word operations, so this helper mirrors that
343
+ * by trying `embedBatch` before `embed_batch` and `queryExpansion` before
344
+ * `query_expansion`.
345
+ */
346
+ const SEARCH_PROVIDER_OPERATION_DEFINITION_KEYS = {
347
+ query: ["query"],
348
+ embed: ["embed"],
349
+ embedBatch: ["embedBatch", "embed_batch"],
350
+ queryExpansion: ["queryExpansion", "query_expansion"],
351
+ rerank: ["rerank"],
352
+ };
353
+ /**
354
+ * Invoke an operation of a registered search provider through the same name
355
+ * resolution the host uses and return the operation's result, so package tests
356
+ * can assert a custom provider's runtime behavior — not just that it registered.
357
+ *
358
+ * This is the search-provider counterpart to {@link runRegisteredCommandForTest},
359
+ * extending the package-author "invoke" verb to the `api.registerSearchProvider`
360
+ * surface. Pass the `ExtensionRegistrationRegistry` from
361
+ * `activateExtensionForTest(...).registrations`, the registered provider name, the
362
+ * `operation` to exercise (`query`, `embed`, `embedBatch`, `queryExpansion`, or
363
+ * `rerank`), and a synthetic context. The provider is resolved via
364
+ * {@link resolveRegisteredSearchProvider} (case-insensitive, last registration
365
+ * wins) and the operation is invoked on its `runtime_definition` — the clone that
366
+ * preserves live functions, matching what the runtime dispatches.
367
+ *
368
+ * Throws a descriptive error listing the available providers when the name is not
369
+ * registered, and a separate error when the resolved provider does not implement
370
+ * the requested operation, since invoking an absent provider/operation is a
371
+ * wiring bug in the test rather than a behavior under test.
372
+ */
373
+ export async function runRegisteredSearchProviderForTest(registrations, options) {
374
+ const registration = resolveRegisteredSearchProvider(registrations, options.provider);
375
+ if (!registration) {
376
+ const available = sortedUnique(registrations.search_providers.map((entry) => entry.definition.name));
377
+ throw new Error(`Expected a registered search provider "${options.provider}" to invoke. Available search providers: ${formatAvailable(available)}`);
378
+ }
379
+ const runtimeDefinition = registration.runtime_definition;
380
+ const operationFn = SEARCH_PROVIDER_OPERATION_DEFINITION_KEYS[options.operation]
381
+ .map((key) => runtimeDefinition[key])
382
+ .find((value) => typeof value === "function");
383
+ if (typeof operationFn !== "function") {
384
+ throw new Error(`Registered search provider "${options.provider}" does not implement the "${options.operation}" operation.`);
385
+ }
386
+ return (await operationFn(options.context));
387
+ }
388
+ /**
389
+ * Invoke an operation of a registered vector store adapter through the same name
390
+ * resolution the host uses and return the operation's result, so package tests
391
+ * can assert a custom adapter's runtime behavior — not just that it registered.
392
+ *
393
+ * This is the vector-store counterpart to {@link runRegisteredSearchProviderForTest}.
394
+ * Pass the `ExtensionRegistrationRegistry` from
395
+ * `activateExtensionForTest(...).registrations`, the registered adapter name, the
396
+ * `operation` to exercise (`query`, `upsert`, or `delete`), and a synthetic
397
+ * context. The adapter is resolved via {@link resolveRegisteredVectorStoreAdapter}
398
+ * (case-insensitive, last registration wins) and the operation is invoked on its
399
+ * `runtime_definition` — the clone that preserves live functions, matching what
400
+ * the runtime dispatches.
401
+ *
402
+ * Throws a descriptive error listing the available adapters when the name is not
403
+ * registered, and a separate error when the resolved adapter does not implement
404
+ * the requested operation.
405
+ */
406
+ export async function runRegisteredVectorStoreAdapterForTest(registrations, options) {
407
+ const registration = resolveRegisteredVectorStoreAdapter(registrations, options.adapter);
408
+ if (!registration) {
409
+ const available = sortedUnique(registrations.vector_store_adapters.map((entry) => entry.definition.name));
410
+ throw new Error(`Expected a registered vector store adapter "${options.adapter}" to invoke. Available vector store adapters: ${formatAvailable(available)}`);
411
+ }
412
+ const operationFn = registration.runtime_definition[options.operation];
413
+ if (typeof operationFn !== "function") {
414
+ throw new Error(`Registered vector store adapter "${options.adapter}" does not implement the "${options.operation}" operation.`);
415
+ }
416
+ return (await operationFn(options.context));
417
+ }
418
+ /**
419
+ * Invoke a registered schema migration's `run` function through the same runtime
420
+ * definition the host executes and return its result, so package tests can assert
421
+ * a migration's behavior — not just that it registered.
422
+ *
423
+ * This completes the package-author "invoke" verb across every executable
424
+ * registration surface. The migration is resolved by id via
425
+ * {@link assertRegisteredMigration} (which throws a descriptive "available
426
+ * migrations" error when absent), then `run` is invoked on its
427
+ * `runtime_definition` with a context mirroring the one
428
+ * `executeRegisteredRuntimeMigrations` builds at runtime: the resolved id,
429
+ * `command: "migration"`, the registering extension's layer/name, the supplied
430
+ * `pmRoot`, and the migration's normalized status. Unlike the runtime — which
431
+ * skips already-applied migrations and folds a throw into a warning — this helper
432
+ * always invokes `run` and lets a throw propagate, so authors can assert both the
433
+ * success result and failure via rejection.
434
+ *
435
+ * Throws when the resolved migration declares no `run` function, since invoking a
436
+ * runless migration is a wiring bug in the test rather than a behavior under test.
437
+ */
438
+ export async function runRegisteredMigrationForTest(registrations, options) {
439
+ const migration = assertRegisteredMigration(registrations, {
440
+ migration: options.migration,
441
+ extensionName: options.extensionName,
442
+ });
443
+ const run = getMigrationRuntimeDefinition(migration).run;
444
+ if (typeof run !== "function") {
445
+ throw new Error(`Registered migration "${options.migration}" does not implement a run function to invoke.`);
446
+ }
447
+ const declaredStatus = migration.definition.status;
448
+ const context = {
449
+ id: migration.definition.id,
450
+ command: "migration",
451
+ layer: migration.layer,
452
+ extension: migration.name,
453
+ pm_root: options.pmRoot ?? "",
454
+ status: (typeof declaredStatus === "string" ? declaredStatus.trim().toLowerCase() : "") || "pending",
455
+ };
456
+ return await run(context);
457
+ }
458
+ /**
459
+ * Invoke a registered extension importer through pm's real handler-dispatch
460
+ * engine and return its {@link CommandHandlerResult}, so package tests can assert
461
+ * an importer's behavior — not just that it registered.
462
+ *
463
+ * This is the importer counterpart to {@link runRegisteredCommandForTest},
464
+ * extending the package-author "invoke" verb to the `api.registerImporter`
465
+ * surface. Because `registerImporter(name, fn)` wraps `fn` into a command handler
466
+ * at the `"<name> import"` path, invoking it through `runRegisteredCommandForTest`
467
+ * requires the author to know that naming convention and to remember that an
468
+ * importer is reachable as a command at all. This helper closes both gaps: it
469
+ * accepts the registered importer name directly, validates via
470
+ * {@link assertRegisteredImporter} that it is genuinely a registered importer
471
+ * (not merely some command parked at that path), derives the command path, and
472
+ * dispatches through the same engine.
473
+ *
474
+ * The full activation result is required because importer execution spans two
475
+ * sub-registries: `registrations.importers` proves the importer exists, while
476
+ * `commands` holds the wrapped handler. The result is returned verbatim from the
477
+ * command engine: a clean run yields `{ handled: true, result, warnings: [] }`
478
+ * (where `result` is the importer's return value), a non-exit throw yields
479
+ * `{ handled: false, warnings: [code], errorMessage }`, and an error carrying a
480
+ * numeric `exitCode` propagates — matching runtime import semantics.
481
+ *
482
+ * Throws a descriptive "available importers" error (via `assertRegisteredImporter`)
483
+ * when no importer matches, since that is a wiring/typo bug in the test rather
484
+ * than a behavior under test.
485
+ */
486
+ export async function runRegisteredImporterForTest(activation, options) {
487
+ const importer = assertRegisteredImporter(activation.registrations, {
488
+ importer: options.importer,
489
+ extensionName: options.extensionName,
490
+ });
491
+ return runRegisteredCommandForTest(activation.commands, {
492
+ command: `${importer.importer} import`,
493
+ args: options.args,
494
+ options: options.options,
495
+ global: options.global,
496
+ pmRoot: options.pmRoot,
497
+ });
498
+ }
499
+ /**
500
+ * Invoke a registered extension exporter through pm's real handler-dispatch
501
+ * engine and return its {@link CommandHandlerResult}, so package tests can assert
502
+ * an exporter's behavior — not just that it registered.
503
+ *
504
+ * This is the exporter counterpart to {@link runRegisteredImporterForTest} and
505
+ * the final surface in the package-author "invoke" verb. Because
506
+ * `registerExporter(name, fn)` wraps `fn` into a command handler at the
507
+ * `"<name> export"` path, this helper accepts the registered exporter name
508
+ * directly, validates via {@link assertRegisteredExporter} that it is genuinely a
509
+ * registered exporter, derives the command path, and dispatches through the same
510
+ * engine. See {@link runRegisteredImporterForTest} for the full activation
511
+ * rationale and return semantics (which apply identically here).
512
+ *
513
+ * Throws a descriptive "available exporters" error (via `assertRegisteredExporter`)
514
+ * when no exporter matches, since that is a wiring/typo bug in the test rather
515
+ * than a behavior under test.
516
+ */
517
+ export async function runRegisteredExporterForTest(activation, options) {
518
+ const exporter = assertRegisteredExporter(activation.registrations, {
519
+ exporter: options.exporter,
520
+ extensionName: options.extensionName,
521
+ });
522
+ return runRegisteredCommandForTest(activation.commands, {
523
+ command: `${exporter.exporter} export`,
524
+ args: options.args,
525
+ options: options.options,
526
+ global: options.global,
527
+ pmRoot: options.pmRoot,
528
+ });
529
+ }
530
+ /**
531
+ * Assert that an {@link ExtensionDeactivationResult} reports the expected clean
532
+ * teardown counts, throwing a descriptive error otherwise. Defaults assert the
533
+ * single-extension happy path — exactly one extension deactivated and none
534
+ * failed. Returns the result so assertions can chain.
535
+ */
536
+ export function assertExtensionDeactivated(result, expectation = {}) {
537
+ const expectedDeactivated = expectation.deactivated ?? 1;
538
+ if (result.deactivated !== expectedDeactivated) {
539
+ throw new Error(`Expected ${expectedDeactivated} extension${expectedDeactivated === 1 ? "" : "s"} to deactivate cleanly, ` +
540
+ `but ${result.deactivated} did.`);
541
+ }
542
+ const expectedFailed = expectation.failed ?? 0;
543
+ if (result.failed.length !== expectedFailed) {
544
+ const detail = result.failed.map((failure) => `${failure.layer}:${failure.name} (${failure.error})`).join(", ");
545
+ throw new Error(`Expected ${expectedFailed} teardown failure${expectedFailed === 1 ? "" : "s"}, ` +
546
+ `but observed ${result.failed.length}${detail.length > 0 ? `: ${detail}` : ""}.`);
547
+ }
548
+ return result;
549
+ }
128
550
  /**
129
551
  * Assert that a normalized package manifest advertises expected package
130
552
  * resources. Pair with `readPmPackageManifest(packageRoot)` in package tests.
@@ -512,5 +934,42 @@ export function assertRegisteredMigration(registrations, expectation) {
512
934
  }));
513
935
  throw new Error(`Expected migration "${expectedMigration}"${extensionNameSuffix(expectation.extensionName)} to be registered. Available migrations: ${formatAvailable(available)}`);
514
936
  }
937
+ /**
938
+ * Assert that an activated extension declares no capability it never uses
939
+ * (least privilege). Pass the same capabilities as `manifest.capabilities` via
940
+ * `expectation.declared`; the helper computes what the extension actually
941
+ * registered against and throws when any declared capability is unused.
942
+ *
943
+ * This is the package-test counterpart of the advisory
944
+ * `extension_capability_unused` warning `pm package doctor` emits, letting an
945
+ * author catch an over-broad manifest at `npm test` time. Returns the
946
+ * declared/used/unused breakdown for further assertions.
947
+ */
948
+ export function assertExtensionCapabilityUsage(activation, expectation) {
949
+ const toKnownCapabilitySet = (capabilities, field) => {
950
+ const known = new Set();
951
+ for (const capability of capabilities) {
952
+ const normalized = normalizeKnownExtensionCapability(capability);
953
+ if (normalized === null) {
954
+ throw new Error(`Expected ${field} capability "${capability}" to be a known extension capability. ` +
955
+ "Use canonical capability names (see manifest.capabilities).");
956
+ }
957
+ known.add(normalized);
958
+ }
959
+ return known;
960
+ };
961
+ const declared = [...toKnownCapabilitySet(expectation.declared, "declared")].sort((left, right) => left.localeCompare(right));
962
+ const allowUnused = toKnownCapabilitySet(expectation.allowUnused ?? [], "allowUnused");
963
+ const used = collectUsedExtensionCapabilities(activation, { extensionName: expectation.extensionName });
964
+ const usedSet = new Set(used);
965
+ const unused = declared.filter((capability) => !usedSet.has(capability) && !allowUnused.has(capability));
966
+ if (unused.length > 0) {
967
+ const scopeSuffix = extensionNameSuffix(expectation.extensionName);
968
+ throw new Error(`Expected every declared capability${scopeSuffix} to be exercised, but [${unused.join(", ")}] ${unused.length === 1 ? "is" : "are"} declared yet never registered against. ` +
969
+ `Remove ${unused.length === 1 ? "it" : "them"} from manifest.capabilities for least privilege, ` +
970
+ "or pass allowUnused for capabilities registered only behind a runtime flag.");
971
+ }
972
+ return { declared, used, unused };
973
+ }
515
974
  //# sourceMappingURL=testing.js.map
516
- //# debugId=cdb9b0c1-6fbc-5b77-bcd0-c4630a719641
975
+ //# debugId=7a8097be-5b9f-5313-9ac3-6120d2fce878