kiri-mcp-server 0.2.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/LICENSE +21 -0
- package/README.md +399 -0
- package/config/default.example.yml +12 -0
- package/config/denylist.yml +15 -0
- package/config/scoring-profiles.yml +37 -0
- package/config/security.yml +10 -0
- 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/config/default.example.yml +12 -0
- package/dist/config/denylist.yml +15 -0
- package/dist/config/scoring-profiles.yml +37 -0
- package/dist/config/security.yml +10 -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 +93 -0
- package/dist/server/bootstrap.js +19 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/context.js +2 -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 +800 -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 +111 -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 +121 -0
- package/dist/shared/duckdb.js.map +1 -0
- package/dist/shared/embedding.js +85 -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 +5 -0
- package/dist/shared/tokenizer.js.map +1 -0
- package/dist/shared/utils/simpleYaml.js +90 -0
- package/dist/shared/utils/simpleYaml.js.map +1 -0
- package/dist/sql/schema.sql +6 -0
- package/dist/src/client/cli.d.ts +3 -0
- package/dist/src/client/cli.d.ts.map +1 -0
- package/dist/src/client/cli.js +68 -0
- package/dist/src/client/cli.js.map +1 -0
- package/dist/src/client/index.d.ts +5 -0
- package/dist/src/client/index.d.ts.map +1 -0
- package/dist/src/client/index.js +5 -0
- package/dist/src/client/index.js.map +1 -0
- package/dist/src/client/proxy.d.ts +9 -0
- package/dist/src/client/proxy.d.ts.map +1 -0
- package/dist/src/client/proxy.js +198 -0
- package/dist/src/client/proxy.js.map +1 -0
- package/dist/src/client/start-daemon.d.ts +30 -0
- package/dist/src/client/start-daemon.d.ts.map +1 -0
- package/dist/src/client/start-daemon.js +175 -0
- package/dist/src/client/start-daemon.js.map +1 -0
- package/dist/src/daemon/daemon.d.ts +9 -0
- package/dist/src/daemon/daemon.d.ts.map +1 -0
- package/dist/src/daemon/daemon.js +149 -0
- package/dist/src/daemon/daemon.js.map +1 -0
- package/dist/src/daemon/lifecycle.d.ts +101 -0
- package/dist/src/daemon/lifecycle.d.ts.map +1 -0
- package/dist/src/daemon/lifecycle.js +266 -0
- package/dist/src/daemon/lifecycle.js.map +1 -0
- package/dist/src/daemon/socket.d.ts +26 -0
- package/dist/src/daemon/socket.d.ts.map +1 -0
- package/dist/src/daemon/socket.js +132 -0
- package/dist/src/daemon/socket.js.map +1 -0
- package/dist/src/eval/metrics.d.ts +23 -0
- package/dist/src/eval/metrics.d.ts.map +1 -0
- package/dist/src/eval/metrics.js +47 -0
- package/dist/src/eval/metrics.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +11 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/indexer/cli.d.ts +9 -0
- package/dist/src/indexer/cli.d.ts.map +1 -0
- package/dist/src/indexer/cli.js +402 -0
- package/dist/src/indexer/cli.js.map +1 -0
- package/dist/src/indexer/codeintel.d.ts +28 -0
- package/dist/src/indexer/codeintel.d.ts.map +1 -0
- package/dist/src/indexer/codeintel.js +451 -0
- package/dist/src/indexer/codeintel.js.map +1 -0
- package/dist/src/indexer/git.d.ts +4 -0
- package/dist/src/indexer/git.d.ts.map +1 -0
- package/dist/src/indexer/git.js +30 -0
- package/dist/src/indexer/git.js.map +1 -0
- package/dist/src/indexer/language.d.ts +2 -0
- package/dist/src/indexer/language.d.ts.map +1 -0
- package/dist/src/indexer/language.js +34 -0
- package/dist/src/indexer/language.js.map +1 -0
- package/dist/src/indexer/pipeline/filters/denylist.d.ts +10 -0
- package/dist/src/indexer/pipeline/filters/denylist.d.ts.map +1 -0
- package/dist/src/indexer/pipeline/filters/denylist.js +71 -0
- package/dist/src/indexer/pipeline/filters/denylist.js.map +1 -0
- package/dist/src/indexer/schema.d.ts +9 -0
- package/dist/src/indexer/schema.d.ts.map +1 -0
- package/dist/src/indexer/schema.js +125 -0
- package/dist/src/indexer/schema.js.map +1 -0
- package/dist/src/indexer/watch.d.ts +97 -0
- package/dist/src/indexer/watch.d.ts.map +1 -0
- package/dist/src/indexer/watch.js +264 -0
- package/dist/src/indexer/watch.js.map +1 -0
- package/dist/src/server/bootstrap.d.ts +11 -0
- package/dist/src/server/bootstrap.d.ts.map +1 -0
- package/dist/src/server/bootstrap.js +19 -0
- package/dist/src/server/bootstrap.js.map +1 -0
- package/dist/src/server/context.d.ts +9 -0
- package/dist/src/server/context.d.ts.map +1 -0
- package/dist/src/server/context.js +2 -0
- package/dist/src/server/context.js.map +1 -0
- package/dist/src/server/fallbacks/degradeController.d.ts +24 -0
- package/dist/src/server/fallbacks/degradeController.d.ts.map +1 -0
- package/dist/src/server/fallbacks/degradeController.js +135 -0
- package/dist/src/server/fallbacks/degradeController.js.map +1 -0
- package/dist/src/server/handlers.d.ts +105 -0
- package/dist/src/server/handlers.d.ts.map +1 -0
- package/dist/src/server/handlers.js +954 -0
- package/dist/src/server/handlers.js.map +1 -0
- package/dist/src/server/indexBootstrap.d.ts +13 -0
- package/dist/src/server/indexBootstrap.d.ts.map +1 -0
- package/dist/src/server/indexBootstrap.js +109 -0
- package/dist/src/server/indexBootstrap.js.map +1 -0
- package/dist/src/server/main.d.ts +10 -0
- package/dist/src/server/main.d.ts.map +1 -0
- package/dist/src/server/main.js +217 -0
- package/dist/src/server/main.js.map +1 -0
- package/dist/src/server/observability/metrics.d.ts +35 -0
- package/dist/src/server/observability/metrics.d.ts.map +1 -0
- package/dist/src/server/observability/metrics.js +70 -0
- package/dist/src/server/observability/metrics.js.map +1 -0
- package/dist/src/server/observability/tracing.d.ts +3 -0
- package/dist/src/server/observability/tracing.d.ts.map +1 -0
- package/dist/src/server/observability/tracing.js +58 -0
- package/dist/src/server/observability/tracing.js.map +1 -0
- package/dist/src/server/rpc.d.ts +39 -0
- package/dist/src/server/rpc.d.ts.map +1 -0
- package/dist/src/server/rpc.js +551 -0
- package/dist/src/server/rpc.js.map +1 -0
- package/dist/src/server/runtime.d.ts +21 -0
- package/dist/src/server/runtime.d.ts.map +1 -0
- package/dist/src/server/runtime.js +59 -0
- package/dist/src/server/runtime.js.map +1 -0
- package/dist/src/server/scoring.d.ts +20 -0
- package/dist/src/server/scoring.d.ts.map +1 -0
- package/dist/src/server/scoring.js +112 -0
- package/dist/src/server/scoring.js.map +1 -0
- package/dist/src/server/stdio.d.ts +4 -0
- package/dist/src/server/stdio.d.ts.map +1 -0
- package/dist/src/server/stdio.js +88 -0
- package/dist/src/server/stdio.js.map +1 -0
- package/dist/src/shared/duckdb.d.ts +16 -0
- package/dist/src/shared/duckdb.d.ts.map +1 -0
- package/dist/src/shared/duckdb.js +121 -0
- package/dist/src/shared/duckdb.js.map +1 -0
- package/dist/src/shared/embedding.d.ts +19 -0
- package/dist/src/shared/embedding.d.ts.map +1 -0
- package/dist/src/shared/embedding.js +85 -0
- package/dist/src/shared/embedding.js.map +1 -0
- package/dist/src/shared/index.d.ts +3 -0
- package/dist/src/shared/index.d.ts.map +1 -0
- package/dist/src/shared/index.js +9 -0
- package/dist/src/shared/index.js.map +1 -0
- package/dist/src/shared/security/config.d.ts +23 -0
- package/dist/src/shared/security/config.d.ts.map +1 -0
- package/dist/src/shared/security/config.js +66 -0
- package/dist/src/shared/security/config.js.map +1 -0
- package/dist/src/shared/security/masker.d.ts +10 -0
- package/dist/src/shared/security/masker.d.ts.map +1 -0
- package/dist/src/shared/security/masker.js +56 -0
- package/dist/src/shared/security/masker.js.map +1 -0
- package/dist/src/shared/tokenizer.d.ts +2 -0
- package/dist/src/shared/tokenizer.d.ts.map +1 -0
- package/dist/src/shared/tokenizer.js +5 -0
- package/dist/src/shared/tokenizer.js.map +1 -0
- package/dist/src/shared/utils/lockfile.d.ts +46 -0
- package/dist/src/shared/utils/lockfile.d.ts.map +1 -0
- package/dist/src/shared/utils/lockfile.js +136 -0
- package/dist/src/shared/utils/lockfile.js.map +1 -0
- package/dist/src/shared/utils/simpleYaml.d.ts +6 -0
- package/dist/src/shared/utils/simpleYaml.d.ts.map +1 -0
- package/dist/src/shared/utils/simpleYaml.js +90 -0
- package/dist/src/shared/utils/simpleYaml.js.map +1 -0
- package/package.json +91 -0
- package/sql/schema.sql +6 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../../../src/server/observability/tracing.ts"],"names":[],"mappings":"AAEA,IAAI,aAEK,CAAC;AAEV,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBAC/C,OAAO;oBACL,eAAe,EAAE,KAAK,EAAE,IAAY,EAAE,EAAoC,EAAE,EAAE;wBAC5E,OAAO,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;4BAC5E,IAAI,CAAC;gCACH,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;4BACxB,CAAC;oCAAS,CAAC;gCACT,IAAI,CAAC,GAAG,EAAE,CAAC;4BACb,CAAC;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC;iBACF,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAI,IAAY,EAAE,EAAqC;IACnF,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YAC9B,iBAAiB;YACjB,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;YACjD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yBAAyB;YACzB,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,CAAC,EAAE,uBAAuB;gBAChC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAChE,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACjC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACxD,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBAClD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChB,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC,CAAC,eAAe;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ServerContext } from "./context.js";
|
|
2
|
+
import { DegradeController } from "./fallbacks/degradeController.js";
|
|
3
|
+
import { MetricsRegistry } from "./observability/metrics.js";
|
|
4
|
+
export interface JsonRpcRequest {
|
|
5
|
+
jsonrpc?: string;
|
|
6
|
+
id?: unknown;
|
|
7
|
+
method?: string;
|
|
8
|
+
params?: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface JsonRpcSuccess {
|
|
11
|
+
jsonrpc: "2.0";
|
|
12
|
+
id: string | number | null;
|
|
13
|
+
result: unknown;
|
|
14
|
+
}
|
|
15
|
+
export interface JsonRpcError {
|
|
16
|
+
jsonrpc: "2.0";
|
|
17
|
+
id: string | number | null;
|
|
18
|
+
error: {
|
|
19
|
+
code: number;
|
|
20
|
+
message: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export type JsonRpcResponse = JsonRpcSuccess | JsonRpcError;
|
|
24
|
+
export interface RpcHandlerDependencies {
|
|
25
|
+
context: ServerContext;
|
|
26
|
+
degrade: DegradeController;
|
|
27
|
+
metrics: MetricsRegistry;
|
|
28
|
+
tokens: string[];
|
|
29
|
+
allowDegrade: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface RpcHandleResult {
|
|
32
|
+
response: JsonRpcResponse;
|
|
33
|
+
statusCode: number;
|
|
34
|
+
}
|
|
35
|
+
export declare function successResponse(id: string | number, result: unknown): JsonRpcSuccess;
|
|
36
|
+
export declare function errorResponse(id: string | number | null, message: string, code?: number): JsonRpcError;
|
|
37
|
+
export declare function validateJsonRpcRequest(payload: JsonRpcRequest): string | null;
|
|
38
|
+
export declare function createRpcHandler(dependencies: RpcHandlerDependencies): (payload: JsonRpcRequest) => Promise<RpcHandleResult | null>;
|
|
39
|
+
//# sourceMappingURL=rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../../src/server/rpc.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAarE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,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;AAyWD,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;AAqED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,sBAAsB,GACnC,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAwN9D"}
|
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
import packageJson from "../../package.json" with { type: "json" };
|
|
2
|
+
import { maskValue } from "../shared/security/masker.js";
|
|
3
|
+
import { contextBundle, depsClosure, filesSearch, semanticRerank, snippetsGet, } from "./handlers.js";
|
|
4
|
+
import { withSpan } from "./observability/tracing.js";
|
|
5
|
+
const SERVER_INFO = {
|
|
6
|
+
name: "kiri",
|
|
7
|
+
version: typeof packageJson?.version === "string" ? packageJson.version : "0.0.0",
|
|
8
|
+
};
|
|
9
|
+
const TOOL_DESCRIPTORS = [
|
|
10
|
+
{
|
|
11
|
+
name: "context.bundle",
|
|
12
|
+
description: "🎯 PRIMARY TOOL: Extract relevant code context for any task or goal. Intelligently finds related files using keyword matching, dependency analysis, file proximity, and semantic similarity. Returns ranked code snippets with explanations of relevance. USE THIS FIRST for: implementing new features, fixing bugs, understanding how existing code works, exploring architecture, or any code comprehension task. Automatically handles token optimization by returning only the most relevant snippets. Example: goal='How does authentication work?' returns auth-related code with reasons like 'text:auth', 'dep:login.ts', 'symbol:authenticate'.",
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: "object",
|
|
15
|
+
required: ["goal"],
|
|
16
|
+
additionalProperties: true,
|
|
17
|
+
properties: {
|
|
18
|
+
goal: { type: "string", description: "Description of the task or goal to accomplish." },
|
|
19
|
+
limit: {
|
|
20
|
+
type: "number",
|
|
21
|
+
minimum: 1,
|
|
22
|
+
maximum: 20,
|
|
23
|
+
description: "Maximum number of snippets to return. Default is 12.",
|
|
24
|
+
},
|
|
25
|
+
profile: { type: "string", description: "Evaluation profile name." },
|
|
26
|
+
boost_profile: {
|
|
27
|
+
type: "string",
|
|
28
|
+
enum: ["default", "docs", "none"],
|
|
29
|
+
description: 'File type boosting mode: "default" prioritizes implementation files (src/*.ts), "docs" prioritizes documentation (*.md), "none" disables boosting. Default is "default".',
|
|
30
|
+
},
|
|
31
|
+
artifacts: {
|
|
32
|
+
type: "object",
|
|
33
|
+
additionalProperties: true,
|
|
34
|
+
properties: {
|
|
35
|
+
editing_path: {
|
|
36
|
+
type: "string",
|
|
37
|
+
description: "Path to the file currently being edited.",
|
|
38
|
+
},
|
|
39
|
+
failing_tests: {
|
|
40
|
+
type: "array",
|
|
41
|
+
items: { type: "string" },
|
|
42
|
+
description: "Names of failing test cases.",
|
|
43
|
+
},
|
|
44
|
+
last_diff: { type: "string", description: "Recent diff content." },
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: "semantic.rerank",
|
|
52
|
+
description: "Re-rank a list of file candidates by semantic similarity to a query text. Uses structural embeddings to compute similarity scores and combines them with existing scores. Use as a REFINEMENT step after files.search or when you have a list of candidates and want to prioritize them by semantic relevance. Not needed with context.bundle (which already does semantic ranking internally). Returns candidates sorted by combined score (base + semantic similarity). Example: after getting 20 search results, rerank them by semantic similarity to 'user authentication flow' to surface the most contextually relevant files.",
|
|
53
|
+
inputSchema: {
|
|
54
|
+
type: "object",
|
|
55
|
+
required: ["text", "candidates"],
|
|
56
|
+
additionalProperties: true,
|
|
57
|
+
properties: {
|
|
58
|
+
text: { type: "string", description: "Query or goal text for similarity comparison." },
|
|
59
|
+
candidates: {
|
|
60
|
+
type: "array",
|
|
61
|
+
items: {
|
|
62
|
+
type: "object",
|
|
63
|
+
required: ["path"],
|
|
64
|
+
additionalProperties: true,
|
|
65
|
+
properties: {
|
|
66
|
+
path: { type: "string" },
|
|
67
|
+
score: { type: "number" },
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
k: { type: "number", minimum: 1, description: "Number of top results to return." },
|
|
72
|
+
profile: { type: "string" },
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: "files.search",
|
|
78
|
+
description: "Search files by keyword with full-text indexing (BM25 ranking when FTS extension is available, falls back to ILIKE pattern matching). Use when you know SPECIFIC identifiers: function names, class names, error messages, log strings, or exact code patterns. Returns matching files with previews and line numbers. For broader exploration like 'understand feature X' or 'how does Y work', prefer context.bundle instead. Supports filters: lang (e.g., 'typescript'), ext (e.g., '.ts'), path_prefix (e.g., 'src/auth/'). Example: query='validateToken' finds files containing that function name.",
|
|
79
|
+
inputSchema: {
|
|
80
|
+
type: "object",
|
|
81
|
+
required: ["query"],
|
|
82
|
+
additionalProperties: true,
|
|
83
|
+
properties: {
|
|
84
|
+
query: { type: "string" },
|
|
85
|
+
lang: { type: "string" },
|
|
86
|
+
ext: { type: "string" },
|
|
87
|
+
path_prefix: { type: "string" },
|
|
88
|
+
limit: { type: "number", minimum: 1, maximum: 200 },
|
|
89
|
+
boost_profile: {
|
|
90
|
+
type: "string",
|
|
91
|
+
enum: ["default", "docs", "none"],
|
|
92
|
+
description: 'File type boosting mode: "default" prioritizes implementation files (src/*.ts), "docs" prioritizes documentation (*.md), "none" disables boosting. Default is "default".',
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: "snippets.get",
|
|
99
|
+
description: "Retrieve code snippets from a specific file path. Intelligently extracts relevant code sections using symbol boundaries (functions, classes, methods) when available. Use when you already know the exact file path and want to read its content efficiently without loading the entire file. Automatically selects appropriate snippet based on start_line or returns symbol-aligned chunks. Reduces token usage compared to reading full files. Use context.bundle instead if you don't know which file to read. Example: path='src/auth/login.ts' returns the most relevant function or class in that file.",
|
|
100
|
+
inputSchema: {
|
|
101
|
+
type: "object",
|
|
102
|
+
required: ["path"],
|
|
103
|
+
additionalProperties: true,
|
|
104
|
+
properties: {
|
|
105
|
+
path: { type: "string" },
|
|
106
|
+
start_line: { type: "number", minimum: 0 },
|
|
107
|
+
end_line: { type: "number", minimum: 0 },
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: "deps.closure",
|
|
113
|
+
description: "Traverse the dependency graph from a starting file. Finds all files that depend on the target (inbound) or that the target depends on (outbound). Essential for impact analysis: understanding what breaks if you change a file, tracing import chains, or mapping module relationships. Returns nodes (files/packages) and edges (import statements) with depth levels. Use when: planning refactoring, understanding module boundaries, finding circular dependencies, or analyzing affected files. Example: path='src/utils.ts', direction='inbound' shows all files importing utils.ts. Set max_depth to limit traversal (default 3).",
|
|
114
|
+
inputSchema: {
|
|
115
|
+
type: "object",
|
|
116
|
+
required: ["path"],
|
|
117
|
+
additionalProperties: true,
|
|
118
|
+
properties: {
|
|
119
|
+
path: { type: "string" },
|
|
120
|
+
max_depth: { type: "number", minimum: 0 },
|
|
121
|
+
direction: { type: "string", enum: ["outbound", "inbound"] },
|
|
122
|
+
include_packages: { type: "boolean" },
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
];
|
|
127
|
+
const INITIALIZE_PAYLOAD = {
|
|
128
|
+
protocolVersion: "2024-11-05",
|
|
129
|
+
serverInfo: SERVER_INFO,
|
|
130
|
+
capabilities: {
|
|
131
|
+
tools: {},
|
|
132
|
+
resources: {},
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
function parseFilesSearchParams(input) {
|
|
136
|
+
if (!input || typeof input !== "object") {
|
|
137
|
+
return { query: "" };
|
|
138
|
+
}
|
|
139
|
+
const record = input;
|
|
140
|
+
const limitValue = record.limit;
|
|
141
|
+
let limit;
|
|
142
|
+
if (typeof limitValue === "number") {
|
|
143
|
+
limit = limitValue;
|
|
144
|
+
}
|
|
145
|
+
else if (typeof limitValue === "string") {
|
|
146
|
+
const parsed = Number(limitValue);
|
|
147
|
+
if (!Number.isNaN(parsed)) {
|
|
148
|
+
limit = parsed;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const params = {
|
|
152
|
+
query: typeof record.query === "string" ? record.query : "",
|
|
153
|
+
};
|
|
154
|
+
if (typeof record.lang === "string")
|
|
155
|
+
params.lang = record.lang;
|
|
156
|
+
if (typeof record.ext === "string")
|
|
157
|
+
params.ext = record.ext;
|
|
158
|
+
// Validate path_prefix to prevent path traversal attacks
|
|
159
|
+
if (typeof record.path_prefix === "string") {
|
|
160
|
+
if (record.path_prefix.includes("..")) {
|
|
161
|
+
throw new Error("path_prefix cannot contain '..' (path traversal not allowed)");
|
|
162
|
+
}
|
|
163
|
+
params.path_prefix = record.path_prefix;
|
|
164
|
+
}
|
|
165
|
+
// Validate limit is within acceptable range
|
|
166
|
+
if (limit !== undefined) {
|
|
167
|
+
if (limit < 1 || limit > 200) {
|
|
168
|
+
throw new Error("limit must be between 1 and 200");
|
|
169
|
+
}
|
|
170
|
+
params.limit = limit;
|
|
171
|
+
}
|
|
172
|
+
// Parse boost_profile parameter
|
|
173
|
+
const boostProfile = record.boost_profile;
|
|
174
|
+
if (boostProfile === "default" || boostProfile === "docs" || boostProfile === "none") {
|
|
175
|
+
params.boost_profile = boostProfile;
|
|
176
|
+
}
|
|
177
|
+
return params;
|
|
178
|
+
}
|
|
179
|
+
function parseSnippetsGetParams(input) {
|
|
180
|
+
if (!input || typeof input !== "object") {
|
|
181
|
+
return { path: "" };
|
|
182
|
+
}
|
|
183
|
+
const record = input;
|
|
184
|
+
const toNumber = (value) => {
|
|
185
|
+
if (typeof value === "number") {
|
|
186
|
+
return value;
|
|
187
|
+
}
|
|
188
|
+
if (typeof value === "string") {
|
|
189
|
+
const parsed = Number(value);
|
|
190
|
+
return Number.isNaN(parsed) ? undefined : parsed;
|
|
191
|
+
}
|
|
192
|
+
return undefined;
|
|
193
|
+
};
|
|
194
|
+
const startLine = toNumber(record.start_line);
|
|
195
|
+
const endLine = toNumber(record.end_line);
|
|
196
|
+
const params = {
|
|
197
|
+
path: typeof record.path === "string" ? record.path : "",
|
|
198
|
+
};
|
|
199
|
+
if (startLine !== undefined)
|
|
200
|
+
params.start_line = startLine;
|
|
201
|
+
if (endLine !== undefined)
|
|
202
|
+
params.end_line = endLine;
|
|
203
|
+
return params;
|
|
204
|
+
}
|
|
205
|
+
function parseDepsClosureParams(input) {
|
|
206
|
+
if (!input || typeof input !== "object") {
|
|
207
|
+
return { path: "" };
|
|
208
|
+
}
|
|
209
|
+
const record = input;
|
|
210
|
+
const toNumber = (value) => {
|
|
211
|
+
if (typeof value === "number") {
|
|
212
|
+
return value;
|
|
213
|
+
}
|
|
214
|
+
if (typeof value === "string") {
|
|
215
|
+
const parsed = Number(value);
|
|
216
|
+
return Number.isNaN(parsed) ? undefined : parsed;
|
|
217
|
+
}
|
|
218
|
+
return undefined;
|
|
219
|
+
};
|
|
220
|
+
const direction = record.direction === "inbound" || record.direction === "outbound"
|
|
221
|
+
? record.direction
|
|
222
|
+
: undefined;
|
|
223
|
+
const includePackages = typeof record.include_packages === "boolean" ? record.include_packages : undefined;
|
|
224
|
+
const maxDepth = toNumber(record.max_depth);
|
|
225
|
+
const params = {
|
|
226
|
+
path: typeof record.path === "string" ? record.path : "",
|
|
227
|
+
};
|
|
228
|
+
if (maxDepth !== undefined)
|
|
229
|
+
params.max_depth = maxDepth;
|
|
230
|
+
if (direction !== undefined)
|
|
231
|
+
params.direction = direction;
|
|
232
|
+
if (includePackages !== undefined)
|
|
233
|
+
params.include_packages = includePackages;
|
|
234
|
+
return params;
|
|
235
|
+
}
|
|
236
|
+
function parseContextBundleParams(input) {
|
|
237
|
+
if (!input || typeof input !== "object") {
|
|
238
|
+
return { goal: "" };
|
|
239
|
+
}
|
|
240
|
+
const record = input;
|
|
241
|
+
const params = {
|
|
242
|
+
goal: typeof record.goal === "string" ? record.goal : "",
|
|
243
|
+
};
|
|
244
|
+
// Parse and validate limit parameter
|
|
245
|
+
const limitValue = record.limit;
|
|
246
|
+
let limit;
|
|
247
|
+
if (typeof limitValue === "number") {
|
|
248
|
+
limit = limitValue;
|
|
249
|
+
}
|
|
250
|
+
else if (typeof limitValue === "string") {
|
|
251
|
+
const parsed = Number(limitValue);
|
|
252
|
+
if (!Number.isNaN(parsed)) {
|
|
253
|
+
limit = parsed;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
if (limit !== undefined) {
|
|
257
|
+
if (limit < 1 || limit > 20) {
|
|
258
|
+
throw new Error("limit must be between 1 and 20");
|
|
259
|
+
}
|
|
260
|
+
params.limit = limit;
|
|
261
|
+
}
|
|
262
|
+
const artifactsValue = record.artifacts;
|
|
263
|
+
if (artifactsValue && typeof artifactsValue === "object") {
|
|
264
|
+
const artifactsRecord = artifactsValue;
|
|
265
|
+
const artifacts = {};
|
|
266
|
+
if (typeof artifactsRecord.editing_path === "string") {
|
|
267
|
+
artifacts.editing_path = artifactsRecord.editing_path;
|
|
268
|
+
}
|
|
269
|
+
if (Array.isArray(artifactsRecord.failing_tests)) {
|
|
270
|
+
const failingTests = artifactsRecord.failing_tests.filter((value) => typeof value === "string");
|
|
271
|
+
if (failingTests.length > 0) {
|
|
272
|
+
artifacts.failing_tests = failingTests;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (typeof artifactsRecord.last_diff === "string") {
|
|
276
|
+
artifacts.last_diff = artifactsRecord.last_diff;
|
|
277
|
+
}
|
|
278
|
+
if (artifacts.editing_path || artifacts.failing_tests || artifacts.last_diff) {
|
|
279
|
+
params.artifacts = artifacts;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (typeof record.profile === "string") {
|
|
283
|
+
params.profile = record.profile;
|
|
284
|
+
}
|
|
285
|
+
// Parse boost_profile parameter
|
|
286
|
+
const boostProfile = record.boost_profile;
|
|
287
|
+
if (boostProfile === "default" || boostProfile === "docs" || boostProfile === "none") {
|
|
288
|
+
params.boost_profile = boostProfile;
|
|
289
|
+
}
|
|
290
|
+
return params;
|
|
291
|
+
}
|
|
292
|
+
function parseSemanticRerankParams(input) {
|
|
293
|
+
if (!input || typeof input !== "object") {
|
|
294
|
+
return { text: "", candidates: [] };
|
|
295
|
+
}
|
|
296
|
+
const record = input;
|
|
297
|
+
const params = {
|
|
298
|
+
text: typeof record.text === "string" ? record.text : "",
|
|
299
|
+
candidates: [],
|
|
300
|
+
};
|
|
301
|
+
const candidatesValue = record.candidates;
|
|
302
|
+
if (Array.isArray(candidatesValue)) {
|
|
303
|
+
for (const candidate of candidatesValue) {
|
|
304
|
+
if (!candidate || typeof candidate !== "object") {
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
const candidateRecord = candidate;
|
|
308
|
+
if (typeof candidateRecord.path !== "string" || candidateRecord.path.length === 0) {
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
const candidateInput = {
|
|
312
|
+
path: candidateRecord.path,
|
|
313
|
+
};
|
|
314
|
+
if (typeof candidateRecord.score === "number" && Number.isFinite(candidateRecord.score)) {
|
|
315
|
+
candidateInput.score = candidateRecord.score;
|
|
316
|
+
}
|
|
317
|
+
params.candidates.push(candidateInput);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
const limitValue = record.k;
|
|
321
|
+
if (typeof limitValue === "number" && Number.isFinite(limitValue)) {
|
|
322
|
+
params.k = limitValue;
|
|
323
|
+
}
|
|
324
|
+
else if (typeof limitValue === "string") {
|
|
325
|
+
const parsed = Number(limitValue);
|
|
326
|
+
if (!Number.isNaN(parsed)) {
|
|
327
|
+
params.k = parsed;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
if (typeof record.profile === "string") {
|
|
331
|
+
params.profile = record.profile;
|
|
332
|
+
}
|
|
333
|
+
return params;
|
|
334
|
+
}
|
|
335
|
+
export function successResponse(id, result) {
|
|
336
|
+
return { jsonrpc: "2.0", id, result };
|
|
337
|
+
}
|
|
338
|
+
export function errorResponse(id, message, code = -32603) {
|
|
339
|
+
return { jsonrpc: "2.0", id, error: { code, message } };
|
|
340
|
+
}
|
|
341
|
+
export function validateJsonRpcRequest(payload) {
|
|
342
|
+
if (payload.jsonrpc !== "2.0" || typeof payload.method !== "string") {
|
|
343
|
+
return "Malformed JSON-RPC request. Provide method and jsonrpc=2.0.";
|
|
344
|
+
}
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
// Helper function to execute a tool by name
|
|
348
|
+
async function executeToolByName(toolName, toolParams, context, degrade, allowDegrade) {
|
|
349
|
+
switch (toolName) {
|
|
350
|
+
case "context.bundle": {
|
|
351
|
+
const params = parseContextBundleParams(toolParams);
|
|
352
|
+
const handler = async () => await withSpan("context.bundle", async () => await contextBundle(context, params));
|
|
353
|
+
return await degrade.withResource(handler, "duckdb:context.bundle");
|
|
354
|
+
}
|
|
355
|
+
case "semantic.rerank": {
|
|
356
|
+
const params = parseSemanticRerankParams(toolParams);
|
|
357
|
+
const handler = async () => await withSpan("semantic.rerank", async () => await semanticRerank(context, params));
|
|
358
|
+
return await degrade.withResource(handler, "duckdb:semantic.rerank");
|
|
359
|
+
}
|
|
360
|
+
case "files.search": {
|
|
361
|
+
const params = parseFilesSearchParams(toolParams);
|
|
362
|
+
if (degrade.current.active && allowDegrade) {
|
|
363
|
+
return {
|
|
364
|
+
hits: degrade.search(params.query, params.limit ?? 20).map((hit) => ({
|
|
365
|
+
path: hit.path,
|
|
366
|
+
preview: hit.preview,
|
|
367
|
+
matchLine: hit.matchLine,
|
|
368
|
+
lang: null,
|
|
369
|
+
ext: null,
|
|
370
|
+
score: 0,
|
|
371
|
+
})),
|
|
372
|
+
degrade: true,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
const handler = async () => await withSpan("files.search", async () => await filesSearch(context, params));
|
|
377
|
+
return await degrade.withResource(handler, "duckdb:files.search");
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
case "snippets.get": {
|
|
381
|
+
const params = parseSnippetsGetParams(toolParams);
|
|
382
|
+
const handler = async () => await withSpan("snippets.get", async () => await snippetsGet(context, params));
|
|
383
|
+
return await degrade.withResource(handler, "duckdb:snippets.get");
|
|
384
|
+
}
|
|
385
|
+
case "deps.closure": {
|
|
386
|
+
const params = parseDepsClosureParams(toolParams);
|
|
387
|
+
const handler = async () => await withSpan("deps.closure", async () => await depsClosure(context, params));
|
|
388
|
+
return await degrade.withResource(handler, "duckdb:deps.closure");
|
|
389
|
+
}
|
|
390
|
+
default:
|
|
391
|
+
throw new Error(`Unknown tool: ${toolName}`);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
export function createRpcHandler(dependencies) {
|
|
395
|
+
const { context, degrade, metrics, tokens, allowDegrade } = dependencies;
|
|
396
|
+
return async (payload) => {
|
|
397
|
+
const hasResponseId = typeof payload.id === "string" || typeof payload.id === "number";
|
|
398
|
+
try {
|
|
399
|
+
let result;
|
|
400
|
+
switch (payload.method) {
|
|
401
|
+
case "initialize": {
|
|
402
|
+
result = INITIALIZE_PAYLOAD;
|
|
403
|
+
break;
|
|
404
|
+
}
|
|
405
|
+
case "ping": {
|
|
406
|
+
// Health check endpoint - returns server info and uptime
|
|
407
|
+
result = {
|
|
408
|
+
status: "ok",
|
|
409
|
+
serverInfo: SERVER_INFO,
|
|
410
|
+
pid: process.pid,
|
|
411
|
+
uptime: process.uptime(),
|
|
412
|
+
};
|
|
413
|
+
break;
|
|
414
|
+
}
|
|
415
|
+
case "tools/list": {
|
|
416
|
+
// MCP standard format: tools array without nextCursor (no pagination)
|
|
417
|
+
result = { tools: TOOL_DESCRIPTORS };
|
|
418
|
+
break;
|
|
419
|
+
}
|
|
420
|
+
case "resources/list": {
|
|
421
|
+
// MCP standard format: resources array without pagination
|
|
422
|
+
result = { resources: [] };
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
case "tools/call": {
|
|
426
|
+
// MCP standard tool invocation
|
|
427
|
+
const paramsRecord = payload.params;
|
|
428
|
+
if (!paramsRecord || typeof paramsRecord !== "object") {
|
|
429
|
+
return hasResponseId
|
|
430
|
+
? {
|
|
431
|
+
statusCode: 400,
|
|
432
|
+
response: errorResponse(payload.id, "Invalid params for tools/call. Provide name and arguments.", -32602),
|
|
433
|
+
}
|
|
434
|
+
: null;
|
|
435
|
+
}
|
|
436
|
+
const toolName = paramsRecord.name;
|
|
437
|
+
if (typeof toolName !== "string") {
|
|
438
|
+
return hasResponseId
|
|
439
|
+
? {
|
|
440
|
+
statusCode: 400,
|
|
441
|
+
response: errorResponse(payload.id, "Invalid params for tools/call. Tool name must be a string.", -32602),
|
|
442
|
+
}
|
|
443
|
+
: null;
|
|
444
|
+
}
|
|
445
|
+
const toolArguments = paramsRecord.arguments ?? {};
|
|
446
|
+
try {
|
|
447
|
+
const toolResult = await executeToolByName(toolName, toolArguments, context, degrade, allowDegrade);
|
|
448
|
+
// Convert to MCP standard format
|
|
449
|
+
const mcpResult = {
|
|
450
|
+
content: [
|
|
451
|
+
{
|
|
452
|
+
type: "text",
|
|
453
|
+
text: JSON.stringify(toolResult, null, 2),
|
|
454
|
+
},
|
|
455
|
+
],
|
|
456
|
+
isError: false,
|
|
457
|
+
};
|
|
458
|
+
result = mcpResult;
|
|
459
|
+
}
|
|
460
|
+
catch (error) {
|
|
461
|
+
// Tool execution error - return as MCP error result
|
|
462
|
+
const errorMessage = error instanceof Error
|
|
463
|
+
? error.message
|
|
464
|
+
: "Tool execution failed. Inspect server logs and retry.";
|
|
465
|
+
const mcpErrorResult = {
|
|
466
|
+
content: [
|
|
467
|
+
{
|
|
468
|
+
type: "text",
|
|
469
|
+
text: errorMessage,
|
|
470
|
+
},
|
|
471
|
+
],
|
|
472
|
+
isError: true,
|
|
473
|
+
};
|
|
474
|
+
result = mcpErrorResult;
|
|
475
|
+
}
|
|
476
|
+
break;
|
|
477
|
+
}
|
|
478
|
+
// Legacy direct method invocation (backward compatibility)
|
|
479
|
+
case "context.bundle": {
|
|
480
|
+
result = await executeToolByName("context.bundle", payload.params, context, degrade, allowDegrade);
|
|
481
|
+
break;
|
|
482
|
+
}
|
|
483
|
+
case "semantic.rerank": {
|
|
484
|
+
result = await executeToolByName("semantic.rerank", payload.params, context, degrade, allowDegrade);
|
|
485
|
+
break;
|
|
486
|
+
}
|
|
487
|
+
case "files.search": {
|
|
488
|
+
result = await executeToolByName("files.search", payload.params, context, degrade, allowDegrade);
|
|
489
|
+
break;
|
|
490
|
+
}
|
|
491
|
+
case "snippets.get": {
|
|
492
|
+
result = await executeToolByName("snippets.get", payload.params, context, degrade, allowDegrade);
|
|
493
|
+
break;
|
|
494
|
+
}
|
|
495
|
+
case "deps.closure": {
|
|
496
|
+
result = await executeToolByName("deps.closure", payload.params, context, degrade, allowDegrade);
|
|
497
|
+
break;
|
|
498
|
+
}
|
|
499
|
+
default: {
|
|
500
|
+
return hasResponseId
|
|
501
|
+
? {
|
|
502
|
+
statusCode: 404,
|
|
503
|
+
response: errorResponse(payload.id, "Requested method is not available. Use tools/call, or legacy methods: context.bundle, semantic.rerank, files.search, snippets.get, or deps.closure.", -32601),
|
|
504
|
+
}
|
|
505
|
+
: null;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
const masked = maskValue(result, { tokens });
|
|
509
|
+
if (masked.applied > 0) {
|
|
510
|
+
metrics.recordMask(masked.applied);
|
|
511
|
+
}
|
|
512
|
+
if (!hasResponseId) {
|
|
513
|
+
return null;
|
|
514
|
+
}
|
|
515
|
+
return {
|
|
516
|
+
statusCode: 200,
|
|
517
|
+
response: successResponse(payload.id, masked.masked),
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
catch (error) {
|
|
521
|
+
if (degrade.current.active && !allowDegrade) {
|
|
522
|
+
return hasResponseId
|
|
523
|
+
? {
|
|
524
|
+
statusCode: 503,
|
|
525
|
+
response: errorResponse(payload.id, "Backend degraded and --allow-degrade not set. Restore DuckDB availability or restart server."),
|
|
526
|
+
}
|
|
527
|
+
: null;
|
|
528
|
+
}
|
|
529
|
+
if (degrade.current.active && allowDegrade) {
|
|
530
|
+
return hasResponseId
|
|
531
|
+
? {
|
|
532
|
+
statusCode: 503,
|
|
533
|
+
response: errorResponse(payload.id, degrade.current.reason
|
|
534
|
+
? `Backend degraded due to ${degrade.current.reason}. Only files.search is operational.`
|
|
535
|
+
: "Backend degraded. Only files.search is operational."),
|
|
536
|
+
}
|
|
537
|
+
: null;
|
|
538
|
+
}
|
|
539
|
+
const message = error instanceof Error
|
|
540
|
+
? error.message
|
|
541
|
+
: "Unknown error occurred. Inspect server logs and retry the request.";
|
|
542
|
+
return hasResponseId
|
|
543
|
+
? {
|
|
544
|
+
statusCode: 500,
|
|
545
|
+
response: errorResponse(payload.id, message),
|
|
546
|
+
}
|
|
547
|
+
: null;
|
|
548
|
+
}
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
//# sourceMappingURL=rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../../src/server/rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ServerContext } from "./context.js";
|
|
2
|
+
import { DegradeController } from "./fallbacks/degradeController.js";
|
|
3
|
+
import { MetricsRegistry } from "./observability/metrics.js";
|
|
4
|
+
export interface CommonServerOptions {
|
|
5
|
+
databasePath: string;
|
|
6
|
+
repoRoot: string;
|
|
7
|
+
allowDegrade?: boolean;
|
|
8
|
+
securityConfigPath?: string;
|
|
9
|
+
securityLockPath?: string;
|
|
10
|
+
allowWriteLock?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ServerRuntime {
|
|
13
|
+
context: ServerContext;
|
|
14
|
+
degrade: DegradeController;
|
|
15
|
+
metrics: MetricsRegistry;
|
|
16
|
+
tokens: string[];
|
|
17
|
+
allowDegrade: boolean;
|
|
18
|
+
close: () => Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export declare function createServerRuntime(options: CommonServerOptions): Promise<ServerRuntime>;
|
|
21
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/server/runtime.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,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;IACtB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAuD9F"}
|