@unbrained/pm-cli 2026.7.1 → 2026.7.3

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 (625) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/CHANGELOG.md +25 -0
  3. package/CONTRIBUTING.md +2 -2
  4. package/README.md +1 -1
  5. package/dist/cli/commander-usage.d.ts +2 -0
  6. package/dist/cli/commander-usage.js +110 -86
  7. package/dist/cli/commander-usage.js.map +1 -1
  8. package/dist/cli/commands/activity.js +79 -57
  9. package/dist/cli/commands/activity.js.map +1 -1
  10. package/dist/cli/commands/aggregate.js +102 -79
  11. package/dist/cli/commands/aggregate.js.map +1 -1
  12. package/dist/cli/commands/calendar.js +278 -243
  13. package/dist/cli/commands/calendar.js.map +1 -1
  14. package/dist/cli/commands/close-many.js +176 -114
  15. package/dist/cli/commands/close-many.js.map +1 -1
  16. package/dist/cli/commands/close.js +157 -129
  17. package/dist/cli/commands/close.js.map +1 -1
  18. package/dist/cli/commands/comments-audit.js +50 -42
  19. package/dist/cli/commands/comments-audit.js.map +1 -1
  20. package/dist/cli/commands/config.d.ts +2 -0
  21. package/dist/cli/commands/config.js +443 -879
  22. package/dist/cli/commands/config.js.map +1 -1
  23. package/dist/cli/commands/context.js +365 -287
  24. package/dist/cli/commands/context.js.map +1 -1
  25. package/dist/cli/commands/contracts.js +352 -238
  26. package/dist/cli/commands/contracts.js.map +1 -1
  27. package/dist/cli/commands/create.js +32 -17
  28. package/dist/cli/commands/create.js.map +1 -1
  29. package/dist/cli/commands/dedupe-audit.js +46 -39
  30. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  31. package/dist/cli/commands/dedupe-merge.js +88 -69
  32. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  33. package/dist/cli/commands/extension/doctor.js +56 -67
  34. package/dist/cli/commands/extension/doctor.js.map +1 -1
  35. package/dist/cli/commands/extension/shared.js +21 -15
  36. package/dist/cli/commands/extension/shared.js.map +1 -1
  37. package/dist/cli/commands/get.js +114 -81
  38. package/dist/cli/commands/get.js.map +1 -1
  39. package/dist/cli/commands/health.d.ts +17 -0
  40. package/dist/cli/commands/health.js +545 -417
  41. package/dist/cli/commands/health.js.map +1 -1
  42. package/dist/cli/commands/history-compact.js +209 -140
  43. package/dist/cli/commands/history-compact.js.map +1 -1
  44. package/dist/cli/commands/history-redact.js +162 -119
  45. package/dist/cli/commands/history-redact.js.map +1 -1
  46. package/dist/cli/commands/history-repair.js +120 -85
  47. package/dist/cli/commands/history-repair.js.map +1 -1
  48. package/dist/cli/commands/init-agent-guidance.js +32 -19
  49. package/dist/cli/commands/init-agent-guidance.js.map +1 -1
  50. package/dist/cli/commands/init.d.ts +8 -2
  51. package/dist/cli/commands/init.js +263 -162
  52. package/dist/cli/commands/init.js.map +1 -1
  53. package/dist/cli/commands/list.js +152 -102
  54. package/dist/cli/commands/list.js.map +1 -1
  55. package/dist/cli/commands/next.js +60 -40
  56. package/dist/cli/commands/next.js.map +1 -1
  57. package/dist/cli/commands/plan.js +373 -298
  58. package/dist/cli/commands/plan.js.map +1 -1
  59. package/dist/cli/commands/profile.js +23 -15
  60. package/dist/cli/commands/profile.js.map +1 -1
  61. package/dist/cli/commands/recurrence-parsers.js +43 -25
  62. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  63. package/dist/cli/commands/reindex.d.ts +21 -5
  64. package/dist/cli/commands/reindex.js +345 -205
  65. package/dist/cli/commands/reindex.js.map +1 -1
  66. package/dist/cli/commands/restore.d.ts +8 -7
  67. package/dist/cli/commands/restore.js +105 -69
  68. package/dist/cli/commands/restore.js.map +1 -1
  69. package/dist/cli/commands/schema.js +33 -30
  70. package/dist/cli/commands/schema.js.map +1 -1
  71. package/dist/cli/commands/search.d.ts +10 -2
  72. package/dist/cli/commands/search.js +503 -470
  73. package/dist/cli/commands/search.js.map +1 -1
  74. package/dist/cli/commands/telemetry.js +98 -87
  75. package/dist/cli/commands/telemetry.js.map +1 -1
  76. package/dist/cli/commands/test-all.js +237 -168
  77. package/dist/cli/commands/test-all.js.map +1 -1
  78. package/dist/cli/commands/test.d.ts +6 -5
  79. package/dist/cli/commands/test.js +424 -344
  80. package/dist/cli/commands/test.js.map +1 -1
  81. package/dist/cli/commands/update-many.js +57 -42
  82. package/dist/cli/commands/update-many.js.map +1 -1
  83. package/dist/cli/commands/update.d.ts +1 -1
  84. package/dist/cli/commands/update.js +738 -671
  85. package/dist/cli/commands/update.js.map +1 -1
  86. package/dist/cli/commands/validate.d.ts +20 -1
  87. package/dist/cli/commands/validate.js +478 -343
  88. package/dist/cli/commands/validate.js.map +1 -1
  89. package/dist/cli/error-guidance.js +406 -361
  90. package/dist/cli/error-guidance.js.map +1 -1
  91. package/dist/cli/extension-command-help.js +27 -19
  92. package/dist/cli/extension-command-help.js.map +1 -1
  93. package/dist/cli/help-json-payload.js +57 -49
  94. package/dist/cli/help-json-payload.js.map +1 -1
  95. package/dist/cli/main.d.ts +47 -0
  96. package/dist/cli/main.js +474 -371
  97. package/dist/cli/main.js.map +1 -1
  98. package/dist/cli/migration-gates.js +22 -45
  99. package/dist/cli/migration-gates.js.map +1 -1
  100. package/dist/cli/register-list-query.js +299 -310
  101. package/dist/cli/register-list-query.js.map +1 -1
  102. package/dist/cli/register-mutation.js +763 -779
  103. package/dist/cli/register-mutation.js.map +1 -1
  104. package/dist/cli/register-operations.js +386 -362
  105. package/dist/cli/register-operations.js.map +1 -1
  106. package/dist/cli/register-setup.js +120 -101
  107. package/dist/cli/register-setup.js.map +1 -1
  108. package/dist/cli/registration-helpers.d.ts +4 -0
  109. package/dist/cli/registration-helpers.js +45 -56
  110. package/dist/cli/registration-helpers.js.map +1 -1
  111. package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js → activity-5YWLSPGE.js} +9 -9
  112. package/dist/cli-bundle/chunks/activity-BIML7K2D.js +16 -0
  113. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js → aggregate-2V2M3JZU.js} +107 -83
  114. package/dist/cli-bundle/chunks/{aggregate-SDF7DUOD.js.map → aggregate-2V2M3JZU.js.map} +2 -2
  115. package/dist/cli-bundle/chunks/{aggregate-JTEF4BP7.js → aggregate-EK7DXML7.js} +108 -84
  116. package/dist/cli-bundle/chunks/aggregate-EK7DXML7.js.map +1 -0
  117. package/dist/cli-bundle/chunks/{append-LOVPGVPT.js → append-EZESUVJT.js} +8 -8
  118. package/dist/cli-bundle/chunks/{append-QCFJSDFL.js → append-JFG4WQMG.js} +8 -8
  119. package/dist/cli-bundle/chunks/{chunk-TP5Q5ZD3.js → chunk-32IUNTG4.js} +158 -119
  120. package/dist/cli-bundle/chunks/chunk-32IUNTG4.js.map +1 -0
  121. package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js → chunk-3W2HJKJX.js} +3 -3
  122. package/dist/cli-bundle/chunks/{chunk-VARHOHYV.js → chunk-4EXFFP7T.js} +86 -52
  123. package/dist/cli-bundle/chunks/chunk-4EXFFP7T.js.map +7 -0
  124. package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js → chunk-4PFVUUYV.js} +2 -2
  125. package/dist/cli-bundle/chunks/{chunk-JSU5P7VS.js → chunk-4WB6S4YX.js} +308 -184
  126. package/dist/cli-bundle/chunks/chunk-4WB6S4YX.js.map +1 -0
  127. package/dist/cli-bundle/chunks/{chunk-HXTQJXWT.js → chunk-572FKBRL.js} +61 -102
  128. package/dist/cli-bundle/chunks/chunk-572FKBRL.js.map +1 -0
  129. package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js → chunk-5E7N4T2Z.js} +2 -2
  130. package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js → chunk-5IZUBZBR.js} +3 -3
  131. package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js → chunk-5JIWFWOZ.js} +2 -2
  132. package/dist/cli-bundle/chunks/{chunk-FFMQB7WR.js → chunk-67LARBDL.js} +493 -404
  133. package/dist/cli-bundle/chunks/chunk-67LARBDL.js.map +1 -0
  134. package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js → chunk-6CDCWKSX.js} +4 -4
  135. package/dist/cli-bundle/chunks/{chunk-3K2M5OYU.js → chunk-6KRFL33E.js} +308 -184
  136. package/dist/cli-bundle/chunks/chunk-6KRFL33E.js.map +7 -0
  137. package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js → chunk-6NYJGMTY.js} +2 -2
  138. package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js → chunk-7CLLC75T.js} +4 -4
  139. package/dist/cli-bundle/chunks/{chunk-2466X6E4.js → chunk-7LYO6S5A.js} +8 -8
  140. package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js → chunk-A3OQ7TFW.js} +8 -8
  141. package/dist/cli-bundle/chunks/{chunk-5CGRF3L5.js → chunk-AIKU3IIL.js} +153 -90
  142. package/dist/cli-bundle/chunks/chunk-AIKU3IIL.js.map +1 -0
  143. package/dist/cli-bundle/chunks/{chunk-WYDHYJPO.js → chunk-AJHYQCBJ.js} +39 -5
  144. package/dist/cli-bundle/chunks/chunk-AJHYQCBJ.js.map +7 -0
  145. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  146. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  147. package/dist/cli-bundle/chunks/{chunk-OTUHB4HS.js → chunk-BE2SR6QL.js} +92 -77
  148. package/dist/cli-bundle/chunks/chunk-BE2SR6QL.js.map +1 -0
  149. package/dist/cli-bundle/chunks/{chunk-JLM7BHI7.js → chunk-BI4R7HI2.js} +75 -53
  150. package/dist/cli-bundle/chunks/chunk-BI4R7HI2.js.map +7 -0
  151. package/dist/cli-bundle/chunks/{chunk-AXIDKKAT.js → chunk-CXR3CMBQ.js} +33 -6
  152. package/dist/cli-bundle/chunks/chunk-CXR3CMBQ.js.map +1 -0
  153. package/dist/cli-bundle/chunks/{chunk-ZETXE4SE.js → chunk-ECU6MMTQ.js} +713 -613
  154. package/dist/cli-bundle/chunks/chunk-ECU6MMTQ.js.map +1 -0
  155. package/dist/cli-bundle/chunks/{chunk-2D4HATP2.js → chunk-EJ2OCBHF.js} +54 -30
  156. package/dist/cli-bundle/chunks/chunk-EJ2OCBHF.js.map +1 -0
  157. package/dist/cli-bundle/chunks/{chunk-BDTISOSD.js → chunk-EQURFOMH.js} +41 -26
  158. package/dist/cli-bundle/chunks/chunk-EQURFOMH.js.map +7 -0
  159. package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js → chunk-ER4ME5U2.js} +3 -3
  160. package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js → chunk-ERG65A2L.js} +2 -2
  161. package/dist/cli-bundle/chunks/{chunk-IZBR4NRW.js → chunk-F6WNBITZ.js} +157 -113
  162. package/dist/cli-bundle/chunks/chunk-F6WNBITZ.js.map +7 -0
  163. package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js → chunk-FH2H3CBD.js} +3 -3
  164. package/dist/cli-bundle/chunks/{chunk-JPECA746.js → chunk-FUFFPIYA.js} +2 -2
  165. package/dist/cli-bundle/chunks/{chunk-CF7RL6FR.js → chunk-FZJM2TXF.js} +110 -73
  166. package/dist/cli-bundle/chunks/chunk-FZJM2TXF.js.map +1 -0
  167. package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js → chunk-GUYNUXQT.js} +3 -3
  168. package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js → chunk-GVJE5T7Q.js} +2 -2
  169. package/dist/cli-bundle/chunks/{chunk-3J6JRJ3I.js → chunk-HB4FAT3O.js} +42 -60
  170. package/dist/cli-bundle/chunks/chunk-HB4FAT3O.js.map +7 -0
  171. package/dist/cli-bundle/chunks/{chunk-55SNVXRQ.js → chunk-HQAF23Q2.js} +626 -484
  172. package/dist/cli-bundle/chunks/chunk-HQAF23Q2.js.map +7 -0
  173. package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js → chunk-JBZ2NTKX.js} +2 -2
  174. package/dist/cli-bundle/chunks/{chunk-RMMQ74TG.js → chunk-JPATY4SE.js} +54 -30
  175. package/dist/cli-bundle/chunks/chunk-JPATY4SE.js.map +7 -0
  176. package/dist/cli-bundle/chunks/{chunk-IPYBJWTE.js → chunk-K5DT2YKM.js} +109 -72
  177. package/dist/cli-bundle/chunks/chunk-K5DT2YKM.js.map +7 -0
  178. package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js → chunk-KEZOIPCR.js} +3 -3
  179. package/dist/cli-bundle/chunks/{chunk-RVUALSJF.js → chunk-KHVGM5CS.js} +466 -365
  180. package/dist/cli-bundle/chunks/chunk-KHVGM5CS.js.map +7 -0
  181. package/dist/cli-bundle/chunks/{chunk-YITK2PJ6.js → chunk-KS6ATO47.js} +288 -175
  182. package/dist/cli-bundle/chunks/chunk-KS6ATO47.js.map +7 -0
  183. package/dist/cli-bundle/chunks/{chunk-7R4QEMZZ.js → chunk-L4SLHV6G.js} +463 -362
  184. package/dist/cli-bundle/chunks/chunk-L4SLHV6G.js.map +1 -0
  185. package/dist/cli-bundle/chunks/{chunk-RLDHZHQS.js → chunk-LBE5QFMZ.js} +158 -114
  186. package/dist/cli-bundle/chunks/chunk-LBE5QFMZ.js.map +1 -0
  187. package/dist/cli-bundle/chunks/{chunk-22WKIL3H.js → chunk-LCWQP6NM.js} +76 -54
  188. package/dist/cli-bundle/chunks/chunk-LCWQP6NM.js.map +1 -0
  189. package/dist/cli-bundle/chunks/{chunk-KNPEF7QG.js → chunk-LOWVNZBZ.js} +91 -76
  190. package/dist/cli-bundle/chunks/chunk-LOWVNZBZ.js.map +7 -0
  191. package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js → chunk-MDHWWBNZ.js} +3 -3
  192. package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js → chunk-MEZZZBYX.js} +2 -2
  193. package/dist/cli-bundle/chunks/{chunk-V3NOKJF2.js → chunk-MHRS5FUX.js} +288 -175
  194. package/dist/cli-bundle/chunks/chunk-MHRS5FUX.js.map +1 -0
  195. package/dist/cli-bundle/chunks/{chunk-3XZCOZ5J.js → chunk-NOIEVOK5.js} +391 -313
  196. package/dist/cli-bundle/chunks/chunk-NOIEVOK5.js.map +1 -0
  197. package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js → chunk-NZ7QIUP5.js} +4 -4
  198. package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js → chunk-OGLGI22K.js} +115 -67
  199. package/dist/cli-bundle/chunks/{chunk-UYUYDGIB.js.map → chunk-OGLGI22K.js.map} +1 -1
  200. package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js → chunk-P5L7Z2O6.js} +2 -2
  201. package/dist/cli-bundle/chunks/{chunk-BZCEN4JA.js → chunk-PULUSQAV.js} +492 -403
  202. package/dist/cli-bundle/chunks/chunk-PULUSQAV.js.map +7 -0
  203. package/dist/cli-bundle/chunks/{chunk-3VGN2UWE.js → chunk-QCDTQCMW.js} +22 -30
  204. package/dist/cli-bundle/chunks/chunk-QCDTQCMW.js.map +1 -0
  205. package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js → chunk-QNNQAAZ5.js} +24 -18
  206. package/dist/cli-bundle/chunks/{chunk-4A3BJ675.js.map → chunk-QNNQAAZ5.js.map} +1 -1
  207. package/dist/cli-bundle/chunks/{chunk-MDPEOIGN.js → chunk-RAHINBVP.js} +60 -101
  208. package/dist/cli-bundle/chunks/chunk-RAHINBVP.js.map +7 -0
  209. package/dist/cli-bundle/chunks/{chunk-CWFNTKQJ.js → chunk-RJH5VQHW.js} +43 -61
  210. package/dist/cli-bundle/chunks/chunk-RJH5VQHW.js.map +1 -0
  211. package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js → chunk-SU2E4AWU.js} +6 -6
  212. package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js → chunk-SU3TB4NS.js} +2 -2
  213. package/dist/cli-bundle/chunks/{chunk-JWXRETDF.js → chunk-SYE6WMV6.js} +626 -484
  214. package/dist/cli-bundle/chunks/chunk-SYE6WMV6.js.map +1 -0
  215. package/dist/cli-bundle/chunks/{chunk-NWMZWYYB.js → chunk-T3P7PMZP.js} +42 -27
  216. package/dist/cli-bundle/chunks/chunk-T3P7PMZP.js.map +1 -0
  217. package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js → chunk-T4XBKJ3F.js} +4 -4
  218. package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js → chunk-T6AXEBOP.js} +23 -17
  219. package/dist/cli-bundle/chunks/{chunk-RH5ZBYFD.js.map → chunk-T6AXEBOP.js.map} +2 -2
  220. package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js → chunk-TQ6AX5SQ.js} +58 -69
  221. package/dist/cli-bundle/chunks/{chunk-5QFDBI4F.js.map → chunk-TQ6AX5SQ.js.map} +2 -2
  222. package/dist/cli-bundle/chunks/{chunk-4XOIEKSD.js → chunk-U3S2B7TA.js} +86 -52
  223. package/dist/cli-bundle/chunks/chunk-U3S2B7TA.js.map +1 -0
  224. package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js → chunk-U5TR4N7J.js} +7 -7
  225. package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js → chunk-UMNQZS4H.js} +3 -3
  226. package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js → chunk-WJA3PXW7.js} +7 -7
  227. package/dist/cli-bundle/chunks/{chunk-RGEMWD6Q.js → chunk-WRYERRZX.js} +157 -118
  228. package/dist/cli-bundle/chunks/chunk-WRYERRZX.js.map +7 -0
  229. package/dist/cli-bundle/chunks/{chunk-NUHHPVVS.js → chunk-WYOIIFSE.js} +712 -612
  230. package/dist/cli-bundle/chunks/chunk-WYOIIFSE.js.map +7 -0
  231. package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js → chunk-XRYSCRZR.js} +116 -68
  232. package/dist/cli-bundle/chunks/{chunk-4DSGXSBL.js.map → chunk-XRYSCRZR.js.map} +3 -3
  233. package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js → chunk-YF746GTH.js} +59 -70
  234. package/dist/cli-bundle/chunks/{chunk-NU2UEROZ.js.map → chunk-YF746GTH.js.map} +1 -1
  235. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js → chunk-YPWUSH72.js} +390 -312
  236. package/dist/cli-bundle/chunks/{chunk-JMP4E6D7.js.map → chunk-YPWUSH72.js.map} +2 -2
  237. package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js → chunk-YSDFIY7N.js} +3 -3
  238. package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js → chunk-YSGTMDWC.js} +2 -2
  239. package/dist/cli-bundle/chunks/{chunk-NFDPYAIP.js → chunk-YVKZ3ANP.js} +21 -29
  240. package/dist/cli-bundle/chunks/chunk-YVKZ3ANP.js.map +7 -0
  241. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  242. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  243. package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js → chunk-Z5F6XZXE.js} +6 -6
  244. package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js → chunk-Z7RPDF2Y.js} +3 -3
  245. package/dist/cli-bundle/chunks/{chunk-3S2KT7NG.js → chunk-ZFTKYWIF.js} +152 -89
  246. package/dist/cli-bundle/chunks/chunk-ZFTKYWIF.js.map +7 -0
  247. package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js → claim-2BGBGSVI.js} +8 -8
  248. package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js → claim-5GU7OE67.js} +8 -8
  249. package/dist/cli-bundle/chunks/close-6YODBUIV.js +14 -0
  250. package/dist/cli-bundle/chunks/{close-TQYAAFJP.js → close-AFVKPR57.js} +7 -7
  251. package/dist/cli-bundle/chunks/{close-many-BG5QQIDQ.js → close-many-7KLOSYLP.js} +186 -122
  252. package/dist/cli-bundle/chunks/close-many-7KLOSYLP.js.map +7 -0
  253. package/dist/cli-bundle/chunks/{close-many-LDRVEQY2.js → close-many-JKUJMHLG.js} +187 -123
  254. package/dist/cli-bundle/chunks/close-many-JKUJMHLG.js.map +1 -0
  255. package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js → comments-DNWHEBOS.js} +9 -9
  256. package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js → comments-RW23R3VE.js} +9 -9
  257. package/dist/cli-bundle/chunks/config-AUM5WBYA.js +1072 -0
  258. package/dist/cli-bundle/chunks/config-AUM5WBYA.js.map +7 -0
  259. package/dist/cli-bundle/chunks/config-OZWSA2NP.js +1062 -0
  260. package/dist/cli-bundle/chunks/config-OZWSA2NP.js.map +1 -0
  261. package/dist/cli-bundle/chunks/{context-B6275WPX.js → context-OYXRGY7S.js} +12 -12
  262. package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js → context-PKCEHQY3.js} +12 -12
  263. package/dist/cli-bundle/chunks/{contracts-HN7ABKLP.js → contracts-L6ODXNUM.js} +320 -199
  264. package/dist/cli-bundle/chunks/contracts-L6ODXNUM.js.map +7 -0
  265. package/dist/cli-bundle/chunks/{contracts-W4FZVVD6.js → contracts-X74F2GSM.js} +321 -200
  266. package/dist/cli-bundle/chunks/contracts-X74F2GSM.js.map +1 -0
  267. package/dist/cli-bundle/chunks/{copy-DEM4DATS.js → copy-6XOR3HKN.js} +5 -5
  268. package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js → copy-I4NCLBR4.js} +5 -5
  269. package/dist/cli-bundle/chunks/{create-RLRJMRTM.js → create-PM45M6PE.js} +12 -12
  270. package/dist/cli-bundle/chunks/create-Z7YCH3BE.js +28 -0
  271. package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js → delete-7YXHYG67.js} +5 -5
  272. package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js → delete-LPISP43T.js} +5 -5
  273. package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js → deps-N2T26FME.js} +5 -5
  274. package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js → deps-WATKQDE3.js} +5 -5
  275. package/dist/cli-bundle/chunks/{docs-GYZNVS26.js → docs-6LQ3GLM7.js} +7 -7
  276. package/dist/cli-bundle/chunks/{docs-26S44RXU.js → docs-Z3X6JZLT.js} +7 -7
  277. package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js → eval-6DCLG52D.js} +10 -10
  278. package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js → eval-Y3ZCUTHK.js} +10 -10
  279. package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js → extension-BNINIMT7.js} +11 -11
  280. package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js → extension-QWE4YYK5.js} +11 -11
  281. package/dist/cli-bundle/chunks/{files-NQHEXUZD.js → files-6SGKHS6O.js} +7 -7
  282. package/dist/cli-bundle/chunks/{files-MBNICQFM.js → files-FUYPSOFJ.js} +7 -7
  283. package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js → focus-2Q3K76G2.js} +6 -6
  284. package/dist/cli-bundle/chunks/{focus-XZW5423D.js → focus-ATLBWXXD.js} +6 -6
  285. package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js → gc-RUYEMNRF.js} +3 -3
  286. package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js → gc-TDWSDR66.js} +3 -3
  287. package/dist/cli-bundle/chunks/{get-A7MAOHCU.js → get-2WGLX74N.js} +120 -80
  288. package/dist/cli-bundle/chunks/get-2WGLX74N.js.map +7 -0
  289. package/dist/cli-bundle/chunks/{get-DSDEKJ3L.js → get-LY6M2JIM.js} +121 -81
  290. package/dist/cli-bundle/chunks/get-LY6M2JIM.js.map +1 -0
  291. package/dist/cli-bundle/chunks/{health-3IPFLKXB.js → health-4RKHYS3T.js} +535 -371
  292. package/dist/cli-bundle/chunks/health-4RKHYS3T.js.map +1 -0
  293. package/dist/cli-bundle/chunks/{health-GZXGBZ36.js → health-TMFVNYRA.js} +534 -370
  294. package/dist/cli-bundle/chunks/health-TMFVNYRA.js.map +7 -0
  295. package/dist/cli-bundle/chunks/history-CGNQJXFE.js +18 -0
  296. package/dist/cli-bundle/chunks/{history-NERDJNUB.js → history-SGRRS72R.js} +8 -8
  297. package/dist/cli-bundle/chunks/{history-compact-2WRZ2WK4.js → history-compact-LOED43R3.js} +213 -134
  298. package/dist/cli-bundle/chunks/history-compact-LOED43R3.js.map +7 -0
  299. package/dist/cli-bundle/chunks/{history-compact-HR7BB4LR.js → history-compact-V5DNAQHH.js} +214 -135
  300. package/dist/cli-bundle/chunks/history-compact-V5DNAQHH.js.map +1 -0
  301. package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js → history-redact-IRL7WJ3E.js} +9 -9
  302. package/dist/cli-bundle/chunks/history-redact-N3JK7VBW.js +19 -0
  303. package/dist/cli-bundle/chunks/{history-repair-XA3LC4GA.js → history-repair-4WVBVHFR.js} +124 -84
  304. package/dist/cli-bundle/chunks/history-repair-4WVBVHFR.js.map +1 -0
  305. package/dist/cli-bundle/chunks/{history-repair-LCMOS45X.js → history-repair-PGYQJMGD.js} +123 -83
  306. package/dist/cli-bundle/chunks/history-repair-PGYQJMGD.js.map +7 -0
  307. package/dist/cli-bundle/chunks/{init-64XDLQJB.js → init-4GESW7RM.js} +12 -12
  308. package/dist/cli-bundle/chunks/init-XIDPABA4.js +22 -0
  309. package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js → learnings-4BHWFFUV.js} +9 -9
  310. package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js → learnings-4FJY7WIW.js} +9 -9
  311. package/dist/cli-bundle/chunks/{list-G5Y65VF6.js → list-472TIOVK.js} +8 -8
  312. package/dist/cli-bundle/chunks/{list-DNBJVO3E.js → list-D7BF5CL2.js} +8 -8
  313. package/dist/cli-bundle/chunks/{next-FYTQF6HG.js → next-D5STGWI2.js} +71 -46
  314. package/dist/cli-bundle/chunks/next-D5STGWI2.js.map +1 -0
  315. package/dist/cli-bundle/chunks/{next-BCERKDUR.js → next-SFQZVX2B.js} +70 -45
  316. package/dist/cli-bundle/chunks/next-SFQZVX2B.js.map +7 -0
  317. package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js → notes-6KNOSLIT.js} +9 -9
  318. package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js → notes-W4UEICGF.js} +9 -9
  319. package/dist/cli-bundle/chunks/{plan-RKZHQVXR.js → plan-JO6V7BXO.js} +373 -279
  320. package/dist/cli-bundle/chunks/plan-JO6V7BXO.js.map +1 -0
  321. package/dist/cli-bundle/chunks/{plan-4WXEQCTN.js → plan-MJQW5XK3.js} +372 -278
  322. package/dist/cli-bundle/chunks/plan-MJQW5XK3.js.map +7 -0
  323. package/dist/cli-bundle/chunks/{profile-4OMM32CD.js → profile-3TOTMUR4.js} +27 -19
  324. package/dist/cli-bundle/chunks/profile-3TOTMUR4.js.map +7 -0
  325. package/dist/cli-bundle/chunks/{profile-QLER5ENE.js → profile-WIQY2KCV.js} +28 -20
  326. package/dist/cli-bundle/chunks/profile-WIQY2KCV.js.map +1 -0
  327. package/dist/cli-bundle/chunks/register-list-query-ELBHCCFI.js +416 -0
  328. package/dist/cli-bundle/chunks/register-list-query-ELBHCCFI.js.map +7 -0
  329. package/dist/cli-bundle/chunks/register-list-query-GAPQ6DM3.js +406 -0
  330. package/dist/cli-bundle/chunks/register-list-query-GAPQ6DM3.js.map +1 -0
  331. package/dist/cli-bundle/chunks/{register-mutation-KK7PHYYU.js → register-mutation-ROFE2YPC.js} +729 -702
  332. package/dist/cli-bundle/chunks/register-mutation-ROFE2YPC.js.map +7 -0
  333. package/dist/cli-bundle/chunks/{register-mutation-ENNDUAZG.js → register-mutation-SJWMVIJ2.js} +730 -703
  334. package/dist/cli-bundle/chunks/register-mutation-SJWMVIJ2.js.map +1 -0
  335. package/dist/cli-bundle/chunks/{register-operations-HZ6XERQG.js → register-operations-IADFVH53.js} +389 -365
  336. package/dist/cli-bundle/chunks/register-operations-IADFVH53.js.map +7 -0
  337. package/dist/cli-bundle/chunks/register-operations-MEKU3AKC.js +510 -0
  338. package/dist/cli-bundle/chunks/register-operations-MEKU3AKC.js.map +1 -0
  339. package/dist/cli-bundle/chunks/{register-setup-ZKJ53RS7.js → register-setup-3QJY43CY.js} +128 -103
  340. package/dist/cli-bundle/chunks/register-setup-3QJY43CY.js.map +7 -0
  341. package/dist/cli-bundle/chunks/{register-setup-P67EMBDJ.js → register-setup-AJWUSSQX.js} +129 -104
  342. package/dist/cli-bundle/chunks/register-setup-AJWUSSQX.js.map +1 -0
  343. package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js → restore-44IHMMZZ.js} +9 -9
  344. package/dist/cli-bundle/chunks/restore-EXHU34EU.js +17 -0
  345. package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js → scheduling-shortcuts-OLHNLAZY.js} +12 -12
  346. package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js → scheduling-shortcuts-TSBK4AY5.js} +12 -12
  347. package/dist/cli-bundle/chunks/{schema-73HR2OJW.js → schema-IB2NZZWD.js} +7 -7
  348. package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js → schema-VBCELP5G.js} +7 -7
  349. package/dist/cli-bundle/chunks/{search-AXPXKZER.js → search-7UBETML4.js} +10 -10
  350. package/dist/cli-bundle/chunks/{search-KILGT37L.js → search-R227JOL6.js} +10 -10
  351. package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js → stats-FAG7COEH.js} +6 -6
  352. package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js → stats-MCK7PLYS.js} +6 -6
  353. package/dist/cli-bundle/chunks/{telemetry-GAHHQTOS.js → telemetry-DRPDZMAO.js} +84 -70
  354. package/dist/cli-bundle/chunks/telemetry-DRPDZMAO.js.map +7 -0
  355. package/dist/cli-bundle/chunks/{telemetry-BZUF6H7G.js → telemetry-GVVUQSJQ.js} +85 -71
  356. package/dist/cli-bundle/chunks/telemetry-GVVUQSJQ.js.map +1 -0
  357. package/dist/cli-bundle/chunks/{test-PWDIZ255.js → test-QY44WAMR.js} +15 -15
  358. package/dist/cli-bundle/chunks/{test-ACD52Z3S.js → test-SY76DZTO.js} +15 -15
  359. package/dist/cli-bundle/chunks/test-all-QD6QAEG7.js +430 -0
  360. package/dist/cli-bundle/chunks/test-all-QD6QAEG7.js.map +7 -0
  361. package/dist/cli-bundle/chunks/test-all-USPJHXFR.js +427 -0
  362. package/dist/cli-bundle/chunks/test-all-USPJHXFR.js.map +1 -0
  363. package/dist/cli-bundle/chunks/{test-runs-UXIXPDKU.js → test-runs-MG5VIGSK.js} +185 -147
  364. package/dist/cli-bundle/chunks/test-runs-MG5VIGSK.js.map +1 -0
  365. package/dist/cli-bundle/chunks/{test-runs-PLRAZEFW.js → test-runs-QIR5MJPL.js} +184 -146
  366. package/dist/cli-bundle/chunks/test-runs-QIR5MJPL.js.map +7 -0
  367. package/dist/cli-bundle/chunks/update-A7EICML6.js +24 -0
  368. package/dist/cli-bundle/chunks/{update-KFX2SIAC.js → update-IKJZWLQC.js} +15 -15
  369. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js → update-many-BEMTDA2X.js} +84 -69
  370. package/dist/cli-bundle/chunks/{update-many-RNSBX2TA.js.map → update-many-BEMTDA2X.js.map} +1 -1
  371. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js → update-many-RATAARHU.js} +83 -68
  372. package/dist/cli-bundle/chunks/{update-many-Z5GJS5LC.js.map → update-many-RATAARHU.js.map} +2 -2
  373. package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js → upgrade-NWMR3VQL.js} +11 -11
  374. package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js → upgrade-VU46BLJZ.js} +11 -11
  375. package/dist/cli-bundle/chunks/{validate-X5W76YJL.js → validate-GAJ6FUSI.js} +451 -321
  376. package/dist/cli-bundle/chunks/validate-GAJ6FUSI.js.map +1 -0
  377. package/dist/cli-bundle/chunks/{validate-MTUVL5VC.js → validate-NRY6MFXN.js} +450 -320
  378. package/dist/cli-bundle/chunks/validate-NRY6MFXN.js.map +7 -0
  379. package/dist/cli-bundle/main.js +1107 -916
  380. package/dist/cli-bundle/main.js.map +3 -3
  381. package/dist/core/config/nested-settings.js +89 -67
  382. package/dist/core/config/nested-settings.js.map +1 -1
  383. package/dist/core/governance/metadata-coverage.js +20 -28
  384. package/dist/core/governance/metadata-coverage.js.map +1 -1
  385. package/dist/core/history/drift-scan.js +93 -81
  386. package/dist/core/history/drift-scan.js.map +1 -1
  387. package/dist/core/item/item-type-definition.js +14 -14
  388. package/dist/core/item/item-type-definition.js.map +1 -1
  389. package/dist/core/item/type-registry.js +114 -99
  390. package/dist/core/item/type-registry.js.map +1 -1
  391. package/dist/core/output/mutation-projection.js +42 -26
  392. package/dist/core/output/mutation-projection.js.map +1 -1
  393. package/dist/core/schema/runtime-schema.js +97 -80
  394. package/dist/core/schema/runtime-schema.js.map +1 -1
  395. package/dist/core/schema/status-defs-file.js +26 -3
  396. package/dist/core/schema/status-defs-file.js.map +1 -1
  397. package/dist/core/search/corpus.js +25 -19
  398. package/dist/core/search/corpus.js.map +1 -1
  399. package/dist/core/search/semantic-defaults.js +64 -37
  400. package/dist/core/search/semantic-defaults.js.map +1 -1
  401. package/dist/core/search/vector-stores.js +32 -17
  402. package/dist/core/search/vector-stores.js.map +1 -1
  403. package/dist/core/sentry/helpers.js +31 -28
  404. package/dist/core/sentry/helpers.js.map +1 -1
  405. package/dist/core/sentry/instrument.js +54 -43
  406. package/dist/core/sentry/instrument.js.map +1 -1
  407. package/dist/core/shared/memo.d.ts +12 -0
  408. package/dist/core/shared/memo.js +25 -0
  409. package/dist/core/shared/memo.js.map +1 -0
  410. package/dist/core/shared/serialization.js +24 -14
  411. package/dist/core/shared/serialization.js.map +1 -1
  412. package/dist/core/shared/time.js +26 -4
  413. package/dist/core/shared/time.js.map +1 -1
  414. package/dist/core/store/front-matter-cache.d.ts +5 -0
  415. package/dist/core/store/front-matter-cache.js +316 -171
  416. package/dist/core/store/front-matter-cache.js.map +1 -1
  417. package/dist/core/store/item-store.js +33 -26
  418. package/dist/core/store/item-store.js.map +1 -1
  419. package/dist/core/store/settings.js +247 -203
  420. package/dist/core/store/settings.js.map +1 -1
  421. package/dist/core/test/background-runs.js +189 -160
  422. package/dist/core/test/background-runs.js.map +1 -1
  423. package/dist/sdk/cli-contracts/flag-contracts.js +71 -99
  424. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  425. package/dist/sdk/compose.js +51 -42
  426. package/dist/sdk/compose.js.map +1 -1
  427. package/docs/AGENT_GUIDE.md +2 -2
  428. package/docs/ARCHITECTURE.md +2 -2
  429. package/docs/COMMANDS.md +8 -4
  430. package/docs/CONFIGURATION.md +1 -1
  431. package/docs/EXTENSIONS.md +12 -12
  432. package/docs/ONBOARDING.md +4 -2
  433. package/docs/README.md +2 -0
  434. package/docs/examples/starter-extension/README.md +11 -10
  435. package/marketplace.json +3 -3
  436. package/package.json +2 -2
  437. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  438. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  439. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  440. package/plugins/pm-claude/.claude-plugin/plugin.json +2 -2
  441. package/plugins/pm-claude/README.md +6 -3
  442. package/plugins/pm-claude/commands/pm-init.md +1 -1
  443. package/dist/cli-bundle/chunks/activity-AW6XVFH6.js +0 -16
  444. package/dist/cli-bundle/chunks/aggregate-JTEF4BP7.js.map +0 -1
  445. package/dist/cli-bundle/chunks/chunk-22WKIL3H.js.map +0 -1
  446. package/dist/cli-bundle/chunks/chunk-2D4HATP2.js.map +0 -1
  447. package/dist/cli-bundle/chunks/chunk-3J6JRJ3I.js.map +0 -7
  448. package/dist/cli-bundle/chunks/chunk-3K2M5OYU.js.map +0 -7
  449. package/dist/cli-bundle/chunks/chunk-3S2KT7NG.js.map +0 -7
  450. package/dist/cli-bundle/chunks/chunk-3VGN2UWE.js.map +0 -1
  451. package/dist/cli-bundle/chunks/chunk-3XZCOZ5J.js.map +0 -1
  452. package/dist/cli-bundle/chunks/chunk-4XOIEKSD.js.map +0 -1
  453. package/dist/cli-bundle/chunks/chunk-55SNVXRQ.js.map +0 -7
  454. package/dist/cli-bundle/chunks/chunk-5CGRF3L5.js.map +0 -1
  455. package/dist/cli-bundle/chunks/chunk-7R4QEMZZ.js.map +0 -1
  456. package/dist/cli-bundle/chunks/chunk-AXIDKKAT.js.map +0 -1
  457. package/dist/cli-bundle/chunks/chunk-BDTISOSD.js.map +0 -7
  458. package/dist/cli-bundle/chunks/chunk-BZCEN4JA.js.map +0 -7
  459. package/dist/cli-bundle/chunks/chunk-CF7RL6FR.js.map +0 -1
  460. package/dist/cli-bundle/chunks/chunk-CWFNTKQJ.js.map +0 -1
  461. package/dist/cli-bundle/chunks/chunk-FFMQB7WR.js.map +0 -1
  462. package/dist/cli-bundle/chunks/chunk-HXTQJXWT.js.map +0 -1
  463. package/dist/cli-bundle/chunks/chunk-IPYBJWTE.js.map +0 -7
  464. package/dist/cli-bundle/chunks/chunk-IZBR4NRW.js.map +0 -7
  465. package/dist/cli-bundle/chunks/chunk-JLM7BHI7.js.map +0 -7
  466. package/dist/cli-bundle/chunks/chunk-JSU5P7VS.js.map +0 -1
  467. package/dist/cli-bundle/chunks/chunk-JWXRETDF.js.map +0 -1
  468. package/dist/cli-bundle/chunks/chunk-KNPEF7QG.js.map +0 -7
  469. package/dist/cli-bundle/chunks/chunk-MDPEOIGN.js.map +0 -7
  470. package/dist/cli-bundle/chunks/chunk-NFDPYAIP.js.map +0 -7
  471. package/dist/cli-bundle/chunks/chunk-NUHHPVVS.js.map +0 -7
  472. package/dist/cli-bundle/chunks/chunk-NWMZWYYB.js.map +0 -1
  473. package/dist/cli-bundle/chunks/chunk-OTUHB4HS.js.map +0 -1
  474. package/dist/cli-bundle/chunks/chunk-RGEMWD6Q.js.map +0 -7
  475. package/dist/cli-bundle/chunks/chunk-RLDHZHQS.js.map +0 -1
  476. package/dist/cli-bundle/chunks/chunk-RMMQ74TG.js.map +0 -7
  477. package/dist/cli-bundle/chunks/chunk-RVUALSJF.js.map +0 -7
  478. package/dist/cli-bundle/chunks/chunk-TP5Q5ZD3.js.map +0 -1
  479. package/dist/cli-bundle/chunks/chunk-V3NOKJF2.js.map +0 -1
  480. package/dist/cli-bundle/chunks/chunk-VARHOHYV.js.map +0 -7
  481. package/dist/cli-bundle/chunks/chunk-WYDHYJPO.js.map +0 -7
  482. package/dist/cli-bundle/chunks/chunk-YITK2PJ6.js.map +0 -7
  483. package/dist/cli-bundle/chunks/chunk-ZETXE4SE.js.map +0 -1
  484. package/dist/cli-bundle/chunks/close-E6ZZGCJY.js +0 -14
  485. package/dist/cli-bundle/chunks/close-many-BG5QQIDQ.js.map +0 -7
  486. package/dist/cli-bundle/chunks/close-many-LDRVEQY2.js.map +0 -1
  487. package/dist/cli-bundle/chunks/config-DMSU64QO.js +0 -1541
  488. package/dist/cli-bundle/chunks/config-DMSU64QO.js.map +0 -7
  489. package/dist/cli-bundle/chunks/config-QH2DICD6.js +0 -1531
  490. package/dist/cli-bundle/chunks/config-QH2DICD6.js.map +0 -1
  491. package/dist/cli-bundle/chunks/contracts-HN7ABKLP.js.map +0 -7
  492. package/dist/cli-bundle/chunks/contracts-W4FZVVD6.js.map +0 -1
  493. package/dist/cli-bundle/chunks/create-OH3BDGBB.js +0 -28
  494. package/dist/cli-bundle/chunks/get-A7MAOHCU.js.map +0 -7
  495. package/dist/cli-bundle/chunks/get-DSDEKJ3L.js.map +0 -1
  496. package/dist/cli-bundle/chunks/health-3IPFLKXB.js.map +0 -1
  497. package/dist/cli-bundle/chunks/health-GZXGBZ36.js.map +0 -7
  498. package/dist/cli-bundle/chunks/history-WSZHY3PN.js +0 -18
  499. package/dist/cli-bundle/chunks/history-compact-2WRZ2WK4.js.map +0 -7
  500. package/dist/cli-bundle/chunks/history-compact-HR7BB4LR.js.map +0 -1
  501. package/dist/cli-bundle/chunks/history-redact-MP6CH7U5.js +0 -19
  502. package/dist/cli-bundle/chunks/history-repair-LCMOS45X.js.map +0 -7
  503. package/dist/cli-bundle/chunks/history-repair-XA3LC4GA.js.map +0 -1
  504. package/dist/cli-bundle/chunks/init-PAX32BJA.js +0 -22
  505. package/dist/cli-bundle/chunks/next-BCERKDUR.js.map +0 -7
  506. package/dist/cli-bundle/chunks/next-FYTQF6HG.js.map +0 -1
  507. package/dist/cli-bundle/chunks/plan-4WXEQCTN.js.map +0 -7
  508. package/dist/cli-bundle/chunks/plan-RKZHQVXR.js.map +0 -1
  509. package/dist/cli-bundle/chunks/profile-4OMM32CD.js.map +0 -7
  510. package/dist/cli-bundle/chunks/profile-QLER5ENE.js.map +0 -1
  511. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js +0 -400
  512. package/dist/cli-bundle/chunks/register-list-query-7LV46VAU.js.map +0 -1
  513. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js +0 -410
  514. package/dist/cli-bundle/chunks/register-list-query-SNG5PGA4.js.map +0 -7
  515. package/dist/cli-bundle/chunks/register-mutation-ENNDUAZG.js.map +0 -1
  516. package/dist/cli-bundle/chunks/register-mutation-KK7PHYYU.js.map +0 -7
  517. package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js +0 -486
  518. package/dist/cli-bundle/chunks/register-operations-C6OWLDSH.js.map +0 -1
  519. package/dist/cli-bundle/chunks/register-operations-HZ6XERQG.js.map +0 -7
  520. package/dist/cli-bundle/chunks/register-setup-P67EMBDJ.js.map +0 -1
  521. package/dist/cli-bundle/chunks/register-setup-ZKJ53RS7.js.map +0 -7
  522. package/dist/cli-bundle/chunks/restore-YALDGTQR.js +0 -17
  523. package/dist/cli-bundle/chunks/telemetry-BZUF6H7G.js.map +0 -1
  524. package/dist/cli-bundle/chunks/telemetry-GAHHQTOS.js.map +0 -7
  525. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js +0 -358
  526. package/dist/cli-bundle/chunks/test-all-L2MDDUCA.js.map +0 -1
  527. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js +0 -361
  528. package/dist/cli-bundle/chunks/test-all-RBZ6DLU2.js.map +0 -7
  529. package/dist/cli-bundle/chunks/test-runs-PLRAZEFW.js.map +0 -7
  530. package/dist/cli-bundle/chunks/test-runs-UXIXPDKU.js.map +0 -1
  531. package/dist/cli-bundle/chunks/update-AMRSOIWP.js +0 -24
  532. package/dist/cli-bundle/chunks/validate-MTUVL5VC.js.map +0 -7
  533. package/dist/cli-bundle/chunks/validate-X5W76YJL.js.map +0 -1
  534. /package/dist/cli-bundle/chunks/{activity-DBLQVIP6.js.map → activity-5YWLSPGE.js.map} +0 -0
  535. /package/dist/cli-bundle/chunks/{activity-AW6XVFH6.js.map → activity-BIML7K2D.js.map} +0 -0
  536. /package/dist/cli-bundle/chunks/{append-LOVPGVPT.js.map → append-EZESUVJT.js.map} +0 -0
  537. /package/dist/cli-bundle/chunks/{append-QCFJSDFL.js.map → append-JFG4WQMG.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{chunk-BHO33VBQ.js.map → chunk-3W2HJKJX.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{chunk-4DUVCVLZ.js.map → chunk-4PFVUUYV.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{chunk-IJYK2T43.js.map → chunk-5E7N4T2Z.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-NKZAN7BD.js.map → chunk-5IZUBZBR.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-NOLPZMSV.js.map → chunk-5JIWFWOZ.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-6AQZPVHQ.js.map → chunk-6CDCWKSX.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-LB6TP6MC.js.map → chunk-6NYJGMTY.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-SLMUGTK3.js.map → chunk-7CLLC75T.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-2466X6E4.js.map → chunk-7LYO6S5A.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-W4ULYO7Z.js.map → chunk-A3OQ7TFW.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-GJ326ZKX.js.map → chunk-ER4ME5U2.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-HZZEHPRG.js.map → chunk-ERG65A2L.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-L5OEFZQG.js.map → chunk-FH2H3CBD.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-JPECA746.js.map → chunk-FUFFPIYA.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-27BXPBAY.js.map → chunk-GUYNUXQT.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-MAUKX7JC.js.map → chunk-GVJE5T7Q.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-ZRP4VG5U.js.map → chunk-JBZ2NTKX.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-EJUDVUYZ.js.map → chunk-KEZOIPCR.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-HYTGA6GI.js.map → chunk-MDHWWBNZ.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-N74UMG5H.js.map → chunk-MEZZZBYX.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-SDR5J34Q.js.map → chunk-NZ7QIUP5.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{chunk-DDPTYJIM.js.map → chunk-P5L7Z2O6.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{chunk-OGXLACHC.js.map → chunk-SU2E4AWU.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{chunk-HPPFYYOV.js.map → chunk-SU3TB4NS.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{chunk-G7I7DEZA.js.map → chunk-T4XBKJ3F.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{chunk-VICZWYGZ.js.map → chunk-U5TR4N7J.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{chunk-EVMTBV6V.js.map → chunk-UMNQZS4H.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{chunk-A7FPBAQS.js.map → chunk-WJA3PXW7.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{chunk-QCWF6IYD.js.map → chunk-YSDFIY7N.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{chunk-UZIWVBE6.js.map → chunk-YSGTMDWC.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{chunk-64HNBBFQ.js.map → chunk-Z5F6XZXE.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{chunk-AVEE5EHK.js.map → chunk-Z7RPDF2Y.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{claim-T3GCKV7C.js.map → claim-2BGBGSVI.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{claim-EMQLYPRW.js.map → claim-5GU7OE67.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{close-E6ZZGCJY.js.map → close-6YODBUIV.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{close-TQYAAFJP.js.map → close-AFVKPR57.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{comments-YUXJRZPQ.js.map → comments-DNWHEBOS.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{comments-QCKR2YY2.js.map → comments-RW23R3VE.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{context-B6275WPX.js.map → context-OYXRGY7S.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{context-OCZ3FJ4Z.js.map → context-PKCEHQY3.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{copy-DEM4DATS.js.map → copy-6XOR3HKN.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{copy-BTJOSKKT.js.map → copy-I4NCLBR4.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{create-RLRJMRTM.js.map → create-PM45M6PE.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{create-OH3BDGBB.js.map → create-Z7YCH3BE.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{delete-BHK7VB2Z.js.map → delete-7YXHYG67.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{delete-LSVHAB4Y.js.map → delete-LPISP43T.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{deps-XHYXWEPT.js.map → deps-N2T26FME.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{deps-4UDFJRUA.js.map → deps-WATKQDE3.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{docs-GYZNVS26.js.map → docs-6LQ3GLM7.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{docs-26S44RXU.js.map → docs-Z3X6JZLT.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{eval-UYF3ZPVO.js.map → eval-6DCLG52D.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{eval-PGRVIJQU.js.map → eval-Y3ZCUTHK.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{extension-CPSLJQVE.js.map → extension-BNINIMT7.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{extension-CXJ6RELI.js.map → extension-QWE4YYK5.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{files-NQHEXUZD.js.map → files-6SGKHS6O.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{files-MBNICQFM.js.map → files-FUYPSOFJ.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{focus-DWYIG7GU.js.map → focus-2Q3K76G2.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{focus-XZW5423D.js.map → focus-ATLBWXXD.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{gc-LPVMKJQJ.js.map → gc-RUYEMNRF.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{gc-7GQYOS2G.js.map → gc-TDWSDR66.js.map} +0 -0
  598. /package/dist/cli-bundle/chunks/{history-WSZHY3PN.js.map → history-CGNQJXFE.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{history-NERDJNUB.js.map → history-SGRRS72R.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{history-redact-O3NBCNWC.js.map → history-redact-IRL7WJ3E.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{history-redact-MP6CH7U5.js.map → history-redact-N3JK7VBW.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{init-64XDLQJB.js.map → init-4GESW7RM.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{init-PAX32BJA.js.map → init-XIDPABA4.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{learnings-LPKCSJX7.js.map → learnings-4BHWFFUV.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{learnings-JR6MA5TI.js.map → learnings-4FJY7WIW.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{list-G5Y65VF6.js.map → list-472TIOVK.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{list-DNBJVO3E.js.map → list-D7BF5CL2.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{notes-2BMU3VVQ.js.map → notes-6KNOSLIT.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{notes-6KTGO2OJ.js.map → notes-W4UEICGF.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{restore-4MHZFJ2E.js.map → restore-44IHMMZZ.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{restore-YALDGTQR.js.map → restore-EXHU34EU.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-LB6DOLRL.js.map → scheduling-shortcuts-OLHNLAZY.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-UTOYKLXQ.js.map → scheduling-shortcuts-TSBK4AY5.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{schema-73HR2OJW.js.map → schema-IB2NZZWD.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{schema-U6LJKSIR.js.map → schema-VBCELP5G.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{search-AXPXKZER.js.map → search-7UBETML4.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{search-KILGT37L.js.map → search-R227JOL6.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{stats-W5KNVJWQ.js.map → stats-FAG7COEH.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{stats-PSYVVTNZ.js.map → stats-MCK7PLYS.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{test-PWDIZ255.js.map → test-QY44WAMR.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{test-ACD52Z3S.js.map → test-SY76DZTO.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{update-AMRSOIWP.js.map → update-A7EICML6.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{update-KFX2SIAC.js.map → update-IKJZWLQC.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{upgrade-BRL6KCOJ.js.map → upgrade-NWMR3VQL.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{upgrade-HAK6JG2O.js.map → upgrade-VU46BLJZ.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-OGLGI22K.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-AIKU3IIL.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-QCDTQCMW.js";
39
39
  import {
40
40
  parseLimit,
41
41
  parsePriority,
42
42
  parseType
43
- } from "./chunk-UZIWVBE6.js";
43
+ } from "./chunk-YSGTMDWC.js";
44
44
  import {
45
45
  collectRegisteredItemFieldNames,
46
46
  listAllDocumentCandidatesCached,
47
47
  listAllFrontMatter,
48
48
  toItemRecord
49
- } from "./chunk-JSU5P7VS.js";
49
+ } from "./chunk-4WB6S4YX.js";
50
50
  import {
51
51
  isTerminalStatus,
52
52
  parseItemDocument
53
- } from "./chunk-QCWF6IYD.js";
53
+ } from "./chunk-YSDFIY7N.js";
54
54
  import {
55
55
  compareTimestampStrings,
56
56
  nowIso,
57
57
  resolveIsoOrRelative
58
- } from "./chunk-AXIDKKAT.js";
58
+ } from "./chunk-CXR3CMBQ.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-L4SLHV6G.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-67LARBDL.js.map
2220
2309
 
2221
- //# debugId=fbf75a7d-5709-50b7-89c0-2b4e07fd351f
2310
+ //# debugId=02364b53-8625-5d05-90d9-1234e6d63964