@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.
@@ -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
- let result = text;
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(parsed2.name, {
16585
- ...parsed2.arguments,
16586
- _meta: { inputResponses: elicitResult.answers }
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.6", args);
17049
+ var code = await run(platform, "0.17.8", args);
17048
17050
  process.exit(code);
@@ -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
- let result = text;
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(parsed2.name, {
16206
- ...parsed2.arguments,
16207
- _meta: { inputResponses: elicitResult.answers }
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.6", args);
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.6",
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.36.1",
65
- "@ai-ecoverse/slicc-kernel": "1.141.2",
66
- "@ai-ecoverse/slicc-shared-web": "1.29.8",
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.141.2",
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",