@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
package/docs/SDK.md CHANGED
@@ -37,7 +37,13 @@ Common authoring exports:
37
37
 
38
38
  - `defineExtension`
39
39
  - `composeExtension` / `deriveExtensionCapabilities`
40
+ - `mergeExtensionBlueprints` (combine partial blueprints into one for modular authoring)
41
+ - `composeExtensionPackage` (author-once capstone: returns both the module and its synthesized manifest)
42
+ - `synthesizeExtensionManifest` (generate a complete least-privilege manifest from a blueprint)
40
43
  - `describeExtensionBlueprint` (static surface map of a blueprint) / `lintExtensionBlueprint` (author-time preflight)
44
+ - `renderExtensionSurfaceMarkdown` (render a describe summary to a drift-free Markdown reference doc for a package README)
45
+ - `checkExtensionManifestCompatibility` (author-time `pm_min_version`/`pm_max_version` check against a target pm version)
46
+ - `preflightExtension` (one-call capstone: lint + manifest synthesis + version-compat in a single consolidated report)
41
47
  - `EXTENSION_CAPABILITIES`
42
48
  - `EXTENSION_CAPABILITY_CONTRACT`
43
49
  - `EXTENSION_CAPABILITY_CONTRACT_VERSION`
@@ -53,11 +59,29 @@ Common authoring exports:
53
59
  Registration builders (`define*`, zero-cost identity — see [Authoring Builders](#authoring-builders)):
54
60
 
55
61
  - `defineCommand` / `defineFlag` / `defineItemType` / `defineItemField` / `defineMigration`
62
+ - `defineProjectProfile` (archetype bundle of types/statuses/fields/workflows/config/templates/packages — powers `pm profile`)
56
63
  - `defineSearchProvider` / `defineVectorStoreAdapter`
57
64
  - `defineCommandOverride` / `defineParserOverride` / `definePreflightOverride` / `defineServiceOverride` / `defineRendererOverride`
58
65
  - `defineImporter` / `defineExporter`
59
66
  - `defineBeforeCommandHook` / `defineAfterCommandHook` / `defineOnWriteHook` / `defineOnReadHook` / `defineOnIndexHook`
60
67
 
68
+ Project profiles:
69
+
70
+ - `defineProjectProfile` / `BUILTIN_PROFILES` / `PROFILE_NAMES` / `resolveProfile` / `listProfiles` / `normalizeProfileName`
71
+ - `describeProjectProfile` (pure composition summary — per-dimension counts plus resolved entry identifiers; the project-profile analogue of `describeExtensionBlueprint`) and `describeProfileComposition`
72
+ - `lintProjectProfile` (pure, tracker-independent author-time consistency check that grades findings `error`/`warning` across every dimension — invalid/duplicate types, statuses, fields; workflows governing undeclared types or referencing undeclared statuses; unknown/invalid config knobs; templates creating undeclared types; empty package specs) and its `ProjectProfileLintReport` / `ProjectProfileLintFinding` types
73
+ - `assertProjectProfile` (the throwing test counterpart: fails on any `error` finding, or on warnings too with `{ strict: true }` — the profile analogue of `assertExtensionBlueprint`)
74
+ - `planProfileApplication` (pure, idempotent diff of a profile against the current tracker state) and its `ProfileApplicationPlan` / `ProfileCurrentState` types
75
+ - The bundled [pm-kanban exemplar](../packages/pm-kanban/README.md) ships a complete archetype as an installable package: it registers the live schema (`Card` type + flow fields) and exports a `ProjectProfileDefinition` the planner can stage, all on public SDK primitives.
76
+
77
+ Author-time lifecycle: `defineProjectProfile` → `lintProjectProfile` / `assertProjectProfile` (validate before registering) → `api.registerProfile` → `describeProjectProfile` / `planProfileApplication` (preview) → `pm profile apply`. Validate a profile in a package test before it ships:
78
+
79
+ ```ts
80
+ import { assertProjectProfile } from "@unbrained/pm-cli/sdk/testing";
81
+
82
+ assertProjectProfile(kanbanProfile); // throws on any error finding
83
+ ```
84
+
61
85
  Package manifest exports:
62
86
 
63
87
  - `PM_PACKAGE_RESOURCE_KINDS` (`extensions`, `docs`, `examples`, `assets`, `prompts`)
@@ -113,12 +137,17 @@ Testing helper exports (also under `@unbrained/pm-cli/sdk/testing`):
113
137
  - `assertRegisteredVectorStoreAdapter`
114
138
  - `assertRegisteredItemField`
115
139
  - `assertRegisteredItemType`
140
+ - `assertRegisteredProfile`
116
141
  - `assertRegisteredServiceOverride`
117
142
  - `assertRegisteredMigration`
118
143
  - `assertExtensionCapabilityUsage`
119
144
  - `assertExtensionBlueprint` (throwing preflight; pairs with `lintExtensionBlueprint`)
145
+ - `assertExtensionManifestMatchesBlueprint` (strict manifest↔blueprint capability guard)
146
+ - `assertExtensionManifestCompatible` (throwing version-bound guard; pairs with `checkExtensionManifestCompatibility`)
147
+ - `assertExtensionPreflight` (one-line throwing capstone over `preflightExtension`; replaces chaining the three asserts above)
120
148
  - `describeExtensionActivation`
121
149
  - `describeExtensionBlueprint` / `lintExtensionBlueprint` (also surfaced here for the full author → describe → preflight → test loop)
150
+ - `renderExtensionSurfaceMarkdown` (render the describe summary to a drift-free Markdown reference; powers `describe --markdown`)
122
151
 
123
152
  `createExtensionTestHarness(module, options)` is the recommended entry point and
124
153
  the ergonomic capstone over every standalone helper below: it activates the
@@ -129,8 +158,13 @@ never threads `activation.registrations` vs `activation.commands` vs
129
158
  surfaces as a confusing `available: (none)` error. Write
130
159
  `const ext = await createExtensionTestHarness(module, { capabilities: ["commands"] })`,
131
160
  then `ext.assertCommandContract({ command })`, `await ext.runCommand({ command })`,
132
- and `await ext.deactivate()`. The methods do not use `this`, so they remain safe
133
- to destructure (`const { runCommand } = ext;`), and the raw `ext.activation`
161
+ `ext.activationSummary()`, `ext.renderMarkdown({ title: "My package" })`, and
162
+ `await ext.deactivate()`. `activationSummary()` returns the same
163
+ `ExtensionActivationSummary` as `describeExtensionActivation(ext.activation)`;
164
+ `renderMarkdown()` feeds that summary through `renderExtensionSurfaceMarkdown`,
165
+ with an optional `extensionName` filter for scoped package docs. The methods do
166
+ not use `this`, so they remain safe to destructure
167
+ (`const { runCommand, renderMarkdown } = ext;`), and the raw `ext.activation`
134
168
  stays public as an escape hatch to the standalone helpers for any surface a
135
169
  convenience method does not cover.
136
170
 
@@ -281,6 +315,33 @@ to "what does this installed package add to my context?" — distinct from
281
315
  `pm package doctor` (errors/policy) and `pm package manage` (update metadata), which
282
316
  report only command/action paths, not the full registration surface.
283
317
 
318
+ `renderExtensionSurfaceMarkdown(summary, options?)` is the **render** leg of the
319
+ describe verb: it projects any `ExtensionActivationSummary` to a deterministic
320
+ Markdown reference document — a title heading, a one-line capabilities summary,
321
+ and a section per registered surface. Pipe `describeExtensionBlueprint(blueprint)`
322
+ straight into it during a build or test step and embed the result in your
323
+ README, and the "commands & capabilities" reference can never drift from the
324
+ surface the loader actually registers ("project management = context
325
+ management"). `options.title` / `options.headingLevel` (an integer in `[1, 6]`,
326
+ default `2`; section headings render one level deeper) control nesting, and
327
+ `options.includeEmpty` renders every section (as `_None._`) rather than omitting
328
+ empty ones.
329
+
330
+ ```ts
331
+ import { describeExtensionBlueprint, renderExtensionSurfaceMarkdown } from "@unbrained/pm-cli/sdk";
332
+
333
+ const reference = renderExtensionSurfaceMarkdown(describeExtensionBlueprint(blueprint), { title: "my-pkg", headingLevel: 2 });
334
+ // → "## my-pkg\n\nCapabilities: `commands`, `schema`\n\n### Commands\n\n- `greet hello`\n…"
335
+ ```
336
+
337
+ The same renderer powers `pm extension describe --markdown` / `pm package
338
+ describe --markdown`, which compose a per-extension section plus a union section
339
+ across every loaded extension. Add `--output docs/package-reference.md` to write
340
+ the generated Markdown directly to a file for README/reference-doc refreshes.
341
+ `--markdown` is a presentation format (it cannot be combined with `--json`);
342
+ MCP `describe` keeps returning the structured summary, which a caller can hand to
343
+ `renderExtensionSurfaceMarkdown` itself.
344
+
284
345
  Commander option contract exports:
285
346
 
286
347
  - `CREATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS`
@@ -405,6 +466,8 @@ const ext = await createExtensionTestHarness(extensionModule, { capabilities: ["
405
466
  ext.assertCommandContract({ command: "incident triage", flags: ["--severity"] });
406
467
  ext.assertFlags({ targetCommand: "list", flags: ["--incident-filter"] });
407
468
  const { result } = await ext.runCommand({ command: "incident triage", options: { severity: "high" } });
469
+ const summary = ext.activationSummary();
470
+ const reference = ext.renderMarkdown({ title: "incident package surfaces" });
408
471
  await ext.deactivate();
409
472
  ```
410
473
 
@@ -420,6 +483,7 @@ For provider-safe schemas, use `PM_PROVIDER_TOOL_PARAMETERS_SCHEMA`. It is flat
420
483
  | `registerItemFields` | `schema` |
421
484
  | `registerItemTypes` | `schema` |
422
485
  | `registerMigration` | `schema` |
486
+ | `registerProfile` | `schema` |
423
487
  | `registerImporter` | `importers` |
424
488
  | `registerExporter` | `importers` |
425
489
  | `registerParser` | `parser` |
@@ -470,7 +534,7 @@ Manifest:
470
534
  {
471
535
  "name": "hello",
472
536
  "version": "0.1.0",
473
- "entry": "./index.js",
537
+ "entry": "./index.ts",
474
538
  "pm_min_version": "2026.5.31",
475
539
  "trusted": true,
476
540
  "sandbox_profile": "strict",
@@ -494,7 +558,7 @@ Manifest typing also accepts optional `engines` metadata:
494
558
  {
495
559
  "engines": {
496
560
  "pm": ">=2026.5.31",
497
- "node": ">=20"
561
+ "node": ">=22.18"
498
562
  }
499
563
  }
500
564
  ```
@@ -519,7 +583,59 @@ scaffold paired import/export commands with example flag metadata and a runnable
519
583
  `node:test` file that exercises `assertRegisteredImporter`,
520
584
  `assertRegisteredExporter`, `runRegisteredImporterForTest`, and
521
585
  `runRegisteredExporterForTest`; the generated manifest declares both `importers`
522
- and `schema` because extension flag metadata is schema-governed.
586
+ and `schema` because extension flag metadata is schema-governed. Pass
587
+ `--capability schema` to scaffold a command plus a custom item type, item field,
588
+ and migration (via `registerItemTypes`/`registerItemFields`/`registerMigration`)
589
+ and a runnable `node:test` file that exercises `assertRegisteredItemType`,
590
+ `assertRegisteredItemField`, `assertRegisteredMigration`, and
591
+ `runRegisteredMigrationForTest` — a copyable starting point for modeling a
592
+ project domain. Pass `--capability profile` to scaffold a command plus a complete
593
+ project-profile archetype (item types, statuses, fields, a per-type workflow,
594
+ config, a create template, and package recommendations via `registerProfile`) and
595
+ a `node:test` file exercising the harness-bound `assertProfile` (the public
596
+ `assertRegisteredProfile`); it omits
597
+ `activation.commands` (granted by the same `schema` capability) so the contributed
598
+ profile resolves through `pm profile list/show/apply` and `pm profile apply <name>`
599
+ tailors a fresh tracker in one shot — the broadest customization primitive in one
600
+ copyable starter.
601
+
602
+ The four override surfaces complete the matrix to one starter per SDK
603
+ registration capability. Pass `--capability renderers` to scaffold a `toon`
604
+ output renderer override (via `registerRenderer`, scoped to its own command so
605
+ other output passes through) with a `node:test` file exercising
606
+ `assertRegisteredRendererOverride` and `runRegisteredRendererOverrideForTest`;
607
+ `--capability parser` for a parser override (via `registerParser`) that rewrites
608
+ the command's parsed options — the starter command declares matching
609
+ `--shout`/`--upper` flags (so the manifest also declares `schema`) and surfaces
610
+ the normalized value, making the override runnable through `pm <command> --shout`
611
+ — exercising `assertRegisteredParserOverride` and
612
+ `runRegisteredParserOverrideForTest`; `--capability preflight` for a preflight
613
+ override (via `registerPreflight`) over pm's pre-run migration/format gate
614
+ decision, exercising `assertRegisteredPreflightOverride` and
615
+ `runRegisteredPreflightOverrideForTest`; and `--capability services` for an
616
+ `output_format` service override (via `registerService`, scoped to its own
617
+ command), exercising `assertRegisteredServiceOverride` and
618
+ `runRegisteredServiceOverrideForTest`.
619
+
620
+ Every command-bearing variant's generated `manifest.json` also declares
621
+ `activation.commands` — the exact command paths the starter registers — so pm
622
+ activates the package lazily, importing and running `activate` only when an
623
+ invoked command matches. This mirrors every first-party bundled package and is
624
+ the contract authors keep in sync with their registrations: an omitted or stale
625
+ entry means the matching command will not dispatch from the CLI (globally-scoped
626
+ surfaces such as hooks and search providers for built-in search commands still
627
+ activate regardless). The `schema` starter is the deliberate exception: it omits
628
+ `activation.commands` so its custom item type — a global contribution that
629
+ built-in commands like `pm create <type>` must see — activates conservatively for
630
+ every command rather than gating on the package's own commands.
631
+
632
+ Each `--capability` starter authors an imperative `activate` body. To scaffold the
633
+ declarative `composeExtension` form instead, pass `--declarative` to
634
+ `pm package init` / `pm package scaffold` (it is an init/scaffold flag, package-mode
635
+ only — every `--capability` variant emits its blueprint form, since `composeExtension`
636
+ is a runtime SDK value import that only package-mode authoring links) — see
637
+ [Declarative Authoring](#declarative-authoring). See [EXTENSIONS.md](EXTENSIONS.md)
638
+ for the manifest-field reference.
523
639
 
524
640
  ## Self-Identity and Lifecycle
525
641
 
@@ -637,17 +753,20 @@ argument unchanged), exactly like `defineExtension` and the wider
637
753
  `defineConfig`/`defineComponent` ecosystem convention — the value is entirely at
638
754
  the type level.
639
755
 
640
- This matters most in **plain-JavaScript packages** (the default `pm package init`
641
- scaffold). A bare `const cmd = { ... }` is unchecked because JS has no type
642
- annotations; wrapping it in a builder restores full contract checking and infers
643
- the nested handler's `context` parameter through the editor's TypeScript language
644
- service. It also lets you colocate, export, reuse, and unit-test a definition
756
+ pm packages are authored **and loaded** as TypeScript (ADR
757
+ [pm-2c28](../.agents/pm/decisions/pm-2c28.toon) / [pm-m1uz](../.agents/pm/decisions/pm-m1uz.toon)). A bare `const cmd = { ... }`
758
+ satisfies the registration types only structurally and widens its literals;
759
+ wrapping it in a builder checks the object against the contract *and* preserves
760
+ the narrow literal types, while inferring the nested handler's `context`
761
+ parameter from the builder signature — the same ergonomics `defineConfig` gives a
762
+ Vite config. It also lets you colocate, export, reuse, and unit-test a definition
645
763
  apart from `activate`:
646
764
 
647
- ```js
765
+ ```ts
648
766
  import { defineCommand, defineAfterCommandHook } from "@unbrained/pm-cli/sdk";
767
+ import type { ExtensionApi } from "@unbrained/pm-cli/sdk";
649
768
 
650
- // `context` is inferred even though this is a .js file with no annotations.
769
+ // `context` is inferred from the builder signature; the literal name/action are preserved.
651
770
  export const greetCommand = defineCommand({
652
771
  name: "greet hello",
653
772
  action: "greet-hello",
@@ -660,7 +779,7 @@ export const auditHook = defineAfterCommandHook((context) => {
660
779
  // react to context.affected — "project management = context management"
661
780
  });
662
781
 
663
- export function activate(api) {
782
+ export function activate(api: ExtensionApi): void {
664
783
  api.registerCommand(greetCommand);
665
784
  api.hooks.afterCommand(auditHook);
666
785
  }
@@ -693,8 +812,9 @@ SDK generate the `activate` for you. Every field is optional; populate the
693
812
  surfaces you use (ideally with `define*`-authored definitions) and leave the rest
694
813
  out:
695
814
 
696
- ```js
815
+ ```ts
697
816
  import { composeExtension, defineCommand, deriveExtensionCapabilities } from "@unbrained/pm-cli/sdk";
817
+ import type { ExtensionBlueprint } from "@unbrained/pm-cli/sdk";
698
818
 
699
819
  const echo = defineCommand({
700
820
  name: "command-kit echo",
@@ -703,7 +823,7 @@ const echo = defineCommand({
703
823
  run: (context) => ({ message: context.args.join(" ") }),
704
824
  });
705
825
 
706
- const blueprint = {
826
+ const blueprint: ExtensionBlueprint = {
707
827
  commands: [echo],
708
828
  parsers: { "command-kit echo": (context) => ({ options: context.options }) },
709
829
  flags: { list: [{ long: "--kit-note", value_type: "string", value_name: "text" }] },
@@ -724,7 +844,7 @@ drift. It is the author-time inverse of the runtime
724
844
  it returns is the set `composeExtension`'s generated `activate` requires — they
725
845
  agree by construction:
726
846
 
727
- ```js
847
+ ```ts
728
848
  deriveExtensionCapabilities(blueprint); // ["commands", "parser", "schema"]
729
849
  ```
730
850
 
@@ -738,6 +858,124 @@ malformed definition surfaces the same activation diagnostic as a hand-written
738
858
  hand-written `activate` bodies so they load in extension-only installs; reach for
739
859
  `composeExtension` in npm package-mode authoring where the SDK is a dependency.
740
860
 
861
+ For a generated starting point, `pm package init <path> --declarative` scaffolds
862
+ this loop end to end for any `--capability`: an `index.ts` that authors a
863
+ `defineExtensionBlueprint` blueprint (the capability's surfaces wired through the
864
+ `define*` builders) and exports `composeExtension(blueprint)`, plus an
865
+ `index.test.ts` that guards it with the author-time `assertExtensionPreflight`
866
+ capstone and exercises the composed module through `createExtensionTestHarness`. It
867
+ is package-mode only (`composeExtension` is a runtime SDK value import, so it belongs
868
+ in package-mode authoring where the SDK is a linked dependency, not the import-free
869
+ extension-only starters).
870
+
871
+ ### Modular blueprints
872
+
873
+ Tracked: [pm-high](../.agents/pm/tasks/pm-high.toon),
874
+ [pm-nvgy](../.agents/pm/tasks/pm-nvgy.toon).
875
+
876
+ A large extension's surface does not have to live in one object. `mergeExtensionBlueprints(...blueprints)`
877
+ combines several partial blueprints into one — a commands module, a search module,
878
+ a hooks module — so each concern is authored (and tested) in its own file and
879
+ assembled at the entry point. Wrap each fragment in `defineExtensionBlueprint(...)`
880
+ so it is contract-checked at its own definition site (with editor completion) —
881
+ the blueprint-level companion to `defineExtension` (a whole module) and
882
+ `defineExtensionManifest` (a manifest):
883
+
884
+ ```ts
885
+ // commands.ts
886
+ import { defineExtensionBlueprint } from "@unbrained/pm-cli/sdk";
887
+ export const commandsModule = defineExtensionBlueprint({
888
+ commands: [{ name: "kit run", action: "kit-run", run: () => ({ ok: true }) }],
889
+ });
890
+ ```
891
+
892
+ ```ts
893
+ // index.ts — the manifest entry; import sibling .ts modules by their real extension (loaded directly via native type stripping).
894
+ import { composeExtension, mergeExtensionBlueprints } from "@unbrained/pm-cli/sdk";
895
+ import { commandsModule } from "./commands.ts";
896
+ import { searchModule } from "./search.ts";
897
+
898
+ export default composeExtension(mergeExtensionBlueprints(commandsModule, searchModule));
899
+ ```
900
+
901
+ The merge is pure, deterministic, and never mutates an input. Each surface combines
902
+ the way its `api.register*` call composes: array surfaces (`commands`, `itemTypes`,
903
+ `migrations`, `searchProviders`, `importers`, …) concatenate in order; `flags`
904
+ concatenates the flag arrays of a shared target command; single-handler records
905
+ (`commandOverrides`, `parsers`, `renderers`, `services`) take last-defined-wins
906
+ precedence on a key collision; `hooks` concatenate per lifecycle kind; imperative
907
+ `activate` hatches chain forward (acquisition order) while `deactivate` hooks chain
908
+ in reverse (LIFO teardown); the `manifest` mirror is last-defined-wins. Because the
909
+ result is an ordinary blueprint, every downstream helper (`deriveExtensionCapabilities`,
910
+ `describeExtensionBlueprint`, `lintExtensionBlueprint`, `preflightExtension`) reads it
911
+ exactly as it would a hand-written one — a command two modules both define survives
912
+ as a duplicate and `lintExtensionBlueprint` flags it. Merging zero blueprints returns
913
+ an empty blueprint (`{}`).
914
+
915
+ ### Generate the manifest (author once)
916
+
917
+ Tracked: [pm-u5le](../.agents/pm/features/pm-u5le.toon).
918
+
919
+ `deriveExtensionCapabilities` gives you only the capability set; every other
920
+ manifest field is still yours to hand-write. `synthesizeExtensionManifest(blueprint, identity)`
921
+ closes that gap — it is the **generate** verb that completes the declarative loop
922
+ (`compose → derive → describe/lint → synthesize`). Supply the identity fields a
923
+ blueprint cannot determine (`name`, `version`, `entry`, `priority`, plus any
924
+ optional `engines`/`permissions`/version floors/etc.) and it returns a complete
925
+ `ExtensionManifest` with `capabilities` derived, sorted, and de-duplicated. Write
926
+ the blueprint once; never hand-sync `capabilities` again:
927
+
928
+ ```ts
929
+ import { synthesizeExtensionManifest } from "@unbrained/pm-cli/sdk";
930
+
931
+ const manifest = synthesizeExtensionManifest(blueprint, {
932
+ name: "command-kit",
933
+ version: "1.0.0",
934
+ entry: "./index.ts",
935
+ priority: 0,
936
+ });
937
+ manifest.capabilities; // ["commands", "parser", "schema"] — derived, not hand-written
938
+ ```
939
+
940
+ Where `defineExtensionManifest` only *types* a manifest you wrote by hand, this
941
+ *generates* it. For the rare surface registered through the imperative `activate`
942
+ escape hatch (invisible to static derivation — e.g. a renderer wired in
943
+ `activate`), pass `additionalCapabilities` and they are unioned in (legacy-alias
944
+ resolved, unknown names dropped). Use the result as the on-disk `manifest.json`
945
+ content or the in-module `manifest` mirror; guard a hand-maintained manifest
946
+ against drift with `assertExtensionManifestMatchesBlueprint` (below).
947
+
948
+ ### Ship both halves (author once)
949
+
950
+ Tracked: [pm-cn0c](../.agents/pm/tasks/pm-cn0c.toon).
951
+
952
+ `composeExtension` produces the runtime module; `synthesizeExtensionManifest`
953
+ produces the manifest. `composeExtensionPackage(blueprint, identity)` is the
954
+ author-once capstone that returns both halves of a shippable package from one call,
955
+ with the synthesized manifest set as the module's authoritative in-module mirror —
956
+ so the runtime module and the on-disk `manifest.json` are generated from one source
957
+ and cannot drift:
958
+
959
+ ```ts
960
+ import { composeExtensionPackage } from "@unbrained/pm-cli/sdk";
961
+
962
+ const { module, manifest } = composeExtensionPackage(blueprint, {
963
+ name: "command-kit",
964
+ version: "1.0.0",
965
+ entry: "./index.ts",
966
+ priority: 0,
967
+ });
968
+ export default module; // the package entry's default export
969
+ // write `manifest` verbatim as manifest.json — capabilities derived, never hand-synced
970
+ ```
971
+
972
+ It is a pure assembler (no validation, loading, or filesystem access), exactly like
973
+ the two functions it composes; pair it with `preflightExtension` /
974
+ `assertExtensionPreflight` for the author-time verify step. Combined with
975
+ `mergeExtensionBlueprints`, the full declarative loop is: author each concern with
976
+ `define*`, assemble them modularly with `mergeExtensionBlueprints`, then ship both
977
+ halves with `composeExtensionPackage`.
978
+
741
979
  ### Author-time introspection and preflight
742
980
 
743
981
  Tracked: [pm-tlpv](../.agents/pm/features/pm-tlpv.toon),
@@ -749,7 +987,7 @@ inspectable and verifiable before it is ever loaded — the author-time inverse
749
987
  the runtime guardrails (the same discipline as `deriveExtensionCapabilities`
750
988
  inverting [`reconcileExtensionCapabilityUsage`](#capability-requirements)):
751
989
 
752
- ```js
990
+ ```ts
753
991
  import { describeExtensionBlueprint, lintExtensionBlueprint } from "@unbrained/pm-cli/sdk";
754
992
 
755
993
  // describeExtensionBlueprint returns the same ExtensionActivationSummary shape as
@@ -793,7 +1031,7 @@ const activation = await activateExtensionForTest({
793
1031
  manifest: {
794
1032
  name: "hello-ext",
795
1033
  version: "0.1.0",
796
- entry: "./index.js",
1034
+ entry: "./index.ts",
797
1035
  priority: 0,
798
1036
  capabilities: ["commands", "schema"],
799
1037
  },
@@ -836,6 +1074,86 @@ import { assertExtensionBlueprint } from "@unbrained/pm-cli/sdk/testing";
836
1074
  const report = assertExtensionBlueprint(blueprint);
837
1075
  ```
838
1076
 
1077
+ `assertExtensionManifestMatchesBlueprint(manifest, blueprint)` is the **strict**
1078
+ bookend to that lenient preflight: where `assertExtensionBlueprint` only fails on
1079
+ an *undeclared* capability and merely warns on an unused one, this assertion fails
1080
+ on **both** — so a hand-maintained `manifest.json` stays exactly the least-privilege
1081
+ set the blueprint requires (assert what `synthesizeExtensionManifest` would
1082
+ otherwise generate). Only `capabilities` are reconciled, since that is the one
1083
+ manifest field a blueprint determines:
1084
+
1085
+ ```ts
1086
+ import { assertExtensionManifestMatchesBlueprint } from "@unbrained/pm-cli/sdk/testing";
1087
+
1088
+ // Throws if manifest.capabilities is missing any capability the blueprint uses, or
1089
+ // declares any the blueprint never exercises. Returns { used, declared, missing,
1090
+ // unused, findings } on an exact match.
1091
+ assertExtensionManifestMatchesBlueprint(manifest, blueprint);
1092
+ ```
1093
+
1094
+ Where the blueprint guards `capabilities`, a manifest's `pm_min_version` /
1095
+ `pm_max_version` bounds guard *which pm CLI versions the package supports*.
1096
+ Tracker references: `pm-knma` introduced `checkExtensionManifestCompatibility`;
1097
+ `pm-hng2` introduced `assertExtensionManifestCompatible`.
1098
+ `checkExtensionManifestCompatibility(manifest, { pmVersion, pmMaxVersionExceededMode? })`
1099
+ is the author-time inverse of the loader's runtime version gate: it takes the pm
1100
+ version you target and returns structured per-bound findings (the same
1101
+ `extension_pm_*_version_*` outcomes the loader emits), so you can verify the window
1102
+ without installing the package against a real CLI. `assertExtensionManifestCompatible`
1103
+ is the throwing CI guard — it fails on a blocking incompatibility (a malformed
1104
+ bound, a `pm_min_version` the target is below, or a `block`-mode `pm_max_version`
1105
+ the target exceeds) and stays quiet on advisory `*_unchecked` / `*_exceeded_warn`
1106
+ warnings, which still load:
1107
+
1108
+ ```ts
1109
+ import { checkExtensionManifestCompatibility } from "@unbrained/pm-cli/sdk";
1110
+ import { assertExtensionManifestCompatible } from "@unbrained/pm-cli/sdk/testing";
1111
+
1112
+ // Inspect every bound outcome against a target version…
1113
+ const report = checkExtensionManifestCompatibility(manifest, { pmVersion: "2026.6.23" });
1114
+ // report.compatible === false, report.findings[0].code === "pm_min_version_unmet", …
1115
+
1116
+ // …or fail the package's own suite when a bound would block the load.
1117
+ assertExtensionManifestCompatible(manifest, { pmVersion: "2026.6.23" });
1118
+ ```
1119
+
1120
+ Tracked: [pm-ozaf](../.agents/pm/features/pm-ozaf.toon).
1121
+
1122
+ `preflightExtension(blueprint, { identity?, target?, declaredCapabilities? })` is the
1123
+ author-time **capstone** that runs all of the above in one call — the static analog
1124
+ of `createExtensionTestHarness`, which unified the runtime-test helpers. Rather than
1125
+ chaining `lintExtensionBlueprint`, `synthesizeExtensionManifest`, and
1126
+ `checkExtensionManifestCompatibility` (and reconciling their separate results)
1127
+ before publishing, you read one `ExtensionPreflightReport`: the blueprint is always
1128
+ linted; when `identity` is given the complete least-privilege manifest is synthesized
1129
+ and returned; when `target` is given the synthesized bounds (or, absent an identity,
1130
+ the blueprint's in-module `manifest` mirror) are version-checked. The per-stage
1131
+ results are exposed unmodified (`report.blueprint` / `report.manifest` /
1132
+ `report.compatibility`) alongside a flattened `report.findings` where each entry is
1133
+ tagged by `source` (`"blueprint"` | `"compatibility"`); `report.ok` is `false` if any
1134
+ stage produced an `error`. `assertExtensionPreflight(blueprint, options?)` is the
1135
+ throwing one-line CI guard over it — it fails listing every blocking finding tagged
1136
+ `[source:code]` and stays quiet on advisory warnings, returning the full report on
1137
+ success:
1138
+
1139
+ ```ts
1140
+ import { preflightExtension } from "@unbrained/pm-cli/sdk";
1141
+ import { assertExtensionPreflight } from "@unbrained/pm-cli/sdk/testing";
1142
+
1143
+ // Inspect every author-time stage in one report…
1144
+ const report = preflightExtension(blueprint, {
1145
+ identity: { name: "command-kit", version: "1.0.0", entry: "./index.ts", priority: 0 },
1146
+ target: { pmVersion: "2026.6.23" },
1147
+ });
1148
+ // report.manifest.capabilities (derived), report.compatibility.compatible, report.findings[]
1149
+
1150
+ // …or guard the whole package in one CI line.
1151
+ assertExtensionPreflight(blueprint, {
1152
+ identity: { name: "command-kit", version: "1.0.0", entry: "./index.ts", priority: 0 },
1153
+ target: { pmVersion: "2026.6.23" },
1154
+ });
1155
+ ```
1156
+
839
1157
  Invoke a registered command handler to assert its behavior (not just that it was
840
1158
  registered). `runRegisteredCommandForTest` dispatches through pm's real engine and
841
1159
  returns the `CommandHandlerResult`:
@@ -1034,9 +1352,58 @@ const migration = assertRegisteredMigration(activation.registrations, {
1034
1352
  // migration.definition is the normalized SchemaMigrationDefinition
1035
1353
  ```
1036
1354
 
1355
+ ### Project profiles (`registerProfile`)
1356
+
1357
+ Tracked: [pm-08sv](../.agents/pm/features/pm-08sv.toon).
1358
+
1359
+ A **project profile** is the broadest customization primitive a package can ship:
1360
+ one declarative `ProjectProfileDefinition` that bundles item types, custom
1361
+ statuses, fields, per-type workflows, config knobs, create templates, and package
1362
+ recommendations into a single archetype `pm profile apply` stages idempotently.
1363
+ The three core archetypes (`agile`/`ops`/`research`) are baked in; a package adds
1364
+ its own with `api.registerProfile(profile)` under the `schema` capability:
1365
+
1366
+ ```ts
1367
+ import { defineProjectProfile, type ExtensionApi } from "@unbrained/pm-cli/sdk";
1368
+
1369
+ export const kanbanProfile = defineProjectProfile({
1370
+ name: "kanban",
1371
+ title: "Kanban continuous flow",
1372
+ summary: "WIP-limited flow with a verifying stage.",
1373
+ types: [{ name: "Card", folder: "cards" }],
1374
+ statuses: [{ id: "doing", roles: ["active"] }],
1375
+ fields: [{ key: "wip_limit", type: "number", commands: ["create", "update"] }],
1376
+ workflows: [{ type: "Card", allowed_transitions: [["open", "doing"]] }],
1377
+ config: [{ key: "search_provider", value: "bm25", summary: "Offline lexical search." }],
1378
+ templates: [{ name: "card", options: { type: "Card" } }],
1379
+ packages: [{ spec: "templates", reason: "Reusable card shapes." }],
1380
+ });
1381
+
1382
+ export function activate(api: ExtensionApi): void {
1383
+ api.registerProfile(kanbanProfile);
1384
+ }
1385
+ ```
1386
+
1387
+ Once the package is active, the profile resolves by name through `pm profile list`
1388
+ (labelled with its source package), `pm profile show <name>`, and
1389
+ `pm profile apply <name>` — exactly like a core archetype, with no consumer code.
1390
+ Built-in names are reserved: a registered profile that collides with a core name
1391
+ (or another package's profile) is ignored with a warning rather than shadowing it.
1392
+ Profiles flow through the declarative loop too — `composeExtension({ profiles: [...] })`
1393
+ auto-wires `registerProfile`, and `deriveExtensionCapabilities` maps a `profiles`
1394
+ surface to `schema`. Prove a profile registered with `assertRegisteredProfile`:
1395
+
1396
+ ```ts
1397
+ import { assertRegisteredProfile } from "@unbrained/pm-cli/sdk/testing";
1398
+
1399
+ const { profile } = assertRegisteredProfile(activation.registrations, { profile: "kanban" });
1400
+ // profile is the normalized ProjectProfileDefinition
1401
+ ```
1402
+
1037
1403
  Together these complete the SDK assertion surface: every extension `register*`
1038
- method now has a matching `assertRegistered*` helper, so packages can prove any
1039
- registration without importing private registry internals.
1404
+ method (including `registerProfile`) now has a matching `assertRegistered*`
1405
+ helper, so packages can prove any registration without importing private registry
1406
+ internals.
1040
1407
 
1041
1408
  The three executable registration surfaces add `runRegistered*ForTest` invoke
1042
1409
  helpers on top of those assertions, so a package can exercise the real behavior of
package/docs/TESTING.md CHANGED
@@ -20,6 +20,7 @@ Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon).
20
20
 
21
21
  ```bash
22
22
  pnpm build
23
+ pnpm lint
23
24
  pnpm typecheck
24
25
  node scripts/run-tests.mjs test
25
26
  node scripts/run-tests.mjs coverage
@@ -27,6 +28,17 @@ node scripts/run-tests.mjs coverage
27
28
 
28
29
  `node scripts/run-tests.mjs` wraps Vitest in temporary tracker roots, then cleans them up.
29
30
 
31
+ `pnpm lint` is the local CodeFactor parity check. It layers ESLint rules for
32
+ shipped source, package, plugin, and script surfaces that match the CodeFactor
33
+ maintainability findings this repo tracks (`complexity`,
34
+ `no-unsafe-optional-chaining`, and the relevant `eslint-plugin-unicorn`
35
+ mechanical rules), jscpd duplicate detection across source and tests, and the
36
+ repo-specific `quality:static` gate. The dedicated `quality:static` gate remains
37
+ authoritative for source/exported docstring coverage, orphan-module checks,
38
+ directory-load caps, and the TypeScript-aware duplicate/complexity checks that
39
+ are tailored to pm's source layout; `pnpm lint` delegates to it instead of
40
+ running a second threshold profile.
41
+
30
42
  ## Focused Test Runs
31
43
 
32
44
  ```bash
@@ -2,6 +2,12 @@
2
2
 
3
3
  This example demonstrates governance policy behavior with real registrations.
4
4
 
5
+ It is authored **and loaded** as TypeScript (ADR pm-2c28 / pm-m1uz): `index.ts` is
6
+ both the source and the manifest `entry`, imported directly via Node's native type
7
+ stripping — there is no compile step and no committed `index.js`. Edit `index.ts`
8
+ and the change takes effect on the next install/reload; run `npx tsc --noEmit` to
9
+ type-check.
10
+
5
11
  The extension declares:
6
12
 
7
13
  - `commands` (handler registration)
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @module docs/examples/policy-restricted-extension
3
+ *
4
+ * Minimal TypeScript-first reference extension for governance-policy demos. It
5
+ * registers exactly three surfaces — a command handler, a `beforeCommand` hook,
6
+ * and an `output_format` service override — so an operator can enforce policy
7
+ * that keeps the command and hook allowed while blocking the service override
8
+ * (see the accompanying README).
9
+ *
10
+ * As with the starter example, the source is authored in TypeScript against the
11
+ * published SDK types and is itself the `./index.ts` manifest entry the loader
12
+ * imports directly via Node's native type stripping (ADR pm-2c28 / pm-m1uz) — no
13
+ * compile step and no committed `.js`. Typing `activate(api: ExtensionApi)` is
14
+ * enough for the service override's `context` parameter to be inferred as a
15
+ * `ServiceOverrideContext`, which is why this handler returns `context.payload`
16
+ * (the value to format) rather than the whole context object.
17
+ */
18
+ import { defineExtension } from "@unbrained/pm-cli/sdk";
19
+ import type { ExtensionApi } from "@unbrained/pm-cli/sdk";
20
+
21
+ export default defineExtension({
22
+ activate(api: ExtensionApi): void {
23
+ api.registerCommand({
24
+ name: "policy demo",
25
+ action: "policy-demo",
26
+ description: "Emit a deterministic payload to validate policy-gated activation.",
27
+ run: async (context) => ({
28
+ ok: true,
29
+ command: context.command,
30
+ source: "policy-restricted-extension",
31
+ }),
32
+ });
33
+
34
+ api.hooks.beforeCommand(() => {});
35
+
36
+ // This registration is intentionally useful for policy demos: an identity
37
+ // output_format override that returns the formatting payload unchanged.
38
+ api.registerService("output_format", (context) => context.payload);
39
+ },
40
+ });
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "policy-restricted-extension",
3
3
  "version": "0.1.0",
4
- "entry": "./index.js",
4
+ "entry": "./index.ts",
5
5
  "manifest_version": 2,
6
- "pm_min_version": "2026.5.0",
6
+ "pm_min_version": "2026.6.24",
7
7
  "trusted": true,
8
8
  "provenance": {
9
9
  "source": "docs/examples/policy-restricted-extension",