eslint-plugin-ai-guard 1.1.4 โ 1.1.6
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 +196 -310
- package/dist/cli/index.js +8793 -2134
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +36 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +36 -13
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -10
package/README.md
CHANGED
|
@@ -1,310 +1,196 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
<
|
|
11
|
-
|
|
12
|
-
</p>
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
###
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|---|---|---|
|
|
198
|
-
| [`no-hardcoded-secret`](docs/rules/no-hardcoded-secret.md) | `error` | API keys / passwords in source code |
|
|
199
|
-
| [`no-eval-dynamic`](docs/rules/no-eval-dynamic.md) | `error` | `eval()` or `new Function()` with dynamic input |
|
|
200
|
-
| [`no-sql-string-concat`](docs/rules/no-sql-string-concat.md) | `warn` | String concatenation in SQL queries |
|
|
201
|
-
| [`no-unsafe-deserialize`](docs/rules/no-unsafe-deserialize.md) | `warn` | `JSON.parse()` on untrusted input without validation |
|
|
202
|
-
| [`require-auth-middleware`](docs/rules/require-auth-middleware.md) | `warn` | Express/Fastify routes without auth middleware |
|
|
203
|
-
| [`require-authz-check`](docs/rules/require-authz-check.md) | `warn` | Route handlers accessing resources without ownership check |
|
|
204
|
-
|
|
205
|
-
### ๐งน Code Quality (1 rule)
|
|
206
|
-
|
|
207
|
-
| Rule | Recommended | Description |
|
|
208
|
-
|---|---|---|
|
|
209
|
-
| [`no-console-in-handler`](docs/rules/no-console-in-handler.md) | `off` | `console.*` inside route handlers leaks internals |
|
|
210
|
-
|
|
211
|
-
### Presets
|
|
212
|
-
|
|
213
|
-
| Preset | Use case |
|
|
214
|
-
|---|---|
|
|
215
|
-
| `recommended` | **Start here.** High-confidence issues at `error`, context-sensitive at `warn`/`off`. Low noise. |
|
|
216
|
-
| `strict` | All 17 rules at `error`. For mature codebases ready for full enforcement. |
|
|
217
|
-
| `security` | Security rules only. For AppSec teams and security-focused audits. |
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## ๐ Real-World Results
|
|
222
|
-
|
|
223
|
-
| Project Type | Issues Found | False Positives |
|
|
224
|
-
|---|---|---|
|
|
225
|
-
| Clean utility library | 0 | 0 |
|
|
226
|
-
| Express.js backend | 400+ | 0 |
|
|
227
|
-
| Next.js full-stack app | 180+ | 0 |
|
|
228
|
-
|
|
229
|
-
The recommended preset is calibrated for **near-zero false positives** on real codebases.
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## ๐ง Why This Exists
|
|
234
|
-
|
|
235
|
-
AI models generate code **statistically from training data** โ not semantically from understanding your system. They make the same structural mistakes, consistently, at scale:
|
|
236
|
-
|
|
237
|
-
- They add `async` by default even when not needed
|
|
238
|
-
- They generate `catch (e) {}` placeholders and never fill them in
|
|
239
|
-
- They write SQL queries by string concatenation because that's the pattern they've seen
|
|
240
|
-
- They omit auth middleware because examples they trained on often don't show the full middleware chain
|
|
241
|
-
|
|
242
|
-
These patterns are **static-detectable** using AST rules. You don't need AI to lint AI code โ you need fast, offline, zero-latency static analysis that catches these specific patterns before they hit production.
|
|
243
|
-
|
|
244
|
-
`ai-guard` is that tool.
|
|
245
|
-
|
|
246
|
-
---
|
|
247
|
-
|
|
248
|
-
## ๐ง CI Integration
|
|
249
|
-
|
|
250
|
-
```yaml
|
|
251
|
-
# .github/workflows/ai-guard.yml
|
|
252
|
-
name: AI Guard
|
|
253
|
-
|
|
254
|
-
on: [push, pull_request]
|
|
255
|
-
|
|
256
|
-
jobs:
|
|
257
|
-
ai-guard:
|
|
258
|
-
runs-on: ubuntu-latest
|
|
259
|
-
steps:
|
|
260
|
-
- uses: actions/checkout@v4
|
|
261
|
-
- uses: actions/setup-node@v4
|
|
262
|
-
with:
|
|
263
|
-
node-version: 20
|
|
264
|
-
- run: npm ci
|
|
265
|
-
- run: npx ai-guard run --json --max-warnings 0
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
Or use the ESLint integration in your existing `eslint` CI step โ no separate job needed.
|
|
269
|
-
|
|
270
|
-
---
|
|
271
|
-
|
|
272
|
-
## ๐ Documentation
|
|
273
|
-
|
|
274
|
-
- **[Rules โ](docs/rules/)** โ Full documentation for all 17 rules
|
|
275
|
-
- **[CLI Reference โ](docs/cli/overview.md)** โ All CLI commands with options and examples
|
|
276
|
-
- **[Getting Started โ](docs/guides/getting-started.md)** โ Step-by-step setup guide
|
|
277
|
-
- **[Migrating an Existing Project โ](docs/guides/migrating-existing-project.md)** โ Adopt ai-guard without disruption
|
|
278
|
-
- **[CI Integration โ](docs/guides/ci-integration.md)** โ GitHub Actions, pre-commit hooks, and more
|
|
279
|
-
|
|
280
|
-
---
|
|
281
|
-
|
|
282
|
-
## ๐ ๏ธ Development
|
|
283
|
-
|
|
284
|
-
```bash
|
|
285
|
-
git clone https://github.com/YashJadhav21/eslint-plugin-ai-guard.git
|
|
286
|
-
cd eslint-plugin-ai-guard
|
|
287
|
-
npm install
|
|
288
|
-
npm run test # Run test suite
|
|
289
|
-
npm run build # Build plugin + CLI
|
|
290
|
-
npm run typecheck # TypeScript check
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
## ๐ค Contributing
|
|
294
|
-
|
|
295
|
-
Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
296
|
-
|
|
297
|
-
- **Rule requests** โ [Open an issue](https://github.com/YashJadhav21/eslint-plugin-ai-guard/issues/new)
|
|
298
|
-
- **False positive reports** โ We take these seriously. [Report here](https://github.com/YashJadhav21/eslint-plugin-ai-guard/issues/new)
|
|
299
|
-
- **Security issues** โ Email directly; do not open a public issue
|
|
300
|
-
|
|
301
|
-
## License
|
|
302
|
-
|
|
303
|
-
[MIT](LICENSE) โ free forever. No rules behind a paywall.
|
|
304
|
-
|
|
305
|
-
---
|
|
306
|
-
|
|
307
|
-
<p align="center">
|
|
308
|
-
Built to make AI-assisted development safer. โก<br>
|
|
309
|
-
<sub>If this saved you from a production bug, consider giving it a โญ</sub>
|
|
310
|
-
</p>
|
|
1
|
+
<p align="center">
|
|
2
|
+
<h1 align="center">eslint-plugin-ai-guard</h1>
|
|
3
|
+
<p align="center">
|
|
4
|
+
<strong>๐ก๏ธ ESLint plugin that catches the code patterns AI tools get wrong most often.</strong>
|
|
5
|
+
</p>
|
|
6
|
+
<p align="center">
|
|
7
|
+
<a href="https://www.npmjs.com/package/eslint-plugin-ai-guard"><img src="https://img.shields.io/npm/v/eslint-plugin-ai-guard.svg?style=flat-square" alt="npm version"></a>
|
|
8
|
+
<a href="https://github.com/YashJadhav21/eslint-plugin-ai-guard/actions"><img src="https://img.shields.io/github/actions/workflow/status/YashJadhav21/eslint-plugin-ai-guard/ci.yml?style=flat-square&label=CI" alt="CI"></a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/eslint-plugin-ai-guard"><img src="https://img.shields.io/npm/dm/eslint-plugin-ai-guard.svg?style=flat-square" alt="downloads"></a>
|
|
10
|
+
<a href="https://github.com/YashJadhav21/eslint-plugin-ai-guard/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/eslint-plugin-ai-guard.svg?style=flat-square" alt="license"></a>
|
|
11
|
+
</p>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
AI-generated code has **1.7ร more issues** and **2.74ร more security vulnerabilities** than human code ([CodeRabbit 2025](https://www.coderabbit.ai/)). Existing linters catch human mistakes โ `ai-guard` catches the patterns AI tools consistently get wrong: empty catch blocks, floating promises, async array misuse, and more.
|
|
17
|
+
|
|
18
|
+
## Install
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install --save-dev eslint-plugin-ai-guard
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## ๐ Quick Start โ CLI (no config needed)
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx ai-guard run # recommended preset (lowest noise)
|
|
28
|
+
npx ai-guard run --strict
|
|
29
|
+
npx ai-guard run --security
|
|
30
|
+
npx ai-guard init # auto-creates ESLint config for you
|
|
31
|
+
npx ai-guard doctor # diagnoses setup issues
|
|
32
|
+
npx ai-guard baseline # track only *new* issues going forward
|
|
33
|
+
```
|
|
34
|
+
That's it. **Zero configuration required.**
|
|
35
|
+
|
|
36
|
+
## ๐งช Real-World Usage Philosophy
|
|
37
|
+
|
|
38
|
+
`ai-guard` is designed for production adoption in existing codebases:
|
|
39
|
+
|
|
40
|
+
1. **Recommended preset is intentionally low-noise** to avoid overwhelming teams on day one.
|
|
41
|
+
2. **Strict preset enables full enforcement** for mature teams that want maximum coverage.
|
|
42
|
+
3. **Security preset focuses only on security rules** with critical issues as errors.
|
|
43
|
+
|
|
44
|
+
## ๐ฌ Real Workspace Demo
|
|
45
|
+
|
|
46
|
+
See how `ai-guard` catches a common AI-generated async bug that silent failures in production:
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
// โ BAD: AI often forgets to await or wrap in Promise.all
|
|
50
|
+
const userIds = [1, 2, 3];
|
|
51
|
+
userIds.map(async (id) => {
|
|
52
|
+
return await fetchUser(id);
|
|
53
|
+
});
|
|
54
|
+
// โ ๏ธ ai-guard flags: Async callback passed to Array.map(). Returns Promise[], not values.
|
|
55
|
+
|
|
56
|
+
// โ
GOOD: ai-guard recommended fix
|
|
57
|
+
const users = await Promise.all(userIds.map(async (id) => {
|
|
58
|
+
return await fetchUser(id);
|
|
59
|
+
}));
|
|
60
|
+
// โจ ai-guard: No issues found.
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Terminal Output
|
|
64
|
+
|
|
65
|
+

|
|
66
|
+
|
|
67
|
+
*The terminal output above shows `ai-guard` catching multiple AI-generated anti-patterns in a single run.*
|
|
68
|
+
|
|
69
|
+
## Rules (Recommended Preset)
|
|
70
|
+
|
|
71
|
+
### ๐ฏ Error Handling
|
|
72
|
+
|
|
73
|
+
- **`ai-guard/no-empty-catch`** (Error)
|
|
74
|
+
Disallow empty catch blocks. AI tools frequently generate try/catch with empty bodies that silently swallow errors.
|
|
75
|
+
- **`ai-guard/no-broad-exception`** (Warn)
|
|
76
|
+
Disallow catching `any` or `unknown` without instance narrowing. AI tools default to `catch (e: any)` which obscures the underlying failure.
|
|
77
|
+
- **`ai-guard/no-catch-log-rethrow`** (Off in `recommended`, Error in `strict`)
|
|
78
|
+
Disallow catch blocks that only log and rethrow the same error. AI tools often generate this noisy pattern without adding recovery or context.
|
|
79
|
+
- **`ai-guard/no-catch-without-use`** (Off in `recommended`, Error in `strict`)
|
|
80
|
+
Disallow unused catch parameters. AI tools frequently add `catch (e)` while ignoring the error object entirely.
|
|
81
|
+
- **`ai-guard/no-duplicate-logic-block`** (Off in `recommended`, Error in `strict`)
|
|
82
|
+
Disallow consecutive duplicated logic blocks. AI tools often copy-paste identical code that should be consolidated.
|
|
83
|
+
|
|
84
|
+
### โฑ๏ธ Async Stability
|
|
85
|
+
|
|
86
|
+
- **`ai-guard/no-async-array-callback`** (Warn)
|
|
87
|
+
Disallow async functions in `.map()`, `.filter()`, etc. AI tools frequently suggest `array.map(async ...)` expecting resolved values, creating silent bugs.
|
|
88
|
+
- **`ai-guard/no-floating-promise`** (Error)
|
|
89
|
+
Require awaiting or handling promises. AI tools frequently generate un-awaited async calls that silently swallow rejections.
|
|
90
|
+
- **`ai-guard/no-await-in-loop`** (Warn)
|
|
91
|
+
Disallow sequential `await` inside loops. AI tools frequently use `for (const x of y) await z(x)` causing O(n) latency instead of parallel `Promise.all()`.
|
|
92
|
+
- **`ai-guard/no-async-without-await`** (Warn)
|
|
93
|
+
Disallow async functions that do not use `await`. AI tools frequently add `async` by default, creating misleading function signatures.
|
|
94
|
+
- **`ai-guard/no-redundant-await`** (Off in `recommended`, Error in `strict`)
|
|
95
|
+
Disallow redundant `return await` outside try/catch/finally. AI tools often emit this pattern even when returning the Promise directly is equivalent.
|
|
96
|
+
|
|
97
|
+
### ๐ก๏ธ Security
|
|
98
|
+
|
|
99
|
+
- **`ai-guard/no-hardcoded-secret`** (Error)
|
|
100
|
+
Disallow hardcoded keys/passwords. AI tools frequently provide examples with placeholder secrets that accidentally make it into production.
|
|
101
|
+
- **`ai-guard/no-eval-dynamic`** (Error)
|
|
102
|
+
Disallow dynamic `eval()` or `new Function()`.
|
|
103
|
+
- **`ai-guard/no-sql-string-concat`** (Warn in `recommended`, Error in `security`/`strict`)
|
|
104
|
+
Disallow variable concatenation/interpolation in SQL queries. AI tools frequently generate dangerous code enabling SQL injection.
|
|
105
|
+
- **`ai-guard/no-unsafe-deserialize`** (Warn)
|
|
106
|
+
Disallow `JSON.parse()` on likely untrusted inputs (like `req.body`) without visible validation.
|
|
107
|
+
- **`ai-guard/require-auth-middleware`** (Warn)
|
|
108
|
+
Enforce authentication middleware on Express/Fastify routes. AI tools frequently generate unprotected endpoints exposing sensitive data.
|
|
109
|
+
- **`ai-guard/require-authz-check`** (Warn in `recommended`/`security`, Error in `strict`)
|
|
110
|
+
Require visible ownership/authorization checks when handlers access resource identifiers (like `req.params.id`).
|
|
111
|
+
|
|
112
|
+
### ๐งน Code Quality
|
|
113
|
+
|
|
114
|
+
- **`ai-guard/no-console-in-handler`** (Off in `recommended`, Error in `strict`)
|
|
115
|
+
Disallow `console.*` inside HTTP route handlers. AI tools often leave debug logs in handlers that leak internals and pollute production logs.
|
|
116
|
+
|
|
117
|
+
### Configs
|
|
118
|
+
|
|
119
|
+
| Config | Description |
|
|
120
|
+
| --- | --- |
|
|
121
|
+
| `recommended` | Adoption-first preset: high-confidence issues as `error`, context-sensitive rules as `warn`/`off` |
|
|
122
|
+
| `strict` | All rules at `error` โ for teams that want maximum coverage |
|
|
123
|
+
| `security` | Security-only rules: critical issues at `error`, contextual checks at `warn` |
|
|
124
|
+
|
|
125
|
+
### Config Examples
|
|
126
|
+
|
|
127
|
+
#### Flat Config: strict
|
|
128
|
+
|
|
129
|
+
```javascript
|
|
130
|
+
import aiGuard from "eslint-plugin-ai-guard";
|
|
131
|
+
|
|
132
|
+
export default [
|
|
133
|
+
{
|
|
134
|
+
plugins: { "ai-guard": aiGuard },
|
|
135
|
+
rules: { ...aiGuard.configs.strict.rules }
|
|
136
|
+
}
|
|
137
|
+
];
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
#### Flat Config: security
|
|
141
|
+
|
|
142
|
+
```javascript
|
|
143
|
+
import aiGuard from "eslint-plugin-ai-guard";
|
|
144
|
+
|
|
145
|
+
export default [
|
|
146
|
+
{
|
|
147
|
+
plugins: { "ai-guard": aiGuard },
|
|
148
|
+
rules: { ...aiGuard.configs.security.rules }
|
|
149
|
+
}
|
|
150
|
+
];
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Why This Exists
|
|
154
|
+
|
|
155
|
+
AI coding assistants generate code that **looks correct** but has subtle structural issues:
|
|
156
|
+
|
|
157
|
+
- ๐ณ๏ธ **Empty catch blocks** โ errors vanish silently
|
|
158
|
+
- โณ **`array.map(async ...)`** โ returns `Promise[]`, not resolved values
|
|
159
|
+
- ๐ฅ **Floating promises** โ `fetchData()` without `await` = silent failures
|
|
160
|
+
|
|
161
|
+
These patterns pass TypeScript and existing linters. `ai-guard` catches them.
|
|
162
|
+
|
|
163
|
+
## Supported Environments
|
|
164
|
+
|
|
165
|
+
- **ESLint** 8.x and 9.x (flat config)
|
|
166
|
+
- **Node.js** โฅ 18
|
|
167
|
+
- **TypeScript** and JavaScript
|
|
168
|
+
|
|
169
|
+
## Development
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
git clone https://github.com/YashJadhav21/eslint-plugin-ai-guard.git
|
|
173
|
+
cd eslint-plugin-ai-guard
|
|
174
|
+
npm install
|
|
175
|
+
npm run test # Run test suite
|
|
176
|
+
npm run build # Build CJS + ESM
|
|
177
|
+
npm run typecheck # TypeScript check
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Contributing
|
|
181
|
+
|
|
182
|
+
Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
183
|
+
|
|
184
|
+
**Rule requests:** Open an issue using the [Rule Request template](https://github.com/YashJadhav21/eslint-plugin-ai-guard/issues/new).
|
|
185
|
+
|
|
186
|
+
**False positive reports:** Open an issue using the [False Positive template](https://github.com/YashJadhav21/eslint-plugin-ai-guard/issues/new) โ we take zero false positives seriously.
|
|
187
|
+
|
|
188
|
+
## License
|
|
189
|
+
|
|
190
|
+
[MIT](LICENSE) โ free forever. No rules behind a paywall.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
<p align="center">
|
|
195
|
+
Built to make AI-assisted development safer. โก
|
|
196
|
+
</p>
|