@unbrained/pm-cli 2026.6.23 → 2026.6.30

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 (716) hide show
  1. package/CHANGELOG.md +120 -0
  2. package/CONTRIBUTING.md +30 -0
  3. package/README.md +16 -3
  4. package/dist/cli/commander-usage.js +3 -3
  5. package/dist/cli/commander-usage.js.map +1 -1
  6. package/dist/cli/commands/aggregate.js +8 -7
  7. package/dist/cli/commands/aggregate.js.map +1 -1
  8. package/dist/cli/commands/close.d.ts +2 -4
  9. package/dist/cli/commands/close.js +5 -17
  10. package/dist/cli/commands/close.js.map +1 -1
  11. package/dist/cli/commands/completion.js +158 -9
  12. package/dist/cli/commands/completion.js.map +1 -1
  13. package/dist/cli/commands/config.d.ts +1 -1
  14. package/dist/cli/commands/config.js +2 -2
  15. package/dist/cli/commands/config.js.map +1 -1
  16. package/dist/cli/commands/context.d.ts +31 -4
  17. package/dist/cli/commands/context.js +33 -10
  18. package/dist/cli/commands/context.js.map +1 -1
  19. package/dist/cli/commands/contracts.js +48 -8
  20. package/dist/cli/commands/contracts.js.map +1 -1
  21. package/dist/cli/commands/create.d.ts +1 -6
  22. package/dist/cli/commands/create.js +10 -155
  23. package/dist/cli/commands/create.js.map +1 -1
  24. package/dist/cli/commands/extension/describe.d.ts +15 -0
  25. package/dist/cli/commands/extension/describe.js +48 -2
  26. package/dist/cli/commands/extension/describe.js.map +1 -1
  27. package/dist/cli/commands/extension/doctor.js +5 -2
  28. package/dist/cli/commands/extension/doctor.js.map +1 -1
  29. package/dist/cli/commands/extension/install-sources.js +37 -7
  30. package/dist/cli/commands/extension/install-sources.js.map +1 -1
  31. package/dist/cli/commands/extension/scaffold.d.ts +31 -8
  32. package/dist/cli/commands/extension/scaffold.js +1956 -182
  33. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  34. package/dist/cli/commands/extension.d.ts +22 -2
  35. package/dist/cli/commands/extension.js +189 -13
  36. package/dist/cli/commands/extension.js.map +1 -1
  37. package/dist/cli/commands/index.d.ts +3 -1
  38. package/dist/cli/commands/index.js +5 -3
  39. package/dist/cli/commands/index.js.map +1 -1
  40. package/dist/cli/commands/item-filter-options.d.ts +63 -0
  41. package/dist/cli/commands/item-filter-options.js +10 -0
  42. package/dist/cli/commands/item-filter-options.js.map +1 -0
  43. package/dist/cli/commands/legacy-none-tokens.d.ts +14 -0
  44. package/dist/cli/commands/legacy-none-tokens.js +31 -2
  45. package/dist/cli/commands/legacy-none-tokens.js.map +1 -1
  46. package/dist/cli/commands/linked-artifacts.d.ts +7 -0
  47. package/dist/cli/commands/linked-artifacts.js +12 -2
  48. package/dist/cli/commands/linked-artifacts.js.map +1 -1
  49. package/dist/cli/commands/list.d.ts +16 -39
  50. package/dist/cli/commands/list.js +127 -118
  51. package/dist/cli/commands/list.js.map +1 -1
  52. package/dist/cli/commands/next.d.ts +98 -0
  53. package/dist/cli/commands/next.js +304 -0
  54. package/dist/cli/commands/next.js.map +1 -0
  55. package/dist/cli/commands/profile.d.ts +208 -0
  56. package/dist/cli/commands/profile.js +418 -0
  57. package/dist/cli/commands/profile.js.map +1 -0
  58. package/dist/cli/commands/repeatable-metadata-parsers.js +12 -13
  59. package/dist/cli/commands/repeatable-metadata-parsers.js.map +1 -1
  60. package/dist/cli/commands/schema.d.ts +7 -0
  61. package/dist/cli/commands/schema.js +9 -3
  62. package/dist/cli/commands/schema.js.map +1 -1
  63. package/dist/cli/commands/search.d.ts +2 -39
  64. package/dist/cli/commands/search.js +104 -106
  65. package/dist/cli/commands/search.js.map +1 -1
  66. package/dist/cli/commands/shared-unset-fields.d.ts +30 -0
  67. package/dist/cli/commands/shared-unset-fields.js +161 -0
  68. package/dist/cli/commands/shared-unset-fields.js.map +1 -0
  69. package/dist/cli/commands/stats.js +15 -3
  70. package/dist/cli/commands/stats.js.map +1 -1
  71. package/dist/cli/commands/test.js +9 -5
  72. package/dist/cli/commands/test.js.map +1 -1
  73. package/dist/cli/commands/update.d.ts +1 -6
  74. package/dist/cli/commands/update.js +12 -157
  75. package/dist/cli/commands/update.js.map +1 -1
  76. package/dist/cli/commands/validate.js +20 -5
  77. package/dist/cli/commands/validate.js.map +1 -1
  78. package/dist/cli/help-content.js +26 -2
  79. package/dist/cli/help-content.js.map +1 -1
  80. package/dist/cli/help-json-payload.js +3 -3
  81. package/dist/cli/help-json-payload.js.map +1 -1
  82. package/dist/cli/main.js +27 -12
  83. package/dist/cli/main.js.map +1 -1
  84. package/dist/cli/register-list-query.js +42 -3
  85. package/dist/cli/register-list-query.js.map +1 -1
  86. package/dist/cli/register-mutation.js +86 -2
  87. package/dist/cli/register-mutation.js.map +1 -1
  88. package/dist/cli/register-setup.js +67 -6
  89. package/dist/cli/register-setup.js.map +1 -1
  90. package/dist/cli/registration-helpers.d.ts +9 -1
  91. package/dist/cli/registration-helpers.js +34 -3
  92. package/dist/cli/registration-helpers.js.map +1 -1
  93. package/dist/cli-bundle/chunks/activity-EJBMXUBH.js +16 -0
  94. package/dist/cli-bundle/chunks/{activity-H2LMOSSW.js → activity-MVSEND6D.js} +9 -11
  95. package/dist/cli-bundle/chunks/{aggregate-R725FC3S.js → aggregate-MOC4TR2G.js} +16 -17
  96. package/dist/cli-bundle/chunks/aggregate-MOC4TR2G.js.map +1 -0
  97. package/dist/cli-bundle/chunks/{aggregate-EGJLZQBI.js → aggregate-XJHLZQ5X.js} +15 -16
  98. package/dist/cli-bundle/chunks/aggregate-XJHLZQ5X.js.map +7 -0
  99. package/dist/cli-bundle/chunks/{append-5J345QGU.js → append-KDHT4GHI.js} +10 -12
  100. package/dist/cli-bundle/chunks/{append-5J345QGU.js.map → append-KDHT4GHI.js.map} +1 -1
  101. package/dist/cli-bundle/chunks/{append-O5HPBMRN.js → append-LEDBAM3K.js} +8 -10
  102. package/dist/cli-bundle/chunks/{append-O5HPBMRN.js.map → append-LEDBAM3K.js.map} +1 -1
  103. package/dist/cli-bundle/chunks/{chunk-IB3GYLQE.js → chunk-3JWQCLR5.js} +3 -3
  104. package/dist/cli-bundle/chunks/{chunk-2A34E3BA.js → chunk-4TXTVZL3.js} +2 -2
  105. package/dist/cli-bundle/chunks/{chunk-G6N5VEOK.js → chunk-4YIMPANT.js} +3 -3
  106. package/dist/cli-bundle/chunks/{chunk-7AUB5HNA.js → chunk-53ARXF2O.js} +9 -11
  107. package/dist/cli-bundle/chunks/{chunk-7AUB5HNA.js.map → chunk-53ARXF2O.js.map} +1 -1
  108. package/dist/cli-bundle/chunks/chunk-5ABGFWR4.js +116 -0
  109. package/dist/cli-bundle/chunks/chunk-5ABGFWR4.js.map +1 -0
  110. package/dist/cli-bundle/chunks/{chunk-2BFPAUAF.js → chunk-5IRVSKPS.js} +2990 -2890
  111. package/dist/cli-bundle/chunks/chunk-5IRVSKPS.js.map +1 -0
  112. package/dist/cli-bundle/chunks/{chunk-JR2LV3M4.js → chunk-5T6WPLRO.js} +233 -190
  113. package/dist/cli-bundle/chunks/chunk-5T6WPLRO.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-CKGNPJAG.js → chunk-6T5ZIWBS.js} +3011 -2888
  115. package/dist/cli-bundle/chunks/chunk-6T5ZIWBS.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-QH3PJYON.js → chunk-6YRAMXRS.js} +111 -114
  117. package/dist/cli-bundle/chunks/chunk-6YRAMXRS.js.map +1 -0
  118. package/dist/cli-bundle/chunks/{chunk-7XGQXHFB.js → chunk-73PTKMAE.js} +3 -3
  119. package/dist/cli-bundle/chunks/{chunk-Y4SUQQYH.js → chunk-74PUWBGN.js} +53 -54
  120. package/dist/cli-bundle/chunks/chunk-74PUWBGN.js.map +1 -0
  121. package/dist/cli-bundle/chunks/{chunk-T5472OMV.js → chunk-7L6TXOOC.js} +4 -6
  122. package/dist/cli-bundle/chunks/{chunk-T5472OMV.js.map → chunk-7L6TXOOC.js.map} +1 -1
  123. package/dist/cli-bundle/chunks/chunk-7M2HAZEB.js +17 -0
  124. package/dist/cli-bundle/chunks/chunk-7M2HAZEB.js.map +7 -0
  125. package/dist/cli-bundle/chunks/{chunk-3VY3YQO6.js → chunk-7RIJGN4R.js} +2 -2
  126. package/dist/cli-bundle/chunks/{chunk-G6PYHBBR.js → chunk-7WDETKGP.js} +192 -113
  127. package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-AONIHR2C.js → chunk-A3UNLXNJ.js} +40 -260
  129. package/dist/cli-bundle/chunks/chunk-A3UNLXNJ.js.map +7 -0
  130. package/dist/cli-bundle/chunks/{chunk-4KD54S3Z.js → chunk-AWN4PPH5.js} +10 -14
  131. package/dist/cli-bundle/chunks/{chunk-4KD54S3Z.js.map → chunk-AWN4PPH5.js.map} +1 -1
  132. package/dist/cli-bundle/chunks/{chunk-FXR67XVQ.js → chunk-BN3CWK6G.js} +2 -2
  133. package/dist/cli-bundle/chunks/{chunk-KFWBJPSG.js → chunk-BOWQWXLI.js} +12 -24
  134. package/dist/cli-bundle/chunks/chunk-BOWQWXLI.js.map +1 -0
  135. package/dist/cli-bundle/chunks/{chunk-4BHT5VDC.js → chunk-C2KCIZKZ.js} +2 -2
  136. package/dist/cli-bundle/chunks/{chunk-O6LLO73I.js → chunk-CHRNYKNI.js} +2 -2
  137. package/dist/cli-bundle/chunks/{chunk-UELRKQQU.js → chunk-CY5IJMUM.js} +1239 -495
  138. package/dist/cli-bundle/chunks/chunk-CY5IJMUM.js.map +1 -0
  139. package/dist/cli-bundle/chunks/chunk-CZVISY5A.js +87 -0
  140. package/dist/cli-bundle/chunks/chunk-CZVISY5A.js.map +7 -0
  141. package/dist/cli-bundle/chunks/{chunk-7K2XXO4I.js → chunk-D5LYZVGB.js} +7 -9
  142. package/dist/cli-bundle/chunks/{chunk-7K2XXO4I.js.map → chunk-D5LYZVGB.js.map} +1 -1
  143. package/dist/cli-bundle/chunks/{chunk-ZQ3ZVXX2.js → chunk-D6USKAMA.js} +2 -2
  144. package/dist/cli-bundle/chunks/{context-BLBD3PUB.js → chunk-DJDXAU74.js} +19 -21
  145. package/dist/cli-bundle/chunks/chunk-DJDXAU74.js.map +7 -0
  146. package/dist/cli-bundle/chunks/{chunk-WZQWHN4R.js → chunk-DLDCPF5X.js} +3 -3
  147. package/dist/cli-bundle/chunks/{chunk-HFFUQR73.js → chunk-DORJSBGJ.js} +35 -9
  148. package/dist/cli-bundle/chunks/chunk-DORJSBGJ.js.map +7 -0
  149. package/dist/cli-bundle/chunks/{chunk-XVF4YARA.js → chunk-DRPF274X.js} +5 -7
  150. package/dist/cli-bundle/chunks/{chunk-XVF4YARA.js.map → chunk-DRPF274X.js.map} +2 -2
  151. package/dist/cli-bundle/chunks/{chunk-QL5RVYOA.js → chunk-DU66JUGT.js} +16 -14
  152. package/dist/cli-bundle/chunks/chunk-DU66JUGT.js.map +7 -0
  153. package/dist/cli-bundle/chunks/{chunk-UVC5LOR7.js → chunk-E2Q2ULMR.js} +4 -4
  154. package/dist/cli-bundle/chunks/{chunk-U2Z5YUSO.js → chunk-EVWYAG46.js} +9 -11
  155. package/dist/cli-bundle/chunks/{chunk-U2Z5YUSO.js.map → chunk-EVWYAG46.js.map} +1 -1
  156. package/dist/cli-bundle/chunks/{chunk-5VOINNKT.js → chunk-F6VH3LFC.js} +2 -2
  157. package/dist/cli-bundle/chunks/{chunk-VFAQ4LMN.js → chunk-F7G53BOA.js} +18 -11
  158. package/dist/cli-bundle/chunks/chunk-F7G53BOA.js.map +7 -0
  159. package/dist/cli-bundle/chunks/{chunk-Q2KNGP7C.js → chunk-FBZ5XAAF.js} +9 -11
  160. package/dist/cli-bundle/chunks/{chunk-Q2KNGP7C.js.map → chunk-FBZ5XAAF.js.map} +1 -1
  161. package/dist/cli-bundle/chunks/{chunk-H4IIJDE4.js → chunk-FDEVKXC4.js} +2 -2
  162. package/dist/cli-bundle/chunks/{chunk-7UGEAPRY.js → chunk-GF7EAR22.js} +10 -14
  163. package/dist/cli-bundle/chunks/{chunk-7UGEAPRY.js.map → chunk-GF7EAR22.js.map} +1 -1
  164. package/dist/cli-bundle/chunks/{context-DHLVPXN3.js → chunk-HIBK6H4S.js} +20 -22
  165. package/dist/cli-bundle/chunks/chunk-HIBK6H4S.js.map +1 -0
  166. package/dist/cli-bundle/chunks/{chunk-34EONI5F.js → chunk-HUYYMTGW.js} +2 -2
  167. package/dist/cli-bundle/chunks/chunk-IBMFIKVS.js +14 -0
  168. package/dist/cli-bundle/chunks/chunk-IBMFIKVS.js.map +1 -0
  169. package/dist/cli-bundle/chunks/{chunk-BB6MDVNQ.js → chunk-IBU2LLWM.js} +8 -12
  170. package/dist/cli-bundle/chunks/{chunk-BB6MDVNQ.js.map → chunk-IBU2LLWM.js.map} +1 -1
  171. package/dist/cli-bundle/chunks/{chunk-55ISXAQH.js → chunk-IDYCAK35.js} +53 -54
  172. package/dist/cli-bundle/chunks/chunk-IDYCAK35.js.map +7 -0
  173. package/dist/cli-bundle/chunks/{chunk-M4T5DXD5.js → chunk-IF4ERU6A.js} +7 -9
  174. package/dist/cli-bundle/chunks/{chunk-M4T5DXD5.js.map → chunk-IF4ERU6A.js.map} +1 -1
  175. package/dist/cli-bundle/chunks/{chunk-CIIK67GW.js → chunk-IHXXUIXS.js} +4 -4
  176. package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js +2459 -0
  177. package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js.map +7 -0
  178. package/dist/cli-bundle/chunks/{chunk-SBQTAVJZ.js → chunk-JIP67N2K.js} +3 -3
  179. package/dist/cli-bundle/chunks/chunk-JJ4SG243.js +119 -0
  180. package/dist/cli-bundle/chunks/chunk-JJ4SG243.js.map +7 -0
  181. package/dist/cli-bundle/chunks/{chunk-TQZH6OD6.js → chunk-JTRKME24.js} +11 -13
  182. package/dist/cli-bundle/chunks/{chunk-TQZH6OD6.js.map → chunk-JTRKME24.js.map} +1 -1
  183. package/dist/cli-bundle/chunks/{chunk-WBRKK5QR.js → chunk-JVQ7UOYC.js} +6 -8
  184. package/dist/cli-bundle/chunks/{chunk-WBRKK5QR.js.map → chunk-JVQ7UOYC.js.map} +1 -1
  185. package/dist/cli-bundle/chunks/{chunk-KQMUV6LX.js → chunk-JZG5ADVE.js} +191 -98
  186. package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{chunk-46G6RSB6.js → chunk-K46GQ265.js} +17 -15
  188. package/dist/cli-bundle/chunks/chunk-K46GQ265.js.map +1 -0
  189. package/dist/cli-bundle/chunks/{chunk-5UVVASSA.js → chunk-KGQ3W65B.js} +100 -35
  190. package/dist/cli-bundle/chunks/chunk-KGQ3W65B.js.map +1 -0
  191. package/dist/cli-bundle/chunks/{chunk-2T3JG6V4.js → chunk-KRASIL6M.js} +2 -2
  192. package/dist/cli-bundle/chunks/{chunk-SR3EKWZG.js → chunk-KTMMTOIP.js} +127 -127
  193. package/dist/cli-bundle/chunks/chunk-KTMMTOIP.js.map +7 -0
  194. package/dist/cli-bundle/chunks/{chunk-DT5LPYOD.js → chunk-KYDYQMNW.js} +5 -7
  195. package/dist/cli-bundle/chunks/{chunk-DT5LPYOD.js.map → chunk-KYDYQMNW.js.map} +1 -1
  196. package/dist/cli-bundle/chunks/{chunk-IPKJ6B36.js → chunk-LBH7UYKY.js} +106 -34
  197. package/dist/cli-bundle/chunks/chunk-LBH7UYKY.js.map +7 -0
  198. package/dist/cli-bundle/chunks/{chunk-P77P2ILI.js → chunk-MLHX6DN5.js} +2 -2
  199. package/dist/cli-bundle/chunks/{chunk-YUDJD3XO.js → chunk-NIBP3I7A.js} +36 -10
  200. package/dist/cli-bundle/chunks/chunk-NIBP3I7A.js.map +1 -0
  201. package/dist/cli-bundle/chunks/{schema-RBTJ2YXW.js → chunk-NO6Y6FB2.js} +144 -67
  202. package/dist/cli-bundle/chunks/chunk-NO6Y6FB2.js.map +7 -0
  203. package/dist/cli-bundle/chunks/{chunk-2CKH2LMV.js → chunk-OB3RJV5F.js} +2 -2
  204. package/dist/cli-bundle/chunks/chunk-OKQ22KTH.js +379 -0
  205. package/dist/cli-bundle/chunks/chunk-OKQ22KTH.js.map +1 -0
  206. package/dist/cli-bundle/chunks/{chunk-FIGAZ4Y7.js → chunk-OUQ5JEFM.js} +3 -3
  207. package/dist/cli-bundle/chunks/{chunk-NK3UPBVG.js → chunk-QE5UFCCO.js} +2 -2
  208. package/dist/cli-bundle/chunks/{chunk-MJTINN54.js → chunk-RM6MHL6A.js} +110 -113
  209. package/dist/cli-bundle/chunks/chunk-RM6MHL6A.js.map +7 -0
  210. package/dist/cli-bundle/chunks/{chunk-LRKKONT2.js → chunk-RPRW26NG.js} +12 -16
  211. package/dist/cli-bundle/chunks/{chunk-LRKKONT2.js.map → chunk-RPRW26NG.js.map} +1 -1
  212. package/dist/cli-bundle/chunks/{chunk-WM5ZVBPE.js → chunk-SJZTPVFT.js} +4 -4
  213. package/dist/cli-bundle/chunks/{chunk-MJTSZKK5.js → chunk-SNUK7H5J.js} +1363 -605
  214. package/dist/cli-bundle/chunks/chunk-SNUK7H5J.js.map +7 -0
  215. package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js +2435 -0
  216. package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js.map +1 -0
  217. package/dist/cli-bundle/chunks/{chunk-W72GHSJE.js → chunk-TQ6E76BE.js} +11 -13
  218. package/dist/cli-bundle/chunks/{chunk-W72GHSJE.js.map → chunk-TQ6E76BE.js.map} +1 -1
  219. package/dist/cli-bundle/chunks/{chunk-ZRK4O56R.js → chunk-UB3V5WUI.js} +225 -189
  220. package/dist/cli-bundle/chunks/chunk-UB3V5WUI.js.map +1 -0
  221. package/dist/cli-bundle/chunks/{chunk-SKN7LC5W.js → chunk-UFKNF23C.js} +11 -23
  222. package/dist/cli-bundle/chunks/chunk-UFKNF23C.js.map +7 -0
  223. package/dist/cli-bundle/chunks/{chunk-VAYA4XFX.js → chunk-V3KLX7U7.js} +3 -3
  224. package/dist/cli-bundle/chunks/{chunk-GAJVRGGA.js → chunk-VD3LKZFX.js} +41 -254
  225. package/dist/cli-bundle/chunks/chunk-VD3LKZFX.js.map +1 -0
  226. package/dist/cli-bundle/chunks/{chunk-AD3A7ZD6.js → chunk-VMY7MZEM.js} +10 -14
  227. package/dist/cli-bundle/chunks/{chunk-AD3A7ZD6.js.map → chunk-VMY7MZEM.js.map} +1 -1
  228. package/dist/cli-bundle/chunks/chunk-VZDBVEZR.js +382 -0
  229. package/dist/cli-bundle/chunks/chunk-VZDBVEZR.js.map +7 -0
  230. package/dist/cli-bundle/chunks/{chunk-CE5P2NQR.js → chunk-WFJZDUM7.js} +19 -12
  231. package/dist/cli-bundle/chunks/chunk-WFJZDUM7.js.map +1 -0
  232. package/dist/cli-bundle/chunks/{schema-MNTAVQCY.js → chunk-WTRUDJ3R.js} +136 -66
  233. package/dist/cli-bundle/chunks/chunk-WTRUDJ3R.js.map +1 -0
  234. package/dist/cli-bundle/chunks/{chunk-T72AZDBA.js → chunk-YEDFE4DC.js} +6 -8
  235. package/dist/cli-bundle/chunks/{chunk-T72AZDBA.js.map → chunk-YEDFE4DC.js.map} +1 -1
  236. package/dist/cli-bundle/chunks/chunk-YJIEJRZB.js +84 -0
  237. package/dist/cli-bundle/chunks/chunk-YJIEJRZB.js.map +1 -0
  238. package/dist/cli-bundle/chunks/{chunk-H2IP4QLJ.js → chunk-Z55WX4IQ.js} +12 -16
  239. package/dist/cli-bundle/chunks/{chunk-H2IP4QLJ.js.map → chunk-Z55WX4IQ.js.map} +1 -1
  240. package/dist/cli-bundle/chunks/{chunk-2RDVQEWV.js → chunk-Z5BM2FKQ.js} +4 -4
  241. package/dist/cli-bundle/chunks/{chunk-66MEDTUD.js → chunk-ZEATCVAC.js} +2 -2
  242. package/dist/cli-bundle/chunks/{chunk-NCVCO3NZ.js → chunk-ZFIEEDTJ.js} +3 -3
  243. package/dist/cli-bundle/chunks/{chunk-7SV63ZHD.js → chunk-ZIE6WXJ2.js} +128 -128
  244. package/dist/cli-bundle/chunks/chunk-ZIE6WXJ2.js.map +1 -0
  245. package/dist/cli-bundle/chunks/{claim-4KHAA2RN.js → claim-6NINZYB3.js} +10 -12
  246. package/dist/cli-bundle/chunks/{claim-4KHAA2RN.js.map → claim-6NINZYB3.js.map} +1 -1
  247. package/dist/cli-bundle/chunks/{claim-CSPJFLNH.js → claim-HMCLSLUE.js} +8 -10
  248. package/dist/cli-bundle/chunks/{claim-CSPJFLNH.js.map → claim-HMCLSLUE.js.map} +1 -1
  249. package/dist/cli-bundle/chunks/close-37KEHLYM.js +14 -0
  250. package/dist/cli-bundle/chunks/{close-W56IOGYG.js → close-OP3LK7Z2.js} +7 -8
  251. package/dist/cli-bundle/chunks/{close-many-BX5DCSVV.js → close-many-BFMP6HHK.js} +15 -17
  252. package/dist/cli-bundle/chunks/{close-many-BX5DCSVV.js.map → close-many-BFMP6HHK.js.map} +1 -1
  253. package/dist/cli-bundle/chunks/{close-many-TQU5F4E4.js → close-many-CXJBOWWY.js} +17 -19
  254. package/dist/cli-bundle/chunks/{close-many-TQU5F4E4.js.map → close-many-CXJBOWWY.js.map} +1 -1
  255. package/dist/cli-bundle/chunks/{comments-VRECH75R.js → comments-ETHABIY6.js} +9 -11
  256. package/dist/cli-bundle/chunks/{comments-VRECH75R.js.map → comments-ETHABIY6.js.map} +1 -1
  257. package/dist/cli-bundle/chunks/{comments-U5KUC4EU.js → comments-MU2WMBUY.js} +11 -13
  258. package/dist/cli-bundle/chunks/{comments-U5KUC4EU.js.map → comments-MU2WMBUY.js.map} +1 -1
  259. package/dist/cli-bundle/chunks/{config-D3OKQO52.js → config-FIXJZEQK.js} +18 -387
  260. package/dist/cli-bundle/chunks/config-FIXJZEQK.js.map +7 -0
  261. package/dist/cli-bundle/chunks/{config-MMJA4LLK.js → config-X3ZVCUUG.js} +18 -380
  262. package/dist/cli-bundle/chunks/config-X3ZVCUUG.js.map +1 -0
  263. package/dist/cli-bundle/chunks/context-7ZEZV3BV.js +42 -0
  264. package/dist/cli-bundle/chunks/context-XDI4DKKT.js +46 -0
  265. package/dist/cli-bundle/chunks/{contracts-XGVMMPC5.js → contracts-KP4QAGVW.js} +72 -15
  266. package/dist/cli-bundle/chunks/contracts-KP4QAGVW.js.map +1 -0
  267. package/dist/cli-bundle/chunks/{contracts-C3SZCXXG.js → contracts-SMOAN5NF.js} +72 -15
  268. package/dist/cli-bundle/chunks/contracts-SMOAN5NF.js.map +7 -0
  269. package/dist/cli-bundle/chunks/{copy-HHL3K4QP.js → copy-CWM6SBY6.js} +7 -11
  270. package/dist/cli-bundle/chunks/{copy-HHL3K4QP.js.map → copy-CWM6SBY6.js.map} +1 -1
  271. package/dist/cli-bundle/chunks/{copy-5D5DX3VK.js → copy-JJ3KOQW2.js} +9 -13
  272. package/dist/cli-bundle/chunks/{copy-5D5DX3VK.js.map → copy-JJ3KOQW2.js.map} +1 -1
  273. package/dist/cli-bundle/chunks/create-DFMNBKBS.js +28 -0
  274. package/dist/cli-bundle/chunks/{create-IXY43O4H.js → create-J5Q2ELZT.js} +12 -14
  275. package/dist/cli-bundle/chunks/{delete-IBUR3M42.js → delete-2GZLQEUQ.js} +7 -9
  276. package/dist/cli-bundle/chunks/{delete-IBUR3M42.js.map → delete-2GZLQEUQ.js.map} +1 -1
  277. package/dist/cli-bundle/chunks/{delete-QQC2FGUH.js → delete-OOQS4KVD.js} +5 -7
  278. package/dist/cli-bundle/chunks/{delete-QQC2FGUH.js.map → delete-OOQS4KVD.js.map} +1 -1
  279. package/dist/cli-bundle/chunks/{deps-KWKRHXIN.js → deps-IF4IGL4R.js} +6 -9
  280. package/dist/cli-bundle/chunks/{deps-KWKRHXIN.js.map → deps-IF4IGL4R.js.map} +1 -1
  281. package/dist/cli-bundle/chunks/{deps-VTPO4BSE.js → deps-ZVGGCRR6.js} +8 -11
  282. package/dist/cli-bundle/chunks/{deps-VTPO4BSE.js.map → deps-ZVGGCRR6.js.map} +1 -1
  283. package/dist/cli-bundle/chunks/{docs-IIO3FEUO.js → docs-2TIFR62T.js} +8 -9
  284. package/dist/cli-bundle/chunks/{docs-IIO3FEUO.js.map → docs-2TIFR62T.js.map} +1 -1
  285. package/dist/cli-bundle/chunks/{docs-7CHFHXLN.js → docs-NFTBCQQC.js} +10 -11
  286. package/dist/cli-bundle/chunks/{docs-7CHFHXLN.js.map → docs-NFTBCQQC.js.map} +1 -1
  287. package/dist/cli-bundle/chunks/{eval-IO7LREOL.js → eval-2F6EH4XN.js} +12 -14
  288. package/dist/cli-bundle/chunks/{eval-IO7LREOL.js.map → eval-2F6EH4XN.js.map} +1 -1
  289. package/dist/cli-bundle/chunks/{eval-CEYYEPSX.js → eval-PFKXQR3B.js} +10 -12
  290. package/dist/cli-bundle/chunks/{eval-CEYYEPSX.js.map → eval-PFKXQR3B.js.map} +1 -1
  291. package/dist/cli-bundle/chunks/{extension-KCPUWSY2.js → extension-3LRYX7SW.js} +11 -7
  292. package/dist/cli-bundle/chunks/{extension-UTTQDUYI.js → extension-GMVOIP4O.js} +11 -7
  293. package/dist/cli-bundle/chunks/{files-Z2HHEFGP.js → files-DF3HO6XK.js} +11 -13
  294. package/dist/cli-bundle/chunks/{files-Z2HHEFGP.js.map → files-DF3HO6XK.js.map} +1 -1
  295. package/dist/cli-bundle/chunks/{files-TPUL6KWB.js → files-T5ODMETM.js} +9 -11
  296. package/dist/cli-bundle/chunks/{files-TPUL6KWB.js.map → files-T5ODMETM.js.map} +1 -1
  297. package/dist/cli-bundle/chunks/{focus-YRNNH7IP.js → focus-DLXKK4AH.js} +10 -14
  298. package/dist/cli-bundle/chunks/{focus-YRNNH7IP.js.map → focus-DLXKK4AH.js.map} +1 -1
  299. package/dist/cli-bundle/chunks/{focus-JVJCGC2D.js → focus-MY5ARIEK.js} +8 -12
  300. package/dist/cli-bundle/chunks/{focus-JVJCGC2D.js.map → focus-MY5ARIEK.js.map} +1 -1
  301. package/dist/cli-bundle/chunks/{gc-O5GUO3SU.js → gc-FULIVYR4.js} +3 -3
  302. package/dist/cli-bundle/chunks/{gc-PYVVEELM.js → gc-MDGRR2SU.js} +3 -3
  303. package/dist/cli-bundle/chunks/{get-X4O3HBEY.js → get-AWK324RS.js} +10 -13
  304. package/dist/cli-bundle/chunks/{get-X4O3HBEY.js.map → get-AWK324RS.js.map} +1 -1
  305. package/dist/cli-bundle/chunks/{get-ENLTEGTX.js → get-VYPIICPC.js} +12 -15
  306. package/dist/cli-bundle/chunks/{get-ENLTEGTX.js.map → get-VYPIICPC.js.map} +1 -1
  307. package/dist/cli-bundle/chunks/{health-5EXTY44Q.js → health-FBCVZGSX.js} +16 -17
  308. package/dist/cli-bundle/chunks/{health-5EXTY44Q.js.map → health-FBCVZGSX.js.map} +1 -1
  309. package/dist/cli-bundle/chunks/{health-BOTB7YSU.js → health-Q66C43GN.js} +18 -19
  310. package/dist/cli-bundle/chunks/{health-BOTB7YSU.js.map → health-Q66C43GN.js.map} +1 -1
  311. package/dist/cli-bundle/chunks/history-5XUSLAJA.js +18 -0
  312. package/dist/cli-bundle/chunks/{history-AJTXLT6S.js → history-X4OSES6K.js} +8 -10
  313. package/dist/cli-bundle/chunks/{history-compact-46MRHW3I.js → history-compact-2GHT32UX.js} +13 -16
  314. package/dist/cli-bundle/chunks/{history-compact-46MRHW3I.js.map → history-compact-2GHT32UX.js.map} +1 -1
  315. package/dist/cli-bundle/chunks/{history-compact-43OOUAWD.js → history-compact-WLCQEKXS.js} +11 -14
  316. package/dist/cli-bundle/chunks/{history-compact-43OOUAWD.js.map → history-compact-WLCQEKXS.js.map} +1 -1
  317. package/dist/cli-bundle/chunks/{history-redact-KUUUVUFM.js → history-redact-45YW65BK.js} +9 -11
  318. package/dist/cli-bundle/chunks/history-redact-BVHWDXPR.js +19 -0
  319. package/dist/cli-bundle/chunks/{history-repair-B5PZBOPU.js → history-repair-FY75IC26.js} +13 -16
  320. package/dist/cli-bundle/chunks/{history-repair-B5PZBOPU.js.map → history-repair-FY75IC26.js.map} +1 -1
  321. package/dist/cli-bundle/chunks/{history-repair-VQTYOSRS.js → history-repair-GABSDSVD.js} +11 -14
  322. package/dist/cli-bundle/chunks/{history-repair-VQTYOSRS.js.map → history-repair-GABSDSVD.js.map} +1 -1
  323. package/dist/cli-bundle/chunks/{init-BNLVFPRG.js → init-KO7CGIRQ.js} +11 -11
  324. package/dist/cli-bundle/chunks/init-TRYJELH4.js +21 -0
  325. package/dist/cli-bundle/chunks/{learnings-MUUU5KMC.js → learnings-3F7YLI45.js} +9 -11
  326. package/dist/cli-bundle/chunks/{learnings-MUUU5KMC.js.map → learnings-3F7YLI45.js.map} +1 -1
  327. package/dist/cli-bundle/chunks/{learnings-XSGX52S7.js → learnings-LHZT5BHW.js} +11 -13
  328. package/dist/cli-bundle/chunks/{learnings-XSGX52S7.js.map → learnings-LHZT5BHW.js.map} +1 -1
  329. package/dist/cli-bundle/chunks/{list-32U7BSKE.js → list-ROT7JF62.js} +10 -10
  330. package/dist/cli-bundle/chunks/{list-ZEEOHLTQ.js → list-Y6AU5BJS.js} +10 -10
  331. package/dist/cli-bundle/chunks/next-66BJB4N2.js +277 -0
  332. package/dist/cli-bundle/chunks/next-66BJB4N2.js.map +7 -0
  333. package/dist/cli-bundle/chunks/next-N5MWJTBY.js +274 -0
  334. package/dist/cli-bundle/chunks/next-N5MWJTBY.js.map +1 -0
  335. package/dist/cli-bundle/chunks/{notes-OHU25L3M.js → notes-EVJZ3VAB.js} +11 -13
  336. package/dist/cli-bundle/chunks/{notes-OHU25L3M.js.map → notes-EVJZ3VAB.js.map} +1 -1
  337. package/dist/cli-bundle/chunks/{notes-NJ45OZGF.js → notes-FW6YFLND.js} +9 -11
  338. package/dist/cli-bundle/chunks/{notes-NJ45OZGF.js.map → notes-FW6YFLND.js.map} +1 -1
  339. package/dist/cli-bundle/chunks/{plan-LWWAEV5Y.js → plan-DQ7G4EDC.js} +15 -18
  340. package/dist/cli-bundle/chunks/{plan-LWWAEV5Y.js.map → plan-DQ7G4EDC.js.map} +1 -1
  341. package/dist/cli-bundle/chunks/{plan-KQA7CAKI.js → plan-ZHKZ7JVF.js} +17 -20
  342. package/dist/cli-bundle/chunks/{plan-KQA7CAKI.js.map → plan-ZHKZ7JVF.js.map} +1 -1
  343. package/dist/cli-bundle/chunks/profile-CHAW6SEA.js +1197 -0
  344. package/dist/cli-bundle/chunks/profile-CHAW6SEA.js.map +1 -0
  345. package/dist/cli-bundle/chunks/profile-UPZGCDOG.js +1235 -0
  346. package/dist/cli-bundle/chunks/profile-UPZGCDOG.js.map +7 -0
  347. package/dist/cli-bundle/chunks/{register-list-query-DDCHPONM.js → register-list-query-KY6Z6WV7.js} +44 -20
  348. package/dist/cli-bundle/chunks/register-list-query-KY6Z6WV7.js.map +7 -0
  349. package/dist/cli-bundle/chunks/{register-list-query-YNPBVIKM.js → register-list-query-Y2VRHPCL.js} +45 -21
  350. package/dist/cli-bundle/chunks/register-list-query-Y2VRHPCL.js.map +1 -0
  351. package/dist/cli-bundle/chunks/{register-mutation-LAVKYY63.js → register-mutation-N6AYSKPM.js} +103 -37
  352. package/dist/cli-bundle/chunks/register-mutation-N6AYSKPM.js.map +7 -0
  353. package/dist/cli-bundle/chunks/{register-mutation-7ALWDDAX.js → register-mutation-PCARIGZS.js} +104 -38
  354. package/dist/cli-bundle/chunks/register-mutation-PCARIGZS.js.map +1 -0
  355. package/dist/cli-bundle/chunks/{register-operations-U5JAW3WE.js → register-operations-L6CYTOIH.js} +30 -32
  356. package/dist/cli-bundle/chunks/{register-operations-U5JAW3WE.js.map → register-operations-L6CYTOIH.js.map} +1 -1
  357. package/dist/cli-bundle/chunks/{register-operations-R4VOQ6EF.js → register-operations-YAT6FUUB.js} +32 -34
  358. package/dist/cli-bundle/chunks/{register-operations-R4VOQ6EF.js.map → register-operations-YAT6FUUB.js.map} +1 -1
  359. package/dist/cli-bundle/chunks/{register-setup-KBXQDCXE.js → register-setup-MPANILQF.js} +67 -24
  360. package/dist/cli-bundle/chunks/register-setup-MPANILQF.js.map +7 -0
  361. package/dist/cli-bundle/chunks/{register-setup-RCRUHMSZ.js → register-setup-N7UGXYJC.js} +68 -25
  362. package/dist/cli-bundle/chunks/register-setup-N7UGXYJC.js.map +1 -0
  363. package/dist/cli-bundle/chunks/{restore-6K53WOWO.js → restore-DKMCLPI5.js} +9 -11
  364. package/dist/cli-bundle/chunks/restore-IRAKSWIW.js +17 -0
  365. package/dist/cli-bundle/chunks/{scheduling-shortcuts-NJ5UVJFB.js → scheduling-shortcuts-3F4QUEDH.js} +14 -16
  366. package/dist/cli-bundle/chunks/{scheduling-shortcuts-NJ5UVJFB.js.map → scheduling-shortcuts-3F4QUEDH.js.map} +1 -1
  367. package/dist/cli-bundle/chunks/{scheduling-shortcuts-OQVJXG3M.js → scheduling-shortcuts-BNZLQK36.js} +12 -14
  368. package/dist/cli-bundle/chunks/{scheduling-shortcuts-OQVJXG3M.js.map → scheduling-shortcuts-BNZLQK36.js.map} +1 -1
  369. package/dist/cli-bundle/chunks/schema-OLT6LVKH.js +75 -0
  370. package/dist/cli-bundle/chunks/schema-XJXKJQF5.js +71 -0
  371. package/dist/cli-bundle/chunks/{search-6HOIVZDU.js → search-CX5UMV4H.js} +10 -12
  372. package/dist/cli-bundle/chunks/{search-ZWYEMASC.js → search-KP6H7COV.js} +10 -12
  373. package/dist/cli-bundle/chunks/{stats-R5OAJVZK.js → stats-7XW4OEMK.js} +20 -12
  374. package/dist/cli-bundle/chunks/stats-7XW4OEMK.js.map +7 -0
  375. package/dist/cli-bundle/chunks/{stats-FS742AMA.js → stats-QZUG6MX5.js} +21 -13
  376. package/dist/cli-bundle/chunks/stats-QZUG6MX5.js.map +1 -0
  377. package/dist/cli-bundle/chunks/{telemetry-7DIGDQUO.js → telemetry-DIFPXCAT.js} +4 -4
  378. package/dist/cli-bundle/chunks/{telemetry-FWEXSJLQ.js → telemetry-WTYFUPRL.js} +4 -4
  379. package/dist/cli-bundle/chunks/{test-NZF7OT2F.js → test-HU2BS7EY.js} +14 -16
  380. package/dist/cli-bundle/chunks/test-HU2BS7EY.js.map +1 -0
  381. package/dist/cli-bundle/chunks/test-QNDXZQCW.js +34 -0
  382. package/dist/cli-bundle/chunks/test-QNDXZQCW.js.map +7 -0
  383. package/dist/cli-bundle/chunks/{test-all-DPN62TX7.js → test-all-PZTBLLQ6.js} +17 -20
  384. package/dist/cli-bundle/chunks/{test-all-DPN62TX7.js.map → test-all-PZTBLLQ6.js.map} +1 -1
  385. package/dist/cli-bundle/chunks/{test-all-KL7TLMJF.js → test-all-XLPI4USF.js} +19 -22
  386. package/dist/cli-bundle/chunks/{test-all-KL7TLMJF.js.map → test-all-XLPI4USF.js.map} +1 -1
  387. package/dist/cli-bundle/chunks/{test-runs-C6CFIVOS.js → test-runs-CA6K32RD.js} +6 -7
  388. package/dist/cli-bundle/chunks/test-runs-CA6K32RD.js.map +1 -0
  389. package/dist/cli-bundle/chunks/{test-runs-IAJDL6CA.js → test-runs-LANLLPVO.js} +5 -6
  390. package/dist/cli-bundle/chunks/test-runs-LANLLPVO.js.map +7 -0
  391. package/dist/cli-bundle/chunks/update-DJKWLBWJ.js +28 -0
  392. package/dist/cli-bundle/chunks/update-DJKWLBWJ.js.map +1 -0
  393. package/dist/cli-bundle/chunks/update-UXDLTEOZ.js +24 -0
  394. package/dist/cli-bundle/chunks/update-UXDLTEOZ.js.map +7 -0
  395. package/dist/cli-bundle/chunks/{update-many-YEH2DQL6.js → update-many-LU3SCNK5.js} +32 -33
  396. package/dist/cli-bundle/chunks/{update-many-YEH2DQL6.js.map → update-many-LU3SCNK5.js.map} +1 -1
  397. package/dist/cli-bundle/chunks/{update-many-MUTIOAP3.js → update-many-VW5DGF3S.js} +34 -35
  398. package/dist/cli-bundle/chunks/{update-many-MUTIOAP3.js.map → update-many-VW5DGF3S.js.map} +1 -1
  399. package/dist/cli-bundle/chunks/{upgrade-HYJ3SWWU.js → upgrade-77FRUAXN.js} +12 -8
  400. package/dist/cli-bundle/chunks/{upgrade-HYJ3SWWU.js.map → upgrade-77FRUAXN.js.map} +1 -1
  401. package/dist/cli-bundle/chunks/{upgrade-UBNLBZNR.js → upgrade-ICXY244R.js} +10 -6
  402. package/dist/cli-bundle/chunks/{upgrade-UBNLBZNR.js.map → upgrade-ICXY244R.js.map} +1 -1
  403. package/dist/cli-bundle/chunks/{validate-6QWQVCX2.js → validate-2G566PKQ.js} +37 -28
  404. package/dist/cli-bundle/chunks/validate-2G566PKQ.js.map +7 -0
  405. package/dist/cli-bundle/chunks/{validate-W5V5ZGQX.js → validate-BDPVXHHH.js} +38 -29
  406. package/dist/cli-bundle/chunks/validate-BDPVXHHH.js.map +1 -0
  407. package/dist/cli-bundle/main.js +56 -38
  408. package/dist/cli-bundle/main.js.map +2 -2
  409. package/dist/core/config/positional-value.d.ts +2 -0
  410. package/dist/core/config/positional-value.js +2 -2
  411. package/dist/core/config/positional-value.js.map +1 -1
  412. package/dist/core/extensions/activation-summary-markdown.d.ts +71 -0
  413. package/dist/core/extensions/activation-summary-markdown.js +140 -0
  414. package/dist/core/extensions/activation-summary-markdown.js.map +1 -0
  415. package/dist/core/extensions/activation-summary.d.ts +2 -0
  416. package/dist/core/extensions/activation-summary.js +3 -2
  417. package/dist/core/extensions/activation-summary.js.map +1 -1
  418. package/dist/core/extensions/capability-usage.d.ts +1 -1
  419. package/dist/core/extensions/capability-usage.js +4 -3
  420. package/dist/core/extensions/capability-usage.js.map +1 -1
  421. package/dist/core/extensions/extension-registries.js +3 -2
  422. package/dist/core/extensions/extension-registries.js.map +1 -1
  423. package/dist/core/extensions/extension-types.d.ts +21 -1
  424. package/dist/core/extensions/extension-types.js +3 -2
  425. package/dist/core/extensions/extension-types.js.map +1 -1
  426. package/dist/core/extensions/loader.d.ts +1 -2
  427. package/dist/core/extensions/loader.js +169 -103
  428. package/dist/core/extensions/loader.js.map +1 -1
  429. package/dist/core/extensions/version-compat.d.ts +107 -0
  430. package/dist/core/extensions/version-compat.js +130 -0
  431. package/dist/core/extensions/version-compat.js.map +1 -0
  432. package/dist/core/fs/fs-utils.js +27 -2
  433. package/dist/core/fs/fs-utils.js.map +1 -1
  434. package/dist/core/item/actionability.d.ts +57 -0
  435. package/dist/core/item/actionability.js +178 -0
  436. package/dist/core/item/actionability.js.map +1 -0
  437. package/dist/core/item/type-registry.js +18 -45
  438. package/dist/core/item/type-registry.js.map +1 -1
  439. package/dist/core/profile/profile-describe.d.ts +64 -0
  440. package/dist/core/profile/profile-describe.js +83 -0
  441. package/dist/core/profile/profile-describe.js.map +1 -0
  442. package/dist/core/profile/profile-lint.d.ts +53 -0
  443. package/dist/core/profile/profile-lint.js +422 -0
  444. package/dist/core/profile/profile-lint.js.map +1 -0
  445. package/dist/core/profile/profile-plan.d.ts +145 -0
  446. package/dist/core/profile/profile-plan.js +0 -0
  447. package/dist/core/profile/profile-plan.js.map +1 -0
  448. package/dist/core/profile/profile-presets.d.ts +218 -0
  449. package/dist/core/profile/profile-presets.js +325 -0
  450. package/dist/core/profile/profile-presets.js.map +1 -0
  451. package/dist/core/schema/fields-file.js +25 -25
  452. package/dist/core/schema/fields-file.js.map +1 -1
  453. package/dist/core/schema/item-types-file.js +3 -3
  454. package/dist/core/schema/item-types-file.js.map +1 -1
  455. package/dist/core/schema/runtime-schema.js +4 -4
  456. package/dist/core/schema/runtime-schema.js.map +1 -1
  457. package/dist/core/schema/status-defs-file.js +3 -3
  458. package/dist/core/schema/status-defs-file.js.map +1 -1
  459. package/dist/core/shared/serialization.js +83 -62
  460. package/dist/core/shared/serialization.js.map +1 -1
  461. package/dist/core/store/item-store.d.ts +1 -0
  462. package/dist/core/store/item-store.js +16 -8
  463. package/dist/core/store/item-store.js.map +1 -1
  464. package/dist/core/store/paths.js +4 -32
  465. package/dist/core/store/paths.js.map +1 -1
  466. package/dist/core/store/settings.js +14 -14
  467. package/dist/core/store/settings.js.map +1 -1
  468. package/dist/core/telemetry/observability.js +50 -54
  469. package/dist/core/telemetry/observability.js.map +1 -1
  470. package/dist/core/telemetry/runtime.js +11 -2
  471. package/dist/core/telemetry/runtime.js.map +1 -1
  472. package/dist/core/test/background-runs.js +3 -2
  473. package/dist/core/test/background-runs.js.map +1 -1
  474. package/dist/core/validate/linked-artifact-reference.d.ts +24 -0
  475. package/dist/core/validate/linked-artifact-reference.js +41 -0
  476. package/dist/core/validate/linked-artifact-reference.js.map +1 -0
  477. package/dist/mcp/server.js +183 -83
  478. package/dist/mcp/server.js.map +1 -1
  479. package/dist/mcp/tool-definitions.js +33 -2
  480. package/dist/mcp/tool-definitions.js.map +1 -1
  481. package/dist/sdk/cli-contracts/commander-types.d.ts +1 -0
  482. package/dist/sdk/cli-contracts/commander-types.js +15 -2
  483. package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
  484. package/dist/sdk/cli-contracts/enum-contracts.d.ts +3 -3
  485. package/dist/sdk/cli-contracts/enum-contracts.js +6 -2
  486. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  487. package/dist/sdk/cli-contracts/flag-contracts.d.ts +149 -0
  488. package/dist/sdk/cli-contracts/flag-contracts.js +1583 -0
  489. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -0
  490. package/dist/sdk/cli-contracts/string-lists.d.ts +14 -0
  491. package/dist/sdk/cli-contracts/string-lists.js +20 -0
  492. package/dist/sdk/cli-contracts/string-lists.js.map +1 -0
  493. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +1 -1
  494. package/dist/sdk/cli-contracts/tool-option-contracts.js +51 -109
  495. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  496. package/dist/sdk/cli-contracts/tool-parameter-tables.d.ts +17 -0
  497. package/dist/sdk/cli-contracts/tool-parameter-tables.js +54 -5
  498. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  499. package/dist/sdk/cli-contracts/tool-schema.d.ts +74 -0
  500. package/dist/sdk/cli-contracts/tool-schema.js +840 -0
  501. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -0
  502. package/dist/sdk/cli-contracts.d.ts +13 -193
  503. package/dist/sdk/cli-contracts.js +5 -2277
  504. package/dist/sdk/cli-contracts.js.map +1 -1
  505. package/dist/sdk/compose.d.ts +346 -4
  506. package/dist/sdk/compose.js +486 -15
  507. package/dist/sdk/compose.js.map +1 -1
  508. package/dist/sdk/define.d.ts +29 -14
  509. package/dist/sdk/define.js +21 -7
  510. package/dist/sdk/define.js.map +1 -1
  511. package/dist/sdk/index.d.ts +14 -3
  512. package/dist/sdk/index.js +14 -3
  513. package/dist/sdk/index.js.map +1 -1
  514. package/dist/sdk/testing.d.ts +156 -3
  515. package/dist/sdk/testing.js +172 -4
  516. package/dist/sdk/testing.js.map +1 -1
  517. package/docs/AGENT_GUIDE.md +2 -0
  518. package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
  519. package/docs/COMMANDS.md +37 -0
  520. package/docs/EXTENSIONS.md +20 -20
  521. package/docs/RELEASING.md +6 -1
  522. package/docs/SDK.md +387 -20
  523. package/docs/TESTING.md +12 -0
  524. package/docs/examples/policy-restricted-extension/README.md +6 -0
  525. package/docs/examples/policy-restricted-extension/index.ts +40 -0
  526. package/docs/examples/policy-restricted-extension/manifest.json +2 -2
  527. package/docs/examples/starter-extension/README.md +14 -2
  528. package/docs/examples/starter-extension/{index.js → index.ts} +51 -6
  529. package/docs/examples/starter-extension/manifest.json +2 -2
  530. package/package.json +20 -7
  531. package/packages/pm-beads/extensions/beads/index.ts +3 -3
  532. package/packages/pm-beads/extensions/beads/manifest.json +2 -2
  533. package/packages/pm-beads/extensions/beads/runtime-loader.ts +19 -7
  534. package/packages/pm-beads/extensions/beads/runtime.ts +155 -37
  535. package/packages/pm-calendar/extensions/calendar/index.ts +3 -3
  536. package/packages/pm-calendar/extensions/calendar/manifest.json +2 -2
  537. package/packages/pm-calendar/extensions/calendar/runtime.ts +2 -2
  538. package/packages/pm-command-kit/extensions/command-kit/index.ts +1 -1
  539. package/packages/pm-command-kit/extensions/command-kit/manifest.json +2 -2
  540. package/packages/pm-governance-audit/extensions/governance-audit/index.ts +2 -2
  541. package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +2 -2
  542. package/packages/pm-governance-audit/extensions/governance-audit/runtime.ts +1 -1
  543. package/packages/pm-guide-shell/extensions/guide-shell/index.ts +2 -2
  544. package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +2 -2
  545. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +1 -1
  546. package/packages/pm-kanban/README.md +97 -0
  547. package/packages/pm-kanban/extensions/kanban/index.ts +191 -0
  548. package/packages/pm-kanban/extensions/kanban/manifest.json +19 -0
  549. package/packages/pm-kanban/package.json +57 -0
  550. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.ts +1 -1
  551. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +2 -2
  552. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.ts +2 -2
  553. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +2 -2
  554. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.ts +1 -1
  555. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +2 -2
  556. package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +2 -2
  557. package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +1 -1
  558. package/packages/pm-templates/extensions/templates/index.ts +2 -2
  559. package/packages/pm-templates/extensions/templates/manifest.json +2 -2
  560. package/packages/pm-templates/extensions/templates/runtime.ts +1 -1
  561. package/packages/pm-todos/extensions/todos/index.ts +3 -3
  562. package/packages/pm-todos/extensions/todos/manifest.json +2 -2
  563. package/packages/pm-todos/extensions/todos/runtime-loader.ts +19 -7
  564. package/packages/pm-todos/extensions/todos/runtime.ts +177 -43
  565. package/plugins/pm-claude/scripts/pm-mcp-server.mjs +2 -2
  566. package/plugins/pm-codex/scripts/pm-mcp-server.mjs +2 -2
  567. package/scripts/bundle-cli.mjs +1 -1
  568. package/dist/cli-bundle/chunks/activity-XUZ2AHCW.js +0 -18
  569. package/dist/cli-bundle/chunks/aggregate-EGJLZQBI.js.map +0 -7
  570. package/dist/cli-bundle/chunks/aggregate-R725FC3S.js.map +0 -1
  571. package/dist/cli-bundle/chunks/chunk-2BFPAUAF.js.map +0 -1
  572. package/dist/cli-bundle/chunks/chunk-46G6RSB6.js.map +0 -1
  573. package/dist/cli-bundle/chunks/chunk-55ISXAQH.js.map +0 -7
  574. package/dist/cli-bundle/chunks/chunk-5UVVASSA.js.map +0 -1
  575. package/dist/cli-bundle/chunks/chunk-7MRQ4HMK.js +0 -78
  576. package/dist/cli-bundle/chunks/chunk-7MRQ4HMK.js.map +0 -7
  577. package/dist/cli-bundle/chunks/chunk-7SV63ZHD.js.map +0 -1
  578. package/dist/cli-bundle/chunks/chunk-AONIHR2C.js.map +0 -7
  579. package/dist/cli-bundle/chunks/chunk-C5AOG6D2.js +0 -691
  580. package/dist/cli-bundle/chunks/chunk-C5AOG6D2.js.map +0 -1
  581. package/dist/cli-bundle/chunks/chunk-CE5P2NQR.js.map +0 -1
  582. package/dist/cli-bundle/chunks/chunk-CKGNPJAG.js.map +0 -7
  583. package/dist/cli-bundle/chunks/chunk-G6PYHBBR.js.map +0 -7
  584. package/dist/cli-bundle/chunks/chunk-GAJVRGGA.js.map +0 -1
  585. package/dist/cli-bundle/chunks/chunk-HFFUQR73.js.map +0 -7
  586. package/dist/cli-bundle/chunks/chunk-IPKJ6B36.js.map +0 -7
  587. package/dist/cli-bundle/chunks/chunk-JR2LV3M4.js.map +0 -7
  588. package/dist/cli-bundle/chunks/chunk-KFWBJPSG.js.map +0 -1
  589. package/dist/cli-bundle/chunks/chunk-KQMUV6LX.js.map +0 -1
  590. package/dist/cli-bundle/chunks/chunk-MJTINN54.js.map +0 -7
  591. package/dist/cli-bundle/chunks/chunk-MJTSZKK5.js.map +0 -7
  592. package/dist/cli-bundle/chunks/chunk-MVKFOLLM.js +0 -694
  593. package/dist/cli-bundle/chunks/chunk-MVKFOLLM.js.map +0 -7
  594. package/dist/cli-bundle/chunks/chunk-QH3PJYON.js.map +0 -1
  595. package/dist/cli-bundle/chunks/chunk-QL5RVYOA.js.map +0 -7
  596. package/dist/cli-bundle/chunks/chunk-S26C36QC.js +0 -83
  597. package/dist/cli-bundle/chunks/chunk-S26C36QC.js.map +0 -1
  598. package/dist/cli-bundle/chunks/chunk-S2RUQSX2.js +0 -75
  599. package/dist/cli-bundle/chunks/chunk-S2RUQSX2.js.map +0 -1
  600. package/dist/cli-bundle/chunks/chunk-SKH7OGE5.js +0 -86
  601. package/dist/cli-bundle/chunks/chunk-SKH7OGE5.js.map +0 -7
  602. package/dist/cli-bundle/chunks/chunk-SKN7LC5W.js.map +0 -7
  603. package/dist/cli-bundle/chunks/chunk-SR3EKWZG.js.map +0 -7
  604. package/dist/cli-bundle/chunks/chunk-UELRKQQU.js.map +0 -1
  605. package/dist/cli-bundle/chunks/chunk-VFAQ4LMN.js.map +0 -7
  606. package/dist/cli-bundle/chunks/chunk-Y4SUQQYH.js.map +0 -1
  607. package/dist/cli-bundle/chunks/chunk-YDEXO24S.js +0 -654
  608. package/dist/cli-bundle/chunks/chunk-YDEXO24S.js.map +0 -1
  609. package/dist/cli-bundle/chunks/chunk-YJ3SUEPD.js +0 -657
  610. package/dist/cli-bundle/chunks/chunk-YJ3SUEPD.js.map +0 -7
  611. package/dist/cli-bundle/chunks/chunk-YUDJD3XO.js.map +0 -1
  612. package/dist/cli-bundle/chunks/chunk-ZRK4O56R.js.map +0 -1
  613. package/dist/cli-bundle/chunks/close-A3EMKBBY.js +0 -15
  614. package/dist/cli-bundle/chunks/config-D3OKQO52.js.map +0 -7
  615. package/dist/cli-bundle/chunks/config-MMJA4LLK.js.map +0 -1
  616. package/dist/cli-bundle/chunks/context-BLBD3PUB.js.map +0 -7
  617. package/dist/cli-bundle/chunks/context-DHLVPXN3.js.map +0 -1
  618. package/dist/cli-bundle/chunks/contracts-C3SZCXXG.js.map +0 -7
  619. package/dist/cli-bundle/chunks/contracts-XGVMMPC5.js.map +0 -1
  620. package/dist/cli-bundle/chunks/create-QVGFYA2X.js +0 -30
  621. package/dist/cli-bundle/chunks/history-AK3E5Z3C.js +0 -20
  622. package/dist/cli-bundle/chunks/history-redact-TWIYQV5J.js +0 -21
  623. package/dist/cli-bundle/chunks/init-RCRKW5PL.js +0 -21
  624. package/dist/cli-bundle/chunks/register-list-query-DDCHPONM.js.map +0 -7
  625. package/dist/cli-bundle/chunks/register-list-query-YNPBVIKM.js.map +0 -1
  626. package/dist/cli-bundle/chunks/register-mutation-7ALWDDAX.js.map +0 -1
  627. package/dist/cli-bundle/chunks/register-mutation-LAVKYY63.js.map +0 -7
  628. package/dist/cli-bundle/chunks/register-setup-KBXQDCXE.js.map +0 -7
  629. package/dist/cli-bundle/chunks/register-setup-RCRUHMSZ.js.map +0 -1
  630. package/dist/cli-bundle/chunks/restore-2ZKT6UDC.js +0 -19
  631. package/dist/cli-bundle/chunks/schema-MNTAVQCY.js.map +0 -1
  632. package/dist/cli-bundle/chunks/schema-RBTJ2YXW.js.map +0 -7
  633. package/dist/cli-bundle/chunks/stats-FS742AMA.js.map +0 -1
  634. package/dist/cli-bundle/chunks/stats-R5OAJVZK.js.map +0 -7
  635. package/dist/cli-bundle/chunks/test-QJXLKV26.js +0 -36
  636. package/dist/cli-bundle/chunks/test-runs-C6CFIVOS.js.map +0 -1
  637. package/dist/cli-bundle/chunks/test-runs-IAJDL6CA.js.map +0 -7
  638. package/dist/cli-bundle/chunks/update-2XCQNOD6.js +0 -28
  639. package/dist/cli-bundle/chunks/update-IWUCXVH2.js +0 -24
  640. package/dist/cli-bundle/chunks/validate-6QWQVCX2.js.map +0 -7
  641. package/dist/cli-bundle/chunks/validate-W5V5ZGQX.js.map +0 -1
  642. package/docs/examples/policy-restricted-extension/index.js +0 -21
  643. package/packages/pm-beads/extensions/beads/index.js +0 -64
  644. package/packages/pm-beads/extensions/beads/runtime-loader.js +0 -86
  645. package/packages/pm-beads/extensions/beads/runtime.js +0 -482
  646. package/packages/pm-calendar/extensions/calendar/index.js +0 -150
  647. package/packages/pm-calendar/extensions/calendar/runtime.js +0 -126
  648. package/packages/pm-command-kit/extensions/command-kit/index.js +0 -181
  649. package/packages/pm-governance-audit/extensions/governance-audit/index.js +0 -177
  650. package/packages/pm-governance-audit/extensions/governance-audit/runtime.js +0 -153
  651. package/packages/pm-guide-shell/extensions/guide-shell/index.js +0 -98
  652. package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +0 -294
  653. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.js +0 -18
  654. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.js +0 -124
  655. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.js +0 -110
  656. package/packages/pm-search-advanced/extensions/search-advanced/index.js +0 -258
  657. package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +0 -361
  658. package/packages/pm-templates/extensions/templates/index.js +0 -132
  659. package/packages/pm-templates/extensions/templates/runtime.js +0 -35
  660. package/packages/pm-todos/extensions/todos/index.js +0 -81
  661. package/packages/pm-todos/extensions/todos/runtime-loader.js +0 -86
  662. package/packages/pm-todos/extensions/todos/runtime.js +0 -545
  663. /package/dist/cli-bundle/chunks/{activity-XUZ2AHCW.js.map → activity-EJBMXUBH.js.map} +0 -0
  664. /package/dist/cli-bundle/chunks/{activity-H2LMOSSW.js.map → activity-MVSEND6D.js.map} +0 -0
  665. /package/dist/cli-bundle/chunks/{chunk-IB3GYLQE.js.map → chunk-3JWQCLR5.js.map} +0 -0
  666. /package/dist/cli-bundle/chunks/{chunk-2A34E3BA.js.map → chunk-4TXTVZL3.js.map} +0 -0
  667. /package/dist/cli-bundle/chunks/{chunk-G6N5VEOK.js.map → chunk-4YIMPANT.js.map} +0 -0
  668. /package/dist/cli-bundle/chunks/{chunk-7XGQXHFB.js.map → chunk-73PTKMAE.js.map} +0 -0
  669. /package/dist/cli-bundle/chunks/{chunk-3VY3YQO6.js.map → chunk-7RIJGN4R.js.map} +0 -0
  670. /package/dist/cli-bundle/chunks/{chunk-FXR67XVQ.js.map → chunk-BN3CWK6G.js.map} +0 -0
  671. /package/dist/cli-bundle/chunks/{chunk-4BHT5VDC.js.map → chunk-C2KCIZKZ.js.map} +0 -0
  672. /package/dist/cli-bundle/chunks/{chunk-O6LLO73I.js.map → chunk-CHRNYKNI.js.map} +0 -0
  673. /package/dist/cli-bundle/chunks/{chunk-ZQ3ZVXX2.js.map → chunk-D6USKAMA.js.map} +0 -0
  674. /package/dist/cli-bundle/chunks/{chunk-WZQWHN4R.js.map → chunk-DLDCPF5X.js.map} +0 -0
  675. /package/dist/cli-bundle/chunks/{chunk-UVC5LOR7.js.map → chunk-E2Q2ULMR.js.map} +0 -0
  676. /package/dist/cli-bundle/chunks/{chunk-5VOINNKT.js.map → chunk-F6VH3LFC.js.map} +0 -0
  677. /package/dist/cli-bundle/chunks/{chunk-H4IIJDE4.js.map → chunk-FDEVKXC4.js.map} +0 -0
  678. /package/dist/cli-bundle/chunks/{chunk-34EONI5F.js.map → chunk-HUYYMTGW.js.map} +0 -0
  679. /package/dist/cli-bundle/chunks/{chunk-CIIK67GW.js.map → chunk-IHXXUIXS.js.map} +0 -0
  680. /package/dist/cli-bundle/chunks/{chunk-SBQTAVJZ.js.map → chunk-JIP67N2K.js.map} +0 -0
  681. /package/dist/cli-bundle/chunks/{chunk-2T3JG6V4.js.map → chunk-KRASIL6M.js.map} +0 -0
  682. /package/dist/cli-bundle/chunks/{chunk-P77P2ILI.js.map → chunk-MLHX6DN5.js.map} +0 -0
  683. /package/dist/cli-bundle/chunks/{chunk-2CKH2LMV.js.map → chunk-OB3RJV5F.js.map} +0 -0
  684. /package/dist/cli-bundle/chunks/{chunk-FIGAZ4Y7.js.map → chunk-OUQ5JEFM.js.map} +0 -0
  685. /package/dist/cli-bundle/chunks/{chunk-NK3UPBVG.js.map → chunk-QE5UFCCO.js.map} +0 -0
  686. /package/dist/cli-bundle/chunks/{chunk-WM5ZVBPE.js.map → chunk-SJZTPVFT.js.map} +0 -0
  687. /package/dist/cli-bundle/chunks/{chunk-VAYA4XFX.js.map → chunk-V3KLX7U7.js.map} +0 -0
  688. /package/dist/cli-bundle/chunks/{chunk-2RDVQEWV.js.map → chunk-Z5BM2FKQ.js.map} +0 -0
  689. /package/dist/cli-bundle/chunks/{chunk-66MEDTUD.js.map → chunk-ZEATCVAC.js.map} +0 -0
  690. /package/dist/cli-bundle/chunks/{chunk-NCVCO3NZ.js.map → chunk-ZFIEEDTJ.js.map} +0 -0
  691. /package/dist/cli-bundle/chunks/{close-A3EMKBBY.js.map → close-37KEHLYM.js.map} +0 -0
  692. /package/dist/cli-bundle/chunks/{close-W56IOGYG.js.map → close-OP3LK7Z2.js.map} +0 -0
  693. /package/dist/cli-bundle/chunks/{create-QVGFYA2X.js.map → context-7ZEZV3BV.js.map} +0 -0
  694. /package/dist/cli-bundle/chunks/{create-IXY43O4H.js.map → context-XDI4DKKT.js.map} +0 -0
  695. /package/dist/cli-bundle/chunks/{extension-UTTQDUYI.js.map → create-DFMNBKBS.js.map} +0 -0
  696. /package/dist/cli-bundle/chunks/{extension-KCPUWSY2.js.map → create-J5Q2ELZT.js.map} +0 -0
  697. /package/dist/cli-bundle/chunks/{history-AJTXLT6S.js.map → extension-3LRYX7SW.js.map} +0 -0
  698. /package/dist/cli-bundle/chunks/{history-AK3E5Z3C.js.map → extension-GMVOIP4O.js.map} +0 -0
  699. /package/dist/cli-bundle/chunks/{gc-O5GUO3SU.js.map → gc-FULIVYR4.js.map} +0 -0
  700. /package/dist/cli-bundle/chunks/{gc-PYVVEELM.js.map → gc-MDGRR2SU.js.map} +0 -0
  701. /package/dist/cli-bundle/chunks/{history-redact-TWIYQV5J.js.map → history-5XUSLAJA.js.map} +0 -0
  702. /package/dist/cli-bundle/chunks/{history-redact-KUUUVUFM.js.map → history-X4OSES6K.js.map} +0 -0
  703. /package/dist/cli-bundle/chunks/{init-BNLVFPRG.js.map → history-redact-45YW65BK.js.map} +0 -0
  704. /package/dist/cli-bundle/chunks/{init-RCRKW5PL.js.map → history-redact-BVHWDXPR.js.map} +0 -0
  705. /package/dist/cli-bundle/chunks/{list-32U7BSKE.js.map → init-KO7CGIRQ.js.map} +0 -0
  706. /package/dist/cli-bundle/chunks/{list-ZEEOHLTQ.js.map → init-TRYJELH4.js.map} +0 -0
  707. /package/dist/cli-bundle/chunks/{restore-6K53WOWO.js.map → list-ROT7JF62.js.map} +0 -0
  708. /package/dist/cli-bundle/chunks/{restore-2ZKT6UDC.js.map → list-Y6AU5BJS.js.map} +0 -0
  709. /package/dist/cli-bundle/chunks/{search-6HOIVZDU.js.map → restore-DKMCLPI5.js.map} +0 -0
  710. /package/dist/cli-bundle/chunks/{search-ZWYEMASC.js.map → restore-IRAKSWIW.js.map} +0 -0
  711. /package/dist/cli-bundle/chunks/{test-NZF7OT2F.js.map → schema-OLT6LVKH.js.map} +0 -0
  712. /package/dist/cli-bundle/chunks/{test-QJXLKV26.js.map → schema-XJXKJQF5.js.map} +0 -0
  713. /package/dist/cli-bundle/chunks/{update-2XCQNOD6.js.map → search-CX5UMV4H.js.map} +0 -0
  714. /package/dist/cli-bundle/chunks/{update-IWUCXVH2.js.map → search-KP6H7COV.js.map} +0 -0
  715. /package/dist/cli-bundle/chunks/{telemetry-7DIGDQUO.js.map → telemetry-DIFPXCAT.js.map} +0 -0
  716. /package/dist/cli-bundle/chunks/{telemetry-FWEXSJLQ.js.map → telemetry-WTYFUPRL.js.map} +0 -0
