@unbrained/pm-cli 2026.7.3 → 2026.7.5

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 (663) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/CONTRIBUTING.md +36 -7
  3. package/README.md +1 -9
  4. package/dist/cli/commands/calendar.d.ts +3 -2
  5. package/dist/cli/commands/calendar.js +5 -5
  6. package/dist/cli/commands/calendar.js.map +1 -1
  7. package/dist/cli/commands/claim.js +17 -3
  8. package/dist/cli/commands/claim.js.map +1 -1
  9. package/dist/cli/commands/close.js +34 -16
  10. package/dist/cli/commands/close.js.map +1 -1
  11. package/dist/cli/commands/completion.js +231 -345
  12. package/dist/cli/commands/completion.js.map +1 -1
  13. package/dist/cli/commands/copy.js +3 -3
  14. package/dist/cli/commands/copy.js.map +1 -1
  15. package/dist/cli/commands/create.d.ts +9 -59
  16. package/dist/cli/commands/create.js +162 -132
  17. package/dist/cli/commands/create.js.map +1 -1
  18. package/dist/cli/commands/extension/bundled-catalog.d.ts +6 -0
  19. package/dist/cli/commands/extension/bundled-catalog.js +15 -2
  20. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  21. package/dist/cli/commands/extension/describe.d.ts +6 -3
  22. package/dist/cli/commands/extension/describe.js +21 -9
  23. package/dist/cli/commands/extension/describe.js.map +1 -1
  24. package/dist/cli/commands/extension/doctor.d.ts +0 -4
  25. package/dist/cli/commands/extension/doctor.js +3 -3
  26. package/dist/cli/commands/extension/doctor.js.map +1 -1
  27. package/dist/cli/commands/extension/scaffold.js +59 -133
  28. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  29. package/dist/cli/commands/extension/shared.d.ts +2 -7
  30. package/dist/cli/commands/extension/shared.js +4 -10
  31. package/dist/cli/commands/extension/shared.js.map +1 -1
  32. package/dist/cli/commands/extension.js +33 -8
  33. package/dist/cli/commands/extension.js.map +1 -1
  34. package/dist/cli/commands/files.js +3 -3
  35. package/dist/cli/commands/files.js.map +1 -1
  36. package/dist/cli/commands/history-compact.js +9 -18
  37. package/dist/cli/commands/history-compact.js.map +1 -1
  38. package/dist/cli/commands/history-repair.js +9 -19
  39. package/dist/cli/commands/history-repair.js.map +1 -1
  40. package/dist/cli/commands/init-agent-guidance.js +133 -97
  41. package/dist/cli/commands/init-agent-guidance.js.map +1 -1
  42. package/dist/cli/commands/init.js +3 -3
  43. package/dist/cli/commands/init.js.map +1 -1
  44. package/dist/cli/commands/item-filter-options.d.ts +2 -0
  45. package/dist/cli/commands/item-filter-options.js +2 -2
  46. package/dist/cli/commands/item-filter-options.js.map +1 -1
  47. package/dist/cli/commands/mutation-command-options.d.ts +78 -0
  48. package/dist/cli/commands/mutation-command-options.js +10 -0
  49. package/dist/cli/commands/mutation-command-options.js.map +1 -0
  50. package/dist/cli/commands/profile.js +3 -3
  51. package/dist/cli/commands/profile.js.map +1 -1
  52. package/dist/cli/commands/reindex.js +4 -4
  53. package/dist/cli/commands/reindex.js.map +1 -1
  54. package/dist/cli/commands/restore.js +3 -3
  55. package/dist/cli/commands/restore.js.map +1 -1
  56. package/dist/cli/commands/schema.js +10 -10
  57. package/dist/cli/commands/schema.js.map +1 -1
  58. package/dist/cli/commands/shared-unset-fields.d.ts +19 -0
  59. package/dist/cli/commands/shared-unset-fields.js +31 -2
  60. package/dist/cli/commands/shared-unset-fields.js.map +1 -1
  61. package/dist/cli/commands/update.d.ts +2 -59
  62. package/dist/cli/commands/update.js +29 -98
  63. package/dist/cli/commands/update.js.map +1 -1
  64. package/dist/cli/commands/validate.js +4 -4
  65. package/dist/cli/commands/validate.js.map +1 -1
  66. package/dist/cli/error-guidance.js +107 -7
  67. package/dist/cli/error-guidance.js.map +1 -1
  68. package/dist/cli/main.d.ts +6 -2
  69. package/dist/cli/main.js +33 -12
  70. package/dist/cli/main.js.map +1 -1
  71. package/dist/cli/register-list-query.js +4 -2
  72. package/dist/cli/register-list-query.js.map +1 -1
  73. package/dist/cli/registration-helpers.js +12 -6
  74. package/dist/cli/registration-helpers.js.map +1 -1
  75. package/dist/cli-bundle/chunks/activity-4XQIDNM5.js +18 -0
  76. package/dist/cli-bundle/chunks/{activity-5YWLSPGE.js → activity-YKAKZTZ4.js} +11 -9
  77. package/dist/cli-bundle/chunks/{aggregate-2V2M3JZU.js → aggregate-EQX2RGB7.js} +16 -13
  78. package/dist/cli-bundle/chunks/{aggregate-2V2M3JZU.js.map → aggregate-EQX2RGB7.js.map} +1 -1
  79. package/dist/cli-bundle/chunks/{aggregate-EK7DXML7.js → aggregate-PEGZGJXD.js} +18 -15
  80. package/dist/cli-bundle/chunks/{aggregate-EK7DXML7.js.map → aggregate-PEGZGJXD.js.map} +1 -1
  81. package/dist/cli-bundle/chunks/{append-EZESUVJT.js → append-CZGUZ45Q.js} +11 -8
  82. package/dist/cli-bundle/chunks/{append-EZESUVJT.js.map → append-CZGUZ45Q.js.map} +1 -1
  83. package/dist/cli-bundle/chunks/{append-JFG4WQMG.js → append-NSQBCXZJ.js} +13 -10
  84. package/dist/cli-bundle/chunks/{append-JFG4WQMG.js.map → append-NSQBCXZJ.js.map} +1 -1
  85. package/dist/cli-bundle/chunks/chunk-3JZNEQBA.js +1413 -0
  86. package/dist/cli-bundle/chunks/chunk-3JZNEQBA.js.map +1 -0
  87. package/dist/cli-bundle/chunks/{chunk-NOIEVOK5.js → chunk-3PL6LEKP.js} +16 -14
  88. package/dist/cli-bundle/chunks/{chunk-NOIEVOK5.js.map → chunk-3PL6LEKP.js.map} +1 -1
  89. package/dist/cli-bundle/chunks/{chunk-6KRFL33E.js → chunk-3U3VEWK6.js} +277 -119
  90. package/dist/cli-bundle/chunks/chunk-3U3VEWK6.js.map +7 -0
  91. package/dist/cli-bundle/chunks/{chunk-Z5F6XZXE.js → chunk-3Y4OESPP.js} +14 -12
  92. package/dist/cli-bundle/chunks/{chunk-Z5F6XZXE.js.map → chunk-3Y4OESPP.js.map} +1 -1
  93. package/dist/cli-bundle/chunks/{chunk-HB4FAT3O.js → chunk-4LRVSBO6.js} +21 -15
  94. package/dist/cli-bundle/chunks/chunk-4LRVSBO6.js.map +7 -0
  95. package/dist/cli-bundle/chunks/{chunk-T3P7PMZP.js → chunk-4OFLJHX6.js} +7 -5
  96. package/dist/cli-bundle/chunks/{chunk-T3P7PMZP.js.map → chunk-4OFLJHX6.js.map} +1 -1
  97. package/dist/cli-bundle/chunks/{chunk-JPATY4SE.js → chunk-4QQ6PM7M.js} +45 -557
  98. package/dist/cli-bundle/chunks/chunk-4QQ6PM7M.js.map +7 -0
  99. package/dist/cli-bundle/chunks/{chunk-6CDCWKSX.js → chunk-53BTLLAF.js} +68 -331
  100. package/dist/cli-bundle/chunks/chunk-53BTLLAF.js.map +1 -0
  101. package/dist/cli-bundle/chunks/{chunk-4WB6S4YX.js → chunk-57C2RLW5.js} +277 -112
  102. package/dist/cli-bundle/chunks/chunk-57C2RLW5.js.map +1 -0
  103. package/dist/cli-bundle/chunks/{chunk-PULUSQAV.js → chunk-5B3X4Y22.js} +52 -63
  104. package/dist/cli-bundle/chunks/{chunk-PULUSQAV.js.map → chunk-5B3X4Y22.js.map} +3 -3
  105. package/dist/cli-bundle/chunks/{chunk-7LYO6S5A.js → chunk-5J2XPTAD.js} +10 -8
  106. package/dist/cli-bundle/chunks/{chunk-7LYO6S5A.js.map → chunk-5J2XPTAD.js.map} +1 -1
  107. package/dist/cli-bundle/chunks/{chunk-QCDTQCMW.js → chunk-5JE6SMYS.js} +2 -2
  108. package/dist/cli-bundle/chunks/{chunk-MHRS5FUX.js → chunk-5JZ7APJU.js} +153 -108
  109. package/dist/cli-bundle/chunks/chunk-5JZ7APJU.js.map +1 -0
  110. package/dist/cli-bundle/chunks/{chunk-KHVGM5CS.js → chunk-5VVUKE3U.js} +544 -2368
  111. package/dist/cli-bundle/chunks/chunk-5VVUKE3U.js.map +7 -0
  112. package/dist/cli-bundle/chunks/{chunk-RJH5VQHW.js → chunk-75U6M5ZD.js} +22 -16
  113. package/dist/cli-bundle/chunks/chunk-75U6M5ZD.js.map +1 -0
  114. package/dist/cli-bundle/chunks/chunk-7C2O74AE.js +23 -0
  115. package/dist/cli-bundle/chunks/chunk-7C2O74AE.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-ZFTKYWIF.js → chunk-7EQNAZX2.js} +14 -12
  117. package/dist/cli-bundle/chunks/{chunk-ZFTKYWIF.js.map → chunk-7EQNAZX2.js.map} +1 -1
  118. package/dist/cli-bundle/chunks/{chunk-Z4DGFQDH.js → chunk-7LQKVMPA.js} +14 -4
  119. package/dist/cli-bundle/chunks/chunk-7LQKVMPA.js.map +1 -0
  120. package/dist/cli-bundle/chunks/{chunk-ERG65A2L.js → chunk-7MDXZAZS.js} +29 -7
  121. package/dist/cli-bundle/chunks/chunk-7MDXZAZS.js.map +1 -0
  122. package/dist/cli-bundle/chunks/{chunk-OGLGI22K.js → chunk-7QH7DHUB.js} +74 -8
  123. package/dist/cli-bundle/chunks/chunk-7QH7DHUB.js.map +1 -0
  124. package/dist/cli-bundle/chunks/{chunk-JBZ2NTKX.js → chunk-7WYXBPYQ.js} +7 -5
  125. package/dist/cli-bundle/chunks/{chunk-JBZ2NTKX.js.map → chunk-7WYXBPYQ.js.map} +1 -1
  126. package/dist/cli-bundle/chunks/chunk-AAEQMOC6.js +150 -0
  127. package/dist/cli-bundle/chunks/chunk-AAEQMOC6.js.map +1 -0
  128. package/dist/cli-bundle/chunks/{chunk-K5DT2YKM.js → chunk-ABRA3BHY.js} +18 -16
  129. package/dist/cli-bundle/chunks/{chunk-K5DT2YKM.js.map → chunk-ABRA3BHY.js.map} +2 -2
  130. package/dist/cli-bundle/chunks/chunk-B5KXLBSJ.js +47 -0
  131. package/dist/cli-bundle/chunks/chunk-B5KXLBSJ.js.map +7 -0
  132. package/dist/cli-bundle/chunks/{chunk-7CLLC75T.js → chunk-BFVHCAOO.js} +9 -7
  133. package/dist/cli-bundle/chunks/{chunk-7CLLC75T.js.map → chunk-BFVHCAOO.js.map} +1 -1
  134. package/dist/cli-bundle/chunks/{chunk-MDHWWBNZ.js → chunk-BVEUCSH2.js} +6 -4
  135. package/dist/cli-bundle/chunks/{chunk-MDHWWBNZ.js.map → chunk-BVEUCSH2.js.map} +1 -1
  136. package/dist/cli-bundle/chunks/chunk-C3PMDWGX.js +160 -0
  137. package/dist/cli-bundle/chunks/chunk-C3PMDWGX.js.map +7 -0
  138. package/dist/cli-bundle/chunks/{chunk-T4XBKJ3F.js → chunk-D3UCE7RW.js} +7 -5
  139. package/dist/cli-bundle/chunks/{chunk-T4XBKJ3F.js.map → chunk-D3UCE7RW.js.map} +1 -1
  140. package/dist/cli-bundle/chunks/chunk-DC3QJQWI.js +275 -0
  141. package/dist/cli-bundle/chunks/chunk-DC3QJQWI.js.map +7 -0
  142. package/dist/cli-bundle/chunks/chunk-DLQ4ZTCU.js +634 -0
  143. package/dist/cli-bundle/chunks/chunk-DLQ4ZTCU.js.map +7 -0
  144. package/dist/cli-bundle/chunks/{chunk-AJHYQCBJ.js → chunk-DRBV5UC2.js} +8 -23
  145. package/dist/cli-bundle/chunks/chunk-DRBV5UC2.js.map +7 -0
  146. package/dist/cli-bundle/chunks/{chunk-NZ7QIUP5.js → chunk-E2FUG6GD.js} +67 -351
  147. package/dist/cli-bundle/chunks/chunk-E2FUG6GD.js.map +7 -0
  148. package/dist/cli-bundle/chunks/{chunk-4PFVUUYV.js → chunk-EEY54JMF.js} +5 -3
  149. package/dist/cli-bundle/chunks/{chunk-4PFVUUYV.js.map → chunk-EEY54JMF.js.map} +1 -1
  150. package/dist/cli-bundle/chunks/{chunk-3W2HJKJX.js → chunk-EZFKWSC7.js} +94 -16
  151. package/dist/cli-bundle/chunks/{chunk-3W2HJKJX.js.map → chunk-EZFKWSC7.js.map} +4 -4
  152. package/dist/cli-bundle/chunks/{chunk-F6WNBITZ.js → chunk-FDBARR33.js} +40 -19
  153. package/dist/cli-bundle/chunks/{chunk-F6WNBITZ.js.map → chunk-FDBARR33.js.map} +3 -3
  154. package/dist/cli-bundle/chunks/{chunk-WRYERRZX.js → chunk-FGQKEDE4.js} +36 -12
  155. package/dist/cli-bundle/chunks/chunk-FGQKEDE4.js.map +7 -0
  156. package/dist/cli-bundle/chunks/{chunk-CXR3CMBQ.js → chunk-FJRKQREY.js} +10 -18
  157. package/dist/cli-bundle/chunks/chunk-FJRKQREY.js.map +1 -0
  158. package/dist/cli-bundle/chunks/{chunk-QNNQAAZ5.js → chunk-FUM6UMY4.js} +10 -11
  159. package/dist/cli-bundle/chunks/{chunk-QNNQAAZ5.js.map → chunk-FUM6UMY4.js.map} +1 -1
  160. package/dist/cli-bundle/chunks/{chunk-TQ6AX5SQ.js → chunk-GIWXVMZ3.js} +140 -334
  161. package/dist/cli-bundle/chunks/chunk-GIWXVMZ3.js.map +7 -0
  162. package/dist/cli-bundle/chunks/{chunk-FZJM2TXF.js → chunk-HBYZDSK5.js} +19 -17
  163. package/dist/cli-bundle/chunks/{chunk-FZJM2TXF.js.map → chunk-HBYZDSK5.js.map} +1 -1
  164. package/dist/cli-bundle/chunks/{chunk-5IZUBZBR.js → chunk-HJE4JTKQ.js} +6 -4
  165. package/dist/cli-bundle/chunks/{chunk-5IZUBZBR.js.map → chunk-HJE4JTKQ.js.map} +1 -1
  166. package/dist/cli-bundle/chunks/{chunk-YSDFIY7N.js → chunk-HK72NWAD.js} +89 -18
  167. package/dist/cli-bundle/chunks/chunk-HK72NWAD.js.map +1 -0
  168. package/dist/cli-bundle/chunks/{chunk-LBE5QFMZ.js → chunk-IJ6CO3JV.js} +41 -20
  169. package/dist/cli-bundle/chunks/{chunk-LBE5QFMZ.js.map → chunk-IJ6CO3JV.js.map} +1 -1
  170. package/dist/cli-bundle/chunks/{chunk-YF746GTH.js → chunk-JFCVQXZX.js} +139 -326
  171. package/dist/cli-bundle/chunks/chunk-JFCVQXZX.js.map +1 -0
  172. package/dist/cli-bundle/chunks/{chunk-A3OQ7TFW.js → chunk-JLA7EVYV.js} +12 -10
  173. package/dist/cli-bundle/chunks/{chunk-A3OQ7TFW.js.map → chunk-JLA7EVYV.js.map} +1 -1
  174. package/dist/cli-bundle/chunks/chunk-K32L7HZO.js +76 -0
  175. package/dist/cli-bundle/chunks/chunk-K32L7HZO.js.map +1 -0
  176. package/dist/cli-bundle/chunks/{chunk-32IUNTG4.js → chunk-K3AGVXSF.js} +37 -13
  177. package/dist/cli-bundle/chunks/chunk-K3AGVXSF.js.map +1 -0
  178. package/dist/cli-bundle/chunks/chunk-KDZ6K25I.js +79 -0
  179. package/dist/cli-bundle/chunks/chunk-KDZ6K25I.js.map +7 -0
  180. package/dist/cli-bundle/chunks/chunk-KGHH652T.js +44 -0
  181. package/dist/cli-bundle/chunks/chunk-KGHH652T.js.map +1 -0
  182. package/dist/cli-bundle/chunks/chunk-KL22PY6L.js +915 -0
  183. package/dist/cli-bundle/chunks/chunk-KL22PY6L.js.map +1 -0
  184. package/dist/cli-bundle/chunks/{chunk-BI4R7HI2.js → chunk-KLG4ZULO.js} +12 -10
  185. package/dist/cli-bundle/chunks/{chunk-BI4R7HI2.js.map → chunk-KLG4ZULO.js.map} +1 -1
  186. package/dist/cli-bundle/chunks/{chunk-XRYSCRZR.js → chunk-LEKT4K7I.js} +74 -8
  187. package/dist/cli-bundle/chunks/chunk-LEKT4K7I.js.map +7 -0
  188. package/dist/cli-bundle/chunks/{contracts-X74F2GSM.js → chunk-MNZ7DRNC.js} +13 -10
  189. package/dist/cli-bundle/chunks/{contracts-X74F2GSM.js.map → chunk-MNZ7DRNC.js.map} +1 -1
  190. package/dist/cli-bundle/chunks/{chunk-4EXFFP7T.js → chunk-MTTXDAK4.js} +206 -147
  191. package/dist/cli-bundle/chunks/chunk-MTTXDAK4.js.map +7 -0
  192. package/dist/cli-bundle/chunks/{chunk-KEZOIPCR.js → chunk-MZ7VNEVY.js} +8 -6
  193. package/dist/cli-bundle/chunks/{chunk-KEZOIPCR.js.map → chunk-MZ7VNEVY.js.map} +1 -1
  194. package/dist/cli-bundle/chunks/{chunk-5JIWFWOZ.js → chunk-N6DNM2FA.js} +2 -2
  195. package/dist/cli-bundle/chunks/{test-runs-QIR5MJPL.js → chunk-N7X4WP6L.js} +11 -8
  196. package/dist/cli-bundle/chunks/{test-runs-QIR5MJPL.js.map → chunk-N7X4WP6L.js.map} +1 -1
  197. package/dist/cli-bundle/chunks/{chunk-U3S2B7TA.js → chunk-NBFCNJ7Q.js} +206 -147
  198. package/dist/cli-bundle/chunks/chunk-NBFCNJ7Q.js.map +1 -0
  199. package/dist/cli-bundle/chunks/{chunk-GVJE5T7Q.js → chunk-NER3KUUS.js} +2 -2
  200. package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js +20 -0
  201. package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js.map +1 -0
  202. package/dist/cli-bundle/chunks/chunk-OBA2WH65.js +918 -0
  203. package/dist/cli-bundle/chunks/chunk-OBA2WH65.js.map +7 -0
  204. package/dist/cli-bundle/chunks/{chunk-YPWUSH72.js → chunk-OESSOFJ4.js} +14 -12
  205. package/dist/cli-bundle/chunks/{chunk-YPWUSH72.js.map → chunk-OESSOFJ4.js.map} +1 -1
  206. package/dist/cli-bundle/chunks/chunk-OK5NXCZB.js +238 -0
  207. package/dist/cli-bundle/chunks/chunk-OK5NXCZB.js.map +1 -0
  208. package/dist/cli-bundle/chunks/{chunk-FUFFPIYA.js → chunk-OWTIRHX4.js} +28 -6
  209. package/dist/cli-bundle/chunks/chunk-OWTIRHX4.js.map +7 -0
  210. package/dist/cli-bundle/chunks/{chunk-Z7RPDF2Y.js → chunk-P3VRG72Q.js} +10 -8
  211. package/dist/cli-bundle/chunks/{chunk-Z7RPDF2Y.js.map → chunk-P3VRG72Q.js.map} +1 -1
  212. package/dist/cli-bundle/chunks/chunk-P5TFTLWW.js +1423 -0
  213. package/dist/cli-bundle/chunks/chunk-P5TFTLWW.js.map +7 -0
  214. package/dist/cli-bundle/chunks/chunk-P5YORJRH.js +1977 -0
  215. package/dist/cli-bundle/chunks/chunk-P5YORJRH.js.map +7 -0
  216. package/dist/cli-bundle/chunks/{chunk-MEZZZBYX.js → chunk-PDXT6Q55.js} +2 -2
  217. package/dist/cli-bundle/chunks/{chunk-EJ2OCBHF.js → chunk-PJ3A56YF.js} +46 -537
  218. package/dist/cli-bundle/chunks/chunk-PJ3A56YF.js.map +1 -0
  219. package/dist/cli-bundle/chunks/{test-runs-MG5VIGSK.js → chunk-PPAJG4GB.js} +13 -10
  220. package/dist/cli-bundle/chunks/{test-runs-MG5VIGSK.js.map → chunk-PPAJG4GB.js.map} +1 -1
  221. package/dist/cli-bundle/chunks/{chunk-572FKBRL.js → chunk-PPE4YUQM.js} +1725 -1663
  222. package/dist/cli-bundle/chunks/chunk-PPE4YUQM.js.map +1 -0
  223. package/dist/cli-bundle/chunks/{chunk-ER4ME5U2.js → chunk-QHZO65XW.js} +8 -6
  224. package/dist/cli-bundle/chunks/{chunk-ER4ME5U2.js.map → chunk-QHZO65XW.js.map} +1 -1
  225. package/dist/cli-bundle/chunks/{chunk-T6AXEBOP.js → chunk-R3ZBLGTC.js} +9 -10
  226. package/dist/cli-bundle/chunks/{chunk-T6AXEBOP.js.map → chunk-R3ZBLGTC.js.map} +2 -2
  227. package/dist/cli-bundle/chunks/chunk-RCT3YJOK.js +624 -0
  228. package/dist/cli-bundle/chunks/chunk-RCT3YJOK.js.map +1 -0
  229. package/dist/cli-bundle/chunks/{chunk-YVKZ3ANP.js → chunk-RX3HQSYG.js} +2 -2
  230. package/dist/cli-bundle/chunks/{chunk-LOWVNZBZ.js → chunk-S4APD35C.js} +4 -4
  231. package/dist/cli-bundle/chunks/{chunk-FH2H3CBD.js → chunk-S5AYOUT5.js} +8 -6
  232. package/dist/cli-bundle/chunks/{chunk-FH2H3CBD.js.map → chunk-S5AYOUT5.js.map} +1 -1
  233. package/dist/cli-bundle/chunks/{chunk-SYE6WMV6.js → chunk-STPSZ2XY.js} +19 -744
  234. package/dist/cli-bundle/chunks/chunk-STPSZ2XY.js.map +1 -0
  235. package/dist/cli-bundle/chunks/{chunk-6NYJGMTY.js → chunk-T35XLYZF.js} +2 -2
  236. package/dist/cli-bundle/chunks/{chunk-P5L7Z2O6.js → chunk-T3ABIMGW.js} +5 -3
  237. package/dist/cli-bundle/chunks/{chunk-P5L7Z2O6.js.map → chunk-T3ABIMGW.js.map} +1 -1
  238. package/dist/cli-bundle/chunks/{chunk-SU2E4AWU.js → chunk-T3F4DF23.js} +16 -14
  239. package/dist/cli-bundle/chunks/{chunk-SU2E4AWU.js.map → chunk-T3F4DF23.js.map} +1 -1
  240. package/dist/cli-bundle/chunks/chunk-T4MX77AK.js +272 -0
  241. package/dist/cli-bundle/chunks/chunk-T4MX77AK.js.map +1 -0
  242. package/dist/cli-bundle/chunks/chunk-T5Y3QSNF.js +5354 -0
  243. package/dist/cli-bundle/chunks/chunk-T5Y3QSNF.js.map +1 -0
  244. package/dist/cli-bundle/chunks/{chunk-ECU6MMTQ.js → chunk-TSPKZRRW.js} +50 -116
  245. package/dist/cli-bundle/chunks/chunk-TSPKZRRW.js.map +1 -0
  246. package/dist/cli-bundle/chunks/{chunk-BE2SR6QL.js → chunk-TT42JUMF.js} +4 -4
  247. package/dist/cli-bundle/chunks/chunk-UHKX7I75.js +165 -0
  248. package/dist/cli-bundle/chunks/chunk-UHKX7I75.js.map +1 -0
  249. package/dist/cli-bundle/chunks/{chunk-RAHINBVP.js → chunk-UI5BJ6DO.js} +1339 -1277
  250. package/dist/cli-bundle/chunks/chunk-UI5BJ6DO.js.map +7 -0
  251. package/dist/cli-bundle/chunks/chunk-US3T3W5J.js +1932 -0
  252. package/dist/cli-bundle/chunks/chunk-US3T3W5J.js.map +1 -0
  253. package/dist/cli-bundle/chunks/chunk-UZRDBL6W.js +175 -0
  254. package/dist/cli-bundle/chunks/chunk-UZRDBL6W.js.map +7 -0
  255. package/dist/cli-bundle/chunks/{chunk-B4O5S7I3.js → chunk-VUHVWI4C.js} +13 -3
  256. package/dist/cli-bundle/chunks/chunk-VUHVWI4C.js.map +7 -0
  257. package/dist/cli-bundle/chunks/{contracts-L6ODXNUM.js → chunk-VZIYHZDX.js} +11 -8
  258. package/dist/cli-bundle/chunks/{contracts-L6ODXNUM.js.map → chunk-VZIYHZDX.js.map} +1 -1
  259. package/dist/cli-bundle/chunks/{chunk-U5TR4N7J.js → chunk-WISPVC2E.js} +9 -7
  260. package/dist/cli-bundle/chunks/{chunk-U5TR4N7J.js.map → chunk-WISPVC2E.js.map} +1 -1
  261. package/dist/cli-bundle/chunks/chunk-WVSGSZ6J.js +5434 -0
  262. package/dist/cli-bundle/chunks/chunk-WVSGSZ6J.js.map +7 -0
  263. package/dist/cli-bundle/chunks/{chunk-HQAF23Q2.js → chunk-XQCG2JGW.js} +17 -749
  264. package/dist/cli-bundle/chunks/chunk-XQCG2JGW.js.map +7 -0
  265. package/dist/cli-bundle/chunks/chunk-Y76TWC45.js +550 -0
  266. package/dist/cli-bundle/chunks/chunk-Y76TWC45.js.map +7 -0
  267. package/dist/cli-bundle/chunks/{chunk-L4SLHV6G.js → chunk-YD5FML7K.js} +464 -2239
  268. package/dist/cli-bundle/chunks/chunk-YD5FML7K.js.map +1 -0
  269. package/dist/cli-bundle/chunks/{chunk-YSGTMDWC.js → chunk-YFIE7YK6.js} +7 -5
  270. package/dist/cli-bundle/chunks/{chunk-YSGTMDWC.js.map → chunk-YFIE7YK6.js.map} +1 -1
  271. package/dist/cli-bundle/chunks/{chunk-WYOIIFSE.js → chunk-YMABYTNG.js} +49 -115
  272. package/dist/cli-bundle/chunks/chunk-YMABYTNG.js.map +7 -0
  273. package/dist/cli-bundle/chunks/{chunk-SU3TB4NS.js → chunk-YOF5VPKM.js} +2 -2
  274. package/dist/cli-bundle/chunks/{chunk-WJA3PXW7.js → chunk-YPPVU5GX.js} +11 -9
  275. package/dist/cli-bundle/chunks/{chunk-WJA3PXW7.js.map → chunk-YPPVU5GX.js.map} +1 -1
  276. package/dist/cli-bundle/chunks/{chunk-GUYNUXQT.js → chunk-YQMMMONE.js} +6 -4
  277. package/dist/cli-bundle/chunks/{chunk-GUYNUXQT.js.map → chunk-YQMMMONE.js.map} +1 -1
  278. package/dist/cli-bundle/chunks/{chunk-AIKU3IIL.js → chunk-YSAH5FY5.js} +16 -14
  279. package/dist/cli-bundle/chunks/{chunk-AIKU3IIL.js.map → chunk-YSAH5FY5.js.map} +1 -1
  280. package/dist/cli-bundle/chunks/{chunk-KS6ATO47.js → chunk-YZIR4R3U.js} +153 -108
  281. package/dist/cli-bundle/chunks/chunk-YZIR4R3U.js.map +7 -0
  282. package/dist/cli-bundle/chunks/{chunk-LCWQP6NM.js → chunk-Z2CRRZYF.js} +14 -12
  283. package/dist/cli-bundle/chunks/{chunk-LCWQP6NM.js.map → chunk-Z2CRRZYF.js.map} +1 -1
  284. package/dist/cli-bundle/chunks/chunk-ZAHXPXVY.js +533 -0
  285. package/dist/cli-bundle/chunks/chunk-ZAHXPXVY.js.map +1 -0
  286. package/dist/cli-bundle/chunks/{chunk-UMNQZS4H.js → chunk-ZCJAA3JK.js} +8 -6
  287. package/dist/cli-bundle/chunks/{chunk-UMNQZS4H.js.map → chunk-ZCJAA3JK.js.map} +1 -1
  288. package/dist/cli-bundle/chunks/{chunk-EQURFOMH.js → chunk-ZD34OFFQ.js} +5 -3
  289. package/dist/cli-bundle/chunks/{chunk-EQURFOMH.js.map → chunk-ZD34OFFQ.js.map} +1 -1
  290. package/dist/cli-bundle/chunks/{chunk-67LARBDL.js → chunk-ZJB3UV5U.js} +54 -58
  291. package/dist/cli-bundle/chunks/chunk-ZJB3UV5U.js.map +1 -0
  292. package/dist/cli-bundle/chunks/{chunk-5E7N4T2Z.js → chunk-ZMD35NYG.js} +2 -2
  293. package/dist/cli-bundle/chunks/chunk-ZVDL32GJ.js +241 -0
  294. package/dist/cli-bundle/chunks/chunk-ZVDL32GJ.js.map +7 -0
  295. package/dist/cli-bundle/chunks/{claim-5GU7OE67.js → claim-4DROPSIS.js} +30 -13
  296. package/dist/cli-bundle/chunks/claim-4DROPSIS.js.map +1 -0
  297. package/dist/cli-bundle/chunks/{claim-2BGBGSVI.js → claim-VX54TV5U.js} +29 -12
  298. package/dist/cli-bundle/chunks/claim-VX54TV5U.js.map +7 -0
  299. package/dist/cli-bundle/chunks/{close-AFVKPR57.js → close-3YRR3XY6.js} +9 -7
  300. package/dist/cli-bundle/chunks/close-OB2Y4QP5.js +16 -0
  301. package/dist/cli-bundle/chunks/{close-many-JKUJMHLG.js → close-many-AP4MWU36.js} +21 -18
  302. package/dist/cli-bundle/chunks/{close-many-JKUJMHLG.js.map → close-many-AP4MWU36.js.map} +1 -1
  303. package/dist/cli-bundle/chunks/{close-many-7KLOSYLP.js → close-many-OMZIGZB4.js} +19 -16
  304. package/dist/cli-bundle/chunks/{close-many-7KLOSYLP.js.map → close-many-OMZIGZB4.js.map} +1 -1
  305. package/dist/cli-bundle/chunks/{comments-DNWHEBOS.js → comments-MIW5MZOX.js} +12 -9
  306. package/dist/cli-bundle/chunks/{comments-DNWHEBOS.js.map → comments-MIW5MZOX.js.map} +1 -1
  307. package/dist/cli-bundle/chunks/{comments-RW23R3VE.js → comments-SAG5LSKL.js} +14 -11
  308. package/dist/cli-bundle/chunks/{comments-RW23R3VE.js.map → comments-SAG5LSKL.js.map} +1 -1
  309. package/dist/cli-bundle/chunks/{config-AUM5WBYA.js → config-DJJKZB5R.js} +20 -17
  310. package/dist/cli-bundle/chunks/{config-AUM5WBYA.js.map → config-DJJKZB5R.js.map} +1 -1
  311. package/dist/cli-bundle/chunks/{config-OZWSA2NP.js → config-V57QD47V.js} +22 -19
  312. package/dist/cli-bundle/chunks/{config-OZWSA2NP.js.map → config-V57QD47V.js.map} +1 -1
  313. package/dist/cli-bundle/chunks/{context-PKCEHQY3.js → context-4OQGIPSO.js} +15 -12
  314. package/dist/cli-bundle/chunks/{context-OYXRGY7S.js → context-WLA6IAWE.js} +15 -12
  315. package/dist/cli-bundle/chunks/contracts-HXJLKCRI.js +12 -0
  316. package/dist/cli-bundle/chunks/contracts-OJEXMKVW.js +16 -0
  317. package/dist/cli-bundle/chunks/{copy-I4NCLBR4.js → copy-LEE6P6EM.js} +17 -14
  318. package/dist/cli-bundle/chunks/{copy-I4NCLBR4.js.map → copy-LEE6P6EM.js.map} +2 -2
  319. package/dist/cli-bundle/chunks/{copy-6XOR3HKN.js → copy-OTJOWFL6.js} +18 -15
  320. package/dist/cli-bundle/chunks/{copy-6XOR3HKN.js.map → copy-OTJOWFL6.js.map} +1 -1
  321. package/dist/cli-bundle/chunks/create-WKOZKPQR.js +30 -0
  322. package/dist/cli-bundle/chunks/{create-PM45M6PE.js → create-XWWQFQ6S.js} +14 -12
  323. package/dist/cli-bundle/chunks/{delete-7YXHYG67.js → delete-62JQTYT4.js} +10 -7
  324. package/dist/cli-bundle/chunks/{delete-7YXHYG67.js.map → delete-62JQTYT4.js.map} +1 -1
  325. package/dist/cli-bundle/chunks/{delete-LPISP43T.js → delete-HQKGRNRZ.js} +12 -9
  326. package/dist/cli-bundle/chunks/{delete-LPISP43T.js.map → delete-HQKGRNRZ.js.map} +1 -1
  327. package/dist/cli-bundle/chunks/{deps-WATKQDE3.js → deps-55FTG6Z5.js} +12 -9
  328. package/dist/cli-bundle/chunks/{deps-WATKQDE3.js.map → deps-55FTG6Z5.js.map} +1 -1
  329. package/dist/cli-bundle/chunks/{deps-N2T26FME.js → deps-L2FPIAD3.js} +10 -7
  330. package/dist/cli-bundle/chunks/{deps-N2T26FME.js.map → deps-L2FPIAD3.js.map} +1 -1
  331. package/dist/cli-bundle/chunks/{docs-6LQ3GLM7.js → docs-6CRCSVKK.js} +11 -9
  332. package/dist/cli-bundle/chunks/{docs-6LQ3GLM7.js.map → docs-6CRCSVKK.js.map} +1 -1
  333. package/dist/cli-bundle/chunks/{docs-Z3X6JZLT.js → docs-S6UTOTO5.js} +9 -7
  334. package/dist/cli-bundle/chunks/{docs-Z3X6JZLT.js.map → docs-S6UTOTO5.js.map} +1 -1
  335. package/dist/cli-bundle/chunks/{eval-6DCLG52D.js → eval-N6UHFWVO.js} +15 -11
  336. package/dist/cli-bundle/chunks/{eval-6DCLG52D.js.map → eval-N6UHFWVO.js.map} +1 -1
  337. package/dist/cli-bundle/chunks/{eval-Y3ZCUTHK.js → eval-PHOTWYHI.js} +17 -13
  338. package/dist/cli-bundle/chunks/{eval-Y3ZCUTHK.js.map → eval-PHOTWYHI.js.map} +1 -1
  339. package/dist/cli-bundle/chunks/{extension-BNINIMT7.js → extension-NBAH62ML.js} +17 -11
  340. package/dist/cli-bundle/chunks/{extension-QWE4YYK5.js → extension-ZF6ZZPOU.js} +17 -11
  341. package/dist/cli-bundle/chunks/{files-FUYPSOFJ.js → files-6P57MRKL.js} +14 -11
  342. package/dist/cli-bundle/chunks/files-6P57MRKL.js.map +7 -0
  343. package/dist/cli-bundle/chunks/{files-6SGKHS6O.js → files-JPU3FNJ7.js} +15 -12
  344. package/dist/cli-bundle/chunks/files-JPU3FNJ7.js.map +1 -0
  345. package/dist/cli-bundle/chunks/{focus-2Q3K76G2.js → focus-LFZ6IDBR.js} +15 -11
  346. package/dist/cli-bundle/chunks/{focus-2Q3K76G2.js.map → focus-LFZ6IDBR.js.map} +1 -1
  347. package/dist/cli-bundle/chunks/{focus-ATLBWXXD.js → focus-WNMYCVYA.js} +13 -9
  348. package/dist/cli-bundle/chunks/{focus-ATLBWXXD.js.map → focus-WNMYCVYA.js.map} +1 -1
  349. package/dist/cli-bundle/chunks/{gc-RUYEMNRF.js → gc-AETFKZ44.js} +10 -7
  350. package/dist/cli-bundle/chunks/{gc-RUYEMNRF.js.map → gc-AETFKZ44.js.map} +1 -1
  351. package/dist/cli-bundle/chunks/{gc-TDWSDR66.js → gc-RLBP4QVN.js} +12 -9
  352. package/dist/cli-bundle/chunks/{gc-TDWSDR66.js.map → gc-RLBP4QVN.js.map} +1 -1
  353. package/dist/cli-bundle/chunks/{get-LY6M2JIM.js → get-NH2MPBCI.js} +18 -15
  354. package/dist/cli-bundle/chunks/{get-LY6M2JIM.js.map → get-NH2MPBCI.js.map} +1 -1
  355. package/dist/cli-bundle/chunks/{get-2WGLX74N.js → get-P4ZQXCPZ.js} +16 -13
  356. package/dist/cli-bundle/chunks/{get-2WGLX74N.js.map → get-P4ZQXCPZ.js.map} +1 -1
  357. package/dist/cli-bundle/chunks/{health-4RKHYS3T.js → health-3GVPMQBL.js} +36 -29
  358. package/dist/cli-bundle/chunks/{health-4RKHYS3T.js.map → health-3GVPMQBL.js.map} +1 -1
  359. package/dist/cli-bundle/chunks/{health-TMFVNYRA.js → health-DNTM72GJ.js} +34 -27
  360. package/dist/cli-bundle/chunks/{health-TMFVNYRA.js.map → health-DNTM72GJ.js.map} +1 -1
  361. package/dist/cli-bundle/chunks/history-RYKLC72X.js +20 -0
  362. package/dist/cli-bundle/chunks/{history-SGRRS72R.js → history-SGPYRAFT.js} +10 -8
  363. package/dist/cli-bundle/chunks/{history-compact-LOED43R3.js → history-compact-3F6VELO7.js} +26 -30
  364. package/dist/cli-bundle/chunks/history-compact-3F6VELO7.js.map +7 -0
  365. package/dist/cli-bundle/chunks/{history-compact-V5DNAQHH.js → history-compact-656Y2TN4.js} +27 -31
  366. package/dist/cli-bundle/chunks/history-compact-656Y2TN4.js.map +1 -0
  367. package/dist/cli-bundle/chunks/history-redact-4H3FCKF3.js +21 -0
  368. package/dist/cli-bundle/chunks/{history-redact-IRL7WJ3E.js → history-redact-54ICFKXM.js} +11 -9
  369. package/dist/cli-bundle/chunks/{history-repair-PGYQJMGD.js → history-repair-4N6SDVHK.js} +25 -30
  370. package/dist/cli-bundle/chunks/history-repair-4N6SDVHK.js.map +7 -0
  371. package/dist/cli-bundle/chunks/{history-repair-4WVBVHFR.js → history-repair-EVTO6LIH.js} +26 -31
  372. package/dist/cli-bundle/chunks/history-repair-EVTO6LIH.js.map +1 -0
  373. package/dist/cli-bundle/chunks/init-RPIPQUNV.js +32 -0
  374. package/dist/cli-bundle/chunks/init-SKQAESQS.js +28 -0
  375. package/dist/cli-bundle/chunks/{learnings-4FJY7WIW.js → learnings-2HTPZNGZ.js} +10 -8
  376. package/dist/cli-bundle/chunks/{learnings-4FJY7WIW.js.map → learnings-2HTPZNGZ.js.map} +1 -1
  377. package/dist/cli-bundle/chunks/{learnings-4BHWFFUV.js → learnings-YBIHY3D6.js} +12 -10
  378. package/dist/cli-bundle/chunks/{learnings-4BHWFFUV.js.map → learnings-YBIHY3D6.js.map} +1 -1
  379. package/dist/cli-bundle/chunks/{list-472TIOVK.js → list-64LHZ3HM.js} +10 -8
  380. package/dist/cli-bundle/chunks/{list-D7BF5CL2.js → list-7LXBTEKI.js} +10 -8
  381. package/dist/cli-bundle/chunks/{next-SFQZVX2B.js → next-7ODPAQ4U.js} +22 -18
  382. package/dist/cli-bundle/chunks/{next-SFQZVX2B.js.map → next-7ODPAQ4U.js.map} +1 -1
  383. package/dist/cli-bundle/chunks/{next-D5STGWI2.js → next-ODJUM4ZM.js} +24 -20
  384. package/dist/cli-bundle/chunks/{next-D5STGWI2.js.map → next-ODJUM4ZM.js.map} +1 -1
  385. package/dist/cli-bundle/chunks/{notes-6KNOSLIT.js → notes-72YXN5JX.js} +10 -8
  386. package/dist/cli-bundle/chunks/{notes-6KNOSLIT.js.map → notes-72YXN5JX.js.map} +1 -1
  387. package/dist/cli-bundle/chunks/{notes-W4UEICGF.js → notes-NJ7IQJX4.js} +12 -10
  388. package/dist/cli-bundle/chunks/{notes-W4UEICGF.js.map → notes-NJ7IQJX4.js.map} +1 -1
  389. package/dist/cli-bundle/chunks/{plan-MJQW5XK3.js → plan-R4NDQ27E.js} +18 -15
  390. package/dist/cli-bundle/chunks/{plan-MJQW5XK3.js.map → plan-R4NDQ27E.js.map} +1 -1
  391. package/dist/cli-bundle/chunks/{plan-JO6V7BXO.js → plan-XWY5T67S.js} +20 -17
  392. package/dist/cli-bundle/chunks/{plan-JO6V7BXO.js.map → plan-XWY5T67S.js.map} +1 -1
  393. package/dist/cli-bundle/chunks/profile-XQWEQKS3.js +397 -0
  394. package/dist/cli-bundle/chunks/profile-XQWEQKS3.js.map +1 -0
  395. package/dist/cli-bundle/chunks/profile-YRDHLMRO.js +400 -0
  396. package/dist/cli-bundle/chunks/profile-YRDHLMRO.js.map +7 -0
  397. package/dist/cli-bundle/chunks/{register-list-query-ELBHCCFI.js → register-list-query-5H66WFYF.js} +24 -21
  398. package/dist/cli-bundle/chunks/register-list-query-5H66WFYF.js.map +7 -0
  399. package/dist/cli-bundle/chunks/{register-list-query-GAPQ6DM3.js → register-list-query-FB3FNDLZ.js} +25 -22
  400. package/dist/cli-bundle/chunks/{register-list-query-ELBHCCFI.js.map → register-list-query-FB3FNDLZ.js.map} +1 -7
  401. package/dist/cli-bundle/chunks/{register-mutation-SJWMVIJ2.js → register-mutation-UJO23C7R.js} +42 -39
  402. package/dist/cli-bundle/chunks/{register-mutation-SJWMVIJ2.js.map → register-mutation-UJO23C7R.js.map} +1 -1
  403. package/dist/cli-bundle/chunks/{register-mutation-ROFE2YPC.js → register-mutation-Z2ETYHKS.js} +40 -37
  404. package/dist/cli-bundle/chunks/{register-mutation-ROFE2YPC.js.map → register-mutation-Z2ETYHKS.js.map} +1 -1
  405. package/dist/cli-bundle/chunks/{register-operations-MEKU3AKC.js → register-operations-A3XAM5J7.js} +39 -36
  406. package/dist/cli-bundle/chunks/{register-operations-MEKU3AKC.js.map → register-operations-A3XAM5J7.js.map} +1 -1
  407. package/dist/cli-bundle/chunks/{register-operations-IADFVH53.js → register-operations-SG7HBSUP.js} +37 -34
  408. package/dist/cli-bundle/chunks/{register-operations-IADFVH53.js.map → register-operations-SG7HBSUP.js.map} +1 -1
  409. package/dist/cli-bundle/chunks/{register-setup-AJWUSSQX.js → register-setup-I45OGJUV.js} +25 -19
  410. package/dist/cli-bundle/chunks/{register-setup-AJWUSSQX.js.map → register-setup-I45OGJUV.js.map} +1 -1
  411. package/dist/cli-bundle/chunks/{register-setup-3QJY43CY.js → register-setup-K6U3NVY5.js} +23 -17
  412. package/dist/cli-bundle/chunks/{register-setup-3QJY43CY.js.map → register-setup-K6U3NVY5.js.map} +1 -1
  413. package/dist/cli-bundle/chunks/restore-PXOFL6AM.js +19 -0
  414. package/dist/cli-bundle/chunks/{restore-44IHMMZZ.js → restore-YJ2ET6AT.js} +11 -9
  415. package/dist/cli-bundle/chunks/{scheduling-shortcuts-TSBK4AY5.js → scheduling-shortcuts-SSC4MYWQ.js} +14 -12
  416. package/dist/cli-bundle/chunks/{scheduling-shortcuts-TSBK4AY5.js.map → scheduling-shortcuts-SSC4MYWQ.js.map} +1 -1
  417. package/dist/cli-bundle/chunks/{scheduling-shortcuts-OLHNLAZY.js → scheduling-shortcuts-ULRG7MNP.js} +16 -14
  418. package/dist/cli-bundle/chunks/{scheduling-shortcuts-OLHNLAZY.js.map → scheduling-shortcuts-ULRG7MNP.js.map} +1 -1
  419. package/dist/cli-bundle/chunks/{schema-VBCELP5G.js → schema-2PUXCZ25.js} +10 -7
  420. package/dist/cli-bundle/chunks/{schema-IB2NZZWD.js → schema-Y6DXXK2F.js} +10 -7
  421. package/dist/cli-bundle/chunks/{search-7UBETML4.js → search-3S72CTD6.js} +13 -10
  422. package/dist/cli-bundle/chunks/{search-R227JOL6.js → search-WNUNBQXO.js} +13 -10
  423. package/dist/cli-bundle/chunks/{stats-FAG7COEH.js → stats-IJYTRQGV.js} +13 -10
  424. package/dist/cli-bundle/chunks/{stats-FAG7COEH.js.map → stats-IJYTRQGV.js.map} +1 -1
  425. package/dist/cli-bundle/chunks/{stats-MCK7PLYS.js → stats-L2D5Y2O5.js} +15 -12
  426. package/dist/cli-bundle/chunks/{stats-MCK7PLYS.js.map → stats-L2D5Y2O5.js.map} +1 -1
  427. package/dist/cli-bundle/chunks/{telemetry-DRPDZMAO.js → telemetry-L2CVOKVN.js} +11 -8
  428. package/dist/cli-bundle/chunks/{telemetry-DRPDZMAO.js.map → telemetry-L2CVOKVN.js.map} +1 -1
  429. package/dist/cli-bundle/chunks/{telemetry-GVVUQSJQ.js → telemetry-QBYWQA76.js} +13 -10
  430. package/dist/cli-bundle/chunks/{telemetry-GVVUQSJQ.js.map → telemetry-QBYWQA76.js.map} +1 -1
  431. package/dist/cli-bundle/chunks/{test-QY44WAMR.js → test-DQ2QFJ7W.js} +21 -15
  432. package/dist/cli-bundle/chunks/test-W7QBLVJS.js +41 -0
  433. package/dist/cli-bundle/chunks/{test-all-USPJHXFR.js → test-all-636NTRTT.js} +26 -19
  434. package/dist/cli-bundle/chunks/{test-all-USPJHXFR.js.map → test-all-636NTRTT.js.map} +1 -1
  435. package/dist/cli-bundle/chunks/{test-all-QD6QAEG7.js → test-all-DWYK3RG6.js} +24 -17
  436. package/dist/cli-bundle/chunks/{test-all-QD6QAEG7.js.map → test-all-DWYK3RG6.js.map} +1 -1
  437. package/dist/cli-bundle/chunks/test-runs-245OINZR.js +28 -0
  438. package/dist/cli-bundle/chunks/test-runs-245OINZR.js.map +1 -0
  439. package/dist/cli-bundle/chunks/test-runs-ZRD4GCTT.js +24 -0
  440. package/dist/cli-bundle/chunks/test-runs-ZRD4GCTT.js.map +7 -0
  441. package/dist/cli-bundle/chunks/update-SFLZPJXX.js +30 -0
  442. package/dist/cli-bundle/chunks/update-SFLZPJXX.js.map +1 -0
  443. package/dist/cli-bundle/chunks/update-SJZ6S77U.js +26 -0
  444. package/dist/cli-bundle/chunks/update-SJZ6S77U.js.map +7 -0
  445. package/dist/cli-bundle/chunks/{update-many-RATAARHU.js → update-many-DC7X3EWM.js} +32 -29
  446. package/dist/cli-bundle/chunks/{update-many-RATAARHU.js.map → update-many-DC7X3EWM.js.map} +1 -1
  447. package/dist/cli-bundle/chunks/{update-many-BEMTDA2X.js → update-many-SLLAMHT7.js} +34 -31
  448. package/dist/cli-bundle/chunks/{update-many-BEMTDA2X.js.map → update-many-SLLAMHT7.js.map} +1 -1
  449. package/dist/cli-bundle/chunks/{upgrade-VU46BLJZ.js → upgrade-HFFXLZJA.js} +19 -12
  450. package/dist/cli-bundle/chunks/{upgrade-VU46BLJZ.js.map → upgrade-HFFXLZJA.js.map} +1 -1
  451. package/dist/cli-bundle/chunks/{upgrade-NWMR3VQL.js → upgrade-UYQKM7RF.js} +21 -14
  452. package/dist/cli-bundle/chunks/{upgrade-NWMR3VQL.js.map → upgrade-UYQKM7RF.js.map} +1 -1
  453. package/dist/cli-bundle/chunks/{validate-NRY6MFXN.js → validate-PA4FDTOV.js} +35 -28
  454. package/dist/cli-bundle/chunks/validate-PA4FDTOV.js.map +7 -0
  455. package/dist/cli-bundle/chunks/{validate-GAJ6FUSI.js → validate-Z7L75YEJ.js} +35 -28
  456. package/dist/cli-bundle/chunks/validate-Z7L75YEJ.js.map +1 -0
  457. package/dist/cli-bundle/main.js +173 -57
  458. package/dist/cli-bundle/main.js.map +2 -2
  459. package/dist/cli-bundle/sdk-runtime.js +247 -0
  460. package/dist/cli-bundle/sdk-runtime.js.map +7 -0
  461. package/dist/cli-bundle/sdk-testing.js +101 -0
  462. package/dist/cli-bundle/sdk-testing.js.map +7 -0
  463. package/dist/cli-bundle/sdk.js +787 -0
  464. package/dist/cli-bundle/sdk.js.map +7 -0
  465. package/dist/core/config/nested-settings.d.ts +4 -3
  466. package/dist/core/config/nested-settings.js +17 -6
  467. package/dist/core/config/nested-settings.js.map +1 -1
  468. package/dist/core/extensions/activation-summary.d.ts +6 -0
  469. package/dist/core/extensions/activation-summary.js +10 -4
  470. package/dist/core/extensions/activation-summary.js.map +1 -1
  471. package/dist/core/extensions/capability-usage.d.ts +6 -0
  472. package/dist/core/extensions/capability-usage.js +10 -4
  473. package/dist/core/extensions/capability-usage.js.map +1 -1
  474. package/dist/core/extensions/extension-types.d.ts +6 -2
  475. package/dist/core/extensions/extension-types.js +2 -2
  476. package/dist/core/extensions/extension-types.js.map +1 -1
  477. package/dist/core/extensions/loader.d.ts +3 -0
  478. package/dist/core/extensions/loader.js +11 -19
  479. package/dist/core/extensions/loader.js.map +1 -1
  480. package/dist/core/history/history-rewrite.d.ts +10 -0
  481. package/dist/core/history/history-rewrite.js +28 -4
  482. package/dist/core/history/history-rewrite.js.map +1 -1
  483. package/dist/core/item/parent-reference-policy.d.ts +9 -1
  484. package/dist/core/item/parent-reference-policy.js +28 -4
  485. package/dist/core/item/parent-reference-policy.js.map +1 -1
  486. package/dist/core/item/type-registry.d.ts +1 -0
  487. package/dist/core/item/type-registry.js +153 -177
  488. package/dist/core/item/type-registry.js.map +1 -1
  489. package/dist/core/lock/lock.d.ts +28 -1
  490. package/dist/core/lock/lock.js +254 -20
  491. package/dist/core/lock/lock.js.map +1 -1
  492. package/dist/core/search/background-refresh.js +7 -19
  493. package/dist/core/search/background-refresh.js.map +1 -1
  494. package/dist/core/search/http-client.d.ts +0 -1
  495. package/dist/core/search/http-client.js +3 -3
  496. package/dist/core/search/http-client.js.map +1 -1
  497. package/dist/core/shared/constants.js +3 -2
  498. package/dist/core/shared/constants.js.map +1 -1
  499. package/dist/core/shared/errors.d.ts +1 -0
  500. package/dist/core/shared/errors.js +2 -2
  501. package/dist/core/shared/errors.js.map +1 -1
  502. package/dist/core/shared/primitives.d.ts +12 -0
  503. package/dist/core/shared/primitives.js +29 -2
  504. package/dist/core/shared/primitives.js.map +1 -1
  505. package/dist/core/store/item-store.js +3 -3
  506. package/dist/core/store/item-store.js.map +1 -1
  507. package/dist/core/store/settings-validator.d.ts +1 -0
  508. package/dist/core/store/settings-validator.js +6 -3
  509. package/dist/core/store/settings-validator.js.map +1 -1
  510. package/dist/core/store/settings.js +3 -3
  511. package/dist/core/store/settings.js.map +1 -1
  512. package/dist/core/validate/fix-planning.d.ts +0 -2
  513. package/dist/core/validate/fix-planning.js +3 -3
  514. package/dist/core/validate/fix-planning.js.map +1 -1
  515. package/dist/sdk/cli-contracts/commander-mutation-options.js +3 -2
  516. package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
  517. package/dist/sdk/cli-contracts/flag-contracts.js +5 -2
  518. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  519. package/dist/sdk/cli-contracts/tool-option-contracts.js +4 -2
  520. package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
  521. package/dist/sdk/cli-contracts/tool-schema.js +55 -94
  522. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  523. package/dist/sdk/errors.d.ts +21 -2
  524. package/dist/sdk/errors.js +8 -2
  525. package/dist/sdk/errors.js.map +1 -1
  526. package/dist/sdk/package-import-adapters.d.ts +90 -2
  527. package/dist/sdk/package-import-adapters.js +275 -3
  528. package/dist/sdk/package-import-adapters.js.map +1 -1
  529. package/dist/sdk/runtime.d.ts +1 -1
  530. package/dist/sdk/runtime.js +3 -3
  531. package/dist/sdk/runtime.js.map +1 -1
  532. package/dist/sdk/testing.js +41 -19
  533. package/dist/sdk/testing.js.map +1 -1
  534. package/dist/types.d.ts +6 -0
  535. package/dist/types.js +2 -2
  536. package/dist/types.js.map +1 -1
  537. package/docs/ARCHITECTURE.md +27 -0
  538. package/docs/CONFIGURATION.md +3 -0
  539. package/docs/README.md +1 -0
  540. package/docs/SDK_PRIMITIVE_INVENTORY.md +55 -0
  541. package/docs/TESTING.md +5 -1
  542. package/docs/examples/ci/github-actions-pm-extension-gate.yml +5 -5
  543. package/docs/examples/ci/gitlab-ci-pm-extension-gate.yml +1 -1
  544. package/docs/examples/ci/jenkins-pm-extension-gate.Jenkinsfile +1 -1
  545. package/package.json +14 -26
  546. package/packages/pm-beads/extensions/beads/package.json +3 -0
  547. package/packages/pm-beads/extensions/beads/runtime-loader.ts +50 -41
  548. package/packages/pm-beads/extensions/beads/runtime.ts +106 -223
  549. package/packages/pm-calendar/extensions/calendar/package.json +3 -0
  550. package/packages/pm-calendar/extensions/calendar/runtime.ts +21 -18
  551. package/packages/pm-command-kit/extensions/command-kit/package.json +3 -0
  552. package/packages/pm-governance-audit/extensions/governance-audit/package.json +3 -0
  553. package/packages/pm-guide-shell/extensions/guide-shell/package.json +3 -0
  554. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +9 -11
  555. package/packages/pm-kanban/extensions/kanban/package.json +3 -0
  556. package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/package.json +3 -0
  557. package/packages/pm-search-advanced/extensions/search-advanced/package.json +3 -0
  558. package/packages/pm-templates/extensions/templates/package.json +3 -0
  559. package/packages/pm-todos/extensions/todos/package.json +3 -0
  560. package/packages/pm-todos/extensions/todos/runtime-loader.ts +62 -72
  561. package/packages/pm-todos/extensions/todos/runtime.ts +61 -257
  562. package/plugins/pm-claude/scripts/pm-mcp-server.mjs +73 -31
  563. package/plugins/pm-codex/scripts/pm-mcp-server.mjs +80 -34
  564. package/scripts/bundle-cli.mjs +12 -2
  565. package/scripts/install.ps1 +7 -7
  566. package/dist/cli-bundle/chunks/activity-BIML7K2D.js +0 -16
  567. package/dist/cli-bundle/chunks/chunk-32IUNTG4.js.map +0 -1
  568. package/dist/cli-bundle/chunks/chunk-4EXFFP7T.js.map +0 -7
  569. package/dist/cli-bundle/chunks/chunk-4WB6S4YX.js.map +0 -1
  570. package/dist/cli-bundle/chunks/chunk-572FKBRL.js.map +0 -1
  571. package/dist/cli-bundle/chunks/chunk-67LARBDL.js.map +0 -1
  572. package/dist/cli-bundle/chunks/chunk-6CDCWKSX.js.map +0 -1
  573. package/dist/cli-bundle/chunks/chunk-6KRFL33E.js.map +0 -7
  574. package/dist/cli-bundle/chunks/chunk-AJHYQCBJ.js.map +0 -7
  575. package/dist/cli-bundle/chunks/chunk-B4O5S7I3.js.map +0 -7
  576. package/dist/cli-bundle/chunks/chunk-CXR3CMBQ.js.map +0 -1
  577. package/dist/cli-bundle/chunks/chunk-ECU6MMTQ.js.map +0 -1
  578. package/dist/cli-bundle/chunks/chunk-EJ2OCBHF.js.map +0 -1
  579. package/dist/cli-bundle/chunks/chunk-ERG65A2L.js.map +0 -1
  580. package/dist/cli-bundle/chunks/chunk-FUFFPIYA.js.map +0 -7
  581. package/dist/cli-bundle/chunks/chunk-HB4FAT3O.js.map +0 -7
  582. package/dist/cli-bundle/chunks/chunk-HQAF23Q2.js.map +0 -7
  583. package/dist/cli-bundle/chunks/chunk-JPATY4SE.js.map +0 -7
  584. package/dist/cli-bundle/chunks/chunk-KHVGM5CS.js.map +0 -7
  585. package/dist/cli-bundle/chunks/chunk-KS6ATO47.js.map +0 -7
  586. package/dist/cli-bundle/chunks/chunk-L4SLHV6G.js.map +0 -1
  587. package/dist/cli-bundle/chunks/chunk-MHRS5FUX.js.map +0 -1
  588. package/dist/cli-bundle/chunks/chunk-NZ7QIUP5.js.map +0 -7
  589. package/dist/cli-bundle/chunks/chunk-OGLGI22K.js.map +0 -1
  590. package/dist/cli-bundle/chunks/chunk-RAHINBVP.js.map +0 -7
  591. package/dist/cli-bundle/chunks/chunk-RJH5VQHW.js.map +0 -1
  592. package/dist/cli-bundle/chunks/chunk-SYE6WMV6.js.map +0 -1
  593. package/dist/cli-bundle/chunks/chunk-TQ6AX5SQ.js.map +0 -7
  594. package/dist/cli-bundle/chunks/chunk-U3S2B7TA.js.map +0 -1
  595. package/dist/cli-bundle/chunks/chunk-WRYERRZX.js.map +0 -7
  596. package/dist/cli-bundle/chunks/chunk-WYOIIFSE.js.map +0 -7
  597. package/dist/cli-bundle/chunks/chunk-XRYSCRZR.js.map +0 -7
  598. package/dist/cli-bundle/chunks/chunk-YF746GTH.js.map +0 -1
  599. package/dist/cli-bundle/chunks/chunk-YSDFIY7N.js.map +0 -1
  600. package/dist/cli-bundle/chunks/chunk-Z4DGFQDH.js.map +0 -1
  601. package/dist/cli-bundle/chunks/claim-2BGBGSVI.js.map +0 -7
  602. package/dist/cli-bundle/chunks/claim-5GU7OE67.js.map +0 -1
  603. package/dist/cli-bundle/chunks/close-6YODBUIV.js +0 -14
  604. package/dist/cli-bundle/chunks/create-Z7YCH3BE.js +0 -28
  605. package/dist/cli-bundle/chunks/files-6SGKHS6O.js.map +0 -1
  606. package/dist/cli-bundle/chunks/files-FUYPSOFJ.js.map +0 -7
  607. package/dist/cli-bundle/chunks/history-CGNQJXFE.js +0 -18
  608. package/dist/cli-bundle/chunks/history-compact-LOED43R3.js.map +0 -7
  609. package/dist/cli-bundle/chunks/history-compact-V5DNAQHH.js.map +0 -1
  610. package/dist/cli-bundle/chunks/history-redact-N3JK7VBW.js +0 -19
  611. package/dist/cli-bundle/chunks/history-repair-4WVBVHFR.js.map +0 -1
  612. package/dist/cli-bundle/chunks/history-repair-PGYQJMGD.js.map +0 -7
  613. package/dist/cli-bundle/chunks/init-4GESW7RM.js +0 -26
  614. package/dist/cli-bundle/chunks/init-XIDPABA4.js +0 -22
  615. package/dist/cli-bundle/chunks/profile-3TOTMUR4.js +0 -1243
  616. package/dist/cli-bundle/chunks/profile-3TOTMUR4.js.map +0 -7
  617. package/dist/cli-bundle/chunks/profile-WIQY2KCV.js +0 -1205
  618. package/dist/cli-bundle/chunks/profile-WIQY2KCV.js.map +0 -1
  619. package/dist/cli-bundle/chunks/register-list-query-GAPQ6DM3.js.map +0 -1
  620. package/dist/cli-bundle/chunks/restore-EXHU34EU.js +0 -17
  621. package/dist/cli-bundle/chunks/test-SY76DZTO.js +0 -35
  622. package/dist/cli-bundle/chunks/update-A7EICML6.js +0 -24
  623. package/dist/cli-bundle/chunks/update-IKJZWLQC.js +0 -28
  624. package/dist/cli-bundle/chunks/validate-GAJ6FUSI.js.map +0 -1
  625. package/dist/cli-bundle/chunks/validate-NRY6MFXN.js.map +0 -7
  626. /package/dist/cli-bundle/chunks/{activity-BIML7K2D.js.map → activity-4XQIDNM5.js.map} +0 -0
  627. /package/dist/cli-bundle/chunks/{activity-5YWLSPGE.js.map → activity-YKAKZTZ4.js.map} +0 -0
  628. /package/dist/cli-bundle/chunks/{chunk-QCDTQCMW.js.map → chunk-5JE6SMYS.js.map} +0 -0
  629. /package/dist/cli-bundle/chunks/{chunk-5JIWFWOZ.js.map → chunk-N6DNM2FA.js.map} +0 -0
  630. /package/dist/cli-bundle/chunks/{chunk-GVJE5T7Q.js.map → chunk-NER3KUUS.js.map} +0 -0
  631. /package/dist/cli-bundle/chunks/{chunk-MEZZZBYX.js.map → chunk-PDXT6Q55.js.map} +0 -0
  632. /package/dist/cli-bundle/chunks/{chunk-YVKZ3ANP.js.map → chunk-RX3HQSYG.js.map} +0 -0
  633. /package/dist/cli-bundle/chunks/{chunk-LOWVNZBZ.js.map → chunk-S4APD35C.js.map} +0 -0
  634. /package/dist/cli-bundle/chunks/{chunk-6NYJGMTY.js.map → chunk-T35XLYZF.js.map} +0 -0
  635. /package/dist/cli-bundle/chunks/{chunk-BE2SR6QL.js.map → chunk-TT42JUMF.js.map} +0 -0
  636. /package/dist/cli-bundle/chunks/{chunk-SU3TB4NS.js.map → chunk-YOF5VPKM.js.map} +0 -0
  637. /package/dist/cli-bundle/chunks/{chunk-5E7N4T2Z.js.map → chunk-ZMD35NYG.js.map} +0 -0
  638. /package/dist/cli-bundle/chunks/{close-AFVKPR57.js.map → close-3YRR3XY6.js.map} +0 -0
  639. /package/dist/cli-bundle/chunks/{close-6YODBUIV.js.map → close-OB2Y4QP5.js.map} +0 -0
  640. /package/dist/cli-bundle/chunks/{context-PKCEHQY3.js.map → context-4OQGIPSO.js.map} +0 -0
  641. /package/dist/cli-bundle/chunks/{context-OYXRGY7S.js.map → context-WLA6IAWE.js.map} +0 -0
  642. /package/dist/cli-bundle/chunks/{create-Z7YCH3BE.js.map → contracts-HXJLKCRI.js.map} +0 -0
  643. /package/dist/cli-bundle/chunks/{create-PM45M6PE.js.map → contracts-OJEXMKVW.js.map} +0 -0
  644. /package/dist/cli-bundle/chunks/{extension-BNINIMT7.js.map → create-WKOZKPQR.js.map} +0 -0
  645. /package/dist/cli-bundle/chunks/{extension-QWE4YYK5.js.map → create-XWWQFQ6S.js.map} +0 -0
  646. /package/dist/cli-bundle/chunks/{history-CGNQJXFE.js.map → extension-NBAH62ML.js.map} +0 -0
  647. /package/dist/cli-bundle/chunks/{history-SGRRS72R.js.map → extension-ZF6ZZPOU.js.map} +0 -0
  648. /package/dist/cli-bundle/chunks/{history-redact-N3JK7VBW.js.map → history-RYKLC72X.js.map} +0 -0
  649. /package/dist/cli-bundle/chunks/{history-redact-IRL7WJ3E.js.map → history-SGPYRAFT.js.map} +0 -0
  650. /package/dist/cli-bundle/chunks/{init-XIDPABA4.js.map → history-redact-4H3FCKF3.js.map} +0 -0
  651. /package/dist/cli-bundle/chunks/{init-4GESW7RM.js.map → history-redact-54ICFKXM.js.map} +0 -0
  652. /package/dist/cli-bundle/chunks/{list-D7BF5CL2.js.map → init-RPIPQUNV.js.map} +0 -0
  653. /package/dist/cli-bundle/chunks/{list-472TIOVK.js.map → init-SKQAESQS.js.map} +0 -0
  654. /package/dist/cli-bundle/chunks/{restore-EXHU34EU.js.map → list-64LHZ3HM.js.map} +0 -0
  655. /package/dist/cli-bundle/chunks/{restore-44IHMMZZ.js.map → list-7LXBTEKI.js.map} +0 -0
  656. /package/dist/cli-bundle/chunks/{schema-VBCELP5G.js.map → restore-PXOFL6AM.js.map} +0 -0
  657. /package/dist/cli-bundle/chunks/{schema-IB2NZZWD.js.map → restore-YJ2ET6AT.js.map} +0 -0
  658. /package/dist/cli-bundle/chunks/{search-R227JOL6.js.map → schema-2PUXCZ25.js.map} +0 -0
  659. /package/dist/cli-bundle/chunks/{search-7UBETML4.js.map → schema-Y6DXXK2F.js.map} +0 -0
  660. /package/dist/cli-bundle/chunks/{test-QY44WAMR.js.map → search-3S72CTD6.js.map} +0 -0
  661. /package/dist/cli-bundle/chunks/{test-SY76DZTO.js.map → search-WNUNBQXO.js.map} +0 -0
  662. /package/dist/cli-bundle/chunks/{update-IKJZWLQC.js.map → test-DQ2QFJ7W.js.map} +0 -0
  663. /package/dist/cli-bundle/chunks/{update-A7EICML6.js.map → test-W7QBLVJS.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  // dist/core/fs/fs-utils.js
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="aeaf9c80-302b-561b-892d-b98b811d424b")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b82b3892-108d-51df-a033-47913481d9b1")}catch(e){}}();
4
4
  import * as fs from "node:fs/promises";
