@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
@@ -5,7 +5,7 @@
5
5
  * Runs the MCP server adapter that exposes pm actions and contracts to external agents.
6
6
  */
7
7
 
8
- !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]="ad8d2ba8-8a0e-5d5e-b4d2-00e538908f91")}catch(e){}}();
8
+ !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]="28140feb-d035-55d6-bd6a-d90ed2c41f26")}catch(e){}}();
9
9
  import { realpathSync } from "node:fs";
10
10
  import readline from "node:readline";
11
11
  import { fileURLToPath } from "node:url";
@@ -26,7 +26,7 @@ import { normalizeListOptions, normalizeUpdateOptions } from "../cli/registratio
26
26
  import { UPDATE_COMMANDER_STRING_OPTION_CONTRACTS } from "../sdk/cli-contracts/commander-mutation-options.js";
27
27
  import { clearWorkspaceContractsCache } from "../sdk/runtime.js";
28
28
  import { TOOLS } from "./tool-definitions.js";
29
- import { runActivity, runAggregate, runAppend, runClaim, runClose, runCloseMany, runComments, runContracts, runContext, runCreate, runCopy, runFocus, runConfig, runDelete, runDeps, runDocs, runExtension, runFiles, runFilesDiscover, runGc, runGet, runHealth, runHistory, runHistoryCompact, runHistoryRedact, runHistoryRepair, runHistoryRepairAll, assertHistoryRepairTarget, runInit, runLearnings, runList, runNotes, runPlan, runRelease, runSchemaAddStatus, runSchemaAddType, runSchemaAddField, runSchemaApplyPreset, runSchemaInferTypes, runSchemaList, runSchemaListFields, runSchemaRemoveStatus, runSchemaRemoveType, runSchemaRemoveField, runSchemaShow, runSchemaShowField, runSchemaShowStatus, runSearch, runStats, runTelemetry, runTest, runTestAll, runUpdate, runUpdateMany, runUpgrade, runValidate, } from "../cli/commands/index.js";
29
+ import { runActivity, runAggregate, runAppend, runClaim, runClose, runCloseMany, runComments, runContracts, runContext, runCreate, runCopy, runFocus, runConfig, runDelete, runDeps, runDocs, runExtension, runFiles, runFilesDiscover, runGc, runGet, runHealth, runHistory, runHistoryCompact, runHistoryRedact, runHistoryRepair, runHistoryRepairAll, assertHistoryRepairTarget, runInit, runLearnings, runList, runNext, runNotes, runPlan, runRelease, runSchemaAddStatus, runSchemaAddType, runSchemaAddField, runSchemaApplyPreset, runSchemaInferTypes, runSchemaList, runSchemaListFields, runSchemaRemoveStatus, runSchemaRemoveType, runSchemaRemoveField, runSchemaShow, runSchemaShowField, runSchemaShowStatus, runProfileApply, runProfileLint, runProfileList, runProfileShow, runSearch, runStats, runTelemetry, runTest, runTestAll, runUpdate, runUpdateMany, runUpgrade, runValidate, } from "../cli/commands/index.js";
30
30
  const PM_PACKAGE_ROOT_ENV = "PM_CLI_PACKAGE_ROOT";
