@brainbase-labs/cli 0.8.0 → 0.8.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/index.js +72 -9
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -29449,7 +29449,7 @@ function padStart(s, n) {
|
|
|
29449
29449
|
// package.json
|
|
29450
29450
|
var package_default = {
|
|
29451
29451
|
name: "@brainbase-labs/cli",
|
|
29452
|
-
version: "0.8.
|
|
29452
|
+
version: "0.8.2",
|
|
29453
29453
|
description: "Pack, share, and install agent templates across harnesses (Claude Code, Codex, ...).",
|
|
29454
29454
|
type: "module",
|
|
29455
29455
|
bin: {
|
|
@@ -34555,6 +34555,69 @@ ${block}
|
|
|
34555
34555
|
fs8.writeFileSync(instructionsFile, next);
|
|
34556
34556
|
}
|
|
34557
34557
|
|
|
34558
|
+
// src/core/mcp-proxy.ts
|
|
34559
|
+
var DEFAULT_MCP_PROXY_BASE = "https://brainbase-mcp-proxy.onrender.com";
|
|
34560
|
+
var THREAD_ID_TEMPLATE = "${BRAINBASE_THREAD_ID}";
|
|
34561
|
+
var PROXY_AUTH_HEADER = "Bearer ${BRAINBASE_TOKEN}";
|
|
34562
|
+
function mcpProxyBaseUrl() {
|
|
34563
|
+
const envOverride = process.env.BRAINBASE_MCP_PROXY_URL;
|
|
34564
|
+
if (envOverride) {
|
|
34565
|
+
const stripped = envOverride.replace(/\/+$/, "");
|
|
34566
|
+
if (stripped)
|
|
34567
|
+
return stripped;
|
|
34568
|
+
}
|
|
34569
|
+
return DEFAULT_MCP_PROXY_BASE;
|
|
34570
|
+
}
|
|
34571
|
+
function proxifyMcpPayload(payload) {
|
|
34572
|
+
if (!payload)
|
|
34573
|
+
return payload;
|
|
34574
|
+
if (!shouldProxy(payload))
|
|
34575
|
+
return payload;
|
|
34576
|
+
const base = mcpProxyBaseUrl();
|
|
34577
|
+
const upstreamUrl = payload.url;
|
|
34578
|
+
const existingHeaders = payload.headers ?? {};
|
|
34579
|
+
return {
|
|
34580
|
+
...payload,
|
|
34581
|
+
url: `${base}/t/${THREAD_ID_TEMPLATE}/${upstreamUrl}`,
|
|
34582
|
+
headers: { ...existingHeaders, Authorization: PROXY_AUTH_HEADER }
|
|
34583
|
+
};
|
|
34584
|
+
}
|
|
34585
|
+
function shouldProxy(payload) {
|
|
34586
|
+
const url = payload.url;
|
|
34587
|
+
if (typeof url !== "string" || url.length === 0)
|
|
34588
|
+
return false;
|
|
34589
|
+
if (typeof payload.command === "string" && payload.command.length > 0)
|
|
34590
|
+
return false;
|
|
34591
|
+
const headers = payload.headers;
|
|
34592
|
+
if (headers && typeof headers === "object" && Object.keys(headers).length > 0) {
|
|
34593
|
+
return false;
|
|
34594
|
+
}
|
|
34595
|
+
if (url.startsWith(mcpProxyBaseUrl()))
|
|
34596
|
+
return false;
|
|
34597
|
+
if (url.includes(`/t/${THREAD_ID_TEMPLATE}/`))
|
|
34598
|
+
return false;
|
|
34599
|
+
return true;
|
|
34600
|
+
}
|
|
34601
|
+
function resolveMcpEnvTemplates(payload, env = process.env) {
|
|
34602
|
+
if (!payload)
|
|
34603
|
+
return payload;
|
|
34604
|
+
const sub = (s) => s.replace(/\$\{([A-Z0-9_]+)\}/g, (literal, name) => {
|
|
34605
|
+
const value = env[name];
|
|
34606
|
+
return value === undefined || value === "" ? literal : value;
|
|
34607
|
+
});
|
|
34608
|
+
const out = { ...payload };
|
|
34609
|
+
if (typeof out.url === "string")
|
|
34610
|
+
out.url = sub(out.url);
|
|
34611
|
+
if (out.headers && typeof out.headers === "object") {
|
|
34612
|
+
const resolved = {};
|
|
34613
|
+
for (const [k2, v2] of Object.entries(out.headers)) {
|
|
34614
|
+
resolved[k2] = typeof v2 === "string" ? sub(v2) : v2;
|
|
34615
|
+
}
|
|
34616
|
+
out.headers = resolved;
|
|
34617
|
+
}
|
|
34618
|
+
return out;
|
|
34619
|
+
}
|
|
34620
|
+
|
|
34558
34621
|
// src/harnesses/claude-code/install.ts
|
|
34559
34622
|
var MARK_START = (name) => `<!-- brainbase:start name=${name} -->`;
|
|
34560
34623
|
var MARK_END = (name) => `<!-- brainbase:end name=${name} -->`;
|
|
@@ -34687,7 +34750,7 @@ async function installMcp(comp, opts, ctx) {
|
|
|
34687
34750
|
}
|
|
34688
34751
|
}
|
|
34689
34752
|
}
|
|
34690
|
-
setMcpServer(mcpStore, comp.slug, normalizeMcpPayload(payload));
|
|
34753
|
+
setMcpServer(mcpStore, comp.slug, normalizeMcpPayload(resolveMcpEnvTemplates(payload)));
|
|
34691
34754
|
return {
|
|
34692
34755
|
type: "mcp",
|
|
34693
34756
|
slug: comp.slug,
|
|
@@ -36531,7 +36594,7 @@ async function installMcp2(comp, opts, ctx) {
|
|
|
36531
36594
|
}
|
|
36532
36595
|
}
|
|
36533
36596
|
}
|
|
36534
|
-
setMcpServer2(config, comp.slug, payload);
|
|
36597
|
+
setMcpServer2(config, comp.slug, resolveMcpEnvTemplates(payload));
|
|
36535
36598
|
return {
|
|
36536
36599
|
type: "mcp",
|
|
36537
36600
|
slug: comp.slug,
|
|
@@ -37290,7 +37353,7 @@ async function installMcp3(comp, opts, ctx) {
|
|
|
37290
37353
|
}
|
|
37291
37354
|
}
|
|
37292
37355
|
}
|
|
37293
|
-
setMcpServer3(mcpStore, comp.slug, normalizeMcpPayload2(payload));
|
|
37356
|
+
setMcpServer3(mcpStore, comp.slug, normalizeMcpPayload2(resolveMcpEnvTemplates(payload)));
|
|
37294
37357
|
return {
|
|
37295
37358
|
type: "mcp",
|
|
37296
37359
|
slug: comp.slug,
|
|
@@ -48057,7 +48120,7 @@ function buildTemplateComponents(manifest, rootDir) {
|
|
|
48057
48120
|
rootDir: path31.join(rootDir, c2.path),
|
|
48058
48121
|
description: c2.description,
|
|
48059
48122
|
target: c2.target,
|
|
48060
|
-
payload: c2.meta?.mcp,
|
|
48123
|
+
payload: proxifyMcpPayload(c2.meta?.mcp),
|
|
48061
48124
|
meta: c2.meta,
|
|
48062
48125
|
checksum: c2.checksum,
|
|
48063
48126
|
source: c2.source
|
|
@@ -52001,7 +52064,7 @@ async function runSync(cwd2, args) {
|
|
|
52001
52064
|
rootDir: path45.join(stageRoot, c2.type, c2.slug),
|
|
52002
52065
|
description: c2.description,
|
|
52003
52066
|
meta: c2.meta,
|
|
52004
|
-
payload: c2.meta?.mcp,
|
|
52067
|
+
payload: proxifyMcpPayload(c2.meta?.mcp),
|
|
52005
52068
|
checksum: c2.hash
|
|
52006
52069
|
}));
|
|
52007
52070
|
const hasUserOrchestrationMcp = toInstall.some((c2) => c2.type === "mcp" && c2.slug === ORCHESTRATION_MCP_SLUG);
|
|
@@ -52688,7 +52751,7 @@ async function runAgentPull(cwd2, args) {
|
|
|
52688
52751
|
rootDir: path48.join(stageRoot, c2.type, c2.slug),
|
|
52689
52752
|
description: c2.description,
|
|
52690
52753
|
meta: c2.meta,
|
|
52691
|
-
payload: c2.meta?.mcp,
|
|
52754
|
+
payload: proxifyMcpPayload(c2.meta?.mcp),
|
|
52692
52755
|
checksum: c2.hash,
|
|
52693
52756
|
source: skillSourceFromMeta(c2)
|
|
52694
52757
|
}));
|
|
@@ -54274,7 +54337,7 @@ async function runAgentUnpack(cwd2, args) {
|
|
|
54274
54337
|
slug: entry.name,
|
|
54275
54338
|
scope,
|
|
54276
54339
|
rootDir: compDir,
|
|
54277
|
-
payload,
|
|
54340
|
+
payload: proxifyMcpPayload(payload),
|
|
54278
54341
|
checksum: ""
|
|
54279
54342
|
});
|
|
54280
54343
|
}
|
|
@@ -54722,7 +54785,7 @@ async function installAgentFresh(input) {
|
|
|
54722
54785
|
rootDir: path53.join(stageRoot, c2.type, c2.slug),
|
|
54723
54786
|
description: c2.description,
|
|
54724
54787
|
meta: c2.meta,
|
|
54725
|
-
payload: c2.meta?.mcp,
|
|
54788
|
+
payload: proxifyMcpPayload(c2.meta?.mcp),
|
|
54726
54789
|
checksum: c2.hash
|
|
54727
54790
|
}));
|
|
54728
54791
|
if (needOrchestrationMcpInstall) {
|