@node9/proxy 1.60.0 → 1.61.0

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.js CHANGED
@@ -49212,9 +49212,10 @@ function loadGeminiCost(start, end, geminiTmpDir2) {
49212
49212
  function dimensionOfBlock(checkedBy, ruleName) {
49213
49213
  if (checkedBy.includes("egress")) return "network";
49214
49214
  if (checkedBy.includes("pii") || checkedBy.includes("dlp")) return "data";
49215
- if (checkedBy === "app-permission-block" || ruleName.startsWith("app-permission:")) return "mcp";
49215
+ if (checkedBy === "loop-detected" || checkedBy === "mcp-pin-mismatch" || checkedBy.startsWith("injection"))
49216
+ return "detection";
49217
+ if (checkedBy === "app-permission-block" || ruleName.startsWith("app-permission:")) return "apps";
49216
49218
  if (ruleName.startsWith("shield:project-jail")) return "files";
49217
- if (checkedBy === "loop-detected") return "toolRules";
49218
49219
  if (checkedBy === "timeout" || checkedBy === "local-decision") return "approvals";
49219
49220
  return "toolRules";
49220
49221
  }
@@ -49317,7 +49318,9 @@ function aggregateReportFromAudit(period, opts = {}) {
49317
49318
  let dimDataObserved = 0;
49318
49319
  let dimFilesBlocked = 0;
49319
49320
  let dimToolRulesBlocked = 0;
49320
- let dimMcpBlocked = 0;
49321
+ let dimAppsBlocked = 0;
49322
+ let dimPinMismatch = 0;
49323
+ let dimInjectionBlocked = 0;
49321
49324
  for (const e of entries) {
49322
49325
  if (superseded.has(supersedeKey(e))) continue;
49323
49326
  const allow = isAllow(e.decision);
@@ -49335,6 +49338,8 @@ function aggregateReportFromAudit(period, opts = {}) {
49335
49338
  }
49336
49339
  if (e.checkedBy === "loop-detected") loopHits++;
49337
49340
  const cb = e.checkedBy ?? "";
49341
+ if (cb === "mcp-pin-mismatch") dimPinMismatch++;
49342
+ if (cb.startsWith("injection")) dimInjectionBlocked++;
49338
49343
  if (cb.includes("would-block") && (cb.includes("pii") || cb.includes("dlp"))) {
49339
49344
  dimDataObserved++;
49340
49345
  }
@@ -49346,8 +49351,8 @@ function aggregateReportFromAudit(period, opts = {}) {
49346
49351
  case "files":
49347
49352
  dimFilesBlocked++;
49348
49353
  break;
49349
- case "mcp":
49350
- dimMcpBlocked++;
49354
+ case "apps":
49355
+ dimAppsBlocked++;
49351
49356
  break;
49352
49357
  case "toolRules":
49353
49358
  dimToolRulesBlocked++;
@@ -49427,9 +49432,15 @@ function aggregateReportFromAudit(period, opts = {}) {
49427
49432
  dimensions: {
49428
49433
  network: { blocked: dimNetworkBlocked },
49429
49434
  data: { blocked: dlpBlocked, observed: dimDataObserved },
49435
+ detection: {
49436
+ loops: loopHits,
49437
+ pinMismatches: dimPinMismatch,
49438
+ injections: dimInjectionBlocked
49439
+ },
49430
49440
  approvals: { approved: userApproved, denied: userDenied, timedOut },
49431
49441
  files: { blocked: dimFilesBlocked },
49432
- toolRules: { blocked: dimToolRulesBlocked, mcp: dimMcpBlocked, loops: loopHits },
49442
+ toolRules: { blocked: dimToolRulesBlocked },
49443
+ apps: { blocked: dimAppsBlocked },
49433
49444
  cost: { totalUSD: claudeCost.total + codexCost.total + geminiCost.total }
49434
49445
  },
49435
49446
  generatedAt: now.toISOString()
@@ -49729,6 +49740,12 @@ function renderTerminalReport(data, responseDlpEntries, excludeTests) {
49729
49740
  d.data.blocked + d.data.observed > 0,
49730
49741
  `${num2(d.data.blocked)} blocked \xB7 ${num2(d.data.observed)} observed (DLP/PII)`
49731
49742
  );
49743
+ dimRow(
49744
+ "\u{1F501}",
49745
+ "Detection",
49746
+ d.detection.loops + d.detection.pinMismatches + d.detection.injections > 0,
49747
+ `${num2(d.detection.loops)} loops \xB7 ${num2(d.detection.pinMismatches)} pin \xB7 ${num2(d.detection.injections)} injection`
49748
+ );
49732
49749
  dimRow(
49733
49750
  "\u270B",
49734
49751
  "Approvals",
@@ -49739,9 +49756,10 @@ function renderTerminalReport(data, responseDlpEntries, excludeTests) {
49739
49756
  dimRow(
49740
49757
  "\u{1F6E0}",
49741
49758
  "Tool rules",
49742
- d.toolRules.blocked + d.toolRules.mcp + d.toolRules.loops > 0,
49743
- `${num2(d.toolRules.blocked)} shields/rules \xB7 ${num2(d.toolRules.mcp)} MCP \xB7 ${num2(d.toolRules.loops)} loops`
49759
+ d.toolRules.blocked > 0,
49760
+ `${num2(d.toolRules.blocked)} shields/rules`
49744
49761
  );
49762
+ dimRow("\u{1F9E9}", "Apps (MCP)", d.apps.blocked > 0, `${num2(d.apps.blocked)} app-permission blocks`);
49745
49763
  dimRow("\u{1F4B0}", "Cost", d.cost.totalUSD > 0, `${fmtCost2(d.cost.totalUSD)} this period`);
49746
49764
  }
49747
49765
  console.log("");
package/dist/cli.mjs CHANGED
@@ -49205,9 +49205,10 @@ function loadGeminiCost(start, end, geminiTmpDir2) {
49205
49205
  function dimensionOfBlock(checkedBy, ruleName) {
49206
49206
  if (checkedBy.includes("egress")) return "network";
49207
49207
  if (checkedBy.includes("pii") || checkedBy.includes("dlp")) return "data";
49208
- if (checkedBy === "app-permission-block" || ruleName.startsWith("app-permission:")) return "mcp";
49208
+ if (checkedBy === "loop-detected" || checkedBy === "mcp-pin-mismatch" || checkedBy.startsWith("injection"))
49209
+ return "detection";
49210
+ if (checkedBy === "app-permission-block" || ruleName.startsWith("app-permission:")) return "apps";
49209
49211
  if (ruleName.startsWith("shield:project-jail")) return "files";
49210
- if (checkedBy === "loop-detected") return "toolRules";
49211
49212
  if (checkedBy === "timeout" || checkedBy === "local-decision") return "approvals";
49212
49213
  return "toolRules";
49213
49214
  }
@@ -49310,7 +49311,9 @@ function aggregateReportFromAudit(period, opts = {}) {
49310
49311
  let dimDataObserved = 0;
49311
49312
  let dimFilesBlocked = 0;
49312
49313
  let dimToolRulesBlocked = 0;
49313
- let dimMcpBlocked = 0;
49314
+ let dimAppsBlocked = 0;
49315
+ let dimPinMismatch = 0;
49316
+ let dimInjectionBlocked = 0;
49314
49317
  for (const e of entries) {
49315
49318
  if (superseded.has(supersedeKey(e))) continue;
49316
49319
  const allow = isAllow(e.decision);
@@ -49328,6 +49331,8 @@ function aggregateReportFromAudit(period, opts = {}) {
49328
49331
  }
49329
49332
  if (e.checkedBy === "loop-detected") loopHits++;
49330
49333
  const cb = e.checkedBy ?? "";
49334
+ if (cb === "mcp-pin-mismatch") dimPinMismatch++;
49335
+ if (cb.startsWith("injection")) dimInjectionBlocked++;
49331
49336
  if (cb.includes("would-block") && (cb.includes("pii") || cb.includes("dlp"))) {
49332
49337
  dimDataObserved++;
49333
49338
  }
@@ -49339,8 +49344,8 @@ function aggregateReportFromAudit(period, opts = {}) {
49339
49344
  case "files":
49340
49345
  dimFilesBlocked++;
49341
49346
  break;
49342
- case "mcp":
49343
- dimMcpBlocked++;
49347
+ case "apps":
49348
+ dimAppsBlocked++;
49344
49349
  break;
49345
49350
  case "toolRules":
49346
49351
  dimToolRulesBlocked++;
@@ -49420,9 +49425,15 @@ function aggregateReportFromAudit(period, opts = {}) {
49420
49425
  dimensions: {
49421
49426
  network: { blocked: dimNetworkBlocked },
49422
49427
  data: { blocked: dlpBlocked, observed: dimDataObserved },
49428
+ detection: {
49429
+ loops: loopHits,
49430
+ pinMismatches: dimPinMismatch,
49431
+ injections: dimInjectionBlocked
49432
+ },
49423
49433
  approvals: { approved: userApproved, denied: userDenied, timedOut },
49424
49434
  files: { blocked: dimFilesBlocked },
49425
- toolRules: { blocked: dimToolRulesBlocked, mcp: dimMcpBlocked, loops: loopHits },
49435
+ toolRules: { blocked: dimToolRulesBlocked },
49436
+ apps: { blocked: dimAppsBlocked },
49426
49437
  cost: { totalUSD: claudeCost.total + codexCost.total + geminiCost.total }
49427
49438
  },
49428
49439
  generatedAt: now.toISOString()
@@ -49722,6 +49733,12 @@ function renderTerminalReport(data, responseDlpEntries, excludeTests) {
49722
49733
  d.data.blocked + d.data.observed > 0,
49723
49734
  `${num2(d.data.blocked)} blocked \xB7 ${num2(d.data.observed)} observed (DLP/PII)`
49724
49735
  );
49736
+ dimRow(
49737
+ "\u{1F501}",
49738
+ "Detection",
49739
+ d.detection.loops + d.detection.pinMismatches + d.detection.injections > 0,
49740
+ `${num2(d.detection.loops)} loops \xB7 ${num2(d.detection.pinMismatches)} pin \xB7 ${num2(d.detection.injections)} injection`
49741
+ );
49725
49742
  dimRow(
49726
49743
  "\u270B",
49727
49744
  "Approvals",
@@ -49732,9 +49749,10 @@ function renderTerminalReport(data, responseDlpEntries, excludeTests) {
49732
49749
  dimRow(
49733
49750
  "\u{1F6E0}",
49734
49751
  "Tool rules",
49735
- d.toolRules.blocked + d.toolRules.mcp + d.toolRules.loops > 0,
49736
- `${num2(d.toolRules.blocked)} shields/rules \xB7 ${num2(d.toolRules.mcp)} MCP \xB7 ${num2(d.toolRules.loops)} loops`
49752
+ d.toolRules.blocked > 0,
49753
+ `${num2(d.toolRules.blocked)} shields/rules`
49737
49754
  );
49755
+ dimRow("\u{1F9E9}", "Apps (MCP)", d.apps.blocked > 0, `${num2(d.apps.blocked)} app-permission blocks`);
49738
49756
  dimRow("\u{1F4B0}", "Cost", d.cost.totalUSD > 0, `${fmtCost2(d.cost.totalUSD)} this period`);
49739
49757
  }
49740
49758
  console.log("");
@@ -3438,9 +3438,10 @@ async function loadGeminiCostAsync(start, end, geminiTmpDir) {
3438
3438
  function dimensionOfBlock(checkedBy, ruleName) {
3439
3439
  if (checkedBy.includes("egress")) return "network";
3440
3440
  if (checkedBy.includes("pii") || checkedBy.includes("dlp")) return "data";
3441
- if (checkedBy === "app-permission-block" || ruleName.startsWith("app-permission:")) return "mcp";
3441
+ if (checkedBy === "loop-detected" || checkedBy === "mcp-pin-mismatch" || checkedBy.startsWith("injection"))
3442
+ return "detection";
3443
+ if (checkedBy === "app-permission-block" || ruleName.startsWith("app-permission:")) return "apps";
3442
3444
  if (ruleName.startsWith("shield:project-jail")) return "files";
3443
- if (checkedBy === "loop-detected") return "toolRules";
3444
3445
  if (checkedBy === "timeout" || checkedBy === "local-decision") return "approvals";
3445
3446
  return "toolRules";
3446
3447
  }
@@ -3543,7 +3544,9 @@ function aggregateReportFromAudit(period, opts = {}) {
3543
3544
  let dimDataObserved = 0;
3544
3545
  let dimFilesBlocked = 0;
3545
3546
  let dimToolRulesBlocked = 0;
3546
- let dimMcpBlocked = 0;
3547
+ let dimAppsBlocked = 0;
3548
+ let dimPinMismatch = 0;
3549
+ let dimInjectionBlocked = 0;
3547
3550
  for (const e of entries) {
3548
3551
  if (superseded.has(supersedeKey(e))) continue;
3549
3552
  const allow = isAllow(e.decision);
@@ -3561,6 +3564,8 @@ function aggregateReportFromAudit(period, opts = {}) {
3561
3564
  }
3562
3565
  if (e.checkedBy === "loop-detected") loopHits++;
3563
3566
  const cb = e.checkedBy ?? "";
3567
+ if (cb === "mcp-pin-mismatch") dimPinMismatch++;
3568
+ if (cb.startsWith("injection")) dimInjectionBlocked++;
3564
3569
  if (cb.includes("would-block") && (cb.includes("pii") || cb.includes("dlp"))) {
3565
3570
  dimDataObserved++;
3566
3571
  }
@@ -3572,8 +3577,8 @@ function aggregateReportFromAudit(period, opts = {}) {
3572
3577
  case "files":
3573
3578
  dimFilesBlocked++;
3574
3579
  break;
3575
- case "mcp":
3576
- dimMcpBlocked++;
3580
+ case "apps":
3581
+ dimAppsBlocked++;
3577
3582
  break;
3578
3583
  case "toolRules":
3579
3584
  dimToolRulesBlocked++;
@@ -3653,9 +3658,15 @@ function aggregateReportFromAudit(period, opts = {}) {
3653
3658
  dimensions: {
3654
3659
  network: { blocked: dimNetworkBlocked },
3655
3660
  data: { blocked: dlpBlocked, observed: dimDataObserved },
3661
+ detection: {
3662
+ loops: loopHits,
3663
+ pinMismatches: dimPinMismatch,
3664
+ injections: dimInjectionBlocked
3665
+ },
3656
3666
  approvals: { approved: userApproved, denied: userDenied, timedOut },
3657
3667
  files: { blocked: dimFilesBlocked },
3658
- toolRules: { blocked: dimToolRulesBlocked, mcp: dimMcpBlocked, loops: loopHits },
3668
+ toolRules: { blocked: dimToolRulesBlocked },
3669
+ apps: { blocked: dimAppsBlocked },
3659
3670
  cost: { totalUSD: claudeCost.total + codexCost.total + geminiCost.total }
3660
3671
  },
3661
3672
  generatedAt: now.toISOString()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node9/proxy",
3
- "version": "1.60.0",
3
+ "version": "1.61.0",
4
4
  "description": "The Sudo Command for AI Agents. Execution Security for Claude Code, Codex, Gemini, Cursor, Opencode, Pi, and any MCP server.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",