mirror of
https://github.com/Jeuners/ECC.git
synced 2026-09-09 15:02:30 +02:00
The `.opencode/commands/*.md` frontmatter referenced agents with the Claude Code plugin namespace (`agent: everything-claude-code:<name>`), but ECC's opencode integration registers its agents unscoped in `opencode.json`'s `agent` map (`code-reviewer`, `planner`, ...), and that file's own `command` section already references them unscoped. The `everything-claude-code:` scope resolves under no opencode config (the opencode plugin package is `ecc-universal`, and inline-config agents are bare), so subtask commands like `/code-review` hard-fail with `Agent not found: everything-claude-code:code-reviewer`. Non-subtask commands fall back to the default agent and appear to work — which is why only some commands failed. Strip the `everything-claude-code:` prefix from all 30 command frontmatter agent ids so they match the registered agents, fix the MIGRATION.md example, and replace the test that enforced the broken scoped invariant with one that asserts each command agent id is a registered opencode agent (fails on the old scoped ids, passes on the fix). Fixes #2477
102 lines
2.1 KiB
Markdown
102 lines
2.1 KiB
Markdown
---
|
|
description: Remove dead code and consolidate duplicates
|
|
agent: refactor-cleaner
|
|
subtask: true
|
|
---
|
|
|
|
# Refactor Clean Command
|
|
|
|
Analyze and clean up the codebase: $ARGUMENTS
|
|
|
|
## Your Task
|
|
|
|
1. **Detect dead code** using analysis tools
|
|
2. **Identify duplicates** and consolidation opportunities
|
|
3. **Safely remove** unused code with documentation
|
|
4. **Verify** no functionality broken
|
|
|
|
## Detection Phase
|
|
|
|
### Run Analysis Tools
|
|
|
|
```bash
|
|
# Find unused exports
|
|
npx knip
|
|
|
|
# Find unused dependencies
|
|
npx depcheck
|
|
|
|
# Find unused TypeScript exports
|
|
npx ts-prune
|
|
```
|
|
|
|
### Manual Checks
|
|
|
|
- Unused functions (no callers)
|
|
- Unused variables
|
|
- Unused imports
|
|
- Commented-out code
|
|
- Unreachable code
|
|
- Unused CSS classes
|
|
|
|
## Removal Phase
|
|
|
|
### Before Removing
|
|
|
|
1. **Search for usage** - grep, find references
|
|
2. **Check exports** - might be used externally
|
|
3. **Verify tests** - no test depends on it
|
|
4. **Document removal** - git commit message
|
|
|
|
### Safe Removal Order
|
|
|
|
1. Remove unused imports first
|
|
2. Remove unused private functions
|
|
3. Remove unused exported functions
|
|
4. Remove unused types/interfaces
|
|
5. Remove unused files
|
|
|
|
## Consolidation Phase
|
|
|
|
### Identify Duplicates
|
|
|
|
- Similar functions with minor differences
|
|
- Copy-pasted code blocks
|
|
- Repeated patterns
|
|
|
|
### Consolidation Strategies
|
|
|
|
1. **Extract utility function** - for repeated logic
|
|
2. **Create base class** - for similar classes
|
|
3. **Use higher-order functions** - for repeated patterns
|
|
4. **Create shared constants** - for magic values
|
|
|
|
## Verification
|
|
|
|
After cleanup:
|
|
|
|
1. `npm run build` - builds successfully
|
|
2. `npm test` - all tests pass
|
|
3. `npm run lint` - no new lint errors
|
|
4. Manual smoke test - features work
|
|
|
|
## Report Format
|
|
|
|
```
|
|
Dead Code Analysis
|
|
==================
|
|
|
|
Removed:
|
|
- file.ts: functionName (unused export)
|
|
- utils.ts: helperFunction (no callers)
|
|
|
|
Consolidated:
|
|
- formatDate() and formatDateTime() → dateUtils.format()
|
|
|
|
Remaining (manual review needed):
|
|
- oldComponent.tsx: potentially unused, verify with team
|
|
```
|
|
|
|
---
|
|
|
|
**CAUTION**: Always verify before removing. When in doubt, ask or add `// TODO: verify usage` comment.
|