@unbrained/pm-cli 2026.6.24 → 2026.7.1

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 (744) hide show
  1. package/AGENTS.md +2 -0
  2. package/CHANGELOG.md +113 -1
  3. package/CONTRIBUTING.md +30 -0
  4. package/README.md +16 -3
  5. package/dist/cli/bootstrap-args.js +89 -79
  6. package/dist/cli/bootstrap-args.js.map +1 -1
  7. package/dist/cli/commander-usage.js +3 -3
  8. package/dist/cli/commander-usage.js.map +1 -1
  9. package/dist/cli/commands/aggregate.js +8 -7
  10. package/dist/cli/commands/aggregate.js.map +1 -1
  11. package/dist/cli/commands/calendar.js +63 -62
  12. package/dist/cli/commands/calendar.js.map +1 -1
  13. package/dist/cli/commands/close.d.ts +2 -4
  14. package/dist/cli/commands/close.js +5 -17
  15. package/dist/cli/commands/close.js.map +1 -1
  16. package/dist/cli/commands/completion.js +158 -9
  17. package/dist/cli/commands/completion.js.map +1 -1
  18. package/dist/cli/commands/config.d.ts +1 -1
  19. package/dist/cli/commands/config.js +2 -2
  20. package/dist/cli/commands/config.js.map +1 -1
  21. package/dist/cli/commands/context.d.ts +31 -4
  22. package/dist/cli/commands/context.js +33 -10
  23. package/dist/cli/commands/context.js.map +1 -1
  24. package/dist/cli/commands/contracts.js +48 -8
  25. package/dist/cli/commands/contracts.js.map +1 -1
  26. package/dist/cli/commands/create.d.ts +1 -6
  27. package/dist/cli/commands/create.js +491 -587
  28. package/dist/cli/commands/create.js.map +1 -1
  29. package/dist/cli/commands/extension/bundled-catalog.js +59 -46
  30. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  31. package/dist/cli/commands/extension/describe.d.ts +15 -0
  32. package/dist/cli/commands/extension/describe.js +48 -2
  33. package/dist/cli/commands/extension/describe.js.map +1 -1
  34. package/dist/cli/commands/extension/doctor.js +129 -75
  35. package/dist/cli/commands/extension/doctor.js.map +1 -1
  36. package/dist/cli/commands/extension/install-sources.js +37 -7
  37. package/dist/cli/commands/extension/install-sources.js.map +1 -1
  38. package/dist/cli/commands/extension/managed-state.js +101 -57
  39. package/dist/cli/commands/extension/managed-state.js.map +1 -1
  40. package/dist/cli/commands/extension/scaffold.d.ts +38 -8
  41. package/dist/cli/commands/extension/scaffold.js +1956 -242
  42. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  43. package/dist/cli/commands/extension.d.ts +28 -3
  44. package/dist/cli/commands/extension.js +1181 -880
  45. package/dist/cli/commands/extension.js.map +1 -1
  46. package/dist/cli/commands/index.d.ts +3 -1
  47. package/dist/cli/commands/index.js +5 -3
  48. package/dist/cli/commands/index.js.map +1 -1
  49. package/dist/cli/commands/item-filter-options.d.ts +63 -0
  50. package/dist/cli/commands/item-filter-options.js +10 -0
  51. package/dist/cli/commands/item-filter-options.js.map +1 -0
  52. package/dist/cli/commands/legacy-none-tokens.d.ts +14 -0
  53. package/dist/cli/commands/legacy-none-tokens.js +31 -2
  54. package/dist/cli/commands/legacy-none-tokens.js.map +1 -1
  55. package/dist/cli/commands/linked-artifacts.d.ts +7 -0
  56. package/dist/cli/commands/linked-artifacts.js +12 -2
  57. package/dist/cli/commands/linked-artifacts.js.map +1 -1
  58. package/dist/cli/commands/list-filter-shared.js +55 -48
  59. package/dist/cli/commands/list-filter-shared.js.map +1 -1
  60. package/dist/cli/commands/list.d.ts +16 -39
  61. package/dist/cli/commands/list.js +127 -118
  62. package/dist/cli/commands/list.js.map +1 -1
  63. package/dist/cli/commands/next.d.ts +98 -0
  64. package/dist/cli/commands/next.js +304 -0
  65. package/dist/cli/commands/next.js.map +1 -0
  66. package/dist/cli/commands/profile.d.ts +208 -0
  67. package/dist/cli/commands/profile.js +418 -0
  68. package/dist/cli/commands/profile.js.map +1 -0
  69. package/dist/cli/commands/repeatable-metadata-parsers.js +12 -13
  70. package/dist/cli/commands/repeatable-metadata-parsers.js.map +1 -1
  71. package/dist/cli/commands/schema.d.ts +7 -0
  72. package/dist/cli/commands/schema.js +9 -3
  73. package/dist/cli/commands/schema.js.map +1 -1
  74. package/dist/cli/commands/search.d.ts +2 -39
  75. package/dist/cli/commands/search.js +196 -172
  76. package/dist/cli/commands/search.js.map +1 -1
  77. package/dist/cli/commands/shared-unset-fields.d.ts +30 -0
  78. package/dist/cli/commands/shared-unset-fields.js +161 -0
  79. package/dist/cli/commands/shared-unset-fields.js.map +1 -0
  80. package/dist/cli/commands/stats.js +15 -3
  81. package/dist/cli/commands/stats.js.map +1 -1
  82. package/dist/cli/commands/test.js +115 -125
  83. package/dist/cli/commands/test.js.map +1 -1
  84. package/dist/cli/commands/update.d.ts +1 -6
  85. package/dist/cli/commands/update.js +37 -232
  86. package/dist/cli/commands/update.js.map +1 -1
  87. package/dist/cli/commands/validate.js +20 -5
  88. package/dist/cli/commands/validate.js.map +1 -1
  89. package/dist/cli/extension-command-options.js +48 -21
  90. package/dist/cli/extension-command-options.js.map +1 -1
  91. package/dist/cli/help-content.js +26 -2
  92. package/dist/cli/help-content.js.map +1 -1
  93. package/dist/cli/help-json-payload.js +3 -3
  94. package/dist/cli/help-json-payload.js.map +1 -1
  95. package/dist/cli/main.js +27 -12
  96. package/dist/cli/main.js.map +1 -1
  97. package/dist/cli/register-list-query.js +42 -3
  98. package/dist/cli/register-list-query.js.map +1 -1
  99. package/dist/cli/register-mutation.js +86 -2
  100. package/dist/cli/register-mutation.js.map +1 -1
  101. package/dist/cli/register-setup.js +67 -6
  102. package/dist/cli/register-setup.js.map +1 -1
  103. package/dist/cli/registration-helpers.d.ts +9 -1
  104. package/dist/cli/registration-helpers.js +149 -123
  105. package/dist/cli/registration-helpers.js.map +1 -1
  106. package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +16 -0
  107. package/dist/cli-bundle/chunks/{activity-N7RVTLBQ.js → activity-DBLQVIP6.js} +9 -11
  108. package/dist/cli-bundle/chunks/{aggregate-63NWNIBR.js → aggregate-JTEF4BP7.js} +17 -18
  109. package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +1 -0
  110. package/dist/cli-bundle/chunks/{aggregate-YHCYX2EV.js → aggregate-SDF7DUOD.js} +16 -17
  111. package/dist/cli-bundle/chunks/aggregate-SDF7DUOD.js.map +7 -0
  112. package/dist/cli-bundle/chunks/{append-VLQQDHMJ.js → append-LOVPGVPT.js} +8 -10
  113. package/dist/cli-bundle/chunks/{append-VLQQDHMJ.js.map → append-LOVPGVPT.js.map} +1 -1
  114. package/dist/cli-bundle/chunks/{append-PUKREFV5.js → append-QCFJSDFL.js} +10 -12
  115. package/dist/cli-bundle/chunks/{append-PUKREFV5.js.map → append-QCFJSDFL.js.map} +1 -1
  116. package/dist/cli-bundle/chunks/{chunk-ABYCA5VX.js → chunk-22WKIL3H.js} +9 -11
  117. package/dist/cli-bundle/chunks/{chunk-ABYCA5VX.js.map → chunk-22WKIL3H.js.map} +1 -1
  118. package/dist/cli-bundle/chunks/{chunk-A66VYUOV.js → chunk-2466X6E4.js} +9 -11
  119. package/dist/cli-bundle/chunks/{chunk-A66VYUOV.js.map → chunk-2466X6E4.js.map} +1 -1
  120. package/dist/cli-bundle/chunks/{chunk-F32L4HR6.js → chunk-27BXPBAY.js} +3 -3
  121. package/dist/cli-bundle/chunks/{schema-QO5I4FBL.js → chunk-2D4HATP2.js} +136 -66
  122. package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +1 -0
  123. package/dist/cli-bundle/chunks/{chunk-J7I4C5ZB.js → chunk-3J6JRJ3I.js} +153 -125
  124. package/dist/cli-bundle/chunks/chunk-3J6JRJ3I.js.map +7 -0
  125. package/dist/cli-bundle/chunks/{chunk-OHDQNKJB.js → chunk-3K2M5OYU.js} +106 -34
  126. package/dist/cli-bundle/chunks/chunk-3K2M5OYU.js.map +7 -0
  127. package/dist/cli-bundle/chunks/{chunk-XVYKWZNL.js → chunk-3S2KT7NG.js} +127 -127
  128. package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +7 -0
  129. package/dist/cli-bundle/chunks/{chunk-5BBEWX6C.js → chunk-3VGN2UWE.js} +2 -2
  130. package/dist/cli-bundle/chunks/{chunk-N5B6WZC5.js → chunk-3XZCOZ5J.js} +115 -123
  131. package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +1 -0
  132. package/dist/cli-bundle/chunks/chunk-4A3BJ675.js +799 -0
  133. package/dist/cli-bundle/chunks/chunk-4A3BJ675.js.map +1 -0
  134. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +87 -0
  135. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +7 -0
  136. package/dist/cli-bundle/chunks/{chunk-HZF5RLKX.js → chunk-4DSGXSBL.js} +5 -7
  137. package/dist/cli-bundle/chunks/{chunk-HZF5RLKX.js.map → chunk-4DSGXSBL.js.map} +1 -1
  138. package/dist/cli-bundle/chunks/{chunk-JV27C7OZ.js → chunk-4DUVCVLZ.js} +4 -6
  139. package/dist/cli-bundle/chunks/{chunk-JV27C7OZ.js.map → chunk-4DUVCVLZ.js.map} +1 -1
  140. package/dist/cli-bundle/chunks/{chunk-IAP5KYBQ.js → chunk-4XOIEKSD.js} +563 -506
  141. package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +1 -0
  142. package/dist/cli-bundle/chunks/{context-5LB7UGKE.js → chunk-55SNVXRQ.js} +79 -82
  143. package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +7 -0
  144. package/dist/cli-bundle/chunks/{chunk-BFFO3AIB.js → chunk-5CGRF3L5.js} +128 -128
  145. package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +1 -0
  146. package/dist/cli-bundle/chunks/{chunk-JKL6HRMV.js → chunk-5QFDBI4F.js} +1260 -1046
  147. package/dist/cli-bundle/chunks/chunk-5QFDBI4F.js.map +7 -0
  148. package/dist/cli-bundle/chunks/{chunk-LU36E6GU.js → chunk-64HNBBFQ.js} +8 -12
  149. package/dist/cli-bundle/chunks/{chunk-LU36E6GU.js.map → chunk-64HNBBFQ.js.map} +1 -1
  150. package/dist/cli-bundle/chunks/chunk-6AQZPVHQ.js +2444 -0
  151. package/dist/cli-bundle/chunks/chunk-6AQZPVHQ.js.map +1 -0
  152. package/dist/cli-bundle/chunks/chunk-7M2HAZEB.js +17 -0
  153. package/dist/cli-bundle/chunks/chunk-7M2HAZEB.js.map +7 -0
  154. package/dist/cli-bundle/chunks/{chunk-VSAABFGQ.js → chunk-7R4QEMZZ.js} +1490 -734
  155. package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +1 -0
  156. package/dist/cli-bundle/chunks/{chunk-M6TUBOGW.js → chunk-A7FPBAQS.js} +19 -12
  157. package/dist/cli-bundle/chunks/chunk-A7FPBAQS.js.map +1 -0
  158. package/dist/cli-bundle/chunks/{chunk-GQYJEEFX.js → chunk-AVEE5EHK.js} +53 -54
  159. package/dist/cli-bundle/chunks/chunk-AVEE5EHK.js.map +1 -0
  160. package/dist/cli-bundle/chunks/{chunk-FMWW2JDU.js → chunk-AXIDKKAT.js} +2 -2
  161. package/dist/cli-bundle/chunks/{chunk-TIM4OD74.js → chunk-BDTISOSD.js} +2 -2
  162. package/dist/cli-bundle/chunks/{chunk-C4C3EJCJ.js → chunk-BHO33VBQ.js} +509 -363
  163. package/dist/cli-bundle/chunks/chunk-BHO33VBQ.js.map +7 -0
  164. package/dist/cli-bundle/chunks/{chunk-6W3Y65PL.js → chunk-BZCEN4JA.js} +198 -177
  165. package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +7 -0
  166. package/dist/cli-bundle/chunks/{chunk-RRP6D345.js → chunk-CF7RL6FR.js} +12 -16
  167. package/dist/cli-bundle/chunks/{chunk-RRP6D345.js.map → chunk-CF7RL6FR.js.map} +1 -1
  168. package/dist/cli-bundle/chunks/{chunk-HC2S36NB.js → chunk-CWFNTKQJ.js} +154 -126
  169. package/dist/cli-bundle/chunks/chunk-CWFNTKQJ.js.map +1 -0
  170. package/dist/cli-bundle/chunks/chunk-CZVISY5A.js +87 -0
  171. package/dist/cli-bundle/chunks/chunk-CZVISY5A.js.map +7 -0
  172. package/dist/cli-bundle/chunks/{chunk-CZIFFMZI.js → chunk-DDPTYJIM.js} +2 -2
  173. package/dist/cli-bundle/chunks/{chunk-AYPQUFCX.js → chunk-EJUDVUYZ.js} +3 -3
  174. package/dist/cli-bundle/chunks/{chunk-EOGBMLCE.js → chunk-EVMTBV6V.js} +3 -3
  175. package/dist/cli-bundle/chunks/{chunk-RAWA3Y7O.js → chunk-FFMQB7WR.js} +199 -178
  176. package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +1 -0
  177. package/dist/cli-bundle/chunks/{chunk-CG3KP6I5.js → chunk-G7I7DEZA.js} +4 -4
  178. package/dist/cli-bundle/chunks/{chunk-MEXZ5XUM.js → chunk-GJ326ZKX.js} +53 -54
  179. package/dist/cli-bundle/chunks/chunk-GJ326ZKX.js.map +7 -0
  180. package/dist/cli-bundle/chunks/chunk-HPPFYYOV.js +119 -0
  181. package/dist/cli-bundle/chunks/chunk-HPPFYYOV.js.map +7 -0
  182. package/dist/cli-bundle/chunks/{chunk-OF7V47P3.js → chunk-HXTQJXWT.js} +2172 -2146
  183. package/dist/cli-bundle/chunks/chunk-HXTQJXWT.js.map +1 -0
  184. package/dist/cli-bundle/chunks/{chunk-F4BNR2IN.js → chunk-HYTGA6GI.js} +3 -3
  185. package/dist/cli-bundle/chunks/{chunk-2WCYE3IF.js → chunk-HZZEHPRG.js} +2 -2
  186. package/dist/cli-bundle/chunks/chunk-IBMFIKVS.js +14 -0
  187. package/dist/cli-bundle/chunks/chunk-IBMFIKVS.js.map +1 -0
  188. package/dist/cli-bundle/chunks/{chunk-YV2OSAMS.js → chunk-IJYK2T43.js} +2 -2
  189. package/dist/cli-bundle/chunks/{chunk-4XDGYFHL.js → chunk-IPYBJWTE.js} +10 -14
  190. package/dist/cli-bundle/chunks/{chunk-4XDGYFHL.js.map → chunk-IPYBJWTE.js.map} +1 -1
  191. package/dist/cli-bundle/chunks/{chunk-6EBNFQOR.js → chunk-IZBR4NRW.js} +10 -14
  192. package/dist/cli-bundle/chunks/{chunk-6EBNFQOR.js.map → chunk-IZBR4NRW.js.map} +1 -1
  193. package/dist/cli-bundle/chunks/{chunk-VFJYVXHL.js → chunk-JLM7BHI7.js} +7 -9
  194. package/dist/cli-bundle/chunks/{chunk-VFJYVXHL.js.map → chunk-JLM7BHI7.js.map} +1 -1
  195. package/dist/cli-bundle/chunks/{chunk-6EL7SW5C.js → chunk-JMP4E6D7.js} +114 -122
  196. package/dist/cli-bundle/chunks/chunk-JMP4E6D7.js.map +7 -0
  197. package/dist/cli-bundle/chunks/{chunk-QOUOMPHO.js → chunk-JPECA746.js} +2 -2
  198. package/dist/cli-bundle/chunks/{chunk-KJZOSF7J.js → chunk-JSU5P7VS.js} +100 -35
  199. package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +1 -0
  200. package/dist/cli-bundle/chunks/{context-55VEOYI3.js → chunk-JWXRETDF.js} +79 -82
  201. package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +1 -0
  202. package/dist/cli-bundle/chunks/{chunk-OQ2E64FH.js → chunk-KNPEF7QG.js} +4 -4
  203. package/dist/cli-bundle/chunks/{chunk-3BKH2CL3.js → chunk-L5OEFZQG.js} +3 -3
  204. package/dist/cli-bundle/chunks/{chunk-DTABLLVE.js → chunk-LB6TP6MC.js} +5 -7
  205. package/dist/cli-bundle/chunks/{chunk-DTABLLVE.js.map → chunk-LB6TP6MC.js.map} +2 -2
  206. package/dist/cli-bundle/chunks/{chunk-TSI32UEL.js → chunk-MAUKX7JC.js} +6 -8
  207. package/dist/cli-bundle/chunks/{chunk-TSI32UEL.js.map → chunk-MAUKX7JC.js.map} +1 -1
  208. package/dist/cli-bundle/chunks/{chunk-SMXSDY7J.js → chunk-MDPEOIGN.js} +2221 -2172
  209. package/dist/cli-bundle/chunks/chunk-MDPEOIGN.js.map +7 -0
  210. package/dist/cli-bundle/chunks/{chunk-5S4ZGDB2.js → chunk-N74UMG5H.js} +2 -2
  211. package/dist/cli-bundle/chunks/{chunk-IXAZI443.js → chunk-NFDPYAIP.js} +2 -2
  212. package/dist/cli-bundle/chunks/{chunk-SKC4UTRP.js → chunk-NKZAN7BD.js} +3 -3
  213. package/dist/cli-bundle/chunks/chunk-NOLPZMSV.js +116 -0
  214. package/dist/cli-bundle/chunks/chunk-NOLPZMSV.js.map +1 -0
  215. package/dist/cli-bundle/chunks/{chunk-L7UXKP2I.js → chunk-NU2UEROZ.js} +1257 -1029
  216. package/dist/cli-bundle/chunks/chunk-NU2UEROZ.js.map +1 -0
  217. package/dist/cli-bundle/chunks/{chunk-HBAEFWX3.js → chunk-NUHHPVVS.js} +65 -335
  218. package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +7 -0
  219. package/dist/cli-bundle/chunks/{chunk-JPJDP4VU.js → chunk-NWMZWYYB.js} +2 -2
  220. package/dist/cli-bundle/chunks/{chunk-MWMHZOZZ.js → chunk-OGXLACHC.js} +10 -14
  221. package/dist/cli-bundle/chunks/{chunk-MWMHZOZZ.js.map → chunk-OGXLACHC.js.map} +1 -1
  222. package/dist/cli-bundle/chunks/chunk-OKQ22KTH.js +379 -0
  223. package/dist/cli-bundle/chunks/chunk-OKQ22KTH.js.map +1 -0
  224. package/dist/cli-bundle/chunks/{chunk-KKX4Z2SE.js → chunk-OTUHB4HS.js} +4 -4
  225. package/dist/cli-bundle/chunks/{chunk-ZLWRPBOW.js → chunk-QCWF6IYD.js} +510 -364
  226. package/dist/cli-bundle/chunks/chunk-QCWF6IYD.js.map +1 -0
  227. package/dist/cli-bundle/chunks/{chunk-PRVTGX64.js → chunk-RGEMWD6Q.js} +11 -23
  228. package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +7 -0
  229. package/dist/cli-bundle/chunks/chunk-RH5ZBYFD.js +809 -0
  230. package/dist/cli-bundle/chunks/chunk-RH5ZBYFD.js.map +7 -0
  231. package/dist/cli-bundle/chunks/{chunk-ALQKV6U7.js → chunk-RLDHZHQS.js} +12 -16
  232. package/dist/cli-bundle/chunks/{chunk-ALQKV6U7.js.map → chunk-RLDHZHQS.js.map} +1 -1
  233. package/dist/cli-bundle/chunks/{schema-C6QA367T.js → chunk-RMMQ74TG.js} +144 -67
  234. package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +7 -0
  235. package/dist/cli-bundle/chunks/{chunk-EYPINTFR.js → chunk-RVUALSJF.js} +1516 -753
  236. package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +7 -0
  237. package/dist/cli-bundle/chunks/chunk-SDR5J34Q.js +2468 -0
  238. package/dist/cli-bundle/chunks/chunk-SDR5J34Q.js.map +7 -0
  239. package/dist/cli-bundle/chunks/{chunk-WB5BYQMF.js → chunk-SLMUGTK3.js} +4 -4
  240. package/dist/cli-bundle/chunks/{chunk-SUREE24M.js → chunk-TP5Q5ZD3.js} +12 -24
  241. package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +1 -0
  242. package/dist/cli-bundle/chunks/{chunk-UACWNBL2.js → chunk-UYUYDGIB.js} +7 -9
  243. package/dist/cli-bundle/chunks/{chunk-UACWNBL2.js.map → chunk-UYUYDGIB.js.map} +1 -1
  244. package/dist/cli-bundle/chunks/{chunk-V4UYNSEM.js → chunk-UZIWVBE6.js} +6 -8
  245. package/dist/cli-bundle/chunks/{chunk-V4UYNSEM.js.map → chunk-UZIWVBE6.js.map} +1 -1
  246. package/dist/cli-bundle/chunks/{chunk-EWRSXOIZ.js → chunk-V3NOKJF2.js} +11 -13
  247. package/dist/cli-bundle/chunks/{chunk-EWRSXOIZ.js.map → chunk-V3NOKJF2.js.map} +1 -1
  248. package/dist/cli-bundle/chunks/{chunk-XXKV4UWE.js → chunk-VARHOHYV.js} +571 -507
  249. package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +7 -0
  250. package/dist/cli-bundle/chunks/{chunk-AEACLRVH.js → chunk-VICZWYGZ.js} +18 -11
  251. package/dist/cli-bundle/chunks/chunk-VICZWYGZ.js.map +7 -0
  252. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +84 -0
  253. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +1 -0
  254. package/dist/cli-bundle/chunks/chunk-VZDBVEZR.js +382 -0
  255. package/dist/cli-bundle/chunks/chunk-VZDBVEZR.js.map +7 -0
  256. package/dist/cli-bundle/chunks/{chunk-GDUMGZK3.js → chunk-W4ULYO7Z.js} +11 -13
  257. package/dist/cli-bundle/chunks/{chunk-GDUMGZK3.js.map → chunk-W4ULYO7Z.js.map} +1 -1
  258. package/dist/cli-bundle/chunks/{chunk-I6QMJ2XT.js → chunk-WYDHYJPO.js} +2 -2
  259. package/dist/cli-bundle/chunks/{chunk-ALKFCIIB.js → chunk-YITK2PJ6.js} +9 -11
  260. package/dist/cli-bundle/chunks/{chunk-ALKFCIIB.js.map → chunk-YITK2PJ6.js.map} +1 -1
  261. package/dist/cli-bundle/chunks/chunk-YJIEJRZB.js +84 -0
  262. package/dist/cli-bundle/chunks/chunk-YJIEJRZB.js.map +1 -0
  263. package/dist/cli-bundle/chunks/{chunk-LNEDHJNQ.js → chunk-ZETXE4SE.js} +66 -329
  264. package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +1 -0
  265. package/dist/cli-bundle/chunks/{chunk-KIEAK7YE.js → chunk-ZRP4VG5U.js} +2 -2
  266. package/dist/cli-bundle/chunks/{claim-FZZZCAY6.js → claim-EMQLYPRW.js} +10 -12
  267. package/dist/cli-bundle/chunks/{claim-FZZZCAY6.js.map → claim-EMQLYPRW.js.map} +1 -1
  268. package/dist/cli-bundle/chunks/{claim-XK5QBZE3.js → claim-T3GCKV7C.js} +8 -10
  269. package/dist/cli-bundle/chunks/{claim-XK5QBZE3.js.map → claim-T3GCKV7C.js.map} +1 -1
  270. package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +14 -0
  271. package/dist/cli-bundle/chunks/{close-QHMVWM7M.js → close-TQYAAFJP.js} +7 -8
  272. package/dist/cli-bundle/chunks/{close-many-OIXJE2JZ.js → close-many-BG5QQIDQ.js} +16 -18
  273. package/dist/cli-bundle/chunks/{close-many-OIXJE2JZ.js.map → close-many-BG5QQIDQ.js.map} +1 -1
  274. package/dist/cli-bundle/chunks/{close-many-SUU5BS2C.js → close-many-LDRVEQY2.js} +18 -20
  275. package/dist/cli-bundle/chunks/{close-many-SUU5BS2C.js.map → close-many-LDRVEQY2.js.map} +1 -1
  276. package/dist/cli-bundle/chunks/{comments-5YM62D75.js → comments-QCKR2YY2.js} +11 -13
  277. package/dist/cli-bundle/chunks/{comments-5YM62D75.js.map → comments-QCKR2YY2.js.map} +1 -1
  278. package/dist/cli-bundle/chunks/{comments-RH3IBIRH.js → comments-YUXJRZPQ.js} +9 -11
  279. package/dist/cli-bundle/chunks/{comments-RH3IBIRH.js.map → comments-YUXJRZPQ.js.map} +1 -1
  280. package/dist/cli-bundle/chunks/{config-NCNNWF6R.js → config-DMSU64QO.js} +18 -387
  281. package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +7 -0
  282. package/dist/cli-bundle/chunks/{config-SW3U7XP2.js → config-QH2DICD6.js} +18 -380
  283. package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +1 -0
  284. package/dist/cli-bundle/chunks/context-B6275WPX.js +46 -0
  285. package/dist/cli-bundle/chunks/context-OCZ3FJ4Z.js +42 -0
  286. package/dist/cli-bundle/chunks/{contracts-SY6PDFIK.js → contracts-HN7ABKLP.js} +72 -15
  287. package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +7 -0
  288. package/dist/cli-bundle/chunks/{contracts-JXFGBOYT.js → contracts-W4FZVVD6.js} +72 -15
  289. package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +1 -0
  290. package/dist/cli-bundle/chunks/{copy-N3GE6FYS.js → copy-BTJOSKKT.js} +7 -11
  291. package/dist/cli-bundle/chunks/{copy-N3GE6FYS.js.map → copy-BTJOSKKT.js.map} +1 -1
  292. package/dist/cli-bundle/chunks/{copy-IEDBJOOX.js → copy-DEM4DATS.js} +9 -13
  293. package/dist/cli-bundle/chunks/{copy-IEDBJOOX.js.map → copy-DEM4DATS.js.map} +1 -1
  294. package/dist/cli-bundle/chunks/create-OH3BDGBB.js +28 -0
  295. package/dist/cli-bundle/chunks/{create-O4VONGPG.js → create-RLRJMRTM.js} +12 -14
  296. package/dist/cli-bundle/chunks/{delete-LPEIF7RU.js → delete-BHK7VB2Z.js} +5 -7
  297. package/dist/cli-bundle/chunks/{delete-LPEIF7RU.js.map → delete-BHK7VB2Z.js.map} +1 -1
  298. package/dist/cli-bundle/chunks/{delete-724EQ6OS.js → delete-LSVHAB4Y.js} +7 -9
  299. package/dist/cli-bundle/chunks/{delete-724EQ6OS.js.map → delete-LSVHAB4Y.js.map} +1 -1
  300. package/dist/cli-bundle/chunks/{deps-RSBU4SIU.js → deps-4UDFJRUA.js} +8 -11
  301. package/dist/cli-bundle/chunks/{deps-RSBU4SIU.js.map → deps-4UDFJRUA.js.map} +1 -1
  302. package/dist/cli-bundle/chunks/{deps-T3Y6Y7RT.js → deps-XHYXWEPT.js} +6 -9
  303. package/dist/cli-bundle/chunks/{deps-T3Y6Y7RT.js.map → deps-XHYXWEPT.js.map} +1 -1
  304. package/dist/cli-bundle/chunks/{docs-IFS7HZPP.js → docs-26S44RXU.js} +8 -9
  305. package/dist/cli-bundle/chunks/{docs-IFS7HZPP.js.map → docs-26S44RXU.js.map} +1 -1
  306. package/dist/cli-bundle/chunks/{docs-75ZLCO3G.js → docs-GYZNVS26.js} +10 -11
  307. package/dist/cli-bundle/chunks/{docs-75ZLCO3G.js.map → docs-GYZNVS26.js.map} +1 -1
  308. package/dist/cli-bundle/chunks/{eval-L2KD7W3M.js → eval-PGRVIJQU.js} +12 -14
  309. package/dist/cli-bundle/chunks/{eval-L2KD7W3M.js.map → eval-PGRVIJQU.js.map} +1 -1
  310. package/dist/cli-bundle/chunks/{eval-QGR7JCQO.js → eval-UYF3ZPVO.js} +10 -12
  311. package/dist/cli-bundle/chunks/{eval-QGR7JCQO.js.map → eval-UYF3ZPVO.js.map} +1 -1
  312. package/dist/cli-bundle/chunks/{extension-YQF4CPIR.js → extension-CPSLJQVE.js} +12 -7
  313. package/dist/cli-bundle/chunks/{extension-3JYWJ5K2.js → extension-CXJ6RELI.js} +12 -7
  314. package/dist/cli-bundle/chunks/{files-EPEJMJHQ.js → files-MBNICQFM.js} +9 -11
  315. package/dist/cli-bundle/chunks/{files-EPEJMJHQ.js.map → files-MBNICQFM.js.map} +1 -1
  316. package/dist/cli-bundle/chunks/{files-5BQWDRDT.js → files-NQHEXUZD.js} +11 -13
  317. package/dist/cli-bundle/chunks/{files-5BQWDRDT.js.map → files-NQHEXUZD.js.map} +1 -1
  318. package/dist/cli-bundle/chunks/{focus-RWGKD76E.js → focus-DWYIG7GU.js} +10 -14
  319. package/dist/cli-bundle/chunks/{focus-RWGKD76E.js.map → focus-DWYIG7GU.js.map} +1 -1
  320. package/dist/cli-bundle/chunks/{focus-DQVJAPOE.js → focus-XZW5423D.js} +8 -12
  321. package/dist/cli-bundle/chunks/{focus-DQVJAPOE.js.map → focus-XZW5423D.js.map} +1 -1
  322. package/dist/cli-bundle/chunks/{gc-BEJMQT64.js → gc-7GQYOS2G.js} +3 -3
  323. package/dist/cli-bundle/chunks/{gc-JEFQDJPA.js → gc-LPVMKJQJ.js} +3 -3
  324. package/dist/cli-bundle/chunks/{get-LQG6PEVG.js → get-A7MAOHCU.js} +10 -13
  325. package/dist/cli-bundle/chunks/{get-LQG6PEVG.js.map → get-A7MAOHCU.js.map} +1 -1
  326. package/dist/cli-bundle/chunks/{get-WVN75H42.js → get-DSDEKJ3L.js} +12 -15
  327. package/dist/cli-bundle/chunks/{get-WVN75H42.js.map → get-DSDEKJ3L.js.map} +1 -1
  328. package/dist/cli-bundle/chunks/{health-JJJOY7DJ.js → health-3IPFLKXB.js} +17 -17
  329. package/dist/cli-bundle/chunks/{health-P67NZ6TT.js → health-GZXGBZ36.js} +17 -17
  330. package/dist/cli-bundle/chunks/{history-RUKPKNY7.js → history-NERDJNUB.js} +8 -10
  331. package/dist/cli-bundle/chunks/history-WSZHY3PN.js +18 -0
  332. package/dist/cli-bundle/chunks/{history-compact-NQ7VPRVT.js → history-compact-2WRZ2WK4.js} +11 -14
  333. package/dist/cli-bundle/chunks/{history-compact-NQ7VPRVT.js.map → history-compact-2WRZ2WK4.js.map} +1 -1
  334. package/dist/cli-bundle/chunks/{history-compact-ZAOWR7GD.js → history-compact-HR7BB4LR.js} +13 -16
  335. package/dist/cli-bundle/chunks/{history-compact-ZAOWR7GD.js.map → history-compact-HR7BB4LR.js.map} +1 -1
  336. package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +19 -0
  337. package/dist/cli-bundle/chunks/{history-redact-YY4XYVEP.js → history-redact-O3NBCNWC.js} +9 -11
  338. package/dist/cli-bundle/chunks/{history-repair-EHL4ODQY.js → history-repair-LCMOS45X.js} +11 -14
  339. package/dist/cli-bundle/chunks/{history-repair-EHL4ODQY.js.map → history-repair-LCMOS45X.js.map} +1 -1
  340. package/dist/cli-bundle/chunks/{history-repair-YSQH6SY6.js → history-repair-XA3LC4GA.js} +13 -16
  341. package/dist/cli-bundle/chunks/{history-repair-YSQH6SY6.js.map → history-repair-XA3LC4GA.js.map} +1 -1
  342. package/dist/cli-bundle/chunks/{init-HBFGYS66.js → init-64XDLQJB.js} +12 -11
  343. package/dist/cli-bundle/chunks/init-PAX32BJA.js +22 -0
  344. package/dist/cli-bundle/chunks/{learnings-KFQO7GEZ.js → learnings-JR6MA5TI.js} +9 -11
  345. package/dist/cli-bundle/chunks/{learnings-KFQO7GEZ.js.map → learnings-JR6MA5TI.js.map} +1 -1
  346. package/dist/cli-bundle/chunks/{learnings-J555ZFPD.js → learnings-LPKCSJX7.js} +11 -13
  347. package/dist/cli-bundle/chunks/{learnings-J555ZFPD.js.map → learnings-LPKCSJX7.js.map} +1 -1
  348. package/dist/cli-bundle/chunks/{list-C7R33MD5.js → list-DNBJVO3E.js} +10 -10
  349. package/dist/cli-bundle/chunks/{list-DSN6UNFB.js → list-G5Y65VF6.js} +10 -10
  350. package/dist/cli-bundle/chunks/next-BCERKDUR.js +277 -0
  351. package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +7 -0
  352. package/dist/cli-bundle/chunks/next-FYTQF6HG.js +274 -0
  353. package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +1 -0
  354. package/dist/cli-bundle/chunks/{notes-V4VNIQL4.js → notes-2BMU3VVQ.js} +9 -11
  355. package/dist/cli-bundle/chunks/{notes-V4VNIQL4.js.map → notes-2BMU3VVQ.js.map} +1 -1
  356. package/dist/cli-bundle/chunks/{notes-VYJFN2A3.js → notes-6KTGO2OJ.js} +11 -13
  357. package/dist/cli-bundle/chunks/{notes-VYJFN2A3.js.map → notes-6KTGO2OJ.js.map} +1 -1
  358. package/dist/cli-bundle/chunks/{plan-RBHQ5PO7.js → plan-4WXEQCTN.js} +15 -18
  359. package/dist/cli-bundle/chunks/{plan-RBHQ5PO7.js.map → plan-4WXEQCTN.js.map} +1 -1
  360. package/dist/cli-bundle/chunks/{plan-DHRSVSHR.js → plan-RKZHQVXR.js} +17 -20
  361. package/dist/cli-bundle/chunks/{plan-DHRSVSHR.js.map → plan-RKZHQVXR.js.map} +1 -1
  362. package/dist/cli-bundle/chunks/profile-4OMM32CD.js +1235 -0
  363. package/dist/cli-bundle/chunks/profile-4OMM32CD.js.map +7 -0
  364. package/dist/cli-bundle/chunks/profile-QLER5ENE.js +1197 -0
  365. package/dist/cli-bundle/chunks/profile-QLER5ENE.js.map +1 -0
  366. package/dist/cli-bundle/chunks/{register-list-query-OM3E2KMY.js → register-list-query-7LV46VAU.js} +45 -21
  367. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +1 -0
  368. package/dist/cli-bundle/chunks/{register-list-query-CCMHGZTF.js → register-list-query-SNG5PGA4.js} +44 -20
  369. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +7 -0
  370. package/dist/cli-bundle/chunks/{register-mutation-N3CDEGZU.js → register-mutation-ENNDUAZG.js} +106 -40
  371. package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +1 -0
  372. package/dist/cli-bundle/chunks/{register-mutation-UXTTWL6N.js → register-mutation-KK7PHYYU.js} +105 -39
  373. package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +7 -0
  374. package/dist/cli-bundle/chunks/{register-operations-UDIFMQKD.js → register-operations-C6OWLDSH.js} +32 -34
  375. package/dist/cli-bundle/chunks/{register-operations-UDIFMQKD.js.map → register-operations-C6OWLDSH.js.map} +1 -1
  376. package/dist/cli-bundle/chunks/{register-operations-R2FLOCRI.js → register-operations-HZ6XERQG.js} +30 -32
  377. package/dist/cli-bundle/chunks/{register-operations-R2FLOCRI.js.map → register-operations-HZ6XERQG.js.map} +1 -1
  378. package/dist/cli-bundle/chunks/{register-setup-G5LTSFYK.js → register-setup-P67EMBDJ.js} +68 -25
  379. package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +1 -0
  380. package/dist/cli-bundle/chunks/{register-setup-TWHKICM2.js → register-setup-ZKJ53RS7.js} +67 -24
  381. package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +7 -0
  382. package/dist/cli-bundle/chunks/{restore-LL2WLEDG.js → restore-4MHZFJ2E.js} +9 -11
  383. package/dist/cli-bundle/chunks/restore-YALDGTQR.js +17 -0
  384. package/dist/cli-bundle/chunks/{scheduling-shortcuts-M4H2ZI64.js → scheduling-shortcuts-LB6DOLRL.js} +14 -16
  385. package/dist/cli-bundle/chunks/{scheduling-shortcuts-M4H2ZI64.js.map → scheduling-shortcuts-LB6DOLRL.js.map} +1 -1
  386. package/dist/cli-bundle/chunks/{scheduling-shortcuts-255GI3BU.js → scheduling-shortcuts-UTOYKLXQ.js} +12 -14
  387. package/dist/cli-bundle/chunks/{scheduling-shortcuts-255GI3BU.js.map → scheduling-shortcuts-UTOYKLXQ.js.map} +1 -1
  388. package/dist/cli-bundle/chunks/schema-73HR2OJW.js +75 -0
  389. package/dist/cli-bundle/chunks/schema-U6LJKSIR.js +71 -0
  390. package/dist/cli-bundle/chunks/{search-2EI6EAXH.js → search-AXPXKZER.js} +10 -12
  391. package/dist/cli-bundle/chunks/{search-QBFBLQRO.js → search-KILGT37L.js} +10 -12
  392. package/dist/cli-bundle/chunks/{stats-TKC6CAKB.js → stats-PSYVVTNZ.js} +21 -13
  393. package/dist/cli-bundle/chunks/stats-PSYVVTNZ.js.map +1 -0
  394. package/dist/cli-bundle/chunks/{stats-TCW2SZQG.js → stats-W5KNVJWQ.js} +20 -12
  395. package/dist/cli-bundle/chunks/stats-W5KNVJWQ.js.map +7 -0
  396. package/dist/cli-bundle/chunks/{telemetry-BT2VSWU2.js → telemetry-BZUF6H7G.js} +4 -4
  397. package/dist/cli-bundle/chunks/{telemetry-LQ6FRTUT.js → telemetry-GAHHQTOS.js} +4 -4
  398. package/dist/cli-bundle/chunks/test-ACD52Z3S.js +35 -0
  399. package/dist/cli-bundle/chunks/test-ACD52Z3S.js.map +7 -0
  400. package/dist/cli-bundle/chunks/{test-NV2DRPUS.js → test-PWDIZ255.js} +15 -16
  401. package/dist/cli-bundle/chunks/test-PWDIZ255.js.map +1 -0
  402. package/dist/cli-bundle/chunks/{test-all-DZ76VTPQ.js → test-all-L2MDDUCA.js} +20 -22
  403. package/dist/cli-bundle/chunks/{test-all-DZ76VTPQ.js.map → test-all-L2MDDUCA.js.map} +1 -1
  404. package/dist/cli-bundle/chunks/{test-all-REW67LXT.js → test-all-RBZ6DLU2.js} +18 -20
  405. package/dist/cli-bundle/chunks/{test-all-REW67LXT.js.map → test-all-RBZ6DLU2.js.map} +1 -1
  406. package/dist/cli-bundle/chunks/{test-runs-PX73DMMI.js → test-runs-PLRAZEFW.js} +5 -6
  407. package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +7 -0
  408. package/dist/cli-bundle/chunks/{test-runs-FQ5WNQLP.js → test-runs-UXIXPDKU.js} +6 -7
  409. package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +1 -0
  410. package/dist/cli-bundle/chunks/update-AMRSOIWP.js +24 -0
  411. package/dist/cli-bundle/chunks/update-AMRSOIWP.js.map +7 -0
  412. package/dist/cli-bundle/chunks/update-KFX2SIAC.js +28 -0
  413. package/dist/cli-bundle/chunks/update-KFX2SIAC.js.map +1 -0
  414. package/dist/cli-bundle/chunks/{update-many-Q5ZEI64S.js → update-many-RNSBX2TA.js} +35 -36
  415. package/dist/cli-bundle/chunks/{update-many-Q5ZEI64S.js.map → update-many-RNSBX2TA.js.map} +1 -1
  416. package/dist/cli-bundle/chunks/{update-many-2ILP6E4Y.js → update-many-Z5GJS5LC.js} +33 -34
  417. package/dist/cli-bundle/chunks/{update-many-2ILP6E4Y.js.map → update-many-Z5GJS5LC.js.map} +1 -1
  418. package/dist/cli-bundle/chunks/{upgrade-FOZKQTQF.js → upgrade-BRL6KCOJ.js} +13 -8
  419. package/dist/cli-bundle/chunks/{upgrade-FOZKQTQF.js.map → upgrade-BRL6KCOJ.js.map} +1 -1
  420. package/dist/cli-bundle/chunks/{upgrade-DHL74PQH.js → upgrade-HAK6JG2O.js} +11 -6
  421. package/dist/cli-bundle/chunks/{upgrade-DHL74PQH.js.map → upgrade-HAK6JG2O.js.map} +1 -1
  422. package/dist/cli-bundle/chunks/{validate-HYZNIB6W.js → validate-MTUVL5VC.js} +38 -28
  423. package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +7 -0
  424. package/dist/cli-bundle/chunks/{validate-54SYJ7QW.js → validate-X5W76YJL.js} +39 -29
  425. package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +1 -0
  426. package/dist/cli-bundle/main.js +95 -724
  427. package/dist/cli-bundle/main.js.map +4 -4
  428. package/dist/core/config/positional-value.d.ts +2 -0
  429. package/dist/core/config/positional-value.js +2 -2
  430. package/dist/core/config/positional-value.js.map +1 -1
  431. package/dist/core/extensions/activation-summary-markdown.d.ts +71 -0
  432. package/dist/core/extensions/activation-summary-markdown.js +151 -0
  433. package/dist/core/extensions/activation-summary-markdown.js.map +1 -0
  434. package/dist/core/extensions/activation-summary.d.ts +2 -0
  435. package/dist/core/extensions/activation-summary.js +3 -2
  436. package/dist/core/extensions/activation-summary.js.map +1 -1
  437. package/dist/core/extensions/capability-usage.d.ts +1 -1
  438. package/dist/core/extensions/capability-usage.js +4 -3
  439. package/dist/core/extensions/capability-usage.js.map +1 -1
  440. package/dist/core/extensions/extension-policy.d.ts +18 -3
  441. package/dist/core/extensions/extension-policy.js +116 -106
  442. package/dist/core/extensions/extension-policy.js.map +1 -1
  443. package/dist/core/extensions/extension-registries.js +3 -2
  444. package/dist/core/extensions/extension-registries.js.map +1 -1
  445. package/dist/core/extensions/extension-types.d.ts +21 -1
  446. package/dist/core/extensions/extension-types.js +3 -2
  447. package/dist/core/extensions/extension-types.js.map +1 -1
  448. package/dist/core/extensions/loader.js +439 -232
  449. package/dist/core/extensions/loader.js.map +1 -1
  450. package/dist/core/fs/fs-utils.js +27 -2
  451. package/dist/core/fs/fs-utils.js.map +1 -1
  452. package/dist/core/item/actionability.d.ts +57 -0
  453. package/dist/core/item/actionability.js +178 -0
  454. package/dist/core/item/actionability.js.map +1 -0
  455. package/dist/core/item/item-format.js +523 -410
  456. package/dist/core/item/item-format.js.map +1 -1
  457. package/dist/core/item/type-registry.js +18 -45
  458. package/dist/core/item/type-registry.js.map +1 -1
  459. package/dist/core/profile/profile-describe.d.ts +64 -0
  460. package/dist/core/profile/profile-describe.js +83 -0
  461. package/dist/core/profile/profile-describe.js.map +1 -0
  462. package/dist/core/profile/profile-lint.d.ts +53 -0
  463. package/dist/core/profile/profile-lint.js +422 -0
  464. package/dist/core/profile/profile-lint.js.map +1 -0
  465. package/dist/core/profile/profile-plan.d.ts +145 -0
  466. package/dist/core/profile/profile-plan.js +0 -0
  467. package/dist/core/profile/profile-plan.js.map +1 -0
  468. package/dist/core/profile/profile-presets.d.ts +218 -0
  469. package/dist/core/profile/profile-presets.js +325 -0
  470. package/dist/core/profile/profile-presets.js.map +1 -0
  471. package/dist/core/schema/fields-file.js +25 -25
  472. package/dist/core/schema/fields-file.js.map +1 -1
  473. package/dist/core/schema/item-types-file.js +3 -3
  474. package/dist/core/schema/item-types-file.js.map +1 -1
  475. package/dist/core/schema/runtime-schema.js +4 -4
  476. package/dist/core/schema/runtime-schema.js.map +1 -1
  477. package/dist/core/schema/status-defs-file.js +3 -3
  478. package/dist/core/schema/status-defs-file.js.map +1 -1
  479. package/dist/core/shared/serialization.js +83 -62
  480. package/dist/core/shared/serialization.js.map +1 -1
  481. package/dist/core/store/item-store.d.ts +1 -0
  482. package/dist/core/store/item-store.js +16 -8
  483. package/dist/core/store/item-store.js.map +1 -1
  484. package/dist/core/store/paths.js +4 -32
  485. package/dist/core/store/paths.js.map +1 -1
  486. package/dist/core/store/settings.js +14 -14
  487. package/dist/core/store/settings.js.map +1 -1
  488. package/dist/core/telemetry/observability.js +50 -54
  489. package/dist/core/telemetry/observability.js.map +1 -1
  490. package/dist/core/telemetry/runtime.js +11 -2
  491. package/dist/core/telemetry/runtime.js.map +1 -1
  492. package/dist/core/test/background-runs.js +3 -2
  493. package/dist/core/test/background-runs.js.map +1 -1
  494. package/dist/core/validate/linked-artifact-reference.d.ts +24 -0
  495. package/dist/core/validate/linked-artifact-reference.js +41 -0
  496. package/dist/core/validate/linked-artifact-reference.js.map +1 -0
  497. package/dist/mcp/server.js +540 -420
  498. package/dist/mcp/server.js.map +1 -1
  499. package/dist/mcp/tool-definitions.js +33 -2
  500. package/dist/mcp/tool-definitions.js.map +1 -1
  501. package/dist/sdk/cli-contracts/commander-types.d.ts +1 -0
  502. package/dist/sdk/cli-contracts/commander-types.js +15 -2
  503. package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
  504. package/dist/sdk/cli-contracts/enum-contracts.d.ts +3 -3
  505. package/dist/sdk/cli-contracts/enum-contracts.js +6 -2
  506. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  507. package/dist/sdk/cli-contracts/flag-contracts.d.ts +149 -0
  508. package/dist/sdk/cli-contracts/flag-contracts.js +1514 -0
  509. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -0
  510. package/dist/sdk/cli-contracts/string-lists.d.ts +14 -0
  511. package/dist/sdk/cli-contracts/string-lists.js +20 -0
  512. package/dist/sdk/cli-contracts/string-lists.js.map +1 -0
  513. package/dist/sdk/cli-contracts/tool-option-contracts.d.ts +1 -1
  514. package/dist/sdk/cli-contracts/tool-option-contracts.js +51 -109
  515. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  516. package/dist/sdk/cli-contracts/tool-parameter-tables.d.ts +17 -0
  517. package/dist/sdk/cli-contracts/tool-parameter-tables.js +54 -5
  518. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  519. package/dist/sdk/cli-contracts/tool-schema.d.ts +74 -0
  520. package/dist/sdk/cli-contracts/tool-schema.js +871 -0
  521. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -0
  522. package/dist/sdk/cli-contracts.d.ts +13 -193
  523. package/dist/sdk/cli-contracts.js +5 -2277
  524. package/dist/sdk/cli-contracts.js.map +1 -1
  525. package/dist/sdk/compose.d.ts +11 -5
  526. package/dist/sdk/compose.js +240 -124
  527. package/dist/sdk/compose.js.map +1 -1
  528. package/dist/sdk/define.d.ts +14 -0
  529. package/dist/sdk/define.js +17 -2
  530. package/dist/sdk/define.js.map +1 -1
  531. package/dist/sdk/index.d.ts +14 -3
  532. package/dist/sdk/index.js +14 -3
  533. package/dist/sdk/index.js.map +1 -1
  534. package/dist/sdk/testing.d.ts +82 -2
  535. package/dist/sdk/testing.js +74 -3
  536. package/dist/sdk/testing.js.map +1 -1
  537. package/docs/AGENT_GUIDE.md +2 -0
  538. package/docs/CLAUDE_CODE_PLUGIN.md +2 -2
  539. package/docs/COMMANDS.md +37 -0
  540. package/docs/EXTENSIONS.md +12 -13
  541. package/docs/RELEASING.md +8 -4
  542. package/docs/SDK.md +184 -17
  543. package/docs/TESTING.md +12 -0
  544. package/docs/examples/policy-restricted-extension/README.md +6 -0
  545. package/docs/examples/policy-restricted-extension/index.ts +40 -0
  546. package/docs/examples/policy-restricted-extension/manifest.json +2 -2
  547. package/docs/examples/starter-extension/README.md +14 -2
  548. package/docs/examples/starter-extension/{index.js → index.ts} +51 -6
  549. package/docs/examples/starter-extension/manifest.json +2 -2
  550. package/package.json +20 -7
  551. package/packages/pm-beads/extensions/beads/index.ts +3 -3
  552. package/packages/pm-beads/extensions/beads/manifest.json +2 -2
  553. package/packages/pm-beads/extensions/beads/runtime-loader.ts +19 -7
  554. package/packages/pm-beads/extensions/beads/runtime.ts +155 -37
  555. package/packages/pm-calendar/extensions/calendar/index.ts +3 -3
  556. package/packages/pm-calendar/extensions/calendar/manifest.json +2 -2
  557. package/packages/pm-calendar/extensions/calendar/runtime.ts +2 -2
  558. package/packages/pm-command-kit/extensions/command-kit/index.ts +1 -1
  559. package/packages/pm-command-kit/extensions/command-kit/manifest.json +2 -2
  560. package/packages/pm-governance-audit/extensions/governance-audit/index.ts +2 -2
  561. package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +2 -2
  562. package/packages/pm-governance-audit/extensions/governance-audit/runtime.ts +1 -1
  563. package/packages/pm-guide-shell/extensions/guide-shell/index.ts +2 -2
  564. package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +2 -2
  565. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +1 -1
  566. package/packages/pm-kanban/README.md +97 -0
  567. package/packages/pm-kanban/extensions/kanban/index.ts +191 -0
  568. package/packages/pm-kanban/extensions/kanban/manifest.json +19 -0
  569. package/packages/pm-kanban/package.json +57 -0
  570. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.ts +1 -1
  571. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +2 -2
  572. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.ts +2 -2
  573. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +2 -2
  574. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.ts +1 -1
  575. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +2 -2
  576. package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +2 -2
  577. package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +1 -1
  578. package/packages/pm-templates/extensions/templates/index.ts +2 -2
  579. package/packages/pm-templates/extensions/templates/manifest.json +2 -2
  580. package/packages/pm-templates/extensions/templates/runtime.ts +1 -1
  581. package/packages/pm-todos/extensions/todos/index.ts +3 -3
  582. package/packages/pm-todos/extensions/todos/manifest.json +2 -2
  583. package/packages/pm-todos/extensions/todos/runtime-loader.ts +19 -7
  584. package/packages/pm-todos/extensions/todos/runtime.ts +177 -43
  585. package/plugins/pm-claude/scripts/pm-mcp-server.mjs +2 -2
  586. package/plugins/pm-codex/scripts/pm-mcp-server.mjs +2 -2
  587. package/scripts/bundle-cli.mjs +1 -1
  588. package/dist/cli-bundle/chunks/activity-54TXGJ2T.js +0 -18
  589. package/dist/cli-bundle/chunks/aggregate-63NWNIBR.js.map +0 -1
  590. package/dist/cli-bundle/chunks/aggregate-YHCYX2EV.js.map +0 -7
  591. package/dist/cli-bundle/chunks/chunk-6EL7SW5C.js.map +0 -7
  592. package/dist/cli-bundle/chunks/chunk-6W3Y65PL.js.map +0 -7
  593. package/dist/cli-bundle/chunks/chunk-AEACLRVH.js.map +0 -7
  594. package/dist/cli-bundle/chunks/chunk-B74BP6IS.js +0 -78
  595. package/dist/cli-bundle/chunks/chunk-B74BP6IS.js.map +0 -7
  596. package/dist/cli-bundle/chunks/chunk-BFFO3AIB.js.map +0 -1
  597. package/dist/cli-bundle/chunks/chunk-C4C3EJCJ.js.map +0 -7
  598. package/dist/cli-bundle/chunks/chunk-EYPINTFR.js.map +0 -7
  599. package/dist/cli-bundle/chunks/chunk-FBLT6WGK.js +0 -75
  600. package/dist/cli-bundle/chunks/chunk-FBLT6WGK.js.map +0 -1
  601. package/dist/cli-bundle/chunks/chunk-GQYJEEFX.js.map +0 -1
  602. package/dist/cli-bundle/chunks/chunk-HBAEFWX3.js.map +0 -7
  603. package/dist/cli-bundle/chunks/chunk-HC2S36NB.js.map +0 -1
  604. package/dist/cli-bundle/chunks/chunk-IAP5KYBQ.js.map +0 -1
  605. package/dist/cli-bundle/chunks/chunk-INPHFO33.js +0 -764
  606. package/dist/cli-bundle/chunks/chunk-INPHFO33.js.map +0 -7
  607. package/dist/cli-bundle/chunks/chunk-IOT6WRL5.js +0 -86
  608. package/dist/cli-bundle/chunks/chunk-IOT6WRL5.js.map +0 -7
  609. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js +0 -35
  610. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js.map +0 -7
  611. package/dist/cli-bundle/chunks/chunk-J3NMWFIN.js +0 -115
  612. package/dist/cli-bundle/chunks/chunk-J3NMWFIN.js.map +0 -1
  613. package/dist/cli-bundle/chunks/chunk-J7I4C5ZB.js.map +0 -7
  614. package/dist/cli-bundle/chunks/chunk-JKL6HRMV.js.map +0 -7
  615. package/dist/cli-bundle/chunks/chunk-KJZOSF7J.js.map +0 -1
  616. package/dist/cli-bundle/chunks/chunk-L7UXKP2I.js.map +0 -1
  617. package/dist/cli-bundle/chunks/chunk-LNEDHJNQ.js.map +0 -1
  618. package/dist/cli-bundle/chunks/chunk-M6TUBOGW.js.map +0 -1
  619. package/dist/cli-bundle/chunks/chunk-MEXZ5XUM.js.map +0 -7
  620. package/dist/cli-bundle/chunks/chunk-N5B6WZC5.js.map +0 -1
  621. package/dist/cli-bundle/chunks/chunk-NJ73ALW2.js +0 -761
  622. package/dist/cli-bundle/chunks/chunk-NJ73ALW2.js.map +0 -1
  623. package/dist/cli-bundle/chunks/chunk-NVXGVEFD.js +0 -83
  624. package/dist/cli-bundle/chunks/chunk-NVXGVEFD.js.map +0 -1
  625. package/dist/cli-bundle/chunks/chunk-OF7V47P3.js.map +0 -1
  626. package/dist/cli-bundle/chunks/chunk-OHDQNKJB.js.map +0 -7
  627. package/dist/cli-bundle/chunks/chunk-PEL2NLQE.js +0 -118
  628. package/dist/cli-bundle/chunks/chunk-PEL2NLQE.js.map +0 -7
  629. package/dist/cli-bundle/chunks/chunk-PRVTGX64.js.map +0 -7
  630. package/dist/cli-bundle/chunks/chunk-RAWA3Y7O.js.map +0 -1
  631. package/dist/cli-bundle/chunks/chunk-SMXSDY7J.js.map +0 -7
  632. package/dist/cli-bundle/chunks/chunk-SUREE24M.js.map +0 -1
  633. package/dist/cli-bundle/chunks/chunk-TKPP4GOO.js +0 -654
  634. package/dist/cli-bundle/chunks/chunk-TKPP4GOO.js.map +0 -1
  635. package/dist/cli-bundle/chunks/chunk-VSAABFGQ.js.map +0 -1
  636. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js +0 -32
  637. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js.map +0 -1
  638. package/dist/cli-bundle/chunks/chunk-XVYKWZNL.js.map +0 -7
  639. package/dist/cli-bundle/chunks/chunk-XXKV4UWE.js.map +0 -7
  640. package/dist/cli-bundle/chunks/chunk-ZLWRPBOW.js.map +0 -1
  641. package/dist/cli-bundle/chunks/chunk-ZV7IQ23N.js +0 -657
  642. package/dist/cli-bundle/chunks/chunk-ZV7IQ23N.js.map +0 -7
  643. package/dist/cli-bundle/chunks/close-JEBZXONN.js +0 -15
  644. package/dist/cli-bundle/chunks/config-NCNNWF6R.js.map +0 -7
  645. package/dist/cli-bundle/chunks/config-SW3U7XP2.js.map +0 -1
  646. package/dist/cli-bundle/chunks/context-55VEOYI3.js.map +0 -1
  647. package/dist/cli-bundle/chunks/context-5LB7UGKE.js.map +0 -7
  648. package/dist/cli-bundle/chunks/contracts-JXFGBOYT.js.map +0 -1
  649. package/dist/cli-bundle/chunks/contracts-SY6PDFIK.js.map +0 -7
  650. package/dist/cli-bundle/chunks/create-CLSCHGJJ.js +0 -30
  651. package/dist/cli-bundle/chunks/history-ALTM2RRP.js +0 -20
  652. package/dist/cli-bundle/chunks/history-redact-5YGLWUDH.js +0 -21
  653. package/dist/cli-bundle/chunks/init-C4CRHW22.js +0 -21
  654. package/dist/cli-bundle/chunks/register-list-query-CCMHGZTF.js.map +0 -7
  655. package/dist/cli-bundle/chunks/register-list-query-OM3E2KMY.js.map +0 -1
  656. package/dist/cli-bundle/chunks/register-mutation-N3CDEGZU.js.map +0 -1
  657. package/dist/cli-bundle/chunks/register-mutation-UXTTWL6N.js.map +0 -7
  658. package/dist/cli-bundle/chunks/register-setup-G5LTSFYK.js.map +0 -1
  659. package/dist/cli-bundle/chunks/register-setup-TWHKICM2.js.map +0 -7
  660. package/dist/cli-bundle/chunks/restore-LQHXBAY5.js +0 -19
  661. package/dist/cli-bundle/chunks/schema-C6QA367T.js.map +0 -7
  662. package/dist/cli-bundle/chunks/schema-QO5I4FBL.js.map +0 -1
  663. package/dist/cli-bundle/chunks/stats-TCW2SZQG.js.map +0 -7
  664. package/dist/cli-bundle/chunks/stats-TKC6CAKB.js.map +0 -1
  665. package/dist/cli-bundle/chunks/test-WA6RZGM2.js +0 -36
  666. package/dist/cli-bundle/chunks/test-runs-FQ5WNQLP.js.map +0 -1
  667. package/dist/cli-bundle/chunks/test-runs-PX73DMMI.js.map +0 -7
  668. package/dist/cli-bundle/chunks/update-BSKMQOYH.js +0 -28
  669. package/dist/cli-bundle/chunks/update-FIGYNQ2I.js +0 -24
  670. package/dist/cli-bundle/chunks/validate-54SYJ7QW.js.map +0 -1
  671. package/dist/cli-bundle/chunks/validate-HYZNIB6W.js.map +0 -7
  672. package/docs/examples/policy-restricted-extension/index.js +0 -21
  673. package/packages/pm-beads/extensions/beads/index.js +0 -64
  674. package/packages/pm-beads/extensions/beads/runtime-loader.js +0 -86
  675. package/packages/pm-beads/extensions/beads/runtime.js +0 -482
  676. package/packages/pm-calendar/extensions/calendar/index.js +0 -150
  677. package/packages/pm-calendar/extensions/calendar/runtime.js +0 -126
  678. package/packages/pm-command-kit/extensions/command-kit/index.js +0 -181
  679. package/packages/pm-governance-audit/extensions/governance-audit/index.js +0 -177
  680. package/packages/pm-governance-audit/extensions/governance-audit/runtime.js +0 -153
  681. package/packages/pm-guide-shell/extensions/guide-shell/index.js +0 -98
  682. package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +0 -294
  683. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/index.js +0 -18
  684. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.js +0 -124
  685. package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.js +0 -110
  686. package/packages/pm-search-advanced/extensions/search-advanced/index.js +0 -258
  687. package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +0 -361
  688. package/packages/pm-templates/extensions/templates/index.js +0 -132
  689. package/packages/pm-templates/extensions/templates/runtime.js +0 -35
  690. package/packages/pm-todos/extensions/todos/index.js +0 -81
  691. package/packages/pm-todos/extensions/todos/runtime-loader.js +0 -86
  692. package/packages/pm-todos/extensions/todos/runtime.js +0 -545
  693. /package/dist/cli-bundle/chunks/{activity-54TXGJ2T.js.map → activity-AW6XVFH6.js.map} +0 -0
  694. /package/dist/cli-bundle/chunks/{activity-N7RVTLBQ.js.map → activity-DBLQVIP6.js.map} +0 -0
  695. /package/dist/cli-bundle/chunks/{chunk-F32L4HR6.js.map → chunk-27BXPBAY.js.map} +0 -0
  696. /package/dist/cli-bundle/chunks/{chunk-5BBEWX6C.js.map → chunk-3VGN2UWE.js.map} +0 -0
  697. /package/dist/cli-bundle/chunks/{chunk-FMWW2JDU.js.map → chunk-AXIDKKAT.js.map} +0 -0
  698. /package/dist/cli-bundle/chunks/{chunk-TIM4OD74.js.map → chunk-BDTISOSD.js.map} +0 -0
  699. /package/dist/cli-bundle/chunks/{chunk-CZIFFMZI.js.map → chunk-DDPTYJIM.js.map} +0 -0
  700. /package/dist/cli-bundle/chunks/{chunk-AYPQUFCX.js.map → chunk-EJUDVUYZ.js.map} +0 -0
  701. /package/dist/cli-bundle/chunks/{chunk-EOGBMLCE.js.map → chunk-EVMTBV6V.js.map} +0 -0
  702. /package/dist/cli-bundle/chunks/{chunk-CG3KP6I5.js.map → chunk-G7I7DEZA.js.map} +0 -0
  703. /package/dist/cli-bundle/chunks/{chunk-F4BNR2IN.js.map → chunk-HYTGA6GI.js.map} +0 -0
  704. /package/dist/cli-bundle/chunks/{chunk-2WCYE3IF.js.map → chunk-HZZEHPRG.js.map} +0 -0
  705. /package/dist/cli-bundle/chunks/{chunk-YV2OSAMS.js.map → chunk-IJYK2T43.js.map} +0 -0
  706. /package/dist/cli-bundle/chunks/{chunk-QOUOMPHO.js.map → chunk-JPECA746.js.map} +0 -0
  707. /package/dist/cli-bundle/chunks/{chunk-OQ2E64FH.js.map → chunk-KNPEF7QG.js.map} +0 -0
  708. /package/dist/cli-bundle/chunks/{chunk-3BKH2CL3.js.map → chunk-L5OEFZQG.js.map} +0 -0
  709. /package/dist/cli-bundle/chunks/{chunk-5S4ZGDB2.js.map → chunk-N74UMG5H.js.map} +0 -0
  710. /package/dist/cli-bundle/chunks/{chunk-IXAZI443.js.map → chunk-NFDPYAIP.js.map} +0 -0
  711. /package/dist/cli-bundle/chunks/{chunk-SKC4UTRP.js.map → chunk-NKZAN7BD.js.map} +0 -0
  712. /package/dist/cli-bundle/chunks/{chunk-JPJDP4VU.js.map → chunk-NWMZWYYB.js.map} +0 -0
  713. /package/dist/cli-bundle/chunks/{chunk-KKX4Z2SE.js.map → chunk-OTUHB4HS.js.map} +0 -0
  714. /package/dist/cli-bundle/chunks/{chunk-WB5BYQMF.js.map → chunk-SLMUGTK3.js.map} +0 -0
  715. /package/dist/cli-bundle/chunks/{chunk-I6QMJ2XT.js.map → chunk-WYDHYJPO.js.map} +0 -0
  716. /package/dist/cli-bundle/chunks/{chunk-KIEAK7YE.js.map → chunk-ZRP4VG5U.js.map} +0 -0
  717. /package/dist/cli-bundle/chunks/{close-JEBZXONN.js.map → close-E6ZZGCJY.js.map} +0 -0
  718. /package/dist/cli-bundle/chunks/{close-QHMVWM7M.js.map → close-TQYAAFJP.js.map} +0 -0
  719. /package/dist/cli-bundle/chunks/{create-O4VONGPG.js.map → context-B6275WPX.js.map} +0 -0
  720. /package/dist/cli-bundle/chunks/{create-CLSCHGJJ.js.map → context-OCZ3FJ4Z.js.map} +0 -0
  721. /package/dist/cli-bundle/chunks/{extension-YQF4CPIR.js.map → create-OH3BDGBB.js.map} +0 -0
  722. /package/dist/cli-bundle/chunks/{extension-3JYWJ5K2.js.map → create-RLRJMRTM.js.map} +0 -0
  723. /package/dist/cli-bundle/chunks/{history-ALTM2RRP.js.map → extension-CPSLJQVE.js.map} +0 -0
  724. /package/dist/cli-bundle/chunks/{history-RUKPKNY7.js.map → extension-CXJ6RELI.js.map} +0 -0
  725. /package/dist/cli-bundle/chunks/{gc-BEJMQT64.js.map → gc-7GQYOS2G.js.map} +0 -0
  726. /package/dist/cli-bundle/chunks/{gc-JEFQDJPA.js.map → gc-LPVMKJQJ.js.map} +0 -0
  727. /package/dist/cli-bundle/chunks/{health-JJJOY7DJ.js.map → health-3IPFLKXB.js.map} +0 -0
  728. /package/dist/cli-bundle/chunks/{health-P67NZ6TT.js.map → health-GZXGBZ36.js.map} +0 -0
  729. /package/dist/cli-bundle/chunks/{history-redact-YY4XYVEP.js.map → history-NERDJNUB.js.map} +0 -0
  730. /package/dist/cli-bundle/chunks/{history-redact-5YGLWUDH.js.map → history-WSZHY3PN.js.map} +0 -0
  731. /package/dist/cli-bundle/chunks/{init-C4CRHW22.js.map → history-redact-MP6CH7U5.js.map} +0 -0
  732. /package/dist/cli-bundle/chunks/{init-HBFGYS66.js.map → history-redact-O3NBCNWC.js.map} +0 -0
  733. /package/dist/cli-bundle/chunks/{list-C7R33MD5.js.map → init-64XDLQJB.js.map} +0 -0
  734. /package/dist/cli-bundle/chunks/{list-DSN6UNFB.js.map → init-PAX32BJA.js.map} +0 -0
  735. /package/dist/cli-bundle/chunks/{restore-LL2WLEDG.js.map → list-DNBJVO3E.js.map} +0 -0
  736. /package/dist/cli-bundle/chunks/{restore-LQHXBAY5.js.map → list-G5Y65VF6.js.map} +0 -0
  737. /package/dist/cli-bundle/chunks/{search-2EI6EAXH.js.map → restore-4MHZFJ2E.js.map} +0 -0
  738. /package/dist/cli-bundle/chunks/{search-QBFBLQRO.js.map → restore-YALDGTQR.js.map} +0 -0
  739. /package/dist/cli-bundle/chunks/{test-NV2DRPUS.js.map → schema-73HR2OJW.js.map} +0 -0
  740. /package/dist/cli-bundle/chunks/{test-WA6RZGM2.js.map → schema-U6LJKSIR.js.map} +0 -0
  741. /package/dist/cli-bundle/chunks/{update-BSKMQOYH.js.map → search-AXPXKZER.js.map} +0 -0
  742. /package/dist/cli-bundle/chunks/{update-FIGYNQ2I.js.map → search-KILGT37L.js.map} +0 -0
  743. /package/dist/cli-bundle/chunks/{telemetry-BT2VSWU2.js.map → telemetry-BZUF6H7G.js.map} +0 -0
  744. /package/dist/cli-bundle/chunks/{telemetry-LQ6FRTUT.js.map → telemetry-GAHHQTOS.js.map} +0 -0
