@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
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fbf75a7d-5709-50b7-89c0-2b4e07fd351f")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="02364b53-8625-5d05-90d9-1234e6d63964")}catch(e){}}();
3
3
  import {
4
4
  collectStaleVectorizationIds
5
5
  } from "./chunk-ROGZTCCB.js";
@@ -15,7 +15,7 @@ import {
15
15
  resolveSearchCorpusFields,
16
16
  resolveSettingsWithSemanticRuntimeDefaults,
17
17
  resolveVectorStores
18
- } from "./chunk-UYUYDGIB.js";
18
+ } from "./chunk-TPOFWBMY.js";
19
19
  import {
20
20
  applyFilterValueEcho,
21
21
  buildContentFilterEcho,
@@ -26,7 +26,7 @@ import {
26
26
  parseStatusFilterCsv,
27
27
  resolveContentFieldFilters,
28
28
  resolveMissingMetadataFilters
29
- } from "./chunk-5CGRF3L5.js";
29
+ } from "./chunk-Q6K2OACU.js";
30
30
  import {
31
31
  hasContentFieldFilter,
32
32
  itemMatchesContentFilters
@@ -35,27 +35,27 @@ import {
35
35
  hasMissingMetadataFilter,
36
36
  itemMatchesMissingMetadata,
37
37
  lifecycleClassifierFromStatusRegistry
38
- } from "./chunk-3VGN2UWE.js";
38
+ } from "./chunk-EMPGXBUF.js";
39
39
  import {
40
40
  parseLimit,
41
41
  parsePriority,
42
42
  parseType
43
- } from "./chunk-UZIWVBE6.js";
43
+ } from "./chunk-2CHRYUXL.js";
44
44
  import {
45
45
  collectRegisteredItemFieldNames,
46
46
  listAllDocumentCandidatesCached,
47
47
  listAllFrontMatter,
48
48
  toItemRecord
49
- } from "./chunk-JSU5P7VS.js";
49
+ } from "./chunk-NRZS637N.js";
50
50
  import {
51
51
  isTerminalStatus,
52
52
  parseItemDocument
53
- } from "./chunk-QCWF6IYD.js";
53
+ } from "./chunk-KN3URLKS.js";
54
54
  import {
55
55
  compareTimestampStrings,
56
56
  nowIso,
57
57
  resolveIsoOrRelative
58
- } from "./chunk-AXIDKKAT.js";
58
+ } from "./chunk-K2VYLVX4.js";
59
59
  import {
60
60
  EXIT_CODE,
61
61
  PmCliError,
@@ -75,7 +75,7 @@ import {
75
75
  runActiveOnReadHooks,
76
76
  toNonEmptyString,
77
77
  toNonEmptyStringOrUndefined
78
- } from "./chunk-7R4QEMZZ.js";
78
+ } from "./chunk-I66WE2HE.js";
79
79
 
80
80
  // dist/cli/commands/search.js
81
81
  import fs from "node:fs/promises";
@@ -499,8 +499,6 @@ var LONG_QUERY_PHRASE_MULTIPLIER = 6;
499
499
  var ALL_TERMS_COVERAGE_BONUS = 40;
500
500
  var EXACT_ID_MATCH_SCORE = 1e3;
501
501
  var SHORT_ID_MATCH_SCORE = 900;
502
- var IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS = 8e3;
503
- var IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS = 8e3;
504
502
  var HIGHLIGHT_OPEN = "\xAB";
505
503
  var HIGHLIGHT_CLOSE = "\xBB";
506
504
  var HIGHLIGHT_SNIPPET_RADIUS = 60;
@@ -622,16 +620,6 @@ function classifyImplicitSemanticFallbackReason(error) {
622
620
  }
623
621
  return "error";
624
622
  }
