@solongate/proxy 0.41.0 → 0.42.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/create.js +2 -4
- package/dist/index.js +22 -15
- package/dist/lib.js +20 -11
- package/package.json +1 -1
package/dist/create.js
CHANGED
|
@@ -213,10 +213,8 @@ console.log('MCP servers communicate over stdin/stdout \u2014 not HTTP.');
|
|
|
213
213
|
console.log('You need an MCP client to connect:');
|
|
214
214
|
console.log('');
|
|
215
215
|
console.log(' Claude Code Open this folder, .mcp.json is auto-detected');
|
|
216
|
-
console.log('
|
|
217
|
-
console.log('
|
|
218
|
-
console.log(' Cline VS Code extension, add server in settings');
|
|
219
|
-
console.log(' Zed Add to settings.json under mcp_servers');
|
|
216
|
+
console.log(' Gemini CLI Open this folder, .mcp.json is auto-detected');
|
|
217
|
+
console.log(' OpenClaw Uses openclaw.plugin.json config');
|
|
220
218
|
console.log('');
|
|
221
219
|
console.log('Press Ctrl+C to stop.');
|
|
222
220
|
`
|
package/dist/index.js
CHANGED
|
@@ -1618,10 +1618,8 @@ console.log('MCP servers communicate over stdin/stdout \u2014 not HTTP.');
|
|
|
1618
1618
|
console.log('You need an MCP client to connect:');
|
|
1619
1619
|
console.log('');
|
|
1620
1620
|
console.log(' Claude Code Open this folder, .mcp.json is auto-detected');
|
|
1621
|
-
console.log('
|
|
1622
|
-
console.log('
|
|
1623
|
-
console.log(' Cline VS Code extension, add server in settings');
|
|
1624
|
-
console.log(' Zed Add to settings.json under mcp_servers');
|
|
1621
|
+
console.log(' Gemini CLI Open this folder, .mcp.json is auto-detected');
|
|
1622
|
+
console.log(' OpenClaw Uses openclaw.plugin.json config');
|
|
1625
1623
|
console.log('');
|
|
1626
1624
|
console.log('Press Ctrl+C to stop.');
|
|
1627
1625
|
`
|
|
@@ -2689,9 +2687,23 @@ var TrustLevel = {
|
|
|
2689
2687
|
var Permission = {
|
|
2690
2688
|
READ: "READ",
|
|
2691
2689
|
WRITE: "WRITE",
|
|
2692
|
-
EXECUTE: "EXECUTE"
|
|
2690
|
+
EXECUTE: "EXECUTE",
|
|
2691
|
+
NETWORK: "NETWORK"
|
|
2693
2692
|
};
|
|
2694
|
-
var PermissionSchema = z.enum(["READ", "WRITE", "EXECUTE"]);
|
|
2693
|
+
var PermissionSchema = z.enum(["READ", "WRITE", "EXECUTE", "NETWORK"]);
|
|
2694
|
+
function guessPermission(toolName) {
|
|
2695
|
+
const name = toolName.toLowerCase();
|
|
2696
|
+
if (name.includes("exec") || name.includes("shell") || name.includes("run") || name.includes("eval")) {
|
|
2697
|
+
return Permission.EXECUTE;
|
|
2698
|
+
}
|
|
2699
|
+
if (name.includes("fetch") || name.includes("http") || name.includes("request") || name.includes("curl") || name.includes("network") || name.includes("download") || name.includes("upload")) {
|
|
2700
|
+
return Permission.NETWORK;
|
|
2701
|
+
}
|
|
2702
|
+
if (name.includes("write") || name.includes("create") || name.includes("delete") || name.includes("update") || name.includes("set") || name.includes("edit") || name.includes("remove") || name.includes("insert")) {
|
|
2703
|
+
return Permission.WRITE;
|
|
2704
|
+
}
|
|
2705
|
+
return Permission.READ;
|
|
2706
|
+
}
|
|
2695
2707
|
var NO_PERMISSIONS = Object.freeze(
|
|
2696
2708
|
/* @__PURE__ */ new Set()
|
|
2697
2709
|
);
|
|
@@ -4573,7 +4585,7 @@ async function interceptToolCall(params, upstreamCall, options) {
|
|
|
4573
4585
|
toolName: params.name,
|
|
4574
4586
|
serverName: "default",
|
|
4575
4587
|
arguments: params.arguments ?? {},
|
|
4576
|
-
requiredPermission:
|
|
4588
|
+
requiredPermission: guessPermission(params.name),
|
|
4577
4589
|
timestamp
|
|
4578
4590
|
};
|
|
4579
4591
|
if (options.rateLimiter) {
|
|
@@ -6227,6 +6239,7 @@ var SolonGateProxy = class {
|
|
|
6227
6239
|
arguments: args ?? {},
|
|
6228
6240
|
decision: "DENY",
|
|
6229
6241
|
reason: `Prompt injection detected: ${threats}`,
|
|
6242
|
+
permission: guessPermission(name),
|
|
6230
6243
|
evaluationTimeMs: 0,
|
|
6231
6244
|
promptInjection: piResult,
|
|
6232
6245
|
agent_id: this.agentId ?? void 0,
|
|
@@ -6322,6 +6335,7 @@ var SolonGateProxy = class {
|
|
|
6322
6335
|
arguments: args ?? {},
|
|
6323
6336
|
decision,
|
|
6324
6337
|
reason,
|
|
6338
|
+
permission: guessPermission(name),
|
|
6325
6339
|
matchedRule,
|
|
6326
6340
|
evaluationTimeMs,
|
|
6327
6341
|
promptInjection: piResult,
|
|
@@ -6483,14 +6497,7 @@ ${msg.content.text}`;
|
|
|
6483
6497
|
* Guess tool permissions from tool name.
|
|
6484
6498
|
*/
|
|
6485
6499
|
guessPermissions(toolName) {
|
|
6486
|
-
|
|
6487
|
-
if (name.includes("exec") || name.includes("shell") || name.includes("run") || name.includes("eval")) {
|
|
6488
|
-
return ["EXECUTE"];
|
|
6489
|
-
}
|
|
6490
|
-
if (name.includes("write") || name.includes("create") || name.includes("delete") || name.includes("update") || name.includes("set")) {
|
|
6491
|
-
return ["WRITE"];
|
|
6492
|
-
}
|
|
6493
|
-
return ["READ"];
|
|
6500
|
+
return [guessPermission(toolName)];
|
|
6494
6501
|
}
|
|
6495
6502
|
/**
|
|
6496
6503
|
* Register the upstream MCP server to the SolonGate Cloud API.
|
package/dist/lib.js
CHANGED
|
@@ -634,9 +634,23 @@ var TrustLevel = {
|
|
|
634
634
|
var Permission = {
|
|
635
635
|
READ: "READ",
|
|
636
636
|
WRITE: "WRITE",
|
|
637
|
-
EXECUTE: "EXECUTE"
|
|
637
|
+
EXECUTE: "EXECUTE",
|
|
638
|
+
NETWORK: "NETWORK"
|
|
638
639
|
};
|
|
639
|
-
var PermissionSchema = z.enum(["READ", "WRITE", "EXECUTE"]);
|
|
640
|
+
var PermissionSchema = z.enum(["READ", "WRITE", "EXECUTE", "NETWORK"]);
|
|
641
|
+
function guessPermission(toolName) {
|
|
642
|
+
const name = toolName.toLowerCase();
|
|
643
|
+
if (name.includes("exec") || name.includes("shell") || name.includes("run") || name.includes("eval")) {
|
|
644
|
+
return Permission.EXECUTE;
|
|
645
|
+
}
|
|
646
|
+
if (name.includes("fetch") || name.includes("http") || name.includes("request") || name.includes("curl") || name.includes("network") || name.includes("download") || name.includes("upload")) {
|
|
647
|
+
return Permission.NETWORK;
|
|
648
|
+
}
|
|
649
|
+
if (name.includes("write") || name.includes("create") || name.includes("delete") || name.includes("update") || name.includes("set") || name.includes("edit") || name.includes("remove") || name.includes("insert")) {
|
|
650
|
+
return Permission.WRITE;
|
|
651
|
+
}
|
|
652
|
+
return Permission.READ;
|
|
653
|
+
}
|
|
640
654
|
var NO_PERMISSIONS = Object.freeze(
|
|
641
655
|
/* @__PURE__ */ new Set()
|
|
642
656
|
);
|
|
@@ -2694,7 +2708,7 @@ async function interceptToolCall(params, upstreamCall, options) {
|
|
|
2694
2708
|
toolName: params.name,
|
|
2695
2709
|
serverName: "default",
|
|
2696
2710
|
arguments: params.arguments ?? {},
|
|
2697
|
-
requiredPermission:
|
|
2711
|
+
requiredPermission: guessPermission(params.name),
|
|
2698
2712
|
timestamp
|
|
2699
2713
|
};
|
|
2700
2714
|
if (options.rateLimiter) {
|
|
@@ -4551,6 +4565,7 @@ var SolonGateProxy = class {
|
|
|
4551
4565
|
arguments: args ?? {},
|
|
4552
4566
|
decision: "DENY",
|
|
4553
4567
|
reason: `Prompt injection detected: ${threats}`,
|
|
4568
|
+
permission: guessPermission(name),
|
|
4554
4569
|
evaluationTimeMs: 0,
|
|
4555
4570
|
promptInjection: piResult,
|
|
4556
4571
|
agent_id: this.agentId ?? void 0,
|
|
@@ -4646,6 +4661,7 @@ var SolonGateProxy = class {
|
|
|
4646
4661
|
arguments: args ?? {},
|
|
4647
4662
|
decision,
|
|
4648
4663
|
reason,
|
|
4664
|
+
permission: guessPermission(name),
|
|
4649
4665
|
matchedRule,
|
|
4650
4666
|
evaluationTimeMs,
|
|
4651
4667
|
promptInjection: piResult,
|
|
@@ -4807,14 +4823,7 @@ ${msg.content.text}`;
|
|
|
4807
4823
|
* Guess tool permissions from tool name.
|
|
4808
4824
|
*/
|
|
4809
4825
|
guessPermissions(toolName) {
|
|
4810
|
-
|
|
4811
|
-
if (name.includes("exec") || name.includes("shell") || name.includes("run") || name.includes("eval")) {
|
|
4812
|
-
return ["EXECUTE"];
|
|
4813
|
-
}
|
|
4814
|
-
if (name.includes("write") || name.includes("create") || name.includes("delete") || name.includes("update") || name.includes("set")) {
|
|
4815
|
-
return ["WRITE"];
|
|
4816
|
-
}
|
|
4817
|
-
return ["READ"];
|
|
4826
|
+
return [guessPermission(toolName)];
|
|
4818
4827
|
}
|
|
4819
4828
|
/**
|
|
4820
4829
|
* Register the upstream MCP server to the SolonGate Cloud API.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solongate/proxy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.42.1",
|
|
4
4
|
"description": "AI tool security proxy — protect any AI tool server with customizable policies, path/command constraints, rate limiting, and audit logging. Zero code changes required.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|