@girardmedia/bootspring 2.3.1 → 2.3.2
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.cjs +122 -42
- package/dist/core.js +1 -1
- package/dist/mcp-server.js +5 -2
- package/package.json +1 -1
package/dist/cli/index.cjs
CHANGED
|
@@ -7697,6 +7697,8 @@ function registerBuildCommand(program3) {
|
|
|
7697
7697
|
init_cjs_shims();
|
|
7698
7698
|
var fs8 = __toESM(require("fs"), 1);
|
|
7699
7699
|
var path9 = __toESM(require("path"), 1);
|
|
7700
|
+
var os3 = __toESM(require("os"), 1);
|
|
7701
|
+
var import_child_process2 = require("child_process");
|
|
7700
7702
|
init_dist();
|
|
7701
7703
|
init_dist2();
|
|
7702
7704
|
function registerHealthCommand(program3) {
|
|
@@ -7744,6 +7746,85 @@ function registerHealthCommand(program3) {
|
|
|
7744
7746
|
} else {
|
|
7745
7747
|
checks.push({ name: "AI Context", status: "warn", message: "Run `bootspring generate` to create CLAUDE.md" });
|
|
7746
7748
|
}
|
|
7749
|
+
const homeDir = os3.homedir();
|
|
7750
|
+
const projectMcp = path9.join(cwd, ".mcp.json");
|
|
7751
|
+
const globalSettings = path9.join(homeDir, ".claude", "settings.json");
|
|
7752
|
+
if (fs8.existsSync(projectMcp)) {
|
|
7753
|
+
try {
|
|
7754
|
+
const mcpConfig = JSON.parse(fs8.readFileSync(projectMcp, "utf-8"));
|
|
7755
|
+
if (mcpConfig.mcpServers?.bootspring) {
|
|
7756
|
+
const cmd = mcpConfig.mcpServers.bootspring.command;
|
|
7757
|
+
const args = mcpConfig.mcpServers.bootspring.args || [];
|
|
7758
|
+
checks.push({ name: "MCP Config (project)", status: "pass", message: `${cmd} ${args.join(" ")}` });
|
|
7759
|
+
} else {
|
|
7760
|
+
checks.push({ name: "MCP Config (project)", status: "warn", message: ".mcp.json exists but no bootspring server entry" });
|
|
7761
|
+
}
|
|
7762
|
+
} catch {
|
|
7763
|
+
checks.push({ name: "MCP Config (project)", status: "fail", message: ".mcp.json is invalid JSON" });
|
|
7764
|
+
}
|
|
7765
|
+
} else if (fs8.existsSync(globalSettings)) {
|
|
7766
|
+
try {
|
|
7767
|
+
const settings = JSON.parse(fs8.readFileSync(globalSettings, "utf-8"));
|
|
7768
|
+
if (settings.mcpServers?.bootspring) {
|
|
7769
|
+
checks.push({ name: "MCP Config (global)", status: "pass", message: "Bootspring MCP in ~/.claude/settings.json" });
|
|
7770
|
+
} else {
|
|
7771
|
+
checks.push({ name: "MCP Config", status: "warn", message: "No bootspring MCP server configured. Run `bootspring doctor --fix-claude-config`" });
|
|
7772
|
+
}
|
|
7773
|
+
} catch {
|
|
7774
|
+
checks.push({ name: "MCP Config (global)", status: "fail", message: "~/.claude/settings.json is invalid JSON" });
|
|
7775
|
+
}
|
|
7776
|
+
} else {
|
|
7777
|
+
checks.push({ name: "MCP Config", status: "fail", message: "No MCP config found. Run `bootspring doctor --fix-claude-config`" });
|
|
7778
|
+
}
|
|
7779
|
+
try {
|
|
7780
|
+
const result = (0, import_child_process2.execSync)(
|
|
7781
|
+
`echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"health","version":"1.0.0"}}}' | bootspring mcp 2>/dev/null | head -1`,
|
|
7782
|
+
{ timeout: 1e4, encoding: "utf-8" }
|
|
7783
|
+
).trim();
|
|
7784
|
+
if (result) {
|
|
7785
|
+
const parsed = JSON.parse(result);
|
|
7786
|
+
if (parsed.result?.serverInfo) {
|
|
7787
|
+
checks.push({ name: "MCP Server", status: "pass", message: `${parsed.result.serverInfo.name} v${parsed.result.serverInfo.version}` });
|
|
7788
|
+
} else {
|
|
7789
|
+
checks.push({ name: "MCP Server", status: "fail", message: "Server responded but no serverInfo" });
|
|
7790
|
+
}
|
|
7791
|
+
} else {
|
|
7792
|
+
checks.push({ name: "MCP Server", status: "fail", message: "No response from MCP server (stdout may be corrupted)" });
|
|
7793
|
+
}
|
|
7794
|
+
} catch {
|
|
7795
|
+
checks.push({ name: "MCP Server", status: "fail", message: "MCP server failed to start. Check `bootspring mcp status`" });
|
|
7796
|
+
}
|
|
7797
|
+
if (auth_exports.isAuthenticated()) {
|
|
7798
|
+
checks.push({ name: "Authentication", status: "pass", message: "Logged in" });
|
|
7799
|
+
} else {
|
|
7800
|
+
checks.push({ name: "Authentication", status: "warn", message: "Not logged in. Run `bootspring auth login`" });
|
|
7801
|
+
}
|
|
7802
|
+
const skillFile = path9.join(homeDir, ".claude", "skills", "bootspring", "SKILL.md");
|
|
7803
|
+
const commandsDir = path9.join(homeDir, ".claude", "commands");
|
|
7804
|
+
if (fs8.existsSync(skillFile)) {
|
|
7805
|
+
checks.push({ name: "Bootspring Skill", status: "pass", message: "SKILL.md installed" });
|
|
7806
|
+
} else {
|
|
7807
|
+
checks.push({ name: "Bootspring Skill", status: "warn", message: "Not installed. Run `bootspring doctor setup`" });
|
|
7808
|
+
}
|
|
7809
|
+
if (fs8.existsSync(path9.join(commandsDir, "build.md"))) {
|
|
7810
|
+
checks.push({ name: "Slash Commands", status: "pass", message: "Installed" });
|
|
7811
|
+
} else {
|
|
7812
|
+
checks.push({ name: "Slash Commands", status: "warn", message: "Not installed. Run `bootspring doctor setup`" });
|
|
7813
|
+
}
|
|
7814
|
+
const buildStatePath = path9.join(cwd, "planning", "BUILD_STATE.json");
|
|
7815
|
+
const todoPath = path9.join(cwd, "planning", "TODO.md");
|
|
7816
|
+
if (fs8.existsSync(buildStatePath)) {
|
|
7817
|
+
try {
|
|
7818
|
+
const state = JSON.parse(fs8.readFileSync(buildStatePath, "utf-8"));
|
|
7819
|
+
const total = state.implementationQueue?.length || 0;
|
|
7820
|
+
const done = state.implementationQueue?.filter((t) => t.status === "completed").length || 0;
|
|
7821
|
+
checks.push({ name: "Build State", status: "pass", message: `${done}/${total} tasks complete` });
|
|
7822
|
+
} catch {
|
|
7823
|
+
checks.push({ name: "Build State", status: "warn", message: "BUILD_STATE.json exists but is invalid" });
|
|
7824
|
+
}
|
|
7825
|
+
} else if (fs8.existsSync(todoPath)) {
|
|
7826
|
+
checks.push({ name: "Build Plan", status: "pass", message: "TODO.md present (no BUILD_STATE.json yet)" });
|
|
7827
|
+
}
|
|
7747
7828
|
}
|
|
7748
7829
|
if (!opts.local) {
|
|
7749
7830
|
try {
|
|
@@ -7917,9 +7998,9 @@ function registerDashboardCommand(program3) {
|
|
|
7917
7998
|
}
|
|
7918
7999
|
}
|
|
7919
8000
|
try {
|
|
7920
|
-
const { execSync:
|
|
7921
|
-
const branch =
|
|
7922
|
-
const commitCount =
|
|
8001
|
+
const { execSync: execSync10 } = await import("child_process");
|
|
8002
|
+
const branch = execSync10("git rev-parse --abbrev-ref HEAD", { cwd, encoding: "utf-8" }).trim();
|
|
8003
|
+
const commitCount = execSync10("git rev-list --count HEAD", { cwd, encoding: "utf-8" }).trim();
|
|
7923
8004
|
print.info(`Branch: ${branch} (${commitCount} commits)`);
|
|
7924
8005
|
} catch {
|
|
7925
8006
|
print.dim("Git: not available");
|
|
@@ -9117,7 +9198,7 @@ function registerDeployCommand(program3) {
|
|
|
9117
9198
|
|
|
9118
9199
|
// src/commands/quality.ts
|
|
9119
9200
|
init_cjs_shims();
|
|
9120
|
-
var
|
|
9201
|
+
var import_child_process3 = require("child_process");
|
|
9121
9202
|
var fs15 = __toESM(require("fs"), 1);
|
|
9122
9203
|
var path16 = __toESM(require("path"), 1);
|
|
9123
9204
|
init_dist();
|
|
@@ -9208,7 +9289,7 @@ function resolveCommand(check) {
|
|
|
9208
9289
|
function runCheck(check) {
|
|
9209
9290
|
const command = resolveCommand(check);
|
|
9210
9291
|
try {
|
|
9211
|
-
const output = (0,
|
|
9292
|
+
const output = (0, import_child_process3.execSync)(command, {
|
|
9212
9293
|
cwd: process.cwd(),
|
|
9213
9294
|
encoding: "utf-8",
|
|
9214
9295
|
stdio: ["pipe", "pipe", "pipe"],
|
|
@@ -9380,7 +9461,7 @@ function registerQualityCommand(program3) {
|
|
|
9380
9461
|
|
|
9381
9462
|
// src/commands/security.ts
|
|
9382
9463
|
init_cjs_shims();
|
|
9383
|
-
var
|
|
9464
|
+
var import_child_process4 = require("child_process");
|
|
9384
9465
|
var fs16 = __toESM(require("fs"), 1);
|
|
9385
9466
|
var path17 = __toESM(require("path"), 1);
|
|
9386
9467
|
init_dist();
|
|
@@ -9443,7 +9524,7 @@ function runDependencyAudit() {
|
|
|
9443
9524
|
return summary;
|
|
9444
9525
|
}
|
|
9445
9526
|
try {
|
|
9446
|
-
const output = (0,
|
|
9527
|
+
const output = (0, import_child_process4.execSync)("npm audit --json 2>/dev/null || true", {
|
|
9447
9528
|
cwd,
|
|
9448
9529
|
encoding: "utf-8",
|
|
9449
9530
|
maxBuffer: 10 * 1024 * 1024
|
|
@@ -9604,7 +9685,7 @@ function registerSecurityCommand(program3) {
|
|
|
9604
9685
|
|
|
9605
9686
|
// src/commands/doctor.ts
|
|
9606
9687
|
init_cjs_shims();
|
|
9607
|
-
var
|
|
9688
|
+
var import_child_process5 = require("child_process");
|
|
9608
9689
|
var fs17 = __toESM(require("fs"), 1);
|
|
9609
9690
|
var path18 = __toESM(require("path"), 1);
|
|
9610
9691
|
init_dist();
|
|
@@ -9649,7 +9730,7 @@ function checkNodeVersion() {
|
|
|
9649
9730
|
}
|
|
9650
9731
|
function checkNpmVersion() {
|
|
9651
9732
|
try {
|
|
9652
|
-
const version = (0,
|
|
9733
|
+
const version = (0, import_child_process5.execSync)("npm --version", { encoding: "utf-8" }).trim();
|
|
9653
9734
|
const major = parseInt(version.split(".")[0], 10);
|
|
9654
9735
|
if (major >= 9) {
|
|
9655
9736
|
return { status: "pass", detail: `npm ${version}` };
|
|
@@ -9669,7 +9750,7 @@ function checkNpmVersion() {
|
|
|
9669
9750
|
}
|
|
9670
9751
|
function checkPnpmVersion() {
|
|
9671
9752
|
try {
|
|
9672
|
-
const version = (0,
|
|
9753
|
+
const version = (0, import_child_process5.execSync)("pnpm --version", { encoding: "utf-8" }).trim();
|
|
9673
9754
|
return { status: "pass", detail: `pnpm ${version}` };
|
|
9674
9755
|
} catch {
|
|
9675
9756
|
return {
|
|
@@ -9681,7 +9762,7 @@ function checkPnpmVersion() {
|
|
|
9681
9762
|
}
|
|
9682
9763
|
function checkGitInstallation() {
|
|
9683
9764
|
try {
|
|
9684
|
-
const version = (0,
|
|
9765
|
+
const version = (0, import_child_process5.execSync)("git --version", { encoding: "utf-8" }).trim();
|
|
9685
9766
|
return { status: "pass", detail: version };
|
|
9686
9767
|
} catch {
|
|
9687
9768
|
return {
|
|
@@ -9695,7 +9776,7 @@ function checkGitRepo() {
|
|
|
9695
9776
|
const cwd = process.cwd();
|
|
9696
9777
|
if (fs17.existsSync(path18.join(cwd, ".git"))) {
|
|
9697
9778
|
try {
|
|
9698
|
-
const branch = (0,
|
|
9779
|
+
const branch = (0, import_child_process5.execSync)("git branch --show-current", {
|
|
9699
9780
|
cwd,
|
|
9700
9781
|
encoding: "utf-8"
|
|
9701
9782
|
}).trim();
|
|
@@ -9751,7 +9832,7 @@ function checkDependencies() {
|
|
|
9751
9832
|
}
|
|
9752
9833
|
function checkDiskSpace() {
|
|
9753
9834
|
try {
|
|
9754
|
-
const output = (0,
|
|
9835
|
+
const output = (0, import_child_process5.execSync)("df -h . | tail -1", { encoding: "utf-8" }).trim();
|
|
9755
9836
|
const parts = output.split(/\s+/);
|
|
9756
9837
|
const available = parts[3] || "unknown";
|
|
9757
9838
|
const usePercent = parts[4] || "unknown";
|
|
@@ -9780,7 +9861,7 @@ function checkTypeScript() {
|
|
|
9780
9861
|
return { status: "warn", detail: "No tsconfig.json found (not a TypeScript project)" };
|
|
9781
9862
|
}
|
|
9782
9863
|
try {
|
|
9783
|
-
const version = (0,
|
|
9864
|
+
const version = (0, import_child_process5.execSync)("npx tsc --version", {
|
|
9784
9865
|
cwd,
|
|
9785
9866
|
encoding: "utf-8",
|
|
9786
9867
|
timeout: 1e4
|
|
@@ -11494,7 +11575,7 @@ function registerDocsCommand(program3) {
|
|
|
11494
11575
|
init_cjs_shims();
|
|
11495
11576
|
var fs25 = __toESM(require("fs"), 1);
|
|
11496
11577
|
var path26 = __toESM(require("path"), 1);
|
|
11497
|
-
var
|
|
11578
|
+
var import_child_process6 = require("child_process");
|
|
11498
11579
|
init_dist();
|
|
11499
11580
|
var WORKSPACE_DIR = ".bootspring-workspace";
|
|
11500
11581
|
var WORKSPACE_FILE = "workspace.json";
|
|
@@ -11698,7 +11779,7 @@ function registerWorkspaceCommand(program3) {
|
|
|
11698
11779
|
for (const project of projects) {
|
|
11699
11780
|
const spinner = createSpinner(`${project.name}...`).start();
|
|
11700
11781
|
try {
|
|
11701
|
-
(0,
|
|
11782
|
+
(0, import_child_process6.execSync)(`bootspring ${workflowName}`, {
|
|
11702
11783
|
cwd: project.absolutePath,
|
|
11703
11784
|
encoding: "utf-8",
|
|
11704
11785
|
timeout: parseInt(opts.timeout, 10),
|
|
@@ -12018,7 +12099,7 @@ function registerOrgCommand(program3) {
|
|
|
12018
12099
|
init_cjs_shims();
|
|
12019
12100
|
var fs26 = __toESM(require("fs"), 1);
|
|
12020
12101
|
var path27 = __toESM(require("path"), 1);
|
|
12021
|
-
var
|
|
12102
|
+
var import_child_process7 = require("child_process");
|
|
12022
12103
|
init_dist();
|
|
12023
12104
|
var MONITORING_PROVIDERS = {
|
|
12024
12105
|
sentry: {
|
|
@@ -12126,7 +12207,7 @@ function collectMetrics(projectRoot) {
|
|
|
12126
12207
|
const dirPath = path27.join(projectRoot, dir);
|
|
12127
12208
|
if (fs26.existsSync(dirPath)) {
|
|
12128
12209
|
try {
|
|
12129
|
-
const output = (0,
|
|
12210
|
+
const output = (0, import_child_process7.execSync)(`du -sk "${dirPath}"`, {
|
|
12130
12211
|
cwd: projectRoot,
|
|
12131
12212
|
encoding: "utf-8",
|
|
12132
12213
|
stdio: ["pipe", "pipe", "pipe"]
|
|
@@ -14349,7 +14430,7 @@ Generated: ${(/* @__PURE__ */ new Date()).toISOString()}`);
|
|
|
14349
14430
|
init_cjs_shims();
|
|
14350
14431
|
var fs35 = __toESM(require("fs"), 1);
|
|
14351
14432
|
var path36 = __toESM(require("path"), 1);
|
|
14352
|
-
var
|
|
14433
|
+
var import_child_process8 = require("child_process");
|
|
14353
14434
|
init_dist();
|
|
14354
14435
|
function getConnectionPath() {
|
|
14355
14436
|
return path36.join(process.cwd(), ".bootspring", "github.json");
|
|
@@ -14375,7 +14456,7 @@ function saveConnection(conn) {
|
|
|
14375
14456
|
}
|
|
14376
14457
|
function isGhInstalled() {
|
|
14377
14458
|
try {
|
|
14378
|
-
(0,
|
|
14459
|
+
(0, import_child_process8.execSync)("gh --version", { stdio: "pipe" });
|
|
14379
14460
|
return true;
|
|
14380
14461
|
} catch {
|
|
14381
14462
|
return false;
|
|
@@ -14383,7 +14464,7 @@ function isGhInstalled() {
|
|
|
14383
14464
|
}
|
|
14384
14465
|
function isGhAuthenticated() {
|
|
14385
14466
|
try {
|
|
14386
|
-
(0,
|
|
14467
|
+
(0, import_child_process8.execSync)("gh auth status", { stdio: "pipe" });
|
|
14387
14468
|
return true;
|
|
14388
14469
|
} catch {
|
|
14389
14470
|
return false;
|
|
@@ -14391,7 +14472,7 @@ function isGhAuthenticated() {
|
|
|
14391
14472
|
}
|
|
14392
14473
|
function detectRepoFromGit() {
|
|
14393
14474
|
try {
|
|
14394
|
-
const remote = (0,
|
|
14475
|
+
const remote = (0, import_child_process8.execSync)("git remote get-url origin", { stdio: "pipe" }).toString().trim();
|
|
14395
14476
|
const httpsMatch = remote.match(/github\.com\/([^/]+)\/([^/.]+)/);
|
|
14396
14477
|
const sshMatch = remote.match(/github\.com:([^/]+)\/([^/.]+)/);
|
|
14397
14478
|
const match = httpsMatch || sshMatch;
|
|
@@ -14408,7 +14489,7 @@ function detectRepoFromGit() {
|
|
|
14408
14489
|
}
|
|
14409
14490
|
function getRecentCommits(limit = 5) {
|
|
14410
14491
|
try {
|
|
14411
|
-
const log = (0,
|
|
14492
|
+
const log = (0, import_child_process8.execSync)(
|
|
14412
14493
|
`git log --oneline --format="%H|%s|%an|%ai" -${limit}`,
|
|
14413
14494
|
{ stdio: "pipe" }
|
|
14414
14495
|
).toString().trim();
|
|
@@ -16459,7 +16540,7 @@ function registerLearnCommand(program3) {
|
|
|
16459
16540
|
|
|
16460
16541
|
// src/commands/memory.ts
|
|
16461
16542
|
init_cjs_shims();
|
|
16462
|
-
var
|
|
16543
|
+
var import_child_process9 = require("child_process");
|
|
16463
16544
|
init_dist();
|
|
16464
16545
|
var MEMORY_CATEGORIES = {
|
|
16465
16546
|
bugfix: { icon: "\u{1F41B}", label: "Bug Fixes", patterns: [/^fix/i, /^bugfix/i, /\bfix\b/i] },
|
|
@@ -16475,7 +16556,7 @@ var MEMORY_CATEGORIES = {
|
|
|
16475
16556
|
};
|
|
16476
16557
|
function isGitRepo() {
|
|
16477
16558
|
try {
|
|
16478
|
-
(0,
|
|
16559
|
+
(0, import_child_process9.execSync)("git rev-parse --is-inside-work-tree", { encoding: "utf-8", stdio: "pipe" });
|
|
16479
16560
|
return true;
|
|
16480
16561
|
} catch {
|
|
16481
16562
|
return false;
|
|
@@ -16499,9 +16580,8 @@ function extractLearnings(options = {}) {
|
|
|
16499
16580
|
return { learnings: [], total: 0, error: "Not a git repository" };
|
|
16500
16581
|
}
|
|
16501
16582
|
try {
|
|
16502
|
-
const format = "--format=%H|%s|%ai";
|
|
16503
16583
|
const sinceFlag = since ? `--since="${since}"` : "";
|
|
16504
|
-
const output = (0,
|
|
16584
|
+
const output = (0, import_child_process9.execSync)(`git log --format='%H|%s|%ai' ${sinceFlag} -n ${limit}`, {
|
|
16505
16585
|
encoding: "utf-8",
|
|
16506
16586
|
stdio: ["pipe", "pipe", "pipe"]
|
|
16507
16587
|
}).trim();
|
|
@@ -16540,15 +16620,15 @@ function groupByCategory(learnings) {
|
|
|
16540
16620
|
function getRepoStats() {
|
|
16541
16621
|
if (!isGitRepo()) return null;
|
|
16542
16622
|
try {
|
|
16543
|
-
const totalOutput = (0,
|
|
16623
|
+
const totalOutput = (0, import_child_process9.execSync)("git rev-list --count HEAD", { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }).trim();
|
|
16544
16624
|
const totalCommits = parseInt(totalOutput, 10) || 0;
|
|
16545
|
-
const contributorsOutput = (0,
|
|
16625
|
+
const contributorsOutput = (0, import_child_process9.execSync)("git shortlog -sn --all", { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }).trim();
|
|
16546
16626
|
const contributors = contributorsOutput.split("\n").filter(Boolean).length;
|
|
16547
|
-
const weeklyOutput = (0,
|
|
16627
|
+
const weeklyOutput = (0, import_child_process9.execSync)('git rev-list --count --since="1 week ago" HEAD', { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }).trim();
|
|
16548
16628
|
const weeklyPace = parseInt(weeklyOutput, 10) || 0;
|
|
16549
16629
|
let firstCommit;
|
|
16550
16630
|
try {
|
|
16551
|
-
firstCommit = (0,
|
|
16631
|
+
firstCommit = (0, import_child_process9.execSync)("git log --reverse --format=%ai | head -1", { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }).trim();
|
|
16552
16632
|
} catch {
|
|
16553
16633
|
}
|
|
16554
16634
|
return { totalCommits, contributors, weeklyPace, firstCommit };
|
|
@@ -16647,7 +16727,7 @@ function registerMemoryCommand(program3) {
|
|
|
16647
16727
|
}
|
|
16648
16728
|
try {
|
|
16649
16729
|
const limit = parseInt(opts.limit, 10) || 50;
|
|
16650
|
-
const output = (0,
|
|
16730
|
+
const output = (0, import_child_process9.execSync)(`git log --name-only --format="" -n ${limit}`, {
|
|
16651
16731
|
encoding: "utf-8",
|
|
16652
16732
|
stdio: ["pipe", "pipe", "pipe"]
|
|
16653
16733
|
}).trim();
|
|
@@ -17619,7 +17699,7 @@ function registerPreseedFromCodebaseCommand(program3) {
|
|
|
17619
17699
|
init_cjs_shims();
|
|
17620
17700
|
var fs45 = __toESM(require("fs"), 1);
|
|
17621
17701
|
var path46 = __toESM(require("path"), 1);
|
|
17622
|
-
var
|
|
17702
|
+
var os4 = __toESM(require("os"), 1);
|
|
17623
17703
|
init_dist();
|
|
17624
17704
|
function detectEnvironment() {
|
|
17625
17705
|
return {
|
|
@@ -17627,7 +17707,7 @@ function detectEnvironment() {
|
|
|
17627
17707
|
isVSCode: !!process.env["VSCODE_PID"] || (process.env["TERM_PROGRAM"] || "").includes("vscode"),
|
|
17628
17708
|
isCursor: !!process.env["CURSOR_TRACE_ID"],
|
|
17629
17709
|
isInteractive: !!(process.stdin.isTTY && process.stdout.isTTY),
|
|
17630
|
-
platform:
|
|
17710
|
+
platform: os4.platform()
|
|
17631
17711
|
};
|
|
17632
17712
|
}
|
|
17633
17713
|
function detectProjectContext(projectRoot) {
|
|
@@ -18083,7 +18163,7 @@ function registerTaskCommand(program3) {
|
|
|
18083
18163
|
|
|
18084
18164
|
// src/commands/update.ts
|
|
18085
18165
|
init_cjs_shims();
|
|
18086
|
-
var
|
|
18166
|
+
var import_child_process10 = require("child_process");
|
|
18087
18167
|
var fs47 = __toESM(require("fs"), 1);
|
|
18088
18168
|
var path48 = __toESM(require("path"), 1);
|
|
18089
18169
|
init_dist();
|
|
@@ -18101,7 +18181,7 @@ function getCurrentVersion() {
|
|
|
18101
18181
|
}
|
|
18102
18182
|
function getLatestVersion() {
|
|
18103
18183
|
try {
|
|
18104
|
-
const result = (0,
|
|
18184
|
+
const result = (0, import_child_process10.execSync)(`npm view ${PACKAGE_NAME} version 2>/dev/null`, {
|
|
18105
18185
|
encoding: "utf-8",
|
|
18106
18186
|
timeout: 1e4,
|
|
18107
18187
|
stdio: ["pipe", "pipe", "pipe"]
|
|
@@ -18124,7 +18204,7 @@ function compareVersions(a, b) {
|
|
|
18124
18204
|
}
|
|
18125
18205
|
function getInstallContext() {
|
|
18126
18206
|
try {
|
|
18127
|
-
const globalPrefix = (0,
|
|
18207
|
+
const globalPrefix = (0, import_child_process10.execSync)("npm config get prefix", {
|
|
18128
18208
|
encoding: "utf-8",
|
|
18129
18209
|
stdio: ["pipe", "pipe", "pipe"]
|
|
18130
18210
|
}).trim();
|
|
@@ -18178,7 +18258,7 @@ function registerUpdateCommand(program3) {
|
|
|
18178
18258
|
const spinner = createSpinner(`Updating ${target}`).start();
|
|
18179
18259
|
try {
|
|
18180
18260
|
const cmd = context.mode === "global" ? `npm install -g ${PACKAGE_NAME}@latest` : `npm install ${PACKAGE_NAME}@latest`;
|
|
18181
|
-
(0,
|
|
18261
|
+
(0, import_child_process10.execSync)(cmd, {
|
|
18182
18262
|
encoding: "utf-8",
|
|
18183
18263
|
stdio: ["pipe", "pipe", "pipe"],
|
|
18184
18264
|
timeout: 6e4
|
|
@@ -18961,7 +19041,7 @@ async function showTypes() {
|
|
|
18961
19041
|
init_cjs_shims();
|
|
18962
19042
|
var fs51 = __toESM(require("fs"), 1);
|
|
18963
19043
|
var path53 = __toESM(require("path"), 1);
|
|
18964
|
-
var
|
|
19044
|
+
var os5 = __toESM(require("os"), 1);
|
|
18965
19045
|
init_dist();
|
|
18966
19046
|
init_dist2();
|
|
18967
19047
|
function registerManagerCommand(program3) {
|
|
@@ -18999,7 +19079,7 @@ function getKnownProjects() {
|
|
|
18999
19079
|
}
|
|
19000
19080
|
} catch {
|
|
19001
19081
|
}
|
|
19002
|
-
const workspaceFile = path53.join(
|
|
19082
|
+
const workspaceFile = path53.join(os5.homedir(), ".bootspring", "workspace.json");
|
|
19003
19083
|
if (fs51.existsSync(workspaceFile)) {
|
|
19004
19084
|
try {
|
|
19005
19085
|
const workspace = JSON.parse(fs51.readFileSync(workspaceFile, "utf-8"));
|
|
@@ -19126,10 +19206,10 @@ async function scanProjects(dir) {
|
|
|
19126
19206
|
// src/commands/setup.ts
|
|
19127
19207
|
init_cjs_shims();
|
|
19128
19208
|
var fs53 = __toESM(require("fs"), 1);
|
|
19129
|
-
var
|
|
19209
|
+
var os6 = __toESM(require("os"), 1);
|
|
19130
19210
|
var path54 = __toESM(require("path"), 1);
|
|
19131
19211
|
init_dist();
|
|
19132
|
-
var HOME =
|
|
19212
|
+
var HOME = os6.homedir();
|
|
19133
19213
|
function registerSetupCommand(program3) {
|
|
19134
19214
|
const setup = program3.command("setup").description("Configure MCP for Claude Code, Codex, and Gemini CLI");
|
|
19135
19215
|
setup.command("assistants").description("Install MCP entries for all supported assistants (default)").action(async () => {
|
package/dist/core.js
CHANGED
|
@@ -1600,7 +1600,7 @@ var require_package = __commonJS({
|
|
|
1600
1600
|
"package.json"(exports2, module2) {
|
|
1601
1601
|
module2.exports = {
|
|
1602
1602
|
name: "@girardmedia/bootspring",
|
|
1603
|
-
version: "2.3.
|
|
1603
|
+
version: "2.3.2",
|
|
1604
1604
|
description: "Thin client for Bootspring cloud MCP, hosted agents, and paywalled workflow intelligence",
|
|
1605
1605
|
keywords: [
|
|
1606
1606
|
"ai",
|
package/dist/mcp-server.js
CHANGED
|
@@ -45,7 +45,7 @@ var require_package = __commonJS({
|
|
|
45
45
|
"package.json"(exports2, module2) {
|
|
46
46
|
module2.exports = {
|
|
47
47
|
name: "@girardmedia/bootspring",
|
|
48
|
-
version: "2.3.
|
|
48
|
+
version: "2.3.2",
|
|
49
49
|
description: "Thin client for Bootspring cloud MCP, hosted agents, and paywalled workflow intelligence",
|
|
50
50
|
keywords: [
|
|
51
51
|
"ai",
|
|
@@ -2220,7 +2220,10 @@ async function resolveTools() {
|
|
|
2220
2220
|
}
|
|
2221
2221
|
try {
|
|
2222
2222
|
const response = await api.listMcpTools();
|
|
2223
|
-
|
|
2223
|
+
const apiTools = Array.isArray(response) ? response : response.tools || [];
|
|
2224
|
+
const apiNames = new Set(apiTools.map((t) => t.name));
|
|
2225
|
+
const missing = FALLBACK_TOOLS.filter((t) => !apiNames.has(t.name));
|
|
2226
|
+
return [...apiTools, ...missing];
|
|
2224
2227
|
} catch {
|
|
2225
2228
|
return FALLBACK_TOOLS;
|
|
2226
2229
|
}
|