@@ -39,6 +39,8 @@ export interface ConfigPositionalNotRoutable {
39
39
  * Restricts config positional result values accepted by command, SDK, and storage contracts.
40
40
  */
41
41
  export type ConfigPositionalResult = ConfigPositionalRouted | ConfigPositionalNotRoutable;
42
+ /** Canonical snake-case config keys accepted by the config command and positional router. */
43
+ export type ConfigKey = "definition_of_done" | "item_format" | "history_missing_stream_policy" | "sprint_release_format_policy" | "parent_reference_policy" | "metadata_validation_profile" | "metadata_required_fields" | "lifecycle_stale_blocker_reason_patterns" | "lifecycle_closure_like_blocked_reason_patterns" | "lifecycle_closure_like_resolution_patterns" | "lifecycle_closure_like_actual_result_patterns" | "governance_preset" | "governance_ownership_enforcement" | "governance_create_mode_default" | "governance_close_validation_default" | "governance_require_close_reason" | "governance_create_default_type" | "governance_workflow_enforcement" | "governance_parent_reference_policy" | "governance_metadata_validation_profile" | "governance_force_required_for_stale_lock" | "test_result_tracking" | "telemetry_tracking" | "context";
42
44
  /**
43
45
  * Resolve which typed flag a positional `pm config set <key> <value>` value should
44
46
  * populate, plus the normalized value.
@@ -10,7 +10,7 @@
10
10
  * good error messages.
11
11
  */
12
12
 
13
- !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]="6cd7dcb8-a001-52ee-bcd6-e6c9f3d33f02")}catch(e){}}();
13
+ !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]="c7e38647-27e9-5ea0-8c7f-7decefb9a882")}catch(e){}}();
14
14
  const FORMAT_KEYS = new Set(["item_format"]);
