codexia 0.2.1 → 0.3.0

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 (197) hide show
  1. package/CHANGELOG.md +55 -51
  2. package/README.md +67 -0
  3. package/dist/ai/config.d.ts +11 -0
  4. package/dist/ai/config.d.ts.map +1 -0
  5. package/dist/ai/config.js +51 -0
  6. package/dist/ai/config.js.map +1 -0
  7. package/dist/ai/explainer.d.ts +32 -0
  8. package/dist/ai/explainer.d.ts.map +1 -0
  9. package/dist/ai/explainer.js +118 -0
  10. package/dist/ai/explainer.js.map +1 -0
  11. package/dist/ai/index.d.ts +23 -0
  12. package/dist/ai/index.d.ts.map +1 -0
  13. package/dist/ai/index.js +47 -0
  14. package/dist/ai/index.js.map +1 -0
  15. package/dist/ai/prompts/impact-explain.d.ts +6 -0
  16. package/dist/ai/prompts/impact-explain.d.ts.map +1 -0
  17. package/dist/ai/prompts/impact-explain.js +50 -0
  18. package/dist/ai/prompts/impact-explain.js.map +1 -0
  19. package/dist/ai/prompts/pr-describe.d.ts +13 -0
  20. package/dist/ai/prompts/pr-describe.d.ts.map +1 -0
  21. package/dist/ai/prompts/pr-describe.js +65 -0
  22. package/dist/ai/prompts/pr-describe.js.map +1 -0
  23. package/dist/ai/prompts/pr-review.d.ts +18 -0
  24. package/dist/ai/prompts/pr-review.d.ts.map +1 -0
  25. package/dist/ai/prompts/pr-review.js +61 -0
  26. package/dist/ai/prompts/pr-review.js.map +1 -0
  27. package/dist/ai/provider.d.ts +6 -0
  28. package/dist/ai/provider.d.ts.map +1 -0
  29. package/dist/ai/provider.js +19 -0
  30. package/dist/ai/provider.js.map +1 -0
  31. package/dist/ai/providers/anthropic.d.ts +14 -0
  32. package/dist/ai/providers/anthropic.d.ts.map +1 -0
  33. package/dist/ai/providers/anthropic.js +53 -0
  34. package/dist/ai/providers/anthropic.js.map +1 -0
  35. package/dist/ai/providers/ollama.d.ts +13 -0
  36. package/dist/ai/providers/ollama.d.ts.map +1 -0
  37. package/dist/ai/providers/ollama.js +64 -0
  38. package/dist/ai/providers/ollama.js.map +1 -0
  39. package/dist/ai/providers/openai.d.ts +14 -0
  40. package/dist/ai/providers/openai.d.ts.map +1 -0
  41. package/dist/ai/providers/openai.js +42 -0
  42. package/dist/ai/providers/openai.js.map +1 -0
  43. package/dist/ai/types.d.ts +29 -0
  44. package/dist/ai/types.d.ts.map +1 -0
  45. package/dist/ai/types.js +5 -0
  46. package/dist/ai/types.js.map +1 -0
  47. package/dist/cli/commands/dashboard.d.ts +3 -0
  48. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  49. package/dist/cli/commands/dashboard.js +30 -0
  50. package/dist/cli/commands/dashboard.js.map +1 -0
  51. package/dist/cli/commands/graph.js +1 -1
  52. package/dist/cli/commands/graph.js.map +1 -1
  53. package/dist/cli/commands/impact.d.ts.map +1 -1
  54. package/dist/cli/commands/impact.js +23 -0
  55. package/dist/cli/commands/impact.js.map +1 -1
  56. package/dist/cli/commands/pr-report.d.ts.map +1 -1
  57. package/dist/cli/commands/pr-report.js +49 -0
  58. package/dist/cli/commands/pr-report.js.map +1 -1
  59. package/dist/cli/engine.d.ts +65 -2
  60. package/dist/cli/engine.d.ts.map +1 -1
  61. package/dist/cli/engine.js +136 -2
  62. package/dist/cli/engine.js.map +1 -1
  63. package/dist/cli/index.js +2 -0
  64. package/dist/cli/index.js.map +1 -1
  65. package/dist/cli/interactive.js +1 -1
  66. package/dist/cli/interactive.js.map +1 -1
  67. package/dist/core/dependency-graph.d.ts +3 -1
  68. package/dist/core/dependency-graph.d.ts.map +1 -1
  69. package/dist/core/dependency-graph.js +20 -7
  70. package/dist/core/dependency-graph.js.map +1 -1
  71. package/dist/core/language-providers/index.d.ts +9 -0
  72. package/dist/core/language-providers/index.d.ts.map +1 -0
  73. package/dist/core/language-providers/index.js +12 -0
  74. package/dist/core/language-providers/index.js.map +1 -0
  75. package/dist/core/language-providers/providers/go.d.ts +20 -0
  76. package/dist/core/language-providers/providers/go.d.ts.map +1 -0
  77. package/dist/core/language-providers/providers/go.js +256 -0
  78. package/dist/core/language-providers/providers/go.js.map +1 -0
  79. package/dist/core/language-providers/providers/java.d.ts +20 -0
  80. package/dist/core/language-providers/providers/java.d.ts.map +1 -0
  81. package/dist/core/language-providers/providers/java.js +234 -0
  82. package/dist/core/language-providers/providers/java.js.map +1 -0
  83. package/dist/core/language-providers/providers/python.d.ts +20 -0
  84. package/dist/core/language-providers/providers/python.d.ts.map +1 -0
  85. package/dist/core/language-providers/providers/python.js +267 -0
  86. package/dist/core/language-providers/providers/python.js.map +1 -0
  87. package/dist/core/language-providers/providers/ruby.d.ts +20 -0
  88. package/dist/core/language-providers/providers/ruby.d.ts.map +1 -0
  89. package/dist/core/language-providers/providers/ruby.js +281 -0
  90. package/dist/core/language-providers/providers/ruby.js.map +1 -0
  91. package/dist/core/language-providers/providers/rust.d.ts +20 -0
  92. package/dist/core/language-providers/providers/rust.d.ts.map +1 -0
  93. package/dist/core/language-providers/providers/rust.js +384 -0
  94. package/dist/core/language-providers/providers/rust.js.map +1 -0
  95. package/dist/core/language-providers/providers/typescript.d.ts +20 -0
  96. package/dist/core/language-providers/providers/typescript.d.ts.map +1 -0
  97. package/dist/core/language-providers/providers/typescript.js +300 -0
  98. package/dist/core/language-providers/providers/typescript.js.map +1 -0
  99. package/dist/core/language-providers/registry.d.ts +59 -0
  100. package/dist/core/language-providers/registry.d.ts.map +1 -0
  101. package/dist/core/language-providers/registry.js +133 -0
  102. package/dist/core/language-providers/registry.js.map +1 -0
  103. package/dist/core/language-providers/types.d.ts +55 -0
  104. package/dist/core/language-providers/types.d.ts.map +1 -0
  105. package/dist/core/language-providers/types.js +29 -0
  106. package/dist/core/language-providers/types.js.map +1 -0
  107. package/dist/core/repo-indexer.d.ts +10 -4
  108. package/dist/core/repo-indexer.d.ts.map +1 -1
  109. package/dist/core/repo-indexer.js +24 -26
  110. package/dist/core/repo-indexer.js.map +1 -1
  111. package/dist/dashboard/client/src/App.d.ts +3 -0
  112. package/dist/dashboard/client/src/App.d.ts.map +1 -0
  113. package/dist/dashboard/client/src/App.js +127 -0
  114. package/dist/dashboard/client/src/App.js.map +1 -0
  115. package/dist/dashboard/client/src/api.d.ts +9 -0
  116. package/dist/dashboard/client/src/api.d.ts.map +1 -0
  117. package/dist/dashboard/client/src/api.js +30 -0
  118. package/dist/dashboard/client/src/api.js.map +1 -0
  119. package/dist/dashboard/client/src/components/ActivityChart.d.ts +7 -0
  120. package/dist/dashboard/client/src/components/ActivityChart.d.ts.map +1 -0
  121. package/dist/dashboard/client/src/components/ActivityChart.js +76 -0
  122. package/dist/dashboard/client/src/components/ActivityChart.js.map +1 -0
  123. package/dist/dashboard/client/src/components/Card.d.ts +21 -0
  124. package/dist/dashboard/client/src/components/Card.d.ts.map +1 -0
  125. package/dist/dashboard/client/src/components/Card.js +35 -0
  126. package/dist/dashboard/client/src/components/Card.js.map +1 -0
  127. package/dist/dashboard/client/src/components/ComplexityHeatmap.d.ts +7 -0
  128. package/dist/dashboard/client/src/components/ComplexityHeatmap.d.ts.map +1 -0
  129. package/dist/dashboard/client/src/components/ComplexityHeatmap.js +55 -0
  130. package/dist/dashboard/client/src/components/ComplexityHeatmap.js.map +1 -0
  131. package/dist/dashboard/client/src/components/ErrorDisplay.d.ts +7 -0
  132. package/dist/dashboard/client/src/components/ErrorDisplay.d.ts.map +1 -0
  133. package/dist/dashboard/client/src/components/ErrorDisplay.js +14 -0
  134. package/dist/dashboard/client/src/components/ErrorDisplay.js.map +1 -0
  135. package/dist/dashboard/client/src/components/HealthScore.d.ts +7 -0
  136. package/dist/dashboard/client/src/components/HealthScore.d.ts.map +1 -0
  137. package/dist/dashboard/client/src/components/HealthScore.js +66 -0
  138. package/dist/dashboard/client/src/components/HealthScore.js.map +1 -0
  139. package/dist/dashboard/client/src/components/HotPathsList.d.ts +8 -0
  140. package/dist/dashboard/client/src/components/HotPathsList.d.ts.map +1 -0
  141. package/dist/dashboard/client/src/components/HotPathsList.js +59 -0
  142. package/dist/dashboard/client/src/components/HotPathsList.js.map +1 -0
  143. package/dist/dashboard/client/src/components/LanguageBreakdown.d.ts +6 -0
  144. package/dist/dashboard/client/src/components/LanguageBreakdown.d.ts.map +1 -0
  145. package/dist/dashboard/client/src/components/LanguageBreakdown.js +49 -0
  146. package/dist/dashboard/client/src/components/LanguageBreakdown.js.map +1 -0
  147. package/dist/dashboard/client/src/components/Loading.d.ts +4 -0
  148. package/dist/dashboard/client/src/components/Loading.d.ts.map +1 -0
  149. package/dist/dashboard/client/src/components/Loading.js +25 -0
  150. package/dist/dashboard/client/src/components/Loading.js.map +1 -0
  151. package/dist/dashboard/client/src/components/SignalsList.d.ts +8 -0
  152. package/dist/dashboard/client/src/components/SignalsList.d.ts.map +1 -0
  153. package/dist/dashboard/client/src/components/SignalsList.js +70 -0
  154. package/dist/dashboard/client/src/components/SignalsList.js.map +1 -0
  155. package/dist/dashboard/client/src/hooks/useApi.d.ts +9 -0
  156. package/dist/dashboard/client/src/hooks/useApi.d.ts.map +1 -0
  157. package/dist/dashboard/client/src/hooks/useApi.js +19 -0
  158. package/dist/dashboard/client/src/hooks/useApi.js.map +1 -0
  159. package/dist/dashboard/client/src/main.d.ts +2 -0
  160. package/dist/dashboard/client/src/main.d.ts.map +1 -0
  161. package/dist/dashboard/client/src/main.js +8 -0
  162. package/dist/dashboard/client/src/main.js.map +1 -0
  163. package/dist/dashboard/client/src/types.d.ts +85 -0
  164. package/dist/dashboard/client/src/types.d.ts.map +1 -0
  165. package/dist/dashboard/client/src/types.js +2 -0
  166. package/dist/dashboard/client/src/types.js.map +1 -0
  167. package/dist/dashboard/client/vite.config.d.ts +3 -0
  168. package/dist/dashboard/client/vite.config.d.ts.map +1 -0
  169. package/dist/dashboard/client/vite.config.js +24 -0
  170. package/dist/dashboard/client/vite.config.js.map +1 -0
  171. package/dist/dashboard/index.d.ts +3 -0
  172. package/dist/dashboard/index.d.ts.map +1 -0
  173. package/dist/dashboard/index.js +2 -0
  174. package/dist/dashboard/index.js.map +1 -0
  175. package/dist/dashboard/server/index.d.ts +108 -0
  176. package/dist/dashboard/server/index.d.ts.map +1 -0
  177. package/dist/dashboard/server/index.js +740 -0
  178. package/dist/dashboard/server/index.js.map +1 -0
  179. package/dist/index.d.ts +3 -0
  180. package/dist/index.d.ts.map +1 -1
  181. package/dist/index.js +6 -0
  182. package/dist/index.js.map +1 -1
  183. package/dist/mcp/server.js +1 -1
  184. package/dist/mcp/server.js.map +1 -1
  185. package/dist/modules/complexity-engine.d.ts +1 -0
  186. package/dist/modules/complexity-engine.d.ts.map +1 -1
  187. package/dist/modules/complexity-engine.js +26 -18
  188. package/dist/modules/complexity-engine.js.map +1 -1
  189. package/dist/modules/graph-utils.d.ts +7 -2
  190. package/dist/modules/graph-utils.d.ts.map +1 -1
  191. package/dist/modules/graph-utils.js +17 -11
  192. package/dist/modules/graph-utils.js.map +1 -1
  193. package/package.json +7 -3
  194. package/src/dashboard/dist/assets/index-DwKWIJD-.css +1 -0
  195. package/src/dashboard/dist/assets/index-jqRzjhTn.js +226 -0
  196. package/src/dashboard/dist/codexia-icon.svg +10 -0
  197. package/src/dashboard/dist/index.html +17 -0
