rebar-mcp 2.0.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/.claude/agents/template-writer.md +43 -0
- package/.claude/agents/test-runner.md +47 -0
- package/.claude/mcp.json +9 -0
- package/.claude/settings.json +29 -0
- package/.claude/skills/ /SKILL.md +21 -0
- package/.claude/skills/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/SKILL.md +21 -0
- package/.claude/skills/bmmibwetxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmibwjgvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmibwsesxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmibwxufxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmibx3r9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmji0lrkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmjiniphxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmjio86zxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmjiolfbxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmjit1lvxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bmmjita1qxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/SKILL.md +21 -0
- package/.claude/skills/bnd-mmibweu3/SKILL.md +21 -0
- package/.claude/skills/bnd-mmibwjh4/SKILL.md +21 -0
- package/.claude/skills/bnd-mmibwsey/SKILL.md +21 -0
- package/.claude/skills/bnd-mmibwxup/SKILL.md +21 -0
- package/.claude/skills/bnd-mmibx3rg/SKILL.md +21 -0
- package/.claude/skills/bnd-mmji0lrp/SKILL.md +21 -0
- package/.claude/skills/bnd-mmjinipm/SKILL.md +21 -0
- package/.claude/skills/bnd-mmjio875/SKILL.md +21 -0
- package/.claude/skills/bnd-mmjiolfg/SKILL.md +21 -0
- package/.claude/skills/bnd-mmjit1m3/SKILL.md +21 -0
- package/.claude/skills/bnd-mmjita1x/SKILL.md +21 -0
- package/.claude/skills/coercion-test/SKILL.md +50 -0
- package/.claude/skills/large-skill/SKILL.md +21 -0
- package/.claude/skills/long-desc-skill/SKILL.md +21 -0
- package/.claude/skills/mcp-dev/SKILL.md +61 -0
- package/.claude/skills/nl-mmibweus/SKILL.md +25 -0
- package/.claude/skills/nl-mmibwjhf/SKILL.md +25 -0
- package/.claude/skills/nl-mmibwsf7/SKILL.md +25 -0
- package/.claude/skills/nl-mmibwxvq/SKILL.md +25 -0
- package/.claude/skills/nl-mmibx3rt/SKILL.md +25 -0
- package/.claude/skills/nl-mmji0lrz/SKILL.md +25 -0
- package/.claude/skills/nl-mmjinipx/SKILL.md +25 -0
- package/.claude/skills/nl-mmjio87f/SKILL.md +25 -0
- package/.claude/skills/nl-mmjiolfs/SKILL.md +25 -0
- package/.claude/skills/nl-mmjit1mc/SKILL.md +25 -0
- package/.claude/skills/nl-mmjita26/SKILL.md +25 -0
- package/.claude/skills/rapid-1/SKILL.md +21 -0
- package/.claude/skills/rapid-2/SKILL.md +21 -0
- package/.claude/skills/rapid-3/SKILL.md +21 -0
- package/.claude/skills/rapid-4/SKILL.md +21 -0
- package/.claude/skills/rapid-5/SKILL.md +21 -0
- package/.claude/skills/test/", /"malicious/": /"true/SKILL.md" +69 -0
- package/.claude/skills/test-emoji-/360/237/230/200-skill/SKILL.md +69 -0
- package/.claude/skills/test-skill/SKILL.md +69 -0
- package/.claude/skills/test; rm -rf /; skill/SKILL.md +69 -0
- package/.claude/skills/test<script>alert(1)</script>skill/SKILL.md +69 -0
- package/.claudeignore +5 -0
- package/.mcp.json +3 -0
- package/CHANGELOG.md +29 -0
- package/CLAUDE.md +76 -0
- package/LICENSE +21 -0
- package/README.md +149 -0
- package/ROADMAP.md +526 -0
- package/ccboot-PRD-v1.0.docx.md +732 -0
- package/ccboot-v1.2.0-enforcement-spec.md +1272 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +674 -0
- package/dist/cli.js.map +1 -0
- package/dist/constants.d.ts +25 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +118 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/common.d.ts +62 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +15 -0
- package/dist/schemas/common.js.map +1 -0
- package/dist/schemas/scaffolding.d.ts +277 -0
- package/dist/schemas/scaffolding.d.ts.map +1 -0
- package/dist/schemas/scaffolding.js +133 -0
- package/dist/schemas/scaffolding.js.map +1 -0
- package/dist/services/claudemd-generator.d.ts +16 -0
- package/dist/services/claudemd-generator.d.ts.map +1 -0
- package/dist/services/claudemd-generator.js +426 -0
- package/dist/services/claudemd-generator.js.map +1 -0
- package/dist/services/codex-generator.d.ts +6 -0
- package/dist/services/codex-generator.d.ts.map +1 -0
- package/dist/services/codex-generator.js +35 -0
- package/dist/services/codex-generator.js.map +1 -0
- package/dist/services/cursor-generator.d.ts +15 -0
- package/dist/services/cursor-generator.d.ts.map +1 -0
- package/dist/services/cursor-generator.js +134 -0
- package/dist/services/cursor-generator.js.map +1 -0
- package/dist/services/file-ops.d.ts +48 -0
- package/dist/services/file-ops.d.ts.map +1 -0
- package/dist/services/file-ops.js +153 -0
- package/dist/services/file-ops.js.map +1 -0
- package/dist/services/output-formatter.d.ts +57 -0
- package/dist/services/output-formatter.d.ts.map +1 -0
- package/dist/services/output-formatter.js +88 -0
- package/dist/services/output-formatter.js.map +1 -0
- package/dist/services/platform-detect.d.ts +14 -0
- package/dist/services/platform-detect.d.ts.map +1 -0
- package/dist/services/platform-detect.js +63 -0
- package/dist/services/platform-detect.js.map +1 -0
- package/dist/services/project-analyzer.d.ts +71 -0
- package/dist/services/project-analyzer.d.ts.map +1 -0
- package/dist/services/project-analyzer.js +595 -0
- package/dist/services/project-analyzer.js.map +1 -0
- package/dist/services/rules-engine.d.ts +41 -0
- package/dist/services/rules-engine.d.ts.map +1 -0
- package/dist/services/rules-engine.js +304 -0
- package/dist/services/rules-engine.js.map +1 -0
- package/dist/services/strictness.d.ts +37 -0
- package/dist/services/strictness.d.ts.map +1 -0
- package/dist/services/strictness.js +182 -0
- package/dist/services/strictness.js.map +1 -0
- package/dist/services/template-engine.d.ts +16 -0
- package/dist/services/template-engine.d.ts.map +1 -0
- package/dist/services/template-engine.js +85 -0
- package/dist/services/template-engine.js.map +1 -0
- package/dist/services/validation.d.ts +41 -0
- package/dist/services/validation.d.ts.map +1 -0
- package/dist/services/validation.js +104 -0
- package/dist/services/validation.js.map +1 -0
- package/dist/services/windsurf-generator.d.ts +15 -0
- package/dist/services/windsurf-generator.d.ts.map +1 -0
- package/dist/services/windsurf-generator.js +127 -0
- package/dist/services/windsurf-generator.js.map +1 -0
- package/dist/tests/enforcement.test.d.ts +2 -0
- package/dist/tests/enforcement.test.d.ts.map +1 -0
- package/dist/tests/enforcement.test.js +541 -0
- package/dist/tests/enforcement.test.js.map +1 -0
- package/dist/tests/enterprise.test.d.ts +2 -0
- package/dist/tests/enterprise.test.d.ts.map +1 -0
- package/dist/tests/enterprise.test.js +353 -0
- package/dist/tests/enterprise.test.js.map +1 -0
- package/dist/tests/fuzzing.test.d.ts +2 -0
- package/dist/tests/fuzzing.test.d.ts.map +1 -0
- package/dist/tests/fuzzing.test.js +596 -0
- package/dist/tests/fuzzing.test.js.map +1 -0
- package/dist/tests/knowledge.test.d.ts +2 -0
- package/dist/tests/knowledge.test.d.ts.map +1 -0
- package/dist/tests/knowledge.test.js +292 -0
- package/dist/tests/knowledge.test.js.map +1 -0
- package/dist/tests/management.test.d.ts +2 -0
- package/dist/tests/management.test.d.ts.map +1 -0
- package/dist/tests/management.test.js +338 -0
- package/dist/tests/management.test.js.map +1 -0
- package/dist/tests/scaffolding.test.d.ts +2 -0
- package/dist/tests/scaffolding.test.d.ts.map +1 -0
- package/dist/tests/scaffolding.test.js +419 -0
- package/dist/tests/scaffolding.test.js.map +1 -0
- package/dist/tests/test-utils.d.ts +76 -0
- package/dist/tests/test-utils.d.ts.map +1 -0
- package/dist/tests/test-utils.js +171 -0
- package/dist/tests/test-utils.js.map +1 -0
- package/dist/tests/tool-harness.d.ts +18 -0
- package/dist/tests/tool-harness.d.ts.map +1 -0
- package/dist/tests/tool-harness.js +51 -0
- package/dist/tests/tool-harness.js.map +1 -0
- package/dist/tools/enterprise.d.ts +8 -0
- package/dist/tools/enterprise.d.ts.map +1 -0
- package/dist/tools/enterprise.js +571 -0
- package/dist/tools/enterprise.js.map +1 -0
- package/dist/tools/knowledge.d.ts +7 -0
- package/dist/tools/knowledge.d.ts.map +1 -0
- package/dist/tools/knowledge.js +120 -0
- package/dist/tools/knowledge.js.map +1 -0
- package/dist/tools/management.d.ts +10 -0
- package/dist/tools/management.d.ts.map +1 -0
- package/dist/tools/management.js +1541 -0
- package/dist/tools/management.js.map +1 -0
- package/dist/tools/scaffolding.d.ts +8 -0
- package/dist/tools/scaffolding.d.ts.map +1 -0
- package/dist/tools/scaffolding.js +736 -0
- package/dist/tools/scaffolding.js.map +1 -0
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/landing/app/layout.tsx +30 -0
- package/landing/app/page.tsx +944 -0
- package/landing/next-env.d.ts +6 -0
- package/landing/next.config.js +6 -0
- package/landing/package-lock.json +896 -0
- package/landing/package.json +20 -0
- package/landing/tsconfig.json +40 -0
- package/package.json +49 -0
- package/rebar-v2.0.0-platform-spec.md +1567 -0
- package/server.json +20 -0
- package/src/cli.ts +735 -0
- package/src/constants.ts +131 -0
- package/src/index.ts +54 -0
- package/src/schemas/common.ts +22 -0
- package/src/schemas/scaffolding.ts +161 -0
- package/src/services/claudemd-generator.ts +481 -0
- package/src/services/codex-generator.ts +44 -0
- package/src/services/cursor-generator.ts +153 -0
- package/src/services/file-ops.ts +172 -0
- package/src/services/platform-detect.ts +80 -0
- package/src/services/project-analyzer.ts +690 -0
- package/src/services/rules-engine.ts +353 -0
- package/src/services/strictness.ts +202 -0
- package/src/services/template-engine.ts +119 -0
- package/src/services/validation.ts +138 -0
- package/src/services/windsurf-generator.ts +145 -0
- package/src/tests/enforcement.test.ts +794 -0
- package/src/tests/enterprise.test.ts +483 -0
- package/src/tests/fuzzing.test.ts +690 -0
- package/src/tests/knowledge.test.ts +371 -0
- package/src/tests/management.test.ts +451 -0
- package/src/tests/scaffolding.test.ts +575 -0
- package/src/tests/test-utils.ts +206 -0
- package/src/tests/tool-harness.ts +70 -0
- package/src/tools/enterprise.ts +666 -0
- package/src/tools/knowledge.ts +162 -0
- package/src/tools/management.ts +1706 -0
- package/src/tools/scaffolding.ts +909 -0
- package/src/types.ts +93 -0
- package/supabase/.temp/cli-latest +1 -0
- package/supabase/.temp/gotrue-version +1 -0
- package/supabase/.temp/pooler-url +1 -0
- package/supabase/.temp/postgres-version +1 -0
- package/supabase/.temp/project-ref +1 -0
- package/supabase/.temp/rest-version +1 -0
- package/supabase/.temp/storage-migration +1 -0
- package/supabase/.temp/storage-version +1 -0
- package/templates/agents/explore.md +41 -0
- package/templates/agents/plan.md +73 -0
- package/templates/agents/security-auditor.md +77 -0
- package/templates/agents/test-runner.md +60 -0
- package/templates/claudemd/fastapi.md +49 -0
- package/templates/claudemd/monorepo.md +48 -0
- package/templates/claudemd/nextjs.md +52 -0
- package/templates/claudemd/react-spa.md +50 -0
- package/templates/claudemd/springboot.md +50 -0
- package/templates/hooks/danger-blocker.json +11 -0
- package/templates/hooks/format-on-write.json +17 -0
- package/templates/hooks/lint-on-write.json +16 -0
- package/templates/hooks/secret-detector.json +11 -0
- package/templates/skills/code-review.md +68 -0
- package/templates/skills/documentation.md +62 -0
- package/templates/skills/performance-audit.md +80 -0
- package/templates/skills/security-scan.md +66 -0
- package/templates/skills/test-writer.md +56 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-review
|
|
3
|
+
description: Reviews code changes for security, correctness, performance, and maintainability
|
|
4
|
+
invocation: auto
|
|
5
|
+
context: fork
|
|
6
|
+
agent_type: general-purpose
|
|
7
|
+
allowed_tools:
|
|
8
|
+
- Read
|
|
9
|
+
- Grep
|
|
10
|
+
- Glob
|
|
11
|
+
- Bash
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Code Review
|
|
15
|
+
|
|
16
|
+
You are a senior staff engineer performing a thorough code review. Your review should
|
|
17
|
+
catch real bugs before production, not nitpick formatting.
|
|
18
|
+
|
|
19
|
+
## What to Review
|
|
20
|
+
|
|
21
|
+
### 1. Security (Critical)
|
|
22
|
+
- SQL injection, XSS, command injection, path traversal
|
|
23
|
+
- Hardcoded secrets, API keys, or credentials
|
|
24
|
+
- Missing authentication/authorization checks
|
|
25
|
+
- Unsafe deserialization of user input
|
|
26
|
+
- Logging sensitive data (passwords, tokens, PII)
|
|
27
|
+
|
|
28
|
+
### 2. Correctness (Critical)
|
|
29
|
+
- Logic errors, off-by-one mistakes, null dereferences
|
|
30
|
+
- Race conditions in concurrent code
|
|
31
|
+
- Missing error handling for I/O operations
|
|
32
|
+
- Incorrect types or unsafe casts
|
|
33
|
+
- Edge cases: empty arrays, zero values, undefined, null
|
|
34
|
+
|
|
35
|
+
### 3. Performance (Warning)
|
|
36
|
+
- N+1 database queries (loops that trigger queries)
|
|
37
|
+
- Missing database indexes for common query patterns
|
|
38
|
+
- Unbounded data fetching (no pagination/limits)
|
|
39
|
+
- Memory leaks: unclosed streams, unremoved event listeners
|
|
40
|
+
- Sequential async calls that could be parallelized
|
|
41
|
+
|
|
42
|
+
### 4. Maintainability (Suggestion)
|
|
43
|
+
- Functions over 50 lines that should be extracted
|
|
44
|
+
- Duplicated logic that should be shared
|
|
45
|
+
- Unclear naming that will confuse future developers
|
|
46
|
+
- Missing type safety that invites runtime errors
|
|
47
|
+
|
|
48
|
+
## Output Format
|
|
49
|
+
|
|
50
|
+
Group findings by severity. For each finding:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
[SEVERITY] file:line — Brief title
|
|
54
|
+
Problem: What's wrong and why it matters
|
|
55
|
+
Fix: Specific code change to make
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Severities:
|
|
59
|
+
- **CRITICAL**: Must fix — security vulnerability or data loss risk
|
|
60
|
+
- **BUG**: Likely defect — incorrect behavior in normal use
|
|
61
|
+
- **WARNING**: Should fix — performance issue or code smell
|
|
62
|
+
- **SUGGESTION**: Consider — improvement for readability/maintainability
|
|
63
|
+
|
|
64
|
+
## Rules
|
|
65
|
+
- Never flag formatting issues (linters handle that)
|
|
66
|
+
- Never suggest adding comments to self-documenting code
|
|
67
|
+
- If the code is clean, say so — don't invent issues
|
|
68
|
+
- Be specific: "Line 42: `userId` can be null here" not "check for null values"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: documentation
|
|
3
|
+
description: Generates and updates project documentation from code analysis
|
|
4
|
+
invocation: user
|
|
5
|
+
context: inline
|
|
6
|
+
allowed_tools:
|
|
7
|
+
- Read
|
|
8
|
+
- Write
|
|
9
|
+
- Grep
|
|
10
|
+
- Glob
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Documentation
|
|
14
|
+
|
|
15
|
+
Generate useful documentation, not documentation for documentation's sake.
|
|
16
|
+
|
|
17
|
+
## What to Document
|
|
18
|
+
|
|
19
|
+
### High Value (always worth documenting)
|
|
20
|
+
- **API endpoints**: Method, path, request/response schemas, auth requirements, examples
|
|
21
|
+
- **Architecture decisions**: Why we chose X over Y (create ADRs for these)
|
|
22
|
+
- **Setup procedures**: How to get the project running from scratch
|
|
23
|
+
- **Non-obvious behavior**: Code that does something surprising or counterintuitive
|
|
24
|
+
- **Domain terminology**: Business terms that appear in the code
|
|
25
|
+
|
|
26
|
+
### Low Value (skip unless asked)
|
|
27
|
+
- Self-documenting function signatures
|
|
28
|
+
- Trivial getters/setters
|
|
29
|
+
- Framework boilerplate
|
|
30
|
+
- Comments that restate the code
|
|
31
|
+
|
|
32
|
+
## Documentation Formats
|
|
33
|
+
|
|
34
|
+
### API Documentation
|
|
35
|
+
```
|
|
36
|
+
## POST /api/users
|
|
37
|
+
|
|
38
|
+
Creates a new user account.
|
|
39
|
+
|
|
40
|
+
**Auth**: Bearer token (admin role required)
|
|
41
|
+
**Rate limit**: 10 requests/minute
|
|
42
|
+
|
|
43
|
+
**Request body**:
|
|
44
|
+
| Field | Type | Required | Description |
|
|
45
|
+
|----------|--------|----------|-----------------------|
|
|
46
|
+
| email | string | yes | Valid email address |
|
|
47
|
+
| name | string | yes | Display name (2-100 chars) |
|
|
48
|
+
|
|
49
|
+
**Response**: 201 Created
|
|
50
|
+
**Errors**: 400 (validation), 409 (email taken), 429 (rate limit)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Code Comments
|
|
54
|
+
- Use JSDoc/docstrings for public API functions
|
|
55
|
+
- Explain WHY, not WHAT (the code shows what)
|
|
56
|
+
- Link to related ADRs or tickets for complex logic
|
|
57
|
+
|
|
58
|
+
## Rules
|
|
59
|
+
- Write for someone who just joined the team
|
|
60
|
+
- Include runnable examples, not pseudocode
|
|
61
|
+
- Keep docs next to the code they describe
|
|
62
|
+
- If a doc is wrong, it's worse than no doc — verify accuracy
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: performance-audit
|
|
3
|
+
description: Finds performance bottlenecks — N+1 queries, memory leaks, unnecessary re-renders, bundle bloat
|
|
4
|
+
invocation: user
|
|
5
|
+
context: fork
|
|
6
|
+
agent_type: general-purpose
|
|
7
|
+
allowed_tools:
|
|
8
|
+
- Read
|
|
9
|
+
- Grep
|
|
10
|
+
- Glob
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Performance Audit
|
|
14
|
+
|
|
15
|
+
Find real performance bottlenecks that affect user experience,
|
|
16
|
+
not micro-optimizations that save nanoseconds.
|
|
17
|
+
|
|
18
|
+
## Checks (by impact)
|
|
19
|
+
|
|
20
|
+
### Database (High Impact)
|
|
21
|
+
- **N+1 queries**: Database calls inside `for` loops, `.map()`, or `.forEach()`
|
|
22
|
+
```
|
|
23
|
+
// BAD: 1 + N queries
|
|
24
|
+
const users = await db.users.findAll();
|
|
25
|
+
for (const user of users) {
|
|
26
|
+
user.orders = await db.orders.findByUserId(user.id); // N queries!
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// GOOD: 2 queries
|
|
30
|
+
const users = await db.users.findAll({ include: ['orders'] });
|
|
31
|
+
```
|
|
32
|
+
- **Missing indexes**: WHERE/ORDER BY columns without indexes
|
|
33
|
+
- **Unbounded queries**: `SELECT *` without LIMIT on large tables
|
|
34
|
+
- **Unnecessary eager loading**: Loading relations that aren't used
|
|
35
|
+
|
|
36
|
+
### Frontend (High Impact)
|
|
37
|
+
- **Unnecessary re-renders**: Components re-rendering when props haven't changed
|
|
38
|
+
- Missing `React.memo()` on expensive components
|
|
39
|
+
- Unstable object/array references in props (created inline every render)
|
|
40
|
+
- Missing `useMemo`/`useCallback` for expensive computations
|
|
41
|
+
- **Bundle size**: Large imports that could be lazy-loaded or tree-shaken
|
|
42
|
+
- `import moment from 'moment'` (use `date-fns` or `dayjs`)
|
|
43
|
+
- `import _ from 'lodash'` (use `lodash-es` with tree-shaking)
|
|
44
|
+
- Large components that should use `React.lazy()`
|
|
45
|
+
|
|
46
|
+
### Async Patterns (Medium Impact)
|
|
47
|
+
- **Sequential awaits** that could be parallelized:
|
|
48
|
+
```
|
|
49
|
+
// BAD: 600ms total
|
|
50
|
+
const a = await fetchA(); // 200ms
|
|
51
|
+
const b = await fetchB(); // 200ms
|
|
52
|
+
const c = await fetchC(); // 200ms
|
|
53
|
+
|
|
54
|
+
// GOOD: 200ms total
|
|
55
|
+
const [a, b, c] = await Promise.all([fetchA(), fetchB(), fetchC()]);
|
|
56
|
+
```
|
|
57
|
+
- **Missing connection pooling** for database/HTTP connections
|
|
58
|
+
- **No request deduplication**: Same API called multiple times simultaneously
|
|
59
|
+
|
|
60
|
+
### Memory (Medium Impact)
|
|
61
|
+
- **Event listener leaks**: `addEventListener` without `removeEventListener`
|
|
62
|
+
- **Timer leaks**: `setInterval` without `clearInterval` on cleanup
|
|
63
|
+
- **Subscription leaks**: Observable subscriptions without unsubscribe
|
|
64
|
+
- **Closure leaks**: Closures holding references to large objects
|
|
65
|
+
|
|
66
|
+
## Output Format
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
[IMPACT] Category — Title
|
|
70
|
+
File: path/to/file.ts:42
|
|
71
|
+
Issue: What the problem is
|
|
72
|
+
Evidence: How you identified it (query pattern, import size, etc.)
|
|
73
|
+
Fix: Specific solution with code example
|
|
74
|
+
Savings: Estimated improvement (e.g., "reduces API calls from N+1 to 2")
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Rules
|
|
78
|
+
- Focus on bottlenecks that affect P95 latency or real users
|
|
79
|
+
- Don't suggest premature optimization ("this loop runs 3 times")
|
|
80
|
+
- Always provide a concrete fix, not "consider optimizing"
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-scan
|
|
3
|
+
description: Scans code for OWASP Top 10 vulnerabilities and security anti-patterns
|
|
4
|
+
invocation: auto
|
|
5
|
+
context: fork
|
|
6
|
+
agent_type: general-purpose
|
|
7
|
+
allowed_tools:
|
|
8
|
+
- Read
|
|
9
|
+
- Grep
|
|
10
|
+
- Glob
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Security Scan
|
|
14
|
+
|
|
15
|
+
You are a security engineer performing a targeted vulnerability assessment.
|
|
16
|
+
Focus on exploitable issues, not theoretical concerns.
|
|
17
|
+
|
|
18
|
+
## OWASP Top 10 Checks
|
|
19
|
+
|
|
20
|
+
### A01: Broken Access Control
|
|
21
|
+
- Missing authorization checks on endpoints
|
|
22
|
+
- IDOR: User can access other users' resources by changing IDs
|
|
23
|
+
- Missing CORS restrictions on sensitive endpoints
|
|
24
|
+
- Directory traversal in file paths
|
|
25
|
+
|
|
26
|
+
### A02: Cryptographic Failures
|
|
27
|
+
- Passwords stored in plaintext or with weak hashing (MD5, SHA1)
|
|
28
|
+
- Sensitive data transmitted without TLS
|
|
29
|
+
- Hardcoded encryption keys or IVs
|
|
30
|
+
- Use of deprecated crypto algorithms
|
|
31
|
+
|
|
32
|
+
### A03: Injection
|
|
33
|
+
- SQL queries built with string concatenation
|
|
34
|
+
- Shell commands with unsanitized user input
|
|
35
|
+
- HTML rendered without escaping (XSS)
|
|
36
|
+
- NoSQL injection vectors
|
|
37
|
+
|
|
38
|
+
### A05: Security Misconfiguration
|
|
39
|
+
- Debug mode enabled in production configs
|
|
40
|
+
- Default credentials in config files
|
|
41
|
+
- Stack traces exposed in error responses
|
|
42
|
+
- Permissive CORS (`Access-Control-Allow-Origin: *`)
|
|
43
|
+
|
|
44
|
+
### A07: Authentication Failures
|
|
45
|
+
- No brute-force protection on login
|
|
46
|
+
- Session tokens in URLs or logs
|
|
47
|
+
- JWT without expiration or with `none` algorithm
|
|
48
|
+
|
|
49
|
+
### A09: Logging Failures
|
|
50
|
+
- Sensitive data in logs (passwords, tokens, SSN, credit cards)
|
|
51
|
+
- Missing audit trail for privileged operations
|
|
52
|
+
|
|
53
|
+
## Output Format
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
[SEVERITY] OWASP-Category — Title
|
|
57
|
+
File: path/to/file.ts:42
|
|
58
|
+
Issue: Specific vulnerability description
|
|
59
|
+
Exploit: How an attacker could use this
|
|
60
|
+
Fix: Exact code change needed
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Rules
|
|
64
|
+
- Only flag real, exploitable vulnerabilities
|
|
65
|
+
- Always include a specific fix, not just "sanitize input"
|
|
66
|
+
- Prioritize: auth bypass > injection > data exposure > misconfiguration
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-writer
|
|
3
|
+
description: Generates comprehensive tests matching the project's existing test patterns
|
|
4
|
+
invocation: user
|
|
5
|
+
context: inline
|
|
6
|
+
allowed_tools:
|
|
7
|
+
- Read
|
|
8
|
+
- Write
|
|
9
|
+
- Grep
|
|
10
|
+
- Glob
|
|
11
|
+
- Bash
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Test Writer
|
|
15
|
+
|
|
16
|
+
You write tests that catch real bugs, not tests that just check if the code runs.
|
|
17
|
+
|
|
18
|
+
## Before Writing
|
|
19
|
+
|
|
20
|
+
1. **Read existing tests** — find 2-3 test files to understand:
|
|
21
|
+
- Which testing framework (Jest, Vitest, pytest, JUnit, etc.)
|
|
22
|
+
- Test file naming convention (`.test.ts`, `.spec.ts`, `_test.go`, etc.)
|
|
23
|
+
- Test location (colocated vs. `__tests__/` vs. `test/`)
|
|
24
|
+
- Mocking patterns used (jest.mock, vi.mock, unittest.mock, etc.)
|
|
25
|
+
- Setup/teardown patterns (beforeEach, fixtures, etc.)
|
|
26
|
+
|
|
27
|
+
2. **Read the code under test** — understand:
|
|
28
|
+
- All public functions and their signatures
|
|
29
|
+
- Edge cases: What happens with null/undefined/empty/zero/negative inputs?
|
|
30
|
+
- Error paths: What exceptions can be thrown?
|
|
31
|
+
- Side effects: Database calls, API calls, file system operations
|
|
32
|
+
|
|
33
|
+
## Test Writing Rules
|
|
34
|
+
|
|
35
|
+
### Coverage Strategy
|
|
36
|
+
- **Happy path**: Normal inputs produce expected outputs
|
|
37
|
+
- **Edge cases**: Empty strings, empty arrays, zero, negative numbers, max values
|
|
38
|
+
- **Error cases**: Invalid inputs, network failures, permission errors
|
|
39
|
+
- **Boundary conditions**: First item, last item, exactly at limits
|
|
40
|
+
|
|
41
|
+
### Quality Standards
|
|
42
|
+
- Each test has a descriptive name: `"returns empty array when user has no orders"`
|
|
43
|
+
- One assertion per concept (not one assertion per test)
|
|
44
|
+
- Tests are independent — no test relies on another test's side effects
|
|
45
|
+
- Mock external dependencies (APIs, databases) — never make real calls
|
|
46
|
+
- Use factories/fixtures for complex test data
|
|
47
|
+
|
|
48
|
+
### Anti-Patterns to Avoid
|
|
49
|
+
- Testing implementation details (internal method calls, private state)
|
|
50
|
+
- Snapshot tests for logic (only use for UI rendering)
|
|
51
|
+
- Tests that pass when the code is broken
|
|
52
|
+
- Copy-pasting the implementation as the expected value
|
|
53
|
+
|
|
54
|
+
## Output
|
|
55
|
+
Place test files where the project convention expects them.
|
|
56
|
+
Run the tests after writing to verify they pass.
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "Node16",
|
|
5
|
+
"moduleResolution": "Node16",
|
|
6
|
+
"outDir": "./dist",
|
|
7
|
+
"rootDir": "./src",
|
|
8
|
+
"strict": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"forceConsistentCasingInFileNames": true,
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"declaration": true,
|
|
14
|
+
"declarationMap": true,
|
|
15
|
+
"sourceMap": true
|
|
16
|
+
},
|
|
17
|
+
"include": ["src/**/*"],
|
|
18
|
+
"exclude": ["node_modules", "dist"]
|
|
19
|
+
}
|