@girardmedia/bootspring 2.5.9 → 2.5.11
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 +3566 -2405
- package/dist/cli-launcher.js +45 -38
- package/dist/core/index.d.ts +10 -3
- package/dist/core.js +77 -6
- package/dist/mcp-server.js +653 -26
- package/package.json +1 -1
package/dist/cli-launcher.js
CHANGED
|
@@ -25,20 +25,31 @@ var C = {
|
|
|
25
25
|
yellow: "\x1B[33m",
|
|
26
26
|
red: "\x1B[31m"
|
|
27
27
|
};
|
|
28
|
+
var PRIMARY_COMMANDS = ["auth", "build", "seed", "init", "go", "mcp", "doctor", "deploy", "agent", "observe", "commands"];
|
|
28
29
|
var HELP_GROUPS = {
|
|
29
|
-
"Core": ["auth", "
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
30
|
+
"Core": ["auth", "build", "seed", "init", "go", "mcp"],
|
|
31
|
+
"Project": ["project", "workspace", "org", "switch", "checkpoint"],
|
|
32
|
+
"Dev Tools": ["doctor", "health", "setup", "validate", "watch", "dashboard", "update", "hook"],
|
|
33
|
+
"Analysis": ["analyze", "audit", "quality", "security", "diff", "report"],
|
|
34
|
+
"AI & Agents": ["agent", "skill", "context", "prompt", "flow"],
|
|
35
|
+
"Observe": ["observe", "autopilot", "monitor", "session", "metrics", "telemetry"],
|
|
36
|
+
"Docs": ["docs", "generate", "prd", "content", "plan", "suggest"],
|
|
37
|
+
"Deploy & Ops": ["deploy", "sync", "cloud-sync", "github", "undo", "history", "changes", "log"],
|
|
38
|
+
"Business": ["business", "marketing", "sales", "geo", "fundraise", "legal", "jobs"],
|
|
39
|
+
"Tasks": ["todo", "task", "memory", "learn", "issue", "loop"],
|
|
40
|
+
"Other": [
|
|
41
|
+
"billing",
|
|
42
|
+
"onboard",
|
|
43
|
+
"visualize",
|
|
44
|
+
"mvp",
|
|
45
|
+
"plugin",
|
|
46
|
+
"manager",
|
|
47
|
+
"harness",
|
|
48
|
+
"pipeline",
|
|
49
|
+
"workflow",
|
|
50
|
+
"orchestrator",
|
|
51
|
+
"marketplace"
|
|
52
|
+
]
|
|
42
53
|
};
|
|
43
54
|
function showHelp() {
|
|
44
55
|
console.log(`${C.cyan}${C.bold}\u26A1 Bootspring${C.reset} ${C.dim}v${VERSION}${C.reset}`);
|
|
@@ -46,29 +57,20 @@ function showHelp() {
|
|
|
46
57
|
`);
|
|
47
58
|
console.log(`${C.bold}Usage:${C.reset} bootspring <command> [options]
|
|
48
59
|
`);
|
|
49
|
-
console.log(`${C.cyan}${C.bold}
|
|
50
|
-
console.log(` ${C.green}
|
|
51
|
-
console.log(` ${C.green}
|
|
52
|
-
console.log(` ${C.green}
|
|
60
|
+
console.log(`${C.cyan}${C.bold}COMMANDS${C.reset}`);
|
|
61
|
+
console.log(` ${C.green}go${C.reset} ${C.dim}One command to set up everything${C.reset}`);
|
|
62
|
+
console.log(` ${C.green}auth${C.reset} ${C.dim}Login, logout, status${C.reset}`);
|
|
63
|
+
console.log(` ${C.green}init${C.reset} ${C.dim}Initialize a new project${C.reset}`);
|
|
64
|
+
console.log(` ${C.green}seed${C.reset} ${C.dim}Create and refine context documents${C.reset}`);
|
|
65
|
+
console.log(` ${C.green}build${C.reset} ${C.dim}Build loop \u2014 next, done, status, auto${C.reset}`);
|
|
66
|
+
console.log(` ${C.green}deploy${C.reset} ${C.dim}Validate and deploy${C.reset}`);
|
|
67
|
+
console.log(` ${C.green}mcp${C.reset} ${C.dim}MCP server management${C.reset}`);
|
|
68
|
+
console.log(` ${C.green}agent${C.reset} ${C.dim}AI agent proxy${C.reset}`);
|
|
69
|
+
console.log(` ${C.green}observe${C.reset} ${C.dim}Session intelligence and analytics${C.reset}`);
|
|
70
|
+
console.log(` ${C.green}doctor${C.reset} ${C.dim}Diagnose project issues${C.reset}`);
|
|
53
71
|
console.log("");
|
|
54
|
-
|
|
55
|
-
console.log(` ${C.green}
|
|
56
|
-
console.log(` ${C.green}bootspring seed go${C.reset} ${C.dim}Full workflow: detect + seed + generate + build${C.reset}`);
|
|
57
|
-
console.log(` ${C.green}bootspring generate${C.reset} ${C.dim}Generate AI context files${C.reset}`);
|
|
58
|
-
console.log("");
|
|
59
|
-
console.log(`${C.cyan}${C.bold}EXISTING PROJECT${C.reset}`);
|
|
60
|
-
console.log(` ${C.green}bootspring seed from-codebase${C.reset} ${C.dim}Detect stack and generate context${C.reset}`);
|
|
61
|
-
console.log(` ${C.green}bootspring onboard start${C.reset} ${C.dim}Full analysis of existing codebase${C.reset}`);
|
|
62
|
-
console.log("");
|
|
63
|
-
console.log(`${C.cyan}${C.bold}BUILD LOOP${C.reset}`);
|
|
64
|
-
console.log(` ${C.green}bootspring build next${C.reset} ${C.dim}Start the next task${C.reset}`);
|
|
65
|
-
console.log(` ${C.green}bootspring build done${C.reset} ${C.dim}Mark current task complete${C.reset}`);
|
|
66
|
-
console.log(` ${C.green}bootspring build status${C.reset} ${C.dim}Check build progress${C.reset}`);
|
|
67
|
-
console.log("");
|
|
68
|
-
console.log(`${C.cyan}${C.bold}MORE${C.reset}`);
|
|
69
|
-
console.log(` ${C.green}bootspring doctor${C.reset} ${C.dim}Diagnose project issues${C.reset}`);
|
|
70
|
-
console.log(` ${C.green}bootspring observe${C.reset} ${C.dim}Session intelligence and analytics${C.reset}`);
|
|
71
|
-
console.log(` ${C.green}bootspring commands${C.reset} ${C.dim}Show all ${Object.values(HELP_GROUPS).flat().length} commands${C.reset}`);
|
|
72
|
+
const total = Object.values(HELP_GROUPS).flat().length;
|
|
73
|
+
console.log(` ${C.green}commands${C.reset} ${C.dim}Show all ${total} commands${C.reset}`);
|
|
72
74
|
console.log(`
|
|
73
75
|
${C.dim}Run "bootspring <command> --help" for details${C.reset}`);
|
|
74
76
|
console.log(`${C.dim}Docs: https://bootspring.com/docs${C.reset}
|
|
@@ -76,13 +78,18 @@ ${C.dim}Run "bootspring <command> --help" for details${C.reset}`);
|
|
|
76
78
|
}
|
|
77
79
|
function showFullCommands() {
|
|
78
80
|
const total = Object.values(HELP_GROUPS).flat().length;
|
|
79
|
-
|
|
81
|
+
const primarySet = new Set(PRIMARY_COMMANDS);
|
|
82
|
+
console.log(`${C.cyan}${C.bold}\u26A1 Bootspring${C.reset} ${C.dim}v${VERSION} \u2014 ${total} commands (${PRIMARY_COMMANDS.length - 1} primary)${C.reset}
|
|
80
83
|
`);
|
|
81
84
|
for (const [group, cmds] of Object.entries(HELP_GROUPS)) {
|
|
82
|
-
|
|
85
|
+
const formatted = cmds.map(
|
|
86
|
+
(command) => primarySet.has(command) ? `${C.green}${C.bold}${command}${C.reset}` : `${C.dim}${command}${C.reset}`
|
|
87
|
+
).join(", ");
|
|
88
|
+
console.log(`${C.bold}${group}:${C.reset} ${formatted}`);
|
|
83
89
|
}
|
|
84
90
|
console.log(`
|
|
85
|
-
${C.dim}
|
|
91
|
+
${C.dim}Bold = primary commands shown in help${C.reset}`);
|
|
92
|
+
console.log(`${C.dim}Run "bootspring <command> --help" for command details${C.reset}`);
|
|
86
93
|
console.log(`${C.dim}Docs: https://bootspring.com/docs${C.reset}
|
|
87
94
|
`);
|
|
88
95
|
}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -414,15 +414,22 @@ interface DiagnosticResult {
|
|
|
414
414
|
fix?: string;
|
|
415
415
|
}
|
|
416
416
|
declare function runDiagnostics(autoFix?: boolean): DiagnosticResult[];
|
|
417
|
+
type AssistantTarget = 'claude' | 'cursor' | 'codex' | 'gemini';
|
|
418
|
+
declare function registerMcpForAssistant(target: AssistantTarget): {
|
|
419
|
+
success: boolean;
|
|
420
|
+
path: string;
|
|
421
|
+
};
|
|
417
422
|
|
|
423
|
+
type selfHeal_AssistantTarget = AssistantTarget;
|
|
418
424
|
type selfHeal_DiagnosticResult = DiagnosticResult;
|
|
419
425
|
type selfHeal_HealResult = HealResult;
|
|
420
426
|
type selfHeal_Issue = Issue;
|
|
421
427
|
declare const selfHeal_classifyError: typeof classifyError;
|
|
428
|
+
declare const selfHeal_registerMcpForAssistant: typeof registerMcpForAssistant;
|
|
422
429
|
declare const selfHeal_runDiagnostics: typeof runDiagnostics;
|
|
423
430
|
declare const selfHeal_tryHeal: typeof tryHeal;
|
|
424
431
|
declare namespace selfHeal {
|
|
425
|
-
export { type selfHeal_DiagnosticResult as DiagnosticResult, type selfHeal_HealResult as HealResult, type selfHeal_Issue as Issue, selfHeal_classifyError as classifyError, selfHeal_runDiagnostics as runDiagnostics, selfHeal_tryHeal as tryHeal };
|
|
432
|
+
export { type selfHeal_AssistantTarget as AssistantTarget, type selfHeal_DiagnosticResult as DiagnosticResult, type selfHeal_HealResult as HealResult, type selfHeal_Issue as Issue, selfHeal_classifyError as classifyError, selfHeal_registerMcpForAssistant as registerMcpForAssistant, selfHeal_runDiagnostics as runDiagnostics, selfHeal_tryHeal as tryHeal };
|
|
426
433
|
}
|
|
427
434
|
|
|
428
435
|
/**
|
|
@@ -470,7 +477,7 @@ interface InstallContext {
|
|
|
470
477
|
scriptPath: string;
|
|
471
478
|
}
|
|
472
479
|
declare const PACKAGE_NAME = "@girardmedia/bootspring";
|
|
473
|
-
declare const CURRENT_VERSION = "2.5.
|
|
480
|
+
declare const CURRENT_VERSION = "2.5.11";
|
|
474
481
|
declare const DEFAULT_INTERVAL_MS: number;
|
|
475
482
|
declare const STATE_PATH: string;
|
|
476
483
|
declare function compareVersions(a: string, b: string): number;
|
|
@@ -2403,4 +2410,4 @@ declare namespace telemetry {
|
|
|
2403
2410
|
export { telemetry_ASSISTANTS as ASSISTANTS, telemetry_ASSISTANT_FIRST_SUCCESS_EVENT as ASSISTANT_FIRST_SUCCESS_EVENT, telemetry_ASSISTANT_RETURN_EVENT as ASSISTANT_RETURN_EVENT, telemetry_ASSISTANT_SETUP_EVENT as ASSISTANT_SETUP_EVENT, type telemetry_AssistantFunnelEntry as AssistantFunnelEntry, type telemetry_AssistantFunnelSummary as AssistantFunnelSummary, type telemetry_AssistantId as AssistantId, type telemetry_AssistantTrackOptions as AssistantTrackOptions, type telemetry_AssistantUsageTrackResult as AssistantUsageTrackResult, telemetry_BILLING_UPGRADE_STARTED_EVENT as BILLING_UPGRADE_STARTED_EVENT, type telemetry_ClearResult as ClearResult, type telemetry_EmitOptions as EmitOptions, type telemetry_FailedBatch as FailedBatch, type telemetry_ListEventsOptions as ListEventsOptions, telemetry_MAX_EVENTS_LIMIT as MAX_EVENTS_LIMIT, type telemetry_TelemetryRecord as TelemetryRecord, type telemetry_TelemetryStatus as TelemetryStatus, telemetry_UPGRADE_COMPLETED_EVENT as UPGRADE_COMPLETED_EVENT, telemetry_UPGRADE_PROMPT_EVENT as UPGRADE_PROMPT_EVENT, type telemetry_UpgradeFunnelEntry as UpgradeFunnelEntry, type telemetry_UpgradeFunnelSummary as UpgradeFunnelSummary, type telemetry_UploadOptions as UploadOptions, type telemetry_UploadResult as UploadResult, telemetry_clearEvents as clearEvents, telemetry_emitEvent as emitEvent, telemetry_ensureTelemetryDir as ensureTelemetryDir, telemetry_getAssistantActivationFunnel as getAssistantActivationFunnel, telemetry_getStatus as getStatus, telemetry_getTelemetryDir as getTelemetryDir, telemetry_getTelemetryFile as getTelemetryFile, telemetry_getUpgradeConversionFunnel as getUpgradeConversionFunnel, telemetry_inferAssistantFromEnvironment as inferAssistantFromEnvironment, telemetry_listEvents as listEvents, telemetry_track as track, telemetry_trackAssistantSetup as trackAssistantSetup, telemetry_trackAssistantUsageSuccess as trackAssistantUsageSuccess, telemetry_uploadEvents as uploadEvents };
|
|
2404
2411
|
}
|
|
2405
2412
|
|
|
2406
|
-
export { API_BASE, API_VERSION, BOOTSPRING_DIR, type BootspringConfig, COMMANDS_SOURCE, CONFIG_FILE, CREDENTIALS_FILE, CURRENT_VERSION, type Credentials, DEFAULT_INTERVAL_MS, DEFAULT_POLICY_PROFILE, DEVICE_FILE, type DeviceContext, type DeviceInfo, type DiagnosticResult, type ExpiryStatus, type HealResult, type Issue, LIMITS, LOCAL_CONFIG_NAME, type LoginResponse, PACKAGE_NAME, PATTERNS, POLICY_PROFILES, type PolicyOptions, type PolicyProfile, type ProjectAuth, type ProjectConfig, type ProjectContext$1 as ProjectContext, SESSION_FILE, SHELL_DANGEROUS_CHARS, STATE_PATH, type SessionData, type SessionOptions, TARGET_DIRS, type UserProfile, type ValidationResult$1 as ValidationResult, type Workflow, addRecentProject, apiClient as api, apiLogin, applyUpdate, auth, callMcpTool, checkForUpdates, checkInstallation, classifyError, clearCredentials, clearDeviceInfo, clearProjectApiKey, clearProjectScopedSession, clearSession, compareVersions, config, context, createLocalConfig, decrypt, encrypt, ensureBootspringDir, ensureLatestVersion, entitlements, findLocalConfig, findNearestProjectConfigPath, generateDeviceFingerprint, getApiKey, getCommandFiles, getConfig, getCredentials, getCredentialsPath, getCurrentProject, getDeviceContext, getDeviceId, getDeviceInfo, getEffectiveProject, getInstallContext, getLatestVersion, getLegacyProjectApiKey, getMcpResource, getPolicyProfile, getProjectScopedSessionState, getProjectScopedToken, getRecentProjects, getRefreshToken, getSession, getSessionState, getStoredApiKey, getTier$1 as getTier, getToken, getTokenExpiryStatus, getUser, healthCheck, installAll, installToTarget, isApiKeyAuth, isAuthenticated, isWorkflowBlocked, listMcpResources, listMcpTools, login, loginWithApiKey, logout, maybeAutoUploadTelemetry, normalizeProfile, policies, pollDeviceToken, presence, readNearestProjectConfig, refreshSession, remoteLogout, request, resolvePolicyProfile, runDiagnostics, saveApiKeyToProject, saveConfig, saveCredentials, saveProjectScopedSession, saveSession, selfHeal, selfUpdate, sendHealthReport, sendHeartbeat, session, setAuthFailureHandler, setCurrentProject, setupCommands, startDeviceFlow, stripUnsafeControlChars, telemetry, tierEnforcement, tryHeal, uninstallAll, updateTokens, validateNumericId, validateSlug, validateStringLength, validateTodoText, writeNearestProjectConfig };
|
|
2413
|
+
export { API_BASE, API_VERSION, type AssistantTarget, BOOTSPRING_DIR, type BootspringConfig, COMMANDS_SOURCE, CONFIG_FILE, CREDENTIALS_FILE, CURRENT_VERSION, type Credentials, DEFAULT_INTERVAL_MS, DEFAULT_POLICY_PROFILE, DEVICE_FILE, type DeviceContext, type DeviceInfo, type DiagnosticResult, type ExpiryStatus, type HealResult, type Issue, LIMITS, LOCAL_CONFIG_NAME, type LoginResponse, PACKAGE_NAME, PATTERNS, POLICY_PROFILES, type PolicyOptions, type PolicyProfile, type ProjectAuth, type ProjectConfig, type ProjectContext$1 as ProjectContext, SESSION_FILE, SHELL_DANGEROUS_CHARS, STATE_PATH, type SessionData, type SessionOptions, TARGET_DIRS, type UserProfile, type ValidationResult$1 as ValidationResult, type Workflow, addRecentProject, apiClient as api, apiLogin, applyUpdate, auth, callMcpTool, checkForUpdates, checkInstallation, classifyError, clearCredentials, clearDeviceInfo, clearProjectApiKey, clearProjectScopedSession, clearSession, compareVersions, config, context, createLocalConfig, decrypt, encrypt, ensureBootspringDir, ensureLatestVersion, entitlements, findLocalConfig, findNearestProjectConfigPath, generateDeviceFingerprint, getApiKey, getCommandFiles, getConfig, getCredentials, getCredentialsPath, getCurrentProject, getDeviceContext, getDeviceId, getDeviceInfo, getEffectiveProject, getInstallContext, getLatestVersion, getLegacyProjectApiKey, getMcpResource, getPolicyProfile, getProjectScopedSessionState, getProjectScopedToken, getRecentProjects, getRefreshToken, getSession, getSessionState, getStoredApiKey, getTier$1 as getTier, getToken, getTokenExpiryStatus, getUser, healthCheck, installAll, installToTarget, isApiKeyAuth, isAuthenticated, isWorkflowBlocked, listMcpResources, listMcpTools, login, loginWithApiKey, logout, maybeAutoUploadTelemetry, normalizeProfile, policies, pollDeviceToken, presence, readNearestProjectConfig, refreshSession, registerMcpForAssistant, remoteLogout, request, resolvePolicyProfile, runDiagnostics, saveApiKeyToProject, saveConfig, saveCredentials, saveProjectScopedSession, saveSession, selfHeal, selfUpdate, sendHealthReport, sendHeartbeat, session, setAuthFailureHandler, setCurrentProject, setupCommands, startDeviceFlow, stripUnsafeControlChars, telemetry, tierEnforcement, tryHeal, uninstallAll, updateTokens, validateNumericId, validateSlug, validateStringLength, validateTodoText, writeNearestProjectConfig };
|
package/dist/core.js
CHANGED
|
@@ -158,6 +158,13 @@ ${COLORS.bold}${msg}${COLORS.reset}`);
|
|
|
158
158
|
console.log(`${indent}- ${formatListItem(item)}`);
|
|
159
159
|
}
|
|
160
160
|
};
|
|
161
|
+
printImpl.apiError = (prefix, err) => {
|
|
162
|
+
if (err && typeof err === "object" && err.authHandled) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
166
|
+
console.log(`${COLORS.red}\u2717${COLORS.reset} ${prefix}: ${message}`);
|
|
167
|
+
};
|
|
161
168
|
print = printImpl;
|
|
162
169
|
}
|
|
163
170
|
});
|
|
@@ -372,7 +379,7 @@ var init_release = __esm({
|
|
|
372
379
|
"../../packages/shared/src/release.ts"() {
|
|
373
380
|
"use strict";
|
|
374
381
|
init_cjs_shims();
|
|
375
|
-
BOOTSPRING_VERSION = "2.5.
|
|
382
|
+
BOOTSPRING_VERSION = "2.5.11";
|
|
376
383
|
BOOTSPRING_PACKAGE_NAME = "@girardmedia/bootspring";
|
|
377
384
|
}
|
|
378
385
|
});
|
|
@@ -17934,6 +17941,7 @@ var require_dist = __commonJS({
|
|
|
17934
17941
|
presence: () => presence_exports,
|
|
17935
17942
|
readNearestProjectConfig: () => readNearestProjectConfig,
|
|
17936
17943
|
refreshSession: () => refreshSession,
|
|
17944
|
+
registerMcpForAssistant: () => registerMcpForAssistant,
|
|
17937
17945
|
remoteLogout: () => remoteLogout,
|
|
17938
17946
|
request: () => request,
|
|
17939
17947
|
resolvePolicyProfile: () => resolvePolicyProfile,
|
|
@@ -18153,6 +18161,7 @@ var require_dist = __commonJS({
|
|
|
18153
18161
|
if (reauthOk) {
|
|
18154
18162
|
return rawRequest(method, path10, data, { ...options, _authRetried: true, noCache: true });
|
|
18155
18163
|
}
|
|
18164
|
+
err.authHandled = true;
|
|
18156
18165
|
}
|
|
18157
18166
|
throw err;
|
|
18158
18167
|
}
|
|
@@ -18382,6 +18391,7 @@ var require_dist = __commonJS({
|
|
|
18382
18391
|
var self_heal_exports = {};
|
|
18383
18392
|
__export2(self_heal_exports, {
|
|
18384
18393
|
classifyError: () => classifyError,
|
|
18394
|
+
registerMcpForAssistant: () => registerMcpForAssistant,
|
|
18385
18395
|
runDiagnostics: () => runDiagnostics,
|
|
18386
18396
|
tryHeal: () => tryHeal
|
|
18387
18397
|
});
|
|
@@ -18629,6 +18639,30 @@ var require_dist = __commonJS({
|
|
|
18629
18639
|
} else {
|
|
18630
18640
|
results.push({ id: "deps", status: "ok", message: "Dependencies installed." });
|
|
18631
18641
|
}
|
|
18642
|
+
const lockPath = import_path3.default.join(cwd, "package-lock.json");
|
|
18643
|
+
const pnpmLock = import_path3.default.join(cwd, "pnpm-lock.yaml");
|
|
18644
|
+
const nmPath = import_path3.default.join(cwd, "node_modules");
|
|
18645
|
+
const lockFile = import_fs3.default.existsSync(pnpmLock) ? pnpmLock : import_fs3.default.existsSync(lockPath) ? lockPath : null;
|
|
18646
|
+
if (lockFile && import_fs3.default.existsSync(nmPath)) {
|
|
18647
|
+
try {
|
|
18648
|
+
const lockMtime = import_fs3.default.statSync(lockFile).mtimeMs;
|
|
18649
|
+
const nmMtime = import_fs3.default.statSync(nmPath).mtimeMs;
|
|
18650
|
+
if (lockMtime > nmMtime) {
|
|
18651
|
+
const installCmd = lockFile.endsWith(".yaml") ? "pnpm install" : "npm install";
|
|
18652
|
+
if (autoFix) {
|
|
18653
|
+
try {
|
|
18654
|
+
(0, import_child_process.execSync)(installCmd, { cwd, timeout: 12e4, stdio: "pipe" });
|
|
18655
|
+
results.push({ id: "deps-stale", status: "healed", message: `Lockfile newer than node_modules \u2014 ran ${installCmd}.` });
|
|
18656
|
+
} catch {
|
|
18657
|
+
results.push({ id: "deps-stale", status: "action-needed", message: "Lockfile newer than node_modules.", fix: installCmd });
|
|
18658
|
+
}
|
|
18659
|
+
} else {
|
|
18660
|
+
results.push({ id: "deps-stale", status: "action-needed", message: "Lockfile newer than node_modules \u2014 dependencies may be stale.", fix: `${installCmd}` });
|
|
18661
|
+
}
|
|
18662
|
+
}
|
|
18663
|
+
} catch {
|
|
18664
|
+
}
|
|
18665
|
+
}
|
|
18632
18666
|
const mcpTargets = {
|
|
18633
18667
|
claude: import_path3.default.join(homeDir, ".claude.json"),
|
|
18634
18668
|
codex: import_path3.default.join(homeDir, ".codex", "config.toml"),
|
|
@@ -18679,7 +18713,9 @@ var require_dist = __commonJS({
|
|
|
18679
18713
|
if (autoFix) {
|
|
18680
18714
|
const backup = buildStatePath + ".bak";
|
|
18681
18715
|
import_fs3.default.copyFileSync(buildStatePath, backup);
|
|
18682
|
-
|
|
18716
|
+
state.implementationQueue = state.implementationQueue || [];
|
|
18717
|
+
import_fs3.default.writeFileSync(buildStatePath, JSON.stringify(state, null, 2));
|
|
18718
|
+
results.push({ id: "build-state", status: "healed", message: `BUILD_STATE.json repaired (backed up to ${import_path3.default.basename(backup)}).` });
|
|
18683
18719
|
} else {
|
|
18684
18720
|
results.push({ id: "build-state", status: "action-needed", message: "BUILD_STATE.json has invalid structure.", fix: "bootspring doctor --fix" });
|
|
18685
18721
|
}
|
|
@@ -18775,6 +18811,29 @@ ${block}` : block;
|
|
|
18775
18811
|
return false;
|
|
18776
18812
|
}
|
|
18777
18813
|
}
|
|
18814
|
+
var MCP_PATHS = {
|
|
18815
|
+
claude: () => import_path3.default.join(import_os2.default.homedir(), ".claude.json"),
|
|
18816
|
+
cursor: () => import_path3.default.join(import_os2.default.homedir(), ".cursor", "mcp.json"),
|
|
18817
|
+
codex: () => import_path3.default.join(import_os2.default.homedir(), ".codex", "config.toml"),
|
|
18818
|
+
gemini: () => import_path3.default.join(import_os2.default.homedir(), ".gemini", "settings.json")
|
|
18819
|
+
};
|
|
18820
|
+
function registerMcpForAssistant(target) {
|
|
18821
|
+
const configPath = MCP_PATHS[target]();
|
|
18822
|
+
let success = false;
|
|
18823
|
+
switch (target) {
|
|
18824
|
+
case "claude":
|
|
18825
|
+
case "cursor":
|
|
18826
|
+
success = writeClaudeMcp(configPath);
|
|
18827
|
+
break;
|
|
18828
|
+
case "codex":
|
|
18829
|
+
success = writeCodexMcp(configPath);
|
|
18830
|
+
break;
|
|
18831
|
+
case "gemini":
|
|
18832
|
+
success = writeGeminiMcp(configPath);
|
|
18833
|
+
break;
|
|
18834
|
+
}
|
|
18835
|
+
return { success, path: configPath };
|
|
18836
|
+
}
|
|
18778
18837
|
var presence_exports = {};
|
|
18779
18838
|
__export2(presence_exports, {
|
|
18780
18839
|
maybeAutoUploadTelemetry: () => maybeAutoUploadTelemetry,
|
|
@@ -21339,6 +21398,13 @@ ${COLORS2.bold}${msg}${COLORS2.reset}`);
|
|
|
21339
21398
|
console.log(`${indent}- ${formatListItem2(item)}`);
|
|
21340
21399
|
}
|
|
21341
21400
|
};
|
|
21401
|
+
printImpl2.apiError = (prefix, err) => {
|
|
21402
|
+
if (err && typeof err === "object" && err.authHandled) {
|
|
21403
|
+
return;
|
|
21404
|
+
}
|
|
21405
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
21406
|
+
console.log(`${COLORS2.red}\u2717${COLORS2.reset} ${prefix}: ${message}`);
|
|
21407
|
+
};
|
|
21342
21408
|
var print2 = printImpl2;
|
|
21343
21409
|
function createSpinner2(message) {
|
|
21344
21410
|
const frames = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
|
|
@@ -21577,7 +21643,7 @@ ${COLORS2.dim}Run "bootspring mcp" for server options${COLORS2.reset}
|
|
|
21577
21643
|
console.log(`${COLORS2.dim}Run "bootspring mcp" for setup instructions.${COLORS2.reset}
|
|
21578
21644
|
`);
|
|
21579
21645
|
}
|
|
21580
|
-
var BOOTSPRING_VERSION2 = "2.5.
|
|
21646
|
+
var BOOTSPRING_VERSION2 = "2.5.11";
|
|
21581
21647
|
var BOOTSPRING_PACKAGE_NAME2 = "@girardmedia/bootspring";
|
|
21582
21648
|
var REDACTED2 = "[REDACTED]";
|
|
21583
21649
|
var SENSITIVE_KEY_PATTERN2 = /(?:^|[_-])(api[_-]?key|token|refresh[_-]?token|authorization|x[_-]?api[_-]?key|project[_-]?id)$/i;
|
|
@@ -21625,7 +21691,7 @@ var require_package = __commonJS({
|
|
|
21625
21691
|
"../../../package.json"(exports2, module2) {
|
|
21626
21692
|
module2.exports = {
|
|
21627
21693
|
name: "bootspring-workspace",
|
|
21628
|
-
version: "2.5.
|
|
21694
|
+
version: "2.5.11",
|
|
21629
21695
|
private: true,
|
|
21630
21696
|
description: "Workspace tooling for the Bootspring monorepo",
|
|
21631
21697
|
keywords: [
|
|
@@ -21655,7 +21721,9 @@ var require_package = __commonJS({
|
|
|
21655
21721
|
mcp: "node monorepo/apps/cli/dist/mcp-server.js",
|
|
21656
21722
|
"version:sync": "node scripts/sync-version-metadata.js",
|
|
21657
21723
|
"verify:version-sync": "node scripts/sync-version-metadata.js --check",
|
|
21658
|
-
"release:prepare": "npm run version:sync && npm run build && npm test && npm run lint --if-present && npm run verify:package && npm run verify:thin-client-contract && npm run verify:mcp-contract && npm run verify:monorepo-assets && npm run verify:release-gates",
|
|
21724
|
+
"release:prepare": "npm run version:sync && npm run build && npm test && npm run lint --if-present && npm run verify:package && npm run verify:thin-client-contract && npm run verify:mcp-contract && npm run verify:monorepo-assets && npm run verify:release-gates && npm run smoke:publish",
|
|
21725
|
+
"release:dry-run": "npm run version:sync && npm run build && npm test && npm run lint --if-present && npm run verify:package && npm run verify:thin-client-contract && npm run verify:mcp-contract && npm run verify:monorepo-assets && npm run verify:release-gates && npm run smoke:publish && echo '\\n--- DRY RUN COMPLETE (no publish) ---'",
|
|
21726
|
+
"smoke:publish": "node scripts/smoke-publish.js",
|
|
21659
21727
|
pretest: "npm run build",
|
|
21660
21728
|
test: "vitest run",
|
|
21661
21729
|
"test:launch-smoke": "vitest run __tests__/unit/cli-first-run-smoke.test.js __tests__/unit/health-fresh-start.test.ts __tests__/unit/session-project-scope.test.ts __tests__/unit/auth-cli-mixed-states.test.ts __tests__/unit/api-client-project-auth-fallback.test.js __tests__/unit/cli-help-surface.test.js __tests__/unit/cli-command-manifest.test.js",
|
|
@@ -21682,7 +21750,10 @@ var require_package = __commonJS({
|
|
|
21682
21750
|
"server:bundle:configure-shared-billing-gh": "bash monorepo/apps/server/compat-runtime/scripts/configure-shared-billing-smoke-gh.sh",
|
|
21683
21751
|
"build:cli": "npm --prefix monorepo/apps/cli run build",
|
|
21684
21752
|
"build:watch": "npm --prefix monorepo/apps/cli run dev",
|
|
21685
|
-
dev: "
|
|
21753
|
+
dev: "cd monorepo && pnpm turbo dev --filter=@girardmedia/bootspring --filter=@bootspring/server --concurrency=10",
|
|
21754
|
+
"dev:cli": "npm --prefix monorepo/apps/cli run dev",
|
|
21755
|
+
"dev:server": "npm --prefix monorepo/apps/server run dev",
|
|
21756
|
+
"dev:test": "vitest",
|
|
21686
21757
|
"verify:lint-budget": "node scripts/check-lint-budgets.js",
|
|
21687
21758
|
"verify:release-gates": "node scripts/release-gate-check.js",
|
|
21688
21759
|
"verify:shared-contracts": "node scripts/verify-shared-contracts.js",
|