@astrasyncai/verification-gateway 4.1.0 → 4.2.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/agent/index.js +2 -2
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/index.mjs +2 -2
- package/dist/agent/index.mjs.map +1 -1
- package/dist/bin/astrasync-claude-hook.js +2 -2
- package/dist/bin/astrasync-codex-hook.js +2 -2
- package/dist/bin/astrasync-guard.js +89 -2
- package/dist/bin/astrasync.js +92 -5
- package/dist/browser/background.js +2 -2
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +2 -2
- package/dist/browser/background.mjs.map +1 -1
- package/dist/codex/index.js +13 -2
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +13 -2
- package/dist/codex/index.mjs.map +1 -1
- package/dist/cursor/extension.js +2 -2
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +2 -2
- package/dist/cursor/extension.mjs.map +1 -1
- package/dist/gateway/gateway.js +2 -2
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +2 -2
- package/dist/gateway/gateway.mjs.map +1 -1
- package/dist/{index-BPEBlOsE.d.mts → index-BTeQ9fgV.d.mts} +2 -2
- package/dist/{index-B0YHu_SP.d.ts → index-BqHKlLOU.d.ts} +2 -2
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/transport/index.d.mts +1 -1
- package/dist/transport/index.d.ts +1 -1
- package/dist/transport/index.js +5 -5
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/index.mjs +2 -2
- package/dist/transport/index.mjs.map +1 -1
- package/package.json +2 -4
|
@@ -5164,14 +5164,14 @@ var InMemoryNonceStore = class {
|
|
|
5164
5164
|
var defaultNonceStore = new InMemoryNonceStore();
|
|
5165
5165
|
|
|
5166
5166
|
// src/transport/vi.ts
|
|
5167
|
-
var
|
|
5167
|
+
var import_core = require("@sd-jwt/core");
|
|
5168
5168
|
var import_node_crypto = require("crypto");
|
|
5169
5169
|
|
|
5170
5170
|
// src/transport/stripe-webhook.ts
|
|
5171
5171
|
var import_node_crypto2 = require("crypto");
|
|
5172
5172
|
|
|
5173
5173
|
// src/transport/ap2.ts
|
|
5174
|
-
var
|
|
5174
|
+
var import_core2 = require("@sd-jwt/core");
|
|
5175
5175
|
var import_node_crypto3 = require("crypto");
|
|
5176
5176
|
|
|
5177
5177
|
// src/transport/mpp.ts
|
|
@@ -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
|
@@ -5786,11 +5786,11 @@ var init_acp = __esm({
|
|
|
5786
5786
|
});
|
|
5787
5787
|
|
|
5788
5788
|
// src/transport/vi.ts
|
|
5789
|
-
var
|
|
5789
|
+
var import_core, import_node_crypto;
|
|
5790
5790
|
var init_vi = __esm({
|
|
5791
5791
|
"src/transport/vi.ts"() {
|
|
5792
5792
|
"use strict";
|
|
5793
|
-
|
|
5793
|
+
import_core = require("@sd-jwt/core");
|
|
5794
5794
|
import_node_crypto = require("crypto");
|
|
5795
5795
|
}
|
|
5796
5796
|
});
|
|
@@ -5819,11 +5819,11 @@ var init_identity_binding = __esm({
|
|
|
5819
5819
|
});
|
|
5820
5820
|
|
|
5821
5821
|
// src/transport/ap2.ts
|
|
5822
|
-
var
|
|
5822
|
+
var import_core2, import_node_crypto3;
|
|
5823
5823
|
var init_ap2 = __esm({
|
|
5824
5824
|
"src/transport/ap2.ts"() {
|
|
5825
5825
|
"use strict";
|
|
5826
|
-
|
|
5826
|
+
import_core2 = require("@sd-jwt/core");
|
|
5827
5827
|
import_node_crypto3 = require("crypto");
|
|
5828
5828
|
}
|
|
5829
5829
|
});
|
|
@@ -6851,6 +6851,60 @@ function uninstallClaudeHooks(settingsPath, marker2 = ASTRASYNC_HOOK_MARKER) {
|
|
|
6851
6851
|
writeSettings(settingsPath, settings);
|
|
6852
6852
|
return true;
|
|
6853
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
|
+
}
|
|
6854
6908
|
function ensureGuardSelfProtection(policyPath) {
|
|
6855
6909
|
const parsed = parseFile(policyPath);
|
|
6856
6910
|
if (!parsed.validation.valid || !parsed.policy) return false;
|
|
@@ -6895,7 +6949,7 @@ function buildDefaultClaudeCodePolicy(name = "claude-code-local-guard") {
|
|
|
6895
6949
|
riskThresholds: permissive.thresholds
|
|
6896
6950
|
};
|
|
6897
6951
|
}
|
|
6898
|
-
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;
|
|
6899
6953
|
var init_settings_installer = __esm({
|
|
6900
6954
|
"src/claude-code/settings-installer.ts"() {
|
|
6901
6955
|
"use strict";
|
|
@@ -6906,6 +6960,18 @@ var init_settings_installer = __esm({
|
|
|
6906
6960
|
ASTRASYNC_HOOK_MARKER = "astrasync-claude-hook";
|
|
6907
6961
|
HOOK_MATCHER = "Bash|PowerShell|Write|Edit|MultiEdit|NotebookEdit|Read|Glob|Grep|WebFetch|WebSearch|Task|Agent|mcp__.*";
|
|
6908
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 = [];
|
|
6909
6975
|
GUARD_SELF_PROTECTION_PATTERNS = [
|
|
6910
6976
|
"**/.claude/settings.json",
|
|
6911
6977
|
"**/.claude/settings.local.json",
|
|
@@ -7264,6 +7330,17 @@ async function cmdInstallClaudeCode() {
|
|
|
7264
7330
|
} else {
|
|
7265
7331
|
console.log(` Hook: already present in ${settingsPath}`);
|
|
7266
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
|
+
}
|
|
7267
7344
|
console.log("\n Next steps:");
|
|
7268
7345
|
console.log(" 1. Start a NEW Claude Code session (settings load at startup).");
|
|
7269
7346
|
console.log(` 2. Watch decisions: tail -f ${path.join(astrasyncDir, "traces")}/*.jsonl`);
|
|
@@ -7281,6 +7358,16 @@ async function cmdUninstallClaudeCode() {
|
|
|
7281
7358
|
} else {
|
|
7282
7359
|
console.log(`[AstraSync] No AstraSync hook found in ${settingsPath}`);
|
|
7283
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
|
+
}
|
|
7284
7371
|
console.log(
|
|
7285
7372
|
`[AstraSync] Policy and traces left in place at ${astrasyncDir} \u2014 delete manually if unwanted.`
|
|
7286
7373
|
);
|
|
@@ -4493,14 +4493,14 @@ var InMemoryNonceStore = class {
|
|
|
4493
4493
|
var defaultNonceStore = new InMemoryNonceStore();
|
|
4494
4494
|
|
|
4495
4495
|
// src/transport/vi.ts
|
|
4496
|
-
var
|
|
4496
|
+
var import_core = require("@sd-jwt/core");
|
|
4497
4497
|
var import_node_crypto = require("crypto");
|
|
4498
4498
|
|
|
4499
4499
|
// src/transport/stripe-webhook.ts
|
|
4500
4500
|
var import_node_crypto2 = require("crypto");
|
|
4501
4501
|
|
|
4502
4502
|
// src/transport/ap2.ts
|
|
4503
|
-
var
|
|
4503
|
+
var import_core2 = require("@sd-jwt/core");
|
|
4504
4504
|
var import_node_crypto3 = require("crypto");
|
|
4505
4505
|
|
|
4506
4506
|
// src/transport/mpp.ts
|