@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
@@ -0,0 +1,422 @@
1
+ /**
2
+ * @module core/profile/profile-lint
3
+ *
4
+ * Author-time, tracker-independent consistency linting for a
5
+ * {@link ProjectProfileDefinition}. This is the project-profile analogue of the
6
+ * extension surface's `lintExtensionBlueprint`: where `defineProjectProfile`
7
+ * (and `api.registerProfile`) only assert structural shape, and
8
+ * {@link module:core/profile/profile-plan planProfileApplication} only validates
9
+ * config knobs fail-fast against a live tracker at apply time, this linter
10
+ * inspects a profile definition in isolation and reports *every* problem at once
11
+ * across all eight dimensions.
12
+ *
13
+ * Findings are graded:
14
+ * - `error` — a condition that makes `pm profile apply` throw or silently lose
15
+ * data (an invalid type/status/field the upsert normalizer rejects, a
16
+ * duplicate key whose later entry overwrites the earlier one, an unknown or
17
+ * invalid config knob the planner rejects, an empty profile name resolution
18
+ * requires, or a malformed workflow transition pair the workflow resolver
19
+ * silently drops).
20
+ * - `warning` — authored content that is structurally valid but very likely a
21
+ * bug (a workflow governing a type the profile never declares, a transition
22
+ * referencing a status token no profile/built-in status defines — a dead,
23
+ * unreachable rule — a template whose `type` references an undeclared type, a
24
+ * profile name resolution would fold, or an empty title/summary/package spec).
25
+ *
26
+ * Cross-reference checks are warnings rather than errors because the referenced
27
+ * type or status MAY already exist in the target tracker independently of the
28
+ * profile (profiles layer onto whatever schema is present), so erroring would
29
+ * produce false positives against valid layered setups.
30
+ *
31
+ * Everything here is pure and side-effect-free so it is fully coverage-gated; the
32
+ * CLI `pm profile lint` command and the SDK `assertProjectProfile` helper are
33
+ * thin wrappers around {@link lintProjectProfile}.
34
+ */
35
+
36
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="22ba01dc-013c-507c-b2f7-fbe6b71b3bc3")}catch(e){}}();
37
+ import { BUILTIN_ITEM_TYPE_VALUES } from "../../types/index.js";
38
+ import { parseNestedSettingValue, resolveNestedSettingDescriptor } from "../config/nested-settings.js";
39
+ import { normalizeAddFieldInput } from "../schema/fields-file.js";
40
+ import { normalizeAddStatusInput } from "../schema/status-defs-file.js";
41
+ import { normalizeAddTypeInput } from "../schema/item-types-file.js";
42
+ import { normalizeStatusToken } from "../schema/type-workflows.js";
43
+ import { DEFAULT_RUNTIME_STATUS_DEFINITIONS } from "../schema/runtime-schema.js";
44
+ import { toErrorMessage } from "../shared/primitives.js";
45
+ import { normalizeProfileLookupKey } from "./profile-presets.js";
46
+ /** Profile dimension a lint finding is attributed to. */
47
+ export const PROFILE_LINT_DIMENSIONS = [
48
+ "profile",
49
+ "types",
50
+ "statuses",
51
+ "fields",
52
+ "workflows",
53
+ "config",
54
+ "templates",
55
+ "packages",
56
+ ];
57
+ /** Stable machine-readable codes every {@link ProjectProfileLintFinding} carries. */
58
+ export const PROFILE_LINT_CODES = [
59
+ "profile_name_empty",
60
+ "profile_name_not_normalized",
61
+ "profile_title_empty",
62
+ "profile_summary_empty",
63
+ "type_invalid",
64
+ "type_duplicate",
65
+ "status_invalid",
66
+ "status_duplicate",
67
+ "field_invalid",
68
+ "field_duplicate",
69
+ "workflow_type_empty",
70
+ "workflow_type_unknown",
71
+ "workflow_duplicate_type",
72
+ "workflow_transition_malformed",
73
+ "workflow_status_unknown",
74
+ "config_key_unknown",
75
+ "config_value_invalid",
76
+ "config_duplicate",
77
+ "template_type_unknown",
78
+ "package_spec_empty",
79
+ ];
80
+ /**
81
+ * Built-in status tokens (canonical ids and their aliases, normalized) every
82
+ * tracker recognizes regardless of profile. A workflow transition referencing one
83
+ * of these is always resolvable, so it never triggers a `workflow_status_unknown`
84
+ * warning. Computed once from the canonical defaults so it never drifts.
85
+ */
86
+ const BUILTIN_STATUS_TOKENS = new Set(DEFAULT_RUNTIME_STATUS_DEFINITIONS.flatMap((definition) => [
87
+ normalizeStatusToken(definition.id),
88
+ ...(definition.aliases ?? []).map((alias) => normalizeStatusToken(alias)),
89
+ ]).filter((token) => token.length > 0));
90
+ /** Built-in item type names, lower-cased for case-insensitive workflow/template matching. */
91
+ const BUILTIN_TYPE_KEYS = new Set(BUILTIN_ITEM_TYPE_VALUES.map((name) => name.toLowerCase()));
92
+ /** Lint the profile-level identity fields (name, title, summary). */
93
+ function lintProfileIdentity(profile, findings) {
94
+ if (profile.name.trim().length === 0) {
95
+ findings.push({
96
+ severity: "error",
97
+ code: "profile_name_empty",
98
+ dimension: "profile",
99
+ message: "Profile name must not be empty; profile resolution requires a non-blank name.",
100
+ });
101
+ }
102
+ else if (profile.name !== normalizeProfileLookupKey(profile.name)) {
103
+ findings.push({
104
+ severity: "warning",
105
+ code: "profile_name_not_normalized",
106
+ dimension: "profile",
107
+ target: profile.name,
108
+ message: `Profile name "${profile.name}" is not in canonical form; resolution folds it to "${normalizeProfileLookupKey(profile.name)}" (lowercase, hyphens as underscores).`,
109
+ });
110
+ }
111
+ if (profile.title.trim().length === 0) {
112
+ findings.push({
113
+ severity: "warning",
114
+ code: "profile_title_empty",
115
+ dimension: "profile",
116
+ message: "Profile title is empty; list and show surfaces will render a blank title.",
117
+ });
118
+ }
119
+ if (profile.summary.trim().length === 0) {
120
+ findings.push({
121
+ severity: "warning",
122
+ code: "profile_summary_empty",
123
+ dimension: "profile",
124
+ message: "Profile summary is empty; list and show surfaces will render a blank archetype description.",
125
+ });
126
+ }
127
+ }
128
+ /**
129
+ * Lint the item types, returning the set of declared type keys (lower-cased)
130
+ * collected from entries that normalize cleanly so workflow and template checks
131
+ * can resolve cross-references against them.
132
+ */
133
+ function lintTypes(profile, findings) {
134
+ const declared = new Set();
135
+ const seen = new Set();
136
+ for (const [index, type] of profile.types.entries()) {
137
+ let name;
138
+ try {
139
+ name = normalizeAddTypeInput(type).name;
140
+ }
141
+ catch (error) {
142
+ findings.push({
143
+ severity: "error",
144
+ code: "type_invalid",
145
+ dimension: "types",
146
+ target: typeof type.name === "string" ? type.name : `#${index}`,
147
+ message: toErrorMessage(error),
148
+ });
149
+ continue;
150
+ }
151
+ const key = name.toLowerCase();
152
+ if (seen.has(key)) {
153
+ findings.push({
154
+ severity: "error",
155
+ code: "type_duplicate",
156
+ dimension: "types",
157
+ target: name,
158
+ message: `Item type "${name}" is declared more than once; the later definition silently overwrites the earlier upsert.`,
159
+ });
160
+ continue;
161
+ }
162
+ seen.add(key);
163
+ declared.add(key);
164
+ }
165
+ return declared;
166
+ }
167
+ /**
168
+ * Lint the custom statuses, returning the set of declared status tokens (ids and
169
+ * aliases, normalized) collected from entries that normalize cleanly so workflow
170
+ * transition checks can resolve cross-references against them.
171
+ */
172
+ function lintStatuses(profile, findings) {
173
+ const declared = new Set();
174
+ const seen = new Set();
175
+ for (const [index, status] of profile.statuses.entries()) {
176
+ let normalized;
177
+ try {
178
+ normalized = normalizeAddStatusInput(status);
179
+ }
180
+ catch (error) {
181
+ findings.push({
182
+ severity: "error",
183
+ code: "status_invalid",
184
+ dimension: "statuses",
185
+ target: typeof status.id === "string" ? status.id : `#${index}`,
186
+ message: toErrorMessage(error),
187
+ });
188
+ continue;
189
+ }
190
+ if (seen.has(normalized.id)) {
191
+ findings.push({
192
+ severity: "error",
193
+ code: "status_duplicate",
194
+ dimension: "statuses",
195
+ target: normalized.id,
196
+ message: `Status "${normalized.id}" is declared more than once; the later definition silently overwrites the earlier upsert.`,
197
+ });
198
+ continue;
199
+ }
200
+ seen.add(normalized.id);
201
+ declared.add(normalized.id);
202
+ for (const alias of normalized.aliases ?? []) {
203
+ declared.add(normalizeStatusToken(alias));
204
+ }
205
+ }
206
+ return declared;
207
+ }
208
+ /** Lint the custom fields for invalid and duplicate keys. */
209
+ function lintFields(profile, findings) {
210
+ const seen = new Set();
211
+ for (const [index, field] of profile.fields.entries()) {
212
+ let key;
213
+ try {
214
+ key = normalizeAddFieldInput(field).key;
215
+ }
216
+ catch (error) {
217
+ findings.push({
218
+ severity: "error",
219
+ code: "field_invalid",
220
+ dimension: "fields",
221
+ target: typeof field.key === "string" ? field.key : `#${index}`,
222
+ message: toErrorMessage(error),
223
+ });
224
+ continue;
225
+ }
226
+ if (seen.has(key)) {
227
+ findings.push({
228
+ severity: "error",
229
+ code: "field_duplicate",
230
+ dimension: "fields",
231
+ target: key,
232
+ message: `Field "${key}" is declared more than once; the later definition silently overwrites the earlier upsert.`,
233
+ });
234
+ continue;
235
+ }
236
+ seen.add(key);
237
+ }
238
+ }
239
+ /**
240
+ * Lint the per-type workflows: flag workflows that govern an undeclared type,
241
+ * duplicate workflows for the same type, malformed transition pairs, and
242
+ * transitions referencing a status token no built-in or profile status defines.
243
+ */
244
+ function lintWorkflows(profile, declaredTypes, declaredStatuses, findings) {
245
+ const seenTypes = new Set();
246
+ for (const [index, workflow] of profile.workflows.entries()) {
247
+ const typeKey = workflow.type.trim().toLowerCase();
248
+ if (typeKey.length === 0) {
249
+ findings.push({
250
+ severity: "error",
251
+ code: "workflow_type_empty",
252
+ dimension: "workflows",
253
+ target: `#${index}`,
254
+ message: "Workflow has an empty type; the workflow resolver drops entries without a type.",
255
+ });
256
+ continue;
257
+ }
258
+ const duplicate = seenTypes.has(typeKey);
259
+ seenTypes.add(typeKey);
260
+ if (duplicate) {
261
+ // The unknown-type check already fired for the first occurrence, so only
262
+ // report the duplication here to avoid a redundant second finding.
263
+ findings.push({
264
+ severity: "warning",
265
+ code: "workflow_duplicate_type",
266
+ dimension: "workflows",
267
+ target: workflow.type,
268
+ message: `Workflow type "${workflow.type}" is declared more than once; the later transition set wins.`,
269
+ });
270
+ }
271
+ else if (!BUILTIN_TYPE_KEYS.has(typeKey) && !declaredTypes.has(typeKey)) {
272
+ findings.push({
273
+ severity: "warning",
274
+ code: "workflow_type_unknown",
275
+ dimension: "workflows",
276
+ target: workflow.type,
277
+ message: `Workflow governs type "${workflow.type}" which is neither a built-in type nor declared by this profile; it has no effect unless that type already exists.`,
278
+ });
279
+ }
280
+ // Each unknown status is reported once per workflow (not globally) so a later
281
+ // workflow referencing the same unresolved token is still surfaced in its own
282
+ // context.
283
+ const reportedUnknownStatuses = new Set();
284
+ for (const pair of workflow.allowed_transitions) {
285
+ const from = normalizeStatusToken(pair[0]);
286
+ const to = normalizeStatusToken(pair[1]);
287
+ if (from.length === 0 || to.length === 0) {
288
+ findings.push({
289
+ severity: "error",
290
+ code: "workflow_transition_malformed",
291
+ dimension: "workflows",
292
+ target: workflow.type,
293
+ message: `Workflow "${workflow.type}" has a transition with an empty status; the workflow resolver silently drops it.`,
294
+ });
295
+ continue;
296
+ }
297
+ for (const token of [from, to]) {
298
+ if (BUILTIN_STATUS_TOKENS.has(token) || declaredStatuses.has(token) || reportedUnknownStatuses.has(token)) {
299
+ continue;
300
+ }
301
+ reportedUnknownStatuses.add(token);
302
+ findings.push({
303
+ severity: "warning",
304
+ code: "workflow_status_unknown",
305
+ dimension: "workflows",
306
+ target: token,
307
+ message: `Workflow "${workflow.type}" references status "${token}" which is neither a built-in status nor declared by this profile; transitions to or from it are unreachable.`,
308
+ });
309
+ }
310
+ }
311
+ }
312
+ }
313
+ /**
314
+ * Lint the config knobs: resolve each descriptor, flag duplicates that would
315
+ * silently overwrite an earlier knob, and parse each value.
316
+ */
317
+ function lintConfig(profile, findings) {
318
+ const seen = new Set();
319
+ for (const entry of profile.config) {
320
+ const descriptor = resolveNestedSettingDescriptor(entry.key);
321
+ if (descriptor === undefined) {
322
+ findings.push({
323
+ severity: "error",
324
+ code: "config_key_unknown",
325
+ dimension: "config",
326
+ target: entry.key,
327
+ message: `Config knob "${entry.key}" is not a recognized setting; apply rejects it with a usage error.`,
328
+ });
329
+ continue;
330
+ }
331
+ // Dedupe on the resolved descriptor key so two entries that differ only by
332
+ // alias/casing (e.g. `search-provider` and `search_provider`) are caught.
333
+ if (seen.has(descriptor.key)) {
334
+ findings.push({
335
+ severity: "error",
336
+ code: "config_duplicate",
337
+ dimension: "config",
338
+ target: descriptor.key,
339
+ message: `Config knob "${descriptor.key}" is set more than once; the later value silently overwrites the earlier one.`,
340
+ });
341
+ }
342
+ else {
343
+ seen.add(descriptor.key);
344
+ }
345
+ const parsed = parseNestedSettingValue(descriptor, entry.value);
346
+ if (!parsed.ok) {
347
+ findings.push({
348
+ severity: "error",
349
+ code: "config_value_invalid",
350
+ dimension: "config",
351
+ target: entry.key,
352
+ message: parsed.error.message,
353
+ });
354
+ }
355
+ }
356
+ }
357
+ /** Lint the create templates: flag a `type` option referencing an undeclared type. */
358
+ function lintTemplates(profile, declaredTypes, findings) {
359
+ for (const template of profile.templates) {
360
+ const typeOption = template.options.type;
361
+ if (typeof typeOption !== "string" || typeOption.trim().length === 0) {
362
+ continue;
363
+ }
364
+ const typeKey = typeOption.trim().toLowerCase();
365
+ if (!BUILTIN_TYPE_KEYS.has(typeKey) && !declaredTypes.has(typeKey)) {
366
+ findings.push({
367
+ severity: "warning",
368
+ code: "template_type_unknown",
369
+ dimension: "templates",
370
+ target: template.name,
371
+ message: `Template "${template.name}" creates type "${typeOption}" which is neither a built-in type nor declared by this profile.`,
372
+ });
373
+ }
374
+ }
375
+ }
376
+ /** Lint the advisory package recommendations for an empty spec. */
377
+ function lintPackages(profile, findings) {
378
+ for (const [index, recommendation] of profile.packages.entries()) {
379
+ if (recommendation.spec.trim().length === 0) {
380
+ findings.push({
381
+ severity: "warning",
382
+ code: "package_spec_empty",
383
+ dimension: "packages",
384
+ target: `#${index}`,
385
+ message: "Package recommendation has an empty spec; it cannot be surfaced as an install hint.",
386
+ });
387
+ }
388
+ }
389
+ }
390
+ /**
391
+ * Lints a project profile definition for internal consistency, returning every
392
+ * graded finding across all dimensions. Pure and tracker-independent: it never
393
+ * reads disk or settings, so authors can call it on a `defineProjectProfile`
394
+ * value, the CLI can call it on a resolved built-in or extension-contributed
395
+ * profile, and tests can gate against it.
396
+ *
397
+ * @param profile The profile definition to lint.
398
+ * @returns A report whose `ok` flag is true exactly when no `error` findings
399
+ * were produced.
400
+ */
401
+ export function lintProjectProfile(profile) {
402
+ const findings = [];
403
+ lintProfileIdentity(profile, findings);
404
+ const declaredTypes = lintTypes(profile, findings);
405
+ const declaredStatuses = lintStatuses(profile, findings);
406
+ lintFields(profile, findings);
407
+ lintWorkflows(profile, declaredTypes, declaredStatuses, findings);
408
+ lintConfig(profile, findings);
409
+ lintTemplates(profile, declaredTypes, findings);
410
+ lintPackages(profile, findings);
411
+ const errorCount = findings.filter((finding) => finding.severity === "error").length;
412
+ const warningCount = findings.length - errorCount;
413
+ return {
414
+ profile: profile.name,
415
+ ok: errorCount === 0,
416
+ findings,
417
+ errorCount,
418
+ warningCount,
419
+ };
420
+ }
421
+ //# sourceMappingURL=profile-lint.js.map
422
+ //# debugId=22ba01dc-013c-507c-b2f7-fbe6b71b3bc3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-lint.js","sources":["core/profile/profile-lint.ts"],"sourceRoot":"/","sourcesContent":["/**\n * @module core/profile/profile-lint\n *\n * Author-time, tracker-independent consistency linting for a\n * {@link ProjectProfileDefinition}. This is the project-profile analogue of the\n * extension surface's `lintExtensionBlueprint`: where `defineProjectProfile`\n * (and `api.registerProfile`) only assert structural shape, and\n * {@link module:core/profile/profile-plan planProfileApplication} only validates\n * config knobs fail-fast against a live tracker at apply time, this linter\n * inspects a profile definition in isolation and reports *every* problem at once\n * across all eight dimensions.\n *\n * Findings are graded:\n * - `error` — a condition that makes `pm profile apply` throw or silently lose\n * data (an invalid type/status/field the upsert normalizer rejects, a\n * duplicate key whose later entry overwrites the earlier one, an unknown or\n * invalid config knob the planner rejects, an empty profile name resolution\n * requires, or a malformed workflow transition pair the workflow resolver\n * silently drops).\n * - `warning` — authored content that is structurally valid but very likely a\n * bug (a workflow governing a type the profile never declares, a transition\n * referencing a status token no profile/built-in status defines — a dead,\n * unreachable rule — a template whose `type` references an undeclared type, a\n * profile name resolution would fold, or an empty title/summary/package spec).\n *\n * Cross-reference checks are warnings rather than errors because the referenced\n * type or status MAY already exist in the target tracker independently of the\n * profile (profiles layer onto whatever schema is present), so erroring would\n * produce false positives against valid layered setups.\n *\n * Everything here is pure and side-effect-free so it is fully coverage-gated; the\n * CLI `pm profile lint` command and the SDK `assertProjectProfile` helper are\n * thin wrappers around {@link lintProjectProfile}.\n */\nimport { BUILTIN_ITEM_TYPE_VALUES } from \"../../types/index.js\";\nimport { parseNestedSettingValue, resolveNestedSettingDescriptor } from \"../config/nested-settings.js\";\nimport { normalizeAddFieldInput } from \"../schema/fields-file.js\";\nimport { normalizeAddStatusInput } from \"../schema/status-defs-file.js\";\nimport { normalizeAddTypeInput } from \"../schema/item-types-file.js\";\nimport { normalizeStatusToken } from \"../schema/type-workflows.js\";\nimport { DEFAULT_RUNTIME_STATUS_DEFINITIONS } from \"../schema/runtime-schema.js\";\nimport { toErrorMessage } from \"../shared/primitives.js\";\nimport { normalizeProfileLookupKey, type ProjectProfileDefinition } from \"./profile-presets.js\";\n\n/** Severity grade of a profile lint finding. */\nexport type ProfileLintSeverity = \"error\" | \"warning\";\n\n/** Profile dimension a lint finding is attributed to. */\nexport const PROFILE_LINT_DIMENSIONS = [\n \"profile\",\n \"types\",\n \"statuses\",\n \"fields\",\n \"workflows\",\n \"config\",\n \"templates\",\n \"packages\",\n] as const;\n/**\n * Restricts profile lint dimension values accepted by command, SDK, and storage contracts.\n */\nexport type ProfileLintDimension = (typeof PROFILE_LINT_DIMENSIONS)[number];\n\n/** Stable machine-readable codes every {@link ProjectProfileLintFinding} carries. */\nexport const PROFILE_LINT_CODES = [\n \"profile_name_empty\",\n \"profile_name_not_normalized\",\n \"profile_title_empty\",\n \"profile_summary_empty\",\n \"type_invalid\",\n \"type_duplicate\",\n \"status_invalid\",\n \"status_duplicate\",\n \"field_invalid\",\n \"field_duplicate\",\n \"workflow_type_empty\",\n \"workflow_type_unknown\",\n \"workflow_duplicate_type\",\n \"workflow_transition_malformed\",\n \"workflow_status_unknown\",\n \"config_key_unknown\",\n \"config_value_invalid\",\n \"config_duplicate\",\n \"template_type_unknown\",\n \"package_spec_empty\",\n] as const;\n/**\n * Restricts profile lint code values accepted by command, SDK, and storage contracts.\n */\nexport type ProfileLintCode = (typeof PROFILE_LINT_CODES)[number];\n\n/** A single graded consistency finding produced by {@link lintProjectProfile}. */\nexport interface ProjectProfileLintFinding {\n /** Whether the finding blocks a clean apply (`error`) or merely flags risk (`warning`). */\n severity: ProfileLintSeverity;\n /** Stable machine-readable classification. */\n code: ProfileLintCode;\n /** Profile dimension the finding belongs to. */\n dimension: ProfileLintDimension;\n /** Identifier of the offending entry within the dimension, when applicable. */\n target?: string;\n /** Human-facing description of the problem. */\n message: string;\n}\n\n/** Result of linting a single {@link ProjectProfileDefinition}. */\nexport interface ProjectProfileLintReport {\n /** The profile name as authored (preserved verbatim, even when blank). */\n profile: string;\n /** True when no `error`-severity findings were produced. */\n ok: boolean;\n /** All findings in deterministic dimension order. */\n findings: ProjectProfileLintFinding[];\n /** Count of `error`-severity findings. */\n errorCount: number;\n /** Count of `warning`-severity findings. */\n warningCount: number;\n}\n\n/**\n * Built-in status tokens (canonical ids and their aliases, normalized) every\n * tracker recognizes regardless of profile. A workflow transition referencing one\n * of these is always resolvable, so it never triggers a `workflow_status_unknown`\n * warning. Computed once from the canonical defaults so it never drifts.\n */\nconst BUILTIN_STATUS_TOKENS: ReadonlySet<string> = new Set(\n DEFAULT_RUNTIME_STATUS_DEFINITIONS.flatMap((definition) => [\n normalizeStatusToken(definition.id),\n ...(definition.aliases ?? []).map((alias) => normalizeStatusToken(alias)),\n ]).filter((token) => token.length > 0),\n);\n\n/** Built-in item type names, lower-cased for case-insensitive workflow/template matching. */\nconst BUILTIN_TYPE_KEYS: ReadonlySet<string> = new Set(BUILTIN_ITEM_TYPE_VALUES.map((name) => name.toLowerCase()));\n\n/** Lint the profile-level identity fields (name, title, summary). */\nfunction lintProfileIdentity(profile: ProjectProfileDefinition, findings: ProjectProfileLintFinding[]): void {\n if (profile.name.trim().length === 0) {\n findings.push({\n severity: \"error\",\n code: \"profile_name_empty\",\n dimension: \"profile\",\n message: \"Profile name must not be empty; profile resolution requires a non-blank name.\",\n });\n } else if (profile.name !== normalizeProfileLookupKey(profile.name)) {\n findings.push({\n severity: \"warning\",\n code: \"profile_name_not_normalized\",\n dimension: \"profile\",\n target: profile.name,\n message: `Profile name \"${profile.name}\" is not in canonical form; resolution folds it to \"${normalizeProfileLookupKey(profile.name)}\" (lowercase, hyphens as underscores).`,\n });\n }\n if (profile.title.trim().length === 0) {\n findings.push({\n severity: \"warning\",\n code: \"profile_title_empty\",\n dimension: \"profile\",\n message: \"Profile title is empty; list and show surfaces will render a blank title.\",\n });\n }\n if (profile.summary.trim().length === 0) {\n findings.push({\n severity: \"warning\",\n code: \"profile_summary_empty\",\n dimension: \"profile\",\n message: \"Profile summary is empty; list and show surfaces will render a blank archetype description.\",\n });\n }\n}\n\n/**\n * Lint the item types, returning the set of declared type keys (lower-cased)\n * collected from entries that normalize cleanly so workflow and template checks\n * can resolve cross-references against them.\n */\nfunction lintTypes(profile: ProjectProfileDefinition, findings: ProjectProfileLintFinding[]): Set<string> {\n const declared = new Set<string>();\n const seen = new Set<string>();\n for (const [index, type] of profile.types.entries()) {\n let name: string;\n try {\n name = normalizeAddTypeInput(type).name;\n } catch (error) {\n findings.push({\n severity: \"error\",\n code: \"type_invalid\",\n dimension: \"types\",\n target: typeof type.name === \"string\" ? type.name : `#${index}`,\n message: toErrorMessage(error),\n });\n continue;\n }\n const key = name.toLowerCase();\n if (seen.has(key)) {\n findings.push({\n severity: \"error\",\n code: \"type_duplicate\",\n dimension: \"types\",\n target: name,\n message: `Item type \"${name}\" is declared more than once; the later definition silently overwrites the earlier upsert.`,\n });\n continue;\n }\n seen.add(key);\n declared.add(key);\n }\n return declared;\n}\n\n/**\n * Lint the custom statuses, returning the set of declared status tokens (ids and\n * aliases, normalized) collected from entries that normalize cleanly so workflow\n * transition checks can resolve cross-references against them.\n */\nfunction lintStatuses(profile: ProjectProfileDefinition, findings: ProjectProfileLintFinding[]): Set<string> {\n const declared = new Set<string>();\n const seen = new Set<string>();\n for (const [index, status] of profile.statuses.entries()) {\n let normalized: ReturnType<typeof normalizeAddStatusInput>;\n try {\n normalized = normalizeAddStatusInput(status);\n } catch (error) {\n findings.push({\n severity: \"error\",\n code: \"status_invalid\",\n dimension: \"statuses\",\n target: typeof status.id === \"string\" ? status.id : `#${index}`,\n message: toErrorMessage(error),\n });\n continue;\n }\n if (seen.has(normalized.id)) {\n findings.push({\n severity: \"error\",\n code: \"status_duplicate\",\n dimension: \"statuses\",\n target: normalized.id,\n message: `Status \"${normalized.id}\" is declared more than once; the later definition silently overwrites the earlier upsert.`,\n });\n continue;\n }\n seen.add(normalized.id);\n declared.add(normalized.id);\n for (const alias of normalized.aliases ?? []) {\n declared.add(normalizeStatusToken(alias));\n }\n }\n return declared;\n}\n\n/** Lint the custom fields for invalid and duplicate keys. */\nfunction lintFields(profile: ProjectProfileDefinition, findings: ProjectProfileLintFinding[]): void {\n const seen = new Set<string>();\n for (const [index, field] of profile.fields.entries()) {\n let key: string;\n try {\n key = normalizeAddFieldInput(field).key;\n } catch (error) {\n findings.push({\n severity: \"error\",\n code: \"field_invalid\",\n dimension: \"fields\",\n target: typeof field.key === \"string\" ? field.key : `#${index}`,\n message: toErrorMessage(error),\n });\n continue;\n }\n if (seen.has(key)) {\n findings.push({\n severity: \"error\",\n code: \"field_duplicate\",\n dimension: \"fields\",\n target: key,\n message: `Field \"${key}\" is declared more than once; the later definition silently overwrites the earlier upsert.`,\n });\n continue;\n }\n seen.add(key);\n }\n}\n\n/**\n * Lint the per-type workflows: flag workflows that govern an undeclared type,\n * duplicate workflows for the same type, malformed transition pairs, and\n * transitions referencing a status token no built-in or profile status defines.\n */\nfunction lintWorkflows(\n profile: ProjectProfileDefinition,\n declaredTypes: ReadonlySet<string>,\n declaredStatuses: ReadonlySet<string>,\n findings: ProjectProfileLintFinding[],\n): void {\n const seenTypes = new Set<string>();\n for (const [index, workflow] of profile.workflows.entries()) {\n const typeKey = workflow.type.trim().toLowerCase();\n if (typeKey.length === 0) {\n findings.push({\n severity: \"error\",\n code: \"workflow_type_empty\",\n dimension: \"workflows\",\n target: `#${index}`,\n message: \"Workflow has an empty type; the workflow resolver drops entries without a type.\",\n });\n continue;\n }\n const duplicate = seenTypes.has(typeKey);\n seenTypes.add(typeKey);\n if (duplicate) {\n // The unknown-type check already fired for the first occurrence, so only\n // report the duplication here to avoid a redundant second finding.\n findings.push({\n severity: \"warning\",\n code: \"workflow_duplicate_type\",\n dimension: \"workflows\",\n target: workflow.type,\n message: `Workflow type \"${workflow.type}\" is declared more than once; the later transition set wins.`,\n });\n } else if (!BUILTIN_TYPE_KEYS.has(typeKey) && !declaredTypes.has(typeKey)) {\n findings.push({\n severity: \"warning\",\n code: \"workflow_type_unknown\",\n dimension: \"workflows\",\n target: workflow.type,\n message: `Workflow governs type \"${workflow.type}\" which is neither a built-in type nor declared by this profile; it has no effect unless that type already exists.`,\n });\n }\n // Each unknown status is reported once per workflow (not globally) so a later\n // workflow referencing the same unresolved token is still surfaced in its own\n // context.\n const reportedUnknownStatuses = new Set<string>();\n for (const pair of workflow.allowed_transitions) {\n const from = normalizeStatusToken(pair[0]);\n const to = normalizeStatusToken(pair[1]);\n if (from.length === 0 || to.length === 0) {\n findings.push({\n severity: \"error\",\n code: \"workflow_transition_malformed\",\n dimension: \"workflows\",\n target: workflow.type,\n message: `Workflow \"${workflow.type}\" has a transition with an empty status; the workflow resolver silently drops it.`,\n });\n continue;\n }\n for (const token of [from, to]) {\n if (BUILTIN_STATUS_TOKENS.has(token) || declaredStatuses.has(token) || reportedUnknownStatuses.has(token)) {\n continue;\n }\n reportedUnknownStatuses.add(token);\n findings.push({\n severity: \"warning\",\n code: \"workflow_status_unknown\",\n dimension: \"workflows\",\n target: token,\n message: `Workflow \"${workflow.type}\" references status \"${token}\" which is neither a built-in status nor declared by this profile; transitions to or from it are unreachable.`,\n });\n }\n }\n }\n}\n\n/**\n * Lint the config knobs: resolve each descriptor, flag duplicates that would\n * silently overwrite an earlier knob, and parse each value.\n */\nfunction lintConfig(profile: ProjectProfileDefinition, findings: ProjectProfileLintFinding[]): void {\n const seen = new Set<string>();\n for (const entry of profile.config) {\n const descriptor = resolveNestedSettingDescriptor(entry.key);\n if (descriptor === undefined) {\n findings.push({\n severity: \"error\",\n code: \"config_key_unknown\",\n dimension: \"config\",\n target: entry.key,\n message: `Config knob \"${entry.key}\" is not a recognized setting; apply rejects it with a usage error.`,\n });\n continue;\n }\n // Dedupe on the resolved descriptor key so two entries that differ only by\n // alias/casing (e.g. `search-provider` and `search_provider`) are caught.\n if (seen.has(descriptor.key)) {\n findings.push({\n severity: \"error\",\n code: \"config_duplicate\",\n dimension: \"config\",\n target: descriptor.key,\n message: `Config knob \"${descriptor.key}\" is set more than once; the later value silently overwrites the earlier one.`,\n });\n } else {\n seen.add(descriptor.key);\n }\n const parsed = parseNestedSettingValue(descriptor, entry.value);\n if (!parsed.ok) {\n findings.push({\n severity: \"error\",\n code: \"config_value_invalid\",\n dimension: \"config\",\n target: entry.key,\n message: parsed.error.message,\n });\n }\n }\n}\n\n/** Lint the create templates: flag a `type` option referencing an undeclared type. */\nfunction lintTemplates(\n profile: ProjectProfileDefinition,\n declaredTypes: ReadonlySet<string>,\n findings: ProjectProfileLintFinding[],\n): void {\n for (const template of profile.templates) {\n const typeOption = template.options.type;\n if (typeof typeOption !== \"string\" || typeOption.trim().length === 0) {\n continue;\n }\n const typeKey = typeOption.trim().toLowerCase();\n if (!BUILTIN_TYPE_KEYS.has(typeKey) && !declaredTypes.has(typeKey)) {\n findings.push({\n severity: \"warning\",\n code: \"template_type_unknown\",\n dimension: \"templates\",\n target: template.name,\n message: `Template \"${template.name}\" creates type \"${typeOption}\" which is neither a built-in type nor declared by this profile.`,\n });\n }\n }\n}\n\n/** Lint the advisory package recommendations for an empty spec. */\nfunction lintPackages(profile: ProjectProfileDefinition, findings: ProjectProfileLintFinding[]): void {\n for (const [index, recommendation] of profile.packages.entries()) {\n if (recommendation.spec.trim().length === 0) {\n findings.push({\n severity: \"warning\",\n code: \"package_spec_empty\",\n dimension: \"packages\",\n target: `#${index}`,\n message: \"Package recommendation has an empty spec; it cannot be surfaced as an install hint.\",\n });\n }\n }\n}\n\n/**\n * Lints a project profile definition for internal consistency, returning every\n * graded finding across all dimensions. Pure and tracker-independent: it never\n * reads disk or settings, so authors can call it on a `defineProjectProfile`\n * value, the CLI can call it on a resolved built-in or extension-contributed\n * profile, and tests can gate against it.\n *\n * @param profile The profile definition to lint.\n * @returns A report whose `ok` flag is true exactly when no `error` findings\n * were produced.\n */\nexport function lintProjectProfile(profile: ProjectProfileDefinition): ProjectProfileLintReport {\n const findings: ProjectProfileLintFinding[] = [];\n lintProfileIdentity(profile, findings);\n const declaredTypes = lintTypes(profile, findings);\n const declaredStatuses = lintStatuses(profile, findings);\n lintFields(profile, findings);\n lintWorkflows(profile, declaredTypes, declaredStatuses, findings);\n lintConfig(profile, findings);\n lintTemplates(profile, declaredTypes, findings);\n lintPackages(profile, findings);\n const errorCount = findings.filter((finding) => finding.severity === \"error\").length;\n const warningCount = findings.length - errorCount;\n return {\n profile: profile.name,\n ok: errorCount === 0,\n findings,\n errorCount,\n warningCount,\n };\n}\n"],"names":[],"mappings":"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","debugId":"22ba01dc-013c-507c-b2f7-fbe6b71b3bc3"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * @module core/profile/profile-plan
3
+ *
4
+ * Pure planning for `pm profile apply`. Given a {@link ProjectProfileDefinition}
5
+ * and a snapshot of the current tracker state, computes an idempotent diff across
6
+ * every profile dimension (item types, statuses, fields, per-type workflows,
7
+ * config knobs, templates, and package recommendations) without touching disk.
8
+ *
9
+ * Idempotency is structural: each schema component is upserted onto a clone and
10
+ * the canonical serialization is compared before/after, so re-running `apply`
11
+ * against an already-applied profile reports every entry as `unchanged` and the
12
+ * command performs zero writes. The resulting files/settings the planner returns
13
+ * are exactly what the apply step persists, guaranteeing the dry-run preview and
14
+ * the real mutation never diverge.
15
+ */
16
+ import { type ItemTypesFile } from "../schema/item-types-file.js";
17
+ import { type StatusDefsFile } from "../schema/status-defs-file.js";
18
+ import { type FieldsFile } from "../schema/fields-file.js";
19
+ import type { TypeWorkflowDefinition } from "../../types.js";
20
+ import type { ProfileTemplateOptions, ProjectProfileDefinition } from "./profile-presets.js";
21
+ /** Per-entry change classification used across every profile dimension. */
22
+ export type ProfileChangeStatus = "add" | "update" | "unchanged";
23
+ /** A single staged change keyed by its component identifier. */
24
+ export interface ProfileComponentChange {
25
+ /** Component identity (type name, status id, field key, etc.). */
26
+ key: string;
27
+ /** Whether the entry is new, an overwrite, or already current. */
28
+ status: ProfileChangeStatus;
29
+ }
30
+ /** Plan for a file-backed schema component (types/statuses/fields). */
31
+ export interface ProfileSchemaPlan<TFile> {
32
+ /** Serialized file content to persist when `changed`. */
33
+ file: TFile;
34
+ /** Per-entry classifications in profile order. */
35
+ changes: ProfileComponentChange[];
36
+ /** True when at least one entry is add/update. */
37
+ changed: boolean;
38
+ }
39
+ /** A staged per-type workflow change plus the merged result list. */
40
+ export interface ProfileWorkflowChange {
41
+ /** Item type the workflow governs. */
42
+ type: string;
43
+ /** Whether the workflow is new, changed, or already current. */
44
+ status: ProfileChangeStatus;
45
+ }
46
+ /** Plan for the `schema.type_workflows` settings subtree. */
47
+ export interface ProfileWorkflowPlan {
48
+ /** Per-workflow classifications in profile order. */
49
+ changes: ProfileWorkflowChange[];
50
+ /** Full merged workflow list to persist when `changed`. */
51
+ result: TypeWorkflowDefinition[];
52
+ /** True when at least one workflow is add/update. */
53
+ changed: boolean;
54
+ }
55
+ /** A staged config knob plus the resolved settings path and typed value. */
56
+ export interface ProfileConfigChange {
57
+ /** Descriptor key (snake_case). */
58
+ key: string;
59
+ /** Dotted PmSettings path the value writes to. */
60
+ path: string;
61
+ /** Typed leaf value to persist. */
62
+ value: string | number | boolean;
63
+ /** Whether the leaf is new, changed, or already current. */
64
+ status: ProfileChangeStatus;
65
+ }
66
+ /** Plan for the nested-settings knobs a profile stages. */
67
+ export interface ProfileConfigPlan {
68
+ /** Per-knob classifications in profile order. */
69
+ changes: ProfileConfigChange[];
70
+ /** True when at least one knob is add/update. */
71
+ changed: boolean;
72
+ }
73
+ /** A staged create-template change. */
74
+ export interface ProfileTemplateChange {
75
+ /** Template name. */
76
+ name: string;
77
+ /** Option payload to persist for the template. */
78
+ options: ProfileTemplateOptions;
79
+ /** Whether the template is new, changed, or already current. */
80
+ status: ProfileChangeStatus;
81
+ }
82
+ /** Plan for the create templates a profile stages. */
83
+ export interface ProfileTemplatePlan {
84
+ /** Per-template classifications in profile order. */
85
+ changes: ProfileTemplateChange[];
86
+ /** True when at least one template is add/update. */
87
+ changed: boolean;
88
+ }
89
+ /** Advisory package recommendation with install status. */
90
+ export interface ProfilePackagePlan {
91
+ /** Catalog alias or install spec. */
92
+ spec: string;
93
+ /** Why the archetype benefits from the package. */
94
+ reason: string;
95
+ /** `installed` when already present, otherwise `recommended`. */
96
+ status: "installed" | "recommended";
97
+ }
98
+ /** Current tracker state the planner diffs the profile against. */
99
+ export interface ProfileCurrentState {
100
+ /** Raw `schema/types.json` content (or null when absent). */
101
+ typesRaw: string | null;
102
+ /** Raw status-defs file content (or null when absent). */
103
+ statusesRaw: string | null;
104
+ /** Raw fields file content (or null when absent). */
105
+ fieldsRaw: string | null;
106
+ /** Current `schema.type_workflows` entries. */
107
+ workflows: readonly TypeWorkflowDefinition[];
108
+ /** Settings object used to read current config leaf values. */
109
+ settings: unknown;
110
+ /** Existing stored template options keyed by template name. */
111
+ templates: ReadonlyMap<string, ProfileTemplateOptions>;
112
+ /** Install specs/aliases already present in the project. */
113
+ installedPackages: ReadonlySet<string>;
114
+ }
115
+ /** Complete idempotent plan for applying a profile. */
116
+ export interface ProfileApplicationPlan {
117
+ /** Identifying metadata for the planned profile. */
118
+ profile: {
119
+ name: string;
120
+ title: string;
121
+ summary: string;
122
+ };
123
+ /** Item-type plan. */
124
+ types: ProfileSchemaPlan<ItemTypesFile>;
125
+ /** Status plan. */
126
+ statuses: ProfileSchemaPlan<StatusDefsFile>;
127
+ /** Field plan. */
128
+ fields: ProfileSchemaPlan<FieldsFile>;
129
+ /** Per-type workflow plan. */
130
+ workflows: ProfileWorkflowPlan;
131
+ /** Config-knob plan. */
132
+ config: ProfileConfigPlan;
133
+ /** Template plan. */
134
+ templates: ProfileTemplatePlan;
135
+ /** Advisory package recommendations. */
136
+ packages: ProfilePackagePlan[];
137
+ /** True when any dimension stages an add/update. */
138
+ changed: boolean;
139
+ }
140
+ /**
141
+ * Computes the complete idempotent application plan for a profile against the
142
+ * supplied tracker snapshot. The returned files/settings are exactly what the
143
+ * apply step persists; nothing here touches disk.
144
+ */
145
+ export declare function planProfileApplication(profile: ProjectProfileDefinition, current: ProfileCurrentState): ProfileApplicationPlan;