agentlint 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -1
- package/README.md +51 -2
- package/dist/baseline/index.d.ts +61 -0
- package/dist/baseline/index.d.ts.map +1 -0
- package/dist/baseline/index.js +207 -0
- package/dist/baseline/index.js.map +1 -0
- package/dist/baseline/types.d.ts +43 -0
- package/dist/baseline/types.d.ts.map +1 -0
- package/dist/baseline/types.js +6 -0
- package/dist/baseline/types.js.map +1 -0
- package/dist/cli/index.js +101 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/fixer/index.d.ts +46 -0
- package/dist/fixer/index.d.ts.map +1 -0
- package/dist/fixer/index.js +257 -0
- package/dist/fixer/index.js.map +1 -0
- package/dist/fixer/types.d.ts +59 -0
- package/dist/fixer/types.d.ts.map +1 -0
- package/dist/fixer/types.js +17 -0
- package/dist/fixer/types.js.map +1 -0
- package/package.json +10 -10
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.2.0] - 2026-01-11
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Auto-fix**: Automatically fix simple issues with `--fix` and `--dry-run` flags
|
|
15
|
+
- OBS-002: Adds permission manifest comment
|
|
16
|
+
- **Baseline support**: Suppress known findings with baseline files
|
|
17
|
+
- `--update-baseline`: Create/update baseline from current findings
|
|
18
|
+
- `--ignore-baseline`: Report all findings regardless of baseline
|
|
19
|
+
- `--prune-baseline`: Remove fixed findings from baseline
|
|
20
|
+
- `--baseline <path>`: Custom baseline file path
|
|
21
|
+
- **Integrations**:
|
|
22
|
+
- [agentlint-action](https://github.com/akz4ol/agentlint-action): Native GitHub Action
|
|
23
|
+
- [agentlint-vscode](https://github.com/akz4ol/agentlint-vscode): VS Code extension
|
|
24
|
+
- Pre-commit hook support
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- CLI now respects `.agentlint-baseline.json` automatically when present
|
|
29
|
+
|
|
10
30
|
## [0.1.0] - 2025-01-11
|
|
11
31
|
|
|
12
32
|
### Added
|
|
@@ -28,5 +48,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
28
48
|
- **Diff analysis**: Behavioral change detection between versions
|
|
29
49
|
- **Permission manifest**: Recommended permissions generation
|
|
30
50
|
|
|
31
|
-
[Unreleased]: https://github.com/akz4ol/agentlint/compare/v0.
|
|
51
|
+
[Unreleased]: https://github.com/akz4ol/agentlint/compare/v0.2.0...HEAD
|
|
52
|
+
[0.2.0]: https://github.com/akz4ol/agentlint/compare/v0.1.0...v0.2.0
|
|
32
53
|
[0.1.0]: https://github.com/akz4ol/agentlint/releases/tag/v0.1.0
|
package/README.md
CHANGED
|
@@ -173,6 +173,43 @@ agentlint init
|
|
|
173
173
|
agentlint init --ci github # Include GitHub Actions workflow
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
+
## Auto-Fix
|
|
177
|
+
|
|
178
|
+
Automatically fix simple issues:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# Preview fixes without applying
|
|
182
|
+
agentlint scan --dry-run --fix
|
|
183
|
+
|
|
184
|
+
# Apply fixes
|
|
185
|
+
agentlint scan --fix
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Currently fixable rules:
|
|
189
|
+
- `OBS-002`: Adds permission manifest comment
|
|
190
|
+
|
|
191
|
+
## Baseline
|
|
192
|
+
|
|
193
|
+
Suppress known findings to focus on new issues:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# Create/update baseline with current findings
|
|
197
|
+
agentlint scan --update-baseline
|
|
198
|
+
|
|
199
|
+
# Scan respects baseline automatically
|
|
200
|
+
agentlint scan
|
|
201
|
+
# Output: "Baseline: 15 known finding(s) suppressed"
|
|
202
|
+
|
|
203
|
+
# Ignore baseline to see all findings
|
|
204
|
+
agentlint scan --ignore-baseline
|
|
205
|
+
|
|
206
|
+
# Remove fixed findings from baseline
|
|
207
|
+
agentlint scan --prune-baseline
|
|
208
|
+
|
|
209
|
+
# Use custom baseline path
|
|
210
|
+
agentlint scan --baseline path/to/baseline.json
|
|
211
|
+
```
|
|
212
|
+
|
|
176
213
|
## Diff Mode
|
|
177
214
|
|
|
178
215
|
Detect behavioral changes between versions:
|
|
@@ -205,6 +242,14 @@ Status: FAIL (capability expansion detected)
|
|
|
205
242
|
|
|
206
243
|
AgentLint is purpose-built for AI agent configs. General linters miss agent-specific risks.
|
|
207
244
|
|
|
245
|
+
## Integrations
|
|
246
|
+
|
|
247
|
+
| Tool | Link |
|
|
248
|
+
|------|------|
|
|
249
|
+
| **VS Code** | [agentlint-vscode](https://github.com/akz4ol/agentlint-vscode) |
|
|
250
|
+
| **GitHub Action** | [agentlint-action](https://github.com/akz4ol/agentlint-action) |
|
|
251
|
+
| **Pre-commit** | [docs/pre-commit.md](docs/pre-commit.md) |
|
|
252
|
+
|
|
208
253
|
## Roadmap
|
|
209
254
|
|
|
210
255
|
- [x] Claude Code support (`.claude/`, `CLAUDE.md`)
|
|
@@ -212,8 +257,11 @@ AgentLint is purpose-built for AI agent configs. General linters miss agent-spec
|
|
|
212
257
|
- [x] 20 security rules
|
|
213
258
|
- [x] SARIF output for GitHub
|
|
214
259
|
- [x] Diff mode
|
|
215
|
-
- [
|
|
216
|
-
- [
|
|
260
|
+
- [x] VS Code extension
|
|
261
|
+
- [x] GitHub Action (native)
|
|
262
|
+
- [x] Pre-commit hook
|
|
263
|
+
- [x] Auto-fix for common issues
|
|
264
|
+
- [x] Baseline support for suppressing known findings
|
|
217
265
|
- [ ] Policy-as-code engine
|
|
218
266
|
- [ ] Signed skill packs
|
|
219
267
|
- [ ] Agent config registry
|
|
@@ -223,6 +271,7 @@ AgentLint is purpose-built for AI agent configs. General linters miss agent-spec
|
|
|
223
271
|
- [CLI Reference](docs/cli.md)
|
|
224
272
|
- [FAQ](docs/faq.md)
|
|
225
273
|
- [Architecture](docs/design.md)
|
|
274
|
+
- [Pre-commit Hook](docs/pre-commit.md)
|
|
226
275
|
- [Contributing](CONTRIBUTING.md)
|
|
227
276
|
- [Security Policy](SECURITY.md)
|
|
228
277
|
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline manager for tracking and suppressing known findings
|
|
3
|
+
*/
|
|
4
|
+
import { Finding } from '../ir/types';
|
|
5
|
+
import { Baseline, BaselineFilterResult } from './types';
|
|
6
|
+
export * from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Baseline manager class
|
|
9
|
+
*/
|
|
10
|
+
export declare class BaselineManager {
|
|
11
|
+
private baselinePath;
|
|
12
|
+
private baseline;
|
|
13
|
+
constructor(rootDir: string, customPath?: string);
|
|
14
|
+
/**
|
|
15
|
+
* Load baseline from file
|
|
16
|
+
*/
|
|
17
|
+
load(): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Check if a baseline exists
|
|
20
|
+
*/
|
|
21
|
+
exists(): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Get the baseline path
|
|
24
|
+
*/
|
|
25
|
+
getPath(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Create a new baseline from findings
|
|
28
|
+
*/
|
|
29
|
+
create(findings: Finding[], reason?: string): Baseline;
|
|
30
|
+
/**
|
|
31
|
+
* Update baseline with new findings (add to existing)
|
|
32
|
+
*/
|
|
33
|
+
update(findings: Finding[], reason?: string): Baseline;
|
|
34
|
+
/**
|
|
35
|
+
* Save baseline to file
|
|
36
|
+
*/
|
|
37
|
+
save(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Filter findings against baseline, returning only new findings
|
|
40
|
+
*/
|
|
41
|
+
filterFindings(findings: Finding[]): {
|
|
42
|
+
filtered: Finding[];
|
|
43
|
+
result: BaselineFilterResult;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Remove fixed findings from baseline
|
|
47
|
+
*/
|
|
48
|
+
prune(currentFindings: Finding[]): number;
|
|
49
|
+
/**
|
|
50
|
+
* Get baseline stats
|
|
51
|
+
*/
|
|
52
|
+
getStats(): {
|
|
53
|
+
total: number;
|
|
54
|
+
byRule: Record<string, number>;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Convert a Finding to a BaselinedFinding
|
|
58
|
+
*/
|
|
59
|
+
private findingToBaseline;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/baseline/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAoB,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE3E,cAAc,SAAS,CAAC;AAIxB;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAIhD;;OAEG;IACH,IAAI,IAAI,OAAO;IAef;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ;IAatD;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ;IAoBtD;;OAEG;IACH,IAAI,IAAI,IAAI;IAYZ;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG;QACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,EAAE,oBAAoB,CAAC;KAC9B;IAuCD;;OAEG;IACH,KAAK,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,MAAM;IAsBzC;;OAEG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAgB7D;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAS1B"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Baseline manager for tracking and suppressing known findings
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
39
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.BaselineManager = void 0;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
__exportStar(require("./types"), exports);
|
|
46
|
+
const BASELINE_FILENAME = '.agentlint-baseline.json';
|
|
47
|
+
/**
|
|
48
|
+
* Baseline manager class
|
|
49
|
+
*/
|
|
50
|
+
class BaselineManager {
|
|
51
|
+
baselinePath;
|
|
52
|
+
baseline = null;
|
|
53
|
+
constructor(rootDir, customPath) {
|
|
54
|
+
this.baselinePath = customPath || path.join(rootDir, BASELINE_FILENAME);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Load baseline from file
|
|
58
|
+
*/
|
|
59
|
+
load() {
|
|
60
|
+
if (!fs.existsSync(this.baselinePath)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const content = fs.readFileSync(this.baselinePath, 'utf-8');
|
|
65
|
+
this.baseline = JSON.parse(content);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
console.error(`Failed to load baseline: ${err}`);
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if a baseline exists
|
|
75
|
+
*/
|
|
76
|
+
exists() {
|
|
77
|
+
return fs.existsSync(this.baselinePath);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get the baseline path
|
|
81
|
+
*/
|
|
82
|
+
getPath() {
|
|
83
|
+
return this.baselinePath;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create a new baseline from findings
|
|
87
|
+
*/
|
|
88
|
+
create(findings, reason) {
|
|
89
|
+
const now = new Date().toISOString();
|
|
90
|
+
this.baseline = {
|
|
91
|
+
version: 1,
|
|
92
|
+
created_at: now,
|
|
93
|
+
updated_at: now,
|
|
94
|
+
findings: findings.map(f => this.findingToBaseline(f, reason)),
|
|
95
|
+
};
|
|
96
|
+
return this.baseline;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Update baseline with new findings (add to existing)
|
|
100
|
+
*/
|
|
101
|
+
update(findings, reason) {
|
|
102
|
+
if (!this.baseline) {
|
|
103
|
+
return this.create(findings, reason);
|
|
104
|
+
}
|
|
105
|
+
const now = new Date().toISOString();
|
|
106
|
+
const existingFingerprints = new Set(this.baseline.findings.map(f => f.fingerprint));
|
|
107
|
+
// Add new findings that aren't already baselined
|
|
108
|
+
for (const finding of findings) {
|
|
109
|
+
const fingerprint = finding.fingerprints.stable;
|
|
110
|
+
if (!existingFingerprints.has(fingerprint)) {
|
|
111
|
+
this.baseline.findings.push(this.findingToBaseline(finding, reason));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
this.baseline.updated_at = now;
|
|
115
|
+
return this.baseline;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Save baseline to file
|
|
119
|
+
*/
|
|
120
|
+
save() {
|
|
121
|
+
if (!this.baseline) {
|
|
122
|
+
throw new Error('No baseline to save');
|
|
123
|
+
}
|
|
124
|
+
fs.writeFileSync(this.baselinePath, JSON.stringify(this.baseline, null, 2), 'utf-8');
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Filter findings against baseline, returning only new findings
|
|
128
|
+
*/
|
|
129
|
+
filterFindings(findings) {
|
|
130
|
+
if (!this.baseline) {
|
|
131
|
+
return {
|
|
132
|
+
filtered: findings,
|
|
133
|
+
result: {
|
|
134
|
+
newFindings: findings.length,
|
|
135
|
+
suppressedFindings: 0,
|
|
136
|
+
fixedFindings: 0,
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const baselineFingerprints = new Set(this.baseline.findings.map(f => f.fingerprint));
|
|
141
|
+
const matchedFingerprints = new Set();
|
|
142
|
+
const filtered = findings.filter(finding => {
|
|
143
|
+
const fingerprint = finding.fingerprints.stable;
|
|
144
|
+
if (baselineFingerprints.has(fingerprint)) {
|
|
145
|
+
matchedFingerprints.add(fingerprint);
|
|
146
|
+
return false; // Suppress
|
|
147
|
+
}
|
|
148
|
+
return true; // New finding
|
|
149
|
+
});
|
|
150
|
+
// Count fixed findings (in baseline but not in current findings)
|
|
151
|
+
const fixedFindings = this.baseline.findings.filter(bf => !matchedFingerprints.has(bf.fingerprint)).length;
|
|
152
|
+
return {
|
|
153
|
+
filtered,
|
|
154
|
+
result: {
|
|
155
|
+
newFindings: filtered.length,
|
|
156
|
+
suppressedFindings: findings.length - filtered.length,
|
|
157
|
+
fixedFindings,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Remove fixed findings from baseline
|
|
163
|
+
*/
|
|
164
|
+
prune(currentFindings) {
|
|
165
|
+
if (!this.baseline) {
|
|
166
|
+
return 0;
|
|
167
|
+
}
|
|
168
|
+
const currentFingerprints = new Set(currentFindings.map(f => f.fingerprints.stable));
|
|
169
|
+
const before = this.baseline.findings.length;
|
|
170
|
+
this.baseline.findings = this.baseline.findings.filter(bf => currentFingerprints.has(bf.fingerprint));
|
|
171
|
+
const removed = before - this.baseline.findings.length;
|
|
172
|
+
if (removed > 0) {
|
|
173
|
+
this.baseline.updated_at = new Date().toISOString();
|
|
174
|
+
}
|
|
175
|
+
return removed;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get baseline stats
|
|
179
|
+
*/
|
|
180
|
+
getStats() {
|
|
181
|
+
if (!this.baseline) {
|
|
182
|
+
return { total: 0, byRule: {} };
|
|
183
|
+
}
|
|
184
|
+
const byRule = {};
|
|
185
|
+
for (const f of this.baseline.findings) {
|
|
186
|
+
byRule[f.rule_id] = (byRule[f.rule_id] || 0) + 1;
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
total: this.baseline.findings.length,
|
|
190
|
+
byRule,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Convert a Finding to a BaselinedFinding
|
|
195
|
+
*/
|
|
196
|
+
findingToBaseline(finding, reason) {
|
|
197
|
+
return {
|
|
198
|
+
rule_id: finding.rule_id,
|
|
199
|
+
path: finding.location.path,
|
|
200
|
+
fingerprint: finding.fingerprints.stable,
|
|
201
|
+
baselined_at: new Date().toISOString(),
|
|
202
|
+
reason,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exports.BaselineManager = BaselineManager;
|
|
207
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/baseline/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Baseline types for tracking known findings
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* A baselined finding that should be suppressed
|
|
6
|
+
*/
|
|
7
|
+
export interface BaselinedFinding {
|
|
8
|
+
/** Rule ID */
|
|
9
|
+
rule_id: string;
|
|
10
|
+
/** File path */
|
|
11
|
+
path: string;
|
|
12
|
+
/** Stable fingerprint for matching */
|
|
13
|
+
fingerprint: string;
|
|
14
|
+
/** When the finding was baselined */
|
|
15
|
+
baselined_at: string;
|
|
16
|
+
/** Optional reason for baselining */
|
|
17
|
+
reason?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Baseline file format
|
|
21
|
+
*/
|
|
22
|
+
export interface Baseline {
|
|
23
|
+
/** Baseline schema version */
|
|
24
|
+
version: 1;
|
|
25
|
+
/** When the baseline was created */
|
|
26
|
+
created_at: string;
|
|
27
|
+
/** When the baseline was last updated */
|
|
28
|
+
updated_at: string;
|
|
29
|
+
/** Baselined findings */
|
|
30
|
+
findings: BaselinedFinding[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Result of filtering findings against baseline
|
|
34
|
+
*/
|
|
35
|
+
export interface BaselineFilterResult {
|
|
36
|
+
/** New findings not in baseline */
|
|
37
|
+
newFindings: number;
|
|
38
|
+
/** Findings that match baseline */
|
|
39
|
+
suppressedFindings: number;
|
|
40
|
+
/** Baseline entries that no longer match any finding (fixed) */
|
|
41
|
+
fixedFindings: number;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/baseline/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,8BAA8B;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,aAAa,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/baseline/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/dist/cli/index.js
CHANGED
|
@@ -46,7 +46,9 @@ const loader_1 = require("../policy/loader");
|
|
|
46
46
|
const engine_1 = require("../rules/engine");
|
|
47
47
|
const reports_1 = require("../reports");
|
|
48
48
|
const diff_1 = require("../diff");
|
|
49
|
-
const
|
|
49
|
+
const fixer_1 = require("../fixer");
|
|
50
|
+
const baseline_1 = require("../baseline");
|
|
51
|
+
const VERSION = '0.2.0';
|
|
50
52
|
const program = new commander_1.Command();
|
|
51
53
|
program
|
|
52
54
|
.name('agentlint')
|
|
@@ -73,6 +75,12 @@ program
|
|
|
73
75
|
.option('--tool <tool>', 'Tool mode: claude|cursor|auto', 'auto')
|
|
74
76
|
.option('--emit-ir', 'Include IR in JSON output')
|
|
75
77
|
.option('--permissions-only', 'Output only recommended permission manifest')
|
|
78
|
+
.option('--fix', 'Auto-fix fixable issues')
|
|
79
|
+
.option('--dry-run', 'Show what would be fixed without making changes')
|
|
80
|
+
.option('--baseline <path>', 'Path to baseline file for suppressing known findings')
|
|
81
|
+
.option('--update-baseline', 'Update baseline with current findings')
|
|
82
|
+
.option('--ignore-baseline', 'Ignore baseline and report all findings')
|
|
83
|
+
.option('--prune-baseline', 'Remove fixed findings from baseline')
|
|
76
84
|
.action(async (scanPath, options) => {
|
|
77
85
|
const globalOpts = program.opts();
|
|
78
86
|
const targetPath = scanPath || process.cwd();
|
|
@@ -120,6 +128,98 @@ program
|
|
|
120
128
|
});
|
|
121
129
|
try {
|
|
122
130
|
const result = await scanner.scan();
|
|
131
|
+
// Handle fix mode
|
|
132
|
+
if (options.fix || options.dryRun) {
|
|
133
|
+
const fixer = new fixer_1.Fixer({
|
|
134
|
+
rootDir: path.resolve(targetPath),
|
|
135
|
+
dryRun: options.dryRun || false,
|
|
136
|
+
});
|
|
137
|
+
const fixResult = await fixer.fixAll(result.findings, result.capabilitySummary);
|
|
138
|
+
if (options.dryRun) {
|
|
139
|
+
console.log('Dry run - no changes made\n');
|
|
140
|
+
}
|
|
141
|
+
if (fixResult.applied > 0) {
|
|
142
|
+
console.log(`Fixed ${fixResult.applied} issue(s) in ${fixResult.modifiedFiles.length} file(s):`);
|
|
143
|
+
for (const fix of fixResult.fixes.filter(f => f.success)) {
|
|
144
|
+
console.log(` [${fix.ruleId}] ${fix.path}: ${fix.description}`);
|
|
145
|
+
}
|
|
146
|
+
console.log();
|
|
147
|
+
}
|
|
148
|
+
if (fixResult.skipped > 0) {
|
|
149
|
+
console.log(`Skipped ${fixResult.skipped} issue(s) (not auto-fixable)`);
|
|
150
|
+
console.log();
|
|
151
|
+
}
|
|
152
|
+
if (fixResult.errors.length > 0) {
|
|
153
|
+
console.error('Errors:');
|
|
154
|
+
fixResult.errors.forEach(e => console.error(` ${e}`));
|
|
155
|
+
}
|
|
156
|
+
// Re-scan after fixes if not dry run
|
|
157
|
+
if (!options.dryRun && fixResult.applied > 0) {
|
|
158
|
+
const newResult = await scanner.scan();
|
|
159
|
+
result.findings = newResult.findings;
|
|
160
|
+
result.exitCode = newResult.exitCode;
|
|
161
|
+
result.status = newResult.status;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Handle baseline
|
|
165
|
+
const baselineManager = new baseline_1.BaselineManager(path.resolve(targetPath), options.baseline);
|
|
166
|
+
if (options.updateBaseline) {
|
|
167
|
+
// Update baseline with current findings
|
|
168
|
+
const existed = baselineManager.exists();
|
|
169
|
+
if (existed) {
|
|
170
|
+
baselineManager.load();
|
|
171
|
+
}
|
|
172
|
+
baselineManager.update(result.findings, 'Baselined via --update-baseline');
|
|
173
|
+
baselineManager.save();
|
|
174
|
+
const stats = baselineManager.getStats();
|
|
175
|
+
console.log(`Baseline ${existed ? 'updated' : 'created'}: ${baselineManager.getPath()}`);
|
|
176
|
+
console.log(` Total baselined findings: ${stats.total}`);
|
|
177
|
+
for (const [rule, count] of Object.entries(stats.byRule)) {
|
|
178
|
+
console.log(` ${rule}: ${count}`);
|
|
179
|
+
}
|
|
180
|
+
console.log();
|
|
181
|
+
}
|
|
182
|
+
else if (options.pruneBaseline) {
|
|
183
|
+
// Remove fixed findings from baseline
|
|
184
|
+
if (!baselineManager.exists()) {
|
|
185
|
+
console.error('No baseline file found to prune');
|
|
186
|
+
process.exit(2);
|
|
187
|
+
}
|
|
188
|
+
baselineManager.load();
|
|
189
|
+
const removed = baselineManager.prune(result.findings);
|
|
190
|
+
baselineManager.save();
|
|
191
|
+
console.log(`Pruned ${removed} fixed finding(s) from baseline`);
|
|
192
|
+
console.log();
|
|
193
|
+
}
|
|
194
|
+
else if (!options.ignoreBaseline && baselineManager.exists()) {
|
|
195
|
+
// Filter findings against baseline
|
|
196
|
+
baselineManager.load();
|
|
197
|
+
const { filtered, result: baselineResult } = baselineManager.filterFindings(result.findings);
|
|
198
|
+
if (baselineResult.suppressedFindings > 0) {
|
|
199
|
+
console.log(`Baseline: ${baselineResult.suppressedFindings} known finding(s) suppressed`);
|
|
200
|
+
if (baselineResult.fixedFindings > 0) {
|
|
201
|
+
console.log(` ${baselineResult.fixedFindings} baselined finding(s) appear to be fixed`);
|
|
202
|
+
}
|
|
203
|
+
console.log();
|
|
204
|
+
}
|
|
205
|
+
// Update result with filtered findings
|
|
206
|
+
result.findings = filtered;
|
|
207
|
+
// Recalculate exit code based on filtered findings
|
|
208
|
+
const highCount = filtered.filter(f => f.severity === 'high').length;
|
|
209
|
+
const mediumCount = filtered.filter(f => f.severity === 'medium').length;
|
|
210
|
+
if (highCount > 0 && ['high'].includes(policy.policy.fail_on)) {
|
|
211
|
+
result.exitCode = 1;
|
|
212
|
+
result.status = 'fail';
|
|
213
|
+
}
|
|
214
|
+
else if (mediumCount > 0 && ['medium', 'high'].includes(policy.policy.fail_on)) {
|
|
215
|
+
result.exitCode = 1;
|
|
216
|
+
result.status = 'fail';
|
|
217
|
+
}
|
|
218
|
+
else if (filtered.length === 0) {
|
|
219
|
+
result.exitCode = 0;
|
|
220
|
+
result.status = 'pass';
|
|
221
|
+
}
|
|
222
|
+
}
|
|
123
223
|
// Handle permissions-only mode
|
|
124
224
|
if (options.permissionsOnly) {
|
|
125
225
|
const output = JSON.stringify(result.recommendedPermissions, null, 2);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-fixer for AgentLint findings
|
|
3
|
+
*/
|
|
4
|
+
import { Finding, CapabilitySummary } from '../ir/types';
|
|
5
|
+
import { FixResult } from './types';
|
|
6
|
+
export * from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Fixer class for auto-fixing findings
|
|
9
|
+
*/
|
|
10
|
+
export declare class Fixer {
|
|
11
|
+
private rootDir;
|
|
12
|
+
private dryRun;
|
|
13
|
+
constructor(options: {
|
|
14
|
+
rootDir: string;
|
|
15
|
+
dryRun?: boolean;
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* Check if a finding is auto-fixable
|
|
19
|
+
*/
|
|
20
|
+
isFixable(finding: Finding): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Get list of fixable rule IDs
|
|
23
|
+
*/
|
|
24
|
+
getFixableRules(): string[];
|
|
25
|
+
/**
|
|
26
|
+
* Fix all fixable findings
|
|
27
|
+
*/
|
|
28
|
+
fixAll(findings: Finding[], capabilitySummary: CapabilitySummary): Promise<FixResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Generate fixes for findings in a file
|
|
31
|
+
*/
|
|
32
|
+
private generateFixes;
|
|
33
|
+
/**
|
|
34
|
+
* Generate fix for adding permission manifest (OBS-002)
|
|
35
|
+
*/
|
|
36
|
+
private generateManifestFix;
|
|
37
|
+
/**
|
|
38
|
+
* Generate permission manifest comment
|
|
39
|
+
*/
|
|
40
|
+
private generatePermissionManifest;
|
|
41
|
+
/**
|
|
42
|
+
* Apply fixes to a file
|
|
43
|
+
*/
|
|
44
|
+
private applyFixes;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fixer/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAO,SAAS,EAA6B,MAAM,SAAS,CAAC;AAEpE,cAAc,SAAS,CAAC;AAExB;;GAEG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAU;gBAEZ,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IAK1D;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAIpC;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACG,MAAM,CACV,QAAQ,EAAE,OAAO,EAAE,EACnB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,SAAS,CAAC;IA2CrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAuBrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAmClC;;OAEG;YACW,UAAU;CA4FzB"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-fixer for AgentLint findings
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
39
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.Fixer = void 0;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const types_1 = require("./types");
|
|
46
|
+
__exportStar(require("./types"), exports);
|
|
47
|
+
/**
|
|
48
|
+
* Fixer class for auto-fixing findings
|
|
49
|
+
*/
|
|
50
|
+
class Fixer {
|
|
51
|
+
rootDir;
|
|
52
|
+
dryRun;
|
|
53
|
+
constructor(options) {
|
|
54
|
+
this.rootDir = options.rootDir;
|
|
55
|
+
this.dryRun = options.dryRun ?? false;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if a finding is auto-fixable
|
|
59
|
+
*/
|
|
60
|
+
isFixable(finding) {
|
|
61
|
+
return finding.rule_id in types_1.FIXABLE_RULES && types_1.FIXABLE_RULES[finding.rule_id].canFix;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get list of fixable rule IDs
|
|
65
|
+
*/
|
|
66
|
+
getFixableRules() {
|
|
67
|
+
return Object.keys(types_1.FIXABLE_RULES);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Fix all fixable findings
|
|
71
|
+
*/
|
|
72
|
+
async fixAll(findings, capabilitySummary) {
|
|
73
|
+
const result = {
|
|
74
|
+
applied: 0,
|
|
75
|
+
skipped: 0,
|
|
76
|
+
modifiedFiles: [],
|
|
77
|
+
fixes: [],
|
|
78
|
+
errors: [],
|
|
79
|
+
};
|
|
80
|
+
// Group findings by file
|
|
81
|
+
const findingsByFile = new Map();
|
|
82
|
+
for (const finding of findings) {
|
|
83
|
+
const filePath = finding.location.path;
|
|
84
|
+
if (!findingsByFile.has(filePath)) {
|
|
85
|
+
findingsByFile.set(filePath, []);
|
|
86
|
+
}
|
|
87
|
+
findingsByFile.get(filePath).push(finding);
|
|
88
|
+
}
|
|
89
|
+
// Process each file
|
|
90
|
+
for (const [filePath, fileFindings] of findingsByFile) {
|
|
91
|
+
const fixes = this.generateFixes(fileFindings, capabilitySummary);
|
|
92
|
+
if (fixes.length === 0) {
|
|
93
|
+
result.skipped += fileFindings.length;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const applyResult = await this.applyFixes(filePath, fixes);
|
|
97
|
+
result.fixes.push(...applyResult.fixes);
|
|
98
|
+
result.applied += applyResult.applied;
|
|
99
|
+
result.skipped += fileFindings.length - applyResult.applied;
|
|
100
|
+
result.errors.push(...applyResult.errors);
|
|
101
|
+
if (applyResult.applied > 0) {
|
|
102
|
+
result.modifiedFiles.push(filePath);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Generate fixes for findings in a file
|
|
109
|
+
*/
|
|
110
|
+
generateFixes(findings, capabilitySummary) {
|
|
111
|
+
const fixes = [];
|
|
112
|
+
for (const finding of findings) {
|
|
113
|
+
if (!this.isFixable(finding)) {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const strategy = types_1.FIXABLE_RULES[finding.rule_id];
|
|
117
|
+
switch (strategy.strategy) {
|
|
118
|
+
case 'add-manifest':
|
|
119
|
+
fixes.push(this.generateManifestFix(finding, capabilitySummary));
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return fixes.filter((f) => f !== null);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Generate fix for adding permission manifest (OBS-002)
|
|
127
|
+
*/
|
|
128
|
+
generateManifestFix(finding, capabilitySummary) {
|
|
129
|
+
const manifest = this.generatePermissionManifest(capabilitySummary);
|
|
130
|
+
return {
|
|
131
|
+
path: finding.location.path,
|
|
132
|
+
description: 'Add permission manifest comment',
|
|
133
|
+
ruleId: finding.rule_id,
|
|
134
|
+
type: 'insert',
|
|
135
|
+
line: 1,
|
|
136
|
+
replacement: manifest + '\n\n',
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Generate permission manifest comment
|
|
141
|
+
*/
|
|
142
|
+
generatePermissionManifest(capabilitySummary) {
|
|
143
|
+
const lines = [
|
|
144
|
+
'<!-- agentlint:permissions',
|
|
145
|
+
' filesystem:',
|
|
146
|
+
];
|
|
147
|
+
if (capabilitySummary.filesystem.read.length > 0) {
|
|
148
|
+
lines.push(` read: ${JSON.stringify(capabilitySummary.filesystem.read)}`);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
lines.push(' read: ["**/*"]');
|
|
152
|
+
}
|
|
153
|
+
if (capabilitySummary.filesystem.write.length > 0) {
|
|
154
|
+
lines.push(` write: ${JSON.stringify(capabilitySummary.filesystem.write)}`);
|
|
155
|
+
}
|
|
156
|
+
lines.push(' shell_exec:');
|
|
157
|
+
lines.push(` enabled: ${capabilitySummary.shell_exec.enabled}`);
|
|
158
|
+
if (capabilitySummary.shell_exec.examples.length > 0) {
|
|
159
|
+
lines.push(` allowed_commands: ${JSON.stringify(capabilitySummary.shell_exec.examples.slice(0, 5))}`);
|
|
160
|
+
}
|
|
161
|
+
lines.push(' network:');
|
|
162
|
+
lines.push(` outbound: ${capabilitySummary.network.outbound}`);
|
|
163
|
+
if (capabilitySummary.network.allowed_domains.length > 0) {
|
|
164
|
+
lines.push(` allowed_domains: ${JSON.stringify(capabilitySummary.network.allowed_domains)}`);
|
|
165
|
+
}
|
|
166
|
+
lines.push('-->');
|
|
167
|
+
return lines.join('\n');
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Apply fixes to a file
|
|
171
|
+
*/
|
|
172
|
+
async applyFixes(filePath, fixes) {
|
|
173
|
+
const result = {
|
|
174
|
+
fixes: [],
|
|
175
|
+
applied: 0,
|
|
176
|
+
errors: [],
|
|
177
|
+
};
|
|
178
|
+
const fullPath = path.join(this.rootDir, filePath);
|
|
179
|
+
let content;
|
|
180
|
+
try {
|
|
181
|
+
content = fs.readFileSync(fullPath, 'utf-8');
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
result.errors.push(`Failed to read ${filePath}: ${err}`);
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
// Sort fixes by line number descending so we can apply from bottom up
|
|
188
|
+
const sortedFixes = [...fixes].sort((a, b) => b.line - a.line);
|
|
189
|
+
let modified = content;
|
|
190
|
+
const lines = modified.split('\n');
|
|
191
|
+
for (const fix of sortedFixes) {
|
|
192
|
+
try {
|
|
193
|
+
switch (fix.type) {
|
|
194
|
+
case 'insert':
|
|
195
|
+
// Insert at beginning of specified line
|
|
196
|
+
lines.splice(fix.line - 1, 0, ...(fix.replacement || '').split('\n'));
|
|
197
|
+
result.fixes.push({
|
|
198
|
+
path: filePath,
|
|
199
|
+
ruleId: fix.ruleId,
|
|
200
|
+
description: fix.description,
|
|
201
|
+
success: true,
|
|
202
|
+
});
|
|
203
|
+
result.applied++;
|
|
204
|
+
break;
|
|
205
|
+
case 'replace':
|
|
206
|
+
if (fix.original && fix.replacement) {
|
|
207
|
+
const lineContent = lines[fix.line - 1];
|
|
208
|
+
if (lineContent.includes(fix.original)) {
|
|
209
|
+
lines[fix.line - 1] = lineContent.replace(fix.original, fix.replacement);
|
|
210
|
+
result.fixes.push({
|
|
211
|
+
path: filePath,
|
|
212
|
+
ruleId: fix.ruleId,
|
|
213
|
+
description: fix.description,
|
|
214
|
+
success: true,
|
|
215
|
+
});
|
|
216
|
+
result.applied++;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
break;
|
|
220
|
+
case 'delete':
|
|
221
|
+
lines.splice(fix.line - 1, 1);
|
|
222
|
+
result.fixes.push({
|
|
223
|
+
path: filePath,
|
|
224
|
+
ruleId: fix.ruleId,
|
|
225
|
+
description: fix.description,
|
|
226
|
+
success: true,
|
|
227
|
+
});
|
|
228
|
+
result.applied++;
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
result.fixes.push({
|
|
234
|
+
path: filePath,
|
|
235
|
+
ruleId: fix.ruleId,
|
|
236
|
+
description: fix.description,
|
|
237
|
+
success: false,
|
|
238
|
+
error: String(err),
|
|
239
|
+
});
|
|
240
|
+
result.errors.push(`Failed to apply fix ${fix.ruleId} to ${filePath}: ${err}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// Write back if not dry run and we made changes
|
|
244
|
+
if (!this.dryRun && result.applied > 0) {
|
|
245
|
+
try {
|
|
246
|
+
modified = lines.join('\n');
|
|
247
|
+
fs.writeFileSync(fullPath, modified, 'utf-8');
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
result.errors.push(`Failed to write ${filePath}: ${err}`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return result;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
exports.Fixer = Fixer;
|
|
257
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fixer/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAE7B,mCAAoE;AAEpE,0CAAwB;AAExB;;GAEG;AACH,MAAa,KAAK;IACR,OAAO,CAAS;IAChB,MAAM,CAAU;IAExB,YAAY,OAA8C;QACxD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAgB;QACxB,OAAO,OAAO,CAAC,OAAO,IAAI,qBAAa,IAAI,qBAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACnF,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,MAAM,CAAC,IAAI,CAAC,qBAAa,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,QAAmB,EACnB,iBAAoC;QAEpC,MAAM,MAAM,GAAc;YACxB,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;YACV,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,yBAAyB;QACzB,MAAM,cAAc,GAAG,IAAI,GAAG,EAAqB,CAAC;QACpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YACvC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACnC,CAAC;YACD,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QAED,oBAAoB;QACpB,KAAK,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,cAAc,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;YAElE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC;gBACtC,SAAS;YACX,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAE3D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC;YACtC,MAAM,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAE1C,IAAI,WAAW,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,aAAa,CACnB,QAAmB,EACnB,iBAAoC;QAEpC,MAAM,KAAK,GAAU,EAAE,CAAC;QAExB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,qBAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAEhD,QAAQ,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBAC1B,KAAK,cAAc;oBACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;oBACjE,MAAM;YACV,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAY,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,OAAgB,EAChB,iBAAoC;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,CAAC;QAEpE,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;YAC3B,WAAW,EAAE,iCAAiC;YAC9C,MAAM,EAAE,OAAO,CAAC,OAAO;YACvB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC;YACP,WAAW,EAAE,QAAQ,GAAG,MAAM;SAC/B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,0BAA0B,CAAC,iBAAoC;QACrE,MAAM,KAAK,GAAa;YACtB,4BAA4B;YAC5B,eAAe;SAChB,CAAC;QAEF,IAAI,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,gBAAgB,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAEnE,IAAI,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3G,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,iBAAiB,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAElE,IAAI,iBAAiB,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAClG,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CACtB,QAAgB,EAChB,KAAY;QAEZ,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,EAAkB;YACzB,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,EAAc;SACvB,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEnD,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;YACzD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,sEAAsE;QACtE,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAE/D,IAAI,QAAQ,GAAG,OAAO,CAAC;QACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEnC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;oBACjB,KAAK,QAAQ;wBACX,wCAAwC;wBACxC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;wBACtE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;4BAChB,IAAI,EAAE,QAAQ;4BACd,MAAM,EAAE,GAAG,CAAC,MAAM;4BAClB,WAAW,EAAE,GAAG,CAAC,WAAW;4BAC5B,OAAO,EAAE,IAAI;yBACd,CAAC,CAAC;wBACH,MAAM,CAAC,OAAO,EAAE,CAAC;wBACjB,MAAM;oBAER,KAAK,SAAS;wBACZ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;4BACpC,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;4BACxC,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gCACvC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;gCACzE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;oCAChB,IAAI,EAAE,QAAQ;oCACd,MAAM,EAAE,GAAG,CAAC,MAAM;oCAClB,WAAW,EAAE,GAAG,CAAC,WAAW;oCAC5B,OAAO,EAAE,IAAI;iCACd,CAAC,CAAC;gCACH,MAAM,CAAC,OAAO,EAAE,CAAC;4BACnB,CAAC;wBACH,CAAC;wBACD,MAAM;oBAER,KAAK,QAAQ;wBACX,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;4BAChB,IAAI,EAAE,QAAQ;4BACd,MAAM,EAAE,GAAG,CAAC,MAAM;4BAClB,WAAW,EAAE,GAAG,CAAC,WAAW;4BAC5B,OAAO,EAAE,IAAI;yBACd,CAAC,CAAC;wBACH,MAAM,CAAC,OAAO,EAAE,CAAC;wBACjB,MAAM;gBACV,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,WAAW,EAAE,GAAG,CAAC,WAAW;oBAC5B,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;iBACnB,CAAC,CAAC;gBACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,MAAM,OAAO,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5B,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA1PD,sBA0PC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fixer types and interfaces
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* A fix that can be applied to a file
|
|
6
|
+
*/
|
|
7
|
+
export interface Fix {
|
|
8
|
+
/** The file path to modify */
|
|
9
|
+
path: string;
|
|
10
|
+
/** Description of the fix */
|
|
11
|
+
description: string;
|
|
12
|
+
/** The rule ID this fix addresses */
|
|
13
|
+
ruleId: string;
|
|
14
|
+
/** Type of fix operation */
|
|
15
|
+
type: 'insert' | 'replace' | 'delete';
|
|
16
|
+
/** Line number to apply fix (1-indexed) */
|
|
17
|
+
line: number;
|
|
18
|
+
/** Column number (for replace/delete) */
|
|
19
|
+
column?: number;
|
|
20
|
+
/** Original text (for replace/delete) */
|
|
21
|
+
original?: string;
|
|
22
|
+
/** New text (for insert/replace) */
|
|
23
|
+
replacement?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Result of attempting to fix findings
|
|
27
|
+
*/
|
|
28
|
+
export interface FixResult {
|
|
29
|
+
/** Number of fixes applied */
|
|
30
|
+
applied: number;
|
|
31
|
+
/** Number of fixes skipped (not auto-fixable) */
|
|
32
|
+
skipped: number;
|
|
33
|
+
/** Files that were modified */
|
|
34
|
+
modifiedFiles: string[];
|
|
35
|
+
/** Details of each fix */
|
|
36
|
+
fixes: AppliedFix[];
|
|
37
|
+
/** Errors encountered */
|
|
38
|
+
errors: string[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A fix that was applied
|
|
42
|
+
*/
|
|
43
|
+
export interface AppliedFix {
|
|
44
|
+
path: string;
|
|
45
|
+
ruleId: string;
|
|
46
|
+
description: string;
|
|
47
|
+
success: boolean;
|
|
48
|
+
error?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Rules that support auto-fix
|
|
52
|
+
*/
|
|
53
|
+
export declare const FIXABLE_RULES: Record<string, FixStrategy>;
|
|
54
|
+
export interface FixStrategy {
|
|
55
|
+
description: string;
|
|
56
|
+
canFix: boolean;
|
|
57
|
+
strategy: string;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fixer/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,WAAW,GAAG;IAClB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACtC,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,0BAA0B;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,yBAAyB;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAMrD,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Fixer types and interfaces
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.FIXABLE_RULES = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Rules that support auto-fix
|
|
9
|
+
*/
|
|
10
|
+
exports.FIXABLE_RULES = {
|
|
11
|
+
'OBS-002': {
|
|
12
|
+
description: 'Add permission manifest comment',
|
|
13
|
+
canFix: true,
|
|
14
|
+
strategy: 'add-manifest',
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/fixer/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAqDH;;GAEG;AACU,QAAA,aAAa,GAAgC;IACxD,SAAS,EAAE;QACT,WAAW,EAAE,iCAAiC;QAC9C,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,cAAc;KACzB;CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentlint",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Static analysis and security scanner for AI agent configuration files",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -54,23 +54,23 @@
|
|
|
54
54
|
"CHANGELOG.md"
|
|
55
55
|
],
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"commander": "^12.0.0",
|
|
58
57
|
"chalk": "^4.1.2",
|
|
58
|
+
"commander": "^12.0.0",
|
|
59
|
+
"crypto-js": "^4.2.0",
|
|
59
60
|
"glob": "^10.3.10",
|
|
60
|
-
"yaml": "^2.3.4"
|
|
61
|
-
"crypto-js": "^4.2.0"
|
|
61
|
+
"yaml": "^2.3.4"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@types/node": "^20.10.0",
|
|
65
64
|
"@types/crypto-js": "^4.2.0",
|
|
66
|
-
"typescript": "^5.3.0",
|
|
67
|
-
"ts-node": "^10.9.2",
|
|
68
|
-
"jest": "^29.7.0",
|
|
69
65
|
"@types/jest": "^29.5.0",
|
|
70
|
-
"
|
|
66
|
+
"@types/node": "^20.10.0",
|
|
71
67
|
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
72
68
|
"@typescript-eslint/parser": "^6.0.0",
|
|
73
69
|
"eslint": "^8.56.0",
|
|
74
|
-
"
|
|
70
|
+
"jest": "^29.7.0",
|
|
71
|
+
"prettier": "^3.2.0",
|
|
72
|
+
"ts-jest": "^29.1.0",
|
|
73
|
+
"ts-node": "^10.9.2",
|
|
74
|
+
"typescript": "^5.3.0"
|
|
75
75
|
}
|
|
76
76
|
}
|