kiri-mcp-server 0.9.6 → 0.10.0
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/README.md +144 -13
- package/dist/client/cli.js +68 -0
- package/dist/client/cli.js.map +1 -0
- package/dist/client/index.js +5 -0
- package/dist/client/index.js.map +1 -0
- package/dist/eval/metrics.js +47 -0
- package/dist/eval/metrics.js.map +1 -0
- package/dist/indexer/cli.js +362 -0
- package/dist/indexer/cli.js.map +1 -0
- package/dist/indexer/codeintel.js +182 -0
- package/dist/indexer/codeintel.js.map +1 -0
- package/dist/indexer/git.js +30 -0
- package/dist/indexer/git.js.map +1 -0
- package/dist/indexer/language.js +34 -0
- package/dist/indexer/language.js.map +1 -0
- package/dist/indexer/pipeline/filters/denylist.js +71 -0
- package/dist/indexer/pipeline/filters/denylist.js.map +1 -0
- package/dist/indexer/schema.js +101 -0
- package/dist/indexer/schema.js.map +1 -0
- package/dist/package.json +14 -1
- package/dist/server/bootstrap.js +19 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/context.js +1 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fallbacks/degradeController.js +69 -0
- package/dist/server/fallbacks/degradeController.js.map +1 -0
- package/dist/server/handlers.js +1268 -0
- package/dist/server/handlers.js.map +1 -0
- package/dist/server/main.js +151 -0
- package/dist/server/main.js.map +1 -0
- package/dist/server/observability/metrics.js +56 -0
- package/dist/server/observability/metrics.js.map +1 -0
- package/dist/server/observability/tracing.js +58 -0
- package/dist/server/observability/tracing.js.map +1 -0
- package/dist/server/rpc.js +477 -0
- package/dist/server/rpc.js.map +1 -0
- package/dist/server/runtime.js +47 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/scoring.js +116 -0
- package/dist/server/scoring.js.map +1 -0
- package/dist/server/stdio.js +76 -0
- package/dist/server/stdio.js.map +1 -0
- package/dist/shared/duckdb.js +119 -0
- package/dist/shared/duckdb.js.map +1 -0
- package/dist/shared/embedding.js +98 -0
- package/dist/shared/embedding.js.map +1 -0
- package/dist/shared/index.js +9 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/security/config.js +64 -0
- package/dist/shared/security/config.js.map +1 -0
- package/dist/shared/security/masker.js +56 -0
- package/dist/shared/security/masker.js.map +1 -0
- package/dist/shared/tokenizer.js +4 -0
- package/dist/shared/tokenizer.js.map +1 -0
- package/dist/shared/utils/simpleYaml.js +89 -0
- package/dist/shared/utils/simpleYaml.js.map +1 -0
- package/dist/src/client/proxy.js +83 -13
- package/dist/src/client/proxy.js.map +1 -1
- package/dist/src/client/start-daemon.d.ts.map +1 -1
- package/dist/src/client/start-daemon.js +2 -1
- package/dist/src/client/start-daemon.js.map +1 -1
- package/dist/src/daemon/daemon.js +97 -18
- package/dist/src/daemon/daemon.js.map +1 -1
- package/dist/src/daemon/socket.d.ts +6 -4
- package/dist/src/daemon/socket.d.ts.map +1 -1
- package/dist/src/daemon/socket.js +62 -18
- package/dist/src/daemon/socket.js.map +1 -1
- package/dist/src/indexer/cli.d.ts +1 -0
- package/dist/src/indexer/cli.d.ts.map +1 -1
- package/dist/src/indexer/cli.js +503 -257
- package/dist/src/indexer/cli.js.map +1 -1
- package/dist/src/indexer/codeintel.d.ts +1 -1
- package/dist/src/indexer/codeintel.d.ts.map +1 -1
- package/dist/src/indexer/codeintel.js +296 -3
- package/dist/src/indexer/codeintel.js.map +1 -1
- package/dist/src/indexer/dart/analyze.d.ts +29 -0
- package/dist/src/indexer/dart/analyze.d.ts.map +1 -0
- package/dist/src/indexer/dart/analyze.js +452 -0
- package/dist/src/indexer/dart/analyze.js.map +1 -0
- package/dist/src/indexer/dart/client.d.ts +113 -0
- package/dist/src/indexer/dart/client.d.ts.map +1 -0
- package/dist/src/indexer/dart/client.js +444 -0
- package/dist/src/indexer/dart/client.js.map +1 -0
- package/dist/src/indexer/dart/config.d.ts +36 -0
- package/dist/src/indexer/dart/config.d.ts.map +1 -0
- package/dist/src/indexer/dart/config.js +62 -0
- package/dist/src/indexer/dart/config.js.map +1 -0
- package/dist/src/indexer/dart/dependencies.d.ts +17 -0
- package/dist/src/indexer/dart/dependencies.d.ts.map +1 -0
- package/dist/src/indexer/dart/dependencies.js +102 -0
- package/dist/src/indexer/dart/dependencies.js.map +1 -0
- package/dist/src/indexer/dart/pathKey.d.ts +40 -0
- package/dist/src/indexer/dart/pathKey.d.ts.map +1 -0
- package/dist/src/indexer/dart/pathKey.js +72 -0
- package/dist/src/indexer/dart/pathKey.js.map +1 -0
- package/dist/src/indexer/dart/poolGate.d.ts +57 -0
- package/dist/src/indexer/dart/poolGate.d.ts.map +1 -0
- package/dist/src/indexer/dart/poolGate.js +87 -0
- package/dist/src/indexer/dart/poolGate.js.map +1 -0
- package/dist/src/indexer/dart/sdk.d.ts +40 -0
- package/dist/src/indexer/dart/sdk.d.ts.map +1 -0
- package/dist/src/indexer/dart/sdk.js +167 -0
- package/dist/src/indexer/dart/sdk.js.map +1 -0
- package/dist/src/indexer/dart/transform.d.ts +17 -0
- package/dist/src/indexer/dart/transform.d.ts.map +1 -0
- package/dist/src/indexer/dart/transform.js +157 -0
- package/dist/src/indexer/dart/transform.js.map +1 -0
- package/dist/src/indexer/dart/types.d.ts +137 -0
- package/dist/src/indexer/dart/types.d.ts.map +1 -0
- package/dist/src/indexer/dart/types.js +5 -0
- package/dist/src/indexer/dart/types.js.map +1 -0
- package/dist/src/indexer/git.d.ts +1 -0
- package/dist/src/indexer/git.d.ts.map +1 -1
- package/dist/src/indexer/git.js +8 -0
- package/dist/src/indexer/git.js.map +1 -1
- package/dist/src/indexer/language.d.ts.map +1 -1
- package/dist/src/indexer/language.js +1 -0
- package/dist/src/indexer/language.js.map +1 -1
- package/dist/src/indexer/queue.d.ts +19 -0
- package/dist/src/indexer/queue.d.ts.map +1 -0
- package/dist/src/indexer/queue.js +50 -0
- package/dist/src/indexer/queue.js.map +1 -0
- package/dist/src/indexer/schema.d.ts +61 -1
- package/dist/src/indexer/schema.d.ts.map +1 -1
- package/dist/src/indexer/schema.js +253 -2
- package/dist/src/indexer/schema.js.map +1 -1
- package/dist/src/indexer/watch.d.ts +21 -0
- package/dist/src/indexer/watch.d.ts.map +1 -1
- package/dist/src/indexer/watch.js +189 -28
- package/dist/src/indexer/watch.js.map +1 -1
- package/dist/src/server/abbreviations.d.ts +47 -0
- package/dist/src/server/abbreviations.d.ts.map +1 -0
- package/dist/src/server/abbreviations.js +71 -0
- package/dist/src/server/abbreviations.js.map +1 -0
- package/dist/src/server/boost-profiles.d.ts +63 -0
- package/dist/src/server/boost-profiles.d.ts.map +1 -0
- package/dist/src/server/boost-profiles.js +86 -0
- package/dist/src/server/boost-profiles.js.map +1 -0
- package/dist/src/server/context.d.ts +7 -0
- package/dist/src/server/context.d.ts.map +1 -1
- package/dist/src/server/handlers.d.ts +3 -2
- package/dist/src/server/handlers.d.ts.map +1 -1
- package/dist/src/server/handlers.js +542 -96
- package/dist/src/server/handlers.js.map +1 -1
- package/dist/src/server/indexBootstrap.d.ts.map +1 -1
- package/dist/src/server/indexBootstrap.js +4 -1
- package/dist/src/server/indexBootstrap.js.map +1 -1
- package/dist/src/server/main.d.ts.map +1 -1
- package/dist/src/server/main.js +112 -30
- package/dist/src/server/main.js.map +1 -1
- package/dist/src/server/rpc.d.ts.map +1 -1
- package/dist/src/server/rpc.js +28 -9
- package/dist/src/server/rpc.js.map +1 -1
- package/dist/src/server/rrf.d.ts +86 -0
- package/dist/src/server/rrf.d.ts.map +1 -0
- package/dist/src/server/rrf.js +108 -0
- package/dist/src/server/rrf.js.map +1 -0
- package/dist/src/server/runtime.d.ts.map +1 -1
- package/dist/src/server/runtime.js +45 -6
- package/dist/src/server/runtime.js.map +1 -1
- package/dist/src/server/scoring.d.ts.map +1 -1
- package/dist/src/server/scoring.js +19 -0
- package/dist/src/server/scoring.js.map +1 -1
- package/dist/src/shared/cli/args.d.ts +70 -0
- package/dist/src/shared/cli/args.d.ts.map +1 -0
- package/dist/src/shared/cli/args.js +84 -0
- package/dist/src/shared/cli/args.js.map +1 -0
- package/dist/src/shared/duckdb.d.ts.map +1 -1
- package/dist/src/shared/duckdb.js +9 -0
- package/dist/src/shared/duckdb.js.map +1 -1
- package/dist/src/shared/embedding/engine.d.ts +38 -0
- package/dist/src/shared/embedding/engine.d.ts.map +1 -0
- package/dist/src/shared/embedding/engine.js +6 -0
- package/dist/src/shared/embedding/engine.js.map +1 -0
- package/dist/src/shared/embedding/lsh-engine.d.ts +11 -0
- package/dist/src/shared/embedding/lsh-engine.d.ts.map +1 -0
- package/dist/src/shared/embedding/lsh-engine.js +14 -0
- package/dist/src/shared/embedding/lsh-engine.js.map +1 -0
- package/dist/src/shared/embedding/registry.d.ts +25 -0
- package/dist/src/shared/embedding/registry.d.ts.map +1 -0
- package/dist/src/shared/embedding/registry.js +50 -0
- package/dist/src/shared/embedding/registry.js.map +1 -0
- package/dist/src/shared/embedding/semantic-engine.d.ts +14 -0
- package/dist/src/shared/embedding/semantic-engine.d.ts.map +1 -0
- package/dist/src/shared/embedding/semantic-engine.js +50 -0
- package/dist/src/shared/embedding/semantic-engine.js.map +1 -0
- package/dist/src/shared/models/model-manager.d.ts +38 -0
- package/dist/src/shared/models/model-manager.d.ts.map +1 -0
- package/dist/src/shared/models/model-manager.js +116 -0
- package/dist/src/shared/models/model-manager.js.map +1 -0
- package/dist/src/shared/models/model-manifest.d.ts +22 -0
- package/dist/src/shared/models/model-manifest.d.ts.map +1 -0
- package/dist/src/shared/models/model-manifest.js +24 -0
- package/dist/src/shared/models/model-manifest.js.map +1 -0
- package/dist/src/shared/utils/path.d.ts +46 -0
- package/dist/src/shared/utils/path.d.ts.map +1 -0
- package/dist/src/shared/utils/path.js +94 -0
- package/dist/src/shared/utils/path.js.map +1 -0
- package/dist/src/shared/utils/socket.d.ts +61 -0
- package/dist/src/shared/utils/socket.d.ts.map +1 -0
- package/dist/src/shared/utils/socket.js +156 -0
- package/dist/src/shared/utils/socket.js.map +1 -0
- package/dist/src/shared/utils/validation.d.ts +14 -0
- package/dist/src/shared/utils/validation.d.ts.map +1 -0
- package/dist/src/shared/utils/validation.js +22 -0
- package/dist/src/shared/utils/validation.js.map +1 -0
- package/package.json +14 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { realpathSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { resolve, relative, sep, dirname, isAbsolute } from "node:path";
|
|
2
3
|
import { performance } from "node:perf_hooks";
|
|
3
4
|
import { watch } from "chokidar";
|
|
4
5
|
import { acquireLock, releaseLock, getLockOwner, LockfileError } from "../shared/utils/lockfile.js";
|
|
6
|
+
import { normalizeDbPath, normalizeRepoPath } from "../shared/utils/path.js";
|
|
5
7
|
import { runIndexer } from "./cli.js";
|
|
6
8
|
import { createDenylistFilter } from "./pipeline/filters/denylist.js";
|
|
7
9
|
/**
|
|
@@ -21,6 +23,7 @@ import { createDenylistFilter } from "./pipeline/filters/denylist.js";
|
|
|
21
23
|
*/
|
|
22
24
|
export class IndexWatcher {
|
|
23
25
|
options;
|
|
26
|
+
rawRepoRoot;
|
|
24
27
|
watcher = null;
|
|
25
28
|
reindexTimer = null;
|
|
26
29
|
isReindexing = false;
|
|
@@ -29,11 +32,28 @@ export class IndexWatcher {
|
|
|
29
32
|
pendingFiles = new Set();
|
|
30
33
|
stats;
|
|
31
34
|
lockfilePath;
|
|
35
|
+
realpathCache = new Map();
|
|
32
36
|
isStopping = false; // Flag to prevent new reindexes during shutdown
|
|
33
37
|
constructor(options) {
|
|
38
|
+
this.rawRepoRoot = resolve(options.repoRoot);
|
|
39
|
+
const repoRoot = normalizeRepoPath(this.rawRepoRoot);
|
|
40
|
+
let databasePath;
|
|
41
|
+
// Fix #2: Ensure parent directory exists BEFORE normalization
|
|
42
|
+
// This guarantees consistent path normalization on first and subsequent runs
|
|
43
|
+
// Using sync version because constructors can't be async
|
|
44
|
+
try {
|
|
45
|
+
const parentDir = dirname(resolve(options.databasePath));
|
|
46
|
+
mkdirSync(parentDir, { recursive: true });
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Ignore if already exists or permission denied
|
|
50
|
+
}
|
|
51
|
+
// Critical: Use normalizeDbPath to ensure consistent path with cli.ts
|
|
52
|
+
// This prevents lock file and queue key mismatch
|
|
53
|
+
databasePath = normalizeDbPath(options.databasePath);
|
|
34
54
|
this.options = {
|
|
35
|
-
repoRoot
|
|
36
|
-
databasePath
|
|
55
|
+
repoRoot,
|
|
56
|
+
databasePath,
|
|
37
57
|
debounceMs: options.debounceMs ?? 500,
|
|
38
58
|
};
|
|
39
59
|
if (options.configPath) {
|
|
@@ -57,6 +77,72 @@ export class IndexWatcher {
|
|
|
57
77
|
});
|
|
58
78
|
}
|
|
59
79
|
}
|
|
80
|
+
getCachedRealPath(absPath) {
|
|
81
|
+
const cached = this.realpathCache.get(absPath);
|
|
82
|
+
if (cached) {
|
|
83
|
+
return cached;
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
const realPath = realpathSync.native(absPath);
|
|
87
|
+
this.realpathCache.set(absPath, realPath);
|
|
88
|
+
if (this.realpathCache.size > 2048) {
|
|
89
|
+
const key = this.realpathCache.keys().next().value;
|
|
90
|
+
if (key) {
|
|
91
|
+
this.realpathCache.delete(key);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return realPath;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Normalizes absolute file path to repository-relative path.
|
|
102
|
+
*
|
|
103
|
+
* Fix #3: Proper cross-platform path handling to prevent denylist bypass on Windows.
|
|
104
|
+
*
|
|
105
|
+
* Strategy:
|
|
106
|
+
* - Use path.relative() instead of string replacement
|
|
107
|
+
* - Normalize path separator to forward slash (git-compatible)
|
|
108
|
+
* - Reject paths outside repository (security check)
|
|
109
|
+
* - Reject Windows cross-drive paths and UNC paths
|
|
110
|
+
* - Resolve symlinks to prevent bypass via junctions/symlinks
|
|
111
|
+
*
|
|
112
|
+
* @param absPath - Absolute path from file watcher
|
|
113
|
+
* @returns Git-compatible relative path, or null if outside repo
|
|
114
|
+
*/
|
|
115
|
+
normalizePathForRepo(absPath) {
|
|
116
|
+
const rel = relative(this.options.repoRoot, absPath);
|
|
117
|
+
// Fix #3: Security - Reject paths outside repository
|
|
118
|
+
// - Parent directory traversal: ".."
|
|
119
|
+
// - Absolute paths (Unix): starts with "/"
|
|
120
|
+
// - Absolute paths (Windows): starts with drive letter "C:" or "C:\"
|
|
121
|
+
// - UNC paths (Windows): starts with "\\" or "//"
|
|
122
|
+
// Note: Empty string is ALLOWED (represents repo root for chokidar directory watching)
|
|
123
|
+
if (rel.startsWith("..") ||
|
|
124
|
+
isAbsolute(rel) ||
|
|
125
|
+
/^[A-Za-z]:/.test(rel) ||
|
|
126
|
+
rel.startsWith("\\\\") ||
|
|
127
|
+
rel.startsWith("//")) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
// Fix #3: Additional safety - Resolve symlinks once and cache the result
|
|
131
|
+
// This prevents bypass via junction points or symlinks pointing outside the repo
|
|
132
|
+
const realAbsPath = this.getCachedRealPath(absPath);
|
|
133
|
+
if (realAbsPath) {
|
|
134
|
+
const realRepoRoot = this.options.repoRoot; // Already normalized in constructor
|
|
135
|
+
const realRel = relative(realRepoRoot, realAbsPath);
|
|
136
|
+
// Double-check the real path is still inside repo
|
|
137
|
+
if (realRel.startsWith("..") || isAbsolute(realRel)) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Allow empty string (repo root itself) for chokidar directory watching
|
|
142
|
+
// Normalize to forward slash for cross-platform compatibility
|
|
143
|
+
// Windows uses backslash, but git and denylist rules expect forward slash
|
|
144
|
+
return rel.split(sep).join("/");
|
|
145
|
+
}
|
|
60
146
|
/**
|
|
61
147
|
* Starts the file watcher and begins monitoring for changes.
|
|
62
148
|
*
|
|
@@ -73,7 +159,11 @@ export class IndexWatcher {
|
|
|
73
159
|
persistent: true,
|
|
74
160
|
ignoreInitial: true, // Don't trigger on existing files
|
|
75
161
|
ignored: (path) => {
|
|
76
|
-
const relativePath =
|
|
162
|
+
const relativePath = this.normalizePathForRepo(path);
|
|
163
|
+
// Reject paths outside repo or invalid paths (explicit null check, not falsy check)
|
|
164
|
+
if (relativePath === null) {
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
77
167
|
return denylistFilter.isDenied(relativePath);
|
|
78
168
|
},
|
|
79
169
|
// Editor-specific handling
|
|
@@ -85,17 +175,47 @@ export class IndexWatcher {
|
|
|
85
175
|
usePolling: false, // Use native OS events (faster)
|
|
86
176
|
// depth option omitted for no depth limit
|
|
87
177
|
});
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
178
|
+
// Return promise that resolves when watcher is fully initialized
|
|
179
|
+
return new Promise((resolve, reject) => {
|
|
180
|
+
const watcher = this.watcher;
|
|
181
|
+
let settled = false;
|
|
182
|
+
const settle = (cb) => {
|
|
183
|
+
if (settled) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
settled = true;
|
|
187
|
+
cb();
|
|
188
|
+
};
|
|
189
|
+
const handleError = (error) => {
|
|
190
|
+
process.stderr.write(`❌ File watcher error: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
191
|
+
if (this.watcher) {
|
|
192
|
+
void this.watcher.close().catch(() => {
|
|
193
|
+
/* ignore */
|
|
194
|
+
});
|
|
195
|
+
this.watcher = null;
|
|
196
|
+
}
|
|
197
|
+
settle(() => {
|
|
198
|
+
reject(new Error(`Failed to start watch mode: ${error instanceof Error ? error.message : String(error)}`));
|
|
199
|
+
});
|
|
200
|
+
};
|
|
201
|
+
// Register event handlers
|
|
202
|
+
watcher
|
|
203
|
+
.on("add", (path) => {
|
|
204
|
+
this.scheduleReindex("add", path);
|
|
205
|
+
})
|
|
206
|
+
.on("change", (path) => {
|
|
207
|
+
this.scheduleReindex("change", path);
|
|
208
|
+
})
|
|
209
|
+
.on("unlink", (path) => {
|
|
210
|
+
this.scheduleReindex("unlink", path);
|
|
211
|
+
})
|
|
212
|
+
.on("error", handleError)
|
|
213
|
+
.once("ready", () => {
|
|
214
|
+
watcher.off("error", handleError);
|
|
215
|
+
process.stderr.write(`👁️ Watch mode started. Monitoring ${this.options.repoRoot} for changes...\n`);
|
|
216
|
+
process.stderr.write(` Debounce: ${this.options.debounceMs}ms\n`);
|
|
217
|
+
settle(resolve);
|
|
218
|
+
});
|
|
99
219
|
});
|
|
100
220
|
}
|
|
101
221
|
/**
|
|
@@ -111,7 +231,11 @@ export class IndexWatcher {
|
|
|
111
231
|
if (this.isStopping) {
|
|
112
232
|
return;
|
|
113
233
|
}
|
|
114
|
-
const relativePath =
|
|
234
|
+
const relativePath = this.normalizePathForRepo(path);
|
|
235
|
+
// Ignore paths outside repository (security check)
|
|
236
|
+
if (!relativePath) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
115
239
|
this.pendingFiles.add(relativePath);
|
|
116
240
|
// Clear existing timer if present
|
|
117
241
|
if (this.reindexTimer !== null) {
|
|
@@ -126,9 +250,11 @@ export class IndexWatcher {
|
|
|
126
250
|
const moreCount = Math.max(0, this.pendingFiles.size - 5);
|
|
127
251
|
const summary = moreCount > 0 ? `${fileList} (+${moreCount} more)` : fileList;
|
|
128
252
|
process.stderr.write(`\n📝 File changes detected: ${summary}\n`);
|
|
129
|
-
//
|
|
253
|
+
// Fix #3 & #4: Capture snapshot BEFORE clearing to prevent data loss and enable incremental indexing
|
|
254
|
+
const changedPaths = Array.from(this.pendingFiles);
|
|
130
255
|
this.pendingFiles.clear();
|
|
131
|
-
|
|
256
|
+
// Pass snapshot to executeReindex
|
|
257
|
+
void this.executeReindex(changedPaths);
|
|
132
258
|
}, this.options.debounceMs);
|
|
133
259
|
// Mark pending flag (used if reindex is already running)
|
|
134
260
|
this.pendingReindex = true;
|
|
@@ -138,8 +264,10 @@ export class IndexWatcher {
|
|
|
138
264
|
*
|
|
139
265
|
* If a reindex is already in progress, marks a pending flag to trigger
|
|
140
266
|
* another reindex after the current one completes.
|
|
267
|
+
*
|
|
268
|
+
* @param changedPaths - Array of file paths that changed (Fix #3 & #4: snapshot from scheduleReindex)
|
|
141
269
|
*/
|
|
142
|
-
async executeReindex() {
|
|
270
|
+
async executeReindex(changedPaths) {
|
|
143
271
|
// Don't start reindex if watcher is stopping
|
|
144
272
|
if (this.isStopping) {
|
|
145
273
|
process.stderr.write(`🛑 Watcher stopping. Skipping reindex.\n`);
|
|
@@ -147,6 +275,10 @@ export class IndexWatcher {
|
|
|
147
275
|
}
|
|
148
276
|
// Check if already reindexing
|
|
149
277
|
if (this.isReindexing) {
|
|
278
|
+
// Fix #6: Restore changedPaths back to pendingFiles to prevent data loss
|
|
279
|
+
for (const path of changedPaths) {
|
|
280
|
+
this.pendingFiles.add(path);
|
|
281
|
+
}
|
|
150
282
|
process.stderr.write(`⏳ Reindex already in progress. Will reindex again after completion.\n`);
|
|
151
283
|
this.pendingReindex = true;
|
|
152
284
|
return;
|
|
@@ -154,10 +286,12 @@ export class IndexWatcher {
|
|
|
154
286
|
this.isReindexing = true;
|
|
155
287
|
this.pendingReindex = false;
|
|
156
288
|
this.stats.lastReindexStart = performance.now();
|
|
157
|
-
//
|
|
158
|
-
|
|
289
|
+
// Fix #3 & #4: Use changedPaths parameter (snapshot from scheduleReindex) instead of reading pendingFiles
|
|
290
|
+
// This prevents data loss on lock contention and enables true incremental indexing
|
|
159
291
|
// Create and store the reindex promise for proper shutdown handling
|
|
160
292
|
this.reindexPromise = (async () => {
|
|
293
|
+
// Fix #1: Track lock ownership to prevent releasing locks we don't own
|
|
294
|
+
let lockAcquired = false;
|
|
161
295
|
try {
|
|
162
296
|
// Double-check stopping flag before acquiring lock
|
|
163
297
|
if (this.isStopping) {
|
|
@@ -167,12 +301,18 @@ export class IndexWatcher {
|
|
|
167
301
|
// Acquire lock to prevent concurrent indexing
|
|
168
302
|
try {
|
|
169
303
|
acquireLock(this.lockfilePath);
|
|
304
|
+
lockAcquired = true; // Fix #1: Only set to true on successful acquisition
|
|
170
305
|
}
|
|
171
306
|
catch (error) {
|
|
172
307
|
if (error instanceof LockfileError) {
|
|
308
|
+
// Fix #3: Restore changedPaths to pendingFiles to prevent data loss
|
|
309
|
+
for (const path of changedPaths) {
|
|
310
|
+
this.pendingFiles.add(path);
|
|
311
|
+
}
|
|
312
|
+
this.pendingReindex = true; // Mark for retry when lock is available
|
|
173
313
|
const ownerPid = error.ownerPid ?? getLockOwner(this.lockfilePath);
|
|
174
314
|
const ownerInfo = ownerPid ? ` (PID: ${ownerPid})` : "";
|
|
175
|
-
process.stderr.write(`⚠️ Another indexing process${ownerInfo} holds the lock.
|
|
315
|
+
process.stderr.write(`⚠️ Another indexing process${ownerInfo} holds the lock. Changes queued for retry.\n`);
|
|
176
316
|
return;
|
|
177
317
|
}
|
|
178
318
|
throw error;
|
|
@@ -181,10 +321,11 @@ export class IndexWatcher {
|
|
|
181
321
|
const start = performance.now();
|
|
182
322
|
process.stderr.write(`🔄 Incrementally reindexing ${changedPaths.length} file(s)...\n`);
|
|
183
323
|
await runIndexer({
|
|
184
|
-
repoRoot: this.
|
|
324
|
+
repoRoot: this.rawRepoRoot,
|
|
185
325
|
databasePath: this.options.databasePath,
|
|
186
326
|
full: false,
|
|
187
327
|
changedPaths,
|
|
328
|
+
skipLocking: true, // Fix #1: Watcher already holds the lock
|
|
188
329
|
});
|
|
189
330
|
const duration = performance.now() - start;
|
|
190
331
|
this.stats.reindexCount++;
|
|
@@ -198,22 +339,42 @@ export class IndexWatcher {
|
|
|
198
339
|
}
|
|
199
340
|
}
|
|
200
341
|
catch (error) {
|
|
342
|
+
// Fix #2: Restore changedPaths for ALL errors, not just LockfileError
|
|
343
|
+
// This prevents permanent data loss when reindex fails due to:
|
|
344
|
+
// - Database I/O errors
|
|
345
|
+
// - Parsing failures
|
|
346
|
+
// - Network timeouts
|
|
347
|
+
// - Any other transient errors
|
|
348
|
+
for (const path of changedPaths) {
|
|
349
|
+
this.pendingFiles.add(path);
|
|
350
|
+
}
|
|
351
|
+
this.pendingReindex = true;
|
|
201
352
|
process.stderr.write(`❌ Reindex failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
202
|
-
process.stderr.write(`
|
|
353
|
+
process.stderr.write(` Changes queued for retry on next file event.\n`);
|
|
203
354
|
}
|
|
204
355
|
finally {
|
|
205
356
|
this.isReindexing = false;
|
|
206
|
-
|
|
357
|
+
// Fix #1: Only release lock if we acquired it (prevents deleting other process's locks)
|
|
358
|
+
if (lockAcquired) {
|
|
359
|
+
releaseLock(this.lockfilePath);
|
|
360
|
+
}
|
|
207
361
|
this.reindexPromise = null;
|
|
208
362
|
// Clear timer to prevent resource leak
|
|
209
363
|
if (this.reindexTimer !== null) {
|
|
210
364
|
clearTimeout(this.reindexTimer);
|
|
211
365
|
this.reindexTimer = null;
|
|
212
366
|
}
|
|
213
|
-
// If more changes occurred during reindex,
|
|
214
|
-
if (this.pendingReindex) {
|
|
367
|
+
// Fix #7: If more changes occurred during reindex, trigger direct retry
|
|
368
|
+
if (this.pendingReindex && this.pendingFiles.size > 0) {
|
|
215
369
|
process.stderr.write(`🔁 New changes detected during reindex. Scheduling another reindex...\n`);
|
|
216
|
-
|
|
370
|
+
// Direct retry without file system event dependency
|
|
371
|
+
// Don't clear pendingFiles here - let the timer callback handle it
|
|
372
|
+
this.reindexTimer = setTimeout(() => {
|
|
373
|
+
this.reindexTimer = null;
|
|
374
|
+
const changedPaths = Array.from(this.pendingFiles);
|
|
375
|
+
this.pendingFiles.clear();
|
|
376
|
+
void this.executeReindex(changedPaths);
|
|
377
|
+
}, this.options.debounceMs);
|
|
217
378
|
}
|
|
218
379
|
}
|
|
219
380
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/indexer/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAkB,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEpG,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAkCtE;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,YAAY;IACN,OAAO,CAMtB;IACM,OAAO,GAAqB,IAAI,CAAC;IACjC,YAAY,GAA0B,IAAI,CAAC;IAC3C,YAAY,GAAG,KAAK,CAAC;IACrB,cAAc,GAAyB,IAAI,CAAC;IAC5C,cAAc,GAAG,KAAK,CAAC;IACvB,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACxB,KAAK,CAAoB;IACzB,YAAY,CAAS;IAC9B,UAAU,GAAG,KAAK,CAAC,CAAC,gDAAgD;IAE5E,YAAY,OAA4B;QACtC,IAAI,CAAC,OAAO,GAAG;YACb,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;YAC3C,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,GAAG;SACtC,CAAC;QAEF,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAC/C,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,OAAO,CAAC;QAExD,IAAI,CAAC,KAAK,GAAG;YACX,YAAY,EAAE,CAAC;YACf,mBAAmB,EAAE,CAAC;YACtB,UAAU,EAAE,CAAC;YACb,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,WAAW,CAAC,GAAG,EAAE;SACpC,CAAC;QAEF,kCAAkC;QAClC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACjD,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QAED,yBAAyB;QACzB,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE5F,+DAA+D;QAC/D,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC1C,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,IAAI,EAAE,kCAAkC;YACvD,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE;gBACxB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;gBACnE,OAAO,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC/C,CAAC;YACD,2BAA2B;YAC3B,gBAAgB,EAAE;gBAChB,kBAAkB,EAAE,GAAG,EAAE,mCAAmC;gBAC5D,YAAY,EAAE,GAAG;aAClB;YACD,qBAAqB;YACrB,UAAU,EAAE,KAAK,EAAE,gCAAgC;YACnD,0CAA0C;SAC3C,CAAC,CAAC;QAEH,0BAA0B;QAC1B,IAAI,CAAC,OAAO;aACT,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aACtD,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;aAC5D,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;aAC5D,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CACpF,CAAC;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uCAAuC,IAAI,CAAC,OAAO,CAAC,QAAQ,mBAAmB,CAChF,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,UAAU,MAAM,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACK,eAAe,CAAC,KAAa,EAAE,IAAY;QACjD,sDAAsD;QACtD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEpC,kCAAkC;QAClC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC/B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YAE/C,yBAAyB;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,MAAM,SAAS,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YAE9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,OAAO,IAAI,CAAC,CAAC;YAEjE,0CAA0C;YAC1C,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC1B,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7B,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE5B,yDAAyD;QACzD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,cAAc;QAC1B,6CAA6C;QAC7C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,8BAA8B;QAC9B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uEAAuE,CACxE,CAAC;YACF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEhD,iDAAiD;QACjD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEnD,oEAAoE;QACpE,IAAI,CAAC,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC;gBACH,mDAAmD;gBACnD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;oBACjE,OAAO;gBACT,CAAC;gBAED,8CAA8C;gBAC9C,IAAI,CAAC;oBACH,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;wBACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBACnE,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,+BAA+B,SAAS,2CAA2C,CACpF,CAAC;wBACF,OAAO;oBACT,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,iDAAiD;gBACjD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,YAAY,CAAC,MAAM,eAAe,CAAC,CAAC;gBAExF,MAAM,UAAU,CAAC;oBACf,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;oBAC/B,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;oBACvC,IAAI,EAAE,KAAK;oBACX,YAAY;iBACb,CAAC,CAAC;gBAEH,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBAC3C,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,mBAAmB,GAAG,QAAQ,CAAC;gBAC1C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;gBAE1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAEtF,2CAA2C;gBAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;oBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC;oBACpF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBAAqB,IAAI,CAAC,KAAK,CAAC,YAAY,eAAe,MAAM,YAAY,CAC9E,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAChF,CAAC;gBACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;YACvF,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC/B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAE3B,uCAAuC;gBACvC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC/B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC3B,CAAC;gBAED,gEAAgE;gBAChE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yEAAyE,CAC1E,CAAC;oBACF,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,MAAM,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,CAAC,kBAAkB;QAC5B,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAEtD,4DAA4D;QAC5D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,sBAAsB;QACtB,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC/B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,yDAAyD;QACzD,uDAAuD;QACvD,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,cAAc,CAAC;QAC5B,CAAC;QAED,gBAAgB;QAChB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,yBAAyB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC;QACpF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mBAAmB,IAAI,CAAC,KAAK,CAAC,YAAY,eAAe,MAAM,YAAY,CAC5E,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,aAAa;QACX,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;IAC/B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/indexer/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abbreviation expansion for path matching (ADR 003)
|
|
3
|
+
*
|
|
4
|
+
* Bridges the vocabulary gap between natural language queries and technical path names.
|
|
5
|
+
* Example: "database" → ["database", "db", "data"]
|
|
6
|
+
*
|
|
7
|
+
* LDE principles:
|
|
8
|
+
* - Pure functions (no side effects)
|
|
9
|
+
* - Readonly types (immutability)
|
|
10
|
+
* - Property-based testing
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Abbreviation mapping (LDE: readonly, immutable)
|
|
14
|
+
*/
|
|
15
|
+
export interface AbbreviationMap {
|
|
16
|
+
readonly canonical: string;
|
|
17
|
+
readonly variants: readonly string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Default abbreviation dictionary
|
|
21
|
+
*
|
|
22
|
+
* Maintenance: Add new entries as needed, alphabetically sorted by canonical
|
|
23
|
+
* Conflicts: Use most common meaning (e.g., "db" → "database" not "debug")
|
|
24
|
+
*/
|
|
25
|
+
export declare const DEFAULT_ABBREVIATIONS: readonly AbbreviationMap[];
|
|
26
|
+
/**
|
|
27
|
+
* Expand term with common abbreviations (LDE: pure function)
|
|
28
|
+
*
|
|
29
|
+
* Matches term (case-insensitive) against abbreviation dictionary and returns
|
|
30
|
+
* all related forms (canonical + variants).
|
|
31
|
+
*
|
|
32
|
+
* @param term - Query term to expand (e.g., "db", "database", "config")
|
|
33
|
+
* @param abbreviations - Abbreviation dictionary (default: DEFAULT_ABBREVIATIONS)
|
|
34
|
+
* @returns Readonly array of expanded terms including canonical and all variants
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* expandAbbreviations("db") → ["database", "db", "data"]
|
|
38
|
+
* expandAbbreviations("config") → ["configuration", "config", "cfg", "conf"]
|
|
39
|
+
* expandAbbreviations("unknown") → ["unknown"]
|
|
40
|
+
*
|
|
41
|
+
* LDE properties:
|
|
42
|
+
* - Pure: Same input always produces same output
|
|
43
|
+
* - No side effects: Doesn't modify input or global state
|
|
44
|
+
* - Immutable: Returns readonly array
|
|
45
|
+
*/
|
|
46
|
+
export declare function expandAbbreviations(term: string, abbreviations?: readonly AbbreviationMap[]): readonly string[];
|
|
47
|
+
//# sourceMappingURL=abbreviations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abbreviations.d.ts","sourceRoot":"","sources":["../../../src/server/abbreviations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,eAAe,EAqB3D,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,aAAa,GAAE,SAAS,eAAe,EAA0B,GAChE,SAAS,MAAM,EAAE,CAenB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abbreviation expansion for path matching (ADR 003)
|
|
3
|
+
*
|
|
4
|
+
* Bridges the vocabulary gap between natural language queries and technical path names.
|
|
5
|
+
* Example: "database" → ["database", "db", "data"]
|
|
6
|
+
*
|
|
7
|
+
* LDE principles:
|
|
8
|
+
* - Pure functions (no side effects)
|
|
9
|
+
* - Readonly types (immutability)
|
|
10
|
+
* - Property-based testing
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Default abbreviation dictionary
|
|
14
|
+
*
|
|
15
|
+
* Maintenance: Add new entries as needed, alphabetically sorted by canonical
|
|
16
|
+
* Conflicts: Use most common meaning (e.g., "db" → "database" not "debug")
|
|
17
|
+
*/
|
|
18
|
+
export const DEFAULT_ABBREVIATIONS = [
|
|
19
|
+
{ canonical: "administrator", variants: ["admin"] },
|
|
20
|
+
{ canonical: "application", variants: ["app"] },
|
|
21
|
+
{ canonical: "authentication", variants: ["auth"] },
|
|
22
|
+
{ canonical: "authorization", variants: ["authz"] },
|
|
23
|
+
{ canonical: "configuration", variants: ["config", "cfg", "conf"] },
|
|
24
|
+
{ canonical: "controller", variants: ["ctrl"] },
|
|
25
|
+
{ canonical: "database", variants: ["db", "data"] },
|
|
26
|
+
{ canonical: "development", variants: ["dev"] },
|
|
27
|
+
{ canonical: "directory", variants: ["dir"] },
|
|
28
|
+
{ canonical: "document", variants: ["doc", "docs"] },
|
|
29
|
+
{ canonical: "error", variants: ["err", "errors"] },
|
|
30
|
+
{ canonical: "implementation", variants: ["impl"] },
|
|
31
|
+
{ canonical: "manager", variants: ["mgr"] },
|
|
32
|
+
{ canonical: "production", variants: ["prod"] },
|
|
33
|
+
{ canonical: "repository", variants: ["repo"] },
|
|
34
|
+
{ canonical: "service", variants: ["svc", "srv"] },
|
|
35
|
+
{ canonical: "source", variants: ["src"] },
|
|
36
|
+
{ canonical: "specification", variants: ["spec", "specs"] },
|
|
37
|
+
{ canonical: "temporary", variants: ["tmp", "temp"] },
|
|
38
|
+
{ canonical: "utilities", variants: ["util", "utils"] },
|
|
39
|
+
];
|
|
40
|
+
/**
|
|
41
|
+
* Expand term with common abbreviations (LDE: pure function)
|
|
42
|
+
*
|
|
43
|
+
* Matches term (case-insensitive) against abbreviation dictionary and returns
|
|
44
|
+
* all related forms (canonical + variants).
|
|
45
|
+
*
|
|
46
|
+
* @param term - Query term to expand (e.g., "db", "database", "config")
|
|
47
|
+
* @param abbreviations - Abbreviation dictionary (default: DEFAULT_ABBREVIATIONS)
|
|
48
|
+
* @returns Readonly array of expanded terms including canonical and all variants
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* expandAbbreviations("db") → ["database", "db", "data"]
|
|
52
|
+
* expandAbbreviations("config") → ["configuration", "config", "cfg", "conf"]
|
|
53
|
+
* expandAbbreviations("unknown") → ["unknown"]
|
|
54
|
+
*
|
|
55
|
+
* LDE properties:
|
|
56
|
+
* - Pure: Same input always produces same output
|
|
57
|
+
* - No side effects: Doesn't modify input or global state
|
|
58
|
+
* - Immutable: Returns readonly array
|
|
59
|
+
*/
|
|
60
|
+
export function expandAbbreviations(term, abbreviations = DEFAULT_ABBREVIATIONS) {
|
|
61
|
+
const normalized = term.toLowerCase().trim();
|
|
62
|
+
// Find matching abbreviation map (check both canonical and variants)
|
|
63
|
+
const map = abbreviations.find((m) => m.canonical === normalized || m.variants.includes(normalized));
|
|
64
|
+
if (map) {
|
|
65
|
+
// Return all forms: canonical + variants
|
|
66
|
+
return [map.canonical, ...map.variants];
|
|
67
|
+
}
|
|
68
|
+
// No match: return original term
|
|
69
|
+
return [term];
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=abbreviations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abbreviations.js","sourceRoot":"","sources":["../../../src/server/abbreviations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA+B;IAC/D,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IACnD,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IAC/C,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACnD,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IACnD,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;IACnE,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC/C,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;IACnD,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IAC/C,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IAC7C,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;IACpD,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;IACnD,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IACnD,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IAC3C,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC/C,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC/C,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;IAClD,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IAC1C,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAC3D,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;IACrD,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;CACxD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,gBAA4C,qBAAqB;IAEjE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAE7C,qEAAqE;IACrE,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CACrE,CAAC;IAEF,IAAI,GAAG,EAAE,CAAC;QACR,yCAAyC;QACzC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,iCAAiC;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boost Profile Configurations
|
|
3
|
+
*
|
|
4
|
+
* This module provides centralized configuration for boost_profile options.
|
|
5
|
+
* Each profile defines how different file types should be ranked in search results.
|
|
6
|
+
*
|
|
7
|
+
* Profiles:
|
|
8
|
+
* - default: Prioritizes implementation files over documentation
|
|
9
|
+
* - docs: Prioritizes documentation over implementation
|
|
10
|
+
* - balanced: Equal weight for both docs and implementation
|
|
11
|
+
* - none: No file type boosting (pure keyword scoring)
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Boost profile configuration
|
|
15
|
+
* Defines how different file types should be ranked
|
|
16
|
+
*/
|
|
17
|
+
export interface BoostProfileConfig {
|
|
18
|
+
/**
|
|
19
|
+
* Directories to allow even if they match global denylist patterns.
|
|
20
|
+
* Example: ["docs/"] allows docs/ files despite being blacklisted by default.
|
|
21
|
+
* This overrides the global blacklist in applyFileTypeBoost/applyAdditiveFilePenalties.
|
|
22
|
+
*/
|
|
23
|
+
denylistOverrides: string[];
|
|
24
|
+
/** Multiplicative factors for different file types */
|
|
25
|
+
fileTypeMultipliers: {
|
|
26
|
+
/** Documentation files (.md, .yaml, .yml, .mdc) */
|
|
27
|
+
doc: number;
|
|
28
|
+
/** Implementation files (src/**) */
|
|
29
|
+
impl: number;
|
|
30
|
+
/** Configuration files (tsconfig.json, package.json, etc.) */
|
|
31
|
+
config: number;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Path-specific multipliers (e.g., src/app/ gets higher boost than src/)
|
|
35
|
+
* Array is sorted by prefix length (longest first) to ensure correct matching priority
|
|
36
|
+
*/
|
|
37
|
+
pathMultipliers: Array<{
|
|
38
|
+
prefix: string;
|
|
39
|
+
multiplier: number;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Skip additive penalty for config files (-1.5 score penalty)
|
|
43
|
+
* and only apply multiplicative penalty (e.g., 0.3x multiplier)
|
|
44
|
+
* @default false
|
|
45
|
+
*/
|
|
46
|
+
skipConfigAdditivePenalty?: boolean;
|
|
47
|
+
}
|
|
48
|
+
export type BoostProfileName = "default" | "docs" | "none" | "balanced";
|
|
49
|
+
/**
|
|
50
|
+
* Boost profile definitions
|
|
51
|
+
* Centralized configuration for all boost profiles
|
|
52
|
+
*/
|
|
53
|
+
export declare const BOOST_PROFILES: Record<BoostProfileName, BoostProfileConfig>;
|
|
54
|
+
/**
|
|
55
|
+
* Get boost profile configuration by name
|
|
56
|
+
* @throws Error if profile name is invalid
|
|
57
|
+
*/
|
|
58
|
+
export declare function getBoostProfile(name: BoostProfileName): BoostProfileConfig;
|
|
59
|
+
/**
|
|
60
|
+
* Check if a profile name is valid
|
|
61
|
+
*/
|
|
62
|
+
export declare function isValidBoostProfile(name: string): name is BoostProfileName;
|
|
63
|
+
//# sourceMappingURL=boost-profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boost-profiles.d.ts","sourceRoot":"","sources":["../../../src/server/boost-profiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAE5B,sDAAsD;IACtD,mBAAmB,EAAE;QACnB,mDAAmD;QACnD,GAAG,EAAE,MAAM,CAAC;QACZ,oCAAoC;QACpC,IAAI,EAAE,MAAM,CAAC;QACb,8DAA8D;QAC9D,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF;;;OAGG;IACH,eAAe,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE/D;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAExE;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAqDvE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,CAS1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,gBAAgB,CAE1E"}
|