31
31
  function resolvePmPackageRoot() {
32
32
  return fileURLToPath(new URL("../..", import.meta.url));
@@ -287,63 +287,95 @@ function extensionOptionsFromArgs(args, options) {
287
287
  delete normalizedOptions.args;
288
288
  return normalizedOptions;
289
289
  }
290
- // pm-bl6m: runDynamicExtensionAction mutates the process-global active extension
291
- // registries (set globals -> run handler -> clear globals in a finally). The stdio
292
- // transport already processes JSON-RPC lines sequentially, but handleRequest is a
293
- // public entry point (tests, future concurrent transports) — if two native-action
294
- // requests ever ran concurrently, the newer request would overwrite the globals
295
- // mid-flight and whichever finished first would clear them out from under the
296
- // other (its lazily-read hooks/overrides would silently vanish). Serialize the
297
- // whole activation cycle (load -> activate -> set -> run -> clear -> deactivate)
298
- // on a dedicated FIFO queue so the critical section can never interleave. Full
290
+ // pm-bl6m / pm-zumn: every native MCP action runs inside an activation cycle that
291
+ // mutates the process-global active extension registries (set globals -> run -> clear
292
+ // globals in a finally). The stdio transport already processes JSON-RPC lines
293
+ // sequentially, but handleRequest is a public entry point (tests, future concurrent
294
+ // transports) — if two requests ever ran concurrently, the newer one would overwrite
295
+ // the globals mid-flight and whichever finished first would clear them out from under
296
+ // the other (its lazily-read hooks/overrides would silently vanish). Serialize the
297
+ // whole activation cycle (load -> activate -> set -> run -> clear -> deactivate) on a
298
+ // dedicated FIFO queue so the critical section can never interleave. Full
299
299
  // request-scoped registry plumbing remains possible later if true intra-server
300
300
  // concurrency is ever needed.
301
- const dynamicExtensionActionQueue = createSerialQueue();
302
- async function runDynamicExtensionAction(action, args, options, global) {
303
- if (global.noExtensions) {
304
- throw new PmCliError(`Unsupported native pm action: ${action}`, 64);
305
- }
306
- const pmRoot = resolvePmRoot(process.cwd(), global.path);
307
- if (!(await pathExists(getSettingsPath(pmRoot)))) {
308
- throw new PmCliError(`Unsupported native pm action: ${action}`, 64);
309
- }
310
- return dynamicExtensionActionQueue.enqueue(async () => {
301
+ const extensionActivationQueue = createSerialQueue();
302
+ /**
303
+ * Publishes empty active extension registries so built-in fallback actions cannot
304
+ * observe stale or partially published extension state from a failed activation cycle.
305
+ */
306
+ function resetActiveExtensionRegistries() {
307
+ setActiveExtensionHooks(createEmptyExtensionHookRegistry());
308
+ setActiveExtensionCommands(createEmptyExtensionCommandRegistry());
309
+ setActiveExtensionParsers(createEmptyExtensionParserRegistry());
310
+ setActiveExtensionPreflight(createEmptyExtensionPreflightRegistry());
311
+ setActiveExtensionServices(createEmptyExtensionServiceRegistry());
312
+ setActiveExtensionRenderers(createEmptyExtensionRendererRegistry());
313
+ setActiveExtensionRegistrations(createEmptyExtensionRegistrationRegistry());
314
+ }
315
+ /**
316
+ * Run `run` with workspace extensions loaded, activated, and published to the
317
+ * process-global active registries, then torn down afterwards. pm-zumn: built-in native
318
+ * actions (pm_list/pm_profile/pm_schema/pm_create/...) read
319
+ * `getActiveExtensionRegistrations()` for custom item types, fields, and profiles, so
320
+ * they must activate extensions exactly like the CLI (main.ts activates for every
321
+ * command). Previously only the dynamic-extension dispatch activated, leaving
322
+ * extension-contributed schema and profiles invisible over MCP for every built-in
323
+ * action. Activation is skipped (`run` receives `null`) when extensions are disabled or
324
+ * no workspace exists yet (for example `init`). EVERY action — activating or not — is
325
+ * serialized on {@link extensionActivationQueue} so a built-in action's reads of the
326
+ * process-global active registries can never interleave with another request's
327
+ * activation cycle; per-request isolation therefore holds even if a truly concurrent
328
+ * transport is added later (not just because the stdio transport is sequential today).
329
+ */
330
+ async function withActiveExtensions(global, explicitCwd, resolutionCwd, run) {
331
+ // Run the whole cycle on the queue so registry mutations never interleave. Only an
332
+ // EXPLICIT cwd mutates process.cwd() — pinned inside this serialized slot so the chdir
333
+ // can't be clobbered mid-flight and the built-in handler resolves against it too. A
334
+ // request without an explicit cwd runs in the server's current directory and never
335
+ // touches process.cwd() (important so concurrent direct callers can't corrupt a shared
336
+ // cwd). Either way activation resolves against resolutionCwd, the entry-time snapshot,
337
+ // so it never depends on a deferred process.cwd() read.
338
+ return extensionActivationQueue.enqueue(async () => {
311
339
  try {
312
- return await runDynamicExtensionActionExclusively(action, args, options, global, pmRoot);
340
+ return explicitCwd === undefined
341
+ ? await withActiveExtensionsExclusively(global, resolutionCwd, run)
342
+ : await withCwd(explicitCwd, () => withActiveExtensionsExclusively(global, resolutionCwd, run));
313
343
  }
314
344
  finally {
315
345
  clearWorkspaceContractsCache();
316
346
  }
317
347
  });
318
348
  }
319
- // Body of the dynamic-action activation cycle. Must only ever run under
320
- // dynamicExtensionActionQueue (see runDynamicExtensionAction above): it is the
321
- // exclusive owner of the process-global active extension registries while it runs.
322
- async function runDynamicExtensionActionExclusively(action, args, options, global, pmRoot) {
323
- const settings = await readSettings(pmRoot);
324
- const loadResult = await loadExtensions({
325
- pmRoot,
326
- settings,
327
- cwd: process.cwd(),
328
- noExtensions: false,
329
- });
330
- // This MCP server reloads + reactivates extensions per native-action request,
331
- // so each request is a fresh activation cycle. Run the extension teardown
332
- // lifecycle in a finally to release any resources opened during activate(),
333
- // matching the long-running-server reload contract (pm-k1e4).
334
- let activationResult;
349
+ /**
350
+ * Body of the activation cycle. Must only ever run under {@link extensionActivationQueue}
351
+ * (see {@link withActiveExtensions}): it is the exclusive owner of the process-global
352
+ * active extension registries while it runs. Returns early with `run(null)` — still
353
+ * inside the serialized critical section — when extensions are disabled or no workspace
354
+ * exists yet, so those built-in actions also observe a stable (empty) registry. This MCP
355
+ * server reloads + reactivates extensions per request, so each call is a fresh cycle with
356
+ * teardown in a finally to release resources opened during activate() (the
357
+ * long-running-server reload contract, pm-k1e4). Load/activate failures are swallowed and
358
+ * `run` is invoked with `null`, mirroring the CLI's resilient snapshot loader
359
+ * (loadRuntimeExtensionSnapshot) so a broken extension can never break a built-in action.
360
+ */
361
+ async function withActiveExtensionsExclusively(global, cwd, run) {
362
+ if (global.noExtensions) {
363
+ return run(null);
364
+ }
365
+ const pmRoot = resolvePmRoot(cwd, global.path);
366
+ if (!(await pathExists(getSettingsPath(pmRoot)))) {
367
+ return run(null);
368
+ }
369
+ let active = null;
370
+ let activated;
335
371
  try {
336
- activationResult = await activateExtensions({
337
- ...loadResult,
338
- loaded: loadResult.loaded,
339
- });
340
- const normalizedAction = normalizeActionName(action);
341
- const definition = activationResult.registrations.commands.find((entry) => normalizeActionName(entry.action) === normalizedAction);
342
- const command = definition?.command ??
343
- activationResult.commands.handlers.find((entry) => normalizeActionName(entry.command) === normalizedAction)?.command;
344
- if (!command) {
345
- throw new PmCliError(`Unsupported native pm action: ${action}`, 64);
346
- }
372
+ const settings = await readSettings(pmRoot);
373
+ const loadResult = await loadExtensions({ pmRoot, settings, cwd, noExtensions: false });
374
+ const activationResult = await activateExtensions({ ...loadResult, loaded: loadResult.loaded });
375
+ // Record the teardown handle BEFORE publishing the registries so a throw from any
376
+ // setActive* setter still runs deactivateExtensions for resources opened during
377
+ // activate() instead of silently leaking them.
378
+ activated = { loadResult, activationResult };
347
379
  setActiveExtensionHooks(activationResult.hooks);
348
380
  setActiveExtensionCommands(activationResult.commands);
349
381
  setActiveExtensionParsers(activationResult.parsers);
@@ -351,42 +383,68 @@ async function runDynamicExtensionActionExclusively(action, args, options, globa
351
383
  setActiveExtensionServices(activationResult.services);
352
384
  setActiveExtensionRenderers(activationResult.renderers);
353
385
  setActiveExtensionRegistrations(activationResult.registrations);
354
- const handlerResult = await runActiveCommandHandler({
355
- command: normalizeCommandPath(command),
356
- args: readStringArray(options.args ?? args.args),
357
- options: extensionOptionsFromArgs(args, options),
358
- global,
359
- pm_root: pmRoot,
360
- });
361
- if (!handlerResult.handled) {
362
- const suffix = handlerResult.warnings.length > 0 ? ` (${handlerResult.warnings.join(", ")})` : "";
363
- throw new PmCliError(`Unsupported native pm action: ${action}${suffix}`, 64);
364
- }
365
- return handlerResult.result;
386
+ active = { registrations: activationResult.registrations, commands: activationResult.commands, pmRoot };
387
+ }
388
+ catch (error) {
389
+ resetActiveExtensionRegistries();
390
+ // CLI parity (loadRuntimeExtensionSnapshot): a load/activate failure must never
391
+ // break a built-in action — fall back to running with no active extensions. Surface
392
+ // the cause on stderr so a broken extension is diagnosable instead of being silently
393
+ // indistinguishable from a workspace that simply has no extensions.
394
+ console.error("[pm-mcp] extension activation failed; continuing without active extensions:", error);
395
+ active = null;
396
+ }
397
+ try {
398
+ return await run(active);
366
399
  }
367
400
  finally {
368
401
  // Reset the process-global active registries FIRST so a torn-down extension's
369
402
  // overrides/hooks cannot leak into a later request in this long-running server
370
- // (e.g. a subsequent pm_list/pm_create) even if teardown below misbehaves.
371
- setActiveExtensionHooks(createEmptyExtensionHookRegistry());
372
- setActiveExtensionCommands(createEmptyExtensionCommandRegistry());
373
- setActiveExtensionParsers(createEmptyExtensionParserRegistry());
374
- setActiveExtensionPreflight(createEmptyExtensionPreflightRegistry());
375
- setActiveExtensionServices(createEmptyExtensionServiceRegistry());
376
- setActiveExtensionRenderers(createEmptyExtensionRendererRegistry());
377
- setActiveExtensionRegistrations(createEmptyExtensionRegistrationRegistry());
378
- // Best-effort teardown of extensions that activated successfully. Skip
379
- // entirely if activation itself never produced a result (nothing was set
380
- // up), and guard so an unexpected throw cannot escape the finally.
381
- if (activationResult) {
382
- await deactivateExtensions(loadResult, activationResult).catch(() => undefined);
403
+ // (for example a subsequent pm_list/pm_create) even if teardown below misbehaves.
404
+ resetActiveExtensionRegistries();
405
+ // Best-effort teardown of extensions that activated successfully. Skipped when
406
+ // activation never completed (nothing was set up); guarded so an unexpected throw
407
+ // cannot escape the finally.
408
+ if (activated) {
409
+ await deactivateExtensions(activated.loadResult, activated.activationResult).catch(() => undefined);
383
410
  }
384
411
  }
385
412
  }
386
- async function withCwd(cwd, run) {
387
- if (typeof cwd !== "string" || cwd.trim().length === 0) {
388
- return run();
413
+ /**
414
+ * Resolve `action` against the active extension command registrations and dispatch it.
415
+ * Reached by runAction's default case for dynamic (non-built-in) actions after
416
+ * {@link withActiveExtensions} has published the active registries. `active` is `null`
417
+ * when no extensions are active (disabled, no workspace, or activation failed), in
418
+ * which case no extension command can match and the action is reported unsupported.
419
+ */
420
+ async function dispatchActiveExtensionAction(action, args, options, global, active) {
421
+ if (!active) {
422
+ throw new PmCliError(`Unsupported native pm action: ${action}`, 64);
423
+ }
424
+ const normalizedAction = normalizeActionName(action);
425
+ const definition = active.registrations.commands.find((entry) => normalizeActionName(entry.action) === normalizedAction);
426
+ const command = definition?.command ??
427
+ active.commands.handlers.find((entry) => normalizeActionName(entry.command) === normalizedAction)?.command;
428
+ if (!command) {
429
+ throw new PmCliError(`Unsupported native pm action: ${action}`, 64);
430
+ }
431
+ const handlerResult = await runActiveCommandHandler({
432
+ command: normalizeCommandPath(command),
433
+ args: readStringArray(options.args ?? args.args),
434
+ options: extensionOptionsFromArgs(args, options),
435
+ global,
436
+ pm_root: active.pmRoot,
437
+ });
438
+ if (!handlerResult.handled) {
439
+ const suffix = handlerResult.warnings.length > 0 ? ` (${handlerResult.warnings.join(", ")})` : "";
440
+ throw new PmCliError(`Unsupported native pm action: ${action}${suffix}`, 64);
389
441
  }
442
+ return handlerResult.result;
443
+ }
444
+ async function withCwd(cwd, run) {
445
+ // Only ever called with an explicit, non-empty cwd (readString filters blanks), from
446
+ // inside the serialized activation queue, so the chdir/restore is exclusive per request
447
+ // and can never be clobbered by a concurrent caller.
390
448
  const previous = process.cwd();
391
449
  process.chdir(cwd);
392
450
  try {
@@ -404,7 +462,7 @@ async function withCwd(cwd, run) {
404
462
  * are forwarded unchanged so runtime fields named `full` remain valid user data.
405
463
  */
406
464
  function withMutationCompaction(args, options) {
407
- return { changedFields: args.fullChangedFields === true ? "full" : "compact", idOnly: args.idOnly === true, runnerOptions: { ...(options ?? {}) } };
465
+ return { changedFields: args.fullChangedFields === true ? "full" : "compact", idOnly: args.idOnly === true, runnerOptions: { ...options } };
408
466
  }
409
467
  function mutationListOptions(options) {
410
468
  return {
@@ -519,355 +577,414 @@ function updateManyOptionsFromFlat(options) {
519
577
  async function runAction(args) {
520
578
  const action = readRequiredString(args, "action");
521
579
  const global = globalOptions(args);
522
- const options = optionsWithAuthor(args, action);
523
- const id = readString(args, "id");
524
- const force = args.force === true;
525
- switch (action) {
526
- case "init":
527
- return runInit(readString(args, "prefix"), global, options);
528
- case "context":
529
- return runContext(options, global);
530
- case "list": {
531
- const listOptions = { ...options };
532
- if (listOptions.compact === undefined &&
533
- listOptions.brief === undefined &&
534
- listOptions.fields === undefined &&
535
- listOptions.includeBody === undefined) {
536
- listOptions.compact = true;
537
- }
538
- // pm-rmjy: echo the applied filters + resolved projection mode so agents
539
- // get structured confirmation of what the server actually ran.
540
- return withQuerySummary((await runList(readString(args, "status"), listOptions, global)), listOptions);
541
- }
542
- case "get":
543
- return runGet(id ?? readRequiredString(options, "id"), global, options);
544
- case "search": {
545
- const searchOptions = { ...options };
546
- if (searchOptions.compact === undefined &&
547
- searchOptions.full === undefined &&
548
- searchOptions.fields === undefined) {
549
- searchOptions.compact = true;
550
- }
551
- // pm-rmjy: echo the applied filters + resolved projection mode (see list).
552
- return withQuerySummary((await runSearch(readRequiredString(args, "query"), searchOptions, global)), searchOptions);
553
- }
554
- case "create": {
555
- const { changedFields, idOnly, runnerOptions } = withMutationCompaction(args, options);
556
- return projectMutationResult(await runCreate(runnerOptions, global), { changedFields, idOnly });
557
- }
558
- case "copy": {
559
- const { changedFields, idOnly, runnerOptions } = withMutationCompaction(args, options);
560
- const copyOptions = {
561
- ...runnerOptions,
562
- ...(runnerOptions.title === undefined && typeof args.title === "string" ? { title: args.title } : {}),
563
- ...(runnerOptions.message === undefined && typeof args.message === "string" ? { message: args.message } : {}),
564
- };
565
- return projectMutationResult(await runCopy(id ?? readRequiredString(copyOptions, "id"), copyOptions, global), { changedFields, idOnly });
566
- }
567
- case "focus": {
568
- const clear = options.clear === true || args.clear === true;
569
- return runFocus(id, { clear }, global);
570
- }
571
- case "update": {
572
- const { changedFields, idOnly, runnerOptions } = withMutationCompaction(args, options);
573
- return projectMutationResult(await runUpdate(id ?? readRequiredString(runnerOptions, "id"), runnerOptions, global), { changedFields, idOnly });
574
- }
575
- case "claim":
576
- return runClaim(id ?? readRequiredString(options, "id"), force, global, options);
577
- case "release":
578
- return runRelease(id ?? readRequiredString(options, "id"), force, global, options);
579
- case "close": {
580
- const { changedFields, idOnly, runnerOptions } = withMutationCompaction(args, options);
581
- const closeReason = readString(args, "reason") ??
582
- readString(args, "text") ??
583
- readString(runnerOptions, "reason") ??
584
- readString(runnerOptions, "text");
585
- return projectMutationResult(await runClose(id ?? readRequiredString(runnerOptions, "id"), closeReason, runnerOptions, global), { changedFields, idOnly });
586
- }
587
- case "comments": {
588
- const commentOptions = { ...options };
589
- const isListing = commentOptions.add === undefined &&
590
- commentOptions.stdin === undefined &&
591
- commentOptions.file === undefined &&
592
- commentOptions.edit === undefined &&
593
- commentOptions.delete === undefined;
594
- if (isListing) {
595
- commentOptions.includeMeta = true;
596
- if (commentOptions.limit === undefined && commentOptions.full !== true) {
597
- commentOptions.limit = "20";
598
- }
599
- }
600
- delete commentOptions.full;
601
- return runComments(id ?? readRequiredString(options, "id"), commentOptions, global);
602
- }
603
- case "notes":
604
- return runNotes(id ?? readRequiredString(options, "id"), options, global);
605
- case "learnings":
606
- return runLearnings(id ?? readRequiredString(options, "id"), options, global);
607
- case "files": {
608
- const fileId = id ?? readRequiredString(options, "id");
609
- if (options.discover === true) {
610
- return runFilesDiscover(fileId, withFilesDiscoveryOptions(options), global);
611
- }
612
- return runFiles(fileId, withAddNoteOption(options), global);
613
- }
614
- case "docs":
615
- return runDocs(id ?? readRequiredString(options, "id"), withAddNoteOption(options), global);
616
- case "test":
617
- return runTest(id ?? readRequiredString(options, "id"), options, global);
618
- case "test-all":
619
- return runTestAll(options, global);
620
- case "telemetry":
621
- return runTelemetry({
622
- subcommand: readString(args, "subcommand") ?? readString(options, "subcommand"),
623
- limit: typeof args.limit === "number" && Number.isFinite(args.limit)
624
- ? args.limit
625
- : typeof options.limit === "number" && Number.isFinite(options.limit)
626
- ? options.limit
627
- : readString(args, "limit") ?? readString(options, "limit"),
628
- }, global);
629
- case "validate":
630
- return runValidate(options, global);
631
- case "health": {
632
- // Default to the compact `summary` projection for agents (ok + per-check
633
- // status + warning samples; ~22x smaller than the full payload). Callers
634
- // opt into detail with brief/summary/full or the deep remediation payload
635
- // via full=true. Mirrors the compact-by-default list/search behavior (F2).
636
- const healthOptions = { ...options };
637
- if (healthOptions.brief === undefined &&
638
- healthOptions.summary === undefined &&
639
- healthOptions.full === undefined) {
640
- healthOptions.summary = true;
641
- }
642
- return runHealth(global, healthOptions);
643
- }
644
- case "contracts":
645
- return runContracts(options, global);
646
- case "config": {
647
- // pm-v68d: the narrow pm_config tool declares configAction top-level;
648
- // options.configAction/options.action remain accepted for pm_run parity.
649
- const configAction = readString(args, "configAction") ?? readString(options, "configAction") ?? readString(options, "action");
650
- if (configAction === undefined) {
651
- throw new PmCliError("Missing required argument: configAction", 64);
652
- }
653
- return runConfig(readString(args, "scope") ?? readString(options, "scope") ?? "project", configAction, readString(args, "key") ?? readString(options, "key"), options, global, readString(args, "value") ?? readString(options, "value"));
654
- }
655
- case "activity": {
656
- const activityOptions = { ...options };
657
- if (activityOptions.compact === undefined) {
658
- activityOptions.compact = activityOptions.full === true ? false : true;
659
- }
660
- delete activityOptions.full;
661
- return runActivity(activityOptions, global);
580
+ // pm-zumn: dispatch every action (built-in and dynamic) inside one extension
581
+ // activation cycle so built-in actions see extension-contributed item types, fields,
582
+ // and profiles, consistent with the CLI. Snapshot the effective resolution cwd HERE,
583
+ // at request entry (the explicit args.cwd, else the server's current directory), so the
584
+ // queued cycle resolves against the directory the request arrived in rather than a value
585
+ // process.cwd() might hold by the time the task runs. Only an explicit cwd additionally
586
+ // pins process.cwd() (inside the serialized slot) for the built-in handler.
587
+ const explicitCwd = readString(args, "cwd");
588
+ const resolutionCwd = explicitCwd ?? process.cwd();
589
+ return withActiveExtensions(global, explicitCwd, resolutionCwd, (activeExtensions) => dispatchAction(action, args, global, activeExtensions));
590
+ }
591
+ function getOwnHandler(handlers, key) {
592
+ return Object.prototype.hasOwnProperty.call(handlers, key) ? handlers[key] : undefined;
593
+ }
594
+ function readMcpTarget(ctx) {
595
+ return readString(ctx.args, "target") ?? readString(ctx.options, "target");
596
+ }
597
+ function requireMcpItemId(ctx, source = ctx.options) {
598
+ return ctx.id ?? readRequiredString(source, "id");
599
+ }
600
+ async function runMcpListAction(ctx) {
601
+ const listOptions = { ...ctx.options };
602
+ if (listOptions.compact === undefined &&
603
+ listOptions.brief === undefined &&
604
+ listOptions.fields === undefined &&
605
+ listOptions.includeBody === undefined) {
606
+ listOptions.compact = true;
607
+ }
608
+ // pm-rmjy: echo applied filters + projection mode so agents get structured confirmation.
609
+ return withQuerySummary((await runList(readString(ctx.args, "status"), listOptions, ctx.global)), listOptions);
610
+ }
611
+ async function runMcpSearchAction(ctx) {
612
+ const searchOptions = { ...ctx.options };
613
+ if (searchOptions.compact === undefined && searchOptions.full === undefined && searchOptions.fields === undefined) {
614
+ searchOptions.compact = true;
615
+ }
616
+ return withQuerySummary((await runSearch(readRequiredString(ctx.args, "query"), searchOptions, ctx.global)), searchOptions);
617
+ }
618
+ async function runMcpCreateAction(ctx) {
619
+ const { changedFields, idOnly, runnerOptions } = withMutationCompaction(ctx.args, ctx.options);
620
+ return projectMutationResult(await runCreate(runnerOptions, ctx.global), { changedFields, idOnly });
621
+ }
622
+ async function runMcpCopyAction(ctx) {
623
+ const { changedFields, idOnly, runnerOptions } = withMutationCompaction(ctx.args, ctx.options);
624
+ const copyOptions = {
625
+ ...runnerOptions,
626
+ ...(runnerOptions.title === undefined && typeof ctx.args.title === "string" ? { title: ctx.args.title } : {}),
627
+ ...(runnerOptions.message === undefined && typeof ctx.args.message === "string" ? { message: ctx.args.message } : {}),
628
+ };
629
+ return projectMutationResult(await runCopy(requireMcpItemId(ctx, copyOptions), copyOptions, ctx.global), {
630
+ changedFields,
631
+ idOnly,
632
+ });
633
+ }
634
+ async function runMcpUpdateAction(ctx) {
635
+ const { changedFields, idOnly, runnerOptions } = withMutationCompaction(ctx.args, ctx.options);
636
+ return projectMutationResult(await runUpdate(requireMcpItemId(ctx, runnerOptions), runnerOptions, ctx.global), {
637
+ changedFields,
638
+ idOnly,
639
+ });
640
+ }
641
+ async function runMcpCloseAction(ctx) {
642
+ const { changedFields, idOnly, runnerOptions } = withMutationCompaction(ctx.args, ctx.options);
643
+ const closeReason = readString(ctx.args, "reason") ??
644
+ readString(ctx.args, "text") ??
645
+ readString(runnerOptions, "reason") ??
646
+ readString(runnerOptions, "text");
647
+ return projectMutationResult(await runClose(requireMcpItemId(ctx, runnerOptions), closeReason, runnerOptions, ctx.global), { changedFields, idOnly });
648
+ }
649
+ function runMcpCommentsAction(ctx) {
650
+ const commentOptions = { ...ctx.options };
651
+ const isListing = commentOptions.add === undefined &&
652
+ commentOptions.stdin === undefined &&
653
+ commentOptions.file === undefined &&
654
+ commentOptions.edit === undefined &&
655
+ commentOptions.delete === undefined;
656
+ if (isListing) {
657
+ commentOptions.includeMeta = true;
658
+ if (commentOptions.limit === undefined && commentOptions.full !== true) {
659
+ commentOptions.limit = "20";
662
660
  }
663
- case "aggregate":
664
- return runAggregate(options, global);
665
- case "extension":
666
- return runExtension(readString(args, "target") ?? readString(options, "target"), options, global);
667
- case "extension-reload":
668
- return runExtension(undefined, { ...options, reload: true }, global);
669
- case "package":
670
- return runExtension(readString(args, "target") ?? readString(options, "target"), options, global);
671
- case "package-install":
672
- case "install":
673
- return runExtension(readString(args, "target") ?? readString(options, "target"), { ...options, install: true }, global);
674
- case "package-catalog":
675
- return runExtension(undefined, { ...options, catalog: true, vocabulary: "package" }, global);
676
- case "upgrade":
677
- return runUpgrade(readString(args, "target") ?? readString(options, "target"), options, global);
678
- case "delete":
679
- return runDelete(id ?? readRequiredString(options, "id"), options, global);
680
- case "deps":
681
- return runDeps(id ?? readRequiredString(options, "id"), options, global);
682
- case "files-discover":
683
- return runFilesDiscover(id ?? readRequiredString(options, "id"), options, global);
684
- case "history":
685
- return runHistory(id ?? readRequiredString(options, "id"), options, global);
686
- case "history-redact":
687
- return runHistoryRedact(id ?? readRequiredString(options, "id"), options, global);
688
- case "history-repair": {
689
- const repairAll = options.all === true;
690
- const repairId = id ?? readString(options, "id");
691
- assertHistoryRepairTarget(repairId, repairAll);
692
- return repairAll ? runHistoryRepairAll(options, global) : runHistoryRepair(repairId, options, global);
661
+ }
662
+ delete commentOptions.full;
663
+ return runComments(requireMcpItemId(ctx), commentOptions, ctx.global);
664
+ }
665
+ function runMcpFilesAction(ctx) {
666
+ const fileId = requireMcpItemId(ctx);
667
+ return ctx.options.discover === true
668
+ ? runFilesDiscover(fileId, withFilesDiscoveryOptions(ctx.options), ctx.global)
669
+ : runFiles(fileId, withAddNoteOption(ctx.options), ctx.global);
670
+ }
671
+ function runMcpTelemetryAction(ctx) {
672
+ return runTelemetry({
673
+ subcommand: readString(ctx.args, "subcommand") ?? readString(ctx.options, "subcommand"),
674
+ limit: resolveMcpTelemetryLimit(ctx.args, ctx.options),
675
+ }, ctx.global);
676
+ }
677
+ function resolveMcpTelemetryLimit(args, options) {
678
+ if (typeof args.limit === "number" && Number.isFinite(args.limit)) {
679
+ return args.limit;
680
+ }
681
+ if (typeof options.limit === "number" && Number.isFinite(options.limit)) {
682
+ return options.limit;
683
+ }
684
+ return readString(args, "limit") ?? readString(options, "limit");
685
+ }
686
+ function runMcpHealthAction(ctx) {
687
+ const healthOptions = { ...ctx.options };
688
+ if (healthOptions.brief === undefined && healthOptions.summary === undefined && healthOptions.full === undefined) {
689
+ healthOptions.summary = true;
690
+ }
691
+ return runHealth(ctx.global, healthOptions);
692
+ }
693
+ function runMcpConfigAction(ctx) {
694
+ const configAction = readString(ctx.args, "configAction") ?? readString(ctx.options, "configAction") ?? readString(ctx.options, "action");
695
+ if (configAction === undefined) {
696
+ throw new PmCliError("Missing required argument: configAction", 64);
697
+ }
698
+ return runConfig(readString(ctx.args, "scope") ?? readString(ctx.options, "scope") ?? "project", configAction, readString(ctx.args, "key") ?? readString(ctx.options, "key"), ctx.options, ctx.global, readString(ctx.args, "value") ?? readString(ctx.options, "value"));
699
+ }
700
+ function runMcpActivityAction(ctx) {
701
+ const activityOptions = { ...ctx.options };
702
+ if (activityOptions.compact === undefined) {
703
+ activityOptions.compact = activityOptions.full === true ? false : true;
704
+ }
705
+ delete activityOptions.full;
706
+ return runActivity(activityOptions, ctx.global);
707
+ }
708
+ function runMcpHistoryRepairAction(ctx) {
709
+ const repairAll = ctx.options.all === true;
710
+ const repairId = ctx.id ?? readString(ctx.options, "id");
711
+ assertHistoryRepairTarget(repairId, repairAll);
712
+ return repairAll ? runHistoryRepairAll(ctx.options, ctx.global) : runHistoryRepair(repairId, ctx.options, ctx.global);
713
+ }
714
+ function parseMcpInteger(value, label) {
715
+ if (typeof value === "number") {
716
+ if (!Number.isInteger(value)) {
717
+ throw new PmCliError(`${label} must be a finite integer.`, 64);
693
718
  }
694
- case "history-compact":
695
- return runHistoryCompact(id ?? readRequiredString(options, "id"), options, global);
696
- case "plan": {
697
- const subcommand = readRequiredString(options, "subcommand");
698
- const planRecord = options;
699
- const reorderToken = planRecord.reorderTo ?? args.reorderTo;
700
- const reorderTo = typeof reorderToken === "number" && Number.isFinite(reorderToken)
701
- ? reorderToken
702
- : typeof reorderToken === "string" && reorderToken.trim().length > 0
703
- ? Number.parseInt(reorderToken, 10)
704
- : undefined;
705
- const stepRef = typeof planRecord.stepRef === "string"
706
- ? planRecord.stepRef
707
- : typeof args.stepRef === "string"
708
- ? args.stepRef
709
- : undefined;
710
- return runPlan({
711
- subcommand: subcommand,
712
- id: typeof id === "string" ? id : typeof planRecord.id === "string" ? planRecord.id : undefined,
713
- stepRef,
714
- reorderTo,
715
- options: options,
716
- global,
717
- });
719
+ return value;
720
+ }
721
+ if (typeof value === "string" && value.trim().length > 0) {
722
+ const parsed = Number(value);
723
+ if (!Number.isInteger(parsed)) {
724
+ throw new PmCliError(`${label} must be a finite integer.`, 64);
718
725
  }
719
- case "schema": {
720
- // subcommand/name are top-level fields in the published action contract,
721
- // so accept them from args first and fall back to options for parity.
722
- const subcommand = readString(args, "subcommand") ?? readRequiredString(options, "subcommand");
723
- const normalizedSubcommand = subcommand.trim().toLowerCase();
724
- const schemaName = readString(args, "name") ?? readString(options, "name");
725
- const schemaAuthor = readString(args, "author") ?? readString(options, "author");
726
- const schemaForce = args.force === true || options.force === true;
727
- if (normalizedSubcommand === "list") {
728
- return runSchemaList(global);
729
- }
730
- if (normalizedSubcommand === "show") {
731
- return runSchemaShow(schemaName, global);
732
- }
733
- if (normalizedSubcommand === "show-status") {
734
- return runSchemaShowStatus(schemaName, global);
735
- }
736
- if (normalizedSubcommand === "list-fields") {
737
- return runSchemaListFields(global);
738
- }
739
- if (normalizedSubcommand === "show-field") {
740
- return runSchemaShowField(schemaName, global);
741
- }
742
- if (normalizedSubcommand === "remove-type") {
743
- return runSchemaRemoveType(schemaName, { author: schemaAuthor, force: schemaForce }, global);
744
- }
745
- if (normalizedSubcommand === "remove-field") {
746
- return runSchemaRemoveField(schemaName, { author: schemaAuthor, force: schemaForce }, global);
747
- }
748
- if (normalizedSubcommand === "apply-preset") {
749
- const presetSource = readString(args, "typePreset") ?? readString(options, "typePreset");
750
- return runSchemaApplyPreset(presetSource, { author: schemaAuthor, force: schemaForce }, global);
751
- }
752
- const aliasSource = args.alias ?? options.alias;
753
- const aliases = aliasSource === undefined ? undefined : readStringArray(aliasSource);
754
- if (normalizedSubcommand === "add-field") {
755
- const commandsSource = args.commands ?? options.commands;
756
- const commands = commandsSource === undefined ? undefined : readStringArray(commandsSource);
757
- const requiredTypesSource = args.requiredTypes ?? options.requiredTypes;
758
- const requiredTypes = requiredTypesSource === undefined ? undefined : readStringArray(requiredTypesSource);
759
- return runSchemaAddField(schemaName, {
760
- type: readString(args, "fieldType") ?? readString(options, "fieldType"),
761
- commands,
762
- description: readString(args, "description") ?? readString(options, "description"),
763
- cliFlag: readString(args, "cliFlag") ?? readString(options, "cliFlag"),
764
- alias: aliases,
765
- required: args.required === true || options.required === true,
766
- requiredOnCreate: args.requiredOnCreate === true || options.requiredOnCreate === true,
767
- // allow_unset defaults true; only an explicit false disables it.
768
- allowUnset: !(args.allowUnset === false || options.allowUnset === false),
769
- requiredTypes,
770
- author: schemaAuthor,
771
- force: schemaForce,
772
- }, global);
773
- }
774
- if (normalizedSubcommand === "add-status") {
775
- const roleSource = args.role ?? options.role;
776
- const roles = roleSource === undefined ? undefined : readStringArray(roleSource);
777
- const orderSource = args.order ?? options.order;
778
- let order;
779
- if (typeof orderSource === "number") {
780
- if (!Number.isInteger(orderSource)) {
781
- throw new PmCliError("schema add-status order must be a finite integer.", 64);
782
- }
783
- order = orderSource;
784
- }
785
- else if (typeof orderSource === "string" && orderSource.trim().length > 0) {
786
- const parsed = Number(orderSource);
787
- if (!Number.isInteger(parsed)) {
788
- throw new PmCliError("schema add-status order must be a finite integer.", 64);
789
- }
790
- order = parsed;
791
- }
792
- return runSchemaAddStatus(schemaName, {
793
- role: roles,
794
- alias: aliases,
795
- description: readString(args, "description") ?? readString(options, "description"),
796
- order,
797
- author: schemaAuthor,
798
- force: schemaForce,
799
- }, global);
800
- }
801
- if (normalizedSubcommand === "remove-status") {
802
- return runSchemaRemoveStatus(schemaName, { author: schemaAuthor, force: schemaForce }, global);
803
- }
804
- if (normalizedSubcommand !== "add-type") {
805
- throw new PmCliError(`Unknown pm schema subcommand "${subcommand}". Allowed: add-type, remove-type, add-status, remove-status, add-field, remove-field, list-fields, show-field, apply-preset, list, show, show-status`, 64);
806
- }
807
- if (args.infer === true || options.infer === true) {
808
- const minCountSource = args.minCount ?? options.minCount;
809
- const minCount = typeof minCountSource === "number"
810
- ? minCountSource
811
- : typeof minCountSource === "string" && minCountSource.trim().length > 0
812
- ? Number(minCountSource)
813
- : undefined;
814
- return runSchemaInferTypes({
815
- minCount,
816
- apply: args.apply === true || options.apply === true,
817
- author: schemaAuthor,
818
- force: schemaForce,
819
- }, global);
820
- }
821
- return runSchemaAddType(schemaName, {
822
- description: readString(args, "description") ?? readString(options, "description"),
823
- defaultStatus: readString(args, "defaultStatus") ??
824
- readString(args, "default_status") ??
825
- readString(options, "defaultStatus") ??
826
- readString(options, "default_status"),
827
- folder: readString(args, "folder") ?? readString(options, "folder"),
828
- alias: aliases,
829
- author: schemaAuthor,
830
- force: schemaForce,
831
- }, global);
726
+ return parsed;
727
+ }
728
+ return undefined;
729
+ }
730
+ function parseMcpIntegerPrefix(value, label) {
731
+ if (typeof value === "number") {
732
+ const parsed = Number.parseInt(String(value), 10);
733
+ if (!Number.isInteger(parsed)) {
734
+ throw new PmCliError(`${label} must be a finite integer.`, 64);
832
735
  }
833
- case "stats":
834
- return runStats(global, {
835
- storage: options.storage === true,
836
- metadataCoverage: options.metadataCoverage === true,
837
- fieldUtilization: options.fieldUtilization === true,
838
- byAssignee: options.byAssignee === true,
839
- byTag: options.byTag === true,
840
- byPriority: options.byPriority === true,
841
- tagPrefix: typeof options.tagPrefix === "string" ? options.tagPrefix : undefined,
842
- });
843
- case "append": {
844
- const { changedFields, runnerOptions } = withMutationCompaction(args, options);
845
- return projectMutationResult(await runAppend(id ?? readRequiredString(runnerOptions, "id"), runnerOptions, global), { changedFields });
736
+ return parsed;
737
+ }
738
+ if (typeof value === "string" && value.trim().length > 0) {
739
+ const trimmed = value.trim();
740
+ if (!/^[+-]?\d+(?:st|nd|rd|th)?$/i.test(trimmed)) {
741
+ throw new PmCliError(`${label} must be a finite integer.`, 64);
846
742
  }
847
- case "update-many": {
848
- const { changedFields, runnerOptions } = withMutationCompaction(args, options);
849
- return projectMutationResult(await runUpdateMany(updateManyOptionsFromFlat(runnerOptions), global), { changedFields });
743
+ const parsed = Number.parseInt(trimmed, 10);
744
+ if (!Number.isInteger(parsed)) {
745
+ throw new PmCliError(`${label} must be a finite integer.`, 64);
850
746
  }
851
- case "close-many": {
852
- const { changedFields, runnerOptions } = withMutationCompaction(args, options);
853
- const topLevelReason = readString(args, "reason");
854
- const closeManyRunnerOptions = topLevelReason !== undefined && runnerOptions.reason === undefined
855
- ? { ...runnerOptions, reason: topLevelReason }
856
- : { ...runnerOptions };
857
- if (force && closeManyRunnerOptions.force === undefined) {
858
- closeManyRunnerOptions.force = true;
859
- }
860
- return projectMutationResult(await runCloseMany(closeManyOptionsFromFlat(closeManyRunnerOptions), global), { changedFields });
747
+ return parsed;
748
+ }
749
+ return undefined;
750
+ }
751
+ function runMcpPlanAction(ctx) {
752
+ const subcommand = readRequiredString(ctx.options, "subcommand");
753
+ const planRecord = ctx.options;
754
+ return runPlan({
755
+ subcommand: subcommand,
756
+ id: typeof ctx.id === "string" ? ctx.id : typeof planRecord.id === "string" ? planRecord.id : undefined,
757
+ stepRef: readMcpPlanStepRef(ctx),
758
+ reorderTo: parseMcpIntegerPrefix(planRecord.reorderTo ?? ctx.args.reorderTo, "plan reorderTo"),
759
+ options: ctx.options,
760
+ global: ctx.global,
761
+ });
762
+ }
763
+ function readMcpPlanStepRef(ctx) {
764
+ return typeof ctx.options.stepRef === "string"
765
+ ? ctx.options.stepRef
766
+ : typeof ctx.args.stepRef === "string"
767
+ ? ctx.args.stepRef
768
+ : undefined;
769
+ }
770
+ function createMcpSchemaContext(ctx) {
771
+ const subcommand = readString(ctx.args, "subcommand") ?? readRequiredString(ctx.options, "subcommand");
772
+ const aliasSource = ctx.args.alias ?? ctx.options.alias;
773
+ return {
774
+ ctx,
775
+ subcommand: subcommand.trim().toLowerCase(),
776
+ name: readString(ctx.args, "name") ?? readString(ctx.options, "name"),
777
+ author: readString(ctx.args, "author") ?? readString(ctx.options, "author"),
778
+ force: ctx.args.force === true || ctx.options.force === true,
779
+ aliases: aliasSource === undefined ? undefined : readStringArray(aliasSource),
780
+ };
781
+ }
782
+ function runMcpSchemaReadOrRemoveAction(schema) {
783
+ const { ctx, subcommand, name, author, force } = schema;
784
+ const simpleHandlers = {
785
+ list: () => runSchemaList(ctx.global),
786
+ show: () => runSchemaShow(name, ctx.global),
787
+ "show-status": () => runSchemaShowStatus(name, ctx.global),
788
+ "list-fields": () => runSchemaListFields(ctx.global),
789
+ "show-field": () => runSchemaShowField(name, ctx.global),
790
+ "remove-type": () => runSchemaRemoveType(name, { author, force }, ctx.global),
791
+ "remove-field": () => runSchemaRemoveField(name, { author, force }, ctx.global),
792
+ "remove-status": () => runSchemaRemoveStatus(name, { author, force }, ctx.global),
793
+ "apply-preset": () => runSchemaApplyPreset(readString(ctx.args, "typePreset") ?? readString(ctx.options, "typePreset"), { author, force }, ctx.global),
794
+ };
795
+ const handler = getOwnHandler(simpleHandlers, subcommand);
796
+ return handler ? handler() : null;
797
+ }
798
+ function runMcpSchemaAddFieldAction(schema) {
799
+ const { ctx, name, author, force, aliases } = schema;
800
+ const commandsSource = ctx.args.commands ?? ctx.options.commands;
801
+ const requiredTypesSource = ctx.args.requiredTypes ?? ctx.options.requiredTypes;
802
+ return runSchemaAddField(name, {
803
+ type: readString(ctx.args, "fieldType") ?? readString(ctx.options, "fieldType"),
804
+ commands: commandsSource === undefined ? undefined : readStringArray(commandsSource),
805
+ description: readString(ctx.args, "description") ?? readString(ctx.options, "description"),
806
+ cliFlag: readString(ctx.args, "cliFlag") ?? readString(ctx.options, "cliFlag"),
807
+ alias: aliases,
808
+ required: ctx.args.required === true || ctx.options.required === true,
809
+ requiredOnCreate: ctx.args.requiredOnCreate === true || ctx.options.requiredOnCreate === true,
810
+ allowUnset: !(ctx.args.allowUnset === false || ctx.options.allowUnset === false),
811
+ requiredTypes: requiredTypesSource === undefined ? undefined : readStringArray(requiredTypesSource),
812
+ author,
813
+ force,
814
+ }, ctx.global);
815
+ }
816
+ function runMcpSchemaAddStatusAction(schema) {
817
+ const { ctx, name, author, force, aliases } = schema;
818
+ const roleSource = ctx.args.role ?? ctx.options.role;
819
+ return runSchemaAddStatus(name, {
820
+ role: roleSource === undefined ? undefined : readStringArray(roleSource),
821
+ alias: aliases,
822
+ description: readString(ctx.args, "description") ?? readString(ctx.options, "description"),
823
+ order: parseMcpInteger(ctx.args.order ?? ctx.options.order, "schema add-status order"),
824
+ author,
825
+ force,
826
+ }, ctx.global);
827
+ }
828
+ function runMcpSchemaAddTypeAction(schema) {
829
+ const { ctx, name, author, force, aliases } = schema;
830
+ return runSchemaAddType(name, {
831
+ description: readString(ctx.args, "description") ?? readString(ctx.options, "description"),
832
+ defaultStatus: readString(ctx.args, "defaultStatus") ??
833
+ readString(ctx.args, "default_status") ??
834
+ readString(ctx.options, "defaultStatus") ??
835
+ readString(ctx.options, "default_status"),
836
+ folder: readString(ctx.args, "folder") ?? readString(ctx.options, "folder"),
837
+ alias: aliases,
838
+ author,
839
+ force,
840
+ }, ctx.global);
841
+ }
842
+ function runMcpSchemaAction(ctx) {
843
+ const schema = createMcpSchemaContext(ctx);
844
+ const simpleResult = runMcpSchemaReadOrRemoveAction(schema);
845
+ if (simpleResult !== null) {
846
+ return simpleResult;
847
+ }
848
+ if (schema.subcommand === "add-field") {
849
+ return runMcpSchemaAddFieldAction(schema);
850
+ }
851
+ if (schema.subcommand === "add-status") {
852
+ return runMcpSchemaAddStatusAction(schema);
853
+ }
854
+ if (schema.subcommand === "add-type") {
855
+ if (ctx.args.infer === true || ctx.options.infer === true) {
856
+ return runSchemaInferTypes({
857
+ minCount: parseMcpInteger(ctx.args.minCount ?? ctx.options.minCount, "schema infer minCount"),
858
+ apply: ctx.args.apply === true || ctx.options.apply === true,
859
+ author: schema.author,
860
+ force: schema.force,
861
+ }, ctx.global);
861
862
  }
862
- case "gc":
863
- return runGc(global, options);
864
- default:
865
- return runDynamicExtensionAction(action, args, options, global);
863
+ return runMcpSchemaAddTypeAction(schema);
864
+ }
865
+ throw new PmCliError(`Unknown pm schema subcommand "${schema.subcommand}". Allowed: add-type, remove-type, add-status, remove-status, add-field, remove-field, list-fields, show-field, apply-preset, list, show, show-status`, 64);
866
+ }
867
+ function runMcpProfileAction(ctx) {
868
+ const subcommand = readString(ctx.args, "subcommand") ?? readRequiredString(ctx.options, "subcommand");
869
+ const normalizedSubcommand = subcommand.trim().toLowerCase();
870
+ const profileName = readString(ctx.args, "name") ?? readString(ctx.options, "name");
871
+ const handlers = {
872
+ list: () => runProfileList(),
873
+ show: () => runProfileShow(profileName),
874
+ lint: () => runProfileLint(profileName),
875
+ apply: () => runProfileApply(profileName, {
876
+ dryRun: ctx.args.dryRun === true || ctx.options.dryRun === true,
877
+ author: readString(ctx.args, "author") ?? readString(ctx.options, "author"),
878
+ force: ctx.args.force === true || ctx.options.force === true,
879
+ }, ctx.global),
880
+ };
881
+ const handler = getOwnHandler(handlers, normalizedSubcommand);
882
+ if (!handler) {
883
+ throw new PmCliError(`Unknown pm profile subcommand "${subcommand}". Allowed: list, show, apply, lint`, 64);
884
+ }
885
+ return handler();
886
+ }
887
+ function runMcpStatsAction(ctx) {
888
+ return runStats(ctx.global, {
889
+ storage: ctx.options.storage === true,
890
+ metadataCoverage: ctx.options.metadataCoverage === true,
891
+ fieldUtilization: ctx.options.fieldUtilization === true,
892
+ byAssignee: ctx.options.byAssignee === true,
893
+ byTag: ctx.options.byTag === true,
894
+ byPriority: ctx.options.byPriority === true,
895
+ tagPrefix: typeof ctx.options.tagPrefix === "string" ? ctx.options.tagPrefix : undefined,
896
+ });
897
+ }
898
+ async function runMcpAppendAction(ctx) {
899
+ const { changedFields, runnerOptions } = withMutationCompaction(ctx.args, ctx.options);
900
+ return projectMutationResult(await runAppend(requireMcpItemId(ctx, runnerOptions), runnerOptions, ctx.global), {
901
+ changedFields,
902
+ });
903
+ }
904
+ async function runMcpUpdateManyAction(ctx) {
905
+ const { changedFields, runnerOptions } = withMutationCompaction(ctx.args, ctx.options);
906
+ return projectMutationResult(await runUpdateMany(updateManyOptionsFromFlat(runnerOptions), ctx.global), { changedFields });
907
+ }
908
+ async function runMcpCloseManyAction(ctx) {
909
+ const { changedFields, runnerOptions } = withMutationCompaction(ctx.args, ctx.options);
910
+ const topLevelReason = readString(ctx.args, "reason");
911
+ const closeManyRunnerOptions = topLevelReason !== undefined && runnerOptions.reason === undefined
912
+ ? { ...runnerOptions, reason: topLevelReason }
913
+ : { ...runnerOptions };
914
+ if (ctx.force && closeManyRunnerOptions.force === undefined) {
915
+ closeManyRunnerOptions.force = true;
866
916
  }
917
+ return projectMutationResult(await runCloseMany(closeManyOptionsFromFlat(closeManyRunnerOptions), ctx.global), { changedFields });
918
+ }
919
+ const MCP_ACTION_HANDLERS = {
920
+ init: (ctx) => runInit(readString(ctx.args, "prefix"), ctx.global, ctx.options),
921
+ context: (ctx) => runContext(ctx.options, ctx.global),
922
+ next: (ctx) => runNext(ctx.options, ctx.global),
923
+ list: runMcpListAction,
924
+ get: (ctx) => runGet(requireMcpItemId(ctx), ctx.global, ctx.options),
925
+ search: runMcpSearchAction,
926
+ create: runMcpCreateAction,
927
+ copy: runMcpCopyAction,
928
+ focus: (ctx) => runFocus(ctx.id, { clear: ctx.options.clear === true || ctx.args.clear === true }, ctx.global),
929
+ update: runMcpUpdateAction,
930
+ claim: (ctx) => runClaim(requireMcpItemId(ctx), ctx.force, ctx.global, ctx.options),
931
+ release: (ctx) => runRelease(requireMcpItemId(ctx), ctx.force, ctx.global, ctx.options),
932
+ close: runMcpCloseAction,
933
+ comments: runMcpCommentsAction,
934
+ notes: (ctx) => runNotes(requireMcpItemId(ctx), ctx.options, ctx.global),
935
+ learnings: (ctx) => runLearnings(requireMcpItemId(ctx), ctx.options, ctx.global),
936
+ files: runMcpFilesAction,
937
+ docs: (ctx) => runDocs(requireMcpItemId(ctx), withAddNoteOption(ctx.options), ctx.global),
938
+ test: (ctx) => runTest(requireMcpItemId(ctx), ctx.options, ctx.global),
939
+ "test-all": (ctx) => runTestAll(ctx.options, ctx.global),
940
+ telemetry: runMcpTelemetryAction,
941
+ validate: (ctx) => runValidate(ctx.options, ctx.global),
942
+ health: runMcpHealthAction,
943
+ contracts: (ctx) => runContracts(ctx.options, ctx.global),
944
+ config: runMcpConfigAction,
945
+ activity: runMcpActivityAction,
946
+ aggregate: (ctx) => runAggregate(ctx.options, ctx.global),
947
+ extension: (ctx) => runExtension(readMcpTarget(ctx), ctx.options, ctx.global),
948
+ "extension-reload": (ctx) => runExtension(undefined, { ...ctx.options, reload: true }, ctx.global),
949
+ package: (ctx) => runExtension(readMcpTarget(ctx), ctx.options, ctx.global),
950
+ "package-install": (ctx) => runExtension(readMcpTarget(ctx), { ...ctx.options, install: true }, ctx.global),
951
+ install: (ctx) => runExtension(readMcpTarget(ctx), { ...ctx.options, install: true }, ctx.global),
952
+ "package-catalog": (ctx) => runExtension(undefined, { ...ctx.options, catalog: true, vocabulary: "package" }, ctx.global),
953
+ upgrade: (ctx) => runUpgrade(readMcpTarget(ctx), ctx.options, ctx.global),
954
+ delete: (ctx) => runDelete(requireMcpItemId(ctx), ctx.options, ctx.global),
955
+ deps: (ctx) => runDeps(requireMcpItemId(ctx), ctx.options, ctx.global),
956
+ "files-discover": (ctx) => runFilesDiscover(requireMcpItemId(ctx), ctx.options, ctx.global),
957
+ history: (ctx) => runHistory(requireMcpItemId(ctx), ctx.options, ctx.global),
958
+ "history-redact": (ctx) => runHistoryRedact(requireMcpItemId(ctx), ctx.options, ctx.global),
959
+ "history-repair": runMcpHistoryRepairAction,
960
+ "history-compact": (ctx) => runHistoryCompact(requireMcpItemId(ctx), ctx.options, ctx.global),
961
+ plan: runMcpPlanAction,
962
+ schema: runMcpSchemaAction,
963
+ profile: runMcpProfileAction,
964
+ stats: runMcpStatsAction,
965
+ append: runMcpAppendAction,
966
+ "update-many": runMcpUpdateManyAction,
967
+ "close-many": runMcpCloseManyAction,
968
+ gc: (ctx) => runGc(ctx.global, ctx.options),
969
+ };
970
+ async function dispatchAction(action, args, global, activeExtensions) {
971
+ const options = optionsWithAuthor(args, action);
972
+ const ctx = {
973
+ action,
974
+ args,
975
+ options,
976
+ id: readString(args, "id"),
977
+ force: args.force === true,
978
+ global,
979
+ activeExtensions,
980
+ };
981
+ const handler = getOwnHandler(MCP_ACTION_HANDLERS, action);
982
+ return handler ? handler(ctx) : dispatchActiveExtensionAction(action, args, options, global, activeExtensions);
867
983
  }
868
984
  const HANDLERS = {
869
985
  pm_run: (args) => runAction(args),
870
986
  pm_context: (args) => runAction({ ...args, action: "context" }),
987
+ pm_next: (args) => runAction({ ...args, action: "next" }),
871
988
  pm_search: (args) => runAction({ ...args, action: "search" }),
872
989
  pm_list: (args) => runAction({ ...args, action: "list" }),
873
990
  pm_get: (args) => runAction({ ...args, action: "get" }),
@@ -890,6 +1007,7 @@ const HANDLERS = {
890
1007
  pm_health: (args) => runAction({ ...args, action: "health" }),
891
1008
  pm_contracts: (args) => runAction({ ...args, action: "contracts" }),
892
1009
  pm_schema: (args) => runAction({ ...args, action: "schema" }),
1010
+ pm_profile: (args) => runAction({ ...args, action: "profile" }),
893
1011
  pm_config: (args) => runAction({ ...args, action: "config" }),
894
1012
  pm_plan: (args) => runAction({ ...args, action: "plan" }),
895
1013
  };
@@ -939,8 +1057,8 @@ export async function handleRequest(request) {
939
1057
  capabilities: { tools: {} },
940
1058
  serverInfo: { name: "pm-mcp", version: PM_MCP_SERVER_VERSION },
941
1059
  instructions: "You have access to native pm CLI tools for git-based project management. " +
942
- "Use pm_context or pm_search before creating new work. " +
943
- "Prefer narrow tools (pm_context, pm_list, pm_get, pm_search, pm_create, pm_copy, pm_focus, pm_update, pm_append, pm_claim, pm_release, pm_close, pm_comments, pm_files, pm_docs, pm_notes, pm_learnings, pm_deps, pm_test, pm_validate, pm_health, pm_contracts, pm_schema, pm_config, pm_plan) over pm_run when they cover the operation. " +
1060
+ "Use pm_next to pick the next actionable item, or pm_context or pm_search before creating new work. " +
1061
+ "Prefer narrow tools (pm_next, pm_context, pm_list, pm_get, pm_search, pm_create, pm_copy, pm_focus, pm_update, pm_append, pm_claim, pm_release, pm_close, pm_comments, pm_files, pm_docs, pm_notes, pm_learnings, pm_deps, pm_test, pm_validate, pm_health, pm_contracts, pm_schema, pm_profile, pm_config, pm_plan) over pm_run when they cover the operation. " +
944
1062
  "Use pm_plan for agent harness Plan workflows: it provides Codex/Claude/Cursor-style planning with durable steps, dependencies, decisions, discoveries, validation, and materialization. " +
945
1063
  "Use pm_schema and pm_config for workspace configuration: pm_schema manages custom item types/statuses and pm_config reads or writes settings keys. " +
946
1064
  "Use pm_run with an explicit action for package-owned operations (calendar/templates/guide/dedupe-audit/normalize/reindex/comments-audit/completion/test-runs-list/test-runs-status/test-runs-logs/test-runs-stop/test-runs-resume), plus activity, aggregate, history, stats, test-all, and gc. " +
@@ -955,7 +1073,7 @@ export async function handleRequest(request) {
955
1073
  if (request.method === "tools/call") {
956
1074
  const params = asRecordClone(request.params);
957
1075
  const name = readRequiredString(params, "name");
958
- const handler = HANDLERS[name];
1076
+ const handler = getOwnHandler(HANDLERS, name);
959
1077
  if (!handler) {
960
1078
  throw new PmCliError(`Unknown pm MCP tool: ${name}`, 64);
961
1079
  }
@@ -972,7 +1090,9 @@ export async function handleRequest(request) {
972
1090
  for (const warning of warnings) {
973
1091
  console.error(`[pm-mcp] ${warning}`);
974
1092
  }
975
- const result = await withCwd(args.cwd, () => handler(args));
1093
+ // cwd is applied inside the serialized activation cycle (see withActiveExtensions),
1094
+ // so the chdir/restore is exclusive per request and cannot race a concurrent caller.
1095
+ const result = await handler(args);
976
1096
  return resultContent(result, warnings);
977
1097
  }
978
1098
  throw new PmCliError(`Unsupported MCP method: ${request.method ?? "(missing)"}`, 64);
@@ -1093,4 +1213,4 @@ if (isInvokedAsMcpMainModule(process.argv[1], import.meta.url)) {
1093
1213
  }
1094
1214
  /* c8 ignore stop */
1095
1215
  //# sourceMappingURL=server.js.map
1096
- //# debugId=ad8d2ba8-8a0e-5d5e-b4d2-00e538908f91
1216
+ //# debugId=28140feb-d035-55d6-bd6a-d90ed2c41f26