@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 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
- for (const shieldName of readActiveShields()) {
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
- for (const shieldName of readActiveShields()) {
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();
@@ -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
- for (const shieldName of readActiveShields()) {
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
- for (const shieldName of readActiveShields()) {
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.47.0",
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",