@girardmedia/bootspring 2.5.2 → 2.5.3

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/dist/cli/index.js CHANGED
@@ -3378,7 +3378,7 @@ var init_release = __esm({
3378
3378
  "../../packages/shared/src/release.ts"() {
3379
3379
  "use strict";
3380
3380
  init_cjs_shims();
3381
- BOOTSPRING_VERSION = "2.5.1";
3381
+ BOOTSPRING_VERSION = "2.5.3";
3382
3382
  BOOTSPRING_PACKAGE_NAME = "@girardmedia/bootspring";
3383
3383
  }
3384
3384
  });
@@ -51538,29 +51538,6 @@ var SEED_FOLDERS = [
51538
51538
  ".bootspring/config"
51539
51539
  ];
51540
51540
  var VALID_PRESETS = ["minimal", "standard", "full", "startup", "api"];
51541
- function isExistingCodebase(projectRoot) {
51542
- const indicators = [
51543
- "package.json",
51544
- "Cargo.toml",
51545
- "go.mod",
51546
- "requirements.txt",
51547
- "pyproject.toml",
51548
- "Gemfile",
51549
- "pom.xml",
51550
- "build.gradle",
51551
- "composer.json",
51552
- ".git"
51553
- ];
51554
- const srcDirs = ["src", "lib", "app", "pages", "components"];
51555
- for (const indicator of indicators) {
51556
- if (fs33.existsSync(path35.join(projectRoot, indicator))) return true;
51557
- }
51558
- for (const dir of srcDirs) {
51559
- const dirPath = path35.join(projectRoot, dir);
51560
- if (fs33.existsSync(dirPath) && fs33.statSync(dirPath).isDirectory()) return true;
51561
- }
51562
- return false;
51563
- }
51564
51541
  function createSeedFolders(projectRoot) {
51565
51542
  let dirsCreated = 0;
51566
51543
  for (const folder of SEED_FOLDERS) {
@@ -51655,8 +51632,16 @@ function registerSeedCommand(program3) {
51655
51632
  return;
51656
51633
  }
51657
51634
  print.info(`Preset: ${opts.preset}`);
51658
- print.info("Run the full CLI for interactive questionnaire");
51659
- print.dim("This monorepo command provides the seed subcommand structure");
51635
+ console.log("");
51636
+ print.info("To generate preseed documents and then create SEED.md, run:");
51637
+ console.log("");
51638
+ console.log(" bootspring preseed go # Complete workflow (setup + detect + generate)");
51639
+ console.log(" bootspring preseed merge # Combine preseed docs into SEED.md");
51640
+ console.log("");
51641
+ print.dim("Or run each step individually:");
51642
+ console.log(" bootspring preseed init # Create preseed folder structure");
51643
+ console.log(" bootspring preseed generate # Generate preseed document templates");
51644
+ console.log(" bootspring preseed merge # Merge into SEED.md");
51660
51645
  });
51661
51646
  seed.command("generate").description("Ingest input files and generate documents").action(() => {
51662
51647
  print.header("Seed Generate");
@@ -51689,7 +51674,18 @@ function registerSeedCommand(program3) {
51689
51674
  console.log(` ${cat}: ${count > 0 ? `${count} files` : "none"}`);
51690
51675
  }
51691
51676
  console.log("");
51692
- print.info("Process files through the full CLI for document generation");
51677
+ const totalFiles = Object.values(counts).reduce((a, b) => a + b, 0);
51678
+ if (totalFiles === 0) {
51679
+ print.info("No input files found. You can:");
51680
+ console.log(" 1. Drop files into .bootspring/inputs/ subfolders");
51681
+ console.log(" 2. Or use the preseed workflow instead:");
51682
+ console.log("");
51683
+ console.log(" bootspring preseed go # Complete preseed workflow");
51684
+ } else {
51685
+ print.success(`Found ${totalFiles} input file(s)`);
51686
+ print.info("Next: bootspring preseed generate # Generate preseed documents");
51687
+ print.info("Then: bootspring seed synthesize # Merge into SEED.md");
51688
+ }
51693
51689
  });
51694
51690
  seed.command("scaffold").description("Generate project structure from SEED.md").option("--preset <preset>", "Use preset instead of SEED.md").option("--from-config", "Use bootspring.config.js instead of SEED.md").option("--dry-run", "Show plan without creating files").option("--yes", "Skip confirmation prompt").action((opts) => {
51695
51691
  print.header("Seed Scaffold");
@@ -51730,9 +51726,11 @@ function registerSeedCommand(program3) {
51730
51726
  } else {
51731
51727
  print.dim("bootspring.config.js not found");
51732
51728
  }
51733
- console.log("\nCommands:");
51734
- console.log(" bootspring seed init # Create SEED.md");
51735
- console.log(" bootspring seed scaffold # Generate project structure");
51729
+ console.log("\nComplete Workflow:");
51730
+ console.log(" bootspring preseed go # Step 1: Generate preseed documents");
51731
+ console.log(" (edit .md files) # Step 2: Fill in your project details");
51732
+ console.log(" bootspring seed synthesize # Step 3: Merge into SEED.md");
51733
+ console.log(" bootspring build start # Step 4: Start building");
51736
51734
  });
