maestro-bundle 2.0.0 → 2.1.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/package.json +1 -1
- package/src/cli.mjs +44 -24
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "maestro-bundle",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "One command. Full context for your AI agent. Any editor. Install governance bundles with skills, PRD, AGENTS.md and GitHub Spec Kit.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"maestro-bundle": "./src/cli.mjs"
|
package/src/cli.mjs
CHANGED
|
@@ -113,6 +113,7 @@ function showHelp() {
|
|
|
113
113
|
console.log("");
|
|
114
114
|
console.log(chalk.dim(" Usage:"));
|
|
115
115
|
console.log(` npx maestro-bundle ${chalk.green("<bundle>")} ${chalk.yellow("<editor>")} ${chalk.dim("[directory]")}`);
|
|
116
|
+
console.log(` npx maestro-bundle ${chalk.green("<bundle>")} ${chalk.yellow("<editor>")} ${chalk.dim("[directory]")} --no-sdd`);
|
|
116
117
|
console.log("");
|
|
117
118
|
console.log(chalk.dim(" Bundles:"));
|
|
118
119
|
for (const [key, info] of Object.entries(BUNDLES)) {
|
|
@@ -127,8 +128,12 @@ function showHelp() {
|
|
|
127
128
|
console.log(` ${chalk.yellow("windsurf".padEnd(12))} .windsurfrules (all in one file)`);
|
|
128
129
|
console.log(` ${chalk.yellow("all".padEnd(12))} Install for all editors in the same repo`);
|
|
129
130
|
console.log("");
|
|
131
|
+
console.log(chalk.dim(" Options:"));
|
|
132
|
+
console.log(` ${chalk.dim("--no-sdd")} Skip GitHub Spec Kit (no /speckit.* commands, just AGENTS.md + skills)`);
|
|
133
|
+
console.log("");
|
|
130
134
|
console.log(chalk.dim(" Examples:"));
|
|
131
135
|
console.log(` npx maestro-bundle ai-agents claude`);
|
|
136
|
+
console.log(` npx maestro-bundle ai-agents claude --no-sdd ${chalk.dim("# Without SDD")}`);
|
|
132
137
|
console.log(` npx maestro-bundle jhipster-monorepo cursor ./my-project`);
|
|
133
138
|
console.log(` npx maestro-bundle frontend-spa all`);
|
|
134
139
|
console.log("");
|
|
@@ -251,9 +256,11 @@ async function main() {
|
|
|
251
256
|
process.exit(args.length < 2 && !args.includes("--help") ? 1 : 0);
|
|
252
257
|
}
|
|
253
258
|
|
|
254
|
-
const
|
|
255
|
-
const
|
|
256
|
-
const
|
|
259
|
+
const noSdd = args.includes("--no-sdd");
|
|
260
|
+
const filteredArgs = args.filter(a => a !== "--no-sdd");
|
|
261
|
+
const bundleName = filteredArgs[0];
|
|
262
|
+
const editorArg = filteredArgs[1];
|
|
263
|
+
const targetDir = resolve(filteredArgs[2] || ".");
|
|
257
264
|
|
|
258
265
|
if (!BUNDLES[bundleName]) {
|
|
259
266
|
console.error(chalk.red(`\n Bundle "${bundleName}" not found.\n`));
|
|
@@ -276,11 +283,19 @@ async function main() {
|
|
|
276
283
|
process.exit(1);
|
|
277
284
|
}
|
|
278
285
|
|
|
279
|
-
//
|
|
286
|
+
// Build AGENTS.md (base + bundle)
|
|
280
287
|
let agentsMd = readFile(join(baseDir, "AGENTS.md"));
|
|
281
288
|
const bundleAgents = readFile(join(bundleDir, "AGENTS.md"));
|
|
282
289
|
if (bundleAgents) agentsMd += "\n\n---\n\n" + bundleAgents;
|
|
283
290
|
|
|
291
|
+
// If --no-sdd, strip SDD sections from AGENTS.md
|
|
292
|
+
if (noSdd) {
|
|
293
|
+
agentsMd = agentsMd
|
|
294
|
+
.replace(/## FUNDAMENTAL RULE: Specification-Driven Development[\s\S]*?(?=\n## )/g, "")
|
|
295
|
+
.replace(/## Specification-Driven Development[\s\S]*?(?=\n## )/g, "")
|
|
296
|
+
.replace(/The fundamental SDD rule[\s\S]*?(?=\n## )/g, "");
|
|
297
|
+
}
|
|
298
|
+
|
|
284
299
|
// Listar skills
|
|
285
300
|
const skillDirs = getSkillDirs(templatesDir, bundleName);
|
|
286
301
|
const skills = listSkills(skillDirs);
|
|
@@ -316,15 +331,6 @@ async function main() {
|
|
|
316
331
|
}
|
|
317
332
|
}
|
|
318
333
|
|
|
319
|
-
// 3. Skills canonical (always, for Deep Agents and reference)
|
|
320
|
-
const spinner2 = ora("Installing canonical skills").start();
|
|
321
|
-
const skillsDest = join(targetDir, "skills");
|
|
322
|
-
ensureDir(skillsDest);
|
|
323
|
-
for (const skill of skills) {
|
|
324
|
-
copyDir(skill.dir, join(skillsDest, skill.name));
|
|
325
|
-
}
|
|
326
|
-
spinner2.succeed(`${skills.length} canonical skills in skills/`);
|
|
327
|
-
|
|
328
334
|
// 3. LangChain Skills (for AI bundles)
|
|
329
335
|
if (bundleName === "ai-agents" || bundleName === "ai-agents-deep") {
|
|
330
336
|
const spinnerLc = ora("Installing LangChain Skills (langchain-ai/langchain-skills)").start();
|
|
@@ -360,7 +366,11 @@ async function main() {
|
|
|
360
366
|
}
|
|
361
367
|
spinner3.succeed("references/ ready");
|
|
362
368
|
|
|
363
|
-
// 4. GitHub Spec Kit — install CLI + initialize in project
|
|
369
|
+
// 4. GitHub Spec Kit — install CLI + initialize in project (skip with --no-sdd)
|
|
370
|
+
if (noSdd) {
|
|
371
|
+
const spinnerSkip = ora("Skipping Spec Kit (--no-sdd)").start();
|
|
372
|
+
spinnerSkip.info("Spec Kit skipped. Using AGENTS.md + skills only.");
|
|
373
|
+
} else {
|
|
364
374
|
// Map editor to specify --ai flag
|
|
365
375
|
const aiFlags = {
|
|
366
376
|
claude: "claude",
|
|
@@ -458,6 +468,7 @@ async function main() {
|
|
|
458
468
|
spinner4d.succeed("Bundle constitution integrated with Spec Kit");
|
|
459
469
|
}
|
|
460
470
|
}
|
|
471
|
+
} // end if (!noSdd)
|
|
461
472
|
|
|
462
473
|
// Done
|
|
463
474
|
console.log("");
|
|
@@ -483,18 +494,27 @@ async function main() {
|
|
|
483
494
|
console.log(` ${chalk.cyan(".windsurfrules")}`);
|
|
484
495
|
}
|
|
485
496
|
}
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
497
|
+
|
|
498
|
+
if (!noSdd) {
|
|
499
|
+
console.log(` ${chalk.cyan(".specify/")} (GitHub Spec Kit — /speckit.* commands)`);
|
|
500
|
+
console.log("");
|
|
501
|
+
console.log(" SDD commands available in your editor:");
|
|
502
|
+
console.log(` ${chalk.cyan("/speckit.specify")} — Specify WHAT and WHY`);
|
|
503
|
+
console.log(` ${chalk.cyan("/speckit.plan")} — Plan architecture and stack`);
|
|
504
|
+
console.log(` ${chalk.cyan("/speckit.tasks")} — Break into atomic tasks`);
|
|
505
|
+
console.log(` ${chalk.cyan("/speckit.implement")} — Execute tasks`);
|
|
506
|
+
}
|
|
507
|
+
|
|
495
508
|
console.log("");
|
|
496
509
|
console.log(" Next step:");
|
|
497
|
-
|
|
510
|
+
if (noSdd) {
|
|
511
|
+
console.log(" 1. Fill in PRD.md with your product requirements");
|
|
512
|
+
console.log(" 2. Open the project in your AI editor and start coding");
|
|
513
|
+
} else {
|
|
514
|
+
console.log(" 1. Fill in PRD.md with your product requirements");
|
|
515
|
+
console.log(" 2. Open the project in your AI editor");
|
|
516
|
+
console.log(" 3. Use " + chalk.cyan("/speckit.specify") + " to start your first feature");
|
|
517
|
+
}
|
|
498
518
|
console.log("");
|
|
499
519
|
}
|
|
500
520
|
|