@unbrained/pm-cli 2026.6.22 → 2026.6.23

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 (416) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/cli/commands/completion.js +5 -4
  3. package/dist/cli/commands/completion.js.map +1 -1
  4. package/dist/cli/commands/contracts.js +4 -3
  5. package/dist/cli/commands/contracts.js.map +1 -1
  6. package/dist/cli/commands/extension/describe.d.ts +70 -0
  7. package/dist/cli/commands/extension/describe.js +76 -0
  8. package/dist/cli/commands/extension/describe.js.map +1 -0
  9. package/dist/cli/commands/extension/scaffold.js +50 -2
  10. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  11. package/dist/cli/commands/extension.d.ts +2 -1
  12. package/dist/cli/commands/extension.js +28 -3
  13. package/dist/cli/commands/extension.js.map +1 -1
  14. package/dist/cli/help-content.js +6 -2
  15. package/dist/cli/help-content.js.map +1 -1
  16. package/dist/cli/register-setup.js +10 -2
  17. package/dist/cli/register-setup.js.map +1 -1
  18. package/dist/cli-bundle/chunks/{activity-DXS2XMQU.js → activity-H2LMOSSW.js} +11 -11
  19. package/dist/cli-bundle/chunks/activity-XUZ2AHCW.js +18 -0
  20. package/dist/cli-bundle/chunks/{aggregate-NMYDVQF7.js → aggregate-EGJLZQBI.js} +10 -10
  21. package/dist/cli-bundle/chunks/{aggregate-IHM4KMQ3.js → aggregate-R725FC3S.js} +10 -10
  22. package/dist/cli-bundle/chunks/{append-3HY5G7ET.js → append-5J345QGU.js} +8 -8
  23. package/dist/cli-bundle/chunks/{append-K54MDQYC.js → append-O5HPBMRN.js} +8 -8
  24. package/dist/cli-bundle/chunks/{chunk-GU7YHKYP.js → chunk-2A34E3BA.js} +2 -2
  25. package/dist/cli-bundle/chunks/{chunk-7MPTFYT3.js → chunk-2BFPAUAF.js} +15 -4
  26. package/dist/cli-bundle/chunks/chunk-2BFPAUAF.js.map +1 -0
  27. package/dist/cli-bundle/chunks/{chunk-DHBPJ7VG.js → chunk-2CKH2LMV.js} +2 -2
  28. package/dist/cli-bundle/chunks/{chunk-2LEYMXI6.js → chunk-2RDVQEWV.js} +4 -4
  29. package/dist/cli-bundle/chunks/{chunk-PCH2JTEO.js → chunk-2T3JG6V4.js} +2 -2
  30. package/dist/cli-bundle/chunks/{chunk-TZQKEBKF.js → chunk-34EONI5F.js} +2 -2
  31. package/dist/cli-bundle/chunks/{chunk-DU64SZUQ.js → chunk-3VY3YQO6.js} +2 -2
  32. package/dist/cli-bundle/chunks/{chunk-SFKQAVZA.js → chunk-46G6RSB6.js} +8 -8
  33. package/dist/cli-bundle/chunks/{chunk-DMT4ODVN.js → chunk-4BHT5VDC.js} +2 -2
  34. package/dist/cli-bundle/chunks/{chunk-UKK2VTTH.js → chunk-4KD54S3Z.js} +9 -9
  35. package/dist/cli-bundle/chunks/{chunk-DBQUQ3AS.js → chunk-55ISXAQH.js} +7 -4
  36. package/dist/cli-bundle/chunks/{chunk-DBQUQ3AS.js.map → chunk-55ISXAQH.js.map} +2 -2
  37. package/dist/cli-bundle/chunks/{chunk-GGAXE22C.js → chunk-5UVVASSA.js} +6 -6
  38. package/dist/cli-bundle/chunks/{chunk-25XZN3JD.js → chunk-5VOINNKT.js} +2 -2
  39. package/dist/cli-bundle/chunks/{chunk-KRJJPDUO.js → chunk-66MEDTUD.js} +2 -2
  40. package/dist/cli-bundle/chunks/{chunk-MD7XKVWI.js → chunk-7AUB5HNA.js} +7 -7
  41. package/dist/cli-bundle/chunks/{chunk-TJABI6PR.js → chunk-7K2XXO4I.js} +5 -5
  42. package/dist/cli-bundle/chunks/{chunk-AJXYOYJV.js → chunk-7MRQ4HMK.js} +2 -2
  43. package/dist/cli-bundle/chunks/{chunk-THKDPOS5.js → chunk-7SV63ZHD.js} +8 -8
  44. package/dist/cli-bundle/chunks/{chunk-7MALIV5H.js → chunk-7UGEAPRY.js} +9 -9
  45. package/dist/cli-bundle/chunks/{chunk-TIKJAXQW.js → chunk-7XGQXHFB.js} +3 -3
  46. package/dist/cli-bundle/chunks/{chunk-YJICYNAV.js → chunk-AD3A7ZD6.js} +8 -8
  47. package/dist/cli-bundle/chunks/{chunk-FK6MV5F5.js → chunk-AONIHR2C.js} +12 -12
  48. package/dist/cli-bundle/chunks/{chunk-YRLLL5TY.js → chunk-BB6MDVNQ.js} +8 -8
  49. package/dist/cli-bundle/chunks/{chunk-3GL6LTUL.js → chunk-C5AOG6D2.js} +53 -5
  50. package/dist/cli-bundle/chunks/{chunk-3GL6LTUL.js.map → chunk-C5AOG6D2.js.map} +1 -1
  51. package/dist/cli-bundle/chunks/{chunk-I6XE47J2.js → chunk-CE5P2NQR.js} +5 -5
  52. package/dist/cli-bundle/chunks/{chunk-GXBSFKSX.js → chunk-CIIK67GW.js} +4 -4
  53. package/dist/cli-bundle/chunks/{chunk-TRUFOER3.js → chunk-CKGNPJAG.js} +15 -4
  54. package/dist/cli-bundle/chunks/chunk-CKGNPJAG.js.map +7 -0
  55. package/dist/cli-bundle/chunks/{chunk-XKNF3VRJ.js → chunk-DT5LPYOD.js} +5 -5
  56. package/dist/cli-bundle/chunks/{chunk-4SDKF5BG.js → chunk-FIGAZ4Y7.js} +3 -3
  57. package/dist/cli-bundle/chunks/{chunk-CWPBGUC7.js → chunk-FXR67XVQ.js} +2 -2
  58. package/dist/cli-bundle/chunks/{chunk-NIWY4V4Z.js → chunk-G6N5VEOK.js} +3 -3
  59. package/dist/cli-bundle/chunks/{chunk-7GCCDXXN.js → chunk-G6PYHBBR.js} +117 -7
  60. package/dist/cli-bundle/chunks/chunk-G6PYHBBR.js.map +7 -0
  61. package/dist/cli-bundle/chunks/{chunk-C5SWTISA.js → chunk-GAJVRGGA.js} +12 -12
  62. package/dist/cli-bundle/chunks/{chunk-B2KR24R4.js → chunk-H2IP4QLJ.js} +9 -9
  63. package/dist/cli-bundle/chunks/{chunk-VB54F347.js → chunk-H4IIJDE4.js} +2 -2
  64. package/dist/cli-bundle/chunks/{chunk-7PBGTIN3.js → chunk-HFFUQR73.js} +5 -5
  65. package/dist/cli-bundle/chunks/{chunk-RPRFBXND.js → chunk-IB3GYLQE.js} +3 -3
  66. package/dist/cli-bundle/chunks/{chunk-GNDHOR64.js → chunk-IPKJ6B36.js} +6 -6
  67. package/dist/cli-bundle/chunks/{chunk-V4SM4UAL.js → chunk-JR2LV3M4.js} +13 -13
  68. package/dist/cli-bundle/chunks/{chunk-JY25IOEZ.js → chunk-KFWBJPSG.js} +5 -5
  69. package/dist/cli-bundle/chunks/{chunk-D35LTIFR.js → chunk-KQMUV6LX.js} +104 -8
  70. package/dist/cli-bundle/chunks/chunk-KQMUV6LX.js.map +1 -0
  71. package/dist/cli-bundle/chunks/{chunk-Y335KFHD.js → chunk-LRKKONT2.js} +9 -9
  72. package/dist/cli-bundle/chunks/{chunk-QQWEROGS.js → chunk-M4T5DXD5.js} +7 -7
  73. package/dist/cli-bundle/chunks/{chunk-JLSC5NPC.js → chunk-MJTINN54.js} +10 -10
  74. package/dist/cli-bundle/chunks/{chunk-RZZMSY4P.js → chunk-MJTSZKK5.js} +21 -2
  75. package/dist/cli-bundle/chunks/{chunk-RZZMSY4P.js.map → chunk-MJTSZKK5.js.map} +2 -2
  76. package/dist/cli-bundle/chunks/{chunk-4YJA4LGU.js → chunk-MVKFOLLM.js} +52 -4
  77. package/dist/cli-bundle/chunks/{chunk-4YJA4LGU.js.map → chunk-MVKFOLLM.js.map} +2 -2
  78. package/dist/cli-bundle/chunks/{chunk-CR7KFPAQ.js → chunk-NCVCO3NZ.js} +3 -3
  79. package/dist/cli-bundle/chunks/{chunk-CLLVBO3I.js → chunk-NK3UPBVG.js} +2 -2
  80. package/dist/cli-bundle/chunks/{chunk-A25LOPRG.js → chunk-O6LLO73I.js} +2 -2
  81. package/dist/cli-bundle/chunks/{chunk-4JXWVHMN.js → chunk-P77P2ILI.js} +2 -2
  82. package/dist/cli-bundle/chunks/{chunk-I367IDZP.js → chunk-Q2KNGP7C.js} +7 -7
  83. package/dist/cli-bundle/chunks/{chunk-77VKGH4L.js → chunk-QH3PJYON.js} +10 -10
  84. package/dist/cli-bundle/chunks/{chunk-5SESR24H.js → chunk-QL5RVYOA.js} +8 -8
  85. package/dist/cli-bundle/chunks/{chunk-WBSYW3NT.js → chunk-S26C36QC.js} +2 -2
  86. package/dist/cli-bundle/chunks/{chunk-Y4BZEND6.js → chunk-S2RUQSX2.js} +2 -2
  87. package/dist/cli-bundle/chunks/{chunk-NVUATMTC.js → chunk-SBQTAVJZ.js} +3 -3
  88. package/dist/cli-bundle/chunks/{chunk-A7E4ZXG2.js → chunk-SKH7OGE5.js} +2 -2
  89. package/dist/cli-bundle/chunks/{chunk-H6FNDCDI.js → chunk-SKN7LC5W.js} +5 -5
  90. package/dist/cli-bundle/chunks/{chunk-MNGAQB2E.js → chunk-SR3EKWZG.js} +8 -8
  91. package/dist/cli-bundle/chunks/{chunk-PJS2J7Z4.js → chunk-T5472OMV.js} +3 -3
  92. package/dist/cli-bundle/chunks/{chunk-6FQHNHQQ.js → chunk-T72AZDBA.js} +3 -3
  93. package/dist/cli-bundle/chunks/{chunk-YATDFWYK.js → chunk-TQZH6OD6.js} +7 -7
  94. package/dist/cli-bundle/chunks/{chunk-HYQV75IB.js → chunk-U2Z5YUSO.js} +7 -7
  95. package/dist/cli-bundle/chunks/{chunk-KL5ELX2X.js → chunk-UELRKQQU.js} +22 -3
  96. package/dist/cli-bundle/chunks/chunk-UELRKQQU.js.map +1 -0
  97. package/dist/cli-bundle/chunks/{chunk-J2TSPY5L.js → chunk-UVC5LOR7.js} +4 -4
  98. package/dist/cli-bundle/chunks/{chunk-P7ZU73BO.js → chunk-VAYA4XFX.js} +3 -3
  99. package/dist/cli-bundle/chunks/{chunk-47HTJ6BU.js → chunk-VFAQ4LMN.js} +5 -5
  100. package/dist/cli-bundle/chunks/{chunk-WQDX7DVG.js → chunk-W72GHSJE.js} +7 -7
  101. package/dist/cli-bundle/chunks/{chunk-EVPVCE4R.js → chunk-WBRKK5QR.js} +3 -3
  102. package/dist/cli-bundle/chunks/{chunk-YQSWTVZF.js → chunk-WM5ZVBPE.js} +4 -4
  103. package/dist/cli-bundle/chunks/{chunk-NKZOJPXK.js → chunk-WZQWHN4R.js} +3 -3
  104. package/dist/cli-bundle/chunks/{chunk-75VEYQJS.js → chunk-XVF4YARA.js} +3 -3
  105. package/dist/cli-bundle/chunks/{chunk-KBTREGVO.js → chunk-Y4SUQQYH.js} +8 -5
  106. package/dist/cli-bundle/chunks/{chunk-KBTREGVO.js.map → chunk-Y4SUQQYH.js.map} +1 -1
  107. package/dist/cli-bundle/chunks/{chunk-KK4TQ3ZP.js → chunk-YDEXO24S.js} +2 -2
  108. package/dist/cli-bundle/chunks/{chunk-3VLPDG3J.js → chunk-YJ3SUEPD.js} +2 -2
  109. package/dist/cli-bundle/chunks/{chunk-6UPTNMVW.js → chunk-YUDJD3XO.js} +5 -5
  110. package/dist/cli-bundle/chunks/{chunk-K25UDYJ4.js → chunk-ZQ3ZVXX2.js} +2 -2
  111. package/dist/cli-bundle/chunks/{chunk-44O4JIN6.js → chunk-ZRK4O56R.js} +13 -13
  112. package/dist/cli-bundle/chunks/{claim-MPXNVBZQ.js → claim-4KHAA2RN.js} +10 -10
  113. package/dist/cli-bundle/chunks/{claim-SKHJDLW6.js → claim-CSPJFLNH.js} +10 -10
  114. package/dist/cli-bundle/chunks/close-A3EMKBBY.js +15 -0
  115. package/dist/cli-bundle/chunks/{close-4RKSL5L6.js → close-W56IOGYG.js} +8 -8
  116. package/dist/cli-bundle/chunks/{close-many-SXODYBDP.js → close-many-BX5DCSVV.js} +15 -15
  117. package/dist/cli-bundle/chunks/{close-many-AWTPXLHJ.js → close-many-TQU5F4E4.js} +15 -15
  118. package/dist/cli-bundle/chunks/{comments-YYW5P7AG.js → comments-U5KUC4EU.js} +10 -10
  119. package/dist/cli-bundle/chunks/{comments-OOH64LWW.js → comments-VRECH75R.js} +10 -10
  120. package/dist/cli-bundle/chunks/{config-3445MCQQ.js → config-D3OKQO52.js} +8 -8
  121. package/dist/cli-bundle/chunks/{config-LCDMKRB2.js → config-MMJA4LLK.js} +8 -8
  122. package/dist/cli-bundle/chunks/{context-DZMIBIVP.js → context-BLBD3PUB.js} +13 -13
  123. package/dist/cli-bundle/chunks/{context-PJCURODY.js → context-DHLVPXN3.js} +13 -13
  124. package/dist/cli-bundle/chunks/{contracts-7YDFEJB3.js → contracts-C3SZCXXG.js} +7 -5
  125. package/dist/cli-bundle/chunks/contracts-C3SZCXXG.js.map +7 -0
  126. package/dist/cli-bundle/chunks/{contracts-MP2P3HL5.js → contracts-XGVMMPC5.js} +8 -6
  127. package/dist/cli-bundle/chunks/contracts-XGVMMPC5.js.map +1 -0
  128. package/dist/cli-bundle/chunks/{copy-63IQQRRS.js → copy-5D5DX3VK.js} +7 -7
  129. package/dist/cli-bundle/chunks/{copy-TASIH2AZ.js → copy-HHL3K4QP.js} +7 -7
  130. package/dist/cli-bundle/chunks/{create-TGSB5GV4.js → create-IXY43O4H.js} +14 -14
  131. package/dist/cli-bundle/chunks/create-QVGFYA2X.js +30 -0
  132. package/dist/cli-bundle/chunks/{delete-ARILQQLB.js → delete-IBUR3M42.js} +7 -7
  133. package/dist/cli-bundle/chunks/{delete-ZQKBZYNK.js → delete-QQC2FGUH.js} +7 -7
  134. package/dist/cli-bundle/chunks/{deps-NJFJIMQ5.js → deps-KWKRHXIN.js} +7 -7
  135. package/dist/cli-bundle/chunks/{deps-MSHQR2GY.js → deps-VTPO4BSE.js} +7 -7
  136. package/dist/cli-bundle/chunks/{docs-XK2UVUXX.js → docs-7CHFHXLN.js} +9 -9
  137. package/dist/cli-bundle/chunks/{docs-SS4UKYYA.js → docs-IIO3FEUO.js} +9 -9
  138. package/dist/cli-bundle/chunks/{eval-FVZGX5IZ.js → eval-CEYYEPSX.js} +12 -12
  139. package/dist/cli-bundle/chunks/{eval-JOTG2YHU.js → eval-IO7LREOL.js} +12 -12
  140. package/dist/cli-bundle/chunks/{extension-OQPS27B4.js → extension-KCPUWSY2.js} +6 -6
  141. package/dist/cli-bundle/chunks/{extension-NLMS47I4.js → extension-UTTQDUYI.js} +6 -6
  142. package/dist/cli-bundle/chunks/{files-3EVJQZ2N.js → files-TPUL6KWB.js} +9 -9
  143. package/dist/cli-bundle/chunks/{files-Y2P6LN5A.js → files-Z2HHEFGP.js} +9 -9
  144. package/dist/cli-bundle/chunks/{focus-D5ZUPTII.js → focus-JVJCGC2D.js} +8 -8
  145. package/dist/cli-bundle/chunks/{focus-ZPIFTY4R.js → focus-YRNNH7IP.js} +8 -8
  146. package/dist/cli-bundle/chunks/{gc-LXXDY456.js → gc-O5GUO3SU.js} +3 -3
  147. package/dist/cli-bundle/chunks/{gc-RNOEQHSX.js → gc-PYVVEELM.js} +3 -3
  148. package/dist/cli-bundle/chunks/{get-Q3SZGQHD.js → get-ENLTEGTX.js} +11 -11
  149. package/dist/cli-bundle/chunks/{get-W23G7MJX.js → get-X4O3HBEY.js} +11 -11
  150. package/dist/cli-bundle/chunks/{health-5LHSX365.js → health-5EXTY44Q.js} +14 -14
  151. package/dist/cli-bundle/chunks/{health-UDDGJLPP.js → health-BOTB7YSU.js} +14 -14
  152. package/dist/cli-bundle/chunks/{history-6CZVFIUJ.js → history-AJTXLT6S.js} +10 -10
  153. package/dist/cli-bundle/chunks/history-AK3E5Z3C.js +20 -0
  154. package/dist/cli-bundle/chunks/{history-compact-VWUSQH6Z.js → history-compact-43OOUAWD.js} +12 -12
  155. package/dist/cli-bundle/chunks/{history-compact-M35PDQ4G.js → history-compact-46MRHW3I.js} +12 -12
  156. package/dist/cli-bundle/chunks/{history-redact-AJGARHT3.js → history-redact-KUUUVUFM.js} +11 -11
  157. package/dist/cli-bundle/chunks/history-redact-TWIYQV5J.js +21 -0
  158. package/dist/cli-bundle/chunks/{history-repair-5RDMF7K4.js → history-repair-B5PZBOPU.js} +12 -12
  159. package/dist/cli-bundle/chunks/{history-repair-YUAHIPIN.js → history-repair-VQTYOSRS.js} +12 -12
  160. package/dist/cli-bundle/chunks/{init-HASX3YNJ.js → init-BNLVFPRG.js} +11 -11
  161. package/dist/cli-bundle/chunks/init-RCRKW5PL.js +21 -0
  162. package/dist/cli-bundle/chunks/{learnings-M4KA6MQE.js → learnings-MUUU5KMC.js} +10 -10
  163. package/dist/cli-bundle/chunks/{learnings-JNGUIJDK.js → learnings-XSGX52S7.js} +10 -10
  164. package/dist/cli-bundle/chunks/{list-6FMKTIH3.js → list-32U7BSKE.js} +10 -10
  165. package/dist/cli-bundle/chunks/{list-5UU2W24O.js → list-ZEEOHLTQ.js} +10 -10
  166. package/dist/cli-bundle/chunks/{notes-PYCPLA5Y.js → notes-NJ45OZGF.js} +10 -10
  167. package/dist/cli-bundle/chunks/{notes-MODH5CBT.js → notes-OHU25L3M.js} +10 -10
  168. package/dist/cli-bundle/chunks/{plan-DXRIRYRU.js → plan-KQA7CAKI.js} +14 -14
  169. package/dist/cli-bundle/chunks/{plan-EHQALWSC.js → plan-LWWAEV5Y.js} +14 -14
  170. package/dist/cli-bundle/chunks/{register-list-query-QAASVP2J.js → register-list-query-DDCHPONM.js} +19 -19
  171. package/dist/cli-bundle/chunks/{register-list-query-WE54YJMH.js → register-list-query-YNPBVIKM.js} +19 -19
  172. package/dist/cli-bundle/chunks/{register-mutation-B6DZJTY2.js → register-mutation-7ALWDDAX.js} +33 -33
  173. package/dist/cli-bundle/chunks/{register-mutation-CPV4C2KR.js → register-mutation-LAVKYY63.js} +33 -33
  174. package/dist/cli-bundle/chunks/{register-operations-AT3BVVX2.js → register-operations-R4VOQ6EF.js} +32 -32
  175. package/dist/cli-bundle/chunks/{register-operations-RC4C3423.js → register-operations-U5JAW3WE.js} +32 -32
  176. package/dist/cli-bundle/chunks/{register-setup-HXEHMDHE.js → register-setup-KBXQDCXE.js} +23 -19
  177. package/dist/cli-bundle/chunks/register-setup-KBXQDCXE.js.map +7 -0
  178. package/dist/cli-bundle/chunks/{register-setup-JSMJEFCJ.js → register-setup-RCRUHMSZ.js} +24 -20
  179. package/dist/cli-bundle/chunks/register-setup-RCRUHMSZ.js.map +1 -0
  180. package/dist/cli-bundle/chunks/restore-2ZKT6UDC.js +19 -0
  181. package/dist/cli-bundle/chunks/{restore-FNBV4GWE.js → restore-6K53WOWO.js} +11 -11
  182. package/dist/cli-bundle/chunks/{scheduling-shortcuts-JRIUREEU.js → scheduling-shortcuts-NJ5UVJFB.js} +14 -14
  183. package/dist/cli-bundle/chunks/{scheduling-shortcuts-ECL6GBMZ.js → scheduling-shortcuts-OQVJXG3M.js} +14 -14
  184. package/dist/cli-bundle/chunks/{schema-TCW3I7QR.js → schema-MNTAVQCY.js} +9 -9
  185. package/dist/cli-bundle/chunks/{schema-74YENAJL.js → schema-RBTJ2YXW.js} +9 -9
  186. package/dist/cli-bundle/chunks/{search-7USZ6XZA.js → search-6HOIVZDU.js} +12 -12
  187. package/dist/cli-bundle/chunks/{search-GNAUE65M.js → search-ZWYEMASC.js} +12 -12
  188. package/dist/cli-bundle/chunks/{stats-DQMKJMFT.js → stats-FS742AMA.js} +8 -8
  189. package/dist/cli-bundle/chunks/{stats-CVHASAEU.js → stats-R5OAJVZK.js} +8 -8
  190. package/dist/cli-bundle/chunks/{telemetry-7P5EUWCS.js → telemetry-7DIGDQUO.js} +4 -4
  191. package/dist/cli-bundle/chunks/{telemetry-PQTL5YS2.js → telemetry-FWEXSJLQ.js} +4 -4
  192. package/dist/cli-bundle/chunks/{test-FDQZQNZ4.js → test-NZF7OT2F.js} +16 -16
  193. package/dist/cli-bundle/chunks/test-QJXLKV26.js +36 -0
  194. package/dist/cli-bundle/chunks/{test-all-WQIAZVA6.js → test-all-DPN62TX7.js} +16 -16
  195. package/dist/cli-bundle/chunks/{test-all-PIPPS4S5.js → test-all-KL7TLMJF.js} +16 -16
  196. package/dist/cli-bundle/chunks/{test-runs-JS6DNCCI.js → test-runs-C6CFIVOS.js} +5 -5
  197. package/dist/cli-bundle/chunks/{test-runs-NZD2QGL5.js → test-runs-IAJDL6CA.js} +5 -5
  198. package/dist/cli-bundle/chunks/update-2XCQNOD6.js +28 -0
  199. package/dist/cli-bundle/chunks/update-IWUCXVH2.js +24 -0
  200. package/dist/cli-bundle/chunks/{update-many-6NTZ5J5D.js → update-many-MUTIOAP3.js} +23 -23
  201. package/dist/cli-bundle/chunks/{update-many-B3TH5TDS.js → update-many-YEH2DQL6.js} +23 -23
  202. package/dist/cli-bundle/chunks/{upgrade-4C7VE7MS.js → upgrade-HYJ3SWWU.js} +6 -6
  203. package/dist/cli-bundle/chunks/{upgrade-76IKZ6EZ.js → upgrade-UBNLBZNR.js} +6 -6
  204. package/dist/cli-bundle/chunks/{validate-AQU7OCL3.js → validate-6QWQVCX2.js} +21 -21
  205. package/dist/cli-bundle/chunks/{validate-BPM6Z3OT.js → validate-W5V5ZGQX.js} +21 -21
  206. package/dist/cli-bundle/main.js +22 -18
  207. package/dist/cli-bundle/main.js.map +2 -2
  208. package/dist/core/extensions/activation-summary.d.ts +109 -0
  209. package/dist/core/extensions/activation-summary.js +60 -0
  210. package/dist/core/extensions/activation-summary.js.map +1 -0
  211. package/dist/core/extensions/capability-usage.d.ts +10 -0
  212. package/dist/core/extensions/capability-usage.js +12 -3
  213. package/dist/core/extensions/capability-usage.js.map +1 -1
  214. package/dist/core/telemetry/runtime.js +5 -2
  215. package/dist/core/telemetry/runtime.js.map +1 -1
  216. package/dist/sdk/cli-contracts/enum-contracts.d.ts +1 -1
  217. package/dist/sdk/cli-contracts/enum-contracts.js +4 -2
  218. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  219. package/dist/sdk/cli-contracts.d.ts +1 -0
  220. package/dist/sdk/cli-contracts.js +10 -2
  221. package/dist/sdk/cli-contracts.js.map +1 -1
  222. package/dist/sdk/compose.d.ts +297 -0
  223. package/dist/sdk/compose.js +420 -0
  224. package/dist/sdk/compose.js.map +1 -0
  225. package/dist/sdk/define.d.ts +194 -0
  226. package/dist/sdk/define.js +205 -0
  227. package/dist/sdk/define.js.map +1 -0
  228. package/dist/sdk/index.d.ts +4 -27
  229. package/dist/sdk/index.js +5 -12
  230. package/dist/sdk/index.js.map +1 -1
  231. package/dist/sdk/testing.d.ts +147 -1
  232. package/dist/sdk/testing.js +179 -2
  233. package/dist/sdk/testing.js.map +1 -1
  234. package/docs/COMMANDS.md +1 -0
  235. package/docs/EXTENSIONS.md +8 -5
  236. package/docs/SDK.md +245 -16
  237. package/package.json +1 -1
  238. package/dist/cli-bundle/chunks/activity-NEOI45NX.js +0 -18
  239. package/dist/cli-bundle/chunks/chunk-7GCCDXXN.js.map +0 -7
  240. package/dist/cli-bundle/chunks/chunk-7MPTFYT3.js.map +0 -1
  241. package/dist/cli-bundle/chunks/chunk-D35LTIFR.js.map +0 -1
  242. package/dist/cli-bundle/chunks/chunk-KL5ELX2X.js.map +0 -1
  243. package/dist/cli-bundle/chunks/chunk-TRUFOER3.js.map +0 -7
  244. package/dist/cli-bundle/chunks/close-Z6AI736U.js +0 -15
  245. package/dist/cli-bundle/chunks/contracts-7YDFEJB3.js.map +0 -7
  246. package/dist/cli-bundle/chunks/contracts-MP2P3HL5.js.map +0 -1
  247. package/dist/cli-bundle/chunks/create-3BV2VA3Q.js +0 -30
  248. package/dist/cli-bundle/chunks/history-YRQUD4YM.js +0 -20
  249. package/dist/cli-bundle/chunks/history-redact-27OEOZRZ.js +0 -21
  250. package/dist/cli-bundle/chunks/init-DWAKYRXI.js +0 -21
  251. package/dist/cli-bundle/chunks/register-setup-HXEHMDHE.js.map +0 -7
  252. package/dist/cli-bundle/chunks/register-setup-JSMJEFCJ.js.map +0 -1
  253. package/dist/cli-bundle/chunks/restore-XY4YE2OV.js +0 -19
  254. package/dist/cli-bundle/chunks/test-COWPCGBE.js +0 -36
  255. package/dist/cli-bundle/chunks/update-7IYQHX4Q.js +0 -24
  256. package/dist/cli-bundle/chunks/update-IJKDRBIX.js +0 -28
  257. /package/dist/cli-bundle/chunks/{activity-DXS2XMQU.js.map → activity-H2LMOSSW.js.map} +0 -0
  258. /package/dist/cli-bundle/chunks/{activity-NEOI45NX.js.map → activity-XUZ2AHCW.js.map} +0 -0
  259. /package/dist/cli-bundle/chunks/{aggregate-NMYDVQF7.js.map → aggregate-EGJLZQBI.js.map} +0 -0
  260. /package/dist/cli-bundle/chunks/{aggregate-IHM4KMQ3.js.map → aggregate-R725FC3S.js.map} +0 -0
  261. /package/dist/cli-bundle/chunks/{append-3HY5G7ET.js.map → append-5J345QGU.js.map} +0 -0
  262. /package/dist/cli-bundle/chunks/{append-K54MDQYC.js.map → append-O5HPBMRN.js.map} +0 -0
  263. /package/dist/cli-bundle/chunks/{chunk-GU7YHKYP.js.map → chunk-2A34E3BA.js.map} +0 -0
  264. /package/dist/cli-bundle/chunks/{chunk-DHBPJ7VG.js.map → chunk-2CKH2LMV.js.map} +0 -0
  265. /package/dist/cli-bundle/chunks/{chunk-2LEYMXI6.js.map → chunk-2RDVQEWV.js.map} +0 -0
  266. /package/dist/cli-bundle/chunks/{chunk-PCH2JTEO.js.map → chunk-2T3JG6V4.js.map} +0 -0
  267. /package/dist/cli-bundle/chunks/{chunk-TZQKEBKF.js.map → chunk-34EONI5F.js.map} +0 -0
  268. /package/dist/cli-bundle/chunks/{chunk-DU64SZUQ.js.map → chunk-3VY3YQO6.js.map} +0 -0
  269. /package/dist/cli-bundle/chunks/{chunk-SFKQAVZA.js.map → chunk-46G6RSB6.js.map} +0 -0
  270. /package/dist/cli-bundle/chunks/{chunk-DMT4ODVN.js.map → chunk-4BHT5VDC.js.map} +0 -0
  271. /package/dist/cli-bundle/chunks/{chunk-UKK2VTTH.js.map → chunk-4KD54S3Z.js.map} +0 -0
  272. /package/dist/cli-bundle/chunks/{chunk-GGAXE22C.js.map → chunk-5UVVASSA.js.map} +0 -0
  273. /package/dist/cli-bundle/chunks/{chunk-25XZN3JD.js.map → chunk-5VOINNKT.js.map} +0 -0
  274. /package/dist/cli-bundle/chunks/{chunk-KRJJPDUO.js.map → chunk-66MEDTUD.js.map} +0 -0
  275. /package/dist/cli-bundle/chunks/{chunk-MD7XKVWI.js.map → chunk-7AUB5HNA.js.map} +0 -0
  276. /package/dist/cli-bundle/chunks/{chunk-TJABI6PR.js.map → chunk-7K2XXO4I.js.map} +0 -0
  277. /package/dist/cli-bundle/chunks/{chunk-AJXYOYJV.js.map → chunk-7MRQ4HMK.js.map} +0 -0
  278. /package/dist/cli-bundle/chunks/{chunk-THKDPOS5.js.map → chunk-7SV63ZHD.js.map} +0 -0
  279. /package/dist/cli-bundle/chunks/{chunk-7MALIV5H.js.map → chunk-7UGEAPRY.js.map} +0 -0
  280. /package/dist/cli-bundle/chunks/{chunk-TIKJAXQW.js.map → chunk-7XGQXHFB.js.map} +0 -0
  281. /package/dist/cli-bundle/chunks/{chunk-YJICYNAV.js.map → chunk-AD3A7ZD6.js.map} +0 -0
  282. /package/dist/cli-bundle/chunks/{chunk-FK6MV5F5.js.map → chunk-AONIHR2C.js.map} +0 -0
  283. /package/dist/cli-bundle/chunks/{chunk-YRLLL5TY.js.map → chunk-BB6MDVNQ.js.map} +0 -0
  284. /package/dist/cli-bundle/chunks/{chunk-I6XE47J2.js.map → chunk-CE5P2NQR.js.map} +0 -0
  285. /package/dist/cli-bundle/chunks/{chunk-GXBSFKSX.js.map → chunk-CIIK67GW.js.map} +0 -0
  286. /package/dist/cli-bundle/chunks/{chunk-XKNF3VRJ.js.map → chunk-DT5LPYOD.js.map} +0 -0
  287. /package/dist/cli-bundle/chunks/{chunk-4SDKF5BG.js.map → chunk-FIGAZ4Y7.js.map} +0 -0
  288. /package/dist/cli-bundle/chunks/{chunk-CWPBGUC7.js.map → chunk-FXR67XVQ.js.map} +0 -0
  289. /package/dist/cli-bundle/chunks/{chunk-NIWY4V4Z.js.map → chunk-G6N5VEOK.js.map} +0 -0
  290. /package/dist/cli-bundle/chunks/{chunk-C5SWTISA.js.map → chunk-GAJVRGGA.js.map} +0 -0
  291. /package/dist/cli-bundle/chunks/{chunk-B2KR24R4.js.map → chunk-H2IP4QLJ.js.map} +0 -0
  292. /package/dist/cli-bundle/chunks/{chunk-VB54F347.js.map → chunk-H4IIJDE4.js.map} +0 -0
  293. /package/dist/cli-bundle/chunks/{chunk-7PBGTIN3.js.map → chunk-HFFUQR73.js.map} +0 -0
  294. /package/dist/cli-bundle/chunks/{chunk-RPRFBXND.js.map → chunk-IB3GYLQE.js.map} +0 -0
  295. /package/dist/cli-bundle/chunks/{chunk-GNDHOR64.js.map → chunk-IPKJ6B36.js.map} +0 -0
  296. /package/dist/cli-bundle/chunks/{chunk-V4SM4UAL.js.map → chunk-JR2LV3M4.js.map} +0 -0
  297. /package/dist/cli-bundle/chunks/{chunk-JY25IOEZ.js.map → chunk-KFWBJPSG.js.map} +0 -0
  298. /package/dist/cli-bundle/chunks/{chunk-Y335KFHD.js.map → chunk-LRKKONT2.js.map} +0 -0
  299. /package/dist/cli-bundle/chunks/{chunk-QQWEROGS.js.map → chunk-M4T5DXD5.js.map} +0 -0
  300. /package/dist/cli-bundle/chunks/{chunk-JLSC5NPC.js.map → chunk-MJTINN54.js.map} +0 -0
  301. /package/dist/cli-bundle/chunks/{chunk-CR7KFPAQ.js.map → chunk-NCVCO3NZ.js.map} +0 -0
  302. /package/dist/cli-bundle/chunks/{chunk-CLLVBO3I.js.map → chunk-NK3UPBVG.js.map} +0 -0
  303. /package/dist/cli-bundle/chunks/{chunk-A25LOPRG.js.map → chunk-O6LLO73I.js.map} +0 -0
  304. /package/dist/cli-bundle/chunks/{chunk-4JXWVHMN.js.map → chunk-P77P2ILI.js.map} +0 -0
  305. /package/dist/cli-bundle/chunks/{chunk-I367IDZP.js.map → chunk-Q2KNGP7C.js.map} +0 -0
  306. /package/dist/cli-bundle/chunks/{chunk-77VKGH4L.js.map → chunk-QH3PJYON.js.map} +0 -0
  307. /package/dist/cli-bundle/chunks/{chunk-5SESR24H.js.map → chunk-QL5RVYOA.js.map} +0 -0
  308. /package/dist/cli-bundle/chunks/{chunk-WBSYW3NT.js.map → chunk-S26C36QC.js.map} +0 -0
  309. /package/dist/cli-bundle/chunks/{chunk-Y4BZEND6.js.map → chunk-S2RUQSX2.js.map} +0 -0
  310. /package/dist/cli-bundle/chunks/{chunk-NVUATMTC.js.map → chunk-SBQTAVJZ.js.map} +0 -0
  311. /package/dist/cli-bundle/chunks/{chunk-A7E4ZXG2.js.map → chunk-SKH7OGE5.js.map} +0 -0
  312. /package/dist/cli-bundle/chunks/{chunk-H6FNDCDI.js.map → chunk-SKN7LC5W.js.map} +0 -0
  313. /package/dist/cli-bundle/chunks/{chunk-MNGAQB2E.js.map → chunk-SR3EKWZG.js.map} +0 -0
  314. /package/dist/cli-bundle/chunks/{chunk-PJS2J7Z4.js.map → chunk-T5472OMV.js.map} +0 -0
  315. /package/dist/cli-bundle/chunks/{chunk-6FQHNHQQ.js.map → chunk-T72AZDBA.js.map} +0 -0
  316. /package/dist/cli-bundle/chunks/{chunk-YATDFWYK.js.map → chunk-TQZH6OD6.js.map} +0 -0
  317. /package/dist/cli-bundle/chunks/{chunk-HYQV75IB.js.map → chunk-U2Z5YUSO.js.map} +0 -0
  318. /package/dist/cli-bundle/chunks/{chunk-J2TSPY5L.js.map → chunk-UVC5LOR7.js.map} +0 -0
  319. /package/dist/cli-bundle/chunks/{chunk-P7ZU73BO.js.map → chunk-VAYA4XFX.js.map} +0 -0
  320. /package/dist/cli-bundle/chunks/{chunk-47HTJ6BU.js.map → chunk-VFAQ4LMN.js.map} +0 -0
  321. /package/dist/cli-bundle/chunks/{chunk-WQDX7DVG.js.map → chunk-W72GHSJE.js.map} +0 -0
  322. /package/dist/cli-bundle/chunks/{chunk-EVPVCE4R.js.map → chunk-WBRKK5QR.js.map} +0 -0
  323. /package/dist/cli-bundle/chunks/{chunk-YQSWTVZF.js.map → chunk-WM5ZVBPE.js.map} +0 -0
  324. /package/dist/cli-bundle/chunks/{chunk-NKZOJPXK.js.map → chunk-WZQWHN4R.js.map} +0 -0
  325. /package/dist/cli-bundle/chunks/{chunk-75VEYQJS.js.map → chunk-XVF4YARA.js.map} +0 -0
  326. /package/dist/cli-bundle/chunks/{chunk-KK4TQ3ZP.js.map → chunk-YDEXO24S.js.map} +0 -0
  327. /package/dist/cli-bundle/chunks/{chunk-3VLPDG3J.js.map → chunk-YJ3SUEPD.js.map} +0 -0
  328. /package/dist/cli-bundle/chunks/{chunk-6UPTNMVW.js.map → chunk-YUDJD3XO.js.map} +0 -0
  329. /package/dist/cli-bundle/chunks/{chunk-K25UDYJ4.js.map → chunk-ZQ3ZVXX2.js.map} +0 -0
  330. /package/dist/cli-bundle/chunks/{chunk-44O4JIN6.js.map → chunk-ZRK4O56R.js.map} +0 -0
  331. /package/dist/cli-bundle/chunks/{claim-MPXNVBZQ.js.map → claim-4KHAA2RN.js.map} +0 -0
  332. /package/dist/cli-bundle/chunks/{claim-SKHJDLW6.js.map → claim-CSPJFLNH.js.map} +0 -0
  333. /package/dist/cli-bundle/chunks/{close-Z6AI736U.js.map → close-A3EMKBBY.js.map} +0 -0
  334. /package/dist/cli-bundle/chunks/{close-4RKSL5L6.js.map → close-W56IOGYG.js.map} +0 -0
  335. /package/dist/cli-bundle/chunks/{close-many-SXODYBDP.js.map → close-many-BX5DCSVV.js.map} +0 -0
  336. /package/dist/cli-bundle/chunks/{close-many-AWTPXLHJ.js.map → close-many-TQU5F4E4.js.map} +0 -0
  337. /package/dist/cli-bundle/chunks/{comments-YYW5P7AG.js.map → comments-U5KUC4EU.js.map} +0 -0
  338. /package/dist/cli-bundle/chunks/{comments-OOH64LWW.js.map → comments-VRECH75R.js.map} +0 -0
  339. /package/dist/cli-bundle/chunks/{config-3445MCQQ.js.map → config-D3OKQO52.js.map} +0 -0
  340. /package/dist/cli-bundle/chunks/{config-LCDMKRB2.js.map → config-MMJA4LLK.js.map} +0 -0
  341. /package/dist/cli-bundle/chunks/{context-DZMIBIVP.js.map → context-BLBD3PUB.js.map} +0 -0
  342. /package/dist/cli-bundle/chunks/{context-PJCURODY.js.map → context-DHLVPXN3.js.map} +0 -0
  343. /package/dist/cli-bundle/chunks/{copy-63IQQRRS.js.map → copy-5D5DX3VK.js.map} +0 -0
  344. /package/dist/cli-bundle/chunks/{copy-TASIH2AZ.js.map → copy-HHL3K4QP.js.map} +0 -0
  345. /package/dist/cli-bundle/chunks/{create-TGSB5GV4.js.map → create-IXY43O4H.js.map} +0 -0
  346. /package/dist/cli-bundle/chunks/{create-3BV2VA3Q.js.map → create-QVGFYA2X.js.map} +0 -0
  347. /package/dist/cli-bundle/chunks/{delete-ARILQQLB.js.map → delete-IBUR3M42.js.map} +0 -0
  348. /package/dist/cli-bundle/chunks/{delete-ZQKBZYNK.js.map → delete-QQC2FGUH.js.map} +0 -0
  349. /package/dist/cli-bundle/chunks/{deps-NJFJIMQ5.js.map → deps-KWKRHXIN.js.map} +0 -0
  350. /package/dist/cli-bundle/chunks/{deps-MSHQR2GY.js.map → deps-VTPO4BSE.js.map} +0 -0
  351. /package/dist/cli-bundle/chunks/{docs-XK2UVUXX.js.map → docs-7CHFHXLN.js.map} +0 -0
  352. /package/dist/cli-bundle/chunks/{docs-SS4UKYYA.js.map → docs-IIO3FEUO.js.map} +0 -0
  353. /package/dist/cli-bundle/chunks/{eval-FVZGX5IZ.js.map → eval-CEYYEPSX.js.map} +0 -0
  354. /package/dist/cli-bundle/chunks/{eval-JOTG2YHU.js.map → eval-IO7LREOL.js.map} +0 -0
  355. /package/dist/cli-bundle/chunks/{extension-OQPS27B4.js.map → extension-KCPUWSY2.js.map} +0 -0
  356. /package/dist/cli-bundle/chunks/{extension-NLMS47I4.js.map → extension-UTTQDUYI.js.map} +0 -0
  357. /package/dist/cli-bundle/chunks/{files-3EVJQZ2N.js.map → files-TPUL6KWB.js.map} +0 -0
  358. /package/dist/cli-bundle/chunks/{files-Y2P6LN5A.js.map → files-Z2HHEFGP.js.map} +0 -0
  359. /package/dist/cli-bundle/chunks/{focus-D5ZUPTII.js.map → focus-JVJCGC2D.js.map} +0 -0
  360. /package/dist/cli-bundle/chunks/{focus-ZPIFTY4R.js.map → focus-YRNNH7IP.js.map} +0 -0
  361. /package/dist/cli-bundle/chunks/{gc-LXXDY456.js.map → gc-O5GUO3SU.js.map} +0 -0
  362. /package/dist/cli-bundle/chunks/{gc-RNOEQHSX.js.map → gc-PYVVEELM.js.map} +0 -0
  363. /package/dist/cli-bundle/chunks/{get-Q3SZGQHD.js.map → get-ENLTEGTX.js.map} +0 -0
  364. /package/dist/cli-bundle/chunks/{get-W23G7MJX.js.map → get-X4O3HBEY.js.map} +0 -0
  365. /package/dist/cli-bundle/chunks/{health-5LHSX365.js.map → health-5EXTY44Q.js.map} +0 -0
  366. /package/dist/cli-bundle/chunks/{health-UDDGJLPP.js.map → health-BOTB7YSU.js.map} +0 -0
  367. /package/dist/cli-bundle/chunks/{history-6CZVFIUJ.js.map → history-AJTXLT6S.js.map} +0 -0
  368. /package/dist/cli-bundle/chunks/{history-YRQUD4YM.js.map → history-AK3E5Z3C.js.map} +0 -0
  369. /package/dist/cli-bundle/chunks/{history-compact-VWUSQH6Z.js.map → history-compact-43OOUAWD.js.map} +0 -0
  370. /package/dist/cli-bundle/chunks/{history-compact-M35PDQ4G.js.map → history-compact-46MRHW3I.js.map} +0 -0
  371. /package/dist/cli-bundle/chunks/{history-redact-AJGARHT3.js.map → history-redact-KUUUVUFM.js.map} +0 -0
  372. /package/dist/cli-bundle/chunks/{history-redact-27OEOZRZ.js.map → history-redact-TWIYQV5J.js.map} +0 -0
  373. /package/dist/cli-bundle/chunks/{history-repair-5RDMF7K4.js.map → history-repair-B5PZBOPU.js.map} +0 -0
  374. /package/dist/cli-bundle/chunks/{history-repair-YUAHIPIN.js.map → history-repair-VQTYOSRS.js.map} +0 -0
  375. /package/dist/cli-bundle/chunks/{init-HASX3YNJ.js.map → init-BNLVFPRG.js.map} +0 -0
  376. /package/dist/cli-bundle/chunks/{init-DWAKYRXI.js.map → init-RCRKW5PL.js.map} +0 -0
  377. /package/dist/cli-bundle/chunks/{learnings-M4KA6MQE.js.map → learnings-MUUU5KMC.js.map} +0 -0
  378. /package/dist/cli-bundle/chunks/{learnings-JNGUIJDK.js.map → learnings-XSGX52S7.js.map} +0 -0
  379. /package/dist/cli-bundle/chunks/{list-6FMKTIH3.js.map → list-32U7BSKE.js.map} +0 -0
  380. /package/dist/cli-bundle/chunks/{list-5UU2W24O.js.map → list-ZEEOHLTQ.js.map} +0 -0
  381. /package/dist/cli-bundle/chunks/{notes-PYCPLA5Y.js.map → notes-NJ45OZGF.js.map} +0 -0
  382. /package/dist/cli-bundle/chunks/{notes-MODH5CBT.js.map → notes-OHU25L3M.js.map} +0 -0
  383. /package/dist/cli-bundle/chunks/{plan-DXRIRYRU.js.map → plan-KQA7CAKI.js.map} +0 -0
  384. /package/dist/cli-bundle/chunks/{plan-EHQALWSC.js.map → plan-LWWAEV5Y.js.map} +0 -0
  385. /package/dist/cli-bundle/chunks/{register-list-query-QAASVP2J.js.map → register-list-query-DDCHPONM.js.map} +0 -0
  386. /package/dist/cli-bundle/chunks/{register-list-query-WE54YJMH.js.map → register-list-query-YNPBVIKM.js.map} +0 -0
  387. /package/dist/cli-bundle/chunks/{register-mutation-B6DZJTY2.js.map → register-mutation-7ALWDDAX.js.map} +0 -0
  388. /package/dist/cli-bundle/chunks/{register-mutation-CPV4C2KR.js.map → register-mutation-LAVKYY63.js.map} +0 -0
  389. /package/dist/cli-bundle/chunks/{register-operations-AT3BVVX2.js.map → register-operations-R4VOQ6EF.js.map} +0 -0
  390. /package/dist/cli-bundle/chunks/{register-operations-RC4C3423.js.map → register-operations-U5JAW3WE.js.map} +0 -0
  391. /package/dist/cli-bundle/chunks/{restore-XY4YE2OV.js.map → restore-2ZKT6UDC.js.map} +0 -0
  392. /package/dist/cli-bundle/chunks/{restore-FNBV4GWE.js.map → restore-6K53WOWO.js.map} +0 -0
  393. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-JRIUREEU.js.map → scheduling-shortcuts-NJ5UVJFB.js.map} +0 -0
  394. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-ECL6GBMZ.js.map → scheduling-shortcuts-OQVJXG3M.js.map} +0 -0
  395. /package/dist/cli-bundle/chunks/{schema-TCW3I7QR.js.map → schema-MNTAVQCY.js.map} +0 -0
  396. /package/dist/cli-bundle/chunks/{schema-74YENAJL.js.map → schema-RBTJ2YXW.js.map} +0 -0
  397. /package/dist/cli-bundle/chunks/{search-7USZ6XZA.js.map → search-6HOIVZDU.js.map} +0 -0
  398. /package/dist/cli-bundle/chunks/{search-GNAUE65M.js.map → search-ZWYEMASC.js.map} +0 -0
  399. /package/dist/cli-bundle/chunks/{stats-DQMKJMFT.js.map → stats-FS742AMA.js.map} +0 -0
  400. /package/dist/cli-bundle/chunks/{stats-CVHASAEU.js.map → stats-R5OAJVZK.js.map} +0 -0
  401. /package/dist/cli-bundle/chunks/{telemetry-7P5EUWCS.js.map → telemetry-7DIGDQUO.js.map} +0 -0
  402. /package/dist/cli-bundle/chunks/{telemetry-PQTL5YS2.js.map → telemetry-FWEXSJLQ.js.map} +0 -0
  403. /package/dist/cli-bundle/chunks/{test-FDQZQNZ4.js.map → test-NZF7OT2F.js.map} +0 -0
  404. /package/dist/cli-bundle/chunks/{test-COWPCGBE.js.map → test-QJXLKV26.js.map} +0 -0
  405. /package/dist/cli-bundle/chunks/{test-all-WQIAZVA6.js.map → test-all-DPN62TX7.js.map} +0 -0
  406. /package/dist/cli-bundle/chunks/{test-all-PIPPS4S5.js.map → test-all-KL7TLMJF.js.map} +0 -0
  407. /package/dist/cli-bundle/chunks/{test-runs-JS6DNCCI.js.map → test-runs-C6CFIVOS.js.map} +0 -0
  408. /package/dist/cli-bundle/chunks/{test-runs-NZD2QGL5.js.map → test-runs-IAJDL6CA.js.map} +0 -0
  409. /package/dist/cli-bundle/chunks/{update-IJKDRBIX.js.map → update-2XCQNOD6.js.map} +0 -0
  410. /package/dist/cli-bundle/chunks/{update-7IYQHX4Q.js.map → update-IWUCXVH2.js.map} +0 -0
  411. /package/dist/cli-bundle/chunks/{update-many-6NTZ5J5D.js.map → update-many-MUTIOAP3.js.map} +0 -0
  412. /package/dist/cli-bundle/chunks/{update-many-B3TH5TDS.js.map → update-many-YEH2DQL6.js.map} +0 -0
  413. /package/dist/cli-bundle/chunks/{upgrade-4C7VE7MS.js.map → upgrade-HYJ3SWWU.js.map} +0 -0
  414. /package/dist/cli-bundle/chunks/{upgrade-76IKZ6EZ.js.map → upgrade-UBNLBZNR.js.map} +0 -0
  415. /package/dist/cli-bundle/chunks/{validate-AQU7OCL3.js.map → validate-6QWQVCX2.js.map} +0 -0
  416. /package/dist/cli-bundle/chunks/{validate-BPM6Z3OT.js.map → validate-W5V5ZGQX.js.map} +0 -0
