@unbrained/pm-cli 2026.6.5 → 2026.6.7

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 (596) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/CONTRIBUTING.md +1 -0
  3. package/README.md +17 -5
  4. package/dist/cli/commander-usage.js +74 -4
  5. package/dist/cli/commander-usage.js.map +1 -1
  6. package/dist/cli/commands/aggregate.d.ts +8 -0
  7. package/dist/cli/commands/aggregate.js +84 -7
  8. package/dist/cli/commands/aggregate.js.map +1 -1
  9. package/dist/cli/commands/calendar.js +10 -3
  10. package/dist/cli/commands/calendar.js.map +1 -1
  11. package/dist/cli/commands/close-many.js +13 -10
  12. package/dist/cli/commands/close-many.js.map +1 -1
  13. package/dist/cli/commands/close.d.ts +1 -1
  14. package/dist/cli/commands/close.js +20 -10
  15. package/dist/cli/commands/close.js.map +1 -1
  16. package/dist/cli/commands/completion.js +87 -18
  17. package/dist/cli/commands/completion.js.map +1 -1
  18. package/dist/cli/commands/config.d.ts +5 -4
  19. package/dist/cli/commands/config.js +50 -2
  20. package/dist/cli/commands/config.js.map +1 -1
  21. package/dist/cli/commands/contracts.js +6 -3
  22. package/dist/cli/commands/contracts.js.map +1 -1
  23. package/dist/cli/commands/copy.d.ts +14 -0
  24. package/dist/cli/commands/copy.js +153 -0
  25. package/dist/cli/commands/copy.js.map +1 -0
  26. package/dist/cli/commands/extension/doctor.js +62 -2
  27. package/dist/cli/commands/extension/doctor.js.map +1 -1
  28. package/dist/cli/commands/extension/install-sources.d.ts +8 -0
  29. package/dist/cli/commands/extension/install-sources.js +82 -2
  30. package/dist/cli/commands/extension/install-sources.js.map +1 -1
  31. package/dist/cli/commands/extension.d.ts +29 -0
  32. package/dist/cli/commands/extension.js +61 -2
  33. package/dist/cli/commands/extension.js.map +1 -1
  34. package/dist/cli/commands/gc.d.ts +8 -1
  35. package/dist/cli/commands/gc.js +26 -3
  36. package/dist/cli/commands/gc.js.map +1 -1
  37. package/dist/cli/commands/get.d.ts +9 -0
  38. package/dist/cli/commands/get.js +23 -2
  39. package/dist/cli/commands/get.js.map +1 -1
  40. package/dist/cli/commands/health.js +15 -2
  41. package/dist/cli/commands/health.js.map +1 -1
  42. package/dist/cli/commands/history-compact.d.ts +39 -0
  43. package/dist/cli/commands/history-compact.js +262 -0
  44. package/dist/cli/commands/history-compact.js.map +1 -0
  45. package/dist/cli/commands/history.d.ts +4 -1
  46. package/dist/cli/commands/history.js +12 -24
  47. package/dist/cli/commands/history.js.map +1 -1
  48. package/dist/cli/commands/index.d.ts +3 -0
  49. package/dist/cli/commands/index.js +5 -2
  50. package/dist/cli/commands/index.js.map +1 -1
  51. package/dist/cli/commands/list.d.ts +2 -0
  52. package/dist/cli/commands/list.js +87 -9
  53. package/dist/cli/commands/list.js.map +1 -1
  54. package/dist/cli/commands/reindex.js +8 -4
  55. package/dist/cli/commands/reindex.js.map +1 -1
  56. package/dist/cli/commands/search.d.ts +1 -0
  57. package/dist/cli/commands/search.js +232 -35
  58. package/dist/cli/commands/search.js.map +1 -1
  59. package/dist/cli/commands/stats.d.ts +8 -1
  60. package/dist/cli/commands/stats.js +18 -17
  61. package/dist/cli/commands/stats.js.map +1 -1
  62. package/dist/cli/commands/telemetry.d.ts +8 -0
  63. package/dist/cli/commands/telemetry.js +253 -0
  64. package/dist/cli/commands/telemetry.js.map +1 -0
  65. package/dist/cli/error-guidance.js +26 -2
  66. package/dist/cli/error-guidance.js.map +1 -1
  67. package/dist/cli/extension-command-help.d.ts +1 -0
  68. package/dist/cli/extension-command-help.js +3 -2
  69. package/dist/cli/extension-command-help.js.map +1 -1
  70. package/dist/cli/help-content.js +19 -2
  71. package/dist/cli/help-content.js.map +1 -1
  72. package/dist/cli/main.d.ts +3 -0
  73. package/dist/cli/main.js +13 -21
  74. package/dist/cli/main.js.map +1 -1
  75. package/dist/cli/register-list-query.js +24 -6
  76. package/dist/cli/register-list-query.js.map +1 -1
  77. package/dist/cli/register-mutation.js +52 -17
  78. package/dist/cli/register-mutation.js.map +1 -1
  79. package/dist/cli/register-operations.js +55 -8
  80. package/dist/cli/register-operations.js.map +1 -1
  81. package/dist/cli/register-setup.js +5 -5
  82. package/dist/cli/register-setup.js.map +1 -1
  83. package/dist/cli/registration-helpers.js +21 -3
  84. package/dist/cli/registration-helpers.js.map +1 -1
  85. package/dist/cli-bundle/chunks/activity-5UROHJ3D.js +16 -0
  86. package/dist/cli-bundle/chunks/{activity-3RWRRNOW.js → activity-YVB3QRTE.js} +11 -11
  87. package/dist/cli-bundle/chunks/{aggregate-OOAGKWRG.js → aggregate-LH66F75F.js} +87 -17
  88. package/dist/cli-bundle/chunks/aggregate-LH66F75F.js.map +7 -0
  89. package/dist/cli-bundle/chunks/{aggregate-J35K7WZB.js → aggregate-OHSWFQJM.js} +88 -18
  90. package/dist/cli-bundle/chunks/aggregate-OHSWFQJM.js.map +1 -0
  91. package/dist/cli-bundle/chunks/{append-PNN6UIBZ.js → append-2PPYFAG5.js} +8 -8
  92. package/dist/cli-bundle/chunks/{append-5JE3YGXU.js → append-AUGT5W6J.js} +8 -8
  93. package/dist/cli-bundle/chunks/{chunk-26KTVXJW.js → chunk-2IF7WLB7.js} +2 -2
  94. package/dist/cli-bundle/chunks/{chunk-KA24HME7.js → chunk-2IXCHCLM.js} +5 -6
  95. package/dist/cli-bundle/chunks/chunk-2IXCHCLM.js.map +7 -0
  96. package/dist/cli-bundle/chunks/{chunk-XX5LRINW.js → chunk-2OJHLWBZ.js} +2 -2
  97. package/dist/cli-bundle/chunks/{chunk-ASQM3IF5.js → chunk-3A2CMEM7.js} +5 -4
  98. package/dist/cli-bundle/chunks/{chunk-S3CV7JGJ.js → chunk-3EOBJOF4.js} +5 -4
  99. package/dist/cli-bundle/chunks/{chunk-N5YF3VFN.js → chunk-42LOFGJS.js} +91 -16
  100. package/dist/cli-bundle/chunks/chunk-42LOFGJS.js.map +7 -0
  101. package/dist/cli-bundle/chunks/{chunk-WIKR7KFL.js → chunk-4CHEG6UK.js} +108 -21
  102. package/dist/cli-bundle/chunks/chunk-4CHEG6UK.js.map +7 -0
  103. package/dist/cli-bundle/chunks/{chunk-4QCR4QW3.js → chunk-4GHZR3BA.js} +56 -28
  104. package/dist/cli-bundle/chunks/chunk-4GHZR3BA.js.map +1 -0
  105. package/dist/cli-bundle/chunks/{chunk-B3N4TKNL.js → chunk-5AXMRKN5.js} +8 -8
  106. package/dist/cli-bundle/chunks/{chunk-JQI2HE55.js → chunk-6J4K6JLA.js} +3 -3
  107. package/dist/cli-bundle/chunks/{chunk-V3JQ4IPL.js → chunk-6RZXO5M2.js} +102 -22
  108. package/dist/cli-bundle/chunks/chunk-6RZXO5M2.js.map +1 -0
  109. package/dist/cli-bundle/chunks/{chunk-BNL6S7QH.js → chunk-AVJD6VTA.js} +3 -3
  110. package/dist/cli-bundle/chunks/{chunk-NQP3ECKF.js → chunk-B2KZGPM2.js} +39 -8
  111. package/dist/cli-bundle/chunks/chunk-B2KZGPM2.js.map +1 -0
  112. package/dist/cli-bundle/chunks/{chunk-RQAWLSUU.js → chunk-B5RF3IP7.js} +3 -3
  113. package/dist/cli-bundle/chunks/{chunk-UFCG3SWR.js → chunk-C5W2UH56.js} +3 -3
  114. package/dist/cli-bundle/chunks/{chunk-3OH4DAEB.js → chunk-CKLBZHS7.js} +6 -6
  115. package/dist/cli-bundle/chunks/{chunk-GNHVV4SY.js → chunk-CLD3XNCH.js} +124 -20
  116. package/dist/cli-bundle/chunks/chunk-CLD3XNCH.js.map +1 -0
  117. package/dist/cli-bundle/chunks/{chunk-RANZIID5.js → chunk-FHHBD7PN.js} +38 -7
  118. package/dist/cli-bundle/chunks/chunk-FHHBD7PN.js.map +7 -0
  119. package/dist/cli-bundle/chunks/{chunk-GFWHHMVV.js → chunk-FY6Z3FYY.js} +3 -3
  120. package/dist/cli-bundle/chunks/{chunk-CCUFLH4J.js → chunk-GNIUOLZ2.js} +7 -7
  121. package/dist/cli-bundle/chunks/{chunk-ZRVSMOMR.js → chunk-GPXQBR3H.js} +12 -12
  122. package/dist/cli-bundle/chunks/{chunk-SZQCER6S.js → chunk-GUZBNB3G.js} +27 -5
  123. package/dist/cli-bundle/chunks/chunk-GUZBNB3G.js.map +1 -0
  124. package/dist/cli-bundle/chunks/{chunk-GPGAYASV.js → chunk-H7EO3QA3.js} +5 -5
  125. package/dist/cli-bundle/chunks/{chunk-MISYRLEP.js → chunk-HLC3KTLP.js} +2 -2
  126. package/dist/cli-bundle/chunks/{chunk-KK6YPGH3.js → chunk-HMMMWBK2.js} +2 -2
  127. package/dist/cli-bundle/chunks/{chunk-4PJQSECJ.js → chunk-HRMHZ4RV.js} +26 -4
  128. package/dist/cli-bundle/chunks/chunk-HRMHZ4RV.js.map +7 -0
  129. package/dist/cli-bundle/chunks/{chunk-CJDQB2ED.js → chunk-HV5SSZXF.js} +2 -2
  130. package/dist/cli-bundle/chunks/{chunk-ATBVS6WW.js → chunk-IMCJBN2Q.js} +23 -14
  131. package/dist/cli-bundle/chunks/chunk-IMCJBN2Q.js.map +7 -0
  132. package/dist/cli-bundle/chunks/{chunk-FVXM3GKS.js → chunk-KNGVP5WJ.js} +3 -3
  133. package/dist/cli-bundle/chunks/{chunk-OIQIXTNB.js → chunk-KR6R465K.js} +304 -215
  134. package/dist/cli-bundle/chunks/chunk-KR6R465K.js.map +7 -0
  135. package/dist/cli-bundle/chunks/{chunk-UOVLWB47.js → chunk-LI65XLJR.js} +8 -8
  136. package/dist/cli-bundle/chunks/{chunk-AXXKLVTW.js → chunk-LIN2BPJ7.js} +2 -2
  137. package/dist/cli-bundle/chunks/chunk-LMTOY5HE.js +112 -0
  138. package/dist/cli-bundle/chunks/chunk-LMTOY5HE.js.map +1 -0
  139. package/dist/cli-bundle/chunks/{chunk-Y2AKE2HS.js → chunk-LQHBENVW.js} +3 -3
  140. package/dist/cli-bundle/chunks/{chunk-D5X7N6FI.js → chunk-LXO6V66E.js} +14 -14
  141. package/dist/cli-bundle/chunks/{chunk-TK633IVD.js → chunk-M2PW7EZU.js} +26 -7
  142. package/dist/cli-bundle/chunks/chunk-M2PW7EZU.js.map +7 -0
  143. package/dist/cli-bundle/chunks/{chunk-DFIZGAI5.js → chunk-MOYM2C3J.js} +9 -9
  144. package/dist/cli-bundle/chunks/{chunk-ZQ4F6EC4.js → chunk-MWRS7Z4P.js} +127 -23
  145. package/dist/cli-bundle/chunks/chunk-MWRS7Z4P.js.map +7 -0
  146. package/dist/cli-bundle/chunks/{chunk-5PAOPUZX.js → chunk-NHR2QXXZ.js} +24 -15
  147. package/dist/cli-bundle/chunks/chunk-NHR2QXXZ.js.map +1 -0
  148. package/dist/cli-bundle/chunks/{chunk-OUF3ARDX.js → chunk-NQL32HQ5.js} +12 -12
  149. package/dist/cli-bundle/chunks/{chunk-TBQVUNVH.js → chunk-O7HSSFCC.js} +65 -16
  150. package/dist/cli-bundle/chunks/chunk-O7HSSFCC.js.map +7 -0
  151. package/dist/cli-bundle/chunks/{chunk-GCAVRLGE.js → chunk-OKSKJKHX.js} +9 -9
  152. package/dist/cli-bundle/chunks/chunk-QQL5QSTZ.js +1572 -0
  153. package/dist/cli-bundle/chunks/chunk-QQL5QSTZ.js.map +1 -0
  154. package/dist/cli-bundle/chunks/{chunk-A6PEXMYN.js → chunk-R3V3YCMH.js} +9 -9
  155. package/dist/cli-bundle/chunks/{chunk-T2ORWB6D.js → chunk-RVPTZKBC.js} +9 -9
  156. package/dist/cli-bundle/chunks/{chunk-K47WAYQV.js → chunk-SFFVGNHC.js} +3 -3
  157. package/dist/cli-bundle/chunks/{chunk-DFUSXJDE.js → chunk-SQPKRA54.js} +14 -14
  158. package/dist/cli-bundle/chunks/chunk-THDEID2Z.js +115 -0
  159. package/dist/cli-bundle/chunks/chunk-THDEID2Z.js.map +7 -0
  160. package/dist/cli-bundle/chunks/{chunk-G5BACLYH.js → chunk-TINUJMWN.js} +92 -17
  161. package/dist/cli-bundle/chunks/chunk-TINUJMWN.js.map +1 -0
  162. package/dist/cli-bundle/chunks/{chunk-JB4RGL4V.js → chunk-TNPBPNII.js} +7 -7
  163. package/dist/cli-bundle/chunks/{chunk-XG7RJYHV.js → chunk-TP4DDY27.js} +6 -6
  164. package/dist/cli-bundle/chunks/{chunk-ORTLYVA4.js → chunk-TYJJOTUA.js} +6 -6
  165. package/dist/cli-bundle/chunks/{chunk-HZOS2UG5.js → chunk-UAQOQ7IE.js} +2 -2
  166. package/dist/cli-bundle/chunks/{chunk-D3WUNETC.js → chunk-UEWA73ZZ.js} +5 -5
  167. package/dist/cli-bundle/chunks/{chunk-O5IBJE6S.js → chunk-UIIQC5YO.js} +2 -2
  168. package/dist/cli-bundle/chunks/{chunk-SRVKTWPR.js → chunk-UJUT6AHZ.js} +314 -39
  169. package/dist/cli-bundle/chunks/chunk-UJUT6AHZ.js.map +7 -0
  170. package/dist/cli-bundle/chunks/{chunk-SSFMJCPF.js → chunk-UT6WFXW2.js} +6 -7
  171. package/dist/cli-bundle/chunks/chunk-UT6WFXW2.js.map +1 -0
  172. package/dist/cli-bundle/chunks/{chunk-KBG47ZOY.js → chunk-UYQ7HXH4.js} +10 -6
  173. package/dist/cli-bundle/chunks/chunk-UYQ7HXH4.js.map +1 -0
  174. package/dist/cli-bundle/chunks/{chunk-LDJK7SHN.js → chunk-V6EYFTRL.js} +7 -7
  175. package/dist/cli-bundle/chunks/{chunk-5IRA6IYD.js → chunk-WAA7UI6M.js} +58 -30
  176. package/dist/cli-bundle/chunks/chunk-WAA7UI6M.js.map +7 -0
  177. package/dist/cli-bundle/chunks/{chunk-HPH6X4ZZ.js → chunk-WCQZBDDH.js} +10 -6
  178. package/dist/cli-bundle/chunks/{chunk-HPH6X4ZZ.js.map → chunk-WCQZBDDH.js.map} +2 -2
  179. package/dist/cli-bundle/chunks/chunk-WR5567FH.js +1582 -0
  180. package/dist/cli-bundle/chunks/chunk-WR5567FH.js.map +7 -0
  181. package/dist/cli-bundle/chunks/{chunk-TQ3ZK6VD.js → chunk-WYEXLDDY.js} +3 -3
  182. package/dist/cli-bundle/chunks/{chunk-4LTBNUYT.js → chunk-X4IZKYHP.js} +307 -32
  183. package/dist/cli-bundle/chunks/chunk-X4IZKYHP.js.map +1 -0
  184. package/dist/cli-bundle/chunks/{chunk-KCMIYKTA.js → chunk-X7UHMKPE.js} +3 -3
  185. package/dist/cli-bundle/chunks/{chunk-7K24QB23.js → chunk-XS3O2TFJ.js} +27 -8
  186. package/dist/cli-bundle/chunks/chunk-XS3O2TFJ.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{chunk-EHXPIKKP.js → chunk-XYNT7UFP.js} +303 -207
  188. package/dist/cli-bundle/chunks/chunk-XYNT7UFP.js.map +1 -0
  189. package/dist/cli-bundle/chunks/{chunk-CWT53EYT.js → chunk-YBZW2QQ7.js} +6 -6
  190. package/dist/cli-bundle/chunks/{chunk-VGO2T3TY.js → chunk-YO3THIJF.js} +7 -7
  191. package/dist/cli-bundle/chunks/{chunk-5KB4X7YY.js → chunk-YPH4ESA2.js} +66 -17
  192. package/dist/cli-bundle/chunks/chunk-YPH4ESA2.js.map +1 -0
  193. package/dist/cli-bundle/chunks/{claim-ZFA7HKU4.js → claim-BJ4QMPJC.js} +10 -10
  194. package/dist/cli-bundle/chunks/{claim-AZLP7YFO.js → claim-KW743OSW.js} +10 -10
  195. package/dist/cli-bundle/chunks/close-P4ZBKODL.js +13 -0
  196. package/dist/cli-bundle/chunks/{close-65DFYAVS.js → close-SYHSRZDC.js} +8 -8
  197. package/dist/cli-bundle/chunks/{close-many-UKZSQGM7.js → close-many-DBLEYFOY.js} +29 -26
  198. package/dist/cli-bundle/chunks/close-many-DBLEYFOY.js.map +7 -0
  199. package/dist/cli-bundle/chunks/{close-many-AKPZNSGI.js → close-many-LAC5VR4G.js} +30 -27
  200. package/dist/cli-bundle/chunks/close-many-LAC5VR4G.js.map +1 -0
  201. package/dist/cli-bundle/chunks/{comments-AGBNSJJH.js → comments-JEO6HHVM.js} +10 -10
  202. package/dist/cli-bundle/chunks/{comments-CJWXQI7X.js → comments-YT2PQ5DD.js} +10 -10
  203. package/dist/cli-bundle/chunks/{config-DDPYIA6J.js → config-RZRVS3ZV.js} +127 -11
  204. package/dist/cli-bundle/chunks/config-RZRVS3ZV.js.map +1 -0
  205. package/dist/cli-bundle/chunks/{config-5ON3ADRH.js → config-YJSAAADD.js} +128 -12
  206. package/dist/cli-bundle/chunks/config-YJSAAADD.js.map +7 -0
  207. package/dist/cli-bundle/chunks/{context-E6U3DWVM.js → context-LGYEEKAW.js} +14 -14
  208. package/dist/cli-bundle/chunks/{context-E6U3DWVM.js.map → context-LGYEEKAW.js.map} +2 -2
  209. package/dist/cli-bundle/chunks/{context-ZOJEN5VT.js → context-ZUH5IOOI.js} +15 -15
  210. package/dist/cli-bundle/chunks/context-ZUH5IOOI.js.map +1 -0
  211. package/dist/cli-bundle/chunks/{contracts-CXSFM45B.js → contracts-YXJ6NXKH.js} +11 -5
  212. package/dist/cli-bundle/chunks/contracts-YXJ6NXKH.js.map +7 -0
  213. package/dist/cli-bundle/chunks/{contracts-LCSX5R53.js → contracts-ZIBXROPE.js} +12 -6
  214. package/dist/cli-bundle/chunks/contracts-ZIBXROPE.js.map +1 -0
  215. package/dist/cli-bundle/chunks/copy-BZALX5MQ.js +182 -0
  216. package/dist/cli-bundle/chunks/copy-BZALX5MQ.js.map +1 -0
  217. package/dist/cli-bundle/chunks/copy-YPWEIAPD.js +185 -0
  218. package/dist/cli-bundle/chunks/copy-YPWEIAPD.js.map +7 -0
  219. package/dist/cli-bundle/chunks/create-4DS2QWQC.js +27 -0
  220. package/dist/cli-bundle/chunks/{create-WYFKN2U4.js → create-CF7EVRX7.js} +13 -13
  221. package/dist/cli-bundle/chunks/{delete-ZXWC56WO.js → delete-KR4VBWVE.js} +7 -7
  222. package/dist/cli-bundle/chunks/{delete-RONNH4F4.js → delete-XLZRTRKR.js} +7 -7
  223. package/dist/cli-bundle/chunks/{deps-WII3O4HB.js → deps-2YTXD3VM.js} +7 -7
  224. package/dist/cli-bundle/chunks/{deps-EHXIFOZR.js → deps-GZMFMTGS.js} +7 -7
  225. package/dist/cli-bundle/chunks/{docs-PDREIMLS.js → docs-SLROFEQ4.js} +9 -9
  226. package/dist/cli-bundle/chunks/{docs-JMVCFNHH.js → docs-ZHISRR2D.js} +9 -9
  227. package/dist/cli-bundle/chunks/{extension-G6UXSM5S.js → extension-3C7OOI4F.js} +8 -6
  228. package/dist/cli-bundle/chunks/{extension-B4ROVWJD.js → extension-XYCUXICD.js} +8 -6
  229. package/dist/cli-bundle/chunks/{files-2PN7UM2D.js → files-FUWF2FYJ.js} +9 -9
  230. package/dist/cli-bundle/chunks/{files-MXYS5W4M.js → files-J4I5IU4O.js} +9 -9
  231. package/dist/cli-bundle/chunks/gc-34NXSNSN.js +362 -0
  232. package/dist/cli-bundle/chunks/gc-34NXSNSN.js.map +1 -0
  233. package/dist/cli-bundle/chunks/gc-SPIIZX3A.js +372 -0
  234. package/dist/cli-bundle/chunks/gc-SPIIZX3A.js.map +7 -0
  235. package/dist/cli-bundle/chunks/{get-WXMLRG7M.js → get-SZKNRHMA.js} +34 -12
  236. package/dist/cli-bundle/chunks/get-SZKNRHMA.js.map +1 -0
  237. package/dist/cli-bundle/chunks/{get-CINFEUIY.js → get-VITKYP6S.js} +33 -11
  238. package/dist/cli-bundle/chunks/get-VITKYP6S.js.map +7 -0
  239. package/dist/cli-bundle/chunks/{health-IT5DBPRJ.js → health-4SNTA2TF.js} +27 -13
  240. package/dist/cli-bundle/chunks/health-4SNTA2TF.js.map +7 -0
  241. package/dist/cli-bundle/chunks/{health-5VPOJQ53.js → health-7G3EPM57.js} +28 -14
  242. package/dist/cli-bundle/chunks/health-7G3EPM57.js.map +1 -0
  243. package/dist/cli-bundle/chunks/{history-FLZIP7PM.js → history-SDAWYZR3.js} +10 -10
  244. package/dist/cli-bundle/chunks/history-YDUEILKP.js +20 -0
  245. package/dist/cli-bundle/chunks/history-compact-DMW536VH.js +287 -0
  246. package/dist/cli-bundle/chunks/history-compact-DMW536VH.js.map +1 -0
  247. package/dist/cli-bundle/chunks/history-compact-POTZGG7K.js +290 -0
  248. package/dist/cli-bundle/chunks/history-compact-POTZGG7K.js.map +7 -0
  249. package/dist/cli-bundle/chunks/{history-redact-SSZBAD76.js → history-redact-EPJ7GENL.js} +11 -11
  250. package/dist/cli-bundle/chunks/history-redact-KASLLPE7.js +19 -0
  251. package/dist/cli-bundle/chunks/{history-repair-X7CO5JJZ.js → history-repair-IJ7LLBET.js} +11 -11
  252. package/dist/cli-bundle/chunks/{history-repair-KC5ZOJRZ.js → history-repair-YNESJRT6.js} +11 -11
  253. package/dist/cli-bundle/chunks/init-IGSS4GNH.js +17 -0
  254. package/dist/cli-bundle/chunks/{init-6MRFVOLH.js → init-YHVBTEET.js} +9 -8
  255. package/dist/cli-bundle/chunks/{learnings-DCX55BNX.js → learnings-4YBMIVCZ.js} +10 -10
  256. package/dist/cli-bundle/chunks/{learnings-A3CLB5CO.js → learnings-T4PF24YN.js} +10 -10
  257. package/dist/cli-bundle/chunks/{list-DBRECOG4.js → list-3KEVBOYW.js} +10 -10
  258. package/dist/cli-bundle/chunks/list-E44O2K64.js +20 -0
  259. package/dist/cli-bundle/chunks/{notes-42LIC3UE.js → notes-FLUCNJSH.js} +10 -10
  260. package/dist/cli-bundle/chunks/{notes-P5O3VMQ3.js → notes-GJKALVZM.js} +10 -10
  261. package/dist/cli-bundle/chunks/{plan-HDQXEUKD.js → plan-T5MMZLI3.js} +13 -13
  262. package/dist/cli-bundle/chunks/{plan-IGTE3WOJ.js → plan-YYMIL3HV.js} +13 -13
  263. package/dist/cli-bundle/chunks/{register-list-query-EMNSIUO4.js → register-list-query-I65EZ3HB.js} +33 -27
  264. package/dist/cli-bundle/chunks/register-list-query-I65EZ3HB.js.map +1 -0
  265. package/dist/cli-bundle/chunks/{register-list-query-AG3XKXWL.js → register-list-query-OECMHO4G.js} +32 -26
  266. package/dist/cli-bundle/chunks/register-list-query-OECMHO4G.js.map +7 -0
  267. package/dist/cli-bundle/chunks/{register-mutation-M3YS6XDO.js → register-mutation-2FLXORLR.js} +65 -47
  268. package/dist/cli-bundle/chunks/register-mutation-2FLXORLR.js.map +1 -0
  269. package/dist/cli-bundle/chunks/{register-mutation-RSMT6DPK.js → register-mutation-5GPDEKHR.js} +64 -46
  270. package/dist/cli-bundle/chunks/register-mutation-5GPDEKHR.js.map +7 -0
  271. package/dist/cli-bundle/chunks/{register-operations-KYUOOOOD.js → register-operations-BNGAUMGK.js} +71 -35
  272. package/dist/cli-bundle/chunks/register-operations-BNGAUMGK.js.map +1 -0
  273. package/dist/cli-bundle/chunks/{register-operations-Q54JQZUN.js → register-operations-GQKT35H5.js} +70 -34
  274. package/dist/cli-bundle/chunks/register-operations-GQKT35H5.js.map +7 -0
  275. package/dist/cli-bundle/chunks/{register-setup-DI6P7X75.js → register-setup-DNDCGZ4O.js} +18 -18
  276. package/dist/cli-bundle/chunks/{register-setup-DI6P7X75.js.map → register-setup-DNDCGZ4O.js.map} +1 -1
  277. package/dist/cli-bundle/chunks/{register-setup-YJKIQRKA.js → register-setup-EJY44FPH.js} +17 -17
  278. package/dist/cli-bundle/chunks/{register-setup-YJKIQRKA.js.map → register-setup-EJY44FPH.js.map} +2 -2
  279. package/dist/cli-bundle/chunks/{restore-2XVTBLKQ.js → restore-DDJGVZIN.js} +11 -11
  280. package/dist/cli-bundle/chunks/restore-SJSASGZP.js +17 -0
  281. package/dist/cli-bundle/chunks/{schema-V6BX65Q2.js → schema-B7NQ6XVP.js} +8 -8
  282. package/dist/cli-bundle/chunks/{schema-LVXZWFGY.js → schema-HEGYH6CE.js} +8 -8
  283. package/dist/cli-bundle/chunks/{search-C7NPB7G7.js → search-DVVQ4UO2.js} +421 -42
  284. package/dist/cli-bundle/chunks/search-DVVQ4UO2.js.map +1 -0
  285. package/dist/cli-bundle/chunks/{search-5A3BMFA7.js → search-JNEZJV7H.js} +427 -41
  286. package/dist/cli-bundle/chunks/search-JNEZJV7H.js.map +7 -0
  287. package/dist/cli-bundle/chunks/stats-7JDIJRDH.js +202 -0
  288. package/dist/cli-bundle/chunks/stats-7JDIJRDH.js.map +1 -0
  289. package/dist/cli-bundle/chunks/stats-SYTJRR4Z.js +212 -0
  290. package/dist/cli-bundle/chunks/stats-SYTJRR4Z.js.map +7 -0
  291. package/dist/cli-bundle/chunks/telemetry-4HHWD5Y7.js +251 -0
  292. package/dist/cli-bundle/chunks/telemetry-4HHWD5Y7.js.map +7 -0
  293. package/dist/cli-bundle/chunks/telemetry-EGWP7ZUX.js +248 -0
  294. package/dist/cli-bundle/chunks/telemetry-EGWP7ZUX.js.map +1 -0
  295. package/dist/cli-bundle/chunks/{test-OFYONO3C.js → test-IIELLSZX.js} +14 -13
  296. package/dist/cli-bundle/chunks/test-ML5RLWXE.js +32 -0
  297. package/dist/cli-bundle/chunks/{test-all-EEMKNTGU.js → test-all-7DNCMML7.js} +14 -13
  298. package/dist/cli-bundle/chunks/{test-all-EEMKNTGU.js.map → test-all-7DNCMML7.js.map} +1 -1
  299. package/dist/cli-bundle/chunks/{test-all-OJE6CIO7.js → test-all-IHTUJRRC.js} +16 -15
  300. package/dist/cli-bundle/chunks/{test-all-OJE6CIO7.js.map → test-all-IHTUJRRC.js.map} +1 -1
  301. package/dist/cli-bundle/chunks/{test-runs-IPOPFOAF.js → test-runs-5FEMBV3A.js} +5 -5
  302. package/dist/cli-bundle/chunks/{test-runs-L2M7WKH7.js → test-runs-RNKZ37PS.js} +5 -5
  303. package/dist/cli-bundle/chunks/update-6C67X4KS.js +21 -0
  304. package/dist/cli-bundle/chunks/update-VF26YPT3.js +25 -0
  305. package/dist/cli-bundle/chunks/{update-many-322CCH2L.js → update-many-BSZZZYXY.js} +22 -22
  306. package/dist/cli-bundle/chunks/{update-many-DYWGW57M.js → update-many-BWKJJEBF.js} +22 -22
  307. package/dist/cli-bundle/chunks/{upgrade-3W3RVSNM.js → upgrade-RSE5PC44.js} +7 -6
  308. package/dist/cli-bundle/chunks/{upgrade-3W3RVSNM.js.map → upgrade-RSE5PC44.js.map} +1 -1
  309. package/dist/cli-bundle/chunks/{upgrade-2U727SAM.js → upgrade-YWI5DJFA.js} +5 -4
  310. package/dist/cli-bundle/chunks/{upgrade-2U727SAM.js.map → upgrade-YWI5DJFA.js.map} +1 -1
  311. package/dist/cli-bundle/chunks/{validate-ZFVWPEEN.js → validate-NK3WKB7C.js} +18 -17
  312. package/dist/cli-bundle/chunks/{validate-ZFVWPEEN.js.map → validate-NK3WKB7C.js.map} +1 -1
  313. package/dist/cli-bundle/chunks/{validate-GZ24NYHO.js → validate-UCEOB7S6.js} +20 -19
  314. package/dist/cli-bundle/chunks/{validate-GZ24NYHO.js.map → validate-UCEOB7S6.js.map} +1 -1
  315. package/dist/cli-bundle/main.js +198 -1523
  316. package/dist/cli-bundle/main.js.map +4 -4
  317. package/dist/core/config/nested-settings.d.ts +8 -6
  318. package/dist/core/config/nested-settings.js +71 -5
  319. package/dist/core/config/nested-settings.js.map +1 -1
  320. package/dist/core/config/positional-value.js +4 -2
  321. package/dist/core/config/positional-value.js.map +1 -1
  322. package/dist/core/extensions/extension-types.d.ts +36 -0
  323. package/dist/core/extensions/extension-types.js +2 -2
  324. package/dist/core/extensions/extension-types.js.map +1 -1
  325. package/dist/core/extensions/loader.js +46 -5
  326. package/dist/core/extensions/loader.js.map +1 -1
  327. package/dist/core/history/drift-scan.d.ts +3 -4
  328. package/dist/core/history/drift-scan.js +71 -18
  329. package/dist/core/history/drift-scan.js.map +1 -1
  330. package/dist/core/history/history-diff.d.ts +47 -0
  331. package/dist/core/history/history-diff.js +152 -0
  332. package/dist/core/history/history-diff.js.map +1 -0
  333. package/dist/core/history/history-storage-stats.d.ts +31 -0
  334. package/dist/core/history/history-storage-stats.js +101 -0
  335. package/dist/core/history/history-storage-stats.js.map +1 -0
  336. package/dist/core/item/id.js +4 -5
  337. package/dist/core/item/id.js.map +1 -1
  338. package/dist/core/item/item-format.js +7 -3
  339. package/dist/core/item/item-format.js.map +1 -1
  340. package/dist/core/item/toon-decode.d.ts +7 -0
  341. package/dist/core/item/toon-decode.js +11 -2
  342. package/dist/core/item/toon-decode.js.map +1 -1
  343. package/dist/core/item/type-registry.js +25 -7
  344. package/dist/core/item/type-registry.js.map +1 -1
  345. package/dist/core/lock/lock-gc.d.ts +46 -0
  346. package/dist/core/lock/lock-gc.js +194 -0
  347. package/dist/core/lock/lock-gc.js.map +1 -0
  348. package/dist/core/search/cache.js +5 -3
  349. package/dist/core/search/cache.js.map +1 -1
  350. package/dist/core/search/corpus.d.ts +6 -0
  351. package/dist/core/search/corpus.js +22 -9
  352. package/dist/core/search/corpus.js.map +1 -1
  353. package/dist/core/search/embedding-batches.js +10 -7
  354. package/dist/core/search/embedding-batches.js.map +1 -1
  355. package/dist/core/search/relevance.d.ts +29 -0
  356. package/dist/core/search/relevance.js +226 -0
  357. package/dist/core/search/relevance.js.map +1 -0
  358. package/dist/core/search/vector-stores.d.ts +3 -0
  359. package/dist/core/search/vector-stores.js +23 -10
  360. package/dist/core/search/vector-stores.js.map +1 -1
  361. package/dist/core/shared/constants.js +15 -2
  362. package/dist/core/shared/constants.js.map +1 -1
  363. package/dist/core/shared/errors.d.ts +6 -0
  364. package/dist/core/shared/errors.js +2 -2
  365. package/dist/core/shared/errors.js.map +1 -1
  366. package/dist/core/shared/primitives.d.ts +8 -0
  367. package/dist/core/shared/primitives.js +29 -2
  368. package/dist/core/shared/primitives.js.map +1 -1
  369. package/dist/core/shared/serial-queue.d.ts +12 -0
  370. package/dist/core/shared/serial-queue.js +43 -0
  371. package/dist/core/shared/serial-queue.js.map +1 -0
  372. package/dist/core/shared/time.js +42 -6
  373. package/dist/core/shared/time.js.map +1 -1
  374. package/dist/core/store/paths.js +25 -7
  375. package/dist/core/store/paths.js.map +1 -1
  376. package/dist/core/store/settings-validator.d.ts +11 -0
  377. package/dist/core/store/settings-validator.js +14 -2
  378. package/dist/core/store/settings-validator.js.map +1 -1
  379. package/dist/core/store/settings.d.ts +19 -1
  380. package/dist/core/store/settings.js +199 -17
  381. package/dist/core/store/settings.js.map +1 -1
  382. package/dist/core/telemetry/observability.js +3 -3
  383. package/dist/core/telemetry/observability.js.map +1 -1
  384. package/dist/core/telemetry/runtime.js +99 -6
  385. package/dist/core/telemetry/runtime.js.map +1 -1
  386. package/dist/mcp/server.d.ts +1 -0
  387. package/dist/mcp/server.js +187 -42
  388. package/dist/mcp/server.js.map +1 -1
  389. package/dist/sdk/cli-contracts/commander-types.d.ts +1 -0
  390. package/dist/sdk/cli-contracts/commander-types.js +13 -2
  391. package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
  392. package/dist/sdk/cli-contracts/enum-contracts.d.ts +2 -2
  393. package/dist/sdk/cli-contracts/enum-contracts.js +8 -2
  394. package/dist/sdk/cli-contracts/enum-contracts.js.map +1 -1
  395. package/dist/sdk/cli-contracts/tool-option-contracts.js +7 -2
  396. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  397. package/dist/sdk/cli-contracts/tool-parameter-tables.js +39 -7
  398. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  399. package/dist/sdk/cli-contracts.d.ts +26 -1
  400. package/dist/sdk/cli-contracts.js +75 -11
  401. package/dist/sdk/cli-contracts.js.map +1 -1
  402. package/dist/sdk/index.d.ts +2 -2
  403. package/dist/sdk/index.js +3 -3
  404. package/dist/sdk/index.js.map +1 -1
  405. package/dist/sdk/testing.d.ts +51 -1
  406. package/dist/sdk/testing.js +93 -2
  407. package/dist/sdk/testing.js.map +1 -1
  408. package/dist/types.d.ts +14 -0
  409. package/dist/types.js +2 -2
  410. package/dist/types.js.map +1 -1
  411. package/docs/AGENT_GUIDE.md +1 -1
  412. package/docs/ARCHITECTURE.md +11 -1
  413. package/docs/CLAUDE_CODE_PLUGIN.md +4 -4
  414. package/docs/CODEX_PLUGIN.md +1 -1
  415. package/docs/COMMANDS.md +42 -4
  416. package/docs/CONFIGURATION.md +31 -2
  417. package/docs/EXTENSIONS.md +28 -8
  418. package/docs/EXTENSION_AUTHOR_CONTRACTS.md +73 -0
  419. package/docs/ONBOARDING.md +165 -0
  420. package/docs/QUICKSTART.md +2 -2
  421. package/docs/README.md +12 -4
  422. package/docs/RELEASING.md +36 -1
  423. package/docs/SDK.md +66 -0
  424. package/docs/TESTING.md +33 -1
  425. package/package.json +6 -2
  426. package/packages/pm-governance-audit/README.md +14 -0
  427. package/packages/pm-governance-audit/extensions/governance-audit/index.js +39 -1
  428. package/packages/pm-governance-audit/extensions/governance-audit/index.ts +40 -2
  429. package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +1 -1
  430. package/packages/pm-governance-audit/package.json +4 -2
  431. package/packages/pm-lifecycle-hooks/README.md +21 -0
  432. package/packages/pm-search-advanced/README.md +38 -0
  433. package/packages/pm-search-advanced/extensions/search-advanced/index.js +17 -0
  434. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +17 -0
  435. package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +216 -1
  436. package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +271 -2
  437. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  438. package/plugins/pm-claude/README.md +11 -8
  439. package/plugins/pm-claude/agents/pm-coordinator.md +1 -1
  440. package/plugins/pm-claude/commands/pm-init.md +1 -1
  441. package/plugins/pm-codex/README.md +1 -1
  442. package/dist/cli-bundle/chunks/activity-P5BUMWP3.js +0 -16
  443. package/dist/cli-bundle/chunks/aggregate-J35K7WZB.js.map +0 -1
  444. package/dist/cli-bundle/chunks/aggregate-OOAGKWRG.js.map +0 -7
  445. package/dist/cli-bundle/chunks/chunk-4LTBNUYT.js.map +0 -1
  446. package/dist/cli-bundle/chunks/chunk-4PJQSECJ.js.map +0 -7
  447. package/dist/cli-bundle/chunks/chunk-4QCR4QW3.js.map +0 -1
  448. package/dist/cli-bundle/chunks/chunk-5IRA6IYD.js.map +0 -7
  449. package/dist/cli-bundle/chunks/chunk-5KB4X7YY.js.map +0 -1
  450. package/dist/cli-bundle/chunks/chunk-5PAOPUZX.js.map +0 -1
  451. package/dist/cli-bundle/chunks/chunk-7K24QB23.js.map +0 -1
  452. package/dist/cli-bundle/chunks/chunk-ATBVS6WW.js.map +0 -7
  453. package/dist/cli-bundle/chunks/chunk-EHXPIKKP.js.map +0 -1
  454. package/dist/cli-bundle/chunks/chunk-G5BACLYH.js.map +0 -1
  455. package/dist/cli-bundle/chunks/chunk-GNHVV4SY.js.map +0 -1
  456. package/dist/cli-bundle/chunks/chunk-KA24HME7.js.map +0 -7
  457. package/dist/cli-bundle/chunks/chunk-KBG47ZOY.js.map +0 -1
  458. package/dist/cli-bundle/chunks/chunk-N5YF3VFN.js.map +0 -7
  459. package/dist/cli-bundle/chunks/chunk-NQP3ECKF.js.map +0 -1
  460. package/dist/cli-bundle/chunks/chunk-OIQIXTNB.js.map +0 -7
  461. package/dist/cli-bundle/chunks/chunk-RANZIID5.js.map +0 -7
  462. package/dist/cli-bundle/chunks/chunk-SRVKTWPR.js.map +0 -7
  463. package/dist/cli-bundle/chunks/chunk-SSFMJCPF.js.map +0 -1
  464. package/dist/cli-bundle/chunks/chunk-SZQCER6S.js.map +0 -1
  465. package/dist/cli-bundle/chunks/chunk-TBQVUNVH.js.map +0 -7
  466. package/dist/cli-bundle/chunks/chunk-TK633IVD.js.map +0 -7
  467. package/dist/cli-bundle/chunks/chunk-V3JQ4IPL.js.map +0 -1
  468. package/dist/cli-bundle/chunks/chunk-WIKR7KFL.js.map +0 -7
  469. package/dist/cli-bundle/chunks/chunk-ZQ4F6EC4.js.map +0 -7
  470. package/dist/cli-bundle/chunks/close-RMHQ3KWH.js +0 -13
  471. package/dist/cli-bundle/chunks/close-many-AKPZNSGI.js.map +0 -1
  472. package/dist/cli-bundle/chunks/close-many-UKZSQGM7.js.map +0 -7
  473. package/dist/cli-bundle/chunks/config-5ON3ADRH.js.map +0 -7
  474. package/dist/cli-bundle/chunks/config-DDPYIA6J.js.map +0 -1
  475. package/dist/cli-bundle/chunks/context-ZOJEN5VT.js.map +0 -1
  476. package/dist/cli-bundle/chunks/contracts-CXSFM45B.js.map +0 -7
  477. package/dist/cli-bundle/chunks/contracts-LCSX5R53.js.map +0 -1
  478. package/dist/cli-bundle/chunks/create-ATONSAZW.js +0 -27
  479. package/dist/cli-bundle/chunks/gc-GT552UJH.js +0 -178
  480. package/dist/cli-bundle/chunks/gc-GT552UJH.js.map +0 -1
  481. package/dist/cli-bundle/chunks/gc-QNBRJG6H.js +0 -181
  482. package/dist/cli-bundle/chunks/gc-QNBRJG6H.js.map +0 -7
  483. package/dist/cli-bundle/chunks/get-CINFEUIY.js.map +0 -7
  484. package/dist/cli-bundle/chunks/get-WXMLRG7M.js.map +0 -1
  485. package/dist/cli-bundle/chunks/health-5VPOJQ53.js.map +0 -1
  486. package/dist/cli-bundle/chunks/health-IT5DBPRJ.js.map +0 -7
  487. package/dist/cli-bundle/chunks/history-6FC4H6HI.js +0 -20
  488. package/dist/cli-bundle/chunks/history-redact-XKYEZDBL.js +0 -19
  489. package/dist/cli-bundle/chunks/init-KHX3FEEM.js +0 -16
  490. package/dist/cli-bundle/chunks/list-53LZ2AEO.js +0 -20
  491. package/dist/cli-bundle/chunks/register-list-query-AG3XKXWL.js.map +0 -7
  492. package/dist/cli-bundle/chunks/register-list-query-EMNSIUO4.js.map +0 -1
  493. package/dist/cli-bundle/chunks/register-mutation-M3YS6XDO.js.map +0 -1
  494. package/dist/cli-bundle/chunks/register-mutation-RSMT6DPK.js.map +0 -7
  495. package/dist/cli-bundle/chunks/register-operations-KYUOOOOD.js.map +0 -1
  496. package/dist/cli-bundle/chunks/register-operations-Q54JQZUN.js.map +0 -7
  497. package/dist/cli-bundle/chunks/restore-JL5QIH7H.js +0 -17
  498. package/dist/cli-bundle/chunks/search-5A3BMFA7.js.map +0 -7
  499. package/dist/cli-bundle/chunks/search-C7NPB7G7.js.map +0 -1
  500. package/dist/cli-bundle/chunks/stats-FNLYVXTB.js +0 -120
  501. package/dist/cli-bundle/chunks/stats-FNLYVXTB.js.map +0 -1
  502. package/dist/cli-bundle/chunks/stats-Y2CBTZSL.js +0 -123
  503. package/dist/cli-bundle/chunks/stats-Y2CBTZSL.js.map +0 -7
  504. package/dist/cli-bundle/chunks/test-RJ4ZF35X.js +0 -31
  505. package/dist/cli-bundle/chunks/update-6YEHPVXH.js +0 -25
  506. package/dist/cli-bundle/chunks/update-PYLVHMRD.js +0 -21
  507. /package/dist/cli-bundle/chunks/{activity-P5BUMWP3.js.map → activity-5UROHJ3D.js.map} +0 -0
  508. /package/dist/cli-bundle/chunks/{activity-3RWRRNOW.js.map → activity-YVB3QRTE.js.map} +0 -0
  509. /package/dist/cli-bundle/chunks/{append-PNN6UIBZ.js.map → append-2PPYFAG5.js.map} +0 -0
  510. /package/dist/cli-bundle/chunks/{append-5JE3YGXU.js.map → append-AUGT5W6J.js.map} +0 -0
  511. /package/dist/cli-bundle/chunks/{chunk-26KTVXJW.js.map → chunk-2IF7WLB7.js.map} +0 -0
  512. /package/dist/cli-bundle/chunks/{chunk-XX5LRINW.js.map → chunk-2OJHLWBZ.js.map} +0 -0
  513. /package/dist/cli-bundle/chunks/{chunk-ASQM3IF5.js.map → chunk-3A2CMEM7.js.map} +0 -0
  514. /package/dist/cli-bundle/chunks/{chunk-S3CV7JGJ.js.map → chunk-3EOBJOF4.js.map} +0 -0
  515. /package/dist/cli-bundle/chunks/{chunk-B3N4TKNL.js.map → chunk-5AXMRKN5.js.map} +0 -0
  516. /package/dist/cli-bundle/chunks/{chunk-JQI2HE55.js.map → chunk-6J4K6JLA.js.map} +0 -0
  517. /package/dist/cli-bundle/chunks/{chunk-BNL6S7QH.js.map → chunk-AVJD6VTA.js.map} +0 -0
  518. /package/dist/cli-bundle/chunks/{chunk-RQAWLSUU.js.map → chunk-B5RF3IP7.js.map} +0 -0
  519. /package/dist/cli-bundle/chunks/{chunk-UFCG3SWR.js.map → chunk-C5W2UH56.js.map} +0 -0
  520. /package/dist/cli-bundle/chunks/{chunk-3OH4DAEB.js.map → chunk-CKLBZHS7.js.map} +0 -0
  521. /package/dist/cli-bundle/chunks/{chunk-GFWHHMVV.js.map → chunk-FY6Z3FYY.js.map} +0 -0
  522. /package/dist/cli-bundle/chunks/{chunk-CCUFLH4J.js.map → chunk-GNIUOLZ2.js.map} +0 -0
  523. /package/dist/cli-bundle/chunks/{chunk-ZRVSMOMR.js.map → chunk-GPXQBR3H.js.map} +0 -0
  524. /package/dist/cli-bundle/chunks/{chunk-GPGAYASV.js.map → chunk-H7EO3QA3.js.map} +0 -0
  525. /package/dist/cli-bundle/chunks/{chunk-MISYRLEP.js.map → chunk-HLC3KTLP.js.map} +0 -0
  526. /package/dist/cli-bundle/chunks/{chunk-KK6YPGH3.js.map → chunk-HMMMWBK2.js.map} +0 -0
  527. /package/dist/cli-bundle/chunks/{chunk-CJDQB2ED.js.map → chunk-HV5SSZXF.js.map} +0 -0
  528. /package/dist/cli-bundle/chunks/{chunk-FVXM3GKS.js.map → chunk-KNGVP5WJ.js.map} +0 -0
  529. /package/dist/cli-bundle/chunks/{chunk-UOVLWB47.js.map → chunk-LI65XLJR.js.map} +0 -0
  530. /package/dist/cli-bundle/chunks/{chunk-AXXKLVTW.js.map → chunk-LIN2BPJ7.js.map} +0 -0
  531. /package/dist/cli-bundle/chunks/{chunk-Y2AKE2HS.js.map → chunk-LQHBENVW.js.map} +0 -0
  532. /package/dist/cli-bundle/chunks/{chunk-D5X7N6FI.js.map → chunk-LXO6V66E.js.map} +0 -0
  533. /package/dist/cli-bundle/chunks/{chunk-DFIZGAI5.js.map → chunk-MOYM2C3J.js.map} +0 -0
  534. /package/dist/cli-bundle/chunks/{chunk-OUF3ARDX.js.map → chunk-NQL32HQ5.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{chunk-GCAVRLGE.js.map → chunk-OKSKJKHX.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{chunk-A6PEXMYN.js.map → chunk-R3V3YCMH.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{chunk-T2ORWB6D.js.map → chunk-RVPTZKBC.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{chunk-K47WAYQV.js.map → chunk-SFFVGNHC.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{chunk-DFUSXJDE.js.map → chunk-SQPKRA54.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{chunk-JB4RGL4V.js.map → chunk-TNPBPNII.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-XG7RJYHV.js.map → chunk-TP4DDY27.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-ORTLYVA4.js.map → chunk-TYJJOTUA.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-HZOS2UG5.js.map → chunk-UAQOQ7IE.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-D3WUNETC.js.map → chunk-UEWA73ZZ.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-O5IBJE6S.js.map → chunk-UIIQC5YO.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-LDJK7SHN.js.map → chunk-V6EYFTRL.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-TQ3ZK6VD.js.map → chunk-WYEXLDDY.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-KCMIYKTA.js.map → chunk-X7UHMKPE.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-CWT53EYT.js.map → chunk-YBZW2QQ7.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-VGO2T3TY.js.map → chunk-YO3THIJF.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{claim-ZFA7HKU4.js.map → claim-BJ4QMPJC.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{claim-AZLP7YFO.js.map → claim-KW743OSW.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{close-RMHQ3KWH.js.map → close-P4ZBKODL.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{close-65DFYAVS.js.map → close-SYHSRZDC.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{comments-AGBNSJJH.js.map → comments-JEO6HHVM.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{comments-CJWXQI7X.js.map → comments-YT2PQ5DD.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{create-ATONSAZW.js.map → create-4DS2QWQC.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{create-WYFKN2U4.js.map → create-CF7EVRX7.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{delete-ZXWC56WO.js.map → delete-KR4VBWVE.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{delete-RONNH4F4.js.map → delete-XLZRTRKR.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{deps-WII3O4HB.js.map → deps-2YTXD3VM.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{deps-EHXIFOZR.js.map → deps-GZMFMTGS.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{docs-PDREIMLS.js.map → docs-SLROFEQ4.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{docs-JMVCFNHH.js.map → docs-ZHISRR2D.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{extension-G6UXSM5S.js.map → extension-3C7OOI4F.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{extension-B4ROVWJD.js.map → extension-XYCUXICD.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{files-2PN7UM2D.js.map → files-FUWF2FYJ.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{files-MXYS5W4M.js.map → files-J4I5IU4O.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{history-FLZIP7PM.js.map → history-SDAWYZR3.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{history-6FC4H6HI.js.map → history-YDUEILKP.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{history-redact-SSZBAD76.js.map → history-redact-EPJ7GENL.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{history-redact-XKYEZDBL.js.map → history-redact-KASLLPE7.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{history-repair-X7CO5JJZ.js.map → history-repair-IJ7LLBET.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{history-repair-KC5ZOJRZ.js.map → history-repair-YNESJRT6.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{init-KHX3FEEM.js.map → init-IGSS4GNH.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{init-6MRFVOLH.js.map → init-YHVBTEET.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{learnings-DCX55BNX.js.map → learnings-4YBMIVCZ.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{learnings-A3CLB5CO.js.map → learnings-T4PF24YN.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{list-DBRECOG4.js.map → list-3KEVBOYW.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{list-53LZ2AEO.js.map → list-E44O2K64.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{notes-42LIC3UE.js.map → notes-FLUCNJSH.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{notes-P5O3VMQ3.js.map → notes-GJKALVZM.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{plan-HDQXEUKD.js.map → plan-T5MMZLI3.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{plan-IGTE3WOJ.js.map → plan-YYMIL3HV.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{restore-2XVTBLKQ.js.map → restore-DDJGVZIN.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{restore-JL5QIH7H.js.map → restore-SJSASGZP.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{schema-V6BX65Q2.js.map → schema-B7NQ6XVP.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{schema-LVXZWFGY.js.map → schema-HEGYH6CE.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{test-OFYONO3C.js.map → test-IIELLSZX.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{test-RJ4ZF35X.js.map → test-ML5RLWXE.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{test-runs-IPOPFOAF.js.map → test-runs-5FEMBV3A.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{test-runs-L2M7WKH7.js.map → test-runs-RNKZ37PS.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{update-PYLVHMRD.js.map → update-6C67X4KS.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{update-6YEHPVXH.js.map → update-VF26YPT3.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{update-many-322CCH2L.js.map → update-many-BSZZZYXY.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{update-many-DYWGW57M.js.map → update-many-BWKJJEBF.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../core/config/positional-value.ts","../../../../../../../../core/config/nested-settings.ts","../../../../../../../../cli/commands/config.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 routable: true;\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 routable: true;\n flag: \"criterion\";\n /** Criteria-list flag (`--criterion`) value, supplied as a values array. */\n values: string[];\n}\n\nexport type ConfigPositionalRouted = ConfigPositionalScalarRouted | ConfigPositionalListRouted;\n\n/** A key whose value cannot be carried by a single positional (e.g. `context`). */\nexport interface ConfigPositionalNotRoutable {\n routable: false;\n /** Human/agent-facing reason + the flags to use instead. */\n reason: string;\n}\n\nexport type ConfigPositionalResult = ConfigPositionalRouted | ConfigPositionalNotRoutable;\n\n/** Canonical snake-case config keys this helper understands. */\ntype CanonicalConfigKey =\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<CanonicalConfigKey> = new Set<CanonicalConfigKey>([\"item_format\"]);\n\nconst CRITERIA_KEYS: ReadonlySet<CanonicalConfigKey> = new Set<CanonicalConfigKey>([\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<CanonicalConfigKey> = new Set<CanonicalConfigKey>([\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/**\n * Policy keys whose only valid values are enabled/disabled. For these we accept the\n * intuitive synonyms off/on/true/false. Other policy keys pass through unchanged so\n * their own validators report the precise allowed set.\n */\nconst ENABLED_DISABLED_POLICY_KEYS: ReadonlySet<CanonicalConfigKey> = new Set<CanonicalConfigKey>([\n \"governance_require_close_reason\",\n \"governance_force_required_for_stale_lock\",\n \"test_result_tracking\",\n \"telemetry_tracking\",\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): CanonicalConfigKey | undefined {\n const normalized = keyOrAlias.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (\n FORMAT_KEYS.has(normalized as CanonicalConfigKey) ||\n CRITERIA_KEYS.has(normalized as CanonicalConfigKey) ||\n POLICY_KEYS.has(normalized as CanonicalConfigKey) ||\n normalized === \"context\"\n ) {\n return normalized as CanonicalConfigKey;\n }\n return undefined;\n}\n\n/**\n * Map an enabled/disabled-style value through its synonyms (case-insensitive). Values\n * that are not synonyms pass through unchanged so the downstream validator can reject\n * them with its own message.\n */\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) ? normalizeEnabledDisabled(value) : value;\n return { routable: true, flag: \"policy\", value: policyValue };\n}\n","/**\n * Nested leaf settings exposed via `pm config <scope> set/get <key> <value>`.\n *\n * These are simple string/number leaves of {@link PmSettings} (provider URLs,\n * vector-store adapter, search tuning) that previously required hand-editing\n * `.agents/pm/settings.json`. They live here so the same dotted path is\n * documented in one place and surfaced both to the config dispatcher and to\n * `pm config list` (so `pm config list --json` is discoverable).\n *\n * Shape conventions:\n * - `path` is the dotted JSON path in {@link PmSettings} (e.g. `search.provider`).\n * - `kind` is the value shape: \"string\" | \"boolean\" | \"integer\" | \"number\" | \"ratio\"\n * - \"ratio\" must be a finite number in [0, 1].\n * - \"integer\" must be a finite non-negative integer. Set `min: 1` for keys\n * where the runtime silently falls back when 0 is supplied (e.g. batch\n * size, timeout, max-results limits).\n * - \"number\" must be a finite number — negatives ARE allowed (e.g. score\n * thresholds may legitimately be negative when a provider normalizes\n * scores into a signed range).\n *\n * Adding a key here makes it acceptable to `pm config <scope> set <key> <value>`\n * with no other code changes — the dispatcher walks the dotted path on the\n * already-validated PmSettings shape.\n */\n\nexport type NestedSettingKind = \"string\" | \"boolean\" | \"integer\" | \"number\" | \"ratio\";\n\nexport interface NestedSettingDescriptor {\n /** CLI key (snake_case). Kebab-case form is accepted by normalizing `-` → `_`. */\n key: string;\n /** Dotted JSON path in PmSettings. */\n path: string;\n /** Value shape. */\n kind: NestedSettingKind;\n /** Short human-facing summary for `pm config list`. */\n summary: string;\n /** Optional accepted values for string settings. */\n choices?: readonly string[];\n /** Require a non-empty trimmed string value for string settings. */\n non_empty?: boolean;\n /**\n * Optional minimum value for `integer` / `number` kinds. When set,\n * `parseNestedSettingValue` rejects values strictly below `min`. Useful for\n * settings where 0 would be silently ignored by the runtime (batch sizes,\n * timeouts, max-results limits).\n */\n min?: number;\n}\n\n/**\n * Search/provider/vector-store leaves. Order is the display order in\n * `pm config list` and in error hints.\n */\nexport const NESTED_SETTING_DESCRIPTORS: readonly NestedSettingDescriptor[] = [\n {\n key: \"search_provider\",\n path: \"search.provider\",\n kind: \"string\",\n summary: \"Search embedding provider name (e.g. openai, ollama, or an extension provider).\",\n },\n {\n key: \"search_mutation_refresh_policy\",\n path: \"search.mutation_refresh_policy\",\n kind: \"string\",\n choices: [\"cache_only\", \"semantic_configured\", \"semantic_auto\"],\n summary: \"Mutation-time search refresh policy: cache_only, semantic_configured, or semantic_auto.\",\n },\n {\n key: \"search_query_expansion_enabled\",\n path: \"search.query_expansion.enabled\",\n kind: \"boolean\",\n summary: \"Enable or disable query expansion for semantic/hybrid search.\",\n },\n {\n key: \"search_query_expansion_provider\",\n path: \"search.query_expansion.provider\",\n kind: \"string\",\n summary: \"Query expansion provider name (built-in openai/ollama or extension provider).\",\n },\n {\n key: \"search_rerank_enabled\",\n path: \"search.rerank.enabled\",\n kind: \"boolean\",\n summary: \"Enable or disable post-retrieval reranking for hybrid search.\",\n },\n {\n key: \"search_rerank_model\",\n path: \"search.rerank.model\",\n kind: \"string\",\n summary: \"Rerank model name override used by built-in providers.\",\n },\n {\n key: \"search_rerank_top_k\",\n path: \"search.rerank.top_k\",\n kind: \"integer\",\n min: 1,\n summary: \"Number of top hybrid candidates to rerank when rerank is enabled.\",\n },\n {\n key: \"search_embedding_model\",\n path: \"search.embedding_model\",\n kind: \"string\",\n summary: \"Default embedding model name (overrides provider-specific model when set).\",\n },\n {\n key: \"search_embedding_corpus_max_characters\",\n path: \"search.embedding_corpus_max_characters\",\n kind: \"integer\",\n min: 1,\n summary: \"Maximum semantic corpus characters per item before truncation.\",\n },\n {\n key: \"search_embedding_batch_size\",\n path: \"search.embedding_batch_size\",\n kind: \"integer\",\n min: 1,\n summary: \"Number of items embedded per request batch.\",\n },\n {\n key: \"search_embedding_timeout_ms\",\n path: \"search.embedding_timeout_ms\",\n kind: \"integer\",\n min: 1,\n summary: \"Per-request embedding timeout in milliseconds.\",\n },\n {\n key: \"search_score_threshold\",\n path: \"search.score_threshold\",\n kind: \"number\",\n summary: \"Minimum score for a hit to be returned (0 keeps all matches).\",\n },\n {\n key: \"search_hybrid_semantic_weight\",\n path: \"search.hybrid_semantic_weight\",\n kind: \"ratio\",\n summary: \"Hybrid mode semantic weight in [0, 1] (1-weight goes to keyword).\",\n },\n {\n key: \"search_max_results\",\n path: \"search.max_results\",\n kind: \"integer\",\n min: 1,\n summary: \"Default upper bound on search hits when --limit is not supplied.\",\n },\n {\n key: \"openai_base_url\",\n path: \"providers.openai.base_url\",\n kind: \"string\",\n summary: \"OpenAI-compatible API base URL (LM Studio/vLLM also use this).\",\n },\n {\n key: \"openai_api_key\",\n path: \"providers.openai.api_key\",\n kind: \"string\",\n summary: \"OpenAI-compatible API key.\",\n },\n {\n key: \"openai_model\",\n path: \"providers.openai.model\",\n kind: \"string\",\n summary: \"OpenAI-compatible embedding model name.\",\n },\n {\n key: \"ollama_base_url\",\n path: \"providers.ollama.base_url\",\n kind: \"string\",\n summary: \"Ollama API base URL (typically http://localhost:11434).\",\n },\n {\n key: \"ollama_model\",\n path: \"providers.ollama.model\",\n kind: \"string\",\n summary: \"Ollama embedding model name (e.g. nomic-embed-text).\",\n },\n {\n key: \"vector_store_adapter\",\n path: \"vector_store.adapter\",\n kind: \"string\",\n summary: \"Vector store adapter name (lancedb, qdrant, or an extension adapter).\",\n },\n {\n key: \"vector_store_collection_name\",\n path: \"vector_store.collection_name\",\n kind: \"string\",\n non_empty: true,\n summary: \"Vector collection/table name shared by Qdrant and LanceDB adapters.\",\n },\n {\n key: \"qdrant_url\",\n path: \"vector_store.qdrant.url\",\n kind: \"string\",\n summary: \"Qdrant HTTP API URL.\",\n },\n {\n key: \"qdrant_api_key\",\n path: \"vector_store.qdrant.api_key\",\n kind: \"string\",\n summary: \"Qdrant API key (empty if running unauthenticated).\",\n },\n {\n key: \"lancedb_path\",\n path: \"vector_store.lancedb.path\",\n kind: \"string\",\n summary: \"LanceDB storage path (relative to pm root or absolute).\",\n },\n];\n\nconst DESCRIPTOR_BY_KEY: ReadonlyMap<string, NestedSettingDescriptor> = new Map(\n NESTED_SETTING_DESCRIPTORS.map((descriptor) => [descriptor.key, descriptor]),\n);\n\n/** Canonical CLI keys (in declaration order). */\nexport const NESTED_SETTING_KEYS: readonly string[] = NESTED_SETTING_DESCRIPTORS.map(\n (descriptor) => descriptor.key,\n);\n\n/**\n * Map a raw user-supplied key (kebab or snake case, any casing) onto a known\n * nested-leaf descriptor. Returns `undefined` when the key is not a nested\n * leaf (callers can then fall back to the regular ConfigKey path).\n */\nexport function resolveNestedSettingDescriptor(raw: string | undefined): NestedSettingDescriptor | undefined {\n if (typeof raw !== \"string\") {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized.length === 0) {\n return undefined;\n }\n return DESCRIPTOR_BY_KEY.get(normalized);\n}\n\n/** Recoverable parsed value with the descriptor it satisfied. */\nexport interface NestedSettingParsedValue {\n descriptor: NestedSettingDescriptor;\n value: string | number | boolean;\n}\n\n/** Throwable validation error returned as a structured result. */\nexport interface NestedSettingParseError {\n message: string;\n}\n\nexport type NestedSettingParseResult =\n | { ok: true; parsed: NestedSettingParsedValue }\n | { ok: false; error: NestedSettingParseError };\n\n/**\n * Validate and coerce a raw string value for a nested-leaf setting. The\n * returned value is the typed leaf that should be written into PmSettings.\n *\n * Empty strings are allowed for \"string\" leaves unless `non_empty` is set.\n */\nexport function parseNestedSettingValue(\n descriptor: NestedSettingDescriptor,\n rawValue: string,\n): NestedSettingParseResult {\n if (typeof rawValue !== \"string\") {\n return { ok: false, error: { message: `Config set ${descriptor.key} requires a string value` } };\n }\n const trimmed = rawValue.trim();\n if (descriptor.kind === \"boolean\") {\n const normalized = trimmed.toLowerCase();\n if (normalized === \"true\" || normalized === \"1\" || normalized === \"yes\" || normalized === \"on\") {\n return { ok: true, parsed: { descriptor, value: true } };\n }\n if (normalized === \"false\" || normalized === \"0\" || normalized === \"no\" || normalized === \"off\") {\n return { ok: true, parsed: { descriptor, value: false } };\n }\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} requires a boolean value (true|false), got \"${rawValue}\"`,\n },\n };\n }\n if (descriptor.kind === \"string\") {\n if (descriptor.non_empty === true && trimmed.length === 0) {\n return {\n ok: false,\n error: { message: `Config set ${descriptor.key} requires a non-empty value` },\n };\n }\n if (descriptor.choices && !descriptor.choices.includes(trimmed)) {\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} must be one of ${descriptor.choices.join(\"|\")}, got \"${rawValue}\"`,\n },\n };\n }\n return { ok: true, parsed: { descriptor, value: trimmed } };\n }\n\n // Number(\"\") === 0, which would silently accept empty / whitespace-only input\n // as a valid zero. Reject explicitly so misconfigurations don't slip through.\n if (trimmed.length === 0) {\n return {\n ok: false,\n error: { message: `Config set ${descriptor.key} requires a non-empty value` },\n };\n }\n\n const parsed = Number(trimmed);\n if (!Number.isFinite(parsed)) {\n return {\n ok: false,\n error: { message: `Config set ${descriptor.key} requires a finite number, got \"${rawValue}\"` },\n };\n }\n if (descriptor.kind === \"integer\") {\n if (!Number.isInteger(parsed) || parsed < 0) {\n return {\n ok: false,\n error: { message: `Config set ${descriptor.key} requires a non-negative integer, got \"${rawValue}\"` },\n };\n }\n if (descriptor.min !== undefined && parsed < descriptor.min) {\n return {\n ok: false,\n error: {\n message: `Config set ${descriptor.key} requires an integer >= ${descriptor.min}, got \"${rawValue}\" (the runtime silently ignores 0 here and falls back to the default)`,\n },\n };\n }\n return { ok: true, parsed: { descriptor, value: parsed } };\n }\n if (descriptor.kind === \"ratio\") {\n if (parsed < 0 || parsed > 1) {\n return {\n ok: false,\n error: { message: `Config set ${descriptor.key} requires a number in [0, 1], got \"${rawValue}\"` },\n };\n }\n return { ok: true, parsed: { descriptor, value: parsed } };\n }\n // kind === \"number\" — negatives are allowed; only apply an explicit `min`.\n if (descriptor.min !== undefined && parsed < descriptor.min) {\n return {\n ok: false,\n error: { message: `Config set ${descriptor.key} requires a number >= ${descriptor.min}, got \"${rawValue}\"` },\n };\n }\n return { ok: true, parsed: { descriptor, value: parsed } };\n}\n\n/** Walk a dotted path on an arbitrary record (best-effort, returns null on miss). */\nexport function readNestedSettingValue(\n settings: unknown,\n descriptor: NestedSettingDescriptor,\n): string | number | boolean | null {\n const segments = descriptor.path.split(\".\");\n let cursor: unknown = settings;\n for (const segment of segments) {\n if (typeof cursor !== \"object\" || cursor === null) {\n return null;\n }\n cursor = (cursor as Record<string, unknown>)[segment];\n }\n if (typeof cursor === \"string\" || typeof cursor === \"number\" || typeof cursor === \"boolean\") {\n return cursor;\n }\n return null;\n}\n\n/**\n * Set a leaf value on a settings object by walking the descriptor's dotted\n * path. Missing intermediate objects are created. Returns `true` when the\n * value actually changed.\n */\nexport function writeNestedSettingValue(\n settings: Record<string, unknown>,\n descriptor: NestedSettingDescriptor,\n value: string | number | boolean,\n): boolean {\n const segments = descriptor.path.split(\".\");\n let cursor: Record<string, unknown> = settings;\n for (let index = 0; index < segments.length - 1; index += 1) {\n const segment = segments[index];\n const existing = cursor[segment];\n if (typeof existing !== \"object\" || existing === null || Array.isArray(existing)) {\n const next: Record<string, unknown> = {};\n cursor[segment] = next;\n cursor = next;\n } else {\n cursor = existing as Record<string, unknown>;\n }\n }\n const leafKey = segments[segments.length - 1];\n const previous = cursor[leafKey];\n if (previous === value) {\n return false;\n }\n cursor[leafKey] = value;\n return true;\n}\n","import { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { resolveConfigPositionalValue } 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 { resolveItemTypeRegistry, resolveTypeName } from \"../../core/item/type-registry.js\";\nimport { buildInvalidTypeError } from \"../../core/schema/item-types-file.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 { readSettingsWithMetadata, writeSettings } from \"../../core/store/settings.js\";\nimport type {\n ContextDepth,\n GovernanceCloseValidationDefault,\n GovernanceCreateModeDefault,\n GovernanceOwnershipEnforcement,\n GovernancePreset,\n GovernanceWorkflowEnforcement,\n ItemFormat,\n ParentReferencePolicy,\n SprintReleaseFormatPolicy,\n ValidateMetadataProfile,\n ValidateMetadataRequiredField,\n} from \"../../types/index.js\";\nimport { CONTEXT_DEPTH_VALUES, CONTEXT_SECTION_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 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\";\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\nexport interface ConfigCommandOptions {\n criterion?: string[];\n format?: string;\n policy?: string;\n value?: string;\n clearCriteria?: boolean;\n defaultDepth?: string;\n activityLimit?: string;\n staleThresholdDays?: string;\n sectionHierarchy?: string;\n sectionActivity?: string;\n sectionProgress?: string;\n sectionBlockers?: string;\n sectionFiles?: string;\n sectionWorkload?: string;\n sectionStaleness?: string;\n sectionTests?: string;\n}\n\nexport interface NestedSettingResultValue {\n key: string;\n path: string;\n kind: NestedSettingDescriptor[\"kind\"];\n value: string | number | boolean | null;\n}\n\nexport interface ConfigResult {\n scope: ConfigScope;\n key?: ConfigKey | string;\n criteria?: string[];\n format?: ItemFormat;\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 nested_setting?: NestedSettingResultValue;\n nested_settings?: NestedSettingResultValue[];\n keys?: ConfigKeyDescriptor[];\n values?: Record<ConfigKey, ConfigValue>;\n count?: number;\n context_settings?: ContextConfigValue;\n has_explicit_item_format?: boolean;\n migration?: {\n target_format: ItemFormat;\n scanned: number;\n migrated: string[];\n removed: string[];\n warnings: string[];\n };\n settings_path: string;\n changed: boolean;\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: [\"history-missing-stream-policy\", \"history_missing_stream_policy\"],\n sprint_release_format_policy: [\"sprint-release-format-policy\", \"sprint_release_format_policy\"],\n parent_reference_policy: [\"parent-reference-policy\", \"parent_reference_policy\"],\n metadata_validation_profile: [\"metadata-validation-profile\", \"metadata_validation_profile\"],\n metadata_required_fields: [\"metadata-required-fields\", \"metadata_required_fields\"],\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: [\"governance-ownership-enforcement\", \"governance_ownership_enforcement\"],\n governance_create_mode_default: [\"governance-create-mode-default\", \"governance_create_mode_default\"],\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: [\"governance-create-default-type\", \"governance_create_default_type\"],\n governance_workflow_enforcement: [\"governance-workflow-enforcement\", \"governance_workflow_enforcement\"],\n governance_parent_reference_policy: [\"governance-parent-reference-policy\", \"governance_parent_reference_policy\"],\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[] = (Object.keys(CONFIG_KEY_ALIASES) as ConfigKey[]).map(\n (candidate) => CONFIG_KEY_ALIASES[candidate][0],\n);\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: \"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: \"Governance preset policy (minimal|default|strict|custom).\",\n governance_ownership_enforcement: \"Governance ownership enforcement policy (none|warn|strict).\",\n governance_create_mode_default: \"Governance default create mode (progressive|strict).\",\n governance_close_validation_default: \"Governance default close validation mode (off|warn|strict).\",\n governance_require_close_reason: \"Governance close-reason requirement policy (enabled|disabled).\",\n governance_create_default_type: \"Governance default item type for `pm create` when --type is omitted.\",\n governance_workflow_enforcement: \"Governance per-type transition enforcement mode (off|warn|strict).\",\n governance_parent_reference_policy: \"Governance parent reference policy (warn|strict_error).\",\n governance_metadata_validation_profile: \"Governance metadata validation profile (core|strict|custom).\",\n governance_force_required_for_stale_lock: \"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: ConfigKey[] = [\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\nfunction isCriteriaConfigKey(key: ConfigKey): boolean {\n return key === \"definition_of_done\" || key === \"metadata_required_fields\" || LIFECYCLE_PATTERN_CONFIG_KEYS.includes(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 (value === \"get\" || value === \"set\" || value === \"list\" || value === \"export\") {\n return value;\n }\n throw new PmCliError(`Invalid config action \"${value}\". Allowed: get, set, list, export`, EXIT_CODE.USAGE);\n}\n\nfunction normalizeKey(value: string): ConfigKey {\n if ((CONFIG_KEY_VALUES as readonly string[]).includes(value)) {\n if (value === \"item-format\" || value === \"item_format\") {\n return \"item_format\";\n }\n if (value === \"history-missing-stream-policy\" || value === \"history_missing_stream_policy\") {\n return \"history_missing_stream_policy\";\n }\n if (value === \"sprint-release-format-policy\" || value === \"sprint_release_format_policy\") {\n return \"sprint_release_format_policy\";\n }\n if (value === \"parent-reference-policy\" || value === \"parent_reference_policy\") {\n return \"parent_reference_policy\";\n }\n if (value === \"metadata-validation-profile\" || value === \"metadata_validation_profile\") {\n return \"metadata_validation_profile\";\n }\n if (value === \"metadata-required-fields\" || value === \"metadata_required_fields\") {\n return \"metadata_required_fields\";\n }\n if (\n value === \"lifecycle-stale-blocker-reason-patterns\" ||\n value === \"lifecycle_stale_blocker_reason_patterns\"\n ) {\n return \"lifecycle_stale_blocker_reason_patterns\";\n }\n if (\n value === \"lifecycle-closure-like-blocked-reason-patterns\" ||\n value === \"lifecycle_closure_like_blocked_reason_patterns\"\n ) {\n return \"lifecycle_closure_like_blocked_reason_patterns\";\n }\n if (\n value === \"lifecycle-closure-like-resolution-patterns\" ||\n value === \"lifecycle_closure_like_resolution_patterns\"\n ) {\n return \"lifecycle_closure_like_resolution_patterns\";\n }\n if (\n value === \"lifecycle-closure-like-actual-result-patterns\" ||\n value === \"lifecycle_closure_like_actual_result_patterns\"\n ) {\n return \"lifecycle_closure_like_actual_result_patterns\";\n }\n if (value === \"governance-preset\" || value === \"governance_preset\") {\n return \"governance_preset\";\n }\n if (value === \"governance-ownership-enforcement\" || value === \"governance_ownership_enforcement\") {\n return \"governance_ownership_enforcement\";\n }\n if (value === \"governance-create-mode-default\" || value === \"governance_create_mode_default\") {\n return \"governance_create_mode_default\";\n }\n if (value === \"governance-close-validation-default\" || value === \"governance_close_validation_default\") {\n return \"governance_close_validation_default\";\n }\n if (value === \"governance-require-close-reason\" || value === \"governance_require_close_reason\") {\n return \"governance_require_close_reason\";\n }\n if (value === \"governance-create-default-type\" || value === \"governance_create_default_type\") {\n return \"governance_create_default_type\";\n }\n if (value === \"governance-workflow-enforcement\" || value === \"governance_workflow_enforcement\") {\n return \"governance_workflow_enforcement\";\n }\n if (value === \"governance-parent-reference-policy\" || value === \"governance_parent_reference_policy\") {\n return \"governance_parent_reference_policy\";\n }\n if (\n value === \"governance-metadata-validation-profile\" ||\n value === \"governance_metadata_validation_profile\"\n ) {\n return \"governance_metadata_validation_profile\";\n }\n if (\n value === \"governance-force-required-for-stale-lock\" ||\n value === \"governance_force_required_for_stale_lock\"\n ) {\n return \"governance_force_required_for_stale_lock\";\n }\n if (value === \"test-result-tracking\" || value === \"test_result_tracking\") {\n return \"test_result_tracking\";\n }\n if (value === \"telemetry-tracking\" || value === \"telemetry_tracking\") {\n return \"telemetry_tracking\";\n }\n if (value === \"context\") {\n return \"context\";\n }\n return \"definition_of_done\";\n }\n const nestedKeys = NESTED_SETTING_DESCRIPTORS.map((descriptor) => descriptor.key).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(values: string[] | undefined, clearCriteria: boolean | undefined): string[] {\n const normalized = [...new Set((values ?? []).map((value) => value.trim()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\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(\"Config set item-format requires --format toon\", EXIT_CODE.USAGE);\n}\n\nfunction normalizeHistoryMissingStreamPolicy(value: string | undefined): 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(value: string | undefined): 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(value: string | undefined): 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(value: string | undefined): ValidateMetadataProfile {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized === \"core\" || normalized === \"strict\" || normalized === \"custom\") {\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(value: string | undefined): GovernancePreset {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized === \"minimal\" || normalized === \"default\" || normalized === \"strict\" || normalized === \"custom\") {\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(value: string | undefined): GovernanceOwnershipEnforcement {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized === \"none\" || normalized === \"warn\" || normalized === \"strict\") {\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(value: string | undefined): 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(value: string | undefined): GovernanceCloseValidationDefault {\n const normalized = value?.trim().toLowerCase().replaceAll(\"-\", \"_\");\n if (normalized === \"off\" || normalized === \"warn\" || normalized === \"strict\") {\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(value: unknown): GovernanceWorkflowEnforcement {\n const normalized =\n typeof value === \"string\" ? value.trim().toLowerCase().replaceAll(\"-\", \"_\") : undefined;\n if (normalized === \"off\" || normalized === \"warn\" || normalized === \"strict\") {\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(key: ConfigKey | undefined, value: string): 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<string, ValidateMetadataRequiredField> = {\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 = [...new Set((values ?? []).map((value) => value.trim()).filter((value) => value.length > 0))];\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) => value.toLowerCase().replaceAll(\"-\", \"_\"));\n const unsupported = lowered.filter((value) => METADATA_REQUIRED_FIELD_ALIAS_MAP[value] === undefined);\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 [...new Set(lowered.map((value) => METADATA_REQUIRED_FIELD_ALIAS_MAP[value] as ValidateMetadataRequiredField))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nfunction normalizeLifecyclePatternCriteria(\n key: ConfigKey,\n values: string[] | undefined,\n clearCriteria: boolean | undefined,\n): string[] {\n const normalized = [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\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(action: ConfigAction, value: string | undefined): ConfigKey | undefined {\n if (action === \"list\" || action === \"export\") {\n if (typeof value === \"string\" && value.trim().length > 0) {\n throw new PmCliError(`Config action \"${action}\" does not accept <key>`, EXIT_CODE.USAGE);\n }\n return undefined;\n }\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new PmCliError(`Config action \"${action}\" requires <key>`, EXIT_CODE.USAGE);\n }\n return normalizeKey(value);\n}\n\nfunction readConfigValue(settings: {\n workflow: { definition_of_done: string[] };\n item_format: ItemFormat;\n history: { missing_stream: HistoryMissingStreamPolicy };\n validation: {\n sprint_release_format: SprintReleaseFormatPolicy;\n parent_reference: ParentReferencePolicy;\n metadata_profile: ValidateMetadataProfile;\n metadata_required_fields: ValidateMetadataRequiredField[];\n lifecycle_stale_blocker_reason_patterns: string[];\n lifecycle_closure_like_blocked_reason_patterns: string[];\n lifecycle_closure_like_resolution_patterns: string[];\n lifecycle_closure_like_actual_result_patterns: string[];\n };\n governance: {\n preset: GovernancePreset;\n ownership_enforcement: GovernanceOwnershipEnforcement;\n create_mode_default: GovernanceCreateModeDefault;\n close_validation_default: GovernanceCloseValidationDefault;\n require_close_reason: boolean;\n parent_reference: ParentReferencePolicy;\n metadata_profile: ValidateMetadataProfile;\n force_required_for_stale_lock: boolean;\n create_default_type?: string;\n workflow_enforcement?: GovernanceWorkflowEnforcement;\n };\n testing: { record_results_to_items: boolean };\n telemetry: { enabled: boolean };\n context: import(\"../../types/index.js\").ContextSettings;\n}, key: ConfigKey): ConfigValue {\n if (key === \"item_format\") {\n return settings.item_format;\n }\n if (key === \"history_missing_stream_policy\") {\n return settings.history.missing_stream;\n }\n if (key === \"sprint_release_format_policy\") {\n return settings.validation.sprint_release_format;\n }\n if (key === \"parent_reference_policy\") {\n return settings.validation.parent_reference;\n }\n if (key === \"metadata_validation_profile\") {\n return settings.validation.metadata_profile;\n }\n if (key === \"metadata_required_fields\") {\n return [...settings.validation.metadata_required_fields];\n }\n if (key === \"lifecycle_stale_blocker_reason_patterns\") {\n return [...settings.validation.lifecycle_stale_blocker_reason_patterns];\n }\n if (key === \"lifecycle_closure_like_blocked_reason_patterns\") {\n return [...settings.validation.lifecycle_closure_like_blocked_reason_patterns];\n }\n if (key === \"lifecycle_closure_like_resolution_patterns\") {\n return [...settings.validation.lifecycle_closure_like_resolution_patterns];\n }\n if (key === \"lifecycle_closure_like_actual_result_patterns\") {\n return [...settings.validation.lifecycle_closure_like_actual_result_patterns];\n }\n if (key === \"governance_preset\") {\n return settings.governance.preset;\n }\n if (key === \"governance_ownership_enforcement\") {\n return settings.governance.ownership_enforcement;\n }\n if (key === \"governance_create_mode_default\") {\n return settings.governance.create_mode_default;\n }\n if (key === \"governance_close_validation_default\") {\n return settings.governance.close_validation_default;\n }\n if (key === \"governance_require_close_reason\") {\n return settings.governance.require_close_reason ? \"enabled\" : \"disabled\";\n }\n if (key === \"governance_create_default_type\") {\n return settings.governance.create_default_type ?? \"\";\n }\n if (key === \"governance_workflow_enforcement\") {\n return settings.governance.workflow_enforcement ?? \"off\";\n }\n if (key === \"governance_parent_reference_policy\") {\n return settings.governance.parent_reference;\n }\n if (key === \"governance_metadata_validation_profile\") {\n return settings.governance.metadata_profile;\n }\n if (key === \"governance_force_required_for_stale_lock\") {\n return settings.governance.force_required_for_stale_lock ? \"enabled\" : \"disabled\";\n }\n if (key === \"test_result_tracking\") {\n return settings.testing.record_results_to_items ? \"enabled\" : \"disabled\";\n }\n if (key === \"telemetry_tracking\") {\n return settings.telemetry.enabled ? \"enabled\" : \"disabled\";\n }\n if (key === \"context\") {\n return {\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 } satisfies ContextConfigValue;\n }\n return [...settings.workflow.definition_of_done];\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 = scope === \"project\" ? resolvePmRoot(cwd, global.path) : resolveGlobalPmRoot(cwd);\n const settingsPath = getSettingsPath(pmRoot);\n if (scope === \"project\" && !(await pathExists(settingsPath))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\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 (normalized === \"true\" || normalized === \"enabled\" || normalized === \"on\" || normalized === \"1\") return true;\n if (normalized === \"false\" || normalized === \"disabled\" || normalized === \"off\" || normalized === \"0\") 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: import(\"../../types/index.js\").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(\"Context --activity-limit must be a positive integer\", EXIT_CODE.USAGE);\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(\"Context --stale-threshold-days must be a positive integer\", EXIT_CODE.USAGE);\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 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 }, warnings);\n}\n\n/**\n * Route an intuitive `pm config set <key> <value>` positional value onto the typed\n * flag it belongs to (--format/--policy/--criterion), applying enabled/disabled\n * synonyms. Returns the (possibly augmented) options. The typed-flag forms keep\n * working exactly as before: a positional value is only injected when its flag was\n * not already supplied, and a conflicting explicit flag is a clear error.\n */\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('Config action \"set\" requires <key> before a positional <value>.', EXIT_CODE.USAGE);\n }\n\n if (nestedSetting) {\n if (options.value !== undefined && valueValue !== 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 // Pick whichever was supplied; do not overwrite a present --value with undefined.\n return { ...options, value: valueValue ?? options.value };\n }\n\n const routed = resolveConfigPositionalValue(normalizedKey ?? keyValue, 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 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 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\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 // Nested leaf settings (search/provider/vector-store) are detected before\n // normalizeKey so they bypass the ConfigKey union without breaking the\n // existing key-not-found error path for actually-unknown keys.\n const nestedSetting =\n (action === \"get\" || action === \"set\") ? resolveNestedSettingDescriptor(keyValue) : undefined;\n const key = nestedSetting ? undefined : normalizeKeyForAction(action, keyValue);\n options = applyPositionalValue(action, keyValue, key, nestedSetting, valueValue, options);\n const target = await resolveSettingsTarget(scope, global);\n const { settings, metadata, warnings: settingsReadWarnings } = await readSettingsWithMetadata(target.pmRoot);\n const warnings = normalizeWarnings(settingsReadWarnings);\n\n if (nestedSetting) {\n if (action === \"get\") {\n const currentValue = readNestedSettingValue(settings, nestedSetting);\n return withWarnings(\n {\n 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: target.settingsPath,\n changed: false,\n },\n warnings,\n );\n }\n // action === \"set\"\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 ${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 settings as unknown as Record<string, unknown>,\n nestedSetting,\n parsed.parsed.value,\n );\n if (changed) {\n await writeSettings(target.pmRoot, settings, `config:set:${nestedSetting.path}`);\n }\n return withWarnings(\n {\n 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: target.settingsPath,\n changed,\n },\n warnings,\n );\n }\n\n if (action === \"list\") {\n const keys = (Object.keys(CONFIG_KEY_ALIASES) as ConfigKey[]).map((candidate) => ({\n key: candidate,\n aliases: CONFIG_KEY_ALIASES[candidate],\n value_kind: candidate === \"context\"\n ? (\"object\" as const)\n : isCriteriaConfigKey(candidate) ? (\"string_array\" as const) : (\"enum\" as const),\n set_flags:\n candidate === \"context\"\n ? [\"--default-depth\", \"--activity-limit\", \"--stale-threshold-days\", \"--section-<name>\"]\n : isCriteriaConfigKey(candidate) ? [\"--criterion\", \"--clear-criteria\"] : candidate === \"item_format\" ? [\"--format\"] : [\"--policy\"],\n summary: CONFIG_KEY_SUMMARIES[candidate],\n value: readConfigValue(settings, candidate),\n }));\n const nestedSettings: NestedSettingResultValue[] = NESTED_SETTING_DESCRIPTORS.map((descriptor) => ({\n key: descriptor.key,\n path: descriptor.path,\n kind: descriptor.kind,\n value: readNestedSettingValue(settings, descriptor),\n }));\n return withWarnings(\n {\n scope,\n keys,\n nested_settings: nestedSettings,\n count: keys.length,\n settings_path: target.settingsPath,\n changed: false,\n },\n warnings,\n );\n }\n\n if (action === \"export\") {\n const values = {\n definition_of_done: readConfigValue(settings, \"definition_of_done\"),\n item_format: readConfigValue(settings, \"item_format\"),\n history_missing_stream_policy: readConfigValue(settings, \"history_missing_stream_policy\"),\n sprint_release_format_policy: readConfigValue(settings, \"sprint_release_format_policy\"),\n parent_reference_policy: readConfigValue(settings, \"parent_reference_policy\"),\n metadata_validation_profile: readConfigValue(settings, \"metadata_validation_profile\"),\n metadata_required_fields: readConfigValue(settings, \"metadata_required_fields\"),\n lifecycle_stale_blocker_reason_patterns: readConfigValue(settings, \"lifecycle_stale_blocker_reason_patterns\"),\n lifecycle_closure_like_blocked_reason_patterns: readConfigValue(\n settings,\n \"lifecycle_closure_like_blocked_reason_patterns\",\n ),\n lifecycle_closure_like_resolution_patterns: readConfigValue(settings, \"lifecycle_closure_like_resolution_patterns\"),\n lifecycle_closure_like_actual_result_patterns: readConfigValue(\n settings,\n \"lifecycle_closure_like_actual_result_patterns\",\n ),\n governance_preset: readConfigValue(settings, \"governance_preset\"),\n governance_ownership_enforcement: readConfigValue(settings, \"governance_ownership_enforcement\"),\n governance_create_mode_default: readConfigValue(settings, \"governance_create_mode_default\"),\n governance_close_validation_default: readConfigValue(settings, \"governance_close_validation_default\"),\n governance_require_close_reason: readConfigValue(settings, \"governance_require_close_reason\"),\n governance_create_default_type: readConfigValue(settings, \"governance_create_default_type\"),\n governance_workflow_enforcement: readConfigValue(settings, \"governance_workflow_enforcement\"),\n governance_parent_reference_policy: readConfigValue(settings, \"governance_parent_reference_policy\"),\n governance_metadata_validation_profile: readConfigValue(settings, \"governance_metadata_validation_profile\"),\n governance_force_required_for_stale_lock: readConfigValue(settings, \"governance_force_required_for_stale_lock\"),\n test_result_tracking: readConfigValue(settings, \"test_result_tracking\"),\n telemetry_tracking: readConfigValue(settings, \"telemetry_tracking\"),\n context: readConfigValue(settings, \"context\"),\n } satisfies Record<ConfigKey, ConfigValue>;\n return withWarnings(\n {\n scope,\n values,\n settings_path: target.settingsPath,\n changed: false,\n },\n warnings,\n );\n }\n\n if (action === \"get\") {\n if (!key) {\n throw new PmCliError('Config action \"get\" requires <key>', EXIT_CODE.USAGE);\n }\n if (key === \"item_format\") {\n return withWarnings({\n scope,\n key,\n format: settings.item_format,\n has_explicit_item_format: metadata.has_explicit_item_format,\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"history_missing_stream_policy\") {\n return withWarnings({\n scope,\n key,\n policy: settings.history.missing_stream,\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"sprint_release_format_policy\") {\n return withWarnings({\n scope,\n key,\n policy: settings.validation.sprint_release_format,\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"parent_reference_policy\") {\n return withWarnings({\n scope,\n key,\n policy: settings.validation.parent_reference,\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"metadata_validation_profile\") {\n return withWarnings({\n scope,\n key,\n policy: settings.validation.metadata_profile,\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"metadata_required_fields\") {\n return withWarnings({\n scope,\n key,\n criteria: [...settings.validation.metadata_required_fields],\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"lifecycle_stale_blocker_reason_patterns\") {\n return withWarnings({\n scope,\n key,\n criteria: [...settings.validation.lifecycle_stale_blocker_reason_patterns],\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"lifecycle_closure_like_blocked_reason_patterns\") {\n return withWarnings({\n scope,\n key,\n criteria: [...settings.validation.lifecycle_closure_like_blocked_reason_patterns],\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"lifecycle_closure_like_resolution_patterns\") {\n return withWarnings({\n scope,\n key,\n criteria: [...settings.validation.lifecycle_closure_like_resolution_patterns],\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"lifecycle_closure_like_actual_result_patterns\") {\n return withWarnings({\n scope,\n key,\n criteria: [...settings.validation.lifecycle_closure_like_actual_result_patterns],\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"governance_preset\") {\n return withWarnings({\n scope,\n key,\n policy: settings.governance.preset,\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"governance_ownership_enforcement\") {\n return withWarnings({\n scope,\n key,\n policy: settings.governance.ownership_enforcement,\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"governance_create_mode_default\") {\n return withWarnings({\n scope,\n key,\n policy: settings.governance.create_mode_default,\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"governance_close_validation_default\") {\n return withWarnings({\n scope,\n key,\n policy: settings.governance.close_validation_default,\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"governance_require_close_reason\") {\n return withWarnings({\n scope,\n key,\n policy: settings.governance.require_close_reason ? \"enabled\" : \"disabled\",\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"governance_create_default_type\") {\n return withWarnings({\n scope,\n key,\n policy: settings.governance.create_default_type ?? \"\",\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"governance_workflow_enforcement\") {\n return withWarnings({\n scope,\n key,\n policy: settings.governance.workflow_enforcement ?? \"off\",\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"governance_parent_reference_policy\") {\n return withWarnings({\n scope,\n key,\n policy: settings.governance.parent_reference,\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"governance_metadata_validation_profile\") {\n return withWarnings({\n scope,\n key,\n policy: settings.governance.metadata_profile,\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"governance_force_required_for_stale_lock\") {\n return withWarnings({\n scope,\n key,\n policy: settings.governance.force_required_for_stale_lock ? \"enabled\" : \"disabled\",\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"test_result_tracking\") {\n return withWarnings({\n scope,\n key,\n policy: settings.testing.record_results_to_items ? \"enabled\" : \"disabled\",\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"telemetry_tracking\") {\n return withWarnings({\n scope,\n key,\n policy: settings.telemetry.enabled ? \"enabled\" : \"disabled\",\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n if (key === \"context\") {\n return withWarnings({\n scope,\n key,\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 settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n return withWarnings({\n scope,\n key,\n criteria: [...settings.workflow.definition_of_done],\n settings_path: target.settingsPath,\n changed: false,\n }, warnings);\n }\n\n if (!key) {\n throw new PmCliError('Config action \"set\" requires <key>', EXIT_CODE.USAGE);\n }\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 const nextFormat = normalizeItemFormat(options.format);\n const changed = settings.item_format !== nextFormat || !metadata.has_explicit_item_format;\n let migration: ConfigResult[\"migration\"] = undefined;\n if (changed) {\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const migrated = await migrateItemFilesToFormat(\n target.pmRoot,\n nextFormat,\n \"config:set:item_format:migrate\",\n typeRegistry.type_to_folder,\n 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 settings.item_format = nextFormat;\n await writeSettings(target.pmRoot, settings, \"config:set:item_format\");\n }\n return withWarnings({\n scope,\n key,\n format: settings.item_format,\n has_explicit_item_format: true,\n migration,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"history_missing_stream_policy\") {\n const nextPolicy = normalizeHistoryMissingStreamPolicy(options.policy);\n const changed = settings.history.missing_stream !== nextPolicy;\n settings.history.missing_stream = nextPolicy;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:history_missing_stream_policy\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.history.missing_stream,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"sprint_release_format_policy\") {\n const nextPolicy = normalizeSprintReleaseFormatPolicy(options.policy);\n const changed = settings.validation.sprint_release_format !== nextPolicy;\n settings.validation.sprint_release_format = nextPolicy;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:sprint_release_format_policy\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.validation.sprint_release_format,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"parent_reference_policy\") {\n const nextPolicy = normalizeParentReferencePolicy(options.policy);\n const changed =\n settings.validation.parent_reference !== nextPolicy ||\n settings.governance.preset !== \"custom\" ||\n settings.governance.parent_reference !== nextPolicy;\n settings.validation.parent_reference = nextPolicy;\n settings.governance.preset = \"custom\";\n settings.governance.parent_reference = nextPolicy;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:parent_reference_policy\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.validation.parent_reference,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"metadata_validation_profile\") {\n const nextPolicy = normalizeValidateMetadataProfile(options.policy);\n const changed =\n settings.validation.metadata_profile !== nextPolicy ||\n settings.governance.preset !== \"custom\" ||\n settings.governance.metadata_profile !== nextPolicy;\n settings.validation.metadata_profile = nextPolicy;\n settings.governance.preset = \"custom\";\n settings.governance.metadata_profile = nextPolicy;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:metadata_validation_profile\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.validation.metadata_profile,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"metadata_required_fields\") {\n const nextCriteria = normalizeMetadataRequiredFields(options.criterion, options.clearCriteria);\n const changed =\n nextCriteria.length !== settings.validation.metadata_required_fields.length ||\n nextCriteria.some((value, index) => value !== settings.validation.metadata_required_fields[index]);\n settings.validation.metadata_required_fields = nextCriteria;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:metadata_required_fields\");\n }\n return withWarnings({\n scope,\n key,\n criteria: [...settings.validation.metadata_required_fields],\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"lifecycle_stale_blocker_reason_patterns\") {\n const nextCriteria = normalizeLifecyclePatternCriteria(key, options.criterion, options.clearCriteria);\n const changed =\n nextCriteria.length !== settings.validation.lifecycle_stale_blocker_reason_patterns.length ||\n nextCriteria.some((value, index) => value !== settings.validation.lifecycle_stale_blocker_reason_patterns[index]);\n settings.validation.lifecycle_stale_blocker_reason_patterns = nextCriteria;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:lifecycle_stale_blocker_reason_patterns\");\n }\n return withWarnings({\n scope,\n key,\n criteria: [...settings.validation.lifecycle_stale_blocker_reason_patterns],\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"lifecycle_closure_like_blocked_reason_patterns\") {\n const nextCriteria = normalizeLifecyclePatternCriteria(key, options.criterion, options.clearCriteria);\n const changed =\n nextCriteria.length !== settings.validation.lifecycle_closure_like_blocked_reason_patterns.length ||\n nextCriteria.some((value, index) => value !== settings.validation.lifecycle_closure_like_blocked_reason_patterns[index]);\n settings.validation.lifecycle_closure_like_blocked_reason_patterns = nextCriteria;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:lifecycle_closure_like_blocked_reason_patterns\");\n }\n return withWarnings({\n scope,\n key,\n criteria: [...settings.validation.lifecycle_closure_like_blocked_reason_patterns],\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"lifecycle_closure_like_resolution_patterns\") {\n const nextCriteria = normalizeLifecyclePatternCriteria(key, options.criterion, options.clearCriteria);\n const changed =\n nextCriteria.length !== settings.validation.lifecycle_closure_like_resolution_patterns.length ||\n nextCriteria.some((value, index) => value !== settings.validation.lifecycle_closure_like_resolution_patterns[index]);\n settings.validation.lifecycle_closure_like_resolution_patterns = nextCriteria;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:lifecycle_closure_like_resolution_patterns\");\n }\n return withWarnings({\n scope,\n key,\n criteria: [...settings.validation.lifecycle_closure_like_resolution_patterns],\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"lifecycle_closure_like_actual_result_patterns\") {\n const nextCriteria = normalizeLifecyclePatternCriteria(key, options.criterion, options.clearCriteria);\n const changed =\n nextCriteria.length !== settings.validation.lifecycle_closure_like_actual_result_patterns.length ||\n nextCriteria.some((value, index) => value !== settings.validation.lifecycle_closure_like_actual_result_patterns[index]);\n settings.validation.lifecycle_closure_like_actual_result_patterns = nextCriteria;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:lifecycle_closure_like_actual_result_patterns\");\n }\n return withWarnings({\n scope,\n key,\n criteria: [...settings.validation.lifecycle_closure_like_actual_result_patterns],\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"governance_preset\") {\n const nextPolicy = normalizeGovernancePreset(options.policy);\n const changed = settings.governance.preset !== nextPolicy;\n settings.governance.preset = nextPolicy;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:governance_preset\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.governance.preset,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"governance_ownership_enforcement\") {\n const nextPolicy = normalizeGovernanceOwnershipEnforcement(options.policy);\n const changed =\n settings.governance.preset !== \"custom\" || settings.governance.ownership_enforcement !== nextPolicy;\n settings.governance.preset = \"custom\";\n settings.governance.ownership_enforcement = nextPolicy;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:governance_ownership_enforcement\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.governance.ownership_enforcement,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"governance_create_mode_default\") {\n const nextPolicy = normalizeGovernanceCreateModeDefault(options.policy);\n const changed =\n settings.governance.preset !== \"custom\" || settings.governance.create_mode_default !== nextPolicy;\n settings.governance.preset = \"custom\";\n settings.governance.create_mode_default = nextPolicy;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:governance_create_mode_default\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.governance.create_mode_default,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"governance_close_validation_default\") {\n const nextPolicy = normalizeGovernanceCloseValidationDefault(options.policy);\n const changed =\n settings.governance.preset !== \"custom\" || settings.governance.close_validation_default !== nextPolicy;\n settings.governance.preset = \"custom\";\n settings.governance.close_validation_default = nextPolicy;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:governance_close_validation_default\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.governance.close_validation_default,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"governance_require_close_reason\") {\n const nextPolicy = normalizeGovernanceRequireCloseReasonPolicy(options.policy);\n const nextEnabled = nextPolicy === \"enabled\";\n const changed = settings.governance.require_close_reason !== nextEnabled;\n settings.governance.require_close_reason = nextEnabled;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:governance_require_close_reason\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.governance.require_close_reason ? \"enabled\" : \"disabled\",\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"governance_create_default_type\") {\n const policyProvided = typeof options.policy === \"string\";\n const rawType = policyProvided ? options.policy!.trim() : \"\";\n // An explicit empty value clears the setting back to \"unset\" (matching how\n // get/export expose unset as \"\"). Without this clear path there is no CLI\n // route back from a set value to the governance default.\n if (policyProvided && rawType.length === 0) {\n const changed = settings.governance.create_default_type !== undefined;\n delete settings.governance.create_default_type;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:governance_create_default_type\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.governance.create_default_type ?? \"\",\n settings_path: target.settingsPath,\n changed,\n }, warnings);\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 // create_default_type is preset-orthogonal: it tunes `pm create` and is\n // carried through writes regardless of preset, so we do NOT force preset=custom.\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const resolvedType = resolveTypeName(rawType, typeRegistry);\n if (!resolvedType) {\n throw new PmCliError(buildInvalidTypeError(rawType, typeRegistry.types), EXIT_CODE.USAGE);\n }\n const changed = settings.governance.create_default_type !== resolvedType;\n settings.governance.create_default_type = resolvedType;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:governance_create_default_type\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.governance.create_default_type,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"governance_workflow_enforcement\") {\n const nextPolicy = normalizeGovernanceWorkflowEnforcement(options.policy);\n // workflow_enforcement is preset-orthogonal (see create_default_type above).\n const changed = (settings.governance.workflow_enforcement ?? \"off\") !== nextPolicy;\n settings.governance.workflow_enforcement = nextPolicy;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:governance_workflow_enforcement\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.governance.workflow_enforcement,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"governance_parent_reference_policy\") {\n const nextPolicy = normalizeParentReferencePolicy(options.policy);\n const changed =\n settings.governance.preset !== \"custom\" || settings.governance.parent_reference !== nextPolicy;\n settings.governance.preset = \"custom\";\n settings.governance.parent_reference = nextPolicy;\n settings.validation.parent_reference = nextPolicy;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:governance_parent_reference_policy\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.governance.parent_reference,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"governance_metadata_validation_profile\") {\n const nextPolicy = normalizeValidateMetadataProfile(options.policy);\n const changed =\n settings.governance.preset !== \"custom\" || settings.governance.metadata_profile !== nextPolicy;\n settings.governance.preset = \"custom\";\n settings.governance.metadata_profile = nextPolicy;\n settings.validation.metadata_profile = nextPolicy;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:governance_metadata_validation_profile\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.governance.metadata_profile,\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"governance_force_required_for_stale_lock\") {\n const nextPolicy = normalizeGovernanceForceRequiredForStaleLockPolicy(options.policy);\n const nextEnabled = nextPolicy === \"enabled\";\n const changed =\n settings.governance.preset !== \"custom\" || settings.governance.force_required_for_stale_lock !== nextEnabled;\n settings.governance.preset = \"custom\";\n settings.governance.force_required_for_stale_lock = nextEnabled;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:governance_force_required_for_stale_lock\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.governance.force_required_for_stale_lock ? \"enabled\" : \"disabled\",\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"test_result_tracking\") {\n const nextPolicy = normalizeTestResultTrackingPolicy(options.policy);\n const nextEnabled = nextPolicy === \"enabled\";\n const changed = settings.testing.record_results_to_items !== nextEnabled;\n settings.testing.record_results_to_items = nextEnabled;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:test_result_tracking\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.testing.record_results_to_items ? \"enabled\" : \"disabled\",\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"telemetry_tracking\") {\n const nextPolicy = normalizeTelemetryTrackingPolicy(options.policy);\n const nextEnabled = nextPolicy === \"enabled\";\n const changed = settings.telemetry.enabled !== nextEnabled || !settings.telemetry.first_run_prompt_completed;\n settings.telemetry.enabled = nextEnabled;\n settings.telemetry.first_run_prompt_completed = true;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:telemetry_tracking\");\n }\n return withWarnings({\n scope,\n key,\n policy: settings.telemetry.enabled ? \"enabled\" : \"disabled\",\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n }\n\n if (key === \"context\") {\n return applyContextConfig(settings, options, target, scope, warnings);\n }\n\n const nextCriteria = normalizeCriteria(options.criterion, options.clearCriteria);\n const changed =\n nextCriteria.length !== settings.workflow.definition_of_done.length ||\n nextCriteria.some((value, index) => value !== settings.workflow.definition_of_done[index]);\n\n settings.workflow.definition_of_done = nextCriteria;\n if (changed) {\n await writeSettings(target.pmRoot, settings, \"config:set:definition_of_done\");\n }\n\n return withWarnings({\n scope,\n key,\n criteria: [...settings.workflow.definition_of_done],\n settings_path: target.settingsPath,\n changed,\n }, warnings);\n}\n"],"names":["changed","nextCriteria"],"mappings":"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","debugId":"89cfb2b9-e002-55dd-871d-95addf25c0f3"}
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  normalizeParentReferencePolicy,
3
3
  normalizeSprintReleaseFormatPolicy
4
- } from "./chunk-XX5LRINW.js";
4
+ } from "./chunk-2OJHLWBZ.js";
5
5
  import {
6
6
  migrateItemFilesToFormat
7
- } from "./chunk-BNL6S7QH.js";
7
+ } from "./chunk-AVJD6VTA.js";
8
8
  import {
9
9
  buildInvalidTypeError
10
- } from "./chunk-KK6YPGH3.js";
11
- import "./chunk-HPH6X4ZZ.js";
10
+ } from "./chunk-HMMMWBK2.js";
11
+ import "./chunk-WCQZBDDH.js";
12
12
  import {
13
13
  resolveItemTypeRegistry,
14
14
  resolveTypeName
15
- } from "./chunk-4PJQSECJ.js";
16
- import "./chunk-RANZIID5.js";
15
+ } from "./chunk-HRMHZ4RV.js";
16
+ import "./chunk-FHHBD7PN.js";
17
17
  import {
18
18
  CONTEXT_DEPTH_VALUES,
19
19
  EXIT_CODE,
@@ -25,13 +25,13 @@ import {
25
25
  resolveGlobalPmRoot,
26
26
  resolvePmRoot,
27
27
  writeSettings
28
- } from "./chunk-SRVKTWPR.js";
28
+ } from "./chunk-UJUT6AHZ.js";
29
29
 
30
30
  // dist/core/config/positional-value.js
31
31
  !(function() {
32
32
  try {
33
33
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
34
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "fd40ea7d-d52d-54b7-ab73-89bebc4a762e");
34
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "9ef209a1-6efd-5b62-a1a7-1e6736aced5a");
35
35
  } catch (e2) {
36
36
  }
37
37
  })();
@@ -53,6 +53,7 @@ var POLICY_KEYS = /* @__PURE__ */ new Set([
53
53
  "governance_ownership_enforcement",
54
54
  "governance_create_mode_default",
55
55
  "governance_close_validation_default",
56
+ "governance_require_close_reason",
56
57
  "governance_create_default_type",
57
58
  "governance_workflow_enforcement",
58
59
  "governance_parent_reference_policy",
@@ -62,6 +63,7 @@ var POLICY_KEYS = /* @__PURE__ */ new Set([
62
63
  "telemetry_tracking"
63
64
  ]);
64
65
  var ENABLED_DISABLED_POLICY_KEYS = /* @__PURE__ */ new Set([
66
+ "governance_require_close_reason",
65
67
  "governance_force_required_for_stale_lock",
66
68
  "test_result_tracking",
67
69
  "telemetry_tracking"
@@ -113,7 +115,7 @@ function resolveConfigPositionalValue(canonicalKeyOrAlias, value) {
113
115
  !(function() {
114
116
  try {
115
117
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
116
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "a5fc9ece-8275-58dd-88d2-a4e0ae48f952");
118
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "121fa495-f276-5e11-af32-62738b88da77");
117
119
  } catch (e2) {
118
120
  }
119
121
  })();
@@ -131,12 +133,50 @@ var NESTED_SETTING_DESCRIPTORS = [
131
133
  choices: ["cache_only", "semantic_configured", "semantic_auto"],
132
134
  summary: "Mutation-time search refresh policy: cache_only, semantic_configured, or semantic_auto."
133
135
  },
136
+ {
137
+ key: "search_query_expansion_enabled",
138
+ path: "search.query_expansion.enabled",
139
+ kind: "boolean",
140
+ summary: "Enable or disable query expansion for semantic/hybrid search."
141
+ },
142
+ {
143
+ key: "search_query_expansion_provider",
144
+ path: "search.query_expansion.provider",
145
+ kind: "string",
146
+ summary: "Query expansion provider name (built-in openai/ollama or extension provider)."
147
+ },
148
+ {
149
+ key: "search_rerank_enabled",
150
+ path: "search.rerank.enabled",
151
+ kind: "boolean",
152
+ summary: "Enable or disable post-retrieval reranking for hybrid search."
153
+ },
154
+ {
155
+ key: "search_rerank_model",
156
+ path: "search.rerank.model",
157
+ kind: "string",
158
+ summary: "Rerank model name override used by built-in providers."
159
+ },
160
+ {
161
+ key: "search_rerank_top_k",
162
+ path: "search.rerank.top_k",
163
+ kind: "integer",
164
+ min: 1,
165
+ summary: "Number of top hybrid candidates to rerank when rerank is enabled."
166
+ },
134
167
  {
135
168
  key: "search_embedding_model",
136
169
  path: "search.embedding_model",
137
170
  kind: "string",
138
171
  summary: "Default embedding model name (overrides provider-specific model when set)."
139
172
  },
173
+ {
174
+ key: "search_embedding_corpus_max_characters",
175
+ path: "search.embedding_corpus_max_characters",
176
+ kind: "integer",
177
+ min: 1,
178
+ summary: "Maximum semantic corpus characters per item before truncation."
179
+ },
140
180
  {
141
181
  key: "search_embedding_batch_size",
142
182
  path: "search.embedding_batch_size",
@@ -206,6 +246,13 @@ var NESTED_SETTING_DESCRIPTORS = [
206
246
  kind: "string",
207
247
  summary: "Vector store adapter name (lancedb, qdrant, or an extension adapter)."
208
248
  },
249
+ {
250
+ key: "vector_store_collection_name",
251
+ path: "vector_store.collection_name",
252
+ kind: "string",
253
+ non_empty: true,
254
+ summary: "Vector collection/table name shared by Qdrant and LanceDB adapters."
255
+ },
209
256
  {
210
257
  key: "qdrant_url",
211
258
  path: "vector_store.qdrant.url",
@@ -242,7 +289,28 @@ function parseNestedSettingValue(descriptor, rawValue) {
242
289
  return { ok: false, error: { message: `Config set ${descriptor.key} requires a string value` } };
243
290
  }
244
291
  const trimmed = rawValue.trim();
292
+ if (descriptor.kind === "boolean") {
293
+ const normalized = trimmed.toLowerCase();
294
+ if (normalized === "true" || normalized === "1" || normalized === "yes" || normalized === "on") {
295
+ return { ok: true, parsed: { descriptor, value: true } };
296
+ }
297
+ if (normalized === "false" || normalized === "0" || normalized === "no" || normalized === "off") {
298
+ return { ok: true, parsed: { descriptor, value: false } };
299
+ }
300
+ return {
301
+ ok: false,
302
+ error: {
303
+ message: `Config set ${descriptor.key} requires a boolean value (true|false), got "${rawValue}"`
304
+ }
305
+ };
306
+ }
245
307
  if (descriptor.kind === "string") {
308
+ if (descriptor.non_empty === true && trimmed.length === 0) {
309
+ return {
310
+ ok: false,
311
+ error: { message: `Config set ${descriptor.key} requires a non-empty value` }
312
+ };
313
+ }
246
314
  if (descriptor.choices && !descriptor.choices.includes(trimmed)) {
247
315
  return {
248
316
  ok: false,
@@ -309,7 +377,7 @@ function readNestedSettingValue(settings, descriptor) {
309
377
  }
310
378
  cursor = cursor[segment];
311
379
  }
312
- if (typeof cursor === "string" || typeof cursor === "number") {
380
+ if (typeof cursor === "string" || typeof cursor === "number" || typeof cursor === "boolean") {
313
381
  return cursor;
314
382
  }
315
383
  return null;
@@ -341,7 +409,7 @@ function writeNestedSettingValue(settings, descriptor, value) {
341
409
  !(function() {
342
410
  try {
343
411
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
344
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "597be62b-f4c6-5dfe-8f00-62b9ab38f374");
412
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "0a6df339-140f-5018-96e1-782e613aae14");
345
413
  } catch (e2) {
346
414
  }
347
415
  })();
@@ -377,6 +445,8 @@ var CONFIG_KEY_VALUES = [
377
445
  "governance_create_mode_default",
378
446
  "governance-close-validation-default",
379
447
  "governance_close_validation_default",
448
+ "governance-require-close-reason",
449
+ "governance_require_close_reason",
380
450
  "governance-create-default-type",
381
451
  "governance_create_default_type",
382
452
  "governance-workflow-enforcement",
@@ -424,6 +494,10 @@ var CONFIG_KEY_ALIASES = {
424
494
  "governance-close-validation-default",
425
495
  "governance_close_validation_default"
426
496
  ],
497
+ governance_require_close_reason: [
498
+ "governance-require-close-reason",
499
+ "governance_require_close_reason"
500
+ ],
427
501
  governance_create_default_type: ["governance-create-default-type", "governance_create_default_type"],
428
502
  governance_workflow_enforcement: ["governance-workflow-enforcement", "governance_workflow_enforcement"],
429
503
  governance_parent_reference_policy: ["governance-parent-reference-policy", "governance_parent_reference_policy"],
@@ -456,6 +530,7 @@ var CONFIG_KEY_SUMMARIES = {
456
530
  governance_ownership_enforcement: "Governance ownership enforcement policy (none|warn|strict).",
457
531
  governance_create_mode_default: "Governance default create mode (progressive|strict).",
458
532
  governance_close_validation_default: "Governance default close validation mode (off|warn|strict).",
533
+ governance_require_close_reason: "Governance close-reason requirement policy (enabled|disabled).",
459
534
  governance_create_default_type: "Governance default item type for `pm create` when --type is omitted.",
460
535
  governance_workflow_enforcement: "Governance per-type transition enforcement mode (off|warn|strict).",
461
536
  governance_parent_reference_policy: "Governance parent reference policy (warn|strict_error).",
@@ -530,6 +605,9 @@ function normalizeKey(value) {
530
605
  if (value === "governance-close-validation-default" || value === "governance_close_validation_default") {
531
606
  return "governance_close_validation_default";
532
607
  }
608
+ if (value === "governance-require-close-reason" || value === "governance_require_close_reason") {
609
+ return "governance_require_close_reason";
610
+ }
533
611
  if (value === "governance-create-default-type" || value === "governance_create_default_type") {
534
612
  return "governance_create_default_type";
535
613
  }
@@ -658,6 +736,13 @@ function normalizeGovernanceForceRequiredForStaleLockPolicy(value) {
658
736
  }
659
737
  throw new PmCliError("Config set governance-force-required-for-stale-lock requires --policy with one of: enabled, disabled", EXIT_CODE.USAGE);
660
738
  }
739
+ function normalizeGovernanceRequireCloseReasonPolicy(value) {
740
+ const normalized = value?.trim().toLowerCase().replaceAll("-", "_");
741
+ if (normalized === "enabled" || normalized === "disabled") {
742
+ return normalized;
743
+ }
744
+ throw new PmCliError("Config set governance-require-close-reason requires --policy with one of: enabled, disabled", EXIT_CODE.USAGE);
745
+ }
661
746
  function normalizePolicyForConflict(key, value) {
662
747
  switch (key) {
663
748
  case "history_missing_stream_policy":
@@ -678,6 +763,8 @@ function normalizePolicyForConflict(key, value) {
678
763
  return normalizeGovernanceCreateModeDefault(value);
679
764
  case "governance_close_validation_default":
680
765
  return normalizeGovernanceCloseValidationDefault(value);
766
+ case "governance_require_close_reason":
767
+ return normalizeGovernanceRequireCloseReasonPolicy(value);
681
768
  case "governance_workflow_enforcement":
682
769
  return normalizeGovernanceWorkflowEnforcement(value);
683
770
  case "governance_force_required_for_stale_lock":
@@ -805,6 +892,9 @@ function readConfigValue(settings, key) {
805
892
  if (key === "governance_close_validation_default") {
806
893
  return settings.governance.close_validation_default;
807
894
  }
895
+ if (key === "governance_require_close_reason") {
896
+ return settings.governance.require_close_reason ? "enabled" : "disabled";
897
+ }
808
898
  if (key === "governance_create_default_type") {
809
899
  return settings.governance.create_default_type ?? "";
810
900
  }
@@ -1061,6 +1151,7 @@ async function runConfig(scopeValue, actionValue, keyValue, options, global2, va
1061
1151
  governance_ownership_enforcement: readConfigValue(settings, "governance_ownership_enforcement"),
1062
1152
  governance_create_mode_default: readConfigValue(settings, "governance_create_mode_default"),
1063
1153
  governance_close_validation_default: readConfigValue(settings, "governance_close_validation_default"),
1154
+ governance_require_close_reason: readConfigValue(settings, "governance_require_close_reason"),
1064
1155
  governance_create_default_type: readConfigValue(settings, "governance_create_default_type"),
1065
1156
  governance_workflow_enforcement: readConfigValue(settings, "governance_workflow_enforcement"),
1066
1157
  governance_parent_reference_policy: readConfigValue(settings, "governance_parent_reference_policy"),
@@ -1208,6 +1299,15 @@ async function runConfig(scopeValue, actionValue, keyValue, options, global2, va
1208
1299
  changed: false
1209
1300
  }, warnings);
1210
1301
  }
1302
+ if (key === "governance_require_close_reason") {
1303
+ return withWarnings({
1304
+ scope,
1305
+ key,
1306
+ policy: settings.governance.require_close_reason ? "enabled" : "disabled",
1307
+ settings_path: target.settingsPath,
1308
+ changed: false
1309
+ }, warnings);
1310
+ }
1211
1311
  if (key === "governance_create_default_type") {
1212
1312
  return withWarnings({
1213
1313
  scope,
@@ -1528,6 +1628,22 @@ async function runConfig(scopeValue, actionValue, keyValue, options, global2, va
1528
1628
  changed: changed2
1529
1629
  }, warnings);
1530
1630
  }
1631
+ if (key === "governance_require_close_reason") {
1632
+ const nextPolicy = normalizeGovernanceRequireCloseReasonPolicy(options.policy);
1633
+ const nextEnabled = nextPolicy === "enabled";
1634
+ const changed2 = settings.governance.require_close_reason !== nextEnabled;
1635
+ settings.governance.require_close_reason = nextEnabled;
1636
+ if (changed2) {
1637
+ await writeSettings(target.pmRoot, settings, "config:set:governance_require_close_reason");
1638
+ }
1639
+ return withWarnings({
1640
+ scope,
1641
+ key,
1642
+ policy: settings.governance.require_close_reason ? "enabled" : "disabled",
1643
+ settings_path: target.settingsPath,
1644
+ changed: changed2
1645
+ }, warnings);
1646
+ }
1531
1647
  if (key === "governance_create_default_type") {
1532
1648
  const policyProvided = typeof options.policy === "string";
1533
1649
  const rawType = policyProvided ? options.policy.trim() : "";
@@ -1685,4 +1801,4 @@ async function runConfig(scopeValue, actionValue, keyValue, options, global2, va
1685
1801
  export {
1686
1802
  runConfig
1687
1803
  };
1688
- //# sourceMappingURL=config-5ON3ADRH.js.map
1804
+ //# sourceMappingURL=config-YJSAAADD.js.map