lsp-intelligence 0.2.1 → 0.3.2
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/.claude-plugin/marketplace.json +18 -0
- package/.claude-plugin/plugin.json +11 -0
- package/CLAUDE.md +75 -0
- package/README.md +15 -38
- package/dist/adapters/express/index.d.ts +9 -0
- package/dist/adapters/express/index.js +46 -0
- package/dist/adapters/express/index.js.map +1 -0
- package/dist/adapters/next/index.d.ts +10 -0
- package/dist/adapters/next/index.js +67 -0
- package/dist/adapters/next/index.js.map +1 -0
- package/dist/adapters/react/index.d.ts +11 -0
- package/dist/adapters/react/index.js +133 -0
- package/dist/adapters/react/index.js.map +1 -0
- package/dist/adapters/registry.d.ts +22 -0
- package/dist/adapters/registry.js +101 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/types.d.ts +97 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/analysis/ts/applyVirtualEdit.d.ts +27 -0
- package/dist/analysis/ts/applyVirtualEdit.js +235 -0
- package/dist/analysis/ts/applyVirtualEdit.js.map +1 -0
- package/dist/analysis/ts/changeRecipes.d.ts +52 -0
- package/dist/analysis/ts/changeRecipes.js +14 -0
- package/dist/analysis/ts/changeRecipes.js.map +1 -0
- package/dist/analysis/ts/compatibility.d.ts +54 -0
- package/dist/analysis/ts/compatibility.js +113 -0
- package/dist/analysis/ts/compatibility.js.map +1 -0
- package/dist/analysis/ts/diffDeclarationShape.d.ts +26 -0
- package/dist/analysis/ts/diffDeclarationShape.js +114 -0
- package/dist/analysis/ts/diffDeclarationShape.js.map +1 -0
- package/dist/analysis/ts/exhaustiveness.d.ts +49 -0
- package/dist/analysis/ts/exhaustiveness.js +158 -0
- package/dist/analysis/ts/exhaustiveness.js.map +1 -0
- package/dist/analysis/ts/extractDeclarationShape.d.ts +30 -0
- package/dist/analysis/ts/extractDeclarationShape.js +127 -0
- package/dist/analysis/ts/extractDeclarationShape.js.map +1 -0
- package/dist/analysis/ts/extractExports.d.ts +19 -0
- package/dist/analysis/ts/extractExports.js +178 -0
- package/dist/analysis/ts/extractExports.js.map +1 -0
- package/dist/analysis/ts/extractRoutes.d.ts +12 -0
- package/dist/analysis/ts/extractRoutes.js +165 -0
- package/dist/analysis/ts/extractRoutes.js.map +1 -0
- package/dist/analysis/ts/parseSourceFile.d.ts +5 -1
- package/dist/analysis/ts/parseSourceFile.js +6 -2
- package/dist/analysis/ts/parseSourceFile.js.map +1 -1
- package/dist/analysis/ts/program/CheckerQueries.d.ts +56 -0
- package/dist/analysis/ts/program/CheckerQueries.js +187 -0
- package/dist/analysis/ts/program/CheckerQueries.js.map +1 -0
- package/dist/analysis/ts/program/ProgramManager.d.ts +27 -0
- package/dist/analysis/ts/program/ProgramManager.js +147 -0
- package/dist/analysis/ts/program/ProgramManager.js.map +1 -0
- package/dist/analysis/ts/program/TypeFacts.d.ts +58 -0
- package/dist/analysis/ts/program/TypeFacts.js +68 -0
- package/dist/analysis/ts/program/TypeFacts.js.map +1 -0
- package/dist/analysis/ts/typeState.d.ts +46 -0
- package/dist/analysis/ts/typeState.js +108 -0
- package/dist/analysis/ts/typeState.js.map +1 -0
- package/dist/ast/diffDeclarationShapes.js +25 -11
- package/dist/ast/diffDeclarationShapes.js.map +1 -1
- package/dist/ast/extractExportDeclarations.js +8 -3
- package/dist/ast/extractExportDeclarations.js.map +1 -1
- package/dist/cache/CacheSchema.d.ts +30 -0
- package/dist/cache/CacheSchema.js +9 -0
- package/dist/cache/CacheSchema.js.map +1 -0
- package/dist/cache/CacheStore.d.ts +22 -0
- package/dist/cache/CacheStore.js +111 -0
- package/dist/cache/CacheStore.js.map +1 -0
- package/dist/cache/SemanticCache.d.ts +38 -0
- package/dist/cache/SemanticCache.js +87 -0
- package/dist/cache/SemanticCache.js.map +1 -0
- package/dist/cache/SnapshotFingerprint.d.ts +17 -0
- package/dist/cache/SnapshotFingerprint.js +14 -0
- package/dist/cache/SnapshotFingerprint.js.map +1 -0
- package/dist/engine/DocumentManager.d.ts +16 -0
- package/dist/engine/DocumentManager.js +32 -0
- package/dist/engine/DocumentManager.js.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/search/adapters/http.d.ts +9 -3
- package/dist/search/adapters/http.js +7 -52
- package/dist/search/adapters/http.js.map +1 -1
- package/dist/search/adapters/react.d.ts +8 -8
- package/dist/search/adapters/react.js +3 -88
- package/dist/search/adapters/react.js.map +1 -1
- package/dist/search/adapters/registry.d.ts +7 -4
- package/dist/search/adapters/registry.js +7 -17
- package/dist/search/adapters/registry.js.map +1 -1
- package/dist/search/expand/graphExpansion.js +47 -14
- package/dist/search/expand/graphExpansion.js.map +1 -1
- package/dist/search/index/declarationIndex.d.ts +3 -1
- package/dist/search/index/declarationIndex.js +4 -2
- package/dist/search/index/declarationIndex.js.map +1 -1
- package/dist/search/index/routeIndex.d.ts +6 -0
- package/dist/search/index/routeIndex.js +19 -0
- package/dist/search/index/routeIndex.js.map +1 -0
- package/dist/search/index/usageIndex.d.ts +3 -1
- package/dist/search/index/usageIndex.js +4 -2
- package/dist/search/index/usageIndex.js.map +1 -1
- package/dist/search/index/workspaceIndex.d.ts +7 -1
- package/dist/search/index/workspaceIndex.js +54 -14
- package/dist/search/index/workspaceIndex.js.map +1 -1
- package/dist/search/query/compileEffectiveSearchSpec.js +9 -0
- package/dist/search/query/compileEffectiveSearchSpec.js.map +1 -1
- package/dist/search/query/parseQuery.js +5 -1
- package/dist/search/query/parseQuery.js.map +1 -1
- package/dist/search/query/planQuery.js +14 -4
- package/dist/search/query/planQuery.js.map +1 -1
- package/dist/search/ranking/mergeCandidates.d.ts +1 -0
- package/dist/search/ranking/mergeCandidates.js +16 -0
- package/dist/search/ranking/mergeCandidates.js.map +1 -1
- package/dist/search/retrievers/routeRetriever.d.ts +7 -0
- package/dist/search/retrievers/routeRetriever.js +64 -0
- package/dist/search/retrievers/routeRetriever.js.map +1 -0
- package/dist/search/types.d.ts +16 -4
- package/dist/session/OverlayStore.d.ts +15 -0
- package/dist/session/OverlayStore.js +46 -0
- package/dist/session/OverlayStore.js.map +1 -0
- package/dist/session/SnapshotResolver.d.ts +31 -0
- package/dist/session/SnapshotResolver.js +50 -0
- package/dist/session/SnapshotResolver.js.map +1 -0
- package/dist/session/WorkspaceSnapshot.d.ts +21 -0
- package/dist/session/WorkspaceSnapshot.js +2 -0
- package/dist/session/WorkspaceSnapshot.js.map +1 -0
- package/dist/tools/composites/apiGuard.d.ts +4 -0
- package/dist/tools/composites/apiGuard.js +158 -24
- package/dist/tools/composites/apiGuard.js.map +1 -1
- package/dist/tools/composites/findCode.js +12 -2
- package/dist/tools/composites/findCode.js.map +1 -1
- package/dist/tools/composites/rootCauseTrace.js +89 -13
- package/dist/tools/composites/rootCauseTrace.js.map +1 -1
- package/dist/workflows/simulateChange.d.ts +44 -0
- package/dist/workflows/simulateChange.js +194 -0
- package/dist/workflows/simulateChange.js.map +1 -0
- package/dist/workflows/verifyChangeSet.d.ts +58 -0
- package/dist/workflows/verifyChangeSet.js +300 -0
- package/dist/workflows/verifyChangeSet.js.map +1 -0
- package/hooks/hooks.json +25 -0
- package/hooks/post-edit-check.sh +23 -0
- package/package.json +20 -4
- package/scripts/launch.mjs +29 -0
- package/skills/api-check/SKILL.md +34 -0
- package/skills/check/SKILL.md +25 -0
- package/skills/context/SKILL.md +24 -0
- package/skills/diff/SKILL.md +27 -0
- package/skills/find/SKILL.md +63 -0
- package/skills/impact/SKILL.md +21 -0
- package/skills/verify/SKILL.md +54 -0
- package/skills/why/SKILL.md +31 -0
|
@@ -1,92 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* React adapter — emits search recipes for React hook/component queries.
|
|
4
|
-
*
|
|
5
|
-
* Recipes:
|
|
6
|
-
* - react.useeffect.conditional-cleanup
|
|
7
|
-
* - react.useeffect.functional-state-updater
|
|
8
|
-
* - react.usememo.computation
|
|
9
|
-
* - react.usecallback.memoized-handler
|
|
10
|
-
* - react.hook.general (fallback for any hook query)
|
|
11
|
-
*/
|
|
1
|
+
import { reactAdapter as v2ReactAdapter } from '../../adapters/react/index.js';
|
|
2
|
+
/** Backward-compatible SearchAdapter wrapper around the v2 React adapter */
|
|
12
3
|
export const reactAdapter = {
|
|
13
4
|
id: 'react',
|
|
14
|
-
detect(ir)
|
|
15
|
-
if (!ir.traits.reactLike)
|
|
16
|
-
return [];
|
|
17
|
-
const recipes = [];
|
|
18
|
-
const hookIds = ir.exactIdentifiers.filter((id) => HOOK_PATTERN.test(id));
|
|
19
|
-
const hasUseEffect = hookIds.includes('useEffect');
|
|
20
|
-
const hasUseMemo = hookIds.includes('useMemo');
|
|
21
|
-
const hasUseCallback = hookIds.includes('useCallback');
|
|
22
|
-
// useEffect + conditional cleanup
|
|
23
|
-
if (hasUseEffect && (ir.structuralPredicates.includes('conditional') ||
|
|
24
|
-
ir.structuralPredicates.includes('returns-cleanup') ||
|
|
25
|
-
ir.codeTokens.includes('cleanup'))) {
|
|
26
|
-
recipes.push({
|
|
27
|
-
id: 'react.useeffect.conditional-cleanup',
|
|
28
|
-
adapter: 'react',
|
|
29
|
-
retrievers: ['identifier', 'structural', 'regex'],
|
|
30
|
-
exactIdentifiers: ['useEffect'],
|
|
31
|
-
structuralPredicates: ['returns-cleanup', 'conditional'],
|
|
32
|
-
regexes: [
|
|
33
|
-
{ id: 'conditional-return', pattern: 'if\\s*\\([^)]*\\)\\s*\\{[^}]*return\\s*\\(\\)', flags: 'g' },
|
|
34
|
-
{ id: 'useeffect-cleanup', pattern: 'useEffect\\s*\\(\\s*\\(\\)\\s*=>\\s*\\{[\\s\\S]*?return\\s', flags: 'g' },
|
|
35
|
-
],
|
|
36
|
-
scoreBoost: 3,
|
|
37
|
-
reasons: ['React adapter: useEffect + conditional cleanup pattern'],
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
// useEffect + functional state updater (based on previous state)
|
|
41
|
-
if (hasUseEffect && ir.traits.previousStateLike) {
|
|
42
|
-
recipes.push({
|
|
43
|
-
id: 'react.useeffect.functional-state-updater',
|
|
44
|
-
adapter: 'react',
|
|
45
|
-
retrievers: ['identifier', 'structural', 'regex'],
|
|
46
|
-
exactIdentifiers: ['useEffect'],
|
|
47
|
-
structuralPredicates: ['functional-state-updater'],
|
|
48
|
-
regexes: [
|
|
49
|
-
{ id: 'functional-updater', pattern: 'set\\w+\\s*\\(\\s*(?:prev|current|existing|old)\\w*\\s*=>', flags: 'g' },
|
|
50
|
-
{ id: 'updater-arrow', pattern: 'set\\w+\\s*\\(\\s*\\w+\\s*=>\\s*\\w+', flags: 'g' },
|
|
51
|
-
],
|
|
52
|
-
scoreBoost: 4,
|
|
53
|
-
reasons: ['React adapter: useEffect + functional state updater'],
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
// useMemo computation
|
|
57
|
-
if (hasUseMemo) {
|
|
58
|
-
recipes.push({
|
|
59
|
-
id: 'react.usememo.computation',
|
|
60
|
-
adapter: 'react',
|
|
61
|
-
retrievers: ['identifier'],
|
|
62
|
-
exactIdentifiers: ['useMemo'],
|
|
63
|
-
scoreBoost: 1,
|
|
64
|
-
reasons: ['React adapter: useMemo computation'],
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
// useCallback memoized handler
|
|
68
|
-
if (hasUseCallback) {
|
|
69
|
-
recipes.push({
|
|
70
|
-
id: 'react.usecallback.memoized-handler',
|
|
71
|
-
adapter: 'react',
|
|
72
|
-
retrievers: ['identifier'],
|
|
73
|
-
exactIdentifiers: ['useCallback'],
|
|
74
|
-
scoreBoost: 1,
|
|
75
|
-
reasons: ['React adapter: useCallback memoized handler'],
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
// General hook query (fallback)
|
|
79
|
-
if (hookIds.length > 0 && recipes.length === 0) {
|
|
80
|
-
recipes.push({
|
|
81
|
-
id: 'react.hook.general',
|
|
82
|
-
adapter: 'react',
|
|
83
|
-
retrievers: ['identifier'],
|
|
84
|
-
exactIdentifiers: hookIds,
|
|
85
|
-
scoreBoost: 0,
|
|
86
|
-
reasons: [`React adapter: general hook query for ${hookIds.join(', ')}`],
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
return recipes;
|
|
90
|
-
},
|
|
5
|
+
detect: (ir) => v2ReactAdapter.detect?.(ir) ?? [],
|
|
91
6
|
};
|
|
92
7
|
//# sourceMappingURL=react.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../../src/search/adapters/react.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../../src/search/adapters/react.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAkB;IACzC,EAAE,EAAE,OAAO;IACX,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE;CAClD,CAAC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import type { QueryIR, SearchRecipe } from '../types.js';
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Phase 2E migration cutover: this file is now a thin compatibility shim.
|
|
3
|
+
*
|
|
4
|
+
* The real adapter registry has moved to src/adapters/registry.ts.
|
|
5
|
+
* All new code should import from there directly.
|
|
6
|
+
*
|
|
7
|
+
* This file is kept for any remaining consumers that import from the old path.
|
|
5
8
|
*/
|
|
6
|
-
export
|
|
9
|
+
export { runAdapters } from '../../adapters/registry.js';
|
|
@@ -1,20 +1,10 @@
|
|
|
1
|
-
import { reactAdapter } from './react.js';
|
|
2
|
-
import { httpAdapter } from './http.js';
|
|
3
|
-
import { configAdapter } from './config.js';
|
|
4
|
-
const ADAPTERS = [
|
|
5
|
-
reactAdapter,
|
|
6
|
-
httpAdapter,
|
|
7
|
-
configAdapter,
|
|
8
|
-
];
|
|
9
1
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
2
|
+
* Phase 2E migration cutover: this file is now a thin compatibility shim.
|
|
3
|
+
*
|
|
4
|
+
* The real adapter registry has moved to src/adapters/registry.ts.
|
|
5
|
+
* All new code should import from there directly.
|
|
6
|
+
*
|
|
7
|
+
* This file is kept for any remaining consumers that import from the old path.
|
|
12
8
|
*/
|
|
13
|
-
export
|
|
14
|
-
const recipes = [];
|
|
15
|
-
for (const adapter of ADAPTERS) {
|
|
16
|
-
recipes.push(...adapter.detect(ir));
|
|
17
|
-
}
|
|
18
|
-
return recipes;
|
|
19
|
-
}
|
|
9
|
+
export { runAdapters } from '../../adapters/registry.js';
|
|
20
10
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/search/adapters/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/search/adapters/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -2,17 +2,30 @@ import ts from 'typescript';
|
|
|
2
2
|
import { parseSourceFile } from '../../analysis/ts/parseSourceFile.js';
|
|
3
3
|
import { absoluteCandidateKey, lspLocationToKey } from '../ranking/candidateIdentity.js';
|
|
4
4
|
import { buildSnippetFromFile } from '../../analysis/ts/snippets.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
import { getAdapterGraphDenylist } from '../../adapters/registry.js';
|
|
6
|
+
/**
|
|
7
|
+
* Core JS/TS runtime builtins that should never be promoted as implementation roots.
|
|
8
|
+
* Framework-specific symbols (React hooks, Express Router, Next.js helpers, etc.)
|
|
9
|
+
* are now contributed by Phase 2E adapters via getAdapterGraphDenylist().
|
|
10
|
+
*/
|
|
11
|
+
const CORE_DENYLIST = new Set([
|
|
9
12
|
'fetch', 'console', 'setTimeout', 'setInterval', 'clearTimeout', 'clearInterval',
|
|
10
13
|
'Promise', 'JSON', 'Math', 'Object', 'Array', 'Map', 'Set', 'Date', 'Error',
|
|
11
14
|
'require', 'import', 'exports', 'module',
|
|
12
15
|
'document', 'window', 'process', 'global', 'globalThis',
|
|
13
16
|
'addEventListener', 'removeEventListener', 'dispatchEvent',
|
|
14
|
-
'createElement', 'createContext', 'createRef', 'forwardRef', 'memo', 'lazy',
|
|
15
17
|
]);
|
|
18
|
+
/** Lazily merged denylist: core builtins + all adapter-contributed framework symbols. */
|
|
19
|
+
let cachedDenylist = null;
|
|
20
|
+
function getEffectiveDenylist() {
|
|
21
|
+
if (cachedDenylist)
|
|
22
|
+
return cachedDenylist;
|
|
23
|
+
const merged = new Set(CORE_DENYLIST);
|
|
24
|
+
for (const sym of getAdapterGraphDenylist())
|
|
25
|
+
merged.add(sym);
|
|
26
|
+
cachedDenylist = merged;
|
|
27
|
+
return merged;
|
|
28
|
+
}
|
|
16
29
|
/**
|
|
17
30
|
* Expand top candidates toward implementation roots.
|
|
18
31
|
* Detects wrappers, follows definitions, and promotes likely real implementations.
|
|
@@ -34,13 +47,18 @@ export async function expandToImplementationRoots(candidates, engine, maxSeeds =
|
|
|
34
47
|
continue;
|
|
35
48
|
// Skip if the call target is a builtin/framework symbol — not a real root
|
|
36
49
|
const leafTarget = wrapperInfo.callTarget.split('.').pop() ?? wrapperInfo.callTarget;
|
|
37
|
-
if (
|
|
50
|
+
if (getEffectiveDenylist().has(leafTarget))
|
|
38
51
|
continue;
|
|
39
|
-
// Demote wrapper
|
|
52
|
+
// Demote wrapper — strength based on confidence
|
|
40
53
|
const wrapperKey = absoluteCandidateKey(candidate);
|
|
54
|
+
const demoteScore = Math.round(-2 * wrapperInfo.wrapperConfidence);
|
|
41
55
|
promoted.set(wrapperKey, {
|
|
42
|
-
scoreDelta:
|
|
43
|
-
evidence: [
|
|
56
|
+
scoreDelta: demoteScore,
|
|
57
|
+
evidence: [
|
|
58
|
+
`wrapper-of: ${wrapperInfo.callTarget}`,
|
|
59
|
+
`body-size: ${wrapperInfo.bodySize}`,
|
|
60
|
+
`wrapper-confidence: ${wrapperInfo.wrapperConfidence.toFixed(1)}`,
|
|
61
|
+
],
|
|
44
62
|
});
|
|
45
63
|
// Try to resolve the wrapped function via LSP and promote it
|
|
46
64
|
try {
|
|
@@ -54,9 +72,14 @@ export async function expandToImplementationRoots(candidates, engine, maxSeeds =
|
|
|
54
72
|
continue;
|
|
55
73
|
const derivedKey = lspLocationToKey(loc.uri, loc.position.line, engine.workspaceRoot, wrapperInfo.callTarget);
|
|
56
74
|
if (!promoted.has(derivedKey)) {
|
|
75
|
+
const promoteScore = Math.round(4 * wrapperInfo.wrapperConfidence);
|
|
57
76
|
promoted.set(derivedKey, {
|
|
58
|
-
scoreDelta:
|
|
59
|
-
evidence: [
|
|
77
|
+
scoreDelta: promoteScore,
|
|
78
|
+
evidence: [
|
|
79
|
+
'implementation-root',
|
|
80
|
+
`wrapped-by: ${candidate.symbol ?? 'unknown'}`,
|
|
81
|
+
`wrapper-confidence: ${wrapperInfo.wrapperConfidence.toFixed(1)}`,
|
|
82
|
+
],
|
|
60
83
|
});
|
|
61
84
|
// Create a derived candidate so it can be merged into results
|
|
62
85
|
const derivedPath = loc.uri.startsWith('file://')
|
|
@@ -72,8 +95,13 @@ export async function expandToImplementationRoots(candidates, engine, maxSeeds =
|
|
|
72
95
|
kind: 'function',
|
|
73
96
|
snippet,
|
|
74
97
|
context,
|
|
75
|
-
score: candidate.score +
|
|
76
|
-
evidence: [
|
|
98
|
+
score: candidate.score + promoteScore,
|
|
99
|
+
evidence: [
|
|
100
|
+
'implementation-root',
|
|
101
|
+
`wrapped-by: ${candidate.symbol ?? 'unknown'}`,
|
|
102
|
+
`wrapper-confidence: ${wrapperInfo.wrapperConfidence.toFixed(1)}`,
|
|
103
|
+
'graph-derived',
|
|
104
|
+
],
|
|
77
105
|
sources: ['graph'],
|
|
78
106
|
});
|
|
79
107
|
}
|
|
@@ -132,7 +160,12 @@ function detectWrapper(filePath, line) {
|
|
|
132
160
|
}
|
|
133
161
|
if (callTargets.length === 0 || callTargets.length > 3)
|
|
134
162
|
return null;
|
|
135
|
-
|
|
163
|
+
// Confidence: 1 call + 1-2 statements = high, more calls/statements = lower
|
|
164
|
+
const wrapperConfidence = callTargets.length === 1 && bodySize <= 2 ? 0.9
|
|
165
|
+
: callTargets.length === 1 ? 0.7
|
|
166
|
+
: callTargets.length === 2 && bodySize <= 3 ? 0.5
|
|
167
|
+
: 0.3;
|
|
168
|
+
return { callTarget: callTargets[0], bodySize, wrapperConfidence };
|
|
136
169
|
}
|
|
137
170
|
function getBody(node) {
|
|
138
171
|
if (ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphExpansion.js","sourceRoot":"","sources":["../../../src/search/expand/graphExpansion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"graphExpansion.js","sourceRoot":"","sources":["../../../src/search/expand/graphExpansion.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,7 @@ import type { DeclarationIndexEntry } from '../types.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Build declaration index entries for a single file.
|
|
4
4
|
* Uses TypeScript compiler AST, not regex.
|
|
5
|
+
*
|
|
6
|
+
* @param text - Optional overlay text for unsaved-buffer support (Phase 2A).
|
|
5
7
|
*/
|
|
6
|
-
export declare function indexFileDeclarations(filePath: string): DeclarationIndexEntry[];
|
|
8
|
+
export declare function indexFileDeclarations(filePath: string, text?: string): DeclarationIndexEntry[];
|
|
@@ -3,9 +3,11 @@ import { extractDeclarations } from '../../analysis/ts/extractDeclarations.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Build declaration index entries for a single file.
|
|
5
5
|
* Uses TypeScript compiler AST, not regex.
|
|
6
|
+
*
|
|
7
|
+
* @param text - Optional overlay text for unsaved-buffer support (Phase 2A).
|
|
6
8
|
*/
|
|
7
|
-
export function indexFileDeclarations(filePath) {
|
|
8
|
-
const sf = parseSourceFile(filePath);
|
|
9
|
+
export function indexFileDeclarations(filePath, text) {
|
|
10
|
+
const sf = parseSourceFile(filePath, text);
|
|
9
11
|
if (!sf)
|
|
10
12
|
return [];
|
|
11
13
|
return extractDeclarations(sf);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declarationIndex.js","sourceRoot":"","sources":["../../../src/search/index/declarationIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAG/E
|
|
1
|
+
{"version":3,"file":"declarationIndex.js","sourceRoot":"","sources":["../../../src/search/index/declarationIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAG/E;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB,EAAE,IAAa;IACnE,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,OAAO,mBAAmB,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { RouteIndexEntry, SearchScope } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build the route index from code files in scope.
|
|
4
|
+
* Extracts Express/Fastify/Next route definitions using TS AST.
|
|
5
|
+
*/
|
|
6
|
+
export declare function indexRoutes(scope: SearchScope): RouteIndexEntry[];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { collectScopeFiles } from '../../resolve/searchScope.js';
|
|
2
|
+
import { parseSourceFile } from '../../analysis/ts/parseSourceFile.js';
|
|
3
|
+
import { extractRoutes } from '../../analysis/ts/extractRoutes.js';
|
|
4
|
+
/**
|
|
5
|
+
* Build the route index from code files in scope.
|
|
6
|
+
* Extracts Express/Fastify/Next route definitions using TS AST.
|
|
7
|
+
*/
|
|
8
|
+
export function indexRoutes(scope) {
|
|
9
|
+
const entries = [];
|
|
10
|
+
const files = collectScopeFiles(scope, 500);
|
|
11
|
+
for (const filePath of files) {
|
|
12
|
+
const sf = parseSourceFile(filePath);
|
|
13
|
+
if (!sf)
|
|
14
|
+
continue;
|
|
15
|
+
entries.push(...extractRoutes(sf));
|
|
16
|
+
}
|
|
17
|
+
return entries;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=routeIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routeIndex.js","sourceRoot":"","sources":["../../../src/search/index/routeIndex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAEnE;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAkB;IAC5C,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE5C,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -2,5 +2,7 @@ import type { UsageIndexEntry } from '../types.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Build usage index entries for a single file.
|
|
4
4
|
* Indexes call expressions, member calls, imports, JSX tags using TS compiler AST.
|
|
5
|
+
*
|
|
6
|
+
* @param text - Optional overlay text for unsaved-buffer support (Phase 2A).
|
|
5
7
|
*/
|
|
6
|
-
export declare function indexFileUsages(filePath: string): UsageIndexEntry[];
|
|
8
|
+
export declare function indexFileUsages(filePath: string, text?: string): UsageIndexEntry[];
|
|
@@ -3,9 +3,11 @@ import { extractUsages } from '../../analysis/ts/extractUsages.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Build usage index entries for a single file.
|
|
5
5
|
* Indexes call expressions, member calls, imports, JSX tags using TS compiler AST.
|
|
6
|
+
*
|
|
7
|
+
* @param text - Optional overlay text for unsaved-buffer support (Phase 2A).
|
|
6
8
|
*/
|
|
7
|
-
export function indexFileUsages(filePath) {
|
|
8
|
-
const sf = parseSourceFile(filePath);
|
|
9
|
+
export function indexFileUsages(filePath, text) {
|
|
10
|
+
const sf = parseSourceFile(filePath, text);
|
|
9
11
|
if (!sf)
|
|
10
12
|
return [];
|
|
11
13
|
return extractUsages(sf);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usageIndex.js","sourceRoot":"","sources":["../../../src/search/index/usageIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAGnE
|
|
1
|
+
{"version":3,"file":"usageIndex.js","sourceRoot":"","sources":["../../../src/search/index/usageIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAGnE;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAa;IAC7D,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { SearchScope, WorkspaceIndex } from '../types.js';
|
|
2
|
+
import type { SnapshotResolver } from '../../session/SnapshotResolver.js';
|
|
2
3
|
/** Force-clear the in-memory workspace index. Next query will rebuild from scratch. */
|
|
3
|
-
export declare function clearWorkspaceIndex(): {
|
|
4
|
+
export declare function clearWorkspaceIndex(scope?: SearchScope): {
|
|
4
5
|
cleared: boolean;
|
|
5
6
|
hadEntries: number;
|
|
6
7
|
};
|
|
@@ -8,7 +9,12 @@ export declare function clearWorkspaceIndex(): {
|
|
|
8
9
|
* Get or build a workspace index for the given scope.
|
|
9
10
|
* Uses per-file mtime to invalidate stale entries — no TTL.
|
|
10
11
|
* Cache keys by normalized scope (sorted roots + includeTests) + INDEX_VERSION.
|
|
12
|
+
*
|
|
13
|
+
* @param opts.snapshot - Optional SnapshotResolver for Phase 2A overlay support.
|
|
14
|
+
* Dirty (unsaved) files in the snapshot bypass the mtime cache and are
|
|
15
|
+
* re-indexed from the overlay text rather than from disk.
|
|
11
16
|
*/
|
|
12
17
|
export declare function getWorkspaceIndex(scope: SearchScope, opts?: {
|
|
13
18
|
forceRefresh?: boolean;
|
|
19
|
+
snapshot?: SnapshotResolver;
|
|
14
20
|
}): WorkspaceIndex;
|
|
@@ -4,7 +4,9 @@ import { indexFileDeclarations } from './declarationIndex.js';
|
|
|
4
4
|
import { indexFileUsages } from './usageIndex.js';
|
|
5
5
|
import { indexFileDocs } from './docIndex.js';
|
|
6
6
|
import { indexConfigFiles } from './configIndex.js';
|
|
7
|
+
import { indexRoutes } from './routeIndex.js';
|
|
7
8
|
import { parseSourceFile } from '../../analysis/ts/parseSourceFile.js';
|
|
9
|
+
import { SemanticCache } from '../../cache/SemanticCache.js';
|
|
8
10
|
// Bump this when discovery/exclusion rules change to invalidate stale caches.
|
|
9
11
|
const INDEX_VERSION = 2;
|
|
10
12
|
let cachedEntry = null;
|
|
@@ -15,37 +17,69 @@ function scopeCacheKey(scope) {
|
|
|
15
17
|
});
|
|
16
18
|
}
|
|
17
19
|
/** Force-clear the in-memory workspace index. Next query will rebuild from scratch. */
|
|
18
|
-
export function clearWorkspaceIndex() {
|
|
20
|
+
export function clearWorkspaceIndex(scope) {
|
|
19
21
|
const hadEntries = cachedEntry?.index.files.size ?? 0;
|
|
20
22
|
cachedEntry = null;
|
|
23
|
+
// Also invalidate the persistent cache for this scope if provided
|
|
24
|
+
if (scope) {
|
|
25
|
+
try {
|
|
26
|
+
new SemanticCache(scope, INDEX_VERSION).invalidate();
|
|
27
|
+
}
|
|
28
|
+
catch { }
|
|
29
|
+
}
|
|
21
30
|
return { cleared: true, hadEntries };
|
|
22
31
|
}
|
|
23
32
|
/**
|
|
24
33
|
* Get or build a workspace index for the given scope.
|
|
25
34
|
* Uses per-file mtime to invalidate stale entries — no TTL.
|
|
26
35
|
* Cache keys by normalized scope (sorted roots + includeTests) + INDEX_VERSION.
|
|
36
|
+
*
|
|
37
|
+
* @param opts.snapshot - Optional SnapshotResolver for Phase 2A overlay support.
|
|
38
|
+
* Dirty (unsaved) files in the snapshot bypass the mtime cache and are
|
|
39
|
+
* re-indexed from the overlay text rather than from disk.
|
|
27
40
|
*/
|
|
28
41
|
export function getWorkspaceIndex(scope, opts) {
|
|
29
42
|
const key = scopeCacheKey(scope);
|
|
43
|
+
const snapshot = opts?.snapshot;
|
|
30
44
|
// Full refresh if scope changed, forced, or index version changed
|
|
31
45
|
if (!cachedEntry || cachedEntry.scopeKey !== key || cachedEntry.version !== INDEX_VERSION || opts?.forceRefresh) {
|
|
32
|
-
|
|
46
|
+
// Phase 4B: try persistent cache ONLY when no overlay is active
|
|
47
|
+
// (overlays represent unsaved state — never persist that)
|
|
48
|
+
if (!snapshot && !opts?.forceRefresh) {
|
|
49
|
+
const diskCache = new SemanticCache(scope, INDEX_VERSION);
|
|
50
|
+
const loaded = diskCache.tryLoad(key);
|
|
51
|
+
if (loaded) {
|
|
52
|
+
cachedEntry = { index: loaded, version: INDEX_VERSION, scopeKey: key };
|
|
53
|
+
return loaded;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const index = buildFreshIndex(scope, snapshot);
|
|
33
57
|
cachedEntry = { index, version: INDEX_VERSION, scopeKey: key };
|
|
58
|
+
// Persist to disk for the next session (best-effort, bypass if overlay active)
|
|
59
|
+
if (!snapshot) {
|
|
60
|
+
const diskCache = new SemanticCache(scope, INDEX_VERSION);
|
|
61
|
+
diskCache.save(index, key, INDEX_VERSION);
|
|
62
|
+
}
|
|
34
63
|
return index;
|
|
35
64
|
}
|
|
36
65
|
const cachedIndex = cachedEntry.index;
|
|
37
66
|
// Incremental: check mtime per file, re-index changed files
|
|
38
67
|
const scopeFiles = collectScopeFiles(scope);
|
|
39
68
|
let changed = false;
|
|
69
|
+
// If a snapshot is provided, dirty files always get re-indexed from overlay text
|
|
70
|
+
const dirtyFiles = new Set(snapshot?.getDirtyFiles() ?? []);
|
|
40
71
|
for (const filePath of scopeFiles) {
|
|
41
72
|
try {
|
|
42
|
-
const
|
|
73
|
+
const overlayText = snapshot?.getText(filePath);
|
|
74
|
+
const isDirty = dirtyFiles.has(filePath);
|
|
75
|
+
const mtime = isDirty
|
|
76
|
+
? -1 // force re-index: sentinel mtime that never matches cached
|
|
77
|
+
: fs.statSync(filePath).mtimeMs;
|
|
43
78
|
const existing = cachedIndex.files.get(filePath);
|
|
44
79
|
if (!existing || existing.mtimeMs !== mtime) {
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
const docs = indexFileDocsForFile(filePath);
|
|
80
|
+
const declarations = indexFileDeclarations(filePath, overlayText);
|
|
81
|
+
const usages = indexFileUsages(filePath, overlayText);
|
|
82
|
+
const docs = indexFileDocsForFile(filePath, overlayText);
|
|
49
83
|
cachedIndex.files.set(filePath, { filePath, mtimeMs: mtime, declarations, usages, docs });
|
|
50
84
|
changed = true;
|
|
51
85
|
}
|
|
@@ -72,17 +106,21 @@ export function getWorkspaceIndex(scope, opts) {
|
|
|
72
106
|
}
|
|
73
107
|
return cachedIndex;
|
|
74
108
|
}
|
|
75
|
-
function buildFreshIndex(scope) {
|
|
109
|
+
function buildFreshIndex(scope, snapshot) {
|
|
76
110
|
const root = scope.roots[0] ?? '';
|
|
77
111
|
const files = new Map();
|
|
78
112
|
const scopeMeta = collectScopeFilesWithMeta(scope);
|
|
79
113
|
const scopeFiles = scopeMeta.files;
|
|
114
|
+
const dirtyFiles = new Set(snapshot?.getDirtyFiles() ?? []);
|
|
80
115
|
for (const filePath of scopeFiles) {
|
|
81
116
|
try {
|
|
82
|
-
const
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
const
|
|
117
|
+
const overlayText = snapshot?.getText(filePath);
|
|
118
|
+
const isDirty = dirtyFiles.has(filePath);
|
|
119
|
+
// Dirty files use sentinel mtime=-1 so they're always re-indexed when snapshot changes
|
|
120
|
+
const mtime = isDirty ? -1 : fs.statSync(filePath).mtimeMs;
|
|
121
|
+
const declarations = indexFileDeclarations(filePath, overlayText);
|
|
122
|
+
const usages = indexFileUsages(filePath, overlayText);
|
|
123
|
+
const docs = indexFileDocsForFile(filePath, overlayText);
|
|
86
124
|
files.set(filePath, { filePath, mtimeMs: mtime, declarations, usages, docs });
|
|
87
125
|
}
|
|
88
126
|
catch {
|
|
@@ -97,6 +135,7 @@ function buildFreshIndex(scope) {
|
|
|
97
135
|
usages: [],
|
|
98
136
|
docs: [],
|
|
99
137
|
configs: [],
|
|
138
|
+
routes: [],
|
|
100
139
|
scopeCapped: scopeMeta.capped,
|
|
101
140
|
capReason: scopeMeta.capReason,
|
|
102
141
|
};
|
|
@@ -116,10 +155,11 @@ function rebuildFlatArrays(index, scope) {
|
|
|
116
155
|
index.usages = usages;
|
|
117
156
|
index.docs = docs;
|
|
118
157
|
index.configs = indexConfigFiles(scope);
|
|
158
|
+
index.routes = indexRoutes(scope);
|
|
119
159
|
index.builtAt = Date.now();
|
|
120
160
|
}
|
|
121
|
-
function indexFileDocsForFile(filePath) {
|
|
122
|
-
const sf = parseSourceFile(filePath);
|
|
161
|
+
function indexFileDocsForFile(filePath, text) {
|
|
162
|
+
const sf = parseSourceFile(filePath, text);
|
|
123
163
|
if (!sf)
|
|
124
164
|
return [];
|
|
125
165
|
return indexFileDocs(sf);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceIndex.js","sourceRoot":"","sources":["../../../src/search/index/workspaceIndex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAA8B,MAAM,8BAA8B,CAAC;AACxH,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,8EAA8E;AAC9E,MAAM,aAAa,GAAG,CAAC,CAAC;AAQxB,IAAI,WAAW,GAAuB,IAAI,CAAC;AAE3C,SAAS,aAAa,CAAC,KAAkB;IACvC,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;QAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC,CAAC;AACL,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,mBAAmB;
|
|
1
|
+
{"version":3,"file":"workspaceIndex.js","sourceRoot":"","sources":["../../../src/search/index/workspaceIndex.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,15 @@ export function compileEffectiveSearchSpec(ir, plan) {
|
|
|
20
20
|
if (CONFIG_WORDS.has(tok))
|
|
21
21
|
configTerms.push(tok);
|
|
22
22
|
}
|
|
23
|
+
// Propagate env-key tokens (SCREAMING_SNAKE_CASE from raw query) as config terms
|
|
24
|
+
// so the config retriever can rank env-usage results by the actual key name.
|
|
25
|
+
// Use ir.raw since exactIdentifiers has underscores stripped.
|
|
26
|
+
for (const token of ir.raw.split(/\s+/)) {
|
|
27
|
+
if (/^[A-Z][A-Z0-9_]{2,}$/.test(token) && token.includes('_')) {
|
|
28
|
+
configTerms.push(token.toLowerCase().replace(/_/g, ' '));
|
|
29
|
+
configTerms.push(token.toLowerCase());
|
|
30
|
+
}
|
|
31
|
+
}
|
|
23
32
|
// Merge recipe contributions
|
|
24
33
|
for (const recipe of ir.recipes) {
|
|
25
34
|
recipeIds.push(recipe.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compileEffectiveSearchSpec.js","sourceRoot":"","sources":["../../../src/search/query/compileEffectiveSearchSpec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compileEffectiveSearchSpec.js","sourceRoot":"","sources":["../../../src/search/query/compileEffectiveSearchSpec.ts"],"names":[],"mappings":"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"}
|