mindlore 0.6.3 → 0.6.5

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 (107) hide show
  1. package/README.md +1 -1
  2. package/dist/scripts/cc-memory-bulk-sync.js +1 -1
  3. package/dist/scripts/cc-memory-bulk-sync.js.map +1 -1
  4. package/dist/scripts/cc-session-sync.js +2 -2
  5. package/dist/scripts/cc-session-sync.js.map +1 -1
  6. package/dist/scripts/fetch-raw.js +17 -8
  7. package/dist/scripts/fetch-raw.js.map +1 -1
  8. package/dist/scripts/init.js +8 -8
  9. package/dist/scripts/init.js.map +1 -1
  10. package/dist/scripts/lib/chunker.d.ts.map +1 -1
  11. package/dist/scripts/lib/chunker.js +3 -0
  12. package/dist/scripts/lib/chunker.js.map +1 -1
  13. package/dist/scripts/lib/constants.d.ts +5 -0
  14. package/dist/scripts/lib/constants.d.ts.map +1 -1
  15. package/dist/scripts/lib/constants.js +35 -1
  16. package/dist/scripts/lib/constants.js.map +1 -1
  17. package/dist/scripts/lib/daemon.d.ts.map +1 -1
  18. package/dist/scripts/lib/daemon.js +3 -0
  19. package/dist/scripts/lib/daemon.js.map +1 -1
  20. package/dist/scripts/lib/fuzzy.d.ts.map +1 -1
  21. package/dist/scripts/lib/fuzzy.js +6 -4
  22. package/dist/scripts/lib/fuzzy.js.map +1 -1
  23. package/dist/scripts/lib/input-validation.d.ts +5 -0
  24. package/dist/scripts/lib/input-validation.d.ts.map +1 -0
  25. package/dist/scripts/lib/input-validation.js +48 -0
  26. package/dist/scripts/lib/input-validation.js.map +1 -0
  27. package/dist/scripts/lib/privacy-filter.d.ts.map +1 -1
  28. package/dist/scripts/lib/privacy-filter.js +3 -0
  29. package/dist/scripts/lib/privacy-filter.js.map +1 -1
  30. package/dist/scripts/lib/proximity.d.ts.map +1 -1
  31. package/dist/scripts/lib/proximity.js +6 -0
  32. package/dist/scripts/lib/proximity.js.map +1 -1
  33. package/dist/scripts/lib/rrf.d.ts +7 -2
  34. package/dist/scripts/lib/rrf.d.ts.map +1 -1
  35. package/dist/scripts/lib/rrf.js +20 -16
  36. package/dist/scripts/lib/rrf.js.map +1 -1
  37. package/dist/scripts/lib/search-cache.d.ts +15 -0
  38. package/dist/scripts/lib/search-cache.d.ts.map +1 -1
  39. package/dist/scripts/lib/search-cache.js +50 -2
  40. package/dist/scripts/lib/search-cache.js.map +1 -1
  41. package/dist/scripts/lib/search-engine.d.ts +1 -1
  42. package/dist/scripts/lib/search-engine.d.ts.map +1 -1
  43. package/dist/scripts/lib/search-engine.js +31 -31
  44. package/dist/scripts/lib/search-engine.js.map +1 -1
  45. package/dist/scripts/mindlore-daemon.js +1 -3
  46. package/dist/scripts/mindlore-daemon.js.map +1 -1
  47. package/dist/scripts/mindlore-obsidian.js +4 -0
  48. package/dist/scripts/mindlore-obsidian.js.map +1 -1
  49. package/dist/scripts/mindlore-rrf-bench.d.ts +2 -0
  50. package/dist/scripts/mindlore-rrf-bench.d.ts.map +1 -0
  51. package/dist/scripts/mindlore-rrf-bench.js +30 -0
  52. package/dist/scripts/mindlore-rrf-bench.js.map +1 -0
  53. package/dist/tests/fetch-raw-security.test.d.ts +2 -0
  54. package/dist/tests/fetch-raw-security.test.d.ts.map +1 -0
  55. package/dist/tests/fetch-raw-security.test.js +72 -0
  56. package/dist/tests/fetch-raw-security.test.js.map +1 -0
  57. package/dist/tests/fetch-raw.test.js +4 -4
  58. package/dist/tests/fetch-raw.test.js.map +1 -1
  59. package/dist/tests/fts5.test.js +0 -22
  60. package/dist/tests/fts5.test.js.map +1 -1
  61. package/dist/tests/input-validation.test.d.ts +2 -0
  62. package/dist/tests/input-validation.test.d.ts.map +1 -0
  63. package/dist/tests/input-validation.test.js +113 -0
  64. package/dist/tests/input-validation.test.js.map +1 -0
  65. package/dist/tests/privacy-filter.test.js +25 -50
  66. package/dist/tests/privacy-filter.test.js.map +1 -1
  67. package/dist/tests/rrf.test.js +42 -3
  68. package/dist/tests/rrf.test.js.map +1 -1
  69. package/dist/tests/search-cache.test.js +44 -12
  70. package/dist/tests/search-cache.test.js.map +1 -1
  71. package/dist/tests/search-hook.test.js +0 -44
  72. package/dist/tests/search-hook.test.js.map +1 -1
  73. package/dist/tests/sec-regression.test.d.ts +2 -0
  74. package/dist/tests/sec-regression.test.d.ts.map +1 -0
  75. package/dist/tests/sec-regression.test.js +174 -0
  76. package/dist/tests/sec-regression.test.js.map +1 -0
  77. package/dist/tests/stop-words.test.d.ts +2 -0
  78. package/dist/tests/stop-words.test.d.ts.map +1 -0
  79. package/dist/tests/stop-words.test.js +47 -0
  80. package/dist/tests/stop-words.test.js.map +1 -0
  81. package/hooks/lib/mindlore-common.cjs +39 -36
  82. package/hooks/mindlore-fts5-sync.cjs +4 -3
  83. package/hooks/mindlore-index.cjs +6 -7
  84. package/hooks/mindlore-pre-compact.cjs +5 -4
  85. package/hooks/mindlore-search.cjs +3 -2
  86. package/hooks/mindlore-session-end.cjs +10 -10
  87. package/hooks/mindlore-session-focus.cjs +11 -1
  88. package/package.json +1 -1
  89. package/plugin.json +1 -1
  90. package/templates/SCHEMA.md +10 -108
  91. package/templates/config.json +1 -1
  92. package/dist/scripts/lib/hybrid-search.d.ts +0 -62
  93. package/dist/scripts/lib/hybrid-search.d.ts.map +0 -1
  94. package/dist/scripts/lib/hybrid-search.js +0 -171
  95. package/dist/scripts/lib/hybrid-search.js.map +0 -1
  96. package/dist/tests/hybrid-search.test.d.ts +0 -2
  97. package/dist/tests/hybrid-search.test.d.ts.map +0 -1
  98. package/dist/tests/hybrid-search.test.js +0 -139
  99. package/dist/tests/hybrid-search.test.js.map +0 -1
  100. package/dist/tests/index-cli-embed.test.d.ts +0 -7
  101. package/dist/tests/index-cli-embed.test.d.ts.map +0 -1
  102. package/dist/tests/index-cli-embed.test.js +0 -128
  103. package/dist/tests/index-cli-embed.test.js.map +0 -1
  104. package/dist/tests/search-cli-hybrid.test.d.ts +0 -6
  105. package/dist/tests/search-cli-hybrid.test.d.ts.map +0 -1
  106. package/dist/tests/search-cli-hybrid.test.js +0 -103
  107. package/dist/tests/search-cli-hybrid.test.js.map +0 -1
