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.
Files changed (208) hide show
  1. package/README.md +48 -15
  2. package/dist/analysis/pattern/collectSearchFiles.d.ts +6 -0
  3. package/dist/analysis/pattern/collectSearchFiles.js +38 -0
  4. package/dist/analysis/pattern/collectSearchFiles.js.map +1 -0
  5. package/dist/analysis/pattern/runPatternSearch.d.ts +17 -0
  6. package/dist/analysis/pattern/runPatternSearch.js +65 -0
  7. package/dist/analysis/pattern/runPatternSearch.js.map +1 -0
  8. package/dist/analysis/ts/extractDeclarations.d.ts +7 -0
  9. package/dist/analysis/ts/extractDeclarations.js +93 -0
  10. package/dist/analysis/ts/extractDeclarations.js.map +1 -0
  11. package/dist/analysis/ts/extractUsages.d.ts +7 -0
  12. package/dist/analysis/ts/extractUsages.js +139 -0
  13. package/dist/analysis/ts/extractUsages.js.map +1 -0
  14. package/dist/analysis/ts/parseSourceFile.d.ts +11 -0
  15. package/dist/analysis/ts/parseSourceFile.js +24 -0
  16. package/dist/analysis/ts/parseSourceFile.js.map +1 -0
  17. package/dist/analysis/ts/reactState.d.ts +9 -0
  18. package/dist/analysis/ts/reactState.js +57 -0
  19. package/dist/analysis/ts/reactState.js.map +1 -0
  20. package/dist/analysis/ts/snippets.d.ts +14 -0
  21. package/dist/analysis/ts/snippets.js +29 -0
  22. package/dist/analysis/ts/snippets.js.map +1 -0
  23. package/dist/analysis/ts/structuralPredicates.d.ts +10 -0
  24. package/dist/analysis/ts/structuralPredicates.js +199 -0
  25. package/dist/analysis/ts/structuralPredicates.js.map +1 -0
  26. package/dist/ast/diffDeclarationShapes.d.ts +16 -0
  27. package/dist/ast/diffDeclarationShapes.js +179 -0
  28. package/dist/ast/diffDeclarationShapes.js.map +1 -0
  29. package/dist/ast/extractExportDeclarations.d.ts +21 -0
  30. package/dist/ast/extractExportDeclarations.js +218 -0
  31. package/dist/ast/extractExportDeclarations.js.map +1 -0
  32. package/dist/ast/findNodeAtPosition.d.ts +12 -0
  33. package/dist/ast/findNodeAtPosition.js +75 -0
  34. package/dist/ast/findNodeAtPosition.js.map +1 -0
  35. package/dist/ast/parseFile.d.ts +11 -0
  36. package/dist/ast/parseFile.js +46 -0
  37. package/dist/ast/parseFile.js.map +1 -0
  38. package/dist/engine/LspEngine.js +23 -1
  39. package/dist/engine/LspEngine.js.map +1 -1
  40. package/dist/engine/waitForDiagnostics.d.ts +7 -0
  41. package/dist/engine/waitForDiagnostics.js +16 -0
  42. package/dist/engine/waitForDiagnostics.js.map +1 -0
  43. package/dist/git/getBaseFileContent.d.ts +6 -0
  44. package/dist/git/getBaseFileContent.js +23 -0
  45. package/dist/git/getBaseFileContent.js.map +1 -0
  46. package/dist/git/getChangedFiles.d.ts +5 -0
  47. package/dist/git/getChangedFiles.js +27 -0
  48. package/dist/git/getChangedFiles.js.map +1 -0
  49. package/dist/git/getChangedHunks.d.ts +14 -0
  50. package/dist/git/getChangedHunks.js +56 -0
  51. package/dist/git/getChangedHunks.js.map +1 -0
  52. package/dist/git/getGitRoot.d.ts +15 -0
  53. package/dist/git/getGitRoot.js +33 -0
  54. package/dist/git/getGitRoot.js.map +1 -0
  55. package/dist/git/getMergeBase.d.ts +5 -0
  56. package/dist/git/getMergeBase.js +23 -0
  57. package/dist/git/getMergeBase.js.map +1 -0
  58. package/dist/index.js +10 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/resolve/searchScope.d.ts +17 -0
  61. package/dist/resolve/searchScope.js +64 -0
  62. package/dist/resolve/searchScope.js.map +1 -0
  63. package/dist/resolve/targetResolver.d.ts +33 -0
  64. package/dist/resolve/targetResolver.js +84 -0
  65. package/dist/resolve/targetResolver.js.map +1 -0
  66. package/dist/search/adapters/config.d.ts +5 -0
  67. package/dist/search/adapters/config.js +56 -0
  68. package/dist/search/adapters/config.js.map +1 -0
  69. package/dist/search/adapters/http.d.ts +6 -0
  70. package/dist/search/adapters/http.js +58 -0
  71. package/dist/search/adapters/http.js.map +1 -0
  72. package/dist/search/adapters/react.d.ts +12 -0
  73. package/dist/search/adapters/react.js +92 -0
  74. package/dist/search/adapters/react.js.map +1 -0
  75. package/dist/search/adapters/registry.d.ts +6 -0
  76. package/dist/search/adapters/registry.js +20 -0
  77. package/dist/search/adapters/registry.js.map +1 -0
  78. package/dist/search/adapters/types.d.ts +5 -0
  79. package/dist/search/adapters/types.js +2 -0
  80. package/dist/search/adapters/types.js.map +1 -0
  81. package/dist/search/debug/trace.d.ts +6 -0
  82. package/dist/search/debug/trace.js +25 -0
  83. package/dist/search/debug/trace.js.map +1 -0
  84. package/dist/search/expand/graphExpansion.d.ts +16 -0
  85. package/dist/search/expand/graphExpansion.js +168 -0
  86. package/dist/search/expand/graphExpansion.js.map +1 -0
  87. package/dist/search/families/behaviorFamilies.d.ts +22 -0
  88. package/dist/search/families/behaviorFamilies.js +90 -0
  89. package/dist/search/families/behaviorFamilies.js.map +1 -0
  90. package/dist/search/fileKinds.d.ts +13 -0
  91. package/dist/search/fileKinds.js +74 -0
  92. package/dist/search/fileKinds.js.map +1 -0
  93. package/dist/search/index/configIndex.d.ts +6 -0
  94. package/dist/search/index/configIndex.js +196 -0
  95. package/dist/search/index/configIndex.js.map +1 -0
  96. package/dist/search/index/declarationIndex.d.ts +6 -0
  97. package/dist/search/index/declarationIndex.js +13 -0
  98. package/dist/search/index/declarationIndex.js.map +1 -0
  99. package/dist/search/index/docIndex.d.ts +7 -0
  100. package/dist/search/index/docIndex.js +116 -0
  101. package/dist/search/index/docIndex.js.map +1 -0
  102. package/dist/search/index/types.d.ts +1 -0
  103. package/dist/search/index/types.js +2 -0
  104. package/dist/search/index/types.js.map +1 -0
  105. package/dist/search/index/usageIndex.d.ts +6 -0
  106. package/dist/search/index/usageIndex.js +13 -0
  107. package/dist/search/index/usageIndex.js.map +1 -0
  108. package/dist/search/index/workspaceIndex.d.ts +14 -0
  109. package/dist/search/index/workspaceIndex.js +127 -0
  110. package/dist/search/index/workspaceIndex.js.map +1 -0
  111. package/dist/search/query/compileEffectiveSearchSpec.d.ts +24 -0
  112. package/dist/search/query/compileEffectiveSearchSpec.js +67 -0
  113. package/dist/search/query/compileEffectiveSearchSpec.js.map +1 -0
  114. package/dist/search/query/parseQuery.d.ts +10 -0
  115. package/dist/search/query/parseQuery.js +284 -0
  116. package/dist/search/query/parseQuery.js.map +1 -0
  117. package/dist/search/query/phraseRules.d.ts +10 -0
  118. package/dist/search/query/phraseRules.js +58 -0
  119. package/dist/search/query/phraseRules.js.map +1 -0
  120. package/dist/search/query/planQuery.d.ts +10 -0
  121. package/dist/search/query/planQuery.js +91 -0
  122. package/dist/search/query/planQuery.js.map +1 -0
  123. package/dist/search/ranking/assessConfidence.d.ts +6 -0
  124. package/dist/search/ranking/assessConfidence.js +31 -0
  125. package/dist/search/ranking/assessConfidence.js.map +1 -0
  126. package/dist/search/ranking/candidateIdentity.d.ts +21 -0
  127. package/dist/search/ranking/candidateIdentity.js +29 -0
  128. package/dist/search/ranking/candidateIdentity.js.map +1 -0
  129. package/dist/search/ranking/coalesceCandidates.d.ts +9 -0
  130. package/dist/search/ranking/coalesceCandidates.js +48 -0
  131. package/dist/search/ranking/coalesceCandidates.js.map +1 -0
  132. package/dist/search/ranking/fieldedTextRanker.d.ts +26 -0
  133. package/dist/search/ranking/fieldedTextRanker.js +79 -0
  134. package/dist/search/ranking/fieldedTextRanker.js.map +1 -0
  135. package/dist/search/ranking/mergeCandidates.d.ts +13 -0
  136. package/dist/search/ranking/mergeCandidates.js +85 -0
  137. package/dist/search/ranking/mergeCandidates.js.map +1 -0
  138. package/dist/search/ranking/rankCandidates.d.ts +12 -0
  139. package/dist/search/ranking/rankCandidates.js +106 -0
  140. package/dist/search/ranking/rankCandidates.js.map +1 -0
  141. package/dist/search/retrievers/behaviorRetriever.d.ts +7 -0
  142. package/dist/search/retrievers/behaviorRetriever.js +86 -0
  143. package/dist/search/retrievers/behaviorRetriever.js.map +1 -0
  144. package/dist/search/retrievers/configRetriever.d.ts +7 -0
  145. package/dist/search/retrievers/configRetriever.js +46 -0
  146. package/dist/search/retrievers/configRetriever.js.map +1 -0
  147. package/dist/search/retrievers/docRetriever.d.ts +7 -0
  148. package/dist/search/retrievers/docRetriever.js +46 -0
  149. package/dist/search/retrievers/docRetriever.js.map +1 -0
  150. package/dist/search/retrievers/identifierRetriever.d.ts +7 -0
  151. package/dist/search/retrievers/identifierRetriever.js +67 -0
  152. package/dist/search/retrievers/identifierRetriever.js.map +1 -0
  153. package/dist/search/retrievers/structuralRetriever.d.ts +9 -0
  154. package/dist/search/retrievers/structuralRetriever.js +104 -0
  155. package/dist/search/retrievers/structuralRetriever.js.map +1 -0
  156. package/dist/search/retrievers/textPatternRetriever.d.ts +7 -0
  157. package/dist/search/retrievers/textPatternRetriever.js +90 -0
  158. package/dist/search/retrievers/textPatternRetriever.js.map +1 -0
  159. package/dist/search/structural/locators/callLocator.d.ts +6 -0
  160. package/dist/search/structural/locators/callLocator.js +57 -0
  161. package/dist/search/structural/locators/callLocator.js.map +1 -0
  162. package/dist/search/structural/locators/declarationLocator.d.ts +6 -0
  163. package/dist/search/structural/locators/declarationLocator.js +57 -0
  164. package/dist/search/structural/locators/declarationLocator.js.map +1 -0
  165. package/dist/search/structural/locators/statementLocator.d.ts +6 -0
  166. package/dist/search/structural/locators/statementLocator.js +65 -0
  167. package/dist/search/structural/locators/statementLocator.js.map +1 -0
  168. package/dist/search/structural/locators/types.d.ts +12 -0
  169. package/dist/search/structural/locators/types.js +2 -0
  170. package/dist/search/structural/locators/types.js.map +1 -0
  171. package/dist/search/structural/selectLocators.d.ts +7 -0
  172. package/dist/search/structural/selectLocators.js +21 -0
  173. package/dist/search/structural/selectLocators.js.map +1 -0
  174. package/dist/search/types.d.ts +191 -0
  175. package/dist/search/types.js +11 -0
  176. package/dist/search/types.js.map +1 -0
  177. package/dist/tools/composites/apiGuard.d.ts +1 -0
  178. package/dist/tools/composites/apiGuard.js +172 -0
  179. package/dist/tools/composites/apiGuard.js.map +1 -0
  180. package/dist/tools/composites/explainError.js +3 -2
  181. package/dist/tools/composites/explainError.js.map +1 -1
  182. package/dist/tools/composites/findCode.d.ts +1 -0
  183. package/dist/tools/composites/findCode.js +145 -0
  184. package/dist/tools/composites/findCode.js.map +1 -0
  185. package/dist/tools/composites/findPattern.d.ts +5 -0
  186. package/dist/tools/composites/findPattern.js +41 -0
  187. package/dist/tools/composites/findPattern.js.map +1 -0
  188. package/dist/tools/composites/rootCauseTrace.d.ts +1 -0
  189. package/dist/tools/composites/rootCauseTrace.js +213 -0
  190. package/dist/tools/composites/rootCauseTrace.js.map +1 -0
  191. package/dist/tools/composites/semanticDiff.js +24 -77
  192. package/dist/tools/composites/semanticDiff.js.map +1 -1
  193. package/dist/tools/live/clearIndex.d.ts +1 -0
  194. package/dist/tools/live/clearIndex.js +19 -0
  195. package/dist/tools/live/clearIndex.js.map +1 -0
  196. package/dist/tools/live/liveDiagnostics.js +3 -2
  197. package/dist/tools/live/liveDiagnostics.js.map +1 -1
  198. package/dist/tools/primitives/callHierarchy.js +1 -1
  199. package/dist/tools/primitives/callHierarchy.js.map +1 -1
  200. package/dist/tools/primitives/diagnostics.js +2 -2
  201. package/dist/tools/primitives/diagnostics.js.map +1 -1
  202. package/dist/tools/registry.d.ts +10 -2
  203. package/dist/tools/registry.js +7 -2
  204. package/dist/tools/registry.js.map +1 -1
  205. package/package.json +11 -5
  206. package/dist/tools/primitives/typeHierarchy.d.ts +0 -1
  207. package/dist/tools/primitives/typeHierarchy.js +0 -55
  208. 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,5 @@
1
+ /**
2
+ * Get the merge-base between HEAD and the target branch.
3
+ * Tries main, then master, then falls back to HEAD~1.
4
+ */
5
+ export declare function getMergeBase(workspaceRoot: string, target?: string): string;
@@ -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":"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"}
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,5 @@
1
+ import type { SearchAdapter } from './types.js';
2
+ /**
3
+ * Config adapter — emits recipes for feature flag, env var, and config queries.
4
+ */
5
+ export declare const configAdapter: SearchAdapter;
@@ -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,6 @@
1
+ import type { SearchAdapter } from './types.js';
2
+ /**
3
+ * HTTP/API adapter — emits recipes for endpoint, route, and fetch queries.
4
+ * Distinguishes between route DEFINITIONS and outbound API CALLS.
5
+ */
6
+ export declare const httpAdapter: SearchAdapter;
@@ -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;