@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,199 +0,0 @@
1
- /**
2
- * AGENTS.md Template Generator
3
- *
4
- * Generates AGENTS.md following the open standard for AI coding agents.
5
- * Supported by: OpenAI Codex, Cursor, Amp, Jules (Google), Factory, Kilo Code
6
- *
7
- * Best practices from https://github.blog/ai-and-ml/github-copilot/how-to-write-a-great-agents-md-lessons-from-over-2500-repositories/
8
- *
9
- * @package bootspring
10
- * @module generators/templates/agents
11
- */
12
-
13
- /**
14
- * Generate root AGENTS.md content from config
15
- */
16
- function generate(config) {
17
- const sections = [];
18
-
19
- // Persona - Be specific, not vague
20
- sections.push(`# ${config.project.name}`);
21
- sections.push('');
22
- sections.push(`You are a senior full-stack developer working on ${config.project.name}, a ${formatFramework(config.stack.framework)} application with ${config.stack.language}.`);
23
- sections.push('');
24
-
25
- // Commands - Put early
26
- sections.push('## Commands');
27
- sections.push('');
28
- sections.push('```bash');
29
- sections.push('# Development');
30
- sections.push('npm run dev');
31
- sections.push('');
32
- sections.push('# Quality checks (run before committing)');
33
- sections.push('npm run lint');
34
- sections.push('npm run test');
35
- sections.push('npm run typecheck');
36
- sections.push('');
37
- sections.push('# Build tasks');
38
- sections.push('bootspring build next # Get next task');
39
- sections.push('bootspring build task # Show current in-progress task');
40
- sections.push('bootspring build done # Mark task complete');
41
- sections.push('bootspring build status # Check progress');
42
- sections.push('```');
43
- sections.push('');
44
-
45
- // Task System
46
- sections.push('## Build Loop');
47
- sections.push('');
48
- sections.push('**Start building:**');
49
- sections.push('```');
50
- sections.push('bootspring build next');
51
- sections.push('```');
52
- sections.push('');
53
- sections.push('This loops through all tasks:');
54
- sections.push('1. Run `bootspring build task` (current task comes from `planning/BUILD_STATE.json`)');
55
- sections.push('2. Read that task\'s acceptance criteria in `planning/TODO.md`');
56
- sections.push('3. Implement and validate the task');
57
- sections.push('4. Run `bootspring build done` (auto-queues next)');
58
- sections.push('');
59
- sections.push('**Keep looping until MVP complete.**');
60
- sections.push('');
61
-
62
- // Stack - Be specific about versions
63
- sections.push('## Stack');
64
- sections.push('');
65
- sections.push(`- **Framework**: ${formatFramework(config.stack.framework)}`);
66
- sections.push(`- **Language**: ${config.stack.language}`);
67
- if (config.stack.database !== 'none') {
68
- sections.push(`- **Database**: ${config.stack.database}`);
69
- if (config.stack.orm) {
70
- sections.push(`- **ORM**: ${config.stack.orm}`);
71
- }
72
- }
73
- sections.push('');
74
-
75
- // Code Style
76
- sections.push('## Code Style');
77
- sections.push('');
78
- if (config.stack.framework === 'nextjs') {
79
- sections.push('- Use Server Components by default');
80
- sections.push('- Use Server Actions for mutations (not API routes)');
81
- }
82
- sections.push('- Use Zod for input validation');
83
- sections.push('- Keep files under 300 lines');
84
- sections.push('- Use meaningful variable and function names');
85
- sections.push('- Follow existing patterns in the codebase');
86
- sections.push('');
87
-
88
- // Git Workflow
89
- sections.push('## Git Workflow');
90
- sections.push('');
91
- sections.push('- Conventional commits: `feat:`, `fix:`, `docs:`, `refactor:`');
92
- sections.push('- Atomic commits - one logical change per commit');
93
- sections.push('- Run quality checks before committing');
94
- sections.push('- Never force push to main');
95
- sections.push('- **Never add Co-Authored-By or AI attribution to commits**');
96
- sections.push('');
97
-
98
- // Boundaries - Critical
99
- sections.push('## Boundaries');
100
- sections.push('');
101
- sections.push('**Never:**');
102
- sections.push('- Commit secrets, API keys, or credentials');
103
- sections.push('- Modify `.env` files with real values');
104
- sections.push('- Delete or overwrite migration files');
105
- sections.push('- Skip tests to make code compile');
106
- sections.push('- Introduce breaking changes without discussion');
107
- sections.push('');
108
- sections.push('**Always:**');
109
- sections.push('- Read existing code before modifying');
110
- sections.push('- Run tests after changes');
111
- sections.push('- Check for TypeScript errors');
112
- sections.push('- Follow the acceptance criteria exactly');
113
- sections.push('');
114
-
115
- // Testing
116
- sections.push('## Testing');
117
- sections.push('');
118
- sections.push('- Write tests for new features');
119
- sections.push('- Ensure existing tests still pass');
120
- sections.push('- Test edge cases and error conditions');
121
- sections.push('');
122
-
123
- return sections.join('\n');
124
- }
125
-
126
- /**
127
- * Generate planning-specific AGENTS.md for the planning directory
128
- */
129
- function generatePlanningAgents(_config) {
130
- const sections = [];
131
-
132
- sections.push('# Planning Directory');
133
- sections.push('');
134
- sections.push('You are working on build tasks for the MVP. This directory contains build planning files.');
135
- sections.push('');
136
-
137
- sections.push('## Current Task');
138
- sections.push('');
139
- sections.push('Run `bootspring build task` to get the current `in_progress` task from `BUILD_STATE.json`.');
140
- sections.push('');
141
-
142
- sections.push('## Commands');
143
- sections.push('');
144
- sections.push('```bash');
145
- sections.push('bootspring build task # Show current task');
146
- sections.push('bootspring build done # Mark task complete, get next');
147
- sections.push('bootspring build skip # Skip task, get next');
148
- sections.push('bootspring build status # View progress');
149
- sections.push('```');
150
- sections.push('');
151
-
152
- sections.push('## Files');
153
- sections.push('');
154
- sections.push('| File | Purpose |');
155
- sections.push('|------|---------|');
156
- sections.push('| `TODO.md` | **Source of truth** — task checklist with acceptance criteria |');
157
- sections.push('| `BUILD_STATE.json` | Build state and current task ID (do not edit) |');
158
- sections.push('| `CONTEXT.md` | Build context summary |');
159
- sections.push('');
160
-
161
- sections.push('## Workflow');
162
- sections.push('');
163
- sections.push('1. Run `bootspring build task` to identify the current task ID');
164
- sections.push('2. Read the matching task in `TODO.md` for acceptance criteria');
165
- sections.push('3. Implement in the main codebase (not here)');
166
- sections.push('4. Ensure acceptance criteria are met');
167
- sections.push('5. Run `npm run lint && npm run test`');
168
- sections.push('6. Commit changes');
169
- sections.push('7. Run `bootspring build done`');
170
- sections.push('');
171
-
172
- sections.push('## Boundaries');
173
- sections.push('');
174
- sections.push('- Do NOT edit `BUILD_STATE.json` directly');
175
- sections.push('- Do NOT skip quality checks');
176
- sections.push('- Do NOT work on multiple tasks at once');
177
- sections.push('');
178
-
179
- return sections.join('\n');
180
- }
181
-
182
- // Helper functions
183
- function formatFramework(framework) {
184
- const names = {
185
- 'nextjs': 'Next.js 14+ (App Router)',
186
- 'remix': 'Remix',
187
- 'nuxt': 'Nuxt 3',
188
- 'sveltekit': 'SvelteKit',
189
- 'express': 'Express.js',
190
- 'fastify': 'Fastify',
191
- 'hono': 'Hono'
192
- };
193
- return names[framework] || framework;
194
- }
195
-
196
- module.exports = {
197
- generate,
198
- generatePlanningAgents
199
- };
@@ -1,83 +0,0 @@
1
- /**
2
- * Assistant Context Template Adapter
3
- *
4
- * Derives assistant-specific guides (GEMINI.md, CODEX.md)
5
- * from the generated CLAUDE.md baseline.
6
- *
7
- * @package bootspring
8
- * @module generators/templates/assistant-context
9
- */
10
-
11
- const ASSISTANT_DOC_META = {
12
- gemini: {
13
- filename: 'GEMINI.md',
14
- label: 'Gemini CLI'
15
- },
16
- codex: {
17
- filename: 'CODEX.md',
18
- label: 'Codex'
19
- }
20
- };
21
-
22
- const ASSISTANT_DOC_TARGETS = ['gemini', 'codex'];
23
-
24
- function getAssistantDocFilename(target) {
25
- return ASSISTANT_DOC_META[target].filename;
26
- }
27
-
28
- function buildNaturalLanguageRoutingSection(label) {
29
- const lines = [];
30
- lines.push('## Natural Language Bootspring Routing');
31
- lines.push('');
32
- lines.push(`Use this section in ${label} to map plain-English requests to Bootspring commands.`);
33
- lines.push('');
34
- lines.push('- If a user message already starts with `bootspring`, run it exactly as written.');
35
- lines.push('- If a user asks in natural language, execute the matching command from the table below.');
36
- lines.push('');
37
- lines.push('| User request | Run command |');
38
- lines.push('|--------------|-------------|');
39
- lines.push('| "log in to bootspring" | `bootspring auth login` |');
40
- lines.push('| "show auth status" | `bootspring auth status` |');
41
- lines.push('| "start build loop" or "next task" | `bootspring build next` |');
42
- lines.push('| "what task am I on?" | `bootspring build task` |');
43
- lines.push('| "mark this task done" | `bootspring build done` |');
44
- lines.push('| "show build progress" | `bootspring build status` |');
45
- lines.push('| "refresh context files" | `bootspring generate --full` |');
46
- lines.push('');
47
- lines.push('When in doubt, prefer direct Bootspring CLI commands over paraphrasing.');
48
- return lines.join('\n');
49
- }
50
-
51
- function adaptBaseContent(claudeContent, target) {
52
- const meta = ASSISTANT_DOC_META[target];
53
- return claudeContent
54
- .replace(/\bCLAUDE\.md\b/g, meta.filename)
55
- .replace(/Claude Code context/g, `${meta.label} context`)
56
- .replace(/Context for Claude Code/g, `Context for ${meta.label}`);
57
- }
58
-
59
- function generateAssistantContext(claudeContent, target) {
60
- const meta = ASSISTANT_DOC_META[target];
61
- const adaptedContent = adaptBaseContent(claudeContent, target).trimEnd();
62
-
63
- return `${adaptedContent}
64
-
65
- ---
66
-
67
- ${buildNaturalLanguageRoutingSection(meta.label)}
68
- `;
69
- }
70
-
71
- function generateAssistantContextFiles(claudeContent) {
72
- return {
73
- gemini: generateAssistantContext(claudeContent, 'gemini'),
74
- codex: generateAssistantContext(claudeContent, 'codex')
75
- };
76
- }
77
-
78
- module.exports = {
79
- ASSISTANT_DOC_TARGETS,
80
- getAssistantDocFilename,
81
- generateAssistantContext,
82
- generateAssistantContextFiles
83
- };