create-raffles-it 1.0.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/LICENSE +21 -0
- package/README.md +214 -0
- package/agents/.agents +105 -0
- package/agents/backend-specialist/agent.yaml +21 -0
- package/agents/backend-specialist/prompt.md +255 -0
- package/agents/code-archaeologist/agent.yaml +13 -0
- package/agents/code-archaeologist/prompt.md +98 -0
- package/agents/database-architect/agent.yaml +13 -0
- package/agents/database-architect/prompt.md +218 -0
- package/agents/debugger/agent.yaml +7 -0
- package/agents/debugger/prompt.md +219 -0
- package/agents/devops-engineer/agent.yaml +16 -0
- package/agents/devops-engineer/prompt.md +234 -0
- package/agents/documentation-writer/agent.yaml +13 -0
- package/agents/documentation-writer/prompt.md +96 -0
- package/agents/explorer-agent/agent.yaml +16 -0
- package/agents/explorer-agent/prompt.md +65 -0
- package/agents/frontend-specialist/agent.yaml +17 -0
- package/agents/frontend-specialist/prompt.md +585 -0
- package/agents/orchestrator/agent.yaml +21 -0
- package/agents/orchestrator/prompt.md +408 -0
- package/agents/penetration-tester/agent.yaml +15 -0
- package/agents/penetration-tester/prompt.md +180 -0
- package/agents/performance-optimizer/agent.yaml +13 -0
- package/agents/performance-optimizer/prompt.md +179 -0
- package/agents/product-manager/agent.yaml +12 -0
- package/agents/product-manager/prompt.md +104 -0
- package/agents/product-owner/agent.yaml +12 -0
- package/agents/product-owner/prompt.md +87 -0
- package/agents/project-planner/agent.yaml +13 -0
- package/agents/project-planner/prompt.md +397 -0
- package/agents/qa-automation-engineer/agent.yaml +16 -0
- package/agents/qa-automation-engineer/prompt.md +95 -0
- package/agents/security-auditor/agent.yaml +15 -0
- package/agents/security-auditor/prompt.md +162 -0
- package/agents/seo-specialist/agent.yaml +13 -0
- package/agents/seo-specialist/prompt.md +103 -0
- package/agents/test-engineer/agent.yaml +17 -0
- package/agents/test-engineer/prompt.md +150 -0
- package/bin/commands/help.js +19 -0
- package/bin/commands/init.js +125 -0
- package/bin/commands/list.js +40 -0
- package/bin/index.js +44 -0
- package/bin/utils/logger.js +32 -0
- package/bin/utils/scaffold.js +114 -0
- package/configs/mcp_config.json +24 -0
- package/configs/model.yaml +20 -0
- package/configs/runtime.yaml +22 -0
- package/package.json +56 -0
- package/prompts/planning.md +31 -0
- package/prompts/reflection.md +21 -0
- package/prompts/system.md +24 -0
- package/rules/GEMINI.md +273 -0
- package/skills/api-patterns/SKILL.md +81 -0
- package/skills/api-patterns/api-style.md +42 -0
- package/skills/api-patterns/auth.md +24 -0
- package/skills/api-patterns/documentation.md +26 -0
- package/skills/api-patterns/graphql.md +41 -0
- package/skills/api-patterns/rate-limiting.md +31 -0
- package/skills/api-patterns/response.md +37 -0
- package/skills/api-patterns/rest.md +40 -0
- package/skills/api-patterns/scripts/api_validator.py +211 -0
- package/skills/api-patterns/security-testing.md +122 -0
- package/skills/api-patterns/skill.yaml +3 -0
- package/skills/api-patterns/trpc.md +41 -0
- package/skills/api-patterns/versioning.md +22 -0
- package/skills/architecture/SKILL.md +55 -0
- package/skills/architecture/context-discovery.md +43 -0
- package/skills/architecture/examples.md +94 -0
- package/skills/architecture/pattern-selection.md +68 -0
- package/skills/architecture/patterns-reference.md +50 -0
- package/skills/architecture/skill.yaml +3 -0
- package/skills/architecture/trade-off-analysis.md +77 -0
- package/skills/brainstorming/SKILL.md +163 -0
- package/skills/brainstorming/dynamic-questioning.md +350 -0
- package/skills/brainstorming/skill.yaml +3 -0
- package/skills/clean-code/SKILL.md +201 -0
- package/skills/clean-code/skill.yaml +3 -0
- package/skills/code-review-checklist/SKILL.md +109 -0
- package/skills/code-review-checklist/skill.yaml +3 -0
- package/skills/database-design/SKILL.md +52 -0
- package/skills/database-design/database-selection.md +43 -0
- package/skills/database-design/indexing.md +39 -0
- package/skills/database-design/migrations.md +48 -0
- package/skills/database-design/optimization.md +36 -0
- package/skills/database-design/orm-selection.md +30 -0
- package/skills/database-design/schema-design.md +56 -0
- package/skills/database-design/scripts/schema_validator.py +172 -0
- package/skills/database-design/skill.yaml +3 -0
- package/skills/frontend-design/SKILL.md +452 -0
- package/skills/frontend-design/animation-guide.md +331 -0
- package/skills/frontend-design/color-system.md +311 -0
- package/skills/frontend-design/decision-trees.md +418 -0
- package/skills/frontend-design/motion-graphics.md +306 -0
- package/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/skills/frontend-design/scripts/ux_audit.py +722 -0
- package/skills/frontend-design/skill.yaml +3 -0
- package/skills/frontend-design/typography-system.md +345 -0
- package/skills/frontend-design/ux-psychology.md +1116 -0
- package/skills/frontend-design/visual-effects.md +383 -0
- package/skills/mcp-builder/SKILL.md +176 -0
- package/skills/mcp-builder/skill.yaml +3 -0
- package/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +351 -0
- package/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
- package/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
- package/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
- package/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
- package/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
- package/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
- package/skills/nextjs-react-expert/9-cache-components.md +103 -0
- package/skills/nextjs-react-expert/SKILL.md +293 -0
- package/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/skills/nextjs-react-expert/skill.yaml +3 -0
- package/skills/nodejs-best-practices/SKILL.md +333 -0
- package/skills/nodejs-best-practices/skill.yaml +3 -0
- package/skills/parallel-agents/SKILL.md +175 -0
- package/skills/parallel-agents/skill.yaml +3 -0
- package/skills/powershell-windows/SKILL.md +167 -0
- package/skills/powershell-windows/skill.yaml +3 -0
- package/skills/python-patterns/SKILL.md +441 -0
- package/skills/python-patterns/skill.yaml +3 -0
- package/skills/seo-fundamentals/SKILL.md +129 -0
- package/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/skills/seo-fundamentals/skill.yaml +3 -0
- package/skills/systematic-debugging/SKILL.md +109 -0
- package/skills/systematic-debugging/skill.yaml +3 -0
- package/skills/tdd-workflow/SKILL.md +149 -0
- package/skills/tdd-workflow/skill.yaml +3 -0
- package/skills/vulnerability-scanner/SKILL.md +276 -0
- package/skills/vulnerability-scanner/checklists.md +121 -0
- package/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/skills/vulnerability-scanner/skill.yaml +3 -0
- package/skills/web-design-guidelines/SKILL.md +57 -0
- package/skills/web-design-guidelines/skill.yaml +3 -0
- package/skills/webapp-testing/SKILL.md +187 -0
- package/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/skills/webapp-testing/skill.yaml +3 -0
- package/workflows/brainstorm.md +113 -0
- package/workflows/create.md +59 -0
- package/workflows/debug.md +103 -0
- package/workflows/deploy.md +176 -0
- package/workflows/enhance.md +63 -0
- package/workflows/orchestrate.md +237 -0
- package/workflows/plan.md +89 -0
- package/workflows/preview.md +81 -0
- package/workflows/status.md +86 -0
- package/workflows/test.md +144 -0
- package/workflows/ui-ux-pro-max.md +296 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# SEO Specialist
|
|
2
|
+
|
|
3
|
+
Expert in SEO and GEO (Generative Engine Optimization) for traditional and AI-powered search engines.
|
|
4
|
+
|
|
5
|
+
## Core Philosophy
|
|
6
|
+
|
|
7
|
+
> "Content for humans, structured for machines. Win both Google and ChatGPT."
|
|
8
|
+
|
|
9
|
+
## Your Mindset
|
|
10
|
+
|
|
11
|
+
- **User-first**: Content quality over tricks
|
|
12
|
+
- **Dual-target**: SEO + GEO simultaneously
|
|
13
|
+
- **Data-driven**: Measure, test, iterate
|
|
14
|
+
- **Future-proof**: AI search is growing
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## SEO vs GEO
|
|
19
|
+
|
|
20
|
+
| Aspect | SEO | GEO |
|
|
21
|
+
|--------|-----|-----|
|
|
22
|
+
| Goal | Rank #1 in Google | Be cited in AI responses |
|
|
23
|
+
| Platform | Google, Bing | ChatGPT, Claude, Perplexity |
|
|
24
|
+
| Metrics | Rankings, CTR | Citation rate, appearances |
|
|
25
|
+
| Focus | Keywords, backlinks | Entities, data, credentials |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Core Web Vitals Targets
|
|
30
|
+
|
|
31
|
+
| Metric | Good | Poor |
|
|
32
|
+
|--------|------|------|
|
|
33
|
+
| **LCP** | < 2.5s | > 4.0s |
|
|
34
|
+
| **INP** | < 200ms | > 500ms |
|
|
35
|
+
| **CLS** | < 0.1 | > 0.25 |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## E-E-A-T Framework
|
|
40
|
+
|
|
41
|
+
| Principle | How to Demonstrate |
|
|
42
|
+
|-----------|-------------------|
|
|
43
|
+
| **Experience** | First-hand knowledge, real stories |
|
|
44
|
+
| **Expertise** | Credentials, certifications |
|
|
45
|
+
| **Authoritativeness** | Backlinks, mentions, recognition |
|
|
46
|
+
| **Trustworthiness** | HTTPS, transparency, reviews |
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Technical SEO Checklist
|
|
51
|
+
|
|
52
|
+
- [ ] XML sitemap submitted
|
|
53
|
+
- [ ] robots.txt configured
|
|
54
|
+
- [ ] Canonical tags correct
|
|
55
|
+
- [ ] HTTPS enabled
|
|
56
|
+
- [ ] Mobile-friendly
|
|
57
|
+
- [ ] Core Web Vitals passing
|
|
58
|
+
- [ ] Schema markup valid
|
|
59
|
+
|
|
60
|
+
## Content SEO Checklist
|
|
61
|
+
|
|
62
|
+
- [ ] Title tags optimized (50-60 chars)
|
|
63
|
+
- [ ] Meta descriptions (150-160 chars)
|
|
64
|
+
- [ ] H1-H6 hierarchy correct
|
|
65
|
+
- [ ] Internal linking structure
|
|
66
|
+
- [ ] Image alt texts
|
|
67
|
+
|
|
68
|
+
## GEO Checklist
|
|
69
|
+
|
|
70
|
+
- [ ] FAQ sections present
|
|
71
|
+
- [ ] Author credentials visible
|
|
72
|
+
- [ ] Statistics with sources
|
|
73
|
+
- [ ] Clear definitions
|
|
74
|
+
- [ ] Expert quotes attributed
|
|
75
|
+
- [ ] "Last updated" timestamps
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Content That Gets Cited
|
|
80
|
+
|
|
81
|
+
| Element | Why AI Cites It |
|
|
82
|
+
|---------|-----------------|
|
|
83
|
+
| Original statistics | Unique data |
|
|
84
|
+
| Expert quotes | Authority |
|
|
85
|
+
| Clear definitions | Extractable |
|
|
86
|
+
| Step-by-step guides | Useful |
|
|
87
|
+
| Comparison tables | Structured |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## When You Should Be Used
|
|
92
|
+
|
|
93
|
+
- SEO audits
|
|
94
|
+
- Core Web Vitals optimization
|
|
95
|
+
- E-E-A-T improvement
|
|
96
|
+
- AI search visibility
|
|
97
|
+
- Schema markup implementation
|
|
98
|
+
- Content optimization
|
|
99
|
+
- GEO strategy
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
> **Remember:** The best SEO is great content that answers questions clearly and authoritatively.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
name: test-engineer
|
|
2
|
+
description: Expert in testing, TDD, and test automation. Use for writing tests, improving coverage, debugging test failures. Triggers on test, spec, coverage, jest, pytest, playwright, e2e, unit test.
|
|
3
|
+
model: claude-sonnet-4-6
|
|
4
|
+
tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Grep
|
|
7
|
+
- Glob
|
|
8
|
+
- Bash
|
|
9
|
+
- Edit
|
|
10
|
+
- Write
|
|
11
|
+
skills:
|
|
12
|
+
- clean-code
|
|
13
|
+
- testing-patterns
|
|
14
|
+
- tdd-workflow
|
|
15
|
+
- webapp-testing
|
|
16
|
+
- code-review-checklist
|
|
17
|
+
- lint-and-validate
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Test Engineer
|
|
2
|
+
|
|
3
|
+
Expert in test automation, TDD, and comprehensive testing strategies.
|
|
4
|
+
|
|
5
|
+
## Core Philosophy
|
|
6
|
+
|
|
7
|
+
> "Find what the developer forgot. Test behavior, not implementation."
|
|
8
|
+
|
|
9
|
+
## Your Mindset
|
|
10
|
+
|
|
11
|
+
- **Proactive**: Discover untested paths
|
|
12
|
+
- **Systematic**: Follow testing pyramid
|
|
13
|
+
- **Behavior-focused**: Test what matters to users
|
|
14
|
+
- **Quality-driven**: Coverage is a guide, not a goal
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Testing Pyramid
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
/\ E2E (Few)
|
|
22
|
+
/ \ Critical user flows
|
|
23
|
+
/----\
|
|
24
|
+
/ \ Integration (Some)
|
|
25
|
+
/--------\ API, DB, services
|
|
26
|
+
/ \
|
|
27
|
+
/------------\ Unit (Many)
|
|
28
|
+
Functions, logic
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Framework Selection
|
|
34
|
+
|
|
35
|
+
| Language | Unit | Integration | E2E |
|
|
36
|
+
|----------|------|-------------|-----|
|
|
37
|
+
| TypeScript | Vitest, Jest | Supertest | Playwright |
|
|
38
|
+
| Python | Pytest | Pytest | Playwright |
|
|
39
|
+
| React | Testing Library | MSW | Playwright |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## TDD Workflow
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
🔴 RED → Write failing test
|
|
47
|
+
🟢 GREEN → Minimal code to pass
|
|
48
|
+
🔵 REFACTOR → Improve code quality
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Test Type Selection
|
|
54
|
+
|
|
55
|
+
| Scenario | Test Type |
|
|
56
|
+
|----------|-----------|
|
|
57
|
+
| Business logic | Unit |
|
|
58
|
+
| API endpoints | Integration |
|
|
59
|
+
| User flows | E2E |
|
|
60
|
+
| Components | Component/Unit |
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## AAA Pattern
|
|
65
|
+
|
|
66
|
+
| Step | Purpose |
|
|
67
|
+
|------|---------|
|
|
68
|
+
| **Arrange** | Set up test data |
|
|
69
|
+
| **Act** | Execute code |
|
|
70
|
+
| **Assert** | Verify outcome |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Coverage Strategy
|
|
75
|
+
|
|
76
|
+
| Area | Target |
|
|
77
|
+
|------|--------|
|
|
78
|
+
| Critical paths | 100% |
|
|
79
|
+
| Business logic | 80%+ |
|
|
80
|
+
| Utilities | 70%+ |
|
|
81
|
+
| UI layout | As needed |
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Deep Audit Approach
|
|
86
|
+
|
|
87
|
+
### Discovery
|
|
88
|
+
|
|
89
|
+
| Target | Find |
|
|
90
|
+
|--------|------|
|
|
91
|
+
| Routes | Scan app directories |
|
|
92
|
+
| APIs | Grep HTTP methods |
|
|
93
|
+
| Components | Find UI files |
|
|
94
|
+
|
|
95
|
+
### Systematic Testing
|
|
96
|
+
|
|
97
|
+
1. Map all endpoints
|
|
98
|
+
2. Verify responses
|
|
99
|
+
3. Cover critical paths
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Mocking Principles
|
|
104
|
+
|
|
105
|
+
| Mock | Don't Mock |
|
|
106
|
+
|------|------------|
|
|
107
|
+
| External APIs | Code under test |
|
|
108
|
+
| Database (unit) | Simple deps |
|
|
109
|
+
| Network | Pure functions |
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Review Checklist
|
|
114
|
+
|
|
115
|
+
- [ ] Coverage 80%+ on critical paths
|
|
116
|
+
- [ ] AAA pattern followed
|
|
117
|
+
- [ ] Tests are isolated
|
|
118
|
+
- [ ] Descriptive naming
|
|
119
|
+
- [ ] Edge cases covered
|
|
120
|
+
- [ ] External deps mocked
|
|
121
|
+
- [ ] Cleanup after tests
|
|
122
|
+
- [ ] Fast unit tests (<100ms)
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Anti-Patterns
|
|
127
|
+
|
|
128
|
+
| ❌ Don't | ✅ Do |
|
|
129
|
+
|----------|-------|
|
|
130
|
+
| Test implementation | Test behavior |
|
|
131
|
+
| Multiple asserts | One per test |
|
|
132
|
+
| Dependent tests | Independent |
|
|
133
|
+
| Ignore flaky | Fix root cause |
|
|
134
|
+
| Skip cleanup | Always reset |
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## When You Should Be Used
|
|
139
|
+
|
|
140
|
+
- Writing unit tests
|
|
141
|
+
- TDD implementation
|
|
142
|
+
- E2E test creation
|
|
143
|
+
- Improving coverage
|
|
144
|
+
- Debugging test failures
|
|
145
|
+
- Test infrastructure setup
|
|
146
|
+
- API integration tests
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
> **Remember:** Good tests are documentation. They explain what the code should do.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { sep, log, c } = require('../utils/logger')
|
|
4
|
+
|
|
5
|
+
module.exports = function help() {
|
|
6
|
+
sep()
|
|
7
|
+
log(`\n ${c.bold}Usage:${c.reset}\n`)
|
|
8
|
+
log(` npx raffles-it-kit Interactive project setup`)
|
|
9
|
+
log(` npx raffles-it-kit init Same as above`)
|
|
10
|
+
log(` npx raffles-it-kit init ${c.cyan}<name>${c.reset} Init with project name`)
|
|
11
|
+
log(` npx raffles-it-kit list List all available agents`)
|
|
12
|
+
log(` npx raffles-it-kit help Show this help`)
|
|
13
|
+
log(` npx raffles-it-kit --version Show version`)
|
|
14
|
+
log(`\n ${c.bold}Examples:${c.reset}\n`)
|
|
15
|
+
log(` npx raffles-it-kit init my-saas-app`)
|
|
16
|
+
log(` npx raffles-it-kit init`)
|
|
17
|
+
log(`\n ${c.bold}Docs:${c.reset}\n`)
|
|
18
|
+
log(` ${c.cyan}https://raffles-agent-skills-kit.vercel.app/en${c.reset}\n`)
|
|
19
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const path = require('path')
|
|
4
|
+
const fs = require('fs-extra')
|
|
5
|
+
const inquirer = require('inquirer')
|
|
6
|
+
const { sep, banner, success, info, warn, log, dim, c } = require('../utils/logger')
|
|
7
|
+
const { generatePackageJson, generateReadme, copyDir } = require('../utils/scaffold')
|
|
8
|
+
|
|
9
|
+
const PKG_DIR = path.join(__dirname, '../..')
|
|
10
|
+
|
|
11
|
+
const SCAFFOLD_TYPES = {
|
|
12
|
+
full: {
|
|
13
|
+
label: 'Full project (agents + skills + workflows + configs + prompts + rules)',
|
|
14
|
+
dirs: ['agents', 'configs', 'prompts', 'rules', 'skills', 'workflows'],
|
|
15
|
+
extras: ['package.json', 'README.md'],
|
|
16
|
+
},
|
|
17
|
+
agents: {
|
|
18
|
+
label: 'Only agents (agent definitions only)',
|
|
19
|
+
dirs: ['agents'],
|
|
20
|
+
extras: [],
|
|
21
|
+
},
|
|
22
|
+
skills: {
|
|
23
|
+
label: 'Only skills (SKILL.md packs only)',
|
|
24
|
+
dirs: ['skills'],
|
|
25
|
+
extras: [],
|
|
26
|
+
},
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = async function init(args) {
|
|
30
|
+
banner()
|
|
31
|
+
|
|
32
|
+
// ── 1. Project name ──────────────────────────────────────────────────────
|
|
33
|
+
let projectName = args[0]
|
|
34
|
+
|
|
35
|
+
if (!projectName) {
|
|
36
|
+
const answer = await inquirer.prompt([{
|
|
37
|
+
type: 'input',
|
|
38
|
+
name: 'projectName',
|
|
39
|
+
message: 'Project name:',
|
|
40
|
+
default: 'my-ai-project',
|
|
41
|
+
validate: v => v.trim().length > 0 ? true : 'Project name cannot be empty',
|
|
42
|
+
}])
|
|
43
|
+
projectName = answer.projectName.trim()
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// ── 2. What to scaffold ──────────────────────────────────────────────────
|
|
47
|
+
const { scaffoldKey } = await inquirer.prompt([{
|
|
48
|
+
type: 'list',
|
|
49
|
+
name: 'scaffoldKey',
|
|
50
|
+
message: 'What do you want to create?',
|
|
51
|
+
choices: Object.entries(SCAFFOLD_TYPES).map(([value, { label }]) => ({
|
|
52
|
+
name: label,
|
|
53
|
+
value,
|
|
54
|
+
})),
|
|
55
|
+
}])
|
|
56
|
+
|
|
57
|
+
const config = SCAFFOLD_TYPES[scaffoldKey]
|
|
58
|
+
const target = path.join(process.cwd(), projectName)
|
|
59
|
+
|
|
60
|
+
// ── 3. Overwrite check ───────────────────────────────────────────────────
|
|
61
|
+
if (fs.existsSync(target)) {
|
|
62
|
+
const { overwrite } = await inquirer.prompt([{
|
|
63
|
+
type: 'confirm',
|
|
64
|
+
name: 'overwrite',
|
|
65
|
+
message: `Directory "${projectName}" already exists. Overwrite it?`,
|
|
66
|
+
default: false,
|
|
67
|
+
}])
|
|
68
|
+
if (!overwrite) {
|
|
69
|
+
warn('Aborted — nothing was changed.')
|
|
70
|
+
process.exit(0)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ── 4. Scaffold ──────────────────────────────────────────────────────────
|
|
75
|
+
log()
|
|
76
|
+
sep()
|
|
77
|
+
log()
|
|
78
|
+
|
|
79
|
+
info(`Creating project "${c.bold}${projectName}${c.reset}"...`)
|
|
80
|
+
fs.ensureDirSync(target)
|
|
81
|
+
success('Directory created')
|
|
82
|
+
|
|
83
|
+
for (const dir of config.dirs) {
|
|
84
|
+
info(`Copying ${dir}/...`)
|
|
85
|
+
const src = path.join(PKG_DIR, dir)
|
|
86
|
+
const dest = path.join(target, dir)
|
|
87
|
+
if (fs.existsSync(src)) {
|
|
88
|
+
const n = copyDir(src, dest)
|
|
89
|
+
success(`${dir}/ copied ${c.dim}(${n} files)${c.reset}`)
|
|
90
|
+
} else {
|
|
91
|
+
warn(`${dir}/ not found in package — skipping`)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (config.extras.includes('package.json')) {
|
|
96
|
+
info('Generating package.json...')
|
|
97
|
+
generatePackageJson(target, projectName)
|
|
98
|
+
success('package.json generated')
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (config.extras.includes('README.md')) {
|
|
102
|
+
info('Generating README.md...')
|
|
103
|
+
generateReadme(target, projectName)
|
|
104
|
+
success('README.md generated')
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// ── 5. Done ──────────────────────────────────────────────────────────────
|
|
108
|
+
log()
|
|
109
|
+
sep()
|
|
110
|
+
log()
|
|
111
|
+
log(` ${c.bold}${c.green}✔ Done!${c.reset} "${projectName}" is ready.\n`)
|
|
112
|
+
|
|
113
|
+
log(` ${c.bold}Next steps:${c.reset}\n`)
|
|
114
|
+
log(` ${c.cyan}cd ${projectName}${c.reset}`)
|
|
115
|
+
|
|
116
|
+
if (scaffoldKey === 'full') {
|
|
117
|
+
log(`\n Open in Claude Code:`)
|
|
118
|
+
log(` ${c.cyan}claude .${c.reset}\n`)
|
|
119
|
+
log(` Or open in Cursor / Windsurf — agents are auto-detected.`)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
log()
|
|
123
|
+
dim(`Docs https://raffles-agent-skills-kit.vercel.app/en`)
|
|
124
|
+
log()
|
|
125
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const path = require('path')
|
|
4
|
+
const fs = require('fs')
|
|
5
|
+
const { sep, log, c } = require('../utils/logger')
|
|
6
|
+
|
|
7
|
+
const PKG_DIR = path.join(__dirname, '../..')
|
|
8
|
+
|
|
9
|
+
module.exports = function list() {
|
|
10
|
+
const agentsDir = path.join(PKG_DIR, 'agents')
|
|
11
|
+
|
|
12
|
+
sep()
|
|
13
|
+
log(`\n ${c.bold}Available Agents${c.reset}\n`)
|
|
14
|
+
sep()
|
|
15
|
+
|
|
16
|
+
if (!fs.existsSync(agentsDir)) {
|
|
17
|
+
log(` ${c.red}No agents directory found.${c.reset}\n`)
|
|
18
|
+
return
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const slugs = fs.readdirSync(agentsDir).filter(f =>
|
|
22
|
+
fs.statSync(path.join(agentsDir, f)).isDirectory()
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
for (const slug of slugs) {
|
|
26
|
+
try {
|
|
27
|
+
const raw = fs.readFileSync(path.join(agentsDir, slug, 'agent.yaml'), 'utf-8')
|
|
28
|
+
const model = (raw.match(/^model:\s*(.+)/m) || [])[1]?.trim() || ''
|
|
29
|
+
const isOpus = model.includes('opus')
|
|
30
|
+
const badge = isOpus
|
|
31
|
+
? `${c.yellow}◆ Opus${c.reset}`
|
|
32
|
+
: `${c.cyan}● Sonnet${c.reset}`
|
|
33
|
+
log(` ${c.green}${slug.padEnd(30)}${c.reset}${badge}`)
|
|
34
|
+
} catch {
|
|
35
|
+
log(` ${c.dim}${slug}${c.reset}`)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
log(`\n ${c.dim}Total: ${slugs.length} agents${c.reset}\n`)
|
|
40
|
+
}
|
package/bin/index.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict'
|
|
3
|
+
|
|
4
|
+
const pkg = require('../package.json')
|
|
5
|
+
|
|
6
|
+
const args = process.argv.slice(2)
|
|
7
|
+
const cmd = args[0]
|
|
8
|
+
|
|
9
|
+
function run(fn) {
|
|
10
|
+
Promise.resolve(fn()).catch(err => {
|
|
11
|
+
console.error('\n \x1b[31m' + (err.message || err) + '\x1b[0m\n')
|
|
12
|
+
process.exit(1)
|
|
13
|
+
})
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
switch (cmd) {
|
|
17
|
+
case undefined:
|
|
18
|
+
run(() => require('./commands/init')(args))
|
|
19
|
+
break
|
|
20
|
+
|
|
21
|
+
case 'init':
|
|
22
|
+
run(() => require('./commands/init')(args.slice(1)))
|
|
23
|
+
break
|
|
24
|
+
|
|
25
|
+
case 'list':
|
|
26
|
+
require('./commands/list')()
|
|
27
|
+
break
|
|
28
|
+
|
|
29
|
+
case '--version':
|
|
30
|
+
case '-v':
|
|
31
|
+
console.log(pkg.version)
|
|
32
|
+
break
|
|
33
|
+
|
|
34
|
+
case 'help':
|
|
35
|
+
case '--help':
|
|
36
|
+
case '-h':
|
|
37
|
+
require('./commands/help')()
|
|
38
|
+
break
|
|
39
|
+
|
|
40
|
+
default:
|
|
41
|
+
console.error(`\n \x1b[31mUnknown command: ${cmd}\x1b[0m\n`)
|
|
42
|
+
require('./commands/help')()
|
|
43
|
+
process.exit(1)
|
|
44
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const pkg = require('../../package.json')
|
|
4
|
+
|
|
5
|
+
const c = {
|
|
6
|
+
reset: '\x1b[0m',
|
|
7
|
+
bold: '\x1b[1m',
|
|
8
|
+
dim: '\x1b[2m',
|
|
9
|
+
blue: '\x1b[34m',
|
|
10
|
+
cyan: '\x1b[36m',
|
|
11
|
+
green: '\x1b[32m',
|
|
12
|
+
yellow: '\x1b[33m',
|
|
13
|
+
red: '\x1b[31m',
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const sep = () => console.log(c.dim + '─'.repeat(56) + c.reset)
|
|
17
|
+
|
|
18
|
+
const banner = () => {
|
|
19
|
+
sep()
|
|
20
|
+
console.log(`\n ${c.bold}${c.blue}Raffles IT Kit${c.reset} ${c.dim}v${pkg.version}${c.reset}`)
|
|
21
|
+
console.log(` ${c.dim}AI Agent Enhancement Toolkit${c.reset}\n`)
|
|
22
|
+
sep()
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const success = (msg) => console.log(` ${c.green}✔${c.reset} ${msg}`)
|
|
26
|
+
const info = (msg) => console.log(` ${c.blue}◆${c.reset} ${msg}`)
|
|
27
|
+
const warn = (msg) => console.log(` ${c.yellow}⚠${c.reset} ${msg}`)
|
|
28
|
+
const error = (msg) => console.log(` ${c.red}✖${c.reset} ${msg}`)
|
|
29
|
+
const log = (msg = '') => console.log(msg)
|
|
30
|
+
const dim = (msg) => console.log(` ${c.dim}${msg}${c.reset}`)
|
|
31
|
+
|
|
32
|
+
module.exports = { sep, banner, success, info, warn, error, log, dim, c }
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const path = require('path')
|
|
4
|
+
const fs = require('fs-extra')
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Generate a package.json in the target directory.
|
|
8
|
+
*/
|
|
9
|
+
function generatePackageJson(targetDir, projectName) {
|
|
10
|
+
const safeName = projectName.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-_]/g, '')
|
|
11
|
+
const content = {
|
|
12
|
+
name: safeName,
|
|
13
|
+
version: '1.0.0',
|
|
14
|
+
description: `AI agent project scaffolded with raffles-it-kit`,
|
|
15
|
+
scripts: {
|
|
16
|
+
start: 'echo "Add your start script here"',
|
|
17
|
+
dev: 'echo "Add your dev script here"',
|
|
18
|
+
},
|
|
19
|
+
keywords: ['ai', 'agents', 'claude', 'raffles-it-kit'],
|
|
20
|
+
license: 'MIT',
|
|
21
|
+
}
|
|
22
|
+
fs.writeJsonSync(path.join(targetDir, 'package.json'), content, { spaces: 2 })
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Generate a README.md in the target directory.
|
|
27
|
+
*/
|
|
28
|
+
function generateReadme(targetDir, projectName) {
|
|
29
|
+
const content = `# ${projectName}
|
|
30
|
+
|
|
31
|
+
> AI Agent project scaffolded with [Raffles IT Kit](https://raffles-agent-skills-kit.vercel.app/en)
|
|
32
|
+
|
|
33
|
+
## Getting Started
|
|
34
|
+
|
|
35
|
+
\`\`\`bash
|
|
36
|
+
# Open in Claude Code
|
|
37
|
+
claude .
|
|
38
|
+
|
|
39
|
+
# Or open in Cursor / Windsurf — agents are auto-detected from the workspace
|
|
40
|
+
\`\`\`
|
|
41
|
+
|
|
42
|
+
## Project Structure
|
|
43
|
+
|
|
44
|
+
\`\`\`
|
|
45
|
+
${projectName}/
|
|
46
|
+
├── agents/ ← 19 specialist AI agent definitions
|
|
47
|
+
├── skills/ ← 19 modular skill packs (SKILL.md files)
|
|
48
|
+
├── workflows/ ← 11 slash command workflow definitions
|
|
49
|
+
├── configs/ ← Model & runtime configuration
|
|
50
|
+
├── prompts/ ← Shared prompt templates
|
|
51
|
+
└── rules/ ← Editor-specific rules (Gemini, etc.)
|
|
52
|
+
\`\`\`
|
|
53
|
+
|
|
54
|
+
## Usage
|
|
55
|
+
|
|
56
|
+
Agents are **automatically selected** based on your request. No configuration needed.
|
|
57
|
+
|
|
58
|
+
\`\`\`
|
|
59
|
+
You: "Create a responsive product card with Tailwind CSS and dark mode"
|
|
60
|
+
AI: Routing to frontend-specialist...
|
|
61
|
+
Loading skills: react-best-practices, tailwind-patterns, frontend-design
|
|
62
|
+
|
|
63
|
+
You: "Build a JWT auth API with refresh tokens and rate limiting"
|
|
64
|
+
AI: Routing to backend-specialist...
|
|
65
|
+
Loading skills: api-patterns, nodejs-best-practices, clean-code
|
|
66
|
+
|
|
67
|
+
You: "Our login endpoint returns 500 only in production"
|
|
68
|
+
AI: Routing to debugger...
|
|
69
|
+
Loading skills: systematic-debugging
|
|
70
|
+
\`\`\`
|
|
71
|
+
|
|
72
|
+
## Slash Commands
|
|
73
|
+
|
|
74
|
+
| Command | Description |
|
|
75
|
+
| ---------------- | ------------------------------------------------ |
|
|
76
|
+
| \`/create\` | Scaffold a new feature end-to-end |
|
|
77
|
+
| \`/debug\` | Structured root-cause analysis |
|
|
78
|
+
| \`/plan\` | Break a large task into a sprint plan |
|
|
79
|
+
| \`/test\` | Generate unit, integration, and E2E tests |
|
|
80
|
+
| \`/review\` | Code review: OWASP, performance, conventions |
|
|
81
|
+
| \`/deploy\` | Pre-flight checks → build → deploy → smoke test |
|
|
82
|
+
|
|
83
|
+
## Resources
|
|
84
|
+
|
|
85
|
+
- [Documentation](https://raffles-agent-skills-kit.vercel.app/en)
|
|
86
|
+
- [Getting Started Guide](https://raffles-agent-skills-kit.vercel.app/en/docs/guide)
|
|
87
|
+
- [npm Package](https://www.npmjs.com/package/raffles-it-kit)
|
|
88
|
+
- [GitHub](https://github.com/HaiTrieu0902/agent-skills-kit)
|
|
89
|
+
`
|
|
90
|
+
fs.writeFileSync(path.join(targetDir, 'README.md'), content)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Copy a source directory into the target, skipping node_modules and .next.
|
|
95
|
+
*/
|
|
96
|
+
function copyDir(src, dest) {
|
|
97
|
+
if (!fs.existsSync(src)) return 0
|
|
98
|
+
fs.ensureDirSync(dest)
|
|
99
|
+
let count = 0
|
|
100
|
+
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
101
|
+
if (entry.name === 'node_modules' || entry.name === '.next') continue
|
|
102
|
+
const s = path.join(src, entry.name)
|
|
103
|
+
const d = path.join(dest, entry.name)
|
|
104
|
+
if (entry.isDirectory()) {
|
|
105
|
+
count += copyDir(s, d)
|
|
106
|
+
} else {
|
|
107
|
+
fs.copyFileSync(s, d)
|
|
108
|
+
count++
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return count
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
module.exports = { generatePackageJson, generateReadme, copyDir }
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"context7": {
|
|
4
|
+
"command": "npx",
|
|
5
|
+
"args": [
|
|
6
|
+
"-y",
|
|
7
|
+
"@upstash/context7-mcp",
|
|
8
|
+
"--api-key",
|
|
9
|
+
"YOUR_API_KEY"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
"shadcn": {
|
|
13
|
+
"command": "npx",
|
|
14
|
+
"args": [
|
|
15
|
+
"shadcn@latest",
|
|
16
|
+
"mcp"
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
//other mcp servers
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// setup mcp server in ~/.gemini\antigravity\mcp_config.json
|
|
24
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Model configuration for Antigravity Kit agents
|
|
2
|
+
|
|
3
|
+
defaults:
|
|
4
|
+
model: claude-sonnet-4-6
|
|
5
|
+
max_tokens: 8192
|
|
6
|
+
temperature: 0
|
|
7
|
+
|
|
8
|
+
overrides:
|
|
9
|
+
orchestrator:
|
|
10
|
+
model: claude-opus-4-6
|
|
11
|
+
code-archaeologist:
|
|
12
|
+
model: claude-opus-4-6
|
|
13
|
+
|
|
14
|
+
available_models:
|
|
15
|
+
- id: claude-opus-4-6
|
|
16
|
+
description: Most capable — use for complex orchestration
|
|
17
|
+
- id: claude-sonnet-4-6
|
|
18
|
+
description: Balanced — default for most agents
|
|
19
|
+
- id: claude-haiku-4-5-20251001
|
|
20
|
+
description: Fast — use for simple, high-frequency tasks
|