circle-ir-ai 2.7.0 → 2.7.2

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 (149) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/dist/llm/ax-client.d.ts.map +1 -1
  3. package/dist/llm/ax-client.js +36 -10
  4. package/dist/llm/ax-client.js.map +1 -1
  5. package/package.json +2 -2
  6. package/dist/cli/args.d.ts +0 -86
  7. package/dist/cli/args.d.ts.map +0 -1
  8. package/dist/cli/args.js +0 -653
  9. package/dist/cli/args.js.map +0 -1
  10. package/dist/cli/colors.d.ts +0 -31
  11. package/dist/cli/colors.d.ts.map +0 -1
  12. package/dist/cli/colors.js +0 -80
  13. package/dist/cli/colors.js.map +0 -1
  14. package/dist/cli/commands/analyze-skill.d.ts +0 -33
  15. package/dist/cli/commands/analyze-skill.d.ts.map +0 -1
  16. package/dist/cli/commands/analyze-skill.js +0 -217
  17. package/dist/cli/commands/analyze-skill.js.map +0 -1
  18. package/dist/cli/commands/analyze.d.ts +0 -19
  19. package/dist/cli/commands/analyze.d.ts.map +0 -1
  20. package/dist/cli/commands/analyze.js +0 -303
  21. package/dist/cli/commands/analyze.js.map +0 -1
  22. package/dist/cli/commands/benchmark-runner.d.ts +0 -42
  23. package/dist/cli/commands/benchmark-runner.d.ts.map +0 -1
  24. package/dist/cli/commands/benchmark-runner.js +0 -18
  25. package/dist/cli/commands/benchmark-runner.js.map +0 -1
  26. package/dist/cli/commands/benchmark.d.ts +0 -11
  27. package/dist/cli/commands/benchmark.d.ts.map +0 -1
  28. package/dist/cli/commands/benchmark.js +0 -90
  29. package/dist/cli/commands/benchmark.js.map +0 -1
  30. package/dist/cli/commands/cluster.d.ts +0 -12
  31. package/dist/cli/commands/cluster.d.ts.map +0 -1
  32. package/dist/cli/commands/cluster.js +0 -203
  33. package/dist/cli/commands/cluster.js.map +0 -1
  34. package/dist/cli/commands/compare.d.ts +0 -13
  35. package/dist/cli/commands/compare.d.ts.map +0 -1
  36. package/dist/cli/commands/compare.js +0 -109
  37. package/dist/cli/commands/compare.js.map +0 -1
  38. package/dist/cli/commands/dead-code.d.ts +0 -11
  39. package/dist/cli/commands/dead-code.d.ts.map +0 -1
  40. package/dist/cli/commands/dead-code.js +0 -75
  41. package/dist/cli/commands/dead-code.js.map +0 -1
  42. package/dist/cli/commands/generate-spec.d.ts +0 -11
  43. package/dist/cli/commands/generate-spec.d.ts.map +0 -1
  44. package/dist/cli/commands/generate-spec.js +0 -120
  45. package/dist/cli/commands/generate-spec.js.map +0 -1
  46. package/dist/cli/commands/health.d.ts +0 -11
  47. package/dist/cli/commands/health.d.ts.map +0 -1
  48. package/dist/cli/commands/health.js +0 -76
  49. package/dist/cli/commands/health.js.map +0 -1
  50. package/dist/cli/commands/index.d.ts +0 -30
  51. package/dist/cli/commands/index.d.ts.map +0 -1
  52. package/dist/cli/commands/index.js +0 -36
  53. package/dist/cli/commands/index.js.map +0 -1
  54. package/dist/cli/commands/metrics.d.ts +0 -12
  55. package/dist/cli/commands/metrics.d.ts.map +0 -1
  56. package/dist/cli/commands/metrics.js +0 -231
  57. package/dist/cli/commands/metrics.js.map +0 -1
  58. package/dist/cli/commands/project.d.ts +0 -21
  59. package/dist/cli/commands/project.d.ts.map +0 -1
  60. package/dist/cli/commands/project.js +0 -92
  61. package/dist/cli/commands/project.js.map +0 -1
  62. package/dist/cli/commands/quality.d.ts +0 -15
  63. package/dist/cli/commands/quality.d.ts.map +0 -1
  64. package/dist/cli/commands/quality.js +0 -86
  65. package/dist/cli/commands/quality.js.map +0 -1
  66. package/dist/cli/commands/scan.d.ts +0 -11
  67. package/dist/cli/commands/scan.d.ts.map +0 -1
  68. package/dist/cli/commands/scan.js +0 -102
  69. package/dist/cli/commands/scan.js.map +0 -1
  70. package/dist/cli/commands/secrets.d.ts +0 -11
  71. package/dist/cli/commands/secrets.d.ts.map +0 -1
  72. package/dist/cli/commands/secrets.js +0 -79
  73. package/dist/cli/commands/secrets.js.map +0 -1
  74. package/dist/cli/commands/spec-diff.d.ts +0 -12
  75. package/dist/cli/commands/spec-diff.d.ts.map +0 -1
  76. package/dist/cli/commands/spec-diff.js +0 -150
  77. package/dist/cli/commands/spec-diff.js.map +0 -1
  78. package/dist/cli/commands/swarm.d.ts +0 -21
  79. package/dist/cli/commands/swarm.d.ts.map +0 -1
  80. package/dist/cli/commands/swarm.js +0 -175
  81. package/dist/cli/commands/swarm.js.map +0 -1
  82. package/dist/cli/commands/trust.d.ts +0 -23
  83. package/dist/cli/commands/trust.d.ts.map +0 -1
  84. package/dist/cli/commands/trust.js +0 -397
  85. package/dist/cli/commands/trust.js.map +0 -1
  86. package/dist/cli/commands/understand.d.ts +0 -12
  87. package/dist/cli/commands/understand.d.ts.map +0 -1
  88. package/dist/cli/commands/understand.js +0 -188
  89. package/dist/cli/commands/understand.js.map +0 -1
  90. package/dist/cli/config.d.ts +0 -161
  91. package/dist/cli/config.d.ts.map +0 -1
  92. package/dist/cli/config.js +0 -383
  93. package/dist/cli/config.js.map +0 -1
  94. package/dist/cli/discovery.d.ts +0 -31
  95. package/dist/cli/discovery.d.ts.map +0 -1
  96. package/dist/cli/discovery.js +0 -212
  97. package/dist/cli/discovery.js.map +0 -1
  98. package/dist/cli/effective-options.d.ts +0 -42
  99. package/dist/cli/effective-options.d.ts.map +0 -1
  100. package/dist/cli/effective-options.js +0 -80
  101. package/dist/cli/effective-options.js.map +0 -1
  102. package/dist/cli/file-collection.d.ts +0 -49
  103. package/dist/cli/file-collection.d.ts.map +0 -1
  104. package/dist/cli/file-collection.js +0 -142
  105. package/dist/cli/file-collection.js.map +0 -1
  106. package/dist/cli/formatters/index.d.ts +0 -15
  107. package/dist/cli/formatters/index.d.ts.map +0 -1
  108. package/dist/cli/formatters/index.js +0 -51
  109. package/dist/cli/formatters/index.js.map +0 -1
  110. package/dist/cli/formatters/json.d.ts +0 -11
  111. package/dist/cli/formatters/json.d.ts.map +0 -1
  112. package/dist/cli/formatters/json.js +0 -12
  113. package/dist/cli/formatters/json.js.map +0 -1
  114. package/dist/cli/formatters/project-json.d.ts +0 -11
  115. package/dist/cli/formatters/project-json.d.ts.map +0 -1
  116. package/dist/cli/formatters/project-json.js +0 -12
  117. package/dist/cli/formatters/project-json.js.map +0 -1
  118. package/dist/cli/formatters/project-sarif.d.ts +0 -11
  119. package/dist/cli/formatters/project-sarif.d.ts.map +0 -1
  120. package/dist/cli/formatters/project-sarif.js +0 -127
  121. package/dist/cli/formatters/project-sarif.js.map +0 -1
  122. package/dist/cli/formatters/project-summary.d.ts +0 -11
  123. package/dist/cli/formatters/project-summary.d.ts.map +0 -1
  124. package/dist/cli/formatters/project-summary.js +0 -202
  125. package/dist/cli/formatters/project-summary.js.map +0 -1
  126. package/dist/cli/formatters/sarif-shared.d.ts +0 -101
  127. package/dist/cli/formatters/sarif-shared.d.ts.map +0 -1
  128. package/dist/cli/formatters/sarif-shared.js +0 -57
  129. package/dist/cli/formatters/sarif-shared.js.map +0 -1
  130. package/dist/cli/formatters/sarif.d.ts +0 -12
  131. package/dist/cli/formatters/sarif.d.ts.map +0 -1
  132. package/dist/cli/formatters/sarif.js +0 -92
  133. package/dist/cli/formatters/sarif.js.map +0 -1
  134. package/dist/cli/formatters/summary.d.ts +0 -11
  135. package/dist/cli/formatters/summary.d.ts.map +0 -1
  136. package/dist/cli/formatters/summary.js +0 -240
  137. package/dist/cli/formatters/summary.js.map +0 -1
  138. package/dist/cli/formatters/two-phase-summary.d.ts +0 -11
  139. package/dist/cli/formatters/two-phase-summary.d.ts.map +0 -1
  140. package/dist/cli/formatters/two-phase-summary.js +0 -188
  141. package/dist/cli/formatters/two-phase-summary.js.map +0 -1
  142. package/dist/cli/index.d.ts +0 -10
  143. package/dist/cli/index.d.ts.map +0 -1
  144. package/dist/cli/index.js +0 -72
  145. package/dist/cli/index.js.map +0 -1
  146. package/dist/cli/program.d.ts +0 -117
  147. package/dist/cli/program.d.ts.map +0 -1
  148. package/dist/cli/program.js +0 -825
  149. package/dist/cli/program.js.map +0 -1
