@girardmedia/bootspring 2.5.0 → 2.5.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.
Files changed (59) hide show
  1. package/README.md +9 -403
  2. package/bin/bootspring.js +1 -96
  3. package/dist/cli/index.js +65134 -0
  4. package/dist/cli-launcher.js +92 -0
  5. package/dist/core/index.d.ts +2110 -5582
  6. package/dist/core/index.js +2 -0
  7. package/dist/core.js +21123 -5413
  8. package/dist/mcp/index.d.ts +357 -1
  9. package/dist/mcp/index.js +2 -0
  10. package/dist/mcp-server.js +51948 -1976
  11. package/package.json +27 -63
  12. package/scripts/postinstall.cjs +144 -0
  13. package/LICENSE +0 -29
  14. package/dist/cli/index.cjs +0 -20776
  15. package/generators/api-docs.js +0 -827
  16. package/generators/decisions.js +0 -655
  17. package/generators/generate.js +0 -595
  18. package/generators/health.js +0 -942
  19. package/generators/index.ts +0 -82
  20. package/generators/presets/full.js +0 -28
  21. package/generators/presets/index.js +0 -12
  22. package/generators/presets/minimal.js +0 -29
  23. package/generators/presets/standard.js +0 -28
  24. package/generators/questionnaire.js +0 -414
  25. package/generators/sections/advanced.js +0 -136
  26. package/generators/sections/ai.js +0 -106
  27. package/generators/sections/auth.js +0 -89
  28. package/generators/sections/backend.js +0 -146
  29. package/generators/sections/business.js +0 -118
  30. package/generators/sections/content.js +0 -300
  31. package/generators/sections/deployment.js +0 -139
  32. package/generators/sections/features.js +0 -122
  33. package/generators/sections/frontend.js +0 -118
  34. package/generators/sections/identity.js +0 -76
  35. package/generators/sections/index.js +0 -40
  36. package/generators/sections/instructions.js +0 -146
  37. package/generators/sections/payments.js +0 -104
  38. package/generators/sections/plugins.js +0 -142
  39. package/generators/sections/pre-build.js +0 -130
  40. package/generators/sections/security.js +0 -127
  41. package/generators/sections/technical.js +0 -171
  42. package/generators/sections/testing.js +0 -125
  43. package/generators/sections/workflow.js +0 -104
  44. package/generators/sprint.js +0 -675
  45. package/generators/templates/agents.template.js +0 -199
  46. package/generators/templates/assistant-context.template.js +0 -83
  47. package/generators/templates/build-planning.template.js +0 -708
  48. package/generators/templates/claude.template.js +0 -379
  49. package/generators/templates/content.template.js +0 -819
  50. package/generators/templates/index.js +0 -16
  51. package/generators/templates/planning.template.js +0 -515
  52. package/generators/templates/seed.template.js +0 -109
  53. package/generators/visual-doc-generator.js +0 -910
  54. package/scripts/postinstall.js +0 -197
  55. /package/{claude-commands → assets/claude-commands}/agent.md +0 -0
  56. /package/{claude-commands → assets/claude-commands}/bs.md +0 -0
  57. /package/{claude-commands → assets/claude-commands}/build.md +0 -0
  58. /package/{claude-commands → assets/claude-commands}/skill.md +0 -0
  59. /package/{claude-commands → assets/claude-commands}/todo.md +0 -0
