lsp-intelligence 0.1.2 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -15
- package/dist/analysis/pattern/collectSearchFiles.d.ts +6 -0
- package/dist/analysis/pattern/collectSearchFiles.js +38 -0
- package/dist/analysis/pattern/collectSearchFiles.js.map +1 -0
- package/dist/analysis/pattern/runPatternSearch.d.ts +17 -0
- package/dist/analysis/pattern/runPatternSearch.js +65 -0
- package/dist/analysis/pattern/runPatternSearch.js.map +1 -0
- package/dist/analysis/ts/extractDeclarations.d.ts +7 -0
- package/dist/analysis/ts/extractDeclarations.js +93 -0
- package/dist/analysis/ts/extractDeclarations.js.map +1 -0
- package/dist/analysis/ts/extractUsages.d.ts +7 -0
- package/dist/analysis/ts/extractUsages.js +139 -0
- package/dist/analysis/ts/extractUsages.js.map +1 -0
- package/dist/analysis/ts/parseSourceFile.d.ts +11 -0
- package/dist/analysis/ts/parseSourceFile.js +24 -0
- package/dist/analysis/ts/parseSourceFile.js.map +1 -0
- package/dist/analysis/ts/reactState.d.ts +9 -0
- package/dist/analysis/ts/reactState.js +57 -0
- package/dist/analysis/ts/reactState.js.map +1 -0
- package/dist/analysis/ts/snippets.d.ts +14 -0
- package/dist/analysis/ts/snippets.js +29 -0
- package/dist/analysis/ts/snippets.js.map +1 -0
- package/dist/analysis/ts/structuralPredicates.d.ts +10 -0
- package/dist/analysis/ts/structuralPredicates.js +199 -0
- package/dist/analysis/ts/structuralPredicates.js.map +1 -0
- package/dist/ast/diffDeclarationShapes.d.ts +16 -0
- package/dist/ast/diffDeclarationShapes.js +179 -0
- package/dist/ast/diffDeclarationShapes.js.map +1 -0
- package/dist/ast/extractExportDeclarations.d.ts +21 -0
- package/dist/ast/extractExportDeclarations.js +218 -0
- package/dist/ast/extractExportDeclarations.js.map +1 -0
- package/dist/ast/findNodeAtPosition.d.ts +12 -0
- package/dist/ast/findNodeAtPosition.js +75 -0
- package/dist/ast/findNodeAtPosition.js.map +1 -0
- package/dist/ast/parseFile.d.ts +11 -0
- package/dist/ast/parseFile.js +46 -0
- package/dist/ast/parseFile.js.map +1 -0
- package/dist/engine/LspEngine.js +23 -1
- package/dist/engine/LspEngine.js.map +1 -1
- package/dist/engine/waitForDiagnostics.d.ts +7 -0
- package/dist/engine/waitForDiagnostics.js +16 -0
- package/dist/engine/waitForDiagnostics.js.map +1 -0
- package/dist/git/getBaseFileContent.d.ts +6 -0
- package/dist/git/getBaseFileContent.js +23 -0
- package/dist/git/getBaseFileContent.js.map +1 -0
- package/dist/git/getChangedFiles.d.ts +5 -0
- package/dist/git/getChangedFiles.js +27 -0
- package/dist/git/getChangedFiles.js.map +1 -0
- package/dist/git/getChangedHunks.d.ts +14 -0
- package/dist/git/getChangedHunks.js +56 -0
- package/dist/git/getChangedHunks.js.map +1 -0
- package/dist/git/getGitRoot.d.ts +15 -0
- package/dist/git/getGitRoot.js +33 -0
- package/dist/git/getGitRoot.js.map +1 -0
- package/dist/git/getMergeBase.d.ts +5 -0
- package/dist/git/getMergeBase.js +23 -0
- package/dist/git/getMergeBase.js.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/resolve/searchScope.d.ts +17 -0
- package/dist/resolve/searchScope.js +64 -0
- package/dist/resolve/searchScope.js.map +1 -0
- package/dist/resolve/targetResolver.d.ts +33 -0
- package/dist/resolve/targetResolver.js +84 -0
- package/dist/resolve/targetResolver.js.map +1 -0
- package/dist/search/adapters/config.d.ts +5 -0
- package/dist/search/adapters/config.js +56 -0
- package/dist/search/adapters/config.js.map +1 -0
- package/dist/search/adapters/http.d.ts +6 -0
- package/dist/search/adapters/http.js +58 -0
- package/dist/search/adapters/http.js.map +1 -0
- package/dist/search/adapters/react.d.ts +12 -0
- package/dist/search/adapters/react.js +92 -0
- package/dist/search/adapters/react.js.map +1 -0
- package/dist/search/adapters/registry.d.ts +6 -0
- package/dist/search/adapters/registry.js +20 -0
- package/dist/search/adapters/registry.js.map +1 -0
- package/dist/search/adapters/types.d.ts +5 -0
- package/dist/search/adapters/types.js +2 -0
- package/dist/search/adapters/types.js.map +1 -0
- package/dist/search/debug/trace.d.ts +6 -0
- package/dist/search/debug/trace.js +25 -0
- package/dist/search/debug/trace.js.map +1 -0
- package/dist/search/expand/graphExpansion.d.ts +16 -0
- package/dist/search/expand/graphExpansion.js +168 -0
- package/dist/search/expand/graphExpansion.js.map +1 -0
- package/dist/search/families/behaviorFamilies.d.ts +22 -0
- package/dist/search/families/behaviorFamilies.js +90 -0
- package/dist/search/families/behaviorFamilies.js.map +1 -0
- package/dist/search/fileKinds.d.ts +13 -0
- package/dist/search/fileKinds.js +74 -0
- package/dist/search/fileKinds.js.map +1 -0
- package/dist/search/index/configIndex.d.ts +6 -0
- package/dist/search/index/configIndex.js +196 -0
- package/dist/search/index/configIndex.js.map +1 -0
- package/dist/search/index/declarationIndex.d.ts +6 -0
- package/dist/search/index/declarationIndex.js +13 -0
- package/dist/search/index/declarationIndex.js.map +1 -0
- package/dist/search/index/docIndex.d.ts +7 -0
- package/dist/search/index/docIndex.js +116 -0
- package/dist/search/index/docIndex.js.map +1 -0
- package/dist/search/index/types.d.ts +1 -0
- package/dist/search/index/types.js +2 -0
- package/dist/search/index/types.js.map +1 -0
- package/dist/search/index/usageIndex.d.ts +6 -0
- package/dist/search/index/usageIndex.js +13 -0
- package/dist/search/index/usageIndex.js.map +1 -0
- package/dist/search/index/workspaceIndex.d.ts +14 -0
- package/dist/search/index/workspaceIndex.js +127 -0
- package/dist/search/index/workspaceIndex.js.map +1 -0
- package/dist/search/query/compileEffectiveSearchSpec.d.ts +24 -0
- package/dist/search/query/compileEffectiveSearchSpec.js +67 -0
- package/dist/search/query/compileEffectiveSearchSpec.js.map +1 -0
- package/dist/search/query/parseQuery.d.ts +10 -0
- package/dist/search/query/parseQuery.js +284 -0
- package/dist/search/query/parseQuery.js.map +1 -0
- package/dist/search/query/phraseRules.d.ts +10 -0
- package/dist/search/query/phraseRules.js +58 -0
- package/dist/search/query/phraseRules.js.map +1 -0
- package/dist/search/query/planQuery.d.ts +10 -0
- package/dist/search/query/planQuery.js +91 -0
- package/dist/search/query/planQuery.js.map +1 -0
- package/dist/search/ranking/assessConfidence.d.ts +6 -0
- package/dist/search/ranking/assessConfidence.js +31 -0
- package/dist/search/ranking/assessConfidence.js.map +1 -0
- package/dist/search/ranking/candidateIdentity.d.ts +21 -0
- package/dist/search/ranking/candidateIdentity.js +29 -0
- package/dist/search/ranking/candidateIdentity.js.map +1 -0
- package/dist/search/ranking/coalesceCandidates.d.ts +9 -0
- package/dist/search/ranking/coalesceCandidates.js +48 -0
- package/dist/search/ranking/coalesceCandidates.js.map +1 -0
- package/dist/search/ranking/fieldedTextRanker.d.ts +26 -0
- package/dist/search/ranking/fieldedTextRanker.js +79 -0
- package/dist/search/ranking/fieldedTextRanker.js.map +1 -0
- package/dist/search/ranking/mergeCandidates.d.ts +13 -0
- package/dist/search/ranking/mergeCandidates.js +85 -0
- package/dist/search/ranking/mergeCandidates.js.map +1 -0
- package/dist/search/ranking/rankCandidates.d.ts +12 -0
- package/dist/search/ranking/rankCandidates.js +106 -0
- package/dist/search/ranking/rankCandidates.js.map +1 -0
- package/dist/search/retrievers/behaviorRetriever.d.ts +7 -0
- package/dist/search/retrievers/behaviorRetriever.js +86 -0
- package/dist/search/retrievers/behaviorRetriever.js.map +1 -0
- package/dist/search/retrievers/configRetriever.d.ts +7 -0
- package/dist/search/retrievers/configRetriever.js +46 -0
- package/dist/search/retrievers/configRetriever.js.map +1 -0
- package/dist/search/retrievers/docRetriever.d.ts +7 -0
- package/dist/search/retrievers/docRetriever.js +46 -0
- package/dist/search/retrievers/docRetriever.js.map +1 -0
- package/dist/search/retrievers/identifierRetriever.d.ts +7 -0
- package/dist/search/retrievers/identifierRetriever.js +67 -0
- package/dist/search/retrievers/identifierRetriever.js.map +1 -0
- package/dist/search/retrievers/structuralRetriever.d.ts +9 -0
- package/dist/search/retrievers/structuralRetriever.js +104 -0
- package/dist/search/retrievers/structuralRetriever.js.map +1 -0
- package/dist/search/retrievers/textPatternRetriever.d.ts +7 -0
- package/dist/search/retrievers/textPatternRetriever.js +90 -0
- package/dist/search/retrievers/textPatternRetriever.js.map +1 -0
- package/dist/search/structural/locators/callLocator.d.ts +6 -0
- package/dist/search/structural/locators/callLocator.js +57 -0
- package/dist/search/structural/locators/callLocator.js.map +1 -0
- package/dist/search/structural/locators/declarationLocator.d.ts +6 -0
- package/dist/search/structural/locators/declarationLocator.js +57 -0
- package/dist/search/structural/locators/declarationLocator.js.map +1 -0
- package/dist/search/structural/locators/statementLocator.d.ts +6 -0
- package/dist/search/structural/locators/statementLocator.js +65 -0
- package/dist/search/structural/locators/statementLocator.js.map +1 -0
- package/dist/search/structural/locators/types.d.ts +12 -0
- package/dist/search/structural/locators/types.js +2 -0
- package/dist/search/structural/locators/types.js.map +1 -0
- package/dist/search/structural/selectLocators.d.ts +7 -0
- package/dist/search/structural/selectLocators.js +21 -0
- package/dist/search/structural/selectLocators.js.map +1 -0
- package/dist/search/types.d.ts +191 -0
- package/dist/search/types.js +11 -0
- package/dist/search/types.js.map +1 -0
- package/dist/tools/composites/apiGuard.d.ts +1 -0
- package/dist/tools/composites/apiGuard.js +172 -0
- package/dist/tools/composites/apiGuard.js.map +1 -0
- package/dist/tools/composites/explainError.js +3 -2
- package/dist/tools/composites/explainError.js.map +1 -1
- package/dist/tools/composites/findCode.d.ts +1 -0
- package/dist/tools/composites/findCode.js +145 -0
- package/dist/tools/composites/findCode.js.map +1 -0
- package/dist/tools/composites/findPattern.d.ts +5 -0
- package/dist/tools/composites/findPattern.js +41 -0
- package/dist/tools/composites/findPattern.js.map +1 -0
- package/dist/tools/composites/rootCauseTrace.d.ts +1 -0
- package/dist/tools/composites/rootCauseTrace.js +213 -0
- package/dist/tools/composites/rootCauseTrace.js.map +1 -0
- package/dist/tools/composites/semanticDiff.js +24 -77
- package/dist/tools/composites/semanticDiff.js.map +1 -1
- package/dist/tools/live/clearIndex.d.ts +1 -0
- package/dist/tools/live/clearIndex.js +19 -0
- package/dist/tools/live/clearIndex.js.map +1 -0
- package/dist/tools/live/liveDiagnostics.js +3 -2
- package/dist/tools/live/liveDiagnostics.js.map +1 -1
- package/dist/tools/primitives/callHierarchy.js +1 -1
- package/dist/tools/primitives/callHierarchy.js.map +1 -1
- package/dist/tools/primitives/diagnostics.js +2 -2
- package/dist/tools/primitives/diagnostics.js.map +1 -1
- package/dist/tools/registry.d.ts +10 -2
- package/dist/tools/registry.js +7 -2
- package/dist/tools/registry.js.map +1 -1
- package/package.json +11 -5
- package/dist/tools/primitives/typeHierarchy.d.ts +0 -1
- package/dist/tools/primitives/typeHierarchy.js +0 -55
- package/dist/tools/primitives/typeHierarchy.js.map +0 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { getGitContext, toRepoRelativePath } from './getGitRoot.js';
|
|
4
|
+
/**
|
|
5
|
+
* Parse git diff to extract changed line ranges per file.
|
|
6
|
+
* Uses repo-relative paths for git commands.
|
|
7
|
+
*/
|
|
8
|
+
export function getChangedHunks(workspaceRoot, base) {
|
|
9
|
+
try {
|
|
10
|
+
const ctx = getGitContext(workspaceRoot);
|
|
11
|
+
const cwd = ctx?.repoRoot ?? workspaceRoot;
|
|
12
|
+
const diff = execSync(`git diff ${base} --unified=0`, { cwd, encoding: 'utf-8' });
|
|
13
|
+
return parseHunks(diff, cwd, workspaceRoot);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function parseHunks(diff, gitRoot, workspaceRoot) {
|
|
20
|
+
const hunks = [];
|
|
21
|
+
let currentFile = '';
|
|
22
|
+
for (const line of diff.split('\n')) {
|
|
23
|
+
const fileMatch = line.match(/^\+\+\+ b\/(.+)/);
|
|
24
|
+
if (fileMatch) {
|
|
25
|
+
currentFile = path.resolve(gitRoot, fileMatch[1]);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const hunkMatch = line.match(/^@@ .+ \+(\d+)(?:,(\d+))? @@/);
|
|
29
|
+
if (hunkMatch && currentFile.match(/\.(ts|tsx|js|jsx|mjs|cjs)$/) && currentFile.startsWith(workspaceRoot)) {
|
|
30
|
+
const start = parseInt(hunkMatch[1]);
|
|
31
|
+
const count = parseInt(hunkMatch[2] ?? '1');
|
|
32
|
+
hunks.push({ file: currentFile, startLine: start, endLine: start + count - 1 });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return hunks;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if a specific file changed between base and HEAD.
|
|
39
|
+
*/
|
|
40
|
+
export function fileChangedInBranch(filePath, base, workspaceRoot) {
|
|
41
|
+
try {
|
|
42
|
+
const ctx = getGitContext(workspaceRoot);
|
|
43
|
+
if (!ctx)
|
|
44
|
+
return false;
|
|
45
|
+
const repoRelPath = toRepoRelativePath(filePath, ctx);
|
|
46
|
+
const diff = execSync(`git diff ${base} --name-only -- "${repoRelPath}"`, {
|
|
47
|
+
cwd: ctx.repoRoot,
|
|
48
|
+
encoding: 'utf-8',
|
|
49
|
+
});
|
|
50
|
+
return diff.trim().length > 0;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=getChangedHunks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getChangedHunks.js","sourceRoot":"","sources":["../../src/git/getChangedHunks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAQpE;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,aAAqB,EAAE,IAAY;IACjE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,GAAG,EAAE,QAAQ,IAAI,aAAa,CAAC;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,IAAI,cAAc,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAClF,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,OAAe,EAAE,aAAqB;IACtE,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChD,IAAI,SAAS,EAAE,CAAC;YACd,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7D,IAAI,SAAS,IAAI,WAAW,CAAC,KAAK,CAAC,4BAA4B,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1G,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,IAAY,EAAE,aAAqB;IACvF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,IAAI,oBAAoB,WAAW,GAAG,EAAE;YACxE,GAAG,EAAE,GAAG,CAAC,QAAQ;YACjB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface GitContext {
|
|
2
|
+
repoRoot: string;
|
|
3
|
+
workspaceRoot: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Resolve the git repo root and workspace root.
|
|
7
|
+
* The workspace root may be a subdirectory of the repo root (nested workspace).
|
|
8
|
+
* Cached for the session.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getGitContext(workspaceRoot: string): GitContext | null;
|
|
11
|
+
/**
|
|
12
|
+
* Convert a workspace-relative or absolute path to a repo-relative path.
|
|
13
|
+
* This is what git commands (git show, git diff) need.
|
|
14
|
+
*/
|
|
15
|
+
export declare function toRepoRelativePath(filePath: string, ctx: GitContext): string;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
let cachedContext = null;
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the git repo root and workspace root.
|
|
6
|
+
* The workspace root may be a subdirectory of the repo root (nested workspace).
|
|
7
|
+
* Cached for the session.
|
|
8
|
+
*/
|
|
9
|
+
export function getGitContext(workspaceRoot) {
|
|
10
|
+
if (cachedContext && cachedContext.workspaceRoot === workspaceRoot)
|
|
11
|
+
return cachedContext;
|
|
12
|
+
try {
|
|
13
|
+
const repoRoot = execSync('git rev-parse --show-toplevel', {
|
|
14
|
+
cwd: workspaceRoot,
|
|
15
|
+
encoding: 'utf-8',
|
|
16
|
+
timeout: 5000,
|
|
17
|
+
}).trim();
|
|
18
|
+
cachedContext = { repoRoot, workspaceRoot };
|
|
19
|
+
return cachedContext;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Convert a workspace-relative or absolute path to a repo-relative path.
|
|
27
|
+
* This is what git commands (git show, git diff) need.
|
|
28
|
+
*/
|
|
29
|
+
export function toRepoRelativePath(filePath, ctx) {
|
|
30
|
+
const abs = path.isAbsolute(filePath) ? filePath : path.join(ctx.workspaceRoot, filePath);
|
|
31
|
+
return path.relative(ctx.repoRoot, abs);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=getGitRoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getGitRoot.js","sourceRoot":"","sources":["../../src/git/getGitRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAO7B,IAAI,aAAa,GAAsB,IAAI,CAAC;AAE5C;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,aAAqB;IACjD,IAAI,aAAa,IAAI,aAAa,CAAC,aAAa,KAAK,aAAa;QAAE,OAAO,aAAa,CAAC;IAEzF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,+BAA+B,EAAE;YACzD,GAAG,EAAE,aAAa;YAClB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,aAAa,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAC5C,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,GAAe;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC1F,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
/**
|
|
3
|
+
* Get the merge-base between HEAD and the target branch.
|
|
4
|
+
* Tries main, then master, then falls back to HEAD~1.
|
|
5
|
+
*/
|
|
6
|
+
export function getMergeBase(workspaceRoot, target) {
|
|
7
|
+
if (target) {
|
|
8
|
+
try {
|
|
9
|
+
return execSync(`git merge-base HEAD ${target}`, { cwd: workspaceRoot, encoding: 'utf-8' }).trim();
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return target;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
for (const branch of ['main', 'master', 'develop']) {
|
|
16
|
+
try {
|
|
17
|
+
return execSync(`git merge-base HEAD ${branch}`, { cwd: workspaceRoot, encoding: 'utf-8' }).trim();
|
|
18
|
+
}
|
|
19
|
+
catch { }
|
|
20
|
+
}
|
|
21
|
+
return 'HEAD~1';
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=getMergeBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMergeBase.js","sourceRoot":"","sources":["../../src/git/getMergeBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB,EAAE,MAAe;IACjE,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,uBAAuB,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrG,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,uBAAuB,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrG,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -27,6 +27,10 @@ import { impactTrace } from './tools/composites/impactTrace.js';
|
|
|
27
27
|
import { semanticDiff } from './tools/composites/semanticDiff.js';
|
|
28
28
|
import { findTestFiles } from './tools/composites/findTestFiles.js';
|
|
29
29
|
import { explainError } from './tools/composites/explainError.js';
|
|
30
|
+
import { findPattern } from './tools/composites/findPattern.js';
|
|
31
|
+
import { findCode } from './tools/composites/findCode.js';
|
|
32
|
+
import { apiGuard } from './tools/composites/apiGuard.js';
|
|
33
|
+
import { rootCauseTrace } from './tools/composites/rootCauseTrace.js';
|
|
30
34
|
// Context
|
|
31
35
|
import { outline } from './tools/context/outline.js';
|
|
32
36
|
import { gatherContext } from './tools/context/gatherContext.js';
|
|
@@ -34,6 +38,7 @@ import { gatherContext } from './tools/context/gatherContext.js';
|
|
|
34
38
|
import { liveDiagnostics } from './tools/live/liveDiagnostics.js';
|
|
35
39
|
import { findUnusedExports } from './tools/live/findUnusedExports.js';
|
|
36
40
|
import { autoImport } from './tools/live/autoImport.js';
|
|
41
|
+
import { clearIndex } from './tools/live/clearIndex.js';
|
|
37
42
|
const workspaceRoot = process.env.LSP_WORKSPACE_ROOT || process.cwd();
|
|
38
43
|
async function main() {
|
|
39
44
|
console.error(`[lsp-intelligence] Starting with workspace: ${workspaceRoot}`);
|
|
@@ -61,6 +66,10 @@ async function main() {
|
|
|
61
66
|
semanticDiff,
|
|
62
67
|
findTestFiles,
|
|
63
68
|
explainError,
|
|
69
|
+
findPattern,
|
|
70
|
+
findCode,
|
|
71
|
+
apiGuard,
|
|
72
|
+
rootCauseTrace,
|
|
64
73
|
// Layer 3: Context
|
|
65
74
|
outline,
|
|
66
75
|
gatherContext,
|
|
@@ -68,6 +77,7 @@ async function main() {
|
|
|
68
77
|
liveDiagnostics,
|
|
69
78
|
findUnusedExports,
|
|
70
79
|
autoImport,
|
|
80
|
+
clearIndex,
|
|
71
81
|
]);
|
|
72
82
|
engine.initialize().catch((err) => {
|
|
73
83
|
console.error(`[lsp-intelligence] Engine initialization failed: ${err.message}`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAEhE,aAAa;AACb,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SearchScope } from '../search/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve a search scope from user input.
|
|
4
|
+
* This scope is applied to ALL retrieval backends — declarations, usages, structural, pattern.
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveSearchScope(workspaceRoot: string, paths?: string[], includeTests?: boolean): SearchScope;
|
|
7
|
+
/**
|
|
8
|
+
* Collect all code files (TS/TSX/JS/JSX/MJS/CJS) within the search scope.
|
|
9
|
+
* Skips dot-prefixed dirs, build output, minified/bundled files, and oversized files.
|
|
10
|
+
*/
|
|
11
|
+
export interface ScopeCollectionResult {
|
|
12
|
+
files: string[];
|
|
13
|
+
capped: boolean;
|
|
14
|
+
capReason?: 'max-files' | 'max-depth';
|
|
15
|
+
}
|
|
16
|
+
export declare function collectScopeFiles(scope: SearchScope, maxFiles?: number): string[];
|
|
17
|
+
export declare function collectScopeFilesWithMeta(scope: SearchScope, maxFiles?: number): ScopeCollectionResult;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { isCodeFile, isTestFile, shouldSkipDir, shouldSkipFile } from '../search/fileKinds.js';
|
|
4
|
+
/**
|
|
5
|
+
* Resolve a search scope from user input.
|
|
6
|
+
* This scope is applied to ALL retrieval backends — declarations, usages, structural, pattern.
|
|
7
|
+
*/
|
|
8
|
+
export function resolveSearchScope(workspaceRoot, paths, includeTests) {
|
|
9
|
+
const roots = paths && paths.length > 0
|
|
10
|
+
? paths.map((p) => path.isAbsolute(p) ? p : path.join(workspaceRoot, p))
|
|
11
|
+
: [workspaceRoot];
|
|
12
|
+
return {
|
|
13
|
+
roots,
|
|
14
|
+
includeTests: includeTests ?? false,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function collectScopeFiles(scope, maxFiles = 2000) {
|
|
18
|
+
const result = collectScopeFilesWithMeta(scope, maxFiles);
|
|
19
|
+
return result.files;
|
|
20
|
+
}
|
|
21
|
+
export function collectScopeFilesWithMeta(scope, maxFiles = 2000) {
|
|
22
|
+
const files = [];
|
|
23
|
+
let hitDepthLimit = false;
|
|
24
|
+
for (const root of scope.roots) {
|
|
25
|
+
const depthHit = walkDir(root, files, scope.includeTests, maxFiles, 0);
|
|
26
|
+
if (depthHit)
|
|
27
|
+
hitDepthLimit = true;
|
|
28
|
+
if (files.length >= maxFiles)
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
files,
|
|
33
|
+
capped: files.length >= maxFiles || hitDepthLimit,
|
|
34
|
+
capReason: files.length >= maxFiles ? 'max-files' : hitDepthLimit ? 'max-depth' : undefined,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function walkDir(dir, files, includeTests, maxFiles, depth) {
|
|
38
|
+
if (depth > 8)
|
|
39
|
+
return true;
|
|
40
|
+
if (files.length >= maxFiles)
|
|
41
|
+
return false;
|
|
42
|
+
let hitDepth = false;
|
|
43
|
+
try {
|
|
44
|
+
for (const entry of fs.readdirSync(dir)) {
|
|
45
|
+
if (shouldSkipDir(entry))
|
|
46
|
+
continue;
|
|
47
|
+
const full = path.join(dir, entry);
|
|
48
|
+
const stat = fs.statSync(full);
|
|
49
|
+
if (stat.isDirectory()) {
|
|
50
|
+
const sub = walkDir(full, files, includeTests, maxFiles, depth + 1);
|
|
51
|
+
if (sub)
|
|
52
|
+
hitDepth = true;
|
|
53
|
+
}
|
|
54
|
+
else if (isCodeFile(full) && !shouldSkipFile(full, stat.size)) {
|
|
55
|
+
if (!includeTests && isTestFile(full))
|
|
56
|
+
continue;
|
|
57
|
+
files.push(full);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch { }
|
|
62
|
+
return hitDepth;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=searchScope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchScope.js","sourceRoot":"","sources":["../../src/resolve/searchScope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { LspEngine } from '../engine/LspEngine.js';
|
|
2
|
+
import type { Diagnostic } from 'vscode-languageserver-protocol';
|
|
3
|
+
export interface ToolTargetInput {
|
|
4
|
+
symbol?: string;
|
|
5
|
+
file_path?: string;
|
|
6
|
+
line?: number;
|
|
7
|
+
column?: number;
|
|
8
|
+
diagnostic_code?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ResolvedTarget {
|
|
11
|
+
symbol?: string;
|
|
12
|
+
uri: string;
|
|
13
|
+
filePath: string;
|
|
14
|
+
position: {
|
|
15
|
+
line: number;
|
|
16
|
+
character: number;
|
|
17
|
+
};
|
|
18
|
+
definitionFilePath?: string;
|
|
19
|
+
confidence: 'high' | 'medium' | 'low';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Resolve a tool input into a canonical target with file + position.
|
|
23
|
+
* Priority: symbol+file_path > symbol > file_path+line > file_path+diagnostic_code > file_path alone
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveTarget(input: ToolTargetInput, engine: LspEngine): Promise<ResolvedTarget>;
|
|
26
|
+
/**
|
|
27
|
+
* Pick the best diagnostic near a position.
|
|
28
|
+
* Priority: exact code match > exact line > nearest ±2 > first error
|
|
29
|
+
*/
|
|
30
|
+
export declare function pickDiagnostic(diagnostics: Diagnostic[], position: {
|
|
31
|
+
line: number;
|
|
32
|
+
character: number;
|
|
33
|
+
}, diagnosticCode?: string): Diagnostic | undefined;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { toPosition, uriToPath } from '../engine/positions.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve a tool input into a canonical target with file + position.
|
|
4
|
+
* Priority: symbol+file_path > symbol > file_path+line > file_path+diagnostic_code > file_path alone
|
|
5
|
+
*/
|
|
6
|
+
export async function resolveTarget(input, engine) {
|
|
7
|
+
// Priority 1: symbol (with optional file hint)
|
|
8
|
+
if (input.symbol) {
|
|
9
|
+
const resolved = await engine.resolveSymbol(input.symbol, input.file_path);
|
|
10
|
+
return {
|
|
11
|
+
symbol: resolved.name,
|
|
12
|
+
uri: resolved.uri,
|
|
13
|
+
filePath: uriToPath(resolved.uri),
|
|
14
|
+
position: resolved.position,
|
|
15
|
+
confidence: 'high',
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
// Priority 2: file_path + line
|
|
19
|
+
if (input.file_path && input.line) {
|
|
20
|
+
const { uri } = await engine.prepareFile(input.file_path);
|
|
21
|
+
const position = toPosition(input.line, input.column ?? 1);
|
|
22
|
+
return {
|
|
23
|
+
uri,
|
|
24
|
+
filePath: input.file_path,
|
|
25
|
+
position,
|
|
26
|
+
confidence: 'medium',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// Priority 3: file_path + diagnostic_code
|
|
30
|
+
if (input.file_path && input.diagnostic_code) {
|
|
31
|
+
const { uri } = await engine.prepareFile(input.file_path);
|
|
32
|
+
const { waitForDiagnostics } = await import('../engine/waitForDiagnostics.js');
|
|
33
|
+
await waitForDiagnostics(engine.docManager, uri, 800);
|
|
34
|
+
const diags = engine.docManager.getCachedDiagnostics(uri);
|
|
35
|
+
const match = diags.find((d) => `TS${d.code}` === input.diagnostic_code || String(d.code) === input.diagnostic_code);
|
|
36
|
+
if (match) {
|
|
37
|
+
return {
|
|
38
|
+
uri,
|
|
39
|
+
filePath: input.file_path,
|
|
40
|
+
position: match.range.start,
|
|
41
|
+
confidence: 'high',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Priority 4: file_path alone
|
|
46
|
+
if (input.file_path) {
|
|
47
|
+
const { uri } = await engine.prepareFile(input.file_path);
|
|
48
|
+
return {
|
|
49
|
+
uri,
|
|
50
|
+
filePath: input.file_path,
|
|
51
|
+
position: { line: 0, character: 0 },
|
|
52
|
+
confidence: 'low',
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
throw new Error('Provide at least a symbol name or file_path.');
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Pick the best diagnostic near a position.
|
|
59
|
+
* Priority: exact code match > exact line > nearest ±2 > first error
|
|
60
|
+
*/
|
|
61
|
+
export function pickDiagnostic(diagnostics, position, diagnosticCode) {
|
|
62
|
+
const errors = diagnostics.filter((d) => d.severity === 1);
|
|
63
|
+
if (errors.length === 0)
|
|
64
|
+
return undefined;
|
|
65
|
+
// Exact diagnostic code match
|
|
66
|
+
if (diagnosticCode) {
|
|
67
|
+
const byCode = errors.find((d) => `TS${d.code}` === diagnosticCode || String(d.code) === diagnosticCode);
|
|
68
|
+
if (byCode)
|
|
69
|
+
return byCode;
|
|
70
|
+
}
|
|
71
|
+
// Exact line match
|
|
72
|
+
const byLine = errors.find((d) => d.range.start.line === position.line);
|
|
73
|
+
if (byLine)
|
|
74
|
+
return byLine;
|
|
75
|
+
// Nearest line within ±2
|
|
76
|
+
const nearby = errors
|
|
77
|
+
.filter((d) => Math.abs(d.range.start.line - position.line) <= 2)
|
|
78
|
+
.sort((a, b) => Math.abs(a.range.start.line - position.line) - Math.abs(b.range.start.line - position.line));
|
|
79
|
+
if (nearby.length > 0)
|
|
80
|
+
return nearby[0];
|
|
81
|
+
// First error
|
|
82
|
+
return errors[0];
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=targetResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"targetResolver.js","sourceRoot":"","sources":["../../src/resolve/targetResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config adapter — emits recipes for feature flag, env var, and config queries.
|
|
3
|
+
*/
|
|
4
|
+
export const configAdapter = {
|
|
5
|
+
id: 'config',
|
|
6
|
+
detect(ir) {
|
|
7
|
+
if (!ir.traits.configLike)
|
|
8
|
+
return [];
|
|
9
|
+
const recipes = [];
|
|
10
|
+
// Feature flag queries
|
|
11
|
+
if (ir.nlTokens.some((t) => ['flag', 'toggle', 'feature', 'experiment', 'gate'].includes(t))) {
|
|
12
|
+
recipes.push({
|
|
13
|
+
id: 'config.feature-flag',
|
|
14
|
+
adapter: 'config',
|
|
15
|
+
retrievers: ['config', 'regex', 'behavior'],
|
|
16
|
+
regexes: [
|
|
17
|
+
{ id: 'feature-flag-def', pattern: '(?:feature|flag|toggle|gate|experiment)\\w*\\s*[:=]', flags: 'gi' },
|
|
18
|
+
{ id: 'launchdarkly', pattern: 'useFeatureFlag|useLDClient|ldClient|variation\\(', flags: 'g' },
|
|
19
|
+
{ id: 'feature-enum', pattern: 'FeatureFlag\\b|Feature\\w*Flag', flags: 'g' },
|
|
20
|
+
],
|
|
21
|
+
scoreBoost: 2,
|
|
22
|
+
reasons: ['Config adapter: feature flag query'],
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
// Env var queries
|
|
26
|
+
if (ir.nlTokens.some((t) => ['env', 'environment', 'variable', 'secret'].includes(t))) {
|
|
27
|
+
recipes.push({
|
|
28
|
+
id: 'config.env-var',
|
|
29
|
+
adapter: 'config',
|
|
30
|
+
retrievers: ['config', 'regex'],
|
|
31
|
+
regexes: [
|
|
32
|
+
{ id: 'process-env', pattern: 'process\\.env\\.\\w+', flags: 'g' },
|
|
33
|
+
{ id: 'env-import', pattern: 'import\\.meta\\.env\\.\\w+', flags: 'g' },
|
|
34
|
+
{ id: 'dotenv', pattern: 'dotenv|loadEnv|env\\w*Config', flags: 'gi' },
|
|
35
|
+
],
|
|
36
|
+
scoreBoost: 2,
|
|
37
|
+
reasons: ['Config adapter: env variable query'],
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// General config queries
|
|
41
|
+
if (recipes.length === 0) {
|
|
42
|
+
recipes.push({
|
|
43
|
+
id: 'config.general',
|
|
44
|
+
adapter: 'config',
|
|
45
|
+
retrievers: ['config', 'behavior'],
|
|
46
|
+
regexes: [
|
|
47
|
+
{ id: 'config-object', pattern: '(?:config|settings|options)\\s*[:=]\\s*\\{', flags: 'gi' },
|
|
48
|
+
],
|
|
49
|
+
scoreBoost: 1,
|
|
50
|
+
reasons: ['Config adapter: general config query'],
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return recipes;
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/search/adapters/config.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,EAAE,EAAE,QAAQ;IAEZ,MAAM,CAAC,EAAW;QAChB,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAErC,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,uBAAuB;QACvB,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,qBAAqB;gBACzB,OAAO,EAAE,QAAQ;gBACjB,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;gBAC3C,OAAO,EAAE;oBACP,EAAE,EAAE,EAAE,kBAAkB,EAAE,OAAO,EAAE,qDAAqD,EAAE,KAAK,EAAE,IAAI,EAAE;oBACvG,EAAE,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,kDAAkD,EAAE,KAAK,EAAE,GAAG,EAAE;oBAC/F,EAAE,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,gCAAgC,EAAE,KAAK,EAAE,GAAG,EAAE;iBAC9E;gBACD,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC,oCAAoC,CAAC;aAChD,CAAC,CAAC;QACL,CAAC;QAED,kBAAkB;QAClB,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,gBAAgB;gBACpB,OAAO,EAAE,QAAQ;gBACjB,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAC/B,OAAO,EAAE;oBACP,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE;oBAClE,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE;oBACvE,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,8BAA8B,EAAE,KAAK,EAAE,IAAI,EAAE;iBACvE;gBACD,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC,oCAAoC,CAAC;aAChD,CAAC,CAAC;QACL,CAAC;QAED,yBAAyB;QACzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,gBAAgB;gBACpB,OAAO,EAAE,QAAQ;gBACjB,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;gBAClC,OAAO,EAAE;oBACP,EAAE,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,4CAA4C,EAAE,KAAK,EAAE,IAAI,EAAE;iBAC5F;gBACD,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC,sCAAsC,CAAC;aAClD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP/API adapter — emits recipes for endpoint, route, and fetch queries.
|
|
3
|
+
* Distinguishes between route DEFINITIONS and outbound API CALLS.
|
|
4
|
+
*/
|
|
5
|
+
export const httpAdapter = {
|
|
6
|
+
id: 'http',
|
|
7
|
+
detect(ir) {
|
|
8
|
+
if (!ir.traits.routeLike)
|
|
9
|
+
return [];
|
|
10
|
+
const recipes = [];
|
|
11
|
+
const isDefinitionQuery = ir.nlTokens.some((t) => ['endpoint', 'route', 'handler', 'defined', 'registered'].includes(t));
|
|
12
|
+
const isCallQuery = ir.nlTokens.some((t) => ['fetch', 'request', 'http', 'call', 'calls'].includes(t));
|
|
13
|
+
// Route/endpoint DEFINITION queries — server-side handler registration
|
|
14
|
+
if (isDefinitionQuery) {
|
|
15
|
+
recipes.push({
|
|
16
|
+
id: 'http.route-definition',
|
|
17
|
+
adapter: 'http',
|
|
18
|
+
retrievers: ['behavior', 'regex', 'config'],
|
|
19
|
+
regexes: [
|
|
20
|
+
// Express/Fastify/Koa-style route registration
|
|
21
|
+
{ id: 'express-route', pattern: '(?:app|router)\\.(get|post|put|delete|patch|use)\\s*\\(', flags: 'gi' },
|
|
22
|
+
// Next.js API route handlers
|
|
23
|
+
{ id: 'next-api-handler', pattern: 'export\\s+(?:default\\s+)?(?:async\\s+)?function\\s+(?:GET|POST|PUT|DELETE|PATCH|handler)', flags: 'g' },
|
|
24
|
+
// Route config objects
|
|
25
|
+
{ id: 'route-config', pattern: '(?:routes|endpoints)\\s*[:=]\\s*[\\[{]', flags: 'gi' },
|
|
26
|
+
],
|
|
27
|
+
scoreBoost: 3,
|
|
28
|
+
reasons: ['HTTP adapter: route/endpoint definition query'],
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
// Outbound API CALL queries — client-side fetch/request
|
|
32
|
+
if (isCallQuery && !isDefinitionQuery) {
|
|
33
|
+
recipes.push({
|
|
34
|
+
id: 'http.api-call',
|
|
35
|
+
adapter: 'http',
|
|
36
|
+
retrievers: ['behavior', 'regex'],
|
|
37
|
+
regexes: [
|
|
38
|
+
{ id: 'fetch-call', pattern: '(?:fetch|axios|request)\\s*\\(', flags: 'g' },
|
|
39
|
+
{ id: 'http-method', pattern: '\\.(get|post|put|delete|patch)\\s*\\(', flags: 'g' },
|
|
40
|
+
],
|
|
41
|
+
scoreBoost: 1,
|
|
42
|
+
reasons: ['HTTP adapter: outbound API call query'],
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
// Ambiguous — both definition and call traits
|
|
46
|
+
if (!isDefinitionQuery && !isCallQuery) {
|
|
47
|
+
recipes.push({
|
|
48
|
+
id: 'http.general',
|
|
49
|
+
adapter: 'http',
|
|
50
|
+
retrievers: ['behavior', 'config'],
|
|
51
|
+
scoreBoost: 1,
|
|
52
|
+
reasons: ['HTTP adapter: general route/API query'],
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return recipes;
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/search/adapters/http.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAkB;IACxC,EAAE,EAAE,MAAM;IAEV,MAAM,CAAC,EAAW;QAChB,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO,EAAE,CAAC;QAEpC,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,MAAM,iBAAiB,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACzH,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvG,uEAAuE;QACvE,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,uBAAuB;gBAC3B,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;gBAC3C,OAAO,EAAE;oBACP,+CAA+C;oBAC/C,EAAE,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,yDAAyD,EAAE,KAAK,EAAE,IAAI,EAAE;oBACxG,6BAA6B;oBAC7B,EAAE,EAAE,EAAE,kBAAkB,EAAE,OAAO,EAAE,2FAA2F,EAAE,KAAK,EAAE,GAAG,EAAE;oBAC5I,uBAAuB;oBACvB,EAAE,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,wCAAwC,EAAE,KAAK,EAAE,IAAI,EAAE;iBACvF;gBACD,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC,+CAA+C,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;QAED,wDAAwD;QACxD,IAAI,WAAW,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,eAAe;gBACnB,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;gBACjC,OAAO,EAAE;oBACP,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,gCAAgC,EAAE,KAAK,EAAE,GAAG,EAAE;oBAC3E,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,uCAAuC,EAAE,KAAK,EAAE,GAAG,EAAE;iBACpF;gBACD,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC,uCAAuC,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,cAAc;gBAClB,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;gBAClC,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC,uCAAuC,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SearchAdapter } from './types.js';
|
|
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
|
+
*/
|
|
12
|
+
export declare const reactAdapter: SearchAdapter;
|