codesift-mcp 0.5.30 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +25 -3
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/git-hooks-installer.d.ts +2 -0
- package/dist/cli/git-hooks-installer.d.ts.map +1 -1
- package/dist/cli/git-hooks-installer.js +33 -6
- package/dist/cli/git-hooks-installer.js.map +1 -1
- package/dist/parser/extractors/_shared.js +2 -2
- package/dist/parser/extractors/_shared.js.map +1 -1
- package/dist/parser/extractors/hono.d.ts.map +1 -1
- package/dist/parser/extractors/hono.js +47 -10
- package/dist/parser/extractors/hono.js.map +1 -1
- package/dist/parser/extractors/python.js +4 -5
- package/dist/parser/extractors/python.js.map +1 -1
- package/dist/parser/extractors/typescript.d.ts.map +1 -1
- package/dist/parser/extractors/typescript.js +70 -22
- package/dist/parser/extractors/typescript.js.map +1 -1
- package/dist/register-tool-loaders.d.ts +6 -0
- package/dist/register-tool-loaders.d.ts.map +1 -1
- package/dist/register-tool-loaders.js +12 -0
- package/dist/register-tool-loaders.js.map +1 -1
- package/dist/register-tools.d.ts.map +1 -1
- package/dist/register-tools.js +174 -1
- package/dist/register-tools.js.map +1 -1
- package/dist/storage/index-store.d.ts +13 -1
- package/dist/storage/index-store.d.ts.map +1 -1
- package/dist/storage/index-store.js +27 -28
- package/dist/storage/index-store.js.map +1 -1
- package/dist/tools/_helpers.d.ts +2 -0
- package/dist/tools/_helpers.d.ts.map +1 -1
- package/dist/tools/_helpers.js +2 -1
- package/dist/tools/_helpers.js.map +1 -1
- package/dist/tools/astro-audit.d.ts +40 -0
- package/dist/tools/astro-audit.d.ts.map +1 -1
- package/dist/tools/astro-audit.js +94 -5
- package/dist/tools/astro-audit.js.map +1 -1
- package/dist/tools/astro-env-validator.d.ts +38 -0
- package/dist/tools/astro-env-validator.d.ts.map +1 -0
- package/dist/tools/astro-env-validator.js +190 -0
- package/dist/tools/astro-env-validator.js.map +1 -0
- package/dist/tools/astro-helpers.js +2 -2
- package/dist/tools/astro-helpers.js.map +1 -1
- package/dist/tools/astro-image-audit.d.ts +35 -0
- package/dist/tools/astro-image-audit.d.ts.map +1 -0
- package/dist/tools/astro-image-audit.js +129 -0
- package/dist/tools/astro-image-audit.js.map +1 -0
- package/dist/tools/astro-middleware.d.ts.map +1 -1
- package/dist/tools/astro-middleware.js +36 -11
- package/dist/tools/astro-middleware.js.map +1 -1
- package/dist/tools/astro-migration.d.ts.map +1 -1
- package/dist/tools/astro-migration.js +66 -0
- package/dist/tools/astro-migration.js.map +1 -1
- package/dist/tools/astro-svg-components.d.ts +32 -0
- package/dist/tools/astro-svg-components.d.ts.map +1 -0
- package/dist/tools/astro-svg-components.js +123 -0
- package/dist/tools/astro-svg-components.js.map +1 -0
- package/dist/tools/context-tools.d.ts.map +1 -1
- package/dist/tools/context-tools.js +45 -7
- package/dist/tools/context-tools.js.map +1 -1
- package/dist/tools/index-tools.d.ts.map +1 -1
- package/dist/tools/index-tools.js +2 -1
- package/dist/tools/index-tools.js.map +1 -1
- package/dist/tools/pattern-tools.d.ts.map +1 -1
- package/dist/tools/pattern-tools.js +5 -4
- package/dist/tools/pattern-tools.js.map +1 -1
- package/dist/tools/project-tools.js +1 -1
- package/dist/tools/project-tools.js.map +1 -1
- package/dist/tools/react-tools.d.ts +15 -9
- package/dist/tools/react-tools.d.ts.map +1 -1
- package/dist/tools/react-tools.js +23 -17
- package/dist/tools/react-tools.js.map +1 -1
- package/dist/tools/status-tools.d.ts +1 -0
- package/dist/tools/status-tools.d.ts.map +1 -1
- package/dist/tools/status-tools.js +1 -0
- package/dist/tools/status-tools.js.map +1 -1
- package/dist/tools/symbol-tools.d.ts +11 -0
- package/dist/tools/symbol-tools.d.ts.map +1 -1
- package/dist/tools/symbol-tools.js +104 -6
- package/dist/tools/symbol-tools.js.map +1 -1
- package/dist/utils/heritage-edges.d.ts +13 -0
- package/dist/utils/heritage-edges.d.ts.map +1 -0
- package/dist/utils/heritage-edges.js +73 -0
- package/dist/utils/heritage-edges.js.map +1 -0
- package/dist/utils/ts-imports.d.ts +7 -1
- package/dist/utils/ts-imports.d.ts.map +1 -1
- package/dist/utils/ts-imports.js +40 -7
- package/dist/utils/ts-imports.js.map +1 -1
- package/dist/utils/tsconfig-paths.d.ts +6 -5
- package/dist/utils/tsconfig-paths.d.ts.map +1 -1
- package/dist/utils/tsconfig-paths.js +46 -14
- package/dist/utils/tsconfig-paths.js.map +1 -1
- package/package.json +1 -1
- package/rules/codesift.md +6 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heritage-edges.js","sourceRoot":"","sources":["../../src/utils/heritage-edges.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,13 +15,19 @@
|
|
|
15
15
|
* - `import { } from "y"` (empty named clause) → runtime (module still evaluated)
|
|
16
16
|
* - `import * as ns from "y"` / default / side-effect → runtime
|
|
17
17
|
* - `export { X } from "y"` → runtime; `export type { X } from "y"` → type_only:true
|
|
18
|
+
* - per-specifier `export { type X, Y } from "y"` → runtime if any runtime export (same rule as imports)
|
|
18
19
|
* - `export * from "y"` → runtime; `export type * from "y"` → type_only:true
|
|
20
|
+
* - `import x = require("y")` → runtime edge to `y` (handled via `import_require_clause`)
|
|
21
|
+
*
|
|
22
|
+
* Limitation: `import { type X } from "m"` is modeled type-only when all named bindings are
|
|
23
|
+
* `type`-only; with `verbatimModuleSyntax`, TS may still emit a runtime module dependency —
|
|
24
|
+
* we do not read compilerOptions here, so graphs may under-report runtime edges in that mode.
|
|
19
25
|
*/
|
|
20
26
|
import type Parser from "web-tree-sitter";
|
|
21
27
|
export interface TsImportEdge {
|
|
22
28
|
/** raw specifier text from the import source (relative or bare/aliased) */
|
|
23
29
|
path: string;
|
|
24
|
-
/** true when
|
|
30
|
+
/** true when statement-level `import type` / `export type`, all per-specifier `type` bindings in a named clause, or `export type *`; see file header for edge cases */
|
|
25
31
|
is_type_only: boolean;
|
|
26
32
|
/** imported/re-exported names (for future use; empty for side-effect imports) */
|
|
27
33
|
specifiers: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ts-imports.d.ts","sourceRoot":"","sources":["../../src/utils/ts-imports.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ts-imports.d.ts","sourceRoot":"","sources":["../../src/utils/ts-imports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,uKAAuK;IACvK,YAAY,EAAE,OAAO,CAAC;IACtB,iFAAiF;IACjF,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AA8GD,6DAA6D;AAC7D,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,YAAY,EAAE,CA+E1E"}
|
package/dist/utils/ts-imports.js
CHANGED
|
@@ -15,7 +15,13 @@
|
|
|
15
15
|
* - `import { } from "y"` (empty named clause) → runtime (module still evaluated)
|
|
16
16
|
* - `import * as ns from "y"` / default / side-effect → runtime
|
|
17
17
|
* - `export { X } from "y"` → runtime; `export type { X } from "y"` → type_only:true
|
|
18
|
+
* - per-specifier `export { type X, Y } from "y"` → runtime if any runtime export (same rule as imports)
|
|
18
19
|
* - `export * from "y"` → runtime; `export type * from "y"` → type_only:true
|
|
20
|
+
* - `import x = require("y")` → runtime edge to `y` (handled via `import_require_clause`)
|
|
21
|
+
*
|
|
22
|
+
* Limitation: `import { type X } from "m"` is modeled type-only when all named bindings are
|
|
23
|
+
* `type`-only; with `verbatimModuleSyntax`, TS may still emit a runtime module dependency —
|
|
24
|
+
* we do not read compilerOptions here, so graphs may under-report runtime edges in that mode.
|
|
19
25
|
*/
|
|
20
26
|
/** True when this statement node has a top-level `type` keyword child
|
|
21
27
|
* (e.g., `import type {...}` or `export type {...}`).
|
|
@@ -101,28 +107,48 @@ function walkImportClause(clause) {
|
|
|
101
107
|
}
|
|
102
108
|
return { specifiers, anyRuntimeSpecifier };
|
|
103
109
|
}
|
|
104
|
-
/** Walk an `export_clause` (named re-exports) to collect names
|
|
105
|
-
*
|
|
106
|
-
* export_statement, not per-specifier here (TS does not distinguish at the
|
|
107
|
-
* specifier level inside `export {X} from "y"` to the same extent as imports). */
|
|
110
|
+
/** Walk an `export_clause` (named re-exports) to collect names and whether any
|
|
111
|
+
* specifier is not `type`-only (mirrors `import_specifier` rules). */
|
|
108
112
|
function walkExportClause(clause) {
|
|
109
113
|
const specifiers = [];
|
|
114
|
+
let anyRuntimeSpecifier = false;
|
|
115
|
+
let namedCount = 0;
|
|
110
116
|
for (const spec of clause.namedChildren) {
|
|
111
117
|
if (spec.type !== "export_specifier")
|
|
112
118
|
continue;
|
|
119
|
+
namedCount += 1;
|
|
113
120
|
const nameNode = spec.childForFieldName("name");
|
|
114
121
|
const aliasNode = spec.childForFieldName("alias");
|
|
115
122
|
const emitName = (aliasNode ?? nameNode)?.text;
|
|
116
123
|
if (emitName)
|
|
117
124
|
specifiers.push(emitName);
|
|
125
|
+
const isTyped = spec.children.some((c) => c.type === "type" && c.text === "type");
|
|
126
|
+
if (!isTyped)
|
|
127
|
+
anyRuntimeSpecifier = true;
|
|
118
128
|
}
|
|
119
|
-
|
|
129
|
+
if (namedCount === 0)
|
|
130
|
+
anyRuntimeSpecifier = true;
|
|
131
|
+
return { specifiers, anyRuntimeSpecifier };
|
|
120
132
|
}
|
|
121
133
|
/** Walk the tree and return all import + re-export edges. */
|
|
122
134
|
export function extractTypeScriptImports(tree) {
|
|
123
135
|
const edges = [];
|
|
124
136
|
function visit(node) {
|
|
125
137
|
if (node.type === "import_statement") {
|
|
138
|
+
const requireClause = node.namedChildren.find((c) => c.type === "import_require_clause");
|
|
139
|
+
if (requireClause) {
|
|
140
|
+
const src = requireClause.childForFieldName("source");
|
|
141
|
+
if (!src)
|
|
142
|
+
return;
|
|
143
|
+
const path = src.text.replace(/^['"`]|['"`]$/g, "");
|
|
144
|
+
const id = requireClause.namedChildren.find((c) => c.type === "identifier");
|
|
145
|
+
edges.push({
|
|
146
|
+
path,
|
|
147
|
+
is_type_only: false,
|
|
148
|
+
specifiers: id ? [id.text] : [],
|
|
149
|
+
});
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
126
152
|
const path = getSourcePath(node);
|
|
127
153
|
if (!path)
|
|
128
154
|
return; // malformed; skip
|
|
@@ -149,11 +175,16 @@ export function extractTypeScriptImports(tree) {
|
|
|
149
175
|
visit(c);
|
|
150
176
|
return;
|
|
151
177
|
}
|
|
152
|
-
const
|
|
178
|
+
const stmtTypeOnly = statementIsTypeOnly(node);
|
|
153
179
|
let specifiers = [];
|
|
180
|
+
let sawNamedExportClause = false;
|
|
181
|
+
let anyRuntimeExportSpecifier = true;
|
|
154
182
|
for (const child of node.namedChildren) {
|
|
155
183
|
if (child.type === "export_clause") {
|
|
156
|
-
|
|
184
|
+
sawNamedExportClause = true;
|
|
185
|
+
const w = walkExportClause(child);
|
|
186
|
+
specifiers = w.specifiers;
|
|
187
|
+
anyRuntimeExportSpecifier = w.anyRuntimeSpecifier;
|
|
157
188
|
}
|
|
158
189
|
// namespace_export `export * as ns from "y"` → record `ns` as specifier
|
|
159
190
|
if (child.type === "namespace_export") {
|
|
@@ -162,6 +193,8 @@ export function extractTypeScriptImports(tree) {
|
|
|
162
193
|
specifiers.push(id.text);
|
|
163
194
|
}
|
|
164
195
|
}
|
|
196
|
+
const is_type_only = stmtTypeOnly ||
|
|
197
|
+
(sawNamedExportClause && !anyRuntimeExportSpecifier);
|
|
165
198
|
edges.push({ path, is_type_only, specifiers });
|
|
166
199
|
return;
|
|
167
200
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ts-imports.js","sourceRoot":"","sources":["../../src/utils/ts-imports.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ts-imports.js","sourceRoot":"","sources":["../../src/utils/ts-imports.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
* `tsconfig.json`, using `get-tsconfig` for `extends`-chain + paths handling.
|
|
4
4
|
*
|
|
5
5
|
* Two-level cache keeps long-running MCP server processes happy:
|
|
6
|
-
* - `dirToConfigCache`:
|
|
7
|
-
* (or null when none found up to repoRoot).
|
|
8
|
-
*
|
|
6
|
+
* - `dirToConfigCache`: `${repoRoot}::${importerDir}` → nearest tsconfig.json path
|
|
7
|
+
* (or null when none found up to repoRoot). Includes repoRoot so the same
|
|
8
|
+
* importer directory analyzed under different root boundaries does not reuse
|
|
9
|
+
* a stale tsconfig from another indexing scope.
|
|
9
10
|
* - `configCache`: tsconfig.json absolute path → parsed { matcher, baseUrl }.
|
|
10
11
|
*
|
|
11
12
|
* Both caches are cleared on `clearTsconfigCache()`. The graph builder calls
|
|
@@ -29,8 +30,8 @@ interface ResolvedTsconfig {
|
|
|
29
30
|
export declare function clearTsconfigCache(): void;
|
|
30
31
|
/** Walk up from `dir` to `repoRoot`, find nearest `tsconfig.json`.
|
|
31
32
|
* Returns absolute path of the config file, or null if none found.
|
|
32
|
-
* Caches
|
|
33
|
-
*
|
|
33
|
+
* Caches per `(repoRoot, dir)` pair so late-added or removed tsconfig files are
|
|
34
|
+
* visible on the next lookup after cache clear. */
|
|
34
35
|
declare function findNearestTsconfig(dir: string, repoRoot: string): string | null;
|
|
35
36
|
/** Parse a tsconfig.json (with `extends` chain) and build a paths matcher.
|
|
36
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
|
|
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;;;mDAGmD;AACnD,iBAAS,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBzE;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"}
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
* `tsconfig.json`, using `get-tsconfig` for `extends`-chain + paths handling.
|
|
4
4
|
*
|
|
5
5
|
* Two-level cache keeps long-running MCP server processes happy:
|
|
6
|
-
* - `dirToConfigCache`:
|
|
7
|
-
* (or null when none found up to repoRoot).
|
|
8
|
-
*
|
|
6
|
+
* - `dirToConfigCache`: `${repoRoot}::${importerDir}` → nearest tsconfig.json path
|
|
7
|
+
* (or null when none found up to repoRoot). Includes repoRoot so the same
|
|
8
|
+
* importer directory analyzed under different root boundaries does not reuse
|
|
9
|
+
* a stale tsconfig from another indexing scope.
|
|
9
10
|
* - `configCache`: tsconfig.json absolute path → parsed { matcher, baseUrl }.
|
|
10
11
|
*
|
|
11
12
|
* Both caches are cleared on `clearTsconfigCache()`. The graph builder calls
|
|
@@ -34,10 +35,18 @@ const TS_EXTENSIONS = [
|
|
|
34
35
|
".d.ts",
|
|
35
36
|
".js",
|
|
36
37
|
".jsx",
|
|
38
|
+
".mts",
|
|
39
|
+
".cts",
|
|
40
|
+
".mjs",
|
|
41
|
+
".cjs",
|
|
37
42
|
"/index.ts",
|
|
38
43
|
"/index.tsx",
|
|
39
44
|
"/index.d.ts",
|
|
40
45
|
"/index.js",
|
|
46
|
+
"/index.mts",
|
|
47
|
+
"/index.cts",
|
|
48
|
+
"/index.mjs",
|
|
49
|
+
"/index.cjs",
|
|
41
50
|
];
|
|
42
51
|
/** Clear both caches. Called at the start of `index_folder`. */
|
|
43
52
|
export function clearTsconfigCache() {
|
|
@@ -52,12 +61,25 @@ function isDirInsideRepo(repoRootAbs, dir) {
|
|
|
52
61
|
const rel = relative(repoRootAbs, abs);
|
|
53
62
|
return rel !== "" && !isAbsolute(rel) && !rel.startsWith(`..${sep}`) && !rel.startsWith("..");
|
|
54
63
|
}
|
|
64
|
+
/** True when `resolvedFileAbs` is a file path inside `repoRootAbs` (no `..` escape). */
|
|
65
|
+
function isResolvedFileInsideRepo(repoRootAbs, resolvedFileAbs) {
|
|
66
|
+
const abs = resolve(resolvedFileAbs);
|
|
67
|
+
const rel = relative(repoRootAbs, abs);
|
|
68
|
+
return (rel !== "" &&
|
|
69
|
+
!isAbsolute(rel) &&
|
|
70
|
+
!rel.startsWith(`..${sep}`) &&
|
|
71
|
+
!rel.startsWith(".."));
|
|
72
|
+
}
|
|
73
|
+
function dirToConfigCacheKey(importerDir, repoRoot) {
|
|
74
|
+
return `${resolve(repoRoot)}::${resolve(importerDir)}`;
|
|
75
|
+
}
|
|
55
76
|
/** Walk up from `dir` to `repoRoot`, find nearest `tsconfig.json`.
|
|
56
77
|
* Returns absolute path of the config file, or null if none found.
|
|
57
|
-
* Caches
|
|
58
|
-
*
|
|
78
|
+
* Caches per `(repoRoot, dir)` pair so late-added or removed tsconfig files are
|
|
79
|
+
* visible on the next lookup after cache clear. */
|
|
59
80
|
function findNearestTsconfig(dir, repoRoot) {
|
|
60
|
-
const
|
|
81
|
+
const cacheKey = dirToConfigCacheKey(dir, repoRoot);
|
|
82
|
+
const cached = dirToConfigCache.get(cacheKey);
|
|
61
83
|
if (cached !== undefined)
|
|
62
84
|
return cached;
|
|
63
85
|
const repoRootAbs = resolve(repoRoot);
|
|
@@ -65,7 +87,7 @@ function findNearestTsconfig(dir, repoRoot) {
|
|
|
65
87
|
while (isDirInsideRepo(repoRootAbs, cur)) {
|
|
66
88
|
const candidate = join(cur, "tsconfig.json");
|
|
67
89
|
if (existsSync(candidate)) {
|
|
68
|
-
dirToConfigCache.set(
|
|
90
|
+
dirToConfigCache.set(cacheKey, candidate);
|
|
69
91
|
return candidate;
|
|
70
92
|
}
|
|
71
93
|
const parent = dirname(cur);
|
|
@@ -73,7 +95,7 @@ function findNearestTsconfig(dir, repoRoot) {
|
|
|
73
95
|
break;
|
|
74
96
|
cur = parent;
|
|
75
97
|
}
|
|
76
|
-
dirToConfigCache.set(
|
|
98
|
+
dirToConfigCache.set(cacheKey, null);
|
|
77
99
|
return null;
|
|
78
100
|
}
|
|
79
101
|
/** Parse a tsconfig.json (with `extends` chain) and build a paths matcher.
|
|
@@ -141,6 +163,11 @@ export function resolveTsAliasedImport(importerFile, importPath, repoRoot) {
|
|
|
141
163
|
// Relative paths are not aliases — short-circuit.
|
|
142
164
|
if (importPath.startsWith("."))
|
|
143
165
|
return null;
|
|
166
|
+
// Absolute POSIX/Windows specifiers must not join against baseUrl/paths targets
|
|
167
|
+
// (would escape intended repo scope).
|
|
168
|
+
if (isAbsolute(importPath))
|
|
169
|
+
return null;
|
|
170
|
+
const repoRootAbs = resolve(repoRoot);
|
|
144
171
|
const importerDir = dirname(resolve(importerFile));
|
|
145
172
|
const configPath = findNearestTsconfig(importerDir, repoRoot);
|
|
146
173
|
if (!configPath)
|
|
@@ -148,21 +175,26 @@ export function resolveTsAliasedImport(importerFile, importPath, repoRoot) {
|
|
|
148
175
|
const config = loadTsconfig(configPath);
|
|
149
176
|
if (!config)
|
|
150
177
|
return null;
|
|
178
|
+
const acceptResolved = (hit) => {
|
|
179
|
+
if (!hit)
|
|
180
|
+
return null;
|
|
181
|
+
return isResolvedFileInsideRepo(repoRootAbs, hit) ? hit : null;
|
|
182
|
+
};
|
|
151
183
|
// Try paths matcher first (alias mappings).
|
|
152
184
|
if (config.pathsMatcher) {
|
|
153
185
|
const candidates = config.pathsMatcher(importPath);
|
|
154
186
|
for (const candidate of candidates) {
|
|
155
|
-
const
|
|
156
|
-
if (
|
|
157
|
-
return
|
|
187
|
+
const accepted = acceptResolved(probeFile(candidate));
|
|
188
|
+
if (accepted)
|
|
189
|
+
return accepted;
|
|
158
190
|
}
|
|
159
191
|
}
|
|
160
192
|
// Fallback: bare specifier resolved against baseUrl.
|
|
161
193
|
if (config.baseUrl) {
|
|
162
194
|
const candidate = join(config.baseUrl, importPath);
|
|
163
|
-
const
|
|
164
|
-
if (
|
|
165
|
-
return
|
|
195
|
+
const accepted = acceptResolved(probeFile(candidate));
|
|
196
|
+
if (accepted)
|
|
197
|
+
return accepted;
|
|
166
198
|
}
|
|
167
199
|
return null;
|
|
168
200
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tsconfig-paths.js","sourceRoot":"","sources":["../../src/utils/tsconfig-paths.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tsconfig-paths.js","sourceRoot":"","sources":["../../src/utils/tsconfig-paths.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codesift-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
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
|
@@ -159,11 +159,14 @@ Use this table to pick the right tool for each task:
|
|
|
159
159
|
| starting a task, want tool recommendations | `plan_turn(query=...)` |
|
|
160
160
|
| React codebase | `trace_component_tree("App")` + `analyze_hooks` |
|
|
161
161
|
| React anti-patterns | `search_patterns("hook-in-condition")` |
|
|
162
|
-
| React derived state | `search_patterns("derived-state")` |
|
|
163
|
-
| React stale closure | `search_patterns("stale-closure-setstate")` |
|
|
164
|
-
| React context perf trap | `search_patterns("context-provider-value-inline")` |
|
|
162
|
+
| React derived state | `search_patterns("derived-state")` (T5) / `derived-state-reducer` / `derived-state-custom-setter` (T6) |
|
|
163
|
+
| React stale closure | `search_patterns("stale-closure-setstate")` (T5) / `stale-closure-toggle` / `stale-closure-broken-functional` (T6) |
|
|
164
|
+
| React context perf trap | `search_patterns("context-provider-value-inline")` (T5) / `context-provider-value-via-variable` / `context-provider-value-inline-destructured` (T6) |
|
|
165
165
|
| React tabnabbing security | `search_patterns("jsx-no-target-blank")` |
|
|
166
166
|
| React button submit foot-gun | `search_patterns("button-no-type")` |
|
|
167
|
+
| React lazy without Suspense | `search_patterns("react-lazy-no-suspense-same-file")` (T6 single-file) |
|
|
168
|
+
| React RSC non-serializable | `search_patterns("rsc-non-serializable-prop")` / `rsc-non-serializable-prop-deep` (T6 — Map/Set/Class) |
|
|
169
|
+
| React ErrorBoundary incomplete | `search_patterns("error-boundary-incomplete")` (T6) |
|
|
167
170
|
| React render-tree depth | `analyze_renders` → `entry.prop_chain_depth` (NOT prop-flow depth) |
|
|
168
171
|
| React call graph (clean) | `trace_call_chain(filter_react_hooks=true)` |
|
|
169
172
|
| new Next.js project (first look) | `framework_audit` |
|