lance-context 0.1.0 → 1.0.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 (237) hide show
  1. package/README.md +232 -23
  2. package/dist/__tests__/ast-chunker.test.d.ts +2 -0
  3. package/dist/__tests__/ast-chunker.test.d.ts.map +1 -0
  4. package/dist/__tests__/ast-chunker.test.js +307 -0
  5. package/dist/__tests__/ast-chunker.test.js.map +1 -0
  6. package/dist/__tests__/config.test.d.ts +2 -0
  7. package/dist/__tests__/config.test.d.ts.map +1 -0
  8. package/dist/__tests__/config.test.js +242 -0
  9. package/dist/__tests__/config.test.js.map +1 -0
  10. package/dist/__tests__/dashboard/beads.test.d.ts +2 -0
  11. package/dist/__tests__/dashboard/beads.test.d.ts.map +1 -0
  12. package/dist/__tests__/dashboard/beads.test.js +151 -0
  13. package/dist/__tests__/dashboard/beads.test.js.map +1 -0
  14. package/dist/__tests__/dashboard/index.test.d.ts +2 -0
  15. package/dist/__tests__/dashboard/index.test.d.ts.map +1 -0
  16. package/dist/__tests__/dashboard/index.test.js +116 -0
  17. package/dist/__tests__/dashboard/index.test.js.map +1 -0
  18. package/dist/__tests__/dashboard/routes.test.d.ts +2 -0
  19. package/dist/__tests__/dashboard/routes.test.d.ts.map +1 -0
  20. package/dist/__tests__/dashboard/routes.test.js +125 -0
  21. package/dist/__tests__/dashboard/routes.test.js.map +1 -0
  22. package/dist/__tests__/dashboard/server.test.d.ts +2 -0
  23. package/dist/__tests__/dashboard/server.test.d.ts.map +1 -0
  24. package/dist/__tests__/dashboard/server.test.js +75 -0
  25. package/dist/__tests__/dashboard/server.test.js.map +1 -0
  26. package/dist/__tests__/dashboard/state.test.d.ts +2 -0
  27. package/dist/__tests__/dashboard/state.test.d.ts.map +1 -0
  28. package/dist/__tests__/dashboard/state.test.js +124 -0
  29. package/dist/__tests__/dashboard/state.test.js.map +1 -0
  30. package/dist/__tests__/embeddings/factory.test.d.ts +2 -0
  31. package/dist/__tests__/embeddings/factory.test.d.ts.map +1 -0
  32. package/dist/__tests__/embeddings/factory.test.js +100 -0
  33. package/dist/__tests__/embeddings/factory.test.js.map +1 -0
  34. package/dist/__tests__/embeddings/jina.test.d.ts +2 -0
  35. package/dist/__tests__/embeddings/jina.test.d.ts.map +1 -0
  36. package/dist/__tests__/embeddings/jina.test.js +156 -0
  37. package/dist/__tests__/embeddings/jina.test.js.map +1 -0
  38. package/dist/__tests__/embeddings/ollama.test.d.ts +2 -0
  39. package/dist/__tests__/embeddings/ollama.test.d.ts.map +1 -0
  40. package/dist/__tests__/embeddings/ollama.test.js +172 -0
  41. package/dist/__tests__/embeddings/ollama.test.js.map +1 -0
  42. package/dist/__tests__/embeddings/rate-limiter.test.d.ts +2 -0
  43. package/dist/__tests__/embeddings/rate-limiter.test.d.ts.map +1 -0
  44. package/dist/__tests__/embeddings/rate-limiter.test.js +163 -0
  45. package/dist/__tests__/embeddings/rate-limiter.test.js.map +1 -0
  46. package/dist/__tests__/embeddings/retry.test.d.ts +2 -0
  47. package/dist/__tests__/embeddings/retry.test.d.ts.map +1 -0
  48. package/dist/__tests__/embeddings/retry.test.js +260 -0
  49. package/dist/__tests__/embeddings/retry.test.js.map +1 -0
  50. package/dist/__tests__/embeddings/types.test.d.ts +2 -0
  51. package/dist/__tests__/embeddings/types.test.d.ts.map +1 -0
  52. package/dist/__tests__/embeddings/types.test.js +31 -0
  53. package/dist/__tests__/embeddings/types.test.js.map +1 -0
  54. package/dist/__tests__/mocks/embedding-backend.mock.d.ts +10 -0
  55. package/dist/__tests__/mocks/embedding-backend.mock.d.ts.map +1 -0
  56. package/dist/__tests__/mocks/embedding-backend.mock.js +39 -0
  57. package/dist/__tests__/mocks/embedding-backend.mock.js.map +1 -0
  58. package/dist/__tests__/mocks/fetch.mock.d.ts +38 -0
  59. package/dist/__tests__/mocks/fetch.mock.d.ts.map +1 -0
  60. package/dist/__tests__/mocks/fetch.mock.js +74 -0
  61. package/dist/__tests__/mocks/fetch.mock.js.map +1 -0
  62. package/dist/__tests__/mocks/lancedb.mock.d.ts +38 -0
  63. package/dist/__tests__/mocks/lancedb.mock.d.ts.map +1 -0
  64. package/dist/__tests__/mocks/lancedb.mock.js +63 -0
  65. package/dist/__tests__/mocks/lancedb.mock.js.map +1 -0
  66. package/dist/__tests__/search/clustering.test.d.ts +2 -0
  67. package/dist/__tests__/search/clustering.test.d.ts.map +1 -0
  68. package/dist/__tests__/search/clustering.test.js +230 -0
  69. package/dist/__tests__/search/clustering.test.js.map +1 -0
  70. package/dist/__tests__/search/hybrid-search.test.d.ts +2 -0
  71. package/dist/__tests__/search/hybrid-search.test.d.ts.map +1 -0
  72. package/dist/__tests__/search/hybrid-search.test.js +186 -0
  73. package/dist/__tests__/search/hybrid-search.test.js.map +1 -0
  74. package/dist/__tests__/search/indexer.test.d.ts +2 -0
  75. package/dist/__tests__/search/indexer.test.d.ts.map +1 -0
  76. package/dist/__tests__/search/indexer.test.js +878 -0
  77. package/dist/__tests__/search/indexer.test.js.map +1 -0
  78. package/dist/__tests__/search/tree-sitter-chunker.test.d.ts +2 -0
  79. package/dist/__tests__/search/tree-sitter-chunker.test.d.ts.map +1 -0
  80. package/dist/__tests__/search/tree-sitter-chunker.test.js +228 -0
  81. package/dist/__tests__/search/tree-sitter-chunker.test.js.map +1 -0
  82. package/dist/__tests__/setup.d.ts +2 -0
  83. package/dist/__tests__/setup.d.ts.map +1 -0
  84. package/dist/__tests__/setup.js +11 -0
  85. package/dist/__tests__/setup.js.map +1 -0
  86. package/dist/__tests__/utils/concurrency.test.d.ts +2 -0
  87. package/dist/__tests__/utils/concurrency.test.d.ts.map +1 -0
  88. package/dist/__tests__/utils/concurrency.test.js +83 -0
  89. package/dist/__tests__/utils/concurrency.test.js.map +1 -0
  90. package/dist/__tests__/utils/errors.test.d.ts +2 -0
  91. package/dist/__tests__/utils/errors.test.d.ts.map +1 -0
  92. package/dist/__tests__/utils/errors.test.js +136 -0
  93. package/dist/__tests__/utils/errors.test.js.map +1 -0
  94. package/dist/__tests__/utils/type-guards.test.d.ts +2 -0
  95. package/dist/__tests__/utils/type-guards.test.d.ts.map +1 -0
  96. package/dist/__tests__/utils/type-guards.test.js +80 -0
  97. package/dist/__tests__/utils/type-guards.test.js.map +1 -0
  98. package/dist/__tests__/worktree/worktree-manager.test.d.ts +2 -0
  99. package/dist/__tests__/worktree/worktree-manager.test.d.ts.map +1 -0
  100. package/dist/__tests__/worktree/worktree-manager.test.js +403 -0
  101. package/dist/__tests__/worktree/worktree-manager.test.js.map +1 -0
  102. package/dist/config.d.ts +122 -0
  103. package/dist/config.d.ts.map +1 -0
  104. package/dist/config.js +508 -0
  105. package/dist/config.js.map +1 -0
  106. package/dist/dashboard/beads.d.ts +35 -0
  107. package/dist/dashboard/beads.d.ts.map +1 -0
  108. package/dist/dashboard/beads.js +102 -0
  109. package/dist/dashboard/beads.js.map +1 -0
  110. package/dist/dashboard/events.d.ts +46 -0
  111. package/dist/dashboard/events.d.ts.map +1 -0
  112. package/dist/dashboard/events.js +141 -0
  113. package/dist/dashboard/events.js.map +1 -0
  114. package/dist/dashboard/index.d.ts +67 -0
  115. package/dist/dashboard/index.d.ts.map +1 -0
  116. package/dist/dashboard/index.js +90 -0
  117. package/dist/dashboard/index.js.map +1 -0
  118. package/dist/dashboard/routes.d.ts +6 -0
  119. package/dist/dashboard/routes.d.ts.map +1 -0
  120. package/dist/dashboard/routes.js +244 -0
  121. package/dist/dashboard/routes.js.map +1 -0
  122. package/dist/dashboard/server.d.ts +27 -0
  123. package/dist/dashboard/server.d.ts.map +1 -0
  124. package/dist/dashboard/server.js +72 -0
  125. package/dist/dashboard/server.js.map +1 -0
  126. package/dist/dashboard/state.d.ts +116 -0
  127. package/dist/dashboard/state.d.ts.map +1 -0
  128. package/dist/dashboard/state.js +251 -0
  129. package/dist/dashboard/state.js.map +1 -0
  130. package/dist/dashboard/ui.d.ts +6 -0
  131. package/dist/dashboard/ui.d.ts.map +1 -0
  132. package/dist/dashboard/ui.js +1407 -0
  133. package/dist/dashboard/ui.js.map +1 -0
  134. package/dist/embeddings/index.d.ts +20 -2
  135. package/dist/embeddings/index.d.ts.map +1 -1
  136. package/dist/embeddings/index.js +49 -6
  137. package/dist/embeddings/index.js.map +1 -1
  138. package/dist/embeddings/jina.d.ts +9 -0
  139. package/dist/embeddings/jina.d.ts.map +1 -1
  140. package/dist/embeddings/jina.js +42 -2
  141. package/dist/embeddings/jina.js.map +1 -1
  142. package/dist/embeddings/ollama.d.ts +2 -0
  143. package/dist/embeddings/ollama.d.ts.map +1 -1
  144. package/dist/embeddings/ollama.js +21 -5
  145. package/dist/embeddings/ollama.js.map +1 -1
  146. package/dist/embeddings/rate-limiter.d.ts +75 -0
  147. package/dist/embeddings/rate-limiter.d.ts.map +1 -0
  148. package/dist/embeddings/rate-limiter.js +145 -0
  149. package/dist/embeddings/rate-limiter.js.map +1 -0
  150. package/dist/embeddings/retry.d.ts +14 -0
  151. package/dist/embeddings/retry.d.ts.map +1 -0
  152. package/dist/embeddings/retry.js +89 -0
  153. package/dist/embeddings/retry.js.map +1 -0
  154. package/dist/embeddings/types.d.ts +56 -2
  155. package/dist/embeddings/types.d.ts.map +1 -1
  156. package/dist/embeddings/types.js +16 -0
  157. package/dist/embeddings/types.js.map +1 -1
  158. package/dist/index.js +1870 -44
  159. package/dist/index.js.map +1 -1
  160. package/dist/memory/index.d.ts +63 -0
  161. package/dist/memory/index.d.ts.map +1 -0
  162. package/dist/memory/index.js +168 -0
  163. package/dist/memory/index.js.map +1 -0
  164. package/dist/search/ast-chunker.d.ts +34 -0
  165. package/dist/search/ast-chunker.d.ts.map +1 -0
  166. package/dist/search/ast-chunker.js +261 -0
  167. package/dist/search/ast-chunker.js.map +1 -0
  168. package/dist/search/clustering.d.ts +77 -0
  169. package/dist/search/clustering.d.ts.map +1 -0
  170. package/dist/search/clustering.js +455 -0
  171. package/dist/search/clustering.js.map +1 -0
  172. package/dist/search/indexer.d.ts +239 -3
  173. package/dist/search/indexer.d.ts.map +1 -1
  174. package/dist/search/indexer.js +941 -45
  175. package/dist/search/indexer.js.map +1 -1
  176. package/dist/search/tree-sitter-chunker.d.ts +69 -0
  177. package/dist/search/tree-sitter-chunker.d.ts.map +1 -0
  178. package/dist/search/tree-sitter-chunker.js +436 -0
  179. package/dist/search/tree-sitter-chunker.js.map +1 -0
  180. package/dist/symbols/index.d.ts +14 -0
  181. package/dist/symbols/index.d.ts.map +1 -0
  182. package/dist/symbols/index.js +19 -0
  183. package/dist/symbols/index.js.map +1 -0
  184. package/dist/symbols/name-path.d.ts +113 -0
  185. package/dist/symbols/name-path.d.ts.map +1 -0
  186. package/dist/symbols/name-path.js +194 -0
  187. package/dist/symbols/name-path.js.map +1 -0
  188. package/dist/symbols/pattern-search.d.ts +14 -0
  189. package/dist/symbols/pattern-search.d.ts.map +1 -0
  190. package/dist/symbols/pattern-search.js +224 -0
  191. package/dist/symbols/pattern-search.js.map +1 -0
  192. package/dist/symbols/reference-finder.d.ts +38 -0
  193. package/dist/symbols/reference-finder.d.ts.map +1 -0
  194. package/dist/symbols/reference-finder.js +376 -0
  195. package/dist/symbols/reference-finder.js.map +1 -0
  196. package/dist/symbols/symbol-editor.d.ts +81 -0
  197. package/dist/symbols/symbol-editor.d.ts.map +1 -0
  198. package/dist/symbols/symbol-editor.js +257 -0
  199. package/dist/symbols/symbol-editor.js.map +1 -0
  200. package/dist/symbols/symbol-extractor.d.ts +49 -0
  201. package/dist/symbols/symbol-extractor.d.ts.map +1 -0
  202. package/dist/symbols/symbol-extractor.js +593 -0
  203. package/dist/symbols/symbol-extractor.js.map +1 -0
  204. package/dist/symbols/symbol-renamer.d.ts +81 -0
  205. package/dist/symbols/symbol-renamer.d.ts.map +1 -0
  206. package/dist/symbols/symbol-renamer.js +204 -0
  207. package/dist/symbols/symbol-renamer.js.map +1 -0
  208. package/dist/symbols/types.d.ts +234 -0
  209. package/dist/symbols/types.d.ts.map +1 -0
  210. package/dist/symbols/types.js +106 -0
  211. package/dist/symbols/types.js.map +1 -0
  212. package/dist/utils/concurrency.d.ts +32 -0
  213. package/dist/utils/concurrency.d.ts.map +1 -0
  214. package/dist/utils/concurrency.js +57 -0
  215. package/dist/utils/concurrency.js.map +1 -0
  216. package/dist/utils/errors.d.ts +36 -0
  217. package/dist/utils/errors.d.ts.map +1 -0
  218. package/dist/utils/errors.js +91 -0
  219. package/dist/utils/errors.js.map +1 -0
  220. package/dist/utils/type-guards.d.ts +17 -0
  221. package/dist/utils/type-guards.d.ts.map +1 -0
  222. package/dist/utils/type-guards.js +25 -0
  223. package/dist/utils/type-guards.js.map +1 -0
  224. package/dist/worktree/index.d.ts +6 -0
  225. package/dist/worktree/index.d.ts.map +1 -0
  226. package/dist/worktree/index.js +6 -0
  227. package/dist/worktree/index.js.map +1 -0
  228. package/dist/worktree/types.d.ts +101 -0
  229. package/dist/worktree/types.d.ts.map +1 -0
  230. package/dist/worktree/types.js +6 -0
  231. package/dist/worktree/types.js.map +1 -0
  232. package/dist/worktree/worktree-manager.d.ts +80 -0
  233. package/dist/worktree/worktree-manager.d.ts.map +1 -0
  234. package/dist/worktree/worktree-manager.js +407 -0
  235. package/dist/worktree/worktree-manager.js.map +1 -0
  236. package/package.json +39 -5
  237. package/scripts/postinstall.js +48 -0
