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.
Files changed (39) hide show
  1. package/README.md +113 -1
  2. package/dist/cli/commands/fix.d.ts +10 -0
  3. package/dist/cli/commands/fix.d.ts.map +1 -0
  4. package/dist/cli/commands/fix.js +218 -0
  5. package/dist/cli/commands/fix.js.map +1 -0
  6. package/dist/cli/commands/report.d.ts.map +1 -1
  7. package/dist/cli/commands/report.js +2 -1
  8. package/dist/cli/commands/report.js.map +1 -1
  9. package/dist/cli/index.js +3 -0
  10. package/dist/cli/index.js.map +1 -1
  11. package/dist/core/agents/agent-integrations.js +95 -0
  12. package/dist/core/agents/agent-integrations.js.map +1 -1
  13. package/dist/core/reporter/report-generator.d.ts +1 -0
  14. package/dist/core/reporter/report-generator.d.ts.map +1 -1
  15. package/dist/core/reporter/report-generator.js +37 -0
  16. package/dist/core/reporter/report-generator.js.map +1 -1
  17. package/dist/core/reporter/signature-report.template.d.ts +38 -0
  18. package/dist/core/reporter/signature-report.template.d.ts.map +1 -0
  19. package/dist/core/reporter/signature-report.template.js +597 -0
  20. package/dist/core/reporter/signature-report.template.js.map +1 -0
  21. package/dist/core/reporter/violation-reporter.d.ts.map +1 -1
  22. package/dist/core/reporter/violation-reporter.js +3 -0
  23. package/dist/core/reporter/violation-reporter.js.map +1 -1
  24. package/dist/core/rules/builtin/function-signature-matching.rule.d.ts +115 -0
  25. package/dist/core/rules/builtin/function-signature-matching.rule.d.ts.map +1 -0
  26. package/dist/core/rules/builtin/function-signature-matching.rule.js +850 -0
  27. package/dist/core/rules/builtin/function-signature-matching.rule.js.map +1 -0
  28. package/dist/core/rules/builtin/index.d.ts +1 -0
  29. package/dist/core/rules/builtin/index.d.ts.map +1 -1
  30. package/dist/core/rules/builtin/index.js +1 -0
  31. package/dist/core/rules/builtin/index.js.map +1 -1
  32. package/dist/core/rules/rule-engine.d.ts.map +1 -1
  33. package/dist/core/rules/rule-engine.js +2 -0
  34. package/dist/core/rules/rule-engine.js.map +1 -1
  35. package/dist/types/config.types.d.ts +2 -0
  36. package/dist/types/config.types.d.ts.map +1 -1
  37. package/dist/types/config.types.js +0 -2
  38. package/dist/types/config.types.js.map +1 -1
  39. 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
- - **12 Built-in Rules**: Comprehensive rule set for modern architectures
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":"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"}
@@ -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,SAwDtB,CAAC"}
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 violations = await ruleEngine.validate(graph);
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":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"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"}
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') {
@@ -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;AAElC,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"}
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;AAGhE,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;YAuRlB,kBAAkB;YAsClB,sBAAsB;IA4CpC,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,UAAU;CAQnB"}
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"}