codesift-mcp 0.7.0 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/cli/git-hooks-installer.d.ts.map +1 -1
- package/dist/cli/git-hooks-installer.js +18 -5
- package/dist/cli/git-hooks-installer.js.map +1 -1
- package/dist/cli/hooks.d.ts.map +1 -1
- package/dist/cli/hooks.js +106 -2
- package/dist/cli/hooks.js.map +1 -1
- package/dist/cli/setup.d.ts +5 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +31 -5
- package/dist/cli/setup.js.map +1 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -1
- package/dist/config.js.map +1 -1
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +6 -1
- package/dist/instructions.js.map +1 -1
- package/dist/parser/extractors/hono.d.ts.map +1 -1
- package/dist/parser/extractors/hono.js +21 -13
- package/dist/parser/extractors/hono.js.map +1 -1
- package/dist/parser/extractors/php.d.ts +12 -0
- package/dist/parser/extractors/php.d.ts.map +1 -1
- package/dist/parser/extractors/php.js +440 -26
- package/dist/parser/extractors/php.js.map +1 -1
- package/dist/register-tool-loaders.d.ts +16 -0
- package/dist/register-tool-loaders.d.ts.map +1 -1
- package/dist/register-tool-loaders.js +26 -0
- package/dist/register-tool-loaders.js.map +1 -1
- package/dist/register-tools.d.ts +3 -1
- package/dist/register-tools.d.ts.map +1 -1
- package/dist/register-tools.js +354 -7
- package/dist/register-tools.js.map +1 -1
- package/dist/retrieval/codebase-retrieval.d.ts.map +1 -1
- package/dist/retrieval/codebase-retrieval.js +22 -0
- package/dist/retrieval/codebase-retrieval.js.map +1 -1
- package/dist/retrieval/retrieval-schemas.d.ts +4 -0
- package/dist/retrieval/retrieval-schemas.d.ts.map +1 -1
- package/dist/retrieval/semantic-handlers.js +1 -1
- package/dist/retrieval/semantic-handlers.js.map +1 -1
- package/dist/search/semantic.d.ts +21 -5
- package/dist/search/semantic.d.ts.map +1 -1
- package/dist/search/semantic.js +129 -4
- package/dist/search/semantic.js.map +1 -1
- package/dist/search/tool-ranker.js +1 -1
- package/dist/search/tool-ranker.js.map +1 -1
- package/dist/server-helpers.d.ts.map +1 -1
- package/dist/server-helpers.js +96 -1
- package/dist/server-helpers.js.map +1 -1
- package/dist/storage/index-store.d.ts.map +1 -1
- package/dist/storage/index-store.js +7 -5
- package/dist/storage/index-store.js.map +1 -1
- package/dist/storage/registry.d.ts +28 -4
- package/dist/storage/registry.d.ts.map +1 -1
- package/dist/storage/registry.js +126 -5
- package/dist/storage/registry.js.map +1 -1
- package/dist/storage/usage-stats.d.ts +2 -0
- package/dist/storage/usage-stats.d.ts.map +1 -1
- package/dist/storage/usage-stats.js +6 -0
- package/dist/storage/usage-stats.js.map +1 -1
- package/dist/storage/usage-tracker.js +1 -1
- package/dist/storage/usage-tracker.js.map +1 -1
- package/dist/tools/_helpers.d.ts.map +1 -1
- package/dist/tools/_helpers.js +14 -0
- package/dist/tools/_helpers.js.map +1 -1
- package/dist/tools/conversation-tools.js +1 -1
- package/dist/tools/conversation-tools.js.map +1 -1
- package/dist/tools/index-tools.d.ts +12 -0
- package/dist/tools/index-tools.d.ts.map +1 -1
- package/dist/tools/index-tools.js +52 -5
- package/dist/tools/index-tools.js.map +1 -1
- package/dist/tools/insights-tools.d.ts +137 -0
- package/dist/tools/insights-tools.d.ts.map +1 -0
- package/dist/tools/insights-tools.js +438 -0
- package/dist/tools/insights-tools.js.map +1 -0
- package/dist/tools/pattern-tools.d.ts +7 -0
- package/dist/tools/pattern-tools.d.ts.map +1 -1
- package/dist/tools/pattern-tools.js +287 -15
- package/dist/tools/pattern-tools.js.map +1 -1
- package/dist/tools/php-tools.d.ts +78 -4
- package/dist/tools/php-tools.d.ts.map +1 -1
- package/dist/tools/php-tools.js +824 -42
- package/dist/tools/php-tools.js.map +1 -1
- package/dist/tools/php8-compat-tools.d.ts +62 -0
- package/dist/tools/php8-compat-tools.d.ts.map +1 -0
- package/dist/tools/php8-compat-tools.js +287 -0
- package/dist/tools/php8-compat-tools.js.map +1 -0
- package/dist/tools/php8-migration-candidates-tools.d.ts +68 -0
- package/dist/tools/php8-migration-candidates-tools.d.ts.map +1 -0
- package/dist/tools/php8-migration-candidates-tools.js +476 -0
- package/dist/tools/php8-migration-candidates-tools.js.map +1 -0
- package/dist/tools/phpstan-baseline-tools.d.ts +62 -0
- package/dist/tools/phpstan-baseline-tools.d.ts.map +1 -0
- package/dist/tools/phpstan-baseline-tools.js +263 -0
- package/dist/tools/phpstan-baseline-tools.js.map +1 -0
- package/dist/tools/project-tools.d.ts +4 -2
- package/dist/tools/project-tools.d.ts.map +1 -1
- package/dist/tools/project-tools.js +19 -6
- package/dist/tools/project-tools.js.map +1 -1
- package/dist/tools/react-tools.d.ts +24 -0
- package/dist/tools/react-tools.d.ts.map +1 -1
- package/dist/tools/react-tools.js +292 -3
- package/dist/tools/react-tools.js.map +1 -1
- package/dist/tools/search-tools.d.ts.map +1 -1
- package/dist/tools/search-tools.js +92 -10
- package/dist/tools/search-tools.js.map +1 -1
- package/dist/tools/symbol-tools.d.ts.map +1 -1
- package/dist/tools/symbol-tools.js +4 -1
- package/dist/tools/symbol-tools.js.map +1 -1
- package/dist/tools/yii-console-tools.d.ts +69 -0
- package/dist/tools/yii-console-tools.d.ts.map +1 -0
- package/dist/tools/yii-console-tools.js +256 -0
- package/dist/tools/yii-console-tools.js.map +1 -0
- package/dist/tools/yii-migrations-tools.d.ts +79 -0
- package/dist/tools/yii-migrations-tools.d.ts.map +1 -0
- package/dist/tools/yii-migrations-tools.js +543 -0
- package/dist/tools/yii-migrations-tools.js.map +1 -0
- package/dist/tools/yii-modules-tools.d.ts +63 -0
- package/dist/tools/yii-modules-tools.d.ts.map +1 -0
- package/dist/tools/yii-modules-tools.js +201 -0
- package/dist/tools/yii-modules-tools.js.map +1 -0
- package/dist/tools/yii-rbac-tools.d.ts +89 -0
- package/dist/tools/yii-rbac-tools.d.ts.map +1 -0
- package/dist/tools/yii-rbac-tools.js +238 -0
- package/dist/tools/yii-rbac-tools.js.map +1 -0
- package/dist/tools/yii3-attribute-candidates-tools.d.ts +72 -0
- package/dist/tools/yii3-attribute-candidates-tools.d.ts.map +1 -0
- package/dist/tools/yii3-attribute-candidates-tools.js +301 -0
- package/dist/tools/yii3-attribute-candidates-tools.js.map +1 -0
- package/dist/tools/yii3-migration-tools.d.ts +74 -0
- package/dist/tools/yii3-migration-tools.d.ts.map +1 -0
- package/dist/tools/yii3-migration-tools.js +440 -0
- package/dist/tools/yii3-migration-tools.js.map +1 -0
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/constant-file-pattern.d.ts +3 -1
- package/dist/utils/constant-file-pattern.d.ts.map +1 -1
- package/dist/utils/constant-file-pattern.js +6 -4
- package/dist/utils/constant-file-pattern.js.map +1 -1
- package/dist/utils/heritage-edges.d.ts +16 -0
- package/dist/utils/heritage-edges.d.ts.map +1 -1
- package/dist/utils/heritage-edges.js +31 -10
- package/dist/utils/heritage-edges.js.map +1 -1
- package/dist/utils/source-stripper.d.ts +23 -0
- package/dist/utils/source-stripper.d.ts.map +1 -0
- package/dist/utils/source-stripper.js +239 -0
- package/dist/utils/source-stripper.js.map +1 -0
- package/dist/utils/tsconfig-paths.d.ts +2 -2
- package/dist/utils/tsconfig-paths.d.ts.map +1 -1
- package/dist/utils/tsconfig-paths.js +10 -4
- package/dist/utils/tsconfig-paths.js.map +1 -1
- package/dist/utils/wall-clock.d.ts +9 -0
- package/dist/utils/wall-clock.d.ts.map +1 -0
- package/dist/utils/wall-clock.js +19 -0
- package/dist/utils/wall-clock.js.map +1 -0
- package/package.json +1 -1
- package/rules/codesift.md +10 -3
- package/rules/codesift.mdc +10 -3
- package/rules/codex.md +10 -3
- package/rules/gemini.md +10 -3
|
@@ -29,45 +29,66 @@ function buildDeclaredTypeFiles(index) {
|
|
|
29
29
|
function resolveHeritageTargetFile(raw, nameToFiles) {
|
|
30
30
|
const norm = normalizeHeritageRef(raw);
|
|
31
31
|
if (!norm)
|
|
32
|
-
return
|
|
32
|
+
return { status: "unresolved" };
|
|
33
33
|
const candidates = [norm];
|
|
34
34
|
const dot = norm.lastIndexOf(".");
|
|
35
35
|
if (dot >= 0)
|
|
36
36
|
candidates.push(norm.slice(dot + 1));
|
|
37
|
+
let sawAmbiguous = false;
|
|
37
38
|
for (const key of candidates) {
|
|
38
39
|
const files = nameToFiles.get(key);
|
|
39
|
-
if (files
|
|
40
|
-
|
|
40
|
+
if (!files)
|
|
41
|
+
continue;
|
|
42
|
+
if (files.size === 1)
|
|
43
|
+
return { status: "resolved", file: [...files][0] };
|
|
44
|
+
sawAmbiguous = true;
|
|
41
45
|
}
|
|
42
|
-
return
|
|
46
|
+
return sawAmbiguous ? { status: "ambiguous" } : { status: "unresolved" };
|
|
43
47
|
}
|
|
44
48
|
/**
|
|
45
49
|
* Best-effort module-level edges from symbol `extends` / `implements`.
|
|
46
50
|
* Resolves each referenced type name to a file only when exactly one
|
|
47
51
|
* declaration (class / interface / type alias) with that simple name exists.
|
|
52
|
+
*
|
|
53
|
+
* Returns the edge list and a `stats` block counting heritage refs that could
|
|
54
|
+
* not be resolved (ambiguous: 2+ declarations with same simple name; unresolved:
|
|
55
|
+
* no declared type with that name) so callers can surface the gap instead of
|
|
56
|
+
* silently dropping edges.
|
|
48
57
|
*/
|
|
49
|
-
export function
|
|
58
|
+
export function collectHeritageFileEdgesWithStats(index) {
|
|
50
59
|
const nameToFiles = buildDeclaredTypeFiles(index);
|
|
51
60
|
const out = [];
|
|
52
61
|
const seen = new Set();
|
|
62
|
+
const stats = { ambiguous: 0, unresolved: 0 };
|
|
53
63
|
const push = (sym, names, kind) => {
|
|
54
64
|
if (!names?.length)
|
|
55
65
|
return;
|
|
56
66
|
for (const raw of names) {
|
|
57
|
-
const
|
|
58
|
-
if (
|
|
67
|
+
const res = resolveHeritageTargetFile(raw, nameToFiles);
|
|
68
|
+
if (res.status === "ambiguous") {
|
|
69
|
+
stats.ambiguous += 1;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (res.status === "unresolved") {
|
|
73
|
+
stats.unresolved += 1;
|
|
59
74
|
continue;
|
|
60
|
-
|
|
75
|
+
}
|
|
76
|
+
if (res.file === sym.file)
|
|
77
|
+
continue;
|
|
78
|
+
const key = `${sym.file}|${res.file}|${kind}`;
|
|
61
79
|
if (seen.has(key))
|
|
62
80
|
continue;
|
|
63
81
|
seen.add(key);
|
|
64
|
-
out.push({ from: sym.file, to:
|
|
82
|
+
out.push({ from: sym.file, to: res.file, kind });
|
|
65
83
|
}
|
|
66
84
|
};
|
|
67
85
|
for (const sym of index.symbols) {
|
|
68
86
|
push(sym, sym.extends, "extends");
|
|
69
87
|
push(sym, sym.implements, "implements");
|
|
70
88
|
}
|
|
71
|
-
return out;
|
|
89
|
+
return { edges: out, stats };
|
|
90
|
+
}
|
|
91
|
+
export function collectHeritageFileEdges(index) {
|
|
92
|
+
return collectHeritageFileEdgesWithStats(index).edges;
|
|
72
93
|
}
|
|
73
94
|
//# sourceMappingURL=heritage-edges.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heritage-edges.js","sourceRoot":"","sources":["../../src/utils/heritage-edges.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"heritage-edges.js","sourceRoot":"","sources":["../../src/utils/heritage-edges.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-pass character-level state machine that strips comments, string
|
|
3
|
+
* literals, template literals, and JS regex literals from source code,
|
|
4
|
+
* replacing each stripped character with whitespace so that downstream
|
|
5
|
+
* regex match positions remain stable.
|
|
6
|
+
*
|
|
7
|
+
* Tier 8 — promoted from Tier 7's react-tools internal helper. Used by both
|
|
8
|
+
* pattern-tools.ts (preprocessing for regex patterns with `preprocess: true`)
|
|
9
|
+
* and react-tools.ts (Suspense ancestor detection).
|
|
10
|
+
*
|
|
11
|
+
* Handles:
|
|
12
|
+
* - // line comments
|
|
13
|
+
* - block comments
|
|
14
|
+
* - 'single' / "double" / `template` string literals (with escape sequences)
|
|
15
|
+
* - JS regex literals /pattern/flags including character classes [...]
|
|
16
|
+
*
|
|
17
|
+
* Heuristic — distinguishes `/` as division from `/` as regex-start by
|
|
18
|
+
* examining the preceding non-whitespace token. Does not handle:
|
|
19
|
+
* - JSX text nodes (out of scope; JSX has no comment grammar between tags)
|
|
20
|
+
* - tagged template expressions ${...} contents (treated opaquely)
|
|
21
|
+
*/
|
|
22
|
+
export declare function stripCommentsAndStrings(source: string): string;
|
|
23
|
+
//# sourceMappingURL=source-stripper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-stripper.d.ts","sourceRoot":"","sources":["../../src/utils/source-stripper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAsN9D"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-pass character-level state machine that strips comments, string
|
|
3
|
+
* literals, template literals, and JS regex literals from source code,
|
|
4
|
+
* replacing each stripped character with whitespace so that downstream
|
|
5
|
+
* regex match positions remain stable.
|
|
6
|
+
*
|
|
7
|
+
* Tier 8 — promoted from Tier 7's react-tools internal helper. Used by both
|
|
8
|
+
* pattern-tools.ts (preprocessing for regex patterns with `preprocess: true`)
|
|
9
|
+
* and react-tools.ts (Suspense ancestor detection).
|
|
10
|
+
*
|
|
11
|
+
* Handles:
|
|
12
|
+
* - // line comments
|
|
13
|
+
* - block comments
|
|
14
|
+
* - 'single' / "double" / `template` string literals (with escape sequences)
|
|
15
|
+
* - JS regex literals /pattern/flags including character classes [...]
|
|
16
|
+
*
|
|
17
|
+
* Heuristic — distinguishes `/` as division from `/` as regex-start by
|
|
18
|
+
* examining the preceding non-whitespace token. Does not handle:
|
|
19
|
+
* - JSX text nodes (out of scope; JSX has no comment grammar between tags)
|
|
20
|
+
* - tagged template expressions ${...} contents (treated opaquely)
|
|
21
|
+
*/
|
|
22
|
+
export function stripCommentsAndStrings(source) {
|
|
23
|
+
const out = [];
|
|
24
|
+
let i = 0;
|
|
25
|
+
const n = source.length;
|
|
26
|
+
let state = "code";
|
|
27
|
+
let lastCodeChar = "";
|
|
28
|
+
// Stack of template-literal contexts pending continuation after `${...}`
|
|
29
|
+
// expression interpolation. Each entry stores the brace depth at which to
|
|
30
|
+
// pop back to template state.
|
|
31
|
+
const templateStack = [];
|
|
32
|
+
let braceDepth = 0;
|
|
33
|
+
// JS keywords that legally precede a regex literal (start an expression).
|
|
34
|
+
// Adversarial Run 1 CRITICAL: `return /x/`, `throw /x/`, `case /x/` were
|
|
35
|
+
// previously misclassified as division because the preceding char was `n`
|
|
36
|
+
// (return) / `w` (throw) / `e` (case) — word chars failing the operator test.
|
|
37
|
+
const REGEX_PRECEDING_KEYWORDS = new Set([
|
|
38
|
+
"return", "throw", "case", "delete", "in", "of", "instanceof", "typeof",
|
|
39
|
+
"new", "void", "yield", "await", "do", "else",
|
|
40
|
+
]);
|
|
41
|
+
function isRegexContext(prev, prevToken) {
|
|
42
|
+
if (prev === "")
|
|
43
|
+
return true;
|
|
44
|
+
if (REGEX_PRECEDING_KEYWORDS.has(prevToken))
|
|
45
|
+
return true;
|
|
46
|
+
return /[=(,;!&|?:{[<>+\-*%^~]/.test(prev);
|
|
47
|
+
}
|
|
48
|
+
// Track most recent identifier-shaped token from the code stream so we can
|
|
49
|
+
// recognise keywords like `return` / `throw` before a `/`.
|
|
50
|
+
let prevToken = "";
|
|
51
|
+
let identBuf = "";
|
|
52
|
+
while (i < n) {
|
|
53
|
+
const c = source[i];
|
|
54
|
+
const next = i + 1 < n ? source[i + 1] : "";
|
|
55
|
+
if (state === "code") {
|
|
56
|
+
if (c === "/" && next === "/") {
|
|
57
|
+
if (identBuf.length > 0) {
|
|
58
|
+
prevToken = identBuf;
|
|
59
|
+
identBuf = "";
|
|
60
|
+
}
|
|
61
|
+
state = "lineComment";
|
|
62
|
+
out.push(" ", " ");
|
|
63
|
+
i += 2;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (c === "/" && next === "*") {
|
|
67
|
+
if (identBuf.length > 0) {
|
|
68
|
+
prevToken = identBuf;
|
|
69
|
+
identBuf = "";
|
|
70
|
+
}
|
|
71
|
+
state = "blockComment";
|
|
72
|
+
out.push(" ", " ");
|
|
73
|
+
i += 2;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (c === "/" && isRegexContext(lastCodeChar, prevToken)) {
|
|
77
|
+
state = "regex";
|
|
78
|
+
out.push(" ");
|
|
79
|
+
i++;
|
|
80
|
+
identBuf = "";
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (c === "'") {
|
|
84
|
+
state = "single";
|
|
85
|
+
out.push(" ");
|
|
86
|
+
i++;
|
|
87
|
+
lastCodeChar = c;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (c === '"') {
|
|
91
|
+
state = "double";
|
|
92
|
+
out.push(" ");
|
|
93
|
+
i++;
|
|
94
|
+
lastCodeChar = c;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (c === "`") {
|
|
98
|
+
state = "template";
|
|
99
|
+
out.push(" ");
|
|
100
|
+
i++;
|
|
101
|
+
lastCodeChar = c;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
// Track brace depth — needed for template ${...} expression closure.
|
|
105
|
+
if (c === "{")
|
|
106
|
+
braceDepth++;
|
|
107
|
+
else if (c === "}") {
|
|
108
|
+
// Closing `}` may end a template ${} expression
|
|
109
|
+
if (templateStack.length > 0 && templateStack[templateStack.length - 1].braceDepth === braceDepth) {
|
|
110
|
+
templateStack.pop();
|
|
111
|
+
state = "template";
|
|
112
|
+
out.push(" ");
|
|
113
|
+
i++;
|
|
114
|
+
// Reset code-state token tracking
|
|
115
|
+
if (identBuf.length > 0) {
|
|
116
|
+
prevToken = identBuf;
|
|
117
|
+
identBuf = "";
|
|
118
|
+
}
|
|
119
|
+
lastCodeChar = "";
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
braceDepth--;
|
|
123
|
+
}
|
|
124
|
+
out.push(c);
|
|
125
|
+
if (/\s/.test(c)) {
|
|
126
|
+
// Whitespace flushes any identifier accumulated so far to prevToken.
|
|
127
|
+
if (identBuf.length > 0) {
|
|
128
|
+
prevToken = identBuf;
|
|
129
|
+
identBuf = "";
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
lastCodeChar = c;
|
|
134
|
+
// Track identifier-shaped tokens for keyword-aware regex detection.
|
|
135
|
+
if (/[A-Za-z_$]/.test(c) || (/[0-9]/.test(c) && identBuf.length > 0)) {
|
|
136
|
+
identBuf += c;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
if (identBuf.length > 0)
|
|
140
|
+
prevToken = identBuf;
|
|
141
|
+
identBuf = "";
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
i++;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (state === "lineComment") {
|
|
148
|
+
if (c === "\n") {
|
|
149
|
+
state = "code";
|
|
150
|
+
out.push("\n");
|
|
151
|
+
i++;
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
out.push(" ");
|
|
155
|
+
i++;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (state === "blockComment") {
|
|
159
|
+
if (c === "*" && next === "/") {
|
|
160
|
+
state = "code";
|
|
161
|
+
out.push(" ", " ");
|
|
162
|
+
i += 2;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
out.push(c === "\n" ? "\n" : " ");
|
|
166
|
+
i++;
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (state === "regex") {
|
|
170
|
+
if (c === "\\" && next) {
|
|
171
|
+
out.push(" ", " ");
|
|
172
|
+
i += 2;
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
if (c === "[") {
|
|
176
|
+
out.push(" ");
|
|
177
|
+
i++;
|
|
178
|
+
while (i < n && source[i] !== "]") {
|
|
179
|
+
if (source[i] === "\\" && i + 1 < n) {
|
|
180
|
+
out.push(" ", " ");
|
|
181
|
+
i += 2;
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
out.push(source[i] === "\n" ? "\n" : " ");
|
|
185
|
+
i++;
|
|
186
|
+
}
|
|
187
|
+
if (i < n) {
|
|
188
|
+
out.push(" ");
|
|
189
|
+
i++;
|
|
190
|
+
}
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
if (c === "/") {
|
|
194
|
+
// Adversarial Run 1: consume trailing regex flags `gimsuy...` so they
|
|
195
|
+
// don't leak into code stream as identifier characters.
|
|
196
|
+
out.push(" ");
|
|
197
|
+
i++;
|
|
198
|
+
while (i < n && /[gimsuyd]/.test(source[i])) {
|
|
199
|
+
out.push(" ");
|
|
200
|
+
i++;
|
|
201
|
+
}
|
|
202
|
+
state = "code";
|
|
203
|
+
lastCodeChar = "/";
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
out.push(c === "\n" ? "\n" : " ");
|
|
207
|
+
i++;
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
// string-like states: single, double, template
|
|
211
|
+
const closer = state === "single" ? "'" : state === "double" ? '"' : "`";
|
|
212
|
+
if (c === "\\" && next) {
|
|
213
|
+
out.push(" ", " ");
|
|
214
|
+
i += 2;
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
// Template ${...} interpolation — switch to code state, push template
|
|
218
|
+
// context onto stack so we resume after matching `}`.
|
|
219
|
+
if (state === "template" && c === "$" && next === "{") {
|
|
220
|
+
templateStack.push({ braceDepth: braceDepth });
|
|
221
|
+
braceDepth++;
|
|
222
|
+
state = "code";
|
|
223
|
+
out.push("$", "{"); // preserve in output so contents get processed
|
|
224
|
+
i += 2;
|
|
225
|
+
lastCodeChar = "{";
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
if (c === closer) {
|
|
229
|
+
state = "code";
|
|
230
|
+
out.push(" ");
|
|
231
|
+
i++;
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
out.push(c === "\n" ? "\n" : " ");
|
|
235
|
+
i++;
|
|
236
|
+
}
|
|
237
|
+
return out.join("");
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=source-stripper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-stripper.js","sourceRoot":"","sources":["../../src/utils/source-stripper.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,8 +30,8 @@ interface ResolvedTsconfig {
|
|
|
30
30
|
export declare function clearTsconfigCache(): void;
|
|
31
31
|
/** Walk up from `dir` to `repoRoot`, find nearest `tsconfig.json`.
|
|
32
32
|
* Returns absolute path of the config file, or null if none found.
|
|
33
|
-
* Caches
|
|
34
|
-
*
|
|
33
|
+
* Caches every ancestor visited during the walk under the compound `(repoRoot, dir)`
|
|
34
|
+
* key — sibling lookups under the same parent are O(1) after the first hit. */
|
|
35
35
|
declare function findNearestTsconfig(dir: string, repoRoot: string): string | null;
|
|
36
36
|
/** Parse a tsconfig.json (with `extends` chain) and build a paths matcher.
|
|
37
37
|
* Returns null on parse error. Caches successful parses only — failures are
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tsconfig-paths.d.ts","sourceRoot":"","sources":["../../src/utils/tsconfig-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,UAAU,gBAAgB;IACxB,YAAY,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACvD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AA4BD,gEAAgE;AAChE,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC;AA0BD
|
|
1
|
+
{"version":3,"file":"tsconfig-paths.d.ts","sourceRoot":"","sources":["../../src/utils/tsconfig-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,UAAU,gBAAgB;IACxB,YAAY,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACvD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AA4BD,gEAAgE;AAChE,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC;AA0BD;;;+EAG+E;AAC/E,iBAAS,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyBzE;AAED;;;mDAGmD;AACnD,iBAAS,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CA8BjE;AAED;qCACqC;AACrC,iBAAS,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcnD;AAED;;;;;;mEAMmE;AACnE,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAqCf;AAGD,eAAO,MAAM,MAAM;;;;;;;CAQlB,CAAC"}
|
|
@@ -75,19 +75,23 @@ function dirToConfigCacheKey(importerDir, repoRoot) {
|
|
|
75
75
|
}
|
|
76
76
|
/** Walk up from `dir` to `repoRoot`, find nearest `tsconfig.json`.
|
|
77
77
|
* Returns absolute path of the config file, or null if none found.
|
|
78
|
-
* Caches
|
|
79
|
-
*
|
|
78
|
+
* Caches every ancestor visited during the walk under the compound `(repoRoot, dir)`
|
|
79
|
+
* key — sibling lookups under the same parent are O(1) after the first hit. */
|
|
80
80
|
function findNearestTsconfig(dir, repoRoot) {
|
|
81
81
|
const cacheKey = dirToConfigCacheKey(dir, repoRoot);
|
|
82
82
|
const cached = dirToConfigCache.get(cacheKey);
|
|
83
83
|
if (cached !== undefined)
|
|
84
84
|
return cached;
|
|
85
85
|
const repoRootAbs = resolve(repoRoot);
|
|
86
|
+
const visited = [];
|
|
86
87
|
let cur = resolve(dir);
|
|
87
88
|
while (isDirInsideRepo(repoRootAbs, cur)) {
|
|
89
|
+
visited.push(cur);
|
|
88
90
|
const candidate = join(cur, "tsconfig.json");
|
|
89
91
|
if (existsSync(candidate)) {
|
|
90
|
-
|
|
92
|
+
for (const v of visited) {
|
|
93
|
+
dirToConfigCache.set(dirToConfigCacheKey(v, repoRoot), candidate);
|
|
94
|
+
}
|
|
91
95
|
return candidate;
|
|
92
96
|
}
|
|
93
97
|
const parent = dirname(cur);
|
|
@@ -95,7 +99,9 @@ function findNearestTsconfig(dir, repoRoot) {
|
|
|
95
99
|
break;
|
|
96
100
|
cur = parent;
|
|
97
101
|
}
|
|
98
|
-
|
|
102
|
+
for (const v of visited) {
|
|
103
|
+
dirToConfigCache.set(dirToConfigCacheKey(v, repoRoot), null);
|
|
104
|
+
}
|
|
99
105
|
return null;
|
|
100
106
|
}
|
|
101
107
|
/** Parse a tsconfig.json (with `extends` chain) and build a paths matcher.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tsconfig-paths.js","sourceRoot":"","sources":["../../src/utils/tsconfig-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAQ/D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmC,CAAC;AAC/D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAyB,CAAC;AAE1D,gFAAgF;AAChF,sDAAsD;AACtD,MAAM,aAAa,GAAG;IACpB,EAAE;IACF,KAAK;IACL,MAAM;IACN,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,WAAW;IACX,YAAY;IACZ,aAAa;IACb,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;CACb,CAAC;AAEF,gEAAgE;AAChE,MAAM,UAAU,kBAAkB;IAChC,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED,sEAAsE;AACtE,SAAS,eAAe,CAAC,WAAmB,EAAE,GAAW;IACvD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,GAAG,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACvC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAChG,CAAC;AAED,wFAAwF;AACxF,SAAS,wBAAwB,CAAC,WAAmB,EAAE,eAAuB;IAC5E,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACvC,OAAO,CACL,GAAG,KAAK,EAAE;QACV,CAAC,UAAU,CAAC,GAAG,CAAC;QAChB,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;QAC3B,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CACtB,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAmB,EAAE,QAAgB;IAChE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;AACzD,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"tsconfig-paths.js","sourceRoot":"","sources":["../../src/utils/tsconfig-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Race a promise against a wall-clock timer. On timeout, resolves to the
|
|
3
|
+
* sentinel returned by `onTimeout`. The original work continues to completion
|
|
4
|
+
* and is discarded — there is no cancellation token plumbed through the
|
|
5
|
+
* search pipeline. That is intentional: cancellation would require touching
|
|
6
|
+
* every async leaf in the codebase. Discarding the result is sufficient.
|
|
7
|
+
*/
|
|
8
|
+
export declare function raceWallClock<T, R>(work: Promise<T>, ms: number, onTimeout: () => R): Promise<T | R>;
|
|
9
|
+
//# sourceMappingURL=wall-clock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wall-clock.d.ts","sourceRoot":"","sources":["../../src/utils/wall-clock.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAChC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,CAAC,GACjB,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAKhB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Shared wall-clock cap helpers. Used by hot search paths whose telemetry
|
|
2
|
+
// shows occasional 5-15 minute runaway calls (broad queries on huge repos,
|
|
3
|
+
// cold semantic embeddings). The cap returns control to the agent quickly
|
|
4
|
+
// with an actionable hint instead of hanging the conversation.
|
|
5
|
+
const TIMEOUT = Symbol("codesift.wall-clock.timeout");
|
|
6
|
+
/**
|
|
7
|
+
* Race a promise against a wall-clock timer. On timeout, resolves to the
|
|
8
|
+
* sentinel returned by `onTimeout`. The original work continues to completion
|
|
9
|
+
* and is discarded — there is no cancellation token plumbed through the
|
|
10
|
+
* search pipeline. That is intentional: cancellation would require touching
|
|
11
|
+
* every async leaf in the codebase. Discarding the result is sufficient.
|
|
12
|
+
*/
|
|
13
|
+
export function raceWallClock(work, ms, onTimeout) {
|
|
14
|
+
return Promise.race([
|
|
15
|
+
work,
|
|
16
|
+
new Promise((resolve) => setTimeout(() => resolve(TIMEOUT), ms)),
|
|
17
|
+
]).then((v) => (v === TIMEOUT ? onTimeout() : v));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=wall-clock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wall-clock.js","sourceRoot":"","sources":["../../src/utils/wall-clock.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,0EAA0E;AAC1E,+DAA+D;AAE/D,MAAM,OAAO,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAgB,EAChB,EAAU,EACV,SAAkB;IAElB,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,IAAI;QACJ,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;KACjF,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAE,CAAO,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codesift-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.4",
|
|
4
4
|
"description": "MCP server for code intelligence — 146 tools for symbol search, call graph, semantic search, route tracing, community detection, LSP bridge, secret detection, conversation search, and Hono framework intelligence",
|
|
5
5
|
"license": "BSL-1.1",
|
|
6
6
|
"author": "Greg Laskowski",
|
package/rules/codesift.md
CHANGED
|
@@ -191,10 +191,17 @@ Use this table to pick the right tool for each task:
|
|
|
191
191
|
- `include_source=true` — include source code in results
|
|
192
192
|
|
|
193
193
|
### search_text
|
|
194
|
-
|
|
195
|
-
- `
|
|
194
|
+
**Decision tree (read first):**
|
|
195
|
+
- **Identifier-only query** (e.g. `OrganizationService`, `useAuth`, `handleLogin`) → use `ranked=true`. Returns symbol-grouped, centrality-ranked hits with `containing_symbol`. Saves 1-3 follow-up `get_symbol` calls. **Auto-applied server-side** when caller passes no grouping options and the query matches `^[A-Za-z_][A-Za-z0-9_]{2,}$`.
|
|
196
|
+
- **Error string / unknown phrase** (e.g. `"connection refused"`, `"is not a function"`) → omit grouping options. Server auto-groups by file above 30 matches.
|
|
197
|
+
- **Already passing `top_k≥30`** → set `group_by_file=true` explicitly.
|
|
198
|
+
- **ALWAYS** pass `file_pattern=` when scope is known.
|
|
199
|
+
|
|
200
|
+
**Param reference:**
|
|
196
201
|
- `ranked=true` — classifies hits by containing function, deduplicates (max 2/function), ranks by centrality. Returns `containing_symbol` field. Takes precedence over `auto_group`.
|
|
197
|
-
- `
|
|
202
|
+
- `group_by_file=true` — ~80% output reduction on many matches.
|
|
203
|
+
- `auto_group=true` — auto-switch to grouped above 50 matches.
|
|
204
|
+
- `file_pattern=` — required scope filter for repos > 500 files.
|
|
198
205
|
|
|
199
206
|
### assemble_context levels
|
|
200
207
|
- `L0` — full source (use when editing)
|
package/rules/codesift.mdc
CHANGED
|
@@ -174,10 +174,17 @@ Use this table to pick the right tool for each task:
|
|
|
174
174
|
- `include_source=true` — include source code in results
|
|
175
175
|
|
|
176
176
|
### search_text
|
|
177
|
-
|
|
178
|
-
- `
|
|
177
|
+
**Decision tree (read first):**
|
|
178
|
+
- **Identifier-only query** (e.g. `OrganizationService`, `useAuth`, `handleLogin`) → use `ranked=true`. Returns symbol-grouped, centrality-ranked hits with `containing_symbol`. Saves 1-3 follow-up `get_symbol` calls. **Auto-applied server-side** when caller passes no grouping options and the query matches `^[A-Za-z_][A-Za-z0-9_]{2,}$`.
|
|
179
|
+
- **Error string / unknown phrase** (e.g. `"connection refused"`, `"is not a function"`) → omit grouping options. Server auto-groups by file above 30 matches.
|
|
180
|
+
- **Already passing `top_k≥30`** → set `group_by_file=true` explicitly.
|
|
181
|
+
- **ALWAYS** pass `file_pattern=` when scope is known.
|
|
182
|
+
|
|
183
|
+
**Param reference:**
|
|
179
184
|
- `ranked=true` — classifies hits by containing function, deduplicates (max 2/function), ranks by centrality. Returns `containing_symbol` field. Takes precedence over `auto_group`.
|
|
180
|
-
- `
|
|
185
|
+
- `group_by_file=true` — ~80% output reduction on many matches.
|
|
186
|
+
- `auto_group=true` — auto-switch to grouped above 50 matches.
|
|
187
|
+
- `file_pattern=` — required scope filter for repos > 500 files.
|
|
181
188
|
|
|
182
189
|
### assemble_context levels
|
|
183
190
|
- `L0` — full source (use when editing)
|
package/rules/codex.md
CHANGED
|
@@ -169,10 +169,17 @@ Use this table to pick the right tool for each task:
|
|
|
169
169
|
- `include_source=true` — include source code in results
|
|
170
170
|
|
|
171
171
|
### search_text
|
|
172
|
-
|
|
173
|
-
- `
|
|
172
|
+
**Decision tree (read first):**
|
|
173
|
+
- **Identifier-only query** (e.g. `OrganizationService`, `useAuth`, `handleLogin`) → use `ranked=true`. Returns symbol-grouped, centrality-ranked hits with `containing_symbol`. Saves 1-3 follow-up `get_symbol` calls. **Auto-applied server-side** when caller passes no grouping options and the query matches `^[A-Za-z_][A-Za-z0-9_]{2,}$`.
|
|
174
|
+
- **Error string / unknown phrase** (e.g. `"connection refused"`, `"is not a function"`) → omit grouping options. Server auto-groups by file above 30 matches.
|
|
175
|
+
- **Already passing `top_k≥30`** → set `group_by_file=true` explicitly.
|
|
176
|
+
- **ALWAYS** pass `file_pattern=` when scope is known.
|
|
177
|
+
|
|
178
|
+
**Param reference:**
|
|
174
179
|
- `ranked=true` — classifies hits by containing function, deduplicates (max 2/function), ranks by centrality. Returns `containing_symbol` field. Takes precedence over `auto_group`.
|
|
175
|
-
- `
|
|
180
|
+
- `group_by_file=true` — ~80% output reduction on many matches.
|
|
181
|
+
- `auto_group=true` — auto-switch to grouped above 50 matches.
|
|
182
|
+
- `file_pattern=` — required scope filter for repos > 500 files.
|
|
176
183
|
|
|
177
184
|
### assemble_context levels
|
|
178
185
|
- `L0` — full source (use when editing)
|
package/rules/gemini.md
CHANGED
|
@@ -170,10 +170,17 @@ Use this table to pick the right tool for each task:
|
|
|
170
170
|
- `include_source=true` — include source code in results
|
|
171
171
|
|
|
172
172
|
### search_text
|
|
173
|
-
|
|
174
|
-
- `
|
|
173
|
+
**Decision tree (read first):**
|
|
174
|
+
- **Identifier-only query** (e.g. `OrganizationService`, `useAuth`, `handleLogin`) → use `ranked=true`. Returns symbol-grouped, centrality-ranked hits with `containing_symbol`. Saves 1-3 follow-up `get_symbol` calls. **Auto-applied server-side** when caller passes no grouping options and the query matches `^[A-Za-z_][A-Za-z0-9_]{2,}$`.
|
|
175
|
+
- **Error string / unknown phrase** (e.g. `"connection refused"`, `"is not a function"`) → omit grouping options. Server auto-groups by file above 30 matches.
|
|
176
|
+
- **Already passing `top_k≥30`** → set `group_by_file=true` explicitly.
|
|
177
|
+
- **ALWAYS** pass `file_pattern=` when scope is known.
|
|
178
|
+
|
|
179
|
+
**Param reference:**
|
|
175
180
|
- `ranked=true` — classifies hits by containing function, deduplicates (max 2/function), ranks by centrality. Returns `containing_symbol` field. Takes precedence over `auto_group`.
|
|
176
|
-
- `
|
|
181
|
+
- `group_by_file=true` — ~80% output reduction on many matches.
|
|
182
|
+
- `auto_group=true` — auto-switch to grouped above 50 matches.
|
|
183
|
+
- `file_pattern=` — required scope filter for repos > 500 files.
|
|
177
184
|
|
|
178
185
|
### assemble_context levels
|
|
179
186
|
- `L0` — full source (use when editing)
|