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.
- package/CHANGELOG.md +63 -0
- package/dist/llm/ax-client.d.ts.map +1 -1
- package/dist/llm/ax-client.js +36 -10
- package/dist/llm/ax-client.js.map +1 -1
- package/package.json +2 -2
- package/dist/cli/args.d.ts +0 -86
- package/dist/cli/args.d.ts.map +0 -1
- package/dist/cli/args.js +0 -653
- package/dist/cli/args.js.map +0 -1
- package/dist/cli/colors.d.ts +0 -31
- package/dist/cli/colors.d.ts.map +0 -1
- package/dist/cli/colors.js +0 -80
- package/dist/cli/colors.js.map +0 -1
- package/dist/cli/commands/analyze-skill.d.ts +0 -33
- package/dist/cli/commands/analyze-skill.d.ts.map +0 -1
- package/dist/cli/commands/analyze-skill.js +0 -217
- package/dist/cli/commands/analyze-skill.js.map +0 -1
- package/dist/cli/commands/analyze.d.ts +0 -19
- package/dist/cli/commands/analyze.d.ts.map +0 -1
- package/dist/cli/commands/analyze.js +0 -303
- package/dist/cli/commands/analyze.js.map +0 -1
- package/dist/cli/commands/benchmark-runner.d.ts +0 -42
- package/dist/cli/commands/benchmark-runner.d.ts.map +0 -1
- package/dist/cli/commands/benchmark-runner.js +0 -18
- package/dist/cli/commands/benchmark-runner.js.map +0 -1
- package/dist/cli/commands/benchmark.d.ts +0 -11
- package/dist/cli/commands/benchmark.d.ts.map +0 -1
- package/dist/cli/commands/benchmark.js +0 -90
- package/dist/cli/commands/benchmark.js.map +0 -1
- package/dist/cli/commands/cluster.d.ts +0 -12
- package/dist/cli/commands/cluster.d.ts.map +0 -1
- package/dist/cli/commands/cluster.js +0 -203
- package/dist/cli/commands/cluster.js.map +0 -1
- package/dist/cli/commands/compare.d.ts +0 -13
- package/dist/cli/commands/compare.d.ts.map +0 -1
- package/dist/cli/commands/compare.js +0 -109
- package/dist/cli/commands/compare.js.map +0 -1
- package/dist/cli/commands/dead-code.d.ts +0 -11
- package/dist/cli/commands/dead-code.d.ts.map +0 -1
- package/dist/cli/commands/dead-code.js +0 -75
- package/dist/cli/commands/dead-code.js.map +0 -1
- package/dist/cli/commands/generate-spec.d.ts +0 -11
- package/dist/cli/commands/generate-spec.d.ts.map +0 -1
- package/dist/cli/commands/generate-spec.js +0 -120
- package/dist/cli/commands/generate-spec.js.map +0 -1
- package/dist/cli/commands/health.d.ts +0 -11
- package/dist/cli/commands/health.d.ts.map +0 -1
- package/dist/cli/commands/health.js +0 -76
- package/dist/cli/commands/health.js.map +0 -1
- package/dist/cli/commands/index.d.ts +0 -30
- package/dist/cli/commands/index.d.ts.map +0 -1
- package/dist/cli/commands/index.js +0 -36
- package/dist/cli/commands/index.js.map +0 -1
- package/dist/cli/commands/metrics.d.ts +0 -12
- package/dist/cli/commands/metrics.d.ts.map +0 -1
- package/dist/cli/commands/metrics.js +0 -231
- package/dist/cli/commands/metrics.js.map +0 -1
- package/dist/cli/commands/project.d.ts +0 -21
- package/dist/cli/commands/project.d.ts.map +0 -1
- package/dist/cli/commands/project.js +0 -92
- package/dist/cli/commands/project.js.map +0 -1
- package/dist/cli/commands/quality.d.ts +0 -15
- package/dist/cli/commands/quality.d.ts.map +0 -1
- package/dist/cli/commands/quality.js +0 -86
- package/dist/cli/commands/quality.js.map +0 -1
- package/dist/cli/commands/scan.d.ts +0 -11
- package/dist/cli/commands/scan.d.ts.map +0 -1
- package/dist/cli/commands/scan.js +0 -102
- package/dist/cli/commands/scan.js.map +0 -1
- package/dist/cli/commands/secrets.d.ts +0 -11
- package/dist/cli/commands/secrets.d.ts.map +0 -1
- package/dist/cli/commands/secrets.js +0 -79
- package/dist/cli/commands/secrets.js.map +0 -1
- package/dist/cli/commands/spec-diff.d.ts +0 -12
- package/dist/cli/commands/spec-diff.d.ts.map +0 -1
- package/dist/cli/commands/spec-diff.js +0 -150
- package/dist/cli/commands/spec-diff.js.map +0 -1
- package/dist/cli/commands/swarm.d.ts +0 -21
- package/dist/cli/commands/swarm.d.ts.map +0 -1
- package/dist/cli/commands/swarm.js +0 -175
- package/dist/cli/commands/swarm.js.map +0 -1
- package/dist/cli/commands/trust.d.ts +0 -23
- package/dist/cli/commands/trust.d.ts.map +0 -1
- package/dist/cli/commands/trust.js +0 -397
- package/dist/cli/commands/trust.js.map +0 -1
- package/dist/cli/commands/understand.d.ts +0 -12
- package/dist/cli/commands/understand.d.ts.map +0 -1
- package/dist/cli/commands/understand.js +0 -188
- package/dist/cli/commands/understand.js.map +0 -1
- package/dist/cli/config.d.ts +0 -161
- package/dist/cli/config.d.ts.map +0 -1
- package/dist/cli/config.js +0 -383
- package/dist/cli/config.js.map +0 -1
- package/dist/cli/discovery.d.ts +0 -31
- package/dist/cli/discovery.d.ts.map +0 -1
- package/dist/cli/discovery.js +0 -212
- package/dist/cli/discovery.js.map +0 -1
- package/dist/cli/effective-options.d.ts +0 -42
- package/dist/cli/effective-options.d.ts.map +0 -1
- package/dist/cli/effective-options.js +0 -80
- package/dist/cli/effective-options.js.map +0 -1
- package/dist/cli/file-collection.d.ts +0 -49
- package/dist/cli/file-collection.d.ts.map +0 -1
- package/dist/cli/file-collection.js +0 -142
- package/dist/cli/file-collection.js.map +0 -1
- package/dist/cli/formatters/index.d.ts +0 -15
- package/dist/cli/formatters/index.d.ts.map +0 -1
- package/dist/cli/formatters/index.js +0 -51
- package/dist/cli/formatters/index.js.map +0 -1
- package/dist/cli/formatters/json.d.ts +0 -11
- package/dist/cli/formatters/json.d.ts.map +0 -1
- package/dist/cli/formatters/json.js +0 -12
- package/dist/cli/formatters/json.js.map +0 -1
- package/dist/cli/formatters/project-json.d.ts +0 -11
- package/dist/cli/formatters/project-json.d.ts.map +0 -1
- package/dist/cli/formatters/project-json.js +0 -12
- package/dist/cli/formatters/project-json.js.map +0 -1
- package/dist/cli/formatters/project-sarif.d.ts +0 -11
- package/dist/cli/formatters/project-sarif.d.ts.map +0 -1
- package/dist/cli/formatters/project-sarif.js +0 -127
- package/dist/cli/formatters/project-sarif.js.map +0 -1
- package/dist/cli/formatters/project-summary.d.ts +0 -11
- package/dist/cli/formatters/project-summary.d.ts.map +0 -1
- package/dist/cli/formatters/project-summary.js +0 -202
- package/dist/cli/formatters/project-summary.js.map +0 -1
- package/dist/cli/formatters/sarif-shared.d.ts +0 -101
- package/dist/cli/formatters/sarif-shared.d.ts.map +0 -1
- package/dist/cli/formatters/sarif-shared.js +0 -57
- package/dist/cli/formatters/sarif-shared.js.map +0 -1
- package/dist/cli/formatters/sarif.d.ts +0 -12
- package/dist/cli/formatters/sarif.d.ts.map +0 -1
- package/dist/cli/formatters/sarif.js +0 -92
- package/dist/cli/formatters/sarif.js.map +0 -1
- package/dist/cli/formatters/summary.d.ts +0 -11
- package/dist/cli/formatters/summary.d.ts.map +0 -1
- package/dist/cli/formatters/summary.js +0 -240
- package/dist/cli/formatters/summary.js.map +0 -1
- package/dist/cli/formatters/two-phase-summary.d.ts +0 -11
- package/dist/cli/formatters/two-phase-summary.d.ts.map +0 -1
- package/dist/cli/formatters/two-phase-summary.js +0 -188
- package/dist/cli/formatters/two-phase-summary.js.map +0 -1
- package/dist/cli/index.d.ts +0 -10
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -72
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/program.d.ts +0 -117
- package/dist/cli/program.d.ts.map +0 -1
- package/dist/cli/program.js +0 -825
- package/dist/cli/program.js.map +0 -1
package/dist/cli/config.js
DELETED
|
@@ -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
|
package/dist/cli/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/discovery.d.ts
DELETED
|
@@ -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"}
|
package/dist/cli/discovery.js
DELETED
|
@@ -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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"}
|