@nexus-framework/cli 0.1.1 → 0.1.2
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 +69 -417
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +5 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/generators/ai-config.d.ts +15 -8
- package/dist/generators/ai-config.d.ts.map +1 -1
- package/dist/generators/ai-config.js +165 -106
- package/dist/generators/ai-config.js.map +1 -1
- package/dist/generators/config.d.ts.map +1 -1
- package/dist/generators/config.js +127 -19
- package/dist/generators/config.js.map +1 -1
- package/dist/generators/docs.js +9 -9
- package/dist/generators/index.js +5 -3
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/landing-page.d.ts.map +1 -1
- package/dist/generators/landing-page.js +310 -76
- package/dist/generators/landing-page.js.map +1 -1
- package/dist/generators/structure.d.ts.map +1 -1
- package/dist/generators/structure.js +161 -17
- package/dist/generators/structure.js.map +1 -1
- package/dist/generators/tests.js +1 -1
- package/dist/prompts/index.d.ts +3 -0
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +12 -8
- package/dist/prompts/index.js.map +1 -1
- package/dist/types/config.d.ts +3 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.d.ts +2 -2
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +6 -3
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/validator.d.ts +20 -3
- package/dist/utils/validator.d.ts.map +1 -1
- package/dist/utils/validator.js +48 -15
- package/dist/utils/validator.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -4,18 +4,25 @@
|
|
|
4
4
|
* Generates AI agent instruction files for every major coding assistant.
|
|
5
5
|
*
|
|
6
6
|
* Strategy:
|
|
7
|
-
*
|
|
8
|
-
* can understand ("this is for AI tools")
|
|
7
|
+
* The master file lives in `.nexus/ai/instructions.md` — a single folder
|
|
8
|
+
* that beginners can understand ("this is for AI tools").
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* .
|
|
10
|
+
* EVERY tool-specific config file gets the FULL project-aware instructions
|
|
11
|
+
* embedded directly. We do NOT rely on "go read another file" directives
|
|
12
|
+
* because AI tools ignore cross-file pointers too often.
|
|
13
|
+
*
|
|
14
|
+
* Files generated:
|
|
15
|
+
* .nexus/ai/instructions.md — master file (full content)
|
|
16
|
+
* .cursorrules — Cursor (full content)
|
|
17
|
+
* .windsurfrules — Windsurf (full content)
|
|
18
|
+
* .clinerules — Cline (full content)
|
|
19
|
+
* AGENTS.md — Claude Code / OpenAI Codex (full content)
|
|
20
|
+
* .github/copilot-instructions.md — GitHub Copilot (full content)
|
|
16
21
|
*
|
|
17
22
|
* Every file is project-aware — it references the actual framework, data
|
|
18
23
|
* strategy, test framework, and patterns chosen during `nexus init`.
|
|
24
|
+
* Every file includes the onboarding protocol that tells the AI to
|
|
25
|
+
* populate template docs BEFORE doing anything the user asks.
|
|
19
26
|
*/
|
|
20
27
|
import type { NexusConfig } from '../types/config.js';
|
|
21
28
|
import type { GeneratedFile } from '../types/templates.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-config.d.ts","sourceRoot":"","sources":["../../src/generators/ai-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ai-config.d.ts","sourceRoot":"","sources":["../../src/generators/ai-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAO3D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,EAAE,CAcrE"}
|
|
@@ -4,18 +4,25 @@
|
|
|
4
4
|
* Generates AI agent instruction files for every major coding assistant.
|
|
5
5
|
*
|
|
6
6
|
* Strategy:
|
|
7
|
-
*
|
|
8
|
-
* can understand ("this is for AI tools")
|
|
7
|
+
* The master file lives in `.nexus/ai/instructions.md` — a single folder
|
|
8
|
+
* that beginners can understand ("this is for AI tools").
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* .
|
|
10
|
+
* EVERY tool-specific config file gets the FULL project-aware instructions
|
|
11
|
+
* embedded directly. We do NOT rely on "go read another file" directives
|
|
12
|
+
* because AI tools ignore cross-file pointers too often.
|
|
13
|
+
*
|
|
14
|
+
* Files generated:
|
|
15
|
+
* .nexus/ai/instructions.md — master file (full content)
|
|
16
|
+
* .cursorrules — Cursor (full content)
|
|
17
|
+
* .windsurfrules — Windsurf (full content)
|
|
18
|
+
* .clinerules — Cline (full content)
|
|
19
|
+
* AGENTS.md — Claude Code / OpenAI Codex (full content)
|
|
20
|
+
* .github/copilot-instructions.md — GitHub Copilot (full content)
|
|
16
21
|
*
|
|
17
22
|
* Every file is project-aware — it references the actual framework, data
|
|
18
23
|
* strategy, test framework, and patterns chosen during `nexus init`.
|
|
24
|
+
* Every file includes the onboarding protocol that tells the AI to
|
|
25
|
+
* populate template docs BEFORE doing anything the user asks.
|
|
19
26
|
*/
|
|
20
27
|
import { version } from '../version.js';
|
|
21
28
|
/* ──────────────────────────────────────────────────────────────
|
|
@@ -28,11 +35,11 @@ export function generateAiConfig(config) {
|
|
|
28
35
|
const files = [];
|
|
29
36
|
// Core instruction file (the single source of truth)
|
|
30
37
|
files.push(generateInstructions(config));
|
|
31
|
-
// Tool-specific
|
|
32
|
-
files.push(generateCursorRules());
|
|
33
|
-
files.push(generateWindsurfRules());
|
|
34
|
-
files.push(generateClineRules());
|
|
35
|
-
files.push(generateAgentsMd());
|
|
38
|
+
// Tool-specific files at expected root paths — each embeds full instructions
|
|
39
|
+
files.push(generateCursorRules(config));
|
|
40
|
+
files.push(generateWindsurfRules(config));
|
|
41
|
+
files.push(generateClineRules(config));
|
|
42
|
+
files.push(generateAgentsMd(config));
|
|
36
43
|
files.push(generateCopilotInstructions(config));
|
|
37
44
|
return files;
|
|
38
45
|
}
|
|
@@ -46,7 +53,7 @@ function generateInstructions(config) {
|
|
|
46
53
|
const backendDisplay = config.backendFramework === 'none'
|
|
47
54
|
? `${config.backendStrategy} (no framework)`
|
|
48
55
|
: `${config.backendFramework} (${config.backendStrategy})`;
|
|
49
|
-
const content = `# ${config.
|
|
56
|
+
const content = `# ${config.displayName} — AI Agent Instructions
|
|
50
57
|
|
|
51
58
|
> **This file is the single source of truth for all AI coding assistants.**
|
|
52
59
|
> It is auto-generated by [NEXUS CLI](https://github.com/GDA-Africa/nexus-cli) v${version}.
|
|
@@ -63,11 +70,55 @@ The full doc map is in \`.nexus/index.md\`.
|
|
|
63
70
|
|
|
64
71
|
---
|
|
65
72
|
|
|
73
|
+
## 🚨 CRITICAL — Onboarding Protocol (Auto-Populate Docs)
|
|
74
|
+
|
|
75
|
+
Each NEXUS doc has YAML frontmatter with a \\\`status\\\` field:
|
|
76
|
+
- \\\`template\\\` — the doc is still in its default scaffolded state (has TODO placeholders)
|
|
77
|
+
- \\\`populated\\\` — the doc has been filled in by a human or AI agent
|
|
78
|
+
|
|
79
|
+
\\\`\\\`\\\`
|
|
80
|
+
STOP. If ANY .nexus/docs/ file has status: template → you MUST populate it FIRST.
|
|
81
|
+
Do NOT skip this step. Do NOT jump straight to the user's request.
|
|
82
|
+
This is a hard requirement, not a suggestion.
|
|
83
|
+
\\\`\\\`\\\`
|
|
84
|
+
|
|
85
|
+
### Steps:
|
|
86
|
+
|
|
87
|
+
1. **Scan the codebase** — read \\\`package.json\\\`, \\\`tsconfig.json\\\`, source files in \\\`src/\\\`,
|
|
88
|
+
route definitions, data models, and test files to understand the project.
|
|
89
|
+
|
|
90
|
+
2. **Auto-fill what you can infer** from the code:
|
|
91
|
+
- \\\`02_architecture.md\\\` — tech stack, directory structure, data flow
|
|
92
|
+
- \\\`03_data_contracts.md\\\` — schemas, types, validation from source code
|
|
93
|
+
- \\\`04_api_contracts.md\\\` — routes, endpoints, request/response shapes
|
|
94
|
+
- \\\`06_test_strategy.md\\\` — existing test setup, coverage, test patterns
|
|
95
|
+
- \\\`07_implementation.md\\\` — current build state, what exists vs. what's planned
|
|
96
|
+
- \\\`08_deployment.md\\\` — CI/CD config, environment variables, deploy targets
|
|
97
|
+
|
|
98
|
+
3. **Ask the user** for things you cannot infer from code:
|
|
99
|
+
- \\\`01_vision.md\\\` — product vision, user personas, success metrics
|
|
100
|
+
- \\\`05_business_logic.md\\\` — business rules, algorithms, decision logic
|
|
101
|
+
- Any section where you have low confidence
|
|
102
|
+
|
|
103
|
+
4. **Update the frontmatter** of each doc you fill in:
|
|
104
|
+
\\\`\\\`\\\`yaml
|
|
105
|
+
status: populated
|
|
106
|
+
confidence: high # or medium/low
|
|
107
|
+
last_updated: "YYYY-MM-DD"
|
|
108
|
+
\\\`\\\`\\\`
|
|
109
|
+
|
|
110
|
+
5. **Then proceed** with whatever task the user originally requested.
|
|
111
|
+
|
|
112
|
+
This onboarding flow only applies when docs have \\\`status: template\\\`.
|
|
113
|
+
Once all docs are \\\`populated\\\`, skip this section and work normally.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
66
117
|
## Project Identity
|
|
67
118
|
|
|
68
119
|
| Field | Value |
|
|
69
120
|
|-------|-------|
|
|
70
|
-
| **Name** | ${config.
|
|
121
|
+
| **Name** | ${config.displayName} |
|
|
71
122
|
| **Type** | ${config.projectType} |
|
|
72
123
|
| **Framework** | ${frameworkDisplay} |
|
|
73
124
|
| **Data Strategy** | ${config.dataStrategy} |
|
|
@@ -145,46 +196,6 @@ This project includes 8 structured documentation files designed for both humans
|
|
|
145
196
|
|
|
146
197
|
---
|
|
147
198
|
|
|
148
|
-
## 🚀 Onboarding — Auto-Populate Documentation
|
|
149
|
-
|
|
150
|
-
Each NEXUS doc has YAML frontmatter with a \`status\` field:
|
|
151
|
-
- \`template\` — the doc is still in its default scaffolded state (has TODO placeholders)
|
|
152
|
-
- \`populated\` — the doc has been filled in by a human or AI agent
|
|
153
|
-
|
|
154
|
-
### If you see \`status: template\` docs, do this FIRST:
|
|
155
|
-
|
|
156
|
-
**Before doing any other task the user asks**, check the NEXUS docs:
|
|
157
|
-
|
|
158
|
-
1. **Scan the codebase** — read \`package.json\`, \`tsconfig.json\`, source files in \`src/\`,
|
|
159
|
-
route definitions, data models, and test files to understand the project.
|
|
160
|
-
|
|
161
|
-
2. **Auto-fill what you can infer** from the code:
|
|
162
|
-
- \`02_architecture.md\` — tech stack, directory structure, data flow
|
|
163
|
-
- \`03_data_contracts.md\` — schemas, types, validation from source code
|
|
164
|
-
- \`04_api_contracts.md\` — routes, endpoints, request/response shapes
|
|
165
|
-
- \`06_test_strategy.md\` — existing test setup, coverage, test patterns
|
|
166
|
-
- \`07_implementation.md\` — current build state, what exists vs. what's planned
|
|
167
|
-
- \`08_deployment.md\` — CI/CD config, environment variables, deploy targets
|
|
168
|
-
|
|
169
|
-
3. **Ask the user** for things you cannot infer from code:
|
|
170
|
-
- \`01_vision.md\` — product vision, user personas, success metrics
|
|
171
|
-
- \`05_business_logic.md\` — business rules, algorithms, decision logic
|
|
172
|
-
- Any section where you have low confidence
|
|
173
|
-
|
|
174
|
-
4. **Update the frontmatter** of each doc you fill in:
|
|
175
|
-
\`\`\`yaml
|
|
176
|
-
status: populated
|
|
177
|
-
confidence: high # or medium/low
|
|
178
|
-
last_updated: "YYYY-MM-DD"
|
|
179
|
-
\`\`\`
|
|
180
|
-
|
|
181
|
-
5. **Then proceed** with whatever task the user originally requested.
|
|
182
|
-
|
|
183
|
-
This onboarding flow only applies when docs have \`status: template\`.
|
|
184
|
-
Once all docs are \`populated\`, skip this section and work normally.
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
199
|
## Workflow
|
|
189
200
|
|
|
190
201
|
When implementing a feature:
|
|
@@ -203,59 +214,77 @@ When implementing a feature:
|
|
|
203
214
|
return { path: '.nexus/ai/instructions.md', content };
|
|
204
215
|
}
|
|
205
216
|
/* ──────────────────────────────────────────────────────────────
|
|
206
|
-
*
|
|
217
|
+
* Tool-specific instruction files
|
|
207
218
|
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
*
|
|
211
|
-
* ────────────────────────────────────────────────────────────── */
|
|
212
|
-
function pointerContent(toolName) {
|
|
213
|
-
return `# AI Instructions for this project
|
|
214
|
-
|
|
215
|
-
> **${toolName}:** The full AI agent instructions for this project live in
|
|
216
|
-
> \`.nexus/ai/instructions.md\`. Read that file before doing anything.
|
|
217
|
-
>
|
|
218
|
-
> This file exists at the root because ${toolName} requires it here.
|
|
219
|
-
> All configuration is centralized in the \`.nexus/\` folder to keep
|
|
220
|
-
> the repository clean and beginner-friendly.
|
|
221
|
-
|
|
222
|
-
Read \`.nexus/ai/instructions.md\` for:
|
|
223
|
-
- Project identity and tech stack
|
|
224
|
-
- Code rules and architecture constraints
|
|
225
|
-
- NEXUS documentation system map
|
|
226
|
-
- Implementation workflow
|
|
227
|
-
|
|
228
|
-
Also read \`.nexus/docs/01_vision.md\` to understand what this project does.
|
|
229
|
-
`;
|
|
230
|
-
}
|
|
231
|
-
function generateCursorRules() {
|
|
232
|
-
return { path: '.cursorrules', content: pointerContent('Cursor') };
|
|
233
|
-
}
|
|
234
|
-
function generateWindsurfRules() {
|
|
235
|
-
return { path: '.windsurfrules', content: pointerContent('Windsurf') };
|
|
236
|
-
}
|
|
237
|
-
function generateClineRules() {
|
|
238
|
-
return { path: '.clinerules', content: pointerContent('Cline') };
|
|
239
|
-
}
|
|
240
|
-
function generateAgentsMd() {
|
|
241
|
-
return { path: 'AGENTS.md', content: pointerContent('Claude Code / OpenAI Codex') };
|
|
242
|
-
}
|
|
243
|
-
/* ──────────────────────────────────────────────────────────────
|
|
244
|
-
* GitHub Copilot — requires .github/copilot-instructions.md
|
|
219
|
+
* Every AI tool gets the FULL project-aware instructions embedded
|
|
220
|
+
* directly in its config file. We do NOT rely on "go read another
|
|
221
|
+
* file" directives — AI tools ignore them too often.
|
|
245
222
|
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
* directly in this file.
|
|
223
|
+
* A shared helper generates the content; each tool function just
|
|
224
|
+
* sets the correct output path and tool-specific header.
|
|
249
225
|
* ────────────────────────────────────────────────────────────── */
|
|
250
|
-
|
|
226
|
+
/**
|
|
227
|
+
* Generate full project-aware instruction content for any AI tool.
|
|
228
|
+
* This is embedded directly in each tool's config file so the AI
|
|
229
|
+
* never has to follow a cross-file pointer.
|
|
230
|
+
*/
|
|
231
|
+
function toolInstructionContent(config, toolName) {
|
|
251
232
|
const frameworkDisplay = getFrameworkDisplay(config.frontendFramework);
|
|
252
233
|
const testDisplay = config.testFramework === 'none' ? 'None configured' : config.testFramework;
|
|
253
234
|
const patternsDisplay = config.appPatterns.length > 0 ? config.appPatterns.join(', ') : 'None selected';
|
|
254
|
-
|
|
235
|
+
return `# ${config.displayName} — ${toolName} Instructions
|
|
236
|
+
|
|
237
|
+
> Auto-generated by [NEXUS CLI](https://github.com/GDA-Africa/nexus-cli) v${version}.
|
|
238
|
+
> Full instructions also at \`.nexus/ai/instructions.md\`.
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 🚨 CRITICAL — Read This First (Onboarding Protocol)
|
|
243
|
+
|
|
244
|
+
This project uses the **NEXUS Documentation System** — 8 structured markdown files
|
|
245
|
+
in \`.nexus/docs/\` that describe every aspect of the project.
|
|
246
|
+
|
|
247
|
+
Each doc has YAML frontmatter with a \`status\` field:
|
|
248
|
+
- \`template\` — still has TODO placeholders, needs to be filled in
|
|
249
|
+
- \`populated\` — already filled in by a human or AI
|
|
250
|
+
|
|
251
|
+
### STOP. Before doing ANYTHING the user asks, check the docs:
|
|
252
|
+
|
|
253
|
+
\`\`\`
|
|
254
|
+
If ANY .nexus/docs/ file has status: template → you MUST populate it FIRST.
|
|
255
|
+
Do NOT skip this. Do NOT go straight to the user's request.
|
|
256
|
+
This is a HARD REQUIREMENT, not a suggestion.
|
|
257
|
+
\`\`\`
|
|
255
258
|
|
|
256
|
-
|
|
259
|
+
**Step 1 — Scan the codebase:** Read \`package.json\`, \`tsconfig.json\`, source files,
|
|
260
|
+
routes, data models, and tests to understand the project.
|
|
257
261
|
|
|
258
|
-
|
|
262
|
+
**Step 2 — Auto-fill what you can infer** from the code:
|
|
263
|
+
- \`02_architecture.md\` — tech stack, directory structure, data flow
|
|
264
|
+
- \`03_data_contracts.md\` — schemas, types, validation from source code
|
|
265
|
+
- \`04_api_contracts.md\` — routes, endpoints, request/response shapes
|
|
266
|
+
- \`06_test_strategy.md\` — existing test setup, coverage, patterns
|
|
267
|
+
- \`07_implementation.md\` — current build state, what exists vs. planned
|
|
268
|
+
- \`08_deployment.md\` — CI/CD config, environment variables
|
|
269
|
+
|
|
270
|
+
**Step 3 — Ask the user** for things you cannot infer:
|
|
271
|
+
- \`01_vision.md\` — product vision, user personas, success metrics
|
|
272
|
+
- \`05_business_logic.md\` — business rules, algorithms, decision logic
|
|
273
|
+
|
|
274
|
+
**Step 4 — Update frontmatter** of each doc you fill in:
|
|
275
|
+
\`\`\`yaml
|
|
276
|
+
status: populated
|
|
277
|
+
confidence: high # or medium/low
|
|
278
|
+
last_updated: "YYYY-MM-DD"
|
|
279
|
+
\`\`\`
|
|
280
|
+
|
|
281
|
+
**Step 5 — THEN** proceed with whatever the user originally asked.
|
|
282
|
+
|
|
283
|
+
This only applies when docs have \`status: template\`. Once populated, work normally.
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Project: ${config.displayName}
|
|
259
288
|
|
|
260
289
|
- **Type:** ${config.projectType}
|
|
261
290
|
- **Framework:** ${frameworkDisplay}
|
|
@@ -264,12 +293,18 @@ function generateCopilotInstructions(config) {
|
|
|
264
293
|
- **Package Manager:** ${config.packageManager}
|
|
265
294
|
- **Patterns:** ${patternsDisplay}
|
|
266
295
|
|
|
267
|
-
##
|
|
296
|
+
## Documentation Map
|
|
268
297
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
298
|
+
| # | File | Purpose |
|
|
299
|
+
|---|------|---------|
|
|
300
|
+
| 1 | \`.nexus/docs/01_vision.md\` | Product requirements, user stories |
|
|
301
|
+
| 2 | \`.nexus/docs/02_architecture.md\` | System design, tech stack |
|
|
302
|
+
| 3 | \`.nexus/docs/03_data_contracts.md\` | Database schemas, validation |
|
|
303
|
+
| 4 | \`.nexus/docs/04_api_contracts.md\` | Endpoints, interfaces |
|
|
304
|
+
| 5 | \`.nexus/docs/05_business_logic.md\` | Rules, algorithms, flows |
|
|
305
|
+
| 6 | \`.nexus/docs/06_test_strategy.md\` | Coverage targets, test types |
|
|
306
|
+
| 7 | \`.nexus/docs/07_implementation.md\` | Build order, file plan |
|
|
307
|
+
| 8 | \`.nexus/docs/08_deployment.md\` | Infrastructure, CI/CD |
|
|
273
308
|
|
|
274
309
|
## Code Rules
|
|
275
310
|
|
|
@@ -279,8 +314,32 @@ function generateCopilotInstructions(config) {
|
|
|
279
314
|
- Conventional Commits — \`feat:\`, \`fix:\`, \`docs:\`, \`chore:\`
|
|
280
315
|
- Test everything — \`tests/unit/\`
|
|
281
316
|
- Validate: \`${getValidationCommand(config)}\`
|
|
317
|
+
|
|
318
|
+
## Full Instructions
|
|
319
|
+
|
|
320
|
+
For the complete rule set (architecture rules, key directories, workflow),
|
|
321
|
+
read \`.nexus/ai/instructions.md\`.
|
|
282
322
|
`;
|
|
283
|
-
|
|
323
|
+
}
|
|
324
|
+
function generateCursorRules(config) {
|
|
325
|
+
return { path: '.cursorrules', content: toolInstructionContent(config, 'Cursor') };
|
|
326
|
+
}
|
|
327
|
+
function generateWindsurfRules(config) {
|
|
328
|
+
return { path: '.windsurfrules', content: toolInstructionContent(config, 'Windsurf') };
|
|
329
|
+
}
|
|
330
|
+
function generateClineRules(config) {
|
|
331
|
+
return { path: '.clinerules', content: toolInstructionContent(config, 'Cline') };
|
|
332
|
+
}
|
|
333
|
+
function generateAgentsMd(config) {
|
|
334
|
+
return { path: 'AGENTS.md', content: toolInstructionContent(config, 'Claude Code / OpenAI Codex') };
|
|
335
|
+
}
|
|
336
|
+
/* ──────────────────────────────────────────────────────────────
|
|
337
|
+
* GitHub Copilot — requires .github/copilot-instructions.md
|
|
338
|
+
*
|
|
339
|
+
* Uses the same shared content as all other tools.
|
|
340
|
+
* ────────────────────────────────────────────────────────────── */
|
|
341
|
+
function generateCopilotInstructions(config) {
|
|
342
|
+
return { path: '.github/copilot-instructions.md', content: toolInstructionContent(config, 'GitHub Copilot') };
|
|
284
343
|
}
|
|
285
344
|
/* ──────────────────────────────────────────────────────────────
|
|
286
345
|
* Helpers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-config.js","sourceRoot":"","sources":["../../src/generators/ai-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ai-config.js","sourceRoot":"","sources":["../../src/generators/ai-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/generators/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/generators/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,EAAE,CAapE"}
|
|
@@ -12,28 +12,68 @@ export function generateConfigs(config) {
|
|
|
12
12
|
files.push(generateEslintConfig());
|
|
13
13
|
files.push(generatePrettierConfig());
|
|
14
14
|
files.push(generateEditorConfig());
|
|
15
|
+
// Framework-specific config files
|
|
16
|
+
const frameworkConfigs = generateFrameworkConfigs(config);
|
|
17
|
+
files.push(...frameworkConfigs);
|
|
15
18
|
return files;
|
|
16
19
|
}
|
|
17
|
-
function generateTsConfig(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
isolatedModules: true,
|
|
30
|
-
noEmit: true,
|
|
31
|
-
jsx: 'preserve',
|
|
32
|
-
incremental: true,
|
|
33
|
-
},
|
|
34
|
-
include: ['src/**/*.ts', 'src/**/*.tsx'],
|
|
35
|
-
exclude: ['node_modules', 'dist'],
|
|
20
|
+
function generateTsConfig(config) {
|
|
21
|
+
// Base compiler options shared by all frameworks
|
|
22
|
+
const compilerOptions = {
|
|
23
|
+
target: 'ES2022',
|
|
24
|
+
lib: ['ES2022', 'DOM', 'DOM.Iterable'],
|
|
25
|
+
strict: true,
|
|
26
|
+
esModuleInterop: true,
|
|
27
|
+
skipLibCheck: true,
|
|
28
|
+
forceConsistentCasingInFileNames: true,
|
|
29
|
+
resolveJsonModule: true,
|
|
30
|
+
isolatedModules: true,
|
|
31
|
+
noEmit: true,
|
|
36
32
|
};
|
|
33
|
+
const include = ['src/**/*.ts', 'src/**/*.tsx'];
|
|
34
|
+
const exclude = ['node_modules', 'dist'];
|
|
35
|
+
// Framework-specific overrides
|
|
36
|
+
switch (config.frontendFramework) {
|
|
37
|
+
case 'nextjs':
|
|
38
|
+
compilerOptions.module = 'ESNext';
|
|
39
|
+
compilerOptions.moduleResolution = 'Bundler';
|
|
40
|
+
compilerOptions.jsx = 'preserve';
|
|
41
|
+
compilerOptions.incremental = true;
|
|
42
|
+
compilerOptions.plugins = [{ name: 'next' }];
|
|
43
|
+
include.push('next-env.d.ts', '.next/types/**/*.ts');
|
|
44
|
+
break;
|
|
45
|
+
case 'react-vite':
|
|
46
|
+
case 'remix':
|
|
47
|
+
compilerOptions.module = 'ESNext';
|
|
48
|
+
compilerOptions.moduleResolution = 'Bundler';
|
|
49
|
+
compilerOptions.jsx = 'react-jsx';
|
|
50
|
+
break;
|
|
51
|
+
case 'sveltekit':
|
|
52
|
+
compilerOptions.module = 'ESNext';
|
|
53
|
+
compilerOptions.moduleResolution = 'Bundler';
|
|
54
|
+
include.length = 0;
|
|
55
|
+
include.push('src/**/*.ts', 'src/**/*.svelte');
|
|
56
|
+
break;
|
|
57
|
+
case 'nuxt':
|
|
58
|
+
// Nuxt auto-generates its own tsconfig; provide a minimal one
|
|
59
|
+
compilerOptions.module = 'ESNext';
|
|
60
|
+
compilerOptions.moduleResolution = 'Bundler';
|
|
61
|
+
compilerOptions.jsx = 'preserve';
|
|
62
|
+
break;
|
|
63
|
+
case 'astro':
|
|
64
|
+
compilerOptions.module = 'ESNext';
|
|
65
|
+
compilerOptions.moduleResolution = 'Bundler';
|
|
66
|
+
compilerOptions.jsx = 'react-jsx';
|
|
67
|
+
include.push('src/**/*.astro');
|
|
68
|
+
break;
|
|
69
|
+
default:
|
|
70
|
+
compilerOptions.module = 'NodeNext';
|
|
71
|
+
compilerOptions.moduleResolution = 'NodeNext';
|
|
72
|
+
compilerOptions.jsx = 'preserve';
|
|
73
|
+
compilerOptions.incremental = true;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
const tsconfig = { compilerOptions, include, exclude };
|
|
37
77
|
return {
|
|
38
78
|
path: 'tsconfig.json',
|
|
39
79
|
content: JSON.stringify(tsconfig, null, 2) + '\n',
|
|
@@ -89,4 +129,72 @@ trim_trailing_whitespace = false
|
|
|
89
129
|
`,
|
|
90
130
|
};
|
|
91
131
|
}
|
|
132
|
+
/* ──────────────────────────────────────────────────────────────
|
|
133
|
+
* Framework-specific config files (vite.config.ts, svelte.config.js, etc.)
|
|
134
|
+
* ────────────────────────────────────────────────────────────── */
|
|
135
|
+
function generateFrameworkConfigs(config) {
|
|
136
|
+
switch (config.frontendFramework) {
|
|
137
|
+
case 'react-vite':
|
|
138
|
+
return [generateViteConfigReact()];
|
|
139
|
+
case 'sveltekit':
|
|
140
|
+
return [generateSvelteConfig(), generateViteConfigSvelte()];
|
|
141
|
+
case 'astro':
|
|
142
|
+
return [generateAstroConfig()];
|
|
143
|
+
default:
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function generateViteConfigReact() {
|
|
148
|
+
return {
|
|
149
|
+
path: 'vite.config.ts',
|
|
150
|
+
content: `import { defineConfig } from 'vite';
|
|
151
|
+
import react from '@vitejs/plugin-react';
|
|
152
|
+
|
|
153
|
+
// https://vite.dev/config/
|
|
154
|
+
export default defineConfig({
|
|
155
|
+
plugins: [react()],
|
|
156
|
+
});
|
|
157
|
+
`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function generateViteConfigSvelte() {
|
|
161
|
+
return {
|
|
162
|
+
path: 'vite.config.ts',
|
|
163
|
+
content: `import { sveltekit } from '@sveltejs/kit/vite';
|
|
164
|
+
import { defineConfig } from 'vite';
|
|
165
|
+
|
|
166
|
+
export default defineConfig({
|
|
167
|
+
plugins: [sveltekit()],
|
|
168
|
+
});
|
|
169
|
+
`,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function generateSvelteConfig() {
|
|
173
|
+
return {
|
|
174
|
+
path: 'svelte.config.js',
|
|
175
|
+
content: `import adapter from '@sveltejs/adapter-auto';
|
|
176
|
+
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
|
177
|
+
|
|
178
|
+
/** @type {import('@sveltejs/kit').Config} */
|
|
179
|
+
const config = {
|
|
180
|
+
preprocess: vitePreprocess(),
|
|
181
|
+
kit: {
|
|
182
|
+
adapter: adapter(),
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
export default config;
|
|
187
|
+
`,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
function generateAstroConfig() {
|
|
191
|
+
return {
|
|
192
|
+
path: 'astro.config.mjs',
|
|
193
|
+
content: `import { defineConfig } from 'astro/config';
|
|
194
|
+
|
|
195
|
+
// https://astro.build/config
|
|
196
|
+
export default defineConfig({});
|
|
197
|
+
`,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
92
200
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/generators/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAmB;IACjD,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAEnC,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/generators/config.ts"],"names":[],"mappings":"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"}
|