camouf 0.3.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -1
- package/dist/cli/commands/fix.d.ts +10 -0
- package/dist/cli/commands/fix.d.ts.map +1 -0
- package/dist/cli/commands/fix.js +218 -0
- package/dist/cli/commands/fix.js.map +1 -0
- package/dist/cli/commands/report.d.ts.map +1 -1
- package/dist/cli/commands/report.js +2 -1
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/index.js +3 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/agents/agent-integrations.js +95 -0
- package/dist/core/agents/agent-integrations.js.map +1 -1
- package/dist/core/reporter/report-generator.d.ts +1 -0
- package/dist/core/reporter/report-generator.d.ts.map +1 -1
- package/dist/core/reporter/report-generator.js +37 -0
- package/dist/core/reporter/report-generator.js.map +1 -1
- package/dist/core/reporter/signature-report.template.d.ts +38 -0
- package/dist/core/reporter/signature-report.template.d.ts.map +1 -0
- package/dist/core/reporter/signature-report.template.js +597 -0
- package/dist/core/reporter/signature-report.template.js.map +1 -0
- package/dist/core/reporter/violation-reporter.d.ts.map +1 -1
- package/dist/core/reporter/violation-reporter.js +3 -0
- package/dist/core/reporter/violation-reporter.js.map +1 -1
- package/dist/core/rules/builtin/function-signature-matching.rule.d.ts +115 -0
- package/dist/core/rules/builtin/function-signature-matching.rule.d.ts.map +1 -0
- package/dist/core/rules/builtin/function-signature-matching.rule.js +850 -0
- package/dist/core/rules/builtin/function-signature-matching.rule.js.map +1 -0
- package/dist/core/rules/builtin/index.d.ts +1 -0
- package/dist/core/rules/builtin/index.d.ts.map +1 -1
- package/dist/core/rules/builtin/index.js +1 -0
- package/dist/core/rules/builtin/index.js.map +1 -1
- package/dist/core/rules/rule-engine.d.ts.map +1 -1
- package/dist/core/rules/rule-engine.js +2 -0
- package/dist/core/rules/rule-engine.js.map +1 -1
- package/dist/types/config.types.d.ts +2 -0
- package/dist/types/config.types.d.ts.map +1 -1
- package/dist/types/config.types.js +0 -2
- package/dist/types/config.types.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -14,15 +14,95 @@ Camouf is a powerful, multi-language CLI tool for monitoring and enforcing softw
|
|
|
14
14
|
- **Real-time Monitoring**: Watch mode for continuous architecture validation
|
|
15
15
|
- **Multi-language Support**: TypeScript, JavaScript, Python, Java, Go, Rust
|
|
16
16
|
- **Advanced Analysis**: Circular dependency detection, coupling metrics, hotspot identification
|
|
17
|
-
- **
|
|
17
|
+
- **13 Built-in Rules**: Comprehensive rule set for modern architectures
|
|
18
|
+
- **AI Agent Safety**: Detects function/field name mismatches from AI context loss
|
|
18
19
|
- **Security Scanning**: Detects hardcoded secrets, API keys, and credentials
|
|
19
20
|
- **Multiple Report Formats**: HTML, JSON, Markdown, SARIF
|
|
20
21
|
- **VS Code Integration**: Real-time Problems panel integration with custom tasks
|
|
21
22
|
- **Highly Configurable**: JSON, YAML, or JavaScript configuration
|
|
22
23
|
|
|
24
|
+
<p align="center">
|
|
25
|
+
<a href="docs/images/architecture-overview.svg">
|
|
26
|
+
<img src="docs/images/architecture-overview.svg" alt="Camouf Architecture Overview" width="800" />
|
|
27
|
+
</a>
|
|
28
|
+
</p>
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Function Signature Matching: Catch AI Agent Errors
|
|
33
|
+
|
|
34
|
+
AI coding agents like Claude Code and GitHub Copilot work with limited context windows.
|
|
35
|
+
When generating frontend code without full visibility into backend contracts, they often
|
|
36
|
+
use **similar but incorrect names** for functions and type fields.
|
|
37
|
+
|
|
38
|
+
These errors compile successfully but cause runtime failures.
|
|
39
|
+
|
|
40
|
+
### The Problem
|
|
41
|
+
|
|
42
|
+
<p align="center">
|
|
43
|
+
<a href="docs/images/problem-flow.svg">
|
|
44
|
+
<img src="docs/images/problem-flow.svg" alt="AI Context Loss Problem" width="800" />
|
|
45
|
+
</a>
|
|
46
|
+
</p>
|
|
47
|
+
|
|
48
|
+
### How Camouf Solves It
|
|
49
|
+
|
|
50
|
+
Camouf's `function-signature-matching` rule scans your shared contracts and uses
|
|
51
|
+
fuzzy matching to detect when code uses names that are *close but not exact*:
|
|
52
|
+
|
|
53
|
+
<p align="center">
|
|
54
|
+
<a href="docs/images/camouf-workflow.svg">
|
|
55
|
+
<img src="docs/images/camouf-workflow.svg" alt="Camouf Workflow" width="800" />
|
|
56
|
+
</a>
|
|
57
|
+
</p>
|
|
58
|
+
|
|
59
|
+
### Example Detection
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
Defined in shared/api.ts:15 Used in frontend/user.ts:42
|
|
63
|
+
getUserById(id) ◄────────── getUser(userId)
|
|
64
|
+
└── 75% similar, likely a typo
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Quick Fix Commands
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Interactive mode: confirm each fix
|
|
71
|
+
npx camouf fix-signatures --interactive
|
|
72
|
+
|
|
73
|
+
# Fix all mismatches automatically
|
|
74
|
+
npx camouf fix-signatures --all
|
|
75
|
+
|
|
76
|
+
# Fix a specific mismatch by ID
|
|
77
|
+
npx camouf fix --id sig-001
|
|
78
|
+
|
|
79
|
+
# Preview what would be fixed
|
|
80
|
+
npx camouf fix-signatures --all --dry-run
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Interactive HTML Report
|
|
84
|
+
|
|
85
|
+
Run validation to generate a report with clickable quick-fix commands:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npx camouf report --format html --output camouf-report/
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The report shows:
|
|
92
|
+
|
|
93
|
+
| Status | Type | Expected | Found | Quick Fix |
|
|
94
|
+
|--------|------|----------|-------|-----------|
|
|
95
|
+
| Error | Function | `getUserById` | `getUser` | `npx camouf fix --id sig-001` |
|
|
96
|
+
| Error | Field | `email` | `userEmail` | `npx camouf fix --id sig-002` |
|
|
97
|
+
|
|
98
|
+
See [AI Agent Challenges](docs/ai-agent-challenges.md) for a comprehensive guide on this feature.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
23
102
|
## Documentation
|
|
24
103
|
|
|
25
104
|
- [Getting Started](docs/getting-started.md)
|
|
105
|
+
- [AI Agent Challenges](docs/ai-agent-challenges.md) — How Camouf catches AI-generated code errors
|
|
26
106
|
- [Configuring Rules](docs/configuring-rules.md)
|
|
27
107
|
- [CI/CD Integration](docs/ci-cd-integration.md)
|
|
28
108
|
- [Changelog](CHANGELOG.md)
|
|
@@ -152,6 +232,36 @@ Options:
|
|
|
152
232
|
-f, --format <type> Report format (html, json, markdown)
|
|
153
233
|
```
|
|
154
234
|
|
|
235
|
+
### `camouf fix`
|
|
236
|
+
|
|
237
|
+
Apply a single quick-fix by ID.
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
camouf fix [options]
|
|
241
|
+
|
|
242
|
+
Options:
|
|
243
|
+
--id <id> Quick-fix ID (e.g., sig-001)
|
|
244
|
+
-c, --config <path> Path to configuration file
|
|
245
|
+
--dry-run Preview changes without applying
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### `camouf fix-signatures`
|
|
249
|
+
|
|
250
|
+
Fix all function/field signature mismatches.
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
camouf fix-signatures [options]
|
|
254
|
+
|
|
255
|
+
Options:
|
|
256
|
+
--all Fix all mismatches automatically
|
|
257
|
+
--interactive Confirm each fix interactively
|
|
258
|
+
--file <path> Fix only mismatches in specific file
|
|
259
|
+
--type <type> Fix only function or field mismatches
|
|
260
|
+
-c, --config <path> Path to configuration file
|
|
261
|
+
--dry-run Preview changes without applying
|
|
262
|
+
--ci CI/agent mode: no prompts, use --all for auto-fix
|
|
263
|
+
```
|
|
264
|
+
|
|
155
265
|
## Configuration
|
|
156
266
|
|
|
157
267
|
### Configuration File
|
|
@@ -195,6 +305,7 @@ Camouf supports multiple configuration formats:
|
|
|
195
305
|
"builtin": {
|
|
196
306
|
"layer-dependencies": "error",
|
|
197
307
|
"circular-dependencies": "error",
|
|
308
|
+
"function-signature-matching": "error",
|
|
198
309
|
"performance-antipatterns": "warn",
|
|
199
310
|
"type-safety": "warn",
|
|
200
311
|
"data-flow-integrity": "error",
|
|
@@ -223,6 +334,7 @@ Camouf supports multiple configuration formats:
|
|
|
223
334
|
| `circular-dependencies` | Detects circular dependency cycles | `error` |
|
|
224
335
|
| `contract-mismatch` | Validates API contracts (OpenAPI/GraphQL) | `error` |
|
|
225
336
|
| `ddd-boundaries` | Validates DDD principles and bounded contexts | `warn` |
|
|
337
|
+
| `function-signature-matching` | Detects mismatched function/field names between contracts and usage | `error` |
|
|
226
338
|
|
|
227
339
|
### Security Rules
|
|
228
340
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fix Command
|
|
3
|
+
*
|
|
4
|
+
* Applies fixes for signature mismatches and other fixable violations.
|
|
5
|
+
* Supports both single fix by ID and batch operations.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
export declare const fixCommand: Command;
|
|
9
|
+
export declare const fixSignaturesCommand: Command;
|
|
10
|
+
//# sourceMappingURL=fix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/fix.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,UAAU,SAYnB,CAAC;AAEL,eAAO,MAAM,oBAAoB,SAgB7B,CAAC"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fix Command
|
|
3
|
+
*
|
|
4
|
+
* Applies fixes for signature mismatches and other fixable violations.
|
|
5
|
+
* Supports both single fix by ID and batch operations.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import { ConfigurationManager } from '../../core/config/configuration-manager.js';
|
|
11
|
+
import { ProjectScanner } from '../../core/scanner/project-scanner.js';
|
|
12
|
+
import { RuleEngine } from '../../core/rules/rule-engine.js';
|
|
13
|
+
import { Logger } from '../../core/logger.js';
|
|
14
|
+
import ora from 'ora';
|
|
15
|
+
export const fixCommand = new Command('fix')
|
|
16
|
+
.description('Fix signature mismatches and other fixable violations')
|
|
17
|
+
.option('-c, --config <path>', 'Path to configuration file')
|
|
18
|
+
.option('--id <id>', 'Fix specific mismatch by ID (e.g., sig-001)')
|
|
19
|
+
.option('--file <path>', 'Fix all mismatches in a specific file')
|
|
20
|
+
.option('--type <type>', 'Fix all mismatches of a specific type (function-name, parameter-name, type-field)')
|
|
21
|
+
.option('--all', 'Fix all signature mismatches')
|
|
22
|
+
.option('--interactive', 'Interactive mode: confirm each fix')
|
|
23
|
+
.option('--dry-run', 'Show what would be fixed without making changes')
|
|
24
|
+
.option('--ci', 'CI/agent mode: no prompts, no spinners')
|
|
25
|
+
.action(async (options) => {
|
|
26
|
+
await executeFixAction(options);
|
|
27
|
+
});
|
|
28
|
+
export const fixSignaturesCommand = new Command('fix-signatures')
|
|
29
|
+
.description('Fix function signature mismatches (alias for fix with signature options)')
|
|
30
|
+
.option('-c, --config <path>', 'Path to configuration file')
|
|
31
|
+
.option('--type <type>', 'Fix type: function-name, parameter-name, type-field')
|
|
32
|
+
.option('--file <path>', 'Fix all in specific file')
|
|
33
|
+
.option('--all', 'Fix all signature mismatches')
|
|
34
|
+
.option('--interactive', 'Interactive mode')
|
|
35
|
+
.option('--dry-run', 'Show what would be fixed')
|
|
36
|
+
.option('--ci', 'CI mode')
|
|
37
|
+
.action(async (options) => {
|
|
38
|
+
// Default to interactive if no mode specified
|
|
39
|
+
if (!options.type && !options.file && !options.all && !options.interactive) {
|
|
40
|
+
options.interactive = true;
|
|
41
|
+
}
|
|
42
|
+
// Execute the same action as fix command
|
|
43
|
+
await executeFixAction(options);
|
|
44
|
+
});
|
|
45
|
+
async function executeFixAction(options) {
|
|
46
|
+
const isCIMode = options.ci || !!process.env.CI || !!process.env.CAMOUF_CI;
|
|
47
|
+
const spinner = isCIMode ? null : ora('Loading configuration...').start();
|
|
48
|
+
try {
|
|
49
|
+
// Load configuration
|
|
50
|
+
const configManager = new ConfigurationManager();
|
|
51
|
+
const config = await configManager.loadConfig(options.config);
|
|
52
|
+
if (!config) {
|
|
53
|
+
if (spinner)
|
|
54
|
+
spinner.fail('No configuration found');
|
|
55
|
+
Logger.error('Run "npx camouf init" to initialize configuration.');
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
// Scan project and run function-signature-matching rule
|
|
59
|
+
if (spinner)
|
|
60
|
+
spinner.text = 'Scanning for signature mismatches...';
|
|
61
|
+
const scanner = new ProjectScanner(config);
|
|
62
|
+
const ruleEngine = new RuleEngine(config);
|
|
63
|
+
// Only run function-signature-matching rule
|
|
64
|
+
ruleEngine.filterRules(['function-signature-matching']);
|
|
65
|
+
const graph = await scanner.scan();
|
|
66
|
+
const fileContents = scanner.getFileContents();
|
|
67
|
+
const violations = await ruleEngine.validate(graph, fileContents);
|
|
68
|
+
if (spinner)
|
|
69
|
+
spinner.succeed(`Found ${violations.length} signature mismatches`);
|
|
70
|
+
if (violations.length === 0) {
|
|
71
|
+
if (!isCIMode)
|
|
72
|
+
Logger.success('\nNo signature mismatches found!\n');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// Filter violations based on options
|
|
76
|
+
let targetViolations = violations.filter(v => v.ruleId === 'function-signature-matching');
|
|
77
|
+
if (options.id) {
|
|
78
|
+
targetViolations = targetViolations.filter(v => v.metadata?.mismatchId === options.id);
|
|
79
|
+
}
|
|
80
|
+
if (options.file) {
|
|
81
|
+
const targetPath = path.resolve(options.file);
|
|
82
|
+
targetViolations = targetViolations.filter(v => path.resolve(config.root, v.file).includes(targetPath));
|
|
83
|
+
}
|
|
84
|
+
if (options.type) {
|
|
85
|
+
targetViolations = targetViolations.filter(v => v.metadata?.mismatchType === options.type);
|
|
86
|
+
}
|
|
87
|
+
if (targetViolations.length === 0) {
|
|
88
|
+
Logger.warn('\nNo matching violations found with the given filters.\n');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// If no action specified, show available fixes
|
|
92
|
+
if (!options.all && !options.interactive && !options.id) {
|
|
93
|
+
Logger.info('\nAvailable fixes:\n');
|
|
94
|
+
Logger.info('Usage:');
|
|
95
|
+
Logger.info(' npx camouf fix --id sig-001 # Fix specific mismatch');
|
|
96
|
+
Logger.info(' npx camouf fix --file src/api.ts # Fix all in file');
|
|
97
|
+
Logger.info(' npx camouf fix --type function-name # Fix by type');
|
|
98
|
+
Logger.info(' npx camouf fix --all # Fix all mismatches');
|
|
99
|
+
Logger.info(' npx camouf fix --interactive # Interactive mode\n');
|
|
100
|
+
// Show summary of mismatches
|
|
101
|
+
console.log('\nMismatches by type:');
|
|
102
|
+
const byType = new Map();
|
|
103
|
+
violations.forEach(v => {
|
|
104
|
+
const type = String(v.metadata?.mismatchType || 'unknown');
|
|
105
|
+
byType.set(type, (byType.get(type) || 0) + 1);
|
|
106
|
+
});
|
|
107
|
+
byType.forEach((count, type) => {
|
|
108
|
+
console.log(` ${type}: ${count}`);
|
|
109
|
+
});
|
|
110
|
+
console.log('');
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
// Apply fixes
|
|
114
|
+
const fixes = [];
|
|
115
|
+
for (const violation of targetViolations) {
|
|
116
|
+
if (!violation.metadata)
|
|
117
|
+
continue;
|
|
118
|
+
const { expected, found, mismatchId, mismatchType } = violation.metadata;
|
|
119
|
+
if (expected && found && typeof expected === 'string' && typeof found === 'string') {
|
|
120
|
+
fixes.push({
|
|
121
|
+
id: String(mismatchId || 'unknown'),
|
|
122
|
+
file: violation.file,
|
|
123
|
+
line: violation.line || 0,
|
|
124
|
+
oldText: found,
|
|
125
|
+
newText: expected,
|
|
126
|
+
type: String(mismatchType || 'unknown'),
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (fixes.length === 0) {
|
|
131
|
+
Logger.warn('\nNo fixes could be generated from the violations.\n');
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
// Interactive mode
|
|
135
|
+
if (options.interactive && !isCIMode) {
|
|
136
|
+
Logger.info(`\nFound ${fixes.length} fixes to apply:\n`);
|
|
137
|
+
for (const fix of fixes) {
|
|
138
|
+
console.log(` [${fix.id}] ${fix.file}:${fix.line}`);
|
|
139
|
+
console.log(` ${fix.type}: "${fix.oldText}" → "${fix.newText}"`);
|
|
140
|
+
}
|
|
141
|
+
// In interactive mode, we'd use inquirer to confirm each fix
|
|
142
|
+
// For now, just show them
|
|
143
|
+
Logger.info('\nUse --all to apply all fixes, or --id <id> for specific fixes.\n');
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// Dry run mode
|
|
147
|
+
if (options.dryRun) {
|
|
148
|
+
Logger.info('\n[DRY RUN] Would apply the following fixes:\n');
|
|
149
|
+
for (const fix of fixes) {
|
|
150
|
+
console.log(` [${fix.id}] ${fix.file}:${fix.line}`);
|
|
151
|
+
console.log(` ${fix.type}: "${fix.oldText}" → "${fix.newText}"`);
|
|
152
|
+
}
|
|
153
|
+
Logger.info(`\n[DRY RUN] Would fix ${fixes.length} mismatch(es).\n`);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
// Group fixes by file
|
|
157
|
+
const fixesByFile = new Map();
|
|
158
|
+
for (const fix of fixes) {
|
|
159
|
+
const existing = fixesByFile.get(fix.file) || [];
|
|
160
|
+
existing.push(fix);
|
|
161
|
+
fixesByFile.set(fix.file, existing);
|
|
162
|
+
}
|
|
163
|
+
// Apply fixes
|
|
164
|
+
if (spinner)
|
|
165
|
+
spinner.text = 'Applying fixes...';
|
|
166
|
+
let appliedCount = 0;
|
|
167
|
+
for (const [filePath, fileFixes] of fixesByFile) {
|
|
168
|
+
try {
|
|
169
|
+
const absolutePath = path.resolve(config.root, filePath);
|
|
170
|
+
let content = fs.readFileSync(absolutePath, 'utf-8');
|
|
171
|
+
// Apply fixes in reverse line order to preserve line numbers
|
|
172
|
+
const sortedFixes = [...fileFixes].sort((a, b) => b.line - a.line);
|
|
173
|
+
for (const fix of sortedFixes) {
|
|
174
|
+
// Replace the old text with new text (word boundary aware)
|
|
175
|
+
const regex = new RegExp(`\\b${escapeRegExp(fix.oldText)}\\b`, 'g');
|
|
176
|
+
const newContent = content.replace(regex, fix.newText);
|
|
177
|
+
if (newContent !== content) {
|
|
178
|
+
content = newContent;
|
|
179
|
+
appliedCount++;
|
|
180
|
+
if (!isCIMode) {
|
|
181
|
+
Logger.info(` Fixed: ${filePath}:${fix.line} - "${fix.oldText}" → "${fix.newText}"`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Write back
|
|
186
|
+
fs.writeFileSync(absolutePath, content, 'utf-8');
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
Logger.error(`Failed to apply fixes to ${filePath}: ${error}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (spinner)
|
|
193
|
+
spinner.succeed(`Applied ${appliedCount} fixes`);
|
|
194
|
+
// Output results
|
|
195
|
+
if (isCIMode) {
|
|
196
|
+
console.log(JSON.stringify({
|
|
197
|
+
applied: appliedCount,
|
|
198
|
+
total: fixes.length,
|
|
199
|
+
files: Array.from(fixesByFile.keys()),
|
|
200
|
+
}));
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
Logger.success(`\nApplied ${appliedCount} fixes to ${fixesByFile.size} file(s).`);
|
|
204
|
+
Logger.info('Run "npx camouf validate" to verify the changes.\n');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
if (spinner)
|
|
209
|
+
spinner.fail(`Error: ${error}`);
|
|
210
|
+
else
|
|
211
|
+
console.error(`ERROR: ${error}`);
|
|
212
|
+
process.exit(1);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function escapeRegExp(str) {
|
|
216
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=fix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix.js","sourceRoot":"","sources":["../../../src/cli/commands/fix.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,GAAG,MAAM,KAAK,CAAC;AAWtB,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,WAAW,EAAE,6CAA6C,CAAC;KAClE,MAAM,CAAC,eAAe,EAAE,uCAAuC,CAAC;KAChE,MAAM,CAAC,eAAe,EAAE,mFAAmF,CAAC;KAC5G,MAAM,CAAC,OAAO,EAAE,8BAA8B,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,oCAAoC,CAAC;KAC7D,MAAM,CAAC,WAAW,EAAE,iDAAiD,CAAC;KACtE,MAAM,CAAC,MAAM,EAAE,wCAAwC,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;KAC9D,WAAW,CAAC,0EAA0E,CAAC;KACvF,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,eAAe,EAAE,qDAAqD,CAAC;KAC9E,MAAM,CAAC,eAAe,EAAE,0BAA0B,CAAC;KACnD,MAAM,CAAC,OAAO,EAAE,8BAA8B,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC;KAC3C,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;KAC/C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;KACzB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,8CAA8C;IAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3E,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAC7B,CAAC;IACD,yCAAyC;IACzC,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEL,KAAK,UAAU,gBAAgB,CAAC,OAS/B;IACC,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAC3E,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE1E,IAAI,CAAC;QACH,qBAAqB;QACrB,MAAM,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE9D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,wDAAwD;QACxD,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,GAAG,sCAAsC,CAAC;QAEnE,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAE1C,4CAA4C;QAC5C,UAAU,CAAC,WAAW,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAExD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAElE,IAAI,OAAO;YAAE,OAAO,CAAC,OAAO,CAAC,SAAS,UAAU,CAAC,MAAM,uBAAuB,CAAC,CAAC;QAEhF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ;gBAAE,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,qCAAqC;QACrC,IAAI,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,6BAA6B,CAAC,CAAC;QAE1F,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACf,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7C,CAAC,CAAC,QAAQ,EAAE,UAAU,KAAK,OAAO,CAAC,EAAE,CACtC,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9C,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CACvD,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7C,CAAC,CAAC,QAAQ,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAC1C,CAAC;QACJ,CAAC;QAED,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QAED,+CAA+C;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACpE,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACnE,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YACvE,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YAEvE,6BAA6B;YAC7B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;YACzC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACrB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,IAAI,SAAS,CAAC,CAAC;gBAC3D,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,OAAO;QACT,CAAC;QAED,cAAc;QACd,MAAM,KAAK,GAAkB,EAAE,CAAC;QAEhC,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,QAAQ;gBAAE,SAAS;YAElC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC;YAEzE,IAAI,QAAQ,IAAI,KAAK,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACnF,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,MAAM,CAAC,UAAU,IAAI,SAAS,CAAC;oBACnC,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC;oBACzB,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,QAAQ;oBACjB,IAAI,EAAE,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC;iBACxC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,mBAAmB;QACnB,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,MAAM,oBAAoB,CAAC,CAAC;YAEzD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;YACtE,CAAC;YAED,6DAA6D;YAC7D,0BAA0B;YAC1B,MAAM,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;YAClF,OAAO;QACT,CAAC;QAED,eAAe;QACf,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAE9D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,yBAAyB,KAAK,CAAC,MAAM,kBAAkB,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;QACrD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;QAED,cAAc;QACd,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAEhD,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBACzD,IAAI,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBAErD,6DAA6D;gBAC7D,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBAEnE,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;oBAC9B,2DAA2D;oBAC3D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACpE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;oBAEvD,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;wBAC3B,OAAO,GAAG,UAAU,CAAC;wBACrB,YAAY,EAAE,CAAC;wBAEf,IAAI,CAAC,QAAQ,EAAE,CAAC;4BACd,MAAM,CAAC,IAAI,CAAC,YAAY,QAAQ,IAAI,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,OAAO,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;wBACxF,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,aAAa;gBACb,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAEnD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,4BAA4B,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,IAAI,OAAO;YAAE,OAAO,CAAC,OAAO,CAAC,WAAW,YAAY,QAAQ,CAAC,CAAC;QAE9D,iBAAiB;QACjB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,OAAO,EAAE,YAAY;gBACrB,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;aACtC,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,aAAa,YAAY,aAAa,WAAW,CAAC,IAAI,WAAW,CAAC,CAAC;YAClF,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACpE,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;;YACxC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,aAAa,SAyDtB,CAAC"}
|
|
@@ -38,7 +38,8 @@ export const reportCommand = new Command('report')
|
|
|
38
38
|
spinner.succeed(`Scanned ${graph.nodeCount()} files`);
|
|
39
39
|
// Validate
|
|
40
40
|
spinner.start('Running validation...');
|
|
41
|
-
const
|
|
41
|
+
const fileContents = scanner.getFileContents();
|
|
42
|
+
const violations = await ruleEngine.validate(graph, fileContents);
|
|
42
43
|
spinner.succeed(`Found ${violations.length} violations`);
|
|
43
44
|
// Generate report
|
|
44
45
|
spinner.start('Generating report...');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,EAAE,MAAM,CAAC;KAChF,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,iBAAiB,CAAC;KACtE,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,CAAC;KAC3D,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;KACvD,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;KACzD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,qBAAqB;QACrB,MAAM,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE9D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,wBAAwB;QACxB,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAEpD,eAAe;QACf,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEtD,WAAW;QACX,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,EAAE,MAAM,CAAC;KAChF,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,iBAAiB,CAAC;KACtE,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,CAAC;KAC3D,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;KACvD,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;KACzD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,qBAAqB;QACrB,MAAM,aAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE9D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,wBAAwB;QACxB,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAEpD,eAAe;QACf,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEtD,WAAW;QACX,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAClE,OAAO,CAAC,OAAO,CAAC,SAAS,UAAU,CAAC,MAAM,aAAa,CAAC,CAAC;QAEzD,kBAAkB;QAClB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACtC,MAAM,eAAe,CAAC,QAAQ,CAAC;YAC7B,KAAK;YACL,UAAU;YACV,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,uBAAuB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzD,MAAM,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,MAAM,mDAAmD,CAAC,CAAC;IAEzF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,6BAA8B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import { watchCommand } from './commands/watch.js';
|
|
|
11
11
|
import { validateCommand } from './commands/validate.js';
|
|
12
12
|
import { analyzeCommand } from './commands/analyze.js';
|
|
13
13
|
import { reportCommand } from './commands/report.js';
|
|
14
|
+
import { fixCommand, fixSignaturesCommand } from './commands/fix.js';
|
|
14
15
|
import { Logger } from '../core/logger.js';
|
|
15
16
|
import { version, description } from './version.js';
|
|
16
17
|
const program = new Command();
|
|
@@ -30,6 +31,8 @@ program.addCommand(watchCommand);
|
|
|
30
31
|
program.addCommand(validateCommand);
|
|
31
32
|
program.addCommand(analyzeCommand);
|
|
32
33
|
program.addCommand(reportCommand);
|
|
34
|
+
program.addCommand(fixCommand);
|
|
35
|
+
program.addCommand(fixSignaturesCommand);
|
|
33
36
|
// Error handling
|
|
34
37
|
program.exitOverride((err) => {
|
|
35
38
|
if (err.code === 'commander.help' || err.code === 'commander.version') {
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,WAAW,CAAC;KACxB,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,6BAA6B,CAAC,CAAC;AAEpE,iBAAiB;AACjB,OAAO;KACJ,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;KAC5C,MAAM,CAAC,UAAU,EAAE,mCAAmC,CAAC;KACvD,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;AAElD,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,WAAW,CAAC;KACxB,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,6BAA6B,CAAC,CAAC;AAEpE,iBAAiB;AACjB,OAAO;KACJ,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;KAC5C,MAAM,CAAC,UAAU,EAAE,mCAAmC,CAAC;KACvD,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;AAElD,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAEzC,iBAAiB;AACjB,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE;IAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,yBAAyB,IAAI,GAAG,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;QAClF,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,kBAAkB;AAClB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC/C,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -68,6 +68,15 @@ async function generateClaudeIntegration(projectRoot, result, options) {
|
|
|
68
68
|
else {
|
|
69
69
|
result.filesSkipped.push('.claude/commands/camouf-fix.md');
|
|
70
70
|
}
|
|
71
|
+
// 3b. Generate .claude/commands/camouf-fix-signatures.md
|
|
72
|
+
const fixSignaturesCommandPath = path.join(claudeCommandsDir, 'camouf-fix-signatures.md');
|
|
73
|
+
if (!fs.existsSync(fixSignaturesCommandPath) || options.force) {
|
|
74
|
+
fs.writeFileSync(fixSignaturesCommandPath, getClaudeFixSignaturesCommand());
|
|
75
|
+
result.filesCreated.push('.claude/commands/camouf-fix-signatures.md');
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
result.filesSkipped.push('.claude/commands/camouf-fix-signatures.md');
|
|
79
|
+
}
|
|
71
80
|
// 4. Generate .claude/rules/camouf.md
|
|
72
81
|
const claudeRulesDir = path.join(projectRoot, '.claude', 'rules');
|
|
73
82
|
if (!fs.existsSync(claudeRulesDir)) {
|
|
@@ -144,6 +153,7 @@ Camouf validates 12 builtin rules (configured in \`camouf.config.json\`):
|
|
|
144
153
|
| \`api-versioning\` | API endpoints must include version prefix |
|
|
145
154
|
| \`data-flow-integrity\` | Input validation and output sanitization required |
|
|
146
155
|
| \`contract-mismatch\` | Shared types must be consistent across layers |
|
|
156
|
+
| \`function-signature-matching\` | Function names and parameters must match across frontend/backend |
|
|
147
157
|
| \`distributed-transactions\` | Multi-service calls need saga/compensation |
|
|
148
158
|
| \`resilience-patterns\` | HTTP calls need timeout, retry, circuit breaker |
|
|
149
159
|
|
|
@@ -245,6 +255,75 @@ Run Camouf to find and fix architecture violations.
|
|
|
245
255
|
- **security-context**: Add authentication/authorization guards to routes
|
|
246
256
|
- **performance-antipatterns**: Replace N+1 queries with batch operations, sync I/O with async
|
|
247
257
|
- **type-safety**: Replace \`any\` with proper types, add return type annotations
|
|
258
|
+
- **function-signature-matching**: Rename functions/fields to match the shared contract definition
|
|
259
|
+
`;
|
|
260
|
+
}
|
|
261
|
+
function getClaudeFixSignaturesCommand() {
|
|
262
|
+
return `---
|
|
263
|
+
description: Fix function signature mismatches between frontend and backend code
|
|
264
|
+
allowed-tools: Read, Grep, Bash, Write
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
Fix function signature mismatches detected by Camouf.
|
|
268
|
+
|
|
269
|
+
**Important**: Always use \`npx camouf\` to run Camouf. Do NOT use \`node camouf.js\` or bare \`camouf\`.
|
|
270
|
+
|
|
271
|
+
## Background
|
|
272
|
+
|
|
273
|
+
AI coding agents often work with limited context windows and may create mismatched function names
|
|
274
|
+
or type field names between frontend and backend code. For example:
|
|
275
|
+
|
|
276
|
+
- Backend defines \`getUserById(id)\` but frontend calls \`getUser(userId)\`
|
|
277
|
+
- Shared DTO has \`email\` field but frontend accesses \`userEmail\`
|
|
278
|
+
|
|
279
|
+
These mismatches compile successfully but cause runtime errors.
|
|
280
|
+
|
|
281
|
+
## Steps
|
|
282
|
+
|
|
283
|
+
1. Run: \`npx camouf validate --format json --ci --rules function-signature-matching\`
|
|
284
|
+
2. Parse the JSON output to find violations with \`ruleId: "function-signature-matching"\`
|
|
285
|
+
3. For each violation:
|
|
286
|
+
- The \`metadata.expected\` field contains the correct name (as defined in shared contracts)
|
|
287
|
+
- The \`metadata.found\` field contains the incorrect name being used
|
|
288
|
+
- The \`metadata.definedIn\` shows where the correct definition is
|
|
289
|
+
- Read the file at \`violation.file\` line \`violation.line\`
|
|
290
|
+
- Rename \`found\` to \`expected\` in that location
|
|
291
|
+
4. Re-run validation to confirm fixes
|
|
292
|
+
5. Report summary of fixes applied
|
|
293
|
+
|
|
294
|
+
## Alternative: Use the fix command
|
|
295
|
+
|
|
296
|
+
You can also use Camouf's built-in fix command:
|
|
297
|
+
|
|
298
|
+
\`\`\`bash
|
|
299
|
+
# Interactive mode - confirm each fix
|
|
300
|
+
npx camouf fix-signatures --interactive
|
|
301
|
+
|
|
302
|
+
# Fix all automatically
|
|
303
|
+
npx camouf fix-signatures --all
|
|
304
|
+
|
|
305
|
+
# Fix specific mismatch by ID
|
|
306
|
+
npx camouf fix --id sig-001
|
|
307
|
+
|
|
308
|
+
# Dry run to see what would be fixed
|
|
309
|
+
npx camouf fix-signatures --all --dry-run
|
|
310
|
+
\`\`\`
|
|
311
|
+
|
|
312
|
+
## Example Violation
|
|
313
|
+
|
|
314
|
+
\`\`\`json
|
|
315
|
+
{
|
|
316
|
+
"ruleId": "function-signature-matching",
|
|
317
|
+
"message": "Function name mismatch: 'getUser' called but 'getUserById' is defined",
|
|
318
|
+
"file": "src/frontend/api.ts",
|
|
319
|
+
"line": 42,
|
|
320
|
+
"metadata": {
|
|
321
|
+
"expected": "getUserById",
|
|
322
|
+
"found": "getUser",
|
|
323
|
+
"definedIn": { "file": "src/shared/api-contracts.ts", "line": 15 }
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
\`\`\`
|
|
248
327
|
`;
|
|
249
328
|
}
|
|
250
329
|
function getClaudeRule() {
|
|
@@ -332,9 +411,25 @@ The following rules are enforced (configured in \`camouf.config.json\`):
|
|
|
332
411
|
- \`api-versioning\` — API endpoints must include version prefix
|
|
333
412
|
- \`data-flow-integrity\` — Input validation and output sanitization
|
|
334
413
|
- \`contract-mismatch\` — Shared types must be consistent
|
|
414
|
+
- \`function-signature-matching\` — Function/field names must match across frontend/backend
|
|
335
415
|
- \`distributed-transactions\` — Multi-service calls need saga/compensation
|
|
336
416
|
- \`resilience-patterns\` — HTTP calls need timeout, retry, circuit breaker
|
|
337
417
|
|
|
418
|
+
### Signature Mismatch Fixing
|
|
419
|
+
|
|
420
|
+
Camouf can detect and fix function/field name mismatches caused by AI context loss:
|
|
421
|
+
|
|
422
|
+
\`\`\`bash
|
|
423
|
+
# Find signature mismatches
|
|
424
|
+
npx camouf validate --format json --ci --rules function-signature-matching
|
|
425
|
+
|
|
426
|
+
# Fix all mismatches
|
|
427
|
+
npx camouf fix-signatures --all
|
|
428
|
+
|
|
429
|
+
# Fix single mismatch
|
|
430
|
+
npx camouf fix --id sig-001
|
|
431
|
+
\`\`\`
|
|
432
|
+
|
|
338
433
|
### Workflow
|
|
339
434
|
|
|
340
435
|
1. Before committing code changes, run \`npx camouf validate --format json --ci\`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-integrations.js","sourceRoot":"","sources":["../../../src/core/agents/agent-integrations.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-integrations.js","sourceRoot":"","sources":["../../../src/core/agents/agent-integrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@ export declare class ReportGenerator {
|
|
|
20
20
|
constructor(config: CamoufConfig);
|
|
21
21
|
generate(options: ReportOptions): Promise<void>;
|
|
22
22
|
private generateHtmlReport;
|
|
23
|
+
private generateSignatureReport;
|
|
23
24
|
private generateJsonReport;
|
|
24
25
|
private generateMarkdownReport;
|
|
25
26
|
private calculateSummary;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-generator.d.ts","sourceRoot":"","sources":["../../../src/core/reporter/report-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"report-generator.d.ts","sourceRoot":"","sources":["../../../src/core/reporter/report-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAIhE,UAAU,aAAa;IACrB,KAAK,EAAE,eAAe,CAAC;IACvB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAI1B,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAsBvC,kBAAkB;YA6RlB,uBAAuB;YA8CvB,kBAAkB;YAsClB,sBAAsB;IA4CpC,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,UAAU;CAQnB"}
|