@girardmedia/bootspring 2.2.1 → 2.3.0
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 +2 -2
- package/bin/bootspring.js +17 -132
- package/dist/cli/index.cjs +17808 -0
- package/dist/core.js +7 -6
- package/dist/mcp-server.js +7 -6
- package/generators/api-docs.js +2 -2
- package/generators/decisions.js +3 -3
- package/generators/health.js +16 -16
- package/generators/sprint.js +2 -2
- package/package.json +7 -6
- package/dist/index.js +0 -93883
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Development scaffolding with intelligence
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@girardmedia/bootspring)
|
|
6
|
-
[](https://github.com/Girard-Media/bootspring/actions/workflows/ci.yml)
|
|
7
7
|
|
|
8
8
|
Bootspring is an AI-powered development platform that provides intelligent context, specialized agents, and workflow automation for any MCP-compatible AI assistant.
|
|
9
9
|
|
|
@@ -404,4 +404,4 @@ MIT License - see [LICENSE](LICENSE) for details.
|
|
|
404
404
|
|
|
405
405
|
**Bootspring** - Bootstrap your development. Spring into production.
|
|
406
406
|
|
|
407
|
-
[Website](https://bootspring.com) · [Documentation](https://bootspring.com/docs) · [GitHub](https://github.com/
|
|
407
|
+
[Website](https://bootspring.com) · [Documentation](https://bootspring.com/docs) · [GitHub](https://github.com/Girard-Media/bootspring)
|
package/bin/bootspring.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Bootspring CLI bridge.
|
|
5
|
+
* Routes all commands through the v2 monorepo CLI (thin client).
|
|
6
|
+
* dist/core.js provides self-update only. No IP ships in this package.
|
|
7
|
+
*/
|
|
4
8
|
|
|
5
9
|
const path = require('path');
|
|
6
10
|
const fs = require('fs');
|
|
7
11
|
const { spawn } = require('child_process');
|
|
8
12
|
|
|
9
13
|
const VERSION = require('../package.json').version;
|
|
10
|
-
const
|
|
11
|
-
const MONOREPO_CLI_DIST = path.join(__dirname, '../monorepo/apps/cli/dist/index.js');
|
|
12
|
-
const USE_V2 = process.env.BOOTSPRING_V2 === 'true' || process.argv.includes('--v2');
|
|
14
|
+
const CLI_DIST = path.join(__dirname, '../dist/cli/index.cjs');
|
|
13
15
|
|
|
14
16
|
const C = {
|
|
15
17
|
reset: '\x1b[0m',
|
|
@@ -21,66 +23,6 @@ const C = {
|
|
|
21
23
|
red: '\x1b[31m'
|
|
22
24
|
};
|
|
23
25
|
|
|
24
|
-
const LOGO = `${C.cyan}${C.bold}⚡ Bootspring${C.reset} ${C.dim}v${VERSION}${C.reset}${USE_V2 ? ` ${C.green}(v2-beta)${C.reset}` : ''}`;
|
|
25
|
-
|
|
26
|
-
const COMMANDS = {
|
|
27
|
-
auth: 'auth',
|
|
28
|
-
init: 'init',
|
|
29
|
-
project: 'project',
|
|
30
|
-
switch: { module: 'switchCmd' },
|
|
31
|
-
health: 'health',
|
|
32
|
-
mcp: 'mcp',
|
|
33
|
-
dashboard: 'dashboard',
|
|
34
|
-
context: 'context',
|
|
35
|
-
build: 'build',
|
|
36
|
-
deploy: 'deploy',
|
|
37
|
-
loop: 'loop',
|
|
38
|
-
quality: 'quality',
|
|
39
|
-
security: 'security',
|
|
40
|
-
doctor: 'doctor',
|
|
41
|
-
update: 'update',
|
|
42
|
-
plan: 'plan',
|
|
43
|
-
prd: 'prd',
|
|
44
|
-
preseed: 'preseed',
|
|
45
|
-
'preseed-start': { module: 'preseedStart', method: 'start' },
|
|
46
|
-
'preseed-from-codebase': { module: 'preseed', prepend: ['from-codebase'] },
|
|
47
|
-
seed: 'seed',
|
|
48
|
-
manager: 'manager',
|
|
49
|
-
agent: 'agent',
|
|
50
|
-
skill: 'skill',
|
|
51
|
-
todo: 'todo',
|
|
52
|
-
billing: 'billing',
|
|
53
|
-
plugin: 'plugin',
|
|
54
|
-
analyze: 'analyze',
|
|
55
|
-
audit: 'audit',
|
|
56
|
-
monitor: 'monitor',
|
|
57
|
-
metrics: 'metrics',
|
|
58
|
-
validate: 'validate',
|
|
59
|
-
visualize: 'visualize',
|
|
60
|
-
generate: 'generate',
|
|
61
|
-
content: 'content',
|
|
62
|
-
docs: 'docs',
|
|
63
|
-
learn: 'learn',
|
|
64
|
-
memory: 'memory',
|
|
65
|
-
suggest: 'suggest',
|
|
66
|
-
orchestrator: 'orchestrator',
|
|
67
|
-
watch: 'watch',
|
|
68
|
-
business: 'business',
|
|
69
|
-
fundraise: 'fundraise',
|
|
70
|
-
legal: 'legal',
|
|
71
|
-
org: 'org',
|
|
72
|
-
workspace: 'workspace',
|
|
73
|
-
'cloud-sync': { module: 'cloudSync' },
|
|
74
|
-
github: { module: 'githubCmd' },
|
|
75
|
-
onboard: 'onboard',
|
|
76
|
-
checkpoint: 'checkpoint',
|
|
77
|
-
setup: 'setup',
|
|
78
|
-
log: 'log',
|
|
79
|
-
mvp: 'mvp',
|
|
80
|
-
task: 'task',
|
|
81
|
-
telemetry: 'telemetry'
|
|
82
|
-
};
|
|
83
|
-
|
|
84
26
|
const HELP_GROUPS = {
|
|
85
27
|
'Core': ['auth', 'init', 'project', 'switch', 'health', 'mcp', 'dashboard', 'context'],
|
|
86
28
|
'Build & Deploy': ['build', 'deploy', 'loop', 'quality', 'security', 'doctor', 'update'],
|
|
@@ -95,7 +37,7 @@ const HELP_GROUPS = {
|
|
|
95
37
|
};
|
|
96
38
|
|
|
97
39
|
function showHelp() {
|
|
98
|
-
console.log(
|
|
40
|
+
console.log(`${C.cyan}${C.bold}⚡ Bootspring${C.reset} ${C.dim}v${VERSION}${C.reset}`);
|
|
99
41
|
console.log(`${C.dim}Development scaffolding with intelligence${C.reset}\n`);
|
|
100
42
|
console.log(`${C.bold}Usage:${C.reset} bootspring <command> [options]\n`);
|
|
101
43
|
|
|
@@ -104,62 +46,19 @@ function showHelp() {
|
|
|
104
46
|
}
|
|
105
47
|
|
|
106
48
|
console.log(`\n${C.dim}Run "bootspring <command> --help" for command details${C.reset}`);
|
|
107
|
-
console.log(`${C.dim}Use --v2 to try the monorepo preview CLI${C.reset}`);
|
|
108
|
-
console.log(`${C.dim}The preview CLI is not the production MCP/server path${C.reset}`);
|
|
109
49
|
console.log(`${C.dim}Docs: https://bootspring.com/docs${C.reset}\n`);
|
|
110
50
|
}
|
|
111
51
|
|
|
112
|
-
function
|
|
113
|
-
if (!fs.existsSync(
|
|
114
|
-
console.error(`${C.red}Error:
|
|
52
|
+
function runCli(args) {
|
|
53
|
+
if (!fs.existsSync(CLI_DIST)) {
|
|
54
|
+
console.error(`${C.red}Error: CLI build not found at ${CLI_DIST}${C.reset}`);
|
|
115
55
|
console.error(`${C.dim}Please run 'npm run build' first.${C.reset}`);
|
|
116
56
|
process.exit(1);
|
|
117
57
|
}
|
|
118
58
|
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
async function runStable(command, args) {
|
|
123
|
-
const config = COMMANDS[command];
|
|
124
|
-
if (!config) {
|
|
125
|
-
return false;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
const stableCli = loadStableCli();
|
|
129
|
-
const route = typeof config === 'string'
|
|
130
|
-
? { module: config, method: 'run', prepend: [] }
|
|
131
|
-
: { method: 'run', prepend: [], ...config };
|
|
132
|
-
const cliModule = stableCli.cli && stableCli.cli[route.module];
|
|
133
|
-
const handler = cliModule && cliModule[route.method];
|
|
134
|
-
const normalizedArgs = args[0] === '--help' || args[0] === '-h'
|
|
135
|
-
? ['help', ...args.slice(1)]
|
|
136
|
-
: args;
|
|
137
|
-
|
|
138
|
-
if (typeof handler !== 'function') {
|
|
139
|
-
console.error(`${C.red}Error: missing stable CLI handler for ${command}${C.reset}`);
|
|
140
|
-
process.exit(1);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const result = await Promise.resolve(handler([...(route.prepend || []), ...normalizedArgs]));
|
|
144
|
-
if (typeof result === 'number' && Number.isFinite(result)) {
|
|
145
|
-
process.exit(result);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
return true;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
async function runV2(args) {
|
|
152
|
-
if (!fs.existsSync(MONOREPO_CLI_DIST)) {
|
|
153
|
-
console.error(`${C.red}Error: v2 CLI build not found at ${MONOREPO_CLI_DIST}${C.reset}`);
|
|
154
|
-
console.error(`${C.dim}Please run 'cd monorepo && pnpm build' first.${C.reset}`);
|
|
155
|
-
process.exit(1);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
console.error(`${C.yellow}Warning: using preview v2 CLI. Stable npm CLI remains the supported production path.${C.reset}`);
|
|
159
|
-
const cleanArgs = args.filter(arg => arg !== '--v2');
|
|
160
|
-
const child = spawn('node', [MONOREPO_CLI_DIST, ...cleanArgs], {
|
|
59
|
+
const child = spawn('node', [CLI_DIST, ...args], {
|
|
161
60
|
stdio: 'inherit',
|
|
162
|
-
env: { ...process.env,
|
|
61
|
+
env: { ...process.env, BOOTSPRING_BRIDGE: 'true' }
|
|
163
62
|
});
|
|
164
63
|
|
|
165
64
|
child.on('exit', (code) => {
|
|
@@ -168,24 +67,20 @@ async function runV2(args) {
|
|
|
168
67
|
}
|
|
169
68
|
|
|
170
69
|
async function main() {
|
|
171
|
-
const
|
|
172
|
-
const args = rawArgs.filter(arg => arg !== '--v2');
|
|
70
|
+
const args = process.argv.slice(2);
|
|
173
71
|
const command = args[0];
|
|
174
72
|
|
|
175
73
|
if (!command || command === '--help' || command === '-h' || command === 'help') {
|
|
176
|
-
if (command === 'help' && args[1]) {
|
|
177
|
-
const handled = await runStable(args[1], ['--help']);
|
|
178
|
-
if (handled) return;
|
|
179
|
-
}
|
|
180
74
|
showHelp();
|
|
181
75
|
return;
|
|
182
76
|
}
|
|
183
77
|
|
|
184
78
|
if (command === '--version' || command === '-v') {
|
|
185
|
-
console.log(`Bootspring v${VERSION}
|
|
79
|
+
console.log(`Bootspring v${VERSION}`);
|
|
186
80
|
return;
|
|
187
81
|
}
|
|
188
82
|
|
|
83
|
+
// Self-update check (best-effort from thin-client core)
|
|
189
84
|
try {
|
|
190
85
|
const { selfUpdate } = require(path.resolve(__dirname, '../dist/core'));
|
|
191
86
|
selfUpdate.ensureLatestVersion(args);
|
|
@@ -193,18 +88,8 @@ async function main() {
|
|
|
193
88
|
// Best-effort; do not block CLI on update failures.
|
|
194
89
|
}
|
|
195
90
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
if (await runStable(command, args.slice(1))) {
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
console.log(`${C.red}Unknown command: ${command}${C.reset}`);
|
|
206
|
-
showHelp();
|
|
207
|
-
process.exit(1);
|
|
91
|
+
// Route everything through the v2 monorepo CLI
|
|
92
|
+
runCli(args);
|
|
208
93
|
}
|
|
209
94
|
|
|
210
95
|
main().catch((error) => {
|