@@ -0,0 +1,420 @@
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]="3a61717e-bae1-57d3-a1d1-436b1a60deca")}catch(e){}}();
3
+ import { normalizeKnownExtensionCapability, resolveLegacyExtensionCapabilityAlias, } from "../core/extensions/extension-capability-aliases.js";
4
+ import { normalizeCommandName } from "../core/extensions/extension-runtime-helpers.js";
5
+ /**
6
+ * Typed identity helper for extension module exports.
7
+ *
8
+ * Use as:
9
+ * `export default defineExtension({ activate(api) { ... } })`
10
+ *
11
+ * Reach for {@link composeExtension} instead when you would rather declare the
12
+ * registrations as data than wire them imperatively in `activate`.
13
+ */
14
+ export function defineExtension(module) {
15
+ return module;
16
+ }
17
+ /**
18
+ * Assemble an {@link ExtensionModule} from a declarative {@link ExtensionBlueprint}.
19
+ *
20
+ * The returned module's `activate` registers every populated surface through the
21
+ * matching `api.register*` method in a deterministic order (commands → overrides
22
+ * → flags → parsers → renderers → services → preflights → item types → item
23
+ * fields → migrations → search providers → vector store adapters → importers →
24
+ * exporters → hooks), then awaits the blueprint's optional imperative `activate`
25
+ * so it can layer on anything the declarative form cannot express. `manifest`
26
+ * and `deactivate` are copied onto the module verbatim.
27
+ *
28
+ * This is a pure assembler: it does not validate the definitions. Per-surface
29
+ * contract enforcement stays in `api.register*` (and the loader), exactly as it
30
+ * does for hand-written `activate` bodies, so a malformed definition surfaces
31
+ * the same activation diagnostic either way.
32
+ */
33
+ export function composeExtension(blueprint) {
34
+ const activate = async (api) => {
35
+ for (const command of blueprint.commands ?? []) {
36
+ api.registerCommand(command);
37
+ }
38
+ for (const [command, override] of Object.entries(blueprint.commandOverrides ?? {})) {
39
+ api.registerCommand(command, override);
40
+ }
41
+ for (const [targetCommand, flags] of Object.entries(blueprint.flags ?? {})) {
42
+ api.registerFlags(targetCommand, flags);
43
+ }
44
+ for (const [command, override] of Object.entries(blueprint.parsers ?? {})) {
45
+ api.registerParser(command, override);
46
+ }
47
+ for (const [format, renderer] of Object.entries(blueprint.renderers ?? {})) {
48
+ api.registerRenderer(format, renderer);
49
+ }
50
+ for (const [service, override] of Object.entries(blueprint.services ?? {})) {
51
+ api.registerService(service, override);
52
+ }
53
+ for (const override of blueprint.preflights ?? []) {
54
+ api.registerPreflight(override);
55
+ }
56
+ const itemTypes = blueprint.itemTypes ?? [];
57
+ if (itemTypes.length > 0) {
58
+ api.registerItemTypes(itemTypes);
59
+ }
60
+ const itemFields = blueprint.itemFields ?? [];
61
+ if (itemFields.length > 0) {
62
+ api.registerItemFields(itemFields);
63
+ }
64
+ for (const migration of blueprint.migrations ?? []) {
65
+ api.registerMigration(migration);
66
+ }
67
+ for (const provider of blueprint.searchProviders ?? []) {
68
+ api.registerSearchProvider(provider);
69
+ }
70
+ for (const adapter of blueprint.vectorStoreAdapters ?? []) {
71
+ api.registerVectorStoreAdapter(adapter);
72
+ }
73
+ for (const entry of blueprint.importers ?? []) {
74
+ api.registerImporter(entry.name, entry.importer, entry.options);
75
+ }
76
+ for (const entry of blueprint.exporters ?? []) {
77
+ api.registerExporter(entry.name, entry.exporter, entry.options);
78
+ }
79
+ // `?? {}` (rather than a `!== undefined` guard) so an untyped JavaScript
80
+ // author who passes `hooks: null` is treated the same as omitting it,
81
+ // instead of throwing on the first `hooks.beforeCommand` access.
82
+ const hooks = blueprint.hooks ?? {};
83
+ for (const hook of hooks.beforeCommand ?? []) {
84
+ api.hooks.beforeCommand(hook);
85
+ }
86
+ for (const hook of hooks.afterCommand ?? []) {
87
+ api.hooks.afterCommand(hook);
88
+ }
89
+ for (const hook of hooks.onWrite ?? []) {
90
+ api.hooks.onWrite(hook);
91
+ }
92
+ for (const hook of hooks.onRead ?? []) {
93
+ api.hooks.onRead(hook);
94
+ }
95
+ for (const hook of hooks.onIndex ?? []) {
96
+ api.hooks.onIndex(hook);
97
+ }
98
+ await blueprint.activate?.(api);
99
+ };
100
+ // Truthy checks (rather than `!== undefined`) so an explicit `null` mirror or
101
+ // teardown is treated as absent instead of copied onto the module.
102
+ const module = { activate };
103
+ if (blueprint.manifest) {
104
+ module.manifest = blueprint.manifest;
105
+ }
106
+ if (blueprint.deactivate) {
107
+ module.deactivate = blueprint.deactivate;
108
+ }
109
+ return module;
110
+ }
111
+ /**
112
+ * Blueprint registration fields whose presence implies a capability, paired with
113
+ * the capability each grants. Mirrors `EXTENSION_CAPABILITY_REGISTRATION_SURFACES`
114
+ * so a blueprint's derived capabilities exactly match what the loader enforces
115
+ * when {@link composeExtension}'s generated `activate` calls `api.register*`.
116
+ *
117
+ * `hooks` is handled separately (it is a nested object, not an array/record of
118
+ * registrations) and so is intentionally absent from this table.
119
+ */
120
+ const BLUEPRINT_FIELD_CAPABILITIES = [
121
+ ["commands", "commands"],
122
+ ["commandOverrides", "commands"],
123
+ ["flags", "schema"],
124
+ ["itemTypes", "schema"],
125
+ ["itemFields", "schema"],
126
+ ["migrations", "schema"],
127
+ ["parsers", "parser"],
128
+ ["renderers", "renderers"],
129
+ ["services", "services"],
130
+ ["preflights", "preflight"],
131
+ ["searchProviders", "search"],
132
+ ["vectorStoreAdapters", "search"],
133
+ ["importers", "importers"],
134
+ ["exporters", "importers"],
135
+ ];
136
+ function hasEntries(value) {
137
+ // `!value` treats both `null` and `undefined` as "no entries", so an untyped
138
+ // JavaScript author cannot crash capability derivation with an explicit null
139
+ // field — `Object.keys(null)` would otherwise throw.
140
+ if (!value) {
141
+ return false;
142
+ }
143
+ if (Array.isArray(value)) {
144
+ return value.length > 0;
145
+ }
146
+ return Object.keys(value).length > 0;
147
+ }
148
+ /**
149
+ * Compute the minimal least-privilege capability set a {@link ExtensionBlueprint}
150
+ * exercises, sorted and de-duplicated.
151
+ *
152
+ * Use it to author `manifest.json` `capabilities` exactly — declaring nothing the
153
+ * extension does not use and nothing it does. It is the author-time inverse of
154
+ * the runtime `reconcileExtensionCapabilityUsage` reconciliation: derive the set
155
+ * here before activation rather than detecting drift after it. A blueprint with
156
+ * no registration surfaces returns an empty array.
157
+ */
158
+ export function deriveExtensionCapabilities(blueprint) {
159
+ const capabilities = new Set();
160
+ for (const [field, capability] of BLUEPRINT_FIELD_CAPABILITIES) {
161
+ if (hasEntries(blueprint[field])) {
162
+ capabilities.add(capability);
163
+ }
164
+ }
165
+ // A command definition carrying its own inline `flags` registers them through
166
+ // `registerCommand`, which asserts the `schema` capability independently of the
167
+ // top-level `flags` record. Mirror that here so the derived set still matches
168
+ // what activation enforces when a command declares flags inline and the
169
+ // blueprint has no separate `flags` field. `!== undefined` (not a truthiness or
170
+ // length check) matches the loader's exact guard, including an empty inline array.
171
+ if ((blueprint.commands ?? []).some((command) => command.flags !== undefined)) {
172
+ capabilities.add("schema");
173
+ }
174
+ // `?? {}` keeps an explicit `hooks: null` from throwing, mirroring composeExtension.
175
+ const hooks = blueprint.hooks ?? {};
176
+ if ([hooks.beforeCommand, hooks.afterCommand, hooks.onWrite, hooks.onRead, hooks.onIndex].some(hasEntries)) {
177
+ capabilities.add("hooks");
178
+ }
179
+ return [...capabilities].sort((left, right) => left.localeCompare(right));
180
+ }
181
+ /**
182
+ * Blueprint hook fields paired with the lifecycle kind each registers, ordered to
183
+ * match `ExtensionActivationResult.hook_counts` (and the runtime
184
+ * {@link ../core/extensions/activation-summary.js#describeExtensionActivation}'s
185
+ * `hooks` ordering) so a blueprint summary's `hooks` list reads in the same
186
+ * canonical order, not alphabetically.
187
+ */
188
+ const BLUEPRINT_HOOK_FIELD_TO_KIND = [
189
+ ["beforeCommand", "before_command"],
190
+ ["afterCommand", "after_command"],
191
+ ["onWrite", "on_write"],
192
+ ["onRead", "on_read"],
193
+ ["onIndex", "on_index"],
194
+ ];
195
+ /** De-duplicate and locale-sort a list of identifiers, mirroring the runtime summary. */
196
+ function sortUnique(values) {
197
+ return [...new Set(values)].sort((left, right) => left.localeCompare(right));
198
+ }
199
+ /**
200
+ * Compute, without activating, the exact {@link ExtensionActivationSummary} that
201
+ * {@link composeExtension}'s generated `activate` would produce for a blueprint.
202
+ *
203
+ * This is the author-time inverse of the runtime
204
+ * {@link ../core/extensions/activation-summary.js#describeExtensionActivation}:
205
+ * the runtime verb walks an *activated* registry, while this one reads the
206
+ * declarative {@link ExtensionBlueprint} data directly, so an author or agent can
207
+ * preview the full named surface map (commands, overrides, handlers, hooks, item
208
+ * types/fields, importers/exporters, search/vector adapters, parser/service/
209
+ * renderer overrides, flag-target commands, and the preflight count) with no
210
+ * loading, activation, or side effects. It is to the named surfaces what
211
+ * {@link deriveExtensionCapabilities} is to the capability set.
212
+ *
213
+ * Fidelity is by construction: command paths are normalized with the same
214
+ * `normalizeCommandName` the loader applies, and importer/exporter handler paths
215
+ * are synthesized as `normalizeCommandName("<name> import|export")`, exactly as
216
+ * `registerImporter`/`registerExporter` do. A parity test pins this output equal
217
+ * to `describeExtensionActivation` over the same composed-and-activated blueprint.
218
+ *
219
+ * The one surface it cannot reflect is the blueprint's optional imperative
220
+ * `activate` escape hatch — arbitrary code a static reader cannot inspect. A
221
+ * blueprint that registers everything through that hatch summarizes as empty.
222
+ */
223
+ export function describeExtensionBlueprint(blueprint) {
224
+ const commandPaths = (blueprint.commands ?? []).map((command) => normalizeCommandName(command.name));
225
+ const importerPaths = (blueprint.importers ?? []).map((entry) => normalizeCommandName(`${entry.name} import`));
226
+ const exporterPaths = (blueprint.exporters ?? []).map((entry) => normalizeCommandName(`${entry.name} export`));
227
+ // A command definition with inline `flags` registers a flag target under its own
228
+ // path in addition to any top-level `flags` record, so union both sources.
229
+ const flagCommands = [
230
+ ...Object.keys(blueprint.flags ?? {}).map((command) => normalizeCommandName(command)),
231
+ ...(blueprint.commands ?? [])
232
+ .filter((command) => command.flags !== undefined)
233
+ .map((command) => normalizeCommandName(command.name)),
234
+ ];
235
+ const hooks = blueprint.hooks ?? {};
236
+ return {
237
+ capabilities: deriveExtensionCapabilities(blueprint),
238
+ commands: sortUnique(commandPaths),
239
+ command_overrides: sortUnique(Object.keys(blueprint.commandOverrides ?? {}).map((command) => normalizeCommandName(command))),
240
+ // command_handlers is a superset of commands that also carries the synthesized
241
+ // importer/exporter command paths, but never the override-only paths.
242
+ command_handlers: sortUnique([...commandPaths, ...importerPaths, ...exporterPaths]),
243
+ hooks: BLUEPRINT_HOOK_FIELD_TO_KIND.filter(([field]) => (hooks[field]?.length ?? 0) > 0).map(([, kind]) => kind),
244
+ flag_commands: sortUnique(flagCommands),
245
+ item_types: sortUnique((blueprint.itemTypes ?? []).map((type) => type.name)),
246
+ item_fields: sortUnique((blueprint.itemFields ?? []).map((field) => field.name)),
247
+ // id-less migrations register but carry no identifier, so they are omitted —
248
+ // exactly as describeExtensionActivation drops them from its `migrations` list.
249
+ migrations: sortUnique((blueprint.migrations ?? []).flatMap((migration) => (typeof migration.id === "string" ? [migration.id] : []))),
250
+ importers: sortUnique((blueprint.importers ?? []).map((entry) => normalizeCommandName(entry.name))),
251
+ exporters: sortUnique((blueprint.exporters ?? []).map((entry) => normalizeCommandName(entry.name))),
252
+ search_providers: sortUnique((blueprint.searchProviders ?? []).map((provider) => provider.name)),
253
+ vector_store_adapters: sortUnique((blueprint.vectorStoreAdapters ?? []).map((adapter) => adapter.name)),
254
+ parser_overrides: sortUnique(Object.keys(blueprint.parsers ?? {}).map((command) => normalizeCommandName(command))),
255
+ service_overrides: sortUnique(Object.keys(blueprint.services ?? {}).map((service) => String(service).trim().toLowerCase())),
256
+ renderer_overrides: sortUnique(Object.keys(blueprint.renderers ?? {}).map((format) => String(format).trim().toLowerCase())),
257
+ preflight_overrides: (blueprint.preflights ?? []).length,
258
+ };
259
+ }
260
+ /**
261
+ * The blueprint registration fields a lint flags as a dead "empty surface" when
262
+ * present but empty. Mirrors {@link BlueprintRegistrationField} so adding a new
263
+ * registration surface forces a decision here too; `hooks` is handled separately
264
+ * because it is a nested object rather than an array/record of registrations.
265
+ */
266
+ const BLUEPRINT_LINTABLE_SURFACE_FIELDS = [
267
+ "commands",
268
+ "commandOverrides",
269
+ "flags",
270
+ "parsers",
271
+ "renderers",
272
+ "services",
273
+ "preflights",
274
+ "itemTypes",
275
+ "itemFields",
276
+ "migrations",
277
+ "searchProviders",
278
+ "vectorStoreAdapters",
279
+ "importers",
280
+ "exporters",
281
+ ];
282
+ /** Normalize a raw declared-capability list to known capabilities only (legacy-alias aware, sorted, de-duplicated). */
283
+ function normalizeDeclaredCapabilities(capabilities) {
284
+ const known = new Set();
285
+ for (const capability of capabilities) {
286
+ // Resolve a legacy alias (e.g. migration/validation → schema) exactly as the
287
+ // loader does before reconciliation — the author's raw manifest input has not
288
+ // been loader-normalized yet, so failing to resolve it here would misreport an
289
+ // alias-satisfied capability as undeclared. Fall back to a canonical known
290
+ // name; unknown capabilities are a separate diagnostic and are dropped so a
291
+ // typo is not misreported as "unused".
292
+ const normalized = resolveLegacyExtensionCapabilityAlias(capability) ?? normalizeKnownExtensionCapability(capability);
293
+ if (normalized !== null) {
294
+ known.add(normalized);
295
+ }
296
+ }
297
+ return [...known].sort((left, right) => left.localeCompare(right));
298
+ }
299
+ /**
300
+ * Preflight a declarative {@link ExtensionBlueprint} at author time, returning the
301
+ * structured issues that would otherwise only surface at activation.
302
+ *
303
+ * It is the author-time inverse of the runtime extension guardrails — pure data
304
+ * analysis with no loading, activation, or side effects:
305
+ *
306
+ * - capability drift in both directions: a capability a surface exercises but the
307
+ * declared set omits is an `error` (the loader throws `extension_capability_missing`
308
+ * at activation); a declared capability no surface exercises is a `warning` (the
309
+ * author-time form of the `pm package doctor` `extension_capability_unused` note,
310
+ * making this the static inverse of `reconcileExtensionCapabilityUsage`).
311
+ * - structural footguns: a command path declared twice (`duplicate_command`), a
312
+ * path declared as both a command and an override (`command_override_conflict`),
313
+ * and a registration field present but empty (`empty_surface`).
314
+ *
315
+ * The declared set is taken from `options.declaredCapabilities` or, failing that,
316
+ * `blueprint.manifest.capabilities`; with neither, capability reconciliation is
317
+ * skipped and a single `manifest_capabilities_absent` warning suggests adopting
318
+ * {@link deriveExtensionCapabilities}. Like {@link describeExtensionBlueprint},
319
+ * the imperative `activate` escape hatch is invisible to this static check.
320
+ */
321
+ export function lintExtensionBlueprint(blueprint, options = {}) {
322
+ const findings = [];
323
+ const used = deriveExtensionCapabilities(blueprint);
324
+ // A non-array declared source (an untyped `.js` author's malformed manifest, or
325
+ // a missing field) is treated as "no declared set" rather than "declares nothing".
326
+ const declaredSource = options.declaredCapabilities ?? blueprint.manifest?.capabilities;
327
+ const declared = Array.isArray(declaredSource) ? normalizeDeclaredCapabilities(declaredSource) : null;
328
+ if (declared === null) {
329
+ if (used.length > 0) {
330
+ findings.push({
331
+ code: "manifest_capabilities_absent",
332
+ severity: "warning",
333
+ message: `Blueprint exercises ${used.length === 1 ? "capability" : "capabilities"} [${used.join(", ")}] but declares none; set capabilities to deriveExtensionCapabilities(blueprint) so the manifest grant matches.`,
334
+ });
335
+ }
336
+ }
337
+ else {
338
+ const declaredSet = new Set(declared);
339
+ const usedSet = new Set(used);
340
+ for (const capability of used) {
341
+ if (!declaredSet.has(capability)) {
342
+ findings.push({
343
+ code: "capability_undeclared",
344
+ severity: "error",
345
+ message: `Blueprint exercises capability "${capability}" but it is absent from the declared capabilities; activation throws extension_capability_missing — add "${capability}" to the manifest capabilities.`,
346
+ capability,
347
+ });
348
+ }
349
+ }
350
+ for (const capability of declared) {
351
+ if (!usedSet.has(capability)) {
352
+ findings.push({
353
+ code: "capability_unused",
354
+ severity: "warning",
355
+ message: `Capability "${capability}" is declared but no blueprint surface exercises it; drop it to keep the manifest least-privilege (pm package doctor reports this as extension_capability_unused).`,
356
+ capability,
357
+ });
358
+ }
359
+ }
360
+ }
361
+ // Duplicate command paths within the declared command definitions.
362
+ const commandPathCounts = new Map();
363
+ for (const command of blueprint.commands ?? []) {
364
+ const path = normalizeCommandName(command.name);
365
+ commandPathCounts.set(path, (commandPathCounts.get(path) ?? 0) + 1);
366
+ }
367
+ for (const [path, count] of commandPathCounts) {
368
+ if (count > 1) {
369
+ findings.push({
370
+ code: "duplicate_command",
371
+ severity: "warning",
372
+ message: `Command "${path}" is declared ${count} times in commands; the later registration shadows the earlier one at dispatch.`,
373
+ command: path,
374
+ });
375
+ }
376
+ }
377
+ // A command path declared as both a fresh definition and an override.
378
+ const overridePaths = new Set(Object.keys(blueprint.commandOverrides ?? {}).map((command) => normalizeCommandName(command)));
379
+ for (const path of commandPathCounts.keys()) {
380
+ if (overridePaths.has(path)) {
381
+ findings.push({
382
+ code: "command_override_conflict",
383
+ severity: "warning",
384
+ message: `Command "${path}" is declared both as a new command definition and as a command override; register one or the other.`,
385
+ command: path,
386
+ });
387
+ }
388
+ }
389
+ // Registration fields present on the blueprint but contributing nothing.
390
+ for (const field of BLUEPRINT_LINTABLE_SURFACE_FIELDS) {
391
+ if (field in blueprint && !hasEntries(blueprint[field])) {
392
+ findings.push({
393
+ code: "empty_surface",
394
+ severity: "warning",
395
+ message: `Blueprint field "${field}" is present but empty; remove it or populate it.`,
396
+ field,
397
+ });
398
+ }
399
+ }
400
+ if ("hooks" in blueprint) {
401
+ const hooks = blueprint.hooks ?? {};
402
+ const registersHook = [hooks.beforeCommand, hooks.afterCommand, hooks.onWrite, hooks.onRead, hooks.onIndex].some(hasEntries);
403
+ if (!registersHook) {
404
+ findings.push({
405
+ code: "empty_surface",
406
+ severity: "warning",
407
+ message: `Blueprint field "hooks" is present but registers no lifecycle hooks; remove it or populate it.`,
408
+ field: "hooks",
409
+ });
410
+ }
411
+ }
412
+ return {
413
+ ok: findings.every((finding) => finding.severity !== "error"),
414
+ findings,
415
+ used,
416
+ declared,
417
+ };
418
+ }
419
+ //# sourceMappingURL=compose.js.map
420
+ //# debugId=3a61717e-bae1-57d3-a1d1-436b1a60deca
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.js","sources":["sdk/compose.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module sdk/compose\n *\n * Declarative extension authoring — the capstone of the SDK authoring tripod\n * (`author → register → test`).\n *\n * The {@link ./define.js | `define*`} builders type each registration where it\n * is written, and the `assert*`/`run*` testing helpers verify and invoke it. But\n * the author still has to hand-wire every definition into an imperative\n * `activate(api)` body — calling the right `api.register*` method, in the right\n * order, without forgetting one — and then hand-sync `manifest.capabilities` to\n * match. Those are the two most common package-authoring footguns.\n *\n * {@link composeExtension} closes the loop: an author (or an agent) describes\n * *what* to register as a plain {@link ExtensionBlueprint} object, and the SDK\n * generates the `activate` that wires every surface for them.\n * {@link deriveExtensionCapabilities} computes the exact least-privilege\n * capability set that blueprint exercises, so `manifest.json` can be authored\n * with zero declared-but-unused / used-but-undeclared drift (the author-time\n * inverse of the runtime `reconcileExtensionCapabilityUsage` reconciliation).\n *\n * This module also owns {@link ExtensionModule} and {@link defineExtension} —\n * the in-module export shape every extension entry file produces and its\n * zero-cost identity helper — so both the imperative (`defineExtension`) and\n * declarative (`composeExtension`) authoring styles live together. Both are\n * re-exported from the SDK barrel, so the public API is unchanged.\n */\nimport type {\n AfterCommandHook,\n BeforeCommandHook,\n CommandDefinition,\n CommandOverride,\n ExtensionApi,\n ExtensionCapability,\n ExtensionManifest,\n ExtensionServiceName,\n Exporter,\n FlagDefinition,\n ImportExportRegistrationOptions,\n Importer,\n OnIndexHook,\n OnReadHook,\n OnWriteHook,\n OutputRendererFormat,\n ParserOverride,\n PreflightOverride,\n RendererOverride,\n SchemaFieldDefinition,\n SchemaItemTypeDefinition,\n SchemaMigrationDefinition,\n SearchProviderDefinition,\n ServiceOverride,\n VectorStoreAdapterDefinition,\n} from \"../core/extensions/loader.js\";\nimport type { ExtensionActivationSummary } from \"../core/extensions/activation-summary.js\";\nimport {\n normalizeKnownExtensionCapability,\n resolveLegacyExtensionCapabilityAlias,\n} from \"../core/extensions/extension-capability-aliases.js\";\nimport { normalizeCommandName } from \"../core/extensions/extension-runtime-helpers.js\";\n\n/**\n * Documents the extension module payload exchanged by command, SDK, and package integrations.\n *\n * This is the shape an extension entry file exports (as its default export and,\n * conventionally, as named `manifest`/`activate` exports). Produce it directly,\n * via {@link defineExtension} for the imperative style, or via\n * {@link composeExtension} for the declarative style.\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. Type it with\n * {@link defineExtensionManifest} for full contract checking in plain\n * JavaScript packages.\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 *\n * Reach for {@link composeExtension} instead when you would rather declare the\n * registrations as data than wire them imperatively in `activate`.\n */\nexport function defineExtension<TModule extends ExtensionModule>(module: TModule): TModule {\n return module;\n}\n\n/**\n * A single importer registration entry for an {@link ExtensionBlueprint}, mirroring\n * the positional arguments of `api.registerImporter(name, importer, options?)`.\n */\nexport interface ExtensionBlueprintImporter {\n /** Registered importer name; the `<name> import` command path is derived from it. */\n name: string;\n /** The importer handler that bridges an external system into the pm context graph. */\n importer: Importer;\n /** Optional command metadata (description/flags/intent/examples) for the derived command. */\n options?: ImportExportRegistrationOptions;\n}\n\n/**\n * A single exporter registration entry for an {@link ExtensionBlueprint}, mirroring\n * the positional arguments of `api.registerExporter(name, exporter, options?)`.\n */\nexport interface ExtensionBlueprintExporter {\n /** Registered exporter name; the `<name> export` command path is derived from it. */\n name: string;\n /** The exporter handler that bridges the pm context graph out to an external system. */\n exporter: Exporter;\n /** Optional command metadata (description/flags/intent/examples) for the derived command. */\n options?: ImportExportRegistrationOptions;\n}\n\n/**\n * The lifecycle hooks an {@link ExtensionBlueprint} can register, one array per\n * kind. Each entry is registered through the matching `api.hooks.*` method in\n * the canonical order `before_command → after_command → on_write → on_read →\n * on_index`.\n */\nexport interface ExtensionBlueprintHooks {\n /** Hooks fired before a command runs (`api.hooks.beforeCommand`). */\n beforeCommand?: BeforeCommandHook[];\n /** Hooks fired after a command runs (`api.hooks.afterCommand`). */\n afterCommand?: AfterCommandHook[];\n /** Hooks fired when an item is persisted (`api.hooks.onWrite`). */\n onWrite?: OnWriteHook[];\n /** Hooks fired when an item is read (`api.hooks.onRead`). */\n onRead?: OnReadHook[];\n /** Hooks fired during index/search refresh (`api.hooks.onIndex`). */\n onIndex?: OnIndexHook[];\n}\n\n/**\n * A declarative description of everything an extension registers at activation.\n *\n * Every field is optional: populate the surfaces your extension uses (ideally\n * with {@link ./define.js | `define*`}-authored definitions) and leave the rest\n * out. {@link composeExtension} turns the blueprint into an\n * {@link ExtensionModule} whose generated `activate` calls the matching\n * `api.register*` method for each surface, and {@link deriveExtensionCapabilities}\n * computes the capability set the blueprint requires.\n *\n * Record-keyed fields map a routing key (command name, output format, or service\n * name) to its handler, mirroring the two-argument `api.register*` overloads.\n */\nexport interface ExtensionBlueprint {\n /** Optional in-module manifest mirror, copied onto the produced module verbatim. */\n manifest?: ExtensionManifest;\n /** Full command definitions registered via `api.registerCommand(definition)`. */\n commands?: CommandDefinition[];\n /** Command overrides keyed by command name, registered via `api.registerCommand(command, override)`. */\n commandOverrides?: Record<string, CommandOverride>;\n /** Additional flags keyed by target command name, registered via `api.registerFlags(command, flags)`. */\n flags?: Record<string, FlagDefinition[]>;\n /** Parser overrides keyed by command name, registered via `api.registerParser(command, override)`. */\n parsers?: Record<string, ParserOverride>;\n /** Output renderer overrides keyed by format, registered via `api.registerRenderer(format, renderer)`. */\n renderers?: Partial<Record<OutputRendererFormat, RendererOverride>>;\n /** Service overrides keyed by service name, registered via `api.registerService(service, override)`. */\n services?: Partial<Record<ExtensionServiceName, ServiceOverride>>;\n /** Preflight overrides registered via `api.registerPreflight(override)`. */\n preflights?: PreflightOverride[];\n /** Custom item types registered in a single `api.registerItemTypes(types)` call. */\n itemTypes?: SchemaItemTypeDefinition[];\n /** Custom front-matter fields registered in a single `api.registerItemFields(fields)` call. */\n itemFields?: SchemaFieldDefinition[];\n /** Schema migrations registered one at a time via `api.registerMigration(definition)`. */\n migrations?: SchemaMigrationDefinition[];\n /** Search providers registered via `api.registerSearchProvider(provider)`. */\n searchProviders?: SearchProviderDefinition[];\n /** Vector store adapters registered via `api.registerVectorStoreAdapter(adapter)`. */\n vectorStoreAdapters?: VectorStoreAdapterDefinition[];\n /** Importers registered via `api.registerImporter(name, importer, options?)`. */\n importers?: ExtensionBlueprintImporter[];\n /** Exporters registered via `api.registerExporter(name, exporter, options?)`. */\n exporters?: ExtensionBlueprintExporter[];\n /** Lifecycle hooks registered through `api.hooks.*`. */\n hooks?: ExtensionBlueprintHooks;\n /**\n * Optional imperative escape hatch run *after* every declarative registration,\n * for the rare wiring the blueprint cannot express. Receives the same `api`.\n */\n activate?: (api: ExtensionApi) => void | Promise<void>;\n /** Optional teardown hook copied onto the produced module verbatim. */\n deactivate?: () => void | Promise<void>;\n}\n\n/**\n * Assemble an {@link ExtensionModule} from a declarative {@link ExtensionBlueprint}.\n *\n * The returned module's `activate` registers every populated surface through the\n * matching `api.register*` method in a deterministic order (commands → overrides\n * → flags → parsers → renderers → services → preflights → item types → item\n * fields → migrations → search providers → vector store adapters → importers →\n * exporters → hooks), then awaits the blueprint's optional imperative `activate`\n * so it can layer on anything the declarative form cannot express. `manifest`\n * and `deactivate` are copied onto the module verbatim.\n *\n * This is a pure assembler: it does not validate the definitions. Per-surface\n * contract enforcement stays in `api.register*` (and the loader), exactly as it\n * does for hand-written `activate` bodies, so a malformed definition surfaces\n * the same activation diagnostic either way.\n */\nexport function composeExtension(blueprint: ExtensionBlueprint): ExtensionModule {\n const activate = async (api: ExtensionApi): Promise<void> => {\n for (const command of blueprint.commands ?? []) {\n api.registerCommand(command);\n }\n for (const [command, override] of Object.entries(blueprint.commandOverrides ?? {})) {\n api.registerCommand(command, override);\n }\n for (const [targetCommand, flags] of Object.entries(blueprint.flags ?? {})) {\n api.registerFlags(targetCommand, flags);\n }\n for (const [command, override] of Object.entries(blueprint.parsers ?? {})) {\n api.registerParser(command, override);\n }\n for (const [format, renderer] of Object.entries(blueprint.renderers ?? {}) as Array<\n [OutputRendererFormat, RendererOverride]\n >) {\n api.registerRenderer(format, renderer);\n }\n for (const [service, override] of Object.entries(blueprint.services ?? {}) as Array<\n [ExtensionServiceName, ServiceOverride]\n >) {\n api.registerService(service, override);\n }\n for (const override of blueprint.preflights ?? []) {\n api.registerPreflight(override);\n }\n const itemTypes = blueprint.itemTypes ?? [];\n if (itemTypes.length > 0) {\n api.registerItemTypes(itemTypes);\n }\n const itemFields = blueprint.itemFields ?? [];\n if (itemFields.length > 0) {\n api.registerItemFields(itemFields);\n }\n for (const migration of blueprint.migrations ?? []) {\n api.registerMigration(migration);\n }\n for (const provider of blueprint.searchProviders ?? []) {\n api.registerSearchProvider(provider);\n }\n for (const adapter of blueprint.vectorStoreAdapters ?? []) {\n api.registerVectorStoreAdapter(adapter);\n }\n for (const entry of blueprint.importers ?? []) {\n api.registerImporter(entry.name, entry.importer, entry.options);\n }\n for (const entry of blueprint.exporters ?? []) {\n api.registerExporter(entry.name, entry.exporter, entry.options);\n }\n // `?? {}` (rather than a `!== undefined` guard) so an untyped JavaScript\n // author who passes `hooks: null` is treated the same as omitting it,\n // instead of throwing on the first `hooks.beforeCommand` access.\n const hooks: ExtensionBlueprintHooks = blueprint.hooks ?? {};\n for (const hook of hooks.beforeCommand ?? []) {\n api.hooks.beforeCommand(hook);\n }\n for (const hook of hooks.afterCommand ?? []) {\n api.hooks.afterCommand(hook);\n }\n for (const hook of hooks.onWrite ?? []) {\n api.hooks.onWrite(hook);\n }\n for (const hook of hooks.onRead ?? []) {\n api.hooks.onRead(hook);\n }\n for (const hook of hooks.onIndex ?? []) {\n api.hooks.onIndex(hook);\n }\n await blueprint.activate?.(api);\n };\n\n // Truthy checks (rather than `!== undefined`) so an explicit `null` mirror or\n // teardown is treated as absent instead of copied onto the module.\n const module: ExtensionModule = { activate };\n if (blueprint.manifest) {\n module.manifest = blueprint.manifest;\n }\n if (blueprint.deactivate) {\n module.deactivate = blueprint.deactivate;\n }\n return module;\n}\n\n/**\n * Blueprint registration fields whose presence implies a capability, paired with\n * the capability each grants. Mirrors `EXTENSION_CAPABILITY_REGISTRATION_SURFACES`\n * so a blueprint's derived capabilities exactly match what the loader enforces\n * when {@link composeExtension}'s generated `activate` calls `api.register*`.\n *\n * `hooks` is handled separately (it is a nested object, not an array/record of\n * registrations) and so is intentionally absent from this table.\n */\nconst BLUEPRINT_FIELD_CAPABILITIES: ReadonlyArray<readonly [BlueprintRegistrationField, ExtensionCapability]> = [\n [\"commands\", \"commands\"],\n [\"commandOverrides\", \"commands\"],\n [\"flags\", \"schema\"],\n [\"itemTypes\", \"schema\"],\n [\"itemFields\", \"schema\"],\n [\"migrations\", \"schema\"],\n [\"parsers\", \"parser\"],\n [\"renderers\", \"renderers\"],\n [\"services\", \"services\"],\n [\"preflights\", \"preflight\"],\n [\"searchProviders\", \"search\"],\n [\"vectorStoreAdapters\", \"search\"],\n [\"importers\", \"importers\"],\n [\"exporters\", \"importers\"],\n];\n\ntype BlueprintRegistrationField =\n | \"commands\"\n | \"commandOverrides\"\n | \"flags\"\n | \"parsers\"\n | \"renderers\"\n | \"services\"\n | \"preflights\"\n | \"itemTypes\"\n | \"itemFields\"\n | \"migrations\"\n | \"searchProviders\"\n | \"vectorStoreAdapters\"\n | \"importers\"\n | \"exporters\";\n\nfunction hasEntries(value: readonly unknown[] | Record<string, unknown> | null | undefined): boolean {\n // `!value` treats both `null` and `undefined` as \"no entries\", so an untyped\n // JavaScript author cannot crash capability derivation with an explicit null\n // field — `Object.keys(null)` would otherwise throw.\n if (!value) {\n return false;\n }\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n return Object.keys(value).length > 0;\n}\n\n/**\n * Compute the minimal least-privilege capability set a {@link ExtensionBlueprint}\n * exercises, sorted and de-duplicated.\n *\n * Use it to author `manifest.json` `capabilities` exactly — declaring nothing the\n * extension does not use and nothing it does. It is the author-time inverse of\n * the runtime `reconcileExtensionCapabilityUsage` reconciliation: derive the set\n * here before activation rather than detecting drift after it. A blueprint with\n * no registration surfaces returns an empty array.\n */\nexport function deriveExtensionCapabilities(blueprint: ExtensionBlueprint): ExtensionCapability[] {\n const capabilities = new Set<ExtensionCapability>();\n for (const [field, capability] of BLUEPRINT_FIELD_CAPABILITIES) {\n if (hasEntries(blueprint[field])) {\n capabilities.add(capability);\n }\n }\n // A command definition carrying its own inline `flags` registers them through\n // `registerCommand`, which asserts the `schema` capability independently of the\n // top-level `flags` record. Mirror that here so the derived set still matches\n // what activation enforces when a command declares flags inline and the\n // blueprint has no separate `flags` field. `!== undefined` (not a truthiness or\n // length check) matches the loader's exact guard, including an empty inline array.\n if ((blueprint.commands ?? []).some((command) => command.flags !== undefined)) {\n capabilities.add(\"schema\");\n }\n // `?? {}` keeps an explicit `hooks: null` from throwing, mirroring composeExtension.\n const hooks: ExtensionBlueprintHooks = blueprint.hooks ?? {};\n if ([hooks.beforeCommand, hooks.afterCommand, hooks.onWrite, hooks.onRead, hooks.onIndex].some(hasEntries)) {\n capabilities.add(\"hooks\");\n }\n return [...capabilities].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Blueprint hook fields paired with the lifecycle kind each registers, ordered to\n * match `ExtensionActivationResult.hook_counts` (and the runtime\n * {@link ../core/extensions/activation-summary.js#describeExtensionActivation}'s\n * `hooks` ordering) so a blueprint summary's `hooks` list reads in the same\n * canonical order, not alphabetically.\n */\nconst BLUEPRINT_HOOK_FIELD_TO_KIND = [\n [\"beforeCommand\", \"before_command\"],\n [\"afterCommand\", \"after_command\"],\n [\"onWrite\", \"on_write\"],\n [\"onRead\", \"on_read\"],\n [\"onIndex\", \"on_index\"],\n] as const satisfies ReadonlyArray<readonly [keyof ExtensionBlueprintHooks, string]>;\n\n/** De-duplicate and locale-sort a list of identifiers, mirroring the runtime summary. */\nfunction sortUnique<TValue extends string>(values: readonly TValue[]): TValue[] {\n return [...new Set(values)].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Compute, without activating, the exact {@link ExtensionActivationSummary} that\n * {@link composeExtension}'s generated `activate` would produce for a blueprint.\n *\n * This is the author-time inverse of the runtime\n * {@link ../core/extensions/activation-summary.js#describeExtensionActivation}:\n * the runtime verb walks an *activated* registry, while this one reads the\n * declarative {@link ExtensionBlueprint} data directly, so an author or agent can\n * preview the full named surface map (commands, overrides, handlers, hooks, item\n * types/fields, importers/exporters, search/vector adapters, parser/service/\n * renderer overrides, flag-target commands, and the preflight count) with no\n * loading, activation, or side effects. It is to the named surfaces what\n * {@link deriveExtensionCapabilities} is to the capability set.\n *\n * Fidelity is by construction: command paths are normalized with the same\n * `normalizeCommandName` the loader applies, and importer/exporter handler paths\n * are synthesized as `normalizeCommandName(\"<name> import|export\")`, exactly as\n * `registerImporter`/`registerExporter` do. A parity test pins this output equal\n * to `describeExtensionActivation` over the same composed-and-activated blueprint.\n *\n * The one surface it cannot reflect is the blueprint's optional imperative\n * `activate` escape hatch — arbitrary code a static reader cannot inspect. A\n * blueprint that registers everything through that hatch summarizes as empty.\n */\nexport function describeExtensionBlueprint(blueprint: ExtensionBlueprint): ExtensionActivationSummary {\n const commandPaths = (blueprint.commands ?? []).map((command) => normalizeCommandName(command.name));\n const importerPaths = (blueprint.importers ?? []).map((entry) => normalizeCommandName(`${entry.name} import`));\n const exporterPaths = (blueprint.exporters ?? []).map((entry) => normalizeCommandName(`${entry.name} export`));\n // A command definition with inline `flags` registers a flag target under its own\n // path in addition to any top-level `flags` record, so union both sources.\n const flagCommands = [\n ...Object.keys(blueprint.flags ?? {}).map((command) => normalizeCommandName(command)),\n ...(blueprint.commands ?? [])\n .filter((command) => command.flags !== undefined)\n .map((command) => normalizeCommandName(command.name)),\n ];\n const hooks: ExtensionBlueprintHooks = blueprint.hooks ?? {};\n\n return {\n capabilities: deriveExtensionCapabilities(blueprint),\n commands: sortUnique(commandPaths),\n command_overrides: sortUnique(Object.keys(blueprint.commandOverrides ?? {}).map((command) => normalizeCommandName(command))),\n // command_handlers is a superset of commands that also carries the synthesized\n // importer/exporter command paths, but never the override-only paths.\n command_handlers: sortUnique([...commandPaths, ...importerPaths, ...exporterPaths]),\n hooks: BLUEPRINT_HOOK_FIELD_TO_KIND.filter(([field]) => (hooks[field]?.length ?? 0) > 0).map(([, kind]) => kind),\n flag_commands: sortUnique(flagCommands),\n item_types: sortUnique((blueprint.itemTypes ?? []).map((type) => type.name)),\n item_fields: sortUnique((blueprint.itemFields ?? []).map((field) => field.name)),\n // id-less migrations register but carry no identifier, so they are omitted —\n // exactly as describeExtensionActivation drops them from its `migrations` list.\n migrations: sortUnique(\n (blueprint.migrations ?? []).flatMap((migration) => (typeof migration.id === \"string\" ? [migration.id] : [])),\n ),\n importers: sortUnique((blueprint.importers ?? []).map((entry) => normalizeCommandName(entry.name))),\n exporters: sortUnique((blueprint.exporters ?? []).map((entry) => normalizeCommandName(entry.name))),\n search_providers: sortUnique((blueprint.searchProviders ?? []).map((provider) => provider.name)),\n vector_store_adapters: sortUnique((blueprint.vectorStoreAdapters ?? []).map((adapter) => adapter.name)),\n parser_overrides: sortUnique(Object.keys(blueprint.parsers ?? {}).map((command) => normalizeCommandName(command))),\n service_overrides: sortUnique(\n Object.keys(blueprint.services ?? {}).map((service) => String(service).trim().toLowerCase() as ExtensionServiceName),\n ),\n renderer_overrides: sortUnique(\n Object.keys(blueprint.renderers ?? {}).map((format) => String(format).trim().toLowerCase() as OutputRendererFormat),\n ),\n preflight_overrides: (blueprint.preflights ?? []).length,\n };\n}\n\n/**\n * The blueprint registration fields a lint flags as a dead \"empty surface\" when\n * present but empty. Mirrors {@link BlueprintRegistrationField} so adding a new\n * registration surface forces a decision here too; `hooks` is handled separately\n * because it is a nested object rather than an array/record of registrations.\n */\nconst BLUEPRINT_LINTABLE_SURFACE_FIELDS = [\n \"commands\",\n \"commandOverrides\",\n \"flags\",\n \"parsers\",\n \"renderers\",\n \"services\",\n \"preflights\",\n \"itemTypes\",\n \"itemFields\",\n \"migrations\",\n \"searchProviders\",\n \"vectorStoreAdapters\",\n \"importers\",\n \"exporters\",\n] as const satisfies ReadonlyArray<BlueprintRegistrationField>;\n\n/** Severity of an {@link ExtensionBlueprintLintFinding}: a hard `error` (activation will fail) or an advisory `warning`. */\nexport type ExtensionBlueprintLintSeverity = \"error\" | \"warning\";\n\n/**\n * Machine-readable kind of an {@link ExtensionBlueprintLintFinding}.\n *\n * - `capability_undeclared` (error): a surface exercises a capability the declared\n * set omits; the loader throws `extension_capability_missing` at activation.\n * - `capability_unused` (warning): a declared capability no surface exercises; the\n * runtime equivalent is the `pm package doctor` `extension_capability_unused` note.\n * - `duplicate_command` (warning): the same normalized command path is declared\n * more than once in `commands`; the later registration shadows the earlier.\n * - `command_override_conflict` (warning): a path is declared as both a fresh\n * command definition and a command override.\n * - `empty_surface` (warning): a registration field is present but contributes\n * nothing — a dead declaration.\n * - `manifest_capabilities_absent` (warning): the blueprint exercises capabilities\n * but offers no declared set to reconcile against.\n */\nexport type ExtensionBlueprintLintCode =\n | \"capability_undeclared\"\n | \"capability_unused\"\n | \"duplicate_command\"\n | \"command_override_conflict\"\n | \"empty_surface\"\n | \"manifest_capabilities_absent\";\n\n/**\n * A single author-time issue {@link lintExtensionBlueprint} found in a blueprint.\n */\nexport interface ExtensionBlueprintLintFinding {\n /** The machine-readable {@link ExtensionBlueprintLintCode} for programmatic handling. */\n code: ExtensionBlueprintLintCode;\n /** Whether the finding blocks activation (`error`) or is advisory (`warning`). */\n severity: ExtensionBlueprintLintSeverity;\n /** Human-readable explanation, including the suggested fix. */\n message: string;\n /** The capability involved, for capability-drift findings. */\n capability?: ExtensionCapability;\n /** The normalized command path involved, for command findings. */\n command?: string;\n /** The blueprint field involved, for `empty_surface` findings. */\n field?: string;\n}\n\n/**\n * Options for {@link lintExtensionBlueprint} and {@link ../sdk/testing.js#assertExtensionBlueprint}.\n */\nexport interface LintExtensionBlueprintOptions {\n /**\n * The capabilities the package's `manifest.json` declares (or will), used to\n * reconcile against the surfaces the blueprint exercises. Overrides\n * `blueprint.manifest.capabilities` when both are present. Omit both to lint\n * without a capability reconciliation (only the structural checks run).\n */\n declaredCapabilities?: readonly string[];\n}\n\n/**\n * The structured result of {@link lintExtensionBlueprint}.\n */\nexport interface ExtensionBlueprintLintResult {\n /** `true` when no `error`-severity finding is present (warnings still allow activation). */\n ok: boolean;\n /** Every finding, in detection order (capability drift, duplicates, conflicts, empty surfaces). */\n findings: ExtensionBlueprintLintFinding[];\n /** The least-privilege capability set the blueprint exercises (from {@link deriveExtensionCapabilities}). */\n used: ExtensionCapability[];\n /** The normalized declared capability set reconciled against, or `null` when none was provided. */\n declared: ExtensionCapability[] | null;\n}\n\n/** Normalize a raw declared-capability list to known capabilities only (legacy-alias aware, sorted, de-duplicated). */\nfunction normalizeDeclaredCapabilities(capabilities: readonly string[]): ExtensionCapability[] {\n const known = new Set<ExtensionCapability>();\n for (const capability of capabilities) {\n // Resolve a legacy alias (e.g. migration/validation → schema) exactly as the\n // loader does before reconciliation — the author's raw manifest input has not\n // been loader-normalized yet, so failing to resolve it here would misreport an\n // alias-satisfied capability as undeclared. Fall back to a canonical known\n // name; unknown capabilities are a separate diagnostic and are dropped so a\n // typo is not misreported as \"unused\".\n const normalized = resolveLegacyExtensionCapabilityAlias(capability) ?? normalizeKnownExtensionCapability(capability);\n if (normalized !== null) {\n known.add(normalized);\n }\n }\n return [...known].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Preflight a declarative {@link ExtensionBlueprint} at author time, returning the\n * structured issues that would otherwise only surface at activation.\n *\n * It is the author-time inverse of the runtime extension guardrails — pure data\n * analysis with no loading, activation, or side effects:\n *\n * - capability drift in both directions: a capability a surface exercises but the\n * declared set omits is an `error` (the loader throws `extension_capability_missing`\n * at activation); a declared capability no surface exercises is a `warning` (the\n * author-time form of the `pm package doctor` `extension_capability_unused` note,\n * making this the static inverse of `reconcileExtensionCapabilityUsage`).\n * - structural footguns: a command path declared twice (`duplicate_command`), a\n * path declared as both a command and an override (`command_override_conflict`),\n * and a registration field present but empty (`empty_surface`).\n *\n * The declared set is taken from `options.declaredCapabilities` or, failing that,\n * `blueprint.manifest.capabilities`; with neither, capability reconciliation is\n * skipped and a single `manifest_capabilities_absent` warning suggests adopting\n * {@link deriveExtensionCapabilities}. Like {@link describeExtensionBlueprint},\n * the imperative `activate` escape hatch is invisible to this static check.\n */\nexport function lintExtensionBlueprint(\n blueprint: ExtensionBlueprint,\n options: LintExtensionBlueprintOptions = {},\n): ExtensionBlueprintLintResult {\n const findings: ExtensionBlueprintLintFinding[] = [];\n const used = deriveExtensionCapabilities(blueprint);\n\n // A non-array declared source (an untyped `.js` author's malformed manifest, or\n // a missing field) is treated as \"no declared set\" rather than \"declares nothing\".\n const declaredSource = options.declaredCapabilities ?? blueprint.manifest?.capabilities;\n const declared = Array.isArray(declaredSource) ? normalizeDeclaredCapabilities(declaredSource) : null;\n\n if (declared === null) {\n if (used.length > 0) {\n findings.push({\n code: \"manifest_capabilities_absent\",\n severity: \"warning\",\n message: `Blueprint exercises ${used.length === 1 ? \"capability\" : \"capabilities\"} [${used.join(\", \")}] but declares none; set capabilities to deriveExtensionCapabilities(blueprint) so the manifest grant matches.`,\n });\n }\n } else {\n const declaredSet = new Set(declared);\n const usedSet = new Set(used);\n for (const capability of used) {\n if (!declaredSet.has(capability)) {\n findings.push({\n code: \"capability_undeclared\",\n severity: \"error\",\n message: `Blueprint exercises capability \"${capability}\" but it is absent from the declared capabilities; activation throws extension_capability_missing — add \"${capability}\" to the manifest capabilities.`,\n capability,\n });\n }\n }\n for (const capability of declared) {\n if (!usedSet.has(capability)) {\n findings.push({\n code: \"capability_unused\",\n severity: \"warning\",\n message: `Capability \"${capability}\" is declared but no blueprint surface exercises it; drop it to keep the manifest least-privilege (pm package doctor reports this as extension_capability_unused).`,\n capability,\n });\n }\n }\n }\n\n // Duplicate command paths within the declared command definitions.\n const commandPathCounts = new Map<string, number>();\n for (const command of blueprint.commands ?? []) {\n const path = normalizeCommandName(command.name);\n commandPathCounts.set(path, (commandPathCounts.get(path) ?? 0) + 1);\n }\n for (const [path, count] of commandPathCounts) {\n if (count > 1) {\n findings.push({\n code: \"duplicate_command\",\n severity: \"warning\",\n message: `Command \"${path}\" is declared ${count} times in commands; the later registration shadows the earlier one at dispatch.`,\n command: path,\n });\n }\n }\n\n // A command path declared as both a fresh definition and an override.\n const overridePaths = new Set(\n Object.keys(blueprint.commandOverrides ?? {}).map((command) => normalizeCommandName(command)),\n );\n for (const path of commandPathCounts.keys()) {\n if (overridePaths.has(path)) {\n findings.push({\n code: \"command_override_conflict\",\n severity: \"warning\",\n message: `Command \"${path}\" is declared both as a new command definition and as a command override; register one or the other.`,\n command: path,\n });\n }\n }\n\n // Registration fields present on the blueprint but contributing nothing.\n for (const field of BLUEPRINT_LINTABLE_SURFACE_FIELDS) {\n if (field in blueprint && !hasEntries(blueprint[field])) {\n findings.push({\n code: \"empty_surface\",\n severity: \"warning\",\n message: `Blueprint field \"${field}\" is present but empty; remove it or populate it.`,\n field,\n });\n }\n }\n if (\"hooks\" in blueprint) {\n const hooks: ExtensionBlueprintHooks = blueprint.hooks ?? {};\n const registersHook = [hooks.beforeCommand, hooks.afterCommand, hooks.onWrite, hooks.onRead, hooks.onIndex].some(\n hasEntries,\n );\n if (!registersHook) {\n findings.push({\n code: \"empty_surface\",\n severity: \"warning\",\n message: `Blueprint field \"hooks\" is present but registers no lifecycle hooks; remove it or populate it.`,\n field: \"hooks\",\n });\n }\n }\n\n return {\n ok: findings.every((finding) => finding.severity !== \"error\"),\n findings,\n used,\n declared,\n };\n}\n"],"names":[],"mappings":"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","debugId":"3a61717e-bae1-57d3-a1d1-436b1a60deca"}