@@ -0,0 +1,300 @@
1
+ import * as path from 'node:path';
2
+ import { BaseLanguageProvider } from '../types.js';
3
+ /**
4
+ * TypeScript/JavaScript language provider
5
+ */
6
+ export class TypeScriptProvider extends BaseLanguageProvider {
7
+ id = 'typescript';
8
+ name = 'TypeScript';
9
+ extensions = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];
10
+ filePatterns = [
11
+ '**/*.ts',
12
+ '**/*.tsx',
13
+ '**/*.js',
14
+ '**/*.jsx',
15
+ '**/*.mjs',
16
+ '**/*.cjs',
17
+ ];
18
+ getLanguageName(ext) {
19
+ switch (ext) {
20
+ case '.ts':
21
+ case '.tsx':
22
+ return 'typescript';
23
+ case '.js':
24
+ case '.jsx':
25
+ case '.mjs':
26
+ case '.cjs':
27
+ return 'javascript';
28
+ default:
29
+ return 'typescript';
30
+ }
31
+ }
32
+ extractImports(content, _filePath) {
33
+ const imports = [];
34
+ const lines = content.split('\n');
35
+ // Process each line for imports
36
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
37
+ const line = lines[lineNum];
38
+ // Named imports: import { x, y } from 'module'
39
+ const namedMatch = /import\s+\{([^}]+)\}\s+from\s+['"]([^'"]+)['"]/.exec(line);
40
+ if (namedMatch) {
41
+ const specifiers = namedMatch[1].split(',').map(s => s.trim().split(/\s+as\s+/)[0].trim());
42
+ imports.push({
43
+ source: namedMatch[2],
44
+ specifiers: specifiers.filter(s => s.length > 0),
45
+ isDefault: false,
46
+ isNamespace: false,
47
+ line: lineNum + 1,
48
+ });
49
+ continue;
50
+ }
51
+ // Default import: import x from 'module'
52
+ const defaultMatch = /import\s+(\w+)\s+from\s+['"]([^'"]+)['"]/.exec(line);
53
+ if (defaultMatch && !line.includes('{') && !line.includes('*')) {
54
+ imports.push({
55
+ source: defaultMatch[2],
56
+ specifiers: [defaultMatch[1]],
57
+ isDefault: true,
58
+ isNamespace: false,
59
+ line: lineNum + 1,
60
+ });
61
+ continue;
62
+ }
63
+ // Namespace import: import * as x from 'module'
64
+ const namespaceMatch = /import\s+\*\s+as\s+(\w+)\s+from\s+['"]([^'"]+)['"]/.exec(line);
65
+ if (namespaceMatch) {
66
+ imports.push({
67
+ source: namespaceMatch[2],
68
+ specifiers: [namespaceMatch[1]],
69
+ isDefault: false,
70
+ isNamespace: true,
71
+ line: lineNum + 1,
72
+ });
73
+ continue;
74
+ }
75
+ // Side-effect import: import 'module'
76
+ const sideEffectMatch = /^import\s+['"]([^'"]+)['"]/.exec(line.trim());
77
+ if (sideEffectMatch) {
78
+ imports.push({
79
+ source: sideEffectMatch[1],
80
+ specifiers: [],
81
+ isDefault: false,
82
+ isNamespace: false,
83
+ line: lineNum + 1,
84
+ });
85
+ continue;
86
+ }
87
+ // require() calls
88
+ const requireMatch = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/.exec(line);
89
+ if (requireMatch) {
90
+ imports.push({
91
+ source: requireMatch[1],
92
+ specifiers: [],
93
+ isDefault: false,
94
+ isNamespace: false,
95
+ line: lineNum + 1,
96
+ });
97
+ }
98
+ }
99
+ return imports;
100
+ }
101
+ extractExports(content, _filePath) {
102
+ const exports = [];
103
+ const lines = content.split('\n');
104
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
105
+ const line = lines[lineNum];
106
+ // export default
107
+ if (/export\s+default/.test(line)) {
108
+ exports.push({
109
+ name: 'default',
110
+ kind: 'variable',
111
+ isDefault: true,
112
+ line: lineNum + 1,
113
+ });
114
+ continue;
115
+ }
116
+ // export class ClassName
117
+ const classMatch = /export\s+(?:abstract\s+)?class\s+(\w+)/.exec(line);
118
+ if (classMatch) {
119
+ exports.push({
120
+ name: classMatch[1],
121
+ kind: 'class',
122
+ isDefault: false,
123
+ line: lineNum + 1,
124
+ });
125
+ continue;
126
+ }
127
+ // export interface InterfaceName
128
+ const interfaceMatch = /export\s+interface\s+(\w+)/.exec(line);
129
+ if (interfaceMatch) {
130
+ exports.push({
131
+ name: interfaceMatch[1],
132
+ kind: 'interface',
133
+ isDefault: false,
134
+ line: lineNum + 1,
135
+ });
136
+ continue;
137
+ }
138
+ // export type TypeName
139
+ const typeMatch = /export\s+type\s+(\w+)/.exec(line);
140
+ if (typeMatch) {
141
+ exports.push({
142
+ name: typeMatch[1],
143
+ kind: 'type',
144
+ isDefault: false,
145
+ line: lineNum + 1,
146
+ });
147
+ continue;
148
+ }
149
+ // export function functionName
150
+ const funcMatch = /export\s+(?:async\s+)?function\s+(\w+)/.exec(line);
151
+ if (funcMatch) {
152
+ exports.push({
153
+ name: funcMatch[1],
154
+ kind: 'function',
155
+ isDefault: false,
156
+ line: lineNum + 1,
157
+ });
158
+ continue;
159
+ }
160
+ // export const/let/var variableName
161
+ const varMatch = /export\s+(?:const|let|var)\s+(\w+)/.exec(line);
162
+ if (varMatch) {
163
+ exports.push({
164
+ name: varMatch[1],
165
+ kind: 'variable',
166
+ isDefault: false,
167
+ line: lineNum + 1,
168
+ });
169
+ continue;
170
+ }
171
+ // export enum EnumName
172
+ const enumMatch = /export\s+enum\s+(\w+)/.exec(line);
173
+ if (enumMatch) {
174
+ exports.push({
175
+ name: enumMatch[1],
176
+ kind: 'enum',
177
+ isDefault: false,
178
+ line: lineNum + 1,
179
+ });
180
+ }
181
+ }
182
+ return exports;
183
+ }
184
+ extractSymbols(content, filePath) {
185
+ const symbols = [];
186
+ const lines = content.split('\n');
187
+ const patterns = [
188
+ { regex: /^(?:export\s+)?(?:abstract\s+)?class\s+(\w+)/, kind: 'class' },
189
+ { regex: /^(?:export\s+)?interface\s+(\w+)/, kind: 'interface' },
190
+ { regex: /^(?:export\s+)?type\s+(\w+)\s*=/, kind: 'type' },
191
+ { regex: /^(?:export\s+)?(?:async\s+)?function\s+(\w+)/, kind: 'function' },
192
+ { regex: /^(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s*)?\(/, kind: 'function' },
193
+ { regex: /^(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s*)?function/, kind: 'function' },
194
+ { regex: /^(?:export\s+)?(?:const|let|var)\s+(\w+)/, kind: 'variable' },
195
+ { regex: /^(?:export\s+)?enum\s+(\w+)/, kind: 'enum' },
196
+ ];
197
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
198
+ const line = lines[lineNum].trim();
199
+ for (const { regex, kind } of patterns) {
200
+ const match = regex.exec(line);
201
+ if (match) {
202
+ symbols.push({
203
+ name: match[1],
204
+ kind,
205
+ filePath,
206
+ line: lineNum + 1,
207
+ column: 0,
208
+ exported: line.startsWith('export'),
209
+ references: [],
210
+ });
211
+ break;
212
+ }
213
+ }
214
+ }
215
+ return symbols;
216
+ }
217
+ resolveImportPath(fromPath, importSource, existingFiles) {
218
+ // Skip external modules
219
+ if (!importSource.startsWith('.') && !importSource.startsWith('/')) {
220
+ return null;
221
+ }
222
+ const dir = path.dirname(fromPath);
223
+ let resolved = path.join(dir, importSource);
224
+ // Normalize to forward slashes
225
+ resolved = resolved.replace(/\\/g, '/');
226
+ // Try different extensions
227
+ const extensions = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];
228
+ // Try exact path first
229
+ if (existingFiles.has(resolved)) {
230
+ return resolved;
231
+ }
232
+ // Try with extensions
233
+ for (const ext of extensions) {
234
+ const withExt = resolved + ext;
235
+ if (existingFiles.has(withExt)) {
236
+ return withExt;
237
+ }
238
+ }
239
+ // Try as directory with index file
240
+ for (const ext of extensions) {
241
+ const indexPath = path.join(resolved, `index${ext}`).replace(/\\/g, '/');
242
+ if (existingFiles.has(indexPath)) {
243
+ return indexPath;
244
+ }
245
+ }
246
+ // Handle .js extension mapping to .ts
247
+ if (resolved.endsWith('.js')) {
248
+ const tsPath = resolved.replace(/\.js$/, '.ts');
249
+ if (existingFiles.has(tsPath)) {
250
+ return tsPath;
251
+ }
252
+ const tsxPath = resolved.replace(/\.js$/, '.tsx');
253
+ if (existingFiles.has(tsxPath)) {
254
+ return tsxPath;
255
+ }
256
+ }
257
+ return null;
258
+ }
259
+ getControlFlowPatterns() {
260
+ return [
261
+ /\bif\s*\(/g,
262
+ /\belse\s+if\s*\(/g,
263
+ /\belse\b/g,
264
+ /\bfor\s*\(/g,
265
+ /\bwhile\s*\(/g,
266
+ /\bdo\s*\{/g,
267
+ /\bswitch\s*\(/g,
268
+ /\bcase\s+/g,
269
+ /\bcatch\s*\(/g,
270
+ /\?\?/g, // Nullish coalescing
271
+ /\?\./g, // Optional chaining
272
+ /\?[^:]/g, // Ternary (not optional chain or nullish)
273
+ /&&/g,
274
+ /\|\|/g,
275
+ ];
276
+ }
277
+ getCommentPatterns() {
278
+ return {
279
+ singleLine: /\/\//,
280
+ blockStart: /\/\*/,
281
+ blockEnd: /\*\//,
282
+ };
283
+ }
284
+ getEntryPointPatterns() {
285
+ return [
286
+ /\.get\s*\(/,
287
+ /\.post\s*\(/,
288
+ /\.put\s*\(/,
289
+ /\.delete\s*\(/,
290
+ /\.patch\s*\(/,
291
+ /app\.use\s*\(/,
292
+ /router\./,
293
+ /export\s+default\s+function\s+\w*Page/,
294
+ /export\s+default\s+function\s+\w*Handler/,
295
+ /getServerSideProps/,
296
+ /getStaticProps/,
297
+ ];
298
+ }
299
+ }
300
+ //# sourceMappingURL=typescript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../../../src/core/language-providers/providers/typescript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { LanguageProvider } from './types.js';
2
+ /**
3
+ * Registry for language providers
4
+ */
5
+ export declare class LanguageProviderRegistry {
6
+ private providers;
7
+ private extensionMap;
8
+ constructor();
9
+ /**
10
+ * Register a language provider
11
+ */
12
+ register(provider: LanguageProvider): void;
13
+ /**
14
+ * Get provider by ID
15
+ */
16
+ get(id: string): LanguageProvider | undefined;
17
+ /**
18
+ * Get provider for a file extension
19
+ */
20
+ getForExtension(ext: string): LanguageProvider | undefined;
21
+ /**
22
+ * Get provider for a file path
23
+ */
24
+ getForFile(filePath: string): LanguageProvider | undefined;
25
+ /**
26
+ * Get all registered providers
27
+ */
28
+ getAll(): LanguageProvider[];
29
+ /**
30
+ * Get all supported extensions
31
+ */
32
+ getAllExtensions(): string[];
33
+ /**
34
+ * Get all file patterns from all providers
35
+ */
36
+ getAllPatterns(): string[];
37
+ /**
38
+ * Get all ignore patterns (common across languages)
39
+ */
40
+ getIgnorePatterns(): string[];
41
+ /**
42
+ * Check if a file is supported
43
+ */
44
+ isSupported(filePath: string): boolean;
45
+ /**
46
+ * Get language name for a file
47
+ */
48
+ getLanguageName(filePath: string): string;
49
+ private getExtension;
50
+ }
51
+ /**
52
+ * Get the singleton language provider registry
53
+ */
54
+ export declare function getLanguageRegistry(): LanguageProviderRegistry;
55
+ /**
56
+ * Reset the registry (useful for testing)
57
+ */
58
+ export declare function resetLanguageRegistry(): void;
59
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/core/language-providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQnD;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,YAAY,CAAuC;;IAY3D;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAQ1C;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI7C;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAM1D;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAK1D;;OAEG;IACH,MAAM,IAAI,gBAAgB,EAAE;IAI5B;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;IAQ1B;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAiB7B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQzC,OAAO,CAAC,YAAY;CAKrB;AAKD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,wBAAwB,CAK9D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
@@ -0,0 +1,133 @@
1
+ import { TypeScriptProvider } from './providers/typescript.js';
2
+ import { PythonProvider } from './providers/python.js';
3
+ import { RubyProvider } from './providers/ruby.js';
4
+ import { JavaProvider } from './providers/java.js';
5
+ import { GoProvider } from './providers/go.js';
6
+ import { RustProvider } from './providers/rust.js';
7
+ /**
8
+ * Registry for language providers
9
+ */
10
+ export class LanguageProviderRegistry {
11
+ providers = new Map();
12
+ extensionMap = new Map();
13
+ constructor() {
14
+ // Register built-in providers
15
+ this.register(new TypeScriptProvider());
16
+ this.register(new PythonProvider());
17
+ this.register(new RubyProvider());
18
+ this.register(new JavaProvider());
19
+ this.register(new GoProvider());
20
+ this.register(new RustProvider());
21
+ }
22
+ /**
23
+ * Register a language provider
24
+ */
25
+ register(provider) {
26
+ this.providers.set(provider.id, provider);
27
+ for (const ext of provider.extensions) {
28
+ this.extensionMap.set(ext, provider);
29
+ }
30
+ }
31
+ /**
32
+ * Get provider by ID
33
+ */
34
+ get(id) {
35
+ return this.providers.get(id);
36
+ }
37
+ /**
38
+ * Get provider for a file extension
39
+ */
40
+ getForExtension(ext) {
41
+ // Normalize extension to include dot
42
+ const normalizedExt = ext.startsWith('.') ? ext : `.${ext}`;
43
+ return this.extensionMap.get(normalizedExt);
44
+ }
45
+ /**
46
+ * Get provider for a file path
47
+ */
48
+ getForFile(filePath) {
49
+ const ext = this.getExtension(filePath);
50
+ return this.getForExtension(ext);
51
+ }
52
+ /**
53
+ * Get all registered providers
54
+ */
55
+ getAll() {
56
+ return Array.from(this.providers.values());
57
+ }
58
+ /**
59
+ * Get all supported extensions
60
+ */
61
+ getAllExtensions() {
62
+ return Array.from(this.extensionMap.keys());
63
+ }
64
+ /**
65
+ * Get all file patterns from all providers
66
+ */
67
+ getAllPatterns() {
68
+ const patterns = [];
69
+ for (const provider of this.providers.values()) {
70
+ patterns.push(...provider.filePatterns);
71
+ }
72
+ return patterns;
73
+ }
74
+ /**
75
+ * Get all ignore patterns (common across languages)
76
+ */
77
+ getIgnorePatterns() {
78
+ return [
79
+ '**/node_modules/**',
80
+ '**/dist/**',
81
+ '**/build/**',
82
+ '**/.git/**',
83
+ '**/coverage/**',
84
+ '**/vendor/**',
85
+ '**/__pycache__/**',
86
+ '**/target/**',
87
+ '**/bin/**',
88
+ '**/obj/**',
89
+ '**/.venv/**',
90
+ '**/venv/**',
91
+ ];
92
+ }
93
+ /**
94
+ * Check if a file is supported
95
+ */
96
+ isSupported(filePath) {
97
+ return this.getForFile(filePath) !== undefined;
98
+ }
99
+ /**
100
+ * Get language name for a file
101
+ */
102
+ getLanguageName(filePath) {
103
+ const provider = this.getForFile(filePath);
104
+ if (!provider)
105
+ return 'unknown';
106
+ const ext = this.getExtension(filePath);
107
+ return provider.getLanguageName(ext);
108
+ }
109
+ getExtension(filePath) {
110
+ const lastDot = filePath.lastIndexOf('.');
111
+ if (lastDot === -1)
112
+ return '';
113
+ return filePath.slice(lastDot);
114
+ }
115
+ }
116
+ // Singleton instance
117
+ let registryInstance = null;
118
+ /**
119
+ * Get the singleton language provider registry
120
+ */
121
+ export function getLanguageRegistry() {
122
+ if (!registryInstance) {
123
+ registryInstance = new LanguageProviderRegistry();
124
+ }
125
+ return registryInstance;
126
+ }
127
+ /**
128
+ * Reset the registry (useful for testing)
129
+ */
130
+ export function resetLanguageRegistry() {
131
+ registryInstance = null;
132
+ }
133
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/language-providers/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { Symbol, ImportInfo, ExportInfo } from '../types.js';
2
+ export interface CommentPatterns {
3
+ singleLine: RegExp;
4
+ blockStart: RegExp;
5
+ blockEnd: RegExp;
6
+ }
7
+ export interface LanguageProvider {
8
+ /** Unique identifier (e.g., 'typescript', 'python', 'go') */
9
+ id: string;
10
+ /** Display name */
11
+ name: string;
12
+ /** File extensions this provider handles (e.g., ['.ts', '.tsx']) */
13
+ extensions: string[];
14
+ /** Glob patterns for file discovery */
15
+ filePatterns: string[];
16
+ /** Extract imports from source code */
17
+ extractImports(content: string, filePath: string): ImportInfo[];
18
+ /** Extract exports from source code */
19
+ extractExports(content: string, filePath: string): ExportInfo[];
20
+ /** Extract symbols (classes, functions, etc.) */
21
+ extractSymbols(content: string, filePath: string): Symbol[];
22
+ /** Resolve import path to actual file path */
23
+ resolveImportPath(fromPath: string, importSource: string, existingFiles: Set<string>): string | null;
24
+ /** Get control flow patterns for cyclomatic complexity */
25
+ getControlFlowPatterns(): RegExp[];
26
+ /** Get comment patterns */
27
+ getCommentPatterns(): CommentPatterns;
28
+ /** Get patterns for detecting entry points (APIs, routes, etc.) */
29
+ getEntryPointPatterns(): RegExp[];
30
+ /** Map file extension to language name */
31
+ getLanguageName(ext: string): string;
32
+ }
33
+ export declare abstract class BaseLanguageProvider implements LanguageProvider {
34
+ abstract id: string;
35
+ abstract name: string;
36
+ abstract extensions: string[];
37
+ abstract filePatterns: string[];
38
+ abstract extractImports(content: string, filePath: string): ImportInfo[];
39
+ abstract extractExports(content: string, filePath: string): ExportInfo[];
40
+ abstract extractSymbols(content: string, filePath: string): Symbol[];
41
+ abstract resolveImportPath(fromPath: string, importSource: string, existingFiles: Set<string>): string | null;
42
+ abstract getControlFlowPatterns(): RegExp[];
43
+ abstract getCommentPatterns(): CommentPatterns;
44
+ abstract getEntryPointPatterns(): RegExp[];
45
+ getLanguageName(_ext: string): string;
46
+ /**
47
+ * Utility: Count lines in content
48
+ */
49
+ protected countLines(content: string, upToIndex: number): number;
50
+ /**
51
+ * Utility: Check if position is inside a comment or string
52
+ */
53
+ protected isInCommentOrString(content: string, index: number): boolean;
54
+ }
55
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/language-providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMlE,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IAEX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IAEb,oEAAoE;IACpE,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,uCAAuC;IACvC,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,uCAAuC;IACvC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IAEhE,uCAAuC;IACvC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IAEhE,iDAAiD;IACjD,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE5D,8CAA8C;IAC9C,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GACzB,MAAM,GAAG,IAAI,CAAC;IAEjB,0DAA0D;IAC1D,sBAAsB,IAAI,MAAM,EAAE,CAAC;IAEnC,2BAA2B;IAC3B,kBAAkB,IAAI,eAAe,CAAC;IAEtC,mEAAmE;IACnE,qBAAqB,IAAI,MAAM,EAAE,CAAC;IAElC,0CAA0C;IAC1C,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACtC;AAMD,8BAAsB,oBAAqB,YAAW,gBAAgB;IACpE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAEhC,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE;IACxE,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE;IACxE,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IACpE,QAAQ,CAAC,iBAAiB,CACxB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GACzB,MAAM,GAAG,IAAI;IAChB,QAAQ,CAAC,sBAAsB,IAAI,MAAM,EAAE;IAC3C,QAAQ,CAAC,kBAAkB,IAAI,eAAe;IAC9C,QAAQ,CAAC,qBAAqB,IAAI,MAAM,EAAE;IAE1C,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrC;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAIhE;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;CAavE"}
@@ -0,0 +1,29 @@
1
+ // ============================================================================
2
+ // Base Provider with shared utilities
3
+ // ============================================================================
4
+ export class BaseLanguageProvider {
5
+ getLanguageName(_ext) {
6
+ return this.name;
7
+ }
8
+ /**
9
+ * Utility: Count lines in content
10
+ */
11
+ countLines(content, upToIndex) {
12
+ return content.slice(0, upToIndex).split('\n').length;
13
+ }
14
+ /**
15
+ * Utility: Check if position is inside a comment or string
16
+ */
17
+ isInCommentOrString(content, index) {
18
+ // Simple heuristic - can be overridden by specific providers
19
+ const lineStart = content.lastIndexOf('\n', index) + 1;
20
+ const lineContent = content.slice(lineStart, index);
21
+ // Check for single-line comment
22
+ const patterns = this.getCommentPatterns();
23
+ if (patterns.singleLine.test(lineContent)) {
24
+ return true;
25
+ }
26
+ return false;
27
+ }
28
+ }
29
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/language-providers/types.ts"],"names":[],"mappings":"AAsDA,+EAA+E;AAC/E,sCAAsC;AACtC,+EAA+E;AAE/E,MAAM,OAAgB,oBAAoB;IAkBxC,eAAe,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACO,UAAU,CAAC,OAAe,EAAE,SAAiB;QACrD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACxD,CAAC;IAED;;OAEG;IACO,mBAAmB,CAAC,OAAe,EAAE,KAAa;QAC1D,6DAA6D;QAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAEpD,gCAAgC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC3C,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -1,8 +1,10 @@
1
1
  import type { FileInfo } from './types.js';
2
+ import { type LanguageProviderRegistry } from './language-providers/index.js';
2
3
  export declare class RepoIndexer {
3
4
  private repoRoot;
4
5
  private files;
5
6
  private indexed;
7
+ private languageRegistry;
6
8
  constructor(repoRoot: string);
7
9
  /**
8
10
  * Index the repository (with optional caching)
@@ -49,9 +51,13 @@ export declare class RepoIndexer {
49
51
  avgFanOut: number;
50
52
  };
51
53
  private analyzeFile;
52
- private getLanguage;
53
- private extractImports;
54
- private extractExports;
55
- private extractSymbols;
54
+ /**
55
+ * Get the language registry for external use
56
+ */
57
+ getLanguageRegistry(): LanguageProviderRegistry;
58
+ private getLanguageLegacy;
59
+ private extractImportsLegacy;
60
+ private extractExportsLegacy;
61
+ private extractSymbolsLegacy;
56
62
  }
57
63
  //# sourceMappingURL=repo-indexer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repo-indexer.d.ts","sourceRoot":"","sources":["../../src/core/repo-indexer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAA8C,MAAM,YAAY,CAAC;AAuBvF,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,OAAO,CAAkB;gBAErB,QAAQ,EAAE,MAAM;IAI5B;;OAEG;IACG,KAAK,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBhE;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YASnB,YAAY;IAwC1B;;OAEG;YACW,SAAS;IAsCvB;;OAEG;YACW,SAAS;IA2CvB;;OAEG;IACH,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IAIjC;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI/C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAqBlF,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,cAAc;IAyDtB,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,cAAc;CAuCvB"}
1
+ {"version":3,"file":"repo-indexer.d.ts","sourceRoot":"","sources":["../../src/core/repo-indexer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAA8C,MAAM,YAAY,CAAC;AACvF,OAAO,EAAuB,KAAK,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAuBnG,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,gBAAgB,CAA2B;gBAEvC,QAAQ,EAAE,MAAM;IAK5B;;OAEG;IACG,KAAK,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBhE;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YASnB,YAAY;IA6B1B;;OAEG;YACW,SAAS;IAsCvB;;OAEG;YACW,SAAS;IA2CvB;;OAEG;IACH,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;IAIjC;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI/C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAqBlF,OAAO,CAAC,WAAW;IAsBnB;;OAEG;IACH,mBAAmB,IAAI,wBAAwB;IAK/C,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,oBAAoB;IAsD5B,OAAO,CAAC,oBAAoB;IAoC5B,OAAO,CAAC,oBAAoB;CAuC7B"}