@@ -49,6 +49,8 @@ function createDaemonServer(options) {
49
49
  await loadModel();
50
50
  return new Promise((resolve) => {
51
51
  server = net_1.default.createServer((conn) => {
52
+ conn.setTimeout(5000);
53
+ conn.on('timeout', () => conn.destroy());
52
54
  let buffer = '';
53
55
  const MAX_BUFFER = 1024 * 1024;
54
56
  conn.on('data', async (data) => {
@@ -77,6 +79,7 @@ function createDaemonServer(options) {
77
79
  }
78
80
  });
79
81
  });
82
+ server.maxConnections = 10;
80
83
  server.listen(0, constants_js_1.DAEMON_HOST, () => {
81
84
  const addr = server?.address();
82
85
  if (addr && typeof addr === 'object') {
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../scripts/lib/daemon.ts"],"names":[],"mappings":";;;;;AA8BA,gDAsHC;AApJD,8CAAsB;AACtB,4CAAoB;AACpB,iDAA6C;AA2B7C,yDAAyD;AACzD,SAAgB,kBAAkB,CAAC,OAAsB;IACvD,IAAI,MAAM,GAAsB,IAAI,CAAC;IACrC,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,OAAO,GAAiD,IAAI,CAAC;IAEjE,KAAK,UAAU,SAAS;QACtB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QACD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC7D,OAAO,GAAG,iBAAiB,CAAC;IAC9B,CAAC;IAED,KAAK,UAAU,aAAa,CAAC,GAAkB;QAC7C,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC1B,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,OAAO;oBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;gBAClE,IAAI,CAAC,GAAG,CAAC,IAAI;oBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;gBACnE,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC1C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;gBAC1C,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBACpB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACvD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC7B;gBACE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAiB;QAC7B,KAAK,CAAC,KAAK;YACT,MAAM,SAAS,EAAE,CAAC;YAElB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,MAAM,GAAG,aAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;oBACjC,IAAI,MAAM,GAAG,EAAE,CAAC;oBAChB,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;oBAC/B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;wBAC7B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAC1B,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;4BAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAA2B,CAAC,GAAG,IAAI,CAAC,CAAC;4BACxG,IAAI,CAAC,OAAO,EAAE,CAAC;4BACf,OAAO;wBACT,CAAC;wBACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;wBAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;4BACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gCAAE,SAAS;4BAC3B,IAAI,CAAC;gCACH,MAAM,GAAG,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gCAC5C,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;gCACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;gCAEvC,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oCACxB,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gCACnD,CAAC;4BACH,CAAC;4BAAC,MAAM,CAAC;gCACP,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAA2B,CAAC,GAAG,IAAI,CAAC,CAAC;4BACvG,CAAC;wBACH,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,0BAAW,EAAE,GAAG,EAAE;oBACjC,MAAM,IAAI,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC;oBAC/B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACrC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBACnB,CAAC;oBAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;wBACrB,YAAE,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC3D,CAAC;oBACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACpB,YAAE,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;oBACjE,CAAC;oBACD,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,IAAI;YACR,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,IAAI,CAAC;wBAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACrB,IAAI,CAAC;wBAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;gBACvE,CAAC;gBACD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;wBAChB,MAAM,GAAG,IAAI,CAAC;wBACd,IAAI,GAAG,IAAI,CAAC;wBACZ,OAAO,EAAE,CAAC;oBACZ,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,SAAS;YACP,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC;QAC7C,CAAC;QAED,OAAO;YACL,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../scripts/lib/daemon.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fuzzy.d.ts","sourceRoot":"","sources":["../../../scripts/lib/fuzzy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAGvC,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAexD;AAQD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CAYxF;AAID,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,EAAE,CAMrD;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAStE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAc9E"}
1
+ {"version":3,"file":"fuzzy.d.ts","sourceRoot":"","sources":["../../../scripts/lib/fuzzy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAIvC,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBxD;AAQD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CAYxF;AAID,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,EAAE,CAMrD;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAStE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAc9E"}
@@ -7,6 +7,7 @@ exports.invalidateVocabCache = invalidateVocabCache;
7
7
  exports.populateVocabulary = populateVocabulary;
8
8
  exports.correctQuery = correctQuery;
9
9
  const db_helpers_js_1 = require("./db-helpers.js");
10
+ const constants_js_1 = require("./constants.js");
10
11
  function levenshtein(a, b) {
11
12
  const m = a.length, n = b.length;
12
13
  const prev = new Int32Array(n + 1);
@@ -16,13 +17,14 @@ function levenshtein(a, b) {
16
17
  for (let i = 1; i <= m; i++) {
17
18
  curr[0] = i;
18
19
  for (let j = 1; j <= n; j++) {
19
- curr[j] = a[i - 1] === b[j - 1]
20
- ? prev[j - 1]
21
- : 1 + Math.min(prev[j], curr[j - 1], prev[j - 1]);
20
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- Int32Array indices within loop bounds [0..n]
21
+ curr[j] = a[i - 1] === b[j - 1] ? prev[j - 1] : 1 + Math.min(prev[j], curr[j - 1], prev[j - 1]);
22
22
  }
23
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- Int32Array index j within [0..n]
23
24
  for (let j = 0; j <= n; j++)
24
25
  prev[j] = curr[j];
25
26
  }
27
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- Int32Array index n is always within bounds
26
28
  return prev[n];
27
29
  }
28
30
  function maxDistance(wordLen) {
@@ -60,7 +62,7 @@ function invalidateVocabCache() {
60
62
  }
61
63
  function populateVocabulary(db, content) {
62
64
  const words = content
63
- .replace(/[^\w\sçğıöşüÇĞİÖŞÜ-]/g, ' ')
65
+ .replace(constants_js_1.TURKISH_WORD_RE, ' ')
64
66
  .split(/\s+/)
65
67
  .filter(w => w.length >= 3)
66
68
  .map(w => w.toLowerCase());
@@ -1 +1 @@
1
- {"version":3,"file":"fuzzy.js","sourceRoot":"","sources":["../../../scripts/lib/fuzzy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fuzzy.js","sourceRoot":"","sources":["../../../scripts/lib/fuzzy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function validatePath(targetPath: string, allowedBase: string): void;
2
+ export declare function validateUrl(urlOrString: string | URL): void;
3
+ export declare function sanitizeForExecFile(value: string): string;
4
+ export declare function escapeYamlValue(value: string): string;
5
+ //# sourceMappingURL=input-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-validation.d.ts","sourceRoot":"","sources":["../../../scripts/lib/input-validation.ts"],"names":[],"mappings":"AAMA,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAM1E;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAW3D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQrD"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validatePath = validatePath;
7
+ exports.validateUrl = validateUrl;
8
+ exports.sanitizeForExecFile = sanitizeForExecFile;
9
+ exports.escapeYamlValue = escapeYamlValue;
10
+ const path_1 = __importDefault(require("path"));
11
+ const PRIVATE_IP_RE = /^(?:127\.|10\.|172\.(?:1[6-9]|2\d|3[01])\.|192\.168\.|169\.254\.|0\.0\.0\.0|fc00:|fe80:|::1$|localhost$)/i;
12
+ const SHELL_UNSAFE = /[;|&`$(){}[\]!#~<>\\'"*?\n\r]/;
13
+ function validatePath(targetPath, allowedBase) {
14
+ const resolved = path_1.default.resolve(targetPath);
15
+ const base = path_1.default.resolve(allowedBase);
16
+ if (!resolved.startsWith(base + path_1.default.sep) && resolved !== base) {
17
+ throw new Error(`Path must be under ${allowedBase}, got: ${targetPath}`);
18
+ }
19
+ }
20
+ function validateUrl(urlOrString) {
21
+ let hostname;
22
+ try {
23
+ const u = typeof urlOrString === 'string' ? new URL(urlOrString) : urlOrString;
24
+ hostname = u.hostname.replace(/^\[|]$/g, '');
25
+ }
26
+ catch {
27
+ throw new Error(`Invalid URL: ${String(urlOrString)}`);
28
+ }
29
+ if (PRIVATE_IP_RE.test(hostname)) {
30
+ throw new Error(`Private/reserved IP range not allowed: ${hostname}`);
31
+ }
32
+ }
33
+ function sanitizeForExecFile(value) {
34
+ if (SHELL_UNSAFE.test(value)) {
35
+ throw new Error('Invalid characters in argument');
36
+ }
37
+ return value;
38
+ }
39
+ function escapeYamlValue(value) {
40
+ const escaped = value
41
+ .replace(/\\/g, '\\\\')
42
+ .replace(/"/g, '\\"')
43
+ .replace(/\n/g, '\\n')
44
+ .replace(/\r/g, '\\r')
45
+ .replace(/\t/g, '\\t');
46
+ return `"${escaped}"`;
47
+ }
48
+ //# sourceMappingURL=input-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-validation.js","sourceRoot":"","sources":["../../../scripts/lib/input-validation.ts"],"names":[],"mappings":";;;;;AAMA,oCAMC;AAED,kCAWC;AAED,kDAKC;AAED,0CAQC;AA1CD,gDAAwB;AAExB,MAAM,aAAa,GAAG,2GAA2G,CAAC;AAElI,MAAM,YAAY,GAAG,+BAA+B,CAAC;AAErD,SAAgB,YAAY,CAAC,UAAkB,EAAE,WAAmB;IAClE,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,cAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,sBAAsB,WAAW,UAAU,UAAU,EAAE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,WAAyB;IACnD,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAC/E,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,gBAAgB,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB,CAAC,KAAa;IAC/C,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,eAAe,CAAC,KAAa;IAC3C,MAAM,OAAO,GAAG,KAAK;SAClB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzB,OAAO,IAAI,OAAO,GAAG,CAAC;AACxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"privacy-filter.d.ts","sourceRoot":"","sources":["../../../scripts/lib/privacy-filter.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAGpC,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAoB5E"}
1
+ {"version":3,"file":"privacy-filter.d.ts","sourceRoot":"","sources":["../../../scripts/lib/privacy-filter.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAGpC,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAoB5E"}
@@ -17,10 +17,13 @@ const PATTERN_PREFIXES = [
17
17
  { prefix: 'pk_live_', pattern: /pk_live_[a-zA-Z0-9]{20,}/g },
18
18
  { prefix: 'Bearer', pattern: /Bearer\s+[a-zA-Z0-9\-._~+/]+=*/g },
19
19
  { prefix: '-----BEGIN', pattern: /-----BEGIN\s(?:RSA\s|EC\s|DSA\s|OPENSSH\s)?PRIVATE\sKEY-----/g },
20
+ { prefix: 'Basic', pattern: /Basic\s+[a-zA-Z0-9+\/]{16,}={0,2}/g },
21
+ { prefix: '-----BEGIN CERTIFICATE', pattern: /-----BEGIN\sCERTIFICATE-----/g },
20
22
  ];
21
23
  const NO_PREFIX_PATTERNS = [
22
24
  /(?:postgres|mysql|mongodb|redis|amqp)(?:\+srv)?:\/\/[^\s"']+/g,
23
25
  /(?:PASSWORD|SECRET|TOKEN|API_KEY|PRIVATE_KEY|DATABASE_URL|DB_PASSWORD|AUTH_TOKEN|ACCESS_KEY|SECRET_KEY)=\S+/gi,
26
+ /(?:api_key|auth_token|access_token|refresh_token|client_secret|private_key|secret_key)\s*[:=]\s*["']?[^\s"',}{]{8,}["']?/gi,
24
27
  ];
25
28
  exports.DEFAULT_PATTERNS = [
26
29
  ...PATTERN_PREFIXES.map(p => p.pattern),
@@ -1 +1 @@
1
- {"version":3,"file":"privacy-filter.js","sourceRoot":"","sources":["../../../scripts/lib/privacy-filter.ts"],"names":[],"mappings":";;;AA4BA,sCAoBC;AAhDD,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC,MAAM,gBAAgB,GAA+C;IACnE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,uCAAuC,EAAE;IACnE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;IAChD,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE;IACpD,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE;IACpD,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,+BAA+B,EAAE;IACnE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE;IACpD,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,gCAAgC,EAAE;IAC5D,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,mEAAmE,EAAE;IAC/F,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,EAAE;IACvD,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,2BAA2B,EAAE;IAC5D,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,2BAA2B,EAAE;IAC5D,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,iCAAiC,EAAE;IAChE,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,+DAA+D,EAAE;CACnG,CAAC;AAEF,MAAM,kBAAkB,GAAa;IACnC,+DAA+D;IAC/D,+GAA+G;CAChH,CAAC;AAEW,QAAA,gBAAgB,GAAa;IACxC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACvC,GAAG,kBAAkB;CACtB,CAAC;AAEF,SAAgB,aAAa,CAAC,IAAY,EAAE,aAAwB;IAClE,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,gBAAgB,EAAE,CAAC;QACnD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;YACtB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,aAAa;QAC7B,CAAC,CAAC,CAAC,GAAG,kBAAkB,EAAE,GAAG,aAAa,CAAC;QAC3C,CAAC,CAAC,kBAAkB,CAAC;IAEvB,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"privacy-filter.js","sourceRoot":"","sources":["../../../scripts/lib/privacy-filter.ts"],"names":[],"mappings":";;;AA+BA,sCAoBC;AAnDD,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC,MAAM,gBAAgB,GAA+C;IACnE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,uCAAuC,EAAE;IACnE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;IAChD,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE;IACpD,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE;IACpD,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,+BAA+B,EAAE;IACnE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE;IACpD,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,gCAAgC,EAAE;IAC5D,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,mEAAmE,EAAE;IAC/F,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,EAAE;IACvD,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,2BAA2B,EAAE;IAC5D,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,2BAA2B,EAAE;IAC5D,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,iCAAiC,EAAE;IAChE,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,+DAA+D,EAAE;IAClG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,oCAAoC,EAAE;IAClE,EAAE,MAAM,EAAE,wBAAwB,EAAE,OAAO,EAAE,+BAA+B,EAAE;CAC/E,CAAC;AAEF,MAAM,kBAAkB,GAAa;IACnC,+DAA+D;IAC/D,+GAA+G;IAC/G,4HAA4H;CAC7H,CAAC;AAEW,QAAA,gBAAgB,GAAa;IACxC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACvC,GAAG,kBAAkB;CACtB,CAAC;AAEF,SAAgB,aAAa,CAAC,IAAY,EAAE,aAAwB;IAClE,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,gBAAgB,EAAE,CAAC;QACnD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;YACtB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,aAAa;QAC7B,CAAC,CAAC,CAAC,GAAG,kBAAkB,EAAE,GAAG,aAAa,CAAC;QAC3C,CAAC,CAAC,kBAAkB,CAAC;IAEvB,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"proximity.d.ts","sourceRoot":"","sources":["../../../scripts/lib/proximity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAwCvD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAU1F"}
1
+ {"version":3,"file":"proximity.d.ts","sourceRoot":"","sources":["../../../scripts/lib/proximity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA8CvD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAU1F"}
@@ -15,14 +15,20 @@ function findMinSpan(content, terms) {
15
15
  if (positions.some(p => p.length === 0))
16
16
  return Infinity;
17
17
  let minSpan = Infinity;
18
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- positions[0] exists: guarded by `positions.some(p => p.length === 0)` check above
18
19
  for (let i = 0; i < positions[0].length; i++) {
20
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- positions[0] exists (see above); i is within bounds of its length
19
21
  let maxPos = positions[0][i];
22
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- positions[0] exists (see above); i is within bounds of its length
20
23
  let minPos = positions[0][i];
21
24
  for (let t = 1; t < terms.length; t++) {
22
25
  let bestDist = Infinity;
23
26
  let bestPos = 0;
27
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- positions[t] exists: loop t < terms.length, positions has same length as terms
24
28
  for (let j = 0; j < positions[t].length; j++) {
29
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- positions[t][j] within loop bounds; positions[0][i] within loop bounds
25
30
  const dist = Math.abs(positions[t][j] - positions[0][i]);
31
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- positions[t][j] within loop bounds
26
32
  if (dist < bestDist) {
27
33
  bestDist = dist;
28
34
  bestPos = positions[t][j];
@@ -1 +1 @@
1
- {"version":3,"file":"proximity.js","sourceRoot":"","sources":["../../../scripts/lib/proximity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proximity.js","sourceRoot":"","sources":["../../../scripts/lib/proximity.ts"],"names":[],"mappings":";;AA8CA,8CAUC;AAtDD,SAAS,WAAW,CAAC,OAAe,EAAE,KAAe;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,SAAS,GAAe,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC1C,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEzD,IAAI,OAAO,GAAG,QAAQ,CAAC;IAEvB,yJAAyJ;IACzJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,yIAAyI;QACzI,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC;QAC/B,yIAAyI;QACzI,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC;QAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,QAAQ,GAAG,QAAQ,CAAC;YACxB,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,sJAAsJ;YACtJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,8IAA8I;gBAC9I,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAAC;gBAC7D,0GAA0G;gBAC1G,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;oBAAC,QAAQ,GAAG,IAAI,CAAC;oBAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC;gBAAC,CAAC;YACxE,CAAC;YACD,IAAI,OAAO,GAAG,MAAM;gBAAE,MAAM,GAAG,OAAO,CAAC;YACvC,IAAI,OAAO,GAAG,MAAM;gBAAE,MAAM,GAAG,OAAO,CAAC;QACzC,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;QAC7B,IAAI,IAAI,GAAG,OAAO;YAAE,OAAO,GAAG,IAAI,CAAC;IACrC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAAuB,EAAE,KAAe;IACxE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAErC,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,CAAC,EAAE;QACP,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QACtE,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC;IAC1C,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC"}
@@ -16,8 +16,13 @@ export interface RRFOptions {
16
16
  k?: number;
17
17
  dedupByPath?: boolean;
18
18
  }
19
+ export interface SearchQueryOptions {
20
+ query: string;
21
+ limit: number;
22
+ project?: string;
23
+ }
19
24
  export declare function computeRRF(porterResults: RankedResult[], trigramResults: RankedResult[], options?: RRFOptions): RankedResult[];
20
- export declare function searchPorter(db: Database, query: string, limit: number, project?: string): RankedResult[];
21
- export declare function searchTrigram(db: Database, query: string, limit: number, project?: string): RankedResult[];
25
+ export declare function searchPorter(db: Database, options: SearchQueryOptions): RankedResult[];
26
+ export declare function searchTrigram(db: Database, options: SearchQueryOptions): RankedResult[];
22
27
  export {};
23
28
  //# sourceMappingURL=rrf.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rrf.d.ts","sourceRoot":"","sources":["../../../scripts/lib/rrf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAGvC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,UAAU,CACxB,aAAa,EAAE,YAAY,EAAE,EAC7B,cAAc,EAAE,YAAY,EAAE,EAC9B,OAAO,GAAE,UAAe,GACvB,YAAY,EAAE,CA4BhB;AAED,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,GACf,YAAY,EAAE,CAQhB;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,GACf,YAAY,EAAE,CAYhB"}
1
+ {"version":3,"file":"rrf.d.ts","sourceRoot":"","sources":["../../../scripts/lib/rrf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAGvC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAaD,wBAAgB,UAAU,CACxB,aAAa,EAAE,YAAY,EAAE,EAC7B,cAAc,EAAE,YAAY,EAAE,EAC9B,OAAO,GAAE,UAAe,GACvB,YAAY,EAAE,CA4BhB;AAUD,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,kBAAkB,GAC1B,YAAY,EAAE,CAIhB;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,kBAAkB,GAC1B,YAAY,EAAE,CAYhB"}
@@ -6,8 +6,9 @@ exports.searchPorter = searchPorter;
6
6
  exports.searchTrigram = searchTrigram;
7
7
  const db_helpers_js_1 = require("./db-helpers.js");
8
8
  function sanitizeFtsQuery(query) {
9
- return query.replace(/["*(){}[\]^~:]/g, '').trim();
9
+ return query.replace(/["*(){}[\]^~:-]/g, ' ').replace(/\s+/g, ' ').trim();
10
10
  }
11
+ const BM25_RANK_EXPR = 'bm25(mindlore_fts, 1, 1, 1, 5.0, 1, 1) as bm';
11
12
  function computeRRF(porterResults, trigramResults, options = {}) {
12
13
  const k = options.k ?? 60;
13
14
  const scores = new Map();
@@ -35,28 +36,31 @@ function computeRRF(porterResults, trigramResults, options = {}) {
35
36
  }
36
37
  return results;
37
38
  }
38
- function searchPorter(db, query, limit, project) {
39
- const sanitized = sanitizeFtsQuery(query);
39
+ function _searchFts(db, p) {
40
+ const sql = p.project
41
+ ? `SELECT path, slug, description, title, category, tags, content, ${p.rankExpr} FROM ${p.table} WHERE ${p.table} MATCH ? AND project = ? ORDER BY ${p.orderBy} LIMIT ?`
42
+ : `SELECT path, slug, description, title, category, tags, content, ${p.rankExpr} FROM ${p.table} WHERE ${p.table} MATCH ? ORDER BY ${p.orderBy} LIMIT ?`;
43
+ const params = p.project ? [p.query, p.project, p.limit] : [p.query, p.limit];
44
+ return (0, db_helpers_js_1.dbAll)(db, sql, ...params).map((r, i) => ({ ...r, rank: i + 1, score: 0 }));
45
+ }
46
+ function searchPorter(db, options) {
47
+ const sanitized = sanitizeFtsQuery(options.query);
40
48
  if (!sanitized)
41
49
  return [];
42
- const sql = project
43
- ? 'SELECT path, slug, description, title, category, tags, content, bm25(mindlore_fts, 1, 1, 1, 5.0, 1, 1) as bm FROM mindlore_fts WHERE mindlore_fts MATCH ? AND project = ? ORDER BY bm LIMIT ?'
44
- : 'SELECT path, slug, description, title, category, tags, content, bm25(mindlore_fts, 1, 1, 1, 5.0, 1, 1) as bm FROM mindlore_fts WHERE mindlore_fts MATCH ? ORDER BY bm LIMIT ?';
45
- const params = project ? [sanitized, project, limit] : [sanitized, limit];
46
- return (0, db_helpers_js_1.dbAll)(db, sql, ...params).map((r, i) => ({ ...r, rank: i + 1, score: 0 }));
50
+ return _searchFts(db, { table: 'mindlore_fts', rankExpr: BM25_RANK_EXPR, orderBy: 'bm', query: sanitized, project: options.project, limit: options.limit });
47
51
  }
48
- function searchTrigram(db, query, limit, project) {
49
- const sanitized = sanitizeFtsQuery(query);
52
+ function searchTrigram(db, options) {
53
+ const sanitized = sanitizeFtsQuery(options.query);
50
54
  if (!sanitized)
51
55
  return [];
52
56
  try {
53
- const sql = project
54
- ? 'SELECT path, slug, description, title, category, tags, content, rank FROM mindlore_fts_trigram WHERE mindlore_fts_trigram MATCH ? AND project = ? ORDER BY rank LIMIT ?'
55
- : 'SELECT path, slug, description, title, category, tags, content, rank FROM mindlore_fts_trigram WHERE mindlore_fts_trigram MATCH ? ORDER BY rank LIMIT ?';
56
- const params = project ? [sanitized, project, limit] : [sanitized, limit];
57
- return (0, db_helpers_js_1.dbAll)(db, sql, ...params).map((r, i) => ({ ...r, rank: i + 1, score: 0 }));
57
+ return _searchFts(db, { table: 'mindlore_fts_trigram', rankExpr: 'rank', orderBy: 'rank', query: sanitized, project: options.project, limit: options.limit });
58
58
  }
59
- catch (_err) {
59
+ catch (err) {
60
+ const msg = err instanceof Error ? err.message : String(err);
61
+ if (!msg.includes('no such table')) {
62
+ console.warn(`searchTrigram: ${msg}`);
63
+ }
60
64
  return [];
61
65
  }
62
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rrf.js","sourceRoot":"","sources":["../../../scripts/lib/rrf.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rrf.js","sourceRoot":"","sources":["../../../scripts/lib/rrf.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,27 @@ export interface SearchCacheOptions {
7
7
  export declare class SearchCache {
8
8
  private db;
9
9
  private ttlMs;
10
+ private statsReady;
11
+ private stmtHit;
12
+ private stmtMiss;
13
+ private lastCleanup;
10
14
  constructor(db: Database, options?: SearchCacheOptions);
11
15
  private hash;
16
+ private ensureStatsTable;
17
+ getStats(): {
18
+ hits: number;
19
+ misses: number;
20
+ hitRate: number;
21
+ };
22
+ resetStats(): void;
12
23
  get(query: string): SearchResult[] | null;
13
24
  set(query: string, results: SearchResult[]): void;
14
25
  invalidate(): void;
15
26
  cleanup(): void;
27
+ }
28
+ export declare class SearchThrottle {
29
+ private db;
30
+ constructor(db: Database);
16
31
  incrementCallCount(sessionId: string): number;
17
32
  getMaxResults(callCount: number): number;
18
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"search-cache.d.ts","sourceRoot":"","sources":["../../../scripts/lib/search-cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,KAAK,CAAS;gBAEV,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAE,kBAAuB;IAK1D,OAAO,CAAC,IAAI;IAIZ,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,IAAI;IAczC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI;IAQjD,UAAU,IAAI,IAAI;IAIlB,OAAO,IAAI,IAAI;IAIf,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAY7C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAKzC"}
1
+ {"version":3,"file":"search-cache.d.ts","sourceRoot":"","sources":["../../../scripts/lib/search-cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,WAAW,CAAK;gBAEZ,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAE,kBAAuB;IAK1D,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,gBAAgB;IAexB,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAQ7D,UAAU,IAAI,IAAI;IAKlB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,IAAI;IAoBzC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,IAAI;IAQjD,UAAU,IAAI,IAAI;IAIlB,OAAO,IAAI,IAAI;CAOhB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAW;gBAET,EAAE,EAAE,QAAQ;IAIxB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAY7C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAKzC"}
@@ -3,11 +3,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SearchCache = void 0;
6
+ exports.SearchThrottle = exports.SearchCache = void 0;
7
7
  const crypto_1 = __importDefault(require("crypto"));
8
+ const CLEANUP_INTERVAL_MS = 60_000;
8
9
  class SearchCache {
9
10
  db;
10
11
  ttlMs;
12
+ statsReady = false;
13
+ stmtHit = null;
14
+ stmtMiss = null;
15
+ lastCleanup = 0;
11
16
  constructor(db, options = {}) {
12
17
  this.db = db;
13
18
  this.ttlMs = options.ttlMs ?? 300000;
@@ -15,14 +20,46 @@ class SearchCache {
15
20
  hash(query) {
16
21
  return crypto_1.default.createHash('sha256').update(query).digest('hex').slice(0, 16);
17
22
  }
23
+ ensureStatsTable() {
24
+ if (this.statsReady)
25
+ return;
26
+ this.db.exec(`
27
+ CREATE TABLE IF NOT EXISTS search_cache_stats (
28
+ id INTEGER PRIMARY KEY CHECK (id = 1),
29
+ hits INTEGER NOT NULL DEFAULT 0,
30
+ misses INTEGER NOT NULL DEFAULT 0
31
+ )
32
+ `);
33
+ this.db.prepare('INSERT OR IGNORE INTO search_cache_stats (id, hits, misses) VALUES (1, 0, 0)').run();
34
+ this.stmtHit = this.db.prepare('UPDATE search_cache_stats SET hits = hits + 1 WHERE id = 1');
35
+ this.stmtMiss = this.db.prepare('UPDATE search_cache_stats SET misses = misses + 1 WHERE id = 1');
36
+ this.statsReady = true;
37
+ }
38
+ getStats() {
39
+ this.ensureStatsTable();
40
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- single-row table
41
+ const row = this.db.prepare('SELECT hits, misses FROM search_cache_stats WHERE id = 1').get();
42
+ const total = row.hits + row.misses;
43
+ return { hits: row.hits, misses: row.misses, hitRate: total > 0 ? row.hits / total : 0 };
44
+ }
45
+ resetStats() {
46
+ this.ensureStatsTable();
47
+ this.db.prepare('UPDATE search_cache_stats SET hits = 0, misses = 0 WHERE id = 1').run();
48
+ }
18
49
  get(query) {
19
50
  const h = this.hash(query);
20
51
  // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- better-sqlite3 .get() returns unknown
21
52
  const row = this.db.prepare('SELECT results_json FROM search_cache WHERE query_hash = ? AND expires_at > ?').get(h, new Date().toISOString());
22
53
  if (!row) {
54
+ this.ensureStatsTable();
55
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- ensureStatsTable sets stmtMiss
56
+ this.stmtMiss.run();
23
57
  this.cleanup();
24
58
  return null;
25
59
  }
60
+ this.ensureStatsTable();
61
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- ensureStatsTable sets stmtHit
62
+ this.stmtHit.run();
26
63
  // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- JSON stored by set()
27
64
  return JSON.parse(row.results_json);
28
65
  }
@@ -35,8 +72,19 @@ class SearchCache {
35
72
  this.db.exec('DELETE FROM search_cache');
36
73
  }
37
74
  cleanup() {
75
+ const now = Date.now();
76
+ if (now - this.lastCleanup < CLEANUP_INTERVAL_MS)
77
+ return;
78
+ this.lastCleanup = now;
38
79
  this.db.prepare('DELETE FROM search_cache WHERE expires_at < ?').run(new Date().toISOString());
39
80
  }
81
+ }
82
+ exports.SearchCache = SearchCache;
83
+ class SearchThrottle {
84
+ db;
85
+ constructor(db) {
86
+ this.db = db;
87
+ }
40
88
  incrementCallCount(sessionId) {
41
89
  const now = new Date().toISOString();
42
90
  // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- better-sqlite3 .get() returns unknown
@@ -56,5 +104,5 @@ class SearchCache {
56
104
  return 0;
57
105
  }
58
106
  }
59
- exports.SearchCache = SearchCache;
107
+ exports.SearchThrottle = SearchThrottle;
60
108
  //# sourceMappingURL=search-cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-cache.js","sourceRoot":"","sources":["../../../scripts/lib/search-cache.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAS5B,MAAa,WAAW;IACd,EAAE,CAAW;IACb,KAAK,CAAS;IAEtB,YAAY,EAAY,EAAE,UAA8B,EAAE;QACxD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;IACvC,CAAC;IAEO,IAAI,CAAC,KAAa;QACxB,OAAO,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,GAAG,CAAC,KAAa;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,gHAAgH;QAChH,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB,+EAA+E,CAChF,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAyC,CAAC;QAC3E,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,+FAA+F;QAC/F,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAmB,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,OAAuB;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAClE,IAAI,CAAC,EAAE,CAAC,OAAO,CACb,6FAA6F,CAC9F,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,UAAU;QACR,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,kBAAkB,CAAC,SAAiB;QAClC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,gHAAgH;QAChH,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAK3B,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAuC,CAAC;QAClE,OAAO,GAAG,EAAE,UAAU,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,IAAI,SAAS,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,SAAS,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AA5DD,kCA4DC"}
1
+ {"version":3,"file":"search-cache.js","sourceRoot":"","sources":["../../../scripts/lib/search-cache.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export interface SearchResult {
16
16
  snippet?: string;
17
17
  content?: string;
18
18
  }
19
- export declare function extractKeywords(text: string): string[];
19
+ export declare function extractKeywords(text: string, maxKeywords?: number): string[];
20
20
  export declare function search(db: Database, query: string, options: SearchOptions): SearchResult[];
21
21
  export {};
22
22
  //# sourceMappingURL=search-engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-engine.d.ts","sourceRoot":"","sources":["../../../scripts/lib/search-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAOvC,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAeD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMtD;AAyCD,wBAAgB,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY,EAAE,CAsD1F"}
1
+ {"version":3,"file":"search-engine.d.ts","sourceRoot":"","sources":["../../../scripts/lib/search-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,KAAK,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAOvC,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAO5E;AAwDD,wBAAgB,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY,EAAE,CAwD1F"}
@@ -7,24 +7,13 @@ const fuzzy_js_1 = require("./fuzzy.js");
7
7
  const proximity_js_1 = require("./proximity.js");
8
8
  const snippet_js_1 = require("./snippet.js");
9
9
  const constants_js_1 = require("./constants.js");
10
- const STOP_WORDS = new Set([
11
- 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
12
- 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
13
- 'should', 'may', 'might', 'can', 'shall', 'must', 'need', 'not',
14
- 'and', 'or', 'but', 'if', 'then', 'else', 'when', 'where', 'how',
15
- 'what', 'which', 'who', 'whom', 'this', 'that', 'these', 'those',
16
- 'i', 'me', 'my', 'we', 'our', 'you', 'your', 'he', 'she', 'it',
17
- 'they', 'them', 'their', 'its', 'of', 'in', 'to', 'for', 'with',
18
- 'on', 'at', 'by', 'from', 'as', 'into', 'about', 'between',
19
- 'ne', 'bir', 'bu', 'da', 'de', 'mi', 'mu', 'mı',
20
- 'var', 'yok', 'ile', 'için', 'gibi', 'daha', 'çok', 'en',
21
- ]);
22
- function extractKeywords(text) {
23
- return text
24
- .replace(/[^\w\sçğıöşüÇĞİÖŞÜ-]/g, ' ')
10
+ function extractKeywords(text, maxKeywords) {
11
+ const keywords = text
12
+ .replace(constants_js_1.TURKISH_WORD_RE, ' ')
25
13
  .split(/\s+/)
26
- .filter(w => w.length >= 2 && !STOP_WORDS.has(w.toLowerCase()))
14
+ .filter(w => w.length >= constants_js_1.STOP_WORDS_MIN_LENGTH && !constants_js_1.STOP_WORDS.has(w.toLowerCase()))
27
15
  .map(w => w.toLowerCase());
16
+ return maxKeywords ? keywords.slice(0, maxKeywords) : keywords;
28
17
  }
29
18
  function expandWithSynonyms(keywords, synonyms) {
30
19
  if (!synonyms)
@@ -47,21 +36,30 @@ const CATEGORY_WEIGHTS = {
47
36
  sessions: 0.85,
48
37
  cc_memory: 1.3,
49
38
  };
50
- const DEBUG_KEYWORDS = ['debug', 'fix', 'hata', 'bug', 'error', 'crash', 'fail'];
51
- const RESEARCH_KEYWORDS = ['araştır', 'bul', 'search', 'nedir', 'nasıl', 'compare'];
39
+ const INTENT_CONFIG = {
40
+ debug: {
41
+ keywords: ['debug', 'fix', 'hata', 'bug', 'error', 'crash', 'fail'],
42
+ boosts: { episodes: 1.3, raw: 1.1 },
43
+ },
44
+ research: {
45
+ keywords: ['araştır', 'bul', 'search', 'nedir', 'nasıl', 'compare'],
46
+ boosts: { sources: 1.3, analyses: 1.2 },
47
+ },
48
+ implementation: {
49
+ keywords: [],
50
+ boosts: { domains: 1.2, sessions: 1.1 },
51
+ },
52
+ };
53
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Object.keys cast triggers lint; keep in sync with INTENT_CONFIG
54
+ const INTENT_KEYS = Object.keys(INTENT_CONFIG);
52
55
  function detectIntent(query) {
53
56
  const lower = query.toLowerCase();
54
- if (DEBUG_KEYWORDS.some(k => lower.includes(k)))
55
- return 'debug';
56
- if (RESEARCH_KEYWORDS.some(k => lower.includes(k)))
57
- return 'research';
57
+ for (const intent of INTENT_KEYS) {
58
+ if (INTENT_CONFIG[intent].keywords.some(k => lower.includes(k)))
59
+ return intent;
60
+ }
58
61
  return 'implementation';
59
62
  }
60
- const INTENT_BOOSTS = {
61
- debug: { episodes: 1.3, raw: 1.1 },
62
- research: { sources: 1.3, analyses: 1.2 },
63
- implementation: { domains: 1.2, sessions: 1.1 },
64
- };
65
63
  function search(db, query, options) {
66
64
  const maxResults = options.maxResults ?? 3;
67
65
  const keywords = extractKeywords(query);
@@ -71,7 +69,7 @@ function search(db, query, options) {
71
69
  const queryStr = (0, constants_js_1.fixVersionTokens)(expanded.join(' '));
72
70
  const limit = 20;
73
71
  function fusedSearch(q) {
74
- return (0, rrf_js_1.computeRRF)((0, rrf_js_1.searchPorter)(db, q, limit, options.project), (0, rrf_js_1.searchTrigram)(db, q, limit, options.project), { dedupByPath: true });
72
+ return (0, rrf_js_1.computeRRF)((0, rrf_js_1.searchPorter)(db, { query: q, limit, project: options.project }), (0, rrf_js_1.searchTrigram)(db, { query: q, limit, project: options.project }), { dedupByPath: true });
75
73
  }
76
74
  let fused = fusedSearch(queryStr);
77
75
  if (fused.length === 0) {
@@ -81,10 +79,12 @@ function search(db, query, options) {
81
79
  }
82
80
  }
83
81
  const intent = detectIntent(query);
84
- const intentBoosts = INTENT_BOOSTS[intent];
82
+ const intentBoosts = INTENT_CONFIG[intent].boosts;
85
83
  for (const r of fused) {
86
- r.score *= CATEGORY_WEIGHTS[r.category ?? ''] ?? 1.0;
87
- r.score *= intentBoosts[r.category ?? ''] ?? 1.0;
84
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- DB category value matches Category union
85
+ r.score *= CATEGORY_WEIGHTS[r.category] ?? 1.0;
86
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- DB category value matches Category union
87
+ r.score *= intentBoosts[r.category] ?? 1.0;
88
88
  }
89
89
  fused.sort((a, b) => b.score - a.score);
90
90
  const ranked = (0, proximity_js_1.rerankByProximity)(fused.map(r => ({