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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/cli.mjs +44 -24
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maestro-bundle",
3
- "version": "2.0.0",
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 bundleName = args[0];
255
- const editorArg = args[1];
256
- const targetDir = resolve(args[2] || ".");
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
- // Montar AGENTS.md (base + bundle)
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
- console.log(` ${chalk.cyan("skills/")} (${skills.length} canonical for Deep Agents)`);
487
- console.log(` ${chalk.cyan(".specify/")} (GitHub Spec Kit — /speckit.* commands)`);
488
- console.log("");
489
- console.log(" SDD commands available in your editor:");
490
- console.log(` ${chalk.cyan("/speckit.constitution")} Define project principles`);
491
- console.log(` ${chalk.cyan("/speckit.specify")} — Specify WHAT and WHY`);
492
- console.log(` ${chalk.cyan("/speckit.plan")} — Plan architecture and stack`);
493
- console.log(` ${chalk.cyan("/speckit.tasks")} — Break into atomic tasks`);
494
- console.log(` ${chalk.cyan("/speckit.implement")} — Execute tasks`);
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
- console.log(" Open your project in your AI editor and use " + chalk.cyan("/speckit.specify") + " to get started");
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