@ai-ecoverse/mcpcat 0.17.6 → 0.17.8
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/host/mcpcat.mjs +26 -24
- package/dist/kernel/mcpcat.mjs +26 -24
- package/package.json +5 -5
package/dist/host/mcpcat.mjs
CHANGED
|
@@ -9855,6 +9855,15 @@ function containsPlaceholders(value) {
|
|
|
9855
9855
|
function expandPlaceholders(value, env) {
|
|
9856
9856
|
return value.replace(PLACEHOLDER, (_, name) => env[name] ?? "");
|
|
9857
9857
|
}
|
|
9858
|
+
var MIN_VAR_SECRET = 8;
|
|
9859
|
+
function placeholderValues(value, env) {
|
|
9860
|
+
const values = [];
|
|
9861
|
+
for (const m of value.matchAll(PLACEHOLDER)) {
|
|
9862
|
+
const v = env[m[1]];
|
|
9863
|
+
if (v !== void 0 && v.length >= MIN_VAR_SECRET) values.push(v);
|
|
9864
|
+
}
|
|
9865
|
+
return values;
|
|
9866
|
+
}
|
|
9858
9867
|
function missingPlaceholders(value, env) {
|
|
9859
9868
|
const missing = [];
|
|
9860
9869
|
for (const m of value.matchAll(PLACEHOLDER)) {
|
|
@@ -11163,6 +11172,12 @@ function redactWrites(platform2, redact2) {
|
|
|
11163
11172
|
write: (fd, data) => platform2.write(fd, typeof data === "string" ? redact2(data) : data)
|
|
11164
11173
|
});
|
|
11165
11174
|
}
|
|
11175
|
+
function redactSecrets(text, secrets) {
|
|
11176
|
+
const ordered = [...secrets].filter((s) => s.length > 0).sort((a, b) => b.length - a.length);
|
|
11177
|
+
let result = text;
|
|
11178
|
+
for (const secret of ordered) result = result.replaceAll(secret, "[REDACTED]");
|
|
11179
|
+
return result;
|
|
11180
|
+
}
|
|
11166
11181
|
|
|
11167
11182
|
// src/render/result.ts
|
|
11168
11183
|
function formatBytes(n) {
|
|
@@ -15362,15 +15377,7 @@ function isSensitiveHeader(name) {
|
|
|
15362
15377
|
return SENSITIVE_HEADER_RE.test(name) || SENSITIVE_NAME_RE.test(name);
|
|
15363
15378
|
}
|
|
15364
15379
|
function redact(text, secrets) {
|
|
15365
|
-
|
|
15366
|
-
for (const secret of secrets) {
|
|
15367
|
-
if (secret.length > 0) {
|
|
15368
|
-
while (result.includes(secret)) {
|
|
15369
|
-
result = result.replace(secret, "[REDACTED]");
|
|
15370
|
-
}
|
|
15371
|
-
}
|
|
15372
|
-
}
|
|
15373
|
-
return result;
|
|
15380
|
+
return redactSecrets(text, secrets);
|
|
15374
15381
|
}
|
|
15375
15382
|
function createVerboseLogger(platform2, enabled) {
|
|
15376
15383
|
const secrets = /* @__PURE__ */ new Set();
|
|
@@ -16448,7 +16455,7 @@ function expandAndCollect(headers, env) {
|
|
|
16448
16455
|
}
|
|
16449
16456
|
const e = expandPlaceholders(v, env);
|
|
16450
16457
|
result[k] = e;
|
|
16451
|
-
if (e !== v) secrets.push(e);
|
|
16458
|
+
if (e !== v) secrets.push(e, ...placeholderValues(v, env));
|
|
16452
16459
|
if (v.length > 0) secrets.push(v);
|
|
16453
16460
|
}
|
|
16454
16461
|
return { expanded: result, secrets, unset };
|
|
@@ -16581,10 +16588,11 @@ async function handleInputRequired(platform2, conn, err, respondData, json, reda
|
|
|
16581
16588
|
return EXIT_INPUT_REQUIRED;
|
|
16582
16589
|
}
|
|
16583
16590
|
try {
|
|
16584
|
-
const retryResult = await conn.callTool(
|
|
16585
|
-
|
|
16586
|
-
|
|
16587
|
-
|
|
16591
|
+
const retryResult = await conn.callTool(
|
|
16592
|
+
parsed2.name,
|
|
16593
|
+
parsed2.arguments,
|
|
16594
|
+
{ inputResponses: elicitResult.answers }
|
|
16595
|
+
);
|
|
16588
16596
|
return renderCallResult(platform2, retryResult, { json });
|
|
16589
16597
|
} catch (retryErr) {
|
|
16590
16598
|
const e2 = classifyError(retryErr);
|
|
@@ -16661,13 +16669,7 @@ async function runClientVerb(platform2, version, parsed) {
|
|
|
16661
16669
|
const configSecrets = collectConfigSecrets(resolved.headers, platform2.env);
|
|
16662
16670
|
for (const s of configSecrets) verbose.secrets.add(s);
|
|
16663
16671
|
const allSecrets = /* @__PURE__ */ new Set([...secrets, ...configSecrets]);
|
|
16664
|
-
const redact2 = (text) =>
|
|
16665
|
-
let result = text;
|
|
16666
|
-
for (const secret of allSecrets) {
|
|
16667
|
-
if (secret.length > 0) result = result.replaceAll(secret, "[REDACTED]");
|
|
16668
|
-
}
|
|
16669
|
-
return result;
|
|
16670
|
-
};
|
|
16672
|
+
const redact2 = (text) => redactSecrets(text, allSecrets);
|
|
16671
16673
|
const mergedHeaders = { ...configHeaders, ...expanded };
|
|
16672
16674
|
const hasAuthHeader = "Authorization" in mergedHeaders;
|
|
16673
16675
|
const authResolved = await resolveAuthProvider(
|
|
@@ -16742,7 +16744,7 @@ async function runClientVerb(platform2, version, parsed) {
|
|
|
16742
16744
|
return termExitCode;
|
|
16743
16745
|
}
|
|
16744
16746
|
if (err instanceof InputRequiredError) {
|
|
16745
|
-
return handleInputRequired(platform2, conn, err, respondData, parsed.jsonOutput, redact2);
|
|
16747
|
+
return await handleInputRequired(platform2, conn, err, respondData, parsed.jsonOutput, redact2);
|
|
16746
16748
|
}
|
|
16747
16749
|
const e = classifyError(err);
|
|
16748
16750
|
await writeErrRedacted(platform2, parsed.jsonOutput, e.kind, e.msg, redact2);
|
|
@@ -16778,7 +16780,7 @@ function collectConfigSecrets(headers, env) {
|
|
|
16778
16780
|
const secrets = [];
|
|
16779
16781
|
for (const [, v] of Object.entries(headers)) {
|
|
16780
16782
|
const expanded = expandPlaceholders(v, env);
|
|
16781
|
-
if (expanded !== v && expanded.length > 0) secrets.push(expanded);
|
|
16783
|
+
if (expanded !== v && expanded.length > 0) secrets.push(expanded, ...placeholderValues(v, env));
|
|
16782
16784
|
if (v.length > 0 && v !== expanded) secrets.push(v);
|
|
16783
16785
|
}
|
|
16784
16786
|
return secrets;
|
|
@@ -17044,5 +17046,5 @@ try {
|
|
|
17044
17046
|
});
|
|
17045
17047
|
} catch {
|
|
17046
17048
|
}
|
|
17047
|
-
var code = await run(platform, "0.17.
|
|
17049
|
+
var code = await run(platform, "0.17.8", args);
|
|
17048
17050
|
process.exit(code);
|
package/dist/kernel/mcpcat.mjs
CHANGED
|
@@ -9476,6 +9476,15 @@ function containsPlaceholders(value) {
|
|
|
9476
9476
|
function expandPlaceholders(value, env2) {
|
|
9477
9477
|
return value.replace(PLACEHOLDER, (_, name) => env2[name] ?? "");
|
|
9478
9478
|
}
|
|
9479
|
+
var MIN_VAR_SECRET = 8;
|
|
9480
|
+
function placeholderValues(value, env2) {
|
|
9481
|
+
const values = [];
|
|
9482
|
+
for (const m of value.matchAll(PLACEHOLDER)) {
|
|
9483
|
+
const v = env2[m[1]];
|
|
9484
|
+
if (v !== void 0 && v.length >= MIN_VAR_SECRET) values.push(v);
|
|
9485
|
+
}
|
|
9486
|
+
return values;
|
|
9487
|
+
}
|
|
9479
9488
|
function missingPlaceholders(value, env2) {
|
|
9480
9489
|
const missing = [];
|
|
9481
9490
|
for (const m of value.matchAll(PLACEHOLDER)) {
|
|
@@ -10784,6 +10793,12 @@ function redactWrites(platform2, redact2) {
|
|
|
10784
10793
|
write: (fd, data) => platform2.write(fd, typeof data === "string" ? redact2(data) : data)
|
|
10785
10794
|
});
|
|
10786
10795
|
}
|
|
10796
|
+
function redactSecrets(text, secrets) {
|
|
10797
|
+
const ordered = [...secrets].filter((s) => s.length > 0).sort((a, b) => b.length - a.length);
|
|
10798
|
+
let result = text;
|
|
10799
|
+
for (const secret of ordered) result = result.replaceAll(secret, "[REDACTED]");
|
|
10800
|
+
return result;
|
|
10801
|
+
}
|
|
10787
10802
|
|
|
10788
10803
|
// src/render/result.ts
|
|
10789
10804
|
function formatBytes(n) {
|
|
@@ -14983,15 +14998,7 @@ function isSensitiveHeader(name) {
|
|
|
14983
14998
|
return SENSITIVE_HEADER_RE.test(name) || SENSITIVE_NAME_RE.test(name);
|
|
14984
14999
|
}
|
|
14985
15000
|
function redact(text, secrets) {
|
|
14986
|
-
|
|
14987
|
-
for (const secret of secrets) {
|
|
14988
|
-
if (secret.length > 0) {
|
|
14989
|
-
while (result.includes(secret)) {
|
|
14990
|
-
result = result.replace(secret, "[REDACTED]");
|
|
14991
|
-
}
|
|
14992
|
-
}
|
|
14993
|
-
}
|
|
14994
|
-
return result;
|
|
15001
|
+
return redactSecrets(text, secrets);
|
|
14995
15002
|
}
|
|
14996
15003
|
function createVerboseLogger(platform2, enabled) {
|
|
14997
15004
|
const secrets = /* @__PURE__ */ new Set();
|
|
@@ -16069,7 +16076,7 @@ function expandAndCollect(headers, env2) {
|
|
|
16069
16076
|
}
|
|
16070
16077
|
const e = expandPlaceholders(v, env2);
|
|
16071
16078
|
result[k] = e;
|
|
16072
|
-
if (e !== v) secrets.push(e);
|
|
16079
|
+
if (e !== v) secrets.push(e, ...placeholderValues(v, env2));
|
|
16073
16080
|
if (v.length > 0) secrets.push(v);
|
|
16074
16081
|
}
|
|
16075
16082
|
return { expanded: result, secrets, unset };
|
|
@@ -16202,10 +16209,11 @@ async function handleInputRequired(platform2, conn, err, respondData, json, reda
|
|
|
16202
16209
|
return EXIT_INPUT_REQUIRED;
|
|
16203
16210
|
}
|
|
16204
16211
|
try {
|
|
16205
|
-
const retryResult = await conn.callTool(
|
|
16206
|
-
|
|
16207
|
-
|
|
16208
|
-
|
|
16212
|
+
const retryResult = await conn.callTool(
|
|
16213
|
+
parsed2.name,
|
|
16214
|
+
parsed2.arguments,
|
|
16215
|
+
{ inputResponses: elicitResult.answers }
|
|
16216
|
+
);
|
|
16209
16217
|
return renderCallResult(platform2, retryResult, { json });
|
|
16210
16218
|
} catch (retryErr) {
|
|
16211
16219
|
const e2 = classifyError(retryErr);
|
|
@@ -16282,13 +16290,7 @@ async function runClientVerb(platform2, version, parsed) {
|
|
|
16282
16290
|
const configSecrets = collectConfigSecrets(resolved.headers, platform2.env);
|
|
16283
16291
|
for (const s of configSecrets) verbose.secrets.add(s);
|
|
16284
16292
|
const allSecrets = /* @__PURE__ */ new Set([...secrets, ...configSecrets]);
|
|
16285
|
-
const redact2 = (text) =>
|
|
16286
|
-
let result = text;
|
|
16287
|
-
for (const secret of allSecrets) {
|
|
16288
|
-
if (secret.length > 0) result = result.replaceAll(secret, "[REDACTED]");
|
|
16289
|
-
}
|
|
16290
|
-
return result;
|
|
16291
|
-
};
|
|
16293
|
+
const redact2 = (text) => redactSecrets(text, allSecrets);
|
|
16292
16294
|
const mergedHeaders = { ...configHeaders, ...expanded };
|
|
16293
16295
|
const hasAuthHeader = "Authorization" in mergedHeaders;
|
|
16294
16296
|
const authResolved = await resolveAuthProvider(
|
|
@@ -16363,7 +16365,7 @@ async function runClientVerb(platform2, version, parsed) {
|
|
|
16363
16365
|
return termExitCode;
|
|
16364
16366
|
}
|
|
16365
16367
|
if (err instanceof InputRequiredError) {
|
|
16366
|
-
return handleInputRequired(platform2, conn, err, respondData, parsed.jsonOutput, redact2);
|
|
16368
|
+
return await handleInputRequired(platform2, conn, err, respondData, parsed.jsonOutput, redact2);
|
|
16367
16369
|
}
|
|
16368
16370
|
const e = classifyError(err);
|
|
16369
16371
|
await writeErrRedacted(platform2, parsed.jsonOutput, e.kind, e.msg, redact2);
|
|
@@ -16399,7 +16401,7 @@ function collectConfigSecrets(headers, env2) {
|
|
|
16399
16401
|
const secrets = [];
|
|
16400
16402
|
for (const [, v] of Object.entries(headers)) {
|
|
16401
16403
|
const expanded = expandPlaceholders(v, env2);
|
|
16402
|
-
if (expanded !== v && expanded.length > 0) secrets.push(expanded);
|
|
16404
|
+
if (expanded !== v && expanded.length > 0) secrets.push(expanded, ...placeholderValues(v, env2));
|
|
16403
16405
|
if (v.length > 0 && v !== expanded) secrets.push(v);
|
|
16404
16406
|
}
|
|
16405
16407
|
return secrets;
|
|
@@ -16766,7 +16768,7 @@ async function main(ctx) {
|
|
|
16766
16768
|
packageDir: "/node_modules/@ai-ecoverse/mcpcat"
|
|
16767
16769
|
});
|
|
16768
16770
|
const args = ctx.argv.slice(1);
|
|
16769
|
-
return run(platform2, "0.17.
|
|
16771
|
+
return run(platform2, "0.17.8", args);
|
|
16770
16772
|
}
|
|
16771
16773
|
export {
|
|
16772
16774
|
main as default
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-ecoverse/mcpcat",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.8",
|
|
4
4
|
"description": "A curl for the Model Context Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -61,15 +61,15 @@
|
|
|
61
61
|
"trust:dry": "npx fledgling sync --dry-run -y --skip-publish"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@ai-ecoverse/slicc-bios": "1.
|
|
65
|
-
"@ai-ecoverse/slicc-kernel": "1.
|
|
66
|
-
"@ai-ecoverse/slicc-shared-web": "1.29.
|
|
64
|
+
"@ai-ecoverse/slicc-bios": "1.37.3",
|
|
65
|
+
"@ai-ecoverse/slicc-kernel": "1.142.1",
|
|
66
|
+
"@ai-ecoverse/slicc-shared-web": "1.29.10",
|
|
67
67
|
"@biomejs/biome": "2.5.15",
|
|
68
68
|
"@earendil-works/pi-codemode": "1.2.0",
|
|
69
69
|
"@earendil-works/pi-mcp": "1.2.0",
|
|
70
70
|
"@types/node": "26.6.5",
|
|
71
71
|
"esbuild": "0.28.2",
|
|
72
|
-
"kernel-cert-new": "npm:@ai-ecoverse/slicc-kernel@1.
|
|
72
|
+
"kernel-cert-new": "npm:@ai-ecoverse/slicc-kernel@1.142.1",
|
|
73
73
|
"lefthook": "2.2.2",
|
|
74
74
|
"monocart-coverage-reports": "2.13.2",
|
|
75
75
|
"proper-lockfile": "4.1.2",
|