15
15
  const CRITERIA_KEYS = new Set([
16
16
  "definition_of_done",
@@ -110,4 +110,4 @@ export function resolveConfigPositionalValue(canonicalKeyOrAlias, value) {
110
110
  return { routable: true, flag: "policy", value: policyValue };
111
111
  }
112
112
  //# sourceMappingURL=positional-value.js.map
113
- //# debugId=6cd7dcb8-a001-52ee-bcd6-e6c9f3d33f02
113
+ //# debugId=c7e38647-27e9-5ea0-8c7f-7decefb9a882
@@ -1 +1 @@
1
- {"version":3,"file":"positional-value.js","sources":["core/config/positional-value.ts"],"sourceRoot":"/","sourcesContent":["/**\n * Pure routing helper for the optional positional `value` argument of `pm config set`.\n *\n * `pm config set <key> <value>` is the intuitive form agents reach for, but config\n * VALUES are actually carried by typed flags (`--format`, `--policy`, `--criterion`).\n * This module maps a config key (kebab or snake form, canonical or alias) plus a raw\n * positional value onto the typed flag it should populate, applying enabled/disabled\n * synonyms (off/on/true/false) for boolean-style policy keys. The existing per-key\n * validators in config.ts still run on the routed value, so bad values keep their\n * good error messages.\n */\n\n/** The typed flag a positional value routes to. */\nexport type ConfigPositionalFlag = \"format\" | \"policy\" | \"criterion\";\n\n/** Successful routing of a positional value to a single-value typed flag. */\nexport interface ConfigPositionalScalarRouted {\n routable: true;\n flag: \"format\" | \"policy\";\n /** Normalized scalar value for single-value flags. */\n value: string;\n}\n\n/** Successful routing of a positional value to the criteria-list flag. */\nexport interface ConfigPositionalListRouted {\n routable: true;\n flag: \"criterion\";\n /** Criteria-list flag (`--criterion`) value, supplied as a values array. */\n values: string[];\n}\n\n/**\n * Restricts config positional routed values accepted by command, SDK, and storage contracts.\n */\nexport type ConfigPositionalRouted = ConfigPositionalScalarRouted | ConfigPositionalListRouted;\n\n/** A key whose value cannot be carried by a single positional (e.g. `context`). */\nexport interface ConfigPositionalNotRoutable {\n routable: false;\n /** Human/agent-facing reason + the flags to use instead. */\n reason: string;\n}\n\n/**\n * Restricts config positional result values accepted by command, SDK, and storage contracts.\n */\nexport type ConfigPositionalResult = ConfigPositionalRouted | ConfigPositionalNotRoutable;\n\n/** Canonical snake-case config keys this helper understands. */\ntype CanonicalConfigKey =\n | \"definition_of_done\"\n | \"item_format\"\n | \"history_missing_stream_policy\"\n | \"sprint_release_format_policy\"\n | \"parent_reference_policy\"\n | \"metadata_validation_profile\"\n | \"metadata_required_fields\"\n | \"lifecycle_stale_blocker_reason_patterns\"\n | \"lifecycle_closure_like_blocked_reason_patterns\"\n | \"lifecycle_closure_like_resolution_patterns\"\n | \"lifecycle_closure_like_actual_result_patterns\"\n | \"governance_preset\"\n | \"governance_ownership_enforcement\"\n | \"governance_create_mode_default\"\n | \"governance_close_validation_default\"\n | \"governance_require_close_reason\"\n | \"governance_create_default_type\"\n | \"governance_workflow_enforcement\"\n | \"governance_parent_reference_policy\"\n | \"governance_metadata_validation_profile\"\n | \"governance_force_required_for_stale_lock\"\n | \"test_result_tracking\"\n | \"telemetry_tracking\"\n | \"context\";\n\nconst FORMAT_KEYS: ReadonlySet<CanonicalConfigKey> = new Set<CanonicalConfigKey>([\"item_format\"]);\n\nconst CRITERIA_KEYS: ReadonlySet<CanonicalConfigKey> = new Set<CanonicalConfigKey>([\n \"definition_of_done\",\n \"metadata_required_fields\",\n \"lifecycle_stale_blocker_reason_patterns\",\n \"lifecycle_closure_like_blocked_reason_patterns\",\n \"lifecycle_closure_like_resolution_patterns\",\n \"lifecycle_closure_like_actual_result_patterns\",\n]);\n\nconst POLICY_KEYS: ReadonlySet<CanonicalConfigKey> = new Set<CanonicalConfigKey>([\n \"history_missing_stream_policy\",\n \"sprint_release_format_policy\",\n \"parent_reference_policy\",\n \"metadata_validation_profile\",\n \"governance_preset\",\n \"governance_ownership_enforcement\",\n \"governance_create_mode_default\",\n \"governance_close_validation_default\",\n \"governance_require_close_reason\",\n \"governance_create_default_type\",\n \"governance_workflow_enforcement\",\n \"governance_parent_reference_policy\",\n \"governance_metadata_validation_profile\",\n \"governance_force_required_for_stale_lock\",\n \"test_result_tracking\",\n \"telemetry_tracking\",\n]);\n\n/**\n * Policy keys whose only valid values are enabled/disabled. For these we accept the\n * intuitive synonyms off/on/true/false. Other policy keys pass through unchanged so\n * their own validators report the precise allowed set.\n */\nconst ENABLED_DISABLED_POLICY_KEYS: ReadonlySet<CanonicalConfigKey> = new Set<CanonicalConfigKey>([\n \"governance_require_close_reason\",\n \"governance_force_required_for_stale_lock\",\n \"test_result_tracking\",\n \"telemetry_tracking\",\n]);\n\nconst ENABLED_DISABLED_SYNONYMS: Record<string, string> = {\n off: \"disabled\",\n on: \"enabled\",\n true: \"enabled\",\n false: \"disabled\",\n enabled: \"enabled\",\n disabled: \"disabled\",\n};\n\n/** Normalize any kebab/snake key form to the canonical snake key (or undefined). */\nfunction toCanonicalKey(keyOrAlias: string): CanonicalConfigKey | undefined {\n const normalized = keyOrAlias.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (\n FORMAT_KEYS.has(normalized as CanonicalConfigKey) ||\n CRITERIA_KEYS.has(normalized as CanonicalConfigKey) ||\n POLICY_KEYS.has(normalized as CanonicalConfigKey) ||\n normalized === \"context\"\n ) {\n return normalized as CanonicalConfigKey;\n }\n return undefined;\n}\n\n/**\n * Map an enabled/disabled-style value through its synonyms (case-insensitive). Values\n * that are not synonyms pass through unchanged so the downstream validator can reject\n * them with its own message.\n */\nfunction normalizeEnabledDisabled(value: string): string {\n const normalized = value.trim().toLowerCase();\n return ENABLED_DISABLED_SYNONYMS[normalized] ?? value;\n}\n\n/**\n * Resolve which typed flag a positional `pm config set <key> <value>` value should\n * populate, plus the normalized value.\n *\n * Returns `{ routable: false, reason }` for keys that require multiple/structured\n * flags (e.g. `context`). Unknown keys also return `routable: false` so the caller\n * can fall back to the existing invalid-key path.\n */\nexport function resolveConfigPositionalValue(\n canonicalKeyOrAlias: string,\n value: string,\n): ConfigPositionalResult {\n const key = toCanonicalKey(canonicalKeyOrAlias);\n if (key === undefined) {\n return {\n routable: false,\n reason: `Unknown config key \"${canonicalKeyOrAlias}\" cannot route a positional value.`,\n };\n }\n\n if (key === \"context\") {\n return {\n routable: false,\n reason:\n 'Config set context does not accept a positional value. Use --default-depth, --activity-limit, --stale-threshold-days, or --section-<name> flags.',\n };\n }\n\n if (FORMAT_KEYS.has(key)) {\n return { routable: true, flag: \"format\", value };\n }\n\n if (CRITERIA_KEYS.has(key)) {\n return { routable: true, flag: \"criterion\", values: [value] };\n }\n\n // policy key\n const policyValue = ENABLED_DISABLED_POLICY_KEYS.has(key) ? normalizeEnabledDisabled(value) : value;\n return { routable: true, flag: \"policy\", value: policyValue };\n}\n"],"names":[],"mappings":"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","debugId":"6cd7dcb8-a001-52ee-bcd6-e6c9f3d33f02"}
1
+ {"version":3,"file":"positional-value.js","sources":["core/config/positional-value.ts"],"sourceRoot":"/","sourcesContent":["/**\n * Pure routing helper for the optional positional `value` argument of `pm config set`.\n *\n * `pm config set <key> <value>` is the intuitive form agents reach for, but config\n * VALUES are actually carried by typed flags (`--format`, `--policy`, `--criterion`).\n * This module maps a config key (kebab or snake form, canonical or alias) plus a raw\n * positional value onto the typed flag it should populate, applying enabled/disabled\n * synonyms (off/on/true/false) for boolean-style policy keys. The existing per-key\n * validators in config.ts still run on the routed value, so bad values keep their\n * good error messages.\n */\n\n/** The typed flag a positional value routes to. */\nexport type ConfigPositionalFlag = \"format\" | \"policy\" | \"criterion\";\n\n/** Successful routing of a positional value to a single-value typed flag. */\nexport interface ConfigPositionalScalarRouted {\n routable: true;\n flag: \"format\" | \"policy\";\n /** Normalized scalar value for single-value flags. */\n value: string;\n}\n\n/** Successful routing of a positional value to the criteria-list flag. */\nexport interface ConfigPositionalListRouted {\n routable: true;\n flag: \"criterion\";\n /** Criteria-list flag (`--criterion`) value, supplied as a values array. */\n values: string[];\n}\n\n/**\n * Restricts config positional routed values accepted by command, SDK, and storage contracts.\n */\nexport type ConfigPositionalRouted = ConfigPositionalScalarRouted | ConfigPositionalListRouted;\n\n/** A key whose value cannot be carried by a single positional (e.g. `context`). */\nexport interface ConfigPositionalNotRoutable {\n routable: false;\n /** Human/agent-facing reason + the flags to use instead. */\n reason: string;\n}\n\n/**\n * Restricts config positional result values accepted by command, SDK, and storage contracts.\n */\nexport type ConfigPositionalResult = ConfigPositionalRouted | ConfigPositionalNotRoutable;\n\n/** Canonical snake-case config keys accepted by the config command and positional router. */\nexport type ConfigKey =\n | \"definition_of_done\"\n | \"item_format\"\n | \"history_missing_stream_policy\"\n | \"sprint_release_format_policy\"\n | \"parent_reference_policy\"\n | \"metadata_validation_profile\"\n | \"metadata_required_fields\"\n | \"lifecycle_stale_blocker_reason_patterns\"\n | \"lifecycle_closure_like_blocked_reason_patterns\"\n | \"lifecycle_closure_like_resolution_patterns\"\n | \"lifecycle_closure_like_actual_result_patterns\"\n | \"governance_preset\"\n | \"governance_ownership_enforcement\"\n | \"governance_create_mode_default\"\n | \"governance_close_validation_default\"\n | \"governance_require_close_reason\"\n | \"governance_create_default_type\"\n | \"governance_workflow_enforcement\"\n | \"governance_parent_reference_policy\"\n | \"governance_metadata_validation_profile\"\n | \"governance_force_required_for_stale_lock\"\n | \"test_result_tracking\"\n | \"telemetry_tracking\"\n | \"context\";\n\nconst FORMAT_KEYS: ReadonlySet<ConfigKey> = new Set<ConfigKey>([\"item_format\"]);\n\nconst CRITERIA_KEYS: ReadonlySet<ConfigKey> = new Set<ConfigKey>([\n \"definition_of_done\",\n \"metadata_required_fields\",\n \"lifecycle_stale_blocker_reason_patterns\",\n \"lifecycle_closure_like_blocked_reason_patterns\",\n \"lifecycle_closure_like_resolution_patterns\",\n \"lifecycle_closure_like_actual_result_patterns\",\n]);\n\nconst POLICY_KEYS: ReadonlySet<ConfigKey> = new Set<ConfigKey>([\n \"history_missing_stream_policy\",\n \"sprint_release_format_policy\",\n \"parent_reference_policy\",\n \"metadata_validation_profile\",\n \"governance_preset\",\n \"governance_ownership_enforcement\",\n \"governance_create_mode_default\",\n \"governance_close_validation_default\",\n \"governance_require_close_reason\",\n \"governance_create_default_type\",\n \"governance_workflow_enforcement\",\n \"governance_parent_reference_policy\",\n \"governance_metadata_validation_profile\",\n \"governance_force_required_for_stale_lock\",\n \"test_result_tracking\",\n \"telemetry_tracking\",\n]);\n\n/**\n * Policy keys whose only valid values are enabled/disabled. For these we accept the\n * intuitive synonyms off/on/true/false. Other policy keys pass through unchanged so\n * their own validators report the precise allowed set.\n */\nconst ENABLED_DISABLED_POLICY_KEYS: ReadonlySet<ConfigKey> = new Set<ConfigKey>([\n \"governance_require_close_reason\",\n \"governance_force_required_for_stale_lock\",\n \"test_result_tracking\",\n \"telemetry_tracking\",\n]);\n\nconst ENABLED_DISABLED_SYNONYMS: Record<string, string> = {\n off: \"disabled\",\n on: \"enabled\",\n true: \"enabled\",\n false: \"disabled\",\n enabled: \"enabled\",\n disabled: \"disabled\",\n};\n\n/** Normalize any kebab/snake key form to the canonical snake key (or undefined). */\nfunction toCanonicalKey(keyOrAlias: string): ConfigKey | undefined {\n const normalized = keyOrAlias.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (\n FORMAT_KEYS.has(normalized as ConfigKey) ||\n CRITERIA_KEYS.has(normalized as ConfigKey) ||\n POLICY_KEYS.has(normalized as ConfigKey) ||\n normalized === \"context\"\n ) {\n return normalized as ConfigKey;\n }\n return undefined;\n}\n\n/**\n * Map an enabled/disabled-style value through its synonyms (case-insensitive). Values\n * that are not synonyms pass through unchanged so the downstream validator can reject\n * them with its own message.\n */\nfunction normalizeEnabledDisabled(value: string): string {\n const normalized = value.trim().toLowerCase();\n return ENABLED_DISABLED_SYNONYMS[normalized] ?? value;\n}\n\n/**\n * Resolve which typed flag a positional `pm config set <key> <value>` value should\n * populate, plus the normalized value.\n *\n * Returns `{ routable: false, reason }` for keys that require multiple/structured\n * flags (e.g. `context`). Unknown keys also return `routable: false` so the caller\n * can fall back to the existing invalid-key path.\n */\nexport function resolveConfigPositionalValue(\n canonicalKeyOrAlias: string,\n value: string,\n): ConfigPositionalResult {\n const key = toCanonicalKey(canonicalKeyOrAlias);\n if (key === undefined) {\n return {\n routable: false,\n reason: `Unknown config key \"${canonicalKeyOrAlias}\" cannot route a positional value.`,\n };\n }\n\n if (key === \"context\") {\n return {\n routable: false,\n reason:\n 'Config set context does not accept a positional value. Use --default-depth, --activity-limit, --stale-threshold-days, or --section-<name> flags.',\n };\n }\n\n if (FORMAT_KEYS.has(key)) {\n return { routable: true, flag: \"format\", value };\n }\n\n if (CRITERIA_KEYS.has(key)) {\n return { routable: true, flag: \"criterion\", values: [value] };\n }\n\n // policy key\n const policyValue = ENABLED_DISABLED_POLICY_KEYS.has(key) ? normalizeEnabledDisabled(value) : value;\n return { routable: true, flag: \"policy\", value: policyValue };\n}\n"],"names":[],"mappings":"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","debugId":"c7e38647-27e9-5ea0-8c7f-7decefb9a882"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @module core/extensions/activation-summary-markdown
3
+ *
4
+ * Renders an {@link ExtensionActivationSummary} to a deterministic Markdown
5
+ * reference document — the *render* leg that completes the `describe`
6
+ * (enumerate-all) verb.
7
+ *
8
+ * {@link ./activation-summary.js#describeExtensionActivation | `describeExtensionActivation`}
9
+ * (and its author-time twin
10
+ * {@link ../../sdk/compose.js#describeExtensionBlueprint | `describeExtensionBlueprint`})
11
+ * already answer "what does this package register?" as a structured summary, and
12
+ * the `assert*`/`run*` testing helpers verify and invoke each surface. What was
13
+ * missing is a way to turn that summary into human-readable docs: package
14
+ * authors hand-wrote the README "commands & capabilities" reference, which
15
+ * silently drifted from the surface the loader actually registers.
16
+ *
17
+ * {@link renderExtensionSurfaceMarkdown} closes that gap. It is a pure,
18
+ * dependency-free projection of the summary, so an author can pipe
19
+ * `describeExtensionBlueprint(blueprint)` straight into it during their build or
20
+ * test step and embed the result in their README — a reference that can never
21
+ * drift from the registered surface ("project management = context management").
22
+ * The CLI's `pm extension|package describe --markdown` composes the same
23
+ * primitive across every loaded extension.
24
+ */
25
+ import type { ExtensionActivationSummary } from "./activation-summary.js";
26
+ /**
27
+ * Options for {@link renderExtensionSurfaceMarkdown}.
28
+ */
29
+ export interface ExtensionSurfaceMarkdownOptions {
30
+ /**
31
+ * Heading text for the document title. Defaults to `"Extension surfaces"`.
32
+ * The title always renders as an ATX heading at
33
+ * {@link ExtensionSurfaceMarkdownOptions.headingLevel}; per-surface sections
34
+ * render one level deeper.
35
+ */
36
+ title?: string;
37
+ /**
38
+ * ATX heading level for the title, an integer in `[1, 6]` (default `2`, i.e.
39
+ * `##`, so the document embeds cleanly under a `# Package` README heading).
40
+ * Section headings render at `headingLevel + 1`, clamped to `6`. Values
41
+ * outside `[1, 6]` throw a {@link RangeError}.
42
+ */
43
+ headingLevel?: number;
44
+ /**
45
+ * When `true`, render every surface section even when it has no entries
46
+ * (emitting `_None._` under the heading) and always emit the capabilities
47
+ * line. Defaults to `false`, which omits empty sections so the reference lists
48
+ * only what the package actually contributes.
49
+ */
50
+ includeEmpty?: boolean;
51
+ }
52
+ /**
53
+ * Render an {@link ExtensionActivationSummary} as a deterministic Markdown
54
+ * reference document.
55
+ *
56
+ * The output is a title heading, a one-line capabilities summary, and a section
57
+ * per registered surface (commands, overrides, flags, item types/fields,
58
+ * migrations, importers/exporters, search providers, vector adapters, lifecycle
59
+ * hooks, and the parser/service/renderer override surfaces), followed by a
60
+ * preflight-override count line when any are registered. Section order and
61
+ * within-section identifier order both come straight from the summary, so the
62
+ * same summary always renders byte-for-byte the same document.
63
+ *
64
+ * By default empty sections are omitted so the reference lists only what the
65
+ * package contributes; set {@link ExtensionSurfaceMarkdownOptions.includeEmpty}
66
+ * to render every section. A summary with no surfaces at all renders the title,
67
+ * the capabilities line, and a `_This extension registers no surfaces._` note.
68
+ *
69
+ * @throws {RangeError} when `options.headingLevel` is not an integer in `[1, 6]`.
70
+ */
71
+ export declare function renderExtensionSurfaceMarkdown(summary: ExtensionActivationSummary, options?: ExtensionSurfaceMarkdownOptions): string;
@@ -0,0 +1,140 @@
1
+ /**
2
+ * The lowest and highest ATX heading levels Markdown supports, used to validate
3
+ * {@link ExtensionSurfaceMarkdownOptions.headingLevel} and to clamp nested
4
+ * section headings so a deep title never emits an invalid `#######` run.
5
+ */
6
+
7
+ !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]="916c708e-0da8-5408-8d50-ce702f482e94")}catch(e){}}();
8
+ const MIN_HEADING_LEVEL = 1;
9
+ const MAX_HEADING_LEVEL = 6;
10
+ /**
11
+ * A surface section paired with the {@link ExtensionActivationSummary} field
12
+ * whose identifiers populate it. Ordered for an author-facing reference:
13
+ * commands first, then schema, then importers/exporters, retrieval, lifecycle
14
+ * hooks, and finally the override surfaces. {@link ExtensionActivationSummary.command_handlers}
15
+ * is intentionally omitted — it is a documented superset of `commands` plus the
16
+ * synthesized `<name> import`/`<name> export` paths already covered by the
17
+ * Importers and Exporters sections, so rendering it would duplicate information.
18
+ */
19
+ const SURFACE_SECTIONS = [
20
+ ["commands", "Commands"],
21
+ ["command_overrides", "Command overrides"],
22
+ ["flag_commands", "Flag commands"],
23
+ ["item_types", "Item types"],
24
+ ["item_fields", "Item fields"],
25
+ ["migrations", "Migrations"],
26
+ ["profiles", "Profiles"],
27
+ ["importers", "Importers"],
28
+ ["exporters", "Exporters"],
29
+ ["search_providers", "Search providers"],
30
+ ["vector_store_adapters", "Vector store adapters"],
31
+ ["hooks", "Lifecycle hooks"],
32
+ ["parser_overrides", "Parser overrides"],
33
+ ["service_overrides", "Service overrides"],
34
+ ["renderer_overrides", "Renderer overrides"],
35
+ ];
36
+ /**
37
+ * Repeat `#` `level` times to form an ATX heading prefix.
38
+ */
39
+ function headingPrefix(level) {
40
+ return "#".repeat(level);
41
+ }
42
+ /**
43
+ * Render `value` as an inline Markdown code span. Backslash escapes do not work
44
+ * inside CommonMark code spans, so when `value` contains backticks the span is
45
+ * delimited by a run of backticks one longer than the longest internal run, and
46
+ * padded with a space when the value borders a backtick — the CommonMark rule
47
+ * for embedding literal backticks in a code span.
48
+ */
49
+ function code(value) {
50
+ if (!value.includes("`")) {
51
+ return `\`${value}\``;
52
+ }
53
+ let longestRun = 0;
54
+ let currentRun = 0;
55
+ for (const char of value) {
56
+ currentRun = char === "`" ? currentRun + 1 : 0;
57
+ longestRun = Math.max(longestRun, currentRun);
58
+ }
59
+ const fence = "`".repeat(longestRun + 1);
60
+ const pad = value.startsWith("`") || value.endsWith("`") ? " " : "";
61
+ return `${fence}${pad}${value}${pad}${fence}`;
62
+ }
63
+ /**
64
+ * Render the comma-separated capabilities summary line (or `_none registered_`
65
+ * when the activation exercised no known capability).
66
+ */
67
+ function renderCapabilitiesLine(capabilities) {
68
+ if (capabilities.length === 0) {
69
+ return "Capabilities: _none registered_";
70
+ }
71
+ return `Capabilities: ${capabilities.map(code).join(", ")}`;
72
+ }
73
+ /**
74
+ * Render one surface section as `heading` + a bullet per identifier, or, when
75
+ * `entries` is empty, `heading` + `_None._`. Callers decide whether an empty
76
+ * section is rendered at all via {@link ExtensionSurfaceMarkdownOptions.includeEmpty}.
77
+ */
78
+ function renderSection(heading, level, entries) {
79
+ const lines = [`${headingPrefix(level)} ${heading}`, ""];
80
+ if (entries.length === 0) {
81
+ lines.push("_None._", "");
82
+ return lines;
83
+ }
84
+ lines.push(...entries.map((entry) => `- ${code(entry)}`), "");
85
+ return lines;
86
+ }
87
+ /**
88
+ * Render an {@link ExtensionActivationSummary} as a deterministic Markdown
89
+ * reference document.
90
+ *
91
+ * The output is a title heading, a one-line capabilities summary, and a section
92
+ * per registered surface (commands, overrides, flags, item types/fields,
93
+ * migrations, importers/exporters, search providers, vector adapters, lifecycle
94
+ * hooks, and the parser/service/renderer override surfaces), followed by a
95
+ * preflight-override count line when any are registered. Section order and
96
+ * within-section identifier order both come straight from the summary, so the
97
+ * same summary always renders byte-for-byte the same document.
98
+ *
99
+ * By default empty sections are omitted so the reference lists only what the
100
+ * package contributes; set {@link ExtensionSurfaceMarkdownOptions.includeEmpty}
101
+ * to render every section. A summary with no surfaces at all renders the title,
102
+ * the capabilities line, and a `_This extension registers no surfaces._` note.
103
+ *
104
+ * @throws {RangeError} when `options.headingLevel` is not an integer in `[1, 6]`.
105
+ */
106
+ export function renderExtensionSurfaceMarkdown(summary, options = {}) {
107
+ const titleLevel = options.headingLevel ?? 2;
108
+ if (!Number.isInteger(titleLevel) || titleLevel < MIN_HEADING_LEVEL || titleLevel > MAX_HEADING_LEVEL) {
109
+ throw new RangeError(`headingLevel must be an integer in [${MIN_HEADING_LEVEL}, ${MAX_HEADING_LEVEL}], received ${String(options.headingLevel)}`);
110
+ }
111
+ const sectionLevel = Math.min(titleLevel + 1, MAX_HEADING_LEVEL);
112
+ const includeEmpty = options.includeEmpty === true;
113
+ const title = options.title ?? "Extension surfaces";
114
+ const lines = [`${headingPrefix(titleLevel)} ${title}`, ""];
115
+ if (includeEmpty || summary.capabilities.length > 0) {
116
+ lines.push(renderCapabilitiesLine(summary.capabilities), "");
117
+ }
118
+ let renderedSurface = false;
119
+ for (const [field, heading] of SURFACE_SECTIONS) {
120
+ const entries = summary[field];
121
+ if (entries.length === 0 && !includeEmpty) {
122
+ continue;
123
+ }
124
+ renderedSurface = renderedSurface || entries.length > 0;
125
+ lines.push(...renderSection(heading, sectionLevel, entries));
126
+ }
127
+ if (summary.preflight_overrides > 0 || includeEmpty) {
128
+ renderedSurface = renderedSurface || summary.preflight_overrides > 0;
129
+ lines.push(`${headingPrefix(sectionLevel)} Preflight overrides`, "");
130
+ lines.push(summary.preflight_overrides > 0
131
+ ? `- ${summary.preflight_overrides} registered (this surface carries no per-entry identifier)`
132
+ : "_None._", "");
133
+ }
134
+ if (!renderedSurface && !includeEmpty) {
135
+ lines.push("_This extension registers no surfaces._", "");
136
+ }
137
+ return `${lines.join("\n").trimEnd()}\n`;
138
+ }
139
+ //# sourceMappingURL=activation-summary-markdown.js.map
140
+ //# debugId=916c708e-0da8-5408-8d50-ce702f482e94
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activation-summary-markdown.js","sources":["core/extensions/activation-summary-markdown.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module core/extensions/activation-summary-markdown\n *\n * Renders an {@link ExtensionActivationSummary} to a deterministic Markdown\n * reference document — the *render* leg that completes the `describe`\n * (enumerate-all) verb.\n *\n * {@link ./activation-summary.js#describeExtensionActivation | `describeExtensionActivation`}\n * (and its author-time twin\n * {@link ../../sdk/compose.js#describeExtensionBlueprint | `describeExtensionBlueprint`})\n * already answer \"what does this package register?\" as a structured summary, and\n * the `assert*`/`run*` testing helpers verify and invoke each surface. What was\n * missing is a way to turn that summary into human-readable docs: package\n * authors hand-wrote the README \"commands & capabilities\" reference, which\n * silently drifted from the surface the loader actually registers.\n *\n * {@link renderExtensionSurfaceMarkdown} closes that gap. It is a pure,\n * dependency-free projection of the summary, so an author can pipe\n * `describeExtensionBlueprint(blueprint)` straight into it during their build or\n * test step and embed the result in their README — a reference that can never\n * drift from the registered surface (\"project management = context management\").\n * The CLI's `pm extension|package describe --markdown` composes the same\n * primitive across every loaded extension.\n */\nimport type { ExtensionActivationSummary } from \"./activation-summary.js\";\n\n/**\n * The lowest and highest ATX heading levels Markdown supports, used to validate\n * {@link ExtensionSurfaceMarkdownOptions.headingLevel} and to clamp nested\n * section headings so a deep title never emits an invalid `#######` run.\n */\nconst MIN_HEADING_LEVEL = 1;\nconst MAX_HEADING_LEVEL = 6;\n\n/**\n * Options for {@link renderExtensionSurfaceMarkdown}.\n */\nexport interface ExtensionSurfaceMarkdownOptions {\n /**\n * Heading text for the document title. Defaults to `\"Extension surfaces\"`.\n * The title always renders as an ATX heading at\n * {@link ExtensionSurfaceMarkdownOptions.headingLevel}; per-surface sections\n * render one level deeper.\n */\n title?: string;\n /**\n * ATX heading level for the title, an integer in `[1, 6]` (default `2`, i.e.\n * `##`, so the document embeds cleanly under a `# Package` README heading).\n * Section headings render at `headingLevel + 1`, clamped to `6`. Values\n * outside `[1, 6]` throw a {@link RangeError}.\n */\n headingLevel?: number;\n /**\n * When `true`, render every surface section even when it has no entries\n * (emitting `_None._` under the heading) and always emit the capabilities\n * line. Defaults to `false`, which omits empty sections so the reference lists\n * only what the package actually contributes.\n */\n includeEmpty?: boolean;\n}\n\n/**\n * A surface section paired with the {@link ExtensionActivationSummary} field\n * whose identifiers populate it. Ordered for an author-facing reference:\n * commands first, then schema, then importers/exporters, retrieval, lifecycle\n * hooks, and finally the override surfaces. {@link ExtensionActivationSummary.command_handlers}\n * is intentionally omitted — it is a documented superset of `commands` plus the\n * synthesized `<name> import`/`<name> export` paths already covered by the\n * Importers and Exporters sections, so rendering it would duplicate information.\n */\nconst SURFACE_SECTIONS = [\n [\"commands\", \"Commands\"],\n [\"command_overrides\", \"Command overrides\"],\n [\"flag_commands\", \"Flag commands\"],\n [\"item_types\", \"Item types\"],\n [\"item_fields\", \"Item fields\"],\n [\"migrations\", \"Migrations\"],\n [\"profiles\", \"Profiles\"],\n [\"importers\", \"Importers\"],\n [\"exporters\", \"Exporters\"],\n [\"search_providers\", \"Search providers\"],\n [\"vector_store_adapters\", \"Vector store adapters\"],\n [\"hooks\", \"Lifecycle hooks\"],\n [\"parser_overrides\", \"Parser overrides\"],\n [\"service_overrides\", \"Service overrides\"],\n [\"renderer_overrides\", \"Renderer overrides\"],\n] as const satisfies ReadonlyArray<\n readonly [\n {\n [K in keyof ExtensionActivationSummary]: ExtensionActivationSummary[K] extends readonly string[] ? K : never;\n }[keyof ExtensionActivationSummary],\n string,\n ]\n>;\n\n/**\n * Repeat `#` `level` times to form an ATX heading prefix.\n */\nfunction headingPrefix(level: number): string {\n return \"#\".repeat(level);\n}\n\n/**\n * Render `value` as an inline Markdown code span. Backslash escapes do not work\n * inside CommonMark code spans, so when `value` contains backticks the span is\n * delimited by a run of backticks one longer than the longest internal run, and\n * padded with a space when the value borders a backtick — the CommonMark rule\n * for embedding literal backticks in a code span.\n */\nfunction code(value: string): string {\n if (!value.includes(\"`\")) {\n return `\\`${value}\\``;\n }\n let longestRun = 0;\n let currentRun = 0;\n for (const char of value) {\n currentRun = char === \"`\" ? currentRun + 1 : 0;\n longestRun = Math.max(longestRun, currentRun);\n }\n const fence = \"`\".repeat(longestRun + 1);\n const pad = value.startsWith(\"`\") || value.endsWith(\"`\") ? \" \" : \"\";\n return `${fence}${pad}${value}${pad}${fence}`;\n}\n\n/**\n * Render the comma-separated capabilities summary line (or `_none registered_`\n * when the activation exercised no known capability).\n */\nfunction renderCapabilitiesLine(capabilities: readonly string[]): string {\n if (capabilities.length === 0) {\n return \"Capabilities: _none registered_\";\n }\n return `Capabilities: ${capabilities.map(code).join(\", \")}`;\n}\n\n/**\n * Render one surface section as `heading` + a bullet per identifier, or, when\n * `entries` is empty, `heading` + `_None._`. Callers decide whether an empty\n * section is rendered at all via {@link ExtensionSurfaceMarkdownOptions.includeEmpty}.\n */\nfunction renderSection(heading: string, level: number, entries: readonly string[]): string[] {\n const lines = [`${headingPrefix(level)} ${heading}`, \"\"];\n if (entries.length === 0) {\n lines.push(\"_None._\", \"\");\n return lines;\n }\n lines.push(...entries.map((entry) => `- ${code(entry)}`), \"\");\n return lines;\n}\n\n/**\n * Render an {@link ExtensionActivationSummary} as a deterministic Markdown\n * reference document.\n *\n * The output is a title heading, a one-line capabilities summary, and a section\n * per registered surface (commands, overrides, flags, item types/fields,\n * migrations, importers/exporters, search providers, vector adapters, lifecycle\n * hooks, and the parser/service/renderer override surfaces), followed by a\n * preflight-override count line when any are registered. Section order and\n * within-section identifier order both come straight from the summary, so the\n * same summary always renders byte-for-byte the same document.\n *\n * By default empty sections are omitted so the reference lists only what the\n * package contributes; set {@link ExtensionSurfaceMarkdownOptions.includeEmpty}\n * to render every section. A summary with no surfaces at all renders the title,\n * the capabilities line, and a `_This extension registers no surfaces._` note.\n *\n * @throws {RangeError} when `options.headingLevel` is not an integer in `[1, 6]`.\n */\nexport function renderExtensionSurfaceMarkdown(\n summary: ExtensionActivationSummary,\n options: ExtensionSurfaceMarkdownOptions = {},\n): string {\n const titleLevel = options.headingLevel ?? 2;\n if (!Number.isInteger(titleLevel) || titleLevel < MIN_HEADING_LEVEL || titleLevel > MAX_HEADING_LEVEL) {\n throw new RangeError(\n `headingLevel must be an integer in [${MIN_HEADING_LEVEL}, ${MAX_HEADING_LEVEL}], received ${String(options.headingLevel)}`,\n );\n }\n const sectionLevel = Math.min(titleLevel + 1, MAX_HEADING_LEVEL);\n const includeEmpty = options.includeEmpty === true;\n const title = options.title ?? \"Extension surfaces\";\n\n const lines = [`${headingPrefix(titleLevel)} ${title}`, \"\"];\n if (includeEmpty || summary.capabilities.length > 0) {\n lines.push(renderCapabilitiesLine(summary.capabilities), \"\");\n }\n\n let renderedSurface = false;\n for (const [field, heading] of SURFACE_SECTIONS) {\n const entries = summary[field];\n if (entries.length === 0 && !includeEmpty) {\n continue;\n }\n renderedSurface = renderedSurface || entries.length > 0;\n lines.push(...renderSection(heading, sectionLevel, entries));\n }\n\n if (summary.preflight_overrides > 0 || includeEmpty) {\n renderedSurface = renderedSurface || summary.preflight_overrides > 0;\n lines.push(`${headingPrefix(sectionLevel)} Preflight overrides`, \"\");\n lines.push(\n summary.preflight_overrides > 0\n ? `- ${summary.preflight_overrides} registered (this surface carries no per-entry identifier)`\n : \"_None._\",\n \"\",\n );\n }\n\n if (!renderedSurface && !includeEmpty) {\n lines.push(\"_This extension registers no surfaces._\", \"\");\n }\n\n return `${lines.join(\"\\n\").trimEnd()}\\n`;\n}\n"],"names":[],"mappings":"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","debugId":"916c708e-0da8-5408-8d50-ce702f482e94"}
@@ -62,6 +62,8 @@ export interface ExtensionActivationSummary {
62
62
  item_fields: string[];
63
63
  /** Schema migration ids registered via `registerMigration` (id-less migrations are omitted — they carry no identifier). */
64
64
  migrations: string[];
65
+ /** Project profile names registered via `registerProfile`. */
66
+ profiles: string[];
65
67
  /** Importer names registered via `registerImporter`. */
66
68
  importers: string[];
67
69
  /** Exporter names registered via `registerExporter`. */
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="13c88992-4da1-549d-8644-3ac448f6960e")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="39933cf1-dcc8-57c9-ab92-77dcadb707d8")}catch(e){}}();
3
3
  import { collectUsedExtensionCapabilities, normalizeExtensionName } from "./capability-usage.js";
