@unbrained/pm-cli 2026.7.1 → 2026.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (563) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cli/commander-usage.d.ts +2 -0
  3. package/dist/cli/commander-usage.js +58 -47
  4. package/dist/cli/commander-usage.js.map +1 -1
  5. package/dist/cli/commands/aggregate.js +102 -79
  6. package/dist/cli/commands/aggregate.js.map +1 -1
  7. package/dist/cli/commands/calendar.js +278 -243
  8. package/dist/cli/commands/calendar.js.map +1 -1
  9. package/dist/cli/commands/close-many.js +89 -68
  10. package/dist/cli/commands/close-many.js.map +1 -1
  11. package/dist/cli/commands/close.js +157 -129
  12. package/dist/cli/commands/close.js.map +1 -1
  13. package/dist/cli/commands/comments-audit.js +50 -42
  14. package/dist/cli/commands/comments-audit.js.map +1 -1
  15. package/dist/cli/commands/config.d.ts +2 -0
  16. package/dist/cli/commands/config.js +443 -879
  17. package/dist/cli/commands/config.js.map +1 -1
  18. package/dist/cli/commands/context.js +365 -287
  19. package/dist/cli/commands/context.js.map +1 -1
  20. package/dist/cli/commands/contracts.js +352 -238
  21. package/dist/cli/commands/contracts.js.map +1 -1
  22. package/dist/cli/commands/dedupe-audit.js +46 -39
  23. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  24. package/dist/cli/commands/dedupe-merge.js +88 -69
  25. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  26. package/dist/cli/commands/get.js +114 -81
  27. package/dist/cli/commands/get.js.map +1 -1
  28. package/dist/cli/commands/health.d.ts +17 -0
  29. package/dist/cli/commands/health.js +446 -307
  30. package/dist/cli/commands/health.js.map +1 -1
  31. package/dist/cli/commands/history-compact.js +209 -140
  32. package/dist/cli/commands/history-compact.js.map +1 -1
  33. package/dist/cli/commands/history-redact.js +162 -119
  34. package/dist/cli/commands/history-redact.js.map +1 -1
  35. package/dist/cli/commands/history-repair.js +120 -85
  36. package/dist/cli/commands/history-repair.js.map +1 -1
  37. package/dist/cli/commands/init.d.ts +8 -2
  38. package/dist/cli/commands/init.js +263 -162
  39. package/dist/cli/commands/init.js.map +1 -1
  40. package/dist/cli/commands/list.js +152 -102
  41. package/dist/cli/commands/list.js.map +1 -1
  42. package/dist/cli/commands/next.js +49 -32
  43. package/dist/cli/commands/next.js.map +1 -1
  44. package/dist/cli/commands/plan.js +373 -298
  45. package/dist/cli/commands/plan.js.map +1 -1
  46. package/dist/cli/commands/recurrence-parsers.js +43 -25
  47. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  48. package/dist/cli/commands/reindex.d.ts +21 -5
  49. package/dist/cli/commands/reindex.js +345 -205
  50. package/dist/cli/commands/reindex.js.map +1 -1
  51. package/dist/cli/commands/restore.d.ts +8 -7
  52. package/dist/cli/commands/restore.js +105 -69
  53. package/dist/cli/commands/restore.js.map +1 -1
  54. package/dist/cli/commands/schema.js +33 -30
  55. package/dist/cli/commands/schema.js.map +1 -1
  56. package/dist/cli/commands/search.d.ts +10 -2
  57. package/dist/cli/commands/search.js +503 -470
  58. package/dist/cli/commands/search.js.map +1 -1
  59. package/dist/cli/commands/telemetry.js +98 -87
  60. package/dist/cli/commands/telemetry.js.map +1 -1
  61. package/dist/cli/commands/test-all.js +237 -168
  62. package/dist/cli/commands/test-all.js.map +1 -1
  63. package/dist/cli/commands/test.d.ts +6 -5
  64. package/dist/cli/commands/test.js +424 -344
  65. package/dist/cli/commands/test.js.map +1 -1
  66. package/dist/cli/commands/update-many.js +57 -42
  67. package/dist/cli/commands/update-many.js.map +1 -1
  68. package/dist/cli/commands/update.d.ts +1 -1
  69. package/dist/cli/commands/update.js +738 -671
  70. package/dist/cli/commands/update.js.map +1 -1
  71. package/dist/cli/commands/validate.d.ts +18 -1
  72. package/dist/cli/commands/validate.js +466 -343
  73. package/dist/cli/commands/validate.js.map +1 -1
  74. package/dist/cli/error-guidance.js +399 -357
  75. package/dist/cli/error-guidance.js.map +1 -1
  76. package/dist/cli/main.d.ts +47 -0
  77. package/dist/cli/main.js +428 -341
  78. package/dist/cli/main.js.map +1 -1
  79. package/dist/cli/migration-gates.js +22 -45
  80. package/dist/cli/migration-gates.js.map +1 -1
  81. package/dist/cli/register-list-query.js +94 -105
  82. package/dist/cli/register-list-query.js.map +1 -1
  83. package/dist/cli/register-mutation.js +400 -416
  84. package/dist/cli/register-mutation.js.map +1 -1
  85. package/dist/cli/register-operations.js +86 -66
  86. package/dist/cli/register-operations.js.map +1 -1
  87. package/dist/cli/register-setup.js +120 -101
  88. package/dist/cli/register-setup.js.map +1 -1
  89. package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js → activity-CUC4JY3U.js} +9 -9
  90. package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
  91. package/dist/cli-bundle/chunks/{aggregate-JTEF4BP7.js → aggregate-DKUTRY6R.js} +108 -84
  92. package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
  93. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js → aggregate-SW5PNGCS.js} +107 -83
  94. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js.map → aggregate-SW5PNGCS.js.map} +2 -2
  95. package/dist/cli-bundle/chunks/{append-QCFJSDFL.js → append-H32VOR2Y.js} +6 -6
  96. package/dist/cli-bundle/chunks/{append-LOVPGVPT.js → append-UBM632FK.js} +6 -6
  97. package/dist/cli-bundle/chunks/{chunk-RLDHZHQS.js → chunk-2227673O.js} +158 -114
  98. package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
  99. package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js → chunk-2ASNV4DH.js} +4 -4
  100. package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js → chunk-2CHRYUXL.js} +2 -2
  101. package/dist/cli-bundle/chunks/{chunk-NWMZWYYB.js → chunk-2KWL5NPW.js} +42 -27
  102. package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
  103. package/dist/cli-bundle/chunks/{chunk-NFDPYAIP.js → chunk-36UGKF4O.js} +21 -29
  104. package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
  105. package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js → chunk-3AZUFQK6.js} +6 -6
  106. package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js → chunk-3LCUASYG.js} +2 -2
  107. package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js → chunk-3Q2HBMTI.js} +2 -2
  108. package/dist/cli-bundle/chunks/{chunk-IPYBJWTE.js → chunk-4NUOWFBT.js} +109 -72
  109. package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
  110. package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js → chunk-55XRYWEG.js} +6 -6
  111. package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js → chunk-5GVTFFTC.js} +2 -2
  112. package/dist/cli-bundle/chunks/{chunk-BDTISOSD.js → chunk-5PGBHRY3.js} +41 -26
  113. package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
  114. package/dist/cli-bundle/chunks/{chunk-YITK2PJ6.js → chunk-66Z3X7ZG.js} +261 -161
  115. package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
  116. package/dist/cli-bundle/chunks/{chunk-NUHHPVVS.js → chunk-6ITZLD4T.js} +712 -612
  117. package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
  118. package/dist/cli-bundle/chunks/{chunk-V3NOKJF2.js → chunk-6YCYF2AI.js} +262 -162
  119. package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
  120. package/dist/cli-bundle/chunks/{chunk-BZCEN4JA.js → chunk-6ZMBJRDJ.js} +492 -403
  121. package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
  122. package/dist/cli-bundle/chunks/{chunk-CF7RL6FR.js → chunk-7MYWF4ZX.js} +110 -73
  123. package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
  124. package/dist/cli-bundle/chunks/{chunk-RVUALSJF.js → chunk-7NSPKJUS.js} +356 -285
  125. package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
  126. package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js → chunk-7TH5NMVB.js} +95 -53
  127. package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-ZETXE4SE.js → chunk-7W4H4K26.js} +713 -613
  129. package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js → chunk-A6VOGKBA.js} +6 -6
  131. package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js → chunk-AIAIXG7I.js} +2 -2
  132. package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js → chunk-AJEBCRIY.js} +5 -5
  133. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  134. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  135. package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js → chunk-BTX5MIQF.js} +2 -2
  136. package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js → chunk-BVZZN2LH.js} +3 -3
  137. package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js → chunk-CYBDUHNO.js} +3 -3
  138. package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js → chunk-CZPVDLD2.js} +4 -4
  139. package/dist/cli-bundle/chunks/{chunk-3VGN2UWE.js → chunk-EMPGXBUF.js} +22 -30
  140. package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
  141. package/dist/cli-bundle/chunks/{chunk-JPECA746.js → chunk-EUKTMRN3.js} +2 -2
  142. package/dist/cli-bundle/chunks/{chunk-2466X6E4.js → chunk-FFOQHGNH.js} +6 -6
  143. package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js → chunk-GFMSLORL.js} +6 -6
  144. package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js → chunk-GRRG3MCT.js} +4 -4
  145. package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js → chunk-H4GRLYJS.js} +3 -3
  146. package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js → chunk-HQTPRV4D.js} +6 -6
  147. package/dist/cli-bundle/chunks/{chunk-7R4QEMZZ.js → chunk-I66WE2HE.js} +354 -283
  148. package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
  149. package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js → chunk-IEEJQCZ4.js} +3 -3
  150. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js → chunk-IG5JYZGU.js} +390 -312
  151. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js.map → chunk-IG5JYZGU.js.map} +2 -2
  152. package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js → chunk-JMK5GCK2.js} +2 -2
  153. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js → chunk-JXAUVO6X.js} +258 -169
  154. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js.map → chunk-JXAUVO6X.js.map} +2 -2
  155. package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js → chunk-K2VYLVX4.js} +2 -2
  156. package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js → chunk-KCO2EAN5.js} +3 -3
  157. package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js → chunk-KIYCOJ63.js} +4 -4
  158. package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js → chunk-KLXF7NCC.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js → chunk-KN3URLKS.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js → chunk-LRKMWUUV.js} +2 -2
  161. package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js → chunk-LTRAF2D7.js} +3 -3
  162. package/dist/cli-bundle/chunks/{chunk-VARHOHYV.js → chunk-MNBPX5JS.js} +55 -36
  163. package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
  164. package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js → chunk-MRD4T5LF.js} +2 -2
  165. package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js → chunk-N2JSWVWG.js} +4 -4
  166. package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js → chunk-N3QCJS4M.js} +6 -6
  167. package/dist/cli-bundle/chunks/{chunk-JSU5P7VS.js → chunk-NRZS637N.js} +258 -169
  168. package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
  169. package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js → chunk-OTUJZKGI.js} +3 -3
  170. package/dist/cli-bundle/chunks/{chunk-5CGRF3L5.js → chunk-Q6K2OACU.js} +153 -90
  171. package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
  172. package/dist/cli-bundle/chunks/{chunk-3XZCOZ5J.js → chunk-Q6NXOHS6.js} +391 -313
  173. package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
  174. package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js → chunk-QH3FSKRJ.js} +2 -2
  175. package/dist/cli-bundle/chunks/{chunk-4XOIEKSD.js → chunk-RM37OPYK.js} +56 -37
  176. package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
  177. package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js → chunk-S62UANU7.js} +3 -3
  178. package/dist/cli-bundle/chunks/{chunk-RMMQ74TG.js → chunk-SPM2XLWI.js} +37 -28
  179. package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
  180. package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js → chunk-SYNKD3ZG.js} +5 -5
  181. package/dist/cli-bundle/chunks/{chunk-FFMQB7WR.js → chunk-SYVUU7EK.js} +493 -404
  182. package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
  183. package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js → chunk-TPOFWBMY.js} +95 -53
  184. package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
  185. package/dist/cli-bundle/chunks/{chunk-OTUHB4HS.js → chunk-TTHCEV5Q.js} +92 -77
  186. package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js → chunk-U2BEEM2X.js} +3 -3
  188. package/dist/cli-bundle/chunks/{chunk-KNPEF7QG.js → chunk-UGLU6Q2I.js} +91 -76
  189. package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
  190. package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js → chunk-UT73HUPC.js} +3 -3
  191. package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js → chunk-UTSH5GWX.js} +4 -4
  192. package/dist/cli-bundle/chunks/{chunk-IZBR4NRW.js → chunk-UWKEJMZU.js} +157 -113
  193. package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
  194. package/dist/cli-bundle/chunks/{chunk-3S2KT7NG.js → chunk-W47SML5B.js} +152 -89
  195. package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
  196. package/dist/cli-bundle/chunks/{chunk-RGEMWD6Q.js → chunk-WJAMWAHZ.js} +157 -118
  197. package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
  198. package/dist/cli-bundle/chunks/{chunk-JWXRETDF.js → chunk-XCHUVHKU.js} +626 -484
  199. package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
  200. package/dist/cli-bundle/chunks/{chunk-55SNVXRQ.js → chunk-XEWQKDYZ.js} +626 -484
  201. package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
  202. package/dist/cli-bundle/chunks/{chunk-TP5Q5ZD3.js → chunk-XTHQWXVC.js} +158 -119
  203. package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
  204. package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js → chunk-XWGEMNBR.js} +2 -2
  205. package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js → chunk-Y4NRKBFW.js} +3 -3
  206. package/dist/cli-bundle/chunks/{chunk-2D4HATP2.js → chunk-YLZZ6T54.js} +38 -29
  207. package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
  208. package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js → chunk-YPKFV2JR.js} +6 -6
  209. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  210. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  211. package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js → chunk-ZNHEYCDD.js} +2 -2
  212. package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js → chunk-ZNT7KEWE.js} +2 -2
  213. package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js → claim-SENTPZBN.js} +8 -8
  214. package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js → claim-Z7MEQCBT.js} +8 -8
  215. package/dist/cli-bundle/chunks/{close-TQYAAFJP.js → close-424MX4CU.js} +7 -7
  216. package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
  217. package/dist/cli-bundle/chunks/{close-many-LDRVEQY2.js → close-many-2IV4J2TR.js} +102 -81
  218. package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
  219. package/dist/cli-bundle/chunks/{close-many-BG5QQIDQ.js → close-many-SWY34BII.js} +101 -80
  220. package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
  221. package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js → comments-4FGNTSNV.js} +8 -8
  222. package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js → comments-7YS5MY5X.js} +8 -8
  223. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
  224. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
  225. package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
  226. package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
  227. package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js → context-LHVKJSPJ.js} +12 -12
  228. package/dist/cli-bundle/chunks/{context-B6275WPX.js → context-ZQY54JNS.js} +12 -12
  229. package/dist/cli-bundle/chunks/{contracts-HN7ABKLP.js → contracts-CP2EZJC7.js} +320 -199
  230. package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
  231. package/dist/cli-bundle/chunks/{contracts-W4FZVVD6.js → contracts-FIZLMP7O.js} +321 -200
  232. package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
  233. package/dist/cli-bundle/chunks/{copy-DEM4DATS.js → copy-GYNQQPW2.js} +5 -5
  234. package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js → copy-TLW7JTQT.js} +5 -5
  235. package/dist/cli-bundle/chunks/{create-RLRJMRTM.js → create-VSKYSOCD.js} +12 -12
  236. package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
  237. package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js → delete-4W5JYCEG.js} +5 -5
  238. package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js → delete-ANTOTI2I.js} +5 -5
  239. package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js → deps-HPPE6MJN.js} +5 -5
  240. package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js → deps-ZQZN54EZ.js} +5 -5
  241. package/dist/cli-bundle/chunks/{docs-GYZNVS26.js → docs-RPOVFMP3.js} +7 -7
  242. package/dist/cli-bundle/chunks/{docs-26S44RXU.js → docs-XJNYBJGE.js} +7 -7
  243. package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js → eval-DM6JBZTS.js} +10 -10
  244. package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js → eval-RFBI5FGS.js} +10 -10
  245. package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js → extension-B3YY4WY5.js} +11 -11
  246. package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js → extension-TTSEFQTS.js} +11 -11
  247. package/dist/cli-bundle/chunks/{files-NQHEXUZD.js → files-5D65CHGE.js} +7 -7
  248. package/dist/cli-bundle/chunks/{files-MBNICQFM.js → files-GPIG77EN.js} +7 -7
  249. package/dist/cli-bundle/chunks/{focus-XZW5423D.js → focus-C3PEJV2C.js} +6 -6
  250. package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js → focus-ZHN7WIGX.js} +6 -6
  251. package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js → gc-D4JQ6OWN.js} +3 -3
  252. package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js → gc-VZIXDL32.js} +3 -3
  253. package/dist/cli-bundle/chunks/{get-DSDEKJ3L.js → get-GIBRUUOP.js} +121 -81
  254. package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
  255. package/dist/cli-bundle/chunks/{get-A7MAOHCU.js → get-IOVAN6RU.js} +120 -80
  256. package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
  257. package/dist/cli-bundle/chunks/{health-3IPFLKXB.js → health-L2U3AFKV.js} +437 -265
  258. package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
  259. package/dist/cli-bundle/chunks/{health-GZXGBZ36.js → health-MM7AWXYF.js} +436 -264
  260. package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
  261. package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
  262. package/dist/cli-bundle/chunks/{history-NERDJNUB.js → history-IL7XCEX2.js} +8 -8
  263. package/dist/cli-bundle/chunks/{history-compact-HR7BB4LR.js → history-compact-HALOTOU7.js} +214 -135
  264. package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
  265. package/dist/cli-bundle/chunks/{history-compact-2WRZ2WK4.js → history-compact-MV25P7DM.js} +213 -134
  266. package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
  267. package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
  268. package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js → history-redact-VYCWQFK7.js} +9 -9
  269. package/dist/cli-bundle/chunks/{history-repair-XA3LC4GA.js → history-repair-44MODPQF.js} +124 -84
  270. package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
  271. package/dist/cli-bundle/chunks/{history-repair-LCMOS45X.js → history-repair-CPNAOCNF.js} +123 -83
  272. package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
  273. package/dist/cli-bundle/chunks/{init-64XDLQJB.js → init-F27NHENZ.js} +12 -12
  274. package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
  275. package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js → learnings-HJVDQIGY.js} +8 -8
  276. package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js → learnings-XSFSUUWK.js} +8 -8
  277. package/dist/cli-bundle/chunks/{list-G5Y65VF6.js → list-HPMEKCAA.js} +8 -8
  278. package/dist/cli-bundle/chunks/{list-DNBJVO3E.js → list-VMPWTURB.js} +8 -8
  279. package/dist/cli-bundle/chunks/{next-BCERKDUR.js → next-ETXF2ZCN.js} +59 -37
  280. package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
  281. package/dist/cli-bundle/chunks/{next-FYTQF6HG.js → next-QM6YJIIS.js} +60 -38
  282. package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
  283. package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js → notes-GDZIKGR6.js} +8 -8
  284. package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js → notes-WDDBPC4D.js} +8 -8
  285. package/dist/cli-bundle/chunks/{plan-RKZHQVXR.js → plan-BGDR73Z6.js} +373 -279
  286. package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
  287. package/dist/cli-bundle/chunks/{plan-4WXEQCTN.js → plan-C5IMM335.js} +372 -278
  288. package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
  289. package/dist/cli-bundle/chunks/{profile-QLER5ENE.js → profile-CCOKZ2IQ.js} +9 -9
  290. package/dist/cli-bundle/chunks/{profile-4OMM32CD.js → profile-HUCENIEQ.js} +9 -9
  291. package/dist/cli-bundle/chunks/{register-list-query-7LV46VAU.js → register-list-query-ROSNIL52.js} +80 -83
  292. package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
  293. package/dist/cli-bundle/chunks/{register-list-query-SNG5PGA4.js → register-list-query-XN4ZRHSV.js} +79 -82
  294. package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
  295. package/dist/cli-bundle/chunks/{register-mutation-ENNDUAZG.js → register-mutation-CFSB2MS3.js} +403 -382
  296. package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
  297. package/dist/cli-bundle/chunks/{register-mutation-KK7PHYYU.js → register-mutation-KRLAHEL2.js} +402 -381
  298. package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
  299. package/dist/cli-bundle/chunks/{register-operations-HZ6XERQG.js → register-operations-4PASGJDB.js} +112 -93
  300. package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
  301. package/dist/cli-bundle/chunks/{register-operations-C6OWLDSH.js → register-operations-MBN4KGUM.js} +113 -94
  302. package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
  303. package/dist/cli-bundle/chunks/{register-setup-P67EMBDJ.js → register-setup-VIAWYFP5.js} +129 -104
  304. package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
  305. package/dist/cli-bundle/chunks/{register-setup-ZKJ53RS7.js → register-setup-ZCGKHDKL.js} +128 -103
  306. package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
  307. package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js → restore-4CBWUMCX.js} +9 -9
  308. package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
  309. package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
  310. package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
  311. package/dist/cli-bundle/chunks/{schema-73HR2OJW.js → schema-TDGK6N3I.js} +7 -7
  312. package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js → schema-UE5KKAUX.js} +7 -7
  313. package/dist/cli-bundle/chunks/{search-KILGT37L.js → search-FP7MEU4S.js} +10 -10
  314. package/dist/cli-bundle/chunks/{search-AXPXKZER.js → search-K4CFLQ5S.js} +10 -10
  315. package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js → stats-NJJCALEZ.js} +6 -6
  316. package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js → stats-XT6QRKQY.js} +6 -6
  317. package/dist/cli-bundle/chunks/{telemetry-GAHHQTOS.js → telemetry-5SQ5UDXC.js} +84 -70
  318. package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
  319. package/dist/cli-bundle/chunks/{telemetry-BZUF6H7G.js → telemetry-HVXFZA2U.js} +85 -71
  320. package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
  321. package/dist/cli-bundle/chunks/{test-ACD52Z3S.js → test-UFSJ5YIO.js} +15 -15
  322. package/dist/cli-bundle/chunks/{test-PWDIZ255.js → test-YCDAUBWF.js} +15 -15
  323. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
  324. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
  325. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
  326. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
  327. package/dist/cli-bundle/chunks/{test-runs-UXIXPDKU.js → test-runs-FK5E75AA.js} +185 -147
  328. package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
  329. package/dist/cli-bundle/chunks/{test-runs-PLRAZEFW.js → test-runs-H4TGWGRN.js} +184 -146
  330. package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
  331. package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
  332. package/dist/cli-bundle/chunks/{update-KFX2SIAC.js → update-Y5WQVT5O.js} +15 -15
  333. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js → update-many-6YAYYRLE.js} +82 -67
  334. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js.map → update-many-6YAYYRLE.js.map} +2 -2
  335. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js → update-many-JTKKSA7Y.js} +83 -68
  336. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js.map → update-many-JTKKSA7Y.js.map} +1 -1
  337. package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js → upgrade-DTAHZ236.js} +11 -11
  338. package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js → upgrade-JUDU7YL4.js} +11 -11
  339. package/dist/cli-bundle/chunks/{validate-MTUVL5VC.js → validate-732RWS5W.js} +440 -320
  340. package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
  341. package/dist/cli-bundle/chunks/{validate-X5W76YJL.js → validate-W7H5TEDC.js} +441 -321
  342. package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
  343. package/dist/cli-bundle/main.js +945 -812
  344. package/dist/cli-bundle/main.js.map +3 -3
  345. package/dist/core/config/nested-settings.js +89 -67
  346. package/dist/core/config/nested-settings.js.map +1 -1
  347. package/dist/core/governance/metadata-coverage.js +20 -28
  348. package/dist/core/governance/metadata-coverage.js.map +1 -1
  349. package/dist/core/history/drift-scan.js +93 -81
  350. package/dist/core/history/drift-scan.js.map +1 -1
  351. package/dist/core/item/item-type-definition.js +14 -14
  352. package/dist/core/item/item-type-definition.js.map +1 -1
  353. package/dist/core/item/type-registry.js +87 -82
  354. package/dist/core/item/type-registry.js.map +1 -1
  355. package/dist/core/output/mutation-projection.js +42 -26
  356. package/dist/core/output/mutation-projection.js.map +1 -1
  357. package/dist/core/schema/runtime-schema.js +34 -28
  358. package/dist/core/schema/runtime-schema.js.map +1 -1
  359. package/dist/core/search/semantic-defaults.js +64 -37
  360. package/dist/core/search/semantic-defaults.js.map +1 -1
  361. package/dist/core/search/vector-stores.js +32 -17
  362. package/dist/core/search/vector-stores.js.map +1 -1
  363. package/dist/core/sentry/helpers.js +31 -28
  364. package/dist/core/sentry/helpers.js.map +1 -1
  365. package/dist/core/sentry/instrument.js +54 -43
  366. package/dist/core/sentry/instrument.js.map +1 -1
  367. package/dist/core/store/front-matter-cache.js +239 -153
  368. package/dist/core/store/front-matter-cache.js.map +1 -1
  369. package/dist/core/store/item-store.js +33 -26
  370. package/dist/core/store/item-store.js.map +1 -1
  371. package/dist/core/store/settings.js +247 -203
  372. package/dist/core/store/settings.js.map +1 -1
  373. package/dist/core/test/background-runs.js +189 -160
  374. package/dist/core/test/background-runs.js.map +1 -1
  375. package/package.json +2 -2
  376. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  377. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  378. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  379. package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +0 -16
  380. package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +0 -1
  381. package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +0 -1
  382. package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +0 -7
  383. package/dist/cli-bundle/chunks/chunk-3VGN2UWE.js.map +0 -1
  384. package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +0 -1
  385. package/dist/cli-bundle/chunks/chunk-4DSGXSBL.js.map +0 -7
  386. package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +0 -1
  387. package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +0 -7
  388. package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +0 -1
  389. package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +0 -1
  390. package/dist/cli-bundle/chunks/chunk-BDTISOSD.js.map +0 -7
  391. package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +0 -7
  392. package/dist/cli-bundle/chunks/chunk-CF7RL6FR.js.map +0 -1
  393. package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +0 -1
  394. package/dist/cli-bundle/chunks/chunk-IPYBJWTE.js.map +0 -7
  395. package/dist/cli-bundle/chunks/chunk-IZBR4NRW.js.map +0 -7
  396. package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +0 -1
  397. package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +0 -1
  398. package/dist/cli-bundle/chunks/chunk-KNPEF7QG.js.map +0 -7
  399. package/dist/cli-bundle/chunks/chunk-NFDPYAIP.js.map +0 -7
  400. package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +0 -7
  401. package/dist/cli-bundle/chunks/chunk-NWMZWYYB.js.map +0 -1
  402. package/dist/cli-bundle/chunks/chunk-OTUHB4HS.js.map +0 -1
  403. package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +0 -7
  404. package/dist/cli-bundle/chunks/chunk-RLDHZHQS.js.map +0 -1
  405. package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +0 -7
  406. package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +0 -7
  407. package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +0 -1
  408. package/dist/cli-bundle/chunks/chunk-UYUYDGIB.js.map +0 -1
  409. package/dist/cli-bundle/chunks/chunk-V3NOKJF2.js.map +0 -1
  410. package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +0 -7
  411. package/dist/cli-bundle/chunks/chunk-YITK2PJ6.js.map +0 -7
  412. package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +0 -1
  413. package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +0 -14
  414. package/dist/cli-bundle/chunks/close-many-BG5QQIDQ.js.map +0 -7
  415. package/dist/cli-bundle/chunks/close-many-LDRVEQY2.js.map +0 -1
  416. package/dist/cli-bundle/chunks/config-DMSU64QO.js +0 -1541
  417. package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +0 -7
  418. package/dist/cli-bundle/chunks/config-QH2DICD6.js +0 -1531
  419. package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +0 -1
  420. package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +0 -7
  421. package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +0 -1
  422. package/dist/cli-bundle/chunks/create-OH3BDGBB.js +0 -28
  423. package/dist/cli-bundle/chunks/get-A7MAOHCU.js.map +0 -7
  424. package/dist/cli-bundle/chunks/get-DSDEKJ3L.js.map +0 -1
  425. package/dist/cli-bundle/chunks/health-3IPFLKXB.js.map +0 -1
  426. package/dist/cli-bundle/chunks/health-GZXGBZ36.js.map +0 -7
  427. package/dist/cli-bundle/chunks/history-WSZHY3PN.js +0 -18
  428. package/dist/cli-bundle/chunks/history-compact-2WRZ2WK4.js.map +0 -7
  429. package/dist/cli-bundle/chunks/history-compact-HR7BB4LR.js.map +0 -1
  430. package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +0 -19
  431. package/dist/cli-bundle/chunks/history-repair-LCMOS45X.js.map +0 -7
  432. package/dist/cli-bundle/chunks/history-repair-XA3LC4GA.js.map +0 -1
  433. package/dist/cli-bundle/chunks/init-PAX32BJA.js +0 -22
  434. package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +0 -7
  435. package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +0 -1
  436. package/dist/cli-bundle/chunks/plan-4WXEQCTN.js.map +0 -7
  437. package/dist/cli-bundle/chunks/plan-RKZHQVXR.js.map +0 -1
  438. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +0 -1
  439. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +0 -7
  440. package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +0 -1
  441. package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +0 -7
  442. package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js.map +0 -1
  443. package/dist/cli-bundle/chunks/register-operations-HZ6XERQG.js.map +0 -7
  444. package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +0 -1
  445. package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +0 -7
  446. package/dist/cli-bundle/chunks/restore-YALDGTQR.js +0 -17
  447. package/dist/cli-bundle/chunks/telemetry-BZUF6H7G.js.map +0 -1
  448. package/dist/cli-bundle/chunks/telemetry-GAHHQTOS.js.map +0 -7
  449. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js +0 -358
  450. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js.map +0 -1
  451. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js +0 -361
  452. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js.map +0 -7
  453. package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +0 -7
  454. package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +0 -1
  455. package/dist/cli-bundle/chunks/update-AMRSOIWP.js +0 -24
  456. package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +0 -7
  457. package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +0 -1
  458. /package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js.map → activity-CUC4JY3U.js.map} +0 -0
  459. /package/dist/cli-bundle/chunks/{activity-AW6XVFH6.js.map → activity-WEIEMM73.js.map} +0 -0
  460. /package/dist/cli-bundle/chunks/{append-QCFJSDFL.js.map → append-H32VOR2Y.js.map} +0 -0
  461. /package/dist/cli-bundle/chunks/{append-LOVPGVPT.js.map → append-UBM632FK.js.map} +0 -0
  462. /package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js.map → chunk-2ASNV4DH.js.map} +0 -0
  463. /package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js.map → chunk-2CHRYUXL.js.map} +0 -0
  464. /package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js.map → chunk-3AZUFQK6.js.map} +0 -0
  465. /package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js.map → chunk-3LCUASYG.js.map} +0 -0
  466. /package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js.map → chunk-3Q2HBMTI.js.map} +0 -0
  467. /package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js.map → chunk-55XRYWEG.js.map} +0 -0
  468. /package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js.map → chunk-5GVTFFTC.js.map} +0 -0
  469. /package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js.map → chunk-A6VOGKBA.js.map} +0 -0
  470. /package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js.map → chunk-AIAIXG7I.js.map} +0 -0
  471. /package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js.map → chunk-AJEBCRIY.js.map} +0 -0
  472. /package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js.map → chunk-BTX5MIQF.js.map} +0 -0
  473. /package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js.map → chunk-BVZZN2LH.js.map} +0 -0
  474. /package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js.map → chunk-CYBDUHNO.js.map} +0 -0
  475. /package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js.map → chunk-CZPVDLD2.js.map} +0 -0
  476. /package/dist/cli-bundle/chunks/{chunk-JPECA746.js.map → chunk-EUKTMRN3.js.map} +0 -0
  477. /package/dist/cli-bundle/chunks/{chunk-2466X6E4.js.map → chunk-FFOQHGNH.js.map} +0 -0
  478. /package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js.map → chunk-GFMSLORL.js.map} +0 -0
  479. /package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js.map → chunk-GRRG3MCT.js.map} +0 -0
  480. /package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js.map → chunk-H4GRLYJS.js.map} +0 -0
  481. /package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js.map → chunk-HQTPRV4D.js.map} +0 -0
  482. /package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js.map → chunk-IEEJQCZ4.js.map} +0 -0
  483. /package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js.map → chunk-JMK5GCK2.js.map} +0 -0
  484. /package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js.map → chunk-K2VYLVX4.js.map} +0 -0
  485. /package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js.map → chunk-KCO2EAN5.js.map} +0 -0
  486. /package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js.map → chunk-KIYCOJ63.js.map} +0 -0
  487. /package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js.map → chunk-KLXF7NCC.js.map} +0 -0
  488. /package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js.map → chunk-KN3URLKS.js.map} +0 -0
  489. /package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js.map → chunk-LRKMWUUV.js.map} +0 -0
  490. /package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js.map → chunk-LTRAF2D7.js.map} +0 -0
  491. /package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js.map → chunk-MRD4T5LF.js.map} +0 -0
  492. /package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js.map → chunk-N2JSWVWG.js.map} +0 -0
  493. /package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js.map → chunk-N3QCJS4M.js.map} +0 -0
  494. /package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js.map → chunk-OTUJZKGI.js.map} +0 -0
  495. /package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js.map → chunk-QH3FSKRJ.js.map} +0 -0
  496. /package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js.map → chunk-S62UANU7.js.map} +0 -0
  497. /package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js.map → chunk-SYNKD3ZG.js.map} +0 -0
  498. /package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js.map → chunk-U2BEEM2X.js.map} +0 -0
  499. /package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js.map → chunk-UT73HUPC.js.map} +0 -0
  500. /package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js.map → chunk-UTSH5GWX.js.map} +0 -0
  501. /package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js.map → chunk-XWGEMNBR.js.map} +0 -0
  502. /package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js.map → chunk-Y4NRKBFW.js.map} +0 -0
  503. /package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js.map → chunk-YPKFV2JR.js.map} +0 -0
  504. /package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js.map → chunk-ZNHEYCDD.js.map} +0 -0
  505. /package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
  506. /package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js.map → claim-SENTPZBN.js.map} +0 -0
  507. /package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js.map → claim-Z7MEQCBT.js.map} +0 -0
  508. /package/dist/cli-bundle/chunks/{close-TQYAAFJP.js.map → close-424MX4CU.js.map} +0 -0
  509. /package/dist/cli-bundle/chunks/{close-E6ZZGCJY.js.map → close-YCWQQPDS.js.map} +0 -0
  510. /package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js.map → comments-4FGNTSNV.js.map} +0 -0
  511. /package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js.map → comments-7YS5MY5X.js.map} +0 -0
  512. /package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js.map → context-LHVKJSPJ.js.map} +0 -0
  513. /package/dist/cli-bundle/chunks/{context-B6275WPX.js.map → context-ZQY54JNS.js.map} +0 -0
  514. /package/dist/cli-bundle/chunks/{copy-DEM4DATS.js.map → copy-GYNQQPW2.js.map} +0 -0
  515. /package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js.map → copy-TLW7JTQT.js.map} +0 -0
  516. /package/dist/cli-bundle/chunks/{create-RLRJMRTM.js.map → create-VSKYSOCD.js.map} +0 -0
  517. /package/dist/cli-bundle/chunks/{create-OH3BDGBB.js.map → create-XTMAPS7I.js.map} +0 -0
  518. /package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js.map → delete-4W5JYCEG.js.map} +0 -0
  519. /package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js.map → delete-ANTOTI2I.js.map} +0 -0
  520. /package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js.map → deps-HPPE6MJN.js.map} +0 -0
  521. /package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js.map → deps-ZQZN54EZ.js.map} +0 -0
  522. /package/dist/cli-bundle/chunks/{docs-GYZNVS26.js.map → docs-RPOVFMP3.js.map} +0 -0
  523. /package/dist/cli-bundle/chunks/{docs-26S44RXU.js.map → docs-XJNYBJGE.js.map} +0 -0
  524. /package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js.map → eval-DM6JBZTS.js.map} +0 -0
  525. /package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js.map → eval-RFBI5FGS.js.map} +0 -0
  526. /package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js.map → extension-B3YY4WY5.js.map} +0 -0
  527. /package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js.map → extension-TTSEFQTS.js.map} +0 -0
  528. /package/dist/cli-bundle/chunks/{files-NQHEXUZD.js.map → files-5D65CHGE.js.map} +0 -0
  529. /package/dist/cli-bundle/chunks/{files-MBNICQFM.js.map → files-GPIG77EN.js.map} +0 -0
  530. /package/dist/cli-bundle/chunks/{focus-XZW5423D.js.map → focus-C3PEJV2C.js.map} +0 -0
  531. /package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js.map → focus-ZHN7WIGX.js.map} +0 -0
  532. /package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js.map → gc-D4JQ6OWN.js.map} +0 -0
  533. /package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js.map → gc-VZIXDL32.js.map} +0 -0
  534. /package/dist/cli-bundle/chunks/{history-WSZHY3PN.js.map → history-DD7L7BNL.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{history-NERDJNUB.js.map → history-IL7XCEX2.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{history-redact-MP6CH7U5.js.map → history-redact-IX4YEWMY.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js.map → history-redact-VYCWQFK7.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{init-64XDLQJB.js.map → init-F27NHENZ.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{init-PAX32BJA.js.map → init-HHVQQP6C.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js.map → learnings-HJVDQIGY.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js.map → learnings-XSFSUUWK.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{list-G5Y65VF6.js.map → list-HPMEKCAA.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{list-DNBJVO3E.js.map → list-VMPWTURB.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js.map → notes-GDZIKGR6.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js.map → notes-WDDBPC4D.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{profile-QLER5ENE.js.map → profile-CCOKZ2IQ.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{profile-4OMM32CD.js.map → profile-HUCENIEQ.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js.map → restore-4CBWUMCX.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{restore-YALDGTQR.js.map → restore-5UEAGG3W.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{schema-73HR2OJW.js.map → schema-TDGK6N3I.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js.map → schema-UE5KKAUX.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{search-KILGT37L.js.map → search-FP7MEU4S.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{search-AXPXKZER.js.map → search-K4CFLQ5S.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js.map → stats-NJJCALEZ.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js.map → stats-XT6QRKQY.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{test-ACD52Z3S.js.map → test-UFSJ5YIO.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{test-PWDIZ255.js.map → test-YCDAUBWF.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{update-AMRSOIWP.js.map → update-MTCFES6X.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{update-KFX2SIAC.js.map → update-Y5WQVT5O.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js.map → upgrade-DTAHZ236.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js.map → upgrade-JUDU7YL4.js.map} +0 -0
@@ -13,7 +13,7 @@ import {
13
13
  resolveSearchCorpusFields,
14
14
  resolveSettingsWithSemanticRuntimeDefaults,
15
15
  resolveVectorStores
16
- } from "./chunk-4DSGXSBL.js";
16
+ } from "./chunk-7TH5NMVB.js";
17
17
  import {
18
18
  applyFilterValueEcho,
19
19
  buildContentFilterEcho,
@@ -24,7 +24,7 @@ import {
24
24
  parseStatusFilterCsv,
25
25
  resolveContentFieldFilters,
26
26
  resolveMissingMetadataFilters
27
- } from "./chunk-3S2KT7NG.js";
27
+ } from "./chunk-W47SML5B.js";
28
28
  import {
29
29
  hasContentFieldFilter,
30
30
  itemMatchesContentFilters
@@ -33,27 +33,27 @@ import {
33
33
  hasMissingMetadataFilter,
34
34
  itemMatchesMissingMetadata,
35
35
  lifecycleClassifierFromStatusRegistry
36
- } from "./chunk-NFDPYAIP.js";
36
+ } from "./chunk-36UGKF4O.js";
37
37
  import {
38
38
  parseLimit,
39
39
  parsePriority,
40
40
  parseType
41
- } from "./chunk-4DUVCVLZ.js";
41
+ } from "./chunk-JMK5GCK2.js";
42
42
  import {
43
43
  collectRegisteredItemFieldNames,
44
44
  listAllDocumentCandidatesCached,
45
45
  listAllFrontMatter,
46
46
  toItemRecord
47
- } from "./chunk-3K2M5OYU.js";
47
+ } from "./chunk-JXAUVO6X.js";
48
48
  import {
49
49
  isTerminalStatus,
50
50
  parseItemDocument
51
- } from "./chunk-BHO33VBQ.js";
51
+ } from "./chunk-IEEJQCZ4.js";
52
52
  import {
53
53
  compareTimestampStrings,
54
54
  nowIso,
55
55
  resolveIsoOrRelative
56
- } from "./chunk-WYDHYJPO.js";
56
+ } from "./chunk-AIAIXG7I.js";
57
57
  import {
58
58
  EXIT_CODE,
59
59
  PmCliError,
@@ -73,7 +73,7 @@ import {
73
73
  runActiveOnReadHooks,
74
74
  toNonEmptyString,
75
75
  toNonEmptyStringOrUndefined
76
- } from "./chunk-RVUALSJF.js";
76
+ } from "./chunk-7NSPKJUS.js";
77
77
 
78
78
  // dist/cli/commands/search.js
79
79
  import fs from "node:fs/promises";
@@ -455,7 +455,7 @@ function resolveBm25Params(settings) {
455
455
  !(function() {
456
456
  try {
457
457
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
458
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "abfd6249-f15e-50a9-867a-69c5d305e97e");
458
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "fe9c6a3a-fb99-53ed-9a6c-8c32bb745364");
459
459
  } catch (e2) {
460
460
  }
461
461
  })();
@@ -532,8 +532,6 @@ var LONG_QUERY_PHRASE_MULTIPLIER = 6;
532
532
  var ALL_TERMS_COVERAGE_BONUS = 40;
533
533
  var EXACT_ID_MATCH_SCORE = 1e3;
534
534
  var SHORT_ID_MATCH_SCORE = 900;
535
- var IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS = 8e3;
536
- var IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS = 8e3;
537
535
  var HIGHLIGHT_OPEN = "\xAB";
538
536
  var HIGHLIGHT_CLOSE = "\xBB";
539
537
  var HIGHLIGHT_SNIPPET_RADIUS = 60;
@@ -655,16 +653,6 @@ function classifyImplicitSemanticFallbackReason(error) {
655
653
  }
656
654
  return "error";
657
655
  }
658
- function buildImplicitSemanticFallbackWarning(error) {
659
- const reason = classifyImplicitSemanticFallbackReason(error);
660
- if (reason === "timeout") {
661
- return "search_implicit_semantic_fallback:timeout:using_keyword_mode";
662
- }
663
- if (reason === "connection") {
664
- return "search_implicit_semantic_fallback:connection:using_keyword_mode";
665
- }
666
- return "search_implicit_semantic_fallback:error:using_keyword_mode";
667
- }
668
656
  function buildExplicitSemanticFallbackWarning(requestedMode, error) {
669
657
  const reason = classifyImplicitSemanticFallbackReason(error);
670
658
  return `search_${requestedMode}_fallback:${reason}:using_keyword_mode`;
@@ -796,7 +784,6 @@ var _testOnlySearchCommand = {
796
784
  buildExplicitSemanticFallbackWarning,
797
785
  buildCompactSearchFilterSummary,
798
786
  buildHybridLexicalScore,
799
- buildImplicitSemanticFallbackWarning,
800
787
  buildRerankCorpus,
801
788
  buildSemanticHits,
802
789
  classifyImplicitSemanticFallbackReason,
@@ -1508,8 +1495,12 @@ function resolveExtensionVectorAdapter(settings) {
1508
1495
  if (typeof query !== "function") {
1509
1496
  return null;
1510
1497
  }
1498
+ const upsert = runtimeDefinition.upsert;
1499
+ const runtimeAdapterName = toOptionalNonEmptyString(runtimeDefinition.name) ?? toOptionalNonEmptyString(resolved.definition.name) ?? adapterName ?? "extension";
1511
1500
  return {
1512
- query
1501
+ adapterName: runtimeAdapterName,
1502
+ query,
1503
+ ...typeof upsert === "function" ? { upsert } : {}
1513
1504
  };
1514
1505
  }
1515
1506
  function normalizeExtensionProviderHits(providerName, raw, filteredById) {
@@ -1676,52 +1667,151 @@ function buildRerankCorpus(document) {
1676
1667
  document.body
1677
1668
  ].map((entry) => typeof entry === "string" ? entry.trim() : "").filter((entry) => entry.length > 0).join("\n");
1678
1669
  }
1679
- async function computeSemanticOrHybridHits(context) {
1680
- const semanticLimit = context.limit ?? context.maxResults;
1681
- const embeddingOptions = context.embeddingTimeoutMs !== void 0 ? { timeout_ms: context.embeddingTimeoutMs } : {};
1682
- const vectorQueryOptions = context.vectorQueryTimeoutMs !== void 0 ? { timeout_ms: context.vectorQueryTimeoutMs } : {};
1683
- const queryTrimmed = context.query.trim();
1670
+ async function resolveExpandedSemanticQueries(context, queryTrimmed) {
1684
1671
  const baseExpandedQueries = context.queryExpansion.enabled ? buildDeterministicQueryExpansions(queryTrimmed, context.queryExpansion.max_queries) : [queryTrimmed];
1685
- let expandedQueries = baseExpandedQueries.length > 0 ? baseExpandedQueries : [queryTrimmed];
1686
- if (context.queryExpansion.enabled) {
1687
- if (context.queryExpansionExtension?.expand) {
1688
- try {
1689
- const rawExpansion = await Promise.resolve(context.queryExpansionExtension.expand({
1690
- query: queryTrimmed,
1691
- mode: context.requestedMode,
1692
- settings: context.settings
1693
- }));
1694
- const extensionExpansion = normalizeQueryExpansionOutput(rawExpansion);
1695
- expandedQueries = mergeQueryExpansions(expandedQueries, extensionExpansion, context.queryExpansion.max_queries);
1696
- } catch {
1697
- context.warnings.push(`search_query_expansion_provider_failed:${context.queryExpansionExtension.providerName}:using_builtin`);
1698
- }
1699
- } else if (context.queryExpansion.provider && context.queryExpansion.provider !== "openai" && context.queryExpansion.provider !== "ollama") {
1700
- context.warnings.push(`search_query_expansion_provider_unavailable:${context.queryExpansion.provider}:using_builtin`);
1672
+ const expandedQueries = baseExpandedQueries.length > 0 ? baseExpandedQueries : [queryTrimmed];
1673
+ if (!context.queryExpansion.enabled) {
1674
+ return expandedQueries;
1675
+ }
1676
+ if (context.queryExpansionExtension?.expand) {
1677
+ try {
1678
+ const rawExpansion = await Promise.resolve(context.queryExpansionExtension.expand({
1679
+ query: queryTrimmed,
1680
+ mode: context.requestedMode,
1681
+ settings: context.settings
1682
+ }));
1683
+ return mergeQueryExpansions(expandedQueries, normalizeQueryExpansionOutput(rawExpansion), context.queryExpansion.max_queries);
1684
+ } catch {
1685
+ context.warnings.push(`search_query_expansion_provider_failed:${context.queryExpansionExtension.providerName}:using_builtin`);
1686
+ return expandedQueries;
1701
1687
  }
1702
1688
  }
1703
- const queryVectors = await executeEmbeddingRequest(context.provider, expandedQueries, embeddingOptions);
1704
- const executeVectorQueryWithFallback = async (semanticVector) => {
1705
- if (context.extensionVectorAdapter?.query) {
1706
- try {
1707
- return await Promise.resolve(context.extensionVectorAdapter.query({
1708
- vector: semanticVector,
1709
- limit: semanticLimit,
1710
- settings: context.settings
1711
- }));
1712
- } catch (error) {
1713
- if (!context.vectorStore) {
1714
- throw new PmCliError(`Extension vector adapter query failed and no built-in fallback store is configured (${error instanceof Error ? error.message : String(error)})`, EXIT_CODE.GENERIC_FAILURE);
1715
- }
1716
- return await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);
1689
+ if (context.queryExpansion.provider && context.queryExpansion.provider !== "openai" && context.queryExpansion.provider !== "ollama") {
1690
+ context.warnings.push(`search_query_expansion_provider_unavailable:${context.queryExpansion.provider}:using_builtin`);
1691
+ }
1692
+ return expandedQueries;
1693
+ }
1694
+ async function executeSemanticVectorQuery(context, semanticVector, semanticLimit, vectorQueryOptions) {
1695
+ if (context.extensionVectorAdapter?.query) {
1696
+ try {
1697
+ return await Promise.resolve(context.extensionVectorAdapter.query({
1698
+ vector: semanticVector,
1699
+ limit: semanticLimit,
1700
+ settings: context.settings
1701
+ }));
1702
+ } catch (error) {
1703
+ if (!context.vectorStore) {
1704
+ throw new PmCliError(`Extension vector adapter query failed and no built-in fallback store is configured (${error instanceof Error ? error.message : String(error)})`, EXIT_CODE.GENERIC_FAILURE);
1717
1705
  }
1718
- }
1719
- if (context.vectorStore) {
1706
+ context.warnings.push(`search_vector_adapter_failed:${context.extensionVectorAdapter.adapterName}:using_builtin`);
1720
1707
  return await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);
1721
1708
  }
1722
- throw new PmCliError("Semantic search requires either a configured vector store or an extension vector adapter query handler", EXIT_CODE.USAGE);
1723
- };
1724
- const queryVectorGroups = await Promise.all(queryVectors.map(async (semanticVector) => await executeVectorQueryWithFallback(semanticVector)));
1709
+ }
1710
+ if (context.vectorStore) {
1711
+ return await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);
1712
+ }
1713
+ throw new PmCliError("Semantic search requires either a configured vector store or an extension vector adapter query handler", EXIT_CODE.USAGE);
1714
+ }
1715
+ function buildRerankCandidateContexts(hybridHits, filteredById, topK) {
1716
+ const sortedForCandidates = [...hybridHits].sort((left, right) => {
1717
+ if (left.score !== right.score) {
1718
+ return right.score - left.score;
1719
+ }
1720
+ return left.item.id.localeCompare(right.item.id);
1721
+ });
1722
+ return sortedForCandidates.slice(0, topK).map((hit) => {
1723
+ const document = filteredById.get(hit.item.id);
1724
+ return document ? { hit, text: buildRerankCorpus(document) } : null;
1725
+ }).filter((entry) => entry !== null);
1726
+ }
1727
+ async function resolveExtensionRerankScores(context, queryTrimmed, candidateContexts) {
1728
+ if (!context.rerankExtension?.rerank) {
1729
+ return null;
1730
+ }
1731
+ try {
1732
+ const rawRerank = await Promise.resolve(context.rerankExtension.rerank({
1733
+ query: queryTrimmed,
1734
+ mode: "hybrid",
1735
+ model: context.rerank.model,
1736
+ top_k: context.rerank.top_k,
1737
+ settings: context.settings,
1738
+ candidates: candidateContexts.map((entry) => ({
1739
+ id: entry.hit.item.id,
1740
+ text: entry.text,
1741
+ score: entry.hit.score
1742
+ }))
1743
+ }));
1744
+ const normalizedRerank = normalizeRerankOutput(rawRerank);
1745
+ if (normalizedRerank.length > 0) {
1746
+ return new Map(normalizedRerank.map((entry) => [entry.id, entry.score]));
1747
+ }
1748
+ context.warnings.push(`search_rerank_provider_invalid_response:${context.rerankExtension.providerName}:using_builtin`);
1749
+ return null;
1750
+ } catch {
1751
+ context.warnings.push(`search_rerank_provider_failed:${context.rerankExtension.providerName}:using_builtin`);
1752
+ return null;
1753
+ }
1754
+ }
1755
+ async function resolveRerankScores(context, queryTrimmed, candidateContexts) {
1756
+ const extensionScores = await resolveExtensionRerankScores(context, queryTrimmed, candidateContexts);
1757
+ if (extensionScores) {
1758
+ return extensionScores;
1759
+ }
1760
+ const rerankCandidates = candidateContexts.map((entry) => ({
1761
+ id: entry.hit.item.id,
1762
+ text: entry.text
1763
+ }));
1764
+ try {
1765
+ return await rerankCandidatesWithEmbeddings(context.provider, context.rerank.model, queryTrimmed, rerankCandidates, context.embeddingTimeoutMs);
1766
+ } catch {
1767
+ context.warnings.push("search_rerank_failed:using_hybrid_scores");
1768
+ return null;
1769
+ }
1770
+ }
1771
+ function applyRerankScores(hybridHits, rerankScores) {
1772
+ const rerankedIds = new Set(rerankScores.keys());
1773
+ const rerankedHits = hybridHits.map((hit) => {
1774
+ const rerankScore = rerankScores.get(hit.item.id);
1775
+ if (rerankScore === void 0) {
1776
+ return hit;
1777
+ }
1778
+ const matchedFields = new Set(hit.matched_fields);
1779
+ matchedFields.add("rerank");
1780
+ return {
1781
+ ...hit,
1782
+ score: rerankScore,
1783
+ matched_fields: [...matchedFields].sort((left, right) => left.localeCompare(right))
1784
+ };
1785
+ });
1786
+ rerankedHits.sort((left, right) => {
1787
+ const leftWasReranked = rerankedIds.has(left.item.id);
1788
+ const rightWasReranked = rerankedIds.has(right.item.id);
1789
+ if (leftWasReranked !== rightWasReranked) {
1790
+ return leftWasReranked ? -1 : 1;
1791
+ }
1792
+ if (left.score !== right.score) {
1793
+ return right.score - left.score;
1794
+ }
1795
+ return left.item.id.localeCompare(right.item.id);
1796
+ });
1797
+ return rerankedHits;
1798
+ }
1799
+ async function applyHybridRerank(context, queryTrimmed, hybridHits, filteredById) {
1800
+ if (!context.rerank.enabled || hybridHits.length <= 1) {
1801
+ return hybridHits;
1802
+ }
1803
+ const candidateContexts = buildRerankCandidateContexts(hybridHits, filteredById, context.rerank.top_k);
1804
+ const rerankScores = await resolveRerankScores(context, queryTrimmed, candidateContexts);
1805
+ return rerankScores && rerankScores.size > 0 ? applyRerankScores(hybridHits, rerankScores) : hybridHits;
1806
+ }
1807
+ async function computeSemanticOrHybridHits(context) {
1808
+ const semanticLimit = context.limit ?? context.maxResults;
1809
+ const embeddingOptions = context.embeddingTimeoutMs !== void 0 ? { timeout_ms: context.embeddingTimeoutMs } : {};
1810
+ const vectorQueryOptions = context.vectorQueryTimeoutMs !== void 0 ? { timeout_ms: context.vectorQueryTimeoutMs } : {};
1811
+ const queryTrimmed = context.query.trim();
1812
+ const expandedQueries = await resolveExpandedSemanticQueries(context, queryTrimmed);
1813
+ const queryVectors = await executeEmbeddingRequest(context.provider, expandedQueries, embeddingOptions);
1814
+ const queryVectorGroups = await Promise.all(queryVectors.map(async (semanticVector) => await executeSemanticVectorQuery(context, semanticVector, semanticLimit, vectorQueryOptions)));
1725
1815
  const vectorHits = mergeVectorHitsById(queryVectorGroups);
1726
1816
  const filteredById = new Map(context.filteredDocuments.map((document) => [document.metadata.id, document]));
1727
1817
  const { semanticHits, semanticScores } = buildSemanticHits(vectorHits, filteredById);
@@ -1729,86 +1819,7 @@ async function computeSemanticOrHybridHits(context) {
1729
1819
  if (context.requestedMode === "semantic") {
1730
1820
  return { hits: forceExactIdHitsToTop(semanticHits, context.keywordHits), vectorMatchCount };
1731
1821
  }
1732
- let hybridHits = combineHybridHits(filteredById, semanticScores, context.keywordHits, context.hybridSemanticWeight);
1733
- if (context.rerank.enabled && hybridHits.length > 1) {
1734
- const sortedForCandidates = [...hybridHits].sort((left, right) => {
1735
- if (left.score !== right.score) {
1736
- return right.score - left.score;
1737
- }
1738
- return left.item.id.localeCompare(right.item.id);
1739
- });
1740
- const candidateHits = sortedForCandidates.slice(0, context.rerank.top_k);
1741
- const candidateContexts = candidateHits.map((hit) => {
1742
- const document = filteredById.get(hit.item.id);
1743
- if (!document) {
1744
- return null;
1745
- }
1746
- return { hit, text: buildRerankCorpus(document) };
1747
- }).filter((entry) => entry !== null);
1748
- const rerankCandidates = candidateContexts.map((entry) => ({
1749
- id: entry.hit.item.id,
1750
- text: entry.text
1751
- }));
1752
- let rerankScores = null;
1753
- if (context.rerankExtension?.rerank) {
1754
- try {
1755
- const rawRerank = await Promise.resolve(context.rerankExtension.rerank({
1756
- query: queryTrimmed,
1757
- mode: "hybrid",
1758
- model: context.rerank.model,
1759
- top_k: context.rerank.top_k,
1760
- settings: context.settings,
1761
- candidates: candidateContexts.map((entry) => ({
1762
- id: entry.hit.item.id,
1763
- text: entry.text,
1764
- score: entry.hit.score
1765
- }))
1766
- }));
1767
- const normalizedRerank = normalizeRerankOutput(rawRerank);
1768
- if (normalizedRerank.length > 0) {
1769
- rerankScores = new Map(normalizedRerank.map((entry) => [entry.id, entry.score]));
1770
- } else {
1771
- context.warnings.push(`search_rerank_provider_invalid_response:${context.rerankExtension.providerName}:using_builtin`);
1772
- }
1773
- } catch {
1774
- context.warnings.push(`search_rerank_provider_failed:${context.rerankExtension.providerName}:using_builtin`);
1775
- }
1776
- }
1777
- if (!rerankScores) {
1778
- try {
1779
- rerankScores = await rerankCandidatesWithEmbeddings(context.provider, context.rerank.model, queryTrimmed, rerankCandidates, context.embeddingTimeoutMs);
1780
- } catch {
1781
- context.warnings.push("search_rerank_failed:using_hybrid_scores");
1782
- }
1783
- }
1784
- if (rerankScores && rerankScores.size > 0) {
1785
- const rerankedIds = new Set(rerankScores.keys());
1786
- hybridHits = hybridHits.map((hit) => {
1787
- const rerankScore = rerankScores.get(hit.item.id);
1788
- if (rerankScore === void 0) {
1789
- return hit;
1790
- }
1791
- const matchedFields = new Set(hit.matched_fields);
1792
- matchedFields.add("rerank");
1793
- return {
1794
- ...hit,
1795
- score: rerankScore,
1796
- matched_fields: [...matchedFields].sort((left, right) => left.localeCompare(right))
1797
- };
1798
- });
1799
- hybridHits.sort((left, right) => {
1800
- const leftWasReranked = rerankedIds.has(left.item.id);
1801
- const rightWasReranked = rerankedIds.has(right.item.id);
1802
- if (leftWasReranked !== rightWasReranked) {
1803
- return leftWasReranked ? -1 : 1;
1804
- }
1805
- if (left.score !== right.score) {
1806
- return right.score - left.score;
1807
- }
1808
- return left.item.id.localeCompare(right.item.id);
1809
- });
1810
- }
1811
- }
1822
+ const hybridHits = await applyHybridRerank(context, queryTrimmed, combineHybridHits(filteredById, semanticScores, context.keywordHits, context.hybridSemanticWeight), filteredById);
1812
1823
  return {
1813
1824
  // GH-281: applied LAST (after any rerank reordering) so an exact full-ID /
1814
1825
  // short-ID keyword match always ranks #1 in hybrid mode regardless of the
@@ -1919,7 +1930,15 @@ function projectSearchHits(hits, projection) {
1919
1930
  return projected;
1920
1931
  });
1921
1932
  }
1922
- async function runSearch(rawQuery, rawOptions, global2) {
1933
+ function resolveQueryExpansionExtension(queryExpansion) {
1934
+ const provider = resolveExtensionSearchProviderByName(queryExpansion.provider ?? void 0);
1935
+ return provider?.queryExpansion ? { providerName: provider.providerName, expand: provider.queryExpansion } : null;
1936
+ }
1937
+ function resolveRerankExtension(settings) {
1938
+ const provider = resolveExtensionSearchProviderByName(toOptionalNonEmptyString(settings.search?.provider));
1939
+ return provider?.rerank ? { providerName: provider.providerName, rerank: provider.rerank } : null;
1940
+ }
1941
+ function prepareSearchInput(rawQuery, rawOptions) {
1923
1942
  const inlineWarnings = [];
1924
1943
  const inlineParse = parseInlineQueryFilters(rawQuery);
1925
1944
  const hasInlineFilters = Object.keys(inlineParse.inlineFilters).length > 0;
@@ -1933,310 +1952,380 @@ async function runSearch(rawQuery, rawOptions, global2) {
1933
1952
  }
1934
1953
  const query = hasInlineFilters ? inlineParse.residualQuery : rawQuery;
1935
1954
  const options = applyInlineQueryFilters(rawOptions, inlineParse.inlineFilters, inlineWarnings);
1936
- const highlight = options.highlight === true;
1937
- const includeLinked = parseIncludeLinked(options.includeLinked);
1938
- const titleExact = parseTitleExact(options.titleExact);
1939
- const phraseExact = parsePhraseExact(options.phraseExact);
1940
- const matchMode = parseMatchMode(typeof options.matchMode === "string" ? options.matchMode : void 0);
1941
- const minScoreOverride = parseMinScoreOverride(options.minScore);
1942
- const countOnly = options.count === true;
1943
- const tokens = parseTokens(query);
1944
- const normalizedQuery = normalizeSearchPhrase(query);
1945
- const limit = parseLimit(options.limit);
1946
- const projection = parseProjectionConfig(options);
1947
- const modeWasExplicit = typeof options.mode === "string" && options.mode.trim().length > 0;
1955
+ return {
1956
+ query,
1957
+ options,
1958
+ inlineWarnings,
1959
+ highlight: options.highlight === true,
1960
+ includeLinked: parseIncludeLinked(options.includeLinked),
1961
+ titleExact: parseTitleExact(options.titleExact),
1962
+ phraseExact: parsePhraseExact(options.phraseExact),
1963
+ matchMode: parseMatchMode(typeof options.matchMode === "string" ? options.matchMode : void 0),
1964
+ minScoreOverride: parseMinScoreOverride(options.minScore),
1965
+ countOnly: options.count === true,
1966
+ tokens: parseTokens(query),
1967
+ normalizedQuery: normalizeSearchPhrase(query),
1968
+ limit: parseLimit(options.limit),
1969
+ projection: parseProjectionConfig(options),
1970
+ modeWasExplicit: typeof options.mode === "string" && options.mode.trim().length > 0
1971
+ };
1972
+ }
1973
+ async function resolveSearchRuntimeContext(prepared, global2) {
1948
1974
  const pmRoot = resolvePmRoot(process.cwd(), global2.path);
1949
1975
  if (!await pathExists(getSettingsPath(pmRoot))) {
1950
1976
  throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1951
1977
  }
1952
1978
  const storedSettings = await readSettings(pmRoot);
1953
- const runtimeDefaultsResolution = resolveSettingsWithSemanticRuntimeDefaults(storedSettings);
1954
- const settings = runtimeDefaultsResolution.settings;
1979
+ const settings = resolveSettingsWithSemanticRuntimeDefaults(storedSettings).settings;
1955
1980
  const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
1956
1981
  const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);
1957
- validateSearchProjectionFields(projection, runtimeFieldRegistry);
1958
- const runtimeFieldFilters = collectRuntimeFilterValues(options, runtimeFieldRegistry, "search");
1959
- const statusFilter = parseStatusFilterCsv(typeof options.status === "string" ? options.status : void 0, statusRegistry, { strict: true });
1982
+ validateSearchProjectionFields(prepared.projection, runtimeFieldRegistry);
1983
+ const runtimeFieldFilters = collectRuntimeFilterValues(prepared.options, runtimeFieldRegistry, "search");
1960
1984
  const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1961
- const maxResults = resolveSearchMaxResults(settings);
1962
- const scoreThreshold = minScoreOverride ?? resolveSearchScoreThreshold(settings);
1963
- const semanticWeightProvided = options.semanticWeight !== void 0;
1964
- const semanticWeightOverride = parseSemanticWeightOverride(options.semanticWeight);
1965
- const hybridSemanticWeight = semanticWeightOverride ?? resolveHybridSemanticWeight(settings);
1966
- const tuning = resolveSearchTuning(settings);
1967
1985
  const providerResolution = resolveEmbeddingProviders(settings);
1968
1986
  const vectorResolution = resolveVectorStores(settings);
1969
1987
  const extensionSearchProvider = resolveExtensionSearchProvider(settings);
1970
1988
  const extensionVectorAdapter = resolveExtensionVectorAdapter(settings);
1971
- const bm25Mode = resolveBuiltInBm25Mode({
1972
- configuredProvider: toOptionalNonEmptyString(settings.search?.provider),
1973
- hasEmbeddingProvider: providerResolution.active !== null,
1974
- hasExtensionSearchProvider: extensionSearchProvider !== null
1975
- });
1989
+ const semanticWeightOverride = parseSemanticWeightOverride(prepared.options.semanticWeight);
1976
1990
  const queryExpansion = resolveQueryExpansionConfig(settings, providerResolution.active?.name ?? null);
1977
1991
  const rerank = resolveRerankConfig(settings, providerResolution.active?.model ?? toOptionalNonEmptyString(settings.search?.embedding_model) ?? "text-embedding-3-small");
1978
- const queryExpansionProvider = resolveExtensionSearchProviderByName(queryExpansion.provider ?? void 0);
1979
- const queryExpansionExtension = queryExpansionProvider?.queryExpansion ? { providerName: queryExpansionProvider.providerName, expand: queryExpansionProvider.queryExpansion } : null;
1980
- const rerankProvider = resolveExtensionSearchProviderByName(toOptionalNonEmptyString(settings.search?.provider));
1981
- const rerankExtension = rerankProvider?.rerank ? { providerName: rerankProvider.providerName, rerank: rerankProvider.rerank } : null;
1982
- let effectiveMode = parseMode(options.mode, {
1983
- hasProvider: providerResolution.active !== null || extensionSearchProvider !== null,
1984
- hasVectorStore: vectorResolution.active !== null || extensionVectorAdapter !== null
1985
- });
1986
- const loadedDocuments = await loadDocuments(pmRoot, settings.item_format ?? "toon", typeRegistry.type_to_folder, settings.schema);
1987
- const warnings = loadedDocuments.warnings;
1988
- if (inlineWarnings.length > 0) {
1989
- warnings.push(...inlineWarnings);
1992
+ return {
1993
+ pmRoot,
1994
+ settings,
1995
+ statusRegistry,
1996
+ runtimeFieldRegistry,
1997
+ runtimeFieldFilters,
1998
+ typeRegistry,
1999
+ maxResults: resolveSearchMaxResults(settings),
2000
+ scoreThreshold: prepared.minScoreOverride ?? resolveSearchScoreThreshold(settings),
2001
+ semanticWeightProvided: prepared.options.semanticWeight !== void 0,
2002
+ semanticWeightOverride,
2003
+ hybridSemanticWeight: semanticWeightOverride ?? resolveHybridSemanticWeight(settings),
2004
+ tuning: resolveSearchTuning(settings),
2005
+ providerResolution,
2006
+ vectorResolution,
2007
+ extensionSearchProvider,
2008
+ extensionVectorAdapter,
2009
+ bm25Mode: resolveBuiltInBm25Mode({
2010
+ configuredProvider: toOptionalNonEmptyString(settings.search?.provider),
2011
+ hasEmbeddingProvider: providerResolution.active !== null,
2012
+ hasExtensionSearchProvider: extensionSearchProvider !== null
2013
+ }),
2014
+ queryExpansion,
2015
+ queryExpansionExtension: resolveQueryExpansionExtension(queryExpansion),
2016
+ rerank,
2017
+ rerankExtension: resolveRerankExtension(settings),
2018
+ effectiveMode: parseMode(prepared.options.mode, {
2019
+ hasProvider: providerResolution.active !== null || extensionSearchProvider !== null,
2020
+ hasVectorStore: vectorResolution.active !== null || extensionVectorAdapter !== null
2021
+ })
2022
+ };
2023
+ }
2024
+ async function loadFilteredSearchCorpus(prepared, runtime) {
2025
+ const loadedDocuments = await loadDocuments(runtime.pmRoot, runtime.settings.item_format ?? "toon", runtime.typeRegistry.type_to_folder, runtime.settings.schema);
2026
+ const statusFilter = parseStatusFilterCsv(typeof prepared.options.status === "string" ? prepared.options.status : void 0, runtime.statusRegistry, { strict: true });
2027
+ const lifecycleClassifier = lifecycleClassifierFromStatusRegistry(runtime.statusRegistry);
2028
+ const metadataFilteredDocuments = applyFilters(loadedDocuments.documents, prepared.options, runtime.typeRegistry, runtime.runtimeFieldFilters, statusFilter, lifecycleClassifier);
2029
+ return {
2030
+ warnings: loadedDocuments.warnings,
2031
+ allDocuments: loadedDocuments.documents,
2032
+ filteredDocuments: applyExactQueryFilters(metadataFilteredDocuments, prepared.normalizedQuery, {
2033
+ titleExact: prepared.titleExact,
2034
+ phraseExact: prepared.phraseExact || prepared.matchMode === "exact"
2035
+ })
2036
+ };
2037
+ }
2038
+ async function collectLinkedCorpusById(includeLinked, effectiveMode, filteredDocuments) {
2039
+ const linkedCorpusById = /* @__PURE__ */ new Map();
2040
+ if (!includeLinked || effectiveMode !== "keyword" && effectiveMode !== "hybrid") {
2041
+ return linkedCorpusById;
1990
2042
  }
1991
- if (effectiveMode === "hybrid" && semanticWeightProvided && semanticWeightOverride === void 0) {
1992
- warnings.push("search_hybrid_semantic_weight_override_invalid:using_settings_default");
2043
+ const projectRoot = process.cwd();
2044
+ const linkedCorpusRoots = await resolveLinkedCorpusRoots(projectRoot, resolveGlobalPmRoot(projectRoot));
2045
+ const linkedCorpusEntries = await Promise.all(filteredDocuments.map(async (document) => [document.metadata.id, await loadLinkedCorpus(document, linkedCorpusRoots)]));
2046
+ for (const [id, corpus] of linkedCorpusEntries) {
2047
+ linkedCorpusById.set(id, corpus);
2048
+ }
2049
+ return linkedCorpusById;
2050
+ }
2051
+ async function computeKeywordSearchHits(prepared, runtime, filteredDocuments) {
2052
+ const linkedCorpusById = await collectLinkedCorpusById(prepared.includeLinked, runtime.effectiveMode, filteredDocuments);
2053
+ const applyCoverageBonus = prepared.matchMode === "or";
2054
+ return filteredDocuments.map((document) => buildHybridLexicalScore(document, prepared.tokens, prepared.normalizedQuery, prepared.includeLinked, linkedCorpusById, runtime.tuning, runtime.settings.id_prefix, applyCoverageBonus)).filter((entry) => entry !== null).filter((entry) => prepared.matchMode !== "and" || entry.matched_all_terms === true);
2055
+ }
2056
+ function buildEmptySearchResultFromContext(response, countOnly) {
2057
+ return emptySearchResult(response.query, response.effectiveMode, response.matchMode, response.options, response.includeLinked, response.scoreThreshold, response.hybridSemanticWeight, response.queryExpansion, response.rerank, response.projection, response.warnings, response.runtimeFieldFilters, countOnly);
2058
+ }
2059
+ async function executeBuiltInBm25Search(prepared, runtime, filteredDocuments, keywordHits, warnings) {
2060
+ if (runtime.bm25Mode === null || runtime.effectiveMode === "keyword") {
2061
+ return null;
1993
2062
  }
1994
- const allDocuments = loadedDocuments.documents;
1995
- const lifecycleClassifier = lifecycleClassifierFromStatusRegistry(statusRegistry);
1996
- const metadataFilteredDocuments = applyFilters(allDocuments, options, typeRegistry, runtimeFieldFilters, statusFilter, lifecycleClassifier);
1997
- const filteredDocuments = applyExactQueryFilters(metadataFilteredDocuments, normalizedQuery, {
1998
- titleExact,
1999
- // --match-mode exact reuses the exact-phrase containment logic so the whole
2000
- // normalized query must appear as a contiguous phrase in some searchable field.
2001
- phraseExact: phraseExact || matchMode === "exact"
2063
+ const hits = computeBuiltInBm25Hits({
2064
+ requestedMode: runtime.effectiveMode,
2065
+ query: prepared.query,
2066
+ filteredDocuments,
2067
+ keywordHits,
2068
+ corpusFields: resolveSearchCorpusFields(runtime.settings),
2069
+ bm25Params: resolveBm25Params(runtime.settings),
2070
+ hybridSemanticWeight: runtime.hybridSemanticWeight
2002
2071
  });
2003
- if (effectiveMode === "keyword" && (filteredDocuments.length === 0 || limit === 0)) {
2004
- return emptySearchResult(query, effectiveMode, matchMode, options, includeLinked, scoreThreshold, hybridSemanticWeight, queryExpansion, rerank, projection, warnings, runtimeFieldFilters, countOnly);
2072
+ if (runtime.bm25Mode === "auto-fallback") {
2073
+ warnings.push(`search_${runtime.effectiveMode}_offline_bm25:no_embedding_provider:using_lexical_bm25`);
2005
2074
  }
2006
- const projectRoot = process.cwd();
2007
- const globalRoot = resolveGlobalPmRoot(projectRoot);
2008
- const linkedCorpusById = /* @__PURE__ */ new Map();
2009
- if (includeLinked && (effectiveMode === "keyword" || effectiveMode === "hybrid")) {
2010
- const linkedCorpusRoots = await resolveLinkedCorpusRoots(projectRoot, globalRoot);
2011
- const linkedCorpusEntries = await Promise.all(filteredDocuments.map(async (document) => [document.metadata.id, await loadLinkedCorpus(document, linkedCorpusRoots)]));
2012
- for (const [id, corpus] of linkedCorpusEntries) {
2013
- linkedCorpusById.set(id, corpus);
2014
- }
2075
+ return hits;
2076
+ }
2077
+ async function executeExtensionSearchProvider(prepared, runtime, filteredDocuments, filteredById) {
2078
+ if (!runtime.extensionSearchProvider) {
2079
+ return null;
2015
2080
  }
2016
- const applyCoverageBonus = matchMode === "or";
2017
- const keywordHits = filteredDocuments.map((document) => buildHybridLexicalScore(
2018
- document,
2019
- tokens,
2020
- normalizedQuery,
2021
- // Linked corpus is only collected into linkedCorpusById when the user
2022
- // passed --include-linked (and mode is keyword/hybrid), so pass the
2023
- // parsed flag directly rather than re-deriving it from the mode.
2024
- includeLinked,
2025
- linkedCorpusById,
2026
- tuning,
2027
- settings.id_prefix,
2028
- applyCoverageBonus
2029
- )).filter((entry) => entry !== null).filter((entry) => matchMode !== "and" || entry.matched_all_terms === true);
2030
- let hits = keywordHits;
2031
- const useBuiltInBm25 = bm25Mode !== null && effectiveMode !== "keyword";
2032
- if (bm25Mode !== null && effectiveMode !== "keyword") {
2033
- hits = computeBuiltInBm25Hits({
2034
- requestedMode: effectiveMode,
2035
- query,
2036
- filteredDocuments,
2037
- keywordHits,
2038
- corpusFields: resolveSearchCorpusFields(settings),
2039
- bm25Params: resolveBm25Params(settings),
2040
- hybridSemanticWeight
2041
- });
2042
- if (bm25Mode === "auto-fallback") {
2043
- warnings.push(`search_${effectiveMode}_offline_bm25:no_embedding_provider:using_lexical_bm25`);
2081
+ const canUseBuiltInSemantic = runtime.providerResolution.active !== null && (runtime.vectorResolution.active !== null || runtime.extensionVectorAdapter !== null);
2082
+ try {
2083
+ const providerResponse = await Promise.resolve(runtime.extensionSearchProvider.query({
2084
+ query: prepared.query,
2085
+ mode: runtime.effectiveMode,
2086
+ tokens: prepared.tokens,
2087
+ options: prepared.options,
2088
+ settings: runtime.settings,
2089
+ documents: filteredDocuments
2090
+ }));
2091
+ return normalizeExtensionProviderHits(runtime.extensionSearchProvider.providerName, providerResponse, filteredById);
2092
+ } catch (error) {
2093
+ if (!canUseBuiltInSemantic) {
2094
+ throw new PmCliError(`Extension search provider "${runtime.extensionSearchProvider.providerName}" failed: ${error instanceof Error ? error.message : String(error)}`, EXIT_CODE.GENERIC_FAILURE);
2044
2095
  }
2096
+ return null;
2045
2097
  }
2046
- if (effectiveMode !== "keyword" && !useBuiltInBm25) {
2047
- const builtInSemanticWillRun = !extensionSearchProvider && providerResolution.active !== null && (vectorResolution.active !== null || extensionVectorAdapter !== null);
2048
- if (modeWasExplicit && builtInSemanticWillRun) {
2049
- await maybeEmitVectorIndexStaleWarning(pmRoot, filteredDocuments, warnings);
2050
- }
2051
- try {
2052
- if (!extensionSearchProvider) {
2053
- requireSemanticDependencies(effectiveMode, providerResolution, vectorResolution, extensionVectorAdapter !== null);
2054
- }
2055
- if (filteredDocuments.length === 0 || limit === 0) {
2056
- return emptySearchResult(query, effectiveMode, matchMode, options, includeLinked, scoreThreshold, hybridSemanticWeight, queryExpansion, rerank, projection, warnings, runtimeFieldFilters, countOnly);
2057
- }
2058
- const filteredById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
2059
- const canUseBuiltInSemantic = providerResolution.active !== null && (vectorResolution.active !== null || extensionVectorAdapter !== null);
2060
- if (extensionSearchProvider) {
2061
- try {
2062
- const providerResponse = await Promise.resolve(extensionSearchProvider.query({
2063
- query,
2064
- mode: effectiveMode,
2065
- tokens,
2066
- options,
2067
- settings,
2068
- documents: filteredDocuments
2069
- }));
2070
- hits = normalizeExtensionProviderHits(extensionSearchProvider.providerName, providerResponse, filteredById);
2071
- } catch (error) {
2072
- if (!canUseBuiltInSemantic) {
2073
- throw new PmCliError(`Extension search provider "${extensionSearchProvider.providerName}" failed: ${error instanceof Error ? error.message : String(error)}`, EXIT_CODE.GENERIC_FAILURE);
2074
- }
2075
- }
2076
- }
2077
- if (hits === keywordHits) {
2078
- const implicitHybridMode = !modeWasExplicit && effectiveMode === "hybrid";
2079
- const { provider, vectorStore } = requireSemanticDependencies(effectiveMode, providerResolution, vectorResolution, extensionVectorAdapter !== null);
2080
- const semanticResult = await computeSemanticOrHybridHits({
2081
- requestedMode: effectiveMode,
2082
- query,
2083
- filteredDocuments,
2084
- keywordHits,
2085
- hybridSemanticWeight,
2086
- limit,
2087
- maxResults,
2088
- provider,
2089
- vectorStore,
2090
- extensionVectorAdapter,
2091
- queryExpansion,
2092
- queryExpansionExtension,
2093
- rerank,
2094
- rerankExtension,
2095
- warnings,
2096
- settings,
2097
- /* c8 ignore next 5 -- reserved for future implicit-hybrid auto-mode; current parseMode defaults keyword when mode is omitted */
2098
- ...implicitHybridMode ? {
2099
- embeddingTimeoutMs: IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS,
2100
- vectorQueryTimeoutMs: IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS
2101
- } : {}
2102
- });
2103
- hits = semanticResult.hits;
2104
- if (semanticResult.vectorMatchCount === 0) {
2105
- if (effectiveMode === "semantic") {
2106
- hits = keywordHits;
2107
- }
2108
- warnings.push(`search_${effectiveMode}_degraded:no_vector_matches:results_are_lexical`);
2109
- }
2110
- }
2111
- } catch (error) {
2112
- const fallbackWarning = modeWasExplicit ? buildExplicitSemanticFallbackWarning(effectiveMode, error) : buildImplicitSemanticFallbackWarning(error);
2113
- effectiveMode = "keyword";
2114
- hits = keywordHits;
2115
- warnings.push(fallbackWarning);
2116
- }
2098
+ }
2099
+ function maybeApplyNoVectorFallback(effectiveMode, semanticResult, keywordHits, warnings) {
2100
+ if (semanticResult.vectorMatchCount > 0) {
2101
+ return semanticResult.hits;
2117
2102
  }
2118
- const thresholded = hits.filter((entry) => entry.exact_id_match === true || entry.score >= scoreThreshold);
2119
- const sorted = sortHits(thresholded, statusRegistry);
2120
- const total = sorted.length;
2121
- const resolvedLimit = limit ?? maxResults;
2122
- const limited = sorted.slice(0, resolvedLimit);
2123
- const projectionFields = projection.mode === "full" ? null : [...projection.fields];
2124
- const compactSummaryMode = projection.mode === "compact" && options.compact === true;
2125
- if (countOnly) {
2126
- if (compactSummaryMode) {
2127
- const compactFilters = buildCompactSearchFilterSummary({
2128
- mode: effectiveMode,
2129
- matchMode,
2130
- options,
2131
- includeLinked,
2132
- titleExact,
2133
- phraseExact,
2134
- scoreThreshold,
2135
- hybridSemanticWeight,
2136
- runtimeFieldFilters
2103
+ warnings.push(`search_${effectiveMode}_degraded:no_vector_matches:results_are_lexical`);
2104
+ return effectiveMode === "semantic" ? keywordHits : semanticResult.hits;
2105
+ }
2106
+ async function prepareBuiltInSemanticSearch(runtime, effectiveMode, filteredDocuments, warnings, modeWasExplicit) {
2107
+ const builtInSemanticWillRun = !runtime.extensionSearchProvider && runtime.providerResolution.active !== null && (runtime.vectorResolution.active !== null || runtime.extensionVectorAdapter !== null);
2108
+ if (modeWasExplicit && builtInSemanticWillRun) {
2109
+ await maybeEmitVectorIndexStaleWarning(runtime.pmRoot, filteredDocuments, warnings);
2110
+ }
2111
+ if (!runtime.extensionSearchProvider) {
2112
+ requireSemanticDependencies(effectiveMode, runtime.providerResolution, runtime.vectorResolution, runtime.extensionVectorAdapter !== null);
2113
+ }
2114
+ }
2115
+ async function executeSemanticSearch(input) {
2116
+ const { prepared, runtime, filteredDocuments, keywordHits, warnings, modeWasExplicit } = input;
2117
+ let hits = keywordHits;
2118
+ const bm25Hits = await executeBuiltInBm25Search(prepared, runtime, filteredDocuments, keywordHits, warnings);
2119
+ const semanticMode = runtime.effectiveMode;
2120
+ if (bm25Hits !== null || semanticMode === "keyword") {
2121
+ return { effectiveMode: runtime.effectiveMode, hits: bm25Hits ?? hits };
2122
+ }
2123
+ try {
2124
+ await prepareBuiltInSemanticSearch(runtime, semanticMode, filteredDocuments, warnings, modeWasExplicit);
2125
+ if (filteredDocuments.length === 0 || prepared.limit === 0) {
2126
+ return { effectiveMode: runtime.effectiveMode, hits: [] };
2127
+ }
2128
+ const filteredById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
2129
+ hits = await executeExtensionSearchProvider(prepared, runtime, filteredDocuments, filteredById) ?? hits;
2130
+ if (hits === keywordHits) {
2131
+ const { provider, vectorStore } = requireSemanticDependencies(semanticMode, runtime.providerResolution, runtime.vectorResolution, runtime.extensionVectorAdapter !== null);
2132
+ const semanticResult = await computeSemanticOrHybridHits({
2133
+ requestedMode: semanticMode,
2134
+ query: prepared.query,
2135
+ filteredDocuments,
2136
+ keywordHits,
2137
+ hybridSemanticWeight: runtime.hybridSemanticWeight,
2138
+ limit: prepared.limit,
2139
+ maxResults: runtime.maxResults,
2140
+ provider,
2141
+ vectorStore,
2142
+ extensionVectorAdapter: runtime.extensionVectorAdapter,
2143
+ queryExpansion: runtime.queryExpansion,
2144
+ queryExpansionExtension: runtime.queryExpansionExtension,
2145
+ rerank: runtime.rerank,
2146
+ rerankExtension: runtime.rerankExtension,
2147
+ warnings,
2148
+ settings: runtime.settings
2137
2149
  });
2138
- return {
2139
- query: query.trim(),
2140
- mode: effectiveMode,
2141
- items: [],
2142
- count: total,
2143
- total,
2144
- count_only: true,
2145
- filters: compactFilters,
2146
- ...warnings.length > 0 ? { warnings } : {}
2147
- };
2150
+ hits = maybeApplyNoVectorFallback(semanticMode, semanticResult, keywordHits, warnings);
2148
2151
  }
2149
- return {
2150
- query: query.trim(),
2151
- mode: effectiveMode,
2152
+ return { effectiveMode: runtime.effectiveMode, hits };
2153
+ } catch (error) {
2154
+ warnings.push(buildExplicitSemanticFallbackWarning(runtime.effectiveMode, error));
2155
+ return { effectiveMode: "keyword", hits: keywordHits };
2156
+ }
2157
+ }
2158
+ function buildCountOnlySearchResult(response, total) {
2159
+ if (response.projection.mode === "compact" && response.options.compact === true) {
2160
+ return withSearchWarnings({
2161
+ query: response.query.trim(),
2162
+ mode: response.effectiveMode,
2152
2163
  items: [],
2153
2164
  count: total,
2154
2165
  total,
2155
2166
  count_only: true,
2156
- filters: buildVerboseSearchFilters({
2157
- effectiveMode,
2158
- matchMode,
2159
- options,
2160
- includeLinked,
2161
- titleExact,
2162
- phraseExact,
2163
- scoreThreshold,
2164
- hybridSemanticWeight,
2165
- queryExpansion,
2166
- rerank,
2167
- runtimeFieldFilters
2168
- }),
2169
- projection: {
2170
- mode: projection.mode,
2171
- fields: projectionFields
2172
- },
2173
- now: nowIso(),
2174
- ...warnings.length > 0 ? { warnings } : {}
2175
- };
2167
+ filters: buildCompactSearchFilterSummary({
2168
+ mode: response.effectiveMode,
2169
+ matchMode: response.matchMode,
2170
+ options: response.options,
2171
+ includeLinked: response.includeLinked,
2172
+ titleExact: response.titleExact,
2173
+ phraseExact: response.phraseExact,
2174
+ scoreThreshold: response.scoreThreshold,
2175
+ hybridSemanticWeight: response.hybridSemanticWeight,
2176
+ runtimeFieldFilters: response.runtimeFieldFilters
2177
+ })
2178
+ }, response.warnings);
2179
+ }
2180
+ const projectionFields = response.projection.mode === "full" ? null : [...response.projection.fields];
2181
+ return withSearchWarnings({
2182
+ query: response.query.trim(),
2183
+ mode: response.effectiveMode,
2184
+ items: [],
2185
+ count: total,
2186
+ total,
2187
+ count_only: true,
2188
+ filters: buildVerboseSearchFilters({
2189
+ effectiveMode: response.effectiveMode,
2190
+ matchMode: response.matchMode,
2191
+ options: response.options,
2192
+ includeLinked: response.includeLinked,
2193
+ titleExact: response.titleExact,
2194
+ phraseExact: response.phraseExact,
2195
+ scoreThreshold: response.scoreThreshold,
2196
+ hybridSemanticWeight: response.hybridSemanticWeight,
2197
+ queryExpansion: response.queryExpansion,
2198
+ rerank: response.rerank,
2199
+ runtimeFieldFilters: response.runtimeFieldFilters
2200
+ }),
2201
+ projection: {
2202
+ mode: response.projection.mode,
2203
+ fields: projectionFields
2204
+ },
2205
+ now: nowIso()
2206
+ }, response.warnings);
2207
+ }
2208
+ function withSearchWarnings(result, warnings) {
2209
+ if (warnings.length === 0) {
2210
+ return result;
2176
2211
  }
2177
- let projectedHits = limited;
2178
- let effectiveProjection = projection;
2179
- if (highlight) {
2180
- const documentById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
2181
- projectedHits = limited.map((hit) => ({
2182
- ...hit,
2183
- highlights: buildHitHighlights(documentById.get(hit.item.id), hit.matched_fields, tokens)
2184
- }));
2185
- if (projection.mode !== "full" && !projection.fields.includes("highlights")) {
2186
- effectiveProjection = { mode: projection.mode, fields: [...projection.fields, "highlights"] };
2187
- }
2212
+ return { ...result, warnings };
2213
+ }
2214
+ function attachSearchHighlights(prepared, filteredDocuments, limited) {
2215
+ if (!prepared.highlight) {
2216
+ return { hits: limited, projection: prepared.projection };
2188
2217
  }
2189
- const projectedItems = projectSearchHits(projectedHits, effectiveProjection);
2190
- const finalProjectionFields = effectiveProjection.mode === "full" ? null : [...effectiveProjection.fields];
2191
- const truncationExtras = limited.length < total ? { total } : {};
2192
- if (compactSummaryMode) {
2193
- const compactFilters = buildCompactSearchFilterSummary({
2194
- mode: effectiveMode,
2195
- matchMode,
2196
- options,
2197
- includeLinked,
2198
- titleExact,
2199
- phraseExact,
2200
- scoreThreshold,
2201
- hybridSemanticWeight,
2202
- runtimeFieldFilters
2203
- });
2204
- return {
2205
- query: query.trim(),
2206
- mode: effectiveMode,
2218
+ const documentById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
2219
+ const hits = limited.map((hit) => ({
2220
+ ...hit,
2221
+ highlights: buildHitHighlights(documentById.get(hit.item.id), hit.matched_fields, prepared.tokens)
2222
+ }));
2223
+ if (prepared.projection.mode === "full" || prepared.projection.fields.includes("highlights")) {
2224
+ return { hits, projection: prepared.projection };
2225
+ }
2226
+ return { hits, projection: { mode: prepared.projection.mode, fields: [...prepared.projection.fields, "highlights"] } };
2227
+ }
2228
+ function buildSearchResultForHits(response, projectedItems, total, limitedCount, effectiveProjection) {
2229
+ const truncationExtras = limitedCount < total ? { total } : {};
2230
+ if (response.projection.mode === "compact" && response.options.compact === true) {
2231
+ return withSearchWarnings({
2232
+ query: response.query.trim(),
2233
+ mode: response.effectiveMode,
2207
2234
  items: projectedItems,
2208
2235
  count: projectedItems.length,
2209
2236
  ...truncationExtras,
2210
- filters: compactFilters,
2211
- ...warnings.length > 0 ? { warnings } : {}
2212
- };
2237
+ filters: buildCompactSearchFilterSummary({
2238
+ mode: response.effectiveMode,
2239
+ matchMode: response.matchMode,
2240
+ options: response.options,
2241
+ includeLinked: response.includeLinked,
2242
+ titleExact: response.titleExact,
2243
+ phraseExact: response.phraseExact,
2244
+ scoreThreshold: response.scoreThreshold,
2245
+ hybridSemanticWeight: response.hybridSemanticWeight,
2246
+ runtimeFieldFilters: response.runtimeFieldFilters
2247
+ })
2248
+ }, response.warnings);
2213
2249
  }
2250
+ const finalProjectionFields = effectiveProjection.mode === "full" ? null : [...effectiveProjection.fields];
2214
2251
  return {
2215
- query: query.trim(),
2216
- mode: effectiveMode,
2252
+ query: response.query.trim(),
2253
+ mode: response.effectiveMode,
2217
2254
  items: projectedItems,
2218
2255
  count: projectedItems.length,
2219
2256
  ...truncationExtras,
2220
2257
  filters: buildVerboseSearchFilters({
2221
- effectiveMode,
2222
- matchMode,
2223
- options,
2224
- includeLinked,
2225
- titleExact,
2226
- phraseExact,
2227
- scoreThreshold,
2228
- hybridSemanticWeight,
2229
- queryExpansion,
2230
- rerank,
2231
- runtimeFieldFilters
2258
+ effectiveMode: response.effectiveMode,
2259
+ matchMode: response.matchMode,
2260
+ options: response.options,
2261
+ includeLinked: response.includeLinked,
2262
+ titleExact: response.titleExact,
2263
+ phraseExact: response.phraseExact,
2264
+ scoreThreshold: response.scoreThreshold,
2265
+ hybridSemanticWeight: response.hybridSemanticWeight,
2266
+ queryExpansion: response.queryExpansion,
2267
+ rerank: response.rerank,
2268
+ runtimeFieldFilters: response.runtimeFieldFilters
2232
2269
  }),
2233
2270
  projection: {
2234
2271
  mode: effectiveProjection.mode,
2235
2272
  fields: finalProjectionFields
2236
2273
  },
2237
2274
  now: nowIso(),
2238
- ...warnings.length > 0 ? { warnings } : {}
2275
+ ...response.warnings.length > 0 ? { warnings: response.warnings } : {}
2276
+ };
2277
+ }
2278
+ async function runSearch(rawQuery, rawOptions, global2) {
2279
+ const prepared = prepareSearchInput(rawQuery, rawOptions);
2280
+ const runtime = await resolveSearchRuntimeContext(prepared, global2);
2281
+ const corpus = await loadFilteredSearchCorpus(prepared, runtime);
2282
+ const warnings = corpus.warnings;
2283
+ warnings.push(...prepared.inlineWarnings);
2284
+ if (runtime.effectiveMode === "hybrid" && runtime.semanticWeightProvided && runtime.semanticWeightOverride === void 0) {
2285
+ warnings.push("search_hybrid_semantic_weight_override_invalid:using_settings_default");
2286
+ }
2287
+ const responseBase = {
2288
+ query: prepared.query,
2289
+ matchMode: prepared.matchMode,
2290
+ options: prepared.options,
2291
+ includeLinked: prepared.includeLinked,
2292
+ titleExact: prepared.titleExact,
2293
+ phraseExact: prepared.phraseExact,
2294
+ scoreThreshold: runtime.scoreThreshold,
2295
+ hybridSemanticWeight: runtime.hybridSemanticWeight,
2296
+ queryExpansion: runtime.queryExpansion,
2297
+ rerank: runtime.rerank,
2298
+ projection: prepared.projection,
2299
+ warnings,
2300
+ runtimeFieldFilters: runtime.runtimeFieldFilters
2239
2301
  };
2302
+ if (runtime.effectiveMode === "keyword" && (corpus.filteredDocuments.length === 0 || prepared.limit === 0)) {
2303
+ return buildEmptySearchResultFromContext({ ...responseBase, effectiveMode: runtime.effectiveMode }, prepared.countOnly);
2304
+ }
2305
+ const keywordHits = await computeKeywordSearchHits(prepared, runtime, corpus.filteredDocuments);
2306
+ const modeResult = await executeSemanticSearch({
2307
+ prepared,
2308
+ runtime,
2309
+ filteredDocuments: corpus.filteredDocuments,
2310
+ keywordHits,
2311
+ warnings,
2312
+ modeWasExplicit: prepared.modeWasExplicit
2313
+ });
2314
+ if (modeResult.effectiveMode !== "keyword" && modeResult.hits.length === 0 && (corpus.filteredDocuments.length === 0 || prepared.limit === 0)) {
2315
+ return buildEmptySearchResultFromContext({ ...responseBase, effectiveMode: modeResult.effectiveMode }, prepared.countOnly);
2316
+ }
2317
+ const thresholded = modeResult.hits.filter((entry) => entry.exact_id_match === true || entry.score >= runtime.scoreThreshold);
2318
+ const sorted = sortHits(thresholded, runtime.statusRegistry);
2319
+ const total = sorted.length;
2320
+ const resolvedLimit = prepared.limit ?? runtime.maxResults;
2321
+ const limited = sorted.slice(0, resolvedLimit);
2322
+ const response = { ...responseBase, effectiveMode: modeResult.effectiveMode };
2323
+ if (prepared.countOnly) {
2324
+ return buildCountOnlySearchResult(response, total);
2325
+ }
2326
+ const { hits: projectedHits, projection: effectiveProjection } = attachSearchHighlights(prepared, corpus.filteredDocuments, limited);
2327
+ const projectedItems = projectSearchHits(projectedHits, effectiveProjection);
2328
+ return buildSearchResultForHits(response, projectedItems, total, limited.length, effectiveProjection);
2240
2329
  }
2241
2330
 
2242
2331
  export {
@@ -2249,4 +2338,4 @@ export {
2249
2338
  resolveSearchTuning,
2250
2339
  runSearch
2251
2340
  };
2252
- //# sourceMappingURL=chunk-BZCEN4JA.js.map
2341
+ //# sourceMappingURL=chunk-6ZMBJRDJ.js.map