@node9/proxy 1.47.0 → 1.49.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 +49 -3
- package/dist/cli.mjs +49 -3
- package/dist/dashboard.mjs +8 -0
- package/dist/index.js +24 -1
- package/dist/index.mjs +24 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -4216,6 +4216,23 @@ var init_shields = __esm({
|
|
|
4216
4216
|
}
|
|
4217
4217
|
});
|
|
4218
4218
|
|
|
4219
|
+
// src/config/managed.ts
|
|
4220
|
+
function modeRank(mode) {
|
|
4221
|
+
return MODE_ORDER.indexOf(mode);
|
|
4222
|
+
}
|
|
4223
|
+
function resolveManagedMode(local, cloud, locked) {
|
|
4224
|
+
if (modeRank(cloud) === -1) return local;
|
|
4225
|
+
if (locked) return cloud;
|
|
4226
|
+
return modeRank(local) > modeRank(cloud) ? local : cloud;
|
|
4227
|
+
}
|
|
4228
|
+
var MODE_ORDER;
|
|
4229
|
+
var init_managed = __esm({
|
|
4230
|
+
"src/config/managed.ts"() {
|
|
4231
|
+
"use strict";
|
|
4232
|
+
MODE_ORDER = ["observe", "audit", "standard", "strict"];
|
|
4233
|
+
}
|
|
4234
|
+
});
|
|
4235
|
+
|
|
4219
4236
|
// src/config/index.ts
|
|
4220
4237
|
function _resetConfigCache() {
|
|
4221
4238
|
cachedConfig = null;
|
|
@@ -4415,6 +4432,7 @@ function getConfig(cwd) {
|
|
|
4415
4432
|
};
|
|
4416
4433
|
applyLayer(globalConfig);
|
|
4417
4434
|
applyLayer(projectConfig);
|
|
4435
|
+
let cloudManagedShields = [];
|
|
4418
4436
|
{
|
|
4419
4437
|
const cacheFile = import_path3.default.join(import_os3.default.homedir(), ".node9", "rules-cache.json");
|
|
4420
4438
|
try {
|
|
@@ -4422,6 +4440,16 @@ function getConfig(cwd) {
|
|
|
4422
4440
|
if (Array.isArray(raw.rules) && raw.rules.length > 0) {
|
|
4423
4441
|
applyLayer({ policy: { smartRules: raw.rules } });
|
|
4424
4442
|
}
|
|
4443
|
+
if (Array.isArray(raw.shields)) {
|
|
4444
|
+
cloudManagedShields = raw.shields.filter((s) => typeof s === "string");
|
|
4445
|
+
}
|
|
4446
|
+
if (raw.managedConfig && typeof raw.managedConfig === "object") {
|
|
4447
|
+
const mc = raw.managedConfig;
|
|
4448
|
+
if (typeof mc.mode === "string") {
|
|
4449
|
+
const locked = Array.isArray(mc.locked) && mc.locked.includes("mode");
|
|
4450
|
+
mergedSettings.mode = resolveManagedMode(mergedSettings.mode, mc.mode, locked);
|
|
4451
|
+
}
|
|
4452
|
+
}
|
|
4425
4453
|
if (raw.panicMode === true) {
|
|
4426
4454
|
mergedSettings.panicMode = true;
|
|
4427
4455
|
}
|
|
@@ -4432,7 +4460,8 @@ function getConfig(cwd) {
|
|
|
4432
4460
|
}
|
|
4433
4461
|
}
|
|
4434
4462
|
const shieldOverrides = readShieldOverrides();
|
|
4435
|
-
|
|
4463
|
+
const activeShieldNames = [.../* @__PURE__ */ new Set([...readActiveShields(), ...cloudManagedShields])];
|
|
4464
|
+
for (const shieldName of activeShieldNames) {
|
|
4436
4465
|
const shield = getShield(shieldName);
|
|
4437
4466
|
if (!shield) continue;
|
|
4438
4467
|
const existingRuleNames = new Set(mergedPolicy.smartRules.map((r) => r.name));
|
|
@@ -4532,6 +4561,7 @@ var init_config = __esm({
|
|
|
4532
4561
|
import_os3 = __toESM(require("os"));
|
|
4533
4562
|
init_config_schema();
|
|
4534
4563
|
init_shields();
|
|
4564
|
+
init_managed();
|
|
4535
4565
|
DANGEROUS_WORDS = [
|
|
4536
4566
|
"mkfs",
|
|
4537
4567
|
// formats/wipes a filesystem partition
|
|
@@ -16882,6 +16912,18 @@ function extractRules(body) {
|
|
|
16882
16912
|
if (Array.isArray(body.rules)) return body.rules;
|
|
16883
16913
|
return [];
|
|
16884
16914
|
}
|
|
16915
|
+
function extractShields(body) {
|
|
16916
|
+
return Array.isArray(body.shields) ? body.shields.filter((s) => typeof s === "string") : [];
|
|
16917
|
+
}
|
|
16918
|
+
function extractManagedConfig(body) {
|
|
16919
|
+
const mc = body.managedConfig;
|
|
16920
|
+
if (!mc || typeof mc !== "object") return void 0;
|
|
16921
|
+
const out = {
|
|
16922
|
+
locked: Array.isArray(mc.locked) ? mc.locked.filter((f) => typeof f === "string") : []
|
|
16923
|
+
};
|
|
16924
|
+
if (typeof mc.mode === "string") out.mode = mc.mode;
|
|
16925
|
+
return out.mode !== void 0 ? out : void 0;
|
|
16926
|
+
}
|
|
16885
16927
|
function writeCache2(cache) {
|
|
16886
16928
|
const dir = import_path31.default.dirname(rulesCacheFile());
|
|
16887
16929
|
if (!import_fs32.default.existsSync(dir)) import_fs32.default.mkdirSync(dir, { recursive: true });
|
|
@@ -16901,7 +16943,9 @@ async function syncOnce() {
|
|
|
16901
16943
|
panicMode: result.body.panicMode,
|
|
16902
16944
|
shadowMode: result.body.shadowMode,
|
|
16903
16945
|
syncIntervalHours: result.body.syncIntervalHours,
|
|
16904
|
-
workspaceId: result.body.workspaceId
|
|
16946
|
+
workspaceId: result.body.workspaceId,
|
|
16947
|
+
shields: extractShields(result.body),
|
|
16948
|
+
managedConfig: extractManagedConfig(result.body)
|
|
16905
16949
|
};
|
|
16906
16950
|
writeCache2(cache);
|
|
16907
16951
|
}
|
|
@@ -17073,7 +17117,9 @@ async function runCloudSync() {
|
|
|
17073
17117
|
panicMode: result.body.panicMode,
|
|
17074
17118
|
shadowMode: result.body.shadowMode,
|
|
17075
17119
|
syncIntervalHours: result.body.syncIntervalHours,
|
|
17076
|
-
workspaceId: result.body.workspaceId
|
|
17120
|
+
workspaceId: result.body.workspaceId,
|
|
17121
|
+
shields: extractShields(result.body),
|
|
17122
|
+
managedConfig: extractManagedConfig(result.body)
|
|
17077
17123
|
};
|
|
17078
17124
|
writeCache2(cache);
|
|
17079
17125
|
maybePushBlast();
|
package/dist/cli.mjs
CHANGED
|
@@ -4194,6 +4194,23 @@ var init_shields = __esm({
|
|
|
4194
4194
|
}
|
|
4195
4195
|
});
|
|
4196
4196
|
|
|
4197
|
+
// src/config/managed.ts
|
|
4198
|
+
function modeRank(mode) {
|
|
4199
|
+
return MODE_ORDER.indexOf(mode);
|
|
4200
|
+
}
|
|
4201
|
+
function resolveManagedMode(local, cloud, locked) {
|
|
4202
|
+
if (modeRank(cloud) === -1) return local;
|
|
4203
|
+
if (locked) return cloud;
|
|
4204
|
+
return modeRank(local) > modeRank(cloud) ? local : cloud;
|
|
4205
|
+
}
|
|
4206
|
+
var MODE_ORDER;
|
|
4207
|
+
var init_managed = __esm({
|
|
4208
|
+
"src/config/managed.ts"() {
|
|
4209
|
+
"use strict";
|
|
4210
|
+
MODE_ORDER = ["observe", "audit", "standard", "strict"];
|
|
4211
|
+
}
|
|
4212
|
+
});
|
|
4213
|
+
|
|
4197
4214
|
// src/config/index.ts
|
|
4198
4215
|
import fs3 from "fs";
|
|
4199
4216
|
import path3 from "path";
|
|
@@ -4396,6 +4413,7 @@ function getConfig(cwd) {
|
|
|
4396
4413
|
};
|
|
4397
4414
|
applyLayer(globalConfig);
|
|
4398
4415
|
applyLayer(projectConfig);
|
|
4416
|
+
let cloudManagedShields = [];
|
|
4399
4417
|
{
|
|
4400
4418
|
const cacheFile = path3.join(os3.homedir(), ".node9", "rules-cache.json");
|
|
4401
4419
|
try {
|
|
@@ -4403,6 +4421,16 @@ function getConfig(cwd) {
|
|
|
4403
4421
|
if (Array.isArray(raw.rules) && raw.rules.length > 0) {
|
|
4404
4422
|
applyLayer({ policy: { smartRules: raw.rules } });
|
|
4405
4423
|
}
|
|
4424
|
+
if (Array.isArray(raw.shields)) {
|
|
4425
|
+
cloudManagedShields = raw.shields.filter((s) => typeof s === "string");
|
|
4426
|
+
}
|
|
4427
|
+
if (raw.managedConfig && typeof raw.managedConfig === "object") {
|
|
4428
|
+
const mc = raw.managedConfig;
|
|
4429
|
+
if (typeof mc.mode === "string") {
|
|
4430
|
+
const locked = Array.isArray(mc.locked) && mc.locked.includes("mode");
|
|
4431
|
+
mergedSettings.mode = resolveManagedMode(mergedSettings.mode, mc.mode, locked);
|
|
4432
|
+
}
|
|
4433
|
+
}
|
|
4406
4434
|
if (raw.panicMode === true) {
|
|
4407
4435
|
mergedSettings.panicMode = true;
|
|
4408
4436
|
}
|
|
@@ -4413,7 +4441,8 @@ function getConfig(cwd) {
|
|
|
4413
4441
|
}
|
|
4414
4442
|
}
|
|
4415
4443
|
const shieldOverrides = readShieldOverrides();
|
|
4416
|
-
|
|
4444
|
+
const activeShieldNames = [.../* @__PURE__ */ new Set([...readActiveShields(), ...cloudManagedShields])];
|
|
4445
|
+
for (const shieldName of activeShieldNames) {
|
|
4417
4446
|
const shield = getShield(shieldName);
|
|
4418
4447
|
if (!shield) continue;
|
|
4419
4448
|
const existingRuleNames = new Set(mergedPolicy.smartRules.map((r) => r.name));
|
|
@@ -4510,6 +4539,7 @@ var init_config = __esm({
|
|
|
4510
4539
|
"use strict";
|
|
4511
4540
|
init_config_schema();
|
|
4512
4541
|
init_shields();
|
|
4542
|
+
init_managed();
|
|
4513
4543
|
DANGEROUS_WORDS = [
|
|
4514
4544
|
"mkfs",
|
|
4515
4545
|
// formats/wipes a filesystem partition
|
|
@@ -16856,6 +16886,18 @@ function extractRules(body) {
|
|
|
16856
16886
|
if (Array.isArray(body.rules)) return body.rules;
|
|
16857
16887
|
return [];
|
|
16858
16888
|
}
|
|
16889
|
+
function extractShields(body) {
|
|
16890
|
+
return Array.isArray(body.shields) ? body.shields.filter((s) => typeof s === "string") : [];
|
|
16891
|
+
}
|
|
16892
|
+
function extractManagedConfig(body) {
|
|
16893
|
+
const mc = body.managedConfig;
|
|
16894
|
+
if (!mc || typeof mc !== "object") return void 0;
|
|
16895
|
+
const out = {
|
|
16896
|
+
locked: Array.isArray(mc.locked) ? mc.locked.filter((f) => typeof f === "string") : []
|
|
16897
|
+
};
|
|
16898
|
+
if (typeof mc.mode === "string") out.mode = mc.mode;
|
|
16899
|
+
return out.mode !== void 0 ? out : void 0;
|
|
16900
|
+
}
|
|
16859
16901
|
function writeCache2(cache) {
|
|
16860
16902
|
const dir = path31.dirname(rulesCacheFile());
|
|
16861
16903
|
if (!fs32.existsSync(dir)) fs32.mkdirSync(dir, { recursive: true });
|
|
@@ -16875,7 +16917,9 @@ async function syncOnce() {
|
|
|
16875
16917
|
panicMode: result.body.panicMode,
|
|
16876
16918
|
shadowMode: result.body.shadowMode,
|
|
16877
16919
|
syncIntervalHours: result.body.syncIntervalHours,
|
|
16878
|
-
workspaceId: result.body.workspaceId
|
|
16920
|
+
workspaceId: result.body.workspaceId,
|
|
16921
|
+
shields: extractShields(result.body),
|
|
16922
|
+
managedConfig: extractManagedConfig(result.body)
|
|
16879
16923
|
};
|
|
16880
16924
|
writeCache2(cache);
|
|
16881
16925
|
}
|
|
@@ -17047,7 +17091,9 @@ async function runCloudSync() {
|
|
|
17047
17091
|
panicMode: result.body.panicMode,
|
|
17048
17092
|
shadowMode: result.body.shadowMode,
|
|
17049
17093
|
syncIntervalHours: result.body.syncIntervalHours,
|
|
17050
|
-
workspaceId: result.body.workspaceId
|
|
17094
|
+
workspaceId: result.body.workspaceId,
|
|
17095
|
+
shields: extractShields(result.body),
|
|
17096
|
+
managedConfig: extractManagedConfig(result.body)
|
|
17051
17097
|
};
|
|
17052
17098
|
writeCache2(cache);
|
|
17053
17099
|
maybePushBlast();
|
package/dist/dashboard.mjs
CHANGED
|
@@ -2412,6 +2412,13 @@ var init_shields = __esm({
|
|
|
2412
2412
|
}
|
|
2413
2413
|
});
|
|
2414
2414
|
|
|
2415
|
+
// src/config/managed.ts
|
|
2416
|
+
var init_managed = __esm({
|
|
2417
|
+
"src/config/managed.ts"() {
|
|
2418
|
+
"use strict";
|
|
2419
|
+
}
|
|
2420
|
+
});
|
|
2421
|
+
|
|
2415
2422
|
// src/config/index.ts
|
|
2416
2423
|
var DANGEROUS_WORDS, DEFAULT_CONFIG;
|
|
2417
2424
|
var init_config = __esm({
|
|
@@ -2419,6 +2426,7 @@ var init_config = __esm({
|
|
|
2419
2426
|
"use strict";
|
|
2420
2427
|
init_config_schema();
|
|
2421
2428
|
init_shields();
|
|
2429
|
+
init_managed();
|
|
2422
2430
|
DANGEROUS_WORDS = [
|
|
2423
2431
|
"mkfs",
|
|
2424
2432
|
// formats/wipes a filesystem partition
|
package/dist/index.js
CHANGED
|
@@ -3501,6 +3501,17 @@ function readShieldOverrides() {
|
|
|
3501
3501
|
return readShieldsFile().overrides ?? {};
|
|
3502
3502
|
}
|
|
3503
3503
|
|
|
3504
|
+
// src/config/managed.ts
|
|
3505
|
+
var MODE_ORDER = ["observe", "audit", "standard", "strict"];
|
|
3506
|
+
function modeRank(mode) {
|
|
3507
|
+
return MODE_ORDER.indexOf(mode);
|
|
3508
|
+
}
|
|
3509
|
+
function resolveManagedMode(local, cloud, locked) {
|
|
3510
|
+
if (modeRank(cloud) === -1) return local;
|
|
3511
|
+
if (locked) return cloud;
|
|
3512
|
+
return modeRank(local) > modeRank(cloud) ? local : cloud;
|
|
3513
|
+
}
|
|
3514
|
+
|
|
3504
3515
|
// src/config/index.ts
|
|
3505
3516
|
var DANGEROUS_WORDS = [
|
|
3506
3517
|
"mkfs",
|
|
@@ -3947,6 +3958,7 @@ function getConfig(cwd) {
|
|
|
3947
3958
|
};
|
|
3948
3959
|
applyLayer(globalConfig);
|
|
3949
3960
|
applyLayer(projectConfig);
|
|
3961
|
+
let cloudManagedShields = [];
|
|
3950
3962
|
{
|
|
3951
3963
|
const cacheFile = import_path3.default.join(import_os3.default.homedir(), ".node9", "rules-cache.json");
|
|
3952
3964
|
try {
|
|
@@ -3954,6 +3966,16 @@ function getConfig(cwd) {
|
|
|
3954
3966
|
if (Array.isArray(raw.rules) && raw.rules.length > 0) {
|
|
3955
3967
|
applyLayer({ policy: { smartRules: raw.rules } });
|
|
3956
3968
|
}
|
|
3969
|
+
if (Array.isArray(raw.shields)) {
|
|
3970
|
+
cloudManagedShields = raw.shields.filter((s) => typeof s === "string");
|
|
3971
|
+
}
|
|
3972
|
+
if (raw.managedConfig && typeof raw.managedConfig === "object") {
|
|
3973
|
+
const mc = raw.managedConfig;
|
|
3974
|
+
if (typeof mc.mode === "string") {
|
|
3975
|
+
const locked = Array.isArray(mc.locked) && mc.locked.includes("mode");
|
|
3976
|
+
mergedSettings.mode = resolveManagedMode(mergedSettings.mode, mc.mode, locked);
|
|
3977
|
+
}
|
|
3978
|
+
}
|
|
3957
3979
|
if (raw.panicMode === true) {
|
|
3958
3980
|
mergedSettings.panicMode = true;
|
|
3959
3981
|
}
|
|
@@ -3964,7 +3986,8 @@ function getConfig(cwd) {
|
|
|
3964
3986
|
}
|
|
3965
3987
|
}
|
|
3966
3988
|
const shieldOverrides = readShieldOverrides();
|
|
3967
|
-
|
|
3989
|
+
const activeShieldNames = [.../* @__PURE__ */ new Set([...readActiveShields(), ...cloudManagedShields])];
|
|
3990
|
+
for (const shieldName of activeShieldNames) {
|
|
3968
3991
|
const shield = getShield(shieldName);
|
|
3969
3992
|
if (!shield) continue;
|
|
3970
3993
|
const existingRuleNames = new Set(mergedPolicy.smartRules.map((r) => r.name));
|
package/dist/index.mjs
CHANGED
|
@@ -3471,6 +3471,17 @@ function readShieldOverrides() {
|
|
|
3471
3471
|
return readShieldsFile().overrides ?? {};
|
|
3472
3472
|
}
|
|
3473
3473
|
|
|
3474
|
+
// src/config/managed.ts
|
|
3475
|
+
var MODE_ORDER = ["observe", "audit", "standard", "strict"];
|
|
3476
|
+
function modeRank(mode) {
|
|
3477
|
+
return MODE_ORDER.indexOf(mode);
|
|
3478
|
+
}
|
|
3479
|
+
function resolveManagedMode(local, cloud, locked) {
|
|
3480
|
+
if (modeRank(cloud) === -1) return local;
|
|
3481
|
+
if (locked) return cloud;
|
|
3482
|
+
return modeRank(local) > modeRank(cloud) ? local : cloud;
|
|
3483
|
+
}
|
|
3484
|
+
|
|
3474
3485
|
// src/config/index.ts
|
|
3475
3486
|
var DANGEROUS_WORDS = [
|
|
3476
3487
|
"mkfs",
|
|
@@ -3917,6 +3928,7 @@ function getConfig(cwd) {
|
|
|
3917
3928
|
};
|
|
3918
3929
|
applyLayer(globalConfig);
|
|
3919
3930
|
applyLayer(projectConfig);
|
|
3931
|
+
let cloudManagedShields = [];
|
|
3920
3932
|
{
|
|
3921
3933
|
const cacheFile = path3.join(os3.homedir(), ".node9", "rules-cache.json");
|
|
3922
3934
|
try {
|
|
@@ -3924,6 +3936,16 @@ function getConfig(cwd) {
|
|
|
3924
3936
|
if (Array.isArray(raw.rules) && raw.rules.length > 0) {
|
|
3925
3937
|
applyLayer({ policy: { smartRules: raw.rules } });
|
|
3926
3938
|
}
|
|
3939
|
+
if (Array.isArray(raw.shields)) {
|
|
3940
|
+
cloudManagedShields = raw.shields.filter((s) => typeof s === "string");
|
|
3941
|
+
}
|
|
3942
|
+
if (raw.managedConfig && typeof raw.managedConfig === "object") {
|
|
3943
|
+
const mc = raw.managedConfig;
|
|
3944
|
+
if (typeof mc.mode === "string") {
|
|
3945
|
+
const locked = Array.isArray(mc.locked) && mc.locked.includes("mode");
|
|
3946
|
+
mergedSettings.mode = resolveManagedMode(mergedSettings.mode, mc.mode, locked);
|
|
3947
|
+
}
|
|
3948
|
+
}
|
|
3927
3949
|
if (raw.panicMode === true) {
|
|
3928
3950
|
mergedSettings.panicMode = true;
|
|
3929
3951
|
}
|
|
@@ -3934,7 +3956,8 @@ function getConfig(cwd) {
|
|
|
3934
3956
|
}
|
|
3935
3957
|
}
|
|
3936
3958
|
const shieldOverrides = readShieldOverrides();
|
|
3937
|
-
|
|
3959
|
+
const activeShieldNames = [.../* @__PURE__ */ new Set([...readActiveShields(), ...cloudManagedShields])];
|
|
3960
|
+
for (const shieldName of activeShieldNames) {
|
|
3938
3961
|
const shield = getShield(shieldName);
|
|
3939
3962
|
if (!shield) continue;
|
|
3940
3963
|
const existingRuleNames = new Set(mergedPolicy.smartRules.map((r) => r.name));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node9/proxy",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.49.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",
|