@unbrained/pm-cli 2026.7.1 → 2026.7.2

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 (563) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cli/commander-usage.d.ts +2 -0
  3. package/dist/cli/commander-usage.js +58 -47
  4. package/dist/cli/commander-usage.js.map +1 -1
  5. package/dist/cli/commands/aggregate.js +102 -79
  6. package/dist/cli/commands/aggregate.js.map +1 -1
  7. package/dist/cli/commands/calendar.js +278 -243
  8. package/dist/cli/commands/calendar.js.map +1 -1
  9. package/dist/cli/commands/close-many.js +89 -68
  10. package/dist/cli/commands/close-many.js.map +1 -1
  11. package/dist/cli/commands/close.js +157 -129
  12. package/dist/cli/commands/close.js.map +1 -1
  13. package/dist/cli/commands/comments-audit.js +50 -42
  14. package/dist/cli/commands/comments-audit.js.map +1 -1
  15. package/dist/cli/commands/config.d.ts +2 -0
  16. package/dist/cli/commands/config.js +443 -879
  17. package/dist/cli/commands/config.js.map +1 -1
  18. package/dist/cli/commands/context.js +365 -287
  19. package/dist/cli/commands/context.js.map +1 -1
  20. package/dist/cli/commands/contracts.js +352 -238
  21. package/dist/cli/commands/contracts.js.map +1 -1
  22. package/dist/cli/commands/dedupe-audit.js +46 -39
  23. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  24. package/dist/cli/commands/dedupe-merge.js +88 -69
  25. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  26. package/dist/cli/commands/get.js +114 -81
  27. package/dist/cli/commands/get.js.map +1 -1
  28. package/dist/cli/commands/health.d.ts +17 -0
  29. package/dist/cli/commands/health.js +446 -307
  30. package/dist/cli/commands/health.js.map +1 -1
  31. package/dist/cli/commands/history-compact.js +209 -140
  32. package/dist/cli/commands/history-compact.js.map +1 -1
  33. package/dist/cli/commands/history-redact.js +162 -119
  34. package/dist/cli/commands/history-redact.js.map +1 -1
  35. package/dist/cli/commands/history-repair.js +120 -85
  36. package/dist/cli/commands/history-repair.js.map +1 -1
  37. package/dist/cli/commands/init.d.ts +8 -2
  38. package/dist/cli/commands/init.js +263 -162
  39. package/dist/cli/commands/init.js.map +1 -1
  40. package/dist/cli/commands/list.js +152 -102
  41. package/dist/cli/commands/list.js.map +1 -1
  42. package/dist/cli/commands/next.js +49 -32
  43. package/dist/cli/commands/next.js.map +1 -1
  44. package/dist/cli/commands/plan.js +373 -298
  45. package/dist/cli/commands/plan.js.map +1 -1
  46. package/dist/cli/commands/recurrence-parsers.js +43 -25
  47. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  48. package/dist/cli/commands/reindex.d.ts +21 -5
  49. package/dist/cli/commands/reindex.js +345 -205
  50. package/dist/cli/commands/reindex.js.map +1 -1
  51. package/dist/cli/commands/restore.d.ts +8 -7
  52. package/dist/cli/commands/restore.js +105 -69
  53. package/dist/cli/commands/restore.js.map +1 -1
  54. package/dist/cli/commands/schema.js +33 -30
  55. package/dist/cli/commands/schema.js.map +1 -1
  56. package/dist/cli/commands/search.d.ts +10 -2
  57. package/dist/cli/commands/search.js +503 -470
  58. package/dist/cli/commands/search.js.map +1 -1
  59. package/dist/cli/commands/telemetry.js +98 -87
  60. package/dist/cli/commands/telemetry.js.map +1 -1
  61. package/dist/cli/commands/test-all.js +237 -168
  62. package/dist/cli/commands/test-all.js.map +1 -1
  63. package/dist/cli/commands/test.d.ts +6 -5
  64. package/dist/cli/commands/test.js +424 -344
  65. package/dist/cli/commands/test.js.map +1 -1
  66. package/dist/cli/commands/update-many.js +57 -42
  67. package/dist/cli/commands/update-many.js.map +1 -1
  68. package/dist/cli/commands/update.d.ts +1 -1
  69. package/dist/cli/commands/update.js +738 -671
  70. package/dist/cli/commands/update.js.map +1 -1
  71. package/dist/cli/commands/validate.d.ts +18 -1
  72. package/dist/cli/commands/validate.js +466 -343
  73. package/dist/cli/commands/validate.js.map +1 -1
  74. package/dist/cli/error-guidance.js +399 -357
  75. package/dist/cli/error-guidance.js.map +1 -1
  76. package/dist/cli/main.d.ts +47 -0
  77. package/dist/cli/main.js +428 -341
  78. package/dist/cli/main.js.map +1 -1
  79. package/dist/cli/migration-gates.js +22 -45
  80. package/dist/cli/migration-gates.js.map +1 -1
  81. package/dist/cli/register-list-query.js +94 -105
  82. package/dist/cli/register-list-query.js.map +1 -1
  83. package/dist/cli/register-mutation.js +400 -416
  84. package/dist/cli/register-mutation.js.map +1 -1
  85. package/dist/cli/register-operations.js +86 -66
  86. package/dist/cli/register-operations.js.map +1 -1
  87. package/dist/cli/register-setup.js +120 -101
  88. package/dist/cli/register-setup.js.map +1 -1
  89. package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js → activity-CUC4JY3U.js} +9 -9
  90. package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
  91. package/dist/cli-bundle/chunks/{aggregate-JTEF4BP7.js → aggregate-DKUTRY6R.js} +108 -84
  92. package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
  93. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js → aggregate-SW5PNGCS.js} +107 -83
  94. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js.map → aggregate-SW5PNGCS.js.map} +2 -2
  95. package/dist/cli-bundle/chunks/{append-QCFJSDFL.js → append-H32VOR2Y.js} +6 -6
  96. package/dist/cli-bundle/chunks/{append-LOVPGVPT.js → append-UBM632FK.js} +6 -6
  97. package/dist/cli-bundle/chunks/{chunk-RLDHZHQS.js → chunk-2227673O.js} +158 -114
  98. package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
  99. package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js → chunk-2ASNV4DH.js} +4 -4
  100. package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js → chunk-2CHRYUXL.js} +2 -2
  101. package/dist/cli-bundle/chunks/{chunk-NWMZWYYB.js → chunk-2KWL5NPW.js} +42 -27
  102. package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
  103. package/dist/cli-bundle/chunks/{chunk-NFDPYAIP.js → chunk-36UGKF4O.js} +21 -29
  104. package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
  105. package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js → chunk-3AZUFQK6.js} +6 -6
  106. package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js → chunk-3LCUASYG.js} +2 -2
  107. package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js → chunk-3Q2HBMTI.js} +2 -2
  108. package/dist/cli-bundle/chunks/{chunk-IPYBJWTE.js → chunk-4NUOWFBT.js} +109 -72
  109. package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
  110. package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js → chunk-55XRYWEG.js} +6 -6
  111. package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js → chunk-5GVTFFTC.js} +2 -2
  112. package/dist/cli-bundle/chunks/{chunk-BDTISOSD.js → chunk-5PGBHRY3.js} +41 -26
  113. package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-YITK2PJ6.js → chunk-66Z3X7ZG.js} +261 -161
  115. package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-NUHHPVVS.js → chunk-6ITZLD4T.js} +712 -612
  117. package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
  118. package/dist/cli-bundle/chunks/{chunk-V3NOKJF2.js → chunk-6YCYF2AI.js} +262 -162
  119. package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
  120. package/dist/cli-bundle/chunks/{chunk-BZCEN4JA.js → chunk-6ZMBJRDJ.js} +492 -403
  121. package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
  122. package/dist/cli-bundle/chunks/{chunk-CF7RL6FR.js → chunk-7MYWF4ZX.js} +110 -73
  123. package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
  124. package/dist/cli-bundle/chunks/{chunk-RVUALSJF.js → chunk-7NSPKJUS.js} +356 -285
  125. package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
  126. package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js → chunk-7TH5NMVB.js} +95 -53
  127. package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-ZETXE4SE.js → chunk-7W4H4K26.js} +713 -613
  129. package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js → chunk-A6VOGKBA.js} +6 -6
  131. package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js → chunk-AIAIXG7I.js} +2 -2
  132. package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js → chunk-AJEBCRIY.js} +5 -5
  133. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  134. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  135. package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js → chunk-BTX5MIQF.js} +2 -2
  136. package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js → chunk-BVZZN2LH.js} +3 -3
  137. package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js → chunk-CYBDUHNO.js} +3 -3
  138. package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js → chunk-CZPVDLD2.js} +4 -4
  139. package/dist/cli-bundle/chunks/{chunk-3VGN2UWE.js → chunk-EMPGXBUF.js} +22 -30
  140. package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
  141. package/dist/cli-bundle/chunks/{chunk-JPECA746.js → chunk-EUKTMRN3.js} +2 -2
  142. package/dist/cli-bundle/chunks/{chunk-2466X6E4.js → chunk-FFOQHGNH.js} +6 -6
  143. package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js → chunk-GFMSLORL.js} +6 -6
  144. package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js → chunk-GRRG3MCT.js} +4 -4
  145. package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js → chunk-H4GRLYJS.js} +3 -3
  146. package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js → chunk-HQTPRV4D.js} +6 -6
  147. package/dist/cli-bundle/chunks/{chunk-7R4QEMZZ.js → chunk-I66WE2HE.js} +354 -283
  148. package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
  149. package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js → chunk-IEEJQCZ4.js} +3 -3
  150. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js → chunk-IG5JYZGU.js} +390 -312
  151. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js.map → chunk-IG5JYZGU.js.map} +2 -2
  152. package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js → chunk-JMK5GCK2.js} +2 -2
  153. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js → chunk-JXAUVO6X.js} +258 -169
  154. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js.map → chunk-JXAUVO6X.js.map} +2 -2
  155. package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js → chunk-K2VYLVX4.js} +2 -2
  156. package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js → chunk-KCO2EAN5.js} +3 -3
  157. package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js → chunk-KIYCOJ63.js} +4 -4
  158. package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js → chunk-KLXF7NCC.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js → chunk-KN3URLKS.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js → chunk-LRKMWUUV.js} +2 -2
  161. package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js → chunk-LTRAF2D7.js} +3 -3
  162. package/dist/cli-bundle/chunks/{chunk-VARHOHYV.js → chunk-MNBPX5JS.js} +55 -36
  163. package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
  164. package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js → chunk-MRD4T5LF.js} +2 -2
  165. package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js → chunk-N2JSWVWG.js} +4 -4
  166. package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js → chunk-N3QCJS4M.js} +6 -6
  167. package/dist/cli-bundle/chunks/{chunk-JSU5P7VS.js → chunk-NRZS637N.js} +258 -169
  168. package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
  169. package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js → chunk-OTUJZKGI.js} +3 -3
  170. package/dist/cli-bundle/chunks/{chunk-5CGRF3L5.js → chunk-Q6K2OACU.js} +153 -90
  171. package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
  172. package/dist/cli-bundle/chunks/{chunk-3XZCOZ5J.js → chunk-Q6NXOHS6.js} +391 -313
  173. package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
  174. package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js → chunk-QH3FSKRJ.js} +2 -2
  175. package/dist/cli-bundle/chunks/{chunk-4XOIEKSD.js → chunk-RM37OPYK.js} +56 -37
  176. package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
  177. package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js → chunk-S62UANU7.js} +3 -3
  178. package/dist/cli-bundle/chunks/{chunk-RMMQ74TG.js → chunk-SPM2XLWI.js} +37 -28
  179. package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
  180. package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js → chunk-SYNKD3ZG.js} +5 -5
  181. package/dist/cli-bundle/chunks/{chunk-FFMQB7WR.js → chunk-SYVUU7EK.js} +493 -404
  182. package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
  183. package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js → chunk-TPOFWBMY.js} +95 -53
  184. package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
  185. package/dist/cli-bundle/chunks/{chunk-OTUHB4HS.js → chunk-TTHCEV5Q.js} +92 -77
  186. package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js → chunk-U2BEEM2X.js} +3 -3
  188. package/dist/cli-bundle/chunks/{chunk-KNPEF7QG.js → chunk-UGLU6Q2I.js} +91 -76
  189. package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
  190. package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js → chunk-UT73HUPC.js} +3 -3
  191. package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js → chunk-UTSH5GWX.js} +4 -4
  192. package/dist/cli-bundle/chunks/{chunk-IZBR4NRW.js → chunk-UWKEJMZU.js} +157 -113
  193. package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
  194. package/dist/cli-bundle/chunks/{chunk-3S2KT7NG.js → chunk-W47SML5B.js} +152 -89
  195. package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
  196. package/dist/cli-bundle/chunks/{chunk-RGEMWD6Q.js → chunk-WJAMWAHZ.js} +157 -118
  197. package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
  198. package/dist/cli-bundle/chunks/{chunk-JWXRETDF.js → chunk-XCHUVHKU.js} +626 -484
  199. package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
  200. package/dist/cli-bundle/chunks/{chunk-55SNVXRQ.js → chunk-XEWQKDYZ.js} +626 -484
  201. package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
  202. package/dist/cli-bundle/chunks/{chunk-TP5Q5ZD3.js → chunk-XTHQWXVC.js} +158 -119
  203. package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
  204. package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js → chunk-XWGEMNBR.js} +2 -2
  205. package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js → chunk-Y4NRKBFW.js} +3 -3
  206. package/dist/cli-bundle/chunks/{chunk-2D4HATP2.js → chunk-YLZZ6T54.js} +38 -29
  207. package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
  208. package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js → chunk-YPKFV2JR.js} +6 -6
  209. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  210. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  211. package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js → chunk-ZNHEYCDD.js} +2 -2
  212. package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js → chunk-ZNT7KEWE.js} +2 -2
  213. package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js → claim-SENTPZBN.js} +8 -8
  214. package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js → claim-Z7MEQCBT.js} +8 -8
  215. package/dist/cli-bundle/chunks/{close-TQYAAFJP.js → close-424MX4CU.js} +7 -7
  216. package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
  217. package/dist/cli-bundle/chunks/{close-many-LDRVEQY2.js → close-many-2IV4J2TR.js} +102 -81
  218. package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
  219. package/dist/cli-bundle/chunks/{close-many-BG5QQIDQ.js → close-many-SWY34BII.js} +101 -80
  220. package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
  221. package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js → comments-4FGNTSNV.js} +8 -8
  222. package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js → comments-7YS5MY5X.js} +8 -8
  223. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
  224. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
  225. package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
  226. package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
  227. package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js → context-LHVKJSPJ.js} +12 -12
  228. package/dist/cli-bundle/chunks/{context-B6275WPX.js → context-ZQY54JNS.js} +12 -12
  229. package/dist/cli-bundle/chunks/{contracts-HN7ABKLP.js → contracts-CP2EZJC7.js} +320 -199
  230. package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
  231. package/dist/cli-bundle/chunks/{contracts-W4FZVVD6.js → contracts-FIZLMP7O.js} +321 -200
  232. package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
  233. package/dist/cli-bundle/chunks/{copy-DEM4DATS.js → copy-GYNQQPW2.js} +5 -5
  234. package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js → copy-TLW7JTQT.js} +5 -5
  235. package/dist/cli-bundle/chunks/{create-RLRJMRTM.js → create-VSKYSOCD.js} +12 -12
  236. package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
  237. package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js → delete-4W5JYCEG.js} +5 -5
  238. package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js → delete-ANTOTI2I.js} +5 -5
  239. package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js → deps-HPPE6MJN.js} +5 -5
  240. package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js → deps-ZQZN54EZ.js} +5 -5
  241. package/dist/cli-bundle/chunks/{docs-GYZNVS26.js → docs-RPOVFMP3.js} +7 -7
  242. package/dist/cli-bundle/chunks/{docs-26S44RXU.js → docs-XJNYBJGE.js} +7 -7
  243. package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js → eval-DM6JBZTS.js} +10 -10
  244. package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js → eval-RFBI5FGS.js} +10 -10
  245. package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js → extension-B3YY4WY5.js} +11 -11
  246. package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js → extension-TTSEFQTS.js} +11 -11
  247. package/dist/cli-bundle/chunks/{files-NQHEXUZD.js → files-5D65CHGE.js} +7 -7
  248. package/dist/cli-bundle/chunks/{files-MBNICQFM.js → files-GPIG77EN.js} +7 -7
  249. package/dist/cli-bundle/chunks/{focus-XZW5423D.js → focus-C3PEJV2C.js} +6 -6
  250. package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js → focus-ZHN7WIGX.js} +6 -6
  251. package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js → gc-D4JQ6OWN.js} +3 -3
  252. package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js → gc-VZIXDL32.js} +3 -3
  253. package/dist/cli-bundle/chunks/{get-DSDEKJ3L.js → get-GIBRUUOP.js} +121 -81
  254. package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
  255. package/dist/cli-bundle/chunks/{get-A7MAOHCU.js → get-IOVAN6RU.js} +120 -80
  256. package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
  257. package/dist/cli-bundle/chunks/{health-3IPFLKXB.js → health-L2U3AFKV.js} +437 -265
  258. package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
  259. package/dist/cli-bundle/chunks/{health-GZXGBZ36.js → health-MM7AWXYF.js} +436 -264
  260. package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
  261. package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
  262. package/dist/cli-bundle/chunks/{history-NERDJNUB.js → history-IL7XCEX2.js} +8 -8
  263. package/dist/cli-bundle/chunks/{history-compact-HR7BB4LR.js → history-compact-HALOTOU7.js} +214 -135
  264. package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
  265. package/dist/cli-bundle/chunks/{history-compact-2WRZ2WK4.js → history-compact-MV25P7DM.js} +213 -134
  266. package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
  267. package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
  268. package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js → history-redact-VYCWQFK7.js} +9 -9
  269. package/dist/cli-bundle/chunks/{history-repair-XA3LC4GA.js → history-repair-44MODPQF.js} +124 -84
  270. package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
  271. package/dist/cli-bundle/chunks/{history-repair-LCMOS45X.js → history-repair-CPNAOCNF.js} +123 -83
  272. package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
  273. package/dist/cli-bundle/chunks/{init-64XDLQJB.js → init-F27NHENZ.js} +12 -12
  274. package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
  275. package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js → learnings-HJVDQIGY.js} +8 -8
  276. package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js → learnings-XSFSUUWK.js} +8 -8
  277. package/dist/cli-bundle/chunks/{list-G5Y65VF6.js → list-HPMEKCAA.js} +8 -8
  278. package/dist/cli-bundle/chunks/{list-DNBJVO3E.js → list-VMPWTURB.js} +8 -8
  279. package/dist/cli-bundle/chunks/{next-BCERKDUR.js → next-ETXF2ZCN.js} +59 -37
  280. package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
  281. package/dist/cli-bundle/chunks/{next-FYTQF6HG.js → next-QM6YJIIS.js} +60 -38
  282. package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
  283. package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js → notes-GDZIKGR6.js} +8 -8
  284. package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js → notes-WDDBPC4D.js} +8 -8
  285. package/dist/cli-bundle/chunks/{plan-RKZHQVXR.js → plan-BGDR73Z6.js} +373 -279
  286. package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
  287. package/dist/cli-bundle/chunks/{plan-4WXEQCTN.js → plan-C5IMM335.js} +372 -278
  288. package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
  289. package/dist/cli-bundle/chunks/{profile-QLER5ENE.js → profile-CCOKZ2IQ.js} +9 -9
  290. package/dist/cli-bundle/chunks/{profile-4OMM32CD.js → profile-HUCENIEQ.js} +9 -9
  291. package/dist/cli-bundle/chunks/{register-list-query-7LV46VAU.js → register-list-query-ROSNIL52.js} +80 -83
  292. package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
  293. package/dist/cli-bundle/chunks/{register-list-query-SNG5PGA4.js → register-list-query-XN4ZRHSV.js} +79 -82
  294. package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
  295. package/dist/cli-bundle/chunks/{register-mutation-ENNDUAZG.js → register-mutation-CFSB2MS3.js} +403 -382
  296. package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
  297. package/dist/cli-bundle/chunks/{register-mutation-KK7PHYYU.js → register-mutation-KRLAHEL2.js} +402 -381
  298. package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
  299. package/dist/cli-bundle/chunks/{register-operations-HZ6XERQG.js → register-operations-4PASGJDB.js} +112 -93
  300. package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
  301. package/dist/cli-bundle/chunks/{register-operations-C6OWLDSH.js → register-operations-MBN4KGUM.js} +113 -94
  302. package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
  303. package/dist/cli-bundle/chunks/{register-setup-P67EMBDJ.js → register-setup-VIAWYFP5.js} +129 -104
  304. package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
  305. package/dist/cli-bundle/chunks/{register-setup-ZKJ53RS7.js → register-setup-ZCGKHDKL.js} +128 -103
  306. package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
  307. package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js → restore-4CBWUMCX.js} +9 -9
  308. package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
  309. package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
  310. package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
  311. package/dist/cli-bundle/chunks/{schema-73HR2OJW.js → schema-TDGK6N3I.js} +7 -7
  312. package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js → schema-UE5KKAUX.js} +7 -7
  313. package/dist/cli-bundle/chunks/{search-KILGT37L.js → search-FP7MEU4S.js} +10 -10
  314. package/dist/cli-bundle/chunks/{search-AXPXKZER.js → search-K4CFLQ5S.js} +10 -10
  315. package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js → stats-NJJCALEZ.js} +6 -6
  316. package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js → stats-XT6QRKQY.js} +6 -6
  317. package/dist/cli-bundle/chunks/{telemetry-GAHHQTOS.js → telemetry-5SQ5UDXC.js} +84 -70
  318. package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
  319. package/dist/cli-bundle/chunks/{telemetry-BZUF6H7G.js → telemetry-HVXFZA2U.js} +85 -71
  320. package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
  321. package/dist/cli-bundle/chunks/{test-ACD52Z3S.js → test-UFSJ5YIO.js} +15 -15
  322. package/dist/cli-bundle/chunks/{test-PWDIZ255.js → test-YCDAUBWF.js} +15 -15
  323. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
  324. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
  325. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
  326. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
  327. package/dist/cli-bundle/chunks/{test-runs-UXIXPDKU.js → test-runs-FK5E75AA.js} +185 -147
  328. package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
  329. package/dist/cli-bundle/chunks/{test-runs-PLRAZEFW.js → test-runs-H4TGWGRN.js} +184 -146
  330. package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
  331. package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
  332. package/dist/cli-bundle/chunks/{update-KFX2SIAC.js → update-Y5WQVT5O.js} +15 -15
  333. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js → update-many-6YAYYRLE.js} +82 -67
  334. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js.map → update-many-6YAYYRLE.js.map} +2 -2
  335. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js → update-many-JTKKSA7Y.js} +83 -68
  336. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js.map → update-many-JTKKSA7Y.js.map} +1 -1
  337. package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js → upgrade-DTAHZ236.js} +11 -11
  338. package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js → upgrade-JUDU7YL4.js} +11 -11
  339. package/dist/cli-bundle/chunks/{validate-MTUVL5VC.js → validate-732RWS5W.js} +440 -320
  340. package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
  341. package/dist/cli-bundle/chunks/{validate-X5W76YJL.js → validate-W7H5TEDC.js} +441 -321
  342. package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
  343. package/dist/cli-bundle/main.js +945 -812
  344. package/dist/cli-bundle/main.js.map +3 -3
  345. package/dist/core/config/nested-settings.js +89 -67
  346. package/dist/core/config/nested-settings.js.map +1 -1
  347. package/dist/core/governance/metadata-coverage.js +20 -28
  348. package/dist/core/governance/metadata-coverage.js.map +1 -1
  349. package/dist/core/history/drift-scan.js +93 -81
  350. package/dist/core/history/drift-scan.js.map +1 -1
  351. package/dist/core/item/item-type-definition.js +14 -14
  352. package/dist/core/item/item-type-definition.js.map +1 -1
  353. package/dist/core/item/type-registry.js +87 -82
  354. package/dist/core/item/type-registry.js.map +1 -1
  355. package/dist/core/output/mutation-projection.js +42 -26
  356. package/dist/core/output/mutation-projection.js.map +1 -1
  357. package/dist/core/schema/runtime-schema.js +34 -28
  358. package/dist/core/schema/runtime-schema.js.map +1 -1
  359. package/dist/core/search/semantic-defaults.js +64 -37
  360. package/dist/core/search/semantic-defaults.js.map +1 -1
  361. package/dist/core/search/vector-stores.js +32 -17
  362. package/dist/core/search/vector-stores.js.map +1 -1
  363. package/dist/core/sentry/helpers.js +31 -28
  364. package/dist/core/sentry/helpers.js.map +1 -1
  365. package/dist/core/sentry/instrument.js +54 -43
  366. package/dist/core/sentry/instrument.js.map +1 -1
  367. package/dist/core/store/front-matter-cache.js +239 -153
  368. package/dist/core/store/front-matter-cache.js.map +1 -1
  369. package/dist/core/store/item-store.js +33 -26
  370. package/dist/core/store/item-store.js.map +1 -1
  371. package/dist/core/store/settings.js +247 -203
  372. package/dist/core/store/settings.js.map +1 -1
  373. package/dist/core/test/background-runs.js +189 -160
  374. package/dist/core/test/background-runs.js.map +1 -1
  375. package/package.json +2 -2
  376. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  377. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  378. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  379. package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +0 -16
  380. package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +0 -1
  381. package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +0 -1
  382. package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +0 -7
  383. package/dist/cli-bundle/chunks/chunk-3VGN2UWE.js.map +0 -1
  384. package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +0 -1
  385. package/dist/cli-bundle/chunks/chunk-4DSGXSBL.js.map +0 -7
  386. package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +0 -1
  387. package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +0 -7
  388. package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +0 -1
  389. package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +0 -1
  390. package/dist/cli-bundle/chunks/chunk-BDTISOSD.js.map +0 -7
  391. package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +0 -7
  392. package/dist/cli-bundle/chunks/chunk-CF7RL6FR.js.map +0 -1
  393. package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +0 -1
  394. package/dist/cli-bundle/chunks/chunk-IPYBJWTE.js.map +0 -7
  395. package/dist/cli-bundle/chunks/chunk-IZBR4NRW.js.map +0 -7
  396. package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +0 -1
  397. package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +0 -1
  398. package/dist/cli-bundle/chunks/chunk-KNPEF7QG.js.map +0 -7
  399. package/dist/cli-bundle/chunks/chunk-NFDPYAIP.js.map +0 -7
  400. package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +0 -7
  401. package/dist/cli-bundle/chunks/chunk-NWMZWYYB.js.map +0 -1
  402. package/dist/cli-bundle/chunks/chunk-OTUHB4HS.js.map +0 -1
  403. package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +0 -7
  404. package/dist/cli-bundle/chunks/chunk-RLDHZHQS.js.map +0 -1
  405. package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +0 -7
  406. package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +0 -7
  407. package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +0 -1
  408. package/dist/cli-bundle/chunks/chunk-UYUYDGIB.js.map +0 -1
  409. package/dist/cli-bundle/chunks/chunk-V3NOKJF2.js.map +0 -1
  410. package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +0 -7
  411. package/dist/cli-bundle/chunks/chunk-YITK2PJ6.js.map +0 -7
  412. package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +0 -1
  413. package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +0 -14
  414. package/dist/cli-bundle/chunks/close-many-BG5QQIDQ.js.map +0 -7
  415. package/dist/cli-bundle/chunks/close-many-LDRVEQY2.js.map +0 -1
  416. package/dist/cli-bundle/chunks/config-DMSU64QO.js +0 -1541
  417. package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +0 -7
  418. package/dist/cli-bundle/chunks/config-QH2DICD6.js +0 -1531
  419. package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +0 -1
  420. package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +0 -7
  421. package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +0 -1
  422. package/dist/cli-bundle/chunks/create-OH3BDGBB.js +0 -28
  423. package/dist/cli-bundle/chunks/get-A7MAOHCU.js.map +0 -7
  424. package/dist/cli-bundle/chunks/get-DSDEKJ3L.js.map +0 -1
  425. package/dist/cli-bundle/chunks/health-3IPFLKXB.js.map +0 -1
  426. package/dist/cli-bundle/chunks/health-GZXGBZ36.js.map +0 -7
  427. package/dist/cli-bundle/chunks/history-WSZHY3PN.js +0 -18
  428. package/dist/cli-bundle/chunks/history-compact-2WRZ2WK4.js.map +0 -7
  429. package/dist/cli-bundle/chunks/history-compact-HR7BB4LR.js.map +0 -1
  430. package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +0 -19
  431. package/dist/cli-bundle/chunks/history-repair-LCMOS45X.js.map +0 -7
  432. package/dist/cli-bundle/chunks/history-repair-XA3LC4GA.js.map +0 -1
  433. package/dist/cli-bundle/chunks/init-PAX32BJA.js +0 -22
  434. package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +0 -7
  435. package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +0 -1
  436. package/dist/cli-bundle/chunks/plan-4WXEQCTN.js.map +0 -7
  437. package/dist/cli-bundle/chunks/plan-RKZHQVXR.js.map +0 -1
  438. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +0 -1
  439. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +0 -7
  440. package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +0 -1
  441. package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +0 -7
  442. package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js.map +0 -1
  443. package/dist/cli-bundle/chunks/register-operations-HZ6XERQG.js.map +0 -7
  444. package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +0 -1
  445. package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +0 -7
  446. package/dist/cli-bundle/chunks/restore-YALDGTQR.js +0 -17
  447. package/dist/cli-bundle/chunks/telemetry-BZUF6H7G.js.map +0 -1
  448. package/dist/cli-bundle/chunks/telemetry-GAHHQTOS.js.map +0 -7
  449. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js +0 -358
  450. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js.map +0 -1
  451. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js +0 -361
  452. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js.map +0 -7
  453. package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +0 -7
  454. package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +0 -1
  455. package/dist/cli-bundle/chunks/update-AMRSOIWP.js +0 -24
  456. package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +0 -7
  457. package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +0 -1
  458. /package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js.map → activity-CUC4JY3U.js.map} +0 -0
  459. /package/dist/cli-bundle/chunks/{activity-AW6XVFH6.js.map → activity-WEIEMM73.js.map} +0 -0
  460. /package/dist/cli-bundle/chunks/{append-QCFJSDFL.js.map → append-H32VOR2Y.js.map} +0 -0
  461. /package/dist/cli-bundle/chunks/{append-LOVPGVPT.js.map → append-UBM632FK.js.map} +0 -0
  462. /package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js.map → chunk-2ASNV4DH.js.map} +0 -0
  463. /package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js.map → chunk-2CHRYUXL.js.map} +0 -0
  464. /package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js.map → chunk-3AZUFQK6.js.map} +0 -0
  465. /package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js.map → chunk-3LCUASYG.js.map} +0 -0
  466. /package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js.map → chunk-3Q2HBMTI.js.map} +0 -0
  467. /package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js.map → chunk-55XRYWEG.js.map} +0 -0
  468. /package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js.map → chunk-5GVTFFTC.js.map} +0 -0
  469. /package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js.map → chunk-A6VOGKBA.js.map} +0 -0
  470. /package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js.map → chunk-AIAIXG7I.js.map} +0 -0
  471. /package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js.map → chunk-AJEBCRIY.js.map} +0 -0
  472. /package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js.map → chunk-BTX5MIQF.js.map} +0 -0
  473. /package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js.map → chunk-BVZZN2LH.js.map} +0 -0
  474. /package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js.map → chunk-CYBDUHNO.js.map} +0 -0
  475. /package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js.map → chunk-CZPVDLD2.js.map} +0 -0
  476. /package/dist/cli-bundle/chunks/{chunk-JPECA746.js.map → chunk-EUKTMRN3.js.map} +0 -0
  477. /package/dist/cli-bundle/chunks/{chunk-2466X6E4.js.map → chunk-FFOQHGNH.js.map} +0 -0
  478. /package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js.map → chunk-GFMSLORL.js.map} +0 -0
  479. /package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js.map → chunk-GRRG3MCT.js.map} +0 -0
  480. /package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js.map → chunk-H4GRLYJS.js.map} +0 -0
  481. /package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js.map → chunk-HQTPRV4D.js.map} +0 -0
  482. /package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js.map → chunk-IEEJQCZ4.js.map} +0 -0
  483. /package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js.map → chunk-JMK5GCK2.js.map} +0 -0
  484. /package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js.map → chunk-K2VYLVX4.js.map} +0 -0
  485. /package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js.map → chunk-KCO2EAN5.js.map} +0 -0
  486. /package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js.map → chunk-KIYCOJ63.js.map} +0 -0
  487. /package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js.map → chunk-KLXF7NCC.js.map} +0 -0
  488. /package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js.map → chunk-KN3URLKS.js.map} +0 -0
  489. /package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js.map → chunk-LRKMWUUV.js.map} +0 -0
  490. /package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js.map → chunk-LTRAF2D7.js.map} +0 -0
  491. /package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js.map → chunk-MRD4T5LF.js.map} +0 -0
  492. /package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js.map → chunk-N2JSWVWG.js.map} +0 -0
  493. /package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js.map → chunk-N3QCJS4M.js.map} +0 -0
  494. /package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js.map → chunk-OTUJZKGI.js.map} +0 -0
  495. /package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js.map → chunk-QH3FSKRJ.js.map} +0 -0
  496. /package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js.map → chunk-S62UANU7.js.map} +0 -0
  497. /package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js.map → chunk-SYNKD3ZG.js.map} +0 -0
  498. /package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js.map → chunk-U2BEEM2X.js.map} +0 -0
  499. /package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js.map → chunk-UT73HUPC.js.map} +0 -0
  500. /package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js.map → chunk-UTSH5GWX.js.map} +0 -0
  501. /package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js.map → chunk-XWGEMNBR.js.map} +0 -0
  502. /package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js.map → chunk-Y4NRKBFW.js.map} +0 -0
  503. /package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js.map → chunk-YPKFV2JR.js.map} +0 -0
  504. /package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js.map → chunk-ZNHEYCDD.js.map} +0 -0
  505. /package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
  506. /package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js.map → claim-SENTPZBN.js.map} +0 -0
  507. /package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js.map → claim-Z7MEQCBT.js.map} +0 -0
  508. /package/dist/cli-bundle/chunks/{close-TQYAAFJP.js.map → close-424MX4CU.js.map} +0 -0
  509. /package/dist/cli-bundle/chunks/{close-E6ZZGCJY.js.map → close-YCWQQPDS.js.map} +0 -0
  510. /package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js.map → comments-4FGNTSNV.js.map} +0 -0
  511. /package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js.map → comments-7YS5MY5X.js.map} +0 -0
  512. /package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js.map → context-LHVKJSPJ.js.map} +0 -0
  513. /package/dist/cli-bundle/chunks/{context-B6275WPX.js.map → context-ZQY54JNS.js.map} +0 -0
  514. /package/dist/cli-bundle/chunks/{copy-DEM4DATS.js.map → copy-GYNQQPW2.js.map} +0 -0
  515. /package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js.map → copy-TLW7JTQT.js.map} +0 -0
  516. /package/dist/cli-bundle/chunks/{create-RLRJMRTM.js.map → create-VSKYSOCD.js.map} +0 -0
  517. /package/dist/cli-bundle/chunks/{create-OH3BDGBB.js.map → create-XTMAPS7I.js.map} +0 -0
  518. /package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js.map → delete-4W5JYCEG.js.map} +0 -0
  519. /package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js.map → delete-ANTOTI2I.js.map} +0 -0
  520. /package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js.map → deps-HPPE6MJN.js.map} +0 -0
  521. /package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js.map → deps-ZQZN54EZ.js.map} +0 -0
  522. /package/dist/cli-bundle/chunks/{docs-GYZNVS26.js.map → docs-RPOVFMP3.js.map} +0 -0
  523. /package/dist/cli-bundle/chunks/{docs-26S44RXU.js.map → docs-XJNYBJGE.js.map} +0 -0
  524. /package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js.map → eval-DM6JBZTS.js.map} +0 -0
  525. /package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js.map → eval-RFBI5FGS.js.map} +0 -0
  526. /package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js.map → extension-B3YY4WY5.js.map} +0 -0
  527. /package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js.map → extension-TTSEFQTS.js.map} +0 -0
  528. /package/dist/cli-bundle/chunks/{files-NQHEXUZD.js.map → files-5D65CHGE.js.map} +0 -0
  529. /package/dist/cli-bundle/chunks/{files-MBNICQFM.js.map → files-GPIG77EN.js.map} +0 -0
  530. /package/dist/cli-bundle/chunks/{focus-XZW5423D.js.map → focus-C3PEJV2C.js.map} +0 -0
  531. /package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js.map → focus-ZHN7WIGX.js.map} +0 -0
  532. /package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js.map → gc-D4JQ6OWN.js.map} +0 -0
  533. /package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js.map → gc-VZIXDL32.js.map} +0 -0
  534. /package/dist/cli-bundle/chunks/{history-WSZHY3PN.js.map → history-DD7L7BNL.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{history-NERDJNUB.js.map → history-IL7XCEX2.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{history-redact-MP6CH7U5.js.map → history-redact-IX4YEWMY.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js.map → history-redact-VYCWQFK7.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{init-64XDLQJB.js.map → init-F27NHENZ.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{init-PAX32BJA.js.map → init-HHVQQP6C.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js.map → learnings-HJVDQIGY.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js.map → learnings-XSFSUUWK.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{list-G5Y65VF6.js.map → list-HPMEKCAA.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{list-DNBJVO3E.js.map → list-VMPWTURB.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js.map → notes-GDZIKGR6.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js.map → notes-WDDBPC4D.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{profile-QLER5ENE.js.map → profile-CCOKZ2IQ.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{profile-4OMM32CD.js.map → profile-HUCENIEQ.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js.map → restore-4CBWUMCX.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{restore-YALDGTQR.js.map → restore-5UEAGG3W.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{schema-73HR2OJW.js.map → schema-TDGK6N3I.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js.map → schema-UE5KKAUX.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{search-KILGT37L.js.map → search-FP7MEU4S.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{search-AXPXKZER.js.map → search-K4CFLQ5S.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js.map → stats-NJJCALEZ.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js.map → stats-XT6QRKQY.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{test-ACD52Z3S.js.map → test-UFSJ5YIO.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{test-PWDIZ255.js.map → test-YCDAUBWF.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{update-AMRSOIWP.js.map → update-MTCFES6X.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{update-KFX2SIAC.js.map → update-Y5WQVT5O.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js.map → upgrade-DTAHZ236.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js.map → upgrade-JUDU7YL4.js.map} +0 -0
@@ -4,7 +4,7 @@
4
4
  * Implements the pm health command surface and its agent-facing runtime behavior.
5
5
  */
6
6
 
7
- !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]="7b0dc685-2469-5d2e-98c8-07eebf79ee3e")}catch(e){}}();
7
+ !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]="bd215d4d-d9ea-5734-aa11-b74e1fa0780f")}catch(e){}}();
8
8
  import fs from "node:fs/promises";
9
9
  import path from "node:path";
10
10
  import { resolveItemTypeRegistry } from "../../core/item/type-registry.js";
@@ -150,6 +150,9 @@ async function listItemDocumentPaths(pmRoot, typeToFolder) {
150
150
  itemPaths.sort((left, right) => normalizeRelativePath(pmRoot, left).localeCompare(normalizeRelativePath(pmRoot, right)));
151
151
  return itemPaths;
152
152
  }
153
+ function shouldReportHistoryDirectoryUnreadable(error) {
154
+ return !(typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT");
155
+ }
153
156
  async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
154
157
  const itemPaths = await listItemDocumentPaths(pmRoot, typeToFolder);
155
158
  const itemUnreadable = [];
@@ -195,7 +198,7 @@ async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
195
198
  }
196
199
  catch (error) {
197
200
  /* c8 ignore start -- ENOENT/non-ENOENT differentiation requires filesystem fault injection */
198
- if (!(typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT")) {
201
+ if (shouldReportHistoryDirectoryUnreadable(error)) {
199
202
  historyUnreadable.push("history");
200
203
  }
201
204
  /* c8 ignore stop */
@@ -903,6 +906,101 @@ function parseTelemetryQueue(raw) {
903
906
  maxAttempts,
904
907
  };
905
908
  }
909
+ function emptyTelemetryQueueSummary() {
910
+ return { validEntries: 0, invalidRows: 0, totalRows: 0, highRetryEntries: 0, maxAttempts: 0 };
911
+ }
912
+ /* c8 ignore start -- telemetry state corruption and otel-failure branches require runtime-coordinated fixture mutation */
913
+ function parseTelemetryRuntimeState(stateRaw) {
914
+ if (!stateRaw || stateRaw.trim().length === 0) {
915
+ return { runtimeState: {}, stateParseFailed: false };
916
+ }
917
+ try {
918
+ const parsed = JSON.parse(stateRaw);
919
+ if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
920
+ return { runtimeState: parsed, stateParseFailed: false };
921
+ }
922
+ return { runtimeState: {}, stateParseFailed: true };
923
+ }
924
+ catch {
925
+ return { runtimeState: {}, stateParseFailed: true };
926
+ }
927
+ }
928
+ async function maybeProbeTelemetryEndpoint(settings, checkTelemetry) {
929
+ const endpoint = settings.telemetry.endpoint.trim();
930
+ if (!checkTelemetry || !settings.telemetry.enabled || endpoint.length === 0) {
931
+ return undefined;
932
+ }
933
+ const probe = await probeTelemetryEndpointHealth(endpoint);
934
+ return {
935
+ attempted: true,
936
+ ...probe,
937
+ };
938
+ }
939
+ function collectTelemetryQueueWarnings(settings, queueSummary, runtimeState) {
940
+ const warnings = [];
941
+ if (queueSummary.invalidRows > 0) {
942
+ warnings.push(`telemetry_queue_invalid_rows:${queueSummary.invalidRows}`);
943
+ }
944
+ if (!settings.telemetry.enabled || queueSummary.validEntries === 0) {
945
+ return warnings;
946
+ }
947
+ const lastSuccess = runtimeState.last_successful_flush_at;
948
+ const lastFailure = runtimeState.last_failed_flush_at;
949
+ const activeFailure = lastFailure && (!lastSuccess || lastFailure > lastSuccess);
950
+ const neverFlushed = !lastSuccess;
951
+ const highWater = queueSummary.validEntries >= TELEMETRY_QUEUE_HIGH_WATER_MARK;
952
+ if (activeFailure || neverFlushed || highWater) {
953
+ warnings.push(`telemetry_queue_pending:${queueSummary.validEntries}`);
954
+ }
955
+ if (queueSummary.highRetryEntries > 0) {
956
+ warnings.push(`telemetry_queue_high_retries:${queueSummary.highRetryEntries}`);
957
+ }
958
+ return warnings;
959
+ }
960
+ function collectTelemetryEndpointWarnings(endpointProbe) {
961
+ if (!endpointProbe || endpointProbe.ok !== false) {
962
+ return [];
963
+ }
964
+ return typeof endpointProbe.status === "number"
965
+ ? [`telemetry_endpoint_probe_http_status:${endpointProbe.status}`]
966
+ : ["telemetry_endpoint_probe_failed"];
967
+ }
968
+ function collectTelemetrySchemaWarnings(endpointProbe) {
969
+ const parsedMaxSchemaVersion = Number.parseInt(endpointProbe?.max_schema_version ?? "", 10);
970
+ if (endpointProbe?.ok === true && Number.isInteger(parsedMaxSchemaVersion) && parsedMaxSchemaVersion > TELEMETRY_SCHEMA_VERSION) {
971
+ return [`telemetry_schema_version_behind:${parsedMaxSchemaVersion}`];
972
+ }
973
+ return [];
974
+ }
975
+ function collectTelemetryOtelWarnings(settings, runtimeState) {
976
+ const pendingOtelSpans = typeof runtimeState.pending_otel_spans === "number" ? runtimeState.pending_otel_spans : 0;
977
+ const lastOtelSuccess = runtimeState.last_otel_success_at;
978
+ const lastOtelFailure = runtimeState.last_otel_failure_at;
979
+ const otelExportFailing = settings.telemetry.enabled &&
980
+ pendingOtelSpans > 0 &&
981
+ Boolean(lastOtelFailure) &&
982
+ // >= so a mixed-outcome batch (success + failure share the same attempt
983
+ // timestamp) still surfaces the warning rather than being masked by the tie.
984
+ (!lastOtelSuccess || lastOtelFailure >= lastOtelSuccess);
985
+ return otelExportFailing ? [`telemetry_otel_export_failing:${pendingOtelSpans}`] : [];
986
+ }
987
+ function buildTelemetryEnvOverrideDetails() {
988
+ return {
989
+ telemetry_disabled: telemetryEnvFlagEnabled("PM_TELEMETRY_DISABLED") || telemetryEnvFlagEnabled("PM_NO_TELEMETRY"),
990
+ pm_no_telemetry: telemetryEnvFlagEnabled("PM_NO_TELEMETRY"),
991
+ telemetry_otel_disabled: telemetryEnvFlagEnabled("PM_TELEMETRY_OTEL_DISABLED"),
992
+ telemetry_inline_flush: telemetryEnvFlagEnabled("PM_TELEMETRY_INLINE_FLUSH"),
993
+ telemetry_source_context: telemetrySourceContextOverride(),
994
+ };
995
+ }
996
+ /* c8 ignore stop */
997
+ function telemetryQueueHasEntries(settings, queueSummary) {
998
+ return settings.telemetry.enabled && queueSummary.validEntries > 0;
999
+ }
1000
+ function isTelemetryQueueDraining(queueHasEntries, warnings) {
1001
+ return (queueHasEntries &&
1002
+ warnings.every((warning) => !warning.startsWith("telemetry_queue_pending:") && !warning.startsWith("telemetry_queue_high_retries:")));
1003
+ }
906
1004
  async function probeTelemetryEndpointHealth(endpoint) {
907
1005
  let probeUrl = endpoint;
908
1006
  try {
@@ -951,88 +1049,19 @@ async function buildTelemetryCheck(settings, options) {
951
1049
  const queueRaw = await readFileIfExists(queuePath);
952
1050
  const queueExists = queueRaw !== null;
953
1051
  const queueSizeBytes = queueRaw ? Buffer.byteLength(queueRaw, "utf8") : 0;
954
- const queueSummary = queueRaw
955
- ? parseTelemetryQueue(queueRaw)
956
- : { validEntries: 0, invalidRows: 0, totalRows: 0, highRetryEntries: 0, maxAttempts: 0 };
1052
+ const queueSummary = queueRaw ? parseTelemetryQueue(queueRaw) : emptyTelemetryQueueSummary();
957
1053
  const stateRaw = await readFileIfExists(statePath);
958
- let runtimeState = {};
959
- let stateParseFailed = false;
960
- /* c8 ignore start -- telemetry state corruption and otel-failure branches require runtime-coordinated fixture mutation */
961
- if (stateRaw && stateRaw.trim().length > 0) {
962
- try {
963
- const parsed = JSON.parse(stateRaw);
964
- if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
965
- runtimeState = parsed;
966
- }
967
- else {
968
- /* c8 ignore next -- malformed runtime-state payloads are integration-only corruption cases */
969
- stateParseFailed = true;
970
- }
971
- }
972
- catch {
973
- stateParseFailed = true;
974
- }
975
- }
1054
+ const { runtimeState, stateParseFailed } = parseTelemetryRuntimeState(stateRaw);
976
1055
  const endpoint = settings.telemetry.endpoint.trim();
977
1056
  const endpointDisplay = normalizeEndpointForDisplay(endpoint);
978
- let endpointProbe;
979
- if (options.checkTelemetry && settings.telemetry.enabled && endpoint.length > 0) {
980
- const probe = await probeTelemetryEndpointHealth(endpoint);
981
- endpointProbe = {
982
- attempted: true,
983
- ...probe,
984
- };
985
- }
1057
+ const endpointProbe = await maybeProbeTelemetryEndpoint(settings, options.checkTelemetry);
986
1058
  const warnings = [];
987
1059
  if (stateParseFailed) {
988
1060
  warnings.push("telemetry_state_invalid_json");
989
1061
  }
990
- if (queueSummary.invalidRows > 0) {
991
- warnings.push(`telemetry_queue_invalid_rows:${queueSummary.invalidRows}`);
992
- }
993
- const queueHasEntries = settings.telemetry.enabled && queueSummary.validEntries > 0;
994
- if (queueHasEntries) {
995
- const lastSuccess = runtimeState.last_successful_flush_at;
996
- const lastFailure = runtimeState.last_failed_flush_at;
997
- const activeFailure = lastFailure && (!lastSuccess || lastFailure > lastSuccess);
998
- const neverFlushed = !lastSuccess;
999
- const highWater = queueSummary.validEntries >= TELEMETRY_QUEUE_HIGH_WATER_MARK;
1000
- const highRetries = queueSummary.highRetryEntries > 0;
1001
- if (activeFailure || neverFlushed || highWater) {
1002
- warnings.push(`telemetry_queue_pending:${queueSummary.validEntries}`);
1003
- }
1004
- if (highRetries) {
1005
- warnings.push(`telemetry_queue_high_retries:${queueSummary.highRetryEntries}`);
1006
- }
1007
- }
1008
- if (endpointProbe && !endpointProbe.ok) {
1009
- if (typeof endpointProbe.status === "number") {
1010
- warnings.push(`telemetry_endpoint_probe_http_status:${endpointProbe.status}`);
1011
- }
1012
- else {
1013
- warnings.push("telemetry_endpoint_probe_failed");
1014
- }
1015
- }
1016
- const parsedMaxSchemaVersion = Number.parseInt(endpointProbe?.max_schema_version ?? "", 10);
1017
- if (endpointProbe &&
1018
- endpointProbe.ok &&
1019
- Number.isInteger(parsedMaxSchemaVersion) &&
1020
- parsedMaxSchemaVersion > TELEMETRY_SCHEMA_VERSION) {
1021
- warnings.push(`telemetry_schema_version_behind:${parsedMaxSchemaVersion}`);
1022
- }
1062
+ warnings.push(...collectTelemetryQueueWarnings(settings, queueSummary, runtimeState), ...collectTelemetryEndpointWarnings(endpointProbe), ...collectTelemetrySchemaWarnings(endpointProbe), ...collectTelemetryOtelWarnings(settings, runtimeState));
1063
+ const queueHasEntries = telemetryQueueHasEntries(settings, queueSummary);
1023
1064
  const pendingOtelSpans = typeof runtimeState.pending_otel_spans === "number" ? runtimeState.pending_otel_spans : 0;
1024
- const lastOtelSuccess = runtimeState.last_otel_success_at;
1025
- const lastOtelFailure = runtimeState.last_otel_failure_at;
1026
- const otelExportFailing = settings.telemetry.enabled &&
1027
- pendingOtelSpans > 0 &&
1028
- Boolean(lastOtelFailure) &&
1029
- // >= so a mixed-outcome batch (success + failure share the same attempt
1030
- // timestamp) still surfaces the warning rather than being masked by the tie.
1031
- (!lastOtelSuccess || lastOtelFailure >= lastOtelSuccess);
1032
- if (otelExportFailing) {
1033
- warnings.push(`telemetry_otel_export_failing:${pendingOtelSpans}`);
1034
- }
1035
- /* c8 ignore stop */
1036
1065
  return {
1037
1066
  check: {
1038
1067
  name: "telemetry",
@@ -1045,8 +1074,7 @@ async function buildTelemetryCheck(settings, options) {
1045
1074
  queue_path: queuePath,
1046
1075
  queue_exists: queueExists,
1047
1076
  queue_entries: queueSummary.validEntries,
1048
- queue_draining: queueHasEntries &&
1049
- warnings.every((warning) => !warning.startsWith("telemetry_queue_pending:") && !warning.startsWith("telemetry_queue_high_retries:")),
1077
+ queue_draining: isTelemetryQueueDraining(queueHasEntries, warnings),
1050
1078
  queue_invalid_rows: queueSummary.invalidRows,
1051
1079
  queue_rows_total: queueSummary.totalRows,
1052
1080
  queue_size_bytes: queueSizeBytes,
@@ -1063,18 +1091,8 @@ async function buildTelemetryCheck(settings, options) {
1063
1091
  last_otel_success_at: runtimeState.last_otel_success_at ?? null,
1064
1092
  last_otel_failure_at: runtimeState.last_otel_failure_at ?? null,
1065
1093
  last_otel_failure_error: runtimeState.last_otel_failure_error ?? null,
1066
- endpoint_probe: endpointProbe ?? {
1067
- attempted: false,
1068
- },
1069
- /* c8 ignore start -- env-override combinations are validated through runtime integration suites */
1070
- env_overrides: {
1071
- telemetry_disabled: telemetryEnvFlagEnabled("PM_TELEMETRY_DISABLED") || telemetryEnvFlagEnabled("PM_NO_TELEMETRY"),
1072
- pm_no_telemetry: telemetryEnvFlagEnabled("PM_NO_TELEMETRY"),
1073
- telemetry_otel_disabled: telemetryEnvFlagEnabled("PM_TELEMETRY_OTEL_DISABLED"),
1074
- telemetry_inline_flush: telemetryEnvFlagEnabled("PM_TELEMETRY_INLINE_FLUSH"),
1075
- telemetry_source_context: telemetrySourceContextOverride(),
1076
- },
1077
- /* c8 ignore stop */
1094
+ endpoint_probe: endpointProbe ?? { attempted: false },
1095
+ env_overrides: buildTelemetryEnvOverrideDetails(),
1078
1096
  },
1079
1097
  },
1080
1098
  warnings,
@@ -1165,78 +1183,136 @@ async function buildHistoryDriftCheck(pmRoot, items) {
1165
1183
  warnings,
1166
1184
  };
1167
1185
  }
1168
- async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, verboseStaleItems) {
1186
+ function buildVectorizationRuntimeSnapshot(settings) {
1169
1187
  const runtimeDefaults = resolveSettingsWithSemanticRuntimeDefaults(settings);
1170
1188
  const providerResolution = resolveEmbeddingProviders(runtimeDefaults.settings);
1171
1189
  const vectorStoreResolution = resolveVectorStores(runtimeDefaults.settings);
1172
1190
  const runtimeEmbeddingIdentity = providerResolution.active
1173
1191
  ? buildVectorizationEmbeddingIdentity(providerResolution.active.name, providerResolution.active.model)
1174
1192
  : null;
1175
- const semanticRuntimeAvailable = Boolean(providerResolution.active && vectorStoreResolution.active);
1176
- const ledgerBefore = await readVectorizationStatusLedger(pmRoot);
1177
- const staleBefore = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerBefore.entries) : [];
1178
- let refreshResult = {
1193
+ return {
1194
+ runtimeDefaults,
1195
+ providerResolution,
1196
+ vectorStoreResolution,
1197
+ runtimeEmbeddingIdentity,
1198
+ semanticRuntimeAvailable: Boolean(providerResolution.active && vectorStoreResolution.active),
1199
+ };
1200
+ }
1201
+ function emptyVectorizationRefreshResult() {
1202
+ return {
1179
1203
  refreshed: [],
1180
1204
  skipped: [],
1181
1205
  warnings: [],
1182
1206
  };
1183
- if (refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0) {
1184
- refreshResult = await refreshSemanticEmbeddingsForMutatedItems(pmRoot, staleBefore, {
1185
- settings: runtimeDefaults.settings,
1186
- apply_runtime_defaults: false,
1187
- });
1207
+ }
1208
+ async function refreshStaleVectorizationItems(params) {
1209
+ if (!params.refreshPolicy.enabled || !params.snapshot.semanticRuntimeAvailable || params.staleBefore.length === 0) {
1210
+ return emptyVectorizationRefreshResult();
1188
1211
  }
1189
- const ledgerAfter = await readVectorizationStatusLedger(pmRoot);
1190
- const staleAfter = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerAfter.entries) : [];
1191
- const strictVectorizationWarnings = !runtimeDefaults.auto_ollama_defaults_applied;
1192
- const embeddingIdentityChanged = strictVectorizationWarnings &&
1193
- semanticRuntimeAvailable &&
1194
- Boolean(ledgerBefore.embedding &&
1195
- runtimeEmbeddingIdentity &&
1196
- hasVectorizationEmbeddingIdentityChanged(ledgerBefore.embedding, runtimeEmbeddingIdentity));
1197
- /* c8 ignore start -- strict-vectorization warning synthesis branches are integration-only policy permutations */
1198
- const warningSet = new Set([...ledgerBefore.warnings, ...ledgerAfter.warnings]);
1199
- if (strictVectorizationWarnings) {
1200
- for (const warning of refreshResult.warnings) {
1212
+ return refreshSemanticEmbeddingsForMutatedItems(params.pmRoot, params.staleBefore, {
1213
+ settings: params.snapshot.runtimeDefaults.settings,
1214
+ apply_runtime_defaults: false,
1215
+ });
1216
+ }
1217
+ function vectorizationEmbeddingIdentityChanged(params) {
1218
+ return (params.strictVectorizationWarnings &&
1219
+ params.semanticRuntimeAvailable &&
1220
+ Boolean(params.ledgerBefore.embedding &&
1221
+ params.runtimeEmbeddingIdentity &&
1222
+ hasVectorizationEmbeddingIdentityChanged(params.ledgerBefore.embedding, params.runtimeEmbeddingIdentity)));
1223
+ }
1224
+ /* c8 ignore start -- strict-vectorization warning synthesis branches are integration-only policy permutations */
1225
+ function collectVectorizationWarnings(params) {
1226
+ const warningSet = new Set([...params.ledgerBefore.warnings, ...params.ledgerAfter.warnings]);
1227
+ if (params.strictVectorizationWarnings) {
1228
+ for (const warning of params.refreshResult.warnings) {
1201
1229
  warningSet.add(warning);
1202
1230
  }
1203
1231
  }
1204
- if (embeddingIdentityChanged) {
1232
+ if (params.embeddingIdentityChanged) {
1205
1233
  warningSet.add("vectorization_embedding_identity_changed");
1206
1234
  }
1207
- if (strictVectorizationWarnings && semanticRuntimeAvailable && staleAfter.length > 0) {
1208
- warningSet.add(`vectorization_stale_items_remaining:${staleAfter.length}`);
1235
+ if (params.strictVectorizationWarnings && params.semanticRuntimeAvailable && params.staleAfter.length > 0) {
1236
+ warningSet.add(`vectorization_stale_items_remaining:${params.staleAfter.length}`);
1237
+ }
1238
+ return [...warningSet].sort((left, right) => left.localeCompare(right));
1239
+ }
1240
+ /* c8 ignore stop */
1241
+ function resolveVectorizationRefreshSkippedReason(refreshPolicy, semanticRuntimeAvailable, staleBefore) {
1242
+ if (refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0) {
1243
+ return null;
1244
+ }
1245
+ if (!refreshPolicy.enabled) {
1246
+ return "refresh_disabled";
1209
1247
  }
1210
- const warnings = [...warningSet].sort((left, right) => left.localeCompare(right));
1248
+ return semanticRuntimeAvailable ? "no_stale_items" : "semantic_runtime_unavailable";
1249
+ }
1250
+ function buildVectorizationProviderDetails(settings, snapshot) {
1251
+ const activeProvider = snapshot.providerResolution.active?.name ?? null;
1252
+ const activeVectorStore = snapshot.vectorStoreResolution.active?.name ?? null;
1253
+ return {
1254
+ provider_active: activeProvider,
1255
+ // GH-244: surface the persisted (possibly empty) configured value and
1256
+ // how the active resolution was sourced, so a config audit can tell
1257
+ // "auto-detected" apart from a genuine misconfiguration when
1258
+ // settings.search.provider / vector_store.adapter are empty strings.
1259
+ provider_configured: typeof settings.search?.provider === "string" ? settings.search.provider : null,
1260
+ provider_source: resolveProviderConfigSource(activeProvider, settings.search?.provider ?? null),
1261
+ vector_store_active: activeVectorStore,
1262
+ vector_store_configured: typeof settings.vector_store?.adapter === "string" ? settings.vector_store.adapter : null,
1263
+ vector_store_source: resolveProviderConfigSource(activeVectorStore, settings.vector_store?.adapter ?? null),
1264
+ };
1265
+ }
1266
+ function buildVectorizationRefreshPolicyDetails(refreshPolicy) {
1267
+ return {
1268
+ enabled: refreshPolicy.enabled,
1269
+ check_only: refreshPolicy.checkOnly,
1270
+ no_refresh: refreshPolicy.noRefresh,
1271
+ refresh_vectors: refreshPolicy.refreshVectors,
1272
+ };
1273
+ }
1274
+ function vectorizationRefreshAttempted(refreshPolicy, semanticRuntimeAvailable, staleBefore) {
1275
+ return refreshPolicy.enabled && staleBefore.length > 0 && semanticRuntimeAvailable;
1276
+ }
1277
+ async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, verboseStaleItems) {
1278
+ const snapshot = buildVectorizationRuntimeSnapshot(settings);
1279
+ const ledgerBefore = await readVectorizationStatusLedger(pmRoot);
1280
+ const staleBefore = snapshot.semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerBefore.entries) : [];
1281
+ const refreshResult = await refreshStaleVectorizationItems({ pmRoot, snapshot, refreshPolicy, staleBefore });
1282
+ const ledgerAfter = await readVectorizationStatusLedger(pmRoot);
1283
+ const staleAfter = snapshot.semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerAfter.entries) : [];
1284
+ const strictVectorizationWarnings = !snapshot.runtimeDefaults.auto_ollama_defaults_applied;
1285
+ const embeddingIdentityChanged = vectorizationEmbeddingIdentityChanged({
1286
+ strictVectorizationWarnings,
1287
+ semanticRuntimeAvailable: snapshot.semanticRuntimeAvailable,
1288
+ ledgerBefore,
1289
+ runtimeEmbeddingIdentity: snapshot.runtimeEmbeddingIdentity,
1290
+ });
1291
+ const warnings = collectVectorizationWarnings({
1292
+ ledgerBefore,
1293
+ ledgerAfter,
1294
+ refreshResult,
1295
+ strictVectorizationWarnings,
1296
+ semanticRuntimeAvailable: snapshot.semanticRuntimeAvailable,
1297
+ embeddingIdentityChanged,
1298
+ staleAfter,
1299
+ });
1211
1300
  const staleBeforeDetail = selectStaleItemDetail(staleBefore, verboseStaleItems);
1212
1301
  const staleAfterDetail = selectStaleItemDetail(staleAfter, verboseStaleItems);
1302
+ const refreshAttempted = vectorizationRefreshAttempted(refreshPolicy, snapshot.semanticRuntimeAvailable, staleBefore);
1213
1303
  return {
1214
1304
  check: {
1215
1305
  name: "vectorization",
1216
1306
  status: warnings.length === 0 ? "ok" : "warn",
1217
1307
  details: {
1218
- semantic_runtime_available: semanticRuntimeAvailable,
1219
- compatibility_mode_auto_defaults: runtimeDefaults.auto_ollama_defaults_applied,
1220
- auto_ollama_defaults_applied: runtimeDefaults.auto_ollama_defaults_applied,
1221
- refresh_policy: {
1222
- enabled: refreshPolicy.enabled,
1223
- check_only: refreshPolicy.checkOnly,
1224
- no_refresh: refreshPolicy.noRefresh,
1225
- refresh_vectors: refreshPolicy.refreshVectors,
1226
- },
1227
- provider_active: providerResolution.active?.name ?? null,
1228
- // GH-244: surface the persisted (possibly empty) configured value and
1229
- // how the active resolution was sourced, so a config audit can tell
1230
- // "auto-detected" apart from a genuine misconfiguration when
1231
- // settings.search.provider / vector_store.adapter are empty strings.
1232
- provider_configured: typeof settings.search?.provider === "string" ? settings.search.provider : null,
1233
- provider_source: resolveProviderConfigSource(providerResolution.active?.name ?? null, settings.search?.provider ?? null),
1234
- vector_store_active: vectorStoreResolution.active?.name ?? null,
1235
- vector_store_configured: typeof settings.vector_store?.adapter === "string" ? settings.vector_store.adapter : null,
1236
- vector_store_source: resolveProviderConfigSource(vectorStoreResolution.active?.name ?? null, settings.vector_store?.adapter ?? null),
1308
+ semantic_runtime_available: snapshot.semanticRuntimeAvailable,
1309
+ compatibility_mode_auto_defaults: snapshot.runtimeDefaults.auto_ollama_defaults_applied,
1310
+ auto_ollama_defaults_applied: snapshot.runtimeDefaults.auto_ollama_defaults_applied,
1311
+ refresh_policy: buildVectorizationRefreshPolicyDetails(refreshPolicy),
1312
+ ...buildVectorizationProviderDetails(settings, snapshot),
1237
1313
  embedding_identity_changed: embeddingIdentityChanged,
1238
1314
  embedding_identity_before: ledgerBefore.embedding ?? null,
1239
- embedding_identity_runtime: runtimeEmbeddingIdentity ?? null,
1315
+ embedding_identity_runtime: snapshot.runtimeEmbeddingIdentity ?? null,
1240
1316
  items: items.length,
1241
1317
  ledger_entries_before: Object.keys(ledgerBefore.entries).length,
1242
1318
  stale_items_detail_mode: verboseStaleItems ? "full" : "summary",
@@ -1244,14 +1320,8 @@ async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, v
1244
1320
  stale_items_before_total: staleBeforeDetail.total,
1245
1321
  stale_items_before: staleBeforeDetail.values,
1246
1322
  stale_items_before_truncated: staleBeforeDetail.truncated,
1247
- refresh_attempted: refreshPolicy.enabled && staleBefore.length > 0 && semanticRuntimeAvailable,
1248
- refresh_skipped_reason: refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0
1249
- ? null
1250
- : !refreshPolicy.enabled
1251
- ? "refresh_disabled"
1252
- : !semanticRuntimeAvailable
1253
- ? "semantic_runtime_unavailable"
1254
- : "no_stale_items",
1323
+ refresh_attempted: refreshAttempted,
1324
+ refresh_skipped_reason: resolveVectorizationRefreshSkippedReason(refreshPolicy, snapshot.semanticRuntimeAvailable, staleBefore),
1255
1325
  refresh_result: refreshResult,
1256
1326
  ledger_entries_after: Object.keys(ledgerAfter.entries).length,
1257
1327
  stale_items_after_total: staleAfterDetail.total,
@@ -1261,7 +1331,6 @@ async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, v
1261
1331
  },
1262
1332
  warnings,
1263
1333
  };
1264
- /* c8 ignore stop */
1265
1334
  }
1266
1335
  function validateSettingsValues(settings) {
1267
1336
  const warnings = [];
@@ -1290,20 +1359,7 @@ function resolveVectorRefreshPolicy(options) {
1290
1359
  refreshVectors,
1291
1360
  };
1292
1361
  }
1293
- /**
1294
- * Implements run health for the public runtime surface of this module.
1295
- */
1296
- export async function runHealth(global, options = {}) {
1297
- const pmRoot = resolvePmRoot(process.cwd(), global.path);
1298
- const settingsPath = getSettingsPath(pmRoot);
1299
- if (!(await pathExists(settingsPath))) {
1300
- throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1301
- }
1302
- const { settings, warnings: settingsReadWarnings } = await readSettingsWithMetadata(pmRoot);
1303
- const normalizedSettingsReadWarnings = [...new Set(settingsReadWarnings)];
1304
- const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1305
- const strictDirectories = options.strictDirectories === true;
1306
- const refreshPolicy = resolveVectorRefreshPolicy(options);
1362
+ function resolveHealthDirectoryLists(typeRegistry) {
1307
1363
  const optionalBuiltinDirs = new Set(PM_OPTIONAL_TYPE_SUBDIRS.filter((entry) => entry.length > 0));
1308
1364
  const requiredDirSet = new Set(PM_CORE_REQUIRED_SUBDIRS.filter((entry) => entry.length > 0));
1309
1365
  const optionalDirSet = new Set();
@@ -1314,44 +1370,208 @@ export async function runHealth(global, options = {}) {
1314
1370
  }
1315
1371
  requiredDirSet.add(folder);
1316
1372
  }
1317
- const requiredDirs = [...requiredDirSet].sort((left, right) => left.localeCompare(right));
1318
- const optionalDirs = [...optionalDirSet].sort((left, right) => left.localeCompare(right));
1373
+ return {
1374
+ requiredDirs: [...requiredDirSet].sort((left, right) => left.localeCompare(right)),
1375
+ optionalDirs: [...optionalDirSet].sort((left, right) => left.localeCompare(right)),
1376
+ optionalDirSet,
1377
+ };
1378
+ }
1379
+ async function scanHealthDirectories(pmRoot, typeRegistry, strictDirectories) {
1380
+ const { requiredDirs, optionalDirs, optionalDirSet } = resolveHealthDirectoryLists(typeRegistry);
1319
1381
  const missingRequiredDirs = [];
1320
1382
  const missingOptionalDirs = [];
1321
1383
  const hookWarnings = [];
1322
1384
  for (const relativeDir of [...requiredDirs, ...optionalDirs]) {
1323
1385
  const directoryPath = path.join(pmRoot, relativeDir);
1324
- hookWarnings.push(...(await runActiveOnReadHooks({
1325
- path: directoryPath,
1326
- scope: "project",
1327
- })));
1328
- if (!(await isDirectory(directoryPath))) {
1329
- if (optionalDirSet.has(relativeDir)) {
1330
- missingOptionalDirs.push(relativeDir);
1331
- }
1332
- else {
1333
- missingRequiredDirs.push(relativeDir);
1334
- }
1386
+ hookWarnings.push(...(await runActiveOnReadHooks({ path: directoryPath, scope: "project" })));
1387
+ if (await isDirectory(directoryPath)) {
1388
+ continue;
1389
+ }
1390
+ if (optionalDirSet.has(relativeDir)) {
1391
+ missingOptionalDirs.push(relativeDir);
1392
+ }
1393
+ else {
1394
+ missingRequiredDirs.push(relativeDir);
1335
1395
  }
1336
1396
  }
1337
- const missingDirs = strictDirectories ? [...missingRequiredDirs, ...missingOptionalDirs] : [...missingRequiredDirs];
1397
+ return {
1398
+ requiredDirs,
1399
+ optionalDirs,
1400
+ missingRequiredDirs,
1401
+ missingOptionalDirs,
1402
+ missingDirs: strictDirectories ? [...missingRequiredDirs, ...missingOptionalDirs] : [...missingRequiredDirs],
1403
+ hookWarnings,
1404
+ };
1405
+ }
1406
+ function resolveHealthSkipPolicy(options) {
1407
+ const summaryMode = options.summary === true && options.full !== true;
1408
+ const fastProjectionCheckOnly = options.checkOnly === true && (options.brief === true || options.summary === true) && options.full !== true;
1409
+ return {
1410
+ summaryMode,
1411
+ skipIntegrity: (options.skipIntegrity === true || fastProjectionCheckOnly) && options.full !== true,
1412
+ skipDrift: (options.skipDrift === true || fastProjectionCheckOnly) && options.full !== true,
1413
+ skipVectors: (options.skipVectors === true || fastProjectionCheckOnly) && options.full !== true,
1414
+ };
1415
+ }
1416
+ async function readHealthItems(params) {
1417
+ if (params.skipPolicy.skipDrift && params.skipPolicy.skipVectors) {
1418
+ return listAllFrontMatter(params.pmRoot, params.settings.item_format, params.typeRegistry.type_to_folder, params.itemReadWarnings, params.settings.schema);
1419
+ }
1420
+ return listAllFrontMatterWithBody(params.pmRoot, params.settings.item_format, params.typeRegistry.type_to_folder, params.itemReadWarnings, params.settings.schema);
1421
+ }
1422
+ function buildSkippedHealthCheck(name) {
1423
+ return { check: { name, status: "ok", details: { skipped: true } }, warnings: [] };
1424
+ }
1425
+ function buildSettingsHealthCheck(settingsPath, settings, normalizedSettingsReadWarnings) {
1426
+ return {
1427
+ name: "settings",
1428
+ /* c8 ignore next -- settings read-warning status split is covered in broader read-settings integration tests */
1429
+ status: normalizedSettingsReadWarnings.length === 0 ? "ok" : "warn",
1430
+ details: {
1431
+ path: settingsPath,
1432
+ version: settings.version,
1433
+ id_prefix: settings.id_prefix,
1434
+ locks_ttl_seconds: settings.locks.ttl_seconds,
1435
+ warnings: normalizedSettingsReadWarnings,
1436
+ },
1437
+ };
1438
+ }
1439
+ function buildDirectoriesHealthCheck(directoryState, strictDirectories) {
1440
+ return {
1441
+ name: "directories",
1442
+ status: directoryState.missingDirs.length === 0 ? "ok" : "warn",
1443
+ details: {
1444
+ required: directoryState.requiredDirs,
1445
+ optional: directoryState.optionalDirs,
1446
+ missing_required: directoryState.missingRequiredDirs,
1447
+ missing_optional: directoryState.missingOptionalDirs,
1448
+ missing: directoryState.missingDirs,
1449
+ strict_directories: strictDirectories,
1450
+ },
1451
+ };
1452
+ }
1453
+ function buildSettingsValuesHealthCheck(settingWarnings) {
1454
+ return {
1455
+ name: "settings_values",
1456
+ status: settingWarnings.length === 0 ? "ok" : "warn",
1457
+ details: { warnings: settingWarnings },
1458
+ };
1459
+ }
1460
+ function buildStorageHealthCheck(items, settings, historySummary) {
1461
+ return {
1462
+ name: "storage",
1463
+ status: historySummary.over_threshold.length === 0 ? "ok" : "warn",
1464
+ details: {
1465
+ items: items.length,
1466
+ history_streams: historySummary.count,
1467
+ ...(historySummary.max_entries !== null
1468
+ ? {
1469
+ compact_policy: {
1470
+ enabled: settings.history.compact_policy.enabled,
1471
+ max_entries: historySummary.max_entries,
1472
+ trigger: settings.history.compact_policy.trigger,
1473
+ over_threshold_count: historySummary.over_threshold.length,
1474
+ over_threshold: historySummary.over_threshold,
1475
+ },
1476
+ }
1477
+ : {}),
1478
+ },
1479
+ };
1480
+ }
1481
+ function collectHealthWarnings(params) {
1482
+ const warnings = [
1483
+ ...params.directoryState.missingDirs.map((dir) => `missing_directory:${dir}`),
1484
+ ...params.normalizedSettingsReadWarnings,
1485
+ ...params.settingWarnings,
1486
+ ...params.normalizedItemReadWarnings,
1487
+ ...params.telemetryCheck.warnings,
1488
+ ...params.extensionCheck.warnings,
1489
+ ...params.historyPolicyWarnings,
1490
+ ...params.historySummary.warnings,
1491
+ ...params.locksCheck.warnings,
1492
+ ...params.integrityCheck.warnings,
1493
+ ...params.historyDriftCheck.warnings,
1494
+ ...params.vectorizationCheck.warnings,
1495
+ ...params.directoryState.hookWarnings,
1496
+ ];
1497
+ return [...new Set(warnings)];
1498
+ }
1499
+ function extractHistoryDriftedCount(historyDriftCheck) {
1500
+ const counts = historyDriftCheck.check.details.counts;
1501
+ return typeof counts?.drifted === "number" ? counts.drifted : 0;
1502
+ }
1503
+ function buildHealthRemediationSources(params) {
1504
+ return {
1505
+ settings: params.normalizedSettingsReadWarnings,
1506
+ directories: params.directoryState.missingDirs.map((dir) => `missing_directory:${dir}`),
1507
+ settings_values: params.settingWarnings,
1508
+ telemetry: params.telemetryCheck.warnings,
1509
+ extensions: params.extensionCheck.warnings,
1510
+ storage: params.historySummary.over_threshold.map((id) => `history_stream_over_compact_threshold:${id}`),
1511
+ locks: params.locksCheck.warnings,
1512
+ integrity: params.integrityCheck.warnings,
1513
+ history_drift: params.historyDriftCheck.warnings,
1514
+ vectorization: params.vectorizationCheck.warnings,
1515
+ };
1516
+ }
1517
+ function rewriteBulkHealthRemediation(params) {
1518
+ if (params.check.name === "history_drift" && params.historyDriftedCount > 1) {
1519
+ for (const code of Object.keys(params.remediationMap)) {
1520
+ params.remediationMap[code] = "pm history-repair --all";
1521
+ }
1522
+ }
1523
+ if (params.check.name === "storage" && params.overThresholdCount > 1) {
1524
+ for (const code of Object.keys(params.remediationMap)) {
1525
+ params.remediationMap[code] = "pm history-compact --all-streams";
1526
+ }
1527
+ }
1528
+ }
1529
+ function attachHealthRemediationMaps(params) {
1530
+ for (const check of params.checks) {
1531
+ const remediationMap = buildRemediationMap(params.remediationSources[check.name]);
1532
+ rewriteBulkHealthRemediation({
1533
+ check,
1534
+ remediationMap,
1535
+ historyDriftedCount: params.historyDriftedCount,
1536
+ overThresholdCount: params.overThresholdCount,
1537
+ });
1538
+ if (Object.keys(remediationMap).length > 0) {
1539
+ check.details = { ...check.details, remediation_map: remediationMap };
1540
+ }
1541
+ }
1542
+ }
1543
+ function projectHealthResult(result, options, summaryMode) {
1544
+ if (summaryMode) {
1545
+ return applySummaryHealthProjection(result);
1546
+ }
1547
+ return options.brief === true ? applyBriefHealthProjection(result) : result;
1548
+ }
1549
+ /**
1550
+ * Implements run health for the public runtime surface of this module.
1551
+ */
1552
+ export async function runHealth(global, options = {}) {
1553
+ const pmRoot = resolvePmRoot(process.cwd(), global.path);
1554
+ const settingsPath = getSettingsPath(pmRoot);
1555
+ if (!(await pathExists(settingsPath))) {
1556
+ throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1557
+ }
1558
+ const { settings, warnings: settingsReadWarnings } = await readSettingsWithMetadata(pmRoot);
1559
+ const normalizedSettingsReadWarnings = [...new Set(settingsReadWarnings)];
1560
+ const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1561
+ const strictDirectories = options.strictDirectories === true;
1562
+ const refreshPolicy = resolveVectorRefreshPolicy(options);
1563
+ const directoryState = await scanHealthDirectories(pmRoot, typeRegistry, strictDirectories);
1338
1564
  const settingWarnings = validateSettingsValues(settings);
1339
1565
  const telemetryCheck = await buildTelemetryCheck(settings, {
1340
1566
  checkTelemetry: options.checkTelemetry === true,
1341
1567
  });
1342
1568
  const extensionCheck = await buildExtensionCheck(pmRoot, settings, Boolean(global.noExtensions));
1343
- const summaryMode = options.summary === true && options.full !== true;
1344
- const fastProjectionCheckOnly = options.checkOnly === true && (options.brief === true || options.summary === true) && options.full !== true;
1345
- const skipIntegrity = (options.skipIntegrity === true || fastProjectionCheckOnly) && options.full !== true;
1346
- const skipDrift = (options.skipDrift === true || fastProjectionCheckOnly) && options.full !== true;
1347
- const skipVectors = (options.skipVectors === true || fastProjectionCheckOnly) && options.full !== true;
1569
+ const skipPolicy = resolveHealthSkipPolicy(options);
1348
1570
  const itemReadWarnings = [];
1349
- const items = skipDrift && skipVectors
1350
- ? await listAllFrontMatter(pmRoot, settings.item_format, typeRegistry.type_to_folder, itemReadWarnings, settings.schema)
1351
- : await listAllFrontMatterWithBody(pmRoot, settings.item_format, typeRegistry.type_to_folder, itemReadWarnings, settings.schema);
1571
+ const items = await readHealthItems({ pmRoot, settings, typeRegistry, skipPolicy, itemReadWarnings });
1352
1572
  const itemsWithBody = items;
1353
1573
  const normalizedItemReadWarnings = [...new Set(itemReadWarnings)];
1354
- const historyPolicy = skipDrift
1574
+ const historyPolicy = skipPolicy.skipDrift
1355
1575
  ? { warnings: [] }
1356
1576
  : await enforceHistoryStreamPolicyForItems({
1357
1577
  pmRoot,
@@ -1361,137 +1581,58 @@ export async function runHealth(global, options = {}) {
1361
1581
  });
1362
1582
  const historySummary = await countHistoryStreams(pmRoot, settings.history.compact_policy);
1363
1583
  const locksCheck = await buildLocksCheck(pmRoot);
1364
- const integrityCheck = skipIntegrity
1365
- ? { check: { name: "integrity", status: "ok", details: { skipped: true } }, warnings: [] }
1584
+ const integrityCheck = skipPolicy.skipIntegrity
1585
+ ? buildSkippedHealthCheck("integrity")
1366
1586
  : await buildIntegrityCheck(pmRoot, typeRegistry.type_to_folder, settings.schema);
1367
- const historyDriftCheck = skipDrift
1368
- ? { check: { name: "history_drift", status: "ok", details: { skipped: true } }, warnings: [] }
1587
+ const historyDriftCheck = skipPolicy.skipDrift
1588
+ ? buildSkippedHealthCheck("history_drift")
1369
1589
  : await buildHistoryDriftCheck(pmRoot, itemsWithBody);
1370
- const vectorizationCheck = skipVectors
1371
- ? { check: { name: "vectorization", status: "ok", details: { skipped: true } }, warnings: [] }
1590
+ const vectorizationCheck = skipPolicy.skipVectors
1591
+ ? buildSkippedHealthCheck("vectorization")
1372
1592
  : await buildVectorizationCheck(pmRoot, settings, itemsWithBody, refreshPolicy, options.verboseStaleItems === true);
1373
1593
  const checks = [
1374
- {
1375
- name: "settings",
1376
- /* c8 ignore next -- settings read-warning status split is covered in broader read-settings integration tests */
1377
- status: normalizedSettingsReadWarnings.length === 0 ? "ok" : "warn",
1378
- details: {
1379
- path: settingsPath,
1380
- version: settings.version,
1381
- id_prefix: settings.id_prefix,
1382
- locks_ttl_seconds: settings.locks.ttl_seconds,
1383
- warnings: normalizedSettingsReadWarnings,
1384
- },
1385
- },
1386
- {
1387
- name: "directories",
1388
- status: missingDirs.length === 0 ? "ok" : "warn",
1389
- details: {
1390
- required: requiredDirs,
1391
- optional: optionalDirs,
1392
- missing_required: missingRequiredDirs,
1393
- missing_optional: missingOptionalDirs,
1394
- missing: missingDirs,
1395
- strict_directories: strictDirectories,
1396
- },
1397
- },
1398
- {
1399
- name: "settings_values",
1400
- status: settingWarnings.length === 0 ? "ok" : "warn",
1401
- details: {
1402
- warnings: settingWarnings,
1403
- },
1404
- },
1594
+ buildSettingsHealthCheck(settingsPath, settings, normalizedSettingsReadWarnings),
1595
+ buildDirectoriesHealthCheck(directoryState, strictDirectories),
1596
+ buildSettingsValuesHealthCheck(settingWarnings),
1405
1597
  telemetryCheck.check,
1406
1598
  extensionCheck.check,
1407
- {
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
- ? {
1415
- compact_policy: {
1416
- enabled: settings.history.compact_policy.enabled,
1417
- max_entries: historySummary.max_entries,
1418
- trigger: settings.history.compact_policy.trigger,
1419
- over_threshold_count: historySummary.over_threshold.length,
1420
- over_threshold: historySummary.over_threshold,
1421
- },
1422
- }
1423
- : {}),
1424
- },
1425
- },
1599
+ buildStorageHealthCheck(items, settings, historySummary),
1426
1600
  locksCheck.check,
1427
1601
  integrityCheck.check,
1428
1602
  historyDriftCheck.check,
1429
1603
  vectorizationCheck.check,
1430
1604
  ];
1431
- const warnings = [
1432
- ...missingDirs.map((dir) => `missing_directory:${dir}`),
1433
- ...normalizedSettingsReadWarnings,
1434
- ...settingWarnings,
1435
- ...normalizedItemReadWarnings,
1436
- ...telemetryCheck.warnings,
1437
- ...extensionCheck.warnings,
1438
- ...historyPolicy.warnings,
1439
- ...historySummary.warnings,
1440
- ...locksCheck.warnings,
1441
- ...integrityCheck.warnings,
1442
- ...historyDriftCheck.warnings,
1443
- ...vectorizationCheck.warnings,
1444
- ...hookWarnings,
1445
- ];
1446
- const normalizedWarnings = [...new Set(warnings)];
1447
- // Attach a machine-executable remediation_map (warning-code-prefix -> fix
1448
- // command) to each non-extension check so agents gating on `pm health --json`
1449
- // never have to hardcode the warning-code -> fix mapping. The extensions check
1450
- // keeps its richer, contextual `details.triage.remediation`; brief/summary
1451
- // projections omit remediation_map (it lives only in full check details).
1452
- // Every health check contributes its warning tokens as a remediation source.
1453
- // Most resolve to a registered fix command; the extensions check passes its
1454
- // full warning list because only the system-wide partial-coverage adoption
1455
- // gap is registered — per-extension findings resolve to nothing here and keep
1456
- // their richer `details.triage.remediation`, so buildRemediationMap simply
1457
- // skips every unregistered code (pm-bdvm). The map is total over
1458
- // HealthCheck["name"], so no check is ever silently missing a source.
1459
- const checkRemediationSources = {
1460
- settings: normalizedSettingsReadWarnings,
1461
- directories: missingDirs.map((dir) => `missing_directory:${dir}`),
1462
- settings_values: settingWarnings,
1463
- telemetry: telemetryCheck.warnings,
1464
- extensions: extensionCheck.warnings,
1465
- storage: historySummary.over_threshold.map((id) => `history_stream_over_compact_threshold:${id}`),
1466
- locks: locksCheck.warnings,
1467
- integrity: integrityCheck.warnings,
1468
- history_drift: historyDriftCheck.warnings,
1469
- vectorization: vectorizationCheck.warnings,
1470
- };
1471
- const historyDriftedCount = typeof historyDriftCheck.check.details.counts?.drifted === "number"
1472
- ? (historyDriftCheck.check.details.counts.drifted)
1473
- : 0;
1474
- for (const check of checks) {
1475
- const remediationMap = buildRemediationMap(checkRemediationSources[check.name]);
1476
- // With multiple drifted streams the per-item `pm history-repair <id>`
1477
- // template would have to be run once per stream; suggest the bulk audited
1478
- // pass instead so agents repair everything in one command.
1479
- if (check.name === "history_drift" && historyDriftedCount > 1) {
1480
- for (const code of Object.keys(remediationMap)) {
1481
- remediationMap[code] = "pm history-repair --all";
1482
- }
1483
- }
1484
- // With multiple over-threshold streams, point at the one-pass bulk sweep
1485
- // rather than a per-stream `pm history-compact <id>` template.
1486
- if (check.name === "storage" && historySummary.over_threshold.length > 1) {
1487
- for (const code of Object.keys(remediationMap)) {
1488
- remediationMap[code] = "pm history-compact --all-streams";
1489
- }
1490
- }
1491
- if (Object.keys(remediationMap).length > 0) {
1492
- check.details = { ...check.details, remediation_map: remediationMap };
1493
- }
1494
- }
1605
+ const normalizedWarnings = collectHealthWarnings({
1606
+ directoryState,
1607
+ normalizedSettingsReadWarnings,
1608
+ settingWarnings,
1609
+ normalizedItemReadWarnings,
1610
+ telemetryCheck,
1611
+ extensionCheck,
1612
+ historyPolicyWarnings: historyPolicy.warnings,
1613
+ historySummary,
1614
+ locksCheck,
1615
+ integrityCheck,
1616
+ historyDriftCheck,
1617
+ vectorizationCheck,
1618
+ });
1619
+ attachHealthRemediationMaps({
1620
+ checks,
1621
+ remediationSources: buildHealthRemediationSources({
1622
+ directoryState,
1623
+ normalizedSettingsReadWarnings,
1624
+ settingWarnings,
1625
+ telemetryCheck,
1626
+ extensionCheck,
1627
+ historySummary,
1628
+ locksCheck,
1629
+ integrityCheck,
1630
+ historyDriftCheck,
1631
+ vectorizationCheck,
1632
+ }),
1633
+ historyDriftedCount: extractHistoryDriftedCount(historyDriftCheck),
1634
+ overThresholdCount: historySummary.over_threshold.length,
1635
+ });
1495
1636
  // Telemetry is an opt-out, non-critical observability feature. Its operational
1496
1637
  // state (queue backlog, unreachable endpoint, corrupt local state) is advisory:
1497
1638
  // it must never flip overall project health to not-ok. Such warnings are still
@@ -1503,14 +1644,12 @@ export async function runHealth(global, options = {}) {
1503
1644
  warnings: normalizedWarnings,
1504
1645
  generated_at: nowIso(),
1505
1646
  };
1506
- if (summaryMode) {
1507
- return applySummaryHealthProjection(result);
1508
- }
1509
- return options.brief === true ? applyBriefHealthProjection(result) : result;
1647
+ return projectHealthResult(result, options, skipPolicy.summaryMode);
1510
1648
  }
1511
1649
  export const _testOnlyHealthCommand = {
1512
1650
  buildExtensionHealthTriageSummary,
1513
1651
  buildCapabilityContractMetadata,
1652
+ buildVectorizationProviderDetails,
1514
1653
  collectUnknownCapabilityGuidance,
1515
1654
  isAdvisoryHealthWarning,
1516
1655
  isDirectory,
@@ -1529,4 +1668,4 @@ export const _testOnlyHealthCommand = {
1529
1668
  warningCode,
1530
1669
  };
1531
1670
  //# sourceMappingURL=health.js.map
1532
- //# debugId=7b0dc685-2469-5d2e-98c8-07eebf79ee3e
1671
+ //# debugId=bd215d4d-d9ea-5734-aa11-b74e1fa0780f