@unbrained/pm-cli 2026.6.24 → 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 (712) hide show
  1. package/CHANGELOG.md +93 -1
  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 +1891 -205
  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 +186 -17
  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-N7RVTLBQ.js → activity-MVSEND6D.js} +9 -11
  95. package/dist/cli-bundle/chunks/{aggregate-63NWNIBR.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-YHCYX2EV.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-PUKREFV5.js → append-KDHT4GHI.js} +10 -12
  100. package/dist/cli-bundle/chunks/{append-PUKREFV5.js.map → append-KDHT4GHI.js.map} +1 -1
  101. package/dist/cli-bundle/chunks/{append-VLQQDHMJ.js → append-LEDBAM3K.js} +8 -10
  102. package/dist/cli-bundle/chunks/{append-VLQQDHMJ.js.map → append-LEDBAM3K.js.map} +1 -1
  103. package/dist/cli-bundle/chunks/{chunk-F32L4HR6.js → chunk-3JWQCLR5.js} +3 -3
  104. package/dist/cli-bundle/chunks/{chunk-YV2OSAMS.js → chunk-4TXTVZL3.js} +2 -2
  105. package/dist/cli-bundle/chunks/{chunk-AYPQUFCX.js → chunk-4YIMPANT.js} +3 -3
  106. package/dist/cli-bundle/chunks/{chunk-ALKFCIIB.js → chunk-53ARXF2O.js} +9 -11
  107. package/dist/cli-bundle/chunks/{chunk-ALKFCIIB.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-OF7V47P3.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-XXKV4UWE.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-SMXSDY7J.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-RAWA3Y7O.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-EOGBMLCE.js → chunk-73PTKMAE.js} +3 -3
  119. package/dist/cli-bundle/chunks/{chunk-GQYJEEFX.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-JV27C7OZ.js → chunk-7L6TXOOC.js} +4 -6
  122. package/dist/cli-bundle/chunks/{chunk-JV27C7OZ.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-2WCYE3IF.js → chunk-7RIJGN4R.js} +2 -2
  126. package/dist/cli-bundle/chunks/{chunk-JKL6HRMV.js → chunk-7WDETKGP.js} +191 -117
  127. package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-HBAEFWX3.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-6EBNFQOR.js → chunk-AWN4PPH5.js} +10 -14
  131. package/dist/cli-bundle/chunks/{chunk-6EBNFQOR.js.map → chunk-AWN4PPH5.js.map} +1 -1
  132. package/dist/cli-bundle/chunks/{chunk-CZIFFMZI.js → chunk-BN3CWK6G.js} +2 -2
  133. package/dist/cli-bundle/chunks/{chunk-SUREE24M.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-J3NMWFIN.js → chunk-C2KCIZKZ.js} +2 -2
  136. package/dist/cli-bundle/chunks/{chunk-TIM4OD74.js → chunk-CHRNYKNI.js} +2 -2
  137. package/dist/cli-bundle/chunks/{chunk-VSAABFGQ.js → chunk-CY5IJMUM.js} +1136 -419
  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-UACWNBL2.js → chunk-D5LYZVGB.js} +7 -9
  142. package/dist/cli-bundle/chunks/{chunk-UACWNBL2.js.map → chunk-D5LYZVGB.js.map} +1 -1
  143. package/dist/cli-bundle/chunks/{chunk-KIEAK7YE.js → chunk-D6USKAMA.js} +2 -2
  144. package/dist/cli-bundle/chunks/{context-5LB7UGKE.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-3BKH2CL3.js → chunk-DLDCPF5X.js} +3 -3
  147. package/dist/cli-bundle/chunks/{chunk-J7I4C5ZB.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-DTABLLVE.js → chunk-DRPF274X.js} +5 -7
  150. package/dist/cli-bundle/chunks/{chunk-DTABLLVE.js.map → chunk-DRPF274X.js.map} +2 -2
  151. package/dist/cli-bundle/chunks/{chunk-6EL7SW5C.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-CG3KP6I5.js → chunk-E2Q2ULMR.js} +4 -4
  154. package/dist/cli-bundle/chunks/{chunk-A66VYUOV.js → chunk-EVWYAG46.js} +9 -11
  155. package/dist/cli-bundle/chunks/{chunk-A66VYUOV.js.map → chunk-EVWYAG46.js.map} +1 -1
  156. package/dist/cli-bundle/chunks/{chunk-PEL2NLQE.js → chunk-F6VH3LFC.js} +2 -2
  157. package/dist/cli-bundle/chunks/{chunk-AEACLRVH.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-ABYCA5VX.js → chunk-FBZ5XAAF.js} +9 -11
  160. package/dist/cli-bundle/chunks/{chunk-ABYCA5VX.js.map → chunk-FBZ5XAAF.js.map} +1 -1
  161. package/dist/cli-bundle/chunks/{chunk-5BBEWX6C.js → chunk-FDEVKXC4.js} +2 -2
  162. package/dist/cli-bundle/chunks/{chunk-4XDGYFHL.js → chunk-GF7EAR22.js} +10 -14
  163. package/dist/cli-bundle/chunks/{chunk-4XDGYFHL.js.map → chunk-GF7EAR22.js.map} +1 -1
  164. package/dist/cli-bundle/chunks/{context-55VEOYI3.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-QOUOMPHO.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-LU36E6GU.js → chunk-IBU2LLWM.js} +8 -12
  170. package/dist/cli-bundle/chunks/{chunk-LU36E6GU.js.map → chunk-IBU2LLWM.js.map} +1 -1
  171. package/dist/cli-bundle/chunks/{chunk-MEXZ5XUM.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-VFJYVXHL.js → chunk-IF4ERU6A.js} +7 -9
  174. package/dist/cli-bundle/chunks/{chunk-VFJYVXHL.js.map → chunk-IF4ERU6A.js.map} +1 -1
  175. package/dist/cli-bundle/chunks/{chunk-KKX4Z2SE.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-F4BNR2IN.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-EWRSXOIZ.js → chunk-JTRKME24.js} +11 -13
  182. package/dist/cli-bundle/chunks/{chunk-EWRSXOIZ.js.map → chunk-JTRKME24.js.map} +1 -1
  183. package/dist/cli-bundle/chunks/{chunk-V4UYNSEM.js → chunk-JVQ7UOYC.js} +6 -8
  184. package/dist/cli-bundle/chunks/{chunk-V4UYNSEM.js.map → chunk-JVQ7UOYC.js.map} +1 -1
  185. package/dist/cli-bundle/chunks/{chunk-L7UXKP2I.js → chunk-JZG5ADVE.js} +190 -102
  186. package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{chunk-N5B6WZC5.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-KJZOSF7J.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-FMWW2JDU.js → chunk-KRASIL6M.js} +2 -2
  192. package/dist/cli-bundle/chunks/{chunk-XVYKWZNL.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-HZF5RLKX.js → chunk-KYDYQMNW.js} +5 -7
  195. package/dist/cli-bundle/chunks/{chunk-HZF5RLKX.js.map → chunk-KYDYQMNW.js.map} +1 -1
  196. package/dist/cli-bundle/chunks/{chunk-OHDQNKJB.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-I6QMJ2XT.js → chunk-MLHX6DN5.js} +2 -2
  199. package/dist/cli-bundle/chunks/{chunk-HC2S36NB.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-C6QA367T.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-5S4ZGDB2.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-SKC4UTRP.js → chunk-OUQ5JEFM.js} +3 -3
  207. package/dist/cli-bundle/chunks/{chunk-JPJDP4VU.js → chunk-QE5UFCCO.js} +2 -2
  208. package/dist/cli-bundle/chunks/{chunk-6W3Y65PL.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-RRP6D345.js → chunk-RPRW26NG.js} +12 -16
  211. package/dist/cli-bundle/chunks/{chunk-RRP6D345.js.map → chunk-RPRW26NG.js.map} +1 -1
  212. package/dist/cli-bundle/chunks/{chunk-WB5BYQMF.js → chunk-SJZTPVFT.js} +4 -4
  213. package/dist/cli-bundle/chunks/{chunk-EYPINTFR.js → chunk-SNUK7H5J.js} +1164 -440
  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-GDUMGZK3.js → chunk-TQ6E76BE.js} +11 -13
  218. package/dist/cli-bundle/chunks/{chunk-GDUMGZK3.js.map → chunk-TQ6E76BE.js.map} +1 -1
  219. package/dist/cli-bundle/chunks/{chunk-IAP5KYBQ.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-PRVTGX64.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-ZLWRPBOW.js → chunk-V3KLX7U7.js} +3 -3
  224. package/dist/cli-bundle/chunks/{chunk-LNEDHJNQ.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-MWMHZOZZ.js → chunk-VMY7MZEM.js} +10 -14
  227. package/dist/cli-bundle/chunks/{chunk-MWMHZOZZ.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-M6TUBOGW.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-QO5I4FBL.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-TSI32UEL.js → chunk-YEDFE4DC.js} +6 -8
  235. package/dist/cli-bundle/chunks/{chunk-TSI32UEL.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-ALQKV6U7.js → chunk-Z55WX4IQ.js} +12 -16
  239. package/dist/cli-bundle/chunks/{chunk-ALQKV6U7.js.map → chunk-Z55WX4IQ.js.map} +1 -1
  240. package/dist/cli-bundle/chunks/{chunk-OQ2E64FH.js → chunk-Z5BM2FKQ.js} +4 -4
  241. package/dist/cli-bundle/chunks/{chunk-IXAZI443.js → chunk-ZEATCVAC.js} +2 -2
  242. package/dist/cli-bundle/chunks/{chunk-C4C3EJCJ.js → chunk-ZFIEEDTJ.js} +3 -3
  243. package/dist/cli-bundle/chunks/{chunk-BFFO3AIB.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-FZZZCAY6.js → claim-6NINZYB3.js} +10 -12
  246. package/dist/cli-bundle/chunks/{claim-FZZZCAY6.js.map → claim-6NINZYB3.js.map} +1 -1
  247. package/dist/cli-bundle/chunks/{claim-XK5QBZE3.js → claim-HMCLSLUE.js} +8 -10
  248. package/dist/cli-bundle/chunks/{claim-XK5QBZE3.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-QHMVWM7M.js → close-OP3LK7Z2.js} +7 -8
  251. package/dist/cli-bundle/chunks/{close-many-OIXJE2JZ.js → close-many-BFMP6HHK.js} +15 -17
  252. package/dist/cli-bundle/chunks/{close-many-OIXJE2JZ.js.map → close-many-BFMP6HHK.js.map} +1 -1
  253. package/dist/cli-bundle/chunks/{close-many-SUU5BS2C.js → close-many-CXJBOWWY.js} +17 -19
  254. package/dist/cli-bundle/chunks/{close-many-SUU5BS2C.js.map → close-many-CXJBOWWY.js.map} +1 -1
  255. package/dist/cli-bundle/chunks/{comments-RH3IBIRH.js → comments-ETHABIY6.js} +9 -11
  256. package/dist/cli-bundle/chunks/{comments-RH3IBIRH.js.map → comments-ETHABIY6.js.map} +1 -1
  257. package/dist/cli-bundle/chunks/{comments-5YM62D75.js → comments-MU2WMBUY.js} +11 -13
  258. package/dist/cli-bundle/chunks/{comments-5YM62D75.js.map → comments-MU2WMBUY.js.map} +1 -1
  259. package/dist/cli-bundle/chunks/{config-NCNNWF6R.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-SW3U7XP2.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-JXFGBOYT.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-SY6PDFIK.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-N3GE6FYS.js → copy-CWM6SBY6.js} +7 -11
  270. package/dist/cli-bundle/chunks/{copy-N3GE6FYS.js.map → copy-CWM6SBY6.js.map} +1 -1
  271. package/dist/cli-bundle/chunks/{copy-IEDBJOOX.js → copy-JJ3KOQW2.js} +9 -13
  272. package/dist/cli-bundle/chunks/{copy-IEDBJOOX.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-O4VONGPG.js → create-J5Q2ELZT.js} +12 -14
  275. package/dist/cli-bundle/chunks/{delete-724EQ6OS.js → delete-2GZLQEUQ.js} +7 -9
  276. package/dist/cli-bundle/chunks/{delete-724EQ6OS.js.map → delete-2GZLQEUQ.js.map} +1 -1
  277. package/dist/cli-bundle/chunks/{delete-LPEIF7RU.js → delete-OOQS4KVD.js} +5 -7
  278. package/dist/cli-bundle/chunks/{delete-LPEIF7RU.js.map → delete-OOQS4KVD.js.map} +1 -1
  279. package/dist/cli-bundle/chunks/{deps-T3Y6Y7RT.js → deps-IF4IGL4R.js} +6 -9
  280. package/dist/cli-bundle/chunks/{deps-T3Y6Y7RT.js.map → deps-IF4IGL4R.js.map} +1 -1
  281. package/dist/cli-bundle/chunks/{deps-RSBU4SIU.js → deps-ZVGGCRR6.js} +8 -11
  282. package/dist/cli-bundle/chunks/{deps-RSBU4SIU.js.map → deps-ZVGGCRR6.js.map} +1 -1
  283. package/dist/cli-bundle/chunks/{docs-IFS7HZPP.js → docs-2TIFR62T.js} +8 -9
  284. package/dist/cli-bundle/chunks/{docs-IFS7HZPP.js.map → docs-2TIFR62T.js.map} +1 -1
  285. package/dist/cli-bundle/chunks/{docs-75ZLCO3G.js → docs-NFTBCQQC.js} +10 -11
  286. package/dist/cli-bundle/chunks/{docs-75ZLCO3G.js.map → docs-NFTBCQQC.js.map} +1 -1
  287. package/dist/cli-bundle/chunks/{eval-L2KD7W3M.js → eval-2F6EH4XN.js} +12 -14
  288. package/dist/cli-bundle/chunks/{eval-L2KD7W3M.js.map → eval-2F6EH4XN.js.map} +1 -1
  289. package/dist/cli-bundle/chunks/{eval-QGR7JCQO.js → eval-PFKXQR3B.js} +10 -12
  290. package/dist/cli-bundle/chunks/{eval-QGR7JCQO.js.map → eval-PFKXQR3B.js.map} +1 -1
  291. package/dist/cli-bundle/chunks/{extension-3JYWJ5K2.js → extension-3LRYX7SW.js} +11 -7
  292. package/dist/cli-bundle/chunks/{extension-YQF4CPIR.js → extension-GMVOIP4O.js} +11 -7
  293. package/dist/cli-bundle/chunks/{files-5BQWDRDT.js → files-DF3HO6XK.js} +11 -13
  294. package/dist/cli-bundle/chunks/{files-5BQWDRDT.js.map → files-DF3HO6XK.js.map} +1 -1
  295. package/dist/cli-bundle/chunks/{files-EPEJMJHQ.js → files-T5ODMETM.js} +9 -11
  296. package/dist/cli-bundle/chunks/{files-EPEJMJHQ.js.map → files-T5ODMETM.js.map} +1 -1
  297. package/dist/cli-bundle/chunks/{focus-RWGKD76E.js → focus-DLXKK4AH.js} +10 -14
  298. package/dist/cli-bundle/chunks/{focus-RWGKD76E.js.map → focus-DLXKK4AH.js.map} +1 -1
  299. package/dist/cli-bundle/chunks/{focus-DQVJAPOE.js → focus-MY5ARIEK.js} +8 -12
  300. package/dist/cli-bundle/chunks/{focus-DQVJAPOE.js.map → focus-MY5ARIEK.js.map} +1 -1
  301. package/dist/cli-bundle/chunks/{gc-BEJMQT64.js → gc-FULIVYR4.js} +3 -3
  302. package/dist/cli-bundle/chunks/{gc-JEFQDJPA.js → gc-MDGRR2SU.js} +3 -3
  303. package/dist/cli-bundle/chunks/{get-LQG6PEVG.js → get-AWK324RS.js} +10 -13
  304. package/dist/cli-bundle/chunks/{get-LQG6PEVG.js.map → get-AWK324RS.js.map} +1 -1
  305. package/dist/cli-bundle/chunks/{get-WVN75H42.js → get-VYPIICPC.js} +12 -15
  306. package/dist/cli-bundle/chunks/{get-WVN75H42.js.map → get-VYPIICPC.js.map} +1 -1
  307. package/dist/cli-bundle/chunks/{health-P67NZ6TT.js → health-FBCVZGSX.js} +16 -17
  308. package/dist/cli-bundle/chunks/{health-P67NZ6TT.js.map → health-FBCVZGSX.js.map} +1 -1
  309. package/dist/cli-bundle/chunks/{health-JJJOY7DJ.js → health-Q66C43GN.js} +18 -19
  310. package/dist/cli-bundle/chunks/{health-JJJOY7DJ.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-RUKPKNY7.js → history-X4OSES6K.js} +8 -10
  313. package/dist/cli-bundle/chunks/{history-compact-ZAOWR7GD.js → history-compact-2GHT32UX.js} +13 -16
  314. package/dist/cli-bundle/chunks/{history-compact-ZAOWR7GD.js.map → history-compact-2GHT32UX.js.map} +1 -1
  315. package/dist/cli-bundle/chunks/{history-compact-NQ7VPRVT.js → history-compact-WLCQEKXS.js} +11 -14
  316. package/dist/cli-bundle/chunks/{history-compact-NQ7VPRVT.js.map → history-compact-WLCQEKXS.js.map} +1 -1
  317. package/dist/cli-bundle/chunks/{history-redact-YY4XYVEP.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-YSQH6SY6.js → history-repair-FY75IC26.js} +13 -16
  320. package/dist/cli-bundle/chunks/{history-repair-YSQH6SY6.js.map → history-repair-FY75IC26.js.map} +1 -1
  321. package/dist/cli-bundle/chunks/{history-repair-EHL4ODQY.js → history-repair-GABSDSVD.js} +11 -14
  322. package/dist/cli-bundle/chunks/{history-repair-EHL4ODQY.js.map → history-repair-GABSDSVD.js.map} +1 -1
  323. package/dist/cli-bundle/chunks/{init-HBFGYS66.js → init-KO7CGIRQ.js} +11 -11
  324. package/dist/cli-bundle/chunks/init-TRYJELH4.js +21 -0
  325. package/dist/cli-bundle/chunks/{learnings-KFQO7GEZ.js → learnings-3F7YLI45.js} +9 -11
  326. package/dist/cli-bundle/chunks/{learnings-KFQO7GEZ.js.map → learnings-3F7YLI45.js.map} +1 -1
  327. package/dist/cli-bundle/chunks/{learnings-J555ZFPD.js → learnings-LHZT5BHW.js} +11 -13
  328. package/dist/cli-bundle/chunks/{learnings-J555ZFPD.js.map → learnings-LHZT5BHW.js.map} +1 -1
  329. package/dist/cli-bundle/chunks/{list-C7R33MD5.js → list-ROT7JF62.js} +10 -10
  330. package/dist/cli-bundle/chunks/{list-DSN6UNFB.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-VYJFN2A3.js → notes-EVJZ3VAB.js} +11 -13
  336. package/dist/cli-bundle/chunks/{notes-VYJFN2A3.js.map → notes-EVJZ3VAB.js.map} +1 -1
  337. package/dist/cli-bundle/chunks/{notes-V4VNIQL4.js → notes-FW6YFLND.js} +9 -11
  338. package/dist/cli-bundle/chunks/{notes-V4VNIQL4.js.map → notes-FW6YFLND.js.map} +1 -1
  339. package/dist/cli-bundle/chunks/{plan-RBHQ5PO7.js → plan-DQ7G4EDC.js} +15 -18
  340. package/dist/cli-bundle/chunks/{plan-RBHQ5PO7.js.map → plan-DQ7G4EDC.js.map} +1 -1
  341. package/dist/cli-bundle/chunks/{plan-DHRSVSHR.js → plan-ZHKZ7JVF.js} +17 -20
  342. package/dist/cli-bundle/chunks/{plan-DHRSVSHR.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-CCMHGZTF.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-OM3E2KMY.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-UXTTWL6N.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-N3CDEGZU.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-R2FLOCRI.js → register-operations-L6CYTOIH.js} +30 -32
  356. package/dist/cli-bundle/chunks/{register-operations-R2FLOCRI.js.map → register-operations-L6CYTOIH.js.map} +1 -1
  357. package/dist/cli-bundle/chunks/{register-operations-UDIFMQKD.js → register-operations-YAT6FUUB.js} +32 -34
  358. package/dist/cli-bundle/chunks/{register-operations-UDIFMQKD.js.map → register-operations-YAT6FUUB.js.map} +1 -1
  359. package/dist/cli-bundle/chunks/{register-setup-TWHKICM2.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-G5LTSFYK.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-LL2WLEDG.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-M4H2ZI64.js → scheduling-shortcuts-3F4QUEDH.js} +14 -16
  366. package/dist/cli-bundle/chunks/{scheduling-shortcuts-M4H2ZI64.js.map → scheduling-shortcuts-3F4QUEDH.js.map} +1 -1
  367. package/dist/cli-bundle/chunks/{scheduling-shortcuts-255GI3BU.js → scheduling-shortcuts-BNZLQK36.js} +12 -14
  368. package/dist/cli-bundle/chunks/{scheduling-shortcuts-255GI3BU.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-2EI6EAXH.js → search-CX5UMV4H.js} +10 -12
  372. package/dist/cli-bundle/chunks/{search-QBFBLQRO.js → search-KP6H7COV.js} +10 -12
  373. package/dist/cli-bundle/chunks/{stats-TCW2SZQG.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-TKC6CAKB.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-LQ6FRTUT.js → telemetry-DIFPXCAT.js} +4 -4
  378. package/dist/cli-bundle/chunks/{telemetry-BT2VSWU2.js → telemetry-WTYFUPRL.js} +4 -4
  379. package/dist/cli-bundle/chunks/{test-NV2DRPUS.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-REW67LXT.js → test-all-PZTBLLQ6.js} +17 -20
  384. package/dist/cli-bundle/chunks/{test-all-REW67LXT.js.map → test-all-PZTBLLQ6.js.map} +1 -1
  385. package/dist/cli-bundle/chunks/{test-all-DZ76VTPQ.js → test-all-XLPI4USF.js} +19 -22
  386. package/dist/cli-bundle/chunks/{test-all-DZ76VTPQ.js.map → test-all-XLPI4USF.js.map} +1 -1
  387. package/dist/cli-bundle/chunks/{test-runs-FQ5WNQLP.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-PX73DMMI.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-2ILP6E4Y.js → update-many-LU3SCNK5.js} +32 -33
  396. package/dist/cli-bundle/chunks/{update-many-2ILP6E4Y.js.map → update-many-LU3SCNK5.js.map} +1 -1
  397. package/dist/cli-bundle/chunks/{update-many-Q5ZEI64S.js → update-many-VW5DGF3S.js} +34 -35
  398. package/dist/cli-bundle/chunks/{update-many-Q5ZEI64S.js.map → update-many-VW5DGF3S.js.map} +1 -1
  399. package/dist/cli-bundle/chunks/{upgrade-FOZKQTQF.js → upgrade-77FRUAXN.js} +12 -8
  400. package/dist/cli-bundle/chunks/{upgrade-FOZKQTQF.js.map → upgrade-77FRUAXN.js.map} +1 -1
  401. package/dist/cli-bundle/chunks/{upgrade-DHL74PQH.js → upgrade-ICXY244R.js} +10 -6
  402. package/dist/cli-bundle/chunks/{upgrade-DHL74PQH.js.map → upgrade-ICXY244R.js.map} +1 -1
  403. package/dist/cli-bundle/chunks/{validate-HYZNIB6W.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-54SYJ7QW.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.js +131 -2
  427. package/dist/core/extensions/loader.js.map +1 -1
  428. package/dist/core/fs/fs-utils.js +27 -2
  429. package/dist/core/fs/fs-utils.js.map +1 -1
  430. package/dist/core/item/actionability.d.ts +57 -0
  431. package/dist/core/item/actionability.js +178 -0
  432. package/dist/core/item/actionability.js.map +1 -0
  433. package/dist/core/item/type-registry.js +18 -45
  434. package/dist/core/item/type-registry.js.map +1 -1
  435. package/dist/core/profile/profile-describe.d.ts +64 -0
  436. package/dist/core/profile/profile-describe.js +83 -0
  437. package/dist/core/profile/profile-describe.js.map +1 -0
  438. package/dist/core/profile/profile-lint.d.ts +53 -0
  439. package/dist/core/profile/profile-lint.js +422 -0
  440. package/dist/core/profile/profile-lint.js.map +1 -0
  441. package/dist/core/profile/profile-plan.d.ts +145 -0
  442. package/dist/core/profile/profile-plan.js +0 -0
  443. package/dist/core/profile/profile-plan.js.map +1 -0
  444. package/dist/core/profile/profile-presets.d.ts +218 -0
  445. package/dist/core/profile/profile-presets.js +325 -0
  446. package/dist/core/profile/profile-presets.js.map +1 -0
  447. package/dist/core/schema/fields-file.js +25 -25
  448. package/dist/core/schema/fields-file.js.map +1 -1
  449. package/dist/core/schema/item-types-file.js +3 -3
  450. package/dist/core/schema/item-types-file.js.map +1 -1
  451. package/dist/core/schema/runtime-schema.js +4 -4
  452. package/dist/core/schema/runtime-schema.js.map +1 -1
  453. package/dist/core/schema/status-defs-file.js +3 -3
  454. package/dist/core/schema/status-defs-file.js.map +1 -1
  455. package/dist/core/shared/serialization.js +83 -62
  456. package/dist/core/shared/serialization.js.map +1 -1
  457. package/dist/core/store/item-store.d.ts +1 -0
  458. package/dist/core/store/item-store.js +16 -8
  459. package/dist/core/store/item-store.js.map +1 -1
  460. package/dist/core/store/paths.js +4 -32
  461. package/dist/core/store/paths.js.map +1 -1
  462. package/dist/core/store/settings.js +14 -14
  463. package/dist/core/store/settings.js.map +1 -1
  464. package/dist/core/telemetry/observability.js +50 -54
  465. package/dist/core/telemetry/observability.js.map +1 -1
  466. package/dist/core/telemetry/runtime.js +11 -2
  467. package/dist/core/telemetry/runtime.js.map +1 -1
  468. package/dist/core/test/background-runs.js +3 -2
  469. package/dist/core/test/background-runs.js.map +1 -1
  470. package/dist/core/validate/linked-artifact-reference.d.ts +24 -0
  471. package/dist/core/validate/linked-artifact-reference.js +41 -0
  472. package/dist/core/validate/linked-artifact-reference.js.map +1 -0
  473. package/dist/mcp/server.js +183 -83
  474. package/dist/mcp/server.js.map +1 -1
  475. package/dist/mcp/tool-definitions.js +33 -2
  476. package/dist/mcp/tool-definitions.js.map +1 -1
  477. package/dist/sdk/cli-contracts/commander-types.d.ts +1 -0
  478. package/dist/sdk/cli-contracts/commander-types.js +15 -2
  479. package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
  480. package/dist/sdk/cli-contracts/enum-contracts.d.ts +3 -3
  481. package/dist/sdk/cli-contracts/enum-contracts.js +6 -2
  482. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  483. package/dist/sdk/cli-contracts/flag-contracts.d.ts +149 -0
  484. package/dist/sdk/cli-contracts/flag-contracts.js +1583 -0
  485. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -0
  486. package/dist/sdk/cli-contracts/string-lists.d.ts +14 -0
  487. package/dist/sdk/cli-contracts/string-lists.js +20 -0
  488. package/dist/sdk/cli-contracts/string-lists.js.map +1 -0
  489. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +1 -1
  490. package/dist/sdk/cli-contracts/tool-option-contracts.js +51 -109
  491. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  492. package/dist/sdk/cli-contracts/tool-parameter-tables.d.ts +17 -0
  493. package/dist/sdk/cli-contracts/tool-parameter-tables.js +54 -5
  494. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  495. package/dist/sdk/cli-contracts/tool-schema.d.ts +74 -0
  496. package/dist/sdk/cli-contracts/tool-schema.js +840 -0
  497. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -0
  498. package/dist/sdk/cli-contracts.d.ts +13 -193
  499. package/dist/sdk/cli-contracts.js +5 -2277
  500. package/dist/sdk/cli-contracts.js.map +1 -1
  501. package/dist/sdk/compose.d.ts +7 -4
  502. package/dist/sdk/compose.js +64 -14
  503. package/dist/sdk/compose.js.map +1 -1
  504. package/dist/sdk/define.d.ts +14 -0
  505. package/dist/sdk/define.js +17 -2
  506. package/dist/sdk/define.js.map +1 -1
  507. package/dist/sdk/index.d.ts +14 -3
  508. package/dist/sdk/index.js +14 -3
  509. package/dist/sdk/index.js.map +1 -1
  510. package/dist/sdk/testing.d.ts +82 -2
  511. package/dist/sdk/testing.js +74 -3
  512. package/dist/sdk/testing.js.map +1 -1
  513. package/docs/AGENT_GUIDE.md +2 -0
  514. package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
  515. package/docs/COMMANDS.md +37 -0
  516. package/docs/EXTENSIONS.md +12 -13
  517. package/docs/RELEASING.md +6 -1
  518. package/docs/SDK.md +184 -17
  519. package/docs/TESTING.md +12 -0
  520. package/docs/examples/policy-restricted-extension/README.md +6 -0
  521. package/docs/examples/policy-restricted-extension/index.ts +40 -0
  522. package/docs/examples/policy-restricted-extension/manifest.json +2 -2
  523. package/docs/examples/starter-extension/README.md +14 -2
  524. package/docs/examples/starter-extension/{index.js → index.ts} +51 -6
  525. package/docs/examples/starter-extension/manifest.json +2 -2
  526. package/package.json +20 -7
  527. package/packages/pm-beads/extensions/beads/index.ts +3 -3
  528. package/packages/pm-beads/extensions/beads/manifest.json +2 -2
  529. package/packages/pm-beads/extensions/beads/runtime-loader.ts +19 -7
  530. package/packages/pm-beads/extensions/beads/runtime.ts +155 -37
  531. package/packages/pm-calendar/extensions/calendar/index.ts +3 -3
  532. package/packages/pm-calendar/extensions/calendar/manifest.json +2 -2
  533. package/packages/pm-calendar/extensions/calendar/runtime.ts +2 -2
  534. package/packages/pm-command-kit/extensions/command-kit/index.ts +1 -1
  535. package/packages/pm-command-kit/extensions/command-kit/manifest.json +2 -2
  536. package/packages/pm-governance-audit/extensions/governance-audit/index.ts +2 -2
  537. package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +2 -2
  538. package/packages/pm-governance-audit/extensions/governance-audit/runtime.ts +1 -1
  539. package/packages/pm-guide-shell/extensions/guide-shell/index.ts +2 -2
  540. package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +2 -2
  541. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +1 -1
  542. package/packages/pm-kanban/README.md +97 -0
  543. package/packages/pm-kanban/extensions/kanban/index.ts +191 -0
  544. package/packages/pm-kanban/extensions/kanban/manifest.json +19 -0
  545. package/packages/pm-kanban/package.json +57 -0
  546. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.ts +1 -1
  547. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +2 -2
  548. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.ts +2 -2
  549. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +2 -2
  550. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.ts +1 -1
  551. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +2 -2
  552. package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +2 -2
  553. package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +1 -1
  554. package/packages/pm-templates/extensions/templates/index.ts +2 -2
  555. package/packages/pm-templates/extensions/templates/manifest.json +2 -2
  556. package/packages/pm-templates/extensions/templates/runtime.ts +1 -1
  557. package/packages/pm-todos/extensions/todos/index.ts +3 -3
  558. package/packages/pm-todos/extensions/todos/manifest.json +2 -2
  559. package/packages/pm-todos/extensions/todos/runtime-loader.ts +19 -7
  560. package/packages/pm-todos/extensions/todos/runtime.ts +177 -43
  561. package/plugins/pm-claude/scripts/pm-mcp-server.mjs +2 -2
  562. package/plugins/pm-codex/scripts/pm-mcp-server.mjs +2 -2
  563. package/scripts/bundle-cli.mjs +1 -1
  564. package/dist/cli-bundle/chunks/activity-54TXGJ2T.js +0 -18
  565. package/dist/cli-bundle/chunks/aggregate-63NWNIBR.js.map +0 -1
  566. package/dist/cli-bundle/chunks/aggregate-YHCYX2EV.js.map +0 -7
  567. package/dist/cli-bundle/chunks/chunk-6EL7SW5C.js.map +0 -7
  568. package/dist/cli-bundle/chunks/chunk-6W3Y65PL.js.map +0 -7
  569. package/dist/cli-bundle/chunks/chunk-AEACLRVH.js.map +0 -7
  570. package/dist/cli-bundle/chunks/chunk-B74BP6IS.js +0 -78
  571. package/dist/cli-bundle/chunks/chunk-B74BP6IS.js.map +0 -7
  572. package/dist/cli-bundle/chunks/chunk-BFFO3AIB.js.map +0 -1
  573. package/dist/cli-bundle/chunks/chunk-EYPINTFR.js.map +0 -7
  574. package/dist/cli-bundle/chunks/chunk-FBLT6WGK.js +0 -75
  575. package/dist/cli-bundle/chunks/chunk-FBLT6WGK.js.map +0 -1
  576. package/dist/cli-bundle/chunks/chunk-GQYJEEFX.js.map +0 -1
  577. package/dist/cli-bundle/chunks/chunk-HBAEFWX3.js.map +0 -7
  578. package/dist/cli-bundle/chunks/chunk-HC2S36NB.js.map +0 -1
  579. package/dist/cli-bundle/chunks/chunk-IAP5KYBQ.js.map +0 -1
  580. package/dist/cli-bundle/chunks/chunk-INPHFO33.js +0 -764
  581. package/dist/cli-bundle/chunks/chunk-INPHFO33.js.map +0 -7
  582. package/dist/cli-bundle/chunks/chunk-IOT6WRL5.js +0 -86
  583. package/dist/cli-bundle/chunks/chunk-IOT6WRL5.js.map +0 -7
  584. package/dist/cli-bundle/chunks/chunk-J7I4C5ZB.js.map +0 -7
  585. package/dist/cli-bundle/chunks/chunk-JKL6HRMV.js.map +0 -7
  586. package/dist/cli-bundle/chunks/chunk-KJZOSF7J.js.map +0 -1
  587. package/dist/cli-bundle/chunks/chunk-L7UXKP2I.js.map +0 -1
  588. package/dist/cli-bundle/chunks/chunk-LNEDHJNQ.js.map +0 -1
  589. package/dist/cli-bundle/chunks/chunk-M6TUBOGW.js.map +0 -1
  590. package/dist/cli-bundle/chunks/chunk-MEXZ5XUM.js.map +0 -7
  591. package/dist/cli-bundle/chunks/chunk-N5B6WZC5.js.map +0 -1
  592. package/dist/cli-bundle/chunks/chunk-NJ73ALW2.js +0 -761
  593. package/dist/cli-bundle/chunks/chunk-NJ73ALW2.js.map +0 -1
  594. package/dist/cli-bundle/chunks/chunk-NVXGVEFD.js +0 -83
  595. package/dist/cli-bundle/chunks/chunk-NVXGVEFD.js.map +0 -1
  596. package/dist/cli-bundle/chunks/chunk-OF7V47P3.js.map +0 -1
  597. package/dist/cli-bundle/chunks/chunk-OHDQNKJB.js.map +0 -7
  598. package/dist/cli-bundle/chunks/chunk-PRVTGX64.js.map +0 -7
  599. package/dist/cli-bundle/chunks/chunk-RAWA3Y7O.js.map +0 -1
  600. package/dist/cli-bundle/chunks/chunk-SMXSDY7J.js.map +0 -7
  601. package/dist/cli-bundle/chunks/chunk-SUREE24M.js.map +0 -1
  602. package/dist/cli-bundle/chunks/chunk-TKPP4GOO.js +0 -654
  603. package/dist/cli-bundle/chunks/chunk-TKPP4GOO.js.map +0 -1
  604. package/dist/cli-bundle/chunks/chunk-VSAABFGQ.js.map +0 -1
  605. package/dist/cli-bundle/chunks/chunk-XVYKWZNL.js.map +0 -7
  606. package/dist/cli-bundle/chunks/chunk-XXKV4UWE.js.map +0 -7
  607. package/dist/cli-bundle/chunks/chunk-ZV7IQ23N.js +0 -657
  608. package/dist/cli-bundle/chunks/chunk-ZV7IQ23N.js.map +0 -7
  609. package/dist/cli-bundle/chunks/close-JEBZXONN.js +0 -15
  610. package/dist/cli-bundle/chunks/config-NCNNWF6R.js.map +0 -7
  611. package/dist/cli-bundle/chunks/config-SW3U7XP2.js.map +0 -1
  612. package/dist/cli-bundle/chunks/context-55VEOYI3.js.map +0 -1
  613. package/dist/cli-bundle/chunks/context-5LB7UGKE.js.map +0 -7
  614. package/dist/cli-bundle/chunks/contracts-JXFGBOYT.js.map +0 -1
  615. package/dist/cli-bundle/chunks/contracts-SY6PDFIK.js.map +0 -7
  616. package/dist/cli-bundle/chunks/create-CLSCHGJJ.js +0 -30
  617. package/dist/cli-bundle/chunks/history-ALTM2RRP.js +0 -20
  618. package/dist/cli-bundle/chunks/history-redact-5YGLWUDH.js +0 -21
  619. package/dist/cli-bundle/chunks/init-C4CRHW22.js +0 -21
  620. package/dist/cli-bundle/chunks/register-list-query-CCMHGZTF.js.map +0 -7
  621. package/dist/cli-bundle/chunks/register-list-query-OM3E2KMY.js.map +0 -1
  622. package/dist/cli-bundle/chunks/register-mutation-N3CDEGZU.js.map +0 -1
  623. package/dist/cli-bundle/chunks/register-mutation-UXTTWL6N.js.map +0 -7
  624. package/dist/cli-bundle/chunks/register-setup-G5LTSFYK.js.map +0 -1
  625. package/dist/cli-bundle/chunks/register-setup-TWHKICM2.js.map +0 -7
  626. package/dist/cli-bundle/chunks/restore-LQHXBAY5.js +0 -19
  627. package/dist/cli-bundle/chunks/schema-C6QA367T.js.map +0 -7
  628. package/dist/cli-bundle/chunks/schema-QO5I4FBL.js.map +0 -1
  629. package/dist/cli-bundle/chunks/stats-TCW2SZQG.js.map +0 -7
  630. package/dist/cli-bundle/chunks/stats-TKC6CAKB.js.map +0 -1
  631. package/dist/cli-bundle/chunks/test-WA6RZGM2.js +0 -36
  632. package/dist/cli-bundle/chunks/test-runs-FQ5WNQLP.js.map +0 -1
  633. package/dist/cli-bundle/chunks/test-runs-PX73DMMI.js.map +0 -7
  634. package/dist/cli-bundle/chunks/update-BSKMQOYH.js +0 -28
  635. package/dist/cli-bundle/chunks/update-FIGYNQ2I.js +0 -24
  636. package/dist/cli-bundle/chunks/validate-54SYJ7QW.js.map +0 -1
  637. package/dist/cli-bundle/chunks/validate-HYZNIB6W.js.map +0 -7
  638. package/docs/examples/policy-restricted-extension/index.js +0 -21
  639. package/packages/pm-beads/extensions/beads/index.js +0 -64
  640. package/packages/pm-beads/extensions/beads/runtime-loader.js +0 -86
  641. package/packages/pm-beads/extensions/beads/runtime.js +0 -482
  642. package/packages/pm-calendar/extensions/calendar/index.js +0 -150
  643. package/packages/pm-calendar/extensions/calendar/runtime.js +0 -126
  644. package/packages/pm-command-kit/extensions/command-kit/index.js +0 -181
  645. package/packages/pm-governance-audit/extensions/governance-audit/index.js +0 -177
  646. package/packages/pm-governance-audit/extensions/governance-audit/runtime.js +0 -153
  647. package/packages/pm-guide-shell/extensions/guide-shell/index.js +0 -98
  648. package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +0 -294
  649. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.js +0 -18
  650. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.js +0 -124
  651. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.js +0 -110
  652. package/packages/pm-search-advanced/extensions/search-advanced/index.js +0 -258
  653. package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +0 -361
  654. package/packages/pm-templates/extensions/templates/index.js +0 -132
  655. package/packages/pm-templates/extensions/templates/runtime.js +0 -35
  656. package/packages/pm-todos/extensions/todos/index.js +0 -81
  657. package/packages/pm-todos/extensions/todos/runtime-loader.js +0 -86
  658. package/packages/pm-todos/extensions/todos/runtime.js +0 -545
  659. /package/dist/cli-bundle/chunks/{activity-54TXGJ2T.js.map → activity-EJBMXUBH.js.map} +0 -0
  660. /package/dist/cli-bundle/chunks/{activity-N7RVTLBQ.js.map → activity-MVSEND6D.js.map} +0 -0
  661. /package/dist/cli-bundle/chunks/{chunk-F32L4HR6.js.map → chunk-3JWQCLR5.js.map} +0 -0
  662. /package/dist/cli-bundle/chunks/{chunk-YV2OSAMS.js.map → chunk-4TXTVZL3.js.map} +0 -0
  663. /package/dist/cli-bundle/chunks/{chunk-AYPQUFCX.js.map → chunk-4YIMPANT.js.map} +0 -0
  664. /package/dist/cli-bundle/chunks/{chunk-EOGBMLCE.js.map → chunk-73PTKMAE.js.map} +0 -0
  665. /package/dist/cli-bundle/chunks/{chunk-2WCYE3IF.js.map → chunk-7RIJGN4R.js.map} +0 -0
  666. /package/dist/cli-bundle/chunks/{chunk-CZIFFMZI.js.map → chunk-BN3CWK6G.js.map} +0 -0
  667. /package/dist/cli-bundle/chunks/{chunk-J3NMWFIN.js.map → chunk-C2KCIZKZ.js.map} +0 -0
  668. /package/dist/cli-bundle/chunks/{chunk-TIM4OD74.js.map → chunk-CHRNYKNI.js.map} +0 -0
  669. /package/dist/cli-bundle/chunks/{chunk-KIEAK7YE.js.map → chunk-D6USKAMA.js.map} +0 -0
  670. /package/dist/cli-bundle/chunks/{chunk-3BKH2CL3.js.map → chunk-DLDCPF5X.js.map} +0 -0
  671. /package/dist/cli-bundle/chunks/{chunk-CG3KP6I5.js.map → chunk-E2Q2ULMR.js.map} +0 -0
  672. /package/dist/cli-bundle/chunks/{chunk-PEL2NLQE.js.map → chunk-F6VH3LFC.js.map} +0 -0
  673. /package/dist/cli-bundle/chunks/{chunk-5BBEWX6C.js.map → chunk-FDEVKXC4.js.map} +0 -0
  674. /package/dist/cli-bundle/chunks/{chunk-QOUOMPHO.js.map → chunk-HUYYMTGW.js.map} +0 -0
  675. /package/dist/cli-bundle/chunks/{chunk-KKX4Z2SE.js.map → chunk-IHXXUIXS.js.map} +0 -0
  676. /package/dist/cli-bundle/chunks/{chunk-F4BNR2IN.js.map → chunk-JIP67N2K.js.map} +0 -0
  677. /package/dist/cli-bundle/chunks/{chunk-FMWW2JDU.js.map → chunk-KRASIL6M.js.map} +0 -0
  678. /package/dist/cli-bundle/chunks/{chunk-I6QMJ2XT.js.map → chunk-MLHX6DN5.js.map} +0 -0
  679. /package/dist/cli-bundle/chunks/{chunk-5S4ZGDB2.js.map → chunk-OB3RJV5F.js.map} +0 -0
  680. /package/dist/cli-bundle/chunks/{chunk-SKC4UTRP.js.map → chunk-OUQ5JEFM.js.map} +0 -0
  681. /package/dist/cli-bundle/chunks/{chunk-JPJDP4VU.js.map → chunk-QE5UFCCO.js.map} +0 -0
  682. /package/dist/cli-bundle/chunks/{chunk-WB5BYQMF.js.map → chunk-SJZTPVFT.js.map} +0 -0
  683. /package/dist/cli-bundle/chunks/{chunk-ZLWRPBOW.js.map → chunk-V3KLX7U7.js.map} +0 -0
  684. /package/dist/cli-bundle/chunks/{chunk-OQ2E64FH.js.map → chunk-Z5BM2FKQ.js.map} +0 -0
  685. /package/dist/cli-bundle/chunks/{chunk-IXAZI443.js.map → chunk-ZEATCVAC.js.map} +0 -0
  686. /package/dist/cli-bundle/chunks/{chunk-C4C3EJCJ.js.map → chunk-ZFIEEDTJ.js.map} +0 -0
  687. /package/dist/cli-bundle/chunks/{close-JEBZXONN.js.map → close-37KEHLYM.js.map} +0 -0
  688. /package/dist/cli-bundle/chunks/{close-QHMVWM7M.js.map → close-OP3LK7Z2.js.map} +0 -0
  689. /package/dist/cli-bundle/chunks/{create-CLSCHGJJ.js.map → context-7ZEZV3BV.js.map} +0 -0
  690. /package/dist/cli-bundle/chunks/{create-O4VONGPG.js.map → context-XDI4DKKT.js.map} +0 -0
  691. /package/dist/cli-bundle/chunks/{extension-YQF4CPIR.js.map → create-DFMNBKBS.js.map} +0 -0
  692. /package/dist/cli-bundle/chunks/{extension-3JYWJ5K2.js.map → create-J5Q2ELZT.js.map} +0 -0
  693. /package/dist/cli-bundle/chunks/{history-RUKPKNY7.js.map → extension-3LRYX7SW.js.map} +0 -0
  694. /package/dist/cli-bundle/chunks/{history-ALTM2RRP.js.map → extension-GMVOIP4O.js.map} +0 -0
  695. /package/dist/cli-bundle/chunks/{gc-BEJMQT64.js.map → gc-FULIVYR4.js.map} +0 -0
  696. /package/dist/cli-bundle/chunks/{gc-JEFQDJPA.js.map → gc-MDGRR2SU.js.map} +0 -0
  697. /package/dist/cli-bundle/chunks/{history-redact-5YGLWUDH.js.map → history-5XUSLAJA.js.map} +0 -0
  698. /package/dist/cli-bundle/chunks/{history-redact-YY4XYVEP.js.map → history-X4OSES6K.js.map} +0 -0
  699. /package/dist/cli-bundle/chunks/{init-HBFGYS66.js.map → history-redact-45YW65BK.js.map} +0 -0
  700. /package/dist/cli-bundle/chunks/{init-C4CRHW22.js.map → history-redact-BVHWDXPR.js.map} +0 -0
  701. /package/dist/cli-bundle/chunks/{list-C7R33MD5.js.map → init-KO7CGIRQ.js.map} +0 -0
  702. /package/dist/cli-bundle/chunks/{list-DSN6UNFB.js.map → init-TRYJELH4.js.map} +0 -0
  703. /package/dist/cli-bundle/chunks/{restore-LL2WLEDG.js.map → list-ROT7JF62.js.map} +0 -0
  704. /package/dist/cli-bundle/chunks/{restore-LQHXBAY5.js.map → list-Y6AU5BJS.js.map} +0 -0
  705. /package/dist/cli-bundle/chunks/{search-2EI6EAXH.js.map → restore-DKMCLPI5.js.map} +0 -0
  706. /package/dist/cli-bundle/chunks/{search-QBFBLQRO.js.map → restore-IRAKSWIW.js.map} +0 -0
  707. /package/dist/cli-bundle/chunks/{test-NV2DRPUS.js.map → schema-OLT6LVKH.js.map} +0 -0
  708. /package/dist/cli-bundle/chunks/{test-WA6RZGM2.js.map → schema-XJXKJQF5.js.map} +0 -0
  709. /package/dist/cli-bundle/chunks/{update-BSKMQOYH.js.map → search-CX5UMV4H.js.map} +0 -0
  710. /package/dist/cli-bundle/chunks/{update-FIGYNQ2I.js.map → search-KP6H7COV.js.map} +0 -0
  711. /package/dist/cli-bundle/chunks/{telemetry-LQ6FRTUT.js.map → telemetry-DIFPXCAT.js.map} +0 -0
  712. /package/dist/cli-bundle/chunks/{telemetry-BT2VSWU2.js.map → telemetry-WTYFUPRL.js.map} +0 -0
@@ -102,6 +102,8 @@ pm release <item-id>
102
102
 
103
103
  | Need | Command |
104
104
  |------|---------|
105
+ | The single next action + why | `pm next` (concrete ready leaves first; completed-container closeout rows surface only when no leaf work is ready; `--ready-only` for the tightest output) |
106
+ | Next ready work in one epic | `pm next --parent <id>` |
105
107
  | Next work and agenda | `pm context --limit 10` |
106
108
  | Comprehensive whole-tracker snapshot | `pm context --depth full` (every section, no per-section row cap) |
107
109
  | Status of one epic/subtree | `pm context --parent <id> --depth deep` |
@@ -55,7 +55,7 @@ This clones the repo, reads `.claude-plugin/marketplace.json` at the root, insta
55
55
  claude mcp add --transport stdio pm-mcp -- npx -y --package=@unbrained/pm-cli@latest pm-mcp
56
56
  ```
57
57
 
58
- Gives you the 26 MCP tools without skills or slash commands.
58
+ Gives you the 28 MCP tools without skills or slash commands.
59
59
 
60
60
  ### 3. Direct project `.mcp.json` (project-scoped MCP only)
61
61
 
@@ -113,7 +113,7 @@ node scripts/smoke-claude-plugin.mjs
113
113
  pnpm smoke:claude-plugin
114
114
  ```
115
115
 
116
- Verifies: plugin file structure, manifest name consistency, MCP initialize, 26 tools present, full workflow (init → create → claim → update → link files/docs/tests → get → context → search → validate → health), and session-start hook.
116
+ Verifies: plugin file structure, manifest name consistency, MCP initialize, 28 tools present, full workflow (init → create → claim → update → link files/docs/tests → get → context → search → validate → health), and session-start hook.
117
117
 
118
118
  ### MCP server smoke test
119
119
 
package/docs/COMMANDS.md CHANGED
@@ -35,6 +35,7 @@ Tracked documentation work: [pm-u9d0](../.agents/pm/epics/pm-u9d0.toon).
35
35
  | Verification | `test`, `test-all`, `test-runs`, `validate`, `gc` | run linked tests and repository checks |
36
36
  | History | `history`, `history-compact`, `history-redact`, `history-repair`, `activity`, `restore`, `stats` | inspect, compact, redact, re-anchor, and recover item state |
37
37
  | Schema | `schema add-type` / `remove-type` / `add-status` / `remove-status` / `add-field` / `remove-field` / `apply-preset` | manage config-driven custom item types (`.agents/pm/schema/types.json`), statuses (`.agents/pm/schema/statuses.json`), and custom metadata fields (`.agents/pm/schema/fields.json`); `apply-preset` adopts a domain type preset; `add-type --infer` derives types from title-prefix conventions |
38
+ | Profiles | `profile list` / `show` / `apply` / `lint` | compose item types, statuses, fields, workflows, config, templates, and recommended packages into archetype bundles (agile/ops/research); `apply` stages every dimension idempotently; `lint` reports author-time consistency findings without writing |
38
39
  | Calendar | `calendar`, `cal` | project deadlines, reminders, and events |
39
40
  | Packages | `install`, `upgrade`, `package`, `packages`, `extension`, package/extension command groups | install, upgrade, manage, and run package-backed extension commands |
40
41
  | Machines | `contracts`, `help`, optional `guide`/`completion` | command contracts plus optional guide-shell docs routing and shell helpers |
@@ -66,6 +67,7 @@ pm install '*' --project
66
67
  pm package catalog --project
67
68
  pm install npm:@scope/pm-package --project
68
69
  pm package describe --project # by-name surface map of every loaded package
70
+ pm package describe my-package --markdown --output docs/my-package-reference.md
69
71
  pm package doctor --project --detail summary
70
72
  pm upgrade --dry-run
71
73
  pm upgrade --packages-only
@@ -78,6 +80,7 @@ When package-owned commands are unavailable, usage guidance includes an install-
78
80
  ## Triage
79
81
 
80
82
  ```bash
83
+ pm next # the single highest-priority READY item + why, then the ready/blocked queues
81
84
  pm context --limit 10
82
85
  pm search "calendar reminder validation" --limit 10
83
86
  pm get pm-a1b2 # read one item; add --fields/--depth for lower-token projections
@@ -91,6 +94,14 @@ pm dedupe-audit --mode parent_scope --limit 20
91
94
  pm dedupe-merge --keep pm-canonical --close pm-duplicate --dry-run
92
95
  ```
93
96
 
97
+ Use `pm next` when the only question is "what should I work on now?" — it is the distilled, dependency-aware version of `context`. It computes READINESS rather than just listing active work: an item is **ready** when its status is active, it has no open blockers (neither the scalar `blocked_by` nor any `blocked_by` dependency points at a non-terminal item), and it has no open children (a concrete leaf, never an Epic with open work beneath it). Open containers whose descendants are already terminal are governance closeout rows: they stay out of the normal ready queue while concrete leaf work exists, then surface when closeout is the next action. `pm next` returns one `recommended` item with a deterministic rationale (status, priority, deadline, blocker clearance, parent advancement, downstream unblocks, and completed-container closeout when applicable), a ranked `ready` queue, and a `blocked` companion queue annotated with each item's open blockers so you know exactly what to clear next. In-progress work is recommended before unstarted work. Scope to one epic with `--parent <id>`, cap rows with `--limit`/`--blocked-limit`, drop the blocked list with `--ready-only`, and render markdown with `--format markdown`. Available over MCP as the narrow `pm_next` tool (and the `next` action of `pm_run`).
98
+
99
+ ```bash
100
+ pm next # recommend the next action + ready/blocked queues
101
+ pm next --parent pm-epic01 # scope readiness to one epic's subtree
102
+ pm next --ready-only --limit 3 --json # tightest agent-loop projection
103
+ ```
104
+
94
105
  Use `context` first for a compact active-work snapshot. Use `search` when the request names a concept, component, or prior issue.
95
106
  Use `pm get <id>` to read a single item by ID — the single-item read primitive used throughout the agent loop. It accepts `--fields <list>` and `--depth brief|standard|deep|full` for token-minimal projections, and `--tree`/`--tree-depth <n>` to include descendants. `pm get <id> --json` returns the `body` inside the `item` object (`.item.body`); see [Full results, totals, and bodies](#full-results-totals-and-bodies). To duplicate an existing item as a starting point, `pm copy <id> --title "New title"` clones it into a fresh id with lifecycle fields reset.
96
107
  `context` standard/deep views include high-level child completion counters plus `recently_created` and `unparented` sections, so agents can spot new orphan work before creating duplicates.
@@ -752,6 +763,32 @@ pm create Spike "Investigate retry backoff"
752
763
 
753
764
  The option composes with `--defaults`, `--preset`, `--author`, `--agent-guidance`, and `--with-packages`; re-running it is idempotent and reports `registered_type_preset` in JSON output. Already-initialized projects can adopt the same presets without re-running init via `pm schema apply-preset agile|ops|research`.
754
765
 
766
+ ## Project Profiles
767
+
768
+ Tracker references: [pm-v37g](../.agents/pm/features/pm-v37g.toon), [pm-bhmk](../.agents/pm/tasks/pm-bhmk.toon), [pm-j1fj](../.agents/pm/features/pm-j1fj.toon).
769
+
770
+ `pm profile` composes the schema, config, template, and package primitives into complete project-management archetypes. Where a type preset only registers item types, a profile bundles item types, custom statuses, custom fields, per-type workflows, config knobs, create templates, and recommended packages so a fresh tracker can be tailored to an archetype in one idempotent command.
771
+
772
+ ```bash
773
+ pm profile list # show built-in archetypes and their composition counts
774
+ pm profile show agile # full composition of one profile
775
+ pm profile lint agile # author-time consistency check (graded error/warning; never writes)
776
+ pm profile apply agile --dry-run # preview the diff without writing
777
+ pm profile apply agile # stage every dimension (idempotent; re-runs are no-ops)
778
+ ```
779
+
780
+ Built-in profiles:
781
+
782
+ - `agile`: Story/Spike types, a `review` status, `story_points`/`acceptance_owner` fields, a Story workflow, a `story` template, and offline BM25 search config. Recommends `templates`, `calendar`, `search-advanced`.
783
+ - `ops`: Incident/Runbook types, `mitigating`/`monitoring` statuses, `severity`/`service` fields, an Incident workflow, an `incident` template. Recommends `lifecycle-hooks`, `governance-audit`, `calendar`.
784
+ - `research`: Experiment/Hypothesis types, an `analyzing` status, `hypothesis`/`method` fields, an Experiment workflow, an `experiment` template. Recommends `search-advanced`, `templates`, `beads`.
785
+
786
+ Apply reports a per-dimension diff (`added` / `updated` / `unchanged`). Re-applying an already-applied profile performs zero writes. Package recommendations are advisory — apply never installs packages; `pm profile show <name>` lists the suggested `pm package install <spec>` candidates. The same surface is available to agents through the `pm_profile` MCP tool.
787
+
788
+ `pm profile lint <name>` runs an author-time consistency check on a built-in or extension-contributed profile without touching the tracker, surfacing graded findings: `error` for problems that would make `apply` throw or silently lose data (invalid/duplicate types, statuses, or fields; unknown/invalid config knobs; malformed workflow transitions) and `warning` for structurally-valid but suspicious content (workflows governing or referencing types/statuses the profile never declares, templates creating an undeclared type, a non-canonical profile name, empty title/summary/package spec). It exits non-zero when the profile has any `error`-severity finding (warnings keep it green), so it gates cleanly in CI as `pm profile lint <name>`. The same check is exposed to package authors as the SDK `lintProjectProfile` / `assertProjectProfile` primitives — see [SDK.md](./SDK.md).
789
+
790
+ Profiles are extensible: a package can ship its own archetype with `api.registerProfile(profile)` (built on the public SDK `defineProjectProfile` primitive — see [SDK.md](./SDK.md)). When the package is active, its profile appears in `pm profile list` (labelled with its source package) and resolves through `pm profile show`/`apply` exactly like a built-in. Built-in names are reserved, so a package profile can never silently shadow `agile`/`ops`/`research`. The bundled [pm-kanban](../packages/pm-kanban/README.md) package registers a `kanban` continuous-flow archetype this way.
791
+
755
792
  ## Plan Workflow
756
793
 
757
794
  `pm plan` is the agent-optimized planning loop built on the first-class `Plan` item type. Plans persist ordered steps, evidence, decisions, discoveries, validation, and resume context. Each mutation appends a history entry; full hash-chain replay is preserved.
@@ -32,11 +32,10 @@ Bundled first-party packages live under `packages/pm-*`:
32
32
 
33
33
  ```bash
34
34
  pm package catalog --project
35
- pm install '*' --project
36
35
  pm install all --project
37
36
  pm install calendar --project
38
37
  pm install search-advanced --project
39
- pm install governance-audit --project
38
+ pm install kanban --project
40
39
  ```
41
40
 
42
41
  `pm install '*'`, `pm install all`, and shell-expanded `pm install *` are normalized to the same bundled install-all request. First-party package aliases come from each package manifest, with a fallback derived from the `packages/pm-*` directory name.
@@ -87,7 +86,7 @@ Package roots declare resources in `package.json` under `pm`:
87
86
 
88
87
  Installation activates `pm.extensions`. `pm.docs`, `pm.examples`, `pm.assets`, and `pm.prompts` are catalog metadata (metadata-only — they are discovered and surfaced in the catalog but not executed). Declare agent-facing prompt/slash-command markdown under `pm.prompts` and non-code assets (images, skills, fixtures) under `pm.assets`; their conventional roots are `prompts/` (also `.agents/pm/prompts/`) and `assets/` (also `.agents/pm/assets/`).
89
88
 
90
- `pm package init` emits a root extension (`"extensions": ["."]`) authored fully in TypeScript (ADR [pm-2c28](../.agents/pm/decisions/pm-2c28.toon)): a typed `index.ts`, a strict `tsconfig.json`, and `build`/`test` scripts, with the manifest `entry` pointing at the compiled `./index.js`. Run `npm install && npm run build` to produce that entry before `pm install`. The generated README shows how to author exported command/hook definitions with the SDK [define* builders](../.agents/pm/decisions/pm-3mph.toon). The default `--capability commands` scaffold registers a starter command and a colocated `node:test` suite. `--capability hooks` keeps the starter command and adds an `after_command` lifecycle hook plus SDK testing coverage with `assertRegisteredHook` and `runRegisteredHookForTest`, giving package authors a runnable template for reacting to pm mutations when project management is context management. `--capability search` keeps the starter command and adds a deterministic search provider/vector-store adapter pair plus SDK tests with `assertRegisteredSearchProvider`, `assertRegisteredVectorStoreAdapter`, `runRegisteredSearchProviderForTest`, and `runRegisteredVectorStoreAdapterForTest`, giving retrieval packages a copyable context-management primitive without external services. `--capability importers` keeps the starter command and adds paired import/export command registrations plus SDK tests with `assertRegisteredImporter`, `assertRegisteredExporter`, `runRegisteredImporterForTest`, and `runRegisteredExporterForTest`, giving integration packages a copyable context-movement primitive for synchronizing external project systems; the generated manifest declares both `importers` and `schema` because the starter includes schema-governed flag metadata. Starter manifests use the same least-privilege policy metadata as pure first-party command packages: `trusted: true`, `sandbox_profile: "strict"`, and explicit `false` permissions for `fs_read`, `fs_write`, `network`, `env_read`, `env_write`, and `process_spawn`. Larger packages may point at nested extension directories after declaring runtime dependencies, relaxing only the permissions they actually need, and validating with `pm package doctor`.
89
+ `pm package init` emits a root extension (`"extensions": ["."]`) authored **and loaded** as TypeScript (ADR [pm-2c28](../.agents/pm/decisions/pm-2c28.toon) / [pm-m1uz](../.agents/pm/decisions/pm-m1uz.toon)): a typed `index.ts`, a strict type-check-only `tsconfig.json`, and `typecheck`/`test` scripts, with the manifest `entry` pointing at `./index.ts` itself. pm loads that `.ts` entry directly via Node's native type stripping (Node >=22.18), so there is no build step — run `npm install` (for the peer SDK and type-checking) before `pm install`. The generated README shows how to author exported command/hook definitions with the SDK [define* builders](../.agents/pm/decisions/pm-3mph.toon). The default `--capability commands` scaffold registers a starter command and a colocated `node:test` suite. `--capability hooks` keeps the starter command and adds an `after_command` lifecycle hook plus SDK testing coverage with `assertRegisteredHook` and `runRegisteredHookForTest`, giving package authors a runnable template for reacting to pm mutations when project management is context management. `--capability search` keeps the starter command and adds a deterministic search provider/vector-store adapter pair plus SDK tests with `assertRegisteredSearchProvider`, `assertRegisteredVectorStoreAdapter`, `runRegisteredSearchProviderForTest`, and `runRegisteredVectorStoreAdapterForTest`, giving retrieval packages a copyable context-management primitive without external services. `--capability importers` keeps the starter command and adds paired import/export command registrations plus SDK tests with `assertRegisteredImporter`, `assertRegisteredExporter`, `runRegisteredImporterForTest`, and `runRegisteredExporterForTest`, giving integration packages a copyable context-movement primitive for synchronizing external project systems; the generated manifest declares both `importers` and `schema` because the starter includes schema-governed flag metadata. `--capability schema` keeps the starter command and registers a custom item type, item field, and migration via `api.registerItemTypes`, `api.registerItemFields`, and `api.registerMigration`, with SDK tests using `assertRegisteredItemType`, `assertRegisteredItemField`, `assertRegisteredMigration`, and `runRegisteredMigrationForTest`; it deliberately omits `activation.commands` because a custom item type is a global contribution that built-in commands (`pm create <type>`, `pm list`, `pm validate`) must see, so pm activates it conservatively for every command. `--capability profile` keeps the starter command and registers a complete project-profile archetype — item types, custom statuses, fields, a per-type workflow, config knobs, a create template, and package recommendations — via `api.registerProfile`, with an SDK test using the harness-bound `assertProfile` (the public `assertRegisteredProfile`); like the schema starter it omits `activation.commands` because the contributed profile is resolved by the built-in `pm profile list/show/apply` commands (granted by the same `schema` capability, since a profile is a schema+config bundle), so pm activates it conservatively for every command and `pm profile apply <name>` tailors a fresh tracker in one shot. The remaining four capabilities complete the matrix to one starter per SDK registration surface. `--capability renderers` keeps the starter command and adds a `toon` output renderer override via `api.registerRenderer` (scoped to its own command — it returns `null` to pass other output through to pm's default renderer) plus SDK tests with `assertRegisteredRendererOverride` and `runRegisteredRendererOverrideForTest`. `--capability parser` adds a parser override via `api.registerParser` that rewrites the command's parsed options before its handler runs (a deprecated `--shout`→`--upper` alias rewrite); the starter command declares the matching `--shout`/`--upper` flags and surfaces the normalized value so the override is runnable end to end through `pm <command> --shout`, and the manifest also declares `schema` because flag metadata is schema-governed, with SDK tests using `assertRegisteredParserOverride` and `runRegisteredParserOverrideForTest`. `--capability preflight` adds a preflight override via `api.registerPreflight` over pm's pre-run migration/format gate decision (a safe no-op echo by default) plus SDK tests with `assertRegisteredPreflightOverride` and `runRegisteredPreflightOverrideForTest`. `--capability services` overrides the built-in `output_format` service via `api.registerService` (scoped to its own command, passing other commands' output through) plus SDK tests with `assertRegisteredServiceOverride` and `runRegisteredServiceOverrideForTest`. Starter manifests use the same least-privilege policy metadata as pure first-party command packages: `trusted: true`, `sandbox_profile: "strict"`, and explicit `false` permissions for `fs_read`, `fs_write`, `network`, `env_read`, `env_write`, and `process_spawn`. Larger packages may point at nested extension directories after declaring runtime dependencies, relaxing only the permissions they actually need, and validating with `pm package doctor`, which additionally emits the advisory `extension_schema_narrow_activation` warning when a package registers custom item types/fields yet declares narrow `activation.commands` (the schema footgun above), recommending the field be dropped so the type stays globally available.
91
90
 
92
91
  Package tests can pair `readPmPackageManifest(packageRoot)` with
93
92
  `assertPackageManifest(manifest, { resources: ... })` from
@@ -112,13 +111,13 @@ Runtime path overrides:
112
111
  - `PM_PATH`: project tracker root
113
112
  - `PM_GLOBAL_PATH`: global profile root
114
113
 
115
- Extensions are authored fully in TypeScript (ADR [pm-2c28](../.agents/pm/decisions/pm-2c28.toon)): a minimal standalone extension has a `manifest.json` and a TypeScript `index.ts` entrypoint compiled to the `./index.js` the loader imports by file URL. Author against the SDK types with `import type { ExtensionApi }` — the type-only import is erased at compile time, so the emitted `index.js` carries **no runtime import** of `@unbrained/pm-cli` (standalone entries are loaded outside any `node_modules`, so a runtime SDK import would fail). Compile with `npx tsc` after installing `typescript` and `@unbrained/pm-cli` for the type resolution.
114
+ Extensions are authored **and loaded** as TypeScript (ADR [pm-2c28](../.agents/pm/decisions/pm-2c28.toon) / [pm-m1uz](../.agents/pm/decisions/pm-m1uz.toon)): a minimal standalone extension has a `manifest.json` and a TypeScript `index.ts` entrypoint the loader imports directly by file URL via Node's native type stripping (Node >=22.18) — there is no compile step and no `./index.js`. Author against the SDK types with `import type { ExtensionApi }` — the type-only import is erased on load, so the `.ts` entry carries **no runtime import** of `@unbrained/pm-cli` (standalone entries are loaded outside any `node_modules`, so a runtime SDK import would fail). Type-check with `npx tsc --noEmit` after installing `typescript` and `@unbrained/pm-cli` for the type resolution.
116
115
 
117
116
  ```json
118
117
  {
119
118
  "name": "hello",
120
119
  "version": "0.1.0",
121
- "entry": "./index.js",
120
+ "entry": "./index.ts",
122
121
  "manifest_version": 1,
123
122
  "pm_min_version": "2026.5.0",
124
123
  "pm_max_version": "2027.0.0",
@@ -137,7 +136,7 @@ Extensions are authored fully in TypeScript (ADR [pm-2c28](../.agents/pm/decisio
137
136
  ```
138
137
 
139
138
  ```ts
140
- // index.ts — `import type` is erased at compile; the emitted index.js has no runtime import.
139
+ // index.ts — the manifest entry; `import type` is erased on load (native type stripping), so it has no runtime import.
141
140
  import type { ExtensionApi } from "@unbrained/pm-cli/sdk";
142
141
  export function activate(api: ExtensionApi): void {
143
142
  api.registerCommand({
@@ -201,8 +200,8 @@ Rules:
201
200
  - An empty-string or non-string `pm_min_version`/`pm_max_version` makes the whole manifest malformed (`extension_manifest_invalid:<layer>:<name>`). Omit the field instead of leaving it blank.
202
201
  - Optional `engines.pm` and `engines.node` metadata is accepted for tooling, but `pm_min_version`/`pm_max_version` are the loader-enforced compatibility fields.
203
202
  - Declare only capabilities the extension actually uses. Declaring a capability it never registers against is over-broad: `pm package doctor` emits an advisory `extension_capability_unused:<layer>:<name>:<capability>` warning (never blocking) so you can trim the manifest, while the inverse — registering a surface whose capability is undeclared — is the blocking `extension_capability_missing` activation failure. Catch over-declaration earlier with the `assertExtensionCapabilityUsage` SDK testing helper.
204
- - Unknown capabilities emit deterministic warnings.
205
- - Legacy aliases such as `migration` and `validation` are normalized to `schema` with warnings.
203
+ - `activation.commands` is an optional array of the command paths the extension registers (e.g. `["hello", "tickets import"]`). pm uses it to activate the extension lazily — importing and running `activate` only when an invoked command matches — so declaring it (every first-party package and `pm package init` scaffold does) keeps the extension's own commands dispatchable while unrelated commands skip the import. Omit it and pm falls back to capability heuristics, which cannot enumerate the contributed commands. Globally-scoped surfaces (hooks, parser/preflight/renderer overrides, and search providers for built-in search commands) activate regardless of this list.
204
+ - Unknown capabilities emit deterministic warnings; legacy aliases such as `migration` and `validation` are normalized to `schema` with warnings.
206
205
 
207
206
  Supported capabilities:
208
207
 
@@ -223,6 +222,7 @@ First-party package exemplars:
223
222
  - `pm-command-kit`: command capability exemplar for `registerCommand`, `registerFlags`, and `registerParser`.
224
223
  - `pm-governance-audit`: governance hook exemplar for compact read/write sidecar logs.
225
224
  - `pm-guide-shell`: guide-topic package for bundled workflow docs.
225
+ - `pm-kanban`: archetype exemplar shipping a complete Kanban continuous-flow profile (Card type, flow fields, and a `ProjectProfileDefinition`) on public SDK primitives.
226
226
  - `pm-lifecycle-hooks`: default-inert lifecycle hook registration.
227
227
  - `pm-linked-test-adapters`: linked-test run-management adapters and reporters.
228
228
  - `pm-search-advanced`: deterministic local search provider registration.
@@ -300,12 +300,11 @@ Common APIs:
300
300
  - `api.registerItemFields(fields)` adds custom metadata fields. Agents can set declared fields with repeatable `pm create --field name=value` and `pm update <id> --field name=value`; undeclared names are rejected. Each field `type` is validated against `string | number | boolean | array | object` at activation, with a did-you-mean hint on typos.
301
301
  - `api.registerItemTypes(types)` adds custom item types.
302
302
  - `api.registerMigration(definition)` adds schema migrations.
303
+ - `api.registerProfile(profile)` contributes a project profile — a declarative archetype bundling item types, statuses, fields, per-type workflows, config, templates, and package recommendations. Once active it resolves by name through `pm profile list/show/apply` alongside the core `agile`/`ops`/`research` archetypes (built-in names are reserved; a colliding registration is ignored with a warning). Requires the `schema` capability.
303
304
  - `api.registerService("output_format", handler)` customizes output formatting through the service override API. Return `context.payload`, `null`, or `undefined` for commands the extension does not own.
304
305
  - `api.registerRenderer("toon" | "json", renderer)` adds format-specific renderers. Return `null` for unrelated payloads so pm falls back to native rendering.
305
306
  - `api.hooks.beforeCommand(handler)`, `api.hooks.afterCommand(handler)`, `api.hooks.onWrite(handler)`, `api.hooks.onRead(handler)`, and `api.hooks.onIndex(handler)` add lifecycle hooks.
306
- `afterCommand` receives command outcome fields plus optional compact `affected`
307
- item entries for mutations, including `previous_status`, `status`,
308
- `changed_fields`, and partial `previous`/`current` front matter snapshots.
307
+ `afterCommand` receives command outcome fields plus optional compact `affected` item entries for mutations, including `previous_status`, `status`, `changed_fields`, and partial `previous`/`current` front matter snapshots.
309
308
  `onWrite` always includes `path`, `scope`, and `op`; item mutations also add optional `item_id`, `item_type`, `before`, `after`, and `changed_fields`.
310
309
  - An optional module-level `deactivate()` export (VS Code-style) is invoked by the host on shutdown/reload — including by the long-running MCP server between native-action requests — to close connections, clear timers, and release resources opened during `activate`. Teardown is best-effort and timeout-bounded by default so it does not block other extensions, except when a host explicitly disables waiting limits with `deactivate_timeout_ms: 0` or `Infinity`, which can wait indefinitely for a hanging `deactivate()` hook.
311
310
 
@@ -339,8 +338,8 @@ Explore installed runtime entries, or describe exactly what each loaded package
339
338
 
340
339
  ```bash
341
340
  pm package explore --project
342
- pm package describe --project # every loaded package
343
- pm package describe my-extension # one package's surface map
341
+ pm package describe --project # surface map of every loaded package
342
+ pm package describe my-extension --markdown --output docs/my-extension-reference.md
344
343
  ```
345
344
 
346
345
  Run diagnostics:
package/docs/RELEASING.md CHANGED
@@ -36,6 +36,7 @@ pnpm version:check
36
36
  ## One-Time Setup
37
37
 
38
38
  - Use npm provenance publishing for `.github/workflows/release.yml` so GitHub-hosted release jobs publish signed packages. Keep `id-token: write`, Node 24 or newer, npm 11.5.1 or newer, `NODE_AUTH_TOKEN` from the `release` environment `NPM_TOKEN` secret, and `npm publish --access public --provenance`. The token must authenticate as a maintainer with read-write access to `@unbrained/pm-cli`.
39
+ - Add `RELEASE_PAT` to the `release` environment from a maintainer token with `contents:write` and branch-protection bypass rights. Auto Release creates a checked version/changelog commit and tag on `main`; the default `GITHUB_TOKEN` has `contents:write` but cannot satisfy protected-branch required status checks for that freshly-created commit. The workflow does not persist this elevated token during checkout or dependency installation; `run-release-pipeline.mjs` scopes it to the git push process.
39
40
  - Add `SENTRY_AUTH_TOKEN` as an optional GitHub Environment or repository secret when Sentry release creation and sourcemap upload should run. Add `SENTRY_PERSONAL_ADMIN_TOKEN` for the GitHub-hosted Sentry issue-threshold gate; CI-scoped release tokens may not have issue-read scope. The release workflow skips Sentry upload cleanly when `SENTRY_AUTH_TOKEN` is absent, but fails the reliability threshold gate when `SENTRY_PERSONAL_ADMIN_TOKEN` is absent; local maintainers should still run the token-backed Sentry gate before release.
40
41
  - Keep any `release` environment compatible with free GitHub features. This repository is public, so environment secrets and tag/branch deployment rules are compatible with the free GitHub path; do not add paid-only release gates.
41
42
  - Ensure `GITHUB_TOKEN` has `contents: write` for GitHub Release creation.
@@ -54,8 +55,11 @@ Policy:
54
55
  - same-day follow-up release (`YYYY.M.D-N`) is manual-only via `allow_same_day_release=true`
55
56
  - release preparation must pass all quality and compatibility gates before commit+tag push
56
57
  - `CHANGELOG.md` is generated by the latest npm `pm-changelog` package (`pm install npm:pm-changelog --project`, then `pm changelog generate --mode replace --all-release-tags`) from closed tracker items across git release tag windows and checked in CI; do not edit it by hand
58
+ - protected-branch pushes require `RELEASE_PAT`; Auto Release fails fast before the expensive release gates when `push=true`, `dry_run=false`, and that secret is not configured
57
59
  - release reliability gating requires `SENTRY_PERSONAL_ADMIN_TOKEN` for issue-threshold checks; Auto Release fails before creating the version commit/tag when the token is missing and `push=true`, while sourcemap upload remains optional through `SENTRY_AUTH_TOKEN`
58
60
  - after creating and pushing a new tag, auto-release dispatches `.github/workflows/release.yml` with that tag and waits for the publish workflow to finish, because GitHub does not start normal push/tag workflows from `GITHUB_TOKEN` pushes
61
+ - scheduled failure issues include the preflight state (`push`, `dry_run`, `release_pat_configured`, and `sentry_personal_admin_token_configured`) plus a detected cause so agents can distinguish missing release secrets from Sentry gate failures without scanning the full workflow log first
62
+ - after a scheduled run publishes a tag and the downstream release workflow succeeds, auto-release closes any open `Auto Release blocked` issue so the GitHub tracker reflects current release health
59
63
 
60
64
  Pipeline entrypoint:
61
65
 
@@ -164,7 +168,7 @@ git push origin v<version>
164
168
  - version policy and tag guard
165
169
  - secret scan
166
170
  - build, typecheck, test, and coverage
167
- - static quality gate (complexity, duplication, dead/orphan module, file/folder hygiene)
171
+ - static quality gate (shared complexity, duplication, dead/orphan module, file/folder hygiene, source/exported docstring coverage profile)
168
172
  - temporary-project compatibility gate against latest published tracker data
169
173
  - reliability threshold gate (Sentry severity threshold, bounded to a recent-activity window via `--sentry-window-days` (default `14`, `0` = unbounded) so a stale benign unresolved issue cannot block every scheduled release; `--telemetry-mode` gate policy: `off` | `best-effort` | `required`). Scheduled `auto-release.yml` failures open/update an `Auto Release blocked` GitHub issue so blocked daily releases are never silently skipped.
170
174
  - sandboxed `pm` coverage
@@ -202,6 +206,7 @@ Use the npm registry package for maintainer global updates. Do not use `npm inst
202
206
 
203
207
  - If local gates fail, fix and rerun before tagging.
204
208
  - Treat failed scheduled Nightly Validation jobs as release-health blockers until triaged. The nightly workflow opens or updates a GitHub issue for each failing scheduled OS/Node matrix entry, with the run URL and commit SHA, so cross-platform regressions do not rely on someone manually scanning the Actions tab.
209
+ - Treat a green manual Auto Release dry-run (`push=false` or `dry_run=true`) as gate confidence only. It does not prove the protected-branch publish path; scheduled production runs still require `RELEASE_PAT` and `SENTRY_PERSONAL_ADMIN_TOKEN` to be configured in the `release` environment.
205
210
  - If the tag workflow fails before npm publish, confirm no package was published before moving or replacing a tag.
206
211
  - If npm publish succeeds but GitHub Release creation fails, rerun `.github/workflows/release.yml` with `workflow_dispatch` and `tag=v<version>`; the workflow skips duplicate npm publish, reruns public verification, and creates the GitHub Release for the existing tag.
207
212
  - Record failure evidence and remediation in the release `pm` item.
package/docs/SDK.md CHANGED
@@ -41,6 +41,7 @@ Common authoring exports:
41
41
  - `composeExtensionPackage` (author-once capstone: returns both the module and its synthesized manifest)
42
42
  - `synthesizeExtensionManifest` (generate a complete least-privilege manifest from a blueprint)
43
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)
44
45
  - `checkExtensionManifestCompatibility` (author-time `pm_min_version`/`pm_max_version` check against a target pm version)
45
46
  - `preflightExtension` (one-call capstone: lint + manifest synthesis + version-compat in a single consolidated report)
46
47
  - `EXTENSION_CAPABILITIES`
@@ -58,11 +59,29 @@ Common authoring exports:
58
59
  Registration builders (`define*`, zero-cost identity — see [Authoring Builders](#authoring-builders)):
59
60
 
60
61
  - `defineCommand` / `defineFlag` / `defineItemType` / `defineItemField` / `defineMigration`
62
+ - `defineProjectProfile` (archetype bundle of types/statuses/fields/workflows/config/templates/packages — powers `pm profile`)
61
63
  - `defineSearchProvider` / `defineVectorStoreAdapter`
62
64
  - `defineCommandOverride` / `defineParserOverride` / `definePreflightOverride` / `defineServiceOverride` / `defineRendererOverride`
63
65
  - `defineImporter` / `defineExporter`
64
66
  - `defineBeforeCommandHook` / `defineAfterCommandHook` / `defineOnWriteHook` / `defineOnReadHook` / `defineOnIndexHook`
65
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
+
66
85
  Package manifest exports:
67
86
 
68
87
  - `PM_PACKAGE_RESOURCE_KINDS` (`extensions`, `docs`, `examples`, `assets`, `prompts`)
@@ -118,6 +137,7 @@ Testing helper exports (also under `@unbrained/pm-cli/sdk/testing`):
118
137
  - `assertRegisteredVectorStoreAdapter`
119
138
  - `assertRegisteredItemField`
120
139
  - `assertRegisteredItemType`
140
+ - `assertRegisteredProfile`
121
141
  - `assertRegisteredServiceOverride`
122
142
  - `assertRegisteredMigration`
123
143
  - `assertExtensionCapabilityUsage`
@@ -127,6 +147,7 @@ Testing helper exports (also under `@unbrained/pm-cli/sdk/testing`):
127
147
  - `assertExtensionPreflight` (one-line throwing capstone over `preflightExtension`; replaces chaining the three asserts above)
128
148
  - `describeExtensionActivation`
129
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`)
130
151
 
131
152
  `createExtensionTestHarness(module, options)` is the recommended entry point and
132
153
  the ergonomic capstone over every standalone helper below: it activates the
@@ -137,8 +158,13 @@ never threads `activation.registrations` vs `activation.commands` vs
137
158
  surfaces as a confusing `available: (none)` error. Write
138
159
  `const ext = await createExtensionTestHarness(module, { capabilities: ["commands"] })`,
139
160
  then `ext.assertCommandContract({ command })`, `await ext.runCommand({ command })`,
140
- and `await ext.deactivate()`. The methods do not use `this`, so they remain safe
141
- 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`
142
168
  stays public as an escape hatch to the standalone helpers for any surface a
143
169
  convenience method does not cover.
144
170
 
@@ -289,6 +315,33 @@ to "what does this installed package add to my context?" — distinct from
289
315
  `pm package doctor` (errors/policy) and `pm package manage` (update metadata), which
290
316
  report only command/action paths, not the full registration surface.
291
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
+
292
345
  Commander option contract exports:
293
346
 
294
347
  - `CREATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS`
@@ -413,6 +466,8 @@ const ext = await createExtensionTestHarness(extensionModule, { capabilities: ["
413
466
  ext.assertCommandContract({ command: "incident triage", flags: ["--severity"] });
414
467
  ext.assertFlags({ targetCommand: "list", flags: ["--incident-filter"] });
415
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" });
416
471
  await ext.deactivate();
417
472
  ```
418
473
 
@@ -428,6 +483,7 @@ For provider-safe schemas, use `PM_PROVIDER_TOOL_PARAMETERS_SCHEMA`. It is flat
428
483
  | `registerItemFields` | `schema` |
429
484
  | `registerItemTypes` | `schema` |
430
485
  | `registerMigration` | `schema` |
486
+ | `registerProfile` | `schema` |
431
487
  | `registerImporter` | `importers` |
432
488
  | `registerExporter` | `importers` |
433
489
  | `registerParser` | `parser` |
@@ -478,7 +534,7 @@ Manifest:
478
534
  {
479
535
  "name": "hello",
480
536
  "version": "0.1.0",
481
- "entry": "./index.js",
537
+ "entry": "./index.ts",
482
538
  "pm_min_version": "2026.5.31",
483
539
  "trusted": true,
484
540
  "sandbox_profile": "strict",
@@ -502,7 +558,7 @@ Manifest typing also accepts optional `engines` metadata:
502
558
  {
503
559
  "engines": {
504
560
  "pm": ">=2026.5.31",
505
- "node": ">=20"
561
+ "node": ">=22.18"
506
562
  }
507
563
  }
508
564
  ```
@@ -527,7 +583,59 @@ scaffold paired import/export commands with example flag metadata and a runnable
527
583
  `node:test` file that exercises `assertRegisteredImporter`,
528
584
  `assertRegisteredExporter`, `runRegisteredImporterForTest`, and
529
585
  `runRegisteredExporterForTest`; the generated manifest declares both `importers`
530
- 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.
531
639
 
532
640
  ## Self-Identity and Lifecycle
533
641
 
@@ -645,8 +753,8 @@ argument unchanged), exactly like `defineExtension` and the wider
645
753
  `defineConfig`/`defineComponent` ecosystem convention — the value is entirely at
646
754
  the type level.
647
755
 
648
- pm packages are authored fully in TypeScript (ADR
649
- [pm-2c28](../.agents/pm/decisions/pm-2c28.toon)). A bare `const cmd = { ... }`
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 = { ... }`
650
758
  satisfies the registration types only structurally and widens its literals;
651
759
  wrapping it in a builder checks the object against the contract *and* preserves
652
760
  the narrow literal types, while inferring the nested handler's `context`
@@ -750,6 +858,16 @@ malformed definition surfaces the same activation diagnostic as a hand-written
750
858
  hand-written `activate` bodies so they load in extension-only installs; reach for
751
859
  `composeExtension` in npm package-mode authoring where the SDK is a dependency.
752
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
+
753
871
  ### Modular blueprints
754
872
 
755
873
  Tracked: [pm-high](../.agents/pm/tasks/pm-high.toon),
@@ -772,10 +890,10 @@ export const commandsModule = defineExtensionBlueprint({
772
890
  ```
773
891
 
774
892
  ```ts
775
- // index.ts — NodeNext import specifiers keep the .js extension; they resolve to the .ts source.
893
+ // index.ts — the manifest entry; import sibling .ts modules by their real extension (loaded directly via native type stripping).
776
894
  import { composeExtension, mergeExtensionBlueprints } from "@unbrained/pm-cli/sdk";
777
- import { commandsModule } from "./commands.js";
778
- import { searchModule } from "./search.js";
895
+ import { commandsModule } from "./commands.ts";
896
+ import { searchModule } from "./search.ts";
779
897
 
780
898
  export default composeExtension(mergeExtensionBlueprints(commandsModule, searchModule));
781
899
  ```
@@ -813,7 +931,7 @@ import { synthesizeExtensionManifest } from "@unbrained/pm-cli/sdk";
813
931
  const manifest = synthesizeExtensionManifest(blueprint, {
814
932
  name: "command-kit",
815
933
  version: "1.0.0",
816
- entry: "./index.js",
934
+ entry: "./index.ts",
817
935
  priority: 0,
818
936
  });
819
937
  manifest.capabilities; // ["commands", "parser", "schema"] — derived, not hand-written
@@ -844,7 +962,7 @@ import { composeExtensionPackage } from "@unbrained/pm-cli/sdk";
844
962
  const { module, manifest } = composeExtensionPackage(blueprint, {
845
963
  name: "command-kit",
846
964
  version: "1.0.0",
847
- entry: "./index.js",
965
+ entry: "./index.ts",
848
966
  priority: 0,
849
967
  });
850
968
  export default module; // the package entry's default export
@@ -913,7 +1031,7 @@ const activation = await activateExtensionForTest({
913
1031
  manifest: {
914
1032
  name: "hello-ext",
915
1033
  version: "0.1.0",
916
- entry: "./index.js",
1034
+ entry: "./index.ts",
917
1035
  priority: 0,
918
1036
  capabilities: ["commands", "schema"],
919
1037
  },
@@ -1024,14 +1142,14 @@ import { assertExtensionPreflight } from "@unbrained/pm-cli/sdk/testing";
1024
1142
 
1025
1143
  // Inspect every author-time stage in one report…
1026
1144
  const report = preflightExtension(blueprint, {
1027
- identity: { name: "command-kit", version: "1.0.0", entry: "./index.js", priority: 0 },
1145
+ identity: { name: "command-kit", version: "1.0.0", entry: "./index.ts", priority: 0 },
1028
1146
  target: { pmVersion: "2026.6.23" },
1029
1147
  });
1030
1148
  // report.manifest.capabilities (derived), report.compatibility.compatible, report.findings[]
1031
1149
 
1032
1150
  // …or guard the whole package in one CI line.
1033
1151
  assertExtensionPreflight(blueprint, {
1034
- identity: { name: "command-kit", version: "1.0.0", entry: "./index.js", priority: 0 },
1152
+ identity: { name: "command-kit", version: "1.0.0", entry: "./index.ts", priority: 0 },
1035
1153
  target: { pmVersion: "2026.6.23" },
1036
1154
  });
1037
1155
  ```
@@ -1234,9 +1352,58 @@ const migration = assertRegisteredMigration(activation.registrations, {
1234
1352
  // migration.definition is the normalized SchemaMigrationDefinition
1235
1353
  ```
1236
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
+
1237
1403
  Together these complete the SDK assertion surface: every extension `register*`
1238
- method now has a matching `assertRegistered*` helper, so packages can prove any
1239
- 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.
1240
1407
 
1241
1408
  The three executable registration surfaces add `runRegistered*ForTest` invoke
1242
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