codesift-mcp 0.1.0 → 0.2.1
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 +66 -21
- package/README.md +402 -56
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +11 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +177 -67
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/help.d.ts +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +157 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/hooks.d.ts +3 -0
- package/dist/cli/hooks.d.ts.map +1 -0
- package/dist/cli/hooks.js +163 -0
- package/dist/cli/hooks.js.map +1 -0
- package/dist/cli/setup.d.ts +25 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +400 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/formatters-shortening.d.ts +7 -0
- package/dist/formatters-shortening.d.ts.map +1 -0
- package/dist/formatters-shortening.js +68 -0
- package/dist/formatters-shortening.js.map +1 -0
- package/dist/formatters.d.ts +314 -0
- package/dist/formatters.d.ts.map +1 -0
- package/dist/formatters.js +396 -0
- package/dist/formatters.js.map +1 -0
- package/dist/instructions.d.ts +6 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/instructions.js +72 -0
- package/dist/instructions.js.map +1 -0
- package/dist/lsp/lsp-client.d.ts +21 -0
- package/dist/lsp/lsp-client.d.ts.map +1 -0
- package/dist/lsp/lsp-client.js +122 -0
- package/dist/lsp/lsp-client.js.map +1 -0
- package/dist/lsp/lsp-manager.d.ts +12 -0
- package/dist/lsp/lsp-manager.d.ts.map +1 -0
- package/dist/lsp/lsp-manager.js +82 -0
- package/dist/lsp/lsp-manager.js.map +1 -0
- package/dist/lsp/lsp-servers.d.ts +13 -0
- package/dist/lsp/lsp-servers.d.ts.map +1 -0
- package/dist/lsp/lsp-servers.js +57 -0
- package/dist/lsp/lsp-servers.js.map +1 -0
- package/dist/lsp/lsp-tools.d.ts +67 -0
- package/dist/lsp/lsp-tools.d.ts.map +1 -0
- package/dist/lsp/lsp-tools.js +359 -0
- package/dist/lsp/lsp-tools.js.map +1 -0
- package/dist/parser/extractors/_shared.d.ts +11 -0
- package/dist/parser/extractors/_shared.d.ts.map +1 -0
- package/dist/parser/extractors/_shared.js +38 -0
- package/dist/parser/extractors/_shared.js.map +1 -0
- package/dist/parser/extractors/astro.d.ts +15 -0
- package/dist/parser/extractors/astro.d.ts.map +1 -0
- package/dist/parser/extractors/astro.js +104 -0
- package/dist/parser/extractors/astro.js.map +1 -0
- package/dist/parser/extractors/conversation.d.ts +16 -0
- package/dist/parser/extractors/conversation.d.ts.map +1 -0
- package/dist/parser/extractors/conversation.js +196 -0
- package/dist/parser/extractors/conversation.js.map +1 -0
- package/dist/parser/extractors/go.d.ts.map +1 -1
- package/dist/parser/extractors/go.js +22 -45
- package/dist/parser/extractors/go.js.map +1 -1
- package/dist/parser/extractors/python.d.ts +1 -1
- package/dist/parser/extractors/python.d.ts.map +1 -1
- package/dist/parser/extractors/python.js +19 -50
- package/dist/parser/extractors/python.js.map +1 -1
- package/dist/parser/extractors/rust.d.ts +1 -1
- package/dist/parser/extractors/rust.d.ts.map +1 -1
- package/dist/parser/extractors/rust.js +7 -34
- package/dist/parser/extractors/rust.js.map +1 -1
- package/dist/parser/extractors/typescript.d.ts +1 -1
- package/dist/parser/extractors/typescript.d.ts.map +1 -1
- package/dist/parser/extractors/typescript.js +99 -68
- package/dist/parser/extractors/typescript.js.map +1 -1
- package/dist/parser/parser-manager.d.ts.map +1 -1
- package/dist/parser/parser-manager.js +12 -2
- package/dist/parser/parser-manager.js.map +1 -1
- package/dist/parser/symbol-extractor.d.ts +2 -0
- package/dist/parser/symbol-extractor.d.ts.map +1 -1
- package/dist/parser/symbol-extractor.js +2 -0
- package/dist/parser/symbol-extractor.js.map +1 -1
- package/dist/register-tools.d.ts +127 -0
- package/dist/register-tools.d.ts.map +1 -0
- package/dist/register-tools.js +1453 -0
- package/dist/register-tools.js.map +1 -0
- package/dist/retrieval/codebase-retrieval.d.ts +4 -26
- package/dist/retrieval/codebase-retrieval.d.ts.map +1 -1
- package/dist/retrieval/codebase-retrieval.js +105 -403
- package/dist/retrieval/codebase-retrieval.js.map +1 -1
- package/dist/retrieval/retrieval-constants.d.ts +27 -0
- package/dist/retrieval/retrieval-constants.d.ts.map +1 -0
- package/dist/retrieval/retrieval-constants.js +27 -0
- package/dist/retrieval/retrieval-constants.js.map +1 -0
- package/dist/retrieval/retrieval-schemas.d.ts +107 -0
- package/dist/retrieval/retrieval-schemas.d.ts.map +1 -0
- package/dist/retrieval/retrieval-schemas.js +102 -0
- package/dist/retrieval/retrieval-schemas.js.map +1 -0
- package/dist/retrieval/retrieval-utils.d.ts +40 -0
- package/dist/retrieval/retrieval-utils.d.ts.map +1 -0
- package/dist/retrieval/retrieval-utils.js +139 -0
- package/dist/retrieval/retrieval-utils.js.map +1 -0
- package/dist/retrieval/semantic-handlers.d.ts +8 -0
- package/dist/retrieval/semantic-handlers.d.ts.map +1 -0
- package/dist/retrieval/semantic-handlers.js +152 -0
- package/dist/retrieval/semantic-handlers.js.map +1 -0
- package/dist/search/bm25.d.ts +6 -1
- package/dist/search/bm25.d.ts.map +1 -1
- package/dist/search/bm25.js +95 -32
- package/dist/search/bm25.js.map +1 -1
- package/dist/search/chunker.d.ts +10 -0
- package/dist/search/chunker.d.ts.map +1 -1
- package/dist/search/chunker.js +63 -11
- package/dist/search/chunker.js.map +1 -1
- package/dist/search/reranker.d.ts +15 -0
- package/dist/search/reranker.d.ts.map +1 -0
- package/dist/search/reranker.js +126 -0
- package/dist/search/reranker.js.map +1 -0
- package/dist/search/semantic.d.ts +1 -1
- package/dist/search/semantic.d.ts.map +1 -1
- package/dist/search/semantic.js +40 -45
- package/dist/search/semantic.js.map +1 -1
- package/dist/server-helpers.d.ts +29 -0
- package/dist/server-helpers.d.ts.map +1 -0
- package/dist/server-helpers.js +312 -0
- package/dist/server-helpers.js.map +1 -0
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +11 -271
- package/dist/server.js.map +1 -1
- package/dist/storage/_shared.d.ts +9 -0
- package/dist/storage/_shared.d.ts.map +1 -0
- package/dist/storage/_shared.js +26 -0
- package/dist/storage/_shared.js.map +1 -0
- package/dist/storage/chunk-store.d.ts.map +1 -1
- package/dist/storage/chunk-store.js +23 -63
- package/dist/storage/chunk-store.js.map +1 -1
- package/dist/storage/embedding-store.d.ts +6 -3
- package/dist/storage/embedding-store.d.ts.map +1 -1
- package/dist/storage/embedding-store.js +54 -30
- package/dist/storage/embedding-store.js.map +1 -1
- package/dist/storage/graph-store.d.ts +48 -0
- package/dist/storage/graph-store.d.ts.map +1 -0
- package/dist/storage/graph-store.js +52 -0
- package/dist/storage/graph-store.js.map +1 -0
- package/dist/storage/index-store.d.ts +5 -0
- package/dist/storage/index-store.d.ts.map +1 -1
- package/dist/storage/index-store.js +28 -16
- package/dist/storage/index-store.js.map +1 -1
- package/dist/storage/registry.d.ts +4 -0
- package/dist/storage/registry.d.ts.map +1 -1
- package/dist/storage/registry.js +16 -16
- package/dist/storage/registry.js.map +1 -1
- package/dist/storage/usage-stats.d.ts +6 -0
- package/dist/storage/usage-stats.d.ts.map +1 -1
- package/dist/storage/usage-stats.js +59 -11
- package/dist/storage/usage-stats.js.map +1 -1
- package/dist/storage/usage-tracker.d.ts +3 -0
- package/dist/storage/usage-tracker.d.ts.map +1 -1
- package/dist/storage/usage-tracker.js +50 -132
- package/dist/storage/usage-tracker.js.map +1 -1
- package/dist/storage/watcher.d.ts +2 -1
- package/dist/storage/watcher.d.ts.map +1 -1
- package/dist/storage/watcher.js +16 -16
- package/dist/storage/watcher.js.map +1 -1
- package/dist/tools/ast-query-tools.d.ts +29 -0
- package/dist/tools/ast-query-tools.d.ts.map +1 -0
- package/dist/tools/ast-query-tools.js +110 -0
- package/dist/tools/ast-query-tools.js.map +1 -0
- package/dist/tools/boundary-tools.d.ts +31 -0
- package/dist/tools/boundary-tools.d.ts.map +1 -0
- package/dist/tools/boundary-tools.js +62 -0
- package/dist/tools/boundary-tools.js.map +1 -0
- package/dist/tools/clone-tools.d.ts +35 -0
- package/dist/tools/clone-tools.d.ts.map +1 -0
- package/dist/tools/clone-tools.js +181 -0
- package/dist/tools/clone-tools.js.map +1 -0
- package/dist/tools/community-tools.d.ts +23 -0
- package/dist/tools/community-tools.d.ts.map +1 -0
- package/dist/tools/community-tools.js +297 -0
- package/dist/tools/community-tools.js.map +1 -0
- package/dist/tools/complexity-tools.d.ts +34 -0
- package/dist/tools/complexity-tools.d.ts.map +1 -0
- package/dist/tools/complexity-tools.js +135 -0
- package/dist/tools/complexity-tools.js.map +1 -0
- package/dist/tools/context-tools.d.ts +44 -3
- package/dist/tools/context-tools.d.ts.map +1 -1
- package/dist/tools/context-tools.js +329 -99
- package/dist/tools/context-tools.js.map +1 -1
- package/dist/tools/conversation-tools.d.ts +107 -0
- package/dist/tools/conversation-tools.d.ts.map +1 -0
- package/dist/tools/conversation-tools.js +419 -0
- package/dist/tools/conversation-tools.js.map +1 -0
- package/dist/tools/coordinator-tools.d.ts +73 -0
- package/dist/tools/coordinator-tools.d.ts.map +1 -0
- package/dist/tools/coordinator-tools.js +153 -0
- package/dist/tools/coordinator-tools.js.map +1 -0
- package/dist/tools/cross-repo-tools.d.ts +43 -0
- package/dist/tools/cross-repo-tools.d.ts.map +1 -0
- package/dist/tools/cross-repo-tools.js +55 -0
- package/dist/tools/cross-repo-tools.js.map +1 -0
- package/dist/tools/diff-tools.d.ts +4 -1
- package/dist/tools/diff-tools.d.ts.map +1 -1
- package/dist/tools/diff-tools.js +23 -5
- package/dist/tools/diff-tools.js.map +1 -1
- package/dist/tools/frequency-tools.d.ts +46 -0
- package/dist/tools/frequency-tools.d.ts.map +1 -0
- package/dist/tools/frequency-tools.js +184 -0
- package/dist/tools/frequency-tools.js.map +1 -0
- package/dist/tools/generate-tools.d.ts.map +1 -1
- package/dist/tools/generate-tools.js +13 -2
- package/dist/tools/generate-tools.js.map +1 -1
- package/dist/tools/graph-tools.d.ts +44 -11
- package/dist/tools/graph-tools.d.ts.map +1 -1
- package/dist/tools/graph-tools.js +147 -104
- package/dist/tools/graph-tools.js.map +1 -1
- package/dist/tools/hotspot-tools.d.ts +24 -0
- package/dist/tools/hotspot-tools.d.ts.map +1 -0
- package/dist/tools/hotspot-tools.js +122 -0
- package/dist/tools/hotspot-tools.js.map +1 -0
- package/dist/tools/impact-tools.d.ts +13 -0
- package/dist/tools/impact-tools.d.ts.map +1 -0
- package/dist/tools/impact-tools.js +238 -0
- package/dist/tools/impact-tools.js.map +1 -0
- package/dist/tools/index-tools.d.ts +44 -3
- package/dist/tools/index-tools.d.ts.map +1 -1
- package/dist/tools/index-tools.js +530 -222
- package/dist/tools/index-tools.js.map +1 -1
- package/dist/tools/memory-tools.d.ts +35 -0
- package/dist/tools/memory-tools.d.ts.map +1 -0
- package/dist/tools/memory-tools.js +229 -0
- package/dist/tools/memory-tools.js.map +1 -0
- package/dist/tools/outline-tools.d.ts +24 -13
- package/dist/tools/outline-tools.d.ts.map +1 -1
- package/dist/tools/outline-tools.js +113 -87
- package/dist/tools/outline-tools.js.map +1 -1
- package/dist/tools/pattern-tools.d.ts +32 -0
- package/dist/tools/pattern-tools.d.ts.map +1 -0
- package/dist/tools/pattern-tools.js +116 -0
- package/dist/tools/pattern-tools.js.map +1 -0
- package/dist/tools/report-tools.d.ts +5 -0
- package/dist/tools/report-tools.d.ts.map +1 -0
- package/dist/tools/report-tools.js +167 -0
- package/dist/tools/report-tools.js.map +1 -0
- package/dist/tools/review-diff-tools.d.ts +148 -0
- package/dist/tools/review-diff-tools.d.ts.map +1 -0
- package/dist/tools/review-diff-tools.js +852 -0
- package/dist/tools/review-diff-tools.js.map +1 -0
- package/dist/tools/route-tools.d.ts +32 -0
- package/dist/tools/route-tools.d.ts.map +1 -0
- package/dist/tools/route-tools.js +276 -0
- package/dist/tools/route-tools.js.map +1 -0
- package/dist/tools/search-ranker.d.ts +5 -0
- package/dist/tools/search-ranker.d.ts.map +1 -0
- package/dist/tools/search-ranker.js +142 -0
- package/dist/tools/search-ranker.js.map +1 -0
- package/dist/tools/search-tools.d.ts +24 -1
- package/dist/tools/search-tools.d.ts.map +1 -1
- package/dist/tools/search-tools.js +459 -225
- package/dist/tools/search-tools.js.map +1 -1
- package/dist/tools/secret-tools.d.ts +104 -0
- package/dist/tools/secret-tools.d.ts.map +1 -0
- package/dist/tools/secret-tools.js +410 -0
- package/dist/tools/secret-tools.js.map +1 -0
- package/dist/tools/symbol-tools.d.ts +90 -2
- package/dist/tools/symbol-tools.d.ts.map +1 -1
- package/dist/tools/symbol-tools.js +576 -42
- package/dist/tools/symbol-tools.js.map +1 -1
- package/dist/types.d.ts +34 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/framework-detect.d.ts +5 -0
- package/dist/utils/framework-detect.d.ts.map +1 -0
- package/dist/utils/framework-detect.js +36 -0
- package/dist/utils/framework-detect.js.map +1 -0
- package/dist/utils/glob.d.ts +19 -0
- package/dist/utils/glob.d.ts.map +1 -0
- package/dist/utils/glob.js +74 -0
- package/dist/utils/glob.js.map +1 -0
- package/dist/utils/import-graph.d.ts +29 -0
- package/dist/utils/import-graph.d.ts.map +1 -0
- package/dist/utils/import-graph.js +125 -0
- package/dist/utils/import-graph.js.map +1 -0
- package/dist/utils/test-file.d.ts.map +1 -1
- package/dist/utils/test-file.js +1 -0
- package/dist/utils/test-file.js.map +1 -1
- package/dist/utils/walk.d.ts +45 -0
- package/dist/utils/walk.d.ts.map +1 -0
- package/dist/utils/walk.js +87 -0
- package/dist/utils/walk.js.map +1 -0
- package/package.json +12 -5
- package/rules/codesift.md +187 -0
- package/rules/codesift.mdc +192 -0
- package/rules/codex.md +187 -0
- package/rules/gemini.md +187 -0
package/dist/search/semantic.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
const MAX_SYMBOL_SOURCE_CHARS = 200;
|
|
2
|
+
const MAX_ERROR_DETAIL_CHARS = 200;
|
|
3
|
+
const EMBEDDING_TIMEOUT_MS = 30_000;
|
|
1
4
|
/**
|
|
2
5
|
* Build a searchable text string from a symbol for embedding.
|
|
3
|
-
* Format: "{kind} {name}\n{signature}\n{docstring first line}\n{body first
|
|
6
|
+
* Format: "{kind} {name}\n{signature}\n{docstring first line}\n{body first N chars}"
|
|
4
7
|
*/
|
|
5
8
|
export function buildSymbolText(symbol) {
|
|
6
9
|
const parts = [`${symbol.kind} ${symbol.name}`];
|
|
@@ -13,7 +16,7 @@ export function buildSymbolText(symbol) {
|
|
|
13
16
|
parts.push(firstLine);
|
|
14
17
|
}
|
|
15
18
|
if (symbol.source) {
|
|
16
|
-
parts.push(symbol.source.slice(0,
|
|
19
|
+
parts.push(symbol.source.slice(0, MAX_SYMBOL_SOURCE_CHARS));
|
|
17
20
|
}
|
|
18
21
|
return parts.join("\n");
|
|
19
22
|
}
|
|
@@ -21,6 +24,8 @@ export function buildSymbolText(symbol) {
|
|
|
21
24
|
// Cosine similarity
|
|
22
25
|
// ---------------------------------------------------------------------------
|
|
23
26
|
export function cosineSimilarity(a, b) {
|
|
27
|
+
if (a.length !== b.length)
|
|
28
|
+
return 0;
|
|
24
29
|
let dot = 0;
|
|
25
30
|
let normA = 0;
|
|
26
31
|
let normB = 0;
|
|
@@ -67,6 +72,32 @@ function isEmbeddingResponse(data) {
|
|
|
67
72
|
return false;
|
|
68
73
|
return obj["data"].every((item) => typeof item === "object" && item !== null && Array.isArray(item["embedding"]));
|
|
69
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Shared fetch+validate logic for OpenAI-compatible embedding APIs.
|
|
77
|
+
* Handles: POST -> check response.ok -> parse JSON -> guard shape -> extract embeddings.
|
|
78
|
+
*/
|
|
79
|
+
async function fetchEmbeddings(url, apiKey, requestBody, providerName) {
|
|
80
|
+
const response = await fetch(url, {
|
|
81
|
+
method: "POST",
|
|
82
|
+
headers: {
|
|
83
|
+
"Content-Type": "application/json",
|
|
84
|
+
Authorization: `Bearer ${apiKey}`,
|
|
85
|
+
},
|
|
86
|
+
body: JSON.stringify(requestBody),
|
|
87
|
+
signal: AbortSignal.timeout(EMBEDDING_TIMEOUT_MS),
|
|
88
|
+
});
|
|
89
|
+
if (!response.ok) {
|
|
90
|
+
// SEC-004: Log raw body to stderr only — don't forward to MCP client
|
|
91
|
+
const body = await response.text();
|
|
92
|
+
console.error(`${providerName} API error ${response.status}:`, body);
|
|
93
|
+
throw new Error(`${providerName} API error: ${response.status}`);
|
|
94
|
+
}
|
|
95
|
+
const data = await response.json();
|
|
96
|
+
if (!isEmbeddingResponse(data)) {
|
|
97
|
+
throw new Error(`Unexpected ${providerName} API response shape: ${JSON.stringify(data).slice(0, MAX_ERROR_DETAIL_CHARS)}`);
|
|
98
|
+
}
|
|
99
|
+
return data.data.map((d) => d.embedding);
|
|
100
|
+
}
|
|
70
101
|
// ---------------------------------------------------------------------------
|
|
71
102
|
// Voyage AI provider
|
|
72
103
|
// ---------------------------------------------------------------------------
|
|
@@ -78,27 +109,7 @@ export class VoyageProvider {
|
|
|
78
109
|
this.apiKey = apiKey;
|
|
79
110
|
}
|
|
80
111
|
async embed(texts) {
|
|
81
|
-
|
|
82
|
-
method: "POST",
|
|
83
|
-
headers: {
|
|
84
|
-
"Content-Type": "application/json",
|
|
85
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
86
|
-
},
|
|
87
|
-
body: JSON.stringify({
|
|
88
|
-
input: texts,
|
|
89
|
-
model: this.model,
|
|
90
|
-
input_type: "document",
|
|
91
|
-
}),
|
|
92
|
-
});
|
|
93
|
-
if (!response.ok) {
|
|
94
|
-
const body = await response.text();
|
|
95
|
-
throw new Error(`Voyage API error ${response.status}: ${body}`);
|
|
96
|
-
}
|
|
97
|
-
const data = await response.json();
|
|
98
|
-
if (!isEmbeddingResponse(data)) {
|
|
99
|
-
throw new Error(`Unexpected Voyage API response shape: ${JSON.stringify(data).slice(0, 200)}`);
|
|
100
|
-
}
|
|
101
|
-
return data.data.map((d) => d.embedding);
|
|
112
|
+
return fetchEmbeddings("https://api.voyageai.com/v1/embeddings", this.apiKey, { input: texts, model: this.model, input_type: "document" }, "Voyage");
|
|
102
113
|
}
|
|
103
114
|
}
|
|
104
115
|
// ---------------------------------------------------------------------------
|
|
@@ -112,26 +123,7 @@ export class OpenAIProvider {
|
|
|
112
123
|
this.apiKey = apiKey;
|
|
113
124
|
}
|
|
114
125
|
async embed(texts) {
|
|
115
|
-
|
|
116
|
-
method: "POST",
|
|
117
|
-
headers: {
|
|
118
|
-
"Content-Type": "application/json",
|
|
119
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
120
|
-
},
|
|
121
|
-
body: JSON.stringify({
|
|
122
|
-
input: texts,
|
|
123
|
-
model: this.model,
|
|
124
|
-
}),
|
|
125
|
-
});
|
|
126
|
-
if (!response.ok) {
|
|
127
|
-
const body = await response.text();
|
|
128
|
-
throw new Error(`OpenAI API error ${response.status}: ${body}`);
|
|
129
|
-
}
|
|
130
|
-
const data = await response.json();
|
|
131
|
-
if (!isEmbeddingResponse(data)) {
|
|
132
|
-
throw new Error(`Unexpected OpenAI API response shape: ${JSON.stringify(data).slice(0, 200)}`);
|
|
133
|
-
}
|
|
134
|
-
return data.data.map((d) => d.embedding);
|
|
126
|
+
return fetchEmbeddings("https://api.openai.com/v1/embeddings", this.apiKey, { input: texts, model: this.model }, "OpenAI");
|
|
135
127
|
}
|
|
136
128
|
}
|
|
137
129
|
// ---------------------------------------------------------------------------
|
|
@@ -155,14 +147,17 @@ export class OllamaProvider {
|
|
|
155
147
|
model: this.model,
|
|
156
148
|
prompt: text,
|
|
157
149
|
}),
|
|
150
|
+
signal: AbortSignal.timeout(EMBEDDING_TIMEOUT_MS),
|
|
158
151
|
});
|
|
159
152
|
if (!response.ok) {
|
|
153
|
+
// SEC-004: Log raw body to stderr only — don't forward to MCP client
|
|
160
154
|
const body = await response.text();
|
|
161
|
-
|
|
155
|
+
console.error(`Ollama API error ${response.status}:`, body);
|
|
156
|
+
throw new Error(`Ollama API error: ${response.status}`);
|
|
162
157
|
}
|
|
163
158
|
const data = await response.json();
|
|
164
159
|
if (!data || typeof data !== "object" || !("embedding" in data) || !Array.isArray(data["embedding"])) {
|
|
165
|
-
throw new Error(`Unexpected Ollama API response shape: ${JSON.stringify(data).slice(0,
|
|
160
|
+
throw new Error(`Unexpected Ollama API response shape: ${JSON.stringify(data).slice(0, MAX_ERROR_DETAIL_CHARS)}`);
|
|
166
161
|
}
|
|
167
162
|
results.push(data.embedding);
|
|
168
163
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../src/search/semantic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../src/search/semantic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface ToolResponse {
|
|
2
|
+
[key: string]: unknown;
|
|
3
|
+
content: Array<{
|
|
4
|
+
type: "text";
|
|
5
|
+
text: string;
|
|
6
|
+
}>;
|
|
7
|
+
isError?: boolean;
|
|
8
|
+
}
|
|
9
|
+
interface ShorteningEntry {
|
|
10
|
+
compact?: (data: unknown) => string;
|
|
11
|
+
counts?: (data: unknown) => string;
|
|
12
|
+
}
|
|
13
|
+
export declare function registerShortener(toolName: string, entry: ShorteningEntry): void;
|
|
14
|
+
export declare function resetShorteningRegistry(): void;
|
|
15
|
+
/** Track sequential calls + session-level state. Exported for testing. */
|
|
16
|
+
export declare function trackSequentialCalls(toolName: string): void;
|
|
17
|
+
export declare function errorResult(message: string): ToolResponse;
|
|
18
|
+
/**
|
|
19
|
+
* Build optimization hints based on response data + call patterns.
|
|
20
|
+
* Returns compact hint codes (decoded in CLAUDE.md).
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildResponseHint(toolName: string, args: Record<string, unknown>, data: unknown): string | null;
|
|
23
|
+
export declare function wrapTool<T>(toolName: string, args: Record<string, unknown>, fn: () => Promise<T>): () => Promise<ToolResponse>;
|
|
24
|
+
/**
|
|
25
|
+
* Reset all session-level tracking state. Exported for testing only.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resetSessionState(): void;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=server-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-helpers.d.ts","sourceRoot":"","sources":["../src/server-helpers.ts"],"names":[],"mappings":"AAgDA,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;CACpC;AAID,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAEhF;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AA2DD,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAiB3D;AAMD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAOzD;AAqBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAoD/G;AAuED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,CAqD9H;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAQxC"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { trackToolCall, addSavings } from "./storage/usage-tracker.js";
|
|
2
|
+
import { writeFileSync, mkdirSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Constants
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
const HIGH_CARDINALITY_THRESHOLD = 50;
|
|
9
|
+
/** ~3.5 chars/token for compact JSON + text formatters. Matches retrieval-constants.ts (3). */
|
|
10
|
+
const CHARS_PER_TOKEN = 3.5;
|
|
11
|
+
const MAX_RESPONSE_TOKENS = 30_000; // Hard cap — truncate any response above this
|
|
12
|
+
const PERSIST_THRESHOLD_CHARS = 200_000; // ~50k tokens — persist full output to disk
|
|
13
|
+
const COMPACT_THRESHOLD = 52_500; // ~15K tokens at 3.5 chars/tok
|
|
14
|
+
const COUNTS_THRESHOLD = 87_500; // ~25K tokens
|
|
15
|
+
/** Estimated token multiplier vs manual grep/Read approach (from benchmark data) */
|
|
16
|
+
const SAVINGS_MULTIPLIER = {
|
|
17
|
+
search_text: 1.5,
|
|
18
|
+
search_symbols: 1.0,
|
|
19
|
+
get_file_outline: 3.0,
|
|
20
|
+
get_file_tree: 1.25,
|
|
21
|
+
find_references: 1.5,
|
|
22
|
+
codebase_retrieval: 3.0,
|
|
23
|
+
assemble_context: 5.0,
|
|
24
|
+
trace_call_chain: 4.0,
|
|
25
|
+
impact_analysis: 3.0,
|
|
26
|
+
detect_communities: 2.0,
|
|
27
|
+
trace_route: 4.0,
|
|
28
|
+
get_context_bundle: 3.0,
|
|
29
|
+
scan_secrets: 1.2,
|
|
30
|
+
frequency_analysis: 2.0,
|
|
31
|
+
};
|
|
32
|
+
const OPUS_COST_PER_TOKEN = 30 / 1_000_000; // $30/1M input tokens
|
|
33
|
+
const BATCHABLE_TOOLS = new Set(["search_text", "search_symbols", "find_references", "get_symbol"]);
|
|
34
|
+
const SEQUENTIAL_HINT_THRESHOLD = 3;
|
|
35
|
+
const CACHE_TTL_MS = 30_000; // 30s default for search results
|
|
36
|
+
const CACHE_TTL_STATIC_MS = 300_000; // 5min for static data (file tree, outline)
|
|
37
|
+
const CACHE_TTL_SYMBOL_MS = 120_000; // 2min for symbol reads (stable unless re-indexed)
|
|
38
|
+
const CACHE_MAX_SIZE = 200;
|
|
39
|
+
const SHORTENING_REGISTRY = new Map();
|
|
40
|
+
export function registerShortener(toolName, entry) {
|
|
41
|
+
SHORTENING_REGISTRY.set(toolName, entry);
|
|
42
|
+
}
|
|
43
|
+
export function resetShorteningRegistry() {
|
|
44
|
+
SHORTENING_REGISTRY.clear();
|
|
45
|
+
}
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// In-memory call tracking + response cache + in-flight dedup
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
let lastToolName = "";
|
|
50
|
+
let consecutiveCount = 0;
|
|
51
|
+
let listReposCallCount = 0;
|
|
52
|
+
/** Session-level tracking for cross-tool hints */
|
|
53
|
+
const fileTreePaths = new Set();
|
|
54
|
+
let sessionSearchSymbolsCalled = false;
|
|
55
|
+
let sessionGetSymbolCount = 0;
|
|
56
|
+
/** Cache completed responses */
|
|
57
|
+
const responseCache = new Map();
|
|
58
|
+
/** In-flight requests — coalesce parallel identical calls */
|
|
59
|
+
const inflight = new Map();
|
|
60
|
+
function getCacheKey(toolName, args) {
|
|
61
|
+
return `${toolName}\0${JSON.stringify(args, Object.keys(args).sort())}`;
|
|
62
|
+
}
|
|
63
|
+
const STATIC_TOOLS = new Set(["list_repos", "get_repo_outline", "get_file_tree", "get_file_outline", "get_knowledge_map", "detect_communities"]);
|
|
64
|
+
/** Tools whose data changes only when symbols change — use medium TTL */
|
|
65
|
+
const SYMBOL_TOOLS = new Set(["get_symbol", "get_symbols", "get_context_bundle", "find_references", "find_dead_code", "find_circular_deps", "find_unused_imports", "analyze_complexity"]);
|
|
66
|
+
/** Tools whose cache NEVER expires within a session (repo list doesn't change mid-session) */
|
|
67
|
+
const SESSION_PERMANENT_TOOLS = new Set(["list_repos"]);
|
|
68
|
+
function getCached(key) {
|
|
69
|
+
const entry = responseCache.get(key);
|
|
70
|
+
if (!entry)
|
|
71
|
+
return null;
|
|
72
|
+
const toolName = key.split("\0")[0] ?? "";
|
|
73
|
+
// Session-permanent tools never expire (repo list doesn't change mid-session)
|
|
74
|
+
if (SESSION_PERMANENT_TOOLS.has(toolName))
|
|
75
|
+
return entry.text;
|
|
76
|
+
const ttl = STATIC_TOOLS.has(toolName) ? CACHE_TTL_STATIC_MS
|
|
77
|
+
: SYMBOL_TOOLS.has(toolName) ? CACHE_TTL_SYMBOL_MS
|
|
78
|
+
: CACHE_TTL_MS;
|
|
79
|
+
if (Date.now() - entry.ts > ttl) {
|
|
80
|
+
responseCache.delete(key);
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
return entry.text;
|
|
84
|
+
}
|
|
85
|
+
function setCache(key, text) {
|
|
86
|
+
if (responseCache.size >= CACHE_MAX_SIZE) {
|
|
87
|
+
const oldest = responseCache.keys().next().value;
|
|
88
|
+
if (oldest !== undefined)
|
|
89
|
+
responseCache.delete(oldest);
|
|
90
|
+
}
|
|
91
|
+
responseCache.set(key, { text, ts: Date.now() });
|
|
92
|
+
}
|
|
93
|
+
/** Track sequential calls + session-level state. Exported for testing. */
|
|
94
|
+
export function trackSequentialCalls(toolName) {
|
|
95
|
+
if (toolName === lastToolName && BATCHABLE_TOOLS.has(toolName)) {
|
|
96
|
+
consecutiveCount++;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
consecutiveCount = 1;
|
|
100
|
+
}
|
|
101
|
+
lastToolName = toolName;
|
|
102
|
+
if (toolName === "list_repos") {
|
|
103
|
+
listReposCallCount++;
|
|
104
|
+
}
|
|
105
|
+
if (toolName === "search_symbols") {
|
|
106
|
+
sessionSearchSymbolsCalled = true;
|
|
107
|
+
}
|
|
108
|
+
if (toolName === "get_symbol") {
|
|
109
|
+
sessionGetSymbolCount++;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// ---------------------------------------------------------------------------
|
|
113
|
+
// Functions
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
export function errorResult(message) {
|
|
116
|
+
return {
|
|
117
|
+
content: [
|
|
118
|
+
{ type: "text", text: JSON.stringify({ error: message }) },
|
|
119
|
+
],
|
|
120
|
+
isError: true,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const QUESTION_PATTERN = /^(how|where|why|what|when|which)\b/i;
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
// Hint codes — compact symbols decoded via CLAUDE.md legend.
|
|
126
|
+
// Each hint costs ~3-5 tokens instead of 20-50 tokens in verbose form.
|
|
127
|
+
// Legend lives in CLAUDE.md so LLM sees it once per session.
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
//
|
|
130
|
+
// H1(n) = >50 matches, add group_by_file=true
|
|
131
|
+
// H2(n,t)= consecutive identical tool calls, batch them
|
|
132
|
+
// H3(n) = list_repos called multiple times, result is static
|
|
133
|
+
// H4 = include_source without file_pattern, add file_pattern
|
|
134
|
+
// H5(p) = duplicate get_file_tree path, cache result
|
|
135
|
+
// H6(n) = many search_symbols results without detail_level, use compact
|
|
136
|
+
// H7 = get_symbol after search_symbols, use get_context_bundle instead
|
|
137
|
+
// H8(n) = 3+ get_symbol calls, use assemble_context(level='L1')
|
|
138
|
+
// H9 = question-word text query, use semantic search
|
|
139
|
+
// ---------------------------------------------------------------------------
|
|
140
|
+
/**
|
|
141
|
+
* Build optimization hints based on response data + call patterns.
|
|
142
|
+
* Returns compact hint codes (decoded in CLAUDE.md).
|
|
143
|
+
*/
|
|
144
|
+
export function buildResponseHint(toolName, args, data) {
|
|
145
|
+
const hints = [];
|
|
146
|
+
if (toolName === "search_text" && Array.isArray(data) && data.length > HIGH_CARDINALITY_THRESHOLD) {
|
|
147
|
+
if (!args["group_by_file"] && !args["auto_group"]) {
|
|
148
|
+
hints.push(`⚡H1(${data.length})`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (consecutiveCount >= SEQUENTIAL_HINT_THRESHOLD && BATCHABLE_TOOLS.has(toolName)) {
|
|
152
|
+
const batchTool = toolName === "get_symbol" ? "get_symbols" : "codebase_retrieval";
|
|
153
|
+
hints.push(`⚡H2(${consecutiveCount},${batchTool})`);
|
|
154
|
+
}
|
|
155
|
+
if (toolName === "list_repos" && listReposCallCount > 1) {
|
|
156
|
+
hints.push(`⚡H3(${listReposCallCount})`);
|
|
157
|
+
}
|
|
158
|
+
if (toolName === "search_symbols" && args["include_source"] && !args["file_pattern"]) {
|
|
159
|
+
hints.push(`⚡H4`);
|
|
160
|
+
}
|
|
161
|
+
if (toolName === "get_file_tree") {
|
|
162
|
+
const repo = typeof args["repo"] === "string" ? args["repo"] : "";
|
|
163
|
+
const pathPrefix = typeof args["path_prefix"] === "string" ? args["path_prefix"] : "";
|
|
164
|
+
const pathKey = `${repo}\0${pathPrefix}`;
|
|
165
|
+
if (fileTreePaths.has(pathKey)) {
|
|
166
|
+
hints.push(`⚡H5(${pathPrefix || "/"})`);
|
|
167
|
+
}
|
|
168
|
+
fileTreePaths.add(pathKey);
|
|
169
|
+
}
|
|
170
|
+
if (toolName === "search_symbols" && !args["detail_level"]) {
|
|
171
|
+
const resultCount = Array.isArray(data) ? data.length : 0;
|
|
172
|
+
if (resultCount > 5) {
|
|
173
|
+
hints.push(`⚡H6(${resultCount})`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (toolName === "get_symbol" && sessionSearchSymbolsCalled) {
|
|
177
|
+
hints.push(`⚡H7`);
|
|
178
|
+
}
|
|
179
|
+
if (toolName === "get_symbol" && sessionGetSymbolCount >= 3) {
|
|
180
|
+
hints.push(`⚡H8(${sessionGetSymbolCount})`);
|
|
181
|
+
}
|
|
182
|
+
if (toolName === "search_text" && typeof args["query"] === "string" && QUESTION_PATTERN.test(args["query"])) {
|
|
183
|
+
hints.push(`⚡H9`);
|
|
184
|
+
}
|
|
185
|
+
return hints.length > 0 ? hints.join(" ") : null;
|
|
186
|
+
}
|
|
187
|
+
function estimateSavings(toolName, resultTokens) {
|
|
188
|
+
const mult = SAVINGS_MULTIPLIER[toolName];
|
|
189
|
+
if (!mult || mult <= 1.0)
|
|
190
|
+
return null;
|
|
191
|
+
const saved = Math.round(resultTokens * (mult - 1));
|
|
192
|
+
if (saved < 50)
|
|
193
|
+
return null; // Don't show trivial savings
|
|
194
|
+
return { tokens: saved, cost: saved * OPUS_COST_PER_TOKEN };
|
|
195
|
+
}
|
|
196
|
+
/** Persist oversized output to a temp file, return the file path. */
|
|
197
|
+
function persistLargeOutput(text, toolName) {
|
|
198
|
+
const dir = join(tmpdir(), "codesift-output");
|
|
199
|
+
mkdirSync(dir, { recursive: true });
|
|
200
|
+
const ts = Date.now();
|
|
201
|
+
const filePath = join(dir, `${toolName}-${ts}.json`);
|
|
202
|
+
writeFileSync(filePath, text, "utf-8");
|
|
203
|
+
return filePath;
|
|
204
|
+
}
|
|
205
|
+
function formatResponse(text, toolName, args, data) {
|
|
206
|
+
// Large output management: persist to disk when output is very large
|
|
207
|
+
let persistedPath;
|
|
208
|
+
if (text.length > PERSIST_THRESHOLD_CHARS) {
|
|
209
|
+
persistedPath = persistLargeOutput(text, toolName);
|
|
210
|
+
}
|
|
211
|
+
// Progressive cascade: try registered shorteners before hard truncation
|
|
212
|
+
const skipCascade = toolName === "codebase_retrieval" ||
|
|
213
|
+
typeof args?.detail_level === "string" ||
|
|
214
|
+
typeof args?.token_budget === "number";
|
|
215
|
+
if (!skipCascade) {
|
|
216
|
+
const entry = SHORTENING_REGISTRY.get(toolName);
|
|
217
|
+
if (entry) {
|
|
218
|
+
if (text.length > COMPACT_THRESHOLD && entry.compact) {
|
|
219
|
+
text = "[compact] " + entry.compact(data);
|
|
220
|
+
}
|
|
221
|
+
if (text.length > COUNTS_THRESHOLD && entry.counts) {
|
|
222
|
+
text = "[counts] " + entry.counts(data);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Hard cap: truncate oversized responses
|
|
227
|
+
const maxChars = MAX_RESPONSE_TOKENS * CHARS_PER_TOKEN;
|
|
228
|
+
if (text.length > maxChars) {
|
|
229
|
+
const estimatedTokens = Math.round(text.length / CHARS_PER_TOKEN);
|
|
230
|
+
const fullSizeInfo = persistedPath
|
|
231
|
+
? `\n📄 Full output (${estimatedTokens.toLocaleString()} tokens) saved to: ${persistedPath}`
|
|
232
|
+
: "";
|
|
233
|
+
text = text.slice(0, maxChars) +
|
|
234
|
+
`\n\n⚠️ Response truncated: ${estimatedTokens.toLocaleString()} tokens exceeded ${MAX_RESPONSE_TOKENS.toLocaleString()} token limit. Use file_pattern to narrow scope, or group_by_file=true for compact output.${fullSizeInfo}`;
|
|
235
|
+
}
|
|
236
|
+
// Token savings estimate
|
|
237
|
+
const savings = estimateSavings(toolName, Math.round(text.length / CHARS_PER_TOKEN));
|
|
238
|
+
if (savings) {
|
|
239
|
+
text = `⚡ ~${savings.tokens.toLocaleString()} tok saved\n\n` + text;
|
|
240
|
+
addSavings(savings.tokens);
|
|
241
|
+
}
|
|
242
|
+
const hint = buildResponseHint(toolName, args, data);
|
|
243
|
+
if (hint) {
|
|
244
|
+
// Prepend hint so agent sees it first (appended hints get ignored after long output)
|
|
245
|
+
return { content: [{ type: "text", text: hint + "\n\n" + text }] };
|
|
246
|
+
}
|
|
247
|
+
return { content: [{ type: "text", text }] };
|
|
248
|
+
}
|
|
249
|
+
export function wrapTool(toolName, args, fn) {
|
|
250
|
+
return () => {
|
|
251
|
+
const cacheKey = getCacheKey(toolName, args);
|
|
252
|
+
// 1. Return completed cache hit
|
|
253
|
+
const cached = getCached(cacheKey);
|
|
254
|
+
if (cached) {
|
|
255
|
+
trackSequentialCalls(toolName);
|
|
256
|
+
return Promise.resolve({
|
|
257
|
+
content: [{
|
|
258
|
+
type: "text",
|
|
259
|
+
text: cached + "\n⚡ cached",
|
|
260
|
+
}],
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
// 2. Coalesce with in-flight request (parallel dedup)
|
|
264
|
+
const pending = inflight.get(cacheKey);
|
|
265
|
+
if (pending) {
|
|
266
|
+
return pending.then((response) => ({
|
|
267
|
+
content: [{
|
|
268
|
+
type: "text",
|
|
269
|
+
text: (response.content[0]?.text ?? "") + "\n⚡ deduped",
|
|
270
|
+
}],
|
|
271
|
+
}));
|
|
272
|
+
}
|
|
273
|
+
// 3. Execute and cache
|
|
274
|
+
const promise = (async () => {
|
|
275
|
+
const start = performance.now();
|
|
276
|
+
try {
|
|
277
|
+
const data = await fn();
|
|
278
|
+
const text = typeof data === "string" ? data : JSON.stringify(data);
|
|
279
|
+
const elapsed = performance.now() - start;
|
|
280
|
+
trackToolCall(toolName, args, text, data, elapsed);
|
|
281
|
+
trackSequentialCalls(toolName);
|
|
282
|
+
setCache(cacheKey, text);
|
|
283
|
+
return formatResponse(text, toolName, args, data);
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
const elapsed = performance.now() - start;
|
|
287
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
288
|
+
trackToolCall(toolName, args, message, { error: message }, elapsed);
|
|
289
|
+
trackSequentialCalls(toolName);
|
|
290
|
+
return errorResult(message);
|
|
291
|
+
}
|
|
292
|
+
finally {
|
|
293
|
+
inflight.delete(cacheKey);
|
|
294
|
+
}
|
|
295
|
+
})();
|
|
296
|
+
inflight.set(cacheKey, promise);
|
|
297
|
+
return promise;
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Reset all session-level tracking state. Exported for testing only.
|
|
302
|
+
*/
|
|
303
|
+
export function resetSessionState() {
|
|
304
|
+
lastToolName = "";
|
|
305
|
+
consecutiveCount = 0;
|
|
306
|
+
listReposCallCount = 0;
|
|
307
|
+
fileTreePaths.clear();
|
|
308
|
+
sessionSearchSymbolsCalled = false;
|
|
309
|
+
sessionGetSymbolCount = 0;
|
|
310
|
+
responseCache.clear();
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=server-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-helpers.js","sourceRoot":"","sources":["../src/server-helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export { buildResponseHint, resetSessionState } from "./server-helpers.js";
|
|
2
2
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|