@unbrained/pm-cli 2026.7.6 → 2026.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (666) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/cli/commands/annotation-command.d.ts +1 -0
  3. package/dist/cli/commands/annotation-command.js +29 -2
  4. package/dist/cli/commands/annotation-command.js.map +1 -1
  5. package/dist/cli/commands/comments.js +3 -4
  6. package/dist/cli/commands/comments.js.map +1 -1
  7. package/dist/cli/commands/extension/bundled-catalog.d.ts +3 -0
  8. package/dist/cli/commands/extension/bundled-catalog.js +38 -28
  9. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  10. package/dist/cli/commands/extension/install-sources.js +81 -18
  11. package/dist/cli/commands/extension/install-sources.js.map +1 -1
  12. package/dist/cli/commands/health.js +9 -5
  13. package/dist/cli/commands/health.js.map +1 -1
  14. package/dist/cli/commands/learnings.js +5 -3
  15. package/dist/cli/commands/learnings.js.map +1 -1
  16. package/dist/cli/commands/notes.js +5 -3
  17. package/dist/cli/commands/notes.js.map +1 -1
  18. package/dist/cli/commands/reindex.js +4 -3
  19. package/dist/cli/commands/reindex.js.map +1 -1
  20. package/dist/cli/commands/search.js +3 -3
  21. package/dist/cli/commands/search.js.map +1 -1
  22. package/dist/cli/commands/test.d.ts +9 -0
  23. package/dist/cli/commands/test.js +144 -105
  24. package/dist/cli/commands/test.js.map +1 -1
  25. package/dist/cli/extension-command-help.js +10 -2
  26. package/dist/cli/extension-command-help.js.map +1 -1
  27. package/dist/cli/register-list-query.d.ts +1 -1
  28. package/dist/cli/register-list-query.js +18 -27
  29. package/dist/cli/register-list-query.js.map +1 -1
  30. package/dist/cli/register-operations.d.ts +0 -8
  31. package/dist/cli/register-operations.js +41 -46
  32. package/dist/cli/register-operations.js.map +1 -1
  33. package/dist/cli/register-setup.js +113 -13
  34. package/dist/cli/register-setup.js.map +1 -1
  35. package/dist/cli/registration-helpers.d.ts +5 -1
  36. package/dist/cli/registration-helpers.js +14 -2
  37. package/dist/cli/registration-helpers.js.map +1 -1
  38. package/dist/cli-bundle/chunks/append-F7WPGIQL.js +11 -0
  39. package/dist/cli-bundle/chunks/{gc-2DNMPXMC.js → append-PVCTBVJG.js} +8 -9
  40. package/dist/cli-bundle/chunks/{chunk-EGAP5OWD.js → chunk-2APXX4TZ.js} +16 -14
  41. package/dist/cli-bundle/chunks/chunk-2APXX4TZ.js.map +1 -0
  42. package/dist/cli-bundle/chunks/{chunk-R5BMJX33.js → chunk-2LEJGRQ7.js} +2 -2
  43. package/dist/cli-bundle/chunks/{chunk-AZYGZGGI.js → chunk-2TILG6F2.js} +3 -3
  44. package/dist/cli-bundle/chunks/{chunk-SMB7RV23.js → chunk-3G6UMXT3.js} +6 -8
  45. package/dist/cli-bundle/chunks/{chunk-SMB7RV23.js.map → chunk-3G6UMXT3.js.map} +1 -1
  46. package/dist/cli-bundle/chunks/{chunk-GJ7QC5DJ.js → chunk-3TYOW6RR.js} +8 -8
  47. package/dist/cli-bundle/chunks/{chunk-B6DUFX6H.js → chunk-3X542TEY.js} +7 -7
  48. package/dist/cli-bundle/chunks/{chunk-B6XS3R3O.js → chunk-42LXP4VO.js} +12 -16
  49. package/dist/cli-bundle/chunks/{chunk-B6XS3R3O.js.map → chunk-42LXP4VO.js.map} +1 -1
  50. package/dist/cli-bundle/chunks/{chunk-CL36D4PC.js → chunk-43SIHQND.js} +36 -15
  51. package/dist/cli-bundle/chunks/chunk-43SIHQND.js.map +7 -0
  52. package/dist/cli-bundle/chunks/{chunk-7D7OOEYG.js → chunk-43UQN754.js} +10 -14
  53. package/dist/cli-bundle/chunks/{chunk-7D7OOEYG.js.map → chunk-43UQN754.js.map} +1 -1
  54. package/dist/cli-bundle/chunks/{chunk-ALFPSEWO.js → chunk-43YSKY75.js} +4 -6
  55. package/dist/cli-bundle/chunks/{chunk-ALFPSEWO.js.map → chunk-43YSKY75.js.map} +1 -1
  56. package/dist/cli-bundle/chunks/{chunk-NO442GWJ.js → chunk-4BKDAEDF.js} +5 -5
  57. package/dist/cli-bundle/chunks/{chunk-NO442GWJ.js.map → chunk-4BKDAEDF.js.map} +2 -2
  58. package/dist/cli-bundle/chunks/{chunk-4LELACOL.js → chunk-4IQKDKGE.js} +15 -23
  59. package/dist/cli-bundle/chunks/{chunk-4LELACOL.js.map → chunk-4IQKDKGE.js.map} +1 -1
  60. package/dist/cli-bundle/chunks/{chunk-F3K4JGFD.js → chunk-4MZOKTI2.js} +6 -8
  61. package/dist/cli-bundle/chunks/{chunk-F3K4JGFD.js.map → chunk-4MZOKTI2.js.map} +1 -1
  62. package/dist/cli-bundle/chunks/{chunk-D2XRLB55.js → chunk-52NS7JDP.js} +14 -20
  63. package/dist/cli-bundle/chunks/{chunk-D2XRLB55.js.map → chunk-52NS7JDP.js.map} +1 -1
  64. package/dist/cli-bundle/chunks/{chunk-IX5BXEMX.js → chunk-565WYS5W.js} +12 -16
  65. package/dist/cli-bundle/chunks/{chunk-IX5BXEMX.js.map → chunk-565WYS5W.js.map} +1 -1
  66. package/dist/cli-bundle/chunks/{chunk-UH7T2DAX.js → chunk-5FIQ4EX3.js} +12 -18
  67. package/dist/cli-bundle/chunks/{chunk-UH7T2DAX.js.map → chunk-5FIQ4EX3.js.map} +1 -1
  68. package/dist/cli-bundle/chunks/{chunk-DMRNBQOI.js → chunk-6G6O3OPQ.js} +256 -36
  69. package/dist/cli-bundle/chunks/chunk-6G6O3OPQ.js.map +1 -0
  70. package/dist/cli-bundle/chunks/{chunk-G64OCSKU.js → chunk-6LCJRGPD.js} +9 -13
  71. package/dist/cli-bundle/chunks/{chunk-G64OCSKU.js.map → chunk-6LCJRGPD.js.map} +1 -1
  72. package/dist/cli-bundle/chunks/{chunk-7WBAJSS6.js → chunk-6UQCNWFV.js} +6 -8
  73. package/dist/cli-bundle/chunks/{chunk-7WBAJSS6.js.map → chunk-6UQCNWFV.js.map} +1 -1
  74. package/dist/cli-bundle/chunks/{chunk-ZSUS2OD3.js → chunk-6XTSYPPO.js} +1216 -387
  75. package/dist/cli-bundle/chunks/chunk-6XTSYPPO.js.map +7 -0
  76. package/dist/cli-bundle/chunks/chunk-7ML7JONU.js +5434 -0
  77. package/dist/cli-bundle/chunks/chunk-7ML7JONU.js.map +1 -0
  78. package/dist/cli-bundle/chunks/{chunk-ZZD4J5XY.js → chunk-7PNQA24K.js} +30 -36
  79. package/dist/cli-bundle/chunks/{chunk-ZZD4J5XY.js.map → chunk-7PNQA24K.js.map} +1 -1
  80. package/dist/cli-bundle/chunks/{chunk-JJP45OEI.js → chunk-7VQ3JJN5.js} +2 -2
  81. package/dist/cli-bundle/chunks/{chunk-OGWQ2IEP.js → chunk-7Y5N34HX.js} +8 -12
  82. package/dist/cli-bundle/chunks/{chunk-OGWQ2IEP.js.map → chunk-7Y5N34HX.js.map} +1 -1
  83. package/dist/cli-bundle/chunks/{chunk-MWMVPCIE.js → chunk-AGAVEDIE.js} +7 -7
  84. package/dist/cli-bundle/chunks/{chunk-22KBU3MW.js → chunk-AJUON7E6.js} +3 -3
  85. package/dist/cli-bundle/chunks/{chunk-ZJ262CED.js → chunk-ARKHKYYS.js} +13 -21
  86. package/dist/cli-bundle/chunks/{chunk-ZJ262CED.js.map → chunk-ARKHKYYS.js.map} +1 -1
  87. package/dist/cli-bundle/chunks/{chunk-46CUF5L6.js → chunk-C5ACVMOI.js} +99 -51
  88. package/dist/cli-bundle/chunks/chunk-C5ACVMOI.js.map +7 -0
  89. package/dist/cli-bundle/chunks/{chunk-LPSSSDJR.js → chunk-CJQM7O7R.js} +16 -20
  90. package/dist/cli-bundle/chunks/{chunk-LPSSSDJR.js.map → chunk-CJQM7O7R.js.map} +1 -1
  91. package/dist/cli-bundle/chunks/{chunk-GBAX2ZAQ.js → chunk-D2DCTFTL.js} +10 -12
  92. package/dist/cli-bundle/chunks/{chunk-GBAX2ZAQ.js.map → chunk-D2DCTFTL.js.map} +1 -1
  93. package/dist/cli-bundle/chunks/{chunk-XHET7YUZ.js → chunk-DDDWVPID.js} +8 -10
  94. package/dist/cli-bundle/chunks/{chunk-XHET7YUZ.js.map → chunk-DDDWVPID.js.map} +1 -1
  95. package/dist/cli-bundle/chunks/{chunk-HIHMT6WS.js → chunk-DG6BSXZ7.js} +5 -5
  96. package/dist/cli-bundle/chunks/{chunk-HIHMT6WS.js.map → chunk-DG6BSXZ7.js.map} +2 -2
  97. package/dist/cli-bundle/chunks/{chunk-IWVU4C2F.js → chunk-DR2V5OIV.js} +3 -3
  98. package/dist/cli-bundle/chunks/{chunk-ZGK4L4JM.js → chunk-E3LWJUGF.js} +4 -6
  99. package/dist/cli-bundle/chunks/{chunk-ZGK4L4JM.js.map → chunk-E3LWJUGF.js.map} +1 -1
  100. package/dist/cli-bundle/chunks/{chunk-XUC7PI2H.js → chunk-E3YQFSFE.js} +6 -10
  101. package/dist/cli-bundle/chunks/{chunk-XUC7PI2H.js.map → chunk-E3YQFSFE.js.map} +1 -1
  102. package/dist/cli-bundle/chunks/{chunk-XG625QP4.js → chunk-EDO7VXSO.js} +2 -2
  103. package/dist/cli-bundle/chunks/{chunk-MA4SM3QZ.js → chunk-EIUBK2LT.js} +12 -18
  104. package/dist/cli-bundle/chunks/{chunk-MA4SM3QZ.js.map → chunk-EIUBK2LT.js.map} +1 -1
  105. package/dist/cli-bundle/chunks/{chunk-YN7Y6DQZ.js → chunk-EMXPI36L.js} +14 -20
  106. package/dist/cli-bundle/chunks/{chunk-YN7Y6DQZ.js.map → chunk-EMXPI36L.js.map} +1 -1
  107. package/dist/cli-bundle/chunks/{chunk-MLIYFOE7.js → chunk-EOUVR7JN.js} +12 -8
  108. package/dist/cli-bundle/chunks/chunk-EOUVR7JN.js.map +1 -0
  109. package/dist/cli-bundle/chunks/{chunk-Y4M7CPQP.js → chunk-EVEPHNXJ.js} +4 -4
  110. package/dist/cli-bundle/chunks/{chunk-M7JNBQAD.js → chunk-F6MT7KKE.js} +4 -6
  111. package/dist/cli-bundle/chunks/{chunk-M7JNBQAD.js.map → chunk-F6MT7KKE.js.map} +1 -1
  112. package/dist/cli-bundle/chunks/{chunk-W3DSJQIO.js → chunk-F6YC2A6X.js} +7 -11
  113. package/dist/cli-bundle/chunks/{chunk-W3DSJQIO.js.map → chunk-F6YC2A6X.js.map} +1 -1
  114. package/dist/cli-bundle/chunks/chunk-FILL6BB2.js +5514 -0
  115. package/dist/cli-bundle/chunks/chunk-FILL6BB2.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-JDDLOQAE.js → chunk-FN6SB4HU.js} +2 -2
  117. package/dist/cli-bundle/chunks/chunk-GH73UOSJ.js +5359 -0
  118. package/dist/cli-bundle/chunks/chunk-GH73UOSJ.js.map +1 -0
  119. package/dist/cli-bundle/chunks/{chunk-EKFNL33R.js → chunk-GLS6VMWI.js} +37 -16
  120. package/dist/cli-bundle/chunks/chunk-GLS6VMWI.js.map +1 -0
  121. package/dist/cli-bundle/chunks/{chunk-HOVCGJSD.js → chunk-GPIDUMMN.js} +9 -11
  122. package/dist/cli-bundle/chunks/{chunk-HOVCGJSD.js.map → chunk-GPIDUMMN.js.map} +1 -1
  123. package/dist/cli-bundle/chunks/{chunk-SQOIV3OQ.js → chunk-GTM5HQL4.js} +11 -15
  124. package/dist/cli-bundle/chunks/{chunk-SQOIV3OQ.js.map → chunk-GTM5HQL4.js.map} +1 -1
  125. package/dist/cli-bundle/chunks/{chunk-24YG75HI.js → chunk-H2SMKL2N.js} +8 -8
  126. package/dist/cli-bundle/chunks/{chunk-QLMX7SRD.js → chunk-HHEWQXPD.js} +6 -6
  127. package/dist/cli-bundle/chunks/chunk-HHEWQXPD.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-EGY6JBQ3.js → chunk-HX6QXV5P.js} +2 -2
  129. package/dist/cli-bundle/chunks/{chunk-4ZBE5GUN.js → chunk-I74FMIWA.js} +10 -16
  130. package/dist/cli-bundle/chunks/{chunk-4ZBE5GUN.js.map → chunk-I74FMIWA.js.map} +1 -1
  131. package/dist/cli-bundle/chunks/{chunk-3N6RRO2Q.js → chunk-IDIBF4E2.js} +20 -24
  132. package/dist/cli-bundle/chunks/{chunk-3N6RRO2Q.js.map → chunk-IDIBF4E2.js.map} +1 -1
  133. package/dist/cli-bundle/chunks/{chunk-6QBJLYBP.js → chunk-II7R6KD4.js} +8 -7
  134. package/dist/cli-bundle/chunks/{chunk-6QBJLYBP.js.map → chunk-II7R6KD4.js.map} +1 -1
  135. package/dist/cli-bundle/chunks/chunk-J2VGADNG.js +10320 -0
  136. package/dist/cli-bundle/chunks/chunk-J2VGADNG.js.map +1 -0
  137. package/dist/cli-bundle/chunks/{chunk-FT3QTERD.js → chunk-J7BOLHAV.js} +5 -7
  138. package/dist/cli-bundle/chunks/{chunk-FT3QTERD.js.map → chunk-J7BOLHAV.js.map} +1 -1
  139. package/dist/cli-bundle/chunks/{chunk-GANUTS7W.js → chunk-KTGJ2CBU.js} +4 -6
  140. package/dist/cli-bundle/chunks/{chunk-GANUTS7W.js.map → chunk-KTGJ2CBU.js.map} +1 -1
  141. package/dist/cli-bundle/chunks/{chunk-LK6XLOGP.js → chunk-LCFJ7XAM.js} +22 -2
  142. package/dist/cli-bundle/chunks/{chunk-LK6XLOGP.js.map → chunk-LCFJ7XAM.js.map} +3 -3
  143. package/dist/cli-bundle/chunks/{chunk-3UJRFJ5R.js → chunk-LZQU6XJG.js} +28 -34
  144. package/dist/cli-bundle/chunks/{chunk-3UJRFJ5R.js.map → chunk-LZQU6XJG.js.map} +1 -1
  145. package/dist/cli-bundle/chunks/{chunk-L5PSPMZ4.js → chunk-M62RO3XK.js} +10 -14
  146. package/dist/cli-bundle/chunks/{chunk-L5PSPMZ4.js.map → chunk-M62RO3XK.js.map} +1 -1
  147. package/dist/cli-bundle/chunks/{chunk-CFB33L7W.js → chunk-MCEUKJKW.js} +12 -14
  148. package/dist/cli-bundle/chunks/{chunk-CFB33L7W.js.map → chunk-MCEUKJKW.js.map} +1 -1
  149. package/dist/cli-bundle/chunks/{chunk-TKD5VCTD.js → chunk-MHNMCDWR.js} +343 -195
  150. package/dist/cli-bundle/chunks/chunk-MHNMCDWR.js.map +1 -0
  151. package/dist/cli-bundle/chunks/{chunk-O6AWCQRQ.js → chunk-MRFWUSVA.js} +4 -6
  152. package/dist/cli-bundle/chunks/{chunk-O6AWCQRQ.js.map → chunk-MRFWUSVA.js.map} +1 -1
  153. package/dist/cli-bundle/chunks/{chunk-SQYJ4HF2.js → chunk-N6ZHDLUY.js} +6 -8
  154. package/dist/cli-bundle/chunks/{chunk-SQYJ4HF2.js.map → chunk-N6ZHDLUY.js.map} +1 -1
  155. package/dist/cli-bundle/chunks/{chunk-ZWBEPGD7.js → chunk-NWWL22C7.js} +7 -9
  156. package/dist/cli-bundle/chunks/{chunk-ZWBEPGD7.js.map → chunk-NWWL22C7.js.map} +1 -1
  157. package/dist/cli-bundle/chunks/{chunk-Y46GD4IX.js → chunk-P3MJJW7P.js} +2 -2
  158. package/dist/cli-bundle/chunks/{chunk-MVYWGY2A.js → chunk-PDXJXEZJ.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-SGMFPXKR.js → chunk-Q64AYQYW.js} +10 -12
  160. package/dist/cli-bundle/chunks/{chunk-SGMFPXKR.js.map → chunk-Q64AYQYW.js.map} +1 -1
  161. package/dist/cli-bundle/chunks/{chunk-EBRZZ54H.js → chunk-QDABF2RB.js} +26 -34
  162. package/dist/cli-bundle/chunks/{chunk-EBRZZ54H.js.map → chunk-QDABF2RB.js.map} +1 -1
  163. package/dist/cli-bundle/chunks/{chunk-TULGS6X6.js → chunk-QFBSP3NI.js} +529 -46
  164. package/dist/cli-bundle/chunks/chunk-QFBSP3NI.js.map +1 -0
  165. package/dist/cli-bundle/chunks/{chunk-GDDAGPWJ.js → chunk-RB3KLPAH.js} +10 -14
  166. package/dist/cli-bundle/chunks/{chunk-GDDAGPWJ.js.map → chunk-RB3KLPAH.js.map} +1 -1
  167. package/dist/cli-bundle/chunks/{chunk-3VHSI5FL.js → chunk-RY7PTTUB.js} +94 -53
  168. package/dist/cli-bundle/chunks/chunk-RY7PTTUB.js.map +1 -0
  169. package/dist/cli-bundle/chunks/{chunk-COSPOP7H.js → chunk-S547WBYG.js} +343 -195
  170. package/dist/cli-bundle/chunks/chunk-S547WBYG.js.map +7 -0
  171. package/dist/cli-bundle/chunks/{chunk-NZEHECMW.js → chunk-S5BNGFN5.js} +24 -32
  172. package/dist/cli-bundle/chunks/{chunk-NZEHECMW.js.map → chunk-S5BNGFN5.js.map} +1 -1
  173. package/dist/cli-bundle/chunks/{chunk-MVSP7WGJ.js → chunk-S6VC2A2K.js} +8 -12
  174. package/dist/cli-bundle/chunks/{chunk-MVSP7WGJ.js.map → chunk-S6VC2A2K.js.map} +1 -1
  175. package/dist/cli-bundle/chunks/{chunk-45FYNUFJ.js → chunk-SIM5JDON.js} +6 -6
  176. package/dist/cli-bundle/chunks/{chunk-45FYNUFJ.js.map → chunk-SIM5JDON.js.map} +1 -1
  177. package/dist/cli-bundle/chunks/{chunk-VPIM42PC.js → chunk-SY75LYXR.js} +11 -7
  178. package/dist/cli-bundle/chunks/chunk-SY75LYXR.js.map +7 -0
  179. package/dist/cli-bundle/chunks/{chunk-K46RF36U.js → chunk-TEISGNSH.js} +7 -7
  180. package/dist/cli-bundle/chunks/chunk-TEISGNSH.js.map +1 -0
  181. package/dist/cli-bundle/chunks/{chunk-AGHMOTGM.js → chunk-TEKZOS7M.js} +2 -2
  182. package/dist/cli-bundle/chunks/{chunk-W572BIEB.js → chunk-TGUK6XN6.js} +14 -18
  183. package/dist/cli-bundle/chunks/{chunk-W572BIEB.js.map → chunk-TGUK6XN6.js.map} +1 -1
  184. package/dist/cli-bundle/chunks/{chunk-E42XTBSP.js → chunk-TNC6MZUD.js} +8 -12
  185. package/dist/cli-bundle/chunks/{chunk-E42XTBSP.js.map → chunk-TNC6MZUD.js.map} +1 -1
  186. package/dist/cli-bundle/chunks/chunk-TZLYO4PP.js +10498 -0
  187. package/dist/cli-bundle/chunks/chunk-TZLYO4PP.js.map +7 -0
  188. package/dist/cli-bundle/chunks/{chunk-57NWPFF2.js → chunk-UO7XAZK6.js} +17 -4
  189. package/dist/cli-bundle/chunks/chunk-UO7XAZK6.js.map +1 -0
  190. package/dist/cli-bundle/chunks/{chunk-JVH7QBVV.js → chunk-V5ZWKJNY.js} +2 -2
  191. package/dist/cli-bundle/chunks/{chunk-I36Y7PCE.js → chunk-VGO73OCK.js} +6 -6
  192. package/dist/cli-bundle/chunks/{chunk-I36Y7PCE.js.map → chunk-VGO73OCK.js.map} +1 -1
  193. package/dist/cli-bundle/chunks/{chunk-KUOOJR35.js → chunk-VLEA2UTQ.js} +2 -2
  194. package/dist/cli-bundle/chunks/{chunk-RCQZK2GO.js → chunk-W5HXHC7C.js} +7 -9
  195. package/dist/cli-bundle/chunks/{chunk-RCQZK2GO.js.map → chunk-W5HXHC7C.js.map} +1 -1
  196. package/dist/cli-bundle/chunks/{chunk-MUH7A3FD.js → chunk-WCWVEXGA.js} +2 -2
  197. package/dist/cli-bundle/chunks/chunk-X47MKQXU.js +6690 -0
  198. package/dist/cli-bundle/chunks/chunk-X47MKQXU.js.map +7 -0
  199. package/dist/cli-bundle/chunks/{chunk-NB7RLQFW.js → chunk-XBX5CBRQ.js} +5 -7
  200. package/dist/cli-bundle/chunks/{chunk-NB7RLQFW.js.map → chunk-XBX5CBRQ.js.map} +1 -1
  201. package/dist/cli-bundle/chunks/{chunk-SCUR7K7N.js → chunk-XC3X7BQR.js} +541 -44
  202. package/dist/cli-bundle/chunks/chunk-XC3X7BQR.js.map +7 -0
  203. package/dist/cli-bundle/chunks/{chunk-CRVYGJUI.js → chunk-XHCVAZGM.js} +13 -17
  204. package/dist/cli-bundle/chunks/{chunk-CRVYGJUI.js.map → chunk-XHCVAZGM.js.map} +1 -1
  205. package/dist/cli-bundle/chunks/{chunk-XB7KFVFI.js → chunk-XPMXPR7K.js} +7 -9
  206. package/dist/cli-bundle/chunks/{chunk-XB7KFVFI.js.map → chunk-XPMXPR7K.js.map} +1 -1
  207. package/dist/cli-bundle/chunks/{chunk-4CJFCTLM.js → chunk-XS2TMNXR.js} +6 -8
  208. package/dist/cli-bundle/chunks/{chunk-4CJFCTLM.js.map → chunk-XS2TMNXR.js.map} +1 -1
  209. package/dist/cli-bundle/chunks/{chunk-HFDADVJZ.js → chunk-XXIYUTLK.js} +10 -14
  210. package/dist/cli-bundle/chunks/{chunk-HFDADVJZ.js.map → chunk-XXIYUTLK.js.map} +1 -1
  211. package/dist/cli-bundle/chunks/{chunk-EOKXK3R3.js → chunk-XZWL7VNE.js} +1220 -398
  212. package/dist/cli-bundle/chunks/chunk-XZWL7VNE.js.map +1 -0
  213. package/dist/cli-bundle/chunks/chunk-Y5IKRUEM.js +6624 -0
  214. package/dist/cli-bundle/chunks/chunk-Y5IKRUEM.js.map +1 -0
  215. package/dist/cli-bundle/chunks/{chunk-6LLVNJXT.js → chunk-Y7KYVCZM.js} +12 -18
  216. package/dist/cli-bundle/chunks/{chunk-6LLVNJXT.js.map → chunk-Y7KYVCZM.js.map} +1 -1
  217. package/dist/cli-bundle/chunks/{chunk-VIIUS6N6.js → chunk-YCVWWIKY.js} +16 -14
  218. package/dist/cli-bundle/chunks/chunk-YCVWWIKY.js.map +7 -0
  219. package/dist/cli-bundle/chunks/{chunk-CFNGIXZP.js → chunk-YH5NBDFA.js} +22 -26
  220. package/dist/cli-bundle/chunks/{chunk-CFNGIXZP.js.map → chunk-YH5NBDFA.js.map} +1 -1
  221. package/dist/cli-bundle/chunks/chunk-YNCFP5AR.js +5509 -0
  222. package/dist/cli-bundle/chunks/chunk-YNCFP5AR.js.map +7 -0
  223. package/dist/cli-bundle/chunks/{chunk-NC33K5ZS.js → chunk-YPD7SQ5P.js} +7 -6
  224. package/dist/cli-bundle/chunks/{chunk-NC33K5ZS.js.map → chunk-YPD7SQ5P.js.map} +2 -2
  225. package/dist/cli-bundle/chunks/{chunk-NGXQ3PFT.js → chunk-YPMZMKN7.js} +2 -2
  226. package/dist/cli-bundle/chunks/{chunk-KGFUY7WN.js → chunk-YTD5GICJ.js} +4 -4
  227. package/dist/cli-bundle/chunks/{chunk-W6DYWXPQ.js → chunk-ZNEG2UDO.js} +261 -34
  228. package/dist/cli-bundle/chunks/{chunk-W6DYWXPQ.js.map → chunk-ZNEG2UDO.js.map} +4 -4
  229. package/dist/cli-bundle/chunks/{chunk-7DT4WSH2.js → chunk-ZO7CLOY2.js} +3 -3
  230. package/dist/cli-bundle/chunks/{close-2SSSHHUZ.js → close-3YYQ5OG2.js} +5 -9
  231. package/dist/cli-bundle/chunks/close-Z3Q4U7TS.js +12 -0
  232. package/dist/cli-bundle/chunks/close-many-3L2RXH3M.js +22 -0
  233. package/dist/cli-bundle/chunks/close-many-D366FTIG.js +26 -0
  234. package/dist/cli-bundle/chunks/comments-54XDJNFE.js +17 -0
  235. package/dist/cli-bundle/chunks/comments-HGHC2PN6.js +13 -0
  236. package/dist/cli-bundle/chunks/{copy-32ROBIDL.js → copy-44RT5GDW.js} +4 -8
  237. package/dist/cli-bundle/chunks/copy-UGMUGHZA.js +9 -0
  238. package/dist/cli-bundle/chunks/{create-E77SDCUP.js → create-4GWJWPXG.js} +9 -14
  239. package/dist/cli-bundle/chunks/create-AZXCUYKP.js +25 -0
  240. package/dist/cli-bundle/chunks/delete-Y6SXIQ4X.js +10 -0
  241. package/dist/cli-bundle/chunks/{delete-RA5KTCLB.js → delete-YQ2VPXNF.js} +4 -8
  242. package/dist/cli-bundle/chunks/{deps-32SU7HO5.js → deps-BU5EBJDU.js} +4 -8
  243. package/dist/cli-bundle/chunks/deps-FMANWFRP.js +13 -0
  244. package/dist/cli-bundle/chunks/{docs-RRUPT7O2.js → docs-OQBSJNIA.js} +6 -10
  245. package/dist/cli-bundle/chunks/docs-VNPBZXEL.js +14 -0
  246. package/dist/cli-bundle/chunks/files-72HZEBOE.js +18 -0
  247. package/dist/cli-bundle/chunks/{files-PYKR2UUG.js → files-HTSB2KJG.js} +6 -10
  248. package/dist/cli-bundle/chunks/{contracts-NYPEW2G4.js → focus-FOG4ALC2.js} +7 -9
  249. package/dist/cli-bundle/chunks/focus-SUTMKXGX.js +10 -0
  250. package/dist/cli-bundle/chunks/{history-compact-3MNXLKAT.js → history-compact-M6IFAMBP.js} +9 -13
  251. package/dist/cli-bundle/chunks/history-compact-NEXRPP2O.js +21 -0
  252. package/dist/cli-bundle/chunks/{history-redact-P6DYF55G.js → history-redact-NQX3OGZP.js} +7 -11
  253. package/dist/cli-bundle/chunks/history-redact-WQJBZ3PX.js +17 -0
  254. package/dist/cli-bundle/chunks/history-repair-CBHMHAJO.js +19 -0
  255. package/dist/cli-bundle/chunks/{history-repair-ZJQFMWPD.js → history-repair-NHOJG7WO.js} +9 -13
  256. package/dist/cli-bundle/chunks/learnings-M64NTSOR.js +13 -0
  257. package/dist/cli-bundle/chunks/{append-BGML6VLD.js → learnings-T63JGKKN.js} +9 -11
  258. package/dist/cli-bundle/chunks/notes-73WE2UV2.js +13 -0
  259. package/dist/cli-bundle/chunks/notes-U7L6HQQ2.js +17 -0
  260. package/dist/cli-bundle/chunks/plan-OSCNYFGC.js +24 -0
  261. package/dist/cli-bundle/chunks/{plan-CHVE7PBR.js → plan-TN537L24.js} +10 -15
  262. package/dist/cli-bundle/chunks/{profile-ZXGSKBJD.js → profile-MHAMXMHQ.js} +9 -13
  263. package/dist/cli-bundle/chunks/{profile-LD23PSI6.js → profile-TIGLAKJ7.js} +9 -13
  264. package/dist/cli-bundle/chunks/{register-list-query-OEYQHFXO.js → register-list-query-OHXD7G5N.js} +41 -33
  265. package/dist/cli-bundle/chunks/register-list-query-OHXD7G5N.js.map +7 -0
  266. package/dist/cli-bundle/chunks/{register-list-query-B42JCCOI.js → register-list-query-ZCRABAPN.js} +42 -34
  267. package/dist/cli-bundle/chunks/register-list-query-ZCRABAPN.js.map +1 -0
  268. package/dist/cli-bundle/chunks/{register-mutation-IAEST26S.js → register-mutation-P3G4XP6Q.js} +36 -41
  269. package/dist/cli-bundle/chunks/{register-mutation-IAEST26S.js.map → register-mutation-P3G4XP6Q.js.map} +1 -1
  270. package/dist/cli-bundle/chunks/{register-mutation-3QXIHCQG.js → register-mutation-XX4H56PE.js} +34 -39
  271. package/dist/cli-bundle/chunks/{register-mutation-3QXIHCQG.js.map → register-mutation-XX4H56PE.js.map} +1 -1
  272. package/dist/cli-bundle/chunks/{chunk-5BMM6XQY.js → register-operations-V6PIYEDU.js} +79 -46
  273. package/dist/cli-bundle/chunks/register-operations-V6PIYEDU.js.map +1 -0
  274. package/dist/cli-bundle/chunks/{chunk-Z3U3U5KD.js → register-operations-V6VKTG54.js} +78 -45
  275. package/dist/cli-bundle/chunks/register-operations-V6VKTG54.js.map +7 -0
  276. package/dist/cli-bundle/chunks/{register-setup-3ZVVX2VN.js → register-setup-6RVAWT6W.js} +129 -29
  277. package/dist/cli-bundle/chunks/register-setup-6RVAWT6W.js.map +7 -0
  278. package/dist/cli-bundle/chunks/{register-setup-Q6KFNIOZ.js → register-setup-6YVUSQYD.js} +130 -30
  279. package/dist/cli-bundle/chunks/register-setup-6YVUSQYD.js.map +1 -0
  280. package/dist/cli-bundle/chunks/{restore-5RQHAPMA.js → restore-HC3YSWF7.js} +7 -11
  281. package/dist/cli-bundle/chunks/restore-LFAMMRYZ.js +15 -0
  282. package/dist/cli-bundle/chunks/{schema-HBORFC6B.js → schema-DAGSYO6E.js} +6 -10
  283. package/dist/cli-bundle/chunks/{schema-245WW4G2.js → schema-UBXJCQAC.js} +6 -10
  284. package/dist/cli-bundle/chunks/update-CJGG5WMV.js +21 -0
  285. package/dist/cli-bundle/chunks/update-LKD64AFP.js +25 -0
  286. package/dist/cli-bundle/chunks/update-many-G4SM7BHC.js +31 -0
  287. package/dist/cli-bundle/chunks/update-many-VLIV3D7R.js +35 -0
  288. package/dist/cli-bundle/main.js +29 -31
  289. package/dist/cli-bundle/main.js.map +2 -2
  290. package/dist/cli-bundle/sdk-runtime.js +129 -107
  291. package/dist/cli-bundle/sdk-testing.js +7 -8
  292. package/dist/cli-bundle/sdk.js +122 -117
  293. package/dist/cli-bundle/sdk.js.map +2 -2
  294. package/dist/core/history/drift-scan.js +3 -8
  295. package/dist/core/history/drift-scan.js.map +1 -1
  296. package/dist/core/output/mutation-projection.js +11 -5
  297. package/dist/core/output/mutation-projection.js.map +1 -1
  298. package/dist/core/search/cache.js +3 -3
  299. package/dist/core/search/cache.js.map +1 -1
  300. package/dist/core/search/semantic-defaults.d.ts +2 -0
  301. package/dist/core/search/semantic-defaults.js +11 -4
  302. package/dist/core/search/semantic-defaults.js.map +1 -1
  303. package/dist/core/search/vector-stores.d.ts +1 -1
  304. package/dist/core/search/vector-stores.js +33 -7
  305. package/dist/core/search/vector-stores.js.map +1 -1
  306. package/dist/mcp/server.d.ts +1 -1
  307. package/dist/sdk/cli-contracts/flag-contracts.js +7 -7
  308. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  309. package/dist/sdk/cli-contracts/tool-schema.js +9 -7
  310. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  311. package/dist/sdk/index.d.ts +1 -1
  312. package/dist/sdk/index.js +3 -3
  313. package/dist/sdk/index.js.map +1 -1
  314. package/dist/sdk/runtime.d.ts +151 -8
  315. package/dist/sdk/runtime.js +255 -14
  316. package/dist/sdk/runtime.js.map +1 -1
  317. package/dist/sdk/start-task-status.d.ts +13 -0
  318. package/dist/sdk/start-task-status.js +19 -0
  319. package/dist/sdk/start-task-status.js.map +1 -0
  320. package/docs/COMMANDS.md +10 -1
  321. package/docs/SDK.md +35 -0
  322. package/docs/TESTING.md +3 -0
  323. package/package.json +1 -1
  324. package/dist/cli-bundle/chunks/activity-WJCGCYPU.js +0 -18
  325. package/dist/cli-bundle/chunks/activity-Z6QUAUSG.js +0 -22
  326. package/dist/cli-bundle/chunks/aggregate-BDM6EIAR.js +0 -25
  327. package/dist/cli-bundle/chunks/aggregate-VQ2DHU3S.js +0 -21
  328. package/dist/cli-bundle/chunks/append-RKJYPU74.js +0 -15
  329. package/dist/cli-bundle/chunks/chunk-2XG4IZON.js +0 -218
  330. package/dist/cli-bundle/chunks/chunk-2XG4IZON.js.map +0 -7
  331. package/dist/cli-bundle/chunks/chunk-37E72CNS.js +0 -217
  332. package/dist/cli-bundle/chunks/chunk-37E72CNS.js.map +0 -1
  333. package/dist/cli-bundle/chunks/chunk-3GCS5SKL.js +0 -228
  334. package/dist/cli-bundle/chunks/chunk-3GCS5SKL.js.map +0 -1
  335. package/dist/cli-bundle/chunks/chunk-3KTN6IBA.js +0 -2330
  336. package/dist/cli-bundle/chunks/chunk-3KTN6IBA.js.map +0 -7
  337. package/dist/cli-bundle/chunks/chunk-3VHSI5FL.js.map +0 -1
  338. package/dist/cli-bundle/chunks/chunk-425E4QL5.js +0 -278
  339. package/dist/cli-bundle/chunks/chunk-425E4QL5.js.map +0 -7
  340. package/dist/cli-bundle/chunks/chunk-46CUF5L6.js.map +0 -7
  341. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +0 -87
  342. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +0 -7
  343. package/dist/cli-bundle/chunks/chunk-4HIFVN7N.js +0 -249
  344. package/dist/cli-bundle/chunks/chunk-4HIFVN7N.js.map +0 -7
  345. package/dist/cli-bundle/chunks/chunk-4IWYTWGF.js +0 -819
  346. package/dist/cli-bundle/chunks/chunk-4IWYTWGF.js.map +0 -1
  347. package/dist/cli-bundle/chunks/chunk-4MZVRJOE.js +0 -279
  348. package/dist/cli-bundle/chunks/chunk-4MZVRJOE.js.map +0 -1
  349. package/dist/cli-bundle/chunks/chunk-57NWPFF2.js.map +0 -1
  350. package/dist/cli-bundle/chunks/chunk-5AJXHQM7.js +0 -268
  351. package/dist/cli-bundle/chunks/chunk-5AJXHQM7.js.map +0 -1
  352. package/dist/cli-bundle/chunks/chunk-5BMM6XQY.js.map +0 -1
  353. package/dist/cli-bundle/chunks/chunk-5GZ7TDD6.js +0 -1868
  354. package/dist/cli-bundle/chunks/chunk-5GZ7TDD6.js.map +0 -7
  355. package/dist/cli-bundle/chunks/chunk-5VAA4YHR.js +0 -1749
  356. package/dist/cli-bundle/chunks/chunk-5VAA4YHR.js.map +0 -7
  357. package/dist/cli-bundle/chunks/chunk-64YKRTSV.js +0 -1961
  358. package/dist/cli-bundle/chunks/chunk-64YKRTSV.js.map +0 -1
  359. package/dist/cli-bundle/chunks/chunk-7C2O74AE.js +0 -23
  360. package/dist/cli-bundle/chunks/chunk-7C2O74AE.js.map +0 -7
  361. package/dist/cli-bundle/chunks/chunk-B7FRNMYN.js +0 -421
  362. package/dist/cli-bundle/chunks/chunk-B7FRNMYN.js.map +0 -1
  363. package/dist/cli-bundle/chunks/chunk-C5JBZRPU.js +0 -1985
  364. package/dist/cli-bundle/chunks/chunk-C5JBZRPU.js.map +0 -7
  365. package/dist/cli-bundle/chunks/chunk-CL36D4PC.js.map +0 -7
  366. package/dist/cli-bundle/chunks/chunk-COSPOP7H.js.map +0 -7
  367. package/dist/cli-bundle/chunks/chunk-COWTDV6B.js +0 -3461
  368. package/dist/cli-bundle/chunks/chunk-COWTDV6B.js.map +0 -7
  369. package/dist/cli-bundle/chunks/chunk-DEWEK6AN.js +0 -1858
  370. package/dist/cli-bundle/chunks/chunk-DEWEK6AN.js.map +0 -1
  371. package/dist/cli-bundle/chunks/chunk-DMRNBQOI.js.map +0 -1
  372. package/dist/cli-bundle/chunks/chunk-E3SZTQ4K.js +0 -1932
  373. package/dist/cli-bundle/chunks/chunk-E3SZTQ4K.js.map +0 -1
  374. package/dist/cli-bundle/chunks/chunk-EGAP5OWD.js.map +0 -1
  375. package/dist/cli-bundle/chunks/chunk-EKFNL33R.js.map +0 -1
  376. package/dist/cli-bundle/chunks/chunk-ENGQOEUY.js +0 -1704
  377. package/dist/cli-bundle/chunks/chunk-ENGQOEUY.js.map +0 -1
  378. package/dist/cli-bundle/chunks/chunk-EOKXK3R3.js.map +0 -1
  379. package/dist/cli-bundle/chunks/chunk-FLZSGSQR.js +0 -231
  380. package/dist/cli-bundle/chunks/chunk-FLZSGSQR.js.map +0 -7
  381. package/dist/cli-bundle/chunks/chunk-FOUYJE4A.js +0 -2090
  382. package/dist/cli-bundle/chunks/chunk-FOUYJE4A.js.map +0 -1
  383. package/dist/cli-bundle/chunks/chunk-G24G7ZAV.js +0 -1570
  384. package/dist/cli-bundle/chunks/chunk-G24G7ZAV.js.map +0 -1
  385. package/dist/cli-bundle/chunks/chunk-GEYZ4G4O.js +0 -239
  386. package/dist/cli-bundle/chunks/chunk-GEYZ4G4O.js.map +0 -1
  387. package/dist/cli-bundle/chunks/chunk-GPLPTGOV.js +0 -530
  388. package/dist/cli-bundle/chunks/chunk-GPLPTGOV.js.map +0 -7
  389. package/dist/cli-bundle/chunks/chunk-GZRDYONU.js +0 -1005
  390. package/dist/cli-bundle/chunks/chunk-GZRDYONU.js.map +0 -7
  391. package/dist/cli-bundle/chunks/chunk-HN6NSXNW.js +0 -277
  392. package/dist/cli-bundle/chunks/chunk-HN6NSXNW.js.map +0 -7
  393. package/dist/cli-bundle/chunks/chunk-IQNVQHOP.js +0 -309
  394. package/dist/cli-bundle/chunks/chunk-IQNVQHOP.js.map +0 -7
  395. package/dist/cli-bundle/chunks/chunk-JINYH2DB.js +0 -371
  396. package/dist/cli-bundle/chunks/chunk-JINYH2DB.js.map +0 -7
  397. package/dist/cli-bundle/chunks/chunk-JQXPY7DN.js +0 -2257
  398. package/dist/cli-bundle/chunks/chunk-JQXPY7DN.js.map +0 -7
  399. package/dist/cli-bundle/chunks/chunk-K46RF36U.js.map +0 -1
  400. package/dist/cli-bundle/chunks/chunk-KERMZVY5.js +0 -371
  401. package/dist/cli-bundle/chunks/chunk-KERMZVY5.js.map +0 -7
  402. package/dist/cli-bundle/chunks/chunk-KSRUHV2H.js +0 -76
  403. package/dist/cli-bundle/chunks/chunk-KSRUHV2H.js.map +0 -1
  404. package/dist/cli-bundle/chunks/chunk-LP3HSFZ2.js +0 -140
  405. package/dist/cli-bundle/chunks/chunk-LP3HSFZ2.js.map +0 -1
  406. package/dist/cli-bundle/chunks/chunk-MAWDPCJW.js +0 -1601
  407. package/dist/cli-bundle/chunks/chunk-MAWDPCJW.js.map +0 -1
  408. package/dist/cli-bundle/chunks/chunk-MFAZSEM5.js +0 -1031
  409. package/dist/cli-bundle/chunks/chunk-MFAZSEM5.js.map +0 -1
  410. package/dist/cli-bundle/chunks/chunk-MFSCBT5Q.js +0 -995
  411. package/dist/cli-bundle/chunks/chunk-MFSCBT5Q.js.map +0 -1
  412. package/dist/cli-bundle/chunks/chunk-ML5X7DP2.js +0 -296
  413. package/dist/cli-bundle/chunks/chunk-ML5X7DP2.js.map +0 -1
  414. package/dist/cli-bundle/chunks/chunk-MLIYFOE7.js.map +0 -1
  415. package/dist/cli-bundle/chunks/chunk-MR6FJ7LL.js +0 -2043
  416. package/dist/cli-bundle/chunks/chunk-MR6FJ7LL.js.map +0 -7
  417. package/dist/cli-bundle/chunks/chunk-MXYA5SAJ.js +0 -2033
  418. package/dist/cli-bundle/chunks/chunk-MXYA5SAJ.js.map +0 -1
  419. package/dist/cli-bundle/chunks/chunk-N745W3B3.js +0 -1604
  420. package/dist/cli-bundle/chunks/chunk-N745W3B3.js.map +0 -7
  421. package/dist/cli-bundle/chunks/chunk-NMP5I3I5.js +0 -1615
  422. package/dist/cli-bundle/chunks/chunk-NMP5I3I5.js.map +0 -7
  423. package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js +0 -20
  424. package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js.map +0 -1
  425. package/dist/cli-bundle/chunks/chunk-PZUGEOPS.js +0 -143
  426. package/dist/cli-bundle/chunks/chunk-PZUGEOPS.js.map +0 -7
  427. package/dist/cli-bundle/chunks/chunk-QLMX7SRD.js.map +0 -7
  428. package/dist/cli-bundle/chunks/chunk-QX6HM775.js +0 -398
  429. package/dist/cli-bundle/chunks/chunk-QX6HM775.js.map +0 -7
  430. package/dist/cli-bundle/chunks/chunk-QZ342C63.js +0 -220
  431. package/dist/cli-bundle/chunks/chunk-QZ342C63.js.map +0 -7
  432. package/dist/cli-bundle/chunks/chunk-R2EMWY7Q.js +0 -368
  433. package/dist/cli-bundle/chunks/chunk-R2EMWY7Q.js.map +0 -1
  434. package/dist/cli-bundle/chunks/chunk-RFNYTESG.js +0 -520
  435. package/dist/cli-bundle/chunks/chunk-RFNYTESG.js.map +0 -1
  436. package/dist/cli-bundle/chunks/chunk-RKQOO2UM.js +0 -79
  437. package/dist/cli-bundle/chunks/chunk-RKQOO2UM.js.map +0 -7
  438. package/dist/cli-bundle/chunks/chunk-RQLT6ZWB.js +0 -282
  439. package/dist/cli-bundle/chunks/chunk-RQLT6ZWB.js.map +0 -7
  440. package/dist/cli-bundle/chunks/chunk-S3JS6YVZ.js +0 -274
  441. package/dist/cli-bundle/chunks/chunk-S3JS6YVZ.js.map +0 -1
  442. package/dist/cli-bundle/chunks/chunk-SCUR7K7N.js.map +0 -7
  443. package/dist/cli-bundle/chunks/chunk-SHQY2IDC.js +0 -1977
  444. package/dist/cli-bundle/chunks/chunk-SHQY2IDC.js.map +0 -7
  445. package/dist/cli-bundle/chunks/chunk-SPZ6DOGY.js +0 -1041
  446. package/dist/cli-bundle/chunks/chunk-SPZ6DOGY.js.map +0 -7
  447. package/dist/cli-bundle/chunks/chunk-T42JWV3F.js +0 -822
  448. package/dist/cli-bundle/chunks/chunk-T42JWV3F.js.map +0 -7
  449. package/dist/cli-bundle/chunks/chunk-TKD5VCTD.js.map +0 -1
  450. package/dist/cli-bundle/chunks/chunk-TULGS6X6.js.map +0 -1
  451. package/dist/cli-bundle/chunks/chunk-TZXRBVAM.js +0 -2306
  452. package/dist/cli-bundle/chunks/chunk-TZXRBVAM.js.map +0 -1
  453. package/dist/cli-bundle/chunks/chunk-VIIUS6N6.js.map +0 -7
  454. package/dist/cli-bundle/chunks/chunk-VPIM42PC.js.map +0 -7
  455. package/dist/cli-bundle/chunks/chunk-VQRSPVME.js +0 -368
  456. package/dist/cli-bundle/chunks/chunk-VQRSPVME.js.map +0 -1
  457. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +0 -84
  458. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +0 -1
  459. package/dist/cli-bundle/chunks/chunk-WG34ZNQQ.js +0 -3423
  460. package/dist/cli-bundle/chunks/chunk-WG34ZNQQ.js.map +0 -1
  461. package/dist/cli-bundle/chunks/chunk-WLSM645P.js +0 -2247
  462. package/dist/cli-bundle/chunks/chunk-WLSM645P.js.map +0 -1
  463. package/dist/cli-bundle/chunks/chunk-WRTENIX3.js +0 -215
  464. package/dist/cli-bundle/chunks/chunk-WRTENIX3.js.map +0 -1
  465. package/dist/cli-bundle/chunks/chunk-WSBLYDWV.js +0 -388
  466. package/dist/cli-bundle/chunks/chunk-WSBLYDWV.js.map +0 -1
  467. package/dist/cli-bundle/chunks/chunk-XC5BURG2.js +0 -306
  468. package/dist/cli-bundle/chunks/chunk-XC5BURG2.js.map +0 -1
  469. package/dist/cli-bundle/chunks/chunk-XDB7RWQT.js +0 -424
  470. package/dist/cli-bundle/chunks/chunk-XDB7RWQT.js.map +0 -7
  471. package/dist/cli-bundle/chunks/chunk-Y6BK55A3.js +0 -2128
  472. package/dist/cli-bundle/chunks/chunk-Y6BK55A3.js.map +0 -7
  473. package/dist/cli-bundle/chunks/chunk-Z3U3U5KD.js.map +0 -7
  474. package/dist/cli-bundle/chunks/chunk-ZO3XKAOP.js +0 -299
  475. package/dist/cli-bundle/chunks/chunk-ZO3XKAOP.js.map +0 -7
  476. package/dist/cli-bundle/chunks/chunk-ZSUS2OD3.js.map +0 -7
  477. package/dist/cli-bundle/chunks/claim-RFS7BROJ.js +0 -19
  478. package/dist/cli-bundle/chunks/claim-XP5AWZ5H.js +0 -23
  479. package/dist/cli-bundle/chunks/close-GEANHQ2J.js +0 -16
  480. package/dist/cli-bundle/chunks/close-many-CMZW7ITN.js +0 -31
  481. package/dist/cli-bundle/chunks/close-many-ZFDIG6M7.js +0 -27
  482. package/dist/cli-bundle/chunks/comments-MFSYVNNU.js +0 -21
  483. package/dist/cli-bundle/chunks/comments-XUBPXDYX.js +0 -17
  484. package/dist/cli-bundle/chunks/config-D7XQMONX.js +0 -18
  485. package/dist/cli-bundle/chunks/config-T4FHBSYN.js +0 -22
  486. package/dist/cli-bundle/chunks/context-DIU275XI.js +0 -48
  487. package/dist/cli-bundle/chunks/context-JCOYB4LZ.js +0 -44
  488. package/dist/cli-bundle/chunks/contracts-BVO7CSLK.js +0 -12
  489. package/dist/cli-bundle/chunks/copy-NAGLGMHZ.js +0 -13
  490. package/dist/cli-bundle/chunks/create-4V7SWNBB.js +0 -30
  491. package/dist/cli-bundle/chunks/delete-NQI5OSKN.js +0 -14
  492. package/dist/cli-bundle/chunks/deps-T7SCWXEX.js +0 -17
  493. package/dist/cli-bundle/chunks/docs-WL2IWGWV.js +0 -18
  494. package/dist/cli-bundle/chunks/eval-NF2J5SHR.js +0 -23
  495. package/dist/cli-bundle/chunks/eval-SKDT3MZU.js +0 -27
  496. package/dist/cli-bundle/chunks/extension-LAXKCAYE.js +0 -42
  497. package/dist/cli-bundle/chunks/extension-ZISPBRBC.js +0 -38
  498. package/dist/cli-bundle/chunks/files-EWRQHGIS.js +0 -22
  499. package/dist/cli-bundle/chunks/focus-4T7TM4MT.js +0 -18
  500. package/dist/cli-bundle/chunks/focus-L3YUASOD.js +0 -14
  501. package/dist/cli-bundle/chunks/gc-2PCTYYRI.js +0 -12
  502. package/dist/cli-bundle/chunks/get-7DMITJ3G.js +0 -23
  503. package/dist/cli-bundle/chunks/get-VKQXCXLL.js +0 -19
  504. package/dist/cli-bundle/chunks/health-CVSTAR2F.js +0 -31
  505. package/dist/cli-bundle/chunks/health-TV3GKTFN.js +0 -35
  506. package/dist/cli-bundle/chunks/history-D4JUX5XV.js +0 -20
  507. package/dist/cli-bundle/chunks/history-D4JUX5XV.js.map +0 -7
  508. package/dist/cli-bundle/chunks/history-LQ2UWZTE.js +0 -24
  509. package/dist/cli-bundle/chunks/history-LQ2UWZTE.js.map +0 -1
  510. package/dist/cli-bundle/chunks/history-compact-3MNXLKAT.js.map +0 -1
  511. package/dist/cli-bundle/chunks/history-compact-QWEO32FP.js +0 -25
  512. package/dist/cli-bundle/chunks/history-compact-QWEO32FP.js.map +0 -7
  513. package/dist/cli-bundle/chunks/history-redact-3OIVBVIY.js +0 -21
  514. package/dist/cli-bundle/chunks/history-redact-3OIVBVIY.js.map +0 -7
  515. package/dist/cli-bundle/chunks/history-redact-P6DYF55G.js.map +0 -1
  516. package/dist/cli-bundle/chunks/history-repair-I3E73UGQ.js +0 -23
  517. package/dist/cli-bundle/chunks/history-repair-I3E73UGQ.js.map +0 -7
  518. package/dist/cli-bundle/chunks/history-repair-ZJQFMWPD.js.map +0 -1
  519. package/dist/cli-bundle/chunks/init-C3LJPWQZ.js +0 -30
  520. package/dist/cli-bundle/chunks/init-C3LJPWQZ.js.map +0 -1
  521. package/dist/cli-bundle/chunks/init-J3DPGWQI.js +0 -26
  522. package/dist/cli-bundle/chunks/init-J3DPGWQI.js.map +0 -7
  523. package/dist/cli-bundle/chunks/learnings-5BO2SNDW.js +0 -21
  524. package/dist/cli-bundle/chunks/learnings-5BO2SNDW.js.map +0 -1
  525. package/dist/cli-bundle/chunks/learnings-OGP4JB4I.js +0 -17
  526. package/dist/cli-bundle/chunks/learnings-OGP4JB4I.js.map +0 -7
  527. package/dist/cli-bundle/chunks/list-O5NZVSPN.js +0 -36
  528. package/dist/cli-bundle/chunks/list-O5NZVSPN.js.map +0 -1
  529. package/dist/cli-bundle/chunks/list-Z55YCNTC.js +0 -32
  530. package/dist/cli-bundle/chunks/list-Z55YCNTC.js.map +0 -7
  531. package/dist/cli-bundle/chunks/next-GBNTGXFC.js +0 -28
  532. package/dist/cli-bundle/chunks/next-GBNTGXFC.js.map +0 -7
  533. package/dist/cli-bundle/chunks/next-QKW7PTKE.js +0 -32
  534. package/dist/cli-bundle/chunks/next-QKW7PTKE.js.map +0 -1
  535. package/dist/cli-bundle/chunks/notes-R5FZTKWF.js +0 -17
  536. package/dist/cli-bundle/chunks/notes-R5FZTKWF.js.map +0 -7
  537. package/dist/cli-bundle/chunks/notes-WCGIULVG.js +0 -21
  538. package/dist/cli-bundle/chunks/notes-WCGIULVG.js.map +0 -1
  539. package/dist/cli-bundle/chunks/plan-ADISFYH4.js +0 -29
  540. package/dist/cli-bundle/chunks/plan-ADISFYH4.js.map +0 -7
  541. package/dist/cli-bundle/chunks/plan-CHVE7PBR.js.map +0 -1
  542. package/dist/cli-bundle/chunks/profile-LD23PSI6.js.map +0 -7
  543. package/dist/cli-bundle/chunks/profile-ZXGSKBJD.js.map +0 -1
  544. package/dist/cli-bundle/chunks/register-list-query-B42JCCOI.js.map +0 -1
  545. package/dist/cli-bundle/chunks/register-list-query-OEYQHFXO.js.map +0 -7
  546. package/dist/cli-bundle/chunks/register-operations-I3M3U7DS.js +0 -19
  547. package/dist/cli-bundle/chunks/register-operations-I3M3U7DS.js.map +0 -7
  548. package/dist/cli-bundle/chunks/register-operations-UHKENLZV.js +0 -23
  549. package/dist/cli-bundle/chunks/register-operations-UHKENLZV.js.map +0 -1
  550. package/dist/cli-bundle/chunks/register-setup-3ZVVX2VN.js.map +0 -7
  551. package/dist/cli-bundle/chunks/register-setup-Q6KFNIOZ.js.map +0 -1
  552. package/dist/cli-bundle/chunks/restore-5RQHAPMA.js.map +0 -1
  553. package/dist/cli-bundle/chunks/restore-PNEIBBLW.js +0 -19
  554. package/dist/cli-bundle/chunks/restore-PNEIBBLW.js.map +0 -7
  555. package/dist/cli-bundle/chunks/scheduling-shortcuts-4G56YHVQ.js +0 -29
  556. package/dist/cli-bundle/chunks/scheduling-shortcuts-4G56YHVQ.js.map +0 -1
  557. package/dist/cli-bundle/chunks/scheduling-shortcuts-75DULBYP.js +0 -25
  558. package/dist/cli-bundle/chunks/scheduling-shortcuts-75DULBYP.js.map +0 -7
  559. package/dist/cli-bundle/chunks/schema-245WW4G2.js.map +0 -1
  560. package/dist/cli-bundle/chunks/schema-HBORFC6B.js.map +0 -7
  561. package/dist/cli-bundle/chunks/search-AOZC5SIK.js +0 -34
  562. package/dist/cli-bundle/chunks/search-AOZC5SIK.js.map +0 -7
  563. package/dist/cli-bundle/chunks/search-DRXPGHD7.js +0 -38
  564. package/dist/cli-bundle/chunks/search-DRXPGHD7.js.map +0 -1
  565. package/dist/cli-bundle/chunks/stats-NJG4NLHG.js +0 -21
  566. package/dist/cli-bundle/chunks/stats-NJG4NLHG.js.map +0 -1
  567. package/dist/cli-bundle/chunks/stats-RG6AG4N2.js +0 -17
  568. package/dist/cli-bundle/chunks/stats-RG6AG4N2.js.map +0 -7
  569. package/dist/cli-bundle/chunks/telemetry-HQC2JJIF.js +0 -14
  570. package/dist/cli-bundle/chunks/telemetry-HQC2JJIF.js.map +0 -7
  571. package/dist/cli-bundle/chunks/telemetry-MPNL3HHY.js +0 -18
  572. package/dist/cli-bundle/chunks/telemetry-MPNL3HHY.js.map +0 -1
  573. package/dist/cli-bundle/chunks/test-6CMOCWUC.js +0 -39
  574. package/dist/cli-bundle/chunks/test-6CMOCWUC.js.map +0 -7
  575. package/dist/cli-bundle/chunks/test-RI7XHBZL.js +0 -43
  576. package/dist/cli-bundle/chunks/test-RI7XHBZL.js.map +0 -1
  577. package/dist/cli-bundle/chunks/test-all-7R7YRZIA.js +0 -29
  578. package/dist/cli-bundle/chunks/test-all-7R7YRZIA.js.map +0 -7
  579. package/dist/cli-bundle/chunks/test-all-QEIORFYW.js +0 -33
  580. package/dist/cli-bundle/chunks/test-all-QEIORFYW.js.map +0 -1
  581. package/dist/cli-bundle/chunks/test-runs-5Y2BOU2S.js +0 -28
  582. package/dist/cli-bundle/chunks/test-runs-5Y2BOU2S.js.map +0 -1
  583. package/dist/cli-bundle/chunks/test-runs-PVGC3GRZ.js +0 -24
  584. package/dist/cli-bundle/chunks/test-runs-PVGC3GRZ.js.map +0 -7
  585. package/dist/cli-bundle/chunks/update-QVJDFEAP.js +0 -30
  586. package/dist/cli-bundle/chunks/update-QVJDFEAP.js.map +0 -1
  587. package/dist/cli-bundle/chunks/update-VQVHAY6X.js +0 -26
  588. package/dist/cli-bundle/chunks/update-VQVHAY6X.js.map +0 -7
  589. package/dist/cli-bundle/chunks/update-many-S7XWBSB3.js +0 -37
  590. package/dist/cli-bundle/chunks/update-many-S7XWBSB3.js.map +0 -7
  591. package/dist/cli-bundle/chunks/update-many-YIYW6XQ6.js +0 -41
  592. package/dist/cli-bundle/chunks/update-many-YIYW6XQ6.js.map +0 -1
  593. package/dist/cli-bundle/chunks/upgrade-OPRXA56R.js +0 -24
  594. package/dist/cli-bundle/chunks/upgrade-OPRXA56R.js.map +0 -7
  595. package/dist/cli-bundle/chunks/upgrade-WH4BTQLX.js +0 -28
  596. package/dist/cli-bundle/chunks/upgrade-WH4BTQLX.js.map +0 -1
  597. package/dist/cli-bundle/chunks/validate-4NTXSB62.js +0 -36
  598. package/dist/cli-bundle/chunks/validate-4NTXSB62.js.map +0 -1
  599. package/dist/cli-bundle/chunks/validate-MUFXQZMI.js +0 -32
  600. package/dist/cli-bundle/chunks/validate-MUFXQZMI.js.map +0 -7
  601. /package/dist/cli-bundle/chunks/{activity-WJCGCYPU.js.map → append-F7WPGIQL.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{activity-Z6QUAUSG.js.map → append-PVCTBVJG.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{chunk-R5BMJX33.js.map → chunk-2LEJGRQ7.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{chunk-AZYGZGGI.js.map → chunk-2TILG6F2.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{chunk-GJ7QC5DJ.js.map → chunk-3TYOW6RR.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{chunk-B6DUFX6H.js.map → chunk-3X542TEY.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{chunk-JJP45OEI.js.map → chunk-7VQ3JJN5.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{chunk-MWMVPCIE.js.map → chunk-AGAVEDIE.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{chunk-22KBU3MW.js.map → chunk-AJUON7E6.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{chunk-IWVU4C2F.js.map → chunk-DR2V5OIV.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{chunk-XG625QP4.js.map → chunk-EDO7VXSO.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{chunk-Y4M7CPQP.js.map → chunk-EVEPHNXJ.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{chunk-JDDLOQAE.js.map → chunk-FN6SB4HU.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{chunk-24YG75HI.js.map → chunk-H2SMKL2N.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{chunk-EGY6JBQ3.js.map → chunk-HX6QXV5P.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{chunk-Y46GD4IX.js.map → chunk-P3MJJW7P.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{chunk-MVYWGY2A.js.map → chunk-PDXJXEZJ.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{chunk-AGHMOTGM.js.map → chunk-TEKZOS7M.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{chunk-JVH7QBVV.js.map → chunk-V5ZWKJNY.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{chunk-KUOOJR35.js.map → chunk-VLEA2UTQ.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{chunk-MUH7A3FD.js.map → chunk-WCWVEXGA.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{chunk-NGXQ3PFT.js.map → chunk-YPMZMKN7.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{chunk-KGFUY7WN.js.map → chunk-YTD5GICJ.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{chunk-7DT4WSH2.js.map → chunk-ZO7CLOY2.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{aggregate-BDM6EIAR.js.map → close-3YYQ5OG2.js.map} +0 -0
  626. /package/dist/cli-bundle/chunks/{aggregate-VQ2DHU3S.js.map → close-Z3Q4U7TS.js.map} +0 -0
  627. /package/dist/cli-bundle/chunks/{append-RKJYPU74.js.map → close-many-3L2RXH3M.js.map} +0 -0
  628. /package/dist/cli-bundle/chunks/{append-BGML6VLD.js.map → close-many-D366FTIG.js.map} +0 -0
  629. /package/dist/cli-bundle/chunks/{claim-XP5AWZ5H.js.map → comments-54XDJNFE.js.map} +0 -0
  630. /package/dist/cli-bundle/chunks/{claim-RFS7BROJ.js.map → comments-HGHC2PN6.js.map} +0 -0
  631. /package/dist/cli-bundle/chunks/{close-2SSSHHUZ.js.map → copy-44RT5GDW.js.map} +0 -0
  632. /package/dist/cli-bundle/chunks/{close-GEANHQ2J.js.map → copy-UGMUGHZA.js.map} +0 -0
  633. /package/dist/cli-bundle/chunks/{close-many-CMZW7ITN.js.map → create-4GWJWPXG.js.map} +0 -0
  634. /package/dist/cli-bundle/chunks/{close-many-ZFDIG6M7.js.map → create-AZXCUYKP.js.map} +0 -0
  635. /package/dist/cli-bundle/chunks/{comments-XUBPXDYX.js.map → delete-Y6SXIQ4X.js.map} +0 -0
  636. /package/dist/cli-bundle/chunks/{comments-MFSYVNNU.js.map → delete-YQ2VPXNF.js.map} +0 -0
  637. /package/dist/cli-bundle/chunks/{config-T4FHBSYN.js.map → deps-BU5EBJDU.js.map} +0 -0
  638. /package/dist/cli-bundle/chunks/{config-D7XQMONX.js.map → deps-FMANWFRP.js.map} +0 -0
  639. /package/dist/cli-bundle/chunks/{context-DIU275XI.js.map → docs-OQBSJNIA.js.map} +0 -0
  640. /package/dist/cli-bundle/chunks/{context-JCOYB4LZ.js.map → docs-VNPBZXEL.js.map} +0 -0
  641. /package/dist/cli-bundle/chunks/{contracts-BVO7CSLK.js.map → files-72HZEBOE.js.map} +0 -0
  642. /package/dist/cli-bundle/chunks/{contracts-NYPEW2G4.js.map → files-HTSB2KJG.js.map} +0 -0
  643. /package/dist/cli-bundle/chunks/{copy-32ROBIDL.js.map → focus-FOG4ALC2.js.map} +0 -0
  644. /package/dist/cli-bundle/chunks/{copy-NAGLGMHZ.js.map → focus-SUTMKXGX.js.map} +0 -0
  645. /package/dist/cli-bundle/chunks/{create-E77SDCUP.js.map → history-compact-M6IFAMBP.js.map} +0 -0
  646. /package/dist/cli-bundle/chunks/{create-4V7SWNBB.js.map → history-compact-NEXRPP2O.js.map} +0 -0
  647. /package/dist/cli-bundle/chunks/{delete-RA5KTCLB.js.map → history-redact-NQX3OGZP.js.map} +0 -0
  648. /package/dist/cli-bundle/chunks/{delete-NQI5OSKN.js.map → history-redact-WQJBZ3PX.js.map} +0 -0
  649. /package/dist/cli-bundle/chunks/{deps-T7SCWXEX.js.map → history-repair-CBHMHAJO.js.map} +0 -0
  650. /package/dist/cli-bundle/chunks/{deps-32SU7HO5.js.map → history-repair-NHOJG7WO.js.map} +0 -0
  651. /package/dist/cli-bundle/chunks/{docs-WL2IWGWV.js.map → learnings-M64NTSOR.js.map} +0 -0
  652. /package/dist/cli-bundle/chunks/{docs-RRUPT7O2.js.map → learnings-T63JGKKN.js.map} +0 -0
  653. /package/dist/cli-bundle/chunks/{eval-NF2J5SHR.js.map → notes-73WE2UV2.js.map} +0 -0
  654. /package/dist/cli-bundle/chunks/{eval-SKDT3MZU.js.map → notes-U7L6HQQ2.js.map} +0 -0
  655. /package/dist/cli-bundle/chunks/{extension-ZISPBRBC.js.map → plan-OSCNYFGC.js.map} +0 -0
  656. /package/dist/cli-bundle/chunks/{extension-LAXKCAYE.js.map → plan-TN537L24.js.map} +0 -0
  657. /package/dist/cli-bundle/chunks/{files-PYKR2UUG.js.map → profile-MHAMXMHQ.js.map} +0 -0
  658. /package/dist/cli-bundle/chunks/{files-EWRQHGIS.js.map → profile-TIGLAKJ7.js.map} +0 -0
  659. /package/dist/cli-bundle/chunks/{focus-4T7TM4MT.js.map → restore-HC3YSWF7.js.map} +0 -0
  660. /package/dist/cli-bundle/chunks/{focus-L3YUASOD.js.map → restore-LFAMMRYZ.js.map} +0 -0
  661. /package/dist/cli-bundle/chunks/{gc-2PCTYYRI.js.map → schema-DAGSYO6E.js.map} +0 -0
  662. /package/dist/cli-bundle/chunks/{gc-2DNMPXMC.js.map → schema-UBXJCQAC.js.map} +0 -0
  663. /package/dist/cli-bundle/chunks/{get-VKQXCXLL.js.map → update-CJGG5WMV.js.map} +0 -0
  664. /package/dist/cli-bundle/chunks/{get-7DMITJ3G.js.map → update-LKD64AFP.js.map} +0 -0
  665. /package/dist/cli-bundle/chunks/{health-CVSTAR2F.js.map → update-many-G4SM7BHC.js.map} +0 -0
  666. /package/dist/cli-bundle/chunks/{health-TV3GKTFN.js.map → update-many-VLIV3D7R.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../../../../../core/fs/fs-utils.ts", "../../../../../../../../core/fs/path-utils.ts", "../../../../../../../../core/packages/root.ts", "../../../../../../../../core/extensions/extension-types.ts", "../../../../../../../../core/shared/constants.ts", "../../../../../../../../types.ts", "../../../../../../../../core/item/item-type-definition.ts", "../../../../../../../../core/item/type-registry.ts", "../../../../../../../../core/store/paths.ts", "../../../../../../../../core/shared/primitives.ts", "../../../../../../../../core/shared/levenshtein.ts", "../../../../../../../../core/extensions/extension-capability-aliases.ts", "../../../../../../../../core/extensions/extension-registries.ts", "../../../../../../../../core/extensions/extension-runtime-helpers.ts", "../../../../../../../../core/extensions/extension-hook-runtime.ts", "../../../../../../../../core/extensions/loader.ts", "../../../../../../../../core/extensions/flag-value-types.ts", "../../../../../../../../core/extensions/item-field-types.ts", "../../../../../../../../core/extensions/version-compat.ts", "../../../../../../../../core/extensions/extension-policy.ts", "../../../../../../../../core/extensions/capability-usage.ts", "../../../../../../../../core/schema/runtime-schema.ts"],
4
- "sourcesContent": ["/**\n * @module core/fs/fs-utils\n *\n * Provides filesystem helpers for Fs Utils.\n */\nimport * as fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport crypto from \"node:crypto\";\n\nconst WINDOWS_RENAME_RETRY_DELAYS_MS = [10, 25, 50, 100];\n\n/**\n * Implements ensure dir for the public runtime surface of this module.\n */\nexport async function ensureDir(dirPath: string): Promise<void> {\n await fs.mkdir(dirPath, { recursive: true });\n}\n\n/**\n * Implements path exists for the public runtime surface of this module.\n */\nexport async function pathExists(targetPath: string): Promise<boolean> {\n try {\n await fs.access(targetPath);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Implements read file if exists for the public runtime surface of this module.\n */\nexport async function readFileIfExists(targetPath: string): Promise<string | null> {\n try {\n return await fs.readFile(targetPath, \"utf8\");\n } catch (error: unknown) {\n if (isErrno(error, \"ENOENT\")) {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Implements write file atomic for the public runtime surface of this module.\n */\nexport async function writeFileAtomic(targetPath: string, contents: string): Promise<void> {\n const dirPath = path.dirname(targetPath);\n await ensureDir(dirPath);\n const tempPath = path.join(\n dirPath,\n `.${path.basename(targetPath)}.${process.pid}.${Date.now()}.${crypto.randomBytes(4).toString(\"hex\")}.tmp`,\n );\n await fs.writeFile(tempPath, contents, \"utf8\");\n try {\n await fs.rename(tempPath, targetPath);\n } catch (error: unknown) {\n if (\n process.platform === \"win32\" &&\n (isErrno(error, \"EPERM\") || isErrno(error, \"EBUSY\"))\n ) {\n let lastError = error;\n for (const delayMs of WINDOWS_RENAME_RETRY_DELAYS_MS) {\n await new Promise<void>((resolve) => setTimeout(resolve, delayMs));\n try {\n await fs.rename(tempPath, targetPath);\n return;\n } catch (retryError: unknown) {\n lastError = retryError;\n if (!isErrno(retryError, \"EPERM\") && !isErrno(retryError, \"EBUSY\")) {\n break;\n }\n }\n }\n try {\n await fs.unlink(tempPath);\n } catch {\n // Best-effort cleanup only.\n }\n throw lastError;\n }\n if (isErrno(error, \"EXDEV\")) {\n try {\n await fs.copyFile(tempPath, targetPath);\n } finally {\n try {\n await fs.unlink(tempPath);\n } catch {\n // Best-effort cleanup only.\n }\n }\n return;\n }\n try {\n await fs.unlink(tempPath);\n } catch {\n // Best-effort cleanup only.\n }\n throw error;\n }\n}\n\n/**\n * Append a single newline-terminated line to a file, opened with `O_APPEND`.\n *\n * Concurrency contract: `O_APPEND` makes the seek-to-EOF that precedes each\n * `write(2)` atomic, so independent appenders never overwrite each other's\n * bytes. For the common case the whole `${line}\\n` buffer is handed to the\n * kernel in one `write(2)`, which mainstream filesystems (ext4/xfs/apfs) commit\n * atomically under the inode lock — concurrent multi-process appends of small\n * records (e.g. the telemetry and OTLP-span queues) therefore stay\n * line-coherent without an external lock.\n *\n * The guarantee weakens only for a single record large enough that the OS\n * splits it across multiple `write(2)` calls (multi-KiB lines), where another\n * process's append could interleave between fragments. History JSONL — the only\n * caller that can produce large lines — is always written while the per-item\n * store lock is held (see core/store/item-store.ts), so those appends are\n * serialized regardless. Callers writing large records concurrently from\n * multiple processes must hold an equivalent lock.\n */\nexport async function appendLineAtomic(targetPath: string, line: string): Promise<void> {\n const dirPath = path.dirname(targetPath);\n await ensureDir(dirPath);\n const handle = await fs.open(targetPath, \"a\");\n try {\n await handle.writeFile(`${line}\\n`, \"utf8\");\n } finally {\n await handle.close();\n }\n}\n\n/**\n * Implements remove file if exists for the public runtime surface of this module.\n */\nexport async function removeFileIfExists(targetPath: string): Promise<void> {\n try {\n await fs.unlink(targetPath);\n } catch (error: unknown) {\n if (!isErrno(error, \"ENOENT\")) {\n throw error;\n }\n }\n}\n\nfunction isErrno(error: unknown, code: string): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === code;\n}\n", "/**\n * @module core/fs/path-utils\n *\n * Provides filesystem helpers for Path Utils.\n */\nimport path from \"path\";\n\n/**\n * Implements check whether path within directory for the public runtime surface of this module.\n */\nexport function isPathWithinDirectory(directory: string, targetPath: string): boolean {\n const relative = path.relative(directory, targetPath);\n if (relative.length === 0) {\n return true;\n }\n return !relative.startsWith(\"..\") && !path.isAbsolute(relative);\n}\n", "/**\n * @module core/packages/root\n *\n * Discovers and validates pm package manifests for Root.\n */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst PM_CLI_PACKAGE_NAME = \"@unbrained/pm-cli\";\n\nfunction packageJsonNamesPmCli(packageJsonPath: string): boolean {\n try {\n const parsed = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\")) as { name?: unknown };\n return parsed.name === PM_CLI_PACKAGE_NAME;\n } catch {\n return false;\n }\n}\n\n/**\n * Implements find pm package root from path for the public runtime surface of this module.\n */\nexport function findPmPackageRootFromPath(startPath: string): string | undefined {\n let current = fs.existsSync(startPath) && fs.statSync(startPath).isDirectory()\n ? path.resolve(startPath)\n : path.dirname(path.resolve(startPath));\n\n while (true) {\n const packageJsonPath = path.join(current, \"package.json\");\n if (fs.existsSync(packageJsonPath) && packageJsonNamesPmCli(packageJsonPath)) {\n return current;\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n return undefined;\n }\n current = parent;\n }\n}\n\n/**\n * Implements resolve pm package root from module for the public runtime surface of this module.\n */\nexport function resolvePmPackageRootFromModule(metaUrl: string, fallbackRelativeSegments: string[] = []): string {\n const modulePath = fileURLToPath(metaUrl);\n const discovered = findPmPackageRootFromPath(modulePath);\n if (discovered) {\n return discovered;\n }\n return path.resolve(path.dirname(modulePath), ...fallbackRelativeSegments);\n}\n\n/**\n * Read the pm-cli package version from the resolved package root's `package.json`.\n *\n * Centralizes the read+parse+guard logic shared by the CLI banner, the Sentry\n * release tag, the MCP `serverInfo`, and the upgrade check so they never drift.\n * Returns `undefined` when the version cannot be resolved; callers supply their\n * own fallback (the CLI/MCP use `\"0.0.0\"`). Resolution must never throw, so the\n * hot startup path is safe.\n */\nexport function resolvePmCliVersion(metaUrl: string, fallbackRelativeSegments: string[] = []): string | undefined {\n try {\n const packageJsonPath = path.join(resolvePmPackageRootFromModule(metaUrl, fallbackRelativeSegments), \"package.json\");\n if (!fs.existsSync(packageJsonPath)) {\n return undefined;\n }\n const parsed = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\")) as { version?: unknown };\n return typeof parsed.version === \"string\" && parsed.version.trim().length > 0 ? parsed.version : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Implements resolve configured pm package root for the public runtime surface of this module.\n */\nexport function resolveConfiguredPmPackageRoot(\n env: NodeJS.ProcessEnv = process.env,\n envName = \"PM_CLI_PACKAGE_ROOT\",\n metaUrl?: string,\n fallbackRelativeSegments: string[] = [],\n): string {\n const envRoot = env[envName];\n if (typeof envRoot === \"string\" && envRoot.trim().length > 0) {\n return path.resolve(envRoot.trim());\n }\n if (metaUrl) {\n return resolvePmPackageRootFromModule(metaUrl, fallbackRelativeSegments);\n }\n return process.cwd();\n}\n", "/**\n * @module core/extensions/extension-types\n *\n * Implements extension runtime contracts and governance for Extension Types.\n */\nimport type {\n ExtensionPolicyOverrideSettings,\n ExtensionPolicySettings,\n ItemDocument,\n ItemFrontMatter,\n ItemStatus,\n PmSettings,\n} from \"../../types/index.js\";\nimport type { GlobalOptions } from \"../shared/command-types.js\";\nimport type { ProjectProfileDefinition, ProjectProfileRegistrationInput } from \"../profile/profile-presets.js\";\n\nexport const KNOWN_EXTENSION_CAPABILITIES = [\n \"commands\",\n \"renderers\",\n \"hooks\",\n \"schema\",\n \"importers\",\n \"search\",\n \"parser\",\n \"preflight\",\n \"services\",\n] as const;\n/**\n * Restricts extension capability values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionCapability = (typeof KNOWN_EXTENSION_CAPABILITIES)[number];\nexport const EXTENSION_CAPABILITY_CONTRACT_VERSION = 2;\nexport const EXTENSION_CAPABILITY_LEGACY_ALIASES: Readonly<Record<string, ExtensionCapability>> = Object.freeze({\n migration: \"schema\",\n validation: \"schema\",\n});\nexport const EXTENSION_CAPABILITY_CONTRACT = Object.freeze({\n version: EXTENSION_CAPABILITY_CONTRACT_VERSION,\n capabilities: [...KNOWN_EXTENSION_CAPABILITIES],\n legacy_aliases: { ...EXTENSION_CAPABILITY_LEGACY_ALIASES },\n});\n\nexport const KNOWN_EXTENSION_POLICY_MODES = [\"off\", \"warn\", \"enforce\"] as const;\n/**\n * Restricts extension policy mode values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionPolicyMode = (typeof KNOWN_EXTENSION_POLICY_MODES)[number];\nexport const KNOWN_EXTENSION_TRUST_MODES = [\"off\", \"warn\", \"enforce\"] as const;\n/**\n * Restricts extension trust mode values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionTrustMode = (typeof KNOWN_EXTENSION_TRUST_MODES)[number];\nexport const KNOWN_EXTENSION_SANDBOX_PROFILES = [\"none\", \"restricted\", \"strict\"] as const;\n/**\n * Restricts extension sandbox profile values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionSandboxProfile = (typeof KNOWN_EXTENSION_SANDBOX_PROFILES)[number];\n\nexport const KNOWN_PM_MAX_VERSION_EXCEEDED_MODES = [\"block\", \"warn\"] as const;\n/** How a `pm_max_version` violation is handled for an extension layer. */\nexport type PmMaxVersionExceededMode = (typeof KNOWN_PM_MAX_VERSION_EXCEEDED_MODES)[number];\n/** Optional per-layer override map for `extensions.policy.pm_max_version_exceeded_mode`. */\nexport interface PmMaxVersionExceededModeByLayer {\n global?: PmMaxVersionExceededMode;\n project?: PmMaxVersionExceededMode;\n}\n/**\n * Settings value for `extensions.policy.pm_max_version_exceeded_mode`: either a\n * single mode applied to both layers, or a per-layer override map. Unset (and\n * any unset layer key) defaults to `\"block\"`.\n */\nexport type PmMaxVersionExceededModeSetting = PmMaxVersionExceededMode | PmMaxVersionExceededModeByLayer;\n\nexport const KNOWN_EXTENSION_POLICY_SURFACES = [\n \"commands.override\",\n \"commands.handler\",\n \"hooks.beforecommand\",\n \"hooks.aftercommand\",\n \"hooks.onwrite\",\n \"hooks.onread\",\n \"hooks.onindex\",\n \"schema.flags\",\n \"schema.itemfields\",\n \"schema.itemtypes\",\n \"schema.migrations\",\n \"schema.profiles\",\n \"parser.override\",\n \"preflight.override\",\n \"services.override\",\n \"renderers.override\",\n \"importers.importer\",\n \"importers.exporter\",\n \"search.provider\",\n \"search.vectorstore\",\n] as const;\n/**\n * Restricts extension policy surface values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionPolicySurface = (typeof KNOWN_EXTENSION_POLICY_SURFACES)[number];\n\nexport const KNOWN_EXTENSION_SERVICE_NAMES = [\n \"output_format\",\n \"error_format\",\n \"help_format\",\n \"lock_acquire\",\n \"lock_release\",\n \"history_append\",\n \"item_store_write\",\n \"item_store_delete\",\n] as const;\n/**\n * Restricts extension service name values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionServiceName = (typeof KNOWN_EXTENSION_SERVICE_NAMES)[number];\n\n/**\n * Documents the extension provenance metadata payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionProvenanceMetadata {\n source?: string;\n signature?: string;\n attestation?: string;\n verified?: boolean;\n}\n\n/**\n * Documents the extension runtime permission declaration payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionRuntimePermissionDeclaration {\n fs_read?: boolean;\n fs_write?: boolean;\n network?: boolean;\n env_read?: boolean;\n env_write?: boolean;\n process_spawn?: boolean;\n}\n\n/**\n * Documents the extension activation metadata payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionActivationMetadata {\n commands?: string[];\n}\n\n/**\n * Restricts extension policy override values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionPolicyOverride = ExtensionPolicyOverrideSettings;\n/**\n * Extension governance policy as read from / serialized to settings. Extends the\n * stored settings shape with `pm_max_version_exceeded_mode` (pm-k5e8), which\n * relaxes the default-BLOCK on `pm_max_version` violations to warn-only —\n * globally or per extension layer.\n */\nexport type ExtensionGovernancePolicy = ExtensionPolicySettings & {\n pm_max_version_exceeded_mode?: PmMaxVersionExceededModeSetting;\n};\n\n/**\n * Documents the extension manifest engines payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionManifestEngines {\n pm?: string;\n node?: string;\n [engine: string]: string | undefined;\n}\n\n/**\n * Implements create default extension governance policy for the public runtime surface of this module.\n */\nexport function createDefaultExtensionGovernancePolicy(): ExtensionGovernancePolicy {\n return {\n mode: \"off\",\n trust_mode: \"off\",\n require_provenance: false,\n trusted_extensions: [],\n default_sandbox_profile: \"none\",\n allowed_extensions: [],\n blocked_extensions: [],\n allowed_capabilities: [],\n blocked_capabilities: [],\n allowed_surfaces: [],\n blocked_surfaces: [],\n allowed_commands: [],\n blocked_commands: [],\n allowed_actions: [],\n blocked_actions: [],\n allowed_services: [],\n blocked_services: [],\n extension_overrides: [],\n };\n}\n\n/**\n * Restricts extension layer values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionLayer = \"global\" | \"project\";\n/**\n * Restricts extension status values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionStatus = \"ok\" | \"warn\";\n\n/**\n * Documents the extension manifest payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionManifest {\n name: string;\n version: string;\n entry: string;\n priority: number;\n capabilities: string[];\n manifest_version?: number;\n pm_min_version?: string;\n pm_max_version?: string;\n engines?: ExtensionManifestEngines;\n trusted?: boolean;\n provenance?: ExtensionProvenanceMetadata;\n sandbox_profile?: ExtensionSandboxProfile;\n permissions?: ExtensionRuntimePermissionDeclaration;\n activation?: ExtensionActivationMetadata;\n legacy_capability_aliases?: LegacyExtensionCapabilityAliasMapping[];\n}\n\n/**\n * Documents the extension diagnostic payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionDiagnostic {\n layer: ExtensionLayer;\n directory: string;\n manifest_path: string;\n name: string | null;\n version: string | null;\n entry: string | null;\n priority: number | null;\n entry_path: string | null;\n enabled: boolean | null;\n status: ExtensionStatus;\n}\n\n/**\n * Documents the effective extension payload exchanged by command, SDK, and package integrations.\n */\nexport interface EffectiveExtension {\n layer: ExtensionLayer;\n directory: string;\n manifest_path: string;\n name: string;\n source_package?: string;\n version: string;\n entry: string;\n priority: number;\n entry_path: string;\n manifest_version?: number;\n pm_min_version?: string;\n pm_max_version?: string;\n engines?: ExtensionManifestEngines;\n trusted?: boolean;\n provenance?: ExtensionProvenanceMetadata;\n sandbox_profile?: ExtensionSandboxProfile;\n permissions?: ExtensionRuntimePermissionDeclaration;\n capabilities?: string[];\n activation?: ExtensionActivationMetadata;\n}\n\n/**\n * Documents the extension discovery result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionDiscoveryResult {\n disabled_by_flag: boolean;\n roots: {\n global: string;\n project: string;\n };\n configured_enabled: string[];\n configured_disabled: string[];\n discovered: ExtensionDiagnostic[];\n effective: EffectiveExtension[];\n warnings: string[];\n policy: ExtensionGovernancePolicy;\n}\n\n/**\n * Documents the loaded extension payload exchanged by command, SDK, and package integrations.\n */\nexport interface LoadedExtension extends EffectiveExtension {\n module: unknown;\n}\n\n/**\n * Documents the failed extension load payload exchanged by command, SDK, and package integrations.\n */\nexport interface FailedExtensionLoad {\n layer: ExtensionLayer;\n name: string;\n entry_path: string;\n error: string;\n}\n\n/**\n * Documents the extension load result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionLoadResult extends ExtensionDiscoveryResult {\n loaded: LoadedExtension[];\n failed: FailedExtensionLoad[];\n}\n\n/**\n * Documents the before command hook context payload exchanged by command, SDK, and package integrations.\n */\nexport interface BeforeCommandHookContext {\n command: string;\n args: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root: string;\n}\n\n/**\n * Documents the after command hook context payload exchanged by command, SDK, and package integrations.\n */\nexport interface AfterCommandHookContext extends BeforeCommandHookContext {\n ok: boolean;\n error?: string;\n result?: unknown;\n affected?: AfterCommandAffectedItem[];\n}\n\n/**\n * Documents the after command affected item payload exchanged by command, SDK, and package integrations.\n */\nexport interface AfterCommandAffectedItem {\n id: string;\n op?: string;\n item_type?: string;\n previous_status?: ItemStatus;\n status?: ItemStatus;\n previous?: Partial<ItemFrontMatter>;\n current?: Partial<ItemFrontMatter>;\n changed_fields?: string[];\n}\n\n/**\n * Documents the on write hook context payload exchanged by command, SDK, and package integrations.\n */\nexport interface OnWriteHookContext {\n path: string;\n scope: \"project\" | \"global\";\n op: string;\n item_id?: string;\n item_type?: string;\n before?: ItemDocument;\n after?: ItemDocument;\n changed_fields?: string[];\n}\n\n/**\n * Documents the on read hook context payload exchanged by command, SDK, and package integrations.\n */\nexport interface OnReadHookContext {\n path: string;\n scope: \"project\" | \"global\";\n}\n\n/**\n * Documents the on index hook context payload exchanged by command, SDK, and package integrations.\n */\nexport interface OnIndexHookContext {\n mode: string;\n total_items?: number;\n}\n\n/**\n * Restricts before command hook values accepted by command, SDK, and storage contracts.\n */\nexport type BeforeCommandHook = (context: BeforeCommandHookContext) => Promise<void> | void;\n/**\n * Restricts after command hook values accepted by command, SDK, and storage contracts.\n */\nexport type AfterCommandHook = (context: AfterCommandHookContext) => Promise<void> | void;\n/**\n * Restricts on write hook values accepted by command, SDK, and storage contracts.\n */\nexport type OnWriteHook = (context: OnWriteHookContext) => Promise<void> | void;\n/**\n * Restricts on read hook values accepted by command, SDK, and storage contracts.\n */\nexport type OnReadHook = (context: OnReadHookContext) => Promise<void> | void;\n/**\n * Restricts on index hook values accepted by command, SDK, and storage contracts.\n */\nexport type OnIndexHook = (context: OnIndexHookContext) => Promise<void> | void;\n/**\n * Restricts output renderer format values accepted by command, SDK, and storage contracts.\n */\nexport type OutputRendererFormat = \"toon\" | \"json\";\n/**\n * Restricts command override values accepted by command, SDK, and storage contracts.\n */\nexport type CommandOverride = (context: CommandOverrideContext) => unknown;\n/**\n * Restricts renderer override values accepted by command, SDK, and storage contracts.\n */\nexport type RendererOverride = (context: RendererOverrideContext) => string | null | undefined;\n/**\n * Restricts command handler values accepted by command, SDK, and storage contracts.\n */\nexport type CommandHandler = (context: CommandHandlerContext) => unknown;\n/**\n * Restricts parser override values accepted by command, SDK, and storage contracts.\n */\nexport type ParserOverride = (context: ParserOverrideContext) => ParserOverrideDelta | Promise<ParserOverrideDelta>;\n/**\n * Restricts preflight override values accepted by command, SDK, and storage contracts.\n */\nexport type PreflightOverride = (context: PreflightOverrideContext) => PreflightOverrideDelta | Promise<PreflightOverrideDelta>;\n/**\n * Restricts service override values accepted by command, SDK, and storage contracts.\n */\nexport type ServiceOverride = (context: ServiceOverrideContext) => unknown;\n\n/**\n * Documents the registered extension hook payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionHook<THook> {\n layer: ExtensionLayer;\n name: string;\n run: THook;\n}\n\n/**\n * Documents the extension hook registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionHookRegistry {\n beforeCommand: Array<RegisteredExtensionHook<BeforeCommandHook>>;\n afterCommand: Array<RegisteredExtensionHook<AfterCommandHook>>;\n onWrite: Array<RegisteredExtensionHook<OnWriteHook>>;\n onRead: Array<RegisteredExtensionHook<OnReadHook>>;\n onIndex: Array<RegisteredExtensionHook<OnIndexHook>>;\n}\n\n/**\n * Documents the command override context payload exchanged by command, SDK, and package integrations.\n */\nexport interface CommandOverrideContext {\n command: string;\n args: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root: string;\n result: unknown;\n}\n\n/**\n * Documents the renderer override context payload exchanged by command, SDK, and package integrations.\n */\nexport interface RendererOverrideContext {\n format: OutputRendererFormat;\n command?: string;\n args?: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root?: string;\n result: unknown;\n}\n\n/**\n * Documents the command handler context payload exchanged by command, SDK, and package integrations.\n */\nexport interface CommandHandlerContext {\n command: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_root: string;\n}\n\n/**\n * Documents the parser override context payload exchanged by command, SDK, and package integrations.\n */\nexport type ParserOverrideContext = CommandHandlerContext;\n\n/**\n * Documents the parser override delta payload exchanged by command, SDK, and package integrations.\n */\nexport interface ParserOverrideDelta {\n args?: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n}\n\n/**\n * Documents the preflight override context payload exchanged by command, SDK, and package integrations.\n */\nexport interface PreflightOverrideContext extends CommandHandlerContext {\n decision: PreflightRuntimeDecision;\n}\n\n/**\n * Documents the preflight runtime decision payload exchanged by command, SDK, and package integrations.\n */\nexport interface PreflightRuntimeDecision {\n enforce_item_format_gate: boolean;\n run_preflight_item_format_sync: boolean;\n run_extension_migrations: boolean;\n enforce_mandatory_migration_gate: boolean;\n}\n\n/**\n * Documents the preflight override delta payload exchanged by command, SDK, and package integrations.\n */\nexport interface PreflightOverrideDelta extends ParserOverrideDelta {\n enforce_item_format_gate?: boolean;\n run_preflight_item_format_sync?: boolean;\n run_extension_migrations?: boolean;\n enforce_mandatory_migration_gate?: boolean;\n}\n\n/**\n * Documents the service override context payload exchanged by command, SDK, and package integrations.\n */\nexport interface ServiceOverrideContext {\n service: ExtensionServiceName;\n command?: string;\n args?: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root?: string;\n payload: unknown;\n}\n\n/**\n * Documents the extension command argument definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionCommandArgumentDefinition {\n name: string;\n required?: boolean;\n variadic?: boolean;\n description?: string;\n}\n\n/**\n * Documents the command definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface CommandDefinition {\n name: string;\n run?: CommandHandler;\n /**\n * @deprecated Use `run` instead. This alias remains for backward compatibility.\n */\n handler?: CommandHandler;\n action?: string;\n description?: string;\n intent?: string;\n examples?: string[];\n failure_hints?: string[];\n arguments?: ExtensionCommandArgumentDefinition[];\n flags?: FlagDefinition[];\n}\n\n/**\n * Optional command-definition metadata for first-class importer/exporter\n * registration.\n *\n * `registerImporter`/`registerExporter` always create a `<name> import` /\n * `<name> export` command path. By default that path only has a handler. When\n * these options are supplied, the auto-created command also gains a full command\n * definition (description, flags, intent, examples, failure hints, positional\n * arguments) — surfaced in help and runtime contracts exactly like\n * `registerCommand`. The registration `name` and `run` handler are implicit, so\n * they are not part of this options object.\n */\nexport interface ImportExportRegistrationOptions {\n action?: string;\n description?: string;\n intent?: string;\n examples?: string[];\n failure_hints?: string[];\n arguments?: ExtensionCommandArgumentDefinition[];\n flags?: FlagDefinition[];\n}\n\n/**\n * Restricts flag value type values accepted by command, SDK, and storage contracts.\n */\nexport type FlagValueType = \"string\" | \"number\" | \"boolean\";\n\n/**\n * Documents the flag definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface FlagDefinition {\n long?: string;\n short?: string;\n value_name?: string;\n description?: string;\n required?: boolean;\n enabled?: boolean;\n visible?: boolean;\n /**\n * Canonical flag value type. Prefer this field; it is the one runtime\n * contracts and help output read first.\n */\n value_type?: FlagValueType;\n /**\n * @deprecated Use `value_type`. Retained for backward compatibility: when\n * both are present `value_type` wins, and `type` resolves only when\n * `value_type` is absent (`value_type ?? type`).\n */\n type?: FlagValueType;\n /**\n * When true, a repeated comma-list flag accumulates values across repeats\n * — parity with core list flags such as `--tags` — instead of the last\n * value winning. Mirrors the core `CliFlagContract.list` field so\n * extension-registered list flags coalesce through the same bootstrap path.\n */\n list?: boolean;\n /**\n * Default value applied when the flag is omitted. Surfaced to runtime\n * contracts and help output. A `list` flag may default to an array of scalars\n * (e.g. `[\"a\", \"b\"]`); the array is flattened/coerced like any list value.\n */\n default?: string | number | boolean | Array<string | number | boolean>;\n [key: string]: unknown;\n}\n\n/**\n * Documents the schema field definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaFieldDefinition {\n name: string;\n type: string;\n optional?: boolean;\n [key: string]: unknown;\n}\n\n/**\n * Documents the schema item type command option policy definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaItemTypeCommandOptionPolicyDefinition {\n command: string;\n option: string;\n enabled?: boolean;\n required?: boolean;\n visible?: boolean;\n [key: string]: unknown;\n}\n\n/**\n * Documents the schema item type option definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaItemTypeOptionDefinition {\n key: string;\n values?: string[];\n required?: boolean;\n aliases?: string[];\n [key: string]: unknown;\n}\n\n/**\n * Documents the schema item type definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaItemTypeDefinition {\n name: string;\n folder?: string;\n aliases?: string[];\n required_create_fields?: string[];\n required_create_repeatables?: string[];\n command_option_policies?: SchemaItemTypeCommandOptionPolicyDefinition[];\n options?: SchemaItemTypeOptionDefinition[];\n [key: string]: unknown;\n}\n\n/**\n * Documents the schema migration run context payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaMigrationRunContext {\n id: string;\n command: \"migration\";\n layer: ExtensionLayer;\n extension: string;\n pm_root: string;\n status: string;\n}\n\n/**\n * Restricts schema migration runner values accepted by command, SDK, and storage contracts.\n */\nexport type SchemaMigrationRunner = (context: SchemaMigrationRunContext) => unknown | Promise<unknown>;\n\n/**\n * Documents the schema migration definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaMigrationDefinition {\n id?: string;\n description?: string;\n status?: string;\n mandatory?: boolean;\n run?: SchemaMigrationRunner;\n [key: string]: unknown;\n}\n\n/**\n * Documents the import export context payload exchanged by command, SDK, and package integrations.\n */\nexport interface ImportExportContext {\n registration: string;\n action: \"import\" | \"export\";\n command: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_root: string;\n}\n\n/**\n * Restricts importer values accepted by command, SDK, and storage contracts.\n */\nexport type Importer = (context: ImportExportContext) => unknown | Promise<unknown>;\n/**\n * Restricts exporter values accepted by command, SDK, and storage contracts.\n */\nexport type Exporter = (context: ImportExportContext) => unknown | Promise<unknown>;\n\n/**\n * Restricts extension search mode values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionSearchMode = \"keyword\" | \"semantic\" | \"hybrid\";\n\n/**\n * Documents the search provider query context payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderQueryContext {\n query: string;\n mode: ExtensionSearchMode;\n tokens: string[];\n options: Record<string, unknown>;\n settings: PmSettings;\n documents: ItemDocument[];\n [key: string]: unknown;\n}\n\n/**\n * Documents the search provider hit payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderHit {\n id: string;\n score: number;\n matched_fields?: string[];\n [key: string]: unknown;\n}\n\n/**\n * Restricts search provider query result values accepted by command, SDK, and storage contracts.\n */\nexport type SearchProviderQueryResult = SearchProviderHit[] | { hits?: SearchProviderHit[] };\n\n/**\n * Documents the search provider query expansion context payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderQueryExpansionContext {\n query: string;\n mode: Exclude<ExtensionSearchMode, \"keyword\">;\n settings: PmSettings;\n [key: string]: unknown;\n}\n\n/**\n * Restricts search provider query expansion result values accepted by command, SDK, and storage contracts.\n */\nexport type SearchProviderQueryExpansionResult = string[] | { queries?: string[] };\n\n/**\n * Documents the search provider rerank candidate payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderRerankCandidate {\n id: string;\n text: string;\n score: number;\n}\n\n/**\n * Documents the search provider rerank hit payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderRerankHit {\n id: string;\n score: number;\n}\n\n/**\n * Restricts search provider rerank result values accepted by command, SDK, and storage contracts.\n */\nexport type SearchProviderRerankResult = SearchProviderRerankHit[] | { hits?: SearchProviderRerankHit[] };\n\n/**\n * Documents the search provider rerank context payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderRerankContext {\n query: string;\n mode: \"hybrid\";\n model: string;\n top_k: number;\n settings: PmSettings;\n candidates: SearchProviderRerankCandidate[];\n [key: string]: unknown;\n}\n\n/**\n * Documents the search provider embed batch context payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderEmbedBatchContext {\n inputs: string[];\n settings: PmSettings;\n model: string;\n [key: string]: unknown;\n}\n\n/**\n * Documents the search provider embed context payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderEmbedContext {\n input: string;\n settings: PmSettings;\n model: string;\n [key: string]: unknown;\n}\n\n/**\n * Documents the search provider definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderDefinition {\n name: string;\n query?: (context: SearchProviderQueryContext) => SearchProviderQueryResult | Promise<SearchProviderQueryResult>;\n queryExpansion?: (\n context: SearchProviderQueryExpansionContext,\n ) => SearchProviderQueryExpansionResult | Promise<SearchProviderQueryExpansionResult>;\n query_expansion?: (\n context: SearchProviderQueryExpansionContext,\n ) => SearchProviderQueryExpansionResult | Promise<SearchProviderQueryExpansionResult>;\n rerank?: (context: SearchProviderRerankContext) => SearchProviderRerankResult | Promise<SearchProviderRerankResult>;\n embedBatch?: (context: SearchProviderEmbedBatchContext) => number[][] | Promise<number[][]>;\n embed_batch?: (context: SearchProviderEmbedBatchContext) => number[][] | Promise<number[][]>;\n embed?: (context: SearchProviderEmbedContext) => number[] | Promise<number[]>;\n [key: string]: unknown;\n}\n\n/**\n * Documents the vector store query hit payload exchanged by command, SDK, and package integrations.\n */\nexport interface VectorStoreQueryHit {\n id: string;\n score: number;\n payload?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n/**\n * Documents the vector store query context payload exchanged by command, SDK, and package integrations.\n */\nexport interface VectorStoreQueryContext {\n vector: number[];\n limit: number;\n settings: PmSettings;\n [key: string]: unknown;\n}\n\n/**\n * Documents the vector store upsert point payload exchanged by command, SDK, and package integrations.\n */\nexport interface VectorStoreUpsertPoint {\n id: string;\n vector: number[];\n payload?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n/**\n * Documents the vector store upsert context payload exchanged by command, SDK, and package integrations.\n */\nexport interface VectorStoreUpsertContext {\n points: VectorStoreUpsertPoint[];\n settings: PmSettings;\n [key: string]: unknown;\n}\n\n/**\n * Documents the vector store delete context payload exchanged by command, SDK, and package integrations.\n */\nexport interface VectorStoreDeleteContext {\n ids: string[];\n settings: PmSettings;\n [key: string]: unknown;\n}\n\n/**\n * Documents the vector store adapter definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface VectorStoreAdapterDefinition {\n name: string;\n query?: (context: VectorStoreQueryContext) => VectorStoreQueryHit[] | Promise<VectorStoreQueryHit[]>;\n upsert?: (context: VectorStoreUpsertContext) => unknown | Promise<unknown>;\n delete?: (context: VectorStoreDeleteContext) => unknown | Promise<unknown>;\n [key: string]: unknown;\n}\n\n/**\n * Documents the registered extension command override payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionCommandOverride {\n layer: ExtensionLayer;\n name: string;\n command: string;\n run: CommandOverride;\n}\n\n/**\n * Documents the registered extension command handler payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionCommandHandler {\n layer: ExtensionLayer;\n name: string;\n command: string;\n run: CommandHandler;\n}\n\n/**\n * Documents the registered extension parser override payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionParserOverride {\n layer: ExtensionLayer;\n name: string;\n command: string;\n run: ParserOverride;\n}\n\n/**\n * Documents the registered extension preflight override payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionPreflightOverride {\n layer: ExtensionLayer;\n name: string;\n run: PreflightOverride;\n}\n\n/**\n * Documents the registered extension service override payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionServiceOverride {\n layer: ExtensionLayer;\n name: string;\n service: ExtensionServiceName;\n run: ServiceOverride;\n}\n\n/**\n * Documents the registered extension renderer override payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionRendererOverride {\n layer: ExtensionLayer;\n name: string;\n format: OutputRendererFormat;\n run: RendererOverride;\n}\n\n/**\n * Documents the extension command registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionCommandRegistry {\n overrides: RegisteredExtensionCommandOverride[];\n handlers: RegisteredExtensionCommandHandler[];\n}\n\n/**\n * Documents the extension parser registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionParserRegistry {\n overrides: RegisteredExtensionParserOverride[];\n}\n\n/**\n * Documents the extension preflight registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionPreflightRegistry {\n overrides: RegisteredExtensionPreflightOverride[];\n}\n\n/**\n * Documents the extension service registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionServiceRegistry {\n overrides: RegisteredExtensionServiceOverride[];\n}\n\n/**\n * Documents the extension renderer registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionRendererRegistry {\n overrides: RegisteredExtensionRendererOverride[];\n}\n\n/**\n * Documents the registered extension flag definitions payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionFlagDefinitions {\n layer: ExtensionLayer;\n name: string;\n target_command: string;\n flags: FlagDefinition[];\n}\n\n/**\n * Documents the registered extension command definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionCommandDefinition {\n layer: ExtensionLayer;\n name: string;\n source_package?: string;\n command: string;\n action: string;\n description?: string;\n intent?: string;\n examples: string[];\n failure_hints: string[];\n arguments: ExtensionCommandArgumentDefinition[];\n}\n\n/**\n * Documents the registered extension schema field definitions payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionSchemaFieldDefinitions {\n layer: ExtensionLayer;\n name: string;\n fields: SchemaFieldDefinition[];\n}\n\n/**\n * Documents the registered extension schema item type definitions payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionSchemaItemTypeDefinitions {\n layer: ExtensionLayer;\n name: string;\n types: SchemaItemTypeDefinition[];\n}\n\n/**\n * Documents the registered extension schema migration definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionSchemaMigrationDefinition {\n layer: ExtensionLayer;\n name: string;\n definition: SchemaMigrationDefinition;\n runtime_definition: SchemaMigrationDefinition;\n}\n\n/**\n * Documents the registered extension importer payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionImporter {\n layer: ExtensionLayer;\n name: string;\n importer: string;\n}\n\n/**\n * Documents the registered extension exporter payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionExporter {\n layer: ExtensionLayer;\n name: string;\n exporter: string;\n}\n\n/**\n * Documents the registered extension search provider payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionSearchProvider {\n layer: ExtensionLayer;\n name: string;\n definition: SearchProviderDefinition;\n runtime_definition: SearchProviderDefinition;\n}\n\n/**\n * Documents the registered extension vector store adapter payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionVectorStoreAdapter {\n layer: ExtensionLayer;\n name: string;\n definition: VectorStoreAdapterDefinition;\n runtime_definition: VectorStoreAdapterDefinition;\n}\n\n/**\n * Documents a project profile contributed by an extension via\n * `api.registerProfile(profile)`.\n *\n * A profile is the broadest customization primitive an extension can ship: it\n * bundles item types, custom statuses, fields, per-type workflows, config knobs,\n * create templates, and package recommendations into one declarative archetype\n * that `pm profile apply` stages idempotently — the same shape as the\n * core-baked archetypes. Registering one makes it resolvable by name through\n * `pm profile list/show/apply` for as long as the owning package is active.\n */\nexport interface RegisteredExtensionProjectProfile {\n layer: ExtensionLayer;\n name: string;\n profile: ProjectProfileDefinition;\n}\n\n/**\n * Documents the extension registration registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionRegistrationRegistry {\n commands: RegisteredExtensionCommandDefinition[];\n flags: RegisteredExtensionFlagDefinitions[];\n item_fields: RegisteredExtensionSchemaFieldDefinitions[];\n item_types: RegisteredExtensionSchemaItemTypeDefinitions[];\n migrations: RegisteredExtensionSchemaMigrationDefinition[];\n profiles: RegisteredExtensionProjectProfile[];\n importers: RegisteredExtensionImporter[];\n exporters: RegisteredExtensionExporter[];\n search_providers: RegisteredExtensionSearchProvider[];\n vector_store_adapters: RegisteredExtensionVectorStoreAdapter[];\n}\n\n/**\n * Documents the extension registration counts payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionRegistrationCounts {\n commands: number;\n flags: number;\n item_fields: number;\n item_types: number;\n migrations: number;\n profiles: number;\n importers: number;\n exporters: number;\n search_providers: number;\n vector_store_adapters: number;\n}\n\n/**\n * Read-only identity an extension's `activate(api)` receives about itself, so\n * authors can emit self-identifying logs, gate on their own version, and build\n * better error messages without re-reading the on-disk manifest or duplicating\n * metadata in-module. Exposed as `api.extension`.\n */\nexport interface ExtensionSelfIdentity {\n readonly name: string;\n readonly layer: ExtensionLayer;\n readonly version: string;\n readonly capabilities: readonly ExtensionCapability[];\n readonly pm_min_version?: string;\n readonly pm_max_version?: string;\n readonly source_package?: string;\n}\n\n/**\n * Documents the extension api payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionApi {\n /** Read-only identity of the extension this `api` was created for. */\n readonly extension: ExtensionSelfIdentity;\n registerCommand(command: string, override: CommandOverride): void;\n registerCommand(definition: CommandDefinition): void;\n registerParser(command: string, override: ParserOverride): void;\n registerPreflight(override: PreflightOverride): void;\n registerService(service: ExtensionServiceName, override: ServiceOverride): void;\n registerFlags(targetCommand: string, flags: FlagDefinition[]): void;\n registerItemFields(fields: SchemaFieldDefinition[]): void;\n registerItemTypes(types: SchemaItemTypeDefinition[]): void;\n registerMigration(definition: SchemaMigrationDefinition): void;\n registerProfile(profile: ProjectProfileRegistrationInput): void;\n registerRenderer(format: OutputRendererFormat, renderer: RendererOverride): void;\n registerImporter(name: string, importer: Importer, options?: ImportExportRegistrationOptions): void;\n registerExporter(name: string, exporter: Exporter, options?: ImportExportRegistrationOptions): void;\n registerSearchProvider(provider: SearchProviderDefinition): void;\n registerVectorStoreAdapter(adapter: VectorStoreAdapterDefinition): void;\n hooks: {\n beforeCommand(hook: BeforeCommandHook): void;\n afterCommand(hook: AfterCommandHook): void;\n onWrite(hook: OnWriteHook): void;\n onRead(hook: OnReadHook): void;\n onIndex(hook: OnIndexHook): void;\n };\n}\n\n/**\n * Documents the failed extension activation payload exchanged by command, SDK, and package integrations.\n */\nexport interface FailedExtensionActivation {\n layer: ExtensionLayer;\n name: string;\n entry_path: string;\n error: string;\n trace?: ExtensionActivationFailureTrace;\n}\n\n/**\n * Documents the extension activation failure trace payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionActivationFailureTrace {\n method: string;\n /** `-1` means the failure happened before a numbered registration was accepted. */\n registration_index: number;\n command?: string;\n capability?: ExtensionCapability;\n missing_capability?: ExtensionCapability;\n expected_schema: string;\n received?: unknown;\n hint?: string;\n}\n\n/**\n * Documents the extension activation result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionActivationResult {\n hooks: ExtensionHookRegistry;\n commands: ExtensionCommandRegistry;\n parsers: ExtensionParserRegistry;\n preflight: ExtensionPreflightRegistry;\n services: ExtensionServiceRegistry;\n renderers: ExtensionRendererRegistry;\n registrations: ExtensionRegistrationRegistry;\n failed: FailedExtensionActivation[];\n warnings: string[];\n hook_counts: {\n before_command: number;\n after_command: number;\n on_write: number;\n on_read: number;\n on_index: number;\n };\n command_override_count: number;\n command_handler_count: number;\n parser_override_count: number;\n preflight_override_count: number;\n service_override_count: number;\n renderer_override_count: number;\n registration_counts: ExtensionRegistrationCounts;\n}\n\n/**\n * Documents the extension candidate payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionCandidate {\n layer: ExtensionLayer;\n directory: string;\n manifest_path: string;\n entry_path: string;\n manifest: ExtensionManifest;\n source_package?: string;\n}\n\n/**\n * Documents the extension layer scan result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionLayerScanResult {\n diagnostics: ExtensionDiagnostic[];\n warnings: string[];\n candidates: ExtensionCandidate[];\n}\n\n/**\n * Documents the scanned extension directory payload exchanged by command, SDK, and package integrations.\n */\nexport interface ScannedExtensionDirectory {\n diagnostic: ExtensionDiagnostic;\n warnings: string[];\n candidate: ExtensionCandidate | null;\n}\n\n/**\n * Documents the legacy extension capability alias mapping payload exchanged by command, SDK, and package integrations.\n */\nexport interface LegacyExtensionCapabilityAliasMapping {\n alias: string;\n target: ExtensionCapability;\n}\n\n/**\n * Documents the discover extensions options payload exchanged by command, SDK, and package integrations.\n */\nexport interface DiscoverExtensionsOptions {\n pmRoot: string;\n settings: PmSettings;\n cwd?: string;\n noExtensions?: boolean;\n reload_token?: string;\n cache_bust?: boolean;\n /**\n * Optional import-stage filter. Discovery still reports the full effective set,\n * but `loadExtensions` imports only entries accepted by this predicate.\n */\n extensionFilter?: (extension: EffectiveExtension) => boolean;\n}\n\n/**\n * Documents the activatable extension payload exchanged by command, SDK, and package integrations.\n */\nexport interface ActivatableExtension {\n activate: (api: ExtensionApi) => void | Promise<void>;\n /**\n * Optional teardown lifecycle hook, analogous to VS Code's `deactivate`\n * export. Invoked when the host tears the extension down — on long-running\n * MCP-server reload between requests, or via the `deactivateExtensions`\n * primitive — so an extension can close connections, clear timers, and\n * release buffers it opened during `activate`.\n */\n deactivate?: () => void | Promise<void>;\n}\n\n/**\n * Documents the extension deactivation failure payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionDeactivationFailure {\n layer: ExtensionLayer;\n name: string;\n error: string;\n}\n\n/**\n * Documents the extension deactivation options payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionDeactivationOptions {\n /**\n * Maximum time to wait for each extension's `deactivate` hook. Defaults to\n * 5000ms so a hanging teardown cannot block host shutdown or reload. Set to\n * 0 or Infinity only when the host intentionally wants to wait indefinitely.\n */\n deactivate_timeout_ms?: number;\n}\n\n/**\n * Documents the extension deactivation result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionDeactivationResult {\n /** Count of loaded extensions whose `deactivate` hook ran without throwing. */\n deactivated: number;\n warnings: string[];\n failed: ExtensionDeactivationFailure[];\n}\n\n/**\n * Documents the service override result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ServiceOverrideResult {\n handled: boolean;\n result: unknown;\n warnings: string[];\n}\n\n/**\n * Documents the command override result payload exchanged by command, SDK, and package integrations.\n */\nexport interface CommandOverrideResult {\n overridden: boolean;\n result: unknown;\n warnings: string[];\n}\n\n/**\n * Documents the command handler result payload exchanged by command, SDK, and package integrations.\n */\nexport interface CommandHandlerResult {\n handled: boolean;\n result: unknown;\n warnings: string[];\n /**\n * Human-readable, single-line, length-bounded message describing why an\n * extension command handler failed. Surfaced to the user/CI so the real cause\n * (e.g. \"Changelog is out of date: CHANGELOG.md\") is visible instead of only\n * the opaque `extension_command_handler_failed` warning code.\n */\n errorMessage?: string;\n}\n\n/**\n * Documents the parser override result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ParserOverrideResult {\n overridden: boolean;\n context: CommandHandlerContext;\n warnings: string[];\n}\n\n/**\n * Documents the preflight override result payload exchanged by command, SDK, and package integrations.\n */\nexport interface PreflightOverrideResult {\n overridden: boolean;\n context: CommandHandlerContext;\n decision: PreflightRuntimeDecision;\n warnings: string[];\n}\n\n/**\n * Documents the renderer override result payload exchanged by command, SDK, and package integrations.\n */\nexport interface RendererOverrideResult {\n overridden: boolean;\n rendered: string | null;\n warnings: string[];\n}\n\n/**\n * Documents the unknown extension capability warning details payload exchanged by command, SDK, and package integrations.\n */\nexport interface UnknownExtensionCapabilityWarningDetails {\n layer: ExtensionLayer;\n name: string;\n capability: string;\n allowed_capabilities: string[];\n capability_contract_version: number;\n suggested_capability?: string;\n suggestion_source?: \"legacy_alias\" | \"nearest_match\";\n legacy_alias_target?: string;\n}\n", "/**\n * @module core/shared/constants\n *\n * Provides shared primitives and utilities for Constants.\n */\nimport type {\n BuiltinItemType,\n GovernancePreset,\n GovernanceSettings,\n ItemFrontMatter,\n PmSettings,\n RuntimeStatusDefinition,\n RuntimeWorkflowDefinition,\n} from \"../../types/index.js\";\nimport { createDefaultExtensionGovernancePolicy } from \"../extensions/extension-types.js\";\n\n/**\n * Canonical default lifecycle status model and workflow role mapping.\n *\n * Single source of truth: `SETTINGS_DEFAULTS.schema` references these, and\n * `src/core/schema/runtime-schema.ts` re-exports them as\n * `DEFAULT_RUNTIME_STATUS_DEFINITIONS` / `DEFAULT_RUNTIME_WORKFLOW`.\n */\nexport const DEFAULT_STATUS_DEFINITIONS: ReadonlyArray<RuntimeStatusDefinition> = Object.freeze([\n {\n id: \"draft\",\n roles: [\"draft\"],\n },\n {\n id: \"open\",\n roles: [\"active\", \"default_open\"],\n },\n {\n id: \"in_progress\",\n aliases: [\"in-progress\"],\n roles: [\"active\"],\n },\n {\n id: \"blocked\",\n roles: [\"blocked\"],\n },\n {\n id: \"closed\",\n roles: [\"terminal\", \"terminal_done\", \"default_close\"],\n },\n {\n id: \"canceled\",\n aliases: [\"cancelled\"],\n roles: [\"terminal\", \"terminal_canceled\", \"default_cancel\"],\n },\n]);\n\nexport const DEFAULT_WORKFLOW_DEFINITION: RuntimeWorkflowDefinition = Object.freeze({\n draft_status: \"draft\",\n open_status: \"open\",\n in_progress_status: \"in_progress\",\n blocked_status: \"blocked\",\n close_status: \"closed\",\n canceled_status: \"canceled\",\n});\n\nexport const PM_DIRNAME = \".agents/pm\";\nexport const SETTINGS_FILENAME = \"settings.json\";\n\n/**\n * GH-249: placeholder close reason recorded when `pm create --status closed`\n * lands an item directly in the close status under\n * `governance.require_close_reason` and no --message/--resolution text is\n * available. Mirrors `pm update --status closed`'s \"Closed via pm update\"\n * default so all three closure paths record a reason.\n */\nexport const CREATE_DIRECT_CLOSE_REASON_DEFAULT = \"Closed at creation via pm create\";\n\nexport const PM_CORE_REQUIRED_SUBDIRS = [\n \"\",\n \"epics\",\n \"features\",\n \"tasks\",\n \"chores\",\n \"issues\",\n \"schema\",\n \"history\",\n \"search\",\n \"extensions\",\n \"locks\",\n] as const;\n\nexport const PM_OPTIONAL_TYPE_SUBDIRS = [\n \"decisions\",\n \"events\",\n \"reminders\",\n \"milestones\",\n \"meetings\",\n \"plans\",\n] as const;\n\nexport const PM_REQUIRED_SUBDIRS = [...PM_CORE_REQUIRED_SUBDIRS, ...PM_OPTIONAL_TYPE_SUBDIRS] as const;\n\nexport const TYPE_TO_FOLDER: Record<BuiltinItemType, string> = {\n Epic: \"epics\",\n Feature: \"features\",\n Task: \"tasks\",\n Chore: \"chores\",\n Issue: \"issues\",\n Decision: \"decisions\",\n Event: \"events\",\n Reminder: \"reminders\",\n Milestone: \"milestones\",\n Meeting: \"meetings\",\n Plan: \"plans\",\n};\n\nexport const FRONT_MATTER_KEY_ORDER: ReadonlyArray<string> = [\n \"id\",\n \"title\",\n \"description\",\n \"type\",\n \"pm_format_version\",\n \"source_type\",\n \"type_options\",\n \"status\",\n \"priority\",\n \"tags\",\n \"created_at\",\n \"updated_at\",\n \"deadline\",\n \"reminders\",\n \"events\",\n \"closed_at\",\n \"assignee\",\n \"source_owner\",\n \"author\",\n \"estimated_minutes\",\n \"acceptance_criteria\",\n \"design\",\n \"external_ref\",\n \"definition_of_ready\",\n \"order\",\n \"goal\",\n \"objective\",\n \"value\",\n \"impact\",\n \"outcome\",\n \"why_now\",\n \"parent\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n \"blocked_by\",\n \"blocked_reason\",\n \"unblock_note\",\n \"reporter\",\n \"severity\",\n \"environment\",\n \"repro_steps\",\n \"resolution\",\n \"expected_result\",\n \"actual_result\",\n \"affected_version\",\n \"fixed_version\",\n \"component\",\n \"regression\",\n \"customer_impact\",\n \"dependencies\",\n \"comments\",\n \"notes\",\n \"learnings\",\n \"files\",\n \"tests\",\n \"test_runs\",\n \"docs\",\n \"close_reason\",\n \"duplicate_of\",\n \"plan_mode\",\n \"plan_scope\",\n \"plan_harness\",\n \"plan_resume_context\",\n \"plan_validation\",\n \"plan_decisions\",\n \"plan_discoveries\",\n \"plan_steps\",\n];\n\ntype BuiltinGovernancePreset = Exclude<GovernancePreset, \"custom\">;\n\nexport const GOVERNANCE_PRESET_DEFAULTS: Record<BuiltinGovernancePreset, Omit<GovernanceSettings, \"preset\">> = {\n minimal: {\n ownership_enforcement: \"none\",\n create_mode_default: \"progressive\",\n close_validation_default: \"off\",\n require_close_reason: true,\n parent_reference: \"strict_error\",\n metadata_profile: \"core\",\n force_required_for_stale_lock: false,\n },\n default: {\n ownership_enforcement: \"warn\",\n create_mode_default: \"progressive\",\n close_validation_default: \"warn\",\n require_close_reason: true,\n parent_reference: \"strict_error\",\n metadata_profile: \"core\",\n force_required_for_stale_lock: true,\n },\n strict: {\n ownership_enforcement: \"strict\",\n create_mode_default: \"strict\",\n close_validation_default: \"strict\",\n require_close_reason: true,\n parent_reference: \"strict_error\",\n metadata_profile: \"strict\",\n force_required_for_stale_lock: true,\n },\n};\n\nexport const DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS = [\n \"no active blocker\",\n \"ready for planned execution sequencing\",\n \"work completed\",\n \"work is closed\",\n] as const;\n\nexport const DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS = {\n blocked_reason: [\"no active blocker because work is closed\", \"work is closed\"],\n resolution: [\"closed with implementation evidence\", \"closed with verification evidence\", \"work completed and recorded\", \"work is closed\"],\n actual_result: [\"closed and recorded\", \"work completed\", \"work completed and recorded\"],\n} as const;\n\nfunction cloneOptionalArray<T>(values: readonly T[] | undefined): T[] | undefined {\n return values ? [...values] : undefined;\n}\n\nexport const SETTINGS_DEFAULTS: PmSettings = {\n version: 1,\n id_prefix: \"pm-\",\n author_default: \"\",\n item_format: \"toon\",\n locks: {\n ttl_seconds: 1800,\n wait_ms: 3000,\n },\n checkpoints: {\n retention_days: 14,\n },\n output: {\n default_format: \"toon\",\n },\n history: {\n missing_stream: \"auto_create\",\n compact_policy: {\n enabled: false,\n max_entries: 500,\n trigger: \"health_warn\",\n },\n },\n validation: {\n sprint_release_format: \"warn\",\n parent_reference: \"warn\",\n metadata_profile: \"core\",\n metadata_required_fields: [],\n lifecycle_stale_blocker_reason_patterns: [...DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS],\n lifecycle_closure_like_blocked_reason_patterns: [\n ...DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.blocked_reason,\n ],\n lifecycle_closure_like_resolution_patterns: [...DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.resolution],\n lifecycle_closure_like_actual_result_patterns: [\n ...DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.actual_result,\n ],\n estimate_defaults_by_type: {},\n },\n governance: {\n preset: \"minimal\",\n ...GOVERNANCE_PRESET_DEFAULTS.minimal,\n },\n workflow: {\n definition_of_done: [],\n },\n testing: {\n record_results_to_items: false,\n },\n telemetry: {\n enabled: true,\n first_run_prompt_completed: false,\n capture_level: \"redacted\",\n endpoint: \"https://pm-cli.unbrained.dev/v1/events\",\n installation_id: \"\",\n retention_days: 365,\n },\n agent_guidance: {\n prompt_completed: false,\n declined: false,\n declined_at: \"\",\n template_version: 1,\n last_checked_files: [],\n },\n item_types: {\n definitions: [],\n },\n schema: {\n version: 1,\n files: {\n types: \"schema/types.json\",\n statuses: \"schema/statuses.json\",\n fields: \"schema/fields.json\",\n workflows: \"schema/workflows.json\",\n },\n statuses: DEFAULT_STATUS_DEFINITIONS.map((definition) => ({\n ...definition,\n aliases: cloneOptionalArray(definition.aliases),\n roles: cloneOptionalArray(definition.roles),\n })),\n fields: [],\n workflow: { ...DEFAULT_WORKFLOW_DEFINITION },\n unknown_field_policy: \"allow\",\n },\n extensions: {\n enabled: [],\n disabled: [],\n policy: createDefaultExtensionGovernancePolicy(),\n },\n search: {\n score_threshold: 0,\n hybrid_semantic_weight: 0.7,\n max_results: 50,\n embedding_model: \"\",\n embedding_batch_size: 32,\n embedding_timeout_ms: 30_000,\n scanner_max_batch_retries: 3,\n provider: \"\",\n mutation_refresh_policy: \"semantic_configured\",\n query_expansion: {\n enabled: false,\n provider: \"\",\n },\n rerank: {\n enabled: false,\n model: \"\",\n top_k: 20,\n },\n },\n providers: {\n openai: {\n base_url: \"\",\n api_key: \"\",\n model: \"\",\n },\n ollama: {\n base_url: \"\",\n model: \"\",\n },\n },\n context: {\n default_depth: \"brief\",\n activity_limit: 10,\n stale_threshold_days: 7,\n sections: {\n hierarchy: true,\n activity: true,\n progress: true,\n recently_created: true,\n unparented: true,\n blockers: true,\n files: true,\n workload: true,\n staleness: true,\n tests: true,\n },\n },\n vector_store: {\n adapter: \"\",\n collection_name: \"pm_items\",\n qdrant: {\n url: \"\",\n api_key: \"\",\n },\n lancedb: {\n path: \"\",\n },\n },\n};\n\nexport const EMPTY_CANONICAL_DOCUMENT = {\n metadata: {},\n body: \"\",\n};\n\nexport const EXIT_CODE = {\n SUCCESS: 0,\n GENERIC_FAILURE: 1,\n USAGE: 2,\n NOT_FOUND: 3,\n CONFLICT: 4,\n DEPENDENCY_FAILED: 5,\n} as const;\n\n/**\n * Restricts telemetry error category values accepted by command, SDK, and storage contracts.\n */\nexport type TelemetryErrorCategory = \"usage\" | \"validation\" | \"conflict\" | \"runtime\" | \"unknown\";\n\nexport const TELEMETRY_ERROR_CATEGORY_BY_CODE: Readonly<Record<string, TelemetryErrorCategory>> = Object.freeze({\n unknown_command: \"usage\",\n unknown_option: \"usage\",\n missing_required_option: \"usage\",\n missing_required_argument: \"usage\",\n invalid_command_usage: \"usage\",\n linked_test_value_not_quoted: \"usage\",\n invalid_argument_value: \"validation\",\n health_findings: \"validation\",\n validation_findings: \"validation\",\n close_through_update: \"validation\",\n no_update_fields: \"validation\",\n unsupported_update_option: \"validation\",\n tracker_not_initialized: \"validation\",\n item_not_found: \"validation\",\n ownership_conflict: \"conflict\",\n lock_conflict: \"conflict\",\n terminal_state_conflict: \"conflict\",\n dependency_failed: \"runtime\",\n command_failed: \"runtime\",\n unknown_error: \"runtime\",\n});\n\n/**\n * Implements resolve telemetry error category for the public runtime surface of this module.\n */\nexport function resolveTelemetryErrorCategory(errorCode: string | undefined): TelemetryErrorCategory {\n const normalized = (errorCode ?? \"\").trim().toLowerCase();\n if (normalized.length === 0) {\n return \"unknown\";\n }\n const explicit = TELEMETRY_ERROR_CATEGORY_BY_CODE[normalized];\n if (typeof explicit === \"string\") {\n return explicit;\n }\n if (normalized.includes(\"conflict\") || normalized.includes(\"locked\")) {\n return \"conflict\";\n }\n if (normalized.startsWith(\"unknown_\") || normalized.startsWith(\"missing_required_\")) {\n return \"usage\";\n }\n if (normalized.startsWith(\"invalid_\") || normalized.endsWith(\"_not_found\") || normalized.includes(\"validation\")) {\n return \"validation\";\n }\n if (normalized.endsWith(\"_error\") || normalized.endsWith(\"_failed\")) {\n return \"runtime\";\n }\n return \"unknown\";\n}\n", "/**\n * @module types\n *\n * Defines the shared project-management data model used by CLI, SDK, MCP, and packages.\n */\nexport const BUILTIN_ITEM_TYPE_VALUES = [\n \"Epic\",\n \"Feature\",\n \"Task\",\n \"Chore\",\n \"Issue\",\n \"Decision\",\n \"Event\",\n \"Reminder\",\n \"Milestone\",\n \"Meeting\",\n \"Plan\",\n] as const;\nexport const ITEM_TYPE_VALUES = BUILTIN_ITEM_TYPE_VALUES;\n/**\n * Restricts builtin item type values accepted by command, SDK, and storage contracts.\n */\nexport type BuiltinItemType = (typeof BUILTIN_ITEM_TYPE_VALUES)[number];\n/**\n * Restricts item type values accepted by command, SDK, and storage contracts.\n */\nexport type ItemType = string;\n\nexport const STATUS_VALUES = [\n \"draft\",\n \"open\",\n \"in_progress\",\n \"blocked\",\n \"closed\",\n \"canceled\",\n] as const;\n/**\n * Restricts item status values accepted by command, SDK, and storage contracts.\n */\nexport type ItemStatus = string;\n\nexport const RUNTIME_STATUS_ROLE_VALUES = [\n \"draft\",\n \"active\",\n \"blocked\",\n \"terminal\",\n \"terminal_done\",\n \"terminal_canceled\",\n \"default_open\",\n \"default_close\",\n \"default_cancel\",\n] as const;\n/**\n * Restricts runtime status role values accepted by command, SDK, and storage contracts.\n */\nexport type RuntimeStatusRole = (typeof RUNTIME_STATUS_ROLE_VALUES)[number];\n\nexport const RUNTIME_FIELD_TYPE_VALUES = [\"string\", \"number\", \"boolean\", \"string_array\"] as const;\n/**\n * Restricts runtime field type values accepted by command, SDK, and storage contracts.\n */\nexport type RuntimeFieldType = (typeof RUNTIME_FIELD_TYPE_VALUES)[number];\n\nexport const RUNTIME_FIELD_COMMAND_VALUES = [\"create\", \"update\", \"update_many\", \"list\", \"search\", \"calendar\", \"context\"] as const;\n/**\n * Restricts runtime field command values accepted by command, SDK, and storage contracts.\n */\nexport type RuntimeFieldCommand = (typeof RUNTIME_FIELD_COMMAND_VALUES)[number];\n\nexport const RUNTIME_UNKNOWN_FIELD_POLICY_VALUES = [\"allow\", \"warn\", \"reject\"] as const;\n/**\n * Restricts runtime unknown field policy values accepted by command, SDK, and storage contracts.\n */\nexport type RuntimeUnknownFieldPolicy = (typeof RUNTIME_UNKNOWN_FIELD_POLICY_VALUES)[number];\n\nexport const DEPENDENCY_KIND_VALUES = [\n \"blocks\",\n \"parent\",\n \"child\",\n \"parent_child\",\n \"child_of\",\n \"related\",\n \"related_to\",\n \"discovered_from\",\n \"blocked_by\",\n \"incident_from\",\n \"epic\",\n \"supersedes\",\n \"task\",\n] as const;\n/**\n * Restricts dependency kind values accepted by command, SDK, and storage contracts.\n */\nexport type DependencyKind = (typeof DEPENDENCY_KIND_VALUES)[number];\n\nexport const SCOPE_VALUES = [\"project\", \"global\"] as const;\n/**\n * Restricts link scope values accepted by command, SDK, and storage contracts.\n */\nexport type LinkScope = (typeof SCOPE_VALUES)[number];\n\nexport const RISK_VALUES = [\"low\", \"medium\", \"high\", \"critical\"] as const;\n/**\n * Restricts risk level values accepted by command, SDK, and storage contracts.\n */\nexport type RiskLevel = (typeof RISK_VALUES)[number];\n\nexport const ISSUE_SEVERITY_VALUES = [\"low\", \"medium\", \"high\", \"critical\"] as const;\n/**\n * Restricts issue severity values accepted by command, SDK, and storage contracts.\n */\nexport type IssueSeverity = (typeof ISSUE_SEVERITY_VALUES)[number];\n\nexport const CONFIDENCE_TEXT_VALUES = [\"low\", \"medium\", \"high\"] as const;\n/**\n * Restricts confidence text level values accepted by command, SDK, and storage contracts.\n */\nexport type ConfidenceTextLevel = (typeof CONFIDENCE_TEXT_VALUES)[number];\n/**\n * Restricts confidence value values accepted by command, SDK, and storage contracts.\n */\nexport type ConfidenceValue = number | ConfidenceTextLevel;\n\nexport const ITEM_FORMAT_VALUES = [\"toon\", \"json_markdown\"] as const;\n/**\n * Restricts item format values accepted by command, SDK, and storage contracts.\n */\nexport type ItemFormat = (typeof ITEM_FORMAT_VALUES)[number];\n\nexport const SPRINT_RELEASE_FORMAT_POLICY_VALUES = [\"warn\", \"strict_error\"] as const;\n/**\n * Restricts sprint release format policy values accepted by command, SDK, and storage contracts.\n */\nexport type SprintReleaseFormatPolicy = (typeof SPRINT_RELEASE_FORMAT_POLICY_VALUES)[number];\nexport const PARENT_REFERENCE_POLICY_VALUES = [\"warn\", \"strict_error\"] as const;\n/**\n * Restricts parent reference policy values accepted by command, SDK, and storage contracts.\n */\nexport type ParentReferencePolicy = (typeof PARENT_REFERENCE_POLICY_VALUES)[number];\nexport const VALIDATE_METADATA_PROFILE_VALUES = [\"core\", \"strict\", \"custom\"] as const;\n/**\n * Restricts validate metadata profile values accepted by command, SDK, and storage contracts.\n */\nexport type ValidateMetadataProfile = (typeof VALIDATE_METADATA_PROFILE_VALUES)[number];\nexport const GOVERNANCE_PRESET_VALUES = [\"minimal\", \"default\", \"strict\", \"custom\"] as const;\n/**\n * Restricts governance preset values accepted by command, SDK, and storage contracts.\n */\nexport type GovernancePreset = (typeof GOVERNANCE_PRESET_VALUES)[number];\nexport const GOVERNANCE_OWNERSHIP_ENFORCEMENT_VALUES = [\"none\", \"warn\", \"strict\"] as const;\n/**\n * Restricts governance ownership enforcement values accepted by command, SDK, and storage contracts.\n */\nexport type GovernanceOwnershipEnforcement = (typeof GOVERNANCE_OWNERSHIP_ENFORCEMENT_VALUES)[number];\nexport const GOVERNANCE_CREATE_MODE_DEFAULT_VALUES = [\"progressive\", \"strict\"] as const;\n/**\n * Restricts governance create mode default values accepted by command, SDK, and storage contracts.\n */\nexport type GovernanceCreateModeDefault = (typeof GOVERNANCE_CREATE_MODE_DEFAULT_VALUES)[number];\nexport const GOVERNANCE_CLOSE_VALIDATION_DEFAULT_VALUES = [\"off\", \"warn\", \"strict\"] as const;\n/**\n * Restricts governance close validation default values accepted by command, SDK, and storage contracts.\n */\nexport type GovernanceCloseValidationDefault = (typeof GOVERNANCE_CLOSE_VALIDATION_DEFAULT_VALUES)[number];\nexport const GOVERNANCE_WORKFLOW_ENFORCEMENT_VALUES = [\"off\", \"warn\", \"strict\"] as const;\n/**\n * Restricts governance workflow enforcement values accepted by command, SDK, and storage contracts.\n */\nexport type GovernanceWorkflowEnforcement = (typeof GOVERNANCE_WORKFLOW_ENFORCEMENT_VALUES)[number];\nexport const VALIDATE_METADATA_REQUIRED_FIELD_VALUES = [\n \"author\",\n \"acceptance_criteria\",\n \"estimated_minutes\",\n \"close_reason\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n] as const;\n/**\n * Restricts validate metadata required field values accepted by command, SDK, and storage contracts.\n */\nexport type ValidateMetadataRequiredField = (typeof VALIDATE_METADATA_REQUIRED_FIELD_VALUES)[number];\n\nexport const RECURRENCE_FREQUENCY_VALUES = [\"daily\", \"weekly\", \"monthly\", \"yearly\"] as const;\n/**\n * Restricts recurrence frequency values accepted by command, SDK, and storage contracts.\n */\nexport type RecurrenceFrequency = (typeof RECURRENCE_FREQUENCY_VALUES)[number];\n\nexport const RECURRENCE_WEEKDAY_VALUES = [\"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\", \"sun\"] as const;\n/**\n * Restricts recurrence weekday values accepted by command, SDK, and storage contracts.\n */\nexport type RecurrenceWeekday = (typeof RECURRENCE_WEEKDAY_VALUES)[number];\n\n/**\n * Canonical week-order index for a recurrence weekday (mon=0 .. sun=6).\n * Shared by item serialization, create/update parsing, and calendar expansion\n * so weekday ordering cannot drift between those modules.\n */\nexport function weekdayOrderIndex(value: RecurrenceWeekday): number {\n return RECURRENCE_WEEKDAY_VALUES.indexOf(value);\n}\n\n/**\n * Documents the dependency payload exchanged by command, SDK, and package integrations.\n */\nexport interface Dependency {\n id: string;\n kind: DependencyKind;\n created_at: string;\n author?: string;\n source_kind?: string;\n}\n\n/**\n * Documents the comment payload exchanged by command, SDK, and package integrations.\n */\nexport interface Comment {\n created_at: string;\n author: string;\n text: string;\n}\n\n/**\n * Documents the log note payload exchanged by command, SDK, and package integrations.\n */\nexport interface LogNote {\n created_at: string;\n author: string;\n text: string;\n}\n\n/**\n * Documents the linked file payload exchanged by command, SDK, and package integrations.\n */\nexport interface LinkedFile {\n path: string;\n scope: LinkScope;\n note?: string;\n}\n\n/**\n * Documents the linked test payload exchanged by command, SDK, and package integrations.\n */\nexport interface LinkedTest {\n command?: string;\n path?: string;\n scope: LinkScope;\n timeout_seconds?: number;\n pm_context_mode?: \"schema\" | \"tracker\" | \"auto\";\n env_set?: Record<string, string>;\n env_clear?: string[];\n shared_host_safe?: boolean;\n assert_stdout_contains?: string[];\n assert_stdout_regex?: string[];\n assert_stderr_contains?: string[];\n assert_stderr_regex?: string[];\n assert_stdout_min_lines?: number;\n assert_json_field_equals?: Record<string, string>;\n assert_json_field_gte?: Record<string, number>;\n note?: string;\n}\n\n/**\n * Documents the linked doc payload exchanged by command, SDK, and package integrations.\n */\nexport interface LinkedDoc {\n path: string;\n scope: LinkScope;\n note?: string;\n}\n\n/**\n * Documents the reminder payload exchanged by command, SDK, and package integrations.\n */\nexport interface Reminder {\n at: string;\n text: string;\n}\n\n/**\n * Documents the recurrence rule payload exchanged by command, SDK, and package integrations.\n */\nexport interface RecurrenceRule {\n freq: RecurrenceFrequency;\n interval?: number;\n count?: number;\n until?: string;\n by_weekday?: RecurrenceWeekday[];\n by_month_day?: number[];\n exdates?: string[];\n}\n\n/**\n * Documents the calendar event payload exchanged by command, SDK, and package integrations.\n */\nexport interface CalendarEvent {\n start_at: string;\n end_at?: string;\n title?: string;\n description?: string;\n location?: string;\n all_day?: boolean;\n timezone?: string;\n recurrence?: RecurrenceRule;\n}\n\nexport const PLAN_MODE_VALUES = [\n \"draft\",\n \"research\",\n \"review\",\n \"approved\",\n \"executing\",\n \"paused\",\n \"completed\",\n \"superseded\",\n] as const;\n/**\n * Restricts plan mode values accepted by command, SDK, and storage contracts.\n */\nexport type PlanMode = (typeof PLAN_MODE_VALUES)[number];\n\nexport const PLAN_STEP_STATUS_VALUES = [\n \"pending\",\n \"in_progress\",\n \"completed\",\n \"blocked\",\n \"skipped\",\n \"superseded\",\n] as const;\n/**\n * Restricts plan step status values accepted by command, SDK, and storage contracts.\n */\nexport type PlanStepStatus = (typeof PLAN_STEP_STATUS_VALUES)[number];\n\nexport const PLAN_HARNESS_VALUES = [\"codex\", \"claude-code\", \"cursor\", \"generic\"] as const;\n/**\n * Restricts plan harness values accepted by command, SDK, and storage contracts.\n */\nexport type PlanHarness = (typeof PLAN_HARNESS_VALUES)[number];\n\nexport const PLAN_STEP_LINK_KIND_VALUES = [\n \"related\",\n \"blocks\",\n \"blocked_by\",\n \"depends_on\",\n \"discovered_from\",\n \"implements\",\n \"verifies\",\n \"supersedes\",\n] as const;\n/**\n * Restricts plan step link kind values accepted by command, SDK, and storage contracts.\n */\nexport type PlanStepLinkKind = (typeof PLAN_STEP_LINK_KIND_VALUES)[number];\n\n/**\n * Documents the plan step link payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStepLink {\n id: string;\n kind: PlanStepLinkKind;\n note?: string;\n required_before_step?: boolean;\n}\n\n/**\n * Documents the plan step file payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStepFile {\n path: string;\n scope?: LinkScope;\n note?: string;\n}\n\n/**\n * Documents the plan step test payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStepTest {\n command?: string;\n path?: string;\n note?: string;\n}\n\n/**\n * Documents the plan step doc payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStepDoc {\n path: string;\n scope?: LinkScope;\n note?: string;\n}\n\n/**\n * Documents the plan step payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStep {\n id: string;\n order: number;\n title: string;\n body?: string;\n status: PlanStepStatus;\n owner?: string;\n evidence?: string;\n blocked_reason?: string;\n superseded_by?: string;\n linked_items?: PlanStepLink[];\n files?: PlanStepFile[];\n tests?: PlanStepTest[];\n docs?: PlanStepDoc[];\n created_at: string;\n updated_at: string;\n completed_at?: string;\n}\n\n/**\n * Documents the plan decision payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanDecision {\n ts: string;\n author: string;\n decision: string;\n rationale?: string;\n evidence?: string;\n step_id?: string;\n}\n\n/**\n * Documents the plan discovery payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanDiscovery {\n ts: string;\n author: string;\n text: string;\n step_id?: string;\n}\n\n/**\n * Documents the plan validation check payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanValidationCheck {\n text: string;\n command?: string;\n expected?: string;\n}\n\n/**\n * Documents the item type option definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemTypeOptionDefinition {\n key: string;\n values: string[];\n required?: boolean;\n aliases?: string[];\n description?: string;\n}\n\n/**\n * Documents the item type command option policy payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemTypeCommandOptionPolicy {\n command: \"create\" | \"update\";\n option: string;\n required?: boolean;\n visible?: boolean;\n enabled?: boolean;\n}\n\n/**\n * Documents the item type definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemTypeDefinition {\n name: string;\n description?: string;\n /**\n * Status assigned to newly created items of this type when `--status` is not\n * provided. Falls back to the workflow's open status when unset or invalid.\n */\n default_status?: string;\n folder?: string;\n aliases?: string[];\n required_create_fields?: string[];\n required_create_repeatables?: string[];\n options?: ItemTypeOptionDefinition[];\n command_option_policies?: ItemTypeCommandOptionPolicy[];\n}\n\n/**\n * Documents the runtime status definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeStatusDefinition {\n id: string;\n aliases?: string[];\n roles?: RuntimeStatusRole[];\n description?: string;\n order?: number;\n}\n\n/**\n * Documents the runtime field definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeFieldDefinition {\n key: string;\n metadata_key?: string;\n /**\n * @deprecated Use metadata_key.\n */\n front_matter_key?: string;\n cli_flag?: string;\n cli_aliases?: string[];\n description?: string;\n type?: RuntimeFieldType;\n commands?: RuntimeFieldCommand[];\n repeatable?: boolean;\n required?: boolean;\n required_on_create?: boolean;\n required_types?: string[];\n allow_unset?: boolean;\n}\n\n/**\n * Documents the runtime workflow definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeWorkflowDefinition {\n draft_status?: string;\n open_status?: string;\n in_progress_status?: string;\n blocked_status?: string;\n close_status?: string;\n canceled_status?: string;\n}\n\n/**\n * Documents the runtime schema file config payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeSchemaFileConfig {\n types?: string;\n statuses?: string;\n fields?: string;\n workflows?: string;\n}\n\n/**\n * Per-type allowed-transition rule. A type with no matching entry is\n * unrestricted; a type with an entry allows only the listed [from, to]\n * status pairs (status tokens are resolved case-insensitively through the\n * status registry alias map; a same-status no-op is always allowed).\n */\nexport interface TypeWorkflowDefinition {\n type: string;\n allowed_transitions: [string, string][];\n}\n\n/**\n * Documents the runtime schema settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeSchemaSettings {\n version: number;\n files: RuntimeSchemaFileConfig;\n statuses: RuntimeStatusDefinition[];\n fields: RuntimeFieldDefinition[];\n workflow: RuntimeWorkflowDefinition;\n type_workflows?: TypeWorkflowDefinition[];\n unknown_field_policy: RuntimeUnknownFieldPolicy;\n}\n\n/**\n * Documents the item test run summary payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemTestRunSummary {\n run_id: string;\n kind: \"test\" | \"test-all\";\n status: \"passed\" | \"failed\" | \"stopped\" | \"canceled\";\n started_at: string;\n finished_at: string;\n recorded_at: string;\n attempt?: number;\n resumed_from?: string;\n passed: number;\n failed: number;\n skipped: number;\n items?: number;\n linked_tests?: number;\n fail_on_skipped_triggered?: boolean;\n}\n\n/**\n * Documents the item metadata payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemMetadata {\n id: string;\n title: string;\n description: string;\n type: ItemType;\n /**\n * On-disk front-matter format version. Absent means the implicit baseline\n * (version 1) and is never serialized; populated only once an item advances\n * past the baseline via a future storage migration. See\n * core/item/item-format-version.\n */\n pm_format_version?: number;\n source_type?: string;\n type_options?: Record<string, string>;\n status: ItemStatus;\n priority: 0 | 1 | 2 | 3 | 4;\n tags: string[];\n created_at: string;\n updated_at: string;\n deadline?: string;\n reminders?: Reminder[];\n events?: CalendarEvent[];\n closed_at?: string;\n assignee?: string;\n source_owner?: string;\n author?: string;\n estimated_minutes?: number;\n acceptance_criteria?: string;\n design?: string;\n external_ref?: string;\n definition_of_ready?: string;\n order?: number;\n goal?: string;\n objective?: string;\n value?: string;\n impact?: string;\n outcome?: string;\n why_now?: string;\n parent?: string;\n reviewer?: string;\n risk?: RiskLevel;\n confidence?: ConfidenceValue;\n sprint?: string;\n release?: string;\n blocked_by?: string;\n blocked_reason?: string;\n unblock_note?: string;\n reporter?: string;\n severity?: IssueSeverity;\n environment?: string;\n repro_steps?: string;\n resolution?: string;\n expected_result?: string;\n actual_result?: string;\n affected_version?: string;\n fixed_version?: string;\n component?: string;\n regression?: boolean;\n customer_impact?: string;\n dependencies?: Dependency[];\n comments?: Comment[];\n notes?: LogNote[];\n learnings?: LogNote[];\n files?: LinkedFile[];\n tests?: LinkedTest[];\n test_runs?: ItemTestRunSummary[];\n docs?: LinkedDoc[];\n close_reason?: string;\n duplicate_of?: string;\n plan_mode?: PlanMode;\n plan_scope?: string;\n plan_harness?: PlanHarness;\n plan_steps?: PlanStep[];\n plan_decisions?: PlanDecision[];\n plan_discoveries?: PlanDiscovery[];\n plan_validation?: PlanValidationCheck[];\n plan_resume_context?: string;\n [key: string]: unknown;\n}\n\n/**\n * @deprecated Use ItemMetadata.\n */\nexport type ItemFrontMatter = ItemMetadata;\n\n/**\n * Documents the item document payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemDocument {\n metadata: ItemMetadata;\n body: string;\n}\n\n/**\n * Documents the history patch op payload exchanged by command, SDK, and package integrations.\n */\nexport interface HistoryPatchOp {\n op: \"add\" | \"remove\" | \"replace\" | \"move\" | \"copy\" | \"test\";\n path: string;\n from?: string;\n value?: unknown;\n}\n\n/**\n * Documents the history entry payload exchanged by command, SDK, and package integrations.\n */\nexport interface HistoryEntry {\n ts: string;\n author: string;\n op: string;\n patch: HistoryPatchOp[];\n before_hash: string;\n after_hash: string;\n message?: string;\n}\n\nexport const CONTEXT_DEPTH_VALUES = [\"brief\", \"standard\", \"deep\", \"full\"] as const;\n/**\n * Restricts context depth values accepted by command, SDK, and storage contracts.\n */\nexport type ContextDepth = (typeof CONTEXT_DEPTH_VALUES)[number];\n\nexport const CONTEXT_SECTION_VALUES = [\n \"hierarchy\",\n \"activity\",\n \"progress\",\n \"recently_created\",\n \"unparented\",\n \"blockers\",\n \"files\",\n \"workload\",\n \"staleness\",\n \"tests\",\n] as const;\n/**\n * Restricts context section name values accepted by command, SDK, and storage contracts.\n */\nexport type ContextSectionName = (typeof CONTEXT_SECTION_VALUES)[number];\n\n/**\n * Documents the context section settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface ContextSectionSettings {\n hierarchy: boolean;\n activity: boolean;\n progress: boolean;\n recently_created: boolean;\n unparented: boolean;\n blockers: boolean;\n files: boolean;\n workload: boolean;\n staleness: boolean;\n tests: boolean;\n}\n\n/**\n * Documents the context settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface ContextSettings {\n default_depth: ContextDepth;\n activity_limit: number;\n stale_threshold_days: number;\n sections: ContextSectionSettings;\n}\n\n/**\n * Documents the governance settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface GovernanceSettings {\n preset: GovernancePreset;\n ownership_enforcement: GovernanceOwnershipEnforcement;\n create_mode_default: GovernanceCreateModeDefault;\n close_validation_default: GovernanceCloseValidationDefault;\n require_close_reason: boolean;\n parent_reference: ParentReferencePolicy;\n metadata_profile: ValidateMetadataProfile;\n force_required_for_stale_lock: boolean;\n create_default_type?: string;\n /**\n * Per-type allowed-transition enforcement mode for `pm update --status`.\n * Read raw from settings (not preset-derived) so existing projects are\n * unaffected when unset; defaults to \"off\".\n */\n workflow_enforcement?: GovernanceWorkflowEnforcement;\n}\n\n/**\n * Restricts extension policy mode values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionPolicyMode = \"off\" | \"warn\" | \"enforce\";\n/**\n * Restricts extension trust mode values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionTrustMode = \"off\" | \"warn\" | \"enforce\";\n/**\n * Restricts extension sandbox profile values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionSandboxProfile = \"none\" | \"restricted\" | \"strict\";\n\n/**\n * Documents the extension policy override settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionPolicyOverrideSettings {\n name: string;\n disabled?: boolean;\n require_trusted?: boolean;\n require_provenance?: boolean;\n sandbox_profile?: ExtensionSandboxProfile;\n allowed_capabilities?: string[];\n blocked_capabilities?: string[];\n allowed_surfaces?: string[];\n blocked_surfaces?: string[];\n allowed_commands?: string[];\n blocked_commands?: string[];\n allowed_actions?: string[];\n blocked_actions?: string[];\n allowed_services?: string[];\n blocked_services?: string[];\n}\n\n/**\n * Documents the extension policy settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionPolicySettings {\n mode: ExtensionPolicyMode;\n trust_mode: ExtensionTrustMode;\n require_provenance: boolean;\n trusted_extensions: string[];\n default_sandbox_profile: ExtensionSandboxProfile;\n allowed_extensions: string[];\n blocked_extensions: string[];\n allowed_capabilities: string[];\n blocked_capabilities: string[];\n allowed_surfaces: string[];\n blocked_surfaces: string[];\n allowed_commands: string[];\n blocked_commands: string[];\n allowed_actions: string[];\n blocked_actions: string[];\n allowed_services: string[];\n blocked_services: string[];\n extension_overrides: ExtensionPolicyOverrideSettings[];\n}\n\n/**\n * Documents the agent guidance settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface AgentGuidanceSettings {\n prompt_completed: boolean;\n declined: boolean;\n declined_at: string;\n template_version: number;\n last_checked_files: string[];\n}\n\n/**\n * Restricts search mutation refresh policy values accepted by command, SDK, and storage contracts.\n */\nexport type SearchMutationRefreshPolicy = \"cache_only\" | \"semantic_configured\" | \"semantic_auto\";\n\n/**\n * Documents the search query expansion settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchQueryExpansionSettings {\n enabled: boolean;\n provider: string;\n}\n\n/**\n * Documents the search rerank settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchRerankSettings {\n enabled: boolean;\n model: string;\n top_k: number;\n}\n\n/**\n * Config-driven policy for automatic history-stream compaction triage.\n *\n * When `enabled`, `pm health` surfaces an advisory warning for any history\n * stream whose non-empty entry count exceeds `max_entries`, and `pm\n * history-compact` bulk mode uses `max_entries` as its default `--all-over`\n * threshold so the configured policy drives corpus-wide sweeps. `trigger`\n * records operator intent — both values raise the health advisory; `auto`\n * additionally signals that scheduled/automatic sweeps are expected.\n */\nexport interface HistoryCompactPolicy {\n enabled: boolean;\n max_entries: number;\n trigger: \"health_warn\" | \"auto\";\n}\n\n/**\n * Documents the pm settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface PmSettings {\n version: number;\n id_prefix: string;\n author_default: string;\n item_format: ItemFormat;\n locks: {\n ttl_seconds: number;\n /**\n * Bounded wait budget (milliseconds) for acquiring a contended item lock\n * before surfacing lock_conflict. 0 disables waiting (fail-fast).\n * Overridable per invocation via PM_LOCK_WAIT_MS.\n */\n wait_ms: number;\n };\n /**\n * Retention policy for bulk-mutation rollback checkpoints written by\n * `update-many`/`close-many`. `pm gc --scope checkpoints` prunes checkpoint\n * files older than `retention_days`; checkpoints with an unparseable\n * `created_at` are retained (safety-first, mirroring the stale-lock sweep).\n */\n checkpoints: {\n retention_days: number;\n };\n output: {\n default_format: \"toon\" | \"json\";\n };\n history: {\n missing_stream: \"auto_create\" | \"strict_error\";\n compact_policy: HistoryCompactPolicy;\n };\n validation: {\n sprint_release_format: SprintReleaseFormatPolicy;\n parent_reference: ParentReferencePolicy;\n metadata_profile: ValidateMetadataProfile;\n metadata_required_fields: ValidateMetadataRequiredField[];\n lifecycle_stale_blocker_reason_patterns: string[];\n lifecycle_closure_like_blocked_reason_patterns: string[];\n lifecycle_closure_like_resolution_patterns: string[];\n lifecycle_closure_like_actual_result_patterns: string[];\n /**\n * Per-type default estimates (minutes) used by `pm validate --auto-fix\n * --fix-scope estimates` to backfill missing `estimated_minutes` (GH-212).\n * Keys are item type names (case-insensitive); values are positive minutes\n * that override the built-in defaults. Empty by default.\n */\n estimate_defaults_by_type: Record<string, number>;\n };\n governance: GovernanceSettings;\n workflow: {\n definition_of_done: string[];\n };\n testing: {\n record_results_to_items: boolean;\n };\n telemetry: {\n enabled: boolean;\n first_run_prompt_completed: boolean;\n capture_level: \"minimal\" | \"redacted\" | \"max\";\n endpoint: string;\n installation_id: string;\n retention_days: number;\n };\n agent_guidance: AgentGuidanceSettings;\n item_types: {\n definitions: ItemTypeDefinition[];\n };\n schema: RuntimeSchemaSettings;\n extensions: {\n enabled: string[];\n disabled: string[];\n policy: ExtensionPolicySettings;\n };\n search: {\n score_threshold: number;\n hybrid_semantic_weight: number;\n max_results: number;\n embedding_model: string;\n embedding_corpus_max_characters?: number;\n embedding_batch_size: number;\n embedding_timeout_ms: number;\n scanner_max_batch_retries: number;\n provider?: string;\n /**\n * Optional allow-list of corpus field names embedded for semantic search\n * (see DEFAULT_SEARCH_CORPUS_FIELDS in core/search/corpus.ts). When unset or\n * empty, the full default field set is used (backward compatible). When set,\n * only the named fields are embedded — letting teams opt structured signals\n * (priority, assignee, risk, acceptance_criteria, etc.) in/out for token\n * efficiency. Changing this re-flags items stale on the next refresh.\n */\n corpus_fields?: string[];\n mutation_refresh_policy: SearchMutationRefreshPolicy;\n query_expansion: SearchQueryExpansionSettings;\n rerank: SearchRerankSettings;\n /**\n * Offline BM25 lexical-ranking parameters (pm-75k9), applied when\n * `search.provider` is `bm25` (or auto-selected as the offline fallback) for\n * semantic/hybrid queries. `k1` controls term-frequency saturation, `b`\n * controls document-length normalization. Unset → Lucene defaults (1.2/0.75).\n */\n bm25?: {\n k1?: number;\n b?: number;\n };\n tuning?: {\n title_exact_bonus?: number;\n title_weight?: number;\n description_weight?: number;\n tags_weight?: number;\n status_weight?: number;\n body_weight?: number;\n comments_weight?: number;\n notes_weight?: number;\n learnings_weight?: number;\n dependencies_weight?: number;\n linked_content_weight?: number;\n };\n };\n providers: {\n openai: {\n base_url: string;\n api_key: string;\n model: string;\n };\n ollama: {\n base_url: string;\n model: string;\n };\n };\n context: ContextSettings;\n vector_store: {\n adapter?: string;\n collection_name: string;\n qdrant: {\n url: string;\n api_key: string;\n };\n lancedb: {\n path: string;\n };\n };\n}\n", "/**\n * @module core/item/item-type-definition\n *\n * Defines item parsing, formatting, and lifecycle helpers for Item Type Definition.\n */\nimport type {\n ItemTypeCommandOptionPolicy,\n ItemTypeDefinition,\n ItemTypeOptionDefinition,\n} from \"../../types/index.js\";\n\n/**\n * Shared, pure normalization for {@link ItemTypeDefinition} objects, single-sourced\n * across the runtime item-type registry and settings persistence (pm-v798).\n *\n * The only genuine difference between the two callers is how a command-option\n * policy's `command` field is resolved:\n * - the runtime registry consumes untrusted extension/file definitions, so it\n * must trim+lowercase and reject anything that is not \"create\"/\"update\";\n * - settings persistence operates on already-validated definitions, so it keeps\n * the typed `command` value verbatim.\n *\n * That single difference is injected via {@link NormalizeItemTypeDefinitionOptions.resolvePolicyCommand};\n * everything else (name trim, optional folder, aliases, required_create_* fields,\n * options normalization, policy dedupe key + stable sort) is shared.\n */\n\n/** Dedupe + sort a string list: trim, drop blanks, unique, locale-sorted. */\nexport function normalizeItemTypeStringList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\n/** Normalize one type-option definition, or null when its key is blank. */\nexport function normalizeItemTypeOption(option: ItemTypeOptionDefinition): ItemTypeOptionDefinition | null {\n const key = option.key.trim();\n if (key.length === 0) {\n return null;\n }\n const aliases = normalizeItemTypeStringList(option.aliases);\n const description = option.description?.trim();\n return {\n key,\n values: normalizeItemTypeStringList(option.values),\n required: option.required === true ? true : undefined,\n aliases: aliases.length > 0 ? aliases : undefined,\n description: description && description.length > 0 ? description : undefined,\n };\n}\n\n/**\n * Resolves a raw policy `command` value to the canonical \"create\"/\"update\" type,\n * or null to drop the policy. Lets each layer plug in its own strictness.\n */\nexport type ResolvePolicyCommand = (command: string) => ItemTypeCommandOptionPolicy[\"command\"] | null;\n\n/**\n * Pass-through resolver used by settings persistence: the value is already typed\n * \"create\" | \"update\" by the settings validator, so it is kept verbatim.\n */\nexport const keepPolicyCommand: ResolvePolicyCommand = (command) =>\n command as ItemTypeCommandOptionPolicy[\"command\"];\n\n/**\n * Strict resolver used by the runtime registry: trims + lowercases and rejects\n * anything other than \"create\"/\"update\".\n */\nexport const strictPolicyCommand: ResolvePolicyCommand = (command) => {\n const normalized = command.trim().toLowerCase();\n return normalized === \"create\" || normalized === \"update\" ? normalized : null;\n};\n\n/** Normalize one command-option policy, or null when invalid (blank option / rejected command). */\nexport function normalizeItemTypeCommandOptionPolicy(\n policy: ItemTypeCommandOptionPolicy,\n resolvePolicyCommand: ResolvePolicyCommand,\n): ItemTypeCommandOptionPolicy | null {\n const command = resolvePolicyCommand(policy.command);\n if (command === null) {\n return null;\n }\n const option = policy.option.trim();\n if (option.length === 0) {\n return null;\n }\n return {\n command,\n option,\n required: policy.required,\n visible: policy.visible,\n enabled: policy.enabled,\n };\n}\n\n/** Dedupe by `${command}:${option-lowercased}` and stable-sort by command then option. */\nexport function normalizeItemTypeCommandOptionPolicies(\n policies: ItemTypeCommandOptionPolicy[] | undefined,\n resolvePolicyCommand: ResolvePolicyCommand,\n): ItemTypeCommandOptionPolicy[] {\n const dedupedByKey = new Map<string, ItemTypeCommandOptionPolicy>();\n for (const policy of policies ?? []) {\n const normalized = normalizeItemTypeCommandOptionPolicy(policy, resolvePolicyCommand);\n if (!normalized) {\n continue;\n }\n dedupedByKey.set(`${normalized.command}:${normalized.option.toLowerCase()}`, normalized);\n }\n return [...dedupedByKey.values()].sort((left, right) =>\n left.command === right.command\n ? left.option.localeCompare(right.option)\n : left.command.localeCompare(right.command),\n );\n}\n\n/**\n * Documents the normalize item type definition options payload exchanged by command, SDK, and package integrations.\n */\nexport interface NormalizeItemTypeDefinitionOptions {\n /** How to resolve a raw policy `command` value (defaults to {@link keepPolicyCommand}). */\n resolvePolicyCommand?: ResolvePolicyCommand;\n}\n\nfunction normalizeOptionalStringList(\n values: string[] | undefined,\n preservePresence: boolean,\n): string[] | undefined {\n return preservePresence ? normalizeItemTypeStringList(values) : undefined;\n}\n\nfunction optionalNonEmptyString(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n return normalized && normalized.length > 0 ? normalized : undefined;\n}\n\n/**\n * Normalize a full {@link ItemTypeDefinition}, returning null when the name is blank.\n *\n * Optional collection fields (`folder`, `aliases`, `required_create_fields`,\n * `required_create_repeatables`, `options`, `command_option_policies`) are only\n * emitted when present on the input (presence-preserving) so the distinction\n * between \"unset\" and \"set-but-empty\" survives the round-trip.\n */\nexport function normalizeItemTypeDefinition(\n definition: ItemTypeDefinition,\n options: NormalizeItemTypeDefinitionOptions = {},\n): ItemTypeDefinition | null {\n const resolvePolicyCommand = options.resolvePolicyCommand ?? keepPolicyCommand;\n const name = definition.name.trim();\n if (name.length === 0) {\n return null;\n }\n\n const hasRequiredCreateFields = definition.required_create_fields !== undefined;\n const hasRequiredCreateRepeatables = definition.required_create_repeatables !== undefined;\n const hasOptions = definition.options !== undefined;\n const hasCommandOptionPolicies = definition.command_option_policies !== undefined;\n\n const aliases = normalizeItemTypeStringList(definition.aliases);\n const normalizedOptions = (definition.options ?? [])\n .map((option) => normalizeItemTypeOption(option))\n .filter((option): option is ItemTypeOptionDefinition => option !== null)\n .sort((left, right) => left.key.localeCompare(right.key));\n const commandOptionPolicies = normalizeItemTypeCommandOptionPolicies(\n definition.command_option_policies,\n resolvePolicyCommand,\n );\n\n return {\n name,\n description: optionalNonEmptyString(definition.description),\n default_status: optionalNonEmptyString(definition.default_status),\n folder: optionalNonEmptyString(definition.folder),\n aliases: aliases.length > 0 ? aliases : undefined,\n required_create_fields: normalizeOptionalStringList(definition.required_create_fields, hasRequiredCreateFields),\n required_create_repeatables: normalizeOptionalStringList(\n definition.required_create_repeatables,\n hasRequiredCreateRepeatables,\n ),\n options: hasOptions ? normalizedOptions : undefined,\n command_option_policies: hasCommandOptionPolicies ? commandOptionPolicies : undefined,\n };\n}\n", "/**\n * @module core/item/type-registry\n *\n * Defines item parsing, formatting, and lifecycle helpers for Type Registry.\n */\nimport { TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport type { ExtensionRegistrationRegistry } from \"../extensions/loader.js\";\nimport type {\n ItemTypeCommandOptionPolicy,\n ItemTypeDefinition,\n ItemTypeOptionDefinition,\n PmSettings,\n} from \"../../types/index.js\";\nimport { ITEM_TYPE_VALUES } from \"../../types/index.js\";\nimport {\n normalizeItemTypeDefinition as normalizeSharedItemTypeDefinition,\n normalizeItemTypeStringList,\n strictPolicyCommand,\n} from \"./item-type-definition.js\";\n\nexport const DEFAULT_REQUIRED_CREATE_FIELDS = [\n \"title\",\n \"description\",\n \"status\",\n \"priority\",\n \"tags\",\n \"body\",\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"author\",\n \"message\",\n \"assignee\",\n] as const;\n\nexport const DEFAULT_REQUIRED_CREATE_REPEATABLES = [\"dep\", \"comment\", \"note\", \"learning\", \"file\", \"test\", \"doc\"] as const;\n\n/**\n * Restricts command option policy command values accepted by command, SDK, and storage contracts.\n */\nexport type CommandOptionPolicyCommand = \"create\" | \"update\";\n\n// Keep aligned with cli/commands/shared-unset-fields.ts. This core registry\n// cannot import CLI unset metadata without creating a core -> CLI dependency.\nexport const COMMON_MUTATION_COMMAND_OPTION_KEYS = [\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"definitionOfReady\",\n \"order\",\n \"goal\",\n \"objective\",\n \"value\",\n \"impact\",\n \"outcome\",\n \"whyNow\",\n \"assignee\",\n \"parent\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n \"blockedBy\",\n \"blockedReason\",\n \"unblockNote\",\n \"reporter\",\n \"severity\",\n \"environment\",\n \"reproSteps\",\n \"resolution\",\n \"expectedResult\",\n \"actualResult\",\n \"affectedVersion\",\n \"fixedVersion\",\n \"component\",\n \"regression\",\n \"customerImpact\",\n] as const;\n\nconst CREATE_COMMAND_OPTION_KEYS = [\n \"title\",\n \"description\",\n \"type\",\n \"status\",\n \"priority\",\n \"tags\",\n \"body\",\n ...COMMON_MUTATION_COMMAND_OPTION_KEYS,\n \"author\",\n \"message\",\n \"dep\",\n \"comment\",\n \"note\",\n \"learning\",\n \"file\",\n \"test\",\n \"doc\",\n \"reminder\",\n \"event\",\n \"typeOption\",\n \"field\",\n] as const;\n\nconst UPDATE_COMMAND_OPTION_KEYS = [\n \"title\",\n \"description\",\n \"body\",\n \"status\",\n \"closeReason\",\n \"priority\",\n \"type\",\n \"tags\",\n ...COMMON_MUTATION_COMMAND_OPTION_KEYS,\n \"author\",\n \"message\",\n \"comment\",\n \"note\",\n \"learning\",\n \"file\",\n \"test\",\n \"doc\",\n \"reminder\",\n \"event\",\n \"typeOption\",\n \"field\",\n \"allowAuditUpdate\",\n \"force\",\n] as const;\n\nconst SHARED_COMMAND_OPTION_ALIASES: Record<string, string> = {\n \"close-reason\": \"closeReason\",\n close_reason: \"closeReason\",\n \"estimated-minutes\": \"estimatedMinutes\",\n estimated_minutes: \"estimatedMinutes\",\n estimate: \"estimatedMinutes\",\n \"acceptance-criteria\": \"acceptanceCriteria\",\n acceptance_criteria: \"acceptanceCriteria\",\n ac: \"acceptanceCriteria\",\n \"definition-of-ready\": \"definitionOfReady\",\n definition_of_ready: \"definitionOfReady\",\n rank: \"order\",\n \"why-now\": \"whyNow\",\n why_now: \"whyNow\",\n \"blocked-by\": \"blockedBy\",\n blocked_by: \"blockedBy\",\n \"blocked-reason\": \"blockedReason\",\n blocked_reason: \"blockedReason\",\n \"unblock-note\": \"unblockNote\",\n unblock_note: \"unblockNote\",\n \"repro-steps\": \"reproSteps\",\n repro_steps: \"reproSteps\",\n \"expected-result\": \"expectedResult\",\n expected_result: \"expectedResult\",\n \"actual-result\": \"actualResult\",\n actual_result: \"actualResult\",\n \"affected-version\": \"affectedVersion\",\n affected_version: \"affectedVersion\",\n \"fixed-version\": \"fixedVersion\",\n fixed_version: \"fixedVersion\",\n \"customer-impact\": \"customerImpact\",\n customer_impact: \"customerImpact\",\n \"type-option\": \"typeOption\",\n type_option: \"typeOption\",\n type_options: \"typeOption\",\n};\n\nconst CREATE_COMMAND_OPTION_ALIASES: Record<string, string> = {\n ...SHARED_COMMAND_OPTION_ALIASES,\n};\n\nconst UPDATE_COMMAND_OPTION_ALIASES: Record<string, string> = {\n ...SHARED_COMMAND_OPTION_ALIASES,\n \"allow-audit-update\": \"allowAuditUpdate\",\n allow_audit_update: \"allowAuditUpdate\",\n};\n\nconst COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES = [\n [\"deadline\", \"--deadline\"],\n [\"estimatedMinutes\", \"--estimate/--estimated-minutes\"],\n [\"acceptanceCriteria\", \"--acceptance-criteria/--ac\"],\n [\"definitionOfReady\", \"--definition-of-ready\"],\n [\"order\", \"--order/--rank\"],\n [\"goal\", \"--goal\"],\n [\"objective\", \"--objective\"],\n [\"value\", \"--value\"],\n [\"impact\", \"--impact\"],\n [\"outcome\", \"--outcome\"],\n [\"whyNow\", \"--why-now\"],\n [\"assignee\", \"--assignee\"],\n [\"parent\", \"--parent\"],\n [\"reviewer\", \"--reviewer\"],\n [\"risk\", \"--risk\"],\n [\"confidence\", \"--confidence\"],\n [\"sprint\", \"--sprint\"],\n [\"release\", \"--release\"],\n [\"blockedBy\", \"--blocked-by\"],\n [\"blockedReason\", \"--blocked-reason\"],\n [\"unblockNote\", \"--unblock-note\"],\n [\"reporter\", \"--reporter\"],\n [\"severity\", \"--severity\"],\n [\"environment\", \"--environment\"],\n [\"reproSteps\", \"--repro-steps\"],\n [\"resolution\", \"--resolution\"],\n [\"expectedResult\", \"--expected-result\"],\n [\"actualResult\", \"--actual-result\"],\n [\"affectedVersion\", \"--affected-version\"],\n [\"fixedVersion\", \"--fixed-version\"],\n [\"component\", \"--component\"],\n [\"regression\", \"--regression\"],\n [\"customerImpact\", \"--customer-impact\"],\n] as const;\n\nconst LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES = [\n [\"comment\", \"--comment\"],\n [\"note\", \"--note\"],\n [\"learning\", \"--learning\"],\n [\"file\", \"--file\"],\n [\"test\", \"--test\"],\n [\"doc\", \"--doc\"],\n [\"reminder\", \"--reminder\"],\n [\"event\", \"--event\"],\n [\"typeOption\", \"--type-option\"],\n] as const;\n\nfunction commandOptionLabelMap(\n entries: ReadonlyArray<readonly [string, string]>,\n): Record<string, string> {\n return Object.fromEntries(entries);\n}\n\nconst CREATE_COMMAND_OPTION_FLAG_LABELS = commandOptionLabelMap([\n [\"title\", \"--title\"],\n [\"description\", \"--description\"],\n [\"type\", \"--type\"],\n [\"status\", \"--status\"],\n [\"priority\", \"--priority\"],\n [\"tags\", \"--tags\"],\n [\"body\", \"--body\"],\n ...COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES,\n [\"author\", \"--author\"],\n [\"message\", \"--message\"],\n [\"dep\", \"--dep\"],\n ...LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES,\n]);\n\nconst UPDATE_COMMAND_OPTION_FLAG_LABELS = commandOptionLabelMap([\n [\"title\", \"--title\"],\n [\"description\", \"--description\"],\n [\"body\", \"--body\"],\n [\"status\", \"--status\"],\n [\"closeReason\", \"--close-reason\"],\n [\"priority\", \"--priority\"],\n [\"type\", \"--type\"],\n [\"tags\", \"--tags\"],\n ...COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES,\n ...LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES,\n [\"allowAuditUpdate\", \"--allow-audit-update\"],\n [\"author\", \"--author\"],\n [\"message\", \"--message\"],\n [\"force\", \"--force\"],\n]);\n\n/**\n * Documents the command option policy state payload exchanged by command, SDK, and package integrations.\n */\nexport interface CommandOptionPolicyState {\n required: string[];\n hidden: string[];\n disabled: string[];\n errors: string[];\n}\n\n/**\n * Documents the resolved item type definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface ResolvedItemTypeDefinition {\n name: string;\n /** Optional human description carried from the type definition. */\n description?: string;\n folder: string;\n aliases: string[];\n /** Optional per-type status applied at create time when `--status` is omitted. */\n default_status?: string;\n required_create_fields: string[];\n required_create_repeatables: string[];\n options: ItemTypeOptionDefinition[];\n command_option_policies: ItemTypeCommandOptionPolicy[];\n}\n\n/**\n * Documents the item type registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemTypeRegistry {\n types: string[];\n folders: string[];\n type_to_folder: Record<string, string>;\n by_type: Record<string, ResolvedItemTypeDefinition>;\n alias_to_type: Record<string, string>;\n}\n\nfunction normalizeCommandOptionToken(value: string): string {\n return value.trim().replace(/^--+/, \"\").toLowerCase();\n}\n\nfunction commandOptionKeys(command: CommandOptionPolicyCommand): readonly string[] {\n return command === \"create\" ? CREATE_COMMAND_OPTION_KEYS : UPDATE_COMMAND_OPTION_KEYS;\n}\n\nfunction commandOptionAliases(command: CommandOptionPolicyCommand): Record<string, string> {\n return command === \"create\" ? CREATE_COMMAND_OPTION_ALIASES : UPDATE_COMMAND_OPTION_ALIASES;\n}\n\n/**\n * Implements canonicalize command option key for the public runtime surface of this module.\n */\nexport function canonicalizeCommandOptionKey(\n command: CommandOptionPolicyCommand,\n rawOption: string,\n): string | undefined {\n const normalizedToken = normalizeCommandOptionToken(rawOption);\n if (normalizedToken.length === 0) {\n return undefined;\n }\n const aliased = commandOptionAliases(command)[normalizedToken];\n if (aliased) {\n return aliased;\n }\n return commandOptionKeys(command).find((candidate) => candidate.toLowerCase() === normalizedToken);\n}\n\n/**\n * Implements command option flag label for the public runtime surface of this module.\n */\nexport function commandOptionFlagLabel(command: CommandOptionPolicyCommand, optionKey: string): string {\n const labels = command === \"create\" ? CREATE_COMMAND_OPTION_FLAG_LABELS : UPDATE_COMMAND_OPTION_FLAG_LABELS;\n return labels[optionKey] ?? `--${optionKey.replace(/([A-Z])/g, \"-$1\").toLowerCase()}`;\n}\n\n/**\n * Implements to default folder for the public runtime surface of this module.\n */\nexport function toDefaultFolder(name: string): string {\n const normalized = toSlugToken(name);\n if (normalized.length === 0) {\n return \"items\";\n }\n return normalized.endsWith(\"s\") ? normalized : `${normalized}s`;\n}\n\nfunction toSlugToken(value: string): string {\n const trimmed = value.trim().toLowerCase();\n let slug = \"\";\n let pendingDash = false;\n for (const character of trimmed) {\n const code = character.charCodeAt(0);\n const isAlpha = code >= 97 && code <= 122;\n const isDigit = code >= 48 && code <= 57;\n if (isAlpha || isDigit) {\n if (pendingDash && slug.length > 0) {\n slug += \"-\";\n }\n slug += character;\n pendingDash = false;\n continue;\n }\n if (slug.length > 0) {\n pendingDash = true;\n }\n }\n return slug;\n}\n\n// Runtime registry consumes untrusted extension/file definitions, so it uses the\n// strict policy-command resolver (trim + lowercase, reject non-create/update). All\n// other normalization is single-sourced from ./item-type-definition.ts (pm-v798).\nfunction normalizeTypeDefinition(definition: ItemTypeDefinition): ItemTypeDefinition | null {\n return normalizeSharedItemTypeDefinition(definition, { resolvePolicyCommand: strictPolicyCommand });\n}\n\nfunction readStringArray(record: Record<string, unknown>, key: string): string[] | undefined {\n const value = record[key];\n return Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : undefined;\n}\n\nfunction coerceOptionDefinitionFromUnknown(raw: unknown): ItemTypeOptionDefinition | null {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return null;\n }\n const optionRecord = raw as Record<string, unknown>;\n if (typeof optionRecord.key !== \"string\") {\n return null;\n }\n return {\n key: optionRecord.key,\n values: readStringArray(optionRecord, \"values\") ?? [],\n required: optionRecord.required === undefined ? undefined : Boolean(optionRecord.required),\n aliases: readStringArray(optionRecord, \"aliases\"),\n description: typeof optionRecord.description === \"string\" ? optionRecord.description : undefined,\n };\n}\n\nfunction coerceCommandOptionPolicyFromUnknown(raw: unknown): ItemTypeCommandOptionPolicy | null {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return null;\n }\n const policyRecord = raw as Record<string, unknown>;\n if (typeof policyRecord.command !== \"string\" || typeof policyRecord.option !== \"string\") {\n return null;\n }\n const normalizedCommand = policyRecord.command.trim().toLowerCase();\n if (normalizedCommand !== \"create\" && normalizedCommand !== \"update\") {\n return null;\n }\n return {\n command: normalizedCommand,\n option: policyRecord.option,\n required: policyRecord.required === undefined ? undefined : Boolean(policyRecord.required),\n visible: policyRecord.visible === undefined ? undefined : Boolean(policyRecord.visible),\n enabled: policyRecord.enabled === undefined ? undefined : Boolean(policyRecord.enabled),\n };\n}\n\nfunction coerceOptionDefinitionsFromRecord(record: Record<string, unknown>): ItemTypeOptionDefinition[] | undefined {\n if (!Array.isArray(record.options)) {\n return undefined;\n }\n return record.options\n .map((entry) => coerceOptionDefinitionFromUnknown(entry))\n .filter((entry): entry is ItemTypeOptionDefinition => entry !== null);\n}\n\nfunction coerceCommandOptionPoliciesFromRecord(record: Record<string, unknown>): ItemTypeCommandOptionPolicy[] | undefined {\n if (!Array.isArray(record.command_option_policies)) {\n return undefined;\n }\n return record.command_option_policies\n .map((entry) => coerceCommandOptionPolicyFromUnknown(entry))\n .filter((entry): entry is ItemTypeCommandOptionPolicy => entry !== null);\n}\n\nfunction coerceTypeDefinitionFromUnknown(raw: unknown): ItemTypeDefinition | null {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return null;\n }\n const record = raw as Record<string, unknown>;\n const name = typeof record.name === \"string\" ? record.name : \"\";\n if (name.trim().length === 0) {\n return null;\n }\n const folder = typeof record.folder === \"string\" ? record.folder : undefined;\n const description = typeof record.description === \"string\" ? record.description : undefined;\n const defaultStatus = typeof record.default_status === \"string\" ? record.default_status : undefined;\n return {\n name,\n description,\n default_status: defaultStatus,\n folder,\n aliases: readStringArray(record, \"aliases\"),\n required_create_fields: readStringArray(record, \"required_create_fields\"),\n required_create_repeatables: readStringArray(record, \"required_create_repeatables\"),\n options: coerceOptionDefinitionsFromRecord(record),\n command_option_policies: coerceCommandOptionPoliciesFromRecord(record),\n };\n}\n\nfunction resolveDefinitionRequiredCreateFields(\n normalizedDefinition: ItemTypeDefinition,\n existing: ResolvedItemTypeDefinition | undefined,\n): string[] {\n return normalizedDefinition.required_create_fields\n ? normalizeItemTypeStringList(normalizedDefinition.required_create_fields)\n : existing?.required_create_fields ?? [];\n}\n\nfunction resolveDefinitionRequiredCreateRepeatables(\n normalizedDefinition: ItemTypeDefinition,\n existing: ResolvedItemTypeDefinition | undefined,\n): string[] {\n return normalizedDefinition.required_create_repeatables\n ? normalizeItemTypeStringList(normalizedDefinition.required_create_repeatables)\n : existing?.required_create_repeatables ?? [];\n}\n\nfunction resolveDefinitionOptions(\n normalizedDefinition: ItemTypeDefinition,\n existing: ResolvedItemTypeDefinition | undefined,\n): ItemTypeOptionDefinition[] {\n return normalizedDefinition.options ? normalizedDefinition.options : existing?.options ? [...existing.options] : [];\n}\n\nfunction resolveDefinitionCommandOptionPolicies(\n normalizedDefinition: ItemTypeDefinition,\n existing: ResolvedItemTypeDefinition | undefined,\n): ItemTypeCommandOptionPolicy[] {\n return normalizedDefinition.command_option_policies\n ? normalizedDefinition.command_option_policies\n : existing?.command_option_policies\n ? [...existing.command_option_policies]\n : [];\n}\n\nfunction buildResolvedTypeDefinition(\n normalizedDefinition: ItemTypeDefinition,\n existing: ResolvedItemTypeDefinition | undefined,\n): ResolvedItemTypeDefinition {\n const keepName = existing?.name ?? normalizedDefinition.name;\n const description = normalizedDefinition.description ?? existing?.description;\n const defaultStatus = normalizedDefinition.default_status ?? existing?.default_status;\n const resolvedDefinition: ResolvedItemTypeDefinition = {\n name: keepName,\n folder: normalizedDefinition.folder ?? existing?.folder ?? toDefaultFolder(keepName),\n aliases: normalizeItemTypeStringList([...(existing?.aliases ?? []), ...(normalizedDefinition.aliases ?? [])]),\n required_create_fields: resolveDefinitionRequiredCreateFields(normalizedDefinition, existing),\n required_create_repeatables: resolveDefinitionRequiredCreateRepeatables(normalizedDefinition, existing),\n options: resolveDefinitionOptions(normalizedDefinition, existing),\n command_option_policies: resolveDefinitionCommandOptionPolicies(normalizedDefinition, existing),\n };\n if (description) {\n resolvedDefinition.description = description;\n }\n if (defaultStatus) {\n resolvedDefinition.default_status = defaultStatus;\n }\n return resolvedDefinition;\n}\n\nfunction applyTypeDefinitions(\n source: ItemTypeDefinition[],\n target: Map<string, ResolvedItemTypeDefinition>,\n): void {\n for (const rawDefinition of source) {\n const normalizedDefinition = normalizeTypeDefinition(rawDefinition);\n if (!normalizedDefinition) {\n continue;\n }\n const lowerName = normalizedDefinition.name.toLowerCase();\n const existing = target.get(lowerName);\n target.set(lowerName, buildResolvedTypeDefinition(normalizedDefinition, existing));\n }\n}\n\nfunction collectExtensionTypeDefinitions(registrations: ExtensionRegistrationRegistry | null | undefined): ItemTypeDefinition[] {\n if (!registrations) {\n return [];\n }\n const definitions: ItemTypeDefinition[] = [];\n for (const registration of registrations.item_types ?? []) {\n const typeDefinitionsRaw = (registration as { types?: unknown[] }).types;\n if (!Array.isArray(typeDefinitionsRaw)) {\n continue;\n }\n for (const rawDefinition of typeDefinitionsRaw) {\n const normalized = coerceTypeDefinitionFromUnknown(rawDefinition);\n if (normalized) {\n definitions.push(normalized);\n }\n }\n }\n return definitions;\n}\n\n/**\n * Implements resolve item type registry for the public runtime surface of this module.\n */\nexport function resolveItemTypeRegistry(\n settings: PmSettings,\n extensionRegistrations: ExtensionRegistrationRegistry | null | undefined = null,\n): ItemTypeRegistry {\n const byLowerName = new Map<string, ResolvedItemTypeDefinition>();\n for (const builtin of ITEM_TYPE_VALUES) {\n byLowerName.set(builtin.toLowerCase(), {\n name: builtin,\n folder: TYPE_TO_FOLDER[builtin],\n aliases: [],\n required_create_fields: [...DEFAULT_REQUIRED_CREATE_FIELDS],\n required_create_repeatables: [...DEFAULT_REQUIRED_CREATE_REPEATABLES],\n options: [],\n command_option_policies: [],\n });\n }\n\n applyTypeDefinitions(settings.item_types?.definitions ?? [], byLowerName);\n applyTypeDefinitions(collectExtensionTypeDefinitions(extensionRegistrations), byLowerName);\n\n const definitions = [...byLowerName.values()].sort((left, right) => left.name.localeCompare(right.name));\n const byType: Record<string, ResolvedItemTypeDefinition> = {};\n const aliasToType: Record<string, string> = {};\n const typeToFolder: Record<string, string> = {};\n for (const definition of definitions) {\n byType[definition.name] = definition;\n typeToFolder[definition.name] = definition.folder;\n aliasToType[definition.name.toLowerCase()] = definition.name;\n for (const alias of definition.aliases) {\n aliasToType[alias.toLowerCase()] = definition.name;\n }\n }\n const folders = [...new Set(definitions.map((definition) => definition.folder))].sort((left, right) => left.localeCompare(right));\n return {\n types: definitions.map((definition) => definition.name),\n folders,\n type_to_folder: typeToFolder,\n by_type: byType,\n alias_to_type: aliasToType,\n };\n}\n\n/**\n * Implements resolve type name for the public runtime surface of this module.\n */\nexport function resolveTypeName(rawType: string | undefined, registry: ItemTypeRegistry): string | undefined {\n if (rawType === undefined) {\n return undefined;\n }\n return registry.alias_to_type[rawType.trim().toLowerCase()];\n}\n\n/**\n * Implements resolve type definition for the public runtime surface of this module.\n */\nexport function resolveTypeDefinition(\n typeName: string | undefined,\n registry: ItemTypeRegistry,\n): ResolvedItemTypeDefinition | undefined {\n const resolvedName = resolveTypeName(typeName, registry);\n if (!resolvedName) {\n return undefined;\n }\n return registry.by_type[resolvedName];\n}\n\nfunction applyBaseRequiredCommandOptions(\n state: Pick<CommandOptionPolicyState, \"errors\"> & { required: Set<string> },\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n baseRequiredOptions: Iterable<string>,\n): void {\n for (const rawBase of baseRequiredOptions) {\n const canonical = canonicalizeCommandOptionKey(command, rawBase);\n if (canonical) {\n state.required.add(canonical);\n continue;\n }\n state.errors.push(\n `Unsupported base required option \"${rawBase}\" for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n }\n}\n\nfunction applyBooleanPolicySet(target: Set<string>, option: string, enabled: boolean): void {\n if (enabled) {\n target.add(option);\n return;\n }\n target.delete(option);\n}\n\nfunction applyCommandOptionPolicy(\n state: Omit<CommandOptionPolicyState, \"required\" | \"hidden\" | \"disabled\"> & {\n required: Set<string>;\n hidden: Set<string>;\n disabled: Set<string>;\n },\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n policy: ItemTypeCommandOptionPolicy,\n): void {\n const canonical = canonicalizeCommandOptionKey(command, policy.option);\n if (!canonical) {\n state.errors.push(\n `Unsupported command_option_policies option \"${policy.option}\" for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n return;\n }\n if (policy.required !== undefined) {\n applyBooleanPolicySet(state.required, canonical, policy.required);\n }\n if (policy.visible !== undefined) {\n applyBooleanPolicySet(state.hidden, canonical, !policy.visible);\n }\n if (policy.enabled !== undefined) {\n applyBooleanPolicySet(state.disabled, canonical, !policy.enabled);\n }\n}\n\nfunction applyCommandOptionPolicies(\n state: Omit<CommandOptionPolicyState, \"required\" | \"hidden\" | \"disabled\"> & {\n required: Set<string>;\n hidden: Set<string>;\n disabled: Set<string>;\n },\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n): void {\n for (const policy of typeDefinition.command_option_policies) {\n if (policy.command === command) {\n applyCommandOptionPolicy(state, typeDefinition, command, policy);\n }\n }\n}\n\nfunction appendRequiredDisabledPolicyErrors(\n state: Pick<CommandOptionPolicyState, \"errors\"> & {\n required: Set<string>;\n disabled: Set<string>;\n },\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n): void {\n for (const option of state.required) {\n if (state.disabled.has(option)) {\n state.errors.push(\n `Option \"${option}\" cannot be both required and disabled for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n }\n }\n}\n\n/**\n * Implements resolve command option policy state for the public runtime surface of this module.\n */\nexport function resolveCommandOptionPolicyState(\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n baseRequiredOptions: Iterable<string>,\n): CommandOptionPolicyState {\n const errors: string[] = [];\n const required = new Set<string>();\n const hidden = new Set<string>();\n const disabled = new Set<string>();\n const state = { required, hidden, disabled, errors };\n\n applyBaseRequiredCommandOptions(state, typeDefinition, command, baseRequiredOptions);\n applyCommandOptionPolicies(state, typeDefinition, command);\n appendRequiredDisabledPolicyErrors(state, typeDefinition, command);\n\n return {\n required: [...required],\n hidden: [...hidden].sort((left, right) => left.localeCompare(right)),\n disabled: [...disabled].sort((left, right) => left.localeCompare(right)),\n errors,\n };\n}\n\nfunction buildTypeOptionAliasMap(typeDefinition: ResolvedItemTypeDefinition): Map<string, ItemTypeOptionDefinition> {\n const optionByAlias = new Map<string, ItemTypeOptionDefinition>();\n for (const option of typeDefinition.options) {\n optionByAlias.set(option.key.toLowerCase(), option);\n for (const alias of option.aliases ?? []) {\n optionByAlias.set(alias.toLowerCase(), option);\n }\n }\n return optionByAlias;\n}\n\nfunction resolveTypeOptionValue(\n optionDefinition: ItemTypeOptionDefinition,\n trimmedValue: string,\n errors: string[],\n): string | undefined {\n const allowedValues = optionDefinition.values;\n if (allowedValues.length === 0) {\n return trimmedValue;\n }\n const valueLookup = new Map(allowedValues.map((value) => [value.toLowerCase(), value]));\n const canonical = valueLookup.get(trimmedValue.toLowerCase());\n if (!canonical) {\n errors.push(`Invalid value \"${trimmedValue}\" for type option \"${optionDefinition.key}\". Allowed: ${allowedValues.join(\", \")}`);\n return undefined;\n }\n return canonical;\n}\n\n/**\n * Implements validate type options for the public runtime surface of this module.\n */\nexport function validateTypeOptions(\n typeName: string,\n rawTypeOptions: Record<string, string> | undefined,\n registry: ItemTypeRegistry,\n): { normalized: Record<string, string> | undefined; errors: string[] } {\n const typeDefinition = resolveTypeDefinition(typeName, registry);\n if (!typeDefinition) {\n return {\n normalized: undefined,\n errors: [`Unknown type \"${typeName}\"`],\n };\n }\n const errors: string[] = [];\n const optionByAlias = buildTypeOptionAliasMap(typeDefinition);\n\n const normalized: Record<string, string> = {};\n for (const [rawKey, rawValue] of Object.entries(rawTypeOptions ?? {})) {\n const trimmedKey = rawKey.trim();\n const trimmedValue = rawValue.trim();\n if (trimmedKey.length === 0) {\n errors.push(\"type option keys must not be empty\");\n continue;\n }\n if (trimmedValue.length === 0) {\n errors.push(`type option \"${trimmedKey}\" must not be empty`);\n continue;\n }\n const optionDefinition = optionByAlias.get(trimmedKey.toLowerCase());\n if (!optionDefinition) {\n const allowed = typeDefinition.options.map((option) => option.key).join(\", \");\n errors.push(\n typeDefinition.options.length > 0\n ? `Unknown type option \"${trimmedKey}\" for type \"${typeDefinition.name}\". Allowed: ${allowed}`\n : `Type \"${typeDefinition.name}\" does not define any configurable type options`,\n );\n continue;\n }\n const resolvedValue = resolveTypeOptionValue(optionDefinition, trimmedValue, errors);\n if (resolvedValue === undefined) {\n continue;\n }\n normalized[optionDefinition.key] = resolvedValue;\n }\n\n for (const option of typeDefinition.options) {\n if (option.required && !(option.key in normalized)) {\n errors.push(`Missing required type option \"${option.key}\" for type \"${typeDefinition.name}\"`);\n }\n }\n\n const sortedKeys = Object.keys(normalized).sort((left, right) => left.localeCompare(right));\n if (sortedKeys.length === 0) {\n return {\n normalized: undefined,\n errors,\n };\n }\n return {\n normalized: Object.fromEntries(sortedKeys.map((key) => [key, normalized[key]])),\n errors,\n };\n}\n", "/**\n * @module core/store/paths\n *\n * Reads and writes tracker storage with format-aware helpers for Paths.\n */\nimport { statSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { PM_DIRNAME, SETTINGS_FILENAME, TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport { toDefaultFolder } from \"../item/type-registry.js\";\nimport type { ItemFormat, ItemType } from \"../../types/index.js\";\n\nexport const ITEM_FILE_EXTENSION_BY_FORMAT: Record<ItemFormat, \".md\" | \".toon\"> = {\n json_markdown: \".md\",\n toon: \".toon\",\n};\n\nconst ITEM_FORMAT_BY_EXTENSION = {\n \".md\": \"json_markdown\",\n \".toon\": \"toon\",\n} as const satisfies Record<string, ItemFormat>;\n\nexport const ITEM_FILE_EXTENSIONS: Array<keyof typeof ITEM_FORMAT_BY_EXTENSION> = [\".md\", \".toon\"];\n\nfunction pathExists(pathValue: string): boolean {\n try {\n statSync(pathValue);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction discoverPmRootFromAncestors(cwd: string): string | undefined {\n let current = path.resolve(cwd);\n while (true) {\n const candidateRoot = path.join(current, PM_DIRNAME);\n const candidateSettingsPath = path.join(candidateRoot, SETTINGS_FILENAME);\n if (pathExists(candidateSettingsPath)) {\n return candidateRoot;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return undefined;\n }\n current = parent;\n }\n}\n\n/**\n * Implements resolve pm root for the public runtime surface of this module.\n */\nexport function resolvePmRoot(cwd: string, cliPath?: string): string {\n const envPath = process.env.PM_PATH;\n const explicitPath = cliPath?.trim() || envPath?.trim();\n if (explicitPath) {\n const resolved = path.resolve(cwd, explicitPath);\n // When an explicit --path/PM_PATH points at a project root that contains an\n // initialized `.agents/pm`, resolve into it. Without this, an agent passing\n // the directory where it ran `pm init` (which creates `<dir>/.agents/pm`)\n // hits a hard \"tracker not initialized\" dead-end, while cwd discovery walks\n // up to find the same `.agents/pm`. We only redirect when the path itself is\n // not already a tracker root, so `pm init --path <dir>` (which writes\n // `<dir>/settings.json` directly) and existing tracker roots keep working.\n if (!pathExists(getSettingsPath(resolved))) {\n const nestedRoot = path.join(resolved, PM_DIRNAME);\n if (pathExists(getSettingsPath(nestedRoot))) {\n return nestedRoot;\n }\n }\n return resolved;\n }\n const discoveredRoot = discoverPmRootFromAncestors(cwd);\n if (discoveredRoot) {\n return discoveredRoot;\n }\n const selected = PM_DIRNAME;\n return path.resolve(cwd, selected);\n}\n\n/**\n * Implements resolve global pm root for the public runtime surface of this module.\n */\nexport function resolveGlobalPmRoot(cwd: string): string {\n const envPath = process.env.PM_GLOBAL_PATH?.trim();\n const selected = envPath && envPath.length > 0 ? envPath : path.join(os.homedir(), \".pm-cli\");\n return path.resolve(cwd, selected);\n}\n\n/**\n * Implements get settings path for the public runtime surface of this module.\n */\nexport function getSettingsPath(pmRoot: string): string {\n return path.join(pmRoot, SETTINGS_FILENAME);\n}\n\n/**\n * Implements get type dir path for the public runtime surface of this module.\n */\nexport function getTypeDirPath(pmRoot: string, type: ItemType, typeToFolder: Record<string, string> = TYPE_TO_FOLDER): string {\n const folder = typeToFolder[type] ?? toDefaultFolder(type);\n return path.join(pmRoot, folder);\n}\n\n/**\n * Implements get item path for the public runtime surface of this module.\n */\nexport function getItemPath(\n pmRoot: string,\n type: ItemType,\n id: string,\n itemFormat: ItemFormat = \"toon\",\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n): string {\n return path.join(getTypeDirPath(pmRoot, type, typeToFolder), `${id}${ITEM_FILE_EXTENSION_BY_FORMAT[itemFormat]}`);\n}\n\n/**\n * Implements get item format from path for the public runtime surface of this module.\n */\nexport function getItemFormatFromPath(itemPath: string): ItemFormat | null {\n const normalizedItemPath = itemPath.replaceAll(\"\\\\\", \"/\");\n const extension = path.posix.extname(normalizedItemPath).toLowerCase() as keyof typeof ITEM_FORMAT_BY_EXTENSION;\n return ITEM_FORMAT_BY_EXTENSION[extension] ?? null;\n}\n\n/**\n * Implements get history path for the public runtime surface of this module.\n */\nexport function getHistoryPath(pmRoot: string, id: string): string {\n return path.join(pmRoot, \"history\", `${id}.jsonl`);\n}\n\n/**\n * Implements get lock path for the public runtime surface of this module.\n */\nexport function getLockPath(pmRoot: string, id: string): string {\n return path.join(pmRoot, \"locks\", `${id}.lock`);\n}\n\n/**\n * Implements get runtime path for the public runtime surface of this module.\n */\nexport function getRuntimePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\");\n}\n\n/**\n * Implements get test runs path for the public runtime surface of this module.\n */\nexport function getTestRunsPath(pmRoot: string): string {\n return path.join(getRuntimePath(pmRoot), \"test-runs\");\n}\n\n/**\n * Implements get test runs records path for the public runtime surface of this module.\n */\nexport function getTestRunsRecordsPath(pmRoot: string): string {\n return path.join(getTestRunsPath(pmRoot), \"runs\");\n}\n\n/**\n * Implements get test run record path for the public runtime surface of this module.\n */\nexport function getTestRunRecordPath(pmRoot: string, runId: string): string {\n return path.join(getTestRunsRecordsPath(pmRoot), `${runId}.json`);\n}\n\n/**\n * Implements get test runs stdout path for the public runtime surface of this module.\n */\nexport function getTestRunsStdoutPath(pmRoot: string): string {\n return path.join(getTestRunsPath(pmRoot), \"stdout\");\n}\n\n/**\n * Implements get test runs stderr path for the public runtime surface of this module.\n */\nexport function getTestRunsStderrPath(pmRoot: string): string {\n return path.join(getTestRunsPath(pmRoot), \"stderr\");\n}\n\n/**\n * Implements get test run stdout path for the public runtime surface of this module.\n */\nexport function getTestRunStdoutPath(pmRoot: string, runId: string): string {\n return path.join(getTestRunsStdoutPath(pmRoot), `${runId}.log`);\n}\n\n/**\n * Implements get test run stderr path for the public runtime surface of this module.\n */\nexport function getTestRunStderrPath(pmRoot: string, runId: string): string {\n return path.join(getTestRunsStderrPath(pmRoot), `${runId}.log`);\n}\n\n/**\n * Implements get test runs results path for the public runtime surface of this module.\n */\nexport function getTestRunsResultsPath(pmRoot: string): string {\n return path.join(getTestRunsPath(pmRoot), \"results\");\n}\n\n/**\n * Implements get test run result path for the public runtime surface of this module.\n */\nexport function getTestRunResultPath(pmRoot: string, runId: string): string {\n return path.join(getTestRunsResultsPath(pmRoot), `${runId}.json`);\n}\n", "/**\n * Common primitive utility functions shared across core modules.\n *\n * These reduce duplication of trivial helpers like string-presence checks,\n * error message extraction, and numeric array guards that were previously\n * duplicated in providers.ts, vector-stores.ts, lock.ts, cache.ts, and\n * several CLI command modules.\n */\n\n/** Return a trimmed non-empty string, or `null` for non-string/blank input. */\nexport function toNonEmptyString(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\n/**\n * Implements to non empty string or undefined for the public runtime surface of this module.\n */\nexport function toNonEmptyStringOrUndefined(value: unknown): string | undefined {\n const result = toNonEmptyString(value);\n return result ?? undefined;\n}\n\n/**\n * Implements trim trailing slashes for the public runtime surface of this module.\n */\nexport function trimTrailingSlashes(value: string): string {\n return value.replaceAll(/\\/+$/g, \"\");\n}\n\n/**\n * Implements check whether finite number array for the public runtime surface of this module.\n */\nexport function isFiniteNumberArray(value: unknown): value is number[] {\n return Array.isArray(value) && value.every((entry) => typeof entry === \"number\" && Number.isFinite(entry));\n}\n\n/**\n * Implements to error message for the public runtime surface of this module.\n */\nexport function toErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n const message = error.message.trim();\n return message.length > 0 ? message : error.name;\n }\n return String(error);\n}\n\n/**\n * Parse either a finite numeric literal or a non-empty numeric string.\n * Returns `null` for unsupported input types, empty strings, and non-finite\n * numeric values.\n */\nexport function coerceFiniteNumber(value: unknown): number | null {\n const parsed =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\" && value.trim().length > 0\n ? Number(value.trim())\n : Number.NaN;\n return Number.isFinite(parsed) ? parsed : null;\n}\n\n/**\n * Implements coerce positive integer for the public runtime surface of this module.\n */\nexport function coercePositiveInteger(value: unknown): number | null {\n const parsed = coerceFiniteNumber(value);\n if (parsed === null || parsed <= 0 || !Number.isInteger(parsed)) {\n return null;\n }\n return parsed;\n}\n\n/**\n * Implements coerce number in range for the public runtime surface of this module.\n */\nexport function coerceNumberInRange(value: unknown, min: number, max: number): number | null {\n const parsed = coerceFiniteNumber(value);\n if (parsed === null || parsed < min || parsed > max) {\n return null;\n }\n return parsed;\n}\n\n/**\n * Narrow a value to a plain object, returning `null` for non-objects,\n * `null`, and arrays. Returns the original reference (no clone).\n *\n * Matches the historical `asRecord` in src/cli/main.ts.\n */\nexport function asRecordOrNull(value: unknown): Record<string, unknown> | null {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\n/**\n * Narrow a value to a plain object, returning `null` only for non-objects and\n * `null` while accepting arrays (arrays are objects). Returns the original\n * reference (no clone).\n *\n * Matches the historical `asRecord` in src/core/extensions/loader.ts, which\n * intentionally omits the array guard.\n */\nexport function asRecordLoose(value: unknown): Record<string, unknown> | null {\n if (typeof value !== \"object\" || value === null) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\n/**\n * Narrow a value to a property-bearing object or function. Dynamic module\n * exports can be function/class values with static lifecycle properties, so\n * activation boundaries need a wider record shape than plain-object parsing.\n */\nexport function asPropertyRecord(value: unknown): Record<string, unknown> | null {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value === null) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\n/**\n * Resolve the module or default export record that owns an `activate` lifecycle\n * function. Accepts object and function/class-shaped exports so runtime loading\n * and SDK tests share the same extension interop rule.\n */\nexport function resolveActivatablePropertyRecord(value: unknown): Record<string, unknown> | null {\n const moduleRecord = asPropertyRecord(value);\n if (!moduleRecord) {\n return null;\n }\n if (typeof moduleRecord.activate === \"function\") {\n return moduleRecord;\n }\n const defaultExport = asPropertyRecord(moduleRecord.default);\n return typeof defaultExport?.activate === \"function\" ? defaultExport : null;\n}\n\n/**\n * Narrow a value to a plain object, returning an empty object for non-objects,\n * `null`, and arrays. Returns a shallow clone of the source object.\n *\n * Matches the historical `asRecord` in src/mcp/server.ts.\n */\nexport function asRecordClone(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? ({ ...value } as Record<string, unknown>)\n : {};\n}\n", "/**\n * @module core/shared/levenshtein\n *\n * Provides shared primitives and utilities for Levenshtein.\n */\n// Optimal String Alignment (OSA) Damerau–Levenshtein: counts a single adjacent\n// transposition as one edit (e.g. \"titel\" vs \"title\", \"lst\" vs \"lts\" -> \"list\")\n// so flag/command typo suggestions catch transpositions at the same maxDistance\n// budget plain Levenshtein uses for substitutions. pm-fl0c #6 (2026-05-28):\n// fixed because plain Levenshtein scored \"titel\"->\"title\" at 2, defeating the\n// length-5 maxDistance=1 ceiling in suggestNearestLongFlags.\n/**\n * Computes bounded Levenshtein distance for typo suggestions without scanning unnecessary suffixes.\n */\nexport function levenshteinDistanceWithinLimit(left: string, right: string, limit: number): number | null {\n if (left === right) {\n return 0;\n }\n if (Math.abs(left.length - right.length) > limit) {\n return null;\n }\n const width = right.length + 1;\n const beforePrevious = new Array<number>(width);\n const previous = new Array<number>(width);\n const current = new Array<number>(width);\n for (let column = 0; column < width; column += 1) {\n beforePrevious[column] = 0;\n previous[column] = column;\n }\n for (let row = 1; row <= left.length; row += 1) {\n current[0] = row;\n let rowMin = current[0];\n for (let column = 1; column <= right.length; column += 1) {\n const cost = left[row - 1] === right[column - 1] ? 0 : 1;\n const substitution = previous[column - 1] + cost;\n const insertion = current[column - 1] + 1;\n const deletion = previous[column] + 1;\n let candidate = Math.min(substitution, insertion, deletion);\n if (\n row > 1 &&\n column > 1 &&\n left[row - 1] === right[column - 2] &&\n left[row - 2] === right[column - 1]\n ) {\n candidate = Math.min(candidate, beforePrevious[column - 2] + 1);\n }\n current[column] = candidate;\n if (candidate < rowMin) {\n rowMin = candidate;\n }\n }\n if (rowMin > limit) {\n return null;\n }\n for (let column = 0; column < width; column += 1) {\n beforePrevious[column] = previous[column];\n previous[column] = current[column];\n }\n }\n const result = previous[right.length];\n return result <= limit ? result : null;\n}\n", "/**\n * @module core/extensions/extension-capability-aliases\n *\n * Implements extension runtime contracts and governance for Extension Capability Aliases.\n */\nimport {\n KNOWN_EXTENSION_CAPABILITIES,\n EXTENSION_CAPABILITY_CONTRACT_VERSION,\n EXTENSION_CAPABILITY_LEGACY_ALIASES,\n type ExtensionCapability,\n type ExtensionLayer,\n type LegacyExtensionCapabilityAliasMapping,\n type UnknownExtensionCapabilityWarningDetails,\n} from \"./extension-types.js\";\nimport { levenshteinDistanceWithinLimit } from \"../shared/levenshtein.js\";\n\n/**\n * Implements normalize names for the public runtime surface of this module.\n */\nexport function normalizeNames(values: string[]): string[] {\n return [...new Set(values.map((value) => value.trim()).filter((value) => value.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n );\n}\n\n/**\n * Implements check whether known extension capability for the public runtime surface of this module.\n */\nexport function isKnownExtensionCapability(value: string): value is ExtensionCapability {\n return (KNOWN_EXTENSION_CAPABILITIES as readonly string[]).includes(value);\n}\n\n/**\n * Trim and lower-case a capability token, returning it only when it is a known\n * canonical capability (otherwise `null`). Shared so capability normalization\n * and known-capability filtering stay identical across the doctor and the SDK\n * least-privilege helpers.\n */\nexport function normalizeKnownExtensionCapability(value: string): ExtensionCapability | null {\n const normalized = value.trim().toLowerCase();\n return isKnownExtensionCapability(normalized) ? normalized : null;\n}\n\n/**\n * Implements collect unknown extension capabilities for the public runtime surface of this module.\n */\nexport function collectUnknownExtensionCapabilities(capabilities: readonly string[]): string[] {\n return capabilities.filter((capability) => !isKnownExtensionCapability(capability));\n}\n\n/**\n * Implements resolve legacy extension capability alias for the public runtime surface of this module.\n */\nexport function resolveLegacyExtensionCapabilityAlias(capability: string): ExtensionCapability | null {\n const normalized = capability.trim().toLowerCase();\n if (normalized.length === 0) {\n return null;\n }\n return EXTENSION_CAPABILITY_LEGACY_ALIASES[normalized] ?? null;\n}\n\n/**\n * Implements normalize manifest capabilities for the public runtime surface of this module.\n */\nexport function normalizeManifestCapabilities(rawCapabilities: readonly string[]): {\n capabilities: string[];\n legacy_aliases: LegacyExtensionCapabilityAliasMapping[];\n} {\n const normalizedCapabilities = normalizeNames([...rawCapabilities].map((value) => value.toLowerCase()));\n const remappedCapabilities: string[] = [];\n const legacyAliases: LegacyExtensionCapabilityAliasMapping[] = [];\n for (const capability of normalizedCapabilities) {\n const legacyAliasTarget = resolveLegacyExtensionCapabilityAlias(capability);\n if (legacyAliasTarget) {\n remappedCapabilities.push(legacyAliasTarget);\n legacyAliases.push({\n alias: capability,\n target: legacyAliasTarget,\n });\n continue;\n }\n remappedCapabilities.push(capability);\n }\n const dedupedLegacyAliases = [...new Map(legacyAliases.map((entry) => [`${entry.alias}>${entry.target}`, entry])).values()].sort(\n (left, right) => left.alias.localeCompare(right.alias),\n );\n return {\n capabilities: normalizeNames(remappedCapabilities),\n legacy_aliases: dedupedLegacyAliases,\n };\n}\n\n/**\n * Implements suggest known extension capability for the public runtime surface of this module.\n */\nexport function suggestKnownExtensionCapability(capability: string): string | null {\n const normalized = capability.trim().toLowerCase();\n if (normalized.length === 0) {\n return null;\n }\n const legacyAlias = resolveLegacyExtensionCapabilityAlias(normalized);\n if (legacyAlias) {\n return legacyAlias;\n }\n const maxDistance = Math.max(1, Math.floor(normalized.length * 0.34));\n let bestMatch: string | null = null;\n let bestDistance = Number.POSITIVE_INFINITY;\n for (const candidate of KNOWN_EXTENSION_CAPABILITIES) {\n const distance = levenshteinDistanceWithinLimit(normalized, candidate, maxDistance);\n if (distance !== null && distance < bestDistance) {\n bestDistance = distance;\n bestMatch = candidate;\n }\n }\n return bestMatch;\n}\n\n/**\n * Implements format unknown extension capability warning for the public runtime surface of this module.\n */\nexport function formatUnknownExtensionCapabilityWarning(layer: ExtensionLayer, name: string, capability: string): string {\n const allowed = KNOWN_EXTENSION_CAPABILITIES.join(\",\");\n const suggested = suggestKnownExtensionCapability(capability) ?? \"none\";\n return `extension_capability_unknown:${layer}:${name}:${capability}:allowed=${allowed}:suggested=${suggested}`;\n}\n\n/**\n * Implements format legacy extension capability alias warning for the public runtime surface of this module.\n */\nexport function formatLegacyExtensionCapabilityAliasWarning(\n layer: ExtensionLayer,\n name: string,\n aliases: readonly LegacyExtensionCapabilityAliasMapping[],\n): string {\n const aliasesToken = aliases.map((entry) => `${entry.alias}>${entry.target}`).join(\",\");\n return `extension_capability_legacy_alias:${layer}:${name}:aliases=${aliasesToken}`;\n}\n\n\n/**\n * Implements parse unknown extension capability warning for the public runtime surface of this module.\n */\nexport function parseUnknownExtensionCapabilityWarning(\n warning: string,\n): UnknownExtensionCapabilityWarningDetails | null {\n const match = /^extension_capability_unknown:(global|project):([^:]+):([^:]+):allowed=([^:]+):suggested=([^:]+)$/.exec(\n warning.trim(),\n );\n if (!match) {\n return null;\n }\n const [, layerRaw, name, capability, allowedRaw, suggestedRaw] = match;\n const layer = layerRaw as ExtensionLayer;\n const allowed_capabilities = allowedRaw\n .split(\",\")\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n const legacyAlias = resolveLegacyExtensionCapabilityAlias(capability);\n const suggestedFromWarning = suggestedRaw === \"none\" ? undefined : suggestedRaw;\n const suggested_capability = suggestedFromWarning ?? legacyAlias ?? undefined;\n const suggestion_source = suggested_capability\n ? legacyAlias === suggested_capability\n ? \"legacy_alias\"\n : \"nearest_match\"\n : undefined;\n return {\n layer,\n name,\n capability,\n allowed_capabilities,\n capability_contract_version: EXTENSION_CAPABILITY_CONTRACT_VERSION,\n suggested_capability,\n suggestion_source,\n legacy_alias_target: legacyAlias ?? undefined,\n };\n}\n\n/**\n * Implements parse legacy extension capability alias warning for the public runtime surface of this module.\n */\nexport function parseLegacyExtensionCapabilityAliasWarning(warning: string): UnknownExtensionCapabilityWarningDetails[] {\n const match = /^extension_capability_legacy_alias:(global|project):([^:]+):aliases=(.+)$/.exec(warning.trim());\n if (!match) {\n return [];\n }\n const [, layerRaw, name, aliasesRaw] = match;\n const layer = layerRaw as ExtensionLayer;\n const allowedCapabilities = [...KNOWN_EXTENSION_CAPABILITIES];\n const parsed: UnknownExtensionCapabilityWarningDetails[] = [];\n for (const token of aliasesRaw.split(\",\")) {\n const [rawAlias, rawTarget] = token.split(\">\");\n const alias = rawAlias?.trim();\n const target = rawTarget?.trim().toLowerCase();\n if (!alias || !target || !isKnownExtensionCapability(target)) {\n continue;\n }\n parsed.push({\n layer,\n name,\n capability: alias,\n allowed_capabilities: allowedCapabilities,\n capability_contract_version: EXTENSION_CAPABILITY_CONTRACT_VERSION,\n suggested_capability: target,\n suggestion_source: \"legacy_alias\",\n legacy_alias_target: target,\n });\n }\n return parsed;\n}\n", "/**\n * @module core/extensions/extension-registries\n *\n * Implements extension runtime contracts and governance for Extension Registries.\n */\nimport type {\n ExtensionHookRegistry,\n ExtensionCommandRegistry,\n ExtensionParserRegistry,\n ExtensionPreflightRegistry,\n ExtensionServiceRegistry,\n ExtensionRendererRegistry,\n ExtensionRegistrationRegistry,\n} from \"./extension-types.js\";\n\n/**\n * Implements create empty extension hook registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionHookRegistry(): ExtensionHookRegistry {\n return {\n beforeCommand: [],\n afterCommand: [],\n onWrite: [],\n onRead: [],\n onIndex: [],\n };\n}\n\n/**\n * Implements create empty extension command registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionCommandRegistry(): ExtensionCommandRegistry {\n return {\n overrides: [],\n handlers: [],\n };\n}\n\n/**\n * Implements create empty extension parser registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionParserRegistry(): ExtensionParserRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension preflight registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionPreflightRegistry(): ExtensionPreflightRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension service registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionServiceRegistry(): ExtensionServiceRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension renderer registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionRendererRegistry(): ExtensionRendererRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension registration registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionRegistrationRegistry(): ExtensionRegistrationRegistry {\n return {\n commands: [],\n flags: [],\n item_fields: [],\n item_types: [],\n migrations: [],\n profiles: [],\n importers: [],\n exporters: [],\n search_providers: [],\n vector_store_adapters: [],\n };\n}\n", "/**\n * @module core/extensions/extension-runtime-helpers\n *\n * Implements extension runtime contracts and governance for Extension Runtime Helpers.\n */\nimport type { GlobalOptions } from \"../shared/command-types.js\";\n\n/**\n * Implements normalize command name for the public runtime surface of this module.\n */\nexport function normalizeCommandName(command: string): string {\n return command\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\n/**\n * Implements default global options for the public runtime surface of this module.\n */\nexport function defaultGlobalOptions(): GlobalOptions {\n return {\n json: false,\n quiet: false,\n noExtensions: false,\n profile: false,\n };\n}\n\n/**\n * Implements clone command options snapshot for the public runtime surface of this module.\n */\nexport function cloneCommandOptionsSnapshot(options: Record<string, unknown> | undefined): Record<string, unknown> {\n return options ? cloneContextSnapshot(options) : {};\n}\n\n/**\n * Implements clone global options snapshot for the public runtime surface of this module.\n */\nexport function cloneGlobalOptionsSnapshot(options: GlobalOptions | undefined): GlobalOptions {\n return options ? cloneContextSnapshot(options) : defaultGlobalOptions();\n}\n\n/**\n * Implements clone context snapshot for the public runtime surface of this module.\n */\nexport function cloneContextSnapshot<T>(value: T): T {\n return structuredClone(value);\n}\n", "/**\n * @module core/extensions/extension-hook-runtime\n *\n * Implements extension runtime contracts and governance for Extension Hook Runtime.\n */\nimport {\n cloneCommandOptionsSnapshot,\n cloneContextSnapshot,\n cloneGlobalOptionsSnapshot,\n normalizeCommandName,\n} from \"./extension-runtime-helpers.js\";\nimport type {\n RegisteredExtensionHook,\n ExtensionHookRegistry,\n BeforeCommandHookContext,\n AfterCommandHookContext,\n OnWriteHookContext,\n OnReadHookContext,\n OnIndexHookContext,\n ExtensionCommandRegistry,\n CommandHandlerContext,\n CommandHandlerResult,\n ExtensionParserRegistry,\n ParserOverrideContext,\n ParserOverrideResult,\n ExtensionPreflightRegistry,\n PreflightOverrideContext,\n PreflightOverrideResult,\n PreflightRuntimeDecision,\n ExtensionServiceRegistry,\n ServiceOverrideContext,\n ServiceOverrideResult,\n CommandOverrideContext,\n CommandOverrideResult,\n ExtensionRendererRegistry,\n RendererOverrideContext,\n RendererOverrideResult,\n} from \"./extension-types.js\";\n\ntype HookName = keyof ExtensionHookRegistry;\n\nasync function executeRegisteredHooks<TContext>(\n entries: Array<RegisteredExtensionHook<(context: TContext) => Promise<void> | void>>,\n hookName: HookName,\n context: TContext,\n): Promise<string[]> {\n const warnings: string[] = [];\n for (const entry of entries) {\n try {\n await entry.run(cloneContextSnapshot(context));\n } catch {\n warnings.push(`extension_hook_failed:${entry.layer}:${entry.name}:${hookName}`);\n }\n }\n return warnings;\n}\n\n/**\n * Implements run before command hooks for the public runtime surface of this module.\n */\nexport async function runBeforeCommandHooks(\n hooks: ExtensionHookRegistry,\n context: BeforeCommandHookContext,\n): Promise<string[]> {\n return executeRegisteredHooks(hooks.beforeCommand, \"beforeCommand\", context);\n}\n\n/**\n * Implements run after command hooks for the public runtime surface of this module.\n */\nexport async function runAfterCommandHooks(\n hooks: ExtensionHookRegistry,\n context: AfterCommandHookContext,\n): Promise<string[]> {\n return executeRegisteredHooks(hooks.afterCommand, \"afterCommand\", context);\n}\n\n/**\n * Implements run on write hooks for the public runtime surface of this module.\n */\nexport async function runOnWriteHooks(hooks: ExtensionHookRegistry, context: OnWriteHookContext): Promise<string[]> {\n return executeRegisteredHooks(hooks.onWrite, \"onWrite\", context);\n}\n\n/**\n * Implements run on read hooks for the public runtime surface of this module.\n */\nexport async function runOnReadHooks(hooks: ExtensionHookRegistry, context: OnReadHookContext): Promise<string[]> {\n return executeRegisteredHooks(hooks.onRead, \"onRead\", context);\n}\n\n/**\n * Implements run on index hooks for the public runtime surface of this module.\n */\nexport async function runOnIndexHooks(hooks: ExtensionHookRegistry, context: OnIndexHookContext): Promise<string[]> {\n return executeRegisteredHooks(hooks.onIndex, \"onIndex\", context);\n}\n\n\n\n/**\n * Normalize an extension handler failure into a single-line, length-bounded\n * message so the real cause can be surfaced to the user/CI without leaking\n * multi-line stack noise or unbounded payloads.\n */\nfunction describeHandlerError(error: unknown): string {\n let raw = \"\";\n if (error instanceof Error && typeof error.message === \"string\") {\n raw = error.message;\n } else if (typeof error === \"string\") {\n raw = error;\n } else if (\n typeof error === \"object\" &&\n error !== null &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n // Extensions may throw plain/serialized objects that carry a message but do\n // not inherit from the base Error class.\n raw = (error as { message: string }).message;\n }\n const normalized = raw.replace(/\\s+/gu, \" \").trim();\n if (normalized.length === 0) {\n return \"\";\n }\n const maxLength = 300;\n return normalized.length > maxLength ? `${normalized.slice(0, maxLength - 1)}…` : normalized;\n}\n\n/**\n * Implements run command handler for the public runtime surface of this module.\n */\nexport async function runCommandHandler(\n commands: ExtensionCommandRegistry,\n context: CommandHandlerContext,\n): Promise<CommandHandlerResult> {\n const command = normalizeCommandName(context.command);\n if (command.length === 0) {\n return {\n handled: false,\n result: null,\n warnings: [],\n };\n }\n\n const matched = [...commands.handlers].reverse().find((entry) => entry.command === command);\n if (!matched) {\n return {\n handled: false,\n result: null,\n warnings: [],\n };\n }\n\n try {\n const result = await matched.run({\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneContextSnapshot(context.options),\n global: cloneContextSnapshot(context.global),\n pm_root: context.pm_root,\n });\n return {\n handled: true,\n result,\n warnings: [],\n };\n } catch (error: unknown) {\n const exitCode =\n typeof error === \"object\" && error !== null && \"exitCode\" in error\n ? (error as { exitCode?: unknown }).exitCode\n : undefined;\n if (typeof exitCode === \"number\" && Number.isFinite(exitCode)) {\n throw error;\n }\n return {\n handled: false,\n result: null,\n warnings: [`extension_command_handler_failed:${matched.layer}:${matched.name}:${matched.command}`],\n errorMessage: describeHandlerError(error),\n };\n }\n}\n\n\n/**\n * Implements run parser override for the public runtime surface of this module.\n */\nexport async function runParserOverride(\n parsers: ExtensionParserRegistry,\n context: ParserOverrideContext,\n): Promise<ParserOverrideResult> {\n const command = normalizeCommandName(context.command);\n if (command.length === 0) {\n return {\n overridden: false,\n context: {\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n },\n warnings: [],\n };\n }\n\n const matched = [...parsers.overrides].reverse().find((entry) => entry.command === command);\n if (!matched) {\n return {\n overridden: false,\n context: {\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n },\n warnings: [],\n };\n }\n\n try {\n const delta = (await Promise.resolve(\n matched.run({\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n }),\n )) ?? {};\n const nextArgs = Array.isArray(delta.args) ? cloneContextSnapshot(delta.args) : cloneContextSnapshot(context.args);\n const nextOptions = delta.options ? cloneCommandOptionsSnapshot(delta.options) : cloneCommandOptionsSnapshot(context.options);\n const nextGlobal = delta.global ? cloneGlobalOptionsSnapshot(delta.global) : cloneGlobalOptionsSnapshot(context.global);\n return {\n overridden: true,\n context: {\n command,\n args: nextArgs,\n options: nextOptions,\n global: nextGlobal,\n pm_root: context.pm_root,\n },\n warnings: [],\n };\n } catch {\n return {\n overridden: false,\n context: {\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n },\n warnings: [`extension_parser_override_failed:${matched.layer}:${matched.name}:${matched.command}`],\n };\n }\n}\n\n\n/**\n * Implements run preflight override for the public runtime surface of this module.\n */\nexport async function runPreflightOverride(\n preflight: ExtensionPreflightRegistry,\n context: PreflightOverrideContext,\n): Promise<PreflightOverrideResult> {\n const matched = [...preflight.overrides].reverse()[0];\n const baseContext: CommandHandlerContext = {\n command: normalizeCommandName(context.command),\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n };\n const baseDecision: PreflightRuntimeDecision = cloneContextSnapshot(context.decision);\n if (!matched) {\n return {\n overridden: false,\n context: baseContext,\n decision: baseDecision,\n warnings: [],\n };\n }\n\n try {\n const delta = (await Promise.resolve(\n matched.run({\n command: baseContext.command,\n args: cloneContextSnapshot(baseContext.args),\n options: cloneCommandOptionsSnapshot(baseContext.options),\n global: cloneGlobalOptionsSnapshot(baseContext.global),\n pm_root: baseContext.pm_root,\n decision: cloneContextSnapshot(baseDecision),\n }),\n )) ?? {};\n const nextContext: CommandHandlerContext = {\n command: baseContext.command,\n args: Array.isArray(delta.args) ? cloneContextSnapshot(delta.args) : baseContext.args,\n options: delta.options ? cloneCommandOptionsSnapshot(delta.options) : baseContext.options,\n global: delta.global ? cloneGlobalOptionsSnapshot(delta.global) : baseContext.global,\n pm_root: baseContext.pm_root,\n };\n const nextDecision: PreflightRuntimeDecision = {\n enforce_item_format_gate:\n typeof delta.enforce_item_format_gate === \"boolean\"\n ? delta.enforce_item_format_gate\n : baseDecision.enforce_item_format_gate,\n run_preflight_item_format_sync:\n typeof delta.run_preflight_item_format_sync === \"boolean\"\n ? delta.run_preflight_item_format_sync\n : baseDecision.run_preflight_item_format_sync,\n run_extension_migrations:\n typeof delta.run_extension_migrations === \"boolean\"\n ? delta.run_extension_migrations\n : baseDecision.run_extension_migrations,\n enforce_mandatory_migration_gate:\n typeof delta.enforce_mandatory_migration_gate === \"boolean\"\n ? delta.enforce_mandatory_migration_gate\n : baseDecision.enforce_mandatory_migration_gate,\n };\n return {\n overridden: true,\n context: nextContext,\n decision: nextDecision,\n warnings: [],\n };\n } catch {\n return {\n overridden: false,\n context: baseContext,\n decision: baseDecision,\n warnings: [`extension_preflight_override_failed:${matched.layer}:${matched.name}`],\n };\n }\n}\n\n\nfunction resolveDefaultServiceResult(context: ServiceOverrideContext): ServiceOverrideResult {\n return {\n handled: false,\n result: context.payload,\n warnings: [],\n };\n}\n\n/**\n * Implements run service override sync for the public runtime surface of this module.\n */\nexport function runServiceOverrideSync(\n services: ExtensionServiceRegistry,\n context: ServiceOverrideContext,\n): ServiceOverrideResult {\n const matches = [...services.overrides].reverse().filter((entry) => entry.service === context.service);\n if (matches.length === 0) {\n return resolveDefaultServiceResult(context);\n }\n\n const warnings: string[] = [];\n for (const matched of matches) {\n try {\n const serviceContext = {\n service: context.service,\n command: context.command ? normalizeCommandName(context.command) : undefined,\n args: context.args ? cloneContextSnapshot(context.args) : undefined,\n options: context.options ? cloneCommandOptionsSnapshot(context.options) : undefined,\n global: context.global ? cloneGlobalOptionsSnapshot(context.global) : undefined,\n pm_root: context.pm_root,\n payload: cloneContextSnapshot(context.payload),\n };\n const result = matched.run(serviceContext);\n if (result instanceof Promise) {\n warnings.push(`extension_service_override_async_unsupported:${matched.layer}:${matched.name}:${matched.service}`);\n continue;\n }\n if (context.service === \"output_format\" && (result === null || result === undefined || result === serviceContext.payload)) {\n continue;\n }\n return {\n handled: true,\n result,\n warnings,\n };\n } catch {\n warnings.push(`extension_service_override_failed:${matched.layer}:${matched.name}:${matched.service}`);\n }\n }\n return {\n handled: false,\n result: context.payload,\n warnings,\n };\n}\n\n/**\n * Implements run service override for the public runtime surface of this module.\n */\nexport async function runServiceOverride(\n services: ExtensionServiceRegistry,\n context: ServiceOverrideContext,\n): Promise<ServiceOverrideResult> {\n const matches = [...services.overrides].reverse().filter((entry) => entry.service === context.service);\n if (matches.length === 0) {\n return resolveDefaultServiceResult(context);\n }\n\n const warnings: string[] = [];\n for (const matched of matches) {\n try {\n const serviceContext = {\n service: context.service,\n command: context.command ? normalizeCommandName(context.command) : undefined,\n args: context.args ? cloneContextSnapshot(context.args) : undefined,\n options: context.options ? cloneCommandOptionsSnapshot(context.options) : undefined,\n global: context.global ? cloneGlobalOptionsSnapshot(context.global) : undefined,\n pm_root: context.pm_root,\n payload: cloneContextSnapshot(context.payload),\n };\n const result = await Promise.resolve(matched.run(serviceContext));\n if (context.service === \"output_format\" && (result === null || result === undefined || result === serviceContext.payload)) {\n continue;\n }\n return {\n handled: true,\n result,\n warnings,\n };\n } catch {\n warnings.push(`extension_service_override_failed:${matched.layer}:${matched.name}:${matched.service}`);\n }\n }\n return {\n handled: false,\n result: context.payload,\n warnings,\n };\n}\n\n/**\n * Implements run command override for the public runtime surface of this module.\n */\nexport function runCommandOverride(\n commands: ExtensionCommandRegistry,\n context: CommandOverrideContext,\n): CommandOverrideResult {\n const command = normalizeCommandName(context.command);\n if (command.length === 0) {\n return {\n overridden: false,\n result: context.result,\n warnings: [],\n };\n }\n\n const matched = [...commands.overrides].reverse().find((entry) => entry.command === command);\n if (!matched) {\n return {\n overridden: false,\n result: context.result,\n warnings: [],\n };\n }\n\n try {\n const overrideOptions = cloneCommandOptionsSnapshot(context.options);\n const overrideGlobal = cloneGlobalOptionsSnapshot(context.global);\n const overrideResult = matched.run({\n command,\n args: cloneContextSnapshot(context.args),\n options: overrideOptions,\n global: overrideGlobal,\n pm_root: context.pm_root,\n result: cloneContextSnapshot(context.result),\n });\n if (overrideResult instanceof Promise) {\n return {\n overridden: false,\n result: context.result,\n warnings: [`extension_command_override_async_unsupported:${matched.layer}:${matched.name}:${matched.command}`],\n };\n }\n return {\n overridden: true,\n result: overrideResult,\n warnings: [],\n };\n } catch {\n return {\n overridden: false,\n result: context.result,\n warnings: [`extension_command_override_failed:${matched.layer}:${matched.name}:${matched.command}`],\n };\n }\n}\n\n\n/**\n * Implements run renderer override for the public runtime surface of this module.\n */\nexport function runRendererOverride(\n renderers: ExtensionRendererRegistry,\n context: RendererOverrideContext,\n): RendererOverrideResult {\n const matched = [...renderers.overrides].reverse().find((entry) => entry.format === context.format);\n if (!matched) {\n return {\n overridden: false,\n rendered: null,\n warnings: [],\n };\n }\n\n try {\n const rendererCommand = typeof context.command === \"string\" ? normalizeCommandName(context.command) : \"\";\n const rendererArgs = Array.isArray(context.args) ? cloneContextSnapshot(context.args) : [];\n const rendererOptions = cloneCommandOptionsSnapshot(context.options);\n const rendererGlobal = cloneGlobalOptionsSnapshot(context.global);\n const rendererPmRoot = typeof context.pm_root === \"string\" ? context.pm_root : \"\";\n const rendered = matched.run({\n format: context.format,\n command: rendererCommand,\n args: rendererArgs,\n options: rendererOptions,\n global: rendererGlobal,\n pm_root: rendererPmRoot,\n result: cloneContextSnapshot(context.result),\n });\n if (rendered === null || rendered === undefined) {\n return {\n overridden: false,\n rendered: null,\n warnings: [],\n };\n }\n if (typeof rendered !== \"string\") {\n return {\n overridden: false,\n rendered: null,\n warnings: [`extension_renderer_invalid_result:${matched.layer}:${matched.name}:${matched.format}`],\n };\n }\n return {\n overridden: true,\n rendered,\n warnings: [],\n };\n } catch {\n return {\n overridden: false,\n rendered: null,\n warnings: [`extension_renderer_failed:${matched.layer}:${matched.name}:${matched.format}`],\n };\n }\n}\n", "/**\n * @module core/extensions/loader\n *\n * Implements extension runtime contracts and governance for Loader.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { pathExists } from \"../fs/fs-utils.js\";\nimport { isPathWithinDirectory } from \"../fs/path-utils.js\";\nimport { resolvePmPackageRootFromModule } from \"../packages/root.js\";\nimport { resolveGlobalPmRoot } from \"../store/paths.js\";\nimport { asRecordLoose, resolveActivatablePropertyRecord } from \"../shared/primitives.js\";\nimport { flattenFlagListValue, isFlagDefaultValueCoercible, resolveFlagValueKind } from \"./flag-value-types.js\";\nimport { KNOWN_ITEM_FIELD_TYPES, normalizeItemFieldType, suggestKnownItemFieldType } from \"./item-field-types.js\";\nimport {\n compareComparableVersions,\n evaluatePmMaxVersionBound,\n evaluatePmMinVersionBound,\n parseComparableVersion,\n type PmVersionBoundEvaluation,\n} from \"./version-compat.js\";\nimport type { ProjectProfileDefinition, ProjectProfileRegistrationInput } from \"../profile/profile-presets.js\";\n// Cohesive helper groups now live in sibling modules. They are imported for the\n// discovery/activation code that stays here and re-exported below so existing\n// import sites (sdk/index.ts, commands/extension.ts, health.ts, tests, …) keep\n// importing everything from \"./loader.js\" unchanged.\nimport {\n normalizeNames,\n isKnownExtensionCapability,\n collectUnknownExtensionCapabilities,\n normalizeManifestCapabilities,\n formatUnknownExtensionCapabilityWarning,\n formatLegacyExtensionCapabilityAliasWarning,\n} from \"./extension-capability-aliases.js\";\nimport {\n normalizeExtensionPolicy,\n serializeExtensionPolicy,\n hydrateExtensionPolicy,\n normalizePolicySandboxProfile,\n evaluateExtensionPolicyForExtension,\n evaluateExtensionPolicyForCapability,\n evaluateExtensionPolicyForRegistration,\n type NormalizedExtensionPolicy,\n type PolicyExtensionRef,\n} from \"./extension-policy.js\";\nimport {\n createEmptyExtensionHookRegistry,\n createEmptyExtensionCommandRegistry,\n createEmptyExtensionParserRegistry,\n createEmptyExtensionPreflightRegistry,\n createEmptyExtensionServiceRegistry,\n createEmptyExtensionRendererRegistry,\n createEmptyExtensionRegistrationRegistry,\n} from \"./extension-registries.js\";\nimport {\n normalizeCommandName,\n cloneContextSnapshot,\n} from \"./extension-runtime-helpers.js\";\nexport {\n parseUnknownExtensionCapabilityWarning,\n parseLegacyExtensionCapabilityAliasWarning,\n} from \"./extension-capability-aliases.js\";\nexport {\n createEmptyExtensionHookRegistry,\n createEmptyExtensionCommandRegistry,\n createEmptyExtensionParserRegistry,\n createEmptyExtensionPreflightRegistry,\n createEmptyExtensionServiceRegistry,\n createEmptyExtensionRendererRegistry,\n createEmptyExtensionRegistrationRegistry,\n} from \"./extension-registries.js\";\nexport {\n runBeforeCommandHooks,\n runAfterCommandHooks,\n runOnWriteHooks,\n runOnReadHooks,\n runOnIndexHooks,\n runCommandHandler,\n runParserOverride,\n runPreflightOverride,\n runServiceOverrideSync,\n runServiceOverride,\n runCommandOverride,\n runRendererOverride,\n} from \"./extension-hook-runtime.js\";\nimport {\n KNOWN_EXTENSION_CAPABILITIES,\n KNOWN_EXTENSION_SERVICE_NAMES,\n createDefaultExtensionGovernancePolicy,\n type ExtensionDeactivationFailure,\n type ExtensionDeactivationOptions,\n type ExtensionDeactivationResult,\n type ExtensionSelfIdentity,\n type ExtensionCapability,\n type ExtensionPolicySurface,\n type ExtensionSandboxProfile,\n type ExtensionGovernancePolicy,\n type PmMaxVersionExceededMode,\n type ExtensionLayer,\n type ExtensionManifest,\n type ExtensionManifestEngines,\n type ExtensionDiagnostic,\n type EffectiveExtension,\n type ExtensionDiscoveryResult,\n type LoadedExtension,\n type FailedExtensionLoad,\n type ExtensionLoadResult,\n type BeforeCommandHook,\n type AfterCommandHook,\n type OnWriteHook,\n type OnReadHook,\n type OnIndexHook,\n type OutputRendererFormat,\n type CommandOverride,\n type RendererOverride,\n type CommandHandler,\n type ParserOverride,\n type PreflightOverride,\n type ServiceOverride,\n type ExtensionHookRegistry,\n type ExtensionServiceName,\n type ExtensionCommandArgumentDefinition,\n type CommandDefinition,\n type FlagDefinition,\n type SchemaFieldDefinition,\n type SchemaItemTypeDefinition,\n type SchemaMigrationDefinition,\n type ImportExportRegistrationOptions,\n type Importer,\n type Exporter,\n type SearchProviderDefinition,\n type VectorStoreAdapterDefinition,\n type RegisteredExtensionParserOverride,\n type RegisteredExtensionServiceOverride,\n type RegisteredExtensionRendererOverride,\n type ExtensionCommandRegistry,\n type ExtensionParserRegistry,\n type ExtensionPreflightRegistry,\n type ExtensionServiceRegistry,\n type ExtensionRendererRegistry,\n type RegisteredExtensionCommandDefinition,\n type RegisteredExtensionSchemaMigrationDefinition,\n type RegisteredExtensionSearchProvider,\n type RegisteredExtensionVectorStoreAdapter,\n type ExtensionRegistrationRegistry,\n type ExtensionRegistrationCounts,\n type ExtensionApi,\n type FailedExtensionActivation,\n type ExtensionActivationFailureTrace,\n type ExtensionActivationResult,\n type ExtensionCandidate,\n type ExtensionLayerScanResult,\n type ScannedExtensionDirectory,\n type LegacyExtensionCapabilityAliasMapping,\n type DiscoverExtensionsOptions,\n type ActivatableExtension,\n} from \"./extension-types.js\";\nexport * from \"./extension-types.js\";\n\nexport const DEFAULT_EXTENSION_PRIORITY = 100;\nlet currentPmCliVersionPromise: Promise<string | null> | null = null;\n\n/* Types now in extension-types.ts - re-exported via `export * from \"./extension-types.js\"` above */\n\nconst DEFAULT_EXTENSION_POLICY: ExtensionGovernancePolicy = Object.freeze(createDefaultExtensionGovernancePolicy());\n\nlet extensionReloadEpoch = 0;\n\n/**\n * Implements next extension reload token for the public runtime surface of this module.\n */\nexport function nextExtensionReloadToken(seed = Date.now()): string {\n extensionReloadEpoch += 1;\n return `${extensionReloadEpoch}-${seed}`;\n}\n\nfunction parseOptionalManifestString(candidate: Record<string, unknown>, field: string): string | null | undefined {\n const value = candidate[field];\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value !== \"string\" || value.trim().length === 0) {\n return null;\n }\n return value.trim();\n}\n\nfunction parseManifestEngines(value: unknown): ExtensionManifestEngines | null | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const enginesRecord = asRecordLoose(value);\n if (!enginesRecord) {\n return null;\n }\n const engines: ExtensionManifestEngines = {};\n for (const key of Object.keys(enginesRecord).sort((left, right) => left.localeCompare(right))) {\n if (key.trim().length === 0) {\n return null;\n }\n const engineValue = enginesRecord[key];\n if (typeof engineValue !== \"string\" || engineValue.trim().length === 0) {\n return null;\n }\n engines[key.trim()] = engineValue.trim();\n }\n return Object.keys(engines).length > 0 ? engines : undefined;\n}\n\n/** Parse a required manifest string field, returning `null` when it is absent, non-string, or blank. */\nfunction parseRequiredManifestString(candidate: Record<string, unknown>, field: string): string | null {\n const value = candidate[field];\n if (typeof value !== \"string\" || value.trim().length === 0) {\n return null;\n }\n return value.trim();\n}\n\n/** Parse an optional integer value (`undefined` when absent, `null` when present but not an integer). */\nfunction parseOptionalIntegerValue(value: unknown): number | null | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n return null;\n }\n return value;\n}\n\n/** Parse an optional boolean value (`undefined` when absent, `null` when present but not a boolean). */\nfunction parseOptionalBooleanValue(value: unknown): boolean | null | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value !== \"boolean\") {\n return null;\n }\n return value;\n}\n\n/** Parse the optional integer `priority`, defaulting to {@link DEFAULT_EXTENSION_PRIORITY} when absent and rejecting (`null`) a non-integer. */\nfunction parseManifestPriority(candidate: Record<string, unknown>): number | null {\n const value = parseOptionalIntegerValue(candidate.priority);\n return value === undefined ? DEFAULT_EXTENSION_PRIORITY : value;\n}\n\n/** Parse the optional `sandbox_profile`, rejecting (`null`) any value that does not round-trip through {@link normalizePolicySandboxProfile}. */\nfunction parseManifestSandboxProfile(candidate: Record<string, unknown>): ExtensionSandboxProfile | null | undefined {\n const value = candidate.sandbox_profile;\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value !== \"string\") {\n return null;\n }\n const normalizedProfile = normalizePolicySandboxProfile(value);\n if (normalizedProfile !== value.trim().toLowerCase()) {\n return null;\n }\n return normalizedProfile;\n}\n\n/** Return the trimmed string when `value` is a non-blank string, otherwise `undefined`. */\nfunction optionalTrimmedString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\n/** Parse the optional `provenance` record (`undefined` absent, `null` malformed), keeping only the present trimmed string fields and a boolean `verified`. */\nfunction parseManifestProvenance(value: unknown): ExtensionManifest[\"provenance\"] | null | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const provenanceRecord = asRecordLoose(value);\n if (!provenanceRecord) {\n return null;\n }\n const source = optionalTrimmedString(provenanceRecord.source);\n const signature = optionalTrimmedString(provenanceRecord.signature);\n const attestation = optionalTrimmedString(provenanceRecord.attestation);\n const verified =\n provenanceRecord.verified === undefined || provenanceRecord.verified === null\n ? undefined\n : typeof provenanceRecord.verified === \"boolean\"\n ? provenanceRecord.verified\n : null;\n if (verified === null) {\n return null;\n }\n return {\n ...(source ? { source } : {}),\n ...(signature ? { signature } : {}),\n ...(attestation ? { attestation } : {}),\n ...(typeof verified === \"boolean\" ? { verified } : {}),\n };\n}\n\n/** Parse the optional `permissions` record (`undefined` absent, `null` malformed), keeping only the boolean grants that are present. */\nfunction parseManifestPermissions(value: unknown): ExtensionManifest[\"permissions\"] | null | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const permissionsRecord = asRecordLoose(value);\n if (!permissionsRecord) {\n return null;\n }\n const fsRead = parseOptionalBooleanValue(permissionsRecord.fs_read);\n const fsWrite = parseOptionalBooleanValue(permissionsRecord.fs_write);\n const network = parseOptionalBooleanValue(permissionsRecord.network);\n const envRead = parseOptionalBooleanValue(permissionsRecord.env_read);\n const envWrite = parseOptionalBooleanValue(permissionsRecord.env_write);\n const processSpawn = parseOptionalBooleanValue(permissionsRecord.process_spawn);\n if ([fsRead, fsWrite, network, envRead, envWrite, processSpawn].includes(null)) {\n return null;\n }\n return {\n ...(typeof fsRead === \"boolean\" ? { fs_read: fsRead } : {}),\n ...(typeof fsWrite === \"boolean\" ? { fs_write: fsWrite } : {}),\n ...(typeof network === \"boolean\" ? { network } : {}),\n ...(typeof envRead === \"boolean\" ? { env_read: envRead } : {}),\n ...(typeof envWrite === \"boolean\" ? { env_write: envWrite } : {}),\n ...(typeof processSpawn === \"boolean\" ? { process_spawn: processSpawn } : {}),\n };\n}\n\n/** Parse the optional `capabilities` array, normalizing legacy aliases; returns empty lists when absent and `null` when the field is not a string array. */\nfunction parseManifestCapabilities(\n value: unknown,\n): { capabilities: string[]; legacy_aliases: LegacyExtensionCapabilityAliasMapping[] } | null {\n if (value === undefined || value === null) {\n return { capabilities: [], legacy_aliases: [] };\n }\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"string\")) {\n return null;\n }\n const normalizedCapabilities = normalizeManifestCapabilities(value as string[]);\n return { capabilities: normalizedCapabilities.capabilities, legacy_aliases: normalizedCapabilities.legacy_aliases };\n}\n\n/** Parse the optional `activation` block, returning the de-duplicated sorted `commands` set, `undefined` when no command activation is declared, and `null` when the block is malformed. */\nfunction parseManifestActivation(value: unknown): ExtensionManifest[\"activation\"] | null | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const activationRecord = asRecordLoose(value);\n if (!activationRecord) {\n return null;\n }\n const rawCommands = activationRecord.commands;\n if (rawCommands === undefined || rawCommands === null) {\n return undefined;\n }\n if (!Array.isArray(rawCommands) || rawCommands.some((entry) => typeof entry !== \"string\")) {\n return null;\n }\n const commands = [\n ...new Set(\n rawCommands\n .map((entry) => normalizeCommandName(entry))\n .filter((entry) => entry.length > 0),\n ),\n ].sort((left, right) => left.localeCompare(right));\n return commands.length > 0 ? { commands } : undefined;\n}\n\n/** The optional metadata fields a manifest may declare, parsed and validated as a single bundle so {@link parseManifest} stays a thin orchestrator. */\ninterface ParsedManifestMetadata {\n manifest_version: number | undefined;\n pm_min_version: string | undefined;\n pm_max_version: string | undefined;\n engines: ExtensionManifestEngines | undefined;\n trusted: boolean | undefined;\n sandbox_profile: ExtensionSandboxProfile | undefined;\n provenance: ExtensionManifest[\"provenance\"];\n permissions: ExtensionManifest[\"permissions\"];\n capabilities: string[];\n legacy_capability_aliases: LegacyExtensionCapabilityAliasMapping[];\n activation: ExtensionManifest[\"activation\"];\n}\n\n/** Parse every optional manifest metadata field, returning `null` as soon as any one is malformed. */\nfunction parseManifestMetadata(candidate: Record<string, unknown>): ParsedManifestMetadata | null {\n const manifestVersion = parseOptionalIntegerValue(candidate.manifest_version);\n if (manifestVersion === null) {\n return null;\n }\n const pmMinVersion = parseOptionalManifestString(candidate, \"pm_min_version\");\n if (pmMinVersion === null) {\n return null;\n }\n const pmMaxVersion = parseOptionalManifestString(candidate, \"pm_max_version\");\n if (pmMaxVersion === null) {\n return null;\n }\n const engines = parseManifestEngines(candidate.engines);\n if (engines === null) {\n return null;\n }\n const trusted = parseOptionalBooleanValue(candidate.trusted);\n if (trusted === null) {\n return null;\n }\n const sandboxProfile = parseManifestSandboxProfile(candidate);\n if (sandboxProfile === null) {\n return null;\n }\n const provenance = parseManifestProvenance(candidate.provenance);\n if (provenance === null) {\n return null;\n }\n const permissions = parseManifestPermissions(candidate.permissions);\n if (permissions === null) {\n return null;\n }\n const capabilities = parseManifestCapabilities(candidate.capabilities);\n if (capabilities === null) {\n return null;\n }\n const activation = parseManifestActivation(candidate.activation);\n if (activation === null) {\n return null;\n }\n return {\n manifest_version: manifestVersion,\n pm_min_version: pmMinVersion,\n pm_max_version: pmMaxVersion,\n engines,\n trusted,\n sandbox_profile: sandboxProfile,\n provenance,\n permissions,\n capabilities: capabilities.capabilities,\n legacy_capability_aliases: capabilities.legacy_aliases,\n activation,\n };\n}\n\nfunction parseManifest(raw: unknown): ExtensionManifest | null {\n if (typeof raw !== \"object\" || raw === null) {\n return null;\n }\n const candidate = raw as Record<string, unknown>;\n const name = parseRequiredManifestString(candidate, \"name\");\n if (name === null) {\n return null;\n }\n const version = parseRequiredManifestString(candidate, \"version\");\n if (version === null) {\n return null;\n }\n const entry = parseRequiredManifestString(candidate, \"entry\");\n if (entry === null) {\n return null;\n }\n const priority = parseManifestPriority(candidate);\n if (priority === null) {\n return null;\n }\n const metadata = parseManifestMetadata(candidate);\n if (metadata === null) {\n return null;\n }\n return {\n name,\n version,\n entry,\n priority,\n manifest_version: metadata.manifest_version,\n pm_min_version: metadata.pm_min_version,\n pm_max_version: metadata.pm_max_version,\n engines: metadata.engines,\n trusted: metadata.trusted,\n provenance: metadata.provenance,\n sandbox_profile: metadata.sandbox_profile,\n permissions: metadata.permissions,\n activation: metadata.activation,\n capabilities: metadata.capabilities,\n legacy_capability_aliases:\n metadata.legacy_capability_aliases.length > 0 ? metadata.legacy_capability_aliases : undefined,\n };\n}\n\nfunction shouldEnable(name: string, enabled: Set<string>, disabled: Set<string>): boolean {\n if (disabled.has(name)) {\n return false;\n }\n if (enabled.size === 0) {\n return true;\n }\n return enabled.has(name);\n}\n\n/** Resolve symlinks on both paths before the containment check so a link inside the directory cannot escape it. */\nexport async function isCanonicalPathWithinDirectory(directory: string, targetPath: string): Promise<boolean> {\n const [resolvedDirectory, resolvedTargetPath] = await Promise.all([fs.realpath(directory), fs.realpath(targetPath)]);\n return isPathWithinDirectory(resolvedDirectory, resolvedTargetPath);\n}\n\n/**\n * Implements resolve extension roots for the public runtime surface of this module.\n */\nexport function resolveExtensionRoots(pmRoot: string, cwd = process.cwd()): { global: string; project: string } {\n return {\n global: path.join(resolveGlobalPmRoot(cwd), \"extensions\"),\n project: path.join(pmRoot, \"extensions\"),\n };\n}\n\nasync function listExtensionDirectories(extensionsRoot: string): Promise<string[]> {\n try {\n const entries = await fs.readdir(extensionsRoot, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort((a, b) => a.localeCompare(b));\n } catch {\n return [];\n }\n}\n\nfunction summarizeCandidate(candidate: ExtensionCandidate): EffectiveExtension {\n const summary: EffectiveExtension = {\n layer: candidate.layer,\n directory: candidate.directory,\n manifest_path: candidate.manifest_path,\n name: candidate.manifest.name,\n version: candidate.manifest.version,\n entry: candidate.manifest.entry,\n priority: candidate.manifest.priority,\n entry_path: candidate.entry_path,\n manifest_version: candidate.manifest.manifest_version,\n pm_min_version: candidate.manifest.pm_min_version,\n pm_max_version: candidate.manifest.pm_max_version,\n engines: candidate.manifest.engines,\n trusted: candidate.manifest.trusted,\n provenance: candidate.manifest.provenance,\n sandbox_profile: candidate.manifest.sandbox_profile,\n permissions: candidate.manifest.permissions,\n capabilities: [...candidate.manifest.capabilities],\n activation: candidate.manifest.activation\n ? {\n commands: [...(candidate.manifest.activation.commands as string[])],\n }\n : undefined,\n };\n if (candidate.source_package) {\n summary.source_package = candidate.source_package;\n }\n return summary;\n}\n\nfunction normalizeManagedSourcePackage(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nasync function readManagedExtensionSourcePackages(extensionsRoot: string): Promise<Map<string, string>> {\n const packages = new Map<string, string>();\n try {\n const parsed = JSON.parse(await fs.readFile(path.join(extensionsRoot, \".managed-extensions.json\"), \"utf8\")) as unknown;\n if (typeof parsed !== \"object\" || parsed === null || !Array.isArray((parsed as { entries?: unknown }).entries)) {\n return packages;\n }\n for (const entry of (parsed as { entries: unknown[] }).entries) {\n if (typeof entry !== \"object\" || entry === null) {\n continue;\n }\n const record = entry as { directory?: unknown; name?: unknown; source?: { package?: unknown } };\n const sourcePackage = normalizeManagedSourcePackage(record.source?.package);\n if (!sourcePackage) {\n continue;\n }\n if (typeof record.directory === \"string\" && record.directory.trim().length > 0) {\n packages.set(`directory:${record.directory.trim()}`, sourcePackage);\n }\n if (typeof record.name === \"string\" && record.name.trim().length > 0) {\n packages.set(`name:${record.name.trim()}`, sourcePackage);\n }\n }\n } catch {\n return packages;\n }\n return packages;\n}\n\nfunction sortCandidates(candidates: ExtensionCandidate[]): ExtensionCandidate[] {\n return [...candidates].sort((left, right) => {\n if (left.manifest.priority !== right.manifest.priority) {\n return left.manifest.priority - right.manifest.priority;\n }\n const byName = left.manifest.name.localeCompare(right.manifest.name);\n if (byName !== 0) {\n return byName;\n }\n return left.directory.localeCompare(right.directory);\n });\n}\n\nfunction buildEffectiveExtensions(\n globalCandidates: ExtensionCandidate[],\n projectCandidates: ExtensionCandidate[],\n): ExtensionCandidate[] {\n const ordered = [...sortCandidates(globalCandidates), ...sortCandidates(projectCandidates)];\n const effective: ExtensionCandidate[] = [];\n for (const candidate of ordered) {\n const existingIndex = effective.findIndex((entry) => entry.manifest.name === candidate.manifest.name);\n if (existingIndex >= 0) {\n effective.splice(existingIndex, 1);\n }\n effective.push(candidate);\n }\n return effective;\n}\n\nasync function scanExtensionLayer(\n layer: ExtensionLayer,\n extensionsRoot: string,\n enabled: Set<string>,\n disabled: Set<string>,\n pmMaxVersionExceededMode: PmMaxVersionExceededMode,\n): Promise<ExtensionLayerScanResult> {\n const diagnostics: ExtensionDiagnostic[] = [];\n const warnings: string[] = [];\n const candidates: ExtensionCandidate[] = [];\n const directories = await listExtensionDirectories(extensionsRoot);\n const managedSourcePackages = await readManagedExtensionSourcePackages(extensionsRoot);\n\n for (const directory of directories) {\n const scanned = await scanExtensionDirectory(\n layer,\n extensionsRoot,\n directory,\n enabled,\n disabled,\n managedSourcePackages,\n pmMaxVersionExceededMode,\n );\n diagnostics.push(scanned.diagnostic);\n warnings.push(...scanned.warnings);\n if (scanned.candidate) {\n candidates.push(scanned.candidate);\n }\n }\n\n return { diagnostics, warnings, candidates };\n}\n\n/**\n * Build the `warn`-status scan result for a directory whose manifest is missing\n * or unparseable, carrying the supplied diagnostic warning and no candidate.\n */\nfunction buildUnavailableExtensionScan(\n layer: ExtensionLayer,\n directory: string,\n manifestPath: string,\n warning: string,\n): ScannedExtensionDirectory {\n return {\n diagnostic: {\n layer,\n directory,\n manifest_path: manifestPath,\n name: null,\n version: null,\n entry: null,\n priority: null,\n entry_path: null,\n enabled: null,\n status: \"warn\",\n },\n warnings: [warning],\n candidate: null,\n };\n}\n\n/**\n * Collect the non-fatal load warnings for a parsed extension manifest, in\n * detection order: legacy capability aliases, unknown capabilities, an entry\n * outside or absent from the extension directory, then the pm version\n * floor/ceiling incompatibility warnings.\n */\nfunction collectScannedExtensionWarnings(\n layer: ExtensionLayer,\n manifest: ExtensionManifest,\n entryWithinDirectory: boolean,\n entryExists: boolean,\n pmVersionCompatibility: { allowed: boolean; warning?: string },\n pmMaxVersionCompatibility: { allowed: boolean; warning?: string },\n): string[] {\n const extensionWarnings: string[] = [];\n if (Array.isArray(manifest.legacy_capability_aliases) && manifest.legacy_capability_aliases.length > 0) {\n extensionWarnings.push(\n formatLegacyExtensionCapabilityAliasWarning(layer, manifest.name, manifest.legacy_capability_aliases),\n );\n }\n for (const capability of collectUnknownExtensionCapabilities(manifest.capabilities)) {\n extensionWarnings.push(formatUnknownExtensionCapabilityWarning(layer, manifest.name, capability));\n }\n if (!entryWithinDirectory) {\n extensionWarnings.push(`extension_entry_outside_extension:${layer}:${manifest.name}`);\n } else if (!entryExists) {\n extensionWarnings.push(`extension_entry_missing:${layer}:${manifest.name}`);\n }\n if (pmVersionCompatibility.warning) {\n extensionWarnings.push(pmVersionCompatibility.warning);\n }\n if (pmMaxVersionCompatibility.warning) {\n extensionWarnings.push(pmMaxVersionCompatibility.warning);\n }\n return extensionWarnings;\n}\n\nasync function scanExtensionDirectory(\n layer: ExtensionLayer,\n extensionsRoot: string,\n directory: string,\n enabled: Set<string>,\n disabled: Set<string>,\n managedSourcePackages: ReadonlyMap<string, string>,\n pmMaxVersionExceededMode: PmMaxVersionExceededMode,\n): Promise<ScannedExtensionDirectory> {\n const extensionDir = path.join(extensionsRoot, directory);\n const manifestPath = path.join(extensionDir, \"manifest.json\");\n if (!(await pathExists(manifestPath))) {\n return buildUnavailableExtensionScan(layer, directory, manifestPath, `extension_manifest_missing:${layer}:${directory}`);\n }\n\n let manifest: ExtensionManifest | null;\n try {\n const parsed = JSON.parse(await fs.readFile(manifestPath, \"utf8\")) as unknown;\n manifest = parseManifest(parsed);\n } catch {\n manifest = null;\n }\n\n if (!manifest) {\n return buildUnavailableExtensionScan(layer, directory, manifestPath, `extension_manifest_invalid:${layer}:${directory}`);\n }\n\n const entryPath = path.resolve(extensionDir, manifest.entry);\n const entryWithinDirectoryByPath = isPathWithinDirectory(extensionDir, entryPath);\n const entryExists = entryWithinDirectoryByPath ? await pathExists(entryPath) : false;\n const entryWithinDirectory =\n entryWithinDirectoryByPath && entryExists\n ? await isCanonicalPathWithinDirectory(extensionDir, entryPath)\n : entryWithinDirectoryByPath;\n const enabledForLoad = shouldEnable(manifest.name, enabled, disabled);\n const pmVersionCompatibility = await evaluatePmMinVersionCompatibility(layer, manifest);\n const pmMaxVersionCompatibility = await evaluatePmMaxVersionCompatibility(layer, manifest, pmMaxVersionExceededMode);\n const extensionWarnings = collectScannedExtensionWarnings(\n layer,\n manifest,\n entryWithinDirectory,\n entryExists,\n pmVersionCompatibility,\n pmMaxVersionCompatibility,\n );\n const extensionReady =\n entryWithinDirectory &&\n entryExists &&\n pmVersionCompatibility.allowed &&\n pmMaxVersionCompatibility.allowed;\n const sourcePackage =\n managedSourcePackages.get(`directory:${directory}`) ?? managedSourcePackages.get(`name:${manifest.name}`);\n\n return {\n diagnostic: {\n layer,\n directory,\n manifest_path: manifestPath,\n name: manifest.name,\n version: manifest.version,\n entry: manifest.entry,\n priority: manifest.priority,\n entry_path: entryPath,\n enabled: enabledForLoad,\n status: extensionReady ? \"ok\" : \"warn\",\n },\n warnings: extensionWarnings,\n candidate:\n extensionReady && enabledForLoad\n ? {\n layer,\n directory,\n manifest_path: manifestPath,\n entry_path: entryPath,\n manifest,\n source_package: sourcePackage,\n }\n : null,\n };\n}\n\n\n/**\n * Implements discover extensions for the public runtime surface of this module.\n */\nexport async function discoverExtensions(options: DiscoverExtensionsOptions): Promise<ExtensionDiscoveryResult> {\n const roots = resolveExtensionRoots(options.pmRoot, options.cwd ?? process.cwd());\n const configured_enabled = normalizeNames(options.settings.extensions.enabled);\n const configured_disabled = normalizeNames(options.settings.extensions.disabled);\n const policy = normalizeExtensionPolicy(options.settings);\n const serializedPolicy = serializeExtensionPolicy(policy);\n\n if (options.noExtensions) {\n return {\n disabled_by_flag: true,\n roots,\n configured_enabled,\n configured_disabled,\n discovered: [],\n effective: [],\n warnings: [...policy.warnings],\n policy: serializedPolicy,\n };\n }\n\n const enabled = new Set(configured_enabled);\n const disabled = new Set(configured_disabled);\n const globalScan = await scanExtensionLayer(\"global\", roots.global, enabled, disabled, policy.pmMaxVersionExceededMode.global);\n const projectScan = await scanExtensionLayer(\"project\", roots.project, enabled, disabled, policy.pmMaxVersionExceededMode.project);\n const policyWarnings: string[] = [...policy.warnings];\n const effectiveCandidates = buildEffectiveExtensions(globalScan.candidates, projectScan.candidates);\n const effective: EffectiveExtension[] = [];\n for (const candidate of effectiveCandidates) {\n const extensionRef = {\n layer: candidate.layer,\n name: candidate.manifest.name,\n trusted: candidate.manifest.trusted === true,\n provenanceVerified: candidate.manifest.provenance?.verified === true,\n sandboxProfile: candidate.manifest.sandbox_profile,\n permissions:\n candidate.manifest.permissions && typeof candidate.manifest.permissions === \"object\"\n ? {\n fs_read: candidate.manifest.permissions.fs_read,\n fs_write: candidate.manifest.permissions.fs_write,\n network: candidate.manifest.permissions.network,\n env_read: candidate.manifest.permissions.env_read,\n env_write: candidate.manifest.permissions.env_write,\n process_spawn: candidate.manifest.permissions.process_spawn,\n }\n : undefined,\n };\n const extensionDecision = evaluateExtensionPolicyForExtension(policy, extensionRef);\n if (extensionDecision.warning) {\n policyWarnings.push(extensionDecision.warning);\n }\n if (!extensionDecision.allowed) {\n continue;\n }\n for (const capability of candidate.manifest.capabilities) {\n const capabilityDecision = evaluateExtensionPolicyForCapability(policy, extensionRef, capability);\n if (capabilityDecision.warning) {\n policyWarnings.push(capabilityDecision.warning);\n }\n }\n effective.push(summarizeCandidate(candidate));\n }\n\n return {\n disabled_by_flag: false,\n roots,\n configured_enabled,\n configured_disabled,\n discovered: [...globalScan.diagnostics, ...projectScan.diagnostics],\n effective,\n warnings: [...new Set([...globalScan.warnings, ...projectScan.warnings, ...policyWarnings])],\n policy: serializedPolicy,\n };\n}\n\nfunction formatUnknownError(error: unknown): string {\n if (error instanceof Error && error.message.trim().length > 0) {\n return error.message;\n }\n return String(error);\n}\n\nasync function readCurrentPmCliVersion(): Promise<string | null> {\n try {\n const packageRoot = resolvePmPackageRootFromModule(import.meta.url, [\"../../..\"]);\n const raw = await fs.readFile(path.join(packageRoot, \"package.json\"), \"utf8\");\n const parsed = JSON.parse(raw) as { version?: unknown };\n return typeof parsed.version === \"string\" && parsed.version.trim().length > 0 ? parsed.version.trim() : null;\n } catch {\n return null;\n }\n}\n\nfunction resolveCurrentPmCliVersion(): Promise<string | null> {\n currentPmCliVersionPromise ??= readCurrentPmCliVersion();\n return currentPmCliVersionPromise;\n}\n\nfunction formatPmVersionCompatibilityWarning(\n layer: ExtensionLayer,\n manifest: ExtensionManifest,\n evaluation: PmVersionBoundEvaluation,\n): string | undefined {\n const current = evaluation.current ?? \"unknown\";\n if (evaluation.kind === \"pm_min_version\") {\n switch (evaluation.status) {\n case \"invalid\":\n return `extension_pm_min_version_invalid:${layer}:${manifest.name}:required=${evaluation.required}`;\n case \"unchecked\":\n return `extension_pm_min_version_unchecked:${layer}:${manifest.name}:required=${evaluation.required}:current=${current}`;\n case \"unmet\":\n return `extension_pm_min_version_unmet:${layer}:${manifest.name}:required=${evaluation.required}:current=${current}`;\n default:\n return undefined;\n }\n }\n switch (evaluation.status) {\n case \"invalid\":\n return `extension_pm_max_version_invalid:${layer}:${manifest.name}:allowed=${evaluation.required}`;\n case \"unchecked\":\n return `extension_pm_max_version_unchecked:${layer}:${manifest.name}:allowed=${evaluation.required}:current=${current}`;\n case \"exceeded_warn\":\n return `extension_pm_max_version_exceeded_warn:${layer}:${manifest.name}:allowed=${evaluation.required}:current=${current}`;\n case \"exceeded\":\n return `extension_pm_max_version_exceeded:${layer}:${manifest.name}:allowed=${evaluation.required}:current=${current}`;\n default:\n return undefined;\n }\n}\n\nasync function evaluatePmMinVersionCompatibility(\n layer: ExtensionLayer,\n manifest: ExtensionManifest,\n): Promise<{ allowed: boolean; warning?: string }> {\n // Resolve the current CLI version only when a bound is declared, so the common\n // no-bound case never reads package.json.\n if (manifest.pm_min_version === undefined) {\n return { allowed: true };\n }\n const evaluation = evaluatePmMinVersionBound(manifest.pm_min_version, await resolveCurrentPmCliVersion());\n const warning = formatPmVersionCompatibilityWarning(layer, manifest, evaluation);\n return warning ? { allowed: evaluation.allowed, warning } : { allowed: evaluation.allowed };\n}\n\nasync function evaluatePmMaxVersionCompatibility(\n layer: ExtensionLayer,\n manifest: ExtensionManifest,\n exceededMode: PmMaxVersionExceededMode,\n): Promise<{ allowed: boolean; warning?: string }> {\n if (manifest.pm_max_version === undefined) {\n return { allowed: true };\n }\n const evaluation = evaluatePmMaxVersionBound(\n manifest.pm_max_version,\n await resolveCurrentPmCliVersion(),\n exceededMode,\n );\n const warning = formatPmVersionCompatibilityWarning(layer, manifest, evaluation);\n return warning ? { allowed: evaluation.allowed, warning } : { allowed: evaluation.allowed };\n}\n\nasync function fingerprintPath(pathToInspect: string): Promise<string> {\n try {\n const stats = await fs.stat(pathToInspect);\n return `${Math.trunc(stats.mtimeMs)}-${stats.size}`;\n } catch {\n return \"missing\";\n }\n}\n\nasync function resolveExtensionImportHref(\n extension: EffectiveExtension,\n options: DiscoverExtensionsOptions,\n): Promise<string> {\n const baseUrl = new URL(pathToFileURL(extension.entry_path).href);\n const shouldCacheBust = options.cache_bust === true || typeof options.reload_token === \"string\";\n if (!shouldCacheBust) {\n return baseUrl.href;\n }\n const [entryFingerprint, manifestFingerprint] = await Promise.all([\n fingerprintPath(extension.entry_path),\n fingerprintPath(extension.manifest_path),\n ]);\n const reloadToken = options.reload_token ?? nextExtensionReloadToken();\n baseUrl.searchParams.set(\"pm_ext_reload\", reloadToken);\n baseUrl.searchParams.set(\"pm_ext_entry\", entryFingerprint);\n baseUrl.searchParams.set(\"pm_ext_manifest\", manifestFingerprint);\n return baseUrl.href;\n}\n\n/**\n * Implements load extensions for the public runtime surface of this module.\n */\nexport async function loadExtensions(options: DiscoverExtensionsOptions): Promise<ExtensionLoadResult> {\n const discovery = await discoverExtensions(options);\n const loaded: LoadedExtension[] = [];\n const failed: FailedExtensionLoad[] = [];\n const warnings = [...discovery.warnings];\n\n if (discovery.disabled_by_flag) {\n return {\n ...discovery,\n warnings,\n loaded,\n failed,\n };\n }\n\n const extensionsToLoad =\n typeof options.extensionFilter === \"function\" ? discovery.effective.filter(options.extensionFilter) : discovery.effective;\n for (const extension of extensionsToLoad) {\n try {\n const importHref = await resolveExtensionImportHref(extension, options);\n const module = await import(importHref);\n loaded.push({\n ...extension,\n module,\n });\n } catch (error: unknown) {\n warnings.push(`extension_load_failed:${extension.layer}:${extension.name}`);\n failed.push({\n layer: extension.layer,\n name: extension.name,\n entry_path: extension.entry_path,\n error: formatUnknownError(error),\n });\n }\n }\n\n return {\n ...discovery,\n warnings,\n loaded,\n failed,\n };\n}\n\nconst DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS = 5_000;\nconst MAX_EXTENSION_DEACTIVATE_TIMEOUT_MS = 2_147_483_647;\n\nfunction toActivatableExtension(source: Record<string, unknown>): ActivatableExtension {\n // Bind to `source` so a module/default-export authored with methods (or a class\n // instance) keeps its `this` across both lifecycle calls — `activate` is a\n // method call on a fresh object and `deactivate` is invoked bare, so without\n // binding the two would see different (or undefined) `this`.\n const activate = source.activate as ActivatableExtension[\"activate\"];\n const activatable: ActivatableExtension = {\n activate: activate.bind(source),\n };\n if (typeof source.deactivate === \"function\") {\n const deactivate = source.deactivate as NonNullable<ActivatableExtension[\"deactivate\"]>;\n activatable.deactivate = deactivate.bind(source);\n }\n return activatable;\n}\n\nfunction resolveActivatableExtension(module: unknown): ActivatableExtension | null {\n const activatableRecord = resolveActivatablePropertyRecord(module);\n return activatableRecord ? toActivatableExtension(activatableRecord) : null;\n}\n\n/**\n * Run the optional `deactivate` teardown hook for every loaded extension that\n * exports one. Best-effort: a throwing teardown is captured as a warning and a\n * failure entry rather than propagated, so one extension cannot block another's\n * cleanup. Hosts call this on shutdown/reload (e.g. the MCP server between\n * native-action requests) to release resources opened during `activate`.\n *\n * Pass the `activationResult` to skip extensions whose `activate` failed — they\n * never fully initialized, so (VS Code-style) their `deactivate` must not run.\n * Teardowns run concurrently and each hook has a bounded timeout by default, so\n * one slow or hanging hook cannot serialize the rest or block the host\n * indefinitely unless the host explicitly disables the timeout; the returned\n * warnings/failures preserve loaded order.\n */\nexport async function deactivateExtensions(\n loadResult: ExtensionLoadResult,\n activationResult?: Pick<ExtensionActivationResult, \"failed\">,\n options: ExtensionDeactivationOptions = {},\n): Promise<ExtensionDeactivationResult> {\n const timeoutMs = normalizeExtensionDeactivateTimeout(options?.deactivate_timeout_ms);\n const failedActivationKeys = new Set(\n (activationResult?.failed ?? []).map((entry) => `${entry.layer}:${entry.name}`),\n );\n const targets: Array<{ extension: LoadedExtension; deactivate: () => void | Promise<void> }> = [];\n for (const extension of loadResult.loaded) {\n if (failedActivationKeys.has(`${extension.layer}:${extension.name}`)) {\n continue;\n }\n const activatable = resolveActivatableExtension(extension.module);\n if (!activatable || typeof activatable.deactivate !== \"function\") {\n continue;\n }\n targets.push({ extension, deactivate: activatable.deactivate });\n }\n const outcomes = await Promise.all(\n targets.map(async ({ extension, deactivate }) => {\n try {\n await runExtensionDeactivateWithTimeout(deactivate, timeoutMs);\n return { ok: true as const };\n } catch (error: unknown) {\n return { ok: false as const, layer: extension.layer, name: extension.name, error: formatUnknownError(error) };\n }\n }),\n );\n const warnings: string[] = [];\n const failed: ExtensionDeactivationFailure[] = [];\n let deactivated = 0;\n for (const outcome of outcomes) {\n if (outcome.ok) {\n deactivated += 1;\n continue;\n }\n warnings.push(`extension_deactivate_failed:${outcome.layer}:${outcome.name}`);\n failed.push({ layer: outcome.layer, name: outcome.name, error: outcome.error });\n }\n return { deactivated, warnings, failed };\n}\n\nfunction normalizeExtensionDeactivateTimeout(rawTimeout: unknown): number {\n if (typeof rawTimeout !== \"number\" || rawTimeout < 0) {\n return DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS;\n }\n if (rawTimeout === 0 || rawTimeout === Infinity) {\n return 0;\n }\n if (!Number.isFinite(rawTimeout)) {\n return DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS;\n }\n return Math.min(MAX_EXTENSION_DEACTIVATE_TIMEOUT_MS, Math.max(1, Math.floor(rawTimeout)));\n}\n\nasync function runExtensionDeactivateWithTimeout(\n deactivate: () => void | Promise<void>,\n timeoutMs: number,\n): Promise<void> {\n if (timeoutMs === 0) {\n await deactivate();\n return;\n }\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n try {\n // A timed-out deactivate promise may still finish later; JavaScript promises\n // are not cancellable, so the host only stops waiting and consumes any late\n // rejection from the hook.\n const deactivatePromise = Promise.resolve().then(() => deactivate());\n deactivatePromise.catch(() => {});\n await Promise.race([\n deactivatePromise,\n new Promise<never>((_, reject) => {\n timeoutHandle = setTimeout(() => {\n reject(new Error(`extension deactivate timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n timeoutHandle.unref?.();\n }),\n ]);\n } finally {\n clearTimeout(timeoutHandle as ReturnType<typeof setTimeout>);\n }\n}\n\nfunction isOutputRendererFormat(value: string): value is OutputRendererFormat {\n return value === \"toon\" || value === \"json\";\n}\n\nfunction isExtensionServiceName(value: string): value is ExtensionServiceName {\n return KNOWN_EXTENSION_SERVICE_NAMES.includes(value as ExtensionServiceName);\n}\n\nfunction assertHookHandler(hookName: string, hook: unknown): void {\n if (typeof hook !== \"function\") {\n throw new TypeError(`api.hooks.${hookName} requires a function handler`);\n }\n}\n\nfunction assertNonEmptyString(name: string, value: unknown): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`${name} requires a non-empty string`);\n }\n return value.trim();\n}\n\nfunction assertFunctionHandler(name: string, value: unknown): void {\n if (typeof value !== \"function\") {\n throw new TypeError(`${name} requires a function handler`);\n }\n}\n\nfunction normalizeRegistrationName(name: string): string {\n return name\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\nfunction toRegistrationCommandPath(name: string, action: \"import\" | \"export\"): string {\n return normalizeCommandName(`${name} ${action}`);\n}\n\nfunction sanitizeRegistrationValue(value: unknown): unknown {\n if (value === null) {\n return null;\n }\n if (Array.isArray(value)) {\n return value.map((entry) => sanitizeRegistrationValue(entry));\n }\n if (typeof value === \"function\") {\n return \"[Function]\";\n }\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n if (typeof value === \"symbol\") {\n return value.toString();\n }\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const normalized: Record<string, unknown> = {};\n const keys = Object.keys(record).sort((left, right) => left.localeCompare(right));\n for (const key of keys) {\n normalized[key] = sanitizeRegistrationValue(record[key]);\n }\n return normalized;\n }\n return value;\n}\n\nfunction cloneRuntimeRegistrationValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((entry) => cloneRuntimeRegistrationValue(entry));\n }\n if (typeof value === \"object\" && value !== null) {\n const record = value as Record<string, unknown>;\n const cloned: Record<string, unknown> = {};\n for (const key of Object.keys(record).sort((left, right) => left.localeCompare(right))) {\n cloned[key] = cloneRuntimeRegistrationValue(record[key]);\n }\n return cloned;\n }\n return value;\n}\n\nconst EXTENSION_REGISTRATION_TRACE_SYMBOL = Symbol(\"extension_registration_trace\");\n\ntype RegistrationTraceCarrier = Error & {\n [EXTENSION_REGISTRATION_TRACE_SYMBOL]?: ExtensionActivationFailureTrace;\n};\n\nfunction createRegistrationValidationError(message: string, trace: ExtensionActivationFailureTrace): TypeError {\n const error = new TypeError(message) as RegistrationTraceCarrier;\n Object.defineProperty(error, EXTENSION_REGISTRATION_TRACE_SYMBOL, {\n value: trace,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return error;\n}\n\nfunction extractRegistrationValidationTrace(error: unknown): ExtensionActivationFailureTrace | undefined {\n if (!(error instanceof Error)) {\n return undefined;\n }\n return (error as RegistrationTraceCarrier)[EXTENSION_REGISTRATION_TRACE_SYMBOL];\n}\n\nfunction normalizeRegistrationRecord(name: string, value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${name} requires an object definition`);\n }\n return sanitizeRegistrationValue(value) as Record<string, unknown>;\n}\n\nfunction normalizeRuntimeRegistrationRecord(name: string, value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${name} requires an object definition`);\n }\n return cloneRuntimeRegistrationValue(value) as Record<string, unknown>;\n}\n\nfunction normalizeRegistrationRecordList(name: string, value: unknown): Array<Record<string, unknown>> {\n if (!Array.isArray(value)) {\n throw new TypeError(`${name} requires an array of object definitions`);\n }\n return value.map((entry) => normalizeRegistrationRecord(name, entry));\n}\n\nfunction asRegistrationRecord(name: string, value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${name} requires an object definition`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction assertOptionalBooleanField(name: string, value: unknown): void {\n if (value !== undefined && typeof value !== \"boolean\") {\n throw new TypeError(`${name} must be a boolean when provided`);\n }\n}\n\nfunction assertOptionalStringField(name: string, value: unknown): void {\n if (value === undefined) {\n return;\n }\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`${name} must be a non-empty string when provided`);\n }\n}\n\nfunction isFlagDefaultScalar(value: unknown): boolean {\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n}\n\nfunction assertOptionalFlagDefaultField(name: string, value: unknown): void {\n if (value === undefined) {\n return;\n }\n if (Array.isArray(value)) {\n for (const [index, item] of value.entries()) {\n if (!isFlagDefaultScalar(item)) {\n throw new TypeError(`${name}[${index}] must be a string, number, or boolean`);\n }\n }\n return;\n }\n if (!isFlagDefaultScalar(value)) {\n throw new TypeError(`${name} must be a string, number, or boolean, or an array of these when provided`);\n }\n}\n\nfunction assertOptionalStringArrayField(name: string, value: unknown): void {\n if (value === undefined) {\n return;\n }\n if (!Array.isArray(value)) {\n throw new TypeError(`${name} must be an array of non-empty strings when provided`);\n }\n for (const [index, entry] of value.entries()) {\n if (typeof entry !== \"string\" || entry.trim().length === 0) {\n throw new TypeError(`${name}[${index}] must be a non-empty string`);\n }\n }\n}\n\nfunction normalizeOptionalStringArrayField(name: string, value: unknown): string[] {\n assertOptionalStringArrayField(name, value);\n if (!Array.isArray(value)) {\n return [];\n }\n const normalized: string[] = [];\n const seen = new Set<string>();\n for (const entry of value) {\n const trimmed = entry.trim();\n if (trimmed.length === 0 || seen.has(trimmed)) {\n continue;\n }\n seen.add(trimmed);\n normalized.push(trimmed);\n }\n return normalized;\n}\n\nfunction normalizeCommandActionName(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[\\s_]+/g, \"-\")\n .replace(/[^a-z0-9-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nfunction resolveCommandDefinitionAction(commandPath: string, action: unknown): string {\n if (action === undefined) {\n return commandPath.replace(/\\s+/g, \"-\");\n }\n if (typeof action !== \"string\" || action.trim().length === 0) {\n throw new TypeError(\"registerCommand definition.action must be a non-empty string when provided\");\n }\n const normalized = normalizeCommandActionName(action);\n if (normalized.length === 0) {\n throw new TypeError(\"registerCommand definition.action must contain alphanumeric characters\");\n }\n return normalized;\n}\n\nfunction normalizeCommandDefinitionArguments(value: unknown): ExtensionCommandArgumentDefinition[] {\n if (value === undefined) {\n return [];\n }\n if (!Array.isArray(value)) {\n throw new TypeError(\"registerCommand definition.arguments must be an array when provided\");\n }\n const normalized: ExtensionCommandArgumentDefinition[] = [];\n for (const [index, entry] of value.entries()) {\n const record = asRegistrationRecord(`registerCommand definition.arguments[${index}]`, entry);\n const name = assertNonEmptyString(`registerCommand definition.arguments[${index}].name`, record.name);\n assertOptionalBooleanField(`registerCommand definition.arguments[${index}].required`, record.required);\n assertOptionalBooleanField(`registerCommand definition.arguments[${index}].variadic`, record.variadic);\n assertOptionalStringField(`registerCommand definition.arguments[${index}].description`, record.description);\n if (name.includes(\" \")) {\n throw new TypeError(`registerCommand definition.arguments[${index}].name must not contain spaces`);\n }\n const definition: ExtensionCommandArgumentDefinition = {\n name,\n };\n if (record.required === true) {\n definition.required = true;\n }\n if (record.variadic === true) {\n definition.variadic = true;\n }\n if (typeof record.description === \"string\") {\n definition.description = record.description.trim();\n }\n normalized.push(definition);\n }\n\n const variadicIndexes = normalized\n .map((argument, index) => (argument.variadic ? index : -1))\n .filter((index) => index >= 0);\n if (variadicIndexes.length > 1) {\n throw new TypeError(\"registerCommand definition.arguments supports at most one variadic argument\");\n }\n if (variadicIndexes.length === 1 && variadicIndexes[0] !== normalized.length - 1) {\n throw new TypeError(\"registerCommand definition.arguments variadic argument must be the final argument\");\n }\n\n return normalized;\n}\n\nfunction validateFlagDefinitions(flags: unknown): void {\n if (!Array.isArray(flags)) {\n throw new TypeError(\"registerFlags flags requires an array of object definitions\");\n }\n for (const [index, raw] of flags.entries()) {\n const record = asRegistrationRecord(`registerFlags flags[${index}]`, raw);\n const long = record.long;\n const short = record.short;\n if (long === undefined && short === undefined) {\n throw new TypeError(`registerFlags flags[${index}] requires at least one of long or short`);\n }\n assertOptionalStringField(`registerFlags flags[${index}].long`, long);\n assertOptionalStringField(`registerFlags flags[${index}].short`, short);\n assertOptionalStringField(`registerFlags flags[${index}].value_name`, record.value_name);\n assertOptionalStringField(`registerFlags flags[${index}].description`, record.description);\n assertOptionalBooleanField(`registerFlags flags[${index}].required`, record.required);\n assertOptionalBooleanField(`registerFlags flags[${index}].enabled`, record.enabled);\n assertOptionalBooleanField(`registerFlags flags[${index}].visible`, record.visible);\n assertOptionalBooleanField(`registerFlags flags[${index}].list`, record.list);\n assertOptionalFlagDefaultField(`registerFlags flags[${index}].default`, record.default);\n if (Array.isArray(record.default) && record.list !== true) {\n throw new TypeError(`registerFlags flags[${index}].default cannot be an array unless list is true.`);\n }\n assertFlagValueTypeAndDefault(`registerFlags flags[${index}]`, record);\n }\n}\n\n/**\n * Reject a declared `value_type`/`type` that is not a known flag value kind, and\n * a `default` whose value(s) would not cleanly coerce under that kind — so the\n * typed-flag contract is enforced at registration instead of silently leaving\n * an untyped value to surface at use time.\n */\nfunction assertFlagValueTypeAndDefault(label: string, record: Record<string, unknown>): void {\n const declaredType =\n (typeof record.value_type === \"string\" ? record.value_type : undefined) ??\n (typeof record.type === \"string\" ? record.type : undefined);\n if (declaredType === undefined) {\n return;\n }\n const kind = resolveFlagValueKind(declaredType);\n if (kind === null) {\n throw new TypeError(\n `${label} value_type \"${declaredType}\" is not a known flag value type (expected one of: string, number, boolean).`,\n );\n }\n if (record.default === undefined) {\n return;\n }\n // For list flags, validate the default exactly as the runtime will see it —\n // comma-joined strings and nested arrays are flattened first — so a valid\n // default like `value_type: \"number\", default: \"10,20\"` is not wrongly rejected.\n const defaults = record.list === true ? flattenFlagListValue(record.default) : [record.default];\n for (const [defaultIndex, defaultValue] of defaults.entries()) {\n if (!isFlagDefaultValueCoercible(defaultValue as string | number | boolean, kind)) {\n const suffix = defaults.length > 1 ? `default[${defaultIndex}]` : \"default\";\n throw new TypeError(`${label}.${suffix} (${JSON.stringify(defaultValue)}) is not coercible to ${kind}.`);\n }\n }\n}\n\nfunction validateItemFieldDefinitions(fields: unknown): void {\n if (!Array.isArray(fields)) {\n throw new TypeError(\"registerItemFields fields requires an array of object definitions\");\n }\n for (const [index, raw] of fields.entries()) {\n const record = asRegistrationRecord(`registerItemFields fields[${index}]`, raw);\n assertNonEmptyString(`registerItemFields fields[${index}].name`, record.name);\n const fieldType = assertNonEmptyString(`registerItemFields fields[${index}].type`, record.type);\n if (normalizeItemFieldType(fieldType) === null) {\n const suggestion = suggestKnownItemFieldType(fieldType);\n const hint = suggestion ? ` Did you mean \"${suggestion}\"?` : \"\";\n throw new TypeError(\n `registerItemFields fields[${index}].type \"${fieldType}\" is not a known field type ` +\n `(expected one of: ${KNOWN_ITEM_FIELD_TYPES.join(\", \")}).${hint}`,\n );\n }\n assertOptionalBooleanField(`registerItemFields fields[${index}].optional`, record.optional);\n }\n}\n\nfunction validateItemTypeDefinitions(types: unknown): void {\n if (!Array.isArray(types)) {\n throw new TypeError(\"registerItemTypes types requires an array of object definitions\");\n }\n for (const [typeIndex, raw] of types.entries()) {\n const record = asRegistrationRecord(`registerItemTypes types[${typeIndex}]`, raw);\n assertNonEmptyString(`registerItemTypes types[${typeIndex}].name`, record.name);\n assertOptionalStringField(`registerItemTypes types[${typeIndex}].folder`, record.folder);\n assertOptionalStringArrayField(`registerItemTypes types[${typeIndex}].aliases`, record.aliases);\n assertOptionalStringArrayField(\n `registerItemTypes types[${typeIndex}].required_create_fields`,\n record.required_create_fields,\n );\n assertOptionalStringArrayField(\n `registerItemTypes types[${typeIndex}].required_create_repeatables`,\n record.required_create_repeatables,\n );\n\n if (record.command_option_policies !== undefined) {\n if (!Array.isArray(record.command_option_policies)) {\n throw new TypeError(\n `registerItemTypes types[${typeIndex}].command_option_policies must be an array when provided`,\n );\n }\n for (const [policyIndex, rawPolicy] of record.command_option_policies.entries()) {\n const policy = asRegistrationRecord(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}]`,\n rawPolicy,\n );\n assertNonEmptyString(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].command`,\n policy.command,\n );\n assertNonEmptyString(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].option`,\n policy.option,\n );\n assertOptionalBooleanField(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].enabled`,\n policy.enabled,\n );\n assertOptionalBooleanField(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].required`,\n policy.required,\n );\n assertOptionalBooleanField(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].visible`,\n policy.visible,\n );\n }\n }\n\n if (record.options !== undefined) {\n if (!Array.isArray(record.options)) {\n throw new TypeError(`registerItemTypes types[${typeIndex}].options must be an array when provided`);\n }\n for (const [optionIndex, rawOption] of record.options.entries()) {\n const option = asRegistrationRecord(`registerItemTypes types[${typeIndex}].options[${optionIndex}]`, rawOption);\n assertNonEmptyString(`registerItemTypes types[${typeIndex}].options[${optionIndex}].key`, option.key);\n assertOptionalStringArrayField(`registerItemTypes types[${typeIndex}].options[${optionIndex}].values`, option.values);\n assertOptionalBooleanField(`registerItemTypes types[${typeIndex}].options[${optionIndex}].required`, option.required);\n assertOptionalStringArrayField(\n `registerItemTypes types[${typeIndex}].options[${optionIndex}].aliases`,\n option.aliases,\n );\n }\n }\n }\n}\n\nfunction validateMigrationDefinition(definition: unknown): void {\n const record = asRegistrationRecord(\"registerMigration definition\", definition);\n if (record.id !== undefined && typeof record.id !== \"string\") {\n throw new TypeError(\"registerMigration definition.id must be a string when provided\");\n }\n if (record.description !== undefined && typeof record.description !== \"string\") {\n throw new TypeError(\"registerMigration definition.description must be a string when provided\");\n }\n if (record.status !== undefined && typeof record.status !== \"string\") {\n throw new TypeError(\"registerMigration definition.status must be a string when provided\");\n }\n assertOptionalBooleanField(\"registerMigration definition.mandatory\", record.mandatory);\n if (record.run !== undefined && typeof record.run !== \"function\") {\n throw new TypeError(\"registerMigration definition.run must be a function when provided\");\n }\n}\n\n/**\n * The seven array-valued dimensions a {@link ProjectProfileDefinition} stages.\n * Each is \"optional-by-emptiness\": an omitted dimension normalizes to an empty\n * array so the profile planner can iterate every dimension unconditionally.\n */\nconst PROJECT_PROFILE_DIMENSIONS = [\n \"types\",\n \"statuses\",\n \"fields\",\n \"workflows\",\n \"config\",\n \"templates\",\n \"packages\",\n] as const;\n\n/**\n * Validates the field shapes the profile planner, `pm profile show/apply/lint`,\n * and `describeProjectProfile` dereference without re-checking, so a structurally\n * well-formed but type-violating extension entry (e.g. a workflow whose `type` is\n * a number, or whose `allowed_transitions` is not an array) is rejected here\n * rather than crashing a downstream consumer. Dimensions whose consumers already\n * coerce or gracefully reject malformed values (statuses, fields, config) need no\n * shape check. The `entry` is an already-confirmed non-null object.\n */\nfunction validateProjectProfileEntryShape(dimension: string, index: number, entry: Record<string, unknown>): void {\n const at = `registerProfile profile.${dimension}[${index}]`;\n if (dimension === \"types\") {\n if (entry.name !== undefined && typeof entry.name !== \"string\") {\n throw new TypeError(`${at}.name must be a string when provided`);\n }\n return;\n }\n if (dimension === \"workflows\") {\n if (typeof entry.type !== \"string\") {\n throw new TypeError(`${at}.type must be a string`);\n }\n if (!Array.isArray(entry.allowed_transitions)) {\n throw new TypeError(`${at}.allowed_transitions must be an array`);\n }\n for (const [pairIndex, pair] of entry.allowed_transitions.entries()) {\n if (!Array.isArray(pair)) {\n throw new TypeError(`${at}.allowed_transitions[${pairIndex}] must be a [from, to] array`);\n }\n }\n return;\n }\n if (dimension === \"templates\") {\n if (typeof entry.name !== \"string\") {\n throw new TypeError(`${at}.name must be a string`);\n }\n if (typeof entry.options !== \"object\" || entry.options === null || Array.isArray(entry.options)) {\n throw new TypeError(`${at}.options must be an object`);\n }\n return;\n }\n if (dimension === \"packages\") {\n if (typeof entry.spec !== \"string\") {\n throw new TypeError(`${at}.spec must be a string`);\n }\n }\n}\n\nfunction validateProjectProfileDefinition(profile: unknown): void {\n const record = asRegistrationRecord(\"registerProfile profile\", profile);\n assertNonEmptyString(\"registerProfile profile.name\", record.name);\n assertNonEmptyString(\"registerProfile profile.title\", record.title);\n if (record.summary !== undefined && typeof record.summary !== \"string\") {\n throw new TypeError(\"registerProfile profile.summary must be a string when provided\");\n }\n for (const dimension of PROJECT_PROFILE_DIMENSIONS) {\n const value = record[dimension];\n if (value === undefined) {\n continue;\n }\n if (!Array.isArray(value)) {\n throw new TypeError(`registerProfile profile.${dimension} must be an array when provided`);\n }\n // Each dimension entry must be a non-null object: a primitive or null entry\n // (e.g. `statuses: [null]`, `types: [42]`) survives an array-only check but\n // crashes the profile planner and `pm profile show` when they read `entry.id`\n // / `entry.key` / `entry.type` later. Reject it at the registration boundary.\n for (const [index, entry] of value.entries()) {\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n throw new TypeError(`registerProfile profile.${dimension}[${index}] must be an object`);\n }\n // Beyond \"is an object\", validate the specific field shapes consumers\n // dereference so a type-violating entry can never crash the planner, the\n // `pm profile` surfaces, or describeProjectProfile downstream.\n validateProjectProfileEntryShape(dimension, index, entry as Record<string, unknown>);\n }\n }\n}\n\n/**\n * Fills an already-validated profile snapshot's optional surfaces — an absent\n * `summary` becomes an empty string and every omitted dimension an empty array —\n * so the stored definition always has the full {@link ProjectProfileDefinition}\n * shape the profile planner and `pm profile` resolution rely on. It runs after\n * validation on the cloned snapshot, so it only ever supplies missing defaults\n * and never has to coerce an invalid type (those are already rejected).\n */\nfunction applyProjectProfileDefaults(profile: Record<string, unknown>): ProjectProfileDefinition {\n if (profile.summary === undefined) {\n profile.summary = \"\";\n }\n for (const dimension of PROJECT_PROFILE_DIMENSIONS) {\n if (profile[dimension] === undefined) {\n profile[dimension] = [];\n }\n }\n return profile as unknown as ProjectProfileDefinition;\n}\n\nfunction attachRuntimeDefinition<TEntry extends { definition: Record<string, unknown> }>(\n entry: TEntry,\n runtimeDefinition: Record<string, unknown>,\n): TEntry {\n Object.defineProperty(entry, \"runtime_definition\", {\n value: runtimeDefinition,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n return entry;\n}\n\nfunction getDeclaredExtensionCapabilities(extension: LoadedExtension): Set<ExtensionCapability> | null {\n if (!Array.isArray(extension.capabilities)) {\n return null;\n }\n const declared = new Set<ExtensionCapability>();\n for (const capability of extension.capabilities) {\n const normalized = capability.trim().toLowerCase();\n if (isKnownExtensionCapability(normalized)) {\n declared.add(normalized);\n }\n }\n return declared;\n}\n\nfunction assertExtensionCapability(extension: LoadedExtension, capability: ExtensionCapability, method: string): void {\n const declared = getDeclaredExtensionCapabilities(extension);\n // Keep direct unit tests that construct LoadedExtension fixtures without\n // capability metadata backwards-compatible while enforcing manifest-declared\n // capabilities for runtime-loaded extensions.\n if (declared === null) {\n return;\n }\n if (!declared.has(capability)) {\n throw createRegistrationValidationError(\n `${method} requires capability '${capability}' in extension manifest capabilities`,\n {\n method,\n registration_index: -1,\n capability,\n missing_capability: capability,\n expected_schema: `\"capabilities\": [..., \"${capability}\"]`,\n received: extension.capabilities,\n hint: `Add \"${capability}\" to ${extension.name} manifest capabilities, or remove the ${method} registration call.`,\n },\n );\n }\n}\n\nfunction createExtensionApi(\n extension: LoadedExtension,\n hooks: ExtensionHookRegistry,\n commands: ExtensionCommandRegistry,\n parsers: ExtensionParserRegistry,\n preflight: ExtensionPreflightRegistry,\n services: ExtensionServiceRegistry,\n renderers: ExtensionRendererRegistry,\n registrations: ExtensionRegistrationRegistry,\n activationWarnings: string[],\n policy: NormalizedExtensionPolicy,\n): ExtensionApi {\n const selfIdentity: ExtensionSelfIdentity = Object.freeze({\n name: extension.name,\n layer: extension.layer,\n version: extension.version,\n capabilities: Object.freeze(\n (extension.capabilities ?? []).filter((capability): capability is ExtensionCapability =>\n (KNOWN_EXTENSION_CAPABILITIES as readonly string[]).includes(capability),\n ),\n ) as readonly ExtensionCapability[],\n pm_min_version: extension.pm_min_version,\n pm_max_version: extension.pm_max_version,\n source_package: extension.source_package,\n });\n const extensionRef: PolicyExtensionRef = {\n layer: extension.layer,\n name: extension.name,\n trusted: extension.trusted === true,\n provenanceVerified: extension.provenance?.verified === true,\n sandboxProfile: extension.sandbox_profile,\n permissions:\n extension.permissions && typeof extension.permissions === \"object\"\n ? {\n fs_read: extension.permissions.fs_read,\n fs_write: extension.permissions.fs_write,\n network: extension.permissions.network,\n env_read: extension.permissions.env_read,\n env_write: extension.permissions.env_write,\n process_spawn: extension.permissions.process_spawn,\n }\n : undefined,\n };\n const pushPolicyWarning = (warning: string | null): void => {\n if (warning) {\n activationWarnings.push(warning);\n }\n };\n const allowRegistration = (\n surface: ExtensionPolicySurface,\n method: string,\n capability?: ExtensionCapability,\n details?: {\n command?: string;\n action?: string;\n service?: string;\n },\n ): boolean => {\n const decision = evaluateExtensionPolicyForRegistration(policy, extensionRef, surface, method, capability, details);\n pushPolicyWarning(decision.warning);\n return decision.allowed;\n };\n const registerCommandTrace = (\n mode: \"override\" | \"definition\",\n command: string | undefined,\n expectedSchema: string,\n received: unknown,\n hint?: string,\n ): ExtensionActivationFailureTrace => ({\n method: \"registerCommand\",\n registration_index: mode === \"override\" ? commands.overrides.length : commands.handlers.length,\n command,\n expected_schema: expectedSchema,\n received: sanitizeRegistrationValue(received),\n hint,\n });\n\n const registerCommandOverride = (command: string, override: CommandOverride | undefined): void => {\n const normalizedCommand = normalizeCommandName(command);\n if (normalizedCommand.length === 0) {\n throw createRegistrationValidationError(\n \"registerCommand requires a non-empty command name\",\n registerCommandTrace(\n \"override\",\n command,\n 'registerCommand(\"<command>\", (context) => unknown)',\n command,\n \"Provide a non-empty command path as the first argument.\",\n ),\n );\n }\n if (typeof override !== \"function\") {\n const trace = registerCommandTrace(\n \"override\",\n normalizedCommand,\n 'registerCommand(\"<command>\", (context) => unknown)',\n { command, override },\n \"Provide a function as the second registerCommand argument.\",\n );\n throw createRegistrationValidationError(\n `registerCommand requires an override function when command name is provided (command=\"${normalizedCommand}\", registration_index=${trace.registration_index})`,\n trace,\n );\n }\n if (!allowRegistration(\"commands.override\", \"registerCommand\", \"commands\", { command: normalizedCommand })) {\n return;\n }\n commands.overrides.push({\n layer: extension.layer,\n name: extension.name,\n command: normalizedCommand,\n run: override,\n });\n };\n\n const resolveCommandDefinitionRunHandler = (\n definition: CommandDefinition,\n normalizedCommand: string,\n ): CommandHandler | undefined => {\n const runHandler = typeof definition.run === \"function\" ? definition.run : undefined;\n const legacyHandler = typeof definition.handler === \"function\" ? definition.handler : undefined;\n if (!runHandler && legacyHandler) {\n activationWarnings.push(\n `extension_command_definition_legacy_handler_alias:${extension.layer}:${extension.name}:${normalizedCommand}`,\n );\n }\n return runHandler ?? legacyHandler;\n };\n\n const registerCommandDefinition = (definition: CommandDefinition): void => {\n if (typeof definition !== \"object\" || definition === null) {\n throw createRegistrationValidationError(\n \"registerCommand requires a command definition object\",\n registerCommandTrace(\n \"definition\",\n undefined,\n \"{ name: string; run: (context) => unknown; }\",\n definition,\n \"Use registerCommand({ name: \\\"command path\\\", run: (context) => ... }).\",\n ),\n );\n }\n if (typeof definition.name !== \"string\") {\n throw createRegistrationValidationError(\n \"registerCommand requires a command definition name\",\n registerCommandTrace(\n \"definition\",\n undefined,\n \"{ name: string; run: (context) => unknown; }\",\n definition,\n \"Set command definition.name to a non-empty string command path.\",\n ),\n );\n }\n\n const normalizedCommand = normalizeCommandName(definition.name);\n if (normalizedCommand.length === 0) {\n throw createRegistrationValidationError(\n \"registerCommand requires a non-empty command definition name\",\n registerCommandTrace(\n \"definition\",\n definition.name,\n \"{ name: string; run: (context) => unknown; }\",\n definition,\n \"Ensure command definition.name contains a non-empty command path.\",\n ),\n );\n }\n const resolvedHandler = resolveCommandDefinitionRunHandler(definition, normalizedCommand);\n if (typeof resolvedHandler !== \"function\") {\n const trace = registerCommandTrace(\n \"definition\",\n normalizedCommand,\n \"{ name: string; run: (context) => unknown; }\",\n definition,\n \"Define command definition.run as a function.\",\n );\n throw createRegistrationValidationError(\n `registerCommand requires a command definition run handler (command=\"${normalizedCommand}\", registration_index=${trace.registration_index})`,\n trace,\n );\n }\n try {\n assertOptionalStringField(\"registerCommand definition.action\", definition.action);\n assertOptionalStringField(\"registerCommand definition.description\", definition.description);\n assertOptionalStringField(\"registerCommand definition.intent\", definition.intent);\n const action = resolveCommandDefinitionAction(normalizedCommand, definition.action);\n if (!allowRegistration(\"commands.handler\", \"registerCommand\", \"commands\", { command: normalizedCommand, action })) {\n return;\n }\n const description = definition.description?.trim();\n const intent = definition.intent?.trim();\n const examples = normalizeOptionalStringArrayField(\"registerCommand definition.examples\", definition.examples);\n const failureHints = normalizeOptionalStringArrayField(\n \"registerCommand definition.failure_hints\",\n definition.failure_hints,\n );\n const argumentsDefinition = normalizeCommandDefinitionArguments(definition.arguments);\n\n if (definition.flags !== undefined) {\n assertExtensionCapability(extension, \"schema\", \"registerCommand flags\");\n validateFlagDefinitions(definition.flags);\n registrations.flags.push({\n layer: extension.layer,\n name: extension.name,\n target_command: normalizedCommand,\n flags: normalizeRegistrationRecordList(\"registerCommand definition.flags\", definition.flags),\n });\n }\n\n const registration: RegisteredExtensionCommandDefinition = {\n layer: extension.layer,\n name: extension.name,\n source_package: extension.source_package,\n command: normalizedCommand,\n action,\n examples,\n failure_hints: failureHints,\n arguments: argumentsDefinition,\n };\n if (description) {\n registration.description = description;\n }\n if (intent) {\n registration.intent = intent;\n }\n registrations.commands.push(registration);\n } catch (error: unknown) {\n const reason = formatUnknownError(error);\n const trace = registerCommandTrace(\n \"definition\",\n normalizedCommand,\n \"{ name: string; run: (context) => unknown; action?: string; arguments?: object[]; flags?: object[]; }\",\n definition,\n \"Use schema-style metadata (action/arguments/flags/examples/intent) with valid values.\",\n );\n throw createRegistrationValidationError(\n `registerCommand definition metadata invalid (command=\"${normalizedCommand}\", registration_index=${trace.registration_index}): ${reason}`,\n trace,\n );\n }\n commands.handlers.push({\n layer: extension.layer,\n name: extension.name,\n command: normalizedCommand,\n run: resolvedHandler,\n });\n };\n\n const registerCommand = (commandOrDefinition: string | CommandDefinition, override?: CommandOverride): void => {\n assertExtensionCapability(extension, \"commands\", \"registerCommand\");\n if (typeof commandOrDefinition === \"string\") {\n registerCommandOverride(commandOrDefinition, override);\n return;\n }\n registerCommandDefinition(commandOrDefinition);\n };\n const registerParser = (command: string, override: ParserOverride): void => {\n assertExtensionCapability(extension, \"parser\", \"registerParser\");\n if (!allowRegistration(\"parser.override\", \"registerParser\", \"parser\")) {\n return;\n }\n const normalizedCommand = normalizeCommandName(assertNonEmptyString(\"registerParser command\", command));\n assertFunctionHandler(\"registerParser override\", override);\n parsers.overrides.push({\n layer: extension.layer,\n name: extension.name,\n command: normalizedCommand,\n run: override,\n });\n };\n const registerPreflight = (override: PreflightOverride): void => {\n assertExtensionCapability(extension, \"preflight\", \"registerPreflight\");\n if (!allowRegistration(\"preflight.override\", \"registerPreflight\", \"preflight\")) {\n return;\n }\n assertFunctionHandler(\"registerPreflight override\", override);\n preflight.overrides.push({\n layer: extension.layer,\n name: extension.name,\n run: override,\n });\n };\n const registerService = (service: ExtensionServiceName, override: ServiceOverride): void => {\n assertExtensionCapability(extension, \"services\", \"registerService\");\n const normalizedService = String(service).trim().toLowerCase();\n if (!isExtensionServiceName(normalizedService)) {\n throw new TypeError(`registerService service must be one of: ${KNOWN_EXTENSION_SERVICE_NAMES.join(\", \")}`);\n }\n if (!allowRegistration(\"services.override\", \"registerService\", \"services\", { service: normalizedService })) {\n return;\n }\n assertFunctionHandler(\"registerService override\", override);\n services.overrides.push({\n layer: extension.layer,\n name: extension.name,\n service: normalizedService as ExtensionServiceName,\n run: override,\n });\n };\n const registerRenderer = (format: OutputRendererFormat, renderer: RendererOverride): void => {\n assertExtensionCapability(extension, \"renderers\", \"registerRenderer\");\n if (!allowRegistration(\"renderers.override\", \"registerRenderer\", \"renderers\")) {\n return;\n }\n if (typeof renderer !== \"function\") {\n throw new TypeError(\"registerRenderer requires a renderer function\");\n }\n const normalizedFormat = String(format).trim().toLowerCase();\n if (!isOutputRendererFormat(normalizedFormat)) {\n throw new Error(`registerRenderer format must be toon|json, received: ${String(format)}`);\n }\n renderers.overrides.push({\n layer: extension.layer,\n name: extension.name,\n format: normalizedFormat,\n run: renderer,\n });\n };\n const registerFlags = (targetCommand: string, flags: FlagDefinition[]): void => {\n assertExtensionCapability(extension, \"schema\", \"registerFlags\");\n if (!allowRegistration(\"schema.flags\", \"registerFlags\", \"schema\")) {\n return;\n }\n const normalizedTargetCommand = normalizeCommandName(assertNonEmptyString(\"registerFlags targetCommand\", targetCommand));\n validateFlagDefinitions(flags);\n const normalizedFlags = normalizeRegistrationRecordList(\"registerFlags flags\", flags);\n if (normalizedFlags.length === 0) {\n throw new TypeError(\"registerFlags requires at least one flag definition\");\n }\n registrations.flags.push({\n layer: extension.layer,\n name: extension.name,\n target_command: normalizedTargetCommand,\n flags: normalizedFlags,\n });\n };\n const registerItemFields = (fields: SchemaFieldDefinition[]): void => {\n assertExtensionCapability(extension, \"schema\", \"registerItemFields\");\n if (!allowRegistration(\"schema.itemfields\", \"registerItemFields\", \"schema\")) {\n return;\n }\n validateItemFieldDefinitions(fields);\n const normalizedFields = normalizeRegistrationRecordList(\n \"registerItemFields fields\",\n fields,\n ) as SchemaFieldDefinition[];\n if (normalizedFields.length === 0) {\n throw new TypeError(\"registerItemFields requires at least one field definition\");\n }\n registrations.item_fields.push({\n layer: extension.layer,\n name: extension.name,\n fields: normalizedFields,\n });\n };\n const registerItemTypes = (types: SchemaItemTypeDefinition[]): void => {\n assertExtensionCapability(extension, \"schema\", \"registerItemTypes\");\n if (!allowRegistration(\"schema.itemtypes\", \"registerItemTypes\", \"schema\")) {\n return;\n }\n validateItemTypeDefinitions(types);\n const normalizedTypes = normalizeRegistrationRecordList(\n \"registerItemTypes types\",\n types,\n ) as SchemaItemTypeDefinition[];\n if (normalizedTypes.length === 0) {\n throw new TypeError(\"registerItemTypes requires at least one type definition\");\n }\n registrations.item_types.push({\n layer: extension.layer,\n name: extension.name,\n types: normalizedTypes,\n });\n };\n const registerMigration = (definition: SchemaMigrationDefinition): void => {\n assertExtensionCapability(extension, \"schema\", \"registerMigration\");\n if (!allowRegistration(\"schema.migrations\", \"registerMigration\", \"schema\")) {\n return;\n }\n validateMigrationDefinition(definition);\n const runtimeDefinition = normalizeRuntimeRegistrationRecord(\"registerMigration definition\", definition);\n registrations.migrations.push(\n attachRuntimeDefinition(\n {\n layer: extension.layer,\n name: extension.name,\n definition: normalizeRegistrationRecord(\"registerMigration definition\", definition),\n },\n runtimeDefinition,\n ) as RegisteredExtensionSchemaMigrationDefinition,\n );\n };\n const registerProfile = (profile: ProjectProfileRegistrationInput): void => {\n assertExtensionCapability(extension, \"schema\", \"registerProfile\");\n if (!allowRegistration(\"schema.profiles\", \"registerProfile\", \"schema\")) {\n return;\n }\n // Snapshot first, then validate and default the snapshot: cloning resolves\n // any getters once into plain data decoupled from the caller's object, so\n // validation and storage operate on the same value — a getter cannot present\n // one value to validation and another to the registry. Defaults are applied\n // only after validation, so an invalid type is rejected, not silently coerced.\n const snapshot = cloneRuntimeRegistrationValue(profile);\n validateProjectProfileDefinition(snapshot);\n registrations.profiles.push({\n layer: extension.layer,\n name: extension.name,\n profile: applyProjectProfileDefaults(snapshot as Record<string, unknown>),\n });\n };\n const applyImportExportCommandMetadata = (\n method: \"registerImporter\" | \"registerExporter\",\n commandPath: string,\n options: ImportExportRegistrationOptions | undefined,\n ): void => {\n if (options === undefined) {\n return;\n }\n if (typeof options !== \"object\" || options === null || Array.isArray(options)) {\n throw new TypeError(`${method} options must be an object when provided`);\n }\n assertOptionalStringField(`${method} options.action`, options.action);\n assertOptionalStringField(`${method} options.description`, options.description);\n assertOptionalStringField(`${method} options.intent`, options.intent);\n const action = resolveCommandDefinitionAction(commandPath, options.action);\n const examples = normalizeOptionalStringArrayField(`${method} options.examples`, options.examples);\n const failureHints = normalizeOptionalStringArrayField(`${method} options.failure_hints`, options.failure_hints);\n const argumentsDefinition = normalizeCommandDefinitionArguments(options.arguments);\n\n if (options.flags !== undefined) {\n assertExtensionCapability(extension, \"schema\", `${method} options.flags`);\n // Route metadata flags through the same surface-policy gate as registerFlags so\n // enforce-mode policies blocking schema.flags are honored even when importers are allowed.\n if (allowRegistration(\"schema.flags\", `${method} options.flags`, \"schema\")) {\n validateFlagDefinitions(options.flags);\n registrations.flags.push({\n layer: extension.layer,\n name: extension.name,\n target_command: commandPath,\n flags: normalizeRegistrationRecordList(`${method} options.flags`, options.flags),\n });\n }\n }\n\n const registration: RegisteredExtensionCommandDefinition = {\n layer: extension.layer,\n name: extension.name,\n source_package: extension.source_package,\n command: commandPath,\n action,\n examples,\n failure_hints: failureHints,\n arguments: argumentsDefinition,\n };\n const description = options.description?.trim();\n if (description) {\n registration.description = description;\n }\n const intent = options.intent?.trim();\n if (intent) {\n registration.intent = intent;\n }\n registrations.commands.push(registration);\n };\n const registerImporter = (name: string, importer: Importer, options?: ImportExportRegistrationOptions): void => {\n assertExtensionCapability(extension, \"importers\", \"registerImporter\");\n if (!allowRegistration(\"importers.importer\", \"registerImporter\", \"importers\")) {\n return;\n }\n const normalizedName = normalizeRegistrationName(assertNonEmptyString(\"registerImporter name\", name));\n assertFunctionHandler(\"registerImporter importer\", importer);\n const commandPath = toRegistrationCommandPath(normalizedName, \"import\");\n // Validate and register optional command metadata before mutating the registry\n // so an invalid options object leaves no partial importer registration.\n applyImportExportCommandMetadata(\"registerImporter\", commandPath, options);\n registrations.importers.push({\n layer: extension.layer,\n name: extension.name,\n importer: normalizedName,\n });\n commands.handlers.push({\n layer: extension.layer,\n name: extension.name,\n command: commandPath,\n run: async (context) =>\n importer({\n registration: normalizedName,\n action: \"import\",\n command: context.command,\n args: cloneContextSnapshot(context.args),\n options: cloneContextSnapshot(context.options),\n global: cloneContextSnapshot(context.global),\n pm_root: context.pm_root,\n }),\n });\n };\n const registerExporter = (name: string, exporter: Exporter, options?: ImportExportRegistrationOptions): void => {\n assertExtensionCapability(extension, \"importers\", \"registerExporter\");\n if (!allowRegistration(\"importers.exporter\", \"registerExporter\", \"importers\")) {\n return;\n }\n const normalizedName = normalizeRegistrationName(assertNonEmptyString(\"registerExporter name\", name));\n assertFunctionHandler(\"registerExporter exporter\", exporter);\n const commandPath = toRegistrationCommandPath(normalizedName, \"export\");\n // Validate and register optional command metadata before mutating the registry\n // so an invalid options object leaves no partial exporter registration.\n applyImportExportCommandMetadata(\"registerExporter\", commandPath, options);\n registrations.exporters.push({\n layer: extension.layer,\n name: extension.name,\n exporter: normalizedName,\n });\n commands.handlers.push({\n layer: extension.layer,\n name: extension.name,\n command: commandPath,\n run: async (context) =>\n exporter({\n registration: normalizedName,\n action: \"export\",\n command: context.command,\n args: cloneContextSnapshot(context.args),\n options: cloneContextSnapshot(context.options),\n global: cloneContextSnapshot(context.global),\n pm_root: context.pm_root,\n }),\n });\n };\n const registerSearchProvider = (provider: SearchProviderDefinition): void => {\n assertExtensionCapability(extension, \"search\", \"registerSearchProvider\");\n if (!allowRegistration(\"search.provider\", \"registerSearchProvider\", \"search\")) {\n return;\n }\n const runtimeDefinition = normalizeRuntimeRegistrationRecord(\"registerSearchProvider provider\", provider);\n registrations.search_providers.push(\n attachRuntimeDefinition(\n {\n layer: extension.layer,\n name: extension.name,\n definition: normalizeRegistrationRecord(\"registerSearchProvider provider\", provider),\n },\n runtimeDefinition,\n ) as RegisteredExtensionSearchProvider,\n );\n };\n const registerVectorStoreAdapter = (adapter: VectorStoreAdapterDefinition): void => {\n assertExtensionCapability(extension, \"search\", \"registerVectorStoreAdapter\");\n if (!allowRegistration(\"search.vectorstore\", \"registerVectorStoreAdapter\", \"search\")) {\n return;\n }\n const runtimeDefinition = normalizeRuntimeRegistrationRecord(\"registerVectorStoreAdapter adapter\", adapter);\n registrations.vector_store_adapters.push(\n attachRuntimeDefinition(\n {\n layer: extension.layer,\n name: extension.name,\n definition: normalizeRegistrationRecord(\"registerVectorStoreAdapter adapter\", adapter),\n },\n runtimeDefinition,\n ) as RegisteredExtensionVectorStoreAdapter,\n );\n };\n const registerBeforeCommand = (hook: BeforeCommandHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.beforeCommand\");\n if (!allowRegistration(\"hooks.beforecommand\", \"api.hooks.beforeCommand\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"beforeCommand\", hook);\n hooks.beforeCommand.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n const registerAfterCommand = (hook: AfterCommandHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.afterCommand\");\n if (!allowRegistration(\"hooks.aftercommand\", \"api.hooks.afterCommand\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"afterCommand\", hook);\n hooks.afterCommand.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n const registerOnWrite = (hook: OnWriteHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.onWrite\");\n if (!allowRegistration(\"hooks.onwrite\", \"api.hooks.onWrite\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"onWrite\", hook);\n hooks.onWrite.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n const registerOnRead = (hook: OnReadHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.onRead\");\n if (!allowRegistration(\"hooks.onread\", \"api.hooks.onRead\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"onRead\", hook);\n hooks.onRead.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n const registerOnIndex = (hook: OnIndexHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.onIndex\");\n if (!allowRegistration(\"hooks.onindex\", \"api.hooks.onIndex\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"onIndex\", hook);\n hooks.onIndex.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n\n return {\n extension: selfIdentity,\n registerCommand,\n registerParser,\n registerPreflight,\n registerService,\n registerFlags,\n registerItemFields,\n registerItemTypes,\n registerMigration,\n registerProfile,\n registerRenderer,\n registerImporter,\n registerExporter,\n registerSearchProvider,\n registerVectorStoreAdapter,\n hooks: {\n beforeCommand: registerBeforeCommand,\n afterCommand: registerAfterCommand,\n onWrite: registerOnWrite,\n onRead: registerOnRead,\n onIndex: registerOnIndex,\n },\n };\n}\n\nfunction getRegistrationCounts(registrations: ExtensionRegistrationRegistry): ExtensionRegistrationCounts {\n const commandCount = registrations.commands.length;\n const flagCount = registrations.flags.reduce((total, entry) => total + entry.flags.length, 0);\n const itemFieldCount = registrations.item_fields.reduce((total, entry) => total + entry.fields.length, 0);\n const itemTypeCount = registrations.item_types.reduce((total, entry) => total + entry.types.length, 0);\n return {\n commands: commandCount,\n flags: flagCount,\n item_fields: itemFieldCount,\n item_types: itemTypeCount,\n migrations: registrations.migrations.length,\n profiles: registrations.profiles.length,\n importers: registrations.importers.length,\n exporters: registrations.exporters.length,\n search_providers: registrations.search_providers.length,\n vector_store_adapters: registrations.vector_store_adapters.length,\n };\n}\n\nfunction collectCommandCollisionWarnings(commands: ExtensionCommandRegistry): string[] {\n const warnings: string[] = [];\n const collectByCommand = <TEntry extends { layer: ExtensionLayer; name: string; command: string }>(\n entries: TEntry[],\n codePrefix: string,\n ): void => {\n const grouped = new Map<string, TEntry[]>();\n for (const entry of entries) {\n const bucket = grouped.get(entry.command) ?? [];\n bucket.push(entry);\n grouped.set(entry.command, bucket);\n }\n for (const command of [...grouped.keys()].sort((left, right) => left.localeCompare(right))) {\n const bucket = grouped.get(command)!;\n if (bucket.length <= 1) {\n continue;\n }\n const winner = bucket[bucket.length - 1];\n for (const displaced of bucket.slice(0, -1)) {\n warnings.push(\n `${codePrefix}:${command}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n }\n }\n };\n\n collectByCommand(commands.handlers, \"extension_command_handler_collision\");\n collectByCommand(commands.overrides, \"extension_command_override_collision\");\n\n const handlerCommands = new Set(commands.handlers.map((entry) => entry.command));\n const overlapCommands = [...new Set(commands.overrides.map((entry) => entry.command))].filter((command) =>\n handlerCommands.has(command),\n );\n overlapCommands.sort((left, right) => left.localeCompare(right));\n for (const command of overlapCommands) {\n const handlers = commands.handlers.filter((entry) => entry.command === command);\n const overrides = commands.overrides.filter((entry) => entry.command === command);\n for (const override of overrides) {\n for (const handler of handlers) {\n warnings.push(\n `extension_command_override_handler_overlap:${command}:${override.layer}:${override.name}:${handler.layer}:${handler.name}`,\n );\n }\n }\n }\n\n return warnings;\n}\n\nfunction collectRendererCollisionWarnings(renderers: ExtensionRendererRegistry): string[] {\n const grouped = new Map<OutputRendererFormat, RegisteredExtensionRendererOverride[]>();\n for (const entry of renderers.overrides) {\n const bucket = grouped.get(entry.format) ?? [];\n bucket.push(entry);\n grouped.set(entry.format, bucket);\n }\n const warnings: string[] = [];\n for (const format of [...grouped.keys()].sort((left, right) => left.localeCompare(right))) {\n const bucket = grouped.get(format)!;\n if (bucket.length <= 1) {\n continue;\n }\n const winner = bucket[bucket.length - 1];\n for (const displaced of bucket.slice(0, -1)) {\n warnings.push(\n `extension_renderer_collision:${format}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n }\n }\n return warnings;\n}\n\nfunction collectParserCollisionWarnings(parsers: ExtensionParserRegistry): string[] {\n const warnings: string[] = [];\n const grouped = new Map<string, RegisteredExtensionParserOverride[]>();\n for (const entry of parsers.overrides) {\n const bucket = grouped.get(entry.command) ?? [];\n bucket.push(entry);\n grouped.set(entry.command, bucket);\n }\n for (const command of [...grouped.keys()].sort((left, right) => left.localeCompare(right))) {\n const bucket = grouped.get(command)!;\n if (bucket.length <= 1) {\n continue;\n }\n const winner = bucket[bucket.length - 1];\n for (const displaced of bucket.slice(0, -1)) {\n warnings.push(\n `extension_parser_override_collision:${command}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n }\n }\n return warnings;\n}\n\nfunction collectPreflightCollisionWarnings(preflight: ExtensionPreflightRegistry): string[] {\n if (preflight.overrides.length <= 1) {\n return [];\n }\n const winner = preflight.overrides[preflight.overrides.length - 1];\n return preflight.overrides.slice(0, -1).map(\n (displaced) =>\n `extension_preflight_override_collision:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n}\n\n// Services whose runtime semantics are chain/fall-through (each override gets a chance);\n// for those, registering multiple overrides is by design, not a collision.\nconst CHAINED_SERVICE_NAMES: ReadonlySet<ExtensionServiceName> = new Set<ExtensionServiceName>([\n \"output_format\",\n]);\n\nfunction collectServiceCollisionWarnings(services: ExtensionServiceRegistry): string[] {\n const warnings: string[] = [];\n const grouped = new Map<ExtensionServiceName, RegisteredExtensionServiceOverride[]>();\n for (const entry of services.overrides) {\n const bucket = grouped.get(entry.service) ?? [];\n bucket.push(entry);\n grouped.set(entry.service, bucket);\n }\n for (const service of [...grouped.keys()].sort((left, right) => left.localeCompare(right))) {\n const bucket = grouped.get(service)!;\n if (bucket.length <= 1) {\n continue;\n }\n if (CHAINED_SERVICE_NAMES.has(service)) {\n continue;\n }\n const winner = bucket[bucket.length - 1];\n for (const displaced of bucket.slice(0, -1)) {\n warnings.push(\n `extension_service_override_collision:${service}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n }\n }\n return warnings;\n}\n\n/**\n * Implements activate extensions for the public runtime surface of this module.\n */\nexport async function activateExtensions(loadResult: ExtensionLoadResult): Promise<ExtensionActivationResult> {\n const policy = hydrateExtensionPolicy(loadResult.policy ?? DEFAULT_EXTENSION_POLICY);\n const hooks = createEmptyExtensionHookRegistry();\n const commands = createEmptyExtensionCommandRegistry();\n const parsers = createEmptyExtensionParserRegistry();\n const preflight = createEmptyExtensionPreflightRegistry();\n const services = createEmptyExtensionServiceRegistry();\n const renderers = createEmptyExtensionRendererRegistry();\n const registrations = createEmptyExtensionRegistrationRegistry();\n const failed: FailedExtensionActivation[] = [];\n const warnings: string[] = [];\n\n for (const extension of loadResult.loaded) {\n const activatable = resolveActivatableExtension(extension.module);\n if (!activatable) {\n continue;\n }\n\n try {\n await activatable.activate(\n createExtensionApi(\n extension,\n hooks,\n commands,\n parsers,\n preflight,\n services,\n renderers,\n registrations,\n warnings,\n policy,\n ),\n );\n } catch (error: unknown) {\n warnings.push(`extension_activate_failed:${extension.layer}:${extension.name}`);\n const trace = extractRegistrationValidationTrace(error);\n failed.push({\n layer: extension.layer,\n name: extension.name,\n entry_path: extension.entry_path,\n error: formatUnknownError(error),\n trace,\n });\n }\n }\n\n const collisionWarnings = [\n ...collectCommandCollisionWarnings(commands),\n ...collectParserCollisionWarnings(parsers),\n ...collectPreflightCollisionWarnings(preflight),\n ...collectServiceCollisionWarnings(services),\n ...collectRendererCollisionWarnings(renderers),\n ];\n const mergedWarnings = [...new Set([...warnings, ...collisionWarnings])];\n\n return {\n hooks,\n commands,\n parsers,\n preflight,\n services,\n renderers,\n registrations,\n failed,\n warnings: mergedWarnings,\n hook_counts: {\n before_command: hooks.beforeCommand.length,\n after_command: hooks.afterCommand.length,\n on_write: hooks.onWrite.length,\n on_read: hooks.onRead.length,\n on_index: hooks.onIndex.length,\n },\n command_override_count: commands.overrides.length,\n command_handler_count: commands.handlers.length,\n parser_override_count: parsers.overrides.length,\n preflight_override_count: preflight.overrides.length,\n service_override_count: services.overrides.length,\n renderer_override_count: renderers.overrides.length,\n registration_counts: getRegistrationCounts(registrations),\n };\n}\n\nexport const _testOnlyLoader = {\n assertFlagValueTypeAndDefault,\n assertOptionalStringField,\n compareComparableVersions,\n collectCommandCollisionWarnings,\n collectParserCollisionWarnings,\n collectRendererCollisionWarnings,\n collectServiceCollisionWarnings,\n createExtensionApi,\n createRegistrationValidationError,\n evaluatePmMaxVersionCompatibility,\n evaluatePmMinVersionCompatibility,\n extractRegistrationValidationTrace,\n fingerprintPath,\n getRegistrationCounts,\n normalizeCommandDefinitionArguments,\n normalizeExtensionDeactivateTimeout,\n normalizeOptionalStringArrayField,\n normalizeRegistrationRecord,\n normalizeRegistrationRecordList,\n normalizeRuntimeRegistrationRecord,\n parseComparableVersion,\n parseManifest,\n readCurrentPmCliVersion,\n readManagedExtensionSourcePackages,\n resolveExtensionImportHref,\n resolveCurrentPmCliVersion,\n resolveCommandDefinitionAction,\n sanitizeRegistrationValue,\n validateItemFieldDefinitions,\n resetCurrentPmCliVersionCacheForTest: () => {\n currentPmCliVersionPromise = null;\n },\n};\n", "/**\n * Canonical coercion kinds an extension flag can declare via `value_type`\n * (or the deprecated `type` alias). The runtime also accepts a few common\n * aliases (`int`/`integer`/`float` -> number, `bool` -> boolean) so author\n * intent is honored without surprises.\n */\n/** Canonical scalar value kinds accepted by extension command flag definitions. */\nexport type FlagValueKind = \"string\" | \"number\" | \"boolean\";\n\nconst FLAG_VALUE_KIND_BY_ALIAS: Readonly<Record<string, FlagValueKind>> = Object.freeze({\n string: \"string\",\n number: \"number\",\n int: \"number\",\n integer: \"number\",\n float: \"number\",\n boolean: \"boolean\",\n bool: \"boolean\",\n});\n\n/**\n * Resolve a declared flag value type (string) to its canonical kind, or `null`\n * when it is not a recognized type/alias. Matching is trim- and\n * case-insensitive.\n */\nexport function resolveFlagValueKind(raw: unknown): FlagValueKind | null {\n if (typeof raw !== \"string\") {\n return null;\n }\n return FLAG_VALUE_KIND_BY_ALIAS[raw.trim().toLowerCase()] ?? null;\n}\n\n/**\n * Flatten a `list` flag value (or default) into its individual entries the same\n * way the runtime does: nested arrays are flattened and comma-joined strings are\n * split, with surrounding whitespace trimmed and empty segments dropped. No\n * type coercion is applied. Shared by the CLI coercion path and the\n * registration-time default validator so the two never disagree.\n */\nexport function flattenFlagListValue(value: unknown): unknown[] {\n const entries: unknown[] = [];\n const collect = (input: unknown): void => {\n if (Array.isArray(input)) {\n for (const item of input) {\n collect(item);\n }\n return;\n }\n if (typeof input === \"string\") {\n for (const part of input.split(\",\")) {\n const trimmed = part.trim();\n if (trimmed.length > 0) {\n entries.push(trimmed);\n }\n }\n return;\n }\n if (input !== undefined && input !== null) {\n entries.push(input);\n }\n };\n collect(value);\n return entries;\n}\n\n/**\n * Whether a scalar flag default would cleanly coerce under the declared kind,\n * mirroring the runtime coercion rules in `coerceLooseCommandOptionsWithFlagDefinitions`.\n * Used to reject contradictory definitions (e.g. `value_type: \"number\"` with\n * `default: \"abc\"`) at registration instead of letting an untyped value pass\n * through to activation.\n */\nexport function isFlagDefaultValueCoercible(value: string | number | boolean, kind: FlagValueKind): boolean {\n if (kind === \"string\") {\n return true;\n }\n if (kind === \"number\") {\n if (typeof value === \"number\") {\n return Number.isFinite(value);\n }\n return typeof value === \"string\" && value.trim().length > 0 && Number.isFinite(Number(value));\n }\n if (typeof value === \"boolean\") {\n return true;\n }\n return typeof value === \"string\" && [\"true\", \"false\", \"1\", \"0\"].includes(value.trim().toLowerCase());\n}\n", "/**\n * @module core/extensions/item-field-types\n *\n * Implements extension runtime contracts and governance for Item Field Types.\n */\nimport { levenshteinDistanceWithinLimit } from \"../shared/levenshtein.js\";\n\n/**\n * Canonical coercion kinds accepted for extension-registered custom item fields.\n *\n * A `registerItemFields` definition declares one of these as its `type`; the\n * value is later coerced by that kind (see `coerceRegisteredFieldValue`). Keep\n * this list in lock-step with the coercion switch in `item-fields.ts`.\n */\nexport const KNOWN_ITEM_FIELD_TYPES = [\"string\", \"number\", \"boolean\", \"array\", \"object\"] as const;\n/**\n * Restricts known item field type values accepted by command, SDK, and storage contracts.\n */\nexport type KnownItemFieldType = (typeof KNOWN_ITEM_FIELD_TYPES)[number];\n\n/**\n * Normalize a declared field type to its canonical kind, or `null` when the\n * value is not a known type. Matching is trim- and case-insensitive.\n */\nexport function normalizeItemFieldType(value: string): KnownItemFieldType | null {\n const normalized = value.trim().toLowerCase();\n return (KNOWN_ITEM_FIELD_TYPES as readonly string[]).includes(normalized)\n ? (normalized as KnownItemFieldType)\n : null;\n}\n\n/**\n * Suggest a known field type for a typo'd declaration (e.g. `\"strnig\"` ->\n * `\"string\"`), using the shared OSA Damerau–Levenshtein helper so adjacent\n * transpositions count as a single edit. Returns the first canonical type within\n * the proportional edit budget (in declaration order — the kinds are distinct\n * enough that at most one matches), or `null` when nothing is close enough.\n */\nexport function suggestKnownItemFieldType(value: string): KnownItemFieldType | null {\n const normalized = value.trim().toLowerCase();\n if (normalized.length === 0) {\n return null;\n }\n const limit = Math.max(1, Math.floor(normalized.length * 0.34));\n for (const candidate of KNOWN_ITEM_FIELD_TYPES) {\n if (levenshteinDistanceWithinLimit(normalized, candidate, limit) !== null) {\n return candidate;\n }\n }\n return null;\n}\n", "/**\n * @module core/extensions/version-compat\n *\n * Single source of truth for extension-manifest version-bound compatibility.\n *\n * An extension manifest may declare an inclusive `pm_min_version` lower bound and\n * an inclusive `pm_max_version` upper bound. At load time the\n * {@link ../extensions/loader.js | loader} compares them against the running pm\n * CLI version and skips (or warns about) an extension that falls outside the\n * supported window. The comparison and the per-bound status semantics live here\n * so the runtime loader and the author-time SDK helper\n * (`checkExtensionManifestCompatibility`) share one implementation and can never\n * drift — the same \"agrees with the loader by construction\" guarantee the\n * declarative authoring helpers (`describeExtensionBlueprint`,\n * `deriveExtensionCapabilities`) already provide.\n *\n * The functions here are pure: they take an already-resolved current version\n * (the loader resolves it from `package.json`; the SDK caller supplies a target\n * version) and return structured outcomes. Warning-string formatting and\n * version resolution stay with the loader; finding/message presentation stays\n * with the SDK.\n */\nimport type { PmMaxVersionExceededMode } from \"./extension-types.js\";\n\n/** The two inclusive manifest version bounds pm evaluates at load time. */\nexport type PmVersionBoundKind = \"pm_min_version\" | \"pm_max_version\";\n\n/**\n * The outcome of evaluating a single manifest version bound against a pm version.\n *\n * - `absent`: the bound is not declared — nothing to enforce.\n * - `ok`: the bound is declared and satisfied by the current version.\n * - `invalid`: the declared bound is malformed (unparseable, or a range prefix on\n * `pm_max_version`); the loader treats the extension as incompatible and skips it.\n * - `unchecked`: the bound is well-formed but cannot be compared against the\n * current version (the current version is unknown or not comparable); the\n * extension still loads, with an advisory warning.\n * - `unmet`: the current version is older than the inclusive `pm_min_version`\n * lower bound; the loader skips the extension (only emitted for `pm_min_version`).\n * - `exceeded`: the current version is newer than the inclusive `pm_max_version`\n * upper bound and the exceeded mode is `block`; the loader skips the extension\n * (only emitted for `pm_max_version`).\n * - `exceeded_warn`: the current version is newer than `pm_max_version` but the\n * exceeded mode is `warn`, so the extension loads with an advisory warning\n * (only emitted for `pm_max_version`).\n */\nexport type PmVersionBoundStatus =\n | \"absent\"\n | \"ok\"\n | \"invalid\"\n | \"unchecked\"\n | \"unmet\"\n | \"exceeded\"\n | \"exceeded_warn\";\n\n/**\n * The structured result of evaluating one manifest version bound, consumed by the\n * loader (to format its `extension_pm_*_version_*` warning strings) and the SDK\n * (to build author-time compatibility findings).\n */\nexport interface PmVersionBoundEvaluation {\n /** Which bound this evaluation describes. */\n kind: PmVersionBoundKind;\n /** The classified outcome of comparing the bound against the current version. */\n status: PmVersionBoundStatus;\n /** Whether the bound permits the extension to load (`false` only for `invalid`/`unmet`/`exceeded`). */\n allowed: boolean;\n /** The declared bound value, verbatim; the empty string when the bound is absent. */\n required: string;\n /** The current version compared against, or `null` when it could not be resolved. */\n current: string | null;\n}\n\nfunction formatVersionBoundValue(value: unknown): string {\n return typeof value === \"string\" ? value : String(value);\n}\n\n/**\n * Parse a comparable release string into numeric segments, or `null` when it is\n * not an interpretable dotted-numeric version.\n *\n * Leniently strips a leading inclusive-minimum `>=` and an optional `v` prefix\n * (so `engines.pm`-style `\">=2026.5.31\"` and `\"v1.2.3\"` both parse), then drops\n * any build/pre-release suffix and keeps the leading dotted-numeric release.\n */\nexport function parseComparableVersion(value: string): number[] | null {\n const normalized = value.trim().replace(/^>=\\s*/, \"\").replace(/^v/i, \"\");\n const release = normalized.split(/[+-]/, 1)[0];\n if (!/^\\d+(?:[.-]\\d+)*$/.test(release)) {\n return null;\n }\n return release.split(/[.-]/).map((part) => Number(part));\n}\n\n/**\n * Compare two comparable version strings segment by segment.\n *\n * Returns `1` when `currentVersion` is greater, `-1` when it is smaller, `0` when\n * equal, and `null` when either side is not an interpretable version (so callers\n * can classify the comparison as `unchecked`). Missing trailing segments are\n * treated as `0`, so `1.2` and `1.2.0` compare equal.\n */\nexport function compareComparableVersions(currentVersion: string, otherVersion: string): number | null {\n const currentParts = parseComparableVersion(currentVersion);\n const otherParts = parseComparableVersion(otherVersion);\n if (!currentParts || !otherParts) {\n return null;\n }\n const width = Math.max(currentParts.length, otherParts.length);\n for (let index = 0; index < width; index += 1) {\n const current = currentParts[index] ?? 0;\n const other = otherParts[index] ?? 0;\n if (current > other) {\n return 1;\n }\n if (current < other) {\n return -1;\n }\n }\n return 0;\n}\n\n/**\n * Evaluate a manifest `pm_min_version` inclusive lower bound against the current\n * pm version.\n *\n * An omitted bound is `absent`; a blank, non-string, or unparseable bound is\n * `invalid`; an unknown or incomparable current version is `unchecked`; a current\n * version below the bound is `unmet`; otherwise the bound is satisfied (`ok`).\n * `currentVersion` is `null` when the loader could not resolve the running CLI\n * version.\n */\nexport function evaluatePmMinVersionBound(\n required: unknown,\n currentVersion: string | null,\n): PmVersionBoundEvaluation {\n if (required === undefined || required === null) {\n return { kind: \"pm_min_version\", status: \"absent\", allowed: true, required: \"\", current: currentVersion };\n }\n const declared = formatVersionBoundValue(required);\n if (typeof required !== \"string\" || declared.trim().length === 0) {\n return { kind: \"pm_min_version\", status: \"invalid\", allowed: false, required: declared, current: currentVersion };\n }\n if (!parseComparableVersion(declared)) {\n return { kind: \"pm_min_version\", status: \"invalid\", allowed: false, required: declared, current: currentVersion };\n }\n if (currentVersion === null) {\n return { kind: \"pm_min_version\", status: \"unchecked\", allowed: true, required: declared, current: null };\n }\n const comparison = compareComparableVersions(currentVersion, declared);\n if (comparison === null) {\n return { kind: \"pm_min_version\", status: \"unchecked\", allowed: true, required: declared, current: currentVersion };\n }\n if (comparison < 0) {\n return { kind: \"pm_min_version\", status: \"unmet\", allowed: false, required: declared, current: currentVersion };\n }\n return { kind: \"pm_min_version\", status: \"ok\", allowed: true, required: declared, current: currentVersion };\n}\n\n/**\n * Evaluate a manifest `pm_max_version` inclusive upper bound against the current\n * pm version.\n *\n * An omitted bound is `absent`. A blank or non-string bound is `invalid`. The\n * upper bound must be an exact version: a range prefix (`<`/`>`/`=`/`~`/`^`) is\n * rejected as `invalid`, because\n * {@link parseComparableVersion} leniently strips a leading `>=` for\n * `engines.pm` min-version compatibility and would otherwise turn a range-like\n * `\">=2026.6.1\"` into an inclusive max and wrongly block newer CLIs. An\n * unparseable bound is `invalid`; an unknown or incomparable current version is\n * `unchecked`; a current version above the bound is `exceeded` (or\n * `exceeded_warn` when `exceededMode` is `warn`, so the extension still loads\n * during a controlled upgrade window); otherwise the bound is satisfied (`ok`).\n */\nexport function evaluatePmMaxVersionBound(\n required: unknown,\n currentVersion: string | null,\n exceededMode: PmMaxVersionExceededMode,\n): PmVersionBoundEvaluation {\n if (required === undefined || required === null) {\n return { kind: \"pm_max_version\", status: \"absent\", allowed: true, required: \"\", current: currentVersion };\n }\n const declared = formatVersionBoundValue(required);\n if (typeof required !== \"string\" || declared.trim().length === 0) {\n return { kind: \"pm_max_version\", status: \"invalid\", allowed: false, required: declared, current: currentVersion };\n }\n if (/^[<>=~^]/.test(declared.trim()) || !parseComparableVersion(declared)) {\n return { kind: \"pm_max_version\", status: \"invalid\", allowed: false, required: declared, current: currentVersion };\n }\n if (currentVersion === null) {\n return { kind: \"pm_max_version\", status: \"unchecked\", allowed: true, required: declared, current: null };\n }\n const comparison = compareComparableVersions(currentVersion, declared);\n if (comparison === null) {\n return { kind: \"pm_max_version\", status: \"unchecked\", allowed: true, required: declared, current: currentVersion };\n }\n if (comparison > 0) {\n if (exceededMode === \"warn\") {\n return {\n kind: \"pm_max_version\",\n status: \"exceeded_warn\",\n allowed: true,\n required: declared,\n current: currentVersion,\n };\n }\n return { kind: \"pm_max_version\", status: \"exceeded\", allowed: false, required: declared, current: currentVersion };\n }\n return { kind: \"pm_max_version\", status: \"ok\", allowed: true, required: declared, current: currentVersion };\n}\n", "/**\n * @module core/extensions/extension-policy\n *\n * Implements extension runtime contracts and governance for Extension Policy.\n */\nimport {\n KNOWN_EXTENSION_POLICY_MODES,\n KNOWN_EXTENSION_POLICY_SURFACES,\n KNOWN_EXTENSION_SANDBOX_PROFILES,\n KNOWN_EXTENSION_TRUST_MODES,\n KNOWN_PM_MAX_VERSION_EXCEEDED_MODES,\n type ExtensionCapability,\n type ExtensionGovernancePolicy,\n type ExtensionLayer,\n type ExtensionPolicyMode,\n type ExtensionPolicyOverride,\n type ExtensionPolicySurface,\n type ExtensionSandboxProfile,\n type ExtensionTrustMode,\n type PmMaxVersionExceededMode,\n type PmMaxVersionExceededModeSetting,\n} from \"./extension-types.js\";\nimport { isKnownExtensionCapability } from \"./extension-capability-aliases.js\";\nimport { normalizeCommandName } from \"./extension-runtime-helpers.js\";\nimport type { PmSettings } from \"../../types/index.js\";\n\ninterface NormalizedExtensionPolicyOverride {\n name: string;\n disabled: boolean;\n requireTrusted: boolean;\n requireProvenance: boolean;\n sandboxProfile?: ExtensionSandboxProfile;\n allowedCapabilities: Set<string>;\n blockedCapabilities: Set<string>;\n allowedSurfaces: Set<string>;\n blockedSurfaces: Set<string>;\n allowedCommands: Set<string>;\n blockedCommands: Set<string>;\n allowedActions: Set<string>;\n blockedActions: Set<string>;\n allowedServices: Set<string>;\n blockedServices: Set<string>;\n}\n\n/** Concrete per-layer resolution of `pm_max_version_exceeded_mode` (default: block). */\nexport interface NormalizedPmMaxVersionExceededMode {\n global: PmMaxVersionExceededMode;\n project: PmMaxVersionExceededMode;\n}\n\n/**\n * Documents the normalized extension policy payload exchanged by command, SDK, and package integrations.\n */\nexport interface NormalizedExtensionPolicy {\n mode: ExtensionPolicyMode;\n trustMode: ExtensionTrustMode;\n pmMaxVersionExceededMode: NormalizedPmMaxVersionExceededMode;\n requireProvenance: boolean;\n trustedExtensions: Set<string>;\n defaultSandboxProfile: ExtensionSandboxProfile;\n allowedExtensions: Set<string>;\n blockedExtensions: Set<string>;\n allowedCapabilities: Set<string>;\n blockedCapabilities: Set<string>;\n allowedSurfaces: Set<string>;\n blockedSurfaces: Set<string>;\n allowedCommands: Set<string>;\n blockedCommands: Set<string>;\n allowedActions: Set<string>;\n blockedActions: Set<string>;\n allowedServices: Set<string>;\n blockedServices: Set<string>;\n overridesByName: Map<string, NormalizedExtensionPolicyOverride>;\n warnings: string[];\n}\n\n/**\n * Documents the policy extension ref payload exchanged by command, SDK, and package integrations.\n */\nexport interface PolicyExtensionRef {\n layer: ExtensionLayer;\n name: string;\n trusted?: boolean;\n provenanceVerified?: boolean;\n sandboxProfile?: ExtensionSandboxProfile;\n permissions?: Record<string, boolean | undefined>;\n}\n\nfunction normalizePolicyName(value: string | undefined): string {\n if (typeof value !== \"string\") {\n return \"\";\n }\n return value.trim().toLowerCase();\n}\n\nfunction normalizePolicyStringSet(values: readonly string[] | undefined): Set<string> {\n return new Set(\n (values ?? [])\n .map((value) => value.trim().toLowerCase())\n .filter((value) => value.length > 0),\n );\n}\n\nfunction normalizePolicySurfaceToken(value: string): string {\n const normalized = value.trim().toLowerCase();\n if (normalized.length === 0) {\n return \"\";\n }\n const segments = normalized\n .split(/[.:/]/)\n .map((segment) => segment.replace(/[\\s_-]+/g, \"\"))\n .filter((segment) => segment.length > 0);\n if (segments.length === 0) {\n return \"\";\n }\n if (segments.length === 1) {\n return segments[0];\n }\n return `${segments[0]}.${segments.slice(1).join(\"\")}`;\n}\n\nfunction normalizePolicySurfaceSet(values: readonly string[] | undefined): Set<string> {\n return new Set(\n (values ?? [])\n .map((value) => normalizePolicySurfaceToken(value))\n .filter((value) => value.length > 0),\n );\n}\n\nfunction normalizePolicyMode(value: string | undefined): ExtensionPolicyMode {\n const normalized = normalizePolicyName(value);\n if ((KNOWN_EXTENSION_POLICY_MODES as readonly string[]).includes(normalized)) {\n return normalized as ExtensionPolicyMode;\n }\n return \"off\";\n}\n\nfunction normalizePolicyTrustMode(value: string | undefined): ExtensionTrustMode {\n const normalized = normalizePolicyName(value);\n if ((KNOWN_EXTENSION_TRUST_MODES as readonly string[]).includes(normalized)) {\n return normalized as ExtensionTrustMode;\n }\n return \"off\";\n}\n\n/**\n * Implements normalize policy sandbox profile for the public runtime surface of this module.\n */\nexport function normalizePolicySandboxProfile(value: string | undefined): ExtensionSandboxProfile {\n const normalized = normalizePolicyName(value);\n if ((KNOWN_EXTENSION_SANDBOX_PROFILES as readonly string[]).includes(normalized)) {\n return normalized as ExtensionSandboxProfile;\n }\n return \"none\";\n}\n\nfunction normalizePmMaxVersionExceededModeValue(value: unknown): PmMaxVersionExceededMode | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n return (KNOWN_PM_MAX_VERSION_EXCEEDED_MODES as readonly string[]).includes(normalized)\n ? (normalized as PmMaxVersionExceededMode)\n : undefined;\n}\n\n/**\n * Resolve `extensions.policy.pm_max_version_exceeded_mode` to a concrete\n * per-layer mode map. Accepts a single mode string (applied to both layers) or\n * a `{ global?, project? }` override map; anything unset or unknown defaults to\n * the safe `\"block\"`.\n */\nexport function normalizePmMaxVersionExceededMode(\n value: PmMaxVersionExceededModeSetting | undefined,\n): NormalizedPmMaxVersionExceededMode {\n if (typeof value === \"string\") {\n const mode = normalizePmMaxVersionExceededModeValue(value) ?? \"block\";\n return { global: mode, project: mode };\n }\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n return {\n global: normalizePmMaxVersionExceededModeValue(value.global) ?? \"block\",\n project: normalizePmMaxVersionExceededModeValue(value.project) ?? \"block\",\n };\n }\n return { global: \"block\", project: \"block\" };\n}\n\nfunction serializePmMaxVersionExceededMode(\n mode: NormalizedPmMaxVersionExceededMode,\n): PmMaxVersionExceededModeSetting {\n return mode.global === mode.project ? mode.global : { global: mode.global, project: mode.project };\n}\n\nfunction toSortedList(values: Iterable<string>): string[] {\n return [...new Set(values)].sort((left, right) => left.localeCompare(right));\n}\n\nfunction buildExtensionPolicyOverride(\n rawOverride: ExtensionPolicyOverride,\n): { name: string; normalized: NormalizedExtensionPolicyOverride } | null {\n const name = normalizePolicyName(rawOverride.name);\n if (name.length === 0) {\n return null;\n }\n return {\n name,\n normalized: {\n name,\n disabled: rawOverride.disabled === true,\n requireTrusted: rawOverride.require_trusted === true,\n requireProvenance: rawOverride.require_provenance === true,\n sandboxProfile:\n rawOverride.sandbox_profile !== undefined\n ? normalizePolicySandboxProfile(rawOverride.sandbox_profile)\n : undefined,\n allowedCapabilities: normalizePolicyStringSet(rawOverride.allowed_capabilities),\n blockedCapabilities: normalizePolicyStringSet(rawOverride.blocked_capabilities),\n allowedSurfaces: normalizePolicySurfaceSet(rawOverride.allowed_surfaces),\n blockedSurfaces: normalizePolicySurfaceSet(rawOverride.blocked_surfaces),\n allowedCommands: normalizePolicyStringSet(rawOverride.allowed_commands),\n blockedCommands: normalizePolicyStringSet(rawOverride.blocked_commands),\n allowedActions: normalizePolicyStringSet(rawOverride.allowed_actions),\n blockedActions: normalizePolicyStringSet(rawOverride.blocked_actions),\n allowedServices: normalizePolicyStringSet(rawOverride.allowed_services),\n blockedServices: normalizePolicyStringSet(rawOverride.blocked_services),\n },\n };\n}\n\nfunction collectExtensionPolicyOverrides(\n rawOverrides: readonly ExtensionPolicyOverride[] | undefined,\n): Map<string, NormalizedExtensionPolicyOverride> {\n const overridesByName = new Map<string, NormalizedExtensionPolicyOverride>();\n for (const rawOverride of rawOverrides ?? []) {\n const built = buildExtensionPolicyOverride(rawOverride);\n if (built) {\n overridesByName.set(built.name, built.normalized);\n }\n }\n return overridesByName;\n}\n\n/**\n * Collect the deduplicated, alphabetically-sorted `extension_policy_unknown_*`\n * warnings for a normalized policy: every allow/block capability and surface\n * token — at the top level and inside each per-extension override — that is not a\n * recognized {@link ExtensionCapability} or known policy surface. Overrides are\n * walked in name order and the final list is re-sorted, so the result is stable\n * regardless of insertion order.\n */\nfunction collectExtensionPolicyWarnings(normalized: {\n allowedCapabilities: Set<string>;\n blockedCapabilities: Set<string>;\n allowedSurfaces: Set<string>;\n blockedSurfaces: Set<string>;\n overridesByName: Map<string, NormalizedExtensionPolicyOverride>;\n}): string[] {\n const warnings: string[] = [];\n const sortedOverrides = [...normalized.overridesByName.values()].sort((left, right) =>\n left.name.localeCompare(right.name),\n );\n for (const capability of toSortedList([...normalized.allowedCapabilities, ...normalized.blockedCapabilities])) {\n if (!isKnownExtensionCapability(capability)) {\n warnings.push(`extension_policy_unknown_capability:${capability}`);\n }\n }\n for (const override of sortedOverrides) {\n for (const capability of toSortedList([...override.allowedCapabilities, ...override.blockedCapabilities])) {\n if (!isKnownExtensionCapability(capability)) {\n warnings.push(`extension_policy_unknown_capability:${override.name}:${capability}`);\n }\n }\n }\n const knownSurfaces = new Set<string>(KNOWN_EXTENSION_POLICY_SURFACES);\n for (const surface of toSortedList([...normalized.allowedSurfaces, ...normalized.blockedSurfaces])) {\n if (!knownSurfaces.has(surface)) {\n warnings.push(`extension_policy_unknown_surface:${surface}`);\n }\n }\n for (const override of sortedOverrides) {\n for (const surface of toSortedList([...override.allowedSurfaces, ...override.blockedSurfaces])) {\n if (!knownSurfaces.has(surface)) {\n warnings.push(`extension_policy_unknown_surface:${override.name}:${surface}`);\n }\n }\n }\n return [...new Set(warnings)].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Normalize the raw `extensions.policy` settings block into the canonical\n * {@link NormalizedExtensionPolicy} used across loading, registration, and the\n * doctor surface: modes/trust/sandbox coerced to known values, every allow/block\n * list lower-cased and de-duplicated into a set, per-extension overrides indexed by\n * name, and unknown-capability/surface tokens surfaced as warnings. A missing\n * policy block resolves to the all-defaults policy (mode/trust `off`).\n */\nexport function normalizeExtensionPolicy(settings: PmSettings): NormalizedExtensionPolicy {\n const policy: Partial<ExtensionGovernancePolicy> = (settings.extensions?.policy as ExtensionGovernancePolicy | undefined) ?? {};\n const allowedCapabilities = normalizePolicyStringSet(policy.allowed_capabilities);\n const blockedCapabilities = normalizePolicyStringSet(policy.blocked_capabilities);\n const allowedSurfaces = normalizePolicySurfaceSet(policy.allowed_surfaces);\n const blockedSurfaces = normalizePolicySurfaceSet(policy.blocked_surfaces);\n const overridesByName = collectExtensionPolicyOverrides(policy.extension_overrides);\n return {\n mode: normalizePolicyMode(policy.mode),\n trustMode: normalizePolicyTrustMode(policy.trust_mode),\n pmMaxVersionExceededMode: normalizePmMaxVersionExceededMode(policy.pm_max_version_exceeded_mode),\n requireProvenance: policy.require_provenance === true,\n trustedExtensions: normalizePolicyStringSet(policy.trusted_extensions),\n defaultSandboxProfile: normalizePolicySandboxProfile(policy.default_sandbox_profile),\n allowedExtensions: normalizePolicyStringSet(policy.allowed_extensions),\n blockedExtensions: normalizePolicyStringSet(policy.blocked_extensions),\n allowedCapabilities,\n blockedCapabilities,\n allowedSurfaces,\n blockedSurfaces,\n allowedCommands: normalizePolicyStringSet(policy.allowed_commands),\n blockedCommands: normalizePolicyStringSet(policy.blocked_commands),\n allowedActions: normalizePolicyStringSet(policy.allowed_actions),\n blockedActions: normalizePolicyStringSet(policy.blocked_actions),\n allowedServices: normalizePolicyStringSet(policy.allowed_services),\n blockedServices: normalizePolicyStringSet(policy.blocked_services),\n overridesByName,\n warnings: collectExtensionPolicyWarnings({\n allowedCapabilities,\n blockedCapabilities,\n allowedSurfaces,\n blockedSurfaces,\n overridesByName,\n }),\n };\n}\n\n/**\n * Implements serialize extension policy for the public runtime surface of this module.\n */\nexport function serializeExtensionPolicy(policy: NormalizedExtensionPolicy): ExtensionGovernancePolicy {\n const overrides = [...policy.overridesByName.values()]\n .sort((left, right) => left.name.localeCompare(right.name))\n .map((override) => ({\n name: override.name,\n ...(override.disabled ? { disabled: true } : {}),\n ...(override.requireTrusted ? { require_trusted: true } : {}),\n ...(override.requireProvenance ? { require_provenance: true } : {}),\n ...(override.sandboxProfile ? { sandbox_profile: override.sandboxProfile } : {}),\n ...(override.allowedCapabilities.size > 0 ? { allowed_capabilities: toSortedList(override.allowedCapabilities) } : {}),\n ...(override.blockedCapabilities.size > 0 ? { blocked_capabilities: toSortedList(override.blockedCapabilities) } : {}),\n ...(override.allowedSurfaces.size > 0 ? { allowed_surfaces: toSortedList(override.allowedSurfaces) } : {}),\n ...(override.blockedSurfaces.size > 0 ? { blocked_surfaces: toSortedList(override.blockedSurfaces) } : {}),\n ...(override.allowedCommands.size > 0 ? { allowed_commands: toSortedList(override.allowedCommands) } : {}),\n ...(override.blockedCommands.size > 0 ? { blocked_commands: toSortedList(override.blockedCommands) } : {}),\n ...(override.allowedActions.size > 0 ? { allowed_actions: toSortedList(override.allowedActions) } : {}),\n ...(override.blockedActions.size > 0 ? { blocked_actions: toSortedList(override.blockedActions) } : {}),\n ...(override.allowedServices.size > 0 ? { allowed_services: toSortedList(override.allowedServices) } : {}),\n ...(override.blockedServices.size > 0 ? { blocked_services: toSortedList(override.blockedServices) } : {}),\n }));\n return {\n mode: policy.mode,\n trust_mode: policy.trustMode,\n pm_max_version_exceeded_mode: serializePmMaxVersionExceededMode(policy.pmMaxVersionExceededMode),\n require_provenance: policy.requireProvenance,\n trusted_extensions: toSortedList(policy.trustedExtensions),\n default_sandbox_profile: policy.defaultSandboxProfile,\n allowed_extensions: toSortedList(policy.allowedExtensions),\n blocked_extensions: toSortedList(policy.blockedExtensions),\n allowed_capabilities: toSortedList(policy.allowedCapabilities),\n blocked_capabilities: toSortedList(policy.blockedCapabilities),\n allowed_surfaces: toSortedList(policy.allowedSurfaces),\n blocked_surfaces: toSortedList(policy.blockedSurfaces),\n allowed_commands: toSortedList(policy.allowedCommands),\n blocked_commands: toSortedList(policy.blockedCommands),\n allowed_actions: toSortedList(policy.allowedActions),\n blocked_actions: toSortedList(policy.blockedActions),\n allowed_services: toSortedList(policy.allowedServices),\n blocked_services: toSortedList(policy.blockedServices),\n extension_overrides: overrides,\n };\n}\n\n/**\n * Implements hydrate extension policy for the public runtime surface of this module.\n */\nexport function hydrateExtensionPolicy(policy: ExtensionGovernancePolicy): NormalizedExtensionPolicy {\n const overridesByName = collectExtensionPolicyOverrides(policy.extension_overrides);\n return {\n mode: normalizePolicyMode(policy.mode),\n trustMode: normalizePolicyTrustMode(policy.trust_mode),\n pmMaxVersionExceededMode: normalizePmMaxVersionExceededMode(policy.pm_max_version_exceeded_mode),\n requireProvenance: policy.require_provenance === true,\n trustedExtensions: normalizePolicyStringSet(policy.trusted_extensions),\n defaultSandboxProfile: normalizePolicySandboxProfile(policy.default_sandbox_profile),\n allowedExtensions: normalizePolicyStringSet(policy.allowed_extensions),\n blockedExtensions: normalizePolicyStringSet(policy.blocked_extensions),\n allowedCapabilities: normalizePolicyStringSet(policy.allowed_capabilities),\n blockedCapabilities: normalizePolicyStringSet(policy.blocked_capabilities),\n allowedSurfaces: normalizePolicySurfaceSet(policy.allowed_surfaces),\n blockedSurfaces: normalizePolicySurfaceSet(policy.blocked_surfaces),\n allowedCommands: normalizePolicyStringSet(policy.allowed_commands),\n blockedCommands: normalizePolicyStringSet(policy.blocked_commands),\n allowedActions: normalizePolicyStringSet(policy.allowed_actions),\n blockedActions: normalizePolicyStringSet(policy.blocked_actions),\n allowedServices: normalizePolicyStringSet(policy.allowed_services),\n blockedServices: normalizePolicyStringSet(policy.blocked_services),\n overridesByName,\n warnings: [],\n };\n}\n\nfunction resolvePolicyOverride(\n policy: NormalizedExtensionPolicy,\n extensionName: string,\n): NormalizedExtensionPolicyOverride | null {\n return policy.overridesByName.get(normalizePolicyName(extensionName)) ?? null;\n}\n\nfunction evaluatePolicySet(\n allowed: Set<string>,\n blocked: Set<string>,\n value: string,\n notAllowlistedReason: string,\n blockedReason: string,\n): string | null {\n if (blocked.has(value)) {\n return blockedReason;\n }\n if (allowed.size > 0 && !allowed.has(value)) {\n return notAllowlistedReason;\n }\n return null;\n}\n\nfunction resolvePolicyCapabilityReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n capability: string,\n): string | null {\n const normalizedCapability = capability.trim().toLowerCase();\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedCapabilities.size > 0 ? override.allowedCapabilities : policy.allowedCapabilities;\n const blocked = new Set<string>([\n ...policy.blockedCapabilities,\n ...(override ? override.blockedCapabilities : []),\n ]);\n return evaluatePolicySet(\n allowed,\n blocked,\n normalizedCapability,\n \"capability_not_allowlisted\",\n \"capability_blocked\",\n );\n}\n\nfunction resolvePolicySurfaceReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n surface: ExtensionPolicySurface,\n): string | null {\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedSurfaces.size > 0 ? override.allowedSurfaces : policy.allowedSurfaces;\n const blocked = new Set<string>([\n ...policy.blockedSurfaces,\n ...(override ? override.blockedSurfaces : []),\n ]);\n return evaluatePolicySet(allowed, blocked, surface, \"surface_not_allowlisted\", \"surface_blocked\");\n}\n\nfunction resolvePolicyCommandReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n command: string,\n): string | null {\n const normalizedCommand = normalizeCommandName(command);\n if (normalizedCommand.length === 0) {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedCommands.size > 0 ? override.allowedCommands : policy.allowedCommands;\n const blocked = new Set<string>([\n ...policy.blockedCommands,\n ...(override ? override.blockedCommands : []),\n ]);\n return evaluatePolicySet(allowed, blocked, normalizedCommand, \"command_not_allowlisted\", \"command_blocked\");\n}\n\nfunction resolvePolicyActionReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n action: string,\n): string | null {\n const normalizedAction = normalizePolicyName(action).replace(/\\s+/g, \"-\");\n if (normalizedAction.length === 0) {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedActions.size > 0 ? override.allowedActions : policy.allowedActions;\n const blocked = new Set<string>([\n ...policy.blockedActions,\n ...(override ? override.blockedActions : []),\n ]);\n return evaluatePolicySet(allowed, blocked, normalizedAction, \"action_not_allowlisted\", \"action_blocked\");\n}\n\nfunction resolvePolicyServiceReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n service: string,\n): string | null {\n const normalizedService = normalizePolicyName(service);\n if (normalizedService.length === 0) {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedServices.size > 0 ? override.allowedServices : policy.allowedServices;\n const blocked = new Set<string>([\n ...policy.blockedServices,\n ...(override ? override.blockedServices : []),\n ]);\n return evaluatePolicySet(allowed, blocked, normalizedService, \"service_not_allowlisted\", \"service_blocked\");\n}\n\nfunction resolvePolicyExtensionReason(policy: NormalizedExtensionPolicy, extension: PolicyExtensionRef): string | null {\n const name = normalizePolicyName(extension.name);\n const override = resolvePolicyOverride(policy, extension.name);\n if (override?.disabled === true) {\n return \"extension_override_disabled\";\n }\n return evaluatePolicySet(\n policy.allowedExtensions,\n policy.blockedExtensions,\n name,\n \"extension_not_allowlisted\",\n \"extension_blocked\",\n );\n}\n\nfunction resolvePolicyTrustReason(policy: NormalizedExtensionPolicy, extension: PolicyExtensionRef): string | null {\n if (policy.trustMode === \"off\") {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const name = normalizePolicyName(extension.name);\n const trusted = extension.trusted === true;\n const provenanceVerified = extension.provenanceVerified === true;\n\n if (policy.trustedExtensions.size > 0 && !policy.trustedExtensions.has(name)) {\n return \"extension_not_trusted\";\n }\n if ((override?.requireTrusted === true || policy.trustMode === \"warn\" || policy.trustMode === \"enforce\") && !trusted) {\n return \"extension_untrusted\";\n }\n if ((policy.requireProvenance || override?.requireProvenance === true) && !provenanceVerified) {\n return \"provenance_missing_or_unverified\";\n }\n return null;\n}\n\nfunction resolvePolicySandboxReason(policy: NormalizedExtensionPolicy, extension: PolicyExtensionRef): string | null {\n if (policy.mode === \"off\") {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const profile = override?.sandboxProfile ?? extension.sandboxProfile ?? policy.defaultSandboxProfile;\n if (profile === \"none\") {\n return null;\n }\n const permissions = extension.permissions;\n if (!permissions) {\n return \"sandbox_permissions_missing\";\n }\n\n const hasPermission = (name: keyof typeof permissions): boolean => permissions[name] === true;\n if (profile === \"restricted\") {\n if (hasPermission(\"process_spawn\")) {\n return \"sandbox_restricted_disallows_process_spawn\";\n }\n if (hasPermission(\"env_write\")) {\n return \"sandbox_restricted_disallows_env_write\";\n }\n return null;\n }\n\n // Remaining profile branch is strict (none/restricted returned above).\n if (hasPermission(\"process_spawn\")) {\n return \"sandbox_strict_disallows_process_spawn\";\n }\n if (hasPermission(\"network\")) {\n return \"sandbox_strict_disallows_network\";\n }\n if (hasPermission(\"fs_write\")) {\n return \"sandbox_strict_disallows_fs_write\";\n }\n if (hasPermission(\"env_write\")) {\n return \"sandbox_strict_disallows_env_write\";\n }\n return null;\n}\n\nfunction buildPolicyWarning(\n mode: \"blocked\" | \"violation\",\n scope: \"extension\" | \"capability\" | \"registration\" | \"trust\",\n extension: PolicyExtensionRef,\n reason: string,\n details: Record<string, string> = {},\n): string {\n const tokens = Object.entries(details)\n .sort((left, right) => left[0].localeCompare(right[0]))\n .map(([key, value]) => `${key}=${value}`)\n .join(\":\");\n const suffix = tokens.length > 0 ? `:${tokens}` : \"\";\n return `extension_policy_${mode}_${scope}:${extension.layer}:${extension.name}:reason=${reason}${suffix}`;\n}\n\n/**\n * Evaluate the layer-level governance policy for one extension by combining the\n * extension allow/block decision, the trust-mode decision, and the sandbox-profile\n * decision. Reasons are weighed in extension → trust → sandbox order: the first\n * reason whose governing mode is `enforce` blocks the extension; otherwise the\n * first whose mode is `warn` surfaces a non-blocking violation warning; otherwise\n * the extension is allowed. The all-`off` short-circuit skips reason resolution\n * entirely.\n */\nexport function evaluateExtensionPolicyForExtension(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n): { allowed: boolean; warning: string | null } {\n if (policy.mode === \"off\" && policy.trustMode === \"off\") {\n return { allowed: true, warning: null };\n }\n const violations: Array<{\n reason: string;\n scope: \"extension\" | \"trust\";\n mode: ExtensionPolicyMode | ExtensionTrustMode;\n }> = [];\n const reason = resolvePolicyExtensionReason(policy, extension);\n if (reason) {\n violations.push({ reason, scope: \"extension\", mode: policy.mode });\n }\n const trustReason = resolvePolicyTrustReason(policy, extension);\n if (trustReason) {\n violations.push({ reason: trustReason, scope: \"trust\", mode: policy.trustMode });\n }\n const sandboxReason = resolvePolicySandboxReason(policy, extension);\n if (sandboxReason) {\n violations.push({ reason: sandboxReason, scope: \"extension\", mode: policy.mode });\n }\n const enforced = violations.find((violation) => violation.mode === \"enforce\");\n if (enforced) {\n return { allowed: false, warning: buildPolicyWarning(\"blocked\", enforced.scope, extension, enforced.reason) };\n }\n const warned = violations.find((violation) => violation.mode === \"warn\");\n if (warned) {\n return { allowed: true, warning: buildPolicyWarning(\"violation\", warned.scope, extension, warned.reason) };\n }\n return { allowed: true, warning: null };\n}\n\n/**\n * Implements evaluate extension policy for capability for the public runtime surface of this module.\n */\nexport function evaluateExtensionPolicyForCapability(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n capability: string,\n): { allowed: boolean; warning: string | null } {\n if (policy.mode === \"off\") {\n return { allowed: true, warning: null };\n }\n const reason = resolvePolicyCapabilityReason(policy, extension, capability);\n if (!reason) {\n return { allowed: true, warning: null };\n }\n return {\n allowed: policy.mode === \"warn\",\n warning: buildPolicyWarning(\n policy.mode === \"warn\" ? \"violation\" : \"blocked\",\n \"capability\",\n extension,\n reason,\n { capability: capability.trim().toLowerCase() },\n ),\n };\n}\n\n/** Optional command/action/service identifiers carried by a surface registration. */\ninterface RegistrationPolicyDetails {\n command?: string;\n action?: string;\n service?: string;\n}\n\n/**\n * Resolve the first applicable registration-policy reason for a surface\n * registration, weighed in capability → surface → command → action → service\n * precedence. Returns `null` when the registration violates no allow/block rule.\n */\nfunction resolveRegistrationPolicyReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n surface: ExtensionPolicySurface,\n capability: ExtensionCapability | undefined,\n detail: RegistrationPolicyDetails,\n): string | null {\n const capabilityReason =\n typeof capability === \"string\" ? resolvePolicyCapabilityReason(policy, extension, capability) : null;\n const surfaceReason = resolvePolicySurfaceReason(policy, extension, surface);\n const commandReason = detail.command ? resolvePolicyCommandReason(policy, extension, detail.command) : null;\n const actionReason = detail.action ? resolvePolicyActionReason(policy, extension, detail.action) : null;\n const serviceReason = detail.service ? resolvePolicyServiceReason(policy, extension, detail.service) : null;\n return capabilityReason ?? surfaceReason ?? commandReason ?? actionReason ?? serviceReason;\n}\n\n/**\n * Build the detail token map attached to a registration-policy warning: the\n * normalized method and surface plus whichever of capability/command/action/service\n * the registration carries. {@link buildPolicyWarning} sorts and joins these into\n * the warning's `key=value` suffix.\n */\nfunction buildRegistrationPolicyWarningDetails(\n method: string,\n surface: ExtensionPolicySurface,\n capability: ExtensionCapability | undefined,\n detail: RegistrationPolicyDetails,\n): Record<string, string> {\n const warningDetails: Record<string, string> = {\n method: normalizePolicyName(method).replace(/\\s+/g, \"_\"),\n surface,\n };\n if (capability) {\n warningDetails.capability = capability;\n }\n if (detail.command) {\n warningDetails.command = normalizeCommandName(detail.command);\n }\n if (detail.action) {\n warningDetails.action = normalizePolicyName(detail.action).replace(/\\s+/g, \"-\");\n }\n if (detail.service) {\n warningDetails.service = normalizePolicyName(detail.service);\n }\n return warningDetails;\n}\n\n/**\n * Evaluate the governance policy for a single capability/surface registration an\n * extension performs during activation. When `mode` is `off` the registration is\n * always allowed; otherwise the first allow/block reason (capability → surface →\n * command → action → service) blocks the registration under `enforce` or surfaces\n * a non-blocking violation warning under `warn`.\n */\nexport function evaluateExtensionPolicyForRegistration(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n surface: ExtensionPolicySurface,\n method: string,\n capability?: ExtensionCapability,\n details?: {\n command?: string;\n action?: string;\n service?: string;\n },\n): { allowed: boolean; warning: string | null } {\n if (policy.mode === \"off\") {\n return { allowed: true, warning: null };\n }\n const detail = details ?? {};\n const reason = resolveRegistrationPolicyReason(policy, extension, surface, capability, detail);\n if (!reason) {\n return { allowed: true, warning: null };\n }\n const warning = buildPolicyWarning(\n policy.mode === \"warn\" ? \"violation\" : \"blocked\",\n \"registration\",\n extension,\n reason,\n buildRegistrationPolicyWarningDetails(method, surface, capability, detail),\n );\n return {\n allowed: policy.mode === \"warn\",\n warning,\n };\n}\n", "/**\n * @module core/extensions/capability-usage\n *\n * Reconciles the capabilities an extension manifest *declares* against the\n * capabilities it actually *exercises* during activation.\n *\n * The loader already enforces the opposite direction — registering a surface\n * whose capability is absent from `manifest.capabilities` throws an\n * `extension_capability_missing` activation failure. This module closes the\n * least-privilege loop by detecting capabilities a manifest declares but never\n * registers against, so package authors can trim manifests to the minimum\n * grant. Every declared-but-unused capability is an over-broad permission a\n * reviewer would otherwise have to catch by hand.\n */\nimport type { ExtensionActivationResult, ExtensionCapability, ExtensionLayer } from \"./extension-types.js\";\nimport { normalizeKnownExtensionCapability } from \"./extension-capability-aliases.js\";\n\n/**\n * Canonical map from each known extension capability to the human-readable\n * registration surfaces that exercise it.\n *\n * The `satisfies Record<ExtensionCapability, ...>` guard makes this exhaustive\n * at compile time: adding a capability to `KNOWN_EXTENSION_CAPABILITIES`\n * without giving it a registration surface here fails the build, which prevents\n * a capability that has *no* surface from being perpetually flagged as unused.\n */\nexport const EXTENSION_CAPABILITY_REGISTRATION_SURFACES = {\n commands: [\"registerCommand\", \"command override\", \"command handler\"],\n renderers: [\"registerRenderer\"],\n hooks: [\"hooks.beforeCommand\", \"hooks.afterCommand\", \"hooks.onWrite\", \"hooks.onRead\", \"hooks.onIndex\"],\n schema: [\"registerFlags\", \"registerItemFields\", \"registerItemTypes\", \"registerMigration\", \"registerProfile\"],\n importers: [\"registerImporter\", \"registerExporter\"],\n search: [\"registerSearchProvider\", \"registerVectorStoreAdapter\"],\n parser: [\"registerParser\"],\n preflight: [\"registerPreflight\"],\n services: [\"registerService\"],\n} as const satisfies Record<ExtensionCapability, readonly string[]>;\n\n/**\n * Per-extension reconciliation of declared versus exercised capabilities.\n */\nexport interface ExtensionCapabilityUsageReconciliation {\n /** Layer the extension was loaded from (`global` or `project`). */\n layer: ExtensionLayer;\n /** Extension name as it appears in the manifest. */\n name: string;\n /** Known capabilities declared in the manifest, sorted and de-duplicated. */\n declared: ExtensionCapability[];\n /** Known capabilities the extension actually registered against, sorted. */\n used: ExtensionCapability[];\n /** Declared capabilities with no matching registration (least-privilege gap). */\n unused: ExtensionCapability[];\n}\n\n/**\n * Options for {@link collectUsedExtensionCapabilities}.\n */\nexport interface CollectUsedExtensionCapabilitiesOptions {\n /**\n * Restrict the result to a single extension by name. Names are matched\n * case-insensitively after trimming. Omit to union across every extension in\n * the activation result.\n */\n extensionName?: string;\n /**\n * Restrict the result to a set of extension names. This preserves the\n * single-name option while allowing package aliases that activate multiple\n * extensions to summarize their combined capability surface.\n */\n extensionNames?: readonly string[];\n}\n\n// `layer` is a closed enum (`\"global\" | \"project\"`) that never contains a\n// colon, so the first colon always separates the layer from the (possibly\n// colon-bearing) name — making the key collision-proof without serialization.\nconst USAGE_KEY_SEPARATOR = \":\";\n\nfunction usageKey(layer: ExtensionLayer, name: string): string {\n return `${layer}${USAGE_KEY_SEPARATOR}${normalizeExtensionName(name)}`;\n}\n\nfunction usageKeyName(key: string): string {\n return key.slice(key.indexOf(USAGE_KEY_SEPARATOR) + 1);\n}\n\n/**\n * Canonical extension-name normalization (trim + lowercase) used to match an\n * `extensionName` filter against a registration's stored `name`.\n *\n * Activation stores `extension.name` verbatim — the synthetic test-activation\n * path (`activateExtensionForTest`) never trims it — so any helper that filters\n * by extension name must normalize both sides with this function to stay\n * consistent, including {@link ../extensions/activation-summary.js#describeExtensionActivation}.\n */\nexport function normalizeExtensionName(name: string): string {\n return name.trim().toLowerCase();\n}\n\nfunction normalizeDeclaredCapabilities(capabilities: readonly string[] | undefined): ExtensionCapability[] {\n if (!Array.isArray(capabilities)) {\n return [];\n }\n const known = new Set<ExtensionCapability>();\n for (const capability of capabilities) {\n // Unknown capabilities are reported by the separate unknown-capability\n // diagnostic; reconciling them here would double-report a typo as \"unused\".\n const normalized = normalizeKnownExtensionCapability(capability);\n if (normalized !== null) {\n known.add(normalized);\n }\n }\n return [...known].sort((left, right) => left.localeCompare(right));\n}\n\nfunction attributeCapabilityUsage(activation: ExtensionActivationResult): Map<string, Set<ExtensionCapability>> {\n const usage = new Map<string, Set<ExtensionCapability>>();\n const record = (\n entries: ReadonlyArray<{ layer: ExtensionLayer; name: string }>,\n capability: ExtensionCapability,\n ): void => {\n for (const entry of entries) {\n const key = usageKey(entry.layer, entry.name);\n let exercised = usage.get(key);\n if (exercised === undefined) {\n exercised = new Set<ExtensionCapability>();\n usage.set(key, exercised);\n }\n exercised.add(capability);\n }\n };\n const { registrations, commands, parsers, preflight, services, renderers, hooks } = activation;\n record(registrations.commands, \"commands\");\n record(commands.overrides, \"commands\");\n record(commands.handlers, \"commands\");\n record(registrations.flags, \"schema\");\n record(registrations.item_fields, \"schema\");\n record(registrations.item_types, \"schema\");\n record(registrations.migrations, \"schema\");\n record(registrations.profiles, \"schema\");\n record(registrations.importers, \"importers\");\n record(registrations.exporters, \"importers\");\n record(registrations.search_providers, \"search\");\n record(registrations.vector_store_adapters, \"search\");\n record(parsers.overrides, \"parser\");\n record(preflight.overrides, \"preflight\");\n record(services.overrides, \"services\");\n record(renderers.overrides, \"renderers\");\n record(hooks.beforeCommand, \"hooks\");\n record(hooks.afterCommand, \"hooks\");\n record(hooks.onWrite, \"hooks\");\n record(hooks.onRead, \"hooks\");\n record(hooks.onIndex, \"hooks\");\n return usage;\n}\n\n/**\n * Collect the known capabilities exercised across an activation result.\n *\n * Without {@link CollectUsedExtensionCapabilitiesOptions.extensionName} the\n * result unions every extension in the activation; with it, only the matching\n * extension's registrations contribute (across both layers).\n */\nexport function collectUsedExtensionCapabilities(\n activation: ExtensionActivationResult,\n options: CollectUsedExtensionCapabilitiesOptions = {},\n): ExtensionCapability[] {\n const usage = attributeCapabilityUsage(activation);\n const filters = new Set<string>();\n if (options.extensionName !== undefined) {\n filters.add(normalizeExtensionName(options.extensionName));\n }\n for (const name of options.extensionNames ?? []) {\n filters.add(normalizeExtensionName(name));\n }\n const used = new Set<ExtensionCapability>();\n for (const [key, capabilities] of usage) {\n if (filters.size > 0 && !filters.has(usageKeyName(key))) {\n continue;\n }\n for (const capability of capabilities) {\n used.add(capability);\n }\n }\n return [...used].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Reconcile each loaded extension's declared capabilities against what it\n * exercised during activation.\n *\n * Extensions with no known declared capabilities are skipped — there is nothing\n * to reconcile. The returned entries preserve every reconcilable extension even\n * when `unused` is empty so callers can report fully-minimal manifests too.\n */\nexport function reconcileExtensionCapabilityUsage(\n loaded: ReadonlyArray<{ layer: ExtensionLayer; name: string; capabilities?: readonly string[] }>,\n activation: ExtensionActivationResult,\n): ExtensionCapabilityUsageReconciliation[] {\n const usage = attributeCapabilityUsage(activation);\n const reconciliations: ExtensionCapabilityUsageReconciliation[] = [];\n for (const extension of loaded) {\n const declared = normalizeDeclaredCapabilities(extension.capabilities);\n if (declared.length === 0) {\n continue;\n }\n const exercised = usage.get(usageKey(extension.layer, extension.name)) ?? new Set<ExtensionCapability>();\n const used = [...exercised].sort((left, right) => left.localeCompare(right));\n const unused = declared.filter((capability) => !exercised.has(capability));\n reconciliations.push({ layer: extension.layer, name: extension.name, declared, used, unused });\n }\n return reconciliations;\n}\n", "/**\n * @module core/schema/runtime-schema\n *\n * Resolves configurable schema, fields, statuses, and workflows for Runtime Schema.\n */\nimport path from \"node:path\";\nimport { pathExists, readFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { DEFAULT_STATUS_DEFINITIONS, DEFAULT_WORKFLOW_DEFINITION } from \"../shared/constants.js\";\nimport {\n RUNTIME_FIELD_COMMAND_VALUES,\n RUNTIME_FIELD_TYPE_VALUES,\n RUNTIME_STATUS_ROLE_VALUES,\n RUNTIME_UNKNOWN_FIELD_POLICY_VALUES,\n STATUS_VALUES,\n} from \"../../types/index.js\";\nimport type {\n ItemTypeDefinition,\n RuntimeFieldCommand,\n RuntimeFieldDefinition,\n RuntimeFieldType,\n RuntimeSchemaSettings,\n RuntimeStatusDefinition,\n RuntimeStatusRole,\n RuntimeWorkflowDefinition,\n TypeWorkflowDefinition,\n} from \"../../types/index.js\";\n\nexport type { RuntimeFieldCommand } from \"../../types/index.js\";\n\nexport const DEFAULT_RUNTIME_SCHEMA_FILE_PATHS = Object.freeze({\n types: \"schema/types.json\",\n statuses: \"schema/statuses.json\",\n fields: \"schema/fields.json\",\n workflows: \"schema/workflows.json\",\n});\n\n// Default lifecycle status model and workflow role mapping live in\n// src/core/shared/constants.ts as the single source of truth (also referenced\n// by SETTINGS_DEFAULTS). Re-exported here under the historical names.\nexport const DEFAULT_RUNTIME_WORKFLOW: RuntimeWorkflowDefinition = DEFAULT_WORKFLOW_DEFINITION;\n\nexport const DEFAULT_RUNTIME_STATUS_DEFINITIONS: ReadonlyArray<RuntimeStatusDefinition> = DEFAULT_STATUS_DEFINITIONS;\n\nconst DEFAULT_RUNTIME_FIELD_COMMANDS: RuntimeFieldCommand[] = [\"create\", \"update\"];\n\n/**\n * Documents the runtime status definition resolved payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeStatusDefinitionResolved {\n id: string;\n aliases: string[];\n roles: RuntimeStatusRole[];\n description?: string;\n order: number;\n}\n\n/**\n * Documents the runtime field definition resolved payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeFieldDefinitionResolved {\n key: string;\n metadata_key: string;\n cli_flag: string;\n cli_aliases: string[];\n description?: string;\n type: RuntimeFieldType;\n commands: RuntimeFieldCommand[];\n repeatable: boolean;\n required: boolean;\n required_on_create: boolean;\n required_types: string[];\n allow_unset: boolean;\n}\n\n/**\n * Documents the runtime status registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeStatusRegistry {\n definitions: RuntimeStatusDefinitionResolved[];\n by_id: Map<string, RuntimeStatusDefinitionResolved>;\n alias_to_id: Map<string, string>;\n terminal_statuses: Set<string>;\n terminal_done_statuses: Set<string>;\n terminal_canceled_statuses: Set<string>;\n active_statuses: Set<string>;\n blocked_statuses: Set<string>;\n draft_statuses: Set<string>;\n open_status: string;\n close_status: string;\n canceled_status: string;\n}\n\n/**\n * Documents the runtime field registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeFieldRegistry {\n definitions: RuntimeFieldDefinitionResolved[];\n by_key: Map<string, RuntimeFieldDefinitionResolved>;\n by_cli_token: Map<string, RuntimeFieldDefinitionResolved>;\n command_to_fields: Map<RuntimeFieldCommand, RuntimeFieldDefinitionResolved[]>;\n}\n\n/**\n * Documents the runtime schema file bootstrap result payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeSchemaFileBootstrapResult {\n created_paths: string[];\n}\n\n/**\n * Documents the loaded runtime schema sections payload exchanged by command, SDK, and package integrations.\n */\nexport interface LoadedRuntimeSchemaSections {\n schema: RuntimeSchemaSettings;\n type_definitions_from_file: ItemTypeDefinition[] | undefined;\n warnings: string[];\n created_paths: string[];\n}\n\nconst RUNTIME_STATUS_ROLE_SET = new Set<string>(RUNTIME_STATUS_ROLE_VALUES);\nconst RUNTIME_FIELD_TYPE_SET = new Set<string>(RUNTIME_FIELD_TYPE_VALUES);\nconst RUNTIME_FIELD_COMMAND_SET = new Set<string>(RUNTIME_FIELD_COMMAND_VALUES);\nconst RUNTIME_UNKNOWN_FIELD_POLICY_SET = new Set<string>(RUNTIME_UNKNOWN_FIELD_POLICY_VALUES);\n\nfunction normalizeStringList(values: string[] | undefined): string[] {\n const candidates = Array.isArray(values) ? values : [];\n return [...new Set(candidates.map((value) => (typeof value === \"string\" ? value.trim() : \"\")).filter((value) => value.length > 0))]\n .sort((left, right) => left.localeCompare(right));\n}\n\nfunction normalizeStatusToken(value: unknown): string {\n return typeof value === \"string\" ? value.trim().toLowerCase().replaceAll(/[\\s-]+/g, \"_\") : \"\";\n}\n\nfunction normalizeStatusId(value: unknown): string | undefined {\n if (typeof value !== \"string\" || value.length === 0) {\n return undefined;\n }\n const normalized = normalizeStatusToken(value);\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction stripFlagPrefix(value: string): string {\n return value.startsWith(\"--\") ? value.slice(2) : value;\n}\n\nfunction normalizeCliToken(value: unknown): string {\n return typeof value === \"string\" ? stripFlagPrefix(value.trim().toLowerCase().replaceAll(/[\\s_]+/g, \"-\")) : \"\";\n}\n\nfunction keyToDefaultCliFlag(value: string): string {\n return value.replaceAll(\"_\", \"-\");\n}\n\nfunction toCamelCase(input: string): string {\n const segments = input\n .replaceAll(/[^A-Za-z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter((segment) => segment.length > 0)\n .map((segment) => segment.toLowerCase());\n if (segments.length === 0) {\n return input;\n }\n const [first, ...rest] = segments;\n return `${first}${rest.map((segment) => `${segment.slice(0, 1).toUpperCase()}${segment.slice(1)}`).join(\"\")}`;\n}\n\nfunction normalizeRuntimeStatusDefinition(\n definition: RuntimeStatusDefinition,\n fallbackOrder: number,\n): RuntimeStatusDefinitionResolved | null {\n const id = normalizeStatusId(definition.id);\n if (!id) {\n return null;\n }\n const aliases = normalizeStringList(definition.aliases).map((value) => normalizeStatusToken(value)).filter((value) => value !== id);\n const roles = normalizeStringList(definition.roles).filter((value): value is RuntimeStatusRole => RUNTIME_STATUS_ROLE_SET.has(value));\n const description = definition.description?.trim();\n const order = typeof definition.order === \"number\" && Number.isFinite(definition.order) ? definition.order : fallbackOrder;\n return {\n id,\n aliases,\n roles,\n description: description && description.length > 0 ? description : undefined,\n order,\n };\n}\n\nfunction normalizeRuntimeWorkflow(workflow: RuntimeWorkflowDefinition | undefined): RuntimeWorkflowDefinition {\n return {\n draft_status: normalizeStatusId(workflow?.draft_status),\n open_status: normalizeStatusId(workflow?.open_status),\n in_progress_status: normalizeStatusId(workflow?.in_progress_status),\n blocked_status: normalizeStatusId(workflow?.blocked_status),\n close_status: normalizeStatusId(workflow?.close_status),\n canceled_status: normalizeStatusId(workflow?.canceled_status),\n };\n}\n\ninterface TypeWorkflowAccumulatorRecord {\n type: string;\n pairs: [string, string][];\n denyAll: boolean;\n}\n\nfunction appendTypeWorkflowPair(record: TypeWorkflowAccumulatorRecord, pair: unknown): void {\n if (!Array.isArray(pair) || pair.length !== 2) {\n return;\n }\n const from = normalizeStatusToken(pair[0]);\n const to = normalizeStatusToken(pair[1]);\n if (from.length === 0 || to.length === 0) {\n return;\n }\n if (record.pairs.some((candidate) => candidate[0] === from && candidate[1] === to)) {\n return;\n }\n record.pairs.push([from, to]);\n}\n\nfunction normalizedTypeWorkflowEntry(\n entry: TypeWorkflowDefinition,\n): { typeKey: string; record: TypeWorkflowAccumulatorRecord } | null {\n const rawType = typeof entry?.type === \"string\" ? entry.type.trim() : \"\";\n if (rawType.length === 0 || !Array.isArray(entry?.allowed_transitions)) {\n return null;\n }\n const record: TypeWorkflowAccumulatorRecord = { type: rawType, pairs: [], denyAll: entry.allowed_transitions.length === 0 };\n for (const pair of entry.allowed_transitions) {\n appendTypeWorkflowPair(record, pair);\n }\n return { typeKey: rawType.toLowerCase(), record };\n}\n\nfunction normalizeTypeWorkflowDefinitions(\n workflows: TypeWorkflowDefinition[] | undefined,\n): TypeWorkflowDefinition[] | undefined {\n if (!Array.isArray(workflows) || workflows.length === 0) {\n return undefined;\n }\n // Keep the raw (trimmed) type name so it round-trips verbatim; comparison is\n // case-insensitive downstream (resolveTypeWorkflows lower-cases). from/to\n // status tokens use the same normalization rules as runtime statuses.\n //\n // An EXPLICIT empty `allowed_transitions: []` is a deliberate DENY-ALL rule and\n // MUST survive normalization (it must NOT collapse to \"no entry\", which would\n // leave the type unrestricted). But a NON-empty array whose every pair is\n // malformed (e.g. a 3-element tuple typo) must be DROPPED like other malformed\n // schema-file content, NOT silently turned into a deny-all rule — otherwise a\n // typo would start failing every update for that type under strict enforcement.\n const byTypeKey = new Map<string, TypeWorkflowAccumulatorRecord>();\n for (const entry of workflows) {\n const normalized = normalizedTypeWorkflowEntry(entry);\n if (normalized === null) {\n continue;\n }\n const record = byTypeKey.get(normalized.typeKey) ?? normalized.record;\n record.denyAll ||= normalized.record.denyAll;\n for (const pair of normalized.record.pairs) {\n appendTypeWorkflowPair(record, pair);\n }\n byTypeKey.set(normalized.typeKey, record);\n }\n const normalized: TypeWorkflowDefinition[] = [];\n for (const record of byTypeKey.values()) {\n // Keep when there is at least one valid transition OR an explicit deny-all was\n // declared; drop nonempty-but-all-malformed entries (treated as typos).\n if (record.pairs.length > 0 || record.denyAll) {\n normalized.push({ type: record.type, allowed_transitions: record.pairs });\n }\n }\n normalized.sort((left, right) => left.type.localeCompare(right.type));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeRuntimeFieldDefinition(definition: RuntimeFieldDefinition): RuntimeFieldDefinitionResolved | null {\n const key = normalizeStatusToken(definition.key ?? \"\");\n if (!key) {\n return null;\n }\n const metadataKey = normalizeStatusToken(definition.metadata_key ?? definition.front_matter_key ?? key);\n const cliFlag = normalizeCliToken(definition.cli_flag ?? keyToDefaultCliFlag(key));\n if (!cliFlag) {\n return null;\n }\n const cliAliases = normalizeStringList(definition.cli_aliases)\n .map((value) => normalizeCliToken(value))\n .filter((value) => value.length > 0 && value !== cliFlag);\n const typeCandidate = typeof definition.type === \"string\" ? definition.type.trim().toLowerCase() : \"string\";\n const type = RUNTIME_FIELD_TYPE_SET.has(typeCandidate) ? (typeCandidate as RuntimeFieldType) : \"string\";\n const commands = (() => {\n const normalized = normalizeStringList(definition.commands).filter((value): value is RuntimeFieldCommand =>\n RUNTIME_FIELD_COMMAND_SET.has(value),\n );\n if (normalized.length > 0) {\n return normalized;\n }\n return [...DEFAULT_RUNTIME_FIELD_COMMANDS];\n })();\n const description = definition.description?.trim();\n const requiredTypes = normalizeStringList(definition.required_types);\n return {\n key,\n metadata_key: metadataKey,\n cli_flag: cliFlag,\n cli_aliases: cliAliases,\n description: description && description.length > 0 ? description : undefined,\n type,\n commands,\n repeatable: definition.repeatable === true || type === \"string_array\",\n required: definition.required === true,\n required_on_create: definition.required_on_create === true,\n required_types: requiredTypes,\n allow_unset: definition.allow_unset !== false,\n };\n}\n\nfunction normalizeRuntimeStatusDefinitions(\n statusesSource: ReadonlyArray<RuntimeStatusDefinition>,\n): RuntimeStatusDefinitionResolved[] {\n const dedupedById = new Map<string, RuntimeStatusDefinitionResolved>();\n for (const [index, definition] of statusesSource.entries()) {\n const normalized = normalizeRuntimeStatusDefinition(definition, index);\n if (normalized) {\n dedupedById.set(normalized.id, normalized);\n }\n }\n const values = sortRuntimeStatusDefinitions([...dedupedById.values()]);\n if (values.length > 0) {\n return values;\n }\n return sortRuntimeStatusDefinitions(DEFAULT_RUNTIME_STATUS_DEFINITIONS.map((definition, index) =>\n normalizeRuntimeStatusDefinition(definition, index),\n ).filter((definition): definition is RuntimeStatusDefinitionResolved => definition !== null));\n}\n\nfunction sortRuntimeStatusDefinitions(\n definitions: RuntimeStatusDefinitionResolved[],\n): RuntimeStatusDefinitionResolved[] {\n return definitions.sort((left, right) =>\n left.order === right.order ? left.id.localeCompare(right.id) : left.order - right.order,\n );\n}\n\nfunction normalizeRuntimeFieldDefinitions(\n fieldsSource: ReadonlyArray<RuntimeFieldDefinition> | undefined,\n): RuntimeFieldDefinitionResolved[] {\n const dedupedByKey = new Map<string, RuntimeFieldDefinitionResolved>();\n for (const definition of fieldsSource ?? []) {\n const normalized = normalizeRuntimeFieldDefinition(definition);\n if (normalized) {\n dedupedByKey.set(normalized.key, normalized);\n }\n }\n return [...dedupedByKey.values()].sort((left, right) => left.key.localeCompare(right.key));\n}\n\nfunction serializeRuntimeStatusDefinition(definition: RuntimeStatusDefinitionResolved): RuntimeStatusDefinition {\n return {\n id: definition.id,\n aliases: definition.aliases.length > 0 ? [...definition.aliases] : undefined,\n roles: definition.roles.length > 0 ? [...definition.roles] : undefined,\n description: definition.description,\n order: definition.order,\n };\n}\n\nfunction serializeRuntimeFieldDefinition(definition: RuntimeFieldDefinitionResolved): RuntimeFieldDefinition {\n return {\n key: definition.key,\n metadata_key: definition.metadata_key !== definition.key ? definition.metadata_key : undefined,\n cli_flag: definition.cli_flag !== keyToDefaultCliFlag(definition.key) ? definition.cli_flag : undefined,\n cli_aliases: definition.cli_aliases.length > 0 ? [...definition.cli_aliases] : undefined,\n description: definition.description,\n type: definition.type,\n commands: [...definition.commands],\n repeatable: definition.repeatable === true ? true : undefined,\n required: definition.required === true ? true : undefined,\n required_on_create: definition.required_on_create === true ? true : undefined,\n required_types: definition.required_types.length > 0 ? [...definition.required_types] : undefined,\n allow_unset: definition.allow_unset === false ? false : undefined,\n };\n}\n\nfunction normalizeUnknownFieldPolicy(\n policy: RuntimeSchemaSettings[\"unknown_field_policy\"] | undefined,\n): RuntimeSchemaSettings[\"unknown_field_policy\"] {\n const candidate = typeof policy === \"string\" ? policy.trim().toLowerCase() : \"allow\";\n return RUNTIME_UNKNOWN_FIELD_POLICY_SET.has(candidate)\n ? candidate as RuntimeSchemaSettings[\"unknown_field_policy\"]\n : \"allow\";\n}\n\n/**\n * Implements normalize runtime schema settings for the public runtime surface of this module.\n */\nexport function normalizeRuntimeSchemaSettings(schema: Partial<RuntimeSchemaSettings> | undefined): RuntimeSchemaSettings {\n const files = {\n ...DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,\n ...schema?.files,\n };\n const statusesSource = schema?.statuses && schema.statuses.length > 0 ? schema.statuses : DEFAULT_RUNTIME_STATUS_DEFINITIONS;\n const normalizedStatuses = normalizeRuntimeStatusDefinitions(statusesSource);\n const normalizedFields = normalizeRuntimeFieldDefinitions(schema?.fields);\n return {\n version: typeof schema?.version === \"number\" && Number.isFinite(schema.version) ? Math.floor(schema.version) : 1,\n files,\n statuses: normalizedStatuses.map(serializeRuntimeStatusDefinition),\n fields: normalizedFields.map(serializeRuntimeFieldDefinition),\n workflow: {\n ...DEFAULT_RUNTIME_WORKFLOW,\n ...normalizeRuntimeWorkflow(schema?.workflow),\n },\n type_workflows: normalizeTypeWorkflowDefinitions(schema?.type_workflows),\n unknown_field_policy: normalizeUnknownFieldPolicy(schema?.unknown_field_policy),\n };\n}\n\nfunction serializeJson(value: unknown): string {\n return `${JSON.stringify(value, null, 2)}\\n`;\n}\n\nfunction buildTypesFileSeed(): unknown {\n return {\n definitions: [],\n };\n}\n\nfunction buildStatusesFileSeed(): unknown {\n return {\n statuses: DEFAULT_RUNTIME_STATUS_DEFINITIONS,\n };\n}\n\nfunction buildFieldsFileSeed(): unknown {\n return {\n fields: [],\n };\n}\n\nfunction buildWorkflowsFileSeed(): unknown {\n return {\n workflow: DEFAULT_RUNTIME_WORKFLOW,\n };\n}\n\nfunction parseOptionalJson(raw: string, warningKey: string, warnings: string[]): unknown | undefined {\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n warnings.push(warningKey);\n return undefined;\n }\n}\n\nfunction readTypeDefinitionsFromSchemaFile(parsed: unknown): ItemTypeDefinition[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed as ItemTypeDefinition[];\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.definitions)) {\n return record.definitions as ItemTypeDefinition[];\n }\n if (typeof record.item_types === \"object\" && record.item_types !== null) {\n const itemTypesRecord = record.item_types as Record<string, unknown>;\n if (Array.isArray(itemTypesRecord.definitions)) {\n return itemTypesRecord.definitions as ItemTypeDefinition[];\n }\n }\n return undefined;\n}\n\nfunction readStatusesFromSchemaFile(parsed: unknown): RuntimeStatusDefinition[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed as RuntimeStatusDefinition[];\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.statuses)) {\n return record.statuses as RuntimeStatusDefinition[];\n }\n if (Array.isArray(record.definitions)) {\n return record.definitions as RuntimeStatusDefinition[];\n }\n return undefined;\n}\n\nfunction readFieldsFromSchemaFile(parsed: unknown): RuntimeFieldDefinition[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed as RuntimeFieldDefinition[];\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.fields)) {\n return record.fields as RuntimeFieldDefinition[];\n }\n if (Array.isArray(record.definitions)) {\n return record.definitions as RuntimeFieldDefinition[];\n }\n return undefined;\n}\n\nfunction readWorkflowFromSchemaFile(parsed: unknown): RuntimeWorkflowDefinition | undefined {\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (typeof record.workflow === \"object\" && record.workflow !== null && !Array.isArray(record.workflow)) {\n return record.workflow as RuntimeWorkflowDefinition;\n }\n if (typeof record.workflows === \"object\" && record.workflows !== null && !Array.isArray(record.workflows)) {\n return record.workflows as RuntimeWorkflowDefinition;\n }\n return record as RuntimeWorkflowDefinition;\n}\n\nfunction readTypeWorkflowsFromSchemaFile(parsed: unknown): TypeWorkflowDefinition[] | undefined {\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.type_workflows)) {\n return record.type_workflows as TypeWorkflowDefinition[];\n }\n return undefined;\n}\n\n/**\n * Implements file path for schema section for the public runtime surface of this module.\n */\nexport function filePathForSchemaSection(pmRoot: string, configuredPath: string | undefined, fallbackPath: string): string {\n const normalized = configuredPath?.trim() || fallbackPath;\n if (path.isAbsolute(normalized)) {\n return normalized;\n }\n return path.join(pmRoot, normalized);\n}\n\n/**\n * Resolves the active tracker's `schema/types.json` path so user-facing hints\n * (e.g. the invalid-type error) point at the real `--pm-path` location instead\n * of the hardcoded `.agents/pm` default. Mirrors how `pm schema add/remove-type`\n * report their target path.\n */\nexport function resolveItemTypesFilePath(pmRoot: string, schema: RuntimeSchemaSettings): string {\n return filePathForSchemaSection(pmRoot, schema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types);\n}\n\n/**\n * Implements ensure runtime schema file scaffold for the public runtime surface of this module.\n */\nexport async function ensureRuntimeSchemaFileScaffold(\n pmRoot: string,\n schema: RuntimeSchemaSettings,\n): Promise<RuntimeSchemaFileBootstrapResult> {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n const specs: Array<{ path: string; seed: unknown }> = [\n {\n path: filePathForSchemaSection(pmRoot, normalizedSchema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types),\n seed: buildTypesFileSeed(),\n },\n {\n path: filePathForSchemaSection(pmRoot, normalizedSchema.files.statuses, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses),\n seed: buildStatusesFileSeed(),\n },\n {\n path: filePathForSchemaSection(pmRoot, normalizedSchema.files.fields, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields),\n seed: buildFieldsFileSeed(),\n },\n {\n path: filePathForSchemaSection(pmRoot, normalizedSchema.files.workflows, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows),\n seed: buildWorkflowsFileSeed(),\n },\n ];\n const createdPaths: string[] = [];\n for (const spec of specs) {\n if (await pathExists(spec.path)) {\n continue;\n }\n await writeFileAtomic(spec.path, serializeJson(spec.seed));\n createdPaths.push(spec.path);\n }\n return {\n created_paths: createdPaths,\n };\n}\n\n/**\n * Implements load runtime schema from optional files for the public runtime surface of this module.\n */\nexport async function loadRuntimeSchemaFromOptionalFiles(\n pmRoot: string,\n schema: RuntimeSchemaSettings,\n): Promise<LoadedRuntimeSchemaSections> {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n const warnings: string[] = [];\n const typeFilePath = filePathForSchemaSection(pmRoot, normalizedSchema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types);\n const statusFilePath = filePathForSchemaSection(\n pmRoot,\n normalizedSchema.files.statuses,\n DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses,\n );\n const fieldsFilePath = filePathForSchemaSection(pmRoot, normalizedSchema.files.fields, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields);\n const workflowsFilePath = filePathForSchemaSection(\n pmRoot,\n normalizedSchema.files.workflows,\n DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows,\n );\n\n let loadedTypeDefinitions: ItemTypeDefinition[] | undefined;\n let loadedStatuses: RuntimeStatusDefinition[] | undefined;\n let loadedFields: RuntimeFieldDefinition[] | undefined;\n let loadedWorkflow: RuntimeWorkflowDefinition | undefined;\n let loadedTypeWorkflows: TypeWorkflowDefinition[] | undefined;\n\n const readAndParse = async (targetPath: string, warningKey: string): Promise<unknown | undefined> => {\n const raw = await readFileIfExists(targetPath);\n if (raw === null) {\n return undefined;\n }\n return parseOptionalJson(raw, warningKey, warnings);\n };\n\n const parsedTypes = await readAndParse(typeFilePath, \"runtime_schema_types_invalid_json\");\n if (parsedTypes !== undefined) {\n loadedTypeDefinitions = readTypeDefinitionsFromSchemaFile(parsedTypes);\n if (loadedTypeDefinitions === undefined) {\n warnings.push(\"runtime_schema_types_invalid_shape\");\n }\n }\n\n const parsedStatuses = await readAndParse(statusFilePath, \"runtime_schema_statuses_invalid_json\");\n if (parsedStatuses !== undefined) {\n loadedStatuses = readStatusesFromSchemaFile(parsedStatuses);\n if (loadedStatuses === undefined) {\n warnings.push(\"runtime_schema_statuses_invalid_shape\");\n }\n }\n\n const parsedFields = await readAndParse(fieldsFilePath, \"runtime_schema_fields_invalid_json\");\n if (parsedFields !== undefined) {\n loadedFields = readFieldsFromSchemaFile(parsedFields);\n if (loadedFields === undefined) {\n warnings.push(\"runtime_schema_fields_invalid_shape\");\n }\n }\n\n const parsedWorkflow = await readAndParse(workflowsFilePath, \"runtime_schema_workflows_invalid_json\");\n if (parsedWorkflow !== undefined) {\n loadedWorkflow = readWorkflowFromSchemaFile(parsedWorkflow);\n if (loadedWorkflow === undefined) {\n warnings.push(\"runtime_schema_workflows_invalid_shape\");\n }\n // type_workflows live alongside `workflow` in the same file; their absence\n // is not an error (the file may carry only the lifecycle workflow block).\n loadedTypeWorkflows = readTypeWorkflowsFromSchemaFile(parsedWorkflow);\n }\n\n const mergedSchema = normalizeRuntimeSchemaSettings({\n ...normalizedSchema,\n statuses: [...normalizedSchema.statuses, ...(loadedStatuses ?? [])],\n fields: [...normalizedSchema.fields, ...(loadedFields ?? [])],\n workflow: {\n ...normalizedSchema.workflow,\n ...loadedWorkflow,\n },\n type_workflows: [...(normalizedSchema.type_workflows ?? []), ...(loadedTypeWorkflows ?? [])],\n });\n\n return {\n schema: mergedSchema,\n type_definitions_from_file: loadedTypeDefinitions,\n warnings,\n created_paths: [],\n };\n}\n\nfunction preferredStatusForRole(\n definitions: RuntimeStatusDefinitionResolved[],\n role: RuntimeStatusRole,\n fallbackValues: string[],\n): string | undefined {\n const withRole = definitions.filter((definition) => definition.roles.includes(role));\n if (withRole.length > 0) {\n return withRole[0].id;\n }\n const normalizedFallbacks = fallbackValues\n .map((value) => normalizeStatusId(value))\n .filter((value): value is string => typeof value === \"string\");\n for (const normalized of normalizedFallbacks) {\n if (definitions.some((definition) => definition.id === normalized)) {\n return normalized;\n }\n }\n return definitions[0]?.id;\n}\n\n/**\n * Implements resolve runtime status registry for the public runtime surface of this module.\n */\nexport function resolveRuntimeStatusRegistry(schema: RuntimeSchemaSettings): RuntimeStatusRegistry {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n const definitions = normalizedSchema.statuses.map((definition, index) =>\n normalizeRuntimeStatusDefinition(definition, index),\n ).filter((definition): definition is RuntimeStatusDefinitionResolved => definition !== null);\n const aliasToId = new Map<string, string>();\n const byId = new Map<string, RuntimeStatusDefinitionResolved>();\n for (const definition of definitions) {\n byId.set(definition.id, definition);\n aliasToId.set(definition.id, definition.id);\n aliasToId.set(definition.id.replaceAll(\"_\", \"-\"), definition.id);\n aliasToId.set(definition.id.replaceAll(\"_\", \" \"), definition.id);\n for (const alias of definition.aliases) {\n aliasToId.set(alias, definition.id);\n aliasToId.set(alias.replaceAll(\"_\", \"-\"), definition.id);\n aliasToId.set(alias.replaceAll(\"_\", \" \"), definition.id);\n }\n }\n const terminalStatuses = new Set<string>();\n const terminalDoneStatuses = new Set<string>();\n const terminalCanceledStatuses = new Set<string>();\n const activeStatuses = new Set<string>();\n const blockedStatuses = new Set<string>();\n const draftStatuses = new Set<string>();\n for (const definition of definitions) {\n const roles = new Set(definition.roles);\n if (roles.has(\"terminal\") || roles.has(\"terminal_done\") || roles.has(\"terminal_canceled\")) {\n terminalStatuses.add(definition.id);\n }\n if (roles.has(\"terminal_done\")) {\n terminalDoneStatuses.add(definition.id);\n }\n if (roles.has(\"terminal_canceled\")) {\n terminalCanceledStatuses.add(definition.id);\n }\n if (roles.has(\"active\")) {\n activeStatuses.add(definition.id);\n }\n if (roles.has(\"blocked\")) {\n blockedStatuses.add(definition.id);\n }\n if (roles.has(\"draft\")) {\n draftStatuses.add(definition.id);\n }\n }\n const workflow = normalizedSchema.workflow;\n const openStatus =\n normalizeStatusId(workflow.open_status) ??\n preferredStatusForRole(definitions, \"default_open\", [\"open\", \"in_progress\", STATUS_VALUES[0]]);\n const closeStatus =\n normalizeStatusId(workflow.close_status) ??\n preferredStatusForRole(definitions, \"default_close\", [\"closed\", \"done\", \"complete\"]);\n const canceledStatus =\n normalizeStatusId(workflow.canceled_status) ??\n preferredStatusForRole(definitions, \"default_cancel\", [\"canceled\", \"cancelled\"]);\n\n return {\n definitions,\n by_id: byId,\n alias_to_id: aliasToId,\n terminal_statuses: terminalStatuses,\n terminal_done_statuses: terminalDoneStatuses,\n terminal_canceled_statuses: terminalCanceledStatuses,\n active_statuses: activeStatuses,\n blocked_statuses: blockedStatuses,\n draft_statuses: draftStatuses,\n open_status: openStatus as string,\n close_status: closeStatus as string,\n canceled_status: canceledStatus as string,\n };\n}\n\n/**\n * Implements normalize status input with registry for the public runtime surface of this module.\n */\nexport function normalizeStatusInputWithRegistry(value: unknown, registry: RuntimeStatusRegistry): string | undefined {\n const normalized = normalizeStatusToken(value);\n if (!normalized) {\n return undefined;\n }\n return registry.alias_to_id.get(normalized);\n}\n\n/**\n * Implements resolve runtime field registry for the public runtime surface of this module.\n */\nexport function resolveRuntimeFieldRegistry(schema: RuntimeSchemaSettings): RuntimeFieldRegistry {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n const dedupedByKey = new Map<string, RuntimeFieldDefinitionResolved>();\n const normalizedFields = normalizedSchema.fields\n .map((definition) => normalizeRuntimeFieldDefinition(definition))\n .filter((definition): definition is RuntimeFieldDefinitionResolved => definition !== null);\n for (const normalized of normalizedFields) {\n dedupedByKey.set(normalized.key, normalized);\n }\n const definitions = [...dedupedByKey.values()].sort((left, right) => left.key.localeCompare(right.key));\n const byKey = new Map<string, RuntimeFieldDefinitionResolved>();\n const byCliToken = new Map<string, RuntimeFieldDefinitionResolved>();\n const commandToFields = new Map<RuntimeFieldCommand, RuntimeFieldDefinitionResolved[]>();\n for (const definition of definitions) {\n byKey.set(definition.key, definition);\n byCliToken.set(definition.cli_flag, definition);\n for (const alias of definition.cli_aliases) {\n byCliToken.set(alias, definition);\n }\n for (const command of definition.commands) {\n const existing = commandToFields.get(command) ?? [];\n existing.push(definition);\n commandToFields.set(command, existing);\n }\n }\n for (const [command, fieldDefinitions] of commandToFields.entries()) {\n fieldDefinitions.sort((left, right) => left.key.localeCompare(right.key));\n commandToFields.set(command, fieldDefinitions);\n }\n return {\n definitions,\n by_key: byKey,\n by_cli_token: byCliToken,\n command_to_fields: commandToFields,\n };\n}\n\n/**\n * Implements runtime field option target for the public runtime surface of this module.\n */\nexport function runtimeFieldOptionTarget(field: RuntimeFieldDefinitionResolved): string {\n return toCamelCase(field.key);\n}\n\n/**\n * Implements status is terminal for the public runtime surface of this module.\n */\nexport function statusIsTerminal(status: string, registry: RuntimeStatusRegistry): boolean {\n const normalized = normalizeStatusInputWithRegistry(status, registry);\n if (!normalized) {\n return false;\n }\n return registry.terminal_statuses.has(normalized);\n}\n"],
5
- "mappings": "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,wBAAwB;AAErF,IAAM,iBAAkD;EAC7D,MAAM;EACN,SAAS;EACT,MAAM;EACN,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACP,UAAU;EACV,WAAW;EACX,SAAS;EACT,MAAM;;AAGD,IAAM,yBAAgD;EAC3D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKK,IAAM,6BAAkG;EAC7G,SAAS;IACP,uBAAuB;IACvB,qBAAqB;IACrB,0BAA0B;IAC1B,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,+BAA+B;;EAEjC,SAAS;IACP,uBAAuB;IACvB,qBAAqB;IACrB,0BAA0B;IAC1B,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,+BAA+B;;EAEjC,QAAQ;IACN,uBAAuB;IACvB,qBAAqB;IACrB,0BAA0B;IAC1B,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,+BAA+B;;;AAI5B,IAAM,iDAAiD;EAC5D;EACA;EACA;EACA;;AAGK,IAAM,wDAAwD;EACnE,gBAAgB,CAAC,4CAA4C,gBAAgB;EAC7E,YAAY,CAAC,uCAAuC,qCAAqC,+BAA+B,gBAAgB;EACxI,eAAe,CAAC,uBAAuB,kBAAkB,6BAA6B;;AAGxF,SAAS,mBAAsB,QAAgC;AAC7D,SAAO,SAAS,CAAC,GAAG,MAAM,IAAI;AAChC;AAEO,IAAM,oBAAgC;EAC3C,SAAS;EACT,WAAW;EACX,gBAAgB;EAChB,aAAa;EACb,OAAO;IACL,aAAa;IACb,SAAS;;EAEX,aAAa;IACX,gBAAgB;;EAElB,QAAQ;IACN,g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",
3
+ "sources": ["../../../../../../../../core/fs/fs-utils.ts", "../../../../../../../../core/fs/path-utils.ts", "../../../../../../../../core/packages/root.ts", "../../../../../../../../core/extensions/extension-types.ts", "../../../../../../../../core/shared/constants.ts", "../../../../../../../../types.ts", "../../../../../../../../core/item/item-type-definition.ts", "../../../../../../../../core/item/type-registry.ts", "../../../../../../../../core/store/paths.ts", "../../../../../../../../core/shared/primitives.ts", "../../../../../../../../core/shared/levenshtein.ts", "../../../../../../../../core/extensions/extension-capability-aliases.ts", "../../../../../../../../core/extensions/extension-registries.ts", "../../../../../../../../core/extensions/extension-runtime-helpers.ts", "../../../../../../../../core/extensions/extension-hook-runtime.ts", "../../../../../../../../core/extensions/loader.ts", "../../../../../../../../core/extensions/flag-value-types.ts", "../../../../../../../../core/extensions/item-field-types.ts", "../../../../../../../../core/extensions/version-compat.ts", "../../../../../../../../core/extensions/extension-policy.ts", "../../../../../../../../core/extensions/capability-usage.ts", "../../../../../../../../core/schema/runtime-schema.ts", "../../../../../../../../core/shared/memo.ts"],
4
+ "sourcesContent": ["/**\n * @module core/fs/fs-utils\n *\n * Provides filesystem helpers for Fs Utils.\n */\nimport * as fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport crypto from \"node:crypto\";\n\nconst WINDOWS_RENAME_RETRY_DELAYS_MS = [10, 25, 50, 100];\n\n/**\n * Implements ensure dir for the public runtime surface of this module.\n */\nexport async function ensureDir(dirPath: string): Promise<void> {\n await fs.mkdir(dirPath, { recursive: true });\n}\n\n/**\n * Implements path exists for the public runtime surface of this module.\n */\nexport async function pathExists(targetPath: string): Promise<boolean> {\n try {\n await fs.access(targetPath);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Implements read file if exists for the public runtime surface of this module.\n */\nexport async function readFileIfExists(targetPath: string): Promise<string | null> {\n try {\n return await fs.readFile(targetPath, \"utf8\");\n } catch (error: unknown) {\n if (isErrno(error, \"ENOENT\")) {\n return null;\n }\n throw error;\n }\n}\n\n/**\n * Implements write file atomic for the public runtime surface of this module.\n */\nexport async function writeFileAtomic(targetPath: string, contents: string): Promise<void> {\n const dirPath = path.dirname(targetPath);\n await ensureDir(dirPath);\n const tempPath = path.join(\n dirPath,\n `.${path.basename(targetPath)}.${process.pid}.${Date.now()}.${crypto.randomBytes(4).toString(\"hex\")}.tmp`,\n );\n await fs.writeFile(tempPath, contents, \"utf8\");\n try {\n await fs.rename(tempPath, targetPath);\n } catch (error: unknown) {\n if (\n process.platform === \"win32\" &&\n (isErrno(error, \"EPERM\") || isErrno(error, \"EBUSY\"))\n ) {\n let lastError = error;\n for (const delayMs of WINDOWS_RENAME_RETRY_DELAYS_MS) {\n await new Promise<void>((resolve) => setTimeout(resolve, delayMs));\n try {\n await fs.rename(tempPath, targetPath);\n return;\n } catch (retryError: unknown) {\n lastError = retryError;\n if (!isErrno(retryError, \"EPERM\") && !isErrno(retryError, \"EBUSY\")) {\n break;\n }\n }\n }\n try {\n await fs.unlink(tempPath);\n } catch {\n // Best-effort cleanup only.\n }\n throw lastError;\n }\n if (isErrno(error, \"EXDEV\")) {\n try {\n await fs.copyFile(tempPath, targetPath);\n } finally {\n try {\n await fs.unlink(tempPath);\n } catch {\n // Best-effort cleanup only.\n }\n }\n return;\n }\n try {\n await fs.unlink(tempPath);\n } catch {\n // Best-effort cleanup only.\n }\n throw error;\n }\n}\n\n/**\n * Append a single newline-terminated line to a file, opened with `O_APPEND`.\n *\n * Concurrency contract: `O_APPEND` makes the seek-to-EOF that precedes each\n * `write(2)` atomic, so independent appenders never overwrite each other's\n * bytes. For the common case the whole `${line}\\n` buffer is handed to the\n * kernel in one `write(2)`, which mainstream filesystems (ext4/xfs/apfs) commit\n * atomically under the inode lock — concurrent multi-process appends of small\n * records (e.g. the telemetry and OTLP-span queues) therefore stay\n * line-coherent without an external lock.\n *\n * The guarantee weakens only for a single record large enough that the OS\n * splits it across multiple `write(2)` calls (multi-KiB lines), where another\n * process's append could interleave between fragments. History JSONL — the only\n * caller that can produce large lines — is always written while the per-item\n * store lock is held (see core/store/item-store.ts), so those appends are\n * serialized regardless. Callers writing large records concurrently from\n * multiple processes must hold an equivalent lock.\n */\nexport async function appendLineAtomic(targetPath: string, line: string): Promise<void> {\n const dirPath = path.dirname(targetPath);\n await ensureDir(dirPath);\n const handle = await fs.open(targetPath, \"a\");\n try {\n await handle.writeFile(`${line}\\n`, \"utf8\");\n } finally {\n await handle.close();\n }\n}\n\n/**\n * Implements remove file if exists for the public runtime surface of this module.\n */\nexport async function removeFileIfExists(targetPath: string): Promise<void> {\n try {\n await fs.unlink(targetPath);\n } catch (error: unknown) {\n if (!isErrno(error, \"ENOENT\")) {\n throw error;\n }\n }\n}\n\nfunction isErrno(error: unknown, code: string): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === code;\n}\n", "/**\n * @module core/fs/path-utils\n *\n * Provides filesystem helpers for Path Utils.\n */\nimport path from \"path\";\n\n/**\n * Implements check whether path within directory for the public runtime surface of this module.\n */\nexport function isPathWithinDirectory(directory: string, targetPath: string): boolean {\n const relative = path.relative(directory, targetPath);\n if (relative.length === 0) {\n return true;\n }\n return !relative.startsWith(\"..\") && !path.isAbsolute(relative);\n}\n", "/**\n * @module core/packages/root\n *\n * Discovers and validates pm package manifests for Root.\n */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst PM_CLI_PACKAGE_NAME = \"@unbrained/pm-cli\";\n\nfunction packageJsonNamesPmCli(packageJsonPath: string): boolean {\n try {\n const parsed = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\")) as { name?: unknown };\n return parsed.name === PM_CLI_PACKAGE_NAME;\n } catch {\n return false;\n }\n}\n\n/**\n * Implements find pm package root from path for the public runtime surface of this module.\n */\nexport function findPmPackageRootFromPath(startPath: string): string | undefined {\n let current = fs.existsSync(startPath) && fs.statSync(startPath).isDirectory()\n ? path.resolve(startPath)\n : path.dirname(path.resolve(startPath));\n\n while (true) {\n const packageJsonPath = path.join(current, \"package.json\");\n if (fs.existsSync(packageJsonPath) && packageJsonNamesPmCli(packageJsonPath)) {\n return current;\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n return undefined;\n }\n current = parent;\n }\n}\n\n/**\n * Implements resolve pm package root from module for the public runtime surface of this module.\n */\nexport function resolvePmPackageRootFromModule(metaUrl: string, fallbackRelativeSegments: string[] = []): string {\n const modulePath = fileURLToPath(metaUrl);\n const discovered = findPmPackageRootFromPath(modulePath);\n if (discovered) {\n return discovered;\n }\n return path.resolve(path.dirname(modulePath), ...fallbackRelativeSegments);\n}\n\n/**\n * Read the pm-cli package version from the resolved package root's `package.json`.\n *\n * Centralizes the read+parse+guard logic shared by the CLI banner, the Sentry\n * release tag, the MCP `serverInfo`, and the upgrade check so they never drift.\n * Returns `undefined` when the version cannot be resolved; callers supply their\n * own fallback (the CLI/MCP use `\"0.0.0\"`). Resolution must never throw, so the\n * hot startup path is safe.\n */\nexport function resolvePmCliVersion(metaUrl: string, fallbackRelativeSegments: string[] = []): string | undefined {\n try {\n const packageJsonPath = path.join(resolvePmPackageRootFromModule(metaUrl, fallbackRelativeSegments), \"package.json\");\n if (!fs.existsSync(packageJsonPath)) {\n return undefined;\n }\n const parsed = JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\")) as { version?: unknown };\n return typeof parsed.version === \"string\" && parsed.version.trim().length > 0 ? parsed.version : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Implements resolve configured pm package root for the public runtime surface of this module.\n */\nexport function resolveConfiguredPmPackageRoot(\n env: NodeJS.ProcessEnv = process.env,\n envName = \"PM_CLI_PACKAGE_ROOT\",\n metaUrl?: string,\n fallbackRelativeSegments: string[] = [],\n): string {\n const envRoot = env[envName];\n if (typeof envRoot === \"string\" && envRoot.trim().length > 0) {\n return path.resolve(envRoot.trim());\n }\n if (metaUrl) {\n return resolvePmPackageRootFromModule(metaUrl, fallbackRelativeSegments);\n }\n return process.cwd();\n}\n", "/**\n * @module core/extensions/extension-types\n *\n * Implements extension runtime contracts and governance for Extension Types.\n */\nimport type {\n ExtensionPolicyOverrideSettings,\n ExtensionPolicySettings,\n ItemDocument,\n ItemFrontMatter,\n ItemStatus,\n PmSettings,\n} from \"../../types/index.js\";\nimport type { GlobalOptions } from \"../shared/command-types.js\";\nimport type { ProjectProfileDefinition, ProjectProfileRegistrationInput } from \"../profile/profile-presets.js\";\n\nexport const KNOWN_EXTENSION_CAPABILITIES = [\n \"commands\",\n \"renderers\",\n \"hooks\",\n \"schema\",\n \"importers\",\n \"search\",\n \"parser\",\n \"preflight\",\n \"services\",\n] as const;\n/**\n * Restricts extension capability values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionCapability = (typeof KNOWN_EXTENSION_CAPABILITIES)[number];\nexport const EXTENSION_CAPABILITY_CONTRACT_VERSION = 2;\nexport const EXTENSION_CAPABILITY_LEGACY_ALIASES: Readonly<Record<string, ExtensionCapability>> = Object.freeze({\n migration: \"schema\",\n validation: \"schema\",\n});\nexport const EXTENSION_CAPABILITY_CONTRACT = Object.freeze({\n version: EXTENSION_CAPABILITY_CONTRACT_VERSION,\n capabilities: [...KNOWN_EXTENSION_CAPABILITIES],\n legacy_aliases: { ...EXTENSION_CAPABILITY_LEGACY_ALIASES },\n});\n\nexport const KNOWN_EXTENSION_POLICY_MODES = [\"off\", \"warn\", \"enforce\"] as const;\n/**\n * Restricts extension policy mode values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionPolicyMode = (typeof KNOWN_EXTENSION_POLICY_MODES)[number];\nexport const KNOWN_EXTENSION_TRUST_MODES = [\"off\", \"warn\", \"enforce\"] as const;\n/**\n * Restricts extension trust mode values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionTrustMode = (typeof KNOWN_EXTENSION_TRUST_MODES)[number];\nexport const KNOWN_EXTENSION_SANDBOX_PROFILES = [\"none\", \"restricted\", \"strict\"] as const;\n/**\n * Restricts extension sandbox profile values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionSandboxProfile = (typeof KNOWN_EXTENSION_SANDBOX_PROFILES)[number];\n\nexport const KNOWN_PM_MAX_VERSION_EXCEEDED_MODES = [\"block\", \"warn\"] as const;\n/** How a `pm_max_version` violation is handled for an extension layer. */\nexport type PmMaxVersionExceededMode = (typeof KNOWN_PM_MAX_VERSION_EXCEEDED_MODES)[number];\n/** Optional per-layer override map for `extensions.policy.pm_max_version_exceeded_mode`. */\nexport interface PmMaxVersionExceededModeByLayer {\n global?: PmMaxVersionExceededMode;\n project?: PmMaxVersionExceededMode;\n}\n/**\n * Settings value for `extensions.policy.pm_max_version_exceeded_mode`: either a\n * single mode applied to both layers, or a per-layer override map. Unset (and\n * any unset layer key) defaults to `\"block\"`.\n */\nexport type PmMaxVersionExceededModeSetting = PmMaxVersionExceededMode | PmMaxVersionExceededModeByLayer;\n\nexport const KNOWN_EXTENSION_POLICY_SURFACES = [\n \"commands.override\",\n \"commands.handler\",\n \"hooks.beforecommand\",\n \"hooks.aftercommand\",\n \"hooks.onwrite\",\n \"hooks.onread\",\n \"hooks.onindex\",\n \"schema.flags\",\n \"schema.itemfields\",\n \"schema.itemtypes\",\n \"schema.migrations\",\n \"schema.profiles\",\n \"parser.override\",\n \"preflight.override\",\n \"services.override\",\n \"renderers.override\",\n \"importers.importer\",\n \"importers.exporter\",\n \"search.provider\",\n \"search.vectorstore\",\n] as const;\n/**\n * Restricts extension policy surface values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionPolicySurface = (typeof KNOWN_EXTENSION_POLICY_SURFACES)[number];\n\nexport const KNOWN_EXTENSION_SERVICE_NAMES = [\n \"output_format\",\n \"error_format\",\n \"help_format\",\n \"lock_acquire\",\n \"lock_release\",\n \"history_append\",\n \"item_store_write\",\n \"item_store_delete\",\n] as const;\n/**\n * Restricts extension service name values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionServiceName = (typeof KNOWN_EXTENSION_SERVICE_NAMES)[number];\n\n/**\n * Documents the extension provenance metadata payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionProvenanceMetadata {\n source?: string;\n signature?: string;\n attestation?: string;\n verified?: boolean;\n}\n\n/**\n * Documents the extension runtime permission declaration payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionRuntimePermissionDeclaration {\n fs_read?: boolean;\n fs_write?: boolean;\n network?: boolean;\n env_read?: boolean;\n env_write?: boolean;\n process_spawn?: boolean;\n}\n\n/**\n * Documents the extension activation metadata payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionActivationMetadata {\n commands?: string[];\n}\n\n/**\n * Restricts extension policy override values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionPolicyOverride = ExtensionPolicyOverrideSettings;\n/**\n * Extension governance policy as read from / serialized to settings. Extends the\n * stored settings shape with `pm_max_version_exceeded_mode` (pm-k5e8), which\n * relaxes the default-BLOCK on `pm_max_version` violations to warn-only —\n * globally or per extension layer.\n */\nexport type ExtensionGovernancePolicy = ExtensionPolicySettings & {\n pm_max_version_exceeded_mode?: PmMaxVersionExceededModeSetting;\n};\n\n/**\n * Documents the extension manifest engines payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionManifestEngines {\n pm?: string;\n node?: string;\n [engine: string]: string | undefined;\n}\n\n/**\n * Implements create default extension governance policy for the public runtime surface of this module.\n */\nexport function createDefaultExtensionGovernancePolicy(): ExtensionGovernancePolicy {\n return {\n mode: \"off\",\n trust_mode: \"off\",\n require_provenance: false,\n trusted_extensions: [],\n default_sandbox_profile: \"none\",\n allowed_extensions: [],\n blocked_extensions: [],\n allowed_capabilities: [],\n blocked_capabilities: [],\n allowed_surfaces: [],\n blocked_surfaces: [],\n allowed_commands: [],\n blocked_commands: [],\n allowed_actions: [],\n blocked_actions: [],\n allowed_services: [],\n blocked_services: [],\n extension_overrides: [],\n };\n}\n\n/**\n * Restricts extension layer values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionLayer = \"global\" | \"project\";\n/**\n * Restricts extension status values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionStatus = \"ok\" | \"warn\";\n\n/**\n * Documents the extension manifest payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionManifest {\n name: string;\n version: string;\n entry: string;\n priority: number;\n capabilities: string[];\n manifest_version?: number;\n pm_min_version?: string;\n pm_max_version?: string;\n engines?: ExtensionManifestEngines;\n trusted?: boolean;\n provenance?: ExtensionProvenanceMetadata;\n sandbox_profile?: ExtensionSandboxProfile;\n permissions?: ExtensionRuntimePermissionDeclaration;\n activation?: ExtensionActivationMetadata;\n legacy_capability_aliases?: LegacyExtensionCapabilityAliasMapping[];\n}\n\n/**\n * Documents the extension diagnostic payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionDiagnostic {\n layer: ExtensionLayer;\n directory: string;\n manifest_path: string;\n name: string | null;\n version: string | null;\n entry: string | null;\n priority: number | null;\n entry_path: string | null;\n enabled: boolean | null;\n status: ExtensionStatus;\n}\n\n/**\n * Documents the effective extension payload exchanged by command, SDK, and package integrations.\n */\nexport interface EffectiveExtension {\n layer: ExtensionLayer;\n directory: string;\n manifest_path: string;\n name: string;\n source_package?: string;\n version: string;\n entry: string;\n priority: number;\n entry_path: string;\n manifest_version?: number;\n pm_min_version?: string;\n pm_max_version?: string;\n engines?: ExtensionManifestEngines;\n trusted?: boolean;\n provenance?: ExtensionProvenanceMetadata;\n sandbox_profile?: ExtensionSandboxProfile;\n permissions?: ExtensionRuntimePermissionDeclaration;\n capabilities?: string[];\n activation?: ExtensionActivationMetadata;\n}\n\n/**\n * Documents the extension discovery result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionDiscoveryResult {\n disabled_by_flag: boolean;\n roots: {\n global: string;\n project: string;\n };\n configured_enabled: string[];\n configured_disabled: string[];\n discovered: ExtensionDiagnostic[];\n effective: EffectiveExtension[];\n warnings: string[];\n policy: ExtensionGovernancePolicy;\n}\n\n/**\n * Documents the loaded extension payload exchanged by command, SDK, and package integrations.\n */\nexport interface LoadedExtension extends EffectiveExtension {\n module: unknown;\n}\n\n/**\n * Documents the failed extension load payload exchanged by command, SDK, and package integrations.\n */\nexport interface FailedExtensionLoad {\n layer: ExtensionLayer;\n name: string;\n entry_path: string;\n error: string;\n}\n\n/**\n * Documents the extension load result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionLoadResult extends ExtensionDiscoveryResult {\n loaded: LoadedExtension[];\n failed: FailedExtensionLoad[];\n}\n\n/**\n * Documents the before command hook context payload exchanged by command, SDK, and package integrations.\n */\nexport interface BeforeCommandHookContext {\n command: string;\n args: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root: string;\n}\n\n/**\n * Documents the after command hook context payload exchanged by command, SDK, and package integrations.\n */\nexport interface AfterCommandHookContext extends BeforeCommandHookContext {\n ok: boolean;\n error?: string;\n result?: unknown;\n affected?: AfterCommandAffectedItem[];\n}\n\n/**\n * Documents the after command affected item payload exchanged by command, SDK, and package integrations.\n */\nexport interface AfterCommandAffectedItem {\n id: string;\n op?: string;\n item_type?: string;\n previous_status?: ItemStatus;\n status?: ItemStatus;\n previous?: Partial<ItemFrontMatter>;\n current?: Partial<ItemFrontMatter>;\n changed_fields?: string[];\n}\n\n/**\n * Documents the on write hook context payload exchanged by command, SDK, and package integrations.\n */\nexport interface OnWriteHookContext {\n path: string;\n scope: \"project\" | \"global\";\n op: string;\n item_id?: string;\n item_type?: string;\n before?: ItemDocument;\n after?: ItemDocument;\n changed_fields?: string[];\n}\n\n/**\n * Documents the on read hook context payload exchanged by command, SDK, and package integrations.\n */\nexport interface OnReadHookContext {\n path: string;\n scope: \"project\" | \"global\";\n}\n\n/**\n * Documents the on index hook context payload exchanged by command, SDK, and package integrations.\n */\nexport interface OnIndexHookContext {\n mode: string;\n total_items?: number;\n}\n\n/**\n * Restricts before command hook values accepted by command, SDK, and storage contracts.\n */\nexport type BeforeCommandHook = (context: BeforeCommandHookContext) => Promise<void> | void;\n/**\n * Restricts after command hook values accepted by command, SDK, and storage contracts.\n */\nexport type AfterCommandHook = (context: AfterCommandHookContext) => Promise<void> | void;\n/**\n * Restricts on write hook values accepted by command, SDK, and storage contracts.\n */\nexport type OnWriteHook = (context: OnWriteHookContext) => Promise<void> | void;\n/**\n * Restricts on read hook values accepted by command, SDK, and storage contracts.\n */\nexport type OnReadHook = (context: OnReadHookContext) => Promise<void> | void;\n/**\n * Restricts on index hook values accepted by command, SDK, and storage contracts.\n */\nexport type OnIndexHook = (context: OnIndexHookContext) => Promise<void> | void;\n/**\n * Restricts output renderer format values accepted by command, SDK, and storage contracts.\n */\nexport type OutputRendererFormat = \"toon\" | \"json\";\n/**\n * Restricts command override values accepted by command, SDK, and storage contracts.\n */\nexport type CommandOverride = (context: CommandOverrideContext) => unknown;\n/**\n * Restricts renderer override values accepted by command, SDK, and storage contracts.\n */\nexport type RendererOverride = (context: RendererOverrideContext) => string | null | undefined;\n/**\n * Restricts command handler values accepted by command, SDK, and storage contracts.\n */\nexport type CommandHandler = (context: CommandHandlerContext) => unknown;\n/**\n * Restricts parser override values accepted by command, SDK, and storage contracts.\n */\nexport type ParserOverride = (context: ParserOverrideContext) => ParserOverrideDelta | Promise<ParserOverrideDelta>;\n/**\n * Restricts preflight override values accepted by command, SDK, and storage contracts.\n */\nexport type PreflightOverride = (context: PreflightOverrideContext) => PreflightOverrideDelta | Promise<PreflightOverrideDelta>;\n/**\n * Restricts service override values accepted by command, SDK, and storage contracts.\n */\nexport type ServiceOverride = (context: ServiceOverrideContext) => unknown;\n\n/**\n * Documents the registered extension hook payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionHook<THook> {\n layer: ExtensionLayer;\n name: string;\n run: THook;\n}\n\n/**\n * Documents the extension hook registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionHookRegistry {\n beforeCommand: Array<RegisteredExtensionHook<BeforeCommandHook>>;\n afterCommand: Array<RegisteredExtensionHook<AfterCommandHook>>;\n onWrite: Array<RegisteredExtensionHook<OnWriteHook>>;\n onRead: Array<RegisteredExtensionHook<OnReadHook>>;\n onIndex: Array<RegisteredExtensionHook<OnIndexHook>>;\n}\n\n/**\n * Documents the command override context payload exchanged by command, SDK, and package integrations.\n */\nexport interface CommandOverrideContext {\n command: string;\n args: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root: string;\n result: unknown;\n}\n\n/**\n * Documents the renderer override context payload exchanged by command, SDK, and package integrations.\n */\nexport interface RendererOverrideContext {\n format: OutputRendererFormat;\n command?: string;\n args?: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root?: string;\n result: unknown;\n}\n\n/**\n * Documents the command handler context payload exchanged by command, SDK, and package integrations.\n */\nexport interface CommandHandlerContext {\n command: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_root: string;\n}\n\n/**\n * Documents the parser override context payload exchanged by command, SDK, and package integrations.\n */\nexport type ParserOverrideContext = CommandHandlerContext;\n\n/**\n * Documents the parser override delta payload exchanged by command, SDK, and package integrations.\n */\nexport interface ParserOverrideDelta {\n args?: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n}\n\n/**\n * Documents the preflight override context payload exchanged by command, SDK, and package integrations.\n */\nexport interface PreflightOverrideContext extends CommandHandlerContext {\n decision: PreflightRuntimeDecision;\n}\n\n/**\n * Documents the preflight runtime decision payload exchanged by command, SDK, and package integrations.\n */\nexport interface PreflightRuntimeDecision {\n enforce_item_format_gate: boolean;\n run_preflight_item_format_sync: boolean;\n run_extension_migrations: boolean;\n enforce_mandatory_migration_gate: boolean;\n}\n\n/**\n * Documents the preflight override delta payload exchanged by command, SDK, and package integrations.\n */\nexport interface PreflightOverrideDelta extends ParserOverrideDelta {\n enforce_item_format_gate?: boolean;\n run_preflight_item_format_sync?: boolean;\n run_extension_migrations?: boolean;\n enforce_mandatory_migration_gate?: boolean;\n}\n\n/**\n * Documents the service override context payload exchanged by command, SDK, and package integrations.\n */\nexport interface ServiceOverrideContext {\n service: ExtensionServiceName;\n command?: string;\n args?: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root?: string;\n payload: unknown;\n}\n\n/**\n * Documents the extension command argument definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionCommandArgumentDefinition {\n name: string;\n required?: boolean;\n variadic?: boolean;\n description?: string;\n}\n\n/**\n * Documents the command definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface CommandDefinition {\n name: string;\n run?: CommandHandler;\n /**\n * @deprecated Use `run` instead. This alias remains for backward compatibility.\n */\n handler?: CommandHandler;\n action?: string;\n description?: string;\n intent?: string;\n examples?: string[];\n failure_hints?: string[];\n arguments?: ExtensionCommandArgumentDefinition[];\n flags?: FlagDefinition[];\n}\n\n/**\n * Optional command-definition metadata for first-class importer/exporter\n * registration.\n *\n * `registerImporter`/`registerExporter` always create a `<name> import` /\n * `<name> export` command path. By default that path only has a handler. When\n * these options are supplied, the auto-created command also gains a full command\n * definition (description, flags, intent, examples, failure hints, positional\n * arguments) — surfaced in help and runtime contracts exactly like\n * `registerCommand`. The registration `name` and `run` handler are implicit, so\n * they are not part of this options object.\n */\nexport interface ImportExportRegistrationOptions {\n action?: string;\n description?: string;\n intent?: string;\n examples?: string[];\n failure_hints?: string[];\n arguments?: ExtensionCommandArgumentDefinition[];\n flags?: FlagDefinition[];\n}\n\n/**\n * Restricts flag value type values accepted by command, SDK, and storage contracts.\n */\nexport type FlagValueType = \"string\" | \"number\" | \"boolean\";\n\n/**\n * Documents the flag definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface FlagDefinition {\n long?: string;\n short?: string;\n value_name?: string;\n description?: string;\n required?: boolean;\n enabled?: boolean;\n visible?: boolean;\n /**\n * Canonical flag value type. Prefer this field; it is the one runtime\n * contracts and help output read first.\n */\n value_type?: FlagValueType;\n /**\n * @deprecated Use `value_type`. Retained for backward compatibility: when\n * both are present `value_type` wins, and `type` resolves only when\n * `value_type` is absent (`value_type ?? type`).\n */\n type?: FlagValueType;\n /**\n * When true, a repeated comma-list flag accumulates values across repeats\n * — parity with core list flags such as `--tags` — instead of the last\n * value winning. Mirrors the core `CliFlagContract.list` field so\n * extension-registered list flags coalesce through the same bootstrap path.\n */\n list?: boolean;\n /**\n * Default value applied when the flag is omitted. Surfaced to runtime\n * contracts and help output. A `list` flag may default to an array of scalars\n * (e.g. `[\"a\", \"b\"]`); the array is flattened/coerced like any list value.\n */\n default?: string | number | boolean | Array<string | number | boolean>;\n [key: string]: unknown;\n}\n\n/**\n * Documents the schema field definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaFieldDefinition {\n name: string;\n type: string;\n optional?: boolean;\n [key: string]: unknown;\n}\n\n/**\n * Documents the schema item type command option policy definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaItemTypeCommandOptionPolicyDefinition {\n command: string;\n option: string;\n enabled?: boolean;\n required?: boolean;\n visible?: boolean;\n [key: string]: unknown;\n}\n\n/**\n * Documents the schema item type option definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaItemTypeOptionDefinition {\n key: string;\n values?: string[];\n required?: boolean;\n aliases?: string[];\n [key: string]: unknown;\n}\n\n/**\n * Documents the schema item type definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaItemTypeDefinition {\n name: string;\n folder?: string;\n aliases?: string[];\n required_create_fields?: string[];\n required_create_repeatables?: string[];\n command_option_policies?: SchemaItemTypeCommandOptionPolicyDefinition[];\n options?: SchemaItemTypeOptionDefinition[];\n [key: string]: unknown;\n}\n\n/**\n * Documents the schema migration run context payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaMigrationRunContext {\n id: string;\n command: \"migration\";\n layer: ExtensionLayer;\n extension: string;\n pm_root: string;\n status: string;\n}\n\n/**\n * Restricts schema migration runner values accepted by command, SDK, and storage contracts.\n */\nexport type SchemaMigrationRunner = (context: SchemaMigrationRunContext) => unknown | Promise<unknown>;\n\n/**\n * Documents the schema migration definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface SchemaMigrationDefinition {\n id?: string;\n description?: string;\n status?: string;\n mandatory?: boolean;\n run?: SchemaMigrationRunner;\n [key: string]: unknown;\n}\n\n/**\n * Documents the import export context payload exchanged by command, SDK, and package integrations.\n */\nexport interface ImportExportContext {\n registration: string;\n action: \"import\" | \"export\";\n command: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_root: string;\n}\n\n/**\n * Restricts importer values accepted by command, SDK, and storage contracts.\n */\nexport type Importer = (context: ImportExportContext) => unknown | Promise<unknown>;\n/**\n * Restricts exporter values accepted by command, SDK, and storage contracts.\n */\nexport type Exporter = (context: ImportExportContext) => unknown | Promise<unknown>;\n\n/**\n * Restricts extension search mode values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionSearchMode = \"keyword\" | \"semantic\" | \"hybrid\";\n\n/**\n * Documents the search provider query context payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderQueryContext {\n query: string;\n mode: ExtensionSearchMode;\n tokens: string[];\n options: Record<string, unknown>;\n settings: PmSettings;\n documents: ItemDocument[];\n [key: string]: unknown;\n}\n\n/**\n * Documents the search provider hit payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderHit {\n id: string;\n score: number;\n matched_fields?: string[];\n [key: string]: unknown;\n}\n\n/**\n * Restricts search provider query result values accepted by command, SDK, and storage contracts.\n */\nexport type SearchProviderQueryResult = SearchProviderHit[] | { hits?: SearchProviderHit[] };\n\n/**\n * Documents the search provider query expansion context payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderQueryExpansionContext {\n query: string;\n mode: Exclude<ExtensionSearchMode, \"keyword\">;\n settings: PmSettings;\n [key: string]: unknown;\n}\n\n/**\n * Restricts search provider query expansion result values accepted by command, SDK, and storage contracts.\n */\nexport type SearchProviderQueryExpansionResult = string[] | { queries?: string[] };\n\n/**\n * Documents the search provider rerank candidate payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderRerankCandidate {\n id: string;\n text: string;\n score: number;\n}\n\n/**\n * Documents the search provider rerank hit payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderRerankHit {\n id: string;\n score: number;\n}\n\n/**\n * Restricts search provider rerank result values accepted by command, SDK, and storage contracts.\n */\nexport type SearchProviderRerankResult = SearchProviderRerankHit[] | { hits?: SearchProviderRerankHit[] };\n\n/**\n * Documents the search provider rerank context payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderRerankContext {\n query: string;\n mode: \"hybrid\";\n model: string;\n top_k: number;\n settings: PmSettings;\n candidates: SearchProviderRerankCandidate[];\n [key: string]: unknown;\n}\n\n/**\n * Documents the search provider embed batch context payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderEmbedBatchContext {\n inputs: string[];\n settings: PmSettings;\n model: string;\n [key: string]: unknown;\n}\n\n/**\n * Documents the search provider embed context payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderEmbedContext {\n input: string;\n settings: PmSettings;\n model: string;\n [key: string]: unknown;\n}\n\n/**\n * Documents the search provider definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchProviderDefinition {\n name: string;\n query?: (context: SearchProviderQueryContext) => SearchProviderQueryResult | Promise<SearchProviderQueryResult>;\n queryExpansion?: (\n context: SearchProviderQueryExpansionContext,\n ) => SearchProviderQueryExpansionResult | Promise<SearchProviderQueryExpansionResult>;\n query_expansion?: (\n context: SearchProviderQueryExpansionContext,\n ) => SearchProviderQueryExpansionResult | Promise<SearchProviderQueryExpansionResult>;\n rerank?: (context: SearchProviderRerankContext) => SearchProviderRerankResult | Promise<SearchProviderRerankResult>;\n embedBatch?: (context: SearchProviderEmbedBatchContext) => number[][] | Promise<number[][]>;\n embed_batch?: (context: SearchProviderEmbedBatchContext) => number[][] | Promise<number[][]>;\n embed?: (context: SearchProviderEmbedContext) => number[] | Promise<number[]>;\n [key: string]: unknown;\n}\n\n/**\n * Documents the vector store query hit payload exchanged by command, SDK, and package integrations.\n */\nexport interface VectorStoreQueryHit {\n id: string;\n score: number;\n payload?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n/**\n * Documents the vector store query context payload exchanged by command, SDK, and package integrations.\n */\nexport interface VectorStoreQueryContext {\n vector: number[];\n limit: number;\n settings: PmSettings;\n [key: string]: unknown;\n}\n\n/**\n * Documents the vector store upsert point payload exchanged by command, SDK, and package integrations.\n */\nexport interface VectorStoreUpsertPoint {\n id: string;\n vector: number[];\n payload?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\n/**\n * Documents the vector store upsert context payload exchanged by command, SDK, and package integrations.\n */\nexport interface VectorStoreUpsertContext {\n points: VectorStoreUpsertPoint[];\n settings: PmSettings;\n [key: string]: unknown;\n}\n\n/**\n * Documents the vector store delete context payload exchanged by command, SDK, and package integrations.\n */\nexport interface VectorStoreDeleteContext {\n ids: string[];\n settings: PmSettings;\n [key: string]: unknown;\n}\n\n/**\n * Documents the vector store adapter definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface VectorStoreAdapterDefinition {\n name: string;\n query?: (context: VectorStoreQueryContext) => VectorStoreQueryHit[] | Promise<VectorStoreQueryHit[]>;\n upsert?: (context: VectorStoreUpsertContext) => unknown | Promise<unknown>;\n delete?: (context: VectorStoreDeleteContext) => unknown | Promise<unknown>;\n [key: string]: unknown;\n}\n\n/**\n * Documents the registered extension command override payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionCommandOverride {\n layer: ExtensionLayer;\n name: string;\n command: string;\n run: CommandOverride;\n}\n\n/**\n * Documents the registered extension command handler payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionCommandHandler {\n layer: ExtensionLayer;\n name: string;\n command: string;\n run: CommandHandler;\n}\n\n/**\n * Documents the registered extension parser override payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionParserOverride {\n layer: ExtensionLayer;\n name: string;\n command: string;\n run: ParserOverride;\n}\n\n/**\n * Documents the registered extension preflight override payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionPreflightOverride {\n layer: ExtensionLayer;\n name: string;\n run: PreflightOverride;\n}\n\n/**\n * Documents the registered extension service override payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionServiceOverride {\n layer: ExtensionLayer;\n name: string;\n service: ExtensionServiceName;\n run: ServiceOverride;\n}\n\n/**\n * Documents the registered extension renderer override payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionRendererOverride {\n layer: ExtensionLayer;\n name: string;\n format: OutputRendererFormat;\n run: RendererOverride;\n}\n\n/**\n * Documents the extension command registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionCommandRegistry {\n overrides: RegisteredExtensionCommandOverride[];\n handlers: RegisteredExtensionCommandHandler[];\n}\n\n/**\n * Documents the extension parser registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionParserRegistry {\n overrides: RegisteredExtensionParserOverride[];\n}\n\n/**\n * Documents the extension preflight registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionPreflightRegistry {\n overrides: RegisteredExtensionPreflightOverride[];\n}\n\n/**\n * Documents the extension service registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionServiceRegistry {\n overrides: RegisteredExtensionServiceOverride[];\n}\n\n/**\n * Documents the extension renderer registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionRendererRegistry {\n overrides: RegisteredExtensionRendererOverride[];\n}\n\n/**\n * Documents the registered extension flag definitions payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionFlagDefinitions {\n layer: ExtensionLayer;\n name: string;\n target_command: string;\n flags: FlagDefinition[];\n}\n\n/**\n * Documents the registered extension command definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionCommandDefinition {\n layer: ExtensionLayer;\n name: string;\n source_package?: string;\n command: string;\n action: string;\n description?: string;\n intent?: string;\n examples: string[];\n failure_hints: string[];\n arguments: ExtensionCommandArgumentDefinition[];\n}\n\n/**\n * Documents the registered extension schema field definitions payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionSchemaFieldDefinitions {\n layer: ExtensionLayer;\n name: string;\n fields: SchemaFieldDefinition[];\n}\n\n/**\n * Documents the registered extension schema item type definitions payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionSchemaItemTypeDefinitions {\n layer: ExtensionLayer;\n name: string;\n types: SchemaItemTypeDefinition[];\n}\n\n/**\n * Documents the registered extension schema migration definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionSchemaMigrationDefinition {\n layer: ExtensionLayer;\n name: string;\n definition: SchemaMigrationDefinition;\n runtime_definition: SchemaMigrationDefinition;\n}\n\n/**\n * Documents the registered extension importer payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionImporter {\n layer: ExtensionLayer;\n name: string;\n importer: string;\n}\n\n/**\n * Documents the registered extension exporter payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionExporter {\n layer: ExtensionLayer;\n name: string;\n exporter: string;\n}\n\n/**\n * Documents the registered extension search provider payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionSearchProvider {\n layer: ExtensionLayer;\n name: string;\n definition: SearchProviderDefinition;\n runtime_definition: SearchProviderDefinition;\n}\n\n/**\n * Documents the registered extension vector store adapter payload exchanged by command, SDK, and package integrations.\n */\nexport interface RegisteredExtensionVectorStoreAdapter {\n layer: ExtensionLayer;\n name: string;\n definition: VectorStoreAdapterDefinition;\n runtime_definition: VectorStoreAdapterDefinition;\n}\n\n/**\n * Documents a project profile contributed by an extension via\n * `api.registerProfile(profile)`.\n *\n * A profile is the broadest customization primitive an extension can ship: it\n * bundles item types, custom statuses, fields, per-type workflows, config knobs,\n * create templates, and package recommendations into one declarative archetype\n * that `pm profile apply` stages idempotently — the same shape as the\n * core-baked archetypes. Registering one makes it resolvable by name through\n * `pm profile list/show/apply` for as long as the owning package is active.\n */\nexport interface RegisteredExtensionProjectProfile {\n layer: ExtensionLayer;\n name: string;\n profile: ProjectProfileDefinition;\n}\n\n/**\n * Documents the extension registration registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionRegistrationRegistry {\n commands: RegisteredExtensionCommandDefinition[];\n flags: RegisteredExtensionFlagDefinitions[];\n item_fields: RegisteredExtensionSchemaFieldDefinitions[];\n item_types: RegisteredExtensionSchemaItemTypeDefinitions[];\n migrations: RegisteredExtensionSchemaMigrationDefinition[];\n profiles: RegisteredExtensionProjectProfile[];\n importers: RegisteredExtensionImporter[];\n exporters: RegisteredExtensionExporter[];\n search_providers: RegisteredExtensionSearchProvider[];\n vector_store_adapters: RegisteredExtensionVectorStoreAdapter[];\n}\n\n/**\n * Documents the extension registration counts payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionRegistrationCounts {\n commands: number;\n flags: number;\n item_fields: number;\n item_types: number;\n migrations: number;\n profiles: number;\n importers: number;\n exporters: number;\n search_providers: number;\n vector_store_adapters: number;\n}\n\n/**\n * Read-only identity an extension's `activate(api)` receives about itself, so\n * authors can emit self-identifying logs, gate on their own version, and build\n * better error messages without re-reading the on-disk manifest or duplicating\n * metadata in-module. Exposed as `api.extension`.\n */\nexport interface ExtensionSelfIdentity {\n readonly name: string;\n readonly layer: ExtensionLayer;\n readonly version: string;\n readonly capabilities: readonly ExtensionCapability[];\n readonly pm_min_version?: string;\n readonly pm_max_version?: string;\n readonly source_package?: string;\n}\n\n/**\n * Documents the extension api payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionApi {\n /** Read-only identity of the extension this `api` was created for. */\n readonly extension: ExtensionSelfIdentity;\n registerCommand(command: string, override: CommandOverride): void;\n registerCommand(definition: CommandDefinition): void;\n registerParser(command: string, override: ParserOverride): void;\n registerPreflight(override: PreflightOverride): void;\n registerService(service: ExtensionServiceName, override: ServiceOverride): void;\n registerFlags(targetCommand: string, flags: FlagDefinition[]): void;\n registerItemFields(fields: SchemaFieldDefinition[]): void;\n registerItemTypes(types: SchemaItemTypeDefinition[]): void;\n registerMigration(definition: SchemaMigrationDefinition): void;\n registerProfile(profile: ProjectProfileRegistrationInput): void;\n registerRenderer(format: OutputRendererFormat, renderer: RendererOverride): void;\n registerImporter(name: string, importer: Importer, options?: ImportExportRegistrationOptions): void;\n registerExporter(name: string, exporter: Exporter, options?: ImportExportRegistrationOptions): void;\n registerSearchProvider(provider: SearchProviderDefinition): void;\n registerVectorStoreAdapter(adapter: VectorStoreAdapterDefinition): void;\n hooks: {\n beforeCommand(hook: BeforeCommandHook): void;\n afterCommand(hook: AfterCommandHook): void;\n onWrite(hook: OnWriteHook): void;\n onRead(hook: OnReadHook): void;\n onIndex(hook: OnIndexHook): void;\n };\n}\n\n/**\n * Documents the failed extension activation payload exchanged by command, SDK, and package integrations.\n */\nexport interface FailedExtensionActivation {\n layer: ExtensionLayer;\n name: string;\n entry_path: string;\n error: string;\n trace?: ExtensionActivationFailureTrace;\n}\n\n/**\n * Documents the extension activation failure trace payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionActivationFailureTrace {\n method: string;\n /** `-1` means the failure happened before a numbered registration was accepted. */\n registration_index: number;\n command?: string;\n capability?: ExtensionCapability;\n missing_capability?: ExtensionCapability;\n expected_schema: string;\n received?: unknown;\n hint?: string;\n}\n\n/**\n * Documents the extension activation result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionActivationResult {\n hooks: ExtensionHookRegistry;\n commands: ExtensionCommandRegistry;\n parsers: ExtensionParserRegistry;\n preflight: ExtensionPreflightRegistry;\n services: ExtensionServiceRegistry;\n renderers: ExtensionRendererRegistry;\n registrations: ExtensionRegistrationRegistry;\n failed: FailedExtensionActivation[];\n warnings: string[];\n hook_counts: {\n before_command: number;\n after_command: number;\n on_write: number;\n on_read: number;\n on_index: number;\n };\n command_override_count: number;\n command_handler_count: number;\n parser_override_count: number;\n preflight_override_count: number;\n service_override_count: number;\n renderer_override_count: number;\n registration_counts: ExtensionRegistrationCounts;\n}\n\n/**\n * Documents the extension candidate payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionCandidate {\n layer: ExtensionLayer;\n directory: string;\n manifest_path: string;\n entry_path: string;\n manifest: ExtensionManifest;\n source_package?: string;\n}\n\n/**\n * Documents the extension layer scan result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionLayerScanResult {\n diagnostics: ExtensionDiagnostic[];\n warnings: string[];\n candidates: ExtensionCandidate[];\n}\n\n/**\n * Documents the scanned extension directory payload exchanged by command, SDK, and package integrations.\n */\nexport interface ScannedExtensionDirectory {\n diagnostic: ExtensionDiagnostic;\n warnings: string[];\n candidate: ExtensionCandidate | null;\n}\n\n/**\n * Documents the legacy extension capability alias mapping payload exchanged by command, SDK, and package integrations.\n */\nexport interface LegacyExtensionCapabilityAliasMapping {\n alias: string;\n target: ExtensionCapability;\n}\n\n/**\n * Documents the discover extensions options payload exchanged by command, SDK, and package integrations.\n */\nexport interface DiscoverExtensionsOptions {\n pmRoot: string;\n settings: PmSettings;\n cwd?: string;\n noExtensions?: boolean;\n reload_token?: string;\n cache_bust?: boolean;\n /**\n * Optional import-stage filter. Discovery still reports the full effective set,\n * but `loadExtensions` imports only entries accepted by this predicate.\n */\n extensionFilter?: (extension: EffectiveExtension) => boolean;\n}\n\n/**\n * Documents the activatable extension payload exchanged by command, SDK, and package integrations.\n */\nexport interface ActivatableExtension {\n activate: (api: ExtensionApi) => void | Promise<void>;\n /**\n * Optional teardown lifecycle hook, analogous to VS Code's `deactivate`\n * export. Invoked when the host tears the extension down — on long-running\n * MCP-server reload between requests, or via the `deactivateExtensions`\n * primitive — so an extension can close connections, clear timers, and\n * release buffers it opened during `activate`.\n */\n deactivate?: () => void | Promise<void>;\n}\n\n/**\n * Documents the extension deactivation failure payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionDeactivationFailure {\n layer: ExtensionLayer;\n name: string;\n error: string;\n}\n\n/**\n * Documents the extension deactivation options payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionDeactivationOptions {\n /**\n * Maximum time to wait for each extension's `deactivate` hook. Defaults to\n * 5000ms so a hanging teardown cannot block host shutdown or reload. Set to\n * 0 or Infinity only when the host intentionally wants to wait indefinitely.\n */\n deactivate_timeout_ms?: number;\n}\n\n/**\n * Documents the extension deactivation result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionDeactivationResult {\n /** Count of loaded extensions whose `deactivate` hook ran without throwing. */\n deactivated: number;\n warnings: string[];\n failed: ExtensionDeactivationFailure[];\n}\n\n/**\n * Documents the service override result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ServiceOverrideResult {\n handled: boolean;\n result: unknown;\n warnings: string[];\n}\n\n/**\n * Documents the command override result payload exchanged by command, SDK, and package integrations.\n */\nexport interface CommandOverrideResult {\n overridden: boolean;\n result: unknown;\n warnings: string[];\n}\n\n/**\n * Documents the command handler result payload exchanged by command, SDK, and package integrations.\n */\nexport interface CommandHandlerResult {\n handled: boolean;\n result: unknown;\n warnings: string[];\n /**\n * Human-readable, single-line, length-bounded message describing why an\n * extension command handler failed. Surfaced to the user/CI so the real cause\n * (e.g. \"Changelog is out of date: CHANGELOG.md\") is visible instead of only\n * the opaque `extension_command_handler_failed` warning code.\n */\n errorMessage?: string;\n}\n\n/**\n * Documents the parser override result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ParserOverrideResult {\n overridden: boolean;\n context: CommandHandlerContext;\n warnings: string[];\n}\n\n/**\n * Documents the preflight override result payload exchanged by command, SDK, and package integrations.\n */\nexport interface PreflightOverrideResult {\n overridden: boolean;\n context: CommandHandlerContext;\n decision: PreflightRuntimeDecision;\n warnings: string[];\n}\n\n/**\n * Documents the renderer override result payload exchanged by command, SDK, and package integrations.\n */\nexport interface RendererOverrideResult {\n overridden: boolean;\n rendered: string | null;\n warnings: string[];\n}\n\n/**\n * Documents the unknown extension capability warning details payload exchanged by command, SDK, and package integrations.\n */\nexport interface UnknownExtensionCapabilityWarningDetails {\n layer: ExtensionLayer;\n name: string;\n capability: string;\n allowed_capabilities: string[];\n capability_contract_version: number;\n suggested_capability?: string;\n suggestion_source?: \"legacy_alias\" | \"nearest_match\";\n legacy_alias_target?: string;\n}\n", "/**\n * @module core/shared/constants\n *\n * Provides shared primitives and utilities for Constants.\n */\nimport type {\n BuiltinItemType,\n GovernancePreset,\n GovernanceSettings,\n ItemFrontMatter,\n PmSettings,\n RuntimeStatusDefinition,\n RuntimeWorkflowDefinition,\n} from \"../../types/index.js\";\nimport { createDefaultExtensionGovernancePolicy } from \"../extensions/extension-types.js\";\n\n/**\n * Canonical default lifecycle status model and workflow role mapping.\n *\n * Single source of truth: `SETTINGS_DEFAULTS.schema` references these, and\n * `src/core/schema/runtime-schema.ts` re-exports them as\n * `DEFAULT_RUNTIME_STATUS_DEFINITIONS` / `DEFAULT_RUNTIME_WORKFLOW`.\n */\nexport const DEFAULT_STATUS_DEFINITIONS: ReadonlyArray<RuntimeStatusDefinition> = Object.freeze([\n {\n id: \"draft\",\n roles: [\"draft\"],\n },\n {\n id: \"open\",\n roles: [\"active\", \"default_open\"],\n },\n {\n id: \"in_progress\",\n aliases: [\"in-progress\"],\n roles: [\"active\"],\n },\n {\n id: \"blocked\",\n roles: [\"blocked\"],\n },\n {\n id: \"closed\",\n roles: [\"terminal\", \"terminal_done\", \"default_close\"],\n },\n {\n id: \"canceled\",\n aliases: [\"cancelled\"],\n roles: [\"terminal\", \"terminal_canceled\", \"default_cancel\"],\n },\n]);\n\nexport const DEFAULT_WORKFLOW_DEFINITION: RuntimeWorkflowDefinition = Object.freeze({\n draft_status: \"draft\",\n open_status: \"open\",\n in_progress_status: \"in_progress\",\n blocked_status: \"blocked\",\n close_status: \"closed\",\n canceled_status: \"canceled\",\n});\n\nexport const PM_DIRNAME = \".agents/pm\";\nexport const SETTINGS_FILENAME = \"settings.json\";\n\n/**\n * GH-249: placeholder close reason recorded when `pm create --status closed`\n * lands an item directly in the close status under\n * `governance.require_close_reason` and no --message/--resolution text is\n * available. Mirrors `pm update --status closed`'s \"Closed via pm update\"\n * default so all three closure paths record a reason.\n */\nexport const CREATE_DIRECT_CLOSE_REASON_DEFAULT = \"Closed at creation via pm create\";\n\nexport const PM_CORE_REQUIRED_SUBDIRS = [\n \"\",\n \"epics\",\n \"features\",\n \"tasks\",\n \"chores\",\n \"issues\",\n \"schema\",\n \"history\",\n \"search\",\n \"extensions\",\n \"locks\",\n] as const;\n\nexport const PM_OPTIONAL_TYPE_SUBDIRS = [\n \"decisions\",\n \"events\",\n \"reminders\",\n \"milestones\",\n \"meetings\",\n \"plans\",\n] as const;\n\nexport const PM_REQUIRED_SUBDIRS = [...PM_CORE_REQUIRED_SUBDIRS, ...PM_OPTIONAL_TYPE_SUBDIRS] as const;\n\nexport const TYPE_TO_FOLDER: Record<BuiltinItemType, string> = {\n Epic: \"epics\",\n Feature: \"features\",\n Task: \"tasks\",\n Chore: \"chores\",\n Issue: \"issues\",\n Decision: \"decisions\",\n Event: \"events\",\n Reminder: \"reminders\",\n Milestone: \"milestones\",\n Meeting: \"meetings\",\n Plan: \"plans\",\n};\n\nexport const FRONT_MATTER_KEY_ORDER: ReadonlyArray<string> = [\n \"id\",\n \"title\",\n \"description\",\n \"type\",\n \"pm_format_version\",\n \"source_type\",\n \"type_options\",\n \"status\",\n \"priority\",\n \"tags\",\n \"created_at\",\n \"updated_at\",\n \"deadline\",\n \"reminders\",\n \"events\",\n \"closed_at\",\n \"assignee\",\n \"source_owner\",\n \"author\",\n \"estimated_minutes\",\n \"acceptance_criteria\",\n \"design\",\n \"external_ref\",\n \"definition_of_ready\",\n \"order\",\n \"goal\",\n \"objective\",\n \"value\",\n \"impact\",\n \"outcome\",\n \"why_now\",\n \"parent\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n \"blocked_by\",\n \"blocked_reason\",\n \"unblock_note\",\n \"reporter\",\n \"severity\",\n \"environment\",\n \"repro_steps\",\n \"resolution\",\n \"expected_result\",\n \"actual_result\",\n \"affected_version\",\n \"fixed_version\",\n \"component\",\n \"regression\",\n \"customer_impact\",\n \"dependencies\",\n \"comments\",\n \"notes\",\n \"learnings\",\n \"files\",\n \"tests\",\n \"test_runs\",\n \"docs\",\n \"close_reason\",\n \"duplicate_of\",\n \"plan_mode\",\n \"plan_scope\",\n \"plan_harness\",\n \"plan_resume_context\",\n \"plan_validation\",\n \"plan_decisions\",\n \"plan_discoveries\",\n \"plan_steps\",\n];\n\ntype BuiltinGovernancePreset = Exclude<GovernancePreset, \"custom\">;\n\nexport const GOVERNANCE_PRESET_DEFAULTS: Record<BuiltinGovernancePreset, Omit<GovernanceSettings, \"preset\">> = {\n minimal: {\n ownership_enforcement: \"none\",\n create_mode_default: \"progressive\",\n close_validation_default: \"off\",\n require_close_reason: true,\n parent_reference: \"strict_error\",\n metadata_profile: \"core\",\n force_required_for_stale_lock: false,\n },\n default: {\n ownership_enforcement: \"warn\",\n create_mode_default: \"progressive\",\n close_validation_default: \"warn\",\n require_close_reason: true,\n parent_reference: \"strict_error\",\n metadata_profile: \"core\",\n force_required_for_stale_lock: true,\n },\n strict: {\n ownership_enforcement: \"strict\",\n create_mode_default: \"strict\",\n close_validation_default: \"strict\",\n require_close_reason: true,\n parent_reference: \"strict_error\",\n metadata_profile: \"strict\",\n force_required_for_stale_lock: true,\n },\n};\n\nexport const DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS = [\n \"no active blocker\",\n \"ready for planned execution sequencing\",\n \"work completed\",\n \"work is closed\",\n] as const;\n\nexport const DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS = {\n blocked_reason: [\"no active blocker because work is closed\", \"work is closed\"],\n resolution: [\"closed with implementation evidence\", \"closed with verification evidence\", \"work completed and recorded\", \"work is closed\"],\n actual_result: [\"closed and recorded\", \"work completed\", \"work completed and recorded\"],\n} as const;\n\nfunction cloneOptionalArray<T>(values: readonly T[] | undefined): T[] | undefined {\n return values ? [...values] : undefined;\n}\n\nexport const SETTINGS_DEFAULTS: PmSettings = {\n version: 1,\n id_prefix: \"pm-\",\n author_default: \"\",\n item_format: \"toon\",\n locks: {\n ttl_seconds: 1800,\n wait_ms: 3000,\n },\n checkpoints: {\n retention_days: 14,\n },\n output: {\n default_format: \"toon\",\n },\n history: {\n missing_stream: \"auto_create\",\n compact_policy: {\n enabled: false,\n max_entries: 500,\n trigger: \"health_warn\",\n },\n },\n validation: {\n sprint_release_format: \"warn\",\n parent_reference: \"warn\",\n metadata_profile: \"core\",\n metadata_required_fields: [],\n lifecycle_stale_blocker_reason_patterns: [...DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS],\n lifecycle_closure_like_blocked_reason_patterns: [\n ...DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.blocked_reason,\n ],\n lifecycle_closure_like_resolution_patterns: [...DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.resolution],\n lifecycle_closure_like_actual_result_patterns: [\n ...DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.actual_result,\n ],\n estimate_defaults_by_type: {},\n },\n governance: {\n preset: \"minimal\",\n ...GOVERNANCE_PRESET_DEFAULTS.minimal,\n },\n workflow: {\n definition_of_done: [],\n },\n testing: {\n record_results_to_items: false,\n },\n telemetry: {\n enabled: true,\n first_run_prompt_completed: false,\n capture_level: \"redacted\",\n endpoint: \"https://pm-cli.unbrained.dev/v1/events\",\n installation_id: \"\",\n retention_days: 365,\n },\n agent_guidance: {\n prompt_completed: false,\n declined: false,\n declined_at: \"\",\n template_version: 1,\n last_checked_files: [],\n },\n item_types: {\n definitions: [],\n },\n schema: {\n version: 1,\n files: {\n types: \"schema/types.json\",\n statuses: \"schema/statuses.json\",\n fields: \"schema/fields.json\",\n workflows: \"schema/workflows.json\",\n },\n statuses: DEFAULT_STATUS_DEFINITIONS.map((definition) => ({\n ...definition,\n aliases: cloneOptionalArray(definition.aliases),\n roles: cloneOptionalArray(definition.roles),\n })),\n fields: [],\n workflow: { ...DEFAULT_WORKFLOW_DEFINITION },\n unknown_field_policy: \"allow\",\n },\n extensions: {\n enabled: [],\n disabled: [],\n policy: createDefaultExtensionGovernancePolicy(),\n },\n search: {\n score_threshold: 0,\n hybrid_semantic_weight: 0.7,\n max_results: 50,\n embedding_model: \"\",\n embedding_batch_size: 32,\n embedding_timeout_ms: 30_000,\n scanner_max_batch_retries: 3,\n provider: \"\",\n mutation_refresh_policy: \"semantic_configured\",\n query_expansion: {\n enabled: false,\n provider: \"\",\n },\n rerank: {\n enabled: false,\n model: \"\",\n top_k: 20,\n },\n },\n providers: {\n openai: {\n base_url: \"\",\n api_key: \"\",\n model: \"\",\n },\n ollama: {\n base_url: \"\",\n model: \"\",\n },\n },\n context: {\n default_depth: \"brief\",\n activity_limit: 10,\n stale_threshold_days: 7,\n sections: {\n hierarchy: true,\n activity: true,\n progress: true,\n recently_created: true,\n unparented: true,\n blockers: true,\n files: true,\n workload: true,\n staleness: true,\n tests: true,\n },\n },\n vector_store: {\n adapter: \"\",\n collection_name: \"pm_items\",\n qdrant: {\n url: \"\",\n api_key: \"\",\n },\n lancedb: {\n path: \"\",\n },\n },\n};\n\nexport const EMPTY_CANONICAL_DOCUMENT = {\n metadata: {},\n body: \"\",\n};\n\nexport const EXIT_CODE = {\n SUCCESS: 0,\n GENERIC_FAILURE: 1,\n USAGE: 2,\n NOT_FOUND: 3,\n CONFLICT: 4,\n DEPENDENCY_FAILED: 5,\n} as const;\n\n/**\n * Restricts telemetry error category values accepted by command, SDK, and storage contracts.\n */\nexport type TelemetryErrorCategory = \"usage\" | \"validation\" | \"conflict\" | \"runtime\" | \"unknown\";\n\nexport const TELEMETRY_ERROR_CATEGORY_BY_CODE: Readonly<Record<string, TelemetryErrorCategory>> = Object.freeze({\n unknown_command: \"usage\",\n unknown_option: \"usage\",\n missing_required_option: \"usage\",\n missing_required_argument: \"usage\",\n invalid_command_usage: \"usage\",\n linked_test_value_not_quoted: \"usage\",\n invalid_argument_value: \"validation\",\n health_findings: \"validation\",\n validation_findings: \"validation\",\n close_through_update: \"validation\",\n no_update_fields: \"validation\",\n unsupported_update_option: \"validation\",\n tracker_not_initialized: \"validation\",\n item_not_found: \"validation\",\n ownership_conflict: \"conflict\",\n lock_conflict: \"conflict\",\n terminal_state_conflict: \"conflict\",\n dependency_failed: \"runtime\",\n command_failed: \"runtime\",\n unknown_error: \"runtime\",\n});\n\n/**\n * Implements resolve telemetry error category for the public runtime surface of this module.\n */\nexport function resolveTelemetryErrorCategory(errorCode: string | undefined): TelemetryErrorCategory {\n const normalized = (errorCode ?? \"\").trim().toLowerCase();\n if (normalized.length === 0) {\n return \"unknown\";\n }\n const explicit = TELEMETRY_ERROR_CATEGORY_BY_CODE[normalized];\n if (typeof explicit === \"string\") {\n return explicit;\n }\n if (normalized.includes(\"conflict\") || normalized.includes(\"locked\")) {\n return \"conflict\";\n }\n if (normalized.startsWith(\"unknown_\") || normalized.startsWith(\"missing_required_\")) {\n return \"usage\";\n }\n if (normalized.startsWith(\"invalid_\") || normalized.endsWith(\"_not_found\") || normalized.includes(\"validation\")) {\n return \"validation\";\n }\n if (normalized.endsWith(\"_error\") || normalized.endsWith(\"_failed\")) {\n return \"runtime\";\n }\n return \"unknown\";\n}\n", "/**\n * @module types\n *\n * Defines the shared project-management data model used by CLI, SDK, MCP, and packages.\n */\nexport const BUILTIN_ITEM_TYPE_VALUES = [\n \"Epic\",\n \"Feature\",\n \"Task\",\n \"Chore\",\n \"Issue\",\n \"Decision\",\n \"Event\",\n \"Reminder\",\n \"Milestone\",\n \"Meeting\",\n \"Plan\",\n] as const;\nexport const ITEM_TYPE_VALUES = BUILTIN_ITEM_TYPE_VALUES;\n/**\n * Restricts builtin item type values accepted by command, SDK, and storage contracts.\n */\nexport type BuiltinItemType = (typeof BUILTIN_ITEM_TYPE_VALUES)[number];\n/**\n * Restricts item type values accepted by command, SDK, and storage contracts.\n */\nexport type ItemType = string;\n\nexport const STATUS_VALUES = [\n \"draft\",\n \"open\",\n \"in_progress\",\n \"blocked\",\n \"closed\",\n \"canceled\",\n] as const;\n/**\n * Restricts item status values accepted by command, SDK, and storage contracts.\n */\nexport type ItemStatus = string;\n\nexport const RUNTIME_STATUS_ROLE_VALUES = [\n \"draft\",\n \"active\",\n \"blocked\",\n \"terminal\",\n \"terminal_done\",\n \"terminal_canceled\",\n \"default_open\",\n \"default_close\",\n \"default_cancel\",\n] as const;\n/**\n * Restricts runtime status role values accepted by command, SDK, and storage contracts.\n */\nexport type RuntimeStatusRole = (typeof RUNTIME_STATUS_ROLE_VALUES)[number];\n\nexport const RUNTIME_FIELD_TYPE_VALUES = [\"string\", \"number\", \"boolean\", \"string_array\"] as const;\n/**\n * Restricts runtime field type values accepted by command, SDK, and storage contracts.\n */\nexport type RuntimeFieldType = (typeof RUNTIME_FIELD_TYPE_VALUES)[number];\n\nexport const RUNTIME_FIELD_COMMAND_VALUES = [\"create\", \"update\", \"update_many\", \"list\", \"search\", \"calendar\", \"context\"] as const;\n/**\n * Restricts runtime field command values accepted by command, SDK, and storage contracts.\n */\nexport type RuntimeFieldCommand = (typeof RUNTIME_FIELD_COMMAND_VALUES)[number];\n\nexport const RUNTIME_UNKNOWN_FIELD_POLICY_VALUES = [\"allow\", \"warn\", \"reject\"] as const;\n/**\n * Restricts runtime unknown field policy values accepted by command, SDK, and storage contracts.\n */\nexport type RuntimeUnknownFieldPolicy = (typeof RUNTIME_UNKNOWN_FIELD_POLICY_VALUES)[number];\n\nexport const DEPENDENCY_KIND_VALUES = [\n \"blocks\",\n \"parent\",\n \"child\",\n \"parent_child\",\n \"child_of\",\n \"related\",\n \"related_to\",\n \"discovered_from\",\n \"blocked_by\",\n \"incident_from\",\n \"epic\",\n \"supersedes\",\n \"task\",\n] as const;\n/**\n * Restricts dependency kind values accepted by command, SDK, and storage contracts.\n */\nexport type DependencyKind = (typeof DEPENDENCY_KIND_VALUES)[number];\n\nexport const SCOPE_VALUES = [\"project\", \"global\"] as const;\n/**\n * Restricts link scope values accepted by command, SDK, and storage contracts.\n */\nexport type LinkScope = (typeof SCOPE_VALUES)[number];\n\nexport const RISK_VALUES = [\"low\", \"medium\", \"high\", \"critical\"] as const;\n/**\n * Restricts risk level values accepted by command, SDK, and storage contracts.\n */\nexport type RiskLevel = (typeof RISK_VALUES)[number];\n\nexport const ISSUE_SEVERITY_VALUES = [\"low\", \"medium\", \"high\", \"critical\"] as const;\n/**\n * Restricts issue severity values accepted by command, SDK, and storage contracts.\n */\nexport type IssueSeverity = (typeof ISSUE_SEVERITY_VALUES)[number];\n\nexport const CONFIDENCE_TEXT_VALUES = [\"low\", \"medium\", \"high\"] as const;\n/**\n * Restricts confidence text level values accepted by command, SDK, and storage contracts.\n */\nexport type ConfidenceTextLevel = (typeof CONFIDENCE_TEXT_VALUES)[number];\n/**\n * Restricts confidence value values accepted by command, SDK, and storage contracts.\n */\nexport type ConfidenceValue = number | ConfidenceTextLevel;\n\nexport const ITEM_FORMAT_VALUES = [\"toon\", \"json_markdown\"] as const;\n/**\n * Restricts item format values accepted by command, SDK, and storage contracts.\n */\nexport type ItemFormat = (typeof ITEM_FORMAT_VALUES)[number];\n\nexport const SPRINT_RELEASE_FORMAT_POLICY_VALUES = [\"warn\", \"strict_error\"] as const;\n/**\n * Restricts sprint release format policy values accepted by command, SDK, and storage contracts.\n */\nexport type SprintReleaseFormatPolicy = (typeof SPRINT_RELEASE_FORMAT_POLICY_VALUES)[number];\nexport const PARENT_REFERENCE_POLICY_VALUES = [\"warn\", \"strict_error\"] as const;\n/**\n * Restricts parent reference policy values accepted by command, SDK, and storage contracts.\n */\nexport type ParentReferencePolicy = (typeof PARENT_REFERENCE_POLICY_VALUES)[number];\nexport const VALIDATE_METADATA_PROFILE_VALUES = [\"core\", \"strict\", \"custom\"] as const;\n/**\n * Restricts validate metadata profile values accepted by command, SDK, and storage contracts.\n */\nexport type ValidateMetadataProfile = (typeof VALIDATE_METADATA_PROFILE_VALUES)[number];\nexport const GOVERNANCE_PRESET_VALUES = [\"minimal\", \"default\", \"strict\", \"custom\"] as const;\n/**\n * Restricts governance preset values accepted by command, SDK, and storage contracts.\n */\nexport type GovernancePreset = (typeof GOVERNANCE_PRESET_VALUES)[number];\nexport const GOVERNANCE_OWNERSHIP_ENFORCEMENT_VALUES = [\"none\", \"warn\", \"strict\"] as const;\n/**\n * Restricts governance ownership enforcement values accepted by command, SDK, and storage contracts.\n */\nexport type GovernanceOwnershipEnforcement = (typeof GOVERNANCE_OWNERSHIP_ENFORCEMENT_VALUES)[number];\nexport const GOVERNANCE_CREATE_MODE_DEFAULT_VALUES = [\"progressive\", \"strict\"] as const;\n/**\n * Restricts governance create mode default values accepted by command, SDK, and storage contracts.\n */\nexport type GovernanceCreateModeDefault = (typeof GOVERNANCE_CREATE_MODE_DEFAULT_VALUES)[number];\nexport const GOVERNANCE_CLOSE_VALIDATION_DEFAULT_VALUES = [\"off\", \"warn\", \"strict\"] as const;\n/**\n * Restricts governance close validation default values accepted by command, SDK, and storage contracts.\n */\nexport type GovernanceCloseValidationDefault = (typeof GOVERNANCE_CLOSE_VALIDATION_DEFAULT_VALUES)[number];\nexport const GOVERNANCE_WORKFLOW_ENFORCEMENT_VALUES = [\"off\", \"warn\", \"strict\"] as const;\n/**\n * Restricts governance workflow enforcement values accepted by command, SDK, and storage contracts.\n */\nexport type GovernanceWorkflowEnforcement = (typeof GOVERNANCE_WORKFLOW_ENFORCEMENT_VALUES)[number];\nexport const VALIDATE_METADATA_REQUIRED_FIELD_VALUES = [\n \"author\",\n \"acceptance_criteria\",\n \"estimated_minutes\",\n \"close_reason\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n] as const;\n/**\n * Restricts validate metadata required field values accepted by command, SDK, and storage contracts.\n */\nexport type ValidateMetadataRequiredField = (typeof VALIDATE_METADATA_REQUIRED_FIELD_VALUES)[number];\n\nexport const RECURRENCE_FREQUENCY_VALUES = [\"daily\", \"weekly\", \"monthly\", \"yearly\"] as const;\n/**\n * Restricts recurrence frequency values accepted by command, SDK, and storage contracts.\n */\nexport type RecurrenceFrequency = (typeof RECURRENCE_FREQUENCY_VALUES)[number];\n\nexport const RECURRENCE_WEEKDAY_VALUES = [\"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\", \"sun\"] as const;\n/**\n * Restricts recurrence weekday values accepted by command, SDK, and storage contracts.\n */\nexport type RecurrenceWeekday = (typeof RECURRENCE_WEEKDAY_VALUES)[number];\n\n/**\n * Canonical week-order index for a recurrence weekday (mon=0 .. sun=6).\n * Shared by item serialization, create/update parsing, and calendar expansion\n * so weekday ordering cannot drift between those modules.\n */\nexport function weekdayOrderIndex(value: RecurrenceWeekday): number {\n return RECURRENCE_WEEKDAY_VALUES.indexOf(value);\n}\n\n/**\n * Documents the dependency payload exchanged by command, SDK, and package integrations.\n */\nexport interface Dependency {\n id: string;\n kind: DependencyKind;\n created_at: string;\n author?: string;\n source_kind?: string;\n}\n\n/**\n * Documents the comment payload exchanged by command, SDK, and package integrations.\n */\nexport interface Comment {\n created_at: string;\n author: string;\n text: string;\n}\n\n/**\n * Documents the log note payload exchanged by command, SDK, and package integrations.\n */\nexport interface LogNote {\n created_at: string;\n author: string;\n text: string;\n}\n\n/**\n * Documents the linked file payload exchanged by command, SDK, and package integrations.\n */\nexport interface LinkedFile {\n path: string;\n scope: LinkScope;\n note?: string;\n}\n\n/**\n * Documents the linked test payload exchanged by command, SDK, and package integrations.\n */\nexport interface LinkedTest {\n command?: string;\n path?: string;\n scope: LinkScope;\n timeout_seconds?: number;\n pm_context_mode?: \"schema\" | \"tracker\" | \"auto\";\n env_set?: Record<string, string>;\n env_clear?: string[];\n shared_host_safe?: boolean;\n assert_stdout_contains?: string[];\n assert_stdout_regex?: string[];\n assert_stderr_contains?: string[];\n assert_stderr_regex?: string[];\n assert_stdout_min_lines?: number;\n assert_json_field_equals?: Record<string, string>;\n assert_json_field_gte?: Record<string, number>;\n note?: string;\n}\n\n/**\n * Documents the linked doc payload exchanged by command, SDK, and package integrations.\n */\nexport interface LinkedDoc {\n path: string;\n scope: LinkScope;\n note?: string;\n}\n\n/**\n * Documents the reminder payload exchanged by command, SDK, and package integrations.\n */\nexport interface Reminder {\n at: string;\n text: string;\n}\n\n/**\n * Documents the recurrence rule payload exchanged by command, SDK, and package integrations.\n */\nexport interface RecurrenceRule {\n freq: RecurrenceFrequency;\n interval?: number;\n count?: number;\n until?: string;\n by_weekday?: RecurrenceWeekday[];\n by_month_day?: number[];\n exdates?: string[];\n}\n\n/**\n * Documents the calendar event payload exchanged by command, SDK, and package integrations.\n */\nexport interface CalendarEvent {\n start_at: string;\n end_at?: string;\n title?: string;\n description?: string;\n location?: string;\n all_day?: boolean;\n timezone?: string;\n recurrence?: RecurrenceRule;\n}\n\nexport const PLAN_MODE_VALUES = [\n \"draft\",\n \"research\",\n \"review\",\n \"approved\",\n \"executing\",\n \"paused\",\n \"completed\",\n \"superseded\",\n] as const;\n/**\n * Restricts plan mode values accepted by command, SDK, and storage contracts.\n */\nexport type PlanMode = (typeof PLAN_MODE_VALUES)[number];\n\nexport const PLAN_STEP_STATUS_VALUES = [\n \"pending\",\n \"in_progress\",\n \"completed\",\n \"blocked\",\n \"skipped\",\n \"superseded\",\n] as const;\n/**\n * Restricts plan step status values accepted by command, SDK, and storage contracts.\n */\nexport type PlanStepStatus = (typeof PLAN_STEP_STATUS_VALUES)[number];\n\nexport const PLAN_HARNESS_VALUES = [\"codex\", \"claude-code\", \"cursor\", \"generic\"] as const;\n/**\n * Restricts plan harness values accepted by command, SDK, and storage contracts.\n */\nexport type PlanHarness = (typeof PLAN_HARNESS_VALUES)[number];\n\nexport const PLAN_STEP_LINK_KIND_VALUES = [\n \"related\",\n \"blocks\",\n \"blocked_by\",\n \"depends_on\",\n \"discovered_from\",\n \"implements\",\n \"verifies\",\n \"supersedes\",\n] as const;\n/**\n * Restricts plan step link kind values accepted by command, SDK, and storage contracts.\n */\nexport type PlanStepLinkKind = (typeof PLAN_STEP_LINK_KIND_VALUES)[number];\n\n/**\n * Documents the plan step link payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStepLink {\n id: string;\n kind: PlanStepLinkKind;\n note?: string;\n required_before_step?: boolean;\n}\n\n/**\n * Documents the plan step file payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStepFile {\n path: string;\n scope?: LinkScope;\n note?: string;\n}\n\n/**\n * Documents the plan step test payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStepTest {\n command?: string;\n path?: string;\n note?: string;\n}\n\n/**\n * Documents the plan step doc payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStepDoc {\n path: string;\n scope?: LinkScope;\n note?: string;\n}\n\n/**\n * Documents the plan step payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanStep {\n id: string;\n order: number;\n title: string;\n body?: string;\n status: PlanStepStatus;\n owner?: string;\n evidence?: string;\n blocked_reason?: string;\n superseded_by?: string;\n linked_items?: PlanStepLink[];\n files?: PlanStepFile[];\n tests?: PlanStepTest[];\n docs?: PlanStepDoc[];\n created_at: string;\n updated_at: string;\n completed_at?: string;\n}\n\n/**\n * Documents the plan decision payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanDecision {\n ts: string;\n author: string;\n decision: string;\n rationale?: string;\n evidence?: string;\n step_id?: string;\n}\n\n/**\n * Documents the plan discovery payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanDiscovery {\n ts: string;\n author: string;\n text: string;\n step_id?: string;\n}\n\n/**\n * Documents the plan validation check payload exchanged by command, SDK, and package integrations.\n */\nexport interface PlanValidationCheck {\n text: string;\n command?: string;\n expected?: string;\n}\n\n/**\n * Documents the item type option definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemTypeOptionDefinition {\n key: string;\n values: string[];\n required?: boolean;\n aliases?: string[];\n description?: string;\n}\n\n/**\n * Documents the item type command option policy payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemTypeCommandOptionPolicy {\n command: \"create\" | \"update\";\n option: string;\n required?: boolean;\n visible?: boolean;\n enabled?: boolean;\n}\n\n/**\n * Documents the item type definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemTypeDefinition {\n name: string;\n description?: string;\n /**\n * Status assigned to newly created items of this type when `--status` is not\n * provided. Falls back to the workflow's open status when unset or invalid.\n */\n default_status?: string;\n folder?: string;\n aliases?: string[];\n required_create_fields?: string[];\n required_create_repeatables?: string[];\n options?: ItemTypeOptionDefinition[];\n command_option_policies?: ItemTypeCommandOptionPolicy[];\n}\n\n/**\n * Documents the runtime status definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeStatusDefinition {\n id: string;\n aliases?: string[];\n roles?: RuntimeStatusRole[];\n description?: string;\n order?: number;\n}\n\n/**\n * Documents the runtime field definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeFieldDefinition {\n key: string;\n metadata_key?: string;\n /**\n * @deprecated Use metadata_key.\n */\n front_matter_key?: string;\n cli_flag?: string;\n cli_aliases?: string[];\n description?: string;\n type?: RuntimeFieldType;\n commands?: RuntimeFieldCommand[];\n repeatable?: boolean;\n required?: boolean;\n required_on_create?: boolean;\n required_types?: string[];\n allow_unset?: boolean;\n}\n\n/**\n * Documents the runtime workflow definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeWorkflowDefinition {\n draft_status?: string;\n open_status?: string;\n in_progress_status?: string;\n blocked_status?: string;\n close_status?: string;\n canceled_status?: string;\n}\n\n/**\n * Documents the runtime schema file config payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeSchemaFileConfig {\n types?: string;\n statuses?: string;\n fields?: string;\n workflows?: string;\n}\n\n/**\n * Per-type allowed-transition rule. A type with no matching entry is\n * unrestricted; a type with an entry allows only the listed [from, to]\n * status pairs (status tokens are resolved case-insensitively through the\n * status registry alias map; a same-status no-op is always allowed).\n */\nexport interface TypeWorkflowDefinition {\n type: string;\n allowed_transitions: [string, string][];\n}\n\n/**\n * Documents the runtime schema settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeSchemaSettings {\n version: number;\n files: RuntimeSchemaFileConfig;\n statuses: RuntimeStatusDefinition[];\n fields: RuntimeFieldDefinition[];\n workflow: RuntimeWorkflowDefinition;\n type_workflows?: TypeWorkflowDefinition[];\n unknown_field_policy: RuntimeUnknownFieldPolicy;\n}\n\n/**\n * Documents the item test run summary payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemTestRunSummary {\n run_id: string;\n kind: \"test\" | \"test-all\";\n status: \"passed\" | \"failed\" | \"stopped\" | \"canceled\";\n started_at: string;\n finished_at: string;\n recorded_at: string;\n attempt?: number;\n resumed_from?: string;\n passed: number;\n failed: number;\n skipped: number;\n items?: number;\n linked_tests?: number;\n fail_on_skipped_triggered?: boolean;\n}\n\n/**\n * Documents the item metadata payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemMetadata {\n id: string;\n title: string;\n description: string;\n type: ItemType;\n /**\n * On-disk front-matter format version. Absent means the implicit baseline\n * (version 1) and is never serialized; populated only once an item advances\n * past the baseline via a future storage migration. See\n * core/item/item-format-version.\n */\n pm_format_version?: number;\n source_type?: string;\n type_options?: Record<string, string>;\n status: ItemStatus;\n priority: 0 | 1 | 2 | 3 | 4;\n tags: string[];\n created_at: string;\n updated_at: string;\n deadline?: string;\n reminders?: Reminder[];\n events?: CalendarEvent[];\n closed_at?: string;\n assignee?: string;\n source_owner?: string;\n author?: string;\n estimated_minutes?: number;\n acceptance_criteria?: string;\n design?: string;\n external_ref?: string;\n definition_of_ready?: string;\n order?: number;\n goal?: string;\n objective?: string;\n value?: string;\n impact?: string;\n outcome?: string;\n why_now?: string;\n parent?: string;\n reviewer?: string;\n risk?: RiskLevel;\n confidence?: ConfidenceValue;\n sprint?: string;\n release?: string;\n blocked_by?: string;\n blocked_reason?: string;\n unblock_note?: string;\n reporter?: string;\n severity?: IssueSeverity;\n environment?: string;\n repro_steps?: string;\n resolution?: string;\n expected_result?: string;\n actual_result?: string;\n affected_version?: string;\n fixed_version?: string;\n component?: string;\n regression?: boolean;\n customer_impact?: string;\n dependencies?: Dependency[];\n comments?: Comment[];\n notes?: LogNote[];\n learnings?: LogNote[];\n files?: LinkedFile[];\n tests?: LinkedTest[];\n test_runs?: ItemTestRunSummary[];\n docs?: LinkedDoc[];\n close_reason?: string;\n duplicate_of?: string;\n plan_mode?: PlanMode;\n plan_scope?: string;\n plan_harness?: PlanHarness;\n plan_steps?: PlanStep[];\n plan_decisions?: PlanDecision[];\n plan_discoveries?: PlanDiscovery[];\n plan_validation?: PlanValidationCheck[];\n plan_resume_context?: string;\n [key: string]: unknown;\n}\n\n/**\n * @deprecated Use ItemMetadata.\n */\nexport type ItemFrontMatter = ItemMetadata;\n\n/**\n * Documents the item document payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemDocument {\n metadata: ItemMetadata;\n body: string;\n}\n\n/**\n * Documents the history patch op payload exchanged by command, SDK, and package integrations.\n */\nexport interface HistoryPatchOp {\n op: \"add\" | \"remove\" | \"replace\" | \"move\" | \"copy\" | \"test\";\n path: string;\n from?: string;\n value?: unknown;\n}\n\n/**\n * Documents the history entry payload exchanged by command, SDK, and package integrations.\n */\nexport interface HistoryEntry {\n ts: string;\n author: string;\n op: string;\n patch: HistoryPatchOp[];\n before_hash: string;\n after_hash: string;\n message?: string;\n}\n\nexport const CONTEXT_DEPTH_VALUES = [\"brief\", \"standard\", \"deep\", \"full\"] as const;\n/**\n * Restricts context depth values accepted by command, SDK, and storage contracts.\n */\nexport type ContextDepth = (typeof CONTEXT_DEPTH_VALUES)[number];\n\nexport const CONTEXT_SECTION_VALUES = [\n \"hierarchy\",\n \"activity\",\n \"progress\",\n \"recently_created\",\n \"unparented\",\n \"blockers\",\n \"files\",\n \"workload\",\n \"staleness\",\n \"tests\",\n] as const;\n/**\n * Restricts context section name values accepted by command, SDK, and storage contracts.\n */\nexport type ContextSectionName = (typeof CONTEXT_SECTION_VALUES)[number];\n\n/**\n * Documents the context section settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface ContextSectionSettings {\n hierarchy: boolean;\n activity: boolean;\n progress: boolean;\n recently_created: boolean;\n unparented: boolean;\n blockers: boolean;\n files: boolean;\n workload: boolean;\n staleness: boolean;\n tests: boolean;\n}\n\n/**\n * Documents the context settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface ContextSettings {\n default_depth: ContextDepth;\n activity_limit: number;\n stale_threshold_days: number;\n sections: ContextSectionSettings;\n}\n\n/**\n * Documents the governance settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface GovernanceSettings {\n preset: GovernancePreset;\n ownership_enforcement: GovernanceOwnershipEnforcement;\n create_mode_default: GovernanceCreateModeDefault;\n close_validation_default: GovernanceCloseValidationDefault;\n require_close_reason: boolean;\n parent_reference: ParentReferencePolicy;\n metadata_profile: ValidateMetadataProfile;\n force_required_for_stale_lock: boolean;\n create_default_type?: string;\n /**\n * Per-type allowed-transition enforcement mode for `pm update --status`.\n * Read raw from settings (not preset-derived) so existing projects are\n * unaffected when unset; defaults to \"off\".\n */\n workflow_enforcement?: GovernanceWorkflowEnforcement;\n}\n\n/**\n * Restricts extension policy mode values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionPolicyMode = \"off\" | \"warn\" | \"enforce\";\n/**\n * Restricts extension trust mode values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionTrustMode = \"off\" | \"warn\" | \"enforce\";\n/**\n * Restricts extension sandbox profile values accepted by command, SDK, and storage contracts.\n */\nexport type ExtensionSandboxProfile = \"none\" | \"restricted\" | \"strict\";\n\n/**\n * Documents the extension policy override settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionPolicyOverrideSettings {\n name: string;\n disabled?: boolean;\n require_trusted?: boolean;\n require_provenance?: boolean;\n sandbox_profile?: ExtensionSandboxProfile;\n allowed_capabilities?: string[];\n blocked_capabilities?: string[];\n allowed_surfaces?: string[];\n blocked_surfaces?: string[];\n allowed_commands?: string[];\n blocked_commands?: string[];\n allowed_actions?: string[];\n blocked_actions?: string[];\n allowed_services?: string[];\n blocked_services?: string[];\n}\n\n/**\n * Documents the extension policy settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface ExtensionPolicySettings {\n mode: ExtensionPolicyMode;\n trust_mode: ExtensionTrustMode;\n require_provenance: boolean;\n trusted_extensions: string[];\n default_sandbox_profile: ExtensionSandboxProfile;\n allowed_extensions: string[];\n blocked_extensions: string[];\n allowed_capabilities: string[];\n blocked_capabilities: string[];\n allowed_surfaces: string[];\n blocked_surfaces: string[];\n allowed_commands: string[];\n blocked_commands: string[];\n allowed_actions: string[];\n blocked_actions: string[];\n allowed_services: string[];\n blocked_services: string[];\n extension_overrides: ExtensionPolicyOverrideSettings[];\n}\n\n/**\n * Documents the agent guidance settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface AgentGuidanceSettings {\n prompt_completed: boolean;\n declined: boolean;\n declined_at: string;\n template_version: number;\n last_checked_files: string[];\n}\n\n/**\n * Restricts search mutation refresh policy values accepted by command, SDK, and storage contracts.\n */\nexport type SearchMutationRefreshPolicy = \"cache_only\" | \"semantic_configured\" | \"semantic_auto\";\n\n/**\n * Documents the search query expansion settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchQueryExpansionSettings {\n enabled: boolean;\n provider: string;\n}\n\n/**\n * Documents the search rerank settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface SearchRerankSettings {\n enabled: boolean;\n model: string;\n top_k: number;\n}\n\n/**\n * Config-driven policy for automatic history-stream compaction triage.\n *\n * When `enabled`, `pm health` surfaces an advisory warning for any history\n * stream whose non-empty entry count exceeds `max_entries`, and `pm\n * history-compact` bulk mode uses `max_entries` as its default `--all-over`\n * threshold so the configured policy drives corpus-wide sweeps. `trigger`\n * records operator intent — both values raise the health advisory; `auto`\n * additionally signals that scheduled/automatic sweeps are expected.\n */\nexport interface HistoryCompactPolicy {\n enabled: boolean;\n max_entries: number;\n trigger: \"health_warn\" | \"auto\";\n}\n\n/**\n * Documents the pm settings payload exchanged by command, SDK, and package integrations.\n */\nexport interface PmSettings {\n version: number;\n id_prefix: string;\n author_default: string;\n item_format: ItemFormat;\n locks: {\n ttl_seconds: number;\n /**\n * Bounded wait budget (milliseconds) for acquiring a contended item lock\n * before surfacing lock_conflict. 0 disables waiting (fail-fast).\n * Overridable per invocation via PM_LOCK_WAIT_MS.\n */\n wait_ms: number;\n };\n /**\n * Retention policy for bulk-mutation rollback checkpoints written by\n * `update-many`/`close-many`. `pm gc --scope checkpoints` prunes checkpoint\n * files older than `retention_days`; checkpoints with an unparseable\n * `created_at` are retained (safety-first, mirroring the stale-lock sweep).\n */\n checkpoints: {\n retention_days: number;\n };\n output: {\n default_format: \"toon\" | \"json\";\n };\n history: {\n missing_stream: \"auto_create\" | \"strict_error\";\n compact_policy: HistoryCompactPolicy;\n };\n validation: {\n sprint_release_format: SprintReleaseFormatPolicy;\n parent_reference: ParentReferencePolicy;\n metadata_profile: ValidateMetadataProfile;\n metadata_required_fields: ValidateMetadataRequiredField[];\n lifecycle_stale_blocker_reason_patterns: string[];\n lifecycle_closure_like_blocked_reason_patterns: string[];\n lifecycle_closure_like_resolution_patterns: string[];\n lifecycle_closure_like_actual_result_patterns: string[];\n /**\n * Per-type default estimates (minutes) used by `pm validate --auto-fix\n * --fix-scope estimates` to backfill missing `estimated_minutes` (GH-212).\n * Keys are item type names (case-insensitive); values are positive minutes\n * that override the built-in defaults. Empty by default.\n */\n estimate_defaults_by_type: Record<string, number>;\n };\n governance: GovernanceSettings;\n workflow: {\n definition_of_done: string[];\n };\n testing: {\n record_results_to_items: boolean;\n };\n telemetry: {\n enabled: boolean;\n first_run_prompt_completed: boolean;\n capture_level: \"minimal\" | \"redacted\" | \"max\";\n endpoint: string;\n installation_id: string;\n retention_days: number;\n };\n agent_guidance: AgentGuidanceSettings;\n item_types: {\n definitions: ItemTypeDefinition[];\n };\n schema: RuntimeSchemaSettings;\n extensions: {\n enabled: string[];\n disabled: string[];\n policy: ExtensionPolicySettings;\n };\n search: {\n score_threshold: number;\n hybrid_semantic_weight: number;\n max_results: number;\n embedding_model: string;\n embedding_corpus_max_characters?: number;\n embedding_batch_size: number;\n embedding_timeout_ms: number;\n scanner_max_batch_retries: number;\n provider?: string;\n /**\n * Optional allow-list of corpus field names embedded for semantic search\n * (see DEFAULT_SEARCH_CORPUS_FIELDS in core/search/corpus.ts). When unset or\n * empty, the full default field set is used (backward compatible). When set,\n * only the named fields are embedded — letting teams opt structured signals\n * (priority, assignee, risk, acceptance_criteria, etc.) in/out for token\n * efficiency. Changing this re-flags items stale on the next refresh.\n */\n corpus_fields?: string[];\n mutation_refresh_policy: SearchMutationRefreshPolicy;\n query_expansion: SearchQueryExpansionSettings;\n rerank: SearchRerankSettings;\n /**\n * Offline BM25 lexical-ranking parameters (pm-75k9), applied when\n * `search.provider` is `bm25` (or auto-selected as the offline fallback) for\n * semantic/hybrid queries. `k1` controls term-frequency saturation, `b`\n * controls document-length normalization. Unset → Lucene defaults (1.2/0.75).\n */\n bm25?: {\n k1?: number;\n b?: number;\n };\n tuning?: {\n title_exact_bonus?: number;\n title_weight?: number;\n description_weight?: number;\n tags_weight?: number;\n status_weight?: number;\n body_weight?: number;\n comments_weight?: number;\n notes_weight?: number;\n learnings_weight?: number;\n dependencies_weight?: number;\n linked_content_weight?: number;\n };\n };\n providers: {\n openai: {\n base_url: string;\n api_key: string;\n model: string;\n };\n ollama: {\n base_url: string;\n model: string;\n };\n };\n context: ContextSettings;\n vector_store: {\n adapter?: string;\n collection_name: string;\n qdrant: {\n url: string;\n api_key: string;\n };\n lancedb: {\n path: string;\n };\n };\n}\n", "/**\n * @module core/item/item-type-definition\n *\n * Defines item parsing, formatting, and lifecycle helpers for Item Type Definition.\n */\nimport type {\n ItemTypeCommandOptionPolicy,\n ItemTypeDefinition,\n ItemTypeOptionDefinition,\n} from \"../../types/index.js\";\n\n/**\n * Shared, pure normalization for {@link ItemTypeDefinition} objects, single-sourced\n * across the runtime item-type registry and settings persistence (pm-v798).\n *\n * The only genuine difference between the two callers is how a command-option\n * policy's `command` field is resolved:\n * - the runtime registry consumes untrusted extension/file definitions, so it\n * must trim+lowercase and reject anything that is not \"create\"/\"update\";\n * - settings persistence operates on already-validated definitions, so it keeps\n * the typed `command` value verbatim.\n *\n * That single difference is injected via {@link NormalizeItemTypeDefinitionOptions.resolvePolicyCommand};\n * everything else (name trim, optional folder, aliases, required_create_* fields,\n * options normalization, policy dedupe key + stable sort) is shared.\n */\n\n/** Dedupe + sort a string list: trim, drop blanks, unique, locale-sorted. */\nexport function normalizeItemTypeStringList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\n/** Normalize one type-option definition, or null when its key is blank. */\nexport function normalizeItemTypeOption(option: ItemTypeOptionDefinition): ItemTypeOptionDefinition | null {\n const key = option.key.trim();\n if (key.length === 0) {\n return null;\n }\n const aliases = normalizeItemTypeStringList(option.aliases);\n const description = option.description?.trim();\n return {\n key,\n values: normalizeItemTypeStringList(option.values),\n required: option.required === true ? true : undefined,\n aliases: aliases.length > 0 ? aliases : undefined,\n description: description && description.length > 0 ? description : undefined,\n };\n}\n\n/**\n * Resolves a raw policy `command` value to the canonical \"create\"/\"update\" type,\n * or null to drop the policy. Lets each layer plug in its own strictness.\n */\nexport type ResolvePolicyCommand = (command: string) => ItemTypeCommandOptionPolicy[\"command\"] | null;\n\n/**\n * Pass-through resolver used by settings persistence: the value is already typed\n * \"create\" | \"update\" by the settings validator, so it is kept verbatim.\n */\nexport const keepPolicyCommand: ResolvePolicyCommand = (command) =>\n command as ItemTypeCommandOptionPolicy[\"command\"];\n\n/**\n * Strict resolver used by the runtime registry: trims + lowercases and rejects\n * anything other than \"create\"/\"update\".\n */\nexport const strictPolicyCommand: ResolvePolicyCommand = (command) => {\n const normalized = command.trim().toLowerCase();\n return normalized === \"create\" || normalized === \"update\" ? normalized : null;\n};\n\n/** Normalize one command-option policy, or null when invalid (blank option / rejected command). */\nexport function normalizeItemTypeCommandOptionPolicy(\n policy: ItemTypeCommandOptionPolicy,\n resolvePolicyCommand: ResolvePolicyCommand,\n): ItemTypeCommandOptionPolicy | null {\n const command = resolvePolicyCommand(policy.command);\n if (command === null) {\n return null;\n }\n const option = policy.option.trim();\n if (option.length === 0) {\n return null;\n }\n return {\n command,\n option,\n required: policy.required,\n visible: policy.visible,\n enabled: policy.enabled,\n };\n}\n\n/** Dedupe by `${command}:${option-lowercased}` and stable-sort by command then option. */\nexport function normalizeItemTypeCommandOptionPolicies(\n policies: ItemTypeCommandOptionPolicy[] | undefined,\n resolvePolicyCommand: ResolvePolicyCommand,\n): ItemTypeCommandOptionPolicy[] {\n const dedupedByKey = new Map<string, ItemTypeCommandOptionPolicy>();\n for (const policy of policies ?? []) {\n const normalized = normalizeItemTypeCommandOptionPolicy(policy, resolvePolicyCommand);\n if (!normalized) {\n continue;\n }\n dedupedByKey.set(`${normalized.command}:${normalized.option.toLowerCase()}`, normalized);\n }\n return [...dedupedByKey.values()].sort((left, right) =>\n left.command === right.command\n ? left.option.localeCompare(right.option)\n : left.command.localeCompare(right.command),\n );\n}\n\n/**\n * Documents the normalize item type definition options payload exchanged by command, SDK, and package integrations.\n */\nexport interface NormalizeItemTypeDefinitionOptions {\n /** How to resolve a raw policy `command` value (defaults to {@link keepPolicyCommand}). */\n resolvePolicyCommand?: ResolvePolicyCommand;\n}\n\nfunction normalizeOptionalStringList(\n values: string[] | undefined,\n preservePresence: boolean,\n): string[] | undefined {\n return preservePresence ? normalizeItemTypeStringList(values) : undefined;\n}\n\nfunction optionalNonEmptyString(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n return normalized && normalized.length > 0 ? normalized : undefined;\n}\n\n/**\n * Normalize a full {@link ItemTypeDefinition}, returning null when the name is blank.\n *\n * Optional collection fields (`folder`, `aliases`, `required_create_fields`,\n * `required_create_repeatables`, `options`, `command_option_policies`) are only\n * emitted when present on the input (presence-preserving) so the distinction\n * between \"unset\" and \"set-but-empty\" survives the round-trip.\n */\nexport function normalizeItemTypeDefinition(\n definition: ItemTypeDefinition,\n options: NormalizeItemTypeDefinitionOptions = {},\n): ItemTypeDefinition | null {\n const resolvePolicyCommand = options.resolvePolicyCommand ?? keepPolicyCommand;\n const name = definition.name.trim();\n if (name.length === 0) {\n return null;\n }\n\n const hasRequiredCreateFields = definition.required_create_fields !== undefined;\n const hasRequiredCreateRepeatables = definition.required_create_repeatables !== undefined;\n const hasOptions = definition.options !== undefined;\n const hasCommandOptionPolicies = definition.command_option_policies !== undefined;\n\n const aliases = normalizeItemTypeStringList(definition.aliases);\n const normalizedOptions = (definition.options ?? [])\n .map((option) => normalizeItemTypeOption(option))\n .filter((option): option is ItemTypeOptionDefinition => option !== null)\n .sort((left, right) => left.key.localeCompare(right.key));\n const commandOptionPolicies = normalizeItemTypeCommandOptionPolicies(\n definition.command_option_policies,\n resolvePolicyCommand,\n );\n\n return {\n name,\n description: optionalNonEmptyString(definition.description),\n default_status: optionalNonEmptyString(definition.default_status),\n folder: optionalNonEmptyString(definition.folder),\n aliases: aliases.length > 0 ? aliases : undefined,\n required_create_fields: normalizeOptionalStringList(definition.required_create_fields, hasRequiredCreateFields),\n required_create_repeatables: normalizeOptionalStringList(\n definition.required_create_repeatables,\n hasRequiredCreateRepeatables,\n ),\n options: hasOptions ? normalizedOptions : undefined,\n command_option_policies: hasCommandOptionPolicies ? commandOptionPolicies : undefined,\n };\n}\n", "/**\n * @module core/item/type-registry\n *\n * Defines item parsing, formatting, and lifecycle helpers for Type Registry.\n */\nimport { TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport type { ExtensionRegistrationRegistry } from \"../extensions/loader.js\";\nimport type {\n ItemTypeCommandOptionPolicy,\n ItemTypeDefinition,\n ItemTypeOptionDefinition,\n PmSettings,\n} from \"../../types/index.js\";\nimport { ITEM_TYPE_VALUES } from \"../../types/index.js\";\nimport {\n normalizeItemTypeDefinition as normalizeSharedItemTypeDefinition,\n normalizeItemTypeStringList,\n strictPolicyCommand,\n} from \"./item-type-definition.js\";\n\nexport const DEFAULT_REQUIRED_CREATE_FIELDS = [\n \"title\",\n \"description\",\n \"status\",\n \"priority\",\n \"tags\",\n \"body\",\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"author\",\n \"message\",\n \"assignee\",\n] as const;\n\nexport const DEFAULT_REQUIRED_CREATE_REPEATABLES = [\"dep\", \"comment\", \"note\", \"learning\", \"file\", \"test\", \"doc\"] as const;\n\n/**\n * Restricts command option policy command values accepted by command, SDK, and storage contracts.\n */\nexport type CommandOptionPolicyCommand = \"create\" | \"update\";\n\n// Keep aligned with cli/commands/shared-unset-fields.ts. This core registry\n// cannot import CLI unset metadata without creating a core -> CLI dependency.\nexport const COMMON_MUTATION_COMMAND_OPTION_KEYS = [\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"definitionOfReady\",\n \"order\",\n \"goal\",\n \"objective\",\n \"value\",\n \"impact\",\n \"outcome\",\n \"whyNow\",\n \"assignee\",\n \"parent\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n \"blockedBy\",\n \"blockedReason\",\n \"unblockNote\",\n \"reporter\",\n \"severity\",\n \"environment\",\n \"reproSteps\",\n \"resolution\",\n \"expectedResult\",\n \"actualResult\",\n \"affectedVersion\",\n \"fixedVersion\",\n \"component\",\n \"regression\",\n \"customerImpact\",\n] as const;\n\nconst CREATE_COMMAND_OPTION_KEYS = [\n \"title\",\n \"description\",\n \"type\",\n \"status\",\n \"priority\",\n \"tags\",\n \"body\",\n ...COMMON_MUTATION_COMMAND_OPTION_KEYS,\n \"author\",\n \"message\",\n \"dep\",\n \"comment\",\n \"note\",\n \"learning\",\n \"file\",\n \"test\",\n \"doc\",\n \"reminder\",\n \"event\",\n \"typeOption\",\n \"field\",\n] as const;\n\nconst UPDATE_COMMAND_OPTION_KEYS = [\n \"title\",\n \"description\",\n \"body\",\n \"status\",\n \"closeReason\",\n \"priority\",\n \"type\",\n \"tags\",\n ...COMMON_MUTATION_COMMAND_OPTION_KEYS,\n \"author\",\n \"message\",\n \"comment\",\n \"note\",\n \"learning\",\n \"file\",\n \"test\",\n \"doc\",\n \"reminder\",\n \"event\",\n \"typeOption\",\n \"field\",\n \"allowAuditUpdate\",\n \"force\",\n] as const;\n\nconst SHARED_COMMAND_OPTION_ALIASES: Record<string, string> = {\n \"close-reason\": \"closeReason\",\n close_reason: \"closeReason\",\n \"estimated-minutes\": \"estimatedMinutes\",\n estimated_minutes: \"estimatedMinutes\",\n estimate: \"estimatedMinutes\",\n \"acceptance-criteria\": \"acceptanceCriteria\",\n acceptance_criteria: \"acceptanceCriteria\",\n ac: \"acceptanceCriteria\",\n \"definition-of-ready\": \"definitionOfReady\",\n definition_of_ready: \"definitionOfReady\",\n rank: \"order\",\n \"why-now\": \"whyNow\",\n why_now: \"whyNow\",\n \"blocked-by\": \"blockedBy\",\n blocked_by: \"blockedBy\",\n \"blocked-reason\": \"blockedReason\",\n blocked_reason: \"blockedReason\",\n \"unblock-note\": \"unblockNote\",\n unblock_note: \"unblockNote\",\n \"repro-steps\": \"reproSteps\",\n repro_steps: \"reproSteps\",\n \"expected-result\": \"expectedResult\",\n expected_result: \"expectedResult\",\n \"actual-result\": \"actualResult\",\n actual_result: \"actualResult\",\n \"affected-version\": \"affectedVersion\",\n affected_version: \"affectedVersion\",\n \"fixed-version\": \"fixedVersion\",\n fixed_version: \"fixedVersion\",\n \"customer-impact\": \"customerImpact\",\n customer_impact: \"customerImpact\",\n \"type-option\": \"typeOption\",\n type_option: \"typeOption\",\n type_options: \"typeOption\",\n};\n\nconst CREATE_COMMAND_OPTION_ALIASES: Record<string, string> = {\n ...SHARED_COMMAND_OPTION_ALIASES,\n};\n\nconst UPDATE_COMMAND_OPTION_ALIASES: Record<string, string> = {\n ...SHARED_COMMAND_OPTION_ALIASES,\n \"allow-audit-update\": \"allowAuditUpdate\",\n allow_audit_update: \"allowAuditUpdate\",\n};\n\nconst COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES = [\n [\"deadline\", \"--deadline\"],\n [\"estimatedMinutes\", \"--estimate/--estimated-minutes\"],\n [\"acceptanceCriteria\", \"--acceptance-criteria/--ac\"],\n [\"definitionOfReady\", \"--definition-of-ready\"],\n [\"order\", \"--order/--rank\"],\n [\"goal\", \"--goal\"],\n [\"objective\", \"--objective\"],\n [\"value\", \"--value\"],\n [\"impact\", \"--impact\"],\n [\"outcome\", \"--outcome\"],\n [\"whyNow\", \"--why-now\"],\n [\"assignee\", \"--assignee\"],\n [\"parent\", \"--parent\"],\n [\"reviewer\", \"--reviewer\"],\n [\"risk\", \"--risk\"],\n [\"confidence\", \"--confidence\"],\n [\"sprint\", \"--sprint\"],\n [\"release\", \"--release\"],\n [\"blockedBy\", \"--blocked-by\"],\n [\"blockedReason\", \"--blocked-reason\"],\n [\"unblockNote\", \"--unblock-note\"],\n [\"reporter\", \"--reporter\"],\n [\"severity\", \"--severity\"],\n [\"environment\", \"--environment\"],\n [\"reproSteps\", \"--repro-steps\"],\n [\"resolution\", \"--resolution\"],\n [\"expectedResult\", \"--expected-result\"],\n [\"actualResult\", \"--actual-result\"],\n [\"affectedVersion\", \"--affected-version\"],\n [\"fixedVersion\", \"--fixed-version\"],\n [\"component\", \"--component\"],\n [\"regression\", \"--regression\"],\n [\"customerImpact\", \"--customer-impact\"],\n] as const;\n\nconst LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES = [\n [\"comment\", \"--comment\"],\n [\"note\", \"--note\"],\n [\"learning\", \"--learning\"],\n [\"file\", \"--file\"],\n [\"test\", \"--test\"],\n [\"doc\", \"--doc\"],\n [\"reminder\", \"--reminder\"],\n [\"event\", \"--event\"],\n [\"typeOption\", \"--type-option\"],\n] as const;\n\nfunction commandOptionLabelMap(\n entries: ReadonlyArray<readonly [string, string]>,\n): Record<string, string> {\n return Object.fromEntries(entries);\n}\n\nconst CREATE_COMMAND_OPTION_FLAG_LABELS = commandOptionLabelMap([\n [\"title\", \"--title\"],\n [\"description\", \"--description\"],\n [\"type\", \"--type\"],\n [\"status\", \"--status\"],\n [\"priority\", \"--priority\"],\n [\"tags\", \"--tags\"],\n [\"body\", \"--body\"],\n ...COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES,\n [\"author\", \"--author\"],\n [\"message\", \"--message\"],\n [\"dep\", \"--dep\"],\n ...LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES,\n]);\n\nconst UPDATE_COMMAND_OPTION_FLAG_LABELS = commandOptionLabelMap([\n [\"title\", \"--title\"],\n [\"description\", \"--description\"],\n [\"body\", \"--body\"],\n [\"status\", \"--status\"],\n [\"closeReason\", \"--close-reason\"],\n [\"priority\", \"--priority\"],\n [\"type\", \"--type\"],\n [\"tags\", \"--tags\"],\n ...COMMON_MUTATION_COMMAND_OPTION_FLAG_LABEL_ENTRIES,\n ...LINKED_RESOURCE_COMMAND_OPTION_FLAG_LABEL_ENTRIES,\n [\"allowAuditUpdate\", \"--allow-audit-update\"],\n [\"author\", \"--author\"],\n [\"message\", \"--message\"],\n [\"force\", \"--force\"],\n]);\n\n/**\n * Documents the command option policy state payload exchanged by command, SDK, and package integrations.\n */\nexport interface CommandOptionPolicyState {\n required: string[];\n hidden: string[];\n disabled: string[];\n errors: string[];\n}\n\n/**\n * Documents the resolved item type definition payload exchanged by command, SDK, and package integrations.\n */\nexport interface ResolvedItemTypeDefinition {\n name: string;\n /** Optional human description carried from the type definition. */\n description?: string;\n folder: string;\n aliases: string[];\n /** Optional per-type status applied at create time when `--status` is omitted. */\n default_status?: string;\n required_create_fields: string[];\n required_create_repeatables: string[];\n options: ItemTypeOptionDefinition[];\n command_option_policies: ItemTypeCommandOptionPolicy[];\n}\n\n/**\n * Documents the item type registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemTypeRegistry {\n types: string[];\n folders: string[];\n type_to_folder: Record<string, string>;\n by_type: Record<string, ResolvedItemTypeDefinition>;\n alias_to_type: Record<string, string>;\n}\n\nfunction normalizeCommandOptionToken(value: string): string {\n return value.trim().replace(/^--+/, \"\").toLowerCase();\n}\n\nfunction commandOptionKeys(command: CommandOptionPolicyCommand): readonly string[] {\n return command === \"create\" ? CREATE_COMMAND_OPTION_KEYS : UPDATE_COMMAND_OPTION_KEYS;\n}\n\nfunction commandOptionAliases(command: CommandOptionPolicyCommand): Record<string, string> {\n return command === \"create\" ? CREATE_COMMAND_OPTION_ALIASES : UPDATE_COMMAND_OPTION_ALIASES;\n}\n\n/**\n * Implements canonicalize command option key for the public runtime surface of this module.\n */\nexport function canonicalizeCommandOptionKey(\n command: CommandOptionPolicyCommand,\n rawOption: string,\n): string | undefined {\n const normalizedToken = normalizeCommandOptionToken(rawOption);\n if (normalizedToken.length === 0) {\n return undefined;\n }\n const aliased = commandOptionAliases(command)[normalizedToken];\n if (aliased) {\n return aliased;\n }\n return commandOptionKeys(command).find((candidate) => candidate.toLowerCase() === normalizedToken);\n}\n\n/**\n * Implements command option flag label for the public runtime surface of this module.\n */\nexport function commandOptionFlagLabel(command: CommandOptionPolicyCommand, optionKey: string): string {\n const labels = command === \"create\" ? CREATE_COMMAND_OPTION_FLAG_LABELS : UPDATE_COMMAND_OPTION_FLAG_LABELS;\n return labels[optionKey] ?? `--${optionKey.replace(/([A-Z])/g, \"-$1\").toLowerCase()}`;\n}\n\n/**\n * Implements to default folder for the public runtime surface of this module.\n */\nexport function toDefaultFolder(name: string): string {\n const normalized = toSlugToken(name);\n if (normalized.length === 0) {\n return \"items\";\n }\n return normalized.endsWith(\"s\") ? normalized : `${normalized}s`;\n}\n\nfunction toSlugToken(value: string): string {\n const trimmed = value.trim().toLowerCase();\n let slug = \"\";\n let pendingDash = false;\n for (const character of trimmed) {\n const code = character.charCodeAt(0);\n const isAlpha = code >= 97 && code <= 122;\n const isDigit = code >= 48 && code <= 57;\n if (isAlpha || isDigit) {\n if (pendingDash && slug.length > 0) {\n slug += \"-\";\n }\n slug += character;\n pendingDash = false;\n continue;\n }\n if (slug.length > 0) {\n pendingDash = true;\n }\n }\n return slug;\n}\n\n// Runtime registry consumes untrusted extension/file definitions, so it uses the\n// strict policy-command resolver (trim + lowercase, reject non-create/update). All\n// other normalization is single-sourced from ./item-type-definition.ts (pm-v798).\nfunction normalizeTypeDefinition(definition: ItemTypeDefinition): ItemTypeDefinition | null {\n return normalizeSharedItemTypeDefinition(definition, { resolvePolicyCommand: strictPolicyCommand });\n}\n\nfunction readStringArray(record: Record<string, unknown>, key: string): string[] | undefined {\n const value = record[key];\n return Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : undefined;\n}\n\nfunction coerceOptionDefinitionFromUnknown(raw: unknown): ItemTypeOptionDefinition | null {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return null;\n }\n const optionRecord = raw as Record<string, unknown>;\n if (typeof optionRecord.key !== \"string\") {\n return null;\n }\n return {\n key: optionRecord.key,\n values: readStringArray(optionRecord, \"values\") ?? [],\n required: optionRecord.required === undefined ? undefined : Boolean(optionRecord.required),\n aliases: readStringArray(optionRecord, \"aliases\"),\n description: typeof optionRecord.description === \"string\" ? optionRecord.description : undefined,\n };\n}\n\nfunction coerceCommandOptionPolicyFromUnknown(raw: unknown): ItemTypeCommandOptionPolicy | null {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return null;\n }\n const policyRecord = raw as Record<string, unknown>;\n if (typeof policyRecord.command !== \"string\" || typeof policyRecord.option !== \"string\") {\n return null;\n }\n const normalizedCommand = policyRecord.command.trim().toLowerCase();\n if (normalizedCommand !== \"create\" && normalizedCommand !== \"update\") {\n return null;\n }\n return {\n command: normalizedCommand,\n option: policyRecord.option,\n required: policyRecord.required === undefined ? undefined : Boolean(policyRecord.required),\n visible: policyRecord.visible === undefined ? undefined : Boolean(policyRecord.visible),\n enabled: policyRecord.enabled === undefined ? undefined : Boolean(policyRecord.enabled),\n };\n}\n\nfunction coerceOptionDefinitionsFromRecord(record: Record<string, unknown>): ItemTypeOptionDefinition[] | undefined {\n if (!Array.isArray(record.options)) {\n return undefined;\n }\n return record.options\n .map((entry) => coerceOptionDefinitionFromUnknown(entry))\n .filter((entry): entry is ItemTypeOptionDefinition => entry !== null);\n}\n\nfunction coerceCommandOptionPoliciesFromRecord(record: Record<string, unknown>): ItemTypeCommandOptionPolicy[] | undefined {\n if (!Array.isArray(record.command_option_policies)) {\n return undefined;\n }\n return record.command_option_policies\n .map((entry) => coerceCommandOptionPolicyFromUnknown(entry))\n .filter((entry): entry is ItemTypeCommandOptionPolicy => entry !== null);\n}\n\nfunction coerceTypeDefinitionFromUnknown(raw: unknown): ItemTypeDefinition | null {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return null;\n }\n const record = raw as Record<string, unknown>;\n const name = typeof record.name === \"string\" ? record.name : \"\";\n if (name.trim().length === 0) {\n return null;\n }\n const folder = typeof record.folder === \"string\" ? record.folder : undefined;\n const description = typeof record.description === \"string\" ? record.description : undefined;\n const defaultStatus = typeof record.default_status === \"string\" ? record.default_status : undefined;\n return {\n name,\n description,\n default_status: defaultStatus,\n folder,\n aliases: readStringArray(record, \"aliases\"),\n required_create_fields: readStringArray(record, \"required_create_fields\"),\n required_create_repeatables: readStringArray(record, \"required_create_repeatables\"),\n options: coerceOptionDefinitionsFromRecord(record),\n command_option_policies: coerceCommandOptionPoliciesFromRecord(record),\n };\n}\n\nfunction resolveDefinitionRequiredCreateFields(\n normalizedDefinition: ItemTypeDefinition,\n existing: ResolvedItemTypeDefinition | undefined,\n): string[] {\n return normalizedDefinition.required_create_fields\n ? normalizeItemTypeStringList(normalizedDefinition.required_create_fields)\n : existing?.required_create_fields ?? [];\n}\n\nfunction resolveDefinitionRequiredCreateRepeatables(\n normalizedDefinition: ItemTypeDefinition,\n existing: ResolvedItemTypeDefinition | undefined,\n): string[] {\n return normalizedDefinition.required_create_repeatables\n ? normalizeItemTypeStringList(normalizedDefinition.required_create_repeatables)\n : existing?.required_create_repeatables ?? [];\n}\n\nfunction resolveDefinitionOptions(\n normalizedDefinition: ItemTypeDefinition,\n existing: ResolvedItemTypeDefinition | undefined,\n): ItemTypeOptionDefinition[] {\n return normalizedDefinition.options ? normalizedDefinition.options : existing?.options ? [...existing.options] : [];\n}\n\nfunction resolveDefinitionCommandOptionPolicies(\n normalizedDefinition: ItemTypeDefinition,\n existing: ResolvedItemTypeDefinition | undefined,\n): ItemTypeCommandOptionPolicy[] {\n return normalizedDefinition.command_option_policies\n ? normalizedDefinition.command_option_policies\n : existing?.command_option_policies\n ? [...existing.command_option_policies]\n : [];\n}\n\nfunction buildResolvedTypeDefinition(\n normalizedDefinition: ItemTypeDefinition,\n existing: ResolvedItemTypeDefinition | undefined,\n): ResolvedItemTypeDefinition {\n const keepName = existing?.name ?? normalizedDefinition.name;\n const description = normalizedDefinition.description ?? existing?.description;\n const defaultStatus = normalizedDefinition.default_status ?? existing?.default_status;\n const resolvedDefinition: ResolvedItemTypeDefinition = {\n name: keepName,\n folder: normalizedDefinition.folder ?? existing?.folder ?? toDefaultFolder(keepName),\n aliases: normalizeItemTypeStringList([...(existing?.aliases ?? []), ...(normalizedDefinition.aliases ?? [])]),\n required_create_fields: resolveDefinitionRequiredCreateFields(normalizedDefinition, existing),\n required_create_repeatables: resolveDefinitionRequiredCreateRepeatables(normalizedDefinition, existing),\n options: resolveDefinitionOptions(normalizedDefinition, existing),\n command_option_policies: resolveDefinitionCommandOptionPolicies(normalizedDefinition, existing),\n };\n if (description) {\n resolvedDefinition.description = description;\n }\n if (defaultStatus) {\n resolvedDefinition.default_status = defaultStatus;\n }\n return resolvedDefinition;\n}\n\nfunction applyTypeDefinitions(\n source: ItemTypeDefinition[],\n target: Map<string, ResolvedItemTypeDefinition>,\n): void {\n for (const rawDefinition of source) {\n const normalizedDefinition = normalizeTypeDefinition(rawDefinition);\n if (!normalizedDefinition) {\n continue;\n }\n const lowerName = normalizedDefinition.name.toLowerCase();\n const existing = target.get(lowerName);\n target.set(lowerName, buildResolvedTypeDefinition(normalizedDefinition, existing));\n }\n}\n\nfunction collectExtensionTypeDefinitions(registrations: ExtensionRegistrationRegistry | null | undefined): ItemTypeDefinition[] {\n if (!registrations) {\n return [];\n }\n const definitions: ItemTypeDefinition[] = [];\n for (const registration of registrations.item_types ?? []) {\n const typeDefinitionsRaw = (registration as { types?: unknown[] }).types;\n if (!Array.isArray(typeDefinitionsRaw)) {\n continue;\n }\n for (const rawDefinition of typeDefinitionsRaw) {\n const normalized = coerceTypeDefinitionFromUnknown(rawDefinition);\n if (normalized) {\n definitions.push(normalized);\n }\n }\n }\n return definitions;\n}\n\n/**\n * Implements resolve item type registry for the public runtime surface of this module.\n */\nexport function resolveItemTypeRegistry(\n settings: PmSettings,\n extensionRegistrations: ExtensionRegistrationRegistry | null | undefined = null,\n): ItemTypeRegistry {\n const byLowerName = new Map<string, ResolvedItemTypeDefinition>();\n for (const builtin of ITEM_TYPE_VALUES) {\n byLowerName.set(builtin.toLowerCase(), {\n name: builtin,\n folder: TYPE_TO_FOLDER[builtin],\n aliases: [],\n required_create_fields: [...DEFAULT_REQUIRED_CREATE_FIELDS],\n required_create_repeatables: [...DEFAULT_REQUIRED_CREATE_REPEATABLES],\n options: [],\n command_option_policies: [],\n });\n }\n\n applyTypeDefinitions(settings.item_types?.definitions ?? [], byLowerName);\n applyTypeDefinitions(collectExtensionTypeDefinitions(extensionRegistrations), byLowerName);\n\n const definitions = [...byLowerName.values()].sort((left, right) => left.name.localeCompare(right.name));\n const byType: Record<string, ResolvedItemTypeDefinition> = {};\n const aliasToType: Record<string, string> = {};\n const typeToFolder: Record<string, string> = {};\n for (const definition of definitions) {\n byType[definition.name] = definition;\n typeToFolder[definition.name] = definition.folder;\n aliasToType[definition.name.toLowerCase()] = definition.name;\n for (const alias of definition.aliases) {\n aliasToType[alias.toLowerCase()] = definition.name;\n }\n }\n const folders = [...new Set(definitions.map((definition) => definition.folder))].sort((left, right) => left.localeCompare(right));\n return {\n types: definitions.map((definition) => definition.name),\n folders,\n type_to_folder: typeToFolder,\n by_type: byType,\n alias_to_type: aliasToType,\n };\n}\n\n/**\n * Implements resolve type name for the public runtime surface of this module.\n */\nexport function resolveTypeName(rawType: string | undefined, registry: ItemTypeRegistry): string | undefined {\n if (rawType === undefined) {\n return undefined;\n }\n return registry.alias_to_type[rawType.trim().toLowerCase()];\n}\n\n/**\n * Implements resolve type definition for the public runtime surface of this module.\n */\nexport function resolveTypeDefinition(\n typeName: string | undefined,\n registry: ItemTypeRegistry,\n): ResolvedItemTypeDefinition | undefined {\n const resolvedName = resolveTypeName(typeName, registry);\n if (!resolvedName) {\n return undefined;\n }\n return registry.by_type[resolvedName];\n}\n\nfunction applyBaseRequiredCommandOptions(\n state: Pick<CommandOptionPolicyState, \"errors\"> & { required: Set<string> },\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n baseRequiredOptions: Iterable<string>,\n): void {\n for (const rawBase of baseRequiredOptions) {\n const canonical = canonicalizeCommandOptionKey(command, rawBase);\n if (canonical) {\n state.required.add(canonical);\n continue;\n }\n state.errors.push(\n `Unsupported base required option \"${rawBase}\" for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n }\n}\n\nfunction applyBooleanPolicySet(target: Set<string>, option: string, enabled: boolean): void {\n if (enabled) {\n target.add(option);\n return;\n }\n target.delete(option);\n}\n\nfunction applyCommandOptionPolicy(\n state: Omit<CommandOptionPolicyState, \"required\" | \"hidden\" | \"disabled\"> & {\n required: Set<string>;\n hidden: Set<string>;\n disabled: Set<string>;\n },\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n policy: ItemTypeCommandOptionPolicy,\n): void {\n const canonical = canonicalizeCommandOptionKey(command, policy.option);\n if (!canonical) {\n state.errors.push(\n `Unsupported command_option_policies option \"${policy.option}\" for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n return;\n }\n if (policy.required !== undefined) {\n applyBooleanPolicySet(state.required, canonical, policy.required);\n }\n if (policy.visible !== undefined) {\n applyBooleanPolicySet(state.hidden, canonical, !policy.visible);\n }\n if (policy.enabled !== undefined) {\n applyBooleanPolicySet(state.disabled, canonical, !policy.enabled);\n }\n}\n\nfunction applyCommandOptionPolicies(\n state: Omit<CommandOptionPolicyState, \"required\" | \"hidden\" | \"disabled\"> & {\n required: Set<string>;\n hidden: Set<string>;\n disabled: Set<string>;\n },\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n): void {\n for (const policy of typeDefinition.command_option_policies) {\n if (policy.command === command) {\n applyCommandOptionPolicy(state, typeDefinition, command, policy);\n }\n }\n}\n\nfunction appendRequiredDisabledPolicyErrors(\n state: Pick<CommandOptionPolicyState, \"errors\"> & {\n required: Set<string>;\n disabled: Set<string>;\n },\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n): void {\n for (const option of state.required) {\n if (state.disabled.has(option)) {\n state.errors.push(\n `Option \"${option}\" cannot be both required and disabled for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n }\n }\n}\n\n/**\n * Implements resolve command option policy state for the public runtime surface of this module.\n */\nexport function resolveCommandOptionPolicyState(\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n baseRequiredOptions: Iterable<string>,\n): CommandOptionPolicyState {\n const errors: string[] = [];\n const required = new Set<string>();\n const hidden = new Set<string>();\n const disabled = new Set<string>();\n const state = { required, hidden, disabled, errors };\n\n applyBaseRequiredCommandOptions(state, typeDefinition, command, baseRequiredOptions);\n applyCommandOptionPolicies(state, typeDefinition, command);\n appendRequiredDisabledPolicyErrors(state, typeDefinition, command);\n\n return {\n required: [...required],\n hidden: [...hidden].sort((left, right) => left.localeCompare(right)),\n disabled: [...disabled].sort((left, right) => left.localeCompare(right)),\n errors,\n };\n}\n\nfunction buildTypeOptionAliasMap(typeDefinition: ResolvedItemTypeDefinition): Map<string, ItemTypeOptionDefinition> {\n const optionByAlias = new Map<string, ItemTypeOptionDefinition>();\n for (const option of typeDefinition.options) {\n optionByAlias.set(option.key.toLowerCase(), option);\n for (const alias of option.aliases ?? []) {\n optionByAlias.set(alias.toLowerCase(), option);\n }\n }\n return optionByAlias;\n}\n\nfunction resolveTypeOptionValue(\n optionDefinition: ItemTypeOptionDefinition,\n trimmedValue: string,\n errors: string[],\n): string | undefined {\n const allowedValues = optionDefinition.values;\n if (allowedValues.length === 0) {\n return trimmedValue;\n }\n const valueLookup = new Map(allowedValues.map((value) => [value.toLowerCase(), value]));\n const canonical = valueLookup.get(trimmedValue.toLowerCase());\n if (!canonical) {\n errors.push(`Invalid value \"${trimmedValue}\" for type option \"${optionDefinition.key}\". Allowed: ${allowedValues.join(\", \")}`);\n return undefined;\n }\n return canonical;\n}\n\n/**\n * Implements validate type options for the public runtime surface of this module.\n */\nexport function validateTypeOptions(\n typeName: string,\n rawTypeOptions: Record<string, string> | undefined,\n registry: ItemTypeRegistry,\n): { normalized: Record<string, string> | undefined; errors: string[] } {\n const typeDefinition = resolveTypeDefinition(typeName, registry);\n if (!typeDefinition) {\n return {\n normalized: undefined,\n errors: [`Unknown type \"${typeName}\"`],\n };\n }\n const errors: string[] = [];\n const optionByAlias = buildTypeOptionAliasMap(typeDefinition);\n\n const normalized: Record<string, string> = {};\n for (const [rawKey, rawValue] of Object.entries(rawTypeOptions ?? {})) {\n const trimmedKey = rawKey.trim();\n const trimmedValue = rawValue.trim();\n if (trimmedKey.length === 0) {\n errors.push(\"type option keys must not be empty\");\n continue;\n }\n if (trimmedValue.length === 0) {\n errors.push(`type option \"${trimmedKey}\" must not be empty`);\n continue;\n }\n const optionDefinition = optionByAlias.get(trimmedKey.toLowerCase());\n if (!optionDefinition) {\n const allowed = typeDefinition.options.map((option) => option.key).join(\", \");\n errors.push(\n typeDefinition.options.length > 0\n ? `Unknown type option \"${trimmedKey}\" for type \"${typeDefinition.name}\". Allowed: ${allowed}`\n : `Type \"${typeDefinition.name}\" does not define any configurable type options`,\n );\n continue;\n }\n const resolvedValue = resolveTypeOptionValue(optionDefinition, trimmedValue, errors);\n if (resolvedValue === undefined) {\n continue;\n }\n normalized[optionDefinition.key] = resolvedValue;\n }\n\n for (const option of typeDefinition.options) {\n if (option.required && !(option.key in normalized)) {\n errors.push(`Missing required type option \"${option.key}\" for type \"${typeDefinition.name}\"`);\n }\n }\n\n const sortedKeys = Object.keys(normalized).sort((left, right) => left.localeCompare(right));\n if (sortedKeys.length === 0) {\n return {\n normalized: undefined,\n errors,\n };\n }\n return {\n normalized: Object.fromEntries(sortedKeys.map((key) => [key, normalized[key]])),\n errors,\n };\n}\n", "/**\n * @module core/store/paths\n *\n * Reads and writes tracker storage with format-aware helpers for Paths.\n */\nimport { statSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { PM_DIRNAME, SETTINGS_FILENAME, TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport { toDefaultFolder } from \"../item/type-registry.js\";\nimport type { ItemFormat, ItemType } from \"../../types/index.js\";\n\nexport const ITEM_FILE_EXTENSION_BY_FORMAT: Record<ItemFormat, \".md\" | \".toon\"> = {\n json_markdown: \".md\",\n toon: \".toon\",\n};\n\nconst ITEM_FORMAT_BY_EXTENSION = {\n \".md\": \"json_markdown\",\n \".toon\": \"toon\",\n} as const satisfies Record<string, ItemFormat>;\n\nexport const ITEM_FILE_EXTENSIONS: Array<keyof typeof ITEM_FORMAT_BY_EXTENSION> = [\".md\", \".toon\"];\n\nfunction pathExists(pathValue: string): boolean {\n try {\n statSync(pathValue);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction discoverPmRootFromAncestors(cwd: string): string | undefined {\n let current = path.resolve(cwd);\n while (true) {\n const candidateRoot = path.join(current, PM_DIRNAME);\n const candidateSettingsPath = path.join(candidateRoot, SETTINGS_FILENAME);\n if (pathExists(candidateSettingsPath)) {\n return candidateRoot;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return undefined;\n }\n current = parent;\n }\n}\n\n/**\n * Implements resolve pm root for the public runtime surface of this module.\n */\nexport function resolvePmRoot(cwd: string, cliPath?: string): string {\n const envPath = process.env.PM_PATH;\n const explicitPath = cliPath?.trim() || envPath?.trim();\n if (explicitPath) {\n const resolved = path.resolve(cwd, explicitPath);\n // When an explicit --path/PM_PATH points at a project root that contains an\n // initialized `.agents/pm`, resolve into it. Without this, an agent passing\n // the directory where it ran `pm init` (which creates `<dir>/.agents/pm`)\n // hits a hard \"tracker not initialized\" dead-end, while cwd discovery walks\n // up to find the same `.agents/pm`. We only redirect when the path itself is\n // not already a tracker root, so `pm init --path <dir>` (which writes\n // `<dir>/settings.json` directly) and existing tracker roots keep working.\n if (!pathExists(getSettingsPath(resolved))) {\n const nestedRoot = path.join(resolved, PM_DIRNAME);\n if (pathExists(getSettingsPath(nestedRoot))) {\n return nestedRoot;\n }\n }\n return resolved;\n }\n const discoveredRoot = discoverPmRootFromAncestors(cwd);\n if (discoveredRoot) {\n return discoveredRoot;\n }\n const selected = PM_DIRNAME;\n return path.resolve(cwd, selected);\n}\n\n/**\n * Implements resolve global pm root for the public runtime surface of this module.\n */\nexport function resolveGlobalPmRoot(cwd: string): string {\n const envPath = process.env.PM_GLOBAL_PATH?.trim();\n const selected = envPath && envPath.length > 0 ? envPath : path.join(os.homedir(), \".pm-cli\");\n return path.resolve(cwd, selected);\n}\n\n/**\n * Implements get settings path for the public runtime surface of this module.\n */\nexport function getSettingsPath(pmRoot: string): string {\n return path.join(pmRoot, SETTINGS_FILENAME);\n}\n\n/**\n * Implements get type dir path for the public runtime surface of this module.\n */\nexport function getTypeDirPath(pmRoot: string, type: ItemType, typeToFolder: Record<string, string> = TYPE_TO_FOLDER): string {\n const folder = typeToFolder[type] ?? toDefaultFolder(type);\n return path.join(pmRoot, folder);\n}\n\n/**\n * Implements get item path for the public runtime surface of this module.\n */\nexport function getItemPath(\n pmRoot: string,\n type: ItemType,\n id: string,\n itemFormat: ItemFormat = \"toon\",\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n): string {\n return path.join(getTypeDirPath(pmRoot, type, typeToFolder), `${id}${ITEM_FILE_EXTENSION_BY_FORMAT[itemFormat]}`);\n}\n\n/**\n * Implements get item format from path for the public runtime surface of this module.\n */\nexport function getItemFormatFromPath(itemPath: string): ItemFormat | null {\n const normalizedItemPath = itemPath.replaceAll(\"\\\\\", \"/\");\n const extension = path.posix.extname(normalizedItemPath).toLowerCase() as keyof typeof ITEM_FORMAT_BY_EXTENSION;\n return ITEM_FORMAT_BY_EXTENSION[extension] ?? null;\n}\n\n/**\n * Implements get history path for the public runtime surface of this module.\n */\nexport function getHistoryPath(pmRoot: string, id: string): string {\n return path.join(pmRoot, \"history\", `${id}.jsonl`);\n}\n\n/**\n * Implements get lock path for the public runtime surface of this module.\n */\nexport function getLockPath(pmRoot: string, id: string): string {\n return path.join(pmRoot, \"locks\", `${id}.lock`);\n}\n\n/**\n * Implements get runtime path for the public runtime surface of this module.\n */\nexport function getRuntimePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\");\n}\n\n/**\n * Implements get test runs path for the public runtime surface of this module.\n */\nexport function getTestRunsPath(pmRoot: string): string {\n return path.join(getRuntimePath(pmRoot), \"test-runs\");\n}\n\n/**\n * Implements get test runs records path for the public runtime surface of this module.\n */\nexport function getTestRunsRecordsPath(pmRoot: string): string {\n return path.join(getTestRunsPath(pmRoot), \"runs\");\n}\n\n/**\n * Implements get test run record path for the public runtime surface of this module.\n */\nexport function getTestRunRecordPath(pmRoot: string, runId: string): string {\n return path.join(getTestRunsRecordsPath(pmRoot), `${runId}.json`);\n}\n\n/**\n * Implements get test runs stdout path for the public runtime surface of this module.\n */\nexport function getTestRunsStdoutPath(pmRoot: string): string {\n return path.join(getTestRunsPath(pmRoot), \"stdout\");\n}\n\n/**\n * Implements get test runs stderr path for the public runtime surface of this module.\n */\nexport function getTestRunsStderrPath(pmRoot: string): string {\n return path.join(getTestRunsPath(pmRoot), \"stderr\");\n}\n\n/**\n * Implements get test run stdout path for the public runtime surface of this module.\n */\nexport function getTestRunStdoutPath(pmRoot: string, runId: string): string {\n return path.join(getTestRunsStdoutPath(pmRoot), `${runId}.log`);\n}\n\n/**\n * Implements get test run stderr path for the public runtime surface of this module.\n */\nexport function getTestRunStderrPath(pmRoot: string, runId: string): string {\n return path.join(getTestRunsStderrPath(pmRoot), `${runId}.log`);\n}\n\n/**\n * Implements get test runs results path for the public runtime surface of this module.\n */\nexport function getTestRunsResultsPath(pmRoot: string): string {\n return path.join(getTestRunsPath(pmRoot), \"results\");\n}\n\n/**\n * Implements get test run result path for the public runtime surface of this module.\n */\nexport function getTestRunResultPath(pmRoot: string, runId: string): string {\n return path.join(getTestRunsResultsPath(pmRoot), `${runId}.json`);\n}\n", "/**\n * Common primitive utility functions shared across core modules.\n *\n * These reduce duplication of trivial helpers like string-presence checks,\n * error message extraction, and numeric array guards that were previously\n * duplicated in providers.ts, vector-stores.ts, lock.ts, cache.ts, and\n * several CLI command modules.\n */\n\n/** Return a trimmed non-empty string, or `null` for non-string/blank input. */\nexport function toNonEmptyString(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\n/**\n * Implements to non empty string or undefined for the public runtime surface of this module.\n */\nexport function toNonEmptyStringOrUndefined(value: unknown): string | undefined {\n const result = toNonEmptyString(value);\n return result ?? undefined;\n}\n\n/**\n * Implements trim trailing slashes for the public runtime surface of this module.\n */\nexport function trimTrailingSlashes(value: string): string {\n return value.replaceAll(/\\/+$/g, \"\");\n}\n\n/**\n * Implements check whether finite number array for the public runtime surface of this module.\n */\nexport function isFiniteNumberArray(value: unknown): value is number[] {\n return Array.isArray(value) && value.every((entry) => typeof entry === \"number\" && Number.isFinite(entry));\n}\n\n/**\n * Implements to error message for the public runtime surface of this module.\n */\nexport function toErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n const message = error.message.trim();\n return message.length > 0 ? message : error.name;\n }\n return String(error);\n}\n\n/**\n * Parse either a finite numeric literal or a non-empty numeric string.\n * Returns `null` for unsupported input types, empty strings, and non-finite\n * numeric values.\n */\nexport function coerceFiniteNumber(value: unknown): number | null {\n const parsed =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\" && value.trim().length > 0\n ? Number(value.trim())\n : Number.NaN;\n return Number.isFinite(parsed) ? parsed : null;\n}\n\n/**\n * Implements coerce positive integer for the public runtime surface of this module.\n */\nexport function coercePositiveInteger(value: unknown): number | null {\n const parsed = coerceFiniteNumber(value);\n if (parsed === null || parsed <= 0 || !Number.isInteger(parsed)) {\n return null;\n }\n return parsed;\n}\n\n/**\n * Implements coerce number in range for the public runtime surface of this module.\n */\nexport function coerceNumberInRange(value: unknown, min: number, max: number): number | null {\n const parsed = coerceFiniteNumber(value);\n if (parsed === null || parsed < min || parsed > max) {\n return null;\n }\n return parsed;\n}\n\n/**\n * Narrow a value to a plain object, returning `null` for non-objects,\n * `null`, and arrays. Returns the original reference (no clone).\n *\n * Matches the historical `asRecord` in src/cli/main.ts.\n */\nexport function asRecordOrNull(value: unknown): Record<string, unknown> | null {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\n/**\n * Narrow a value to a plain object, returning `null` only for non-objects and\n * `null` while accepting arrays (arrays are objects). Returns the original\n * reference (no clone).\n *\n * Matches the historical `asRecord` in src/core/extensions/loader.ts, which\n * intentionally omits the array guard.\n */\nexport function asRecordLoose(value: unknown): Record<string, unknown> | null {\n if (typeof value !== \"object\" || value === null) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\n/**\n * Narrow a value to a property-bearing object or function. Dynamic module\n * exports can be function/class values with static lifecycle properties, so\n * activation boundaries need a wider record shape than plain-object parsing.\n */\nexport function asPropertyRecord(value: unknown): Record<string, unknown> | null {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value === null) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\n/**\n * Resolve the module or default export record that owns an `activate` lifecycle\n * function. Accepts object and function/class-shaped exports so runtime loading\n * and SDK tests share the same extension interop rule.\n */\nexport function resolveActivatablePropertyRecord(value: unknown): Record<string, unknown> | null {\n const moduleRecord = asPropertyRecord(value);\n if (!moduleRecord) {\n return null;\n }\n if (typeof moduleRecord.activate === \"function\") {\n return moduleRecord;\n }\n const defaultExport = asPropertyRecord(moduleRecord.default);\n return typeof defaultExport?.activate === \"function\" ? defaultExport : null;\n}\n\n/**\n * Narrow a value to a plain object, returning an empty object for non-objects,\n * `null`, and arrays. Returns a shallow clone of the source object.\n *\n * Matches the historical `asRecord` in src/mcp/server.ts.\n */\nexport function asRecordClone(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? ({ ...value } as Record<string, unknown>)\n : {};\n}\n", "/**\n * @module core/shared/levenshtein\n *\n * Provides shared primitives and utilities for Levenshtein.\n */\n// Optimal String Alignment (OSA) Damerau–Levenshtein: counts a single adjacent\n// transposition as one edit (e.g. \"titel\" vs \"title\", \"lst\" vs \"lts\" -> \"list\")\n// so flag/command typo suggestions catch transpositions at the same maxDistance\n// budget plain Levenshtein uses for substitutions. pm-fl0c #6 (2026-05-28):\n// fixed because plain Levenshtein scored \"titel\"->\"title\" at 2, defeating the\n// length-5 maxDistance=1 ceiling in suggestNearestLongFlags.\n/**\n * Computes bounded Levenshtein distance for typo suggestions without scanning unnecessary suffixes.\n */\nexport function levenshteinDistanceWithinLimit(left: string, right: string, limit: number): number | null {\n if (left === right) {\n return 0;\n }\n if (Math.abs(left.length - right.length) > limit) {\n return null;\n }\n const width = right.length + 1;\n const beforePrevious = new Array<number>(width);\n const previous = new Array<number>(width);\n const current = new Array<number>(width);\n for (let column = 0; column < width; column += 1) {\n beforePrevious[column] = 0;\n previous[column] = column;\n }\n for (let row = 1; row <= left.length; row += 1) {\n current[0] = row;\n let rowMin = current[0];\n for (let column = 1; column <= right.length; column += 1) {\n const cost = left[row - 1] === right[column - 1] ? 0 : 1;\n const substitution = previous[column - 1] + cost;\n const insertion = current[column - 1] + 1;\n const deletion = previous[column] + 1;\n let candidate = Math.min(substitution, insertion, deletion);\n if (\n row > 1 &&\n column > 1 &&\n left[row - 1] === right[column - 2] &&\n left[row - 2] === right[column - 1]\n ) {\n candidate = Math.min(candidate, beforePrevious[column - 2] + 1);\n }\n current[column] = candidate;\n if (candidate < rowMin) {\n rowMin = candidate;\n }\n }\n if (rowMin > limit) {\n return null;\n }\n for (let column = 0; column < width; column += 1) {\n beforePrevious[column] = previous[column];\n previous[column] = current[column];\n }\n }\n const result = previous[right.length];\n return result <= limit ? result : null;\n}\n", "/**\n * @module core/extensions/extension-capability-aliases\n *\n * Implements extension runtime contracts and governance for Extension Capability Aliases.\n */\nimport {\n KNOWN_EXTENSION_CAPABILITIES,\n EXTENSION_CAPABILITY_CONTRACT_VERSION,\n EXTENSION_CAPABILITY_LEGACY_ALIASES,\n type ExtensionCapability,\n type ExtensionLayer,\n type LegacyExtensionCapabilityAliasMapping,\n type UnknownExtensionCapabilityWarningDetails,\n} from \"./extension-types.js\";\nimport { levenshteinDistanceWithinLimit } from \"../shared/levenshtein.js\";\n\n/**\n * Implements normalize names for the public runtime surface of this module.\n */\nexport function normalizeNames(values: string[]): string[] {\n return [...new Set(values.map((value) => value.trim()).filter((value) => value.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n );\n}\n\n/**\n * Implements check whether known extension capability for the public runtime surface of this module.\n */\nexport function isKnownExtensionCapability(value: string): value is ExtensionCapability {\n return (KNOWN_EXTENSION_CAPABILITIES as readonly string[]).includes(value);\n}\n\n/**\n * Trim and lower-case a capability token, returning it only when it is a known\n * canonical capability (otherwise `null`). Shared so capability normalization\n * and known-capability filtering stay identical across the doctor and the SDK\n * least-privilege helpers.\n */\nexport function normalizeKnownExtensionCapability(value: string): ExtensionCapability | null {\n const normalized = value.trim().toLowerCase();\n return isKnownExtensionCapability(normalized) ? normalized : null;\n}\n\n/**\n * Implements collect unknown extension capabilities for the public runtime surface of this module.\n */\nexport function collectUnknownExtensionCapabilities(capabilities: readonly string[]): string[] {\n return capabilities.filter((capability) => !isKnownExtensionCapability(capability));\n}\n\n/**\n * Implements resolve legacy extension capability alias for the public runtime surface of this module.\n */\nexport function resolveLegacyExtensionCapabilityAlias(capability: string): ExtensionCapability | null {\n const normalized = capability.trim().toLowerCase();\n if (normalized.length === 0) {\n return null;\n }\n return EXTENSION_CAPABILITY_LEGACY_ALIASES[normalized] ?? null;\n}\n\n/**\n * Implements normalize manifest capabilities for the public runtime surface of this module.\n */\nexport function normalizeManifestCapabilities(rawCapabilities: readonly string[]): {\n capabilities: string[];\n legacy_aliases: LegacyExtensionCapabilityAliasMapping[];\n} {\n const normalizedCapabilities = normalizeNames([...rawCapabilities].map((value) => value.toLowerCase()));\n const remappedCapabilities: string[] = [];\n const legacyAliases: LegacyExtensionCapabilityAliasMapping[] = [];\n for (const capability of normalizedCapabilities) {\n const legacyAliasTarget = resolveLegacyExtensionCapabilityAlias(capability);\n if (legacyAliasTarget) {\n remappedCapabilities.push(legacyAliasTarget);\n legacyAliases.push({\n alias: capability,\n target: legacyAliasTarget,\n });\n continue;\n }\n remappedCapabilities.push(capability);\n }\n const dedupedLegacyAliases = [...new Map(legacyAliases.map((entry) => [`${entry.alias}>${entry.target}`, entry])).values()].sort(\n (left, right) => left.alias.localeCompare(right.alias),\n );\n return {\n capabilities: normalizeNames(remappedCapabilities),\n legacy_aliases: dedupedLegacyAliases,\n };\n}\n\n/**\n * Implements suggest known extension capability for the public runtime surface of this module.\n */\nexport function suggestKnownExtensionCapability(capability: string): string | null {\n const normalized = capability.trim().toLowerCase();\n if (normalized.length === 0) {\n return null;\n }\n const legacyAlias = resolveLegacyExtensionCapabilityAlias(normalized);\n if (legacyAlias) {\n return legacyAlias;\n }\n const maxDistance = Math.max(1, Math.floor(normalized.length * 0.34));\n let bestMatch: string | null = null;\n let bestDistance = Number.POSITIVE_INFINITY;\n for (const candidate of KNOWN_EXTENSION_CAPABILITIES) {\n const distance = levenshteinDistanceWithinLimit(normalized, candidate, maxDistance);\n if (distance !== null && distance < bestDistance) {\n bestDistance = distance;\n bestMatch = candidate;\n }\n }\n return bestMatch;\n}\n\n/**\n * Implements format unknown extension capability warning for the public runtime surface of this module.\n */\nexport function formatUnknownExtensionCapabilityWarning(layer: ExtensionLayer, name: string, capability: string): string {\n const allowed = KNOWN_EXTENSION_CAPABILITIES.join(\",\");\n const suggested = suggestKnownExtensionCapability(capability) ?? \"none\";\n return `extension_capability_unknown:${layer}:${name}:${capability}:allowed=${allowed}:suggested=${suggested}`;\n}\n\n/**\n * Implements format legacy extension capability alias warning for the public runtime surface of this module.\n */\nexport function formatLegacyExtensionCapabilityAliasWarning(\n layer: ExtensionLayer,\n name: string,\n aliases: readonly LegacyExtensionCapabilityAliasMapping[],\n): string {\n const aliasesToken = aliases.map((entry) => `${entry.alias}>${entry.target}`).join(\",\");\n return `extension_capability_legacy_alias:${layer}:${name}:aliases=${aliasesToken}`;\n}\n\n\n/**\n * Implements parse unknown extension capability warning for the public runtime surface of this module.\n */\nexport function parseUnknownExtensionCapabilityWarning(\n warning: string,\n): UnknownExtensionCapabilityWarningDetails | null {\n const match = /^extension_capability_unknown:(global|project):([^:]+):([^:]+):allowed=([^:]+):suggested=([^:]+)$/.exec(\n warning.trim(),\n );\n if (!match) {\n return null;\n }\n const [, layerRaw, name, capability, allowedRaw, suggestedRaw] = match;\n const layer = layerRaw as ExtensionLayer;\n const allowed_capabilities = allowedRaw\n .split(\",\")\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n const legacyAlias = resolveLegacyExtensionCapabilityAlias(capability);\n const suggestedFromWarning = suggestedRaw === \"none\" ? undefined : suggestedRaw;\n const suggested_capability = suggestedFromWarning ?? legacyAlias ?? undefined;\n const suggestion_source = suggested_capability\n ? legacyAlias === suggested_capability\n ? \"legacy_alias\"\n : \"nearest_match\"\n : undefined;\n return {\n layer,\n name,\n capability,\n allowed_capabilities,\n capability_contract_version: EXTENSION_CAPABILITY_CONTRACT_VERSION,\n suggested_capability,\n suggestion_source,\n legacy_alias_target: legacyAlias ?? undefined,\n };\n}\n\n/**\n * Implements parse legacy extension capability alias warning for the public runtime surface of this module.\n */\nexport function parseLegacyExtensionCapabilityAliasWarning(warning: string): UnknownExtensionCapabilityWarningDetails[] {\n const match = /^extension_capability_legacy_alias:(global|project):([^:]+):aliases=(.+)$/.exec(warning.trim());\n if (!match) {\n return [];\n }\n const [, layerRaw, name, aliasesRaw] = match;\n const layer = layerRaw as ExtensionLayer;\n const allowedCapabilities = [...KNOWN_EXTENSION_CAPABILITIES];\n const parsed: UnknownExtensionCapabilityWarningDetails[] = [];\n for (const token of aliasesRaw.split(\",\")) {\n const [rawAlias, rawTarget] = token.split(\">\");\n const alias = rawAlias?.trim();\n const target = rawTarget?.trim().toLowerCase();\n if (!alias || !target || !isKnownExtensionCapability(target)) {\n continue;\n }\n parsed.push({\n layer,\n name,\n capability: alias,\n allowed_capabilities: allowedCapabilities,\n capability_contract_version: EXTENSION_CAPABILITY_CONTRACT_VERSION,\n suggested_capability: target,\n suggestion_source: \"legacy_alias\",\n legacy_alias_target: target,\n });\n }\n return parsed;\n}\n", "/**\n * @module core/extensions/extension-registries\n *\n * Implements extension runtime contracts and governance for Extension Registries.\n */\nimport type {\n ExtensionHookRegistry,\n ExtensionCommandRegistry,\n ExtensionParserRegistry,\n ExtensionPreflightRegistry,\n ExtensionServiceRegistry,\n ExtensionRendererRegistry,\n ExtensionRegistrationRegistry,\n} from \"./extension-types.js\";\n\n/**\n * Implements create empty extension hook registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionHookRegistry(): ExtensionHookRegistry {\n return {\n beforeCommand: [],\n afterCommand: [],\n onWrite: [],\n onRead: [],\n onIndex: [],\n };\n}\n\n/**\n * Implements create empty extension command registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionCommandRegistry(): ExtensionCommandRegistry {\n return {\n overrides: [],\n handlers: [],\n };\n}\n\n/**\n * Implements create empty extension parser registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionParserRegistry(): ExtensionParserRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension preflight registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionPreflightRegistry(): ExtensionPreflightRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension service registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionServiceRegistry(): ExtensionServiceRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension renderer registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionRendererRegistry(): ExtensionRendererRegistry {\n return {\n overrides: [],\n };\n}\n\n/**\n * Implements create empty extension registration registry for the public runtime surface of this module.\n */\nexport function createEmptyExtensionRegistrationRegistry(): ExtensionRegistrationRegistry {\n return {\n commands: [],\n flags: [],\n item_fields: [],\n item_types: [],\n migrations: [],\n profiles: [],\n importers: [],\n exporters: [],\n search_providers: [],\n vector_store_adapters: [],\n };\n}\n", "/**\n * @module core/extensions/extension-runtime-helpers\n *\n * Implements extension runtime contracts and governance for Extension Runtime Helpers.\n */\nimport type { GlobalOptions } from \"../shared/command-types.js\";\n\n/**\n * Implements normalize command name for the public runtime surface of this module.\n */\nexport function normalizeCommandName(command: string): string {\n return command\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\n/**\n * Implements default global options for the public runtime surface of this module.\n */\nexport function defaultGlobalOptions(): GlobalOptions {\n return {\n json: false,\n quiet: false,\n noExtensions: false,\n profile: false,\n };\n}\n\n/**\n * Implements clone command options snapshot for the public runtime surface of this module.\n */\nexport function cloneCommandOptionsSnapshot(options: Record<string, unknown> | undefined): Record<string, unknown> {\n return options ? cloneContextSnapshot(options) : {};\n}\n\n/**\n * Implements clone global options snapshot for the public runtime surface of this module.\n */\nexport function cloneGlobalOptionsSnapshot(options: GlobalOptions | undefined): GlobalOptions {\n return options ? cloneContextSnapshot(options) : defaultGlobalOptions();\n}\n\n/**\n * Implements clone context snapshot for the public runtime surface of this module.\n */\nexport function cloneContextSnapshot<T>(value: T): T {\n return structuredClone(value);\n}\n", "/**\n * @module core/extensions/extension-hook-runtime\n *\n * Implements extension runtime contracts and governance for Extension Hook Runtime.\n */\nimport {\n cloneCommandOptionsSnapshot,\n cloneContextSnapshot,\n cloneGlobalOptionsSnapshot,\n normalizeCommandName,\n} from \"./extension-runtime-helpers.js\";\nimport type {\n RegisteredExtensionHook,\n ExtensionHookRegistry,\n BeforeCommandHookContext,\n AfterCommandHookContext,\n OnWriteHookContext,\n OnReadHookContext,\n OnIndexHookContext,\n ExtensionCommandRegistry,\n CommandHandlerContext,\n CommandHandlerResult,\n ExtensionParserRegistry,\n ParserOverrideContext,\n ParserOverrideResult,\n ExtensionPreflightRegistry,\n PreflightOverrideContext,\n PreflightOverrideResult,\n PreflightRuntimeDecision,\n ExtensionServiceRegistry,\n ServiceOverrideContext,\n ServiceOverrideResult,\n CommandOverrideContext,\n CommandOverrideResult,\n ExtensionRendererRegistry,\n RendererOverrideContext,\n RendererOverrideResult,\n} from \"./extension-types.js\";\n\ntype HookName = keyof ExtensionHookRegistry;\n\nasync function executeRegisteredHooks<TContext>(\n entries: Array<RegisteredExtensionHook<(context: TContext) => Promise<void> | void>>,\n hookName: HookName,\n context: TContext,\n): Promise<string[]> {\n const warnings: string[] = [];\n for (const entry of entries) {\n try {\n await entry.run(cloneContextSnapshot(context));\n } catch {\n warnings.push(`extension_hook_failed:${entry.layer}:${entry.name}:${hookName}`);\n }\n }\n return warnings;\n}\n\n/**\n * Implements run before command hooks for the public runtime surface of this module.\n */\nexport async function runBeforeCommandHooks(\n hooks: ExtensionHookRegistry,\n context: BeforeCommandHookContext,\n): Promise<string[]> {\n return executeRegisteredHooks(hooks.beforeCommand, \"beforeCommand\", context);\n}\n\n/**\n * Implements run after command hooks for the public runtime surface of this module.\n */\nexport async function runAfterCommandHooks(\n hooks: ExtensionHookRegistry,\n context: AfterCommandHookContext,\n): Promise<string[]> {\n return executeRegisteredHooks(hooks.afterCommand, \"afterCommand\", context);\n}\n\n/**\n * Implements run on write hooks for the public runtime surface of this module.\n */\nexport async function runOnWriteHooks(hooks: ExtensionHookRegistry, context: OnWriteHookContext): Promise<string[]> {\n return executeRegisteredHooks(hooks.onWrite, \"onWrite\", context);\n}\n\n/**\n * Implements run on read hooks for the public runtime surface of this module.\n */\nexport async function runOnReadHooks(hooks: ExtensionHookRegistry, context: OnReadHookContext): Promise<string[]> {\n return executeRegisteredHooks(hooks.onRead, \"onRead\", context);\n}\n\n/**\n * Implements run on index hooks for the public runtime surface of this module.\n */\nexport async function runOnIndexHooks(hooks: ExtensionHookRegistry, context: OnIndexHookContext): Promise<string[]> {\n return executeRegisteredHooks(hooks.onIndex, \"onIndex\", context);\n}\n\n\n\n/**\n * Normalize an extension handler failure into a single-line, length-bounded\n * message so the real cause can be surfaced to the user/CI without leaking\n * multi-line stack noise or unbounded payloads.\n */\nfunction describeHandlerError(error: unknown): string {\n let raw = \"\";\n if (error instanceof Error && typeof error.message === \"string\") {\n raw = error.message;\n } else if (typeof error === \"string\") {\n raw = error;\n } else if (\n typeof error === \"object\" &&\n error !== null &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n // Extensions may throw plain/serialized objects that carry a message but do\n // not inherit from the base Error class.\n raw = (error as { message: string }).message;\n }\n const normalized = raw.replace(/\\s+/gu, \" \").trim();\n if (normalized.length === 0) {\n return \"\";\n }\n const maxLength = 300;\n return normalized.length > maxLength ? `${normalized.slice(0, maxLength - 1)}…` : normalized;\n}\n\n/**\n * Implements run command handler for the public runtime surface of this module.\n */\nexport async function runCommandHandler(\n commands: ExtensionCommandRegistry,\n context: CommandHandlerContext,\n): Promise<CommandHandlerResult> {\n const command = normalizeCommandName(context.command);\n if (command.length === 0) {\n return {\n handled: false,\n result: null,\n warnings: [],\n };\n }\n\n const matched = [...commands.handlers].reverse().find((entry) => entry.command === command);\n if (!matched) {\n return {\n handled: false,\n result: null,\n warnings: [],\n };\n }\n\n try {\n const result = await matched.run({\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneContextSnapshot(context.options),\n global: cloneContextSnapshot(context.global),\n pm_root: context.pm_root,\n });\n return {\n handled: true,\n result,\n warnings: [],\n };\n } catch (error: unknown) {\n const exitCode =\n typeof error === \"object\" && error !== null && \"exitCode\" in error\n ? (error as { exitCode?: unknown }).exitCode\n : undefined;\n if (typeof exitCode === \"number\" && Number.isFinite(exitCode)) {\n throw error;\n }\n return {\n handled: false,\n result: null,\n warnings: [`extension_command_handler_failed:${matched.layer}:${matched.name}:${matched.command}`],\n errorMessage: describeHandlerError(error),\n };\n }\n}\n\n\n/**\n * Implements run parser override for the public runtime surface of this module.\n */\nexport async function runParserOverride(\n parsers: ExtensionParserRegistry,\n context: ParserOverrideContext,\n): Promise<ParserOverrideResult> {\n const command = normalizeCommandName(context.command);\n if (command.length === 0) {\n return {\n overridden: false,\n context: {\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n },\n warnings: [],\n };\n }\n\n const matched = [...parsers.overrides].reverse().find((entry) => entry.command === command);\n if (!matched) {\n return {\n overridden: false,\n context: {\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n },\n warnings: [],\n };\n }\n\n try {\n const delta = (await Promise.resolve(\n matched.run({\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n }),\n )) ?? {};\n const nextArgs = Array.isArray(delta.args) ? cloneContextSnapshot(delta.args) : cloneContextSnapshot(context.args);\n const nextOptions = delta.options ? cloneCommandOptionsSnapshot(delta.options) : cloneCommandOptionsSnapshot(context.options);\n const nextGlobal = delta.global ? cloneGlobalOptionsSnapshot(delta.global) : cloneGlobalOptionsSnapshot(context.global);\n return {\n overridden: true,\n context: {\n command,\n args: nextArgs,\n options: nextOptions,\n global: nextGlobal,\n pm_root: context.pm_root,\n },\n warnings: [],\n };\n } catch {\n return {\n overridden: false,\n context: {\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n },\n warnings: [`extension_parser_override_failed:${matched.layer}:${matched.name}:${matched.command}`],\n };\n }\n}\n\n\n/**\n * Implements run preflight override for the public runtime surface of this module.\n */\nexport async function runPreflightOverride(\n preflight: ExtensionPreflightRegistry,\n context: PreflightOverrideContext,\n): Promise<PreflightOverrideResult> {\n const matched = [...preflight.overrides].reverse()[0];\n const baseContext: CommandHandlerContext = {\n command: normalizeCommandName(context.command),\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n };\n const baseDecision: PreflightRuntimeDecision = cloneContextSnapshot(context.decision);\n if (!matched) {\n return {\n overridden: false,\n context: baseContext,\n decision: baseDecision,\n warnings: [],\n };\n }\n\n try {\n const delta = (await Promise.resolve(\n matched.run({\n command: baseContext.command,\n args: cloneContextSnapshot(baseContext.args),\n options: cloneCommandOptionsSnapshot(baseContext.options),\n global: cloneGlobalOptionsSnapshot(baseContext.global),\n pm_root: baseContext.pm_root,\n decision: cloneContextSnapshot(baseDecision),\n }),\n )) ?? {};\n const nextContext: CommandHandlerContext = {\n command: baseContext.command,\n args: Array.isArray(delta.args) ? cloneContextSnapshot(delta.args) : baseContext.args,\n options: delta.options ? cloneCommandOptionsSnapshot(delta.options) : baseContext.options,\n global: delta.global ? cloneGlobalOptionsSnapshot(delta.global) : baseContext.global,\n pm_root: baseContext.pm_root,\n };\n const nextDecision: PreflightRuntimeDecision = {\n enforce_item_format_gate:\n typeof delta.enforce_item_format_gate === \"boolean\"\n ? delta.enforce_item_format_gate\n : baseDecision.enforce_item_format_gate,\n run_preflight_item_format_sync:\n typeof delta.run_preflight_item_format_sync === \"boolean\"\n ? delta.run_preflight_item_format_sync\n : baseDecision.run_preflight_item_format_sync,\n run_extension_migrations:\n typeof delta.run_extension_migrations === \"boolean\"\n ? delta.run_extension_migrations\n : baseDecision.run_extension_migrations,\n enforce_mandatory_migration_gate:\n typeof delta.enforce_mandatory_migration_gate === \"boolean\"\n ? delta.enforce_mandatory_migration_gate\n : baseDecision.enforce_mandatory_migration_gate,\n };\n return {\n overridden: true,\n context: nextContext,\n decision: nextDecision,\n warnings: [],\n };\n } catch {\n return {\n overridden: false,\n context: baseContext,\n decision: baseDecision,\n warnings: [`extension_preflight_override_failed:${matched.layer}:${matched.name}`],\n };\n }\n}\n\n\nfunction resolveDefaultServiceResult(context: ServiceOverrideContext): ServiceOverrideResult {\n return {\n handled: false,\n result: context.payload,\n warnings: [],\n };\n}\n\n/**\n * Implements run service override sync for the public runtime surface of this module.\n */\nexport function runServiceOverrideSync(\n services: ExtensionServiceRegistry,\n context: ServiceOverrideContext,\n): ServiceOverrideResult {\n const matches = [...services.overrides].reverse().filter((entry) => entry.service === context.service);\n if (matches.length === 0) {\n return resolveDefaultServiceResult(context);\n }\n\n const warnings: string[] = [];\n for (const matched of matches) {\n try {\n const serviceContext = {\n service: context.service,\n command: context.command ? normalizeCommandName(context.command) : undefined,\n args: context.args ? cloneContextSnapshot(context.args) : undefined,\n options: context.options ? cloneCommandOptionsSnapshot(context.options) : undefined,\n global: context.global ? cloneGlobalOptionsSnapshot(context.global) : undefined,\n pm_root: context.pm_root,\n payload: cloneContextSnapshot(context.payload),\n };\n const result = matched.run(serviceContext);\n if (result instanceof Promise) {\n warnings.push(`extension_service_override_async_unsupported:${matched.layer}:${matched.name}:${matched.service}`);\n continue;\n }\n if (context.service === \"output_format\" && (result === null || result === undefined || result === serviceContext.payload)) {\n continue;\n }\n return {\n handled: true,\n result,\n warnings,\n };\n } catch {\n warnings.push(`extension_service_override_failed:${matched.layer}:${matched.name}:${matched.service}`);\n }\n }\n return {\n handled: false,\n result: context.payload,\n warnings,\n };\n}\n\n/**\n * Implements run service override for the public runtime surface of this module.\n */\nexport async function runServiceOverride(\n services: ExtensionServiceRegistry,\n context: ServiceOverrideContext,\n): Promise<ServiceOverrideResult> {\n const matches = [...services.overrides].reverse().filter((entry) => entry.service === context.service);\n if (matches.length === 0) {\n return resolveDefaultServiceResult(context);\n }\n\n const warnings: string[] = [];\n for (const matched of matches) {\n try {\n const serviceContext = {\n service: context.service,\n command: context.command ? normalizeCommandName(context.command) : undefined,\n args: context.args ? cloneContextSnapshot(context.args) : undefined,\n options: context.options ? cloneCommandOptionsSnapshot(context.options) : undefined,\n global: context.global ? cloneGlobalOptionsSnapshot(context.global) : undefined,\n pm_root: context.pm_root,\n payload: cloneContextSnapshot(context.payload),\n };\n const result = await Promise.resolve(matched.run(serviceContext));\n if (context.service === \"output_format\" && (result === null || result === undefined || result === serviceContext.payload)) {\n continue;\n }\n return {\n handled: true,\n result,\n warnings,\n };\n } catch {\n warnings.push(`extension_service_override_failed:${matched.layer}:${matched.name}:${matched.service}`);\n }\n }\n return {\n handled: false,\n result: context.payload,\n warnings,\n };\n}\n\n/**\n * Implements run command override for the public runtime surface of this module.\n */\nexport function runCommandOverride(\n commands: ExtensionCommandRegistry,\n context: CommandOverrideContext,\n): CommandOverrideResult {\n const command = normalizeCommandName(context.command);\n if (command.length === 0) {\n return {\n overridden: false,\n result: context.result,\n warnings: [],\n };\n }\n\n const matched = [...commands.overrides].reverse().find((entry) => entry.command === command);\n if (!matched) {\n return {\n overridden: false,\n result: context.result,\n warnings: [],\n };\n }\n\n try {\n const overrideOptions = cloneCommandOptionsSnapshot(context.options);\n const overrideGlobal = cloneGlobalOptionsSnapshot(context.global);\n const overrideResult = matched.run({\n command,\n args: cloneContextSnapshot(context.args),\n options: overrideOptions,\n global: overrideGlobal,\n pm_root: context.pm_root,\n result: cloneContextSnapshot(context.result),\n });\n if (overrideResult instanceof Promise) {\n return {\n overridden: false,\n result: context.result,\n warnings: [`extension_command_override_async_unsupported:${matched.layer}:${matched.name}:${matched.command}`],\n };\n }\n return {\n overridden: true,\n result: overrideResult,\n warnings: [],\n };\n } catch {\n return {\n overridden: false,\n result: context.result,\n warnings: [`extension_command_override_failed:${matched.layer}:${matched.name}:${matched.command}`],\n };\n }\n}\n\n\n/**\n * Implements run renderer override for the public runtime surface of this module.\n */\nexport function runRendererOverride(\n renderers: ExtensionRendererRegistry,\n context: RendererOverrideContext,\n): RendererOverrideResult {\n const matched = [...renderers.overrides].reverse().find((entry) => entry.format === context.format);\n if (!matched) {\n return {\n overridden: false,\n rendered: null,\n warnings: [],\n };\n }\n\n try {\n const rendererCommand = typeof context.command === \"string\" ? normalizeCommandName(context.command) : \"\";\n const rendererArgs = Array.isArray(context.args) ? cloneContextSnapshot(context.args) : [];\n const rendererOptions = cloneCommandOptionsSnapshot(context.options);\n const rendererGlobal = cloneGlobalOptionsSnapshot(context.global);\n const rendererPmRoot = typeof context.pm_root === \"string\" ? context.pm_root : \"\";\n const rendered = matched.run({\n format: context.format,\n command: rendererCommand,\n args: rendererArgs,\n options: rendererOptions,\n global: rendererGlobal,\n pm_root: rendererPmRoot,\n result: cloneContextSnapshot(context.result),\n });\n if (rendered === null || rendered === undefined) {\n return {\n overridden: false,\n rendered: null,\n warnings: [],\n };\n }\n if (typeof rendered !== \"string\") {\n return {\n overridden: false,\n rendered: null,\n warnings: [`extension_renderer_invalid_result:${matched.layer}:${matched.name}:${matched.format}`],\n };\n }\n return {\n overridden: true,\n rendered,\n warnings: [],\n };\n } catch {\n return {\n overridden: false,\n rendered: null,\n warnings: [`extension_renderer_failed:${matched.layer}:${matched.name}:${matched.format}`],\n };\n }\n}\n", "/**\n * @module core/extensions/loader\n *\n * Implements extension runtime contracts and governance for Loader.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { pathExists } from \"../fs/fs-utils.js\";\nimport { isPathWithinDirectory } from \"../fs/path-utils.js\";\nimport { resolvePmPackageRootFromModule } from \"../packages/root.js\";\nimport { resolveGlobalPmRoot } from \"../store/paths.js\";\nimport { asRecordLoose, resolveActivatablePropertyRecord } from \"../shared/primitives.js\";\nimport { flattenFlagListValue, isFlagDefaultValueCoercible, resolveFlagValueKind } from \"./flag-value-types.js\";\nimport { KNOWN_ITEM_FIELD_TYPES, normalizeItemFieldType, suggestKnownItemFieldType } from \"./item-field-types.js\";\nimport {\n compareComparableVersions,\n evaluatePmMaxVersionBound,\n evaluatePmMinVersionBound,\n parseComparableVersion,\n type PmVersionBoundEvaluation,\n} from \"./version-compat.js\";\nimport type { ProjectProfileDefinition, ProjectProfileRegistrationInput } from \"../profile/profile-presets.js\";\n// Cohesive helper groups now live in sibling modules. They are imported for the\n// discovery/activation code that stays here and re-exported below so existing\n// import sites (sdk/index.ts, commands/extension.ts, health.ts, tests, …) keep\n// importing everything from \"./loader.js\" unchanged.\nimport {\n normalizeNames,\n isKnownExtensionCapability,\n collectUnknownExtensionCapabilities,\n normalizeManifestCapabilities,\n formatUnknownExtensionCapabilityWarning,\n formatLegacyExtensionCapabilityAliasWarning,\n} from \"./extension-capability-aliases.js\";\nimport {\n normalizeExtensionPolicy,\n serializeExtensionPolicy,\n hydrateExtensionPolicy,\n normalizePolicySandboxProfile,\n evaluateExtensionPolicyForExtension,\n evaluateExtensionPolicyForCapability,\n evaluateExtensionPolicyForRegistration,\n type NormalizedExtensionPolicy,\n type PolicyExtensionRef,\n} from \"./extension-policy.js\";\nimport {\n createEmptyExtensionHookRegistry,\n createEmptyExtensionCommandRegistry,\n createEmptyExtensionParserRegistry,\n createEmptyExtensionPreflightRegistry,\n createEmptyExtensionServiceRegistry,\n createEmptyExtensionRendererRegistry,\n createEmptyExtensionRegistrationRegistry,\n} from \"./extension-registries.js\";\nimport {\n normalizeCommandName,\n cloneContextSnapshot,\n} from \"./extension-runtime-helpers.js\";\nexport {\n parseUnknownExtensionCapabilityWarning,\n parseLegacyExtensionCapabilityAliasWarning,\n} from \"./extension-capability-aliases.js\";\nexport {\n createEmptyExtensionHookRegistry,\n createEmptyExtensionCommandRegistry,\n createEmptyExtensionParserRegistry,\n createEmptyExtensionPreflightRegistry,\n createEmptyExtensionServiceRegistry,\n createEmptyExtensionRendererRegistry,\n createEmptyExtensionRegistrationRegistry,\n} from \"./extension-registries.js\";\nexport {\n runBeforeCommandHooks,\n runAfterCommandHooks,\n runOnWriteHooks,\n runOnReadHooks,\n runOnIndexHooks,\n runCommandHandler,\n runParserOverride,\n runPreflightOverride,\n runServiceOverrideSync,\n runServiceOverride,\n runCommandOverride,\n runRendererOverride,\n} from \"./extension-hook-runtime.js\";\nimport {\n KNOWN_EXTENSION_CAPABILITIES,\n KNOWN_EXTENSION_SERVICE_NAMES,\n createDefaultExtensionGovernancePolicy,\n type ExtensionDeactivationFailure,\n type ExtensionDeactivationOptions,\n type ExtensionDeactivationResult,\n type ExtensionSelfIdentity,\n type ExtensionCapability,\n type ExtensionPolicySurface,\n type ExtensionSandboxProfile,\n type ExtensionGovernancePolicy,\n type PmMaxVersionExceededMode,\n type ExtensionLayer,\n type ExtensionManifest,\n type ExtensionManifestEngines,\n type ExtensionDiagnostic,\n type EffectiveExtension,\n type ExtensionDiscoveryResult,\n type LoadedExtension,\n type FailedExtensionLoad,\n type ExtensionLoadResult,\n type BeforeCommandHook,\n type AfterCommandHook,\n type OnWriteHook,\n type OnReadHook,\n type OnIndexHook,\n type OutputRendererFormat,\n type CommandOverride,\n type RendererOverride,\n type CommandHandler,\n type ParserOverride,\n type PreflightOverride,\n type ServiceOverride,\n type ExtensionHookRegistry,\n type ExtensionServiceName,\n type ExtensionCommandArgumentDefinition,\n type CommandDefinition,\n type FlagDefinition,\n type SchemaFieldDefinition,\n type SchemaItemTypeDefinition,\n type SchemaMigrationDefinition,\n type ImportExportRegistrationOptions,\n type Importer,\n type Exporter,\n type SearchProviderDefinition,\n type VectorStoreAdapterDefinition,\n type RegisteredExtensionParserOverride,\n type RegisteredExtensionServiceOverride,\n type RegisteredExtensionRendererOverride,\n type ExtensionCommandRegistry,\n type ExtensionParserRegistry,\n type ExtensionPreflightRegistry,\n type ExtensionServiceRegistry,\n type ExtensionRendererRegistry,\n type RegisteredExtensionCommandDefinition,\n type RegisteredExtensionSchemaMigrationDefinition,\n type RegisteredExtensionSearchProvider,\n type RegisteredExtensionVectorStoreAdapter,\n type ExtensionRegistrationRegistry,\n type ExtensionRegistrationCounts,\n type ExtensionApi,\n type FailedExtensionActivation,\n type ExtensionActivationFailureTrace,\n type ExtensionActivationResult,\n type ExtensionCandidate,\n type ExtensionLayerScanResult,\n type ScannedExtensionDirectory,\n type LegacyExtensionCapabilityAliasMapping,\n type DiscoverExtensionsOptions,\n type ActivatableExtension,\n} from \"./extension-types.js\";\nexport * from \"./extension-types.js\";\n\nexport const DEFAULT_EXTENSION_PRIORITY = 100;\nlet currentPmCliVersionPromise: Promise<string | null> | null = null;\n\n/* Types now in extension-types.ts - re-exported via `export * from \"./extension-types.js\"` above */\n\nconst DEFAULT_EXTENSION_POLICY: ExtensionGovernancePolicy = Object.freeze(createDefaultExtensionGovernancePolicy());\n\nlet extensionReloadEpoch = 0;\n\n/**\n * Implements next extension reload token for the public runtime surface of this module.\n */\nexport function nextExtensionReloadToken(seed = Date.now()): string {\n extensionReloadEpoch += 1;\n return `${extensionReloadEpoch}-${seed}`;\n}\n\nfunction parseOptionalManifestString(candidate: Record<string, unknown>, field: string): string | null | undefined {\n const value = candidate[field];\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value !== \"string\" || value.trim().length === 0) {\n return null;\n }\n return value.trim();\n}\n\nfunction parseManifestEngines(value: unknown): ExtensionManifestEngines | null | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const enginesRecord = asRecordLoose(value);\n if (!enginesRecord) {\n return null;\n }\n const engines: ExtensionManifestEngines = {};\n for (const key of Object.keys(enginesRecord).sort((left, right) => left.localeCompare(right))) {\n if (key.trim().length === 0) {\n return null;\n }\n const engineValue = enginesRecord[key];\n if (typeof engineValue !== \"string\" || engineValue.trim().length === 0) {\n return null;\n }\n engines[key.trim()] = engineValue.trim();\n }\n return Object.keys(engines).length > 0 ? engines : undefined;\n}\n\n/** Parse a required manifest string field, returning `null` when it is absent, non-string, or blank. */\nfunction parseRequiredManifestString(candidate: Record<string, unknown>, field: string): string | null {\n const value = candidate[field];\n if (typeof value !== \"string\" || value.trim().length === 0) {\n return null;\n }\n return value.trim();\n}\n\n/** Parse an optional integer value (`undefined` when absent, `null` when present but not an integer). */\nfunction parseOptionalIntegerValue(value: unknown): number | null | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n return null;\n }\n return value;\n}\n\n/** Parse an optional boolean value (`undefined` when absent, `null` when present but not a boolean). */\nfunction parseOptionalBooleanValue(value: unknown): boolean | null | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value !== \"boolean\") {\n return null;\n }\n return value;\n}\n\n/** Parse the optional integer `priority`, defaulting to {@link DEFAULT_EXTENSION_PRIORITY} when absent and rejecting (`null`) a non-integer. */\nfunction parseManifestPriority(candidate: Record<string, unknown>): number | null {\n const value = parseOptionalIntegerValue(candidate.priority);\n return value === undefined ? DEFAULT_EXTENSION_PRIORITY : value;\n}\n\n/** Parse the optional `sandbox_profile`, rejecting (`null`) any value that does not round-trip through {@link normalizePolicySandboxProfile}. */\nfunction parseManifestSandboxProfile(candidate: Record<string, unknown>): ExtensionSandboxProfile | null | undefined {\n const value = candidate.sandbox_profile;\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value !== \"string\") {\n return null;\n }\n const normalizedProfile = normalizePolicySandboxProfile(value);\n if (normalizedProfile !== value.trim().toLowerCase()) {\n return null;\n }\n return normalizedProfile;\n}\n\n/** Return the trimmed string when `value` is a non-blank string, otherwise `undefined`. */\nfunction optionalTrimmedString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\n/** Parse the optional `provenance` record (`undefined` absent, `null` malformed), keeping only the present trimmed string fields and a boolean `verified`. */\nfunction parseManifestProvenance(value: unknown): ExtensionManifest[\"provenance\"] | null | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const provenanceRecord = asRecordLoose(value);\n if (!provenanceRecord) {\n return null;\n }\n const source = optionalTrimmedString(provenanceRecord.source);\n const signature = optionalTrimmedString(provenanceRecord.signature);\n const attestation = optionalTrimmedString(provenanceRecord.attestation);\n const verified =\n provenanceRecord.verified === undefined || provenanceRecord.verified === null\n ? undefined\n : typeof provenanceRecord.verified === \"boolean\"\n ? provenanceRecord.verified\n : null;\n if (verified === null) {\n return null;\n }\n return {\n ...(source ? { source } : {}),\n ...(signature ? { signature } : {}),\n ...(attestation ? { attestation } : {}),\n ...(typeof verified === \"boolean\" ? { verified } : {}),\n };\n}\n\n/** Parse the optional `permissions` record (`undefined` absent, `null` malformed), keeping only the boolean grants that are present. */\nfunction parseManifestPermissions(value: unknown): ExtensionManifest[\"permissions\"] | null | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const permissionsRecord = asRecordLoose(value);\n if (!permissionsRecord) {\n return null;\n }\n const fsRead = parseOptionalBooleanValue(permissionsRecord.fs_read);\n const fsWrite = parseOptionalBooleanValue(permissionsRecord.fs_write);\n const network = parseOptionalBooleanValue(permissionsRecord.network);\n const envRead = parseOptionalBooleanValue(permissionsRecord.env_read);\n const envWrite = parseOptionalBooleanValue(permissionsRecord.env_write);\n const processSpawn = parseOptionalBooleanValue(permissionsRecord.process_spawn);\n if ([fsRead, fsWrite, network, envRead, envWrite, processSpawn].includes(null)) {\n return null;\n }\n return {\n ...(typeof fsRead === \"boolean\" ? { fs_read: fsRead } : {}),\n ...(typeof fsWrite === \"boolean\" ? { fs_write: fsWrite } : {}),\n ...(typeof network === \"boolean\" ? { network } : {}),\n ...(typeof envRead === \"boolean\" ? { env_read: envRead } : {}),\n ...(typeof envWrite === \"boolean\" ? { env_write: envWrite } : {}),\n ...(typeof processSpawn === \"boolean\" ? { process_spawn: processSpawn } : {}),\n };\n}\n\n/** Parse the optional `capabilities` array, normalizing legacy aliases; returns empty lists when absent and `null` when the field is not a string array. */\nfunction parseManifestCapabilities(\n value: unknown,\n): { capabilities: string[]; legacy_aliases: LegacyExtensionCapabilityAliasMapping[] } | null {\n if (value === undefined || value === null) {\n return { capabilities: [], legacy_aliases: [] };\n }\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"string\")) {\n return null;\n }\n const normalizedCapabilities = normalizeManifestCapabilities(value as string[]);\n return { capabilities: normalizedCapabilities.capabilities, legacy_aliases: normalizedCapabilities.legacy_aliases };\n}\n\n/** Parse the optional `activation` block, returning the de-duplicated sorted `commands` set, `undefined` when no command activation is declared, and `null` when the block is malformed. */\nfunction parseManifestActivation(value: unknown): ExtensionManifest[\"activation\"] | null | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const activationRecord = asRecordLoose(value);\n if (!activationRecord) {\n return null;\n }\n const rawCommands = activationRecord.commands;\n if (rawCommands === undefined || rawCommands === null) {\n return undefined;\n }\n if (!Array.isArray(rawCommands) || rawCommands.some((entry) => typeof entry !== \"string\")) {\n return null;\n }\n const commands = [\n ...new Set(\n rawCommands\n .map((entry) => normalizeCommandName(entry))\n .filter((entry) => entry.length > 0),\n ),\n ].sort((left, right) => left.localeCompare(right));\n return commands.length > 0 ? { commands } : undefined;\n}\n\n/** The optional metadata fields a manifest may declare, parsed and validated as a single bundle so {@link parseManifest} stays a thin orchestrator. */\ninterface ParsedManifestMetadata {\n manifest_version: number | undefined;\n pm_min_version: string | undefined;\n pm_max_version: string | undefined;\n engines: ExtensionManifestEngines | undefined;\n trusted: boolean | undefined;\n sandbox_profile: ExtensionSandboxProfile | undefined;\n provenance: ExtensionManifest[\"provenance\"];\n permissions: ExtensionManifest[\"permissions\"];\n capabilities: string[];\n legacy_capability_aliases: LegacyExtensionCapabilityAliasMapping[];\n activation: ExtensionManifest[\"activation\"];\n}\n\n/** Parse every optional manifest metadata field, returning `null` as soon as any one is malformed. */\nfunction parseManifestMetadata(candidate: Record<string, unknown>): ParsedManifestMetadata | null {\n const manifestVersion = parseOptionalIntegerValue(candidate.manifest_version);\n if (manifestVersion === null) {\n return null;\n }\n const pmMinVersion = parseOptionalManifestString(candidate, \"pm_min_version\");\n if (pmMinVersion === null) {\n return null;\n }\n const pmMaxVersion = parseOptionalManifestString(candidate, \"pm_max_version\");\n if (pmMaxVersion === null) {\n return null;\n }\n const engines = parseManifestEngines(candidate.engines);\n if (engines === null) {\n return null;\n }\n const trusted = parseOptionalBooleanValue(candidate.trusted);\n if (trusted === null) {\n return null;\n }\n const sandboxProfile = parseManifestSandboxProfile(candidate);\n if (sandboxProfile === null) {\n return null;\n }\n const provenance = parseManifestProvenance(candidate.provenance);\n if (provenance === null) {\n return null;\n }\n const permissions = parseManifestPermissions(candidate.permissions);\n if (permissions === null) {\n return null;\n }\n const capabilities = parseManifestCapabilities(candidate.capabilities);\n if (capabilities === null) {\n return null;\n }\n const activation = parseManifestActivation(candidate.activation);\n if (activation === null) {\n return null;\n }\n return {\n manifest_version: manifestVersion,\n pm_min_version: pmMinVersion,\n pm_max_version: pmMaxVersion,\n engines,\n trusted,\n sandbox_profile: sandboxProfile,\n provenance,\n permissions,\n capabilities: capabilities.capabilities,\n legacy_capability_aliases: capabilities.legacy_aliases,\n activation,\n };\n}\n\nfunction parseManifest(raw: unknown): ExtensionManifest | null {\n if (typeof raw !== \"object\" || raw === null) {\n return null;\n }\n const candidate = raw as Record<string, unknown>;\n const name = parseRequiredManifestString(candidate, \"name\");\n if (name === null) {\n return null;\n }\n const version = parseRequiredManifestString(candidate, \"version\");\n if (version === null) {\n return null;\n }\n const entry = parseRequiredManifestString(candidate, \"entry\");\n if (entry === null) {\n return null;\n }\n const priority = parseManifestPriority(candidate);\n if (priority === null) {\n return null;\n }\n const metadata = parseManifestMetadata(candidate);\n if (metadata === null) {\n return null;\n }\n return {\n name,\n version,\n entry,\n priority,\n manifest_version: metadata.manifest_version,\n pm_min_version: metadata.pm_min_version,\n pm_max_version: metadata.pm_max_version,\n engines: metadata.engines,\n trusted: metadata.trusted,\n provenance: metadata.provenance,\n sandbox_profile: metadata.sandbox_profile,\n permissions: metadata.permissions,\n activation: metadata.activation,\n capabilities: metadata.capabilities,\n legacy_capability_aliases:\n metadata.legacy_capability_aliases.length > 0 ? metadata.legacy_capability_aliases : undefined,\n };\n}\n\nfunction shouldEnable(name: string, enabled: Set<string>, disabled: Set<string>): boolean {\n if (disabled.has(name)) {\n return false;\n }\n if (enabled.size === 0) {\n return true;\n }\n return enabled.has(name);\n}\n\n/** Resolve symlinks on both paths before the containment check so a link inside the directory cannot escape it. */\nexport async function isCanonicalPathWithinDirectory(directory: string, targetPath: string): Promise<boolean> {\n const [resolvedDirectory, resolvedTargetPath] = await Promise.all([fs.realpath(directory), fs.realpath(targetPath)]);\n return isPathWithinDirectory(resolvedDirectory, resolvedTargetPath);\n}\n\n/**\n * Implements resolve extension roots for the public runtime surface of this module.\n */\nexport function resolveExtensionRoots(pmRoot: string, cwd = process.cwd()): { global: string; project: string } {\n return {\n global: path.join(resolveGlobalPmRoot(cwd), \"extensions\"),\n project: path.join(pmRoot, \"extensions\"),\n };\n}\n\nasync function listExtensionDirectories(extensionsRoot: string): Promise<string[]> {\n try {\n const entries = await fs.readdir(extensionsRoot, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort((a, b) => a.localeCompare(b));\n } catch {\n return [];\n }\n}\n\nfunction summarizeCandidate(candidate: ExtensionCandidate): EffectiveExtension {\n const summary: EffectiveExtension = {\n layer: candidate.layer,\n directory: candidate.directory,\n manifest_path: candidate.manifest_path,\n name: candidate.manifest.name,\n version: candidate.manifest.version,\n entry: candidate.manifest.entry,\n priority: candidate.manifest.priority,\n entry_path: candidate.entry_path,\n manifest_version: candidate.manifest.manifest_version,\n pm_min_version: candidate.manifest.pm_min_version,\n pm_max_version: candidate.manifest.pm_max_version,\n engines: candidate.manifest.engines,\n trusted: candidate.manifest.trusted,\n provenance: candidate.manifest.provenance,\n sandbox_profile: candidate.manifest.sandbox_profile,\n permissions: candidate.manifest.permissions,\n capabilities: [...candidate.manifest.capabilities],\n activation: candidate.manifest.activation\n ? {\n commands: [...(candidate.manifest.activation.commands as string[])],\n }\n : undefined,\n };\n if (candidate.source_package) {\n summary.source_package = candidate.source_package;\n }\n return summary;\n}\n\nfunction normalizeManagedSourcePackage(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nasync function readManagedExtensionSourcePackages(extensionsRoot: string): Promise<Map<string, string>> {\n const packages = new Map<string, string>();\n try {\n const parsed = JSON.parse(await fs.readFile(path.join(extensionsRoot, \".managed-extensions.json\"), \"utf8\")) as unknown;\n if (typeof parsed !== \"object\" || parsed === null || !Array.isArray((parsed as { entries?: unknown }).entries)) {\n return packages;\n }\n for (const entry of (parsed as { entries: unknown[] }).entries) {\n if (typeof entry !== \"object\" || entry === null) {\n continue;\n }\n const record = entry as { directory?: unknown; name?: unknown; source?: { package?: unknown } };\n const sourcePackage = normalizeManagedSourcePackage(record.source?.package);\n if (!sourcePackage) {\n continue;\n }\n if (typeof record.directory === \"string\" && record.directory.trim().length > 0) {\n packages.set(`directory:${record.directory.trim()}`, sourcePackage);\n }\n if (typeof record.name === \"string\" && record.name.trim().length > 0) {\n packages.set(`name:${record.name.trim()}`, sourcePackage);\n }\n }\n } catch {\n return packages;\n }\n return packages;\n}\n\nfunction sortCandidates(candidates: ExtensionCandidate[]): ExtensionCandidate[] {\n return [...candidates].sort((left, right) => {\n if (left.manifest.priority !== right.manifest.priority) {\n return left.manifest.priority - right.manifest.priority;\n }\n const byName = left.manifest.name.localeCompare(right.manifest.name);\n if (byName !== 0) {\n return byName;\n }\n return left.directory.localeCompare(right.directory);\n });\n}\n\nfunction buildEffectiveExtensions(\n globalCandidates: ExtensionCandidate[],\n projectCandidates: ExtensionCandidate[],\n): ExtensionCandidate[] {\n const ordered = [...sortCandidates(globalCandidates), ...sortCandidates(projectCandidates)];\n const effective: ExtensionCandidate[] = [];\n for (const candidate of ordered) {\n const existingIndex = effective.findIndex((entry) => entry.manifest.name === candidate.manifest.name);\n if (existingIndex >= 0) {\n effective.splice(existingIndex, 1);\n }\n effective.push(candidate);\n }\n return effective;\n}\n\nasync function scanExtensionLayer(\n layer: ExtensionLayer,\n extensionsRoot: string,\n enabled: Set<string>,\n disabled: Set<string>,\n pmMaxVersionExceededMode: PmMaxVersionExceededMode,\n): Promise<ExtensionLayerScanResult> {\n const diagnostics: ExtensionDiagnostic[] = [];\n const warnings: string[] = [];\n const candidates: ExtensionCandidate[] = [];\n const directories = await listExtensionDirectories(extensionsRoot);\n const managedSourcePackages = await readManagedExtensionSourcePackages(extensionsRoot);\n\n for (const directory of directories) {\n const scanned = await scanExtensionDirectory(\n layer,\n extensionsRoot,\n directory,\n enabled,\n disabled,\n managedSourcePackages,\n pmMaxVersionExceededMode,\n );\n diagnostics.push(scanned.diagnostic);\n warnings.push(...scanned.warnings);\n if (scanned.candidate) {\n candidates.push(scanned.candidate);\n }\n }\n\n return { diagnostics, warnings, candidates };\n}\n\n/**\n * Build the `warn`-status scan result for a directory whose manifest is missing\n * or unparseable, carrying the supplied diagnostic warning and no candidate.\n */\nfunction buildUnavailableExtensionScan(\n layer: ExtensionLayer,\n directory: string,\n manifestPath: string,\n warning: string,\n): ScannedExtensionDirectory {\n return {\n diagnostic: {\n layer,\n directory,\n manifest_path: manifestPath,\n name: null,\n version: null,\n entry: null,\n priority: null,\n entry_path: null,\n enabled: null,\n status: \"warn\",\n },\n warnings: [warning],\n candidate: null,\n };\n}\n\n/**\n * Collect the non-fatal load warnings for a parsed extension manifest, in\n * detection order: legacy capability aliases, unknown capabilities, an entry\n * outside or absent from the extension directory, then the pm version\n * floor/ceiling incompatibility warnings.\n */\nfunction collectScannedExtensionWarnings(\n layer: ExtensionLayer,\n manifest: ExtensionManifest,\n entryWithinDirectory: boolean,\n entryExists: boolean,\n pmVersionCompatibility: { allowed: boolean; warning?: string },\n pmMaxVersionCompatibility: { allowed: boolean; warning?: string },\n): string[] {\n const extensionWarnings: string[] = [];\n if (Array.isArray(manifest.legacy_capability_aliases) && manifest.legacy_capability_aliases.length > 0) {\n extensionWarnings.push(\n formatLegacyExtensionCapabilityAliasWarning(layer, manifest.name, manifest.legacy_capability_aliases),\n );\n }\n for (const capability of collectUnknownExtensionCapabilities(manifest.capabilities)) {\n extensionWarnings.push(formatUnknownExtensionCapabilityWarning(layer, manifest.name, capability));\n }\n if (!entryWithinDirectory) {\n extensionWarnings.push(`extension_entry_outside_extension:${layer}:${manifest.name}`);\n } else if (!entryExists) {\n extensionWarnings.push(`extension_entry_missing:${layer}:${manifest.name}`);\n }\n if (pmVersionCompatibility.warning) {\n extensionWarnings.push(pmVersionCompatibility.warning);\n }\n if (pmMaxVersionCompatibility.warning) {\n extensionWarnings.push(pmMaxVersionCompatibility.warning);\n }\n return extensionWarnings;\n}\n\nasync function scanExtensionDirectory(\n layer: ExtensionLayer,\n extensionsRoot: string,\n directory: string,\n enabled: Set<string>,\n disabled: Set<string>,\n managedSourcePackages: ReadonlyMap<string, string>,\n pmMaxVersionExceededMode: PmMaxVersionExceededMode,\n): Promise<ScannedExtensionDirectory> {\n const extensionDir = path.join(extensionsRoot, directory);\n const manifestPath = path.join(extensionDir, \"manifest.json\");\n if (!(await pathExists(manifestPath))) {\n return buildUnavailableExtensionScan(layer, directory, manifestPath, `extension_manifest_missing:${layer}:${directory}`);\n }\n\n let manifest: ExtensionManifest | null;\n try {\n const parsed = JSON.parse(await fs.readFile(manifestPath, \"utf8\")) as unknown;\n manifest = parseManifest(parsed);\n } catch {\n manifest = null;\n }\n\n if (!manifest) {\n return buildUnavailableExtensionScan(layer, directory, manifestPath, `extension_manifest_invalid:${layer}:${directory}`);\n }\n\n const entryPath = path.resolve(extensionDir, manifest.entry);\n const entryWithinDirectoryByPath = isPathWithinDirectory(extensionDir, entryPath);\n const entryExists = entryWithinDirectoryByPath ? await pathExists(entryPath) : false;\n const entryWithinDirectory =\n entryWithinDirectoryByPath && entryExists\n ? await isCanonicalPathWithinDirectory(extensionDir, entryPath)\n : entryWithinDirectoryByPath;\n const enabledForLoad = shouldEnable(manifest.name, enabled, disabled);\n const pmVersionCompatibility = await evaluatePmMinVersionCompatibility(layer, manifest);\n const pmMaxVersionCompatibility = await evaluatePmMaxVersionCompatibility(layer, manifest, pmMaxVersionExceededMode);\n const extensionWarnings = collectScannedExtensionWarnings(\n layer,\n manifest,\n entryWithinDirectory,\n entryExists,\n pmVersionCompatibility,\n pmMaxVersionCompatibility,\n );\n const extensionReady =\n entryWithinDirectory &&\n entryExists &&\n pmVersionCompatibility.allowed &&\n pmMaxVersionCompatibility.allowed;\n const sourcePackage =\n managedSourcePackages.get(`directory:${directory}`) ?? managedSourcePackages.get(`name:${manifest.name}`);\n\n return {\n diagnostic: {\n layer,\n directory,\n manifest_path: manifestPath,\n name: manifest.name,\n version: manifest.version,\n entry: manifest.entry,\n priority: manifest.priority,\n entry_path: entryPath,\n enabled: enabledForLoad,\n status: extensionReady ? \"ok\" : \"warn\",\n },\n warnings: extensionWarnings,\n candidate:\n extensionReady && enabledForLoad\n ? {\n layer,\n directory,\n manifest_path: manifestPath,\n entry_path: entryPath,\n manifest,\n source_package: sourcePackage,\n }\n : null,\n };\n}\n\n\n/**\n * Implements discover extensions for the public runtime surface of this module.\n */\nexport async function discoverExtensions(options: DiscoverExtensionsOptions): Promise<ExtensionDiscoveryResult> {\n const roots = resolveExtensionRoots(options.pmRoot, options.cwd ?? process.cwd());\n const configured_enabled = normalizeNames(options.settings.extensions.enabled);\n const configured_disabled = normalizeNames(options.settings.extensions.disabled);\n const policy = normalizeExtensionPolicy(options.settings);\n const serializedPolicy = serializeExtensionPolicy(policy);\n\n if (options.noExtensions) {\n return {\n disabled_by_flag: true,\n roots,\n configured_enabled,\n configured_disabled,\n discovered: [],\n effective: [],\n warnings: [...policy.warnings],\n policy: serializedPolicy,\n };\n }\n\n const enabled = new Set(configured_enabled);\n const disabled = new Set(configured_disabled);\n const globalScan = await scanExtensionLayer(\"global\", roots.global, enabled, disabled, policy.pmMaxVersionExceededMode.global);\n const projectScan = await scanExtensionLayer(\"project\", roots.project, enabled, disabled, policy.pmMaxVersionExceededMode.project);\n const policyWarnings: string[] = [...policy.warnings];\n const effectiveCandidates = buildEffectiveExtensions(globalScan.candidates, projectScan.candidates);\n const effective: EffectiveExtension[] = [];\n for (const candidate of effectiveCandidates) {\n const extensionRef = {\n layer: candidate.layer,\n name: candidate.manifest.name,\n trusted: candidate.manifest.trusted === true,\n provenanceVerified: candidate.manifest.provenance?.verified === true,\n sandboxProfile: candidate.manifest.sandbox_profile,\n permissions:\n candidate.manifest.permissions && typeof candidate.manifest.permissions === \"object\"\n ? {\n fs_read: candidate.manifest.permissions.fs_read,\n fs_write: candidate.manifest.permissions.fs_write,\n network: candidate.manifest.permissions.network,\n env_read: candidate.manifest.permissions.env_read,\n env_write: candidate.manifest.permissions.env_write,\n process_spawn: candidate.manifest.permissions.process_spawn,\n }\n : undefined,\n };\n const extensionDecision = evaluateExtensionPolicyForExtension(policy, extensionRef);\n if (extensionDecision.warning) {\n policyWarnings.push(extensionDecision.warning);\n }\n if (!extensionDecision.allowed) {\n continue;\n }\n for (const capability of candidate.manifest.capabilities) {\n const capabilityDecision = evaluateExtensionPolicyForCapability(policy, extensionRef, capability);\n if (capabilityDecision.warning) {\n policyWarnings.push(capabilityDecision.warning);\n }\n }\n effective.push(summarizeCandidate(candidate));\n }\n\n return {\n disabled_by_flag: false,\n roots,\n configured_enabled,\n configured_disabled,\n discovered: [...globalScan.diagnostics, ...projectScan.diagnostics],\n effective,\n warnings: [...new Set([...globalScan.warnings, ...projectScan.warnings, ...policyWarnings])],\n policy: serializedPolicy,\n };\n}\n\nfunction formatUnknownError(error: unknown): string {\n if (error instanceof Error && error.message.trim().length > 0) {\n return error.message;\n }\n return String(error);\n}\n\nasync function readCurrentPmCliVersion(): Promise<string | null> {\n try {\n const packageRoot = resolvePmPackageRootFromModule(import.meta.url, [\"../../..\"]);\n const raw = await fs.readFile(path.join(packageRoot, \"package.json\"), \"utf8\");\n const parsed = JSON.parse(raw) as { version?: unknown };\n return typeof parsed.version === \"string\" && parsed.version.trim().length > 0 ? parsed.version.trim() : null;\n } catch {\n return null;\n }\n}\n\nfunction resolveCurrentPmCliVersion(): Promise<string | null> {\n currentPmCliVersionPromise ??= readCurrentPmCliVersion();\n return currentPmCliVersionPromise;\n}\n\nfunction formatPmVersionCompatibilityWarning(\n layer: ExtensionLayer,\n manifest: ExtensionManifest,\n evaluation: PmVersionBoundEvaluation,\n): string | undefined {\n const current = evaluation.current ?? \"unknown\";\n if (evaluation.kind === \"pm_min_version\") {\n switch (evaluation.status) {\n case \"invalid\":\n return `extension_pm_min_version_invalid:${layer}:${manifest.name}:required=${evaluation.required}`;\n case \"unchecked\":\n return `extension_pm_min_version_unchecked:${layer}:${manifest.name}:required=${evaluation.required}:current=${current}`;\n case \"unmet\":\n return `extension_pm_min_version_unmet:${layer}:${manifest.name}:required=${evaluation.required}:current=${current}`;\n default:\n return undefined;\n }\n }\n switch (evaluation.status) {\n case \"invalid\":\n return `extension_pm_max_version_invalid:${layer}:${manifest.name}:allowed=${evaluation.required}`;\n case \"unchecked\":\n return `extension_pm_max_version_unchecked:${layer}:${manifest.name}:allowed=${evaluation.required}:current=${current}`;\n case \"exceeded_warn\":\n return `extension_pm_max_version_exceeded_warn:${layer}:${manifest.name}:allowed=${evaluation.required}:current=${current}`;\n case \"exceeded\":\n return `extension_pm_max_version_exceeded:${layer}:${manifest.name}:allowed=${evaluation.required}:current=${current}`;\n default:\n return undefined;\n }\n}\n\nasync function evaluatePmMinVersionCompatibility(\n layer: ExtensionLayer,\n manifest: ExtensionManifest,\n): Promise<{ allowed: boolean; warning?: string }> {\n // Resolve the current CLI version only when a bound is declared, so the common\n // no-bound case never reads package.json.\n if (manifest.pm_min_version === undefined) {\n return { allowed: true };\n }\n const evaluation = evaluatePmMinVersionBound(manifest.pm_min_version, await resolveCurrentPmCliVersion());\n const warning = formatPmVersionCompatibilityWarning(layer, manifest, evaluation);\n return warning ? { allowed: evaluation.allowed, warning } : { allowed: evaluation.allowed };\n}\n\nasync function evaluatePmMaxVersionCompatibility(\n layer: ExtensionLayer,\n manifest: ExtensionManifest,\n exceededMode: PmMaxVersionExceededMode,\n): Promise<{ allowed: boolean; warning?: string }> {\n if (manifest.pm_max_version === undefined) {\n return { allowed: true };\n }\n const evaluation = evaluatePmMaxVersionBound(\n manifest.pm_max_version,\n await resolveCurrentPmCliVersion(),\n exceededMode,\n );\n const warning = formatPmVersionCompatibilityWarning(layer, manifest, evaluation);\n return warning ? { allowed: evaluation.allowed, warning } : { allowed: evaluation.allowed };\n}\n\nasync function fingerprintPath(pathToInspect: string): Promise<string> {\n try {\n const stats = await fs.stat(pathToInspect);\n return `${Math.trunc(stats.mtimeMs)}-${stats.size}`;\n } catch {\n return \"missing\";\n }\n}\n\nasync function resolveExtensionImportHref(\n extension: EffectiveExtension,\n options: DiscoverExtensionsOptions,\n): Promise<string> {\n const baseUrl = new URL(pathToFileURL(extension.entry_path).href);\n const shouldCacheBust = options.cache_bust === true || typeof options.reload_token === \"string\";\n if (!shouldCacheBust) {\n return baseUrl.href;\n }\n const [entryFingerprint, manifestFingerprint] = await Promise.all([\n fingerprintPath(extension.entry_path),\n fingerprintPath(extension.manifest_path),\n ]);\n const reloadToken = options.reload_token ?? nextExtensionReloadToken();\n baseUrl.searchParams.set(\"pm_ext_reload\", reloadToken);\n baseUrl.searchParams.set(\"pm_ext_entry\", entryFingerprint);\n baseUrl.searchParams.set(\"pm_ext_manifest\", manifestFingerprint);\n return baseUrl.href;\n}\n\n/**\n * Implements load extensions for the public runtime surface of this module.\n */\nexport async function loadExtensions(options: DiscoverExtensionsOptions): Promise<ExtensionLoadResult> {\n const discovery = await discoverExtensions(options);\n const loaded: LoadedExtension[] = [];\n const failed: FailedExtensionLoad[] = [];\n const warnings = [...discovery.warnings];\n\n if (discovery.disabled_by_flag) {\n return {\n ...discovery,\n warnings,\n loaded,\n failed,\n };\n }\n\n const extensionsToLoad =\n typeof options.extensionFilter === \"function\" ? discovery.effective.filter(options.extensionFilter) : discovery.effective;\n for (const extension of extensionsToLoad) {\n try {\n const importHref = await resolveExtensionImportHref(extension, options);\n const module = await import(importHref);\n loaded.push({\n ...extension,\n module,\n });\n } catch (error: unknown) {\n warnings.push(`extension_load_failed:${extension.layer}:${extension.name}`);\n failed.push({\n layer: extension.layer,\n name: extension.name,\n entry_path: extension.entry_path,\n error: formatUnknownError(error),\n });\n }\n }\n\n return {\n ...discovery,\n warnings,\n loaded,\n failed,\n };\n}\n\nconst DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS = 5_000;\nconst MAX_EXTENSION_DEACTIVATE_TIMEOUT_MS = 2_147_483_647;\n\nfunction toActivatableExtension(source: Record<string, unknown>): ActivatableExtension {\n // Bind to `source` so a module/default-export authored with methods (or a class\n // instance) keeps its `this` across both lifecycle calls — `activate` is a\n // method call on a fresh object and `deactivate` is invoked bare, so without\n // binding the two would see different (or undefined) `this`.\n const activate = source.activate as ActivatableExtension[\"activate\"];\n const activatable: ActivatableExtension = {\n activate: activate.bind(source),\n };\n if (typeof source.deactivate === \"function\") {\n const deactivate = source.deactivate as NonNullable<ActivatableExtension[\"deactivate\"]>;\n activatable.deactivate = deactivate.bind(source);\n }\n return activatable;\n}\n\nfunction resolveActivatableExtension(module: unknown): ActivatableExtension | null {\n const activatableRecord = resolveActivatablePropertyRecord(module);\n return activatableRecord ? toActivatableExtension(activatableRecord) : null;\n}\n\n/**\n * Run the optional `deactivate` teardown hook for every loaded extension that\n * exports one. Best-effort: a throwing teardown is captured as a warning and a\n * failure entry rather than propagated, so one extension cannot block another's\n * cleanup. Hosts call this on shutdown/reload (e.g. the MCP server between\n * native-action requests) to release resources opened during `activate`.\n *\n * Pass the `activationResult` to skip extensions whose `activate` failed — they\n * never fully initialized, so (VS Code-style) their `deactivate` must not run.\n * Teardowns run concurrently and each hook has a bounded timeout by default, so\n * one slow or hanging hook cannot serialize the rest or block the host\n * indefinitely unless the host explicitly disables the timeout; the returned\n * warnings/failures preserve loaded order.\n */\nexport async function deactivateExtensions(\n loadResult: ExtensionLoadResult,\n activationResult?: Pick<ExtensionActivationResult, \"failed\">,\n options: ExtensionDeactivationOptions = {},\n): Promise<ExtensionDeactivationResult> {\n const timeoutMs = normalizeExtensionDeactivateTimeout(options?.deactivate_timeout_ms);\n const failedActivationKeys = new Set(\n (activationResult?.failed ?? []).map((entry) => `${entry.layer}:${entry.name}`),\n );\n const targets: Array<{ extension: LoadedExtension; deactivate: () => void | Promise<void> }> = [];\n for (const extension of loadResult.loaded) {\n if (failedActivationKeys.has(`${extension.layer}:${extension.name}`)) {\n continue;\n }\n const activatable = resolveActivatableExtension(extension.module);\n if (!activatable || typeof activatable.deactivate !== \"function\") {\n continue;\n }\n targets.push({ extension, deactivate: activatable.deactivate });\n }\n const outcomes = await Promise.all(\n targets.map(async ({ extension, deactivate }) => {\n try {\n await runExtensionDeactivateWithTimeout(deactivate, timeoutMs);\n return { ok: true as const };\n } catch (error: unknown) {\n return { ok: false as const, layer: extension.layer, name: extension.name, error: formatUnknownError(error) };\n }\n }),\n );\n const warnings: string[] = [];\n const failed: ExtensionDeactivationFailure[] = [];\n let deactivated = 0;\n for (const outcome of outcomes) {\n if (outcome.ok) {\n deactivated += 1;\n continue;\n }\n warnings.push(`extension_deactivate_failed:${outcome.layer}:${outcome.name}`);\n failed.push({ layer: outcome.layer, name: outcome.name, error: outcome.error });\n }\n return { deactivated, warnings, failed };\n}\n\nfunction normalizeExtensionDeactivateTimeout(rawTimeout: unknown): number {\n if (typeof rawTimeout !== \"number\" || rawTimeout < 0) {\n return DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS;\n }\n if (rawTimeout === 0 || rawTimeout === Infinity) {\n return 0;\n }\n if (!Number.isFinite(rawTimeout)) {\n return DEFAULT_EXTENSION_DEACTIVATE_TIMEOUT_MS;\n }\n return Math.min(MAX_EXTENSION_DEACTIVATE_TIMEOUT_MS, Math.max(1, Math.floor(rawTimeout)));\n}\n\nasync function runExtensionDeactivateWithTimeout(\n deactivate: () => void | Promise<void>,\n timeoutMs: number,\n): Promise<void> {\n if (timeoutMs === 0) {\n await deactivate();\n return;\n }\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n try {\n // A timed-out deactivate promise may still finish later; JavaScript promises\n // are not cancellable, so the host only stops waiting and consumes any late\n // rejection from the hook.\n const deactivatePromise = Promise.resolve().then(() => deactivate());\n deactivatePromise.catch(() => {});\n await Promise.race([\n deactivatePromise,\n new Promise<never>((_, reject) => {\n timeoutHandle = setTimeout(() => {\n reject(new Error(`extension deactivate timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n timeoutHandle.unref?.();\n }),\n ]);\n } finally {\n clearTimeout(timeoutHandle as ReturnType<typeof setTimeout>);\n }\n}\n\nfunction isOutputRendererFormat(value: string): value is OutputRendererFormat {\n return value === \"toon\" || value === \"json\";\n}\n\nfunction isExtensionServiceName(value: string): value is ExtensionServiceName {\n return KNOWN_EXTENSION_SERVICE_NAMES.includes(value as ExtensionServiceName);\n}\n\nfunction assertHookHandler(hookName: string, hook: unknown): void {\n if (typeof hook !== \"function\") {\n throw new TypeError(`api.hooks.${hookName} requires a function handler`);\n }\n}\n\nfunction assertNonEmptyString(name: string, value: unknown): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`${name} requires a non-empty string`);\n }\n return value.trim();\n}\n\nfunction assertFunctionHandler(name: string, value: unknown): void {\n if (typeof value !== \"function\") {\n throw new TypeError(`${name} requires a function handler`);\n }\n}\n\nfunction normalizeRegistrationName(name: string): string {\n return name\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\nfunction toRegistrationCommandPath(name: string, action: \"import\" | \"export\"): string {\n return normalizeCommandName(`${name} ${action}`);\n}\n\nfunction sanitizeRegistrationValue(value: unknown): unknown {\n if (value === null) {\n return null;\n }\n if (Array.isArray(value)) {\n return value.map((entry) => sanitizeRegistrationValue(entry));\n }\n if (typeof value === \"function\") {\n return \"[Function]\";\n }\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n if (typeof value === \"symbol\") {\n return value.toString();\n }\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const normalized: Record<string, unknown> = {};\n const keys = Object.keys(record).sort((left, right) => left.localeCompare(right));\n for (const key of keys) {\n normalized[key] = sanitizeRegistrationValue(record[key]);\n }\n return normalized;\n }\n return value;\n}\n\nfunction cloneRuntimeRegistrationValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((entry) => cloneRuntimeRegistrationValue(entry));\n }\n if (typeof value === \"object\" && value !== null) {\n const record = value as Record<string, unknown>;\n const cloned: Record<string, unknown> = {};\n for (const key of Object.keys(record).sort((left, right) => left.localeCompare(right))) {\n cloned[key] = cloneRuntimeRegistrationValue(record[key]);\n }\n return cloned;\n }\n return value;\n}\n\nconst EXTENSION_REGISTRATION_TRACE_SYMBOL = Symbol(\"extension_registration_trace\");\n\ntype RegistrationTraceCarrier = Error & {\n [EXTENSION_REGISTRATION_TRACE_SYMBOL]?: ExtensionActivationFailureTrace;\n};\n\nfunction createRegistrationValidationError(message: string, trace: ExtensionActivationFailureTrace): TypeError {\n const error = new TypeError(message) as RegistrationTraceCarrier;\n Object.defineProperty(error, EXTENSION_REGISTRATION_TRACE_SYMBOL, {\n value: trace,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return error;\n}\n\nfunction extractRegistrationValidationTrace(error: unknown): ExtensionActivationFailureTrace | undefined {\n if (!(error instanceof Error)) {\n return undefined;\n }\n return (error as RegistrationTraceCarrier)[EXTENSION_REGISTRATION_TRACE_SYMBOL];\n}\n\nfunction normalizeRegistrationRecord(name: string, value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${name} requires an object definition`);\n }\n return sanitizeRegistrationValue(value) as Record<string, unknown>;\n}\n\nfunction normalizeRuntimeRegistrationRecord(name: string, value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${name} requires an object definition`);\n }\n return cloneRuntimeRegistrationValue(value) as Record<string, unknown>;\n}\n\nfunction normalizeRegistrationRecordList(name: string, value: unknown): Array<Record<string, unknown>> {\n if (!Array.isArray(value)) {\n throw new TypeError(`${name} requires an array of object definitions`);\n }\n return value.map((entry) => normalizeRegistrationRecord(name, entry));\n}\n\nfunction asRegistrationRecord(name: string, value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${name} requires an object definition`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction assertOptionalBooleanField(name: string, value: unknown): void {\n if (value !== undefined && typeof value !== \"boolean\") {\n throw new TypeError(`${name} must be a boolean when provided`);\n }\n}\n\nfunction assertOptionalStringField(name: string, value: unknown): void {\n if (value === undefined) {\n return;\n }\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`${name} must be a non-empty string when provided`);\n }\n}\n\nfunction isFlagDefaultScalar(value: unknown): boolean {\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n}\n\nfunction assertOptionalFlagDefaultField(name: string, value: unknown): void {\n if (value === undefined) {\n return;\n }\n if (Array.isArray(value)) {\n for (const [index, item] of value.entries()) {\n if (!isFlagDefaultScalar(item)) {\n throw new TypeError(`${name}[${index}] must be a string, number, or boolean`);\n }\n }\n return;\n }\n if (!isFlagDefaultScalar(value)) {\n throw new TypeError(`${name} must be a string, number, or boolean, or an array of these when provided`);\n }\n}\n\nfunction assertOptionalStringArrayField(name: string, value: unknown): void {\n if (value === undefined) {\n return;\n }\n if (!Array.isArray(value)) {\n throw new TypeError(`${name} must be an array of non-empty strings when provided`);\n }\n for (const [index, entry] of value.entries()) {\n if (typeof entry !== \"string\" || entry.trim().length === 0) {\n throw new TypeError(`${name}[${index}] must be a non-empty string`);\n }\n }\n}\n\nfunction normalizeOptionalStringArrayField(name: string, value: unknown): string[] {\n assertOptionalStringArrayField(name, value);\n if (!Array.isArray(value)) {\n return [];\n }\n const normalized: string[] = [];\n const seen = new Set<string>();\n for (const entry of value) {\n const trimmed = entry.trim();\n if (trimmed.length === 0 || seen.has(trimmed)) {\n continue;\n }\n seen.add(trimmed);\n normalized.push(trimmed);\n }\n return normalized;\n}\n\nfunction normalizeCommandActionName(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[\\s_]+/g, \"-\")\n .replace(/[^a-z0-9-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nfunction resolveCommandDefinitionAction(commandPath: string, action: unknown): string {\n if (action === undefined) {\n return commandPath.replace(/\\s+/g, \"-\");\n }\n if (typeof action !== \"string\" || action.trim().length === 0) {\n throw new TypeError(\"registerCommand definition.action must be a non-empty string when provided\");\n }\n const normalized = normalizeCommandActionName(action);\n if (normalized.length === 0) {\n throw new TypeError(\"registerCommand definition.action must contain alphanumeric characters\");\n }\n return normalized;\n}\n\nfunction normalizeCommandDefinitionArguments(value: unknown): ExtensionCommandArgumentDefinition[] {\n if (value === undefined) {\n return [];\n }\n if (!Array.isArray(value)) {\n throw new TypeError(\"registerCommand definition.arguments must be an array when provided\");\n }\n const normalized: ExtensionCommandArgumentDefinition[] = [];\n for (const [index, entry] of value.entries()) {\n const record = asRegistrationRecord(`registerCommand definition.arguments[${index}]`, entry);\n const name = assertNonEmptyString(`registerCommand definition.arguments[${index}].name`, record.name);\n assertOptionalBooleanField(`registerCommand definition.arguments[${index}].required`, record.required);\n assertOptionalBooleanField(`registerCommand definition.arguments[${index}].variadic`, record.variadic);\n assertOptionalStringField(`registerCommand definition.arguments[${index}].description`, record.description);\n if (name.includes(\" \")) {\n throw new TypeError(`registerCommand definition.arguments[${index}].name must not contain spaces`);\n }\n const definition: ExtensionCommandArgumentDefinition = {\n name,\n };\n if (record.required === true) {\n definition.required = true;\n }\n if (record.variadic === true) {\n definition.variadic = true;\n }\n if (typeof record.description === \"string\") {\n definition.description = record.description.trim();\n }\n normalized.push(definition);\n }\n\n const variadicIndexes = normalized\n .map((argument, index) => (argument.variadic ? index : -1))\n .filter((index) => index >= 0);\n if (variadicIndexes.length > 1) {\n throw new TypeError(\"registerCommand definition.arguments supports at most one variadic argument\");\n }\n if (variadicIndexes.length === 1 && variadicIndexes[0] !== normalized.length - 1) {\n throw new TypeError(\"registerCommand definition.arguments variadic argument must be the final argument\");\n }\n\n return normalized;\n}\n\nfunction validateFlagDefinitions(flags: unknown): void {\n if (!Array.isArray(flags)) {\n throw new TypeError(\"registerFlags flags requires an array of object definitions\");\n }\n for (const [index, raw] of flags.entries()) {\n const record = asRegistrationRecord(`registerFlags flags[${index}]`, raw);\n const long = record.long;\n const short = record.short;\n if (long === undefined && short === undefined) {\n throw new TypeError(`registerFlags flags[${index}] requires at least one of long or short`);\n }\n assertOptionalStringField(`registerFlags flags[${index}].long`, long);\n assertOptionalStringField(`registerFlags flags[${index}].short`, short);\n assertOptionalStringField(`registerFlags flags[${index}].value_name`, record.value_name);\n assertOptionalStringField(`registerFlags flags[${index}].description`, record.description);\n assertOptionalBooleanField(`registerFlags flags[${index}].required`, record.required);\n assertOptionalBooleanField(`registerFlags flags[${index}].enabled`, record.enabled);\n assertOptionalBooleanField(`registerFlags flags[${index}].visible`, record.visible);\n assertOptionalBooleanField(`registerFlags flags[${index}].list`, record.list);\n assertOptionalFlagDefaultField(`registerFlags flags[${index}].default`, record.default);\n if (Array.isArray(record.default) && record.list !== true) {\n throw new TypeError(`registerFlags flags[${index}].default cannot be an array unless list is true.`);\n }\n assertFlagValueTypeAndDefault(`registerFlags flags[${index}]`, record);\n }\n}\n\n/**\n * Reject a declared `value_type`/`type` that is not a known flag value kind, and\n * a `default` whose value(s) would not cleanly coerce under that kind — so the\n * typed-flag contract is enforced at registration instead of silently leaving\n * an untyped value to surface at use time.\n */\nfunction assertFlagValueTypeAndDefault(label: string, record: Record<string, unknown>): void {\n const declaredType =\n (typeof record.value_type === \"string\" ? record.value_type : undefined) ??\n (typeof record.type === \"string\" ? record.type : undefined);\n if (declaredType === undefined) {\n return;\n }\n const kind = resolveFlagValueKind(declaredType);\n if (kind === null) {\n throw new TypeError(\n `${label} value_type \"${declaredType}\" is not a known flag value type (expected one of: string, number, boolean).`,\n );\n }\n if (record.default === undefined) {\n return;\n }\n // For list flags, validate the default exactly as the runtime will see it —\n // comma-joined strings and nested arrays are flattened first — so a valid\n // default like `value_type: \"number\", default: \"10,20\"` is not wrongly rejected.\n const defaults = record.list === true ? flattenFlagListValue(record.default) : [record.default];\n for (const [defaultIndex, defaultValue] of defaults.entries()) {\n if (!isFlagDefaultValueCoercible(defaultValue as string | number | boolean, kind)) {\n const suffix = defaults.length > 1 ? `default[${defaultIndex}]` : \"default\";\n throw new TypeError(`${label}.${suffix} (${JSON.stringify(defaultValue)}) is not coercible to ${kind}.`);\n }\n }\n}\n\nfunction validateItemFieldDefinitions(fields: unknown): void {\n if (!Array.isArray(fields)) {\n throw new TypeError(\"registerItemFields fields requires an array of object definitions\");\n }\n for (const [index, raw] of fields.entries()) {\n const record = asRegistrationRecord(`registerItemFields fields[${index}]`, raw);\n assertNonEmptyString(`registerItemFields fields[${index}].name`, record.name);\n const fieldType = assertNonEmptyString(`registerItemFields fields[${index}].type`, record.type);\n if (normalizeItemFieldType(fieldType) === null) {\n const suggestion = suggestKnownItemFieldType(fieldType);\n const hint = suggestion ? ` Did you mean \"${suggestion}\"?` : \"\";\n throw new TypeError(\n `registerItemFields fields[${index}].type \"${fieldType}\" is not a known field type ` +\n `(expected one of: ${KNOWN_ITEM_FIELD_TYPES.join(\", \")}).${hint}`,\n );\n }\n assertOptionalBooleanField(`registerItemFields fields[${index}].optional`, record.optional);\n }\n}\n\nfunction validateItemTypeDefinitions(types: unknown): void {\n if (!Array.isArray(types)) {\n throw new TypeError(\"registerItemTypes types requires an array of object definitions\");\n }\n for (const [typeIndex, raw] of types.entries()) {\n const record = asRegistrationRecord(`registerItemTypes types[${typeIndex}]`, raw);\n assertNonEmptyString(`registerItemTypes types[${typeIndex}].name`, record.name);\n assertOptionalStringField(`registerItemTypes types[${typeIndex}].folder`, record.folder);\n assertOptionalStringArrayField(`registerItemTypes types[${typeIndex}].aliases`, record.aliases);\n assertOptionalStringArrayField(\n `registerItemTypes types[${typeIndex}].required_create_fields`,\n record.required_create_fields,\n );\n assertOptionalStringArrayField(\n `registerItemTypes types[${typeIndex}].required_create_repeatables`,\n record.required_create_repeatables,\n );\n\n if (record.command_option_policies !== undefined) {\n if (!Array.isArray(record.command_option_policies)) {\n throw new TypeError(\n `registerItemTypes types[${typeIndex}].command_option_policies must be an array when provided`,\n );\n }\n for (const [policyIndex, rawPolicy] of record.command_option_policies.entries()) {\n const policy = asRegistrationRecord(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}]`,\n rawPolicy,\n );\n assertNonEmptyString(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].command`,\n policy.command,\n );\n assertNonEmptyString(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].option`,\n policy.option,\n );\n assertOptionalBooleanField(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].enabled`,\n policy.enabled,\n );\n assertOptionalBooleanField(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].required`,\n policy.required,\n );\n assertOptionalBooleanField(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].visible`,\n policy.visible,\n );\n }\n }\n\n if (record.options !== undefined) {\n if (!Array.isArray(record.options)) {\n throw new TypeError(`registerItemTypes types[${typeIndex}].options must be an array when provided`);\n }\n for (const [optionIndex, rawOption] of record.options.entries()) {\n const option = asRegistrationRecord(`registerItemTypes types[${typeIndex}].options[${optionIndex}]`, rawOption);\n assertNonEmptyString(`registerItemTypes types[${typeIndex}].options[${optionIndex}].key`, option.key);\n assertOptionalStringArrayField(`registerItemTypes types[${typeIndex}].options[${optionIndex}].values`, option.values);\n assertOptionalBooleanField(`registerItemTypes types[${typeIndex}].options[${optionIndex}].required`, option.required);\n assertOptionalStringArrayField(\n `registerItemTypes types[${typeIndex}].options[${optionIndex}].aliases`,\n option.aliases,\n );\n }\n }\n }\n}\n\nfunction validateMigrationDefinition(definition: unknown): void {\n const record = asRegistrationRecord(\"registerMigration definition\", definition);\n if (record.id !== undefined && typeof record.id !== \"string\") {\n throw new TypeError(\"registerMigration definition.id must be a string when provided\");\n }\n if (record.description !== undefined && typeof record.description !== \"string\") {\n throw new TypeError(\"registerMigration definition.description must be a string when provided\");\n }\n if (record.status !== undefined && typeof record.status !== \"string\") {\n throw new TypeError(\"registerMigration definition.status must be a string when provided\");\n }\n assertOptionalBooleanField(\"registerMigration definition.mandatory\", record.mandatory);\n if (record.run !== undefined && typeof record.run !== \"function\") {\n throw new TypeError(\"registerMigration definition.run must be a function when provided\");\n }\n}\n\n/**\n * The seven array-valued dimensions a {@link ProjectProfileDefinition} stages.\n * Each is \"optional-by-emptiness\": an omitted dimension normalizes to an empty\n * array so the profile planner can iterate every dimension unconditionally.\n */\nconst PROJECT_PROFILE_DIMENSIONS = [\n \"types\",\n \"statuses\",\n \"fields\",\n \"workflows\",\n \"config\",\n \"templates\",\n \"packages\",\n] as const;\n\n/**\n * Validates the field shapes the profile planner, `pm profile show/apply/lint`,\n * and `describeProjectProfile` dereference without re-checking, so a structurally\n * well-formed but type-violating extension entry (e.g. a workflow whose `type` is\n * a number, or whose `allowed_transitions` is not an array) is rejected here\n * rather than crashing a downstream consumer. Dimensions whose consumers already\n * coerce or gracefully reject malformed values (statuses, fields, config) need no\n * shape check. The `entry` is an already-confirmed non-null object.\n */\nfunction validateProjectProfileEntryShape(dimension: string, index: number, entry: Record<string, unknown>): void {\n const at = `registerProfile profile.${dimension}[${index}]`;\n if (dimension === \"types\") {\n if (entry.name !== undefined && typeof entry.name !== \"string\") {\n throw new TypeError(`${at}.name must be a string when provided`);\n }\n return;\n }\n if (dimension === \"workflows\") {\n if (typeof entry.type !== \"string\") {\n throw new TypeError(`${at}.type must be a string`);\n }\n if (!Array.isArray(entry.allowed_transitions)) {\n throw new TypeError(`${at}.allowed_transitions must be an array`);\n }\n for (const [pairIndex, pair] of entry.allowed_transitions.entries()) {\n if (!Array.isArray(pair)) {\n throw new TypeError(`${at}.allowed_transitions[${pairIndex}] must be a [from, to] array`);\n }\n }\n return;\n }\n if (dimension === \"templates\") {\n if (typeof entry.name !== \"string\") {\n throw new TypeError(`${at}.name must be a string`);\n }\n if (typeof entry.options !== \"object\" || entry.options === null || Array.isArray(entry.options)) {\n throw new TypeError(`${at}.options must be an object`);\n }\n return;\n }\n if (dimension === \"packages\") {\n if (typeof entry.spec !== \"string\") {\n throw new TypeError(`${at}.spec must be a string`);\n }\n }\n}\n\nfunction validateProjectProfileDefinition(profile: unknown): void {\n const record = asRegistrationRecord(\"registerProfile profile\", profile);\n assertNonEmptyString(\"registerProfile profile.name\", record.name);\n assertNonEmptyString(\"registerProfile profile.title\", record.title);\n if (record.summary !== undefined && typeof record.summary !== \"string\") {\n throw new TypeError(\"registerProfile profile.summary must be a string when provided\");\n }\n for (const dimension of PROJECT_PROFILE_DIMENSIONS) {\n const value = record[dimension];\n if (value === undefined) {\n continue;\n }\n if (!Array.isArray(value)) {\n throw new TypeError(`registerProfile profile.${dimension} must be an array when provided`);\n }\n // Each dimension entry must be a non-null object: a primitive or null entry\n // (e.g. `statuses: [null]`, `types: [42]`) survives an array-only check but\n // crashes the profile planner and `pm profile show` when they read `entry.id`\n // / `entry.key` / `entry.type` later. Reject it at the registration boundary.\n for (const [index, entry] of value.entries()) {\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n throw new TypeError(`registerProfile profile.${dimension}[${index}] must be an object`);\n }\n // Beyond \"is an object\", validate the specific field shapes consumers\n // dereference so a type-violating entry can never crash the planner, the\n // `pm profile` surfaces, or describeProjectProfile downstream.\n validateProjectProfileEntryShape(dimension, index, entry as Record<string, unknown>);\n }\n }\n}\n\n/**\n * Fills an already-validated profile snapshot's optional surfaces — an absent\n * `summary` becomes an empty string and every omitted dimension an empty array —\n * so the stored definition always has the full {@link ProjectProfileDefinition}\n * shape the profile planner and `pm profile` resolution rely on. It runs after\n * validation on the cloned snapshot, so it only ever supplies missing defaults\n * and never has to coerce an invalid type (those are already rejected).\n */\nfunction applyProjectProfileDefaults(profile: Record<string, unknown>): ProjectProfileDefinition {\n if (profile.summary === undefined) {\n profile.summary = \"\";\n }\n for (const dimension of PROJECT_PROFILE_DIMENSIONS) {\n if (profile[dimension] === undefined) {\n profile[dimension] = [];\n }\n }\n return profile as unknown as ProjectProfileDefinition;\n}\n\nfunction attachRuntimeDefinition<TEntry extends { definition: Record<string, unknown> }>(\n entry: TEntry,\n runtimeDefinition: Record<string, unknown>,\n): TEntry {\n Object.defineProperty(entry, \"runtime_definition\", {\n value: runtimeDefinition,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n return entry;\n}\n\nfunction getDeclaredExtensionCapabilities(extension: LoadedExtension): Set<ExtensionCapability> | null {\n if (!Array.isArray(extension.capabilities)) {\n return null;\n }\n const declared = new Set<ExtensionCapability>();\n for (const capability of extension.capabilities) {\n const normalized = capability.trim().toLowerCase();\n if (isKnownExtensionCapability(normalized)) {\n declared.add(normalized);\n }\n }\n return declared;\n}\n\nfunction assertExtensionCapability(extension: LoadedExtension, capability: ExtensionCapability, method: string): void {\n const declared = getDeclaredExtensionCapabilities(extension);\n // Keep direct unit tests that construct LoadedExtension fixtures without\n // capability metadata backwards-compatible while enforcing manifest-declared\n // capabilities for runtime-loaded extensions.\n if (declared === null) {\n return;\n }\n if (!declared.has(capability)) {\n throw createRegistrationValidationError(\n `${method} requires capability '${capability}' in extension manifest capabilities`,\n {\n method,\n registration_index: -1,\n capability,\n missing_capability: capability,\n expected_schema: `\"capabilities\": [..., \"${capability}\"]`,\n received: extension.capabilities,\n hint: `Add \"${capability}\" to ${extension.name} manifest capabilities, or remove the ${method} registration call.`,\n },\n );\n }\n}\n\nfunction createExtensionApi(\n extension: LoadedExtension,\n hooks: ExtensionHookRegistry,\n commands: ExtensionCommandRegistry,\n parsers: ExtensionParserRegistry,\n preflight: ExtensionPreflightRegistry,\n services: ExtensionServiceRegistry,\n renderers: ExtensionRendererRegistry,\n registrations: ExtensionRegistrationRegistry,\n activationWarnings: string[],\n policy: NormalizedExtensionPolicy,\n): ExtensionApi {\n const selfIdentity: ExtensionSelfIdentity = Object.freeze({\n name: extension.name,\n layer: extension.layer,\n version: extension.version,\n capabilities: Object.freeze(\n (extension.capabilities ?? []).filter((capability): capability is ExtensionCapability =>\n (KNOWN_EXTENSION_CAPABILITIES as readonly string[]).includes(capability),\n ),\n ) as readonly ExtensionCapability[],\n pm_min_version: extension.pm_min_version,\n pm_max_version: extension.pm_max_version,\n source_package: extension.source_package,\n });\n const extensionRef: PolicyExtensionRef = {\n layer: extension.layer,\n name: extension.name,\n trusted: extension.trusted === true,\n provenanceVerified: extension.provenance?.verified === true,\n sandboxProfile: extension.sandbox_profile,\n permissions:\n extension.permissions && typeof extension.permissions === \"object\"\n ? {\n fs_read: extension.permissions.fs_read,\n fs_write: extension.permissions.fs_write,\n network: extension.permissions.network,\n env_read: extension.permissions.env_read,\n env_write: extension.permissions.env_write,\n process_spawn: extension.permissions.process_spawn,\n }\n : undefined,\n };\n const pushPolicyWarning = (warning: string | null): void => {\n if (warning) {\n activationWarnings.push(warning);\n }\n };\n const allowRegistration = (\n surface: ExtensionPolicySurface,\n method: string,\n capability?: ExtensionCapability,\n details?: {\n command?: string;\n action?: string;\n service?: string;\n },\n ): boolean => {\n const decision = evaluateExtensionPolicyForRegistration(policy, extensionRef, surface, method, capability, details);\n pushPolicyWarning(decision.warning);\n return decision.allowed;\n };\n const registerCommandTrace = (\n mode: \"override\" | \"definition\",\n command: string | undefined,\n expectedSchema: string,\n received: unknown,\n hint?: string,\n ): ExtensionActivationFailureTrace => ({\n method: \"registerCommand\",\n registration_index: mode === \"override\" ? commands.overrides.length : commands.handlers.length,\n command,\n expected_schema: expectedSchema,\n received: sanitizeRegistrationValue(received),\n hint,\n });\n\n const registerCommandOverride = (command: string, override: CommandOverride | undefined): void => {\n const normalizedCommand = normalizeCommandName(command);\n if (normalizedCommand.length === 0) {\n throw createRegistrationValidationError(\n \"registerCommand requires a non-empty command name\",\n registerCommandTrace(\n \"override\",\n command,\n 'registerCommand(\"<command>\", (context) => unknown)',\n command,\n \"Provide a non-empty command path as the first argument.\",\n ),\n );\n }\n if (typeof override !== \"function\") {\n const trace = registerCommandTrace(\n \"override\",\n normalizedCommand,\n 'registerCommand(\"<command>\", (context) => unknown)',\n { command, override },\n \"Provide a function as the second registerCommand argument.\",\n );\n throw createRegistrationValidationError(\n `registerCommand requires an override function when command name is provided (command=\"${normalizedCommand}\", registration_index=${trace.registration_index})`,\n trace,\n );\n }\n if (!allowRegistration(\"commands.override\", \"registerCommand\", \"commands\", { command: normalizedCommand })) {\n return;\n }\n commands.overrides.push({\n layer: extension.layer,\n name: extension.name,\n command: normalizedCommand,\n run: override,\n });\n };\n\n const resolveCommandDefinitionRunHandler = (\n definition: CommandDefinition,\n normalizedCommand: string,\n ): CommandHandler | undefined => {\n const runHandler = typeof definition.run === \"function\" ? definition.run : undefined;\n const legacyHandler = typeof definition.handler === \"function\" ? definition.handler : undefined;\n if (!runHandler && legacyHandler) {\n activationWarnings.push(\n `extension_command_definition_legacy_handler_alias:${extension.layer}:${extension.name}:${normalizedCommand}`,\n );\n }\n return runHandler ?? legacyHandler;\n };\n\n const registerCommandDefinition = (definition: CommandDefinition): void => {\n if (typeof definition !== \"object\" || definition === null) {\n throw createRegistrationValidationError(\n \"registerCommand requires a command definition object\",\n registerCommandTrace(\n \"definition\",\n undefined,\n \"{ name: string; run: (context) => unknown; }\",\n definition,\n \"Use registerCommand({ name: \\\"command path\\\", run: (context) => ... }).\",\n ),\n );\n }\n if (typeof definition.name !== \"string\") {\n throw createRegistrationValidationError(\n \"registerCommand requires a command definition name\",\n registerCommandTrace(\n \"definition\",\n undefined,\n \"{ name: string; run: (context) => unknown; }\",\n definition,\n \"Set command definition.name to a non-empty string command path.\",\n ),\n );\n }\n\n const normalizedCommand = normalizeCommandName(definition.name);\n if (normalizedCommand.length === 0) {\n throw createRegistrationValidationError(\n \"registerCommand requires a non-empty command definition name\",\n registerCommandTrace(\n \"definition\",\n definition.name,\n \"{ name: string; run: (context) => unknown; }\",\n definition,\n \"Ensure command definition.name contains a non-empty command path.\",\n ),\n );\n }\n const resolvedHandler = resolveCommandDefinitionRunHandler(definition, normalizedCommand);\n if (typeof resolvedHandler !== \"function\") {\n const trace = registerCommandTrace(\n \"definition\",\n normalizedCommand,\n \"{ name: string; run: (context) => unknown; }\",\n definition,\n \"Define command definition.run as a function.\",\n );\n throw createRegistrationValidationError(\n `registerCommand requires a command definition run handler (command=\"${normalizedCommand}\", registration_index=${trace.registration_index})`,\n trace,\n );\n }\n try {\n assertOptionalStringField(\"registerCommand definition.action\", definition.action);\n assertOptionalStringField(\"registerCommand definition.description\", definition.description);\n assertOptionalStringField(\"registerCommand definition.intent\", definition.intent);\n const action = resolveCommandDefinitionAction(normalizedCommand, definition.action);\n if (!allowRegistration(\"commands.handler\", \"registerCommand\", \"commands\", { command: normalizedCommand, action })) {\n return;\n }\n const description = definition.description?.trim();\n const intent = definition.intent?.trim();\n const examples = normalizeOptionalStringArrayField(\"registerCommand definition.examples\", definition.examples);\n const failureHints = normalizeOptionalStringArrayField(\n \"registerCommand definition.failure_hints\",\n definition.failure_hints,\n );\n const argumentsDefinition = normalizeCommandDefinitionArguments(definition.arguments);\n\n if (definition.flags !== undefined) {\n assertExtensionCapability(extension, \"schema\", \"registerCommand flags\");\n validateFlagDefinitions(definition.flags);\n registrations.flags.push({\n layer: extension.layer,\n name: extension.name,\n target_command: normalizedCommand,\n flags: normalizeRegistrationRecordList(\"registerCommand definition.flags\", definition.flags),\n });\n }\n\n const registration: RegisteredExtensionCommandDefinition = {\n layer: extension.layer,\n name: extension.name,\n source_package: extension.source_package,\n command: normalizedCommand,\n action,\n examples,\n failure_hints: failureHints,\n arguments: argumentsDefinition,\n };\n if (description) {\n registration.description = description;\n }\n if (intent) {\n registration.intent = intent;\n }\n registrations.commands.push(registration);\n } catch (error: unknown) {\n const reason = formatUnknownError(error);\n const trace = registerCommandTrace(\n \"definition\",\n normalizedCommand,\n \"{ name: string; run: (context) => unknown; action?: string; arguments?: object[]; flags?: object[]; }\",\n definition,\n \"Use schema-style metadata (action/arguments/flags/examples/intent) with valid values.\",\n );\n throw createRegistrationValidationError(\n `registerCommand definition metadata invalid (command=\"${normalizedCommand}\", registration_index=${trace.registration_index}): ${reason}`,\n trace,\n );\n }\n commands.handlers.push({\n layer: extension.layer,\n name: extension.name,\n command: normalizedCommand,\n run: resolvedHandler,\n });\n };\n\n const registerCommand = (commandOrDefinition: string | CommandDefinition, override?: CommandOverride): void => {\n assertExtensionCapability(extension, \"commands\", \"registerCommand\");\n if (typeof commandOrDefinition === \"string\") {\n registerCommandOverride(commandOrDefinition, override);\n return;\n }\n registerCommandDefinition(commandOrDefinition);\n };\n const registerParser = (command: string, override: ParserOverride): void => {\n assertExtensionCapability(extension, \"parser\", \"registerParser\");\n if (!allowRegistration(\"parser.override\", \"registerParser\", \"parser\")) {\n return;\n }\n const normalizedCommand = normalizeCommandName(assertNonEmptyString(\"registerParser command\", command));\n assertFunctionHandler(\"registerParser override\", override);\n parsers.overrides.push({\n layer: extension.layer,\n name: extension.name,\n command: normalizedCommand,\n run: override,\n });\n };\n const registerPreflight = (override: PreflightOverride): void => {\n assertExtensionCapability(extension, \"preflight\", \"registerPreflight\");\n if (!allowRegistration(\"preflight.override\", \"registerPreflight\", \"preflight\")) {\n return;\n }\n assertFunctionHandler(\"registerPreflight override\", override);\n preflight.overrides.push({\n layer: extension.layer,\n name: extension.name,\n run: override,\n });\n };\n const registerService = (service: ExtensionServiceName, override: ServiceOverride): void => {\n assertExtensionCapability(extension, \"services\", \"registerService\");\n const normalizedService = String(service).trim().toLowerCase();\n if (!isExtensionServiceName(normalizedService)) {\n throw new TypeError(`registerService service must be one of: ${KNOWN_EXTENSION_SERVICE_NAMES.join(\", \")}`);\n }\n if (!allowRegistration(\"services.override\", \"registerService\", \"services\", { service: normalizedService })) {\n return;\n }\n assertFunctionHandler(\"registerService override\", override);\n services.overrides.push({\n layer: extension.layer,\n name: extension.name,\n service: normalizedService as ExtensionServiceName,\n run: override,\n });\n };\n const registerRenderer = (format: OutputRendererFormat, renderer: RendererOverride): void => {\n assertExtensionCapability(extension, \"renderers\", \"registerRenderer\");\n if (!allowRegistration(\"renderers.override\", \"registerRenderer\", \"renderers\")) {\n return;\n }\n if (typeof renderer !== \"function\") {\n throw new TypeError(\"registerRenderer requires a renderer function\");\n }\n const normalizedFormat = String(format).trim().toLowerCase();\n if (!isOutputRendererFormat(normalizedFormat)) {\n throw new Error(`registerRenderer format must be toon|json, received: ${String(format)}`);\n }\n renderers.overrides.push({\n layer: extension.layer,\n name: extension.name,\n format: normalizedFormat,\n run: renderer,\n });\n };\n const registerFlags = (targetCommand: string, flags: FlagDefinition[]): void => {\n assertExtensionCapability(extension, \"schema\", \"registerFlags\");\n if (!allowRegistration(\"schema.flags\", \"registerFlags\", \"schema\")) {\n return;\n }\n const normalizedTargetCommand = normalizeCommandName(assertNonEmptyString(\"registerFlags targetCommand\", targetCommand));\n validateFlagDefinitions(flags);\n const normalizedFlags = normalizeRegistrationRecordList(\"registerFlags flags\", flags);\n if (normalizedFlags.length === 0) {\n throw new TypeError(\"registerFlags requires at least one flag definition\");\n }\n registrations.flags.push({\n layer: extension.layer,\n name: extension.name,\n target_command: normalizedTargetCommand,\n flags: normalizedFlags,\n });\n };\n const registerItemFields = (fields: SchemaFieldDefinition[]): void => {\n assertExtensionCapability(extension, \"schema\", \"registerItemFields\");\n if (!allowRegistration(\"schema.itemfields\", \"registerItemFields\", \"schema\")) {\n return;\n }\n validateItemFieldDefinitions(fields);\n const normalizedFields = normalizeRegistrationRecordList(\n \"registerItemFields fields\",\n fields,\n ) as SchemaFieldDefinition[];\n if (normalizedFields.length === 0) {\n throw new TypeError(\"registerItemFields requires at least one field definition\");\n }\n registrations.item_fields.push({\n layer: extension.layer,\n name: extension.name,\n fields: normalizedFields,\n });\n };\n const registerItemTypes = (types: SchemaItemTypeDefinition[]): void => {\n assertExtensionCapability(extension, \"schema\", \"registerItemTypes\");\n if (!allowRegistration(\"schema.itemtypes\", \"registerItemTypes\", \"schema\")) {\n return;\n }\n validateItemTypeDefinitions(types);\n const normalizedTypes = normalizeRegistrationRecordList(\n \"registerItemTypes types\",\n types,\n ) as SchemaItemTypeDefinition[];\n if (normalizedTypes.length === 0) {\n throw new TypeError(\"registerItemTypes requires at least one type definition\");\n }\n registrations.item_types.push({\n layer: extension.layer,\n name: extension.name,\n types: normalizedTypes,\n });\n };\n const registerMigration = (definition: SchemaMigrationDefinition): void => {\n assertExtensionCapability(extension, \"schema\", \"registerMigration\");\n if (!allowRegistration(\"schema.migrations\", \"registerMigration\", \"schema\")) {\n return;\n }\n validateMigrationDefinition(definition);\n const runtimeDefinition = normalizeRuntimeRegistrationRecord(\"registerMigration definition\", definition);\n registrations.migrations.push(\n attachRuntimeDefinition(\n {\n layer: extension.layer,\n name: extension.name,\n definition: normalizeRegistrationRecord(\"registerMigration definition\", definition),\n },\n runtimeDefinition,\n ) as RegisteredExtensionSchemaMigrationDefinition,\n );\n };\n const registerProfile = (profile: ProjectProfileRegistrationInput): void => {\n assertExtensionCapability(extension, \"schema\", \"registerProfile\");\n if (!allowRegistration(\"schema.profiles\", \"registerProfile\", \"schema\")) {\n return;\n }\n // Snapshot first, then validate and default the snapshot: cloning resolves\n // any getters once into plain data decoupled from the caller's object, so\n // validation and storage operate on the same value — a getter cannot present\n // one value to validation and another to the registry. Defaults are applied\n // only after validation, so an invalid type is rejected, not silently coerced.\n const snapshot = cloneRuntimeRegistrationValue(profile);\n validateProjectProfileDefinition(snapshot);\n registrations.profiles.push({\n layer: extension.layer,\n name: extension.name,\n profile: applyProjectProfileDefaults(snapshot as Record<string, unknown>),\n });\n };\n const applyImportExportCommandMetadata = (\n method: \"registerImporter\" | \"registerExporter\",\n commandPath: string,\n options: ImportExportRegistrationOptions | undefined,\n ): void => {\n if (options === undefined) {\n return;\n }\n if (typeof options !== \"object\" || options === null || Array.isArray(options)) {\n throw new TypeError(`${method} options must be an object when provided`);\n }\n assertOptionalStringField(`${method} options.action`, options.action);\n assertOptionalStringField(`${method} options.description`, options.description);\n assertOptionalStringField(`${method} options.intent`, options.intent);\n const action = resolveCommandDefinitionAction(commandPath, options.action);\n const examples = normalizeOptionalStringArrayField(`${method} options.examples`, options.examples);\n const failureHints = normalizeOptionalStringArrayField(`${method} options.failure_hints`, options.failure_hints);\n const argumentsDefinition = normalizeCommandDefinitionArguments(options.arguments);\n\n if (options.flags !== undefined) {\n assertExtensionCapability(extension, \"schema\", `${method} options.flags`);\n // Route metadata flags through the same surface-policy gate as registerFlags so\n // enforce-mode policies blocking schema.flags are honored even when importers are allowed.\n if (allowRegistration(\"schema.flags\", `${method} options.flags`, \"schema\")) {\n validateFlagDefinitions(options.flags);\n registrations.flags.push({\n layer: extension.layer,\n name: extension.name,\n target_command: commandPath,\n flags: normalizeRegistrationRecordList(`${method} options.flags`, options.flags),\n });\n }\n }\n\n const registration: RegisteredExtensionCommandDefinition = {\n layer: extension.layer,\n name: extension.name,\n source_package: extension.source_package,\n command: commandPath,\n action,\n examples,\n failure_hints: failureHints,\n arguments: argumentsDefinition,\n };\n const description = options.description?.trim();\n if (description) {\n registration.description = description;\n }\n const intent = options.intent?.trim();\n if (intent) {\n registration.intent = intent;\n }\n registrations.commands.push(registration);\n };\n const registerImporter = (name: string, importer: Importer, options?: ImportExportRegistrationOptions): void => {\n assertExtensionCapability(extension, \"importers\", \"registerImporter\");\n if (!allowRegistration(\"importers.importer\", \"registerImporter\", \"importers\")) {\n return;\n }\n const normalizedName = normalizeRegistrationName(assertNonEmptyString(\"registerImporter name\", name));\n assertFunctionHandler(\"registerImporter importer\", importer);\n const commandPath = toRegistrationCommandPath(normalizedName, \"import\");\n // Validate and register optional command metadata before mutating the registry\n // so an invalid options object leaves no partial importer registration.\n applyImportExportCommandMetadata(\"registerImporter\", commandPath, options);\n registrations.importers.push({\n layer: extension.layer,\n name: extension.name,\n importer: normalizedName,\n });\n commands.handlers.push({\n layer: extension.layer,\n name: extension.name,\n command: commandPath,\n run: async (context) =>\n importer({\n registration: normalizedName,\n action: \"import\",\n command: context.command,\n args: cloneContextSnapshot(context.args),\n options: cloneContextSnapshot(context.options),\n global: cloneContextSnapshot(context.global),\n pm_root: context.pm_root,\n }),\n });\n };\n const registerExporter = (name: string, exporter: Exporter, options?: ImportExportRegistrationOptions): void => {\n assertExtensionCapability(extension, \"importers\", \"registerExporter\");\n if (!allowRegistration(\"importers.exporter\", \"registerExporter\", \"importers\")) {\n return;\n }\n const normalizedName = normalizeRegistrationName(assertNonEmptyString(\"registerExporter name\", name));\n assertFunctionHandler(\"registerExporter exporter\", exporter);\n const commandPath = toRegistrationCommandPath(normalizedName, \"export\");\n // Validate and register optional command metadata before mutating the registry\n // so an invalid options object leaves no partial exporter registration.\n applyImportExportCommandMetadata(\"registerExporter\", commandPath, options);\n registrations.exporters.push({\n layer: extension.layer,\n name: extension.name,\n exporter: normalizedName,\n });\n commands.handlers.push({\n layer: extension.layer,\n name: extension.name,\n command: commandPath,\n run: async (context) =>\n exporter({\n registration: normalizedName,\n action: \"export\",\n command: context.command,\n args: cloneContextSnapshot(context.args),\n options: cloneContextSnapshot(context.options),\n global: cloneContextSnapshot(context.global),\n pm_root: context.pm_root,\n }),\n });\n };\n const registerSearchProvider = (provider: SearchProviderDefinition): void => {\n assertExtensionCapability(extension, \"search\", \"registerSearchProvider\");\n if (!allowRegistration(\"search.provider\", \"registerSearchProvider\", \"search\")) {\n return;\n }\n const runtimeDefinition = normalizeRuntimeRegistrationRecord(\"registerSearchProvider provider\", provider);\n registrations.search_providers.push(\n attachRuntimeDefinition(\n {\n layer: extension.layer,\n name: extension.name,\n definition: normalizeRegistrationRecord(\"registerSearchProvider provider\", provider),\n },\n runtimeDefinition,\n ) as RegisteredExtensionSearchProvider,\n );\n };\n const registerVectorStoreAdapter = (adapter: VectorStoreAdapterDefinition): void => {\n assertExtensionCapability(extension, \"search\", \"registerVectorStoreAdapter\");\n if (!allowRegistration(\"search.vectorstore\", \"registerVectorStoreAdapter\", \"search\")) {\n return;\n }\n const runtimeDefinition = normalizeRuntimeRegistrationRecord(\"registerVectorStoreAdapter adapter\", adapter);\n registrations.vector_store_adapters.push(\n attachRuntimeDefinition(\n {\n layer: extension.layer,\n name: extension.name,\n definition: normalizeRegistrationRecord(\"registerVectorStoreAdapter adapter\", adapter),\n },\n runtimeDefinition,\n ) as RegisteredExtensionVectorStoreAdapter,\n );\n };\n const registerBeforeCommand = (hook: BeforeCommandHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.beforeCommand\");\n if (!allowRegistration(\"hooks.beforecommand\", \"api.hooks.beforeCommand\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"beforeCommand\", hook);\n hooks.beforeCommand.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n const registerAfterCommand = (hook: AfterCommandHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.afterCommand\");\n if (!allowRegistration(\"hooks.aftercommand\", \"api.hooks.afterCommand\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"afterCommand\", hook);\n hooks.afterCommand.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n const registerOnWrite = (hook: OnWriteHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.onWrite\");\n if (!allowRegistration(\"hooks.onwrite\", \"api.hooks.onWrite\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"onWrite\", hook);\n hooks.onWrite.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n const registerOnRead = (hook: OnReadHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.onRead\");\n if (!allowRegistration(\"hooks.onread\", \"api.hooks.onRead\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"onRead\", hook);\n hooks.onRead.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n const registerOnIndex = (hook: OnIndexHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.onIndex\");\n if (!allowRegistration(\"hooks.onindex\", \"api.hooks.onIndex\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"onIndex\", hook);\n hooks.onIndex.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n\n return {\n extension: selfIdentity,\n registerCommand,\n registerParser,\n registerPreflight,\n registerService,\n registerFlags,\n registerItemFields,\n registerItemTypes,\n registerMigration,\n registerProfile,\n registerRenderer,\n registerImporter,\n registerExporter,\n registerSearchProvider,\n registerVectorStoreAdapter,\n hooks: {\n beforeCommand: registerBeforeCommand,\n afterCommand: registerAfterCommand,\n onWrite: registerOnWrite,\n onRead: registerOnRead,\n onIndex: registerOnIndex,\n },\n };\n}\n\nfunction getRegistrationCounts(registrations: ExtensionRegistrationRegistry): ExtensionRegistrationCounts {\n const commandCount = registrations.commands.length;\n const flagCount = registrations.flags.reduce((total, entry) => total + entry.flags.length, 0);\n const itemFieldCount = registrations.item_fields.reduce((total, entry) => total + entry.fields.length, 0);\n const itemTypeCount = registrations.item_types.reduce((total, entry) => total + entry.types.length, 0);\n return {\n commands: commandCount,\n flags: flagCount,\n item_fields: itemFieldCount,\n item_types: itemTypeCount,\n migrations: registrations.migrations.length,\n profiles: registrations.profiles.length,\n importers: registrations.importers.length,\n exporters: registrations.exporters.length,\n search_providers: registrations.search_providers.length,\n vector_store_adapters: registrations.vector_store_adapters.length,\n };\n}\n\nfunction collectCommandCollisionWarnings(commands: ExtensionCommandRegistry): string[] {\n const warnings: string[] = [];\n const collectByCommand = <TEntry extends { layer: ExtensionLayer; name: string; command: string }>(\n entries: TEntry[],\n codePrefix: string,\n ): void => {\n const grouped = new Map<string, TEntry[]>();\n for (const entry of entries) {\n const bucket = grouped.get(entry.command) ?? [];\n bucket.push(entry);\n grouped.set(entry.command, bucket);\n }\n for (const command of [...grouped.keys()].sort((left, right) => left.localeCompare(right))) {\n const bucket = grouped.get(command)!;\n if (bucket.length <= 1) {\n continue;\n }\n const winner = bucket[bucket.length - 1];\n for (const displaced of bucket.slice(0, -1)) {\n warnings.push(\n `${codePrefix}:${command}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n }\n }\n };\n\n collectByCommand(commands.handlers, \"extension_command_handler_collision\");\n collectByCommand(commands.overrides, \"extension_command_override_collision\");\n\n const handlerCommands = new Set(commands.handlers.map((entry) => entry.command));\n const overlapCommands = [...new Set(commands.overrides.map((entry) => entry.command))].filter((command) =>\n handlerCommands.has(command),\n );\n overlapCommands.sort((left, right) => left.localeCompare(right));\n for (const command of overlapCommands) {\n const handlers = commands.handlers.filter((entry) => entry.command === command);\n const overrides = commands.overrides.filter((entry) => entry.command === command);\n for (const override of overrides) {\n for (const handler of handlers) {\n warnings.push(\n `extension_command_override_handler_overlap:${command}:${override.layer}:${override.name}:${handler.layer}:${handler.name}`,\n );\n }\n }\n }\n\n return warnings;\n}\n\nfunction collectRendererCollisionWarnings(renderers: ExtensionRendererRegistry): string[] {\n const grouped = new Map<OutputRendererFormat, RegisteredExtensionRendererOverride[]>();\n for (const entry of renderers.overrides) {\n const bucket = grouped.get(entry.format) ?? [];\n bucket.push(entry);\n grouped.set(entry.format, bucket);\n }\n const warnings: string[] = [];\n for (const format of [...grouped.keys()].sort((left, right) => left.localeCompare(right))) {\n const bucket = grouped.get(format)!;\n if (bucket.length <= 1) {\n continue;\n }\n const winner = bucket[bucket.length - 1];\n for (const displaced of bucket.slice(0, -1)) {\n warnings.push(\n `extension_renderer_collision:${format}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n }\n }\n return warnings;\n}\n\nfunction collectParserCollisionWarnings(parsers: ExtensionParserRegistry): string[] {\n const warnings: string[] = [];\n const grouped = new Map<string, RegisteredExtensionParserOverride[]>();\n for (const entry of parsers.overrides) {\n const bucket = grouped.get(entry.command) ?? [];\n bucket.push(entry);\n grouped.set(entry.command, bucket);\n }\n for (const command of [...grouped.keys()].sort((left, right) => left.localeCompare(right))) {\n const bucket = grouped.get(command)!;\n if (bucket.length <= 1) {\n continue;\n }\n const winner = bucket[bucket.length - 1];\n for (const displaced of bucket.slice(0, -1)) {\n warnings.push(\n `extension_parser_override_collision:${command}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n }\n }\n return warnings;\n}\n\nfunction collectPreflightCollisionWarnings(preflight: ExtensionPreflightRegistry): string[] {\n if (preflight.overrides.length <= 1) {\n return [];\n }\n const winner = preflight.overrides[preflight.overrides.length - 1];\n return preflight.overrides.slice(0, -1).map(\n (displaced) =>\n `extension_preflight_override_collision:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n}\n\n// Services whose runtime semantics are chain/fall-through (each override gets a chance);\n// for those, registering multiple overrides is by design, not a collision.\nconst CHAINED_SERVICE_NAMES: ReadonlySet<ExtensionServiceName> = new Set<ExtensionServiceName>([\n \"output_format\",\n]);\n\nfunction collectServiceCollisionWarnings(services: ExtensionServiceRegistry): string[] {\n const warnings: string[] = [];\n const grouped = new Map<ExtensionServiceName, RegisteredExtensionServiceOverride[]>();\n for (const entry of services.overrides) {\n const bucket = grouped.get(entry.service) ?? [];\n bucket.push(entry);\n grouped.set(entry.service, bucket);\n }\n for (const service of [...grouped.keys()].sort((left, right) => left.localeCompare(right))) {\n const bucket = grouped.get(service)!;\n if (bucket.length <= 1) {\n continue;\n }\n if (CHAINED_SERVICE_NAMES.has(service)) {\n continue;\n }\n const winner = bucket[bucket.length - 1];\n for (const displaced of bucket.slice(0, -1)) {\n warnings.push(\n `extension_service_override_collision:${service}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n }\n }\n return warnings;\n}\n\n/**\n * Implements activate extensions for the public runtime surface of this module.\n */\nexport async function activateExtensions(loadResult: ExtensionLoadResult): Promise<ExtensionActivationResult> {\n const policy = hydrateExtensionPolicy(loadResult.policy ?? DEFAULT_EXTENSION_POLICY);\n const hooks = createEmptyExtensionHookRegistry();\n const commands = createEmptyExtensionCommandRegistry();\n const parsers = createEmptyExtensionParserRegistry();\n const preflight = createEmptyExtensionPreflightRegistry();\n const services = createEmptyExtensionServiceRegistry();\n const renderers = createEmptyExtensionRendererRegistry();\n const registrations = createEmptyExtensionRegistrationRegistry();\n const failed: FailedExtensionActivation[] = [];\n const warnings: string[] = [];\n\n for (const extension of loadResult.loaded) {\n const activatable = resolveActivatableExtension(extension.module);\n if (!activatable) {\n continue;\n }\n\n try {\n await activatable.activate(\n createExtensionApi(\n extension,\n hooks,\n commands,\n parsers,\n preflight,\n services,\n renderers,\n registrations,\n warnings,\n policy,\n ),\n );\n } catch (error: unknown) {\n warnings.push(`extension_activate_failed:${extension.layer}:${extension.name}`);\n const trace = extractRegistrationValidationTrace(error);\n failed.push({\n layer: extension.layer,\n name: extension.name,\n entry_path: extension.entry_path,\n error: formatUnknownError(error),\n trace,\n });\n }\n }\n\n const collisionWarnings = [\n ...collectCommandCollisionWarnings(commands),\n ...collectParserCollisionWarnings(parsers),\n ...collectPreflightCollisionWarnings(preflight),\n ...collectServiceCollisionWarnings(services),\n ...collectRendererCollisionWarnings(renderers),\n ];\n const mergedWarnings = [...new Set([...warnings, ...collisionWarnings])];\n\n return {\n hooks,\n commands,\n parsers,\n preflight,\n services,\n renderers,\n registrations,\n failed,\n warnings: mergedWarnings,\n hook_counts: {\n before_command: hooks.beforeCommand.length,\n after_command: hooks.afterCommand.length,\n on_write: hooks.onWrite.length,\n on_read: hooks.onRead.length,\n on_index: hooks.onIndex.length,\n },\n command_override_count: commands.overrides.length,\n command_handler_count: commands.handlers.length,\n parser_override_count: parsers.overrides.length,\n preflight_override_count: preflight.overrides.length,\n service_override_count: services.overrides.length,\n renderer_override_count: renderers.overrides.length,\n registration_counts: getRegistrationCounts(registrations),\n };\n}\n\nexport const _testOnlyLoader = {\n assertFlagValueTypeAndDefault,\n assertOptionalStringField,\n compareComparableVersions,\n collectCommandCollisionWarnings,\n collectParserCollisionWarnings,\n collectRendererCollisionWarnings,\n collectServiceCollisionWarnings,\n createExtensionApi,\n createRegistrationValidationError,\n evaluatePmMaxVersionCompatibility,\n evaluatePmMinVersionCompatibility,\n extractRegistrationValidationTrace,\n fingerprintPath,\n getRegistrationCounts,\n normalizeCommandDefinitionArguments,\n normalizeExtensionDeactivateTimeout,\n normalizeOptionalStringArrayField,\n normalizeRegistrationRecord,\n normalizeRegistrationRecordList,\n normalizeRuntimeRegistrationRecord,\n parseComparableVersion,\n parseManifest,\n readCurrentPmCliVersion,\n readManagedExtensionSourcePackages,\n resolveExtensionImportHref,\n resolveCurrentPmCliVersion,\n resolveCommandDefinitionAction,\n sanitizeRegistrationValue,\n validateItemFieldDefinitions,\n resetCurrentPmCliVersionCacheForTest: () => {\n currentPmCliVersionPromise = null;\n },\n};\n", "/**\n * Canonical coercion kinds an extension flag can declare via `value_type`\n * (or the deprecated `type` alias). The runtime also accepts a few common\n * aliases (`int`/`integer`/`float` -> number, `bool` -> boolean) so author\n * intent is honored without surprises.\n */\n/** Canonical scalar value kinds accepted by extension command flag definitions. */\nexport type FlagValueKind = \"string\" | \"number\" | \"boolean\";\n\nconst FLAG_VALUE_KIND_BY_ALIAS: Readonly<Record<string, FlagValueKind>> = Object.freeze({\n string: \"string\",\n number: \"number\",\n int: \"number\",\n integer: \"number\",\n float: \"number\",\n boolean: \"boolean\",\n bool: \"boolean\",\n});\n\n/**\n * Resolve a declared flag value type (string) to its canonical kind, or `null`\n * when it is not a recognized type/alias. Matching is trim- and\n * case-insensitive.\n */\nexport function resolveFlagValueKind(raw: unknown): FlagValueKind | null {\n if (typeof raw !== \"string\") {\n return null;\n }\n return FLAG_VALUE_KIND_BY_ALIAS[raw.trim().toLowerCase()] ?? null;\n}\n\n/**\n * Flatten a `list` flag value (or default) into its individual entries the same\n * way the runtime does: nested arrays are flattened and comma-joined strings are\n * split, with surrounding whitespace trimmed and empty segments dropped. No\n * type coercion is applied. Shared by the CLI coercion path and the\n * registration-time default validator so the two never disagree.\n */\nexport function flattenFlagListValue(value: unknown): unknown[] {\n const entries: unknown[] = [];\n const collect = (input: unknown): void => {\n if (Array.isArray(input)) {\n for (const item of input) {\n collect(item);\n }\n return;\n }\n if (typeof input === \"string\") {\n for (const part of input.split(\",\")) {\n const trimmed = part.trim();\n if (trimmed.length > 0) {\n entries.push(trimmed);\n }\n }\n return;\n }\n if (input !== undefined && input !== null) {\n entries.push(input);\n }\n };\n collect(value);\n return entries;\n}\n\n/**\n * Whether a scalar flag default would cleanly coerce under the declared kind,\n * mirroring the runtime coercion rules in `coerceLooseCommandOptionsWithFlagDefinitions`.\n * Used to reject contradictory definitions (e.g. `value_type: \"number\"` with\n * `default: \"abc\"`) at registration instead of letting an untyped value pass\n * through to activation.\n */\nexport function isFlagDefaultValueCoercible(value: string | number | boolean, kind: FlagValueKind): boolean {\n if (kind === \"string\") {\n return true;\n }\n if (kind === \"number\") {\n if (typeof value === \"number\") {\n return Number.isFinite(value);\n }\n return typeof value === \"string\" && value.trim().length > 0 && Number.isFinite(Number(value));\n }\n if (typeof value === \"boolean\") {\n return true;\n }\n return typeof value === \"string\" && [\"true\", \"false\", \"1\", \"0\"].includes(value.trim().toLowerCase());\n}\n", "/**\n * @module core/extensions/item-field-types\n *\n * Implements extension runtime contracts and governance for Item Field Types.\n */\nimport { levenshteinDistanceWithinLimit } from \"../shared/levenshtein.js\";\n\n/**\n * Canonical coercion kinds accepted for extension-registered custom item fields.\n *\n * A `registerItemFields` definition declares one of these as its `type`; the\n * value is later coerced by that kind (see `coerceRegisteredFieldValue`). Keep\n * this list in lock-step with the coercion switch in `item-fields.ts`.\n */\nexport const KNOWN_ITEM_FIELD_TYPES = [\"string\", \"number\", \"boolean\", \"array\", \"object\"] as const;\n/**\n * Restricts known item field type values accepted by command, SDK, and storage contracts.\n */\nexport type KnownItemFieldType = (typeof KNOWN_ITEM_FIELD_TYPES)[number];\n\n/**\n * Normalize a declared field type to its canonical kind, or `null` when the\n * value is not a known type. Matching is trim- and case-insensitive.\n */\nexport function normalizeItemFieldType(value: string): KnownItemFieldType | null {\n const normalized = value.trim().toLowerCase();\n return (KNOWN_ITEM_FIELD_TYPES as readonly string[]).includes(normalized)\n ? (normalized as KnownItemFieldType)\n : null;\n}\n\n/**\n * Suggest a known field type for a typo'd declaration (e.g. `\"strnig\"` ->\n * `\"string\"`), using the shared OSA Damerau–Levenshtein helper so adjacent\n * transpositions count as a single edit. Returns the first canonical type within\n * the proportional edit budget (in declaration order — the kinds are distinct\n * enough that at most one matches), or `null` when nothing is close enough.\n */\nexport function suggestKnownItemFieldType(value: string): KnownItemFieldType | null {\n const normalized = value.trim().toLowerCase();\n if (normalized.length === 0) {\n return null;\n }\n const limit = Math.max(1, Math.floor(normalized.length * 0.34));\n for (const candidate of KNOWN_ITEM_FIELD_TYPES) {\n if (levenshteinDistanceWithinLimit(normalized, candidate, limit) !== null) {\n return candidate;\n }\n }\n return null;\n}\n", "/**\n * @module core/extensions/version-compat\n *\n * Single source of truth for extension-manifest version-bound compatibility.\n *\n * An extension manifest may declare an inclusive `pm_min_version` lower bound and\n * an inclusive `pm_max_version` upper bound. At load time the\n * {@link ../extensions/loader.js | loader} compares them against the running pm\n * CLI version and skips (or warns about) an extension that falls outside the\n * supported window. The comparison and the per-bound status semantics live here\n * so the runtime loader and the author-time SDK helper\n * (`checkExtensionManifestCompatibility`) share one implementation and can never\n * drift — the same \"agrees with the loader by construction\" guarantee the\n * declarative authoring helpers (`describeExtensionBlueprint`,\n * `deriveExtensionCapabilities`) already provide.\n *\n * The functions here are pure: they take an already-resolved current version\n * (the loader resolves it from `package.json`; the SDK caller supplies a target\n * version) and return structured outcomes. Warning-string formatting and\n * version resolution stay with the loader; finding/message presentation stays\n * with the SDK.\n */\nimport type { PmMaxVersionExceededMode } from \"./extension-types.js\";\n\n/** The two inclusive manifest version bounds pm evaluates at load time. */\nexport type PmVersionBoundKind = \"pm_min_version\" | \"pm_max_version\";\n\n/**\n * The outcome of evaluating a single manifest version bound against a pm version.\n *\n * - `absent`: the bound is not declared — nothing to enforce.\n * - `ok`: the bound is declared and satisfied by the current version.\n * - `invalid`: the declared bound is malformed (unparseable, or a range prefix on\n * `pm_max_version`); the loader treats the extension as incompatible and skips it.\n * - `unchecked`: the bound is well-formed but cannot be compared against the\n * current version (the current version is unknown or not comparable); the\n * extension still loads, with an advisory warning.\n * - `unmet`: the current version is older than the inclusive `pm_min_version`\n * lower bound; the loader skips the extension (only emitted for `pm_min_version`).\n * - `exceeded`: the current version is newer than the inclusive `pm_max_version`\n * upper bound and the exceeded mode is `block`; the loader skips the extension\n * (only emitted for `pm_max_version`).\n * - `exceeded_warn`: the current version is newer than `pm_max_version` but the\n * exceeded mode is `warn`, so the extension loads with an advisory warning\n * (only emitted for `pm_max_version`).\n */\nexport type PmVersionBoundStatus =\n | \"absent\"\n | \"ok\"\n | \"invalid\"\n | \"unchecked\"\n | \"unmet\"\n | \"exceeded\"\n | \"exceeded_warn\";\n\n/**\n * The structured result of evaluating one manifest version bound, consumed by the\n * loader (to format its `extension_pm_*_version_*` warning strings) and the SDK\n * (to build author-time compatibility findings).\n */\nexport interface PmVersionBoundEvaluation {\n /** Which bound this evaluation describes. */\n kind: PmVersionBoundKind;\n /** The classified outcome of comparing the bound against the current version. */\n status: PmVersionBoundStatus;\n /** Whether the bound permits the extension to load (`false` only for `invalid`/`unmet`/`exceeded`). */\n allowed: boolean;\n /** The declared bound value, verbatim; the empty string when the bound is absent. */\n required: string;\n /** The current version compared against, or `null` when it could not be resolved. */\n current: string | null;\n}\n\nfunction formatVersionBoundValue(value: unknown): string {\n return typeof value === \"string\" ? value : String(value);\n}\n\n/**\n * Parse a comparable release string into numeric segments, or `null` when it is\n * not an interpretable dotted-numeric version.\n *\n * Leniently strips a leading inclusive-minimum `>=` and an optional `v` prefix\n * (so `engines.pm`-style `\">=2026.5.31\"` and `\"v1.2.3\"` both parse), then drops\n * any build/pre-release suffix and keeps the leading dotted-numeric release.\n */\nexport function parseComparableVersion(value: string): number[] | null {\n const normalized = value.trim().replace(/^>=\\s*/, \"\").replace(/^v/i, \"\");\n const release = normalized.split(/[+-]/, 1)[0];\n if (!/^\\d+(?:[.-]\\d+)*$/.test(release)) {\n return null;\n }\n return release.split(/[.-]/).map((part) => Number(part));\n}\n\n/**\n * Compare two comparable version strings segment by segment.\n *\n * Returns `1` when `currentVersion` is greater, `-1` when it is smaller, `0` when\n * equal, and `null` when either side is not an interpretable version (so callers\n * can classify the comparison as `unchecked`). Missing trailing segments are\n * treated as `0`, so `1.2` and `1.2.0` compare equal.\n */\nexport function compareComparableVersions(currentVersion: string, otherVersion: string): number | null {\n const currentParts = parseComparableVersion(currentVersion);\n const otherParts = parseComparableVersion(otherVersion);\n if (!currentParts || !otherParts) {\n return null;\n }\n const width = Math.max(currentParts.length, otherParts.length);\n for (let index = 0; index < width; index += 1) {\n const current = currentParts[index] ?? 0;\n const other = otherParts[index] ?? 0;\n if (current > other) {\n return 1;\n }\n if (current < other) {\n return -1;\n }\n }\n return 0;\n}\n\n/**\n * Evaluate a manifest `pm_min_version` inclusive lower bound against the current\n * pm version.\n *\n * An omitted bound is `absent`; a blank, non-string, or unparseable bound is\n * `invalid`; an unknown or incomparable current version is `unchecked`; a current\n * version below the bound is `unmet`; otherwise the bound is satisfied (`ok`).\n * `currentVersion` is `null` when the loader could not resolve the running CLI\n * version.\n */\nexport function evaluatePmMinVersionBound(\n required: unknown,\n currentVersion: string | null,\n): PmVersionBoundEvaluation {\n if (required === undefined || required === null) {\n return { kind: \"pm_min_version\", status: \"absent\", allowed: true, required: \"\", current: currentVersion };\n }\n const declared = formatVersionBoundValue(required);\n if (typeof required !== \"string\" || declared.trim().length === 0) {\n return { kind: \"pm_min_version\", status: \"invalid\", allowed: false, required: declared, current: currentVersion };\n }\n if (!parseComparableVersion(declared)) {\n return { kind: \"pm_min_version\", status: \"invalid\", allowed: false, required: declared, current: currentVersion };\n }\n if (currentVersion === null) {\n return { kind: \"pm_min_version\", status: \"unchecked\", allowed: true, required: declared, current: null };\n }\n const comparison = compareComparableVersions(currentVersion, declared);\n if (comparison === null) {\n return { kind: \"pm_min_version\", status: \"unchecked\", allowed: true, required: declared, current: currentVersion };\n }\n if (comparison < 0) {\n return { kind: \"pm_min_version\", status: \"unmet\", allowed: false, required: declared, current: currentVersion };\n }\n return { kind: \"pm_min_version\", status: \"ok\", allowed: true, required: declared, current: currentVersion };\n}\n\n/**\n * Evaluate a manifest `pm_max_version` inclusive upper bound against the current\n * pm version.\n *\n * An omitted bound is `absent`. A blank or non-string bound is `invalid`. The\n * upper bound must be an exact version: a range prefix (`<`/`>`/`=`/`~`/`^`) is\n * rejected as `invalid`, because\n * {@link parseComparableVersion} leniently strips a leading `>=` for\n * `engines.pm` min-version compatibility and would otherwise turn a range-like\n * `\">=2026.6.1\"` into an inclusive max and wrongly block newer CLIs. An\n * unparseable bound is `invalid`; an unknown or incomparable current version is\n * `unchecked`; a current version above the bound is `exceeded` (or\n * `exceeded_warn` when `exceededMode` is `warn`, so the extension still loads\n * during a controlled upgrade window); otherwise the bound is satisfied (`ok`).\n */\nexport function evaluatePmMaxVersionBound(\n required: unknown,\n currentVersion: string | null,\n exceededMode: PmMaxVersionExceededMode,\n): PmVersionBoundEvaluation {\n if (required === undefined || required === null) {\n return { kind: \"pm_max_version\", status: \"absent\", allowed: true, required: \"\", current: currentVersion };\n }\n const declared = formatVersionBoundValue(required);\n if (typeof required !== \"string\" || declared.trim().length === 0) {\n return { kind: \"pm_max_version\", status: \"invalid\", allowed: false, required: declared, current: currentVersion };\n }\n if (/^[<>=~^]/.test(declared.trim()) || !parseComparableVersion(declared)) {\n return { kind: \"pm_max_version\", status: \"invalid\", allowed: false, required: declared, current: currentVersion };\n }\n if (currentVersion === null) {\n return { kind: \"pm_max_version\", status: \"unchecked\", allowed: true, required: declared, current: null };\n }\n const comparison = compareComparableVersions(currentVersion, declared);\n if (comparison === null) {\n return { kind: \"pm_max_version\", status: \"unchecked\", allowed: true, required: declared, current: currentVersion };\n }\n if (comparison > 0) {\n if (exceededMode === \"warn\") {\n return {\n kind: \"pm_max_version\",\n status: \"exceeded_warn\",\n allowed: true,\n required: declared,\n current: currentVersion,\n };\n }\n return { kind: \"pm_max_version\", status: \"exceeded\", allowed: false, required: declared, current: currentVersion };\n }\n return { kind: \"pm_max_version\", status: \"ok\", allowed: true, required: declared, current: currentVersion };\n}\n", "/**\n * @module core/extensions/extension-policy\n *\n * Implements extension runtime contracts and governance for Extension Policy.\n */\nimport {\n KNOWN_EXTENSION_POLICY_MODES,\n KNOWN_EXTENSION_POLICY_SURFACES,\n KNOWN_EXTENSION_SANDBOX_PROFILES,\n KNOWN_EXTENSION_TRUST_MODES,\n KNOWN_PM_MAX_VERSION_EXCEEDED_MODES,\n type ExtensionCapability,\n type ExtensionGovernancePolicy,\n type ExtensionLayer,\n type ExtensionPolicyMode,\n type ExtensionPolicyOverride,\n type ExtensionPolicySurface,\n type ExtensionSandboxProfile,\n type ExtensionTrustMode,\n type PmMaxVersionExceededMode,\n type PmMaxVersionExceededModeSetting,\n} from \"./extension-types.js\";\nimport { isKnownExtensionCapability } from \"./extension-capability-aliases.js\";\nimport { normalizeCommandName } from \"./extension-runtime-helpers.js\";\nimport type { PmSettings } from \"../../types/index.js\";\n\ninterface NormalizedExtensionPolicyOverride {\n name: string;\n disabled: boolean;\n requireTrusted: boolean;\n requireProvenance: boolean;\n sandboxProfile?: ExtensionSandboxProfile;\n allowedCapabilities: Set<string>;\n blockedCapabilities: Set<string>;\n allowedSurfaces: Set<string>;\n blockedSurfaces: Set<string>;\n allowedCommands: Set<string>;\n blockedCommands: Set<string>;\n allowedActions: Set<string>;\n blockedActions: Set<string>;\n allowedServices: Set<string>;\n blockedServices: Set<string>;\n}\n\n/** Concrete per-layer resolution of `pm_max_version_exceeded_mode` (default: block). */\nexport interface NormalizedPmMaxVersionExceededMode {\n global: PmMaxVersionExceededMode;\n project: PmMaxVersionExceededMode;\n}\n\n/**\n * Documents the normalized extension policy payload exchanged by command, SDK, and package integrations.\n */\nexport interface NormalizedExtensionPolicy {\n mode: ExtensionPolicyMode;\n trustMode: ExtensionTrustMode;\n pmMaxVersionExceededMode: NormalizedPmMaxVersionExceededMode;\n requireProvenance: boolean;\n trustedExtensions: Set<string>;\n defaultSandboxProfile: ExtensionSandboxProfile;\n allowedExtensions: Set<string>;\n blockedExtensions: Set<string>;\n allowedCapabilities: Set<string>;\n blockedCapabilities: Set<string>;\n allowedSurfaces: Set<string>;\n blockedSurfaces: Set<string>;\n allowedCommands: Set<string>;\n blockedCommands: Set<string>;\n allowedActions: Set<string>;\n blockedActions: Set<string>;\n allowedServices: Set<string>;\n blockedServices: Set<string>;\n overridesByName: Map<string, NormalizedExtensionPolicyOverride>;\n warnings: string[];\n}\n\n/**\n * Documents the policy extension ref payload exchanged by command, SDK, and package integrations.\n */\nexport interface PolicyExtensionRef {\n layer: ExtensionLayer;\n name: string;\n trusted?: boolean;\n provenanceVerified?: boolean;\n sandboxProfile?: ExtensionSandboxProfile;\n permissions?: Record<string, boolean | undefined>;\n}\n\nfunction normalizePolicyName(value: string | undefined): string {\n if (typeof value !== \"string\") {\n return \"\";\n }\n return value.trim().toLowerCase();\n}\n\nfunction normalizePolicyStringSet(values: readonly string[] | undefined): Set<string> {\n return new Set(\n (values ?? [])\n .map((value) => value.trim().toLowerCase())\n .filter((value) => value.length > 0),\n );\n}\n\nfunction normalizePolicySurfaceToken(value: string): string {\n const normalized = value.trim().toLowerCase();\n if (normalized.length === 0) {\n return \"\";\n }\n const segments = normalized\n .split(/[.:/]/)\n .map((segment) => segment.replace(/[\\s_-]+/g, \"\"))\n .filter((segment) => segment.length > 0);\n if (segments.length === 0) {\n return \"\";\n }\n if (segments.length === 1) {\n return segments[0];\n }\n return `${segments[0]}.${segments.slice(1).join(\"\")}`;\n}\n\nfunction normalizePolicySurfaceSet(values: readonly string[] | undefined): Set<string> {\n return new Set(\n (values ?? [])\n .map((value) => normalizePolicySurfaceToken(value))\n .filter((value) => value.length > 0),\n );\n}\n\nfunction normalizePolicyMode(value: string | undefined): ExtensionPolicyMode {\n const normalized = normalizePolicyName(value);\n if ((KNOWN_EXTENSION_POLICY_MODES as readonly string[]).includes(normalized)) {\n return normalized as ExtensionPolicyMode;\n }\n return \"off\";\n}\n\nfunction normalizePolicyTrustMode(value: string | undefined): ExtensionTrustMode {\n const normalized = normalizePolicyName(value);\n if ((KNOWN_EXTENSION_TRUST_MODES as readonly string[]).includes(normalized)) {\n return normalized as ExtensionTrustMode;\n }\n return \"off\";\n}\n\n/**\n * Implements normalize policy sandbox profile for the public runtime surface of this module.\n */\nexport function normalizePolicySandboxProfile(value: string | undefined): ExtensionSandboxProfile {\n const normalized = normalizePolicyName(value);\n if ((KNOWN_EXTENSION_SANDBOX_PROFILES as readonly string[]).includes(normalized)) {\n return normalized as ExtensionSandboxProfile;\n }\n return \"none\";\n}\n\nfunction normalizePmMaxVersionExceededModeValue(value: unknown): PmMaxVersionExceededMode | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n return (KNOWN_PM_MAX_VERSION_EXCEEDED_MODES as readonly string[]).includes(normalized)\n ? (normalized as PmMaxVersionExceededMode)\n : undefined;\n}\n\n/**\n * Resolve `extensions.policy.pm_max_version_exceeded_mode` to a concrete\n * per-layer mode map. Accepts a single mode string (applied to both layers) or\n * a `{ global?, project? }` override map; anything unset or unknown defaults to\n * the safe `\"block\"`.\n */\nexport function normalizePmMaxVersionExceededMode(\n value: PmMaxVersionExceededModeSetting | undefined,\n): NormalizedPmMaxVersionExceededMode {\n if (typeof value === \"string\") {\n const mode = normalizePmMaxVersionExceededModeValue(value) ?? \"block\";\n return { global: mode, project: mode };\n }\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n return {\n global: normalizePmMaxVersionExceededModeValue(value.global) ?? \"block\",\n project: normalizePmMaxVersionExceededModeValue(value.project) ?? \"block\",\n };\n }\n return { global: \"block\", project: \"block\" };\n}\n\nfunction serializePmMaxVersionExceededMode(\n mode: NormalizedPmMaxVersionExceededMode,\n): PmMaxVersionExceededModeSetting {\n return mode.global === mode.project ? mode.global : { global: mode.global, project: mode.project };\n}\n\nfunction toSortedList(values: Iterable<string>): string[] {\n return [...new Set(values)].sort((left, right) => left.localeCompare(right));\n}\n\nfunction buildExtensionPolicyOverride(\n rawOverride: ExtensionPolicyOverride,\n): { name: string; normalized: NormalizedExtensionPolicyOverride } | null {\n const name = normalizePolicyName(rawOverride.name);\n if (name.length === 0) {\n return null;\n }\n return {\n name,\n normalized: {\n name,\n disabled: rawOverride.disabled === true,\n requireTrusted: rawOverride.require_trusted === true,\n requireProvenance: rawOverride.require_provenance === true,\n sandboxProfile:\n rawOverride.sandbox_profile !== undefined\n ? normalizePolicySandboxProfile(rawOverride.sandbox_profile)\n : undefined,\n allowedCapabilities: normalizePolicyStringSet(rawOverride.allowed_capabilities),\n blockedCapabilities: normalizePolicyStringSet(rawOverride.blocked_capabilities),\n allowedSurfaces: normalizePolicySurfaceSet(rawOverride.allowed_surfaces),\n blockedSurfaces: normalizePolicySurfaceSet(rawOverride.blocked_surfaces),\n allowedCommands: normalizePolicyStringSet(rawOverride.allowed_commands),\n blockedCommands: normalizePolicyStringSet(rawOverride.blocked_commands),\n allowedActions: normalizePolicyStringSet(rawOverride.allowed_actions),\n blockedActions: normalizePolicyStringSet(rawOverride.blocked_actions),\n allowedServices: normalizePolicyStringSet(rawOverride.allowed_services),\n blockedServices: normalizePolicyStringSet(rawOverride.blocked_services),\n },\n };\n}\n\nfunction collectExtensionPolicyOverrides(\n rawOverrides: readonly ExtensionPolicyOverride[] | undefined,\n): Map<string, NormalizedExtensionPolicyOverride> {\n const overridesByName = new Map<string, NormalizedExtensionPolicyOverride>();\n for (const rawOverride of rawOverrides ?? []) {\n const built = buildExtensionPolicyOverride(rawOverride);\n if (built) {\n overridesByName.set(built.name, built.normalized);\n }\n }\n return overridesByName;\n}\n\n/**\n * Collect the deduplicated, alphabetically-sorted `extension_policy_unknown_*`\n * warnings for a normalized policy: every allow/block capability and surface\n * token — at the top level and inside each per-extension override — that is not a\n * recognized {@link ExtensionCapability} or known policy surface. Overrides are\n * walked in name order and the final list is re-sorted, so the result is stable\n * regardless of insertion order.\n */\nfunction collectExtensionPolicyWarnings(normalized: {\n allowedCapabilities: Set<string>;\n blockedCapabilities: Set<string>;\n allowedSurfaces: Set<string>;\n blockedSurfaces: Set<string>;\n overridesByName: Map<string, NormalizedExtensionPolicyOverride>;\n}): string[] {\n const warnings: string[] = [];\n const sortedOverrides = [...normalized.overridesByName.values()].sort((left, right) =>\n left.name.localeCompare(right.name),\n );\n for (const capability of toSortedList([...normalized.allowedCapabilities, ...normalized.blockedCapabilities])) {\n if (!isKnownExtensionCapability(capability)) {\n warnings.push(`extension_policy_unknown_capability:${capability}`);\n }\n }\n for (const override of sortedOverrides) {\n for (const capability of toSortedList([...override.allowedCapabilities, ...override.blockedCapabilities])) {\n if (!isKnownExtensionCapability(capability)) {\n warnings.push(`extension_policy_unknown_capability:${override.name}:${capability}`);\n }\n }\n }\n const knownSurfaces = new Set<string>(KNOWN_EXTENSION_POLICY_SURFACES);\n for (const surface of toSortedList([...normalized.allowedSurfaces, ...normalized.blockedSurfaces])) {\n if (!knownSurfaces.has(surface)) {\n warnings.push(`extension_policy_unknown_surface:${surface}`);\n }\n }\n for (const override of sortedOverrides) {\n for (const surface of toSortedList([...override.allowedSurfaces, ...override.blockedSurfaces])) {\n if (!knownSurfaces.has(surface)) {\n warnings.push(`extension_policy_unknown_surface:${override.name}:${surface}`);\n }\n }\n }\n return [...new Set(warnings)].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Normalize the raw `extensions.policy` settings block into the canonical\n * {@link NormalizedExtensionPolicy} used across loading, registration, and the\n * doctor surface: modes/trust/sandbox coerced to known values, every allow/block\n * list lower-cased and de-duplicated into a set, per-extension overrides indexed by\n * name, and unknown-capability/surface tokens surfaced as warnings. A missing\n * policy block resolves to the all-defaults policy (mode/trust `off`).\n */\nexport function normalizeExtensionPolicy(settings: PmSettings): NormalizedExtensionPolicy {\n const policy: Partial<ExtensionGovernancePolicy> = (settings.extensions?.policy as ExtensionGovernancePolicy | undefined) ?? {};\n const allowedCapabilities = normalizePolicyStringSet(policy.allowed_capabilities);\n const blockedCapabilities = normalizePolicyStringSet(policy.blocked_capabilities);\n const allowedSurfaces = normalizePolicySurfaceSet(policy.allowed_surfaces);\n const blockedSurfaces = normalizePolicySurfaceSet(policy.blocked_surfaces);\n const overridesByName = collectExtensionPolicyOverrides(policy.extension_overrides);\n return {\n mode: normalizePolicyMode(policy.mode),\n trustMode: normalizePolicyTrustMode(policy.trust_mode),\n pmMaxVersionExceededMode: normalizePmMaxVersionExceededMode(policy.pm_max_version_exceeded_mode),\n requireProvenance: policy.require_provenance === true,\n trustedExtensions: normalizePolicyStringSet(policy.trusted_extensions),\n defaultSandboxProfile: normalizePolicySandboxProfile(policy.default_sandbox_profile),\n allowedExtensions: normalizePolicyStringSet(policy.allowed_extensions),\n blockedExtensions: normalizePolicyStringSet(policy.blocked_extensions),\n allowedCapabilities,\n blockedCapabilities,\n allowedSurfaces,\n blockedSurfaces,\n allowedCommands: normalizePolicyStringSet(policy.allowed_commands),\n blockedCommands: normalizePolicyStringSet(policy.blocked_commands),\n allowedActions: normalizePolicyStringSet(policy.allowed_actions),\n blockedActions: normalizePolicyStringSet(policy.blocked_actions),\n allowedServices: normalizePolicyStringSet(policy.allowed_services),\n blockedServices: normalizePolicyStringSet(policy.blocked_services),\n overridesByName,\n warnings: collectExtensionPolicyWarnings({\n allowedCapabilities,\n blockedCapabilities,\n allowedSurfaces,\n blockedSurfaces,\n overridesByName,\n }),\n };\n}\n\n/**\n * Implements serialize extension policy for the public runtime surface of this module.\n */\nexport function serializeExtensionPolicy(policy: NormalizedExtensionPolicy): ExtensionGovernancePolicy {\n const overrides = [...policy.overridesByName.values()]\n .sort((left, right) => left.name.localeCompare(right.name))\n .map((override) => ({\n name: override.name,\n ...(override.disabled ? { disabled: true } : {}),\n ...(override.requireTrusted ? { require_trusted: true } : {}),\n ...(override.requireProvenance ? { require_provenance: true } : {}),\n ...(override.sandboxProfile ? { sandbox_profile: override.sandboxProfile } : {}),\n ...(override.allowedCapabilities.size > 0 ? { allowed_capabilities: toSortedList(override.allowedCapabilities) } : {}),\n ...(override.blockedCapabilities.size > 0 ? { blocked_capabilities: toSortedList(override.blockedCapabilities) } : {}),\n ...(override.allowedSurfaces.size > 0 ? { allowed_surfaces: toSortedList(override.allowedSurfaces) } : {}),\n ...(override.blockedSurfaces.size > 0 ? { blocked_surfaces: toSortedList(override.blockedSurfaces) } : {}),\n ...(override.allowedCommands.size > 0 ? { allowed_commands: toSortedList(override.allowedCommands) } : {}),\n ...(override.blockedCommands.size > 0 ? { blocked_commands: toSortedList(override.blockedCommands) } : {}),\n ...(override.allowedActions.size > 0 ? { allowed_actions: toSortedList(override.allowedActions) } : {}),\n ...(override.blockedActions.size > 0 ? { blocked_actions: toSortedList(override.blockedActions) } : {}),\n ...(override.allowedServices.size > 0 ? { allowed_services: toSortedList(override.allowedServices) } : {}),\n ...(override.blockedServices.size > 0 ? { blocked_services: toSortedList(override.blockedServices) } : {}),\n }));\n return {\n mode: policy.mode,\n trust_mode: policy.trustMode,\n pm_max_version_exceeded_mode: serializePmMaxVersionExceededMode(policy.pmMaxVersionExceededMode),\n require_provenance: policy.requireProvenance,\n trusted_extensions: toSortedList(policy.trustedExtensions),\n default_sandbox_profile: policy.defaultSandboxProfile,\n allowed_extensions: toSortedList(policy.allowedExtensions),\n blocked_extensions: toSortedList(policy.blockedExtensions),\n allowed_capabilities: toSortedList(policy.allowedCapabilities),\n blocked_capabilities: toSortedList(policy.blockedCapabilities),\n allowed_surfaces: toSortedList(policy.allowedSurfaces),\n blocked_surfaces: toSortedList(policy.blockedSurfaces),\n allowed_commands: toSortedList(policy.allowedCommands),\n blocked_commands: toSortedList(policy.blockedCommands),\n allowed_actions: toSortedList(policy.allowedActions),\n blocked_actions: toSortedList(policy.blockedActions),\n allowed_services: toSortedList(policy.allowedServices),\n blocked_services: toSortedList(policy.blockedServices),\n extension_overrides: overrides,\n };\n}\n\n/**\n * Implements hydrate extension policy for the public runtime surface of this module.\n */\nexport function hydrateExtensionPolicy(policy: ExtensionGovernancePolicy): NormalizedExtensionPolicy {\n const overridesByName = collectExtensionPolicyOverrides(policy.extension_overrides);\n return {\n mode: normalizePolicyMode(policy.mode),\n trustMode: normalizePolicyTrustMode(policy.trust_mode),\n pmMaxVersionExceededMode: normalizePmMaxVersionExceededMode(policy.pm_max_version_exceeded_mode),\n requireProvenance: policy.require_provenance === true,\n trustedExtensions: normalizePolicyStringSet(policy.trusted_extensions),\n defaultSandboxProfile: normalizePolicySandboxProfile(policy.default_sandbox_profile),\n allowedExtensions: normalizePolicyStringSet(policy.allowed_extensions),\n blockedExtensions: normalizePolicyStringSet(policy.blocked_extensions),\n allowedCapabilities: normalizePolicyStringSet(policy.allowed_capabilities),\n blockedCapabilities: normalizePolicyStringSet(policy.blocked_capabilities),\n allowedSurfaces: normalizePolicySurfaceSet(policy.allowed_surfaces),\n blockedSurfaces: normalizePolicySurfaceSet(policy.blocked_surfaces),\n allowedCommands: normalizePolicyStringSet(policy.allowed_commands),\n blockedCommands: normalizePolicyStringSet(policy.blocked_commands),\n allowedActions: normalizePolicyStringSet(policy.allowed_actions),\n blockedActions: normalizePolicyStringSet(policy.blocked_actions),\n allowedServices: normalizePolicyStringSet(policy.allowed_services),\n blockedServices: normalizePolicyStringSet(policy.blocked_services),\n overridesByName,\n warnings: [],\n };\n}\n\nfunction resolvePolicyOverride(\n policy: NormalizedExtensionPolicy,\n extensionName: string,\n): NormalizedExtensionPolicyOverride | null {\n return policy.overridesByName.get(normalizePolicyName(extensionName)) ?? null;\n}\n\nfunction evaluatePolicySet(\n allowed: Set<string>,\n blocked: Set<string>,\n value: string,\n notAllowlistedReason: string,\n blockedReason: string,\n): string | null {\n if (blocked.has(value)) {\n return blockedReason;\n }\n if (allowed.size > 0 && !allowed.has(value)) {\n return notAllowlistedReason;\n }\n return null;\n}\n\nfunction resolvePolicyCapabilityReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n capability: string,\n): string | null {\n const normalizedCapability = capability.trim().toLowerCase();\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedCapabilities.size > 0 ? override.allowedCapabilities : policy.allowedCapabilities;\n const blocked = new Set<string>([\n ...policy.blockedCapabilities,\n ...(override ? override.blockedCapabilities : []),\n ]);\n return evaluatePolicySet(\n allowed,\n blocked,\n normalizedCapability,\n \"capability_not_allowlisted\",\n \"capability_blocked\",\n );\n}\n\nfunction resolvePolicySurfaceReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n surface: ExtensionPolicySurface,\n): string | null {\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedSurfaces.size > 0 ? override.allowedSurfaces : policy.allowedSurfaces;\n const blocked = new Set<string>([\n ...policy.blockedSurfaces,\n ...(override ? override.blockedSurfaces : []),\n ]);\n return evaluatePolicySet(allowed, blocked, surface, \"surface_not_allowlisted\", \"surface_blocked\");\n}\n\nfunction resolvePolicyCommandReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n command: string,\n): string | null {\n const normalizedCommand = normalizeCommandName(command);\n if (normalizedCommand.length === 0) {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedCommands.size > 0 ? override.allowedCommands : policy.allowedCommands;\n const blocked = new Set<string>([\n ...policy.blockedCommands,\n ...(override ? override.blockedCommands : []),\n ]);\n return evaluatePolicySet(allowed, blocked, normalizedCommand, \"command_not_allowlisted\", \"command_blocked\");\n}\n\nfunction resolvePolicyActionReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n action: string,\n): string | null {\n const normalizedAction = normalizePolicyName(action).replace(/\\s+/g, \"-\");\n if (normalizedAction.length === 0) {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedActions.size > 0 ? override.allowedActions : policy.allowedActions;\n const blocked = new Set<string>([\n ...policy.blockedActions,\n ...(override ? override.blockedActions : []),\n ]);\n return evaluatePolicySet(allowed, blocked, normalizedAction, \"action_not_allowlisted\", \"action_blocked\");\n}\n\nfunction resolvePolicyServiceReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n service: string,\n): string | null {\n const normalizedService = normalizePolicyName(service);\n if (normalizedService.length === 0) {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedServices.size > 0 ? override.allowedServices : policy.allowedServices;\n const blocked = new Set<string>([\n ...policy.blockedServices,\n ...(override ? override.blockedServices : []),\n ]);\n return evaluatePolicySet(allowed, blocked, normalizedService, \"service_not_allowlisted\", \"service_blocked\");\n}\n\nfunction resolvePolicyExtensionReason(policy: NormalizedExtensionPolicy, extension: PolicyExtensionRef): string | null {\n const name = normalizePolicyName(extension.name);\n const override = resolvePolicyOverride(policy, extension.name);\n if (override?.disabled === true) {\n return \"extension_override_disabled\";\n }\n return evaluatePolicySet(\n policy.allowedExtensions,\n policy.blockedExtensions,\n name,\n \"extension_not_allowlisted\",\n \"extension_blocked\",\n );\n}\n\nfunction resolvePolicyTrustReason(policy: NormalizedExtensionPolicy, extension: PolicyExtensionRef): string | null {\n if (policy.trustMode === \"off\") {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const name = normalizePolicyName(extension.name);\n const trusted = extension.trusted === true;\n const provenanceVerified = extension.provenanceVerified === true;\n\n if (policy.trustedExtensions.size > 0 && !policy.trustedExtensions.has(name)) {\n return \"extension_not_trusted\";\n }\n if ((override?.requireTrusted === true || policy.trustMode === \"warn\" || policy.trustMode === \"enforce\") && !trusted) {\n return \"extension_untrusted\";\n }\n if ((policy.requireProvenance || override?.requireProvenance === true) && !provenanceVerified) {\n return \"provenance_missing_or_unverified\";\n }\n return null;\n}\n\nfunction resolvePolicySandboxReason(policy: NormalizedExtensionPolicy, extension: PolicyExtensionRef): string | null {\n if (policy.mode === \"off\") {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const profile = override?.sandboxProfile ?? extension.sandboxProfile ?? policy.defaultSandboxProfile;\n if (profile === \"none\") {\n return null;\n }\n const permissions = extension.permissions;\n if (!permissions) {\n return \"sandbox_permissions_missing\";\n }\n\n const hasPermission = (name: keyof typeof permissions): boolean => permissions[name] === true;\n if (profile === \"restricted\") {\n if (hasPermission(\"process_spawn\")) {\n return \"sandbox_restricted_disallows_process_spawn\";\n }\n if (hasPermission(\"env_write\")) {\n return \"sandbox_restricted_disallows_env_write\";\n }\n return null;\n }\n\n // Remaining profile branch is strict (none/restricted returned above).\n if (hasPermission(\"process_spawn\")) {\n return \"sandbox_strict_disallows_process_spawn\";\n }\n if (hasPermission(\"network\")) {\n return \"sandbox_strict_disallows_network\";\n }\n if (hasPermission(\"fs_write\")) {\n return \"sandbox_strict_disallows_fs_write\";\n }\n if (hasPermission(\"env_write\")) {\n return \"sandbox_strict_disallows_env_write\";\n }\n return null;\n}\n\nfunction buildPolicyWarning(\n mode: \"blocked\" | \"violation\",\n scope: \"extension\" | \"capability\" | \"registration\" | \"trust\",\n extension: PolicyExtensionRef,\n reason: string,\n details: Record<string, string> = {},\n): string {\n const tokens = Object.entries(details)\n .sort((left, right) => left[0].localeCompare(right[0]))\n .map(([key, value]) => `${key}=${value}`)\n .join(\":\");\n const suffix = tokens.length > 0 ? `:${tokens}` : \"\";\n return `extension_policy_${mode}_${scope}:${extension.layer}:${extension.name}:reason=${reason}${suffix}`;\n}\n\n/**\n * Evaluate the layer-level governance policy for one extension by combining the\n * extension allow/block decision, the trust-mode decision, and the sandbox-profile\n * decision. Reasons are weighed in extension → trust → sandbox order: the first\n * reason whose governing mode is `enforce` blocks the extension; otherwise the\n * first whose mode is `warn` surfaces a non-blocking violation warning; otherwise\n * the extension is allowed. The all-`off` short-circuit skips reason resolution\n * entirely.\n */\nexport function evaluateExtensionPolicyForExtension(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n): { allowed: boolean; warning: string | null } {\n if (policy.mode === \"off\" && policy.trustMode === \"off\") {\n return { allowed: true, warning: null };\n }\n const violations: Array<{\n reason: string;\n scope: \"extension\" | \"trust\";\n mode: ExtensionPolicyMode | ExtensionTrustMode;\n }> = [];\n const reason = resolvePolicyExtensionReason(policy, extension);\n if (reason) {\n violations.push({ reason, scope: \"extension\", mode: policy.mode });\n }\n const trustReason = resolvePolicyTrustReason(policy, extension);\n if (trustReason) {\n violations.push({ reason: trustReason, scope: \"trust\", mode: policy.trustMode });\n }\n const sandboxReason = resolvePolicySandboxReason(policy, extension);\n if (sandboxReason) {\n violations.push({ reason: sandboxReason, scope: \"extension\", mode: policy.mode });\n }\n const enforced = violations.find((violation) => violation.mode === \"enforce\");\n if (enforced) {\n return { allowed: false, warning: buildPolicyWarning(\"blocked\", enforced.scope, extension, enforced.reason) };\n }\n const warned = violations.find((violation) => violation.mode === \"warn\");\n if (warned) {\n return { allowed: true, warning: buildPolicyWarning(\"violation\", warned.scope, extension, warned.reason) };\n }\n return { allowed: true, warning: null };\n}\n\n/**\n * Implements evaluate extension policy for capability for the public runtime surface of this module.\n */\nexport function evaluateExtensionPolicyForCapability(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n capability: string,\n): { allowed: boolean; warning: string | null } {\n if (policy.mode === \"off\") {\n return { allowed: true, warning: null };\n }\n const reason = resolvePolicyCapabilityReason(policy, extension, capability);\n if (!reason) {\n return { allowed: true, warning: null };\n }\n return {\n allowed: policy.mode === \"warn\",\n warning: buildPolicyWarning(\n policy.mode === \"warn\" ? \"violation\" : \"blocked\",\n \"capability\",\n extension,\n reason,\n { capability: capability.trim().toLowerCase() },\n ),\n };\n}\n\n/** Optional command/action/service identifiers carried by a surface registration. */\ninterface RegistrationPolicyDetails {\n command?: string;\n action?: string;\n service?: string;\n}\n\n/**\n * Resolve the first applicable registration-policy reason for a surface\n * registration, weighed in capability → surface → command → action → service\n * precedence. Returns `null` when the registration violates no allow/block rule.\n */\nfunction resolveRegistrationPolicyReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n surface: ExtensionPolicySurface,\n capability: ExtensionCapability | undefined,\n detail: RegistrationPolicyDetails,\n): string | null {\n const capabilityReason =\n typeof capability === \"string\" ? resolvePolicyCapabilityReason(policy, extension, capability) : null;\n const surfaceReason = resolvePolicySurfaceReason(policy, extension, surface);\n const commandReason = detail.command ? resolvePolicyCommandReason(policy, extension, detail.command) : null;\n const actionReason = detail.action ? resolvePolicyActionReason(policy, extension, detail.action) : null;\n const serviceReason = detail.service ? resolvePolicyServiceReason(policy, extension, detail.service) : null;\n return capabilityReason ?? surfaceReason ?? commandReason ?? actionReason ?? serviceReason;\n}\n\n/**\n * Build the detail token map attached to a registration-policy warning: the\n * normalized method and surface plus whichever of capability/command/action/service\n * the registration carries. {@link buildPolicyWarning} sorts and joins these into\n * the warning's `key=value` suffix.\n */\nfunction buildRegistrationPolicyWarningDetails(\n method: string,\n surface: ExtensionPolicySurface,\n capability: ExtensionCapability | undefined,\n detail: RegistrationPolicyDetails,\n): Record<string, string> {\n const warningDetails: Record<string, string> = {\n method: normalizePolicyName(method).replace(/\\s+/g, \"_\"),\n surface,\n };\n if (capability) {\n warningDetails.capability = capability;\n }\n if (detail.command) {\n warningDetails.command = normalizeCommandName(detail.command);\n }\n if (detail.action) {\n warningDetails.action = normalizePolicyName(detail.action).replace(/\\s+/g, \"-\");\n }\n if (detail.service) {\n warningDetails.service = normalizePolicyName(detail.service);\n }\n return warningDetails;\n}\n\n/**\n * Evaluate the governance policy for a single capability/surface registration an\n * extension performs during activation. When `mode` is `off` the registration is\n * always allowed; otherwise the first allow/block reason (capability → surface →\n * command → action → service) blocks the registration under `enforce` or surfaces\n * a non-blocking violation warning under `warn`.\n */\nexport function evaluateExtensionPolicyForRegistration(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n surface: ExtensionPolicySurface,\n method: string,\n capability?: ExtensionCapability,\n details?: {\n command?: string;\n action?: string;\n service?: string;\n },\n): { allowed: boolean; warning: string | null } {\n if (policy.mode === \"off\") {\n return { allowed: true, warning: null };\n }\n const detail = details ?? {};\n const reason = resolveRegistrationPolicyReason(policy, extension, surface, capability, detail);\n if (!reason) {\n return { allowed: true, warning: null };\n }\n const warning = buildPolicyWarning(\n policy.mode === \"warn\" ? \"violation\" : \"blocked\",\n \"registration\",\n extension,\n reason,\n buildRegistrationPolicyWarningDetails(method, surface, capability, detail),\n );\n return {\n allowed: policy.mode === \"warn\",\n warning,\n };\n}\n", "/**\n * @module core/extensions/capability-usage\n *\n * Reconciles the capabilities an extension manifest *declares* against the\n * capabilities it actually *exercises* during activation.\n *\n * The loader already enforces the opposite direction — registering a surface\n * whose capability is absent from `manifest.capabilities` throws an\n * `extension_capability_missing` activation failure. This module closes the\n * least-privilege loop by detecting capabilities a manifest declares but never\n * registers against, so package authors can trim manifests to the minimum\n * grant. Every declared-but-unused capability is an over-broad permission a\n * reviewer would otherwise have to catch by hand.\n */\nimport type { ExtensionActivationResult, ExtensionCapability, ExtensionLayer } from \"./extension-types.js\";\nimport { normalizeKnownExtensionCapability } from \"./extension-capability-aliases.js\";\n\n/**\n * Canonical map from each known extension capability to the human-readable\n * registration surfaces that exercise it.\n *\n * The `satisfies Record<ExtensionCapability, ...>` guard makes this exhaustive\n * at compile time: adding a capability to `KNOWN_EXTENSION_CAPABILITIES`\n * without giving it a registration surface here fails the build, which prevents\n * a capability that has *no* surface from being perpetually flagged as unused.\n */\nexport const EXTENSION_CAPABILITY_REGISTRATION_SURFACES = {\n commands: [\"registerCommand\", \"command override\", \"command handler\"],\n renderers: [\"registerRenderer\"],\n hooks: [\"hooks.beforeCommand\", \"hooks.afterCommand\", \"hooks.onWrite\", \"hooks.onRead\", \"hooks.onIndex\"],\n schema: [\"registerFlags\", \"registerItemFields\", \"registerItemTypes\", \"registerMigration\", \"registerProfile\"],\n importers: [\"registerImporter\", \"registerExporter\"],\n search: [\"registerSearchProvider\", \"registerVectorStoreAdapter\"],\n parser: [\"registerParser\"],\n preflight: [\"registerPreflight\"],\n services: [\"registerService\"],\n} as const satisfies Record<ExtensionCapability, readonly string[]>;\n\n/**\n * Per-extension reconciliation of declared versus exercised capabilities.\n */\nexport interface ExtensionCapabilityUsageReconciliation {\n /** Layer the extension was loaded from (`global` or `project`). */\n layer: ExtensionLayer;\n /** Extension name as it appears in the manifest. */\n name: string;\n /** Known capabilities declared in the manifest, sorted and de-duplicated. */\n declared: ExtensionCapability[];\n /** Known capabilities the extension actually registered against, sorted. */\n used: ExtensionCapability[];\n /** Declared capabilities with no matching registration (least-privilege gap). */\n unused: ExtensionCapability[];\n}\n\n/**\n * Options for {@link collectUsedExtensionCapabilities}.\n */\nexport interface CollectUsedExtensionCapabilitiesOptions {\n /**\n * Restrict the result to a single extension by name. Names are matched\n * case-insensitively after trimming. Omit to union across every extension in\n * the activation result.\n */\n extensionName?: string;\n /**\n * Restrict the result to a set of extension names. This preserves the\n * single-name option while allowing package aliases that activate multiple\n * extensions to summarize their combined capability surface.\n */\n extensionNames?: readonly string[];\n}\n\n// `layer` is a closed enum (`\"global\" | \"project\"`) that never contains a\n// colon, so the first colon always separates the layer from the (possibly\n// colon-bearing) name — making the key collision-proof without serialization.\nconst USAGE_KEY_SEPARATOR = \":\";\n\nfunction usageKey(layer: ExtensionLayer, name: string): string {\n return `${layer}${USAGE_KEY_SEPARATOR}${normalizeExtensionName(name)}`;\n}\n\nfunction usageKeyName(key: string): string {\n return key.slice(key.indexOf(USAGE_KEY_SEPARATOR) + 1);\n}\n\n/**\n * Canonical extension-name normalization (trim + lowercase) used to match an\n * `extensionName` filter against a registration's stored `name`.\n *\n * Activation stores `extension.name` verbatim — the synthetic test-activation\n * path (`activateExtensionForTest`) never trims it — so any helper that filters\n * by extension name must normalize both sides with this function to stay\n * consistent, including {@link ../extensions/activation-summary.js#describeExtensionActivation}.\n */\nexport function normalizeExtensionName(name: string): string {\n return name.trim().toLowerCase();\n}\n\nfunction normalizeDeclaredCapabilities(capabilities: readonly string[] | undefined): ExtensionCapability[] {\n if (!Array.isArray(capabilities)) {\n return [];\n }\n const known = new Set<ExtensionCapability>();\n for (const capability of capabilities) {\n // Unknown capabilities are reported by the separate unknown-capability\n // diagnostic; reconciling them here would double-report a typo as \"unused\".\n const normalized = normalizeKnownExtensionCapability(capability);\n if (normalized !== null) {\n known.add(normalized);\n }\n }\n return [...known].sort((left, right) => left.localeCompare(right));\n}\n\nfunction attributeCapabilityUsage(activation: ExtensionActivationResult): Map<string, Set<ExtensionCapability>> {\n const usage = new Map<string, Set<ExtensionCapability>>();\n const record = (\n entries: ReadonlyArray<{ layer: ExtensionLayer; name: string }>,\n capability: ExtensionCapability,\n ): void => {\n for (const entry of entries) {\n const key = usageKey(entry.layer, entry.name);\n let exercised = usage.get(key);\n if (exercised === undefined) {\n exercised = new Set<ExtensionCapability>();\n usage.set(key, exercised);\n }\n exercised.add(capability);\n }\n };\n const { registrations, commands, parsers, preflight, services, renderers, hooks } = activation;\n record(registrations.commands, \"commands\");\n record(commands.overrides, \"commands\");\n record(commands.handlers, \"commands\");\n record(registrations.flags, \"schema\");\n record(registrations.item_fields, \"schema\");\n record(registrations.item_types, \"schema\");\n record(registrations.migrations, \"schema\");\n record(registrations.profiles, \"schema\");\n record(registrations.importers, \"importers\");\n record(registrations.exporters, \"importers\");\n record(registrations.search_providers, \"search\");\n record(registrations.vector_store_adapters, \"search\");\n record(parsers.overrides, \"parser\");\n record(preflight.overrides, \"preflight\");\n record(services.overrides, \"services\");\n record(renderers.overrides, \"renderers\");\n record(hooks.beforeCommand, \"hooks\");\n record(hooks.afterCommand, \"hooks\");\n record(hooks.onWrite, \"hooks\");\n record(hooks.onRead, \"hooks\");\n record(hooks.onIndex, \"hooks\");\n return usage;\n}\n\n/**\n * Collect the known capabilities exercised across an activation result.\n *\n * Without {@link CollectUsedExtensionCapabilitiesOptions.extensionName} the\n * result unions every extension in the activation; with it, only the matching\n * extension's registrations contribute (across both layers).\n */\nexport function collectUsedExtensionCapabilities(\n activation: ExtensionActivationResult,\n options: CollectUsedExtensionCapabilitiesOptions = {},\n): ExtensionCapability[] {\n const usage = attributeCapabilityUsage(activation);\n const filters = new Set<string>();\n if (options.extensionName !== undefined) {\n filters.add(normalizeExtensionName(options.extensionName));\n }\n for (const name of options.extensionNames ?? []) {\n filters.add(normalizeExtensionName(name));\n }\n const used = new Set<ExtensionCapability>();\n for (const [key, capabilities] of usage) {\n if (filters.size > 0 && !filters.has(usageKeyName(key))) {\n continue;\n }\n for (const capability of capabilities) {\n used.add(capability);\n }\n }\n return [...used].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Reconcile each loaded extension's declared capabilities against what it\n * exercised during activation.\n *\n * Extensions with no known declared capabilities are skipped — there is nothing\n * to reconcile. The returned entries preserve every reconcilable extension even\n * when `unused` is empty so callers can report fully-minimal manifests too.\n */\nexport function reconcileExtensionCapabilityUsage(\n loaded: ReadonlyArray<{ layer: ExtensionLayer; name: string; capabilities?: readonly string[] }>,\n activation: ExtensionActivationResult,\n): ExtensionCapabilityUsageReconciliation[] {\n const usage = attributeCapabilityUsage(activation);\n const reconciliations: ExtensionCapabilityUsageReconciliation[] = [];\n for (const extension of loaded) {\n const declared = normalizeDeclaredCapabilities(extension.capabilities);\n if (declared.length === 0) {\n continue;\n }\n const exercised = usage.get(usageKey(extension.layer, extension.name)) ?? new Set<ExtensionCapability>();\n const used = [...exercised].sort((left, right) => left.localeCompare(right));\n const unused = declared.filter((capability) => !exercised.has(capability));\n reconciliations.push({ layer: extension.layer, name: extension.name, declared, used, unused });\n }\n return reconciliations;\n}\n", "/**\n * @module core/schema/runtime-schema\n *\n * Resolves configurable schema, fields, statuses, and workflows for Runtime Schema.\n */\nimport path from \"node:path\";\nimport { pathExists, readFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { DEFAULT_STATUS_DEFINITIONS, DEFAULT_WORKFLOW_DEFINITION } from \"../shared/constants.js\";\nimport {\n RUNTIME_FIELD_COMMAND_VALUES,\n RUNTIME_FIELD_TYPE_VALUES,\n RUNTIME_STATUS_ROLE_VALUES,\n RUNTIME_UNKNOWN_FIELD_POLICY_VALUES,\n STATUS_VALUES,\n} from \"../../types/index.js\";\nimport type {\n ItemTypeDefinition,\n RuntimeFieldCommand,\n RuntimeFieldDefinition,\n RuntimeFieldType,\n RuntimeSchemaSettings,\n RuntimeStatusDefinition,\n RuntimeStatusRole,\n RuntimeWorkflowDefinition,\n TypeWorkflowDefinition,\n} from \"../../types/index.js\";\n\nexport type { RuntimeFieldCommand } from \"../../types/index.js\";\n\nexport const DEFAULT_RUNTIME_SCHEMA_FILE_PATHS = Object.freeze({\n types: \"schema/types.json\",\n statuses: \"schema/statuses.json\",\n fields: \"schema/fields.json\",\n workflows: \"schema/workflows.json\",\n});\n\n// Default lifecycle status model and workflow role mapping live in\n// src/core/shared/constants.ts as the single source of truth (also referenced\n// by SETTINGS_DEFAULTS). Re-exported here under the historical names.\nexport const DEFAULT_RUNTIME_WORKFLOW: RuntimeWorkflowDefinition = DEFAULT_WORKFLOW_DEFINITION;\n\nexport const DEFAULT_RUNTIME_STATUS_DEFINITIONS: ReadonlyArray<RuntimeStatusDefinition> = DEFAULT_STATUS_DEFINITIONS;\n\nconst DEFAULT_RUNTIME_FIELD_COMMANDS: RuntimeFieldCommand[] = [\"create\", \"update\"];\n\n/**\n * Documents the runtime status definition resolved payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeStatusDefinitionResolved {\n id: string;\n aliases: string[];\n roles: RuntimeStatusRole[];\n description?: string;\n order: number;\n}\n\n/**\n * Documents the runtime field definition resolved payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeFieldDefinitionResolved {\n key: string;\n metadata_key: string;\n cli_flag: string;\n cli_aliases: string[];\n description?: string;\n type: RuntimeFieldType;\n commands: RuntimeFieldCommand[];\n repeatable: boolean;\n required: boolean;\n required_on_create: boolean;\n required_types: string[];\n allow_unset: boolean;\n}\n\n/**\n * Documents the runtime status registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeStatusRegistry {\n definitions: RuntimeStatusDefinitionResolved[];\n by_id: Map<string, RuntimeStatusDefinitionResolved>;\n alias_to_id: Map<string, string>;\n terminal_statuses: Set<string>;\n terminal_done_statuses: Set<string>;\n terminal_canceled_statuses: Set<string>;\n active_statuses: Set<string>;\n blocked_statuses: Set<string>;\n draft_statuses: Set<string>;\n open_status: string;\n close_status: string;\n canceled_status: string;\n}\n\n/**\n * Documents the runtime field registry payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeFieldRegistry {\n definitions: RuntimeFieldDefinitionResolved[];\n by_key: Map<string, RuntimeFieldDefinitionResolved>;\n by_cli_token: Map<string, RuntimeFieldDefinitionResolved>;\n command_to_fields: Map<RuntimeFieldCommand, RuntimeFieldDefinitionResolved[]>;\n}\n\n/**\n * Documents the runtime schema file bootstrap result payload exchanged by command, SDK, and package integrations.\n */\nexport interface RuntimeSchemaFileBootstrapResult {\n created_paths: string[];\n}\n\n/**\n * Documents the loaded runtime schema sections payload exchanged by command, SDK, and package integrations.\n */\nexport interface LoadedRuntimeSchemaSections {\n schema: RuntimeSchemaSettings;\n type_definitions_from_file: ItemTypeDefinition[] | undefined;\n warnings: string[];\n created_paths: string[];\n}\n\nconst RUNTIME_STATUS_ROLE_SET = new Set<string>(RUNTIME_STATUS_ROLE_VALUES);\nconst RUNTIME_FIELD_TYPE_SET = new Set<string>(RUNTIME_FIELD_TYPE_VALUES);\nconst RUNTIME_FIELD_COMMAND_SET = new Set<string>(RUNTIME_FIELD_COMMAND_VALUES);\nconst RUNTIME_UNKNOWN_FIELD_POLICY_SET = new Set<string>(RUNTIME_UNKNOWN_FIELD_POLICY_VALUES);\n\nfunction normalizeStringList(values: string[] | undefined): string[] {\n const candidates = Array.isArray(values) ? values : [];\n return [...new Set(candidates.map((value) => (typeof value === \"string\" ? value.trim() : \"\")).filter((value) => value.length > 0))]\n .sort((left, right) => left.localeCompare(right));\n}\n\nfunction normalizeStatusToken(value: unknown): string {\n return typeof value === \"string\" ? value.trim().toLowerCase().replaceAll(/[\\s-]+/g, \"_\") : \"\";\n}\n\nfunction normalizeStatusId(value: unknown): string | undefined {\n if (typeof value !== \"string\" || value.length === 0) {\n return undefined;\n }\n const normalized = normalizeStatusToken(value);\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction stripFlagPrefix(value: string): string {\n return value.startsWith(\"--\") ? value.slice(2) : value;\n}\n\nfunction normalizeCliToken(value: unknown): string {\n return typeof value === \"string\" ? stripFlagPrefix(value.trim().toLowerCase().replaceAll(/[\\s_]+/g, \"-\")) : \"\";\n}\n\nfunction keyToDefaultCliFlag(value: string): string {\n return value.replaceAll(\"_\", \"-\");\n}\n\nfunction toCamelCase(input: string): string {\n const segments = input\n .replaceAll(/[^A-Za-z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter((segment) => segment.length > 0)\n .map((segment) => segment.toLowerCase());\n if (segments.length === 0) {\n return input;\n }\n const [first, ...rest] = segments;\n return `${first}${rest.map((segment) => `${segment.slice(0, 1).toUpperCase()}${segment.slice(1)}`).join(\"\")}`;\n}\n\nfunction normalizeRuntimeStatusDefinition(\n definition: RuntimeStatusDefinition,\n fallbackOrder: number,\n): RuntimeStatusDefinitionResolved | null {\n const id = normalizeStatusId(definition.id);\n if (!id) {\n return null;\n }\n const aliases = normalizeStringList(definition.aliases).map((value) => normalizeStatusToken(value)).filter((value) => value !== id);\n const roles = normalizeStringList(definition.roles).filter((value): value is RuntimeStatusRole => RUNTIME_STATUS_ROLE_SET.has(value));\n const description = definition.description?.trim();\n const order = typeof definition.order === \"number\" && Number.isFinite(definition.order) ? definition.order : fallbackOrder;\n return {\n id,\n aliases,\n roles,\n description: description && description.length > 0 ? description : undefined,\n order,\n };\n}\n\nfunction normalizeRuntimeWorkflow(workflow: RuntimeWorkflowDefinition | undefined): RuntimeWorkflowDefinition {\n return {\n draft_status: normalizeStatusId(workflow?.draft_status),\n open_status: normalizeStatusId(workflow?.open_status),\n in_progress_status: normalizeStatusId(workflow?.in_progress_status),\n blocked_status: normalizeStatusId(workflow?.blocked_status),\n close_status: normalizeStatusId(workflow?.close_status),\n canceled_status: normalizeStatusId(workflow?.canceled_status),\n };\n}\n\ninterface TypeWorkflowAccumulatorRecord {\n type: string;\n pairs: [string, string][];\n denyAll: boolean;\n}\n\nfunction appendTypeWorkflowPair(record: TypeWorkflowAccumulatorRecord, pair: unknown): void {\n if (!Array.isArray(pair) || pair.length !== 2) {\n return;\n }\n const from = normalizeStatusToken(pair[0]);\n const to = normalizeStatusToken(pair[1]);\n if (from.length === 0 || to.length === 0) {\n return;\n }\n if (record.pairs.some((candidate) => candidate[0] === from && candidate[1] === to)) {\n return;\n }\n record.pairs.push([from, to]);\n}\n\nfunction normalizedTypeWorkflowEntry(\n entry: TypeWorkflowDefinition,\n): { typeKey: string; record: TypeWorkflowAccumulatorRecord } | null {\n const rawType = typeof entry?.type === \"string\" ? entry.type.trim() : \"\";\n if (rawType.length === 0 || !Array.isArray(entry?.allowed_transitions)) {\n return null;\n }\n const record: TypeWorkflowAccumulatorRecord = { type: rawType, pairs: [], denyAll: entry.allowed_transitions.length === 0 };\n for (const pair of entry.allowed_transitions) {\n appendTypeWorkflowPair(record, pair);\n }\n return { typeKey: rawType.toLowerCase(), record };\n}\n\nfunction normalizeTypeWorkflowDefinitions(\n workflows: TypeWorkflowDefinition[] | undefined,\n): TypeWorkflowDefinition[] | undefined {\n if (!Array.isArray(workflows) || workflows.length === 0) {\n return undefined;\n }\n // Keep the raw (trimmed) type name so it round-trips verbatim; comparison is\n // case-insensitive downstream (resolveTypeWorkflows lower-cases). from/to\n // status tokens use the same normalization rules as runtime statuses.\n //\n // An EXPLICIT empty `allowed_transitions: []` is a deliberate DENY-ALL rule and\n // MUST survive normalization (it must NOT collapse to \"no entry\", which would\n // leave the type unrestricted). But a NON-empty array whose every pair is\n // malformed (e.g. a 3-element tuple typo) must be DROPPED like other malformed\n // schema-file content, NOT silently turned into a deny-all rule — otherwise a\n // typo would start failing every update for that type under strict enforcement.\n const byTypeKey = new Map<string, TypeWorkflowAccumulatorRecord>();\n for (const entry of workflows) {\n const normalized = normalizedTypeWorkflowEntry(entry);\n if (normalized === null) {\n continue;\n }\n const record = byTypeKey.get(normalized.typeKey) ?? normalized.record;\n record.denyAll ||= normalized.record.denyAll;\n for (const pair of normalized.record.pairs) {\n appendTypeWorkflowPair(record, pair);\n }\n byTypeKey.set(normalized.typeKey, record);\n }\n const normalized: TypeWorkflowDefinition[] = [];\n for (const record of byTypeKey.values()) {\n // Keep when there is at least one valid transition OR an explicit deny-all was\n // declared; drop nonempty-but-all-malformed entries (treated as typos).\n if (record.pairs.length > 0 || record.denyAll) {\n normalized.push({ type: record.type, allowed_transitions: record.pairs });\n }\n }\n normalized.sort((left, right) => left.type.localeCompare(right.type));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeRuntimeFieldDefinition(definition: RuntimeFieldDefinition): RuntimeFieldDefinitionResolved | null {\n const key = normalizeStatusToken(definition.key ?? \"\");\n if (!key) {\n return null;\n }\n const metadataKey = normalizeStatusToken(definition.metadata_key ?? definition.front_matter_key ?? key);\n const cliFlag = normalizeCliToken(definition.cli_flag ?? keyToDefaultCliFlag(key));\n if (!cliFlag) {\n return null;\n }\n const cliAliases = normalizeStringList(definition.cli_aliases)\n .map((value) => normalizeCliToken(value))\n .filter((value) => value.length > 0 && value !== cliFlag);\n const typeCandidate = typeof definition.type === \"string\" ? definition.type.trim().toLowerCase() : \"string\";\n const type = RUNTIME_FIELD_TYPE_SET.has(typeCandidate) ? (typeCandidate as RuntimeFieldType) : \"string\";\n const commands = (() => {\n const normalized = normalizeStringList(definition.commands).filter((value): value is RuntimeFieldCommand =>\n RUNTIME_FIELD_COMMAND_SET.has(value),\n );\n if (normalized.length > 0) {\n return normalized;\n }\n return [...DEFAULT_RUNTIME_FIELD_COMMANDS];\n })();\n const description = definition.description?.trim();\n const requiredTypes = normalizeStringList(definition.required_types);\n return {\n key,\n metadata_key: metadataKey,\n cli_flag: cliFlag,\n cli_aliases: cliAliases,\n description: description && description.length > 0 ? description : undefined,\n type,\n commands,\n repeatable: definition.repeatable === true || type === \"string_array\",\n required: definition.required === true,\n required_on_create: definition.required_on_create === true,\n required_types: requiredTypes,\n allow_unset: definition.allow_unset !== false,\n };\n}\n\nfunction normalizeRuntimeStatusDefinitions(\n statusesSource: ReadonlyArray<RuntimeStatusDefinition>,\n): RuntimeStatusDefinitionResolved[] {\n const dedupedById = new Map<string, RuntimeStatusDefinitionResolved>();\n for (const [index, definition] of statusesSource.entries()) {\n const normalized = normalizeRuntimeStatusDefinition(definition, index);\n if (normalized) {\n dedupedById.set(normalized.id, normalized);\n }\n }\n const values = sortRuntimeStatusDefinitions([...dedupedById.values()]);\n if (values.length > 0) {\n return values;\n }\n return sortRuntimeStatusDefinitions(DEFAULT_RUNTIME_STATUS_DEFINITIONS.map((definition, index) =>\n normalizeRuntimeStatusDefinition(definition, index),\n ).filter((definition): definition is RuntimeStatusDefinitionResolved => definition !== null));\n}\n\nfunction sortRuntimeStatusDefinitions(\n definitions: RuntimeStatusDefinitionResolved[],\n): RuntimeStatusDefinitionResolved[] {\n return definitions.sort((left, right) =>\n left.order === right.order ? left.id.localeCompare(right.id) : left.order - right.order,\n );\n}\n\nfunction normalizeRuntimeFieldDefinitions(\n fieldsSource: ReadonlyArray<RuntimeFieldDefinition> | undefined,\n): RuntimeFieldDefinitionResolved[] {\n const dedupedByKey = new Map<string, RuntimeFieldDefinitionResolved>();\n for (const definition of fieldsSource ?? []) {\n const normalized = normalizeRuntimeFieldDefinition(definition);\n if (normalized) {\n dedupedByKey.set(normalized.key, normalized);\n }\n }\n return [...dedupedByKey.values()].sort((left, right) => left.key.localeCompare(right.key));\n}\n\nfunction serializeRuntimeStatusDefinition(definition: RuntimeStatusDefinitionResolved): RuntimeStatusDefinition {\n return {\n id: definition.id,\n aliases: definition.aliases.length > 0 ? [...definition.aliases] : undefined,\n roles: definition.roles.length > 0 ? [...definition.roles] : undefined,\n description: definition.description,\n order: definition.order,\n };\n}\n\nfunction serializeRuntimeFieldDefinition(definition: RuntimeFieldDefinitionResolved): RuntimeFieldDefinition {\n return {\n key: definition.key,\n metadata_key: definition.metadata_key !== definition.key ? definition.metadata_key : undefined,\n cli_flag: definition.cli_flag !== keyToDefaultCliFlag(definition.key) ? definition.cli_flag : undefined,\n cli_aliases: definition.cli_aliases.length > 0 ? [...definition.cli_aliases] : undefined,\n description: definition.description,\n type: definition.type,\n commands: [...definition.commands],\n repeatable: definition.repeatable === true ? true : undefined,\n required: definition.required === true ? true : undefined,\n required_on_create: definition.required_on_create === true ? true : undefined,\n required_types: definition.required_types.length > 0 ? [...definition.required_types] : undefined,\n allow_unset: definition.allow_unset === false ? false : undefined,\n };\n}\n\nfunction normalizeUnknownFieldPolicy(\n policy: RuntimeSchemaSettings[\"unknown_field_policy\"] | undefined,\n): RuntimeSchemaSettings[\"unknown_field_policy\"] {\n const candidate = typeof policy === \"string\" ? policy.trim().toLowerCase() : \"allow\";\n return RUNTIME_UNKNOWN_FIELD_POLICY_SET.has(candidate)\n ? candidate as RuntimeSchemaSettings[\"unknown_field_policy\"]\n : \"allow\";\n}\n\n/**\n * Implements normalize runtime schema settings for the public runtime surface of this module.\n */\nexport function normalizeRuntimeSchemaSettings(schema: Partial<RuntimeSchemaSettings> | undefined): RuntimeSchemaSettings {\n const files = {\n ...DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,\n ...schema?.files,\n };\n const statusesSource = schema?.statuses && schema.statuses.length > 0 ? schema.statuses : DEFAULT_RUNTIME_STATUS_DEFINITIONS;\n const normalizedStatuses = normalizeRuntimeStatusDefinitions(statusesSource);\n const normalizedFields = normalizeRuntimeFieldDefinitions(schema?.fields);\n return {\n version: typeof schema?.version === \"number\" && Number.isFinite(schema.version) ? Math.floor(schema.version) : 1,\n files,\n statuses: normalizedStatuses.map(serializeRuntimeStatusDefinition),\n fields: normalizedFields.map(serializeRuntimeFieldDefinition),\n workflow: {\n ...DEFAULT_RUNTIME_WORKFLOW,\n ...normalizeRuntimeWorkflow(schema?.workflow),\n },\n type_workflows: normalizeTypeWorkflowDefinitions(schema?.type_workflows),\n unknown_field_policy: normalizeUnknownFieldPolicy(schema?.unknown_field_policy),\n };\n}\n\nfunction serializeJson(value: unknown): string {\n return `${JSON.stringify(value, null, 2)}\\n`;\n}\n\nfunction buildTypesFileSeed(): unknown {\n return {\n definitions: [],\n };\n}\n\nfunction buildStatusesFileSeed(): unknown {\n return {\n statuses: DEFAULT_RUNTIME_STATUS_DEFINITIONS,\n };\n}\n\nfunction buildFieldsFileSeed(): unknown {\n return {\n fields: [],\n };\n}\n\nfunction buildWorkflowsFileSeed(): unknown {\n return {\n workflow: DEFAULT_RUNTIME_WORKFLOW,\n };\n}\n\nfunction parseOptionalJson(raw: string, warningKey: string, warnings: string[]): unknown | undefined {\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n warnings.push(warningKey);\n return undefined;\n }\n}\n\nfunction readTypeDefinitionsFromSchemaFile(parsed: unknown): ItemTypeDefinition[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed as ItemTypeDefinition[];\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.definitions)) {\n return record.definitions as ItemTypeDefinition[];\n }\n if (typeof record.item_types === \"object\" && record.item_types !== null) {\n const itemTypesRecord = record.item_types as Record<string, unknown>;\n if (Array.isArray(itemTypesRecord.definitions)) {\n return itemTypesRecord.definitions as ItemTypeDefinition[];\n }\n }\n return undefined;\n}\n\nfunction readStatusesFromSchemaFile(parsed: unknown): RuntimeStatusDefinition[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed as RuntimeStatusDefinition[];\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.statuses)) {\n return record.statuses as RuntimeStatusDefinition[];\n }\n if (Array.isArray(record.definitions)) {\n return record.definitions as RuntimeStatusDefinition[];\n }\n return undefined;\n}\n\nfunction readFieldsFromSchemaFile(parsed: unknown): RuntimeFieldDefinition[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed as RuntimeFieldDefinition[];\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.fields)) {\n return record.fields as RuntimeFieldDefinition[];\n }\n if (Array.isArray(record.definitions)) {\n return record.definitions as RuntimeFieldDefinition[];\n }\n return undefined;\n}\n\nfunction readWorkflowFromSchemaFile(parsed: unknown): RuntimeWorkflowDefinition | undefined {\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (typeof record.workflow === \"object\" && record.workflow !== null && !Array.isArray(record.workflow)) {\n return record.workflow as RuntimeWorkflowDefinition;\n }\n if (typeof record.workflows === \"object\" && record.workflows !== null && !Array.isArray(record.workflows)) {\n return record.workflows as RuntimeWorkflowDefinition;\n }\n return record as RuntimeWorkflowDefinition;\n}\n\nfunction readTypeWorkflowsFromSchemaFile(parsed: unknown): TypeWorkflowDefinition[] | undefined {\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.type_workflows)) {\n return record.type_workflows as TypeWorkflowDefinition[];\n }\n return undefined;\n}\n\n/**\n * Implements file path for schema section for the public runtime surface of this module.\n */\nexport function filePathForSchemaSection(pmRoot: string, configuredPath: string | undefined, fallbackPath: string): string {\n const normalized = configuredPath?.trim() || fallbackPath;\n if (path.isAbsolute(normalized)) {\n return normalized;\n }\n return path.join(pmRoot, normalized);\n}\n\n/**\n * Resolves the active tracker's `schema/types.json` path so user-facing hints\n * (e.g. the invalid-type error) point at the real `--pm-path` location instead\n * of the hardcoded `.agents/pm` default. Mirrors how `pm schema add/remove-type`\n * report their target path.\n */\nexport function resolveItemTypesFilePath(pmRoot: string, schema: RuntimeSchemaSettings): string {\n return filePathForSchemaSection(pmRoot, schema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types);\n}\n\n/**\n * Implements ensure runtime schema file scaffold for the public runtime surface of this module.\n */\nexport async function ensureRuntimeSchemaFileScaffold(\n pmRoot: string,\n schema: RuntimeSchemaSettings,\n): Promise<RuntimeSchemaFileBootstrapResult> {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n const specs: Array<{ path: string; seed: unknown }> = [\n {\n path: filePathForSchemaSection(pmRoot, normalizedSchema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types),\n seed: buildTypesFileSeed(),\n },\n {\n path: filePathForSchemaSection(pmRoot, normalizedSchema.files.statuses, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses),\n seed: buildStatusesFileSeed(),\n },\n {\n path: filePathForSchemaSection(pmRoot, normalizedSchema.files.fields, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields),\n seed: buildFieldsFileSeed(),\n },\n {\n path: filePathForSchemaSection(pmRoot, normalizedSchema.files.workflows, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows),\n seed: buildWorkflowsFileSeed(),\n },\n ];\n const createdPaths: string[] = [];\n for (const spec of specs) {\n if (await pathExists(spec.path)) {\n continue;\n }\n await writeFileAtomic(spec.path, serializeJson(spec.seed));\n createdPaths.push(spec.path);\n }\n return {\n created_paths: createdPaths,\n };\n}\n\n/**\n * Implements load runtime schema from optional files for the public runtime surface of this module.\n */\nexport async function loadRuntimeSchemaFromOptionalFiles(\n pmRoot: string,\n schema: RuntimeSchemaSettings,\n): Promise<LoadedRuntimeSchemaSections> {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n const warnings: string[] = [];\n const typeFilePath = filePathForSchemaSection(pmRoot, normalizedSchema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types);\n const statusFilePath = filePathForSchemaSection(\n pmRoot,\n normalizedSchema.files.statuses,\n DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses,\n );\n const fieldsFilePath = filePathForSchemaSection(pmRoot, normalizedSchema.files.fields, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields);\n const workflowsFilePath = filePathForSchemaSection(\n pmRoot,\n normalizedSchema.files.workflows,\n DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows,\n );\n\n let loadedTypeDefinitions: ItemTypeDefinition[] | undefined;\n let loadedStatuses: RuntimeStatusDefinition[] | undefined;\n let loadedFields: RuntimeFieldDefinition[] | undefined;\n let loadedWorkflow: RuntimeWorkflowDefinition | undefined;\n let loadedTypeWorkflows: TypeWorkflowDefinition[] | undefined;\n\n const readAndParse = async (targetPath: string, warningKey: string): Promise<unknown | undefined> => {\n const raw = await readFileIfExists(targetPath);\n if (raw === null) {\n return undefined;\n }\n return parseOptionalJson(raw, warningKey, warnings);\n };\n\n const parsedTypes = await readAndParse(typeFilePath, \"runtime_schema_types_invalid_json\");\n if (parsedTypes !== undefined) {\n loadedTypeDefinitions = readTypeDefinitionsFromSchemaFile(parsedTypes);\n if (loadedTypeDefinitions === undefined) {\n warnings.push(\"runtime_schema_types_invalid_shape\");\n }\n }\n\n const parsedStatuses = await readAndParse(statusFilePath, \"runtime_schema_statuses_invalid_json\");\n if (parsedStatuses !== undefined) {\n loadedStatuses = readStatusesFromSchemaFile(parsedStatuses);\n if (loadedStatuses === undefined) {\n warnings.push(\"runtime_schema_statuses_invalid_shape\");\n }\n }\n\n const parsedFields = await readAndParse(fieldsFilePath, \"runtime_schema_fields_invalid_json\");\n if (parsedFields !== undefined) {\n loadedFields = readFieldsFromSchemaFile(parsedFields);\n if (loadedFields === undefined) {\n warnings.push(\"runtime_schema_fields_invalid_shape\");\n }\n }\n\n const parsedWorkflow = await readAndParse(workflowsFilePath, \"runtime_schema_workflows_invalid_json\");\n if (parsedWorkflow !== undefined) {\n loadedWorkflow = readWorkflowFromSchemaFile(parsedWorkflow);\n if (loadedWorkflow === undefined) {\n warnings.push(\"runtime_schema_workflows_invalid_shape\");\n }\n // type_workflows live alongside `workflow` in the same file; their absence\n // is not an error (the file may carry only the lifecycle workflow block).\n loadedTypeWorkflows = readTypeWorkflowsFromSchemaFile(parsedWorkflow);\n }\n\n const mergedSchema = normalizeRuntimeSchemaSettings({\n ...normalizedSchema,\n statuses: [...normalizedSchema.statuses, ...(loadedStatuses ?? [])],\n fields: [...normalizedSchema.fields, ...(loadedFields ?? [])],\n workflow: {\n ...normalizedSchema.workflow,\n ...loadedWorkflow,\n },\n type_workflows: [...(normalizedSchema.type_workflows ?? []), ...(loadedTypeWorkflows ?? [])],\n });\n\n return {\n schema: mergedSchema,\n type_definitions_from_file: loadedTypeDefinitions,\n warnings,\n created_paths: [],\n };\n}\n\nfunction preferredStatusForRole(\n definitions: RuntimeStatusDefinitionResolved[],\n role: RuntimeStatusRole,\n fallbackValues: string[],\n): string | undefined {\n const withRole = definitions.filter((definition) => definition.roles.includes(role));\n if (withRole.length > 0) {\n return withRole[0].id;\n }\n const normalizedFallbacks = fallbackValues\n .map((value) => normalizeStatusId(value))\n .filter((value): value is string => typeof value === \"string\");\n for (const normalized of normalizedFallbacks) {\n if (definitions.some((definition) => definition.id === normalized)) {\n return normalized;\n }\n }\n return definitions[0]?.id;\n}\n\n/**\n * Implements resolve runtime status registry for the public runtime surface of this module.\n */\nexport function resolveRuntimeStatusRegistry(schema: RuntimeSchemaSettings): RuntimeStatusRegistry {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n const definitions = normalizedSchema.statuses.map((definition, index) =>\n normalizeRuntimeStatusDefinition(definition, index),\n ).filter((definition): definition is RuntimeStatusDefinitionResolved => definition !== null);\n const aliasToId = new Map<string, string>();\n const byId = new Map<string, RuntimeStatusDefinitionResolved>();\n for (const definition of definitions) {\n byId.set(definition.id, definition);\n aliasToId.set(definition.id, definition.id);\n aliasToId.set(definition.id.replaceAll(\"_\", \"-\"), definition.id);\n aliasToId.set(definition.id.replaceAll(\"_\", \" \"), definition.id);\n for (const alias of definition.aliases) {\n aliasToId.set(alias, definition.id);\n aliasToId.set(alias.replaceAll(\"_\", \"-\"), definition.id);\n aliasToId.set(alias.replaceAll(\"_\", \" \"), definition.id);\n }\n }\n const terminalStatuses = new Set<string>();\n const terminalDoneStatuses = new Set<string>();\n const terminalCanceledStatuses = new Set<string>();\n const activeStatuses = new Set<string>();\n const blockedStatuses = new Set<string>();\n const draftStatuses = new Set<string>();\n for (const definition of definitions) {\n const roles = new Set(definition.roles);\n if (roles.has(\"terminal\") || roles.has(\"terminal_done\") || roles.has(\"terminal_canceled\")) {\n terminalStatuses.add(definition.id);\n }\n if (roles.has(\"terminal_done\")) {\n terminalDoneStatuses.add(definition.id);\n }\n if (roles.has(\"terminal_canceled\")) {\n terminalCanceledStatuses.add(definition.id);\n }\n if (roles.has(\"active\")) {\n activeStatuses.add(definition.id);\n }\n if (roles.has(\"blocked\")) {\n blockedStatuses.add(definition.id);\n }\n if (roles.has(\"draft\")) {\n draftStatuses.add(definition.id);\n }\n }\n const workflow = normalizedSchema.workflow;\n const openStatus =\n normalizeStatusId(workflow.open_status) ??\n preferredStatusForRole(definitions, \"default_open\", [\"open\", \"in_progress\", STATUS_VALUES[0]]);\n const closeStatus =\n normalizeStatusId(workflow.close_status) ??\n preferredStatusForRole(definitions, \"default_close\", [\"closed\", \"done\", \"complete\"]);\n const canceledStatus =\n normalizeStatusId(workflow.canceled_status) ??\n preferredStatusForRole(definitions, \"default_cancel\", [\"canceled\", \"cancelled\"]);\n\n return {\n definitions,\n by_id: byId,\n alias_to_id: aliasToId,\n terminal_statuses: terminalStatuses,\n terminal_done_statuses: terminalDoneStatuses,\n terminal_canceled_statuses: terminalCanceledStatuses,\n active_statuses: activeStatuses,\n blocked_statuses: blockedStatuses,\n draft_statuses: draftStatuses,\n open_status: openStatus as string,\n close_status: closeStatus as string,\n canceled_status: canceledStatus as string,\n };\n}\n\n/**\n * Implements normalize status input with registry for the public runtime surface of this module.\n */\nexport function normalizeStatusInputWithRegistry(value: unknown, registry: RuntimeStatusRegistry): string | undefined {\n const normalized = normalizeStatusToken(value);\n if (!normalized) {\n return undefined;\n }\n return registry.alias_to_id.get(normalized);\n}\n\n/**\n * Implements resolve runtime field registry for the public runtime surface of this module.\n */\nexport function resolveRuntimeFieldRegistry(schema: RuntimeSchemaSettings): RuntimeFieldRegistry {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n const dedupedByKey = new Map<string, RuntimeFieldDefinitionResolved>();\n const normalizedFields = normalizedSchema.fields\n .map((definition) => normalizeRuntimeFieldDefinition(definition))\n .filter((definition): definition is RuntimeFieldDefinitionResolved => definition !== null);\n for (const normalized of normalizedFields) {\n dedupedByKey.set(normalized.key, normalized);\n }\n const definitions = [...dedupedByKey.values()].sort((left, right) => left.key.localeCompare(right.key));\n const byKey = new Map<string, RuntimeFieldDefinitionResolved>();\n const byCliToken = new Map<string, RuntimeFieldDefinitionResolved>();\n const commandToFields = new Map<RuntimeFieldCommand, RuntimeFieldDefinitionResolved[]>();\n for (const definition of definitions) {\n byKey.set(definition.key, definition);\n byCliToken.set(definition.cli_flag, definition);\n for (const alias of definition.cli_aliases) {\n byCliToken.set(alias, definition);\n }\n for (const command of definition.commands) {\n const existing = commandToFields.get(command) ?? [];\n existing.push(definition);\n commandToFields.set(command, existing);\n }\n }\n for (const [command, fieldDefinitions] of commandToFields.entries()) {\n fieldDefinitions.sort((left, right) => left.key.localeCompare(right.key));\n commandToFields.set(command, fieldDefinitions);\n }\n return {\n definitions,\n by_key: byKey,\n by_cli_token: byCliToken,\n command_to_fields: commandToFields,\n };\n}\n\n/**\n * Implements runtime field option target for the public runtime surface of this module.\n */\nexport function runtimeFieldOptionTarget(field: RuntimeFieldDefinitionResolved): string {\n return toCamelCase(field.key);\n}\n\n/**\n * Implements status is terminal for the public runtime surface of this module.\n */\nexport function statusIsTerminal(status: string, registry: RuntimeStatusRegistry): boolean {\n const normalized = normalizeStatusInputWithRegistry(status, registry);\n if (!normalized) {\n return false;\n }\n return registry.terminal_statuses.has(normalized);\n}\n", "/**\n * @module core/shared/memo\n *\n * Provides shared primitives and utilities for capped memoization maps.\n */\n\n/**\n * Drop the oldest-inserted half of a memo map (Map preserves insertion order), so a\n * size-cap hit mid-scan keeps the newest-inserted half instead of cold-starting the\n * memo. Callers that re-insert entries on hit (the envelope memo) get LRU eviction;\n * the scalar comparator memos evict purely by insertion order.\n */\nexport function evictOldestMemoEntries<Value>(memo: Map<string, Value>): void {\n let remaining = Math.ceil(memo.size / 2);\n for (const key of memo.keys()) {\n if (remaining === 0) {\n return;\n }\n memo.delete(key);\n remaining -= 1;\n }\n}\n"],
5
+ "mappings": "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,wBAAwB;AAErF,IAAM,iBAAkD;EAC7D,MAAM;EACN,SAAS;EACT,MAAM;EACN,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACP,UAAU;EACV,WAAW;EACX,SAAS;EACT,MAAM;;AAGD,IAAM,yBAAgD;EAC3D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKK,IAAM,6BAAkG;EAC7G,SAAS;IACP,uBAAuB;IACvB,qBAAqB;IACrB,0BAA0B;IAC1B,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,+BAA+B;;EAEjC,SAAS;IACP,uBAAuB;IACvB,qBAAqB;IACrB,0BAA0B;IAC1B,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,+BAA+B;;EAEjC,QAAQ;IACN,uBAAuB;IACvB,qBAAqB;IACrB,0BAA0B;IAC1B,sBAAsB;IACtB,kBAAkB;IAClB,kBAAkB;IAClB,+BAA+B;;;AAI5B,IAAM,iDAAiD;EAC5D;EACA;EACA;EACA;;AAGK,IAAM,wDAAwD;EACnE,gBAAgB,CAAC,4CAA4C,gBAAgB;EAC7E,YAAY,CAAC,uCAAuC,qCAAqC,+BAA+B,gBAAgB;EACxI,eAAe,CAAC,uBAAuB,kBAAkB,6BAA6B;;AAGxF,SAAS,mBAAsB,QAAgC;AAC7D,SAAO,SAAS,CAAC,GAAG,MAAM,IAAI;AAChC;AAEO,IAAM,oBAAgC;EAC3C,SAAS;EACT,WAAW;EACX,gBAAgB;EAChB,aAAa;EACb,OAAO;IACL,aAAa;IACb,SAAS;;EAEX,aAAa;IACX,gBAAgB;;EAElB,QAAQ;IACN,g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",
6
6
  "names": ["path", "fs", "path", "path", "pathExists", "path", "fs", "path", "fs", "path", "path", "normalized", "path"]
7
7
  }