@unbrained/pm-cli 2026.6.30 → 2026.7.2

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