4
4
  /**
5
5
  * Canonical lifecycle hook kinds paired with their {@link ExtensionHookRegistry}
@@ -43,6 +43,7 @@ export function describeExtensionActivation(activation, options = {}) {
43
43
  item_types: collectFlat(registrations.item_types, (entry) => entry.types.map((type) => type.name)),
44
44
  item_fields: collectFlat(registrations.item_fields, (entry) => entry.fields.map((field) => field.name)),
45
45
  migrations: collectFlat(registrations.migrations, (entry) => typeof entry.definition.id === "string" ? [entry.definition.id] : []),
46
+ profiles: collect(registrations.profiles, (entry) => entry.profile.name),
46
47
  importers: collect(registrations.importers, (entry) => entry.importer),
47
48
  exporters: collect(registrations.exporters, (entry) => entry.exporter),
48
49
  search_providers: collect(registrations.search_providers, (entry) => entry.definition.name),
@@ -57,4 +58,4 @@ function sortUnique(values) {
57
58
  return [...new Set(values)].sort((left, right) => left.localeCompare(right));
58
59
  }
59
60
  //# sourceMappingURL=activation-summary.js.map
60
- //# debugId=13c88992-4da1-549d-8644-3ac448f6960e
61
+ //# debugId=39933cf1-dcc8-57c9-ab92-77dcadb707d8
@@ -1 +1 @@
1
- {"version":3,"file":"activation-summary.js","sources":["core/extensions/activation-summary.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module core/extensions/activation-summary\n *\n * Enumerates *what* an extension activation registered, by name, in one pass.\n *\n * {@link ./extension-types.js#ExtensionActivationResult | `ExtensionActivationResult`}\n * already carries per-surface *counts* (`hook_counts`, `registration_counts`,\n * the various `*_count` fields), but answering \"what does this extension\n * register?\" otherwise means walking fifteen-plus sub-registries by hand\n * (`registrations.commands`/`flags`/`item_types`/`item_fields`/`migrations`/\n * `importers`/`exporters`/`search_providers`/`vector_store_adapters`,\n * `commands.overrides`/`handlers`, the `parsers`/`preflight`/`services`/\n * `renderers` override registries, and the five `hooks.*` arrays).\n *\n * {@link describeExtensionActivation} flattens all of them into one sorted,\n * deterministic {@link ExtensionActivationSummary} of identifiers — the\n * `describe` (enumerate-all) verb that complements the SDK's `assert*`\n * (verify-one) and `run*` (invoke-one) testing helpers. It serves two callers:\n *\n * - **Agents** get a single token-efficient view of an activation instead of\n * traversing every registry (\"project management = context management\").\n * - **Package authors** can assert their *entire* registration surface in one\n * `deepEqual` — a least-privilege \"I register exactly these surfaces and\n * nothing more\" check, the positive counterpart to\n * {@link ./capability-usage.js#reconcileExtensionCapabilityUsage}.\n */\nimport type {\n ExtensionActivationResult,\n ExtensionCapability,\n ExtensionHookRegistry,\n ExtensionServiceName,\n OutputRendererFormat,\n} from \"./extension-types.js\";\nimport { collectUsedExtensionCapabilities, normalizeExtensionName } from \"./capability-usage.js\";\n\n/**\n * Canonical lifecycle hook kinds paired with their {@link ExtensionHookRegistry}\n * field, ordered to match `ExtensionActivationResult.hook_counts` so a summary's\n * `hooks` list reads in the same stable order the runtime reports counts in.\n */\nconst HOOK_REGISTRY_FIELD_TO_KIND = [\n [\"beforeCommand\", \"before_command\"],\n [\"afterCommand\", \"after_command\"],\n [\"onWrite\", \"on_write\"],\n [\"onRead\", \"on_read\"],\n [\"onIndex\", \"on_index\"],\n] as const satisfies ReadonlyArray<readonly [keyof ExtensionHookRegistry, string]>;\n\n/**\n * Flat, name-level enumeration of every surface an activation registered.\n *\n * Arrays are de-duplicated for deterministic equality. Most are locale-sorted;\n * {@link ExtensionActivationSummary.hooks} is the exception — it is emitted in\n * canonical lifecycle order to mirror `ExtensionActivationResult.hook_counts`,\n * not alphabetically. The three command fields capture distinct dimensions and\n * can overlap: a command\n * registered via `api.registerCommand(definition)` appears in both\n * {@link ExtensionActivationSummary.commands} (its declared definition) and\n * {@link ExtensionActivationSummary.command_handlers} (its executable handler),\n * whereas a built-in command replaced via `api.registerCommand(name, override)`\n * appears only in {@link ExtensionActivationSummary.command_overrides}.\n */\nexport interface ExtensionActivationSummary {\n /** Known capabilities the registered surfaces exercise (sorted, de-duplicated). */\n capabilities: ExtensionCapability[];\n /** Full command paths declared via `registerCommand`'s definition form. */\n commands: string[];\n /** Built-in command paths replaced by an `registerCommand(name, override)` handler. */\n command_overrides: string[];\n /**\n * Full command paths backed by an extension-provided handler. A superset of\n * {@link ExtensionActivationSummary.commands} that also includes the\n * `<name> import`/`<name> export` paths synthesized for importers/exporters.\n */\n command_handlers: string[];\n /** Lifecycle hook kinds with at least one registered hook (canonical order). */\n hooks: string[];\n /** Command paths that received extension-registered flags. */\n flag_commands: string[];\n /** Custom item-type names registered via `registerItemTypes`. */\n item_types: string[];\n /** Custom front-matter field names registered via `registerItemFields`. */\n item_fields: string[];\n /** Schema migration ids registered via `registerMigration` (id-less migrations are omitted — they carry no identifier). */\n migrations: string[];\n /** Importer names registered via `registerImporter`. */\n importers: string[];\n /** Exporter names registered via `registerExporter`. */\n exporters: string[];\n /** Search-provider names registered via `registerSearchProvider`. */\n search_providers: string[];\n /** Vector-store adapter names registered via `registerVectorStoreAdapter`. */\n vector_store_adapters: string[];\n /** Command paths with a parser override registered via `registerParser`. */\n parser_overrides: string[];\n /** Built-in service names overridden via `registerService`. */\n service_overrides: ExtensionServiceName[];\n /** Output formats with a renderer override registered via `registerRenderer`. */\n renderer_overrides: OutputRendererFormat[];\n /**\n * Count of registered preflight overrides. The surface carries no per-entry\n * identifier, so this is a `number` rather than `string[]` — the only numeric\n * field in the summary.\n */\n preflight_overrides: number;\n}\n\n/**\n * Options for {@link describeExtensionActivation}.\n */\nexport interface DescribeExtensionActivationOptions {\n /**\n * Restrict the summary to a single extension by name. Names are matched\n * case-insensitively after trimming, mirroring\n * {@link ./capability-usage.js#collectUsedExtensionCapabilities}. Omit to\n * union across every extension in the activation result.\n */\n extensionName?: string;\n}\n\n/**\n * Summarize, by name, every registration surface an activation exercised.\n *\n * Walks the same sub-registries the loader populates and the capability\n * reconciler attributes, returning a flat {@link ExtensionActivationSummary}\n * whose arrays are sorted and de-duplicated. With\n * {@link DescribeExtensionActivationOptions.extensionName} only the matching\n * extension's registrations contribute (across both layers); without it the\n * summary unions every extension in the activation. Failed activations register\n * nothing, so they contribute only an empty summary.\n */\nexport function describeExtensionActivation(\n activation: ExtensionActivationResult,\n options: DescribeExtensionActivationOptions = {},\n): ExtensionActivationSummary {\n // Match both sides with the same normalizer collectUsedExtensionCapabilities\n // uses for the `capabilities` field below, so a filtered summary's named\n // surfaces and capabilities never disagree for a stored name with whitespace.\n const filter = options.extensionName !== undefined ? normalizeExtensionName(options.extensionName) : null;\n const matches = (name: string): boolean => filter === null || normalizeExtensionName(name) === filter;\n const collect = <TEntry extends { name: string }, TValue extends string>(\n entries: readonly TEntry[],\n identify: (entry: TEntry) => TValue,\n ): TValue[] => sortUnique(entries.filter((entry) => matches(entry.name)).map(identify));\n const collectFlat = <TEntry extends { name: string }>(\n entries: readonly TEntry[],\n expand: (entry: TEntry) => readonly string[],\n ): string[] => sortUnique(entries.filter((entry) => matches(entry.name)).flatMap(expand));\n const { registrations, commands, parsers, preflight, services, renderers, hooks } = activation;\n return {\n capabilities: collectUsedExtensionCapabilities(activation, options),\n commands: collect(registrations.commands, (entry) => entry.command),\n command_overrides: collect(commands.overrides, (entry) => entry.command),\n command_handlers: collect(commands.handlers, (entry) => entry.command),\n hooks: HOOK_REGISTRY_FIELD_TO_KIND.filter(([field]) => hooks[field].some((entry) => matches(entry.name))).map(\n ([, kind]) => kind,\n ),\n flag_commands: collect(registrations.flags, (entry) => entry.target_command),\n item_types: collectFlat(registrations.item_types, (entry) => entry.types.map((type) => type.name)),\n item_fields: collectFlat(registrations.item_fields, (entry) => entry.fields.map((field) => field.name)),\n migrations: collectFlat(registrations.migrations, (entry) =>\n typeof entry.definition.id === \"string\" ? [entry.definition.id] : [],\n ),\n importers: collect(registrations.importers, (entry) => entry.importer),\n exporters: collect(registrations.exporters, (entry) => entry.exporter),\n search_providers: collect(registrations.search_providers, (entry) => entry.definition.name),\n vector_store_adapters: collect(registrations.vector_store_adapters, (entry) => entry.definition.name),\n parser_overrides: collect(parsers.overrides, (entry) => entry.command),\n service_overrides: collect(services.overrides, (entry) => entry.service),\n renderer_overrides: collect(renderers.overrides, (entry) => entry.format),\n preflight_overrides: preflight.overrides.filter((entry) => matches(entry.name)).length,\n };\n}\n\nfunction sortUnique<TValue extends string>(values: readonly TValue[]): TValue[] {\n return [...new Set(values)].sort((left, right) => left.localeCompare(right));\n}\n"],"names":[],"mappings":"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","debugId":"13c88992-4da1-549d-8644-3ac448f6960e"}
1
+ {"version":3,"file":"activation-summary.js","sources":["core/extensions/activation-summary.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module core/extensions/activation-summary\n *\n * Enumerates *what* an extension activation registered, by name, in one pass.\n *\n * {@link ./extension-types.js#ExtensionActivationResult | `ExtensionActivationResult`}\n * already carries per-surface *counts* (`hook_counts`, `registration_counts`,\n * the various `*_count` fields), but answering \"what does this extension\n * register?\" otherwise means walking fifteen-plus sub-registries by hand\n * (`registrations.commands`/`flags`/`item_types`/`item_fields`/`migrations`/\n * `importers`/`exporters`/`search_providers`/`vector_store_adapters`,\n * `commands.overrides`/`handlers`, the `parsers`/`preflight`/`services`/\n * `renderers` override registries, and the five `hooks.*` arrays).\n *\n * {@link describeExtensionActivation} flattens all of them into one sorted,\n * deterministic {@link ExtensionActivationSummary} of identifiers — the\n * `describe` (enumerate-all) verb that complements the SDK's `assert*`\n * (verify-one) and `run*` (invoke-one) testing helpers. It serves two callers:\n *\n * - **Agents** get a single token-efficient view of an activation instead of\n * traversing every registry (\"project management = context management\").\n * - **Package authors** can assert their *entire* registration surface in one\n * `deepEqual` — a least-privilege \"I register exactly these surfaces and\n * nothing more\" check, the positive counterpart to\n * {@link ./capability-usage.js#reconcileExtensionCapabilityUsage}.\n */\nimport type {\n ExtensionActivationResult,\n ExtensionCapability,\n ExtensionHookRegistry,\n ExtensionServiceName,\n OutputRendererFormat,\n} from \"./extension-types.js\";\nimport { collectUsedExtensionCapabilities, normalizeExtensionName } from \"./capability-usage.js\";\n\n/**\n * Canonical lifecycle hook kinds paired with their {@link ExtensionHookRegistry}\n * field, ordered to match `ExtensionActivationResult.hook_counts` so a summary's\n * `hooks` list reads in the same stable order the runtime reports counts in.\n */\nconst HOOK_REGISTRY_FIELD_TO_KIND = [\n [\"beforeCommand\", \"before_command\"],\n [\"afterCommand\", \"after_command\"],\n [\"onWrite\", \"on_write\"],\n [\"onRead\", \"on_read\"],\n [\"onIndex\", \"on_index\"],\n] as const satisfies ReadonlyArray<readonly [keyof ExtensionHookRegistry, string]>;\n\n/**\n * Flat, name-level enumeration of every surface an activation registered.\n *\n * Arrays are de-duplicated for deterministic equality. Most are locale-sorted;\n * {@link ExtensionActivationSummary.hooks} is the exception — it is emitted in\n * canonical lifecycle order to mirror `ExtensionActivationResult.hook_counts`,\n * not alphabetically. The three command fields capture distinct dimensions and\n * can overlap: a command\n * registered via `api.registerCommand(definition)` appears in both\n * {@link ExtensionActivationSummary.commands} (its declared definition) and\n * {@link ExtensionActivationSummary.command_handlers} (its executable handler),\n * whereas a built-in command replaced via `api.registerCommand(name, override)`\n * appears only in {@link ExtensionActivationSummary.command_overrides}.\n */\nexport interface ExtensionActivationSummary {\n /** Known capabilities the registered surfaces exercise (sorted, de-duplicated). */\n capabilities: ExtensionCapability[];\n /** Full command paths declared via `registerCommand`'s definition form. */\n commands: string[];\n /** Built-in command paths replaced by an `registerCommand(name, override)` handler. */\n command_overrides: string[];\n /**\n * Full command paths backed by an extension-provided handler. A superset of\n * {@link ExtensionActivationSummary.commands} that also includes the\n * `<name> import`/`<name> export` paths synthesized for importers/exporters.\n */\n command_handlers: string[];\n /** Lifecycle hook kinds with at least one registered hook (canonical order). */\n hooks: string[];\n /** Command paths that received extension-registered flags. */\n flag_commands: string[];\n /** Custom item-type names registered via `registerItemTypes`. */\n item_types: string[];\n /** Custom front-matter field names registered via `registerItemFields`. */\n item_fields: string[];\n /** Schema migration ids registered via `registerMigration` (id-less migrations are omitted — they carry no identifier). */\n migrations: string[];\n /** Project profile names registered via `registerProfile`. */\n profiles: string[];\n /** Importer names registered via `registerImporter`. */\n importers: string[];\n /** Exporter names registered via `registerExporter`. */\n exporters: string[];\n /** Search-provider names registered via `registerSearchProvider`. */\n search_providers: string[];\n /** Vector-store adapter names registered via `registerVectorStoreAdapter`. */\n vector_store_adapters: string[];\n /** Command paths with a parser override registered via `registerParser`. */\n parser_overrides: string[];\n /** Built-in service names overridden via `registerService`. */\n service_overrides: ExtensionServiceName[];\n /** Output formats with a renderer override registered via `registerRenderer`. */\n renderer_overrides: OutputRendererFormat[];\n /**\n * Count of registered preflight overrides. The surface carries no per-entry\n * identifier, so this is a `number` rather than `string[]` — the only numeric\n * field in the summary.\n */\n preflight_overrides: number;\n}\n\n/**\n * Options for {@link describeExtensionActivation}.\n */\nexport interface DescribeExtensionActivationOptions {\n /**\n * Restrict the summary to a single extension by name. Names are matched\n * case-insensitively after trimming, mirroring\n * {@link ./capability-usage.js#collectUsedExtensionCapabilities}. Omit to\n * union across every extension in the activation result.\n */\n extensionName?: string;\n}\n\n/**\n * Summarize, by name, every registration surface an activation exercised.\n *\n * Walks the same sub-registries the loader populates and the capability\n * reconciler attributes, returning a flat {@link ExtensionActivationSummary}\n * whose arrays are sorted and de-duplicated. With\n * {@link DescribeExtensionActivationOptions.extensionName} only the matching\n * extension's registrations contribute (across both layers); without it the\n * summary unions every extension in the activation. Failed activations register\n * nothing, so they contribute only an empty summary.\n */\nexport function describeExtensionActivation(\n activation: ExtensionActivationResult,\n options: DescribeExtensionActivationOptions = {},\n): ExtensionActivationSummary {\n // Match both sides with the same normalizer collectUsedExtensionCapabilities\n // uses for the `capabilities` field below, so a filtered summary's named\n // surfaces and capabilities never disagree for a stored name with whitespace.\n const filter = options.extensionName !== undefined ? normalizeExtensionName(options.extensionName) : null;\n const matches = (name: string): boolean => filter === null || normalizeExtensionName(name) === filter;\n const collect = <TEntry extends { name: string }, TValue extends string>(\n entries: readonly TEntry[],\n identify: (entry: TEntry) => TValue,\n ): TValue[] => sortUnique(entries.filter((entry) => matches(entry.name)).map(identify));\n const collectFlat = <TEntry extends { name: string }>(\n entries: readonly TEntry[],\n expand: (entry: TEntry) => readonly string[],\n ): string[] => sortUnique(entries.filter((entry) => matches(entry.name)).flatMap(expand));\n const { registrations, commands, parsers, preflight, services, renderers, hooks } = activation;\n return {\n capabilities: collectUsedExtensionCapabilities(activation, options),\n commands: collect(registrations.commands, (entry) => entry.command),\n command_overrides: collect(commands.overrides, (entry) => entry.command),\n command_handlers: collect(commands.handlers, (entry) => entry.command),\n hooks: HOOK_REGISTRY_FIELD_TO_KIND.filter(([field]) => hooks[field].some((entry) => matches(entry.name))).map(\n ([, kind]) => kind,\n ),\n flag_commands: collect(registrations.flags, (entry) => entry.target_command),\n item_types: collectFlat(registrations.item_types, (entry) => entry.types.map((type) => type.name)),\n item_fields: collectFlat(registrations.item_fields, (entry) => entry.fields.map((field) => field.name)),\n migrations: collectFlat(registrations.migrations, (entry) =>\n typeof entry.definition.id === \"string\" ? [entry.definition.id] : [],\n ),\n profiles: collect(registrations.profiles, (entry) => entry.profile.name),\n importers: collect(registrations.importers, (entry) => entry.importer),\n exporters: collect(registrations.exporters, (entry) => entry.exporter),\n search_providers: collect(registrations.search_providers, (entry) => entry.definition.name),\n vector_store_adapters: collect(registrations.vector_store_adapters, (entry) => entry.definition.name),\n parser_overrides: collect(parsers.overrides, (entry) => entry.command),\n service_overrides: collect(services.overrides, (entry) => entry.service),\n renderer_overrides: collect(renderers.overrides, (entry) => entry.format),\n preflight_overrides: preflight.overrides.filter((entry) => matches(entry.name)).length,\n };\n}\n\nfunction sortUnique<TValue extends string>(values: readonly TValue[]): TValue[] {\n return [...new Set(values)].sort((left, right) => left.localeCompare(right));\n}\n"],"names":[],"mappings":"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","debugId":"39933cf1-dcc8-57c9-ab92-77dcadb707d8"}
@@ -26,7 +26,7 @@ export declare const EXTENSION_CAPABILITY_REGISTRATION_SURFACES: {
26
26
  readonly commands: readonly ["registerCommand", "command override", "command handler"];
27
27
  readonly renderers: readonly ["registerRenderer"];
28
28
  readonly hooks: readonly ["hooks.beforeCommand", "hooks.afterCommand", "hooks.onWrite", "hooks.onRead", "hooks.onIndex"];
29
- readonly schema: readonly ["registerFlags", "registerItemFields", "registerItemTypes", "registerMigration"];
29
+ readonly schema: readonly ["registerFlags", "registerItemFields", "registerItemTypes", "registerMigration", "registerProfile"];
30
30
  readonly importers: readonly ["registerImporter", "registerExporter"];
31
31
  readonly search: readonly ["registerSearchProvider", "registerVectorStoreAdapter"];
32
32
  readonly parser: readonly ["registerParser"];
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f6134b79-a7d0-57d9-b25a-8e3e7b4af416")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="7cc05bac-f673-59a1-9d51-64361cf5a939")}catch(e){}}();
3
3
  import { normalizeKnownExtensionCapability } from "./extension-capability-aliases.js";
4
4
  /**
5
5
  * Canonical map from each known extension capability to the human-readable
@@ -14,7 +14,7 @@ export const EXTENSION_CAPABILITY_REGISTRATION_SURFACES = {
14
14
  commands: ["registerCommand", "command override", "command handler"],
15
15
  renderers: ["registerRenderer"],
16
16
  hooks: ["hooks.beforeCommand", "hooks.afterCommand", "hooks.onWrite", "hooks.onRead", "hooks.onIndex"],
17
- schema: ["registerFlags", "registerItemFields", "registerItemTypes", "registerMigration"],
17
+ schema: ["registerFlags", "registerItemFields", "registerItemTypes", "registerMigration", "registerProfile"],
18
18
  importers: ["registerImporter", "registerExporter"],
19
19
  search: ["registerSearchProvider", "registerVectorStoreAdapter"],
20
20
  parser: ["registerParser"],
@@ -79,6 +79,7 @@ function attributeCapabilityUsage(activation) {
79
79
  record(registrations.item_fields, "schema");
80
80
  record(registrations.item_types, "schema");
81
81
  record(registrations.migrations, "schema");
82
+ record(registrations.profiles, "schema");
82
83
  record(registrations.importers, "importers");
83
84
  record(registrations.exporters, "importers");
84
85
  record(registrations.search_providers, "search");
@@ -139,4 +140,4 @@ export function reconcileExtensionCapabilityUsage(loaded, activation) {
139
140
  return reconciliations;
140
141
  }
141
142
  //# sourceMappingURL=capability-usage.js.map
142
- //# debugId=f6134b79-a7d0-57d9-b25a-8e3e7b4af416
143
+ //# debugId=7cc05bac-f673-59a1-9d51-64361cf5a939
@@ -1 +1 @@
1
- {"version":3,"file":"capability-usage.js","sources":["core/extensions/capability-usage.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module core/extensions/capability-usage\n *\n * Reconciles the capabilities an extension manifest *declares* against the\n * capabilities it actually *exercises* during activation.\n *\n * The loader already enforces the opposite direction — registering a surface\n * whose capability is absent from `manifest.capabilities` throws an\n * `extension_capability_missing` activation failure. This module closes the\n * least-privilege loop by detecting capabilities a manifest declares but never\n * registers against, so package authors can trim manifests to the minimum\n * grant. Every declared-but-unused capability is an over-broad permission a\n * reviewer would otherwise have to catch by hand.\n */\nimport type { ExtensionActivationResult, ExtensionCapability, ExtensionLayer } from \"./extension-types.js\";\nimport { normalizeKnownExtensionCapability } from \"./extension-capability-aliases.js\";\n\n/**\n * Canonical map from each known extension capability to the human-readable\n * registration surfaces that exercise it.\n *\n * The `satisfies Record<ExtensionCapability, ...>` guard makes this exhaustive\n * at compile time: adding a capability to `KNOWN_EXTENSION_CAPABILITIES`\n * without giving it a registration surface here fails the build, which prevents\n * a capability that has *no* surface from being perpetually flagged as unused.\n */\nexport const EXTENSION_CAPABILITY_REGISTRATION_SURFACES = {\n commands: [\"registerCommand\", \"command override\", \"command handler\"],\n renderers: [\"registerRenderer\"],\n hooks: [\"hooks.beforeCommand\", \"hooks.afterCommand\", \"hooks.onWrite\", \"hooks.onRead\", \"hooks.onIndex\"],\n schema: [\"registerFlags\", \"registerItemFields\", \"registerItemTypes\", \"registerMigration\"],\n importers: [\"registerImporter\", \"registerExporter\"],\n search: [\"registerSearchProvider\", \"registerVectorStoreAdapter\"],\n parser: [\"registerParser\"],\n preflight: [\"registerPreflight\"],\n services: [\"registerService\"],\n} as const satisfies Record<ExtensionCapability, readonly string[]>;\n\n/**\n * Per-extension reconciliation of declared versus exercised capabilities.\n */\nexport interface ExtensionCapabilityUsageReconciliation {\n /** Layer the extension was loaded from (`global` or `project`). */\n layer: ExtensionLayer;\n /** Extension name as it appears in the manifest. */\n name: string;\n /** Known capabilities declared in the manifest, sorted and de-duplicated. */\n declared: ExtensionCapability[];\n /** Known capabilities the extension actually registered against, sorted. */\n used: ExtensionCapability[];\n /** Declared capabilities with no matching registration (least-privilege gap). */\n unused: ExtensionCapability[];\n}\n\n/**\n * Options for {@link collectUsedExtensionCapabilities}.\n */\nexport interface CollectUsedExtensionCapabilitiesOptions {\n /**\n * Restrict the result to a single extension by name. Names are matched\n * case-insensitively after trimming. Omit to union across every extension in\n * the activation result.\n */\n extensionName?: string;\n}\n\n// `layer` is a closed enum (`\"global\" | \"project\"`) that never contains a\n// colon, so the first colon always separates the layer from the (possibly\n// colon-bearing) name — making the key collision-proof without serialization.\nconst USAGE_KEY_SEPARATOR = \":\";\n\nfunction usageKey(layer: ExtensionLayer, name: string): string {\n return `${layer}${USAGE_KEY_SEPARATOR}${normalizeExtensionName(name)}`;\n}\n\nfunction usageKeyName(key: string): string {\n return key.slice(key.indexOf(USAGE_KEY_SEPARATOR) + 1);\n}\n\n/**\n * Canonical extension-name normalization (trim + lowercase) used to match an\n * `extensionName` filter against a registration's stored `name`.\n *\n * Activation stores `extension.name` verbatim — the synthetic test-activation\n * path (`activateExtensionForTest`) never trims it — so any helper that filters\n * by extension name must normalize both sides with this function to stay\n * consistent, including {@link ../extensions/activation-summary.js#describeExtensionActivation}.\n */\nexport function normalizeExtensionName(name: string): string {\n return name.trim().toLowerCase();\n}\n\nfunction normalizeDeclaredCapabilities(capabilities: readonly string[] | undefined): ExtensionCapability[] {\n if (!Array.isArray(capabilities)) {\n return [];\n }\n const known = new Set<ExtensionCapability>();\n for (const capability of capabilities) {\n // Unknown capabilities are reported by the separate unknown-capability\n // diagnostic; reconciling them here would double-report a typo as \"unused\".\n const normalized = normalizeKnownExtensionCapability(capability);\n if (normalized !== null) {\n known.add(normalized);\n }\n }\n return [...known].sort((left, right) => left.localeCompare(right));\n}\n\nfunction attributeCapabilityUsage(activation: ExtensionActivationResult): Map<string, Set<ExtensionCapability>> {\n const usage = new Map<string, Set<ExtensionCapability>>();\n const record = (\n entries: ReadonlyArray<{ layer: ExtensionLayer; name: string }>,\n capability: ExtensionCapability,\n ): void => {\n for (const entry of entries) {\n const key = usageKey(entry.layer, entry.name);\n let exercised = usage.get(key);\n if (exercised === undefined) {\n exercised = new Set<ExtensionCapability>();\n usage.set(key, exercised);\n }\n exercised.add(capability);\n }\n };\n const { registrations, commands, parsers, preflight, services, renderers, hooks } = activation;\n record(registrations.commands, \"commands\");\n record(commands.overrides, \"commands\");\n record(commands.handlers, \"commands\");\n record(registrations.flags, \"schema\");\n record(registrations.item_fields, \"schema\");\n record(registrations.item_types, \"schema\");\n record(registrations.migrations, \"schema\");\n record(registrations.importers, \"importers\");\n record(registrations.exporters, \"importers\");\n record(registrations.search_providers, \"search\");\n record(registrations.vector_store_adapters, \"search\");\n record(parsers.overrides, \"parser\");\n record(preflight.overrides, \"preflight\");\n record(services.overrides, \"services\");\n record(renderers.overrides, \"renderers\");\n record(hooks.beforeCommand, \"hooks\");\n record(hooks.afterCommand, \"hooks\");\n record(hooks.onWrite, \"hooks\");\n record(hooks.onRead, \"hooks\");\n record(hooks.onIndex, \"hooks\");\n return usage;\n}\n\n/**\n * Collect the known capabilities exercised across an activation result.\n *\n * Without {@link CollectUsedExtensionCapabilitiesOptions.extensionName} the\n * result unions every extension in the activation; with it, only the matching\n * extension's registrations contribute (across both layers).\n */\nexport function collectUsedExtensionCapabilities(\n activation: ExtensionActivationResult,\n options: CollectUsedExtensionCapabilitiesOptions = {},\n): ExtensionCapability[] {\n const usage = attributeCapabilityUsage(activation);\n const filter = options.extensionName !== undefined ? normalizeExtensionName(options.extensionName) : null;\n const used = new Set<ExtensionCapability>();\n for (const [key, capabilities] of usage) {\n if (filter !== null && usageKeyName(key) !== filter) {\n continue;\n }\n for (const capability of capabilities) {\n used.add(capability);\n }\n }\n return [...used].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Reconcile each loaded extension's declared capabilities against what it\n * exercised during activation.\n *\n * Extensions with no known declared capabilities are skipped — there is nothing\n * to reconcile. The returned entries preserve every reconcilable extension even\n * when `unused` is empty so callers can report fully-minimal manifests too.\n */\nexport function reconcileExtensionCapabilityUsage(\n loaded: ReadonlyArray<{ layer: ExtensionLayer; name: string; capabilities?: readonly string[] }>,\n activation: ExtensionActivationResult,\n): ExtensionCapabilityUsageReconciliation[] {\n const usage = attributeCapabilityUsage(activation);\n const reconciliations: ExtensionCapabilityUsageReconciliation[] = [];\n for (const extension of loaded) {\n const declared = normalizeDeclaredCapabilities(extension.capabilities);\n if (declared.length === 0) {\n continue;\n }\n const exercised = usage.get(usageKey(extension.layer, extension.name)) ?? new Set<ExtensionCapability>();\n const used = [...exercised].sort((left, right) => left.localeCompare(right));\n const unused = declared.filter((capability) => !exercised.has(capability));\n reconciliations.push({ layer: extension.layer, name: extension.name, declared, used, unused });\n }\n return reconciliations;\n}\n"],"names":[],"mappings":"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","debugId":"f6134b79-a7d0-57d9-b25a-8e3e7b4af416"}
1
+ {"version":3,"file":"capability-usage.js","sources":["core/extensions/capability-usage.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module core/extensions/capability-usage\n *\n * Reconciles the capabilities an extension manifest *declares* against the\n * capabilities it actually *exercises* during activation.\n *\n * The loader already enforces the opposite direction — registering a surface\n * whose capability is absent from `manifest.capabilities` throws an\n * `extension_capability_missing` activation failure. This module closes the\n * least-privilege loop by detecting capabilities a manifest declares but never\n * registers against, so package authors can trim manifests to the minimum\n * grant. Every declared-but-unused capability is an over-broad permission a\n * reviewer would otherwise have to catch by hand.\n */\nimport type { ExtensionActivationResult, ExtensionCapability, ExtensionLayer } from \"./extension-types.js\";\nimport { normalizeKnownExtensionCapability } from \"./extension-capability-aliases.js\";\n\n/**\n * Canonical map from each known extension capability to the human-readable\n * registration surfaces that exercise it.\n *\n * The `satisfies Record<ExtensionCapability, ...>` guard makes this exhaustive\n * at compile time: adding a capability to `KNOWN_EXTENSION_CAPABILITIES`\n * without giving it a registration surface here fails the build, which prevents\n * a capability that has *no* surface from being perpetually flagged as unused.\n */\nexport const EXTENSION_CAPABILITY_REGISTRATION_SURFACES = {\n commands: [\"registerCommand\", \"command override\", \"command handler\"],\n renderers: [\"registerRenderer\"],\n hooks: [\"hooks.beforeCommand\", \"hooks.afterCommand\", \"hooks.onWrite\", \"hooks.onRead\", \"hooks.onIndex\"],\n schema: [\"registerFlags\", \"registerItemFields\", \"registerItemTypes\", \"registerMigration\", \"registerProfile\"],\n importers: [\"registerImporter\", \"registerExporter\"],\n search: [\"registerSearchProvider\", \"registerVectorStoreAdapter\"],\n parser: [\"registerParser\"],\n preflight: [\"registerPreflight\"],\n services: [\"registerService\"],\n} as const satisfies Record<ExtensionCapability, readonly string[]>;\n\n/**\n * Per-extension reconciliation of declared versus exercised capabilities.\n */\nexport interface ExtensionCapabilityUsageReconciliation {\n /** Layer the extension was loaded from (`global` or `project`). */\n layer: ExtensionLayer;\n /** Extension name as it appears in the manifest. */\n name: string;\n /** Known capabilities declared in the manifest, sorted and de-duplicated. */\n declared: ExtensionCapability[];\n /** Known capabilities the extension actually registered against, sorted. */\n used: ExtensionCapability[];\n /** Declared capabilities with no matching registration (least-privilege gap). */\n unused: ExtensionCapability[];\n}\n\n/**\n * Options for {@link collectUsedExtensionCapabilities}.\n */\nexport interface CollectUsedExtensionCapabilitiesOptions {\n /**\n * Restrict the result to a single extension by name. Names are matched\n * case-insensitively after trimming. Omit to union across every extension in\n * the activation result.\n */\n extensionName?: string;\n}\n\n// `layer` is a closed enum (`\"global\" | \"project\"`) that never contains a\n// colon, so the first colon always separates the layer from the (possibly\n// colon-bearing) name — making the key collision-proof without serialization.\nconst USAGE_KEY_SEPARATOR = \":\";\n\nfunction usageKey(layer: ExtensionLayer, name: string): string {\n return `${layer}${USAGE_KEY_SEPARATOR}${normalizeExtensionName(name)}`;\n}\n\nfunction usageKeyName(key: string): string {\n return key.slice(key.indexOf(USAGE_KEY_SEPARATOR) + 1);\n}\n\n/**\n * Canonical extension-name normalization (trim + lowercase) used to match an\n * `extensionName` filter against a registration's stored `name`.\n *\n * Activation stores `extension.name` verbatim — the synthetic test-activation\n * path (`activateExtensionForTest`) never trims it — so any helper that filters\n * by extension name must normalize both sides with this function to stay\n * consistent, including {@link ../extensions/activation-summary.js#describeExtensionActivation}.\n */\nexport function normalizeExtensionName(name: string): string {\n return name.trim().toLowerCase();\n}\n\nfunction normalizeDeclaredCapabilities(capabilities: readonly string[] | undefined): ExtensionCapability[] {\n if (!Array.isArray(capabilities)) {\n return [];\n }\n const known = new Set<ExtensionCapability>();\n for (const capability of capabilities) {\n // Unknown capabilities are reported by the separate unknown-capability\n // diagnostic; reconciling them here would double-report a typo as \"unused\".\n const normalized = normalizeKnownExtensionCapability(capability);\n if (normalized !== null) {\n known.add(normalized);\n }\n }\n return [...known].sort((left, right) => left.localeCompare(right));\n}\n\nfunction attributeCapabilityUsage(activation: ExtensionActivationResult): Map<string, Set<ExtensionCapability>> {\n const usage = new Map<string, Set<ExtensionCapability>>();\n const record = (\n entries: ReadonlyArray<{ layer: ExtensionLayer; name: string }>,\n capability: ExtensionCapability,\n ): void => {\n for (const entry of entries) {\n const key = usageKey(entry.layer, entry.name);\n let exercised = usage.get(key);\n if (exercised === undefined) {\n exercised = new Set<ExtensionCapability>();\n usage.set(key, exercised);\n }\n exercised.add(capability);\n }\n };\n const { registrations, commands, parsers, preflight, services, renderers, hooks } = activation;\n record(registrations.commands, \"commands\");\n record(commands.overrides, \"commands\");\n record(commands.handlers, \"commands\");\n record(registrations.flags, \"schema\");\n record(registrations.item_fields, \"schema\");\n record(registrations.item_types, \"schema\");\n record(registrations.migrations, \"schema\");\n record(registrations.profiles, \"schema\");\n record(registrations.importers, \"importers\");\n record(registrations.exporters, \"importers\");\n record(registrations.search_providers, \"search\");\n record(registrations.vector_store_adapters, \"search\");\n record(parsers.overrides, \"parser\");\n record(preflight.overrides, \"preflight\");\n record(services.overrides, \"services\");\n record(renderers.overrides, \"renderers\");\n record(hooks.beforeCommand, \"hooks\");\n record(hooks.afterCommand, \"hooks\");\n record(hooks.onWrite, \"hooks\");\n record(hooks.onRead, \"hooks\");\n record(hooks.onIndex, \"hooks\");\n return usage;\n}\n\n/**\n * Collect the known capabilities exercised across an activation result.\n *\n * Without {@link CollectUsedExtensionCapabilitiesOptions.extensionName} the\n * result unions every extension in the activation; with it, only the matching\n * extension's registrations contribute (across both layers).\n */\nexport function collectUsedExtensionCapabilities(\n activation: ExtensionActivationResult,\n options: CollectUsedExtensionCapabilitiesOptions = {},\n): ExtensionCapability[] {\n const usage = attributeCapabilityUsage(activation);\n const filter = options.extensionName !== undefined ? normalizeExtensionName(options.extensionName) : null;\n const used = new Set<ExtensionCapability>();\n for (const [key, capabilities] of usage) {\n if (filter !== null && usageKeyName(key) !== filter) {\n continue;\n }\n for (const capability of capabilities) {\n used.add(capability);\n }\n }\n return [...used].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Reconcile each loaded extension's declared capabilities against what it\n * exercised during activation.\n *\n * Extensions with no known declared capabilities are skipped — there is nothing\n * to reconcile. The returned entries preserve every reconcilable extension even\n * when `unused` is empty so callers can report fully-minimal manifests too.\n */\nexport function reconcileExtensionCapabilityUsage(\n loaded: ReadonlyArray<{ layer: ExtensionLayer; name: string; capabilities?: readonly string[] }>,\n activation: ExtensionActivationResult,\n): ExtensionCapabilityUsageReconciliation[] {\n const usage = attributeCapabilityUsage(activation);\n const reconciliations: ExtensionCapabilityUsageReconciliation[] = [];\n for (const extension of loaded) {\n const declared = normalizeDeclaredCapabilities(extension.capabilities);\n if (declared.length === 0) {\n continue;\n }\n const exercised = usage.get(usageKey(extension.layer, extension.name)) ?? new Set<ExtensionCapability>();\n const used = [...exercised].sort((left, right) => left.localeCompare(right));\n const unused = declared.filter((capability) => !exercised.has(capability));\n reconciliations.push({ layer: extension.layer, name: extension.name, declared, used, unused });\n }\n return reconciliations;\n}\n"],"names":[],"mappings":"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","debugId":"7cc05bac-f673-59a1-9d51-64361cf5a939"}
@@ -2,7 +2,7 @@
2
2
  * Implements create empty extension hook registry for the public runtime surface of this module.
