aayushus-skills 1.1.0 → 1.2.3
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 +25 -6
- package/agent-config/rules.md +49 -118
- package/cli.js +68 -89
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,23 +4,42 @@ A zero-dependency interactive CLI to install custom AI agent configurations, des
|
|
|
4
4
|
|
|
5
5
|
## Installation / Usage
|
|
6
6
|
|
|
7
|
-
Run the following command in your target project directory:
|
|
7
|
+
Run the following command in your target project directory to open the interactive checklist menu:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
npx aayushus-skills
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
### Options & Subcommands
|
|
14
|
+
You can bypass the interactive menu to install specific components directly:
|
|
15
|
+
|
|
16
|
+
- **All Components**: `npx aayushus-skills all`
|
|
17
|
+
- **Prism Design System**: `npx aayushus-skills design`
|
|
18
|
+
- **Development Guidelines**: `npx aayushus-skills guidelines`
|
|
19
|
+
- **Solo Developer AI SOP**: `npx aayushus-skills sop`
|
|
20
|
+
- **Cursor Rules**: `npx aayushus-skills cursor`
|
|
21
|
+
- **Antigravity Rules**: `npx aayushus-skills antigravity`
|
|
22
|
+
- **Devin Rules**: `npx aayushus-skills devin`
|
|
23
|
+
- **Claude Rules**: `npx aayushus-skills claude`
|
|
24
|
+
- **Codex/Copilot Rules**: `npx aayushus-skills codex`
|
|
25
|
+
|
|
26
|
+
### Preview changes (Dry Run)
|
|
27
|
+
Add `-d` or `--dry-run` to preview the files that would be installed without making any modifications to disk:
|
|
15
28
|
```bash
|
|
16
|
-
npx aayushus-skills
|
|
29
|
+
npx aayushus-skills --dry-run
|
|
30
|
+
npx aayushus-skills design --dry-run
|
|
17
31
|
```
|
|
18
32
|
|
|
19
33
|
## Included Components
|
|
20
34
|
|
|
21
|
-
- **AI Agent Configurations**:
|
|
35
|
+
- **AI Agent Configurations**: Custom-tailored rule files matching your selected editor:
|
|
36
|
+
- **Antigravity**: `.antigravityrules`
|
|
37
|
+
- **Devin**: `.devin/rules/rules.md` & `AGENTS.md`
|
|
38
|
+
- **Cursor**: `.cursorrules`
|
|
39
|
+
- **Claude**: `CLAUDE.md`
|
|
40
|
+
- **Codex/Copilot**: `.github/copilot-instructions.md`
|
|
22
41
|
- **Prism Design System**: Copies zero-decision B2B/SaaS design components and styling tokens (CSS/TSX) to `./src/design/` or `./design/`.
|
|
23
|
-
- **Development Guidelines**: Copies standard development docs (API Design, Architecture, Code Quality,
|
|
42
|
+
- **Development Guidelines**: Copies standard stack-agnostic development reference docs (API Design, Architecture, Code Quality, Security, Performance, etc.) to `./docs/guidelines/`.
|
|
24
43
|
- **Solo Developer AI SOP**: Installs the `Solo-Developer-AI-SOP.md` file in the project root containing guidelines for budget management and AI escalation.
|
|
25
44
|
|
|
26
45
|
---
|
package/agent-config/rules.md
CHANGED
|
@@ -1,94 +1,51 @@
|
|
|
1
1
|
# Codebase rules — read before every response
|
|
2
2
|
|
|
3
|
+
> [!IMPORTANT]
|
|
4
|
+
> **CUSTOMIZATION NOTICE**: This rules file contains guidelines for development. Update the Stack and Hard Rules sections in your local project rules file to match your project's actual stack.
|
|
5
|
+
|
|
3
6
|
## Stack
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
<!-- CUSTOMIZE: Replace this section with your project's actual stack -->
|
|
8
|
+
- **Frontend/Backend**: [e.g., Next.js 14 App Router, React + Vite, Express, FastAPI]
|
|
9
|
+
- **Database/ORM**: [e.g., Drizzle ORM, Prisma, SQLAlchemy]
|
|
10
|
+
- **Primary Database**: [e.g., PostgreSQL, SQLite, MySQL]
|
|
11
|
+
- **Async Queue**: [e.g., BullMQ, Celery, None/Direct Background Streaming]
|
|
12
|
+
- **Design System**: Prism (tokens.css + components.tsx)
|
|
8
13
|
|
|
9
14
|
---
|
|
10
15
|
|
|
11
16
|
## HARD RULES — never violate these
|
|
12
17
|
|
|
13
|
-
### Data &
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
###
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- Every network call has a timeout: 10s (internal HTTP), 5s (fast external APIs), 30s (slow), 60s (AI — async only)
|
|
36
|
-
- Retries only on 5xx and network errors — NEVER retry 4xx
|
|
37
|
-
- Circuit breaker: open after 5 failures in 10s, stay open 30s
|
|
38
|
-
|
|
39
|
-
### Auth & security
|
|
40
|
-
- Passwords: Argon2id only (`time=3, memory=64MB, parallelism=4`) — never bcrypt, never MD5, never SHA-1
|
|
41
|
-
- API keys: Argon2id hashed before storage, displayed once only
|
|
42
|
-
- Sessions: opaque 256-bit random tokens stored in Redis — NOT JWTs for user sessions
|
|
43
|
-
- Session rotation on: login, logout, MFA completion, role change
|
|
44
|
-
- Password reset does NOT log the user in — they re-authenticate after
|
|
45
|
-
- Never reveal whether an email exists — always respond `200 RESET_EMAIL_SENT_IF_EXISTS`
|
|
46
|
-
- Failed logins: lock account after 10 failures, rate-limit 5/hour per account
|
|
47
|
-
- MFA required for `owner` and `admin` roles (TOTP, RFC 6238)
|
|
48
|
-
- Role changes require dedicated endpoint — never via generic PATCH, user cannot change own role
|
|
49
|
-
- Admin impersonation TTL: 1 hour max
|
|
50
|
-
|
|
51
|
-
### Input & output
|
|
52
|
-
- Validate every input at every boundary with Zod (TypeScript) or Pydantic `.strict()` (Python)
|
|
53
|
-
- All strings must have max length — prevents DoS
|
|
54
|
-
- File uploads: magic-number type validation, ClamAV virus scan, re-encode images (strips EXIF), store on object storage only (signed URLs)
|
|
55
|
-
- Never use `dangerouslySetInnerHTML` without DOMPurify + explicit code-review tag
|
|
56
|
-
- AI output: validate with Zod schema before use, never trust for authorisation decisions
|
|
57
|
-
- SSRF: DNS-resolve before fetching, reject private IPs
|
|
58
|
-
|
|
59
|
-
### Secrets & config
|
|
60
|
-
- All secrets in Doppler or AWS Secrets Manager — never in code, never in `.env` files committed to git
|
|
61
|
-
- One place reads `process.env`: `shared/config.ts` with Zod schema — nowhere else
|
|
62
|
-
- No secrets in logs, errors, or API responses
|
|
63
|
-
- Secrets rotated quarterly — dual-key rotation window
|
|
64
|
-
|
|
65
|
-
### Logging & observability
|
|
66
|
-
- Structured JSON logs only — required fields: `timestamp`, `level`, `service`, `correlationId`, `tenantId`, `userId`, `message`
|
|
67
|
-
- Correlation ID propagates through all logs, queue jobs, cross-service calls, and audit entries
|
|
68
|
-
- Audit log is append-only — 7-year retention, no UPDATE/DELETE at DB role level
|
|
69
|
-
- Every route emits: `http_requests_total`, `http_request_duration_seconds`
|
|
70
|
-
|
|
71
|
-
### API design
|
|
72
|
-
- REST + JSON — no GraphQL unless multiple first-party clients with wildly different data needs
|
|
73
|
-
- URL versioning: `/api/v1/`, `/api/v2/` — not header-based
|
|
74
|
-
- Standard error envelope: `{ code, message, correlationId, details }`
|
|
75
|
-
- Rate limits: 100 req/60s per user (default), 5/60s for login and password-reset
|
|
18
|
+
### Data & Tenancy (Database Rules)
|
|
19
|
+
- **Tenancy**: If the project is multi-tenant, every database query touching tenant data MUST filter by `tenantId` (typically enforced via query middleware/middleware helpers). If single-tenant, ignore tenant constraints.
|
|
20
|
+
- **ORM & Raw Queries**: Prefer parameterized query builder/ORM methods. Never use raw SQL statements unless parameterized, type-safe, and explicitly reviewed.
|
|
21
|
+
- **Deletes**: Default to soft deletes (`deletedAt` timestamp) for business-critical data; avoid hard deletion unless explicitly requested.
|
|
22
|
+
- **Primary Keys**: Align with the project database design (e.g., ULIDs for distributed/multi-tenant systems, UUIDs, or Serial Auto-Incrementing Integers for standard/monolithic tables).
|
|
23
|
+
|
|
24
|
+
### Async & Queuing
|
|
25
|
+
- **Long-Running Operations**: Any operation taking > 1 second should run asynchronously in a background worker (e.g., BullMQ, Celery, or background threads depending on the stack) so the main HTTP thread remains responsive.
|
|
26
|
+
- **Reliability**: Ensure background tasks have maximum retries (e.g., 5 retries with exponential backoff) and are designed to be idempotent.
|
|
27
|
+
|
|
28
|
+
### Network & Timeouts
|
|
29
|
+
- **Timeouts**: Every external network call must have a timeout configured (e.g., 10s for internal services, 5s for fast APIs, 30s-60s for slow/AI APIs).
|
|
30
|
+
- **Retries**: Retry only on 5xx server errors and network dropouts. Never retry client-side 4xx errors.
|
|
31
|
+
|
|
32
|
+
### Auth & Security
|
|
33
|
+
- **Passwords & Hashing**: Use secure modern hashing algorithms (e.g., Argon2id or equivalent standard platform hashing library) for passwords and API keys.
|
|
34
|
+
- **Sessions**: Prefer secure session storage (e.g., server-side session stores) over JWTs for user sessions where revocability is needed.
|
|
35
|
+
- **Input Validation**: Validate 100% of inputs at all system boundaries using schema validators (e.g., Zod, Pydantic) with strict checks.
|
|
36
|
+
|
|
37
|
+
### Observability & Logging
|
|
38
|
+
- **Structured Logs**: Use structured JSON logging output containing standard metadata (`timestamp`, `level`, `correlationId`, `message`).
|
|
39
|
+
- **Correlation**: Propagate correlation IDs across system boundaries (HTTP request, queue worker, database query).
|
|
76
40
|
|
|
77
41
|
---
|
|
78
42
|
|
|
79
43
|
## CODE QUALITY RULES
|
|
80
44
|
|
|
81
|
-
-
|
|
82
|
-
- Never
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
- No `console.log` — use the structured logger
|
|
86
|
-
- No commented-out code — delete it or put it in a ticket
|
|
87
|
-
- Boolean variables: `is/has/can/should` prefix
|
|
88
|
-
- No N+1 queries — always use Prisma `include/select` or a JOIN
|
|
89
|
-
- Error handling: throw exceptions for programming errors, return Result types for expected failures (validation, not-found, rate-limit)
|
|
90
|
-
- Async/await always — never raw `.then()` chains
|
|
91
|
-
- PR size: ≤ 400 lines unless generated code — split larger changes
|
|
45
|
+
- **Type Safety**: Enforce strict type checking in your language of choice (e.g., `strict: true` and `noUncheckedIndexedAccess` in TypeScript).
|
|
46
|
+
- **Narrowing**: Never bypass type safety with `any` — use `unknown` or union type narrowing.
|
|
47
|
+
- **Readability**: Keep functions concise (aim under 40 lines) and files focused (aim under 300 lines).
|
|
48
|
+
- **Error Handling**: Throw exceptions for programming/unexpected errors; return structured success/failure wrappers (e.g., Result/Either patterns) for expected business logic path failures.
|
|
92
49
|
|
|
93
50
|
---
|
|
94
51
|
|
|
@@ -100,56 +57,30 @@ Design system: Prism (tokens.css + components.tsx — see design/ skill folder).
|
|
|
100
57
|
| API read (cached, single) | p95 < 200ms |
|
|
101
58
|
| API read (list, paginated) | p95 < 300ms |
|
|
102
59
|
| API write | p95 < 300ms |
|
|
103
|
-
| LCP | ≤ 2.5s
|
|
104
|
-
|
|
|
105
|
-
| CLS | ≤ 0.1 (p75) |
|
|
106
|
-
| JS bundle (gzipped) | ≤ 170KB |
|
|
107
|
-
| CSS bundle (gzipped) | ≤ 30KB |
|
|
60
|
+
| LCP / INP | ≤ 2.5s / ≤ 200ms |
|
|
61
|
+
| JS / CSS bundle (gzipped) | ≤ 170KB / ≤ 30KB |
|
|
108
62
|
| DB query (indexed lookup) | ≤ 10ms |
|
|
109
|
-
| DB query (list with joins) | ≤ 200ms |
|
|
110
63
|
|
|
111
64
|
---
|
|
112
65
|
|
|
113
66
|
## PRISM DESIGN SYSTEM RULES
|
|
114
67
|
|
|
115
|
-
- Never hardcode
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
-
|
|
119
|
-
- Never import Tailwind, Radix defaults, or shadcn themes — use components.tsx from the design system
|
|
120
|
-
- Touch targets: 44×44px minimum on mobile
|
|
121
|
-
- Never use `font-size` < 16px on mobile inputs — iOS Safari zooms on focus
|
|
122
|
-
- Dark mode: use `[data-theme="dark"]` selector overrides — never `@media (prefers-color-scheme: dark)` in component CSS
|
|
123
|
-
- Every component must work in light AND dark mode
|
|
124
|
-
- Spacing: multiples of 4px only — allowed values: 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64
|
|
68
|
+
- **Tokens**: Never hardcode colors, radii, or fonts — always use CSS design tokens (`var(--token-name)`).
|
|
69
|
+
- **Themes**: Implement dark/light mode switches via data attributes (e.g. `[data-theme="dark"]`) rather than media queries where theme switching is required.
|
|
70
|
+
- **Consistency**: Keep spacing aligned to the project grid system (e.g., multiples of 4px).
|
|
71
|
+
- **AI Glyphs**: Use only the Prism Sparkle/Prism icon as the visual representation for AI-generated assets.
|
|
125
72
|
|
|
126
73
|
---
|
|
127
74
|
|
|
128
75
|
## WHEN TO CHECK FULL DOCS
|
|
129
76
|
|
|
130
|
-
|
|
77
|
+
Detailed guidelines live in the Docs/Guidelines folder. Refer to them when working on core modules:
|
|
131
78
|
|
|
132
|
-
|
|
|
79
|
+
| Topic | Reference Document |
|
|
133
80
|
|---|---|
|
|
134
|
-
| Building any UI component or screen | `design/SKILL.md`
|
|
135
|
-
| Adding auth, tenant logic, or
|
|
136
|
-
| Adding
|
|
137
|
-
| Writing tests or refactoring | `guidelines/
|
|
138
|
-
|
|
|
139
|
-
| Writing an ADR or README | `guidelines/
|
|
140
|
-
| Building a new component from scratch | `design/implementation-guide.md` |
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
## ARCHITECTURE DECISIONS ALREADY MADE (don't re-litigate)
|
|
145
|
-
|
|
146
|
-
| Decision | Choice | Reason |
|
|
147
|
-
|---|---|---|
|
|
148
|
-
| DB access | Prisma only | Parameterised by default, tenant middleware |
|
|
149
|
-
| Queue | BullMQ on Redis | Single system, battle-tested at this scale |
|
|
150
|
-
| Sessions | Opaque tokens in Redis | Revocable, no JWT signature key management |
|
|
151
|
-
| Search | PostgreSQL FTS | Sufficient to 100k users; extract to Typesense at scale |
|
|
152
|
-
| DB topology | Shared Postgres, tenant_id column | Schema-per-tenant impossible at scale for migrations |
|
|
153
|
-
| API style | REST + JSON | Debuggable, works across Node + Python |
|
|
154
|
-
| Passwords | Argon2id | bcrypt is deprecated for this use case |
|
|
155
|
-
| Deployment | Fly Machines (preferred) → ECS → K8s (only with SRE) | Operational complexity ladder |
|
|
81
|
+
| Building any UI component or screen | `design/SKILL.md` (or `src/design/SKILL.md`) |
|
|
82
|
+
| Adding auth, tenant logic, or architecture choices | `docs/guidelines/Architecture.md` |
|
|
83
|
+
| Adding security controls, file uploads, API endpoints | `docs/guidelines/Security.md` |
|
|
84
|
+
| Writing tests or performing large refactoring | `docs/guidelines/Code-Quality.md` |
|
|
85
|
+
| Performance optimizations, database indexing | `docs/guidelines/Performance.md` |
|
|
86
|
+
| Writing an ADR, design documentation, or README | `docs/guidelines/Documentation.md` |
|
package/cli.js
CHANGED
|
@@ -18,21 +18,16 @@ const styles = {
|
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
const options = [
|
|
21
|
-
{ name: '
|
|
21
|
+
{ name: 'Antigravity Rules (.antigravityrules)', value: 'antigravity', checked: true },
|
|
22
|
+
{ name: 'Devin Rules (.devin/rules/rules.md & AGENTS.md)', value: 'devin', checked: true },
|
|
23
|
+
{ name: 'Cursor Rules (.cursorrules)', value: 'cursor', checked: true },
|
|
24
|
+
{ name: 'Claude Rules (CLAUDE.md)', value: 'claude', checked: true },
|
|
25
|
+
{ name: 'Codex/Copilot Rules (.github/copilot-instructions.md)', value: 'codex', checked: true },
|
|
22
26
|
{ name: 'Prism Design System (tokens, components CSS/TSX)', value: 'design', checked: true },
|
|
23
27
|
{ name: 'Development Guidelines (Architecture, Quality, Security)', value: 'guidelines', checked: true },
|
|
24
28
|
{ name: 'Solo Developer AI SOP (Standard Operating Procedure)', value: 'sop', checked: true }
|
|
25
29
|
];
|
|
26
30
|
|
|
27
|
-
const toolOptions = [
|
|
28
|
-
{ name: 'Antigravity (.antigravityrules)', value: 'antigravity', checked: true },
|
|
29
|
-
{ name: 'Devin (.devin/rules/rules.md & AGENTS.md)', value: 'devin', checked: true },
|
|
30
|
-
{ name: 'Cursor (.cursorrules)', value: 'cursor', checked: true },
|
|
31
|
-
{ name: 'Claude (CLAUDE.md)', value: 'claude', checked: true },
|
|
32
|
-
{ name: 'Codex/Copilot (.github/copilot-instructions.md)', value: 'codex', checked: true }
|
|
33
|
-
];
|
|
34
|
-
|
|
35
|
-
let currentStep = 0; // 0 = Component selection, 1 = AI Tool selection
|
|
36
31
|
let cursorIndex = 0;
|
|
37
32
|
|
|
38
33
|
const args = process.argv.slice(2);
|
|
@@ -49,29 +44,16 @@ function printMenu() {
|
|
|
49
44
|
}
|
|
50
45
|
console.log(`${styles.cyan}${styles.bold}=========================================${styles.reset}\n`);
|
|
51
46
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
console.log(`${styles.dim}Use ${styles.bold}↑/↓${styles.reset}${styles.dim} to navigate, ${styles.bold}space${styles.reset}${styles.dim} to toggle, and ${styles.bold}enter${styles.reset}${styles.dim} to continue.\n${styles.reset}`);
|
|
47
|
+
console.log(`${styles.dim}Select components and tools to install/configure:${styles.reset}`);
|
|
48
|
+
console.log(`${styles.dim}Use ${styles.bold}↑/↓${styles.reset}${styles.dim} to navigate, ${styles.bold}space${styles.reset}${styles.dim} to toggle, and ${styles.bold}enter${styles.reset}${styles.dim} to install.\n${styles.reset}`);
|
|
55
49
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
} else {
|
|
64
|
-
console.log(`${styles.dim}Step 2: Which AI coding tools do you use?${styles.reset}`);
|
|
65
|
-
console.log(`${styles.dim}Use ${styles.bold}↑/↓${styles.reset}${styles.dim} to navigate, ${styles.bold}space${styles.reset}${styles.dim} to toggle, and ${styles.bold}enter${styles.reset}${styles.dim} to install.\n${styles.reset}`);
|
|
66
|
-
|
|
67
|
-
toolOptions.forEach((opt, idx) => {
|
|
68
|
-
const isCursor = idx === cursorIndex;
|
|
69
|
-
const checkbox = opt.checked ? `[${styles.green}x${styles.reset}]` : '[ ]';
|
|
70
|
-
const prefix = isCursor ? `${styles.cyan}❯ ` : ' ';
|
|
71
|
-
const styledName = isCursor ? `${styles.cyan}${styles.bold}${opt.name}${styles.reset}` : opt.name;
|
|
72
|
-
console.log(`${prefix}${checkbox} ${styledName}`);
|
|
73
|
-
});
|
|
74
|
-
}
|
|
50
|
+
options.forEach((opt, idx) => {
|
|
51
|
+
const isCursor = idx === cursorIndex;
|
|
52
|
+
const checkbox = opt.checked ? `[${styles.green}x${styles.reset}]` : '[ ]';
|
|
53
|
+
const prefix = isCursor ? `${styles.cyan}❯ ` : ' ';
|
|
54
|
+
const styledName = isCursor ? `${styles.cyan}${styles.bold}${opt.name}${styles.reset}` : opt.name;
|
|
55
|
+
console.log(`${prefix}${checkbox} ${styledName}`);
|
|
56
|
+
});
|
|
75
57
|
|
|
76
58
|
console.log('\n');
|
|
77
59
|
}
|
|
@@ -118,47 +100,53 @@ function runInstallation() {
|
|
|
118
100
|
const targetRoot = process.cwd();
|
|
119
101
|
|
|
120
102
|
const selected = options.filter(opt => opt.checked).map(opt => opt.value);
|
|
121
|
-
const selectedTools = toolOptions.filter(opt => opt.checked).map(opt => opt.value);
|
|
122
103
|
|
|
123
104
|
if (selected.length === 0) {
|
|
124
105
|
console.log(`${styles.red}No options selected. Aborting.${styles.reset}\n`);
|
|
125
106
|
process.exit(0);
|
|
126
107
|
}
|
|
127
108
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
console.log(`${styles.blue} Installing AI Agent Configurations...${styles.reset}`);
|
|
131
|
-
const srcAgentDir = path.join(packageRoot, 'agent-config');
|
|
109
|
+
const srcAgentDir = path.join(packageRoot, 'agent-config');
|
|
110
|
+
const hasAgentConfigs = fs.existsSync(srcAgentDir);
|
|
132
111
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
112
|
+
if (hasAgentConfigs) {
|
|
113
|
+
const genericRulesFile = path.join(srcAgentDir, 'rules.md');
|
|
114
|
+
const claudeFile = path.join(srcAgentDir, 'CLAUDE.md');
|
|
115
|
+
const copilotFile = path.join(srcAgentDir, 'copilot-instructions.md');
|
|
137
116
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
copyFileSync(genericRulesFile, path.join(targetRoot, 'AGENTS.md'));
|
|
144
|
-
}
|
|
145
|
-
if (selectedTools.includes('cursor')) {
|
|
146
|
-
copyFileSync(genericRulesFile, path.join(targetRoot, '.cursorrules'));
|
|
147
|
-
}
|
|
148
|
-
if (selectedTools.includes('claude')) {
|
|
149
|
-
copyFileSync(claudeFile, path.join(targetRoot, 'CLAUDE.md'));
|
|
150
|
-
}
|
|
151
|
-
if (selectedTools.includes('codex')) {
|
|
152
|
-
copyFileSync(copilotFile, path.join(targetRoot, '.github', 'copilot-instructions.md'));
|
|
153
|
-
}
|
|
117
|
+
// 1. Antigravity
|
|
118
|
+
if (selected.includes('antigravity')) {
|
|
119
|
+
console.log(`${styles.blue} Configuring Antigravity rules...${styles.reset}`);
|
|
120
|
+
copyFileSync(genericRulesFile, path.join(targetRoot, '.antigravityrules'));
|
|
121
|
+
}
|
|
154
122
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
console.log(`${styles.
|
|
123
|
+
// 2. Devin
|
|
124
|
+
if (selected.includes('devin')) {
|
|
125
|
+
console.log(`${styles.blue} Configuring Devin rules...${styles.reset}`);
|
|
126
|
+
copyFileSync(genericRulesFile, path.join(targetRoot, '.devin', 'rules', 'rules.md'));
|
|
127
|
+
copyFileSync(genericRulesFile, path.join(targetRoot, 'AGENTS.md'));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// 3. Cursor
|
|
131
|
+
if (selected.includes('cursor')) {
|
|
132
|
+
console.log(`${styles.blue} Configuring Cursor rules...${styles.reset}`);
|
|
133
|
+
copyFileSync(genericRulesFile, path.join(targetRoot, '.cursorrules'));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// 4. Claude
|
|
137
|
+
if (selected.includes('claude')) {
|
|
138
|
+
console.log(`${styles.blue} Configuring Claude CLAUDE.md...${styles.reset}`);
|
|
139
|
+
copyFileSync(claudeFile, path.join(targetRoot, 'CLAUDE.md'));
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// 5. Codex/Copilot
|
|
143
|
+
if (selected.includes('codex')) {
|
|
144
|
+
console.log(`${styles.blue} Configuring Codex/Copilot rules...${styles.reset}`);
|
|
145
|
+
copyFileSync(copilotFile, path.join(targetRoot, '.github', 'copilot-instructions.md'));
|
|
158
146
|
}
|
|
159
147
|
}
|
|
160
148
|
|
|
161
|
-
//
|
|
149
|
+
// 6. Design System
|
|
162
150
|
if (selected.includes('design')) {
|
|
163
151
|
console.log(`${styles.blue} Installing Prism Design System...${styles.reset}`);
|
|
164
152
|
const srcDesignDir = path.join(packageRoot, 'design');
|
|
@@ -174,7 +162,7 @@ function runInstallation() {
|
|
|
174
162
|
}
|
|
175
163
|
}
|
|
176
164
|
|
|
177
|
-
//
|
|
165
|
+
// 7. Development Guidelines
|
|
178
166
|
if (selected.includes('guidelines')) {
|
|
179
167
|
console.log(`${styles.blue} Installing Development Guidelines...${styles.reset}`);
|
|
180
168
|
const srcGuidelinesDir = path.join(packageRoot, 'guidelines');
|
|
@@ -188,7 +176,7 @@ function runInstallation() {
|
|
|
188
176
|
}
|
|
189
177
|
}
|
|
190
178
|
|
|
191
|
-
//
|
|
179
|
+
// 8. SOP
|
|
192
180
|
if (selected.includes('sop')) {
|
|
193
181
|
console.log(`${styles.blue} Installing Solo Developer AI SOP...${styles.reset}`);
|
|
194
182
|
const srcSopFile = path.join(packageRoot, 'Solo Developer AI SOP.md');
|
|
@@ -217,9 +205,13 @@ Usage:
|
|
|
217
205
|
npx aayushus-skills Interactive installation menu (default)
|
|
218
206
|
npx aayushus-skills all Install everything directly
|
|
219
207
|
npx aayushus-skills design Install Prism Design System only
|
|
220
|
-
npx aayushus-skills agent-config Install all AI Agent Configurations
|
|
221
208
|
npx aayushus-skills guidelines Install Development Guidelines only
|
|
222
209
|
npx aayushus-skills sop Install Solo Developer AI SOP only
|
|
210
|
+
npx aayushus-skills cursor Install Cursor rules only
|
|
211
|
+
npx aayushus-skills antigravity Install Antigravity rules only
|
|
212
|
+
npx aayushus-skills devin Install Devin rules only
|
|
213
|
+
npx aayushus-skills claude Install Claude rules only
|
|
214
|
+
npx aayushus-skills codex Install Codex/Copilot rules only
|
|
223
215
|
|
|
224
216
|
Flags:
|
|
225
217
|
-d, --dry-run Preview installation without making actual changes
|
|
@@ -229,9 +221,13 @@ Flags:
|
|
|
229
221
|
|
|
230
222
|
// Check for direct subcommands
|
|
231
223
|
const argMap = {
|
|
224
|
+
'antigravity': 'antigravity',
|
|
225
|
+
'devin': 'devin',
|
|
226
|
+
'cursor': 'cursor',
|
|
227
|
+
'claude': 'claude',
|
|
228
|
+
'codex': 'codex',
|
|
229
|
+
'copilot': 'codex',
|
|
232
230
|
'design': 'design',
|
|
233
|
-
'agent-config': 'agent-config',
|
|
234
|
-
'agent': 'agent-config',
|
|
235
231
|
'guidelines': 'guidelines',
|
|
236
232
|
'sop': 'sop'
|
|
237
233
|
};
|
|
@@ -247,7 +243,6 @@ if (hasDirectCommand) {
|
|
|
247
243
|
opt.checked = directArgs.some(arg => argMap[arg] === opt.value);
|
|
248
244
|
});
|
|
249
245
|
}
|
|
250
|
-
// If non-interactive, default to configuring rules for all AI tools
|
|
251
246
|
runInstallation();
|
|
252
247
|
}
|
|
253
248
|
|
|
@@ -271,41 +266,25 @@ process.stdin.on('keypress', (str, key) => {
|
|
|
271
266
|
process.exit(0);
|
|
272
267
|
}
|
|
273
268
|
|
|
274
|
-
const currentList = currentStep === 0 ? options : toolOptions;
|
|
275
|
-
|
|
276
269
|
switch (key.name) {
|
|
277
270
|
case 'up':
|
|
278
|
-
cursorIndex = (cursorIndex - 1 +
|
|
271
|
+
cursorIndex = (cursorIndex - 1 + options.length) % options.length;
|
|
279
272
|
printMenu();
|
|
280
273
|
break;
|
|
281
274
|
case 'down':
|
|
282
|
-
cursorIndex = (cursorIndex + 1) %
|
|
275
|
+
cursorIndex = (cursorIndex + 1) % options.length;
|
|
283
276
|
printMenu();
|
|
284
277
|
break;
|
|
285
278
|
case 'space':
|
|
286
|
-
|
|
279
|
+
options[cursorIndex].checked = !options[cursorIndex].checked;
|
|
287
280
|
printMenu();
|
|
288
281
|
break;
|
|
289
282
|
case 'return':
|
|
290
283
|
case 'enter':
|
|
291
|
-
if (
|
|
292
|
-
|
|
293
|
-
if (isAgentSelected) {
|
|
294
|
-
currentStep = 1;
|
|
295
|
-
cursorIndex = 0;
|
|
296
|
-
printMenu();
|
|
297
|
-
} else {
|
|
298
|
-
if (process.stdin.isTTY) {
|
|
299
|
-
process.stdin.setRawMode(false);
|
|
300
|
-
}
|
|
301
|
-
runInstallation();
|
|
302
|
-
}
|
|
303
|
-
} else {
|
|
304
|
-
if (process.stdin.isTTY) {
|
|
305
|
-
process.stdin.setRawMode(false);
|
|
306
|
-
}
|
|
307
|
-
runInstallation();
|
|
284
|
+
if (process.stdin.isTTY) {
|
|
285
|
+
process.stdin.setRawMode(false);
|
|
308
286
|
}
|
|
287
|
+
runInstallation();
|
|
309
288
|
break;
|
|
310
289
|
}
|
|
311
290
|
});
|