@astrasyncai/verification-gateway 4.0.0 → 4.2.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/README.md +106 -29
- package/dist/adapter-interface/interface.d.mts +2 -2
- package/dist/adapter-interface/interface.d.ts +2 -2
- package/dist/adapters/express.d.mts +2 -2
- package/dist/adapters/express.d.ts +2 -2
- package/dist/adapters/express.js +398 -15
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +398 -15
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/http-pdlss.d.mts +3 -3
- package/dist/adapters/http-pdlss.d.ts +3 -3
- package/dist/adapters/http-pdlss.js.map +1 -1
- package/dist/adapters/http-pdlss.mjs.map +1 -1
- package/dist/adapters/mcp.d.mts +56 -36
- package/dist/adapters/mcp.d.ts +56 -36
- package/dist/adapters/mcp.js +220 -3
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +220 -3
- package/dist/adapters/mcp.mjs.map +1 -1
- package/dist/adapters/nextjs.d.mts +2 -2
- package/dist/adapters/nextjs.d.ts +2 -2
- package/dist/adapters/nextjs.js +433 -18
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +433 -18
- package/dist/adapters/nextjs.mjs.map +1 -1
- package/dist/adapters/sdk.d.mts +2 -2
- package/dist/adapters/sdk.d.ts +2 -2
- package/dist/adapters/sdk.js +2 -2
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +2 -2
- package/dist/adapters/sdk.mjs.map +1 -1
- package/dist/agent/index.d.mts +2 -2
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/index.mjs.map +1 -1
- package/dist/bin/astrasync-claude-hook.js +13 -13
- package/dist/bin/astrasync-codex-hook.js +13 -13
- package/dist/bin/astrasync-guard.js +100 -13
- package/dist/bin/astrasync.js +168 -27
- package/dist/browser/background.js +13 -13
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +13 -13
- package/dist/browser/background.mjs.map +1 -1
- package/dist/browser/browser-adapter.d.mts +2 -2
- package/dist/browser/browser-adapter.d.ts +2 -2
- package/dist/claude-code/claude-code-adapter.d.mts +2 -2
- package/dist/claude-code/claude-code-adapter.d.ts +2 -2
- package/dist/cli/index.d.mts +2 -2
- package/dist/cli/index.d.ts +2 -2
- package/dist/codex/index.d.mts +3 -3
- package/dist/codex/index.d.ts +3 -3
- package/dist/codex/index.js +24 -13
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +24 -13
- package/dist/codex/index.mjs.map +1 -1
- package/dist/cursor/cursor-adapter.d.mts +2 -2
- package/dist/cursor/cursor-adapter.d.ts +2 -2
- package/dist/cursor/extension.d.mts +2 -2
- package/dist/cursor/extension.d.ts +2 -2
- package/dist/cursor/extension.js +13 -13
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +13 -13
- package/dist/cursor/extension.mjs.map +1 -1
- package/dist/edge-config.d.mts +22 -7
- package/dist/edge-config.d.ts +22 -7
- package/dist/edge-config.js.map +1 -1
- package/dist/edge-config.mjs.map +1 -1
- package/dist/edge-core/index.d.mts +425 -0
- package/dist/edge-core/index.d.ts +425 -0
- package/dist/edge-core/index.js +1482 -0
- package/dist/edge-core/index.js.map +1 -0
- package/dist/edge-core/index.mjs +1437 -0
- package/dist/edge-core/index.mjs.map +1 -0
- package/dist/{express-BZajRs4i.d.mts → express-BVd1_3FE.d.ts} +9 -7
- package/dist/{express-CjCUB1k7.d.ts → express-D_4hTn5Z.d.mts} +9 -7
- package/dist/gateway/gateway.d.mts +2 -2
- package/dist/gateway/gateway.d.ts +2 -2
- package/dist/gateway/gateway.js +13 -13
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +13 -13
- package/dist/gateway/gateway.mjs.map +1 -1
- package/dist/git-trigger/git-hooks.d.mts +2 -2
- package/dist/git-trigger/git-hooks.d.ts +2 -2
- package/dist/{index-adgKhujR.d.ts → index-B0YHu_SP.d.ts} +30 -27
- package/dist/{index-B0cyMZDL.d.mts → index-BPEBlOsE.d.mts} +30 -27
- package/dist/{index-BRYteOqO.d.mts → index-DQb5-_1X.d.mts} +1 -1
- package/dist/{index-BZQdVqNw.d.ts → index-T1aBoUcc.d.ts} +1 -1
- package/dist/index.d.mts +11 -11
- package/dist/index.d.ts +11 -11
- package/dist/index.js +477 -265
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +474 -265
- package/dist/index.mjs.map +1 -1
- package/dist/local-evaluator/evaluator.d.mts +2 -2
- package/dist/local-evaluator/evaluator.d.ts +2 -2
- package/dist/metadata-capture.d.mts +63 -4
- package/dist/metadata-capture.d.ts +63 -4
- package/dist/metadata-capture.js +67 -0
- package/dist/metadata-capture.js.map +1 -1
- package/dist/metadata-capture.mjs +64 -0
- package/dist/metadata-capture.mjs.map +1 -1
- package/dist/{nextjs-DeUTnOBd.d.mts → nextjs-WyeVr2Kp.d.mts} +3 -3
- package/dist/{nextjs-D_iFf5k-.d.ts → nextjs-w7RTbP1P.d.ts} +3 -3
- package/dist/platform-signatures.d.mts +5 -6
- package/dist/platform-signatures.d.ts +5 -6
- package/dist/platform-signatures.js.map +1 -1
- package/dist/platform-signatures.mjs.map +1 -1
- package/dist/registration/index.d.mts +10 -11
- package/dist/registration/index.d.ts +10 -11
- package/dist/registration/index.js.map +1 -1
- package/dist/registration/index.mjs.map +1 -1
- package/dist/{sdk-BM3mwEAq.d.ts → sdk-CbTNIkAa.d.mts} +4 -4
- package/dist/{sdk-_il1Q41f.d.mts → sdk-QeX0Z8Ho.d.ts} +4 -4
- package/dist/transport/index.d.mts +2 -2
- package/dist/transport/index.d.ts +2 -2
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/index.mjs.map +1 -1
- package/dist/{types-CHKCgDFC.d.ts → types-BLUx92FJ.d.ts} +1 -1
- package/dist/{types-DfnP7JiM.d.mts → types-DqfPU5Bl.d.mts} +1 -1
- package/dist/{types-BcDf9Kk0.d.mts → types-r850cOt0.d.mts} +106 -88
- package/dist/{types-fTQD448H.d.ts → types-sMxBT-nM.d.ts} +106 -88
- package/dist/ui/index.d.mts +11 -7
- package/dist/ui/index.d.ts +11 -7
- package/dist/ui/index.js +13 -9
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +10 -8
- package/dist/ui/index.mjs.map +1 -1
- package/dist/verify.d.mts +8 -7
- package/dist/verify.d.ts +8 -7
- package/dist/verify.js +1 -1
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +1 -1
- package/dist/verify.mjs.map +1 -1
- package/package.json +8 -2
|
@@ -3700,7 +3700,7 @@ function getTrustLevel(score) {
|
|
|
3700
3700
|
}
|
|
3701
3701
|
|
|
3702
3702
|
// src/version.ts
|
|
3703
|
-
var SDK_VERSION = "4.
|
|
3703
|
+
var SDK_VERSION = "4.1.0";
|
|
3704
3704
|
|
|
3705
3705
|
// src/well-known.ts
|
|
3706
3706
|
var CACHE_TTL_MS = 60 * 60 * 1e3;
|
|
@@ -4201,6 +4201,18 @@ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
|
|
|
4201
4201
|
// src/metadata-capture.ts
|
|
4202
4202
|
var MAX_TOTAL_BYTES = 16 * 1024;
|
|
4203
4203
|
|
|
4204
|
+
// src/edge-config.ts
|
|
4205
|
+
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
4206
|
+
version: 1,
|
|
4207
|
+
mode: "observe",
|
|
4208
|
+
depth: "classify",
|
|
4209
|
+
pathRules: [],
|
|
4210
|
+
sampling: Object.freeze({ anonymousBeaconRate: 0.1 }),
|
|
4211
|
+
failurePosture: "open"
|
|
4212
|
+
});
|
|
4213
|
+
var DEFAULT_TTL_MS = 60 * 1e3;
|
|
4214
|
+
var DEFAULT_MAX_STALE_MS = 24 * 60 * 60 * 1e3;
|
|
4215
|
+
|
|
4204
4216
|
// src/adapters/express.ts
|
|
4205
4217
|
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
4206
4218
|
|
|
@@ -4269,18 +4281,6 @@ var import_node_crypto4 = require("crypto");
|
|
|
4269
4281
|
// src/transport/registry/visa.ts
|
|
4270
4282
|
var import_jose = require("jose");
|
|
4271
4283
|
|
|
4272
|
-
// src/edge-config.ts
|
|
4273
|
-
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
4274
|
-
version: 1,
|
|
4275
|
-
mode: "observe",
|
|
4276
|
-
depth: "classify",
|
|
4277
|
-
pathRules: [],
|
|
4278
|
-
sampling: Object.freeze({ anonymousBeaconRate: 0.1 }),
|
|
4279
|
-
failurePosture: "open"
|
|
4280
|
-
});
|
|
4281
|
-
var DEFAULT_TTL_MS = 60 * 1e3;
|
|
4282
|
-
var DEFAULT_MAX_STALE_MS = 24 * 60 * 60 * 1e3;
|
|
4283
|
-
|
|
4284
4284
|
// src/gateway/modes/online.ts
|
|
4285
4285
|
function toGatewayConfig(config) {
|
|
4286
4286
|
return {
|
|
@@ -4609,7 +4609,7 @@ function getTrustLevel(score) {
|
|
|
4609
4609
|
}
|
|
4610
4610
|
|
|
4611
4611
|
// src/version.ts
|
|
4612
|
-
var SDK_VERSION = "4.
|
|
4612
|
+
var SDK_VERSION = "4.1.0";
|
|
4613
4613
|
|
|
4614
4614
|
// src/well-known.ts
|
|
4615
4615
|
var CACHE_TTL_MS = 60 * 60 * 1e3;
|
|
@@ -5110,6 +5110,18 @@ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
|
|
|
5110
5110
|
// src/metadata-capture.ts
|
|
5111
5111
|
var MAX_TOTAL_BYTES = 16 * 1024;
|
|
5112
5112
|
|
|
5113
|
+
// src/edge-config.ts
|
|
5114
|
+
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
5115
|
+
version: 1,
|
|
5116
|
+
mode: "observe",
|
|
5117
|
+
depth: "classify",
|
|
5118
|
+
pathRules: [],
|
|
5119
|
+
sampling: Object.freeze({ anonymousBeaconRate: 0.1 }),
|
|
5120
|
+
failurePosture: "open"
|
|
5121
|
+
});
|
|
5122
|
+
var DEFAULT_TTL_MS = 60 * 1e3;
|
|
5123
|
+
var DEFAULT_MAX_STALE_MS = 24 * 60 * 60 * 1e3;
|
|
5124
|
+
|
|
5113
5125
|
// src/adapters/express.ts
|
|
5114
5126
|
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
5115
5127
|
|
|
@@ -5178,18 +5190,6 @@ var import_node_crypto4 = require("crypto");
|
|
|
5178
5190
|
// src/transport/registry/visa.ts
|
|
5179
5191
|
var import_jose = require("jose");
|
|
5180
5192
|
|
|
5181
|
-
// src/edge-config.ts
|
|
5182
|
-
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
5183
|
-
version: 1,
|
|
5184
|
-
mode: "observe",
|
|
5185
|
-
depth: "classify",
|
|
5186
|
-
pathRules: [],
|
|
5187
|
-
sampling: Object.freeze({ anonymousBeaconRate: 0.1 }),
|
|
5188
|
-
failurePosture: "open"
|
|
5189
|
-
});
|
|
5190
|
-
var DEFAULT_TTL_MS = 60 * 1e3;
|
|
5191
|
-
var DEFAULT_MAX_STALE_MS = 24 * 60 * 60 * 1e3;
|
|
5192
|
-
|
|
5193
5193
|
// src/gateway/modes/online.ts
|
|
5194
5194
|
function toGatewayConfig(config) {
|
|
5195
5195
|
return {
|
|
@@ -5912,6 +5912,72 @@ function uninstallClaudeHooks(settingsPath, marker2 = ASTRASYNC_HOOK_MARKER) {
|
|
|
5912
5912
|
writeSettings(settingsPath, settings);
|
|
5913
5913
|
return true;
|
|
5914
5914
|
}
|
|
5915
|
+
var PERMISSION_DENY_PATHS = [
|
|
5916
|
+
"**/.claude/settings.json",
|
|
5917
|
+
"**/.claude/settings.local.json",
|
|
5918
|
+
"~/.claude/settings.json",
|
|
5919
|
+
"~/.claude/settings.local.json",
|
|
5920
|
+
"**/.astrasync/**",
|
|
5921
|
+
"~/.astrasync/**"
|
|
5922
|
+
];
|
|
5923
|
+
var GUARD_PERMISSION_DENY_RULES = PERMISSION_DENY_PATHS.map(
|
|
5924
|
+
(p) => `Edit(${p})`
|
|
5925
|
+
);
|
|
5926
|
+
var LEGACY_GUARD_PERMISSION_DENY_RULES = [];
|
|
5927
|
+
function readDenyRules(settings, settingsPath) {
|
|
5928
|
+
const permissions = settings.permissions;
|
|
5929
|
+
if (permissions !== void 0 && (typeof permissions !== "object" || Array.isArray(permissions) || permissions === null)) {
|
|
5930
|
+
throw new Error(`${settingsPath}: "permissions" is not an object \u2014 refusing to rewrite it.`);
|
|
5931
|
+
}
|
|
5932
|
+
const deny = permissions?.deny;
|
|
5933
|
+
if (deny === void 0) return [];
|
|
5934
|
+
if (!Array.isArray(deny) || deny.some((r) => typeof r !== "string")) {
|
|
5935
|
+
throw new Error(
|
|
5936
|
+
`${settingsPath}: "permissions.deny" is not an array of strings \u2014 refusing to rewrite it.`
|
|
5937
|
+
);
|
|
5938
|
+
}
|
|
5939
|
+
return deny;
|
|
5940
|
+
}
|
|
5941
|
+
function installClaudePermissionRules(settingsPath, rules = GUARD_PERMISSION_DENY_RULES, staleRules = LEGACY_GUARD_PERMISSION_DENY_RULES) {
|
|
5942
|
+
const settings = readSettings(settingsPath);
|
|
5943
|
+
const deny = readDenyRules(settings, settingsPath);
|
|
5944
|
+
const stale = new Set(staleRules);
|
|
5945
|
+
const removedStaleRules = deny.filter((r) => stale.has(r));
|
|
5946
|
+
const kept = deny.filter((r) => !stale.has(r));
|
|
5947
|
+
const present = new Set(kept);
|
|
5948
|
+
const addedRules = rules.filter((r) => !present.has(r));
|
|
5949
|
+
const changed = addedRules.length > 0 || removedStaleRules.length > 0;
|
|
5950
|
+
if (changed) {
|
|
5951
|
+
settings.permissions = settings.permissions ?? {};
|
|
5952
|
+
settings.permissions.deny = [...kept, ...addedRules];
|
|
5953
|
+
writeSettings(settingsPath, settings);
|
|
5954
|
+
}
|
|
5955
|
+
return { addedRules, removedStaleRules, changed };
|
|
5956
|
+
}
|
|
5957
|
+
function uninstallClaudePermissionRules(settingsPath, rules = GUARD_PERMISSION_DENY_RULES, staleRules = LEGACY_GUARD_PERMISSION_DENY_RULES) {
|
|
5958
|
+
if (!(0, import_fs5.existsSync)(settingsPath)) return [];
|
|
5959
|
+
let settings;
|
|
5960
|
+
let deny;
|
|
5961
|
+
try {
|
|
5962
|
+
settings = readSettings(settingsPath);
|
|
5963
|
+
deny = readDenyRules(settings, settingsPath);
|
|
5964
|
+
} catch {
|
|
5965
|
+
return [];
|
|
5966
|
+
}
|
|
5967
|
+
if (deny.length === 0) return [];
|
|
5968
|
+
const ours = /* @__PURE__ */ new Set([...rules, ...staleRules]);
|
|
5969
|
+
const removed = deny.filter((r) => ours.has(r));
|
|
5970
|
+
if (removed.length === 0) return [];
|
|
5971
|
+
const remaining = deny.filter((r) => !ours.has(r));
|
|
5972
|
+
if (remaining.length > 0) {
|
|
5973
|
+
settings.permissions.deny = remaining;
|
|
5974
|
+
} else {
|
|
5975
|
+
delete settings.permissions.deny;
|
|
5976
|
+
if (Object.keys(settings.permissions).length === 0) delete settings.permissions;
|
|
5977
|
+
}
|
|
5978
|
+
writeSettings(settingsPath, settings);
|
|
5979
|
+
return removed;
|
|
5980
|
+
}
|
|
5915
5981
|
var GUARD_SELF_PROTECTION_PATTERNS = [
|
|
5916
5982
|
"**/.claude/settings.json",
|
|
5917
5983
|
"**/.claude/settings.local.json",
|
|
@@ -6306,6 +6372,17 @@ async function cmdInstallClaudeCode() {
|
|
|
6306
6372
|
} else {
|
|
6307
6373
|
console.log(` Hook: already present in ${settingsPath}`);
|
|
6308
6374
|
}
|
|
6375
|
+
const permResult = installClaudePermissionRules(settingsPath);
|
|
6376
|
+
if (permResult.addedRules.length > 0) {
|
|
6377
|
+
console.log(
|
|
6378
|
+
` Deny: ${permResult.addedRules.length} permissions.deny self-protection rules added in ${settingsPath}`
|
|
6379
|
+
);
|
|
6380
|
+
} else {
|
|
6381
|
+
console.log(" Deny: permissions.deny self-protection rules already present");
|
|
6382
|
+
}
|
|
6383
|
+
if (permResult.removedStaleRules.length > 0) {
|
|
6384
|
+
console.log(` removed ${permResult.removedStaleRules.length} stale guard rules`);
|
|
6385
|
+
}
|
|
6309
6386
|
console.log("\n Next steps:");
|
|
6310
6387
|
console.log(" 1. Start a NEW Claude Code session (settings load at startup).");
|
|
6311
6388
|
console.log(` 2. Watch decisions: tail -f ${path.join(astrasyncDir, "traces")}/*.jsonl`);
|
|
@@ -6323,6 +6400,16 @@ async function cmdUninstallClaudeCode() {
|
|
|
6323
6400
|
} else {
|
|
6324
6401
|
console.log(`[AstraSync] No AstraSync hook found in ${settingsPath}`);
|
|
6325
6402
|
}
|
|
6403
|
+
const removedRules = uninstallClaudePermissionRules(settingsPath);
|
|
6404
|
+
if (removedRules.length > 0) {
|
|
6405
|
+
console.log(
|
|
6406
|
+
`[AstraSync] Removed ${removedRules.length} permissions.deny rules from ${settingsPath}.`
|
|
6407
|
+
);
|
|
6408
|
+
console.log(" If you had added any of these yourself, re-add them:");
|
|
6409
|
+
for (const rule of removedRules) {
|
|
6410
|
+
console.log(` ${rule}`);
|
|
6411
|
+
}
|
|
6412
|
+
}
|
|
6326
6413
|
console.log(
|
|
6327
6414
|
`[AstraSync] Policy and traces left in place at ${astrasyncDir} \u2014 delete manually if unwanted.`
|
|
6328
6415
|
);
|
package/dist/bin/astrasync.js
CHANGED
|
@@ -5000,7 +5000,7 @@ var SDK_VERSION;
|
|
|
5000
5000
|
var init_version = __esm({
|
|
5001
5001
|
"src/version.ts"() {
|
|
5002
5002
|
"use strict";
|
|
5003
|
-
SDK_VERSION = "4.
|
|
5003
|
+
SDK_VERSION = "4.1.0";
|
|
5004
5004
|
}
|
|
5005
5005
|
});
|
|
5006
5006
|
|
|
@@ -5567,6 +5567,82 @@ var init_metadata_capture = __esm({
|
|
|
5567
5567
|
}
|
|
5568
5568
|
});
|
|
5569
5569
|
|
|
5570
|
+
// src/edge-config.ts
|
|
5571
|
+
var DEFAULT_EDGE_CONFIG, DEFAULT_TTL_MS, DEFAULT_MAX_STALE_MS;
|
|
5572
|
+
var init_edge_config = __esm({
|
|
5573
|
+
"src/edge-config.ts"() {
|
|
5574
|
+
"use strict";
|
|
5575
|
+
DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
5576
|
+
version: 1,
|
|
5577
|
+
mode: "observe",
|
|
5578
|
+
depth: "classify",
|
|
5579
|
+
pathRules: [],
|
|
5580
|
+
sampling: Object.freeze({ anonymousBeaconRate: 0.1 }),
|
|
5581
|
+
failurePosture: "open"
|
|
5582
|
+
});
|
|
5583
|
+
DEFAULT_TTL_MS = 60 * 1e3;
|
|
5584
|
+
DEFAULT_MAX_STALE_MS = 24 * 60 * 60 * 1e3;
|
|
5585
|
+
}
|
|
5586
|
+
});
|
|
5587
|
+
|
|
5588
|
+
// src/platform-signatures.ts
|
|
5589
|
+
var init_platform_signatures = __esm({
|
|
5590
|
+
"src/platform-signatures.ts"() {
|
|
5591
|
+
"use strict";
|
|
5592
|
+
}
|
|
5593
|
+
});
|
|
5594
|
+
|
|
5595
|
+
// src/edge-core/request.ts
|
|
5596
|
+
var init_request = __esm({
|
|
5597
|
+
"src/edge-core/request.ts"() {
|
|
5598
|
+
"use strict";
|
|
5599
|
+
init_metadata_capture();
|
|
5600
|
+
}
|
|
5601
|
+
});
|
|
5602
|
+
|
|
5603
|
+
// src/edge-core/detect.ts
|
|
5604
|
+
var init_detect = __esm({
|
|
5605
|
+
"src/edge-core/detect.ts"() {
|
|
5606
|
+
"use strict";
|
|
5607
|
+
init_request();
|
|
5608
|
+
}
|
|
5609
|
+
});
|
|
5610
|
+
|
|
5611
|
+
// src/edge-core/classify.ts
|
|
5612
|
+
var init_classify = __esm({
|
|
5613
|
+
"src/edge-core/classify.ts"() {
|
|
5614
|
+
"use strict";
|
|
5615
|
+
init_edge_config();
|
|
5616
|
+
init_metadata_capture();
|
|
5617
|
+
init_platform_signatures();
|
|
5618
|
+
init_verify();
|
|
5619
|
+
init_detect();
|
|
5620
|
+
init_request();
|
|
5621
|
+
}
|
|
5622
|
+
});
|
|
5623
|
+
|
|
5624
|
+
// src/edge-core/events.ts
|
|
5625
|
+
var init_events = __esm({
|
|
5626
|
+
"src/edge-core/events.ts"() {
|
|
5627
|
+
"use strict";
|
|
5628
|
+
init_verify();
|
|
5629
|
+
init_request();
|
|
5630
|
+
}
|
|
5631
|
+
});
|
|
5632
|
+
|
|
5633
|
+
// src/adapters/anonymous-beacon.ts
|
|
5634
|
+
var init_anonymous_beacon = __esm({
|
|
5635
|
+
"src/adapters/anonymous-beacon.ts"() {
|
|
5636
|
+
"use strict";
|
|
5637
|
+
init_classify();
|
|
5638
|
+
init_events();
|
|
5639
|
+
init_edge_config();
|
|
5640
|
+
init_metadata_capture();
|
|
5641
|
+
init_platform_signatures();
|
|
5642
|
+
init_verify();
|
|
5643
|
+
}
|
|
5644
|
+
});
|
|
5645
|
+
|
|
5570
5646
|
// src/adapters/express.ts
|
|
5571
5647
|
var DEFAULT_ROUTES_REFRESH_MS;
|
|
5572
5648
|
var init_express = __esm({
|
|
@@ -5580,6 +5656,7 @@ var init_express = __esm({
|
|
|
5580
5656
|
init_pdlss_pre_check();
|
|
5581
5657
|
init_well_known();
|
|
5582
5658
|
init_metadata_capture();
|
|
5659
|
+
init_anonymous_beacon();
|
|
5583
5660
|
DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
5584
5661
|
}
|
|
5585
5662
|
});
|
|
@@ -5594,6 +5671,7 @@ var init_nextjs = __esm({
|
|
|
5594
5671
|
init_http();
|
|
5595
5672
|
init_pdlss_pre_check();
|
|
5596
5673
|
init_metadata_capture();
|
|
5674
|
+
init_anonymous_beacon();
|
|
5597
5675
|
init_http_pdlss();
|
|
5598
5676
|
init_approval_gate();
|
|
5599
5677
|
DEFAULT_ROUTES_REFRESH_MS2 = 5 * 60 * 1e3;
|
|
@@ -5907,6 +5985,7 @@ var init_mcp2 = __esm({
|
|
|
5907
5985
|
"src/adapters/mcp.ts"() {
|
|
5908
5986
|
"use strict";
|
|
5909
5987
|
init_verify();
|
|
5988
|
+
init_metadata_capture();
|
|
5910
5989
|
init_approval_gate();
|
|
5911
5990
|
init_stepup_poll();
|
|
5912
5991
|
init_well_known();
|
|
@@ -5983,31 +6062,6 @@ var init_agent = __esm({
|
|
|
5983
6062
|
}
|
|
5984
6063
|
});
|
|
5985
6064
|
|
|
5986
|
-
// src/edge-config.ts
|
|
5987
|
-
var DEFAULT_EDGE_CONFIG, DEFAULT_TTL_MS, DEFAULT_MAX_STALE_MS;
|
|
5988
|
-
var init_edge_config = __esm({
|
|
5989
|
-
"src/edge-config.ts"() {
|
|
5990
|
-
"use strict";
|
|
5991
|
-
DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
5992
|
-
version: 1,
|
|
5993
|
-
mode: "observe",
|
|
5994
|
-
depth: "classify",
|
|
5995
|
-
pathRules: [],
|
|
5996
|
-
sampling: Object.freeze({ anonymousBeaconRate: 0.1 }),
|
|
5997
|
-
failurePosture: "open"
|
|
5998
|
-
});
|
|
5999
|
-
DEFAULT_TTL_MS = 60 * 1e3;
|
|
6000
|
-
DEFAULT_MAX_STALE_MS = 24 * 60 * 60 * 1e3;
|
|
6001
|
-
}
|
|
6002
|
-
});
|
|
6003
|
-
|
|
6004
|
-
// src/platform-signatures.ts
|
|
6005
|
-
var init_platform_signatures = __esm({
|
|
6006
|
-
"src/platform-signatures.ts"() {
|
|
6007
|
-
"use strict";
|
|
6008
|
-
}
|
|
6009
|
-
});
|
|
6010
|
-
|
|
6011
6065
|
// src/index.ts
|
|
6012
6066
|
var init_src = __esm({
|
|
6013
6067
|
"src/index.ts"() {
|
|
@@ -6797,6 +6851,60 @@ function uninstallClaudeHooks(settingsPath, marker2 = ASTRASYNC_HOOK_MARKER) {
|
|
|
6797
6851
|
writeSettings(settingsPath, settings);
|
|
6798
6852
|
return true;
|
|
6799
6853
|
}
|
|
6854
|
+
function readDenyRules(settings, settingsPath) {
|
|
6855
|
+
const permissions = settings.permissions;
|
|
6856
|
+
if (permissions !== void 0 && (typeof permissions !== "object" || Array.isArray(permissions) || permissions === null)) {
|
|
6857
|
+
throw new Error(`${settingsPath}: "permissions" is not an object \u2014 refusing to rewrite it.`);
|
|
6858
|
+
}
|
|
6859
|
+
const deny = permissions?.deny;
|
|
6860
|
+
if (deny === void 0) return [];
|
|
6861
|
+
if (!Array.isArray(deny) || deny.some((r) => typeof r !== "string")) {
|
|
6862
|
+
throw new Error(
|
|
6863
|
+
`${settingsPath}: "permissions.deny" is not an array of strings \u2014 refusing to rewrite it.`
|
|
6864
|
+
);
|
|
6865
|
+
}
|
|
6866
|
+
return deny;
|
|
6867
|
+
}
|
|
6868
|
+
function installClaudePermissionRules(settingsPath, rules = GUARD_PERMISSION_DENY_RULES, staleRules = LEGACY_GUARD_PERMISSION_DENY_RULES) {
|
|
6869
|
+
const settings = readSettings(settingsPath);
|
|
6870
|
+
const deny = readDenyRules(settings, settingsPath);
|
|
6871
|
+
const stale = new Set(staleRules);
|
|
6872
|
+
const removedStaleRules = deny.filter((r) => stale.has(r));
|
|
6873
|
+
const kept = deny.filter((r) => !stale.has(r));
|
|
6874
|
+
const present = new Set(kept);
|
|
6875
|
+
const addedRules = rules.filter((r) => !present.has(r));
|
|
6876
|
+
const changed = addedRules.length > 0 || removedStaleRules.length > 0;
|
|
6877
|
+
if (changed) {
|
|
6878
|
+
settings.permissions = settings.permissions ?? {};
|
|
6879
|
+
settings.permissions.deny = [...kept, ...addedRules];
|
|
6880
|
+
writeSettings(settingsPath, settings);
|
|
6881
|
+
}
|
|
6882
|
+
return { addedRules, removedStaleRules, changed };
|
|
6883
|
+
}
|
|
6884
|
+
function uninstallClaudePermissionRules(settingsPath, rules = GUARD_PERMISSION_DENY_RULES, staleRules = LEGACY_GUARD_PERMISSION_DENY_RULES) {
|
|
6885
|
+
if (!(0, import_fs5.existsSync)(settingsPath)) return [];
|
|
6886
|
+
let settings;
|
|
6887
|
+
let deny;
|
|
6888
|
+
try {
|
|
6889
|
+
settings = readSettings(settingsPath);
|
|
6890
|
+
deny = readDenyRules(settings, settingsPath);
|
|
6891
|
+
} catch {
|
|
6892
|
+
return [];
|
|
6893
|
+
}
|
|
6894
|
+
if (deny.length === 0) return [];
|
|
6895
|
+
const ours = /* @__PURE__ */ new Set([...rules, ...staleRules]);
|
|
6896
|
+
const removed = deny.filter((r) => ours.has(r));
|
|
6897
|
+
if (removed.length === 0) return [];
|
|
6898
|
+
const remaining = deny.filter((r) => !ours.has(r));
|
|
6899
|
+
if (remaining.length > 0) {
|
|
6900
|
+
settings.permissions.deny = remaining;
|
|
6901
|
+
} else {
|
|
6902
|
+
delete settings.permissions.deny;
|
|
6903
|
+
if (Object.keys(settings.permissions).length === 0) delete settings.permissions;
|
|
6904
|
+
}
|
|
6905
|
+
writeSettings(settingsPath, settings);
|
|
6906
|
+
return removed;
|
|
6907
|
+
}
|
|
6800
6908
|
function ensureGuardSelfProtection(policyPath) {
|
|
6801
6909
|
const parsed = parseFile(policyPath);
|
|
6802
6910
|
if (!parsed.validation.valid || !parsed.policy) return false;
|
|
@@ -6841,7 +6949,7 @@ function buildDefaultClaudeCodePolicy(name = "claude-code-local-guard") {
|
|
|
6841
6949
|
riskThresholds: permissive.thresholds
|
|
6842
6950
|
};
|
|
6843
6951
|
}
|
|
6844
|
-
var import_fs5, import_path4, ASTRASYNC_HOOK_MARKER, HOOK_MATCHER, HOOK_TIMEOUT_SECONDS, GUARD_SELF_PROTECTION_PATTERNS;
|
|
6952
|
+
var import_fs5, import_path4, ASTRASYNC_HOOK_MARKER, HOOK_MATCHER, HOOK_TIMEOUT_SECONDS, PERMISSION_DENY_PATHS, GUARD_PERMISSION_DENY_RULES, LEGACY_GUARD_PERMISSION_DENY_RULES, GUARD_SELF_PROTECTION_PATTERNS;
|
|
6845
6953
|
var init_settings_installer = __esm({
|
|
6846
6954
|
"src/claude-code/settings-installer.ts"() {
|
|
6847
6955
|
"use strict";
|
|
@@ -6852,6 +6960,18 @@ var init_settings_installer = __esm({
|
|
|
6852
6960
|
ASTRASYNC_HOOK_MARKER = "astrasync-claude-hook";
|
|
6853
6961
|
HOOK_MATCHER = "Bash|PowerShell|Write|Edit|MultiEdit|NotebookEdit|Read|Glob|Grep|WebFetch|WebSearch|Task|Agent|mcp__.*";
|
|
6854
6962
|
HOOK_TIMEOUT_SECONDS = 10;
|
|
6963
|
+
PERMISSION_DENY_PATHS = [
|
|
6964
|
+
"**/.claude/settings.json",
|
|
6965
|
+
"**/.claude/settings.local.json",
|
|
6966
|
+
"~/.claude/settings.json",
|
|
6967
|
+
"~/.claude/settings.local.json",
|
|
6968
|
+
"**/.astrasync/**",
|
|
6969
|
+
"~/.astrasync/**"
|
|
6970
|
+
];
|
|
6971
|
+
GUARD_PERMISSION_DENY_RULES = PERMISSION_DENY_PATHS.map(
|
|
6972
|
+
(p) => `Edit(${p})`
|
|
6973
|
+
);
|
|
6974
|
+
LEGACY_GUARD_PERMISSION_DENY_RULES = [];
|
|
6855
6975
|
GUARD_SELF_PROTECTION_PATTERNS = [
|
|
6856
6976
|
"**/.claude/settings.json",
|
|
6857
6977
|
"**/.claude/settings.local.json",
|
|
@@ -7210,6 +7330,17 @@ async function cmdInstallClaudeCode() {
|
|
|
7210
7330
|
} else {
|
|
7211
7331
|
console.log(` Hook: already present in ${settingsPath}`);
|
|
7212
7332
|
}
|
|
7333
|
+
const permResult = installClaudePermissionRules(settingsPath);
|
|
7334
|
+
if (permResult.addedRules.length > 0) {
|
|
7335
|
+
console.log(
|
|
7336
|
+
` Deny: ${permResult.addedRules.length} permissions.deny self-protection rules added in ${settingsPath}`
|
|
7337
|
+
);
|
|
7338
|
+
} else {
|
|
7339
|
+
console.log(" Deny: permissions.deny self-protection rules already present");
|
|
7340
|
+
}
|
|
7341
|
+
if (permResult.removedStaleRules.length > 0) {
|
|
7342
|
+
console.log(` removed ${permResult.removedStaleRules.length} stale guard rules`);
|
|
7343
|
+
}
|
|
7213
7344
|
console.log("\n Next steps:");
|
|
7214
7345
|
console.log(" 1. Start a NEW Claude Code session (settings load at startup).");
|
|
7215
7346
|
console.log(` 2. Watch decisions: tail -f ${path.join(astrasyncDir, "traces")}/*.jsonl`);
|
|
@@ -7227,6 +7358,16 @@ async function cmdUninstallClaudeCode() {
|
|
|
7227
7358
|
} else {
|
|
7228
7359
|
console.log(`[AstraSync] No AstraSync hook found in ${settingsPath}`);
|
|
7229
7360
|
}
|
|
7361
|
+
const removedRules = uninstallClaudePermissionRules(settingsPath);
|
|
7362
|
+
if (removedRules.length > 0) {
|
|
7363
|
+
console.log(
|
|
7364
|
+
`[AstraSync] Removed ${removedRules.length} permissions.deny rules from ${settingsPath}.`
|
|
7365
|
+
);
|
|
7366
|
+
console.log(" If you had added any of these yourself, re-add them:");
|
|
7367
|
+
for (const rule of removedRules) {
|
|
7368
|
+
console.log(` ${rule}`);
|
|
7369
|
+
}
|
|
7370
|
+
}
|
|
7230
7371
|
console.log(
|
|
7231
7372
|
`[AstraSync] Policy and traces left in place at ${astrasyncDir} \u2014 delete manually if unwanted.`
|
|
7232
7373
|
);
|
|
@@ -3938,7 +3938,7 @@ function getTrustLevel(score) {
|
|
|
3938
3938
|
}
|
|
3939
3939
|
|
|
3940
3940
|
// src/version.ts
|
|
3941
|
-
var SDK_VERSION = "4.
|
|
3941
|
+
var SDK_VERSION = "4.1.0";
|
|
3942
3942
|
|
|
3943
3943
|
// src/well-known.ts
|
|
3944
3944
|
var CACHE_TTL_MS = 60 * 60 * 1e3;
|
|
@@ -4439,6 +4439,18 @@ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
|
|
|
4439
4439
|
// src/metadata-capture.ts
|
|
4440
4440
|
var MAX_TOTAL_BYTES = 16 * 1024;
|
|
4441
4441
|
|
|
4442
|
+
// src/edge-config.ts
|
|
4443
|
+
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
4444
|
+
version: 1,
|
|
4445
|
+
mode: "observe",
|
|
4446
|
+
depth: "classify",
|
|
4447
|
+
pathRules: [],
|
|
4448
|
+
sampling: Object.freeze({ anonymousBeaconRate: 0.1 }),
|
|
4449
|
+
failurePosture: "open"
|
|
4450
|
+
});
|
|
4451
|
+
var DEFAULT_TTL_MS = 60 * 1e3;
|
|
4452
|
+
var DEFAULT_MAX_STALE_MS = 24 * 60 * 60 * 1e3;
|
|
4453
|
+
|
|
4442
4454
|
// src/adapters/express.ts
|
|
4443
4455
|
var DEFAULT_ROUTES_REFRESH_MS = 5 * 60 * 1e3;
|
|
4444
4456
|
|
|
@@ -4507,18 +4519,6 @@ var import_node_crypto4 = require("crypto");
|
|
|
4507
4519
|
// src/transport/registry/visa.ts
|
|
4508
4520
|
var import_jose = require("jose");
|
|
4509
4521
|
|
|
4510
|
-
// src/edge-config.ts
|
|
4511
|
-
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
4512
|
-
version: 1,
|
|
4513
|
-
mode: "observe",
|
|
4514
|
-
depth: "classify",
|
|
4515
|
-
pathRules: [],
|
|
4516
|
-
sampling: Object.freeze({ anonymousBeaconRate: 0.1 }),
|
|
4517
|
-
failurePosture: "open"
|
|
4518
|
-
});
|
|
4519
|
-
var DEFAULT_TTL_MS = 60 * 1e3;
|
|
4520
|
-
var DEFAULT_MAX_STALE_MS = 24 * 60 * 60 * 1e3;
|
|
4521
|
-
|
|
4522
4522
|
// src/gateway/modes/online.ts
|
|
4523
4523
|
function toGatewayConfig(config) {
|
|
4524
4524
|
return {
|