3
3
  */
4
4
 
5
- !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]="2520e0b0-3e9e-5f16-93a0-c0e45fc8bb8f")}catch(e){}}();
5
+ !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]="dcfdfd88-3d2a-57c9-9873-d8d7d9cf339d")}catch(e){}}();
6
6
  export function createEmptyExtensionHookRegistry() {
7
7
  return {
8
8
  beforeCommand: [],
@@ -63,6 +63,7 @@ export function createEmptyExtensionRegistrationRegistry() {
63
63
  item_fields: [],
64
64
  item_types: [],
65
65
  migrations: [],
66
+ profiles: [],
66
67
  importers: [],
67
68
  exporters: [],
68
69
  search_providers: [],
@@ -70,4 +71,4 @@ export function createEmptyExtensionRegistrationRegistry() {
70
71
  };
71
72
  }
72
73
  //# sourceMappingURL=extension-registries.js.map
73
- //# debugId=2520e0b0-3e9e-5f16-93a0-c0e45fc8bb8f
74
+ //# debugId=dcfdfd88-3d2a-57c9-9873-d8d7d9cf339d
@@ -1 +1 @@
1
- {"version":3,"file":"extension-registries.js","sources":["core/extensions/extension-registries.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module core/extensions/extension-registries\n *\n * Implements extension runtime contracts and governance for Extension Registries.\n */\nimport type {\n ExtensionHookRegistry,\n ExtensionCommandRegistry,\n ExtensionParserRegistry,\n ExtensionPreflightRegistry,\n ExtensionServiceRegistry,\n ExtensionRendererRegistry,\n ExtensionRegistrationRegistry,\n} from \"./extension-types.js\";\n\n/**\n * Implements create empty extension hook registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionHookRegistry(): ExtensionHookRegistry {\n return {\n beforeCommand: [],\n afterCommand: [],\n onWrite: [],\n onRead: [],\n onIndex: [],\n };\n}\n\n/**\n * Implements create empty extension command registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionCommandRegistry(): ExtensionCommandRegistry {\n return {\n overrides: [],\n handlers: [],\n };\n}\n\n/**\n * Implements create empty extension parser registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionParserRegistry(): ExtensionParserRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension preflight registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionPreflightRegistry(): ExtensionPreflightRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension service registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionServiceRegistry(): ExtensionServiceRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension renderer registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionRendererRegistry(): ExtensionRendererRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension registration registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionRegistrationRegistry(): ExtensionRegistrationRegistry {\n return {\n commands: [],\n flags: [],\n item_fields: [],\n item_types: [],\n migrations: [],\n importers: [],\n exporters: [],\n search_providers: [],\n vector_store_adapters: [],\n };\n}\n"],"names":[],"mappings":"AAeA;;GAEG;;;AACH,MAAM,UAAU,gCAAgC;IAC9C,OAAO;QACL,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mCAAmC;IACjD,OAAO;QACL,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kCAAkC;IAChD,OAAO;QACL,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qCAAqC;IACnD,OAAO;QACL,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mCAAmC;IACjD,OAAO;QACL,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oCAAoC;IAClD,OAAO;QACL,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wCAAwC;IACtD,OAAO;QACL,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,EAAE;QACpB,qBAAqB,EAAE,EAAE;KAC1B,CAAC;AACJ,CAAC","debugId":"2520e0b0-3e9e-5f16-93a0-c0e45fc8bb8f"}
1
+ {"version":3,"file":"extension-registries.js","sources":["core/extensions/extension-registries.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module core/extensions/extension-registries\n *\n * Implements extension runtime contracts and governance for Extension Registries.\n */\nimport type {\n ExtensionHookRegistry,\n ExtensionCommandRegistry,\n ExtensionParserRegistry,\n ExtensionPreflightRegistry,\n ExtensionServiceRegistry,\n ExtensionRendererRegistry,\n ExtensionRegistrationRegistry,\n} from \"./extension-types.js\";\n\n/**\n * Implements create empty extension hook registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionHookRegistry(): ExtensionHookRegistry {\n return {\n beforeCommand: [],\n afterCommand: [],\n onWrite: [],\n onRead: [],\n onIndex: [],\n };\n}\n\n/**\n * Implements create empty extension command registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionCommandRegistry(): ExtensionCommandRegistry {\n return {\n overrides: [],\n handlers: [],\n };\n}\n\n/**\n * Implements create empty extension parser registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionParserRegistry(): ExtensionParserRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension preflight registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionPreflightRegistry(): ExtensionPreflightRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension service registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionServiceRegistry(): ExtensionServiceRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension renderer registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionRendererRegistry(): ExtensionRendererRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension registration registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionRegistrationRegistry(): ExtensionRegistrationRegistry {\n return {\n commands: [],\n flags: [],\n item_fields: [],\n item_types: [],\n migrations: [],\n profiles: [],\n importers: [],\n exporters: [],\n search_providers: [],\n vector_store_adapters: [],\n };\n}\n"],"names":[],"mappings":"AAeA;;GAEG;;;AACH,MAAM,UAAU,gCAAgC;IAC9C,OAAO;QACL,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mCAAmC;IACjD,OAAO;QACL,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kCAAkC;IAChD,OAAO;QACL,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qCAAqC;IACnD,OAAO;QACL,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mCAAmC;IACjD,OAAO;QACL,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oCAAoC;IAClD,OAAO;QACL,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wCAAwC;IACtD,OAAO;QACL,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,EAAE;QACpB,qBAAqB,EAAE,EAAE;KAC1B,CAAC;AACJ,CAAC","debugId":"dcfdfd88-3d2a-57c9-9873-d8d7d9cf339d"}