@girardmedia/bootspring 2.3.2 → 2.3.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.cjs +172 -159
- package/dist/core.js +1 -1
- package/dist/mcp-server.js +1 -1
- package/package.json +1 -1
package/dist/cli/index.cjs
CHANGED
|
@@ -1395,9 +1395,9 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
1395
1395
|
if (fn) {
|
|
1396
1396
|
this._exitCallback = fn;
|
|
1397
1397
|
} else {
|
|
1398
|
-
this._exitCallback = (
|
|
1399
|
-
if (
|
|
1400
|
-
throw
|
|
1398
|
+
this._exitCallback = (err) => {
|
|
1399
|
+
if (err.code !== "commander.executeSubCommandAsync") {
|
|
1400
|
+
throw err;
|
|
1401
1401
|
} else {
|
|
1402
1402
|
}
|
|
1403
1403
|
};
|
|
@@ -1473,12 +1473,12 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
1473
1473
|
_callParseArg(target, value, previous, invalidArgumentMessage) {
|
|
1474
1474
|
try {
|
|
1475
1475
|
return target.parseArg(value, previous);
|
|
1476
|
-
} catch (
|
|
1477
|
-
if (
|
|
1478
|
-
const message = `${invalidArgumentMessage} ${
|
|
1479
|
-
this.error(message, { exitCode:
|
|
1476
|
+
} catch (err) {
|
|
1477
|
+
if (err.code === "commander.invalidArgument") {
|
|
1478
|
+
const message = `${invalidArgumentMessage} ${err.message}`;
|
|
1479
|
+
this.error(message, { exitCode: err.exitCode, code: err.code });
|
|
1480
1480
|
}
|
|
1481
|
-
throw
|
|
1481
|
+
throw err;
|
|
1482
1482
|
}
|
|
1483
1483
|
}
|
|
1484
1484
|
/**
|
|
@@ -1937,7 +1937,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
1937
1937
|
let resolvedScriptPath;
|
|
1938
1938
|
try {
|
|
1939
1939
|
resolvedScriptPath = fs54.realpathSync(this._scriptPath);
|
|
1940
|
-
} catch (
|
|
1940
|
+
} catch (err) {
|
|
1941
1941
|
resolvedScriptPath = this._scriptPath;
|
|
1942
1942
|
}
|
|
1943
1943
|
executableDir = path55.resolve(
|
|
@@ -2001,15 +2001,15 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
2001
2001
|
);
|
|
2002
2002
|
}
|
|
2003
2003
|
});
|
|
2004
|
-
proc.on("error", (
|
|
2005
|
-
if (
|
|
2004
|
+
proc.on("error", (err) => {
|
|
2005
|
+
if (err.code === "ENOENT") {
|
|
2006
2006
|
const executableDirMessage = executableDir ? `searched for local subcommand relative to directory '${executableDir}'` : "no directory for search for local subcommand, use .executableDir() to supply a custom directory";
|
|
2007
2007
|
const executableMissing = `'${executableFile}' does not exist
|
|
2008
2008
|
- if '${subcommand._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
2009
2009
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
2010
2010
|
- ${executableDirMessage}`;
|
|
2011
2011
|
throw new Error(executableMissing);
|
|
2012
|
-
} else if (
|
|
2012
|
+
} else if (err.code === "EACCES") {
|
|
2013
2013
|
throw new Error(`'${executableFile}' not executable`);
|
|
2014
2014
|
}
|
|
2015
2015
|
if (!exitCallback) {
|
|
@@ -2020,7 +2020,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
2020
2020
|
"commander.executeSubCommandAsync",
|
|
2021
2021
|
"(error)"
|
|
2022
2022
|
);
|
|
2023
|
-
wrappedError.nestedError =
|
|
2023
|
+
wrappedError.nestedError = err;
|
|
2024
2024
|
exitCallback(wrappedError);
|
|
2025
2025
|
}
|
|
2026
2026
|
});
|
|
@@ -3398,8 +3398,8 @@ function getCredentials() {
|
|
|
3398
3398
|
}
|
|
3399
3399
|
return decrypted;
|
|
3400
3400
|
}
|
|
3401
|
-
} catch (
|
|
3402
|
-
console.error("[bootspring] Failed to read credentials:",
|
|
3401
|
+
} catch (err) {
|
|
3402
|
+
console.error("[bootspring] Failed to read credentials:", err.message);
|
|
3403
3403
|
}
|
|
3404
3404
|
return null;
|
|
3405
3405
|
}
|
|
@@ -3813,11 +3813,11 @@ async function request(method, path310, data = null, options = {}) {
|
|
|
3813
3813
|
}
|
|
3814
3814
|
});
|
|
3815
3815
|
});
|
|
3816
|
-
req.on("error", (
|
|
3817
|
-
if (
|
|
3816
|
+
req.on("error", (err) => {
|
|
3817
|
+
if (err.code === "ECONNREFUSED") {
|
|
3818
3818
|
reject(new Error("Cannot connect to Bootspring API."));
|
|
3819
3819
|
} else {
|
|
3820
|
-
reject(new Error(redactSensitiveString(
|
|
3820
|
+
reject(new Error(redactSensitiveString(err.message || String(err))));
|
|
3821
3821
|
}
|
|
3822
3822
|
});
|
|
3823
3823
|
if (data && method !== "GET") req.write(JSON.stringify(data));
|
|
@@ -4582,8 +4582,8 @@ ${COLORS.bold}Your Projects${COLORS.reset}
|
|
|
4582
4582
|
console.log(` ${COLORS.dim}ID:${COLORS.reset} ${p.id} ${COLORS.dim}Role:${COLORS.reset} ${p.role || "owner"}
|
|
4583
4583
|
`);
|
|
4584
4584
|
});
|
|
4585
|
-
} catch (
|
|
4586
|
-
print.error(`Failed to list projects: ${
|
|
4585
|
+
} catch (err) {
|
|
4586
|
+
print.error(`Failed to list projects: ${err.message}`);
|
|
4587
4587
|
}
|
|
4588
4588
|
});
|
|
4589
4589
|
projectCmd.command("create [name]").alias("new").description("Create a new project").option("-d, --description <desc>", "Project description").option("-f, --framework <framework>", "Project framework (e.g., nextjs, nodejs)").option("--repo <url>", "Repository URL").action(async (name, options) => {
|
|
@@ -4602,8 +4602,8 @@ ${COLORS.bold}Your Projects${COLORS.reset}
|
|
|
4602
4602
|
print.success(`Project "${response.name}" created successfully!`);
|
|
4603
4603
|
console.log(`${COLORS.dim}ID:${COLORS.reset} ${response.id}`);
|
|
4604
4604
|
console.log(`${COLORS.dim}Slug:${COLORS.reset} ${response.slug}`);
|
|
4605
|
-
} catch (
|
|
4606
|
-
print.error(`Failed to create project: ${
|
|
4605
|
+
} catch (err) {
|
|
4606
|
+
print.error(`Failed to create project: ${err.message}`);
|
|
4607
4607
|
}
|
|
4608
4608
|
});
|
|
4609
4609
|
projectCmd.command("info").alias("current").description("Show current project info").action(async () => {
|
|
@@ -4639,12 +4639,12 @@ ${COLORS.bold}Current Project Context${COLORS.reset}`);
|
|
|
4639
4639
|
role: options.role
|
|
4640
4640
|
});
|
|
4641
4641
|
print.success(`Invitation sent to ${email} (role: ${options.role})`);
|
|
4642
|
-
} catch (
|
|
4643
|
-
if (
|
|
4642
|
+
} catch (err) {
|
|
4643
|
+
if (err.status === 403) {
|
|
4644
4644
|
print.warning("Project invitations require a paid Bootspring plan.");
|
|
4645
4645
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
4646
4646
|
} else {
|
|
4647
|
-
print.error(`Failed to invite: ${
|
|
4647
|
+
print.error(`Failed to invite: ${err.message}`);
|
|
4648
4648
|
}
|
|
4649
4649
|
}
|
|
4650
4650
|
});
|
|
@@ -4670,8 +4670,8 @@ ${COLORS.bold}Project Members${COLORS.reset} (${current.name})
|
|
|
4670
4670
|
console.log(` ${m.email || m.name || m.id} ${roleColor}${role}${COLORS.reset}`);
|
|
4671
4671
|
}
|
|
4672
4672
|
console.log("");
|
|
4673
|
-
} catch (
|
|
4674
|
-
print.error(`Failed to list members: ${
|
|
4673
|
+
} catch (err) {
|
|
4674
|
+
print.error(`Failed to list members: ${err.message}`);
|
|
4675
4675
|
}
|
|
4676
4676
|
});
|
|
4677
4677
|
projectCmd.command("invitations").alias("invites").description("List pending invitations").action(async () => {
|
|
@@ -4694,8 +4694,8 @@ ${COLORS.bold}Pending Invitations${COLORS.reset}
|
|
|
4694
4694
|
console.log(` ${inv.email} ${COLORS.dim}role: ${inv.role || "member"} sent: ${inv.createdAt || "unknown"}${COLORS.reset}`);
|
|
4695
4695
|
}
|
|
4696
4696
|
console.log("");
|
|
4697
|
-
} catch (
|
|
4698
|
-
print.error(`Failed to list invitations: ${
|
|
4697
|
+
} catch (err) {
|
|
4698
|
+
print.error(`Failed to list invitations: ${err.message}`);
|
|
4699
4699
|
}
|
|
4700
4700
|
});
|
|
4701
4701
|
projectCmd.command("accept <invitationId>").description("Accept a project invitation").action(async (invitationId) => {
|
|
@@ -4706,8 +4706,8 @@ ${COLORS.bold}Pending Invitations${COLORS.reset}
|
|
|
4706
4706
|
try {
|
|
4707
4707
|
await api_client_exports.request("POST", `/invitations/${encodeURIComponent(invitationId)}/accept`);
|
|
4708
4708
|
print.success("Invitation accepted!");
|
|
4709
|
-
} catch (
|
|
4710
|
-
print.error(`Failed to accept invitation: ${
|
|
4709
|
+
} catch (err) {
|
|
4710
|
+
print.error(`Failed to accept invitation: ${err.message}`);
|
|
4711
4711
|
}
|
|
4712
4712
|
});
|
|
4713
4713
|
projectCmd.command("decline <invitationId>").description("Decline a project invitation").action(async (invitationId) => {
|
|
@@ -4718,8 +4718,8 @@ ${COLORS.bold}Pending Invitations${COLORS.reset}
|
|
|
4718
4718
|
try {
|
|
4719
4719
|
await api_client_exports.request("POST", `/invitations/${encodeURIComponent(invitationId)}/decline`);
|
|
4720
4720
|
print.success("Invitation declined.");
|
|
4721
|
-
} catch (
|
|
4722
|
-
print.error(`Failed to decline invitation: ${
|
|
4721
|
+
} catch (err) {
|
|
4722
|
+
print.error(`Failed to decline invitation: ${err.message}`);
|
|
4723
4723
|
}
|
|
4724
4724
|
});
|
|
4725
4725
|
projectCmd.command("update-member <email>").description("Update member role").option("--role <role>", "New role (admin, member, viewer)", "member").action(async (email, options) => {
|
|
@@ -4734,8 +4734,8 @@ ${COLORS.bold}Pending Invitations${COLORS.reset}
|
|
|
4734
4734
|
role: options.role
|
|
4735
4735
|
});
|
|
4736
4736
|
print.success(`Updated ${email} to role: ${options.role}`);
|
|
4737
|
-
} catch (
|
|
4738
|
-
print.error(`Failed to update member: ${
|
|
4737
|
+
} catch (err) {
|
|
4738
|
+
print.error(`Failed to update member: ${err.message}`);
|
|
4739
4739
|
}
|
|
4740
4740
|
});
|
|
4741
4741
|
projectCmd.command("remove-member <email>").description("Remove a project member").action(async (email) => {
|
|
@@ -4749,8 +4749,8 @@ ${COLORS.bold}Pending Invitations${COLORS.reset}
|
|
|
4749
4749
|
email
|
|
4750
4750
|
});
|
|
4751
4751
|
print.success(`Removed ${email} from project.`);
|
|
4752
|
-
} catch (
|
|
4753
|
-
print.error(`Failed to remove member: ${
|
|
4752
|
+
} catch (err) {
|
|
4753
|
+
print.error(`Failed to remove member: ${err.message}`);
|
|
4754
4754
|
}
|
|
4755
4755
|
});
|
|
4756
4756
|
projectCmd.command("transfer <email>").description("Transfer project ownership").action(async (email) => {
|
|
@@ -4764,11 +4764,11 @@ ${COLORS.bold}Pending Invitations${COLORS.reset}
|
|
|
4764
4764
|
newOwnerEmail: email
|
|
4765
4765
|
});
|
|
4766
4766
|
print.success(`Ownership transferred to ${email}.`);
|
|
4767
|
-
} catch (
|
|
4768
|
-
if (
|
|
4767
|
+
} catch (err) {
|
|
4768
|
+
if (err.status === 403) {
|
|
4769
4769
|
print.warning("Only the project owner can transfer ownership.");
|
|
4770
4770
|
} else {
|
|
4771
|
-
print.error(`Failed to transfer project: ${
|
|
4771
|
+
print.error(`Failed to transfer project: ${err.message}`);
|
|
4772
4772
|
}
|
|
4773
4773
|
}
|
|
4774
4774
|
});
|
|
@@ -4797,8 +4797,8 @@ ${COLORS.bold}Project Activity${COLORS.reset} (${current.name})
|
|
|
4797
4797
|
}
|
|
4798
4798
|
}
|
|
4799
4799
|
console.log("");
|
|
4800
|
-
} catch (
|
|
4801
|
-
print.error(`Failed to load activity: ${
|
|
4800
|
+
} catch (err) {
|
|
4801
|
+
print.error(`Failed to load activity: ${err.message}`);
|
|
4802
4802
|
}
|
|
4803
4803
|
});
|
|
4804
4804
|
projectCmd.command("notifications").description("Show membership change notifications").action(async () => {
|
|
@@ -4823,8 +4823,8 @@ ${COLORS.bold}Notifications${COLORS.reset}
|
|
|
4823
4823
|
if (time) print.dim(` ${time}`);
|
|
4824
4824
|
}
|
|
4825
4825
|
console.log("");
|
|
4826
|
-
} catch (
|
|
4827
|
-
print.error(`Failed to load notifications: ${
|
|
4826
|
+
} catch (err) {
|
|
4827
|
+
print.error(`Failed to load notifications: ${err.message}`);
|
|
4828
4828
|
}
|
|
4829
4829
|
});
|
|
4830
4830
|
}
|
|
@@ -5112,12 +5112,12 @@ ${COLORS.cyan}${COLORS.bold}MCP Connectors${COLORS.reset}
|
|
|
5112
5112
|
if (c.description) console.log(` ${COLORS.dim}${c.description}${COLORS.reset}`);
|
|
5113
5113
|
});
|
|
5114
5114
|
console.log();
|
|
5115
|
-
} catch (
|
|
5116
|
-
if (
|
|
5115
|
+
} catch (err) {
|
|
5116
|
+
if (err.status === 403) {
|
|
5117
5117
|
print.warning("This feature requires a paid Bootspring plan.");
|
|
5118
5118
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
5119
5119
|
} else {
|
|
5120
|
-
print.error(`Failed to fetch connectors: ${
|
|
5120
|
+
print.error(`Failed to fetch connectors: ${err.message}`);
|
|
5121
5121
|
}
|
|
5122
5122
|
}
|
|
5123
5123
|
});
|
|
@@ -5195,12 +5195,12 @@ ${COLORS.bold}Resources (${resources.length})${COLORS.reset}`);
|
|
|
5195
5195
|
print.warning("No tools or resources registered.");
|
|
5196
5196
|
}
|
|
5197
5197
|
console.log();
|
|
5198
|
-
} catch (
|
|
5199
|
-
if (
|
|
5198
|
+
} catch (err) {
|
|
5199
|
+
if (err.status === 403) {
|
|
5200
5200
|
print.warning("This feature requires a paid Bootspring plan.");
|
|
5201
5201
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
5202
5202
|
} else {
|
|
5203
|
-
print.error(`Failed to fetch MCP status: ${
|
|
5203
|
+
print.error(`Failed to fetch MCP status: ${err.message}`);
|
|
5204
5204
|
}
|
|
5205
5205
|
}
|
|
5206
5206
|
}
|
|
@@ -5230,12 +5230,12 @@ ${COLORS.cyan}${COLORS.bold}Bootspring MCP Test${COLORS.reset}
|
|
|
5230
5230
|
}
|
|
5231
5231
|
}
|
|
5232
5232
|
console.log();
|
|
5233
|
-
} catch (
|
|
5234
|
-
if (
|
|
5233
|
+
} catch (err) {
|
|
5234
|
+
if (err.status === 403) {
|
|
5235
5235
|
print.warning("This feature requires a paid Bootspring plan.");
|
|
5236
5236
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
5237
5237
|
} else {
|
|
5238
|
-
print.error(`Connection failed: ${
|
|
5238
|
+
print.error(`Connection failed: ${err.message}`);
|
|
5239
5239
|
print.dim("Ensure your API key is valid and the server is reachable.");
|
|
5240
5240
|
}
|
|
5241
5241
|
}
|
|
@@ -5286,7 +5286,7 @@ ${COLORS.bold}${cat}${COLORS.reset}`);
|
|
|
5286
5286
|
});
|
|
5287
5287
|
}
|
|
5288
5288
|
console.log();
|
|
5289
|
-
} catch (
|
|
5289
|
+
} catch (err) {
|
|
5290
5290
|
print.error(`Failed to list agents: ${err.message}`);
|
|
5291
5291
|
}
|
|
5292
5292
|
}
|
|
@@ -5305,8 +5305,14 @@ ${COLORS.bold}Expertise${COLORS.reset}`);
|
|
|
5305
5305
|
agent.expertise.forEach((e) => console.log(` ${COLORS.green}\u25CF${COLORS.reset} ${e}`));
|
|
5306
5306
|
}
|
|
5307
5307
|
console.log();
|
|
5308
|
-
} catch (
|
|
5309
|
-
|
|
5308
|
+
} catch (err) {
|
|
5309
|
+
if (err.status === 404) {
|
|
5310
|
+
print.error(`Agent not found: ${name}`);
|
|
5311
|
+
} else if (err.status === 403) {
|
|
5312
|
+
print.warning("This feature requires a paid Bootspring plan.");
|
|
5313
|
+
} else {
|
|
5314
|
+
print.error(`Failed to load agent: ${err.message || "Unknown error"}`);
|
|
5315
|
+
}
|
|
5310
5316
|
}
|
|
5311
5317
|
}
|
|
5312
5318
|
async function invokeAgent(name, topic) {
|
|
@@ -5324,7 +5330,7 @@ ${COLORS.bold}Agent Context:${COLORS.reset}`);
|
|
|
5324
5330
|
console.log(response.context);
|
|
5325
5331
|
console.log(`${COLORS.dim}\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500${COLORS.reset}
|
|
5326
5332
|
`);
|
|
5327
|
-
} catch (
|
|
5333
|
+
} catch (err) {
|
|
5328
5334
|
print.error(`Failed to invoke agent: ${err.message}`);
|
|
5329
5335
|
}
|
|
5330
5336
|
}
|
|
@@ -5355,7 +5361,7 @@ ${COLORS.bold}${cat}${COLORS.reset}`);
|
|
|
5355
5361
|
});
|
|
5356
5362
|
}
|
|
5357
5363
|
console.log();
|
|
5358
|
-
} catch (
|
|
5364
|
+
} catch (err) {
|
|
5359
5365
|
if (err.status === 403) {
|
|
5360
5366
|
print.warning("This feature requires a paid Bootspring plan.");
|
|
5361
5367
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
@@ -5412,7 +5418,7 @@ ${COLORS.bold}${cat}${COLORS.reset}`);
|
|
|
5412
5418
|
});
|
|
5413
5419
|
}
|
|
5414
5420
|
console.log();
|
|
5415
|
-
} catch (
|
|
5421
|
+
} catch (err) {
|
|
5416
5422
|
print.error(`Failed to list skills: ${err.message}`);
|
|
5417
5423
|
}
|
|
5418
5424
|
}
|
|
@@ -5430,8 +5436,14 @@ ${COLORS.cyan}${COLORS.bold}\u26A1 ${response.name || id}${COLORS.reset}`);
|
|
|
5430
5436
|
`);
|
|
5431
5437
|
console.log(response.content);
|
|
5432
5438
|
console.log();
|
|
5433
|
-
} catch (
|
|
5434
|
-
|
|
5439
|
+
} catch (err) {
|
|
5440
|
+
if (err.status === 404) {
|
|
5441
|
+
print.error(`Skill not found: ${id}`);
|
|
5442
|
+
} else if (err.status === 403) {
|
|
5443
|
+
print.warning("This feature requires a paid Bootspring plan.");
|
|
5444
|
+
} else {
|
|
5445
|
+
print.error(`Failed to load skill: ${err.message || "Unknown error"}`);
|
|
5446
|
+
}
|
|
5435
5447
|
}
|
|
5436
5448
|
}
|
|
5437
5449
|
async function searchSkills(query) {
|
|
@@ -5466,7 +5478,7 @@ ${COLORS.bold}${cat}${COLORS.reset}`);
|
|
|
5466
5478
|
});
|
|
5467
5479
|
}
|
|
5468
5480
|
console.log();
|
|
5469
|
-
} catch (
|
|
5481
|
+
} catch (err) {
|
|
5470
5482
|
if (err.status === 403) {
|
|
5471
5483
|
print.warning("This feature requires a paid Bootspring plan.");
|
|
5472
5484
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
@@ -5704,8 +5716,8 @@ ${COLORS.bold}Limits & Usage${COLORS.reset}`);
|
|
|
5704
5716
|
console.log(`${COLORS.dim}Projects:${COLORS.reset} ${usage.projects} / ${limits.projects}`);
|
|
5705
5717
|
console.log(`${COLORS.dim}API Calls:${COLORS.reset} ${usage.apiCalls} / ${limits.apiCalls}`);
|
|
5706
5718
|
console.log();
|
|
5707
|
-
} catch (
|
|
5708
|
-
print.error(`Failed to fetch billing status: ${
|
|
5719
|
+
} catch (err) {
|
|
5720
|
+
print.error(`Failed to fetch billing status: ${err.message}`);
|
|
5709
5721
|
}
|
|
5710
5722
|
}
|
|
5711
5723
|
async function showUsage() {
|
|
@@ -5721,8 +5733,8 @@ ${COLORS.bold}Detailed Usage${COLORS.reset}`);
|
|
|
5721
5733
|
console.log(`${COLORS.dim}Total Requests:${COLORS.reset} ${usage.totalRequests}`);
|
|
5722
5734
|
console.log(`${COLORS.dim}Agent Invocations:${COLORS.reset} ${usage.agentInvokes}`);
|
|
5723
5735
|
console.log();
|
|
5724
|
-
} catch (
|
|
5725
|
-
print.error(`Failed to fetch usage: ${
|
|
5736
|
+
} catch (err) {
|
|
5737
|
+
print.error(`Failed to fetch usage: ${err.message}`);
|
|
5726
5738
|
}
|
|
5727
5739
|
}
|
|
5728
5740
|
async function upgrade() {
|
|
@@ -5749,8 +5761,8 @@ async function portal() {
|
|
|
5749
5761
|
${COLORS.bold}Billing Portal:${COLORS.reset}`);
|
|
5750
5762
|
console.log(` ${COLORS.cyan}${url}${COLORS.reset}
|
|
5751
5763
|
`);
|
|
5752
|
-
} catch (
|
|
5753
|
-
print.error(`Failed to get portal URL: ${
|
|
5764
|
+
} catch (err) {
|
|
5765
|
+
print.error(`Failed to get portal URL: ${err.message}`);
|
|
5754
5766
|
}
|
|
5755
5767
|
}
|
|
5756
5768
|
|
|
@@ -7631,8 +7643,8 @@ function registerBuildCommand(program3) {
|
|
|
7631
7643
|
if (!fs7.existsSync(dir)) fs7.mkdirSync(dir, { recursive: true });
|
|
7632
7644
|
fs7.writeFileSync(todoFile, todoContent);
|
|
7633
7645
|
print.success(`Migrated ${tasks.length} tasks to planning/TODO.md`);
|
|
7634
|
-
} catch (
|
|
7635
|
-
print.error(`Migration failed: ${
|
|
7646
|
+
} catch (err) {
|
|
7647
|
+
print.error(`Migration failed: ${err.message}`);
|
|
7636
7648
|
}
|
|
7637
7649
|
});
|
|
7638
7650
|
build.command("backfill").aliases(["recover", "hydrate", "bootstrap"]).description("Recover build artifacts from existing codebase").action(() => {
|
|
@@ -7774,7 +7786,7 @@ function registerHealthCommand(program3) {
|
|
|
7774
7786
|
checks.push({ name: "MCP Config (global)", status: "fail", message: "~/.claude/settings.json is invalid JSON" });
|
|
7775
7787
|
}
|
|
7776
7788
|
} else {
|
|
7777
|
-
checks.push({ name: "MCP Config", status: "
|
|
7789
|
+
checks.push({ name: "MCP Config", status: "warn", message: "No MCP config found. Run `bootspring doctor --fix-claude-config`" });
|
|
7778
7790
|
}
|
|
7779
7791
|
try {
|
|
7780
7792
|
const result = (0, import_child_process2.execSync)(
|
|
@@ -7786,13 +7798,13 @@ function registerHealthCommand(program3) {
|
|
|
7786
7798
|
if (parsed.result?.serverInfo) {
|
|
7787
7799
|
checks.push({ name: "MCP Server", status: "pass", message: `${parsed.result.serverInfo.name} v${parsed.result.serverInfo.version}` });
|
|
7788
7800
|
} else {
|
|
7789
|
-
checks.push({ name: "MCP Server", status: "
|
|
7801
|
+
checks.push({ name: "MCP Server", status: "warn", message: "Server responded but no serverInfo" });
|
|
7790
7802
|
}
|
|
7791
7803
|
} else {
|
|
7792
|
-
checks.push({ name: "MCP Server", status: "
|
|
7804
|
+
checks.push({ name: "MCP Server", status: "warn", message: "No response from MCP server (stdout may be corrupted)" });
|
|
7793
7805
|
}
|
|
7794
7806
|
} catch {
|
|
7795
|
-
checks.push({ name: "MCP Server", status: "
|
|
7807
|
+
checks.push({ name: "MCP Server", status: "warn", message: "MCP server not reachable. Check `bootspring mcp status`" });
|
|
7796
7808
|
}
|
|
7797
7809
|
if (auth_exports.isAuthenticated()) {
|
|
7798
7810
|
checks.push({ name: "Authentication", status: "pass", message: "Logged in" });
|
|
@@ -7827,15 +7839,16 @@ function registerHealthCommand(program3) {
|
|
|
7827
7839
|
}
|
|
7828
7840
|
}
|
|
7829
7841
|
if (!opts.local) {
|
|
7842
|
+
const apiFailLevel = opts.api ? "fail" : "warn";
|
|
7830
7843
|
try {
|
|
7831
7844
|
const status = await api_client_exports.healthCheck();
|
|
7832
7845
|
if (status.connected) {
|
|
7833
7846
|
checks.push({ name: "API Connection", status: "pass", message: `Connected (v${status.version || "unknown"})` });
|
|
7834
7847
|
} else {
|
|
7835
|
-
checks.push({ name: "API Connection", status:
|
|
7848
|
+
checks.push({ name: "API Connection", status: apiFailLevel, message: "Cannot connect" });
|
|
7836
7849
|
}
|
|
7837
7850
|
} catch {
|
|
7838
|
-
checks.push({ name: "API Connection", status:
|
|
7851
|
+
checks.push({ name: "API Connection", status: apiFailLevel, message: "Connection failed" });
|
|
7839
7852
|
}
|
|
7840
7853
|
}
|
|
7841
7854
|
let passCount = 0;
|
|
@@ -9297,8 +9310,8 @@ function runCheck(check) {
|
|
|
9297
9310
|
});
|
|
9298
9311
|
return { passed: true, output };
|
|
9299
9312
|
} catch (error) {
|
|
9300
|
-
const
|
|
9301
|
-
return { passed: false, output:
|
|
9313
|
+
const err = error;
|
|
9314
|
+
return { passed: false, output: err.stdout || err.stderr || "Check failed" };
|
|
9302
9315
|
}
|
|
9303
9316
|
}
|
|
9304
9317
|
function runGate(gateId, opts) {
|
|
@@ -9694,10 +9707,10 @@ function runCheck2(name, fn) {
|
|
|
9694
9707
|
const result = fn();
|
|
9695
9708
|
return { name, result };
|
|
9696
9709
|
} catch (error) {
|
|
9697
|
-
const
|
|
9710
|
+
const err = error;
|
|
9698
9711
|
return {
|
|
9699
9712
|
name,
|
|
9700
|
-
result: { status: "fail", detail: `Error: ${
|
|
9713
|
+
result: { status: "fail", detail: `Error: ${err.message}` }
|
|
9701
9714
|
};
|
|
9702
9715
|
}
|
|
9703
9716
|
}
|
|
@@ -11865,13 +11878,13 @@ function registerOrgCommand(program3) {
|
|
|
11865
11878
|
if (o.memberCount != null) print.dim(` Members: ${o.memberCount}`);
|
|
11866
11879
|
}
|
|
11867
11880
|
console.log("");
|
|
11868
|
-
} catch (
|
|
11881
|
+
} catch (err) {
|
|
11869
11882
|
spinner.stop();
|
|
11870
|
-
if (
|
|
11883
|
+
if (err.status === 403) {
|
|
11871
11884
|
print.warning("This feature requires a paid plan.");
|
|
11872
11885
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
11873
11886
|
} else {
|
|
11874
|
-
print.error(`Failed: ${
|
|
11887
|
+
print.error(`Failed: ${err.message}`);
|
|
11875
11888
|
}
|
|
11876
11889
|
}
|
|
11877
11890
|
});
|
|
@@ -11899,13 +11912,13 @@ function registerOrgCommand(program3) {
|
|
|
11899
11912
|
if (o.policy?.profile) console.log(` Policy: ${getProfileBadge(o.policy.profile)}`);
|
|
11900
11913
|
if (o.owner) console.log(` Owner: ${o.owner.email || o.owner.name || o.owner.id}`);
|
|
11901
11914
|
console.log("");
|
|
11902
|
-
} catch (
|
|
11915
|
+
} catch (err) {
|
|
11903
11916
|
spinner.stop();
|
|
11904
|
-
if (
|
|
11917
|
+
if (err.status === 403) {
|
|
11905
11918
|
print.warning("This feature requires a paid plan.");
|
|
11906
11919
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
11907
11920
|
} else {
|
|
11908
|
-
print.error(`Failed: ${
|
|
11921
|
+
print.error(`Failed: ${err.message}`);
|
|
11909
11922
|
}
|
|
11910
11923
|
}
|
|
11911
11924
|
});
|
|
@@ -11948,13 +11961,13 @@ function registerOrgCommand(program3) {
|
|
|
11948
11961
|
}
|
|
11949
11962
|
console.log("");
|
|
11950
11963
|
}
|
|
11951
|
-
} catch (
|
|
11964
|
+
} catch (err) {
|
|
11952
11965
|
spinner.stop();
|
|
11953
|
-
if (
|
|
11966
|
+
if (err.status === 403) {
|
|
11954
11967
|
print.warning("This feature requires a paid plan.");
|
|
11955
11968
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
11956
11969
|
} else {
|
|
11957
|
-
print.error(`Failed: ${
|
|
11970
|
+
print.error(`Failed: ${err.message}`);
|
|
11958
11971
|
}
|
|
11959
11972
|
}
|
|
11960
11973
|
});
|
|
@@ -11979,13 +11992,13 @@ function registerOrgCommand(program3) {
|
|
|
11979
11992
|
try {
|
|
11980
11993
|
await api_client_exports.request("PUT", `/organizations/${resolvedOrgId}/policy`, { profile });
|
|
11981
11994
|
spinner.succeed(`Policy updated to "${profile}" for ${resolvedOrgId}`);
|
|
11982
|
-
} catch (
|
|
11995
|
+
} catch (err) {
|
|
11983
11996
|
spinner.stop();
|
|
11984
|
-
if (
|
|
11997
|
+
if (err.status === 403) {
|
|
11985
11998
|
print.warning("This feature requires a paid plan.");
|
|
11986
11999
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
11987
12000
|
} else {
|
|
11988
|
-
print.error(`Failed: ${
|
|
12001
|
+
print.error(`Failed: ${err.message}`);
|
|
11989
12002
|
}
|
|
11990
12003
|
}
|
|
11991
12004
|
});
|
|
@@ -12043,13 +12056,13 @@ function registerOrgCommand(program3) {
|
|
|
12043
12056
|
}
|
|
12044
12057
|
console.log("");
|
|
12045
12058
|
print.dim(`Total: ${members.length} member${members.length !== 1 ? "s" : ""}`);
|
|
12046
|
-
} catch (
|
|
12059
|
+
} catch (err) {
|
|
12047
12060
|
spinner.stop();
|
|
12048
|
-
if (
|
|
12061
|
+
if (err.status === 403) {
|
|
12049
12062
|
print.warning("This feature requires a paid plan.");
|
|
12050
12063
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
12051
12064
|
} else {
|
|
12052
|
-
print.error(`Failed: ${
|
|
12065
|
+
print.error(`Failed: ${err.message}`);
|
|
12053
12066
|
}
|
|
12054
12067
|
}
|
|
12055
12068
|
});
|
|
@@ -12080,13 +12093,13 @@ function registerOrgCommand(program3) {
|
|
|
12080
12093
|
}
|
|
12081
12094
|
}
|
|
12082
12095
|
console.log("");
|
|
12083
|
-
} catch (
|
|
12096
|
+
} catch (err) {
|
|
12084
12097
|
spinner.stop();
|
|
12085
|
-
if (
|
|
12098
|
+
if (err.status === 403) {
|
|
12086
12099
|
print.warning("This feature requires a paid plan.");
|
|
12087
12100
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
12088
12101
|
} else {
|
|
12089
|
-
print.error(`Failed: ${
|
|
12102
|
+
print.error(`Failed: ${err.message}`);
|
|
12090
12103
|
}
|
|
12091
12104
|
}
|
|
12092
12105
|
});
|
|
@@ -15130,12 +15143,12 @@ ${generateBadges(results)}`);
|
|
|
15130
15143
|
history: state.history
|
|
15131
15144
|
});
|
|
15132
15145
|
print.success("Metrics synced to remote dashboard.");
|
|
15133
|
-
} catch (
|
|
15134
|
-
if (
|
|
15146
|
+
} catch (err) {
|
|
15147
|
+
if (err.status === 403) {
|
|
15135
15148
|
print.warning("Metrics sync requires a paid Bootspring plan.");
|
|
15136
15149
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
15137
15150
|
} else {
|
|
15138
|
-
print.error(`Sync failed: ${
|
|
15151
|
+
print.error(`Sync failed: ${err.message}`);
|
|
15139
15152
|
}
|
|
15140
15153
|
}
|
|
15141
15154
|
});
|
|
@@ -15358,8 +15371,8 @@ function registerMvpCommand(program3) {
|
|
|
15358
15371
|
}
|
|
15359
15372
|
referenced.push({ source: analysis.path, reason: `Quality: ${analysis.qualityScore}%` });
|
|
15360
15373
|
}
|
|
15361
|
-
} catch (
|
|
15362
|
-
errors.push({ file: path39.relative(cwd, filePath), error:
|
|
15374
|
+
} catch (err) {
|
|
15375
|
+
errors.push({ file: path39.relative(cwd, filePath), error: err.message });
|
|
15363
15376
|
}
|
|
15364
15377
|
}
|
|
15365
15378
|
if (imported.length > 0) {
|
|
@@ -15386,8 +15399,8 @@ function registerMvpCommand(program3) {
|
|
|
15386
15399
|
}
|
|
15387
15400
|
if (errors.length > 0) {
|
|
15388
15401
|
console.log(`Errors (${errors.length}):`);
|
|
15389
|
-
for (const
|
|
15390
|
-
print.error(`${
|
|
15402
|
+
for (const err of errors) {
|
|
15403
|
+
print.error(`${err.file}: ${err.error}`);
|
|
15391
15404
|
}
|
|
15392
15405
|
console.log("");
|
|
15393
15406
|
}
|
|
@@ -16104,8 +16117,8 @@ function registerLearnCommand(program3) {
|
|
|
16104
16117
|
console.log(` Quality Patterns: ${learnings.qualityPatterns.length} patterns`);
|
|
16105
16118
|
}
|
|
16106
16119
|
console.log("");
|
|
16107
|
-
} catch (
|
|
16108
|
-
spinner.fail(`Failed to learn from organization: ${
|
|
16120
|
+
} catch (err) {
|
|
16121
|
+
spinner.fail(`Failed to learn from organization: ${err.message}`);
|
|
16109
16122
|
}
|
|
16110
16123
|
});
|
|
16111
16124
|
org.command("recommend").description("Get recommendations for new projects").option("--type <type>", "Project type").option("--features <features>", "Comma-separated features").action(async (opts) => {
|
|
@@ -16301,8 +16314,8 @@ function registerLearnCommand(program3) {
|
|
|
16301
16314
|
console.log("");
|
|
16302
16315
|
}
|
|
16303
16316
|
}
|
|
16304
|
-
} catch (
|
|
16305
|
-
spinner.fail(`Analysis failed: ${
|
|
16317
|
+
} catch (err) {
|
|
16318
|
+
spinner.fail(`Analysis failed: ${err.message}`);
|
|
16306
16319
|
}
|
|
16307
16320
|
});
|
|
16308
16321
|
antipattern.command("list").description("List known anti-patterns").action(async () => {
|
|
@@ -16449,8 +16462,8 @@ function registerLearnCommand(program3) {
|
|
|
16449
16462
|
console.log(`${COLORS.dim}Sources: ${activeSources.join(", ")}${COLORS.reset}
|
|
16450
16463
|
`);
|
|
16451
16464
|
}
|
|
16452
|
-
} catch (
|
|
16453
|
-
spinner.fail(`Failed to generate recommendations: ${
|
|
16465
|
+
} catch (err) {
|
|
16466
|
+
spinner.fail(`Failed to generate recommendations: ${err.message}`);
|
|
16454
16467
|
}
|
|
16455
16468
|
});
|
|
16456
16469
|
recommend.command("quick <question...>").description("Get quick answer to a question").action(async (question) => {
|
|
@@ -16500,8 +16513,8 @@ function registerLearnCommand(program3) {
|
|
|
16500
16513
|
}
|
|
16501
16514
|
}
|
|
16502
16515
|
console.log("");
|
|
16503
|
-
} catch (
|
|
16504
|
-
console.log(`${COLORS.red}Failed: ${
|
|
16516
|
+
} catch (err) {
|
|
16517
|
+
console.log(`${COLORS.red}Failed: ${err.message}${COLORS.reset}`);
|
|
16505
16518
|
}
|
|
16506
16519
|
});
|
|
16507
16520
|
recommend.command("report").description("Generate recommendation report").action(async () => {
|
|
@@ -16532,8 +16545,8 @@ function registerLearnCommand(program3) {
|
|
|
16532
16545
|
console.log(` - [${rec.type}] ${rec.title} (${rec.confidenceLevel})`);
|
|
16533
16546
|
}
|
|
16534
16547
|
console.log("");
|
|
16535
|
-
} catch (
|
|
16536
|
-
console.log(`${COLORS.red}Failed to generate report: ${
|
|
16548
|
+
} catch (err) {
|
|
16549
|
+
console.log(`${COLORS.red}Failed to generate report: ${err.message}${COLORS.reset}`);
|
|
16537
16550
|
}
|
|
16538
16551
|
});
|
|
16539
16552
|
}
|
|
@@ -16603,8 +16616,8 @@ function extractLearnings(options = {}) {
|
|
|
16603
16616
|
(l) => l.summary.length > 5 && !l.summary.startsWith("Merge ") && !l.summary.startsWith("merge ")
|
|
16604
16617
|
);
|
|
16605
16618
|
return { learnings: filtered, total: lines.length };
|
|
16606
|
-
} catch (
|
|
16607
|
-
return { learnings: [], total: 0, error:
|
|
16619
|
+
} catch (err) {
|
|
16620
|
+
return { learnings: [], total: 0, error: err.message };
|
|
16608
16621
|
}
|
|
16609
16622
|
}
|
|
16610
16623
|
function groupByCategory(learnings) {
|
|
@@ -16744,8 +16757,8 @@ function registerMemoryCommand(program3) {
|
|
|
16744
16757
|
... and ${sorted.length - 20} more files`);
|
|
16745
16758
|
}
|
|
16746
16759
|
console.log("");
|
|
16747
|
-
} catch (
|
|
16748
|
-
print.error(
|
|
16760
|
+
} catch (err) {
|
|
16761
|
+
print.error(err.message);
|
|
16749
16762
|
}
|
|
16750
16763
|
});
|
|
16751
16764
|
memory.command("export").description("Export learnings as JSON").option("--limit <n>", "Number of commits", "50").option("--since <date>", "How far back to look", "3 months ago").action((opts) => {
|
|
@@ -17252,18 +17265,18 @@ function requireAuth() {
|
|
|
17252
17265
|
print.error('Not logged in. Run "bootspring auth login" first.');
|
|
17253
17266
|
return false;
|
|
17254
17267
|
}
|
|
17255
|
-
function handleApiError(
|
|
17256
|
-
if (
|
|
17268
|
+
function handleApiError(err, context) {
|
|
17269
|
+
if (err.status === 403) {
|
|
17257
17270
|
print.warning("This feature requires a paid Bootspring plan.");
|
|
17258
17271
|
print.dim("Upgrade: https://bootspring.com/pricing");
|
|
17259
17272
|
return;
|
|
17260
17273
|
}
|
|
17261
|
-
if (
|
|
17274
|
+
if (err.message?.includes("Cannot connect") || err.code === "ECONNREFUSED") {
|
|
17262
17275
|
print.error("Cannot connect to Bootspring API.");
|
|
17263
17276
|
print.dim("Check your internet connection or try again later.");
|
|
17264
17277
|
return;
|
|
17265
17278
|
}
|
|
17266
|
-
print.error(`${context}: ${
|
|
17279
|
+
print.error(`${context}: ${err.message}`);
|
|
17267
17280
|
}
|
|
17268
17281
|
function registerOrchestratorCommand(program3) {
|
|
17269
17282
|
const orchestrator = program3.command("orchestrator").description("Hosted workflow orchestration");
|
|
@@ -17288,9 +17301,9 @@ function registerOrchestratorCommand(program3) {
|
|
|
17288
17301
|
}
|
|
17289
17302
|
console.log("");
|
|
17290
17303
|
}
|
|
17291
|
-
} catch (
|
|
17304
|
+
} catch (err) {
|
|
17292
17305
|
spinner.fail("Failed to fetch workflows");
|
|
17293
|
-
handleApiError(
|
|
17306
|
+
handleApiError(err, "Failed to list workflows");
|
|
17294
17307
|
}
|
|
17295
17308
|
});
|
|
17296
17309
|
orchestrator.command("workflow [id]").description("Show workflow details").action(async (id) => {
|
|
@@ -17324,9 +17337,9 @@ function registerOrchestratorCommand(program3) {
|
|
|
17324
17337
|
console.log(` ${workflow.agents.join(", ")}`);
|
|
17325
17338
|
console.log("");
|
|
17326
17339
|
}
|
|
17327
|
-
} catch (
|
|
17340
|
+
} catch (err) {
|
|
17328
17341
|
spinner.fail("Failed to load workflow");
|
|
17329
|
-
handleApiError(
|
|
17342
|
+
handleApiError(err, `Failed to fetch workflow "${id}"`);
|
|
17330
17343
|
}
|
|
17331
17344
|
});
|
|
17332
17345
|
orchestrator.command("analyze [task]").description("Analyze project context").action(async (task) => {
|
|
@@ -17365,9 +17378,9 @@ function registerOrchestratorCommand(program3) {
|
|
|
17365
17378
|
}
|
|
17366
17379
|
console.log("");
|
|
17367
17380
|
}
|
|
17368
|
-
} catch (
|
|
17381
|
+
} catch (err) {
|
|
17369
17382
|
spinner.fail("Analysis failed");
|
|
17370
|
-
handleApiError(
|
|
17383
|
+
handleApiError(err, "Failed to analyze context");
|
|
17371
17384
|
}
|
|
17372
17385
|
});
|
|
17373
17386
|
orchestrator.command("suggest [task]").description("Get hosted suggestions").action(async (task) => {
|
|
@@ -17400,9 +17413,9 @@ function registerOrchestratorCommand(program3) {
|
|
|
17400
17413
|
console.log(` ${COLORS.cyan}${suggestion.type || "suggestion"}${COLORS.reset} ${COLORS.dim}${JSON.stringify(suggestion)}${COLORS.reset}`);
|
|
17401
17414
|
}
|
|
17402
17415
|
console.log("");
|
|
17403
|
-
} catch (
|
|
17416
|
+
} catch (err) {
|
|
17404
17417
|
spinner.fail("Failed to get suggestions");
|
|
17405
|
-
handleApiError(
|
|
17418
|
+
handleApiError(err, "Failed to get suggestions");
|
|
17406
17419
|
}
|
|
17407
17420
|
});
|
|
17408
17421
|
orchestrator.command("start <id>").description("Start a hosted workflow").action(async (id) => {
|
|
@@ -17427,9 +17440,9 @@ function registerOrchestratorCommand(program3) {
|
|
|
17427
17440
|
});
|
|
17428
17441
|
console.log("");
|
|
17429
17442
|
}
|
|
17430
|
-
} catch (
|
|
17443
|
+
} catch (err) {
|
|
17431
17444
|
spinner.fail("Failed to start workflow");
|
|
17432
|
-
handleApiError(
|
|
17445
|
+
handleApiError(err, `Failed to start workflow "${id}"`);
|
|
17433
17446
|
}
|
|
17434
17447
|
});
|
|
17435
17448
|
orchestrator.command("status").description("Show orchestrator access").action(async () => {
|
|
@@ -17446,9 +17459,9 @@ function registerOrchestratorCommand(program3) {
|
|
|
17446
17459
|
console.log(` ${COLORS.bold}Hosted workflows:${COLORS.reset} ${workflows.length}`);
|
|
17447
17460
|
console.log(` ${COLORS.bold}Accessible:${COLORS.reset} ${accessible}`);
|
|
17448
17461
|
console.log("");
|
|
17449
|
-
} catch (
|
|
17462
|
+
} catch (err) {
|
|
17450
17463
|
spinner.fail("Failed to fetch status");
|
|
17451
|
-
handleApiError(
|
|
17464
|
+
handleApiError(err, "Failed to fetch orchestrator status");
|
|
17452
17465
|
}
|
|
17453
17466
|
});
|
|
17454
17467
|
orchestrator.command("next").description("Advance to next workflow step").option("--workflow <id>", "Specify workflow ID (uses active workflow if omitted)").action(async (opts) => {
|
|
@@ -17472,9 +17485,9 @@ function registerOrchestratorCommand(program3) {
|
|
|
17472
17485
|
spinner.info("No next step available");
|
|
17473
17486
|
}
|
|
17474
17487
|
console.log("");
|
|
17475
|
-
} catch (
|
|
17488
|
+
} catch (err) {
|
|
17476
17489
|
spinner.fail("Failed to advance");
|
|
17477
|
-
handleApiError(
|
|
17490
|
+
handleApiError(err, "Failed to advance workflow");
|
|
17478
17491
|
}
|
|
17479
17492
|
});
|
|
17480
17493
|
orchestrator.command("checkpoint [workflow] [step]").description("Mark workflow completion signal").option("--message <msg>", "Checkpoint message").action(async (workflow, step, opts) => {
|
|
@@ -17491,9 +17504,9 @@ function registerOrchestratorCommand(program3) {
|
|
|
17491
17504
|
console.log(` ${COLORS.dim}Progress: ${response.progress}%${COLORS.reset}`);
|
|
17492
17505
|
}
|
|
17493
17506
|
console.log("");
|
|
17494
|
-
} catch (
|
|
17507
|
+
} catch (err) {
|
|
17495
17508
|
spinner.fail("Checkpoint failed");
|
|
17496
|
-
handleApiError(
|
|
17509
|
+
handleApiError(err, "Failed to record checkpoint");
|
|
17497
17510
|
}
|
|
17498
17511
|
});
|
|
17499
17512
|
orchestrator.command("agents").description("List available agents").action(async () => {
|
|
@@ -17516,9 +17529,9 @@ function registerOrchestratorCommand(program3) {
|
|
|
17516
17529
|
}
|
|
17517
17530
|
console.log("");
|
|
17518
17531
|
}
|
|
17519
|
-
} catch (
|
|
17532
|
+
} catch (err) {
|
|
17520
17533
|
spinner.fail("Failed to fetch agents");
|
|
17521
|
-
handleApiError(
|
|
17534
|
+
handleApiError(err, "Failed to list agents");
|
|
17522
17535
|
}
|
|
17523
17536
|
});
|
|
17524
17537
|
orchestrator.action(() => {
|
|
@@ -18644,8 +18657,8 @@ var FileWatcher = class extends import_events.EventEmitter {
|
|
|
18644
18657
|
}
|
|
18645
18658
|
});
|
|
18646
18659
|
this.watchers.push(watcher);
|
|
18647
|
-
} catch (
|
|
18648
|
-
this.emit("error", { type, error:
|
|
18660
|
+
} catch (err) {
|
|
18661
|
+
this.emit("error", { type, error: err });
|
|
18649
18662
|
}
|
|
18650
18663
|
}
|
|
18651
18664
|
watchDirectory(dirPath, type) {
|
|
@@ -18658,8 +18671,8 @@ var FileWatcher = class extends import_events.EventEmitter {
|
|
|
18658
18671
|
}
|
|
18659
18672
|
});
|
|
18660
18673
|
this.watchers.push(watcher);
|
|
18661
|
-
} catch (
|
|
18662
|
-
this.emit("error", { type, error:
|
|
18674
|
+
} catch (err) {
|
|
18675
|
+
this.emit("error", { type, error: err });
|
|
18663
18676
|
}
|
|
18664
18677
|
}
|
|
18665
18678
|
debouncedHandle(filePath, type) {
|
|
@@ -18703,8 +18716,8 @@ var FileWatcher = class extends import_events.EventEmitter {
|
|
|
18703
18716
|
}
|
|
18704
18717
|
}
|
|
18705
18718
|
}
|
|
18706
|
-
} catch (
|
|
18707
|
-
this.emit("error", { type, filePath, error:
|
|
18719
|
+
} catch (err) {
|
|
18720
|
+
this.emit("error", { type, filePath, error: err });
|
|
18708
18721
|
}
|
|
18709
18722
|
}
|
|
18710
18723
|
loadTodoState(filePath) {
|
|
@@ -18773,8 +18786,8 @@ function registerWatchCommand(program3) {
|
|
|
18773
18786
|
console.log(`${COLORS.dim}${parts.join(" | ")}${COLORS.reset}`);
|
|
18774
18787
|
console.log("");
|
|
18775
18788
|
});
|
|
18776
|
-
watcher.on("error", (
|
|
18777
|
-
console.log(`${COLORS.red}Error:${COLORS.reset} ${
|
|
18789
|
+
watcher.on("error", (err) => {
|
|
18790
|
+
console.log(`${COLORS.red}Error:${COLORS.reset} ${err.type} - ${err.error?.message || "Unknown error"}`);
|
|
18778
18791
|
});
|
|
18779
18792
|
watcher.start();
|
|
18780
18793
|
process.on("SIGINT", () => {
|
|
@@ -19187,8 +19200,8 @@ async function scanProjects(dir) {
|
|
|
19187
19200
|
found.push({ name: entry.name, path: dirPath });
|
|
19188
19201
|
}
|
|
19189
19202
|
}
|
|
19190
|
-
} catch (
|
|
19191
|
-
print.error(`Scan failed: ${
|
|
19203
|
+
} catch (err) {
|
|
19204
|
+
print.error(`Scan failed: ${err.message}`);
|
|
19192
19205
|
return;
|
|
19193
19206
|
}
|
|
19194
19207
|
print.success(`Found ${found.length} project(s)`);
|
|
@@ -19246,8 +19259,8 @@ function upsertJsonMcp(name, configPath, assistant) {
|
|
|
19246
19259
|
fs53.writeFileSync(configPath, `${JSON.stringify(settings, null, 2)}
|
|
19247
19260
|
`, "utf-8");
|
|
19248
19261
|
return { name, path: configPath, status: "updated" };
|
|
19249
|
-
} catch (
|
|
19250
|
-
return { name, path: configPath, status: "error", reason:
|
|
19262
|
+
} catch (err) {
|
|
19263
|
+
return { name, path: configPath, status: "error", reason: err.message };
|
|
19251
19264
|
}
|
|
19252
19265
|
}
|
|
19253
19266
|
function upsertCodexToml() {
|
|
@@ -19269,8 +19282,8 @@ env = { BOOTSPRING_ASSISTANT = "codex" }
|
|
|
19269
19282
|
${block}` : block;
|
|
19270
19283
|
fs53.writeFileSync(configPath, content, "utf-8");
|
|
19271
19284
|
return { name: "Codex", path: configPath, status: "updated" };
|
|
19272
|
-
} catch (
|
|
19273
|
-
return { name: "Codex", path: configPath, status: "error", reason:
|
|
19285
|
+
} catch (err) {
|
|
19286
|
+
return { name: "Codex", path: configPath, status: "error", reason: err.message };
|
|
19274
19287
|
}
|
|
19275
19288
|
}
|
|
19276
19289
|
function printResult(result) {
|
|
@@ -19335,8 +19348,8 @@ ${COLORS.cyan}${COLORS.bold}Bootspring Setup Status${COLORS.reset}
|
|
|
19335
19348
|
status: settings.mcpServers?.bootspring?.command ? "unchanged" : "error",
|
|
19336
19349
|
reason: settings.mcpServers?.bootspring?.command ? void 0 : "bootspring entry missing"
|
|
19337
19350
|
});
|
|
19338
|
-
} catch (
|
|
19339
|
-
checks.push({ name: "Claude Code", path: claudePath, status: "error", reason:
|
|
19351
|
+
} catch (err) {
|
|
19352
|
+
checks.push({ name: "Claude Code", path: claudePath, status: "error", reason: err.message });
|
|
19340
19353
|
}
|
|
19341
19354
|
} else {
|
|
19342
19355
|
checks.push({ name: "Claude Code", path: claudePath, status: "error", reason: "config missing" });
|
|
@@ -19366,8 +19379,8 @@ ${COLORS.cyan}${COLORS.bold}Bootspring Setup Status${COLORS.reset}
|
|
|
19366
19379
|
status: settings.mcpServers?.bootspring?.command ? "unchanged" : "error",
|
|
19367
19380
|
reason: settings.mcpServers?.bootspring?.command ? void 0 : "bootspring entry missing"
|
|
19368
19381
|
});
|
|
19369
|
-
} catch (
|
|
19370
|
-
checks.push({ name: "Gemini CLI", path: geminiPath, status: "error", reason:
|
|
19382
|
+
} catch (err) {
|
|
19383
|
+
checks.push({ name: "Gemini CLI", path: geminiPath, status: "error", reason: err.message });
|
|
19371
19384
|
}
|
|
19372
19385
|
} else {
|
|
19373
19386
|
checks.push({ name: "Gemini CLI", path: geminiPath, status: "error", reason: "config missing" });
|
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.3",
|
|
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.3",
|
|
49
49
|
description: "Thin client for Bootspring cloud MCP, hosted agents, and paywalled workflow intelligence",
|
|
50
50
|
keywords: [
|
|
51
51
|
"ai",
|