aislop 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -9,107 +9,36 @@
9
9
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
10
10
  [![Node >= 20](https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg)](https://nodejs.org)
11
11
 
12
- Define your standard once in `.aislop/config.yml` + `.aislop/rules.yml`. Every change your agent makes is held to it automatically. `aislop` catches the slop they leave behind (narrative comments, `as any`, swallowed errors, hallucinated imports, todo stubs), enforces the rules your team sets, and scores every change 0–100. 8+ languages. Deterministic no LLM at runtime.
13
-
14
- ### The killer feature: the per-edit hook
15
-
16
- Install once into your coding agent:
17
-
18
- ```bash
19
- npx aislop hook install --claude # also: --cursor, --codex, --gemini, --windsurf, --cline, --kilo, --antigravity, --copilot
20
- ```
21
-
22
- After every `Edit` / `Write` your agent makes, `aislop` runs and feeds the diagnostics back into the agent's next turn as structured `additionalContext` (envelope: `aislop.hook.v1` — score, counts, findings, regression flag, suggested next steps). **The agent sees the score regression on the same turn it wrote the code, before you prompt again.** No more PR-time surprises; the slop never leaves the keystroke that produced it.
23
-
24
- CI is the second gate: `aislop ci` exits non-zero when score drops below your threshold, so the same standard is enforced on every PR.
25
-
26
- Every check is deterministic. Regex patterns, AST analysis, and standard tooling (Biome, oxlint, knip, ruff). Same code in, same score out. No API calls, no LLMs, no network dependency (except optional dependency audits). The name refers to what it *catches*.
27
-
28
- ## See it in action
29
-
30
- ### Scan
31
-
32
- ![aislop scan demo](assets/scan.gif)
33
-
34
- ### Fix
35
-
36
- ![aislop fix demo](assets/fix.gif)
12
+ Catches the slop AI agents leave behind: dead code, oversized functions and files, unused imports, `as any` casts, swallowed errors, hallucinated imports, todo stubs, narrative comments. Scores 0–100. Deterministic (regex + AST, no LLMs). 8+ languages.
37
13
 
38
14
  ## Quick start
39
15
 
40
16
  ```bash
41
- # scan your project
42
17
  npx aislop scan
43
-
44
- # auto-fix what can be fixed safely
45
- npx aislop fix
46
-
47
- # CI mode (JSON output + quality gate)
48
- npx aislop ci
49
-
50
- # wire aislop into your agent so it runs on every edit
51
- npx aislop hook install --claude
52
18
  ```
53
19
 
54
- Sample output:
55
-
56
- ```text
57
- [ok] Formatting: done (0 issues, 426ms)
58
- [ok] Linting: done (0 issues, 396ms)
59
- [!] Code Quality: done (2 warnings, 812ms)
60
- [!] AI Slop: done (4 warnings, 455ms)
61
- [ok] Security: done (0 issues, 1.3s)
62
- aislop 0.8.0 · the quality gate for agentic coding
63
-
64
- scan · my-app · typescript · 142 files
20
+ No install needed. Works on any project. Get your score in seconds.
65
21
 
66
- > Code Quality
67
- [WARN] [auto] Unused export (2)
68
- src/lib/format-bytes.ts:12
69
- src/utils/retry.ts:8
70
-
71
- > AI Slop
72
- [WARN] [auto] Narrative comment block (2)
73
- src/lib/auth.ts:86
74
- [WARN] 'as any' bypasses type safety
75
- src/api/normalize.ts:47
76
-
77
- 87 / 100 Healthy 0 errors · 6 warnings · 4 fixable
78
- 142 files · 5 engines · 1.9s
79
-
80
- → Run npx aislop fix to auto-fix 4 issues
81
- → Run npx aislop fix --claude to hand off the rest to an agent
22
+ ```bash
23
+ npx aislop fix # auto-fix issues
24
+ npx aislop fix -f # aggressive fixes (deps, unused files)
25
+ npx aislop ci # CI mode (JSON + gate)
26
+ npx aislop hook install --claude # per-edit hook
82
27
  ```
83
28
 
84
- ---
29
+ **Public badge**: Show your score on your README
85
30
 
86
- ## Why aislop
87
-
88
- AI coding tools generate code that compiles and passes tests but ships with patterns no engineer would write: trivial comments, swallowed exceptions, unused imports, `as any` casts, oversized functions, and leftover `console.log` calls. These problems are spread across many files and slip through review.
89
-
90
- `aislop` gives you one view and one score. Fully deterministic, no AI in the loop.
91
-
92
- - **One score, one gate**: a 0-100 number you can enforce in CI with `aislop ci`. Weighted so sloppy patterns (dead code, `as any`, swallowed errors) hit harder than style noise.
93
- - **Auto-fix first, agent second**: `aislop fix` clears what's mechanically safe (formatters, unused imports, trivial comments, dead patterns). For the rest, one flag hands off to Claude Code, Codex, Cursor, Gemini, Windsurf, Amp, Aider, Goose, and 7 more, with full diagnostic context pre-filled.
94
- - **Wire it into your agent**: `aislop hook install` plugs aislop into Claude Code, Cursor, Gemini CLI (runtime), plus Codex, Windsurf, Cline, Kilo Code, Antigravity, and Copilot (rules-only). The agent gets score + findings on the turn it wrote the code, not after.
95
- - **Deterministic**: regex, AST, and standard tooling. No LLMs, no API keys, no network dependency. Same repo in, same score out.
96
- - **Zero-config start**: `npx aislop scan` works on any repo. Add `.aislop/config.yml` when you want to tune thresholds or enable the architecture engine.
97
- - **Works across stacks**: TypeScript, JavaScript, Python, Go, Rust, Ruby, PHP, Expo / React Native.
31
+ ```markdown
32
+ [![aislop](https://badges.scanaislop.com/score/<owner>/<repo>.svg)](https://scanaislop.com)
33
+ ```
98
34
 
99
- ## What it catches
35
+ Run `npx aislop badge` to auto-generate. Free at [scanaislop.com](https://scanaislop.com).
100
36
 
101
- Six deterministic engines run in parallel:
37
+ ## See it in action
102
38
 
103
- | Engine | What it checks | How |
104
- |---|---|---|
105
- | **Formatting** | Code style consistency | Biome, ruff, gofmt, cargo fmt, rubocop, php-cs-fixer |
106
- | **Linting** | Language-specific issues | oxlint, ruff, golangci-lint, clippy, expo-doctor |
107
- | **Code Quality** | Complexity and dead code | Function/file size limits, deep nesting, unused files/deps (knip), AST-based unused-declaration removal |
108
- | **AI Slop** | AI-authored code patterns | Narrative comments, trivial comments, dead patterns, unused imports, `as any`, `console.log` leftovers, TODO stubs, generic names |
109
- | **Security** | Vulnerabilities and risky code | eval, innerHTML, SQL/shell injection, dependency audits (npm/pip/cargo/govulncheck) |
110
- | **Architecture** | Structural rules (opt-in) | Custom import bans, layering rules, required patterns |
39
+ ### Scan
111
40
 
112
- See the full [rules reference](docs/rules.md).
41
+ ![aislop scan demo](assets/scan.gif)
113
42
 
114
43
  ---
115
44
 
@@ -138,111 +67,89 @@ Also available as [`@scanaislop/aislop`](docs/installation.md) on GitHub Package
138
67
 
139
68
  ## Usage
140
69
 
141
- ### Scan your project
70
+ ### Scan
142
71
 
143
72
  ```bash
144
- aislop scan # scan current directory
145
- aislop scan ./src # scan a specific directory
146
- aislop scan --changes # only files changed from HEAD
147
- aislop scan --staged # only staged files (pre-commit)
148
- aislop scan --json # output JSON
73
+ npx aislop scan # current directory
74
+ npx aislop scan ./src # specific directory
75
+ npx aislop scan --changes # changed files from HEAD
76
+ npx aislop scan --staged # staged files only
77
+ npx aislop scan --json # JSON output
149
78
  ```
150
79
 
151
- **Exclude files and directories.** `node_modules`, `.git`, `dist`, `build`, and `coverage` are excluded by default. Add more via `.aislop/config.yml`:
80
+ **Exclude files**: `node_modules`, `.git`, `dist`, `build`, `coverage` excluded by default. Add more in `.aislop/config.yml`:
152
81
 
153
82
  ```yaml
154
83
  exclude:
155
- - "**/*.test.ts" # globs supported (micromatch)
84
+ - "**/*.test.ts"
156
85
  - src/generated
157
- - legacy
158
86
  ```
159
87
 
160
- Or override per-run with `--exclude` (comma-separated or repeatable, stacks on top of the config):
88
+ Or via CLI: `npx aislop scan --exclude "**/*.test.ts,dist"`
161
89
 
162
- ```bash
163
- aislop scan --exclude "**/*.test.ts"
164
- aislop scan --exclude node_modules,dist,logs
165
- aislop scan --exclude "src/generated" --exclude "**/*.spec.*"
166
- ```
167
-
168
- CLI flags beat config; config beats defaults.
169
-
170
- **Extend a shared config.** A project config can extend a parent and override specific keys. Useful for org-wide baselines: ship one strict config, let each repo soften or tighten as needed.
90
+ **Extend config**: Project config can extend a parent:
171
91
 
172
92
  ```yaml
173
93
  # .aislop/config.yml
174
- extends: ../../.aislop/base.yml # relative path to a parent config
175
-
94
+ extends: ../../.aislop/base.yml
176
95
  ci:
177
- failBelow: 80 # override just this key, inherit the rest
96
+ failBelow: 80 # override specific keys
178
97
  ```
179
98
 
180
- `extends:` accepts a single path or an array of paths. Later entries win. Deep-merged: nested objects (`scoring.weights`, `engines`) are merged key-by-key; arrays are replaced. Circular references and depths beyond 5 are rejected with a clear error.
99
+ ### Fix
181
100
 
182
- ### Fix issues automatically
101
+ Auto-fix what's mechanical (formatters, unused imports, dead code). For issues that need context, hand off to your agent with full diagnostic info.
183
102
 
184
103
  ```bash
185
- aislop fix # safe auto-fixes: unused imports, formatting, lint
186
- aislop fix -f # aggressive: dependency audit, unused files, Expo alignment
104
+ npx aislop fix # safe auto-fixes
105
+ npx aislop fix -f # aggressive: deps, unused files
187
106
  ```
188
107
 
189
- ### Hand off to your coding agent
108
+ ### Hand off to agent
190
109
 
191
- When auto-fix can't solve it, aislop generates a prompt with full context and opens your agent. 14 supported:
110
+ When auto-fix can't solve it, pass the remaining issues to your coding agent with full context:
192
111
 
193
112
  ```bash
194
- aislop fix --claude # Claude Code
195
- aislop fix --codex # Codex CLI
196
- aislop fix --cursor # Cursor (copies prompt to clipboard)
197
- aislop fix --gemini # Gemini CLI
198
- aislop fix --windsurf # Windsurf (copies prompt to clipboard)
199
- aislop fix --amp # Amp
200
- aislop fix --aider # Aider
201
- aislop fix --goose # Goose
202
- aislop fix --opencode # OpenCode
203
- aislop fix --warp # Warp
204
- aislop fix --kimi # Kimi Code CLI
205
- aislop fix --antigravity # Antigravity
206
- aislop fix --deep-agents # Deep Agents
207
- aislop fix --vscode # VS Code Copilot (copies prompt to clipboard)
208
- aislop fix --prompt # print the prompt (agent-agnostic)
113
+ npx aislop fix --claude # Claude Code
114
+ npx aislop fix --cursor # Cursor (copies to clipboard)
115
+ npx aislop fix --gemini # Gemini CLI
116
+ npx aislop fix --codex # Codex CLI
117
+ # Also: --windsurf, --amp, --aider, --goose, --opencode, --warp, --kimi, --antigravity, --deep-agents, --vscode
118
+ npx aislop fix --prompt # print prompt (agent-agnostic)
209
119
  ```
210
120
 
211
- ### Install as a native hook
121
+ ### Install hook
212
122
 
213
- One command and aislop runs automatically after every agent edit. Findings flow back to the agent as structured feedback (`aislop.hook.v1`) with score, counts, top-20 findings, and next steps, so the agent can self-correct on the same turn.
123
+ Runs after every agent edit. Feedback flows back immediately.
214
124
 
215
125
  ```bash
216
- aislop hook install --claude # Claude Code PostToolUse
217
- aislop hook install --cursor # Cursor afterFileEdit
218
- aislop hook install --gemini # Gemini CLI AfterTool
219
- aislop hook install # every supported agent at once
220
- aislop hook install claude cursor # pick any subset as positional args
221
- aislop hook install --agent claude,cursor # comma-list if you prefer one flag
126
+ npx aislop hook install --claude # Claude Code
127
+ npx aislop hook install --cursor # Cursor
128
+ npx aislop hook install --gemini # Gemini CLI
129
+ npx aislop hook install # all supported agents
130
+ npx aislop hook install claude cursor # specific agents
222
131
  ```
223
132
 
224
- Runtime adapters (scan + feedback on every edit): `claude`, `cursor`, `gemini`.
225
-
226
- Rules-only installers (agent reads rules on every turn): `codex`, `windsurf`, `cline`, `kilocode`, `antigravity`, `copilot`.
133
+ **Runtime adapters** (scan + feedback): `claude`, `cursor`, `gemini`.
134
+ **Rules-only** (agent reads rules): `codex`, `windsurf`, `cline`, `kilocode`, `antigravity`, `copilot`.
227
135
 
228
- Opt-in quality-gate mode captures `.aislop/baseline.json` at install time and blocks the Claude Stop hook if the score regresses:
136
+ **Quality-gate mode**: Blocks if score regresses below baseline.
229
137
 
230
138
  ```bash
231
- aislop hook install --claude --quality-gate
232
- aislop hook baseline # re-capture baseline
233
- aislop hook status # list installed hooks
234
- aislop hook uninstall --claude # remove a specific agent
235
- aislop hook uninstall # remove every aislop entry, sentinel-verified
139
+ npx aislop hook install --claude --quality-gate
140
+ npx aislop hook baseline # re-capture baseline
141
+ npx aislop hook status # list installed
142
+ npx aislop hook uninstall --claude # remove
236
143
  ```
237
144
 
238
- Every install is sentinel-guarded (SHA-256 hash fence) for idempotent re-runs and exact uninstall. Full guide: [`/docs/hooks`](https://scanaislop.com/docs/hooks).
145
+ Docs: [`/docs/hooks`](https://scanaislop.com/docs/hooks)
239
146
 
240
- ### Use as an MCP server
147
+ ### MCP server
241
148
 
242
- aislop ships an MCP (Model Context Protocol) server so any agent that speaks MCP — Claude Desktop, Claude Code, Cursor, Codex — can call it as a tool.
149
+ Expose aislop as MCP tools for Claude Desktop, Cursor, Codex:
243
150
 
244
151
  ```jsonc
245
- // ~/.cursor/mcp.json / Claude Desktop config / ~/.codex/config.toml equivalent
152
+ // ~/.cursor/mcp.json or Claude Desktop config
246
153
  {
247
154
  "mcpServers": {
248
155
  "aislop": {
@@ -253,51 +160,30 @@ aislop ships an MCP (Model Context Protocol) server so any agent that speaks MCP
253
160
  }
254
161
  ```
255
162
 
256
- Tools exposed:
257
- - `aislop_scan({ path? })` — score + counts + top findings
258
- - `aislop_fix({ path?, force? })` — apply mechanical fixes; returns before/after delta
259
- - `aislop_why({ rule_id })` — engine + docs link for a rule
260
- - `aislop_baseline({ path? })` — read the per-edit-hook baseline (score, lastScanAt, fileCount)
261
-
262
- Same engines as the CLI; calling these from inside an agent session lets the model self-check before claiming work is done.
263
-
264
- ### Use in CI pipelines
265
-
266
- ```bash
267
- aislop ci # JSON output, exits 1 if score < threshold
268
- ```
163
+ **Tools**: `aislop_scan`, `aislop_fix`, `aislop_why`, `aislop_baseline`
269
164
 
270
- ### Common workflow
165
+ ### CI
271
166
 
272
167
  ```bash
273
- # before commit
274
- aislop scan --staged
275
-
276
- # during local cleanup
277
- aislop fix
278
-
279
- # full project check
280
- aislop scan
168
+ npx aislop ci # JSON output, exits 1 if score < threshold
281
169
  ```
282
170
 
283
171
  ### Other commands
284
172
 
285
173
  ```bash
286
- aislop init # create .aislop/config.yml
287
- aislop doctor # check which tools are available
288
- aislop rules # list all built-in rules
289
- aislop badge # print the public score badge URL + README snippet
290
- aislop hook install # wire aislop into your coding agent
291
- aislop # interactive menu
174
+ npx aislop init # create .aislop/config.yml
175
+ npx aislop rules # list rules
176
+ npx aislop badge # print badge URL
177
+ npx aislop # interactive menu
292
178
  ```
293
179
 
294
- See [all commands and flags](docs/commands.md).
180
+ Docs: [commands](docs/commands.md)
295
181
 
296
182
  ---
297
183
 
298
- ## Use in your project
184
+ ## CI integration
299
185
 
300
- ### Pre-commit hook
186
+ ### Pre-commit
301
187
 
302
188
  ```bash
303
189
  npx aislop scan --staged
@@ -305,9 +191,7 @@ npx aislop scan --staged
305
191
 
306
192
  ### GitHub Actions
307
193
 
308
- Fastest path: run `npx aislop init` and say yes to "Add a GitHub Actions workflow?". It drops a working `.github/workflows/aislop.yml` for you.
309
-
310
- Manual form:
194
+ Run `npx aislop init` and accept the workflow prompt, or add manually:
311
195
 
312
196
  ```yaml
313
197
  - uses: actions/checkout@v4
@@ -317,90 +201,86 @@ Manual form:
317
201
  - run: npx aislop@latest ci .
318
202
  ```
319
203
 
320
- Or use the composite action (one-liner):
204
+ **Composite action**:
321
205
 
322
206
  ```yaml
323
207
  - uses: actions/checkout@v4
324
- - uses: scanaislop/aislop@v0.5
208
+ - uses: scanaislop/aislop@v0.8
325
209
  ```
326
210
 
327
211
  ### Quality gate
328
212
 
329
- Set a minimum score in `.aislop/config.yml`:
213
+ Set minimum score in `.aislop/config.yml`:
330
214
 
331
215
  ```yaml
332
216
  ci:
333
217
  failBelow: 70
334
218
  ```
335
219
 
336
- `aislop ci` exits with code 1 when the score drops below the threshold. See [CI/CD docs](docs/ci.md) for more.
220
+ `aislop ci` exits 1 when score < threshold. Docs: [CI/CD](docs/ci.md)
337
221
 
338
222
  ---
339
223
 
340
- ## Documentation
224
+ ## For teams
341
225
 
342
- | Topic | Link |
343
- |---|---|
344
- | Installation | [docs/installation.md](docs/installation.md) |
345
- | Commands & flags | [docs/commands.md](docs/commands.md) |
346
- | Rules reference | [docs/rules.md](docs/rules.md) |
347
- | Configuration | [docs/configuration.md](docs/configuration.md) |
348
- | Scoring | [docs/scoring.md](docs/scoring.md) |
349
- | CI / CD | [docs/ci.md](docs/ci.md) |
350
- | Telemetry | [docs/telemetry.md](docs/telemetry.md) |
226
+ [scanaislop](https://scanaislop.com) is the hosted platform for teams:
227
+
228
+ - PR gates with score thresholds
229
+ - Standards hierarchy (org team → project)
230
+ - Dashboards and agent attribution
231
+ - Visual rules manager
232
+
233
+ Same engines, same scores. CLI is MIT-licensed. [Learn more →](https://scanaislop.com)
351
234
 
352
235
  ---
353
236
 
354
- ## For engineering teams
237
+ ## Why aislop
355
238
 
356
- `aislop` runs locally and in your CI. [scanaislop](https://scanaislop.com) is the hosted platform built on top of it for teams that want enforcement without wiring every workflow themselves.
239
+ AI coding tools generate code that compiles and passes tests but ships with patterns no engineer would write. `aislop` gives you one score, one gate, and auto-fixes what it can.
357
240
 
358
- - **PR gates on every repo** with a score threshold and block-to-merge
359
- - **Standards hierarchy**: org baseline, team overrides, project config
360
- - **Per-team dashboards** and agent attribution over time
361
- - **Visual rules manager** so engineering leads set standards without editing YAML
362
- - **Same engines, same rule IDs, same score**. The CLI remains the source of truth.
241
+ - **One score**: 0-100, enforced in CI. Weighted so sloppy patterns hit harder than style noise.
242
+ - **Auto-fix first**: Clears formatters, unused imports, dead code mechanically. Hands off the rest to your agent with full context.
243
+ - **Deterministic**: Regex + AST + standard tooling. No LLMs, no API calls. Same code in, same score out.
244
+ - **Zero-config start**: `npx aislop scan` works on any repo. Add `.aislop/config.yml` to tune.
363
245
 
364
- The CLI is MIT-licensed and always will be. [Learn more about the platform →](https://scanaislop.com)
246
+ ## What it catches
365
247
 
366
- ## Public score badge
248
+ Six deterministic engines run in parallel:
367
249
 
368
- Show your aislop score on a README. Free for any project that opts in on [scanaislop.com](https://scanaislop.com).
250
+ | Engine | What it checks | How |
251
+ |---|---|---|
252
+ | **Formatting** | Code style consistency | Biome, ruff, gofmt, cargo fmt, rubocop, php-cs-fixer |
253
+ | **Linting** | Language-specific issues | oxlint, ruff, golangci-lint, clippy, expo-doctor |
254
+ | **Code Quality** | Complexity and dead code | Function/file size limits, deep nesting, unused files/deps (knip), AST-based unused-declaration removal |
255
+ | **AI Slop** | AI-authored code patterns | Narrative comments, trivial comments, dead patterns, unused imports, `as any`, `console.log` leftovers, TODO stubs, generic names |
256
+ | **Security** | Vulnerabilities and risky code | eval, innerHTML, SQL/shell injection, dependency audits (npm/pip/cargo/govulncheck) |
257
+ | **Architecture** | Structural rules (opt-in) | Custom import bans, layering rules, required patterns |
369
258
 
370
- ```markdown
371
- [![aislop](https://badges.scanaislop.com/score/<owner>/<repo>.svg)](https://scanaislop.com)
372
- ```
259
+ See the full [rules reference](docs/rules.md).
260
+
261
+ ---
373
262
 
374
- Shields-compatible SVG, edge-cached on Cloudflare. Colour-coded: green ≥ 85, amber 70-84, red < 70, grey if no scans yet.
263
+ ## Docs
375
264
 
376
- Run `aislop badge` to print the snippet pre-filled with your repo's owner/name, auto-detected from `git remote get-url origin`.
265
+ [Installation](docs/installation.md) · [Commands](docs/commands.md) · [Rules](docs/rules.md) · [Config](docs/configuration.md) · [Scoring](docs/scoring.md) · [CI/CD](docs/ci.md) · [Telemetry](docs/telemetry.md)
377
266
 
378
267
  ## Contributing
379
268
 
380
- See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and how to add new rules. AI coding assistants can find project context in [AGENTS.md](AGENTS.md).
269
+ See [CONTRIBUTING.md](CONTRIBUTING.md). AI assistants: [AGENTS.md](AGENTS.md).
381
270
 
382
271
  ## Acknowledgments
383
272
 
384
- `aislop` is built on top of excellent open-source projects:
385
-
386
- - [Biome](https://biomejs.dev/) for formatting and linting JS/TS
387
- - [oxlint](https://oxc.rs/) for fast JS/TS linting
388
- - [knip](https://knip.dev/) for unused files, exports, and dependencies
389
- - [ruff](https://docs.astral.sh/ruff/) for Python linting and formatting
390
- - [golangci-lint](https://golangci-lint.run/) for Go linting
391
- - [expo-doctor](https://docs.expo.dev/) for Expo/React Native project health
273
+ Built on: [Biome](https://biomejs.dev/), [oxlint](https://oxc.rs/), [knip](https://knip.dev/), [ruff](https://docs.astral.sh/ruff/), [golangci-lint](https://golangci-lint.run/), [expo-doctor](https://docs.expo.dev/)
392
274
 
393
275
  ## Contributors
394
276
 
395
- Thanks to everyone who has shipped code, ideas, docs, or bug reports.
396
-
397
277
  <!-- CONTRIBUTORS-START -->
398
278
  - [@heavykenny](https://github.com/heavykenny)
399
279
  - [@myke-awoniran](https://github.com/myke-awoniran)
400
280
  - [@yashrajoria](https://github.com/yashrajoria)
401
281
  <!-- CONTRIBUTORS-END -->
402
282
 
403
- This list is regenerated by `.github/workflows/contributors.yml` after every push to `develop` or `main`. The workflow reads git log, resolves each author's GitHub login, and opens a PR with any diff. If your commits aren't being credited, either link your commit email under [GitHub Settings → Emails](https://github.com/settings/emails) or add a mapping to [`.github/contributors-overrides.json`](.github/contributors-overrides.json).
283
+ Auto-updated by `.github/workflows/contributors.yml`. [Link commit email](https://github.com/settings/emails) or add to [`.github/contributors-overrides.json`](.github/contributors-overrides.json).
404
284
 
405
285
  ## License
406
286
 
package/dist/cli.js CHANGED
@@ -7556,7 +7556,7 @@ const renderCleanRun = (input, deps = {}) => {
7556
7556
 
7557
7557
  //#endregion
7558
7558
  //#region src/version.ts
7559
- const APP_VERSION = "0.8.0";
7559
+ const APP_VERSION = "0.8.1";
7560
7560
 
7561
7561
  //#endregion
7562
7562
  //#region src/utils/telemetry.ts
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as ENGINE_INFO, r as getEngineLabel, t as APP_VERSION } from "./version-B9ZchFMv.js";
1
+ import { n as ENGINE_INFO, r as getEngineLabel, t as APP_VERSION } from "./version-B7_FRirI.js";
2
2
  import { n as runSubprocess, t as isToolInstalled } from "./subprocess-CQUJDGgn.js";
3
3
  import { r as runGenericLinter, t as fixRubyLint } from "./generic-BrcWMW7E.js";
4
4
  import { n as runExpoDoctor } from "./expo-doctor-Bz0LZhQ6.js";
@@ -6361,7 +6361,7 @@ const scanCommand = async (directory, config, options) => {
6361
6361
  });
6362
6362
  }
6363
6363
  if (options.json) {
6364
- const { buildJsonOutput } = await import("./json-BJGLCIK-.js");
6364
+ const { buildJsonOutput } = await import("./json-7EtVVIhd.js");
6365
6365
  const jsonOut = buildJsonOutput(results, scoreResult, projectInfo.sourceFileCount, elapsedMs);
6366
6366
  console.log(JSON.stringify(jsonOut, null, 2));
6367
6367
  return { exitCode };
@@ -1,4 +1,4 @@
1
- import { n as ENGINE_INFO, t as APP_VERSION } from "./version-B9ZchFMv.js";
1
+ import { n as ENGINE_INFO, t as APP_VERSION } from "./version-B7_FRirI.js";
2
2
 
3
3
  //#region src/output/json.ts
4
4
  const buildJsonOutput = (results, scoreResult, fileCount, elapsedMs) => {
package/dist/mcp.js CHANGED
@@ -5056,7 +5056,7 @@ const handleAislopBaseline = (input) => {
5056
5056
 
5057
5057
  //#endregion
5058
5058
  //#region src/version.ts
5059
- const APP_VERSION = "0.8.0";
5059
+ const APP_VERSION = "0.8.1";
5060
5060
 
5061
5061
  //#endregion
5062
5062
  //#region src/mcp.ts
@@ -29,7 +29,7 @@ const getEngineLabel = (engine) => ENGINE_INFO[engine].label;
29
29
 
30
30
  //#endregion
31
31
  //#region src/version.ts
32
- const APP_VERSION = "0.8.0";
32
+ const APP_VERSION = "0.8.1";
33
33
 
34
34
  //#endregion
35
35
  export { ENGINE_INFO as n, getEngineLabel as r, APP_VERSION as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aislop",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "description": "The engineering standards layer and quality gate for AI-written code. Define your standard once. Every agent — Claude Code, Cursor, Codex — is held to it automatically, on every edit and every PR. Catches the slop they leave behind, enforces the rules your team sets. 8+ languages. Deterministic.",
5
5
  "type": "module",
6
6
  "bin": {