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,261 @@
1
+ import * as ts from 'typescript';
2
+ import * as fs from 'fs/promises';
3
+ import * as path from 'path';
4
+ const MAX_CHUNK_LINES = 150;
5
+ const MIN_CHUNK_LINES = 10;
6
+ /**
7
+ * AST-aware code chunker for TypeScript and JavaScript files.
8
+ * Chunks code by logical units (functions, classes, etc.) rather than arbitrary line counts.
9
+ */
10
+ export class ASTChunker {
11
+ /**
12
+ * Check if a file can be parsed with AST chunking
13
+ */
14
+ static canParse(filepath) {
15
+ const ext = path.extname(filepath).toLowerCase();
16
+ return ['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts', '.mjs', '.cjs'].includes(ext);
17
+ }
18
+ /**
19
+ * Parse a file and return AST-aware chunks
20
+ */
21
+ async chunkFile(filepath) {
22
+ const content = await fs.readFile(filepath, 'utf-8');
23
+ const ext = path.extname(filepath).toLowerCase();
24
+ // Determine script kind
25
+ let scriptKind = ts.ScriptKind.TS;
26
+ if (ext === '.tsx' || ext === '.jsx') {
27
+ scriptKind = ts.ScriptKind.TSX;
28
+ }
29
+ else if (ext === '.js' || ext === '.mjs' || ext === '.cjs') {
30
+ scriptKind = ts.ScriptKind.JS;
31
+ }
32
+ // Parse the file
33
+ const sourceFile = ts.createSourceFile(filepath, content, ts.ScriptTarget.Latest, true, scriptKind);
34
+ const chunks = [];
35
+ const lines = content.split('\n');
36
+ // Collect imports as a single chunk
37
+ const imports = [];
38
+ // Process top-level statements
39
+ ts.forEachChild(sourceFile, (node) => {
40
+ if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) {
41
+ imports.push(node);
42
+ return;
43
+ }
44
+ const nodeChunks = this.extractChunks(node, sourceFile, lines);
45
+ chunks.push(...nodeChunks);
46
+ });
47
+ // Add imports as the first chunk if present
48
+ if (imports.length > 0) {
49
+ const firstImport = imports[0];
50
+ const lastImport = imports[imports.length - 1];
51
+ const startLine = sourceFile.getLineAndCharacterOfPosition(firstImport.getStart(sourceFile)).line;
52
+ const endLine = sourceFile.getLineAndCharacterOfPosition(lastImport.getEnd()).line;
53
+ chunks.unshift({
54
+ content: lines.slice(startLine, endLine + 1).join('\n'),
55
+ startLine: startLine + 1,
56
+ endLine: endLine + 1,
57
+ type: 'import',
58
+ name: 'imports',
59
+ });
60
+ }
61
+ // Sort chunks by start line
62
+ chunks.sort((a, b) => a.startLine - b.startLine);
63
+ // Split any chunks that are too large
64
+ const finalChunks = [];
65
+ for (const chunk of chunks) {
66
+ if (chunk.endLine - chunk.startLine + 1 > MAX_CHUNK_LINES) {
67
+ const splitChunks = this.splitLargeChunk(chunk, lines);
68
+ finalChunks.push(...splitChunks);
69
+ }
70
+ else {
71
+ finalChunks.push(chunk);
72
+ }
73
+ }
74
+ return finalChunks;
75
+ }
76
+ /**
77
+ * Extract chunks from a node
78
+ */
79
+ extractChunks(node, sourceFile, lines) {
80
+ const chunks = [];
81
+ const endLine = sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line;
82
+ // Get leading comments/decorators
83
+ const fullStart = node.getFullStart();
84
+ const actualStartLine = sourceFile.getLineAndCharacterOfPosition(fullStart).line;
85
+ if (ts.isFunctionDeclaration(node)) {
86
+ chunks.push({
87
+ content: lines.slice(actualStartLine, endLine + 1).join('\n'),
88
+ startLine: actualStartLine + 1,
89
+ endLine: endLine + 1,
90
+ type: 'function',
91
+ name: node.name?.getText(sourceFile),
92
+ });
93
+ }
94
+ else if (ts.isClassDeclaration(node)) {
95
+ // For classes, we have options:
96
+ // 1. Keep the whole class together if it's small enough
97
+ // 2. Split into class header + individual methods if too large
98
+ const classLines = endLine - actualStartLine + 1;
99
+ if (classLines <= MAX_CHUNK_LINES) {
100
+ // Keep class together
101
+ chunks.push({
102
+ content: lines.slice(actualStartLine, endLine + 1).join('\n'),
103
+ startLine: actualStartLine + 1,
104
+ endLine: endLine + 1,
105
+ type: 'class',
106
+ name: node.name?.getText(sourceFile),
107
+ });
108
+ }
109
+ else {
110
+ // Split class into methods
111
+ const className = node.name?.getText(sourceFile) || 'AnonymousClass';
112
+ // Get class header (decorators + class declaration up to first member)
113
+ const members = node.members;
114
+ if (members.length > 0) {
115
+ const firstMemberStart = sourceFile.getLineAndCharacterOfPosition(members[0].getFullStart()).line;
116
+ // Class header chunk
117
+ if (firstMemberStart > actualStartLine) {
118
+ chunks.push({
119
+ content: lines.slice(actualStartLine, firstMemberStart).join('\n'),
120
+ startLine: actualStartLine + 1,
121
+ endLine: firstMemberStart,
122
+ type: 'class',
123
+ name: `${className} (header)`,
124
+ });
125
+ }
126
+ // Individual method chunks
127
+ for (const member of members) {
128
+ const memberChunks = this.extractMemberChunk(member, sourceFile, lines, className);
129
+ chunks.push(...memberChunks);
130
+ }
131
+ }
132
+ else {
133
+ // Empty class
134
+ chunks.push({
135
+ content: lines.slice(actualStartLine, endLine + 1).join('\n'),
136
+ startLine: actualStartLine + 1,
137
+ endLine: endLine + 1,
138
+ type: 'class',
139
+ name: className,
140
+ });
141
+ }
142
+ }
143
+ }
144
+ else if (ts.isInterfaceDeclaration(node)) {
145
+ chunks.push({
146
+ content: lines.slice(actualStartLine, endLine + 1).join('\n'),
147
+ startLine: actualStartLine + 1,
148
+ endLine: endLine + 1,
149
+ type: 'interface',
150
+ name: node.name.getText(sourceFile),
151
+ });
152
+ }
153
+ else if (ts.isTypeAliasDeclaration(node)) {
154
+ chunks.push({
155
+ content: lines.slice(actualStartLine, endLine + 1).join('\n'),
156
+ startLine: actualStartLine + 1,
157
+ endLine: endLine + 1,
158
+ type: 'type',
159
+ name: node.name.getText(sourceFile),
160
+ });
161
+ }
162
+ else if (ts.isVariableStatement(node)) {
163
+ const declarations = node.declarationList.declarations;
164
+ const names = declarations
165
+ .map((d) => (ts.isIdentifier(d.name) ? d.name.getText(sourceFile) : undefined))
166
+ .filter(Boolean)
167
+ .join(', ');
168
+ chunks.push({
169
+ content: lines.slice(actualStartLine, endLine + 1).join('\n'),
170
+ startLine: actualStartLine + 1,
171
+ endLine: endLine + 1,
172
+ type: 'variable',
173
+ name: names || undefined,
174
+ });
175
+ }
176
+ else if (ts.isExpressionStatement(node) || ts.isExportAssignment(node)) {
177
+ chunks.push({
178
+ content: lines.slice(actualStartLine, endLine + 1).join('\n'),
179
+ startLine: actualStartLine + 1,
180
+ endLine: endLine + 1,
181
+ type: 'other',
182
+ });
183
+ }
184
+ else if (ts.isEnumDeclaration(node)) {
185
+ chunks.push({
186
+ content: lines.slice(actualStartLine, endLine + 1).join('\n'),
187
+ startLine: actualStartLine + 1,
188
+ endLine: endLine + 1,
189
+ type: 'other',
190
+ name: node.name.getText(sourceFile),
191
+ });
192
+ }
193
+ return chunks;
194
+ }
195
+ /**
196
+ * Extract a chunk for a class member
197
+ */
198
+ extractMemberChunk(member, sourceFile, lines, className) {
199
+ const fullStart = member.getFullStart();
200
+ const startLine = sourceFile.getLineAndCharacterOfPosition(fullStart).line;
201
+ const endLine = sourceFile.getLineAndCharacterOfPosition(member.getEnd()).line;
202
+ let name;
203
+ let type = 'other';
204
+ if (ts.isMethodDeclaration(member) ||
205
+ ts.isGetAccessorDeclaration(member) ||
206
+ ts.isSetAccessorDeclaration(member)) {
207
+ type = 'method';
208
+ name = `${className}.${member.name?.getText(sourceFile) || 'anonymous'}`;
209
+ }
210
+ else if (ts.isConstructorDeclaration(member)) {
211
+ type = 'method';
212
+ name = `${className}.constructor`;
213
+ }
214
+ else if (ts.isPropertyDeclaration(member)) {
215
+ type = 'variable';
216
+ name = `${className}.${member.name?.getText(sourceFile) || 'property'}`;
217
+ }
218
+ return [
219
+ {
220
+ content: lines.slice(startLine, endLine + 1).join('\n'),
221
+ startLine: startLine + 1,
222
+ endLine: endLine + 1,
223
+ type,
224
+ name,
225
+ },
226
+ ];
227
+ }
228
+ /**
229
+ * Split a large chunk into smaller pieces
230
+ */
231
+ splitLargeChunk(chunk, _allLines) {
232
+ const chunkLines = chunk.content.split('\n');
233
+ const totalLines = chunkLines.length;
234
+ const chunks = [];
235
+ // Split into roughly equal parts, each under MAX_CHUNK_LINES
236
+ const numParts = Math.ceil(totalLines / MAX_CHUNK_LINES);
237
+ const linesPerPart = Math.ceil(totalLines / numParts);
238
+ for (let i = 0; i < numParts; i++) {
239
+ const startIdx = i * linesPerPart;
240
+ const endIdx = Math.min((i + 1) * linesPerPart, totalLines);
241
+ const partLines = chunkLines.slice(startIdx, endIdx);
242
+ if (partLines.length < MIN_CHUNK_LINES && chunks.length > 0) {
243
+ // Merge with previous chunk if too small
244
+ const lastChunk = chunks[chunks.length - 1];
245
+ lastChunk.content += '\n' + partLines.join('\n');
246
+ lastChunk.endLine = chunk.startLine + endIdx - 1;
247
+ }
248
+ else {
249
+ chunks.push({
250
+ content: partLines.join('\n'),
251
+ startLine: chunk.startLine + startIdx,
252
+ endLine: chunk.startLine + endIdx - 1,
253
+ type: chunk.type,
254
+ name: chunk.name ? `${chunk.name} (part ${i + 1})` : undefined,
255
+ });
256
+ }
257
+ }
258
+ return chunks;
259
+ }
260
+ }
261
+ //# sourceMappingURL=ast-chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-chunker.js","sourceRoot":"","sources":["../../src/search/ast-chunker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * K-means clustering for semantic code grouping.
3
+ * Groups code chunks by similarity to discover concept areas in the codebase.
4
+ */
5
+ /**
6
+ * Represents a discovered concept cluster
7
+ */
8
+ export interface ConceptCluster {
9
+ /** Unique cluster identifier (0-indexed) */
10
+ id: number;
11
+ /** Human-readable label derived from representative chunks */
12
+ label: string;
13
+ /** Number of code chunks in this cluster */
14
+ size: number;
15
+ /** Representative chunk IDs for this cluster */
16
+ representativeChunks: string[];
17
+ /** Centroid vector for this cluster */
18
+ centroid: number[];
19
+ /** Keywords extracted from representative chunks */
20
+ keywords: string[];
21
+ }
22
+ /**
23
+ * Result of clustering operation
24
+ */
25
+ export interface ClusteringResult {
26
+ /** Total number of clusters created */
27
+ clusterCount: number;
28
+ /** All discovered concept clusters */
29
+ clusters: ConceptCluster[];
30
+ /** Mapping from chunk ID to cluster ID */
31
+ assignments: Map<string, number>;
32
+ }
33
+ /**
34
+ * Options for clustering operation
35
+ */
36
+ export interface ClusteringOptions {
37
+ /** Target number of clusters (default: auto-determined based on chunk count) */
38
+ numClusters?: number;
39
+ /** Maximum iterations for k-means (default: 100) */
40
+ maxIterations?: number;
41
+ /** Convergence threshold (default: 0.001) */
42
+ convergenceThreshold?: number;
43
+ /** Number of representative chunks to store per cluster (default: 3) */
44
+ numRepresentatives?: number;
45
+ }
46
+ /**
47
+ * Chunk data needed for clustering
48
+ */
49
+ export interface ChunkForClustering {
50
+ id: string;
51
+ content: string;
52
+ filepath: string;
53
+ embedding: number[];
54
+ symbolName?: string;
55
+ symbolType?: string;
56
+ }
57
+ /**
58
+ * Calculate cosine similarity between two vectors
59
+ */
60
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
61
+ /**
62
+ * Calculate Euclidean distance between two vectors
63
+ */
64
+ export declare function euclideanDistance(a: number[], b: number[]): number;
65
+ /**
66
+ * Perform k-means clustering on embeddings
67
+ */
68
+ export declare function kMeansClustering(chunks: ChunkForClustering[], options?: ClusteringOptions): ClusteringResult;
69
+ /**
70
+ * Find the cluster ID for a given embedding (nearest centroid)
71
+ */
72
+ export declare function assignToCluster(embedding: number[], clusters: ConceptCluster[]): number;
73
+ /**
74
+ * Calculate silhouette score for clustering quality assessment
75
+ */
76
+ export declare function calculateSilhouetteScore(chunks: ChunkForClustering[], assignments: Map<string, number>, clusters: ConceptCluster[]): number;
77
+ //# sourceMappingURL=clustering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clustering.d.ts","sourceRoot":"","sources":["../../src/search/clustering.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,uCAAuC;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,0CAA0C;IAC1C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAuBjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAYlE;AAwED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,kBAAkB,EAAE,EAC5B,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB,CAqLlB;AA4JD;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,CAavF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,EAAE,EAC5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,QAAQ,EAAE,cAAc,EAAE,GACzB,MAAM,CA6DR"}