@@ -1,383 +0,0 @@
1
- /**
2
- * Configuration File Loader
3
- *
4
- * Loads and parses .circle-ir.yaml configuration files.
5
- */
6
- import * as fs from 'fs';
7
- import * as path from 'path';
8
- import { DEFAULT_SOURCES, DEFAULT_SINKS, DEFAULT_SANITIZERS } from 'circle-ir';
9
- /**
10
- * Default config file names to search for.
11
- */
12
- const CONFIG_FILE_NAMES = [
13
- '.circle-ir.yaml',
14
- '.circle-ir.yml',
15
- '.circle-ir.json',
16
- 'circle-ir.config.yaml',
17
- 'circle-ir.config.yml',
18
- 'circle-ir.config.json',
19
- ];
20
- /**
21
- * Find a config file by searching up from a directory.
22
- */
23
- export function findConfigFile(startDir) {
24
- let currentDir = path.resolve(startDir);
25
- const root = path.parse(currentDir).root;
26
- while (currentDir !== root) {
27
- for (const configName of CONFIG_FILE_NAMES) {
28
- const configPath = path.join(currentDir, configName);
29
- if (fs.existsSync(configPath)) {
30
- return configPath;
31
- }
32
- }
33
- currentDir = path.dirname(currentDir);
34
- }
35
- return null;
36
- }
37
- /**
38
- * Load a config file.
39
- */
40
- export function loadConfigFile(configPath) {
41
- const content = fs.readFileSync(configPath, 'utf-8');
42
- const ext = path.extname(configPath).toLowerCase();
43
- if (ext === '.json') {
44
- return JSON.parse(content);
45
- }
46
- // Parse YAML (simple implementation for common cases)
47
- return parseSimpleYaml(content);
48
- }
49
- /**
50
- * Simple YAML parser for configuration files.
51
- * Handles basic key-value pairs, arrays, and nested objects.
52
- */
53
- function parseSimpleYaml(content) {
54
- const lines = content.split('\n');
55
- const result = {};
56
- const stack = [{ obj: result, indent: -1 }];
57
- for (let i = 0; i < lines.length; i++) {
58
- const line = lines[i];
59
- // Skip empty lines and comments
60
- if (!line.trim() || line.trim().startsWith('#')) {
61
- continue;
62
- }
63
- const indent = line.search(/\S/);
64
- const trimmed = line.trim();
65
- // Pop stack until we find the right parent
66
- while (stack.length > 1 && stack[stack.length - 1].indent >= indent) {
67
- stack.pop();
68
- }
69
- const parent = stack[stack.length - 1].obj;
70
- // Array item
71
- if (trimmed.startsWith('- ')) {
72
- const value = trimmed.substring(2).trim();
73
- if (!Array.isArray(parent)) {
74
- // Find the array we're adding to
75
- const keys = Object.keys(parent);
76
- const lastKey = keys[keys.length - 1];
77
- if (lastKey && !Array.isArray(parent[lastKey])) {
78
- parent[lastKey] = [];
79
- }
80
- if (value.includes(':')) {
81
- // Object in array
82
- const obj = {};
83
- parseInlineObject(value, obj);
84
- parent[lastKey].push(obj);
85
- }
86
- else {
87
- parent[lastKey].push(parseValue(value));
88
- }
89
- }
90
- else {
91
- parent.push(parseValue(value));
92
- }
93
- continue;
94
- }
95
- // Key-value pair
96
- const colonIndex = trimmed.indexOf(':');
97
- if (colonIndex > 0) {
98
- const key = trimmed.substring(0, colonIndex).trim();
99
- const valueStr = trimmed.substring(colonIndex + 1).trim();
100
- if (valueStr === '' || valueStr === '|' || valueStr === '>') {
101
- // Nested object or multiline string
102
- parent[key] = {};
103
- stack.push({ obj: parent[key], indent });
104
- }
105
- else {
106
- parent[key] = parseValue(valueStr);
107
- }
108
- }
109
- }
110
- return result;
111
- }
112
- /**
113
- * Parse inline object like "method: foo, class: Bar".
114
- */
115
- function parseInlineObject(str, obj) {
116
- const parts = str.split(',');
117
- for (const part of parts) {
118
- const colonIdx = part.indexOf(':');
119
- if (colonIdx > 0) {
120
- const key = part.substring(0, colonIdx).trim();
121
- const value = part.substring(colonIdx + 1).trim();
122
- obj[key] = parseValue(value);
123
- }
124
- }
125
- }
126
- /**
127
- * Parse a YAML value.
128
- */
129
- function parseValue(str) {
130
- if (str === 'true')
131
- return true;
132
- if (str === 'false')
133
- return false;
134
- if (str === 'null')
135
- return null;
136
- if (/^-?\d+$/.test(str))
137
- return parseInt(str, 10);
138
- if (/^-?\d+\.\d+$/.test(str))
139
- return parseFloat(str);
140
- // Remove quotes
141
- if ((str.startsWith('"') && str.endsWith('"')) ||
142
- (str.startsWith("'") && str.endsWith("'"))) {
143
- return str.slice(1, -1);
144
- }
145
- // Array notation
146
- if (str.startsWith('[') && str.endsWith(']')) {
147
- const inner = str.slice(1, -1).trim();
148
- if (!inner)
149
- return [];
150
- return inner.split(',').map(s => parseValue(s.trim()));
151
- }
152
- return str;
153
- }
154
- /**
155
- * Resolve configuration by merging user config with defaults.
156
- */
157
- export function resolveConfig(userConfig) {
158
- const sources = [...DEFAULT_SOURCES];
159
- const sinks = [...DEFAULT_SINKS];
160
- const sanitizers = [...DEFAULT_SANITIZERS];
161
- // Add user-defined rules
162
- if (userConfig?.rules?.sources) {
163
- for (const source of userConfig.rules.sources) {
164
- sources.push({
165
- method: source.method,
166
- class: source.class,
167
- annotation: source.annotation,
168
- type: source.type,
169
- severity: (source.severity || 'high'),
170
- return_tainted: source.method ? true : undefined,
171
- param_tainted: source.annotation ? true : undefined,
172
- });
173
- }
174
- }
175
- if (userConfig?.rules?.sinks) {
176
- for (const sink of userConfig.rules.sinks) {
177
- sinks.push({
178
- method: sink.method,
179
- class: sink.class,
180
- type: sink.type,
181
- cwe: sink.cwe,
182
- severity: (sink.severity || 'high'),
183
- arg_positions: sink.arg_positions || [0],
184
- });
185
- }
186
- }
187
- if (userConfig?.rules?.sanitizers) {
188
- for (const sanitizer of userConfig.rules.sanitizers) {
189
- sanitizers.push({
190
- method: sanitizer.method,
191
- class: sanitizer.class,
192
- annotation: sanitizer.annotation,
193
- removes: sanitizer.removes,
194
- });
195
- }
196
- }
197
- // Build disabled rules set
198
- const disabled_rules = new Set(userConfig?.overrides?.disable_rules || []);
199
- // Filter out disabled sinks
200
- const filteredSinks = sinks.filter(s => !disabled_rules.has(s.cwe));
201
- // Build severity overrides map
202
- const severity_overrides = new Map(Object.entries(userConfig?.overrides?.severity_overrides || {}));
203
- return {
204
- project: {
205
- name: userConfig?.project?.name,
206
- framework: userConfig?.project?.framework,
207
- framework_version: userConfig?.project?.framework_version,
208
- },
209
- include: userConfig?.include || [],
210
- exclude: userConfig?.exclude || [],
211
- analysis: {
212
- max_files: userConfig?.analysis?.max_files || 10000,
213
- timeout_ms: userConfig?.analysis?.timeout_ms || 300000,
214
- severity_threshold: userConfig?.analysis?.severity_threshold || 'low',
215
- },
216
- taint: {
217
- sources,
218
- sinks: filteredSinks,
219
- sanitizers,
220
- },
221
- disabled_rules,
222
- severity_overrides,
223
- };
224
- }
225
- /**
226
- * Load and resolve configuration.
227
- */
228
- export function loadConfig(configPath, startDir = process.cwd()) {
229
- let userConfig = null;
230
- if (configPath) {
231
- // Explicit config file
232
- if (!fs.existsSync(configPath)) {
233
- throw new Error(`Config file not found: ${configPath}`);
234
- }
235
- userConfig = loadConfigFile(configPath);
236
- }
237
- else {
238
- // Search for config file
239
- const foundConfig = findConfigFile(startDir);
240
- if (foundConfig) {
241
- userConfig = loadConfigFile(foundConfig);
242
- }
243
- }
244
- return resolveConfig(userConfig);
245
- }
246
- /**
247
- * Create an example config file.
248
- */
249
- export function createExampleConfig() {
250
- return `# Circle-IR Configuration File
251
- # Place this file as .circle-ir.yaml in your project root
252
-
253
- # Project metadata
254
- project:
255
- name: my-project
256
- framework: spring
257
- framework_version: "5.3"
258
-
259
- # File discovery patterns
260
- include:
261
- - "src/main/**/*.java"
262
- exclude:
263
- - "**/test/**"
264
- - "**/generated/**"
265
-
266
- # Analysis settings
267
- analysis:
268
- max_files: 1000
269
- timeout_ms: 300000
270
- severity_threshold: medium
271
-
272
- # Custom security rules
273
- rules:
274
- # Custom sources (where tainted data enters)
275
- sources:
276
- - method: getUnsafeInput
277
- class: CustomInput
278
- type: custom_input
279
- severity: high
280
-
281
- # Custom sinks (dangerous operations)
282
- sinks:
283
- - method: unsafeOperation
284
- class: DangerousClass
285
- type: custom_vulnerability
286
- cwe: CWE-1234
287
- severity: critical
288
- arg_positions: [0, 1]
289
-
290
- # Custom sanitizers
291
- sanitizers:
292
- - method: sanitizeInput
293
- class: SecurityUtils
294
- removes: [sql_injection, xss]
295
-
296
- # Rule overrides
297
- overrides:
298
- # Disable specific rules by CWE ID
299
- disable_rules:
300
- - CWE-79 # Disable XSS checks
301
-
302
- # Override severity for specific rules
303
- severity_overrides:
304
- CWE-89: critical # Make SQL injection critical
305
- `;
306
- }
307
- /**
308
- * Load CogniumConfig from cognium.config.json.
309
- * Searches up from startDir or uses explicit configPath.
310
- */
311
- export function loadCogniumConfig(configPath, startDir) {
312
- if (configPath) {
313
- if (!fs.existsSync(configPath))
314
- return null;
315
- try {
316
- return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
317
- }
318
- catch (err) {
319
- console.error(`Warning: Failed to parse ${configPath}: ${err}`);
320
- return null;
321
- }
322
- }
323
- // Walk up directories to find cognium.config.json
324
- let dir = path.resolve(startDir || process.cwd());
325
- const root = path.parse(dir).root;
326
- while (dir !== root) {
327
- const candidate = path.join(dir, 'cognium.config.json');
328
- if (fs.existsSync(candidate)) {
329
- try {
330
- return JSON.parse(fs.readFileSync(candidate, 'utf-8'));
331
- }
332
- catch (err) {
333
- console.error(`Warning: Failed to parse ${candidate}: ${err}`);
334
- return null;
335
- }
336
- }
337
- dir = path.dirname(dir);
338
- }
339
- return null;
340
- }
341
- /**
342
- * Convert CogniumConfig passes to circle-ir PassOptions and disabledPasses.
343
- */
344
- export function convertCogniumConfigToPassOptions(config) {
345
- const passOptions = {};
346
- const disabledPasses = [];
347
- if (!config.passes) {
348
- return { passOptions, disabledPasses };
349
- }
350
- for (const [passName, passConfig] of Object.entries(config.passes)) {
351
- if (passConfig === false) {
352
- disabledPasses.push(passName);
353
- continue;
354
- }
355
- if (passConfig === true)
356
- continue;
357
- if (typeof passConfig === 'object') {
358
- if (passConfig.enabled === false) {
359
- disabledPasses.push(passName);
360
- continue;
361
- }
362
- switch (passName) {
363
- case 'dependency-fan-out':
364
- if (passConfig.threshold !== undefined) {
365
- passOptions.dependencyFanOut = { threshold: passConfig.threshold };
366
- }
367
- break;
368
- case 'unbounded-collection':
369
- if (passConfig.skipPatterns !== undefined) {
370
- passOptions.unboundedCollection = { skipPatterns: passConfig.skipPatterns };
371
- }
372
- break;
373
- case 'naming-convention':
374
- if (passConfig.enforceIPrefix !== undefined) {
375
- passOptions.namingConvention = { enforceIPrefix: passConfig.enforceIPrefix };
376
- }
377
- break;
378
- }
379
- }
380
- }
381
- return { passOptions, disabledPasses };
382
- }
383
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- /**
2
- * File Discovery Module
3
- *
4
- * Discovers source files in directories for project-level analysis.
5
- */
6
- export interface DiscoveryOptions {
7
- include?: string[];
8
- exclude?: string[];
9
- maxFiles?: number;
10
- }
11
- export interface DiscoveredFile {
12
- path: string;
13
- relativePath: string;
14
- language: 'java' | 'c' | 'cpp' | 'javascript' | 'typescript' | 'rust' | 'python';
15
- }
16
- /**
17
- * Discover source files in a directory.
18
- */
19
- export declare function discoverFiles(directory: string, options?: DiscoveryOptions): DiscoveredFile[];
20
- /**
21
- * Read file contents.
22
- */
23
- export declare function readFileContent(filePath: string): string;
24
- /**
25
- * Get project statistics.
26
- */
27
- export declare function getProjectStats(files: DiscoveredFile[]): {
28
- total: number;
29
- byLanguage: Record<string, number>;
30
- };
31
- //# sourceMappingURL=discovery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/cli/discovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,YAAY,GAAG,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;CAClF;AAoCD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,gBAAqB,GAC7B,cAAc,EAAE,CAkBlB;AAgJD;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAmBA"}
@@ -1,212 +0,0 @@
1
- /**
2
- * File Discovery Module
3
- *
4
- * Discovers source files in directories for project-level analysis.
5
- */
6
- import * as fs from 'fs';
7
- import * as path from 'path';
8
- // Default file extensions by language
9
- const LANGUAGE_EXTENSIONS = {
10
- java: ['.java'],
11
- c: ['.c', '.h'],
12
- cpp: ['.cpp', '.cc', '.cxx', '.hpp', '.hh', '.hxx'],
13
- javascript: ['.js', '.jsx', '.mjs', '.cjs'],
14
- typescript: ['.ts', '.tsx', '.mts', '.cts'],
15
- rust: ['.rs'],
16
- python: ['.py'],
17
- };
18
- // Default directories to exclude
19
- const DEFAULT_EXCLUDES = [
20
- 'node_modules',
21
- '.git',
22
- '.svn',
23
- '.hg',
24
- 'build',
25
- 'dist',
26
- 'target',
27
- 'out',
28
- 'bin',
29
- '.idea',
30
- '.vscode',
31
- '__pycache__',
32
- '.gradle',
33
- '.m2',
34
- 'vendor',
35
- 'test',
36
- 'tests',
37
- '**/test/**',
38
- '**/tests/**',
39
- ];
40
- /**
41
- * Discover source files in a directory.
42
- */
43
- export function discoverFiles(directory, options = {}) {
44
- const files = [];
45
- const excludePatterns = [...DEFAULT_EXCLUDES, ...(options.exclude || [])];
46
- const includePatterns = options.include || [];
47
- const maxFiles = options.maxFiles || 10000;
48
- // Get all supported extensions
49
- const allExtensions = new Set();
50
- for (const exts of Object.values(LANGUAGE_EXTENSIONS)) {
51
- for (const ext of exts) {
52
- allExtensions.add(ext);
53
- }
54
- }
55
- // Recursively scan directory
56
- scanDirectory(directory, directory, files, allExtensions, excludePatterns, includePatterns, maxFiles);
57
- return files;
58
- }
59
- /**
60
- * Recursively scan a directory for source files.
61
- */
62
- function scanDirectory(rootDir, currentDir, files, extensions, excludePatterns, includePatterns, maxFiles) {
63
- if (files.length >= maxFiles) {
64
- return;
65
- }
66
- let entries;
67
- try {
68
- entries = fs.readdirSync(currentDir, { withFileTypes: true });
69
- }
70
- catch {
71
- // Directory not readable, skip
72
- return;
73
- }
74
- for (const entry of entries) {
75
- if (files.length >= maxFiles) {
76
- return;
77
- }
78
- const fullPath = path.join(currentDir, entry.name);
79
- const relativePath = path.relative(rootDir, fullPath);
80
- // Check excludes
81
- if (shouldExclude(relativePath, entry.name, excludePatterns)) {
82
- continue;
83
- }
84
- if (entry.isDirectory()) {
85
- scanDirectory(rootDir, fullPath, files, extensions, excludePatterns, includePatterns, maxFiles);
86
- }
87
- else if (entry.isFile()) {
88
- const ext = path.extname(entry.name).toLowerCase();
89
- if (extensions.has(ext)) {
90
- // Check includes if specified
91
- if (includePatterns.length > 0 && !matchesAnyPattern(relativePath, includePatterns)) {
92
- continue;
93
- }
94
- const language = detectLanguage(ext);
95
- if (language) {
96
- files.push({
97
- path: fullPath,
98
- relativePath,
99
- language,
100
- });
101
- }
102
- }
103
- }
104
- }
105
- }
106
- /**
107
- * Check if a path should be excluded.
108
- */
109
- function shouldExclude(relativePath, name, patterns) {
110
- for (const pattern of patterns) {
111
- // Simple pattern matching
112
- if (pattern.includes('*')) {
113
- // Glob-like pattern
114
- const regex = patternToRegex(pattern);
115
- if (regex.test(relativePath) || regex.test(name)) {
116
- return true;
117
- }
118
- }
119
- else {
120
- // Exact match or path contains
121
- if (name === pattern || relativePath.includes(pattern)) {
122
- return true;
123
- }
124
- }
125
- }
126
- return false;
127
- }
128
- /**
129
- * Check if path matches any include pattern.
130
- */
131
- function matchesAnyPattern(relativePath, patterns) {
132
- for (const pattern of patterns) {
133
- if (pattern.includes('*')) {
134
- const regex = patternToRegex(pattern);
135
- if (regex.test(relativePath)) {
136
- return true;
137
- }
138
- }
139
- else {
140
- if (relativePath.includes(pattern)) {
141
- return true;
142
- }
143
- }
144
- }
145
- return false;
146
- }
147
- /**
148
- * Convert glob pattern to regex.
149
- */
150
- function patternToRegex(pattern) {
151
- const escaped = pattern
152
- .replace(/[.+^${}()|[\]\\]/g, '\\$&')
153
- .replace(/\*\*/g, '{{GLOBSTAR}}')
154
- .replace(/\*/g, '[^/]*')
155
- .replace(/{{GLOBSTAR}}/g, '.*');
156
- return new RegExp(escaped);
157
- }
158
- /**
159
- * Detect language from file extension.
160
- */
161
- function detectLanguage(ext) {
162
- if (LANGUAGE_EXTENSIONS.java.includes(ext)) {
163
- return 'java';
164
- }
165
- if (LANGUAGE_EXTENSIONS.c.includes(ext)) {
166
- return 'c';
167
- }
168
- if (LANGUAGE_EXTENSIONS.cpp.includes(ext)) {
169
- return 'cpp';
170
- }
171
- if (LANGUAGE_EXTENSIONS.javascript.includes(ext)) {
172
- return 'javascript';
173
- }
174
- if (LANGUAGE_EXTENSIONS.typescript.includes(ext)) {
175
- return 'typescript';
176
- }
177
- if (LANGUAGE_EXTENSIONS.rust.includes(ext)) {
178
- return 'rust';
179
- }
180
- if (LANGUAGE_EXTENSIONS.python.includes(ext)) {
181
- return 'python';
182
- }
183
- return null;
184
- }
185
- /**
186
- * Read file contents.
187
- */
188
- export function readFileContent(filePath) {
189
- return fs.readFileSync(filePath, 'utf-8');
190
- }
191
- /**
192
- * Get project statistics.
193
- */
194
- export function getProjectStats(files) {
195
- const byLanguage = {
196
- java: 0,
197
- c: 0,
198
- cpp: 0,
199
- javascript: 0,
200
- typescript: 0,
201
- rust: 0,
202
- python: 0,
203
- };
204
- for (const file of files) {
205
- byLanguage[file.language]++;
206
- }
207
- return {
208
- total: files.length,
209
- byLanguage,
210
- };
211
- }
212
- //# sourceMappingURL=discovery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/cli/discovery.ts"],"names":[],"mappings":"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"}