@@ -1,379 +0,0 @@
1
- /**
2
- * CLAUDE.md Template Generator
3
- *
4
- * Generates a rich CLAUDE.md from questionnaire answers.
5
- *
6
- * @package bootspring
7
- * @module generators/templates/claude
8
- */
9
-
10
- const utils = require('../../core/utils');
11
-
12
- /**
13
- * Generate CLAUDE.md content from config
14
- */
15
- function generate(config) {
16
- const date = utils.formatDate();
17
- const sections = [];
18
-
19
- // Header
20
- sections.push(`# ${config.project.name} - AI Context`);
21
- sections.push('');
22
- sections.push(`**Generated by**: Bootspring v${require('../../package.json').version}`);
23
- sections.push(`**Last Updated**: ${date}`);
24
- sections.push('');
25
- sections.push('---');
26
- sections.push('');
27
-
28
- // CRITICAL: Planning is the single source of truth
29
- sections.push('## IMPORTANT: Planning First');
30
- sections.push('');
31
- sections.push('**The `/planning` folder is the SINGLE SOURCE OF TRUTH for all implementation.**');
32
- sections.push('');
33
- sections.push('### Before Writing ANY Code');
34
- sections.push('1. Read `planning/MASTER_PLAN.md` - Overall vision and phases');
35
- sections.push('2. Run `bootspring build task` - Current task ID comes from `planning/BUILD_STATE.json`');
36
- sections.push('3. Read `planning/TODO.md` - Find the task ID and its acceptance criteria');
37
- sections.push('4. Read `planning/CONTEXT.md` - Current build context');
38
- sections.push('5. Understand the acceptance criteria before implementing');
39
- sections.push('');
40
- sections.push('### After Completing ANY Task');
41
- sections.push('1. Update `planning/TODO.md` - Check off completed items');
42
- sections.push('2. Run `bootspring build done` - Updates BUILD_STATE.json automatically');
43
- sections.push('3. Document any architectural decisions or deviations');
44
- sections.push('');
45
- sections.push('**DO NOT skip reading planning docs. DO NOT skip updating them.**');
46
- sections.push('');
47
- sections.push('---');
48
- sections.push('');
49
-
50
- // Planning folder contents
51
- sections.push('## Planning Folder (`/planning`)');
52
- sections.push('');
53
- sections.push('| File | Purpose | When to Read |');
54
- sections.push('|------|---------|--------------|');
55
- sections.push('| `MASTER_PLAN.md` | Overall vision, phases, success criteria | **Always read first** |');
56
- sections.push('| `TODO.md` | **Source of truth** — all tasks with acceptance criteria | **Before each task** |');
57
- sections.push('| `CONTEXT.md` | Current build context and decisions | Before each task |');
58
- sections.push('| `BUILD_STATE.json` | Machine state - source of current task ID | Reference only |');
59
- sections.push('');
60
- sections.push('---');
61
- sections.push('');
62
-
63
- // Preseed docs - the source material
64
- sections.push('## Source Documents (`.bootspring/preseed/`)');
65
- sections.push('');
66
- sections.push('These are the original specifications the planning was derived from:');
67
- sections.push('');
68
- sections.push('| File | Contains |');
69
- sections.push('|------|----------|');
70
- sections.push('| `VISION.md` | Product vision, problem/solution, goals |');
71
- sections.push('| `AUDIENCE.md` | Target users, personas, ICP |');
72
- sections.push('| `MARKET.md` | Market analysis, TAM/SAM/SOM |');
73
- sections.push('| `COMPETITORS.md` | Competitive landscape, differentiation |');
74
- sections.push('| `BUSINESS_MODEL.md` | Revenue model, pricing, unit economics |');
75
- sections.push('| `PRD.md` | Product requirements, features, user stories |');
76
- sections.push('| `TECHNICAL_SPEC.md` | Architecture, stack, data model, APIs |');
77
- sections.push('| `ROADMAP.md` | Implementation phases, milestones |');
78
- sections.push('');
79
- sections.push('---');
80
- sections.push('');
81
-
82
- // Project Overview
83
- sections.push('## Project Overview');
84
- sections.push('');
85
- if (config.project.description) {
86
- sections.push(config.project.description);
87
- } else {
88
- sections.push(`${config.project.name} is a ${config.stack.framework} project.`);
89
- }
90
- sections.push('');
91
- sections.push(`**Status**: ${config.project.status || 'development'}`);
92
- sections.push(`**Version**: ${config.project.version || '0.1.0'}`);
93
- sections.push('');
94
- sections.push('---');
95
- sections.push('');
96
-
97
- // Tech Stack
98
- sections.push('## Tech Stack');
99
- sections.push('');
100
- sections.push(`- **Framework**: ${formatFramework(config.stack.framework)}`);
101
- sections.push(`- **Language**: ${config.stack.language}`);
102
- if (config.stack.database !== 'none') {
103
- sections.push(`- **Database**: ${config.stack.database}`);
104
- if (config.stack.orm) {
105
- sections.push(`- **ORM**: ${config.stack.orm}`);
106
- }
107
- }
108
- sections.push(`- **Hosting**: ${config.stack.hosting}`);
109
- sections.push('');
110
- sections.push('---');
111
- sections.push('');
112
-
113
- // Enabled Plugins
114
- const enabledPlugins = Object.entries(config.plugins || {})
115
- .filter(([_, p]) => p.enabled);
116
-
117
- if (enabledPlugins.length > 0) {
118
- sections.push('## Enabled Plugins');
119
- sections.push('');
120
- for (const [name, plugin] of enabledPlugins) {
121
- sections.push(`### ${capitalize(name)}`);
122
- sections.push(`- **Provider**: ${plugin.provider || 'default'}`);
123
- if (plugin.features && plugin.features.length > 0) {
124
- sections.push(`- **Features**: ${plugin.features.join(', ')}`);
125
- }
126
- sections.push('');
127
- }
128
- sections.push('---');
129
- sections.push('');
130
- }
131
-
132
- // Custom Instructions
133
- if (config.instructions && Object.keys(config.instructions).length > 0) {
134
- sections.push('## Development Guidelines');
135
- sections.push('');
136
-
137
- if (config.instructions.componentPreferences?.length > 0) {
138
- sections.push('### Component Guidelines');
139
- for (const pref of config.instructions.componentPreferences) {
140
- sections.push(`- ${formatPreference(pref)}`);
141
- }
142
- sections.push('');
143
- }
144
-
145
- if (config.instructions.validationPreferences?.length > 0) {
146
- sections.push('### Validation & Types');
147
- for (const pref of config.instructions.validationPreferences) {
148
- sections.push(`- ${formatPreference(pref)}`);
149
- }
150
- sections.push('');
151
- }
152
-
153
- if (config.instructions.securityRules?.length > 0) {
154
- sections.push('### Security Rules');
155
- for (const rule of config.instructions.securityRules) {
156
- sections.push(`- ${formatPreference(rule)}`);
157
- }
158
- sections.push('');
159
- }
160
-
161
- if (config.instructions.testingRules?.length > 0) {
162
- sections.push('### Testing Rules');
163
- for (const rule of config.instructions.testingRules) {
164
- sections.push(`- ${formatPreference(rule)}`);
165
- }
166
- sections.push('');
167
- }
168
-
169
- if (config.instructions.forbiddenPatterns?.length > 0) {
170
- sections.push('### Forbidden Patterns');
171
- sections.push('Never use these:');
172
- for (const pattern of config.instructions.forbiddenPatterns) {
173
- sections.push(`- ${pattern}`);
174
- }
175
- sections.push('');
176
- }
177
-
178
- if (config.instructions.additionalInstructions) {
179
- sections.push('### Additional Instructions');
180
- sections.push(config.instructions.additionalInstructions);
181
- sections.push('');
182
- }
183
-
184
- sections.push('---');
185
- sections.push('');
186
- }
187
-
188
- // Workflow
189
- if (config.workflow) {
190
- sections.push('## Development Workflow');
191
- sections.push('');
192
- sections.push(`- **Git Strategy**: ${formatGitStrategy(config.workflow.gitStrategy)}`);
193
- sections.push(`- **Team Size**: ${config.workflow.teamSize}`);
194
- sections.push(`- **Commit Style**: ${config.workflow.commitStyle}`);
195
- sections.push('');
196
- sections.push('---');
197
- sections.push('');
198
- }
199
-
200
- // Business Context (if available)
201
- if (config.business && config.business.model) {
202
- sections.push('## Business Context');
203
- sections.push('');
204
- sections.push(`- **Model**: ${config.business.model}`);
205
- if (config.business.pricing) {
206
- sections.push(`- **Pricing**: ${config.business.pricing}`);
207
- }
208
- if (config.business.targetMarket) {
209
- sections.push(`- **Target Market**: ${config.business.targetMarket}`);
210
- }
211
- sections.push('');
212
- sections.push('---');
213
- sections.push('');
214
- }
215
-
216
- // Autonomous Build System
217
- sections.push('## Build Loop');
218
- sections.push('');
219
- sections.push('**To start building, run:**');
220
- sections.push('');
221
- sections.push('```');
222
- sections.push('bootspring build next');
223
- sections.push('```');
224
- sections.push('');
225
- sections.push('This starts an autonomous loop:');
226
- sections.push('');
227
- sections.push('```');
228
- sections.push('┌─────────────────────────────────────────────────────────────┐');
229
- sections.push('│ bootspring build next │');
230
- sections.push('│ ↓ │');
231
- sections.push('│ bootspring build task → get in_progress task ID │');
232
- sections.push('│ ↓ │');
233
- sections.push('│ Read planning/TODO.md for acceptance criteria │');
234
- sections.push('│ ↓ │');
235
- sections.push('│ Implement task (meet acceptance criteria) │');
236
- sections.push('│ ↓ │');
237
- sections.push('│ bootspring build done │');
238
- sections.push('│ ↓ │');
239
- sections.push('│ [Auto-queues next task] → Continue implementing... │');
240
- sections.push('└─────────────────────────────────────────────────────────────┘');
241
- sections.push('```');
242
- sections.push('');
243
- sections.push('**Keep looping until all tasks are complete.**');
244
- sections.push('');
245
- sections.push('### Commands');
246
- sections.push('');
247
- sections.push('| Command | What it does |');
248
- sections.push('|---------|--------------|');
249
- sections.push('| `bootspring build next` | **Start here** - queue next task |');
250
- sections.push('| `bootspring build task` | Show current in-progress task |');
251
- sections.push('| `bootspring build done` | Mark complete, auto-queue next |');
252
- sections.push('| `bootspring build status` | View progress |');
253
- sections.push('| `bootspring build skip` | Skip current task |');
254
- sections.push('');
255
- sections.push('---');
256
- sections.push('');
257
-
258
- // Rules
259
- sections.push('## Rules');
260
- sections.push('');
261
- sections.push('1. **Always read before coding** - No implementation without reading MASTER_PLAN.md and checking `bootspring build task`');
262
- sections.push('2. **Follow acceptance criteria exactly** - The task is not done until all criteria are met');
263
- sections.push('3. **Update planning docs** - Check off TODO.md items, run `bootspring build done`');
264
- sections.push('4. **One task at a time** - Complete current task before starting next');
265
- sections.push('5. **Document decisions** - If you deviate from the plan, document why');
266
- sections.push('');
267
- sections.push('---');
268
- sections.push('');
269
-
270
- // Git Commits
271
- sections.push('## Git Commits');
272
- sections.push('');
273
- sections.push('- Use conventional commit format: `feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`');
274
- sections.push('- Write clear, descriptive commit messages');
275
- sections.push('- Keep commits atomic (one logical change per commit)');
276
- sections.push('- **NEVER add Co-Authored-By or AI attribution to commits**');
277
- sections.push('- Never commit secrets, API keys, or credentials');
278
- sections.push('- Run quality checks before committing');
279
- sections.push('');
280
- sections.push('---');
281
- sections.push('');
282
-
283
- // Bootspring Slash Commands
284
- sections.push('## Bootspring Commands');
285
- sections.push('');
286
- sections.push('**IMPORTANT: When the user types any of these commands, run them directly as CLI commands.**');
287
- sections.push('Do NOT interpret them as natural language requests. Execute the exact command.');
288
- sections.push('');
289
- sections.push('### Available Commands');
290
- sections.push('');
291
- sections.push('| Command | Description |');
292
- sections.push('|---------|-------------|');
293
- sections.push('| `bootspring build` | Run production build for the project |');
294
- sections.push('| `bootspring build next` | Queue and start the next build task |');
295
- sections.push('| `bootspring build task` | Show current in-progress task |');
296
- sections.push('| `bootspring build done` | Mark current task complete |');
297
- sections.push('| `bootspring build status` | View build progress |');
298
- sections.push('| `bootspring analyze` | Run deep codebase analysis |');
299
- sections.push('| `bootspring generate` | Regenerate CLAUDE.md context |');
300
- sections.push('| `bootspring plan` | Get planning recommendations |');
301
- sections.push('| `bootspring todo` | Manage project todos |');
302
- sections.push('| `bootspring skill search <query>` | Search code patterns |');
303
- sections.push('| `bootspring auth` | Check authentication status |');
304
- sections.push('');
305
- sections.push('### Command Recognition');
306
- sections.push('');
307
- sections.push('When the user says any of these, run the bootspring CLI command:');
308
- sections.push('- "bootspring build" → `bootspring build`');
309
- sections.push('- "build" or "/build" → `bootspring build`');
310
- sections.push('- "analyze" or "/analyze" → `bootspring analyze`');
311
- sections.push('- "generate" or "/generate" → `bootspring generate`');
312
- sections.push('- "plan" or "/plan" → `bootspring plan`');
313
- sections.push('- "todo" or "/todo" → `bootspring todo`');
314
- sections.push('');
315
- sections.push('---');
316
- sections.push('');
317
-
318
- // Footer
319
- sections.push('*Generated by [Bootspring](https://bootspring.com) - Development scaffolding with intelligence*');
320
-
321
- return sections.join('\n');
322
- }
323
-
324
- // Helper functions
325
- function capitalize(str) {
326
- return str.charAt(0).toUpperCase() + str.slice(1);
327
- }
328
-
329
- function formatFramework(framework) {
330
- const names = {
331
- 'nextjs': 'Next.js',
332
- 'remix': 'Remix',
333
- 'nuxt': 'Nuxt',
334
- 'sveltekit': 'SvelteKit',
335
- 'express': 'Express',
336
- 'fastify': 'Fastify',
337
- 'hono': 'Hono'
338
- };
339
- return names[framework] || framework;
340
- }
341
-
342
- function formatGitStrategy(strategy) {
343
- const names = {
344
- 'feature-branch': 'Feature Branch',
345
- 'trunk': 'Trunk-Based',
346
- 'gitflow': 'GitFlow',
347
- 'github-flow': 'GitHub Flow'
348
- };
349
- return names[strategy] || strategy;
350
- }
351
-
352
- function formatPreference(pref) {
353
- const descriptions = {
354
- 'server-components': 'Use Server Components by default',
355
- 'server-actions': 'Use Server Actions for mutations',
356
- 'small-components': 'Keep components small and focused',
357
- 'colocate-styles': 'Colocate styles with components',
358
- 'composition': 'Prefer composition over inheritance',
359
- 'tailwind': 'Use Tailwind CSS for styling',
360
- 'css-modules': 'Use CSS Modules',
361
- 'mobile-first': 'Mobile-first responsive design',
362
- 'zod': 'Use Zod for all input validation',
363
- 'strict-ts': 'Strict TypeScript mode',
364
- 'api-validation': 'Validate at API boundaries',
365
- 'runtime-types': 'Runtime type checking',
366
- 'no-client-keys': 'Never expose API keys to client',
367
- 'env-secrets': 'Use environment variables for secrets',
368
- 'sanitize-input': 'Sanitize all user input',
369
- 'parameterized-queries': 'Use parameterized queries',
370
- 'rate-limiting': 'Implement rate limiting',
371
- 'test-new-features': 'Write tests for new features',
372
- 'coverage-80': 'Maintain 80%+ test coverage',
373
- 'test-edge-cases': 'Test edge cases explicitly',
374
- 'meaningful-names': 'Use meaningful test names'
375
- };
376
- return descriptions[pref] || pref;
377
- }
378
-
379
- module.exports = { generate };