From 42002fe77b8aa1164722ec2f9966f524ed260a99 Mon Sep 17 00:00:00 2001 From: Zhongwei Li Date: Sat, 29 Nov 2025 18:09:13 +0800 Subject: [PATCH] Initial commit --- .claude-plugin/plugin.json | 12 ++ README.md | 3 + commands/deslop.md | 255 +++++++++++++++++++++++++++++++++++++ plugin.lock.json | 45 +++++++ 4 files changed, 315 insertions(+) create mode 100644 .claude-plugin/plugin.json create mode 100644 README.md create mode 100644 commands/deslop.md create mode 100644 plugin.lock.json diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..37926a5 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "deslop", + "description": "Remove AI-generated code slop from your branches", + "version": "1.0.0", + "author": { + "name": "Chmouel", + "email": "chmouel@chmouel.com" + }, + "commands": [ + "./commands" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f0af137 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# deslop + +Remove AI-generated code slop from your branches diff --git a/commands/deslop.md b/commands/deslop.md new file mode 100644 index 0000000..7a8538b --- /dev/null +++ b/commands/deslop.md @@ -0,0 +1,255 @@ +--- +description: Remove AI-generated code slop from your branch +argument-hint: [base-branch] +allowed-tools: Bash(git:*) +--- + +# Remove AI Code Slop + +Clean up AI-generated code patterns that don't match your codebase's style and conventions. This command uses a systematic multi-phase approach to safely identify and remove slop. + +## Core Principles + +- **Safety first**: Always get user confirmation before making changes +- **Transparency**: Show exactly what will be changed and why +- **Context-aware**: Understand existing codebase patterns before removing code +- **Use TodoWrite**: Track progress through all phases + +--- + +## Arguments + +**Base branch**: $ARGUMENTS (defaults to main if not provided) + +--- + +## Phase 1: Setup & Analysis + +**Goal**: Understand the current state and prepare for slop detection + +**Actions**: + +1. Create a todo list with all phases +2. Determine the base branch (from arguments or default to `main`) +3. Verify git status: + - Check current branch name + - Check if there are uncommitted changes + - If uncommitted changes exist, ask user to confirm if they want to proceed anyway + - Verify base branch exists +4. Get the diff against base branch: `git diff ...HEAD` +5. Analyze the diff: + - Count total files changed + - List all modified files + - Estimate lines added in this branch +6. Present summary to user: + - Current branch: `feature-x` + - Comparing against: `main` + - Files modified: 12 + - Lines added: 450 + +--- + +## Phase 2: Codebase Style Learning + +**Goal**: Understand the existing codebase's conventions and patterns + +**Actions**: + +1. For each modified file, read a few similar files from the base branch to understand: + - Comment density and style (JSDoc vs inline, verbosity) + - Error handling patterns (when try-catch is used vs not) + - Type safety patterns (use of `any`, type assertions, strictness) + - Defensive coding patterns (null checks, validation) + - Naming conventions (verbosity, patterns) +2. Build a "style profile" for reference: + - "This codebase uses minimal inline comments" + - "Error handling is only in top-level API handlers" + - "`any` types are never used except in `legacy/` directory" + - "Null checks are only at API boundaries" +3. Present style profile to user for confirmation + +--- + +## Phase 3: Slop Detection + +**Goal**: Identify AI-generated patterns that don't match the codebase style + +**Actions**: + +1. For each file in the diff, analyze added lines for these patterns: + + **Comments**: + - JSDoc that merely restates the function name + - Inline comments explaining obvious code + - Comment density higher than similar files + - "AI-style" verbose explanations + + **Over-defensive code**: + - Try-catch blocks in areas where similar code doesn't use them + - Null/undefined checks in trusted code paths + - Duplicate validation already done upstream + - Redundant type guards + + **Type safety issues**: + - Casts to `any` to bypass type errors + - Unnecessary type assertions (`as Type`) + - Non-null assertions (like !) without clear justification + + **Style inconsistencies**: + - Naming patterns different from surrounding code + - Overly verbose variable names + - Unnecessary intermediate variables + - Single-use helper functions + +2. Categorize each slop instance: + - File path and line numbers + - Slop category (comment/defensive/type/style) + - Confidence level (high/medium/low) + - Risk level if removed (safe/review/risky) + +3. Create a detailed removal plan with file-by-file breakdown + +--- + +## Phase 4: User Review & Confirmation + +**Goal**: Get explicit approval before making any changes + +**DO NOT PROCEED WITHOUT USER APPROVAL** + +**Actions**: + +1. Present detailed report: + +``` +## Deslop Analysis Report + +### Summary +Found 145 lines of potential AI-generated slop across 12 files + +### By Category +- Comments: 45 lines (31%) - mostly redundant explanations +- Defensive code: 67 lines (46%) - unnecessary try-catch and null checks +- Type casts: 23 lines (16%) - any casts and assertions +- Style fixes: 10 lines (7%) - verbose naming and intermediate vars + +### Files to be Modified + +1. src/auth/login.ts (34 lines to remove) + HIGH CONFIDENCE: + - Lines 23-25: Redundant JSDoc comment + - Lines 45-52: Try-catch around sync operation (inconsistent with codebase) + - Line 78: Cast to `any` to bypass type error + + MEDIUM CONFIDENCE: + - Lines 89-91: Defensive null check (may be intentional) + +2. src/utils/helpers.ts (23 lines to remove) + HIGH CONFIDENCE: + - Lines 12-15: Inline comments explaining obvious code + - Lines 34-38: Unnecessary intermediate variables + + [... continue for all files ...] + +### Risk Assessment +- Safe changes: 120 lines (83%) +- Need review: 20 lines (14%) - marked above +- Risky: 5 lines (3%) - removing error handling + +### High-Risk Changes Requiring Review +⚠️ src/payment/process.ts:67 - Removing try-catch in processPayment() +⚠️ src/api/user.ts:123 - Removing type cast may need proper type fix +``` + +2. **Ask user**: "Do you want to proceed with removing this slop? You can: + - Approve all changes + - Skip high-risk changes and only apply safe ones + - Review specific files before applying + - Cancel" + +3. Wait for explicit user approval + +--- + +## Phase 5: Application + +**Goal**: Apply approved changes safely + +**DO NOT START WITHOUT USER APPROVAL** + +**Actions**: + +1. For each approved file: + - Read the current file + - Apply the slop removals + - Use Edit tool to make precise changes + - Update todos as you progress through files +2. After all changes applied: + - Show git diff summary: `git diff --stat` + - Optionally run linter if configured in project + +--- + +## Phase 6: Verification & Reporting + +**Goal**: Confirm changes are safe and provide detailed summary + +**Actions**: + +1. Run verification checks: + - Show `git status` to confirm files changed + - Check if any linter errors were introduced + - Optionally offer to run tests: `npm test` or equivalent + +2. Present final detailed report: + +``` +## Deslop Completion Report + +### Summary +Successfully cleaned 12 files, removing 145 lines of AI-generated slop + +### Changes Applied +- Comments removed: 45 lines (31%) +- Defensive code removed: 67 lines (46%) +- Type casts removed: 23 lines (16%) +- Style improvements: 10 lines (7%) + +### Files Modified +1. src/auth/login.ts - 34 lines removed + ✓ Removed 1 redundant JSDoc block + ✓ Removed 1 unnecessary try-catch + ✓ Removed 1 any cast + ⚠️ Skipped 1 high-risk change (defensive null check) + +2. src/utils/helpers.ts - 23 lines removed + ✓ Removed 4 inline comments + ✓ Simplified variable declarations + +[... continue for all files ...] + +### Statistics +- Total lines removed: 145 +- Files modified: 12 +- Safe changes applied: 120 +- High-risk changes skipped: 25 + +### Next Steps +1. Review the changes: `git diff` +2. Run tests: `npm test` (or your test command) +3. Commit changes: `git add . && git commit -m "chore: remove AI-generated slop"` +4. To undo: `git restore .` will revert uncommitted changes if needed +``` + +3. Mark all todos complete + +--- + +## Error Handling + +If at any point: + +- Base branch doesn't exist → ask user for correct branch name +- Working directory has uncommitted changes → ask user to confirm if they want to proceed anyway +- No diff found → inform user and exit gracefully +- User cancels → exit cleanly without making changes diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..3980624 --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,45 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:chmouel/claude-code-plugins:plugins/deslop", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "bf46f5a8909bb5c37ed9925c6f2560880e9b7fcd", + "treeHash": "4dd29302b31715a973b4fd615fd7fc5f830c23cf3674960d21f6b953f3b415a5", + "generatedAt": "2025-11-28T10:15:02.162701Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "deslop", + "description": "Remove AI-generated code slop from your branches", + "version": "1.0.0" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "d3850bcdf7caa50578974e29e1459455c7727f8ff25bc98c5b4896ea4321dce0" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "b9b3ad315a885c8e556ffa662d34292cf0d0b4bc3c50e3d79870c887b1c81daf" + }, + { + "path": "commands/deslop.md", + "sha256": "fdb88bfe3f2c95304738bbbcd9e50d14fac0844e1b75c5296bc2cae9be110f8c" + } + ], + "dirSha256": "4dd29302b31715a973b4fd615fd7fc5f830c23cf3674960d21f6b953f3b415a5" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file