@solongate/proxy 0.82.94 → 0.82.96
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/commands/index.js +3 -1
- package/dist/index.js +3 -1
- package/dist/tui/index.js +3 -1
- package/hooks/guard.bundled.mjs +5 -1
- package/hooks/guard.mjs +10 -1
- package/package.json +1 -1
package/dist/commands/index.js
CHANGED
|
@@ -1239,7 +1239,9 @@ async function collectChecks() {
|
|
|
1239
1239
|
checks.push(
|
|
1240
1240
|
rlBlock ? { name: "rate limit", ok: true, detail: `block \xB7 ${rlWindows(rlBlock)}` } : rlObserve ? { name: "rate limit", ok: true, detail: `detect \xB7 ${rlWindows(rlObserve)} \xB7 flags bursts, never blocks` } : { name: "rate limit", ok: "warn", detail: "off" }
|
|
1241
1241
|
);
|
|
1242
|
-
checks.push(
|
|
1242
|
+
checks.push(
|
|
1243
|
+
sec?.dlpBlock ? { name: "dlp", ok: true, detail: `block \xB7 ${sec.dlpBlock.patterns.length} patterns` } : sec?.dlpRedact ? { name: "dlp", ok: true, detail: `detect \xB7 ${sec.dlpRedact.patterns.length} patterns \xB7 masks secrets, never blocks` } : { name: "dlp", ok: "warn", detail: "off" }
|
|
1244
|
+
);
|
|
1243
1245
|
checks.push({ name: "self-protection", ok: active2.self_protection_enabled ? true : "warn", detail: active2.self_protection_enabled ? "on" : "off" });
|
|
1244
1246
|
} catch (e) {
|
|
1245
1247
|
checks.push({ name: "api", ok: false, detail: "unreachable: " + (e instanceof Error ? e.message : String(e)) });
|
package/dist/index.js
CHANGED
|
@@ -11326,7 +11326,9 @@ async function collectChecks() {
|
|
|
11326
11326
|
checks.push(
|
|
11327
11327
|
rlBlock ? { name: "rate limit", ok: true, detail: `block \xB7 ${rlWindows(rlBlock)}` } : rlObserve ? { name: "rate limit", ok: true, detail: `detect \xB7 ${rlWindows(rlObserve)} \xB7 flags bursts, never blocks` } : { name: "rate limit", ok: "warn", detail: "off" }
|
|
11328
11328
|
);
|
|
11329
|
-
checks.push(
|
|
11329
|
+
checks.push(
|
|
11330
|
+
sec?.dlpBlock ? { name: "dlp", ok: true, detail: `block \xB7 ${sec.dlpBlock.patterns.length} patterns` } : sec?.dlpRedact ? { name: "dlp", ok: true, detail: `detect \xB7 ${sec.dlpRedact.patterns.length} patterns \xB7 masks secrets, never blocks` } : { name: "dlp", ok: "warn", detail: "off" }
|
|
11331
|
+
);
|
|
11330
11332
|
checks.push({ name: "self-protection", ok: active2.self_protection_enabled ? true : "warn", detail: active2.self_protection_enabled ? "on" : "off" });
|
|
11331
11333
|
} catch (e) {
|
|
11332
11334
|
checks.push({ name: "api", ok: false, detail: "unreachable: " + (e instanceof Error ? e.message : String(e)) });
|
package/dist/tui/index.js
CHANGED
|
@@ -4355,7 +4355,9 @@ async function collectChecks() {
|
|
|
4355
4355
|
checks.push(
|
|
4356
4356
|
rlBlock ? { name: "rate limit", ok: true, detail: `block \xB7 ${rlWindows(rlBlock)}` } : rlObserve ? { name: "rate limit", ok: true, detail: `detect \xB7 ${rlWindows(rlObserve)} \xB7 flags bursts, never blocks` } : { name: "rate limit", ok: "warn", detail: "off" }
|
|
4357
4357
|
);
|
|
4358
|
-
checks.push(
|
|
4358
|
+
checks.push(
|
|
4359
|
+
sec?.dlpBlock ? { name: "dlp", ok: true, detail: `block \xB7 ${sec.dlpBlock.patterns.length} patterns` } : sec?.dlpRedact ? { name: "dlp", ok: true, detail: `detect \xB7 ${sec.dlpRedact.patterns.length} patterns \xB7 masks secrets, never blocks` } : { name: "dlp", ok: "warn", detail: "off" }
|
|
4360
|
+
);
|
|
4359
4361
|
checks.push({ name: "self-protection", ok: active2.self_protection_enabled ? true : "warn", detail: active2.self_protection_enabled ? "on" : "off" });
|
|
4360
4362
|
} catch (e) {
|
|
4361
4363
|
checks.push({ name: "api", ok: false, detail: "unreachable: " + (e instanceof Error ? e.message : String(e)) });
|
package/hooks/guard.bundled.mjs
CHANGED
|
@@ -6536,7 +6536,7 @@ import { resolve, join, dirname, isAbsolute } from "node:path";
|
|
|
6536
6536
|
import { homedir } from "node:os";
|
|
6537
6537
|
import { gunzipSync } from "node:zlib";
|
|
6538
6538
|
import { createHash } from "node:crypto";
|
|
6539
|
-
var HOOK_VERSION =
|
|
6539
|
+
var HOOK_VERSION = 68;
|
|
6540
6540
|
function localLogsOnly(security) {
|
|
6541
6541
|
if (security && typeof security === "object") {
|
|
6542
6542
|
const l = security.localLogs;
|
|
@@ -7955,6 +7955,10 @@ function securityLayerCheck(toolName, args, cfg, agentKey) {
|
|
|
7955
7955
|
if (!cfg)
|
|
7956
7956
|
return null;
|
|
7957
7957
|
try {
|
|
7958
|
+
const q = cfg.guestQuota;
|
|
7959
|
+
if (q && q.exhausted) {
|
|
7960
|
+
return `Guest allowance used up (${q.limit} tool calls). Create an account at https://auth.solongate.com to carry on \u2014 your project, its policy and everything recorded carry over, and this device keeps working. To stop guarding this machine instead: solongate \u2192 Settings \u2192 guard \u2192 d.`;
|
|
7961
|
+
}
|
|
7958
7962
|
if (cfg.dlpBlock) {
|
|
7959
7963
|
const hit = dlpScan(args, cfg.dlpBlock);
|
|
7960
7964
|
if (hit)
|
package/hooks/guard.mjs
CHANGED
|
@@ -32,7 +32,7 @@ import { createHash } from 'node:crypto';
|
|
|
32
32
|
// the installed hook self-updates when the cloud version is higher (see
|
|
33
33
|
// maybeSelfUpdate). This is what makes guard fixes propagate without a manual
|
|
34
34
|
// reinstall — the same trust model as the OPA WASM this hook already runs.
|
|
35
|
-
const HOOK_VERSION =
|
|
35
|
+
const HOOK_VERSION = 68;
|
|
36
36
|
|
|
37
37
|
// True when local log storage is ON. In that mode logs are kept LOCAL ONLY and
|
|
38
38
|
// nothing is sent to the cloud audit log.
|
|
@@ -1765,6 +1765,15 @@ function rateLimitCheck(agentKey, limits) {
|
|
|
1765
1765
|
function securityLayerCheck(toolName, args, cfg, agentKey) {
|
|
1766
1766
|
if (!cfg) return null;
|
|
1767
1767
|
try {
|
|
1768
|
+
// Guest allowance. A guest account is a trial, so past its allowance every
|
|
1769
|
+
// call is denied without exception rather than quietly running unguarded:
|
|
1770
|
+
// an agent that believes it is protected and is not is worse off than one
|
|
1771
|
+
// that is stopped and told why. Checked first, so no other layer can let a
|
|
1772
|
+
// call through after the allowance is gone.
|
|
1773
|
+
const q = cfg.guestQuota;
|
|
1774
|
+
if (q && q.exhausted) {
|
|
1775
|
+
return `Guest allowance used up (${q.limit} tool calls). Create an account at https://auth.solongate.com to carry on — your project, its policy and everything recorded carry over, and this device keeps working. To stop guarding this machine instead: solongate → Settings → guard → d.`;
|
|
1776
|
+
}
|
|
1768
1777
|
if (cfg.dlpBlock) {
|
|
1769
1778
|
const hit = dlpScan(args, cfg.dlpBlock);
|
|
1770
1779
|
if (hit) return 'Security layer (DLP): blocked - arguments contain a ' + hit +
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solongate/proxy",
|
|
3
|
-
"version": "0.82.
|
|
3
|
+
"version": "0.82.96",
|
|
4
4
|
"description": "AI tool security proxy: protect any AI tool server with customizable policies, path/command constraints, rate limiting, and audit logging. No code changes required.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|