@@ -0,0 +1,1197 @@
1
+
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="772b3e4a-0a59-501b-a0fa-0a6596a9a1fb")}catch(e){}}();
3
+ import {
4
+ normalizeStatusToken
5
+ } from "./chunk-YJIEJRZB.js";
6
+ import {
7
+ resolveAuthor
8
+ } from "./chunk-T5RRNDA7.js";
9
+ import {
10
+ parseNestedSettingValue,
11
+ readNestedSettingValue,
12
+ resolveNestedSettingDescriptor,
13
+ writeNestedSettingValue
14
+ } from "./chunk-OKQ22KTH.js";
15
+ import {
16
+ TYPE_PRESET_DEFINITIONS,
17
+ ensureTypeFolderScaffold,
18
+ normalizeAddFieldInput,
19
+ normalizeAddStatusInput,
20
+ parseFieldsFile,
21
+ parseStatusDefsFile,
22
+ serializeFieldsFile,
23
+ serializeStatusDefsFile,
24
+ upsertField,
25
+ upsertStatusDef
26
+ } from "./chunk-2D4HATP2.js";
27
+ import {
28
+ normalizeAddTypeInput,
29
+ parseItemTypesFile,
30
+ serializeItemTypesFile,
31
+ upsertItemType
32
+ } from "./chunk-MAUKX7JC.js";
33
+ import {
34
+ CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS
35
+ } from "./chunk-HXTQJXWT.js";
36
+ import {
37
+ acquireLock
38
+ } from "./chunk-JSU5P7VS.js";
39
+ import "./chunk-QCWF6IYD.js";
40
+ import {
41
+ nowIso
42
+ } from "./chunk-AXIDKKAT.js";
43
+ import {
44
+ BUILTIN_ITEM_TYPE_VALUES,
45
+ DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,
46
+ DEFAULT_RUNTIME_STATUS_DEFINITIONS,
47
+ EXIT_CODE,
48
+ PmCliError,
49
+ filePathForSchemaSection,
50
+ getActiveExtensionRegistrations,
51
+ getSettingsPath,
52
+ normalizeRuntimeSchemaSettings,
53
+ pathExists,
54
+ readFileIfExists,
55
+ readSettings,
56
+ resolveGovernanceKnobs,
57
+ resolvePmRoot,
58
+ runActiveOnWriteHooks,
59
+ toErrorMessage,
60
+ writeFileAtomic,
61
+ writeSettings
62
+ } from "./chunk-7R4QEMZZ.js";
63
+
64
+ // dist/cli/commands/profile.js
65
+ import path2 from "node:path";
66
+
67
+ // dist/core/profile/profile-presets.js
68
+ var PROFILE_NAMES = ["agile", "ops", "research"];
69
+ var BUILTIN_PROFILES = {
70
+ agile: {
71
+ name: "agile",
72
+ title: "Agile delivery",
73
+ summary: "Story/Spike delivery with a review stage, story points, and acceptance ownership.",
74
+ types: TYPE_PRESET_DEFINITIONS.agile,
75
+ statuses: [
76
+ {
77
+ id: "review",
78
+ roles: ["active"],
79
+ aliases: ["in-review"],
80
+ description: "Work is implementation-complete and awaiting peer review."
81
+ }
82
+ ],
83
+ fields: [
84
+ {
85
+ key: "story_points",
86
+ type: "number",
87
+ commands: ["create", "update", "list"],
88
+ description: "Relative estimation size for a story or spike.",
89
+ aliases: ["points"]
90
+ },
91
+ {
92
+ key: "acceptance_owner",
93
+ type: "string",
94
+ commands: ["create", "update", "list"],
95
+ description: "Stakeholder accountable for accepting the delivered story.",
96
+ aliases: ["acceptor"]
97
+ }
98
+ ],
99
+ workflows: [
100
+ {
101
+ type: "Story",
102
+ allowed_transitions: [
103
+ ["open", "in_progress"],
104
+ ["in_progress", "review"],
105
+ ["review", "in_progress"],
106
+ ["review", "closed"],
107
+ ["in_progress", "blocked"],
108
+ ["blocked", "in_progress"]
109
+ ]
110
+ }
111
+ ],
112
+ config: [
113
+ { key: "search_provider", value: "bm25", summary: "Offline BM25 lexical search works without an embedding service." },
114
+ { key: "search_max_results", value: "20", summary: "Sprint-sized result cap for quick triage." }
115
+ ],
116
+ templates: [
117
+ {
118
+ name: "story",
119
+ options: {
120
+ type: "Story",
121
+ priority: "2",
122
+ tags: "story",
123
+ acceptanceCriteria: "Story delivers the stated user outcome with tests and docs updated.",
124
+ body: "## As a\n\n## I want\n\n## So that\n\n## Acceptance\n- [ ] \n"
125
+ }
126
+ }
127
+ ],
128
+ packages: [
129
+ { spec: "templates", reason: "Reusable create templates for recurring story shapes." },
130
+ { spec: "calendar", reason: "Sprint and iteration scheduling views." },
131
+ { spec: "search-advanced", reason: "Richer retrieval as the backlog grows." }
132
+ ]
133
+ },
134
+ ops: {
135
+ name: "ops",
136
+ title: "Operations",
137
+ summary: "Incident/Runbook response with mitigation and monitoring stages, severity, and service fields.",
138
+ types: TYPE_PRESET_DEFINITIONS.ops,
139
+ statuses: [
140
+ {
141
+ id: "mitigating",
142
+ roles: ["active"],
143
+ aliases: ["mitigation"],
144
+ description: "Active mitigation is underway to restore service."
145
+ },
146
+ {
147
+ id: "monitoring",
148
+ roles: ["active"],
149
+ aliases: ["observing"],
150
+ description: "Mitigation applied; monitoring for recurrence before closure."
151
+ }
152
+ ],
153
+ fields: [
154
+ {
155
+ key: "severity",
156
+ type: "string",
157
+ commands: ["create", "update", "list"],
158
+ description: "Incident severity classification (e.g. sev1, sev2, sev3).",
159
+ aliases: ["sev"]
160
+ },
161
+ {
162
+ key: "service",
163
+ type: "string",
164
+ commands: ["create", "update", "list"],
165
+ description: "Primary affected service or component."
166
+ }
167
+ ],
168
+ workflows: [
169
+ {
170
+ type: "Incident",
171
+ allowed_transitions: [
172
+ ["open", "mitigating"],
173
+ ["mitigating", "monitoring"],
174
+ ["monitoring", "mitigating"],
175
+ ["monitoring", "closed"],
176
+ ["mitigating", "blocked"],
177
+ ["blocked", "mitigating"]
178
+ ]
179
+ }
180
+ ],
181
+ config: [
182
+ { key: "search_provider", value: "bm25", summary: "Offline BM25 lexical search for fast incident lookup." },
183
+ { key: "search_max_results", value: "25", summary: "Wider result cap to surface related incidents and runbooks." }
184
+ ],
185
+ templates: [
186
+ {
187
+ name: "incident",
188
+ options: {
189
+ type: "Incident",
190
+ priority: "1",
191
+ tags: "incident",
192
+ acceptanceCriteria: "Service restored, root cause documented, and follow-ups filed.",
193
+ body: "## Impact\n\n## Timeline\n\n## Root cause\n\n## Mitigation\n\n## Follow-ups\n"
194
+ }
195
+ }
196
+ ],
197
+ packages: [
198
+ { spec: "lifecycle-hooks", reason: "Automate transitions and notifications on incident state changes." },
199
+ { spec: "governance-audit", reason: "Audit incident metadata completeness and closure quality." },
200
+ { spec: "calendar", reason: "On-call and follow-up scheduling." }
201
+ ]
202
+ },
203
+ research: {
204
+ name: "research",
205
+ title: "Research",
206
+ summary: "Experiment/Hypothesis investigation with an analysis stage, hypothesis, and method fields.",
207
+ types: TYPE_PRESET_DEFINITIONS.research,
208
+ statuses: [
209
+ {
210
+ id: "analyzing",
211
+ roles: ["active"],
212
+ aliases: ["analysis"],
213
+ description: "Data collected; analysis and synthesis in progress."
214
+ }
215
+ ],
216
+ fields: [
217
+ {
218
+ key: "hypothesis",
219
+ type: "string",
220
+ commands: ["create", "update"],
221
+ description: "The testable claim the experiment evaluates."
222
+ },
223
+ {
224
+ key: "method",
225
+ type: "string",
226
+ commands: ["create", "update", "list"],
227
+ description: "Experimental method or protocol used to evaluate the hypothesis.",
228
+ aliases: ["protocol"]
229
+ }
230
+ ],
231
+ workflows: [
232
+ {
233
+ type: "Experiment",
234
+ allowed_transitions: [
235
+ ["open", "in_progress"],
236
+ ["in_progress", "analyzing"],
237
+ ["analyzing", "in_progress"],
238
+ ["analyzing", "closed"],
239
+ ["in_progress", "blocked"],
240
+ ["blocked", "in_progress"]
241
+ ]
242
+ }
243
+ ],
244
+ config: [
245
+ { key: "search_provider", value: "bm25", summary: "Offline BM25 lexical search across the research corpus." },
246
+ { key: "search_max_results", value: "50", summary: "Broader recall cap for literature and prior-experiment discovery." }
247
+ ],
248
+ templates: [
249
+ {
250
+ name: "experiment",
251
+ options: {
252
+ type: "Experiment",
253
+ priority: "2",
254
+ tags: "experiment",
255
+ acceptanceCriteria: "Hypothesis is supported, rejected, or refined with recorded evidence.",
256
+ body: "## Hypothesis\n\n## Method\n\n## Results\n\n## Conclusion\n"
257
+ }
258
+ }
259
+ ],
260
+ packages: [
261
+ { spec: "search-advanced", reason: "Semantic retrieval over experiments and findings." },
262
+ { spec: "templates", reason: "Consistent experiment and hypothesis scaffolds." },
263
+ { spec: "beads", reason: "Import structured prior work into the tracker." }
264
+ ]
265
+ }
266
+ };
267
+ function normalizeProfileLookupKey(rawValue) {
268
+ return rawValue.trim().toLowerCase().replaceAll("-", "_");
269
+ }
270
+ function formatAvailableProfileNames(profiles) {
271
+ return profiles.map((entry) => entry.definition.name).join(", ");
272
+ }
273
+ function resolveProfileCatalog(contributions = []) {
274
+ const profiles = PROFILE_NAMES.map((name) => ({
275
+ definition: BUILTIN_PROFILES[name],
276
+ source: "builtin"
277
+ }));
278
+ const builtinKeys = new Set(PROFILE_NAMES.map((name) => normalizeProfileLookupKey(name)));
279
+ const seen = new Set(builtinKeys);
280
+ const warnings = [];
281
+ for (const contribution of contributions) {
282
+ const key = normalizeProfileLookupKey(contribution.profile.name);
283
+ if (builtinKeys.has(key)) {
284
+ warnings.push(`Extension "${contribution.name}" profile "${contribution.profile.name}" uses a name reserved by a built-in archetype and was ignored.`);
285
+ continue;
286
+ }
287
+ if (seen.has(key)) {
288
+ warnings.push(`Profile "${contribution.profile.name}" from extension "${contribution.name}" duplicates an already-registered profile and was ignored.`);
289
+ continue;
290
+ }
291
+ seen.add(key);
292
+ profiles.push({ definition: contribution.profile, source: "extension", package: contribution.name });
293
+ }
294
+ return { profiles, warnings };
295
+ }
296
+ function resolveProfileEntry(rawValue, contributions = []) {
297
+ const { profiles, warnings } = resolveProfileCatalog(contributions);
298
+ if (typeof rawValue !== "string" || rawValue.trim().length === 0) {
299
+ throw new Error(`Profile name is required. Allowed: ${formatAvailableProfileNames(profiles)}.`);
300
+ }
301
+ const key = normalizeProfileLookupKey(rawValue);
302
+ const match = profiles.find((entry) => normalizeProfileLookupKey(entry.definition.name) === key);
303
+ if (match === void 0) {
304
+ throw new Error(`Invalid profile "${rawValue}". Allowed: ${formatAvailableProfileNames(profiles)}.`);
305
+ }
306
+ return { resolved: match, warnings };
307
+ }
308
+
309
+ // dist/core/profile/profile-describe.js
310
+ function describeProfileComposition(profile) {
311
+ return {
312
+ types: profile.types.length,
313
+ statuses: profile.statuses.length,
314
+ fields: profile.fields.length,
315
+ workflows: profile.workflows.length,
316
+ config: profile.config.length,
317
+ templates: profile.templates.length,
318
+ packages: profile.packages.length
319
+ };
320
+ }
321
+ function describeProjectProfile(profile) {
322
+ return {
323
+ name: profile.name,
324
+ title: profile.title,
325
+ summary: profile.summary,
326
+ composition: describeProfileComposition(profile),
327
+ types: profile.types.map((type) => lenientIdentifier(() => normalizeAddTypeInput(type).name, () => String(type.name ?? ""))),
328
+ statuses: profile.statuses.map((status) => lenientIdentifier(() => normalizeAddStatusInput(status).id, () => String(status.id ?? ""))),
329
+ fields: profile.fields.map((field) => lenientIdentifier(() => normalizeAddFieldInput(field).key, () => String(field.key ?? ""))),
330
+ workflows: profile.workflows.map((workflow) => workflow.type),
331
+ config: profile.config.map((entry) => `${entry.key}=${entry.value}`),
332
+ templates: profile.templates.map((template) => template.name),
333
+ packages: profile.packages.map((recommendation) => ({ spec: recommendation.spec, reason: recommendation.reason }))
334
+ };
335
+ }
336
+ function lenientIdentifier(normalize, raw) {
337
+ try {
338
+ return normalize();
339
+ } catch {
340
+ return raw();
341
+ }
342
+ }
343
+
344
+ // dist/core/profile/profile-lint.js
345
+ var BUILTIN_STATUS_TOKENS = new Set(DEFAULT_RUNTIME_STATUS_DEFINITIONS.flatMap((definition) => [
346
+ normalizeStatusToken(definition.id),
347
+ ...(definition.aliases ?? []).map((alias) => normalizeStatusToken(alias))
348
+ ]).filter((token) => token.length > 0));
349
+ var BUILTIN_TYPE_KEYS = new Set(BUILTIN_ITEM_TYPE_VALUES.map((name) => name.toLowerCase()));
350
+ function lintProfileIdentity(profile, findings) {
351
+ if (profile.name.trim().length === 0) {
352
+ findings.push({
353
+ severity: "error",
354
+ code: "profile_name_empty",
355
+ dimension: "profile",
356
+ message: "Profile name must not be empty; profile resolution requires a non-blank name."
357
+ });
358
+ } else if (profile.name !== normalizeProfileLookupKey(profile.name)) {
359
+ findings.push({
360
+ severity: "warning",
361
+ code: "profile_name_not_normalized",
362
+ dimension: "profile",
363
+ target: profile.name,
364
+ message: `Profile name "${profile.name}" is not in canonical form; resolution folds it to "${normalizeProfileLookupKey(profile.name)}" (lowercase, hyphens as underscores).`
365
+ });
366
+ }
367
+ if (profile.title.trim().length === 0) {
368
+ findings.push({
369
+ severity: "warning",
370
+ code: "profile_title_empty",
371
+ dimension: "profile",
372
+ message: "Profile title is empty; list and show surfaces will render a blank title."
373
+ });
374
+ }
375
+ if (profile.summary.trim().length === 0) {
376
+ findings.push({
377
+ severity: "warning",
378
+ code: "profile_summary_empty",
379
+ dimension: "profile",
380
+ message: "Profile summary is empty; list and show surfaces will render a blank archetype description."
381
+ });
382
+ }
383
+ }
384
+ function lintTypes(profile, findings) {
385
+ const declared = /* @__PURE__ */ new Set();
386
+ const seen = /* @__PURE__ */ new Set();
387
+ for (const [index, type] of profile.types.entries()) {
388
+ let name;
389
+ try {
390
+ name = normalizeAddTypeInput(type).name;
391
+ } catch (error) {
392
+ findings.push({
393
+ severity: "error",
394
+ code: "type_invalid",
395
+ dimension: "types",
396
+ target: typeof type.name === "string" ? type.name : `#${index}`,
397
+ message: toErrorMessage(error)
398
+ });
399
+ continue;
400
+ }
401
+ const key = name.toLowerCase();
402
+ if (seen.has(key)) {
403
+ findings.push({
404
+ severity: "error",
405
+ code: "type_duplicate",
406
+ dimension: "types",
407
+ target: name,
408
+ message: `Item type "${name}" is declared more than once; the later definition silently overwrites the earlier upsert.`
409
+ });
410
+ continue;
411
+ }
412
+ seen.add(key);
413
+ declared.add(key);
414
+ }
415
+ return declared;
416
+ }
417
+ function lintStatuses(profile, findings) {
418
+ const declared = /* @__PURE__ */ new Set();
419
+ const seen = /* @__PURE__ */ new Set();
420
+ for (const [index, status] of profile.statuses.entries()) {
421
+ let normalized;
422
+ try {
423
+ normalized = normalizeAddStatusInput(status);
424
+ } catch (error) {
425
+ findings.push({
426
+ severity: "error",
427
+ code: "status_invalid",
428
+ dimension: "statuses",
429
+ target: typeof status.id === "string" ? status.id : `#${index}`,
430
+ message: toErrorMessage(error)
431
+ });
432
+ continue;
433
+ }
434
+ if (seen.has(normalized.id)) {
435
+ findings.push({
436
+ severity: "error",
437
+ code: "status_duplicate",
438
+ dimension: "statuses",
439
+ target: normalized.id,
440
+ message: `Status "${normalized.id}" is declared more than once; the later definition silently overwrites the earlier upsert.`
441
+ });
442
+ continue;
443
+ }
444
+ seen.add(normalized.id);
445
+ declared.add(normalized.id);
446
+ for (const alias of normalized.aliases ?? []) {
447
+ declared.add(normalizeStatusToken(alias));
448
+ }
449
+ }
450
+ return declared;
451
+ }
452
+ function lintFields(profile, findings) {
453
+ const seen = /* @__PURE__ */ new Set();
454
+ for (const [index, field] of profile.fields.entries()) {
455
+ let key;
456
+ try {
457
+ key = normalizeAddFieldInput(field).key;
458
+ } catch (error) {
459
+ findings.push({
460
+ severity: "error",
461
+ code: "field_invalid",
462
+ dimension: "fields",
463
+ target: typeof field.key === "string" ? field.key : `#${index}`,
464
+ message: toErrorMessage(error)
465
+ });
466
+ continue;
467
+ }
468
+ if (seen.has(key)) {
469
+ findings.push({
470
+ severity: "error",
471
+ code: "field_duplicate",
472
+ dimension: "fields",
473
+ target: key,
474
+ message: `Field "${key}" is declared more than once; the later definition silently overwrites the earlier upsert.`
475
+ });
476
+ continue;
477
+ }
478
+ seen.add(key);
479
+ }
480
+ }
481
+ function lintWorkflows(profile, declaredTypes, declaredStatuses, findings) {
482
+ const seenTypes = /* @__PURE__ */ new Set();
483
+ for (const [index, workflow] of profile.workflows.entries()) {
484
+ const typeKey = workflow.type.trim().toLowerCase();
485
+ if (typeKey.length === 0) {
486
+ findings.push({
487
+ severity: "error",
488
+ code: "workflow_type_empty",
489
+ dimension: "workflows",
490
+ target: `#${index}`,
491
+ message: "Workflow has an empty type; the workflow resolver drops entries without a type."
492
+ });
493
+ continue;
494
+ }
495
+ const duplicate = seenTypes.has(typeKey);
496
+ seenTypes.add(typeKey);
497
+ if (duplicate) {
498
+ findings.push({
499
+ severity: "warning",
500
+ code: "workflow_duplicate_type",
501
+ dimension: "workflows",
502
+ target: workflow.type,
503
+ message: `Workflow type "${workflow.type}" is declared more than once; the later transition set wins.`
504
+ });
505
+ } else if (!BUILTIN_TYPE_KEYS.has(typeKey) && !declaredTypes.has(typeKey)) {
506
+ findings.push({
507
+ severity: "warning",
508
+ code: "workflow_type_unknown",
509
+ dimension: "workflows",
510
+ target: workflow.type,
511
+ 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.`
512
+ });
513
+ }
514
+ const reportedUnknownStatuses = /* @__PURE__ */ new Set();
515
+ for (const pair of workflow.allowed_transitions) {
516
+ const from = normalizeStatusToken(pair[0]);
517
+ const to = normalizeStatusToken(pair[1]);
518
+ if (from.length === 0 || to.length === 0) {
519
+ findings.push({
520
+ severity: "error",
521
+ code: "workflow_transition_malformed",
522
+ dimension: "workflows",
523
+ target: workflow.type,
524
+ message: `Workflow "${workflow.type}" has a transition with an empty status; the workflow resolver silently drops it.`
525
+ });
526
+ continue;
527
+ }
528
+ for (const token of [from, to]) {
529
+ if (BUILTIN_STATUS_TOKENS.has(token) || declaredStatuses.has(token) || reportedUnknownStatuses.has(token)) {
530
+ continue;
531
+ }
532
+ reportedUnknownStatuses.add(token);
533
+ findings.push({
534
+ severity: "warning",
535
+ code: "workflow_status_unknown",
536
+ dimension: "workflows",
537
+ target: token,
538
+ 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.`
539
+ });
540
+ }
541
+ }
542
+ }
543
+ }
544
+ function lintConfig(profile, findings) {
545
+ const seen = /* @__PURE__ */ new Set();
546
+ for (const entry of profile.config) {
547
+ const descriptor = resolveNestedSettingDescriptor(entry.key);
548
+ if (descriptor === void 0) {
549
+ findings.push({
550
+ severity: "error",
551
+ code: "config_key_unknown",
552
+ dimension: "config",
553
+ target: entry.key,
554
+ message: `Config knob "${entry.key}" is not a recognized setting; apply rejects it with a usage error.`
555
+ });
556
+ continue;
557
+ }
558
+ if (seen.has(descriptor.key)) {
559
+ findings.push({
560
+ severity: "error",
561
+ code: "config_duplicate",
562
+ dimension: "config",
563
+ target: descriptor.key,
564
+ message: `Config knob "${descriptor.key}" is set more than once; the later value silently overwrites the earlier one.`
565
+ });
566
+ } else {
567
+ seen.add(descriptor.key);
568
+ }
569
+ const parsed = parseNestedSettingValue(descriptor, entry.value);
570
+ if (!parsed.ok) {
571
+ findings.push({
572
+ severity: "error",
573
+ code: "config_value_invalid",
574
+ dimension: "config",
575
+ target: entry.key,
576
+ message: parsed.error.message
577
+ });
578
+ }
579
+ }
580
+ }
581
+ function lintTemplates(profile, declaredTypes, findings) {
582
+ for (const template of profile.templates) {
583
+ const typeOption = template.options.type;
584
+ if (typeof typeOption !== "string" || typeOption.trim().length === 0) {
585
+ continue;
586
+ }
587
+ const typeKey = typeOption.trim().toLowerCase();
588
+ if (!BUILTIN_TYPE_KEYS.has(typeKey) && !declaredTypes.has(typeKey)) {
589
+ findings.push({
590
+ severity: "warning",
591
+ code: "template_type_unknown",
592
+ dimension: "templates",
593
+ target: template.name,
594
+ message: `Template "${template.name}" creates type "${typeOption}" which is neither a built-in type nor declared by this profile.`
595
+ });
596
+ }
597
+ }
598
+ }
599
+ function lintPackages(profile, findings) {
600
+ for (const [index, recommendation] of profile.packages.entries()) {
601
+ if (recommendation.spec.trim().length === 0) {
602
+ findings.push({
603
+ severity: "warning",
604
+ code: "package_spec_empty",
605
+ dimension: "packages",
606
+ target: `#${index}`,
607
+ message: "Package recommendation has an empty spec; it cannot be surfaced as an install hint."
608
+ });
609
+ }
610
+ }
611
+ }
612
+ function lintProjectProfile(profile) {
613
+ const findings = [];
614
+ lintProfileIdentity(profile, findings);
615
+ const declaredTypes = lintTypes(profile, findings);
616
+ const declaredStatuses = lintStatuses(profile, findings);
617
+ lintFields(profile, findings);
618
+ lintWorkflows(profile, declaredTypes, declaredStatuses, findings);
619
+ lintConfig(profile, findings);
620
+ lintTemplates(profile, declaredTypes, findings);
621
+ lintPackages(profile, findings);
622
+ const errorCount = findings.filter((finding) => finding.severity === "error").length;
623
+ const warningCount = findings.length - errorCount;
624
+ return {
625
+ profile: profile.name,
626
+ ok: errorCount === 0,
627
+ findings,
628
+ errorCount,
629
+ warningCount
630
+ };
631
+ }
632
+
633
+ // dist/core/profile/profile-plan.js
634
+ function planSchemaComponent(initialFile, inputs, keyOf, serialize, upsert) {
635
+ let file = initialFile;
636
+ const changes = [];
637
+ for (const input of inputs) {
638
+ const before = serialize(file);
639
+ const result = upsert(file, input);
640
+ const after = serialize(result.file);
641
+ file = result.file;
642
+ const status = before === after ? "unchanged" : result.replaced ? "update" : "add";
643
+ changes.push({ key: keyOf(input), status });
644
+ }
645
+ return { file, changes, changed: changes.some((change) => change.status !== "unchanged") };
646
+ }
647
+ function canonicalTransitions(transitions) {
648
+ return JSON.stringify(transitions.map((pair) => pair.join("\0")).sort());
649
+ }
650
+ function planWorkflows(current, desired) {
651
+ const result = current.map((entry) => ({ ...entry }));
652
+ const changes = [];
653
+ for (const workflow of desired) {
654
+ const index = result.findIndex((entry) => entry.type === workflow.type);
655
+ const next = { type: workflow.type, allowed_transitions: workflow.allowed_transitions };
656
+ if (index < 0) {
657
+ result.push(next);
658
+ changes.push({ type: workflow.type, status: "add" });
659
+ } else if (canonicalTransitions(result[index].allowed_transitions) === canonicalTransitions(workflow.allowed_transitions)) {
660
+ changes.push({ type: workflow.type, status: "unchanged" });
661
+ } else {
662
+ result[index] = next;
663
+ changes.push({ type: workflow.type, status: "update" });
664
+ }
665
+ }
666
+ return { changes, result, changed: changes.some((change) => change.status !== "unchanged") };
667
+ }
668
+ function planConfig(profile, settings) {
669
+ const changes = [];
670
+ for (const entry of profile.config) {
671
+ const descriptor = resolveNestedSettingDescriptor(entry.key);
672
+ if (descriptor === void 0) {
673
+ throw new Error(`Profile "${profile.name}" references unknown config key "${entry.key}".`);
674
+ }
675
+ const parsed = parseNestedSettingValue(descriptor, entry.value);
676
+ if (!parsed.ok) {
677
+ throw new Error(`Profile "${profile.name}" config ${entry.key}: ${parsed.error.message}`);
678
+ }
679
+ const current = readNestedSettingValue(settings, descriptor);
680
+ const status = current === null ? "add" : current === parsed.parsed.value ? "unchanged" : "update";
681
+ changes.push({ key: descriptor.key, path: descriptor.path, value: parsed.parsed.value, status });
682
+ }
683
+ return { changes, changed: changes.some((change) => change.status !== "unchanged") };
684
+ }
685
+ function canonicalTemplateOptions(options) {
686
+ const sorted = Object.entries(options).sort(([left], [right]) => left.localeCompare(right));
687
+ return JSON.stringify(sorted);
688
+ }
689
+ function planTemplates(profile, existing) {
690
+ const changes = [];
691
+ for (const template of profile.templates) {
692
+ const current = existing.get(template.name);
693
+ let status;
694
+ if (current === void 0) {
695
+ status = "add";
696
+ } else if (canonicalTemplateOptions(current) === canonicalTemplateOptions(template.options)) {
697
+ status = "unchanged";
698
+ } else {
699
+ status = "update";
700
+ }
701
+ changes.push({ name: template.name, options: template.options, status });
702
+ }
703
+ return { changes, changed: changes.some((change) => change.status !== "unchanged") };
704
+ }
705
+ function planProfileApplication(profile, current) {
706
+ const types = planSchemaComponent(parseItemTypesFile(current.typesRaw), profile.types, (input) => normalizeAddTypeInput(input).name, serializeItemTypesFile, (file, input) => upsertItemType(file, normalizeAddTypeInput(input)));
707
+ const statuses = planSchemaComponent(parseStatusDefsFile(current.statusesRaw), profile.statuses, (input) => normalizeAddStatusInput(input).id, serializeStatusDefsFile, (file, input) => upsertStatusDef(file, normalizeAddStatusInput(input)));
708
+ const fields = planSchemaComponent(parseFieldsFile(current.fieldsRaw), profile.fields, (input) => normalizeAddFieldInput(input).key, serializeFieldsFile, (file, input) => upsertField(file, normalizeAddFieldInput(input)));
709
+ const workflows = planWorkflows(current.workflows, profile.workflows);
710
+ const config = planConfig(profile, current.settings);
711
+ const templates = planTemplates(profile, current.templates);
712
+ const packages = profile.packages.map((recommendation) => ({
713
+ spec: recommendation.spec,
714
+ reason: recommendation.reason,
715
+ status: current.installedPackages.has(recommendation.spec) ? "installed" : "recommended"
716
+ }));
717
+ const changed = types.changed || statuses.changed || fields.changed || workflows.changed || config.changed || templates.changed;
718
+ return {
719
+ profile: { name: profile.name, title: profile.title, summary: profile.summary },
720
+ types,
721
+ statuses,
722
+ fields,
723
+ workflows,
724
+ config,
725
+ templates,
726
+ packages,
727
+ changed
728
+ };
729
+ }
730
+
731
+ // dist/cli/commands/templates.js
732
+ import fs from "node:fs/promises";
733
+ import path from "node:path";
734
+ var TEMPLATE_DIRECTORY_NAME = "templates";
735
+ var TEMPLATE_FILE_EXTENSION = ".json";
736
+ var TEMPLATE_NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
737
+ var TEMPLATE_OPTION_REPEATABLE_KEYS = CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS.map((entry) => entry.target);
738
+ var TEMPLATE_OPTION_REPEATABLE_KEY_SET = new Set(TEMPLATE_OPTION_REPEATABLE_KEYS);
739
+ function normalizeTemplateName(rawName) {
740
+ const name = rawName.trim();
741
+ if (!TEMPLATE_NAME_PATTERN.test(name)) {
742
+ throw new PmCliError(`Invalid template name "${rawName}". Expected 1-64 characters matching [A-Za-z0-9][A-Za-z0-9._-]*.`, EXIT_CODE.USAGE);
743
+ }
744
+ return name;
745
+ }
746
+ function templatesDirectory(pmRoot) {
747
+ return path.join(pmRoot, TEMPLATE_DIRECTORY_NAME);
748
+ }
749
+ function templatePath(pmRoot, normalizedName) {
750
+ return path.join(templatesDirectory(pmRoot), `${normalizedName}${TEMPLATE_FILE_EXTENSION}`);
751
+ }
752
+ async function ensureTrackerInitialized(pmRoot) {
753
+ if (!await pathExists(getSettingsPath(pmRoot))) {
754
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
755
+ }
756
+ }
757
+ function sortTemplateOptions(options) {
758
+ return Object.fromEntries(Object.entries(options).sort(([left], [right]) => left.localeCompare(right)));
759
+ }
760
+ function extractTemplateOptions(rawOptions) {
761
+ const next = {};
762
+ for (const [key, value] of Object.entries(rawOptions)) {
763
+ if (value === void 0) {
764
+ continue;
765
+ }
766
+ if (TEMPLATE_OPTION_REPEATABLE_KEY_SET.has(key)) {
767
+ if (typeof value === "string") {
768
+ next[key] = [value];
769
+ continue;
770
+ }
771
+ if (!Array.isArray(value)) {
772
+ continue;
773
+ }
774
+ const values = value.filter((entry) => typeof entry === "string");
775
+ if (values.length > 0) {
776
+ next[key] = values;
777
+ }
778
+ continue;
779
+ }
780
+ if (typeof value === "string") {
781
+ next[key] = value;
782
+ continue;
783
+ }
784
+ if (Array.isArray(value) && value.every((entry) => typeof entry === "string")) {
785
+ next[key] = [...value];
786
+ }
787
+ }
788
+ return sortTemplateOptions(next);
789
+ }
790
+ function parseStoredTemplateOptions(rawOptions, templateName) {
791
+ if (typeof rawOptions !== "object" || rawOptions === null || Array.isArray(rawOptions)) {
792
+ throw new PmCliError(`Template "${templateName}" has invalid options payload.`, EXIT_CODE.GENERIC_FAILURE);
793
+ }
794
+ const optionsRecord = rawOptions;
795
+ const normalized = {};
796
+ for (const [key, value] of Object.entries(optionsRecord)) {
797
+ const normalizedKey = key.trim();
798
+ if (normalizedKey.length === 0) {
799
+ throw new PmCliError(`Template "${templateName}" contains an empty option key.`, EXIT_CODE.GENERIC_FAILURE);
800
+ }
801
+ if (typeof value === "string") {
802
+ normalized[normalizedKey] = value;
803
+ continue;
804
+ }
805
+ if (Array.isArray(value) && value.every((entry) => typeof entry === "string")) {
806
+ normalized[normalizedKey] = [...value];
807
+ continue;
808
+ }
809
+ throw new PmCliError(`Template "${templateName}" contains invalid value for option "${normalizedKey}".`, EXIT_CODE.GENERIC_FAILURE);
810
+ }
811
+ return sortTemplateOptions(normalized);
812
+ }
813
+ function parseStoredTemplateDocument(raw, normalizedName) {
814
+ let parsed;
815
+ try {
816
+ parsed = JSON.parse(raw);
817
+ } catch {
818
+ throw new PmCliError(`Template "${normalizedName}" contains invalid JSON.`, EXIT_CODE.GENERIC_FAILURE);
819
+ }
820
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
821
+ throw new PmCliError(`Template "${normalizedName}" has invalid document shape.`, EXIT_CODE.GENERIC_FAILURE);
822
+ }
823
+ const record = parsed;
824
+ const options = parseStoredTemplateOptions(record.options, normalizedName);
825
+ const now = nowIso();
826
+ return {
827
+ name: typeof record.name === "string" && record.name.trim().length > 0 ? record.name.trim() : normalizedName,
828
+ created_at: typeof record.created_at === "string" ? record.created_at : now,
829
+ updated_at: typeof record.updated_at === "string" ? record.updated_at : now,
830
+ options
831
+ };
832
+ }
833
+ async function readStoredTemplateDocument(pmRoot, normalizedName) {
834
+ const raw = await readFileIfExists(templatePath(pmRoot, normalizedName));
835
+ if (raw === null) {
836
+ throw new PmCliError(`Template "${normalizedName}" not found`, EXIT_CODE.NOT_FOUND);
837
+ }
838
+ return parseStoredTemplateDocument(raw, normalizedName);
839
+ }
840
+ async function runTemplatesSave(rawTemplateName, options, global) {
841
+ const pmRoot = resolvePmRoot(process.cwd(), global.path);
842
+ await ensureTrackerInitialized(pmRoot);
843
+ const normalizedName = normalizeTemplateName(rawTemplateName);
844
+ const nextOptions = extractTemplateOptions(options);
845
+ if (Object.keys(nextOptions).length === 0) {
846
+ throw new PmCliError("templates save requires at least one create option flag", EXIT_CODE.USAGE);
847
+ }
848
+ const now = nowIso();
849
+ const storedPath = templatePath(pmRoot, normalizedName);
850
+ let createdAt = now;
851
+ if (await pathExists(storedPath)) {
852
+ const existing = await readStoredTemplateDocument(pmRoot, normalizedName);
853
+ createdAt = existing.created_at;
854
+ }
855
+ const document = {
856
+ name: normalizedName,
857
+ created_at: createdAt,
858
+ updated_at: now,
859
+ options: nextOptions
860
+ };
861
+ await fs.mkdir(templatesDirectory(pmRoot), { recursive: true });
862
+ await writeFileAtomic(storedPath, `${JSON.stringify(document, null, 2)}
863
+ `);
864
+ return {
865
+ name: document.name,
866
+ created_at: document.created_at,
867
+ updated_at: document.updated_at,
868
+ path: storedPath,
869
+ options: document.options
870
+ };
871
+ }
872
+
873
+ // dist/cli/commands/profile.js
874
+ var PROFILE_SUBCOMMANDS = ["list", "show", "apply", "lint"];
875
+ var PROFILE_TYPES_LOCK_ID = "schema-types";
876
+ var PROFILE_STATUSES_LOCK_ID = "schema-statuses";
877
+ var PROFILE_FIELDS_LOCK_ID = "schema-fields";
878
+ function collectExtensionProfileContributions() {
879
+ const registrations = getActiveExtensionRegistrations();
880
+ if (registrations === null) {
881
+ return [];
882
+ }
883
+ return registrations.profiles.map((entry) => ({ name: entry.name, profile: entry.profile }));
884
+ }
885
+ function runProfileList() {
886
+ const { profiles, warnings } = resolveProfileCatalog(collectExtensionProfileContributions());
887
+ return {
888
+ action: "list",
889
+ profiles: profiles.map((resolved) => ({
890
+ name: resolved.definition.name,
891
+ title: resolved.definition.title,
892
+ summary: resolved.definition.summary,
893
+ source: resolved.source,
894
+ ...resolved.package !== void 0 ? { package: resolved.package } : {},
895
+ composition: describeProfileComposition(resolved.definition)
896
+ })),
897
+ warnings,
898
+ generated_at: nowIso()
899
+ };
900
+ }
901
+ function runProfileShow(name) {
902
+ let entry;
903
+ try {
904
+ entry = resolveProfileEntry(name, collectExtensionProfileContributions());
905
+ } catch (error) {
906
+ throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);
907
+ }
908
+ const { resolved } = entry;
909
+ return {
910
+ action: "show",
911
+ ...describeProjectProfile(resolved.definition),
912
+ source: resolved.source,
913
+ ...resolved.package !== void 0 ? { package: resolved.package } : {},
914
+ warnings: entry.warnings,
915
+ generated_at: nowIso()
916
+ };
917
+ }
918
+ function runProfileLint(name) {
919
+ let entry;
920
+ try {
921
+ entry = resolveProfileEntry(name, collectExtensionProfileContributions());
922
+ } catch (error) {
923
+ throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);
924
+ }
925
+ const { resolved } = entry;
926
+ const report = lintProjectProfile(resolved.definition);
927
+ return {
928
+ action: "lint",
929
+ name: resolved.definition.name,
930
+ title: resolved.definition.title,
931
+ source: resolved.source,
932
+ ...resolved.package !== void 0 ? { package: resolved.package } : {},
933
+ ok: report.ok,
934
+ error_count: report.errorCount,
935
+ warning_count: report.warningCount,
936
+ findings: report.findings,
937
+ warnings: entry.warnings,
938
+ generated_at: nowIso()
939
+ };
940
+ }
941
+ function templateFilePath(pmRoot, name) {
942
+ return path2.join(pmRoot, "templates", `${name}.json`);
943
+ }
944
+ async function readStoredTemplateOptions(pmRoot, name) {
945
+ const raw = await readFileIfExists(templateFilePath(pmRoot, name));
946
+ if (raw === null) {
947
+ return void 0;
948
+ }
949
+ try {
950
+ const parsed = JSON.parse(raw);
951
+ if (parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)) {
952
+ const options = parsed.options;
953
+ if (options !== null && typeof options === "object" && !Array.isArray(options)) {
954
+ return options;
955
+ }
956
+ }
957
+ } catch {
958
+ }
959
+ return void 0;
960
+ }
961
+ async function loadProfileCurrentState(pmRoot, schema, settings, profile) {
962
+ const templates = /* @__PURE__ */ new Map();
963
+ for (const template of profile.templates) {
964
+ const stored = await readStoredTemplateOptions(pmRoot, template.name);
965
+ if (stored !== void 0) {
966
+ templates.set(template.name, stored);
967
+ }
968
+ }
969
+ return {
970
+ typesRaw: await readFileIfExists(filePathForSchemaSection(pmRoot, schema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types)),
971
+ statusesRaw: await readFileIfExists(filePathForSchemaSection(pmRoot, schema.files.statuses, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses)),
972
+ fieldsRaw: await readFileIfExists(filePathForSchemaSection(pmRoot, schema.files.fields, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields)),
973
+ workflows: settings.schema.type_workflows ?? [],
974
+ settings,
975
+ templates,
976
+ // Package recommendations are advisory: apply never installs and never
977
+ // inspects install state, so every recommendation surfaces as "recommended".
978
+ // The planner still supports an install-state set for SDK consumers that want
979
+ // richer reporting.
980
+ installedPackages: /* @__PURE__ */ new Set()
981
+ };
982
+ }
983
+ function dimensionFrom(changes) {
984
+ const added = [];
985
+ const updated = [];
986
+ const unchanged = [];
987
+ for (const change of changes) {
988
+ (change.status === "add" ? added : change.status === "update" ? updated : unchanged).push(change.key);
989
+ }
990
+ return { added, updated, unchanged };
991
+ }
992
+ function buildApplyResult(profile, plan, applied, dryRun, warnings) {
993
+ return {
994
+ action: "apply",
995
+ name: profile.name,
996
+ title: profile.title,
997
+ applied,
998
+ dry_run: dryRun,
999
+ changed: plan.changed,
1000
+ types: dimensionFrom(plan.types.changes),
1001
+ statuses: dimensionFrom(plan.statuses.changes),
1002
+ fields: dimensionFrom(plan.fields.changes),
1003
+ workflows: dimensionFrom(plan.workflows.changes.map((change) => ({ key: change.type, status: change.status }))),
1004
+ config: dimensionFrom(plan.config.changes),
1005
+ templates: dimensionFrom(plan.templates.changes.map((change) => ({ key: change.name, status: change.status }))),
1006
+ packages: plan.packages,
1007
+ warnings: [...new Set(warnings)].sort((left, right) => left.localeCompare(right)),
1008
+ generated_at: nowIso()
1009
+ };
1010
+ }
1011
+ async function runProfileApply(name, options, global) {
1012
+ const pmRoot = resolvePmRoot(process.cwd(), global.path);
1013
+ if (!await pathExists(getSettingsPath(pmRoot))) {
1014
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1015
+ }
1016
+ let profile;
1017
+ const mergeWarnings = [];
1018
+ try {
1019
+ const entry = resolveProfileEntry(name, collectExtensionProfileContributions());
1020
+ profile = entry.resolved.definition;
1021
+ mergeWarnings.push(...entry.warnings);
1022
+ } catch (error) {
1023
+ throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);
1024
+ }
1025
+ const dryRun = options.dryRun === true;
1026
+ const settings = await readSettings(pmRoot);
1027
+ const schema = normalizeRuntimeSchemaSettings(settings.schema);
1028
+ if (dryRun) {
1029
+ const state = await loadProfileCurrentState(pmRoot, schema, settings, profile);
1030
+ const plan2 = planProfile(profile, state);
1031
+ return buildApplyResult(profile, plan2, false, true, [...mergeWarnings]);
1032
+ }
1033
+ const author = resolveAuthor(options.author, settings.author_default);
1034
+ const governance = resolveGovernanceKnobs(settings);
1035
+ const force = Boolean(options.force);
1036
+ const warnings = [...mergeWarnings];
1037
+ const releasers = [];
1038
+ const acquire = async (lockId) => {
1039
+ releasers.push(await acquireLock(pmRoot, lockId, settings.locks.ttl_seconds, author, force, governance.force_required_for_stale_lock));
1040
+ };
1041
+ let plan;
1042
+ try {
1043
+ await acquire(PROFILE_TYPES_LOCK_ID);
1044
+ await acquire(PROFILE_STATUSES_LOCK_ID);
1045
+ await acquire(PROFILE_FIELDS_LOCK_ID);
1046
+ const state = await loadProfileCurrentState(pmRoot, schema, settings, profile);
1047
+ plan = planProfile(profile, state);
1048
+ if (plan.types.changed) {
1049
+ const typesPath = filePathForSchemaSection(pmRoot, schema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types);
1050
+ await writeFileAtomic(typesPath, serializeItemTypesFile(plan.types.file));
1051
+ const stagedNames = new Set(profile.types.map((type) => normalizeAddTypeInput(type).name));
1052
+ const stagedDefinitions = plan.types.file.definitions.filter((definition) => stagedNames.has(definition.name));
1053
+ await ensureTypeFolderScaffold(pmRoot, stagedDefinitions, warnings, "profile:apply-type-folder");
1054
+ warnings.push(...await runActiveOnWriteHooks({ path: typesPath, scope: "project", op: "profile:apply-types" }));
1055
+ }
1056
+ if (plan.statuses.changed) {
1057
+ const statusesPath = filePathForSchemaSection(pmRoot, schema.files.statuses, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses);
1058
+ await writeFileAtomic(statusesPath, serializeStatusDefsFile(plan.statuses.file));
1059
+ warnings.push(...await runActiveOnWriteHooks({ path: statusesPath, scope: "project", op: "profile:apply-statuses" }));
1060
+ }
1061
+ if (plan.fields.changed) {
1062
+ const fieldsPath = filePathForSchemaSection(pmRoot, schema.files.fields, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields);
1063
+ await writeFileAtomic(fieldsPath, serializeFieldsFile(plan.fields.file));
1064
+ warnings.push(...await runActiveOnWriteHooks({ path: fieldsPath, scope: "project", op: "profile:apply-fields" }));
1065
+ }
1066
+ if (plan.config.changed || plan.workflows.changed) {
1067
+ for (const change of plan.config.changes) {
1068
+ if (change.status === "unchanged") {
1069
+ continue;
1070
+ }
1071
+ const descriptor = resolveNestedSettingDescriptor(change.key);
1072
+ if (descriptor !== void 0) {
1073
+ writeNestedSettingValue(settings, descriptor, change.value);
1074
+ }
1075
+ }
1076
+ settings.schema.type_workflows = plan.workflows.result;
1077
+ await writeSettings(pmRoot, settings, "profile:apply-config");
1078
+ }
1079
+ for (const change of plan.templates.changes) {
1080
+ if (change.status === "unchanged") {
1081
+ continue;
1082
+ }
1083
+ await runTemplatesSave(change.name, { ...change.options }, global);
1084
+ }
1085
+ } finally {
1086
+ for (const release of releasers.reverse()) {
1087
+ try {
1088
+ await release();
1089
+ } catch {
1090
+ }
1091
+ }
1092
+ }
1093
+ return buildApplyResult(profile, plan, plan.changed, false, warnings);
1094
+ }
1095
+ function planProfile(profile, state) {
1096
+ try {
1097
+ return planProfileApplication(profile, state);
1098
+ } catch (error) {
1099
+ throw new PmCliError(error instanceof Error ? error.message : String(error), EXIT_CODE.USAGE);
1100
+ }
1101
+ }
1102
+ function formatDimensionLine(label, dimension) {
1103
+ const segments = [];
1104
+ if (dimension.added.length > 0) {
1105
+ segments.push(`+${dimension.added.join(", ")}`);
1106
+ }
1107
+ if (dimension.updated.length > 0) {
1108
+ segments.push(`~${dimension.updated.join(", ")}`);
1109
+ }
1110
+ if (segments.length === 0) {
1111
+ return void 0;
1112
+ }
1113
+ return ` ${label}: ${segments.join(" ")}`;
1114
+ }
1115
+ function formatProfileListHuman(result) {
1116
+ const lines = ["Project profiles:"];
1117
+ for (const profile of result.profiles) {
1118
+ const origin = profile.source === "extension" ? ` [${profile.package ?? "extension"}]` : "";
1119
+ lines.push(` ${profile.name} \u2014 ${profile.title}: ${profile.summary}${origin}`);
1120
+ }
1121
+ for (const warning of result.warnings) {
1122
+ lines.push(` warning: ${warning}`);
1123
+ }
1124
+ return lines.join("\n");
1125
+ }
1126
+ function formatProfileShowHuman(result) {
1127
+ const origin = result.source === "extension" ? ` [${result.package ?? "extension"}]` : "";
1128
+ const lines = [`${result.name} \u2014 ${result.title}${origin}`, result.summary, ""];
1129
+ lines.push(`types: ${result.types.join(", ") || "(none)"}`);
1130
+ lines.push(`statuses: ${result.statuses.join(", ") || "(none)"}`);
1131
+ lines.push(`fields: ${result.fields.join(", ") || "(none)"}`);
1132
+ lines.push(`workflows: ${result.workflows.join(", ") || "(none)"}`);
1133
+ lines.push(`config: ${result.config.join(", ") || "(none)"}`);
1134
+ lines.push(`templates: ${result.templates.join(", ") || "(none)"}`);
1135
+ lines.push(`packages: ${result.packages.map((pkg) => pkg.spec).join(", ") || "(none)"}`);
1136
+ for (const warning of result.warnings) {
1137
+ lines.push(`warning: ${warning}`);
1138
+ }
1139
+ return lines.join("\n");
1140
+ }
1141
+ function formatProfileLintHuman(result) {
1142
+ const origin = result.source === "extension" ? ` [${result.package ?? "extension"}]` : "";
1143
+ const totalWarningCount = result.warning_count + result.warnings.length;
1144
+ const verdict = result.ok ? `Profile ${result.name}${origin}: ok (${totalWarningCount} warning${totalWarningCount === 1 ? "" : "s"})` : `Profile ${result.name}${origin}: ${result.error_count} error${result.error_count === 1 ? "" : "s"}, ${totalWarningCount} warning${totalWarningCount === 1 ? "" : "s"}`;
1145
+ const lines = [verdict];
1146
+ for (const finding of result.findings) {
1147
+ const target = finding.target !== void 0 ? ` (${finding.target})` : "";
1148
+ lines.push(` ${finding.severity} [${finding.code}] ${finding.dimension}${target}: ${finding.message}`);
1149
+ }
1150
+ for (const warning of result.warnings) {
1151
+ lines.push(` warning: ${warning}`);
1152
+ }
1153
+ return lines.join("\n");
1154
+ }
1155
+ function formatProfileApplyHuman(result) {
1156
+ const mode = result.dry_run ? "dry-run" : result.applied ? "applied" : "no changes";
1157
+ const lines = [`Profile ${result.name} (${mode})`];
1158
+ if (!result.changed) {
1159
+ lines.push(" already up to date");
1160
+ } else {
1161
+ for (const [label, dimension] of [
1162
+ ["types", result.types],
1163
+ ["statuses", result.statuses],
1164
+ ["fields", result.fields],
1165
+ ["workflows", result.workflows],
1166
+ ["config", result.config],
1167
+ ["templates", result.templates]
1168
+ ]) {
1169
+ const line = formatDimensionLine(label, dimension);
1170
+ if (line !== void 0) {
1171
+ lines.push(line);
1172
+ }
1173
+ }
1174
+ }
1175
+ const recommended = result.packages.filter((pkg) => pkg.status === "recommended");
1176
+ if (recommended.length > 0) {
1177
+ lines.push(` recommended packages: ${recommended.map((pkg) => pkg.spec).join(", ")}`);
1178
+ }
1179
+ for (const warning of result.warnings) {
1180
+ lines.push(` warning: ${warning}`);
1181
+ }
1182
+ return lines.join("\n");
1183
+ }
1184
+ export {
1185
+ PROFILE_SUBCOMMANDS,
1186
+ formatProfileApplyHuman,
1187
+ formatProfileLintHuman,
1188
+ formatProfileListHuman,
1189
+ formatProfileShowHuman,
1190
+ runProfileApply,
1191
+ runProfileLint,
1192
+ runProfileList,
1193
+ runProfileShow
1194
+ };
1195
+ //# sourceMappingURL=profile-QLER5ENE.js.map
1196
+
1197
+ //# debugId=772b3e4a-0a59-501b-a0fa-0a6596a9a1fb