mindlore 0.6.3 → 0.6.4
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.
- package/dist/scripts/lib/chunker.d.ts.map +1 -1
- package/dist/scripts/lib/chunker.js +3 -0
- package/dist/scripts/lib/chunker.js.map +1 -1
- package/dist/scripts/lib/constants.d.ts +5 -0
- package/dist/scripts/lib/constants.d.ts.map +1 -1
- package/dist/scripts/lib/constants.js +35 -1
- package/dist/scripts/lib/constants.js.map +1 -1
- package/dist/scripts/lib/fuzzy.d.ts.map +1 -1
- package/dist/scripts/lib/fuzzy.js +6 -4
- package/dist/scripts/lib/fuzzy.js.map +1 -1
- package/dist/scripts/lib/proximity.d.ts.map +1 -1
- package/dist/scripts/lib/proximity.js +6 -0
- package/dist/scripts/lib/proximity.js.map +1 -1
- package/dist/scripts/lib/rrf.d.ts +7 -2
- package/dist/scripts/lib/rrf.d.ts.map +1 -1
- package/dist/scripts/lib/rrf.js +14 -10
- package/dist/scripts/lib/rrf.js.map +1 -1
- package/dist/scripts/lib/search-cache.d.ts +14 -0
- package/dist/scripts/lib/search-cache.d.ts.map +1 -1
- package/dist/scripts/lib/search-cache.js +44 -2
- package/dist/scripts/lib/search-cache.js.map +1 -1
- package/dist/scripts/lib/search-engine.d.ts.map +1 -1
- package/dist/scripts/lib/search-engine.js +28 -29
- package/dist/scripts/lib/search-engine.js.map +1 -1
- package/dist/scripts/mindlore-rrf-bench.d.ts +2 -0
- package/dist/scripts/mindlore-rrf-bench.d.ts.map +1 -0
- package/dist/scripts/mindlore-rrf-bench.js +30 -0
- package/dist/scripts/mindlore-rrf-bench.js.map +1 -0
- package/dist/tests/rrf.test.js +42 -3
- package/dist/tests/rrf.test.js.map +1 -1
- package/dist/tests/search-cache.test.js +44 -12
- package/dist/tests/search-cache.test.js.map +1 -1
- package/dist/tests/stop-words.test.d.ts +2 -0
- package/dist/tests/stop-words.test.d.ts.map +1 -0
- package/dist/tests/stop-words.test.js +21 -0
- package/dist/tests/stop-words.test.js.map +1 -0
- package/hooks/lib/mindlore-common.cjs +16 -32
- package/hooks/mindlore-search.cjs +3 -2
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/templates/config.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../../scripts/lib/chunker.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../../scripts/lib/chunker.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,KAAK,EAAE,CA+DrF"}
|
|
@@ -44,9 +44,12 @@ function chunkMarkdown(markdown, options = {}) {
|
|
|
44
44
|
if (headingMatch) {
|
|
45
45
|
flush();
|
|
46
46
|
currentHeading = line;
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- regex match group 1 always present when headingMatch is truthy
|
|
47
48
|
const level = headingMatch[1].length;
|
|
48
49
|
while (headingStack.length > 0) {
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- headingStack.length > 0 guarantees last element exists
|
|
49
51
|
const top = headingStack[headingStack.length - 1];
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- `?? ['']` fallback ensures array[0] is defined
|
|
50
53
|
const topLevel = (top.match(/^#+/) ?? [''])[0].length;
|
|
51
54
|
if (topLevel >= level)
|
|
52
55
|
headingStack.pop();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunker.js","sourceRoot":"","sources":["../../../scripts/lib/chunker.ts"],"names":[],"mappings":";;AAYA,
|
|
1
|
+
{"version":3,"file":"chunker.js","sourceRoot":"","sources":["../../../scripts/lib/chunker.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,9 +9,14 @@ export declare const VEC_TABLE_NAME = "documents_vec";
|
|
|
9
9
|
export declare const SCHEMA_VERSION = 1;
|
|
10
10
|
export declare const EMBEDDING_MODEL_NAME = "Xenova/multilingual-e5-small";
|
|
11
11
|
export declare const EMBEDDING_DIM_CONST = 384;
|
|
12
|
+
export declare const CATEGORIES: readonly ["sources", "analyses", "domains", "episodes", "decisions", "raw", "sessions", "cc_memory", "cc-session", "cc-subagent", "diary", "insights", "connections", "learnings", "memory"];
|
|
13
|
+
export type Category = typeof CATEGORIES[number];
|
|
12
14
|
export declare const SESSION_CATEGORIES: readonly ["cc-subagent", "cc-session"];
|
|
13
15
|
export type SessionCategory = typeof SESSION_CATEGORIES[number];
|
|
14
16
|
export declare function isSessionCategory(category: string): category is SessionCategory;
|
|
17
|
+
export declare const STOP_WORDS_MIN_LENGTH = 2;
|
|
18
|
+
export declare const TURKISH_WORD_RE: RegExp;
|
|
19
|
+
export declare const STOP_WORDS: Set<string>;
|
|
15
20
|
export declare function fixVersionTokens(query: string): string;
|
|
16
21
|
export declare const FTS5_COLUMNS: readonly ["path", "slug", "description", "type", "category", "title", "content", "tags", "quality", "date_captured", "project"];
|
|
17
22
|
export type FtsColumn = typeof FTS5_COLUMNS[number];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../scripts/lib/constants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,mBAAmB,QAAqE,CAAC;AACtG,eAAO,MAAM,OAAO,gBAAgB,CAAC;AAErC,eAAO,MAAM,WAAW,oIAYd,CAAC;AAEX,eAAO,MAAM,UAAU,aAA+C,CAAC;AAEvE,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKxC,CAAC;AAEX,eAAO,MAAM,cAAc,kBAAkB,CAAC;AAC9C,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,oBAAoB,iCAAiC,CAAC;AACnE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,eAAO,MAAM,kBAAkB,wCAAyC,CAAC;AACzE,MAAM,MAAM,eAAe,GAAG,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAEhE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,eAAe,CAE/E;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../scripts/lib/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ 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.CONSOLIDATION_THRESHOLD = exports.STALE_THRESHOLD = exports.DECAY_HALF_LIFE_DAYS = exports.DAEMON_TIMEOUT_MS = exports.DAEMON_PID_FILE = exports.DAEMON_PORT_FILE = exports.DAEMON_HOST = exports.DEFAULT_TOKEN_BUDGET = exports.CC_MEMORY_BOOST = exports.CC_SUBAGENT_CATEGORY = exports.CC_SESSION_CATEGORY = exports.CC_MEMORY_CATEGORY = exports.CC_MEMORY_DIR = exports.CC_MEMORY_PATH_MARKER = exports.TYPE_TO_DIR = exports.QUALITY_HEURISTICS = exports.QUALITY_VALUES = exports.FRONTMATTER_TYPES = exports.FTS5_COLUMNS = exports.SESSION_CATEGORIES = exports.EMBEDDING_DIM_CONST = exports.EMBEDDING_MODEL_NAME = exports.SCHEMA_VERSION = exports.VEC_TABLE_NAME = exports.DEFAULT_MODELS = exports.CONFIG_FILE = exports.SKIP_FILES = exports.DIRECTORIES = exports.DB_NAME = exports.GLOBAL_MINDLORE_DIR = exports.MINDLORE_DIR = void 0;
|
|
6
|
+
exports.CONSOLIDATION_THRESHOLD = exports.STALE_THRESHOLD = exports.DECAY_HALF_LIFE_DAYS = exports.DAEMON_TIMEOUT_MS = exports.DAEMON_PID_FILE = exports.DAEMON_PORT_FILE = exports.DAEMON_HOST = exports.DEFAULT_TOKEN_BUDGET = exports.CC_MEMORY_BOOST = exports.CC_SUBAGENT_CATEGORY = exports.CC_SESSION_CATEGORY = exports.CC_MEMORY_CATEGORY = exports.CC_MEMORY_DIR = exports.CC_MEMORY_PATH_MARKER = exports.TYPE_TO_DIR = exports.QUALITY_HEURISTICS = exports.QUALITY_VALUES = exports.FRONTMATTER_TYPES = exports.FTS5_COLUMNS = exports.STOP_WORDS = exports.TURKISH_WORD_RE = exports.STOP_WORDS_MIN_LENGTH = exports.SESSION_CATEGORIES = exports.CATEGORIES = exports.EMBEDDING_DIM_CONST = exports.EMBEDDING_MODEL_NAME = exports.SCHEMA_VERSION = exports.VEC_TABLE_NAME = exports.DEFAULT_MODELS = exports.CONFIG_FILE = exports.SKIP_FILES = exports.DIRECTORIES = exports.DB_NAME = exports.GLOBAL_MINDLORE_DIR = exports.MINDLORE_DIR = void 0;
|
|
7
7
|
exports.isSessionCategory = isSessionCategory;
|
|
8
8
|
exports.fixVersionTokens = fixVersionTokens;
|
|
9
9
|
exports.homedir = homedir;
|
|
@@ -46,10 +46,44 @@ exports.VEC_TABLE_NAME = 'documents_vec';
|
|
|
46
46
|
exports.SCHEMA_VERSION = 1;
|
|
47
47
|
exports.EMBEDDING_MODEL_NAME = 'Xenova/multilingual-e5-small';
|
|
48
48
|
exports.EMBEDDING_DIM_CONST = 384;
|
|
49
|
+
exports.CATEGORIES = ['sources', 'analyses', 'domains', 'episodes', 'decisions', 'raw', 'sessions', 'cc_memory', 'cc-session', 'cc-subagent', 'diary', 'insights', 'connections', 'learnings', 'memory'];
|
|
49
50
|
exports.SESSION_CATEGORIES = ['cc-subagent', 'cc-session'];
|
|
50
51
|
function isSessionCategory(category) {
|
|
51
52
|
return exports.SESSION_CATEGORIES.includes(category);
|
|
52
53
|
}
|
|
54
|
+
exports.STOP_WORDS_MIN_LENGTH = 2;
|
|
55
|
+
exports.TURKISH_WORD_RE = /[^\w\sçğıöşüÇĞİÖŞÜ-]/g;
|
|
56
|
+
exports.STOP_WORDS = new Set([
|
|
57
|
+
// English
|
|
58
|
+
'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
|
|
59
|
+
'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
|
|
60
|
+
'should', 'may', 'might', 'can', 'shall', 'to', 'of', 'in', 'for',
|
|
61
|
+
'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through', 'during',
|
|
62
|
+
'it', 'its', 'this', 'that', 'these', 'those', 'what', 'which', 'who',
|
|
63
|
+
'whom', 'how', 'when', 'where', 'why', 'not', 'no', 'nor', 'so',
|
|
64
|
+
'if', 'or', 'but', 'all', 'each', 'every', 'both', 'few', 'more',
|
|
65
|
+
'most', 'other', 'some', 'such', 'only', 'own', 'same', 'than',
|
|
66
|
+
'and', 'about', 'between', 'after', 'before', 'above', 'below',
|
|
67
|
+
'up', 'down', 'out', 'very', 'just', 'also', 'now', 'then',
|
|
68
|
+
'here', 'there', 'too', 'yet', 'my', 'your', 'his', 'her', 'our',
|
|
69
|
+
'their', 'me', 'him', 'us', 'them', 'i', 'you', 'he', 'she', 'we', 'they',
|
|
70
|
+
// Turkish
|
|
71
|
+
'bir', 'bu', 'su', 'ne', 'nasıl', 'neden', 'var', 'yok', 'mi', 'mu', 'mı',
|
|
72
|
+
'ile', 'için', 'de', 'da', 've', 'veya', 'ama', 'ise', 'hem',
|
|
73
|
+
'bakalım', 'gel', 'git', 'yap', 'et', 'al', 'ver',
|
|
74
|
+
'evet', 'hayır', 'tamam', 'ok', 'oldu', 'olur', 'dur',
|
|
75
|
+
'şimdi', 'sonra', 'önce', 'hemen', 'biraz',
|
|
76
|
+
'lan', 'ya', 'ki', 'abi', 'hadi', 'hey', 'selam',
|
|
77
|
+
'olarak', 'olan', 'gibi', 'kadar', 'daha', 'çok', 'en',
|
|
78
|
+
'bunu', 'buna', 'içinde', 'üzerinde', 'arasında',
|
|
79
|
+
'sonucu', 'tarafından', 'zaten', 'gayet',
|
|
80
|
+
'acaba', 'nedir', 'midir', 'mudur',
|
|
81
|
+
// Generic technical
|
|
82
|
+
'hook', 'file', 'dosya', 'kullan', 'ekle', 'yaz', 'oku', 'çalıştır',
|
|
83
|
+
'kontrol', 'test', 'check', 'run', 'add', 'update', 'config',
|
|
84
|
+
'setup', 'install', 'start', 'stop', 'create', 'delete', 'remove', 'set',
|
|
85
|
+
'get', 'list', 'show', 'view', 'open', 'close', 'save', 'load',
|
|
86
|
+
]);
|
|
53
87
|
const VERSION_RE = /v(\d+)\.(\d+)(?:\.(\d+))?/g;
|
|
54
88
|
function fixVersionTokens(query) {
|
|
55
89
|
return query.replace(VERSION_RE, (_m, a, b, c) => c ? `"v${a} ${b} ${c}"` : `"v${a} ${b}"`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../scripts/lib/constants.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../scripts/lib/constants.ts"],"names":[],"mappings":";;;;;;AA4CA,8CAEC;AAsCD,4CAEC;AAwDD,0BAEC;AAMD,oDAEC;AAMD,8BAIC;AAMD,wCAEC;AAKD,kBAEC;AAkBD,sCAEC;AAOD,8CAUC;AAOD,sCAWC;AAMD,oDAOC;AArPD,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AAEX,QAAA,YAAY,GAAG,WAAW,CAAC;AAC3B,QAAA,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,oBAAY,CAAC,CAAC;AACzF,QAAA,OAAO,GAAG,aAAa,CAAC;AAExB,QAAA,WAAW,GAAG;IACzB,KAAK;IACL,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,aAAa;IACb,WAAW;IACX,OAAO;IACP,WAAW;IACX,MAAM;IACN,QAAQ;CACA,CAAC;AAEE,QAAA,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE1D,QAAA,WAAW,GAAG,aAAa,CAAC;AAE5B,QAAA,cAAc,GAA2B;IACpD,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,OAAO;CACR,CAAC;AAEE,QAAA,cAAc,GAAG,eAAe,CAAC;AACjC,QAAA,cAAc,GAAG,CAAC,CAAC;AACnB,QAAA,oBAAoB,GAAG,8BAA8B,CAAC;AACtD,QAAA,mBAAmB,GAAG,GAAG,CAAC;AAE1B,QAAA,UAAU,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;AAG1M,QAAA,kBAAkB,GAAG,CAAC,aAAa,EAAE,YAAY,CAAU,CAAC;AAGzE,SAAgB,iBAAiB,CAAC,QAAgB;IAChD,OAAQ,0BAAwC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtE,CAAC;AAEY,QAAA,qBAAqB,GAAG,CAAC,CAAC;AAC1B,QAAA,eAAe,GAAG,uBAAuB,CAAC;AAE1C,QAAA,UAAU,GAAG,IAAI,GAAG,CAAC;IAChC,UAAU;IACV,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO;IACnE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IACnE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK;IACjE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ;IACnE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;IACrE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IAC/D,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAChE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;IAC9D,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO;IAC9D,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAC1D,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IAChE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM;IACzE,UAAU;IACV,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IACzE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IAC5D,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK;IACjD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;IACrD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAC1C,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IAChD,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI;IACtD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU;IAChD,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO;IACxC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;IAClC,oBAAoB;IACpB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU;IACnE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ;IAC5D,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK;IACxE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;CAC/D,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,4BAA4B,CAAC;AAChD,SAAgB,gBAAgB,CAAC,KAAa;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9F,CAAC;AAEY,QAAA,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,CAAU,CAAC;AAG/I,QAAA,iBAAiB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC;AAGnL,QAAA,cAAc,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAC;AAGjE;;;GAGG;AACU,QAAA,kBAAkB,GAAiC;IAC9D,aAAa,EAAE,MAAM;IACrB,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,UAAU,EAAE,QAAQ;IACpB,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,KAAK;IACd,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,KAAK;CACrB,CAAC;AAEW,QAAA,WAAW,GAA2B;IACjD,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,UAAU;IACnB,UAAU,EAAE,aAAa;IACzB,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,WAAW;IACrB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,QAAQ;IACnB,IAAI,EAAE,QAAQ;CACf,CAAC;AAEF;;;GAGG;AACU,QAAA,qBAAqB,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACzD,QAAA,aAAa,GAAG,QAAQ,CAAC;AACzB,QAAA,kBAAkB,GAAG,WAAW,CAAC;AACjC,QAAA,mBAAmB,GAAG,YAAY,CAAC;AACnC,QAAA,oBAAoB,GAAG,aAAa,CAAC;AACrC,QAAA,eAAe,GAAG,GAAG,CAAC;AAEnC,SAAgB,OAAO;IACrB,OAAO,YAAE,CAAC,OAAO,EAAE,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB;IAClC,OAAO,2BAAmB,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAgB,SAAS;IACvB,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,2BAAmB,EAAE,eAAO,CAAC,CAAC;IACvD,IAAI,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc;IAC5B,OAAO,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,GAAG,CAAC,GAAW;IAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;AAC1B,CAAC;AAeD;;GAEG;AACH,SAAgB,aAAa,CAAC,QAAgB;IAC5C,OAAO,CAAC,kBAAU,CAAC,GAAG,CAAC,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;QACrE,IAAI,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACzC,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;AACpF,CAAC;AAED;;;GAGG;AACH,IAAI,gBAAgB,GAAmB,IAAI,CAAC;AAC5C,SAAgB,aAAa;IAC3B,IAAI,gBAAgB,KAAK,IAAI;QAAE,OAAO,gBAAgB,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,EAAE,GAAmC,OAAO,CAAC,eAAe,CAAC,CAAC;QACpE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QACxB,QAAQ,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,gBAAgB,GAAG,IAAI,CAAC;IAC1B,CAAC;IAAC,OAAO,IAAI,EAAE,CAAC;QACd,gBAAgB,GAAG,KAAK,CAAC;IAC3B,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB;IAClC,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,IAAI,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAEY,QAAA,oBAAoB,GAAG;IAClC,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,GAAG;CACN,CAAC;AAEX,iEAAiE;AACpD,QAAA,WAAW,GAAG,WAAW,CAAC;AAC1B,QAAA,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,2BAAmB,EAAE,sBAAsB,CAAC,CAAC;AAC1E,QAAA,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,2BAAmB,EAAE,qBAAqB,CAAC,CAAC;AACxE,QAAA,iBAAiB,GAAG,GAAG,CAAC;AAExB,QAAA,oBAAoB,GAAG,EAAE,CAAC;AAC1B,QAAA,eAAe,GAAG,GAAG,CAAC;AACtB,QAAA,uBAAuB,GAAG,EAAE,CAAC"}
|
|
@@ -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;
|
|
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
|
-
|
|
20
|
-
|
|
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(
|
|
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":";;
|
|
1
|
+
{"version":3,"file":"fuzzy.js","sourceRoot":"","sources":["../../../scripts/lib/fuzzy.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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":";;
|
|
1
|
+
{"version":3,"file":"proximity.js","sourceRoot":"","sources":["../../../scripts/lib/proximity.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
21
|
-
export declare function searchTrigram(db: Database,
|
|
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,
|
|
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;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,OAAO,EAAE,kBAAkB,GAC1B,YAAY,EAAE,CAQhB;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,kBAAkB,GAC1B,YAAY,EAAE,CAgBhB"}
|
package/dist/scripts/lib/rrf.js
CHANGED
|
@@ -6,7 +6,7 @@ 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(/["*(){}[\]
|
|
9
|
+
return query.replace(/["*(){}[\]^~:-]/g, ' ').replace(/\s+/g, ' ').trim();
|
|
10
10
|
}
|
|
11
11
|
function computeRRF(porterResults, trigramResults, options = {}) {
|
|
12
12
|
const k = options.k ?? 60;
|
|
@@ -35,28 +35,32 @@ function computeRRF(porterResults, trigramResults, options = {}) {
|
|
|
35
35
|
}
|
|
36
36
|
return results;
|
|
37
37
|
}
|
|
38
|
-
function searchPorter(db,
|
|
39
|
-
const sanitized = sanitizeFtsQuery(query);
|
|
38
|
+
function searchPorter(db, options) {
|
|
39
|
+
const sanitized = sanitizeFtsQuery(options.query);
|
|
40
40
|
if (!sanitized)
|
|
41
41
|
return [];
|
|
42
|
-
const sql = project
|
|
42
|
+
const sql = options.project
|
|
43
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
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];
|
|
45
|
+
const params = options.project ? [sanitized, options.project, options.limit] : [sanitized, options.limit];
|
|
46
46
|
return (0, db_helpers_js_1.dbAll)(db, sql, ...params).map((r, i) => ({ ...r, rank: i + 1, score: 0 }));
|
|
47
47
|
}
|
|
48
|
-
function searchTrigram(db,
|
|
49
|
-
const sanitized = sanitizeFtsQuery(query);
|
|
48
|
+
function searchTrigram(db, options) {
|
|
49
|
+
const sanitized = sanitizeFtsQuery(options.query);
|
|
50
50
|
if (!sanitized)
|
|
51
51
|
return [];
|
|
52
52
|
try {
|
|
53
|
-
const sql = project
|
|
53
|
+
const sql = options.project
|
|
54
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
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];
|
|
56
|
+
const params = options.project ? [sanitized, options.project, options.limit] : [sanitized, options.limit];
|
|
57
57
|
return (0, db_helpers_js_1.dbAll)(db, sql, ...params).map((r, i) => ({ ...r, rank: i + 1, score: 0 }));
|
|
58
58
|
}
|
|
59
|
-
catch (
|
|
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":";;AAIA,4CAEC;
|
|
1
|
+
{"version":3,"file":"rrf.js","sourceRoot":"","sources":["../../../scripts/lib/rrf.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,26 @@ 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;
|
|
10
13
|
constructor(db: Database, options?: SearchCacheOptions);
|
|
11
14
|
private hash;
|
|
15
|
+
private ensureStatsTable;
|
|
16
|
+
getStats(): {
|
|
17
|
+
hits: number;
|
|
18
|
+
misses: number;
|
|
19
|
+
hitRate: number;
|
|
20
|
+
};
|
|
21
|
+
resetStats(): void;
|
|
12
22
|
get(query: string): SearchResult[] | null;
|
|
13
23
|
set(query: string, results: SearchResult[]): void;
|
|
14
24
|
invalidate(): void;
|
|
15
25
|
cleanup(): void;
|
|
26
|
+
}
|
|
27
|
+
export declare class SearchThrottle {
|
|
28
|
+
private db;
|
|
29
|
+
constructor(db: Database);
|
|
16
30
|
incrementCallCount(sessionId: string): number;
|
|
17
31
|
getMaxResults(callCount: number): number;
|
|
18
32
|
}
|
|
@@ -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;
|
|
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;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,QAAQ,CAAwC;gBAE5C,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;CAIhB;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,14 @@ 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
8
|
class SearchCache {
|
|
9
9
|
db;
|
|
10
10
|
ttlMs;
|
|
11
|
+
statsReady = false;
|
|
12
|
+
stmtHit = null;
|
|
13
|
+
stmtMiss = null;
|
|
11
14
|
constructor(db, options = {}) {
|
|
12
15
|
this.db = db;
|
|
13
16
|
this.ttlMs = options.ttlMs ?? 300000;
|
|
@@ -15,14 +18,46 @@ class SearchCache {
|
|
|
15
18
|
hash(query) {
|
|
16
19
|
return crypto_1.default.createHash('sha256').update(query).digest('hex').slice(0, 16);
|
|
17
20
|
}
|
|
21
|
+
ensureStatsTable() {
|
|
22
|
+
if (this.statsReady)
|
|
23
|
+
return;
|
|
24
|
+
this.db.exec(`
|
|
25
|
+
CREATE TABLE IF NOT EXISTS search_cache_stats (
|
|
26
|
+
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
27
|
+
hits INTEGER NOT NULL DEFAULT 0,
|
|
28
|
+
misses INTEGER NOT NULL DEFAULT 0
|
|
29
|
+
)
|
|
30
|
+
`);
|
|
31
|
+
this.db.prepare('INSERT OR IGNORE INTO search_cache_stats (id, hits, misses) VALUES (1, 0, 0)').run();
|
|
32
|
+
this.stmtHit = this.db.prepare('UPDATE search_cache_stats SET hits = hits + 1 WHERE id = 1');
|
|
33
|
+
this.stmtMiss = this.db.prepare('UPDATE search_cache_stats SET misses = misses + 1 WHERE id = 1');
|
|
34
|
+
this.statsReady = true;
|
|
35
|
+
}
|
|
36
|
+
getStats() {
|
|
37
|
+
this.ensureStatsTable();
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- single-row table
|
|
39
|
+
const row = this.db.prepare('SELECT hits, misses FROM search_cache_stats WHERE id = 1').get();
|
|
40
|
+
const total = row.hits + row.misses;
|
|
41
|
+
return { hits: row.hits, misses: row.misses, hitRate: total > 0 ? row.hits / total : 0 };
|
|
42
|
+
}
|
|
43
|
+
resetStats() {
|
|
44
|
+
this.ensureStatsTable();
|
|
45
|
+
this.db.prepare('UPDATE search_cache_stats SET hits = 0, misses = 0 WHERE id = 1').run();
|
|
46
|
+
}
|
|
18
47
|
get(query) {
|
|
19
48
|
const h = this.hash(query);
|
|
20
49
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- better-sqlite3 .get() returns unknown
|
|
21
50
|
const row = this.db.prepare('SELECT results_json FROM search_cache WHERE query_hash = ? AND expires_at > ?').get(h, new Date().toISOString());
|
|
22
51
|
if (!row) {
|
|
52
|
+
this.ensureStatsTable();
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- ensureStatsTable sets stmtMiss
|
|
54
|
+
this.stmtMiss.run();
|
|
23
55
|
this.cleanup();
|
|
24
56
|
return null;
|
|
25
57
|
}
|
|
58
|
+
this.ensureStatsTable();
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- ensureStatsTable sets stmtHit
|
|
60
|
+
this.stmtHit.run();
|
|
26
61
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- JSON stored by set()
|
|
27
62
|
return JSON.parse(row.results_json);
|
|
28
63
|
}
|
|
@@ -37,6 +72,13 @@ class SearchCache {
|
|
|
37
72
|
cleanup() {
|
|
38
73
|
this.db.prepare('DELETE FROM search_cache WHERE expires_at < ?').run(new Date().toISOString());
|
|
39
74
|
}
|
|
75
|
+
}
|
|
76
|
+
exports.SearchCache = SearchCache;
|
|
77
|
+
class SearchThrottle {
|
|
78
|
+
db;
|
|
79
|
+
constructor(db) {
|
|
80
|
+
this.db = db;
|
|
81
|
+
}
|
|
40
82
|
incrementCallCount(sessionId) {
|
|
41
83
|
const now = new Date().toISOString();
|
|
42
84
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- better-sqlite3 .get() returns unknown
|
|
@@ -56,5 +98,5 @@ class SearchCache {
|
|
|
56
98
|
return 0;
|
|
57
99
|
}
|
|
58
100
|
}
|
|
59
|
-
exports.
|
|
101
|
+
exports.SearchThrottle = SearchThrottle;
|
|
60
102
|
//# 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;
|
|
1
|
+
{"version":3,"file":"search-cache.js","sourceRoot":"","sources":["../../../scripts/lib/search-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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;AAwDD,wBAAgB,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,YAAY,EAAE,CAwD1F"}
|
|
@@ -7,23 +7,11 @@ 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
10
|
function extractKeywords(text) {
|
|
23
11
|
return text
|
|
24
|
-
.replace(
|
|
12
|
+
.replace(constants_js_1.TURKISH_WORD_RE, ' ')
|
|
25
13
|
.split(/\s+/)
|
|
26
|
-
.filter(w => w.length >=
|
|
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());
|
|
28
16
|
}
|
|
29
17
|
function expandWithSynonyms(keywords, synonyms) {
|
|
@@ -47,21 +35,30 @@ const CATEGORY_WEIGHTS = {
|
|
|
47
35
|
sessions: 0.85,
|
|
48
36
|
cc_memory: 1.3,
|
|
49
37
|
};
|
|
50
|
-
const
|
|
51
|
-
|
|
38
|
+
const INTENT_CONFIG = {
|
|
39
|
+
debug: {
|
|
40
|
+
keywords: ['debug', 'fix', 'hata', 'bug', 'error', 'crash', 'fail'],
|
|
41
|
+
boosts: { episodes: 1.3, raw: 1.1 },
|
|
42
|
+
},
|
|
43
|
+
research: {
|
|
44
|
+
keywords: ['araştır', 'bul', 'search', 'nedir', 'nasıl', 'compare'],
|
|
45
|
+
boosts: { sources: 1.3, analyses: 1.2 },
|
|
46
|
+
},
|
|
47
|
+
implementation: {
|
|
48
|
+
keywords: [],
|
|
49
|
+
boosts: { domains: 1.2, sessions: 1.1 },
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Object.keys cast triggers lint; keep in sync with INTENT_CONFIG
|
|
53
|
+
const INTENT_KEYS = Object.keys(INTENT_CONFIG);
|
|
52
54
|
function detectIntent(query) {
|
|
53
55
|
const lower = query.toLowerCase();
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
for (const intent of INTENT_KEYS) {
|
|
57
|
+
if (INTENT_CONFIG[intent].keywords.some(k => lower.includes(k)))
|
|
58
|
+
return intent;
|
|
59
|
+
}
|
|
58
60
|
return 'implementation';
|
|
59
61
|
}
|
|
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
62
|
function search(db, query, options) {
|
|
66
63
|
const maxResults = options.maxResults ?? 3;
|
|
67
64
|
const keywords = extractKeywords(query);
|
|
@@ -71,7 +68,7 @@ function search(db, query, options) {
|
|
|
71
68
|
const queryStr = (0, constants_js_1.fixVersionTokens)(expanded.join(' '));
|
|
72
69
|
const limit = 20;
|
|
73
70
|
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 });
|
|
71
|
+
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
72
|
}
|
|
76
73
|
let fused = fusedSearch(queryStr);
|
|
77
74
|
if (fused.length === 0) {
|
|
@@ -81,10 +78,12 @@ function search(db, query, options) {
|
|
|
81
78
|
}
|
|
82
79
|
}
|
|
83
80
|
const intent = detectIntent(query);
|
|
84
|
-
const intentBoosts =
|
|
81
|
+
const intentBoosts = INTENT_CONFIG[intent].boosts;
|
|
85
82
|
for (const r of fused) {
|
|
86
|
-
|
|
87
|
-
r.score *=
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- DB category value matches Category union
|
|
84
|
+
r.score *= CATEGORY_WEIGHTS[r.category] ?? 1.0;
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- DB category value matches Category union
|
|
86
|
+
r.score *= intentBoosts[r.category] ?? 1.0;
|
|
88
87
|
}
|
|
89
88
|
fused.sort((a, b) => b.score - a.score);
|
|
90
89
|
const ranked = (0, proximity_js_1.rerankByProximity)(fused.map(r => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-engine.js","sourceRoot":"","sources":["../../../scripts/lib/search-engine.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"search-engine.js","sourceRoot":"","sources":["../../../scripts/lib/search-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mindlore-rrf-bench.d.ts","sourceRoot":"","sources":["../../scripts/mindlore-rrf-bench.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const rrf_js_1 = require("./lib/rrf.js");
|
|
4
|
+
function generateResults(n) {
|
|
5
|
+
return Array.from({ length: n }, (_, i) => ({
|
|
6
|
+
slug: `slug-${i}`,
|
|
7
|
+
rank: i + 1,
|
|
8
|
+
path: `/path/${i}.md`,
|
|
9
|
+
score: 0,
|
|
10
|
+
description: `Description ${i}`,
|
|
11
|
+
title: `Title ${i}`,
|
|
12
|
+
category: 'sources',
|
|
13
|
+
tags: 'tag1,tag2',
|
|
14
|
+
content: 'x'.repeat(200),
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
const sizes = [20, 50, 100, 500];
|
|
18
|
+
for (const n of sizes) {
|
|
19
|
+
const porter = generateResults(n);
|
|
20
|
+
const trigram = generateResults(n);
|
|
21
|
+
const iterations = 1000;
|
|
22
|
+
const start = performance.now();
|
|
23
|
+
for (let i = 0; i < iterations; i++) {
|
|
24
|
+
(0, rrf_js_1.computeRRF)(porter, trigram, { dedupByPath: true });
|
|
25
|
+
}
|
|
26
|
+
const elapsed = performance.now() - start;
|
|
27
|
+
const perOp = elapsed / iterations;
|
|
28
|
+
console.log(`N=${n}: ${perOp.toFixed(3)}ms/op (${iterations} iterations, total ${elapsed.toFixed(0)}ms)`);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=mindlore-rrf-bench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mindlore-rrf-bench.js","sourceRoot":"","sources":["../../scripts/mindlore-rrf-bench.ts"],"names":[],"mappings":";;AAAA,yCAA6D;AAE7D,SAAS,eAAe,CAAC,CAAS;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,EAAE,QAAQ,CAAC,EAAE;QACjB,IAAI,EAAE,CAAC,GAAG,CAAC;QACX,IAAI,EAAE,SAAS,CAAC,KAAK;QACrB,KAAK,EAAE,CAAC;QACR,WAAW,EAAE,eAAe,CAAC,EAAE;QAC/B,KAAK,EAAE,SAAS,CAAC,EAAE;QACnB,QAAQ,EAAE,SAAS;QACnB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;KACzB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACjC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;IACtB,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC;IAExB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAA,mBAAU,EAAC,MAAM,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IAC1C,MAAM,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,UAAU,sBAAsB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC5G,CAAC"}
|
package/dist/tests/rrf.test.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const path_1 = __importDefault(require("path"));
|
|
7
7
|
const os_1 = __importDefault(require("os"));
|
|
8
8
|
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
9
10
|
const db_js_1 = require("./helpers/db.js");
|
|
10
11
|
const rrf_js_1 = require("../scripts/lib/rrf.js");
|
|
11
12
|
function makeTmpDir() {
|
|
@@ -18,6 +19,20 @@ function cleanup(dir, db) {
|
|
|
18
19
|
catch { }
|
|
19
20
|
fs_1.default.rmSync(dir, { recursive: true, force: true });
|
|
20
21
|
}
|
|
22
|
+
describe('sanitizeFtsQuery', () => {
|
|
23
|
+
it('strips hyphens to prevent FTS5 column-prefix parse', () => {
|
|
24
|
+
expect((0, rrf_js_1.sanitizeFtsQuery)('project-state-engine')).toBe('project state engine');
|
|
25
|
+
});
|
|
26
|
+
it('strips all FTS5 operators', () => {
|
|
27
|
+
expect((0, rrf_js_1.sanitizeFtsQuery)('"hello" AND world*')).toBe('hello AND world');
|
|
28
|
+
});
|
|
29
|
+
it('returns empty for operator-only input', () => {
|
|
30
|
+
expect((0, rrf_js_1.sanitizeFtsQuery)('---')).toBe('');
|
|
31
|
+
});
|
|
32
|
+
it('preserves Turkish characters', () => {
|
|
33
|
+
expect((0, rrf_js_1.sanitizeFtsQuery)('çalışma-planı')).toBe('çalışma planı');
|
|
34
|
+
});
|
|
35
|
+
});
|
|
21
36
|
describe('computeRRF', () => {
|
|
22
37
|
test('merges porter and trigram results', () => {
|
|
23
38
|
const porter = [
|
|
@@ -66,7 +81,7 @@ describe('searchPorter + searchTrigram', () => {
|
|
|
66
81
|
content: 'TypeScript provides hooks for React applications.',
|
|
67
82
|
tags: 'typescript,react',
|
|
68
83
|
});
|
|
69
|
-
const results = (0, rrf_js_1.searchPorter)(db, 'TypeScript hooks', 5);
|
|
84
|
+
const results = (0, rrf_js_1.searchPorter)(db, { query: 'TypeScript hooks', limit: 5 });
|
|
70
85
|
expect(results.length).toBeGreaterThan(0);
|
|
71
86
|
expect(results[0].rank).toBe(1);
|
|
72
87
|
expect(results[0].score).toBe(0);
|
|
@@ -85,15 +100,39 @@ describe('searchPorter + searchTrigram', () => {
|
|
|
85
100
|
content: 'TypeScript provides hooks for React applications.',
|
|
86
101
|
tags: 'typescript,react',
|
|
87
102
|
});
|
|
88
|
-
const results = (0, rrf_js_1.searchTrigram)(db, 'TypeScript', 5);
|
|
103
|
+
const results = (0, rrf_js_1.searchTrigram)(db, { query: 'TypeScript', limit: 5 });
|
|
89
104
|
expect(results.length).toBeGreaterThan(0);
|
|
90
105
|
cleanup(dir, db);
|
|
91
106
|
});
|
|
92
107
|
test('searchPorter returns empty for no match', () => {
|
|
93
108
|
const dir = makeTmpDir();
|
|
94
109
|
const db = (0, db_js_1.createTestDbWithMigrations)(path_1.default.join(dir, 'mindlore.db'));
|
|
95
|
-
const results = (0, rrf_js_1.searchPorter)(db, 'nonexistentxyz', 5);
|
|
110
|
+
const results = (0, rrf_js_1.searchPorter)(db, { query: 'nonexistentxyz', limit: 5 });
|
|
111
|
+
expect(results).toEqual([]);
|
|
112
|
+
cleanup(dir, db);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('searchTrigram error handling', () => {
|
|
116
|
+
test('no warn on "no such table" error', () => {
|
|
117
|
+
const dir = makeTmpDir();
|
|
118
|
+
const db = new better_sqlite3_1.default(path_1.default.join(dir, 'mindlore.db'));
|
|
119
|
+
const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => { });
|
|
120
|
+
const results = (0, rrf_js_1.searchTrigram)(db, { query: 'anything', limit: 5 });
|
|
121
|
+
expect(results).toEqual([]);
|
|
122
|
+
expect(warnSpy).not.toHaveBeenCalled();
|
|
123
|
+
warnSpy.mockRestore();
|
|
124
|
+
cleanup(dir, db);
|
|
125
|
+
});
|
|
126
|
+
test('warns on unexpected DB error', () => {
|
|
127
|
+
const dir = makeTmpDir();
|
|
128
|
+
const db = new better_sqlite3_1.default(path_1.default.join(dir, 'mindlore.db'));
|
|
129
|
+
db.exec('CREATE VIRTUAL TABLE mindlore_fts_trigram USING fts5(content)');
|
|
130
|
+
const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => { });
|
|
131
|
+
// Query with a column that doesn't exist triggers a real error
|
|
132
|
+
const results = (0, rrf_js_1.searchTrigram)(db, { query: 'test', limit: 5 });
|
|
133
|
+
// No crash — returns []
|
|
96
134
|
expect(results).toEqual([]);
|
|
135
|
+
warnSpy.mockRestore();
|
|
97
136
|
cleanup(dir, db);
|
|
98
137
|
});
|
|
99
138
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rrf.test.js","sourceRoot":"","sources":["../../tests/rrf.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,4CAAoB;AACpB,4CAAoB;
|
|
1
|
+
{"version":3,"file":"rrf.test.js","sourceRoot":"","sources":["../../tests/rrf.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,38 @@ describe('TTL Cache', () => {
|
|
|
58
58
|
expect(count).toBe(0);
|
|
59
59
|
});
|
|
60
60
|
});
|
|
61
|
+
describe('SearchCache hit rate', () => {
|
|
62
|
+
let db;
|
|
63
|
+
let tmpDir;
|
|
64
|
+
beforeEach(() => {
|
|
65
|
+
tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'mindlore-stats-'));
|
|
66
|
+
db = new better_sqlite3_1.default(path_1.default.join(tmpDir, 'test.db'));
|
|
67
|
+
db.pragma('journal_mode = WAL');
|
|
68
|
+
setupCacheTables(db);
|
|
69
|
+
});
|
|
70
|
+
afterEach(() => {
|
|
71
|
+
db.close();
|
|
72
|
+
fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
|
|
73
|
+
});
|
|
74
|
+
it('tracks hits and misses', () => {
|
|
75
|
+
const cache = new search_cache_js_1.SearchCache(db, { ttlMs: 300000 });
|
|
76
|
+
const mockResults = [{ slug: 'test', path: '/test', title: 'Test', description: '', category: 'sources', tags: '', score: 1.0 }];
|
|
77
|
+
cache.get('miss-query'); // miss
|
|
78
|
+
cache.set('hit-query', mockResults);
|
|
79
|
+
cache.get('hit-query'); // hit
|
|
80
|
+
cache.get('another-miss'); // miss
|
|
81
|
+
const stats = cache.getStats();
|
|
82
|
+
expect(stats.hits).toBe(1);
|
|
83
|
+
expect(stats.misses).toBe(2);
|
|
84
|
+
expect(stats.hitRate).toBeCloseTo(1 / 3);
|
|
85
|
+
});
|
|
86
|
+
it('resets stats', () => {
|
|
87
|
+
const cache = new search_cache_js_1.SearchCache(db, { ttlMs: 300000 });
|
|
88
|
+
cache.get('miss');
|
|
89
|
+
cache.resetStats();
|
|
90
|
+
expect(cache.getStats()).toEqual({ hits: 0, misses: 0, hitRate: 0 });
|
|
91
|
+
});
|
|
92
|
+
});
|
|
61
93
|
describe('Progressive Throttling', () => {
|
|
62
94
|
let db;
|
|
63
95
|
let tmpDir;
|
|
@@ -72,24 +104,24 @@ describe('Progressive Throttling', () => {
|
|
|
72
104
|
fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
|
|
73
105
|
});
|
|
74
106
|
test('returns 3 results for calls 1-10', () => {
|
|
75
|
-
const
|
|
76
|
-
expect(
|
|
77
|
-
expect(
|
|
107
|
+
const throttle = new search_cache_js_1.SearchThrottle(db);
|
|
108
|
+
expect(throttle.getMaxResults(1)).toBe(3);
|
|
109
|
+
expect(throttle.getMaxResults(10)).toBe(3);
|
|
78
110
|
});
|
|
79
111
|
test('returns 1 result for calls 11-20', () => {
|
|
80
|
-
const
|
|
81
|
-
expect(
|
|
82
|
-
expect(
|
|
112
|
+
const throttle = new search_cache_js_1.SearchThrottle(db);
|
|
113
|
+
expect(throttle.getMaxResults(11)).toBe(1);
|
|
114
|
+
expect(throttle.getMaxResults(20)).toBe(1);
|
|
83
115
|
});
|
|
84
116
|
test('returns 0 for calls 21+', () => {
|
|
85
|
-
const
|
|
86
|
-
expect(
|
|
117
|
+
const throttle = new search_cache_js_1.SearchThrottle(db);
|
|
118
|
+
expect(throttle.getMaxResults(21)).toBe(0);
|
|
87
119
|
});
|
|
88
120
|
test('incrementCallCount tracks per session', () => {
|
|
89
|
-
const
|
|
90
|
-
expect(
|
|
91
|
-
expect(
|
|
92
|
-
expect(
|
|
121
|
+
const throttle = new search_cache_js_1.SearchThrottle(db);
|
|
122
|
+
expect(throttle.incrementCallCount('sess-1')).toBe(1);
|
|
123
|
+
expect(throttle.incrementCallCount('sess-1')).toBe(2);
|
|
124
|
+
expect(throttle.incrementCallCount('sess-2')).toBe(1);
|
|
93
125
|
});
|
|
94
126
|
});
|
|
95
127
|
//# sourceMappingURL=search-cache.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-cache.test.js","sourceRoot":"","sources":["../../tests/search-cache.test.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AACxB,oEAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"search-cache.test.js","sourceRoot":"","sources":["../../tests/search-cache.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop-words.test.d.ts","sourceRoot":"","sources":["../../tests/stop-words.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const constants_1 = require("../scripts/lib/constants");
|
|
4
|
+
describe('STOP_WORDS', () => {
|
|
5
|
+
it('contains core English stop words', () => {
|
|
6
|
+
expect(constants_1.STOP_WORDS.has('the')).toBe(true);
|
|
7
|
+
expect(constants_1.STOP_WORDS.has('and')).toBe(true);
|
|
8
|
+
});
|
|
9
|
+
it('contains Turkish stop words', () => {
|
|
10
|
+
expect(constants_1.STOP_WORDS.has('bir')).toBe(true);
|
|
11
|
+
expect(constants_1.STOP_WORDS.has('için')).toBe(true);
|
|
12
|
+
});
|
|
13
|
+
it('contains generic technical stop words', () => {
|
|
14
|
+
expect(constants_1.STOP_WORDS.has('hook')).toBe(true);
|
|
15
|
+
expect(constants_1.STOP_WORDS.has('config')).toBe(true);
|
|
16
|
+
});
|
|
17
|
+
it('exports minimum word length', () => {
|
|
18
|
+
expect(constants_1.STOP_WORDS_MIN_LENGTH).toBe(2);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=stop-words.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop-words.test.js","sourceRoot":"","sources":["../../tests/stop-words.test.ts"],"names":[],"mappings":";;AAAA,wDAA6E;AAE7E,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,sBAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,sBAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,sBAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,sBAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,sBAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,sBAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,iCAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -577,37 +577,21 @@ function formatMultiSessionEpisodes(episodes) {
|
|
|
577
577
|
}
|
|
578
578
|
|
|
579
579
|
// Shared FTS5 search utilities (used by mindlore-search + mindlore-research-guard)
|
|
580
|
-
const
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
'
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
'bir', 'bu', 'su', 'ne', 'nasil', 'neden', 'var', 'yok', 'mi', 'mu',
|
|
596
|
-
'ile', 'icin', 'de', 'da', 've', 'veya', 'ama', 'ise', 'hem',
|
|
597
|
-
'bakalim', 'gel', 'git', 'yap', 'et', 'al', 'ver',
|
|
598
|
-
'evet', 'hayir', 'tamam', 'ok', 'oldu', 'olur', 'dur',
|
|
599
|
-
'simdi', 'sonra', 'once', 'hemen', 'biraz',
|
|
600
|
-
'lan', 'ya', 'ki', 'abi', 'hadi', 'hey', 'selam',
|
|
601
|
-
'olarak', 'olan', 'gibi', 'kadar', 'daha', 'cok',
|
|
602
|
-
'bunu', 'buna', 'icinde', 'uzerinde', 'arasinda',
|
|
603
|
-
'sonucu', 'tarafindan', 'zaten', 'gayet',
|
|
604
|
-
'acaba', 'nedir', 'midir', 'mudur',
|
|
605
|
-
// Generic technical (appears everywhere, not distinctive)
|
|
606
|
-
'hook', 'file', 'dosya', 'kullan', 'ekle', 'yaz', 'oku', 'calistir',
|
|
607
|
-
'kontrol', 'test', 'check', 'run', 'add', 'update', 'config',
|
|
608
|
-
'setup', 'install', 'start', 'stop', 'create', 'delete', 'remove', 'set',
|
|
609
|
-
'get', 'list', 'show', 'view', 'open', 'close', 'save', 'load',
|
|
610
|
-
]);
|
|
580
|
+
const SHARED_STOP_WORDS = (() => {
|
|
581
|
+
try {
|
|
582
|
+
const { STOP_WORDS, STOP_WORDS_MIN_LENGTH } = require('../../dist/scripts/lib/constants.js');
|
|
583
|
+
return { STOP_WORDS, MIN_LENGTH: STOP_WORDS_MIN_LENGTH };
|
|
584
|
+
} catch {
|
|
585
|
+
return null;
|
|
586
|
+
}
|
|
587
|
+
})();
|
|
588
|
+
|
|
589
|
+
if (!SHARED_STOP_WORDS) {
|
|
590
|
+
hookLog('common', 'warn', 'STOP_WORDS fallback active — run npm run build');
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
const STOP_WORDS = SHARED_STOP_WORDS?.STOP_WORDS ?? new Set(['the', 'a', 'an', 'is', 'are', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for', 'of', 'with', 'bir', 'bu', 'de', 'da', 've']);
|
|
594
|
+
const STOP_WORDS_MIN_LENGTH = SHARED_STOP_WORDS?.MIN_LENGTH ?? 2;
|
|
611
595
|
|
|
612
596
|
/**
|
|
613
597
|
* Extract topic keywords from text. Preserves Turkish chars.
|
|
@@ -620,7 +604,7 @@ function extractKeywords(text, maxKeywords = 8) {
|
|
|
620
604
|
.toLowerCase()
|
|
621
605
|
.replace(/[^\w\s\u00e7\u011f\u0131\u00f6\u015f\u00fc-]/g, ' ')
|
|
622
606
|
.split(/\s+/)
|
|
623
|
-
.filter((w) => w.length >=
|
|
607
|
+
.filter((w) => w.length >= STOP_WORDS_MIN_LENGTH && !STOP_WORDS.has(w) && !/^\d+$/.test(w));
|
|
624
608
|
return [...new Set(words)].slice(0, maxKeywords);
|
|
625
609
|
}
|
|
626
610
|
|
|
@@ -65,8 +65,9 @@ function main() {
|
|
|
65
65
|
let effectiveMax = MAX_RESULTS;
|
|
66
66
|
if (SearchCacheMod) {
|
|
67
67
|
cache = new SearchCacheMod.SearchCache(db, { ttlMs: 300000 });
|
|
68
|
-
const
|
|
69
|
-
|
|
68
|
+
const throttle = new SearchCacheMod.SearchThrottle(db);
|
|
69
|
+
const callCount = throttle.incrementCallCount(sessionId);
|
|
70
|
+
effectiveMax = throttle.getMaxResults(callCount);
|
|
70
71
|
if (effectiveMax === 0) {
|
|
71
72
|
hookLog('search', 'info', `Throttled (call #${callCount})`);
|
|
72
73
|
db.close();
|
package/package.json
CHANGED
package/plugin.json
CHANGED
package/templates/config.json
CHANGED