5
5
  import path from "node:path";
6
6
  import crypto from "node:crypto";
@@ -153,6 +153,16 @@ function resolvePmCliVersion(metaUrl, fallbackRelativeSegments = []) {
153
153
  return void 0;
154
154
  }
155
155
  }
156
+ function resolveConfiguredPmPackageRoot(env = process.env, envName = "PM_CLI_PACKAGE_ROOT", metaUrl, fallbackRelativeSegments = []) {
157
+ const envRoot = env[envName];
158
+ if (typeof envRoot === "string" && envRoot.trim().length > 0) {
159
+ return path3.resolve(envRoot.trim());
160
+ }
161
+ if (metaUrl) {
162
+ return resolvePmPackageRootFromModule(metaUrl, fallbackRelativeSegments);
163
+ }
164
+ return process.cwd();
165
+ }
156
166
 
157
167
  // dist/core/extensions/extension-types.js
158
168
  var KNOWN_EXTENSION_CAPABILITIES = [
@@ -431,7 +441,8 @@ var SETTINGS_DEFAULTS = {
431
441
  author_default: "",
432
442
  item_format: "toon",
433
443
  locks: {
434
- ttl_seconds: 1800
444
+ ttl_seconds: 1800,
445
+ wait_ms: 3e3
435
446
  },
436
447
  checkpoints: {
437
448
  retention_days: 14
@@ -963,116 +974,85 @@ var UPDATE_COMMAND_OPTION_ALIASES = {
963
974
  "allow-audit-update": "allowAuditUpdate",
964
975
  allow_audit_update: "allowAuditUpdate"
965
976
  };
966
- var CREATE_COMMAND_OPTION_FLAG_LABELS = {
967
- title: "--title",
968
- description: "--description",
969
- type: "--type",
970
- status: "--status",
971
- priority: "--priority",
972
- tags: "--tags",
973
- body: "--body",
974
- deadline: "--deadline",
975
- estimatedMinutes: "--estimate/--estimated-minutes",
976
- acceptanceCriteria: "--acceptance-criteria/--ac",
977
- definitionOfReady: "--definition-of-ready",
978
- order: "--order/--rank",
979
- goal: "--goal",
980
- objective: "--objective",
981
- value: "--value",
982
- impact: "--impact",
983
- outcome: "--outcome",
984
- whyNow: "--why-now",
985
- author: "--author",
986
- message: "--message",
987
- assignee: "--assignee",
988
- parent: "--parent",
989
- reviewer: "--reviewer",
990
- risk: "--risk",
991
- confidence: "--confidence",
992
- sprint: "--sprint",
993
- release: "--release",
994
- blockedBy: "--blocked-by",
995
- blockedReason: "--blocked-reason",
996
- unblockNote: "--unblock-note",
997
- reporter: "--reporter",
998
- severity: "--severity",
999
- environment: "--environment",
1000
- reproSteps: "--repro-steps",
1001
- resolution: "--resolution",
1002
- expectedResult: "--expected-result",
1003
- actualResult: "--actual-result",
1004
- affectedVersion: "--affected-version",
1005
- fixedVersion: "--fixed-version",
1006
- component: "--component",
1007
- regression: "--regression",
1008
- customerImpact: "--customer-impact",
1009
- dep: "--dep",
1010
- comment: "--comment",
1011
- note: "--note",
1012
- learning: "--learning",
1013
- file: "--file",
1014
- test: "--test",
1015
- doc: "--doc",
1016
- reminder: "--reminder",
1017
- event: "--event",
1018
- typeOption: "--type-option"
1019
- };
1020
- var UPDATE_COMMAND_OPTION_FLAG_LABELS = {
1021
- title: "--title",
1022
- description: "--description",
1023
- body: "--body",
1024
- status: "--status",
1025
- closeReason: "--close-reason",
1026
- priority: "--priority",
1027
- type: "--type",
1028
- tags: "--tags",
1029
- deadline: "--deadline",
1030
- estimatedMinutes: "--estimate/--estimated-minutes",
1031
- acceptanceCriteria: "--acceptance-criteria/--ac",
1032
- definitionOfReady: "--definition-of-ready",
1033
- order: "--order/--rank",
1034
- goal: "--goal",
1035
- objective: "--objective",
1036
- value: "--value",
1037
- impact: "--impact",
1038
- outcome: "--outcome",
1039
- whyNow: "--why-now",
1040
- assignee: "--assignee",
1041
- parent: "--parent",
1042
- reviewer: "--reviewer",
1043
- risk: "--risk",
1044
- confidence: "--confidence",
1045
- sprint: "--sprint",
1046
- release: "--release",
1047
- blockedBy: "--blocked-by",
1048
- blockedReason: "--blocked-reason",
1049
- unblockNote: "--unblock-note",
1050
- reporter: "--reporter",
1051
- severity: "--severity",
1052
- environment: "--environment",
1053
- reproSteps: "--repro-steps",
1054
- resolution: "--resolution",
1055
- expectedResult: "--expected-result",
1056
- actualResult: "--actual-result",
1057
- affectedVersion: "--affected-version",
1058
- fixedVersion: "--fixed-version",
1059
- component: "--component",
1060
- regression: "--regression",
1061
- customerImpact: "--customer-impact",
1062
- comment: "--comment",
1063
- note: "--note",
1064
- learning: "--learning",
1065
- file: "--file",
1066
- test: "--test",
1067
- doc: "--doc",
1068
- reminder: "--reminder",
1069
- event: "--event",
1070
- typeOption: "--type-option",
1071
- allowAuditUpdate: "--allow-audit-update",
1072
- author: "--author",
1073
- message: "--message",
1074
- force: "--force"
1075
- };
977
+ var COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES = [
978
+ ["deadline", "--deadline"],
979
+ ["estimatedMinutes", "--estimate/--estimated-minutes"],
980
+ ["acceptanceCriteria", "--acceptance-criteria/--ac"],
981
+ ["definitionOfReady", "--definition-of-ready"],
982
+ ["order", "--order/--rank"],
983
+ ["goal", "--goal"],
984
+ ["objective", "--objective"],
985
+ ["value", "--value"],
986
+ ["impact", "--impact"],
987
+ ["outcome", "--outcome"],
988
+ ["whyNow", "--why-now"],
989
+ ["assignee", "--assignee"],
990
+ ["parent", "--parent"],
991
+ ["reviewer", "--reviewer"],
992
+ ["risk", "--risk"],
993
+ ["confidence", "--confidence"],
994
+ ["sprint", "--sprint"],
995
+ ["release", "--release"],
996
+ ["blockedBy", "--blocked-by"],
997
+ ["blockedReason", "--blocked-reason"],
998
+ ["unblockNote", "--unblock-note"],
999
+ ["reporter", "--reporter"],
1000
+ ["severity", "--severity"],
1001
+ ["environment", "--environment"],
1002
+ ["reproSteps", "--repro-steps"],
1003
+ ["resolution", "--resolution"],
1004
+ ["expectedResult", "--expected-result"],
1005
+ ["actualResult", "--actual-result"],
1006
+ ["affectedVersion", "--affected-version"],
1007
+ ["fixedVersion", "--fixed-version"],
1008
+ ["component", "--component"],
1009
+ ["regression", "--regression"],
1010
+ ["customerImpact", "--customer-impact"]
1011
+ ];
1012
+ var LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES = [
1013
+ ["comment", "--comment"],
1014
+ ["note", "--note"],
1015
+ ["learning", "--learning"],
1016
+ ["file", "--file"],
1017
+ ["test", "--test"],
1018
+ ["doc", "--doc"],
1019
+ ["reminder", "--reminder"],
1020
+ ["event", "--event"],
1021
+ ["typeOption", "--type-option"]
1022
+ ];
1023
+ function commandOptionLabelMap(entries) {
1024
+ return Object.fromEntries(entries);
1025
+ }
1026
+ var CREATE_COMMAND_OPTION_FLAG_LABELS = commandOptionLabelMap([
1027
+ ["title", "--title"],
1028
+ ["description", "--description"],
1029
+ ["type", "--type"],
1030
+ ["status", "--status"],
1031
+ ["priority", "--priority"],
1032
+ ["tags", "--tags"],
1033
+ ["body", "--body"],
1034
+ ...COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES,
1035
+ ["author", "--author"],
1036
+ ["message", "--message"],
1037
+ ["dep", "--dep"],
1038
+ ...LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES
1039
+ ]);
1040
+ var UPDATE_COMMAND_OPTION_FLAG_LABELS = commandOptionLabelMap([
1041
+ ["title", "--title"],
1042
+ ["description", "--description"],
1043
+ ["body", "--body"],
1044
+ ["status", "--status"],
1045
+ ["closeReason", "--close-reason"],
1046
+ ["priority", "--priority"],
1047
+ ["type", "--type"],
1048
+ ["tags", "--tags"],
1049
+ ...COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES,
1050
+ ...LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES,
1051
+ ["allowAuditUpdate", "--allow-audit-update"],
1052
+ ["author", "--author"],
1053
+ ["message", "--message"],
1054
+ ["force", "--force"]
1055
+ ]);
1076
1056
  function normalizeCommandOptionToken(value) {
1077
1057
  return value.trim().replace(/^--+/, "").toLowerCase();
1078
1058
  }
@@ -1217,6 +1197,27 @@ function resolveDefinitionOptions(normalizedDefinition, existing) {
1217
1197
  function resolveDefinitionCommandOptionPolicies(normalizedDefinition, existing) {
1218
1198
  return normalizedDefinition.command_option_policies ? normalizedDefinition.command_option_policies : existing?.command_option_policies ? [...existing.command_option_policies] : [];
1219
1199
  }
1200
+ function buildResolvedTypeDefinition(normalizedDefinition, existing) {
1201
+ const keepName = existing?.name ?? normalizedDefinition.name;
1202
+ const description = normalizedDefinition.description ?? existing?.description;
1203
+ const defaultStatus = normalizedDefinition.default_status ?? existing?.default_status;
1204
+ const resolvedDefinition = {
1205
+ name: keepName,
1206
+ folder: normalizedDefinition.folder ?? existing?.folder ?? toDefaultFolder(keepName),
1207
+ aliases: normalizeItemTypeStringList([...existing?.aliases ?? [], ...normalizedDefinition.aliases ?? []]),
1208
+ required_create_fields: resolveDefinitionRequiredCreateFields(normalizedDefinition, existing),
1209
+ required_create_repeatables: resolveDefinitionRequiredCreateRepeatables(normalizedDefinition, existing),
1210
+ options: resolveDefinitionOptions(normalizedDefinition, existing),
1211
+ command_option_policies: resolveDefinitionCommandOptionPolicies(normalizedDefinition, existing)
1212
+ };
1213
+ if (description) {
1214
+ resolvedDefinition.description = description;
1215
+ }
1216
+ if (defaultStatus) {
1217
+ resolvedDefinition.default_status = defaultStatus;
1218
+ }
1219
+ return resolvedDefinition;
1220
+ }
1220
1221
  function applyTypeDefinitions(source, target) {
1221
1222
  for (const rawDefinition of source) {
1222
1223
  const normalizedDefinition = normalizeTypeDefinition(rawDefinition);
@@ -1225,25 +1226,7 @@ function applyTypeDefinitions(source, target) {
1225
1226
  }
1226
1227
  const lowerName = normalizedDefinition.name.toLowerCase();
1227
1228
  const existing = target.get(lowerName);
1228
- const keepName = existing?.name ?? normalizedDefinition.name;
1229
- const folder = normalizedDefinition.folder ?? existing?.folder ?? toDefaultFolder(keepName);
1230
- const aliases = normalizeItemTypeStringList([
1231
- ...existing?.aliases ?? [],
1232
- ...normalizedDefinition.aliases ?? []
1233
- ]);
1234
- const defaultStatus = normalizedDefinition.default_status ?? existing?.default_status;
1235
- const description = normalizedDefinition.description ?? existing?.description;
1236
- target.set(lowerName, {
1237
- name: keepName,
1238
- ...description ? { description } : {},
1239
- ...defaultStatus ? { default_status: defaultStatus } : {},
1240
- folder,
1241
- aliases,
1242
- required_create_fields: resolveDefinitionRequiredCreateFields(normalizedDefinition, existing),
1243
- required_create_repeatables: resolveDefinitionRequiredCreateRepeatables(normalizedDefinition, existing),
1244
- options: resolveDefinitionOptions(normalizedDefinition, existing),
1245
- command_option_policies: resolveDefinitionCommandOptionPolicies(normalizedDefinition, existing)
1246
- });
1229
+ target.set(lowerName, buildResolvedTypeDefinition(normalizedDefinition, existing));
1247
1230
  }
1248
1231
  }
1249
1232
  function collectExtensionTypeDefinitions(registrations) {
@@ -1314,55 +1297,62 @@ function resolveTypeDefinition(typeName, registry) {
1314
1297
  }
1315
1298
  return registry.by_type[resolvedName];
1316
1299
  }
1317
- function resolveCommandOptionPolicyState(typeDefinition, command, baseRequiredOptions) {
1318
- const errors = [];
1319
- const required = /* @__PURE__ */ new Set();
1320
- const hidden = /* @__PURE__ */ new Set();
1321
- const disabled = /* @__PURE__ */ new Set();
1300
+ function applyBaseRequiredCommandOptions(state, typeDefinition, command, baseRequiredOptions) {
1322
1301
  for (const rawBase of baseRequiredOptions) {
1323
1302
  const canonical = canonicalizeCommandOptionKey(command, rawBase);
1324
- if (!canonical) {
1325
- errors.push(`Unsupported base required option "${rawBase}" for command "${command}" on type "${typeDefinition.name}"`);
1303
+ if (canonical) {
1304
+ state.required.add(canonical);
1326
1305
  continue;
1327
1306
  }
1328
- required.add(canonical);
1307
+ state.errors.push(`Unsupported base required option "${rawBase}" for command "${command}" on type "${typeDefinition.name}"`);
1308
+ }
1309
+ }
1310
+ function applyBooleanPolicySet(target, option, enabled) {
1311
+ if (enabled) {
1312
+ target.add(option);
1313
+ return;
1314
+ }
1315
+ target.delete(option);
1316
+ }
1317
+ function applyCommandOptionPolicy(state, typeDefinition, command, policy) {
1318
+ const canonical = canonicalizeCommandOptionKey(command, policy.option);
1319
+ if (!canonical) {
1320
+ state.errors.push(`Unsupported command_option_policies option "${policy.option}" for command "${command}" on type "${typeDefinition.name}"`);
1321
+ return;
1322
+ }
1323
+ if (policy.required !== void 0) {
1324
+ applyBooleanPolicySet(state.required, canonical, policy.required);
1329
1325
  }
1326
+ if (policy.visible !== void 0) {
1327
+ applyBooleanPolicySet(state.hidden, canonical, !policy.visible);
1328
+ }
1329
+ if (policy.enabled !== void 0) {
1330
+ applyBooleanPolicySet(state.disabled, canonical, !policy.enabled);
1331
+ }
1332
+ }
1333
+ function applyCommandOptionPolicies(state, typeDefinition, command) {
1330
1334
  for (const policy of typeDefinition.command_option_policies) {
1331
- if (policy.command !== command) {
1332
- continue;
1333
- }
1334
- const canonical = canonicalizeCommandOptionKey(command, policy.option);
1335
- if (!canonical) {
1336
- errors.push(`Unsupported command_option_policies option "${policy.option}" for command "${command}" on type "${typeDefinition.name}"`);
1337
- continue;
1338
- }
1339
- if (policy.required !== void 0) {
1340
- if (policy.required) {
1341
- required.add(canonical);
1342
- } else {
1343
- required.delete(canonical);
1344
- }
1345
- }
1346
- if (policy.visible !== void 0) {
1347
- if (policy.visible) {
1348
- hidden.delete(canonical);
1349
- } else {
1350
- hidden.add(canonical);
1351
- }
1352
- }
1353
- if (policy.enabled !== void 0) {
1354
- if (policy.enabled) {
1355
- disabled.delete(canonical);
1356
- } else {
1357
- disabled.add(canonical);
1358
- }
1335
+ if (policy.command === command) {
1336
+ applyCommandOptionPolicy(state, typeDefinition, command, policy);
1359
1337
  }
1360
1338
  }
1361
- for (const option of required) {
1362
- if (disabled.has(option)) {
1363
- errors.push(`Option "${option}" cannot be both required and disabled for command "${command}" on type "${typeDefinition.name}"`);
1339
+ }
1340
+ function appendRequiredDisabledPolicyErrors(state, typeDefinition, command) {
1341
+ for (const option of state.required) {
1342
+ if (state.disabled.has(option)) {
1343
+ state.errors.push(`Option "${option}" cannot be both required and disabled for command "${command}" on type "${typeDefinition.name}"`);
1364
1344
  }
1365
1345
  }
1346
+ }
1347
+ function resolveCommandOptionPolicyState(typeDefinition, command, baseRequiredOptions) {
1348
+ const errors = [];
1349
+ const required = /* @__PURE__ */ new Set();
1350
+ const hidden = /* @__PURE__ */ new Set();
1351
+ const disabled = /* @__PURE__ */ new Set();
1352
+ const state = { required, hidden, disabled, errors };
1353
+ applyBaseRequiredCommandOptions(state, typeDefinition, command, baseRequiredOptions);
1354
+ applyCommandOptionPolicies(state, typeDefinition, command);
1355
+ appendRequiredDisabledPolicyErrors(state, typeDefinition, command);
1366
1356
  return {
1367
1357
  required: [...required],
1368
1358
  hidden: [...hidden].sort((left, right) => left.localeCompare(right)),
@@ -1613,6 +1603,23 @@ function asRecordLoose(value) {
1613
1603
  }
1614
1604
  return value;
1615
1605
  }
1606
+ function asPropertyRecord(value) {
1607
+ if (typeof value !== "object" && typeof value !== "function" || value === null) {
1608
+ return null;
1609
+ }
1610
+ return value;
1611
+ }
1612
+ function resolveActivatablePropertyRecord(value) {
1613
+ const moduleRecord = asPropertyRecord(value);
1614
+ if (!moduleRecord) {
1615
+ return null;
1616
+ }
1617
+ if (typeof moduleRecord.activate === "function") {
1618
+ return moduleRecord;
1619
+ }
1620
+ const defaultExport = asPropertyRecord(moduleRecord.default);
1621
+ return typeof defaultExport?.activate === "function" ? defaultExport : null;
1622
+ }
1616
1623
 
1617
1624
  // dist/core/shared/levenshtein.js
1618
1625
  function levenshteinDistanceWithinLimit(left, right, limit) {
@@ -1659,6 +1666,132 @@ function levenshteinDistanceWithinLimit(left, right, limit) {
1659
1666
  return result <= limit ? result : null;
1660
1667
  }
1661
1668
 
1669
+ // dist/core/extensions/extension-capability-aliases.js
1670
+ function normalizeNames(values) {
1671
+ return [...new Set(values.map((value) => value.trim()).filter((value) => value.length > 0))].sort((a, b) => a.localeCompare(b));
1672
+ }
1673
+ function isKnownExtensionCapability(value) {
1674
+ return KNOWN_EXTENSION_CAPABILITIES.includes(value);
1675
+ }
1676
+ function normalizeKnownExtensionCapability(value) {
1677
+ const normalized = value.trim().toLowerCase();
1678
+ return isKnownExtensionCapability(normalized) ? normalized : null;
1679
+ }
1680
+ function collectUnknownExtensionCapabilities(capabilities) {
1681
+ return capabilities.filter((capability) => !isKnownExtensionCapability(capability));
1682
+ }
1683
+ function resolveLegacyExtensionCapabilityAlias(capability) {
1684
+ const normalized = capability.trim().toLowerCase();
1685
+ if (normalized.length === 0) {
1686
+ return null;
1687
+ }
1688
+ return EXTENSION_CAPABILITY_LEGACY_ALIASES[normalized] ?? null;
1689
+ }
1690
+ function normalizeManifestCapabilities(rawCapabilities) {
1691
+ const normalizedCapabilities = normalizeNames([...rawCapabilities].map((value) => value.toLowerCase()));
1692
+ const remappedCapabilities = [];
1693
+ const legacyAliases = [];
1694
+ for (const capability of normalizedCapabilities) {
1695
+ const legacyAliasTarget = resolveLegacyExtensionCapabilityAlias(capability);
1696
+ if (legacyAliasTarget) {
1697
+ remappedCapabilities.push(legacyAliasTarget);
1698
+ legacyAliases.push({
1699
+ alias: capability,
1700
+ target: legacyAliasTarget
1701
+ });
1702
+ continue;
1703
+ }
1704
+ remappedCapabilities.push(capability);
1705
+ }
1706
+ const dedupedLegacyAliases = [...new Map(legacyAliases.map((entry) => [`${entry.alias}>${entry.target}`, entry])).values()].sort((left, right) => left.alias.localeCompare(right.alias));
1707
+ return {
1708
+ capabilities: normalizeNames(remappedCapabilities),
1709
+ legacy_aliases: dedupedLegacyAliases
1710
+ };
1711
+ }
1712
+ function suggestKnownExtensionCapability(capability) {
1713
+ const normalized = capability.trim().toLowerCase();
1714
+ if (normalized.length === 0) {
1715
+ return null;
1716
+ }
1717
+ const legacyAlias = resolveLegacyExtensionCapabilityAlias(normalized);
1718
+ if (legacyAlias) {
1719
+ return legacyAlias;
1720
+ }
1721
+ const maxDistance = Math.max(1, Math.floor(normalized.length * 0.34));
1722
+ let bestMatch = null;
1723
+ let bestDistance = Number.POSITIVE_INFINITY;
1724
+ for (const candidate of KNOWN_EXTENSION_CAPABILITIES) {
1725
+ const distance = levenshteinDistanceWithinLimit(normalized, candidate, maxDistance);
1726
+ if (distance !== null && distance < bestDistance) {
1727
+ bestDistance = distance;
1728
+ bestMatch = candidate;
1729
+ }
1730
+ }
1731
+ return bestMatch;
1732
+ }
1733
+ function formatUnknownExtensionCapabilityWarning(layer, name, capability) {
1734
+ const allowed = KNOWN_EXTENSION_CAPABILITIES.join(",");
1735
+ const suggested = suggestKnownExtensionCapability(capability) ?? "none";
1736
+ return `extension_capability_unknown:${layer}:${name}:${capability}:allowed=${allowed}:suggested=${suggested}`;
1737
+ }
1738
+ function formatLegacyExtensionCapabilityAliasWarning(layer, name, aliases) {
1739
+ const aliasesToken = aliases.map((entry) => `${entry.alias}>${entry.target}`).join(",");
1740
+ return `extension_capability_legacy_alias:${layer}:${name}:aliases=${aliasesToken}`;
1741
+ }
1742
+ function parseUnknownExtensionCapabilityWarning(warning) {
1743
+ const match = /^extension_capability_unknown:(global|project):([^:]+):([^:]+):allowed=([^:]+):suggested=([^:]+)$/.exec(warning.trim());
1744
+ if (!match) {
1745
+ return null;
1746
+ }
1747
+ const [, layerRaw, name, capability, allowedRaw, suggestedRaw] = match;
1748
+ const layer = layerRaw;
1749
+ const allowed_capabilities = allowedRaw.split(",").map((value) => value.trim()).filter((value) => value.length > 0);
1750
+ const legacyAlias = resolveLegacyExtensionCapabilityAlias(capability);
1751
+ const suggestedFromWarning = suggestedRaw === "none" ? void 0 : suggestedRaw;
1752
+ const suggested_capability = suggestedFromWarning ?? legacyAlias ?? void 0;
1753
+ const suggestion_source = suggested_capability ? legacyAlias === suggested_capability ? "legacy_alias" : "nearest_match" : void 0;
1754
+ return {
1755
+ layer,
1756
+ name,
1757
+ capability,
1758
+ allowed_capabilities,
1759
+ capability_contract_version: EXTENSION_CAPABILITY_CONTRACT_VERSION,
1760
+ suggested_capability,
1761
+ suggestion_source,
1762
+ legacy_alias_target: legacyAlias ?? void 0
1763
+ };
1764
+ }
1765
+ function parseLegacyExtensionCapabilityAliasWarning(warning) {
1766
+ const match = /^extension_capability_legacy_alias:(global|project):([^:]+):aliases=(.+)$/.exec(warning.trim());
1767
+ if (!match) {
1768
+ return [];
1769
+ }
1770
+ const [, layerRaw, name, aliasesRaw] = match;
1771
+ const layer = layerRaw;
1772
+ const allowedCapabilities = [...KNOWN_EXTENSION_CAPABILITIES];
1773
+ const parsed = [];
1774
+ for (const token of aliasesRaw.split(",")) {
1775
+ const [rawAlias, rawTarget] = token.split(">");
1776
+ const alias = rawAlias?.trim();
1777
+ const target = rawTarget?.trim().toLowerCase();
1778
+ if (!alias || !target || !isKnownExtensionCapability(target)) {
1779
+ continue;
1780
+ }
1781
+ parsed.push({
1782
+ layer,
1783
+ name,
1784
+ capability: alias,
1785
+ allowed_capabilities: allowedCapabilities,
1786
+ capability_contract_version: EXTENSION_CAPABILITY_CONTRACT_VERSION,
1787
+ suggested_capability: target,
1788
+ suggestion_source: "legacy_alias",
1789
+ legacy_alias_target: target
1790
+ });
1791
+ }
1792
+ return parsed;
1793
+ }
1794
+
1662
1795
  // dist/core/extensions/extension-registries.js
1663
1796
  function createEmptyExtensionHookRegistry() {
1664
1797
  return {
@@ -2290,170 +2423,44 @@ function evaluatePmMaxVersionBound(required, currentVersion, exceededMode) {
2290
2423
  return { kind: "pm_max_version", status: "ok", allowed: true, required: declared, current: currentVersion };
2291
2424
  }
2292
2425
 
2293
- // dist/core/extensions/extension-capability-aliases.js
2294
- function normalizeNames(values) {
2295
- return [...new Set(values.map((value) => value.trim()).filter((value) => value.length > 0))].sort((a, b) => a.localeCompare(b));
2426
+ // dist/core/extensions/extension-policy.js
2427
+ function normalizePolicyName(value) {
2428
+ if (typeof value !== "string") {
2429
+ return "";
2430
+ }
2431
+ return value.trim().toLowerCase();
2296
2432
  }
2297
- function isKnownExtensionCapability(value) {
2298
- return KNOWN_EXTENSION_CAPABILITIES.includes(value);
2433
+ function normalizePolicyStringSet(values) {
2434
+ return new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0));
2299
2435
  }
2300
- function normalizeKnownExtensionCapability(value) {
2436
+ function normalizePolicySurfaceToken(value) {
2301
2437
  const normalized = value.trim().toLowerCase();
2302
- return isKnownExtensionCapability(normalized) ? normalized : null;
2303
- }
2304
- function collectUnknownExtensionCapabilities(capabilities) {
2305
- return capabilities.filter((capability) => !isKnownExtensionCapability(capability));
2306
- }
2307
- function resolveLegacyExtensionCapabilityAlias(capability) {
2308
- const normalized = capability.trim().toLowerCase();
2309
2438
  if (normalized.length === 0) {
2310
- return null;
2439
+ return "";
2311
2440
  }
2312
- return EXTENSION_CAPABILITY_LEGACY_ALIASES[normalized] ?? null;
2313
- }
2314
- function normalizeManifestCapabilities(rawCapabilities) {
2315
- const normalizedCapabilities = normalizeNames([...rawCapabilities].map((value) => value.toLowerCase()));
2316
- const remappedCapabilities = [];
2317
- const legacyAliases = [];
2318
- for (const capability of normalizedCapabilities) {
2319
- const legacyAliasTarget = resolveLegacyExtensionCapabilityAlias(capability);
2320
- if (legacyAliasTarget) {
2321
- remappedCapabilities.push(legacyAliasTarget);
2322
- legacyAliases.push({
2323
- alias: capability,
2324
- target: legacyAliasTarget
2325
- });
2326
- continue;
2327
- }
2328
- remappedCapabilities.push(capability);
2441
+ const segments = normalized.split(/[.:/]/).map((segment) => segment.replace(/[\s_-]+/g, "")).filter((segment) => segment.length > 0);
2442
+ if (segments.length === 0) {
2443
+ return "";
2329
2444
  }
2330
- const dedupedLegacyAliases = [...new Map(legacyAliases.map((entry) => [`${entry.alias}>${entry.target}`, entry])).values()].sort((left, right) => left.alias.localeCompare(right.alias));
2331
- return {
2332
- capabilities: normalizeNames(remappedCapabilities),
2333
- legacy_aliases: dedupedLegacyAliases
2334
- };
2445
+ if (segments.length === 1) {
2446
+ return segments[0];
2447
+ }
2448
+ return `${segments[0]}.${segments.slice(1).join("")}`;
2335
2449
  }
2336
- function suggestKnownExtensionCapability(capability) {
2337
- const normalized = capability.trim().toLowerCase();
2338
- if (normalized.length === 0) {
2339
- return null;
2450
+ function normalizePolicySurfaceSet(values) {
2451
+ return new Set((values ?? []).map((value) => normalizePolicySurfaceToken(value)).filter((value) => value.length > 0));
2452
+ }
2453
+ function normalizePolicyMode(value) {
2454
+ const normalized = normalizePolicyName(value);
2455
+ if (KNOWN_EXTENSION_POLICY_MODES.includes(normalized)) {
2456
+ return normalized;
2340
2457
  }
2341
- const legacyAlias = resolveLegacyExtensionCapabilityAlias(normalized);
2342
- if (legacyAlias) {
2343
- return legacyAlias;
2344
- }
2345
- const maxDistance = Math.max(1, Math.floor(normalized.length * 0.34));
2346
- let bestMatch = null;
2347
- let bestDistance = Number.POSITIVE_INFINITY;
2348
- for (const candidate of KNOWN_EXTENSION_CAPABILITIES) {
2349
- const distance = levenshteinDistanceWithinLimit(normalized, candidate, maxDistance);
2350
- if (distance !== null && distance < bestDistance) {
2351
- bestDistance = distance;
2352
- bestMatch = candidate;
2353
- }
2354
- }
2355
- return bestMatch;
2356
- }
2357
- function formatUnknownExtensionCapabilityWarning(layer, name, capability) {
2358
- const allowed = KNOWN_EXTENSION_CAPABILITIES.join(",");
2359
- const suggested = suggestKnownExtensionCapability(capability) ?? "none";
2360
- return `extension_capability_unknown:${layer}:${name}:${capability}:allowed=${allowed}:suggested=${suggested}`;
2361
- }
2362
- function formatLegacyExtensionCapabilityAliasWarning(layer, name, aliases) {
2363
- const aliasesToken = aliases.map((entry) => `${entry.alias}>${entry.target}`).join(",");
2364
- return `extension_capability_legacy_alias:${layer}:${name}:aliases=${aliasesToken}`;
2365
- }
2366
- function parseUnknownExtensionCapabilityWarning(warning) {
2367
- const match = /^extension_capability_unknown:(global|project):([^:]+):([^:]+):allowed=([^:]+):suggested=([^:]+)$/.exec(warning.trim());
2368
- if (!match) {
2369
- return null;
2370
- }
2371
- const [, layerRaw, name, capability, allowedRaw, suggestedRaw] = match;
2372
- const layer = layerRaw;
2373
- const allowed_capabilities = allowedRaw.split(",").map((value) => value.trim()).filter((value) => value.length > 0);
2374
- const legacyAlias = resolveLegacyExtensionCapabilityAlias(capability);
2375
- const suggestedFromWarning = suggestedRaw === "none" ? void 0 : suggestedRaw;
2376
- const suggested_capability = suggestedFromWarning ?? legacyAlias ?? void 0;
2377
- const suggestion_source = suggested_capability ? legacyAlias === suggested_capability ? "legacy_alias" : "nearest_match" : void 0;
2378
- return {
2379
- layer,
2380
- name,
2381
- capability,
2382
- allowed_capabilities,
2383
- capability_contract_version: EXTENSION_CAPABILITY_CONTRACT_VERSION,
2384
- suggested_capability,
2385
- suggestion_source,
2386
- legacy_alias_target: legacyAlias ?? void 0
2387
- };
2388
- }
2389
- function parseLegacyExtensionCapabilityAliasWarning(warning) {
2390
- const match = /^extension_capability_legacy_alias:(global|project):([^:]+):aliases=(.+)$/.exec(warning.trim());
2391
- if (!match) {
2392
- return [];
2393
- }
2394
- const [, layerRaw, name, aliasesRaw] = match;
2395
- const layer = layerRaw;
2396
- const allowedCapabilities = [...KNOWN_EXTENSION_CAPABILITIES];
2397
- const parsed = [];
2398
- for (const token of aliasesRaw.split(",")) {
2399
- const [rawAlias, rawTarget] = token.split(">");
2400
- const alias = rawAlias?.trim();
2401
- const target = rawTarget?.trim().toLowerCase();
2402
- if (!alias || !target || !isKnownExtensionCapability(target)) {
2403
- continue;
2404
- }
2405
- parsed.push({
2406
- layer,
2407
- name,
2408
- capability: alias,
2409
- allowed_capabilities: allowedCapabilities,
2410
- capability_contract_version: EXTENSION_CAPABILITY_CONTRACT_VERSION,
2411
- suggested_capability: target,
2412
- suggestion_source: "legacy_alias",
2413
- legacy_alias_target: target
2414
- });
2415
- }
2416
- return parsed;
2417
- }
2418
-
2419
- // dist/core/extensions/extension-policy.js
2420
- function normalizePolicyName(value) {
2421
- if (typeof value !== "string") {
2422
- return "";
2423
- }
2424
- return value.trim().toLowerCase();
2425
- }
2426
- function normalizePolicyStringSet(values) {
2427
- return new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0));
2428
- }
2429
- function normalizePolicySurfaceToken(value) {
2430
- const normalized = value.trim().toLowerCase();
2431
- if (normalized.length === 0) {
2432
- return "";
2433
- }
2434
- const segments = normalized.split(/[.:/]/).map((segment) => segment.replace(/[\s_-]+/g, "")).filter((segment) => segment.length > 0);
2435
- if (segments.length === 0) {
2436
- return "";
2437
- }
2438
- if (segments.length === 1) {
2439
- return segments[0];
2440
- }
2441
- return `${segments[0]}.${segments.slice(1).join("")}`;
2442
- }
2443
- function normalizePolicySurfaceSet(values) {
2444
- return new Set((values ?? []).map((value) => normalizePolicySurfaceToken(value)).filter((value) => value.length > 0));
2445
- }
2446
- function normalizePolicyMode(value) {
2447
- const normalized = normalizePolicyName(value);
2448
- if (KNOWN_EXTENSION_POLICY_MODES.includes(normalized)) {
2449
- return normalized;
2450
- }
2451
- return "off";
2452
- }
2453
- function normalizePolicyTrustMode(value) {
2454
- const normalized = normalizePolicyName(value);
2455
- if (KNOWN_EXTENSION_TRUST_MODES.includes(normalized)) {
2456
- return normalized;
2458
+ return "off";
2459
+ }
2460
+ function normalizePolicyTrustMode(value) {
2461
+ const normalized = normalizePolicyName(value);
2462
+ if (KNOWN_EXTENSION_TRUST_MODES.includes(normalized)) {
2463
+ return normalized;
2457
2464
  }
2458
2465
  return "off";
2459
2466
  }
@@ -3251,14 +3258,14 @@ function buildEffectiveExtensions(globalCandidates, projectCandidates) {
3251
3258
  }
3252
3259
  return effective;
3253
3260
  }
3254
- async function scanExtensionLayer(layer, extensionsRoot, enabled, disabled, pmMaxVersionExceededMode2) {
3261
+ async function scanExtensionLayer(layer, extensionsRoot, enabled, disabled, pmMaxVersionExceededMode) {
3255
3262
  const diagnostics = [];
3256
3263
  const warnings = [];
3257
3264
  const candidates = [];
3258
3265
  const directories = await listExtensionDirectories(extensionsRoot);
3259
3266
  const managedSourcePackages = await readManagedExtensionSourcePackages(extensionsRoot);
3260
3267
  for (const directory of directories) {
3261
- const scanned = await scanExtensionDirectory(layer, extensionsRoot, directory, enabled, disabled, managedSourcePackages, pmMaxVersionExceededMode2);
3268
+ const scanned = await scanExtensionDirectory(layer, extensionsRoot, directory, enabled, disabled, managedSourcePackages, pmMaxVersionExceededMode);
3262
3269
  diagnostics.push(scanned.diagnostic);
3263
3270
  warnings.push(...scanned.warnings);
3264
3271
  if (scanned.candidate) {
@@ -3306,13 +3313,13 @@ function collectScannedExtensionWarnings(layer, manifest, entryWithinDirectory,
3306
3313
  }
3307
3314
  return extensionWarnings;
3308
3315
  }
3309
- async function scanExtensionDirectory(layer, extensionsRoot, directory, enabled, disabled, managedSourcePackages, pmMaxVersionExceededMode2) {
3316
+ async function scanExtensionDirectory(layer, extensionsRoot, directory, enabled, disabled, managedSourcePackages, pmMaxVersionExceededMode) {
3310
3317
  const extensionDir = path5.join(extensionsRoot, directory);
3311
3318
  const manifestPath = path5.join(extensionDir, "manifest.json");
3312
3319
  if (!await pathExists(manifestPath)) {
3313
3320
  return buildUnavailableExtensionScan(layer, directory, manifestPath, `extension_manifest_missing:${layer}:${directory}`);
3314
3321
  }
3315
- let manifest = null;
3322
+ let manifest;
3316
3323
  try {
3317
3324
  const parsed = JSON.parse(await fs3.readFile(manifestPath, "utf8"));
3318
3325
  manifest = parseManifest(parsed);
@@ -3328,7 +3335,7 @@ async function scanExtensionDirectory(layer, extensionsRoot, directory, enabled,
3328
3335
  const entryWithinDirectory = entryWithinDirectoryByPath && entryExists ? await isCanonicalPathWithinDirectory(extensionDir, entryPath) : entryWithinDirectoryByPath;
3329
3336
  const enabledForLoad = shouldEnable(manifest.name, enabled, disabled);
3330
3337
  const pmVersionCompatibility = await evaluatePmMinVersionCompatibility(layer, manifest);
3331
- const pmMaxVersionCompatibility = await evaluatePmMaxVersionCompatibility(layer, manifest, pmMaxVersionExceededMode2);
3338
+ const pmMaxVersionCompatibility = await evaluatePmMaxVersionCompatibility(layer, manifest, pmMaxVersionExceededMode);
3332
3339
  const extensionWarnings = collectScannedExtensionWarnings(layer, manifest, entryWithinDirectory, entryExists, pmVersionCompatibility, pmMaxVersionCompatibility);
3333
3340
  const extensionReady = entryWithinDirectory && entryExists && pmVersionCompatibility.allowed && pmMaxVersionCompatibility.allowed;
3334
3341
  const sourcePackage = managedSourcePackages.get(`directory:${directory}`) ?? managedSourcePackages.get(`name:${manifest.name}`);
@@ -3523,7 +3530,8 @@ async function loadExtensions(options) {
3523
3530
  failed
3524
3531
  };
3525
3532
  }
3526
- for (const extension of discovery.effective) {
3533
+ const extensionsToLoad = typeof options.extensionFilter === "function" ? discovery.effective.filter(options.extensionFilter) : discovery.effective;
3534
+ for (const extension of extensionsToLoad) {
3527
3535
  try {
3528
3536
  const importHref = await resolveExtensionImportHref(extension, options);
3529
3537
  const module = await import(importHref);
@@ -3548,6 +3556,8 @@ async function loadExtensions(options) {
3548
3556
  failed
3549
3557
  };
3550
3558
  }
3559
+ var DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS = 5e3;
3560
+ var MAX_EXTENSION_DEACTIVATE_TIMEOUT_MS = 2147483647;
3551
3561
  function toActivatableExtension(source) {
3552
3562
  const activate = source.activate;
3553
3563
  const activatable = {
@@ -3560,18 +3570,78 @@ function toActivatableExtension(source) {
3560
3570
  return activatable;
3561
3571
  }
3562
3572
  function resolveActivatableExtension(module) {
3563
- const moduleRecord = asRecordLoose(module);
3564
- if (!moduleRecord) {
3565
- return null;
3573
+ const activatableRecord = resolveActivatablePropertyRecord(module);
3574
+ return activatableRecord ? toActivatableExtension(activatableRecord) : null;
3575
+ }
3576
+ async function deactivateExtensions(loadResult, activationResult, options = {}) {
3577
+ const timeoutMs = normalizeExtensionDeactivateTimeout(options?.deactivate_timeout_ms);
3578
+ const failedActivationKeys = new Set((activationResult?.failed ?? []).map((entry) => `${entry.layer}:${entry.name}`));
3579
+ const targets = [];
3580
+ for (const extension of loadResult.loaded) {
3581
+ if (failedActivationKeys.has(`${extension.layer}:${extension.name}`)) {
3582
+ continue;
3583
+ }
3584
+ const activatable = resolveActivatableExtension(extension.module);
3585
+ if (!activatable || typeof activatable.deactivate !== "function") {
3586
+ continue;
3587
+ }
3588
+ targets.push({ extension, deactivate: activatable.deactivate });
3566
3589
  }
3567
- if (typeof moduleRecord.activate === "function") {
3568
- return toActivatableExtension(moduleRecord);
3590
+ const outcomes = await Promise.all(targets.map(async ({ extension, deactivate }) => {
3591
+ try {
3592
+ await runExtensionDeactivateWithTimeout(deactivate, timeoutMs);
3593
+ return { ok: true };
3594
+ } catch (error) {
3595
+ return { ok: false, layer: extension.layer, name: extension.name, error: formatUnknownError(error) };
3596
+ }
3597
+ }));
3598
+ const warnings = [];
3599
+ const failed = [];
3600
+ let deactivated = 0;
3601
+ for (const outcome of outcomes) {
3602
+ if (outcome.ok) {
3603
+ deactivated += 1;
3604
+ continue;
3605
+ }
3606
+ warnings.push(`extension_deactivate_failed:${outcome.layer}:${outcome.name}`);
3607
+ failed.push({ layer: outcome.layer, name: outcome.name, error: outcome.error });
3608
+ }
3609
+ return { deactivated, warnings, failed };
3610
+ }
3611
+ function normalizeExtensionDeactivateTimeout(rawTimeout) {
3612
+ if (typeof rawTimeout !== "number" || rawTimeout < 0) {
3613
+ return DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS;
3614
+ }
3615
+ if (rawTimeout === 0 || rawTimeout === Infinity) {
3616
+ return 0;
3569
3617
  }
3570
- const defaultExport = asRecordLoose(moduleRecord.default);
3571
- if (defaultExport && typeof defaultExport.activate === "function") {
3572
- return toActivatableExtension(defaultExport);
3618
+ if (!Number.isFinite(rawTimeout)) {
3619
+ return DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS;
3620
+ }
3621
+ return Math.min(MAX_EXTENSION_DEACTIVATE_TIMEOUT_MS, Math.max(1, Math.floor(rawTimeout)));
3622
+ }
3623
+ async function runExtensionDeactivateWithTimeout(deactivate, timeoutMs) {
3624
+ if (timeoutMs === 0) {
3625
+ await deactivate();
3626
+ return;
3627
+ }
3628
+ let timeoutHandle;
3629
+ try {
3630
+ const deactivatePromise = Promise.resolve().then(() => deactivate());
3631
+ deactivatePromise.catch(() => {
3632
+ });
3633
+ await Promise.race([
3634
+ deactivatePromise,
3635
+ new Promise((_, reject) => {
3636
+ timeoutHandle = setTimeout(() => {
3637
+ reject(new Error(`extension deactivate timed out after ${timeoutMs}ms`));
3638
+ }, timeoutMs);
3639
+ timeoutHandle.unref?.();
3640
+ })
3641
+ ]);
3642
+ } finally {
3643
+ clearTimeout(timeoutHandle);
3573
3644
  }
3574
- return null;
3575
3645
  }
3576
3646
  function isOutputRendererFormat(value) {
3577
3647
  return value === "toon" || value === "json";
@@ -4726,6 +4796,17 @@ async function activateExtensions(loadResult) {
4726
4796
  }
4727
4797
 
4728
4798
  // dist/core/extensions/capability-usage.js
4799
+ var EXTENSION_CAPABILITY_REGISTRATION_SURFACES = {
4800
+ commands: ["registerCommand", "command override", "command handler"],
4801
+ renderers: ["registerRenderer"],
4802
+ hooks: ["hooks.beforeCommand", "hooks.afterCommand", "hooks.onWrite", "hooks.onRead", "hooks.onIndex"],
4803
+ schema: ["registerFlags", "registerItemFields", "registerItemTypes", "registerMigration", "registerProfile"],
4804
+ importers: ["registerImporter", "registerExporter"],
4805
+ search: ["registerSearchProvider", "registerVectorStoreAdapter"],
4806
+ parser: ["registerParser"],
4807
+ preflight: ["registerPreflight"],
4808
+ services: ["registerService"]
4809
+ };
4729
4810
  var USAGE_KEY_SEPARATOR = ":";
4730
4811
  function usageKey(layer, name) {
4731
4812
  return `${layer}${USAGE_KEY_SEPARATOR}${normalizeExtensionName(name)}`;
@@ -4788,10 +4869,16 @@ function attributeCapabilityUsage(activation) {
4788
4869
  }
4789
4870
  function collectUsedExtensionCapabilities(activation, options = {}) {
4790
4871
  const usage = attributeCapabilityUsage(activation);
4791
- const filter = options.extensionName !== void 0 ? normalizeExtensionName(options.extensionName) : null;
4872
+ const filters = /* @__PURE__ */ new Set();
4873
+ if (options.extensionName !== void 0) {
4874
+ filters.add(normalizeExtensionName(options.extensionName));
4875
+ }
4876
+ for (const name of options.extensionNames ?? []) {
4877
+ filters.add(normalizeExtensionName(name));
4878
+ }
4792
4879
  const used = /* @__PURE__ */ new Set();
4793
4880
  for (const [key, capabilities] of usage) {
4794
- if (filter !== null && usageKeyName(key) !== filter) {
4881
+ if (filters.size > 0 && !filters.has(usageKeyName(key))) {
4795
4882
  continue;
4796
4883
  }
4797
4884
  for (const capability of capabilities) {
@@ -4816,247 +4903,6 @@ function reconcileExtensionCapabilityUsage(loaded, activation) {
4816
4903
  return reconciliations;
4817
4904
  }
4818
4905
 
4819
- // dist/core/extensions/index.js
4820
- var activeExtensionHooks = null;
4821
- var activeExtensionCommands = null;
4822
- var activeExtensionParsers = null;
4823
- var activeExtensionPreflight = null;
4824
- var activeExtensionServices = null;
4825
- var activeExtensionRenderers = null;
4826
- var activeExtensionRegistrations = null;
4827
- var activeCommandContext = null;
4828
- var activeCommandResult = void 0;
4829
- var activeAfterCommandAffectedItems = [];
4830
- var AFTER_COMMAND_SNAPSHOT_OMITTED_FIELDS = /* @__PURE__ */ new Set([
4831
- "body",
4832
- "comments",
4833
- "dependencies",
4834
- "docs",
4835
- "events",
4836
- "files",
4837
- "learnings",
4838
- "notes",
4839
- "reminders",
4840
- "test_runs",
4841
- "tests"
4842
- ]);
4843
- function setActiveExtensionHooks(hooks) {
4844
- activeExtensionHooks = hooks;
4845
- }
4846
- function setActiveExtensionCommands(commands) {
4847
- activeExtensionCommands = commands;
4848
- }
4849
- function setActiveExtensionParsers(parsers) {
4850
- activeExtensionParsers = parsers;
4851
- }
4852
- function setActiveExtensionPreflight(preflight) {
4853
- activeExtensionPreflight = preflight;
4854
- }
4855
- function setActiveExtensionServices(services) {
4856
- activeExtensionServices = services;
4857
- }
4858
- function setActiveExtensionRenderers(renderers) {
4859
- activeExtensionRenderers = renderers;
4860
- }
4861
- function setActiveExtensionRegistrations(registrations) {
4862
- activeExtensionRegistrations = registrations;
4863
- }
4864
- function getActiveExtensionRegistrations() {
4865
- return activeExtensionRegistrations;
4866
- }
4867
- function setActiveCommandContext(context) {
4868
- activeCommandContext = context;
4869
- }
4870
- function setActiveCommandResult(result) {
4871
- activeCommandResult = result;
4872
- }
4873
- function getActiveCommandResult() {
4874
- return activeCommandResult;
4875
- }
4876
- function recordAfterCommandAffectedItem(item) {
4877
- if (!item || (activeExtensionHooks?.afterCommand?.length ?? 0) === 0) {
4878
- return;
4879
- }
4880
- activeAfterCommandAffectedItems.push(item);
4881
- }
4882
- function projectAfterCommandItemSnapshot(metadata, changedFields) {
4883
- if (!metadata || !metadata.id) {
4884
- return {};
4885
- }
4886
- const snapshot = {
4887
- id: metadata.id,
4888
- type: metadata.type,
4889
- status: metadata.status
4890
- };
4891
- if (!Array.isArray(changedFields)) {
4892
- return snapshot;
4893
- }
4894
- const source = metadata;
4895
- for (const field of changedFields) {
4896
- if (typeof field !== "string") {
4897
- continue;
4898
- }
4899
- const actualField = field.startsWith("unset:") ? field.slice("unset:".length) : field;
4900
- if (actualField === "id" || actualField === "type" || actualField === "status" || AFTER_COMMAND_SNAPSHOT_OMITTED_FIELDS.has(actualField)) {
4901
- continue;
4902
- }
4903
- if (Object.hasOwn(source, actualField) && source[actualField] !== void 0) {
4904
- snapshot[actualField] = source[actualField];
4905
- }
4906
- }
4907
- return snapshot;
4908
- }
4909
- function consumeAfterCommandAffectedItems() {
4910
- if (activeAfterCommandAffectedItems.length === 0) {
4911
- return void 0;
4912
- }
4913
- const affected = activeAfterCommandAffectedItems;
4914
- activeAfterCommandAffectedItems = [];
4915
- return affected;
4916
- }
4917
- function clearActiveExtensionHooks() {
4918
- activeExtensionHooks = null;
4919
- activeExtensionCommands = null;
4920
- activeExtensionParsers = null;
4921
- activeExtensionPreflight = null;
4922
- activeExtensionServices = null;
4923
- activeExtensionRenderers = null;
4924
- activeExtensionRegistrations = null;
4925
- activeCommandContext = null;
4926
- activeCommandResult = void 0;
4927
- activeAfterCommandAffectedItems = [];
4928
- }
4929
- async function runActiveOnWriteHooks(context) {
4930
- if (!activeExtensionHooks) {
4931
- return [];
4932
- }
4933
- return runOnWriteHooks(activeExtensionHooks, context);
4934
- }
4935
- async function runActiveOnReadHooks(context) {
4936
- if (!activeExtensionHooks) {
4937
- return [];
4938
- }
4939
- return runOnReadHooks(activeExtensionHooks, context);
4940
- }
4941
- function hasActiveOnReadHooks() {
4942
- return (activeExtensionHooks?.onRead?.length ?? 0) > 0;
4943
- }
4944
- async function runActiveOnIndexHooks(context) {
4945
- if (!activeExtensionHooks) {
4946
- return [];
4947
- }
4948
- return runOnIndexHooks(activeExtensionHooks, context);
4949
- }
4950
- function runActiveCommandOverride(result) {
4951
- if (!activeExtensionCommands || !activeCommandContext) {
4952
- return {
4953
- overridden: false,
4954
- result,
4955
- warnings: []
4956
- };
4957
- }
4958
- return runCommandOverride(activeExtensionCommands, {
4959
- command: activeCommandContext.command,
4960
- args: [...activeCommandContext.args],
4961
- options: activeCommandContext.options ? { ...activeCommandContext.options } : {},
4962
- global: activeCommandContext.global ? { ...activeCommandContext.global } : void 0,
4963
- pm_root: activeCommandContext.pm_root,
4964
- result
4965
- });
4966
- }
4967
- async function runActiveCommandHandler(context) {
4968
- if (!activeExtensionCommands) {
4969
- return {
4970
- handled: false,
4971
- result: null,
4972
- warnings: []
4973
- };
4974
- }
4975
- return runCommandHandler(activeExtensionCommands, context);
4976
- }
4977
- async function runActiveParserOverride(context) {
4978
- if (!activeExtensionParsers) {
4979
- return {
4980
- overridden: false,
4981
- context: {
4982
- command: context.command,
4983
- args: [...context.args],
4984
- options: { ...context.options },
4985
- global: { ...context.global },
4986
- pm_root: context.pm_root
4987
- },
4988
- warnings: []
4989
- };
4990
- }
4991
- return runParserOverride(activeExtensionParsers, context);
4992
- }
4993
- async function runActivePreflightOverride(context) {
4994
- if (!activeExtensionPreflight) {
4995
- return {
4996
- overridden: false,
4997
- context: {
4998
- command: context.command,
4999
- args: [...context.args],
5000
- options: { ...context.options },
5001
- global: { ...context.global },
5002
- pm_root: context.pm_root
5003
- },
5004
- decision: { ...context.decision },
5005
- warnings: []
5006
- };
5007
- }
5008
- return runPreflightOverride(activeExtensionPreflight, context);
5009
- }
5010
- function runActiveRendererOverride(format, result) {
5011
- if (!activeExtensionRenderers) {
5012
- return {
5013
- overridden: false,
5014
- rendered: null,
5015
- warnings: []
5016
- };
5017
- }
5018
- return runRendererOverride(activeExtensionRenderers, {
5019
- format,
5020
- command: activeCommandContext?.command,
5021
- args: activeCommandContext ? [...activeCommandContext.args] : [],
5022
- options: activeCommandContext?.options ? { ...activeCommandContext.options } : {},
5023
- global: activeCommandContext?.global ? { ...activeCommandContext.global } : void 0,
5024
- pm_root: activeCommandContext?.pm_root,
5025
- result
5026
- });
5027
- }
5028
- function buildServiceContext(service, payload) {
5029
- return {
5030
- service,
5031
- command: activeCommandContext?.command,
5032
- args: activeCommandContext ? [...activeCommandContext.args] : [],
5033
- options: activeCommandContext?.options ? { ...activeCommandContext.options } : {},
5034
- global: activeCommandContext?.global ? { ...activeCommandContext.global } : void 0,
5035
- pm_root: activeCommandContext?.pm_root,
5036
- payload
5037
- };
5038
- }
5039
- async function runActiveServiceOverride(service, payload) {
5040
- if (!activeExtensionServices) {
5041
- return {
5042
- handled: false,
5043
- result: payload,
5044
- warnings: []
5045
- };
5046
- }
5047
- return runServiceOverride(activeExtensionServices, buildServiceContext(service, payload));
5048
- }
5049
- function runActiveServiceOverrideSync(service, payload) {
5050
- if (!activeExtensionServices) {
5051
- return {
5052
- handled: false,
5053
- result: payload,
5054
- warnings: []
5055
- };
5056
- }
5057
- return runServiceOverrideSync(activeExtensionServices, buildServiceContext(service, payload));
5058
- }
5059
-
5060
4906
  // dist/core/schema/runtime-schema.js
5061
4907
  import path6 from "node:path";
5062
4908
  var DEFAULT_RUNTIME_SCHEMA_FILE_PATHS = Object.freeze({
@@ -5635,1622 +5481,6 @@ function statusIsTerminal(status, registry) {
5635
5481
  return registry.terminal_statuses.has(normalized);
5636
5482
  }
5637
5483
 
5638
- // dist/core/shared/errors.js
5639
- var PmCliError = class extends Error {
5640
- exitCode;
5641
- context;
5642
- constructor(message, exitCode, context = {}) {
5643
- super(message);
5644
- this.name = "PmCliError";
5645
- this.exitCode = exitCode;
5646
- this.context = context;
5647
- }
5648
- };
5649
-
5650
- // dist/core/shared/serialization.js
5651
- import crypto2 from "node:crypto";
5652
- function sortScalarValue(value) {
5653
- if (value === null)
5654
- return null;
5655
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
5656
- return value;
5657
- }
5658
- if (typeof value === "bigint") {
5659
- return value.toString();
5660
- }
5661
- if (value === void 0) {
5662
- return "undefined";
5663
- }
5664
- if (typeof value === "symbol") {
5665
- return value.toString();
5666
- }
5667
- if (typeof value === "function") {
5668
- return `[function:${value.name || "anonymous"}]`;
5669
- }
5670
- return void 0;
5671
- }
5672
- function sortPlainObjectKeys(value) {
5673
- const sortedKeys = Object.keys(value).sort();
5674
- const result = {};
5675
- for (const key of sortedKeys) {
5676
- const nested = value[key];
5677
- if (nested === void 0) {
5678
- continue;
5679
- }
5680
- result[key] = sortObjectKeys(nested);
5681
- }
5682
- return result;
5683
- }
5684
- function sortObjectKeys(value) {
5685
- const scalarValue = sortScalarValue(value);
5686
- if (scalarValue !== void 0) {
5687
- return scalarValue;
5688
- }
5689
- if (Array.isArray(value)) {
5690
- return value.map((entry) => sortObjectKeys(entry));
5691
- }
5692
- if (value instanceof Date) {
5693
- return value.toISOString();
5694
- }
5695
- const maybeJson = value;
5696
- if (typeof maybeJson.toJSON === "function") {
5697
- const normalized = maybeJson.toJSON();
5698
- if (normalized !== value) {
5699
- return sortObjectKeys(normalized);
5700
- }
5701
- }
5702
- return sortPlainObjectKeys(value);
5703
- }
5704
- function stableStringify(value) {
5705
- return JSON.stringify(sortObjectKeys(value));
5706
- }
5707
- function hasUnmatchedEquivalent(leftValue, rightValues, matchedIndexes, equals) {
5708
- for (let index = 0; index < rightValues.length; index += 1) {
5709
- if (matchedIndexes.has(index)) {
5710
- continue;
5711
- }
5712
- if (equals(leftValue, rightValues[index])) {
5713
- matchedIndexes.add(index);
5714
- return true;
5715
- }
5716
- }
5717
- return false;
5718
- }
5719
- function compareRegExpValues(left, right) {
5720
- if (!(left instanceof RegExp || right instanceof RegExp)) {
5721
- return void 0;
5722
- }
5723
- return left instanceof RegExp && right instanceof RegExp && left.toString() === right.toString();
5724
- }
5725
- function compareDateValues(left, right) {
5726
- if (!(left instanceof Date || right instanceof Date)) {
5727
- return void 0;
5728
- }
5729
- return left instanceof Date && right instanceof Date && left.getTime() === right.getTime();
5730
- }
5731
- function compareSetValues(left, right) {
5732
- if (!(left instanceof Set || right instanceof Set)) {
5733
- return void 0;
5734
- }
5735
- if (!(left instanceof Set && right instanceof Set) || left.size !== right.size) {
5736
- return false;
5737
- }
5738
- const rightValues = [...right];
5739
- const matched = /* @__PURE__ */ new Set();
5740
- for (const leftValue of left) {
5741
- if (!hasUnmatchedEquivalent(leftValue, rightValues, matched, stableValueEquals)) {
5742
- return false;
5743
- }
5744
- }
5745
- return true;
5746
- }
5747
- function compareMapValues(left, right) {
5748
- if (!(left instanceof Map || right instanceof Map)) {
5749
- return void 0;
5750
- }
5751
- if (!(left instanceof Map && right instanceof Map) || left.size !== right.size) {
5752
- return false;
5753
- }
5754
- const rightEntries = [...right.entries()];
5755
- const matched = /* @__PURE__ */ new Set();
5756
- for (const [leftKey, leftValue] of left.entries()) {
5757
- const leftEntry = [leftKey, leftValue];
5758
- if (!hasUnmatchedEquivalent(leftEntry, rightEntries, matched, ([candidateKey, candidateValue], [rightKey, rightValue]) => stableValueEquals(candidateKey, rightKey) && stableValueEquals(candidateValue, rightValue))) {
5759
- return false;
5760
- }
5761
- }
5762
- return true;
5763
- }
5764
- function compareArrayValues(left, right) {
5765
- if (!(Array.isArray(left) || Array.isArray(right))) {
5766
- return void 0;
5767
- }
5768
- if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) {
5769
- return false;
5770
- }
5771
- return left.every((value, index) => stableValueEquals(value, right[index]));
5772
- }
5773
- function comparePlainObjectValues(left, right) {
5774
- const leftKeys = Object.keys(left).sort((a, b) => a.localeCompare(b));
5775
- const rightKeys = Object.keys(right).sort((a, b) => a.localeCompare(b));
5776
- if (leftKeys.length !== rightKeys.length) {
5777
- return false;
5778
- }
5779
- for (let index = 0; index < leftKeys.length; index += 1) {
5780
- const leftKey = leftKeys[index];
5781
- if (leftKey !== rightKeys[index]) {
5782
- return false;
5783
- }
5784
- if (!stableValueEquals(left[leftKey], right[leftKey])) {
5785
- return false;
5786
- }
5787
- }
5788
- return true;
5789
- }
5790
- var SPECIALIZED_STABLE_VALUE_COMPARISONS = [
5791
- compareRegExpValues,
5792
- compareDateValues,
5793
- compareSetValues,
5794
- compareMapValues,
5795
- compareArrayValues
5796
- ];
5797
- function stableValueEquals(left, right) {
5798
- if (Object.is(left, right)) {
5799
- return true;
5800
- }
5801
- if (left === null || right === null || typeof left !== "object" || typeof right !== "object") {
5802
- return false;
5803
- }
5804
- for (const compare of SPECIALIZED_STABLE_VALUE_COMPARISONS) {
5805
- const result = compare(left, right);
5806
- if (result !== void 0) {
5807
- return result;
5808
- }
5809
- }
5810
- return comparePlainObjectValues(left, right);
5811
- }
5812
- function sha256Hex(value) {
5813
- return crypto2.createHash("sha256").update(value, "utf8").digest("hex");
5814
- }
5815
- function orderObject(value, keyOrder) {
5816
- const ordered = {};
5817
- for (const key of keyOrder) {
5818
- const entry = value[key];
5819
- if (entry !== void 0) {
5820
- ordered[key] = entry;
5821
- }
5822
- }
5823
- const unknownKeys = Object.keys(value).filter((key) => !keyOrder.includes(key)).sort((a, b) => a.localeCompare(b));
5824
- for (const key of unknownKeys) {
5825
- const entry = value[key];
5826
- if (entry !== void 0) {
5827
- ordered[key] = entry;
5828
- }
5829
- }
5830
- return ordered;
5831
- }
5832
-
5833
- // dist/core/store/settings-validator.js
5834
- var FAIL = { ok: false };
5835
- var vString = (input) => typeof input === "string" ? { ok: true, value: input } : FAIL;
5836
- var vBoolean = (input) => typeof input === "boolean" ? { ok: true, value: input } : FAIL;
5837
- function vNumber(options = {}) {
5838
- return (input) => {
5839
- if (typeof input !== "number" || !Number.isFinite(input)) {
5840
- return FAIL;
5841
- }
5842
- if (options.int && (!Number.isInteger(input) || !Number.isSafeInteger(input))) {
5843
- return FAIL;
5844
- }
5845
- if (options.positive && input <= 0) {
5846
- return FAIL;
5847
- }
5848
- return { ok: true, value: input };
5849
- };
5850
- }
5851
- function vLiteral(...allowed) {
5852
- return (input) => typeof input === "string" && allowed.includes(input) ? { ok: true, value: input } : FAIL;
5853
- }
5854
- function vArray(item) {
5855
- return (input) => {
5856
- if (!Array.isArray(input)) {
5857
- return FAIL;
5858
- }
5859
- const value = [];
5860
- for (const element of input) {
5861
- const result = item(element);
5862
- if (!result.ok) {
5863
- return FAIL;
5864
- }
5865
- value.push(result.value);
5866
- }
5867
- return { ok: true, value };
5868
- };
5869
- }
5870
- function vOptional(inner) {
5871
- return (input) => input === void 0 ? { ok: true, value: void 0 } : inner(input);
5872
- }
5873
- function vRecordOf(valueCheck) {
5874
- return (input) => {
5875
- if (typeof input !== "object" || input === null || Array.isArray(input)) {
5876
- return FAIL;
5877
- }
5878
- const value = {};
5879
- for (const [key, raw] of Object.entries(input)) {
5880
- const result = valueCheck(raw);
5881
- if (!result.ok) {
5882
- return FAIL;
5883
- }
5884
- value[key] = result.value;
5885
- }
5886
- return { ok: true, value };
5887
- };
5888
- }
5889
- function vObject(shape) {
5890
- return (input) => {
5891
- if (typeof input !== "object" || input === null || Array.isArray(input)) {
5892
- return FAIL;
5893
- }
5894
- const record = input;
5895
- const value = {};
5896
- for (const [key, check] of Object.entries(shape)) {
5897
- const result = check(record[key]);
5898
- if (!result.ok) {
5899
- return FAIL;
5900
- }
5901
- if (result.value !== void 0) {
5902
- value[key] = result.value;
5903
- }
5904
- }
5905
- return { ok: true, value };
5906
- };
5907
- }
5908
- var itemTypeOption = vObject({
5909
- key: vString,
5910
- values: vArray(vString),
5911
- required: vOptional(vBoolean),
5912
- aliases: vOptional(vArray(vString)),
5913
- description: vOptional(vString)
5914
- });
5915
- var itemTypeCommandOptionPolicy = vObject({
5916
- command: vLiteral("create", "update"),
5917
- option: vString,
5918
- required: vOptional(vBoolean),
5919
- visible: vOptional(vBoolean),
5920
- enabled: vOptional(vBoolean)
5921
- });
5922
- var itemTypeDefinition = vObject({
5923
- name: vString,
5924
- description: vOptional(vString),
5925
- // Per-type create-time default status (config-driven); preserved so inline
5926
- // settings.item_types.definitions behave identically to schema/types.json.
5927
- default_status: vOptional(vString),
5928
- folder: vOptional(vString),
5929
- aliases: vOptional(vArray(vString)),
5930
- required_create_fields: vOptional(vArray(vString)),
5931
- required_create_repeatables: vOptional(vArray(vString)),
5932
- options: vOptional(vArray(itemTypeOption)),
5933
- command_option_policies: vOptional(vArray(itemTypeCommandOptionPolicy))
5934
- });
5935
- var runtimeStatusDefinition = vObject({
5936
- id: vString,
5937
- aliases: vOptional(vArray(vString)),
5938
- roles: vOptional(vArray(vLiteral(...RUNTIME_STATUS_ROLE_VALUES))),
5939
- description: vOptional(vString),
5940
- order: vOptional(vNumber())
5941
- });
5942
- var runtimeFieldDefinition = vObject({
5943
- key: vString,
5944
- metadata_key: vOptional(vString),
5945
- front_matter_key: vOptional(vString),
5946
- cli_flag: vOptional(vString),
5947
- cli_aliases: vOptional(vArray(vString)),
5948
- description: vOptional(vString),
5949
- type: vOptional(vLiteral(...RUNTIME_FIELD_TYPE_VALUES)),
5950
- commands: vOptional(vArray(vLiteral(...RUNTIME_FIELD_COMMAND_VALUES))),
5951
- repeatable: vOptional(vBoolean),
5952
- required: vOptional(vBoolean),
5953
- required_on_create: vOptional(vBoolean),
5954
- required_types: vOptional(vArray(vString)),
5955
- allow_unset: vOptional(vBoolean)
5956
- });
5957
- var statusTransitionPair = (input) => {
5958
- if (!Array.isArray(input) || input.length !== 2) {
5959
- return FAIL;
5960
- }
5961
- const [from, to] = input;
5962
- if (typeof from !== "string" || typeof to !== "string") {
5963
- return FAIL;
5964
- }
5965
- return { ok: true, value: [from, to] };
5966
- };
5967
- var typeWorkflowDefinition = vObject({
5968
- type: vString,
5969
- allowed_transitions: vArray(statusTransitionPair)
5970
- });
5971
- var runtimeSchemaSettings = vOptional(vObject({
5972
- version: vOptional(vNumber({ int: true })),
5973
- files: vOptional(vObject({
5974
- types: vOptional(vString),
5975
- statuses: vOptional(vString),
5976
- fields: vOptional(vString),
5977
- workflows: vOptional(vString)
5978
- })),
5979
- statuses: vOptional(vArray(runtimeStatusDefinition)),
5980
- fields: vOptional(vArray(runtimeFieldDefinition)),
5981
- workflow: vOptional(vObject({
5982
- draft_status: vOptional(vString),
5983
- open_status: vOptional(vString),
5984
- in_progress_status: vOptional(vString),
5985
- blocked_status: vOptional(vString),
5986
- close_status: vOptional(vString),
5987
- canceled_status: vOptional(vString)
5988
- })),
5989
- type_workflows: vOptional(vArray(typeWorkflowDefinition)),
5990
- unknown_field_policy: vOptional(vLiteral(...RUNTIME_UNKNOWN_FIELD_POLICY_VALUES))
5991
- }));
5992
- var governanceSettings = vOptional(vObject({
5993
- preset: vOptional(vLiteral(...GOVERNANCE_PRESET_VALUES)),
5994
- ownership_enforcement: vOptional(vLiteral("none", "warn", "strict")),
5995
- create_mode_default: vOptional(vLiteral("progressive", "strict")),
5996
- close_validation_default: vOptional(vLiteral("off", "warn", "strict")),
5997
- require_close_reason: vOptional(vBoolean),
5998
- parent_reference: vOptional(vLiteral("warn", "strict_error")),
5999
- metadata_profile: vOptional(vLiteral("core", "strict", "custom")),
6000
- force_required_for_stale_lock: vOptional(vBoolean),
6001
- create_default_type: vOptional(vString),
6002
- workflow_enforcement: vOptional(vLiteral("off", "warn", "strict"))
6003
- }));
6004
- var extensionPolicyOverride = vObject({
6005
- name: vString,
6006
- disabled: vOptional(vBoolean),
6007
- require_trusted: vOptional(vBoolean),
6008
- require_provenance: vOptional(vBoolean),
6009
- sandbox_profile: vOptional(vLiteral("none", "restricted", "strict")),
6010
- allowed_capabilities: vOptional(vArray(vString)),
6011
- blocked_capabilities: vOptional(vArray(vString)),
6012
- allowed_surfaces: vOptional(vArray(vString)),
6013
- blocked_surfaces: vOptional(vArray(vString)),
6014
- allowed_commands: vOptional(vArray(vString)),
6015
- blocked_commands: vOptional(vArray(vString)),
6016
- allowed_actions: vOptional(vArray(vString)),
6017
- blocked_actions: vOptional(vArray(vString)),
6018
- allowed_services: vOptional(vArray(vString)),
6019
- blocked_services: vOptional(vArray(vString))
6020
- });
6021
- var pmMaxVersionExceededModeLiteral = vLiteral("block", "warn");
6022
- var pmMaxVersionExceededMode = (input) => typeof input === "string" ? pmMaxVersionExceededModeLiteral(input) : vObject({
6023
- global: vOptional(pmMaxVersionExceededModeLiteral),
6024
- project: vOptional(pmMaxVersionExceededModeLiteral)
6025
- })(input);
6026
- var extensionPolicy = vOptional(vObject({
6027
- mode: vOptional(vLiteral("off", "warn", "enforce")),
6028
- trust_mode: vOptional(vLiteral("off", "warn", "enforce")),
6029
- pm_max_version_exceeded_mode: vOptional(pmMaxVersionExceededMode),
6030
- require_provenance: vOptional(vBoolean),
6031
- trusted_extensions: vOptional(vArray(vString)),
6032
- default_sandbox_profile: vOptional(vLiteral("none", "restricted", "strict")),
6033
- allowed_extensions: vOptional(vArray(vString)),
6034
- blocked_extensions: vOptional(vArray(vString)),
6035
- allowed_capabilities: vOptional(vArray(vString)),
6036
- blocked_capabilities: vOptional(vArray(vString)),
6037
- allowed_surfaces: vOptional(vArray(vString)),
6038
- blocked_surfaces: vOptional(vArray(vString)),
6039
- allowed_commands: vOptional(vArray(vString)),
6040
- blocked_commands: vOptional(vArray(vString)),
6041
- allowed_actions: vOptional(vArray(vString)),
6042
- blocked_actions: vOptional(vArray(vString)),
6043
- allowed_services: vOptional(vArray(vString)),
6044
- blocked_services: vOptional(vArray(vString)),
6045
- extension_overrides: vOptional(vArray(extensionPolicyOverride))
6046
- }));
6047
- var settingsCheck = vObject({
6048
- version: vNumber({ int: true }),
6049
- id_prefix: vString,
6050
- author_default: vString,
6051
- item_format: vOptional(vLiteral("toon", "json_markdown")),
6052
- locks: vObject({ ttl_seconds: vNumber({ int: true }) }),
6053
- checkpoints: vOptional(vObject({ retention_days: vOptional(vNumber({ int: true, positive: true })) })),
6054
- output: vObject({ default_format: vLiteral("toon", "json") }),
6055
- history: vOptional(vObject({
6056
- missing_stream: vLiteral("auto_create", "strict_error"),
6057
- compact_policy: vOptional(vObject({
6058
- enabled: vOptional(vBoolean),
6059
- max_entries: vOptional(vNumber({ int: true, positive: true })),
6060
- trigger: vOptional(vLiteral("health_warn", "auto"))
6061
- }))
6062
- })),
6063
- validation: vOptional(vObject({
6064
- sprint_release_format: vLiteral("warn", "strict_error"),
6065
- parent_reference: vOptional(vLiteral("warn", "strict_error")),
6066
- metadata_profile: vOptional(vLiteral("core", "strict", "custom")),
6067
- metadata_required_fields: vOptional(vArray(vString)),
6068
- lifecycle_stale_blocker_reason_patterns: vOptional(vArray(vString)),
6069
- lifecycle_closure_like_blocked_reason_patterns: vOptional(vArray(vString)),
6070
- lifecycle_closure_like_resolution_patterns: vOptional(vArray(vString)),
6071
- lifecycle_closure_like_actual_result_patterns: vOptional(vArray(vString)),
6072
- estimate_defaults_by_type: vOptional(vRecordOf(vNumber({ int: true, positive: true })))
6073
- })),
6074
- governance: governanceSettings,
6075
- workflow: vOptional(vObject({ definition_of_done: vArray(vString) })),
6076
- testing: vOptional(vObject({ record_results_to_items: vBoolean })),
6077
- telemetry: vOptional(vObject({
6078
- enabled: vBoolean,
6079
- first_run_prompt_completed: vOptional(vBoolean),
6080
- capture_level: vOptional(vLiteral("minimal", "redacted", "max")),
6081
- endpoint: vOptional(vString),
6082
- installation_id: vOptional(vString),
6083
- retention_days: vOptional(vNumber({ int: true, positive: true }))
6084
- })),
6085
- agent_guidance: vOptional(vObject({
6086
- prompt_completed: vOptional(vBoolean),
6087
- declined: vOptional(vBoolean),
6088
- declined_at: vOptional(vString),
6089
- template_version: vOptional(vNumber({ int: true, positive: true })),
6090
- last_checked_files: vOptional(vArray(vString))
6091
- })),
6092
- item_types: vOptional(vObject({ definitions: vArray(itemTypeDefinition) })),
6093
- schema: runtimeSchemaSettings,
6094
- context: vOptional(vObject({
6095
- default_depth: vOptional(vLiteral("brief", "standard", "deep")),
6096
- activity_limit: vOptional(vNumber({ int: true, positive: true })),
6097
- stale_threshold_days: vOptional(vNumber({ int: true, positive: true })),
6098
- sections: vOptional(vObject({
6099
- hierarchy: vOptional(vBoolean),
6100
- activity: vOptional(vBoolean),
6101
- progress: vOptional(vBoolean),
6102
- recently_created: vOptional(vBoolean),
6103
- unparented: vOptional(vBoolean),
6104
- blockers: vOptional(vBoolean),
6105
- files: vOptional(vBoolean),
6106
- workload: vOptional(vBoolean),
6107
- staleness: vOptional(vBoolean),
6108
- tests: vOptional(vBoolean)
6109
- }))
6110
- })),
6111
- extensions: vObject({
6112
- enabled: vArray(vString),
6113
- disabled: vArray(vString),
6114
- policy: extensionPolicy
6115
- }),
6116
- search: vObject({
6117
- score_threshold: vNumber(),
6118
- hybrid_semantic_weight: vOptional(vNumber()),
6119
- max_results: vNumber({ int: true }),
6120
- embedding_model: vString,
6121
- embedding_corpus_max_characters: vOptional(vNumber()),
6122
- embedding_batch_size: vNumber({ int: true }),
6123
- embedding_timeout_ms: vOptional(vNumber({ int: true })),
6124
- scanner_max_batch_retries: vNumber({ int: true }),
6125
- provider: vOptional(vString),
6126
- corpus_fields: vOptional(vArray(vString)),
6127
- mutation_refresh_policy: vOptional(vLiteral("cache_only", "semantic_configured", "semantic_auto")),
6128
- query_expansion: vOptional(vObject({
6129
- enabled: vOptional(vBoolean),
6130
- provider: vOptional(vString)
6131
- })),
6132
- rerank: vOptional(vObject({
6133
- enabled: vOptional(vBoolean),
6134
- model: vOptional(vString),
6135
- top_k: vOptional(vNumber({ int: true, positive: true }))
6136
- })),
6137
- // pm-75k9: offline BM25 tuning. Unlike `search.tuning` (intentionally
6138
- // stripped for legacy zod parity), bm25 is validated so it persists across
6139
- // writeSettings round-trips — these knobs must survive to take effect.
6140
- bm25: vOptional(vObject({
6141
- k1: vOptional(vNumber()),
6142
- b: vOptional(vNumber())
6143
- }))
6144
- }),
6145
- providers: vObject({
6146
- openai: vObject({ base_url: vString, api_key: vString, model: vString }),
6147
- ollama: vObject({ base_url: vString, model: vString })
6148
- }),
6149
- vector_store: vObject({
6150
- adapter: vOptional(vString),
6151
- collection_name: vOptional(vString),
6152
- qdrant: vObject({ url: vString, api_key: vString }),
6153
- lancedb: vObject({ path: vString })
6154
- })
6155
- });
6156
- function validateSettings(raw) {
6157
- const result = settingsCheck(raw);
6158
- if (!result.ok) {
6159
- return { success: false };
6160
- }
6161
- return { success: true, data: result.value };
6162
- }
6163
-
6164
- // dist/core/validate/estimate-defaults.js
6165
- var DEFAULT_ESTIMATE_MINUTES_BY_TYPE = {
6166
- Epic: 2880,
6167
- Feature: 480,
6168
- Story: 480,
6169
- Milestone: 2880,
6170
- Task: 120,
6171
- Issue: 60,
6172
- Bug: 60,
6173
- Chore: 30,
6174
- Decision: 15,
6175
- Plan: 120
6176
- };
6177
- var FALLBACK_ESTIMATE_MINUTES = 120;
6178
- function isHonoredMinutes(value) {
6179
- return typeof value === "number" && Number.isFinite(value) && value > 0;
6180
- }
6181
- function toLowercasedLookup(source) {
6182
- const lookup = /* @__PURE__ */ new Map();
6183
- for (const [key, value] of Object.entries(source)) {
6184
- lookup.set(key.toLowerCase(), value);
6185
- }
6186
- return lookup;
6187
- }
6188
- var BUILTIN_LOWERCASED_LOOKUP = toLowercasedLookup(DEFAULT_ESTIMATE_MINUTES_BY_TYPE);
6189
- var OVERRIDE_LOOKUP_CACHE = /* @__PURE__ */ new WeakMap();
6190
- function lowercasedOverrideLookup(overrides) {
6191
- const cached = OVERRIDE_LOOKUP_CACHE.get(overrides);
6192
- if (cached) {
6193
- return cached;
6194
- }
6195
- const lookup = toLowercasedLookup(overrides);
6196
- OVERRIDE_LOOKUP_CACHE.set(overrides, lookup);
6197
- return lookup;
6198
- }
6199
- function resolveEstimateDefaultMinutes(type, overrides) {
6200
- const key = (type ?? "").trim().toLowerCase();
6201
- if (key.length === 0) {
6202
- return FALLBACK_ESTIMATE_MINUTES;
6203
- }
6204
- if (overrides) {
6205
- const overrideValue = lowercasedOverrideLookup(overrides).get(key);
6206
- if (isHonoredMinutes(overrideValue)) {
6207
- return Math.floor(overrideValue);
6208
- }
6209
- }
6210
- const builtinValue = BUILTIN_LOWERCASED_LOOKUP.get(key);
6211
- if (isHonoredMinutes(builtinValue)) {
6212
- return Math.floor(builtinValue);
6213
- }
6214
- return FALLBACK_ESTIMATE_MINUTES;
6215
- }
6216
- function normalizeEstimateDefaultOverrides(raw) {
6217
- const normalized = {};
6218
- if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
6219
- return normalized;
6220
- }
6221
- for (const [rawKey, rawValue] of Object.entries(raw)) {
6222
- const key = rawKey.trim();
6223
- if (key.length === 0 || !isHonoredMinutes(rawValue)) {
6224
- continue;
6225
- }
6226
- normalized[key] = Math.floor(rawValue);
6227
- }
6228
- return normalized;
6229
- }
6230
-
6231
- // dist/core/store/settings-read-cache.js
6232
- import { stat } from "node:fs/promises";
6233
- var settingsReadCacheByRoot = /* @__PURE__ */ new Map();
6234
- function normalizeTrackedPaths(paths) {
6235
- return [...new Set(paths.map((pathValue) => pathValue.trim()).filter((pathValue) => pathValue.length > 0))].sort((left, right) => left.localeCompare(right));
6236
- }
6237
- async function readPathSignature(targetPath) {
6238
- try {
6239
- const targetStats = await stat(targetPath);
6240
- return {
6241
- path: targetPath,
6242
- mtime_ms: targetStats.mtimeMs,
6243
- size: targetStats.size
6244
- };
6245
- } catch {
6246
- return {
6247
- path: targetPath,
6248
- mtime_ms: null,
6249
- size: null
6250
- };
6251
- }
6252
- }
6253
- async function collectSettingsReadCacheSignatures(paths) {
6254
- const normalizedPaths = normalizeTrackedPaths(paths);
6255
- const signatures = await Promise.all(normalizedPaths.map((targetPath) => readPathSignature(targetPath)));
6256
- signatures.sort((left, right) => left.path.localeCompare(right.path));
6257
- return signatures;
6258
- }
6259
- function settingsReadCacheSignaturesEqual(left, right) {
6260
- if (left.length !== right.length) {
6261
- return false;
6262
- }
6263
- for (let index = 0; index < left.length; index += 1) {
6264
- const leftEntry = left[index];
6265
- const rightEntry = right[index];
6266
- if (leftEntry.path !== rightEntry.path || leftEntry.mtime_ms !== rightEntry.mtime_ms || leftEntry.size !== rightEntry.size) {
6267
- return false;
6268
- }
6269
- }
6270
- return true;
6271
- }
6272
- function getSettingsReadCacheEntry(pmRoot) {
6273
- return settingsReadCacheByRoot.get(pmRoot);
6274
- }
6275
- function setSettingsReadCacheEntry(pmRoot, entry) {
6276
- const normalizedTrackedPaths = normalizeTrackedPaths(entry.tracked_paths);
6277
- const normalizedSignatures = [...entry.signatures].map((signature) => ({
6278
- path: signature.path,
6279
- mtime_ms: signature.mtime_ms,
6280
- size: signature.size
6281
- })).sort((left, right) => left.path.localeCompare(right.path));
6282
- settingsReadCacheByRoot.set(pmRoot, {
6283
- tracked_paths: normalizedTrackedPaths,
6284
- signatures: normalizedSignatures,
6285
- value: entry.value
6286
- });
6287
- }
6288
- function clearSettingsReadCache(pmRoot) {
6289
- if (pmRoot) {
6290
- settingsReadCacheByRoot.delete(pmRoot);
6291
- return;
6292
- }
6293
- settingsReadCacheByRoot.clear();
6294
- }
6295
-
6296
- // dist/core/store/settings.js
6297
- var SETTINGS_WRITE_OP = "settings:write";
6298
- var SETTINGS_PERSIST_SOURCE_SYMBOL = /* @__PURE__ */ Symbol("pm.settings.persist_source");
6299
- var MAX_VECTOR_STORE_COLLECTION_NAME_LENGTH = 128;
6300
- function resolveGovernanceKnobsFromPreset(preset) {
6301
- return structuredClone(GOVERNANCE_PRESET_DEFAULTS[preset]);
6302
- }
6303
- function normalizeGovernancePreset(value) {
6304
- if (value === "minimal" || value === "default" || value === "strict" || value === "custom") {
6305
- return value;
6306
- }
6307
- return SETTINGS_DEFAULTS.governance.preset;
6308
- }
6309
- function withGovernanceExtras(base, governance) {
6310
- const createDefaultType = typeof governance.create_default_type === "string" ? governance.create_default_type.trim() : void 0;
6311
- if (createDefaultType && createDefaultType.length > 0) {
6312
- base.create_default_type = createDefaultType;
6313
- }
6314
- if (governance.workflow_enforcement === "off" || governance.workflow_enforcement === "warn" || governance.workflow_enforcement === "strict") {
6315
- base.workflow_enforcement = governance.workflow_enforcement;
6316
- }
6317
- if (governance.require_close_reason === false) {
6318
- base.require_close_reason = false;
6319
- }
6320
- return base;
6321
- }
6322
- function normalizeGovernanceForPersist(governance) {
6323
- if (governance.preset === "custom") {
6324
- return withGovernanceExtras({
6325
- preset: "custom",
6326
- ownership_enforcement: governance.ownership_enforcement,
6327
- create_mode_default: governance.create_mode_default,
6328
- close_validation_default: governance.close_validation_default,
6329
- parent_reference: governance.parent_reference,
6330
- metadata_profile: governance.metadata_profile,
6331
- force_required_for_stale_lock: governance.force_required_for_stale_lock
6332
- }, governance);
6333
- }
6334
- return withGovernanceExtras({
6335
- preset: governance.preset
6336
- }, governance);
6337
- }
6338
- function resolveGovernanceExtras(rawGovernance) {
6339
- const createDefaultType = typeof rawGovernance.create_default_type === "string" ? rawGovernance.create_default_type.trim() : void 0;
6340
- const extras = {};
6341
- if (createDefaultType && createDefaultType.length > 0) {
6342
- extras.create_default_type = createDefaultType;
6343
- }
6344
- if (rawGovernance.workflow_enforcement === "off" || rawGovernance.workflow_enforcement === "warn" || rawGovernance.workflow_enforcement === "strict") {
6345
- extras.workflow_enforcement = rawGovernance.workflow_enforcement;
6346
- }
6347
- if (typeof rawGovernance.require_close_reason === "boolean") {
6348
- extras.require_close_reason = rawGovernance.require_close_reason;
6349
- }
6350
- return extras;
6351
- }
6352
- function resolveGovernanceKnobs(settings) {
6353
- const rawGovernance = settings.governance ?? {};
6354
- const preset = normalizeGovernancePreset(rawGovernance.preset);
6355
- const extras = resolveGovernanceExtras(rawGovernance);
6356
- if (preset === "custom") {
6357
- const baseline2 = resolveGovernanceKnobsFromPreset("default");
6358
- const requireCloseReason2 = extras.require_close_reason ?? baseline2.require_close_reason;
6359
- return {
6360
- preset,
6361
- ownership_enforcement: rawGovernance.ownership_enforcement ?? baseline2.ownership_enforcement,
6362
- create_mode_default: rawGovernance.create_mode_default ?? baseline2.create_mode_default,
6363
- close_validation_default: rawGovernance.close_validation_default ?? baseline2.close_validation_default,
6364
- parent_reference: rawGovernance.parent_reference ?? baseline2.parent_reference,
6365
- metadata_profile: rawGovernance.metadata_profile ?? baseline2.metadata_profile,
6366
- force_required_for_stale_lock: rawGovernance.force_required_for_stale_lock ?? baseline2.force_required_for_stale_lock,
6367
- ...extras,
6368
- require_close_reason: requireCloseReason2
6369
- };
6370
- }
6371
- const baseline = resolveGovernanceKnobsFromPreset(preset);
6372
- const requireCloseReason = extras.require_close_reason ?? baseline.require_close_reason;
6373
- return {
6374
- preset,
6375
- ...baseline,
6376
- ...extras,
6377
- require_close_reason: requireCloseReason
6378
- };
6379
- }
6380
- function cloneDefaults() {
6381
- return structuredClone(SETTINGS_DEFAULTS);
6382
- }
6383
- function normalizeSearchMutationRefreshPolicy(value) {
6384
- if (value === "cache_only" || value === "semantic_configured" || value === "semantic_auto") {
6385
- return value;
6386
- }
6387
- return SETTINGS_DEFAULTS.search.mutation_refresh_policy;
6388
- }
6389
- function normalizeSearchQueryExpansionEnabled(value) {
6390
- if (typeof value === "boolean") {
6391
- return value;
6392
- }
6393
- return SETTINGS_DEFAULTS.search.query_expansion.enabled;
6394
- }
6395
- function normalizeSearchQueryExpansionProvider(value) {
6396
- if (typeof value !== "string") {
6397
- return SETTINGS_DEFAULTS.search.query_expansion.provider;
6398
- }
6399
- return value.trim();
6400
- }
6401
- function normalizeSearchRerankEnabled(value) {
6402
- if (typeof value === "boolean") {
6403
- return value;
6404
- }
6405
- return SETTINGS_DEFAULTS.search.rerank.enabled;
6406
- }
6407
- function normalizeSearchRerankModel(value) {
6408
- if (typeof value !== "string") {
6409
- return SETTINGS_DEFAULTS.search.rerank.model;
6410
- }
6411
- return value.trim();
6412
- }
6413
- function normalizeSearchRerankTopK(value) {
6414
- if (typeof value === "number" && Number.isFinite(value) && Number.isInteger(value) && value > 0) {
6415
- return value;
6416
- }
6417
- return SETTINGS_DEFAULTS.search.rerank.top_k;
6418
- }
6419
- function normalizeVectorStoreCollectionName(value) {
6420
- if (typeof value !== "string") {
6421
- return SETTINGS_DEFAULTS.vector_store.collection_name;
6422
- }
6423
- const sanitized = value.trim().replaceAll(/[^a-zA-Z0-9_-]/g, "_");
6424
- const truncated = sanitized.slice(0, MAX_VECTOR_STORE_COLLECTION_NAME_LENGTH);
6425
- return truncated.length > 0 ? truncated : SETTINGS_DEFAULTS.vector_store.collection_name;
6426
- }
6427
- function buildSettingsPersistSourceSnapshot(parsedSettings, runtimeSettings) {
6428
- const sourceSchema = parsedSettings.schema;
6429
- const sourceStatuses = Array.isArray(sourceSchema?.statuses) ? sourceSchema?.statuses : void 0;
6430
- const sourceFields = Array.isArray(sourceSchema?.fields) ? sourceSchema?.fields : void 0;
6431
- const sourceTypeWorkflows = Array.isArray(sourceSchema?.type_workflows) ? sourceSchema?.type_workflows : void 0;
6432
- return {
6433
- has_source_item_type_definitions: Array.isArray(parsedSettings.item_types?.definitions),
6434
- source_item_type_definitions: normalizeItemTypeDefinitions(parsedSettings.item_types?.definitions),
6435
- has_source_schema_statuses: sourceStatuses !== void 0,
6436
- source_schema_statuses: sourceStatuses ? structuredClone(sourceStatuses) : [],
6437
- has_source_schema_fields: sourceFields !== void 0,
6438
- source_schema_fields: sourceFields ? structuredClone(sourceFields) : [],
6439
- has_source_schema_type_workflows: sourceTypeWorkflows !== void 0,
6440
- source_schema_type_workflows: sourceTypeWorkflows ? structuredClone(sourceTypeWorkflows) : [],
6441
- runtime_item_type_definitions: normalizeItemTypeDefinitions(runtimeSettings.item_types?.definitions),
6442
- runtime_schema_statuses: structuredClone(runtimeSettings.schema.statuses),
6443
- runtime_schema_fields: structuredClone(runtimeSettings.schema.fields),
6444
- runtime_schema_type_workflows: structuredClone(runtimeSettings.schema.type_workflows ?? [])
6445
- };
6446
- }
6447
- function attachSettingsPersistSourceSnapshot(settings, source) {
6448
- Object.defineProperty(settings, SETTINGS_PERSIST_SOURCE_SYMBOL, {
6449
- value: source,
6450
- writable: true,
6451
- configurable: true,
6452
- enumerable: false
6453
- });
6454
- }
6455
- function getSettingsPersistSourceSnapshot(settings) {
6456
- const candidate = settings[SETTINGS_PERSIST_SOURCE_SYMBOL];
6457
- if (!candidate || typeof candidate !== "object") {
6458
- return void 0;
6459
- }
6460
- return candidate;
6461
- }
6462
- function cloneSettingsReadResult(result) {
6463
- const clonedSettings = structuredClone(result.settings);
6464
- const persistSource = getSettingsPersistSourceSnapshot(result.settings);
6465
- if (persistSource) {
6466
- attachSettingsPersistSourceSnapshot(clonedSettings, structuredClone(persistSource));
6467
- }
6468
- return {
6469
- settings: clonedSettings,
6470
- metadata: {
6471
- has_explicit_item_format: result.metadata.has_explicit_item_format
6472
- },
6473
- warnings: [...result.warnings]
6474
- };
6475
- }
6476
- function resolveSettingsReadTrackedPaths(pmRoot, schema, settingsPath) {
6477
- const normalizedSchema = normalizeRuntimeSchemaSettings(schema);
6478
- return [
6479
- settingsPath,
6480
- filePathForSchemaSection(pmRoot, normalizedSchema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types),
6481
- filePathForSchemaSection(pmRoot, normalizedSchema.files.statuses, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses),
6482
- filePathForSchemaSection(pmRoot, normalizedSchema.files.fields, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields),
6483
- filePathForSchemaSection(pmRoot, normalizedSchema.files.workflows, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows)
6484
- ];
6485
- }
6486
- async function cacheSettingsReadResult(pmRoot, trackedPaths, result) {
6487
- const signatures = await collectSettingsReadCacheSignatures(trackedPaths);
6488
- setSettingsReadCacheEntry(pmRoot, {
6489
- tracked_paths: trackedPaths,
6490
- signatures,
6491
- value: cloneSettingsReadResult(result)
6492
- });
6493
- }
6494
- async function cacheSettingsReadResultSafe(pmRoot, trackedPaths, result) {
6495
- try {
6496
- await cacheSettingsReadResult(pmRoot, trackedPaths, result);
6497
- } catch {
6498
- clearSettingsReadCache(pmRoot);
6499
- }
6500
- }
6501
- function findSettingsReadCacheSignature(signatures, targetPath) {
6502
- return signatures.find((signature) => signature.path === targetPath);
6503
- }
6504
- function selectedSettingsReadCacheSignaturesEqual(before, after, targetPaths) {
6505
- for (const targetPath of targetPaths) {
6506
- const beforeSignature = findSettingsReadCacheSignature(before, targetPath);
6507
- const afterSignature = findSettingsReadCacheSignature(after, targetPath);
6508
- if (!beforeSignature || !afterSignature || !settingsReadCacheSignaturesEqual([beforeSignature], [afterSignature])) {
6509
- return false;
6510
- }
6511
- }
6512
- return true;
6513
- }
6514
- async function cacheSettingsReadResultIfStable(pmRoot, trackedPaths, result, stableSignatures, stablePaths) {
6515
- try {
6516
- const currentSignatures = await collectSettingsReadCacheSignatures(trackedPaths);
6517
- if (!selectedSettingsReadCacheSignaturesEqual(stableSignatures, currentSignatures, stablePaths)) {
6518
- clearSettingsReadCache(pmRoot);
6519
- return;
6520
- }
6521
- setSettingsReadCacheEntry(pmRoot, {
6522
- tracked_paths: trackedPaths,
6523
- signatures: currentSignatures,
6524
- value: cloneSettingsReadResult(result)
6525
- });
6526
- } catch {
6527
- clearSettingsReadCache(pmRoot);
6528
- }
6529
- }
6530
- function resolvePersistedFileBackedSchemaSections(settings, source) {
6531
- const normalizedSchema = normalizeRuntimeSchemaSettings(settings.schema);
6532
- const currentItemTypeDefinitions = normalizeItemTypeDefinitions(settings.item_types?.definitions);
6533
- if (!source) {
6534
- return {
6535
- item_type_definitions: currentItemTypeDefinitions,
6536
- schema_statuses: normalizedSchema.statuses,
6537
- schema_fields: normalizedSchema.fields,
6538
- schema_type_workflows: normalizedSchema.type_workflows
6539
- };
6540
- }
6541
- const currentTypeWorkflows = normalizedSchema.type_workflows ?? [];
6542
- const itemTypeDefinitionsUnchanged = stableValueEquals(currentItemTypeDefinitions, source.runtime_item_type_definitions);
6543
- const schemaStatusesUnchanged = stableValueEquals(normalizedSchema.statuses, source.runtime_schema_statuses);
6544
- const schemaFieldsUnchanged = stableValueEquals(normalizedSchema.fields, source.runtime_schema_fields);
6545
- const schemaTypeWorkflowsUnchanged = stableValueEquals(currentTypeWorkflows, source.runtime_schema_type_workflows);
6546
- return {
6547
- item_type_definitions: itemTypeDefinitionsUnchanged ? source.has_source_item_type_definitions ? normalizeItemTypeDefinitions(source.source_item_type_definitions) : [] : currentItemTypeDefinitions,
6548
- schema_statuses: schemaStatusesUnchanged ? source.has_source_schema_statuses ? structuredClone(source.source_schema_statuses) : [] : normalizedSchema.statuses,
6549
- schema_fields: schemaFieldsUnchanged ? source.has_source_schema_fields ? structuredClone(source.source_schema_fields) : [] : normalizedSchema.fields,
6550
- schema_type_workflows: schemaTypeWorkflowsUnchanged ? source.has_source_schema_type_workflows ? structuredClone(source.source_schema_type_workflows) : void 0 : normalizedSchema.type_workflows
6551
- };
6552
- }
6553
- function buildFallbackSettingsReadResult(warning) {
6554
- return {
6555
- settings: cloneDefaults(),
6556
- metadata: {
6557
- has_explicit_item_format: false
6558
- },
6559
- warnings: warning ? [warning] : []
6560
- };
6561
- }
6562
- function hasExplicitItemFormat(raw) {
6563
- if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
6564
- return false;
6565
- }
6566
- const itemFormat = raw.item_format;
6567
- return itemFormat === "toon" || itemFormat === "json_markdown";
6568
- }
6569
- function normalizeStringList2(values) {
6570
- return [...new Set((values ?? []).map((value) => value.trim()).filter((value) => value.length > 0))].sort((left, right) => left.localeCompare(right));
6571
- }
6572
- function normalizeAgentGuidanceSettings(value) {
6573
- const defaults = SETTINGS_DEFAULTS.agent_guidance;
6574
- const templateVersion = value?.template_version;
6575
- return {
6576
- prompt_completed: value?.prompt_completed === true,
6577
- declined: value?.declined === true,
6578
- declined_at: typeof value?.declined_at === "string" ? value.declined_at : defaults.declined_at,
6579
- template_version: typeof templateVersion === "number" && Number.isInteger(templateVersion) && templateVersion > 0 ? templateVersion : defaults.template_version,
6580
- last_checked_files: normalizeStringList2(value?.last_checked_files ?? defaults.last_checked_files)
6581
- };
6582
- }
6583
- function normalizeLowerStringList(values) {
6584
- return [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort((left, right) => left.localeCompare(right));
6585
- }
6586
- function normalizeExtensionPolicyMode(value) {
6587
- if (value === "off" || value === "warn" || value === "enforce") {
6588
- return value;
6589
- }
6590
- return SETTINGS_DEFAULTS.extensions.policy.mode;
6591
- }
6592
- function normalizeExtensionTrustMode(value) {
6593
- if (value === "off" || value === "warn" || value === "enforce") {
6594
- return value;
6595
- }
6596
- return SETTINGS_DEFAULTS.extensions.policy.trust_mode;
6597
- }
6598
- function normalizeExtensionSandboxProfile(value) {
6599
- if (value === "none" || value === "restricted" || value === "strict") {
6600
- return value;
6601
- }
6602
- return SETTINGS_DEFAULTS.extensions.policy.default_sandbox_profile;
6603
- }
6604
- function normalizeExtensionPolicyOverride(override) {
6605
- const name = override.name.trim().toLowerCase();
6606
- if (name.length === 0) {
6607
- return null;
6608
- }
6609
- const normalized = {
6610
- name
6611
- };
6612
- if (override.disabled === true) {
6613
- normalized.disabled = true;
6614
- }
6615
- if (override.require_trusted === true) {
6616
- normalized.require_trusted = true;
6617
- }
6618
- if (override.require_provenance === true) {
6619
- normalized.require_provenance = true;
6620
- }
6621
- if (override.sandbox_profile !== void 0) {
6622
- normalized.sandbox_profile = normalizeExtensionSandboxProfile(override.sandbox_profile);
6623
- }
6624
- const allowedCapabilities = normalizeLowerStringList(override.allowed_capabilities);
6625
- const blockedCapabilities = normalizeLowerStringList(override.blocked_capabilities);
6626
- const allowedSurfaces = normalizeLowerStringList(override.allowed_surfaces);
6627
- const blockedSurfaces = normalizeLowerStringList(override.blocked_surfaces);
6628
- const allowedCommands = normalizeLowerStringList(override.allowed_commands);
6629
- const blockedCommands = normalizeLowerStringList(override.blocked_commands);
6630
- const allowedActions = normalizeLowerStringList(override.allowed_actions);
6631
- const blockedActions = normalizeLowerStringList(override.blocked_actions);
6632
- const allowedServices = normalizeLowerStringList(override.allowed_services);
6633
- const blockedServices = normalizeLowerStringList(override.blocked_services);
6634
- if (allowedCapabilities.length > 0) {
6635
- normalized.allowed_capabilities = allowedCapabilities;
6636
- }
6637
- if (blockedCapabilities.length > 0) {
6638
- normalized.blocked_capabilities = blockedCapabilities;
6639
- }
6640
- if (allowedSurfaces.length > 0) {
6641
- normalized.allowed_surfaces = allowedSurfaces;
6642
- }
6643
- if (blockedSurfaces.length > 0) {
6644
- normalized.blocked_surfaces = blockedSurfaces;
6645
- }
6646
- if (allowedCommands.length > 0) {
6647
- normalized.allowed_commands = allowedCommands;
6648
- }
6649
- if (blockedCommands.length > 0) {
6650
- normalized.blocked_commands = blockedCommands;
6651
- }
6652
- if (allowedActions.length > 0) {
6653
- normalized.allowed_actions = allowedActions;
6654
- }
6655
- if (blockedActions.length > 0) {
6656
- normalized.blocked_actions = blockedActions;
6657
- }
6658
- if (allowedServices.length > 0) {
6659
- normalized.allowed_services = allowedServices;
6660
- }
6661
- if (blockedServices.length > 0) {
6662
- normalized.blocked_services = blockedServices;
6663
- }
6664
- return normalized;
6665
- }
6666
- function normalizeExtensionPolicyOverrides(overrides) {
6667
- const dedupedByName = /* @__PURE__ */ new Map();
6668
- for (const override of overrides ?? []) {
6669
- const normalized = normalizeExtensionPolicyOverride(override);
6670
- if (!normalized) {
6671
- continue;
6672
- }
6673
- dedupedByName.set(normalized.name, normalized);
6674
- }
6675
- return [...dedupedByName.values()].sort((left, right) => left.name.localeCompare(right.name));
6676
- }
6677
- function normalizePmMaxVersionExceededModeValue2(value) {
6678
- return value === "block" || value === "warn" ? value : void 0;
6679
- }
6680
- function normalizePmMaxVersionExceededModeSetting(value) {
6681
- if (typeof value === "string") {
6682
- return normalizePmMaxVersionExceededModeValue2(value);
6683
- }
6684
- if (typeof value === "object" && value !== null && !Array.isArray(value)) {
6685
- const global = normalizePmMaxVersionExceededModeValue2(value.global);
6686
- const project = normalizePmMaxVersionExceededModeValue2(value.project);
6687
- if (global === void 0 && project === void 0) {
6688
- return void 0;
6689
- }
6690
- return {
6691
- ...global !== void 0 ? { global } : {},
6692
- ...project !== void 0 ? { project } : {}
6693
- };
6694
- }
6695
- return void 0;
6696
- }
6697
- function normalizeExtensionPolicyList(policy, key) {
6698
- return normalizeLowerStringList(policy?.[key] ?? SETTINGS_DEFAULTS.extensions.policy[key]);
6699
- }
6700
- function normalizeExtensionPolicySettings(policy) {
6701
- const pmMaxVersionExceededMode2 = normalizePmMaxVersionExceededModeSetting(policy?.pm_max_version_exceeded_mode);
6702
- return {
6703
- mode: normalizeExtensionPolicyMode(policy?.mode),
6704
- trust_mode: normalizeExtensionTrustMode(policy?.trust_mode),
6705
- ...pmMaxVersionExceededMode2 !== void 0 ? { pm_max_version_exceeded_mode: pmMaxVersionExceededMode2 } : {},
6706
- require_provenance: policy?.require_provenance === true,
6707
- trusted_extensions: normalizeExtensionPolicyList(policy, "trusted_extensions"),
6708
- default_sandbox_profile: normalizeExtensionSandboxProfile(policy?.default_sandbox_profile),
6709
- allowed_extensions: normalizeExtensionPolicyList(policy, "allowed_extensions"),
6710
- blocked_extensions: normalizeExtensionPolicyList(policy, "blocked_extensions"),
6711
- allowed_capabilities: normalizeExtensionPolicyList(policy, "allowed_capabilities"),
6712
- blocked_capabilities: normalizeExtensionPolicyList(policy, "blocked_capabilities"),
6713
- allowed_surfaces: normalizeExtensionPolicyList(policy, "allowed_surfaces"),
6714
- blocked_surfaces: normalizeExtensionPolicyList(policy, "blocked_surfaces"),
6715
- allowed_commands: normalizeExtensionPolicyList(policy, "allowed_commands"),
6716
- blocked_commands: normalizeExtensionPolicyList(policy, "blocked_commands"),
6717
- allowed_actions: normalizeExtensionPolicyList(policy, "allowed_actions"),
6718
- blocked_actions: normalizeExtensionPolicyList(policy, "blocked_actions"),
6719
- allowed_services: normalizeExtensionPolicyList(policy, "allowed_services"),
6720
- blocked_services: normalizeExtensionPolicyList(policy, "blocked_services"),
6721
- extension_overrides: normalizeExtensionPolicyOverrides(policy?.extension_overrides ?? SETTINGS_DEFAULTS.extensions.policy.extension_overrides)
6722
- };
6723
- }
6724
- function normalizeValidationMetadataRequiredFields(values) {
6725
- const normalized = [...new Set((values ?? []).map((value) => value.trim().toLowerCase().replaceAll("-", "_")))].filter((value) => value.length > 0).sort((left, right) => left.localeCompare(right));
6726
- return normalized.filter((value) => [
6727
- "author",
6728
- "acceptance_criteria",
6729
- "estimated_minutes",
6730
- "close_reason",
6731
- "reviewer",
6732
- "risk",
6733
- "confidence",
6734
- "sprint",
6735
- "release"
6736
- ].includes(value));
6737
- }
6738
- function normalizeValidationPatternList(values) {
6739
- return [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort((left, right) => left.localeCompare(right));
6740
- }
6741
- function valueOrDefault(value, fallback) {
6742
- return value === void 0 ? fallback : value;
6743
- }
6744
- function recordOrEmpty(value) {
6745
- return typeof value === "object" && value !== null && !Array.isArray(value) ? value : {};
6746
- }
6747
- function arrayOrEmpty(value) {
6748
- return Array.isArray(value) ? value : [];
6749
- }
6750
- function buildValidationSettings(settings, defaults, governance) {
6751
- return {
6752
- ...defaults.validation,
6753
- ...settings.validation,
6754
- parent_reference: governance.parent_reference,
6755
- metadata_profile: governance.metadata_profile,
6756
- metadata_required_fields: normalizeValidationMetadataRequiredFields(settings.validation?.metadata_required_fields),
6757
- lifecycle_stale_blocker_reason_patterns: normalizeValidationPatternList(settings.validation?.lifecycle_stale_blocker_reason_patterns ?? defaults.validation.lifecycle_stale_blocker_reason_patterns),
6758
- lifecycle_closure_like_blocked_reason_patterns: normalizeValidationPatternList(settings.validation?.lifecycle_closure_like_blocked_reason_patterns ?? defaults.validation.lifecycle_closure_like_blocked_reason_patterns),
6759
- lifecycle_closure_like_resolution_patterns: normalizeValidationPatternList(settings.validation?.lifecycle_closure_like_resolution_patterns ?? defaults.validation.lifecycle_closure_like_resolution_patterns),
6760
- lifecycle_closure_like_actual_result_patterns: normalizeValidationPatternList(settings.validation?.lifecycle_closure_like_actual_result_patterns ?? defaults.validation.lifecycle_closure_like_actual_result_patterns),
6761
- estimate_defaults_by_type: normalizeEstimateDefaultOverrides(settings.validation?.estimate_defaults_by_type)
6762
- };
6763
- }
6764
- function buildTelemetrySettings(settings, defaults) {
6765
- return {
6766
- enabled: settings.telemetry?.enabled ?? defaults.telemetry.enabled,
6767
- first_run_prompt_completed: settings.telemetry?.first_run_prompt_completed ?? defaults.telemetry.first_run_prompt_completed,
6768
- capture_level: settings.telemetry?.capture_level ?? defaults.telemetry.capture_level,
6769
- endpoint: settings.telemetry?.endpoint ?? defaults.telemetry.endpoint,
6770
- installation_id: settings.telemetry?.installation_id ?? defaults.telemetry.installation_id,
6771
- retention_days: settings.telemetry?.retention_days ?? defaults.telemetry.retention_days
6772
- };
6773
- }
6774
- function buildSearchSettings(settings, defaults) {
6775
- return {
6776
- ...defaults.search,
6777
- ...settings.search,
6778
- mutation_refresh_policy: normalizeSearchMutationRefreshPolicy(settings.search?.mutation_refresh_policy),
6779
- query_expansion: {
6780
- ...defaults.search.query_expansion,
6781
- ...settings.search?.query_expansion,
6782
- enabled: normalizeSearchQueryExpansionEnabled(settings.search?.query_expansion?.enabled),
6783
- provider: normalizeSearchQueryExpansionProvider(settings.search?.query_expansion?.provider)
6784
- },
6785
- rerank: {
6786
- ...defaults.search.rerank,
6787
- ...settings.search?.rerank,
6788
- enabled: normalizeSearchRerankEnabled(settings.search?.rerank?.enabled),
6789
- model: normalizeSearchRerankModel(settings.search?.rerank?.model),
6790
- top_k: normalizeSearchRerankTopK(settings.search?.rerank?.top_k)
6791
- }
6792
- };
6793
- }
6794
- function buildVectorStoreSettings(settings, defaults) {
6795
- return {
6796
- adapter: settings.vector_store.adapter ?? defaults.vector_store.adapter,
6797
- collection_name: normalizeVectorStoreCollectionName(settings.vector_store.collection_name),
6798
- qdrant: { ...defaults.vector_store.qdrant, ...settings.vector_store.qdrant },
6799
- lancedb: { ...defaults.vector_store.lancedb, ...settings.vector_store.lancedb }
6800
- };
6801
- }
6802
- function normalizeSettingsItemFormat(settings, defaults) {
6803
- if (settings.item_format === "json_markdown") {
6804
- return "toon";
6805
- }
6806
- return settings.item_format ?? defaults.item_format;
6807
- }
6808
- function buildContextSettings(settings, defaults) {
6809
- return {
6810
- default_depth: settings.context?.default_depth ?? defaults.context.default_depth,
6811
- activity_limit: settings.context?.activity_limit ?? defaults.context.activity_limit,
6812
- stale_threshold_days: settings.context?.stale_threshold_days ?? defaults.context.stale_threshold_days,
6813
- sections: {
6814
- ...defaults.context.sections,
6815
- ...settings.context?.sections
6816
- }
6817
- };
6818
- }
6819
- function buildProviderSettings(settings, defaults) {
6820
- return {
6821
- openai: { ...defaults.providers.openai, ...settings.providers.openai },
6822
- ollama: { ...defaults.providers.ollama, ...settings.providers.ollama }
6823
- };
6824
- }
6825
- function normalizeItemTypeDefinitions(definitions) {
6826
- const normalized = (definitions ?? []).map((definition) => normalizeItemTypeDefinition(definition)).filter((definition) => definition !== null);
6827
- const dedupedByName = /* @__PURE__ */ new Map();
6828
- for (const definition of normalized) {
6829
- dedupedByName.set(definition.name.toLowerCase(), definition);
6830
- }
6831
- return [...dedupedByName.values()].sort((left, right) => left.name.localeCompare(right.name));
6832
- }
6833
- function mergeSettings(settings) {
6834
- const defaults = cloneDefaults();
6835
- const governance = resolveGovernanceKnobs({
6836
- governance: settings.governance ?? { preset: "default" }
6837
- });
6838
- return {
6839
- ...defaults,
6840
- ...settings,
6841
- item_format: normalizeSettingsItemFormat(settings, defaults),
6842
- locks: { ...defaults.locks, ...settings.locks },
6843
- checkpoints: { ...defaults.checkpoints, ...settings.checkpoints },
6844
- output: { ...defaults.output, ...settings.output },
6845
- history: {
6846
- ...defaults.history,
6847
- ...settings.history,
6848
- compact_policy: {
6849
- ...defaults.history.compact_policy,
6850
- ...settings.history?.compact_policy
6851
- }
6852
- },
6853
- validation: buildValidationSettings(settings, defaults, governance),
6854
- governance,
6855
- workflow: {
6856
- definition_of_done: [...settings.workflow?.definition_of_done ?? defaults.workflow.definition_of_done]
6857
- },
6858
- testing: {
6859
- record_results_to_items: settings.testing?.record_results_to_items ?? defaults.testing.record_results_to_items
6860
- },
6861
- telemetry: buildTelemetrySettings(settings, defaults),
6862
- agent_guidance: normalizeAgentGuidanceSettings(settings.agent_guidance ?? defaults.agent_guidance),
6863
- item_types: {
6864
- definitions: normalizeItemTypeDefinitions(settings.item_types?.definitions)
6865
- },
6866
- schema: normalizeRuntimeSchemaSettings(settings.schema ?? defaults.schema),
6867
- context: buildContextSettings(settings, defaults),
6868
- extensions: {
6869
- enabled: [...settings.extensions.enabled],
6870
- disabled: [...settings.extensions.disabled],
6871
- policy: normalizeExtensionPolicySettings(settings.extensions.policy ?? defaults.extensions.policy)
6872
- },
6873
- search: buildSearchSettings(settings, defaults),
6874
- providers: buildProviderSettings(settings, defaults),
6875
- vector_store: buildVectorStoreSettings(settings, defaults)
6876
- };
6877
- }
6878
- function orderSerializedSettingsSections(ordered) {
6879
- ordered.locks = orderObject(ordered.locks, ["ttl_seconds"]);
6880
- ordered.checkpoints = orderObject(ordered.checkpoints, ["retention_days"]);
6881
- ordered.output = orderObject(ordered.output, ["default_format"]);
6882
- ordered.history = orderObject(ordered.history, ["missing_stream", "compact_policy"]);
6883
- ordered.validation = orderObject(ordered.validation, [
6884
- "sprint_release_format",
6885
- "parent_reference",
6886
- "metadata_profile",
6887
- "metadata_required_fields",
6888
- "lifecycle_stale_blocker_reason_patterns",
6889
- "lifecycle_closure_like_blocked_reason_patterns",
6890
- "lifecycle_closure_like_resolution_patterns",
6891
- "lifecycle_closure_like_actual_result_patterns",
6892
- "estimate_defaults_by_type"
6893
- ]);
6894
- ordered.governance = orderObject(ordered.governance, [
6895
- "preset",
6896
- "ownership_enforcement",
6897
- "create_mode_default",
6898
- "close_validation_default",
6899
- "require_close_reason",
6900
- "parent_reference",
6901
- "metadata_profile",
6902
- "force_required_for_stale_lock",
6903
- "create_default_type",
6904
- "workflow_enforcement"
6905
- ]);
6906
- ordered.workflow = orderObject(ordered.workflow, ["definition_of_done"]);
6907
- ordered.testing = orderObject(ordered.testing, ["record_results_to_items"]);
6908
- ordered.telemetry = orderObject(ordered.telemetry, [
6909
- "enabled",
6910
- "first_run_prompt_completed",
6911
- "capture_level",
6912
- "endpoint",
6913
- "installation_id",
6914
- "retention_days"
6915
- ]);
6916
- ordered.agent_guidance = orderObject(ordered.agent_guidance, [
6917
- "prompt_completed",
6918
- "declined",
6919
- "declined_at",
6920
- "template_version",
6921
- "last_checked_files"
6922
- ]);
6923
- ordered.item_types = orderObject(ordered.item_types, ["definitions"]);
6924
- ordered.schema = orderObject(ordered.schema, [
6925
- "version",
6926
- "files",
6927
- "statuses",
6928
- "fields",
6929
- "workflow",
6930
- "type_workflows",
6931
- "unknown_field_policy"
6932
- ]);
6933
- ordered.schema.files = orderObject(recordOrEmpty(ordered.schema.files), ["types", "statuses", "fields", "workflows"]);
6934
- ordered.schema.workflow = orderObject(recordOrEmpty(ordered.schema.workflow), ["draft_status", "open_status", "in_progress_status", "blocked_status", "close_status", "canceled_status"]);
6935
- ordered.context = orderObject(ordered.context, [
6936
- "default_depth",
6937
- "activity_limit",
6938
- "stale_threshold_days",
6939
- "sections"
6940
- ]);
6941
- ordered.context.sections = orderObject(recordOrEmpty(ordered.context.sections), ["hierarchy", "activity", "progress", "blockers", "files", "workload", "staleness", "tests"]);
6942
- ordered.extensions = orderObject(ordered.extensions, ["enabled", "disabled", "policy"]);
6943
- ordered.extensions.policy = orderObject(recordOrEmpty(ordered.extensions.policy), [
6944
- "mode",
6945
- "trust_mode",
6946
- "pm_max_version_exceeded_mode",
6947
- "require_provenance",
6948
- "trusted_extensions",
6949
- "default_sandbox_profile",
6950
- "allowed_extensions",
6951
- "blocked_extensions",
6952
- "allowed_capabilities",
6953
- "blocked_capabilities",
6954
- "allowed_surfaces",
6955
- "blocked_surfaces",
6956
- "allowed_commands",
6957
- "blocked_commands",
6958
- "allowed_actions",
6959
- "blocked_actions",
6960
- "allowed_services",
6961
- "blocked_services",
6962
- "extension_overrides"
6963
- ]);
6964
- ordered.extensions.policy.extension_overrides = arrayOrEmpty(ordered.extensions.policy.extension_overrides).map((entry) => orderObject(recordOrEmpty(entry), [
6965
- "name",
6966
- "disabled",
6967
- "require_trusted",
6968
- "require_provenance",
6969
- "sandbox_profile",
6970
- "allowed_capabilities",
6971
- "blocked_capabilities",
6972
- "allowed_surfaces",
6973
- "blocked_surfaces",
6974
- "allowed_commands",
6975
- "blocked_commands",
6976
- "allowed_actions",
6977
- "blocked_actions",
6978
- "allowed_services",
6979
- "blocked_services"
6980
- ]));
6981
- ordered.search = orderObject(ordered.search, [
6982
- "score_threshold",
6983
- "hybrid_semantic_weight",
6984
- "max_results",
6985
- "embedding_model",
6986
- "embedding_corpus_max_characters",
6987
- "embedding_batch_size",
6988
- "embedding_timeout_ms",
6989
- "scanner_max_batch_retries",
6990
- "provider",
6991
- "mutation_refresh_policy",
6992
- "query_expansion",
6993
- "rerank"
6994
- ]);
6995
- ordered.search.query_expansion = orderObject(recordOrEmpty(ordered.search.query_expansion), ["enabled", "provider"]);
6996
- ordered.search.rerank = orderObject(recordOrEmpty(ordered.search.rerank), ["enabled", "model", "top_k"]);
6997
- ordered.providers = orderObject(ordered.providers, ["openai", "ollama"]);
6998
- ordered.providers.openai = orderObject(recordOrEmpty(ordered.providers.openai), ["base_url", "api_key", "model"]);
6999
- ordered.providers.ollama = orderObject(recordOrEmpty(ordered.providers.ollama), ["base_url", "model"]);
7000
- ordered.vector_store = orderObject(ordered.vector_store, [
7001
- "adapter",
7002
- "collection_name",
7003
- "qdrant",
7004
- "lancedb"
7005
- ]);
7006
- ordered.vector_store.qdrant = orderObject(recordOrEmpty(ordered.vector_store.qdrant), ["url", "api_key"]);
7007
- ordered.vector_store.lancedb = orderObject(recordOrEmpty(ordered.vector_store.lancedb), ["path"]);
7008
- }
7009
- function buildSerializeBaseSettings(settings) {
7010
- return {
7011
- ...settings,
7012
- locks: valueOrDefault(settings.locks, SETTINGS_DEFAULTS.locks),
7013
- checkpoints: valueOrDefault(settings.checkpoints, SETTINGS_DEFAULTS.checkpoints),
7014
- output: valueOrDefault(settings.output, SETTINGS_DEFAULTS.output),
7015
- history: valueOrDefault(settings.history, SETTINGS_DEFAULTS.history),
7016
- validation: valueOrDefault(settings.validation, SETTINGS_DEFAULTS.validation),
7017
- workflow: valueOrDefault(settings.workflow, SETTINGS_DEFAULTS.workflow),
7018
- testing: valueOrDefault(settings.testing, SETTINGS_DEFAULTS.testing),
7019
- telemetry: valueOrDefault(settings.telemetry, SETTINGS_DEFAULTS.telemetry),
7020
- agent_guidance: valueOrDefault(settings.agent_guidance, SETTINGS_DEFAULTS.agent_guidance),
7021
- item_types: valueOrDefault(settings.item_types, SETTINGS_DEFAULTS.item_types),
7022
- schema: valueOrDefault(settings.schema, SETTINGS_DEFAULTS.schema),
7023
- context: valueOrDefault(settings.context, SETTINGS_DEFAULTS.context),
7024
- extensions: valueOrDefault(settings.extensions, SETTINGS_DEFAULTS.extensions),
7025
- search: valueOrDefault(settings.search, SETTINGS_DEFAULTS.search),
7026
- providers: valueOrDefault(settings.providers, SETTINGS_DEFAULTS.providers),
7027
- vector_store: valueOrDefault(settings.vector_store, SETTINGS_DEFAULTS.vector_store)
7028
- };
7029
- }
7030
- function buildSerializedValidationSettings(baseSettings, governance) {
7031
- return {
7032
- ...baseSettings.validation,
7033
- parent_reference: governance.parent_reference,
7034
- metadata_profile: governance.metadata_profile,
7035
- metadata_required_fields: normalizeValidationMetadataRequiredFields(baseSettings.validation?.metadata_required_fields),
7036
- lifecycle_stale_blocker_reason_patterns: normalizeValidationPatternList(baseSettings.validation?.lifecycle_stale_blocker_reason_patterns ?? SETTINGS_DEFAULTS.validation.lifecycle_stale_blocker_reason_patterns),
7037
- lifecycle_closure_like_blocked_reason_patterns: normalizeValidationPatternList(baseSettings.validation?.lifecycle_closure_like_blocked_reason_patterns ?? SETTINGS_DEFAULTS.validation.lifecycle_closure_like_blocked_reason_patterns),
7038
- lifecycle_closure_like_resolution_patterns: normalizeValidationPatternList(baseSettings.validation?.lifecycle_closure_like_resolution_patterns ?? SETTINGS_DEFAULTS.validation.lifecycle_closure_like_resolution_patterns),
7039
- lifecycle_closure_like_actual_result_patterns: normalizeValidationPatternList(baseSettings.validation?.lifecycle_closure_like_actual_result_patterns ?? SETTINGS_DEFAULTS.validation.lifecycle_closure_like_actual_result_patterns),
7040
- estimate_defaults_by_type: normalizeEstimateDefaultOverrides(baseSettings.validation?.estimate_defaults_by_type)
7041
- };
7042
- }
7043
- function buildSerializedSearchSettings(baseSettings) {
7044
- return {
7045
- ...SETTINGS_DEFAULTS.search,
7046
- ...baseSettings.search,
7047
- mutation_refresh_policy: normalizeSearchMutationRefreshPolicy(baseSettings.search?.mutation_refresh_policy),
7048
- query_expansion: {
7049
- ...SETTINGS_DEFAULTS.search.query_expansion,
7050
- ...baseSettings.search?.query_expansion,
7051
- enabled: normalizeSearchQueryExpansionEnabled(baseSettings.search?.query_expansion?.enabled),
7052
- provider: normalizeSearchQueryExpansionProvider(baseSettings.search?.query_expansion?.provider)
7053
- },
7054
- rerank: {
7055
- ...SETTINGS_DEFAULTS.search.rerank,
7056
- ...baseSettings.search?.rerank,
7057
- enabled: normalizeSearchRerankEnabled(baseSettings.search?.rerank?.enabled),
7058
- model: normalizeSearchRerankModel(baseSettings.search?.rerank?.model),
7059
- top_k: normalizeSearchRerankTopK(baseSettings.search?.rerank?.top_k)
7060
- }
7061
- };
7062
- }
7063
- function buildSerializedContextSettings(baseSettings) {
7064
- return {
7065
- default_depth: baseSettings.context?.default_depth ?? SETTINGS_DEFAULTS.context.default_depth,
7066
- activity_limit: baseSettings.context?.activity_limit ?? SETTINGS_DEFAULTS.context.activity_limit,
7067
- stale_threshold_days: baseSettings.context?.stale_threshold_days ?? SETTINGS_DEFAULTS.context.stale_threshold_days,
7068
- sections: {
7069
- ...SETTINGS_DEFAULTS.context.sections,
7070
- ...baseSettings.context?.sections
7071
- }
7072
- };
7073
- }
7074
- function buildSerializedVectorStoreSettings(baseSettings) {
7075
- return {
7076
- ...baseSettings.vector_store,
7077
- adapter: baseSettings.vector_store?.adapter ?? SETTINGS_DEFAULTS.vector_store.adapter,
7078
- collection_name: normalizeVectorStoreCollectionName(baseSettings.vector_store?.collection_name),
7079
- qdrant: { ...baseSettings.vector_store?.qdrant },
7080
- lancedb: { ...baseSettings.vector_store?.lancedb }
7081
- };
7082
- }
7083
- function buildNormalizedSettingsForSerialization(baseSettings, governance, normalizedSchema, persistedFileBackedSections) {
7084
- return {
7085
- ...baseSettings,
7086
- item_format: "toon",
7087
- validation: buildSerializedValidationSettings(baseSettings, governance),
7088
- governance,
7089
- agent_guidance: normalizeAgentGuidanceSettings(baseSettings.agent_guidance),
7090
- item_types: {
7091
- definitions: persistedFileBackedSections.item_type_definitions
7092
- },
7093
- schema: {
7094
- ...normalizedSchema,
7095
- statuses: persistedFileBackedSections.schema_statuses,
7096
- fields: persistedFileBackedSections.schema_fields,
7097
- type_workflows: persistedFileBackedSections.schema_type_workflows
7098
- },
7099
- search: buildSerializedSearchSettings(baseSettings),
7100
- context: buildSerializedContextSettings(baseSettings),
7101
- extensions: {
7102
- enabled: normalizeStringList2(baseSettings.extensions?.enabled),
7103
- disabled: normalizeStringList2(baseSettings.extensions?.disabled),
7104
- policy: normalizeExtensionPolicySettings(baseSettings.extensions?.policy)
7105
- },
7106
- vector_store: buildSerializedVectorStoreSettings(baseSettings)
7107
- };
7108
- }
7109
- function serializeSettings(settings, options = {}) {
7110
- const baseSettings = buildSerializeBaseSettings(settings);
7111
- const governance = resolveGovernanceKnobs(baseSettings);
7112
- const normalizedSchema = normalizeRuntimeSchemaSettings(baseSettings.schema);
7113
- const persistedFileBackedSections = resolvePersistedFileBackedSchemaSections(baseSettings, options.persist_source);
7114
- const normalizedSettings = buildNormalizedSettingsForSerialization(baseSettings, governance, normalizedSchema, persistedFileBackedSections);
7115
- const ordered = orderObject({
7116
- ...normalizedSettings,
7117
- governance: normalizeGovernanceForPersist(governance)
7118
- }, [
7119
- "version",
7120
- "id_prefix",
7121
- "author_default",
7122
- "item_format",
7123
- "locks",
7124
- "checkpoints",
7125
- "output",
7126
- "history",
7127
- "validation",
7128
- "governance",
7129
- "workflow",
7130
- "testing",
7131
- "telemetry",
7132
- "agent_guidance",
7133
- "item_types",
7134
- "schema",
7135
- "context",
7136
- "extensions",
7137
- "search",
7138
- "providers",
7139
- "vector_store"
7140
- ]);
7141
- orderSerializedSettingsSections(ordered);
7142
- return `${JSON.stringify(ordered, null, 2)}
7143
- `;
7144
- }
7145
- async function readSettingsWithMetadata(pmRoot) {
7146
- const settingsPath = getSettingsPath(pmRoot);
7147
- let trackedPathsForFailure = [settingsPath];
7148
- await runActiveOnReadHooks({
7149
- path: settingsPath,
7150
- scope: "project"
7151
- });
7152
- const cachedResult = getSettingsReadCacheEntry(pmRoot);
7153
- if (cachedResult) {
7154
- const currentSignatures = await collectSettingsReadCacheSignatures(cachedResult.tracked_paths);
7155
- if (settingsReadCacheSignaturesEqual(currentSignatures, cachedResult.signatures)) {
7156
- return cloneSettingsReadResult(cachedResult.value);
7157
- }
7158
- }
7159
- const settingsOnlySignatures = await collectSettingsReadCacheSignatures([settingsPath]);
7160
- const raw = await readFileIfExists(settingsPath);
7161
- if (raw === null) {
7162
- const fallback = buildFallbackSettingsReadResult();
7163
- await cacheSettingsReadResultIfStable(pmRoot, [settingsPath], fallback, settingsOnlySignatures, [settingsPath]);
7164
- return fallback;
7165
- }
7166
- const settingsSignaturesAfterRead = await collectSettingsReadCacheSignatures([settingsPath]);
7167
- if (!settingsReadCacheSignaturesEqual(settingsOnlySignatures, settingsSignaturesAfterRead)) {
7168
- clearSettingsReadCache(pmRoot);
7169
- return readSettingsWithMetadata(pmRoot);
7170
- }
7171
- let parsed;
7172
- try {
7173
- parsed = JSON.parse(raw);
7174
- } catch {
7175
- const fallback = buildFallbackSettingsReadResult("settings_read_invalid_json");
7176
- await cacheSettingsReadResultIfStable(pmRoot, [settingsPath], fallback, settingsSignaturesAfterRead, [settingsPath]);
7177
- return fallback;
7178
- }
7179
- const validated = validateSettings(parsed);
7180
- if (!validated.success) {
7181
- const fallback = buildFallbackSettingsReadResult("settings_read_invalid_schema");
7182
- await cacheSettingsReadResultIfStable(pmRoot, [settingsPath], fallback, settingsSignaturesAfterRead, [settingsPath]);
7183
- return fallback;
7184
- }
7185
- try {
7186
- const mergedSettings = mergeSettings(validated.data);
7187
- const trackedPaths = resolveSettingsReadTrackedPaths(pmRoot, mergedSettings.schema, settingsPath);
7188
- trackedPathsForFailure = trackedPaths;
7189
- const signaturesBeforeSchemaLoad = await collectSettingsReadCacheSignatures(trackedPaths);
7190
- const schemaScaffold = await ensureRuntimeSchemaFileScaffold(pmRoot, mergedSettings.schema);
7191
- const loadedSchemaSections = await loadRuntimeSchemaFromOptionalFiles(pmRoot, mergedSettings.schema);
7192
- const signaturesAfterSchemaLoad = await collectSettingsReadCacheSignatures(trackedPaths);
7193
- const settings = {
7194
- ...mergedSettings,
7195
- item_types: {
7196
- definitions: normalizeItemTypeDefinitions([
7197
- ...mergedSettings.item_types.definitions,
7198
- ...arrayOrEmpty(loadedSchemaSections.type_definitions_from_file)
7199
- ])
7200
- },
7201
- schema: loadedSchemaSections.schema
7202
- };
7203
- attachSettingsPersistSourceSnapshot(settings, buildSettingsPersistSourceSnapshot(validated.data, settings));
7204
- const result = {
7205
- settings,
7206
- metadata: {
7207
- has_explicit_item_format: hasExplicitItemFormat(parsed)
7208
- },
7209
- warnings: [
7210
- ...validated.data.item_format === "json_markdown" ? ["settings_item_format_legacy_json_markdown_coerced_to_toon"] : [],
7211
- ...schemaScaffold.created_paths.map((createdPath) => `runtime_schema_bootstrap_created:${createdPath}`),
7212
- ...loadedSchemaSections.warnings
7213
- ]
7214
- };
7215
- if (schemaScaffold.created_paths.length === 0) {
7216
- if (!settingsReadCacheSignaturesEqual(signaturesBeforeSchemaLoad, signaturesAfterSchemaLoad)) {
7217
- clearSettingsReadCache(pmRoot);
7218
- } else {
7219
- setSettingsReadCacheEntry(pmRoot, {
7220
- tracked_paths: trackedPaths,
7221
- signatures: signaturesAfterSchemaLoad,
7222
- value: cloneSettingsReadResult(result)
7223
- });
7224
- }
7225
- } else {
7226
- clearSettingsReadCache(pmRoot);
7227
- }
7228
- return result;
7229
- } catch {
7230
- const fallback = buildFallbackSettingsReadResult("settings_read_merge_failed");
7231
- await cacheSettingsReadResultSafe(pmRoot, trackedPathsForFailure, fallback);
7232
- return fallback;
7233
- }
7234
- }
7235
- async function readSettings(pmRoot) {
7236
- return (await readSettingsWithMetadata(pmRoot)).settings;
7237
- }
7238
- async function writeSettings(pmRoot, settings, op = SETTINGS_WRITE_OP) {
7239
- const settingsPath = getSettingsPath(pmRoot);
7240
- await writeFileAtomic(settingsPath, serializeSettings(settings, {
7241
- persist_source: getSettingsPersistSourceSnapshot(settings)
7242
- }));
7243
- try {
7244
- await runActiveOnWriteHooks({
7245
- path: settingsPath,
7246
- scope: "project",
7247
- op
7248
- });
7249
- } finally {
7250
- clearSettingsReadCache(pmRoot);
7251
- }
7252
- }
7253
-
7254
5484
  export {
7255
5485
  ensureDir,
7256
5486
  pathExists,
@@ -7261,13 +5491,17 @@ export {
7261
5491
  isPathWithinDirectory,
7262
5492
  resolvePmPackageRootFromModule,
7263
5493
  resolvePmCliVersion,
5494
+ resolveConfiguredPmPackageRoot,
7264
5495
  KNOWN_EXTENSION_CAPABILITIES,
5496
+ EXTENSION_CAPABILITY_CONTRACT_VERSION,
5497
+ EXTENSION_CAPABILITY_LEGACY_ALIASES,
7265
5498
  EXTENSION_CAPABILITY_CONTRACT,
7266
5499
  KNOWN_EXTENSION_POLICY_MODES,
7267
5500
  KNOWN_EXTENSION_TRUST_MODES,
7268
5501
  KNOWN_EXTENSION_SANDBOX_PROFILES,
7269
5502
  KNOWN_EXTENSION_POLICY_SURFACES,
7270
5503
  KNOWN_EXTENSION_SERVICE_NAMES,
5504
+ createDefaultExtensionGovernancePolicy,
7271
5505
  PM_DIRNAME,
7272
5506
  CREATE_DIRECT_CLOSE_REASON_DEFAULT,
7273
5507
  PM_CORE_REQUIRED_SUBDIRS,
@@ -7283,15 +5517,18 @@ export {
7283
5517
  EXIT_CODE,
7284
5518
  resolveTelemetryErrorCategory,
7285
5519
  BUILTIN_ITEM_TYPE_VALUES,
5520
+ ITEM_TYPE_VALUES,
7286
5521
  STATUS_VALUES,
7287
5522
  RUNTIME_STATUS_ROLE_VALUES,
7288
5523
  RUNTIME_FIELD_TYPE_VALUES,
7289
5524
  RUNTIME_FIELD_COMMAND_VALUES,
5525
+ RUNTIME_UNKNOWN_FIELD_POLICY_VALUES,
7290
5526
  DEPENDENCY_KIND_VALUES,
7291
5527
  SCOPE_VALUES,
7292
5528
  RISK_VALUES,
7293
5529
  ISSUE_SEVERITY_VALUES,
7294
5530
  CONFIDENCE_TEXT_VALUES,
5531
+ GOVERNANCE_PRESET_VALUES,
7295
5532
  RECURRENCE_FREQUENCY_VALUES,
7296
5533
  RECURRENCE_WEEKDAY_VALUES,
7297
5534
  weekdayOrderIndex,
@@ -7301,6 +5538,8 @@ export {
7301
5538
  PLAN_STEP_LINK_KIND_VALUES,
7302
5539
  CONTEXT_DEPTH_VALUES,
7303
5540
  CONTEXT_SECTION_VALUES,
5541
+ normalizeItemTypeDefinition,
5542
+ COMMON_MUTATION_COMMAND_OPTION_KEYS,
7304
5543
  canonicalizeCommandOptionKey,
7305
5544
  commandOptionFlagLabel,
7306
5545
  toDefaultFolder,
@@ -7335,71 +5574,57 @@ export {
7335
5574
  coercePositiveInteger,
7336
5575
  coerceNumberInRange,
7337
5576
  asRecordOrNull,
5577
+ asPropertyRecord,
5578
+ resolveActivatablePropertyRecord,
7338
5579
  resolveFlagValueKind,
7339
5580
  flattenFlagListValue,
7340
5581
  levenshteinDistanceWithinLimit,
7341
5582
  normalizeItemFieldType,
5583
+ evaluatePmMinVersionBound,
5584
+ evaluatePmMaxVersionBound,
5585
+ normalizeKnownExtensionCapability,
5586
+ resolveLegacyExtensionCapabilityAlias,
7342
5587
  parseUnknownExtensionCapabilityWarning,
7343
5588
  parseLegacyExtensionCapabilityAliasWarning,
5589
+ normalizeCommandName,
7344
5590
  createEmptyExtensionRegistrationRegistry,
7345
5591
  runBeforeCommandHooks,
7346
5592
  runAfterCommandHooks,
5593
+ runOnWriteHooks,
5594
+ runOnReadHooks,
5595
+ runOnIndexHooks,
5596
+ runCommandHandler,
5597
+ runParserOverride,
5598
+ runPreflightOverride,
5599
+ runServiceOverrideSync,
5600
+ runServiceOverride,
5601
+ runCommandOverride,
5602
+ runRendererOverride,
5603
+ DEFAULT_EXTENSION_PRIORITY,
7347
5604
  nextExtensionReloadToken,
5605
+ isCanonicalPathWithinDirectory,
7348
5606
  resolveExtensionRoots,
7349
5607
  discoverExtensions,
7350
5608
  loadExtensions,
5609
+ deactivateExtensions,
7351
5610
  activateExtensions,
5611
+ EXTENSION_CAPABILITY_REGISTRATION_SURFACES,
7352
5612
  normalizeExtensionName,
7353
5613
  collectUsedExtensionCapabilities,
7354
5614
  reconcileExtensionCapabilityUsage,
7355
- setActiveExtensionHooks,
7356
- setActiveExtensionCommands,
7357
- setActiveExtensionParsers,
7358
- setActiveExtensionPreflight,
7359
- setActiveExtensionServices,
7360
- setActiveExtensionRenderers,
7361
- setActiveExtensionRegistrations,
7362
- getActiveExtensionRegistrations,
7363
- setActiveCommandContext,
7364
- setActiveCommandResult,
7365
- getActiveCommandResult,
7366
- recordAfterCommandAffectedItem,
7367
- projectAfterCommandItemSnapshot,
7368
- consumeAfterCommandAffectedItems,
7369
- clearActiveExtensionHooks,
7370
- runActiveOnWriteHooks,
7371
- runActiveOnReadHooks,
7372
- hasActiveOnReadHooks,
7373
- runActiveOnIndexHooks,
7374
- runActiveCommandOverride,
7375
- runActiveCommandHandler,
7376
- runActiveParserOverride,
7377
- runActivePreflightOverride,
7378
- runActiveRendererOverride,
7379
- runActiveServiceOverride,
7380
- runActiveServiceOverrideSync,
7381
5615
  DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,
7382
5616
  DEFAULT_RUNTIME_STATUS_DEFINITIONS,
7383
5617
  normalizeRuntimeSchemaSettings,
7384
5618
  filePathForSchemaSection,
7385
5619
  resolveItemTypesFilePath,
7386
5620
  ensureRuntimeSchemaFileScaffold,
5621
+ loadRuntimeSchemaFromOptionalFiles,
7387
5622
  resolveRuntimeStatusRegistry,
7388
5623
  normalizeStatusInputWithRegistry,
7389
5624
  resolveRuntimeFieldRegistry,
7390
5625
  runtimeFieldOptionTarget,
7391
- statusIsTerminal,
7392
- PmCliError,
7393
- stableStringify,
7394
- stableValueEquals,
7395
- sha256Hex,
7396
- orderObject,
7397
- resolveEstimateDefaultMinutes,
7398
- resolveGovernanceKnobs,
7399
- readSettingsWithMetadata,
7400
- readSettings,
7401
- writeSettings
5626
+ statusIsTerminal
7402
5627
  };
7403
- //# sourceMappingURL=chunk-L4SLHV6G.js.map
5628
+ //# sourceMappingURL=chunk-YD5FML7K.js.map
7404
5629
 
7405
- //# debugId=aeaf9c80-302b-561b-892d-b98b811d424b
5630
+ //# debugId=b82b3892-108d-51df-a033-47913481d9b1