51737
51735
  seed.command("export").description("Export seed config as JSON/YAML").option("--format <format>", "Output format: json, yaml", "json").option("--output <file>", "Write to file instead of stdout").action((opts) => {
51738
51736
  print.header("Seed Export");
@@ -51764,8 +51762,13 @@ function registerSeedCommand(program3) {
51764
51762
  const seedPath = path35.join(projectRoot, "SEED.md");
51765
51763
  if (!fs33.existsSync(preseedDir)) {
51766
51764
  print.error("No preseed documents found");
51767
- const suggestion = isExistingCodebase(projectRoot) ? "bootspring preseed codebase" : "bootspring preseed start";
51768
- print.info(`Run ${suggestion} first`);
51765
+ console.log("");
51766
+ print.info("Run the complete preseed workflow first:");
51767
+ console.log("");
51768
+ console.log(" bootspring preseed go # Complete workflow (setup + detect + generate)");
51769
+ console.log(" bootspring seed synthesize # Then re-run this command");
51770
+ console.log("");
51771
+ print.dim("Or for existing codebases: bootspring preseed from-codebase");
51769
51772
  return;
51770
51773
  }
51771
51774
  const validDocs = [
@@ -51780,20 +51783,28 @@ function registerSeedCommand(program3) {
51780
51783
  ];
51781
51784
  const preseedFiles = fs33.readdirSync(preseedDir).filter((f) => validDocs.includes(f));
51782
51785
  if (preseedFiles.length === 0) {
51783
- print.error("No preseed documents found");
51784
- print.info('Run "bootspring preseed init" first');
51786
+ print.error("No preseed documents found in .bootspring/preseed/");
51787
+ print.info('Run "bootspring preseed go" to generate them');
51785
51788
  return;
51786
51789
  }
51787
- console.log(`Found ${preseedFiles.length} preseed documents:`);
51788
- for (const file2 of preseedFiles) {
51789
- print.success(file2);
51790
- }
51791
51790
  if (fs33.existsSync(seedPath) && !opts.force) {
51792
51791
  print.warning("SEED.md already exists");
51793
51792
  print.info("Use --force to overwrite");
51794
51793
  return;
51795
51794
  }
51796
- print.info("Synthesis runs through the full CLI for complete SEED.md generation");
51795
+ console.log(`Found ${preseedFiles.length} preseed documents:`);
51796
+ const sections = [];
51797
+ for (const file2 of preseedFiles) {
51798
+ const content = fs33.readFileSync(path35.join(preseedDir, file2), "utf-8");
51799
+ sections.push(content);
51800
+ print.success(` ${file2}`);
51801
+ }
51802
+ const merged = sections.join("\n\n---\n\n");
51803
+ fs33.writeFileSync(seedPath, merged);
51804
+ console.log("");
51805
+ print.success(`Created SEED.md (${preseedFiles.length} documents merged)`);
51806
+ console.log("");
51807
+ print.info("Next: bootspring build start # Transition to build phase");
51797
51808
  });
51798
51809
  seed.command("update").description("Re-run questionnaire, update SEED.md").option("--preset <preset>", "Questionnaire preset").action((opts) => {
51799
51810
  print.header("Seed Update");
@@ -51806,12 +51817,38 @@ function registerSeedCommand(program3) {
51806
51817
  }
51807
51818
  print.info("Update runs through the full CLI for interactive questionnaire");
51808
51819
  });
51809
- seed.command("build").description("Build from seed docs").option("--loop", "Start continuous build loop").option("--iterations <n>", "Max iterations for loop", "50").action((opts) => {
51820
+ seed.command("build").description("Build from seed docs").option("--loop", "Start continuous build loop").option("--iterations <n>", "Max iterations for loop", "50").action(() => {
51810
51821
  print.header("Seed Build");
51811
- if (opts.loop) {
51812
- print.info(`Starting build loop (max ${opts.iterations} iterations)`);
51822
+ const projectRoot = process.cwd();
51823
+ const seedPath = path35.join(projectRoot, "SEED.md");
51824
+ const preseedDir = path35.join(projectRoot, ".bootspring", "preseed");
51825
+ const hasPreseedDocs = fs33.existsSync(preseedDir) && fs33.readdirSync(preseedDir).filter((f) => f.endsWith(".md")).length > 0;
51826
+ if (!fs33.existsSync(seedPath) && !hasPreseedDocs) {
51827
+ print.error("No SEED.md or preseed documents found");
51828
+ console.log("");
51829
+ print.info("Complete workflow to get here:");
51830
+ console.log("");
51831
+ console.log(" Step 1: bootspring preseed go # Generate preseed documents");
51832
+ console.log(" Step 2: (edit the generated .md files in .bootspring/preseed/)");
51833
+ console.log(" Step 3: bootspring seed synthesize # Merge into SEED.md");
51834
+ console.log(" Step 4: bootspring build start # Start building");
51835
+ return;
51813
51836
  }
51814
- print.info("Build runs through the build command pipeline");
51837
+ if (hasPreseedDocs && !fs33.existsSync(seedPath)) {
51838
+ print.info(`Found ${fs33.readdirSync(preseedDir).filter((f) => f.endsWith(".md")).length} preseed documents but no SEED.md`);
51839
+ console.log("");
51840
+ print.info("Next steps:");
51841
+ console.log(" 1. bootspring seed synthesize # Merge preseed docs into SEED.md");
51842
+ console.log(" 2. bootspring build start # Start building");
51843
+ return;
51844
+ }
51845
+ print.success("SEED.md found");
51846
+ console.log("");
51847
+ print.info("To start building, run:");
51848
+ console.log("");
51849
+ console.log(" bootspring build start # Initialize build from seed documents");
51850
+ console.log(" bootspring build next # Get the next task");
51851
+ console.log(" bootspring build status # Check progress");
51815
51852
  });
51816
51853
  seed.action(() => {
51817
51854
  seed.outputHelp();
@@ -390,7 +390,7 @@ interface InstallContext {
390
390
  scriptPath: string;
391
391
  }
392
392
  declare const PACKAGE_NAME = "@girardmedia/bootspring";
393
- declare const CURRENT_VERSION = "2.5.1";
393
+ declare const CURRENT_VERSION = "2.5.3";
394
394
  declare const DEFAULT_INTERVAL_MS: number;
395
395
  declare const STATE_PATH: string;
396
396
  declare function compareVersions(a: string, b: string): number;
package/dist/core.js CHANGED
@@ -372,7 +372,7 @@ var init_release = __esm({
372
372
  "../../packages/shared/src/release.ts"() {
373
373
  "use strict";
374
374
  init_cjs_shims();
375
- BOOTSPRING_VERSION = "2.5.1";
375
+ BOOTSPRING_VERSION = "2.5.3";
376
376
  BOOTSPRING_PACKAGE_NAME = "@girardmedia/bootspring";
377
377
  }
378
378
  });
@@ -21311,7 +21311,7 @@ ${COLORS2.dim}Run "bootspring mcp" for server options${COLORS2.reset}
21311
21311
  console.log(`${COLORS2.dim}Run "bootspring mcp" for setup instructions.${COLORS2.reset}
21312
21312
  `);
21313
21313
  }
21314
- var BOOTSPRING_VERSION2 = "2.5.1";
21314
+ var BOOTSPRING_VERSION2 = "2.5.3";
21315
21315
  var BOOTSPRING_PACKAGE_NAME2 = "@girardmedia/bootspring";
21316
21316
  var REDACTED2 = "[REDACTED]";
21317
21317
  var SENSITIVE_KEY_PATTERN2 = /(?:^|[_-])(api[_-]?key|token|refresh[_-]?token|authorization|x[_-]?api[_-]?key|project[_-]?id)$/i;
@@ -21359,7 +21359,7 @@ var require_package = __commonJS({
21359
21359
  "../../../package.json"(exports2, module2) {
21360
21360
  module2.exports = {
21361
21361
  name: "bootspring-workspace",
21362
- version: "2.5.1",
21362
+ version: "2.5.3",
21363
21363
  private: true,
21364
21364
  description: "Workspace tooling for the Bootspring monorepo",
21365
21365
  keywords: [
@@ -31351,7 +31351,7 @@ var init_release = __esm({
31351
31351
  "../../packages/shared/src/release.ts"() {
31352
31352
  "use strict";
31353
31353
  init_cjs_shims();
31354
- BOOTSPRING_VERSION = "2.5.1";
31354
+ BOOTSPRING_VERSION = "2.5.3";
31355
31355
  BOOTSPRING_PACKAGE_NAME = "@girardmedia/bootspring";
31356
31356
  }
31357
31357
  });
@@ -51934,7 +51934,7 @@ var require_package = __commonJS({
51934
51934
  "../../../package.json"(exports2, module2) {
51935
51935
  module2.exports = {
51936
51936
  name: "bootspring-workspace",
51937
- version: "2.5.1",
51937
+ version: "2.5.3",
51938
51938
  private: true,
51939
51939
  description: "Workspace tooling for the Bootspring monorepo",
51940
51940
  keywords: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@girardmedia/bootspring",
3
- "version": "2.5.2",
3
+ "version": "2.5.3",
4
4
  "description": "Thin client for Bootspring cloud MCP, hosted agents, and paywalled workflow intelligence",
5
5
  "keywords": [
6
6
  "ai",