kiri-mcp-server 0.9.9 → 0.11.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 +60 -7
- package/config/scoring-profiles.yml +82 -35
- package/dist/config/scoring-profiles.yml +82 -35
- package/dist/package.json +12 -1
- package/dist/src/client/proxy.js +81 -12
- package/dist/src/client/proxy.js.map +1 -1
- package/dist/src/daemon/daemon.js +91 -14
- package/dist/src/daemon/daemon.js.map +1 -1
- package/dist/src/indexer/cli.d.ts.map +1 -1
- package/dist/src/indexer/cli.js +712 -98
- package/dist/src/indexer/cli.js.map +1 -1
- package/dist/src/indexer/git.d.ts.map +1 -1
- package/dist/src/indexer/git.js +41 -3
- package/dist/src/indexer/git.js.map +1 -1
- package/dist/src/indexer/migrations/repo-merger.d.ts +33 -0
- package/dist/src/indexer/migrations/repo-merger.d.ts.map +1 -0
- package/dist/src/indexer/migrations/repo-merger.js +67 -0
- package/dist/src/indexer/migrations/repo-merger.js.map +1 -0
- package/dist/src/indexer/schema.d.ts +66 -0
- package/dist/src/indexer/schema.d.ts.map +1 -1
- package/dist/src/indexer/schema.js +337 -0
- package/dist/src/indexer/schema.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 +202 -0
- package/dist/src/server/boost-profiles.js.map +1 -0
- package/dist/src/server/config.d.ts +45 -0
- package/dist/src/server/config.d.ts.map +1 -0
- package/dist/src/server/config.js +146 -0
- package/dist/src/server/config.js.map +1 -0
- package/dist/src/server/context.d.ts +29 -0
- package/dist/src/server/context.d.ts.map +1 -1
- package/dist/src/server/context.js +26 -1
- package/dist/src/server/context.js.map +1 -1
- package/dist/src/server/handlers/snippets-get.d.ts +36 -0
- package/dist/src/server/handlers/snippets-get.d.ts.map +1 -0
- package/dist/src/server/handlers/snippets-get.js +120 -0
- package/dist/src/server/handlers/snippets-get.js.map +1 -0
- package/dist/src/server/handlers.d.ts +35 -22
- package/dist/src/server/handlers.d.ts.map +1 -1
- package/dist/src/server/handlers.js +1993 -414
- 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 +49 -2
- 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 +119 -30
- package/dist/src/server/main.js.map +1 -1
- package/dist/src/server/profile-selector.d.ts +33 -0
- package/dist/src/server/profile-selector.d.ts.map +1 -0
- package/dist/src/server/profile-selector.js +291 -0
- package/dist/src/server/profile-selector.js.map +1 -0
- package/dist/src/server/rpc.d.ts.map +1 -1
- package/dist/src/server/rpc.js +61 -12
- 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 +14 -4
- package/dist/src/server/runtime.js.map +1 -1
- package/dist/src/server/scoring.d.ts +7 -1
- package/dist/src/server/scoring.d.ts.map +1 -1
- package/dist/src/server/scoring.js +121 -2
- package/dist/src/server/scoring.js.map +1 -1
- package/dist/src/server/services/index.d.ts +24 -0
- package/dist/src/server/services/index.d.ts.map +1 -0
- package/dist/src/server/services/index.js +20 -0
- package/dist/src/server/services/index.js.map +1 -0
- package/dist/src/server/services/repo-repository.d.ts +61 -0
- package/dist/src/server/services/repo-repository.d.ts.map +1 -0
- package/dist/src/server/services/repo-repository.js +93 -0
- package/dist/src/server/services/repo-repository.js.map +1 -0
- package/dist/src/server/services/repo-resolver.d.ts +28 -0
- package/dist/src/server/services/repo-resolver.d.ts.map +1 -0
- package/dist/src/server/services/repo-resolver.js +62 -0
- package/dist/src/server/services/repo-resolver.js.map +1 -0
- 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 +21 -1
- 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/fs/safePath.d.ts +7 -0
- package/dist/src/shared/fs/safePath.d.ts.map +1 -0
- package/dist/src/shared/fs/safePath.js +23 -0
- package/dist/src/shared/fs/safePath.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/glob.d.ts +5 -0
- package/dist/src/shared/utils/glob.d.ts.map +1 -0
- package/dist/src/shared/utils/glob.js +22 -0
- package/dist/src/shared/utils/glob.js.map +1 -0
- package/dist/src/shared/utils/retry.d.ts +8 -0
- package/dist/src/shared/utils/retry.d.ts.map +1 -0
- package/dist/src/shared/utils/retry.js +20 -0
- package/dist/src/shared/utils/retry.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 +29 -20
package/dist/src/server/main.js
CHANGED
|
@@ -3,7 +3,10 @@ import { createServer } from "node:http";
|
|
|
3
3
|
import { performance } from "node:perf_hooks";
|
|
4
4
|
import process from "node:process";
|
|
5
5
|
import { pathToFileURL } from "node:url";
|
|
6
|
+
import packageJson from "../../package.json" with { type: "json" };
|
|
6
7
|
import { IndexWatcher } from "../indexer/watch.js";
|
|
8
|
+
import { defineCli } from "../shared/cli/args.js";
|
|
9
|
+
import { parsePositiveInt } from "../shared/utils/validation.js";
|
|
7
10
|
import { ensureDatabaseIndexed } from "./indexBootstrap.js";
|
|
8
11
|
import { writeMetricsResponse } from "./observability/metrics.js";
|
|
9
12
|
import { createRpcHandler, errorResponse, validateJsonRpcRequest } from "./rpc.js";
|
|
@@ -97,6 +100,13 @@ export async function startServer(options) {
|
|
|
97
100
|
res.end();
|
|
98
101
|
}
|
|
99
102
|
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
105
|
+
const responseId = typeof payload.id === "string" || typeof payload.id === "number" ? payload.id : 0;
|
|
106
|
+
res.statusCode = 500;
|
|
107
|
+
res.end(JSON.stringify(errorResponse(responseId, message)));
|
|
108
|
+
console.error("RPC handler error:", error);
|
|
109
|
+
}
|
|
100
110
|
finally {
|
|
101
111
|
const elapsed = performance.now() - start;
|
|
102
112
|
runtime.metrics.recordRequest(elapsed);
|
|
@@ -124,35 +134,115 @@ export async function startServer(options) {
|
|
|
124
134
|
throw error;
|
|
125
135
|
}
|
|
126
136
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
137
|
+
/**
|
|
138
|
+
* CLI specification for kiri-server
|
|
139
|
+
*/
|
|
140
|
+
const SERVER_CLI_SPEC = {
|
|
141
|
+
commandName: "kiri-server",
|
|
142
|
+
description: "KIRI MCP Server - Serves MCP tools via HTTP or stdio",
|
|
143
|
+
version: packageJson.version,
|
|
144
|
+
usage: "kiri-server [options]",
|
|
145
|
+
sections: [
|
|
146
|
+
{
|
|
147
|
+
title: "Repository / Database",
|
|
148
|
+
options: [
|
|
149
|
+
{
|
|
150
|
+
flag: "repo",
|
|
151
|
+
type: "string",
|
|
152
|
+
description: "Repository root path",
|
|
153
|
+
placeholder: "<path>",
|
|
154
|
+
default: ".",
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
flag: "db",
|
|
158
|
+
type: "string",
|
|
159
|
+
description: "Database file path",
|
|
160
|
+
placeholder: "<path>",
|
|
161
|
+
default: "var/index.duckdb",
|
|
162
|
+
},
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
title: "Server Mode",
|
|
167
|
+
options: [
|
|
168
|
+
{
|
|
169
|
+
flag: "port",
|
|
170
|
+
type: "string",
|
|
171
|
+
description: "HTTP server port (default: 8765; omit for stdio mode)",
|
|
172
|
+
placeholder: "<port>",
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
title: "Indexing",
|
|
178
|
+
options: [
|
|
179
|
+
{
|
|
180
|
+
flag: "reindex",
|
|
181
|
+
type: "boolean",
|
|
182
|
+
description: "Force full re-indexing on startup",
|
|
183
|
+
default: false,
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
flag: "allow-degrade",
|
|
187
|
+
type: "boolean",
|
|
188
|
+
description: "Allow degraded mode without VSS/FTS extensions",
|
|
189
|
+
default: false,
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
title: "Watch Mode",
|
|
195
|
+
options: [
|
|
196
|
+
{
|
|
197
|
+
flag: "watch",
|
|
198
|
+
type: "boolean",
|
|
199
|
+
description: "Enable watch mode for automatic re-indexing",
|
|
200
|
+
default: false,
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
flag: "debounce",
|
|
204
|
+
type: "string",
|
|
205
|
+
description: "Debounce delay in milliseconds for watch mode",
|
|
206
|
+
placeholder: "<ms>",
|
|
207
|
+
default: "500",
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
title: "Security",
|
|
213
|
+
options: [
|
|
214
|
+
{
|
|
215
|
+
flag: "security-config",
|
|
216
|
+
type: "string",
|
|
217
|
+
description: "Security configuration file path",
|
|
218
|
+
placeholder: "<path>",
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
flag: "security-lock",
|
|
222
|
+
type: "string",
|
|
223
|
+
description: "Security lock file path",
|
|
224
|
+
placeholder: "<path>",
|
|
225
|
+
},
|
|
226
|
+
],
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
examples: [
|
|
230
|
+
"kiri-server --port 8765 --repo /path/to/repo",
|
|
231
|
+
"kiri-server --watch --debounce 1000",
|
|
232
|
+
"kiri-server --reindex --allow-degrade",
|
|
233
|
+
],
|
|
234
|
+
};
|
|
147
235
|
async function startHttpOrStdio() {
|
|
148
|
-
const
|
|
149
|
-
const
|
|
150
|
-
const
|
|
151
|
-
const
|
|
152
|
-
const
|
|
153
|
-
const
|
|
154
|
-
const
|
|
155
|
-
const
|
|
236
|
+
const { values } = defineCli(SERVER_CLI_SPEC);
|
|
237
|
+
const repoRoot = values.repo ?? ".";
|
|
238
|
+
const databasePath = values.db ?? "var/index.duckdb";
|
|
239
|
+
const securityConfigPath = values["security-config"];
|
|
240
|
+
const securityLockPath = values["security-lock"];
|
|
241
|
+
const allowDegrade = values["allow-degrade"] || false;
|
|
242
|
+
const forceReindex = values.reindex || false;
|
|
243
|
+
const watch = values.watch || false;
|
|
244
|
+
const debounceMs = parsePositiveInt(values.debounce, 500, "debounce delay");
|
|
245
|
+
const port = parsePositiveInt(values.port, 8765, "port number");
|
|
156
246
|
// Ensure database is indexed before starting server
|
|
157
247
|
await ensureDatabaseIndexed(repoRoot, databasePath, allowDegrade, forceReindex);
|
|
158
248
|
// Start watch mode in parallel with server if requested
|
|
@@ -174,8 +264,7 @@ async function startHttpOrStdio() {
|
|
|
174
264
|
process.on("SIGTERM", shutdownHandler);
|
|
175
265
|
await watcher.start();
|
|
176
266
|
}
|
|
177
|
-
if (
|
|
178
|
-
const port = parsePort(process.argv);
|
|
267
|
+
if (values.port) {
|
|
179
268
|
const options = {
|
|
180
269
|
port,
|
|
181
270
|
repoRoot,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/server/main.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAA2B,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/server/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic Boost Profile Selector
|
|
3
|
+
*
|
|
4
|
+
* Analyzes query text and automatically selects the most appropriate boost profile
|
|
5
|
+
* based on query intent and keywords.
|
|
6
|
+
*/
|
|
7
|
+
import type { BoostProfileName } from "./boost-profiles.js";
|
|
8
|
+
/**
|
|
9
|
+
* Analyzes query text and returns the most appropriate boost profile
|
|
10
|
+
*
|
|
11
|
+
* Performance: O(n) where n is the number of profiles (uses pre-compiled regex)
|
|
12
|
+
*
|
|
13
|
+
* @param query - Query text to analyze
|
|
14
|
+
* @param fallback - Fallback profile if no match found (default: "default")
|
|
15
|
+
* @returns Selected boost profile name
|
|
16
|
+
*/
|
|
17
|
+
export declare function selectProfileFromQuery(query: string, fallback?: BoostProfileName): BoostProfileName;
|
|
18
|
+
/**
|
|
19
|
+
* Explains why a particular profile was selected (for debugging/logging)
|
|
20
|
+
*
|
|
21
|
+
* @param query - Query text
|
|
22
|
+
* @param selectedProfile - The profile that was selected
|
|
23
|
+
* @returns Explanation string
|
|
24
|
+
*/
|
|
25
|
+
export declare function explainProfileSelection(query: string, selectedProfile: BoostProfileName): string;
|
|
26
|
+
/**
|
|
27
|
+
* Returns all available profiles and their patterns (for documentation)
|
|
28
|
+
*/
|
|
29
|
+
export declare function getAvailableProfiles(): Array<{
|
|
30
|
+
profile: BoostProfileName;
|
|
31
|
+
keywords: string[];
|
|
32
|
+
}>;
|
|
33
|
+
//# sourceMappingURL=profile-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-selector.d.ts","sourceRoot":"","sources":["../../../src/server/profile-selector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA6P5D;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,gBAA4B,GACrC,gBAAgB,CAyBlB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,GAAG,MAAM,CAqBhG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,KAAK,CAAC;IAC5C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CAKD"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic Boost Profile Selector
|
|
3
|
+
*
|
|
4
|
+
* Analyzes query text and automatically selects the most appropriate boost profile
|
|
5
|
+
* based on query intent and keywords.
|
|
6
|
+
*/
|
|
7
|
+
const PROFILE_PATTERNS = [
|
|
8
|
+
// Test-related queries (English + Japanese)
|
|
9
|
+
{
|
|
10
|
+
profile: "testfail",
|
|
11
|
+
keywords: [
|
|
12
|
+
// English
|
|
13
|
+
"test fail",
|
|
14
|
+
"test error",
|
|
15
|
+
"test crash",
|
|
16
|
+
"failing test",
|
|
17
|
+
"broken test",
|
|
18
|
+
"test suite",
|
|
19
|
+
"test case",
|
|
20
|
+
"unit test",
|
|
21
|
+
"integration test",
|
|
22
|
+
"spec fail",
|
|
23
|
+
"flaky test",
|
|
24
|
+
"test timeout",
|
|
25
|
+
"snapshot test",
|
|
26
|
+
"e2e test",
|
|
27
|
+
// Japanese (shorter for better partial matching, specific to tests)
|
|
28
|
+
"テストが", // More specific
|
|
29
|
+
"テスト",
|
|
30
|
+
"失敗",
|
|
31
|
+
"壊れ",
|
|
32
|
+
"スイート",
|
|
33
|
+
"ケース",
|
|
34
|
+
"ユニット",
|
|
35
|
+
"統合",
|
|
36
|
+
"通らない",
|
|
37
|
+
"スナップショット",
|
|
38
|
+
],
|
|
39
|
+
weight: 10,
|
|
40
|
+
},
|
|
41
|
+
// Type error queries (English + Japanese)
|
|
42
|
+
{
|
|
43
|
+
profile: "typeerror",
|
|
44
|
+
keywords: [
|
|
45
|
+
// English
|
|
46
|
+
"type error",
|
|
47
|
+
"typescript error",
|
|
48
|
+
"type mismatch",
|
|
49
|
+
"cannot assign",
|
|
50
|
+
"property does not exist",
|
|
51
|
+
"type definition",
|
|
52
|
+
"interface",
|
|
53
|
+
"type check",
|
|
54
|
+
"type guard",
|
|
55
|
+
"generic type",
|
|
56
|
+
"return type",
|
|
57
|
+
// Japanese (shorter for better partial matching)
|
|
58
|
+
"型エラー", // More specific first
|
|
59
|
+
"型",
|
|
60
|
+
"type",
|
|
61
|
+
"typescript",
|
|
62
|
+
"不一致",
|
|
63
|
+
"定義",
|
|
64
|
+
"インターフェース",
|
|
65
|
+
"チェック",
|
|
66
|
+
"推論",
|
|
67
|
+
"ジェネリック",
|
|
68
|
+
"返り値",
|
|
69
|
+
"プロパティ",
|
|
70
|
+
],
|
|
71
|
+
weight: 11, // Higher weight to beat "error" in testfail
|
|
72
|
+
},
|
|
73
|
+
// Bug fix queries (English + Japanese)
|
|
74
|
+
{
|
|
75
|
+
profile: "bugfix",
|
|
76
|
+
keywords: [
|
|
77
|
+
// English
|
|
78
|
+
"fix bug",
|
|
79
|
+
"bug fix",
|
|
80
|
+
"resolve issue",
|
|
81
|
+
"crash",
|
|
82
|
+
"error",
|
|
83
|
+
"broken",
|
|
84
|
+
"not working",
|
|
85
|
+
"regression",
|
|
86
|
+
"memory leak",
|
|
87
|
+
"race condition",
|
|
88
|
+
"null pointer",
|
|
89
|
+
// Japanese (shorter for better partial matching)
|
|
90
|
+
"バグ",
|
|
91
|
+
"修正",
|
|
92
|
+
"不具合",
|
|
93
|
+
"クラッシュ",
|
|
94
|
+
"動かない",
|
|
95
|
+
"リグレッション",
|
|
96
|
+
"メモリリーク",
|
|
97
|
+
"競合",
|
|
98
|
+
],
|
|
99
|
+
weight: 8,
|
|
100
|
+
},
|
|
101
|
+
// Debug queries (English + Japanese)
|
|
102
|
+
{
|
|
103
|
+
profile: "debug",
|
|
104
|
+
keywords: [
|
|
105
|
+
// English
|
|
106
|
+
"debug",
|
|
107
|
+
"debugger",
|
|
108
|
+
"console log",
|
|
109
|
+
"trace",
|
|
110
|
+
"inspect",
|
|
111
|
+
"troubleshoot",
|
|
112
|
+
"diagnose",
|
|
113
|
+
// Japanese (shorter for better partial matching)
|
|
114
|
+
"デバッグ",
|
|
115
|
+
"デバッガ",
|
|
116
|
+
"ログ",
|
|
117
|
+
"トレース",
|
|
118
|
+
"診断",
|
|
119
|
+
"トラブル",
|
|
120
|
+
"調査",
|
|
121
|
+
],
|
|
122
|
+
weight: 8,
|
|
123
|
+
},
|
|
124
|
+
// API-related queries (English + Japanese)
|
|
125
|
+
{
|
|
126
|
+
profile: "api",
|
|
127
|
+
keywords: [
|
|
128
|
+
// English
|
|
129
|
+
"api",
|
|
130
|
+
"endpoint",
|
|
131
|
+
"rest",
|
|
132
|
+
"graphql",
|
|
133
|
+
"request",
|
|
134
|
+
"response",
|
|
135
|
+
"route",
|
|
136
|
+
"controller",
|
|
137
|
+
"http",
|
|
138
|
+
"handler",
|
|
139
|
+
// Japanese (shorter for better partial matching)
|
|
140
|
+
"エンドポイント",
|
|
141
|
+
"リクエスト",
|
|
142
|
+
"レスポンス",
|
|
143
|
+
"ルート",
|
|
144
|
+
"コントローラ",
|
|
145
|
+
"ハンドラ",
|
|
146
|
+
],
|
|
147
|
+
weight: 7,
|
|
148
|
+
},
|
|
149
|
+
// Editor/UI queries (English + Japanese)
|
|
150
|
+
{
|
|
151
|
+
profile: "editor",
|
|
152
|
+
keywords: [
|
|
153
|
+
// English
|
|
154
|
+
"editor",
|
|
155
|
+
"ui",
|
|
156
|
+
"component",
|
|
157
|
+
"render",
|
|
158
|
+
"display",
|
|
159
|
+
"view",
|
|
160
|
+
"layout",
|
|
161
|
+
"style",
|
|
162
|
+
// Japanese (shorter for better partial matching)
|
|
163
|
+
"エディタ",
|
|
164
|
+
"コンポーネント",
|
|
165
|
+
"レンダリング",
|
|
166
|
+
"表示",
|
|
167
|
+
"ビュー",
|
|
168
|
+
"レイアウト",
|
|
169
|
+
"スタイル",
|
|
170
|
+
],
|
|
171
|
+
weight: 7,
|
|
172
|
+
},
|
|
173
|
+
// Feature development queries (English + Japanese)
|
|
174
|
+
{
|
|
175
|
+
profile: "feature",
|
|
176
|
+
keywords: [
|
|
177
|
+
// English
|
|
178
|
+
"add feature",
|
|
179
|
+
"new feature",
|
|
180
|
+
"implement",
|
|
181
|
+
"create",
|
|
182
|
+
"build",
|
|
183
|
+
"develop",
|
|
184
|
+
// Japanese (shorter for better partial matching)
|
|
185
|
+
"新機能",
|
|
186
|
+
"機能",
|
|
187
|
+
"実装",
|
|
188
|
+
"開発",
|
|
189
|
+
"作成",
|
|
190
|
+
"構築",
|
|
191
|
+
],
|
|
192
|
+
weight: 5,
|
|
193
|
+
},
|
|
194
|
+
// Performance queries (English + Japanese)
|
|
195
|
+
{
|
|
196
|
+
profile: "debug", // Map performance queries to debug
|
|
197
|
+
keywords: [
|
|
198
|
+
// English
|
|
199
|
+
"performance",
|
|
200
|
+
"slow",
|
|
201
|
+
"bottleneck",
|
|
202
|
+
"latency",
|
|
203
|
+
"optimization",
|
|
204
|
+
"optimize",
|
|
205
|
+
// Japanese (shorter for better partial matching)
|
|
206
|
+
"パフォーマンス",
|
|
207
|
+
"遅い",
|
|
208
|
+
"ボトルネック",
|
|
209
|
+
"最適化",
|
|
210
|
+
"高速",
|
|
211
|
+
],
|
|
212
|
+
weight: 6,
|
|
213
|
+
},
|
|
214
|
+
];
|
|
215
|
+
const COMPILED_PATTERNS = PROFILE_PATTERNS.map((pattern) => {
|
|
216
|
+
// Escape special regex characters and create alternation pattern
|
|
217
|
+
const escapedKeywords = pattern.keywords.map((k) => k.toLowerCase().replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
|
|
218
|
+
const regexPattern = escapedKeywords.join("|");
|
|
219
|
+
return {
|
|
220
|
+
profile: pattern.profile,
|
|
221
|
+
regex: new RegExp(regexPattern, "gi"), // 'g' for global matching, 'i' for case-insensitive
|
|
222
|
+
weight: pattern.weight,
|
|
223
|
+
keywords: pattern.keywords,
|
|
224
|
+
};
|
|
225
|
+
});
|
|
226
|
+
/**
|
|
227
|
+
* Analyzes query text and returns the most appropriate boost profile
|
|
228
|
+
*
|
|
229
|
+
* Performance: O(n) where n is the number of profiles (uses pre-compiled regex)
|
|
230
|
+
*
|
|
231
|
+
* @param query - Query text to analyze
|
|
232
|
+
* @param fallback - Fallback profile if no match found (default: "default")
|
|
233
|
+
* @returns Selected boost profile name
|
|
234
|
+
*/
|
|
235
|
+
export function selectProfileFromQuery(query, fallback = "default") {
|
|
236
|
+
const normalizedQuery = query.toLowerCase().trim();
|
|
237
|
+
if (normalizedQuery.length === 0) {
|
|
238
|
+
return fallback;
|
|
239
|
+
}
|
|
240
|
+
let bestMatch = fallback;
|
|
241
|
+
let highestScore = 0;
|
|
242
|
+
for (const pattern of COMPILED_PATTERNS) {
|
|
243
|
+
// Count all matches using the regex
|
|
244
|
+
const matches = normalizedQuery.match(pattern.regex);
|
|
245
|
+
const matchCount = matches ? matches.length : 0;
|
|
246
|
+
if (matchCount > 0) {
|
|
247
|
+
const score = matchCount * pattern.weight;
|
|
248
|
+
if (score > highestScore) {
|
|
249
|
+
highestScore = score;
|
|
250
|
+
bestMatch = pattern.profile;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return bestMatch;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Explains why a particular profile was selected (for debugging/logging)
|
|
258
|
+
*
|
|
259
|
+
* @param query - Query text
|
|
260
|
+
* @param selectedProfile - The profile that was selected
|
|
261
|
+
* @returns Explanation string
|
|
262
|
+
*/
|
|
263
|
+
export function explainProfileSelection(query, selectedProfile) {
|
|
264
|
+
const normalizedQuery = query.toLowerCase().trim();
|
|
265
|
+
const matchedKeywords = [];
|
|
266
|
+
for (const pattern of COMPILED_PATTERNS) {
|
|
267
|
+
if (pattern.profile === selectedProfile) {
|
|
268
|
+
// Use original keywords for more readable explanation
|
|
269
|
+
for (const keyword of pattern.keywords) {
|
|
270
|
+
if (normalizedQuery.includes(keyword.toLowerCase())) {
|
|
271
|
+
matchedKeywords.push(keyword);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (matchedKeywords.length === 0) {
|
|
278
|
+
return `Using fallback profile: ${selectedProfile}`;
|
|
279
|
+
}
|
|
280
|
+
return `Selected "${selectedProfile}" based on keywords: ${matchedKeywords.join(", ")}`;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Returns all available profiles and their patterns (for documentation)
|
|
284
|
+
*/
|
|
285
|
+
export function getAvailableProfiles() {
|
|
286
|
+
return PROFILE_PATTERNS.map((p) => ({
|
|
287
|
+
profile: p.profile,
|
|
288
|
+
keywords: p.keywords,
|
|
289
|
+
}));
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=profile-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-selector.js","sourceRoot":"","sources":["../../../src/server/profile-selector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../../src/server/rpc.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../../src/server/rpc.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAarE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAI7D;;;;;;;;GAQG;AACH,UAAU,yBAAyB;IACjC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,wBAAwB,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CAC9C;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAE3C;;;;OAIG;gBACS,iBAAiB,GAAE,MAAa,EAAE,WAAW,CAAC,EAAE,yBAAyB;IAQrF;;;OAGG;IACH,IAAI,IAAI,cAAc;IAItB;;;;OAIG;IACH,YAAY,IAAI,IAAI;IAIpB;;;;OAIG;IACH,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAE/B;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAE,OAAe,GAAG,OAAO;IA0B7E;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAWlD;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,YAAY,CAAC;AAE5D,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AA8gBD,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,cAAc,CAEpF;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAC1B,OAAO,EAAE,MAAM,EACf,IAAI,SAAS,GACZ,YAAY,CAEd;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAK7E;AAsED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,sBAAsB,GACnC,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAwO9D"}
|