@unbrained/pm-cli 2026.7.1 → 2026.7.3

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 (625) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/CHANGELOG.md +25 -0
  3. package/CONTRIBUTING.md +2 -2
  4. package/README.md +1 -1
  5. package/dist/cli/commander-usage.d.ts +2 -0
  6. package/dist/cli/commander-usage.js +110 -86
  7. package/dist/cli/commander-usage.js.map +1 -1
  8. package/dist/cli/commands/activity.js +79 -57
  9. package/dist/cli/commands/activity.js.map +1 -1
  10. package/dist/cli/commands/aggregate.js +102 -79
  11. package/dist/cli/commands/aggregate.js.map +1 -1
  12. package/dist/cli/commands/calendar.js +278 -243
  13. package/dist/cli/commands/calendar.js.map +1 -1
  14. package/dist/cli/commands/close-many.js +176 -114
  15. package/dist/cli/commands/close-many.js.map +1 -1
  16. package/dist/cli/commands/close.js +157 -129
  17. package/dist/cli/commands/close.js.map +1 -1
  18. package/dist/cli/commands/comments-audit.js +50 -42
  19. package/dist/cli/commands/comments-audit.js.map +1 -1
  20. package/dist/cli/commands/config.d.ts +2 -0
  21. package/dist/cli/commands/config.js +443 -879
  22. package/dist/cli/commands/config.js.map +1 -1
  23. package/dist/cli/commands/context.js +365 -287
  24. package/dist/cli/commands/context.js.map +1 -1
  25. package/dist/cli/commands/contracts.js +352 -238
  26. package/dist/cli/commands/contracts.js.map +1 -1
  27. package/dist/cli/commands/create.js +32 -17
  28. package/dist/cli/commands/create.js.map +1 -1
  29. package/dist/cli/commands/dedupe-audit.js +46 -39
  30. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  31. package/dist/cli/commands/dedupe-merge.js +88 -69
  32. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  33. package/dist/cli/commands/extension/doctor.js +56 -67
  34. package/dist/cli/commands/extension/doctor.js.map +1 -1
  35. package/dist/cli/commands/extension/shared.js +21 -15
  36. package/dist/cli/commands/extension/shared.js.map +1 -1
  37. package/dist/cli/commands/get.js +114 -81
  38. package/dist/cli/commands/get.js.map +1 -1
  39. package/dist/cli/commands/health.d.ts +17 -0
  40. package/dist/cli/commands/health.js +545 -417
  41. package/dist/cli/commands/health.js.map +1 -1
  42. package/dist/cli/commands/history-compact.js +209 -140
  43. package/dist/cli/commands/history-compact.js.map +1 -1
  44. package/dist/cli/commands/history-redact.js +162 -119
  45. package/dist/cli/commands/history-redact.js.map +1 -1
  46. package/dist/cli/commands/history-repair.js +120 -85
  47. package/dist/cli/commands/history-repair.js.map +1 -1
  48. package/dist/cli/commands/init-agent-guidance.js +32 -19
  49. package/dist/cli/commands/init-agent-guidance.js.map +1 -1
  50. package/dist/cli/commands/init.d.ts +8 -2
  51. package/dist/cli/commands/init.js +263 -162
  52. package/dist/cli/commands/init.js.map +1 -1
  53. package/dist/cli/commands/list.js +152 -102
  54. package/dist/cli/commands/list.js.map +1 -1
  55. package/dist/cli/commands/next.js +60 -40
  56. package/dist/cli/commands/next.js.map +1 -1
  57. package/dist/cli/commands/plan.js +373 -298
  58. package/dist/cli/commands/plan.js.map +1 -1
  59. package/dist/cli/commands/profile.js +23 -15
  60. package/dist/cli/commands/profile.js.map +1 -1
  61. package/dist/cli/commands/recurrence-parsers.js +43 -25
  62. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  63. package/dist/cli/commands/reindex.d.ts +21 -5
  64. package/dist/cli/commands/reindex.js +345 -205
  65. package/dist/cli/commands/reindex.js.map +1 -1
  66. package/dist/cli/commands/restore.d.ts +8 -7
  67. package/dist/cli/commands/restore.js +105 -69
  68. package/dist/cli/commands/restore.js.map +1 -1
  69. package/dist/cli/commands/schema.js +33 -30
  70. package/dist/cli/commands/schema.js.map +1 -1
  71. package/dist/cli/commands/search.d.ts +10 -2
  72. package/dist/cli/commands/search.js +503 -470
  73. package/dist/cli/commands/search.js.map +1 -1
  74. package/dist/cli/commands/telemetry.js +98 -87
  75. package/dist/cli/commands/telemetry.js.map +1 -1
  76. package/dist/cli/commands/test-all.js +237 -168
  77. package/dist/cli/commands/test-all.js.map +1 -1
  78. package/dist/cli/commands/test.d.ts +6 -5
  79. package/dist/cli/commands/test.js +424 -344
  80. package/dist/cli/commands/test.js.map +1 -1
  81. package/dist/cli/commands/update-many.js +57 -42
  82. package/dist/cli/commands/update-many.js.map +1 -1
  83. package/dist/cli/commands/update.d.ts +1 -1
  84. package/dist/cli/commands/update.js +738 -671
  85. package/dist/cli/commands/update.js.map +1 -1
  86. package/dist/cli/commands/validate.d.ts +20 -1
  87. package/dist/cli/commands/validate.js +478 -343
  88. package/dist/cli/commands/validate.js.map +1 -1
  89. package/dist/cli/error-guidance.js +406 -361
  90. package/dist/cli/error-guidance.js.map +1 -1
  91. package/dist/cli/extension-command-help.js +27 -19
  92. package/dist/cli/extension-command-help.js.map +1 -1
  93. package/dist/cli/help-json-payload.js +57 -49
  94. package/dist/cli/help-json-payload.js.map +1 -1
  95. package/dist/cli/main.d.ts +47 -0
  96. package/dist/cli/main.js +474 -371
  97. package/dist/cli/main.js.map +1 -1
  98. package/dist/cli/migration-gates.js +22 -45
  99. package/dist/cli/migration-gates.js.map +1 -1
  100. package/dist/cli/register-list-query.js +299 -310
  101. package/dist/cli/register-list-query.js.map +1 -1
  102. package/dist/cli/register-mutation.js +763 -779
  103. package/dist/cli/register-mutation.js.map +1 -1
  104. package/dist/cli/register-operations.js +386 -362
  105. package/dist/cli/register-operations.js.map +1 -1
  106. package/dist/cli/register-setup.js +120 -101
  107. package/dist/cli/register-setup.js.map +1 -1
  108. package/dist/cli/registration-helpers.d.ts +4 -0
  109. package/dist/cli/registration-helpers.js +45 -56
  110. package/dist/cli/registration-helpers.js.map +1 -1
  111. package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js → activity-5YWLSPGE.js} +9 -9
  112. package/dist/cli-bundle/chunks/activity-BIML7K2D.js +16 -0
  113. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js → aggregate-2V2M3JZU.js} +107 -83
  114. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js.map → aggregate-2V2M3JZU.js.map} +2 -2
  115. package/dist/cli-bundle/chunks/{aggregate-JTEF4BP7.js → aggregate-EK7DXML7.js} +108 -84
  116. package/dist/cli-bundle/chunks/aggregate-EK7DXML7.js.map +1 -0
  117. package/dist/cli-bundle/chunks/{append-LOVPGVPT.js → append-EZESUVJT.js} +8 -8
  118. package/dist/cli-bundle/chunks/{append-QCFJSDFL.js → append-JFG4WQMG.js} +8 -8
  119. package/dist/cli-bundle/chunks/{chunk-TP5Q5ZD3.js → chunk-32IUNTG4.js} +158 -119
  120. package/dist/cli-bundle/chunks/chunk-32IUNTG4.js.map +1 -0
  121. package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js → chunk-3W2HJKJX.js} +3 -3
  122. package/dist/cli-bundle/chunks/{chunk-VARHOHYV.js → chunk-4EXFFP7T.js} +86 -52
  123. package/dist/cli-bundle/chunks/chunk-4EXFFP7T.js.map +7 -0
  124. package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js → chunk-4PFVUUYV.js} +2 -2
  125. package/dist/cli-bundle/chunks/{chunk-JSU5P7VS.js → chunk-4WB6S4YX.js} +308 -184
  126. package/dist/cli-bundle/chunks/chunk-4WB6S4YX.js.map +1 -0
  127. package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js → chunk-572FKBRL.js} +61 -102
  128. package/dist/cli-bundle/chunks/chunk-572FKBRL.js.map +1 -0
  129. package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js → chunk-5E7N4T2Z.js} +2 -2
  130. package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js → chunk-5IZUBZBR.js} +3 -3
  131. package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js → chunk-5JIWFWOZ.js} +2 -2
  132. package/dist/cli-bundle/chunks/{chunk-FFMQB7WR.js → chunk-67LARBDL.js} +493 -404
  133. package/dist/cli-bundle/chunks/chunk-67LARBDL.js.map +1 -0
  134. package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js → chunk-6CDCWKSX.js} +4 -4
  135. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js → chunk-6KRFL33E.js} +308 -184
  136. package/dist/cli-bundle/chunks/chunk-6KRFL33E.js.map +7 -0
  137. package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js → chunk-6NYJGMTY.js} +2 -2
  138. package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js → chunk-7CLLC75T.js} +4 -4
  139. package/dist/cli-bundle/chunks/{chunk-2466X6E4.js → chunk-7LYO6S5A.js} +8 -8
  140. package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js → chunk-A3OQ7TFW.js} +8 -8
  141. package/dist/cli-bundle/chunks/{chunk-5CGRF3L5.js → chunk-AIKU3IIL.js} +153 -90
  142. package/dist/cli-bundle/chunks/chunk-AIKU3IIL.js.map +1 -0
  143. package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js → chunk-AJHYQCBJ.js} +39 -5
  144. package/dist/cli-bundle/chunks/chunk-AJHYQCBJ.js.map +7 -0
  145. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  146. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  147. package/dist/cli-bundle/chunks/{chunk-OTUHB4HS.js → chunk-BE2SR6QL.js} +92 -77
  148. package/dist/cli-bundle/chunks/chunk-BE2SR6QL.js.map +1 -0
  149. package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js → chunk-BI4R7HI2.js} +75 -53
  150. package/dist/cli-bundle/chunks/chunk-BI4R7HI2.js.map +7 -0
  151. package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js → chunk-CXR3CMBQ.js} +33 -6
  152. package/dist/cli-bundle/chunks/chunk-CXR3CMBQ.js.map +1 -0
  153. package/dist/cli-bundle/chunks/{chunk-ZETXE4SE.js → chunk-ECU6MMTQ.js} +713 -613
  154. package/dist/cli-bundle/chunks/chunk-ECU6MMTQ.js.map +1 -0
  155. package/dist/cli-bundle/chunks/{chunk-2D4HATP2.js → chunk-EJ2OCBHF.js} +54 -30
  156. package/dist/cli-bundle/chunks/chunk-EJ2OCBHF.js.map +1 -0
  157. package/dist/cli-bundle/chunks/{chunk-BDTISOSD.js → chunk-EQURFOMH.js} +41 -26
  158. package/dist/cli-bundle/chunks/chunk-EQURFOMH.js.map +7 -0
  159. package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js → chunk-ER4ME5U2.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js → chunk-ERG65A2L.js} +2 -2
  161. package/dist/cli-bundle/chunks/{chunk-IZBR4NRW.js → chunk-F6WNBITZ.js} +157 -113
  162. package/dist/cli-bundle/chunks/chunk-F6WNBITZ.js.map +7 -0
  163. package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js → chunk-FH2H3CBD.js} +3 -3
  164. package/dist/cli-bundle/chunks/{chunk-JPECA746.js → chunk-FUFFPIYA.js} +2 -2
  165. package/dist/cli-bundle/chunks/{chunk-CF7RL6FR.js → chunk-FZJM2TXF.js} +110 -73
  166. package/dist/cli-bundle/chunks/chunk-FZJM2TXF.js.map +1 -0
  167. package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js → chunk-GUYNUXQT.js} +3 -3
  168. package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js → chunk-GVJE5T7Q.js} +2 -2
  169. package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js → chunk-HB4FAT3O.js} +42 -60
  170. package/dist/cli-bundle/chunks/chunk-HB4FAT3O.js.map +7 -0
  171. package/dist/cli-bundle/chunks/{chunk-55SNVXRQ.js → chunk-HQAF23Q2.js} +626 -484
  172. package/dist/cli-bundle/chunks/chunk-HQAF23Q2.js.map +7 -0
  173. package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js → chunk-JBZ2NTKX.js} +2 -2
  174. package/dist/cli-bundle/chunks/{chunk-RMMQ74TG.js → chunk-JPATY4SE.js} +54 -30
  175. package/dist/cli-bundle/chunks/chunk-JPATY4SE.js.map +7 -0
  176. package/dist/cli-bundle/chunks/{chunk-IPYBJWTE.js → chunk-K5DT2YKM.js} +109 -72
  177. package/dist/cli-bundle/chunks/chunk-K5DT2YKM.js.map +7 -0
  178. package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js → chunk-KEZOIPCR.js} +3 -3
  179. package/dist/cli-bundle/chunks/{chunk-RVUALSJF.js → chunk-KHVGM5CS.js} +466 -365
  180. package/dist/cli-bundle/chunks/chunk-KHVGM5CS.js.map +7 -0
  181. package/dist/cli-bundle/chunks/{chunk-YITK2PJ6.js → chunk-KS6ATO47.js} +288 -175
  182. package/dist/cli-bundle/chunks/chunk-KS6ATO47.js.map +7 -0
  183. package/dist/cli-bundle/chunks/{chunk-7R4QEMZZ.js → chunk-L4SLHV6G.js} +463 -362
  184. package/dist/cli-bundle/chunks/chunk-L4SLHV6G.js.map +1 -0
  185. package/dist/cli-bundle/chunks/{chunk-RLDHZHQS.js → chunk-LBE5QFMZ.js} +158 -114
  186. package/dist/cli-bundle/chunks/chunk-LBE5QFMZ.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js → chunk-LCWQP6NM.js} +76 -54
  188. package/dist/cli-bundle/chunks/chunk-LCWQP6NM.js.map +1 -0
  189. package/dist/cli-bundle/chunks/{chunk-KNPEF7QG.js → chunk-LOWVNZBZ.js} +91 -76
  190. package/dist/cli-bundle/chunks/chunk-LOWVNZBZ.js.map +7 -0
  191. package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js → chunk-MDHWWBNZ.js} +3 -3
  192. package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js → chunk-MEZZZBYX.js} +2 -2
  193. package/dist/cli-bundle/chunks/{chunk-V3NOKJF2.js → chunk-MHRS5FUX.js} +288 -175
  194. package/dist/cli-bundle/chunks/chunk-MHRS5FUX.js.map +1 -0
  195. package/dist/cli-bundle/chunks/{chunk-3XZCOZ5J.js → chunk-NOIEVOK5.js} +391 -313
  196. package/dist/cli-bundle/chunks/chunk-NOIEVOK5.js.map +1 -0
  197. package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js → chunk-NZ7QIUP5.js} +4 -4
  198. package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js → chunk-OGLGI22K.js} +115 -67
  199. package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js.map → chunk-OGLGI22K.js.map} +1 -1
  200. package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js → chunk-P5L7Z2O6.js} +2 -2
  201. package/dist/cli-bundle/chunks/{chunk-BZCEN4JA.js → chunk-PULUSQAV.js} +492 -403
  202. package/dist/cli-bundle/chunks/chunk-PULUSQAV.js.map +7 -0
  203. package/dist/cli-bundle/chunks/{chunk-3VGN2UWE.js → chunk-QCDTQCMW.js} +22 -30
  204. package/dist/cli-bundle/chunks/chunk-QCDTQCMW.js.map +1 -0
  205. package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js → chunk-QNNQAAZ5.js} +24 -18
  206. package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js.map → chunk-QNNQAAZ5.js.map} +1 -1
  207. package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js → chunk-RAHINBVP.js} +60 -101
  208. package/dist/cli-bundle/chunks/chunk-RAHINBVP.js.map +7 -0
  209. package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js → chunk-RJH5VQHW.js} +43 -61
  210. package/dist/cli-bundle/chunks/chunk-RJH5VQHW.js.map +1 -0
  211. package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js → chunk-SU2E4AWU.js} +6 -6
  212. package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js → chunk-SU3TB4NS.js} +2 -2
  213. package/dist/cli-bundle/chunks/{chunk-JWXRETDF.js → chunk-SYE6WMV6.js} +626 -484
  214. package/dist/cli-bundle/chunks/chunk-SYE6WMV6.js.map +1 -0
  215. package/dist/cli-bundle/chunks/{chunk-NWMZWYYB.js → chunk-T3P7PMZP.js} +42 -27
  216. package/dist/cli-bundle/chunks/chunk-T3P7PMZP.js.map +1 -0
  217. package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js → chunk-T4XBKJ3F.js} +4 -4
  218. package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js → chunk-T6AXEBOP.js} +23 -17
  219. package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js.map → chunk-T6AXEBOP.js.map} +2 -2
  220. package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js → chunk-TQ6AX5SQ.js} +58 -69
  221. package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js.map → chunk-TQ6AX5SQ.js.map} +2 -2
  222. package/dist/cli-bundle/chunks/{chunk-4XOIEKSD.js → chunk-U3S2B7TA.js} +86 -52
  223. package/dist/cli-bundle/chunks/chunk-U3S2B7TA.js.map +1 -0
  224. package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js → chunk-U5TR4N7J.js} +7 -7
  225. package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js → chunk-UMNQZS4H.js} +3 -3
  226. package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js → chunk-WJA3PXW7.js} +7 -7
  227. package/dist/cli-bundle/chunks/{chunk-RGEMWD6Q.js → chunk-WRYERRZX.js} +157 -118
  228. package/dist/cli-bundle/chunks/chunk-WRYERRZX.js.map +7 -0
  229. package/dist/cli-bundle/chunks/{chunk-NUHHPVVS.js → chunk-WYOIIFSE.js} +712 -612
  230. package/dist/cli-bundle/chunks/chunk-WYOIIFSE.js.map +7 -0
  231. package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js → chunk-XRYSCRZR.js} +116 -68
  232. package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js.map → chunk-XRYSCRZR.js.map} +3 -3
  233. package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js → chunk-YF746GTH.js} +59 -70
  234. package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js.map → chunk-YF746GTH.js.map} +1 -1
  235. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js → chunk-YPWUSH72.js} +390 -312
  236. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js.map → chunk-YPWUSH72.js.map} +2 -2
  237. package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js → chunk-YSDFIY7N.js} +3 -3
  238. package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js → chunk-YSGTMDWC.js} +2 -2
  239. package/dist/cli-bundle/chunks/{chunk-NFDPYAIP.js → chunk-YVKZ3ANP.js} +21 -29
  240. package/dist/cli-bundle/chunks/chunk-YVKZ3ANP.js.map +7 -0
  241. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  242. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  243. package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js → chunk-Z5F6XZXE.js} +6 -6
  244. package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js → chunk-Z7RPDF2Y.js} +3 -3
  245. package/dist/cli-bundle/chunks/{chunk-3S2KT7NG.js → chunk-ZFTKYWIF.js} +152 -89
  246. package/dist/cli-bundle/chunks/chunk-ZFTKYWIF.js.map +7 -0
  247. package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js → claim-2BGBGSVI.js} +8 -8
  248. package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js → claim-5GU7OE67.js} +8 -8
  249. package/dist/cli-bundle/chunks/close-6YODBUIV.js +14 -0
  250. package/dist/cli-bundle/chunks/{close-TQYAAFJP.js → close-AFVKPR57.js} +7 -7
  251. package/dist/cli-bundle/chunks/{close-many-BG5QQIDQ.js → close-many-7KLOSYLP.js} +186 -122
  252. package/dist/cli-bundle/chunks/close-many-7KLOSYLP.js.map +7 -0
  253. package/dist/cli-bundle/chunks/{close-many-LDRVEQY2.js → close-many-JKUJMHLG.js} +187 -123
  254. package/dist/cli-bundle/chunks/close-many-JKUJMHLG.js.map +1 -0
  255. package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js → comments-DNWHEBOS.js} +9 -9
  256. package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js → comments-RW23R3VE.js} +9 -9
  257. package/dist/cli-bundle/chunks/config-AUM5WBYA.js +1072 -0
  258. package/dist/cli-bundle/chunks/config-AUM5WBYA.js.map +7 -0
  259. package/dist/cli-bundle/chunks/config-OZWSA2NP.js +1062 -0
  260. package/dist/cli-bundle/chunks/config-OZWSA2NP.js.map +1 -0
  261. package/dist/cli-bundle/chunks/{context-B6275WPX.js → context-OYXRGY7S.js} +12 -12
  262. package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js → context-PKCEHQY3.js} +12 -12
  263. package/dist/cli-bundle/chunks/{contracts-HN7ABKLP.js → contracts-L6ODXNUM.js} +320 -199
  264. package/dist/cli-bundle/chunks/contracts-L6ODXNUM.js.map +7 -0
  265. package/dist/cli-bundle/chunks/{contracts-W4FZVVD6.js → contracts-X74F2GSM.js} +321 -200
  266. package/dist/cli-bundle/chunks/contracts-X74F2GSM.js.map +1 -0
  267. package/dist/cli-bundle/chunks/{copy-DEM4DATS.js → copy-6XOR3HKN.js} +5 -5
  268. package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js → copy-I4NCLBR4.js} +5 -5
  269. package/dist/cli-bundle/chunks/{create-RLRJMRTM.js → create-PM45M6PE.js} +12 -12
  270. package/dist/cli-bundle/chunks/create-Z7YCH3BE.js +28 -0
  271. package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js → delete-7YXHYG67.js} +5 -5
  272. package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js → delete-LPISP43T.js} +5 -5
  273. package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js → deps-N2T26FME.js} +5 -5
  274. package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js → deps-WATKQDE3.js} +5 -5
  275. package/dist/cli-bundle/chunks/{docs-GYZNVS26.js → docs-6LQ3GLM7.js} +7 -7
  276. package/dist/cli-bundle/chunks/{docs-26S44RXU.js → docs-Z3X6JZLT.js} +7 -7
  277. package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js → eval-6DCLG52D.js} +10 -10
  278. package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js → eval-Y3ZCUTHK.js} +10 -10
  279. package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js → extension-BNINIMT7.js} +11 -11
  280. package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js → extension-QWE4YYK5.js} +11 -11
  281. package/dist/cli-bundle/chunks/{files-NQHEXUZD.js → files-6SGKHS6O.js} +7 -7
  282. package/dist/cli-bundle/chunks/{files-MBNICQFM.js → files-FUYPSOFJ.js} +7 -7
  283. package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js → focus-2Q3K76G2.js} +6 -6
  284. package/dist/cli-bundle/chunks/{focus-XZW5423D.js → focus-ATLBWXXD.js} +6 -6
  285. package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js → gc-RUYEMNRF.js} +3 -3
  286. package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js → gc-TDWSDR66.js} +3 -3
  287. package/dist/cli-bundle/chunks/{get-A7MAOHCU.js → get-2WGLX74N.js} +120 -80
  288. package/dist/cli-bundle/chunks/get-2WGLX74N.js.map +7 -0
  289. package/dist/cli-bundle/chunks/{get-DSDEKJ3L.js → get-LY6M2JIM.js} +121 -81
  290. package/dist/cli-bundle/chunks/get-LY6M2JIM.js.map +1 -0
  291. package/dist/cli-bundle/chunks/{health-3IPFLKXB.js → health-4RKHYS3T.js} +535 -371
  292. package/dist/cli-bundle/chunks/health-4RKHYS3T.js.map +1 -0
  293. package/dist/cli-bundle/chunks/{health-GZXGBZ36.js → health-TMFVNYRA.js} +534 -370
  294. package/dist/cli-bundle/chunks/health-TMFVNYRA.js.map +7 -0
  295. package/dist/cli-bundle/chunks/history-CGNQJXFE.js +18 -0
  296. package/dist/cli-bundle/chunks/{history-NERDJNUB.js → history-SGRRS72R.js} +8 -8
  297. package/dist/cli-bundle/chunks/{history-compact-2WRZ2WK4.js → history-compact-LOED43R3.js} +213 -134
  298. package/dist/cli-bundle/chunks/history-compact-LOED43R3.js.map +7 -0
  299. package/dist/cli-bundle/chunks/{history-compact-HR7BB4LR.js → history-compact-V5DNAQHH.js} +214 -135
  300. package/dist/cli-bundle/chunks/history-compact-V5DNAQHH.js.map +1 -0
  301. package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js → history-redact-IRL7WJ3E.js} +9 -9
  302. package/dist/cli-bundle/chunks/history-redact-N3JK7VBW.js +19 -0
  303. package/dist/cli-bundle/chunks/{history-repair-XA3LC4GA.js → history-repair-4WVBVHFR.js} +124 -84
  304. package/dist/cli-bundle/chunks/history-repair-4WVBVHFR.js.map +1 -0
  305. package/dist/cli-bundle/chunks/{history-repair-LCMOS45X.js → history-repair-PGYQJMGD.js} +123 -83
  306. package/dist/cli-bundle/chunks/history-repair-PGYQJMGD.js.map +7 -0
  307. package/dist/cli-bundle/chunks/{init-64XDLQJB.js → init-4GESW7RM.js} +12 -12
  308. package/dist/cli-bundle/chunks/init-XIDPABA4.js +22 -0
  309. package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js → learnings-4BHWFFUV.js} +9 -9
  310. package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js → learnings-4FJY7WIW.js} +9 -9
  311. package/dist/cli-bundle/chunks/{list-G5Y65VF6.js → list-472TIOVK.js} +8 -8
  312. package/dist/cli-bundle/chunks/{list-DNBJVO3E.js → list-D7BF5CL2.js} +8 -8
  313. package/dist/cli-bundle/chunks/{next-FYTQF6HG.js → next-D5STGWI2.js} +71 -46
  314. package/dist/cli-bundle/chunks/next-D5STGWI2.js.map +1 -0
  315. package/dist/cli-bundle/chunks/{next-BCERKDUR.js → next-SFQZVX2B.js} +70 -45
  316. package/dist/cli-bundle/chunks/next-SFQZVX2B.js.map +7 -0
  317. package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js → notes-6KNOSLIT.js} +9 -9
  318. package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js → notes-W4UEICGF.js} +9 -9
  319. package/dist/cli-bundle/chunks/{plan-RKZHQVXR.js → plan-JO6V7BXO.js} +373 -279
  320. package/dist/cli-bundle/chunks/plan-JO6V7BXO.js.map +1 -0
  321. package/dist/cli-bundle/chunks/{plan-4WXEQCTN.js → plan-MJQW5XK3.js} +372 -278
  322. package/dist/cli-bundle/chunks/plan-MJQW5XK3.js.map +7 -0
  323. package/dist/cli-bundle/chunks/{profile-4OMM32CD.js → profile-3TOTMUR4.js} +27 -19
  324. package/dist/cli-bundle/chunks/profile-3TOTMUR4.js.map +7 -0
  325. package/dist/cli-bundle/chunks/{profile-QLER5ENE.js → profile-WIQY2KCV.js} +28 -20
  326. package/dist/cli-bundle/chunks/profile-WIQY2KCV.js.map +1 -0
  327. package/dist/cli-bundle/chunks/register-list-query-ELBHCCFI.js +416 -0
  328. package/dist/cli-bundle/chunks/register-list-query-ELBHCCFI.js.map +7 -0
  329. package/dist/cli-bundle/chunks/register-list-query-GAPQ6DM3.js +406 -0
  330. package/dist/cli-bundle/chunks/register-list-query-GAPQ6DM3.js.map +1 -0
  331. package/dist/cli-bundle/chunks/{register-mutation-KK7PHYYU.js → register-mutation-ROFE2YPC.js} +729 -702
  332. package/dist/cli-bundle/chunks/register-mutation-ROFE2YPC.js.map +7 -0
  333. package/dist/cli-bundle/chunks/{register-mutation-ENNDUAZG.js → register-mutation-SJWMVIJ2.js} +730 -703
  334. package/dist/cli-bundle/chunks/register-mutation-SJWMVIJ2.js.map +1 -0
  335. package/dist/cli-bundle/chunks/{register-operations-HZ6XERQG.js → register-operations-IADFVH53.js} +389 -365
  336. package/dist/cli-bundle/chunks/register-operations-IADFVH53.js.map +7 -0
  337. package/dist/cli-bundle/chunks/register-operations-MEKU3AKC.js +510 -0
  338. package/dist/cli-bundle/chunks/register-operations-MEKU3AKC.js.map +1 -0
  339. package/dist/cli-bundle/chunks/{register-setup-ZKJ53RS7.js → register-setup-3QJY43CY.js} +128 -103
  340. package/dist/cli-bundle/chunks/register-setup-3QJY43CY.js.map +7 -0
  341. package/dist/cli-bundle/chunks/{register-setup-P67EMBDJ.js → register-setup-AJWUSSQX.js} +129 -104
  342. package/dist/cli-bundle/chunks/register-setup-AJWUSSQX.js.map +1 -0
  343. package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js → restore-44IHMMZZ.js} +9 -9
  344. package/dist/cli-bundle/chunks/restore-EXHU34EU.js +17 -0
  345. package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js → scheduling-shortcuts-OLHNLAZY.js} +12 -12
  346. package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js → scheduling-shortcuts-TSBK4AY5.js} +12 -12
  347. package/dist/cli-bundle/chunks/{schema-73HR2OJW.js → schema-IB2NZZWD.js} +7 -7
  348. package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js → schema-VBCELP5G.js} +7 -7
  349. package/dist/cli-bundle/chunks/{search-AXPXKZER.js → search-7UBETML4.js} +10 -10
  350. package/dist/cli-bundle/chunks/{search-KILGT37L.js → search-R227JOL6.js} +10 -10
  351. package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js → stats-FAG7COEH.js} +6 -6
  352. package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js → stats-MCK7PLYS.js} +6 -6
  353. package/dist/cli-bundle/chunks/{telemetry-GAHHQTOS.js → telemetry-DRPDZMAO.js} +84 -70
  354. package/dist/cli-bundle/chunks/telemetry-DRPDZMAO.js.map +7 -0
  355. package/dist/cli-bundle/chunks/{telemetry-BZUF6H7G.js → telemetry-GVVUQSJQ.js} +85 -71
  356. package/dist/cli-bundle/chunks/telemetry-GVVUQSJQ.js.map +1 -0
  357. package/dist/cli-bundle/chunks/{test-PWDIZ255.js → test-QY44WAMR.js} +15 -15
  358. package/dist/cli-bundle/chunks/{test-ACD52Z3S.js → test-SY76DZTO.js} +15 -15
  359. package/dist/cli-bundle/chunks/test-all-QD6QAEG7.js +430 -0
  360. package/dist/cli-bundle/chunks/test-all-QD6QAEG7.js.map +7 -0
  361. package/dist/cli-bundle/chunks/test-all-USPJHXFR.js +427 -0
  362. package/dist/cli-bundle/chunks/test-all-USPJHXFR.js.map +1 -0
  363. package/dist/cli-bundle/chunks/{test-runs-UXIXPDKU.js → test-runs-MG5VIGSK.js} +185 -147
  364. package/dist/cli-bundle/chunks/test-runs-MG5VIGSK.js.map +1 -0
  365. package/dist/cli-bundle/chunks/{test-runs-PLRAZEFW.js → test-runs-QIR5MJPL.js} +184 -146
  366. package/dist/cli-bundle/chunks/test-runs-QIR5MJPL.js.map +7 -0
  367. package/dist/cli-bundle/chunks/update-A7EICML6.js +24 -0
  368. package/dist/cli-bundle/chunks/{update-KFX2SIAC.js → update-IKJZWLQC.js} +15 -15
  369. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js → update-many-BEMTDA2X.js} +84 -69
  370. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js.map → update-many-BEMTDA2X.js.map} +1 -1
  371. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js → update-many-RATAARHU.js} +83 -68
  372. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js.map → update-many-RATAARHU.js.map} +2 -2
  373. package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js → upgrade-NWMR3VQL.js} +11 -11
  374. package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js → upgrade-VU46BLJZ.js} +11 -11
  375. package/dist/cli-bundle/chunks/{validate-X5W76YJL.js → validate-GAJ6FUSI.js} +451 -321
  376. package/dist/cli-bundle/chunks/validate-GAJ6FUSI.js.map +1 -0
  377. package/dist/cli-bundle/chunks/{validate-MTUVL5VC.js → validate-NRY6MFXN.js} +450 -320
  378. package/dist/cli-bundle/chunks/validate-NRY6MFXN.js.map +7 -0
  379. package/dist/cli-bundle/main.js +1107 -916
  380. package/dist/cli-bundle/main.js.map +3 -3
  381. package/dist/core/config/nested-settings.js +89 -67
  382. package/dist/core/config/nested-settings.js.map +1 -1
  383. package/dist/core/governance/metadata-coverage.js +20 -28
  384. package/dist/core/governance/metadata-coverage.js.map +1 -1
  385. package/dist/core/history/drift-scan.js +93 -81
  386. package/dist/core/history/drift-scan.js.map +1 -1
  387. package/dist/core/item/item-type-definition.js +14 -14
  388. package/dist/core/item/item-type-definition.js.map +1 -1
  389. package/dist/core/item/type-registry.js +114 -99
  390. package/dist/core/item/type-registry.js.map +1 -1
  391. package/dist/core/output/mutation-projection.js +42 -26
  392. package/dist/core/output/mutation-projection.js.map +1 -1
  393. package/dist/core/schema/runtime-schema.js +97 -80
  394. package/dist/core/schema/runtime-schema.js.map +1 -1
  395. package/dist/core/schema/status-defs-file.js +26 -3
  396. package/dist/core/schema/status-defs-file.js.map +1 -1
  397. package/dist/core/search/corpus.js +25 -19
  398. package/dist/core/search/corpus.js.map +1 -1
  399. package/dist/core/search/semantic-defaults.js +64 -37
  400. package/dist/core/search/semantic-defaults.js.map +1 -1
  401. package/dist/core/search/vector-stores.js +32 -17
  402. package/dist/core/search/vector-stores.js.map +1 -1
  403. package/dist/core/sentry/helpers.js +31 -28
  404. package/dist/core/sentry/helpers.js.map +1 -1
  405. package/dist/core/sentry/instrument.js +54 -43
  406. package/dist/core/sentry/instrument.js.map +1 -1
  407. package/dist/core/shared/memo.d.ts +12 -0
  408. package/dist/core/shared/memo.js +25 -0
  409. package/dist/core/shared/memo.js.map +1 -0
  410. package/dist/core/shared/serialization.js +24 -14
  411. package/dist/core/shared/serialization.js.map +1 -1
  412. package/dist/core/shared/time.js +26 -4
  413. package/dist/core/shared/time.js.map +1 -1
  414. package/dist/core/store/front-matter-cache.d.ts +5 -0
  415. package/dist/core/store/front-matter-cache.js +316 -171
  416. package/dist/core/store/front-matter-cache.js.map +1 -1
  417. package/dist/core/store/item-store.js +33 -26
  418. package/dist/core/store/item-store.js.map +1 -1
  419. package/dist/core/store/settings.js +247 -203
  420. package/dist/core/store/settings.js.map +1 -1
  421. package/dist/core/test/background-runs.js +189 -160
  422. package/dist/core/test/background-runs.js.map +1 -1
  423. package/dist/sdk/cli-contracts/flag-contracts.js +71 -99
  424. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  425. package/dist/sdk/compose.js +51 -42
  426. package/dist/sdk/compose.js.map +1 -1
  427. package/docs/AGENT_GUIDE.md +2 -2
  428. package/docs/ARCHITECTURE.md +2 -2
  429. package/docs/COMMANDS.md +8 -4
  430. package/docs/CONFIGURATION.md +1 -1
  431. package/docs/EXTENSIONS.md +12 -12
  432. package/docs/ONBOARDING.md +4 -2
  433. package/docs/README.md +2 -0
  434. package/docs/examples/starter-extension/README.md +11 -10
  435. package/marketplace.json +3 -3
  436. package/package.json +2 -2
  437. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  438. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  439. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  440. package/plugins/pm-claude/.claude-plugin/plugin.json +2 -2
  441. package/plugins/pm-claude/README.md +6 -3
  442. package/plugins/pm-claude/commands/pm-init.md +1 -1
  443. package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +0 -16
  444. package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +0 -1
  445. package/dist/cli-bundle/chunks/chunk-22WKIL3H.js.map +0 -1
  446. package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +0 -1
  447. package/dist/cli-bundle/chunks/chunk-3J6JRJ3I.js.map +0 -7
  448. package/dist/cli-bundle/chunks/chunk-3K2M5OYU.js.map +0 -7
  449. package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +0 -7
  450. package/dist/cli-bundle/chunks/chunk-3VGN2UWE.js.map +0 -1
  451. package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +0 -1
  452. package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +0 -1
  453. package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +0 -7
  454. package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +0 -1
  455. package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +0 -1
  456. package/dist/cli-bundle/chunks/chunk-AXIDKKAT.js.map +0 -1
  457. package/dist/cli-bundle/chunks/chunk-BDTISOSD.js.map +0 -7
  458. package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +0 -7
  459. package/dist/cli-bundle/chunks/chunk-CF7RL6FR.js.map +0 -1
  460. package/dist/cli-bundle/chunks/chunk-CWFNTKQJ.js.map +0 -1
  461. package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +0 -1
  462. package/dist/cli-bundle/chunks/chunk-HXTQJXWT.js.map +0 -1
  463. package/dist/cli-bundle/chunks/chunk-IPYBJWTE.js.map +0 -7
  464. package/dist/cli-bundle/chunks/chunk-IZBR4NRW.js.map +0 -7
  465. package/dist/cli-bundle/chunks/chunk-JLM7BHI7.js.map +0 -7
  466. package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +0 -1
  467. package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +0 -1
  468. package/dist/cli-bundle/chunks/chunk-KNPEF7QG.js.map +0 -7
  469. package/dist/cli-bundle/chunks/chunk-MDPEOIGN.js.map +0 -7
  470. package/dist/cli-bundle/chunks/chunk-NFDPYAIP.js.map +0 -7
  471. package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +0 -7
  472. package/dist/cli-bundle/chunks/chunk-NWMZWYYB.js.map +0 -1
  473. package/dist/cli-bundle/chunks/chunk-OTUHB4HS.js.map +0 -1
  474. package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +0 -7
  475. package/dist/cli-bundle/chunks/chunk-RLDHZHQS.js.map +0 -1
  476. package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +0 -7
  477. package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +0 -7
  478. package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +0 -1
  479. package/dist/cli-bundle/chunks/chunk-V3NOKJF2.js.map +0 -1
  480. package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +0 -7
  481. package/dist/cli-bundle/chunks/chunk-WYDHYJPO.js.map +0 -7
  482. package/dist/cli-bundle/chunks/chunk-YITK2PJ6.js.map +0 -7
  483. package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +0 -1
  484. package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +0 -14
  485. package/dist/cli-bundle/chunks/close-many-BG5QQIDQ.js.map +0 -7
  486. package/dist/cli-bundle/chunks/close-many-LDRVEQY2.js.map +0 -1
  487. package/dist/cli-bundle/chunks/config-DMSU64QO.js +0 -1541
  488. package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +0 -7
  489. package/dist/cli-bundle/chunks/config-QH2DICD6.js +0 -1531
  490. package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +0 -1
  491. package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +0 -7
  492. package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +0 -1
  493. package/dist/cli-bundle/chunks/create-OH3BDGBB.js +0 -28
  494. package/dist/cli-bundle/chunks/get-A7MAOHCU.js.map +0 -7
  495. package/dist/cli-bundle/chunks/get-DSDEKJ3L.js.map +0 -1
  496. package/dist/cli-bundle/chunks/health-3IPFLKXB.js.map +0 -1
  497. package/dist/cli-bundle/chunks/health-GZXGBZ36.js.map +0 -7
  498. package/dist/cli-bundle/chunks/history-WSZHY3PN.js +0 -18
  499. package/dist/cli-bundle/chunks/history-compact-2WRZ2WK4.js.map +0 -7
  500. package/dist/cli-bundle/chunks/history-compact-HR7BB4LR.js.map +0 -1
  501. package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +0 -19
  502. package/dist/cli-bundle/chunks/history-repair-LCMOS45X.js.map +0 -7
  503. package/dist/cli-bundle/chunks/history-repair-XA3LC4GA.js.map +0 -1
  504. package/dist/cli-bundle/chunks/init-PAX32BJA.js +0 -22
  505. package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +0 -7
  506. package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +0 -1
  507. package/dist/cli-bundle/chunks/plan-4WXEQCTN.js.map +0 -7
  508. package/dist/cli-bundle/chunks/plan-RKZHQVXR.js.map +0 -1
  509. package/dist/cli-bundle/chunks/profile-4OMM32CD.js.map +0 -7
  510. package/dist/cli-bundle/chunks/profile-QLER5ENE.js.map +0 -1
  511. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js +0 -400
  512. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +0 -1
  513. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js +0 -410
  514. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +0 -7
  515. package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +0 -1
  516. package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +0 -7
  517. package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js +0 -486
  518. package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js.map +0 -1
  519. package/dist/cli-bundle/chunks/register-operations-HZ6XERQG.js.map +0 -7
  520. package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +0 -1
  521. package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +0 -7
  522. package/dist/cli-bundle/chunks/restore-YALDGTQR.js +0 -17
  523. package/dist/cli-bundle/chunks/telemetry-BZUF6H7G.js.map +0 -1
  524. package/dist/cli-bundle/chunks/telemetry-GAHHQTOS.js.map +0 -7
  525. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js +0 -358
  526. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js.map +0 -1
  527. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js +0 -361
  528. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js.map +0 -7
  529. package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +0 -7
  530. package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +0 -1
  531. package/dist/cli-bundle/chunks/update-AMRSOIWP.js +0 -24
  532. package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +0 -7
  533. package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +0 -1
  534. /package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js.map → activity-5YWLSPGE.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{activity-AW6XVFH6.js.map → activity-BIML7K2D.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{append-LOVPGVPT.js.map → append-EZESUVJT.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{append-QCFJSDFL.js.map → append-JFG4WQMG.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js.map → chunk-3W2HJKJX.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js.map → chunk-4PFVUUYV.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js.map → chunk-5E7N4T2Z.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js.map → chunk-5IZUBZBR.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js.map → chunk-5JIWFWOZ.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js.map → chunk-6CDCWKSX.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js.map → chunk-6NYJGMTY.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js.map → chunk-7CLLC75T.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-2466X6E4.js.map → chunk-7LYO6S5A.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js.map → chunk-A3OQ7TFW.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js.map → chunk-ER4ME5U2.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js.map → chunk-ERG65A2L.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js.map → chunk-FH2H3CBD.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-JPECA746.js.map → chunk-FUFFPIYA.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js.map → chunk-GUYNUXQT.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js.map → chunk-GVJE5T7Q.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js.map → chunk-JBZ2NTKX.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js.map → chunk-KEZOIPCR.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js.map → chunk-MDHWWBNZ.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js.map → chunk-MEZZZBYX.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js.map → chunk-NZ7QIUP5.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js.map → chunk-P5L7Z2O6.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js.map → chunk-SU2E4AWU.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js.map → chunk-SU3TB4NS.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js.map → chunk-T4XBKJ3F.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js.map → chunk-U5TR4N7J.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js.map → chunk-UMNQZS4H.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js.map → chunk-WJA3PXW7.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js.map → chunk-YSDFIY7N.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js.map → chunk-YSGTMDWC.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js.map → chunk-Z5F6XZXE.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js.map → chunk-Z7RPDF2Y.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js.map → claim-2BGBGSVI.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js.map → claim-5GU7OE67.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{close-E6ZZGCJY.js.map → close-6YODBUIV.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{close-TQYAAFJP.js.map → close-AFVKPR57.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js.map → comments-DNWHEBOS.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js.map → comments-RW23R3VE.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{context-B6275WPX.js.map → context-OYXRGY7S.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js.map → context-PKCEHQY3.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{copy-DEM4DATS.js.map → copy-6XOR3HKN.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js.map → copy-I4NCLBR4.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{create-RLRJMRTM.js.map → create-PM45M6PE.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{create-OH3BDGBB.js.map → create-Z7YCH3BE.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js.map → delete-7YXHYG67.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js.map → delete-LPISP43T.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js.map → deps-N2T26FME.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js.map → deps-WATKQDE3.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{docs-GYZNVS26.js.map → docs-6LQ3GLM7.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{docs-26S44RXU.js.map → docs-Z3X6JZLT.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js.map → eval-6DCLG52D.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js.map → eval-Y3ZCUTHK.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js.map → extension-BNINIMT7.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js.map → extension-QWE4YYK5.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{files-NQHEXUZD.js.map → files-6SGKHS6O.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{files-MBNICQFM.js.map → files-FUYPSOFJ.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js.map → focus-2Q3K76G2.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{focus-XZW5423D.js.map → focus-ATLBWXXD.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js.map → gc-RUYEMNRF.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js.map → gc-TDWSDR66.js.map} +0 -0
  598. /package/dist/cli-bundle/chunks/{history-WSZHY3PN.js.map → history-CGNQJXFE.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{history-NERDJNUB.js.map → history-SGRRS72R.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js.map → history-redact-IRL7WJ3E.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{history-redact-MP6CH7U5.js.map → history-redact-N3JK7VBW.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{init-64XDLQJB.js.map → init-4GESW7RM.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{init-PAX32BJA.js.map → init-XIDPABA4.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js.map → learnings-4BHWFFUV.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js.map → learnings-4FJY7WIW.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{list-G5Y65VF6.js.map → list-472TIOVK.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{list-DNBJVO3E.js.map → list-D7BF5CL2.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js.map → notes-6KNOSLIT.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js.map → notes-W4UEICGF.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js.map → restore-44IHMMZZ.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{restore-YALDGTQR.js.map → restore-EXHU34EU.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js.map → scheduling-shortcuts-OLHNLAZY.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js.map → scheduling-shortcuts-TSBK4AY5.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{schema-73HR2OJW.js.map → schema-IB2NZZWD.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js.map → schema-VBCELP5G.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{search-AXPXKZER.js.map → search-7UBETML4.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{search-KILGT37L.js.map → search-R227JOL6.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js.map → stats-FAG7COEH.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js.map → stats-MCK7PLYS.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{test-PWDIZ255.js.map → test-QY44WAMR.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{test-ACD52Z3S.js.map → test-SY76DZTO.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{update-AMRSOIWP.js.map → update-A7EICML6.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{update-KFX2SIAC.js.map → update-IKJZWLQC.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js.map → upgrade-NWMR3VQL.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js.map → upgrade-VU46BLJZ.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="703e5ff2-f98d-5709-b3f4-e2ddcc4f770f")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4e0ed066-de64-5211-9b4a-be33f25e4d08")}catch(e){}}();
3
3
  import {
4
4
  buildRemediationMap
5
5
  } from "./chunk-R2EMWY7Q.js";
@@ -8,25 +8,25 @@ import {
8
8
  } from "./chunk-37E72CNS.js";
9
9
  import {
10
10
  scanHistoryDrift
11
- } from "./chunk-OTUHB4HS.js";
11
+ } from "./chunk-BE2SR6QL.js";
12
12
  import {
13
13
  collectStaleVectorizationIds
14
14
  } from "./chunk-ROGZTCCB.js";
15
- import "./chunk-SLMUGTK3.js";
15
+ import "./chunk-7CLLC75T.js";
16
16
  import {
17
17
  PM_TELEMETRY_SOURCE_CONTEXT_VALUES,
18
18
  TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS,
19
19
  TELEMETRY_SCHEMA_VERSION
20
- } from "./chunk-AVEE5EHK.js";
20
+ } from "./chunk-Z7RPDF2Y.js";
21
21
  import {
22
22
  buildCapabilityContractMetadata,
23
23
  buildRegistrationCollisionRemediation,
24
24
  collectUnknownCapabilityGuidance,
25
25
  readManagedExtensionState
26
- } from "./chunk-NU2UEROZ.js";
26
+ } from "./chunk-YF746GTH.js";
27
27
  import "./chunk-P4SESZGT.js";
28
- import "./chunk-2D4HATP2.js";
29
- import "./chunk-MAUKX7JC.js";
28
+ import "./chunk-EJ2OCBHF.js";
29
+ import "./chunk-GVJE5T7Q.js";
30
30
  import {
31
31
  buildVectorizationEmbeddingIdentity,
32
32
  hasVectorizationEmbeddingIdentityChanged,
@@ -36,25 +36,25 @@ import {
36
36
  resolveProviderConfigSource,
37
37
  resolveSettingsWithSemanticRuntimeDefaults,
38
38
  resolveVectorStores
39
- } from "./chunk-UYUYDGIB.js";
40
- import "./chunk-6AQZPVHQ.js";
41
- import "./chunk-4A3BJ675.js";
42
- import "./chunk-HXTQJXWT.js";
39
+ } from "./chunk-OGLGI22K.js";
40
+ import "./chunk-6CDCWKSX.js";
41
+ import "./chunk-QNNQAAZ5.js";
42
+ import "./chunk-572FKBRL.js";
43
43
  import {
44
44
  collectRegisteredItemFieldNames,
45
45
  enforceHistoryStreamPolicyForItems,
46
46
  listAllFrontMatter,
47
47
  listAllFrontMatterWithBody
48
- } from "./chunk-JSU5P7VS.js";
48
+ } from "./chunk-4WB6S4YX.js";
49
49
  import {
50
50
  effectiveItemFormatVersion,
51
51
  findFirstMergeConflictMarker,
52
52
  parseItemDocument,
53
53
  scanItemFormatVersions
54
- } from "./chunk-QCWF6IYD.js";
54
+ } from "./chunk-YSDFIY7N.js";
55
55
  import {
56
56
  nowIso
57
- } from "./chunk-AXIDKKAT.js";
57
+ } from "./chunk-CXR3CMBQ.js";
58
58
  import {
59
59
  EXIT_CODE,
60
60
  ITEM_FILE_EXTENSIONS,
@@ -75,7 +75,7 @@ import {
75
75
  resolvePmRoot,
76
76
  runActiveOnReadHooks,
77
77
  toNonEmptyStringOrUndefined
78
- } from "./chunk-7R4QEMZZ.js";
78
+ } from "./chunk-L4SLHV6G.js";
79
79
 
80
80
  // dist/cli/commands/health.js
81
81
  import fs from "node:fs/promises";
@@ -183,6 +183,9 @@ async function listItemDocumentPaths(pmRoot, typeToFolder) {
183
183
  itemPaths.sort((left, right) => normalizeRelativePath(pmRoot, left).localeCompare(normalizeRelativePath(pmRoot, right)));
184
184
  return itemPaths;
185
185
  }
186
+ function shouldReportHistoryDirectoryUnreadable(error) {
187
+ return !(typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT");
188
+ }
186
189
  async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
187
190
  const itemPaths = await listItemDocumentPaths(pmRoot, typeToFolder);
188
191
  const itemUnreadable = [];
@@ -224,7 +227,7 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
224
227
  try {
225
228
  historyFiles = (await fs.readdir(historyDir)).filter((entry) => entry.endsWith(".jsonl")).sort((left, right) => left.localeCompare(right));
226
229
  } catch (error) {
227
- if (!(typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT")) {
230
+ if (shouldReportHistoryDirectoryUnreadable(error)) {
228
231
  historyUnreadable.push("history");
229
232
  }
230
233
  }
@@ -638,48 +641,50 @@ function summarizeStringList(value, limit) {
638
641
  truncated: strings.length > limit
639
642
  };
640
643
  }
641
- function summarizeHealthCheckDetails(check, limit) {
642
- const details = check.details;
643
- if (check.name === "settings") {
644
- return {
645
- version: details.version,
646
- id_prefix: details.id_prefix,
647
- locks_ttl_seconds: details.locks_ttl_seconds,
648
- warnings: summarizeStringList(details.warnings, limit)
649
- };
650
- }
651
- if (check.name === "directories") {
652
- return {
653
- required_count: Array.isArray(details.required) ? details.required.length : 0,
654
- optional_count: Array.isArray(details.optional) ? details.optional.length : 0,
655
- missing_required: summarizeStringList(details.missing_required, limit),
656
- missing_optional: summarizeStringList(details.missing_optional, limit),
657
- missing: summarizeStringList(details.missing, limit),
658
- strict_directories: details.strict_directories
659
- };
660
- }
661
- if (check.name === "settings_values") {
662
- return {
663
- warnings: summarizeStringList(details.warnings, limit)
664
- };
665
- }
666
- if (check.name === "telemetry") {
667
- return {
668
- enabled: details.enabled,
669
- capture_level: details.capture_level,
670
- endpoint: details.endpoint,
671
- queue_exists: details.queue_exists,
672
- queue_entries: details.queue_entries,
673
- queue_draining: details.queue_draining,
674
- queue_invalid_rows: details.queue_invalid_rows,
675
- queue_rows_total: details.queue_rows_total,
676
- last_successful_flush_at: details.last_successful_flush_at,
677
- last_failed_flush_at: details.last_failed_flush_at,
678
- endpoint_probe: details.endpoint_probe,
679
- env_overrides: details.env_overrides
680
- };
644
+ function summarizeActivationMigrationStatus(value) {
645
+ if (typeof value !== "object" || value === null) {
646
+ return null;
681
647
  }
682
- if (check.name === "extensions") {
648
+ const status = value;
649
+ return {
650
+ applied_count: status.applied_count,
651
+ pending_count: status.pending_count,
652
+ failed_count: status.failed_count
653
+ };
654
+ }
655
+ var HEALTH_DETAIL_SUMMARIZERS = {
656
+ settings: (details, limit) => ({
657
+ version: details.version,
658
+ id_prefix: details.id_prefix,
659
+ locks_ttl_seconds: details.locks_ttl_seconds,
660
+ warnings: summarizeStringList(details.warnings, limit)
661
+ }),
662
+ directories: (details, limit) => ({
663
+ required_count: Array.isArray(details.required) ? details.required.length : 0,
664
+ optional_count: Array.isArray(details.optional) ? details.optional.length : 0,
665
+ missing_required: summarizeStringList(details.missing_required, limit),
666
+ missing_optional: summarizeStringList(details.missing_optional, limit),
667
+ missing: summarizeStringList(details.missing, limit),
668
+ strict_directories: details.strict_directories
669
+ }),
670
+ settings_values: (details, limit) => ({
671
+ warnings: summarizeStringList(details.warnings, limit)
672
+ }),
673
+ telemetry: (details) => ({
674
+ enabled: details.enabled,
675
+ capture_level: details.capture_level,
676
+ endpoint: details.endpoint,
677
+ queue_exists: details.queue_exists,
678
+ queue_entries: details.queue_entries,
679
+ queue_draining: details.queue_draining,
680
+ queue_invalid_rows: details.queue_invalid_rows,
681
+ queue_rows_total: details.queue_rows_total,
682
+ last_successful_flush_at: details.last_successful_flush_at,
683
+ last_failed_flush_at: details.last_failed_flush_at,
684
+ endpoint_probe: details.endpoint_probe,
685
+ env_overrides: details.env_overrides
686
+ }),
687
+ extensions: (details, limit) => {
683
688
  const activation = typeof details.activation === "object" && details.activation !== null ? details.activation : {};
684
689
  return {
685
690
  disabled_by_flag: details.disabled_by_flag,
@@ -696,76 +701,66 @@ function summarizeHealthCheckDetails(check, limit) {
696
701
  service_override_count: activation.service_override_count,
697
702
  renderer_override_count: activation.renderer_override_count,
698
703
  registration_counts: activation.registration_counts,
699
- migration_status: typeof activation.migration_status === "object" && activation.migration_status !== null ? {
700
- applied_count: activation.migration_status.applied_count,
701
- pending_count: activation.migration_status.pending_count,
702
- failed_count: activation.migration_status.failed_count
703
- } : null
704
+ migration_status: summarizeActivationMigrationStatus(activation.migration_status)
704
705
  },
705
706
  triage: details.triage,
706
707
  capability_contract: details.capability_contract,
707
708
  capability_guidance: summarizeRecordList(details.capability_guidance, limit)
708
709
  };
709
- }
710
- if (check.name === "storage") {
711
- return details;
712
- }
713
- if (check.name === "locks") {
714
- return {
715
- active_lock_count: details.active_lock_count,
716
- stale_lock_count: details.stale_lock_count,
717
- unreadable_lock_count: details.unreadable_lock_count,
718
- unparseable_lock_count: details.unparseable_lock_count
719
- };
720
- }
721
- if (check.name === "integrity") {
722
- return {
723
- checked_item_files: details.checked_item_files,
724
- checked_history_streams: details.checked_history_streams,
725
- counts: details.counts,
726
- item_unreadable: summarizeStringList(details.item_unreadable, limit),
727
- item_conflict_markers: summarizeRecordList(details.item_conflict_markers, limit),
728
- item_parse_failures: summarizeStringList(details.item_parse_failures, limit),
729
- history_unreadable: summarizeStringList(details.history_unreadable, limit),
730
- history_conflict_markers: summarizeRecordList(details.history_conflict_markers, limit),
731
- history_invalid_json: summarizeRecordList(details.history_invalid_json, limit),
732
- skipped: details.skipped
733
- };
734
- }
735
- if (check.name === "history_drift") {
736
- return {
737
- checked_items: details.checked_items,
738
- counts: details.counts,
739
- drifted_items: summarizeStringList(details.drifted_items, limit),
740
- missing_streams: summarizeStringList(details.missing_streams, limit),
741
- unreadable_streams: summarizeStringList(details.unreadable_streams, limit),
742
- hash_mismatches: summarizeStringList(details.hash_mismatches, limit),
743
- chain_mismatches: summarizeStringList(details.chain_mismatches, limit),
744
- skipped: details.skipped
745
- };
746
- }
747
- if (check.name === "vectorization") {
748
- return {
749
- semantic_runtime_available: details.semantic_runtime_available,
750
- compatibility_mode_auto_defaults: details.compatibility_mode_auto_defaults,
751
- auto_ollama_defaults_applied: details.auto_ollama_defaults_applied,
752
- refresh_policy: details.refresh_policy,
753
- provider_active: details.provider_active,
754
- vector_store_active: details.vector_store_active,
755
- items: details.items,
756
- ledger_entries_before: details.ledger_entries_before,
757
- stale_items_before_total: details.stale_items_before_total,
758
- stale_items_before: summarizeStringList(details.stale_items_before, limit),
759
- refresh_attempted: details.refresh_attempted,
760
- refresh_skipped_reason: details.refresh_skipped_reason,
761
- refresh_result: details.refresh_result,
762
- ledger_entries_after: details.ledger_entries_after,
763
- stale_items_after_total: details.stale_items_after_total,
764
- stale_items_after: summarizeStringList(details.stale_items_after, limit),
765
- skipped: details.skipped
766
- };
767
- }
768
- return details;
710
+ },
711
+ // Storage details are already compact counters; keep the pre-refactor pass-through shape.
712
+ storage: (details) => details,
713
+ locks: (details) => ({
714
+ active_lock_count: details.active_lock_count,
715
+ stale_lock_count: details.stale_lock_count,
716
+ unreadable_lock_count: details.unreadable_lock_count,
717
+ unparseable_lock_count: details.unparseable_lock_count
718
+ }),
719
+ integrity: (details, limit) => ({
720
+ checked_item_files: details.checked_item_files,
721
+ checked_history_streams: details.checked_history_streams,
722
+ counts: details.counts,
723
+ item_unreadable: summarizeStringList(details.item_unreadable, limit),
724
+ item_conflict_markers: summarizeRecordList(details.item_conflict_markers, limit),
725
+ item_parse_failures: summarizeStringList(details.item_parse_failures, limit),
726
+ history_unreadable: summarizeStringList(details.history_unreadable, limit),
727
+ history_conflict_markers: summarizeRecordList(details.history_conflict_markers, limit),
728
+ history_invalid_json: summarizeRecordList(details.history_invalid_json, limit),
729
+ skipped: details.skipped
730
+ }),
731
+ history_drift: (details, limit) => ({
732
+ checked_items: details.checked_items,
733
+ counts: details.counts,
734
+ drifted_items: summarizeStringList(details.drifted_items, limit),
735
+ missing_streams: summarizeStringList(details.missing_streams, limit),
736
+ unreadable_streams: summarizeStringList(details.unreadable_streams, limit),
737
+ hash_mismatches: summarizeStringList(details.hash_mismatches, limit),
738
+ chain_mismatches: summarizeStringList(details.chain_mismatches, limit),
739
+ skipped: details.skipped
740
+ }),
741
+ vectorization: (details, limit) => ({
742
+ semantic_runtime_available: details.semantic_runtime_available,
743
+ compatibility_mode_auto_defaults: details.compatibility_mode_auto_defaults,
744
+ auto_ollama_defaults_applied: details.auto_ollama_defaults_applied,
745
+ refresh_policy: details.refresh_policy,
746
+ provider_active: details.provider_active,
747
+ vector_store_active: details.vector_store_active,
748
+ items: details.items,
749
+ ledger_entries_before: details.ledger_entries_before,
750
+ stale_items_before_total: details.stale_items_before_total,
751
+ stale_items_before: summarizeStringList(details.stale_items_before, limit),
752
+ refresh_attempted: details.refresh_attempted,
753
+ refresh_skipped_reason: details.refresh_skipped_reason,
754
+ refresh_result: details.refresh_result,
755
+ ledger_entries_after: details.ledger_entries_after,
756
+ stale_items_after_total: details.stale_items_after_total,
757
+ stale_items_after: summarizeStringList(details.stale_items_after, limit),
758
+ skipped: details.skipped
759
+ })
760
+ };
761
+ function summarizeHealthCheckDetails(check, limit) {
762
+ const summarize = HEALTH_DETAIL_SUMMARIZERS[check.name];
763
+ return summarize ? summarize(check.details, limit) : check.details;
769
764
  }
770
765
  function applyBriefHealthProjection(result) {
771
766
  const warningsSummary = summarizeStringList(result.warnings, BRIEF_HEALTH_DETAIL_LIMIT);
@@ -886,6 +881,92 @@ function parseTelemetryQueue(raw) {
886
881
  maxAttempts
887
882
  };
888
883
  }
884
+ function emptyTelemetryQueueSummary() {
885
+ return { validEntries: 0, invalidRows: 0, totalRows: 0, highRetryEntries: 0, maxAttempts: 0 };
886
+ }
887
+ function parseTelemetryRuntimeState(stateRaw) {
888
+ if (!stateRaw || stateRaw.trim().length === 0) {
889
+ return { runtimeState: {}, stateParseFailed: false };
890
+ }
891
+ try {
892
+ const parsed = JSON.parse(stateRaw);
893
+ if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
894
+ return { runtimeState: parsed, stateParseFailed: false };
895
+ }
896
+ return { runtimeState: {}, stateParseFailed: true };
897
+ } catch {
898
+ return { runtimeState: {}, stateParseFailed: true };
899
+ }
900
+ }
901
+ async function maybeProbeTelemetryEndpoint(settings, checkTelemetry) {
902
+ const endpoint = settings.telemetry.endpoint.trim();
903
+ if (!checkTelemetry || !settings.telemetry.enabled || endpoint.length === 0) {
904
+ return void 0;
905
+ }
906
+ const probe = await probeTelemetryEndpointHealth(endpoint);
907
+ return {
908
+ attempted: true,
909
+ ...probe
910
+ };
911
+ }
912
+ function collectTelemetryQueueWarnings(settings, queueSummary, runtimeState) {
913
+ const warnings = [];
914
+ if (queueSummary.invalidRows > 0) {
915
+ warnings.push(`telemetry_queue_invalid_rows:${queueSummary.invalidRows}`);
916
+ }
917
+ if (!settings.telemetry.enabled || queueSummary.validEntries === 0) {
918
+ return warnings;
919
+ }
920
+ const lastSuccess = runtimeState.last_successful_flush_at;
921
+ const lastFailure = runtimeState.last_failed_flush_at;
922
+ const activeFailure = lastFailure && (!lastSuccess || lastFailure > lastSuccess);
923
+ const neverFlushed = !lastSuccess;
924
+ const highWater = queueSummary.validEntries >= TELEMETRY_QUEUE_HIGH_WATER_MARK;
925
+ if (activeFailure || neverFlushed || highWater) {
926
+ warnings.push(`telemetry_queue_pending:${queueSummary.validEntries}`);
927
+ }
928
+ if (queueSummary.highRetryEntries > 0) {
929
+ warnings.push(`telemetry_queue_high_retries:${queueSummary.highRetryEntries}`);
930
+ }
931
+ return warnings;
932
+ }
933
+ function collectTelemetryEndpointWarnings(endpointProbe) {
934
+ if (!endpointProbe || endpointProbe.ok !== false) {
935
+ return [];
936
+ }
937
+ return typeof endpointProbe.status === "number" ? [`telemetry_endpoint_probe_http_status:${endpointProbe.status}`] : ["telemetry_endpoint_probe_failed"];
938
+ }
939
+ function collectTelemetrySchemaWarnings(endpointProbe) {
940
+ const parsedMaxSchemaVersion = Number.parseInt(endpointProbe?.max_schema_version ?? "", 10);
941
+ if (endpointProbe?.ok === true && Number.isInteger(parsedMaxSchemaVersion) && parsedMaxSchemaVersion > TELEMETRY_SCHEMA_VERSION) {
942
+ return [`telemetry_schema_version_behind:${parsedMaxSchemaVersion}`];
943
+ }
944
+ return [];
945
+ }
946
+ function collectTelemetryOtelWarnings(settings, runtimeState) {
947
+ const pendingOtelSpans = typeof runtimeState.pending_otel_spans === "number" ? runtimeState.pending_otel_spans : 0;
948
+ const lastOtelSuccess = runtimeState.last_otel_success_at;
949
+ const lastOtelFailure = runtimeState.last_otel_failure_at;
950
+ const otelExportFailing = settings.telemetry.enabled && pendingOtelSpans > 0 && Boolean(lastOtelFailure) && // >= so a mixed-outcome batch (success + failure share the same attempt
951
+ // timestamp) still surfaces the warning rather than being masked by the tie.
952
+ (!lastOtelSuccess || lastOtelFailure >= lastOtelSuccess);
953
+ return otelExportFailing ? [`telemetry_otel_export_failing:${pendingOtelSpans}`] : [];
954
+ }
955
+ function buildTelemetryEnvOverrideDetails() {
956
+ return {
957
+ telemetry_disabled: telemetryEnvFlagEnabled("PM_TELEMETRY_DISABLED") || telemetryEnvFlagEnabled("PM_NO_TELEMETRY"),
958
+ pm_no_telemetry: telemetryEnvFlagEnabled("PM_NO_TELEMETRY"),
959
+ telemetry_otel_disabled: telemetryEnvFlagEnabled("PM_TELEMETRY_OTEL_DISABLED"),
960
+ telemetry_inline_flush: telemetryEnvFlagEnabled("PM_TELEMETRY_INLINE_FLUSH"),
961
+ telemetry_source_context: telemetrySourceContextOverride()
962
+ };
963
+ }
964
+ function telemetryQueueHasEntries(settings, queueSummary) {
965
+ return settings.telemetry.enabled && queueSummary.validEntries > 0;
966
+ }
967
+ function isTelemetryQueueDraining(queueHasEntries, warnings) {
968
+ return queueHasEntries && warnings.every((warning) => !warning.startsWith("telemetry_queue_pending:") && !warning.startsWith("telemetry_queue_high_retries:"));
969
+ }
889
970
  async function probeTelemetryEndpointHealth(endpoint) {
890
971
  let probeUrl = endpoint;
891
972
  try {
@@ -931,74 +1012,19 @@ async function buildTelemetryCheck(settings, options) {
931
1012
  const queueRaw = await readFileIfExists(queuePath);
932
1013
  const queueExists = queueRaw !== null;
933
1014
  const queueSizeBytes = queueRaw ? Buffer.byteLength(queueRaw, "utf8") : 0;
934
- const queueSummary = queueRaw ? parseTelemetryQueue(queueRaw) : { validEntries: 0, invalidRows: 0, totalRows: 0, highRetryEntries: 0, maxAttempts: 0 };
1015
+ const queueSummary = queueRaw ? parseTelemetryQueue(queueRaw) : emptyTelemetryQueueSummary();
935
1016
  const stateRaw = await readFileIfExists(statePath);
936
- let runtimeState = {};
937
- let stateParseFailed = false;
938
- if (stateRaw && stateRaw.trim().length > 0) {
939
- try {
940
- const parsed = JSON.parse(stateRaw);
941
- if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
942
- runtimeState = parsed;
943
- } else {
944
- stateParseFailed = true;
945
- }
946
- } catch {
947
- stateParseFailed = true;
948
- }
949
- }
1017
+ const { runtimeState, stateParseFailed } = parseTelemetryRuntimeState(stateRaw);
950
1018
  const endpoint = settings.telemetry.endpoint.trim();
951
1019
  const endpointDisplay = normalizeEndpointForDisplay(endpoint);
952
- let endpointProbe;
953
- if (options.checkTelemetry && settings.telemetry.enabled && endpoint.length > 0) {
954
- const probe = await probeTelemetryEndpointHealth(endpoint);
955
- endpointProbe = {
956
- attempted: true,
957
- ...probe
958
- };
959
- }
1020
+ const endpointProbe = await maybeProbeTelemetryEndpoint(settings, options.checkTelemetry);
960
1021
  const warnings = [];
961
1022
  if (stateParseFailed) {
962
1023
  warnings.push("telemetry_state_invalid_json");
963
1024
  }
964
- if (queueSummary.invalidRows > 0) {
965
- warnings.push(`telemetry_queue_invalid_rows:${queueSummary.invalidRows}`);
966
- }
967
- const queueHasEntries = settings.telemetry.enabled && queueSummary.validEntries > 0;
968
- if (queueHasEntries) {
969
- const lastSuccess = runtimeState.last_successful_flush_at;
970
- const lastFailure = runtimeState.last_failed_flush_at;
971
- const activeFailure = lastFailure && (!lastSuccess || lastFailure > lastSuccess);
972
- const neverFlushed = !lastSuccess;
973
- const highWater = queueSummary.validEntries >= TELEMETRY_QUEUE_HIGH_WATER_MARK;
974
- const highRetries = queueSummary.highRetryEntries > 0;
975
- if (activeFailure || neverFlushed || highWater) {
976
- warnings.push(`telemetry_queue_pending:${queueSummary.validEntries}`);
977
- }
978
- if (highRetries) {
979
- warnings.push(`telemetry_queue_high_retries:${queueSummary.highRetryEntries}`);
980
- }
981
- }
982
- if (endpointProbe && !endpointProbe.ok) {
983
- if (typeof endpointProbe.status === "number") {
984
- warnings.push(`telemetry_endpoint_probe_http_status:${endpointProbe.status}`);
985
- } else {
986
- warnings.push("telemetry_endpoint_probe_failed");
987
- }
988
- }
989
- const parsedMaxSchemaVersion = Number.parseInt(endpointProbe?.max_schema_version ?? "", 10);
990
- if (endpointProbe && endpointProbe.ok && Number.isInteger(parsedMaxSchemaVersion) && parsedMaxSchemaVersion > TELEMETRY_SCHEMA_VERSION) {
991
- warnings.push(`telemetry_schema_version_behind:${parsedMaxSchemaVersion}`);
992
- }
1025
+ warnings.push(...collectTelemetryQueueWarnings(settings, queueSummary, runtimeState), ...collectTelemetryEndpointWarnings(endpointProbe), ...collectTelemetrySchemaWarnings(endpointProbe), ...collectTelemetryOtelWarnings(settings, runtimeState));
1026
+ const queueHasEntries = telemetryQueueHasEntries(settings, queueSummary);
993
1027
  const pendingOtelSpans = typeof runtimeState.pending_otel_spans === "number" ? runtimeState.pending_otel_spans : 0;
994
- const lastOtelSuccess = runtimeState.last_otel_success_at;
995
- const lastOtelFailure = runtimeState.last_otel_failure_at;
996
- const otelExportFailing = settings.telemetry.enabled && pendingOtelSpans > 0 && Boolean(lastOtelFailure) && // >= so a mixed-outcome batch (success + failure share the same attempt
997
- // timestamp) still surfaces the warning rather than being masked by the tie.
998
- (!lastOtelSuccess || lastOtelFailure >= lastOtelSuccess);
999
- if (otelExportFailing) {
1000
- warnings.push(`telemetry_otel_export_failing:${pendingOtelSpans}`);
1001
- }
1002
1028
  return {
1003
1029
  check: {
1004
1030
  name: "telemetry",
@@ -1011,7 +1037,7 @@ async function buildTelemetryCheck(settings, options) {
1011
1037
  queue_path: queuePath,
1012
1038
  queue_exists: queueExists,
1013
1039
  queue_entries: queueSummary.validEntries,
1014
- queue_draining: queueHasEntries && warnings.every((warning) => !warning.startsWith("telemetry_queue_pending:") && !warning.startsWith("telemetry_queue_high_retries:")),
1040
+ queue_draining: isTelemetryQueueDraining(queueHasEntries, warnings),
1015
1041
  queue_invalid_rows: queueSummary.invalidRows,
1016
1042
  queue_rows_total: queueSummary.totalRows,
1017
1043
  queue_size_bytes: queueSizeBytes,
@@ -1028,18 +1054,8 @@ async function buildTelemetryCheck(settings, options) {
1028
1054
  last_otel_success_at: runtimeState.last_otel_success_at ?? null,
1029
1055
  last_otel_failure_at: runtimeState.last_otel_failure_at ?? null,
1030
1056
  last_otel_failure_error: runtimeState.last_otel_failure_error ?? null,
1031
- endpoint_probe: endpointProbe ?? {
1032
- attempted: false
1033
- },
1034
- /* c8 ignore start -- env-override combinations are validated through runtime integration suites */
1035
- env_overrides: {
1036
- telemetry_disabled: telemetryEnvFlagEnabled("PM_TELEMETRY_DISABLED") || telemetryEnvFlagEnabled("PM_NO_TELEMETRY"),
1037
- pm_no_telemetry: telemetryEnvFlagEnabled("PM_NO_TELEMETRY"),
1038
- telemetry_otel_disabled: telemetryEnvFlagEnabled("PM_TELEMETRY_OTEL_DISABLED"),
1039
- telemetry_inline_flush: telemetryEnvFlagEnabled("PM_TELEMETRY_INLINE_FLUSH"),
1040
- telemetry_source_context: telemetrySourceContextOverride()
1041
- }
1042
- /* c8 ignore stop */
1057
+ endpoint_probe: endpointProbe ?? { attempted: false },
1058
+ env_overrides: buildTelemetryEnvOverrideDetails()
1043
1059
  }
1044
1060
  },
1045
1061
  warnings
@@ -1122,71 +1138,128 @@ async function buildHistoryDriftCheck(pmRoot, items) {
1122
1138
  warnings
1123
1139
  };
1124
1140
  }
1125
- async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, verboseStaleItems) {
1141
+ function buildVectorizationRuntimeSnapshot(settings) {
1126
1142
  const runtimeDefaults = resolveSettingsWithSemanticRuntimeDefaults(settings);
1127
1143
  const providerResolution = resolveEmbeddingProviders(runtimeDefaults.settings);
1128
1144
  const vectorStoreResolution = resolveVectorStores(runtimeDefaults.settings);
1129
1145
  const runtimeEmbeddingIdentity = providerResolution.active ? buildVectorizationEmbeddingIdentity(providerResolution.active.name, providerResolution.active.model) : null;
1130
- const semanticRuntimeAvailable = Boolean(providerResolution.active && vectorStoreResolution.active);
1131
- const ledgerBefore = await readVectorizationStatusLedger(pmRoot);
1132
- const staleBefore = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerBefore.entries) : [];
1133
- let refreshResult = {
1146
+ return {
1147
+ runtimeDefaults,
1148
+ providerResolution,
1149
+ vectorStoreResolution,
1150
+ runtimeEmbeddingIdentity,
1151
+ semanticRuntimeAvailable: Boolean(providerResolution.active && vectorStoreResolution.active)
1152
+ };
1153
+ }
1154
+ function emptyVectorizationRefreshResult() {
1155
+ return {
1134
1156
  refreshed: [],
1135
1157
  skipped: [],
1136
1158
  warnings: []
1137
1159
  };
1138
- if (refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0) {
1139
- refreshResult = await refreshSemanticEmbeddingsForMutatedItems(pmRoot, staleBefore, {
1140
- settings: runtimeDefaults.settings,
1141
- apply_runtime_defaults: false
1142
- });
1160
+ }
1161
+ async function refreshStaleVectorizationItems(params) {
1162
+ if (!params.refreshPolicy.enabled || !params.snapshot.semanticRuntimeAvailable || params.staleBefore.length === 0) {
1163
+ return emptyVectorizationRefreshResult();
1143
1164
  }
1144
- const ledgerAfter = await readVectorizationStatusLedger(pmRoot);
1145
- const staleAfter = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerAfter.entries) : [];
1146
- const strictVectorizationWarnings = !runtimeDefaults.auto_ollama_defaults_applied;
1147
- const embeddingIdentityChanged = strictVectorizationWarnings && semanticRuntimeAvailable && Boolean(ledgerBefore.embedding && runtimeEmbeddingIdentity && hasVectorizationEmbeddingIdentityChanged(ledgerBefore.embedding, runtimeEmbeddingIdentity));
1148
- const warningSet = /* @__PURE__ */ new Set([...ledgerBefore.warnings, ...ledgerAfter.warnings]);
1149
- if (strictVectorizationWarnings) {
1150
- for (const warning of refreshResult.warnings) {
1165
+ return refreshSemanticEmbeddingsForMutatedItems(params.pmRoot, params.staleBefore, {
1166
+ settings: params.snapshot.runtimeDefaults.settings,
1167
+ apply_runtime_defaults: false
1168
+ });
1169
+ }
1170
+ function vectorizationEmbeddingIdentityChanged(params) {
1171
+ return params.strictVectorizationWarnings && params.semanticRuntimeAvailable && Boolean(params.ledgerBefore.embedding && params.runtimeEmbeddingIdentity && hasVectorizationEmbeddingIdentityChanged(params.ledgerBefore.embedding, params.runtimeEmbeddingIdentity));
1172
+ }
1173
+ function collectVectorizationWarnings(params) {
1174
+ const warningSet = /* @__PURE__ */ new Set([...params.ledgerBefore.warnings, ...params.ledgerAfter.warnings]);
1175
+ if (params.strictVectorizationWarnings) {
1176
+ for (const warning of params.refreshResult.warnings) {
1151
1177
  warningSet.add(warning);
1152
1178
  }
1153
1179
  }
1154
- if (embeddingIdentityChanged) {
1180
+ if (params.embeddingIdentityChanged) {
1155
1181
  warningSet.add("vectorization_embedding_identity_changed");
1156
1182
  }
1157
- if (strictVectorizationWarnings && semanticRuntimeAvailable && staleAfter.length > 0) {
1158
- warningSet.add(`vectorization_stale_items_remaining:${staleAfter.length}`);
1183
+ if (params.strictVectorizationWarnings && params.semanticRuntimeAvailable && params.staleAfter.length > 0) {
1184
+ warningSet.add(`vectorization_stale_items_remaining:${params.staleAfter.length}`);
1185
+ }
1186
+ return [...warningSet].sort((left, right) => left.localeCompare(right));
1187
+ }
1188
+ function resolveVectorizationRefreshSkippedReason(refreshPolicy, semanticRuntimeAvailable, staleBefore) {
1189
+ if (refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0) {
1190
+ return null;
1191
+ }
1192
+ if (!refreshPolicy.enabled) {
1193
+ return "refresh_disabled";
1159
1194
  }
1160
- const warnings = [...warningSet].sort((left, right) => left.localeCompare(right));
1195
+ return semanticRuntimeAvailable ? "no_stale_items" : "semantic_runtime_unavailable";
1196
+ }
1197
+ function buildVectorizationProviderDetails(settings, snapshot) {
1198
+ const activeProvider = snapshot.providerResolution.active?.name ?? null;
1199
+ const activeVectorStore = snapshot.vectorStoreResolution.active?.name ?? null;
1200
+ return {
1201
+ provider_active: activeProvider,
1202
+ // GH-244: surface the persisted (possibly empty) configured value and
1203
+ // how the active resolution was sourced, so a config audit can tell
1204
+ // "auto-detected" apart from a genuine misconfiguration when
1205
+ // settings.search.provider / vector_store.adapter are empty strings.
1206
+ provider_configured: typeof settings.search?.provider === "string" ? settings.search.provider : null,
1207
+ provider_source: resolveProviderConfigSource(activeProvider, settings.search?.provider ?? null),
1208
+ vector_store_active: activeVectorStore,
1209
+ vector_store_configured: typeof settings.vector_store?.adapter === "string" ? settings.vector_store.adapter : null,
1210
+ vector_store_source: resolveProviderConfigSource(activeVectorStore, settings.vector_store?.adapter ?? null)
1211
+ };
1212
+ }
1213
+ function buildVectorizationRefreshPolicyDetails(refreshPolicy) {
1214
+ return {
1215
+ enabled: refreshPolicy.enabled,
1216
+ check_only: refreshPolicy.checkOnly,
1217
+ no_refresh: refreshPolicy.noRefresh,
1218
+ refresh_vectors: refreshPolicy.refreshVectors
1219
+ };
1220
+ }
1221
+ function vectorizationRefreshAttempted(refreshPolicy, semanticRuntimeAvailable, staleBefore) {
1222
+ return refreshPolicy.enabled && staleBefore.length > 0 && semanticRuntimeAvailable;
1223
+ }
1224
+ async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, verboseStaleItems) {
1225
+ const snapshot = buildVectorizationRuntimeSnapshot(settings);
1226
+ const ledgerBefore = await readVectorizationStatusLedger(pmRoot);
1227
+ const staleBefore = snapshot.semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerBefore.entries) : [];
1228
+ const refreshResult = await refreshStaleVectorizationItems({ pmRoot, snapshot, refreshPolicy, staleBefore });
1229
+ const ledgerAfter = await readVectorizationStatusLedger(pmRoot);
1230
+ const staleAfter = snapshot.semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerAfter.entries) : [];
1231
+ const strictVectorizationWarnings = !snapshot.runtimeDefaults.auto_ollama_defaults_applied;
1232
+ const embeddingIdentityChanged = vectorizationEmbeddingIdentityChanged({
1233
+ strictVectorizationWarnings,
1234
+ semanticRuntimeAvailable: snapshot.semanticRuntimeAvailable,
1235
+ ledgerBefore,
1236
+ runtimeEmbeddingIdentity: snapshot.runtimeEmbeddingIdentity
1237
+ });
1238
+ const warnings = collectVectorizationWarnings({
1239
+ ledgerBefore,
1240
+ ledgerAfter,
1241
+ refreshResult,
1242
+ strictVectorizationWarnings,
1243
+ semanticRuntimeAvailable: snapshot.semanticRuntimeAvailable,
1244
+ embeddingIdentityChanged,
1245
+ staleAfter
1246
+ });
1161
1247
  const staleBeforeDetail = selectStaleItemDetail(staleBefore, verboseStaleItems);
1162
1248
  const staleAfterDetail = selectStaleItemDetail(staleAfter, verboseStaleItems);
1249
+ const refreshAttempted = vectorizationRefreshAttempted(refreshPolicy, snapshot.semanticRuntimeAvailable, staleBefore);
1163
1250
  return {
1164
1251
  check: {
1165
1252
  name: "vectorization",
1166
1253
  status: warnings.length === 0 ? "ok" : "warn",
1167
1254
  details: {
1168
- semantic_runtime_available: semanticRuntimeAvailable,
1169
- compatibility_mode_auto_defaults: runtimeDefaults.auto_ollama_defaults_applied,
1170
- auto_ollama_defaults_applied: runtimeDefaults.auto_ollama_defaults_applied,
1171
- refresh_policy: {
1172
- enabled: refreshPolicy.enabled,
1173
- check_only: refreshPolicy.checkOnly,
1174
- no_refresh: refreshPolicy.noRefresh,
1175
- refresh_vectors: refreshPolicy.refreshVectors
1176
- },
1177
- provider_active: providerResolution.active?.name ?? null,
1178
- // GH-244: surface the persisted (possibly empty) configured value and
1179
- // how the active resolution was sourced, so a config audit can tell
1180
- // "auto-detected" apart from a genuine misconfiguration when
1181
- // settings.search.provider / vector_store.adapter are empty strings.
1182
- provider_configured: typeof settings.search?.provider === "string" ? settings.search.provider : null,
1183
- provider_source: resolveProviderConfigSource(providerResolution.active?.name ?? null, settings.search?.provider ?? null),
1184
- vector_store_active: vectorStoreResolution.active?.name ?? null,
1185
- vector_store_configured: typeof settings.vector_store?.adapter === "string" ? settings.vector_store.adapter : null,
1186
- vector_store_source: resolveProviderConfigSource(vectorStoreResolution.active?.name ?? null, settings.vector_store?.adapter ?? null),
1255
+ semantic_runtime_available: snapshot.semanticRuntimeAvailable,
1256
+ compatibility_mode_auto_defaults: snapshot.runtimeDefaults.auto_ollama_defaults_applied,
1257
+ auto_ollama_defaults_applied: snapshot.runtimeDefaults.auto_ollama_defaults_applied,
1258
+ refresh_policy: buildVectorizationRefreshPolicyDetails(refreshPolicy),
1259
+ ...buildVectorizationProviderDetails(settings, snapshot),
1187
1260
  embedding_identity_changed: embeddingIdentityChanged,
1188
1261
  embedding_identity_before: ledgerBefore.embedding ?? null,
1189
- embedding_identity_runtime: runtimeEmbeddingIdentity ?? null,
1262
+ embedding_identity_runtime: snapshot.runtimeEmbeddingIdentity ?? null,
1190
1263
  items: items.length,
1191
1264
  ledger_entries_before: Object.keys(ledgerBefore.entries).length,
1192
1265
  stale_items_detail_mode: verboseStaleItems ? "full" : "summary",
@@ -1194,8 +1267,8 @@ async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, v
1194
1267
  stale_items_before_total: staleBeforeDetail.total,
1195
1268
  stale_items_before: staleBeforeDetail.values,
1196
1269
  stale_items_before_truncated: staleBeforeDetail.truncated,
1197
- refresh_attempted: refreshPolicy.enabled && staleBefore.length > 0 && semanticRuntimeAvailable,
1198
- refresh_skipped_reason: refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0 ? null : !refreshPolicy.enabled ? "refresh_disabled" : !semanticRuntimeAvailable ? "semantic_runtime_unavailable" : "no_stale_items",
1270
+ refresh_attempted: refreshAttempted,
1271
+ refresh_skipped_reason: resolveVectorizationRefreshSkippedReason(refreshPolicy, snapshot.semanticRuntimeAvailable, staleBefore),
1199
1272
  refresh_result: refreshResult,
1200
1273
  ledger_entries_after: Object.keys(ledgerAfter.entries).length,
1201
1274
  stale_items_after_total: staleAfterDetail.total,
@@ -1233,17 +1306,7 @@ function resolveVectorRefreshPolicy(options) {
1233
1306
  refreshVectors
1234
1307
  };
1235
1308
  }
1236
- async function runHealth(global, options = {}) {
1237
- const pmRoot = resolvePmRoot(process.cwd(), global.path);
1238
- const settingsPath = getSettingsPath(pmRoot);
1239
- if (!await pathExists(settingsPath)) {
1240
- throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1241
- }
1242
- const { settings, warnings: settingsReadWarnings } = await readSettingsWithMetadata(pmRoot);
1243
- const normalizedSettingsReadWarnings = [...new Set(settingsReadWarnings)];
1244
- const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1245
- const strictDirectories = options.strictDirectories === true;
1246
- const refreshPolicy = resolveVectorRefreshPolicy(options);
1309
+ function resolveHealthDirectoryLists(typeRegistry) {
1247
1310
  const optionalBuiltinDirs = new Set(PM_OPTIONAL_TYPE_SUBDIRS.filter((entry) => entry.length > 0));
1248
1311
  const requiredDirSet = new Set(PM_CORE_REQUIRED_SUBDIRS.filter((entry) => entry.length > 0));
1249
1312
  const optionalDirSet = /* @__PURE__ */ new Set();
@@ -1254,41 +1317,202 @@ async function runHealth(global, options = {}) {
1254
1317
  }
1255
1318
  requiredDirSet.add(folder);
1256
1319
  }
1257
- const requiredDirs = [...requiredDirSet].sort((left, right) => left.localeCompare(right));
1258
- const optionalDirs = [...optionalDirSet].sort((left, right) => left.localeCompare(right));
1320
+ return {
1321
+ requiredDirs: [...requiredDirSet].sort((left, right) => left.localeCompare(right)),
1322
+ optionalDirs: [...optionalDirSet].sort((left, right) => left.localeCompare(right)),
1323
+ optionalDirSet
1324
+ };
1325
+ }
1326
+ async function scanHealthDirectories(pmRoot, typeRegistry, strictDirectories) {
1327
+ const { requiredDirs, optionalDirs, optionalDirSet } = resolveHealthDirectoryLists(typeRegistry);
1259
1328
  const missingRequiredDirs = [];
1260
1329
  const missingOptionalDirs = [];
1261
1330
  const hookWarnings = [];
1262
1331
  for (const relativeDir of [...requiredDirs, ...optionalDirs]) {
1263
1332
  const directoryPath = path.join(pmRoot, relativeDir);
1264
- hookWarnings.push(...await runActiveOnReadHooks({
1265
- path: directoryPath,
1266
- scope: "project"
1267
- }));
1268
- if (!await isDirectory(directoryPath)) {
1269
- if (optionalDirSet.has(relativeDir)) {
1270
- missingOptionalDirs.push(relativeDir);
1271
- } else {
1272
- missingRequiredDirs.push(relativeDir);
1273
- }
1333
+ hookWarnings.push(...await runActiveOnReadHooks({ path: directoryPath, scope: "project" }));
1334
+ if (await isDirectory(directoryPath)) {
1335
+ continue;
1336
+ }
1337
+ if (optionalDirSet.has(relativeDir)) {
1338
+ missingOptionalDirs.push(relativeDir);
1339
+ } else {
1340
+ missingRequiredDirs.push(relativeDir);
1274
1341
  }
1275
1342
  }
1276
- const missingDirs = strictDirectories ? [...missingRequiredDirs, ...missingOptionalDirs] : [...missingRequiredDirs];
1343
+ return {
1344
+ requiredDirs,
1345
+ optionalDirs,
1346
+ missingRequiredDirs,
1347
+ missingOptionalDirs,
1348
+ missingDirs: strictDirectories ? [...missingRequiredDirs, ...missingOptionalDirs] : [...missingRequiredDirs],
1349
+ hookWarnings
1350
+ };
1351
+ }
1352
+ function resolveHealthSkipPolicy(options) {
1353
+ const summaryMode = options.summary === true && options.full !== true;
1354
+ const fastProjectionCheckOnly = options.checkOnly === true && (options.brief === true || options.summary === true) && options.full !== true;
1355
+ return {
1356
+ summaryMode,
1357
+ skipIntegrity: (options.skipIntegrity === true || fastProjectionCheckOnly) && options.full !== true,
1358
+ skipDrift: (options.skipDrift === true || fastProjectionCheckOnly) && options.full !== true,
1359
+ skipVectors: (options.skipVectors === true || fastProjectionCheckOnly) && options.full !== true
1360
+ };
1361
+ }
1362
+ async function readHealthItems(params) {
1363
+ if (params.skipPolicy.skipDrift && params.skipPolicy.skipVectors) {
1364
+ return listAllFrontMatter(params.pmRoot, params.settings.item_format, params.typeRegistry.type_to_folder, params.itemReadWarnings, params.settings.schema);
1365
+ }
1366
+ return listAllFrontMatterWithBody(params.pmRoot, params.settings.item_format, params.typeRegistry.type_to_folder, params.itemReadWarnings, params.settings.schema);
1367
+ }
1368
+ function buildSkippedHealthCheck(name) {
1369
+ return { check: { name, status: "ok", details: { skipped: true } }, warnings: [] };
1370
+ }
1371
+ function buildSettingsHealthCheck(settingsPath, settings, normalizedSettingsReadWarnings) {
1372
+ return {
1373
+ name: "settings",
1374
+ /* c8 ignore next -- settings read-warning status split is covered in broader read-settings integration tests */
1375
+ status: normalizedSettingsReadWarnings.length === 0 ? "ok" : "warn",
1376
+ details: {
1377
+ path: settingsPath,
1378
+ version: settings.version,
1379
+ id_prefix: settings.id_prefix,
1380
+ locks_ttl_seconds: settings.locks.ttl_seconds,
1381
+ warnings: normalizedSettingsReadWarnings
1382
+ }
1383
+ };
1384
+ }
1385
+ function buildDirectoriesHealthCheck(directoryState, strictDirectories) {
1386
+ return {
1387
+ name: "directories",
1388
+ status: directoryState.missingDirs.length === 0 ? "ok" : "warn",
1389
+ details: {
1390
+ required: directoryState.requiredDirs,
1391
+ optional: directoryState.optionalDirs,
1392
+ missing_required: directoryState.missingRequiredDirs,
1393
+ missing_optional: directoryState.missingOptionalDirs,
1394
+ missing: directoryState.missingDirs,
1395
+ strict_directories: strictDirectories
1396
+ }
1397
+ };
1398
+ }
1399
+ function buildSettingsValuesHealthCheck(settingWarnings) {
1400
+ return {
1401
+ name: "settings_values",
1402
+ status: settingWarnings.length === 0 ? "ok" : "warn",
1403
+ details: { warnings: settingWarnings }
1404
+ };
1405
+ }
1406
+ function buildStorageHealthCheck(items, settings, historySummary) {
1407
+ return {
1408
+ name: "storage",
1409
+ status: historySummary.over_threshold.length === 0 ? "ok" : "warn",
1410
+ details: {
1411
+ items: items.length,
1412
+ history_streams: historySummary.count,
1413
+ ...historySummary.max_entries !== null ? {
1414
+ compact_policy: {
1415
+ enabled: settings.history.compact_policy.enabled,
1416
+ max_entries: historySummary.max_entries,
1417
+ trigger: settings.history.compact_policy.trigger,
1418
+ over_threshold_count: historySummary.over_threshold.length,
1419
+ over_threshold: historySummary.over_threshold
1420
+ }
1421
+ } : {}
1422
+ }
1423
+ };
1424
+ }
1425
+ function collectHealthWarnings(params) {
1426
+ const warnings = [
1427
+ ...params.directoryState.missingDirs.map((dir) => `missing_directory:${dir}`),
1428
+ ...params.normalizedSettingsReadWarnings,
1429
+ ...params.settingWarnings,
1430
+ ...params.normalizedItemReadWarnings,
1431
+ ...params.telemetryCheck.warnings,
1432
+ ...params.extensionCheck.warnings,
1433
+ ...params.historyPolicyWarnings,
1434
+ ...params.historySummary.warnings,
1435
+ ...params.locksCheck.warnings,
1436
+ ...params.integrityCheck.warnings,
1437
+ ...params.historyDriftCheck.warnings,
1438
+ ...params.vectorizationCheck.warnings,
1439
+ ...params.directoryState.hookWarnings
1440
+ ];
1441
+ return [...new Set(warnings)];
1442
+ }
1443
+ function extractHistoryDriftedCount(historyDriftCheck) {
1444
+ const counts = historyDriftCheck.check.details.counts;
1445
+ return typeof counts?.drifted === "number" ? counts.drifted : 0;
1446
+ }
1447
+ function buildHealthRemediationSources(params) {
1448
+ return {
1449
+ settings: params.normalizedSettingsReadWarnings,
1450
+ directories: params.directoryState.missingDirs.map((dir) => `missing_directory:${dir}`),
1451
+ settings_values: params.settingWarnings,
1452
+ telemetry: params.telemetryCheck.warnings,
1453
+ extensions: params.extensionCheck.warnings,
1454
+ storage: params.historySummary.over_threshold.map((id) => `history_stream_over_compact_threshold:${id}`),
1455
+ locks: params.locksCheck.warnings,
1456
+ integrity: params.integrityCheck.warnings,
1457
+ history_drift: params.historyDriftCheck.warnings,
1458
+ vectorization: params.vectorizationCheck.warnings
1459
+ };
1460
+ }
1461
+ function rewriteBulkHealthRemediation(params) {
1462
+ if (params.check.name === "history_drift" && params.historyDriftedCount > 1) {
1463
+ for (const code of Object.keys(params.remediationMap)) {
1464
+ params.remediationMap[code] = "pm history-repair --all";
1465
+ }
1466
+ }
1467
+ if (params.check.name === "storage" && params.overThresholdCount > 1) {
1468
+ for (const code of Object.keys(params.remediationMap)) {
1469
+ params.remediationMap[code] = "pm history-compact --all-streams";
1470
+ }
1471
+ }
1472
+ }
1473
+ function attachHealthRemediationMaps(params) {
1474
+ for (const check of params.checks) {
1475
+ const remediationMap = buildRemediationMap(params.remediationSources[check.name]);
1476
+ rewriteBulkHealthRemediation({
1477
+ check,
1478
+ remediationMap,
1479
+ historyDriftedCount: params.historyDriftedCount,
1480
+ overThresholdCount: params.overThresholdCount
1481
+ });
1482
+ if (Object.keys(remediationMap).length > 0) {
1483
+ check.details = { ...check.details, remediation_map: remediationMap };
1484
+ }
1485
+ }
1486
+ }
1487
+ function projectHealthResult(result, options, summaryMode) {
1488
+ if (summaryMode) {
1489
+ return applySummaryHealthProjection(result);
1490
+ }
1491
+ return options.brief === true ? applyBriefHealthProjection(result) : result;
1492
+ }
1493
+ async function runHealth(global, options = {}) {
1494
+ const pmRoot = resolvePmRoot(process.cwd(), global.path);
1495
+ const settingsPath = getSettingsPath(pmRoot);
1496
+ if (!await pathExists(settingsPath)) {
1497
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1498
+ }
1499
+ const { settings, warnings: settingsReadWarnings } = await readSettingsWithMetadata(pmRoot);
1500
+ const normalizedSettingsReadWarnings = [...new Set(settingsReadWarnings)];
1501
+ const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1502
+ const strictDirectories = options.strictDirectories === true;
1503
+ const refreshPolicy = resolveVectorRefreshPolicy(options);
1504
+ const directoryState = await scanHealthDirectories(pmRoot, typeRegistry, strictDirectories);
1277
1505
  const settingWarnings = validateSettingsValues(settings);
1278
1506
  const telemetryCheck = await buildTelemetryCheck(settings, {
1279
1507
  checkTelemetry: options.checkTelemetry === true
1280
1508
  });
1281
1509
  const extensionCheck = await buildExtensionCheck(pmRoot, settings, Boolean(global.noExtensions));
1282
- const summaryMode = options.summary === true && options.full !== true;
1283
- const fastProjectionCheckOnly = options.checkOnly === true && (options.brief === true || options.summary === true) && options.full !== true;
1284
- const skipIntegrity = (options.skipIntegrity === true || fastProjectionCheckOnly) && options.full !== true;
1285
- const skipDrift = (options.skipDrift === true || fastProjectionCheckOnly) && options.full !== true;
1286
- const skipVectors = (options.skipVectors === true || fastProjectionCheckOnly) && options.full !== true;
1510
+ const skipPolicy = resolveHealthSkipPolicy(options);
1287
1511
  const itemReadWarnings = [];
1288
- const items = skipDrift && skipVectors ? await listAllFrontMatter(pmRoot, settings.item_format, typeRegistry.type_to_folder, itemReadWarnings, settings.schema) : await listAllFrontMatterWithBody(pmRoot, settings.item_format, typeRegistry.type_to_folder, itemReadWarnings, settings.schema);
1512
+ const items = await readHealthItems({ pmRoot, settings, typeRegistry, skipPolicy, itemReadWarnings });
1289
1513
  const itemsWithBody = items;
1290
1514
  const normalizedItemReadWarnings = [...new Set(itemReadWarnings)];
1291
- const historyPolicy = skipDrift ? { warnings: [] } : await enforceHistoryStreamPolicyForItems({
1515
+ const historyPolicy = skipPolicy.skipDrift ? { warnings: [] } : await enforceHistoryStreamPolicyForItems({
1292
1516
  pmRoot,
1293
1517
  settings,
1294
1518
  itemIds: items.map((item) => item.id),
@@ -1296,110 +1520,52 @@ async function runHealth(global, options = {}) {
1296
1520
  });
1297
1521
  const historySummary = await countHistoryStreams(pmRoot, settings.history.compact_policy);
1298
1522
  const locksCheck = await buildLocksCheck(pmRoot);
1299
- const integrityCheck = skipIntegrity ? { check: { name: "integrity", status: "ok", details: { skipped: true } }, warnings: [] } : await buildIntegrityCheck(pmRoot, typeRegistry.type_to_folder, settings.schema);
1300
- const historyDriftCheck = skipDrift ? { check: { name: "history_drift", status: "ok", details: { skipped: true } }, warnings: [] } : await buildHistoryDriftCheck(pmRoot, itemsWithBody);
1301
- const vectorizationCheck = skipVectors ? { check: { name: "vectorization", status: "ok", details: { skipped: true } }, warnings: [] } : await buildVectorizationCheck(pmRoot, settings, itemsWithBody, refreshPolicy, options.verboseStaleItems === true);
1523
+ const integrityCheck = skipPolicy.skipIntegrity ? buildSkippedHealthCheck("integrity") : await buildIntegrityCheck(pmRoot, typeRegistry.type_to_folder, settings.schema);
1524
+ const historyDriftCheck = skipPolicy.skipDrift ? buildSkippedHealthCheck("history_drift") : await buildHistoryDriftCheck(pmRoot, itemsWithBody);
1525
+ const vectorizationCheck = skipPolicy.skipVectors ? buildSkippedHealthCheck("vectorization") : await buildVectorizationCheck(pmRoot, settings, itemsWithBody, refreshPolicy, options.verboseStaleItems === true);
1302
1526
  const checks = [
1303
- {
1304
- name: "settings",
1305
- /* c8 ignore next -- settings read-warning status split is covered in broader read-settings integration tests */
1306
- status: normalizedSettingsReadWarnings.length === 0 ? "ok" : "warn",
1307
- details: {
1308
- path: settingsPath,
1309
- version: settings.version,
1310
- id_prefix: settings.id_prefix,
1311
- locks_ttl_seconds: settings.locks.ttl_seconds,
1312
- warnings: normalizedSettingsReadWarnings
1313
- }
1314
- },
1315
- {
1316
- name: "directories",
1317
- status: missingDirs.length === 0 ? "ok" : "warn",
1318
- details: {
1319
- required: requiredDirs,
1320
- optional: optionalDirs,
1321
- missing_required: missingRequiredDirs,
1322
- missing_optional: missingOptionalDirs,
1323
- missing: missingDirs,
1324
- strict_directories: strictDirectories
1325
- }
1326
- },
1327
- {
1328
- name: "settings_values",
1329
- status: settingWarnings.length === 0 ? "ok" : "warn",
1330
- details: {
1331
- warnings: settingWarnings
1332
- }
1333
- },
1527
+ buildSettingsHealthCheck(settingsPath, settings, normalizedSettingsReadWarnings),
1528
+ buildDirectoriesHealthCheck(directoryState, strictDirectories),
1529
+ buildSettingsValuesHealthCheck(settingWarnings),
1334
1530
  telemetryCheck.check,
1335
1531
  extensionCheck.check,
1336
- {
1337
- name: "storage",
1338
- status: historySummary.over_threshold.length === 0 ? "ok" : "warn",
1339
- details: {
1340
- items: items.length,
1341
- history_streams: historySummary.count,
1342
- ...historySummary.max_entries !== null ? {
1343
- compact_policy: {
1344
- enabled: settings.history.compact_policy.enabled,
1345
- max_entries: historySummary.max_entries,
1346
- trigger: settings.history.compact_policy.trigger,
1347
- over_threshold_count: historySummary.over_threshold.length,
1348
- over_threshold: historySummary.over_threshold
1349
- }
1350
- } : {}
1351
- }
1352
- },
1532
+ buildStorageHealthCheck(items, settings, historySummary),
1353
1533
  locksCheck.check,
1354
1534
  integrityCheck.check,
1355
1535
  historyDriftCheck.check,
1356
1536
  vectorizationCheck.check
1357
1537
  ];
1358
- const warnings = [
1359
- ...missingDirs.map((dir) => `missing_directory:${dir}`),
1360
- ...normalizedSettingsReadWarnings,
1361
- ...settingWarnings,
1362
- ...normalizedItemReadWarnings,
1363
- ...telemetryCheck.warnings,
1364
- ...extensionCheck.warnings,
1365
- ...historyPolicy.warnings,
1366
- ...historySummary.warnings,
1367
- ...locksCheck.warnings,
1368
- ...integrityCheck.warnings,
1369
- ...historyDriftCheck.warnings,
1370
- ...vectorizationCheck.warnings,
1371
- ...hookWarnings
1372
- ];
1373
- const normalizedWarnings = [...new Set(warnings)];
1374
- const checkRemediationSources = {
1375
- settings: normalizedSettingsReadWarnings,
1376
- directories: missingDirs.map((dir) => `missing_directory:${dir}`),
1377
- settings_values: settingWarnings,
1378
- telemetry: telemetryCheck.warnings,
1379
- extensions: extensionCheck.warnings,
1380
- storage: historySummary.over_threshold.map((id) => `history_stream_over_compact_threshold:${id}`),
1381
- locks: locksCheck.warnings,
1382
- integrity: integrityCheck.warnings,
1383
- history_drift: historyDriftCheck.warnings,
1384
- vectorization: vectorizationCheck.warnings
1385
- };
1386
- const historyDriftedCount = typeof historyDriftCheck.check.details.counts?.drifted === "number" ? historyDriftCheck.check.details.counts.drifted : 0;
1387
- for (const check of checks) {
1388
- const remediationMap = buildRemediationMap(checkRemediationSources[check.name]);
1389
- if (check.name === "history_drift" && historyDriftedCount > 1) {
1390
- for (const code of Object.keys(remediationMap)) {
1391
- remediationMap[code] = "pm history-repair --all";
1392
- }
1393
- }
1394
- if (check.name === "storage" && historySummary.over_threshold.length > 1) {
1395
- for (const code of Object.keys(remediationMap)) {
1396
- remediationMap[code] = "pm history-compact --all-streams";
1397
- }
1398
- }
1399
- if (Object.keys(remediationMap).length > 0) {
1400
- check.details = { ...check.details, remediation_map: remediationMap };
1401
- }
1402
- }
1538
+ const normalizedWarnings = collectHealthWarnings({
1539
+ directoryState,
1540
+ normalizedSettingsReadWarnings,
1541
+ settingWarnings,
1542
+ normalizedItemReadWarnings,
1543
+ telemetryCheck,
1544
+ extensionCheck,
1545
+ historyPolicyWarnings: historyPolicy.warnings,
1546
+ historySummary,
1547
+ locksCheck,
1548
+ integrityCheck,
1549
+ historyDriftCheck,
1550
+ vectorizationCheck
1551
+ });
1552
+ attachHealthRemediationMaps({
1553
+ checks,
1554
+ remediationSources: buildHealthRemediationSources({
1555
+ directoryState,
1556
+ normalizedSettingsReadWarnings,
1557
+ settingWarnings,
1558
+ telemetryCheck,
1559
+ extensionCheck,
1560
+ historySummary,
1561
+ locksCheck,
1562
+ integrityCheck,
1563
+ historyDriftCheck,
1564
+ vectorizationCheck
1565
+ }),
1566
+ historyDriftedCount: extractHistoryDriftedCount(historyDriftCheck),
1567
+ overThresholdCount: historySummary.over_threshold.length
1568
+ });
1403
1569
  const blockingWarnings = normalizedWarnings.filter((warning) => !isAdvisoryHealthWarning(warning));
1404
1570
  const result = {
1405
1571
  ok: blockingWarnings.length === 0,
@@ -1407,14 +1573,12 @@ async function runHealth(global, options = {}) {
1407
1573
  warnings: normalizedWarnings,
1408
1574
  generated_at: nowIso()
1409
1575
  };
1410
- if (summaryMode) {
1411
- return applySummaryHealthProjection(result);
1412
- }
1413
- return options.brief === true ? applyBriefHealthProjection(result) : result;
1576
+ return projectHealthResult(result, options, skipPolicy.summaryMode);
1414
1577
  }
1415
1578
  var _testOnlyHealthCommand = {
1416
1579
  buildExtensionHealthTriageSummary,
1417
1580
  buildCapabilityContractMetadata,
1581
+ buildVectorizationProviderDetails,
1418
1582
  collectUnknownCapabilityGuidance,
1419
1583
  isAdvisoryHealthWarning,
1420
1584
  isDirectory,
@@ -1436,6 +1600,6 @@ export {
1436
1600
  _testOnlyHealthCommand,
1437
1601
  runHealth
1438
1602
  };
1439
- //# sourceMappingURL=health-3IPFLKXB.js.map
1603
+ //# sourceMappingURL=health-4RKHYS3T.js.map
1440
1604
 
1441
- //# debugId=703e5ff2-f98d-5709-b3f4-e2ddcc4f770f
1605
+ //# debugId=4e0ed066-de64-5211-9b4a-be33f25e4d08