@unbrained/pm-cli 2026.7.6 → 2026.7.8

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 (688) hide show
  1. package/CHANGELOG.md +50 -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/completion.js +10 -2
  8. package/dist/cli/commands/completion.js.map +1 -1
  9. package/dist/cli/commands/context.d.ts +1 -0
  10. package/dist/cli/commands/context.js +4 -4
  11. package/dist/cli/commands/context.js.map +1 -1
  12. package/dist/cli/commands/extension/bundled-catalog.d.ts +3 -0
  13. package/dist/cli/commands/extension/bundled-catalog.js +38 -28
  14. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  15. package/dist/cli/commands/extension/install-sources.js +81 -18
  16. package/dist/cli/commands/extension/install-sources.js.map +1 -1
  17. package/dist/cli/commands/extension.d.ts +23 -19
  18. package/dist/cli/commands/extension.js +167 -57
  19. package/dist/cli/commands/extension.js.map +1 -1
  20. package/dist/cli/commands/health.js +9 -5
  21. package/dist/cli/commands/health.js.map +1 -1
  22. package/dist/cli/commands/learnings.js +5 -3
  23. package/dist/cli/commands/learnings.js.map +1 -1
  24. package/dist/cli/commands/notes.js +5 -3
  25. package/dist/cli/commands/notes.js.map +1 -1
  26. package/dist/cli/commands/reindex.js +4 -3
  27. package/dist/cli/commands/reindex.js.map +1 -1
  28. package/dist/cli/commands/search.js +4 -4
  29. package/dist/cli/commands/search.js.map +1 -1
  30. package/dist/cli/commands/test.d.ts +9 -0
  31. package/dist/cli/commands/test.js +144 -105
  32. package/dist/cli/commands/test.js.map +1 -1
  33. package/dist/cli/extension-command-help.js +10 -2
  34. package/dist/cli/extension-command-help.js.map +1 -1
  35. package/dist/cli/help-content.js +28 -2
  36. package/dist/cli/help-content.js.map +1 -1
  37. package/dist/cli/register-list-query.d.ts +1 -1
  38. package/dist/cli/register-list-query.js +19 -27
  39. package/dist/cli/register-list-query.js.map +1 -1
  40. package/dist/cli/register-operations.d.ts +0 -8
  41. package/dist/cli/register-operations.js +41 -46
  42. package/dist/cli/register-operations.js.map +1 -1
  43. package/dist/cli/register-setup.js +119 -13
  44. package/dist/cli/register-setup.js.map +1 -1
  45. package/dist/cli/registration-helpers.d.ts +5 -1
  46. package/dist/cli/registration-helpers.js +14 -2
  47. package/dist/cli/registration-helpers.js.map +1 -1
  48. package/dist/cli-bundle/chunks/append-CDPAYYSB.js +11 -0
  49. package/dist/cli-bundle/chunks/{gc-2DNMPXMC.js → append-RSPHC423.js} +8 -9
  50. package/dist/cli-bundle/chunks/{chunk-LK6XLOGP.js → chunk-2BVD4ZD2.js} +288 -233
  51. package/dist/cli-bundle/chunks/chunk-2BVD4ZD2.js.map +7 -0
  52. package/dist/cli-bundle/chunks/{chunk-TKD5VCTD.js → chunk-2RADY7IB.js} +517 -195
  53. package/dist/cli-bundle/chunks/chunk-2RADY7IB.js.map +1 -0
  54. package/dist/cli-bundle/chunks/{chunk-COSPOP7H.js → chunk-3FRNNVWY.js} +518 -196
  55. package/dist/cli-bundle/chunks/chunk-3FRNNVWY.js.map +7 -0
  56. package/dist/cli-bundle/chunks/{chunk-24YG75HI.js → chunk-3FUXM574.js} +8 -8
  57. package/dist/cli-bundle/chunks/{chunk-IWVU4C2F.js → chunk-3SHDAKMF.js} +3 -3
  58. package/dist/cli-bundle/chunks/{chunk-O6AWCQRQ.js → chunk-3UXIMY62.js} +4 -6
  59. package/dist/cli-bundle/chunks/{chunk-O6AWCQRQ.js.map → chunk-3UXIMY62.js.map} +1 -1
  60. package/dist/cli-bundle/chunks/{chunk-MUH7A3FD.js → chunk-3V5C7PUH.js} +2 -2
  61. package/dist/cli-bundle/chunks/{chunk-ALFPSEWO.js → chunk-3YJDIJIE.js} +4 -6
  62. package/dist/cli-bundle/chunks/{chunk-ALFPSEWO.js.map → chunk-3YJDIJIE.js.map} +1 -1
  63. package/dist/cli-bundle/chunks/{chunk-EGY6JBQ3.js → chunk-4I7KS5ES.js} +2 -2
  64. package/dist/cli-bundle/chunks/{chunk-CRVYGJUI.js → chunk-4OCWJ2AP.js} +13 -17
  65. package/dist/cli-bundle/chunks/{chunk-CRVYGJUI.js.map → chunk-4OCWJ2AP.js.map} +1 -1
  66. package/dist/cli-bundle/chunks/{chunk-GJ7QC5DJ.js → chunk-5STY7NVM.js} +8 -8
  67. package/dist/cli-bundle/chunks/{chunk-JJP45OEI.js → chunk-5VAZHYVQ.js} +2 -2
  68. package/dist/cli-bundle/chunks/{chunk-CFB33L7W.js → chunk-6FU5BVRB.js} +12 -14
  69. package/dist/cli-bundle/chunks/{chunk-CFB33L7W.js.map → chunk-6FU5BVRB.js.map} +1 -1
  70. package/dist/cli-bundle/chunks/{chunk-22KBU3MW.js → chunk-6RR4XM5H.js} +3 -3
  71. package/dist/cli-bundle/chunks/{chunk-K46RF36U.js → chunk-6TD5QGIB.js} +7 -7
  72. package/dist/cli-bundle/chunks/chunk-6TD5QGIB.js.map +1 -0
  73. package/dist/cli-bundle/chunks/{chunk-IX5BXEMX.js → chunk-6WCXSC5V.js} +12 -16
  74. package/dist/cli-bundle/chunks/{chunk-IX5BXEMX.js.map → chunk-6WCXSC5V.js.map} +1 -1
  75. package/dist/cli-bundle/chunks/{chunk-ZWBEPGD7.js → chunk-6ZKDMEVT.js} +7 -9
  76. package/dist/cli-bundle/chunks/{chunk-ZWBEPGD7.js.map → chunk-6ZKDMEVT.js.map} +1 -1
  77. package/dist/cli-bundle/chunks/{chunk-KUOOJR35.js → chunk-7QKSLAHB.js} +2 -2
  78. package/dist/cli-bundle/chunks/{chunk-MVSP7WGJ.js → chunk-7TBUV7XS.js} +8 -12
  79. package/dist/cli-bundle/chunks/{chunk-MVSP7WGJ.js.map → chunk-7TBUV7XS.js.map} +1 -1
  80. package/dist/cli-bundle/chunks/{chunk-NGXQ3PFT.js → chunk-7UCBLJDF.js} +2 -2
  81. package/dist/cli-bundle/chunks/{chunk-F3K4JGFD.js → chunk-AEOFBBWO.js} +6 -8
  82. package/dist/cli-bundle/chunks/{chunk-F3K4JGFD.js.map → chunk-AEOFBBWO.js.map} +1 -1
  83. package/dist/cli-bundle/chunks/chunk-ASMRSIDX.js +10498 -0
  84. package/dist/cli-bundle/chunks/chunk-ASMRSIDX.js.map +7 -0
  85. package/dist/cli-bundle/chunks/{chunk-7DT4WSH2.js → chunk-BFNFTHWQ.js} +3 -3
  86. package/dist/cli-bundle/chunks/chunk-BPJ5NYSJ.js +5509 -0
  87. package/dist/cli-bundle/chunks/chunk-BPJ5NYSJ.js.map +7 -0
  88. package/dist/cli-bundle/chunks/{chunk-Y46GD4IX.js → chunk-C3YU3TXX.js} +2 -2
  89. package/dist/cli-bundle/chunks/{chunk-VPIM42PC.js → chunk-C6XSTACC.js} +11 -7
  90. package/dist/cli-bundle/chunks/chunk-C6XSTACC.js.map +7 -0
  91. package/dist/cli-bundle/chunks/{chunk-AZYGZGGI.js → chunk-CGDUIPJL.js} +3 -3
  92. package/dist/cli-bundle/chunks/{chunk-FT3QTERD.js → chunk-CXH7EMSB.js} +5 -7
  93. package/dist/cli-bundle/chunks/{chunk-FT3QTERD.js.map → chunk-CXH7EMSB.js.map} +1 -1
  94. package/dist/cli-bundle/chunks/{chunk-DMRNBQOI.js → chunk-D63PEJTB.js} +256 -36
  95. package/dist/cli-bundle/chunks/chunk-D63PEJTB.js.map +1 -0
  96. package/dist/cli-bundle/chunks/{chunk-RCQZK2GO.js → chunk-D6J5673C.js} +7 -9
  97. package/dist/cli-bundle/chunks/{chunk-RCQZK2GO.js.map → chunk-D6J5673C.js.map} +1 -1
  98. package/dist/cli-bundle/chunks/{chunk-3UJRFJ5R.js → chunk-DUBC6TI3.js} +28 -34
  99. package/dist/cli-bundle/chunks/{chunk-3UJRFJ5R.js.map → chunk-DUBC6TI3.js.map} +1 -1
  100. package/dist/cli-bundle/chunks/{chunk-NC33K5ZS.js → chunk-EEJKHF7M.js} +7 -6
  101. package/dist/cli-bundle/chunks/{chunk-NC33K5ZS.js.map → chunk-EEJKHF7M.js.map} +2 -2
  102. package/dist/cli-bundle/chunks/{chunk-XG625QP4.js → chunk-EP2CKDS7.js} +2 -2
  103. package/dist/cli-bundle/chunks/{chunk-NZEHECMW.js → chunk-EYPIUFWJ.js} +24 -32
  104. package/dist/cli-bundle/chunks/{chunk-NZEHECMW.js.map → chunk-EYPIUFWJ.js.map} +1 -1
  105. package/dist/cli-bundle/chunks/{chunk-45FYNUFJ.js → chunk-F5DDGY6R.js} +6 -6
  106. package/dist/cli-bundle/chunks/{chunk-45FYNUFJ.js.map → chunk-F5DDGY6R.js.map} +1 -1
  107. package/dist/cli-bundle/chunks/{chunk-4ZBE5GUN.js → chunk-FFB3WITE.js} +10 -16
  108. package/dist/cli-bundle/chunks/{chunk-4ZBE5GUN.js.map → chunk-FFB3WITE.js.map} +1 -1
  109. package/dist/cli-bundle/chunks/{chunk-7D7OOEYG.js → chunk-FJR2S7S4.js} +10 -14
  110. package/dist/cli-bundle/chunks/{chunk-7D7OOEYG.js.map → chunk-FJR2S7S4.js.map} +1 -1
  111. package/dist/cli-bundle/chunks/chunk-FL625JJM.js +6792 -0
  112. package/dist/cli-bundle/chunks/chunk-FL625JJM.js.map +7 -0
  113. package/dist/cli-bundle/chunks/{chunk-LPSSSDJR.js → chunk-FOJEBRDD.js} +16 -20
  114. package/dist/cli-bundle/chunks/{chunk-LPSSSDJR.js.map → chunk-FOJEBRDD.js.map} +1 -1
  115. package/dist/cli-bundle/chunks/{chunk-EOKXK3R3.js → chunk-G4FKP4ID.js} +1220 -398
  116. package/dist/cli-bundle/chunks/chunk-G4FKP4ID.js.map +1 -0
  117. package/dist/cli-bundle/chunks/chunk-GE44TQMC.js +6726 -0
  118. package/dist/cli-bundle/chunks/chunk-GE44TQMC.js.map +1 -0
  119. package/dist/cli-bundle/chunks/{chunk-XUC7PI2H.js → chunk-GLMJLBLR.js} +6 -10
  120. package/dist/cli-bundle/chunks/{chunk-XUC7PI2H.js.map → chunk-GLMJLBLR.js.map} +1 -1
  121. package/dist/cli-bundle/chunks/{chunk-GANUTS7W.js → chunk-GO2X6ZRB.js} +4 -6
  122. package/dist/cli-bundle/chunks/{chunk-GANUTS7W.js.map → chunk-GO2X6ZRB.js.map} +1 -1
  123. package/dist/cli-bundle/chunks/{chunk-CFNGIXZP.js → chunk-GQOKFX2G.js} +22 -26
  124. package/dist/cli-bundle/chunks/{chunk-CFNGIXZP.js.map → chunk-GQOKFX2G.js.map} +1 -1
  125. package/dist/cli-bundle/chunks/{chunk-XHET7YUZ.js → chunk-GSQVQINP.js} +8 -10
  126. package/dist/cli-bundle/chunks/{chunk-XHET7YUZ.js.map → chunk-GSQVQINP.js.map} +1 -1
  127. package/dist/cli-bundle/chunks/chunk-HI27UADG.js +5434 -0
  128. package/dist/cli-bundle/chunks/chunk-HI27UADG.js.map +1 -0
  129. package/dist/cli-bundle/chunks/{chunk-I36Y7PCE.js → chunk-HZZ3AC27.js} +6 -6
  130. package/dist/cli-bundle/chunks/{chunk-I36Y7PCE.js.map → chunk-HZZ3AC27.js.map} +1 -1
  131. package/dist/cli-bundle/chunks/{chunk-OGWQ2IEP.js → chunk-IINCZYM3.js} +8 -12
  132. package/dist/cli-bundle/chunks/{chunk-OGWQ2IEP.js.map → chunk-IINCZYM3.js.map} +1 -1
  133. package/dist/cli-bundle/chunks/{chunk-EKFNL33R.js → chunk-INOWVPUD.js} +37 -16
  134. package/dist/cli-bundle/chunks/chunk-INOWVPUD.js.map +1 -0
  135. package/dist/cli-bundle/chunks/{chunk-4LELACOL.js → chunk-IYRG5AEC.js} +15 -23
  136. package/dist/cli-bundle/chunks/{chunk-4LELACOL.js.map → chunk-IYRG5AEC.js.map} +1 -1
  137. package/dist/cli-bundle/chunks/{chunk-MVYWGY2A.js → chunk-J6AD3GWC.js} +2 -2
  138. package/dist/cli-bundle/chunks/{chunk-D2XRLB55.js → chunk-JH5XDDYS.js} +14 -20
  139. package/dist/cli-bundle/chunks/{chunk-D2XRLB55.js.map → chunk-JH5XDDYS.js.map} +1 -1
  140. package/dist/cli-bundle/chunks/{chunk-HOVCGJSD.js → chunk-JYVPLGOW.js} +9 -11
  141. package/dist/cli-bundle/chunks/{chunk-HOVCGJSD.js.map → chunk-JYVPLGOW.js.map} +1 -1
  142. package/dist/cli-bundle/chunks/{chunk-MA4SM3QZ.js → chunk-K52C6YPA.js} +12 -18
  143. package/dist/cli-bundle/chunks/{chunk-MA4SM3QZ.js.map → chunk-K52C6YPA.js.map} +1 -1
  144. package/dist/cli-bundle/chunks/{chunk-R5BMJX33.js → chunk-KFL3XHMA.js} +2 -2
  145. package/dist/cli-bundle/chunks/chunk-KMXVZ2P7.js +10320 -0
  146. package/dist/cli-bundle/chunks/chunk-KMXVZ2P7.js.map +1 -0
  147. package/dist/cli-bundle/chunks/{chunk-4CJFCTLM.js → chunk-LD2NBQ5T.js} +6 -8
  148. package/dist/cli-bundle/chunks/{chunk-4CJFCTLM.js.map → chunk-LD2NBQ5T.js.map} +1 -1
  149. package/dist/cli-bundle/chunks/{chunk-6QBJLYBP.js → chunk-LG4N6YOK.js} +8 -7
  150. package/dist/cli-bundle/chunks/{chunk-6QBJLYBP.js.map → chunk-LG4N6YOK.js.map} +1 -1
  151. package/dist/cli-bundle/chunks/{chunk-L5PSPMZ4.js → chunk-LHDHS4Z6.js} +10 -14
  152. package/dist/cli-bundle/chunks/{chunk-L5PSPMZ4.js.map → chunk-LHDHS4Z6.js.map} +1 -1
  153. package/dist/cli-bundle/chunks/{chunk-M7JNBQAD.js → chunk-MCH6IKK7.js} +4 -6
  154. package/dist/cli-bundle/chunks/{chunk-M7JNBQAD.js.map → chunk-MCH6IKK7.js.map} +1 -1
  155. package/dist/cli-bundle/chunks/{chunk-57NWPFF2.js → chunk-MFLLULHU.js} +281 -233
  156. package/dist/cli-bundle/chunks/chunk-MFLLULHU.js.map +1 -0
  157. package/dist/cli-bundle/chunks/{chunk-EGAP5OWD.js → chunk-ML27MHNM.js} +35 -17
  158. package/dist/cli-bundle/chunks/chunk-ML27MHNM.js.map +1 -0
  159. package/dist/cli-bundle/chunks/{chunk-3N6RRO2Q.js → chunk-MYHFZNBO.js} +20 -24
  160. package/dist/cli-bundle/chunks/{chunk-3N6RRO2Q.js.map → chunk-MYHFZNBO.js.map} +1 -1
  161. package/dist/cli-bundle/chunks/{chunk-6LLVNJXT.js → chunk-NGBWEYNY.js} +12 -18
  162. package/dist/cli-bundle/chunks/{chunk-6LLVNJXT.js.map → chunk-NGBWEYNY.js.map} +1 -1
  163. package/dist/cli-bundle/chunks/{chunk-GDDAGPWJ.js → chunk-NRMDT4OV.js} +10 -14
  164. package/dist/cli-bundle/chunks/{chunk-GDDAGPWJ.js.map → chunk-NRMDT4OV.js.map} +1 -1
  165. package/dist/cli-bundle/chunks/chunk-NTOOEVJ4.js +5359 -0
  166. package/dist/cli-bundle/chunks/chunk-NTOOEVJ4.js.map +1 -0
  167. package/dist/cli-bundle/chunks/{chunk-W6DYWXPQ.js → chunk-P2WE5KCU.js} +261 -34
  168. package/dist/cli-bundle/chunks/{chunk-W6DYWXPQ.js.map → chunk-P2WE5KCU.js.map} +4 -4
  169. package/dist/cli-bundle/chunks/{chunk-YN7Y6DQZ.js → chunk-PAWPLIWW.js} +14 -20
  170. package/dist/cli-bundle/chunks/{chunk-YN7Y6DQZ.js.map → chunk-PAWPLIWW.js.map} +1 -1
  171. package/dist/cli-bundle/chunks/{chunk-MWMVPCIE.js → chunk-PCBZ2VJD.js} +7 -7
  172. package/dist/cli-bundle/chunks/{chunk-ZSUS2OD3.js → chunk-PJPZTE7P.js} +1216 -387
  173. package/dist/cli-bundle/chunks/chunk-PJPZTE7P.js.map +7 -0
  174. package/dist/cli-bundle/chunks/{chunk-B6DUFX6H.js → chunk-Q3CFSOQZ.js} +7 -7
  175. package/dist/cli-bundle/chunks/{chunk-NO442GWJ.js → chunk-QJZM5WO5.js} +5 -5
  176. package/dist/cli-bundle/chunks/{chunk-NO442GWJ.js.map → chunk-QJZM5WO5.js.map} +2 -2
  177. package/dist/cli-bundle/chunks/{chunk-QLMX7SRD.js → chunk-QLEH6FTQ.js} +6 -6
  178. package/dist/cli-bundle/chunks/chunk-QLEH6FTQ.js.map +7 -0
  179. package/dist/cli-bundle/chunks/{chunk-GBAX2ZAQ.js → chunk-QYZMZD4L.js} +10 -12
  180. package/dist/cli-bundle/chunks/{chunk-GBAX2ZAQ.js.map → chunk-QYZMZD4L.js.map} +1 -1
  181. package/dist/cli-bundle/chunks/{chunk-W3DSJQIO.js → chunk-RDJXIAJB.js} +7 -11
  182. package/dist/cli-bundle/chunks/{chunk-W3DSJQIO.js.map → chunk-RDJXIAJB.js.map} +1 -1
  183. package/dist/cli-bundle/chunks/{chunk-7WBAJSS6.js → chunk-RFHLRMLQ.js} +6 -8
  184. package/dist/cli-bundle/chunks/{chunk-7WBAJSS6.js.map → chunk-RFHLRMLQ.js.map} +1 -1
  185. package/dist/cli-bundle/chunks/{chunk-SGMFPXKR.js → chunk-RL24NAUX.js} +10 -12
  186. package/dist/cli-bundle/chunks/{chunk-SGMFPXKR.js.map → chunk-RL24NAUX.js.map} +1 -1
  187. package/dist/cli-bundle/chunks/{chunk-46CUF5L6.js → chunk-RLHQ3G4M.js} +99 -51
  188. package/dist/cli-bundle/chunks/chunk-RLHQ3G4M.js.map +7 -0
  189. package/dist/cli-bundle/chunks/{chunk-UH7T2DAX.js → chunk-SCJPFQQT.js} +12 -18
  190. package/dist/cli-bundle/chunks/{chunk-UH7T2DAX.js.map → chunk-SCJPFQQT.js.map} +1 -1
  191. package/dist/cli-bundle/chunks/{chunk-B6XS3R3O.js → chunk-SIQGG335.js} +12 -16
  192. package/dist/cli-bundle/chunks/{chunk-B6XS3R3O.js.map → chunk-SIQGG335.js.map} +1 -1
  193. package/dist/cli-bundle/chunks/{chunk-E42XTBSP.js → chunk-SN5X5GTU.js} +8 -12
  194. package/dist/cli-bundle/chunks/{chunk-E42XTBSP.js.map → chunk-SN5X5GTU.js.map} +1 -1
  195. package/dist/cli-bundle/chunks/{chunk-CL36D4PC.js → chunk-TKWTJGD6.js} +36 -15
  196. package/dist/cli-bundle/chunks/chunk-TKWTJGD6.js.map +7 -0
  197. package/dist/cli-bundle/chunks/{chunk-VIIUS6N6.js → chunk-TR2C6V5T.js} +37 -19
  198. package/dist/cli-bundle/chunks/chunk-TR2C6V5T.js.map +7 -0
  199. package/dist/cli-bundle/chunks/chunk-TTCJCKUJ.js +5514 -0
  200. package/dist/cli-bundle/chunks/chunk-TTCJCKUJ.js.map +7 -0
  201. package/dist/cli-bundle/chunks/{chunk-KGFUY7WN.js → chunk-TU5P744I.js} +4 -4
  202. package/dist/cli-bundle/chunks/{chunk-TULGS6X6.js → chunk-TUDAYIO7.js} +529 -46
  203. package/dist/cli-bundle/chunks/chunk-TUDAYIO7.js.map +1 -0
  204. package/dist/cli-bundle/chunks/{chunk-MLIYFOE7.js → chunk-U72GF3I2.js} +12 -8
  205. package/dist/cli-bundle/chunks/chunk-U72GF3I2.js.map +1 -0
  206. package/dist/cli-bundle/chunks/{chunk-ZZD4J5XY.js → chunk-UCRYCT5M.js} +30 -36
  207. package/dist/cli-bundle/chunks/{chunk-ZZD4J5XY.js.map → chunk-UCRYCT5M.js.map} +1 -1
  208. package/dist/cli-bundle/chunks/{chunk-JDDLOQAE.js → chunk-UEATYUZW.js} +2 -2
  209. package/dist/cli-bundle/chunks/{chunk-JVH7QBVV.js → chunk-UFNFHCAC.js} +2 -2
  210. package/dist/cli-bundle/chunks/{chunk-NB7RLQFW.js → chunk-UH6VFRV6.js} +5 -7
  211. package/dist/cli-bundle/chunks/{chunk-NB7RLQFW.js.map → chunk-UH6VFRV6.js.map} +1 -1
  212. package/dist/cli-bundle/chunks/{chunk-SQOIV3OQ.js → chunk-UIHDZS6X.js} +11 -15
  213. package/dist/cli-bundle/chunks/{chunk-SQOIV3OQ.js.map → chunk-UIHDZS6X.js.map} +1 -1
  214. package/dist/cli-bundle/chunks/{chunk-W572BIEB.js → chunk-UURYLDDC.js} +14 -18
  215. package/dist/cli-bundle/chunks/{chunk-W572BIEB.js.map → chunk-UURYLDDC.js.map} +1 -1
  216. package/dist/cli-bundle/chunks/{chunk-G64OCSKU.js → chunk-UVFJSKTF.js} +9 -13
  217. package/dist/cli-bundle/chunks/{chunk-G64OCSKU.js.map → chunk-UVFJSKTF.js.map} +1 -1
  218. package/dist/cli-bundle/chunks/{chunk-SMB7RV23.js → chunk-W2VFNVSJ.js} +6 -8
  219. package/dist/cli-bundle/chunks/{chunk-SMB7RV23.js.map → chunk-W2VFNVSJ.js.map} +1 -1
  220. package/dist/cli-bundle/chunks/{chunk-HIHMT6WS.js → chunk-WVEMZZCR.js} +5 -5
  221. package/dist/cli-bundle/chunks/{chunk-HIHMT6WS.js.map → chunk-WVEMZZCR.js.map} +2 -2
  222. package/dist/cli-bundle/chunks/{chunk-3VHSI5FL.js → chunk-XN5BEN2B.js} +94 -53
  223. package/dist/cli-bundle/chunks/chunk-XN5BEN2B.js.map +1 -0
  224. package/dist/cli-bundle/chunks/{chunk-SCUR7K7N.js → chunk-XPSGJ4IV.js} +541 -44
  225. package/dist/cli-bundle/chunks/chunk-XPSGJ4IV.js.map +7 -0
  226. package/dist/cli-bundle/chunks/{chunk-ZJ262CED.js → chunk-YQEKE4FO.js} +13 -21
  227. package/dist/cli-bundle/chunks/{chunk-ZJ262CED.js.map → chunk-YQEKE4FO.js.map} +1 -1
  228. package/dist/cli-bundle/chunks/{chunk-EBRZZ54H.js → chunk-YR5R4FMQ.js} +26 -34
  229. package/dist/cli-bundle/chunks/{chunk-EBRZZ54H.js.map → chunk-YR5R4FMQ.js.map} +1 -1
  230. package/dist/cli-bundle/chunks/{chunk-XB7KFVFI.js → chunk-YSRXFGNV.js} +7 -9
  231. package/dist/cli-bundle/chunks/{chunk-XB7KFVFI.js.map → chunk-YSRXFGNV.js.map} +1 -1
  232. package/dist/cli-bundle/chunks/{chunk-HFDADVJZ.js → chunk-YUCKM3MD.js} +10 -14
  233. package/dist/cli-bundle/chunks/{chunk-HFDADVJZ.js.map → chunk-YUCKM3MD.js.map} +1 -1
  234. package/dist/cli-bundle/chunks/{chunk-SQYJ4HF2.js → chunk-YUMNZS3X.js} +6 -8
  235. package/dist/cli-bundle/chunks/{chunk-SQYJ4HF2.js.map → chunk-YUMNZS3X.js.map} +1 -1
  236. package/dist/cli-bundle/chunks/{chunk-AGHMOTGM.js → chunk-Z2JQH2MG.js} +2 -2
  237. package/dist/cli-bundle/chunks/{chunk-ZGK4L4JM.js → chunk-Z6RLSNUX.js} +4 -6
  238. package/dist/cli-bundle/chunks/{chunk-ZGK4L4JM.js.map → chunk-Z6RLSNUX.js.map} +1 -1
  239. package/dist/cli-bundle/chunks/{chunk-Y4M7CPQP.js → chunk-ZMOPZFVT.js} +4 -4
  240. package/dist/cli-bundle/chunks/close-E3RLZSP2.js +12 -0
  241. package/dist/cli-bundle/chunks/{close-2SSSHHUZ.js → close-K6BFI3OX.js} +5 -9
  242. package/dist/cli-bundle/chunks/close-many-6NBL3PM4.js +26 -0
  243. package/dist/cli-bundle/chunks/close-many-X4YKS3RO.js +22 -0
  244. package/dist/cli-bundle/chunks/comments-PLFK5ZKK.js +17 -0
  245. package/dist/cli-bundle/chunks/comments-ZNOD5PTV.js +13 -0
  246. package/dist/cli-bundle/chunks/copy-F7BUFY4J.js +9 -0
  247. package/dist/cli-bundle/chunks/{copy-32ROBIDL.js → copy-VH3L4MN2.js} +4 -8
  248. package/dist/cli-bundle/chunks/create-AMBMYP6F.js +25 -0
  249. package/dist/cli-bundle/chunks/{create-E77SDCUP.js → create-TRIBYORN.js} +9 -14
  250. package/dist/cli-bundle/chunks/delete-6KQHZYIP.js +10 -0
  251. package/dist/cli-bundle/chunks/{delete-RA5KTCLB.js → delete-ZNXUNCZR.js} +4 -8
  252. package/dist/cli-bundle/chunks/deps-CVDY7FFK.js +13 -0
  253. package/dist/cli-bundle/chunks/{deps-32SU7HO5.js → deps-SZXQHV73.js} +4 -8
  254. package/dist/cli-bundle/chunks/{docs-RRUPT7O2.js → docs-DR74ITCD.js} +6 -10
  255. package/dist/cli-bundle/chunks/docs-WCVYY6I7.js +14 -0
  256. package/dist/cli-bundle/chunks/files-H5YCA74Z.js +18 -0
  257. package/dist/cli-bundle/chunks/{files-PYKR2UUG.js → files-QEFQ2M3H.js} +6 -10
  258. package/dist/cli-bundle/chunks/{contracts-NYPEW2G4.js → focus-55TRYSNA.js} +7 -9
  259. package/dist/cli-bundle/chunks/focus-N2QGNS5D.js +10 -0
  260. package/dist/cli-bundle/chunks/history-compact-GWQ4UOEI.js +21 -0
  261. package/dist/cli-bundle/chunks/{history-compact-3MNXLKAT.js → history-compact-JJZ4EFL3.js} +9 -13
  262. package/dist/cli-bundle/chunks/history-redact-4GJOLXCM.js +17 -0
  263. package/dist/cli-bundle/chunks/{history-redact-P6DYF55G.js → history-redact-TPPUT3A5.js} +7 -11
  264. package/dist/cli-bundle/chunks/history-repair-HVCVCGUF.js +19 -0
  265. package/dist/cli-bundle/chunks/{history-repair-ZJQFMWPD.js → history-repair-J7PIZ6ZP.js} +9 -13
  266. package/dist/cli-bundle/chunks/{append-BGML6VLD.js → learnings-KB6BT4NR.js} +9 -11
  267. package/dist/cli-bundle/chunks/learnings-YYY3U2Y7.js +13 -0
  268. package/dist/cli-bundle/chunks/notes-BGG7VL72.js +13 -0
  269. package/dist/cli-bundle/chunks/notes-ZTHXVOKM.js +17 -0
  270. package/dist/cli-bundle/chunks/{plan-CHVE7PBR.js → plan-CJPKFRBK.js} +10 -15
  271. package/dist/cli-bundle/chunks/plan-MK2QY3GA.js +24 -0
  272. package/dist/cli-bundle/chunks/{profile-ZXGSKBJD.js → profile-AQNHXOYA.js} +9 -13
  273. package/dist/cli-bundle/chunks/{profile-LD23PSI6.js → profile-HTBFINKQ.js} +9 -13
  274. package/dist/cli-bundle/chunks/{register-list-query-B42JCCOI.js → register-list-query-EEF33SUJ.js} +43 -34
  275. package/dist/cli-bundle/chunks/register-list-query-EEF33SUJ.js.map +1 -0
  276. package/dist/cli-bundle/chunks/{register-list-query-OEYQHFXO.js → register-list-query-S4FBWIWN.js} +42 -33
  277. package/dist/cli-bundle/chunks/register-list-query-S4FBWIWN.js.map +7 -0
  278. package/dist/cli-bundle/chunks/{register-mutation-3QXIHCQG.js → register-mutation-L5Q7AUDN.js} +34 -39
  279. package/dist/cli-bundle/chunks/{register-mutation-3QXIHCQG.js.map → register-mutation-L5Q7AUDN.js.map} +1 -1
  280. package/dist/cli-bundle/chunks/{register-mutation-IAEST26S.js → register-mutation-QFLRBCI7.js} +36 -41
  281. package/dist/cli-bundle/chunks/{register-mutation-IAEST26S.js.map → register-mutation-QFLRBCI7.js.map} +1 -1
  282. package/dist/cli-bundle/chunks/{chunk-5BMM6XQY.js → register-operations-HDE4FVW4.js} +79 -46
  283. package/dist/cli-bundle/chunks/register-operations-HDE4FVW4.js.map +1 -0
  284. package/dist/cli-bundle/chunks/{chunk-Z3U3U5KD.js → register-operations-QDU43FCG.js} +78 -45
  285. package/dist/cli-bundle/chunks/register-operations-QDU43FCG.js.map +7 -0
  286. package/dist/cli-bundle/chunks/{register-setup-Q6KFNIOZ.js → register-setup-EGMTAXDC.js} +134 -32
  287. package/dist/cli-bundle/chunks/register-setup-EGMTAXDC.js.map +1 -0
  288. package/dist/cli-bundle/chunks/{register-setup-3ZVVX2VN.js → register-setup-PNIO3L2P.js} +133 -31
  289. package/dist/cli-bundle/chunks/register-setup-PNIO3L2P.js.map +7 -0
  290. package/dist/cli-bundle/chunks/{restore-5RQHAPMA.js → restore-BTBEZ5CK.js} +7 -11
  291. package/dist/cli-bundle/chunks/restore-EX4UUZL6.js +15 -0
  292. package/dist/cli-bundle/chunks/{schema-HBORFC6B.js → schema-DGSTYYQB.js} +6 -10
  293. package/dist/cli-bundle/chunks/{schema-245WW4G2.js → schema-HAIBEE24.js} +6 -10
  294. package/dist/cli-bundle/chunks/update-MP4XLU56.js +25 -0
  295. package/dist/cli-bundle/chunks/update-SDIRJGSY.js +21 -0
  296. package/dist/cli-bundle/chunks/update-many-34AIU6W7.js +31 -0
  297. package/dist/cli-bundle/chunks/update-many-JUPCNOKV.js +35 -0
  298. package/dist/cli-bundle/main.js +56 -32
  299. package/dist/cli-bundle/main.js.map +2 -2
  300. package/dist/cli-bundle/sdk-runtime.js +161 -107
  301. package/dist/cli-bundle/sdk-testing.js +7 -8
  302. package/dist/cli-bundle/sdk.js +154 -117
  303. package/dist/cli-bundle/sdk.js.map +2 -2
  304. package/dist/core/extensions/extension-types.d.ts +1 -0
  305. package/dist/core/extensions/extension-types.js +2 -2
  306. package/dist/core/extensions/extension-types.js.map +1 -1
  307. package/dist/core/extensions/loader.js +268 -231
  308. package/dist/core/extensions/loader.js.map +1 -1
  309. package/dist/core/history/drift-scan.js +3 -8
  310. package/dist/core/history/drift-scan.js.map +1 -1
  311. package/dist/core/output/mutation-projection.js +11 -5
  312. package/dist/core/output/mutation-projection.js.map +1 -1
  313. package/dist/core/search/cache.js +3 -3
  314. package/dist/core/search/cache.js.map +1 -1
  315. package/dist/core/search/semantic-defaults.d.ts +2 -0
  316. package/dist/core/search/semantic-defaults.js +11 -4
  317. package/dist/core/search/semantic-defaults.js.map +1 -1
  318. package/dist/core/search/vector-stores.d.ts +1 -1
  319. package/dist/core/search/vector-stores.js +33 -7
  320. package/dist/core/search/vector-stores.js.map +1 -1
  321. package/dist/mcp/server.d.ts +1 -1
  322. package/dist/sdk/cli-contracts/commander-types.js +3 -3
  323. package/dist/sdk/cli-contracts/commander-types.js.map +1 -1
  324. package/dist/sdk/cli-contracts/flag-contracts.js +12 -8
  325. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  326. package/dist/sdk/cli-contracts/tool-parameter-tables.js +10 -2
  327. package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
  328. package/dist/sdk/cli-contracts/tool-schema.js +14 -8
  329. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  330. package/dist/sdk/index.d.ts +1 -1
  331. package/dist/sdk/index.js +3 -3
  332. package/dist/sdk/index.js.map +1 -1
  333. package/dist/sdk/runtime.d.ts +282 -8
  334. package/dist/sdk/runtime.js +453 -14
  335. package/dist/sdk/runtime.js.map +1 -1
  336. package/dist/sdk/start-task-status.d.ts +13 -0
  337. package/dist/sdk/start-task-status.js +19 -0
  338. package/dist/sdk/start-task-status.js.map +1 -0
  339. package/docs/COMMANDS.md +10 -1
  340. package/docs/EXTENSIONS.md +7 -20
  341. package/docs/RELEASING.md +6 -0
  342. package/docs/SDK.md +65 -0
  343. package/docs/TESTING.md +3 -0
  344. package/package.json +2 -1
  345. package/dist/cli-bundle/chunks/activity-WJCGCYPU.js +0 -18
  346. package/dist/cli-bundle/chunks/activity-Z6QUAUSG.js +0 -22
  347. package/dist/cli-bundle/chunks/aggregate-BDM6EIAR.js +0 -25
  348. package/dist/cli-bundle/chunks/aggregate-VQ2DHU3S.js +0 -21
  349. package/dist/cli-bundle/chunks/append-RKJYPU74.js +0 -15
  350. package/dist/cli-bundle/chunks/chunk-2XG4IZON.js +0 -218
  351. package/dist/cli-bundle/chunks/chunk-2XG4IZON.js.map +0 -7
  352. package/dist/cli-bundle/chunks/chunk-37E72CNS.js +0 -217
  353. package/dist/cli-bundle/chunks/chunk-37E72CNS.js.map +0 -1
  354. package/dist/cli-bundle/chunks/chunk-3GCS5SKL.js +0 -228
  355. package/dist/cli-bundle/chunks/chunk-3GCS5SKL.js.map +0 -1
  356. package/dist/cli-bundle/chunks/chunk-3KTN6IBA.js +0 -2330
  357. package/dist/cli-bundle/chunks/chunk-3KTN6IBA.js.map +0 -7
  358. package/dist/cli-bundle/chunks/chunk-3VHSI5FL.js.map +0 -1
  359. package/dist/cli-bundle/chunks/chunk-425E4QL5.js +0 -278
  360. package/dist/cli-bundle/chunks/chunk-425E4QL5.js.map +0 -7
  361. package/dist/cli-bundle/chunks/chunk-46CUF5L6.js.map +0 -7
  362. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +0 -87
  363. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +0 -7
  364. package/dist/cli-bundle/chunks/chunk-4HIFVN7N.js +0 -249
  365. package/dist/cli-bundle/chunks/chunk-4HIFVN7N.js.map +0 -7
  366. package/dist/cli-bundle/chunks/chunk-4IWYTWGF.js +0 -819
  367. package/dist/cli-bundle/chunks/chunk-4IWYTWGF.js.map +0 -1
  368. package/dist/cli-bundle/chunks/chunk-4MZVRJOE.js +0 -279
  369. package/dist/cli-bundle/chunks/chunk-4MZVRJOE.js.map +0 -1
  370. package/dist/cli-bundle/chunks/chunk-57NWPFF2.js.map +0 -1
  371. package/dist/cli-bundle/chunks/chunk-5AJXHQM7.js +0 -268
  372. package/dist/cli-bundle/chunks/chunk-5AJXHQM7.js.map +0 -1
  373. package/dist/cli-bundle/chunks/chunk-5BMM6XQY.js.map +0 -1
  374. package/dist/cli-bundle/chunks/chunk-5GZ7TDD6.js +0 -1868
  375. package/dist/cli-bundle/chunks/chunk-5GZ7TDD6.js.map +0 -7
  376. package/dist/cli-bundle/chunks/chunk-5VAA4YHR.js +0 -1749
  377. package/dist/cli-bundle/chunks/chunk-5VAA4YHR.js.map +0 -7
  378. package/dist/cli-bundle/chunks/chunk-64YKRTSV.js +0 -1961
  379. package/dist/cli-bundle/chunks/chunk-64YKRTSV.js.map +0 -1
  380. package/dist/cli-bundle/chunks/chunk-7C2O74AE.js +0 -23
  381. package/dist/cli-bundle/chunks/chunk-7C2O74AE.js.map +0 -7
  382. package/dist/cli-bundle/chunks/chunk-B7FRNMYN.js +0 -421
  383. package/dist/cli-bundle/chunks/chunk-B7FRNMYN.js.map +0 -1
  384. package/dist/cli-bundle/chunks/chunk-C5JBZRPU.js +0 -1985
  385. package/dist/cli-bundle/chunks/chunk-C5JBZRPU.js.map +0 -7
  386. package/dist/cli-bundle/chunks/chunk-CL36D4PC.js.map +0 -7
  387. package/dist/cli-bundle/chunks/chunk-COSPOP7H.js.map +0 -7
  388. package/dist/cli-bundle/chunks/chunk-COWTDV6B.js +0 -3461
  389. package/dist/cli-bundle/chunks/chunk-COWTDV6B.js.map +0 -7
  390. package/dist/cli-bundle/chunks/chunk-DEWEK6AN.js +0 -1858
  391. package/dist/cli-bundle/chunks/chunk-DEWEK6AN.js.map +0 -1
  392. package/dist/cli-bundle/chunks/chunk-DMRNBQOI.js.map +0 -1
  393. package/dist/cli-bundle/chunks/chunk-E3SZTQ4K.js +0 -1932
  394. package/dist/cli-bundle/chunks/chunk-E3SZTQ4K.js.map +0 -1
  395. package/dist/cli-bundle/chunks/chunk-EGAP5OWD.js.map +0 -1
  396. package/dist/cli-bundle/chunks/chunk-EKFNL33R.js.map +0 -1
  397. package/dist/cli-bundle/chunks/chunk-ENGQOEUY.js +0 -1704
  398. package/dist/cli-bundle/chunks/chunk-ENGQOEUY.js.map +0 -1
  399. package/dist/cli-bundle/chunks/chunk-EOKXK3R3.js.map +0 -1
  400. package/dist/cli-bundle/chunks/chunk-FLZSGSQR.js +0 -231
  401. package/dist/cli-bundle/chunks/chunk-FLZSGSQR.js.map +0 -7
  402. package/dist/cli-bundle/chunks/chunk-FOUYJE4A.js +0 -2090
  403. package/dist/cli-bundle/chunks/chunk-FOUYJE4A.js.map +0 -1
  404. package/dist/cli-bundle/chunks/chunk-G24G7ZAV.js +0 -1570
  405. package/dist/cli-bundle/chunks/chunk-G24G7ZAV.js.map +0 -1
  406. package/dist/cli-bundle/chunks/chunk-GEYZ4G4O.js +0 -239
  407. package/dist/cli-bundle/chunks/chunk-GEYZ4G4O.js.map +0 -1
  408. package/dist/cli-bundle/chunks/chunk-GPLPTGOV.js +0 -530
  409. package/dist/cli-bundle/chunks/chunk-GPLPTGOV.js.map +0 -7
  410. package/dist/cli-bundle/chunks/chunk-GZRDYONU.js +0 -1005
  411. package/dist/cli-bundle/chunks/chunk-GZRDYONU.js.map +0 -7
  412. package/dist/cli-bundle/chunks/chunk-HN6NSXNW.js +0 -277
  413. package/dist/cli-bundle/chunks/chunk-HN6NSXNW.js.map +0 -7
  414. package/dist/cli-bundle/chunks/chunk-IQNVQHOP.js +0 -309
  415. package/dist/cli-bundle/chunks/chunk-IQNVQHOP.js.map +0 -7
  416. package/dist/cli-bundle/chunks/chunk-JINYH2DB.js +0 -371
  417. package/dist/cli-bundle/chunks/chunk-JINYH2DB.js.map +0 -7
  418. package/dist/cli-bundle/chunks/chunk-JQXPY7DN.js +0 -2257
  419. package/dist/cli-bundle/chunks/chunk-JQXPY7DN.js.map +0 -7
  420. package/dist/cli-bundle/chunks/chunk-K46RF36U.js.map +0 -1
  421. package/dist/cli-bundle/chunks/chunk-KERMZVY5.js +0 -371
  422. package/dist/cli-bundle/chunks/chunk-KERMZVY5.js.map +0 -7
  423. package/dist/cli-bundle/chunks/chunk-KSRUHV2H.js +0 -76
  424. package/dist/cli-bundle/chunks/chunk-KSRUHV2H.js.map +0 -1
  425. package/dist/cli-bundle/chunks/chunk-LK6XLOGP.js.map +0 -7
  426. package/dist/cli-bundle/chunks/chunk-LP3HSFZ2.js +0 -140
  427. package/dist/cli-bundle/chunks/chunk-LP3HSFZ2.js.map +0 -1
  428. package/dist/cli-bundle/chunks/chunk-MAWDPCJW.js +0 -1601
  429. package/dist/cli-bundle/chunks/chunk-MAWDPCJW.js.map +0 -1
  430. package/dist/cli-bundle/chunks/chunk-MFAZSEM5.js +0 -1031
  431. package/dist/cli-bundle/chunks/chunk-MFAZSEM5.js.map +0 -1
  432. package/dist/cli-bundle/chunks/chunk-MFSCBT5Q.js +0 -995
  433. package/dist/cli-bundle/chunks/chunk-MFSCBT5Q.js.map +0 -1
  434. package/dist/cli-bundle/chunks/chunk-ML5X7DP2.js +0 -296
  435. package/dist/cli-bundle/chunks/chunk-ML5X7DP2.js.map +0 -1
  436. package/dist/cli-bundle/chunks/chunk-MLIYFOE7.js.map +0 -1
  437. package/dist/cli-bundle/chunks/chunk-MR6FJ7LL.js +0 -2043
  438. package/dist/cli-bundle/chunks/chunk-MR6FJ7LL.js.map +0 -7
  439. package/dist/cli-bundle/chunks/chunk-MXYA5SAJ.js +0 -2033
  440. package/dist/cli-bundle/chunks/chunk-MXYA5SAJ.js.map +0 -1
  441. package/dist/cli-bundle/chunks/chunk-N745W3B3.js +0 -1604
  442. package/dist/cli-bundle/chunks/chunk-N745W3B3.js.map +0 -7
  443. package/dist/cli-bundle/chunks/chunk-NMP5I3I5.js +0 -1615
  444. package/dist/cli-bundle/chunks/chunk-NMP5I3I5.js.map +0 -7
  445. package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js +0 -20
  446. package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js.map +0 -1
  447. package/dist/cli-bundle/chunks/chunk-PZUGEOPS.js +0 -143
  448. package/dist/cli-bundle/chunks/chunk-PZUGEOPS.js.map +0 -7
  449. package/dist/cli-bundle/chunks/chunk-QLMX7SRD.js.map +0 -7
  450. package/dist/cli-bundle/chunks/chunk-QX6HM775.js +0 -398
  451. package/dist/cli-bundle/chunks/chunk-QX6HM775.js.map +0 -7
  452. package/dist/cli-bundle/chunks/chunk-QZ342C63.js +0 -220
  453. package/dist/cli-bundle/chunks/chunk-QZ342C63.js.map +0 -7
  454. package/dist/cli-bundle/chunks/chunk-R2EMWY7Q.js +0 -368
  455. package/dist/cli-bundle/chunks/chunk-R2EMWY7Q.js.map +0 -1
  456. package/dist/cli-bundle/chunks/chunk-RFNYTESG.js +0 -520
  457. package/dist/cli-bundle/chunks/chunk-RFNYTESG.js.map +0 -1
  458. package/dist/cli-bundle/chunks/chunk-RKQOO2UM.js +0 -79
  459. package/dist/cli-bundle/chunks/chunk-RKQOO2UM.js.map +0 -7
  460. package/dist/cli-bundle/chunks/chunk-RQLT6ZWB.js +0 -282
  461. package/dist/cli-bundle/chunks/chunk-RQLT6ZWB.js.map +0 -7
  462. package/dist/cli-bundle/chunks/chunk-S3JS6YVZ.js +0 -274
  463. package/dist/cli-bundle/chunks/chunk-S3JS6YVZ.js.map +0 -1
  464. package/dist/cli-bundle/chunks/chunk-SCUR7K7N.js.map +0 -7
  465. package/dist/cli-bundle/chunks/chunk-SHQY2IDC.js +0 -1977
  466. package/dist/cli-bundle/chunks/chunk-SHQY2IDC.js.map +0 -7
  467. package/dist/cli-bundle/chunks/chunk-SPZ6DOGY.js +0 -1041
  468. package/dist/cli-bundle/chunks/chunk-SPZ6DOGY.js.map +0 -7
  469. package/dist/cli-bundle/chunks/chunk-T42JWV3F.js +0 -822
  470. package/dist/cli-bundle/chunks/chunk-T42JWV3F.js.map +0 -7
  471. package/dist/cli-bundle/chunks/chunk-TKD5VCTD.js.map +0 -1
  472. package/dist/cli-bundle/chunks/chunk-TULGS6X6.js.map +0 -1
  473. package/dist/cli-bundle/chunks/chunk-TZXRBVAM.js +0 -2306
  474. package/dist/cli-bundle/chunks/chunk-TZXRBVAM.js.map +0 -1
  475. package/dist/cli-bundle/chunks/chunk-VIIUS6N6.js.map +0 -7
  476. package/dist/cli-bundle/chunks/chunk-VPIM42PC.js.map +0 -7
  477. package/dist/cli-bundle/chunks/chunk-VQRSPVME.js +0 -368
  478. package/dist/cli-bundle/chunks/chunk-VQRSPVME.js.map +0 -1
  479. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +0 -84
  480. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +0 -1
  481. package/dist/cli-bundle/chunks/chunk-WG34ZNQQ.js +0 -3423
  482. package/dist/cli-bundle/chunks/chunk-WG34ZNQQ.js.map +0 -1
  483. package/dist/cli-bundle/chunks/chunk-WLSM645P.js +0 -2247
  484. package/dist/cli-bundle/chunks/chunk-WLSM645P.js.map +0 -1
  485. package/dist/cli-bundle/chunks/chunk-WRTENIX3.js +0 -215
  486. package/dist/cli-bundle/chunks/chunk-WRTENIX3.js.map +0 -1
  487. package/dist/cli-bundle/chunks/chunk-WSBLYDWV.js +0 -388
  488. package/dist/cli-bundle/chunks/chunk-WSBLYDWV.js.map +0 -1
  489. package/dist/cli-bundle/chunks/chunk-XC5BURG2.js +0 -306
  490. package/dist/cli-bundle/chunks/chunk-XC5BURG2.js.map +0 -1
  491. package/dist/cli-bundle/chunks/chunk-XDB7RWQT.js +0 -424
  492. package/dist/cli-bundle/chunks/chunk-XDB7RWQT.js.map +0 -7
  493. package/dist/cli-bundle/chunks/chunk-Y6BK55A3.js +0 -2128
  494. package/dist/cli-bundle/chunks/chunk-Y6BK55A3.js.map +0 -7
  495. package/dist/cli-bundle/chunks/chunk-Z3U3U5KD.js.map +0 -7
  496. package/dist/cli-bundle/chunks/chunk-ZO3XKAOP.js +0 -299
  497. package/dist/cli-bundle/chunks/chunk-ZO3XKAOP.js.map +0 -7
  498. package/dist/cli-bundle/chunks/chunk-ZSUS2OD3.js.map +0 -7
  499. package/dist/cli-bundle/chunks/claim-RFS7BROJ.js +0 -19
  500. package/dist/cli-bundle/chunks/claim-XP5AWZ5H.js +0 -23
  501. package/dist/cli-bundle/chunks/close-GEANHQ2J.js +0 -16
  502. package/dist/cli-bundle/chunks/close-many-CMZW7ITN.js +0 -31
  503. package/dist/cli-bundle/chunks/close-many-ZFDIG6M7.js +0 -27
  504. package/dist/cli-bundle/chunks/comments-MFSYVNNU.js +0 -21
  505. package/dist/cli-bundle/chunks/comments-XUBPXDYX.js +0 -17
  506. package/dist/cli-bundle/chunks/config-D7XQMONX.js +0 -18
  507. package/dist/cli-bundle/chunks/config-T4FHBSYN.js +0 -22
  508. package/dist/cli-bundle/chunks/context-DIU275XI.js +0 -48
  509. package/dist/cli-bundle/chunks/context-JCOYB4LZ.js +0 -44
  510. package/dist/cli-bundle/chunks/contracts-BVO7CSLK.js +0 -12
  511. package/dist/cli-bundle/chunks/copy-NAGLGMHZ.js +0 -13
  512. package/dist/cli-bundle/chunks/create-4V7SWNBB.js +0 -30
  513. package/dist/cli-bundle/chunks/delete-NQI5OSKN.js +0 -14
  514. package/dist/cli-bundle/chunks/deps-T7SCWXEX.js +0 -17
  515. package/dist/cli-bundle/chunks/docs-WL2IWGWV.js +0 -18
  516. package/dist/cli-bundle/chunks/eval-NF2J5SHR.js +0 -23
  517. package/dist/cli-bundle/chunks/eval-SKDT3MZU.js +0 -27
  518. package/dist/cli-bundle/chunks/extension-LAXKCAYE.js +0 -42
  519. package/dist/cli-bundle/chunks/extension-ZISPBRBC.js +0 -38
  520. package/dist/cli-bundle/chunks/files-EWRQHGIS.js +0 -22
  521. package/dist/cli-bundle/chunks/focus-4T7TM4MT.js +0 -18
  522. package/dist/cli-bundle/chunks/focus-L3YUASOD.js +0 -14
  523. package/dist/cli-bundle/chunks/gc-2PCTYYRI.js +0 -12
  524. package/dist/cli-bundle/chunks/get-7DMITJ3G.js +0 -23
  525. package/dist/cli-bundle/chunks/get-VKQXCXLL.js +0 -19
  526. package/dist/cli-bundle/chunks/health-CVSTAR2F.js +0 -31
  527. package/dist/cli-bundle/chunks/health-TV3GKTFN.js +0 -35
  528. package/dist/cli-bundle/chunks/history-D4JUX5XV.js +0 -20
  529. package/dist/cli-bundle/chunks/history-D4JUX5XV.js.map +0 -7
  530. package/dist/cli-bundle/chunks/history-LQ2UWZTE.js +0 -24
  531. package/dist/cli-bundle/chunks/history-LQ2UWZTE.js.map +0 -1
  532. package/dist/cli-bundle/chunks/history-compact-3MNXLKAT.js.map +0 -1
  533. package/dist/cli-bundle/chunks/history-compact-QWEO32FP.js +0 -25
  534. package/dist/cli-bundle/chunks/history-compact-QWEO32FP.js.map +0 -7
  535. package/dist/cli-bundle/chunks/history-redact-3OIVBVIY.js +0 -21
  536. package/dist/cli-bundle/chunks/history-redact-3OIVBVIY.js.map +0 -7
  537. package/dist/cli-bundle/chunks/history-redact-P6DYF55G.js.map +0 -1
  538. package/dist/cli-bundle/chunks/history-repair-I3E73UGQ.js +0 -23
  539. package/dist/cli-bundle/chunks/history-repair-I3E73UGQ.js.map +0 -7
  540. package/dist/cli-bundle/chunks/history-repair-ZJQFMWPD.js.map +0 -1
  541. package/dist/cli-bundle/chunks/init-C3LJPWQZ.js +0 -30
  542. package/dist/cli-bundle/chunks/init-C3LJPWQZ.js.map +0 -1
  543. package/dist/cli-bundle/chunks/init-J3DPGWQI.js +0 -26
  544. package/dist/cli-bundle/chunks/init-J3DPGWQI.js.map +0 -7
  545. package/dist/cli-bundle/chunks/learnings-5BO2SNDW.js +0 -21
  546. package/dist/cli-bundle/chunks/learnings-5BO2SNDW.js.map +0 -1
  547. package/dist/cli-bundle/chunks/learnings-OGP4JB4I.js +0 -17
  548. package/dist/cli-bundle/chunks/learnings-OGP4JB4I.js.map +0 -7
  549. package/dist/cli-bundle/chunks/list-O5NZVSPN.js +0 -36
  550. package/dist/cli-bundle/chunks/list-O5NZVSPN.js.map +0 -1
  551. package/dist/cli-bundle/chunks/list-Z55YCNTC.js +0 -32
  552. package/dist/cli-bundle/chunks/list-Z55YCNTC.js.map +0 -7
  553. package/dist/cli-bundle/chunks/next-GBNTGXFC.js +0 -28
  554. package/dist/cli-bundle/chunks/next-GBNTGXFC.js.map +0 -7
  555. package/dist/cli-bundle/chunks/next-QKW7PTKE.js +0 -32
  556. package/dist/cli-bundle/chunks/next-QKW7PTKE.js.map +0 -1
  557. package/dist/cli-bundle/chunks/notes-R5FZTKWF.js +0 -17
  558. package/dist/cli-bundle/chunks/notes-R5FZTKWF.js.map +0 -7
  559. package/dist/cli-bundle/chunks/notes-WCGIULVG.js +0 -21
  560. package/dist/cli-bundle/chunks/notes-WCGIULVG.js.map +0 -1
  561. package/dist/cli-bundle/chunks/plan-ADISFYH4.js +0 -29
  562. package/dist/cli-bundle/chunks/plan-ADISFYH4.js.map +0 -7
  563. package/dist/cli-bundle/chunks/plan-CHVE7PBR.js.map +0 -1
  564. package/dist/cli-bundle/chunks/profile-LD23PSI6.js.map +0 -7
  565. package/dist/cli-bundle/chunks/profile-ZXGSKBJD.js.map +0 -1
  566. package/dist/cli-bundle/chunks/register-list-query-B42JCCOI.js.map +0 -1
  567. package/dist/cli-bundle/chunks/register-list-query-OEYQHFXO.js.map +0 -7
  568. package/dist/cli-bundle/chunks/register-operations-I3M3U7DS.js +0 -19
  569. package/dist/cli-bundle/chunks/register-operations-I3M3U7DS.js.map +0 -7
  570. package/dist/cli-bundle/chunks/register-operations-UHKENLZV.js +0 -23
  571. package/dist/cli-bundle/chunks/register-operations-UHKENLZV.js.map +0 -1
  572. package/dist/cli-bundle/chunks/register-setup-3ZVVX2VN.js.map +0 -7
  573. package/dist/cli-bundle/chunks/register-setup-Q6KFNIOZ.js.map +0 -1
  574. package/dist/cli-bundle/chunks/restore-5RQHAPMA.js.map +0 -1
  575. package/dist/cli-bundle/chunks/restore-PNEIBBLW.js +0 -19
  576. package/dist/cli-bundle/chunks/restore-PNEIBBLW.js.map +0 -7
  577. package/dist/cli-bundle/chunks/scheduling-shortcuts-4G56YHVQ.js +0 -29
  578. package/dist/cli-bundle/chunks/scheduling-shortcuts-4G56YHVQ.js.map +0 -1
  579. package/dist/cli-bundle/chunks/scheduling-shortcuts-75DULBYP.js +0 -25
  580. package/dist/cli-bundle/chunks/scheduling-shortcuts-75DULBYP.js.map +0 -7
  581. package/dist/cli-bundle/chunks/schema-245WW4G2.js.map +0 -1
  582. package/dist/cli-bundle/chunks/schema-HBORFC6B.js.map +0 -7
  583. package/dist/cli-bundle/chunks/search-AOZC5SIK.js +0 -34
  584. package/dist/cli-bundle/chunks/search-AOZC5SIK.js.map +0 -7
  585. package/dist/cli-bundle/chunks/search-DRXPGHD7.js +0 -38
  586. package/dist/cli-bundle/chunks/search-DRXPGHD7.js.map +0 -1
  587. package/dist/cli-bundle/chunks/stats-NJG4NLHG.js +0 -21
  588. package/dist/cli-bundle/chunks/stats-NJG4NLHG.js.map +0 -1
  589. package/dist/cli-bundle/chunks/stats-RG6AG4N2.js +0 -17
  590. package/dist/cli-bundle/chunks/stats-RG6AG4N2.js.map +0 -7
  591. package/dist/cli-bundle/chunks/telemetry-HQC2JJIF.js +0 -14
  592. package/dist/cli-bundle/chunks/telemetry-HQC2JJIF.js.map +0 -7
  593. package/dist/cli-bundle/chunks/telemetry-MPNL3HHY.js +0 -18
  594. package/dist/cli-bundle/chunks/telemetry-MPNL3HHY.js.map +0 -1
  595. package/dist/cli-bundle/chunks/test-6CMOCWUC.js +0 -39
  596. package/dist/cli-bundle/chunks/test-6CMOCWUC.js.map +0 -7
  597. package/dist/cli-bundle/chunks/test-RI7XHBZL.js +0 -43
  598. package/dist/cli-bundle/chunks/test-RI7XHBZL.js.map +0 -1
  599. package/dist/cli-bundle/chunks/test-all-7R7YRZIA.js +0 -29
  600. package/dist/cli-bundle/chunks/test-all-7R7YRZIA.js.map +0 -7
  601. package/dist/cli-bundle/chunks/test-all-QEIORFYW.js +0 -33
  602. package/dist/cli-bundle/chunks/test-all-QEIORFYW.js.map +0 -1
  603. package/dist/cli-bundle/chunks/test-runs-5Y2BOU2S.js +0 -28
  604. package/dist/cli-bundle/chunks/test-runs-5Y2BOU2S.js.map +0 -1
  605. package/dist/cli-bundle/chunks/test-runs-PVGC3GRZ.js +0 -24
  606. package/dist/cli-bundle/chunks/test-runs-PVGC3GRZ.js.map +0 -7
  607. package/dist/cli-bundle/chunks/update-QVJDFEAP.js +0 -30
  608. package/dist/cli-bundle/chunks/update-QVJDFEAP.js.map +0 -1
  609. package/dist/cli-bundle/chunks/update-VQVHAY6X.js +0 -26
  610. package/dist/cli-bundle/chunks/update-VQVHAY6X.js.map +0 -7
  611. package/dist/cli-bundle/chunks/update-many-S7XWBSB3.js +0 -37
  612. package/dist/cli-bundle/chunks/update-many-S7XWBSB3.js.map +0 -7
  613. package/dist/cli-bundle/chunks/update-many-YIYW6XQ6.js +0 -41
  614. package/dist/cli-bundle/chunks/update-many-YIYW6XQ6.js.map +0 -1
  615. package/dist/cli-bundle/chunks/upgrade-OPRXA56R.js +0 -24
  616. package/dist/cli-bundle/chunks/upgrade-OPRXA56R.js.map +0 -7
  617. package/dist/cli-bundle/chunks/upgrade-WH4BTQLX.js +0 -28
  618. package/dist/cli-bundle/chunks/upgrade-WH4BTQLX.js.map +0 -1
  619. package/dist/cli-bundle/chunks/validate-4NTXSB62.js +0 -36
  620. package/dist/cli-bundle/chunks/validate-4NTXSB62.js.map +0 -1
  621. package/dist/cli-bundle/chunks/validate-MUFXQZMI.js +0 -32
  622. package/dist/cli-bundle/chunks/validate-MUFXQZMI.js.map +0 -7
  623. /package/dist/cli-bundle/chunks/{activity-WJCGCYPU.js.map → append-CDPAYYSB.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{activity-Z6QUAUSG.js.map → append-RSPHC423.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{chunk-24YG75HI.js.map → chunk-3FUXM574.js.map} +0 -0
  626. /package/dist/cli-bundle/chunks/{chunk-IWVU4C2F.js.map → chunk-3SHDAKMF.js.map} +0 -0
  627. /package/dist/cli-bundle/chunks/{chunk-MUH7A3FD.js.map → chunk-3V5C7PUH.js.map} +0 -0
  628. /package/dist/cli-bundle/chunks/{chunk-EGY6JBQ3.js.map → chunk-4I7KS5ES.js.map} +0 -0
  629. /package/dist/cli-bundle/chunks/{chunk-GJ7QC5DJ.js.map → chunk-5STY7NVM.js.map} +0 -0
  630. /package/dist/cli-bundle/chunks/{chunk-JJP45OEI.js.map → chunk-5VAZHYVQ.js.map} +0 -0
  631. /package/dist/cli-bundle/chunks/{chunk-22KBU3MW.js.map → chunk-6RR4XM5H.js.map} +0 -0
  632. /package/dist/cli-bundle/chunks/{chunk-KUOOJR35.js.map → chunk-7QKSLAHB.js.map} +0 -0
  633. /package/dist/cli-bundle/chunks/{chunk-NGXQ3PFT.js.map → chunk-7UCBLJDF.js.map} +0 -0
  634. /package/dist/cli-bundle/chunks/{chunk-7DT4WSH2.js.map → chunk-BFNFTHWQ.js.map} +0 -0
  635. /package/dist/cli-bundle/chunks/{chunk-Y46GD4IX.js.map → chunk-C3YU3TXX.js.map} +0 -0
  636. /package/dist/cli-bundle/chunks/{chunk-AZYGZGGI.js.map → chunk-CGDUIPJL.js.map} +0 -0
  637. /package/dist/cli-bundle/chunks/{chunk-XG625QP4.js.map → chunk-EP2CKDS7.js.map} +0 -0
  638. /package/dist/cli-bundle/chunks/{chunk-MVYWGY2A.js.map → chunk-J6AD3GWC.js.map} +0 -0
  639. /package/dist/cli-bundle/chunks/{chunk-R5BMJX33.js.map → chunk-KFL3XHMA.js.map} +0 -0
  640. /package/dist/cli-bundle/chunks/{chunk-MWMVPCIE.js.map → chunk-PCBZ2VJD.js.map} +0 -0
  641. /package/dist/cli-bundle/chunks/{chunk-B6DUFX6H.js.map → chunk-Q3CFSOQZ.js.map} +0 -0
  642. /package/dist/cli-bundle/chunks/{chunk-KGFUY7WN.js.map → chunk-TU5P744I.js.map} +0 -0
  643. /package/dist/cli-bundle/chunks/{chunk-JDDLOQAE.js.map → chunk-UEATYUZW.js.map} +0 -0
  644. /package/dist/cli-bundle/chunks/{chunk-JVH7QBVV.js.map → chunk-UFNFHCAC.js.map} +0 -0
  645. /package/dist/cli-bundle/chunks/{chunk-AGHMOTGM.js.map → chunk-Z2JQH2MG.js.map} +0 -0
  646. /package/dist/cli-bundle/chunks/{chunk-Y4M7CPQP.js.map → chunk-ZMOPZFVT.js.map} +0 -0
  647. /package/dist/cli-bundle/chunks/{aggregate-VQ2DHU3S.js.map → close-E3RLZSP2.js.map} +0 -0
  648. /package/dist/cli-bundle/chunks/{aggregate-BDM6EIAR.js.map → close-K6BFI3OX.js.map} +0 -0
  649. /package/dist/cli-bundle/chunks/{append-BGML6VLD.js.map → close-many-6NBL3PM4.js.map} +0 -0
  650. /package/dist/cli-bundle/chunks/{append-RKJYPU74.js.map → close-many-X4YKS3RO.js.map} +0 -0
  651. /package/dist/cli-bundle/chunks/{claim-XP5AWZ5H.js.map → comments-PLFK5ZKK.js.map} +0 -0
  652. /package/dist/cli-bundle/chunks/{claim-RFS7BROJ.js.map → comments-ZNOD5PTV.js.map} +0 -0
  653. /package/dist/cli-bundle/chunks/{close-GEANHQ2J.js.map → copy-F7BUFY4J.js.map} +0 -0
  654. /package/dist/cli-bundle/chunks/{close-2SSSHHUZ.js.map → copy-VH3L4MN2.js.map} +0 -0
  655. /package/dist/cli-bundle/chunks/{close-many-ZFDIG6M7.js.map → create-AMBMYP6F.js.map} +0 -0
  656. /package/dist/cli-bundle/chunks/{close-many-CMZW7ITN.js.map → create-TRIBYORN.js.map} +0 -0
  657. /package/dist/cli-bundle/chunks/{comments-XUBPXDYX.js.map → delete-6KQHZYIP.js.map} +0 -0
  658. /package/dist/cli-bundle/chunks/{comments-MFSYVNNU.js.map → delete-ZNXUNCZR.js.map} +0 -0
  659. /package/dist/cli-bundle/chunks/{config-D7XQMONX.js.map → deps-CVDY7FFK.js.map} +0 -0
  660. /package/dist/cli-bundle/chunks/{config-T4FHBSYN.js.map → deps-SZXQHV73.js.map} +0 -0
  661. /package/dist/cli-bundle/chunks/{context-DIU275XI.js.map → docs-DR74ITCD.js.map} +0 -0
  662. /package/dist/cli-bundle/chunks/{context-JCOYB4LZ.js.map → docs-WCVYY6I7.js.map} +0 -0
  663. /package/dist/cli-bundle/chunks/{contracts-BVO7CSLK.js.map → files-H5YCA74Z.js.map} +0 -0
  664. /package/dist/cli-bundle/chunks/{contracts-NYPEW2G4.js.map → files-QEFQ2M3H.js.map} +0 -0
  665. /package/dist/cli-bundle/chunks/{copy-32ROBIDL.js.map → focus-55TRYSNA.js.map} +0 -0
  666. /package/dist/cli-bundle/chunks/{copy-NAGLGMHZ.js.map → focus-N2QGNS5D.js.map} +0 -0
  667. /package/dist/cli-bundle/chunks/{create-4V7SWNBB.js.map → history-compact-GWQ4UOEI.js.map} +0 -0
  668. /package/dist/cli-bundle/chunks/{create-E77SDCUP.js.map → history-compact-JJZ4EFL3.js.map} +0 -0
  669. /package/dist/cli-bundle/chunks/{delete-NQI5OSKN.js.map → history-redact-4GJOLXCM.js.map} +0 -0
  670. /package/dist/cli-bundle/chunks/{delete-RA5KTCLB.js.map → history-redact-TPPUT3A5.js.map} +0 -0
  671. /package/dist/cli-bundle/chunks/{deps-T7SCWXEX.js.map → history-repair-HVCVCGUF.js.map} +0 -0
  672. /package/dist/cli-bundle/chunks/{deps-32SU7HO5.js.map → history-repair-J7PIZ6ZP.js.map} +0 -0
  673. /package/dist/cli-bundle/chunks/{docs-RRUPT7O2.js.map → learnings-KB6BT4NR.js.map} +0 -0
  674. /package/dist/cli-bundle/chunks/{docs-WL2IWGWV.js.map → learnings-YYY3U2Y7.js.map} +0 -0
  675. /package/dist/cli-bundle/chunks/{eval-NF2J5SHR.js.map → notes-BGG7VL72.js.map} +0 -0
  676. /package/dist/cli-bundle/chunks/{eval-SKDT3MZU.js.map → notes-ZTHXVOKM.js.map} +0 -0
  677. /package/dist/cli-bundle/chunks/{extension-LAXKCAYE.js.map → plan-CJPKFRBK.js.map} +0 -0
  678. /package/dist/cli-bundle/chunks/{extension-ZISPBRBC.js.map → plan-MK2QY3GA.js.map} +0 -0
  679. /package/dist/cli-bundle/chunks/{files-PYKR2UUG.js.map → profile-AQNHXOYA.js.map} +0 -0
  680. /package/dist/cli-bundle/chunks/{files-EWRQHGIS.js.map → profile-HTBFINKQ.js.map} +0 -0
  681. /package/dist/cli-bundle/chunks/{focus-4T7TM4MT.js.map → restore-BTBEZ5CK.js.map} +0 -0
  682. /package/dist/cli-bundle/chunks/{focus-L3YUASOD.js.map → restore-EX4UUZL6.js.map} +0 -0
  683. /package/dist/cli-bundle/chunks/{gc-2PCTYYRI.js.map → schema-DGSTYYQB.js.map} +0 -0
  684. /package/dist/cli-bundle/chunks/{gc-2DNMPXMC.js.map → schema-HAIBEE24.js.map} +0 -0
  685. /package/dist/cli-bundle/chunks/{get-7DMITJ3G.js.map → update-MP4XLU56.js.map} +0 -0
  686. /package/dist/cli-bundle/chunks/{get-VKQXCXLL.js.map → update-SDIRJGSY.js.map} +0 -0
  687. /package/dist/cli-bundle/chunks/{health-CVSTAR2F.js.map → update-many-34AIU6W7.js.map} +0 -0
  688. /package/dist/cli-bundle/chunks/{health-TV3GKTFN.js.map → update-many-JUPCNOKV.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../../core/extensions/index.ts", "../../../../../../../../core/shared/errors.ts", "../../../../../../../../core/shared/serialization.ts", "../../../../../../../../core/store/settings-validator.ts", "../../../../../../../../core/validate/estimate-defaults.ts", "../../../../../../../../core/store/settings-read-cache.ts", "../../../../../../../../core/store/settings.ts", "../../../../../../../../core/shared/time.ts", "../../../../../../../../core/extensions/item-fields.ts", "../../../../../../../../core/schema/runtime-field-values.ts", "../../../../../../../../core/item/item-format-version.ts", "../../../../../../../../core/item/status.ts", "../../../../../../../../core/item/item-format.ts", "../../../../../../../../core/item/toon-decode.ts", "../../../../../../../../core/shared/conflict-markers.ts", "../../../../../../../../core/item/item-record.ts", "../../../../../../../../core/history/history.ts", "../../../../../../../../core/history/history-stream-policy.ts", "../../../../../../../../core/lock/lock.ts", "../../../../../../../../core/item/id.ts", "../../../../../../../../core/store/item-store.ts", "../../../../../../../../core/store/front-matter-cache.ts"],
4
+ "sourcesContent": ["/**\n * @module core/extensions/index\n *\n * Implements extension runtime contracts and governance for Index.\n */\nimport {\n runCommandHandler,\n runCommandOverride,\n runOnIndexHooks,\n runParserOverride,\n runPreflightOverride,\n runOnReadHooks,\n runRendererOverride,\n runServiceOverride,\n runServiceOverrideSync,\n runOnWriteHooks,\n type CommandHandlerContext,\n type CommandHandlerResult,\n type CommandOverrideContext,\n type CommandOverrideResult,\n type ExtensionCommandRegistry,\n type ExtensionHookRegistry,\n type ExtensionParserRegistry,\n type ExtensionPreflightRegistry,\n type ExtensionRegistrationRegistry,\n type ExtensionRendererRegistry,\n type ExtensionServiceName,\n type ExtensionServiceRegistry,\n type AfterCommandAffectedItem,\n type OnIndexHookContext,\n type OnReadHookContext,\n type OnWriteHookContext,\n type OutputRendererFormat,\n type ParserOverrideContext,\n type ParserOverrideResult,\n type PreflightOverrideContext,\n type PreflightOverrideResult,\n type RendererOverrideResult,\n type ServiceOverrideResult,\n} from \"./loader.js\";\nimport type { ItemFrontMatter } from \"../../types/index.js\";\n\nlet activeExtensionHooks: ExtensionHookRegistry | null = null;\nlet activeExtensionCommands: ExtensionCommandRegistry | null = null;\nlet activeExtensionParsers: ExtensionParserRegistry | null = null;\nlet activeExtensionPreflight: ExtensionPreflightRegistry | null = null;\nlet activeExtensionServices: ExtensionServiceRegistry | null = null;\nlet activeExtensionRenderers: ExtensionRendererRegistry | null = null;\nlet activeExtensionRegistrations: ExtensionRegistrationRegistry | null = null;\nlet activeCommandContext: Omit<CommandOverrideContext, \"result\"> | null = null;\nlet activeCommandResult: unknown = undefined;\nlet activeAfterCommandAffectedItems: AfterCommandAffectedItem[] = [];\nconst AFTER_COMMAND_SNAPSHOT_OMITTED_FIELDS = new Set([\n \"body\",\n \"comments\",\n \"dependencies\",\n \"docs\",\n \"events\",\n \"files\",\n \"learnings\",\n \"notes\",\n \"reminders\",\n \"test_runs\",\n \"tests\",\n]);\n\n/**\n * Implements set active extension hooks for the public runtime surface of this module.\n */\nexport function setActiveExtensionHooks(hooks: ExtensionHookRegistry | null): void {\n activeExtensionHooks = hooks;\n}\n\n/**\n * Implements set active extension commands for the public runtime surface of this module.\n */\nexport function setActiveExtensionCommands(commands: ExtensionCommandRegistry | null): void {\n activeExtensionCommands = commands;\n}\n\n/**\n * Implements set active extension parsers for the public runtime surface of this module.\n */\nexport function setActiveExtensionParsers(parsers: ExtensionParserRegistry | null): void {\n activeExtensionParsers = parsers;\n}\n\n/**\n * Implements set active extension preflight for the public runtime surface of this module.\n */\nexport function setActiveExtensionPreflight(preflight: ExtensionPreflightRegistry | null): void {\n activeExtensionPreflight = preflight;\n}\n\n/**\n * Implements set active extension services for the public runtime surface of this module.\n */\nexport function setActiveExtensionServices(services: ExtensionServiceRegistry | null): void {\n activeExtensionServices = services;\n}\n\n/**\n * Implements set active extension renderers for the public runtime surface of this module.\n */\nexport function setActiveExtensionRenderers(renderers: ExtensionRendererRegistry | null): void {\n activeExtensionRenderers = renderers;\n}\n\n/**\n * Implements set active extension registrations for the public runtime surface of this module.\n */\nexport function setActiveExtensionRegistrations(registrations: ExtensionRegistrationRegistry | null): void {\n activeExtensionRegistrations = registrations;\n}\n\n/**\n * Implements get active extension registrations for the public runtime surface of this module.\n */\nexport function getActiveExtensionRegistrations(): ExtensionRegistrationRegistry | null {\n return activeExtensionRegistrations;\n}\n\n/**\n * Implements set active command context for the public runtime surface of this module.\n */\nexport function setActiveCommandContext(context: Omit<CommandOverrideContext, \"result\"> | null): void {\n activeCommandContext = context;\n}\n\n/**\n * Implements set active command result for the public runtime surface of this module.\n */\nexport function setActiveCommandResult(result: unknown): void {\n activeCommandResult = result;\n}\n\n/**\n * Implements get active command result for the public runtime surface of this module.\n */\nexport function getActiveCommandResult(): unknown {\n return activeCommandResult;\n}\n\n/**\n * Implements record after command affected item for the public runtime surface of this module.\n */\nexport function recordAfterCommandAffectedItem(item: AfterCommandAffectedItem): void {\n if (!item || (activeExtensionHooks?.afterCommand?.length ?? 0) === 0) {\n return;\n }\n activeAfterCommandAffectedItems.push(item);\n}\n\n/**\n * Implements project after command item snapshot for the public runtime surface of this module.\n */\nexport function projectAfterCommandItemSnapshot(\n metadata: ItemFrontMatter,\n changedFields: readonly string[],\n): Partial<ItemFrontMatter> {\n if (!metadata || !metadata.id) {\n return {};\n }\n const snapshot: Record<string, unknown> = {\n id: metadata.id,\n type: metadata.type,\n status: metadata.status,\n };\n if (!Array.isArray(changedFields)) {\n return snapshot as Partial<ItemFrontMatter>;\n }\n const source = metadata as unknown as Record<string, unknown>;\n for (const field of changedFields) {\n if (typeof field !== \"string\") {\n continue;\n }\n const actualField = field.startsWith(\"unset:\") ? field.slice(\"unset:\".length) : field;\n if (\n actualField === \"id\" ||\n actualField === \"type\" ||\n actualField === \"status\" ||\n AFTER_COMMAND_SNAPSHOT_OMITTED_FIELDS.has(actualField)\n ) {\n continue;\n }\n if (Object.hasOwn(source, actualField) && source[actualField] !== undefined) {\n snapshot[actualField] = source[actualField];\n }\n }\n return snapshot as Partial<ItemFrontMatter>;\n}\n\n/**\n * Implements consume after command affected items for the public runtime surface of this module.\n */\nexport function consumeAfterCommandAffectedItems(): AfterCommandAffectedItem[] | undefined {\n if (activeAfterCommandAffectedItems.length === 0) {\n return undefined;\n }\n const affected = activeAfterCommandAffectedItems;\n activeAfterCommandAffectedItems = [];\n return affected;\n}\n\n/**\n * Implements clear active extension hooks for the public runtime surface of this module.\n */\nexport function clearActiveExtensionHooks(): void {\n activeExtensionHooks = null;\n activeExtensionCommands = null;\n activeExtensionParsers = null;\n activeExtensionPreflight = null;\n activeExtensionServices = null;\n activeExtensionRenderers = null;\n activeExtensionRegistrations = null;\n activeCommandContext = null;\n activeCommandResult = undefined;\n activeAfterCommandAffectedItems = [];\n}\n\n/**\n * Implements run active on write hooks for the public runtime surface of this module.\n */\nexport async function runActiveOnWriteHooks(context: OnWriteHookContext): Promise<string[]> {\n if (!activeExtensionHooks) {\n return [];\n }\n return runOnWriteHooks(activeExtensionHooks, context);\n}\n\n/**\n * Implements run active on read hooks for the public runtime surface of this module.\n */\nexport async function runActiveOnReadHooks(context: OnReadHookContext): Promise<string[]> {\n if (!activeExtensionHooks) {\n return [];\n }\n return runOnReadHooks(activeExtensionHooks, context);\n}\n\n/**\n * Synchronous fast-path predicate: true only when at least one onRead hook is\n * registered. Bulk readers (e.g. the metadata cache scanning hundreds of files)\n * use this to skip per-file `await runActiveOnReadHooks(...)` calls entirely when\n * no extension observes reads, avoiding hundreds of needless microtasks.\n */\nexport function hasActiveOnReadHooks(): boolean {\n return (activeExtensionHooks?.onRead?.length ?? 0) > 0;\n}\n\n/**\n * Implements run active on index hooks for the public runtime surface of this module.\n */\nexport async function runActiveOnIndexHooks(context: OnIndexHookContext): Promise<string[]> {\n if (!activeExtensionHooks) {\n return [];\n }\n return runOnIndexHooks(activeExtensionHooks, context);\n}\n\n/**\n * Implements run active command override for the public runtime surface of this module.\n */\nexport function runActiveCommandOverride(result: unknown): CommandOverrideResult {\n if (!activeExtensionCommands || !activeCommandContext) {\n return {\n overridden: false,\n result,\n warnings: [],\n };\n }\n return runCommandOverride(activeExtensionCommands, {\n command: activeCommandContext.command,\n args: [...activeCommandContext.args],\n options: activeCommandContext.options ? { ...activeCommandContext.options } : {},\n global: activeCommandContext.global ? { ...activeCommandContext.global } : undefined,\n pm_root: activeCommandContext.pm_root,\n result,\n });\n}\n\n/**\n * Implements run active command handler for the public runtime surface of this module.\n */\nexport async function runActiveCommandHandler(context: CommandHandlerContext): Promise<CommandHandlerResult> {\n if (!activeExtensionCommands) {\n return {\n handled: false,\n result: null,\n warnings: [],\n };\n }\n return runCommandHandler(activeExtensionCommands, context);\n}\n\n/**\n * Implements run active parser override for the public runtime surface of this module.\n */\nexport async function runActiveParserOverride(context: ParserOverrideContext): Promise<ParserOverrideResult> {\n if (!activeExtensionParsers) {\n return {\n overridden: false,\n context: {\n command: context.command,\n args: [...context.args],\n options: { ...context.options },\n global: { ...context.global },\n pm_root: context.pm_root,\n },\n warnings: [],\n };\n }\n return runParserOverride(activeExtensionParsers, context);\n}\n\n/**\n * Implements run active preflight override for the public runtime surface of this module.\n */\nexport async function runActivePreflightOverride(context: PreflightOverrideContext): Promise<PreflightOverrideResult> {\n if (!activeExtensionPreflight) {\n return {\n overridden: false,\n context: {\n command: context.command,\n args: [...context.args],\n options: { ...context.options },\n global: { ...context.global },\n pm_root: context.pm_root,\n },\n decision: { ...context.decision },\n warnings: [],\n };\n }\n return runPreflightOverride(activeExtensionPreflight, context);\n}\n\n/**\n * Implements run active renderer override for the public runtime surface of this module.\n */\nexport function runActiveRendererOverride(format: OutputRendererFormat, result: unknown): RendererOverrideResult {\n if (!activeExtensionRenderers) {\n return {\n overridden: false,\n rendered: null,\n warnings: [],\n };\n }\n return runRendererOverride(activeExtensionRenderers, {\n format,\n command: activeCommandContext?.command,\n args: activeCommandContext ? [...activeCommandContext.args] : [],\n options: activeCommandContext?.options ? { ...activeCommandContext.options } : {},\n global: activeCommandContext?.global ? { ...activeCommandContext.global } : undefined,\n pm_root: activeCommandContext?.pm_root,\n result,\n });\n}\n\nfunction buildServiceContext(service: ExtensionServiceName, payload: unknown) {\n return {\n service,\n command: activeCommandContext?.command,\n args: activeCommandContext ? [...activeCommandContext.args] : [],\n options: activeCommandContext?.options ? { ...activeCommandContext.options } : {},\n global: activeCommandContext?.global ? { ...activeCommandContext.global } : undefined,\n pm_root: activeCommandContext?.pm_root,\n payload,\n };\n}\n\n/**\n * Implements run active service override for the public runtime surface of this module.\n */\nexport async function runActiveServiceOverride(\n service: ExtensionServiceName,\n payload: unknown,\n): Promise<ServiceOverrideResult> {\n if (!activeExtensionServices) {\n return {\n handled: false,\n result: payload,\n warnings: [],\n };\n }\n return runServiceOverride(activeExtensionServices, buildServiceContext(service, payload));\n}\n\n/**\n * Implements run active service override sync for the public runtime surface of this module.\n */\nexport function runActiveServiceOverrideSync(service: ExtensionServiceName, payload: unknown): ServiceOverrideResult {\n if (!activeExtensionServices) {\n return {\n handled: false,\n result: payload,\n warnings: [],\n };\n }\n return runServiceOverrideSync(activeExtensionServices, buildServiceContext(service, payload));\n}\n\nexport * from \"./loader.js\";\nexport {\n EXTENSION_CAPABILITY_REGISTRATION_SURFACES,\n collectUsedExtensionCapabilities,\n reconcileExtensionCapabilityUsage,\n type CollectUsedExtensionCapabilitiesOptions,\n type ExtensionCapabilityUsageReconciliation,\n} from \"./capability-usage.js\";\n", "/**\n * @module core/shared/errors\n *\n * Provides shared primitives and utilities for Errors.\n */\n/**\n * Carries structured recovery guidance attached to expected pm CLI errors.\n */\nexport interface PmCliErrorRecoveryPayload {\n recovery_mode?: \"compact\";\n attempted_command?: string;\n normalized_args?: string[];\n provided_fields?: string[];\n missing?: string[];\n missing_required_fields?: string[];\n suggested_flags?: string[];\n suggested_retry?: string;\n retry_after_ms?: number;\n fallback_candidates?: Array<{\n source: string;\n command: string;\n reason: string;\n }>;\n next_best_command?: string;\n}\n\n/**\n * Documents the pm cli error context payload exchanged by command, SDK, and package integrations.\n */\nexport interface PmCliErrorContext {\n code?: string;\n type?: string;\n required?: string;\n why?: string;\n examples?: string[];\n nextSteps?: string[];\n recovery?: PmCliErrorRecoveryPayload;\n}\n\n/**\n * Implements the exported pm cli error runtime abstraction for core/shared/errors.ts.\n */\nexport class PmCliError extends Error {\n public readonly exitCode: number;\n public readonly context: PmCliErrorContext;\n\n constructor(message: string, exitCode: number, context: PmCliErrorContext = {}) {\n super(message);\n this.name = \"PmCliError\";\n this.exitCode = exitCode;\n this.context = context;\n }\n}\n", "/**\n * @module core/shared/serialization\n *\n * Provides shared primitives and utilities for Serialization.\n */\nimport crypto from \"node:crypto\";\n\ntype JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\nfunction sortScalarValue(value: unknown): JsonValue | undefined {\n if (value === null) return null;\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n if (value === undefined) {\n return \"undefined\";\n }\n if (typeof value === \"symbol\") {\n return value.toString();\n }\n if (typeof value === \"function\") {\n return `[function:${value.name || \"anonymous\"}]`;\n }\n return undefined;\n}\n\nfunction sortPlainObjectKeys(value: Record<string, unknown>): Record<string, JsonValue> {\n // Use locale-independent Unicode code-unit ordering so canonical hashes stay reproducible.\n const sortedKeys = Object.keys(value).sort();\n const result: Record<string, JsonValue> = {};\n for (const key of sortedKeys) {\n const nested = value[key];\n if (nested === undefined) {\n continue;\n }\n result[key] = sortObjectKeys(nested);\n }\n return result;\n}\n\nfunction sortObjectKeys(value: unknown): JsonValue {\n const scalarValue = sortScalarValue(value);\n if (scalarValue !== undefined) {\n return scalarValue;\n }\n if (Array.isArray(value)) {\n return value.map((entry) => sortObjectKeys(entry));\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n const maybeJson = value as { toJSON?: () => unknown };\n if (typeof maybeJson.toJSON === \"function\") {\n const normalized = maybeJson.toJSON();\n if (normalized !== value) {\n return sortObjectKeys(normalized);\n }\n }\n return sortPlainObjectKeys(value as Record<string, unknown>);\n}\n\n/**\n * Implements stable stringify for the public runtime surface of this module.\n */\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(sortObjectKeys(value));\n}\n\nfunction hasUnmatchedEquivalent<T>(\n leftValue: T,\n rightValues: readonly T[],\n matchedIndexes: Set<number>,\n equals: (leftEntry: T, rightEntry: T) => boolean,\n): boolean {\n for (let index = 0; index < rightValues.length; index += 1) {\n if (matchedIndexes.has(index)) {\n continue;\n }\n if (equals(leftValue, rightValues[index] as T)) {\n matchedIndexes.add(index);\n return true;\n }\n }\n return false;\n}\n\nfunction compareRegExpValues(left: unknown, right: unknown): boolean | undefined {\n if (!(left instanceof RegExp || right instanceof RegExp)) {\n return undefined;\n }\n return left instanceof RegExp && right instanceof RegExp && left.toString() === right.toString();\n}\n\nfunction compareDateValues(left: unknown, right: unknown): boolean | undefined {\n if (!(left instanceof Date || right instanceof Date)) {\n return undefined;\n }\n return left instanceof Date && right instanceof Date && left.getTime() === right.getTime();\n}\n\nfunction compareSetValues(left: unknown, right: unknown): boolean | undefined {\n if (!(left instanceof Set || right instanceof Set)) {\n return undefined;\n }\n if (!(left instanceof Set && right instanceof Set) || left.size !== right.size) {\n return false;\n }\n const rightValues = [...right];\n const matched = new Set<number>();\n for (const leftValue of left) {\n if (!hasUnmatchedEquivalent(leftValue, rightValues, matched, stableValueEquals)) {\n return false;\n }\n }\n return true;\n}\n\nfunction compareMapValues(left: unknown, right: unknown): boolean | undefined {\n if (!(left instanceof Map || right instanceof Map)) {\n return undefined;\n }\n if (!(left instanceof Map && right instanceof Map) || left.size !== right.size) {\n return false;\n }\n const rightEntries = [...right.entries()];\n const matched = new Set<number>();\n for (const [leftKey, leftValue] of left.entries()) {\n const leftEntry: [unknown, unknown] = [leftKey, leftValue];\n if (\n !hasUnmatchedEquivalent(leftEntry, rightEntries, matched, ([candidateKey, candidateValue], [rightKey, rightValue]) =>\n stableValueEquals(candidateKey, rightKey) && stableValueEquals(candidateValue, rightValue),\n )\n ) {\n return false;\n }\n }\n return true;\n}\n\nfunction compareArrayValues(left: unknown, right: unknown): boolean | undefined {\n if (!(Array.isArray(left) || Array.isArray(right))) {\n return undefined;\n }\n if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) {\n return false;\n }\n return left.every((value, index) => stableValueEquals(value, right[index]));\n}\n\nfunction comparePlainObjectValues(left: object, right: object): boolean {\n const leftKeys = Object.keys(left).sort((a, b) => a.localeCompare(b));\n const rightKeys = Object.keys(right).sort((a, b) => a.localeCompare(b));\n if (leftKeys.length !== rightKeys.length) {\n return false;\n }\n for (let index = 0; index < leftKeys.length; index += 1) {\n const leftKey = leftKeys[index]!;\n if (leftKey !== rightKeys[index]) {\n return false;\n }\n if (!stableValueEquals((left as Record<string, unknown>)[leftKey], (right as Record<string, unknown>)[leftKey])) {\n return false;\n }\n }\n return true;\n}\n\nconst SPECIALIZED_STABLE_VALUE_COMPARISONS = [\n compareRegExpValues,\n compareDateValues,\n compareSetValues,\n compareMapValues,\n compareArrayValues,\n] as const;\n\n/**\n * Implements stable value equals for the public runtime surface of this module.\n */\nexport function stableValueEquals(left: unknown, right: unknown): boolean {\n if (Object.is(left, right)) {\n return true;\n }\n if (left === null || right === null || typeof left !== \"object\" || typeof right !== \"object\") {\n return false;\n }\n for (const compare of SPECIALIZED_STABLE_VALUE_COMPARISONS) {\n const result = compare(left, right);\n if (result !== undefined) {\n return result;\n }\n }\n return comparePlainObjectValues(left, right);\n}\n\n/**\n * Implements sha256 hex for the public runtime surface of this module.\n */\nexport function sha256Hex(value: string): string {\n return crypto.createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n}\n\n/**\n * Implements order object for the public runtime surface of this module.\n */\nexport function orderObject<T extends Record<string, unknown>>(\n value: T,\n keyOrder: ReadonlyArray<string>,\n): Record<string, unknown> {\n const ordered: Record<string, unknown> = {};\n\n for (const key of keyOrder) {\n const entry = value[key];\n if (entry !== undefined) {\n ordered[key] = entry;\n }\n }\n\n const unknownKeys = Object.keys(value)\n .filter((key) => !keyOrder.includes(key))\n .sort((a, b) => a.localeCompare(b));\n\n for (const key of unknownKeys) {\n const entry = value[key];\n if (entry !== undefined) {\n ordered[key] = entry;\n }\n }\n\n return ordered;\n}\n", "/**\n * Dependency-free settings validator.\n *\n * Mirrors the previous `zod` schema for `settings.json` exactly (type checks,\n * required-vs-optional fields, integer/positive constraints, literal unions, and\n * unknown-key stripping with all-or-nothing failure semantics) without paying\n * the ~85ms cost of importing `zod` on every command's hot read path.\n *\n * The validator intentionally reproduces the zod schema's shape — including\n * fields that `PmSettings` carries but the schema does not (e.g. `search.tuning`)\n * are stripped here just as zod stripped them — so settings behavior is\n * byte-identical to the previous implementation.\n */\nimport {\n GOVERNANCE_PRESET_VALUES,\n RUNTIME_FIELD_COMMAND_VALUES,\n RUNTIME_FIELD_TYPE_VALUES,\n RUNTIME_STATUS_ROLE_VALUES,\n RUNTIME_UNKNOWN_FIELD_POLICY_VALUES,\n} from \"../../types.js\";\nimport type {\n AgentGuidanceSettings,\n ExtensionPolicySettings,\n GovernanceSettings,\n ItemTypeDefinition,\n RuntimeSchemaSettings,\n} from \"../../types.js\";\nimport type { PmMaxVersionExceededModeSetting } from \"../extensions/extension-types.js\";\n\n/** Validated, unknown-key-stripped settings input (pre-merge), matching the legacy zod inference. */\nexport interface ParsedSettings {\n version: number;\n id_prefix: string;\n author_default: string;\n item_format?: \"toon\" | \"json_markdown\";\n locks: { ttl_seconds: number; wait_ms?: number };\n checkpoints?: { retention_days?: number };\n output: { default_format: \"toon\" | \"json\" };\n history?: {\n missing_stream: \"auto_create\" | \"strict_error\";\n compact_policy?: {\n enabled?: boolean;\n max_entries?: number;\n trigger?: \"health_warn\" | \"auto\";\n };\n };\n validation?: {\n sprint_release_format: \"warn\" | \"strict_error\";\n parent_reference?: \"warn\" | \"strict_error\";\n metadata_profile?: \"core\" | \"strict\" | \"custom\";\n metadata_required_fields?: string[];\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 estimate_defaults_by_type?: Record<string, number>;\n };\n governance?: Partial<GovernanceSettings>;\n workflow?: { definition_of_done: string[] };\n testing?: { record_results_to_items: boolean };\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?: Partial<AgentGuidanceSettings>;\n item_types?: { definitions: ItemTypeDefinition[] };\n schema?: Partial<RuntimeSchemaSettings>;\n context?: {\n default_depth?: \"brief\" | \"standard\" | \"deep\";\n activity_limit?: number;\n stale_threshold_days?: number;\n sections?: {\n hierarchy?: boolean;\n activity?: boolean;\n progress?: boolean;\n blockers?: boolean;\n files?: boolean;\n workload?: boolean;\n staleness?: boolean;\n tests?: boolean;\n };\n };\n extensions: {\n enabled: string[];\n disabled: string[];\n policy?: Partial<ExtensionPolicySettings> & {\n pm_max_version_exceeded_mode?: PmMaxVersionExceededModeSetting;\n };\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 corpus_fields?: string[];\n mutation_refresh_policy?: \"cache_only\" | \"semantic_configured\" | \"semantic_auto\";\n query_expansion?: {\n enabled?: boolean;\n provider?: string;\n };\n rerank?: {\n enabled?: boolean;\n model?: string;\n top_k?: number;\n };\n bm25?: {\n k1?: number;\n b?: number;\n };\n };\n providers: {\n openai: { base_url: string; api_key: string; model: string };\n ollama: { base_url: string; model: string };\n };\n vector_store: {\n adapter?: string;\n collection_name?: string;\n qdrant: { url: string; api_key: string };\n lancedb: { path: string };\n };\n}\n\n/**\n * Restricts settings validation result values accepted by command, SDK, and storage contracts.\n */\nexport type SettingsValidationResult = { success: true; data: ParsedSettings } | { success: false };\n\ntype Outcome<T> = { ok: true; value: T } | { ok: false };\ntype Check<T> = (input: unknown) => Outcome<T>;\n\n// Generic over `never` so it is assignable to every `Outcome<T>`.\nconst FAIL: Outcome<never> = { ok: false };\n\nconst vString: Check<string> = (input) => (typeof input === \"string\" ? { ok: true, value: input } : FAIL);\nconst vBoolean: Check<boolean> = (input) => (typeof input === \"boolean\" ? { ok: true, value: input } : FAIL);\n\nfunction vNumber(options: { int?: boolean; positive?: boolean; min?: number } = {}): Check<number> {\n return (input) => {\n // `Number.isFinite` rejects non-numbers, NaN, and ±Infinity in one check.\n if (typeof input !== \"number\" || !Number.isFinite(input)) {\n return FAIL;\n }\n if (options.int && (!Number.isInteger(input) || !Number.isSafeInteger(input))) {\n return FAIL;\n }\n if (options.positive && input <= 0) {\n return FAIL;\n }\n if (typeof options.min === \"number\" && input < options.min) {\n return FAIL;\n }\n return { ok: true, value: input };\n };\n}\n\nfunction vLiteral<const T extends string>(...allowed: readonly T[]): Check<T> {\n return (input) =>\n typeof input === \"string\" && (allowed as readonly string[]).includes(input)\n ? { ok: true, value: input as T }\n : FAIL;\n}\n\nfunction vArray<T>(item: Check<T>): Check<T[]> {\n return (input) => {\n if (!Array.isArray(input)) {\n return FAIL;\n }\n const value: T[] = [];\n for (const element of input) {\n const result = item(element);\n if (!result.ok) {\n return FAIL;\n }\n value.push(result.value);\n }\n return { ok: true, value };\n };\n}\n\nfunction vOptional<T>(inner: Check<T>): Check<T | undefined> {\n return (input) => (input === undefined ? { ok: true, value: undefined } : inner(input));\n}\n\n/**\n * A plain object with arbitrary string keys whose values each pass `valueCheck`.\n * Rejects arrays and null. Used for free-form maps like\n * `validation.estimate_defaults_by_type` (item-type -> default minutes).\n */\nfunction vRecordOf<T>(valueCheck: Check<T>): Check<Record<string, T>> {\n return (input) => {\n if (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n return FAIL;\n }\n const value: Record<string, T> = {};\n for (const [key, raw] of Object.entries(input as Record<string, unknown>)) {\n const result = valueCheck(raw);\n if (!result.ok) {\n return FAIL;\n }\n value[key] = result.value;\n }\n return { ok: true, value };\n };\n}\n\nfunction vObject(shape: Record<string, Check<unknown>>): Check<Record<string, unknown>> {\n return (input) => {\n if (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n return FAIL;\n }\n const record = input as Record<string, unknown>;\n const value: Record<string, unknown> = {};\n for (const [key, check] of Object.entries(shape)) {\n const result = check(record[key]);\n if (!result.ok) {\n return FAIL;\n }\n // Mirror zod: absent optional keys are omitted; unknown keys are dropped.\n if (result.value !== undefined) {\n value[key] = result.value;\n }\n }\n return { ok: true, value };\n };\n}\n\nconst itemTypeOption = vObject({\n key: vString,\n values: vArray(vString),\n required: vOptional(vBoolean),\n aliases: vOptional(vArray(vString)),\n description: vOptional(vString),\n});\n\nconst itemTypeCommandOptionPolicy = vObject({\n command: vLiteral(\"create\", \"update\"),\n option: vString,\n required: vOptional(vBoolean),\n visible: vOptional(vBoolean),\n enabled: vOptional(vBoolean),\n});\n\nconst itemTypeDefinition = vObject({\n name: vString,\n description: vOptional(vString),\n // Per-type create-time default status (config-driven); preserved so inline\n // settings.item_types.definitions behave identically to schema/types.json.\n default_status: vOptional(vString),\n folder: vOptional(vString),\n aliases: vOptional(vArray(vString)),\n required_create_fields: vOptional(vArray(vString)),\n required_create_repeatables: vOptional(vArray(vString)),\n options: vOptional(vArray(itemTypeOption)),\n command_option_policies: vOptional(vArray(itemTypeCommandOptionPolicy)),\n});\n\nconst runtimeStatusDefinition = vObject({\n id: vString,\n aliases: vOptional(vArray(vString)),\n roles: vOptional(vArray(vLiteral(...RUNTIME_STATUS_ROLE_VALUES))),\n description: vOptional(vString),\n order: vOptional(vNumber()),\n});\n\nconst runtimeFieldDefinition = vObject({\n key: vString,\n metadata_key: vOptional(vString),\n front_matter_key: vOptional(vString),\n cli_flag: vOptional(vString),\n cli_aliases: vOptional(vArray(vString)),\n description: vOptional(vString),\n type: vOptional(vLiteral(...RUNTIME_FIELD_TYPE_VALUES)),\n commands: vOptional(vArray(vLiteral(...RUNTIME_FIELD_COMMAND_VALUES))),\n repeatable: vOptional(vBoolean),\n required: vOptional(vBoolean),\n required_on_create: vOptional(vBoolean),\n required_types: vOptional(vArray(vString)),\n allow_unset: vOptional(vBoolean),\n});\n\nconst statusTransitionPair: Check<[string, string]> = (input) => {\n if (!Array.isArray(input) || input.length !== 2) {\n return FAIL;\n }\n const [from, to] = input;\n if (typeof from !== \"string\" || typeof to !== \"string\") {\n return FAIL;\n }\n return { ok: true, value: [from, to] };\n};\n\nconst typeWorkflowDefinition = vObject({\n type: vString,\n allowed_transitions: vArray(statusTransitionPair),\n});\n\nconst runtimeSchemaSettings = vOptional(\n vObject({\n version: vOptional(vNumber({ int: true })),\n files: vOptional(\n vObject({\n types: vOptional(vString),\n statuses: vOptional(vString),\n fields: vOptional(vString),\n workflows: vOptional(vString),\n }),\n ),\n statuses: vOptional(vArray(runtimeStatusDefinition)),\n fields: vOptional(vArray(runtimeFieldDefinition)),\n workflow: vOptional(\n vObject({\n draft_status: vOptional(vString),\n open_status: vOptional(vString),\n in_progress_status: vOptional(vString),\n blocked_status: vOptional(vString),\n close_status: vOptional(vString),\n canceled_status: vOptional(vString),\n }),\n ),\n type_workflows: vOptional(vArray(typeWorkflowDefinition)),\n unknown_field_policy: vOptional(vLiteral(...RUNTIME_UNKNOWN_FIELD_POLICY_VALUES)),\n }),\n);\n\nconst governanceSettings = vOptional(\n vObject({\n preset: vOptional(vLiteral(...GOVERNANCE_PRESET_VALUES)),\n ownership_enforcement: vOptional(vLiteral(\"none\", \"warn\", \"strict\")),\n create_mode_default: vOptional(vLiteral(\"progressive\", \"strict\")),\n close_validation_default: vOptional(vLiteral(\"off\", \"warn\", \"strict\")),\n require_close_reason: vOptional(vBoolean),\n parent_reference: vOptional(vLiteral(\"warn\", \"strict_error\")),\n metadata_profile: vOptional(vLiteral(\"core\", \"strict\", \"custom\")),\n force_required_for_stale_lock: vOptional(vBoolean),\n create_default_type: vOptional(vString),\n workflow_enforcement: vOptional(vLiteral(\"off\", \"warn\", \"strict\")),\n }),\n);\n\nconst extensionPolicyOverride = vObject({\n name: vString,\n disabled: vOptional(vBoolean),\n require_trusted: vOptional(vBoolean),\n require_provenance: vOptional(vBoolean),\n sandbox_profile: vOptional(vLiteral(\"none\", \"restricted\", \"strict\")),\n allowed_capabilities: vOptional(vArray(vString)),\n blocked_capabilities: vOptional(vArray(vString)),\n allowed_surfaces: vOptional(vArray(vString)),\n blocked_surfaces: vOptional(vArray(vString)),\n allowed_commands: vOptional(vArray(vString)),\n blocked_commands: vOptional(vArray(vString)),\n allowed_actions: vOptional(vArray(vString)),\n blocked_actions: vOptional(vArray(vString)),\n allowed_services: vOptional(vArray(vString)),\n blocked_services: vOptional(vArray(vString)),\n});\n\n// `pm_max_version_exceeded_mode` accepts either a single mode literal or a\n// per-layer override object (pm-k5e8); any other shape fails validation.\nconst pmMaxVersionExceededModeLiteral = vLiteral(\"block\", \"warn\");\nconst pmMaxVersionExceededMode: Check<unknown> = (input) =>\n typeof input === \"string\"\n ? pmMaxVersionExceededModeLiteral(input)\n : vObject({\n global: vOptional(pmMaxVersionExceededModeLiteral),\n project: vOptional(pmMaxVersionExceededModeLiteral),\n })(input);\n\nconst extensionPolicy = vOptional(\n vObject({\n mode: vOptional(vLiteral(\"off\", \"warn\", \"enforce\")),\n trust_mode: vOptional(vLiteral(\"off\", \"warn\", \"enforce\")),\n pm_max_version_exceeded_mode: vOptional(pmMaxVersionExceededMode),\n require_provenance: vOptional(vBoolean),\n trusted_extensions: vOptional(vArray(vString)),\n default_sandbox_profile: vOptional(vLiteral(\"none\", \"restricted\", \"strict\")),\n allowed_extensions: vOptional(vArray(vString)),\n blocked_extensions: vOptional(vArray(vString)),\n allowed_capabilities: vOptional(vArray(vString)),\n blocked_capabilities: vOptional(vArray(vString)),\n allowed_surfaces: vOptional(vArray(vString)),\n blocked_surfaces: vOptional(vArray(vString)),\n allowed_commands: vOptional(vArray(vString)),\n blocked_commands: vOptional(vArray(vString)),\n allowed_actions: vOptional(vArray(vString)),\n blocked_actions: vOptional(vArray(vString)),\n allowed_services: vOptional(vArray(vString)),\n blocked_services: vOptional(vArray(vString)),\n extension_overrides: vOptional(vArray(extensionPolicyOverride)),\n }),\n);\n\nconst settingsCheck = vObject({\n version: vNumber({ int: true }),\n id_prefix: vString,\n author_default: vString,\n item_format: vOptional(vLiteral(\"toon\", \"json_markdown\")),\n locks: vObject({ ttl_seconds: vNumber({ int: true }), wait_ms: vOptional(vNumber({ int: true, min: 0 })) }),\n checkpoints: vOptional(vObject({ retention_days: vOptional(vNumber({ int: true, positive: true })) })),\n output: vObject({ default_format: vLiteral(\"toon\", \"json\") }),\n history: vOptional(\n vObject({\n missing_stream: vLiteral(\"auto_create\", \"strict_error\"),\n compact_policy: vOptional(\n vObject({\n enabled: vOptional(vBoolean),\n max_entries: vOptional(vNumber({ int: true, positive: true })),\n trigger: vOptional(vLiteral(\"health_warn\", \"auto\")),\n }),\n ),\n }),\n ),\n validation: vOptional(\n vObject({\n sprint_release_format: vLiteral(\"warn\", \"strict_error\"),\n parent_reference: vOptional(vLiteral(\"warn\", \"strict_error\")),\n metadata_profile: vOptional(vLiteral(\"core\", \"strict\", \"custom\")),\n metadata_required_fields: vOptional(vArray(vString)),\n lifecycle_stale_blocker_reason_patterns: vOptional(vArray(vString)),\n lifecycle_closure_like_blocked_reason_patterns: vOptional(vArray(vString)),\n lifecycle_closure_like_resolution_patterns: vOptional(vArray(vString)),\n lifecycle_closure_like_actual_result_patterns: vOptional(vArray(vString)),\n estimate_defaults_by_type: vOptional(vRecordOf(vNumber({ int: true, positive: true }))),\n }),\n ),\n governance: governanceSettings,\n workflow: vOptional(vObject({ definition_of_done: vArray(vString) })),\n testing: vOptional(vObject({ record_results_to_items: vBoolean })),\n telemetry: vOptional(\n vObject({\n enabled: vBoolean,\n first_run_prompt_completed: vOptional(vBoolean),\n capture_level: vOptional(vLiteral(\"minimal\", \"redacted\", \"max\")),\n endpoint: vOptional(vString),\n installation_id: vOptional(vString),\n retention_days: vOptional(vNumber({ int: true, positive: true })),\n }),\n ),\n agent_guidance: vOptional(\n vObject({\n prompt_completed: vOptional(vBoolean),\n declined: vOptional(vBoolean),\n declined_at: vOptional(vString),\n template_version: vOptional(vNumber({ int: true, positive: true })),\n last_checked_files: vOptional(vArray(vString)),\n }),\n ),\n item_types: vOptional(vObject({ definitions: vArray(itemTypeDefinition) })),\n schema: runtimeSchemaSettings,\n context: vOptional(\n vObject({\n default_depth: vOptional(vLiteral(\"brief\", \"standard\", \"deep\")),\n activity_limit: vOptional(vNumber({ int: true, positive: true })),\n stale_threshold_days: vOptional(vNumber({ int: true, positive: true })),\n sections: vOptional(\n vObject({\n hierarchy: vOptional(vBoolean),\n activity: vOptional(vBoolean),\n progress: vOptional(vBoolean),\n recently_created: vOptional(vBoolean),\n unparented: vOptional(vBoolean),\n blockers: vOptional(vBoolean),\n files: vOptional(vBoolean),\n workload: vOptional(vBoolean),\n staleness: vOptional(vBoolean),\n tests: vOptional(vBoolean),\n }),\n ),\n }),\n ),\n extensions: vObject({\n enabled: vArray(vString),\n disabled: vArray(vString),\n policy: extensionPolicy,\n }),\n search: vObject({\n score_threshold: vNumber(),\n hybrid_semantic_weight: vOptional(vNumber()),\n max_results: vNumber({ int: true }),\n embedding_model: vString,\n embedding_corpus_max_characters: vOptional(vNumber()),\n embedding_batch_size: vNumber({ int: true }),\n embedding_timeout_ms: vOptional(vNumber({ int: true })),\n scanner_max_batch_retries: vNumber({ int: true }),\n provider: vOptional(vString),\n corpus_fields: vOptional(vArray(vString)),\n mutation_refresh_policy: vOptional(vLiteral(\"cache_only\", \"semantic_configured\", \"semantic_auto\")),\n query_expansion: vOptional(\n vObject({\n enabled: vOptional(vBoolean),\n provider: vOptional(vString),\n }),\n ),\n rerank: vOptional(\n vObject({\n enabled: vOptional(vBoolean),\n model: vOptional(vString),\n top_k: vOptional(vNumber({ int: true, positive: true })),\n }),\n ),\n // pm-75k9: offline BM25 tuning. Unlike `search.tuning` (intentionally\n // stripped for legacy zod parity), bm25 is validated so it persists across\n // writeSettings round-trips — these knobs must survive to take effect.\n bm25: vOptional(\n vObject({\n k1: vOptional(vNumber()),\n b: vOptional(vNumber()),\n }),\n ),\n }),\n providers: vObject({\n openai: vObject({ base_url: vString, api_key: vString, model: vString }),\n ollama: vObject({ base_url: vString, model: vString }),\n }),\n vector_store: vObject({\n adapter: vOptional(vString),\n collection_name: vOptional(vString),\n qdrant: vObject({ url: vString, api_key: vString }),\n lancedb: vObject({ path: vString }),\n }),\n});\n\n/** Validate raw settings, returning stripped, type-checked data or failure (matching the legacy zod safeParse). */\nexport function validateSettings(raw: unknown): SettingsValidationResult {\n const result = settingsCheck(raw);\n if (!result.ok) {\n return { success: false };\n }\n return { success: true, data: result.value as unknown as ParsedSettings };\n}\n", "/**\n * Per-type default estimate resolution for `pm validate --auto-fix` (GH-212).\n *\n * When an item is missing `estimated_minutes`, the auto-fix path backfills a\n * config-driven default based on the item's type. This module is the pure\n * resolution layer: given an item type and an optional settings-derived override\n * map, it returns the default estimate in minutes. The planning + apply path is\n * wired separately by the validate command.\n *\n * Pure module: no filesystem access, no heavy imports. Bad input is never\n * thrown on — invalid override entries are dropped, not errored (mirrors the\n * deterministic, non-throwing style of stale-file-classification.ts).\n */\n\n/**\n * Built-in per-type default estimates in MINUTES used by `pm validate --auto-fix`\n * (GH-212) to backfill missing `estimated_minutes`. Keys are canonical built-in\n * type names. Lookups are case-insensitive (see resolveEstimateDefaultMinutes).\n */\nexport const DEFAULT_ESTIMATE_MINUTES_BY_TYPE: Readonly<Record<string, number>> = {\n Epic: 2880,\n Feature: 480,\n Story: 480,\n Milestone: 2880,\n Task: 120,\n Issue: 60,\n Bug: 60,\n Chore: 30,\n Decision: 15,\n Plan: 120,\n};\n\n/** Fallback when neither overrides nor the built-in map have the type. */\nexport const FALLBACK_ESTIMATE_MINUTES = 120;\n\n/** A value is honored only when it is a finite number strictly greater than zero. */\nfunction isHonoredMinutes(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\n\n/**\n * Build a case-insensitive lookup keyed by lowercased type name. When two source\n * keys collide case-insensitively, last-wins (later entries overwrite earlier\n * ones); callers normalize overrides up front so collisions are rare.\n */\nfunction toLowercasedLookup(source: Readonly<Record<string, number>>): Map<string, number> {\n const lookup = new Map<string, number>();\n for (const [key, value] of Object.entries(source)) {\n lookup.set(key.toLowerCase(), value);\n }\n return lookup;\n}\n\n/** Built-in lookup is type-static, so build the lowercased index once. */\nconst BUILTIN_LOWERCASED_LOOKUP = toLowercasedLookup(DEFAULT_ESTIMATE_MINUTES_BY_TYPE);\n\n/**\n * Cache lowercased override lookups keyed on the override object reference so a\n * backfill that resolves once per item does not rebuild the same Map each call.\n * A WeakMap keeps this allocation-free for callers that reuse one normalized\n * settings map across the whole run.\n */\nconst OVERRIDE_LOOKUP_CACHE = new WeakMap<Readonly<Record<string, number>>, Map<string, number>>();\n\nfunction lowercasedOverrideLookup(overrides: Readonly<Record<string, number>>): Map<string, number> {\n const cached = OVERRIDE_LOOKUP_CACHE.get(overrides);\n if (cached) {\n return cached;\n }\n const lookup = toLowercasedLookup(overrides);\n OVERRIDE_LOOKUP_CACHE.set(overrides, lookup);\n return lookup;\n}\n\n/**\n * Resolve the default estimated-minutes for an item type.\n * Precedence: overrides (case-insensitive key match) > DEFAULT_ESTIMATE_MINUTES_BY_TYPE\n * (case-insensitive) > FALLBACK_ESTIMATE_MINUTES.\n * - `type` undefined/empty -> FALLBACK.\n * - Only finite values > 0 are honored from overrides/defaults; a non-positive or\n * non-finite override value is ignored and resolution continues to the next tier.\n * - Returned value is a positive integer (floor of the resolved value).\n */\nexport function resolveEstimateDefaultMinutes(\n type: string | undefined,\n overrides?: Readonly<Record<string, number>>,\n): number {\n const key = (type ?? \"\").trim().toLowerCase();\n if (key.length === 0) {\n return FALLBACK_ESTIMATE_MINUTES;\n }\n\n if (overrides) {\n const overrideValue = lowercasedOverrideLookup(overrides).get(key);\n if (isHonoredMinutes(overrideValue)) {\n return Math.floor(overrideValue);\n }\n }\n\n const builtinValue = BUILTIN_LOWERCASED_LOOKUP.get(key);\n if (isHonoredMinutes(builtinValue)) {\n return Math.floor(builtinValue);\n }\n\n return FALLBACK_ESTIMATE_MINUTES;\n}\n\n/**\n * Validate + normalize a raw `validation.estimate_defaults_by_type` settings object\n * into a clean Record<string, number> of positive integers, dropping invalid entries.\n * Used so the pure resolver always receives a sane override map. Returns {} for\n * undefined/null/non-object input. Trims keys; ignores empty keys and non-positive /\n * non-finite / non-number values. Floors values to integers.\n */\nexport function normalizeEstimateDefaultOverrides(raw: unknown): Record<string, number> {\n const normalized: Record<string, number> = {};\n if (raw === null || typeof raw !== \"object\" || Array.isArray(raw)) {\n return normalized;\n }\n\n for (const [rawKey, rawValue] of Object.entries(raw as Record<string, unknown>)) {\n const key = rawKey.trim();\n if (key.length === 0 || !isHonoredMinutes(rawValue)) {\n continue;\n }\n normalized[key] = Math.floor(rawValue);\n }\n\n return normalized;\n}\n", "/**\n * @module core/store/settings-read-cache\n *\n * Reads and writes tracker storage with format-aware helpers for Settings Read Cache.\n */\nimport { stat } from \"node:fs/promises\";\n\n/**\n * Documents the settings read cache path signature payload exchanged by command, SDK, and package integrations.\n */\nexport interface SettingsReadCachePathSignature {\n path: string;\n mtime_ms: number | null;\n size: number | null;\n}\n\n/**\n * Documents the settings read cache entry payload exchanged by command, SDK, and package integrations.\n */\nexport interface SettingsReadCacheEntry<T> {\n tracked_paths: string[];\n signatures: SettingsReadCachePathSignature[];\n value: T;\n}\n\nconst settingsReadCacheByRoot = new Map<string, SettingsReadCacheEntry<unknown>>();\n\nfunction normalizeTrackedPaths(paths: string[]): string[] {\n return [...new Set(paths.map((pathValue) => pathValue.trim()).filter((pathValue) => pathValue.length > 0))].sort((left, right) =>\n left.localeCompare(right),\n );\n}\n\nasync function readPathSignature(targetPath: string): Promise<SettingsReadCachePathSignature> {\n try {\n const targetStats = await stat(targetPath);\n return {\n path: targetPath,\n mtime_ms: targetStats.mtimeMs,\n size: targetStats.size,\n };\n } catch {\n return {\n path: targetPath,\n mtime_ms: null,\n size: null,\n };\n }\n}\n\n/**\n * Implements collect settings read cache signatures for the public runtime surface of this module.\n */\nexport async function collectSettingsReadCacheSignatures(paths: string[]): Promise<SettingsReadCachePathSignature[]> {\n const normalizedPaths = normalizeTrackedPaths(paths);\n const signatures = await Promise.all(normalizedPaths.map((targetPath) => readPathSignature(targetPath)));\n signatures.sort((left, right) => left.path.localeCompare(right.path));\n return signatures;\n}\n\n/**\n * Implements settings read cache signatures equal for the public runtime surface of this module.\n */\nexport function settingsReadCacheSignaturesEqual(\n left: SettingsReadCachePathSignature[],\n right: SettingsReadCachePathSignature[],\n): boolean {\n if (left.length !== right.length) {\n return false;\n }\n for (let index = 0; index < left.length; index += 1) {\n const leftEntry = left[index];\n const rightEntry = right[index];\n if (\n leftEntry.path !== rightEntry.path ||\n leftEntry.mtime_ms !== rightEntry.mtime_ms ||\n leftEntry.size !== rightEntry.size\n ) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Implements get settings read cache entry for the public runtime surface of this module.\n */\nexport function getSettingsReadCacheEntry<T>(pmRoot: string): SettingsReadCacheEntry<T> | undefined {\n return settingsReadCacheByRoot.get(pmRoot) as SettingsReadCacheEntry<T> | undefined;\n}\n\n/**\n * Implements set settings read cache entry for the public runtime surface of this module.\n */\nexport function setSettingsReadCacheEntry<T>(pmRoot: string, entry: SettingsReadCacheEntry<T>): void {\n const normalizedTrackedPaths = normalizeTrackedPaths(entry.tracked_paths);\n const normalizedSignatures = [...entry.signatures]\n .map((signature) => ({\n path: signature.path,\n mtime_ms: signature.mtime_ms,\n size: signature.size,\n }))\n .sort((left, right) => left.path.localeCompare(right.path));\n settingsReadCacheByRoot.set(pmRoot, {\n tracked_paths: normalizedTrackedPaths,\n signatures: normalizedSignatures,\n value: entry.value,\n });\n}\n\n/**\n * Implements clear settings read cache for the public runtime surface of this module.\n */\nexport function clearSettingsReadCache(pmRoot?: string): void {\n if (pmRoot) {\n settingsReadCacheByRoot.delete(pmRoot);\n return;\n }\n settingsReadCacheByRoot.clear();\n}\n", "/**\n * @module core/store/settings\n *\n * Reads and writes tracker storage with format-aware helpers for Settings.\n */\nimport { validateSettings, type ParsedSettings } from \"./settings-validator.js\";\nimport { runActiveOnReadHooks, runActiveOnWriteHooks } from \"../extensions/index.js\";\nimport { GOVERNANCE_PRESET_DEFAULTS, SETTINGS_DEFAULTS } from \"../shared/constants.js\";\nimport { readFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport {\n DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,\n ensureRuntimeSchemaFileScaffold,\n filePathForSchemaSection,\n loadRuntimeSchemaFromOptionalFiles,\n normalizeRuntimeSchemaSettings,\n} from \"../schema/runtime-schema.js\";\nimport { getSettingsPath } from \"./paths.js\";\nimport { orderObject, stableValueEquals } from \"../shared/serialization.js\";\nimport { normalizeItemTypeDefinition } from \"../item/item-type-definition.js\";\nimport { normalizeEstimateDefaultOverrides } from \"../validate/estimate-defaults.js\";\nimport {\n clearSettingsReadCache,\n collectSettingsReadCacheSignatures,\n getSettingsReadCacheEntry,\n setSettingsReadCacheEntry,\n settingsReadCacheSignaturesEqual,\n} from \"./settings-read-cache.js\";\nimport type {\n ExtensionGovernancePolicy,\n PmMaxVersionExceededMode,\n PmMaxVersionExceededModeSetting,\n} from \"../extensions/extension-types.js\";\nimport type {\n ExtensionSandboxProfile,\n ExtensionPolicyMode,\n ExtensionPolicyOverrideSettings,\n ExtensionPolicySettings,\n ExtensionTrustMode,\n GovernanceSettings,\n ItemTypeDefinition,\n PmSettings,\n GovernancePreset,\n SearchMutationRefreshPolicy,\n ValidateMetadataRequiredField,\n} from \"../../types/index.js\";\n\nconst SETTINGS_WRITE_OP = \"settings:write\";\nconst SETTINGS_PERSIST_SOURCE_SYMBOL = Symbol(\"pm.settings.persist_source\");\nconst MAX_VECTOR_STORE_COLLECTION_NAME_LENGTH = 128;\n\ninterface SettingsPersistSourceSnapshot {\n has_source_item_type_definitions: boolean;\n source_item_type_definitions: ItemTypeDefinition[];\n has_source_schema_statuses: boolean;\n source_schema_statuses: PmSettings[\"schema\"][\"statuses\"];\n has_source_schema_fields: boolean;\n source_schema_fields: PmSettings[\"schema\"][\"fields\"];\n has_source_schema_type_workflows: boolean;\n source_schema_type_workflows: NonNullable<PmSettings[\"schema\"][\"type_workflows\"]>;\n runtime_item_type_definitions: ItemTypeDefinition[];\n runtime_schema_statuses: PmSettings[\"schema\"][\"statuses\"];\n runtime_schema_fields: PmSettings[\"schema\"][\"fields\"];\n runtime_schema_type_workflows: NonNullable<PmSettings[\"schema\"][\"type_workflows\"]>;\n}\n\ninterface SerializeSettingsOptions {\n persist_source?: SettingsPersistSourceSnapshot;\n}\n\n/**\n * Documents the settings read metadata payload exchanged by command, SDK, and package integrations.\n */\nexport interface SettingsReadMetadata {\n has_explicit_item_format: boolean;\n}\n\n/**\n * Documents the settings read result payload exchanged by command, SDK, and package integrations.\n */\nexport interface SettingsReadResult {\n settings: PmSettings;\n metadata: SettingsReadMetadata;\n warnings: string[];\n}\n\nfunction resolveGovernanceKnobsFromPreset(preset: Exclude<GovernancePreset, \"custom\">): Omit<GovernanceSettings, \"preset\"> {\n return structuredClone(GOVERNANCE_PRESET_DEFAULTS[preset]);\n}\n\nfunction normalizeGovernancePreset(value: GovernancePreset | undefined): GovernancePreset {\n if (value === \"minimal\" || value === \"default\" || value === \"strict\" || value === \"custom\") {\n return value;\n }\n return SETTINGS_DEFAULTS.governance.preset;\n}\n\n// `create_default_type` and `workflow_enforcement` are orthogonal to the\n// governance preset (they tune create/update behavior, not the preset knobs),\n// so they must survive a write regardless of preset — otherwise a project on a\n// non-custom preset would silently drop them on every settings write.\nfunction withGovernanceExtras(\n base: Partial<GovernanceSettings> & { preset: GovernancePreset },\n governance: GovernanceSettings,\n): Partial<GovernanceSettings> & { preset: GovernancePreset } {\n const createDefaultType =\n typeof governance.create_default_type === \"string\" ? governance.create_default_type.trim() : undefined;\n if (createDefaultType && createDefaultType.length > 0) {\n base.create_default_type = createDefaultType;\n }\n if (\n governance.workflow_enforcement === \"off\" ||\n governance.workflow_enforcement === \"warn\" ||\n governance.workflow_enforcement === \"strict\"\n ) {\n base.workflow_enforcement = governance.workflow_enforcement;\n }\n if (governance.require_close_reason === false) {\n base.require_close_reason = false;\n }\n return base;\n}\n\nfunction normalizeGovernanceForPersist(governance: GovernanceSettings): Partial<GovernanceSettings> & { preset: GovernancePreset } {\n if (governance.preset === \"custom\") {\n return withGovernanceExtras(\n {\n preset: \"custom\",\n ownership_enforcement: governance.ownership_enforcement,\n create_mode_default: governance.create_mode_default,\n close_validation_default: governance.close_validation_default,\n parent_reference: governance.parent_reference,\n metadata_profile: governance.metadata_profile,\n force_required_for_stale_lock: governance.force_required_for_stale_lock,\n },\n governance,\n );\n }\n return withGovernanceExtras(\n {\n preset: governance.preset,\n },\n governance,\n );\n}\n\n// Preset-orthogonal knobs that must be carried through resolve from the raw\n// governance regardless of preset (see normalizeGovernanceForPersist).\nfunction resolveGovernanceExtras(\n rawGovernance: Partial<GovernanceSettings>,\n): Partial<Pick<GovernanceSettings, \"create_default_type\" | \"workflow_enforcement\" | \"require_close_reason\">> {\n const createDefaultType =\n typeof rawGovernance.create_default_type === \"string\" ? rawGovernance.create_default_type.trim() : undefined;\n const extras: Partial<Pick<GovernanceSettings, \"create_default_type\" | \"workflow_enforcement\" | \"require_close_reason\">> =\n {};\n if (createDefaultType && createDefaultType.length > 0) {\n extras.create_default_type = createDefaultType;\n }\n if (\n rawGovernance.workflow_enforcement === \"off\" ||\n rawGovernance.workflow_enforcement === \"warn\" ||\n rawGovernance.workflow_enforcement === \"strict\"\n ) {\n extras.workflow_enforcement = rawGovernance.workflow_enforcement;\n }\n if (typeof rawGovernance.require_close_reason === \"boolean\") {\n extras.require_close_reason = rawGovernance.require_close_reason;\n }\n return extras;\n}\n\n/**\n * Implements resolve governance knobs for the public runtime surface of this module.\n */\nexport function resolveGovernanceKnobs(\n settings: Pick<PmSettings, \"governance\"> | { governance?: Partial<GovernanceSettings> },\n): GovernanceSettings {\n const rawGovernance = settings.governance ?? {};\n const preset = normalizeGovernancePreset(rawGovernance.preset);\n const extras = resolveGovernanceExtras(rawGovernance);\n if (preset === \"custom\") {\n const baseline = resolveGovernanceKnobsFromPreset(\"default\");\n const requireCloseReason = extras.require_close_reason ?? baseline.require_close_reason;\n return {\n preset,\n ownership_enforcement: rawGovernance.ownership_enforcement ?? baseline.ownership_enforcement,\n create_mode_default: rawGovernance.create_mode_default ?? baseline.create_mode_default,\n close_validation_default: rawGovernance.close_validation_default ?? baseline.close_validation_default,\n parent_reference: rawGovernance.parent_reference ?? baseline.parent_reference,\n metadata_profile: rawGovernance.metadata_profile ?? baseline.metadata_profile,\n force_required_for_stale_lock: rawGovernance.force_required_for_stale_lock ?? baseline.force_required_for_stale_lock,\n ...extras,\n require_close_reason: requireCloseReason,\n };\n }\n const baseline = resolveGovernanceKnobsFromPreset(preset);\n const requireCloseReason = extras.require_close_reason ?? baseline.require_close_reason;\n return {\n preset,\n ...baseline,\n ...extras,\n require_close_reason: requireCloseReason,\n };\n}\n\nfunction cloneDefaults(): PmSettings {\n return structuredClone(SETTINGS_DEFAULTS);\n}\n\nfunction normalizeSearchMutationRefreshPolicy(value: unknown): SearchMutationRefreshPolicy {\n if (value === \"cache_only\" || value === \"semantic_configured\" || value === \"semantic_auto\") {\n return value;\n }\n return SETTINGS_DEFAULTS.search.mutation_refresh_policy;\n}\n\nfunction normalizeSearchQueryExpansionEnabled(value: unknown): boolean {\n if (typeof value === \"boolean\") {\n return value;\n }\n return SETTINGS_DEFAULTS.search.query_expansion.enabled;\n}\n\nfunction normalizeSearchQueryExpansionProvider(value: unknown): string {\n if (typeof value !== \"string\") {\n return SETTINGS_DEFAULTS.search.query_expansion.provider;\n }\n return value.trim();\n}\n\nfunction normalizeSearchRerankEnabled(value: unknown): boolean {\n if (typeof value === \"boolean\") {\n return value;\n }\n return SETTINGS_DEFAULTS.search.rerank.enabled;\n}\n\nfunction normalizeSearchRerankModel(value: unknown): string {\n if (typeof value !== \"string\") {\n return SETTINGS_DEFAULTS.search.rerank.model;\n }\n return value.trim();\n}\n\nfunction normalizeSearchRerankTopK(value: unknown): number {\n if (typeof value === \"number\" && Number.isFinite(value) && Number.isInteger(value) && value > 0) {\n return value;\n }\n return SETTINGS_DEFAULTS.search.rerank.top_k;\n}\n\nfunction normalizeVectorStoreCollectionName(value: unknown): string {\n if (typeof value !== \"string\") {\n return SETTINGS_DEFAULTS.vector_store.collection_name;\n }\n const sanitized = value.trim().replaceAll(/[^a-zA-Z0-9_-]/g, \"_\");\n const truncated = sanitized.slice(0, MAX_VECTOR_STORE_COLLECTION_NAME_LENGTH);\n return truncated.length > 0 ? truncated : SETTINGS_DEFAULTS.vector_store.collection_name;\n}\n\nfunction buildSettingsPersistSourceSnapshot(\n parsedSettings: ParsedSettings,\n runtimeSettings: PmSettings,\n): SettingsPersistSourceSnapshot {\n const sourceSchema = parsedSettings.schema;\n const sourceStatuses = Array.isArray(sourceSchema?.statuses) ? sourceSchema?.statuses : undefined;\n const sourceFields = Array.isArray(sourceSchema?.fields) ? sourceSchema?.fields : undefined;\n const sourceTypeWorkflows = Array.isArray(sourceSchema?.type_workflows) ? sourceSchema?.type_workflows : undefined;\n return {\n has_source_item_type_definitions: Array.isArray(parsedSettings.item_types?.definitions),\n source_item_type_definitions: normalizeItemTypeDefinitions(parsedSettings.item_types?.definitions),\n has_source_schema_statuses: sourceStatuses !== undefined,\n source_schema_statuses: sourceStatuses ? structuredClone(sourceStatuses) : [],\n has_source_schema_fields: sourceFields !== undefined,\n source_schema_fields: sourceFields ? structuredClone(sourceFields) : [],\n has_source_schema_type_workflows: sourceTypeWorkflows !== undefined,\n source_schema_type_workflows: sourceTypeWorkflows ? structuredClone(sourceTypeWorkflows) : [],\n runtime_item_type_definitions: normalizeItemTypeDefinitions(runtimeSettings.item_types?.definitions),\n runtime_schema_statuses: structuredClone(runtimeSettings.schema.statuses),\n runtime_schema_fields: structuredClone(runtimeSettings.schema.fields),\n runtime_schema_type_workflows: structuredClone(runtimeSettings.schema.type_workflows ?? []),\n };\n}\n\nfunction attachSettingsPersistSourceSnapshot(settings: PmSettings, source: SettingsPersistSourceSnapshot): void {\n Object.defineProperty(settings as unknown as Record<PropertyKey, unknown>, SETTINGS_PERSIST_SOURCE_SYMBOL, {\n value: source,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n}\n\nfunction getSettingsPersistSourceSnapshot(settings: PmSettings): SettingsPersistSourceSnapshot | undefined {\n const candidate = (settings as unknown as Record<PropertyKey, unknown>)[SETTINGS_PERSIST_SOURCE_SYMBOL];\n if (!candidate || typeof candidate !== \"object\") {\n return undefined;\n }\n return candidate as SettingsPersistSourceSnapshot;\n}\n\nfunction cloneSettingsReadResult(result: SettingsReadResult): SettingsReadResult {\n const clonedSettings = structuredClone(result.settings);\n const persistSource = getSettingsPersistSourceSnapshot(result.settings);\n if (persistSource) {\n attachSettingsPersistSourceSnapshot(clonedSettings, structuredClone(persistSource));\n }\n return {\n settings: clonedSettings,\n metadata: {\n has_explicit_item_format: result.metadata.has_explicit_item_format,\n },\n warnings: [...result.warnings],\n };\n}\n\nfunction resolveSettingsReadTrackedPaths(pmRoot: string, schema: PmSettings[\"schema\"], settingsPath: string): string[] {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n return [\n settingsPath,\n filePathForSchemaSection(pmRoot, normalizedSchema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types),\n filePathForSchemaSection(pmRoot, normalizedSchema.files.statuses, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses),\n filePathForSchemaSection(pmRoot, normalizedSchema.files.fields, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields),\n filePathForSchemaSection(pmRoot, normalizedSchema.files.workflows, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows),\n ];\n}\n\nasync function cacheSettingsReadResult(pmRoot: string, trackedPaths: string[], result: SettingsReadResult): Promise<void> {\n const signatures = await collectSettingsReadCacheSignatures(trackedPaths);\n setSettingsReadCacheEntry(pmRoot, {\n tracked_paths: trackedPaths,\n signatures,\n value: cloneSettingsReadResult(result),\n });\n}\n\nasync function cacheSettingsReadResultSafe(pmRoot: string, trackedPaths: string[], result: SettingsReadResult): Promise<void> {\n try {\n await cacheSettingsReadResult(pmRoot, trackedPaths, result);\n } catch {\n clearSettingsReadCache(pmRoot);\n }\n}\n\ntype SettingsReadCacheSignatures = Awaited<ReturnType<typeof collectSettingsReadCacheSignatures>>;\n\nfunction findSettingsReadCacheSignature(signatures: SettingsReadCacheSignatures, targetPath: string) {\n return signatures.find((signature) => signature.path === targetPath);\n}\n\nfunction selectedSettingsReadCacheSignaturesEqual(\n before: SettingsReadCacheSignatures,\n after: SettingsReadCacheSignatures,\n targetPaths: string[],\n): boolean {\n for (const targetPath of targetPaths) {\n const beforeSignature = findSettingsReadCacheSignature(before, targetPath);\n const afterSignature = findSettingsReadCacheSignature(after, targetPath);\n if (\n !beforeSignature ||\n !afterSignature ||\n !settingsReadCacheSignaturesEqual([beforeSignature], [afterSignature])\n ) {\n return false;\n }\n }\n return true;\n}\n\nasync function cacheSettingsReadResultIfStable(\n pmRoot: string,\n trackedPaths: string[],\n result: SettingsReadResult,\n stableSignatures: SettingsReadCacheSignatures,\n stablePaths: string[],\n): Promise<void> {\n try {\n const currentSignatures = await collectSettingsReadCacheSignatures(trackedPaths);\n if (!selectedSettingsReadCacheSignaturesEqual(stableSignatures, currentSignatures, stablePaths)) {\n clearSettingsReadCache(pmRoot);\n return;\n }\n setSettingsReadCacheEntry(pmRoot, {\n tracked_paths: trackedPaths,\n signatures: currentSignatures,\n value: cloneSettingsReadResult(result),\n });\n } catch {\n clearSettingsReadCache(pmRoot);\n }\n}\n\nfunction resolvePersistedFileBackedSchemaSections(\n settings: PmSettings,\n source: SettingsPersistSourceSnapshot | undefined,\n): {\n item_type_definitions: ItemTypeDefinition[];\n schema_statuses: PmSettings[\"schema\"][\"statuses\"];\n schema_fields: PmSettings[\"schema\"][\"fields\"];\n schema_type_workflows: PmSettings[\"schema\"][\"type_workflows\"];\n} {\n const normalizedSchema = normalizeRuntimeSchemaSettings(settings.schema);\n const currentItemTypeDefinitions = normalizeItemTypeDefinitions(settings.item_types?.definitions);\n if (!source) {\n return {\n item_type_definitions: currentItemTypeDefinitions,\n schema_statuses: normalizedSchema.statuses,\n schema_fields: normalizedSchema.fields,\n schema_type_workflows: normalizedSchema.type_workflows,\n };\n }\n\n const currentTypeWorkflows = normalizedSchema.type_workflows ?? [];\n const itemTypeDefinitionsUnchanged = stableValueEquals(currentItemTypeDefinitions, source.runtime_item_type_definitions);\n const schemaStatusesUnchanged = stableValueEquals(normalizedSchema.statuses, source.runtime_schema_statuses);\n const schemaFieldsUnchanged = stableValueEquals(normalizedSchema.fields, source.runtime_schema_fields);\n const schemaTypeWorkflowsUnchanged = stableValueEquals(currentTypeWorkflows, source.runtime_schema_type_workflows);\n\n return {\n item_type_definitions: itemTypeDefinitionsUnchanged\n ? source.has_source_item_type_definitions\n ? normalizeItemTypeDefinitions(source.source_item_type_definitions)\n : []\n : currentItemTypeDefinitions,\n schema_statuses: schemaStatusesUnchanged\n ? source.has_source_schema_statuses\n ? structuredClone(source.source_schema_statuses)\n : []\n : normalizedSchema.statuses,\n schema_fields: schemaFieldsUnchanged\n ? source.has_source_schema_fields\n ? structuredClone(source.source_schema_fields)\n : []\n : normalizedSchema.fields,\n schema_type_workflows: schemaTypeWorkflowsUnchanged\n ? source.has_source_schema_type_workflows\n ? structuredClone(source.source_schema_type_workflows)\n : undefined\n : normalizedSchema.type_workflows,\n };\n}\n\nfunction buildFallbackSettingsReadResult(warning?: string): SettingsReadResult {\n return {\n settings: cloneDefaults(),\n metadata: {\n has_explicit_item_format: false,\n },\n warnings: warning ? [warning] : [],\n };\n}\n\nfunction hasExplicitItemFormat(raw: unknown): boolean {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return false;\n }\n const itemFormat = (raw as Record<string, unknown>).item_format;\n return itemFormat === \"toon\" || itemFormat === \"json_markdown\";\n}\n\nfunction normalizeStringList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim()).filter((value) => value.length > 0))].sort((left, right) =>\n left.localeCompare(right),\n );\n}\n\nfunction normalizeAgentGuidanceSettings(\n value: Partial<PmSettings[\"agent_guidance\"]> | undefined,\n): PmSettings[\"agent_guidance\"] {\n const defaults = SETTINGS_DEFAULTS.agent_guidance;\n const templateVersion = value?.template_version;\n return {\n prompt_completed: value?.prompt_completed === true,\n declined: value?.declined === true,\n declined_at: typeof value?.declined_at === \"string\" ? value.declined_at : defaults.declined_at,\n template_version:\n typeof templateVersion === \"number\" && Number.isInteger(templateVersion) && templateVersion > 0\n ? templateVersion\n : defaults.template_version,\n last_checked_files: normalizeStringList(value?.last_checked_files ?? defaults.last_checked_files),\n };\n}\n\nfunction normalizeLowerStringList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nfunction normalizeExtensionPolicyMode(value: ExtensionPolicyMode | undefined): ExtensionPolicyMode {\n if (value === \"off\" || value === \"warn\" || value === \"enforce\") {\n return value;\n }\n return SETTINGS_DEFAULTS.extensions.policy.mode;\n}\n\nfunction normalizeExtensionTrustMode(value: ExtensionTrustMode | undefined): ExtensionTrustMode {\n if (value === \"off\" || value === \"warn\" || value === \"enforce\") {\n return value;\n }\n return SETTINGS_DEFAULTS.extensions.policy.trust_mode;\n}\n\nfunction normalizeExtensionSandboxProfile(value: ExtensionSandboxProfile | undefined): ExtensionSandboxProfile {\n if (value === \"none\" || value === \"restricted\" || value === \"strict\") {\n return value;\n }\n return SETTINGS_DEFAULTS.extensions.policy.default_sandbox_profile;\n}\n\nfunction normalizeExtensionPolicyOverride(\n override: ExtensionPolicyOverrideSettings,\n): ExtensionPolicyOverrideSettings | null {\n const name = override.name.trim().toLowerCase();\n if (name.length === 0) {\n return null;\n }\n const normalized: ExtensionPolicyOverrideSettings = {\n name,\n };\n if (override.disabled === true) {\n normalized.disabled = true;\n }\n if (override.require_trusted === true) {\n normalized.require_trusted = true;\n }\n if (override.require_provenance === true) {\n normalized.require_provenance = true;\n }\n if (override.sandbox_profile !== undefined) {\n normalized.sandbox_profile = normalizeExtensionSandboxProfile(override.sandbox_profile);\n }\n const allowedCapabilities = normalizeLowerStringList(override.allowed_capabilities);\n const blockedCapabilities = normalizeLowerStringList(override.blocked_capabilities);\n const allowedSurfaces = normalizeLowerStringList(override.allowed_surfaces);\n const blockedSurfaces = normalizeLowerStringList(override.blocked_surfaces);\n const allowedCommands = normalizeLowerStringList(override.allowed_commands);\n const blockedCommands = normalizeLowerStringList(override.blocked_commands);\n const allowedActions = normalizeLowerStringList(override.allowed_actions);\n const blockedActions = normalizeLowerStringList(override.blocked_actions);\n const allowedServices = normalizeLowerStringList(override.allowed_services);\n const blockedServices = normalizeLowerStringList(override.blocked_services);\n if (allowedCapabilities.length > 0) {\n normalized.allowed_capabilities = allowedCapabilities;\n }\n if (blockedCapabilities.length > 0) {\n normalized.blocked_capabilities = blockedCapabilities;\n }\n if (allowedSurfaces.length > 0) {\n normalized.allowed_surfaces = allowedSurfaces;\n }\n if (blockedSurfaces.length > 0) {\n normalized.blocked_surfaces = blockedSurfaces;\n }\n if (allowedCommands.length > 0) {\n normalized.allowed_commands = allowedCommands;\n }\n if (blockedCommands.length > 0) {\n normalized.blocked_commands = blockedCommands;\n }\n if (allowedActions.length > 0) {\n normalized.allowed_actions = allowedActions;\n }\n if (blockedActions.length > 0) {\n normalized.blocked_actions = blockedActions;\n }\n if (allowedServices.length > 0) {\n normalized.allowed_services = allowedServices;\n }\n if (blockedServices.length > 0) {\n normalized.blocked_services = blockedServices;\n }\n return normalized;\n}\n\nfunction normalizeExtensionPolicyOverrides(\n overrides: ExtensionPolicyOverrideSettings[] | undefined,\n): ExtensionPolicyOverrideSettings[] {\n const dedupedByName = new Map<string, ExtensionPolicyOverrideSettings>();\n for (const override of overrides ?? []) {\n const normalized = normalizeExtensionPolicyOverride(override);\n if (!normalized) {\n continue;\n }\n dedupedByName.set(normalized.name, normalized);\n }\n return [...dedupedByName.values()].sort((left, right) => left.name.localeCompare(right.name));\n}\n\nfunction normalizePmMaxVersionExceededModeValue(value: unknown): PmMaxVersionExceededMode | undefined {\n return value === \"block\" || value === \"warn\" ? value : undefined;\n}\n\n/**\n * Preserve a configured `pm_max_version_exceeded_mode` (string mode or per-layer\n * override object) through settings normalization. Unset/invalid values are\n * omitted so existing settings.json files round-trip byte-identically and the\n * loader applies its safe default (\"block\").\n */\nfunction normalizePmMaxVersionExceededModeSetting(\n value: PmMaxVersionExceededModeSetting | undefined,\n): PmMaxVersionExceededModeSetting | undefined {\n if (typeof value === \"string\") {\n return normalizePmMaxVersionExceededModeValue(value);\n }\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n const global = normalizePmMaxVersionExceededModeValue(value.global);\n const project = normalizePmMaxVersionExceededModeValue(value.project);\n if (global === undefined && project === undefined) {\n return undefined;\n }\n return {\n ...(global !== undefined ? { global } : {}),\n ...(project !== undefined ? { project } : {}),\n };\n }\n return undefined;\n}\n\ntype ExtensionPolicyListKey =\n | \"trusted_extensions\"\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\nfunction normalizeExtensionPolicyList(\n policy: Partial<ExtensionGovernancePolicy> | undefined,\n key: ExtensionPolicyListKey,\n): string[] {\n return normalizeLowerStringList(policy?.[key] ?? SETTINGS_DEFAULTS.extensions.policy[key]);\n}\n\nfunction normalizeExtensionPolicySettings(\n policy: Partial<ExtensionGovernancePolicy> | undefined,\n): ExtensionGovernancePolicy {\n const pmMaxVersionExceededMode = normalizePmMaxVersionExceededModeSetting(policy?.pm_max_version_exceeded_mode);\n return {\n mode: normalizeExtensionPolicyMode(policy?.mode),\n trust_mode: normalizeExtensionTrustMode(policy?.trust_mode),\n ...(pmMaxVersionExceededMode !== undefined ? { pm_max_version_exceeded_mode: pmMaxVersionExceededMode } : {}),\n require_provenance: policy?.require_provenance === true,\n trusted_extensions: normalizeExtensionPolicyList(policy, \"trusted_extensions\"),\n default_sandbox_profile: normalizeExtensionSandboxProfile(policy?.default_sandbox_profile),\n allowed_extensions: normalizeExtensionPolicyList(policy, \"allowed_extensions\"),\n blocked_extensions: normalizeExtensionPolicyList(policy, \"blocked_extensions\"),\n allowed_capabilities: normalizeExtensionPolicyList(policy, \"allowed_capabilities\"),\n blocked_capabilities: normalizeExtensionPolicyList(policy, \"blocked_capabilities\"),\n allowed_surfaces: normalizeExtensionPolicyList(policy, \"allowed_surfaces\"),\n blocked_surfaces: normalizeExtensionPolicyList(policy, \"blocked_surfaces\"),\n allowed_commands: normalizeExtensionPolicyList(policy, \"allowed_commands\"),\n blocked_commands: normalizeExtensionPolicyList(policy, \"blocked_commands\"),\n allowed_actions: normalizeExtensionPolicyList(policy, \"allowed_actions\"),\n blocked_actions: normalizeExtensionPolicyList(policy, \"blocked_actions\"),\n allowed_services: normalizeExtensionPolicyList(policy, \"allowed_services\"),\n blocked_services: normalizeExtensionPolicyList(policy, \"blocked_services\"),\n extension_overrides: normalizeExtensionPolicyOverrides(\n policy?.extension_overrides ?? SETTINGS_DEFAULTS.extensions.policy.extension_overrides,\n ),\n };\n}\n\nfunction normalizeValidationMetadataRequiredFields(values: string[] | undefined): ValidateMetadataRequiredField[] {\n const normalized = [...new Set((values ?? []).map((value) => value.trim().toLowerCase().replaceAll(\"-\", \"_\")))]\n .filter((value) => value.length > 0)\n .sort((left, right) => left.localeCompare(right));\n return normalized.filter((value): value is ValidateMetadataRequiredField =>\n [\n \"author\",\n \"acceptance_criteria\",\n \"estimated_minutes\",\n \"close_reason\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n ].includes(value),\n );\n}\n\nfunction normalizeValidationPatternList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nfunction valueOrDefault<T>(value: T | undefined, fallback: T): T {\n return value === undefined ? fallback : value;\n}\n\nfunction recordOrEmpty(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) ? (value as Record<string, unknown>) : {};\n}\n\nfunction arrayOrEmpty<T>(value: unknown): T[] {\n return Array.isArray(value) ? (value as T[]) : [];\n}\n\nfunction buildValidationSettings(settings: ParsedSettings, defaults: PmSettings, governance: GovernanceSettings): PmSettings[\"validation\"] {\n return {\n ...defaults.validation,\n ...settings.validation,\n parent_reference: governance.parent_reference,\n metadata_profile: governance.metadata_profile,\n metadata_required_fields: normalizeValidationMetadataRequiredFields(settings.validation?.metadata_required_fields),\n lifecycle_stale_blocker_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_stale_blocker_reason_patterns ??\n defaults.validation.lifecycle_stale_blocker_reason_patterns,\n ),\n lifecycle_closure_like_blocked_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_blocked_reason_patterns ??\n defaults.validation.lifecycle_closure_like_blocked_reason_patterns,\n ),\n lifecycle_closure_like_resolution_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_resolution_patterns ??\n defaults.validation.lifecycle_closure_like_resolution_patterns,\n ),\n lifecycle_closure_like_actual_result_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_actual_result_patterns ??\n defaults.validation.lifecycle_closure_like_actual_result_patterns,\n ),\n estimate_defaults_by_type: normalizeEstimateDefaultOverrides(settings.validation?.estimate_defaults_by_type),\n };\n}\n\nfunction buildTelemetrySettings(settings: ParsedSettings, defaults: PmSettings): PmSettings[\"telemetry\"] {\n return {\n enabled: settings.telemetry?.enabled ?? defaults.telemetry.enabled,\n first_run_prompt_completed: settings.telemetry?.first_run_prompt_completed ?? defaults.telemetry.first_run_prompt_completed,\n capture_level: settings.telemetry?.capture_level ?? defaults.telemetry.capture_level,\n endpoint: settings.telemetry?.endpoint ?? defaults.telemetry.endpoint,\n installation_id: settings.telemetry?.installation_id ?? defaults.telemetry.installation_id,\n retention_days: settings.telemetry?.retention_days ?? defaults.telemetry.retention_days,\n };\n}\n\nfunction buildSearchSettings(settings: ParsedSettings, defaults: PmSettings): PmSettings[\"search\"] {\n return {\n ...defaults.search,\n ...settings.search,\n mutation_refresh_policy: normalizeSearchMutationRefreshPolicy(settings.search?.mutation_refresh_policy),\n query_expansion: {\n ...defaults.search.query_expansion,\n ...settings.search?.query_expansion,\n enabled: normalizeSearchQueryExpansionEnabled(settings.search?.query_expansion?.enabled),\n provider: normalizeSearchQueryExpansionProvider(settings.search?.query_expansion?.provider),\n },\n rerank: {\n ...defaults.search.rerank,\n ...settings.search?.rerank,\n enabled: normalizeSearchRerankEnabled(settings.search?.rerank?.enabled),\n model: normalizeSearchRerankModel(settings.search?.rerank?.model),\n top_k: normalizeSearchRerankTopK(settings.search?.rerank?.top_k),\n },\n };\n}\n\nfunction buildVectorStoreSettings(settings: ParsedSettings, defaults: PmSettings): PmSettings[\"vector_store\"] {\n return {\n adapter: settings.vector_store.adapter ?? defaults.vector_store.adapter,\n collection_name: normalizeVectorStoreCollectionName(settings.vector_store.collection_name),\n qdrant: { ...defaults.vector_store.qdrant, ...settings.vector_store.qdrant },\n lancedb: { ...defaults.vector_store.lancedb, ...settings.vector_store.lancedb },\n };\n}\n\nfunction normalizeSettingsItemFormat(settings: ParsedSettings, defaults: PmSettings): PmSettings[\"item_format\"] {\n if (settings.item_format === \"json_markdown\") {\n return \"toon\";\n }\n return settings.item_format ?? defaults.item_format;\n}\n\nfunction buildContextSettings(settings: ParsedSettings, defaults: PmSettings): PmSettings[\"context\"] {\n return {\n default_depth: settings.context?.default_depth ?? defaults.context.default_depth,\n activity_limit: settings.context?.activity_limit ?? defaults.context.activity_limit,\n stale_threshold_days: settings.context?.stale_threshold_days ?? defaults.context.stale_threshold_days,\n sections: {\n ...defaults.context.sections,\n ...settings.context?.sections,\n },\n };\n}\n\nfunction buildProviderSettings(settings: ParsedSettings, defaults: PmSettings): PmSettings[\"providers\"] {\n return {\n openai: { ...defaults.providers.openai, ...settings.providers.openai },\n ollama: { ...defaults.providers.ollama, ...settings.providers.ollama },\n };\n}\n\n/**\n * Implements normalize item type definitions for the public runtime surface of this module.\n */\nexport function normalizeItemTypeDefinitions(definitions: ItemTypeDefinition[] | undefined): ItemTypeDefinition[] {\n const normalized = (definitions ?? [])\n .map((definition) => normalizeItemTypeDefinition(definition))\n .filter((definition): definition is ItemTypeDefinition => definition !== null);\n const dedupedByName = new Map<string, ItemTypeDefinition>();\n for (const definition of normalized) {\n dedupedByName.set(definition.name.toLowerCase(), definition);\n }\n return [...dedupedByName.values()].sort((left, right) => left.name.localeCompare(right.name));\n}\n\nfunction mergeSettings(settings: ParsedSettings): PmSettings {\n const defaults = cloneDefaults();\n const governance = resolveGovernanceKnobs({\n governance: settings.governance ?? { preset: \"default\" },\n });\n return {\n ...defaults,\n ...settings,\n item_format: normalizeSettingsItemFormat(settings, defaults),\n locks: { ...defaults.locks, ...settings.locks },\n checkpoints: { ...defaults.checkpoints, ...settings.checkpoints },\n output: { ...defaults.output, ...settings.output },\n history: {\n ...defaults.history,\n ...settings.history,\n compact_policy: {\n ...defaults.history.compact_policy,\n ...settings.history?.compact_policy,\n },\n },\n validation: buildValidationSettings(settings, defaults, governance),\n governance,\n workflow: {\n definition_of_done: [...(settings.workflow?.definition_of_done ?? defaults.workflow.definition_of_done)],\n },\n testing: {\n record_results_to_items: settings.testing?.record_results_to_items ?? defaults.testing.record_results_to_items,\n },\n telemetry: buildTelemetrySettings(settings, defaults),\n agent_guidance: normalizeAgentGuidanceSettings(settings.agent_guidance ?? defaults.agent_guidance),\n item_types: {\n definitions: normalizeItemTypeDefinitions(settings.item_types?.definitions),\n },\n schema: normalizeRuntimeSchemaSettings(settings.schema ?? defaults.schema),\n context: buildContextSettings(settings, defaults),\n extensions: {\n enabled: [...settings.extensions.enabled],\n disabled: [...settings.extensions.disabled],\n policy: normalizeExtensionPolicySettings(settings.extensions.policy ?? defaults.extensions.policy),\n },\n search: buildSearchSettings(settings, defaults),\n providers: buildProviderSettings(settings, defaults),\n vector_store: buildVectorStoreSettings(settings, defaults),\n };\n}\n\nfunction orderSerializedSettingsSections(ordered: Record<string, unknown>): void {\n ordered.locks = orderObject(ordered.locks as Record<string, unknown>, [\"ttl_seconds\", \"wait_ms\"]);\n ordered.checkpoints = orderObject(ordered.checkpoints as Record<string, unknown>, [\"retention_days\"]);\n ordered.output = orderObject(ordered.output as Record<string, unknown>, [\"default_format\"]);\n ordered.history = orderObject(ordered.history as Record<string, unknown>, [\"missing_stream\", \"compact_policy\"]);\n ordered.validation = orderObject(ordered.validation as Record<string, unknown>, [\n \"sprint_release_format\",\n \"parent_reference\",\n \"metadata_profile\",\n \"metadata_required_fields\",\n \"lifecycle_stale_blocker_reason_patterns\",\n \"lifecycle_closure_like_blocked_reason_patterns\",\n \"lifecycle_closure_like_resolution_patterns\",\n \"lifecycle_closure_like_actual_result_patterns\",\n \"estimate_defaults_by_type\",\n ]);\n ordered.governance = orderObject(ordered.governance as Record<string, unknown>, [\n \"preset\",\n \"ownership_enforcement\",\n \"create_mode_default\",\n \"close_validation_default\",\n \"require_close_reason\",\n \"parent_reference\",\n \"metadata_profile\",\n \"force_required_for_stale_lock\",\n \"create_default_type\",\n \"workflow_enforcement\",\n ]);\n ordered.workflow = orderObject(ordered.workflow as Record<string, unknown>, [\"definition_of_done\"]);\n ordered.testing = orderObject(ordered.testing as Record<string, unknown>, [\"record_results_to_items\"]);\n ordered.telemetry = orderObject(ordered.telemetry as Record<string, unknown>, [\n \"enabled\",\n \"first_run_prompt_completed\",\n \"capture_level\",\n \"endpoint\",\n \"installation_id\",\n \"retention_days\",\n ]);\n ordered.agent_guidance = orderObject(ordered.agent_guidance as Record<string, unknown>, [\n \"prompt_completed\",\n \"declined\",\n \"declined_at\",\n \"template_version\",\n \"last_checked_files\",\n ]);\n ordered.item_types = orderObject(ordered.item_types as Record<string, unknown>, [\"definitions\"]);\n ordered.schema = orderObject(ordered.schema as Record<string, unknown>, [\n \"version\",\n \"files\",\n \"statuses\",\n \"fields\",\n \"workflow\",\n \"type_workflows\",\n \"unknown_field_policy\",\n ]);\n (ordered.schema as Record<string, unknown>).files = orderObject(\n recordOrEmpty((ordered.schema as Record<string, unknown>).files),\n [\"types\", \"statuses\", \"fields\", \"workflows\"],\n );\n (ordered.schema as Record<string, unknown>).workflow = orderObject(\n recordOrEmpty((ordered.schema as Record<string, unknown>).workflow),\n [\"draft_status\", \"open_status\", \"in_progress_status\", \"blocked_status\", \"close_status\", \"canceled_status\"],\n );\n ordered.context = orderObject(ordered.context as Record<string, unknown>, [\n \"default_depth\",\n \"activity_limit\",\n \"stale_threshold_days\",\n \"sections\",\n ]);\n (ordered.context as Record<string, unknown>).sections = orderObject(\n recordOrEmpty((ordered.context as Record<string, unknown>).sections),\n [\"hierarchy\", \"activity\", \"progress\", \"blockers\", \"files\", \"workload\", \"staleness\", \"tests\"],\n );\n ordered.extensions = orderObject(ordered.extensions as Record<string, unknown>, [\"enabled\", \"disabled\", \"policy\"]);\n (ordered.extensions as Record<string, unknown>).policy = orderObject(\n recordOrEmpty((ordered.extensions as Record<string, unknown>).policy),\n [\n \"mode\",\n \"trust_mode\",\n \"pm_max_version_exceeded_mode\",\n \"require_provenance\",\n \"trusted_extensions\",\n \"default_sandbox_profile\",\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 ((ordered.extensions as Record<string, unknown>).policy as Record<string, unknown>).extension_overrides = (\n arrayOrEmpty(((ordered.extensions as Record<string, unknown>).policy as Record<string, unknown>).extension_overrides)\n ).map((entry) =>\n orderObject(recordOrEmpty(entry), [\n \"name\",\n \"disabled\",\n \"require_trusted\",\n \"require_provenance\",\n \"sandbox_profile\",\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 ]),\n );\n ordered.search = orderObject(ordered.search as Record<string, unknown>, [\n \"score_threshold\",\n \"hybrid_semantic_weight\",\n \"max_results\",\n \"embedding_model\",\n \"embedding_corpus_max_characters\",\n \"embedding_batch_size\",\n \"embedding_timeout_ms\",\n \"scanner_max_batch_retries\",\n \"provider\",\n \"mutation_refresh_policy\",\n \"query_expansion\",\n \"rerank\",\n ]);\n (ordered.search as Record<string, unknown>).query_expansion = orderObject(\n recordOrEmpty((ordered.search as Record<string, unknown>).query_expansion),\n [\"enabled\", \"provider\"],\n );\n (ordered.search as Record<string, unknown>).rerank = orderObject(\n recordOrEmpty((ordered.search as Record<string, unknown>).rerank),\n [\"enabled\", \"model\", \"top_k\"],\n );\n ordered.providers = orderObject(ordered.providers as Record<string, unknown>, [\"openai\", \"ollama\"]);\n (ordered.providers as Record<string, unknown>).openai = orderObject(\n recordOrEmpty((ordered.providers as Record<string, unknown>).openai),\n [\"base_url\", \"api_key\", \"model\"],\n );\n (ordered.providers as Record<string, unknown>).ollama = orderObject(\n recordOrEmpty((ordered.providers as Record<string, unknown>).ollama),\n [\"base_url\", \"model\"],\n );\n ordered.vector_store = orderObject(ordered.vector_store as Record<string, unknown>, [\n \"adapter\",\n \"collection_name\",\n \"qdrant\",\n \"lancedb\",\n ]);\n (ordered.vector_store as Record<string, unknown>).qdrant = orderObject(\n recordOrEmpty((ordered.vector_store as Record<string, unknown>).qdrant),\n [\"url\", \"api_key\"],\n );\n (ordered.vector_store as Record<string, unknown>).lancedb = orderObject(\n recordOrEmpty((ordered.vector_store as Record<string, unknown>).lancedb),\n [\"path\"],\n );\n}\n\nfunction buildSerializeBaseSettings(settings: PmSettings): PmSettings {\n return {\n ...settings,\n locks: valueOrDefault(settings.locks, SETTINGS_DEFAULTS.locks),\n checkpoints: valueOrDefault(settings.checkpoints, SETTINGS_DEFAULTS.checkpoints),\n output: valueOrDefault(settings.output, SETTINGS_DEFAULTS.output),\n history: valueOrDefault(settings.history, SETTINGS_DEFAULTS.history),\n validation: valueOrDefault(settings.validation, SETTINGS_DEFAULTS.validation),\n workflow: valueOrDefault(settings.workflow, SETTINGS_DEFAULTS.workflow),\n testing: valueOrDefault(settings.testing, SETTINGS_DEFAULTS.testing),\n telemetry: valueOrDefault(settings.telemetry, SETTINGS_DEFAULTS.telemetry),\n agent_guidance: valueOrDefault(settings.agent_guidance, SETTINGS_DEFAULTS.agent_guidance),\n item_types: valueOrDefault(settings.item_types, SETTINGS_DEFAULTS.item_types),\n schema: valueOrDefault(settings.schema, SETTINGS_DEFAULTS.schema),\n context: valueOrDefault(settings.context, SETTINGS_DEFAULTS.context),\n extensions: valueOrDefault(settings.extensions, SETTINGS_DEFAULTS.extensions),\n search: valueOrDefault(settings.search, SETTINGS_DEFAULTS.search),\n providers: valueOrDefault(settings.providers, SETTINGS_DEFAULTS.providers),\n vector_store: valueOrDefault(settings.vector_store, SETTINGS_DEFAULTS.vector_store),\n } as PmSettings;\n}\n\nfunction buildSerializedValidationSettings(baseSettings: PmSettings, governance: GovernanceSettings): PmSettings[\"validation\"] {\n return {\n ...baseSettings.validation,\n parent_reference: governance.parent_reference,\n metadata_profile: governance.metadata_profile,\n metadata_required_fields: normalizeValidationMetadataRequiredFields(baseSettings.validation?.metadata_required_fields),\n lifecycle_stale_blocker_reason_patterns: normalizeValidationPatternList(\n baseSettings.validation?.lifecycle_stale_blocker_reason_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_stale_blocker_reason_patterns,\n ),\n lifecycle_closure_like_blocked_reason_patterns: normalizeValidationPatternList(\n baseSettings.validation?.lifecycle_closure_like_blocked_reason_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_closure_like_blocked_reason_patterns,\n ),\n lifecycle_closure_like_resolution_patterns: normalizeValidationPatternList(\n baseSettings.validation?.lifecycle_closure_like_resolution_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_closure_like_resolution_patterns,\n ),\n lifecycle_closure_like_actual_result_patterns: normalizeValidationPatternList(\n baseSettings.validation?.lifecycle_closure_like_actual_result_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_closure_like_actual_result_patterns,\n ),\n estimate_defaults_by_type: normalizeEstimateDefaultOverrides(baseSettings.validation?.estimate_defaults_by_type),\n };\n}\n\nfunction buildSerializedSearchSettings(baseSettings: PmSettings): PmSettings[\"search\"] {\n return {\n ...SETTINGS_DEFAULTS.search,\n ...baseSettings.search,\n mutation_refresh_policy: normalizeSearchMutationRefreshPolicy(baseSettings.search?.mutation_refresh_policy),\n query_expansion: {\n ...SETTINGS_DEFAULTS.search.query_expansion,\n ...baseSettings.search?.query_expansion,\n enabled: normalizeSearchQueryExpansionEnabled(baseSettings.search?.query_expansion?.enabled),\n provider: normalizeSearchQueryExpansionProvider(baseSettings.search?.query_expansion?.provider),\n },\n rerank: {\n ...SETTINGS_DEFAULTS.search.rerank,\n ...baseSettings.search?.rerank,\n enabled: normalizeSearchRerankEnabled(baseSettings.search?.rerank?.enabled),\n model: normalizeSearchRerankModel(baseSettings.search?.rerank?.model),\n top_k: normalizeSearchRerankTopK(baseSettings.search?.rerank?.top_k),\n },\n };\n}\n\nfunction buildSerializedContextSettings(baseSettings: PmSettings): PmSettings[\"context\"] {\n return {\n default_depth: baseSettings.context?.default_depth ?? SETTINGS_DEFAULTS.context.default_depth,\n activity_limit: baseSettings.context?.activity_limit ?? SETTINGS_DEFAULTS.context.activity_limit,\n stale_threshold_days: baseSettings.context?.stale_threshold_days ?? SETTINGS_DEFAULTS.context.stale_threshold_days,\n sections: {\n ...SETTINGS_DEFAULTS.context.sections,\n ...baseSettings.context?.sections,\n },\n };\n}\n\nfunction buildSerializedVectorStoreSettings(baseSettings: PmSettings): PmSettings[\"vector_store\"] {\n return {\n ...baseSettings.vector_store,\n adapter: baseSettings.vector_store?.adapter ?? SETTINGS_DEFAULTS.vector_store.adapter,\n collection_name: normalizeVectorStoreCollectionName(baseSettings.vector_store?.collection_name),\n qdrant: { ...baseSettings.vector_store?.qdrant },\n lancedb: { ...baseSettings.vector_store?.lancedb },\n };\n}\n\nfunction buildNormalizedSettingsForSerialization(\n baseSettings: PmSettings,\n governance: GovernanceSettings,\n normalizedSchema: PmSettings[\"schema\"],\n persistedFileBackedSections: ReturnType<typeof resolvePersistedFileBackedSchemaSections>,\n): PmSettings {\n return {\n ...baseSettings,\n item_format: \"toon\",\n validation: buildSerializedValidationSettings(baseSettings, governance),\n governance,\n agent_guidance: normalizeAgentGuidanceSettings(baseSettings.agent_guidance),\n item_types: {\n definitions: persistedFileBackedSections.item_type_definitions,\n },\n schema: {\n ...normalizedSchema,\n statuses: persistedFileBackedSections.schema_statuses,\n fields: persistedFileBackedSections.schema_fields,\n type_workflows: persistedFileBackedSections.schema_type_workflows,\n },\n search: buildSerializedSearchSettings(baseSettings),\n context: buildSerializedContextSettings(baseSettings),\n extensions: {\n enabled: normalizeStringList(baseSettings.extensions?.enabled),\n disabled: normalizeStringList(baseSettings.extensions?.disabled),\n policy: normalizeExtensionPolicySettings(baseSettings.extensions?.policy),\n },\n vector_store: buildSerializedVectorStoreSettings(baseSettings),\n };\n}\n\n/**\n * Implements serialize settings for the public runtime surface of this module.\n */\nexport function serializeSettings(settings: PmSettings, options: SerializeSettingsOptions = {}): string {\n const baseSettings = buildSerializeBaseSettings(settings);\n const governance = resolveGovernanceKnobs(baseSettings);\n const normalizedSchema = normalizeRuntimeSchemaSettings(baseSettings.schema);\n const persistedFileBackedSections = resolvePersistedFileBackedSchemaSections(baseSettings, options.persist_source);\n const normalizedSettings = buildNormalizedSettingsForSerialization(\n baseSettings,\n governance,\n normalizedSchema,\n persistedFileBackedSections,\n );\n const ordered = orderObject(\n {\n ...(normalizedSettings as unknown as Record<string, unknown>),\n governance: normalizeGovernanceForPersist(governance) as unknown,\n },\n [\n \"version\",\n \"id_prefix\",\n \"author_default\",\n \"item_format\",\n \"locks\",\n \"checkpoints\",\n \"output\",\n \"history\",\n \"validation\",\n \"governance\",\n \"workflow\",\n \"testing\",\n \"telemetry\",\n \"agent_guidance\",\n \"item_types\",\n \"schema\",\n \"context\",\n \"extensions\",\n \"search\",\n \"providers\",\n \"vector_store\",\n ],\n );\n orderSerializedSettingsSections(ordered);\n\n return `${JSON.stringify(ordered, null, 2)}\\n`;\n}\n\n/**\n * Implements read settings with metadata for the public runtime surface of this module.\n */\nexport async function readSettingsWithMetadata(pmRoot: string): Promise<SettingsReadResult> {\n const settingsPath = getSettingsPath(pmRoot);\n let trackedPathsForFailure: string[] = [settingsPath];\n await runActiveOnReadHooks({\n path: settingsPath,\n scope: \"project\",\n });\n\n const cachedResult = getSettingsReadCacheEntry<SettingsReadResult>(pmRoot);\n if (cachedResult) {\n const currentSignatures = await collectSettingsReadCacheSignatures(cachedResult.tracked_paths);\n if (settingsReadCacheSignaturesEqual(currentSignatures, cachedResult.signatures)) {\n return cloneSettingsReadResult(cachedResult.value);\n }\n }\n\n const settingsOnlySignatures = await collectSettingsReadCacheSignatures([settingsPath]);\n const raw = await readFileIfExists(settingsPath);\n if (raw === null) {\n const fallback = buildFallbackSettingsReadResult();\n await cacheSettingsReadResultIfStable(pmRoot, [settingsPath], fallback, settingsOnlySignatures, [settingsPath]);\n return fallback;\n }\n\n const settingsSignaturesAfterRead = await collectSettingsReadCacheSignatures([settingsPath]);\n if (!settingsReadCacheSignaturesEqual(settingsOnlySignatures, settingsSignaturesAfterRead)) {\n clearSettingsReadCache(pmRoot);\n return readSettingsWithMetadata(pmRoot);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n const fallback = buildFallbackSettingsReadResult(\"settings_read_invalid_json\");\n await cacheSettingsReadResultIfStable(pmRoot, [settingsPath], fallback, settingsSignaturesAfterRead, [settingsPath]);\n return fallback;\n }\n\n const validated = validateSettings(parsed);\n if (!validated.success) {\n const fallback = buildFallbackSettingsReadResult(\"settings_read_invalid_schema\");\n await cacheSettingsReadResultIfStable(pmRoot, [settingsPath], fallback, settingsSignaturesAfterRead, [settingsPath]);\n return fallback;\n }\n\n try {\n const mergedSettings = mergeSettings(validated.data);\n const trackedPaths = resolveSettingsReadTrackedPaths(pmRoot, mergedSettings.schema, settingsPath);\n trackedPathsForFailure = trackedPaths;\n const signaturesBeforeSchemaLoad = await collectSettingsReadCacheSignatures(trackedPaths);\n const schemaScaffold = await ensureRuntimeSchemaFileScaffold(pmRoot, mergedSettings.schema);\n const loadedSchemaSections = await loadRuntimeSchemaFromOptionalFiles(pmRoot, mergedSettings.schema);\n const signaturesAfterSchemaLoad = await collectSettingsReadCacheSignatures(trackedPaths);\n const settings: PmSettings = {\n ...mergedSettings,\n item_types: {\n definitions: normalizeItemTypeDefinitions([\n ...mergedSettings.item_types.definitions,\n ...arrayOrEmpty<ItemTypeDefinition>(loadedSchemaSections.type_definitions_from_file),\n ]),\n },\n schema: loadedSchemaSections.schema,\n };\n attachSettingsPersistSourceSnapshot(settings, buildSettingsPersistSourceSnapshot(validated.data, settings));\n const result: SettingsReadResult = {\n settings,\n metadata: {\n has_explicit_item_format: hasExplicitItemFormat(parsed),\n },\n warnings: [\n ...(validated.data.item_format === \"json_markdown\"\n ? [\"settings_item_format_legacy_json_markdown_coerced_to_toon\"]\n : []),\n ...schemaScaffold.created_paths.map((createdPath) => `runtime_schema_bootstrap_created:${createdPath}`),\n ...loadedSchemaSections.warnings,\n ],\n };\n if (schemaScaffold.created_paths.length === 0) {\n if (!settingsReadCacheSignaturesEqual(signaturesBeforeSchemaLoad, signaturesAfterSchemaLoad)) {\n clearSettingsReadCache(pmRoot);\n } else {\n setSettingsReadCacheEntry(pmRoot, {\n tracked_paths: trackedPaths,\n signatures: signaturesAfterSchemaLoad,\n value: cloneSettingsReadResult(result),\n });\n }\n } else {\n // Bootstrap warnings are intentionally one-shot and should not be replayed from cache.\n clearSettingsReadCache(pmRoot);\n }\n return result;\n } catch {\n const fallback = buildFallbackSettingsReadResult(\"settings_read_merge_failed\");\n await cacheSettingsReadResultSafe(pmRoot, trackedPathsForFailure, fallback);\n return fallback;\n }\n}\n\n/**\n * Implements read settings for the public runtime surface of this module.\n */\nexport async function readSettings(pmRoot: string): Promise<PmSettings> {\n return (await readSettingsWithMetadata(pmRoot)).settings;\n}\n\n/**\n * Implements write settings for the public runtime surface of this module.\n */\nexport async function writeSettings(pmRoot: string, settings: PmSettings, op = SETTINGS_WRITE_OP): Promise<void> {\n const settingsPath = getSettingsPath(pmRoot);\n await writeFileAtomic(\n settingsPath,\n serializeSettings(settings, {\n persist_source: getSettingsPersistSourceSnapshot(settings),\n }),\n );\n try {\n await runActiveOnWriteHooks({\n path: settingsPath,\n scope: \"project\",\n op,\n });\n } finally {\n clearSettingsReadCache(pmRoot);\n }\n}\n\nexport const settingsStoreTestOnly = {\n hasExplicitItemFormat,\n buildSettingsPersistSourceSnapshot,\n cacheSettingsReadResultIfStable,\n cacheSettingsReadResultSafe,\n mergeSettings,\n normalizeExtensionPolicySettings,\n normalizeExtensionPolicyOverride,\n normalizeExtensionPolicyOverrides,\n normalizeExtensionPolicyMode,\n normalizePmMaxVersionExceededModeSetting,\n normalizeExtensionSandboxProfile,\n normalizeExtensionTrustMode,\n normalizeLowerStringList,\n normalizeStringList,\n valueOrDefault,\n arrayOrEmpty,\n normalizeValidationPatternList,\n normalizeValidationMetadataRequiredFields,\n resolveSettingsReadTrackedPaths,\n resolvePersistedFileBackedSchemaSections,\n selectedSettingsReadCacheSignaturesEqual,\n};\n", "/**\n * @module core/shared/time\n *\n * Provides shared primitives and utilities for Time.\n */\nimport { PmCliError } from \"./errors.js\";\nimport { evictOldestMemoEntries } from \"./memo.js\";\nimport { EXIT_CODE } from \"./constants.js\";\n\nconst RELATIVE_DEADLINE = /^([+-]?)(\\d+)([hdwm])$/i;\nconst COMPOUND_RELATIVE_DEADLINE = /^[+-]?\\d+[hdwm](?:[+-]\\d+[hdwm])+$/i;\nconst COMPACT_DATE = /^(\\d{4})(\\d{2})(\\d{2})$/;\nconst COMPACT_DATETIME = /^(\\d{4})(\\d{2})(\\d{2})(?:[T\\s]?)(\\d{2})(\\d{2})(\\d{2})?([.,]\\d{1,3})?(Z|[+-]\\d{2}:?\\d{2})?$/i;\nconst HYPHEN_TIME = /^(\\d{4}-\\d{2}-\\d{2})[T\\s](\\d{2})-(\\d{2})(?:-(\\d{2}))?([.,]\\d{1,3})?(Z|[+-]\\d{2}:?\\d{2})?$/i;\nconst COMPACT_TIME = /^(\\d{4}-\\d{2}-\\d{2})[T\\s](\\d{2})(\\d{2})(\\d{2})?([.,]\\d{1,3})?(Z|[+-]\\d{2}:?\\d{2})?$/i;\n\n/**\n * Implements now iso for the public runtime surface of this module.\n */\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\n/**\n * Implements check whether timestamp literal for the public runtime surface of this module.\n */\nexport function isTimestampLiteral(input: string): boolean {\n return Number.isFinite(Date.parse(input));\n}\n\n/**\n * Memoized `Date.parse` for {@link compareTimestampStrings}. Sort comparators call it\n * O(n log n) times over a corpus whose timestamp strings repeat heavily, and\n * `Date.parse` is expensive enough to show up in list/next/context profiles. The cap\n * bounds memory in long-lived hosts (the MCP server); half-eviction keeps the\n * newest-inserted half when the cap is hit.\n */\nconst TIMESTAMP_PARSE_MEMO_MAX_ENTRIES = 10_000;\nconst timestampParseMemo = new Map<string, number>();\n\nfunction parseTimestampMsMemoized(value: string): number {\n const memoized = timestampParseMemo.get(value);\n if (memoized !== undefined) {\n return memoized;\n }\n const parsed = Date.parse(value);\n if (timestampParseMemo.size >= TIMESTAMP_PARSE_MEMO_MAX_ENTRIES) {\n evictOldestMemoEntries(timestampParseMemo);\n }\n timestampParseMemo.set(value, parsed);\n return parsed;\n}\n\n/**\n * Implements compare timestamp strings for the public runtime surface of this module.\n */\nexport function compareTimestampStrings(left: string, right: string): number {\n const leftMs = parseTimestampMsMemoized(left);\n const rightMs = parseTimestampMsMemoized(right);\n if (Number.isFinite(leftMs) && Number.isFinite(rightMs) && leftMs !== rightMs) {\n return leftMs - rightMs;\n }\n return left.localeCompare(right);\n}\n\nfunction normalizeFraction(raw: string | undefined): string {\n if (!raw) return \"\";\n const digits = raw.slice(1);\n return `.${digits.padEnd(3, \"0\").slice(0, 3)}`;\n}\n\nfunction normalizeOffset(raw: string | undefined): string {\n if (!raw) return \"\";\n if (raw.toUpperCase() === \"Z\") return \"Z\";\n const compact = /^([+-]\\d{2})(\\d{2})$/.exec(raw);\n if (compact) return `${compact[1]}:${compact[2]}`;\n return raw;\n}\n\nfunction pushTimestampCandidate(candidates: string[], input: string, value: string | undefined): void {\n if (!value) return;\n if (value === input) return;\n if (candidates.includes(value)) return;\n candidates.push(value);\n}\n\nfunction normalizeTimestampCandidates(input: string): string[] {\n const candidates: string[] = [];\n const push = (value: string | undefined): void => pushTimestampCandidate(candidates, input, value);\n\n const compactDate = COMPACT_DATE.exec(input);\n if (compactDate) {\n const [, year, month, day] = compactDate;\n push(`${year}-${month}-${day}`);\n }\n\n const compactDateTime = COMPACT_DATETIME.exec(input);\n if (compactDateTime) {\n const [, year, month, day, hour, minute, secondRaw, fractionRaw, offsetRaw] = compactDateTime;\n const second = secondRaw ? `:${secondRaw}` : \"\";\n push(\n `${year}-${month}-${day}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`,\n );\n }\n\n const hyphenTime = HYPHEN_TIME.exec(input);\n if (hyphenTime) {\n const [, datePart, hour, minute, secondRaw, fractionRaw, offsetRaw] = hyphenTime;\n const second = secondRaw ? `:${secondRaw}` : \"\";\n push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);\n }\n\n const compactTime = COMPACT_TIME.exec(input);\n if (compactTime) {\n const [, datePart, hour, minute, secondRaw, fractionRaw, offsetRaw] = compactTime;\n const second = secondRaw ? `:${secondRaw}` : \"\";\n push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);\n }\n\n const datePrefixLength = 10;\n const datePrefix = input.slice(0, datePrefixLength);\n if (isHyphenDatePrefix(datePrefix)) {\n let index = datePrefixLength;\n while (index < input.length && isWhitespaceCharacter(input[index])) {\n index += 1;\n }\n if (index < input.length) {\n push(`${datePrefix}T${input.slice(index)}`);\n }\n }\n\n return candidates;\n}\n\nfunction parseTimestampWithFallbacks(input: string): number {\n const direct = Date.parse(input);\n if (Number.isFinite(direct)) return direct;\n for (const candidate of normalizeTimestampCandidates(input)) {\n const parsed = Date.parse(candidate);\n if (Number.isFinite(parsed)) return parsed;\n }\n return Number.NaN;\n}\n\nfunction isHyphenDatePrefix(value: string): boolean {\n if (value.length !== 10) {\n return false;\n }\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index];\n if (index === 4 || index === 7) {\n if (character !== \"-\") {\n return false;\n }\n continue;\n }\n const code = character.charCodeAt(0);\n if (code < 48 || code > 57) {\n return false;\n }\n }\n return true;\n}\n\nfunction isWhitespaceCharacter(character: string | undefined): boolean {\n if (!character) {\n return false;\n }\n return (\n character === \" \" ||\n character === \"\\t\" ||\n character === \"\\n\" ||\n character === \"\\r\" ||\n character === \"\\f\" ||\n character === \"\\v\"\n );\n}\n\nfunction daysInUtcMonth(year: number, monthIndex: number): number {\n return new Date(Date.UTC(year, monthIndex + 1, 0)).getUTCDate();\n}\n\nconst MONTH_NAMES = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\n// Leading literal calendar date in either hyphenated (`2026-02-30`) or compact\n// (`20260230`) form, optionally followed by any time/zone component. We validate\n// the digits the caller actually typed — not the parsed instant — so timezone\n// offsets never produce a false \"impossible date\" rejection. The hyphenated form\n// is unambiguous, so anything may follow (`T`/space time, `Z`, `+/-` offset). The\n// compact form must be followed by end-of-string or a time digit (with an optional\n// `T`/space separator) so a no-separator compact datetime like `20260230135900Z`\n// is still guarded and a 7-digit non-date is not misread as a date.\nconst LEADING_HYPHEN_DATE = /^(\\d{4})-(\\d{2})-(\\d{2})/;\nconst LEADING_COMPACT_DATE = /^(\\d{4})(\\d{2})(\\d{2})(?:[T ]?\\d{2}|$)/;\n\n/**\n * Reject literal calendar dates whose day cannot exist (e.g. `2026-02-30`, which JS\n * `Date` silently rolls forward to March 2). Without this, agents that pass an\n * impossible deadline get a silently-wrong stored date instead of an actionable\n * error. Only triggers on a leading literal date; relative tokens, \"now\", and pure\n * times are untouched. Month 00 / >12 is also rejected with a clear message rather\n * than falling through to the generic \"invalid value\" path.\n */\nfunction assertRealCalendarDate(originalInput: string, trimmed: string, fieldLabel: string): void {\n const match = LEADING_HYPHEN_DATE.exec(trimmed) ?? LEADING_COMPACT_DATE.exec(trimmed);\n if (!match) {\n return;\n }\n const year = Number.parseInt(match[1], 10);\n const month = Number.parseInt(match[2], 10);\n const day = Number.parseInt(match[3], 10);\n const label = fieldLabel?.trim() || \"deadline\";\n if (month < 1 || month > 12) {\n throw new PmCliError(\n `Invalid ${label} value \"${originalInput}\". Month \"${match[2]}\" is out of range — use a month between 01 and 12.`,\n EXIT_CODE.USAGE,\n );\n }\n const maxDay = daysInUtcMonth(year, month - 1);\n if (day < 1 || day > maxDay) {\n throw new PmCliError(\n `Invalid ${label} value \"${originalInput}\". ${MONTH_NAMES[month - 1]} ${year} has ${maxDay} days, so day \"${match[3]}\" does not exist. Use a real YYYY-MM-DD calendar date.`,\n EXIT_CODE.USAGE,\n );\n }\n}\n\nfunction addUtcMonths(now: Date, amount: number): Date {\n const result = new Date(now.getTime());\n const startDay = result.getUTCDate();\n const targetMonthIndex = result.getUTCMonth() + amount;\n const targetYear = result.getUTCFullYear() + Math.floor(targetMonthIndex / 12);\n const targetMonth = ((targetMonthIndex % 12) + 12) % 12;\n const day = Math.min(startDay, daysInUtcMonth(targetYear, targetMonth));\n result.setUTCFullYear(targetYear, targetMonth, day);\n return result;\n}\n\n/**\n * Implements resolve iso or relative for the public runtime surface of this module.\n */\nexport function resolveIsoOrRelative(\n input: string,\n now: Date = new Date(),\n fieldLabel = \"deadline\",\n): string {\n const trimmed = input.trim();\n if (trimmed.toLowerCase() === \"now\") {\n return now.toISOString();\n }\n const relative = RELATIVE_DEADLINE.exec(trimmed);\n if (relative) {\n const sign = relative[1] === \"-\" ? -1 : 1;\n const amount = Number.parseInt(relative[2], 10) * sign;\n const unit = relative[3].toLowerCase();\n if (unit === \"m\") {\n return addUtcMonths(now, amount).toISOString();\n }\n const msPerUnit = unit === \"h\" ? 60 * 60 * 1000 : unit === \"d\" ? 24 * 60 * 60 * 1000 : 7 * 24 * 60 * 60 * 1000;\n return new Date(now.getTime() + amount * msPerUnit).toISOString();\n }\n\n assertRealCalendarDate(input, trimmed, fieldLabel);\n\n const timestamp = parseTimestampWithFallbacks(trimmed);\n if (!Number.isFinite(timestamp)) {\n const normalizedLabel = fieldLabel.trim().length > 0 ? fieldLabel.trim() : \"deadline\";\n const guidance = COMPOUND_RELATIVE_DEADLINE.test(trimmed)\n ? \"Compound relative expressions like +3d+1h are not supported; use a single relative token (for example +3d) or an ISO/date string.\"\n : 'Use ISO/date string input, \"now\", or relative +6h/-6h/+1d/-1d/+2w/-2w/+6m/-6m.';\n throw new PmCliError(\n `Invalid ${normalizedLabel} value \"${input}\". ${guidance}`,\n EXIT_CODE.USAGE,\n );\n }\n return new Date(timestamp).toISOString();\n}\n\nexport const _testOnly = {\n normalizeOffset,\n pushTimestampCandidate,\n normalizeTimestampCandidates,\n parseTimestampWithFallbacks,\n isWhitespaceCharacter,\n};\n", "/**\n * @module core/extensions/item-fields\n *\n * Implements extension runtime contracts and governance for Item Fields.\n */\nimport type { ExtensionRegistrationRegistry } from \"./loader.js\";\nimport { normalizeItemFieldType, type KnownItemFieldType } from \"./item-field-types.js\";\nimport { EXIT_CODE, FRONT_MATTER_KEY_ORDER } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\n\nconst RESERVED_ITEM_FIELD_NAMES = new Set(FRONT_MATTER_KEY_ORDER);\n\nfunction normalizeFieldName(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\nfunction normalizeFieldType(value: unknown): KnownItemFieldType | null {\n if (typeof value !== \"string\") {\n return null;\n }\n return normalizeItemFieldType(value);\n}\n\nfunction cloneFieldValue<T>(value: T): T {\n try {\n return structuredClone(value);\n } catch {\n return value;\n }\n}\n\nfunction parseFieldAssignment(raw: string): { key: string; value: string } {\n const trimmed = raw.trim();\n const separatorIndex = trimmed.indexOf(\"=\");\n if (separatorIndex <= 0) {\n throw new PmCliError(`--field entries must use name=value syntax, received: ${raw}`, EXIT_CODE.USAGE);\n }\n // `separatorIndex > 0` guarantees a non-`=` first character on the already\n // trimmed string, so the trimmed key is always non-empty here.\n const key = trimmed.slice(0, separatorIndex).trim();\n const value = trimmed.slice(separatorIndex + 1);\n return { key, value };\n}\n\nfunction parseJsonFieldValue(raw: string, fieldName: string, expectedType: \"array\" | \"object\"): unknown {\n try {\n const parsed = JSON.parse(raw);\n if (expectedType === \"array\" && Array.isArray(parsed)) {\n return parsed;\n }\n if (expectedType === \"object\" && typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n return parsed;\n }\n } catch {\n // Fall through to the typed usage error below.\n }\n throw new PmCliError(`--field ${fieldName}=... must be valid JSON ${expectedType}`, EXIT_CODE.USAGE);\n}\n\nfunction coerceRegisteredFieldValue(fieldName: string, fieldType: \"string\" | \"number\" | \"boolean\" | \"array\" | \"object\", raw: string): unknown {\n if (fieldType === \"string\") {\n return raw;\n }\n if (fieldType === \"number\") {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n throw new PmCliError(`--field ${fieldName}=... must be a number`, EXIT_CODE.USAGE);\n }\n const parsed = Number(trimmed);\n if (!Number.isFinite(parsed)) {\n throw new PmCliError(`--field ${fieldName}=... must be a number`, EXIT_CODE.USAGE);\n }\n return parsed;\n }\n if (fieldType === \"boolean\") {\n const normalized = raw.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\" || normalized === \"no\") {\n return false;\n }\n throw new PmCliError(`--field ${fieldName}=... must be one of true|false|1|0|yes|no`, EXIT_CODE.USAGE);\n }\n return parseJsonFieldValue(raw, fieldName, fieldType);\n}\n\nfunction collectRegisteredFieldDefinitions(\n registrations: ExtensionRegistrationRegistry | null,\n): Map<string, { name: string; type: \"string\" | \"number\" | \"boolean\" | \"array\" | \"object\" }> {\n const definitions = new Map<string, { name: string; type: \"string\" | \"number\" | \"boolean\" | \"array\" | \"object\" }>();\n if (!registrations) {\n return definitions;\n }\n for (const registration of registrations.item_fields) {\n for (const definition of registration.fields) {\n const fieldName = normalizeFieldName(definition.name);\n const fieldType = normalizeFieldType(definition.type);\n if (!fieldName || !fieldType) {\n continue;\n }\n const existing = definitions.get(fieldName);\n if (existing && existing.type !== fieldType) {\n throw new PmCliError(\n `Extension item field \"${fieldName}\" is declared with conflicting types: ${existing.type}, ${fieldType}`,\n EXIT_CODE.USAGE,\n {\n code: \"extension_item_field_type_conflict\",\n nextSteps: [\"Make every active extension declaration for this field use the same type.\"],\n },\n );\n }\n definitions.set(fieldName, { name: fieldName, type: fieldType });\n }\n }\n return definitions;\n}\n\nfunction assertNotReservedItemFieldName(fieldName: string): void {\n if (!RESERVED_ITEM_FIELD_NAMES.has(fieldName)) {\n return;\n }\n throw new PmCliError(`Extension item field \"${fieldName}\" collides with reserved item metadata`, EXIT_CODE.USAGE, {\n code: \"extension_item_field_reserved\",\n nextSteps: [\"Rename the extension item field, preferably with an extension-specific prefix.\"],\n });\n}\n\n/**\n * Implements collect registered item field names for the public runtime surface of this module.\n */\nexport function collectRegisteredItemFieldNames(registrations: ExtensionRegistrationRegistry | null): string[] {\n return [...collectRegisteredFieldDefinitions(registrations).keys()].sort((left, right) => left.localeCompare(right));\n}\n\n/**\n * Implements parse registered item field assignments for the public runtime surface of this module.\n */\nexport function parseRegisteredItemFieldAssignments(\n rawFields: string[] | undefined,\n registrations: ExtensionRegistrationRegistry | null,\n): Record<string, unknown> {\n if (!rawFields || rawFields.length === 0) {\n return {};\n }\n const definitions = collectRegisteredFieldDefinitions(registrations);\n const values: Record<string, unknown> = {};\n for (const raw of rawFields) {\n const { key, value } = parseFieldAssignment(raw);\n const definition = definitions.get(key);\n if (!definition) {\n const known = [...definitions.keys()].sort((left, right) => left.localeCompare(right));\n throw new PmCliError(`--field ${key} is not declared by an active extension item-field registration`, EXIT_CODE.USAGE, {\n code: \"extension_item_field_unknown\",\n recovery: { provided_fields: known },\n nextSteps: known.length > 0\n ? [`Use one of the declared fields: ${known.join(\", \")}`]\n : [\"Activate an extension that calls registerItemFields before setting extension fields.\"],\n });\n }\n assertNotReservedItemFieldName(definition.name);\n values[definition.name] = coerceRegisteredFieldValue(definition.name, definition.type, value);\n }\n return values;\n}\n\nfunction isValidFieldType(value: unknown, expectedType: \"string\" | \"number\" | \"boolean\" | \"array\" | \"object\"): boolean {\n if (expectedType === \"string\") {\n return typeof value === \"string\";\n }\n if (expectedType === \"number\") {\n return typeof value === \"number\" && Number.isFinite(value);\n }\n if (expectedType === \"boolean\") {\n return typeof value === \"boolean\";\n }\n if (expectedType === \"array\") {\n return Array.isArray(value);\n }\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isAllowedFieldValue(value: unknown, allowed: unknown[] | undefined): boolean {\n if (!allowed || allowed.length === 0) {\n return true;\n }\n return allowed.some((candidate) => Object.is(candidate, value));\n}\n\n/**\n * Implements apply registered item field defaults and validation for the public runtime surface of this module.\n */\nexport function applyRegisteredItemFieldDefaultsAndValidation(\n frontMatter: Record<string, unknown>,\n registrations: ExtensionRegistrationRegistry | null,\n options: { skipDefaultFields?: ReadonlySet<string> } = {},\n): void {\n if (!registrations) {\n return;\n }\n collectRegisteredFieldDefinitions(registrations);\n for (const registration of registrations.item_fields) {\n for (const definition of registration.fields) {\n const fieldName = normalizeFieldName(definition.name);\n if (!fieldName) {\n continue;\n }\n assertNotReservedItemFieldName(fieldName);\n if (\n !(fieldName in frontMatter) &&\n !options.skipDefaultFields?.has(fieldName) &&\n Object.prototype.hasOwnProperty.call(definition, \"default\")\n ) {\n frontMatter[fieldName] = cloneFieldValue(definition.default);\n }\n\n const currentValue = frontMatter[fieldName];\n if (currentValue === undefined) {\n continue;\n }\n const expectedType = normalizeFieldType(definition.type);\n if (expectedType && !isValidFieldType(currentValue, expectedType)) {\n throw new TypeError(`Item field \"${fieldName}\" must be of type ${expectedType}`);\n }\n\n const allowedValues = Array.isArray(definition.values) ? definition.values : undefined;\n if (!isAllowedFieldValue(currentValue, allowedValues)) {\n throw new TypeError(`Item field \"${fieldName}\" must match one of the configured allowed values`);\n }\n }\n }\n}\n", "/**\n * @module core/schema/runtime-field-values\n *\n * Resolves configurable schema, fields, statuses, and workflows for Runtime Field Values.\n */\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { runtimeFieldOptionTarget, type RuntimeFieldDefinitionResolved, type RuntimeFieldRegistry } from \"./runtime-schema.js\";\n\nfunction toCamelToken(value: string): string {\n const segments = value\n .trim()\n .replaceAll(/[^A-Za-z0-9]+/g, \" \")\n .split(/\\s+/)\n .filter((segment) => segment.length > 0)\n .map((segment) => segment.toLowerCase());\n if (segments.length === 0) {\n return value;\n }\n const [first, ...rest] = segments;\n return `${first}${rest.map((segment) => `${segment.slice(0, 1).toUpperCase()}${segment.slice(1)}`).join(\"\")}`;\n}\n\nfunction resolveCandidateOptionKeys(definition: RuntimeFieldDefinitionResolved): string[] {\n return [...new Set([\n runtimeFieldOptionTarget(definition),\n toCamelToken(definition.key),\n toCamelToken(definition.cli_flag),\n ...definition.cli_aliases.map((alias) => toCamelToken(alias)),\n ])];\n}\n\n/**\n * Implements read runtime field option value for the public runtime surface of this module.\n */\nexport function readRuntimeFieldOptionValue(\n options: Record<string, unknown>,\n definition: RuntimeFieldDefinitionResolved,\n): unknown {\n for (const candidateKey of resolveCandidateOptionKeys(definition)) {\n if (!Object.hasOwn(options, candidateKey)) {\n continue;\n }\n const value = options[candidateKey];\n if (value !== undefined) {\n return value;\n }\n }\n return undefined;\n}\n\nfunction normalizeStringArrayValue(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value\n .flatMap((entry) => normalizeStringArrayValue(entry))\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n }\n if (typeof value === \"string\") {\n return value\n .split(/[,\\n|]/)\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n }\n if (value === undefined || value === null) {\n return [];\n }\n return [String(value).trim()].filter((entry) => entry.length > 0);\n}\n\nfunction parseBooleanValue(raw: unknown, label: string): boolean {\n if (typeof raw === \"boolean\") {\n return raw;\n }\n if (typeof raw === \"number\") {\n if (raw === 1) {\n return true;\n }\n if (raw === 0) {\n return false;\n }\n }\n if (typeof raw === \"string\") {\n const normalized = raw.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\" || normalized === \"no\") {\n return false;\n }\n }\n throw new PmCliError(`${label} must be one of true|false|1|0|yes|no`, EXIT_CODE.USAGE);\n}\n\nfunction parseNumberValue(raw: unknown, label: string): number {\n if (typeof raw === \"number\" && Number.isFinite(raw)) {\n return raw;\n }\n const candidate = typeof raw === \"string\" ? raw.trim() : String(raw);\n const parsed = Number(candidate);\n if (!Number.isFinite(parsed)) {\n throw new PmCliError(`${label} must be a number`, EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\n/**\n * Implements coerce runtime field value for the public runtime surface of this module.\n */\nexport function coerceRuntimeFieldValue(\n definition: RuntimeFieldDefinitionResolved,\n rawValue: unknown,\n labelOverride?: string,\n): unknown {\n const label = labelOverride ?? `--${definition.cli_flag}`;\n if (definition.repeatable || definition.type === \"string_array\") {\n const values = normalizeStringArrayValue(rawValue);\n if (definition.type === \"number\") {\n return values.map((value) => parseNumberValue(value, label));\n }\n if (definition.type === \"boolean\") {\n return values.map((value) => parseBooleanValue(value, label));\n }\n return values;\n }\n\n const scalarRaw = Array.isArray(rawValue) ? rawValue[rawValue.length - 1] : rawValue;\n if (scalarRaw === undefined) {\n return undefined;\n }\n if (definition.type === \"number\") {\n return parseNumberValue(scalarRaw, label);\n }\n if (definition.type === \"boolean\") {\n return parseBooleanValue(scalarRaw, label);\n }\n return typeof scalarRaw === \"string\" ? scalarRaw : String(scalarRaw);\n}\n\nfunction shouldRequireFieldOnCreate(definition: RuntimeFieldDefinitionResolved, itemTypeName: string | undefined): boolean {\n if (!definition.required && !definition.required_on_create) {\n return false;\n }\n if (definition.required_types.length === 0) {\n return true;\n }\n if (!itemTypeName) {\n return false;\n }\n return definition.required_types.map((value) => value.toLowerCase()).includes(itemTypeName.trim().toLowerCase());\n}\n\n/**\n * Implements collect runtime create field values for the public runtime surface of this module.\n */\nexport function collectRuntimeCreateFieldValues(\n options: Record<string, unknown>,\n fieldRegistry: RuntimeFieldRegistry,\n itemTypeName: string | undefined,\n): { values: Record<string, unknown>; missing_required_flags: string[] } {\n const values: Record<string, unknown> = {};\n const missingRequiredFlags: string[] = [];\n for (const definition of fieldRegistry.command_to_fields.get(\"create\") ?? []) {\n const rawValue = readRuntimeFieldOptionValue(options, definition);\n if (rawValue === undefined) {\n if (shouldRequireFieldOnCreate(definition, itemTypeName)) {\n missingRequiredFlags.push(`--${definition.cli_flag}`);\n }\n continue;\n }\n values[definition.metadata_key] = coerceRuntimeFieldValue(definition, rawValue);\n }\n return {\n values,\n missing_required_flags: [...new Set(missingRequiredFlags)].sort((left, right) => left.localeCompare(right)),\n };\n}\n\n/**\n * Implements collect runtime update field values for the public runtime surface of this module.\n */\nexport function collectRuntimeUpdateFieldValues(\n options: Record<string, unknown>,\n fieldRegistry: RuntimeFieldRegistry,\n commands: Array<\"update\" | \"update_many\"> | null | undefined = [\"update\"],\n): Record<string, unknown> {\n const values: Record<string, unknown> = {};\n const definitions = (commands ?? [\"update\"]).flatMap((command) => fieldRegistry.command_to_fields.get(command) ?? []);\n const seen = new Set<string>();\n for (const definition of definitions) {\n const rawValue = readRuntimeFieldOptionValue(options, definition);\n if (rawValue === undefined) {\n continue;\n }\n if (seen.has(definition.metadata_key)) {\n continue;\n }\n seen.add(definition.metadata_key);\n values[definition.metadata_key] = coerceRuntimeFieldValue(definition, rawValue);\n }\n return values;\n}\n", "/**\n * @module core/item/item-format-version\n *\n * Tracks the on-disk item front-matter format version so a future breaking\n * storage change can tell already-current items apart from items that a staged\n * migration must rewrite, without re-parsing and structurally guessing every\n * file. The version is an explicit, monotonically increasing integer stamped in\n * front-matter as `pm_format_version`.\n *\n * Token economy is a first-class constraint here: the baseline version (1) is\n * the implicit default and is never serialized, so today's corpus gains zero\n * bytes and zero churn. The field only materializes once an item reaches\n * version 2 or higher. Absence of the field is therefore always interpreted as\n * the baseline version, both now and after future bumps. The classification\n * helpers below power the advisory `pm health` integrity surface and the\n * `pm validate` format-version check.\n */\nimport type { ItemMetadata } from \"../../types/index.js\";\n\n/**\n * The original (and implicit) item front-matter format version. Items missing a\n * `pm_format_version` field are always treated as this version, so the baseline\n * is never written to disk and adds no per-item token cost.\n */\nexport const BASELINE_ITEM_FORMAT_VERSION = 1;\n\n/**\n * The format version this runtime writes and considers current. When a breaking\n * front-matter change ships, bump this constant and add a migration that\n * rewrites items whose {@link effectiveItemFormatVersion} is lower; items at or\n * above it need no migration. It stays equal to\n * {@link BASELINE_ITEM_FORMAT_VERSION} until the first such change.\n */\nexport const CURRENT_ITEM_FORMAT_VERSION = 1;\n\n/**\n * Resolve the format version an item is effectively stored at. A present,\n * positive-integer `pm_format_version` is taken verbatim (including versions\n * ahead of this runtime, so they can be flagged rather than silently clamped);\n * an absent, malformed, or sub-baseline value resolves to\n * {@link BASELINE_ITEM_FORMAT_VERSION}.\n */\nexport function effectiveItemFormatVersion(metadata: Pick<ItemMetadata, \"pm_format_version\">): number {\n const raw = metadata.pm_format_version;\n if (typeof raw === \"number\" && Number.isInteger(raw) && raw >= BASELINE_ITEM_FORMAT_VERSION) {\n return raw;\n }\n return BASELINE_ITEM_FORMAT_VERSION;\n}\n\n/**\n * Reduce an item's `pm_format_version` to its persisted form: the baseline\n * version (and any malformed or sub-baseline value) is dropped so it is never\n * serialized, while versions at or above {@link BASELINE_ITEM_FORMAT_VERSION}\n * plus one are preserved verbatim. This keeps the field absent for the entire\n * current corpus and only writes it once an item genuinely advances past the\n * implicit baseline.\n */\nexport function normalizeItemFormatVersion(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isInteger(value) || value <= BASELINE_ITEM_FORMAT_VERSION) {\n return undefined;\n }\n return value;\n}\n\n/**\n * Relationship between an item's stored format version and the runtime's\n * current version: `outdated` (below current, a migration would rewrite it),\n * `ahead` (above current, written by a newer pm than this one), or `current`.\n */\nexport type ItemFormatVersionStatus = \"current\" | \"outdated\" | \"ahead\";\n\n/**\n * Classify a single stored format version against the runtime's current\n * version. Defaults to {@link CURRENT_ITEM_FORMAT_VERSION}; the `current`\n * parameter exists so callers (and tests) can evaluate against a hypothetical\n * future version without mutating the module constant.\n */\nexport function classifyItemFormatVersion(\n version: number,\n current: number = CURRENT_ITEM_FORMAT_VERSION,\n): ItemFormatVersionStatus {\n if (version < current) {\n return \"outdated\";\n }\n if (version > current) {\n return \"ahead\";\n }\n return \"current\";\n}\n\n/**\n * One item's reference (id or relative path) paired with the format version it\n * is stored at, used as input to {@link scanItemFormatVersions}.\n */\nexport interface ItemFormatVersionScanEntry {\n ref: string;\n version: number;\n}\n\n/**\n * Sorted references partitioned by how their stored format version compares to\n * the runtime's current version. References at the current version are omitted\n * from both lists.\n */\nexport interface ItemFormatVersionScanResult {\n outdated: string[];\n ahead: string[];\n}\n\n/**\n * Partition a set of items by format version into `outdated` (need migration)\n * and `ahead` (written by a newer pm) reference lists, each sorted for stable\n * diagnostics. Pushing all comparison branches into this pure, exhaustively\n * tested helper lets `pm health` and `pm validate` emit findings by iterating\n * the result lists, with no version-comparison branching of their own.\n */\nexport function scanItemFormatVersions(\n entries: readonly ItemFormatVersionScanEntry[],\n current: number = CURRENT_ITEM_FORMAT_VERSION,\n): ItemFormatVersionScanResult {\n const outdated: string[] = [];\n const ahead: string[] = [];\n for (const entry of entries) {\n const status = classifyItemFormatVersion(entry.version, current);\n if (status === \"outdated\") {\n outdated.push(entry.ref);\n } else if (status === \"ahead\") {\n ahead.push(entry.ref);\n }\n }\n return {\n outdated: outdated.sort((left, right) => left.localeCompare(right)),\n ahead: ahead.sort((left, right) => left.localeCompare(right)),\n };\n}\n", "/**\n * @module core/item/status\n *\n * Defines item parsing, formatting, and lifecycle helpers for Status.\n */\nimport { STATUS_VALUES } from \"../../types/index.js\";\nimport type { ItemStatus } from \"../../types/index.js\";\nimport { normalizeStatusInputWithRegistry, type RuntimeStatusRegistry } from \"../schema/runtime-schema.js\";\n\nconst STATUS_ALIAS_MAP: Readonly<Record<string, ItemStatus>> = {\n \"in-progress\": \"in_progress\",\n cancelled: \"canceled\",\n};\n\n/**\n * Implements normalize status input for the public runtime surface of this module.\n */\nexport function normalizeStatusInput(value: unknown, registry?: RuntimeStatusRegistry): ItemStatus | undefined {\n if (registry) {\n const normalizedFromRegistry = normalizeStatusInputWithRegistry(value, registry);\n if (normalizedFromRegistry) {\n return normalizedFromRegistry;\n }\n }\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n if (!normalized) {\n return undefined;\n }\n const canonical = STATUS_ALIAS_MAP[normalized] ?? normalized;\n if (!(STATUS_VALUES as readonly string[]).includes(canonical)) {\n return undefined;\n }\n return canonical as ItemStatus;\n}\n\n/**\n * Normalize a status against the runtime registry, falling back to the original\n * value when normalization does not resolve to a known status. This preserves\n * the long-standing `normalizeStatusInput(status, registry) ?? status` pattern\n * used by query commands so that unknown/custom statuses still compare against\n * registry sets by their raw value.\n */\nexport function normalizeStatusForRegistry(status: ItemStatus, registry: RuntimeStatusRegistry): ItemStatus {\n return normalizeStatusInput(status, registry) ?? status;\n}\n\n/**\n * Determine whether a status is terminal according to the runtime status\n * registry, applying registry-aware normalization first (with raw fallback).\n */\nexport function isTerminalStatus(status: ItemStatus, registry: RuntimeStatusRegistry): boolean {\n return registry.terminal_statuses.has(normalizeStatusForRegistry(status, registry));\n}\n", "/**\n * @module core/item/item-format\n *\n * Defines item parsing, formatting, and lifecycle helpers for Item Format.\n */\nimport { encode as encodeToon } from \"@toon-format/toon\";\nimport type {\n CalendarEvent,\n Comment,\n Dependency,\n ItemDocument,\n ItemMetadata,\n RuntimeSchemaSettings,\n ItemTestRunSummary,\n LinkedDoc,\n LinkedFile,\n LinkedTest,\n LogNote,\n PlanDecision,\n PlanDiscovery,\n PlanStep,\n PlanStepDoc,\n PlanStepFile,\n PlanStepLink,\n PlanStepStatus,\n PlanValidationCheck,\n RecurrenceRule,\n Reminder,\n} from \"../../types/index.js\";\nimport type { ItemFormat } from \"../../types/index.js\";\nimport {\n CONFIDENCE_TEXT_VALUES,\n ISSUE_SEVERITY_VALUES,\n PLAN_STEP_STATUS_VALUES,\n RECURRENCE_FREQUENCY_VALUES,\n RECURRENCE_WEEKDAY_VALUES,\n STATUS_VALUES,\n weekdayOrderIndex,\n} from \"../../types/index.js\";\nimport { coerceRuntimeFieldValue } from \"../schema/runtime-field-values.js\";\nimport {\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeFieldRegistry,\n type RuntimeStatusRegistry,\n} from \"../schema/runtime-schema.js\";\nimport { BASELINE_ITEM_FORMAT_VERSION, normalizeItemFormatVersion } from \"./item-format-version.js\";\nimport { normalizeStatusInput } from \"./status.js\";\nimport { decodeToonItemContent } from \"./toon-decode.js\";\nimport { EXIT_CODE, FRONT_MATTER_KEY_ORDER } from \"../shared/constants.js\";\nimport { findFirstMergeConflictMarker } from \"../shared/conflict-markers.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { orderObject } from \"../shared/serialization.js\";\nimport { compareTimestampStrings, isTimestampLiteral } from \"../shared/time.js\";\n\nconst LINKED_TEST_PM_CONTEXT_MODE_VALUES = new Set([\"schema\", \"tracker\", \"auto\"]);\nconst ITEM_TEST_RUN_STATUS_VALUES = new Set([\"passed\", \"failed\", \"stopped\", \"canceled\"]);\nconst PLAN_STEP_STATUS_SET = new Set<string>(PLAN_STEP_STATUS_VALUES);\n\nfunction normalizePathValue(value: string): string {\n return value.replaceAll(\"\\\\\", \"/\");\n}\n\nfunction firstNonZeroComparison(comparisons: readonly number[]): number {\n for (const comparison of comparisons) {\n if (comparison !== 0) {\n return comparison;\n }\n }\n return 0;\n}\n\nfunction deleteUndefinedFields(record: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(record)) {\n if (value === undefined) {\n delete record[key];\n }\n }\n}\n\nconst REQUIRED_STRING_FIELDS = [\n \"id\",\n \"title\",\n \"description\",\n \"created_at\",\n \"updated_at\",\n] as const;\n\nconst STATIC_FRONT_MATTER_FIELD_SET = new Set(FRONT_MATTER_KEY_ORDER);\n\ninterface RuntimeSchemaValidationContext {\n statusRegistry?: RuntimeStatusRegistry;\n fieldRegistry?: RuntimeFieldRegistry;\n unknownFieldPolicy: \"allow\" | \"warn\" | \"reject\";\n extensionFieldNames: ReadonlySet<string>;\n onWarning?: (warning: string) => void;\n}\n\n/**\n * Documents the item document format options payload exchanged by command, SDK, and package integrations.\n */\nexport interface ItemDocumentFormatOptions {\n format?: ItemFormat;\n schema?: RuntimeSchemaSettings;\n extensionFieldNames?: readonly string[];\n onWarning?: (warning: string) => void;\n}\n\nfunction resolveRuntimeSchemaValidationContext(\n options: ItemDocumentFormatOptions | undefined,\n): RuntimeSchemaValidationContext | undefined {\n if (!options?.schema) {\n return undefined;\n }\n return {\n statusRegistry: resolveRuntimeStatusRegistry(options.schema),\n fieldRegistry: resolveRuntimeFieldRegistry(options.schema),\n unknownFieldPolicy: options.schema.unknown_field_policy ?? \"allow\",\n extensionFieldNames: new Set(options.extensionFieldNames ?? []),\n onWarning: options.onWarning,\n };\n}\n\nfunction runtimeFieldRequiredForType(definition: RuntimeFieldRegistry[\"definitions\"][number], typeName: string): boolean {\n if (!definition.required) {\n return false;\n }\n if (definition.required_types.length === 0) {\n return true;\n }\n return definition.required_types.map((value) => value.toLowerCase()).includes(typeName.trim().toLowerCase());\n}\n\nfunction validationError(message: string): never {\n throw new PmCliError(`Invalid item front matter: ${message}`, EXIT_CODE.GENERIC_FAILURE);\n}\n\nfunction buildKnownFrontMatterKeys(runtimeContext: RuntimeSchemaValidationContext): Set<string> {\n const knownKeys = new Set(STATIC_FRONT_MATTER_FIELD_SET);\n for (const definition of runtimeContext.fieldRegistry?.definitions ?? []) {\n knownKeys.add(definition.metadata_key);\n }\n for (const fieldName of runtimeContext.extensionFieldNames) {\n knownKeys.add(fieldName);\n }\n return knownKeys;\n}\n\nfunction assertFrontMatterCondition(condition: boolean, message: string): void {\n if (!condition) {\n validationError(message);\n }\n}\n\nfunction assertTimestampField(record: Record<string, unknown>, fieldName: \"created_at\" | \"updated_at\" | \"deadline\"): void {\n const rawValue = record[fieldName];\n assertFrontMatterCondition(typeof rawValue === \"string\", `${fieldName} must be a string`);\n const timestamp = rawValue as string;\n assertFrontMatterCondition(isTimestampLiteral(timestamp), `${fieldName} must be a valid ISO timestamp`);\n}\n\nfunction assertPositiveIntegerField(\n record: Record<string, unknown>,\n fieldName: string,\n messagePrefix: string,\n): void {\n const value = record[fieldName];\n if (value === undefined) {\n return;\n }\n assertFrontMatterCondition(\n typeof value === \"number\" && Number.isInteger(value) && value >= 1,\n `${messagePrefix} must be an integer >= 1`,\n );\n}\n\nfunction assertOptionalTimestampString(record: Record<string, unknown>, fieldName: string, messagePrefix: string): void {\n const value = record[fieldName];\n if (value === undefined) {\n return;\n }\n assertFrontMatterCondition(typeof value === \"string\", `${messagePrefix} must be a string`);\n assertFrontMatterCondition(isTimestampLiteral(value as string), `${messagePrefix} must be a valid ISO timestamp`);\n}\n\nfunction assertRecurrenceWeekdays(value: unknown): void {\n if (value === undefined) {\n return;\n }\n assertFrontMatterCondition(Array.isArray(value), \"event.recurrence.by_weekday must be an array\");\n for (const weekday of value as unknown[]) {\n assertFrontMatterCondition(typeof weekday === \"string\", \"event.recurrence.by_weekday entries must be strings\");\n const normalizedWeekday = (weekday as string).trim().toLowerCase();\n assertFrontMatterCondition(\n RECURRENCE_WEEKDAY_VALUES.includes(normalizedWeekday as (typeof RECURRENCE_WEEKDAY_VALUES)[number]),\n `event.recurrence.by_weekday entries must be one of: ${RECURRENCE_WEEKDAY_VALUES.join(\", \")}`,\n );\n }\n}\n\nfunction assertRecurrenceMonthDays(value: unknown): void {\n if (value === undefined) {\n return;\n }\n assertFrontMatterCondition(Array.isArray(value), \"event.recurrence.by_month_day must be an array\");\n for (const day of value as unknown[]) {\n assertFrontMatterCondition(\n typeof day === \"number\" && Number.isInteger(day) && day >= 1 && day <= 31,\n \"event.recurrence.by_month_day entries must be integers 1..31\",\n );\n }\n}\n\nfunction assertRecurrenceExdates(value: unknown): void {\n if (value === undefined) {\n return;\n }\n assertFrontMatterCondition(Array.isArray(value), \"event.recurrence.exdates must be an array\");\n for (const exdate of value as unknown[]) {\n assertFrontMatterCondition(typeof exdate === \"string\", \"event.recurrence.exdates entries must be strings\");\n assertFrontMatterCondition(isTimestampLiteral(exdate as string), \"event.recurrence.exdates entries must be valid ISO timestamps\");\n }\n}\n\nfunction assertValidRecurrenceRule(recurrence: unknown): void {\n assertFrontMatterCondition(\n typeof recurrence === \"object\" && recurrence !== null && !Array.isArray(recurrence),\n \"event.recurrence must be an object\",\n );\n const recurrenceRecord = recurrence as Record<string, unknown>;\n assertFrontMatterCondition(typeof recurrenceRecord.freq === \"string\", \"event.recurrence.freq must be a string\");\n const frequency = (recurrenceRecord.freq as string).trim().toLowerCase();\n assertFrontMatterCondition(\n RECURRENCE_FREQUENCY_VALUES.includes(frequency as (typeof RECURRENCE_FREQUENCY_VALUES)[number]),\n `event.recurrence.freq must be one of: ${RECURRENCE_FREQUENCY_VALUES.join(\", \")}`,\n );\n\n assertPositiveIntegerField(recurrenceRecord, \"interval\", \"event.recurrence.interval\");\n assertPositiveIntegerField(recurrenceRecord, \"count\", \"event.recurrence.count\");\n assertOptionalTimestampString(recurrenceRecord, \"until\", \"event.recurrence.until\");\n assertRecurrenceWeekdays(recurrenceRecord.by_weekday);\n assertRecurrenceMonthDays(recurrenceRecord.by_month_day);\n assertRecurrenceExdates(recurrenceRecord.exdates);\n}\n\nfunction assertRequiredFrontMatterFields(record: Record<string, unknown>): string {\n for (const fieldName of REQUIRED_STRING_FIELDS) {\n assertFrontMatterCondition(typeof record[fieldName] === \"string\", `${fieldName} is required and must be a string`);\n }\n\n const itemType = record.type;\n assertFrontMatterCondition(typeof itemType === \"string\" && itemType.trim().length > 0, \"type must be a non-empty string\");\n\n const formatVersion = record.pm_format_version;\n if (formatVersion !== undefined) {\n assertFrontMatterCondition(\n typeof formatVersion === \"number\" && Number.isInteger(formatVersion) && formatVersion >= BASELINE_ITEM_FORMAT_VERSION,\n `pm_format_version must be an integer >= ${BASELINE_ITEM_FORMAT_VERSION}`,\n );\n }\n return itemType as string;\n}\n\nfunction assertStatusFrontMatterField(record: Record<string, unknown>, runtimeContext?: RuntimeSchemaValidationContext): void {\n const status = record.status;\n assertFrontMatterCondition(\n typeof status === \"string\" && status.trim().length > 0,\n \"status must be a non-empty string\",\n );\n const statusRegistry = runtimeContext?.statusRegistry;\n const normalizedStatus = normalizeStatusInput(status as string, statusRegistry);\n const statusDomain = statusRegistry\n ? statusRegistry.definitions.map((definition) => definition.id)\n : [...STATUS_VALUES];\n assertFrontMatterCondition(normalizedStatus !== undefined, `status must be one of: ${statusDomain.join(\", \")}`);\n}\n\nfunction assertPriorityAndTags(record: Record<string, unknown>): void {\n const priority = record.priority;\n assertFrontMatterCondition(\n typeof priority === \"number\" && Number.isInteger(priority) && [0, 1, 2, 3, 4].includes(priority),\n \"priority must be an integer 0..4\",\n );\n\n const tags = record.tags;\n assertFrontMatterCondition(Array.isArray(tags), \"tags must be an array\");\n for (const tag of tags as unknown[]) {\n assertFrontMatterCondition(typeof tag === \"string\", \"tags entries must be strings\");\n }\n}\n\nfunction assertConfidenceFrontMatterField(record: Record<string, unknown>): void {\n const confidence = record.confidence;\n if (confidence === undefined) {\n return;\n }\n if (typeof confidence === \"number\") {\n assertFrontMatterCondition(\n Number.isInteger(confidence) && confidence >= 0 && confidence <= 100,\n \"confidence number value must be an integer 0..100\",\n );\n return;\n }\n if (typeof confidence === \"string\") {\n const normalizedConfidence = confidence.trim().toLowerCase();\n const isKnownTextConfidence =\n normalizedConfidence === \"med\" || CONFIDENCE_TEXT_VALUES.includes(normalizedConfidence as (typeof CONFIDENCE_TEXT_VALUES)[number]);\n assertFrontMatterCondition(\n isKnownTextConfidence,\n `confidence string value must be one of: ${[...CONFIDENCE_TEXT_VALUES, \"med\"].join(\", \")}`,\n );\n return;\n }\n assertFrontMatterCondition(false, \"confidence must be a number or string\");\n}\n\nfunction assertSeverityFrontMatterField(record: Record<string, unknown>): void {\n const severity = record.severity;\n if (severity === undefined) {\n return;\n }\n if (typeof severity !== \"string\") {\n validationError(\"severity must be a string\");\n }\n const normalizedSeverity = severity.trim().toLowerCase();\n const isKnownSeverity =\n normalizedSeverity === \"med\" || ISSUE_SEVERITY_VALUES.includes(normalizedSeverity as (typeof ISSUE_SEVERITY_VALUES)[number]);\n assertFrontMatterCondition(\n isKnownSeverity,\n `severity value must be one of: ${[...ISSUE_SEVERITY_VALUES, \"med\"].join(\", \")}`,\n );\n}\n\nfunction assertRegressionFrontMatterField(record: Record<string, unknown>): void {\n if (record.regression !== undefined && typeof record.regression !== \"boolean\") {\n validationError(\"regression must be a boolean\");\n }\n}\n\nfunction assertReminderEntries(record: Record<string, unknown>): void {\n const reminders = record.reminders;\n if (reminders === undefined) {\n return;\n }\n assertFrontMatterCondition(Array.isArray(reminders), \"reminders must be an array\");\n for (const reminder of reminders as unknown[]) {\n assertFrontMatterCondition(typeof reminder === \"object\" && reminder !== null && !Array.isArray(reminder), \"reminders entries must be objects\");\n const reminderRecord = reminder as Record<string, unknown>;\n assertFrontMatterCondition(typeof reminderRecord.at === \"string\", \"reminder.at must be a string\");\n assertFrontMatterCondition(isTimestampLiteral(reminderRecord.at as string), \"reminder.at must be a valid ISO timestamp\");\n assertFrontMatterCondition(typeof reminderRecord.text === \"string\", \"reminder.text must be a string\");\n assertFrontMatterCondition((reminderRecord.text as string).trim().length > 0, \"reminder.text must not be empty\");\n }\n}\n\nfunction assertEventStringFields(eventRecord: Record<string, unknown>): void {\n for (const stringField of [\"title\", \"description\", \"location\", \"timezone\"] as const) {\n if (eventRecord[stringField] !== undefined) {\n assertFrontMatterCondition(typeof eventRecord[stringField] === \"string\", `event.${stringField} must be a string`);\n assertFrontMatterCondition(\n (eventRecord[stringField] as string).trim().length > 0,\n `event.${stringField} must not be empty`,\n );\n }\n }\n}\n\nfunction assertEventRecurrence(eventRecord: Record<string, unknown>): void {\n if (eventRecord.recurrence === undefined) {\n return;\n }\n assertValidRecurrenceRule(eventRecord.recurrence);\n if ((eventRecord.recurrence as Record<string, unknown>).until !== undefined) {\n assertFrontMatterCondition(\n compareTimestampStrings(\n (eventRecord.recurrence as Record<string, unknown>).until as string,\n eventRecord.start_at as string,\n ) >= 0,\n \"event.recurrence.until must be at or after event.start_at\",\n );\n }\n}\n\nfunction assertCalendarEventEntry(event: unknown): void {\n assertFrontMatterCondition(typeof event === \"object\" && event !== null && !Array.isArray(event), \"events entries must be objects\");\n const eventRecord = event as Record<string, unknown>;\n assertFrontMatterCondition(typeof eventRecord.start_at === \"string\", \"event.start_at must be a string\");\n assertFrontMatterCondition(isTimestampLiteral(eventRecord.start_at as string), \"event.start_at must be a valid ISO timestamp\");\n\n if (eventRecord.end_at !== undefined) {\n assertFrontMatterCondition(typeof eventRecord.end_at === \"string\", \"event.end_at must be a string\");\n assertFrontMatterCondition(isTimestampLiteral(eventRecord.end_at as string), \"event.end_at must be a valid ISO timestamp\");\n assertFrontMatterCondition(\n compareTimestampStrings(eventRecord.end_at as string, eventRecord.start_at as string) > 0,\n \"event.end_at must be after event.start_at\",\n );\n }\n\n assertEventStringFields(eventRecord);\n if (eventRecord.all_day !== undefined) {\n assertFrontMatterCondition(typeof eventRecord.all_day === \"boolean\", \"event.all_day must be a boolean\");\n }\n assertEventRecurrence(eventRecord);\n}\n\nfunction assertCalendarEvents(record: Record<string, unknown>): void {\n const events = record.events;\n if (events === undefined) {\n return;\n }\n assertFrontMatterCondition(Array.isArray(events), \"events must be an array\");\n for (const event of events as unknown[]) {\n assertCalendarEventEntry(event);\n }\n}\n\nfunction assertOptionalStringFields(record: Record<string, unknown>): void {\n for (const fieldName of [\"source_type\", \"source_owner\", \"design\", \"external_ref\"] as const) {\n const value = record[fieldName];\n if (value !== undefined) {\n assertFrontMatterCondition(typeof value === \"string\", `${fieldName} must be a string`);\n }\n }\n}\n\nfunction assertTypeOptionsField(record: Record<string, unknown>): void {\n const typeOptions = record.type_options;\n if (typeOptions === undefined) {\n return;\n }\n assertFrontMatterCondition(\n typeof typeOptions === \"object\" && typeOptions !== null && !Array.isArray(typeOptions),\n \"type_options must be an object\",\n );\n for (const [optionKey, optionValue] of Object.entries(typeOptions as Record<string, unknown>)) {\n assertFrontMatterCondition(optionKey.trim().length > 0, \"type_options keys must be non-empty\");\n assertFrontMatterCondition(typeof optionValue === \"string\", \"type_options values must be strings\");\n const optionText = optionValue as string;\n assertFrontMatterCondition(optionText.trim().length > 0, \"type_options values must be non-empty strings\");\n }\n}\n\nfunction coerceRuntimeFrontMatterFields(\n record: Record<string, unknown>,\n itemType: string,\n runtimeContext?: RuntimeSchemaValidationContext,\n): void {\n if (!runtimeContext?.fieldRegistry) {\n return;\n }\n for (const definition of runtimeContext.fieldRegistry.definitions) {\n const fieldValue = record[definition.metadata_key];\n if (fieldValue === undefined) {\n if (runtimeFieldRequiredForType(definition, itemType)) {\n validationError(`missing required schema field: ${definition.metadata_key}`);\n }\n continue;\n }\n try {\n record[definition.metadata_key] = coerceRuntimeFieldValue(\n definition,\n fieldValue,\n `metadata field \"${definition.metadata_key}\"`,\n );\n } catch (error: unknown) {\n validationError(String((error as { message?: unknown })?.message).replace(/^Invalid\\s+/u, \"\"));\n }\n }\n}\n\nfunction assertRuntimeUnknownFrontMatterFields(\n record: Record<string, unknown>,\n runtimeContext?: RuntimeSchemaValidationContext,\n): void {\n if (!runtimeContext || runtimeContext.unknownFieldPolicy === \"allow\") {\n return;\n }\n const knownKeys = buildKnownFrontMatterKeys(runtimeContext);\n const unknownKeys = Object.keys(record).filter((key) => !knownKeys.has(key)).sort((left, right) => left.localeCompare(right));\n if (unknownKeys.length === 0) {\n return;\n }\n if (runtimeContext.unknownFieldPolicy === \"reject\") {\n validationError(`unknown schema fields are not allowed: ${unknownKeys.join(\", \")}`);\n } else {\n runtimeContext.onWarning?.(`item_unknown_schema_fields:${unknownKeys.join(\",\")}`);\n }\n}\n\nfunction assertValidFrontMatter(\n frontMatter: unknown,\n runtimeContext?: RuntimeSchemaValidationContext,\n): asserts frontMatter is ItemMetadata {\n assertFrontMatterCondition(\n typeof frontMatter === \"object\" && frontMatter !== null && !Array.isArray(frontMatter),\n \"front matter must be an object\",\n );\n\n const record = frontMatter as Record<string, unknown>;\n const itemType = assertRequiredFrontMatterFields(record);\n assertStatusFrontMatterField(record, runtimeContext);\n assertPriorityAndTags(record);\n assertConfidenceFrontMatterField(record);\n assertSeverityFrontMatterField(record);\n assertRegressionFrontMatterField(record);\n assertTimestampField(record, \"created_at\");\n assertTimestampField(record, \"updated_at\");\n if (record.deadline !== undefined) {\n assertTimestampField(record, \"deadline\");\n }\n assertReminderEntries(record);\n assertCalendarEvents(record);\n assertOptionalTimestampString(record, \"closed_at\", \"closed_at\");\n assertOptionalStringFields(record);\n assertTypeOptionsField(record);\n coerceRuntimeFrontMatterFields(record, itemType, runtimeContext);\n assertRuntimeUnknownFrontMatterFields(record, runtimeContext);\n}\n\nfunction sortDependencies(values: Dependency[] | undefined): Dependency[] | undefined {\n if (!values || values.length === 0) return undefined;\n return [...values]\n .map((value) => ({\n id: value.id.trim().toLowerCase(),\n kind: value.kind,\n created_at: value.created_at,\n author: value.author?.trim() || undefined,\n source_kind: value.source_kind?.trim() || undefined,\n }))\n .sort((a, b) => {\n const byCreated = compareTimestampStrings(a.created_at, b.created_at);\n if (byCreated !== 0) return byCreated;\n const byId = a.id.localeCompare(b.id);\n if (byId !== 0) return byId;\n const byKind = a.kind.localeCompare(b.kind);\n if (byKind !== 0) return byKind;\n return (a.source_kind ?? \"\").localeCompare(b.source_kind ?? \"\");\n });\n}\n\nfunction sortLogValues<T extends Comment | LogNote>(values: T[] | undefined): T[] | undefined {\n if (!values || values.length === 0) return undefined;\n return [...values].sort((a, b) => {\n const byCreated = compareTimestampStrings(a.created_at, b.created_at);\n if (byCreated !== 0) return byCreated;\n const byText = a.text.localeCompare(b.text);\n if (byText !== 0) return byText;\n return a.author.localeCompare(b.author);\n });\n}\n\nfunction sortReminders(values: Reminder[] | undefined): Reminder[] | undefined {\n if (!values || values.length === 0) return undefined;\n const normalized = [...values]\n .map((value) => ({\n at: value.at,\n text: value.text.trim(),\n }))\n .filter((value) => value.text.length > 0)\n .sort((a, b) => {\n const byAt = compareTimestampStrings(a.at, b.at);\n if (byAt !== 0) return byAt;\n return a.text.localeCompare(b.text);\n });\n return normalized.length === 0 ? undefined : normalized;\n}\n\nfunction normalizeRecurrenceRule(value: RecurrenceRule | undefined): RecurrenceRule | undefined {\n if (!value) {\n return undefined;\n }\n const normalizedFrequency = value.freq.trim().toLowerCase();\n if (!RECURRENCE_FREQUENCY_VALUES.includes(normalizedFrequency as (typeof RECURRENCE_FREQUENCY_VALUES)[number])) {\n return undefined;\n }\n\n const byWeekday = Array.from(\n new Set(\n (value.by_weekday ?? [])\n .map((weekday) => weekday.trim().toLowerCase())\n .filter((weekday) => RECURRENCE_WEEKDAY_VALUES.includes(weekday as (typeof RECURRENCE_WEEKDAY_VALUES)[number])),\n ),\n ).sort(\n (a, b) =>\n weekdayOrderIndex(a as (typeof RECURRENCE_WEEKDAY_VALUES)[number]) -\n weekdayOrderIndex(b as (typeof RECURRENCE_WEEKDAY_VALUES)[number]),\n );\n\n const byMonthDay = Array.from(\n new Set(\n (value.by_month_day ?? [])\n .filter((day) => Number.isInteger(day) && day >= 1 && day <= 31)\n .map((day) => day as number),\n ),\n ).sort((a, b) => a - b);\n\n const exdates = Array.from(\n new Set(\n (value.exdates ?? [])\n .map((timestamp) => timestamp.trim())\n .filter((timestamp) => isTimestampLiteral(timestamp)),\n ),\n ).sort((a, b) => compareTimestampStrings(a, b));\n\n const normalized: RecurrenceRule = {\n freq: normalizedFrequency as (typeof RECURRENCE_FREQUENCY_VALUES)[number],\n interval: value.interval !== undefined && value.interval > 1 ? value.interval : undefined,\n count: value.count,\n until: value.until?.trim() || undefined,\n by_weekday: byWeekday.length > 0 ? (byWeekday as (typeof RECURRENCE_WEEKDAY_VALUES)[number][]) : undefined,\n by_month_day: byMonthDay.length > 0 ? byMonthDay : undefined,\n exdates: exdates.length > 0 ? exdates : undefined,\n };\n for (const [key, fieldValue] of Object.entries(normalized)) {\n if (fieldValue === undefined) {\n delete (normalized as unknown as Record<string, unknown>)[key];\n }\n }\n return normalized;\n}\n\nfunction sortEvents(values: CalendarEvent[] | undefined): CalendarEvent[] | undefined {\n if (!Array.isArray(values) || values.length === 0) {\n return undefined;\n }\n const normalized = [...values].map(normalizeCalendarEvent).sort(compareCalendarEvents);\n return normalized;\n}\n\nfunction normalizeCalendarEvent(value: CalendarEvent): CalendarEvent {\n const event: CalendarEvent = {\n start_at: value.start_at,\n end_at: value.end_at || undefined,\n title: value.title?.trim() || undefined,\n description: value.description?.trim() || undefined,\n location: value.location?.trim() || undefined,\n all_day: value.all_day,\n timezone: value.timezone?.trim() || undefined,\n recurrence: normalizeRecurrenceRule(value.recurrence),\n };\n deleteUndefinedFields(event as unknown as Record<string, unknown>);\n return event;\n}\n\nfunction compareCalendarEvents(a: CalendarEvent, b: CalendarEvent): number {\n return firstNonZeroComparison([\n compareTimestampStrings(a.start_at, b.start_at),\n (a.end_at ?? \"\").localeCompare(b.end_at ?? \"\"),\n (a.title ?? \"\").localeCompare(b.title ?? \"\"),\n Number(Boolean(a.all_day)) - Number(Boolean(b.all_day)),\n (a.timezone ?? \"\").localeCompare(b.timezone ?? \"\"),\n (a.location ?? \"\").localeCompare(b.location ?? \"\"),\n (a.description ?? \"\").localeCompare(b.description ?? \"\"),\n JSON.stringify(a.recurrence ?? {}).localeCompare(JSON.stringify(b.recurrence ?? {})),\n ]);\n}\n\nfunction normalizeFiles(values: LinkedFile[] | undefined): LinkedFile[] | undefined {\n if (!values || values.length === 0) return undefined;\n return values\n .map((value) => ({\n path: normalizePathValue(value.path),\n scope: value.scope,\n note: value.note?.trim() || undefined,\n }));\n}\n\nfunction normalizeTestRunSummaries(values: ItemTestRunSummary[] | undefined): ItemTestRunSummary[] | undefined {\n if (!values || values.length === 0) return undefined;\n const normalized = values\n .map(normalizeTestRunSummary)\n .filter((value) => value.run_id.length > 0 && value.started_at.length > 0 && value.finished_at.length > 0 && value.recorded_at.length > 0)\n .sort((a, b) =>\n firstNonZeroComparison([\n compareTimestampStrings(a.recorded_at, b.recorded_at),\n a.run_id.localeCompare(b.run_id),\n a.kind.localeCompare(b.kind),\n ]),\n );\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction normalizeNonNegativeInteger(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : undefined;\n}\n\nfunction normalizePositiveInteger(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 1 ? Math.floor(value) : undefined;\n}\n\nfunction stringOrEmpty(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction normalizeTestRunSummary(value: ItemTestRunSummary): ItemTestRunSummary {\n const runId = typeof value.run_id === \"string\" ? value.run_id.trim() : \"\";\n const kind = value.kind === \"test\" || value.kind === \"test-all\" ? value.kind : \"test\";\n const status = ITEM_TEST_RUN_STATUS_VALUES.has(value.status) ? value.status : \"failed\";\n const summary: ItemTestRunSummary = {\n run_id: runId,\n kind,\n status,\n started_at: stringOrEmpty(value.started_at),\n finished_at: stringOrEmpty(value.finished_at),\n recorded_at: stringOrEmpty(value.recorded_at),\n attempt: normalizePositiveInteger(value.attempt),\n resumed_from: value.resumed_from?.trim() || undefined,\n passed: normalizeNonNegativeInteger(value.passed) ?? 0,\n failed: normalizeNonNegativeInteger(value.failed) ?? 0,\n skipped: normalizeNonNegativeInteger(value.skipped) ?? 0,\n items: normalizeNonNegativeInteger(value.items),\n linked_tests: normalizeNonNegativeInteger(value.linked_tests),\n fail_on_skipped_triggered: value.fail_on_skipped_triggered === true ? true : undefined,\n };\n deleteUndefinedFields(summary as unknown as Record<string, unknown>);\n return summary;\n}\n\nfunction sortTests(values: LinkedTest[] | undefined): LinkedTest[] | undefined {\n if (!Array.isArray(values) || values.length === 0) return undefined;\n return [...values].map(normalizeLinkedTest).sort(compareLinkedTests);\n}\n\nfunction normalizeTrimmedStringList(value: readonly string[] | undefined): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n const normalized = [\n ...new Set(\n value\n .filter((entry) => typeof entry === \"string\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0),\n ),\n ].sort((a, b) => a.localeCompare(b));\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction isPlainObjectRecord(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction isUnsafeObjectKey(key: string): boolean {\n return key === \"__proto__\" || key === \"constructor\" || key === \"prototype\";\n}\n\nfunction normalizeStringRecord(value: Record<string, string> | undefined): Record<string, string> | undefined {\n if (!isPlainObjectRecord(value)) {\n return undefined;\n }\n const entries = Object.entries(value)\n .map(([key, recordValue]) => [key.trim(), String(recordValue).trim()] as const)\n .filter(([key, recordValue]) => key.length > 0 && !isUnsafeObjectKey(key) && recordValue.length > 0)\n .sort(([left], [right]) => left.localeCompare(right));\n return entries.length > 0 ? Object.fromEntries(entries) : undefined;\n}\n\nfunction normalizeNumericRecord(value: Record<string, number> | undefined): Record<string, number> | undefined {\n if (!isPlainObjectRecord(value)) {\n return undefined;\n }\n const entries = Object.entries(value)\n .map(([key, recordValue]) => [key.trim(), Number(recordValue)] as const)\n .filter(([key, recordValue]) => key.length > 0 && !isUnsafeObjectKey(key) && Number.isFinite(recordValue))\n .sort(([left], [right]) => left.localeCompare(right));\n return entries.length > 0 ? Object.fromEntries(entries) : undefined;\n}\n\nfunction normalizeLinkedTestContextMode(value: string | undefined): LinkedTest[\"pm_context_mode\"] | undefined {\n const normalized = value?.trim().toLowerCase();\n if (!normalized || !LINKED_TEST_PM_CONTEXT_MODE_VALUES.has(normalized)) {\n return undefined;\n }\n return normalized as LinkedTest[\"pm_context_mode\"];\n}\n\nfunction normalizeLinkedTest(value: LinkedTest): LinkedTest {\n const test: LinkedTest = {\n command: value.command?.trim() || undefined,\n path: value.path ? normalizePathValue(value.path) : undefined,\n scope: value.scope,\n timeout_seconds:\n typeof value.timeout_seconds === \"number\" && Number.isFinite(value.timeout_seconds) && value.timeout_seconds > 0\n ? value.timeout_seconds\n : undefined,\n pm_context_mode: normalizeLinkedTestContextMode(value.pm_context_mode),\n env_set: normalizeStringRecord(value.env_set),\n env_clear: normalizeTrimmedStringList(value.env_clear),\n shared_host_safe: value.shared_host_safe === true ? true : undefined,\n assert_stdout_contains: normalizeTrimmedStringList(value.assert_stdout_contains),\n assert_stdout_regex: normalizeTrimmedStringList(value.assert_stdout_regex),\n assert_stderr_contains: normalizeTrimmedStringList(value.assert_stderr_contains),\n assert_stderr_regex: normalizeTrimmedStringList(value.assert_stderr_regex),\n assert_stdout_min_lines: normalizeNonNegativeInteger(value.assert_stdout_min_lines),\n assert_json_field_equals: normalizeStringRecord(value.assert_json_field_equals),\n assert_json_field_gte: normalizeNumericRecord(value.assert_json_field_gte),\n note: value.note?.trim() || undefined,\n };\n deleteUndefinedFields(test as unknown as Record<string, unknown>);\n return test;\n}\n\nfunction compareLinkedTests(a: LinkedTest, b: LinkedTest): number {\n return firstNonZeroComparison([\n a.scope.localeCompare(b.scope),\n compareOptionalStrings(a.path, b.path),\n compareOptionalStrings(a.command, b.command),\n compareOptionalNumbers(a.timeout_seconds, b.timeout_seconds),\n compareOptionalStrings(a.pm_context_mode, b.pm_context_mode),\n Number(Boolean(a.shared_host_safe)) - Number(Boolean(b.shared_host_safe)),\n compareJsonValues(a.env_clear, b.env_clear, []),\n compareJsonValues(a.env_set, b.env_set, {}),\n compareJsonValues(a.assert_stdout_contains, b.assert_stdout_contains, []),\n compareJsonValues(a.assert_stdout_regex, b.assert_stdout_regex, []),\n compareJsonValues(a.assert_stderr_contains, b.assert_stderr_contains, []),\n compareJsonValues(a.assert_stderr_regex, b.assert_stderr_regex, []),\n compareOptionalNumbers(a.assert_stdout_min_lines, b.assert_stdout_min_lines),\n compareJsonValues(a.assert_json_field_equals, b.assert_json_field_equals, {}),\n compareJsonValues(a.assert_json_field_gte, b.assert_json_field_gte, {}),\n compareOptionalStrings(a.note, b.note),\n ]);\n}\n\nfunction compareOptionalStrings(left: string | undefined, right: string | undefined): number {\n return (left ?? \"\").localeCompare(right ?? \"\");\n}\n\nfunction compareOptionalNumbers(left: number | undefined, right: number | undefined): number {\n return (left ?? 0) - (right ?? 0);\n}\n\nfunction compareJsonValues(left: unknown, right: unknown, fallback: unknown): number {\n return JSON.stringify(left ?? fallback).localeCompare(JSON.stringify(right ?? fallback));\n}\n\nfunction sortDocs(values: LinkedDoc[] | undefined): LinkedDoc[] | undefined {\n if (!values || values.length === 0) return undefined;\n return [...values]\n .map((value) => ({\n path: normalizePathValue(value.path),\n scope: value.scope,\n note: value.note?.trim() || undefined,\n }))\n .sort((a, b) => {\n const byScope = a.scope.localeCompare(b.scope);\n if (byScope !== 0) return byScope;\n const byPath = a.path.localeCompare(b.path);\n if (byPath !== 0) return byPath;\n return (a.note ?? \"\").localeCompare(b.note ?? \"\");\n });\n}\n\nfunction trimStringOrUndefined(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizePlanStepLinks(value: unknown): PlanStepLink[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanStepLink[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const id = trimStringOrUndefined(record.id);\n const kind = trimStringOrUndefined(record.kind);\n if (!id || !kind) continue;\n const link: PlanStepLink = { id, kind: kind as PlanStepLink[\"kind\"] };\n const note = trimStringOrUndefined(record.note);\n if (note) link.note = note;\n if (record.required_before_step === true) link.required_before_step = true;\n out.push(link);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanStepFiles(value: unknown): PlanStepFile[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanStepFile[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const path = trimStringOrUndefined(record.path);\n if (!path) continue;\n const file: PlanStepFile = { path: normalizePathValue(path) };\n if (record.scope === \"project\" || record.scope === \"global\") file.scope = record.scope;\n const note = trimStringOrUndefined(record.note);\n if (note) file.note = note;\n out.push(file);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanStepTests(value: unknown): { command?: string; path?: string; note?: string }[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: { command?: string; path?: string; note?: string }[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const command = trimStringOrUndefined(record.command);\n const path = trimStringOrUndefined(record.path);\n if (!command && !path) continue;\n const test: { command?: string; path?: string; note?: string } = {};\n if (command) test.command = command;\n if (path) test.path = normalizePathValue(path);\n const note = trimStringOrUndefined(record.note);\n if (note) test.note = note;\n out.push(test);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanStepDocs(value: unknown): PlanStepDoc[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanStepDoc[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const path = trimStringOrUndefined(record.path);\n if (!path) continue;\n const doc: PlanStepDoc = { path: normalizePathValue(path) };\n if (record.scope === \"project\" || record.scope === \"global\") doc.scope = record.scope;\n const note = trimStringOrUndefined(record.note);\n if (note) doc.note = note;\n out.push(doc);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanStepEntry(entry: unknown): PlanStep | undefined {\n if (entry === null || typeof entry !== \"object\") {\n return undefined;\n }\n const record = entry as Record<string, unknown>;\n const id = trimStringOrUndefined(record.id);\n const title = trimStringOrUndefined(record.title);\n const statusRaw = trimStringOrUndefined(record.status);\n const status = statusRaw && PLAN_STEP_STATUS_SET.has(statusRaw) ? (statusRaw as PlanStepStatus) : undefined;\n const orderRaw = record.order;\n const order =\n typeof orderRaw === \"number\" && Number.isFinite(orderRaw)\n ? orderRaw\n : typeof orderRaw === \"string\" && orderRaw.trim().length > 0\n ? Number(orderRaw)\n : Number.NaN;\n const created_at = typeof record.created_at === \"string\" ? record.created_at : \"\";\n const updated_at = typeof record.updated_at === \"string\" ? record.updated_at : \"\";\n if (!id || !title || !status || !Number.isFinite(order) || !created_at || !updated_at) {\n return undefined;\n }\n const step: PlanStep = {\n id,\n order,\n title,\n status,\n created_at,\n updated_at,\n };\n applyPlanStepOptionalFields(step, record);\n return step;\n}\n\nfunction applyPlanStepOptionalFields(step: PlanStep, record: Record<string, unknown>): void {\n const stringFields = [\n [\"body\", \"body\"],\n [\"owner\", \"owner\"],\n [\"evidence\", \"evidence\"],\n [\"blocked_reason\", \"blocked_reason\"],\n [\"superseded_by\", \"superseded_by\"],\n ] as const satisfies readonly (readonly [keyof PlanStep, string])[];\n for (const [target, source] of stringFields) {\n const value = trimStringOrUndefined(record[source]);\n if (value) {\n step[target] = value as never;\n }\n }\n const completedAt = typeof record.completed_at === \"string\" ? record.completed_at : undefined;\n if (completedAt && completedAt.length > 0) {\n step.completed_at = completedAt;\n }\n const collectionFields = [\n [\"linked_items\", \"linked_items\", normalizePlanStepLinks],\n [\"files\", \"files\", normalizePlanStepFiles],\n [\"tests\", \"tests\", normalizePlanStepTests],\n [\"docs\", \"docs\", normalizePlanStepDocs],\n ] as const;\n for (const [target, source, normalize] of collectionFields) {\n const value = normalize(record[source]);\n if (value) {\n step[target] = value as never;\n }\n }\n}\n\nfunction normalizePlanSteps(value: unknown): PlanStep[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out = value.flatMap((entry) => {\n const step = normalizePlanStepEntry(entry);\n return step ? [step] : [];\n });\n out.sort((left, right) => left.order - right.order);\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanDecisions(value: unknown): PlanDecision[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanDecision[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const ts = typeof record.ts === \"string\" ? record.ts : \"\";\n const author = typeof record.author === \"string\" ? record.author : \"\";\n const decision = trimStringOrUndefined(record.decision);\n if (!ts || !author || !decision) continue;\n const item: PlanDecision = { ts, author, decision };\n const rationale = trimStringOrUndefined(record.rationale);\n if (rationale) item.rationale = rationale;\n const evidence = trimStringOrUndefined(record.evidence);\n if (evidence) item.evidence = evidence;\n const stepId = trimStringOrUndefined(record.step_id);\n if (stepId) item.step_id = stepId;\n out.push(item);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanDiscoveries(value: unknown): PlanDiscovery[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanDiscovery[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const ts = typeof record.ts === \"string\" ? record.ts : \"\";\n const author = typeof record.author === \"string\" ? record.author : \"\";\n const text = trimStringOrUndefined(record.text);\n if (!ts || !author || !text) continue;\n const item: PlanDiscovery = { ts, author, text };\n const stepId = trimStringOrUndefined(record.step_id);\n if (stepId) item.step_id = stepId;\n out.push(item);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanValidation(value: unknown): PlanValidationCheck[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanValidationCheck[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const text = trimStringOrUndefined(record.text);\n if (!text) continue;\n const item: PlanValidationCheck = { text };\n const command = trimStringOrUndefined(record.command);\n if (command) item.command = command;\n const expected = trimStringOrUndefined(record.expected);\n if (expected) item.expected = expected;\n out.push(item);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizeTypeOptions(values: Record<string, string> | undefined): Record<string, string> | undefined {\n if (!values) {\n return undefined;\n }\n const normalizedEntries = Object.entries(values)\n .map(([key, value]) => [key.trim(), value.trim()] as const)\n .filter(([key, value]) => key.length > 0 && value.length > 0)\n .sort((left, right) => left[0].localeCompare(right[0]));\n if (normalizedEntries.length === 0) {\n return undefined;\n }\n return Object.fromEntries(normalizedEntries);\n}\n\nfunction normalizeBody(body: string): string {\n let start = 0;\n while (start < body.length && body[start] === \"\\n\") {\n start += 1;\n }\n return body.slice(start).trimEnd();\n}\n\nfunction normalizeConfidenceValue(value: ItemMetadata[\"confidence\"] | undefined): ItemMetadata[\"confidence\"] | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (typeof value === \"number\") {\n return value;\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"med\") {\n return \"medium\";\n }\n if (CONFIDENCE_TEXT_VALUES.includes(normalized as (typeof CONFIDENCE_TEXT_VALUES)[number])) {\n return normalized as (typeof CONFIDENCE_TEXT_VALUES)[number];\n }\n return undefined;\n}\n\nfunction normalizeSeverityValue(value: ItemMetadata[\"severity\"] | undefined): ItemMetadata[\"severity\"] | undefined {\n if (value === undefined) {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"med\") {\n return \"medium\";\n }\n if (ISSUE_SEVERITY_VALUES.includes(normalized as (typeof ISSUE_SEVERITY_VALUES)[number])) {\n return normalized as (typeof ISSUE_SEVERITY_VALUES)[number];\n }\n return undefined;\n}\n\nfunction emptyStringToUndefined(value: string | undefined): string | undefined {\n return value || undefined;\n}\n\nfunction copyExtensionFrontMatterFields(normalized: ItemMetadata, source: ItemMetadata): void {\n const targetRecord = normalized as unknown as Record<string, unknown>;\n const sourceRecord = source as unknown as Record<string, unknown>;\n for (const [key, value] of Object.entries(sourceRecord)) {\n if (isUnsafeObjectKey(key) || Object.prototype.hasOwnProperty.call(targetRecord, key) || value === undefined) {\n continue;\n }\n targetRecord[key] = value;\n }\n}\n\nfunction coerceNormalizedRuntimeFields(\n normalized: ItemMetadata,\n runtimeContext: RuntimeSchemaValidationContext | undefined,\n): void {\n if (!runtimeContext?.fieldRegistry) {\n return;\n }\n const record = normalized as unknown as Record<string, unknown>;\n for (const definition of runtimeContext.fieldRegistry.definitions) {\n const currentValue = record[definition.metadata_key];\n if (currentValue === undefined) {\n continue;\n }\n record[definition.metadata_key] = coerceRuntimeFieldValue(\n definition,\n currentValue,\n `metadata field \"${definition.metadata_key}\"`,\n );\n }\n}\n\nfunction assertNormalizedUnknownFields(\n normalized: ItemMetadata,\n runtimeContext: RuntimeSchemaValidationContext | undefined,\n): void {\n if (!runtimeContext || runtimeContext.unknownFieldPolicy === \"allow\") {\n return;\n }\n const knownKeys = buildKnownFrontMatterKeys(runtimeContext);\n const record = normalized as unknown as Record<string, unknown>;\n const unknownKeys = Object.keys(record)\n .filter((key) => !knownKeys.has(key))\n .sort((left, right) => left.localeCompare(right));\n if (unknownKeys.length > 0 && runtimeContext.unknownFieldPolicy === \"reject\") {\n validationError(`unknown schema fields are not allowed: ${unknownKeys.join(\", \")}`);\n }\n if (unknownKeys.length > 0) {\n runtimeContext.onWarning?.(`item_unknown_schema_fields:${unknownKeys.join(\",\")}`);\n }\n}\n\n/**\n * Implements normalize front matter for the public runtime surface of this module.\n */\nexport function normalizeFrontMatter(\n frontMatter: ItemMetadata,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\"> = {},\n): ItemMetadata {\n const runtimeContext = resolveRuntimeSchemaValidationContext(options);\n const normalizedStatus = normalizeStatusInput(frontMatter.status, runtimeContext?.statusRegistry) ?? frontMatter.status;\n const tags = Array.from(new Set(frontMatter.tags.map((tag) => tag.trim().toLowerCase()).filter(Boolean))).sort((a, b) =>\n a.localeCompare(b),\n );\n const normalized: ItemMetadata = {\n id: frontMatter.id,\n title: frontMatter.title,\n description: frontMatter.description,\n type: frontMatter.type,\n pm_format_version: normalizeItemFormatVersion(frontMatter.pm_format_version),\n source_type: trimStringOrUndefined(frontMatter.source_type),\n type_options: normalizeTypeOptions(frontMatter.type_options),\n status: normalizedStatus,\n priority: frontMatter.priority,\n tags,\n created_at: frontMatter.created_at,\n updated_at: frontMatter.updated_at,\n dependencies: sortDependencies(frontMatter.dependencies),\n comments: sortLogValues(frontMatter.comments),\n notes: sortLogValues(frontMatter.notes),\n learnings: sortLogValues(frontMatter.learnings),\n files: normalizeFiles(frontMatter.files),\n tests: sortTests(frontMatter.tests),\n test_runs: normalizeTestRunSummaries(frontMatter.test_runs),\n docs: sortDocs(frontMatter.docs),\n deadline: emptyStringToUndefined(frontMatter.deadline),\n reminders: sortReminders(frontMatter.reminders),\n events: sortEvents(frontMatter.events),\n closed_at: emptyStringToUndefined(frontMatter.closed_at),\n assignee: trimStringOrUndefined(frontMatter.assignee),\n source_owner: trimStringOrUndefined(frontMatter.source_owner),\n author: emptyStringToUndefined(frontMatter.author),\n estimated_minutes: frontMatter.estimated_minutes,\n acceptance_criteria: frontMatter.acceptance_criteria ?? undefined,\n design: frontMatter.design ?? undefined,\n external_ref: frontMatter.external_ref ?? undefined,\n definition_of_ready: trimStringOrUndefined(frontMatter.definition_of_ready),\n order: frontMatter.order,\n goal: trimStringOrUndefined(frontMatter.goal),\n objective: trimStringOrUndefined(frontMatter.objective),\n value: trimStringOrUndefined(frontMatter.value),\n impact: trimStringOrUndefined(frontMatter.impact),\n outcome: trimStringOrUndefined(frontMatter.outcome),\n why_now: trimStringOrUndefined(frontMatter.why_now),\n parent: trimStringOrUndefined(frontMatter.parent),\n reviewer: trimStringOrUndefined(frontMatter.reviewer),\n risk: frontMatter.risk ?? undefined,\n confidence: normalizeConfidenceValue(frontMatter.confidence),\n sprint: trimStringOrUndefined(frontMatter.sprint),\n release: trimStringOrUndefined(frontMatter.release),\n blocked_by: trimStringOrUndefined(frontMatter.blocked_by),\n blocked_reason: trimStringOrUndefined(frontMatter.blocked_reason),\n unblock_note: trimStringOrUndefined(frontMatter.unblock_note),\n reporter: trimStringOrUndefined(frontMatter.reporter),\n severity: normalizeSeverityValue(frontMatter.severity),\n environment: trimStringOrUndefined(frontMatter.environment),\n repro_steps: trimStringOrUndefined(frontMatter.repro_steps),\n resolution: trimStringOrUndefined(frontMatter.resolution),\n expected_result: trimStringOrUndefined(frontMatter.expected_result),\n actual_result: trimStringOrUndefined(frontMatter.actual_result),\n affected_version: trimStringOrUndefined(frontMatter.affected_version),\n fixed_version: trimStringOrUndefined(frontMatter.fixed_version),\n component: trimStringOrUndefined(frontMatter.component),\n regression: frontMatter.regression,\n customer_impact: trimStringOrUndefined(frontMatter.customer_impact),\n close_reason: emptyStringToUndefined(frontMatter.close_reason),\n plan_mode: trimStringOrUndefined(frontMatter.plan_mode) as ItemMetadata[\"plan_mode\"],\n plan_scope: trimStringOrUndefined(frontMatter.plan_scope),\n plan_harness: trimStringOrUndefined(frontMatter.plan_harness) as ItemMetadata[\"plan_harness\"],\n plan_resume_context: trimStringOrUndefined(frontMatter.plan_resume_context),\n plan_steps: normalizePlanSteps(frontMatter.plan_steps),\n plan_decisions: normalizePlanDecisions(frontMatter.plan_decisions),\n plan_discoveries: normalizePlanDiscoveries(frontMatter.plan_discoveries),\n plan_validation: normalizePlanValidation(frontMatter.plan_validation),\n };\n copyExtensionFrontMatterFields(normalized, frontMatter);\n coerceNormalizedRuntimeFields(normalized, runtimeContext);\n assertNormalizedUnknownFields(normalized, runtimeContext);\n deleteUndefinedFields(normalized as unknown as Record<string, unknown>);\n return normalized;\n}\n\nfunction orderFrontMatter(frontMatter: ItemMetadata): Record<string, unknown> {\n return orderObject(frontMatter as unknown as Record<string, unknown>, FRONT_MATTER_KEY_ORDER);\n}\n\nfunction findJsonObjectEnd(content: string): number {\n let depth = 0;\n let inString = false;\n let escaped = false;\n\n for (let i = 0; i < content.length; i += 1) {\n const char = content[i];\n if (inString) {\n if (escaped) {\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (char === \"\\\"\") {\n inString = false;\n }\n continue;\n }\n if (char === \"\\\"\") {\n inString = true;\n continue;\n }\n if (char === \"{\") {\n depth += 1;\n continue;\n }\n if (char === \"}\") {\n depth -= 1;\n if (depth === 0) {\n return i;\n }\n }\n }\n\n return -1;\n}\n\n/**\n * Implements split front matter for the public runtime surface of this module.\n */\nexport function splitFrontMatter(content: string): { frontMatter: string; body: string } {\n if (!content.startsWith(\"{\")) {\n return { frontMatter: \"\", body: content };\n }\n const end = findJsonObjectEnd(content);\n if (end < 0) {\n return { frontMatter: \"\", body: content };\n }\n const frontMatter = content.slice(0, end + 1);\n const body = content.slice(end + 1).replace(/^\\r?\\n+/, \"\");\n return { frontMatter, body };\n}\n\nfunction stripLeadingYamlDocument(content: string): { content: string; stripped: boolean } {\n const normalizedContent = content.charCodeAt(0) === 0xfeff ? content.slice(1) : content;\n const opener = normalizedContent.match(/^[ \\t]*---[ \\t]*(?:\\r?\\n|$)/);\n if (!opener) {\n return { content: normalizedContent, stripped: false };\n }\n\n let cursor = opener[0].length;\n while (cursor < normalizedContent.length) {\n const nextNewline = normalizedContent.indexOf(\"\\n\", cursor);\n const lineEnd = nextNewline === -1 ? normalizedContent.length : nextNewline;\n const line = normalizedContent.slice(cursor, lineEnd).replace(/\\r$/, \"\");\n const afterLine = nextNewline === -1 ? lineEnd : lineEnd + 1;\n if (line.trim() === \"---\") {\n return { content: normalizedContent.slice(afterLine).replace(/^\\s+/, \"\"), stripped: true };\n }\n cursor = afterLine;\n }\n\n return { content: normalizedContent, stripped: false };\n}\n\nfunction normalizeParsedFrontMatter(\n frontMatter: ItemMetadata,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\">,\n): ItemMetadata {\n return normalizeFrontMatter(frontMatter, { ...options, onWarning: undefined });\n}\n\nfunction parseJsonMarkdownItemDocument(\n content: string,\n runtimeContext?: RuntimeSchemaValidationContext,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\"> = {},\n): ItemDocument {\n const normalized = stripLeadingYamlDocument(content);\n if (normalized.stripped) {\n options.onWarning?.(\"json_markdown_leading_yaml_frontmatter_ignored\");\n }\n const { frontMatter, body } = splitFrontMatter(normalized.content);\n if (!frontMatter) {\n const trimmed = content.trimStart();\n if (trimmed.startsWith(\"{\")) {\n validationError(\"JSON front matter is not valid JSON\");\n }\n validationError(\"missing JSON front matter\");\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(frontMatter);\n } catch {\n validationError(\"JSON front matter is not valid JSON\");\n }\n assertValidFrontMatter(parsed, runtimeContext);\n\n return {\n metadata: normalizeParsedFrontMatter(parsed, options),\n body: normalizeBody(body),\n };\n}\n\nfunction parseToonItemDocument(\n content: string,\n runtimeContext?: RuntimeSchemaValidationContext,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\"> = {},\n): ItemDocument {\n let parsed: unknown;\n try {\n // decodeToonItemContent transparently recovers documents that the upstream\n // strict decoder rejects (bracketed-token-then-colon inside a quoted value;\n // see toon-decode.ts). The recovery is lossless, so it stays silent rather\n // than emitting a per-read warning that would perpetually flip pm health\n // red for legacy files. The behavior is pinned by toon-decode.spec.ts.\n parsed = decodeToonItemContent(content).value;\n } catch {\n validationError(\"TOON item document is not valid TOON\");\n }\n assertFrontMatterCondition(\n typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed),\n \"TOON item document must be an object\",\n );\n const record = parsed as Record<string, unknown>;\n\n if (Object.prototype.hasOwnProperty.call(record, \"front_matter\")) {\n assertValidFrontMatter(record.front_matter, runtimeContext);\n assertFrontMatterCondition(\n record.body === undefined || typeof record.body === \"string\",\n \"TOON item document body must be a string\",\n );\n return {\n metadata: normalizeParsedFrontMatter(record.front_matter, options),\n body: normalizeBody(typeof record.body === \"string\" ? record.body : \"\"),\n };\n }\n\n const { body, ...frontMatterRecord } = record;\n assertFrontMatterCondition(\n body === undefined || typeof body === \"string\",\n \"TOON item document body must be a string\",\n );\n assertValidFrontMatter(frontMatterRecord, runtimeContext);\n return {\n metadata: normalizeParsedFrontMatter(frontMatterRecord, options),\n body: normalizeBody(typeof body === \"string\" ? body : \"\"),\n };\n}\n\nfunction serializeJsonMarkdownItemDocument(\n document: ItemDocument,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\"> = {},\n): string {\n const normalizedFrontMatter = normalizeFrontMatter(document.metadata, options);\n const orderedFrontMatter = orderFrontMatter(normalizedFrontMatter);\n const serializedFrontMatter = JSON.stringify(orderedFrontMatter, null, 2);\n const normalizedBody = normalizeBody(document.body ?? \"\");\n if (!normalizedBody) {\n return `${serializedFrontMatter}\\n`;\n }\n return `${serializedFrontMatter}\\n\\n${normalizedBody}\\n`;\n}\n\nfunction serializeToonItemDocument(\n document: ItemDocument,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\"> = {},\n): string {\n const normalizedFrontMatter = normalizeFrontMatter(document.metadata, options);\n const orderedFrontMatter = orderFrontMatter(normalizedFrontMatter);\n const normalizedBody = normalizeBody(document.body ?? \"\");\n return `${encodeToon({ ...orderedFrontMatter, body: normalizedBody })}\\n`;\n}\n\n/**\n * Implements parse item document for the public runtime surface of this module.\n */\nexport function parseItemDocument(content: string, options: ItemDocumentFormatOptions = {}): ItemDocument {\n const conflictMarker = findFirstMergeConflictMarker(content);\n if (conflictMarker) {\n throw new PmCliError(\n `Merge conflict markers detected in item document at line ${conflictMarker.line} (${conflictMarker.marker}). Resolve <<<<<<< ======= >>>>>>> markers and retry.`,\n EXIT_CODE.GENERIC_FAILURE,\n {\n code: \"merge_conflict_markers_detected\",\n required: \"Resolve merge-conflict markers in the item file before parsing or mutation commands.\",\n why: \"Partially merged documents can corrupt item metadata and history integrity.\",\n examples: [\"git status\", \"git add <resolved-file> && git commit\"],\n nextSteps: [\"Resolve conflicts, save the file, then rerun the pm command.\"],\n },\n );\n }\n const format = options.format ?? \"toon\";\n const runtimeContext = resolveRuntimeSchemaValidationContext(options);\n return format === \"toon\"\n ? parseToonItemDocument(content, runtimeContext, options)\n : parseJsonMarkdownItemDocument(content, runtimeContext, options);\n}\n\n/**\n * Implements serialize item document for the public runtime surface of this module.\n */\nexport function serializeItemDocument(document: ItemDocument, options: ItemDocumentFormatOptions = {}): string {\n const format = options.format ?? \"toon\";\n return format === \"toon\" ? serializeToonItemDocument(document, options) : serializeJsonMarkdownItemDocument(document, options);\n}\n\n/**\n * Implements canonical document for the public runtime surface of this module.\n */\nexport function canonicalDocument(document: ItemDocument, options: Pick<ItemDocumentFormatOptions, \"schema\" | \"extensionFieldNames\" | \"onWarning\"> = {}): ItemDocument {\n return {\n metadata: normalizeFrontMatter(document.metadata, options),\n body: normalizeBody(document.body ?? \"\"),\n };\n}\n\nexport const _testOnlyItemFormat = {\n buildKnownFrontMatterKeys,\n firstNonZeroComparison,\n normalizeBody,\n normalizePlanDecisions,\n normalizePlanDiscoveries,\n normalizePlanStepDocs,\n normalizePlanStepFiles,\n normalizePlanStepLinks,\n normalizePlanSteps,\n normalizePlanStepTests,\n normalizePlanValidation,\n normalizeTestRunSummaries,\n normalizeTypeOptions,\n runtimeFieldRequiredForType,\n sortTests,\n};\n", "/**\n * @module core/item/toon-decode\n *\n * Defines item parsing, formatting, and lifecycle helpers for Toon Decode.\n */\nimport { decode as decodeToon } from \"@toon-format/toon\";\n\nexport const TOON_SCALAR_BRACKET_ESCAPE_UPSTREAM_PR = \"https://github.com/toon-format/toon/pull/314\" as const;\n\nexport const TOON_SCALAR_BRACKET_ESCAPE_TRACKING = {\n dependency: \"@toon-format/toon\",\n affected_versions: \"<=2.3.0\",\n upstream_pr: TOON_SCALAR_BRACKET_ESCAPE_UPSTREAM_PR,\n removal_condition:\n \"Remove escapeBracketsInQuotedScalars retry once the upstream strict decoder fix ships in a released @toon-format/toon version and this repository upgrades to it.\",\n} as const;\n\n/**\n * Documents the toon decode result payload exchanged by command, SDK, and package integrations.\n */\nexport interface ToonDecodeResult {\n /** The decoded TOON document. */\n value: unknown;\n /** True when the strict decode required the scalar-bracket escape workaround. */\n usedScalarBracketEscape: boolean;\n}\n\n/**\n * Escape `[` as `\\u005b` inside quoted scalar values so the upstream\n * `@toon-format/toon` strict decoder cannot mis-read them.\n *\n * The upstream bug: the strict decoder's array-header detection scans the whole\n * line for an opening bracket when the key is unquoted, so a quoted scalar value\n * that contains a bracketed token followed (anywhere later on the line) by a\n * colon, e.g. `body: \"POST [redacted]: ok\"` or `desc: \"sntr[ysu]_ ... :\"`, is\n * mis-detected as a `key`+bracket+colon array header and throws. The library's\n * own `encode()` emits exactly this otherwise-correctly-quoted form, so strict\n * decode cannot read the encoder's own output for such values.\n *\n * A line is treated as a scalar `key: value` (not an array header) only when its\n * `\": \"` key/value separator occurs before the first `[`; array-header lines\n * (`tags[3]:`, `comments[6]{...}:`) have the bracket first and are left\n * untouched, as are non-string (unquoted) values. Within a matched quoted value\n * every `[` becomes `\\u005b`, which the decoder unescapes back to `[`, so the\n * decoded value is byte-for-byte identical. Crucially, this neutralises only the\n * bracket trigger and nothing else, so the retry stays in strict mode and every\n * other strict invariant (duplicate sibling keys, array-count mismatches, tabs\n * in indentation, ...) is still enforced.\n *\n * Upstream tracking metadata lives in {@link TOON_SCALAR_BRACKET_ESCAPE_TRACKING}.\n */\nfunction escapeBracketsInQuotedScalars(content: string): string {\n return content\n .split(\"\\n\")\n .map((line) => {\n const separatorIndex = line.indexOf(\": \");\n const bracketIndex = line.indexOf(\"[\");\n if (separatorIndex === -1 || bracketIndex === -1 || bracketIndex < separatorIndex) {\n return line;\n }\n const key = line.slice(0, separatorIndex + 2);\n const value = line.slice(separatorIndex + 2);\n if (!value.startsWith('\"')) {\n return line;\n }\n return key + value.replaceAll(\"[\", \"\\\\u005b\");\n })\n .join(\"\\n\");\n}\n\n/**\n * Decode a TOON item document, working around the upstream bracket mis-parse\n * bug described in {@link escapeBracketsInQuotedScalars}.\n *\n * Strict decode is attempted first (the fast path for all well-formed\n * documents). Only if it fails is the scalar-bracket escape applied and strict\n * decode retried, so the workaround never relaxes strict validation; it only\n * removes the specific trigger. If the escaped content is identical to the\n * original (no quoted-scalar bracket to neutralise) the original strict error is\n * surfaced unchanged; if the retry itself fails the document has a genuine\n * problem beyond the bracket bug and that error propagates.\n */\nexport function decodeToonItemContent(content: string): ToonDecodeResult {\n try {\n return { value: decodeToon(content), usedScalarBracketEscape: false };\n } catch (strictError) {\n const escaped = escapeBracketsInQuotedScalars(content);\n if (escaped === content) {\n throw strictError;\n }\n return { value: decodeToon(escaped), usedScalarBracketEscape: true };\n }\n}\n", "/**\n * @module core/shared/conflict-markers\n *\n * Provides shared primitives and utilities for Conflict Markers.\n */\n/**\n * Describes a detected unresolved merge-conflict marker and its source location.\n */\nexport interface ConflictMarkerMatch {\n line: number;\n marker: \"<<<<<<<\" | \"=======\" | \">>>>>>>\";\n text: string;\n}\n\nconst CONFLICT_MARKER_PATTERN = /^\\s*(<<<<<<<|=======|>>>>>>>)(?:\\s.*)?$/;\n\n/**\n * Implements find merge conflict markers for the public runtime surface of this module.\n */\nexport function findMergeConflictMarkers(content: string): ConflictMarkerMatch[] {\n if (content.length === 0) {\n return [];\n }\n const lines = content.split(/\\r?\\n/);\n const matches: ConflictMarkerMatch[] = [];\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index] ?? \"\";\n const markerMatch = line.match(CONFLICT_MARKER_PATTERN);\n if (!markerMatch) {\n continue;\n }\n const marker = markerMatch[1] as ConflictMarkerMatch[\"marker\"];\n matches.push({\n line: index + 1,\n marker,\n text: line,\n });\n }\n return matches;\n}\n\n/**\n * Implements find first merge conflict marker for the public runtime surface of this module.\n */\nexport function findFirstMergeConflictMarker(content: string): ConflictMarkerMatch | undefined {\n const matches = findMergeConflictMarkers(content);\n return matches[0];\n}\n", "/**\n * @module core/item/item-record\n *\n * Defines item parsing, formatting, and lifecycle helpers for Item Record.\n */\nimport type { ItemMetadata } from \"../../types/index.js\";\n\n/**\n * Bridge a typed item record into the generic `Record<string, unknown>` shape\n * consumed by formatters, field projections, history canonicalization, and\n * JSON output paths.\n *\n * `ItemMetadata` carries an index signature, but the structural mismatch on its\n * concretely-typed fields means TypeScript still requires a double cast to widen\n * it. Centralizing that `as unknown as Record<string, unknown>` widening here\n * gives the type bridge a single, named, documented home instead of scattering\n * the cast across command and core modules.\n *\n * This is a compile-time-only widening: the returned value is the very same\n * object reference, with no runtime transformation. (It is intentionally\n * distinct from the runtime `asRecord*` guards in `core/shared/primitives.ts`,\n * which validate `typeof` at runtime.) `ItemFrontMatter` is an alias of\n * `ItemMetadata`, so front-matter values are accepted as-is.\n */\nexport function toItemRecord(item: ItemMetadata): Record<string, unknown> {\n return item as unknown as Record<string, unknown>;\n}\n", "/**\n * @module core/history/history\n *\n * Implements append-only history and replay behavior for History.\n */\nimport jsonPatch from \"fast-json-patch\";\nimport { FRONT_MATTER_KEY_ORDER } from \"../shared/constants.js\";\nimport { runActiveServiceOverride } from \"../extensions/index.js\";\nimport { appendLineAtomic } from \"../fs/fs-utils.js\";\nimport { canonicalDocument } from \"../item/item-format.js\";\nimport { toItemRecord } from \"../item/item-record.js\";\nimport { orderObject, sha256Hex, stableStringify } from \"../shared/serialization.js\";\nimport { nowIso } from \"../shared/time.js\";\nimport type { HistoryEntry, HistoryPatchOp, ItemDocument } from \"../../types/index.js\";\n\nconst EMPTY_LEGACY_HASH_DOCUMENT = {\n front_matter: {},\n body: \"\",\n};\n\nfunction decodeJsonPointer(path: string): string[] {\n if (!path || path === \"/\") {\n return [];\n }\n if (!path.startsWith(\"/\")) {\n return [];\n }\n return path\n .slice(1)\n .split(\"/\")\n .map((segment) => segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\"));\n}\n\nfunction isDefinedPointerPath(document: unknown, path: string): boolean {\n const segments = decodeJsonPointer(path);\n if (segments.length === 0) {\n return true;\n }\n let cursor: unknown = document;\n for (const segment of segments) {\n if (Array.isArray(cursor)) {\n if (segment === \"-\" || !/^(0|[1-9]\\d*)$/.test(segment)) {\n return false;\n }\n const index = Number(segment);\n if (!Number.isInteger(index) || index < 0 || index >= cursor.length) {\n return false;\n }\n const next = cursor[index];\n if (next === undefined) {\n return false;\n }\n cursor = next;\n continue;\n }\n if (typeof cursor !== \"object\" || cursor === null) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(cursor, segment)) {\n return false;\n }\n const next = (cursor as Record<string, unknown>)[segment];\n if (next === undefined) {\n return false;\n }\n cursor = next;\n }\n return true;\n}\n\nfunction normalizeHistoryPatchOps(\n beforeDocument: { metadata: Record<string, unknown>; body: string },\n patch: HistoryPatchOp[],\n): HistoryPatchOp[] {\n const normalized: HistoryPatchOp[] = [];\n let replayCursor: unknown = structuredClone(beforeDocument);\n for (const operation of patch) {\n const normalizedOperation =\n operation.op === \"replace\" && !isDefinedPointerPath(replayCursor, operation.path)\n ? ({ ...operation, op: \"add\" } as HistoryPatchOp)\n : operation;\n normalized.push(normalizedOperation);\n replayCursor = jsonPatch.applyPatch(\n replayCursor,\n [normalizedOperation as jsonPatch.Operation],\n true,\n true,\n ).newDocument as unknown;\n }\n return normalized;\n}\n\nfunction canonicalHashDocument(document: ItemDocument): { front_matter: Record<string, unknown>; body: string } {\n const hasMetadata = document.metadata && Object.keys(document.metadata).length > 0;\n if (!hasMetadata) {\n return {\n front_matter: {},\n body: document.body ?? \"\",\n };\n }\n const canonical = canonicalDocument(document);\n const orderedFrontMatter = orderObject(toItemRecord(canonical.metadata), FRONT_MATTER_KEY_ORDER);\n return {\n front_matter: orderedFrontMatter,\n body: canonical.body,\n };\n}\n\nfunction canonicalPatchDocument(document: ItemDocument): { metadata: Record<string, unknown>; body: string } {\n const hasMetadata = document.metadata && Object.keys(document.metadata).length > 0;\n if (!hasMetadata) {\n return {\n metadata: {},\n body: document.body ?? \"\",\n };\n }\n const canonical = canonicalDocument(document);\n const orderedMetadata = orderObject(toItemRecord(canonical.metadata), FRONT_MATTER_KEY_ORDER);\n return {\n metadata: orderedMetadata,\n body: canonical.body,\n };\n}\n\n/**\n * Implements hash document for the public runtime surface of this module.\n */\nexport function hashDocument(document: ItemDocument): string {\n return sha256Hex(stableStringify(canonicalHashDocument(document)));\n}\n\n/**\n * Implements hash empty document for the public runtime surface of this module.\n */\nexport function hashEmptyDocument(): string {\n return sha256Hex(stableStringify(EMPTY_LEGACY_HASH_DOCUMENT));\n}\n\n/**\n * Implements create history entry for the public runtime surface of this module.\n */\nexport function createHistoryEntry(params: {\n nowIso: string;\n author: string;\n op: string;\n before: ItemDocument;\n after: ItemDocument;\n message?: string;\n}): HistoryEntry {\n const beforeHashCanonical = canonicalHashDocument(params.before);\n const afterHashCanonical = canonicalHashDocument(params.after);\n const beforePatchCanonical = canonicalPatchDocument(params.before);\n const afterPatchCanonical = canonicalPatchDocument(params.after);\n const rawPatch = jsonPatch.compare(beforePatchCanonical, afterPatchCanonical) as HistoryPatchOp[];\n const patch = normalizeHistoryPatchOps(beforePatchCanonical, rawPatch);\n\n return {\n ts: params.nowIso,\n author: params.author,\n op: params.op,\n patch,\n before_hash: sha256Hex(stableStringify(beforeHashCanonical)),\n after_hash: sha256Hex(stableStringify(afterHashCanonical)),\n message: params.message === undefined ? undefined : params.message,\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction fallbackHistoryTimestamp(entry: Pick<HistoryEntry, \"ts\">): string {\n const ts = entry.ts.trim();\n return ts.length > 0 ? ts : nowIso();\n}\n\nfunction withHistoryTimestamp(value: Record<string, unknown>, fallbackTs: string): Record<string, unknown> {\n const ts = value.ts;\n if (typeof ts === \"string\" && ts.trim().length > 0) {\n return value;\n }\n return { ...value, ts: fallbackTs };\n}\n\nfunction serializeHistoryLine(value: unknown, fallbackEntry: Pick<HistoryEntry, \"ts\">): string {\n const fallbackTs = fallbackHistoryTimestamp(fallbackEntry);\n if (typeof value === \"string\") {\n try {\n const parsed = JSON.parse(value) as unknown;\n if (isRecord(parsed)) {\n return JSON.stringify(withHistoryTimestamp(parsed, fallbackTs));\n }\n } catch {\n // Non-JSON extension lines are preserved for compatibility.\n }\n return value;\n }\n if (isRecord(value)) {\n return JSON.stringify(withHistoryTimestamp(value, fallbackTs));\n }\n return JSON.stringify(value);\n}\n\n/**\n * Implements append history entry for the public runtime surface of this module.\n */\nexport async function appendHistoryEntry(historyPath: string, entry: HistoryEntry): Promise<void> {\n const override = await runActiveServiceOverride(\"history_append\", {\n history_path: historyPath,\n entry,\n });\n if (override.handled) {\n if (override.result === false) {\n return;\n }\n if (typeof override.result === \"string\") {\n await appendLineAtomic(historyPath, serializeHistoryLine(override.result, entry));\n return;\n }\n if (typeof override.result === \"object\" && override.result !== null) {\n const record = override.result as {\n history_path?: unknown;\n entry?: unknown;\n line?: unknown;\n skip?: unknown;\n };\n if (record.skip === true) {\n return;\n }\n const nextHistoryPath = typeof record.history_path === \"string\" ? record.history_path : historyPath;\n if (typeof record.line === \"string\") {\n await appendLineAtomic(nextHistoryPath, serializeHistoryLine(record.line, entry));\n return;\n }\n await appendLineAtomic(nextHistoryPath, serializeHistoryLine(record.entry ?? entry, entry));\n return;\n }\n }\n await appendLineAtomic(historyPath, serializeHistoryLine(entry, entry));\n}\n\nexport const _testOnly = {\n decodeJsonPointer,\n isDefinedPointerPath,\n};\n", "/**\n * @module core/history/history-stream-policy\n *\n * Implements append-only history and replay behavior for History Stream Policy.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { runActiveOnWriteHooks } from \"../extensions/index.js\";\nimport { ensureDir, pathExists } from \"../fs/fs-utils.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { getHistoryPath } from \"../store/paths.js\";\nimport type { PmSettings } from \"../../types/index.js\";\n\ninterface HistoryStreamPolicyParams {\n pmRoot: string;\n settings: PmSettings;\n itemId: string;\n commandLabel: string;\n}\n\ninterface HistoryStreamPolicyManyParams {\n pmRoot: string;\n settings: PmSettings;\n itemIds: string[];\n commandLabel: string;\n}\n\n/**\n * Documents the history stream policy result payload exchanged by command, SDK, and package integrations.\n */\nexport interface HistoryStreamPolicyResult {\n auto_created_ids: string[];\n warnings: string[];\n}\n\nfunction toSortedUniqueItemIds(itemIds: string[]): string[] {\n return [...new Set(itemIds.filter((value) => value.trim().length > 0))].sort((left, right) => left.localeCompare(right));\n}\n\nfunction strictMissingStreamError(itemId: string, commandLabel: string): PmCliError {\n return new PmCliError(\n `Missing history stream for ${itemId}. ${commandLabel} requires history streams when settings.history.missing_stream is strict_error.`,\n EXIT_CODE.NOT_FOUND,\n );\n}\n\nasync function createStream(historyPath: string, commandLabel: string): Promise<string[]> {\n await ensureDir(path.dirname(historyPath));\n const handle = await fs.open(historyPath, \"a\");\n await handle.close();\n return runActiveOnWriteHooks({\n path: historyPath,\n scope: \"project\",\n op: `${commandLabel}:history:auto_create`,\n });\n}\n\n/**\n * Implements enforce history stream policy for item for the public runtime surface of this module.\n */\nexport async function enforceHistoryStreamPolicyForItem(params: HistoryStreamPolicyParams): Promise<HistoryStreamPolicyResult> {\n return enforceHistoryStreamPolicyForItems({\n pmRoot: params.pmRoot,\n settings: params.settings,\n itemIds: [params.itemId],\n commandLabel: params.commandLabel,\n });\n}\n\n/**\n * Implements enforce history stream policy for items for the public runtime surface of this module.\n */\nexport async function enforceHistoryStreamPolicyForItems(\n params: HistoryStreamPolicyManyParams,\n): Promise<HistoryStreamPolicyResult> {\n const ids = toSortedUniqueItemIds(params.itemIds);\n const autoCreated: string[] = [];\n const warnings: string[] = [];\n\n for (const itemId of ids) {\n const historyPath = getHistoryPath(params.pmRoot, itemId);\n if (await pathExists(historyPath)) {\n continue;\n }\n if (params.settings.history.missing_stream === \"strict_error\") {\n throw strictMissingStreamError(itemId, params.commandLabel);\n }\n warnings.push(...(await createStream(historyPath, params.commandLabel)));\n warnings.push(`history_stream_auto_created:${itemId}`);\n autoCreated.push(itemId);\n }\n\n return {\n auto_created_ids: autoCreated,\n warnings,\n };\n}\n", "/**\n * @module core/lock/lock\n *\n * Coordinates tracker lock ownership and cleanup for Lock.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { runActiveOnReadHooks, runActiveOnWriteHooks, runActiveServiceOverride } from \"../extensions/index.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { toErrorMessage } from \"../shared/primitives.js\";\nimport { getLockPath } from \"../store/paths.js\";\nimport { nowIso } from \"../shared/time.js\";\n\ninterface LockInfo {\n id: string;\n pid: number;\n owner: string;\n created_at: string;\n ttl_seconds: number;\n}\n\ntype LockWriteOp = \"lock:create\" | \"lock:release\" | \"lock:stale_remove\";\n\ninterface LockReadResult {\n info: LockInfo | null;\n warnings: string[];\n}\n\ninterface StaleLockRemovalResult {\n lockInfo: LockReadResult;\n shouldRetryCreate: boolean;\n staleRemovalCounted: boolean;\n}\n\ninterface StaleCleanupGateOwner {\n pid: number;\n token: string;\n}\n\nfunction parseLockInfo(raw: string): LockReadResult {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n return {\n info: null,\n warnings: [\"lock_info_invalid_json\"],\n };\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return {\n info: null,\n warnings: [\"lock_info_invalid_shape\"],\n };\n }\n const candidate = parsed as Record<string, unknown>;\n const id = candidate.id;\n const pid = candidate.pid;\n const owner = candidate.owner;\n const createdAt = candidate.created_at;\n const ttlSeconds = candidate.ttl_seconds;\n if (\n typeof id !== \"string\" ||\n typeof pid !== \"number\" ||\n !Number.isFinite(pid) ||\n typeof owner !== \"string\" ||\n typeof createdAt !== \"string\" ||\n typeof ttlSeconds !== \"number\" ||\n !Number.isFinite(ttlSeconds)\n ) {\n return {\n info: null,\n warnings: [\"lock_info_invalid_shape\"],\n };\n }\n return {\n info: {\n id,\n pid,\n owner,\n created_at: createdAt,\n ttl_seconds: ttlSeconds,\n },\n warnings: [],\n };\n}\n\nasync function readLockInfo(lockPath: string): Promise<LockReadResult> {\n try {\n const raw = await fs.readFile(lockPath, \"utf8\");\n await runActiveOnReadHooks({\n path: lockPath,\n scope: \"project\",\n });\n return parseLockInfo(raw);\n } catch (error: unknown) {\n if (isErrno(error, \"ENOENT\")) {\n return {\n info: null,\n warnings: [],\n };\n }\n return {\n info: null,\n warnings: [\"lock_info_read_failed\"],\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\nasync function emitLockWriteHook(lockPath: string, op: LockWriteOp): Promise<void> {\n await runActiveOnWriteHooks({\n path: lockPath,\n scope: \"project\",\n op,\n });\n}\n\nfunction buildLockPayload(id: string, owner: string, ttlSeconds: number): LockInfo {\n return {\n id,\n pid: process.pid,\n owner,\n created_at: nowIso(),\n ttl_seconds: ttlSeconds,\n };\n}\n\nasync function createLockFile(lockPath: string, id: string, owner: string, ttlSeconds: number): Promise<void> {\n await fs.mkdir(path.dirname(lockPath), { recursive: true });\n const handle = await fs.open(lockPath, \"wx\");\n try {\n await handle.writeFile(`${JSON.stringify(buildLockPayload(id, owner, ttlSeconds), null, 2)}\\n`, \"utf8\");\n } finally {\n await handle.close();\n }\n await emitLockWriteHook(lockPath, \"lock:create\");\n}\n\nasync function unlinkLockWithHook(lockPath: string, op: \"lock:release\" | \"lock:stale_remove\"): Promise<boolean> {\n try {\n await fs.unlink(lockPath);\n await emitLockWriteHook(lockPath, op);\n return true;\n } catch {\n // Lock cleanup is best-effort.\n return false;\n }\n}\n\nfunction isStaleLock(info: LockInfo | null, ttlSeconds: number): boolean {\n const createdAtMs = info?.created_at ? Date.parse(info.created_at) : Number.NaN;\n const ageMs = Number.isFinite(createdAtMs) ? Date.now() - createdAtMs : Number.POSITIVE_INFINITY;\n return ageMs > ttlSeconds * 1000;\n}\n\nfunction lockOwnerSuffix(info: LockInfo | null): string {\n return info?.owner ? ` (owner ${info.owner})` : \"\";\n}\n\nconst LOCK_WAIT_INITIAL_DELAY_MS = 25;\nconst LOCK_WAIT_MAX_DELAY_MS = 200;\nconst LOCK_CONFLICT_RETRY_HINT_MS = 250;\nconst MAX_STALE_LOCK_REMOVALS = 3;\nconst STALE_CLEANUP_GATE_SUFFIX = \".stale-cleanup\";\nconst STALE_CLEANUP_GATE_OWNER_FILE = \"owner.json\";\nconst STALE_CLEANUP_GATE_STALE_MS = 10_000;\n// Bounds PID-reuse false positives: a live recycled PID can delay cleanup, but not indefinitely.\nconst STALE_CLEANUP_GATE_MAX_ACTIVE_MS = 5 * 60_000;\n\nfunction parseNonNegativeIntegerWaitMs(value: string | number | undefined): number | undefined {\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!/^\\d+$/.test(trimmed)) {\n return undefined;\n }\n const parsed = Number(trimmed);\n return Number.isSafeInteger(parsed) ? parsed : undefined;\n }\n if (typeof value === \"number\" && Number.isFinite(value) && value >= 0) {\n return Math.trunc(value);\n }\n return undefined;\n}\n\n/**\n * Resolves the effective bounded wait budget for a contended lock: the\n * PM_LOCK_WAIT_MS environment override wins when it parses as a non-negative\n * integer, then the caller-provided budget (settings `locks.wait_ms`), then 0\n * (fail-fast, the pre-wait behavior).\n */\nfunction resolveLockWaitMs(waitMs: number | undefined): number {\n const envRaw = process.env.PM_LOCK_WAIT_MS;\n const envParsed = parseNonNegativeIntegerWaitMs(envRaw);\n if (envParsed !== undefined) {\n return envParsed;\n }\n const callerParsed = parseNonNegativeIntegerWaitMs(waitMs);\n if (callerParsed !== undefined) {\n return callerParsed;\n }\n return 0;\n}\n\nfunction sleepWithJitter(baseDelayMs: number): Promise<void> {\n const jitteredMs = Math.max(1, Math.round(baseDelayMs * (0.5 + Math.random())));\n return new Promise((resolve) => setTimeout(resolve, jitteredMs));\n}\n\nfunction buildLockConflictError(id: string, info: LockInfo | null, waitedMs: number): PmCliError {\n const waitedSuffix = waitedMs > 0 ? ` after waiting ${waitedMs}ms` : \"\";\n return new PmCliError(`Item ${id} is locked${lockOwnerSuffix(info)}${waitedSuffix}`, EXIT_CODE.CONFLICT, {\n code: \"lock_conflict\",\n recovery: {\n retry_after_ms: LOCK_CONFLICT_RETRY_HINT_MS,\n },\n });\n}\n\ntype LockReleaseOverride = () => Promise<void> | void;\n\nfunction resolveLockOverrideRelease(result: unknown): LockReleaseOverride | null {\n if (typeof result === \"function\") {\n return result as LockReleaseOverride;\n }\n if (typeof result === \"object\" && result !== null && \"release\" in result) {\n const release = (result as { release?: unknown }).release;\n return typeof release === \"function\" ? (release as LockReleaseOverride) : null;\n }\n return null;\n}\n\nfunction throwIfStaleLockNeedsForce(id: string, lockInfo: LockReadResult, force: boolean, forceRequired: boolean): void {\n if (!force && forceRequired) {\n const warningSuffix = lockInfo.warnings.length > 0 ? ` (${lockInfo.warnings.join(\",\")})` : \"\";\n throw new PmCliError(\n `Item ${id} lock is stale${warningSuffix}; rerun with --force when supported for this command`,\n EXIT_CODE.CONFLICT,\n );\n }\n}\n\nfunction parseStaleCleanupGateOwner(raw: string): StaleCleanupGateOwner | null {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n return null;\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return null;\n }\n const candidate = parsed as Record<string, unknown>;\n const pid = candidate.pid;\n const token = candidate.token;\n if (typeof pid !== \"number\" || !Number.isInteger(pid) || pid <= 0 || typeof token !== \"string\" || token.length === 0) {\n return null;\n }\n return { pid, token };\n}\n\nasync function readStaleCleanupGateOwner(gatePath: string): Promise<StaleCleanupGateOwner | null> {\n try {\n return parseStaleCleanupGateOwner(await fs.readFile(path.join(gatePath, STALE_CLEANUP_GATE_OWNER_FILE), \"utf8\"));\n } catch {\n return null;\n }\n}\n\nfunction isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error: unknown) {\n if (isErrno(error, \"ESRCH\")) {\n return false;\n }\n return true;\n }\n}\n\nasync function removeStaleCleanupGateDirectory(gatePath: string): Promise<boolean> {\n try {\n await fs.rm(gatePath, { recursive: true, force: true });\n return true;\n } catch {\n return false;\n }\n}\n\nasync function releaseStaleCleanupGate(gatePath: string, token: string): Promise<void> {\n const owner = await readStaleCleanupGateOwner(gatePath);\n if (owner === null || owner.token !== token) {\n return;\n }\n await removeStaleCleanupGateDirectory(gatePath);\n}\n\nasync function tryCreateStaleCleanupGate(gatePath: string): Promise<StaleCleanupGateOwner | null> {\n try {\n await fs.mkdir(gatePath);\n } catch (error: unknown) {\n if (isErrno(error, \"EEXIST\")) {\n return null;\n }\n return null;\n }\n const owner = { pid: process.pid, token: randomUUID() };\n try {\n await fs.writeFile(path.join(gatePath, STALE_CLEANUP_GATE_OWNER_FILE), `${JSON.stringify(owner)}\\n`, \"utf8\");\n } catch {\n await removeStaleCleanupGateDirectory(gatePath);\n return null;\n }\n return owner;\n}\n\nasync function removeExpiredStaleCleanupGate(gatePath: string): Promise<boolean> {\n let gateAgeMs: number;\n try {\n const stats = await fs.stat(gatePath);\n gateAgeMs = Date.now() - stats.mtimeMs;\n if (gateAgeMs <= STALE_CLEANUP_GATE_STALE_MS) {\n return false;\n }\n } catch (error: unknown) {\n return isErrno(error, \"ENOENT\");\n }\n const owner = await readStaleCleanupGateOwner(gatePath);\n if (owner !== null && isProcessAlive(owner.pid) && gateAgeMs <= STALE_CLEANUP_GATE_MAX_ACTIVE_MS) {\n return false;\n }\n return removeStaleCleanupGateDirectory(gatePath);\n}\n\nasync function acquireStaleCleanupGate(lockPath: string, _id: string): Promise<(() => Promise<void>) | null> {\n const gatePath = `${lockPath}${STALE_CLEANUP_GATE_SUFFIX}`;\n const owner = await tryCreateStaleCleanupGate(gatePath);\n if (owner !== null) {\n return async () => releaseStaleCleanupGate(gatePath, owner.token);\n }\n if (!(await removeExpiredStaleCleanupGate(gatePath))) {\n return null;\n }\n const recoveredOwner = await tryCreateStaleCleanupGate(gatePath);\n if (recoveredOwner === null) {\n return null;\n }\n return async () => releaseStaleCleanupGate(gatePath, recoveredOwner.token);\n}\n\nasync function removeConfirmedStaleLock(params: {\n lockPath: string;\n id: string;\n ttlSeconds: number;\n force: boolean;\n forceRequiredForStaleLock: boolean;\n staleRemovals: number;\n waitBudgetMs: number;\n startedAtMs: number;\n fallbackLockInfo: LockReadResult;\n}): Promise<StaleLockRemovalResult> {\n const releaseCleanupGate = await acquireStaleCleanupGate(params.lockPath, params.id);\n if (releaseCleanupGate === null) {\n return {\n lockInfo: params.fallbackLockInfo,\n shouldRetryCreate: false,\n staleRemovalCounted: false,\n };\n }\n try {\n const currentLockInfo = await readLockInfo(params.lockPath);\n if (currentLockInfo.info === null && currentLockInfo.warnings.length === 0) {\n return {\n lockInfo: currentLockInfo,\n shouldRetryCreate: true,\n staleRemovalCounted: false,\n };\n }\n if (!isStaleLock(currentLockInfo.info, params.ttlSeconds)) {\n return {\n lockInfo: currentLockInfo,\n shouldRetryCreate: false,\n staleRemovalCounted: false,\n };\n }\n throwIfStaleLockNeedsForce(params.id, currentLockInfo, params.force, params.forceRequiredForStaleLock);\n if (params.staleRemovals >= MAX_STALE_LOCK_REMOVALS) {\n throw buildLockConflictError(params.id, currentLockInfo.info, Date.now() - params.startedAtMs);\n }\n return {\n lockInfo: currentLockInfo,\n shouldRetryCreate: await unlinkLockWithHook(params.lockPath, \"lock:stale_remove\"),\n staleRemovalCounted: true,\n };\n } finally {\n await releaseCleanupGate();\n }\n}\n\nexport const _testOnly = {\n parseLockInfo,\n readLockInfo,\n isErrno,\n buildLockPayload,\n isStaleLock,\n lockOwnerSuffix,\n resolveLockWaitMs,\n acquireStaleCleanupGate,\n removeConfirmedStaleLock,\n};\n\n\n/**\n * Implements acquire lock for the public runtime surface of this module.\n */\nexport async function acquireLock(\n pmRoot: string,\n id: string,\n ttlSeconds: number,\n owner: string,\n force = false,\n forceRequiredForStaleLock = true,\n waitMs?: number,\n): Promise<() => Promise<void>> {\n const lockOverride = await runActiveServiceOverride(\"lock_acquire\", {\n pm_root: pmRoot,\n id,\n ttl_seconds: ttlSeconds,\n owner,\n force,\n force_required_for_stale_lock: forceRequiredForStaleLock,\n });\n if (lockOverride.handled) {\n const release = resolveLockOverrideRelease(lockOverride.result);\n if (release) {\n return async () => {\n await Promise.resolve(release());\n await runActiveServiceOverride(\"lock_release\", {\n pm_root: pmRoot,\n id,\n owner,\n });\n };\n }\n }\n\n const lockPath = getLockPath(pmRoot, id);\n const waitBudgetMs = resolveLockWaitMs(waitMs);\n const startedAtMs = Date.now();\n let staleRemovals = 0;\n let backoffMs = LOCK_WAIT_INITIAL_DELAY_MS;\n\n for (;;) {\n try {\n await createLockFile(lockPath, id, owner, ttlSeconds);\n return async () => {\n await unlinkLockWithHook(lockPath, \"lock:release\");\n await runActiveServiceOverride(\"lock_release\", {\n pm_root: pmRoot,\n id,\n owner,\n });\n };\n } catch (error: unknown) {\n if (!isErrno(error, \"EEXIST\")) {\n throw new PmCliError(`Failed to acquire lock for ${id}: ${toErrorMessage(error)}`, EXIT_CODE.GENERIC_FAILURE);\n }\n let lockInfo = await readLockInfo(lockPath);\n if (isStaleLock(lockInfo.info, ttlSeconds)) {\n const staleRemoval = await removeConfirmedStaleLock({\n lockPath,\n id,\n ttlSeconds,\n force,\n forceRequiredForStaleLock,\n staleRemovals,\n waitBudgetMs,\n startedAtMs,\n fallbackLockInfo: lockInfo,\n });\n lockInfo = staleRemoval.lockInfo;\n if (staleRemoval.staleRemovalCounted) {\n staleRemovals += 1;\n }\n if (staleRemoval.shouldRetryCreate) {\n continue;\n }\n }\n const elapsedMs = Date.now() - startedAtMs;\n if (waitBudgetMs === 0 || elapsedMs >= waitBudgetMs) {\n throw buildLockConflictError(id, lockInfo.info, waitBudgetMs === 0 ? 0 : elapsedMs);\n }\n await sleepWithJitter(Math.min(backoffMs, waitBudgetMs - elapsedMs));\n backoffMs = Math.min(backoffMs * 2, LOCK_WAIT_MAX_DELAY_MS);\n }\n }\n}\n", "/**\n * @module core/item/id\n *\n * Defines item parsing, formatting, and lifecycle helpers for Id.\n */\nimport crypto from \"node:crypto\";\nimport path from \"node:path\";\nimport { TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport { pathExists } from \"../fs/fs-utils.js\";\n\n/**\n * Implements normalize prefix for the public runtime surface of this module.\n */\nexport function normalizePrefix(input: string | undefined): string {\n const normalized = (input ?? \"\").trim().toLowerCase();\n if (!normalized) return \"pm-\";\n return normalized.endsWith(\"-\") ? normalized : `${normalized}-`;\n}\n\n/**\n * Implements normalize raw item id for the public runtime surface of this module.\n */\nexport function normalizeRawItemId(input: string): string {\n let normalized = input.trim().toLowerCase();\n if (normalized.startsWith(\"#\")) {\n normalized = normalized.slice(1);\n }\n return normalized;\n}\n\n/**\n * Implements normalize item id for the public runtime surface of this module.\n */\nexport function normalizeItemId(input: string, prefix: string): string {\n const canonicalPrefix = normalizePrefix(prefix);\n const normalized = normalizeRawItemId(input);\n if (normalized.startsWith(canonicalPrefix)) {\n return normalized;\n }\n return `${canonicalPrefix}${normalized}`;\n}\n\nfunction randomToken(length: number): string {\n let token = \"\";\n for (let index = 0; index < length; index += 1) {\n token += crypto.randomInt(0, 36).toString(36);\n }\n return token;\n}\n\nasync function idExists(pmRoot: string, id: string): Promise<boolean> {\n const checks = Object.values(TYPE_TO_FOLDER).flatMap((folder) => [\n path.join(pmRoot, folder, `${id}.md`),\n path.join(pmRoot, folder, `${id}.toon`),\n ]);\n for (const target of checks) {\n if (await pathExists(target)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Implements generate item id for the public runtime surface of this module.\n */\nexport async function generateItemId(pmRoot: string, prefix: string): Promise<string> {\n let tokenLength = 4;\n let attempts = 0;\n\n while (tokenLength <= 10) {\n for (let i = 0; i < 32; i += 1) {\n const id = `${normalizePrefix(prefix)}${randomToken(tokenLength)}`;\n if (!(await idExists(pmRoot, id))) {\n return id;\n }\n attempts += 1;\n }\n tokenLength += 1;\n }\n\n throw new Error(`Unable to generate unique id after ${attempts} attempts`);\n}\n", "/**\n * @module core/store/item-store\n *\n * Reads and writes tracker storage with format-aware helpers for Item Store.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n getActiveExtensionRegistrations,\n projectAfterCommandItemSnapshot,\n recordAfterCommandAffectedItem,\n runActiveOnReadHooks,\n runActiveOnWriteHooks,\n runActiveServiceOverride,\n} from \"../extensions/index.js\";\nimport { collectRegisteredItemFieldNames } from \"../extensions/item-fields.js\";\nimport { EMPTY_CANONICAL_DOCUMENT, EXIT_CODE, TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { levenshteinDistanceWithinLimit } from \"../shared/levenshtein.js\";\nimport { appendHistoryEntry, createHistoryEntry } from \"../history/history.js\";\nimport { enforceHistoryStreamPolicyForItem } from \"../history/history-stream-policy.js\";\nimport { canonicalDocument, parseItemDocument, serializeItemDocument } from \"../item/item-format.js\";\nimport { resolveItemTypeRegistry } from \"../item/type-registry.js\";\nimport { acquireLock } from \"../lock/lock.js\";\nimport { writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { normalizeItemId, normalizeRawItemId } from \"../item/id.js\";\nimport { listAllDocumentCandidatesCached, listAllDocumentsCached, listAllDocumentsCachedLight } from \"./front-matter-cache.js\";\nimport { getHistoryPath, getItemFormatFromPath, getItemPath, ITEM_FILE_EXTENSIONS } from \"./paths.js\";\nimport { resolveGovernanceKnobs } from \"./settings.js\";\nimport { nowIso } from \"../shared/time.js\";\nimport type { ItemDocument, ItemFormat, ItemFrontMatter, ItemType, PmSettings, RuntimeSchemaSettings } from \"../../types/index.js\";\n\n/**\n * Documents the located item payload exchanged by command, SDK, and package integrations.\n */\nexport interface LocatedItem {\n id: string;\n type: ItemType;\n itemPath: string;\n item_format: ItemFormat;\n}\n\nasync function fileExists(targetPath: string): Promise<boolean> {\n try {\n await fs.access(targetPath);\n return true;\n } catch {\n return false;\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\nfunction appendWarning(warnings: string[] | undefined, warning: string): void {\n if (!warnings) {\n return;\n }\n if (!warnings.includes(warning)) {\n warnings.push(warning);\n }\n}\n\nfunction resolveActiveExtensionFieldNames(explicit: readonly string[] | undefined): readonly string[] {\n return explicit ?? collectRegisteredItemFieldNames(getActiveExtensionRegistrations());\n}\n\nfunction resolveItemFormatSearchOrder(preferredFormat?: ItemFormat): ItemFormat[] {\n if (preferredFormat === \"toon\") {\n return [\"toon\", \"json_markdown\"];\n }\n if (preferredFormat === \"json_markdown\") {\n return [\"json_markdown\", \"toon\"];\n }\n return [\"toon\", \"json_markdown\"];\n}\n\n/**\n * Implements locate item for the public runtime surface of this module.\n */\nexport async function locateItem(\n pmRoot: string,\n rawId: string,\n idPrefix = \"pm-\",\n preferredFormat?: ItemFormat,\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n): Promise<LocatedItem | null> {\n const normalizedId = normalizeItemId(rawId, idPrefix);\n const rawNormalizedId = normalizeRawItemId(rawId);\n const candidateIds = normalizedId === rawNormalizedId ? [normalizedId] : [normalizedId, rawNormalizedId];\n const entries = Object.entries(typeToFolder) as Array<[ItemType, string]>;\n const searchOrder = resolveItemFormatSearchOrder(preferredFormat);\n for (const candidateId of candidateIds) {\n for (const [type] of entries) {\n for (const itemFormat of searchOrder) {\n const itemPath = getItemPath(pmRoot, type, candidateId, itemFormat, typeToFolder);\n if (await fileExists(itemPath)) {\n return {\n id: candidateId,\n type,\n itemPath,\n item_format: itemFormat,\n };\n }\n }\n }\n }\n return null;\n}\n\n/**\n * Implements read located item for the public runtime surface of this module.\n */\nexport async function readLocatedItem(\n item: LocatedItem,\n options: { schema?: RuntimeSchemaSettings; extensionFieldNames?: readonly string[]; warnings?: string[] } = {},\n): Promise<{ raw: string; document: ItemDocument }> {\n const raw = await fs.readFile(item.itemPath, \"utf8\");\n await runActiveOnReadHooks({\n path: item.itemPath,\n scope: \"project\",\n });\n const document = parseItemDocument(raw, {\n format: item.item_format,\n schema: options.schema,\n extensionFieldNames: resolveActiveExtensionFieldNames(options.extensionFieldNames),\n onWarning: (warning) => appendWarning(options.warnings, warning),\n });\n return { raw, document };\n}\n\n/**\n * Implements list all front matter for the public runtime surface of this module.\n */\nexport async function listAllFrontMatter(\n pmRoot: string,\n preferredFormat?: ItemFormat,\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n warnings?: string[],\n schema?: RuntimeSchemaSettings,\n): Promise<ItemFrontMatter[]> {\n const documents = await listAllDocumentsCached(pmRoot, preferredFormat, typeToFolder, warnings, schema);\n return documents.map((document) => document.metadata);\n}\n\n/**\n * Light variant of {@link listAllFrontMatter}: returns front-matter WITHOUT the heavy\n * collection fields (comments/notes/learnings/files/tests/test_runs/docs). Skips the\n * large collections cache so the hot list path stays cheap. Only use for callers that\n * read just the light scalar/small fields — see {@link listAllDocumentsCachedLight}.\n */\nexport async function listAllFrontMatterLight(\n pmRoot: string,\n preferredFormat?: ItemFormat,\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n warnings?: string[],\n schema?: RuntimeSchemaSettings,\n): Promise<ItemFrontMatter[]> {\n const documents = await listAllDocumentsCachedLight(pmRoot, preferredFormat, typeToFolder, warnings, schema);\n return documents.map((document) => document.metadata);\n}\n\n/**\n * Implements list all front matter with body for the public runtime surface of this module.\n */\nexport async function listAllFrontMatterWithBody(\n pmRoot: string,\n preferredFormat?: ItemFormat,\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n warnings?: string[],\n schema?: RuntimeSchemaSettings,\n): Promise<Array<ItemFrontMatter & { body: string }>> {\n const candidates = await listAllDocumentCandidatesCached(\n pmRoot,\n preferredFormat,\n typeToFolder,\n warnings,\n schema,\n { includeBody: true },\n );\n return candidates.map((candidate) => ({\n ...candidate.metadata,\n // includeBody:true guarantees candidate bodies are materialized.\n body: candidate.body!,\n }));\n}\n\nasync function listKnownItemIds(\n pmRoot: string,\n typeToFolder: Record<string, string>,\n): Promise<string[]> {\n const folders = new Set(Object.values(typeToFolder));\n const allIds: string[] = [];\n await Promise.all(\n [...folders].map(async (folder) => {\n try {\n const entries = await fs.readdir(path.join(pmRoot, folder));\n for (const entry of entries) {\n for (const ext of ITEM_FILE_EXTENSIONS) {\n if (entry.toLowerCase().endsWith(ext)) {\n allIds.push(entry.slice(0, -ext.length));\n break;\n }\n }\n }\n } catch {\n // ignore missing folders\n }\n }),\n );\n return allIds;\n}\n\nasync function buildDidYouMeanSuggestions(\n pmRoot: string,\n badId: string,\n idPrefix: string,\n typeToFolder: Record<string, string>,\n): Promise<string[]> {\n const normalized = normalizeItemId(badId, idPrefix);\n const ids = await listKnownItemIds(pmRoot, typeToFolder);\n if (ids.length === 0) return [];\n const limit = Math.max(3, Math.floor(normalized.length / 2));\n const scored = ids\n .map((id) => ({ id, distance: levenshteinDistanceWithinLimit(id, normalized, limit) }))\n .filter((entry): entry is { id: string; distance: number } => entry.distance !== null)\n .sort((left, right) => left.distance - right.distance)\n .slice(0, 3)\n .map((entry) => entry.id);\n return scored;\n}\n\n/**\n * Implements build item not found error for the public runtime surface of this module.\n */\nexport async function buildItemNotFoundError(\n pmRoot: string,\n badId: string,\n idPrefix: string,\n typeToFolder: Record<string, string>,\n): Promise<PmCliError> {\n const suggestions = await buildDidYouMeanSuggestions(pmRoot, badId, idPrefix, typeToFolder);\n const nextSteps: string[] = [\"Confirm the active --path/PM_PATH scope, then retry with a valid id.\"];\n if (suggestions.length > 0) {\n nextSteps.unshift(`Did you mean one of: ${suggestions.join(\", \")}?`);\n }\n return new PmCliError(`Item ${badId} not found`, EXIT_CODE.NOT_FOUND, { nextSteps });\n}\n\nfunction bypassesAssigneeConflict(\n op: string,\n bypassAssigneeConflict?: boolean,\n): boolean {\n return (\n op === \"claim\" ||\n (bypassAssigneeConflict === true &&\n (op === \"comment_add\" ||\n op === \"comment_edit\" ||\n op === \"comment_delete\" ||\n op === \"note_add\" ||\n op === \"learning_add\" ||\n op === \"release\" ||\n op === \"update\" ||\n op === \"update_audit\"))\n );\n}\n\nasync function prepareLockedItem(params: {\n pmRoot: string;\n settings: PmSettings;\n id: string;\n op: string;\n author: string;\n force?: boolean;\n bypassAssigneeConflict?: boolean;\n extensionFieldNames?: readonly string[];\n typeToFolder?: Record<string, string>;\n}): Promise<{\n typeToFolder: Record<string, string>;\n located: LocatedItem;\n originalRaw: string;\n document: ItemDocument;\n warnings: string[];\n releaseLock: () => Promise<void>;\n}> {\n const typeToFolder =\n params.typeToFolder ??\n resolveItemTypeRegistry(params.settings, getActiveExtensionRegistrations())\n .type_to_folder;\n const located = await locateItem(\n params.pmRoot,\n params.id,\n params.settings.id_prefix,\n params.settings.item_format,\n typeToFolder,\n );\n if (!located) {\n throw await buildItemNotFoundError(\n params.pmRoot,\n params.id,\n params.settings.id_prefix,\n typeToFolder,\n );\n }\n\n const releaseLock = await acquireLock(\n params.pmRoot,\n located.id,\n params.settings.locks.ttl_seconds,\n params.author,\n Boolean(params.force),\n params.settings.governance.force_required_for_stale_lock,\n params.settings.locks.wait_ms,\n );\n\n try {\n const warnings: string[] = [];\n const { raw: originalRaw, document } = await readLocatedItem(located, {\n schema: params.settings.schema,\n extensionFieldNames: params.extensionFieldNames,\n warnings,\n });\n\n const assigned = document.metadata.assignee?.trim();\n const governance = resolveGovernanceKnobs(params.settings);\n const hasOwnershipConflict =\n assigned &&\n assigned !== params.author &&\n !params.force &&\n !bypassesAssigneeConflict(params.op, params.bypassAssigneeConflict);\n if (hasOwnershipConflict) {\n if (governance.ownership_enforcement === \"strict\") {\n throw new PmCliError(\n `Item ${located.id} is assigned to ${assigned}. Use --force to override.`,\n EXIT_CODE.CONFLICT,\n );\n }\n if (governance.ownership_enforcement === \"warn\") {\n warnings.push(\n `ownership_warning:assignee_conflict:${located.id}:${assigned}`,\n );\n }\n }\n\n return {\n typeToFolder,\n located,\n originalRaw,\n document,\n warnings,\n releaseLock,\n };\n } catch (error: unknown) {\n await releaseLock();\n throw error;\n }\n}\n\nfunction resolveItemStoreWriteOverride(\n serviceWriteOverride: { handled: boolean; result?: unknown },\n targetItemPath: string,\n serializedAfter: string,\n): {\n effectiveTargetItemPath: string;\n effectiveSerializedAfter: string;\n skipItemWrite: boolean;\n} {\n if (!serviceWriteOverride.handled || typeof serviceWriteOverride.result !== \"object\" || serviceWriteOverride.result === null) {\n return { effectiveTargetItemPath: targetItemPath, effectiveSerializedAfter: serializedAfter, skipItemWrite: false };\n }\n const overrideRecord = serviceWriteOverride.result as {\n target_item_path?: unknown;\n contents?: unknown;\n skip_write?: unknown;\n };\n return {\n effectiveTargetItemPath:\n typeof overrideRecord.target_item_path === \"string\" && overrideRecord.target_item_path.trim().length > 0\n ? overrideRecord.target_item_path\n : targetItemPath,\n effectiveSerializedAfter: typeof overrideRecord.contents === \"string\" ? overrideRecord.contents : serializedAfter,\n skipItemWrite: overrideRecord.skip_write === true,\n };\n}\n\nasync function rollbackMutatedItemWrite(params: {\n skipItemWrite: boolean;\n effectiveTargetItemPath: string;\n originalItemPath: string;\n originalRaw: string;\n}): Promise<void> {\n if (params.skipItemWrite) {\n return;\n }\n if (params.effectiveTargetItemPath !== params.originalItemPath) {\n await writeFileAtomic(params.originalItemPath, params.originalRaw);\n await fs.rm(params.effectiveTargetItemPath, { force: true });\n return;\n }\n await writeFileAtomic(params.originalItemPath, params.originalRaw);\n}\n\n/**\n * Implements mutate item for the public runtime surface of this module.\n */\nexport async function mutateItem(params: {\n pmRoot: string;\n settings: PmSettings;\n id: string;\n op: string;\n author: string;\n message?: string;\n force?: boolean;\n bypassAssigneeConflict?: boolean;\n skipNoop?: boolean;\n extensionFieldNames?: readonly string[];\n typeToFolder?: Record<string, string>;\n mutate: (document: ItemDocument) => {\n changedFields: string[];\n warnings?: string[];\n };\n}): Promise<{\n item: ItemFrontMatter;\n body: string;\n changedFields: string[];\n warnings: string[];\n}> {\n const prepared = await prepareLockedItem({\n pmRoot: params.pmRoot,\n settings: params.settings,\n id: params.id,\n op: params.op,\n author: params.author,\n force: params.force,\n bypassAssigneeConflict: params.bypassAssigneeConflict,\n extensionFieldNames: params.extensionFieldNames,\n typeToFolder: params.typeToFolder,\n });\n const {\n typeToFolder,\n located,\n originalRaw,\n document,\n warnings: parseWarnings,\n releaseLock,\n } = prepared;\n\n try {\n const beforeDocument = canonicalDocument(document, {\n schema: params.settings.schema,\n extensionFieldNames: params.extensionFieldNames,\n });\n const mutableDocument = canonicalDocument(structuredClone(document), {\n schema: params.settings.schema,\n extensionFieldNames: params.extensionFieldNames,\n });\n const mutation = params.mutate(mutableDocument);\n if (params.skipNoop === true && mutation.changedFields.length === 0) {\n return {\n item: beforeDocument.metadata,\n body: beforeDocument.body,\n changedFields: [],\n warnings: [...parseWarnings, ...(mutation.warnings ?? [])],\n };\n }\n const historyPolicy = await enforceHistoryStreamPolicyForItem({\n pmRoot: params.pmRoot,\n settings: params.settings,\n itemId: located.id,\n commandLabel: params.op,\n });\n mutableDocument.metadata.updated_at = nowIso();\n const afterDocument = canonicalDocument(mutableDocument, {\n schema: params.settings.schema,\n extensionFieldNames: params.extensionFieldNames,\n });\n const targetItemFormat: ItemFormat = \"toon\";\n const serializedAfter = serializeItemDocument(afterDocument, {\n format: targetItemFormat,\n schema: params.settings.schema,\n extensionFieldNames: params.extensionFieldNames,\n });\n const targetItemPath = getItemPath(\n params.pmRoot,\n afterDocument.metadata.type,\n located.id,\n targetItemFormat,\n typeToFolder,\n );\n const historyPath = getHistoryPath(params.pmRoot, located.id);\n const serviceWriteOverride = await runActiveServiceOverride(\"item_store_write\", {\n op: params.op,\n pm_root: params.pmRoot,\n item_id: located.id,\n source_item_path: located.itemPath,\n target_item_path: targetItemPath,\n history_path: historyPath,\n item_format: targetItemFormat,\n before: beforeDocument,\n after: afterDocument,\n contents: serializedAfter,\n });\n const { effectiveTargetItemPath, effectiveSerializedAfter, skipItemWrite } = resolveItemStoreWriteOverride(\n serviceWriteOverride,\n targetItemPath,\n serializedAfter,\n );\n\n if (!skipItemWrite) {\n await writeFileAtomic(effectiveTargetItemPath, effectiveSerializedAfter);\n }\n if (!skipItemWrite && effectiveTargetItemPath !== located.itemPath) {\n await fs.rm(located.itemPath);\n }\n const entry = createHistoryEntry({\n nowIso: afterDocument.metadata.updated_at,\n author: params.author,\n op: params.op,\n before: beforeDocument,\n after: afterDocument,\n message: params.message,\n });\n\n try {\n await appendHistoryEntry(historyPath, entry);\n } catch (error: unknown) {\n await rollbackMutatedItemWrite({\n skipItemWrite,\n effectiveTargetItemPath,\n originalItemPath: located.itemPath,\n originalRaw,\n });\n throw error;\n }\n const hookWarnings = [\n ...(await runActiveOnWriteHooks({\n path: effectiveTargetItemPath,\n scope: \"project\",\n op: params.op,\n item_id: afterDocument.metadata.id,\n item_type: afterDocument.metadata.type,\n before: beforeDocument,\n after: afterDocument,\n changed_fields: mutation.changedFields,\n })),\n ...(await runActiveOnWriteHooks({\n path: historyPath,\n scope: \"project\",\n op: `${params.op}:history`,\n item_id: afterDocument.metadata.id,\n item_type: afterDocument.metadata.type,\n before: beforeDocument,\n after: afterDocument,\n changed_fields: mutation.changedFields,\n })),\n ];\n\n recordAfterCommandAffectedItem({\n id: afterDocument.metadata.id,\n op: params.op,\n item_type: afterDocument.metadata.type,\n previous_status: beforeDocument.metadata.status,\n status: afterDocument.metadata.status,\n previous: projectAfterCommandItemSnapshot(beforeDocument.metadata, mutation.changedFields),\n current: projectAfterCommandItemSnapshot(afterDocument.metadata, mutation.changedFields),\n changed_fields: mutation.changedFields,\n });\n\n return {\n item: afterDocument.metadata,\n body: afterDocument.body,\n changedFields: mutation.changedFields,\n warnings: [\n ...parseWarnings,\n ...(mutation.warnings ?? []),\n ...historyPolicy.warnings,\n ...serviceWriteOverride.warnings,\n ...hookWarnings,\n ],\n };\n } finally {\n await releaseLock();\n }\n}\n\nexport const itemStoreTestOnly = {\n appendWarning,\n bypassesAssigneeConflict,\n buildDidYouMeanSuggestions,\n isErrno,\n};\n\n/**\n * Implements delete item for the public runtime surface of this module.\n */\nexport async function deleteItem(params: {\n pmRoot: string;\n settings: PmSettings;\n id: string;\n author: string;\n message?: string;\n force?: boolean;\n dryRun?: boolean;\n}): Promise<{ item: ItemFrontMatter; changedFields: string[]; warnings: string[]; targetPath?: string }> {\n const prepared = await prepareLockedItem({\n pmRoot: params.pmRoot,\n settings: params.settings,\n id: params.id,\n op: \"delete\",\n author: params.author,\n force: params.force,\n });\n const { located, originalRaw, document, warnings: parseWarnings, releaseLock } = prepared;\n\n try {\n const historyPolicy = await enforceHistoryStreamPolicyForItem({\n pmRoot: params.pmRoot,\n settings: params.settings,\n itemId: located.id,\n commandLabel: \"delete\",\n });\n\n const beforeDocument = canonicalDocument(document, { schema: params.settings.schema });\n const deletionTimestamp = nowIso();\n const tombstoneDocument = EMPTY_CANONICAL_DOCUMENT as unknown as ItemDocument;\n const historyEntry = createHistoryEntry({\n nowIso: deletionTimestamp,\n author: params.author,\n op: \"delete\",\n before: beforeDocument,\n after: tombstoneDocument,\n message: params.message,\n });\n const historyPath = getHistoryPath(params.pmRoot, located.id);\n const serviceDeleteOverride = await runActiveServiceOverride(\"item_store_delete\", {\n op: \"delete\",\n pm_root: params.pmRoot,\n item_id: located.id,\n item_path: located.itemPath,\n history_path: historyPath,\n before: beforeDocument,\n });\n let effectiveItemPath = located.itemPath;\n let skipDelete = false;\n if (\n serviceDeleteOverride.handled &&\n typeof serviceDeleteOverride.result === \"object\" &&\n serviceDeleteOverride.result !== null\n ) {\n const overrideRecord = serviceDeleteOverride.result as {\n item_path?: unknown;\n skip_delete?: unknown;\n };\n if (typeof overrideRecord.item_path === \"string\" && overrideRecord.item_path.trim().length > 0) {\n effectiveItemPath = overrideRecord.item_path;\n }\n if (overrideRecord.skip_delete === true) {\n skipDelete = true;\n }\n }\n\n if (params.dryRun === true) {\n return {\n item: beforeDocument.metadata,\n changedFields: [\"deleted\"],\n targetPath: effectiveItemPath,\n warnings: [...parseWarnings, ...historyPolicy.warnings, ...serviceDeleteOverride.warnings],\n };\n }\n\n if (!skipDelete) {\n await fs.rm(effectiveItemPath);\n }\n try {\n await appendHistoryEntry(historyPath, historyEntry);\n } catch (error: unknown) {\n if (!skipDelete) {\n await writeFileAtomic(effectiveItemPath, originalRaw);\n }\n throw error;\n }\n\n const hookWarnings = [\n ...(await runActiveOnWriteHooks({\n path: effectiveItemPath,\n scope: \"project\",\n op: \"delete\",\n item_id: beforeDocument.metadata.id,\n item_type: beforeDocument.metadata.type,\n before: beforeDocument,\n after: tombstoneDocument,\n changed_fields: [\"deleted\"],\n })),\n ...(await runActiveOnWriteHooks({\n path: historyPath,\n scope: \"project\",\n op: \"delete:history\",\n item_id: beforeDocument.metadata.id,\n item_type: beforeDocument.metadata.type,\n before: beforeDocument,\n after: tombstoneDocument,\n changed_fields: [\"deleted\"],\n })),\n ];\n\n recordAfterCommandAffectedItem({\n id: beforeDocument.metadata.id,\n op: \"delete\",\n item_type: beforeDocument.metadata.type,\n previous_status: beforeDocument.metadata.status,\n previous: projectAfterCommandItemSnapshot(beforeDocument.metadata, Object.keys(beforeDocument.metadata)),\n changed_fields: [\"deleted\"],\n });\n\n return {\n item: beforeDocument.metadata,\n changedFields: [\"deleted\"],\n warnings: [...parseWarnings, ...historyPolicy.warnings, ...serviceDeleteOverride.warnings, ...hookWarnings],\n };\n } finally {\n await releaseLock();\n }\n}\n", "/**\n * @module core/store/front-matter-cache\n *\n * Reads and writes tracker storage with format-aware helpers for Front Matter Cache.\n */\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { getActiveExtensionRegistrations, hasActiveOnReadHooks, runActiveOnReadHooks } from \"../extensions/index.js\";\nimport { collectRegisteredItemFieldNames } from \"../extensions/item-fields.js\";\nimport { parseItemDocument } from \"../item/item-format.js\";\nimport { evictOldestMemoEntries } from \"../shared/memo.js\";\nimport { writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { ITEM_FILE_EXTENSIONS, getItemFormatFromPath } from \"./paths.js\";\nimport type { ItemDocument, ItemFormat, ItemMetadata, ItemType, RuntimeSchemaSettings } from \"../../types/index.js\";\n\nconst CACHE_VERSION = 6;\nconst CACHE_FILENAME = \"metadata-cache.json\";\nconst BODY_CACHE_FILENAME = \"metadata-cache-bodies.json\";\nconst COLLECTIONS_CACHE_FILENAME = \"metadata-cache-collections.json\";\n\n/**\n * Heavy \"collection\" front-matter fields. These arrays dominate the on-disk cache\n * (e.g. a single item's comment thread can be hundreds of KB) yet the hot list path\n * (`pm list`, stats, deps, activity, calendar, close) never reads them. They are\n * stored in a separate collections cache that is parsed only when a caller opts in\n * (`includeCollections`), keeping the always-loaded light cache an order of magnitude\n * smaller and its JSON.parse correspondingly cheaper.\n */\nexport const HEAVY_METADATA_KEYS = [\n \"comments\",\n \"notes\",\n \"learnings\",\n \"files\",\n \"tests\",\n \"test_runs\",\n \"docs\",\n] as const;\n\nfunction resolveActiveExtensionFieldNames(): readonly string[] {\n return collectRegisteredItemFieldNames(getActiveExtensionRegistrations());\n}\n\ninterface StatSignature {\n mtime_ms: number;\n ctime_ms: number;\n size: number;\n}\n\ninterface CachedEntry extends StatSignature {\n metadata: ItemMetadata;\n body_length: number;\n}\n\ninterface CachedBody extends StatSignature {\n body: string;\n}\n\ninterface CachedCollections extends StatSignature {\n collections: Record<string, unknown>;\n}\n\ninterface CacheEnvelope {\n version: number;\n context_fingerprint: string;\n entries: Record<string, CachedEntry>;\n}\n\ninterface BodyCacheEnvelope {\n version: number;\n context_fingerprint: string;\n bodies: Record<string, CachedBody>;\n}\n\ninterface CollectionsCacheEnvelope {\n version: number;\n context_fingerprint: string;\n collections: Record<string, CachedCollections>;\n}\n\n/**\n * Split parsed front-matter into the light scalar/small fields (everything except the\n * heavy collection arrays) and the heavy collection fields. Only keys that are actually\n * present are moved, so an item without comments stays without comments in both tiers.\n */\nfunction splitHeavyMetadata(metadata: ItemMetadata): {\n light: ItemMetadata;\n heavy: Record<string, unknown>;\n} {\n const light = { ...metadata } as Record<string, unknown>;\n const heavy: Record<string, unknown> = {};\n for (const key of HEAVY_METADATA_KEYS) {\n if (key in light) {\n heavy[key] = light[key];\n delete light[key];\n }\n }\n return { light: light as ItemMetadata, heavy };\n}\n\n/**\n * Recombine light metadata with cached heavy collection fields. Key order differs from\n * the on-disk document, but every downstream hash/serialization canonicalizes and\n * sorts keys (`stableStringify`), so the merged record is byte-identical once hashed.\n */\nfunction mergeHeavyMetadata(light: ItemMetadata, heavy: Record<string, unknown> | undefined): ItemMetadata {\n if (!heavy || Object.keys(heavy).length === 0) {\n return light;\n }\n return { ...light, ...heavy } as ItemMetadata;\n}\n\n/**\n * Documents the cached document candidate payload exchanged by command, SDK, and package integrations.\n */\nexport interface CachedDocumentCandidate {\n metadata: ItemMetadata;\n body?: string;\n item_format: ItemFormat;\n item_path: string;\n}\n\nfunction computeContextFingerprint(\n preferredFormat: ItemFormat | undefined,\n typeToFolder: Record<string, string>,\n schema: RuntimeSchemaSettings | undefined,\n extensionFieldNames: readonly string[],\n): string {\n const hash = createHash(\"sha256\");\n hash.update(`format:${preferredFormat ?? \"default\"}`);\n const sortedTypes = Object.entries(typeToFolder)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([type, folder]) => `${type}=${folder}`)\n .join(\",\");\n hash.update(`|types:${sortedTypes}`);\n if (schema) {\n hash.update(`|schema:${JSON.stringify(schema)}`);\n }\n if (extensionFieldNames.length > 0) {\n hash.update(`|extension_fields:${extensionFieldNames.join(\",\")}`);\n }\n return hash.digest(\"hex\").slice(0, 16);\n}\n\nfunction getCachePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\", CACHE_FILENAME);\n}\n\nfunction getBodyCachePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\", BODY_CACHE_FILENAME);\n}\n\nfunction getCollectionsCachePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\", COLLECTIONS_CACHE_FILENAME);\n}\n\ninterface MemoizedEnvelope {\n signature: StatSignature;\n envelope: CacheEnvelope | BodyCacheEnvelope | CollectionsCacheEnvelope | null;\n}\n\n/**\n * In-process memo of parsed cache envelopes keyed by cache file path and validated\n * against the file's stat signature on every load. Commands that scan the corpus more\n * than once per invocation (`pm next`, `pm context`) and long-lived in-process hosts\n * (the MCP server) would otherwise re-read and re-parse multi-megabyte JSON on every\n * scan. Envelopes handed out from the memo are shared, so they must be treated as\n * read-only — the write path always goes through `mutateItem` on a `structuredClone`d\n * document parsed fresh from the item file, never through listed cache metadata.\n *\n * The cap bounds memory when one long-lived process serves many project roots\n * (3 envelopes per root). Hits re-insert their entry so Map insertion order tracks\n * recency, making the half-eviction drop the least-recently-used roots.\n */\nconst ENVELOPE_MEMO_MAX_ENTRIES = 24;\nconst envelopeMemo = new Map<string, MemoizedEnvelope>();\n\nfunction memoizeEnvelope(cachePath: string, entry: MemoizedEnvelope): void {\n if (envelopeMemo.size >= ENVELOPE_MEMO_MAX_ENTRIES && !envelopeMemo.has(cachePath)) {\n evictOldestMemoEntries(envelopeMemo);\n }\n envelopeMemo.set(cachePath, entry);\n}\n\nasync function loadEnvelopeMemoized<T extends MemoizedEnvelope[\"envelope\"]>(\n cachePath: string,\n parse: (raw: string) => T,\n): Promise<T> {\n let stat;\n try {\n stat = await fs.stat(cachePath);\n } catch {\n envelopeMemo.delete(cachePath);\n return null as T;\n }\n const memoized = envelopeMemo.get(cachePath);\n if (memoized && statMatches(memoized.signature, stat.mtimeMs, stat.ctimeMs, stat.size)) {\n // Re-insert on hit so insertion order tracks recency for the LRU half-eviction.\n envelopeMemo.delete(cachePath);\n envelopeMemo.set(cachePath, memoized);\n return memoized.envelope as T;\n }\n let envelope: T;\n try {\n envelope = parse(await fs.readFile(cachePath, \"utf8\"));\n } catch {\n envelope = null as T;\n }\n memoizeEnvelope(cachePath, {\n signature: { mtime_ms: stat.mtimeMs, ctime_ms: stat.ctimeMs, size: stat.size },\n envelope,\n });\n return envelope;\n}\n\n/**\n * Drop memoized envelopes. Exposed for tests; production invalidation is stat-driven\n * plus the explicit delete in {@link persistCache} after a rewrite.\n */\nexport function clearFrontMatterEnvelopeMemo(): void {\n envelopeMemo.clear();\n}\n\nasync function loadCache(pmRoot: string): Promise<CacheEnvelope | null> {\n return await loadEnvelopeMemoized(getCachePath(pmRoot), (raw) => {\n const parsed = JSON.parse(raw) as CacheEnvelope;\n if (parsed.version !== CACHE_VERSION || typeof parsed.entries !== \"object\" || parsed.entries === null) {\n return null;\n }\n return parsed;\n });\n}\n\nasync function loadBodyCache(pmRoot: string): Promise<BodyCacheEnvelope | null> {\n return await loadEnvelopeMemoized(getBodyCachePath(pmRoot), (raw) => {\n const parsed = JSON.parse(raw) as BodyCacheEnvelope;\n if (parsed.version !== CACHE_VERSION || typeof parsed.bodies !== \"object\" || parsed.bodies === null) {\n return null;\n }\n return parsed;\n });\n}\n\nasync function loadCollectionsCache(pmRoot: string): Promise<CollectionsCacheEnvelope | null> {\n return await loadEnvelopeMemoized(getCollectionsCachePath(pmRoot), (raw) => {\n const parsed = JSON.parse(raw) as CollectionsCacheEnvelope;\n if (parsed.version !== CACHE_VERSION || typeof parsed.collections !== \"object\" || parsed.collections === null) {\n return null;\n }\n return parsed;\n });\n}\n\nasync function persistCache(\n cachePath: string,\n envelope: CacheEnvelope | BodyCacheEnvelope | CollectionsCacheEnvelope,\n): Promise<void> {\n await fs.mkdir(path.dirname(cachePath), { recursive: true });\n await writeFileAtomic(cachePath, JSON.stringify(envelope));\n // Repopulate the memo with the just-written envelope so the next read after a\n // write skips the cold re-read; fall back to plain invalidation when the fresh\n // stat signature cannot be captured.\n try {\n const stat = await fs.stat(cachePath);\n memoizeEnvelope(cachePath, {\n signature: { mtime_ms: stat.mtimeMs, ctime_ms: stat.ctimeMs, size: stat.size },\n envelope,\n });\n } catch {\n envelopeMemo.delete(cachePath);\n }\n}\n\n/**\n * Decide whether a freshly parsed document candidate should replace the one\n * already recorded for the same item id when both an explicit-format file and a\n * fallback-format file exist (e.g. `pm-x.toon` and `pm-x.md`). An explicit\n * `preferredFormat` wins; otherwise `toon` wins over any non-toon format.\n *\n * This is a pure decision so the winner is fully deterministic regardless of the\n * order in which the concurrent per-file reads resolve — the inline call site\n * populates the map as each async read completes, so without a pure rule the\n * branch taken (and thus its coverage) would race. Keep this exported and\n * unit-tested across every format combination.\n */\nexport function shouldReplaceCachedDocumentCandidate(\n existingFormat: ItemFormat,\n candidateFormat: ItemFormat,\n preferredFormat: ItemFormat | undefined,\n): boolean {\n if (preferredFormat) {\n return candidateFormat === preferredFormat && existingFormat !== preferredFormat;\n }\n return candidateFormat === \"toon\" && existingFormat !== \"toon\";\n}\n\nfunction appendWarning(warnings: string[] | undefined, warning: string): void {\n if (warnings && !warnings.includes(warning)) {\n warnings.push(warning);\n }\n}\n\nfunction statMatches(signature: StatSignature, mtimeMs: number, ctimeMs: number, size: number): boolean {\n return signature.mtime_ms === mtimeMs && signature.ctime_ms === ctimeMs && signature.size === size;\n}\n\ninterface DocumentCacheMissState {\n metadata: boolean;\n body: boolean;\n collections: boolean;\n}\n\ninterface DocumentCacheMutableState {\n newEntries: Record<string, CachedEntry>;\n newBodies: Record<string, CachedBody>;\n newCollections: Record<string, CachedCollections>;\n documentsById: Map<string, { candidate: CachedDocumentCandidate; itemFormat: ItemFormat }>;\n misses: DocumentCacheMissState;\n}\n\ninterface DocumentCacheReadContext {\n pmRoot: string;\n preferredFormat: ItemFormat | undefined;\n warnings: string[] | undefined;\n schema: RuntimeSchemaSettings | undefined;\n extensionFieldNames: readonly string[];\n includeBody: boolean;\n includeCollections: boolean;\n dispatchReadHooks: boolean;\n previousEntries: Record<string, CachedEntry>;\n previousBodies: Record<string, CachedBody>;\n previousCollections: Record<string, CachedCollections>;\n state: DocumentCacheMutableState;\n}\n\ninterface CachedDocumentReadParts {\n mtimeMs: number;\n ctimeMs: number;\n size: number;\n itemFormat: ItemFormat;\n lightMetadata: ItemMetadata;\n heavyMetadata: Record<string, unknown> | undefined;\n bodyLength: number;\n body: string | undefined;\n}\n\nasync function readItemDirectoryFiles(\n pmRoot: string,\n folder: string,\n warnings: string[] | undefined,\n): Promise<{ folder: string; dirPath: string; files: string[] }> {\n const dirPath = path.join(pmRoot, folder);\n try {\n const files = await fs.readdir(dirPath);\n return { folder, dirPath, files };\n } catch (error: unknown) {\n if (typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code !== \"ENOENT\") {\n appendWarning(warnings, `item_list_directory_read_failed:${folder}`);\n }\n return { folder, dirPath, files: [] };\n }\n}\n\nfunction isItemDocumentFile(file: string): boolean {\n return ITEM_FILE_EXTENSIONS.some((ext) => file.toLowerCase().endsWith(ext));\n}\n\nfunction markDocumentCacheMisses(\n misses: DocumentCacheMissState,\n includeBody: boolean,\n includeCollections: boolean,\n metadataCached: boolean,\n bodyCached: boolean,\n collectionsCached: boolean,\n): void {\n if (!metadataCached) {\n misses.metadata = true;\n }\n if (includeBody && !bodyCached) {\n misses.body = true;\n }\n if (includeCollections && !collectionsCached) {\n misses.collections = true;\n }\n}\n\nasync function dispatchCachedDocumentReadHooks(\n filePath: string,\n warnings: string[] | undefined,\n dispatchReadHooks: boolean,\n): Promise<void> {\n if (!dispatchReadHooks) {\n return;\n }\n for (const warning of await runActiveOnReadHooks({ path: filePath, scope: \"project\" })) {\n appendWarning(warnings, warning);\n }\n}\n\nasync function readCachedDocumentParts(\n filePath: string,\n relativePath: string,\n context: DocumentCacheReadContext,\n): Promise<CachedDocumentReadParts> {\n const stat = await fs.stat(filePath);\n const mtimeMs = stat.mtimeMs;\n const ctimeMs = stat.ctimeMs;\n const { size } = stat;\n const itemFormat = getItemFormatFromPath(filePath) as ItemFormat;\n\n await dispatchCachedDocumentReadHooks(filePath, context.warnings, context.dispatchReadHooks);\n\n const cachedEntry = context.previousEntries[relativePath];\n const metadataCached = cachedEntry !== undefined && statMatches(cachedEntry, mtimeMs, ctimeMs, size);\n const cachedBody = context.previousBodies[relativePath];\n const bodyCached = cachedBody !== undefined && statMatches(cachedBody, mtimeMs, ctimeMs, size);\n const cachedCollections = context.previousCollections[relativePath];\n const collectionsCached = cachedCollections !== undefined && statMatches(cachedCollections, mtimeMs, ctimeMs, size);\n const needRead =\n !metadataCached || (context.includeBody && !bodyCached) || (context.includeCollections && !collectionsCached);\n\n if (!needRead) {\n return {\n mtimeMs,\n ctimeMs,\n size,\n itemFormat,\n lightMetadata: cachedEntry.metadata,\n heavyMetadata: context.includeCollections && cachedCollections ? cachedCollections.collections : undefined,\n bodyLength: cachedEntry.body_length,\n body: context.includeBody ? cachedBody.body : undefined,\n };\n }\n\n const raw = await fs.readFile(filePath, \"utf8\");\n const parsed = parseItemDocument(raw, {\n format: itemFormat,\n schema: context.schema,\n extensionFieldNames: context.extensionFieldNames,\n onWarning: (warning) => appendWarning(context.warnings, warning),\n });\n const split = splitHeavyMetadata(parsed.metadata);\n markDocumentCacheMisses(\n context.state.misses,\n context.includeBody,\n context.includeCollections,\n metadataCached,\n bodyCached,\n collectionsCached,\n );\n return {\n mtimeMs,\n ctimeMs,\n size,\n itemFormat,\n lightMetadata: metadataCached ? cachedEntry.metadata : split.light,\n heavyMetadata: context.includeCollections\n ? collectionsCached\n ? cachedCollections.collections\n : split.heavy\n : undefined,\n bodyLength: metadataCached ? cachedEntry.body_length : parsed.body.length,\n body: context.includeBody ? parsed.body : undefined,\n };\n}\n\nfunction recordCachedDocumentCandidate(\n filePath: string,\n relativePath: string,\n context: DocumentCacheReadContext,\n parts: CachedDocumentReadParts,\n): void {\n context.state.newEntries[relativePath] = {\n mtime_ms: parts.mtimeMs,\n ctime_ms: parts.ctimeMs,\n size: parts.size,\n metadata: parts.lightMetadata,\n body_length: parts.bodyLength,\n };\n if (context.includeBody && parts.body !== undefined) {\n context.state.newBodies[relativePath] = {\n mtime_ms: parts.mtimeMs,\n ctime_ms: parts.ctimeMs,\n size: parts.size,\n body: parts.body,\n };\n }\n if (context.includeCollections && parts.heavyMetadata !== undefined) {\n context.state.newCollections[relativePath] = {\n mtime_ms: parts.mtimeMs,\n ctime_ms: parts.ctimeMs,\n size: parts.size,\n collections: parts.heavyMetadata,\n };\n }\n\n const metadata = context.includeCollections ? mergeHeavyMetadata(parts.lightMetadata, parts.heavyMetadata) : parts.lightMetadata;\n const existing = context.state.documentsById.get(metadata.id);\n const candidate: CachedDocumentCandidate = {\n metadata,\n body: parts.body,\n item_format: parts.itemFormat,\n item_path: filePath,\n };\n if (!existing || shouldReplaceCachedDocumentCandidate(existing.itemFormat, parts.itemFormat, context.preferredFormat)) {\n context.state.documentsById.set(metadata.id, { candidate, itemFormat: parts.itemFormat });\n }\n}\n\nasync function processCachedDocumentFile(\n folder: string,\n filePath: string,\n relativePath: string,\n context: DocumentCacheReadContext,\n): Promise<void> {\n try {\n const parts = await readCachedDocumentParts(filePath, relativePath, context);\n recordCachedDocumentCandidate(filePath, relativePath, context, parts);\n } catch {\n appendWarning(context.warnings, `item_list_item_read_failed:${folder}/${path.basename(filePath)}`);\n }\n}\n\nfunction selectPreviousMetadataEntries(\n existingCache: CacheEnvelope | null,\n contextFingerprint: string,\n): Record<string, CachedEntry> {\n return existingCache && existingCache.context_fingerprint === contextFingerprint ? existingCache.entries : {};\n}\n\nfunction selectPreviousBodyEntries(\n existingBodyCache: BodyCacheEnvelope | null,\n contextFingerprint: string,\n): Record<string, CachedBody> {\n return existingBodyCache && existingBodyCache.context_fingerprint === contextFingerprint ? existingBodyCache.bodies : {};\n}\n\nfunction selectPreviousCollectionEntries(\n existingCollectionsCache: CollectionsCacheEnvelope | null,\n contextFingerprint: string,\n): Record<string, CachedCollections> {\n return existingCollectionsCache && existingCollectionsCache.context_fingerprint === contextFingerprint\n ? existingCollectionsCache.collections\n : {};\n}\n\nfunction createDocumentCacheMutableState(): DocumentCacheMutableState {\n return {\n newEntries: {},\n newBodies: {},\n newCollections: {},\n documentsById: new Map<string, { candidate: CachedDocumentCandidate; itemFormat: ItemFormat }>(),\n misses: {\n metadata: false,\n body: false,\n collections: false,\n },\n };\n}\n\nfunction collectCachedDocumentParseTasks(\n dirResults: Array<{ folder: string; dirPath: string; files: string[] }>,\n context: DocumentCacheReadContext,\n): Array<Promise<void>> {\n const parseTasks: Array<Promise<void>> = [];\n for (const { folder, dirPath, files } of dirResults) {\n for (const file of files) {\n if (!isItemDocumentFile(file)) {\n continue;\n }\n const filePath = path.join(dirPath, file);\n const relativePath = path.relative(context.pmRoot, filePath);\n parseTasks.push(processCachedDocumentFile(folder, filePath, relativePath, context));\n }\n }\n return parseTasks;\n}\n\nasync function persistMetadataCacheIfNeeded(params: {\n pmRoot: string;\n contextFingerprint: string;\n existingCache: CacheEnvelope | null;\n previousEntries: Record<string, CachedEntry>;\n state: DocumentCacheMutableState;\n}): Promise<void> {\n const metadataDirty = params.state.misses.metadata ||\n Object.keys(params.previousEntries).length !== Object.keys(params.state.newEntries).length;\n if (!metadataDirty && params.existingCache !== null && params.existingCache.context_fingerprint === params.contextFingerprint) {\n return;\n }\n await persistCache(getCachePath(params.pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: params.contextFingerprint,\n entries: params.state.newEntries,\n }).catch(() => {});\n}\n\nasync function persistBodyCacheIfNeeded(params: {\n pmRoot: string;\n contextFingerprint: string;\n existingBodyCache: BodyCacheEnvelope | null;\n previousBodies: Record<string, CachedBody>;\n state: DocumentCacheMutableState;\n}): Promise<void> {\n const bodyDirty = params.state.misses.body ||\n Object.keys(params.previousBodies).length !== Object.keys(params.state.newBodies).length;\n if (\n !bodyDirty &&\n params.existingBodyCache !== null &&\n params.existingBodyCache.context_fingerprint === params.contextFingerprint\n ) {\n return;\n }\n await persistCache(getBodyCachePath(params.pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: params.contextFingerprint,\n bodies: params.state.newBodies,\n }).catch(() => {});\n}\n\nasync function persistCollectionsCacheIfNeeded(params: {\n pmRoot: string;\n contextFingerprint: string;\n existingCollectionsCache: CollectionsCacheEnvelope | null;\n previousCollections: Record<string, CachedCollections>;\n state: DocumentCacheMutableState;\n}): Promise<void> {\n const collectionsDirty = params.state.misses.collections ||\n Object.keys(params.previousCollections).length !== Object.keys(params.state.newCollections).length;\n if (\n !collectionsDirty &&\n params.existingCollectionsCache !== null &&\n params.existingCollectionsCache.context_fingerprint === params.contextFingerprint\n ) {\n return;\n }\n await persistCache(getCollectionsCachePath(params.pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: params.contextFingerprint,\n collections: params.state.newCollections,\n }).catch(() => {});\n}\n\nfunction sortedCachedDocumentCandidates(state: DocumentCacheMutableState): CachedDocumentCandidate[] {\n return [...state.documentsById.values()]\n .sort((left, right) => left.candidate.metadata.id.localeCompare(right.candidate.metadata.id))\n .map((entry) => entry.candidate);\n}\n\n/**\n * Documents the list cache options payload exchanged by command, SDK, and package integrations.\n */\nexport interface ListCacheOptions {\n /**\n * When false, item bodies are neither loaded from nor written to the separate\n * body cache. Metadata-only callers (`pm list`, stats, deps, activity, …) skip\n * the large body cache entirely; only body consumers (search/reindex) pay for it.\n */\n includeBody?: boolean;\n /**\n * When false, heavy collection fields (comments/notes/learnings/files/tests/\n * test_runs/docs) are neither loaded from nor written to the separate collections\n * cache, and are absent from the returned metadata. Light-only callers (`pm list`\n * compact, stats, deps, activity, calendar, close) skip the large collections cache\n * entirely. Defaults to true so any caller that does read those fields stays correct.\n */\n includeCollections?: boolean;\n}\n\n/**\n * List all item documents using a persistent on-disk metadata cache.\n *\n * Metadata and bodies are stored in two separate cache files so the hot path\n * (`pm list` and friends, which discard bodies) never loads or rewrites the much\n * larger body payload. Each file is rewritten only when its contents actually\n * change, and per-file onRead hooks are dispatched only when an extension\n * registers one. Only files whose mtime/ctime/size changed since the last run are\n * re-parsed.\n */\nexport async function listAllDocumentCandidatesCached(\n pmRoot: string,\n preferredFormat: ItemFormat | undefined,\n typeToFolder: Record<string, string>,\n warnings: string[] | undefined,\n schema: RuntimeSchemaSettings | undefined,\n options: ListCacheOptions = {},\n): Promise<CachedDocumentCandidate[]> {\n const includeBody = options.includeBody !== false;\n const includeCollections = options.includeCollections !== false;\n const extensionFieldNames = resolveActiveExtensionFieldNames();\n const contextFingerprint = computeContextFingerprint(preferredFormat, typeToFolder, schema, extensionFieldNames);\n\n const existingCache = await loadCache(pmRoot);\n const previousEntries = selectPreviousMetadataEntries(existingCache, contextFingerprint);\n\n const existingBodyCache = includeBody ? await loadBodyCache(pmRoot) : null;\n const previousBodies = selectPreviousBodyEntries(existingBodyCache, contextFingerprint);\n\n const existingCollectionsCache = includeCollections ? await loadCollectionsCache(pmRoot) : null;\n const previousCollections = selectPreviousCollectionEntries(existingCollectionsCache, contextFingerprint);\n\n const entries = Object.entries(typeToFolder) as Array<[ItemType, string]>;\n const dirResults = await Promise.all(entries.map(([, folder]) => readItemDirectoryFiles(pmRoot, folder, warnings)));\n\n const dispatchReadHooks = hasActiveOnReadHooks();\n const state = createDocumentCacheMutableState();\n const context: DocumentCacheReadContext = {\n pmRoot,\n preferredFormat,\n warnings,\n schema,\n extensionFieldNames,\n includeBody,\n includeCollections,\n dispatchReadHooks,\n previousEntries,\n previousBodies,\n previousCollections,\n state,\n };\n\n await Promise.all(collectCachedDocumentParseTasks(dirResults, context));\n\n // Rewrite a cache file only when its contents changed: any re-parsed (missing or\n // stale) entry, or a different set of keys (additions/deletions).\n await persistMetadataCacheIfNeeded({ pmRoot, contextFingerprint, existingCache, previousEntries, state });\n\n if (includeBody) {\n await persistBodyCacheIfNeeded({ pmRoot, contextFingerprint, existingBodyCache, previousBodies, state });\n }\n\n if (includeCollections) {\n await persistCollectionsCacheIfNeeded({ pmRoot, contextFingerprint, existingCollectionsCache, previousCollections, state });\n }\n\n return sortedCachedDocumentCandidates(state);\n}\n\n/**\n * Implements list all documents cached for the public runtime surface of this module.\n */\nexport async function listAllDocumentsCached(\n pmRoot: string,\n preferredFormat: ItemFormat | undefined,\n typeToFolder: Record<string, string>,\n warnings: string[] | undefined,\n schema: RuntimeSchemaSettings | undefined,\n): Promise<ItemDocument[]> {\n const candidates = await listAllDocumentCandidatesCached(pmRoot, preferredFormat, typeToFolder, warnings, schema, {\n includeBody: false,\n });\n return candidates.map((candidate) => ({\n metadata: candidate.metadata,\n body: candidate.body ?? \"\",\n }));\n}\n\n/**\n * Light variant of {@link listAllDocumentsCached}: returns metadata WITHOUT the heavy\n * collection fields (comments/notes/learnings/files/tests/test_runs/docs), skipping the\n * large collections cache entirely. Only safe for callers that read just the light\n * scalar/small fields (id/title/status/type/priority/parent/tags/dates/dependencies/…).\n */\nexport async function listAllDocumentsCachedLight(\n pmRoot: string,\n preferredFormat: ItemFormat | undefined,\n typeToFolder: Record<string, string>,\n warnings: string[] | undefined,\n schema: RuntimeSchemaSettings | undefined,\n): Promise<ItemDocument[]> {\n const candidates = await listAllDocumentCandidatesCached(pmRoot, preferredFormat, typeToFolder, warnings, schema, {\n includeBody: false,\n includeCollections: false,\n });\n return candidates.map((candidate) => ({\n metadata: candidate.metadata,\n body: candidate.body ?? \"\",\n }));\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["baseline", "requireCloseReason", "global", "pmMaxVersionExceededMode", "path", "path", "next", "fs", "path", "fs", "path", "crypto", "path", "crypto", "path", "fs", "path", "fs", "path", "path", "stat", "fs", "fs", "path", "stat", "fs", "appendWarning", "resolveActiveExtensionFieldNames", "fs", "path", "fs"]
7
+ }