@wrongstack/core 0.4.0 → 0.4.1

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 CHANGED
@@ -870,7 +870,7 @@ function walkCount(node, vault, counter) {
870
870
  if (Array.isArray(node)) {
871
871
  return node.map((item) => walkCount(item, vault, counter));
872
872
  }
873
- const out = {};
873
+ const out = /* @__PURE__ */ Object.create(null);
874
874
  for (const [k, v] of Object.entries(node)) {
875
875
  if (typeof v === "string" && isSecretField(k) && !vault.isEncrypted(v) && v.length > 0) {
876
876
  out[k] = vault.encrypt(v);
@@ -883,7 +883,15 @@ function walkCount(node, vault, counter) {
883
883
  }
884
884
  return out;
885
885
  }
886
- var FORBIDDEN_PROTO_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
886
+ var FORBIDDEN_PROTO_KEYS = /* @__PURE__ */ new Set([
887
+ "__proto__",
888
+ "constructor",
889
+ "prototype",
890
+ "__defineGetter__",
891
+ "__defineSetter__",
892
+ "__lookupGetter__",
893
+ "__lookupSetter__"
894
+ ]);
887
895
  function deepMerge(a, b) {
888
896
  const out = { ...a };
889
897
  for (const [k, v] of Object.entries(b)) {
@@ -1636,12 +1644,15 @@ var PATTERNS = [
1636
1644
  { type: "redis_uri", regex: /redis:\/\/[^\s"'`]+/g },
1637
1645
  {
1638
1646
  type: "bearer_token",
1639
- regex: /(?<![A-Za-z0-9_.~+/-])Bearer\s+[A-Za-z0-9._~+/-]{20,}=*(?![A-Za-z0-9_.~+/-])/g
1647
+ // Bounded at 512 chars to prevent catastrophic backtracking on adversarial input.
1648
+ // Negative lookahead is a simple single-char check — no backtracking risk.
1649
+ regex: /(?<![A-Za-z0-9_.~+/-])Bearer\s+[A-Za-z0-9._~+/-]{20,512}=*(?![A-Za-z0-9_.~+/-])/g
1640
1650
  },
1641
1651
  {
1642
1652
  type: "high_entropy_env",
1643
- // Value-side word boundary + length gate to avoid matching short random strings
1644
- regex: /\b([A-Z_]{4,}(?:KEY|TOKEN|SECRET|PASSWORD|PWD))\s*[:=]\s*['"]?([A-Za-z0-9_/+=-]{20,})['"]?(?!\s*[A-Za-z_]{4,}(?:KEY|TOKEN|SECRET|PASSWORD|PWD))/g
1653
+ // Value bounded at 512 chars; negative lookahead simplified to avoid
1654
+ // nested quantifier backtracking on adversarial input.
1655
+ regex: /\b([A-Z_]{4,}(?:KEY|TOKEN|SECRET|PASSWORD|PWD))\s*[:=]\s*['"]?([A-Za-z0-9_/+=-]{20,512})['"]?/g
1645
1656
  }
1646
1657
  ];
1647
1658
  var SCRUB_CHUNK_BYTES = 64 * 1024;
@@ -4366,7 +4377,15 @@ var ENV_MAP = {
4366
4377
  function isPrimitiveArray(a) {
4367
4378
  return a.every((v) => v === null || typeof v !== "object");
4368
4379
  }
4369
- var FORBIDDEN_PROTO_KEYS2 = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
4380
+ var FORBIDDEN_PROTO_KEYS2 = /* @__PURE__ */ new Set([
4381
+ "__proto__",
4382
+ "constructor",
4383
+ "prototype",
4384
+ "__defineGetter__",
4385
+ "__defineSetter__",
4386
+ "__lookupGetter__",
4387
+ "__lookupSetter__"
4388
+ ]);
4370
4389
  function deepMerge2(base, patch) {
4371
4390
  if (typeof base !== "object" || base === null) return patch ?? base;
4372
4391
  if (typeof patch !== "object" || patch === null) return base;
@@ -10476,7 +10495,6 @@ var githubServer = () => ({
10476
10495
  transport: "stdio",
10477
10496
  command: "npx",
10478
10497
  args: ["-y", "@modelcontextprotocol/server-github"],
10479
- env: { GITHUB_PERSONAL_ACCESS_TOKEN: process.env.GITHUB_PERSONAL_ACCESS_TOKEN ?? "" },
10480
10498
  permission: "confirm"
10481
10499
  });
10482
10500
  var context7Server = () => ({
@@ -10492,7 +10510,6 @@ var braveSearchServer = () => ({
10492
10510
  transport: "stdio",
10493
10511
  command: "npx",
10494
10512
  args: ["-y", "@modelcontextprotocol/server-brave-search"],
10495
- env: { BRAVE_SEARCH_API_KEY: process.env.BRAVE_SEARCH_API_KEY ?? "" },
10496
10513
  permission: "confirm"
10497
10514
  });
10498
10515
  var blockServer = () => ({
@@ -10509,7 +10526,6 @@ var everArtServer = () => ({
10509
10526
  transport: "stdio",
10510
10527
  command: "npx",
10511
10528
  args: ["-y", "@modelcontextprotocol/server-everart"],
10512
- env: { EVERART_API_KEY: process.env.EVERART_API_KEY ?? "" },
10513
10529
  permission: "confirm"
10514
10530
  });
10515
10531
  var slackServer = () => ({
@@ -10518,10 +10534,6 @@ var slackServer = () => ({
10518
10534
  transport: "stdio",
10519
10535
  command: "npx",
10520
10536
  args: ["-y", "@modelcontextprotocol/server-slack"],
10521
- env: {
10522
- SLACK_BOT_TOKEN: process.env.SLACK_BOT_TOKEN ?? "",
10523
- SLACK_TEAM_ID: process.env.SLACK_TEAM_ID ?? ""
10524
- },
10525
10537
  permission: "confirm"
10526
10538
  });
10527
10539
  var awsServer = () => ({
@@ -10538,7 +10550,6 @@ var googleMapsServer = () => ({
10538
10550
  transport: "stdio",
10539
10551
  command: "npx",
10540
10552
  args: ["-y", "@modelcontextprotocol/server-google-maps"],
10541
- env: { GOOGLE_MAPS_API_KEY: process.env.GOOGLE_MAPS_API_KEY ?? "" },
10542
10553
  permission: "confirm"
10543
10554
  });
10544
10555
  var sentinelServer = () => ({
@@ -10555,10 +10566,7 @@ var zaiVisionServer = () => ({
10555
10566
  transport: "stdio",
10556
10567
  command: "npx",
10557
10568
  args: ["-y", "@z_ai/mcp-server@latest"],
10558
- env: {
10559
- Z_AI_API_KEY: process.env.Z_AI_API_KEY ?? "",
10560
- Z_AI_MODE: process.env.Z_AI_MODE ?? "ZAI"
10561
- },
10569
+ env: { Z_AI_MODE: "ZAI" },
10562
10570
  allowedTools: [
10563
10571
  "image_analysis",
10564
10572
  "extract_text_from_screenshot",
@@ -10576,10 +10584,9 @@ var miniMaxVisionServer = () => ({
10576
10584
  command: "uvx",
10577
10585
  args: ["minimax-coding-plan-mcp", "-y"],
10578
10586
  env: {
10579
- MINIMAX_API_KEY: process.env.MINIMAX_API_KEY ?? "",
10580
- MINIMAX_MCP_BASE_PATH: process.env.MINIMAX_MCP_BASE_PATH ?? "./.wrongstack/minimax-output",
10581
- MINIMAX_API_HOST: process.env.MINIMAX_API_HOST ?? "https://api.minimax.io",
10582
- MINIMAX_API_RESOURCE_MODE: process.env.MINIMAX_API_RESOURCE_MODE ?? "url"
10587
+ MINIMAX_MCP_BASE_PATH: "./.wrongstack/minimax-output",
10588
+ MINIMAX_API_HOST: "https://api.minimax.io",
10589
+ MINIMAX_API_RESOURCE_MODE: "url"
10583
10590
  },
10584
10591
  allowedTools: ["understand_image"],
10585
10592
  permission: "auto"
@@ -12073,6 +12080,7 @@ ${mem}`);
12073
12080
  try {
12074
12081
  proc = spawn("git", ["status", "--porcelain=v1", "--branch"], {
12075
12082
  cwd: root,
12083
+ env: buildChildEnv(),
12076
12084
  stdio: ["ignore", "pipe", "ignore"]
12077
12085
  });
12078
12086
  let buf = "";