@unbrained/pm-cli 2026.7.14 → 2026.7.15

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 (708) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +48 -0
  3. package/README.md +14 -11
  4. package/dist/cli/argv-utils.d.ts +1 -4
  5. package/dist/cli/argv-utils.js +3 -13
  6. package/dist/cli/argv-utils.js.map +1 -1
  7. package/dist/cli/bootstrap-args.d.ts +6 -4
  8. package/dist/cli/bootstrap-args.js +51 -16
  9. package/dist/cli/bootstrap-args.js.map +1 -1
  10. package/dist/cli/bundle-integrity.d.ts +49 -0
  11. package/dist/cli/bundle-integrity.js +111 -0
  12. package/dist/cli/bundle-integrity.js.map +1 -0
  13. package/dist/cli/commands/completion.js +7 -2
  14. package/dist/cli/commands/completion.js.map +1 -1
  15. package/dist/cli/commands/config.d.ts +6 -163
  16. package/dist/cli/commands/config.js +4 -1133
  17. package/dist/cli/commands/config.js.map +1 -1
  18. package/dist/cli/commands/context.d.ts +2 -4
  19. package/dist/cli/commands/context.js +10 -85
  20. package/dist/cli/commands/context.js.map +1 -1
  21. package/dist/cli/commands/create.d.ts +1 -0
  22. package/dist/cli/commands/create.js +3 -2
  23. package/dist/cli/commands/create.js.map +1 -1
  24. package/dist/cli/commands/extension/describe.d.ts +2 -91
  25. package/dist/cli/commands/extension/describe.js +4 -142
  26. package/dist/cli/commands/extension/describe.js.map +1 -1
  27. package/dist/cli/commands/extension/scaffold.d.ts +2 -36
  28. package/dist/cli/commands/extension/scaffold.js +4 -2435
  29. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  30. package/dist/cli/commands/extension/shared.d.ts +2 -28
  31. package/dist/cli/commands/extension/shared.js +4 -130
  32. package/dist/cli/commands/extension/shared.js.map +1 -1
  33. package/dist/cli/commands/extension.d.ts +3 -400
  34. package/dist/cli/commands/extension.js +4 -2183
  35. package/dist/cli/commands/extension.js.map +1 -1
  36. package/dist/cli/commands/gc.d.ts +6 -56
  37. package/dist/cli/commands/gc.js +4 -270
  38. package/dist/cli/commands/gc.js.map +1 -1
  39. package/dist/cli/commands/get.d.ts +18 -5
  40. package/dist/cli/commands/get.js +117 -58
  41. package/dist/cli/commands/get.js.map +1 -1
  42. package/dist/cli/commands/health.d.ts +6 -184
  43. package/dist/cli/commands/health.js +4 -1747
  44. package/dist/cli/commands/health.js.map +1 -1
  45. package/dist/cli/commands/history-compact.d.ts +4 -139
  46. package/dist/cli/commands/history-compact.js +5 -510
  47. package/dist/cli/commands/history-compact.js.map +1 -1
  48. package/dist/cli/commands/history-redact.d.ts +8 -120
  49. package/dist/cli/commands/history-redact.js +6 -581
  50. package/dist/cli/commands/history-redact.js.map +1 -1
  51. package/dist/cli/commands/history-repair.d.ts +7 -89
  52. package/dist/cli/commands/history-repair.js +5 -257
  53. package/dist/cli/commands/history-repair.js.map +1 -1
  54. package/dist/cli/commands/history.d.ts +1 -2
  55. package/dist/cli/commands/history.js +6 -48
  56. package/dist/cli/commands/history.js.map +1 -1
  57. package/dist/cli/commands/index.d.ts +1 -0
  58. package/dist/cli/commands/index.js +3 -2
  59. package/dist/cli/commands/index.js.map +1 -1
  60. package/dist/cli/commands/init-agent-guidance.d.ts +6 -113
  61. package/dist/cli/commands/init-agent-guidance.js +4 -431
  62. package/dist/cli/commands/init-agent-guidance.js.map +1 -1
  63. package/dist/cli/commands/init.d.ts +6 -181
  64. package/dist/cli/commands/init.js +4 -690
  65. package/dist/cli/commands/init.js.map +1 -1
  66. package/dist/cli/commands/next.js +3 -3
  67. package/dist/cli/commands/next.js.map +1 -1
  68. package/dist/cli/commands/profile.d.ts +4 -174
  69. package/dist/cli/commands/profile.js +4 -425
  70. package/dist/cli/commands/profile.js.map +1 -1
  71. package/dist/cli/commands/restore.d.ts +4 -19
  72. package/dist/cli/commands/restore.js +9 -158
  73. package/dist/cli/commands/restore.js.map +1 -1
  74. package/dist/cli/commands/schema.d.ts +7 -507
  75. package/dist/cli/commands/schema.js +5 -1254
  76. package/dist/cli/commands/schema.js.map +1 -1
  77. package/dist/cli/commands/test.d.ts +2 -4
  78. package/dist/cli/commands/test.js +7 -97
  79. package/dist/cli/commands/test.js.map +1 -1
  80. package/dist/cli/commands/validate.d.ts +9 -249
  81. package/dist/cli/commands/validate.js +9 -2150
  82. package/dist/cli/commands/validate.js.map +1 -1
  83. package/dist/cli/extension-command-help.js +18 -4
  84. package/dist/cli/extension-command-help.js.map +1 -1
  85. package/dist/cli/extension-command-options.js +3 -3
  86. package/dist/cli/extension-command-options.js.map +1 -1
  87. package/dist/cli/help-content.js +7 -3
  88. package/dist/cli/help-content.js.map +1 -1
  89. package/dist/cli/main.js +20 -30
  90. package/dist/cli/main.js.map +1 -1
  91. package/dist/cli/register-list-query.js +4 -2
  92. package/dist/cli/register-list-query.js.map +1 -1
  93. package/dist/cli/register-mutation.js +11 -3
  94. package/dist/cli/register-mutation.js.map +1 -1
  95. package/dist/cli/register-setup.js +4 -2
  96. package/dist/cli/register-setup.js.map +1 -1
  97. package/dist/cli/registration-helpers.js +3 -2
  98. package/dist/cli/registration-helpers.js.map +1 -1
  99. package/dist/cli-bundle/bundle-manifest.json +782 -0
  100. package/dist/cli-bundle/chunks/{append-PVZJDM6J.js → append-OJQFUQ4T.js} +5 -5
  101. package/dist/cli-bundle/chunks/append-UZVHUO74.js +11 -0
  102. package/dist/cli-bundle/chunks/{chunk-MQZ3PLCF.js → chunk-2IFFUZLC.js} +2 -2
  103. package/dist/cli-bundle/chunks/{chunk-P6MYFH6K.js → chunk-2JKGO6QX.js} +4 -4
  104. package/dist/cli-bundle/chunks/{chunk-X3GYR4P2.js → chunk-2NCIPMQP.js} +2 -2
  105. package/dist/cli-bundle/chunks/{chunk-Q7E6OYZK.js → chunk-2VPAVL7O.js} +2 -2
  106. package/dist/cli-bundle/chunks/{chunk-DRNJPEPQ.js → chunk-2WSE6PO2.js} +4 -4
  107. package/dist/cli-bundle/chunks/{chunk-FDSBDNYE.js → chunk-34L5OT3Y.js} +2 -2
  108. package/dist/cli-bundle/chunks/{chunk-TH7U4KLY.js → chunk-3AUGG2DP.js} +3 -3
  109. package/dist/cli-bundle/chunks/{chunk-NKW36AMT.js → chunk-3CLU2XZO.js} +4 -4
  110. package/dist/cli-bundle/chunks/{chunk-N3CMP4NI.js → chunk-3S5QVM5H.js} +43 -7
  111. package/dist/cli-bundle/chunks/chunk-3S5QVM5H.js.map +1 -0
  112. package/dist/cli-bundle/chunks/chunk-3U7ZR6M4.js +64 -0
  113. package/dist/cli-bundle/chunks/chunk-3U7ZR6M4.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-ABRCOSDC.js → chunk-3WM75PWC.js} +3 -3
  115. package/dist/cli-bundle/chunks/chunk-4223PVZT.js +121 -0
  116. package/dist/cli-bundle/chunks/chunk-4223PVZT.js.map +7 -0
  117. package/dist/cli-bundle/chunks/{chunk-5URI7TPJ.js → chunk-4XQ3BDV4.js} +281 -164
  118. package/dist/cli-bundle/chunks/chunk-4XQ3BDV4.js.map +7 -0
  119. package/dist/cli-bundle/chunks/{chunk-X6BVXQ52.js → chunk-5JLUII3O.js} +13 -13
  120. package/dist/cli-bundle/chunks/{chunk-MKL4CP2I.js → chunk-5ZSLZLDN.js} +631 -246
  121. package/dist/cli-bundle/chunks/chunk-5ZSLZLDN.js.map +1 -0
  122. package/dist/cli-bundle/chunks/{chunk-Q37E63AM.js → chunk-6CFNAVTF.js} +21 -141
  123. package/dist/cli-bundle/chunks/chunk-6CFNAVTF.js.map +7 -0
  124. package/dist/cli-bundle/chunks/{chunk-3TL7WOEF.js → chunk-6N2VXVTQ.js} +2 -2
  125. package/dist/cli-bundle/chunks/{chunk-ERL2YFJ2.js → chunk-6S3YSUYG.js} +3 -3
  126. package/dist/cli-bundle/chunks/{chunk-ZUKSZVBW.js → chunk-7B67ZL4N.js} +8 -7
  127. package/dist/cli-bundle/chunks/chunk-7B67ZL4N.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-IA3YFTXT.js → chunk-7PIWCHTW.js} +11 -13
  129. package/dist/cli-bundle/chunks/chunk-7PIWCHTW.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-BPD26E3P.js → chunk-7Z4LKRS4.js} +291 -81
  131. package/dist/cli-bundle/chunks/chunk-7Z4LKRS4.js.map +1 -0
  132. package/dist/cli-bundle/chunks/{chunk-IFZA4VB5.js → chunk-AHVTB5I5.js} +4 -4
  133. package/dist/cli-bundle/chunks/{chunk-DO5RGJXT.js → chunk-APRVSW2O.js} +3 -3
  134. package/dist/cli-bundle/chunks/{chunk-NAQYVWSQ.js → chunk-B7PE22W6.js} +4 -4
  135. package/dist/cli-bundle/chunks/{chunk-MD6ULIPJ.js → chunk-BCOFWYW4.js} +3 -3
  136. package/dist/cli-bundle/chunks/{chunk-KADLSPIU.js → chunk-BEP7WJA2.js} +4 -4
  137. package/dist/cli-bundle/chunks/chunk-BKVG6XOA.js +1114 -0
  138. package/dist/cli-bundle/chunks/chunk-BKVG6XOA.js.map +7 -0
  139. package/dist/cli-bundle/chunks/{chunk-AFWZRL7M.js → chunk-BSEQUTQP.js} +2 -2
  140. package/dist/cli-bundle/chunks/{chunk-AFWZRL7M.js.map → chunk-BSEQUTQP.js.map} +2 -2
  141. package/dist/cli-bundle/chunks/{chunk-OBDLEQG5.js → chunk-CRVF2JDM.js} +10 -10
  142. package/dist/cli-bundle/chunks/{chunk-FJZDA6MS.js → chunk-DM4H7FP4.js} +3 -3
  143. package/dist/cli-bundle/chunks/chunk-DUT67M43.js +5 -0
  144. package/dist/cli-bundle/chunks/{chunk-44LNIULG.js → chunk-DYH63FX7.js} +4 -4
  145. package/dist/cli-bundle/chunks/{chunk-LWTIRS3Y.js → chunk-E2OJMKML.js} +306 -82
  146. package/dist/cli-bundle/chunks/chunk-E2OJMKML.js.map +7 -0
  147. package/dist/cli-bundle/chunks/{chunk-HAMLIWAF.js → chunk-EAB64KLB.js} +4 -4
  148. package/dist/cli-bundle/chunks/{chunk-CIOZ376P.js → chunk-EACOH7AU.js} +10 -10
  149. package/dist/cli-bundle/chunks/{chunk-HL7V2PHX.js → chunk-EH2OPHBI.js} +10 -10
  150. package/dist/cli-bundle/chunks/{chunk-HL7V2PHX.js.map → chunk-EH2OPHBI.js.map} +1 -1
  151. package/dist/cli-bundle/chunks/{chunk-QK2ZN6UL.js → chunk-EJEXHTY5.js} +2 -2
  152. package/dist/cli-bundle/chunks/{chunk-WQUEHPZB.js → chunk-EYLCSJAI.js} +2 -2
  153. package/dist/cli-bundle/chunks/{chunk-655STMGA.js → chunk-FMBNM2EN.js} +2 -2
  154. package/dist/cli-bundle/chunks/{chunk-RMF3IOYQ.js → chunk-FNSPG7MU.js} +12 -12
  155. package/dist/cli-bundle/chunks/{chunk-5CT5BW6E.js → chunk-GM5QHQU6.js} +46 -40
  156. package/dist/cli-bundle/chunks/chunk-GM5QHQU6.js.map +7 -0
  157. package/dist/cli-bundle/chunks/{chunk-FTQLW4JD.js → chunk-GOSLKLFE.js} +418 -24
  158. package/dist/cli-bundle/chunks/chunk-GOSLKLFE.js.map +1 -0
  159. package/dist/cli-bundle/chunks/{chunk-KB726FMH.js → chunk-H2Z3FYXQ.js} +4 -4
  160. package/dist/cli-bundle/chunks/chunk-H3EIEWGR.js +162 -0
  161. package/dist/cli-bundle/chunks/chunk-H3EIEWGR.js.map +1 -0
  162. package/dist/cli-bundle/chunks/{chunk-2QIQGYPW.js → chunk-H5APFTHZ.js} +53 -10
  163. package/dist/cli-bundle/chunks/chunk-H5APFTHZ.js.map +7 -0
  164. package/dist/cli-bundle/chunks/chunk-HDH3JUGG.js +118 -0
  165. package/dist/cli-bundle/chunks/chunk-HDH3JUGG.js.map +1 -0
  166. package/dist/cli-bundle/chunks/{chunk-ZAYYDNB3.js → chunk-HO4KXD6I.js} +22 -142
  167. package/dist/cli-bundle/chunks/chunk-HO4KXD6I.js.map +1 -0
  168. package/dist/cli-bundle/chunks/{chunk-ILLUE5DI.js → chunk-HYB5AZ63.js} +203 -62
  169. package/dist/cli-bundle/chunks/{chunk-ILLUE5DI.js.map → chunk-HYB5AZ63.js.map} +3 -3
  170. package/dist/cli-bundle/chunks/{chunk-BN62TO2S.js → chunk-IA5FKNII.js} +2 -2
  171. package/dist/cli-bundle/chunks/{chunk-JL7WZ4O2.js → chunk-IG3SWA4A.js} +33 -9
  172. package/dist/cli-bundle/chunks/chunk-IG3SWA4A.js.map +7 -0
  173. package/dist/cli-bundle/chunks/{chunk-W6HZ55JO.js → chunk-IJIICKVW.js} +2 -2
  174. package/dist/cli-bundle/chunks/{chunk-IGED7NH2.js → chunk-ILX33QXL.js} +668 -251
  175. package/dist/cli-bundle/chunks/chunk-ILX33QXL.js.map +7 -0
  176. package/dist/cli-bundle/chunks/{chunk-UGTVWL3E.js → chunk-INU6DKT5.js} +47 -41
  177. package/dist/cli-bundle/chunks/chunk-INU6DKT5.js.map +1 -0
  178. package/dist/cli-bundle/chunks/{chunk-UB2QYSTO.js → chunk-J5AOEGDC.js} +26 -18
  179. package/dist/cli-bundle/chunks/chunk-J5AOEGDC.js.map +1 -0
  180. package/dist/cli-bundle/chunks/{chunk-4DY4KPQI.js → chunk-J6364LFM.js} +1330 -937
  181. package/dist/cli-bundle/chunks/chunk-J6364LFM.js.map +7 -0
  182. package/dist/cli-bundle/chunks/{chunk-DVOLZJ3C.js → chunk-J6EY5V4N.js} +1295 -939
  183. package/dist/cli-bundle/chunks/chunk-J6EY5V4N.js.map +1 -0
  184. package/dist/cli-bundle/chunks/chunk-JFTKLTEF.js +1097 -0
  185. package/dist/cli-bundle/chunks/chunk-JFTKLTEF.js.map +1 -0
  186. package/dist/cli-bundle/chunks/{chunk-M7EWN4TF.js → chunk-JOUQZENX.js} +3 -3
  187. package/dist/cli-bundle/chunks/{chunk-J4NZOP3I.js → chunk-JXQUXVMI.js} +9 -8
  188. package/dist/cli-bundle/chunks/chunk-JXQUXVMI.js.map +1 -0
  189. package/dist/cli-bundle/chunks/{chunk-2FNWQXZ2.js → chunk-JYFOV7FC.js} +4 -4
  190. package/dist/cli-bundle/chunks/{chunk-HLHSQ5CA.js → chunk-K2X6U4UA.js} +4 -4
  191. package/dist/cli-bundle/chunks/{chunk-6OTZMORS.js → chunk-K3WII2ME.js} +27 -27
  192. package/dist/cli-bundle/chunks/chunk-K3WII2ME.js.map +7 -0
  193. package/dist/cli-bundle/chunks/{chunk-M6ASXYCU.js → chunk-KG44YSKD.js} +4 -4
  194. package/dist/cli-bundle/chunks/{chunk-YVKE5ZDM.js → chunk-KPMKHGEA.js} +4 -4
  195. package/dist/cli-bundle/chunks/{chunk-QASRVKUQ.js → chunk-LPYWLWDS.js} +257 -163
  196. package/dist/cli-bundle/chunks/chunk-LPYWLWDS.js.map +1 -0
  197. package/dist/cli-bundle/chunks/{chunk-RGXD5JJR.js → chunk-LSG2U345.js} +19 -12
  198. package/dist/cli-bundle/chunks/chunk-LSG2U345.js.map +7 -0
  199. package/dist/cli-bundle/chunks/chunk-MIQDDLB5.js +5 -0
  200. package/dist/cli-bundle/chunks/{chunk-UJ4HJYWL.js → chunk-NLDFBC6J.js} +2 -2
  201. package/dist/cli-bundle/chunks/{chunk-WRKB56FC.js → chunk-NP22ERDF.js} +3 -3
  202. package/dist/cli-bundle/chunks/{chunk-YQYG2V23.js → chunk-NU3IMIEA.js} +2 -2
  203. package/dist/cli-bundle/chunks/{chunk-3I3LRT2G.js → chunk-NVPZIJVR.js} +2 -2
  204. package/dist/cli-bundle/chunks/{chunk-JAF4TUQ7.js → chunk-ODALILG3.js} +2 -2
  205. package/dist/cli-bundle/chunks/{chunk-CDJYP7OQ.js → chunk-ONG5V5CI.js} +190 -63
  206. package/dist/cli-bundle/chunks/chunk-ONG5V5CI.js.map +1 -0
  207. package/dist/cli-bundle/chunks/{chunk-QZ7LT3XE.js → chunk-ONREO4ST.js} +3 -3
  208. package/dist/cli-bundle/chunks/chunk-OW4JWD5M.js +61 -0
  209. package/dist/cli-bundle/chunks/chunk-OW4JWD5M.js.map +1 -0
  210. package/dist/cli-bundle/chunks/{chunk-3CMRNVTO.js → chunk-P74IZQ7A.js} +12 -12
  211. package/dist/cli-bundle/chunks/chunk-PENXZX3U.js +172 -0
  212. package/dist/cli-bundle/chunks/chunk-PENXZX3U.js.map +7 -0
  213. package/dist/cli-bundle/chunks/{chunk-ZTRBSABY.js → chunk-PGY23YTC.js} +3 -3
  214. package/dist/cli-bundle/chunks/{chunk-H2QBAKLQ.js → chunk-PMOSXADO.js} +3 -3
  215. package/dist/cli-bundle/chunks/chunk-PNTULOGU.js +9 -0
  216. package/dist/cli-bundle/chunks/{chunk-GSEADLRH.js → chunk-Q7A43DS4.js} +2 -2
  217. package/dist/cli-bundle/chunks/{chunk-QSPARJWF.js → chunk-QEHQ2GVG.js} +2 -2
  218. package/dist/cli-bundle/chunks/{chunk-VJTAEIPC.js → chunk-QIPLHNP7.js} +7 -7
  219. package/dist/cli-bundle/chunks/{chunk-GXXC7QSK.js → chunk-QKECXBBG.js} +3 -3
  220. package/dist/cli-bundle/chunks/{chunk-GXXC7QSK.js.map → chunk-QKECXBBG.js.map} +1 -1
  221. package/dist/cli-bundle/chunks/{chunk-K7WNZ7KD.js → chunk-QKJGPFAF.js} +3 -3
  222. package/dist/cli-bundle/chunks/{chunk-F7PSHRNO.js → chunk-QKXHFPYM.js} +27 -10
  223. package/dist/cli-bundle/chunks/chunk-QKXHFPYM.js.map +1 -0
  224. package/dist/cli-bundle/chunks/{chunk-ZNP64HOW.js → chunk-RLCHOOHC.js} +2 -2
  225. package/dist/cli-bundle/chunks/{chunk-IAPHYPRL.js → chunk-RMLWNPH2.js} +2 -2
  226. package/dist/cli-bundle/chunks/{chunk-UVBA6F5A.js → chunk-RRM5JYJC.js} +2 -2
  227. package/dist/cli-bundle/chunks/{chunk-6IIVBC56.js → chunk-S6MQESFR.js} +4 -4
  228. package/dist/cli-bundle/chunks/{chunk-QABYZYLU.js → chunk-SDQLJWBO.js} +4 -4
  229. package/dist/cli-bundle/chunks/{chunk-ANSJHDOZ.js → chunk-SELVXEZK.js} +2 -2
  230. package/dist/cli-bundle/chunks/{chunk-DYEX6NFH.js → chunk-TD3LVC7D.js} +438 -23
  231. package/dist/cli-bundle/chunks/chunk-TD3LVC7D.js.map +7 -0
  232. package/dist/cli-bundle/chunks/{chunk-WD6MSYMP.js → chunk-TKOVBP6C.js} +2 -2
  233. package/dist/cli-bundle/chunks/{chunk-TZ2PSLLT.js → chunk-TQSZFPIS.js} +4 -4
  234. package/dist/cli-bundle/chunks/{chunk-WPAWZW7S.js → chunk-TSMHDIW4.js} +2 -2
  235. package/dist/cli-bundle/chunks/{chunk-TZRTLMWM.js → chunk-UFXU44HV.js} +4 -4
  236. package/dist/cli-bundle/chunks/{chunk-TWLDBKQU.js → chunk-ULTHRDBP.js} +3 -3
  237. package/dist/cli-bundle/chunks/{chunk-OI4S4KCI.js → chunk-UMOPHQSU.js} +9 -9
  238. package/dist/cli-bundle/chunks/{chunk-OI4S4KCI.js.map → chunk-UMOPHQSU.js.map} +2 -2
  239. package/dist/cli-bundle/chunks/{chunk-RA5AIAMP.js → chunk-UOHFKBUV.js} +3 -3
  240. package/dist/cli-bundle/chunks/{chunk-PHKP3AGR.js → chunk-UWQHLMEB.js} +35 -18
  241. package/dist/cli-bundle/chunks/chunk-UWQHLMEB.js.map +7 -0
  242. package/dist/cli-bundle/chunks/{chunk-6TTOHMTB.js → chunk-UXONS674.js} +45 -112
  243. package/dist/cli-bundle/chunks/chunk-UXONS674.js.map +1 -0
  244. package/dist/cli-bundle/chunks/{chunk-4RXTMU57.js → chunk-UY2ACEMF.js} +7 -7
  245. package/dist/cli-bundle/chunks/{chunk-6PKA3SJQ.js → chunk-WQPUU7XD.js} +19 -28
  246. package/dist/cli-bundle/chunks/chunk-WQPUU7XD.js.map +1 -0
  247. package/dist/cli-bundle/chunks/{chunk-7TQMR6LK.js → chunk-WT3ZEOGH.js} +70 -20
  248. package/dist/cli-bundle/chunks/chunk-WT3ZEOGH.js.map +7 -0
  249. package/dist/cli-bundle/chunks/{chunk-FIGXOCEQ.js → chunk-WUJQK4YV.js} +4 -4
  250. package/dist/cli-bundle/chunks/{chunk-T4BRCB6Z.js → chunk-XSJUSQAE.js} +2 -2
  251. package/dist/cli-bundle/chunks/{chunk-6MHSBDGD.js → chunk-XXXF6PAQ.js} +50 -117
  252. package/dist/cli-bundle/chunks/chunk-XXXF6PAQ.js.map +7 -0
  253. package/dist/cli-bundle/chunks/{chunk-UKUIIBDW.js → chunk-YAQEBNY7.js} +4 -4
  254. package/dist/cli-bundle/chunks/{chunk-7QDSYUMF.js → chunk-YAROI3PD.js} +44 -21
  255. package/dist/cli-bundle/chunks/chunk-YAROI3PD.js.map +1 -0
  256. package/dist/cli-bundle/chunks/{chunk-E2WC6S4P.js → chunk-YBLZ2VE7.js} +13 -13
  257. package/dist/cli-bundle/chunks/{chunk-Y72FV7RM.js → chunk-YCQET3OT.js} +2 -2
  258. package/dist/cli-bundle/chunks/chunk-YUSOJDWM.js +9 -0
  259. package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js +58 -0
  260. package/dist/cli-bundle/chunks/chunk-YXSHIAUJ.js.map +1 -0
  261. package/dist/cli-bundle/chunks/{chunk-FS6UM5WH.js → chunk-ZI6VQWQ7.js} +4 -4
  262. package/dist/cli-bundle/chunks/chunk-ZKRZY773.js +68 -0
  263. package/dist/cli-bundle/chunks/chunk-ZKRZY773.js.map +7 -0
  264. package/dist/cli-bundle/chunks/{close-LZECOMHO.js → close-CWODTPKG.js} +5 -5
  265. package/dist/cli-bundle/chunks/close-W6LI2PKM.js +12 -0
  266. package/dist/cli-bundle/chunks/{close-many-ZHI6A5TN.js → close-many-CQFUY7MR.js} +15 -13
  267. package/dist/cli-bundle/chunks/close-many-DLDDVSH5.js +23 -0
  268. package/dist/cli-bundle/chunks/comments-E3TNTK24.js +13 -0
  269. package/dist/cli-bundle/chunks/{comments-AJWRTFZ5.js → comments-WGLHR7LB.js} +7 -7
  270. package/dist/cli-bundle/chunks/{copy-GMXYKBXT.js → copy-LXVDXH7B.js} +4 -4
  271. package/dist/cli-bundle/chunks/copy-Q5ZJPUKR.js +9 -0
  272. package/dist/cli-bundle/chunks/{create-F53OBTOU.js → create-J5U6ND4K.js} +9 -9
  273. package/dist/cli-bundle/chunks/{create-HU4Q7RJX.js → create-LBVCYMEG.js} +9 -9
  274. package/dist/cli-bundle/chunks/{delete-GSDZLTRC.js → delete-PMJBNY5G.js} +4 -4
  275. package/dist/cli-bundle/chunks/delete-WNHB3LYW.js +10 -0
  276. package/dist/cli-bundle/chunks/{deps-WWB7P2GT.js → deps-JZ7TMVCB.js} +7 -4
  277. package/dist/cli-bundle/chunks/{deps-U57I7EAK.js → deps-OA26IS25.js} +7 -4
  278. package/dist/cli-bundle/chunks/{docs-MQIY2ZQS.js → docs-FEWB2DQB.js} +6 -6
  279. package/dist/cli-bundle/chunks/docs-HA2AIDBB.js +14 -0
  280. package/dist/cli-bundle/chunks/{files-TBZD7V6H.js → files-6YFBJRBG.js} +6 -6
  281. package/dist/cli-bundle/chunks/{files-TTY6N2AV.js → files-EFIWKFTM.js} +6 -6
  282. package/dist/cli-bundle/chunks/{focus-XT6YVFFX.js → focus-4QJR7FOQ.js} +5 -5
  283. package/dist/cli-bundle/chunks/focus-POIW5LTJ.js +10 -0
  284. package/dist/cli-bundle/chunks/{history-compact-KKVUWB4V.js → history-compact-CKRPDTJN.js} +6 -10
  285. package/dist/cli-bundle/chunks/history-compact-FWG2C7FZ.js +16 -0
  286. package/dist/cli-bundle/chunks/history-redact-BB3TGDAE.js +15 -0
  287. package/dist/cli-bundle/chunks/{history-redact-3DVZOILD.js → history-redact-D225BHOZ.js} +5 -6
  288. package/dist/cli-bundle/chunks/history-repair-6GEAM7HE.js +16 -0
  289. package/dist/cli-bundle/chunks/{history-repair-ITDUMK4N.js → history-repair-RQXKQHL4.js} +6 -8
  290. package/dist/cli-bundle/chunks/{learnings-FGO3NSFW.js → learnings-JLNLCOL5.js} +7 -7
  291. package/dist/cli-bundle/chunks/learnings-RSNLSWDC.js +13 -0
  292. package/dist/cli-bundle/chunks/notes-2WDH6DXU.js +13 -0
  293. package/dist/cli-bundle/chunks/{notes-NQ6RXVW6.js → notes-GB47XXQQ.js} +7 -7
  294. package/dist/cli-bundle/chunks/plan-DOVI2VMW.js +24 -0
  295. package/dist/cli-bundle/chunks/{plan-2NNEO46V.js → plan-VDCJ2PCN.js} +10 -10
  296. package/dist/cli-bundle/chunks/{profile-AAQUU6T3.js → profile-FAU7NZML.js} +10 -10
  297. package/dist/cli-bundle/chunks/{profile-U725ATWZ.js → profile-IVXQEL3D.js} +10 -10
  298. package/dist/cli-bundle/chunks/{register-list-query-BUWCYHBT.js → register-list-query-DKA3EH5D.js} +22 -19
  299. package/dist/cli-bundle/chunks/register-list-query-DKA3EH5D.js.map +7 -0
  300. package/dist/cli-bundle/chunks/{register-list-query-KTZ6AGE7.js → register-list-query-UL4UKBBN.js} +23 -20
  301. package/dist/cli-bundle/chunks/register-list-query-UL4UKBBN.js.map +1 -0
  302. package/dist/cli-bundle/chunks/{register-mutation-UELYYOR7.js → register-mutation-ARFHRW55.js} +36 -32
  303. package/dist/cli-bundle/chunks/{register-mutation-UELYYOR7.js.map → register-mutation-ARFHRW55.js.map} +2 -2
  304. package/dist/cli-bundle/chunks/{register-mutation-4FMGJJF7.js → register-mutation-RBBJ52DK.js} +37 -33
  305. package/dist/cli-bundle/chunks/register-mutation-RBBJ52DK.js.map +1 -0
  306. package/dist/cli-bundle/chunks/{register-operations-JVW24J2Y.js → register-operations-ZIBBRSED.js} +41 -39
  307. package/dist/cli-bundle/chunks/{register-operations-JVW24J2Y.js.map → register-operations-ZIBBRSED.js.map} +1 -1
  308. package/dist/cli-bundle/chunks/{register-operations-ISUX6LY5.js → register-operations-ZUJ5JWPE.js} +39 -37
  309. package/dist/cli-bundle/chunks/{register-operations-ISUX6LY5.js.map → register-operations-ZUJ5JWPE.js.map} +1 -1
  310. package/dist/cli-bundle/chunks/{register-setup-5XNGKJ22.js → register-setup-BCVLFEYS.js} +29 -17
  311. package/dist/cli-bundle/chunks/{register-setup-5XNGKJ22.js.map → register-setup-BCVLFEYS.js.map} +2 -2
  312. package/dist/cli-bundle/chunks/{register-setup-ZTNY6S7R.js → register-setup-TDCGWIOS.js} +19 -18
  313. package/dist/cli-bundle/chunks/{register-setup-ZTNY6S7R.js.map → register-setup-TDCGWIOS.js.map} +1 -1
  314. package/dist/cli-bundle/chunks/{restore-B3BAB6X2.js → restore-25DLT2Q2.js} +6 -6
  315. package/dist/cli-bundle/chunks/restore-YPMVUUEX.js +14 -0
  316. package/dist/cli-bundle/chunks/{schema-U7IM2DXV.js → schema-FNU3WE4O.js} +7 -6
  317. package/dist/cli-bundle/chunks/{schema-LZNUYHDB.js → schema-NBCM3RAD.js} +7 -6
  318. package/dist/cli-bundle/chunks/update-WWBYOPXO.js +21 -0
  319. package/dist/cli-bundle/chunks/update-WWBYOPXO.js.map +7 -0
  320. package/dist/cli-bundle/chunks/{update-Q3UCILNR.js → update-XHSIAIXE.js} +12 -12
  321. package/dist/cli-bundle/chunks/update-XHSIAIXE.js.map +1 -0
  322. package/dist/cli-bundle/chunks/update-many-OUGIU5SF.js +32 -0
  323. package/dist/cli-bundle/chunks/update-many-OUGIU5SF.js.map +7 -0
  324. package/dist/cli-bundle/chunks/update-many-TA7NGQBO.js +36 -0
  325. package/dist/cli-bundle/chunks/update-many-TA7NGQBO.js.map +1 -0
  326. package/dist/cli-bundle/main.js +826 -43
  327. package/dist/cli-bundle/main.js.map +4 -4
  328. package/dist/cli-bundle/sdk-runtime.js +70 -57
  329. package/dist/cli-bundle/sdk-testing.js +6 -6
  330. package/dist/cli-bundle/sdk.js +876 -74
  331. package/dist/cli-bundle/sdk.js.map +4 -4
  332. package/dist/cli.js +5 -4
  333. package/dist/cli.js.map +1 -1
  334. package/dist/core/diagnostics/remediation.js +12 -2
  335. package/dist/core/diagnostics/remediation.js.map +1 -1
  336. package/dist/core/history/projection.d.ts +39 -0
  337. package/dist/core/history/projection.js +164 -0
  338. package/dist/core/history/projection.js.map +1 -0
  339. package/dist/core/history/read.d.ts +3 -0
  340. package/dist/core/history/read.js +55 -0
  341. package/dist/core/history/read.js.map +1 -0
  342. package/dist/core/output/output-control.d.ts +18 -0
  343. package/dist/core/output/output-control.js +26 -0
  344. package/dist/core/output/output-control.js.map +1 -0
  345. package/dist/core/output/output.js +20 -8
  346. package/dist/core/output/output.js.map +1 -1
  347. package/dist/core/sentry/helpers.js +10 -2
  348. package/dist/core/sentry/helpers.js.map +1 -1
  349. package/dist/core/shared/command-types.d.ts +2 -0
  350. package/dist/core/shared/command-types.js +2 -2
  351. package/dist/core/shared/command-types.js.map +1 -1
  352. package/dist/core/shared/errors.d.ts +11 -0
  353. package/dist/core/shared/errors.js +2 -2
  354. package/dist/core/shared/errors.js.map +1 -1
  355. package/dist/mcp/server.d.ts +2 -2
  356. package/dist/mcp/tool-definitions.js +5 -5
  357. package/dist/mcp/tool-definitions.js.map +1 -1
  358. package/dist/sdk/author-attribution.d.ts +35 -0
  359. package/dist/sdk/author-attribution.js +118 -0
  360. package/dist/sdk/author-attribution.js.map +1 -0
  361. package/dist/sdk/cli-contracts/command-aliases.d.ts +7 -0
  362. package/dist/sdk/cli-contracts/command-aliases.js +17 -0
  363. package/dist/sdk/cli-contracts/command-aliases.js.map +1 -0
  364. package/dist/sdk/cli-contracts/flag-contracts.js +5 -2
  365. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  366. package/dist/sdk/cli-contracts/tool-option-contracts.js +6 -2
  367. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  368. package/dist/sdk/cli-contracts/tool-parameter-tables.js +21 -2
  369. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  370. package/dist/sdk/cli-contracts/tool-schema.js +3 -3
  371. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  372. package/dist/sdk/cli-contracts.d.ts +1 -0
  373. package/dist/sdk/cli-contracts.js +3 -2
  374. package/dist/sdk/cli-contracts.js.map +1 -1
  375. package/dist/sdk/cli-program.d.ts +8 -0
  376. package/dist/sdk/cli-program.js +39 -0
  377. package/dist/sdk/cli-program.js.map +1 -0
  378. package/dist/sdk/command-line.d.ts +11 -0
  379. package/dist/sdk/command-line.js +40 -0
  380. package/dist/sdk/command-line.js.map +1 -0
  381. package/dist/sdk/config.d.ts +163 -0
  382. package/dist/sdk/config.js +1087 -0
  383. package/dist/sdk/config.js.map +1 -0
  384. package/dist/sdk/context-relevance.d.ts +21 -0
  385. package/dist/sdk/context-relevance.js +70 -2
  386. package/dist/sdk/context-relevance.js.map +1 -1
  387. package/dist/sdk/dependencies.d.ts +15 -2
  388. package/dist/sdk/dependencies.js +97 -8
  389. package/dist/sdk/dependencies.js.map +1 -1
  390. package/dist/{cli/commands → sdk}/extension/bundled-catalog.d.ts +1 -1
  391. package/dist/{cli/commands → sdk}/extension/bundled-catalog.js +12 -12
  392. package/dist/sdk/extension/bundled-catalog.js.map +1 -0
  393. package/dist/sdk/extension/concurrency.d.ts +7 -0
  394. package/dist/sdk/extension/concurrency.js +26 -0
  395. package/dist/sdk/extension/concurrency.js.map +1 -0
  396. package/dist/sdk/extension/describe.d.ts +91 -0
  397. package/dist/sdk/extension/describe.js +144 -0
  398. package/dist/sdk/extension/describe.js.map +1 -0
  399. package/dist/{cli/commands → sdk}/extension/doctor.d.ts +3 -3
  400. package/dist/{cli/commands → sdk}/extension/doctor.js +7 -7
  401. package/dist/sdk/extension/doctor.js.map +1 -0
  402. package/dist/sdk/extension/install-runtime.d.ts +26 -0
  403. package/dist/sdk/extension/install-runtime.js +269 -0
  404. package/dist/sdk/extension/install-runtime.js.map +1 -0
  405. package/dist/sdk/extension/install-snapshot.d.ts +23 -0
  406. package/dist/sdk/extension/install-snapshot.js +66 -0
  407. package/dist/sdk/extension/install-snapshot.js.map +1 -0
  408. package/dist/{cli/commands → sdk}/extension/install-sources.d.ts +3 -3
  409. package/dist/{cli/commands → sdk}/extension/install-sources.js +15 -12
  410. package/dist/sdk/extension/install-sources.js.map +1 -0
  411. package/dist/{cli/commands → sdk}/extension/managed-state.js +6 -6
  412. package/dist/sdk/extension/managed-state.js.map +1 -0
  413. package/dist/sdk/extension/scaffold.d.ts +36 -0
  414. package/dist/sdk/extension/scaffold.js +2436 -0
  415. package/dist/sdk/extension/scaffold.js.map +1 -0
  416. package/dist/sdk/extension/shared.d.ts +28 -0
  417. package/dist/sdk/extension/shared.js +140 -0
  418. package/dist/sdk/extension/shared.js.map +1 -0
  419. package/dist/sdk/extension/update-check.d.ts +15 -0
  420. package/dist/sdk/extension/update-check.js +68 -0
  421. package/dist/sdk/extension/update-check.js.map +1 -0
  422. package/dist/sdk/extension.d.ts +367 -0
  423. package/dist/sdk/extension.js +2174 -0
  424. package/dist/sdk/extension.js.map +1 -0
  425. package/dist/sdk/governance/gc.d.ts +56 -0
  426. package/dist/sdk/governance/gc.js +276 -0
  427. package/dist/sdk/governance/gc.js.map +1 -0
  428. package/dist/sdk/governance/health.d.ts +187 -0
  429. package/dist/sdk/governance/health.js +1796 -0
  430. package/dist/sdk/governance/health.js.map +1 -0
  431. package/dist/sdk/governance/validate.d.ts +255 -0
  432. package/dist/sdk/governance/validate.js +2175 -0
  433. package/dist/sdk/governance/validate.js.map +1 -0
  434. package/dist/sdk/history-compact.d.ts +142 -0
  435. package/dist/sdk/history-compact.js +508 -0
  436. package/dist/sdk/history-compact.js.map +1 -0
  437. package/dist/sdk/history-mcp.d.ts +17 -0
  438. package/dist/sdk/history-mcp.js +68 -0
  439. package/dist/sdk/history-mcp.js.map +1 -0
  440. package/dist/sdk/history-read.d.ts +31 -0
  441. package/dist/sdk/history-read.js +58 -0
  442. package/dist/sdk/history-read.js.map +1 -0
  443. package/dist/sdk/history-redact.d.ts +120 -0
  444. package/dist/sdk/history-redact.js +577 -0
  445. package/dist/sdk/history-redact.js.map +1 -0
  446. package/dist/sdk/history-repair.d.ts +89 -0
  447. package/dist/sdk/history-repair.js +263 -0
  448. package/dist/sdk/history-repair.js.map +1 -0
  449. package/dist/sdk/index.d.ts +25 -1
  450. package/dist/sdk/index.js +27 -3
  451. package/dist/sdk/index.js.map +1 -1
  452. package/dist/sdk/init-agent-guidance.d.ts +113 -0
  453. package/dist/sdk/init-agent-guidance.js +437 -0
  454. package/dist/sdk/init-agent-guidance.js.map +1 -0
  455. package/dist/sdk/init.d.ts +186 -0
  456. package/dist/sdk/init.js +733 -0
  457. package/dist/sdk/init.js.map +1 -0
  458. package/dist/sdk/invocation-author.d.ts +2 -0
  459. package/dist/sdk/invocation-author.js +39 -0
  460. package/dist/sdk/invocation-author.js.map +1 -0
  461. package/dist/sdk/item-children.d.ts +45 -0
  462. package/dist/sdk/item-children.js +75 -0
  463. package/dist/sdk/item-children.js.map +1 -0
  464. package/dist/sdk/item-schedule.d.ts +26 -0
  465. package/dist/sdk/item-schedule.js +28 -0
  466. package/dist/sdk/item-schedule.js.map +1 -0
  467. package/dist/sdk/output.d.ts +7 -0
  468. package/dist/sdk/output.js +11 -0
  469. package/dist/sdk/output.js.map +1 -0
  470. package/dist/sdk/pagination.d.ts +4 -1
  471. package/dist/sdk/pagination.js +13 -5
  472. package/dist/sdk/pagination.js.map +1 -1
  473. package/dist/sdk/profile.d.ts +176 -0
  474. package/dist/sdk/profile.js +431 -0
  475. package/dist/sdk/profile.js.map +1 -0
  476. package/dist/sdk/relationship-analytics.d.ts +108 -0
  477. package/dist/sdk/relationship-analytics.js +292 -0
  478. package/dist/sdk/relationship-analytics.js.map +1 -0
  479. package/dist/sdk/relationship-context.d.ts +67 -0
  480. package/dist/sdk/relationship-context.js +207 -0
  481. package/dist/sdk/relationship-context.js.map +1 -0
  482. package/dist/sdk/relationship-history.d.ts +109 -0
  483. package/dist/sdk/relationship-history.js +401 -0
  484. package/dist/sdk/relationship-history.js.map +1 -0
  485. package/dist/sdk/relationships.d.ts +145 -0
  486. package/dist/sdk/relationships.js +551 -0
  487. package/dist/sdk/relationships.js.map +1 -0
  488. package/dist/sdk/runtime-input.d.ts +10 -0
  489. package/dist/sdk/runtime-input.js +60 -0
  490. package/dist/sdk/runtime-input.js.map +1 -0
  491. package/dist/sdk/runtime.d.ts +31 -8
  492. package/dist/sdk/runtime.js +61 -57
  493. package/dist/sdk/runtime.js.map +1 -1
  494. package/dist/sdk/schema.d.ts +507 -0
  495. package/dist/sdk/schema.js +1269 -0
  496. package/dist/sdk/schema.js.map +1 -0
  497. package/dist/{cli/commands → sdk}/templates.d.ts +1 -1
  498. package/dist/{cli/commands → sdk}/templates.js +9 -9
  499. package/dist/sdk/templates.js.map +1 -0
  500. package/dist/{cli/commands → sdk}/test/linked-command-detection.d.ts +10 -2
  501. package/dist/sdk/test/linked-command-detection.js +525 -0
  502. package/dist/sdk/test/linked-command-detection.js.map +1 -0
  503. package/docs/COMMANDS.md +58 -40
  504. package/docs/EXTENSIONS.md +10 -1
  505. package/docs/RELATIONSHIP_GRAPH.md +113 -0
  506. package/docs/RELEASING.md +2 -0
  507. package/docs/SDK.md +156 -9
  508. package/docs/SDK_CUSTOMIZATION_PRIMITIVES.md +79 -0
  509. package/marketplace.json +2 -2
  510. package/package.json +3 -2
  511. package/packages/pm-beads/package.json +1 -1
  512. package/packages/pm-calendar/package.json +1 -1
  513. package/packages/pm-command-kit/package.json +1 -1
  514. package/packages/pm-governance-audit/extensions/governance-audit/runtime-utils.ts +76 -16
  515. package/packages/pm-governance-audit/extensions/governance-audit/sdk.ts +8 -0
  516. package/packages/pm-governance-audit/package.json +1 -1
  517. package/packages/pm-guide-shell/package.json +1 -1
  518. package/packages/pm-kanban/package.json +1 -1
  519. package/packages/pm-lifecycle-hooks/package.json +1 -1
  520. package/packages/pm-linked-test-adapters/package.json +1 -1
  521. package/packages/pm-search-advanced/package.json +1 -1
  522. package/packages/pm-templates/package.json +1 -1
  523. package/packages/pm-todos/package.json +1 -1
  524. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  525. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  526. package/scripts/bundle-cli.mjs +66 -23
  527. package/dist/cli/commands/extension/bundled-catalog.js.map +0 -1
  528. package/dist/cli/commands/extension/doctor.js.map +0 -1
  529. package/dist/cli/commands/extension/install-sources.js.map +0 -1
  530. package/dist/cli/commands/extension/managed-state.js.map +0 -1
  531. package/dist/cli/commands/templates.js.map +0 -1
  532. package/dist/cli/commands/test/linked-command-detection.js +0 -248
  533. package/dist/cli/commands/test/linked-command-detection.js.map +0 -1
  534. package/dist/cli-bundle/chunks/append-DYQWQK2J.js +0 -11
  535. package/dist/cli-bundle/chunks/chunk-2GA3NK35.js +0 -530
  536. package/dist/cli-bundle/chunks/chunk-2GA3NK35.js.map +0 -1
  537. package/dist/cli-bundle/chunks/chunk-2QIQGYPW.js.map +0 -7
  538. package/dist/cli-bundle/chunks/chunk-4DY4KPQI.js.map +0 -7
  539. package/dist/cli-bundle/chunks/chunk-4WREH7RT.js +0 -554
  540. package/dist/cli-bundle/chunks/chunk-4WREH7RT.js.map +0 -7
  541. package/dist/cli-bundle/chunks/chunk-5CT5BW6E.js.map +0 -7
  542. package/dist/cli-bundle/chunks/chunk-5URI7TPJ.js.map +0 -7
  543. package/dist/cli-bundle/chunks/chunk-6MHSBDGD.js.map +0 -7
  544. package/dist/cli-bundle/chunks/chunk-6OTZMORS.js.map +0 -7
  545. package/dist/cli-bundle/chunks/chunk-6PKA3SJQ.js.map +0 -1
  546. package/dist/cli-bundle/chunks/chunk-6TTOHMTB.js.map +0 -1
  547. package/dist/cli-bundle/chunks/chunk-7QDSYUMF.js.map +0 -1
  548. package/dist/cli-bundle/chunks/chunk-7TQMR6LK.js.map +0 -7
  549. package/dist/cli-bundle/chunks/chunk-B5DZYTT3.js +0 -312
  550. package/dist/cli-bundle/chunks/chunk-B5DZYTT3.js.map +0 -7
  551. package/dist/cli-bundle/chunks/chunk-BPD26E3P.js.map +0 -1
  552. package/dist/cli-bundle/chunks/chunk-CDJYP7OQ.js.map +0 -1
  553. package/dist/cli-bundle/chunks/chunk-DBZVUJTK.js +0 -858
  554. package/dist/cli-bundle/chunks/chunk-DBZVUJTK.js.map +0 -1
  555. package/dist/cli-bundle/chunks/chunk-DVOLZJ3C.js.map +0 -1
  556. package/dist/cli-bundle/chunks/chunk-DYEX6NFH.js.map +0 -7
  557. package/dist/cli-bundle/chunks/chunk-F7PSHRNO.js.map +0 -1
  558. package/dist/cli-bundle/chunks/chunk-FO7GMJKG.js +0 -875
  559. package/dist/cli-bundle/chunks/chunk-FO7GMJKG.js.map +0 -7
  560. package/dist/cli-bundle/chunks/chunk-FTQLW4JD.js.map +0 -1
  561. package/dist/cli-bundle/chunks/chunk-IA3YFTXT.js.map +0 -1
  562. package/dist/cli-bundle/chunks/chunk-IGED7NH2.js.map +0 -7
  563. package/dist/cli-bundle/chunks/chunk-J4NZOP3I.js.map +0 -1
  564. package/dist/cli-bundle/chunks/chunk-JL7WZ4O2.js.map +0 -7
  565. package/dist/cli-bundle/chunks/chunk-L24HCJFC.js +0 -309
  566. package/dist/cli-bundle/chunks/chunk-L24HCJFC.js.map +0 -1
  567. package/dist/cli-bundle/chunks/chunk-LWTIRS3Y.js.map +0 -7
  568. package/dist/cli-bundle/chunks/chunk-MKL4CP2I.js.map +0 -1
  569. package/dist/cli-bundle/chunks/chunk-N3CMP4NI.js.map +0 -1
  570. package/dist/cli-bundle/chunks/chunk-PHKP3AGR.js.map +0 -7
  571. package/dist/cli-bundle/chunks/chunk-Q37E63AM.js.map +0 -7
  572. package/dist/cli-bundle/chunks/chunk-QASRVKUQ.js.map +0 -1
  573. package/dist/cli-bundle/chunks/chunk-RGXD5JJR.js.map +0 -7
  574. package/dist/cli-bundle/chunks/chunk-UB2QYSTO.js.map +0 -1
  575. package/dist/cli-bundle/chunks/chunk-UGTVWL3E.js.map +0 -1
  576. package/dist/cli-bundle/chunks/chunk-ZAYYDNB3.js.map +0 -1
  577. package/dist/cli-bundle/chunks/chunk-ZUKSZVBW.js.map +0 -7
  578. package/dist/cli-bundle/chunks/close-RI4JQQHU.js +0 -12
  579. package/dist/cli-bundle/chunks/close-many-LY2XJ52M.js +0 -21
  580. package/dist/cli-bundle/chunks/comments-35M273DN.js +0 -13
  581. package/dist/cli-bundle/chunks/copy-NPYM7M7U.js +0 -9
  582. package/dist/cli-bundle/chunks/delete-ODRWJWAM.js +0 -10
  583. package/dist/cli-bundle/chunks/docs-G7N4E2JO.js +0 -14
  584. package/dist/cli-bundle/chunks/focus-U5TRVCRS.js +0 -10
  585. package/dist/cli-bundle/chunks/history-compact-M7GHYVFN.js +0 -20
  586. package/dist/cli-bundle/chunks/history-redact-JIHZLHDP.js +0 -16
  587. package/dist/cli-bundle/chunks/history-repair-NAFCHLH7.js +0 -18
  588. package/dist/cli-bundle/chunks/learnings-SONGPSHI.js +0 -13
  589. package/dist/cli-bundle/chunks/notes-BSD53H2W.js +0 -13
  590. package/dist/cli-bundle/chunks/plan-AWLYGBNV.js +0 -24
  591. package/dist/cli-bundle/chunks/register-list-query-BUWCYHBT.js.map +0 -7
  592. package/dist/cli-bundle/chunks/register-list-query-KTZ6AGE7.js.map +0 -1
  593. package/dist/cli-bundle/chunks/register-mutation-4FMGJJF7.js.map +0 -1
  594. package/dist/cli-bundle/chunks/restore-66GLMHIX.js +0 -14
  595. package/dist/cli-bundle/chunks/update-2XGHIVQ2.js +0 -21
  596. package/dist/cli-bundle/chunks/update-many-75K57FS3.js +0 -34
  597. package/dist/cli-bundle/chunks/update-many-U42YA445.js +0 -30
  598. /package/dist/cli-bundle/chunks/{append-PVZJDM6J.js.map → append-OJQFUQ4T.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{append-DYQWQK2J.js.map → append-UZVHUO74.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{chunk-MQZ3PLCF.js.map → chunk-2IFFUZLC.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{chunk-P6MYFH6K.js.map → chunk-2JKGO6QX.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{chunk-X3GYR4P2.js.map → chunk-2NCIPMQP.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{chunk-Q7E6OYZK.js.map → chunk-2VPAVL7O.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{chunk-DRNJPEPQ.js.map → chunk-2WSE6PO2.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{chunk-FDSBDNYE.js.map → chunk-34L5OT3Y.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{chunk-TH7U4KLY.js.map → chunk-3AUGG2DP.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{chunk-NKW36AMT.js.map → chunk-3CLU2XZO.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{chunk-ABRCOSDC.js.map → chunk-3WM75PWC.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{chunk-X6BVXQ52.js.map → chunk-5JLUII3O.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{chunk-3TL7WOEF.js.map → chunk-6N2VXVTQ.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{chunk-ERL2YFJ2.js.map → chunk-6S3YSUYG.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{chunk-IFZA4VB5.js.map → chunk-AHVTB5I5.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{chunk-DO5RGJXT.js.map → chunk-APRVSW2O.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{chunk-NAQYVWSQ.js.map → chunk-B7PE22W6.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{chunk-MD6ULIPJ.js.map → chunk-BCOFWYW4.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{chunk-KADLSPIU.js.map → chunk-BEP7WJA2.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{chunk-OBDLEQG5.js.map → chunk-CRVF2JDM.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{chunk-FJZDA6MS.js.map → chunk-DM4H7FP4.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{close-LZECOMHO.js.map → chunk-DUT67M43.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{chunk-44LNIULG.js.map → chunk-DYH63FX7.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{chunk-HAMLIWAF.js.map → chunk-EAB64KLB.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{chunk-CIOZ376P.js.map → chunk-EACOH7AU.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{chunk-QK2ZN6UL.js.map → chunk-EJEXHTY5.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{chunk-WQUEHPZB.js.map → chunk-EYLCSJAI.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{chunk-655STMGA.js.map → chunk-FMBNM2EN.js.map} +0 -0
  626. /package/dist/cli-bundle/chunks/{chunk-RMF3IOYQ.js.map → chunk-FNSPG7MU.js.map} +0 -0
  627. /package/dist/cli-bundle/chunks/{chunk-KB726FMH.js.map → chunk-H2Z3FYXQ.js.map} +0 -0
  628. /package/dist/cli-bundle/chunks/{chunk-BN62TO2S.js.map → chunk-IA5FKNII.js.map} +0 -0
  629. /package/dist/cli-bundle/chunks/{chunk-W6HZ55JO.js.map → chunk-IJIICKVW.js.map} +0 -0
  630. /package/dist/cli-bundle/chunks/{chunk-M7EWN4TF.js.map → chunk-JOUQZENX.js.map} +0 -0
  631. /package/dist/cli-bundle/chunks/{chunk-2FNWQXZ2.js.map → chunk-JYFOV7FC.js.map} +0 -0
  632. /package/dist/cli-bundle/chunks/{chunk-HLHSQ5CA.js.map → chunk-K2X6U4UA.js.map} +0 -0
  633. /package/dist/cli-bundle/chunks/{chunk-M6ASXYCU.js.map → chunk-KG44YSKD.js.map} +0 -0
  634. /package/dist/cli-bundle/chunks/{chunk-YVKE5ZDM.js.map → chunk-KPMKHGEA.js.map} +0 -0
  635. /package/dist/cli-bundle/chunks/{close-many-ZHI6A5TN.js.map → chunk-MIQDDLB5.js.map} +0 -0
  636. /package/dist/cli-bundle/chunks/{chunk-UJ4HJYWL.js.map → chunk-NLDFBC6J.js.map} +0 -0
  637. /package/dist/cli-bundle/chunks/{chunk-WRKB56FC.js.map → chunk-NP22ERDF.js.map} +0 -0
  638. /package/dist/cli-bundle/chunks/{chunk-YQYG2V23.js.map → chunk-NU3IMIEA.js.map} +0 -0
  639. /package/dist/cli-bundle/chunks/{chunk-3I3LRT2G.js.map → chunk-NVPZIJVR.js.map} +0 -0
  640. /package/dist/cli-bundle/chunks/{chunk-JAF4TUQ7.js.map → chunk-ODALILG3.js.map} +0 -0
  641. /package/dist/cli-bundle/chunks/{chunk-QZ7LT3XE.js.map → chunk-ONREO4ST.js.map} +0 -0
  642. /package/dist/cli-bundle/chunks/{chunk-3CMRNVTO.js.map → chunk-P74IZQ7A.js.map} +0 -0
  643. /package/dist/cli-bundle/chunks/{chunk-ZTRBSABY.js.map → chunk-PGY23YTC.js.map} +0 -0
  644. /package/dist/cli-bundle/chunks/{chunk-H2QBAKLQ.js.map → chunk-PMOSXADO.js.map} +0 -0
  645. /package/dist/cli-bundle/chunks/{close-RI4JQQHU.js.map → chunk-PNTULOGU.js.map} +0 -0
  646. /package/dist/cli-bundle/chunks/{chunk-GSEADLRH.js.map → chunk-Q7A43DS4.js.map} +0 -0
  647. /package/dist/cli-bundle/chunks/{chunk-QSPARJWF.js.map → chunk-QEHQ2GVG.js.map} +0 -0
  648. /package/dist/cli-bundle/chunks/{chunk-VJTAEIPC.js.map → chunk-QIPLHNP7.js.map} +0 -0
  649. /package/dist/cli-bundle/chunks/{chunk-K7WNZ7KD.js.map → chunk-QKJGPFAF.js.map} +0 -0
  650. /package/dist/cli-bundle/chunks/{chunk-ZNP64HOW.js.map → chunk-RLCHOOHC.js.map} +0 -0
  651. /package/dist/cli-bundle/chunks/{chunk-IAPHYPRL.js.map → chunk-RMLWNPH2.js.map} +0 -0
  652. /package/dist/cli-bundle/chunks/{chunk-UVBA6F5A.js.map → chunk-RRM5JYJC.js.map} +0 -0
  653. /package/dist/cli-bundle/chunks/{chunk-6IIVBC56.js.map → chunk-S6MQESFR.js.map} +0 -0
  654. /package/dist/cli-bundle/chunks/{chunk-QABYZYLU.js.map → chunk-SDQLJWBO.js.map} +0 -0
  655. /package/dist/cli-bundle/chunks/{chunk-ANSJHDOZ.js.map → chunk-SELVXEZK.js.map} +0 -0
  656. /package/dist/cli-bundle/chunks/{chunk-WD6MSYMP.js.map → chunk-TKOVBP6C.js.map} +0 -0
  657. /package/dist/cli-bundle/chunks/{chunk-TZ2PSLLT.js.map → chunk-TQSZFPIS.js.map} +0 -0
  658. /package/dist/cli-bundle/chunks/{chunk-WPAWZW7S.js.map → chunk-TSMHDIW4.js.map} +0 -0
  659. /package/dist/cli-bundle/chunks/{chunk-TZRTLMWM.js.map → chunk-UFXU44HV.js.map} +0 -0
  660. /package/dist/cli-bundle/chunks/{chunk-TWLDBKQU.js.map → chunk-ULTHRDBP.js.map} +0 -0
  661. /package/dist/cli-bundle/chunks/{chunk-RA5AIAMP.js.map → chunk-UOHFKBUV.js.map} +0 -0
  662. /package/dist/cli-bundle/chunks/{chunk-4RXTMU57.js.map → chunk-UY2ACEMF.js.map} +0 -0
  663. /package/dist/cli-bundle/chunks/{chunk-FIGXOCEQ.js.map → chunk-WUJQK4YV.js.map} +0 -0
  664. /package/dist/cli-bundle/chunks/{chunk-T4BRCB6Z.js.map → chunk-XSJUSQAE.js.map} +0 -0
  665. /package/dist/cli-bundle/chunks/{chunk-UKUIIBDW.js.map → chunk-YAQEBNY7.js.map} +0 -0
  666. /package/dist/cli-bundle/chunks/{chunk-E2WC6S4P.js.map → chunk-YBLZ2VE7.js.map} +0 -0
  667. /package/dist/cli-bundle/chunks/{chunk-Y72FV7RM.js.map → chunk-YCQET3OT.js.map} +0 -0
  668. /package/dist/cli-bundle/chunks/{close-many-LY2XJ52M.js.map → chunk-YUSOJDWM.js.map} +0 -0
  669. /package/dist/cli-bundle/chunks/{chunk-FS6UM5WH.js.map → chunk-ZI6VQWQ7.js.map} +0 -0
  670. /package/dist/cli-bundle/chunks/{comments-AJWRTFZ5.js.map → close-CWODTPKG.js.map} +0 -0
  671. /package/dist/cli-bundle/chunks/{comments-35M273DN.js.map → close-W6LI2PKM.js.map} +0 -0
  672. /package/dist/cli-bundle/chunks/{copy-GMXYKBXT.js.map → close-many-CQFUY7MR.js.map} +0 -0
  673. /package/dist/cli-bundle/chunks/{copy-NPYM7M7U.js.map → close-many-DLDDVSH5.js.map} +0 -0
  674. /package/dist/cli-bundle/chunks/{create-F53OBTOU.js.map → comments-E3TNTK24.js.map} +0 -0
  675. /package/dist/cli-bundle/chunks/{create-HU4Q7RJX.js.map → comments-WGLHR7LB.js.map} +0 -0
  676. /package/dist/cli-bundle/chunks/{delete-GSDZLTRC.js.map → copy-LXVDXH7B.js.map} +0 -0
  677. /package/dist/cli-bundle/chunks/{delete-ODRWJWAM.js.map → copy-Q5ZJPUKR.js.map} +0 -0
  678. /package/dist/cli-bundle/chunks/{deps-U57I7EAK.js.map → create-J5U6ND4K.js.map} +0 -0
  679. /package/dist/cli-bundle/chunks/{deps-WWB7P2GT.js.map → create-LBVCYMEG.js.map} +0 -0
  680. /package/dist/cli-bundle/chunks/{docs-MQIY2ZQS.js.map → delete-PMJBNY5G.js.map} +0 -0
  681. /package/dist/cli-bundle/chunks/{docs-G7N4E2JO.js.map → delete-WNHB3LYW.js.map} +0 -0
  682. /package/dist/cli-bundle/chunks/{files-TTY6N2AV.js.map → deps-JZ7TMVCB.js.map} +0 -0
  683. /package/dist/cli-bundle/chunks/{files-TBZD7V6H.js.map → deps-OA26IS25.js.map} +0 -0
  684. /package/dist/cli-bundle/chunks/{focus-XT6YVFFX.js.map → docs-FEWB2DQB.js.map} +0 -0
  685. /package/dist/cli-bundle/chunks/{focus-U5TRVCRS.js.map → docs-HA2AIDBB.js.map} +0 -0
  686. /package/dist/cli-bundle/chunks/{history-compact-M7GHYVFN.js.map → files-6YFBJRBG.js.map} +0 -0
  687. /package/dist/cli-bundle/chunks/{history-compact-KKVUWB4V.js.map → files-EFIWKFTM.js.map} +0 -0
  688. /package/dist/cli-bundle/chunks/{history-redact-3DVZOILD.js.map → focus-4QJR7FOQ.js.map} +0 -0
  689. /package/dist/cli-bundle/chunks/{history-redact-JIHZLHDP.js.map → focus-POIW5LTJ.js.map} +0 -0
  690. /package/dist/cli-bundle/chunks/{history-repair-ITDUMK4N.js.map → history-compact-CKRPDTJN.js.map} +0 -0
  691. /package/dist/cli-bundle/chunks/{history-repair-NAFCHLH7.js.map → history-compact-FWG2C7FZ.js.map} +0 -0
  692. /package/dist/cli-bundle/chunks/{learnings-SONGPSHI.js.map → history-redact-BB3TGDAE.js.map} +0 -0
  693. /package/dist/cli-bundle/chunks/{learnings-FGO3NSFW.js.map → history-redact-D225BHOZ.js.map} +0 -0
  694. /package/dist/cli-bundle/chunks/{notes-BSD53H2W.js.map → history-repair-6GEAM7HE.js.map} +0 -0
  695. /package/dist/cli-bundle/chunks/{notes-NQ6RXVW6.js.map → history-repair-RQXKQHL4.js.map} +0 -0
  696. /package/dist/cli-bundle/chunks/{plan-2NNEO46V.js.map → learnings-JLNLCOL5.js.map} +0 -0
  697. /package/dist/cli-bundle/chunks/{plan-AWLYGBNV.js.map → learnings-RSNLSWDC.js.map} +0 -0
  698. /package/dist/cli-bundle/chunks/{profile-U725ATWZ.js.map → notes-2WDH6DXU.js.map} +0 -0
  699. /package/dist/cli-bundle/chunks/{profile-AAQUU6T3.js.map → notes-GB47XXQQ.js.map} +0 -0
  700. /package/dist/cli-bundle/chunks/{restore-66GLMHIX.js.map → plan-DOVI2VMW.js.map} +0 -0
  701. /package/dist/cli-bundle/chunks/{restore-B3BAB6X2.js.map → plan-VDCJ2PCN.js.map} +0 -0
  702. /package/dist/cli-bundle/chunks/{schema-U7IM2DXV.js.map → profile-FAU7NZML.js.map} +0 -0
  703. /package/dist/cli-bundle/chunks/{schema-LZNUYHDB.js.map → profile-IVXQEL3D.js.map} +0 -0
  704. /package/dist/cli-bundle/chunks/{update-Q3UCILNR.js.map → restore-25DLT2Q2.js.map} +0 -0
  705. /package/dist/cli-bundle/chunks/{update-2XGHIVQ2.js.map → restore-YPMVUUEX.js.map} +0 -0
  706. /package/dist/cli-bundle/chunks/{update-many-75K57FS3.js.map → schema-FNU3WE4O.js.map} +0 -0
  707. /package/dist/cli-bundle/chunks/{update-many-U42YA445.js.map → schema-NBCM3RAD.js.map} +0 -0
  708. /package/dist/{cli/commands → sdk}/extension/managed-state.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../../../sdk/pagination.ts","../../../../../../../../core/item/status-filter.ts","../../../../../../../../core/schema/runtime-field-filters.ts","../../../../../../../../core/governance/content-fields.ts","../../../../../../../../cli/commands/list.ts"],"sourcesContent":["/**\n * @module sdk/pagination\n *\n * Provides versioned opaque cursor primitives shared by CLI, SDK, MCP, and\n * package-authored query surfaces.\n */\nimport { createHash } from \"node:crypto\";\nimport { PmCliError } from \"../core/shared/errors.js\";\nimport { EXIT_CODE } from \"../core/shared/constants.js\";\nimport { stableStringify } from \"../core/shared/serialization.js\";\n\nconst QUERY_CURSOR_VERSION = 1;\nconst MAX_CURSOR_LENGTH = 4096;\nconst BASE64URL_PATTERN = /^[A-Za-z0-9_-]+$/;\n\ninterface QueryCursorEnvelope {\n version: number;\n fingerprint: string;\n after_id: string;\n after_index?: number;\n}\n\n/** Decoded cursor state for advanced package and retrieval-window integrations. */\nexport interface QueryCursorState {\n /** Stable id of the last row emitted by the previous page. */\n after_id: string;\n /** Zero-based position of that row when the producer supplied one. */\n after_index?: number;\n}\n\n/** Describes one stable cursor page over an already ordered query result. */\nexport interface QueryCursorPage<T> {\n /** Rows contained in the requested page. */\n rows: T[];\n /** Whether another page exists after these rows. */\n has_more: boolean;\n /** Opaque cursor for the next page when one exists. */\n next_cursor?: string;\n}\n\n/** Build a compact deterministic fingerprint for a normalized query contract. */\nexport function createQueryFingerprint(\n command: string,\n contract: unknown,\n): string {\n return createHash(\"sha256\")\n .update(command)\n .update(\"\\0\")\n .update(stableStringify(contract))\n .digest(\"hex\")\n .slice(0, 24);\n}\n\n/** Encode the last emitted item id into a versioned opaque base64url cursor. */\nexport function encodeQueryCursor(\n fingerprint: string,\n afterId: string,\n afterIndex?: number,\n): string {\n return Buffer.from(\n JSON.stringify({\n version: QUERY_CURSOR_VERSION,\n fingerprint,\n after_id: afterId,\n ...(afterIndex === undefined ? {} : { after_index: afterIndex }),\n } satisfies QueryCursorEnvelope),\n ).toString(\"base64url\");\n}\n\nfunction invalidCursor(message: string): PmCliError {\n return new PmCliError(message, EXIT_CODE.USAGE, {\n code: \"invalid_query_cursor\",\n nextSteps: [\n \"Repeat the original query without --after to obtain a fresh cursor.\",\n ],\n });\n}\n\n/** Return whether an unknown payload is a supported cursor envelope. */\nfunction isQueryCursorEnvelope(value: unknown): value is QueryCursorEnvelope {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const envelope = value as Partial<QueryCursorEnvelope>;\n return (\n envelope.version === QUERY_CURSOR_VERSION &&\n typeof envelope.fingerprint === \"string\" &&\n typeof envelope.after_id === \"string\" &&\n envelope.after_id.length > 0 &&\n (envelope.after_index === undefined ||\n (Number.isSafeInteger(envelope.after_index) &&\n envelope.after_index >= 0))\n );\n}\n\n/** Decode and validate complete cursor state against a query fingerprint. */\nexport function decodeQueryCursorState(\n cursor: unknown,\n expectedFingerprint: string,\n): QueryCursorState {\n if (typeof cursor !== \"string\") {\n throw invalidCursor(\"Query cursor is malformed.\");\n }\n const normalized = cursor.trim();\n if (\n normalized.length === 0 ||\n normalized.length > MAX_CURSOR_LENGTH ||\n !BASE64URL_PATTERN.test(normalized)\n ) {\n throw invalidCursor(\"Query cursor is malformed.\");\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(Buffer.from(normalized, \"base64url\").toString(\"utf8\"));\n } catch {\n throw invalidCursor(\"Query cursor is malformed.\");\n }\n if (!isQueryCursorEnvelope(parsed)) {\n throw invalidCursor(\"Query cursor version or payload is unsupported.\");\n }\n const envelope = parsed;\n if (envelope.fingerprint !== expectedFingerprint) {\n throw invalidCursor(\n `Query cursor does not match the current filters, sort, or query (${envelope.fingerprint} != ${expectedFingerprint}).`,\n );\n }\n return {\n after_id: envelope.after_id,\n ...(envelope.after_index === undefined\n ? {}\n : { after_index: envelope.after_index }),\n };\n}\n\n/** Decode and validate a cursor against the normalized query fingerprint. */\nexport function decodeQueryCursor(\n cursor: unknown,\n expectedFingerprint: string,\n): string {\n return decodeQueryCursorState(cursor, expectedFingerprint).after_id;\n}\n\n/** Resolve the first row after a validated cursor's stable id tiebreaker. */\nexport function resolveQueryCursorStart<T>(\n rows: readonly T[],\n cursor: string | undefined,\n fingerprint: string,\n readId: (row: T) => string,\n): number {\n if (cursor === undefined) {\n return 0;\n }\n const state = decodeQueryCursorState(cursor, fingerprint);\n const index = rows.findIndex((row) => readId(row) === state.after_id);\n if (index < 0) {\n if (state.after_index !== undefined) {\n return Math.min(state.after_index, rows.length);\n }\n throw invalidCursor(`Query cursor item ${state.after_id} is no longer present in this result set.`);\n }\n return index + 1;\n}\n\n/** Page an ordered result through the shared stable cursor contract. */\nexport function paginateQueryRows<T>(\n rows: readonly T[],\n options: {\n cursor?: string;\n fingerprint: string;\n limit: number;\n readId: (row: T) => string;\n },\n): QueryCursorPage<T> {\n const pageStart = resolveQueryCursorStart(\n rows,\n options.cursor,\n options.fingerprint,\n options.readId,\n );\n const pageRows = rows.slice(pageStart, pageStart + options.limit);\n const hasMore =\n pageRows.length > 0 && pageStart + pageRows.length < rows.length;\n const lastRow = pageRows.at(-1);\n return {\n rows: pageRows,\n has_more: hasMore,\n ...(hasMore && lastRow !== undefined\n ? {\n next_cursor: encodeQueryCursor(\n options.fingerprint,\n options.readId(lastRow),\n pageStart + pageRows.length - 1,\n ),\n }\n : {}),\n };\n}\n\n/** Public pagination constants exposed for package authors and contract tests. */\nexport const QUERY_CURSOR_CONTRACT = Object.freeze({\n version: QUERY_CURSOR_VERSION,\n max_length: MAX_CURSOR_LENGTH,\n});\n","/**\n * @module core/item/status-filter\n *\n * Defines item parsing, formatting, and lifecycle helpers for Status Filter.\n */\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { levenshteinDistanceWithinLimit } from \"../shared/levenshtein.js\";\nimport type { RuntimeStatusRegistry } from \"../schema/runtime-schema.js\";\nimport type { ItemStatus } from \"../../types/index.js\";\nimport { normalizeStatusInput } from \"./status.js\";\n\n// Workflow-group aliases shared by every status-filter consumer so that the\n// agent-friendly `open`/`closed`/`canceled` shorthands resolve to whatever the\n// runtime workflow has configured as its open/close/cancel anchors, rather than\n// hardcoding the built-in status ids. `cancelled` is accepted as a spelling\n// variant of `canceled`.\nconst STATUS_GROUP_ALIASES: Readonly<\n Record<string, \"open_status\" | \"close_status\" | \"canceled_status\">\n> = {\n open: \"open_status\",\n closed: \"close_status\",\n canceled: \"canceled_status\",\n cancelled: \"canceled_status\",\n};\n\nconst STATUS_ALL_SENTINEL = \"all\";\n\n/** Return true when a status-filter input is the standalone all-status sentinel. */\nexport function isStatusAllFilterInput(raw: unknown): boolean {\n if (typeof raw !== \"string\") {\n return false;\n }\n const tokens = raw\n .split(\",\")\n .map((entry) => entry.trim().toLowerCase())\n .filter((entry) => entry.length > 0);\n return tokens.length === 1 && tokens[0] === STATUS_ALL_SENTINEL;\n}\n\n/**\n * Resolve a single status-filter token to a concrete runtime status id.\n *\n * Returns `undefined` when the token is not a recognized workflow-group alias\n * (open/closed/canceled) and does not normalize to a known registry status.\n * Callers decide whether an unrecognized token is an error (strict mode) or is\n * passed through verbatim (lenient mode) — see {@link parseStatusFilterCsv}.\n */\nexport function resolveStatusFilterToken(\n token: string,\n registry: RuntimeStatusRegistry,\n): ItemStatus | undefined {\n const trimmed = token.trim().toLowerCase();\n if (trimmed.length === 0) {\n return undefined;\n }\n const group = STATUS_GROUP_ALIASES[trimmed];\n if (group) {\n return registry[group] as ItemStatus;\n }\n return normalizeStatusInput(token, registry);\n}\n\nfunction collectStatusSuggestionCandidates(\n registry: RuntimeStatusRegistry,\n): string[] {\n const candidates = new Set<string>(Object.keys(STATUS_GROUP_ALIASES));\n for (const definition of registry.definitions) {\n candidates.add(definition.id);\n for (const alias of definition.aliases) {\n candidates.add(alias);\n }\n }\n return [...candidates];\n}\n\nfunction suggestClosestStatus(\n value: string,\n registry: RuntimeStatusRegistry,\n): string | undefined {\n // Only ever called for an unresolved, already-non-empty token (parseStatusFilterCsv\n // filters blanks first), so no empty-input guard is needed here.\n const normalized = value.trim().toLowerCase();\n let best: string | undefined;\n let bestDistance = Number.POSITIVE_INFINITY;\n for (const candidate of collectStatusSuggestionCandidates(registry)) {\n const distance = levenshteinDistanceWithinLimit(\n normalized,\n candidate.toLowerCase(),\n 2,\n );\n if (distance !== null && distance < bestDistance) {\n best = candidate;\n bestDistance = distance;\n }\n }\n return best;\n}\n\n/** Documents the parse status filter options payload exchanged by command, SDK, and package integrations. */\nexport interface ParseStatusFilterOptions {\n /** When true, an unrecognized token throws a USAGE error with a did-you-mean hint. When false (default), an unrecognized token is passed through verbatim so custom/unknown statuses still compare against item values by their raw string — preserving the long-standing lenient `pm list` behavior. */\n strict?: boolean;\n /** Flag label used in error messages (default: \"--status\"). */\n flagLabel?: string;\n}\n\n/** Parse a comma-separated status filter into a de-duplicated list of concrete status ids. A standalone `all` sentinel intentionally resolves to no filter so duplicate-discovery loops can search every lifecycle bucket with the same `--status` flag shape. Shared by `pm list` (lenient) and `pm search` (strict, with a did-you-mean hint on typos) so both surfaces resolve the open/closed/canceled workflow-group aliases identically. */\nexport function parseStatusFilterCsv(\n raw: unknown,\n registry: RuntimeStatusRegistry,\n options?: ParseStatusFilterOptions,\n): ItemStatus[] | undefined {\n if (typeof raw !== \"string\") {\n return undefined;\n }\n const strict = options?.strict === true;\n const flagLabel = options?.flagLabel ?? \"--status\";\n const tokens = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (tokens.length === 0) {\n return undefined;\n }\n const allTokenCount = tokens.filter(\n (token) => token.trim().toLowerCase() === STATUS_ALL_SENTINEL,\n ).length;\n if (allTokenCount > 0) {\n if (tokens.length === 1) {\n return undefined;\n }\n throw new PmCliError(\n `Invalid ${flagLabel} value \"all\". Use it by itself, or omit ${flagLabel} to search every status.`,\n EXIT_CODE.USAGE,\n );\n }\n const resolved: ItemStatus[] = [];\n for (const token of tokens) {\n const status = resolveStatusFilterToken(token, registry);\n if (status === undefined) {\n if (strict) {\n const suggestion = suggestClosestStatus(token, registry);\n throw new PmCliError(\n `Invalid ${flagLabel} value \"${token}\". Use open|closed|canceled or a configured status id${\n suggestion ? `. Did you mean \"${suggestion}\"?` : \".\"\n }`,\n EXIT_CODE.USAGE,\n );\n }\n resolved.push(token as ItemStatus);\n continue;\n }\n resolved.push(status);\n }\n return [...new Set(resolved)];\n}\n","/**\n * @module core/schema/runtime-field-filters\n *\n * Resolves configurable schema, fields, statuses, and workflows for Runtime Field Filters.\n */\nimport {\n coerceRuntimeFieldValue,\n readRuntimeFieldOptionValue,\n} from \"./runtime-field-values.js\";\nimport type {\n RuntimeFieldCommand,\n RuntimeFieldRegistry,\n} from \"./runtime-schema.js\";\nimport { stableValueEquals } from \"../shared/serialization.js\";\n\nfunction valuesEqual(left: unknown, right: unknown): boolean {\n return stableValueEquals(left, right);\n}\n\n/** Implements collect runtime filter values for the public runtime surface of this module. */\nexport function collectRuntimeFilterValues(\n options: Record<string, unknown>,\n fieldRegistry: RuntimeFieldRegistry,\n command: RuntimeFieldCommand,\n): Record<string, unknown> {\n const filters: Record<string, unknown> = {};\n for (const definition of fieldRegistry.command_to_fields.get(command) ?? []) {\n const rawValue = readRuntimeFieldOptionValue(options, definition);\n if (rawValue === undefined) {\n continue;\n }\n filters[definition.metadata_key] = coerceRuntimeFieldValue(\n definition,\n rawValue,\n );\n }\n return filters;\n}\n\n/** Implements matches runtime filters for the public runtime surface of this module. */\nexport function matchesRuntimeFilters(\n item: Record<string, unknown>,\n filters: Record<string, unknown>,\n): boolean {\n for (const [fieldKey, expectedValue] of Object.entries(filters)) {\n const actualValue = item[fieldKey];\n if (Array.isArray(expectedValue)) {\n if (Array.isArray(actualValue)) {\n const normalizedActual = actualValue.map((value) => String(value));\n const normalizedExpected = expectedValue.map((value) => String(value));\n if (\n !normalizedExpected.every((value) => normalizedActual.includes(value))\n ) {\n return false;\n }\n continue;\n }\n if (!valuesEqual(actualValue, expectedValue[expectedValue.length - 1])) {\n return false;\n }\n continue;\n }\n if (!valuesEqual(actualValue, expectedValue)) {\n return false;\n }\n }\n return true;\n}\n","/**\n * Content-field governance & utilization primitives.\n *\n * \"Project management = context management\": these primitives let agents query\n * which items carry context (notes/learnings/files/docs/tests/comments/deps/\n * body, plus whether a linked test carries a runnable command) and which do\n * not. The surface powers content-field selection (pm list / pm update-many)\n * and field-utilization reporting (pm stats --field-utilization).\n *\n * The module is pure: it performs no IO and imports no heavy runtime\n * dependencies. Callers pass plain structural item shapes so the logic stays\n * trivially testable.\n */\n\n/** The content fields an item can carry context in. */\nexport type ContentField =\n | \"notes\"\n | \"learnings\"\n | \"files\"\n | \"docs\"\n | \"tests\"\n | \"comments\"\n | \"deps\"\n | \"body\"\n | \"linked_command\";\n\n/** Stable rendering / iteration order for content fields. */\nexport const CONTENT_FIELD_ORDER: readonly ContentField[] = [\n \"notes\",\n \"learnings\",\n \"files\",\n \"docs\",\n \"tests\",\n \"comments\",\n \"deps\",\n \"body\",\n \"linked_command\",\n] as const;\n\n/** Minimal structural shape needed: the collection arrays + optional body. */\nexport interface ContentFieldItem {\n /** Value that configures or reports notes for this contract. */\n notes?: unknown[];\n /** Value that configures or reports learnings for this contract. */\n learnings?: unknown[];\n /** Value that configures or reports files for this contract. */\n files?: unknown[];\n /** Value that configures or reports docs for this contract. */\n docs?: unknown[];\n /** Value that configures or reports tests for this contract. */\n tests?: unknown[];\n /** Value that configures or reports comments for this contract. */\n comments?: unknown[];\n /** Value that configures or reports dependencies for this contract. */\n dependencies?: unknown[];\n /** Value that configures or reports body for this contract. */\n body?: string;\n [key: string]: unknown;\n}\n\n/** True when `value` is a non-empty array. */\nfunction hasEntries(value: unknown): boolean {\n return Array.isArray(value) && value.length > 0;\n}\n\n/** True when the body string carries non-whitespace content. */\nfunction hasBody(body: unknown): boolean {\n return typeof body === \"string\" && body.trim().length > 0;\n}\n\n/** True when at least one entry in the `tests` array carries a non-empty string `command`. Tolerant of non-object / non-string entries. */\nfunction hasLinkedCommand(tests: unknown): boolean {\n if (!Array.isArray(tests)) {\n return false;\n }\n return tests.some((entry) => {\n if (typeof entry !== \"object\" || entry === null) {\n return false;\n }\n const command = (entry as { command?: unknown }).command;\n return typeof command === \"string\" && command.trim().length > 0;\n });\n}\n\n/** True when the given content field carries context on this item. - collection fields: `Array.isArray && length > 0` - \"deps\": maps to the `dependencies` array - \"body\": `typeof body === \"string\" && body.trim().length > 0` - \"linked_command\": `tests` array has at least one entry with a non-empty string `command` */\nexport function isContentFieldPresent(\n item: ContentFieldItem,\n field: ContentField,\n): boolean {\n switch (field) {\n case \"notes\":\n return hasEntries(item.notes);\n case \"learnings\":\n return hasEntries(item.learnings);\n case \"files\":\n return hasEntries(item.files);\n case \"docs\":\n return hasEntries(item.docs);\n case \"tests\":\n return hasEntries(item.tests);\n case \"comments\":\n return hasEntries(item.comments);\n case \"deps\":\n return hasEntries(item.dependencies);\n case \"body\":\n return hasBody(item.body);\n case \"linked_command\":\n return hasLinkedCommand(item.tests);\n }\n // No default: every ContentField has an explicit case above, so TypeScript\n // enforces exhaustiveness here — adding a new field without a case is a\n // compile error rather than a silent fall-through (and no unreachable branch\n // to dent the literal-100% coverage gate).\n}\n\n/** Per-field selection: 'present' requires the field populated, 'absent' requires it empty. */\nexport type ContentFieldSelection = \"present\" | \"absent\";\n\n/** Map of content fields to a present/absent requirement. */\nexport type ContentFieldFilters = Partial<\n Record<ContentField, ContentFieldSelection>\n>;\n\n/** True when at least one content-field selection is requested. */\nexport function hasContentFieldFilter(filters: ContentFieldFilters): boolean {\n return CONTENT_FIELD_ORDER.some((field) => filters[field] !== undefined);\n}\n\n/**\n * Does a single item satisfy the requested content-field filters?\n *\n * AND semantics across all requested fields: each requested field must match\n * its present/absent requirement. When no filter is requested the item passes.\n */\nexport function itemMatchesContentFilters(\n item: ContentFieldItem,\n filters: ContentFieldFilters,\n): boolean {\n for (const field of CONTENT_FIELD_ORDER) {\n const selection = filters[field];\n if (selection === undefined) {\n continue;\n }\n const present = isContentFieldPresent(item, field);\n if (selection === \"present\" && !present) {\n return false;\n }\n if (selection === \"absent\" && present) {\n return false;\n }\n }\n return true;\n}\n\n/** Filter a list of items by the requested content-field selections. */\nexport function filterByContentFields<T extends ContentFieldItem>(\n items: readonly T[],\n filters: ContentFieldFilters,\n): T[] {\n if (!hasContentFieldFilter(filters)) {\n return [...items];\n }\n return items.filter((item) => itemMatchesContentFilters(item, filters));\n}\n\n/** Whether a content-field filter set requires the heavy collections to be loaded. True when any non-body field is requested (collections + tests' linked command all live in the heavy item-metadata arrays). */\nexport function contentFiltersNeedCollections(\n filters: ContentFieldFilters,\n): boolean {\n return CONTENT_FIELD_ORDER.some(\n (field) => field !== \"body\" && filters[field] !== undefined,\n );\n}\n\n/** Whether a content-field filter set requires the item body to be loaded. */\nexport function contentFiltersNeedBody(filters: ContentFieldFilters): boolean {\n return filters.body !== undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Field utilization\n// ---------------------------------------------------------------------------\n\n/** Utilization of a single content field: present vs total, with a rounded percent. */\nexport interface ContentFieldUtilization {\n /** Value that configures or reports present for this contract. */\n present: number;\n /** Value that configures or reports total for this contract. */\n total: number;\n /** present/total * 100, rounded to one decimal; 100 when total is 0. */\n percent: number;\n}\n\n/** Per-field utilization report for pm stats --field-utilization. */\nexport interface ContentFieldUtilizationReport {\n /** Value that configures or reports total items for this contract. */\n total_items: number;\n /** Utilization keyed by content field (includes body and linked_command). */\n fields: Record<ContentField, ContentFieldUtilization>;\n /** Convenience alias mirroring GH-241: identical to `fields.body`. */\n body_populated: ContentFieldUtilization;\n /** Items with an empty body; `present` counts the empty-bodied items. */\n empty_body: ContentFieldUtilization;\n}\n\n/** Round present/total into a one-decimal percentage. Matches the convention in metadata-coverage.ts: a zero population reports 100 (nothing missing). */\nfunction roundPercent(present: number, total: number): number {\n if (total === 0) {\n return 100;\n }\n return Math.round((present / total) * 1000) / 10;\n}\n\nfunction emptyUtilizationFields(): Record<\n ContentField,\n ContentFieldUtilization\n> {\n const record = {} as Record<ContentField, ContentFieldUtilization>;\n for (const field of CONTENT_FIELD_ORDER) {\n record[field] = { present: 0, total: 0, percent: 100 };\n }\n return record;\n}\n\n/** Compute content-field utilization across a list of items. For each field we report how many items populate it out of the total, plus a rounded percentage. Convenience `body_populated`/`empty_body` aliases mirror GH-241. */\nexport function computeContentFieldUtilization(\n items: readonly ContentFieldItem[],\n): ContentFieldUtilizationReport {\n const fields = emptyUtilizationFields();\n const total = items.length;\n for (const item of items) {\n for (const field of CONTENT_FIELD_ORDER) {\n if (isContentFieldPresent(item, field)) {\n fields[field].present += 1;\n }\n }\n }\n for (const field of CONTENT_FIELD_ORDER) {\n fields[field].total = total;\n fields[field].percent = roundPercent(fields[field].present, total);\n }\n const bodyPopulated = fields.body;\n const emptyBodyCount = total - bodyPopulated.present;\n const emptyBody: ContentFieldUtilization = {\n present: emptyBodyCount,\n total,\n percent: roundPercent(emptyBodyCount, total),\n };\n return {\n total_items: total,\n fields,\n body_populated: bodyPopulated,\n empty_body: emptyBody,\n };\n}\n","/**\n * @module cli/commands/list\n *\n * Implements the pm list command surface and its agent-facing runtime behavior.\n */\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { toItemRecord } from \"../../core/item/item-record.js\";\nimport { isTerminalStatus } from \"../../core/item/status.js\";\nimport {\n isStatusAllFilterInput,\n parseStatusFilterCsv,\n} from \"../../core/item/status-filter.js\";\nimport {\n resolveItemTypeRegistry,\n type ItemTypeRegistry,\n} from \"../../core/item/type-registry.js\";\nimport {\n parseIntegerLimit,\n parsePriority,\n parseType,\n} from \"../shared-parsers.js\";\nimport {\n collectRuntimeFilterValues,\n matchesRuntimeFilters,\n} from \"../../core/schema/runtime-field-filters.js\";\nimport {\n hasMissingMetadataFilter,\n itemMatchesMissingMetadata,\n lifecycleClassifierFromStatusRegistry,\n type MissingMetadataFilters,\n} from \"../../core/governance/metadata-coverage.js\";\nimport {\n contentFiltersNeedBody,\n contentFiltersNeedCollections,\n hasContentFieldFilter,\n itemMatchesContentFilters,\n type ContentField,\n type ContentFieldFilters,\n} from \"../../core/governance/content-fields.js\";\nimport {\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.js\";\nimport {\n EXIT_CODE,\n ITEM_METADATA_KEY_ORDER,\n} from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport {\n compareTimestampStrings,\n matchesTimestampFilters,\n nowIso,\n resolveIsoOrRelative,\n} from \"../../core/shared/time.js\";\nimport {\n listAllItemMetadata,\n listAllItemMetadataLight,\n listAllItemMetadataWithBody,\n} from \"../../core/store/item-store.js\";\nimport { HEAVY_METADATA_KEYS } from \"../../core/store/item-metadata-cache.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type {\n ItemMetadata,\n ItemStatus,\n ItemType,\n} from \"../../types/index.js\";\nimport type { SharedItemFilterOptions } from \"./item-filter-options.js\";\nimport {\n createQueryFingerprint,\n encodeQueryCursor,\n resolveQueryCursorStart,\n} from \"../../sdk/pagination.js\";\n\n/** Documents the list options payload exchanged by command, SDK, and package integrations. */\nexport interface ListOptions extends SharedItemFilterOptions {\n /** Value that configures or reports ids for this contract. */\n ids?: string;\n /** Value that configures or reports assignee filter for this contract. */\n assigneeFilter?: string;\n /** Value that configures or reports today for this contract. */\n today?: boolean;\n /** Value that configures or reports recent for this contract. */\n recent?: boolean;\n /** Value that configures or reports limit for this contract. */\n limit?: string;\n /** Value that configures or reports offset for this contract. */\n offset?: string;\n /** Opaque cursor returned by a previous list page. */\n after?: string;\n /** Value that configures or reports no truncate for this contract. */\n noTruncate?: boolean;\n /** Value that configures or reports include body for this contract. */\n includeBody?: boolean;\n /** Value that configures or reports compact for this contract. */\n compact?: boolean;\n /** Value that configures or reports brief for this contract. */\n brief?: boolean;\n /** Value that configures or reports full for this contract. */\n full?: boolean;\n /** Value that configures or reports fields for this contract. */\n fields?: string;\n /** Value that configures or reports sort for this contract. */\n sort?: string;\n /** Value that configures or reports order for this contract. */\n order?: string;\n /** Value that configures or reports tree for this contract. */\n tree?: boolean;\n /** Value that configures or reports tree depth for this contract. */\n treeDepth?: string;\n /** Value that configures or reports exclude terminal for this contract. */\n excludeTerminal?: boolean;\n /** Value that configures or reports filter ac missing for this contract. */\n filterAcMissing?: boolean;\n /** Value that configures or reports filter estimates missing for this contract. */\n filterEstimatesMissing?: boolean;\n /** Value that configures or reports filter resolution missing for this contract. */\n filterResolutionMissing?: boolean;\n /** Value that configures or reports filter metadata missing for this contract. */\n filterMetadataMissing?: boolean;\n}\n\n/** Extract the missing-metadata selection filters from list/update-many options. */\nexport function resolveMissingMetadataFilters(options: {\n filterAcMissing?: boolean;\n filterEstimatesMissing?: boolean;\n filterResolutionMissing?: boolean;\n filterMetadataMissing?: boolean;\n filterReviewerMissing?: boolean;\n filterRiskMissing?: boolean;\n filterConfidenceMissing?: boolean;\n filterSprintMissing?: boolean;\n filterReleaseMissing?: boolean;\n}): MissingMetadataFilters {\n return {\n acMissing: options.filterAcMissing === true,\n estimatesMissing: options.filterEstimatesMissing === true,\n resolutionMissing: options.filterResolutionMissing === true,\n metadataMissing: options.filterMetadataMissing === true,\n reviewerMissing: options.filterReviewerMissing === true,\n riskMissing: options.filterRiskMissing === true,\n confidenceMissing: options.filterConfidenceMissing === true,\n sprintMissing: options.filterSprintMissing === true,\n releaseMissing: options.filterReleaseMissing === true,\n };\n}\n\n/** Per content field: the present flag and the absence flag on the options shape. */\ninterface ContentFieldFlagMapping {\n field: ContentField;\n presentKey: string;\n absentKey: string;\n /** Human flag names used in the conflict error message. */\n presentFlag: string;\n absentFlag: string;\n}\n\nconst CONTENT_FIELD_FLAG_MAPPINGS: readonly ContentFieldFlagMapping[] = [\n {\n field: \"notes\",\n presentKey: \"hasNotes\",\n absentKey: \"noNotes\",\n presentFlag: \"--has-notes\",\n absentFlag: \"--no-notes\",\n },\n {\n field: \"learnings\",\n presentKey: \"hasLearnings\",\n absentKey: \"noLearnings\",\n presentFlag: \"--has-learnings\",\n absentFlag: \"--no-learnings\",\n },\n {\n field: \"files\",\n presentKey: \"hasFiles\",\n absentKey: \"noFiles\",\n presentFlag: \"--has-files\",\n absentFlag: \"--no-files\",\n },\n {\n field: \"docs\",\n presentKey: \"hasDocs\",\n absentKey: \"noDocs\",\n presentFlag: \"--has-docs\",\n absentFlag: \"--no-docs\",\n },\n {\n field: \"tests\",\n presentKey: \"hasTests\",\n absentKey: \"noTests\",\n presentFlag: \"--has-tests\",\n absentFlag: \"--no-tests\",\n },\n {\n field: \"comments\",\n presentKey: \"hasComments\",\n absentKey: \"noComments\",\n presentFlag: \"--has-comments\",\n absentFlag: \"--no-comments\",\n },\n {\n field: \"deps\",\n presentKey: \"hasDeps\",\n absentKey: \"noDeps\",\n presentFlag: \"--has-deps\",\n absentFlag: \"--no-deps\",\n },\n {\n field: \"body\",\n presentKey: \"hasBody\",\n absentKey: \"emptyBody\",\n presentFlag: \"--has-body\",\n absentFlag: \"--empty-body\",\n },\n {\n field: \"linked_command\",\n presentKey: \"hasLinkedCommand\",\n absentKey: \"noLinkedCommand\",\n presentFlag: \"--has-linked-command\",\n absentFlag: \"--no-linked-command\",\n },\n] as const;\n\n/** Resolve the content-field presence/absence selections from list/search options. A field requested both present AND absent is a usage error (the two selections are mutually exclusive). Returns an empty object when no content-field filter is active. */\nexport function resolveContentFieldFilters(\n options: Record<string, unknown>,\n): ContentFieldFilters {\n const filters: ContentFieldFilters = {};\n for (const mapping of CONTENT_FIELD_FLAG_MAPPINGS) {\n const present = options[mapping.presentKey] === true;\n const absent = options[mapping.absentKey] === true;\n if (present && absent) {\n throw new PmCliError(\n `Cannot combine ${mapping.presentFlag} with ${mapping.absentFlag} for the same field.`,\n EXIT_CODE.USAGE,\n );\n }\n if (present) {\n filters[mapping.field] = \"present\";\n } else if (absent) {\n filters[mapping.field] = \"absent\";\n }\n }\n return filters;\n}\n\n/** Restricts listed item values accepted by command, SDK, and storage contracts. */\nexport type ListedItem = ItemMetadata | (ItemMetadata & { body: string });\n\ntype ListProjectionMode = \"full\" | \"compact\" | \"fields\";\n\ninterface ListProjectionConfig {\n mode: ListProjectionMode;\n fields: string[];\n}\n\n/** Public contract for list sort fields, shared by SDK and presentation-layer consumers. */\nexport const LIST_SORT_FIELDS = [\n \"priority\",\n \"deadline\",\n \"updated_at\",\n \"created_at\",\n \"title\",\n \"parent\",\n] as const;\n/** Restricts list sort field values accepted by command, SDK, and storage contracts. */\nexport type ListSortField = (typeof LIST_SORT_FIELDS)[number];\n\n/** Supported values accepted by the list sort order contract. */\nexport const LIST_SORT_ORDER_VALUES = [\"asc\", \"desc\"] as const;\n/** Restricts list sort order values accepted by command, SDK, and storage contracts. */\nexport type ListSortOrder = (typeof LIST_SORT_ORDER_VALUES)[number];\n\nconst DEFAULT_COMPACT_LIST_FIELDS = [\n \"id\",\n \"title\",\n \"status\",\n \"type\",\n \"priority\",\n \"parent\",\n \"updated_at\",\n] as const;\nconst BRIEF_LIST_FIELDS = [\"id\", \"status\", \"type\", \"title\"] as const;\nconst TREE_METADATA_FIELDS = [\n \"tree_depth\",\n \"tree_parent\",\n \"tree_children\",\n \"tree_title\",\n] as const;\n\n// A projection that selects any heavy collection field (or `--full`, which returns\n// items verbatim) must load the full metadata; everything else takes the light path.\n// Sourced from the single HEAVY_METADATA_KEYS definition in the cache layer so the\n// light/heavy split can never drift between the cache and the projection routing.\nconst HEAVY_PROJECTION_FIELDS: ReadonlySet<string> = new Set<string>(\n HEAVY_METADATA_KEYS,\n);\n\ninterface ListResultBase {\n items: ListedItem[];\n count: number;\n // Total rows matched before pagination; only emitted when --limit/--offset\n // omitted rows, so agents know how many remain (GH-154).\n total?: number;\n /** Whether additional rows remain after this page. */\n has_more?: boolean;\n /** Opaque continuation cursor when additional rows remain. */\n next_cursor?: string;\n /** Effective page size, including an automatic at-scale bound. */\n applied_limit?: number;\n /** Explicit marker that the response is a bounded page. */\n truncated?: true;\n warnings?: string[];\n}\n\n/** Documents the list compact result payload exchanged by command, SDK, and package integrations. */\nexport interface ListCompactResult extends ListResultBase {\n /** Value that configures or reports filters for this contract. */\n filters: Record<string, unknown>;\n /** Value that configures or reports projection for this contract. */\n projection?: undefined;\n /** Value that configures or reports sorting for this contract. */\n sorting?: undefined;\n /** Value that configures or reports now for this contract. */\n now?: undefined;\n}\n\n/** Documents the list verbose result payload exchanged by command, SDK, and package integrations. */\nexport interface ListVerboseResult extends ListResultBase {\n /** Value that configures or reports filters for this contract. */\n filters: Record<string, unknown>;\n /** Value that configures or reports projection for this contract. */\n projection: {\n mode: ListProjectionMode;\n fields: string[] | null;\n };\n /** Value that configures or reports sorting for this contract. */\n sorting: {\n sort: ListSortField | \"default\";\n order: ListSortOrder;\n };\n /** Value that configures or reports now for this contract. */\n now: string;\n}\n\n/** Restricts list result values accepted by command, SDK, and storage contracts. */\nexport type ListResult = ListCompactResult | ListVerboseResult;\n\nfunction isNonEmptyRecord(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.keys(value).length > 0\n );\n}\n\n// Active content-field filter flags, keyed by the options dest and the snake_case\n// summary key emitted in the filters echo (GH-242). Presence and absence are\n// distinct echo keys (has_notes vs no_notes; has_body vs empty_body).\nconst CONTENT_FILTER_ECHO_ENTRIES: ReadonlyArray<{\n key: string;\n summaryKey: string;\n}> = [\n { key: \"hasNotes\", summaryKey: \"has_notes\" },\n { key: \"hasLearnings\", summaryKey: \"has_learnings\" },\n { key: \"hasFiles\", summaryKey: \"has_files\" },\n { key: \"hasDocs\", summaryKey: \"has_docs\" },\n { key: \"hasTests\", summaryKey: \"has_tests\" },\n { key: \"hasComments\", summaryKey: \"has_comments\" },\n { key: \"hasDeps\", summaryKey: \"has_deps\" },\n { key: \"hasBody\", summaryKey: \"has_body\" },\n { key: \"hasLinkedCommand\", summaryKey: \"has_linked_command\" },\n { key: \"noNotes\", summaryKey: \"no_notes\" },\n { key: \"noLearnings\", summaryKey: \"no_learnings\" },\n { key: \"noFiles\", summaryKey: \"no_files\" },\n { key: \"noDocs\", summaryKey: \"no_docs\" },\n { key: \"noTests\", summaryKey: \"no_tests\" },\n { key: \"noComments\", summaryKey: \"no_comments\" },\n { key: \"noDeps\", summaryKey: \"no_deps\" },\n { key: \"emptyBody\", summaryKey: \"empty_body\" },\n { key: \"noLinkedCommand\", summaryKey: \"no_linked_command\" },\n] as const;\n\n// Active governance-missing filter flags (GH-236), keyed by options dest and the\n// snake_case summary key emitted in the filters echo.\nconst GOVERNANCE_MISSING_ECHO_ENTRIES: ReadonlyArray<{\n key: string;\n summaryKey: string;\n}> = [\n { key: \"filterReviewerMissing\", summaryKey: \"filter_reviewer_missing\" },\n { key: \"filterRiskMissing\", summaryKey: \"filter_risk_missing\" },\n { key: \"filterConfidenceMissing\", summaryKey: \"filter_confidence_missing\" },\n { key: \"filterSprintMissing\", summaryKey: \"filter_sprint_missing\" },\n { key: \"filterReleaseMissing\", summaryKey: \"filter_release_missing\" },\n] as const;\n\nfunction applyContentFilterEcho(\n filters: Record<string, unknown>,\n options: Record<string, unknown>,\n): void {\n for (const entry of CONTENT_FILTER_ECHO_ENTRIES) {\n if (options[entry.key] === true) {\n filters[entry.summaryKey] = true;\n }\n }\n}\n\nfunction applyGovernanceMissingFilterEcho(\n filters: Record<string, unknown>,\n options: Record<string, unknown>,\n): void {\n for (const entry of GOVERNANCE_MISSING_ECHO_ENTRIES) {\n if (options[entry.key] === true) {\n filters[entry.summaryKey] = true;\n }\n }\n}\n\ninterface FilterValueEchoEntry {\n optionKey: string;\n summaryKey: string;\n normalize?: (value: unknown) => unknown;\n}\n\n/**\n * Copies user-supplied option values into compact filter summaries.\n *\n * Compact list/search responses are optimized for agent context: they echo only\n * filters the caller actually supplied. Keeping this helper shared prevents the\n * list and search command summaries from drifting as new scalar filters are\n * added.\n */\nexport function applyFilterValueEcho(\n filters: Record<string, unknown>,\n options: Record<string, unknown>,\n entries: ReadonlyArray<FilterValueEchoEntry>,\n): void {\n for (const entry of entries) {\n const value = options[entry.optionKey];\n if (value !== undefined) {\n filters[entry.summaryKey] = entry.normalize\n ? entry.normalize(value)\n : value;\n }\n }\n}\n\n/** Implements build content filter echo for the public runtime surface of this module. */\nexport function buildContentFilterEcho(\n options: Record<string, unknown>,\n): Record<string, true> {\n const echo: Record<string, true> = {};\n applyContentFilterEcho(echo, options);\n return echo;\n}\n\n/** Implements build governance missing filter echo for the public runtime surface of this module. */\nexport function buildGovernanceMissingFilterEcho(\n options: Record<string, unknown>,\n): Record<string, true> {\n const echo: Record<string, true> = {};\n applyGovernanceMissingFilterEcho(echo, options);\n return echo;\n}\n\nconst COMPACT_LIST_VALUE_FILTER_ECHO_ENTRIES: ReadonlyArray<FilterValueEchoEntry> =\n [\n { optionKey: \"type\", summaryKey: \"type\" },\n { optionKey: \"tag\", summaryKey: \"tag\" },\n { optionKey: \"priority\", summaryKey: \"priority\" },\n { optionKey: \"deadlineBefore\", summaryKey: \"deadline_before\" },\n { optionKey: \"deadlineAfter\", summaryKey: \"deadline_after\" },\n { optionKey: \"updatedAfter\", summaryKey: \"updated_after\" },\n { optionKey: \"updatedBefore\", summaryKey: \"updated_before\" },\n { optionKey: \"createdAfter\", summaryKey: \"created_after\" },\n { optionKey: \"createdBefore\", summaryKey: \"created_before\" },\n { optionKey: \"ids\", summaryKey: \"ids\" },\n { optionKey: \"assignee\", summaryKey: \"assignee\" },\n { optionKey: \"assigneeFilter\", summaryKey: \"assignee_filter\" },\n { optionKey: \"parent\", summaryKey: \"parent\" },\n { optionKey: \"sprint\", summaryKey: \"sprint\" },\n { optionKey: \"release\", summaryKey: \"release\" },\n ] as const;\n\nconst VERBOSE_LIST_VALUE_FILTER_ECHO_ENTRIES: ReadonlyArray<FilterValueEchoEntry> =\n [\n { optionKey: \"type\", summaryKey: \"type\" },\n { optionKey: \"tag\", summaryKey: \"tag\" },\n { optionKey: \"priority\", summaryKey: \"priority\" },\n { optionKey: \"deadlineBefore\", summaryKey: \"deadline_before\" },\n { optionKey: \"deadlineAfter\", summaryKey: \"deadline_after\" },\n { optionKey: \"updatedAfter\", summaryKey: \"updated_after\" },\n { optionKey: \"updatedBefore\", summaryKey: \"updated_before\" },\n { optionKey: \"createdAfter\", summaryKey: \"created_after\" },\n { optionKey: \"createdBefore\", summaryKey: \"created_before\" },\n { optionKey: \"ids\", summaryKey: \"ids\" },\n { optionKey: \"assignee\", summaryKey: \"assignee\" },\n { optionKey: \"assigneeFilter\", summaryKey: \"assignee_filter\" },\n { optionKey: \"parent\", summaryKey: \"parent\" },\n { optionKey: \"sprint\", summaryKey: \"sprint\" },\n { optionKey: \"release\", summaryKey: \"release\" },\n { optionKey: \"limit\", summaryKey: \"limit\" },\n { optionKey: \"offset\", summaryKey: \"offset\" },\n { optionKey: \"includeBody\", summaryKey: \"include_body\" },\n { optionKey: \"compact\", summaryKey: \"compact\" },\n { optionKey: \"fields\", summaryKey: \"fields\" },\n ] as const;\n\nconst VERBOSE_LIST_BOOLEAN_FILTER_ECHO_ENTRIES: ReadonlyArray<{\n key: string;\n summaryKey: string;\n}> = [\n { key: \"filterAcMissing\", summaryKey: \"filter_ac_missing\" },\n { key: \"filterEstimatesMissing\", summaryKey: \"filter_estimates_missing\" },\n { key: \"filterResolutionMissing\", summaryKey: \"filter_resolution_missing\" },\n { key: \"filterMetadataMissing\", summaryKey: \"filter_metadata_missing\" },\n] as const;\n\nconst LIST_RECENT_WINDOW = \"-7d\";\n\nfunction buildCompactListFilterSummary(params: {\n filtersStatus: string | string[] | null;\n options: ListOptions;\n treeEnabled: boolean;\n treeDepth: number | undefined;\n sortField: ListSortField | undefined;\n sortOrder: ListSortOrder;\n runtimeFieldFilters: Record<string, unknown>;\n}): Record<string, unknown> {\n const {\n filtersStatus,\n options,\n treeEnabled,\n treeDepth,\n sortField,\n sortOrder,\n runtimeFieldFilters,\n } = params;\n const filters: Record<string, unknown> = {};\n if (filtersStatus !== null) {\n filters.status = filtersStatus;\n }\n applyFilterValueEcho(\n filters,\n options,\n COMPACT_LIST_VALUE_FILTER_ECHO_ENTRIES,\n );\n applyListWindowFilterEcho(filters, options);\n if (options.filterAcMissing === true) {\n filters.filter_ac_missing = true;\n }\n if (options.filterEstimatesMissing === true) {\n filters.filter_estimates_missing = true;\n }\n if (options.filterResolutionMissing === true) {\n filters.filter_resolution_missing = true;\n }\n if (options.filterMetadataMissing === true) {\n filters.filter_metadata_missing = true;\n }\n applyGovernanceMissingFilterEcho(filters, options);\n applyContentFilterEcho(filters, options);\n if (options.limit !== undefined) {\n filters.limit = options.limit;\n }\n if (options.offset !== undefined) {\n filters.offset = options.offset;\n }\n if (options.includeBody === true) {\n filters.include_body = true;\n }\n if (options.fields !== undefined) {\n filters.fields = options.fields;\n }\n if (treeEnabled) {\n filters.tree = true;\n if (treeDepth !== undefined) {\n filters.tree_depth = treeDepth;\n }\n }\n if (sortField !== undefined) {\n filters.sort = sortField;\n filters.order = sortOrder;\n }\n if (isNonEmptyRecord(runtimeFieldFilters)) {\n filters.runtime_filters = runtimeFieldFilters;\n }\n return filters;\n}\n\nfunction compareDefaultSort(\n left: ListedItem,\n right: ListedItem,\n statusRegistry: RuntimeStatusRegistry,\n): number {\n const leftTerminal = isTerminalStatus(left.status, statusRegistry);\n const rightTerminal = isTerminalStatus(right.status, statusRegistry);\n if (leftTerminal !== rightTerminal) {\n return leftTerminal ? 1 : -1;\n }\n const byPriority = left.priority - right.priority;\n if (byPriority !== 0) {\n return byPriority;\n }\n const byUpdated = compareTimestampStrings(right.updated_at, left.updated_at);\n if (byUpdated !== 0) {\n return byUpdated;\n }\n return (left.id ?? \"\").localeCompare(right.id ?? \"\");\n}\n\nfunction sortItemsDefault(\n items: ListedItem[],\n statusRegistry: RuntimeStatusRegistry,\n): ListedItem[] {\n return [...items].sort((left, right) =>\n compareDefaultSort(left, right, statusRegistry),\n );\n}\n\nfunction parseDeadline(\n raw: string | undefined,\n fieldLabel: string,\n): string | undefined {\n if (raw === undefined) return undefined;\n return resolveIsoOrRelative(raw, new Date(), fieldLabel);\n}\n\n// updated/created date-window filters share the deadline ISO+relative resolver\n// so agents doing incremental \"what changed since my last context window\" syncs\n// can pass either an ISO timestamp (the common case — feed back the previous\n// run's `now`) or a SIGNED relative offset where \"-2h\"/\"-7d\" reach into the\n// past and \"+1d\" into the future (units h/d/w/m, m = months — there is no\n// minutes unit, matching the deadline resolver).\nfunction parseTimestampWindow(\n raw: unknown,\n fieldLabel: string,\n): string | undefined {\n if (raw == null) return undefined;\n const value = String(raw).trim();\n if (value.length === 0) return undefined;\n return resolveIsoOrRelative(value, new Date(), fieldLabel);\n}\n\nfunction resolveListUpdatedAfter(options: ListOptions): string | undefined {\n const hasUpdatedAfter =\n options.updatedAfter != null &&\n String(options.updatedAfter).trim().length > 0;\n const selectedWindows = [\n options.today === true,\n options.recent === true,\n hasUpdatedAfter,\n ].filter((selected) => selected).length;\n if (selectedWindows > 1) {\n throw new PmCliError(\n \"Choose only one updated_at window: --today, --recent, or --updated-after.\",\n EXIT_CODE.USAGE,\n );\n }\n if (options.today === true) {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return today.toISOString();\n }\n if (options.recent === true) {\n return parseTimestampWindow(LIST_RECENT_WINDOW, \"recent\");\n }\n return parseTimestampWindow(options.updatedAfter, \"updated-after\");\n}\n\nfunction applyListWindowFilterEcho(\n filters: Record<string, unknown>,\n options: ListOptions,\n): void {\n if (options.today === true) {\n filters.today = true;\n }\n if (options.recent === true) {\n filters.recent = true;\n }\n}\n\nfunction parseIdsFilter(raw: unknown): Set<string> | undefined {\n if (raw == null) return undefined;\n const value = String(raw).trim();\n if (value.length === 0) {\n throw new PmCliError(\n \"--ids requires at least one non-empty item ID\",\n EXIT_CODE.USAGE,\n );\n }\n const ids = value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (ids.length === 0) {\n throw new PmCliError(\n \"--ids requires at least one non-empty item ID\",\n EXIT_CODE.USAGE,\n );\n }\n return new Set(ids);\n}\n\nfunction parseOffset(raw: string | undefined): number | undefined {\n if (raw === undefined) return undefined;\n const parsed = Number(raw);\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new PmCliError(\n \"Offset filter must be a non-negative integer\",\n EXIT_CODE.USAGE,\n );\n }\n return parsed;\n}\n\nfunction parseFieldSelectors(raw: string | undefined): string[] | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const selectors = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (selectors.length === 0) {\n throw new PmCliError(\n \"List --fields requires a comma-separated list of field names\",\n EXIT_CODE.USAGE,\n );\n }\n return [...new Set(selectors)];\n}\n\nfunction parseProjectionConfig(options: ListOptions): ListProjectionConfig {\n const compactRequested = options.compact === true;\n const briefRequested = options.brief === true;\n const fullRequested = options.full === true;\n const fieldSelectors = parseFieldSelectors(options.fields);\n const enabledModes =\n Number(compactRequested) +\n Number(briefRequested) +\n Number(fullRequested) +\n Number(fieldSelectors !== undefined);\n if (enabledModes > 1) {\n throw new PmCliError(\n \"List projection options are mutually exclusive. Use one of --compact, --brief, --full, or --fields.\",\n EXIT_CODE.USAGE,\n );\n }\n if (fullRequested) {\n return {\n mode: \"full\",\n fields: [],\n };\n }\n if (briefRequested) {\n return {\n mode: \"compact\",\n fields: [...BRIEF_LIST_FIELDS],\n };\n }\n if (compactRequested) {\n return {\n mode: \"compact\",\n fields: [...DEFAULT_COMPACT_LIST_FIELDS],\n };\n }\n if (fieldSelectors) {\n return {\n mode: \"fields\",\n fields: fieldSelectors,\n };\n }\n return {\n mode: \"full\",\n fields: [],\n };\n}\n\nfunction normalizeProjectionField(field: string): string {\n return field.startsWith(\"item.\") ? field.slice(\"item.\".length) : field;\n}\n\nfunction validateListProjectionFields(\n projection: ListProjectionConfig,\n runtimeMetadataKeys: Iterable<string>,\n): void {\n if (projection.mode !== \"fields\") {\n return;\n }\n const allowed = new Set([\n ...ITEM_METADATA_KEY_ORDER,\n \"body\",\n ...TREE_METADATA_FIELDS,\n ...runtimeMetadataKeys,\n ]);\n const unknown = projection.fields.filter(\n (field) => !allowed.has(normalizeProjectionField(field)),\n );\n if (unknown.length > 0) {\n throw new PmCliError(\n `Unknown list --fields value(s): ${unknown.join(\", \")}`,\n EXIT_CODE.USAGE,\n {\n code: \"unknown_field_projection\",\n examples: [\n \"pm list-open --fields id,title,status,type,updated_at\",\n \"pm list --fields id,title,parent,priority --limit 10\",\n \"pm list-all --fields id,title,body --limit 5\",\n ],\n },\n );\n }\n}\n\n// Convenience aliases so agents/humans who reach for the bare verb form\n// (e.g. `--sort updated`) land on the canonical timestamp fields instead of an error.\n// A Map (not a plain object) avoids prototype-chain lookups for keys like \"__proto__\".\nconst LIST_SORT_FIELD_ALIASES: ReadonlyMap<string, ListSortField> = new Map<\n string,\n ListSortField\n>([\n [\"updated\", \"updated_at\"],\n [\"update\", \"updated_at\"],\n [\"modified\", \"updated_at\"],\n [\"created\", \"created_at\"],\n [\"create\", \"created_at\"],\n]);\n\nfunction parseSortField(raw: string | undefined): ListSortField | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n const aliased = LIST_SORT_FIELD_ALIASES.get(normalized);\n if (aliased) {\n return aliased;\n }\n if (!LIST_SORT_FIELDS.includes(normalized as ListSortField)) {\n throw new PmCliError(\n `Sort field must be one of ${LIST_SORT_FIELDS.join(\"|\")} (aliases: updated->updated_at, created->created_at)`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized as ListSortField;\n}\n\nfunction parseSortOrder(raw: string | undefined): ListSortOrder | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n if (!LIST_SORT_ORDER_VALUES.includes(normalized as ListSortOrder)) {\n throw new PmCliError(\n `Sort order must be one of ${LIST_SORT_ORDER_VALUES.join(\"|\")}`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized as ListSortOrder;\n}\n\nfunction parseTreeDepth(raw: string | undefined): number | undefined {\n return parseIntegerLimit(raw, \"--tree-depth\");\n}\n\nfunction parseAssigneeFilter(\n raw: string | undefined,\n): \"assigned\" | \"unassigned\" | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n if (!normalized) {\n throw new PmCliError(\n \"Assignee filter must be one of assigned|unassigned\",\n EXIT_CODE.USAGE,\n );\n }\n if (normalized !== \"assigned\" && normalized !== \"unassigned\") {\n throw new PmCliError(\n `Invalid assignee filter \"${raw}\". Allowed: assigned|unassigned`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized;\n}\n\n// Resolve built-in, runtime, and workflow-group aliases through the shared\n// registry, rejecting typos instead of returning a misleading empty result.\nfunction resolveStatusFilter(\n status: ItemStatus | undefined,\n statusRegistry: RuntimeStatusRegistry,\n): ItemStatus[] | undefined {\n return parseStatusFilterCsv(status, statusRegistry, { strict: true });\n}\n\ninterface ListFilterSet {\n idsFilter: Set<string> | undefined;\n statusSet: Set<ItemStatus> | undefined;\n excludeTerminal: boolean;\n typeFilter: ItemType | undefined;\n tagFilter: string | undefined;\n priorityFilter: number | undefined;\n deadlineBefore: string | undefined;\n deadlineAfter: string | undefined;\n updatedAfter: string | undefined;\n updatedBefore: string | undefined;\n createdAfter: string | undefined;\n createdBefore: string | undefined;\n assigneeFilter: string | undefined;\n assigneeModeFilter: \"assigned\" | \"unassigned\" | undefined;\n parentFilter: string | undefined;\n treeEnabled: boolean;\n sprintFilter: string | undefined;\n releaseFilter: string | undefined;\n missingMetadataFilters: MissingMetadataFilters;\n missingMetadataActive: boolean;\n lifecycleClassifier: ReturnType<typeof lifecycleClassifierFromStatusRegistry>;\n contentFieldFilters: ContentFieldFilters;\n contentFiltersActive: boolean;\n}\n\nfunction assertListAssigneeFilters(\n assigneeFilter: string | undefined,\n assigneeModeFilter: \"assigned\" | \"unassigned\" | undefined,\n): void {\n if (\n assigneeFilter &&\n (assigneeFilter.toLowerCase() === \"none\" ||\n assigneeFilter.toLowerCase() === \"null\")\n ) {\n throw new PmCliError(\n '--assignee no longer accepts \"none\" or \"null\". Use --assignee-filter unassigned.',\n EXIT_CODE.USAGE,\n );\n }\n if (assigneeFilter !== undefined && assigneeModeFilter === \"unassigned\") {\n throw new PmCliError(\n \"Cannot combine --assignee with --assignee-filter unassigned\",\n EXIT_CODE.USAGE,\n );\n }\n}\n\nfunction resolveListFilterSet(\n status: ItemStatus[] | undefined,\n options: ListOptions,\n typeRegistry: ItemTypeRegistry,\n statusRegistry: RuntimeStatusRegistry,\n): ListFilterSet {\n const assigneeFilter = options.assignee?.trim();\n const assigneeModeFilter = parseAssigneeFilter(options.assigneeFilter);\n assertListAssigneeFilters(assigneeFilter, assigneeModeFilter);\n const missingMetadataFilters = resolveMissingMetadataFilters(options);\n const contentFieldFilters = resolveContentFieldFilters(\n options as Record<string, unknown>,\n );\n return {\n idsFilter: parseIdsFilter(options.ids),\n statusSet:\n status && status.length > 0 ? new Set<ItemStatus>(status) : undefined,\n excludeTerminal: options.excludeTerminal === true,\n typeFilter: parseType(options.type, typeRegistry),\n tagFilter: options.tag?.trim().toLowerCase(),\n priorityFilter: parsePriority(options.priority),\n deadlineBefore: parseDeadline(options.deadlineBefore, \"deadline-before\"),\n deadlineAfter: parseDeadline(options.deadlineAfter, \"deadline-after\"),\n updatedAfter: resolveListUpdatedAfter(options),\n updatedBefore: parseTimestampWindow(\n options.updatedBefore,\n \"updated-before\",\n ),\n createdAfter: parseTimestampWindow(options.createdAfter, \"created-after\"),\n createdBefore: parseTimestampWindow(\n options.createdBefore,\n \"created-before\",\n ),\n assigneeFilter,\n assigneeModeFilter,\n parentFilter: options.parent?.trim(),\n treeEnabled: options.tree === true,\n sprintFilter: options.sprint?.trim(),\n releaseFilter: options.release?.trim(),\n missingMetadataFilters,\n missingMetadataActive: hasMissingMetadataFilter(missingMetadataFilters),\n lifecycleClassifier: lifecycleClassifierFromStatusRegistry(statusRegistry),\n contentFieldFilters,\n contentFiltersActive: hasContentFieldFilter(contentFieldFilters),\n };\n}\n\nfunction matchesListScalarFilters(\n item: ListedItem,\n filters: ListFilterSet,\n statusRegistry: RuntimeStatusRegistry,\n): boolean {\n return (\n matchesListIdentityFilters(item, filters, statusRegistry) &&\n matchesListDateFilters(item, filters) &&\n matchesListAssigneeFilterSet(item, filters) &&\n matchesListScopeFilters(item, filters)\n );\n}\n\nfunction matchesListIdentityFilters(\n item: ListedItem,\n filters: ListFilterSet,\n statusRegistry: RuntimeStatusRegistry,\n): boolean {\n if (filters.idsFilter && !filters.idsFilter.has(item.id)) return false;\n if (filters.statusSet && !filters.statusSet.has(item.status)) return false;\n if (filters.excludeTerminal && isTerminalStatus(item.status, statusRegistry))\n return false;\n if (filters.typeFilter && item.type !== filters.typeFilter) return false;\n if (filters.tagFilter && !(item.tags ?? []).includes(filters.tagFilter))\n return false;\n return (\n filters.priorityFilter === undefined ||\n item.priority === filters.priorityFilter\n );\n}\n\nfunction matchesListDateFilters(\n item: ListedItem,\n filters: ListFilterSet,\n): boolean {\n return matchesTimestampFilters(item, filters);\n}\n\nfunction matchesListAssigneeFilterSet(\n item: ListedItem,\n filters: ListFilterSet,\n): boolean {\n if (filters.assigneeModeFilter === \"assigned\" && !item.assignee) return false;\n if (filters.assigneeModeFilter === \"unassigned\" && item.assignee)\n return false;\n return (\n filters.assigneeFilter === undefined ||\n item.assignee === filters.assigneeFilter\n );\n}\n\nfunction matchesListScopeFilters(\n item: ListedItem,\n filters: ListFilterSet,\n): boolean {\n if (\n filters.parentFilter !== undefined &&\n !filters.treeEnabled &&\n item.parent !== filters.parentFilter\n )\n return false;\n if (\n filters.sprintFilter !== undefined &&\n item.sprint !== filters.sprintFilter\n )\n return false;\n return (\n filters.releaseFilter === undefined ||\n item.release === filters.releaseFilter\n );\n}\n\nfunction matchesListFilterSet(\n item: ListedItem,\n filters: ListFilterSet,\n statusRegistry: RuntimeStatusRegistry,\n runtimeFieldFilters: Record<string, unknown>,\n): boolean {\n if (!matchesListScalarFilters(item, filters, statusRegistry)) {\n return false;\n }\n if (\n filters.missingMetadataActive &&\n !itemMatchesMissingMetadata(\n item,\n filters.missingMetadataFilters,\n filters.lifecycleClassifier,\n )\n ) {\n return false;\n }\n if (\n filters.contentFiltersActive &&\n !itemMatchesContentFilters(item, filters.contentFieldFilters)\n ) {\n return false;\n }\n if (\n !matchesRuntimeFilters(item as Record<string, unknown>, runtimeFieldFilters)\n ) {\n return false;\n }\n return true;\n}\n\nfunction applyFilters(\n items: ListedItem[],\n status: ItemStatus[] | undefined,\n options: ListOptions,\n typeRegistry: ItemTypeRegistry,\n statusRegistry: RuntimeStatusRegistry,\n runtimeFieldFilters: Record<string, unknown>,\n): ListedItem[] {\n const filters = resolveListFilterSet(\n status,\n options,\n typeRegistry,\n statusRegistry,\n );\n return items.filter((item) =>\n matchesListFilterSet(item, filters, statusRegistry, runtimeFieldFilters),\n );\n}\n\nfunction trimNonEmpty(value: string | undefined): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction withTreeMetadata(\n item: ListedItem,\n depth: number,\n childCount: number,\n): ListedItem {\n const itemRecord = toItemRecord(item);\n const title = typeof itemRecord.title === \"string\" ? itemRecord.title : \"\";\n const parent =\n trimNonEmpty(\n typeof itemRecord.parent === \"string\" ? itemRecord.parent : undefined,\n ) ?? null;\n return {\n ...item,\n tree_depth: depth,\n tree_parent: parent,\n tree_children: childCount,\n tree_title: `${\" \".repeat(depth)}${title}`,\n } as ListedItem;\n}\n\nfunction orderItemsAsTree(\n sortedItems: ListedItem[],\n parentRoot: string | undefined,\n maxDepth: number | undefined,\n): ListedItem[] {\n const byId = new Map<string, ListedItem>();\n const childrenByParent = new Map<string, ListedItem[]>();\n for (const item of sortedItems) {\n byId.set(item.id, item);\n const parentId = trimNonEmpty(item.parent);\n if (!parentId) {\n continue;\n }\n const bucket = childrenByParent.get(parentId);\n if (bucket) {\n bucket.push(item);\n } else {\n childrenByParent.set(parentId, [item]);\n }\n }\n\n const roots = parentRoot\n ? [...(childrenByParent.get(parentRoot) ?? [])]\n : sortedItems.filter((item) => {\n const parentId = trimNonEmpty(item.parent);\n return !parentId || !byId.has(parentId);\n });\n const ordered: ListedItem[] = [];\n const visited = new Set<string>();\n const pushNode = (node: ListedItem, depth: number): void => {\n if (visited.has(node.id)) {\n return;\n }\n visited.add(node.id);\n const children = childrenByParent.get(node.id) ?? [];\n ordered.push(withTreeMetadata(node, depth, children.length));\n if (maxDepth !== undefined && depth >= maxDepth) {\n return;\n }\n for (const child of children) {\n pushNode(child, depth + 1);\n }\n };\n for (const root of roots) {\n pushNode(root, 0);\n }\n return ordered;\n}\n\nfunction compareNullableString(\n left: string | null,\n right: string | null,\n): number {\n if (left === right) {\n return 0;\n }\n if (left === null) {\n return 1;\n }\n if (right === null) {\n return -1;\n }\n return left.localeCompare(right);\n}\n\nfunction compareNullableTimestamp(\n left: string | null,\n right: string | null,\n): number {\n if (left === right) {\n return 0;\n }\n if (left === null) {\n return 1;\n }\n if (right === null) {\n return -1;\n }\n return compareTimestampStrings(left, right);\n}\n\nfunction compareBySortField(\n left: ListedItem,\n right: ListedItem,\n field: ListSortField,\n): number {\n switch (field) {\n case \"priority\":\n return left.priority - right.priority;\n case \"deadline\":\n return compareNullableTimestamp(\n left.deadline ?? null,\n right.deadline ?? null,\n );\n case \"updated_at\":\n return compareTimestampStrings(left.updated_at, right.updated_at);\n case \"created_at\":\n return compareTimestampStrings(left.created_at, right.created_at);\n case \"title\":\n return (left.title ?? \"\").localeCompare(right.title ?? \"\");\n case \"parent\":\n return compareNullableString(left.parent ?? null, right.parent ?? null);\n default:\n return 0;\n }\n}\n\nfunction sortItems(\n items: ListedItem[],\n sortField: ListSortField | undefined,\n sortOrder: ListSortOrder,\n statusRegistry: RuntimeStatusRegistry,\n): ListedItem[] {\n if (!sortField) {\n return sortItemsDefault(items, statusRegistry);\n }\n return [...items].sort((left, right) => {\n const byField = compareBySortField(left, right, sortField);\n if (byField !== 0) {\n return sortOrder === \"desc\" ? -byField : byField;\n }\n const fallback = compareDefaultSort(left, right, statusRegistry);\n return sortOrder === \"desc\" ? -fallback : fallback;\n });\n}\n\nfunction readListFieldValue(\n item: ListedItem,\n field: string,\n treeMode = false,\n): unknown {\n const normalized = normalizeProjectionField(field.trim());\n if (normalized.length === 0) {\n return null;\n }\n const itemRecord = toItemRecord(item);\n if (\n treeMode &&\n normalized === \"title\" &&\n typeof itemRecord.tree_title === \"string\"\n ) {\n return itemRecord.tree_title;\n }\n if (Object.prototype.hasOwnProperty.call(itemRecord, normalized)) {\n return itemRecord[normalized] ?? null;\n }\n return null;\n}\n\nfunction projectListItems(\n items: ListedItem[],\n projection: ListProjectionConfig,\n treeMode = false,\n): ListedItem[] {\n if (projection.mode === \"full\") {\n return items;\n }\n return items.map((item) => {\n const projected: Record<string, unknown> = {};\n for (const field of projection.fields) {\n projected[field] = readListFieldValue(item, field, treeMode);\n }\n return projected as unknown as ListedItem;\n });\n}\n\nfunction runtimeMetadataKeysForProjection(\n definitions: Array<{ metadata_key: string }>,\n): string[] {\n const keys: string[] = [];\n for (const field of definitions) {\n keys.push(field.metadata_key);\n }\n return keys;\n}\n\ninterface ListRuntimeContext {\n pmRoot: string;\n settings: Awaited<ReturnType<typeof readSettings>>;\n statusRegistry: RuntimeStatusRegistry;\n runtimeFieldFilters: Record<string, unknown>;\n typeRegistry: ItemTypeRegistry;\n projection: ListProjectionConfig;\n}\n\ninterface ListOrderingOptions {\n sortField: ListSortField | undefined;\n sortOrder: ListSortOrder;\n treeEnabled: boolean;\n treeDepth: number | undefined;\n parentRoot: string | undefined;\n}\n\ninterface ResolvedListStatus {\n resolvedStatus: ItemStatus[] | undefined;\n explicitAllStatuses: boolean;\n effectiveOptions: ListOptions;\n filtersStatus: string | string[] | null;\n}\n\ninterface ListPageResult {\n projected: ListedItem[];\n totalMatched: number;\n truncationExtras: { total: number } | Record<string, never>;\n pageExtras: {\n has_more?: boolean;\n next_cursor?: string;\n applied_limit?: number;\n truncated?: true;\n };\n}\n\nfunction resolveListPageLimit(\n options: ListOptions,\n totalRows: number,\n): number | undefined {\n if (options.noTruncate === true) {\n return undefined;\n }\n return (\n parseIntegerLimit(options.limit) ?? (totalRows >= 10_000 ? 20 : undefined)\n );\n}\n\nfunction resolveListPageStart(\n ordered: ListedItem[],\n options: ListOptions,\n cursorFingerprint: string,\n): number {\n if (options.after === undefined) {\n return parseOffset(options.offset) ?? 0;\n }\n return resolveQueryCursorStart(\n ordered,\n options.after,\n cursorFingerprint,\n (item) => item.id,\n );\n}\n\nfunction buildListPageExtras(\n limit: number | undefined,\n hasMore: boolean,\n nextCursor: string | undefined,\n): ListPageResult[\"pageExtras\"] {\n return {\n ...(limit !== undefined ? { applied_limit: limit } : {}),\n ...(hasMore ? { has_more: true, truncated: true } : {}),\n ...(nextCursor ? { next_cursor: nextCursor } : {}),\n };\n}\n\nasync function resolveListRuntimeContext(\n options: ListOptions,\n global: GlobalOptions,\n): Promise<ListRuntimeContext> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(\n `Tracker is not initialized at ${pmRoot}. Run pm init first.`,\n EXIT_CODE.NOT_FOUND,\n );\n }\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);\n const projection = parseProjectionConfig(options);\n validateListProjectionFields(\n projection,\n runtimeMetadataKeysForProjection(runtimeFieldRegistry.definitions),\n );\n return {\n pmRoot,\n settings,\n statusRegistry,\n runtimeFieldFilters: collectRuntimeFilterValues(\n options as Record<string, unknown>,\n runtimeFieldRegistry,\n \"list\",\n ),\n typeRegistry: resolveItemTypeRegistry(\n settings,\n getActiveExtensionRegistrations(),\n ),\n projection,\n };\n}\n\nasync function loadListItems(\n options: ListOptions,\n runtime: ListRuntimeContext,\n listWarnings: string[],\n): Promise<ListedItem[]> {\n const projectionNeedsBody = runtime.projection.fields.some(\n (field) => normalizeProjectionField(field) === \"body\",\n );\n const projectionNeedsCollections =\n runtime.projection.mode === \"full\" ||\n runtime.projection.fields.some((field) =>\n HEAVY_PROJECTION_FIELDS.has(normalizeProjectionField(field)),\n );\n const contentFieldFilters = resolveContentFieldFilters(\n options as Record<string, unknown>,\n );\n const contentNeedsCollections =\n contentFiltersNeedCollections(contentFieldFilters);\n const contentNeedsBody = contentFiltersNeedBody(contentFieldFilters);\n if (options.includeBody || projectionNeedsBody || contentNeedsBody) {\n return await listAllItemMetadataWithBody(\n runtime.pmRoot,\n runtime.settings.item_format,\n runtime.typeRegistry.type_to_folder,\n listWarnings,\n runtime.settings.schema,\n );\n }\n if (projectionNeedsCollections || contentNeedsCollections) {\n return await listAllItemMetadata(\n runtime.pmRoot,\n runtime.settings.item_format,\n runtime.typeRegistry.type_to_folder,\n listWarnings,\n runtime.settings.schema,\n );\n }\n return await listAllItemMetadataLight(\n runtime.pmRoot,\n runtime.settings.item_format,\n runtime.typeRegistry.type_to_folder,\n listWarnings,\n runtime.settings.schema,\n );\n}\n\nfunction resolveListOrderingOptions(options: ListOptions): ListOrderingOptions {\n const sortField = parseSortField(options.sort);\n const sortOrder = parseSortOrder(options.order) ?? \"asc\";\n const treeEnabled = options.tree === true;\n if (!treeEnabled && options.treeDepth !== undefined) {\n throw new PmCliError(\"List --tree-depth requires --tree\", EXIT_CODE.USAGE);\n }\n if (!sortField && options.order !== undefined) {\n throw new PmCliError(\"List --order requires --sort\", EXIT_CODE.USAGE);\n }\n return {\n sortField,\n sortOrder,\n treeEnabled,\n treeDepth: treeEnabled ? parseTreeDepth(options.treeDepth) : undefined,\n parentRoot: treeEnabled ? trimNonEmpty(options.parent) : undefined,\n };\n}\n\nfunction resolveListStatusSelection(\n status: ItemStatus | undefined,\n options: ListOptions,\n statusRegistry: RuntimeStatusRegistry,\n): ResolvedListStatus {\n const explicitStatus = resolveStatusFilter(\n options.status as ItemStatus | undefined,\n statusRegistry,\n );\n const resolvedStatus =\n explicitStatus ?? resolveStatusFilter(status, statusRegistry);\n const explicitAllStatuses = isStatusAllFilterInput(options.status);\n const effectiveOptions =\n explicitStatus || explicitAllStatuses\n ? { ...options, excludeTerminal: false }\n : options;\n const filtersStatus = explicitAllStatuses\n ? \"all\"\n : resolvedStatus === undefined\n ? null\n : resolvedStatus.length === 1\n ? resolvedStatus[0]\n : resolvedStatus;\n return {\n resolvedStatus,\n explicitAllStatuses,\n effectiveOptions,\n filtersStatus,\n };\n}\n\nfunction pageAndProjectListItems(\n ordered: ListedItem[],\n options: ListOptions,\n projection: ListProjectionConfig,\n treeEnabled: boolean,\n cursorFingerprint: string,\n): ListPageResult {\n if (options.after !== undefined && options.offset !== undefined) {\n throw new PmCliError(\n \"List --after cannot be combined with --offset.\",\n EXIT_CODE.USAGE,\n );\n }\n const limit = resolveListPageLimit(options, ordered.length);\n const offset = resolveListPageStart(ordered, options, cursorFingerprint);\n const limited =\n limit === undefined\n ? ordered.slice(offset)\n : ordered.slice(offset, offset + limit);\n const projected = projectListItems(limited, projection, treeEnabled);\n const totalMatched = ordered.length;\n const hasMore = limited.length > 0 && offset + limited.length < totalMatched;\n const nextCursor =\n hasMore && limited.length > 0\n ? encodeQueryCursor(\n cursorFingerprint,\n limited[limited.length - 1]!.id,\n offset + limited.length - 1,\n )\n : undefined;\n return {\n projected,\n totalMatched,\n truncationExtras:\n projected.length < totalMatched || offset > 0\n ? { total: totalMatched }\n : {},\n pageExtras: buildListPageExtras(limit, hasMore, nextCursor),\n };\n}\n\nfunction buildListCursorFingerprint(\n status: string | string[] | null,\n options: ListOptions,\n ordering: ListOrderingOptions,\n): string {\n const normalizedOptions: Record<string, unknown> = { ...options };\n delete normalizedOptions.after;\n delete normalizedOptions.limit;\n delete normalizedOptions.offset;\n delete normalizedOptions.noTruncate;\n delete normalizedOptions.includeBody;\n delete normalizedOptions.compact;\n delete normalizedOptions.brief;\n delete normalizedOptions.full;\n delete normalizedOptions.fields;\n return createQueryFingerprint(\"list\", {\n status,\n options: normalizedOptions,\n sort: ordering.sortField ?? \"default\",\n order: ordering.sortOrder,\n tree: ordering.treeEnabled,\n tree_depth: ordering.treeDepth ?? null,\n });\n}\n\nfunction buildVerboseListFilters(params: {\n filtersStatus: string | string[] | null;\n options: ListOptions;\n noTruncate: boolean;\n treeEnabled: boolean;\n treeDepth: number | undefined;\n sortField: ListSortField | undefined;\n sortOrder: ListSortOrder;\n runtimeFieldFilters: Record<string, unknown>;\n}): Record<string, unknown> {\n const {\n filtersStatus,\n options,\n noTruncate,\n treeEnabled,\n treeDepth,\n sortField,\n sortOrder,\n runtimeFieldFilters,\n } = params;\n const filters: Record<string, unknown> = { status: filtersStatus };\n const optionRecord = options as Record<string, unknown>;\n for (const entry of VERBOSE_LIST_VALUE_FILTER_ECHO_ENTRIES) {\n filters[entry.summaryKey] = optionRecord[entry.optionKey] ?? null;\n }\n for (const entry of VERBOSE_LIST_BOOLEAN_FILTER_ECHO_ENTRIES) {\n if (optionRecord[entry.key] === true) {\n filters[entry.summaryKey] = true;\n }\n }\n Object.assign(\n filters,\n buildGovernanceMissingFilterEcho(options),\n buildContentFilterEcho(options),\n );\n applyListWindowFilterEcho(filters, options);\n if (noTruncate) {\n filters.no_truncate = true;\n }\n if (treeEnabled) {\n filters.tree = true;\n filters.tree_depth = treeDepth ?? null;\n }\n filters.sort = sortField ?? null;\n filters.order = sortField ? sortOrder : null;\n filters.runtime_filters = runtimeFieldFilters;\n return filters;\n}\n\n/** Implements run list for the public runtime surface of this module. */\nexport async function runList(\n status: ItemStatus | undefined,\n options: ListOptions,\n global: GlobalOptions,\n): Promise<ListResult> {\n const runtime = await resolveListRuntimeContext(options, global);\n const listWarnings: string[] = [];\n const items = await loadListItems(options, runtime, listWarnings);\n const ordering = resolveListOrderingOptions(options);\n const statusSelection = resolveListStatusSelection(\n status,\n options,\n runtime.statusRegistry,\n );\n const filtered = applyFilters(\n items,\n statusSelection.resolvedStatus,\n statusSelection.effectiveOptions,\n runtime.typeRegistry,\n runtime.statusRegistry,\n runtime.runtimeFieldFilters,\n );\n const sorted = sortItems(\n filtered,\n ordering.sortField,\n ordering.sortOrder,\n runtime.statusRegistry,\n );\n const ordered = ordering.treeEnabled\n ? orderItemsAsTree(sorted, ordering.parentRoot, ordering.treeDepth)\n : sorted;\n const noTruncate = options.noTruncate === true;\n const page = pageAndProjectListItems(\n ordered,\n options,\n runtime.projection,\n ordering.treeEnabled,\n buildListCursorFingerprint(\n statusSelection.filtersStatus,\n options,\n ordering,\n ),\n );\n const now = nowIso();\n const warnings = [...new Set(listWarnings)].sort((left, right) =>\n left.localeCompare(right),\n );\n const projectionFields =\n runtime.projection.mode === \"full\" ? null : [...runtime.projection.fields];\n const compactSummaryMode =\n runtime.projection.mode === \"compact\" && options.compact === true;\n if (compactSummaryMode) {\n const compactFilters = buildCompactListFilterSummary({\n filtersStatus: statusSelection.filtersStatus,\n options,\n treeEnabled: ordering.treeEnabled,\n treeDepth: ordering.treeDepth,\n sortField: ordering.sortField,\n sortOrder: ordering.sortOrder,\n runtimeFieldFilters: runtime.runtimeFieldFilters,\n });\n return {\n items: page.projected,\n count: page.projected.length,\n ...page.truncationExtras,\n ...page.pageExtras,\n filters: compactFilters,\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n }\n return {\n items: page.projected,\n count: page.projected.length,\n ...page.truncationExtras,\n ...page.pageExtras,\n filters: buildVerboseListFilters({\n filtersStatus: statusSelection.filtersStatus,\n options,\n noTruncate,\n treeEnabled: ordering.treeEnabled,\n treeDepth: ordering.treeDepth,\n sortField: ordering.sortField,\n sortOrder: ordering.sortOrder,\n runtimeFieldFilters: runtime.runtimeFieldFilters,\n }),\n projection: {\n mode: runtime.projection.mode,\n fields: projectionFields,\n },\n sorting: {\n sort: ordering.sortField ?? \"default\",\n order: ordering.sortField ? ordering.sortOrder : \"asc\",\n },\n now,\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n}\n\n/** Public contract for test only, shared by SDK and presentation-layer consumers. */\nexport const _testOnly = {\n applyFilters,\n buildCompactListFilterSummary,\n buildContentFilterEcho,\n buildGovernanceMissingFilterEcho,\n resolveContentFieldFilters,\n resolveMissingMetadataFilters,\n compareBySortField,\n compareDefaultSort,\n compareNullableString,\n compareNullableTimestamp,\n normalizeProjectionField,\n parseAssigneeFilter,\n parseFieldSelectors,\n parseIdsFilter,\n parseOffset,\n parseProjectionConfig,\n resolveListUpdatedAfter,\n resolveListPageLimit,\n parseSortField,\n parseSortOrder,\n orderItemsAsTree,\n projectListItems,\n readListFieldValue,\n runtimeMetadataKeysForProjection,\n sortItems,\n trimNonEmpty,\n withTreeMetadata,\n};\n"],"names":[],"mappings":"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","debugId":"597a0cab-8450-538c-9b77-3f15c9f3987c"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../../../core/config/positional-value.ts","../../../../../../../../cli/commands/config.ts","../../../../../../../../cli/commands/upgrade.ts"],"sourcesContent":["/**\n * Pure routing helper for the optional positional `value` argument of `pm config set`.\n *\n * `pm config set <key> <value>` is the intuitive form agents reach for, but config\n * VALUES are actually carried by typed flags (`--format`, `--policy`, `--criterion`).\n * This module maps a config key (kebab or snake form, canonical or alias) plus a raw\n * positional value onto the typed flag it should populate, applying enabled/disabled\n * synonyms (off/on/true/false) for boolean-style policy keys. The existing per-key\n * validators in config.ts still run on the routed value, so bad values keep their\n * good error messages.\n */\n\n/** The typed flag a positional value routes to. */\nexport type ConfigPositionalFlag = \"format\" | \"policy\" | \"criterion\";\n\n/** Successful routing of a positional value to a single-value typed flag. */\nexport interface ConfigPositionalScalarRouted {\n /** Value that configures or reports routable for this contract. */\n routable: true;\n /** Value that configures or reports flag for this contract. */\n flag: \"format\" | \"policy\";\n /** Normalized scalar value for single-value flags. */\n value: string;\n}\n\n/** Successful routing of a positional value to the criteria-list flag. */\nexport interface ConfigPositionalListRouted {\n /** Value that configures or reports routable for this contract. */\n routable: true;\n /** Value that configures or reports flag for this contract. */\n flag: \"criterion\";\n /** Criteria-list flag (`--criterion`) value, supplied as a values array. */\n values: string[];\n}\n\n/** Restricts config positional routed values accepted by command, SDK, and storage contracts. */\nexport type ConfigPositionalRouted =\n | ConfigPositionalScalarRouted\n | ConfigPositionalListRouted;\n\n/** A key whose value cannot be carried by a single positional (e.g. `context`). */\nexport interface ConfigPositionalNotRoutable {\n /** Value that configures or reports routable for this contract. */\n routable: false;\n /** Human/agent-facing reason + the flags to use instead. */\n reason: string;\n}\n\n/** Restricts config positional result values accepted by command, SDK, and storage contracts. */\nexport type ConfigPositionalResult =\n | ConfigPositionalRouted\n | ConfigPositionalNotRoutable;\n\n/** Canonical snake-case config keys accepted by the config command and positional router. */\nexport type ConfigKey =\n | \"definition_of_done\"\n | \"item_format\"\n | \"history_missing_stream_policy\"\n | \"sprint_release_format_policy\"\n | \"parent_reference_policy\"\n | \"metadata_validation_profile\"\n | \"metadata_required_fields\"\n | \"lifecycle_stale_blocker_reason_patterns\"\n | \"lifecycle_closure_like_blocked_reason_patterns\"\n | \"lifecycle_closure_like_resolution_patterns\"\n | \"lifecycle_closure_like_actual_result_patterns\"\n | \"governance_preset\"\n | \"governance_ownership_enforcement\"\n | \"governance_create_mode_default\"\n | \"governance_close_validation_default\"\n | \"governance_require_close_reason\"\n | \"governance_create_default_type\"\n | \"governance_workflow_enforcement\"\n | \"governance_parent_reference_policy\"\n | \"governance_metadata_validation_profile\"\n | \"governance_force_required_for_stale_lock\"\n | \"test_result_tracking\"\n | \"telemetry_tracking\"\n | \"context\";\n\nconst FORMAT_KEYS: ReadonlySet<ConfigKey> = new Set<ConfigKey>([\"item_format\"]);\n\nconst CRITERIA_KEYS: ReadonlySet<ConfigKey> = new Set<ConfigKey>([\n \"definition_of_done\",\n \"metadata_required_fields\",\n \"lifecycle_stale_blocker_reason_patterns\",\n \"lifecycle_closure_like_blocked_reason_patterns\",\n \"lifecycle_closure_like_resolution_patterns\",\n \"lifecycle_closure_like_actual_result_patterns\",\n]);\n\nconst POLICY_KEYS: ReadonlySet<ConfigKey> = new Set<ConfigKey>([\n \"history_missing_stream_policy\",\n \"sprint_release_format_policy\",\n \"parent_reference_policy\",\n \"metadata_validation_profile\",\n \"governance_preset\",\n \"governance_ownership_enforcement\",\n \"governance_create_mode_default\",\n \"governance_close_validation_default\",\n \"governance_require_close_reason\",\n \"governance_create_default_type\",\n \"governance_workflow_enforcement\",\n \"governance_parent_reference_policy\",\n \"governance_metadata_validation_profile\",\n \"governance_force_required_for_stale_lock\",\n \"test_result_tracking\",\n \"telemetry_tracking\",\n]);\n\n/** Policy keys whose only valid values are enabled/disabled. For these we accept the intuitive synonyms off/on/true/false. Other policy keys pass through unchanged so their own validators report the precise allowed set. */\nconst ENABLED_DISABLED_POLICY_KEYS: ReadonlySet<ConfigKey> = new Set<ConfigKey>(\n [\n \"governance_require_close_reason\",\n \"governance_force_required_for_stale_lock\",\n \"test_result_tracking\",\n \"telemetry_tracking\",\n ],\n);\n\nconst ENABLED_DISABLED_SYNONYMS: Record<string, string> = {\n off: \"disabled\",\n on: \"enabled\",\n true: \"enabled\",\n false: \"disabled\",\n enabled: \"enabled\",\n disabled: \"disabled\",\n};\n\n/** Normalize any kebab/snake key form to the canonical snake key (or undefined). */\nfunction toCanonicalKey(keyOrAlias: string): ConfigKey | undefined {\n const normalized = keyOrAlias.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (\n FORMAT_KEYS.has(normalized as ConfigKey) ||\n CRITERIA_KEYS.has(normalized as ConfigKey) ||\n POLICY_KEYS.has(normalized as ConfigKey) ||\n normalized === \"context\"\n ) {\n return normalized as ConfigKey;\n }\n return undefined;\n}\n\n/** Map an enabled/disabled-style value through its synonyms (case-insensitive). Values that are not synonyms pass through unchanged so the downstream validator can reject them with its own message. */\nfunction normalizeEnabledDisabled(value: string): string {\n const normalized = value.trim().toLowerCase();\n return ENABLED_DISABLED_SYNONYMS[normalized] ?? value;\n}\n\n/**\n * Resolve which typed flag a positional `pm config set <key> <value>` value should\n * populate, plus the normalized value.\n *\n * Returns `{ routable: false, reason }` for keys that require multiple/structured\n * flags (e.g. `context`). Unknown keys also return `routable: false` so the caller\n * can fall back to the existing invalid-key path.\n */\nexport function resolveConfigPositionalValue(\n canonicalKeyOrAlias: string,\n value: string,\n): ConfigPositionalResult {\n const key = toCanonicalKey(canonicalKeyOrAlias);\n if (key === undefined) {\n return {\n routable: false,\n reason: `Unknown config key \"${canonicalKeyOrAlias}\" cannot route a positional value.`,\n };\n }\n\n if (key === \"context\") {\n return {\n routable: false,\n reason:\n \"Config set context does not accept a positional value. Use --default-depth, --activity-limit, --stale-threshold-days, or --section-<name> flags.\",\n };\n }\n\n if (FORMAT_KEYS.has(key)) {\n return { routable: true, flag: \"format\", value };\n }\n\n if (CRITERIA_KEYS.has(key)) {\n return { routable: true, flag: \"criterion\", values: [value] };\n }\n\n // policy key\n const policyValue = ENABLED_DISABLED_POLICY_KEYS.has(key)\n ? normalizeEnabledDisabled(value)\n : value;\n return { routable: true, flag: \"policy\", value: policyValue };\n}\n","/**\n * @module cli/commands/config\n *\n * Implements the pm config command surface and its agent-facing runtime behavior.\n */\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport {\n resolveConfigPositionalValue,\n type ConfigKey,\n} from \"../../core/config/positional-value.js\";\nimport {\n NESTED_SETTING_DESCRIPTORS,\n parseNestedSettingValue,\n readNestedSettingValue,\n resolveNestedSettingDescriptor,\n writeNestedSettingValue,\n type NestedSettingDescriptor,\n} from \"../../core/config/nested-settings.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { normalizeParentReferencePolicy } from \"../../core/item/parent-reference-policy.js\";\nimport { normalizeSprintReleaseFormatPolicy } from \"../../core/item/sprint-release-format.js\";\nimport {\n resolveItemTypeRegistry,\n resolveTypeName,\n} from \"../../core/item/type-registry.js\";\nimport { buildInvalidTypeError } from \"../../core/schema/item-types-file.js\";\nimport { resolveItemTypesFilePath } from \"../../core/schema/runtime-schema.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { migrateItemFilesToFormat } from \"../../core/store/item-format-migration.js\";\nimport {\n getSettingsPath,\n resolveGlobalPmRoot,\n resolvePmRoot,\n} from \"../../core/store/paths.js\";\nimport {\n readSettingsWithMetadata,\n writeSettings,\n} from \"../../core/store/settings.js\";\nimport type {\n ContextDepth,\n GovernanceCloseValidationDefault,\n GovernanceCreateModeDefault,\n GovernanceOwnershipEnforcement,\n GovernancePreset,\n GovernanceWorkflowEnforcement,\n ItemFormat,\n ParentReferencePolicy,\n PmSettings,\n SprintReleaseFormatPolicy,\n ValidateMetadataProfile,\n ValidateMetadataRequiredField,\n} from \"../../types/index.js\";\nimport { CONTEXT_DEPTH_VALUES } from \"../../types/index.js\";\n\nconst CONFIG_SCOPE_VALUES = [\"project\", \"global\"] as const;\ntype ConfigScope = (typeof CONFIG_SCOPE_VALUES)[number];\n\nconst CONFIG_KEY_VALUES = [\n \"definition-of-done\",\n \"definition_of_done\",\n \"item-format\",\n \"item_format\",\n \"history-missing-stream-policy\",\n \"history_missing_stream_policy\",\n \"sprint-release-format-policy\",\n \"sprint_release_format_policy\",\n \"parent-reference-policy\",\n \"parent_reference_policy\",\n \"metadata-validation-profile\",\n \"metadata_validation_profile\",\n \"metadata-required-fields\",\n \"metadata_required_fields\",\n \"lifecycle-stale-blocker-reason-patterns\",\n \"lifecycle_stale_blocker_reason_patterns\",\n \"lifecycle-closure-like-blocked-reason-patterns\",\n \"lifecycle_closure_like_blocked_reason_patterns\",\n \"lifecycle-closure-like-resolution-patterns\",\n \"lifecycle_closure_like_resolution_patterns\",\n \"lifecycle-closure-like-actual-result-patterns\",\n \"lifecycle_closure_like_actual_result_patterns\",\n \"governance-preset\",\n \"governance_preset\",\n \"governance-ownership-enforcement\",\n \"governance_ownership_enforcement\",\n \"governance-create-mode-default\",\n \"governance_create_mode_default\",\n \"governance-close-validation-default\",\n \"governance_close_validation_default\",\n \"governance-require-close-reason\",\n \"governance_require_close_reason\",\n \"governance-create-default-type\",\n \"governance_create_default_type\",\n \"governance-workflow-enforcement\",\n \"governance_workflow_enforcement\",\n \"governance-parent-reference-policy\",\n \"governance_parent_reference_policy\",\n \"governance-metadata-validation-profile\",\n \"governance_metadata_validation_profile\",\n \"governance-force-required-for-stale-lock\",\n \"governance_force_required_for_stale_lock\",\n \"test-result-tracking\",\n \"test_result_tracking\",\n \"telemetry-tracking\",\n \"telemetry_tracking\",\n \"context\",\n] as const;\ntype ConfigAction = \"get\" | \"set\" | \"list\" | \"export\";\ntype HistoryMissingStreamPolicy = \"auto_create\" | \"strict_error\";\ntype TestResultTrackingPolicy = \"enabled\" | \"disabled\";\ntype TelemetryTrackingPolicy = \"enabled\" | \"disabled\";\ntype GovernanceForceRequiredForStaleLockPolicy = \"enabled\" | \"disabled\";\ntype GovernanceRequireCloseReasonPolicy = \"enabled\" | \"disabled\";\ntype ConfigValue =\n | string\n | string[]\n | ItemFormat\n | HistoryMissingStreamPolicy\n | SprintReleaseFormatPolicy\n | ParentReferencePolicy\n | ValidateMetadataProfile\n | GovernancePreset\n | GovernanceOwnershipEnforcement\n | GovernanceCreateModeDefault\n | GovernanceCloseValidationDefault\n | GovernanceRequireCloseReasonPolicy\n | GovernanceWorkflowEnforcement\n | GovernanceForceRequiredForStaleLockPolicy\n | TestResultTrackingPolicy\n | TelemetryTrackingPolicy\n | ContextConfigValue;\n\ninterface ContextConfigValue {\n default_depth: string;\n activity_limit: number;\n stale_threshold_days: number;\n sections: Record<string, boolean>;\n}\n\ninterface ConfigKeyDescriptor {\n key: ConfigKey;\n aliases: string[];\n value_kind: \"string_array\" | \"enum\" | \"object\";\n set_flags: string[];\n summary: string;\n value: ConfigValue;\n}\n\n/** Documents the config command options payload exchanged by command, SDK, and package integrations. */\nexport interface ConfigCommandOptions {\n /** Value that configures or reports criterion for this contract. */\n criterion?: string[];\n /** Value that configures or reports format for this contract. */\n format?: string;\n /** Value that configures or reports policy for this contract. */\n policy?: string;\n /** Value that configures or reports value for this contract. */\n value?: string;\n /** Value that configures or reports clear criteria for this contract. */\n clearCriteria?: boolean;\n /** Fallback depth used when callers do not provide an override. */\n defaultDepth?: string;\n /** Value that configures or reports activity limit for this contract. */\n activityLimit?: string;\n /** Value that configures or reports stale threshold days for this contract. */\n staleThresholdDays?: string;\n /** Value that configures or reports section hierarchy for this contract. */\n sectionHierarchy?: string;\n /** Value that configures or reports section activity for this contract. */\n sectionActivity?: string;\n /** Value that configures or reports section progress for this contract. */\n sectionProgress?: string;\n /** Value that configures or reports section blockers for this contract. */\n sectionBlockers?: string;\n /** Value that configures or reports section files for this contract. */\n sectionFiles?: string;\n /** Value that configures or reports section workload for this contract. */\n sectionWorkload?: string;\n /** Value that configures or reports section staleness for this contract. */\n sectionStaleness?: string;\n /** Value that configures or reports section tests for this contract. */\n sectionTests?: string;\n}\n\n/** Documents the nested setting result value payload exchanged by command, SDK, and package integrations. */\nexport interface NestedSettingResultValue {\n /** Value that configures or reports key for this contract. */\n key: string;\n /** Filesystem path used for path resolution. */\n path: string;\n /** Value that configures or reports kind for this contract. */\n kind: NestedSettingDescriptor[\"kind\"];\n /** Value that configures or reports value for this contract. */\n value: string | number | boolean | null;\n}\n\n/** Documents the config result payload exchanged by command, SDK, and package integrations. */\nexport interface ConfigResult {\n /** Value that configures or reports scope for this contract. */\n scope: ConfigScope;\n /** Value that configures or reports key for this contract. */\n key?: ConfigKey | string;\n /** Value that configures or reports criteria for this contract. */\n criteria?: string[];\n /** Value that configures or reports format for this contract. */\n format?: ItemFormat;\n /** Value that configures or reports policy for this contract. */\n policy?:\n | HistoryMissingStreamPolicy\n | SprintReleaseFormatPolicy\n | ParentReferencePolicy\n | ValidateMetadataProfile\n | GovernancePreset\n | GovernanceOwnershipEnforcement\n | GovernanceCreateModeDefault\n | GovernanceCloseValidationDefault\n | GovernanceRequireCloseReasonPolicy\n | GovernanceWorkflowEnforcement\n | GovernanceForceRequiredForStaleLockPolicy\n | TestResultTrackingPolicy\n | TelemetryTrackingPolicy\n | string;\n /** Value that configures or reports nested setting for this contract. */\n nested_setting?: NestedSettingResultValue;\n /** Configuration controlling nested behavior. */\n nested_settings?: NestedSettingResultValue[];\n /** Value that configures or reports keys for this contract. */\n keys?: ConfigKeyDescriptor[];\n /** Value that configures or reports values for this contract. */\n values?: Record<ConfigKey, ConfigValue>;\n /** Value that configures or reports count for this contract. */\n count?: number;\n /** Configuration controlling context behavior. */\n context_settings?: ContextConfigValue;\n /** Whether explicit item format applies to this operation. */\n has_explicit_item_format?: boolean;\n /** Value that configures or reports migration for this contract. */\n migration?: {\n target_format: ItemFormat;\n scanned: number;\n migrated: string[];\n removed: string[];\n warnings: string[];\n };\n /** Filesystem path used for settings resolution. */\n settings_path: string;\n /** Value that configures or reports changed for this contract. */\n changed: boolean;\n /** Value that configures or reports warnings for this contract. */\n warnings?: string[];\n}\n\nconst CONFIG_KEY_ALIASES: Record<ConfigKey, string[]> = {\n definition_of_done: [\"definition-of-done\", \"definition_of_done\"],\n item_format: [\"item-format\", \"item_format\"],\n history_missing_stream_policy: [\n \"history-missing-stream-policy\",\n \"history_missing_stream_policy\",\n ],\n sprint_release_format_policy: [\n \"sprint-release-format-policy\",\n \"sprint_release_format_policy\",\n ],\n parent_reference_policy: [\n \"parent-reference-policy\",\n \"parent_reference_policy\",\n ],\n metadata_validation_profile: [\n \"metadata-validation-profile\",\n \"metadata_validation_profile\",\n ],\n metadata_required_fields: [\n \"metadata-required-fields\",\n \"metadata_required_fields\",\n ],\n lifecycle_stale_blocker_reason_patterns: [\n \"lifecycle-stale-blocker-reason-patterns\",\n \"lifecycle_stale_blocker_reason_patterns\",\n ],\n lifecycle_closure_like_blocked_reason_patterns: [\n \"lifecycle-closure-like-blocked-reason-patterns\",\n \"lifecycle_closure_like_blocked_reason_patterns\",\n ],\n lifecycle_closure_like_resolution_patterns: [\n \"lifecycle-closure-like-resolution-patterns\",\n \"lifecycle_closure_like_resolution_patterns\",\n ],\n lifecycle_closure_like_actual_result_patterns: [\n \"lifecycle-closure-like-actual-result-patterns\",\n \"lifecycle_closure_like_actual_result_patterns\",\n ],\n governance_preset: [\"governance-preset\", \"governance_preset\"],\n governance_ownership_enforcement: [\n \"governance-ownership-enforcement\",\n \"governance_ownership_enforcement\",\n ],\n governance_create_mode_default: [\n \"governance-create-mode-default\",\n \"governance_create_mode_default\",\n ],\n governance_close_validation_default: [\n \"governance-close-validation-default\",\n \"governance_close_validation_default\",\n ],\n governance_require_close_reason: [\n \"governance-require-close-reason\",\n \"governance_require_close_reason\",\n ],\n governance_create_default_type: [\n \"governance-create-default-type\",\n \"governance_create_default_type\",\n ],\n governance_workflow_enforcement: [\n \"governance-workflow-enforcement\",\n \"governance_workflow_enforcement\",\n ],\n governance_parent_reference_policy: [\n \"governance-parent-reference-policy\",\n \"governance_parent_reference_policy\",\n ],\n governance_metadata_validation_profile: [\n \"governance-metadata-validation-profile\",\n \"governance_metadata_validation_profile\",\n ],\n governance_force_required_for_stale_lock: [\n \"governance-force-required-for-stale-lock\",\n \"governance_force_required_for_stale_lock\",\n ],\n test_result_tracking: [\"test-result-tracking\", \"test_result_tracking\"],\n telemetry_tracking: [\"telemetry-tracking\", \"telemetry_tracking\"],\n context: [\"context\"],\n};\n\n// Canonical kebab-case forms (first alias entry per key). Used for the invalid-key\n// hint so agents see ~21 keys instead of all ~45 kebab+snake variants; snake_case\n// forms stay fully accepted as input via CONFIG_KEY_VALUES/normalizeKey.\nconst CANONICAL_CONFIG_KEYS: readonly string[] = (\n Object.keys(CONFIG_KEY_ALIASES) as ConfigKey[]\n).map((candidate) => CONFIG_KEY_ALIASES[candidate][0]);\nconst CONFIG_KEY_BY_ALIAS: Readonly<Record<string, ConfigKey>> =\n Object.fromEntries(\n (Object.keys(CONFIG_KEY_ALIASES) as ConfigKey[]).flatMap((key) =>\n CONFIG_KEY_ALIASES[key].map((alias) => [alias, key] as const),\n ),\n ) as Readonly<Record<string, ConfigKey>>;\n\nconst CONFIG_KEY_SUMMARIES: Record<ConfigKey, string> = {\n definition_of_done: \"Definition of Done criteria list.\",\n item_format: \"Default item file format.\",\n history_missing_stream_policy: \"Missing history stream handling policy.\",\n sprint_release_format_policy: \"Sprint/release format validation policy.\",\n parent_reference_policy: \"Parent reference validation policy.\",\n metadata_validation_profile:\n \"Validate metadata profile policy (core|strict|custom).\",\n metadata_required_fields: \"Validate custom metadata required-fields list.\",\n lifecycle_stale_blocker_reason_patterns:\n \"Validate lifecycle stale-blocker reason substring patterns (criteria list).\",\n lifecycle_closure_like_blocked_reason_patterns:\n \"Validate lifecycle closure-like blocked_reason substring patterns (criteria list).\",\n lifecycle_closure_like_resolution_patterns:\n \"Validate lifecycle closure-like resolution substring patterns (criteria list).\",\n lifecycle_closure_like_actual_result_patterns:\n \"Validate lifecycle closure-like actual_result substring patterns (criteria list).\",\n governance_preset:\n \"Governance preset policy (minimal|default|strict|custom).\",\n governance_ownership_enforcement:\n \"Governance ownership enforcement policy (none|warn|strict).\",\n governance_create_mode_default:\n \"Governance default create mode (progressive|strict).\",\n governance_close_validation_default:\n \"Governance default close validation mode (off|warn|strict).\",\n governance_require_close_reason:\n \"Governance close-reason requirement policy (enabled|disabled).\",\n governance_create_default_type:\n \"Governance default item type for `pm create` when --type is omitted.\",\n governance_workflow_enforcement:\n \"Governance per-type transition enforcement mode (off|warn|strict).\",\n governance_parent_reference_policy:\n \"Governance parent reference policy (warn|strict_error).\",\n governance_metadata_validation_profile:\n \"Governance metadata validation profile (core|strict|custom).\",\n governance_force_required_for_stale_lock:\n \"Governance stale-lock force policy (enabled|disabled).\",\n test_result_tracking: \"Item-level linked test result persistence policy.\",\n telemetry_tracking: \"Telemetry usage reporting policy.\",\n context: \"Context command settings (depth, section toggles, limits).\",\n};\n\nconst LIFECYCLE_PATTERN_CONFIG_KEYS = [\n \"lifecycle_stale_blocker_reason_patterns\",\n \"lifecycle_closure_like_blocked_reason_patterns\",\n \"lifecycle_closure_like_resolution_patterns\",\n \"lifecycle_closure_like_actual_result_patterns\",\n] as const satisfies readonly ConfigKey[];\ntype LifecyclePatternConfigKey = (typeof LIFECYCLE_PATTERN_CONFIG_KEYS)[number];\ntype CriteriaConfigKey = \"metadata_required_fields\" | LifecyclePatternConfigKey;\ntype ValidationConfigKey =\n | \"history_missing_stream_policy\"\n | \"sprint_release_format_policy\"\n | \"parent_reference_policy\"\n | \"metadata_validation_profile\";\ntype GovernancePolicyConfigKey =\n | \"governance_ownership_enforcement\"\n | \"governance_create_mode_default\"\n | \"governance_close_validation_default\";\ntype GovernanceValidationConfigKey =\n | \"governance_parent_reference_policy\"\n | \"governance_metadata_validation_profile\"\n | \"governance_workflow_enforcement\";\ntype GovernancePresetOrTypeConfigKey =\n | \"governance_preset\"\n | \"governance_create_default_type\";\n\nconst CRITERIA_CONFIG_KEYS: ReadonlySet<ConfigKey> = new Set<ConfigKey>([\n \"metadata_required_fields\",\n ...LIFECYCLE_PATTERN_CONFIG_KEYS,\n]);\nconst TRACKING_CONFIG_KEYS: ReadonlySet<ConfigKey> = new Set<ConfigKey>([\n \"test_result_tracking\",\n \"telemetry_tracking\",\n]);\nconst GOVERNANCE_BOOLEAN_CONFIG_KEYS: ReadonlySet<ConfigKey> =\n new Set<ConfigKey>([\n \"governance_require_close_reason\",\n \"governance_force_required_for_stale_lock\",\n ]);\nconst GOVERNANCE_POLICY_CONFIG_KEYS: ReadonlySet<ConfigKey> =\n new Set<ConfigKey>([\n \"governance_ownership_enforcement\",\n \"governance_create_mode_default\",\n \"governance_close_validation_default\",\n ]);\nconst GOVERNANCE_VALIDATION_CONFIG_KEYS: ReadonlySet<ConfigKey> =\n new Set<ConfigKey>([\n \"governance_parent_reference_policy\",\n \"governance_metadata_validation_profile\",\n \"governance_workflow_enforcement\",\n ]);\nconst GOVERNANCE_PRESET_OR_TYPE_CONFIG_KEYS: ReadonlySet<ConfigKey> =\n new Set<ConfigKey>([\"governance_preset\", \"governance_create_default_type\"]);\n\nconst isCriteriaValueConfigKey = (key: ConfigKey): key is CriteriaConfigKey =>\n CRITERIA_CONFIG_KEYS.has(key);\nconst isGovernancePolicyConfigKey = (\n key: ConfigKey,\n): key is GovernancePolicyConfigKey => GOVERNANCE_POLICY_CONFIG_KEYS.has(key);\nconst isGovernanceValidationConfigKey = (\n key: ConfigKey,\n): key is GovernanceValidationConfigKey =>\n GOVERNANCE_VALIDATION_CONFIG_KEYS.has(key);\nconst isGovernancePresetOrTypeConfigKey = (\n key: ConfigKey,\n): key is GovernancePresetOrTypeConfigKey =>\n GOVERNANCE_PRESET_OR_TYPE_CONFIG_KEYS.has(key);\n\nfunction isCriteriaConfigKey(key: ConfigKey): boolean {\n return key === \"definition_of_done\" || isCriteriaValueConfigKey(key);\n}\n\nfunction normalizeScope(value: string): ConfigScope {\n if ((CONFIG_SCOPE_VALUES as readonly string[]).includes(value)) {\n return value as ConfigScope;\n }\n throw new PmCliError(\n `Invalid config scope \"${value}\". Allowed: ${CONFIG_SCOPE_VALUES.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeAction(value: string): ConfigAction {\n if (\n value === \"get\" ||\n value === \"set\" ||\n value === \"list\" ||\n value === \"export\"\n ) {\n return value;\n }\n throw new PmCliError(\n `Invalid config action \"${value}\". Allowed: get, set, list, export`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeKey(value: string): ConfigKey {\n const key = CONFIG_KEY_BY_ALIAS[value];\n if (key) {\n return key;\n }\n const nestedKeys = NESTED_SETTING_DESCRIPTORS.map(\n (descriptor) => descriptor.key,\n ).join(\", \");\n throw new PmCliError(\n `Invalid config key \"${value}\". Supported: ${CANONICAL_CONFIG_KEYS.join(\", \")} (underscore variants also accepted). Nested leaf settings: ${nestedKeys}.`,\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeCriteria(\n values: string[] | undefined,\n clearCriteria: boolean | undefined,\n): string[] {\n const normalized = [\n ...new Set(\n (values ?? [])\n .map((value) => value.trim())\n .filter((value) => value.length > 0),\n ),\n ].sort((left, right) => left.localeCompare(right));\n if (clearCriteria) {\n if (normalized.length > 0) {\n throw new PmCliError(\n \"Config set definition-of-done cannot combine --clear-criteria with --criterion values\",\n EXIT_CODE.USAGE,\n );\n }\n return [];\n }\n if (normalized.length === 0) {\n throw new PmCliError(\n \"Config set definition-of-done requires at least one non-empty --criterion value (or --clear-criteria to clear)\",\n EXIT_CODE.USAGE,\n );\n }\n return normalized;\n}\n\nfunction normalizeItemFormat(value: string | undefined): ItemFormat {\n const normalized = value?.trim().toLowerCase();\n if (normalized === \"toon\") {\n return \"toon\";\n }\n if (normalized === \"json_markdown\") {\n throw new PmCliError(\n \"Config set item-format no longer accepts json_markdown. Markdown item files are legacy read/migration input only.\",\n EXIT_CODE.USAGE,\n );\n }\n throw new PmCliError(\n \"Config set item-format requires --format toon\",\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeHistoryMissingStreamPolicy(\n value: string | undefined,\n): HistoryMissingStreamPolicy {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized === \"auto_create\" || normalized === \"strict_error\") {\n return normalized;\n }\n throw new PmCliError(\n \"Config set history-missing-stream-policy requires --policy with one of: auto_create, strict_error\",\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeTestResultTrackingPolicy(\n value: string | undefined,\n): TestResultTrackingPolicy {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized === \"enabled\" || normalized === \"disabled\") {\n return normalized;\n }\n throw new PmCliError(\n \"Config set test-result-tracking requires --policy with one of: enabled, disabled\",\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeTelemetryTrackingPolicy(\n value: string | undefined,\n): TelemetryTrackingPolicy {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized === \"enabled\" || normalized === \"disabled\") {\n return normalized;\n }\n throw new PmCliError(\n \"Config set telemetry-tracking requires --policy with one of: enabled, disabled\",\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeValidateMetadataProfile(\n value: string | undefined,\n): ValidateMetadataProfile {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (\n normalized === \"core\" ||\n normalized === \"strict\" ||\n normalized === \"custom\"\n ) {\n return normalized;\n }\n throw new PmCliError(\n \"Config set metadata-validation-profile requires --policy with one of: core, strict, custom\",\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeGovernancePreset(\n value: string | undefined,\n): GovernancePreset {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (\n normalized === \"minimal\" ||\n normalized === \"default\" ||\n normalized === \"strict\" ||\n normalized === \"custom\"\n ) {\n return normalized;\n }\n throw new PmCliError(\n \"Config set governance-preset requires --policy with one of: minimal, default, strict, custom\",\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeGovernanceOwnershipEnforcement(\n value: string | undefined,\n): GovernanceOwnershipEnforcement {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (\n normalized === \"none\" ||\n normalized === \"warn\" ||\n normalized === \"strict\"\n ) {\n return normalized;\n }\n throw new PmCliError(\n \"Config set governance-ownership-enforcement requires --policy with one of: none, warn, strict\",\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeGovernanceCreateModeDefault(\n value: string | undefined,\n): GovernanceCreateModeDefault {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized === \"progressive\" || normalized === \"strict\") {\n return normalized;\n }\n throw new PmCliError(\n \"Config set governance-create-mode-default requires --policy with one of: progressive, strict\",\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeGovernanceCloseValidationDefault(\n value: string | undefined,\n): GovernanceCloseValidationDefault {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (\n normalized === \"off\" ||\n normalized === \"warn\" ||\n normalized === \"strict\"\n ) {\n return normalized;\n }\n if (normalized === \"none\" || normalized === \"disabled\") {\n return \"off\";\n }\n throw new PmCliError(\n \"Config set governance-close-validation-default requires --policy with one of: off, warn, strict\",\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeGovernanceWorkflowEnforcement(\n value: unknown,\n): GovernanceWorkflowEnforcement {\n const normalized =\n typeof value === \"string\"\n ? value.trim().toLowerCase().replaceAll(\"-\", \"_\")\n : undefined;\n if (\n normalized === \"off\" ||\n normalized === \"warn\" ||\n normalized === \"strict\"\n ) {\n return normalized;\n }\n if (normalized === \"none\" || normalized === \"disabled\") {\n return \"off\";\n }\n throw new PmCliError(\n \"Config set governance-workflow-enforcement requires one of: off, warn, strict\",\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeGovernanceForceRequiredForStaleLockPolicy(\n value: string | undefined,\n): GovernanceForceRequiredForStaleLockPolicy {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized === \"enabled\" || normalized === \"disabled\") {\n return normalized;\n }\n throw new PmCliError(\n \"Config set governance-force-required-for-stale-lock requires --policy with one of: enabled, disabled\",\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizeGovernanceRequireCloseReasonPolicy(\n value: string | undefined,\n): GovernanceRequireCloseReasonPolicy {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized === \"enabled\" || normalized === \"disabled\") {\n return normalized;\n }\n throw new PmCliError(\n \"Config set governance-require-close-reason requires --policy with one of: enabled, disabled\",\n EXIT_CODE.USAGE,\n );\n}\n\nfunction normalizePolicyForConflict(\n key: ConfigKey | undefined,\n value: string,\n): string {\n switch (key) {\n case \"history_missing_stream_policy\":\n return normalizeHistoryMissingStreamPolicy(value);\n case \"sprint_release_format_policy\":\n return normalizeSprintReleaseFormatPolicy(value);\n case \"parent_reference_policy\":\n case \"governance_parent_reference_policy\":\n return normalizeParentReferencePolicy(value);\n case \"metadata_validation_profile\":\n case \"governance_metadata_validation_profile\":\n return normalizeValidateMetadataProfile(value);\n case \"governance_preset\":\n return normalizeGovernancePreset(value);\n case \"governance_ownership_enforcement\":\n return normalizeGovernanceOwnershipEnforcement(value);\n case \"governance_create_mode_default\":\n return normalizeGovernanceCreateModeDefault(value);\n case \"governance_close_validation_default\":\n return normalizeGovernanceCloseValidationDefault(value);\n case \"governance_require_close_reason\":\n return normalizeGovernanceRequireCloseReasonPolicy(value);\n case \"governance_workflow_enforcement\":\n return normalizeGovernanceWorkflowEnforcement(value);\n case \"governance_force_required_for_stale_lock\":\n return normalizeGovernanceForceRequiredForStaleLockPolicy(value);\n case \"test_result_tracking\":\n return normalizeTestResultTrackingPolicy(value);\n case \"telemetry_tracking\":\n return normalizeTelemetryTrackingPolicy(value);\n default:\n return value.trim().toLowerCase().replaceAll(\"-\", \"_\");\n }\n}\n\nconst METADATA_REQUIRED_FIELD_ALIAS_MAP: Record<\n string,\n ValidateMetadataRequiredField\n> = {\n author: \"author\",\n acceptance_criteria: \"acceptance_criteria\",\n \"acceptance-criteria\": \"acceptance_criteria\",\n estimated_minutes: \"estimated_minutes\",\n \"estimated-minutes\": \"estimated_minutes\",\n estimate: \"estimated_minutes\",\n close_reason: \"close_reason\",\n \"close-reason\": \"close_reason\",\n reviewer: \"reviewer\",\n risk: \"risk\",\n confidence: \"confidence\",\n sprint: \"sprint\",\n release: \"release\",\n};\nconst METADATA_REQUIRED_FIELD_OPTIONS = [\n \"author\",\n \"acceptance_criteria\",\n \"estimated_minutes\",\n \"close_reason\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n] as const;\n\nfunction normalizeMetadataRequiredFields(\n values: string[] | undefined,\n clearCriteria: boolean | undefined,\n): ValidateMetadataRequiredField[] {\n const normalized = [\n ...new Set(\n (values ?? [])\n .map((value) => value.trim())\n .filter((value) => value.length > 0),\n ),\n ];\n if (clearCriteria) {\n if (normalized.length > 0) {\n throw new PmCliError(\n \"Config set metadata-required-fields cannot combine --clear-criteria with --criterion values\",\n EXIT_CODE.USAGE,\n );\n }\n return [];\n }\n if (normalized.length === 0) {\n throw new PmCliError(\n \"Config set metadata-required-fields requires at least one --criterion value (or --clear-criteria to clear)\",\n EXIT_CODE.USAGE,\n );\n }\n const lowered = normalized.map((value) =>\n value.toLowerCase().replaceAll(\"-\", \"_\"),\n );\n const unsupported = lowered.filter(\n (value) => METADATA_REQUIRED_FIELD_ALIAS_MAP[value] === undefined,\n );\n if (unsupported.length > 0) {\n throw new PmCliError(\n `Config set metadata-required-fields received unsupported values: ${unsupported.join(\", \")}. ` +\n `Supported values: ${METADATA_REQUIRED_FIELD_OPTIONS.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n return [\n ...new Set(\n lowered.map(\n (value) =>\n METADATA_REQUIRED_FIELD_ALIAS_MAP[\n value\n ] as ValidateMetadataRequiredField,\n ),\n ),\n ].sort((left, right) => left.localeCompare(right));\n}\n\nfunction normalizeLifecyclePatternCriteria(\n key: ConfigKey,\n values: string[] | undefined,\n clearCriteria: boolean | undefined,\n): string[] {\n const normalized = [\n ...new Set(\n (values ?? [])\n .map((value) => value.trim().toLowerCase())\n .filter((value) => value.length > 0),\n ),\n ].sort((left, right) => left.localeCompare(right));\n if (clearCriteria) {\n if (normalized.length > 0) {\n throw new PmCliError(\n `Config set ${CONFIG_KEY_ALIASES[key][0]} cannot combine --clear-criteria with --criterion values`,\n EXIT_CODE.USAGE,\n );\n }\n return [];\n }\n if (normalized.length === 0) {\n throw new PmCliError(\n `Config set ${CONFIG_KEY_ALIASES[key][0]} requires at least one --criterion value (or --clear-criteria to clear)`,\n EXIT_CODE.USAGE,\n );\n }\n return normalized;\n}\n\nfunction normalizeWarnings(values: string[]): string[] {\n return [...new Set(values)].sort((left, right) => left.localeCompare(right));\n}\n\nfunction normalizeKeyForAction(\n action: ConfigAction,\n value: string | undefined,\n): ConfigKey | undefined {\n if (action === \"list\" || action === \"export\") {\n if (typeof value === \"string\" && value.trim().length > 0) {\n throw new PmCliError(\n `Config action \"${action}\" does not accept <key>`,\n EXIT_CODE.USAGE,\n );\n }\n return undefined;\n }\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new PmCliError(\n `Config action \"${action}\" requires <key>`,\n EXIT_CODE.USAGE,\n );\n }\n return normalizeKey(value);\n}\n\n/** Narrows the `ConfigKey | undefined` carried into the get/set branches back to a concrete `ConfigKey`. By the time those branches run, `normalizeKeyForAction` has already thrown on a missing key and nested settings have returned earlier, so the `undefined` case is unreachable at runtime — the throw is a defensive type-narrowing guard only. */\nfunction assertConfigKeyDefined(\n key: ConfigKey | undefined,\n): asserts key is ConfigKey {\n /* c8 ignore next 3 -- defensive: get/set always carry a key (see normalizeKeyForAction). */\n if (!key) {\n throw new PmCliError(\"Config action requires <key>\", EXIT_CODE.USAGE);\n }\n}\n\nconst CONFIG_VALUE_READERS: Readonly<\n Record<ConfigKey, (settings: PmSettings) => ConfigValue>\n> = {\n definition_of_done: (settings) => [...settings.workflow.definition_of_done],\n item_format: (settings) => settings.item_format,\n history_missing_stream_policy: (settings) => settings.history.missing_stream,\n sprint_release_format_policy: (settings) =>\n settings.validation.sprint_release_format,\n parent_reference_policy: (settings) => settings.validation.parent_reference,\n metadata_validation_profile: (settings) =>\n settings.validation.metadata_profile,\n metadata_required_fields: (settings) => [\n ...settings.validation.metadata_required_fields,\n ],\n lifecycle_stale_blocker_reason_patterns: (settings) => [\n ...settings.validation.lifecycle_stale_blocker_reason_patterns,\n ],\n lifecycle_closure_like_blocked_reason_patterns: (settings) => [\n ...settings.validation.lifecycle_closure_like_blocked_reason_patterns,\n ],\n lifecycle_closure_like_resolution_patterns: (settings) => [\n ...settings.validation.lifecycle_closure_like_resolution_patterns,\n ],\n lifecycle_closure_like_actual_result_patterns: (settings) => [\n ...settings.validation.lifecycle_closure_like_actual_result_patterns,\n ],\n governance_preset: (settings) => settings.governance.preset,\n governance_ownership_enforcement: (settings) =>\n settings.governance.ownership_enforcement,\n governance_create_mode_default: (settings) =>\n settings.governance.create_mode_default,\n governance_close_validation_default: (settings) =>\n settings.governance.close_validation_default,\n governance_require_close_reason: (settings) =>\n settings.governance.require_close_reason ? \"enabled\" : \"disabled\",\n governance_create_default_type: (settings) =>\n settings.governance.create_default_type ?? \"\",\n governance_workflow_enforcement: (settings) =>\n settings.governance.workflow_enforcement ?? \"off\",\n governance_parent_reference_policy: (settings) =>\n settings.governance.parent_reference,\n governance_metadata_validation_profile: (settings) =>\n settings.governance.metadata_profile,\n governance_force_required_for_stale_lock: (settings) =>\n settings.governance.force_required_for_stale_lock ? \"enabled\" : \"disabled\",\n test_result_tracking: (settings) =>\n settings.testing.record_results_to_items ? \"enabled\" : \"disabled\",\n telemetry_tracking: (settings) =>\n settings.telemetry.enabled ? \"enabled\" : \"disabled\",\n context: (settings) => ({\n default_depth: settings.context.default_depth,\n activity_limit: settings.context.activity_limit,\n stale_threshold_days: settings.context.stale_threshold_days,\n sections: { ...settings.context.sections },\n }),\n};\n\nfunction readConfigValue(settings: PmSettings, key: ConfigKey): ConfigValue {\n return CONFIG_VALUE_READERS[key](settings);\n}\n\nfunction withWarnings(result: ConfigResult, warnings: string[]): ConfigResult {\n if (warnings.length === 0) {\n return result;\n }\n return {\n ...result,\n warnings,\n };\n}\n\nasync function resolveSettingsTarget(\n scope: ConfigScope,\n global: GlobalOptions,\n): Promise<{ pmRoot: string; settingsPath: string }> {\n const cwd = process.cwd();\n const pmRoot =\n scope === \"project\"\n ? resolvePmRoot(cwd, global.path)\n : resolveGlobalPmRoot(cwd);\n const settingsPath = getSettingsPath(pmRoot);\n if (scope === \"project\" && !(await pathExists(settingsPath))) {\n throw new PmCliError(\n `Tracker is not initialized at ${pmRoot}. Run pm init first.`,\n EXIT_CODE.NOT_FOUND,\n );\n }\n return { pmRoot, settingsPath };\n}\n\nfunction parseSectionToggle(raw: string | undefined): boolean | undefined {\n if (raw === undefined) return undefined;\n const normalized = raw.trim().toLowerCase();\n if (\n normalized === \"true\" ||\n normalized === \"enabled\" ||\n normalized === \"on\" ||\n normalized === \"1\"\n )\n return true;\n if (\n normalized === \"false\" ||\n normalized === \"disabled\" ||\n normalized === \"off\" ||\n normalized === \"0\"\n )\n return false;\n throw new PmCliError(\n `Context section toggle must be true|false|enabled|disabled, got \"${raw}\"`,\n EXIT_CODE.USAGE,\n );\n}\n\nasync function applyContextConfig(\n settings: PmSettings,\n options: ConfigCommandOptions,\n target: { pmRoot: string; settingsPath: string },\n scope: ConfigScope,\n warnings: string[],\n): Promise<ConfigResult> {\n let changed = false;\n const ctx = settings.context;\n\n if (options.defaultDepth !== undefined) {\n const normalized = options.defaultDepth.trim().toLowerCase();\n if (!CONTEXT_DEPTH_VALUES.includes(normalized as ContextDepth)) {\n throw new PmCliError(\n `Context --default-depth must be one of ${CONTEXT_DEPTH_VALUES.join(\"|\")}`,\n EXIT_CODE.USAGE,\n );\n }\n if (ctx.default_depth !== normalized) {\n ctx.default_depth = normalized as ContextDepth;\n changed = true;\n }\n }\n\n if (options.activityLimit !== undefined) {\n const parsed = parseInt(options.activityLimit.trim(), 10);\n if (isNaN(parsed) || parsed <= 0) {\n throw new PmCliError(\n \"Context --activity-limit must be a positive integer\",\n EXIT_CODE.USAGE,\n );\n }\n if (ctx.activity_limit !== parsed) {\n ctx.activity_limit = parsed;\n changed = true;\n }\n }\n\n if (options.staleThresholdDays !== undefined) {\n const parsed = parseInt(options.staleThresholdDays.trim(), 10);\n if (isNaN(parsed) || parsed <= 0) {\n throw new PmCliError(\n \"Context --stale-threshold-days must be a positive integer\",\n EXIT_CODE.USAGE,\n );\n }\n if (ctx.stale_threshold_days !== parsed) {\n ctx.stale_threshold_days = parsed;\n changed = true;\n }\n }\n\n const sectionToggles: [string, string | undefined][] = [\n [\"hierarchy\", options.sectionHierarchy],\n [\"activity\", options.sectionActivity],\n [\"progress\", options.sectionProgress],\n [\"blockers\", options.sectionBlockers],\n [\"files\", options.sectionFiles],\n [\"workload\", options.sectionWorkload],\n [\"staleness\", options.sectionStaleness],\n [\"tests\", options.sectionTests],\n ];\n\n for (const [sectionName, rawValue] of sectionToggles) {\n const toggle = parseSectionToggle(rawValue);\n if (toggle !== undefined) {\n const key = sectionName as keyof typeof ctx.sections;\n if (ctx.sections[key] !== toggle) {\n ctx.sections[key] = toggle;\n changed = true;\n }\n }\n }\n\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:context\");\n }\n\n return withWarnings(\n {\n scope,\n key: \"context\",\n context_settings: {\n default_depth: ctx.default_depth,\n activity_limit: ctx.activity_limit,\n stale_threshold_days: ctx.stale_threshold_days,\n sections: { ...ctx.sections },\n },\n settings_path: target.settingsPath,\n changed,\n },\n warnings,\n );\n}\n\nfunction applyNestedSettingPositionalValue(\n keyValue: string,\n valueValue: string,\n options: ConfigCommandOptions,\n): ConfigCommandOptions {\n if (options.value !== undefined && options.value !== valueValue) {\n throw new PmCliError(\n `Config set ${keyValue} received both positional value \"${valueValue}\" and --value \"${options.value}\". Pass only one.`,\n EXIT_CODE.USAGE,\n );\n }\n return { ...options, value: valueValue };\n}\n\n/** Route an intuitive `pm config set <key> <value>` positional value onto the typed flag it belongs to (--format/--policy/--criterion), applying enabled/disabled synonyms. Returns the (possibly augmented) options. The typed-flag forms keep working exactly as before: a positional value is only injected when its flag was not already supplied, and a conflicting explicit flag is a clear error. */\nfunction applyPositionalValue(\n action: ConfigAction,\n keyValue: string | undefined,\n normalizedKey: ConfigKey | undefined,\n nestedSetting: NestedSettingDescriptor | undefined,\n valueValue: string | undefined,\n options: ConfigCommandOptions,\n): ConfigCommandOptions {\n if (valueValue === undefined) {\n return options;\n }\n if (action !== \"set\") {\n throw new PmCliError(\n `Config action \"${action}\" does not accept a positional value. Only \"set\" takes <value>.`,\n EXIT_CODE.USAGE,\n );\n }\n if (typeof keyValue !== \"string\" || keyValue.trim().length === 0) {\n throw new PmCliError(\n 'Config action \"set\" requires <key> before a positional <value>.',\n EXIT_CODE.USAGE,\n );\n }\n\n if (nestedSetting) {\n return applyNestedSettingPositionalValue(keyValue, valueValue, options);\n }\n\n assertConfigKeyDefined(normalizedKey);\n const routed = resolveConfigPositionalValue(normalizedKey, valueValue);\n if (!routed.routable) {\n throw new PmCliError(routed.reason, EXIT_CODE.USAGE);\n }\n\n if (routed.flag === \"criterion\") {\n if (options.criterion !== undefined && options.criterion.length > 0) {\n throw new PmCliError(\n `Config set ${keyValue} received both positional value \"${valueValue}\" and --criterion. Pass criteria via --criterion only when supplying more than one value.`,\n EXIT_CODE.USAGE,\n );\n }\n return { ...options, criterion: routed.values };\n }\n\n if (routed.flag === \"format\") {\n /* c8 ignore start -- only `toon` is valid, so normalized explicit/positional formats cannot conflict. */\n if (\n options.format !== undefined &&\n normalizeItemFormat(options.format) !== normalizeItemFormat(routed.value)\n ) {\n throw new PmCliError(\n `Config set ${keyValue} received both positional value \"${valueValue}\" and --format \"${options.format}\". Pass only one.`,\n EXIT_CODE.USAGE,\n );\n }\n /* c8 ignore stop */\n return { ...options, format: routed.value };\n }\n\n // policy flag (--policy)\n if (\n options.policy !== undefined &&\n normalizePolicyForConflict(normalizedKey, options.policy) !==\n normalizePolicyForConflict(normalizedKey, routed.value)\n ) {\n throw new PmCliError(\n `Config set ${keyValue} received both positional value \"${valueValue}\" and --policy \"${options.policy}\". Pass only one.`,\n EXIT_CODE.USAGE,\n );\n }\n return { ...options, policy: routed.value };\n}\n\ninterface ConfigExecutionContext {\n scope: ConfigScope;\n target: { pmRoot: string; settingsPath: string };\n settings: PmSettings;\n metadata: { has_explicit_item_format: boolean };\n warnings: string[];\n}\n\nfunction buildConfigListResult(context: ConfigExecutionContext): ConfigResult {\n const keys = (Object.keys(CONFIG_KEY_ALIASES) as ConfigKey[]).map(\n (candidate) => ({\n key: candidate,\n aliases: CONFIG_KEY_ALIASES[candidate],\n value_kind:\n candidate === \"context\"\n ? (\"object\" as const)\n : isCriteriaConfigKey(candidate)\n ? (\"string_array\" as const)\n : (\"enum\" as const),\n set_flags:\n candidate === \"context\"\n ? [\n \"--default-depth\",\n \"--activity-limit\",\n \"--stale-threshold-days\",\n \"--section-<name>\",\n ]\n : isCriteriaConfigKey(candidate)\n ? [\"--criterion\", \"--clear-criteria\"]\n : candidate === \"item_format\"\n ? [\"--format\"]\n : [\"--policy\"],\n summary: CONFIG_KEY_SUMMARIES[candidate],\n value: readConfigValue(context.settings, candidate),\n }),\n );\n const nestedSettings: NestedSettingResultValue[] =\n NESTED_SETTING_DESCRIPTORS.map((descriptor) => ({\n key: descriptor.key,\n path: descriptor.path,\n kind: descriptor.kind,\n value: readNestedSettingValue(context.settings, descriptor),\n }));\n return withWarnings(\n {\n scope: context.scope,\n keys,\n nested_settings: nestedSettings,\n count: keys.length,\n settings_path: context.target.settingsPath,\n changed: false,\n },\n context.warnings,\n );\n}\n\nfunction buildConfigExportResult(\n context: ConfigExecutionContext,\n): ConfigResult {\n const values = Object.fromEntries(\n (Object.keys(CONFIG_KEY_ALIASES) as ConfigKey[]).map((key) => [\n key,\n readConfigValue(context.settings, key),\n ]),\n ) as Record<ConfigKey, ConfigValue>;\n return withWarnings(\n {\n scope: context.scope,\n values,\n settings_path: context.target.settingsPath,\n changed: false,\n },\n context.warnings,\n );\n}\n\nfunction buildConfigGetResult(\n context: ConfigExecutionContext,\n key: ConfigKey,\n): ConfigResult {\n const value = readConfigValue(context.settings, key);\n const base = {\n scope: context.scope,\n key,\n settings_path: context.target.settingsPath,\n changed: false,\n };\n if (key === \"item_format\") {\n return withWarnings(\n {\n ...base,\n format: context.settings.item_format,\n has_explicit_item_format: context.metadata.has_explicit_item_format,\n },\n context.warnings,\n );\n }\n if (key === \"context\") {\n return withWarnings(\n { ...base, context_settings: value as ContextConfigValue },\n context.warnings,\n );\n }\n if (Array.isArray(value)) {\n return withWarnings({ ...base, criteria: value }, context.warnings);\n }\n return withWarnings(\n { ...base, policy: value as ConfigResult[\"policy\"] },\n context.warnings,\n );\n}\n\nasync function buildNestedSettingResult(\n context: ConfigExecutionContext,\n action: ConfigAction,\n nestedSetting: NestedSettingDescriptor,\n options: ConfigCommandOptions,\n): Promise<ConfigResult> {\n if (action === \"get\") {\n const currentValue = readNestedSettingValue(\n context.settings,\n nestedSetting,\n );\n return withWarnings(\n {\n scope: context.scope,\n key: nestedSetting.key,\n nested_setting: {\n key: nestedSetting.key,\n path: nestedSetting.path,\n kind: nestedSetting.kind,\n value: currentValue,\n },\n settings_path: context.target.settingsPath,\n changed: false,\n },\n context.warnings,\n );\n }\n\n const rawValue = options.value;\n if (typeof rawValue !== \"string\") {\n throw new PmCliError(\n `Config set ${nestedSetting.key} requires a value. Pass it positionally (\\`pm config ${context.scope} set ${nestedSetting.key} <value>\\`) or via --value.`,\n EXIT_CODE.USAGE,\n );\n }\n const parsed = parseNestedSettingValue(nestedSetting, rawValue);\n if (!parsed.ok) {\n throw new PmCliError(parsed.error.message, EXIT_CODE.USAGE);\n }\n const changed = writeNestedSettingValue(\n context.settings as unknown as Record<string, unknown>,\n nestedSetting,\n parsed.parsed.value,\n );\n if (changed) {\n await writeSettings(\n context.target.pmRoot,\n context.settings,\n `config:set:${nestedSetting.path}`,\n );\n }\n return withWarnings(\n {\n scope: context.scope,\n key: nestedSetting.key,\n nested_setting: {\n key: nestedSetting.key,\n path: nestedSetting.path,\n kind: nestedSetting.kind,\n value: parsed.parsed.value,\n },\n settings_path: context.target.settingsPath,\n changed,\n },\n context.warnings,\n );\n}\n\nasync function writeConfigSettingsIfChanged(\n context: ConfigExecutionContext,\n changed: boolean,\n reason: string,\n): Promise<void> {\n if (changed) {\n await writeSettings(context.target.pmRoot, context.settings, reason);\n }\n}\n\nfunction hasGovernanceValidationMirrorChange<\n T extends ParentReferencePolicy | ValidateMetadataProfile,\n>(governanceValue: T, validationValue: T, nextPolicy: T): boolean {\n return governanceValue !== nextPolicy || validationValue !== nextPolicy;\n}\n\nfunction buildPolicyResult(\n context: ConfigExecutionContext,\n key: ConfigKey,\n policy: ConfigResult[\"policy\"],\n changed: boolean,\n): ConfigResult {\n return withWarnings(\n {\n scope: context.scope,\n key,\n policy,\n settings_path: context.target.settingsPath,\n changed,\n },\n context.warnings,\n );\n}\n\nfunction buildCriteriaResult(\n context: ConfigExecutionContext,\n key: ConfigKey,\n criteria: string[],\n changed: boolean,\n): ConfigResult {\n return withWarnings(\n {\n scope: context.scope,\n key,\n criteria,\n settings_path: context.target.settingsPath,\n changed,\n },\n context.warnings,\n );\n}\n\nasync function setItemFormatConfig(\n context: ConfigExecutionContext,\n options: ConfigCommandOptions,\n): Promise<ConfigResult> {\n const nextFormat = normalizeItemFormat(options.format);\n const changed =\n context.settings.item_format !== nextFormat ||\n !context.metadata.has_explicit_item_format;\n let migration: ConfigResult[\"migration\"] = undefined;\n if (changed) {\n const typeRegistry = resolveItemTypeRegistry(\n context.settings,\n getActiveExtensionRegistrations(),\n );\n const migrated = await migrateItemFilesToFormat(\n context.target.pmRoot,\n nextFormat,\n \"config:set:item_format:migrate\",\n typeRegistry.type_to_folder,\n context.settings.schema,\n );\n migration = {\n target_format: migrated.target_format,\n scanned: migrated.scanned,\n migrated: migrated.migrated,\n removed: migrated.removed,\n warnings: migrated.warnings,\n };\n context.settings.item_format = nextFormat;\n await writeSettings(\n context.target.pmRoot,\n context.settings,\n \"config:set:item_format\",\n );\n }\n return withWarnings(\n {\n scope: context.scope,\n key: \"item_format\",\n format: context.settings.item_format,\n has_explicit_item_format: true,\n migration,\n settings_path: context.target.settingsPath,\n changed,\n },\n context.warnings,\n );\n}\n\nasync function setValidationConfig(\n context: ConfigExecutionContext,\n key: ValidationConfigKey,\n options: ConfigCommandOptions,\n): Promise<ConfigResult> {\n if (key === \"history_missing_stream_policy\") {\n const nextPolicy = normalizeHistoryMissingStreamPolicy(options.policy);\n const changed = context.settings.history.missing_stream !== nextPolicy;\n context.settings.history.missing_stream = nextPolicy;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:history_missing_stream_policy\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.history.missing_stream,\n changed,\n );\n }\n if (key === \"sprint_release_format_policy\") {\n const nextPolicy = normalizeSprintReleaseFormatPolicy(options.policy);\n const changed =\n context.settings.validation.sprint_release_format !== nextPolicy;\n context.settings.validation.sprint_release_format = nextPolicy;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:sprint_release_format_policy\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.validation.sprint_release_format,\n changed,\n );\n }\n if (key === \"parent_reference_policy\") {\n const nextPolicy = normalizeParentReferencePolicy(options.policy);\n const changed =\n context.settings.validation.parent_reference !== nextPolicy ||\n context.settings.governance.preset !== \"custom\" ||\n context.settings.governance.parent_reference !== nextPolicy;\n context.settings.validation.parent_reference = nextPolicy;\n context.settings.governance.preset = \"custom\";\n context.settings.governance.parent_reference = nextPolicy;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:parent_reference_policy\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.validation.parent_reference,\n changed,\n );\n }\n const nextPolicy = normalizeValidateMetadataProfile(options.policy);\n const changed =\n context.settings.validation.metadata_profile !== nextPolicy ||\n context.settings.governance.preset !== \"custom\" ||\n context.settings.governance.metadata_profile !== nextPolicy;\n context.settings.validation.metadata_profile = nextPolicy;\n context.settings.governance.preset = \"custom\";\n context.settings.governance.metadata_profile = nextPolicy;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:metadata_validation_profile\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.validation.metadata_profile,\n changed,\n );\n}\n\nasync function setCriteriaConfig(\n context: ConfigExecutionContext,\n key: CriteriaConfigKey,\n options: ConfigCommandOptions,\n): Promise<ConfigResult> {\n if (key === \"metadata_required_fields\") {\n const nextCriteria = normalizeMetadataRequiredFields(\n options.criterion,\n options.clearCriteria,\n );\n const changed =\n nextCriteria.length !==\n context.settings.validation.metadata_required_fields.length ||\n nextCriteria.some(\n (value, index) =>\n value !== context.settings.validation.metadata_required_fields[index],\n );\n context.settings.validation.metadata_required_fields = nextCriteria;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:metadata_required_fields\",\n );\n return buildCriteriaResult(\n context,\n key,\n [...context.settings.validation.metadata_required_fields],\n changed,\n );\n }\n\n const lifecycleTargets: Record<LifecyclePatternConfigKey, string[]> = {\n lifecycle_stale_blocker_reason_patterns:\n context.settings.validation.lifecycle_stale_blocker_reason_patterns,\n lifecycle_closure_like_blocked_reason_patterns:\n context.settings.validation\n .lifecycle_closure_like_blocked_reason_patterns,\n lifecycle_closure_like_resolution_patterns:\n context.settings.validation.lifecycle_closure_like_resolution_patterns,\n lifecycle_closure_like_actual_result_patterns:\n context.settings.validation.lifecycle_closure_like_actual_result_patterns,\n };\n const currentCriteria = lifecycleTargets[key];\n\n const nextCriteria = normalizeLifecyclePatternCriteria(\n key,\n options.criterion,\n options.clearCriteria,\n );\n const changed =\n nextCriteria.length !== currentCriteria.length ||\n nextCriteria.some((value, index) => value !== currentCriteria[index]);\n currentCriteria.splice(0, currentCriteria.length, ...nextCriteria);\n await writeConfigSettingsIfChanged(context, changed, `config:set:${key}`);\n return buildCriteriaResult(context, key, [...currentCriteria], changed);\n}\n\nasync function setGovernancePresetOrTypeConfig(\n context: ConfigExecutionContext,\n key: GovernancePresetOrTypeConfigKey,\n options: ConfigCommandOptions,\n): Promise<ConfigResult> {\n if (key === \"governance_preset\") {\n const nextPolicy = normalizeGovernancePreset(options.policy);\n const changed = context.settings.governance.preset !== nextPolicy;\n context.settings.governance.preset = nextPolicy;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:governance_preset\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.governance.preset,\n changed,\n );\n }\n\n const policyProvided = typeof options.policy === \"string\";\n const rawType = policyProvided ? options.policy!.trim() : \"\";\n if (policyProvided && rawType.length === 0) {\n const changed =\n context.settings.governance.create_default_type !== undefined;\n delete context.settings.governance.create_default_type;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:governance_create_default_type\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.governance.create_default_type ?? \"\",\n changed,\n );\n }\n if (rawType.length === 0) {\n throw new PmCliError(\n 'Config set governance-create-default-type requires an item type value (or an empty value \"\" to clear it)',\n EXIT_CODE.USAGE,\n );\n }\n const typeRegistry = resolveItemTypeRegistry(\n context.settings,\n getActiveExtensionRegistrations(),\n );\n const resolvedType = resolveTypeName(rawType, typeRegistry);\n if (!resolvedType) {\n throw new PmCliError(\n buildInvalidTypeError(\n rawType,\n typeRegistry.types,\n resolveItemTypesFilePath(\n context.target.pmRoot,\n context.settings.schema,\n ),\n ),\n EXIT_CODE.USAGE,\n );\n }\n const changed =\n context.settings.governance.create_default_type !== resolvedType;\n context.settings.governance.create_default_type = resolvedType;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:governance_create_default_type\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.governance.create_default_type,\n changed,\n );\n}\n\nasync function setGovernancePolicyConfig(\n context: ConfigExecutionContext,\n key: GovernancePolicyConfigKey,\n options: ConfigCommandOptions,\n): Promise<ConfigResult> {\n if (key === \"governance_ownership_enforcement\") {\n const nextPolicy = normalizeGovernanceOwnershipEnforcement(options.policy);\n const changed =\n context.settings.governance.preset !== \"custom\" ||\n context.settings.governance.ownership_enforcement !== nextPolicy;\n context.settings.governance.preset = \"custom\";\n context.settings.governance.ownership_enforcement = nextPolicy;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:governance_ownership_enforcement\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.governance.ownership_enforcement,\n changed,\n );\n }\n if (key === \"governance_create_mode_default\") {\n const nextPolicy = normalizeGovernanceCreateModeDefault(options.policy);\n const changed =\n context.settings.governance.preset !== \"custom\" ||\n context.settings.governance.create_mode_default !== nextPolicy;\n context.settings.governance.preset = \"custom\";\n context.settings.governance.create_mode_default = nextPolicy;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:governance_create_mode_default\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.governance.create_mode_default,\n changed,\n );\n }\n const nextPolicy = normalizeGovernanceCloseValidationDefault(options.policy);\n const changed =\n context.settings.governance.preset !== \"custom\" ||\n context.settings.governance.close_validation_default !== nextPolicy;\n context.settings.governance.preset = \"custom\";\n context.settings.governance.close_validation_default = nextPolicy;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:governance_close_validation_default\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.governance.close_validation_default,\n changed,\n );\n}\n\nasync function setGovernanceValidationConfig(\n context: ConfigExecutionContext,\n key: GovernanceValidationConfigKey,\n options: ConfigCommandOptions,\n): Promise<ConfigResult> {\n if (key === \"governance_parent_reference_policy\") {\n const nextPolicy = normalizeParentReferencePolicy(options.policy);\n const changed =\n context.settings.governance.preset !== \"custom\" ||\n hasGovernanceValidationMirrorChange(\n context.settings.governance.parent_reference,\n context.settings.validation.parent_reference,\n nextPolicy,\n );\n context.settings.governance.preset = \"custom\";\n context.settings.governance.parent_reference = nextPolicy;\n context.settings.validation.parent_reference = nextPolicy;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:governance_parent_reference_policy\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.governance.parent_reference,\n changed,\n );\n }\n if (key === \"governance_metadata_validation_profile\") {\n const nextPolicy = normalizeValidateMetadataProfile(options.policy);\n const changed =\n context.settings.governance.preset !== \"custom\" ||\n hasGovernanceValidationMirrorChange(\n context.settings.governance.metadata_profile,\n context.settings.validation.metadata_profile,\n nextPolicy,\n );\n context.settings.governance.preset = \"custom\";\n context.settings.governance.metadata_profile = nextPolicy;\n context.settings.validation.metadata_profile = nextPolicy;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:governance_metadata_validation_profile\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.governance.metadata_profile,\n changed,\n );\n }\n const nextPolicy = normalizeGovernanceWorkflowEnforcement(options.policy);\n const changed =\n (context.settings.governance.workflow_enforcement ?? \"off\") !== nextPolicy;\n context.settings.governance.workflow_enforcement = nextPolicy;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:governance_workflow_enforcement\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.governance.workflow_enforcement,\n changed,\n );\n}\n\nasync function setGovernanceBooleanConfig(\n context: ConfigExecutionContext,\n key: ConfigKey,\n options: ConfigCommandOptions,\n): Promise<ConfigResult> {\n if (key === \"governance_require_close_reason\") {\n const nextPolicy = normalizeGovernanceRequireCloseReasonPolicy(\n options.policy,\n );\n const nextEnabled = nextPolicy === \"enabled\";\n const changed =\n context.settings.governance.require_close_reason !== nextEnabled;\n context.settings.governance.require_close_reason = nextEnabled;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:governance_require_close_reason\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.governance.require_close_reason ? \"enabled\" : \"disabled\",\n changed,\n );\n }\n const nextPolicy = normalizeGovernanceForceRequiredForStaleLockPolicy(\n options.policy,\n );\n const nextEnabled = nextPolicy === \"enabled\";\n const changed =\n context.settings.governance.preset !== \"custom\" ||\n context.settings.governance.force_required_for_stale_lock !== nextEnabled;\n context.settings.governance.preset = \"custom\";\n context.settings.governance.force_required_for_stale_lock = nextEnabled;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:governance_force_required_for_stale_lock\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.governance.force_required_for_stale_lock\n ? \"enabled\"\n : \"disabled\",\n changed,\n );\n}\n\nasync function setTrackingConfig(\n context: ConfigExecutionContext,\n key: ConfigKey,\n options: ConfigCommandOptions,\n): Promise<ConfigResult> {\n if (key === \"test_result_tracking\") {\n const nextPolicy = normalizeTestResultTrackingPolicy(options.policy);\n const nextEnabled = nextPolicy === \"enabled\";\n const changed =\n context.settings.testing.record_results_to_items !== nextEnabled;\n context.settings.testing.record_results_to_items = nextEnabled;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:test_result_tracking\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.testing.record_results_to_items ? \"enabled\" : \"disabled\",\n changed,\n );\n }\n const nextPolicy = normalizeTelemetryTrackingPolicy(options.policy);\n const nextEnabled = nextPolicy === \"enabled\";\n const changed =\n context.settings.telemetry.enabled !== nextEnabled ||\n !context.settings.telemetry.first_run_prompt_completed;\n context.settings.telemetry.enabled = nextEnabled;\n context.settings.telemetry.first_run_prompt_completed = true;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:telemetry_tracking\",\n );\n return buildPolicyResult(\n context,\n key,\n context.settings.telemetry.enabled ? \"enabled\" : \"disabled\",\n changed,\n );\n}\n\nasync function setDefinitionOfDoneConfig(\n context: ConfigExecutionContext,\n key: ConfigKey,\n options: ConfigCommandOptions,\n): Promise<ConfigResult> {\n const nextCriteria = normalizeCriteria(\n options.criterion,\n options.clearCriteria,\n );\n const changed =\n nextCriteria.length !==\n context.settings.workflow.definition_of_done.length ||\n nextCriteria.some(\n (value, index) =>\n value !== context.settings.workflow.definition_of_done[index],\n );\n context.settings.workflow.definition_of_done = nextCriteria;\n await writeConfigSettingsIfChanged(\n context,\n changed,\n \"config:set:definition_of_done\",\n );\n return buildCriteriaResult(\n context,\n key,\n [...context.settings.workflow.definition_of_done],\n changed,\n );\n}\n\nasync function setConfigValue(\n context: ConfigExecutionContext,\n key: ConfigKey,\n options: ConfigCommandOptions,\n): Promise<ConfigResult> {\n if (options.clearCriteria === true && !isCriteriaConfigKey(key)) {\n throw new PmCliError(\n \"--clear-criteria is only supported with config set criteria-list keys\",\n EXIT_CODE.USAGE,\n );\n }\n if (key === \"item_format\") {\n return setItemFormatConfig(context, options);\n }\n if (key === \"context\") {\n return applyContextConfig(\n context.settings,\n options,\n context.target,\n context.scope,\n context.warnings,\n );\n }\n if (key === \"definition_of_done\") {\n return setDefinitionOfDoneConfig(context, key, options);\n }\n if (isCriteriaValueConfigKey(key)) {\n return setCriteriaConfig(context, key, options);\n }\n if (TRACKING_CONFIG_KEYS.has(key)) {\n return setTrackingConfig(context, key, options);\n }\n if (GOVERNANCE_BOOLEAN_CONFIG_KEYS.has(key)) {\n return setGovernanceBooleanConfig(context, key, options);\n }\n if (isGovernancePolicyConfigKey(key)) {\n return setGovernancePolicyConfig(context, key, options);\n }\n if (isGovernanceValidationConfigKey(key)) {\n return setGovernanceValidationConfig(context, key, options);\n }\n if (isGovernancePresetOrTypeConfigKey(key)) {\n return setGovernancePresetOrTypeConfig(context, key, options);\n }\n return setValidationConfig(context, key as ValidationConfigKey, options);\n}\n\n/** Implements run config for the public runtime surface of this module. */\nexport async function runConfig(\n scopeValue: string,\n actionValue: string,\n keyValue: string | undefined,\n options: ConfigCommandOptions,\n global: GlobalOptions,\n valueValue?: string,\n): Promise<ConfigResult> {\n const scope = normalizeScope(scopeValue);\n const action = normalizeAction(actionValue);\n const nestedSetting =\n action === \"get\" || action === \"set\"\n ? resolveNestedSettingDescriptor(keyValue)\n : undefined;\n const key = nestedSetting\n ? undefined\n : normalizeKeyForAction(action, keyValue);\n const routedOptions = applyPositionalValue(\n action,\n keyValue,\n key,\n nestedSetting,\n valueValue,\n options,\n );\n const target = await resolveSettingsTarget(scope, global);\n const {\n settings,\n metadata,\n warnings: settingsReadWarnings,\n } = await readSettingsWithMetadata(target.pmRoot);\n const context: ConfigExecutionContext = {\n scope,\n target,\n settings,\n metadata,\n warnings: normalizeWarnings(settingsReadWarnings),\n };\n\n if (nestedSetting) {\n return buildNestedSettingResult(\n context,\n action,\n nestedSetting,\n routedOptions,\n );\n }\n if (action === \"list\") {\n return buildConfigListResult(context);\n }\n if (action === \"export\") {\n return buildConfigExportResult(context);\n }\n\n assertConfigKeyDefined(key);\n return action === \"get\"\n ? buildConfigGetResult(context, key)\n : setConfigValue(context, key, routedOptions);\n}\n\n/** Public contract for test only config command, shared by SDK and presentation-layer consumers. */\nexport const _testOnlyConfigCommand = {\n hasGovernanceValidationMirrorChange,\n applyPositionalValue,\n normalizeAction,\n normalizeCriteria,\n normalizeGovernanceCloseValidationDefault,\n normalizeGovernanceCreateModeDefault,\n normalizeGovernanceForceRequiredForStaleLockPolicy,\n normalizeGovernanceOwnershipEnforcement,\n normalizeGovernancePreset,\n normalizeGovernanceRequireCloseReasonPolicy,\n normalizeGovernanceWorkflowEnforcement,\n normalizeHistoryMissingStreamPolicy,\n normalizeItemFormat,\n normalizeKey,\n normalizeMetadataRequiredFields,\n normalizePolicyForConflict,\n normalizeScope,\n normalizeTelemetryTrackingPolicy,\n normalizeTestResultTrackingPolicy,\n normalizeValidateMetadataProfile,\n normalizeWarnings,\n};\n","/**\n * @module cli/commands/upgrade\n *\n * Implements the pm upgrade command surface and its agent-facing runtime behavior.\n */\nimport { execFile } from \"node:child_process\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport {\n readManagedExtensionState,\n runExtension,\n type ExtensionScope,\n type ManagedExtensionRecord,\n type ManagedExtensionSource,\n} from \"./extension.js\";\nimport { resolveExtensionRoots } from \"../../core/extensions/loader.js\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { resolvePmRoot } from \"../../core/store/paths.js\";\nimport { resolvePmCliVersion } from \"../../core/packages/root.js\";\n\nconst execFileAsync = promisify(execFile);\nconst DEFAULT_CLI_PACKAGE = \"@unbrained/pm-cli\";\nconst DEFAULT_TAG = \"latest\";\n\n/** Documents the upgrade command options payload exchanged by command, SDK, and package integrations. */\nexport interface UpgradeCommandOptions {\n /** Value that configures or reports dry run for this contract. */\n dryRun?: boolean;\n /** Value that configures or reports cli only for this contract. */\n cliOnly?: boolean;\n /** Value that configures or reports packages only for this contract. */\n packagesOnly?: boolean;\n /** Value that configures or reports project for this contract. */\n project?: boolean;\n /** Value that configures or reports local for this contract. */\n local?: boolean;\n /** Value that configures or reports global for this contract. */\n global?: boolean;\n /** Value that configures or reports repair for this contract. */\n repair?: boolean;\n /** Value that configures or reports tag for this contract. */\n tag?: string;\n /** Value that configures or reports package name for this contract. */\n packageName?: string;\n /** Value that configures or reports command runner for this contract. */\n commandRunner?: UpgradeCommandRunner;\n}\n\n/** Public contract for test only, shared by SDK and presentation-layer consumers. */\nexport const _testOnly = {\n defaultCommandRunner,\n isLocalNpmSpec,\n normalizeTarget,\n packageRecordMatchesTarget,\n resolveCliPackage,\n resolvePackageInstallSource,\n resolveRunnablePackageSource,\n resolveScope,\n resolveTag,\n packageCommandFor,\n summarize,\n};\n\n/** Documents the upgrade command runner result payload exchanged by command, SDK, and package integrations. */\nexport interface UpgradeCommandRunnerResult {\n /** Value that configures or reports stdout for this contract. */\n stdout: string;\n /** Value that configures or reports stderr for this contract. */\n stderr: string;\n}\n\n/** Restricts upgrade command runner values accepted by command, SDK, and storage contracts. */\nexport type UpgradeCommandRunner = (\n command: string,\n args: string[],\n options?: { cwd?: string },\n) => Promise<UpgradeCommandRunnerResult>;\n\n/** Documents the upgrade cli result payload exchanged by command, SDK, and package integrations. */\nexport interface UpgradeCliResult {\n /** Value that configures or reports requested for this contract. */\n requested: boolean;\n /** Lifecycle state reported for status. */\n status: \"planned\" | \"updated\" | \"failed\" | \"skipped\";\n /** Value that configures or reports package for this contract. */\n package: string;\n /** Value that configures or reports target for this contract. */\n target: string;\n /** Value that configures or reports command for this contract. */\n command: string[];\n /** Value that configures or reports before version for this contract. */\n before_version?: string;\n /** Value that configures or reports after version for this contract. */\n after_version?: string;\n /** Value that configures or reports repair for this contract. */\n repair: boolean;\n /** Value that configures or reports reason for this contract. */\n reason?: string;\n /** Value that configures or reports error for this contract. */\n error?: string;\n}\n\n/** Documents the upgrade package result payload exchanged by command, SDK, and package integrations. */\nexport interface UpgradePackageResult {\n /** Value that configures or reports name for this contract. */\n name: string;\n /** Value that configures or reports directory for this contract. */\n directory: string;\n /** Value that configures or reports scope for this contract. */\n scope: ExtensionScope;\n /** Value that configures or reports source for this contract. */\n source: ManagedExtensionSource;\n /** Lifecycle state reported for status. */\n status: \"planned\" | \"updated\" | \"failed\" | \"skipped\";\n /** Value that configures or reports command for this contract. */\n command: string[];\n /** Value that configures or reports previous version for this contract. */\n previous_version: string;\n /** Value that configures or reports installed version for this contract. */\n installed_version?: string;\n /** Value that configures or reports reason for this contract. */\n reason?: string;\n /** Value that configures or reports error for this contract. */\n error?: string;\n}\n\n/** Documents the upgrade result payload exchanged by command, SDK, and package integrations. */\nexport interface UpgradeResult {\n /** Whether the operation completed without a blocking failure. */\n ok: boolean;\n /** Value that configures or reports action for this contract. */\n action: \"upgrade\";\n /** Value that configures or reports dry run for this contract. */\n dry_run: boolean;\n /** Value that configures or reports scope for this contract. */\n scope: ExtensionScope;\n /** Value that configures or reports target for this contract. */\n target?: string;\n /** Value that configures or reports cli for this contract. */\n cli: UpgradeCliResult;\n /** Value that configures or reports packages for this contract. */\n packages: UpgradePackageResult[];\n /** Value that configures or reports summary for this contract. */\n summary: {\n requested_cli: boolean;\n requested_packages: boolean;\n planned: number;\n updated: number;\n skipped: number;\n failed: number;\n };\n}\n\nfunction resolveScope(options: UpgradeCommandOptions): ExtensionScope {\n const projectLike = options.project === true || options.local === true;\n const global = options.global === true;\n if (projectLike && global) {\n throw new PmCliError(\n 'Options \"--project/--local\" and \"--global\" are mutually exclusive.',\n EXIT_CODE.USAGE,\n );\n }\n return global ? \"global\" : \"project\";\n}\n\nfunction normalizeTarget(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction packageRecordMatchesTarget(\n record: ManagedExtensionRecord,\n target: string,\n): boolean {\n const normalizedTarget = normalizeTarget(target);\n const values = [\n record.name,\n record.directory,\n record.source.input,\n record.source.location,\n record.source.package,\n record.source.repository,\n record.source.owner && record.source.repo\n ? `${record.source.owner}/${record.source.repo}`\n : undefined,\n ];\n return values.some(\n (value) =>\n typeof value === \"string\" && normalizeTarget(value) === normalizedTarget,\n );\n}\n\nfunction resolveRoots(\n scope: ExtensionScope,\n global: GlobalOptions,\n): {\n selected_root: string;\n} {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n const roots = resolveExtensionRoots(pmRoot, process.cwd());\n return {\n selected_root: scope === \"global\" ? roots.global : roots.project,\n };\n}\n\nasync function defaultCommandRunner(\n command: string,\n args: string[],\n options?: { cwd?: string },\n): Promise<UpgradeCommandRunnerResult> {\n try {\n const result = await execFileAsync(command, args, {\n cwd: options?.cwd,\n encoding: \"utf8\",\n });\n return {\n stdout: result.stdout,\n stderr: result.stderr,\n };\n } catch (error: unknown) {\n const stderr =\n typeof error === \"object\" && error !== null && \"stderr\" in error\n ? String((error as { stderr?: unknown }).stderr ?? \"\")\n : \"\";\n const message =\n stderr.trim().length > 0\n ? stderr.trim()\n : error instanceof Error\n ? error.message\n : String(error);\n throw new PmCliError(\n `Command failed: ${command} ${args.join(\" \")}\\n${message}`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n}\n\nasync function readCurrentVersion(): Promise<string | undefined> {\n return resolvePmCliVersion(import.meta.url, [\"../../..\"]);\n}\n\nfunction resolveTag(options: UpgradeCommandOptions): string {\n return typeof options.tag === \"string\" && options.tag.trim().length > 0\n ? options.tag.trim()\n : DEFAULT_TAG;\n}\n\nfunction resolveCliPackage(options: UpgradeCommandOptions): string {\n return typeof options.packageName === \"string\" &&\n options.packageName.trim().length > 0\n ? options.packageName.trim()\n : DEFAULT_CLI_PACKAGE;\n}\n\nasync function upgradeCli(\n options: UpgradeCommandOptions,\n dryRun: boolean,\n): Promise<UpgradeCliResult> {\n const runner = options.commandRunner ?? defaultCommandRunner;\n const packageName = resolveCliPackage(options);\n const tag = resolveTag(options);\n const target = `${packageName}@${tag}`;\n const command = [\"npm\", \"install\", \"-g\", target];\n if (options.repair === true) {\n command.push(\"--force\");\n }\n const beforeVersion = await readCurrentVersion();\n const planned: UpgradeCliResult = {\n requested: true,\n status: \"planned\",\n package: packageName,\n target,\n command,\n before_version: beforeVersion,\n repair: options.repair === true,\n };\n if (dryRun) {\n return planned;\n }\n try {\n await runner(command[0]!, command.slice(1));\n const verified = await runner(\"pm\", [\"--version\"]);\n return {\n ...planned,\n status: \"updated\",\n after_version: verified.stdout.trim() || undefined,\n };\n } catch (error: unknown) {\n return {\n ...planned,\n status: \"failed\",\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\nfunction isLocalNpmSpec(spec: string): boolean {\n return (\n path.isAbsolute(spec) ||\n spec.startsWith(\".\") ||\n spec.startsWith(\"..\") ||\n spec.startsWith(\"file:\")\n );\n}\n\nfunction resolvePackageInstallSource(\n source: ManagedExtensionSource,\n tag: string,\n): string {\n if (source.kind === \"npm\") {\n const rawSpec = source.input.startsWith(\"npm:\")\n ? source.input.slice(\"npm:\".length).trim()\n : source.input.trim();\n if (\n !isLocalNpmSpec(rawSpec) &&\n source.package &&\n source.package.trim().length > 0\n ) {\n return `npm:${source.package.trim()}@${tag}`;\n }\n return source.input.startsWith(\"npm:\")\n ? source.input\n : `npm:${source.input}`;\n }\n return source.input;\n}\n\nasync function resolveRunnablePackageSource(\n source: ManagedExtensionSource,\n tag: string,\n): Promise<string> {\n const installSource = resolvePackageInstallSource(source, tag);\n if (source.kind !== \"local\") {\n return installSource;\n }\n if (await pathExists(installSource)) {\n return installSource;\n }\n if (await pathExists(source.location)) {\n return source.location;\n }\n return installSource;\n}\n\nfunction packageCommandFor(\n source: ManagedExtensionSource,\n installSource: string,\n scope: ExtensionScope,\n ref?: string,\n): string[] {\n const command = [\n \"pm\",\n \"install\",\n installSource,\n scope === \"global\" ? \"--global\" : \"--project\",\n ];\n if (source.kind === \"github\" && ref && ref.trim().length > 0) {\n command.push(\"--ref\", ref.trim());\n }\n return command;\n}\n\nasync function readManagedRecords(\n scope: ExtensionScope,\n global: GlobalOptions,\n): Promise<ManagedExtensionRecord[]> {\n const roots = resolveRoots(scope, global);\n const managedState = await readManagedExtensionState(roots.selected_root);\n return managedState.state.entries.filter((entry) => entry.scope === scope);\n}\n\nasync function refreshManagedRecord(\n scope: ExtensionScope,\n global: GlobalOptions,\n record: ManagedExtensionRecord,\n): Promise<ManagedExtensionRecord | undefined> {\n const records = await readManagedRecords(scope, global);\n return (\n records.find((candidate) =>\n packageRecordMatchesTarget(candidate, record.name),\n ) ??\n records.find(\n (candidate) =>\n normalizeTarget(candidate.directory) ===\n normalizeTarget(record.directory),\n )\n );\n}\n\nasync function upgradePackageRecord(\n record: ManagedExtensionRecord,\n options: UpgradeCommandOptions,\n global: GlobalOptions,\n scope: ExtensionScope,\n dryRun: boolean,\n): Promise<UpgradePackageResult> {\n const tag = resolveTag(options);\n const installSource = await resolveRunnablePackageSource(record.source, tag);\n const command = packageCommandFor(\n record.source,\n installSource,\n scope,\n record.source.ref,\n );\n const planned: UpgradePackageResult = {\n name: record.name,\n directory: record.directory,\n scope,\n source: record.source,\n status: \"planned\",\n command,\n previous_version: record.manifest_version,\n };\n if (dryRun) {\n return planned;\n }\n try {\n await runExtension(\n installSource,\n {\n install: true,\n project: scope === \"project\",\n global: scope === \"global\",\n ref: record.source.kind === \"github\" ? record.source.ref : undefined,\n },\n global,\n );\n const refreshed = await refreshManagedRecord(scope, global, record);\n return {\n ...planned,\n status: \"updated\",\n installed_version: refreshed?.manifest_version,\n };\n } catch (error: unknown) {\n return {\n ...planned,\n status: \"failed\",\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\nfunction summarize(\n cli: UpgradeCliResult,\n packages: UpgradePackageResult[],\n includeCli: boolean,\n includePackages: boolean,\n): UpgradeResult[\"summary\"] {\n const statuses = [\n includeCli ? cli.status : undefined,\n ...packages.map((entry) => entry.status),\n ].filter(\n (value): value is UpgradeCliResult[\"status\"] => typeof value === \"string\",\n );\n return {\n requested_cli: includeCli,\n requested_packages: includePackages,\n planned: statuses.filter((status) => status === \"planned\").length,\n updated: statuses.filter((status) => status === \"updated\").length,\n skipped: statuses.filter((status) => status === \"skipped\").length,\n failed: statuses.filter((status) => status === \"failed\").length,\n };\n}\n\n/** Implements run upgrade for the public runtime surface of this module. */\nexport async function runUpgrade(\n target: string | undefined,\n options: UpgradeCommandOptions,\n global: GlobalOptions,\n): Promise<UpgradeResult> {\n if (options.cliOnly === true && options.packagesOnly === true) {\n throw new PmCliError(\n 'Options \"--cli-only\" and \"--packages-only\" are mutually exclusive.',\n EXIT_CODE.USAGE,\n );\n }\n\n const scope = resolveScope(options);\n const dryRun = options.dryRun === true;\n const normalizedTarget =\n typeof target === \"string\" && target.trim().length > 0\n ? target.trim()\n : undefined;\n if (options.cliOnly === true && normalizedTarget) {\n throw new PmCliError(\n 'A package target cannot be used with \"--cli-only\".',\n EXIT_CODE.USAGE,\n );\n }\n const includeCli =\n options.packagesOnly === true || normalizedTarget ? false : true;\n const includePackages = options.cliOnly === true ? false : true;\n const cli = includeCli\n ? await upgradeCli(options, dryRun)\n : ({\n requested: false,\n status: \"skipped\",\n package: resolveCliPackage(options),\n target: `${resolveCliPackage(options)}@${resolveTag(options)}`,\n command: [\n \"npm\",\n \"install\",\n \"-g\",\n `${resolveCliPackage(options)}@${resolveTag(options)}`,\n ],\n repair: options.repair === true,\n reason: \"not_requested\",\n } as UpgradeCliResult);\n\n let packageRecords = includePackages\n ? await readManagedRecords(scope, global)\n : [];\n if (normalizedTarget) {\n packageRecords = packageRecords.filter((entry) =>\n packageRecordMatchesTarget(entry, normalizedTarget),\n );\n if (packageRecords.length === 0) {\n throw new PmCliError(\n `Managed package \"${normalizedTarget}\" was not found in ${scope} scope.`,\n EXIT_CODE.NOT_FOUND,\n );\n }\n }\n\n const packages: UpgradePackageResult[] = [];\n for (const record of packageRecords) {\n packages.push(\n await upgradePackageRecord(record, options, global, scope, dryRun),\n );\n }\n\n const summary = summarize(cli, packages, includeCli, includePackages);\n return {\n ok: summary.failed === 0,\n action: \"upgrade\",\n dry_run: dryRun,\n scope,\n target: normalizedTarget,\n cli,\n packages,\n summary,\n };\n}\n"],"names":["nextPolicy","changed","nextCriteria","nextEnabled"],"mappings":"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","debugId":"2fecd1c2-923b-5516-8f62-8b3c5ad50f92"}