@@ -0,0 +1,593 @@
1
+ /**
2
+ * Symbol extractor using Tree-sitter and TypeScript AST for multiple languages.
3
+ * Extracts hierarchical symbol information from source files.
4
+ */
5
+ import * as fs from 'fs/promises';
6
+ import * as path from 'path';
7
+ import * as ts from 'typescript';
8
+ import { SymbolKind, SymbolKindNames, } from './types.js';
9
+ import { buildNamePath, formatNamePath } from './name-path.js';
10
+ let parserModule = null;
11
+ const loadParserModule = async () => {
12
+ if (!parserModule) {
13
+ const mod = await import('web-tree-sitter');
14
+ parserModule = {
15
+ Parser: mod.Parser,
16
+ Language: mod.Language,
17
+ };
18
+ }
19
+ return parserModule;
20
+ };
21
+ /**
22
+ * Language configurations (same as TreeSitterChunker but with constructor types)
23
+ */
24
+ const LANGUAGE_CONFIGS = {
25
+ python: {
26
+ wasmFile: 'tree-sitter-python.wasm',
27
+ extensions: ['.py', '.pyi'],
28
+ functionTypes: ['function_definition'],
29
+ classTypes: ['class_definition'],
30
+ methodTypes: ['function_definition'],
31
+ importTypes: ['import_statement', 'import_from_statement'],
32
+ variableTypes: ['assignment', 'expression_statement'],
33
+ interfaceTypes: [],
34
+ typeTypes: [],
35
+ constructorTypes: [], // __init__ is detected by name
36
+ },
37
+ go: {
38
+ wasmFile: 'tree-sitter-go.wasm',
39
+ extensions: ['.go'],
40
+ functionTypes: ['function_declaration'],
41
+ classTypes: [],
42
+ methodTypes: ['method_declaration'],
43
+ importTypes: ['import_declaration'],
44
+ variableTypes: ['var_declaration', 'const_declaration', 'short_var_declaration'],
45
+ interfaceTypes: ['type_declaration'],
46
+ typeTypes: ['type_declaration'],
47
+ constructorTypes: [],
48
+ },
49
+ rust: {
50
+ wasmFile: 'tree-sitter-rust.wasm',
51
+ extensions: ['.rs'],
52
+ functionTypes: ['function_item'],
53
+ classTypes: [],
54
+ methodTypes: ['function_item'],
55
+ importTypes: ['use_declaration'],
56
+ variableTypes: ['let_declaration', 'const_item', 'static_item'],
57
+ interfaceTypes: ['trait_item'],
58
+ typeTypes: ['type_item', 'struct_item', 'enum_item', 'impl_item'],
59
+ constructorTypes: [],
60
+ },
61
+ java: {
62
+ wasmFile: 'tree-sitter-java.wasm',
63
+ extensions: ['.java'],
64
+ functionTypes: [],
65
+ classTypes: ['class_declaration', 'interface_declaration', 'enum_declaration'],
66
+ methodTypes: ['method_declaration'],
67
+ importTypes: ['import_declaration'],
68
+ variableTypes: ['field_declaration', 'local_variable_declaration'],
69
+ interfaceTypes: ['interface_declaration'],
70
+ typeTypes: [],
71
+ constructorTypes: ['constructor_declaration'],
72
+ },
73
+ ruby: {
74
+ wasmFile: 'tree-sitter-ruby.wasm',
75
+ extensions: ['.rb'],
76
+ functionTypes: ['method'],
77
+ classTypes: ['class', 'module'],
78
+ methodTypes: ['method', 'singleton_method'],
79
+ importTypes: ['call'],
80
+ variableTypes: ['assignment'],
81
+ interfaceTypes: [],
82
+ typeTypes: [],
83
+ constructorTypes: [], // initialize is detected by name
84
+ },
85
+ };
86
+ /**
87
+ * Symbol extractor for extracting hierarchical symbol information.
88
+ */
89
+ export class SymbolExtractor {
90
+ static parser = null;
91
+ static loadedLanguages = new Map();
92
+ static initPromise = null;
93
+ static wasmBasePath = null;
94
+ projectPath;
95
+ constructor(projectPath) {
96
+ this.projectPath = projectPath;
97
+ }
98
+ /**
99
+ * Initialize the tree-sitter parser.
100
+ */
101
+ static async initialize() {
102
+ if (this.initPromise) {
103
+ return this.initPromise;
104
+ }
105
+ this.initPromise = (async () => {
106
+ this.wasmBasePath = await this.findWasmBasePath();
107
+ const module = await loadParserModule();
108
+ const webTreeSitterWasm = path.join(process.cwd(), 'node_modules', 'web-tree-sitter', 'web-tree-sitter.wasm');
109
+ await module.Parser.init({
110
+ locateFile: () => webTreeSitterWasm,
111
+ });
112
+ this.parser = new module.Parser();
113
+ })();
114
+ return this.initPromise;
115
+ }
116
+ static async findWasmBasePath() {
117
+ const { fileURLToPath } = await import('url');
118
+ const possiblePaths = [
119
+ path.join(process.cwd(), 'node_modules', '@vscode', 'tree-sitter-wasm', 'wasm'),
120
+ path.join(fileURLToPath(import.meta.url), '..', '..', '..', 'node_modules', '@vscode', 'tree-sitter-wasm', 'wasm'),
121
+ ];
122
+ for (const p of possiblePaths) {
123
+ try {
124
+ await fs.access(p);
125
+ return p;
126
+ }
127
+ catch {
128
+ // Try next path
129
+ }
130
+ }
131
+ throw new Error('Could not find @vscode/tree-sitter-wasm package. Please install it with: npm install @vscode/tree-sitter-wasm');
132
+ }
133
+ static getLanguageConfig(filepath) {
134
+ const ext = path.extname(filepath).toLowerCase();
135
+ for (const [, config] of Object.entries(LANGUAGE_CONFIGS)) {
136
+ if (config.extensions.includes(ext)) {
137
+ return config;
138
+ }
139
+ }
140
+ return null;
141
+ }
142
+ static async loadLanguage(config) {
143
+ const cached = this.loadedLanguages.get(config.wasmFile);
144
+ if (cached) {
145
+ return cached;
146
+ }
147
+ if (!this.wasmBasePath) {
148
+ throw new Error('SymbolExtractor not initialized.');
149
+ }
150
+ const module = await loadParserModule();
151
+ const wasmPath = path.join(this.wasmBasePath, config.wasmFile);
152
+ const wasmBytes = await fs.readFile(wasmPath);
153
+ const language = await module.Language.load(wasmBytes);
154
+ this.loadedLanguages.set(config.wasmFile, language);
155
+ return language;
156
+ }
157
+ /**
158
+ * Check if a file can be analyzed for symbols.
159
+ */
160
+ static canAnalyze(filepath) {
161
+ const ext = path.extname(filepath).toLowerCase();
162
+ // TypeScript/JavaScript via TS compiler
163
+ if (['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts', '.mjs', '.cjs'].includes(ext)) {
164
+ return true;
165
+ }
166
+ // Other languages via tree-sitter
167
+ return this.getLanguageConfig(filepath) !== null;
168
+ }
169
+ /**
170
+ * Extract all symbols from a file.
171
+ */
172
+ async extractSymbols(filepath, includeBody = false) {
173
+ const fullPath = path.isAbsolute(filepath) ? filepath : path.join(this.projectPath, filepath);
174
+ const relativePath = path.isAbsolute(filepath)
175
+ ? path.relative(this.projectPath, filepath)
176
+ : filepath;
177
+ const ext = path.extname(fullPath).toLowerCase();
178
+ // Use TypeScript compiler for TS/JS files
179
+ if (['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts', '.mjs', '.cjs'].includes(ext)) {
180
+ return this.extractSymbolsWithTypeScript(fullPath, relativePath, includeBody);
181
+ }
182
+ // Use tree-sitter for other languages
183
+ const config = SymbolExtractor.getLanguageConfig(fullPath);
184
+ if (config) {
185
+ return this.extractSymbolsWithTreeSitter(fullPath, relativePath, config, includeBody);
186
+ }
187
+ throw new Error(`Unsupported file type: ${filepath}`);
188
+ }
189
+ /**
190
+ * Get symbols overview for a file.
191
+ */
192
+ async getSymbolsOverview(filepath, depth = 0) {
193
+ const symbols = await this.extractSymbols(filepath, false);
194
+ const relativePath = path.isAbsolute(filepath)
195
+ ? path.relative(this.projectPath, filepath)
196
+ : filepath;
197
+ // Group by kind
198
+ const byKind = {};
199
+ const processSymbol = (symbol, currentDepth) => {
200
+ const kindName = SymbolKindNames[symbol.kind];
201
+ if (!byKind[kindName]) {
202
+ byKind[kindName] = [];
203
+ }
204
+ byKind[kindName].push({
205
+ name: symbol.name,
206
+ namePath: formatNamePath(symbol.namePath),
207
+ lines: `${symbol.location.startLine}-${symbol.location.endLine}`,
208
+ children: symbol.children?.length,
209
+ });
210
+ // Process children up to requested depth
211
+ if (currentDepth < depth && symbol.children) {
212
+ for (const child of symbol.children) {
213
+ processSymbol(child, currentDepth + 1);
214
+ }
215
+ }
216
+ };
217
+ for (const symbol of symbols) {
218
+ processSymbol(symbol, 0);
219
+ }
220
+ return {
221
+ filepath: relativePath,
222
+ byKind,
223
+ totalSymbols: this.countSymbols(symbols, depth),
224
+ };
225
+ }
226
+ countSymbols(symbols, depth, currentDepth = 0) {
227
+ let count = symbols.length;
228
+ if (currentDepth < depth) {
229
+ for (const symbol of symbols) {
230
+ if (symbol.children) {
231
+ count += this.countSymbols(symbol.children, depth, currentDepth + 1);
232
+ }
233
+ }
234
+ }
235
+ return count;
236
+ }
237
+ /**
238
+ * Extract symbols using TypeScript compiler.
239
+ */
240
+ async extractSymbolsWithTypeScript(fullPath, relativePath, includeBody) {
241
+ const content = await fs.readFile(fullPath, 'utf-8');
242
+ const ext = path.extname(fullPath).toLowerCase();
243
+ let scriptKind = ts.ScriptKind.TS;
244
+ if (ext === '.tsx' || ext === '.jsx') {
245
+ scriptKind = ts.ScriptKind.TSX;
246
+ }
247
+ else if (['.js', '.mjs', '.cjs'].includes(ext)) {
248
+ scriptKind = ts.ScriptKind.JS;
249
+ }
250
+ const sourceFile = ts.createSourceFile(fullPath, content, ts.ScriptTarget.Latest, true, scriptKind);
251
+ const lines = content.split('\n');
252
+ const symbols = [];
253
+ const processNode = (node, parentPath, parentDepth) => {
254
+ // Skip import/export declarations
255
+ if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) {
256
+ return;
257
+ }
258
+ const symbol = this.nodeToSymbol(node, sourceFile, lines, relativePath, parentPath, parentDepth, includeBody);
259
+ if (symbol) {
260
+ symbols.push(symbol);
261
+ // Process children for classes
262
+ if (ts.isClassDeclaration(node)) {
263
+ const children = [];
264
+ node.members.forEach((member) => {
265
+ const childSymbol = this.memberToSymbol(member, sourceFile, lines, relativePath, symbol.namePath, symbol.depth + 1, includeBody);
266
+ if (childSymbol) {
267
+ children.push(childSymbol);
268
+ }
269
+ });
270
+ if (children.length > 0) {
271
+ symbol.children = children;
272
+ }
273
+ }
274
+ }
275
+ else {
276
+ // Process children for non-symbol nodes
277
+ ts.forEachChild(node, (child) => processNode(child, parentPath, parentDepth));
278
+ }
279
+ };
280
+ ts.forEachChild(sourceFile, (node) => processNode(node, undefined, 0));
281
+ return symbols;
282
+ }
283
+ nodeToSymbol(node, sourceFile, lines, relativePath, parentPath, depth, includeBody) {
284
+ const fullStart = node.getFullStart();
285
+ const startLine = sourceFile.getLineAndCharacterOfPosition(fullStart).line + 1;
286
+ const endLine = sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1;
287
+ const startChar = sourceFile.getLineAndCharacterOfPosition(node.getStart()).character;
288
+ const endChar = sourceFile.getLineAndCharacterOfPosition(node.getEnd()).character;
289
+ let name;
290
+ let kind;
291
+ if (ts.isFunctionDeclaration(node) && node.name) {
292
+ name = node.name.getText(sourceFile);
293
+ kind = SymbolKind.Function;
294
+ }
295
+ else if (ts.isClassDeclaration(node) && node.name) {
296
+ name = node.name.getText(sourceFile);
297
+ kind = SymbolKind.Class;
298
+ }
299
+ else if (ts.isInterfaceDeclaration(node)) {
300
+ name = node.name.getText(sourceFile);
301
+ kind = SymbolKind.Interface;
302
+ }
303
+ else if (ts.isTypeAliasDeclaration(node)) {
304
+ name = node.name.getText(sourceFile);
305
+ kind = SymbolKind.TypeParameter;
306
+ }
307
+ else if (ts.isEnumDeclaration(node)) {
308
+ name = node.name.getText(sourceFile);
309
+ kind = SymbolKind.Enum;
310
+ }
311
+ else if (ts.isVariableStatement(node)) {
312
+ const declarations = node.declarationList.declarations;
313
+ if (declarations.length > 0 && ts.isIdentifier(declarations[0].name)) {
314
+ name = declarations[0].name.getText(sourceFile);
315
+ kind =
316
+ ts.getCombinedModifierFlags(declarations[0]) & ts.ModifierFlags.Const
317
+ ? SymbolKind.Constant
318
+ : SymbolKind.Variable;
319
+ }
320
+ else {
321
+ return null;
322
+ }
323
+ }
324
+ else {
325
+ return null;
326
+ }
327
+ if (!name) {
328
+ return null;
329
+ }
330
+ const namePath = buildNamePath(parentPath, name);
331
+ const location = {
332
+ filepath: relativePath,
333
+ startLine,
334
+ endLine,
335
+ startColumn: startChar,
336
+ endColumn: endChar,
337
+ };
338
+ const symbol = {
339
+ name,
340
+ namePath,
341
+ kind,
342
+ location,
343
+ depth,
344
+ parentNamePath: parentPath,
345
+ };
346
+ if (includeBody) {
347
+ symbol.body = lines.slice(startLine - 1, endLine).join('\n');
348
+ }
349
+ return symbol;
350
+ }
351
+ memberToSymbol(member, sourceFile, lines, relativePath, parentPath, depth, includeBody) {
352
+ const fullStart = member.getFullStart();
353
+ const startLine = sourceFile.getLineAndCharacterOfPosition(fullStart).line + 1;
354
+ const endLine = sourceFile.getLineAndCharacterOfPosition(member.getEnd()).line + 1;
355
+ const startChar = sourceFile.getLineAndCharacterOfPosition(member.getStart()).character;
356
+ const endChar = sourceFile.getLineAndCharacterOfPosition(member.getEnd()).character;
357
+ let name;
358
+ let kind;
359
+ if (ts.isMethodDeclaration(member) ||
360
+ ts.isGetAccessorDeclaration(member) ||
361
+ ts.isSetAccessorDeclaration(member)) {
362
+ name = member.name?.getText(sourceFile);
363
+ kind = SymbolKind.Method;
364
+ }
365
+ else if (ts.isConstructorDeclaration(member)) {
366
+ name = 'constructor';
367
+ kind = SymbolKind.Constructor;
368
+ }
369
+ else if (ts.isPropertyDeclaration(member)) {
370
+ name = member.name?.getText(sourceFile);
371
+ kind = SymbolKind.Property;
372
+ }
373
+ else {
374
+ return null;
375
+ }
376
+ if (!name) {
377
+ return null;
378
+ }
379
+ const namePath = buildNamePath(parentPath, name);
380
+ const location = {
381
+ filepath: relativePath,
382
+ startLine,
383
+ endLine,
384
+ startColumn: startChar,
385
+ endColumn: endChar,
386
+ };
387
+ const symbol = {
388
+ name,
389
+ namePath,
390
+ kind,
391
+ location,
392
+ depth,
393
+ parentNamePath: parentPath,
394
+ };
395
+ if (includeBody) {
396
+ symbol.body = lines.slice(startLine - 1, endLine).join('\n');
397
+ }
398
+ return symbol;
399
+ }
400
+ /**
401
+ * Extract symbols using tree-sitter.
402
+ */
403
+ async extractSymbolsWithTreeSitter(fullPath, relativePath, config, includeBody) {
404
+ await SymbolExtractor.initialize();
405
+ const language = await SymbolExtractor.loadLanguage(config);
406
+ const parser = SymbolExtractor.parser;
407
+ if (!parser) {
408
+ throw new Error('SymbolExtractor parser not initialized');
409
+ }
410
+ parser.setLanguage(language);
411
+ const content = await fs.readFile(fullPath, 'utf-8');
412
+ const tree = parser.parse(content);
413
+ if (!tree) {
414
+ throw new Error(`Failed to parse file: ${fullPath}`);
415
+ }
416
+ const lines = content.split('\n');
417
+ const symbols = [];
418
+ this.processTreeSitterNode(tree.rootNode, config, lines, relativePath, undefined, 0, symbols, includeBody);
419
+ return symbols;
420
+ }
421
+ processTreeSitterNode(node, config, lines, relativePath, parentPath, depth, symbols, includeBody, parentClassName) {
422
+ // Check for classes
423
+ if (config.classTypes.includes(node.type)) {
424
+ const name = this.getTreeSitterNodeName(node) || 'AnonymousClass';
425
+ const namePath = buildNamePath(parentPath, name);
426
+ const symbol = {
427
+ name,
428
+ namePath,
429
+ kind: SymbolKind.Class,
430
+ location: {
431
+ filepath: relativePath,
432
+ startLine: node.startPosition.row + 1,
433
+ endLine: node.endPosition.row + 1,
434
+ startColumn: node.startPosition.column,
435
+ endColumn: node.endPosition.column,
436
+ },
437
+ depth,
438
+ parentNamePath: parentPath,
439
+ children: [],
440
+ };
441
+ if (includeBody) {
442
+ symbol.body = lines.slice(node.startPosition.row, node.endPosition.row + 1).join('\n');
443
+ }
444
+ // Process class children
445
+ const symbolChildren = symbol.children || [];
446
+ for (const child of node.children) {
447
+ this.processTreeSitterNode(child, config, lines, relativePath, namePath, depth + 1, symbolChildren, includeBody, name);
448
+ }
449
+ if (symbolChildren.length === 0) {
450
+ delete symbol.children;
451
+ }
452
+ else {
453
+ symbol.children = symbolChildren;
454
+ }
455
+ symbols.push(symbol);
456
+ return;
457
+ }
458
+ // Check for functions (top-level)
459
+ if (config.functionTypes.includes(node.type) && !parentClassName) {
460
+ const name = this.getTreeSitterNodeName(node);
461
+ if (name) {
462
+ const namePath = buildNamePath(parentPath, name);
463
+ const symbol = {
464
+ name,
465
+ namePath,
466
+ kind: SymbolKind.Function,
467
+ location: {
468
+ filepath: relativePath,
469
+ startLine: node.startPosition.row + 1,
470
+ endLine: node.endPosition.row + 1,
471
+ startColumn: node.startPosition.column,
472
+ endColumn: node.endPosition.column,
473
+ },
474
+ depth,
475
+ parentNamePath: parentPath,
476
+ };
477
+ if (includeBody) {
478
+ symbol.body = lines.slice(node.startPosition.row, node.endPosition.row + 1).join('\n');
479
+ }
480
+ symbols.push(symbol);
481
+ return;
482
+ }
483
+ }
484
+ // Check for methods (inside class)
485
+ if (config.methodTypes.includes(node.type) && parentClassName) {
486
+ const name = this.getTreeSitterNodeName(node);
487
+ if (name) {
488
+ const namePath = buildNamePath(parentPath, name);
489
+ // Determine if constructor
490
+ const isConstructor = config.constructorTypes.includes(node.type) ||
491
+ name === '__init__' ||
492
+ name === 'initialize' ||
493
+ name === 'constructor';
494
+ const symbol = {
495
+ name,
496
+ namePath,
497
+ kind: isConstructor ? SymbolKind.Constructor : SymbolKind.Method,
498
+ location: {
499
+ filepath: relativePath,
500
+ startLine: node.startPosition.row + 1,
501
+ endLine: node.endPosition.row + 1,
502
+ startColumn: node.startPosition.column,
503
+ endColumn: node.endPosition.column,
504
+ },
505
+ depth,
506
+ parentNamePath: parentPath,
507
+ };
508
+ if (includeBody) {
509
+ symbol.body = lines.slice(node.startPosition.row, node.endPosition.row + 1).join('\n');
510
+ }
511
+ symbols.push(symbol);
512
+ return;
513
+ }
514
+ }
515
+ // Check for interfaces/traits
516
+ if (config.interfaceTypes.includes(node.type)) {
517
+ const name = this.getTreeSitterNodeName(node);
518
+ if (name) {
519
+ const namePath = buildNamePath(parentPath, name);
520
+ const symbol = {
521
+ name,
522
+ namePath,
523
+ kind: SymbolKind.Interface,
524
+ location: {
525
+ filepath: relativePath,
526
+ startLine: node.startPosition.row + 1,
527
+ endLine: node.endPosition.row + 1,
528
+ startColumn: node.startPosition.column,
529
+ endColumn: node.endPosition.column,
530
+ },
531
+ depth,
532
+ parentNamePath: parentPath,
533
+ };
534
+ if (includeBody) {
535
+ symbol.body = lines.slice(node.startPosition.row, node.endPosition.row + 1).join('\n');
536
+ }
537
+ symbols.push(symbol);
538
+ return;
539
+ }
540
+ }
541
+ // Check for top-level variables
542
+ if (config.variableTypes.includes(node.type) &&
543
+ (node.parent?.type === 'source_file' || node.parent?.type === 'program')) {
544
+ const name = this.getTreeSitterNodeName(node);
545
+ if (name) {
546
+ const namePath = buildNamePath(parentPath, name);
547
+ const symbol = {
548
+ name,
549
+ namePath,
550
+ kind: SymbolKind.Variable,
551
+ location: {
552
+ filepath: relativePath,
553
+ startLine: node.startPosition.row + 1,
554
+ endLine: node.endPosition.row + 1,
555
+ startColumn: node.startPosition.column,
556
+ endColumn: node.endPosition.column,
557
+ },
558
+ depth,
559
+ parentNamePath: parentPath,
560
+ };
561
+ if (includeBody) {
562
+ symbol.body = lines.slice(node.startPosition.row, node.endPosition.row + 1).join('\n');
563
+ }
564
+ symbols.push(symbol);
565
+ return;
566
+ }
567
+ }
568
+ // Recurse into children for other node types
569
+ for (const child of node.children) {
570
+ this.processTreeSitterNode(child, config, lines, relativePath, parentPath, depth, symbols, includeBody, parentClassName);
571
+ }
572
+ }
573
+ getTreeSitterNodeName(node) {
574
+ // Look for name/identifier child
575
+ for (const child of node.children) {
576
+ if (child.type === 'identifier' ||
577
+ child.type === 'name' ||
578
+ child.type === 'type_identifier') {
579
+ return child.text;
580
+ }
581
+ if (child.type === 'decorated_definition') {
582
+ return this.getTreeSitterNodeName(child);
583
+ }
584
+ }
585
+ const firstNamedChild = node.firstNamedChild;
586
+ if (firstNamedChild &&
587
+ (firstNamedChild.type === 'identifier' || firstNamedChild.type === 'name')) {
588
+ return firstNamedChild.text;
589
+ }
590
+ return undefined;
591
+ }
592
+ }
593
+ //# sourceMappingURL=symbol-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-extractor.js","sourceRoot":"","sources":["../../src/symbols/symbol-extractor.ts"],"names":[],"mappings":"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"}