@girardmedia/bootspring 2.5.5 → 2.5.6
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 +34 -82
- package/dist/core.js +1 -1
- package/dist/mcp-server.js +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -50484,6 +50484,23 @@ function generateDocTemplate(docType, projectName) {
|
|
|
50484
50484
|
*Edit this file with your project details, then run \`bootspring seed status\` to verify.*
|
|
50485
50485
|
`;
|
|
50486
50486
|
}
|
|
50487
|
+
function generateTemplates(contextDir, preset, projectName, force) {
|
|
50488
|
+
const docs = PRESETS[preset] || PRESETS.startup;
|
|
50489
|
+
let generated = 0;
|
|
50490
|
+
let skipped = 0;
|
|
50491
|
+
for (const docType of docs) {
|
|
50492
|
+
const meta3 = CONTEXT_DOCS[docType];
|
|
50493
|
+
if (!meta3) continue;
|
|
50494
|
+
const filePath = path34.join(contextDir, meta3.name);
|
|
50495
|
+
if (fs32.existsSync(filePath) && !force) {
|
|
50496
|
+
skipped++;
|
|
50497
|
+
continue;
|
|
50498
|
+
}
|
|
50499
|
+
fs32.writeFileSync(filePath, generateDocTemplate(docType, projectName));
|
|
50500
|
+
generated++;
|
|
50501
|
+
}
|
|
50502
|
+
return { generated, skipped };
|
|
50503
|
+
}
|
|
50487
50504
|
function detectStack(projectRoot) {
|
|
50488
50505
|
let name = path34.basename(projectRoot);
|
|
50489
50506
|
const stack = [];
|
|
@@ -50536,21 +50553,7 @@ function registerSeedCommand(program3) {
|
|
|
50536
50553
|
if (!fs32.existsSync(readmePath) || opts.force) {
|
|
50537
50554
|
fs32.writeFileSync(readmePath, generateContextReadme());
|
|
50538
50555
|
}
|
|
50539
|
-
const
|
|
50540
|
-
const docs = PRESETS[preset] || PRESETS.startup;
|
|
50541
|
-
let generated = 0;
|
|
50542
|
-
let skipped = 0;
|
|
50543
|
-
for (const docType of docs) {
|
|
50544
|
-
const meta3 = CONTEXT_DOCS[docType];
|
|
50545
|
-
if (!meta3) continue;
|
|
50546
|
-
const filePath = path34.join(contextDir, meta3.name);
|
|
50547
|
-
if (fs32.existsSync(filePath) && !opts.force) {
|
|
50548
|
-
skipped++;
|
|
50549
|
-
continue;
|
|
50550
|
-
}
|
|
50551
|
-
fs32.writeFileSync(filePath, generateDocTemplate(docType, projectName));
|
|
50552
|
-
generated++;
|
|
50553
|
-
}
|
|
50556
|
+
const { generated, skipped } = generateTemplates(contextDir, opts.preset, projectName, !!opts.force);
|
|
50554
50557
|
print.success(`Created ${CONTEXT_DIR}/`);
|
|
50555
50558
|
if (generated > 0) print.success(`Generated ${generated} document template(s)`);
|
|
50556
50559
|
if (skipped > 0) print.dim(`Skipped ${skipped} (already exist, use --force to overwrite)`);
|
|
@@ -50578,28 +50581,14 @@ function registerSeedCommand(program3) {
|
|
|
50578
50581
|
if (!fs32.existsSync(readmePath)) {
|
|
50579
50582
|
fs32.writeFileSync(readmePath, generateContextReadme());
|
|
50580
50583
|
}
|
|
50581
|
-
const
|
|
50582
|
-
const docs = PRESETS[preset] || PRESETS.startup;
|
|
50583
|
-
let generated = 0;
|
|
50584
|
-
let skipped = 0;
|
|
50585
|
-
for (const docType of docs) {
|
|
50586
|
-
const meta3 = CONTEXT_DOCS[docType];
|
|
50587
|
-
if (!meta3) continue;
|
|
50588
|
-
const filePath = path34.join(contextDir, meta3.name);
|
|
50589
|
-
if (fs32.existsSync(filePath) && !opts.force) {
|
|
50590
|
-
skipped++;
|
|
50591
|
-
continue;
|
|
50592
|
-
}
|
|
50593
|
-
fs32.writeFileSync(filePath, generateDocTemplate(docType, projectName));
|
|
50594
|
-
generated++;
|
|
50595
|
-
}
|
|
50584
|
+
const { generated, skipped } = generateTemplates(contextDir, opts.preset, projectName, !!opts.force);
|
|
50596
50585
|
if (generated > 0) print.success(` Generated: ${generated} template(s)`);
|
|
50597
50586
|
if (skipped > 0) print.dim(` Skipped: ${skipped} (already exist, use --force to overwrite)`);
|
|
50598
50587
|
console.log("");
|
|
50599
50588
|
console.log(`${COLORS.bold}Step 3/3: Status${COLORS.reset}`);
|
|
50600
50589
|
const status = getContextStatus();
|
|
50601
50590
|
for (const doc of status.docs) {
|
|
50602
|
-
console.log(` \u2713 ${doc}`);
|
|
50591
|
+
console.log(` ${COLORS.green}\u2713${COLORS.reset} ${doc}`);
|
|
50603
50592
|
}
|
|
50604
50593
|
console.log("");
|
|
50605
50594
|
console.log(`${COLORS.bold}Next:${COLORS.reset}`);
|
|
@@ -50633,16 +50622,7 @@ ${COLORS.bold}Detected Features:${COLORS.reset}`);
|
|
|
50633
50622
|
console.log(` ${features.join(", ")}`);
|
|
50634
50623
|
}
|
|
50635
50624
|
const contextDir = ensureContextDir();
|
|
50636
|
-
const
|
|
50637
|
-
let generated = 0;
|
|
50638
|
-
for (const docType of docs) {
|
|
50639
|
-
const meta3 = CONTEXT_DOCS[docType];
|
|
50640
|
-
if (!meta3) continue;
|
|
50641
|
-
const filePath = path34.join(contextDir, meta3.name);
|
|
50642
|
-
if (fs32.existsSync(filePath) && !opts.force) continue;
|
|
50643
|
-
fs32.writeFileSync(filePath, generateDocTemplate(docType, projectName));
|
|
50644
|
-
generated++;
|
|
50645
|
-
}
|
|
50625
|
+
const { generated } = generateTemplates(contextDir, opts.preset, projectName, !!opts.force);
|
|
50646
50626
|
console.log("");
|
|
50647
50627
|
print.success(`Generated ${generated} template(s) in ${CONTEXT_DIR}/`);
|
|
50648
50628
|
console.log("");
|
|
@@ -50693,21 +50673,10 @@ ${COLORS.bold}Detected Features:${COLORS.reset}`);
|
|
|
50693
50673
|
projectName = pkg.name || projectName;
|
|
50694
50674
|
} catch {
|
|
50695
50675
|
}
|
|
50696
|
-
const
|
|
50697
|
-
|
|
50698
|
-
|
|
50699
|
-
|
|
50700
|
-
const meta3 = CONTEXT_DOCS[docType];
|
|
50701
|
-
if (!meta3) continue;
|
|
50702
|
-
const filePath = path34.join(contextDir, meta3.name);
|
|
50703
|
-
if (fs32.existsSync(filePath) && !opts.force) {
|
|
50704
|
-
skipped++;
|
|
50705
|
-
print.dim(` Skipped: ${meta3.name} (exists)`);
|
|
50706
|
-
continue;
|
|
50707
|
-
}
|
|
50708
|
-
fs32.writeFileSync(filePath, generateDocTemplate(docType, projectName));
|
|
50709
|
-
print.success(` Generated: ${meta3.name}`);
|
|
50710
|
-
generated++;
|
|
50676
|
+
const { generated, skipped } = generateTemplates(contextDir, opts.preset, projectName, !!opts.force);
|
|
50677
|
+
const status = getContextStatus();
|
|
50678
|
+
for (const doc of status.docs) {
|
|
50679
|
+
print.success(` ${doc}`);
|
|
50711
50680
|
}
|
|
50712
50681
|
console.log("");
|
|
50713
50682
|
print.info(`${generated} generated, ${skipped} skipped in ${CONTEXT_DIR}/`);
|
|
@@ -50813,21 +50782,6 @@ ${COLORS.bold}Detected Features:${COLORS.reset}`);
|
|
|
50813
50782
|
console.log(" bootspring build next # Get next task");
|
|
50814
50783
|
console.log(" bootspring build status # Check progress");
|
|
50815
50784
|
});
|
|
50816
|
-
seed.command("scaffold").description("Generate project structure from SEED.md").option("--preset <preset>", "Use preset instead of SEED.md").option("--dry-run", "Show plan without creating files").action((opts) => {
|
|
50817
|
-
print.header("Seed Scaffold");
|
|
50818
|
-
const seedPath = path34.join(process.cwd(), "SEED.md");
|
|
50819
|
-
if (!opts.preset && !fs32.existsSync(seedPath)) {
|
|
50820
|
-
print.error("No SEED.md found");
|
|
50821
|
-
print.info("Run `bootspring seed merge` first");
|
|
50822
|
-
return;
|
|
50823
|
-
}
|
|
50824
|
-
if (opts.dryRun) {
|
|
50825
|
-
print.info("[DRY RUN] No files will be created");
|
|
50826
|
-
}
|
|
50827
|
-
print.info("Scaffold runs through `bootspring build start`");
|
|
50828
|
-
console.log("");
|
|
50829
|
-
console.log(" bootspring build start # Initialize build from SEED.md");
|
|
50830
|
-
});
|
|
50831
50785
|
seed.action(() => {
|
|
50832
50786
|
seed.outputHelp();
|
|
50833
50787
|
console.log("");
|
|
@@ -54737,7 +54691,7 @@ function drawProgressBar(progress, width = 20) {
|
|
|
54737
54691
|
}
|
|
54738
54692
|
function getWorkflowStates(projectRoot) {
|
|
54739
54693
|
const workflows = {};
|
|
54740
|
-
const names = ["onboard", "analyze", "audit", "
|
|
54694
|
+
const names = ["onboard", "analyze", "audit", "seed", "context", "deploy", "loop", "preseed"];
|
|
54741
54695
|
for (const name of names) {
|
|
54742
54696
|
const stateFile = path46.join(projectRoot, ".bootspring", name, "workflow-state.json");
|
|
54743
54697
|
if (fs44.existsSync(stateFile)) {
|
|
@@ -54800,7 +54754,7 @@ function getTodoStats(projectRoot) {
|
|
|
54800
54754
|
}
|
|
54801
54755
|
}
|
|
54802
54756
|
function drawWorkflowPipeline(workflows) {
|
|
54803
|
-
const pipelineOrder = ["onboard", "
|
|
54757
|
+
const pipelineOrder = ["onboard", "seed", "analyze", "audit", "deploy"];
|
|
54804
54758
|
console.log("\nWorkflow Pipeline\n");
|
|
54805
54759
|
for (const name of pipelineOrder) {
|
|
54806
54760
|
const workflow = workflows[name];
|
|
@@ -54903,12 +54857,10 @@ function registerVisualizeCommand(program3) {
|
|
|
54903
54857
|
console.log(" onboard");
|
|
54904
54858
|
console.log(" |");
|
|
54905
54859
|
console.log(" v");
|
|
54906
|
-
console.log("
|
|
54907
|
-
console.log(" |
|
|
54908
|
-
console.log("
|
|
54909
|
-
console.log("
|
|
54910
|
-
console.log(" v");
|
|
54911
|
-
console.log(" analyze");
|
|
54860
|
+
console.log(" seed");
|
|
54861
|
+
console.log(" |");
|
|
54862
|
+
console.log(" v");
|
|
54863
|
+
console.log(" analyze");
|
|
54912
54864
|
console.log(" |");
|
|
54913
54865
|
console.log(" v");
|
|
54914
54866
|
console.log(" audit");
|
|
@@ -60979,7 +60931,7 @@ init_cjs_shims();
|
|
|
60979
60931
|
var fs80 = __toESM(require("fs"));
|
|
60980
60932
|
var path81 = __toESM(require("path"));
|
|
60981
60933
|
init_src();
|
|
60982
|
-
function
|
|
60934
|
+
function findContextDocs(projectRoot) {
|
|
60983
60935
|
let dir = path81.join(projectRoot, ".bootspring", "context");
|
|
60984
60936
|
if (!fs80.existsSync(dir)) {
|
|
60985
60937
|
dir = path81.join(projectRoot, ".bootspring", "preseed");
|
|
@@ -61004,7 +60956,7 @@ function findPreseedDocs(projectRoot) {
|
|
|
61004
60956
|
return { found, missing, dir };
|
|
61005
60957
|
}
|
|
61006
60958
|
function validateDocCoherence(projectRoot) {
|
|
61007
|
-
const { found, missing } =
|
|
60959
|
+
const { found, missing } = findContextDocs(projectRoot);
|
|
61008
60960
|
const issues = [];
|
|
61009
60961
|
const totalExpected = found.length + missing.length;
|
|
61010
60962
|
let score = totalExpected > 0 ? Math.round(found.length / totalExpected * 100) : 0;
|
|
@@ -61024,7 +60976,7 @@ function validateDocCoherence(projectRoot) {
|
|
|
61024
60976
|
});
|
|
61025
60977
|
score = Math.max(score - 10, 0);
|
|
61026
60978
|
}
|
|
61027
|
-
const { dir: docsDir } =
|
|
60979
|
+
const { dir: docsDir } = findContextDocs(projectRoot);
|
|
61028
60980
|
const docContents = {};
|
|
61029
60981
|
for (const doc of found) {
|
|
61030
60982
|
try {
|
package/dist/core.js
CHANGED
|
@@ -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.
|
|
21362
|
+
version: "2.5.5",
|
|
21363
21363
|
private: true,
|
|
21364
21364
|
description: "Workspace tooling for the Bootspring monorepo",
|
|
21365
21365
|
keywords: [
|
package/dist/mcp-server.js
CHANGED
|
@@ -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.
|
|
51937
|
+
version: "2.5.5",
|
|
51938
51938
|
private: true,
|
|
51939
51939
|
description: "Workspace tooling for the Bootspring monorepo",
|
|
51940
51940
|
keywords: [
|