625
- function buildImplicitSemanticFallbackWarning(error) {
626
- const reason = classifyImplicitSemanticFallbackReason(error);
627
- if (reason === "timeout") {
628
- return "search_implicit_semantic_fallback:timeout:using_keyword_mode";
629
- }
630
- if (reason === "connection") {
631
- return "search_implicit_semantic_fallback:connection:using_keyword_mode";
632
- }
633
- return "search_implicit_semantic_fallback:error:using_keyword_mode";
634
- }
635
623
  function buildExplicitSemanticFallbackWarning(requestedMode, error) {
636
624
  const reason = classifyImplicitSemanticFallbackReason(error);
637
625
  return `search_${requestedMode}_fallback:${reason}:using_keyword_mode`;
@@ -763,7 +751,6 @@ var _testOnlySearchCommand = {
763
751
  buildExplicitSemanticFallbackWarning,
764
752
  buildCompactSearchFilterSummary,
765
753
  buildHybridLexicalScore,
766
- buildImplicitSemanticFallbackWarning,
767
754
  buildRerankCorpus,
768
755
  buildSemanticHits,
769
756
  classifyImplicitSemanticFallbackReason,
@@ -1475,8 +1462,12 @@ function resolveExtensionVectorAdapter(settings) {
1475
1462
  if (typeof query !== "function") {
1476
1463
  return null;
1477
1464
  }
1465
+ const upsert = runtimeDefinition.upsert;
1466
+ const runtimeAdapterName = toOptionalNonEmptyString(runtimeDefinition.name) ?? toOptionalNonEmptyString(resolved.definition.name) ?? adapterName ?? "extension";
1478
1467
  return {
1479
- query
1468
+ adapterName: runtimeAdapterName,
1469
+ query,
1470
+ ...typeof upsert === "function" ? { upsert } : {}
1480
1471
  };
1481
1472
  }
1482
1473
  function normalizeExtensionProviderHits(providerName, raw, filteredById) {
@@ -1643,52 +1634,151 @@ function buildRerankCorpus(document) {
1643
1634
  document.body
1644
1635
  ].map((entry) => typeof entry === "string" ? entry.trim() : "").filter((entry) => entry.length > 0).join("\n");
1645
1636
  }
1646
- async function computeSemanticOrHybridHits(context) {
1647
- const semanticLimit = context.limit ?? context.maxResults;
1648
- const embeddingOptions = context.embeddingTimeoutMs !== void 0 ? { timeout_ms: context.embeddingTimeoutMs } : {};
1649
- const vectorQueryOptions = context.vectorQueryTimeoutMs !== void 0 ? { timeout_ms: context.vectorQueryTimeoutMs } : {};
1650
- const queryTrimmed = context.query.trim();
1637
+ async function resolveExpandedSemanticQueries(context, queryTrimmed) {
1651
1638
  const baseExpandedQueries = context.queryExpansion.enabled ? buildDeterministicQueryExpansions(queryTrimmed, context.queryExpansion.max_queries) : [queryTrimmed];
1652
- let expandedQueries = baseExpandedQueries.length > 0 ? baseExpandedQueries : [queryTrimmed];
1653
- if (context.queryExpansion.enabled) {
1654
- if (context.queryExpansionExtension?.expand) {
1655
- try {
1656
- const rawExpansion = await Promise.resolve(context.queryExpansionExtension.expand({
1657
- query: queryTrimmed,
1658
- mode: context.requestedMode,
1659
- settings: context.settings
1660
- }));
1661
- const extensionExpansion = normalizeQueryExpansionOutput(rawExpansion);
1662
- expandedQueries = mergeQueryExpansions(expandedQueries, extensionExpansion, context.queryExpansion.max_queries);
1663
- } catch {
1664
- context.warnings.push(`search_query_expansion_provider_failed:${context.queryExpansionExtension.providerName}:using_builtin`);
1665
- }
1666
- } else if (context.queryExpansion.provider && context.queryExpansion.provider !== "openai" && context.queryExpansion.provider !== "ollama") {
1667
- context.warnings.push(`search_query_expansion_provider_unavailable:${context.queryExpansion.provider}:using_builtin`);
1639
+ const expandedQueries = baseExpandedQueries.length > 0 ? baseExpandedQueries : [queryTrimmed];
1640
+ if (!context.queryExpansion.enabled) {
1641
+ return expandedQueries;
1642
+ }
1643
+ if (context.queryExpansionExtension?.expand) {
1644
+ try {
1645
+ const rawExpansion = await Promise.resolve(context.queryExpansionExtension.expand({
1646
+ query: queryTrimmed,
1647
+ mode: context.requestedMode,
1648
+ settings: context.settings
1649
+ }));
1650
+ return mergeQueryExpansions(expandedQueries, normalizeQueryExpansionOutput(rawExpansion), context.queryExpansion.max_queries);
1651
+ } catch {
1652
+ context.warnings.push(`search_query_expansion_provider_failed:${context.queryExpansionExtension.providerName}:using_builtin`);
1653
+ return expandedQueries;
1668
1654
  }
1669
1655
  }
1670
- const queryVectors = await executeEmbeddingRequest(context.provider, expandedQueries, embeddingOptions);
1671
- const executeVectorQueryWithFallback = async (semanticVector) => {
1672
- if (context.extensionVectorAdapter?.query) {
1673
- try {
1674
- return await Promise.resolve(context.extensionVectorAdapter.query({
1675
- vector: semanticVector,
1676
- limit: semanticLimit,
1677
- settings: context.settings
1678
- }));
1679
- } catch (error) {
1680
- if (!context.vectorStore) {
1681
- 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);
1682
- }
1683
- return await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);
1656
+ if (context.queryExpansion.provider && context.queryExpansion.provider !== "openai" && context.queryExpansion.provider !== "ollama") {
1657
+ context.warnings.push(`search_query_expansion_provider_unavailable:${context.queryExpansion.provider}:using_builtin`);
1658
+ }
1659
+ return expandedQueries;
1660
+ }
1661
+ async function executeSemanticVectorQuery(context, semanticVector, semanticLimit, vectorQueryOptions) {
1662
+ if (context.extensionVectorAdapter?.query) {
1663
+ try {
1664
+ return await Promise.resolve(context.extensionVectorAdapter.query({
1665
+ vector: semanticVector,
1666
+ limit: semanticLimit,
1667
+ settings: context.settings
1668
+ }));
1669
+ } catch (error) {
1670
+ if (!context.vectorStore) {
1671
+ 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);
1684
1672
  }
1685
- }
1686
- if (context.vectorStore) {
1673
+ context.warnings.push(`search_vector_adapter_failed:${context.extensionVectorAdapter.adapterName}:using_builtin`);
1687
1674
  return await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);
1688
1675
  }
1689
- throw new PmCliError("Semantic search requires either a configured vector store or an extension vector adapter query handler", EXIT_CODE.USAGE);
1690
- };
1691
- const queryVectorGroups = await Promise.all(queryVectors.map(async (semanticVector) => await executeVectorQueryWithFallback(semanticVector)));
1676
+ }
1677
+ if (context.vectorStore) {
1678
+ return await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);
1679
+ }
1680
+ throw new PmCliError("Semantic search requires either a configured vector store or an extension vector adapter query handler", EXIT_CODE.USAGE);
1681
+ }
1682
+ function buildRerankCandidateContexts(hybridHits, filteredById, topK) {
1683
+ const sortedForCandidates = [...hybridHits].sort((left, right) => {
1684
+ if (left.score !== right.score) {
1685
+ return right.score - left.score;
1686
+ }
1687
+ return left.item.id.localeCompare(right.item.id);
1688
+ });
1689
+ return sortedForCandidates.slice(0, topK).map((hit) => {
1690
+ const document = filteredById.get(hit.item.id);
1691
+ return document ? { hit, text: buildRerankCorpus(document) } : null;
1692
+ }).filter((entry) => entry !== null);
1693
+ }
1694
+ async function resolveExtensionRerankScores(context, queryTrimmed, candidateContexts) {
1695
+ if (!context.rerankExtension?.rerank) {
1696
+ return null;
1697
+ }
1698
+ try {
1699
+ const rawRerank = await Promise.resolve(context.rerankExtension.rerank({
1700
+ query: queryTrimmed,
1701
+ mode: "hybrid",
1702
+ model: context.rerank.model,
1703
+ top_k: context.rerank.top_k,
1704
+ settings: context.settings,
1705
+ candidates: candidateContexts.map((entry) => ({
1706
+ id: entry.hit.item.id,
1707
+ text: entry.text,
1708
+ score: entry.hit.score
1709
+ }))
1710
+ }));
1711
+ const normalizedRerank = normalizeRerankOutput(rawRerank);
1712
+ if (normalizedRerank.length > 0) {
1713
+ return new Map(normalizedRerank.map((entry) => [entry.id, entry.score]));
1714
+ }
1715
+ context.warnings.push(`search_rerank_provider_invalid_response:${context.rerankExtension.providerName}:using_builtin`);
1716
+ return null;
1717
+ } catch {
1718
+ context.warnings.push(`search_rerank_provider_failed:${context.rerankExtension.providerName}:using_builtin`);
1719
+ return null;
1720
+ }
1721
+ }
1722
+ async function resolveRerankScores(context, queryTrimmed, candidateContexts) {
1723
+ const extensionScores = await resolveExtensionRerankScores(context, queryTrimmed, candidateContexts);
1724
+ if (extensionScores) {
1725
+ return extensionScores;
1726
+ }
1727
+ const rerankCandidates = candidateContexts.map((entry) => ({
1728
+ id: entry.hit.item.id,
1729
+ text: entry.text
1730
+ }));
1731
+ try {
1732
+ return await rerankCandidatesWithEmbeddings(context.provider, context.rerank.model, queryTrimmed, rerankCandidates, context.embeddingTimeoutMs);
1733
+ } catch {
1734
+ context.warnings.push("search_rerank_failed:using_hybrid_scores");
1735
+ return null;
1736
+ }
1737
+ }
1738
+ function applyRerankScores(hybridHits, rerankScores) {
1739
+ const rerankedIds = new Set(rerankScores.keys());
1740
+ const rerankedHits = hybridHits.map((hit) => {
1741
+ const rerankScore = rerankScores.get(hit.item.id);
1742
+ if (rerankScore === void 0) {
1743
+ return hit;
1744
+ }
1745
+ const matchedFields = new Set(hit.matched_fields);
1746
+ matchedFields.add("rerank");
1747
+ return {
1748
+ ...hit,
1749
+ score: rerankScore,
1750
+ matched_fields: [...matchedFields].sort((left, right) => left.localeCompare(right))
1751
+ };
1752
+ });
1753
+ rerankedHits.sort((left, right) => {
1754
+ const leftWasReranked = rerankedIds.has(left.item.id);
1755
+ const rightWasReranked = rerankedIds.has(right.item.id);
1756
+ if (leftWasReranked !== rightWasReranked) {
1757
+ return leftWasReranked ? -1 : 1;
1758
+ }
1759
+ if (left.score !== right.score) {
1760
+ return right.score - left.score;
1761
+ }
1762
+ return left.item.id.localeCompare(right.item.id);
1763
+ });
1764
+ return rerankedHits;
1765
+ }
1766
+ async function applyHybridRerank(context, queryTrimmed, hybridHits, filteredById) {
1767
+ if (!context.rerank.enabled || hybridHits.length <= 1) {
1768
+ return hybridHits;
1769
+ }
1770
+ const candidateContexts = buildRerankCandidateContexts(hybridHits, filteredById, context.rerank.top_k);
1771
+ const rerankScores = await resolveRerankScores(context, queryTrimmed, candidateContexts);
1772
+ return rerankScores && rerankScores.size > 0 ? applyRerankScores(hybridHits, rerankScores) : hybridHits;
1773
+ }
1774
+ async function computeSemanticOrHybridHits(context) {
1775
+ const semanticLimit = context.limit ?? context.maxResults;
1776
+ const embeddingOptions = context.embeddingTimeoutMs !== void 0 ? { timeout_ms: context.embeddingTimeoutMs } : {};
1777
+ const vectorQueryOptions = context.vectorQueryTimeoutMs !== void 0 ? { timeout_ms: context.vectorQueryTimeoutMs } : {};
1778
+ const queryTrimmed = context.query.trim();
1779
+ const expandedQueries = await resolveExpandedSemanticQueries(context, queryTrimmed);
1780
+ const queryVectors = await executeEmbeddingRequest(context.provider, expandedQueries, embeddingOptions);
1781
+ const queryVectorGroups = await Promise.all(queryVectors.map(async (semanticVector) => await executeSemanticVectorQuery(context, semanticVector, semanticLimit, vectorQueryOptions)));
1692
1782
  const vectorHits = mergeVectorHitsById(queryVectorGroups);
1693
1783
  const filteredById = new Map(context.filteredDocuments.map((document) => [document.metadata.id, document]));
1694
1784
  const { semanticHits, semanticScores } = buildSemanticHits(vectorHits, filteredById);
@@ -1696,86 +1786,7 @@ async function computeSemanticOrHybridHits(context) {
1696
1786
  if (context.requestedMode === "semantic") {
1697
1787
  return { hits: forceExactIdHitsToTop(semanticHits, context.keywordHits), vectorMatchCount };
1698
1788
  }
1699
- let hybridHits = combineHybridHits(filteredById, semanticScores, context.keywordHits, context.hybridSemanticWeight);
1700
- if (context.rerank.enabled && hybridHits.length > 1) {
1701
- const sortedForCandidates = [...hybridHits].sort((left, right) => {
1702
- if (left.score !== right.score) {
1703
- return right.score - left.score;
1704
- }
1705
- return left.item.id.localeCompare(right.item.id);
1706
- });
1707
- const candidateHits = sortedForCandidates.slice(0, context.rerank.top_k);
1708
- const candidateContexts = candidateHits.map((hit) => {
1709
- const document = filteredById.get(hit.item.id);
1710
- if (!document) {
1711
- return null;
1712
- }
1713
- return { hit, text: buildRerankCorpus(document) };
1714
- }).filter((entry) => entry !== null);
1715
- const rerankCandidates = candidateContexts.map((entry) => ({
1716
- id: entry.hit.item.id,
1717
- text: entry.text
1718
- }));
1719
- let rerankScores = null;
1720
- if (context.rerankExtension?.rerank) {
1721
- try {
1722
- const rawRerank = await Promise.resolve(context.rerankExtension.rerank({
1723
- query: queryTrimmed,
1724
- mode: "hybrid",
1725
- model: context.rerank.model,
1726
- top_k: context.rerank.top_k,
1727
- settings: context.settings,
1728
- candidates: candidateContexts.map((entry) => ({
1729
- id: entry.hit.item.id,
1730
- text: entry.text,
1731
- score: entry.hit.score
1732
- }))
1733
- }));
1734
- const normalizedRerank = normalizeRerankOutput(rawRerank);
1735
- if (normalizedRerank.length > 0) {
1736
- rerankScores = new Map(normalizedRerank.map((entry) => [entry.id, entry.score]));
1737
- } else {
1738
- context.warnings.push(`search_rerank_provider_invalid_response:${context.rerankExtension.providerName}:using_builtin`);
1739
- }
1740
- } catch {
1741
- context.warnings.push(`search_rerank_provider_failed:${context.rerankExtension.providerName}:using_builtin`);
1742
- }
1743
- }
1744
- if (!rerankScores) {
1745
- try {
1746
- rerankScores = await rerankCandidatesWithEmbeddings(context.provider, context.rerank.model, queryTrimmed, rerankCandidates, context.embeddingTimeoutMs);
1747
- } catch {
1748
- context.warnings.push("search_rerank_failed:using_hybrid_scores");
1749
- }
1750
- }
1751
- if (rerankScores && rerankScores.size > 0) {
1752
- const rerankedIds = new Set(rerankScores.keys());
1753
- hybridHits = hybridHits.map((hit) => {
1754
- const rerankScore = rerankScores.get(hit.item.id);
1755
- if (rerankScore === void 0) {
1756
- return hit;
1757
- }
1758
- const matchedFields = new Set(hit.matched_fields);
1759
- matchedFields.add("rerank");
1760
- return {
1761
- ...hit,
1762
- score: rerankScore,
1763
- matched_fields: [...matchedFields].sort((left, right) => left.localeCompare(right))
1764
- };
1765
- });
1766
- hybridHits.sort((left, right) => {
1767
- const leftWasReranked = rerankedIds.has(left.item.id);
1768
- const rightWasReranked = rerankedIds.has(right.item.id);
1769
- if (leftWasReranked !== rightWasReranked) {
1770
- return leftWasReranked ? -1 : 1;
1771
- }
1772
- if (left.score !== right.score) {
1773
- return right.score - left.score;
1774
- }
1775
- return left.item.id.localeCompare(right.item.id);
1776
- });
1777
- }
1778
- }
1789
+ const hybridHits = await applyHybridRerank(context, queryTrimmed, combineHybridHits(filteredById, semanticScores, context.keywordHits, context.hybridSemanticWeight), filteredById);
1779
1790
  return {
1780
1791
  // GH-281: applied LAST (after any rerank reordering) so an exact full-ID /
1781
1792
  // short-ID keyword match always ranks #1 in hybrid mode regardless of the
@@ -1886,7 +1897,15 @@ function projectSearchHits(hits, projection) {
1886
1897
  return projected;
1887
1898
  });
1888
1899
  }
1889
- async function runSearch(rawQuery, rawOptions, global) {
1900
+ function resolveQueryExpansionExtension(queryExpansion) {
1901
+ const provider = resolveExtensionSearchProviderByName(queryExpansion.provider ?? void 0);
1902
+ return provider?.queryExpansion ? { providerName: provider.providerName, expand: provider.queryExpansion } : null;
1903
+ }
1904
+ function resolveRerankExtension(settings) {
1905
+ const provider = resolveExtensionSearchProviderByName(toOptionalNonEmptyString(settings.search?.provider));
1906
+ return provider?.rerank ? { providerName: provider.providerName, rerank: provider.rerank } : null;
1907
+ }
1908
+ function prepareSearchInput(rawQuery, rawOptions) {
1890
1909
  const inlineWarnings = [];
1891
1910
  const inlineParse = parseInlineQueryFilters(rawQuery);
1892
1911
  const hasInlineFilters = Object.keys(inlineParse.inlineFilters).length > 0;
@@ -1900,310 +1919,380 @@ async function runSearch(rawQuery, rawOptions, global) {
1900
1919
  }
1901
1920
  const query = hasInlineFilters ? inlineParse.residualQuery : rawQuery;
1902
1921
  const options = applyInlineQueryFilters(rawOptions, inlineParse.inlineFilters, inlineWarnings);
1903
- const highlight = options.highlight === true;
1904
- const includeLinked = parseIncludeLinked(options.includeLinked);
1905
- const titleExact = parseTitleExact(options.titleExact);
1906
- const phraseExact = parsePhraseExact(options.phraseExact);
1907
- const matchMode = parseMatchMode(typeof options.matchMode === "string" ? options.matchMode : void 0);
1908
- const minScoreOverride = parseMinScoreOverride(options.minScore);
1909
- const countOnly = options.count === true;
1910
- const tokens = parseTokens(query);
1911
- const normalizedQuery = normalizeSearchPhrase(query);
1912
- const limit = parseLimit(options.limit);
1913
- const projection = parseProjectionConfig(options);
1914
- const modeWasExplicit = typeof options.mode === "string" && options.mode.trim().length > 0;
1922
+ return {
1923
+ query,
1924
+ options,
1925
+ inlineWarnings,
1926
+ highlight: options.highlight === true,
1927
+ includeLinked: parseIncludeLinked(options.includeLinked),
1928
+ titleExact: parseTitleExact(options.titleExact),
1929
+ phraseExact: parsePhraseExact(options.phraseExact),
1930
+ matchMode: parseMatchMode(typeof options.matchMode === "string" ? options.matchMode : void 0),
1931
+ minScoreOverride: parseMinScoreOverride(options.minScore),
1932
+ countOnly: options.count === true,
1933
+ tokens: parseTokens(query),
1934
+ normalizedQuery: normalizeSearchPhrase(query),
1935
+ limit: parseLimit(options.limit),
1936
+ projection: parseProjectionConfig(options),
1937
+ modeWasExplicit: typeof options.mode === "string" && options.mode.trim().length > 0
1938
+ };
1939
+ }
1940
+ async function resolveSearchRuntimeContext(prepared, global) {
1915
1941
  const pmRoot = resolvePmRoot(process.cwd(), global.path);
1916
1942
  if (!await pathExists(getSettingsPath(pmRoot))) {
1917
1943
  throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);
1918
1944
  }
1919
1945
  const storedSettings = await readSettings(pmRoot);
1920
- const runtimeDefaultsResolution = resolveSettingsWithSemanticRuntimeDefaults(storedSettings);
1921
- const settings = runtimeDefaultsResolution.settings;
1946
+ const settings = resolveSettingsWithSemanticRuntimeDefaults(storedSettings).settings;
1922
1947
  const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
1923
1948
  const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);
1924
- validateSearchProjectionFields(projection, runtimeFieldRegistry);
1925
- const runtimeFieldFilters = collectRuntimeFilterValues(options, runtimeFieldRegistry, "search");
1926
- const statusFilter = parseStatusFilterCsv(typeof options.status === "string" ? options.status : void 0, statusRegistry, { strict: true });
1949
+ validateSearchProjectionFields(prepared.projection, runtimeFieldRegistry);
1950
+ const runtimeFieldFilters = collectRuntimeFilterValues(prepared.options, runtimeFieldRegistry, "search");
1927
1951
  const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
1928
- const maxResults = resolveSearchMaxResults(settings);
1929
- const scoreThreshold = minScoreOverride ?? resolveSearchScoreThreshold(settings);
1930
- const semanticWeightProvided = options.semanticWeight !== void 0;
1931
- const semanticWeightOverride = parseSemanticWeightOverride(options.semanticWeight);
1932
- const hybridSemanticWeight = semanticWeightOverride ?? resolveHybridSemanticWeight(settings);
1933
- const tuning = resolveSearchTuning(settings);
1934
1952
  const providerResolution = resolveEmbeddingProviders(settings);
1935
1953
  const vectorResolution = resolveVectorStores(settings);
1936
1954
  const extensionSearchProvider = resolveExtensionSearchProvider(settings);
1937
1955
  const extensionVectorAdapter = resolveExtensionVectorAdapter(settings);
1938
- const bm25Mode = resolveBuiltInBm25Mode({
1939
- configuredProvider: toOptionalNonEmptyString(settings.search?.provider),
1940
- hasEmbeddingProvider: providerResolution.active !== null,
1941
- hasExtensionSearchProvider: extensionSearchProvider !== null
1942
- });
1956
+ const semanticWeightOverride = parseSemanticWeightOverride(prepared.options.semanticWeight);
1943
1957
  const queryExpansion = resolveQueryExpansionConfig(settings, providerResolution.active?.name ?? null);
1944
1958
  const rerank = resolveRerankConfig(settings, providerResolution.active?.model ?? toOptionalNonEmptyString(settings.search?.embedding_model) ?? "text-embedding-3-small");
1945
- const queryExpansionProvider = resolveExtensionSearchProviderByName(queryExpansion.provider ?? void 0);
1946
- const queryExpansionExtension = queryExpansionProvider?.queryExpansion ? { providerName: queryExpansionProvider.providerName, expand: queryExpansionProvider.queryExpansion } : null;
1947
- const rerankProvider = resolveExtensionSearchProviderByName(toOptionalNonEmptyString(settings.search?.provider));
1948
- const rerankExtension = rerankProvider?.rerank ? { providerName: rerankProvider.providerName, rerank: rerankProvider.rerank } : null;
1949
- let effectiveMode = parseMode(options.mode, {
1950
- hasProvider: providerResolution.active !== null || extensionSearchProvider !== null,
1951
- hasVectorStore: vectorResolution.active !== null || extensionVectorAdapter !== null
1952
- });
1953
- const loadedDocuments = await loadDocuments(pmRoot, settings.item_format ?? "toon", typeRegistry.type_to_folder, settings.schema);
1954
- const warnings = loadedDocuments.warnings;
1955
- if (inlineWarnings.length > 0) {
1956
- warnings.push(...inlineWarnings);
1959
+ return {
1960
+ pmRoot,
1961
+ settings,
1962
+ statusRegistry,
1963
+ runtimeFieldRegistry,
1964
+ runtimeFieldFilters,
1965
+ typeRegistry,
1966
+ maxResults: resolveSearchMaxResults(settings),
1967
+ scoreThreshold: prepared.minScoreOverride ?? resolveSearchScoreThreshold(settings),
1968
+ semanticWeightProvided: prepared.options.semanticWeight !== void 0,
1969
+ semanticWeightOverride,
1970
+ hybridSemanticWeight: semanticWeightOverride ?? resolveHybridSemanticWeight(settings),
1971
+ tuning: resolveSearchTuning(settings),
1972
+ providerResolution,
1973
+ vectorResolution,
1974
+ extensionSearchProvider,
1975
+ extensionVectorAdapter,
1976
+ bm25Mode: resolveBuiltInBm25Mode({
1977
+ configuredProvider: toOptionalNonEmptyString(settings.search?.provider),
1978
+ hasEmbeddingProvider: providerResolution.active !== null,
1979
+ hasExtensionSearchProvider: extensionSearchProvider !== null
1980
+ }),
1981
+ queryExpansion,
1982
+ queryExpansionExtension: resolveQueryExpansionExtension(queryExpansion),
1983
+ rerank,
1984
+ rerankExtension: resolveRerankExtension(settings),
1985
+ effectiveMode: parseMode(prepared.options.mode, {
1986
+ hasProvider: providerResolution.active !== null || extensionSearchProvider !== null,
1987
+ hasVectorStore: vectorResolution.active !== null || extensionVectorAdapter !== null
1988
+ })
1989
+ };
1990
+ }
1991
+ async function loadFilteredSearchCorpus(prepared, runtime) {
1992
+ const loadedDocuments = await loadDocuments(runtime.pmRoot, runtime.settings.item_format ?? "toon", runtime.typeRegistry.type_to_folder, runtime.settings.schema);
1993
+ const statusFilter = parseStatusFilterCsv(typeof prepared.options.status === "string" ? prepared.options.status : void 0, runtime.statusRegistry, { strict: true });
1994
+ const lifecycleClassifier = lifecycleClassifierFromStatusRegistry(runtime.statusRegistry);
1995
+ const metadataFilteredDocuments = applyFilters(loadedDocuments.documents, prepared.options, runtime.typeRegistry, runtime.runtimeFieldFilters, statusFilter, lifecycleClassifier);
1996
+ return {
1997
+ warnings: loadedDocuments.warnings,
1998
+ allDocuments: loadedDocuments.documents,
1999
+ filteredDocuments: applyExactQueryFilters(metadataFilteredDocuments, prepared.normalizedQuery, {
2000
+ titleExact: prepared.titleExact,
2001
+ phraseExact: prepared.phraseExact || prepared.matchMode === "exact"
2002
+ })
2003
+ };
2004
+ }
2005
+ async function collectLinkedCorpusById(includeLinked, effectiveMode, filteredDocuments) {
2006
+ const linkedCorpusById = /* @__PURE__ */ new Map();
2007
+ if (!includeLinked || effectiveMode !== "keyword" && effectiveMode !== "hybrid") {
2008
+ return linkedCorpusById;
1957
2009
  }
1958
- if (effectiveMode === "hybrid" && semanticWeightProvided && semanticWeightOverride === void 0) {
1959
- warnings.push("search_hybrid_semantic_weight_override_invalid:using_settings_default");
2010
+ const projectRoot = process.cwd();
2011
+ const linkedCorpusRoots = await resolveLinkedCorpusRoots(projectRoot, resolveGlobalPmRoot(projectRoot));
2012
+ const linkedCorpusEntries = await Promise.all(filteredDocuments.map(async (document) => [document.metadata.id, await loadLinkedCorpus(document, linkedCorpusRoots)]));
2013
+ for (const [id, corpus] of linkedCorpusEntries) {
2014
+ linkedCorpusById.set(id, corpus);
2015
+ }
2016
+ return linkedCorpusById;
2017
+ }
2018
+ async function computeKeywordSearchHits(prepared, runtime, filteredDocuments) {
2019
+ const linkedCorpusById = await collectLinkedCorpusById(prepared.includeLinked, runtime.effectiveMode, filteredDocuments);
2020
+ const applyCoverageBonus = prepared.matchMode === "or";
2021
+ 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);
2022
+ }
2023
+ function buildEmptySearchResultFromContext(response, countOnly) {
2024
+ 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);
2025
+ }
2026
+ async function executeBuiltInBm25Search(prepared, runtime, filteredDocuments, keywordHits, warnings) {
2027
+ if (runtime.bm25Mode === null || runtime.effectiveMode === "keyword") {
2028
+ return null;
1960
2029
  }
1961
- const allDocuments = loadedDocuments.documents;
1962
- const lifecycleClassifier = lifecycleClassifierFromStatusRegistry(statusRegistry);
1963
- const metadataFilteredDocuments = applyFilters(allDocuments, options, typeRegistry, runtimeFieldFilters, statusFilter, lifecycleClassifier);
1964
- const filteredDocuments = applyExactQueryFilters(metadataFilteredDocuments, normalizedQuery, {
1965
- titleExact,
1966
- // --match-mode exact reuses the exact-phrase containment logic so the whole
1967
- // normalized query must appear as a contiguous phrase in some searchable field.
1968
- phraseExact: phraseExact || matchMode === "exact"
2030
+ const hits = computeBuiltInBm25Hits({
2031
+ requestedMode: runtime.effectiveMode,
2032
+ query: prepared.query,
2033
+ filteredDocuments,
2034
+ keywordHits,
2035
+ corpusFields: resolveSearchCorpusFields(runtime.settings),
2036
+ bm25Params: resolveBm25Params(runtime.settings),
2037
+ hybridSemanticWeight: runtime.hybridSemanticWeight
1969
2038
  });
1970
- if (effectiveMode === "keyword" && (filteredDocuments.length === 0 || limit === 0)) {
1971
- return emptySearchResult(query, effectiveMode, matchMode, options, includeLinked, scoreThreshold, hybridSemanticWeight, queryExpansion, rerank, projection, warnings, runtimeFieldFilters, countOnly);
2039
+ if (runtime.bm25Mode === "auto-fallback") {
2040
+ warnings.push(`search_${runtime.effectiveMode}_offline_bm25:no_embedding_provider:using_lexical_bm25`);
1972
2041
  }
1973
- const projectRoot = process.cwd();
1974
- const globalRoot = resolveGlobalPmRoot(projectRoot);
1975
- const linkedCorpusById = /* @__PURE__ */ new Map();
1976
- if (includeLinked && (effectiveMode === "keyword" || effectiveMode === "hybrid")) {
1977
- const linkedCorpusRoots = await resolveLinkedCorpusRoots(projectRoot, globalRoot);
1978
- const linkedCorpusEntries = await Promise.all(filteredDocuments.map(async (document) => [document.metadata.id, await loadLinkedCorpus(document, linkedCorpusRoots)]));
1979
- for (const [id, corpus] of linkedCorpusEntries) {
1980
- linkedCorpusById.set(id, corpus);
1981
- }
2042
+ return hits;
2043
+ }
2044
+ async function executeExtensionSearchProvider(prepared, runtime, filteredDocuments, filteredById) {
2045
+ if (!runtime.extensionSearchProvider) {
2046
+ return null;
1982
2047
  }
1983
- const applyCoverageBonus = matchMode === "or";
1984
- const keywordHits = filteredDocuments.map((document) => buildHybridLexicalScore(
1985
- document,
1986
- tokens,
1987
- normalizedQuery,
1988
- // Linked corpus is only collected into linkedCorpusById when the user
1989
- // passed --include-linked (and mode is keyword/hybrid), so pass the
1990
- // parsed flag directly rather than re-deriving it from the mode.
1991
- includeLinked,
1992
- linkedCorpusById,
1993
- tuning,
1994
- settings.id_prefix,
1995
- applyCoverageBonus
1996
- )).filter((entry) => entry !== null).filter((entry) => matchMode !== "and" || entry.matched_all_terms === true);
1997
- let hits = keywordHits;
1998
- const useBuiltInBm25 = bm25Mode !== null && effectiveMode !== "keyword";
1999
- if (bm25Mode !== null && effectiveMode !== "keyword") {
2000
- hits = computeBuiltInBm25Hits({
2001
- requestedMode: effectiveMode,
2002
- query,
2003
- filteredDocuments,
2004
- keywordHits,
2005
- corpusFields: resolveSearchCorpusFields(settings),
2006
- bm25Params: resolveBm25Params(settings),
2007
- hybridSemanticWeight
2008
- });
2009
- if (bm25Mode === "auto-fallback") {
2010
- warnings.push(`search_${effectiveMode}_offline_bm25:no_embedding_provider:using_lexical_bm25`);
2048
+ const canUseBuiltInSemantic = runtime.providerResolution.active !== null && (runtime.vectorResolution.active !== null || runtime.extensionVectorAdapter !== null);
2049
+ try {
2050
+ const providerResponse = await Promise.resolve(runtime.extensionSearchProvider.query({
2051
+ query: prepared.query,
2052
+ mode: runtime.effectiveMode,
2053
+ tokens: prepared.tokens,
2054
+ options: prepared.options,
2055
+ settings: runtime.settings,
2056
+ documents: filteredDocuments
2057
+ }));
2058
+ return normalizeExtensionProviderHits(runtime.extensionSearchProvider.providerName, providerResponse, filteredById);
2059
+ } catch (error) {
2060
+ if (!canUseBuiltInSemantic) {
2061
+ throw new PmCliError(`Extension search provider "${runtime.extensionSearchProvider.providerName}" failed: ${error instanceof Error ? error.message : String(error)}`, EXIT_CODE.GENERIC_FAILURE);
2011
2062
  }
2063
+ return null;
2012
2064
  }
2013
- if (effectiveMode !== "keyword" && !useBuiltInBm25) {
2014
- const builtInSemanticWillRun = !extensionSearchProvider && providerResolution.active !== null && (vectorResolution.active !== null || extensionVectorAdapter !== null);
2015
- if (modeWasExplicit && builtInSemanticWillRun) {
2016
- await maybeEmitVectorIndexStaleWarning(pmRoot, filteredDocuments, warnings);
2017
- }
2018
- try {
2019
- if (!extensionSearchProvider) {
2020
- requireSemanticDependencies(effectiveMode, providerResolution, vectorResolution, extensionVectorAdapter !== null);
2021
- }
2022
- if (filteredDocuments.length === 0 || limit === 0) {
2023
- return emptySearchResult(query, effectiveMode, matchMode, options, includeLinked, scoreThreshold, hybridSemanticWeight, queryExpansion, rerank, projection, warnings, runtimeFieldFilters, countOnly);
2024
- }
2025
- const filteredById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
2026
- const canUseBuiltInSemantic = providerResolution.active !== null && (vectorResolution.active !== null || extensionVectorAdapter !== null);
2027
- if (extensionSearchProvider) {
2028
- try {
2029
- const providerResponse = await Promise.resolve(extensionSearchProvider.query({
2030
- query,
2031
- mode: effectiveMode,
2032
- tokens,
2033
- options,
2034
- settings,
2035
- documents: filteredDocuments
2036
- }));
2037
- hits = normalizeExtensionProviderHits(extensionSearchProvider.providerName, providerResponse, filteredById);
2038
- } catch (error) {
2039
- if (!canUseBuiltInSemantic) {
2040
- throw new PmCliError(`Extension search provider "${extensionSearchProvider.providerName}" failed: ${error instanceof Error ? error.message : String(error)}`, EXIT_CODE.GENERIC_FAILURE);
2041
- }
2042
- }
2043
- }
2044
- if (hits === keywordHits) {
2045
- const implicitHybridMode = !modeWasExplicit && effectiveMode === "hybrid";
2046
- const { provider, vectorStore } = requireSemanticDependencies(effectiveMode, providerResolution, vectorResolution, extensionVectorAdapter !== null);
2047
- const semanticResult = await computeSemanticOrHybridHits({
2048
- requestedMode: effectiveMode,
2049
- query,
2050
- filteredDocuments,
2051
- keywordHits,
2052
- hybridSemanticWeight,
2053
- limit,
2054
- maxResults,
2055
- provider,
2056
- vectorStore,
2057
- extensionVectorAdapter,
2058
- queryExpansion,
2059
- queryExpansionExtension,
2060
- rerank,
2061
- rerankExtension,
2062
- warnings,
2063
- settings,
2064
- /* c8 ignore next 5 -- reserved for future implicit-hybrid auto-mode; current parseMode defaults keyword when mode is omitted */
2065
- ...implicitHybridMode ? {
2066
- embeddingTimeoutMs: IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS,
2067
- vectorQueryTimeoutMs: IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS
2068
- } : {}
2069
- });
2070
- hits = semanticResult.hits;
2071
- if (semanticResult.vectorMatchCount === 0) {
2072
- if (effectiveMode === "semantic") {
2073
- hits = keywordHits;
2074
- }
2075
- warnings.push(`search_${effectiveMode}_degraded:no_vector_matches:results_are_lexical`);
2076
- }
2077
- }
2078
- } catch (error) {
2079
- const fallbackWarning = modeWasExplicit ? buildExplicitSemanticFallbackWarning(effectiveMode, error) : buildImplicitSemanticFallbackWarning(error);
2080
- effectiveMode = "keyword";
2081
- hits = keywordHits;
2082
- warnings.push(fallbackWarning);
2083
- }
2065
+ }
2066
+ function maybeApplyNoVectorFallback(effectiveMode, semanticResult, keywordHits, warnings) {
2067
+ if (semanticResult.vectorMatchCount > 0) {
2068
+ return semanticResult.hits;
2084
2069
  }
2085
- const thresholded = hits.filter((entry) => entry.exact_id_match === true || entry.score >= scoreThreshold);
2086
- const sorted = sortHits(thresholded, statusRegistry);
2087
- const total = sorted.length;
2088
- const resolvedLimit = limit ?? maxResults;
2089
- const limited = sorted.slice(0, resolvedLimit);
2090
- const projectionFields = projection.mode === "full" ? null : [...projection.fields];
2091
- const compactSummaryMode = projection.mode === "compact" && options.compact === true;
2092
- if (countOnly) {
2093
- if (compactSummaryMode) {
2094
- const compactFilters = buildCompactSearchFilterSummary({
2095
- mode: effectiveMode,
2096
- matchMode,
2097
- options,
2098
- includeLinked,
2099
- titleExact,
2100
- phraseExact,
2101
- scoreThreshold,
2102
- hybridSemanticWeight,
2103
- runtimeFieldFilters
2070
+ warnings.push(`search_${effectiveMode}_degraded:no_vector_matches:results_are_lexical`);
2071
+ return effectiveMode === "semantic" ? keywordHits : semanticResult.hits;
2072
+ }
2073
+ async function prepareBuiltInSemanticSearch(runtime, effectiveMode, filteredDocuments, warnings, modeWasExplicit) {
2074
+ const builtInSemanticWillRun = !runtime.extensionSearchProvider && runtime.providerResolution.active !== null && (runtime.vectorResolution.active !== null || runtime.extensionVectorAdapter !== null);
2075
+ if (modeWasExplicit && builtInSemanticWillRun) {
2076
+ await maybeEmitVectorIndexStaleWarning(runtime.pmRoot, filteredDocuments, warnings);
2077
+ }
2078
+ if (!runtime.extensionSearchProvider) {
2079
+ requireSemanticDependencies(effectiveMode, runtime.providerResolution, runtime.vectorResolution, runtime.extensionVectorAdapter !== null);
2080
+ }
2081
+ }
2082
+ async function executeSemanticSearch(input) {
2083
+ const { prepared, runtime, filteredDocuments, keywordHits, warnings, modeWasExplicit } = input;
2084
+ let hits = keywordHits;
2085
+ const bm25Hits = await executeBuiltInBm25Search(prepared, runtime, filteredDocuments, keywordHits, warnings);
2086
+ const semanticMode = runtime.effectiveMode;
2087
+ if (bm25Hits !== null || semanticMode === "keyword") {
2088
+ return { effectiveMode: runtime.effectiveMode, hits: bm25Hits ?? hits };
2089
+ }
2090
+ try {
2091
+ await prepareBuiltInSemanticSearch(runtime, semanticMode, filteredDocuments, warnings, modeWasExplicit);
2092
+ if (filteredDocuments.length === 0 || prepared.limit === 0) {
2093
+ return { effectiveMode: runtime.effectiveMode, hits: [] };
2094
+ }
2095
+ const filteredById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
2096
+ hits = await executeExtensionSearchProvider(prepared, runtime, filteredDocuments, filteredById) ?? hits;
2097
+ if (hits === keywordHits) {
2098
+ const { provider, vectorStore } = requireSemanticDependencies(semanticMode, runtime.providerResolution, runtime.vectorResolution, runtime.extensionVectorAdapter !== null);
2099
+ const semanticResult = await computeSemanticOrHybridHits({
2100
+ requestedMode: semanticMode,
2101
+ query: prepared.query,
2102
+ filteredDocuments,
2103
+ keywordHits,
2104
+ hybridSemanticWeight: runtime.hybridSemanticWeight,
2105
+ limit: prepared.limit,
2106
+ maxResults: runtime.maxResults,
2107
+ provider,
2108
+ vectorStore,
2109
+ extensionVectorAdapter: runtime.extensionVectorAdapter,
2110
+ queryExpansion: runtime.queryExpansion,
2111
+ queryExpansionExtension: runtime.queryExpansionExtension,
2112
+ rerank: runtime.rerank,
2113
+ rerankExtension: runtime.rerankExtension,
2114
+ warnings,
2115
+ settings: runtime.settings
2104
2116
  });
2105
- return {
2106
- query: query.trim(),
2107
- mode: effectiveMode,
2108
- items: [],
2109
- count: total,
2110
- total,
2111
- count_only: true,
2112
- filters: compactFilters,
2113
- ...warnings.length > 0 ? { warnings } : {}
2114
- };
2117
+ hits = maybeApplyNoVectorFallback(semanticMode, semanticResult, keywordHits, warnings);
2115
2118
  }
2116
- return {
2117
- query: query.trim(),
2118
- mode: effectiveMode,
2119
+ return { effectiveMode: runtime.effectiveMode, hits };
2120
+ } catch (error) {
2121
+ warnings.push(buildExplicitSemanticFallbackWarning(runtime.effectiveMode, error));
2122
+ return { effectiveMode: "keyword", hits: keywordHits };
2123
+ }
2124
+ }
2125
+ function buildCountOnlySearchResult(response, total) {
2126
+ if (response.projection.mode === "compact" && response.options.compact === true) {
2127
+ return withSearchWarnings({
2128
+ query: response.query.trim(),
2129
+ mode: response.effectiveMode,
2119
2130
  items: [],
2120
2131
  count: total,
2121
2132
  total,
2122
2133
  count_only: true,
2123
- filters: buildVerboseSearchFilters({
2124
- effectiveMode,
2125
- matchMode,
2126
- options,
2127
- includeLinked,
2128
- titleExact,
2129
- phraseExact,
2130
- scoreThreshold,
2131
- hybridSemanticWeight,
2132
- queryExpansion,
2133
- rerank,
2134
- runtimeFieldFilters
2135
- }),
2136
- projection: {
2137
- mode: projection.mode,
2138
- fields: projectionFields
2139
- },
2140
- now: nowIso(),
2141
- ...warnings.length > 0 ? { warnings } : {}
2142
- };
2134
+ filters: buildCompactSearchFilterSummary({
2135
+ mode: response.effectiveMode,
2136
+ matchMode: response.matchMode,
2137
+ options: response.options,
2138
+ includeLinked: response.includeLinked,
2139
+ titleExact: response.titleExact,
2140
+ phraseExact: response.phraseExact,
2141
+ scoreThreshold: response.scoreThreshold,
2142
+ hybridSemanticWeight: response.hybridSemanticWeight,
2143
+ runtimeFieldFilters: response.runtimeFieldFilters
2144
+ })
2145
+ }, response.warnings);
2146
+ }
2147
+ const projectionFields = response.projection.mode === "full" ? null : [...response.projection.fields];
2148
+ return withSearchWarnings({
2149
+ query: response.query.trim(),
2150
+ mode: response.effectiveMode,
2151
+ items: [],
2152
+ count: total,
2153
+ total,
2154
+ count_only: true,
2155
+ filters: buildVerboseSearchFilters({
2156
+ effectiveMode: response.effectiveMode,
2157
+ matchMode: response.matchMode,
2158
+ options: response.options,
2159
+ includeLinked: response.includeLinked,
2160
+ titleExact: response.titleExact,
2161
+ phraseExact: response.phraseExact,
2162
+ scoreThreshold: response.scoreThreshold,
2163
+ hybridSemanticWeight: response.hybridSemanticWeight,
2164
+ queryExpansion: response.queryExpansion,
2165
+ rerank: response.rerank,
2166
+ runtimeFieldFilters: response.runtimeFieldFilters
2167
+ }),
2168
+ projection: {
2169
+ mode: response.projection.mode,
2170
+ fields: projectionFields
2171
+ },
2172
+ now: nowIso()
2173
+ }, response.warnings);
2174
+ }
2175
+ function withSearchWarnings(result, warnings) {
2176
+ if (warnings.length === 0) {
2177
+ return result;
2143
2178
  }
2144
- let projectedHits = limited;
2145
- let effectiveProjection = projection;
2146
- if (highlight) {
2147
- const documentById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
2148
- projectedHits = limited.map((hit) => ({
2149
- ...hit,
2150
- highlights: buildHitHighlights(documentById.get(hit.item.id), hit.matched_fields, tokens)
2151
- }));
2152
- if (projection.mode !== "full" && !projection.fields.includes("highlights")) {
2153
- effectiveProjection = { mode: projection.mode, fields: [...projection.fields, "highlights"] };
2154
- }
2179
+ return { ...result, warnings };
2180
+ }
2181
+ function attachSearchHighlights(prepared, filteredDocuments, limited) {
2182
+ if (!prepared.highlight) {
2183
+ return { hits: limited, projection: prepared.projection };
2155
2184
  }
2156
- const projectedItems = projectSearchHits(projectedHits, effectiveProjection);
2157
- const finalProjectionFields = effectiveProjection.mode === "full" ? null : [...effectiveProjection.fields];
2158
- const truncationExtras = limited.length < total ? { total } : {};
2159
- if (compactSummaryMode) {
2160
- const compactFilters = buildCompactSearchFilterSummary({
2161
- mode: effectiveMode,
2162
- matchMode,
2163
- options,
2164
- includeLinked,
2165
- titleExact,
2166
- phraseExact,
2167
- scoreThreshold,
2168
- hybridSemanticWeight,
2169
- runtimeFieldFilters
2170
- });
2171
- return {
2172
- query: query.trim(),
2173
- mode: effectiveMode,
2185
+ const documentById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));
2186
+ const hits = limited.map((hit) => ({
2187
+ ...hit,
2188
+ highlights: buildHitHighlights(documentById.get(hit.item.id), hit.matched_fields, prepared.tokens)
2189
+ }));
2190
+ if (prepared.projection.mode === "full" || prepared.projection.fields.includes("highlights")) {
2191
+ return { hits, projection: prepared.projection };
2192
+ }
2193
+ return { hits, projection: { mode: prepared.projection.mode, fields: [...prepared.projection.fields, "highlights"] } };
2194
+ }
2195
+ function buildSearchResultForHits(response, projectedItems, total, limitedCount, effectiveProjection) {
2196
+ const truncationExtras = limitedCount < total ? { total } : {};
2197
+ if (response.projection.mode === "compact" && response.options.compact === true) {
2198
+ return withSearchWarnings({
2199
+ query: response.query.trim(),
2200
+ mode: response.effectiveMode,
2174
2201
  items: projectedItems,
2175
2202
  count: projectedItems.length,
2176
2203
  ...truncationExtras,
2177
- filters: compactFilters,
2178
- ...warnings.length > 0 ? { warnings } : {}
2179
- };
2204
+ filters: buildCompactSearchFilterSummary({
2205
+ mode: response.effectiveMode,
2206
+ matchMode: response.matchMode,
2207
+ options: response.options,
2208
+ includeLinked: response.includeLinked,
2209
+ titleExact: response.titleExact,
2210
+ phraseExact: response.phraseExact,
2211
+ scoreThreshold: response.scoreThreshold,
2212
+ hybridSemanticWeight: response.hybridSemanticWeight,
2213
+ runtimeFieldFilters: response.runtimeFieldFilters
2214
+ })
2215
+ }, response.warnings);
2180
2216
  }
2217
+ const finalProjectionFields = effectiveProjection.mode === "full" ? null : [...effectiveProjection.fields];
2181
2218
  return {
2182
- query: query.trim(),
2183
- mode: effectiveMode,
2219
+ query: response.query.trim(),
2220
+ mode: response.effectiveMode,
2184
2221
  items: projectedItems,
2185
2222
  count: projectedItems.length,
2186
2223
  ...truncationExtras,
2187
2224
  filters: buildVerboseSearchFilters({
2188
- effectiveMode,
2189
- matchMode,
2190
- options,
2191
- includeLinked,
2192
- titleExact,
2193
- phraseExact,
2194
- scoreThreshold,
2195
- hybridSemanticWeight,
2196
- queryExpansion,
2197
- rerank,
2198
- runtimeFieldFilters
2225
+ effectiveMode: response.effectiveMode,
2226
+ matchMode: response.matchMode,
2227
+ options: response.options,
2228
+ includeLinked: response.includeLinked,
2229
+ titleExact: response.titleExact,
2230
+ phraseExact: response.phraseExact,
2231
+ scoreThreshold: response.scoreThreshold,
2232
+ hybridSemanticWeight: response.hybridSemanticWeight,
2233
+ queryExpansion: response.queryExpansion,
2234
+ rerank: response.rerank,
2235
+ runtimeFieldFilters: response.runtimeFieldFilters
2199
2236
  }),
2200
2237
  projection: {
2201
2238
  mode: effectiveProjection.mode,
2202
2239
  fields: finalProjectionFields
2203
2240
  },
2204
2241
  now: nowIso(),
2205
- ...warnings.length > 0 ? { warnings } : {}
2242
+ ...response.warnings.length > 0 ? { warnings: response.warnings } : {}
2243
+ };
2244
+ }
2245
+ async function runSearch(rawQuery, rawOptions, global) {
2246
+ const prepared = prepareSearchInput(rawQuery, rawOptions);
2247
+ const runtime = await resolveSearchRuntimeContext(prepared, global);
2248
+ const corpus = await loadFilteredSearchCorpus(prepared, runtime);
2249
+ const warnings = corpus.warnings;
2250
+ warnings.push(...prepared.inlineWarnings);
2251
+ if (runtime.effectiveMode === "hybrid" && runtime.semanticWeightProvided && runtime.semanticWeightOverride === void 0) {
2252
+ warnings.push("search_hybrid_semantic_weight_override_invalid:using_settings_default");
2253
+ }
2254
+ const responseBase = {
2255
+ query: prepared.query,
2256
+ matchMode: prepared.matchMode,
2257
+ options: prepared.options,
2258
+ includeLinked: prepared.includeLinked,
2259
+ titleExact: prepared.titleExact,
2260
+ phraseExact: prepared.phraseExact,
2261
+ scoreThreshold: runtime.scoreThreshold,
2262
+ hybridSemanticWeight: runtime.hybridSemanticWeight,
2263
+ queryExpansion: runtime.queryExpansion,
2264
+ rerank: runtime.rerank,
2265
+ projection: prepared.projection,
2266
+ warnings,
2267
+ runtimeFieldFilters: runtime.runtimeFieldFilters
2206
2268
  };
2269
+ if (runtime.effectiveMode === "keyword" && (corpus.filteredDocuments.length === 0 || prepared.limit === 0)) {
2270
+ return buildEmptySearchResultFromContext({ ...responseBase, effectiveMode: runtime.effectiveMode }, prepared.countOnly);
2271
+ }
2272
+ const keywordHits = await computeKeywordSearchHits(prepared, runtime, corpus.filteredDocuments);
2273
+ const modeResult = await executeSemanticSearch({
2274
+ prepared,
2275
+ runtime,
2276
+ filteredDocuments: corpus.filteredDocuments,
2277
+ keywordHits,
2278
+ warnings,
2279
+ modeWasExplicit: prepared.modeWasExplicit
2280
+ });
2281
+ if (modeResult.effectiveMode !== "keyword" && modeResult.hits.length === 0 && (corpus.filteredDocuments.length === 0 || prepared.limit === 0)) {
2282
+ return buildEmptySearchResultFromContext({ ...responseBase, effectiveMode: modeResult.effectiveMode }, prepared.countOnly);
2283
+ }
2284
+ const thresholded = modeResult.hits.filter((entry) => entry.exact_id_match === true || entry.score >= runtime.scoreThreshold);
2285
+ const sorted = sortHits(thresholded, runtime.statusRegistry);
2286
+ const total = sorted.length;
2287
+ const resolvedLimit = prepared.limit ?? runtime.maxResults;
2288
+ const limited = sorted.slice(0, resolvedLimit);
2289
+ const response = { ...responseBase, effectiveMode: modeResult.effectiveMode };
2290
+ if (prepared.countOnly) {
2291
+ return buildCountOnlySearchResult(response, total);
2292
+ }
2293
+ const { hits: projectedHits, projection: effectiveProjection } = attachSearchHighlights(prepared, corpus.filteredDocuments, limited);
2294
+ const projectedItems = projectSearchHits(projectedHits, effectiveProjection);
2295
+ return buildSearchResultForHits(response, projectedItems, total, limited.length, effectiveProjection);
2207
2296
  }
2208
2297
 
2209
2298
  export {
@@ -2216,6 +2305,6 @@ export {
2216
2305
  resolveSearchTuning,
2217
2306
  runSearch
2218
2307
  };
2219
- //# sourceMappingURL=chunk-FFMQB7WR.js.map
2308
+ //# sourceMappingURL=chunk-SYVUU7EK.js.map
2220
2309
 
2221
- //# debugId=fbf75a7d-5709-50b7-89c0-2b4e07fd351f
2310
+ //# debugId=02364b53-8625-5d05-90d9-1234e6d63964