@ssmeo/mcp-local-rag 0.18.9 → 0.18.11

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 (54) hide show
  1. package/README.de.md +23 -2
  2. package/README.es.md +23 -2
  3. package/README.fr.md +23 -2
  4. package/README.md +34 -2
  5. package/README.pt-BR.md +23 -2
  6. package/README.zh-CN.md +23 -2
  7. package/dist/auto-sync-watch.d.ts +20 -0
  8. package/dist/auto-sync-watch.d.ts.map +1 -0
  9. package/dist/auto-sync-watch.js +46 -0
  10. package/dist/auto-sync-watch.js.map +1 -0
  11. package/dist/cli/common.d.ts.map +1 -1
  12. package/dist/cli/common.js +15 -2
  13. package/dist/cli/common.js.map +1 -1
  14. package/dist/cli/options.d.ts +19 -0
  15. package/dist/cli/options.d.ts.map +1 -1
  16. package/dist/cli/options.js +72 -8
  17. package/dist/cli/options.js.map +1 -1
  18. package/dist/rerank/command.d.ts +21 -0
  19. package/dist/rerank/command.d.ts.map +1 -0
  20. package/dist/rerank/command.js +20 -0
  21. package/dist/rerank/command.js.map +1 -0
  22. package/dist/rerank/index.d.ts +21 -0
  23. package/dist/rerank/index.d.ts.map +1 -0
  24. package/dist/rerank/index.js +104 -0
  25. package/dist/rerank/index.js.map +1 -0
  26. package/dist/rerank/response.d.ts +29 -0
  27. package/dist/rerank/response.d.ts.map +1 -0
  28. package/dist/rerank/response.js +77 -0
  29. package/dist/rerank/response.js.map +1 -0
  30. package/dist/server/index.d.ts +5 -0
  31. package/dist/server/index.d.ts.map +1 -1
  32. package/dist/server/index.js +68 -27
  33. package/dist/server/index.js.map +1 -1
  34. package/dist/server/tool-definitions.js +1 -1
  35. package/dist/server/tool-definitions.js.map +1 -1
  36. package/dist/server/tool-input.d.ts.map +1 -1
  37. package/dist/server/tool-input.js +5 -5
  38. package/dist/server/tool-input.js.map +1 -1
  39. package/dist/server/types.d.ts +4 -0
  40. package/dist/server/types.d.ts.map +1 -1
  41. package/dist/server-main.d.ts +13 -22
  42. package/dist/server-main.d.ts.map +1 -1
  43. package/dist/server-main.js +50 -59
  44. package/dist/server-main.js.map +1 -1
  45. package/dist/utils/limits.d.ts +16 -1
  46. package/dist/utils/limits.d.ts.map +1 -1
  47. package/dist/utils/limits.js +16 -1
  48. package/dist/utils/limits.js.map +1 -1
  49. package/dist/vectordb/types.d.ts +4 -1
  50. package/dist/vectordb/types.d.ts.map +1 -1
  51. package/dist/vectordb/types.js.map +1 -1
  52. package/package.json +1 -1
  53. package/skills/mcp-local-rag/SKILL.md +3 -3
  54. package/skills/mcp-local-rag/references/cli-reference.md +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAuB,MAAM,4BAA4B,CAAA;AAGlF,+CAA+C;AAC/C,qBAAqB;AACrB,+CAA+C;AAE/C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,QAAgB;IAC1D,OAAO,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,OAAO,GAAG,qBAAqB,CAAA;IACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,uBAAuB,KAAK,kDAAkD,CAAA;IACvF,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,uBAAuB,KAAK,yCAAyC,CAAA;IAC9E,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,mBAAmB,EAAE,CAAC;QACxE,OAAO,yCAAyC,mBAAmB,UAAU,CAAA;IAC/E,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,oBAAoB,EAAE,CAAC;QACzE,OAAO,4CAA4C,oBAAoB,EAAE,CAAA;IAC3E,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,+CAA+C;AAC/C,gCAAgC;AAChC,+CAA+C;AAE/C;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAc,EAAE,SAAiB,EAAE,SAAmB;IACtF,MAAM,UAAU,GAAG,SAAS,GAAG,CAAC,CAAA;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;IAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACrB,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,SAAiB,EAAE,IAAY;IAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IACjC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAA;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAc,EAAE,SAAiB;IACpE,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAA;IACnE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CACX,wCAAwC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,kCAAkC,CAC9F,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AA4BD,+CAA+C;AAC/C,WAAW;AACX,+CAA+C;AAE/C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM,EAAE,YAAY;IACpB,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,yBAAyB;CAC5B,CAAA;AAEV,+CAA+C;AAC/C,OAAO;AACP,+CAA+C;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAG;;;2DAG6B,eAAe,CAAC,MAAM;2DACtB,eAAe,CAAC,QAAQ;qDAC9B,eAAe,CAAC,SAAS;;;;;;;;;;;4DAWlB,CAAA;AAE5D,+CAA+C;AAC/C,wBAAwB;AACxB,+CAA+C;AAE/C;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAC/C,MAAM,aAAa,GAAkB,EAAE,CAAA;IACvC,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,IAAI,CAAC,GAAG,CAAC,CAAA;IAET,yEAAyE;IACzE,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACzB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ;gBACX,IAAI,GAAG,IAAI,CAAA;gBACX,CAAC,EAAE,CAAA;gBACH,MAAK;YACP,KAAK,WAAW,EAAE,CAAC;gBACjB,aAAa,CAAC,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC,CAAA;gBAC7D,CAAC,IAAI,CAAC,CAAA;gBACN,MAAK;YACP,CAAC;YACD,KAAK,aAAa,EAAE,CAAC;gBACnB,aAAa,CAAC,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,aAAa,CAAC,CAAA;gBACjE,CAAC,IAAI,CAAC,CAAA;gBACN,MAAK;YACP,CAAC;YACD,KAAK,cAAc,EAAE,CAAC;gBACpB,aAAa,CAAC,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC,CAAA;gBACnE,CAAC,IAAI,CAAC,CAAA;gBACN,MAAK;YACP,CAAC;YACD;gBACE,oDAAoD;gBACpD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,OAAO,CAAC,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAA;oBAC9C,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAA;oBAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,CAAC;gBACD,6DAA6D;gBAC7D,4DAA4D;gBAC5D,IAAI,IAAI,EAAE,CAAC;oBACT,uDAAuD;oBACvD,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;oBAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,CAAC;gBACD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1D,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,EAAE,CAAA;AAC7C,CAAC;AAgBD,4BAA4B;AAC5B,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;IAC7B,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;IAC7C,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACzD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;IAC9B,CAAC;IACD,MAAM,OAAO,GAAG,gCAAgC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,+CAA+C,CAAA;IAClH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;AACtC,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,gBAAgB,CAAC,KAAyB;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;IAC7B,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACvC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,MAAM,OAAO,GAAG,oCAAoC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,wCAAwC,CAAA;QAC/G,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;IACtC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AAC1B,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;IAC7B,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACzC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,iCAAiC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,gDAAgD,CAAA;QACpH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;IACtC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AAC1B,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;IAC7B,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACvC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,qCAAqC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,2CAA2C,CAAA;QACnH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;IACtC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAsB;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,MAAM,CAAA;IACjF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAA;IACzF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,eAAe,CAAC,SAAS,CAAA;IAE7F,iBAAiB;IACjB,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACrD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;IAC3D,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,sBAAsB;IACtB,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAA;IACnD,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,8DAA8D;IAC9D,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAA;IACrE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAA;IAC/D,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAA;IAC5D,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAA;IACxE,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;QAC1E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAyB,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;IACpE,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAA;IACxC,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAA;IAClC,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAA;IAClC,CAAC;IACD,IAAI,YAAY,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC,KAAK,CAAA;IAC1C,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;AACrB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAyB;IACpD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAyB;IACjE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACzC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /** An executable and the arguments configured alongside it. */
