@unbrained/pm-cli 2026.7.5 → 2026.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/cli/commands/annotation-command.d.ts +1 -0
  3. package/dist/cli/commands/annotation-command.js +29 -2
  4. package/dist/cli/commands/annotation-command.js.map +1 -1
  5. package/dist/cli/commands/comments.js +3 -4
  6. package/dist/cli/commands/comments.js.map +1 -1
  7. package/dist/cli/commands/extension/bundled-catalog.d.ts +3 -0
  8. package/dist/cli/commands/extension/bundled-catalog.js +38 -28
  9. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  10. package/dist/cli/commands/extension/install-sources.js +81 -18
  11. package/dist/cli/commands/extension/install-sources.js.map +1 -1
  12. package/dist/cli/commands/health.js +9 -5
  13. package/dist/cli/commands/health.js.map +1 -1
  14. package/dist/cli/commands/learnings.js +5 -3
  15. package/dist/cli/commands/learnings.js.map +1 -1
  16. package/dist/cli/commands/notes.js +5 -3
  17. package/dist/cli/commands/notes.js.map +1 -1
  18. package/dist/cli/commands/reindex.js +4 -3
  19. package/dist/cli/commands/reindex.js.map +1 -1
  20. package/dist/cli/commands/search.js +3 -3
  21. package/dist/cli/commands/search.js.map +1 -1
  22. package/dist/cli/commands/test.d.ts +9 -0
  23. package/dist/cli/commands/test.js +144 -105
  24. package/dist/cli/commands/test.js.map +1 -1
  25. package/dist/cli/extension-command-help.js +10 -2
  26. package/dist/cli/extension-command-help.js.map +1 -1
  27. package/dist/cli/register-list-query.d.ts +1 -1
  28. package/dist/cli/register-list-query.js +18 -27
  29. package/dist/cli/register-list-query.js.map +1 -1
  30. package/dist/cli/register-operations.d.ts +0 -8
  31. package/dist/cli/register-operations.js +41 -46
  32. package/dist/cli/register-operations.js.map +1 -1
  33. package/dist/cli/register-setup.js +113 -13
  34. package/dist/cli/register-setup.js.map +1 -1
  35. package/dist/cli/registration-helpers.d.ts +5 -1
  36. package/dist/cli/registration-helpers.js +14 -2
  37. package/dist/cli/registration-helpers.js.map +1 -1
  38. package/dist/cli-bundle/chunks/append-F7WPGIQL.js +11 -0
  39. package/dist/cli-bundle/chunks/{contracts-OJEXMKVW.js → append-PVCTBVJG.js} +8 -9
  40. package/dist/cli-bundle/chunks/{chunk-PPE4YUQM.js → chunk-2APXX4TZ.js} +17 -28
  41. package/dist/cli-bundle/chunks/chunk-2APXX4TZ.js.map +1 -0
  42. package/dist/cli-bundle/chunks/{docs-S6UTOTO5.js → chunk-2LEJGRQ7.js} +3 -12
  43. package/dist/cli-bundle/chunks/{docs-S6UTOTO5.js.map → chunk-2LEJGRQ7.js.map} +1 -1
  44. package/dist/cli-bundle/chunks/{chunk-T3ABIMGW.js → chunk-2TILG6F2.js} +3 -3
  45. package/dist/cli-bundle/chunks/{chunk-S5AYOUT5.js → chunk-3G6UMXT3.js} +6 -8
  46. package/dist/cli-bundle/chunks/{chunk-S5AYOUT5.js.map → chunk-3G6UMXT3.js.map} +1 -1
  47. package/dist/cli-bundle/chunks/{chunk-RCT3YJOK.js → chunk-3TYOW6RR.js} +8 -8
  48. package/dist/cli-bundle/chunks/{chunk-3JZNEQBA.js → chunk-3X542TEY.js} +7 -7
  49. package/dist/cli-bundle/chunks/{history-repair-EVTO6LIH.js → chunk-42LXP4VO.js} +14 -21
  50. package/dist/cli-bundle/chunks/{history-repair-EVTO6LIH.js.map → chunk-42LXP4VO.js.map} +1 -1
  51. package/dist/cli-bundle/chunks/{chunk-5J2XPTAD.js → chunk-43SIHQND.js} +36 -15
  52. package/dist/cli-bundle/chunks/chunk-43SIHQND.js.map +7 -0
  53. package/dist/cli-bundle/chunks/{history-repair-4N6SDVHK.js → chunk-43UQN754.js} +12 -19
  54. package/dist/cli-bundle/chunks/{history-repair-4N6SDVHK.js.map → chunk-43UQN754.js.map} +1 -1
  55. package/dist/cli-bundle/chunks/{chunk-OWTIRHX4.js → chunk-43YSKY75.js} +4 -6
  56. package/dist/cli-bundle/chunks/{chunk-OWTIRHX4.js.map → chunk-43YSKY75.js.map} +1 -1
  57. package/dist/cli-bundle/chunks/{notes-72YXN5JX.js → chunk-4BKDAEDF.js} +6 -13
  58. package/dist/cli-bundle/chunks/{notes-72YXN5JX.js.map → chunk-4BKDAEDF.js.map} +2 -2
  59. package/dist/cli-bundle/chunks/{close-many-AP4MWU36.js → chunk-4IQKDKGE.js} +18 -32
  60. package/dist/cli-bundle/chunks/{close-many-AP4MWU36.js.map → chunk-4IQKDKGE.js.map} +1 -1
  61. package/dist/cli-bundle/chunks/{chunk-ZCJAA3JK.js → chunk-4MZOKTI2.js} +6 -8
  62. package/dist/cli-bundle/chunks/{chunk-ZCJAA3JK.js.map → chunk-4MZOKTI2.js.map} +1 -1
  63. package/dist/cli-bundle/chunks/{chunk-IJ6CO3JV.js → chunk-52NS7JDP.js} +14 -20
  64. package/dist/cli-bundle/chunks/{chunk-IJ6CO3JV.js.map → chunk-52NS7JDP.js.map} +1 -1
  65. package/dist/cli-bundle/chunks/{chunk-T3F4DF23.js → chunk-565WYS5W.js} +12 -16
  66. package/dist/cli-bundle/chunks/{chunk-T3F4DF23.js.map → chunk-565WYS5W.js.map} +1 -1
  67. package/dist/cli-bundle/chunks/{copy-OTJOWFL6.js → chunk-5FIQ4EX3.js} +13 -19
  68. package/dist/cli-bundle/chunks/{copy-OTJOWFL6.js.map → chunk-5FIQ4EX3.js.map} +1 -1
  69. package/dist/cli-bundle/chunks/{config-V57QD47V.js → chunk-6G6O3OPQ.js} +259 -41
  70. package/dist/cli-bundle/chunks/chunk-6G6O3OPQ.js.map +1 -0
  71. package/dist/cli-bundle/chunks/{chunk-K3AGVXSF.js → chunk-6LCJRGPD.js} +9 -13
  72. package/dist/cli-bundle/chunks/{chunk-K3AGVXSF.js.map → chunk-6LCJRGPD.js.map} +1 -1
  73. package/dist/cli-bundle/chunks/{chunk-7MDXZAZS.js → chunk-6UQCNWFV.js} +6 -8
  74. package/dist/cli-bundle/chunks/{chunk-7MDXZAZS.js.map → chunk-6UQCNWFV.js.map} +1 -1
  75. package/dist/cli-bundle/chunks/{chunk-LEKT4K7I.js → chunk-6XTSYPPO.js} +1216 -387
  76. package/dist/cli-bundle/chunks/chunk-6XTSYPPO.js.map +7 -0
  77. package/dist/cli-bundle/chunks/chunk-7ML7JONU.js +5434 -0
  78. package/dist/cli-bundle/chunks/chunk-7ML7JONU.js.map +1 -0
  79. package/dist/cli-bundle/chunks/{chunk-TSPKZRRW.js → chunk-7PNQA24K.js} +30 -36
  80. package/dist/cli-bundle/chunks/{chunk-TSPKZRRW.js.map → chunk-7PNQA24K.js.map} +1 -1
  81. package/dist/cli-bundle/chunks/{chunk-YOF5VPKM.js → chunk-7VQ3JJN5.js} +2 -2
  82. package/dist/cli-bundle/chunks/{chunk-BFVHCAOO.js → chunk-7Y5N34HX.js} +8 -12
  83. package/dist/cli-bundle/chunks/{chunk-BFVHCAOO.js.map → chunk-7Y5N34HX.js.map} +1 -1
  84. package/dist/cli-bundle/chunks/{chunk-P5TFTLWW.js → chunk-AGAVEDIE.js} +7 -7
  85. package/dist/cli-bundle/chunks/{chunk-YFIE7YK6.js → chunk-AJUON7E6.js} +3 -3
  86. package/dist/cli-bundle/chunks/{close-many-OMZIGZB4.js → chunk-ARKHKYYS.js} +16 -30
  87. package/dist/cli-bundle/chunks/{close-many-OMZIGZB4.js.map → chunk-ARKHKYYS.js.map} +1 -1
  88. package/dist/cli-bundle/chunks/{chunk-7EQNAZX2.js → chunk-C5ACVMOI.js} +99 -51
  89. package/dist/cli-bundle/chunks/chunk-C5ACVMOI.js.map +7 -0
  90. package/dist/cli-bundle/chunks/{chunk-PJ3A56YF.js → chunk-CJQM7O7R.js} +16 -20
  91. package/dist/cli-bundle/chunks/{chunk-PJ3A56YF.js.map → chunk-CJQM7O7R.js.map} +1 -1
  92. package/dist/cli-bundle/chunks/{chunk-WISPVC2E.js → chunk-D2DCTFTL.js} +7 -9
  93. package/dist/cli-bundle/chunks/{chunk-WISPVC2E.js.map → chunk-D2DCTFTL.js.map} +1 -1
  94. package/dist/cli-bundle/chunks/{append-CZGUZ45Q.js → chunk-DDDWVPID.js} +7 -11
  95. package/dist/cli-bundle/chunks/{append-CZGUZ45Q.js.map → chunk-DDDWVPID.js.map} +1 -1
  96. package/dist/cli-bundle/chunks/{learnings-2HTPZNGZ.js → chunk-DG6BSXZ7.js} +6 -13
  97. package/dist/cli-bundle/chunks/{learnings-2HTPZNGZ.js.map → chunk-DG6BSXZ7.js.map} +2 -2
  98. package/dist/cli-bundle/chunks/{chunk-7WYXBPYQ.js → chunk-DR2V5OIV.js} +3 -3
  99. package/dist/cli-bundle/chunks/{chunk-YQMMMONE.js → chunk-E3LWJUGF.js} +4 -6
  100. package/dist/cli-bundle/chunks/{chunk-YQMMMONE.js.map → chunk-E3LWJUGF.js.map} +1 -1
  101. package/dist/cli-bundle/chunks/{chunk-D3UCE7RW.js → chunk-E3YQFSFE.js} +6 -10
  102. package/dist/cli-bundle/chunks/{chunk-D3UCE7RW.js.map → chunk-E3YQFSFE.js.map} +1 -1
  103. package/dist/cli-bundle/chunks/{chunk-PDXT6Q55.js → chunk-EDO7VXSO.js} +2 -2
  104. package/dist/cli-bundle/chunks/{chunk-FDBARR33.js → chunk-EIUBK2LT.js} +12 -18
  105. package/dist/cli-bundle/chunks/{chunk-FDBARR33.js.map → chunk-EIUBK2LT.js.map} +1 -1
  106. package/dist/cli-bundle/chunks/{chunk-HBYZDSK5.js → chunk-EMXPI36L.js} +14 -20
  107. package/dist/cli-bundle/chunks/{chunk-HBYZDSK5.js.map → chunk-EMXPI36L.js.map} +1 -1
  108. package/dist/cli-bundle/chunks/{chunk-4OFLJHX6.js → chunk-EOUVR7JN.js} +13 -8
  109. package/dist/cli-bundle/chunks/chunk-EOUVR7JN.js.map +1 -0
  110. package/dist/cli-bundle/chunks/{chunk-FUM6UMY4.js → chunk-EVEPHNXJ.js} +4 -4
  111. package/dist/cli-bundle/chunks/{deps-L2FPIAD3.js → chunk-F6MT7KKE.js} +6 -10
  112. package/dist/cli-bundle/chunks/{deps-L2FPIAD3.js.map → chunk-F6MT7KKE.js.map} +1 -1
  113. package/dist/cli-bundle/chunks/{chunk-FGQKEDE4.js → chunk-F6YC2A6X.js} +7 -11
  114. package/dist/cli-bundle/chunks/{chunk-FGQKEDE4.js.map → chunk-F6YC2A6X.js.map} +1 -1
  115. package/dist/cli-bundle/chunks/chunk-FILL6BB2.js +5514 -0
  116. package/dist/cli-bundle/chunks/chunk-FILL6BB2.js.map +7 -0
  117. package/dist/cli-bundle/chunks/{chunk-RX3HQSYG.js → chunk-FN6SB4HU.js} +2 -2
  118. package/dist/cli-bundle/chunks/chunk-GH73UOSJ.js +5359 -0
  119. package/dist/cli-bundle/chunks/chunk-GH73UOSJ.js.map +1 -0
  120. package/dist/cli-bundle/chunks/{chunk-JLA7EVYV.js → chunk-GLS6VMWI.js} +37 -16
  121. package/dist/cli-bundle/chunks/chunk-GLS6VMWI.js.map +1 -0
  122. package/dist/cli-bundle/chunks/{files-JPU3FNJ7.js → chunk-GPIDUMMN.js} +10 -17
  123. package/dist/cli-bundle/chunks/{files-JPU3FNJ7.js.map → chunk-GPIDUMMN.js.map} +1 -1
  124. package/dist/cli-bundle/chunks/{history-compact-3F6VELO7.js → chunk-GTM5HQL4.js} +15 -21
  125. package/dist/cli-bundle/chunks/{history-compact-3F6VELO7.js.map → chunk-GTM5HQL4.js.map} +1 -1
  126. package/dist/cli-bundle/chunks/{chunk-DLQ4ZTCU.js → chunk-H2SMKL2N.js} +8 -8
  127. package/dist/cli-bundle/chunks/{chunk-S4APD35C.js → chunk-HHEWQXPD.js} +6 -6
  128. package/dist/cli-bundle/chunks/chunk-HHEWQXPD.js.map +7 -0
  129. package/dist/cli-bundle/chunks/{chunk-C3PMDWGX.js → chunk-HX6QXV5P.js} +2 -2
  130. package/dist/cli-bundle/chunks/{copy-LEE6P6EM.js → chunk-I74FMIWA.js} +11 -17
  131. package/dist/cli-bundle/chunks/{copy-LEE6P6EM.js.map → chunk-I74FMIWA.js.map} +1 -1
  132. package/dist/cli-bundle/chunks/chunk-IDIBF4E2.js +804 -0
  133. package/dist/cli-bundle/chunks/chunk-IDIBF4E2.js.map +7 -0
  134. package/dist/cli-bundle/chunks/{comments-SAG5LSKL.js → chunk-II7R6KD4.js} +9 -13
  135. package/dist/cli-bundle/chunks/{comments-SAG5LSKL.js.map → chunk-II7R6KD4.js.map} +1 -1
  136. package/dist/cli-bundle/chunks/chunk-J2VGADNG.js +10320 -0
  137. package/dist/cli-bundle/chunks/chunk-J2VGADNG.js.map +1 -0
  138. package/dist/cli-bundle/chunks/{chunk-Y76TWC45.js → chunk-J7BOLHAV.js} +5 -7
  139. package/dist/cli-bundle/chunks/{chunk-Y76TWC45.js.map → chunk-J7BOLHAV.js.map} +1 -1
  140. package/dist/cli-bundle/chunks/{chunk-QHZO65XW.js → chunk-KTGJ2CBU.js} +4 -6
  141. package/dist/cli-bundle/chunks/{chunk-QHZO65XW.js.map → chunk-KTGJ2CBU.js.map} +1 -1
  142. package/dist/cli-bundle/chunks/{chunk-5VVUKE3U.js → chunk-LCFJ7XAM.js} +32 -2
  143. package/dist/cli-bundle/chunks/{chunk-5VVUKE3U.js.map → chunk-LCFJ7XAM.js.map} +3 -3
  144. package/dist/cli-bundle/chunks/{chunk-YMABYTNG.js → chunk-LZQU6XJG.js} +28 -34
  145. package/dist/cli-bundle/chunks/{chunk-YMABYTNG.js.map → chunk-LZQU6XJG.js.map} +1 -1
  146. package/dist/cli-bundle/chunks/{chunk-3Y4OESPP.js → chunk-M62RO3XK.js} +10 -14
  147. package/dist/cli-bundle/chunks/{chunk-3Y4OESPP.js.map → chunk-M62RO3XK.js.map} +1 -1
  148. package/dist/cli-bundle/chunks/{chunk-YPPVU5GX.js → chunk-MCEUKJKW.js} +9 -11
  149. package/dist/cli-bundle/chunks/{chunk-YPPVU5GX.js.map → chunk-MCEUKJKW.js.map} +1 -1
  150. package/dist/cli-bundle/chunks/{chunk-T5Y3QSNF.js → chunk-MHNMCDWR.js} +1447 -86
  151. package/dist/cli-bundle/chunks/chunk-MHNMCDWR.js.map +1 -0
  152. package/dist/cli-bundle/chunks/{chunk-HJE4JTKQ.js → chunk-MRFWUSVA.js} +4 -6
  153. package/dist/cli-bundle/chunks/{chunk-HJE4JTKQ.js.map → chunk-MRFWUSVA.js.map} +1 -1
  154. package/dist/cli-bundle/chunks/{chunk-P3VRG72Q.js → chunk-N6ZHDLUY.js} +6 -8
  155. package/dist/cli-bundle/chunks/{chunk-P3VRG72Q.js.map → chunk-N6ZHDLUY.js.map} +1 -1
  156. package/dist/cli-bundle/chunks/{delete-HQKGRNRZ.js → chunk-NWWL22C7.js} +8 -12
  157. package/dist/cli-bundle/chunks/{delete-HQKGRNRZ.js.map → chunk-NWWL22C7.js.map} +1 -1
  158. package/dist/cli-bundle/chunks/{chunk-N6DNM2FA.js → chunk-P3MJJW7P.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-5JE6SMYS.js → chunk-PDXJXEZJ.js} +2 -2
  160. package/dist/cli-bundle/chunks/{append-NSQBCXZJ.js → chunk-Q64AYQYW.js} +9 -13
  161. package/dist/cli-bundle/chunks/{append-NSQBCXZJ.js.map → chunk-Q64AYQYW.js.map} +1 -1
  162. package/dist/cli-bundle/chunks/{update-many-SLLAMHT7.js → chunk-QDABF2RB.js} +26 -47
  163. package/dist/cli-bundle/chunks/{update-many-SLLAMHT7.js.map → chunk-QDABF2RB.js.map} +1 -1
  164. package/dist/cli-bundle/chunks/{chunk-NBFCNJ7Q.js → chunk-QFBSP3NI.js} +529 -46
  165. package/dist/cli-bundle/chunks/chunk-QFBSP3NI.js.map +1 -0
  166. package/dist/cli-bundle/chunks/{focus-LFZ6IDBR.js → chunk-RB3KLPAH.js} +11 -16
  167. package/dist/cli-bundle/chunks/{focus-LFZ6IDBR.js.map → chunk-RB3KLPAH.js.map} +1 -1
  168. package/dist/cli-bundle/chunks/{chunk-YSAH5FY5.js → chunk-RY7PTTUB.js} +94 -53
  169. package/dist/cli-bundle/chunks/chunk-RY7PTTUB.js.map +1 -0
  170. package/dist/cli-bundle/chunks/{chunk-WVSGSZ6J.js → chunk-S547WBYG.js} +1477 -86
  171. package/dist/cli-bundle/chunks/chunk-S547WBYG.js.map +7 -0
  172. package/dist/cli-bundle/chunks/{update-many-DC7X3EWM.js → chunk-S5BNGFN5.js} +24 -45
  173. package/dist/cli-bundle/chunks/{update-many-DC7X3EWM.js.map → chunk-S5BNGFN5.js.map} +1 -1
  174. package/dist/cli-bundle/chunks/{focus-WNMYCVYA.js → chunk-S6VC2A2K.js} +9 -14
  175. package/dist/cli-bundle/chunks/{focus-WNMYCVYA.js.map → chunk-S6VC2A2K.js.map} +1 -1
  176. package/dist/cli-bundle/chunks/{learnings-YBIHY3D6.js → chunk-SIM5JDON.js} +7 -14
  177. package/dist/cli-bundle/chunks/{learnings-YBIHY3D6.js.map → chunk-SIM5JDON.js.map} +1 -1
  178. package/dist/cli-bundle/chunks/{chunk-ZD34OFFQ.js → chunk-SY75LYXR.js} +12 -7
  179. package/dist/cli-bundle/chunks/chunk-SY75LYXR.js.map +7 -0
  180. package/dist/cli-bundle/chunks/{chunk-TT42JUMF.js → chunk-TEISGNSH.js} +7 -7
  181. package/dist/cli-bundle/chunks/chunk-TEISGNSH.js.map +1 -0
  182. package/dist/cli-bundle/chunks/{chunk-AAEQMOC6.js → chunk-TEKZOS7M.js} +2 -2
  183. package/dist/cli-bundle/chunks/{chunk-4QQ6PM7M.js → chunk-TGUK6XN6.js} +14 -18
  184. package/dist/cli-bundle/chunks/{chunk-4QQ6PM7M.js.map → chunk-TGUK6XN6.js.map} +1 -1
  185. package/dist/cli-bundle/chunks/{plan-R4NDQ27E.js → chunk-TNC6MZUD.js} +10 -21
  186. package/dist/cli-bundle/chunks/{plan-R4NDQ27E.js.map → chunk-TNC6MZUD.js.map} +1 -1
  187. package/dist/cli-bundle/chunks/chunk-TZLYO4PP.js +10498 -0
  188. package/dist/cli-bundle/chunks/chunk-TZLYO4PP.js.map +7 -0
  189. package/dist/cli-bundle/chunks/{chunk-YD5FML7K.js → chunk-UO7XAZK6.js} +27 -4
  190. package/dist/cli-bundle/chunks/chunk-UO7XAZK6.js.map +1 -0
  191. package/dist/cli-bundle/chunks/{docs-6CRCSVKK.js → chunk-V5ZWKJNY.js} +5 -14
  192. package/dist/cli-bundle/chunks/{docs-6CRCSVKK.js.map → chunk-V5ZWKJNY.js.map} +1 -1
  193. package/dist/cli-bundle/chunks/{notes-NJ7IQJX4.js → chunk-VGO73OCK.js} +7 -14
  194. package/dist/cli-bundle/chunks/{notes-NJ7IQJX4.js.map → chunk-VGO73OCK.js.map} +1 -1
  195. package/dist/cli-bundle/chunks/{chunk-NER3KUUS.js → chunk-VLEA2UTQ.js} +2 -2
  196. package/dist/cli-bundle/chunks/{files-6P57MRKL.js → chunk-W5HXHC7C.js} +8 -15
  197. package/dist/cli-bundle/chunks/{files-6P57MRKL.js.map → chunk-W5HXHC7C.js.map} +1 -1
  198. package/dist/cli-bundle/chunks/{chunk-ZMD35NYG.js → chunk-WCWVEXGA.js} +2 -2
  199. package/dist/cli-bundle/chunks/chunk-X47MKQXU.js +6690 -0
  200. package/dist/cli-bundle/chunks/chunk-X47MKQXU.js.map +7 -0
  201. package/dist/cli-bundle/chunks/{delete-62JQTYT4.js → chunk-XBX5CBRQ.js} +6 -10
  202. package/dist/cli-bundle/chunks/{delete-62JQTYT4.js.map → chunk-XBX5CBRQ.js.map} +1 -1
  203. package/dist/cli-bundle/chunks/{chunk-MTTXDAK4.js → chunk-XC3X7BQR.js} +541 -44
  204. package/dist/cli-bundle/chunks/chunk-XC3X7BQR.js.map +7 -0
  205. package/dist/cli-bundle/chunks/{history-compact-656Y2TN4.js → chunk-XHCVAZGM.js} +17 -23
  206. package/dist/cli-bundle/chunks/{history-compact-656Y2TN4.js.map → chunk-XHCVAZGM.js.map} +1 -1
  207. package/dist/cli-bundle/chunks/{chunk-ZAHXPXVY.js → chunk-XPMXPR7K.js} +7 -9
  208. package/dist/cli-bundle/chunks/{chunk-ZAHXPXVY.js.map → chunk-XPMXPR7K.js.map} +1 -1
  209. package/dist/cli-bundle/chunks/{deps-55FTG6Z5.js → chunk-XS2TMNXR.js} +8 -12
  210. package/dist/cli-bundle/chunks/{deps-55FTG6Z5.js.map → chunk-XS2TMNXR.js.map} +1 -1
  211. package/dist/cli-bundle/chunks/{plan-XWY5T67S.js → chunk-XXIYUTLK.js} +12 -23
  212. package/dist/cli-bundle/chunks/{plan-XWY5T67S.js.map → chunk-XXIYUTLK.js.map} +1 -1
  213. package/dist/cli-bundle/chunks/{chunk-7QH7DHUB.js → chunk-XZWL7VNE.js} +1220 -398
  214. package/dist/cli-bundle/chunks/chunk-XZWL7VNE.js.map +1 -0
  215. package/dist/cli-bundle/chunks/chunk-Y5IKRUEM.js +6624 -0
  216. package/dist/cli-bundle/chunks/chunk-Y5IKRUEM.js.map +1 -0
  217. package/dist/cli-bundle/chunks/{chunk-ABRA3BHY.js → chunk-Y7KYVCZM.js} +12 -18
  218. package/dist/cli-bundle/chunks/{chunk-ABRA3BHY.js.map → chunk-Y7KYVCZM.js.map} +1 -1
  219. package/dist/cli-bundle/chunks/{chunk-UI5BJ6DO.js → chunk-YCVWWIKY.js} +17 -28
  220. package/dist/cli-bundle/chunks/chunk-YCVWWIKY.js.map +7 -0
  221. package/dist/cli-bundle/chunks/chunk-YH5NBDFA.js +780 -0
  222. package/dist/cli-bundle/chunks/chunk-YH5NBDFA.js.map +1 -0
  223. package/dist/cli-bundle/chunks/chunk-YNCFP5AR.js +5509 -0
  224. package/dist/cli-bundle/chunks/chunk-YNCFP5AR.js.map +7 -0
  225. package/dist/cli-bundle/chunks/{comments-MIW5MZOX.js → chunk-YPD7SQ5P.js} +8 -12
  226. package/dist/cli-bundle/chunks/{comments-MIW5MZOX.js.map → chunk-YPD7SQ5P.js.map} +2 -2
  227. package/dist/cli-bundle/chunks/{chunk-T35XLYZF.js → chunk-YPMZMKN7.js} +2 -2
  228. package/dist/cli-bundle/chunks/{chunk-R3ZBLGTC.js → chunk-YTD5GICJ.js} +4 -4
  229. package/dist/cli-bundle/chunks/{config-DJJKZB5R.js → chunk-ZNEG2UDO.js} +264 -39
  230. package/dist/cli-bundle/chunks/{config-DJJKZB5R.js.map → chunk-ZNEG2UDO.js.map} +4 -4
  231. package/dist/cli-bundle/chunks/{chunk-EEY54JMF.js → chunk-ZO7CLOY2.js} +3 -3
  232. package/dist/cli-bundle/chunks/{close-3YRR3XY6.js → close-3YYQ5OG2.js} +5 -9
  233. package/dist/cli-bundle/chunks/close-Z3Q4U7TS.js +12 -0
  234. package/dist/cli-bundle/chunks/close-many-3L2RXH3M.js +22 -0
  235. package/dist/cli-bundle/chunks/close-many-D366FTIG.js +26 -0
  236. package/dist/cli-bundle/chunks/comments-54XDJNFE.js +17 -0
  237. package/dist/cli-bundle/chunks/comments-HGHC2PN6.js +13 -0
  238. package/dist/cli-bundle/chunks/copy-44RT5GDW.js +13 -0
  239. package/dist/cli-bundle/chunks/copy-UGMUGHZA.js +9 -0
  240. package/dist/cli-bundle/chunks/{create-XWWQFQ6S.js → create-4GWJWPXG.js} +9 -14
  241. package/dist/cli-bundle/chunks/create-AZXCUYKP.js +25 -0
  242. package/dist/cli-bundle/chunks/delete-Y6SXIQ4X.js +10 -0
  243. package/dist/cli-bundle/chunks/delete-YQ2VPXNF.js +14 -0
  244. package/dist/cli-bundle/chunks/deps-BU5EBJDU.js +17 -0
  245. package/dist/cli-bundle/chunks/deps-FMANWFRP.js +13 -0
  246. package/dist/cli-bundle/chunks/docs-OQBSJNIA.js +18 -0
  247. package/dist/cli-bundle/chunks/docs-VNPBZXEL.js +14 -0
  248. package/dist/cli-bundle/chunks/files-72HZEBOE.js +18 -0
  249. package/dist/cli-bundle/chunks/{activity-YKAKZTZ4.js → files-HTSB2KJG.js} +13 -13
  250. package/dist/cli-bundle/chunks/focus-FOG4ALC2.js +14 -0
  251. package/dist/cli-bundle/chunks/focus-SUTMKXGX.js +10 -0
  252. package/dist/cli-bundle/chunks/history-compact-M6IFAMBP.js +25 -0
  253. package/dist/cli-bundle/chunks/history-compact-NEXRPP2O.js +21 -0
  254. package/dist/cli-bundle/chunks/{history-redact-54ICFKXM.js → history-redact-NQX3OGZP.js} +7 -11
  255. package/dist/cli-bundle/chunks/history-redact-WQJBZ3PX.js +17 -0
  256. package/dist/cli-bundle/chunks/history-repair-CBHMHAJO.js +19 -0
  257. package/dist/cli-bundle/chunks/history-repair-NHOJG7WO.js +23 -0
  258. package/dist/cli-bundle/chunks/learnings-M64NTSOR.js +13 -0
  259. package/dist/cli-bundle/chunks/learnings-T63JGKKN.js +17 -0
  260. package/dist/cli-bundle/chunks/notes-73WE2UV2.js +13 -0
  261. package/dist/cli-bundle/chunks/notes-U7L6HQQ2.js +17 -0
  262. package/dist/cli-bundle/chunks/plan-OSCNYFGC.js +24 -0
  263. package/dist/cli-bundle/chunks/plan-OSCNYFGC.js.map +7 -0
  264. package/dist/cli-bundle/chunks/plan-TN537L24.js +28 -0
  265. package/dist/cli-bundle/chunks/plan-TN537L24.js.map +1 -0
  266. package/dist/cli-bundle/chunks/profile-MHAMXMHQ.js +37 -0
  267. package/dist/cli-bundle/chunks/profile-MHAMXMHQ.js.map +1 -0
  268. package/dist/cli-bundle/chunks/profile-TIGLAKJ7.js +33 -0
  269. package/dist/cli-bundle/chunks/profile-TIGLAKJ7.js.map +7 -0
  270. package/dist/cli-bundle/chunks/{register-list-query-5H66WFYF.js → register-list-query-OHXD7G5N.js} +41 -33
  271. package/dist/cli-bundle/chunks/register-list-query-OHXD7G5N.js.map +7 -0
  272. package/dist/cli-bundle/chunks/{register-list-query-FB3FNDLZ.js → register-list-query-ZCRABAPN.js} +42 -34
  273. package/dist/cli-bundle/chunks/register-list-query-ZCRABAPN.js.map +1 -0
  274. package/dist/cli-bundle/chunks/{register-mutation-UJO23C7R.js → register-mutation-P3G4XP6Q.js} +36 -41
  275. package/dist/cli-bundle/chunks/{register-mutation-UJO23C7R.js.map → register-mutation-P3G4XP6Q.js.map} +1 -1
  276. package/dist/cli-bundle/chunks/{register-mutation-Z2ETYHKS.js → register-mutation-XX4H56PE.js} +34 -39
  277. package/dist/cli-bundle/chunks/{register-mutation-Z2ETYHKS.js.map → register-mutation-XX4H56PE.js.map} +1 -1
  278. package/dist/cli-bundle/chunks/{register-operations-A3XAM5J7.js → register-operations-V6PIYEDU.js} +80 -52
  279. package/dist/cli-bundle/chunks/register-operations-V6PIYEDU.js.map +1 -0
  280. package/dist/cli-bundle/chunks/{register-operations-SG7HBSUP.js → register-operations-V6VKTG54.js} +79 -51
  281. package/dist/cli-bundle/chunks/register-operations-V6VKTG54.js.map +7 -0
  282. package/dist/cli-bundle/chunks/{register-setup-K6U3NVY5.js → register-setup-6RVAWT6W.js} +129 -31
  283. package/dist/cli-bundle/chunks/register-setup-6RVAWT6W.js.map +7 -0
  284. package/dist/cli-bundle/chunks/{register-setup-I45OGJUV.js → register-setup-6YVUSQYD.js} +130 -32
  285. package/dist/cli-bundle/chunks/register-setup-6YVUSQYD.js.map +1 -0
  286. package/dist/cli-bundle/chunks/{restore-YJ2ET6AT.js → restore-HC3YSWF7.js} +7 -11
  287. package/dist/cli-bundle/chunks/restore-HC3YSWF7.js.map +1 -0
  288. package/dist/cli-bundle/chunks/restore-LFAMMRYZ.js +15 -0
  289. package/dist/cli-bundle/chunks/restore-LFAMMRYZ.js.map +7 -0
  290. package/dist/cli-bundle/chunks/{schema-2PUXCZ25.js → schema-DAGSYO6E.js} +6 -10
  291. package/dist/cli-bundle/chunks/schema-DAGSYO6E.js.map +7 -0
  292. package/dist/cli-bundle/chunks/{schema-Y6DXXK2F.js → schema-UBXJCQAC.js} +6 -10
  293. package/dist/cli-bundle/chunks/schema-UBXJCQAC.js.map +1 -0
  294. package/dist/cli-bundle/chunks/update-CJGG5WMV.js +21 -0
  295. package/dist/cli-bundle/chunks/update-CJGG5WMV.js.map +7 -0
  296. package/dist/cli-bundle/chunks/update-LKD64AFP.js +25 -0
  297. package/dist/cli-bundle/chunks/update-LKD64AFP.js.map +1 -0
  298. package/dist/cli-bundle/chunks/update-many-G4SM7BHC.js +31 -0
  299. package/dist/cli-bundle/chunks/update-many-G4SM7BHC.js.map +7 -0
  300. package/dist/cli-bundle/chunks/update-many-VLIV3D7R.js +35 -0
  301. package/dist/cli-bundle/chunks/update-many-VLIV3D7R.js.map +1 -0
  302. package/dist/cli-bundle/main.js +29 -31
  303. package/dist/cli-bundle/main.js.map +2 -2
  304. package/dist/cli-bundle/sdk-runtime.js +136 -54
  305. package/dist/cli-bundle/sdk-testing.js +7 -8
  306. package/dist/cli-bundle/sdk.js +132 -84
  307. package/dist/cli-bundle/sdk.js.map +2 -2
  308. package/dist/core/history/drift-scan.js +3 -8
  309. package/dist/core/history/drift-scan.js.map +1 -1
  310. package/dist/core/output/mutation-projection.js +11 -5
  311. package/dist/core/output/mutation-projection.js.map +1 -1
  312. package/dist/core/search/cache.js +3 -3
  313. package/dist/core/search/cache.js.map +1 -1
  314. package/dist/core/search/semantic-defaults.d.ts +2 -0
  315. package/dist/core/search/semantic-defaults.js +11 -4
  316. package/dist/core/search/semantic-defaults.js.map +1 -1
  317. package/dist/core/search/vector-stores.d.ts +1 -1
  318. package/dist/core/search/vector-stores.js +33 -7
  319. package/dist/core/search/vector-stores.js.map +1 -1
  320. package/dist/mcp/server.d.ts +22 -50
  321. package/dist/mcp/server.js +62 -916
  322. package/dist/mcp/server.js.map +1 -1
  323. package/dist/sdk/cli-contracts/flag-contracts.js +7 -7
  324. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  325. package/dist/sdk/cli-contracts/tool-schema.js +9 -7
  326. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  327. package/dist/sdk/index.d.ts +4 -2
  328. package/dist/sdk/index.js +4 -4
  329. package/dist/sdk/index.js.map +1 -1
  330. package/dist/sdk/runtime.d.ts +312 -5
  331. package/dist/sdk/runtime.js +1391 -26
  332. package/dist/sdk/runtime.js.map +1 -1
  333. package/dist/sdk/start-task-status.d.ts +13 -0
  334. package/dist/sdk/start-task-status.js +19 -0
  335. package/dist/sdk/start-task-status.js.map +1 -0
  336. package/dist/sdk/workspace-contracts-cache.d.ts +17 -0
  337. package/dist/sdk/workspace-contracts-cache.js +36 -0
  338. package/dist/sdk/workspace-contracts-cache.js.map +1 -0
  339. package/docs/COMMANDS.md +10 -1
  340. package/docs/RELEASING.md +3 -1
  341. package/docs/SDK.md +81 -0
  342. package/docs/TESTING.md +3 -0
  343. package/docs/examples/sdk-app-embedding/run-embedded-pm.mjs +16 -2
  344. package/docs/examples/sdk-contract-consumer/inspect-contracts.mjs +16 -1
  345. package/package.json +1 -1
  346. package/dist/cli-bundle/chunks/activity-4XQIDNM5.js +0 -18
  347. package/dist/cli-bundle/chunks/aggregate-EQX2RGB7.js +0 -375
  348. package/dist/cli-bundle/chunks/aggregate-EQX2RGB7.js.map +0 -7
  349. package/dist/cli-bundle/chunks/aggregate-PEGZGJXD.js +0 -372
  350. package/dist/cli-bundle/chunks/aggregate-PEGZGJXD.js.map +0 -1
  351. package/dist/cli-bundle/chunks/chunk-37E72CNS.js +0 -217
  352. package/dist/cli-bundle/chunks/chunk-37E72CNS.js.map +0 -1
  353. package/dist/cli-bundle/chunks/chunk-3PL6LEKP.js +0 -1961
  354. package/dist/cli-bundle/chunks/chunk-3PL6LEKP.js.map +0 -1
  355. package/dist/cli-bundle/chunks/chunk-3U3VEWK6.js +0 -1749
  356. package/dist/cli-bundle/chunks/chunk-3U3VEWK6.js.map +0 -7
  357. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +0 -87
  358. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +0 -7
  359. package/dist/cli-bundle/chunks/chunk-4LRVSBO6.js +0 -822
  360. package/dist/cli-bundle/chunks/chunk-4LRVSBO6.js.map +0 -7
  361. package/dist/cli-bundle/chunks/chunk-4OFLJHX6.js.map +0 -1
  362. package/dist/cli-bundle/chunks/chunk-53BTLLAF.js +0 -2181
  363. package/dist/cli-bundle/chunks/chunk-53BTLLAF.js.map +0 -1
  364. package/dist/cli-bundle/chunks/chunk-57C2RLW5.js +0 -1704
  365. package/dist/cli-bundle/chunks/chunk-57C2RLW5.js.map +0 -1
  366. package/dist/cli-bundle/chunks/chunk-5B3X4Y22.js +0 -2330
  367. package/dist/cli-bundle/chunks/chunk-5B3X4Y22.js.map +0 -7
  368. package/dist/cli-bundle/chunks/chunk-5J2XPTAD.js.map +0 -7
  369. package/dist/cli-bundle/chunks/chunk-5JZ7APJU.js +0 -995
  370. package/dist/cli-bundle/chunks/chunk-5JZ7APJU.js.map +0 -1
  371. package/dist/cli-bundle/chunks/chunk-75U6M5ZD.js +0 -819
  372. package/dist/cli-bundle/chunks/chunk-75U6M5ZD.js.map +0 -1
  373. package/dist/cli-bundle/chunks/chunk-7C2O74AE.js +0 -23
  374. package/dist/cli-bundle/chunks/chunk-7C2O74AE.js.map +0 -7
  375. package/dist/cli-bundle/chunks/chunk-7EQNAZX2.js.map +0 -7
  376. package/dist/cli-bundle/chunks/chunk-7QH7DHUB.js.map +0 -1
  377. package/dist/cli-bundle/chunks/chunk-BVEUCSH2.js +0 -530
  378. package/dist/cli-bundle/chunks/chunk-BVEUCSH2.js.map +0 -7
  379. package/dist/cli-bundle/chunks/chunk-DC3QJQWI.js +0 -275
  380. package/dist/cli-bundle/chunks/chunk-DC3QJQWI.js.map +0 -7
  381. package/dist/cli-bundle/chunks/chunk-DRBV5UC2.js +0 -231
  382. package/dist/cli-bundle/chunks/chunk-DRBV5UC2.js.map +0 -7
  383. package/dist/cli-bundle/chunks/chunk-E2FUG6GD.js +0 -2184
  384. package/dist/cli-bundle/chunks/chunk-E2FUG6GD.js.map +0 -7
  385. package/dist/cli-bundle/chunks/chunk-EZFKWSC7.js +0 -1615
  386. package/dist/cli-bundle/chunks/chunk-EZFKWSC7.js.map +0 -7
  387. package/dist/cli-bundle/chunks/chunk-FJRKQREY.js +0 -228
  388. package/dist/cli-bundle/chunks/chunk-FJRKQREY.js.map +0 -1
  389. package/dist/cli-bundle/chunks/chunk-GIWXVMZ3.js +0 -3237
  390. package/dist/cli-bundle/chunks/chunk-GIWXVMZ3.js.map +0 -7
  391. package/dist/cli-bundle/chunks/chunk-HK72NWAD.js +0 -1570
  392. package/dist/cli-bundle/chunks/chunk-HK72NWAD.js.map +0 -1
  393. package/dist/cli-bundle/chunks/chunk-JFCVQXZX.js +0 -3206
  394. package/dist/cli-bundle/chunks/chunk-JFCVQXZX.js.map +0 -1
  395. package/dist/cli-bundle/chunks/chunk-JINYH2DB.js +0 -371
  396. package/dist/cli-bundle/chunks/chunk-JINYH2DB.js.map +0 -7
  397. package/dist/cli-bundle/chunks/chunk-JLA7EVYV.js.map +0 -1
  398. package/dist/cli-bundle/chunks/chunk-K32L7HZO.js +0 -76
  399. package/dist/cli-bundle/chunks/chunk-K32L7HZO.js.map +0 -1
  400. package/dist/cli-bundle/chunks/chunk-KDZ6K25I.js +0 -79
  401. package/dist/cli-bundle/chunks/chunk-KDZ6K25I.js.map +0 -7
  402. package/dist/cli-bundle/chunks/chunk-KL22PY6L.js +0 -915
  403. package/dist/cli-bundle/chunks/chunk-KL22PY6L.js.map +0 -1
  404. package/dist/cli-bundle/chunks/chunk-KLG4ZULO.js +0 -218
  405. package/dist/cli-bundle/chunks/chunk-KLG4ZULO.js.map +0 -7
  406. package/dist/cli-bundle/chunks/chunk-LEKT4K7I.js.map +0 -7
  407. package/dist/cli-bundle/chunks/chunk-MNZ7DRNC.js +0 -1858
  408. package/dist/cli-bundle/chunks/chunk-MNZ7DRNC.js.map +0 -1
  409. package/dist/cli-bundle/chunks/chunk-MTTXDAK4.js.map +0 -7
  410. package/dist/cli-bundle/chunks/chunk-MZ7VNEVY.js +0 -520
  411. package/dist/cli-bundle/chunks/chunk-MZ7VNEVY.js.map +0 -1
  412. package/dist/cli-bundle/chunks/chunk-N7X4WP6L.js +0 -1041
  413. package/dist/cli-bundle/chunks/chunk-N7X4WP6L.js.map +0 -7
  414. package/dist/cli-bundle/chunks/chunk-NBFCNJ7Q.js.map +0 -1
  415. package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js +0 -20
  416. package/dist/cli-bundle/chunks/chunk-NNHHXJB2.js.map +0 -1
  417. package/dist/cli-bundle/chunks/chunk-OBA2WH65.js +0 -918
  418. package/dist/cli-bundle/chunks/chunk-OBA2WH65.js.map +0 -7
  419. package/dist/cli-bundle/chunks/chunk-OESSOFJ4.js +0 -1985
  420. package/dist/cli-bundle/chunks/chunk-OESSOFJ4.js.map +0 -7
  421. package/dist/cli-bundle/chunks/chunk-OK5NXCZB.js +0 -238
  422. package/dist/cli-bundle/chunks/chunk-OK5NXCZB.js.map +0 -1
  423. package/dist/cli-bundle/chunks/chunk-P5YORJRH.js +0 -1977
  424. package/dist/cli-bundle/chunks/chunk-P5YORJRH.js.map +0 -7
  425. package/dist/cli-bundle/chunks/chunk-PPAJG4GB.js +0 -1031
  426. package/dist/cli-bundle/chunks/chunk-PPAJG4GB.js.map +0 -1
  427. package/dist/cli-bundle/chunks/chunk-PPE4YUQM.js.map +0 -1
  428. package/dist/cli-bundle/chunks/chunk-QZ342C63.js +0 -220
  429. package/dist/cli-bundle/chunks/chunk-QZ342C63.js.map +0 -7
  430. package/dist/cli-bundle/chunks/chunk-R2EMWY7Q.js +0 -368
  431. package/dist/cli-bundle/chunks/chunk-R2EMWY7Q.js.map +0 -1
  432. package/dist/cli-bundle/chunks/chunk-S4APD35C.js.map +0 -7
  433. package/dist/cli-bundle/chunks/chunk-STPSZ2XY.js +0 -1149
  434. package/dist/cli-bundle/chunks/chunk-STPSZ2XY.js.map +0 -1
  435. package/dist/cli-bundle/chunks/chunk-T4MX77AK.js +0 -272
  436. package/dist/cli-bundle/chunks/chunk-T4MX77AK.js.map +0 -1
  437. package/dist/cli-bundle/chunks/chunk-T5Y3QSNF.js.map +0 -1
  438. package/dist/cli-bundle/chunks/chunk-TT42JUMF.js.map +0 -1
  439. package/dist/cli-bundle/chunks/chunk-UHKX7I75.js +0 -165
  440. package/dist/cli-bundle/chunks/chunk-UHKX7I75.js.map +0 -1
  441. package/dist/cli-bundle/chunks/chunk-UI5BJ6DO.js.map +0 -7
  442. package/dist/cli-bundle/chunks/chunk-US3T3W5J.js +0 -1932
  443. package/dist/cli-bundle/chunks/chunk-US3T3W5J.js.map +0 -1
  444. package/dist/cli-bundle/chunks/chunk-UZRDBL6W.js +0 -175
  445. package/dist/cli-bundle/chunks/chunk-UZRDBL6W.js.map +0 -7
  446. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +0 -84
  447. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +0 -1
  448. package/dist/cli-bundle/chunks/chunk-VZIYHZDX.js +0 -1868
  449. package/dist/cli-bundle/chunks/chunk-VZIYHZDX.js.map +0 -7
  450. package/dist/cli-bundle/chunks/chunk-WVSGSZ6J.js.map +0 -7
  451. package/dist/cli-bundle/chunks/chunk-XQCG2JGW.js +0 -1152
  452. package/dist/cli-bundle/chunks/chunk-XQCG2JGW.js.map +0 -7
  453. package/dist/cli-bundle/chunks/chunk-YD5FML7K.js.map +0 -1
  454. package/dist/cli-bundle/chunks/chunk-YSAH5FY5.js.map +0 -1
  455. package/dist/cli-bundle/chunks/chunk-YZIR4R3U.js +0 -1005
  456. package/dist/cli-bundle/chunks/chunk-YZIR4R3U.js.map +0 -7
  457. package/dist/cli-bundle/chunks/chunk-Z2CRRZYF.js +0 -215
  458. package/dist/cli-bundle/chunks/chunk-Z2CRRZYF.js.map +0 -1
  459. package/dist/cli-bundle/chunks/chunk-ZD34OFFQ.js.map +0 -7
  460. package/dist/cli-bundle/chunks/chunk-ZJB3UV5U.js +0 -2306
  461. package/dist/cli-bundle/chunks/chunk-ZJB3UV5U.js.map +0 -1
  462. package/dist/cli-bundle/chunks/chunk-ZVDL32GJ.js +0 -241
  463. package/dist/cli-bundle/chunks/chunk-ZVDL32GJ.js.map +0 -7
  464. package/dist/cli-bundle/chunks/claim-4DROPSIS.js +0 -144
  465. package/dist/cli-bundle/chunks/claim-4DROPSIS.js.map +0 -1
  466. package/dist/cli-bundle/chunks/claim-VX54TV5U.js +0 -147
  467. package/dist/cli-bundle/chunks/claim-VX54TV5U.js.map +0 -7
  468. package/dist/cli-bundle/chunks/close-OB2Y4QP5.js +0 -16
  469. package/dist/cli-bundle/chunks/config-V57QD47V.js.map +0 -1
  470. package/dist/cli-bundle/chunks/context-4OQGIPSO.js +0 -45
  471. package/dist/cli-bundle/chunks/context-WLA6IAWE.js +0 -49
  472. package/dist/cli-bundle/chunks/contracts-HXJLKCRI.js +0 -12
  473. package/dist/cli-bundle/chunks/create-WKOZKPQR.js +0 -30
  474. package/dist/cli-bundle/chunks/eval-N6UHFWVO.js +0 -288
  475. package/dist/cli-bundle/chunks/eval-N6UHFWVO.js.map +0 -7
  476. package/dist/cli-bundle/chunks/eval-PHOTWYHI.js +0 -278
  477. package/dist/cli-bundle/chunks/eval-PHOTWYHI.js.map +0 -1
  478. package/dist/cli-bundle/chunks/extension-NBAH62ML.js +0 -40
  479. package/dist/cli-bundle/chunks/extension-ZF6ZZPOU.js +0 -44
  480. package/dist/cli-bundle/chunks/gc-AETFKZ44.js +0 -398
  481. package/dist/cli-bundle/chunks/gc-AETFKZ44.js.map +0 -7
  482. package/dist/cli-bundle/chunks/gc-RLBP4QVN.js +0 -388
  483. package/dist/cli-bundle/chunks/gc-RLBP4QVN.js.map +0 -1
  484. package/dist/cli-bundle/chunks/get-NH2MPBCI.js +0 -283
  485. package/dist/cli-bundle/chunks/get-NH2MPBCI.js.map +0 -1
  486. package/dist/cli-bundle/chunks/get-P4ZQXCPZ.js +0 -286
  487. package/dist/cli-bundle/chunks/get-P4ZQXCPZ.js.map +0 -7
  488. package/dist/cli-bundle/chunks/health-3GVPMQBL.js +0 -1612
  489. package/dist/cli-bundle/chunks/health-3GVPMQBL.js.map +0 -1
  490. package/dist/cli-bundle/chunks/health-DNTM72GJ.js +0 -1615
  491. package/dist/cli-bundle/chunks/health-DNTM72GJ.js.map +0 -7
  492. package/dist/cli-bundle/chunks/history-RYKLC72X.js +0 -20
  493. package/dist/cli-bundle/chunks/history-SGPYRAFT.js +0 -24
  494. package/dist/cli-bundle/chunks/history-redact-4H3FCKF3.js +0 -21
  495. package/dist/cli-bundle/chunks/init-RPIPQUNV.js +0 -32
  496. package/dist/cli-bundle/chunks/init-SKQAESQS.js +0 -28
  497. package/dist/cli-bundle/chunks/list-64LHZ3HM.js +0 -32
  498. package/dist/cli-bundle/chunks/list-7LXBTEKI.js +0 -36
  499. package/dist/cli-bundle/chunks/next-7ODPAQ4U.js +0 -306
  500. package/dist/cli-bundle/chunks/next-7ODPAQ4U.js.map +0 -7
  501. package/dist/cli-bundle/chunks/next-ODJUM4ZM.js +0 -303
  502. package/dist/cli-bundle/chunks/next-ODJUM4ZM.js.map +0 -1
  503. package/dist/cli-bundle/chunks/profile-XQWEQKS3.js +0 -397
  504. package/dist/cli-bundle/chunks/profile-XQWEQKS3.js.map +0 -1
  505. package/dist/cli-bundle/chunks/profile-YRDHLMRO.js +0 -400
  506. package/dist/cli-bundle/chunks/profile-YRDHLMRO.js.map +0 -7
  507. package/dist/cli-bundle/chunks/register-list-query-5H66WFYF.js.map +0 -7
  508. package/dist/cli-bundle/chunks/register-list-query-FB3FNDLZ.js.map +0 -1
  509. package/dist/cli-bundle/chunks/register-operations-A3XAM5J7.js.map +0 -1
  510. package/dist/cli-bundle/chunks/register-operations-SG7HBSUP.js.map +0 -7
  511. package/dist/cli-bundle/chunks/register-setup-I45OGJUV.js.map +0 -1
  512. package/dist/cli-bundle/chunks/register-setup-K6U3NVY5.js.map +0 -7
  513. package/dist/cli-bundle/chunks/restore-PXOFL6AM.js +0 -19
  514. package/dist/cli-bundle/chunks/scheduling-shortcuts-SSC4MYWQ.js +0 -91
  515. package/dist/cli-bundle/chunks/scheduling-shortcuts-SSC4MYWQ.js.map +0 -7
  516. package/dist/cli-bundle/chunks/scheduling-shortcuts-ULRG7MNP.js +0 -88
  517. package/dist/cli-bundle/chunks/scheduling-shortcuts-ULRG7MNP.js.map +0 -1
  518. package/dist/cli-bundle/chunks/search-3S72CTD6.js +0 -38
  519. package/dist/cli-bundle/chunks/search-WNUNBQXO.js +0 -34
  520. package/dist/cli-bundle/chunks/stats-IJYTRQGV.js +0 -250
  521. package/dist/cli-bundle/chunks/stats-IJYTRQGV.js.map +0 -7
  522. package/dist/cli-bundle/chunks/stats-L2D5Y2O5.js +0 -240
  523. package/dist/cli-bundle/chunks/stats-L2D5Y2O5.js.map +0 -1
  524. package/dist/cli-bundle/chunks/telemetry-L2CVOKVN.js +0 -309
  525. package/dist/cli-bundle/chunks/telemetry-L2CVOKVN.js.map +0 -7
  526. package/dist/cli-bundle/chunks/telemetry-QBYWQA76.js +0 -306
  527. package/dist/cli-bundle/chunks/telemetry-QBYWQA76.js.map +0 -1
  528. package/dist/cli-bundle/chunks/test-DQ2QFJ7W.js +0 -45
  529. package/dist/cli-bundle/chunks/test-W7QBLVJS.js +0 -41
  530. package/dist/cli-bundle/chunks/test-all-636NTRTT.js +0 -434
  531. package/dist/cli-bundle/chunks/test-all-636NTRTT.js.map +0 -1
  532. package/dist/cli-bundle/chunks/test-all-DWYK3RG6.js +0 -437
  533. package/dist/cli-bundle/chunks/test-all-DWYK3RG6.js.map +0 -7
  534. package/dist/cli-bundle/chunks/test-runs-245OINZR.js +0 -28
  535. package/dist/cli-bundle/chunks/test-runs-ZRD4GCTT.js +0 -24
  536. package/dist/cli-bundle/chunks/update-SFLZPJXX.js +0 -30
  537. package/dist/cli-bundle/chunks/update-SJZ6S77U.js +0 -26
  538. package/dist/cli-bundle/chunks/upgrade-HFFXLZJA.js +0 -290
  539. package/dist/cli-bundle/chunks/upgrade-HFFXLZJA.js.map +0 -7
  540. package/dist/cli-bundle/chunks/upgrade-UYQKM7RF.js +0 -287
  541. package/dist/cli-bundle/chunks/upgrade-UYQKM7RF.js.map +0 -1
  542. package/dist/cli-bundle/chunks/validate-PA4FDTOV.js +0 -2143
  543. package/dist/cli-bundle/chunks/validate-PA4FDTOV.js.map +0 -7
  544. package/dist/cli-bundle/chunks/validate-Z7L75YEJ.js +0 -2105
  545. package/dist/cli-bundle/chunks/validate-Z7L75YEJ.js.map +0 -1
  546. /package/dist/cli-bundle/chunks/{activity-4XQIDNM5.js.map → append-F7WPGIQL.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{activity-YKAKZTZ4.js.map → append-PVCTBVJG.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-T3ABIMGW.js.map → chunk-2TILG6F2.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-RCT3YJOK.js.map → chunk-3TYOW6RR.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-3JZNEQBA.js.map → chunk-3X542TEY.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-YOF5VPKM.js.map → chunk-7VQ3JJN5.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-P5TFTLWW.js.map → chunk-AGAVEDIE.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-YFIE7YK6.js.map → chunk-AJUON7E6.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-7WYXBPYQ.js.map → chunk-DR2V5OIV.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-PDXT6Q55.js.map → chunk-EDO7VXSO.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-FUM6UMY4.js.map → chunk-EVEPHNXJ.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-RX3HQSYG.js.map → chunk-FN6SB4HU.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-DLQ4ZTCU.js.map → chunk-H2SMKL2N.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{chunk-C3PMDWGX.js.map → chunk-HX6QXV5P.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{chunk-N6DNM2FA.js.map → chunk-P3MJJW7P.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{chunk-5JE6SMYS.js.map → chunk-PDXJXEZJ.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{chunk-AAEQMOC6.js.map → chunk-TEKZOS7M.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{chunk-NER3KUUS.js.map → chunk-VLEA2UTQ.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{chunk-ZMD35NYG.js.map → chunk-WCWVEXGA.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{chunk-T35XLYZF.js.map → chunk-YPMZMKN7.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{chunk-R3ZBLGTC.js.map → chunk-YTD5GICJ.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{chunk-EEY54JMF.js.map → chunk-ZO7CLOY2.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{close-3YRR3XY6.js.map → close-3YYQ5OG2.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{close-OB2Y4QP5.js.map → close-Z3Q4U7TS.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{context-4OQGIPSO.js.map → close-many-3L2RXH3M.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{context-WLA6IAWE.js.map → close-many-D366FTIG.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{contracts-OJEXMKVW.js.map → comments-54XDJNFE.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{contracts-HXJLKCRI.js.map → comments-HGHC2PN6.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{create-XWWQFQ6S.js.map → copy-44RT5GDW.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{create-WKOZKPQR.js.map → copy-UGMUGHZA.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{extension-ZF6ZZPOU.js.map → create-4GWJWPXG.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{extension-NBAH62ML.js.map → create-AZXCUYKP.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{history-RYKLC72X.js.map → delete-Y6SXIQ4X.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{history-SGPYRAFT.js.map → delete-YQ2VPXNF.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{history-redact-54ICFKXM.js.map → deps-BU5EBJDU.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{history-redact-4H3FCKF3.js.map → deps-FMANWFRP.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{init-RPIPQUNV.js.map → docs-OQBSJNIA.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{init-SKQAESQS.js.map → docs-VNPBZXEL.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{list-64LHZ3HM.js.map → files-72HZEBOE.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{list-7LXBTEKI.js.map → files-HTSB2KJG.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{restore-YJ2ET6AT.js.map → focus-FOG4ALC2.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{restore-PXOFL6AM.js.map → focus-SUTMKXGX.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{schema-Y6DXXK2F.js.map → history-compact-M6IFAMBP.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{schema-2PUXCZ25.js.map → history-compact-NEXRPP2O.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{search-3S72CTD6.js.map → history-redact-NQX3OGZP.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{search-WNUNBQXO.js.map → history-redact-WQJBZ3PX.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{test-W7QBLVJS.js.map → history-repair-CBHMHAJO.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{test-DQ2QFJ7W.js.map → history-repair-NHOJG7WO.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{test-runs-ZRD4GCTT.js.map → learnings-M64NTSOR.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{test-runs-245OINZR.js.map → learnings-T63JGKKN.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{update-SJZ6S77U.js.map → notes-73WE2UV2.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{update-SFLZPJXX.js.map → notes-U7L6HQQ2.js.map} +0 -0
@@ -1,1615 +0,0 @@
1
- import {
2
- buildRemediationMap
3
- } from "./chunk-JINYH2DB.js";
4
- import {
5
- scanLockHealth
6
- } from "./chunk-QZ342C63.js";
7
- import {
8
- scanHistoryDrift
9
- } from "./chunk-S4APD35C.js";
10
- import "./chunk-D3UCE7RW.js";
11
- import {
12
- PM_TELEMETRY_SOURCE_CONTEXT_VALUES,
13
- TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS,
14
- TELEMETRY_SCHEMA_VERSION
15
- } from "./chunk-QHZO65XW.js";
16
- import {
17
- collectStaleVectorizationIds
18
- } from "./chunk-VPLDQMW2.js";
19
- import {
20
- buildVectorizationEmbeddingIdentity,
21
- hasVectorizationEmbeddingIdentityChanged,
22
- readVectorizationStatusLedger,
23
- refreshSemanticEmbeddingsForMutatedItems,
24
- resolveEmbeddingProviders,
25
- resolveProviderConfigSource,
26
- resolveSettingsWithSemanticRuntimeDefaults,
27
- resolveVectorStores
28
- } from "./chunk-LEKT4K7I.js";
29
- import {
30
- buildCapabilityContractMetadata,
31
- buildRegistrationCollisionRemediation,
32
- collectUnknownCapabilityGuidance,
33
- readManagedExtensionState
34
- } from "./chunk-GIWXVMZ3.js";
35
- import "./chunk-KDZ6K25I.js";
36
- import "./chunk-ZVDL32GJ.js";
37
- import "./chunk-E2FUG6GD.js";
38
- import "./chunk-5HIZDR5A.js";
39
- import "./chunk-R3ZBLGTC.js";
40
- import "./chunk-UI5BJ6DO.js";
41
- import "./chunk-C3PMDWGX.js";
42
- import "./chunk-4QQ6PM7M.js";
43
- import {
44
- collectRegisteredItemFieldNames,
45
- enforceHistoryStreamPolicyForItems,
46
- listAllFrontMatter,
47
- listAllFrontMatterWithBody
48
- } from "./chunk-3U3VEWK6.js";
49
- import "./chunk-Y76TWC45.js";
50
- import {
51
- effectiveItemFormatVersion,
52
- findFirstMergeConflictMarker,
53
- parseItemDocument,
54
- scanItemFormatVersions
55
- } from "./chunk-EZFKWSC7.js";
56
- import {
57
- nowIso
58
- } from "./chunk-DRBV5UC2.js";
59
- import {
60
- PmCliError,
61
- getActiveExtensionRegistrations,
62
- readSettingsWithMetadata,
63
- runActiveOnReadHooks
64
- } from "./chunk-P5YORJRH.js";
65
- import "./chunk-T35XLYZF.js";
66
- import "./chunk-7C2O74AE.js";
67
- import {
68
- EXIT_CODE,
69
- ITEM_FILE_EXTENSIONS,
70
- KNOWN_EXTENSION_CAPABILITIES,
71
- PM_CORE_REQUIRED_SUBDIRS,
72
- PM_OPTIONAL_TYPE_SUBDIRS,
73
- activateExtensions,
74
- getItemFormatFromPath,
75
- getSettingsPath,
76
- loadExtensions,
77
- pathExists,
78
- readFileIfExists,
79
- resolveGlobalPmRoot,
80
- resolveItemTypeRegistry,
81
- resolvePmRoot,
82
- toNonEmptyStringOrUndefined
83
- } from "./chunk-5VVUKE3U.js";
84
-
85
- // dist/cli/commands/health.js
86
- import fs from "node:fs/promises";
87
- import path from "node:path";
88
- !(function() {
89
- try {
90
- var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
91
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "d078e1a2-2f92-566c-8ecd-542b2730a9b6");
92
- } catch (e2) {
93
- }
94
- })();
95
- var PM_TELEMETRY_SOURCE_CONTEXT_SET = new Set(PM_TELEMETRY_SOURCE_CONTEXT_VALUES);
96
- var STALE_VECTORIZATION_SUMMARY_LIMIT = 25;
97
- var BRIEF_HEALTH_DETAIL_LIMIT = 8;
98
- var TELEMETRY_QUEUE_RELATIVE_PATH = path.join("runtime", "telemetry", "events.jsonl");
99
- var TELEMETRY_STATE_RELATIVE_PATH = path.join("runtime", "telemetry", "state.json");
100
- var TELEMETRY_ENDPOINT_PROBE_TIMEOUT_MS = 2500;
101
- var TELEMETRY_QUEUE_HIGH_WATER_MARK = 500;
102
- var TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD = TELEMETRY_MAX_QUEUE_ENTRY_ATTEMPTS - 3;
103
- var TELEMETRY_SERVER_MAX_SCHEMA_VERSION_HEADERS = [
104
- "x-pm-telemetry-max-schema-version",
105
- "x-pm-telemetry-max-version"
106
- ];
107
- function isAdvisoryHealthWarning(warning) {
108
- return warning.startsWith("telemetry_") || warning.startsWith("history_stream_over_compact_threshold:");
109
- }
110
- function warningCode(value) {
111
- const normalized = value.trim();
112
- const separator = normalized.indexOf(":");
113
- if (separator === -1) {
114
- return normalized;
115
- }
116
- return normalized.slice(0, separator);
117
- }
118
- function normalizeExtensionNameForMatch(value) {
119
- return value.trim().toLowerCase();
120
- }
121
- function isExpectedUnmanagedExtension(name, directory) {
122
- const normalizedName = normalizeExtensionNameForMatch(name);
123
- const normalizedDirectory = normalizeExtensionNameForMatch(directory);
124
- if (normalizedName.startsWith("builtin-")) {
125
- return true;
126
- }
127
- return normalizedDirectory === "beads" || normalizedDirectory === "todos";
128
- }
129
- async function isDirectory(targetPath) {
130
- try {
131
- const stats = await fs.stat(targetPath);
132
- return stats.isDirectory();
133
- } catch {
134
- return false;
135
- }
136
- }
137
- async function countHistoryStreams(pmRoot, compactPolicy) {
138
- const historyDir = path.join(pmRoot, "history");
139
- if (!await isDirectory(historyDir)) {
140
- return { count: 0, warnings: [], over_threshold: [], max_entries: null };
141
- }
142
- const historyFiles = (await fs.readdir(historyDir)).filter((entry) => entry.endsWith(".jsonl")).sort((left, right) => left.localeCompare(right));
143
- const policyActive = compactPolicy.enabled;
144
- const maxEntries = policyActive ? compactPolicy.max_entries : null;
145
- const warnings = [];
146
- const overThreshold = [];
147
- for (const fileName of historyFiles) {
148
- const streamPath = path.join(historyDir, fileName);
149
- warnings.push(...await runActiveOnReadHooks({ path: streamPath, scope: "project" }));
150
- if (!policyActive) {
151
- continue;
152
- }
153
- const raw = await fs.readFile(streamPath, "utf8");
154
- let entries = 0;
155
- for (const line of raw.split(/\r?\n/)) {
156
- if (line.trim().length > 0) {
157
- entries += 1;
158
- }
159
- }
160
- if (entries > compactPolicy.max_entries) {
161
- overThreshold.push(fileName.slice(0, -".jsonl".length));
162
- }
163
- }
164
- return {
165
- count: historyFiles.length,
166
- warnings: [...warnings, ...overThreshold.map((id) => `history_stream_over_compact_threshold:${id}`)],
167
- over_threshold: overThreshold,
168
- max_entries: maxEntries
169
- };
170
- }
171
- function normalizeRelativePath(pmRoot, targetPath) {
172
- return path.relative(pmRoot, targetPath).replaceAll("\\", "/");
173
- }
174
- async function listItemDocumentPaths(pmRoot, typeToFolder) {
175
- const folders = [...new Set(Object.values(typeToFolder))].sort((left, right) => left.localeCompare(right));
176
- const itemPaths = [];
177
- for (const folder of folders) {
178
- const directoryPath = path.join(pmRoot, folder);
179
- let entries = [];
180
- try {
181
- entries = await fs.readdir(directoryPath);
182
- } catch (error) {
183
- if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT") {
184
- continue;
185
- }
186
- continue;
187
- }
188
- for (const entry of entries) {
189
- if (!ITEM_FILE_EXTENSIONS.some((extension) => entry.toLowerCase().endsWith(extension))) {
190
- continue;
191
- }
192
- itemPaths.push(path.join(directoryPath, entry));
193
- }
194
- }
195
- itemPaths.sort((left, right) => normalizeRelativePath(pmRoot, left).localeCompare(normalizeRelativePath(pmRoot, right)));
196
- return itemPaths;
197
- }
198
- function shouldReportHistoryDirectoryUnreadable(error) {
199
- return !(typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT");
200
- }
201
- async function buildIntegrityCheck(pmRoot, typeToFolder, schema) {
202
- const itemPaths = await listItemDocumentPaths(pmRoot, typeToFolder);
203
- const itemUnreadable = [];
204
- const itemConflictMarkers = [];
205
- const itemParseFailures = [];
206
- const formatVersionEntries = [];
207
- const extensionFieldNames = collectRegisteredItemFieldNames(getActiveExtensionRegistrations());
208
- for (const itemPath of itemPaths) {
209
- const relativePath = normalizeRelativePath(pmRoot, itemPath);
210
- let raw = "";
211
- try {
212
- raw = await fs.readFile(itemPath, "utf8");
213
- } catch {
214
- itemUnreadable.push(relativePath);
215
- continue;
216
- }
217
- const conflictMarker = findFirstMergeConflictMarker(raw);
218
- if (conflictMarker) {
219
- itemConflictMarkers.push({
220
- path: relativePath,
221
- line: conflictMarker.line,
222
- marker: conflictMarker.marker
223
- });
224
- continue;
225
- }
226
- try {
227
- const parsed = parseItemDocument(raw, { format: getItemFormatFromPath(itemPath), schema, extensionFieldNames });
228
- formatVersionEntries.push({ ref: relativePath, version: effectiveItemFormatVersion(parsed.metadata) });
229
- } catch {
230
- itemParseFailures.push(relativePath);
231
- }
232
- }
233
- const formatVersionScan = scanItemFormatVersions(formatVersionEntries);
234
- const historyDir = path.join(pmRoot, "history");
235
- const historyUnreadable = [];
236
- const historyConflictMarkers = [];
237
- const historyInvalidJson = [];
238
- let historyFiles = [];
239
- try {
240
- historyFiles = (await fs.readdir(historyDir)).filter((entry) => entry.endsWith(".jsonl")).sort((left, right) => left.localeCompare(right));
241
- } catch (error) {
242
- if (shouldReportHistoryDirectoryUnreadable(error)) {
243
- historyUnreadable.push("history");
244
- }
245
- }
246
- for (const fileName of historyFiles) {
247
- const itemId = fileName.slice(0, -".jsonl".length);
248
- const historyPath = path.join(historyDir, fileName);
249
- let raw = "";
250
- try {
251
- raw = await fs.readFile(historyPath, "utf8");
252
- } catch {
253
- historyUnreadable.push(itemId);
254
- continue;
255
- }
256
- const conflictMarker = findFirstMergeConflictMarker(raw);
257
- if (conflictMarker) {
258
- historyConflictMarkers.push({
259
- id: itemId,
260
- line: conflictMarker.line,
261
- marker: conflictMarker.marker
262
- });
263
- continue;
264
- }
265
- const lines = raw.split(/\r?\n/);
266
- for (let index = 0; index < lines.length; index += 1) {
267
- const line = lines[index]?.trim();
268
- if (!line) {
269
- continue;
270
- }
271
- try {
272
- JSON.parse(line);
273
- } catch {
274
- historyInvalidJson.push({
275
- id: itemId,
276
- line: index + 1
277
- });
278
- }
279
- }
280
- }
281
- const warnings = [
282
- ...itemUnreadable.map((entry) => `integrity_item_unreadable:${entry}`),
283
- ...itemConflictMarkers.map((entry) => `integrity_item_conflict_marker:${entry.path}:L${entry.line}`),
284
- ...itemParseFailures.map((entry) => `integrity_item_parse_failed:${entry}`),
285
- ...historyUnreadable.map((entry) => `integrity_history_unreadable:${entry}`),
286
- ...historyConflictMarkers.map((entry) => `integrity_history_conflict_marker:${entry.id}:L${entry.line}`),
287
- ...historyInvalidJson.map((entry) => `integrity_history_invalid_json:${entry.id}:L${entry.line}`),
288
- /* c8 ignore start -- outdated-version items are unreachable until CURRENT_ITEM_FORMAT_VERSION advances past the baseline (an effective version below 1 cannot occur); the per-item mapping is covered in item-format-version.spec, and the ahead path below is covered by health-command.spec */
289
- ...formatVersionScan.outdated.map((entry) => `integrity_item_outdated_format_version:${entry}`),
290
- /* c8 ignore stop */
291
- ...formatVersionScan.ahead.map((entry) => `integrity_item_ahead_format_version:${entry}`)
292
- ];
293
- const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));
294
- return {
295
- check: {
296
- name: "integrity",
297
- status: normalizedWarnings.length === 0 ? "ok" : "warn",
298
- details: {
299
- checked_item_files: itemPaths.length,
300
- checked_history_streams: historyFiles.length,
301
- counts: {
302
- item_unreadable: itemUnreadable.length,
303
- item_conflict_markers: itemConflictMarkers.length,
304
- item_parse_failures: itemParseFailures.length,
305
- history_unreadable: historyUnreadable.length,
306
- history_conflict_markers: historyConflictMarkers.length,
307
- history_invalid_json: historyInvalidJson.length,
308
- item_outdated_format_version: formatVersionScan.outdated.length,
309
- item_ahead_format_version: formatVersionScan.ahead.length
310
- },
311
- item_unreadable: itemUnreadable,
312
- item_conflict_markers: itemConflictMarkers,
313
- item_parse_failures: itemParseFailures,
314
- item_outdated_format_version: formatVersionScan.outdated,
315
- item_ahead_format_version: formatVersionScan.ahead,
316
- history_unreadable: historyUnreadable,
317
- history_conflict_markers: historyConflictMarkers,
318
- history_invalid_json: historyInvalidJson
319
- }
320
- },
321
- warnings: normalizedWarnings
322
- };
323
- }
324
- function hasActivateExport(moduleRecord) {
325
- if (typeof moduleRecord.activate === "function") {
326
- return true;
327
- }
328
- const defaultExport = moduleRecord.default;
329
- if (typeof defaultExport !== "object" || defaultExport === null) {
330
- return false;
331
- }
332
- return typeof defaultExport.activate === "function";
333
- }
334
- function summarizeLoadedExtension(extension) {
335
- const summary = {
336
- layer: extension.layer,
337
- directory: extension.directory,
338
- manifest_path: extension.manifest_path,
339
- name: extension.name,
340
- version: extension.version,
341
- entry: extension.entry,
342
- priority: extension.priority,
343
- entry_path: extension.entry_path,
344
- has_activate: hasActivateExport(extension.module)
345
- };
346
- if (Array.isArray(extension.capabilities)) {
347
- summary.capabilities = [...extension.capabilities];
348
- }
349
- return summary;
350
- }
351
- function resolveMigrationId(definition, fallbackIndex) {
352
- const explicitId = toNonEmptyStringOrUndefined(definition.id);
353
- if (explicitId) {
354
- return explicitId;
355
- }
356
- return `migration-${String(fallbackIndex + 1).padStart(3, "0")}`;
357
- }
358
- function resolveMigrationStatus(definition) {
359
- const rawStatus = toNonEmptyStringOrUndefined(definition.status);
360
- const normalized = rawStatus?.toLowerCase();
361
- if (normalized === "failed") {
362
- return "failed";
363
- }
364
- if (normalized === "applied") {
365
- return "applied";
366
- }
367
- return "pending";
368
- }
369
- function resolveMigrationFailureReason(definition) {
370
- return toNonEmptyStringOrUndefined(definition.reason) ?? toNonEmptyStringOrUndefined(definition.error) ?? toNonEmptyStringOrUndefined(definition.message);
371
- }
372
- function compareMigrationEntries(left, right) {
373
- const byLayer = (left.layer ?? "").localeCompare(right.layer ?? "");
374
- if (byLayer !== 0) {
375
- return byLayer;
376
- }
377
- const byName = (left.name ?? "").localeCompare(right.name ?? "");
378
- if (byName !== 0) {
379
- return byName;
380
- }
381
- return (left.id ?? "").localeCompare(right.id ?? "");
382
- }
383
- function summarizeMigrationStatuses(migrations) {
384
- const applied = [];
385
- const pending = [];
386
- const failed = [];
387
- migrations.forEach((migration, index) => {
388
- const id = resolveMigrationId(migration.definition, index);
389
- const status = resolveMigrationStatus(migration.definition);
390
- if (status === "applied") {
391
- applied.push({
392
- layer: migration.layer,
393
- name: migration.name,
394
- id,
395
- status
396
- });
397
- return;
398
- }
399
- if (status === "failed") {
400
- failed.push({
401
- layer: migration.layer,
402
- name: migration.name,
403
- id,
404
- status,
405
- reason: resolveMigrationFailureReason(migration.definition)
406
- });
407
- return;
408
- }
409
- pending.push({
410
- layer: migration.layer,
411
- name: migration.name,
412
- id,
413
- status
414
- });
415
- });
416
- applied.sort(compareMigrationEntries);
417
- pending.sort(compareMigrationEntries);
418
- failed.sort(compareMigrationEntries);
419
- const warnings = [
420
- ...failed.map((entry) => `extension_migration_failed:${entry.layer}:${entry.name}:${entry.id}`),
421
- ...pending.map((entry) => `extension_migration_pending:${entry.layer}:${entry.name}:${entry.id}`)
422
- ];
423
- return {
424
- summary: {
425
- applied,
426
- pending,
427
- failed,
428
- applied_count: applied.length,
429
- pending_count: pending.length,
430
- failed_count: failed.length
431
- },
432
- warnings
433
- };
434
- }
435
- function buildExtensionHealthTriageSummary(warnings, loadFailureCount, activationFailureCount, migrationStatus, managedStateWarningCount, managedExtensionEntriesCount, unmanagedLoadedExtensions, unmanagedExpectedExtensions, unmanagedActionRequiredExtensions) {
436
- const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));
437
- const warningCodes = [...new Set(normalizedWarnings.map((value) => warningCode(value)))].sort((left, right) => left.localeCompare(right));
438
- const unknownCapabilityCount = normalizedWarnings.filter((warning) => warning.startsWith("extension_capability_unknown:")).length;
439
- const updateHealthPartial = unmanagedActionRequiredExtensions.length > 0;
440
- const updateHealthCoverage = updateHealthPartial ? "partial" : "full";
441
- const remediation = [];
442
- const registrationCollisionRemediation = buildRegistrationCollisionRemediation(normalizedWarnings, {
443
- deactivate: "pm extension --deactivate <name> --project/--global",
444
- doctor: "pm extension --doctor --project/--global --detail deep --trace"
445
- });
446
- if (registrationCollisionRemediation) {
447
- remediation.push(registrationCollisionRemediation);
448
- }
449
- if (loadFailureCount > 0) {
450
- remediation.push("Run pm extension --explore --project and pm extension --explore --global to inspect load failures.");
451
- }
452
- if (activationFailureCount > 0) {
453
- remediation.push("Review checks[name=extensions].details.activation.failed in pm health --json for activation error details.");
454
- }
455
- if (migrationStatus.failed_count > 0 || migrationStatus.pending_count > 0) {
456
- remediation.push("Resolve pending/failed extension migrations before write commands; use --force only when policy allows.");
457
- }
458
- if (managedStateWarningCount > 0) {
459
- remediation.push("Run pm extension --manage --project and pm extension --manage --global to refresh managed-state diagnostics.");
460
- }
461
- if (unknownCapabilityCount > 0) {
462
- remediation.push(`Unknown extension capabilities detected. Allowed capabilities: ${KNOWN_EXTENSION_CAPABILITIES.join(", ")}. Review extension_capability_unknown warning details for suggested replacements.`);
463
- }
464
- if (normalizedWarnings.some((warning) => warning.startsWith("extension_capability_legacy_alias:"))) {
465
- remediation.push("Legacy extension capability aliases were auto-remapped to canonical capabilities. Update manifests to canonical names (migration/validation -> schema).");
466
- }
467
- if (normalizedWarnings.some((warning) => warning.startsWith("extension_command_definition_legacy_handler_alias:"))) {
468
- remediation.push("Extension command definitions using legacy handler were auto-remapped. Update command definitions to use run: (context) => ... for forward compatibility.");
469
- }
470
- if (updateHealthPartial) {
471
- remediation.push("Update-check coverage is partial because unmanaged extensions need adoption. Adopt existing installs via pm extension --manage --project/--global --fix-managed-state, pm extension --adopt-all --project/--global, or pm extension --adopt <name>.");
472
- } else if (unmanagedLoadedExtensions.length > 0) {
473
- remediation.push("Loaded unmanaged extensions are currently treated as informational. Use pm extension --manage --project/--global --fix-managed-state to adopt them for update checks.");
474
- }
475
- if (remediation.length === 0) {
476
- remediation.push("No immediate action required. Re-run pm health after extension configuration changes.");
477
- }
478
- return {
479
- status: normalizedWarnings.length === 0 ? "ok" : "warn",
480
- warning_count: normalizedWarnings.length,
481
- warning_codes: warningCodes,
482
- load_failure_count: loadFailureCount,
483
- activation_failure_count: activationFailureCount,
484
- migration_failed_count: migrationStatus.failed_count,
485
- migration_pending_count: migrationStatus.pending_count,
486
- managed_state_warning_count: managedStateWarningCount,
487
- managed_extension_entries_count: managedExtensionEntriesCount,
488
- unmanaged_loaded_extension_count: unmanagedLoadedExtensions.length,
489
- unmanaged_loaded_extensions: unmanagedLoadedExtensions,
490
- unmanaged_expected_extension_count: unmanagedExpectedExtensions.length,
491
- unmanaged_expected_extensions: unmanagedExpectedExtensions,
492
- unmanaged_action_required_extension_count: unmanagedActionRequiredExtensions.length,
493
- unmanaged_action_required_extensions: unmanagedActionRequiredExtensions,
494
- update_health_coverage: updateHealthCoverage,
495
- update_health_partial: updateHealthPartial,
496
- unknown_capability_count: unknownCapabilityCount,
497
- top_warnings: normalizedWarnings.slice(0, 8),
498
- remediation
499
- };
500
- }
501
- async function buildExtensionCheck(pmRoot, settings, noExtensionsFlag) {
502
- const loadResult = await loadExtensions({
503
- pmRoot,
504
- settings,
505
- cwd: process.cwd(),
506
- noExtensions: noExtensionsFlag
507
- });
508
- const loadedSummaries = loadResult.loaded.map((extension) => summarizeLoadedExtension(extension));
509
- const activationResult = await activateExtensions({
510
- ...loadResult,
511
- loaded: loadResult.loaded
512
- });
513
- const [projectManagedState, globalManagedState] = await Promise.all([
514
- readManagedExtensionState(loadResult.roots.project),
515
- readManagedExtensionState(loadResult.roots.global)
516
- ]);
517
- const migrationStatus = summarizeMigrationStatuses(activationResult.registrations.migrations);
518
- const activationDetails = {
519
- failed: activationResult.failed,
520
- warnings: activationResult.warnings,
521
- hook_counts: activationResult.hook_counts,
522
- command_override_count: activationResult.command_override_count,
523
- command_handler_count: activationResult.command_handler_count,
524
- parser_override_count: activationResult.parser_override_count,
525
- preflight_override_count: activationResult.preflight_override_count,
526
- service_override_count: activationResult.service_override_count,
527
- renderer_override_count: activationResult.renderer_override_count,
528
- registration_counts: activationResult.registration_counts,
529
- registrations: activationResult.registrations,
530
- migration_status: migrationStatus.summary,
531
- managed_extensions: {
532
- project: {
533
- path: projectManagedState.path,
534
- count: projectManagedState.state.entries.length,
535
- entries: projectManagedState.state.entries
536
- },
537
- global: {
538
- path: globalManagedState.path,
539
- count: globalManagedState.state.entries.length,
540
- entries: globalManagedState.state.entries
541
- }
542
- }
543
- };
544
- const managedProjectNames = new Set(projectManagedState.state.entries.map((entry) => normalizeExtensionNameForMatch(entry.name)));
545
- const managedGlobalNames = new Set(globalManagedState.state.entries.map((entry) => normalizeExtensionNameForMatch(entry.name)));
546
- const unmanagedLoadedEntries = [
547
- ...new Map(loadResult.loaded.filter((entry) => {
548
- const managedNames = entry.layer === "project" ? managedProjectNames : managedGlobalNames;
549
- return !managedNames.has(normalizeExtensionNameForMatch(entry.name));
550
- }).map((entry) => [
551
- `${entry.layer}:${entry.name}`,
552
- {
553
- layer: entry.layer,
554
- name: entry.name,
555
- directory: entry.directory
556
- }
557
- ])).values()
558
- ].sort((left, right) => {
559
- const leftKey = `${left.layer}:${left.name}`;
560
- const rightKey = `${right.layer}:${right.name}`;
561
- return leftKey.localeCompare(rightKey);
562
- });
563
- const unmanagedLoadedExtensions = unmanagedLoadedEntries.map((entry) => `${entry.layer}:${entry.name}`).sort((left, right) => left.localeCompare(right));
564
- const unmanagedExpectedExtensions = unmanagedLoadedEntries.filter((entry) => isExpectedUnmanagedExtension(entry.name, entry.directory)).map((entry) => `${entry.layer}:${entry.name}`).sort((left, right) => left.localeCompare(right));
565
- const unmanagedActionRequiredExtensions = unmanagedLoadedEntries.filter((entry) => !isExpectedUnmanagedExtension(entry.name, entry.directory)).map((entry) => `${entry.layer}:${entry.name}`).sort((left, right) => left.localeCompare(right));
566
- const updateCoverageWarnings = unmanagedActionRequiredExtensions.length > 0 ? [`extension_update_health_partial_coverage:skipped_unmanaged:${unmanagedActionRequiredExtensions.length}`] : [];
567
- const extensionWarnings = [
568
- ...loadResult.warnings,
569
- ...activationDetails.warnings,
570
- ...migrationStatus.warnings,
571
- ...projectManagedState.warnings,
572
- ...globalManagedState.warnings,
573
- ...updateCoverageWarnings
574
- ];
575
- const capabilityGuidance = collectUnknownCapabilityGuidance(extensionWarnings);
576
- const capabilityContract = buildCapabilityContractMetadata();
577
- const extensionTriage = buildExtensionHealthTriageSummary(extensionWarnings, loadResult.failed.length, activationResult.failed.length, migrationStatus.summary, projectManagedState.warnings.length + globalManagedState.warnings.length, projectManagedState.state.entries.length + globalManagedState.state.entries.length, unmanagedLoadedExtensions, unmanagedExpectedExtensions, unmanagedActionRequiredExtensions);
578
- return {
579
- check: {
580
- name: "extensions",
581
- status: extensionWarnings.length === 0 ? "ok" : "warn",
582
- details: {
583
- ...loadResult,
584
- loaded: loadedSummaries,
585
- warnings: extensionWarnings,
586
- activation: activationDetails,
587
- triage: extensionTriage,
588
- capability_contract: capabilityContract,
589
- capability_guidance: capabilityGuidance
590
- }
591
- },
592
- warnings: extensionWarnings
593
- };
594
- }
595
- function summarizeList(values, limit) {
596
- if (values.length <= limit) {
597
- return { values, truncated: false };
598
- }
599
- return {
600
- values: values.slice(0, limit),
601
- truncated: true
602
- };
603
- }
604
- function summarizeRecordList(value, limit) {
605
- if (!Array.isArray(value)) {
606
- return {
607
- count: 0,
608
- sample: [],
609
- truncated: false
610
- };
611
- }
612
- return {
613
- count: value.length,
614
- sample: value.slice(0, limit),
615
- truncated: value.length > limit
616
- };
617
- }
618
- function summarizeExtensionRecord(value) {
619
- if (typeof value !== "object" || value === null || Array.isArray(value)) {
620
- return {};
621
- }
622
- const record = value;
623
- return {
624
- layer: record.layer,
625
- directory: record.directory,
626
- name: record.name,
627
- version: record.version,
628
- enabled: record.enabled,
629
- status: record.status,
630
- has_activate: record.has_activate,
631
- capabilities: record.capabilities
632
- };
633
- }
634
- function summarizeExtensionList(value, limit) {
635
- const summary = summarizeRecordList(value, limit);
636
- return {
637
- ...summary,
638
- sample: summary.sample.map((entry) => summarizeExtensionRecord(entry))
639
- };
640
- }
641
- function summarizeStringList(value, limit) {
642
- if (!Array.isArray(value)) {
643
- return {
644
- count: 0,
645
- sample: [],
646
- truncated: false
647
- };
648
- }
649
- const strings = value.filter((entry) => typeof entry === "string");
650
- return {
651
- count: strings.length,
652
- sample: strings.slice(0, limit),
653
- truncated: strings.length > limit
654
- };
655
- }
656
- function summarizeActivationMigrationStatus(value) {
657
- if (typeof value !== "object" || value === null) {
658
- return null;
659
- }
660
- const status = value;
661
- return {
662
- applied_count: status.applied_count,
663
- pending_count: status.pending_count,
664
- failed_count: status.failed_count
665
- };
666
- }
667
- var HEALTH_DETAIL_SUMMARIZERS = {
668
- settings: (details, limit) => ({
669
- version: details.version,
670
- id_prefix: details.id_prefix,
671
- locks_ttl_seconds: details.locks_ttl_seconds,
672
- warnings: summarizeStringList(details.warnings, limit)
673
- }),
674
- directories: (details, limit) => ({
675
- required_count: Array.isArray(details.required) ? details.required.length : 0,
676
- optional_count: Array.isArray(details.optional) ? details.optional.length : 0,
677
- missing_required: summarizeStringList(details.missing_required, limit),
678
- missing_optional: summarizeStringList(details.missing_optional, limit),
679
- missing: summarizeStringList(details.missing, limit),
680
- strict_directories: details.strict_directories
681
- }),
682
- settings_values: (details, limit) => ({
683
- warnings: summarizeStringList(details.warnings, limit)
684
- }),
685
- telemetry: (details) => ({
686
- enabled: details.enabled,
687
- capture_level: details.capture_level,
688
- endpoint: details.endpoint,
689
- queue_exists: details.queue_exists,
690
- queue_entries: details.queue_entries,
691
- queue_draining: details.queue_draining,
692
- queue_invalid_rows: details.queue_invalid_rows,
693
- queue_rows_total: details.queue_rows_total,
694
- last_successful_flush_at: details.last_successful_flush_at,
695
- last_failed_flush_at: details.last_failed_flush_at,
696
- endpoint_probe: details.endpoint_probe,
697
- env_overrides: details.env_overrides
698
- }),
699
- extensions: (details, limit) => {
700
- const activation = typeof details.activation === "object" && details.activation !== null ? details.activation : {};
701
- return {
702
- disabled_by_flag: details.disabled_by_flag,
703
- discovered: summarizeExtensionList(details.discovered, limit),
704
- effective: summarizeExtensionList(details.effective, limit),
705
- loaded: summarizeExtensionList(details.loaded, limit),
706
- failed: summarizeRecordList(details.failed, limit),
707
- warnings: summarizeStringList(details.warnings, limit),
708
- activation: {
709
- failed: summarizeRecordList(activation.failed, limit),
710
- warnings: summarizeStringList(activation.warnings, limit),
711
- hook_counts: activation.hook_counts,
712
- command_handler_count: activation.command_handler_count,
713
- service_override_count: activation.service_override_count,
714
- renderer_override_count: activation.renderer_override_count,
715
- registration_counts: activation.registration_counts,
716
- migration_status: summarizeActivationMigrationStatus(activation.migration_status)
717
- },
718
- triage: details.triage,
719
- capability_contract: details.capability_contract,
720
- capability_guidance: summarizeRecordList(details.capability_guidance, limit)
721
- };
722
- },
723
- // Storage details are already compact counters; keep the pre-refactor pass-through shape.
724
- storage: (details) => details,
725
- locks: (details) => ({
726
- active_lock_count: details.active_lock_count,
727
- stale_lock_count: details.stale_lock_count,
728
- unreadable_lock_count: details.unreadable_lock_count,
729
- unparseable_lock_count: details.unparseable_lock_count
730
- }),
731
- integrity: (details, limit) => ({
732
- checked_item_files: details.checked_item_files,
733
- checked_history_streams: details.checked_history_streams,
734
- counts: details.counts,
735
- item_unreadable: summarizeStringList(details.item_unreadable, limit),
736
- item_conflict_markers: summarizeRecordList(details.item_conflict_markers, limit),
737
- item_parse_failures: summarizeStringList(details.item_parse_failures, limit),
738
- history_unreadable: summarizeStringList(details.history_unreadable, limit),
739
- history_conflict_markers: summarizeRecordList(details.history_conflict_markers, limit),
740
- history_invalid_json: summarizeRecordList(details.history_invalid_json, limit),
741
- skipped: details.skipped
742
- }),
743
- history_drift: (details, limit) => ({
744
- checked_items: details.checked_items,
745
- counts: details.counts,
746
- drifted_items: summarizeStringList(details.drifted_items, limit),
747
- missing_streams: summarizeStringList(details.missing_streams, limit),
748
- unreadable_streams: summarizeStringList(details.unreadable_streams, limit),
749
- hash_mismatches: summarizeStringList(details.hash_mismatches, limit),
750
- chain_mismatches: summarizeStringList(details.chain_mismatches, limit),
751
- skipped: details.skipped
752
- }),
753
- vectorization: (details, limit) => ({
754
- semantic_runtime_available: details.semantic_runtime_available,
755
- compatibility_mode_auto_defaults: details.compatibility_mode_auto_defaults,
756
- auto_ollama_defaults_applied: details.auto_ollama_defaults_applied,
757
- refresh_policy: details.refresh_policy,
758
- provider_active: details.provider_active,
759
- vector_store_active: details.vector_store_active,
760
- items: details.items,
761
- ledger_entries_before: details.ledger_entries_before,
762
- stale_items_before_total: details.stale_items_before_total,
763
- stale_items_before: summarizeStringList(details.stale_items_before, limit),
764
- refresh_attempted: details.refresh_attempted,
765
- refresh_skipped_reason: details.refresh_skipped_reason,
766
- refresh_result: details.refresh_result,
767
- ledger_entries_after: details.ledger_entries_after,
768
- stale_items_after_total: details.stale_items_after_total,
769
- stale_items_after: summarizeStringList(details.stale_items_after, limit),
770
- skipped: details.skipped
771
- })
772
- };
773
- function summarizeHealthCheckDetails(check, limit) {
774
- const summarize = HEALTH_DETAIL_SUMMARIZERS[check.name];
775
- return summarize ? summarize(check.details, limit) : check.details;
776
- }
777
- function applyBriefHealthProjection(result) {
778
- const warningsSummary = summarizeStringList(result.warnings, BRIEF_HEALTH_DETAIL_LIMIT);
779
- return {
780
- ok: result.ok,
781
- checks: result.checks.map((check) => ({
782
- name: check.name,
783
- status: check.status,
784
- details: summarizeHealthCheckDetails(check, BRIEF_HEALTH_DETAIL_LIMIT)
785
- })),
786
- warnings: warningsSummary.sample,
787
- projection: {
788
- mode: "brief",
789
- warning_count: warningsSummary.count,
790
- warnings_truncated: warningsSummary.truncated,
791
- detail_limit: BRIEF_HEALTH_DETAIL_LIMIT
792
- },
793
- generated_at: result.generated_at
794
- };
795
- }
796
- function isSkippedHealthCheck(check) {
797
- return check.details.skipped === true;
798
- }
799
- function applySummaryHealthProjection(result) {
800
- const warningsSummary = summarizeStringList(result.warnings, BRIEF_HEALTH_DETAIL_LIMIT);
801
- const omittedChecks = result.checks.filter(isSkippedHealthCheck).map((check) => check.name);
802
- return {
803
- ok: result.ok,
804
- checks: result.checks.filter((check) => !isSkippedHealthCheck(check)).map((check) => ({
805
- name: check.name,
806
- status: check.status,
807
- details: {}
808
- })),
809
- warning_count: warningsSummary.count,
810
- warnings: warningsSummary.sample,
811
- projection: {
812
- mode: "summary",
813
- warning_count: warningsSummary.count,
814
- warnings_truncated: warningsSummary.truncated,
815
- detail_limit: BRIEF_HEALTH_DETAIL_LIMIT,
816
- omitted_checks: omittedChecks
817
- },
818
- generated_at: result.generated_at
819
- };
820
- }
821
- function selectStaleItemDetail(values, verboseStaleItems) {
822
- if (verboseStaleItems) {
823
- return {
824
- values,
825
- truncated: false,
826
- total: values.length
827
- };
828
- }
829
- const summary = summarizeList(values, STALE_VECTORIZATION_SUMMARY_LIMIT);
830
- return {
831
- values: summary.values,
832
- truncated: summary.truncated,
833
- total: values.length
834
- };
835
- }
836
- function telemetryEnvFlagEnabled(envKey) {
837
- const value = (process.env[envKey] ?? "").trim().toLowerCase();
838
- return value === "1" || value === "true" || value === "yes" || value === "on";
839
- }
840
- function telemetrySourceContextOverride() {
841
- const value = (process.env.PM_TELEMETRY_SOURCE_CONTEXT ?? "").trim().toLowerCase();
842
- return PM_TELEMETRY_SOURCE_CONTEXT_SET.has(value) ? value : null;
843
- }
844
- function normalizeEndpointForDisplay(rawEndpoint) {
845
- const trimmed = rawEndpoint.trim();
846
- if (trimmed.length === 0) {
847
- return "";
848
- }
849
- try {
850
- const parsed = new URL(trimmed);
851
- parsed.username = "";
852
- parsed.password = "";
853
- parsed.search = "";
854
- parsed.hash = "";
855
- return parsed.toString();
856
- } catch {
857
- return trimmed;
858
- }
859
- }
860
- function parseTelemetryQueue(raw) {
861
- let validEntries = 0;
862
- let invalidRows = 0;
863
- let totalRows = 0;
864
- let highRetryEntries = 0;
865
- let maxAttempts = 0;
866
- for (const line of raw.split("\n")) {
867
- const trimmed = line.trim();
868
- if (trimmed.length === 0) {
869
- continue;
870
- }
871
- totalRows += 1;
872
- try {
873
- const parsed = JSON.parse(trimmed);
874
- if (typeof parsed === "object" && parsed !== null && typeof parsed.attempts === "number" && Number.isFinite(parsed.attempts)) {
875
- const attempts = Math.max(0, Math.trunc(parsed.attempts));
876
- validEntries += 1;
877
- maxAttempts = Math.max(maxAttempts, attempts);
878
- if (attempts >= TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD) {
879
- highRetryEntries += 1;
880
- }
881
- } else {
882
- invalidRows += 1;
883
- }
884
- } catch {
885
- invalidRows += 1;
886
- }
887
- }
888
- return {
889
- validEntries,
890
- invalidRows,
891
- totalRows,
892
- highRetryEntries,
893
- maxAttempts
894
- };
895
- }
896
- function emptyTelemetryQueueSummary() {
897
- return { validEntries: 0, invalidRows: 0, totalRows: 0, highRetryEntries: 0, maxAttempts: 0 };
898
- }
899
- function parseTelemetryRuntimeState(stateRaw) {
900
- if (!stateRaw || stateRaw.trim().length === 0) {
901
- return { runtimeState: {}, stateParseFailed: false };
902
- }
903
- try {
904
- const parsed = JSON.parse(stateRaw);
905
- if (typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)) {
906
- return { runtimeState: parsed, stateParseFailed: false };
907
- }
908
- return { runtimeState: {}, stateParseFailed: true };
909
- } catch {
910
- return { runtimeState: {}, stateParseFailed: true };
911
- }
912
- }
913
- async function maybeProbeTelemetryEndpoint(settings, checkTelemetry) {
914
- const endpoint = settings.telemetry.endpoint.trim();
915
- if (!checkTelemetry || !settings.telemetry.enabled || endpoint.length === 0) {
916
- return void 0;
917
- }
918
- const probe = await probeTelemetryEndpointHealth(endpoint);
919
- return {
920
- attempted: true,
921
- ...probe
922
- };
923
- }
924
- function collectTelemetryQueueWarnings(settings, queueSummary, runtimeState) {
925
- const warnings = [];
926
- if (queueSummary.invalidRows > 0) {
927
- warnings.push(`telemetry_queue_invalid_rows:${queueSummary.invalidRows}`);
928
- }
929
- if (!settings.telemetry.enabled || queueSummary.validEntries === 0) {
930
- return warnings;
931
- }
932
- const lastSuccess = runtimeState.last_successful_flush_at;
933
- const lastFailure = runtimeState.last_failed_flush_at;
934
- const activeFailure = lastFailure && (!lastSuccess || lastFailure > lastSuccess);
935
- const neverFlushed = !lastSuccess;
936
- const highWater = queueSummary.validEntries >= TELEMETRY_QUEUE_HIGH_WATER_MARK;
937
- if (activeFailure || neverFlushed || highWater) {
938
- warnings.push(`telemetry_queue_pending:${queueSummary.validEntries}`);
939
- }
940
- if (queueSummary.highRetryEntries > 0) {
941
- warnings.push(`telemetry_queue_high_retries:${queueSummary.highRetryEntries}`);
942
- }
943
- return warnings;
944
- }
945
- function collectTelemetryEndpointWarnings(endpointProbe) {
946
- if (!endpointProbe || endpointProbe.ok !== false) {
947
- return [];
948
- }
949
- return typeof endpointProbe.status === "number" ? [`telemetry_endpoint_probe_http_status:${endpointProbe.status}`] : ["telemetry_endpoint_probe_failed"];
950
- }
951
- function collectTelemetrySchemaWarnings(endpointProbe) {
952
- const parsedMaxSchemaVersion = Number.parseInt(endpointProbe?.max_schema_version ?? "", 10);
953
- if (endpointProbe?.ok === true && Number.isInteger(parsedMaxSchemaVersion) && parsedMaxSchemaVersion > TELEMETRY_SCHEMA_VERSION) {
954
- return [`telemetry_schema_version_behind:${parsedMaxSchemaVersion}`];
955
- }
956
- return [];
957
- }
958
- function collectTelemetryOtelWarnings(settings, runtimeState) {
959
- const pendingOtelSpans = typeof runtimeState.pending_otel_spans === "number" ? runtimeState.pending_otel_spans : 0;
960
- const lastOtelSuccess = runtimeState.last_otel_success_at;
961
- const lastOtelFailure = runtimeState.last_otel_failure_at;
962
- const otelExportFailing = settings.telemetry.enabled && pendingOtelSpans > 0 && Boolean(lastOtelFailure) && // >= so a mixed-outcome batch (success + failure share the same attempt
963
- // timestamp) still surfaces the warning rather than being masked by the tie.
964
- (!lastOtelSuccess || lastOtelFailure >= lastOtelSuccess);
965
- return otelExportFailing ? [`telemetry_otel_export_failing:${pendingOtelSpans}`] : [];
966
- }
967
- function buildTelemetryEnvOverrideDetails() {
968
- return {
969
- telemetry_disabled: telemetryEnvFlagEnabled("PM_TELEMETRY_DISABLED") || telemetryEnvFlagEnabled("PM_NO_TELEMETRY"),
970
- pm_no_telemetry: telemetryEnvFlagEnabled("PM_NO_TELEMETRY"),
971
- telemetry_otel_disabled: telemetryEnvFlagEnabled("PM_TELEMETRY_OTEL_DISABLED"),
972
- telemetry_inline_flush: telemetryEnvFlagEnabled("PM_TELEMETRY_INLINE_FLUSH"),
973
- telemetry_source_context: telemetrySourceContextOverride()
974
- };
975
- }
976
- function telemetryQueueHasEntries(settings, queueSummary) {
977
- return settings.telemetry.enabled && queueSummary.validEntries > 0;
978
- }
979
- function isTelemetryQueueDraining(queueHasEntries, warnings) {
980
- return queueHasEntries && warnings.every((warning) => !warning.startsWith("telemetry_queue_pending:") && !warning.startsWith("telemetry_queue_high_retries:"));
981
- }
982
- async function probeTelemetryEndpointHealth(endpoint) {
983
- let probeUrl = endpoint;
984
- try {
985
- const parsed = new URL(endpoint);
986
- parsed.pathname = "/healthz";
987
- parsed.search = "";
988
- parsed.hash = "";
989
- probeUrl = parsed.toString();
990
- } catch {
991
- }
992
- try {
993
- const response = await fetch(probeUrl, {
994
- method: "GET",
995
- signal: AbortSignal.timeout(TELEMETRY_ENDPOINT_PROBE_TIMEOUT_MS)
996
- });
997
- return {
998
- probe_url: normalizeEndpointForDisplay(probeUrl),
999
- ok: response.ok,
1000
- status: response.status,
1001
- max_schema_version: (() => {
1002
- for (const headerName of TELEMETRY_SERVER_MAX_SCHEMA_VERSION_HEADERS) {
1003
- const value = response.headers.get(headerName)?.trim();
1004
- if (value && value.length > 0) {
1005
- return value;
1006
- }
1007
- }
1008
- return void 0;
1009
- })()
1010
- };
1011
- } catch (error) {
1012
- return {
1013
- probe_url: normalizeEndpointForDisplay(probeUrl),
1014
- ok: false,
1015
- /* c8 ignore next -- non-Error throwables require transport-layer fault injection */
1016
- error: error instanceof Error ? error.message : "probe_failed"
1017
- };
1018
- }
1019
- }
1020
- async function buildTelemetryCheck(settings, options) {
1021
- const globalPmRoot = resolveGlobalPmRoot(process.cwd());
1022
- const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);
1023
- const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);
1024
- const queueRaw = await readFileIfExists(queuePath);
1025
- const queueExists = queueRaw !== null;
1026
- const queueSizeBytes = queueRaw ? Buffer.byteLength(queueRaw, "utf8") : 0;
1027
- const queueSummary = queueRaw ? parseTelemetryQueue(queueRaw) : emptyTelemetryQueueSummary();
1028
- const stateRaw = await readFileIfExists(statePath);
1029
- const { runtimeState, stateParseFailed } = parseTelemetryRuntimeState(stateRaw);
1030
- const endpoint = settings.telemetry.endpoint.trim();
1031
- const endpointDisplay = normalizeEndpointForDisplay(endpoint);
1032
- const endpointProbe = await maybeProbeTelemetryEndpoint(settings, options.checkTelemetry);
1033
- const warnings = [];
1034
- if (stateParseFailed) {
1035
- warnings.push("telemetry_state_invalid_json");
1036
- }
1037
- warnings.push(...collectTelemetryQueueWarnings(settings, queueSummary, runtimeState), ...collectTelemetryEndpointWarnings(endpointProbe), ...collectTelemetrySchemaWarnings(endpointProbe), ...collectTelemetryOtelWarnings(settings, runtimeState));
1038
- const queueHasEntries = telemetryQueueHasEntries(settings, queueSummary);
1039
- const pendingOtelSpans = typeof runtimeState.pending_otel_spans === "number" ? runtimeState.pending_otel_spans : 0;
1040
- return {
1041
- check: {
1042
- name: "telemetry",
1043
- status: warnings.length === 0 ? "ok" : "warn",
1044
- details: {
1045
- enabled: settings.telemetry.enabled,
1046
- capture_level: settings.telemetry.capture_level,
1047
- endpoint: endpointDisplay,
1048
- global_pm_root: globalPmRoot,
1049
- queue_path: queuePath,
1050
- queue_exists: queueExists,
1051
- queue_entries: queueSummary.validEntries,
1052
- queue_draining: isTelemetryQueueDraining(queueHasEntries, warnings),
1053
- queue_invalid_rows: queueSummary.invalidRows,
1054
- queue_rows_total: queueSummary.totalRows,
1055
- queue_size_bytes: queueSizeBytes,
1056
- queue_high_retry_entries: queueSummary.highRetryEntries,
1057
- queue_high_retry_threshold: TELEMETRY_QUEUE_HIGH_RETRY_THRESHOLD,
1058
- queue_max_attempts: queueSummary.maxAttempts,
1059
- runtime_state_path: statePath,
1060
- last_attempted_flush_at: runtimeState.last_attempted_flush_at ?? null,
1061
- last_successful_flush_at: runtimeState.last_successful_flush_at ?? null,
1062
- last_failed_flush_at: runtimeState.last_failed_flush_at ?? null,
1063
- last_failed_flush_error: runtimeState.last_failed_flush_error ?? null,
1064
- pending_otel_spans: pendingOtelSpans,
1065
- last_otel_attempt_at: runtimeState.last_otel_attempt_at ?? null,
1066
- last_otel_success_at: runtimeState.last_otel_success_at ?? null,
1067
- last_otel_failure_at: runtimeState.last_otel_failure_at ?? null,
1068
- last_otel_failure_error: runtimeState.last_otel_failure_error ?? null,
1069
- endpoint_probe: endpointProbe ?? { attempted: false },
1070
- env_overrides: buildTelemetryEnvOverrideDetails()
1071
- }
1072
- },
1073
- warnings
1074
- };
1075
- }
1076
- async function buildLocksCheck(pmRoot) {
1077
- let scan;
1078
- try {
1079
- scan = await scanLockHealth(pmRoot);
1080
- } catch (error) {
1081
- const message = error instanceof Error ? error.message : String(error);
1082
- return {
1083
- check: {
1084
- name: "locks",
1085
- status: "warn",
1086
- details: {
1087
- active_lock_count: 0,
1088
- stale_lock_count: 0,
1089
- unreadable_lock_count: 0,
1090
- unparseable_lock_count: 0,
1091
- scan_failed: true,
1092
- error: message,
1093
- pm_root: pmRoot
1094
- }
1095
- },
1096
- warnings: [`locks_scan_failed:${message}`]
1097
- };
1098
- }
1099
- const warnings = [];
1100
- if (scan.stale_lock_count > 0) {
1101
- warnings.push(`locks_stale_count:${scan.stale_lock_count}`);
1102
- }
1103
- if (scan.unreadable_lock_count > 0) {
1104
- warnings.push(`locks_unreadable:${scan.unreadable_lock_count}`);
1105
- }
1106
- return {
1107
- check: {
1108
- name: "locks",
1109
- status: warnings.length === 0 ? "ok" : "warn",
1110
- details: {
1111
- active_lock_count: scan.active_lock_count,
1112
- stale_lock_count: scan.stale_lock_count,
1113
- unreadable_lock_count: scan.unreadable_lock_count,
1114
- unparseable_lock_count: scan.unparseable_lock_count
1115
- }
1116
- },
1117
- warnings
1118
- };
1119
- }
1120
- async function buildHistoryDriftCheck(pmRoot, items) {
1121
- const cacheHitVerification = "metadata";
1122
- const { missingStreams, unreadableStreams, hashMismatches, chainMismatches, driftedItems } = await scanHistoryDrift(pmRoot, items, { cacheHitVerification });
1123
- const warnings = [
1124
- ...missingStreams.map((id) => `history_drift_missing_stream:${id}`),
1125
- ...unreadableStreams.map((id) => `history_drift_unreadable_stream:${id}`),
1126
- ...hashMismatches.map((id) => `history_drift_hash_mismatch:${id}`),
1127
- ...chainMismatches.map((id) => `history_drift_chain_mismatch:${id}`)
1128
- ];
1129
- return {
1130
- check: {
1131
- name: "history_drift",
1132
- status: warnings.length === 0 ? "ok" : "warn",
1133
- details: {
1134
- checked_items: items.length,
1135
- cache_hit_verification: cacheHitVerification,
1136
- drifted_items: driftedItems,
1137
- counts: {
1138
- drifted: driftedItems.length,
1139
- missing_streams: missingStreams.length,
1140
- unreadable_streams: unreadableStreams.length,
1141
- hash_mismatches: hashMismatches.length,
1142
- chain_mismatches: chainMismatches.length
1143
- },
1144
- missing_streams: missingStreams,
1145
- unreadable_streams: unreadableStreams,
1146
- hash_mismatches: hashMismatches,
1147
- chain_mismatches: chainMismatches
1148
- }
1149
- },
1150
- warnings
1151
- };
1152
- }
1153
- function buildVectorizationRuntimeSnapshot(settings) {
1154
- const runtimeDefaults = resolveSettingsWithSemanticRuntimeDefaults(settings);
1155
- const providerResolution = resolveEmbeddingProviders(runtimeDefaults.settings);
1156
- const vectorStoreResolution = resolveVectorStores(runtimeDefaults.settings);
1157
- const runtimeEmbeddingIdentity = providerResolution.active ? buildVectorizationEmbeddingIdentity(providerResolution.active.name, providerResolution.active.model) : null;
1158
- return {
1159
- runtimeDefaults,
1160
- providerResolution,
1161
- vectorStoreResolution,
1162
- runtimeEmbeddingIdentity,
1163
- semanticRuntimeAvailable: Boolean(providerResolution.active && vectorStoreResolution.active)
1164
- };
1165
- }
1166
- function emptyVectorizationRefreshResult() {
1167
- return {
1168
- refreshed: [],
1169
- skipped: [],
1170
- warnings: []
1171
- };
1172
- }
1173
- async function refreshStaleVectorizationItems(params) {
1174
- if (!params.refreshPolicy.enabled || !params.snapshot.semanticRuntimeAvailable || params.staleBefore.length === 0) {
1175
- return emptyVectorizationRefreshResult();
1176
- }
1177
- return refreshSemanticEmbeddingsForMutatedItems(params.pmRoot, params.staleBefore, {
1178
- settings: params.snapshot.runtimeDefaults.settings,
1179
- apply_runtime_defaults: false
1180
- });
1181
- }
1182
- function vectorizationEmbeddingIdentityChanged(params) {
1183
- return params.strictVectorizationWarnings && params.semanticRuntimeAvailable && Boolean(params.ledgerBefore.embedding && params.runtimeEmbeddingIdentity && hasVectorizationEmbeddingIdentityChanged(params.ledgerBefore.embedding, params.runtimeEmbeddingIdentity));
1184
- }
1185
- function collectVectorizationWarnings(params) {
1186
- const warningSet = /* @__PURE__ */ new Set([...params.ledgerBefore.warnings, ...params.ledgerAfter.warnings]);
1187
- if (params.strictVectorizationWarnings) {
1188
- for (const warning of params.refreshResult.warnings) {
1189
- warningSet.add(warning);
1190
- }
1191
- }
1192
- if (params.embeddingIdentityChanged) {
1193
- warningSet.add("vectorization_embedding_identity_changed");
1194
- }
1195
- if (params.strictVectorizationWarnings && params.semanticRuntimeAvailable && params.staleAfter.length > 0) {
1196
- warningSet.add(`vectorization_stale_items_remaining:${params.staleAfter.length}`);
1197
- }
1198
- return [...warningSet].sort((left, right) => left.localeCompare(right));
1199
- }
1200
- function resolveVectorizationRefreshSkippedReason(refreshPolicy, semanticRuntimeAvailable, staleBefore) {
1201
- if (refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0) {
1202
- return null;
1203
- }
1204
- if (!refreshPolicy.enabled) {
1205
- return "refresh_disabled";
1206
- }
1207
- return semanticRuntimeAvailable ? "no_stale_items" : "semantic_runtime_unavailable";
1208
- }
1209
- function buildVectorizationProviderDetails(settings, snapshot) {
1210
- const activeProvider = snapshot.providerResolution.active?.name ?? null;
1211
- const activeVectorStore = snapshot.vectorStoreResolution.active?.name ?? null;
1212
- return {
1213
- provider_active: activeProvider,
1214
- // GH-244: surface the persisted (possibly empty) configured value and
1215
- // how the active resolution was sourced, so a config audit can tell
1216
- // "auto-detected" apart from a genuine misconfiguration when
1217
- // settings.search.provider / vector_store.adapter are empty strings.
1218
- provider_configured: typeof settings.search?.provider === "string" ? settings.search.provider : null,
1219
- provider_source: resolveProviderConfigSource(activeProvider, settings.search?.provider ?? null),
1220
- vector_store_active: activeVectorStore,
1221
- vector_store_configured: typeof settings.vector_store?.adapter === "string" ? settings.vector_store.adapter : null,
1222
- vector_store_source: resolveProviderConfigSource(activeVectorStore, settings.vector_store?.adapter ?? null)
1223
- };
1224
- }
1225
- function buildVectorizationRefreshPolicyDetails(refreshPolicy) {
1226
- return {
1227
- enabled: refreshPolicy.enabled,
1228
- check_only: refreshPolicy.checkOnly,
1229
- no_refresh: refreshPolicy.noRefresh,
1230
- refresh_vectors: refreshPolicy.refreshVectors
1231
- };
1232
- }
1233
- function vectorizationRefreshAttempted(refreshPolicy, semanticRuntimeAvailable, staleBefore) {
1234
- return refreshPolicy.enabled && staleBefore.length > 0 && semanticRuntimeAvailable;
1235
- }
1236
- async function buildVectorizationCheck(pmRoot, settings, items, refreshPolicy, verboseStaleItems) {
1237
- const snapshot = buildVectorizationRuntimeSnapshot(settings);
1238
- const ledgerBefore = await readVectorizationStatusLedger(pmRoot);
1239
- const staleBefore = snapshot.semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerBefore.entries) : [];
1240
- const refreshResult = await refreshStaleVectorizationItems({ pmRoot, snapshot, refreshPolicy, staleBefore });
1241
- const ledgerAfter = await readVectorizationStatusLedger(pmRoot);
1242
- const staleAfter = snapshot.semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerAfter.entries) : [];
1243
- const strictVectorizationWarnings = !snapshot.runtimeDefaults.auto_ollama_defaults_applied;
1244
- const embeddingIdentityChanged = vectorizationEmbeddingIdentityChanged({
1245
- strictVectorizationWarnings,
1246
- semanticRuntimeAvailable: snapshot.semanticRuntimeAvailable,
1247
- ledgerBefore,
1248
- runtimeEmbeddingIdentity: snapshot.runtimeEmbeddingIdentity
1249
- });
1250
- const warnings = collectVectorizationWarnings({
1251
- ledgerBefore,
1252
- ledgerAfter,
1253
- refreshResult,
1254
- strictVectorizationWarnings,
1255
- semanticRuntimeAvailable: snapshot.semanticRuntimeAvailable,
1256
- embeddingIdentityChanged,
1257
- staleAfter
1258
- });
1259
- const staleBeforeDetail = selectStaleItemDetail(staleBefore, verboseStaleItems);
1260
- const staleAfterDetail = selectStaleItemDetail(staleAfter, verboseStaleItems);
1261
- const refreshAttempted = vectorizationRefreshAttempted(refreshPolicy, snapshot.semanticRuntimeAvailable, staleBefore);
1262
- return {
1263
- check: {
1264
- name: "vectorization",
1265
- status: warnings.length === 0 ? "ok" : "warn",
1266
- details: {
1267
- semantic_runtime_available: snapshot.semanticRuntimeAvailable,
1268
- compatibility_mode_auto_defaults: snapshot.runtimeDefaults.auto_ollama_defaults_applied,
1269
- auto_ollama_defaults_applied: snapshot.runtimeDefaults.auto_ollama_defaults_applied,
1270
- refresh_policy: buildVectorizationRefreshPolicyDetails(refreshPolicy),
1271
- ...buildVectorizationProviderDetails(settings, snapshot),
1272
- embedding_identity_changed: embeddingIdentityChanged,
1273
- embedding_identity_before: ledgerBefore.embedding ?? null,
1274
- embedding_identity_runtime: snapshot.runtimeEmbeddingIdentity ?? null,
1275
- items: items.length,
1276
- ledger_entries_before: Object.keys(ledgerBefore.entries).length,
1277
- stale_items_detail_mode: verboseStaleItems ? "full" : "summary",
1278
- stale_items_summary_limit: STALE_VECTORIZATION_SUMMARY_LIMIT,
1279
- stale_items_before_total: staleBeforeDetail.total,
1280
- stale_items_before: staleBeforeDetail.values,
1281
- stale_items_before_truncated: staleBeforeDetail.truncated,
1282
- refresh_attempted: refreshAttempted,
1283
- refresh_skipped_reason: resolveVectorizationRefreshSkippedReason(refreshPolicy, snapshot.semanticRuntimeAvailable, staleBefore),
1284
- refresh_result: refreshResult,
1285
- ledger_entries_after: Object.keys(ledgerAfter.entries).length,
1286
- stale_items_after_total: staleAfterDetail.total,
1287
- stale_items_after: staleAfterDetail.values,
1288
- stale_items_after_truncated: staleAfterDetail.truncated
1289
- }
1290
- },
1291
- warnings
1292
- };
1293
- }
1294
- function validateSettingsValues(settings) {
1295
- const warnings = [];
1296
- if (settings.id_prefix.trim().length === 0) {
1297
- warnings.push("settings:id_prefix_empty");
1298
- }
1299
- if (settings.locks.ttl_seconds <= 0) {
1300
- warnings.push("settings:locks_ttl_non_positive");
1301
- }
1302
- return warnings;
1303
- }
1304
- function resolveVectorRefreshPolicy(options) {
1305
- const checkOnly = options.checkOnly === true;
1306
- const noRefresh = options.noRefresh === true || checkOnly;
1307
- const refreshVectors = options.refreshVectors === true;
1308
- if (refreshVectors && checkOnly) {
1309
- throw new PmCliError("--check-only cannot be combined with --refresh-vectors", EXIT_CODE.USAGE);
1310
- }
1311
- if (refreshVectors && options.noRefresh === true) {
1312
- throw new PmCliError("--no-refresh cannot be combined with --refresh-vectors", EXIT_CODE.USAGE);
1313
- }
1314
- return {
1315
- enabled: refreshVectors || !noRefresh,
1316
- checkOnly,
1317
- noRefresh,
1318
- refreshVectors
1319
- };
1320
- }
1321
- function resolveHealthDirectoryLists(typeRegistry) {
1322
- const optionalBuiltinDirs = new Set(PM_OPTIONAL_TYPE_SUBDIRS.filter((entry) => entry.length > 0));
1323
- const requiredDirSet = new Set(PM_CORE_REQUIRED_SUBDIRS.filter((entry) => entry.length > 0));
1324
- const optionalDirSet = /* @__PURE__ */ new Set();
1325
- for (const folder of typeRegistry.folders) {
1326
- if (optionalBuiltinDirs.has(folder)) {
1327
- optionalDirSet.add(folder);
1328
- continue;
1329
- }
1330
- requiredDirSet.add(folder);
1331
- }
1332
- return {
1333
- requiredDirs: [...requiredDirSet].sort((left, right) => left.localeCompare(right)),
1334
- optionalDirs: [...optionalDirSet].sort((left, right) => left.localeCompare(right)),
1335
- optionalDirSet
1336
- };
1337
- }
1338
- async function scanHealthDirectories(pmRoot, typeRegistry, strictDirectories) {
1339
- const { requiredDirs, optionalDirs, optionalDirSet } = resolveHealthDirectoryLists(typeRegistry);
1340
- const missingRequiredDirs = [];
1341
- const missingOptionalDirs = [];
1342
- const hookWarnings = [];
1343
- for (const relativeDir of [...requiredDirs, ...optionalDirs]) {
1344
- const directoryPath = path.join(pmRoot, relativeDir);
1345
- hookWarnings.push(...await runActiveOnReadHooks({ path: directoryPath, scope: "project" }));
1346
- if (await isDirectory(directoryPath)) {
1347
- continue;
1348
- }
1349
- if (optionalDirSet.has(relativeDir)) {
1350
- missingOptionalDirs.push(relativeDir);
1351
- } else {
1352
- missingRequiredDirs.push(relativeDir);
1353
- }
1354
- }
1355
- return {
1356
- requiredDirs,
1357
- optionalDirs,
1358
- missingRequiredDirs,
1359
- missingOptionalDirs,
1360
- missingDirs: strictDirectories ? [...missingRequiredDirs, ...missingOptionalDirs] : [...missingRequiredDirs],
1361
- hookWarnings
1362
- };
1363
- }
1364
- function resolveHealthSkipPolicy(options) {
1365
- const summaryMode = options.summary === true && options.full !== true;
1366
- const fastProjectionCheckOnly = options.checkOnly === true && (options.brief === true || options.summary === true) && options.full !== true;
1367
- return {
1368
- summaryMode,
1369
- skipIntegrity: (options.skipIntegrity === true || fastProjectionCheckOnly) && options.full !== true,
1370
- skipDrift: (options.skipDrift === true || fastProjectionCheckOnly) && options.full !== true,
1371
- skipVectors: (options.skipVectors === true || fastProjectionCheckOnly) && options.full !== true
1372
- };
1373
- }
1374
- async function readHealthItems(params) {
1375
- if (params.skipPolicy.skipDrift && params.skipPolicy.skipVectors) {
1376
- return listAllFrontMatter(params.pmRoot, params.settings.item_format, params.typeRegistry.type_to_folder, params.itemReadWarnings, params.settings.schema);
1377
- }
1378
- return listAllFrontMatterWithBody(params.pmRoot, params.settings.item_format, params.typeRegistry.type_to_folder, params.itemReadWarnings, params.settings.schema);
1379
- }
1380
- function buildSkippedHealthCheck(name) {
1381
- return { check: { name, status: "ok", details: { skipped: true } }, warnings: [] };
1382
- }
1383
- function buildSettingsHealthCheck(settingsPath, settings, normalizedSettingsReadWarnings) {
1384
- return {
1385
- name: "settings",
1386
- /* c8 ignore next -- settings read-warning status split is covered in broader read-settings integration tests */
1387
- status: normalizedSettingsReadWarnings.length === 0 ? "ok" : "warn",
1388
- details: {
1389
- path: settingsPath,
1390
- version: settings.version,
1391
- id_prefix: settings.id_prefix,
1392
- locks_ttl_seconds: settings.locks.ttl_seconds,
1393
- warnings: normalizedSettingsReadWarnings
1394
- }
1395
- };
1396
- }
1397
- function buildDirectoriesHealthCheck(directoryState, strictDirectories) {
1398
- return {
1399
- name: "directories",
1400
- status: directoryState.missingDirs.length === 0 ? "ok" : "warn",
1401
- details: {
1402
- required: directoryState.requiredDirs,
1403
- optional: directoryState.optionalDirs,
1404
- missing_required: directoryState.missingRequiredDirs,
1405
- missing_optional: directoryState.missingOptionalDirs,
1406
- missing: directoryState.missingDirs,
1407
- strict_directories: strictDirectories
1408
- }
1409
- };
1410
- }
1411
- function buildSettingsValuesHealthCheck(settingWarnings) {
1412
- return {
1413
- name: "settings_values",
1414
- status: settingWarnings.length === 0 ? "ok" : "warn",
1415
- details: { warnings: settingWarnings }
1416
- };
1417
- }
1418
- function buildStorageHealthCheck(items, settings, historySummary) {
1419
- return {
1420
- name: "storage",
1421
- status: historySummary.over_threshold.length === 0 ? "ok" : "warn",
1422
- details: {
1423
- items: items.length,
1424
- history_streams: historySummary.count,
1425
- ...historySummary.max_entries !== null ? {
1426
- compact_policy: {
1427
- enabled: settings.history.compact_policy.enabled,
1428
- max_entries: historySummary.max_entries,
1429
- trigger: settings.history.compact_policy.trigger,
1430
- over_threshold_count: historySummary.over_threshold.length,
1431
- over_threshold: historySummary.over_threshold
1432
- }
1433
- } : {}
1434
- }
1435
- };
1436
- }
1437
- function collectHealthWarnings(params) {
1438
- const warnings = [
1439
- ...params.directoryState.missingDirs.map((dir) => `missing_directory:${dir}`),
1440
- ...params.normalizedSettingsReadWarnings,
1441
- ...params.settingWarnings,
1442
- ...params.normalizedItemReadWarnings,
1443
- ...params.telemetryCheck.warnings,
1444
- ...params.extensionCheck.warnings,
1445
- ...params.historyPolicyWarnings,
1446
- ...params.historySummary.warnings,
1447
- ...params.locksCheck.warnings,
1448
- ...params.integrityCheck.warnings,
1449
- ...params.historyDriftCheck.warnings,
1450
- ...params.vectorizationCheck.warnings,
1451
- ...params.directoryState.hookWarnings
1452
- ];
1453
- return [...new Set(warnings)];
1454
- }
1455
- function extractHistoryDriftedCount(historyDriftCheck) {
1456
- const counts = historyDriftCheck.check.details.counts;
1457
- return typeof counts?.drifted === "number" ? counts.drifted : 0;
1458
- }
1459
- function buildHealthRemediationSources(params) {
1460
- return {
1461
- settings: params.normalizedSettingsReadWarnings,
1462
- directories: params.directoryState.missingDirs.map((dir) => `missing_directory:${dir}`),
1463
- settings_values: params.settingWarnings,
1464
- telemetry: params.telemetryCheck.warnings,
1465
- extensions: params.extensionCheck.warnings,
1466
- storage: params.historySummary.over_threshold.map((id) => `history_stream_over_compact_threshold:${id}`),
1467
- locks: params.locksCheck.warnings,
1468
- integrity: params.integrityCheck.warnings,
1469
- history_drift: params.historyDriftCheck.warnings,
1470
- vectorization: params.vectorizationCheck.warnings
1471
- };
1472
- }
1473
- function rewriteBulkHealthRemediation(params) {
1474
- if (params.check.name === "history_drift" && params.historyDriftedCount > 1) {
1475
- for (const code of Object.keys(params.remediationMap)) {
1476
- params.remediationMap[code] = "pm history-repair --all";
1477
- }
1478
- }
1479
- if (params.check.name === "storage" && params.overThresholdCount > 1) {
1480
- for (const code of Object.keys(params.remediationMap)) {
1481
- params.remediationMap[code] = "pm history-compact --all-streams";
1482
- }
1483
- }
1484
- }
1485
- function attachHealthRemediationMaps(params) {
1486
- for (const check of params.checks) {
1487
- const remediationMap = buildRemediationMap(params.remediationSources[check.name]);
1488
- rewriteBulkHealthRemediation({
1489
- check,
1490
- remediationMap,
1491
- historyDriftedCount: params.historyDriftedCount,
1492
- overThresholdCount: params.overThresholdCount
1493
- });
1494
- if (Object.keys(remediationMap).length > 0) {
1495
- check.details = { ...check.details, remediation_map: remediationMap };
1496
- }
1497
- }
1498
- }
1499
- function projectHealthResult(result, options, summaryMode) {
1500
- if (summaryMode) {
1501
- return applySummaryHealthProjection(result);
1502
- }
1503
- return options.brief === true ? applyBriefHealthProjection(result) : result;
1504
- }
1505
- async function runHealth(global2, options = {}) {
1506
- const pmRoot = resolvePmRoot(process.cwd(), global2.path);
1507
- const settingsPath = getSettingsPath(pmRoot);
1508
- if (!await pathExists(settingsPath)) {
1509
- throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1510
- }
1511
- const { settings, warnings: settingsReadWarnings } = await readSettingsWithMetadata(pmRoot);
1512
- const normalizedSettingsReadWarnings = [...new Set(settingsReadWarnings)];
1513
- const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1514
- const strictDirectories = options.strictDirectories === true;
1515
- const refreshPolicy = resolveVectorRefreshPolicy(options);
1516
- const directoryState = await scanHealthDirectories(pmRoot, typeRegistry, strictDirectories);
1517
- const settingWarnings = validateSettingsValues(settings);
1518
- const telemetryCheck = await buildTelemetryCheck(settings, {
1519
- checkTelemetry: options.checkTelemetry === true
1520
- });
1521
- const extensionCheck = await buildExtensionCheck(pmRoot, settings, Boolean(global2.noExtensions));
1522
- const skipPolicy = resolveHealthSkipPolicy(options);
1523
- const itemReadWarnings = [];
1524
- const items = await readHealthItems({ pmRoot, settings, typeRegistry, skipPolicy, itemReadWarnings });
1525
- const itemsWithBody = items;
1526
- const normalizedItemReadWarnings = [...new Set(itemReadWarnings)];
1527
- const historyPolicy = skipPolicy.skipDrift ? { warnings: [] } : await enforceHistoryStreamPolicyForItems({
1528
- pmRoot,
1529
- settings,
1530
- itemIds: items.map((item) => item.id),
1531
- commandLabel: "health"
1532
- });
1533
- const historySummary = await countHistoryStreams(pmRoot, settings.history.compact_policy);
1534
- const locksCheck = await buildLocksCheck(pmRoot);
1535
- const integrityCheck = skipPolicy.skipIntegrity ? buildSkippedHealthCheck("integrity") : await buildIntegrityCheck(pmRoot, typeRegistry.type_to_folder, settings.schema);
1536
- const historyDriftCheck = skipPolicy.skipDrift ? buildSkippedHealthCheck("history_drift") : await buildHistoryDriftCheck(pmRoot, itemsWithBody);
1537
- const vectorizationCheck = skipPolicy.skipVectors ? buildSkippedHealthCheck("vectorization") : await buildVectorizationCheck(pmRoot, settings, itemsWithBody, refreshPolicy, options.verboseStaleItems === true);
1538
- const checks = [
1539
- buildSettingsHealthCheck(settingsPath, settings, normalizedSettingsReadWarnings),
1540
- buildDirectoriesHealthCheck(directoryState, strictDirectories),
1541
- buildSettingsValuesHealthCheck(settingWarnings),
1542
- telemetryCheck.check,
1543
- extensionCheck.check,
1544
- buildStorageHealthCheck(items, settings, historySummary),
1545
- locksCheck.check,
1546
- integrityCheck.check,
1547
- historyDriftCheck.check,
1548
- vectorizationCheck.check
1549
- ];
1550
- const normalizedWarnings = collectHealthWarnings({
1551
- directoryState,
1552
- normalizedSettingsReadWarnings,
1553
- settingWarnings,
1554
- normalizedItemReadWarnings,
1555
- telemetryCheck,
1556
- extensionCheck,
1557
- historyPolicyWarnings: historyPolicy.warnings,
1558
- historySummary,
1559
- locksCheck,
1560
- integrityCheck,
1561
- historyDriftCheck,
1562
- vectorizationCheck
1563
- });
1564
- attachHealthRemediationMaps({
1565
- checks,
1566
- remediationSources: buildHealthRemediationSources({
1567
- directoryState,
1568
- normalizedSettingsReadWarnings,
1569
- settingWarnings,
1570
- telemetryCheck,
1571
- extensionCheck,
1572
- historySummary,
1573
- locksCheck,
1574
- integrityCheck,
1575
- historyDriftCheck,
1576
- vectorizationCheck
1577
- }),
1578
- historyDriftedCount: extractHistoryDriftedCount(historyDriftCheck),
1579
- overThresholdCount: historySummary.over_threshold.length
1580
- });
1581
- const blockingWarnings = normalizedWarnings.filter((warning) => !isAdvisoryHealthWarning(warning));
1582
- const result = {
1583
- ok: blockingWarnings.length === 0,
1584
- checks,
1585
- warnings: normalizedWarnings,
1586
- generated_at: nowIso()
1587
- };
1588
- return projectHealthResult(result, options, skipPolicy.summaryMode);
1589
- }
1590
- var _testOnlyHealthCommand = {
1591
- buildExtensionHealthTriageSummary,
1592
- buildCapabilityContractMetadata,
1593
- buildVectorizationProviderDetails,
1594
- collectUnknownCapabilityGuidance,
1595
- isAdvisoryHealthWarning,
1596
- isDirectory,
1597
- isExpectedUnmanagedExtension,
1598
- listItemDocumentPaths,
1599
- normalizeEndpointForDisplay,
1600
- normalizeExtensionNameForMatch,
1601
- parseTelemetryQueue,
1602
- probeTelemetryEndpointHealth,
1603
- selectStaleItemDetail,
1604
- summarizeHealthCheckDetails,
1605
- summarizeExtensionList,
1606
- summarizeRecordList,
1607
- summarizeStringList,
1608
- telemetryEnvFlagEnabled,
1609
- warningCode
1610
- };
1611
- export {
1612
- _testOnlyHealthCommand,
1613
- runHealth
1614
- };
1615
- //# sourceMappingURL=health-DNTM72GJ.js.map