2
+ export interface RerankCommand {
3
+ /** Program to spawn. Must name a directly executable file, not a shim. */
4
+ executable: string;
5
+ /** Arguments configured by the operator, before the server's own flags. */
6
+ args: string[];
7
+ }
8
+ /**
9
+ * Splits the configured command on whitespace. Quoting and other shell syntax
10
+ * are deliberately not interpreted: the command is spawned without a shell, so
11
+ * a quote this parser stripped would not mean what the operator expects.
12
+ *
13
+ * Returns undefined when the string carries no token.
14
+ */
15
+ export declare function parseRerankCommand(command: string): RerankCommand | undefined;
16
+ /**
17
+ * Appends the server's flags after the configured arguments. Each value is its
18
+ * own element, so query text is never read as command syntax.
19
+ */
20
+ export declare function buildRerankArgv(command: RerankCommand, query: string, top: number): string[];
21
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/rerank/command.ts"],"names":[],"mappings":"AAEA,+DAA+D;AAC/D,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAA;IAClB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,EAAE,CAAA;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAG7E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5F"}
@@ -0,0 +1,20 @@
1
+ // Parsing of the configured rerank command into an argv vector.
2
+ /**
3
+ * Splits the configured command on whitespace. Quoting and other shell syntax
4
+ * are deliberately not interpreted: the command is spawned without a shell, so
5
+ * a quote this parser stripped would not mean what the operator expects.
6
+ *
7
+ * Returns undefined when the string carries no token.
8
+ */
9
+ export function parseRerankCommand(command) {
10
+ const [executable, ...args] = command.split(/\s+/).filter((token) => token.length > 0);
11
+ return executable === undefined ? undefined : { executable, args };
12
+ }
13
+ /**
14
+ * Appends the server's flags after the configured arguments. Each value is its
15
+ * own element, so query text is never read as command syntax.
16
+ */
17
+ export function buildRerankArgv(command, query, top) {
18
+ return [...command.args, '--query', query, '--top', String(top)];
19
+ }
20
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/rerank/command.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAUhE;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACtF,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAsB,EAAE,KAAa,EAAE,GAAW;IAChF,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAClE,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { type RerankResult } from './response.js';
2
+ export type { RerankResult } from './response.js';
3
+ /** One rerank call: the results to hand over, and the command that handles them. */
4
+ export interface RerankRequest {
5
+ /** Search results in their pre-rerank order. Returned as-is on failure. */
6
+ candidates: RerankResult[];
7
+ /** Query text, passed to the command as its own argv element. */
8
+ query: string;
9
+ /** Result count the caller wants, passed through as `--top`. */
10
+ top: number;
11
+ /** Configured command, parsed as a whitespace-separated argv vector. */
12
+ command: string;
13
+ /** Per-call budget. The spawned process is killed when it elapses. */
14
+ timeoutMs: number;
15
+ }
16
+ /**
17
+ * What the command produced, or the results unchanged when it could not run or
18
+ * answered with something that is not a valid result set. Never throws.
19
+ */
20
+ export declare function rerankCandidates(request: RerankRequest): Promise<RerankResult[]>;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rerank/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,YAAY,EAA0B,MAAM,eAAe,CAAA;AAEzE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,UAAU,EAAE,YAAY,EAAE,CAAA;IAC1B,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAA;IACb,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAA;IACX,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAA;IACf,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAA;CAClB;AA2FD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAmBtF"}
@@ -0,0 +1,104 @@
1
+ // External reranking: hand the search candidates to a configured command and
2
+ // take its response as an ordering over them.
3
+ //
4
+ // Every failure mode degrades to the ordering the caller already had, the way
5
+ // the FTS fallback in `VectorStore.searchWithKeywordBoost` does. A reranker is
6
+ // an improvement to ranking, so a broken one must not fail the request; a
7
+ // process that fails to start arrives as an `error` event, and leaving that
8
+ // unhandled would take the server process down.
9
+ import { spawn } from 'node:child_process';
10
+ import { errorCode } from '../utils/type-guards.js';
11
+ import { buildRerankArgv, parseRerankCommand } from './command.js';
12
+ import { validateRerankResponse } from './response.js';
13
+ /** Complete results in `docs/schema/query-output.schema.json` form. */
14
+ function buildRerankPayload(candidates) {
15
+ return JSON.stringify(candidates);
16
+ }
17
+ /**
18
+ * A missing command, one without execute permission, and a `.cmd` / `.bat` shim
19
+ * on Windows all land here. The operator would otherwise just see reranking not
20
+ * happening, so the line says what the command has to be. Only the error's code
21
+ * is reported: its message repeats the executable.
22
+ */
23
+ function spawnFailureReason(error) {
24
+ return `the command could not be started (${errorCode(error) ?? 'unknown error'}); it must name a directly executable file, not a .cmd or .bat shim`;
25
+ }
26
+ function runRerankCommand(executable, argv, payload, timeoutMs) {
27
+ return new Promise((resolve) => {
28
+ let settled = false;
29
+ const stdoutChunks = [];
30
+ let timer;
31
+ const finish = (result) => {
32
+ if (settled) {
33
+ return;
34
+ }
35
+ settled = true;
36
+ clearTimeout(timer);
37
+ resolve(result);
38
+ };
39
+ let child;
40
+ try {
41
+ // No shell on any platform: the query travels as its own argv element and
42
+ // nothing can splice it back into a command string. `stderr` is ignored
43
+ // because the child is untrusted and could otherwise write document text
44
+ // into this server's log stream.
45
+ child = spawn(executable, argv, { stdio: ['pipe', 'pipe', 'ignore'] });
46
+ }
47
+ catch (error) {
48
+ finish({ ok: false, reason: spawnFailureReason(error) });
49
+ return;
50
+ }
51
+ // The budget itself ends the call. A child that traps the signal, or one
52
+ // whose descendant holds the inherited stdout open, never emits `close`, so
53
+ // waiting for the kill to land would leave the request pending for as long
54
+ // as the child felt like running. Its stdout is dropped and the handle is
55
+ // unreferenced so nothing it does afterwards reaches or holds this server.
56
+ timer = setTimeout(() => {
57
+ child.kill();
58
+ child.stdout?.destroy();
59
+ child.unref();
60
+ finish({ ok: false, reason: `the command timed out after ${timeoutMs}ms and was killed` });
61
+ }, timeoutMs);
62
+ child.stdout?.setEncoding('utf8');
63
+ child.stdout?.on('data', (chunk) => {
64
+ stdoutChunks.push(chunk);
65
+ });
66
+ // A child that exits before reading its input makes this write fail; the
67
+ // exit itself is what gets reported.
68
+ child.stdin?.on('error', () => { });
69
+ child.stdin?.end(payload);
70
+ child.on('error', (error) => {
71
+ finish({ ok: false, reason: spawnFailureReason(error) });
72
+ });
73
+ child.on('close', (code, signal) => {
74
+ if (code === 0) {
75
+ finish({ ok: true, stdout: stdoutChunks.join('') });
76
+ return;
77
+ }
78
+ const outcome = code === null ? `was terminated by ${signal}` : `exited with code ${code}`;
79
+ finish({ ok: false, reason: `the command ${outcome}` });
80
+ });
81
+ });
82
+ }
83
+ function fallback(candidates, reason) {
84
+ console.error(`Rerank: ${reason}; returning the pre-rerank ordering`);
85
+ return candidates;
86
+ }
87
+ /**
88
+ * What the command produced, or the results unchanged when it could not run or
89
+ * answered with something that is not a valid result set. Never throws.
90
+ */
91
+ export async function rerankCandidates(request) {
92
+ const { candidates, query, top, command, timeoutMs } = request;
93
+ const parsed = parseRerankCommand(command);
94
+ if (parsed === undefined) {
95
+ return fallback(candidates, 'the configured command is empty');
96
+ }
97
+ const run = await runRerankCommand(parsed.executable, buildRerankArgv(parsed, query, top), buildRerankPayload(candidates), timeoutMs);
98
+ if (!run.ok) {
99
+ return fallback(candidates, run.reason);
100
+ }
101
+ const validated = validateRerankResponse(run.stdout);
102
+ return validated.ok ? validated.results : fallback(candidates, validated.reason);
103
+ }
104
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rerank/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /** One result, as `docs/schema/query-output.schema.json` defines it. */
2
+ export interface RerankResult {
3
+ filePath: string;
4
+ chunkIndex: number;
5
+ text: string;
6
+ score: number;
7
+ fileTitle: string | null;
8
+ images: {
9
+ imageIndex: number;
10
+ mimeType: 'image/png' | 'image/jpeg';
11
+ data: string;
12
+ }[];
13
+ source?: string;
14
+ [key: string]: unknown;
15
+ }
16
+ /** The reason reaches stderr, so it names no document text and no path. */
17
+ export type RerankMatch = {
18
+ ok: true;
19
+ results: RerankResult[];
20
+ } | {
21
+ ok: false;
22
+ reason: string;
23
+ };
24
+ /**
25
+ * An empty array, a shorter array, a chunk the server did not send and a
26
+ * rewritten text are all valid answers; only the form is checked.
27
+ */
28
+ export declare function validateRerankResponse(stdout: string): RerankMatch;
29
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/rerank/response.ts"],"names":[],"mappings":"AAKA,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,WAAW,GAAG,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACpF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,2EAA2E;AAC3E,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AA4D/F;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAiBlE"}
@@ -0,0 +1,77 @@
1
+ // The server sends `docs/schema/query-output.schema.json` and accepts the same
2
+ // shape back. Count, identity and repetition are the command's decisions.
3
+ import { isInteger, isRecord } from '../utils/type-guards.js';
4
+ const MIME_TYPES = new Set(['image/png', 'image/jpeg']);
5
+ function isNonNegativeInteger(value) {
6
+ return isInteger(value) && typeof value === 'number' && value >= 0;
7
+ }
8
+ function parseArray(stdout) {
9
+ let parsed;
10
+ try {
11
+ parsed = JSON.parse(stdout);
12
+ }
13
+ catch {
14
+ return undefined;
15
+ }
16
+ return Array.isArray(parsed) ? parsed : undefined;
17
+ }
18
+ function imagesValid(value) {
19
+ if (!Array.isArray(value)) {
20
+ return false;
21
+ }
22
+ return value.every((image) => isRecord(image) &&
23
+ isNonNegativeInteger(image['imageIndex']) &&
24
+ typeof image['mimeType'] === 'string' &&
25
+ MIME_TYPES.has(image['mimeType']) &&
26
+ typeof image['data'] === 'string');
27
+ }
28
+ function isRerankResult(item) {
29
+ if (!isRecord(item)) {
30
+ return false;
31
+ }
32
+ if (typeof item['filePath'] !== 'string') {
33
+ return false;
34
+ }
35
+ if (!isNonNegativeInteger(item['chunkIndex'])) {
36
+ return false;
37
+ }
38
+ if (typeof item['text'] !== 'string') {
39
+ return false;
40
+ }
41
+ if (typeof item['score'] !== 'number' || !Number.isFinite(item['score'])) {
42
+ return false;
43
+ }
44
+ if (item['fileTitle'] !== null && typeof item['fileTitle'] !== 'string') {
45
+ return false;
46
+ }
47
+ if (!imagesValid(item['images'])) {
48
+ return false;
49
+ }
50
+ if (item['source'] !== undefined && typeof item['source'] !== 'string') {
51
+ return false;
52
+ }
53
+ return true;
54
+ }
55
+ /**
56
+ * An empty array, a shorter array, a chunk the server did not send and a
57
+ * rewritten text are all valid answers; only the form is checked.
58
+ */
59
+ export function validateRerankResponse(stdout) {
60
+ const items = parseArray(stdout);
61
+ if (items === undefined) {
62
+ return { ok: false, reason: 'output was not a JSON array' };
63
+ }
64
+ for (const [index, item] of items.entries()) {
65
+ if (!isRerankResult(item)) {
66
+ return { ok: false, reason: `output item ${index} did not match the result schema` };
67
+ }
68
+ }
69
+ const results = [];
70
+ for (const item of items) {
71
+ if (isRerankResult(item)) {
72
+ results.push(item);
73
+ }
74
+ }
75
+ return { ok: true, results };
76
+ }
77
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/rerank/response.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,0EAA0E;AAE1E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAiB7D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;AAEvD,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,CAAC,CAAA;AACpE,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,QAAQ,CAAC,KAAK,CAAC;QACf,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACzC,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ;QACrC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CACpC,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAa;IACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;QACvE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAA;IAC7D,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,KAAK,kCAAkC,EAAE,CAAA;QACtF,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAmB,EAAE,CAAA;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AAC9B,CAAC"}
@@ -40,6 +40,9 @@ export declare class RAGServer {
40
40
  private readonly maxFileSize;
41
41
  private readonly device;
42
42
  private readonly storeImages;
43
+ /** Configured reranker command. Undefined leaves query_documents unchanged. */
44
+ private readonly rerankCommand;
45
+ private readonly rerankTimeoutMs;
43
46
  /**
44
47
  * The one current-or-latest sync job this process retains. A new `sync_start`
45
48
  * replaces a terminal record, so the older id becomes unknown; there is no
@@ -84,6 +87,8 @@ export declare class RAGServer {
84
87
  /**
85
88
  * query_documents tool handler
86
89
  */
90
+ /** Hands the finished results to the configured command and takes its answer. */
91
+ private applyReranker;
87
92
  handleQueryDocuments(args: QueryDocumentsInput): Promise<{
88
93
  content: QueryContent;
89
94
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { resolve, sep } from 'node:path';
6
6
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
7
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
8
  import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from '@modelcontextprotocol/sdk/types.js';
9
+ import { startAutoSyncWatch } from '../auto-sync-watch.js';
9
10
  import { DEFAULT_MIN_CHUNK_LENGTH, SemanticChunker } from '../chunker/index.js';
10
11
  import { collectFiles } from '../cli/file-collection.js';
11
12
  import { Embedder } from '../embedder/index.js';
@@ -17,9 +18,10 @@ import { buildPreparedFileVectorChunks, prepareFileForIngest, } from '../ingest/
17
18
  import { parseHtml } from '../parser/html-parser.js';
18
19
  import { DocumentParser, ValidationError } from '../parser/index.js';
19
20
  import { extractMarkdownTitle, extractTxtTitle } from '../parser/title-extractor.js';
21
+ import { rerankCandidates } from '../rerank/index.js';
20
22
  import { displayPath } from '../utils/base-dirs.js';
21
23
  import { toError } from '../utils/errors.js';
22
- import { MAX_SCAN_DEPTH } from '../utils/limits.js';
24
+ import { DEFAULT_RERANK_TIMEOUT_MS, MAX_QUERY_LIMIT, MAX_SCAN_DEPTH, RERANK_CANDIDATE_MULTIPLIER, } from '../utils/limits.js';
23
25
  import { checkRawDataArtifacts, extractSourceFromPath, generateMetaJsonPath, generateRawDataPath, isEnoent, isManagedRawDataPath, isPathInRawDataDir, isPathInRawDataDirLexical, loadMetaJson, saveMetaJson, saveRawData, } from '../utils/raw-data-utils.js';
24
26
  import { bfsCollectSupportedFiles, canonicalizeRequestedPath, classifyRequestedPath, } from '../utils/scan.js';
25
27
  import { nonAbsolutePrefixes } from '../utils/scope-match.js';
@@ -153,6 +155,9 @@ export class RAGServer {
153
155
  maxFileSize;
154
156
  device;
155
157
  storeImages;
158
+ /** Configured reranker command. Undefined leaves query_documents unchanged. */
159
+ rerankCommand;
160
+ rerankTimeoutMs;
156
161
  /**
157
162
  * The one current-or-latest sync job this process retains. A new `sync_start`
158
163
  * replaces a terminal record, so the older id becomes unknown; there is no
@@ -184,6 +189,8 @@ export class RAGServer {
184
189
  this.maxFileSize = config.maxFileSize;
185
190
  this.device = config.device;
186
191
  this.storeImages = config.storeImages ?? false;
192
+ this.rerankCommand = config.rerankCommand;
193
+ this.rerankTimeoutMs = config.rerankTimeoutMs ?? DEFAULT_RERANK_TIMEOUT_MS;
187
194
  this.excludePaths = [`${resolve(this.dbPath)}${sep}`, `${resolve(this.cacheDir)}${sep}`];
188
195
  this.server = new Server({ name: 'rag-mcp-server', version: packageVersion }, { capabilities: { tools: {} } });
189
196
  // Component initialization
@@ -342,45 +349,57 @@ export class RAGServer {
342
349
  */
343
350
  async initialize() {
344
351
  await this.vectorStore.initialize();
352
+ const watchers = startAutoSyncWatch({
353
+ baseDirs: this.baseDirs,
354
+ onDriftSignal: () => this.maybeAutoSync(),
355
+ onError: (message) => console.error(message),
356
+ });
357
+ if (watchers.length > 0) {
358
+ console.error('Auto-sync: watching document roots for changes');
359
+ }
345
360
  console.error('RAGServer initialized');
346
361
  }
347
362
  /**
348
363
  * query_documents tool handler
349
364
  */
365
+ /** Hands the finished results to the configured command and takes its answer. */
366
+ async applyReranker(results, query, limit) {
367
+ if (this.rerankCommand === undefined) {
368
+ return results;
369
+ }
370
+ return rerankCandidates({
371
+ candidates: results,
372
+ query,
373
+ top: limit,
374
+ command: this.rerankCommand,
375
+ timeoutMs: this.rerankTimeoutMs,
376
+ });
377
+ }
350
378
  async handleQueryDocuments(args) {
351
379
  this.maybeAutoSync();
352
380
  // query_documents reads only LanceDB, so it stays callable in degraded
353
381
  // mode; `withWarnings` and `status` remain the diagnostic surface.
354
382
  const queryVector = await this.embedder.embed(args.query);
383
+ // A reranker only improves on what the search returned, so it is given more
384
+ // candidates than the caller asked for. `search` applies every filter and
385
+ // caps at `limit`, so the expansion has to be requested up front.
386
+ const limit = args.limit ?? 10;
387
+ const candidateLimit = this.rerankCommand === undefined
388
+ ? limit
389
+ : Math.min(limit * RERANK_CANDIDATE_MULTIPLIER, MAX_QUERY_LIMIT);
355
390
  // `args.scope` is parser-validated; array-wrap without re-validating, and
356
391
  // omit the key when absent (exactOptionalPropertyTypes) to keep the scope-absent path.
357
- const searchResults = await this.vectorStore.search(queryVector, {
392
+ const candidates = await this.vectorStore.search(queryVector, {
358
393
  queryText: args.query,
359
- limit: args.limit ?? 10,
394
+ limit: candidateLimit,
360
395
  ...(args.scope !== undefined ? { scope: toArray(args.scope) } : {}),
361
396
  });
362
- // Format results with source restoration for raw-data files
363
- const results = searchResults.map((result) => {
364
- const queryResult = {
365
- filePath: result.filePath,
366
- chunkIndex: result.chunkIndex,
367
- text: result.text,
368
- score: result.score,
369
- fileTitle: result.fileTitle ?? null,
370
- };
371
- if (isManagedRawDataPath(result.filePath, this.dbPath)) {
372
- const source = extractSourceFromPath(result.filePath);
373
- if (source) {
374
- queryResult.source = source;
375
- }
376
- }
377
- return queryResult;
378
- });
379
- let hydratedRows = [];
397
+ // Hydrated before the command runs, so its answer needs no identity lookup.
380
398
  let attachmentWarning = null;
399
+ let attachmentsById = new Map();
381
400
  try {
382
- const hydration = await this.vectorStore.hydrateVisualAttachments(searchResults);
383
- hydratedRows = hydration.rows;
401
+ const hydration = await this.vectorStore.hydrateVisualAttachments(candidates);
402
+ attachmentsById = new Map(hydration.rows.map((row) => [row.id, row.attachments]));
384
403
  if (hydration.omittedCount > 0) {
385
404
  attachmentWarning = attachmentOmissionWarning(hydration.omittedCount);
386
405
  }
@@ -388,15 +407,37 @@ export class RAGServer {
388
407
  catch {
389
408
  attachmentWarning = attachmentHydrationFailureWarning();
390
409
  }
410
+ // Format results with source restoration for raw-data files
411
+ const retrieved = candidates.map((candidate) => {
412
+ const result = {
413
+ filePath: candidate.filePath,
414
+ chunkIndex: candidate.chunkIndex,
415
+ text: candidate.text,
416
+ score: candidate.score,
417
+ fileTitle: candidate.fileTitle ?? null,
418
+ images: attachmentsById.get(candidate.id) ?? [],
419
+ };
420
+ if (isManagedRawDataPath(candidate.filePath, this.dbPath)) {
421
+ const source = extractSourceFromPath(candidate.filePath);
422
+ if (source) {
423
+ result.source = source;
424
+ }
425
+ }
426
+ return result;
427
+ });
428
+ // `search` already applied the limit, so only the expanded set is trimmed.
429
+ const results = this.rerankCommand === undefined
430
+ ? retrieved
431
+ : (await this.applyReranker(retrieved, args.query, limit)).slice(0, limit);
391
432
  const content = [
392
433
  {
393
434
  type: 'text',
394
- text: JSON.stringify(results, null, 2),
435
+ // Attachments go out as image blocks below, never inside this JSON.
436
+ text: JSON.stringify(results.map(({ images: _images, ...rest }) => rest), null, 2),
395
437
  },
396
438
  ];
397
- const attachmentsByIdentity = new Map(hydratedRows.map((row) => [row.id, row.attachments]));
398
- for (const [resultIndex, result] of results.entries()) {
399
- const attachments = attachmentsByIdentity.get(searchResults[resultIndex]?.id ?? '') ?? [];
439
+ for (const result of results) {
440
+ const attachments = result.images;
400
441
  for (const attachment of attachments) {
401
442
  content.push({
402
443
  type: 'text',