@cybedefend/vibedefend 1.4.3 → 1.4.4
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/auth/auth-store.js +5 -6
- package/dist/auth/auth-store.js.map +1 -1
- package/dist/diagnostics.js +3 -1
- package/dist/diagnostics.js.map +1 -1
- package/dist/hook-runner.js +170 -107
- package/dist/hooks/runtime/fetch-rules.js +3 -1
- package/dist/hooks/runtime/fetch-rules.js.map +1 -1
- package/dist/hooks/runtime/hook-refresh-trigger.js +76 -0
- package/dist/hooks/runtime/hook-refresh-trigger.js.map +1 -0
- package/dist/hooks/runtime/resolve.js +89 -64
- package/dist/hooks/runtime/resolve.js.map +1 -1
- package/dist/hooks/runtime/session-start.js +12 -6
- package/dist/hooks/runtime/session-start.js.map +1 -1
- package/dist/hooks/runtime/user-prompt-submit.js +3 -1
- package/dist/hooks/runtime/user-prompt-submit.js.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/refresh-hooks.js +74 -0
- package/dist/refresh-hooks.js.map +1 -0
- package/dist/update.js +4 -0
- package/dist/update.js.map +1 -1
- package/package.json +1 -1
package/dist/auth/auth-store.js
CHANGED
|
@@ -12,11 +12,10 @@
|
|
|
12
12
|
* password blob, so all PKCE / OIDC state travels with it. On macOS the OS
|
|
13
13
|
* provides the encryption; on Linux the file permissions are the only control.
|
|
14
14
|
*
|
|
15
|
-
* Service name: "Codex MCP Credentials"
|
|
16
|
-
* `
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* the migration period.
|
|
15
|
+
* Service name: "Codex MCP Credentials", account "<mcpName>|vibedefend".
|
|
16
|
+
* `resolveToken` (resolve.ts) reads this bundle through `loadAuth`, by
|
|
17
|
+
* exact account — never through a service-wide lookup, which returns
|
|
18
|
+
* whichever entry of the service comes first (BACK-173).
|
|
20
19
|
*/
|
|
21
20
|
import { execFileSync } from 'node:child_process';
|
|
22
21
|
import { homedir } from 'node:os';
|
|
@@ -24,7 +23,7 @@ import { join } from 'node:path';
|
|
|
24
23
|
import { existsSync, readFileSync, writeFileSync, mkdirSync, chmodSync, } from 'node:fs';
|
|
25
24
|
// ─── Constants ───────────────────────────────────────────────────────────────
|
|
26
25
|
const KEYCHAIN_SERVICE = 'Codex MCP Credentials';
|
|
27
|
-
/** Account shape: "<mcpName>|vibedefend"
|
|
26
|
+
/** Account shape: "<mcpName>|vibedefend". */
|
|
28
27
|
function accountFor(mcpName) {
|
|
29
28
|
return `${mcpName}|vibedefend`;
|
|
30
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../../src/auth/auth-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../../src/auth/auth-store.ts"],"names":[],"mappings":"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"}
|
package/dist/diagnostics.js
CHANGED
|
@@ -85,7 +85,9 @@ export async function gatherInstallState(opts = {}) {
|
|
|
85
85
|
if (opts.live) {
|
|
86
86
|
let token = null;
|
|
87
87
|
try {
|
|
88
|
-
token = region
|
|
88
|
+
token = region
|
|
89
|
+
? resolveToken(region.mcpName, { mcpUrl: region.mcpUrl })
|
|
90
|
+
: null;
|
|
89
91
|
}
|
|
90
92
|
catch {
|
|
91
93
|
token = null;
|
package/dist/diagnostics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
package/dist/hook-runner.js
CHANGED
|
@@ -4896,6 +4896,7 @@ function extractToolInputShape(input, client) {
|
|
|
4896
4896
|
|
|
4897
4897
|
// src/hooks/runtime/resolve.ts
|
|
4898
4898
|
import { execFileSync as execFileSync2 } from "node:child_process";
|
|
4899
|
+
import { createHash } from "node:crypto";
|
|
4899
4900
|
import { existsSync as existsSync6, readFileSync as readFileSync6 } from "node:fs";
|
|
4900
4901
|
|
|
4901
4902
|
// src/auth/auth-store.ts
|
|
@@ -5585,30 +5586,50 @@ function resolveProjectId(cwd = process.cwd(), deps = {}) {
|
|
|
5585
5586
|
}
|
|
5586
5587
|
return { projectId: null, apiBase: null };
|
|
5587
5588
|
}
|
|
5588
|
-
function resolveToken(mcpName) {
|
|
5589
|
+
function resolveToken(mcpName, opts = {}) {
|
|
5589
5590
|
const envToken = process.env.CYBEDEFEND_TOKEN;
|
|
5590
5591
|
if (envToken && envToken.length > 0) return envToken;
|
|
5591
|
-
|
|
5592
|
-
|
|
5592
|
+
const stored = (opts.loadStoredAuth ?? loadAuth)(mcpName);
|
|
5593
|
+
if (stored && (opts.now ?? Date.now)() < stored.expiresAt) {
|
|
5594
|
+
return stored.accessToken;
|
|
5593
5595
|
}
|
|
5594
|
-
|
|
5596
|
+
const platform2 = opts.platform ?? process.platform;
|
|
5597
|
+
const readKeychain = opts.readKeychain ?? readMacOSKeychain2;
|
|
5598
|
+
if (platform2 === "darwin") {
|
|
5599
|
+
return resolveTokenMacOS(mcpName, readKeychain) ?? resolveTokenCodexMacOS(mcpName, opts.mcpUrl, readKeychain);
|
|
5600
|
+
}
|
|
5601
|
+
if (platform2 === "linux") return resolveTokenLinux(mcpName);
|
|
5595
5602
|
return null;
|
|
5596
5603
|
}
|
|
5597
|
-
function
|
|
5598
|
-
|
|
5604
|
+
function codexCredentialAccount(mcpName, mcpUrl) {
|
|
5605
|
+
const digest = createHash("sha256").update(JSON.stringify({ type: "http", url: mcpUrl, headers: {} })).digest("hex");
|
|
5606
|
+
return `${mcpName}|${digest.slice(0, 16)}`;
|
|
5607
|
+
}
|
|
5608
|
+
function readMacOSKeychain2(service, account) {
|
|
5599
5609
|
try {
|
|
5600
|
-
blob = execFileSync2(
|
|
5610
|
+
const blob = execFileSync2(
|
|
5601
5611
|
"security",
|
|
5602
|
-
[
|
|
5612
|
+
[
|
|
5613
|
+
"find-generic-password",
|
|
5614
|
+
"-s",
|
|
5615
|
+
service,
|
|
5616
|
+
...account === void 0 ? [] : ["-a", account],
|
|
5617
|
+
"-w"
|
|
5618
|
+
],
|
|
5603
5619
|
{
|
|
5604
5620
|
encoding: "utf8",
|
|
5605
5621
|
stdio: ["ignore", "pipe", "ignore"],
|
|
5606
5622
|
timeout: 2e3
|
|
5607
5623
|
}
|
|
5608
5624
|
).trim();
|
|
5625
|
+
return blob.length > 0 ? blob : null;
|
|
5609
5626
|
} catch {
|
|
5610
5627
|
return null;
|
|
5611
5628
|
}
|
|
5629
|
+
}
|
|
5630
|
+
function resolveTokenMacOS(mcpName, readKeychain) {
|
|
5631
|
+
const blob = readKeychain("Claude Code-credentials");
|
|
5632
|
+
if (!blob) return null;
|
|
5612
5633
|
try {
|
|
5613
5634
|
const data = JSON.parse(blob);
|
|
5614
5635
|
const oauth = data.mcpOAuth ?? {};
|
|
@@ -5622,37 +5643,20 @@ function resolveTokenMacOS(mcpName) {
|
|
|
5622
5643
|
}
|
|
5623
5644
|
return null;
|
|
5624
5645
|
}
|
|
5625
|
-
function resolveTokenCodexMacOS(mcpName) {
|
|
5626
|
-
|
|
5627
|
-
|
|
5628
|
-
blob =
|
|
5629
|
-
|
|
5630
|
-
|
|
5631
|
-
|
|
5632
|
-
encoding: "utf8",
|
|
5633
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
5634
|
-
timeout: 2e3
|
|
5635
|
-
}
|
|
5636
|
-
).trim();
|
|
5637
|
-
} catch {
|
|
5638
|
-
try {
|
|
5639
|
-
blob = execFileSync2(
|
|
5640
|
-
"security",
|
|
5641
|
-
["find-generic-password", "-s", "Codex MCP Credentials", "-w"],
|
|
5642
|
-
{
|
|
5643
|
-
encoding: "utf8",
|
|
5644
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
5645
|
-
timeout: 2e3
|
|
5646
|
-
}
|
|
5647
|
-
).trim();
|
|
5648
|
-
} catch {
|
|
5649
|
-
return null;
|
|
5650
|
-
}
|
|
5646
|
+
function resolveTokenCodexMacOS(mcpName, mcpUrl, readKeychain) {
|
|
5647
|
+
const accounts = mcpUrl ? [codexCredentialAccount(mcpName, mcpUrl), mcpName] : [mcpName];
|
|
5648
|
+
for (const account of accounts) {
|
|
5649
|
+
const blob = readKeychain("Codex MCP Credentials", account);
|
|
5650
|
+
if (!blob) continue;
|
|
5651
|
+
const token = parseCodexCredential(blob);
|
|
5652
|
+
if (token) return token;
|
|
5651
5653
|
}
|
|
5652
|
-
|
|
5654
|
+
return null;
|
|
5655
|
+
}
|
|
5656
|
+
function parseCodexCredential(blob) {
|
|
5653
5657
|
try {
|
|
5654
5658
|
const data = JSON.parse(blob);
|
|
5655
|
-
return data.access_token ?? data.accessToken ?? data.token ?? null;
|
|
5659
|
+
return data.token_response?.access_token ?? data.access_token ?? data.accessToken ?? data.token ?? null;
|
|
5656
5660
|
} catch {
|
|
5657
5661
|
return blob || null;
|
|
5658
5662
|
}
|
|
@@ -5673,7 +5677,7 @@ function resolveTokenLinux(mcpName) {
|
|
|
5673
5677
|
return null;
|
|
5674
5678
|
}
|
|
5675
5679
|
}
|
|
5676
|
-
async function resolveTokenWithRefresh(mcpName, deps = {}) {
|
|
5680
|
+
async function resolveTokenWithRefresh(mcpName, deps = {}, opts = {}) {
|
|
5677
5681
|
const getValidAccessTokenFn = deps.getValidAccessToken ?? getValidAccessToken;
|
|
5678
5682
|
const resolveTokenFn = deps.resolveTokenFn ?? resolveToken;
|
|
5679
5683
|
const envToken = process.env.CYBEDEFEND_TOKEN;
|
|
@@ -5683,10 +5687,10 @@ async function resolveTokenWithRefresh(mcpName, deps = {}) {
|
|
|
5683
5687
|
if (token) return token;
|
|
5684
5688
|
} catch (e) {
|
|
5685
5689
|
if (e instanceof LoginRequiredError) {
|
|
5686
|
-
return resolveTokenFn(mcpName);
|
|
5690
|
+
return resolveTokenFn(mcpName, opts);
|
|
5687
5691
|
}
|
|
5688
5692
|
}
|
|
5689
|
-
return resolveTokenFn(mcpName);
|
|
5693
|
+
return resolveTokenFn(mcpName, opts);
|
|
5690
5694
|
}
|
|
5691
5695
|
var RESOLVE_API_TIMEOUT_MS = 4e3;
|
|
5692
5696
|
async function resolveProjectIdWithApi(cwd = process.cwd(), deps = {}) {
|
|
@@ -5909,7 +5913,9 @@ async function fetchRulesHook(deps = {}) {
|
|
|
5909
5913
|
const { projectId, apiBase: configApiBase } = await resolveProject();
|
|
5910
5914
|
if (!projectId) return;
|
|
5911
5915
|
const apiBase = process.env.CYBEDEFEND_API_BASE ?? configApiBase ?? config.region.apiBase;
|
|
5912
|
-
const token = resolveTok(config.region.mcpName
|
|
5916
|
+
const token = resolveTok(config.region.mcpName, {
|
|
5917
|
+
mcpUrl: config.region.mcpUrl
|
|
5918
|
+
});
|
|
5913
5919
|
if (!token) return;
|
|
5914
5920
|
const intent = buildIntent(event);
|
|
5915
5921
|
const files = event.filePaths.length > 0 ? event.filePaths : [event.filePath];
|
|
@@ -6209,19 +6215,66 @@ function pmCommand(mode, spec) {
|
|
|
6209
6215
|
}
|
|
6210
6216
|
}
|
|
6211
6217
|
|
|
6218
|
+
// src/hooks/runtime/hook-refresh-trigger.ts
|
|
6219
|
+
import { spawn as spawn2 } from "node:child_process";
|
|
6220
|
+
import { existsSync as existsSync9, readFileSync as readFileSync8, writeFileSync as writeFileSync5 } from "node:fs";
|
|
6221
|
+
import { homedir as homedir7 } from "node:os";
|
|
6222
|
+
import { dirname as dirname3, join as join6 } from "node:path";
|
|
6223
|
+
function maybeRefreshStaleWiring(deps) {
|
|
6224
|
+
try {
|
|
6225
|
+
const { config, runnerVersion } = deps;
|
|
6226
|
+
if (!config.runnerSource || config.installedVersion === runnerVersion) {
|
|
6227
|
+
return false;
|
|
6228
|
+
}
|
|
6229
|
+
const cliEntry = join6(dirname3(dirname3(config.runnerSource)), "bin", "vibedefend.js");
|
|
6230
|
+
if (!(deps.exists ?? existsSync9)(cliEntry)) return false;
|
|
6231
|
+
const markerPath = deps.markerPath ?? join6(process.env.CYBEDEFEND_HOME ?? homedir7(), ".cybedefend", "hook-refresh.json");
|
|
6232
|
+
if (readMarkerVersion(markerPath) === runnerVersion) return false;
|
|
6233
|
+
(deps.spawnRefresh ?? defaultSpawnRefresh)(cliEntry);
|
|
6234
|
+
writeMarker(markerPath, runnerVersion);
|
|
6235
|
+
return true;
|
|
6236
|
+
} catch {
|
|
6237
|
+
return false;
|
|
6238
|
+
}
|
|
6239
|
+
}
|
|
6240
|
+
function readMarkerVersion(path) {
|
|
6241
|
+
try {
|
|
6242
|
+
if (!existsSync9(path)) return null;
|
|
6243
|
+
const data = JSON.parse(readFileSync8(path, "utf8"));
|
|
6244
|
+
return typeof data.version === "string" ? data.version : null;
|
|
6245
|
+
} catch {
|
|
6246
|
+
return null;
|
|
6247
|
+
}
|
|
6248
|
+
}
|
|
6249
|
+
function writeMarker(path, version) {
|
|
6250
|
+
try {
|
|
6251
|
+
ensureDirFor(path);
|
|
6252
|
+
writeFileSync5(path, JSON.stringify({ version, spawnedAt: Date.now() }) + "\n");
|
|
6253
|
+
} catch {
|
|
6254
|
+
}
|
|
6255
|
+
}
|
|
6256
|
+
function defaultSpawnRefresh(cliEntry) {
|
|
6257
|
+
const child = spawn2(process.execPath, [cliEntry, "update", "--refresh-hooks"], {
|
|
6258
|
+
detached: true,
|
|
6259
|
+
stdio: "ignore",
|
|
6260
|
+
windowsHide: true
|
|
6261
|
+
});
|
|
6262
|
+
child.unref();
|
|
6263
|
+
}
|
|
6264
|
+
|
|
6212
6265
|
// src/version.ts
|
|
6213
|
-
import { readFileSync as
|
|
6266
|
+
import { readFileSync as readFileSync9 } from "node:fs";
|
|
6214
6267
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
6215
|
-
import { dirname as
|
|
6268
|
+
import { dirname as dirname4, join as join7 } from "node:path";
|
|
6216
6269
|
var PKG_NAME = "@cybedefend/vibedefend";
|
|
6217
6270
|
function defaultPkgPath() {
|
|
6218
|
-
return
|
|
6271
|
+
return join7(dirname4(fileURLToPath2(import.meta.url)), "..", "package.json");
|
|
6219
6272
|
}
|
|
6220
6273
|
function readPackageMeta(opts = {}) {
|
|
6221
6274
|
if (typeof opts.bakedVersion === "string" && opts.bakedVersion.length > 0) {
|
|
6222
6275
|
return { name: PKG_NAME, version: opts.bakedVersion };
|
|
6223
6276
|
}
|
|
6224
|
-
const readFile = opts.readFile ?? ((p) =>
|
|
6277
|
+
const readFile = opts.readFile ?? ((p) => readFileSync9(p, "utf8"));
|
|
6225
6278
|
const pkgPath = opts.pkgPath ?? defaultPkgPath();
|
|
6226
6279
|
try {
|
|
6227
6280
|
return JSON.parse(readFile(pkgPath));
|
|
@@ -6230,7 +6283,7 @@ function readPackageMeta(opts = {}) {
|
|
|
6230
6283
|
}
|
|
6231
6284
|
}
|
|
6232
6285
|
var pkg = readPackageMeta({
|
|
6233
|
-
bakedVersion: true ? "1.4.
|
|
6286
|
+
bakedVersion: true ? "1.4.4" : void 0
|
|
6234
6287
|
});
|
|
6235
6288
|
|
|
6236
6289
|
// src/hooks/runtime/session-start.ts
|
|
@@ -6249,6 +6302,10 @@ async function sessionStartHook(deps = {}) {
|
|
|
6249
6302
|
const event = sniff(stdin);
|
|
6250
6303
|
const config = loadConfig();
|
|
6251
6304
|
if (!config) return;
|
|
6305
|
+
(deps.refreshStaleWiringFn ?? maybeRefreshStaleWiring)({
|
|
6306
|
+
config,
|
|
6307
|
+
runnerVersion: pkg.version
|
|
6308
|
+
});
|
|
6252
6309
|
const { projectId, apiBase: configApiBase } = await resolveProject();
|
|
6253
6310
|
if (!projectId) return;
|
|
6254
6311
|
const apiBase = process.env.CYBEDEFEND_API_BASE ?? configApiBase ?? config.region.apiBase;
|
|
@@ -6261,7 +6318,9 @@ async function sessionStartHook(deps = {}) {
|
|
|
6261
6318
|
);
|
|
6262
6319
|
return;
|
|
6263
6320
|
}
|
|
6264
|
-
const token = resolveTok(config.region.mcpName
|
|
6321
|
+
const token = resolveTok(config.region.mcpName, {
|
|
6322
|
+
mcpUrl: config.region.mcpUrl
|
|
6323
|
+
});
|
|
6265
6324
|
let total = null;
|
|
6266
6325
|
if (token) {
|
|
6267
6326
|
const result = await fetchProposals({ apiBase, projectId, token });
|
|
@@ -6335,7 +6394,7 @@ async function sessionStartHook(deps = {}) {
|
|
|
6335
6394
|
}
|
|
6336
6395
|
|
|
6337
6396
|
// src/hooks/runtime/session-review.ts
|
|
6338
|
-
import { existsSync as
|
|
6397
|
+
import { existsSync as existsSync10, readFileSync as readFileSync10 } from "node:fs";
|
|
6339
6398
|
var COUNTED_TOOLS = /* @__PURE__ */ new Set([
|
|
6340
6399
|
"Edit",
|
|
6341
6400
|
"Write",
|
|
@@ -6413,9 +6472,9 @@ function loadTranscript(stdin, readFile) {
|
|
|
6413
6472
|
return out;
|
|
6414
6473
|
}
|
|
6415
6474
|
function defaultReadTranscript(path) {
|
|
6416
|
-
if (!
|
|
6475
|
+
if (!existsSync10(path)) return null;
|
|
6417
6476
|
try {
|
|
6418
|
-
return
|
|
6477
|
+
return readFileSync10(path, "utf8");
|
|
6419
6478
|
} catch {
|
|
6420
6479
|
return null;
|
|
6421
6480
|
}
|
|
@@ -6673,19 +6732,19 @@ async function preCompactHook(deps = {}) {
|
|
|
6673
6732
|
}
|
|
6674
6733
|
|
|
6675
6734
|
// src/hooks/runtime/user-prompt-submit.ts
|
|
6676
|
-
import { existsSync as
|
|
6677
|
-
import { homedir as
|
|
6678
|
-
import { join as
|
|
6735
|
+
import { existsSync as existsSync11, mkdirSync as mkdirSync4, readFileSync as readFileSync11, writeFileSync as writeFileSync6 } from "node:fs";
|
|
6736
|
+
import { homedir as homedir8 } from "node:os";
|
|
6737
|
+
import { join as join8 } from "node:path";
|
|
6679
6738
|
var SESSIONS_CAP = 100;
|
|
6680
6739
|
function defaultSessionsFile() {
|
|
6681
|
-
const dir = process.env.CYBEDEFEND_BASELINE_DIR ??
|
|
6682
|
-
return
|
|
6740
|
+
const dir = process.env.CYBEDEFEND_BASELINE_DIR ?? join8(homedir8(), ".cybedefend");
|
|
6741
|
+
return join8(dir, "user-prompt-seen-sessions.json");
|
|
6683
6742
|
}
|
|
6684
6743
|
function defaultSessionTracker(file = defaultSessionsFile()) {
|
|
6685
6744
|
function load() {
|
|
6686
|
-
if (!
|
|
6745
|
+
if (!existsSync11(file)) return [];
|
|
6687
6746
|
try {
|
|
6688
|
-
const raw =
|
|
6747
|
+
const raw = readFileSync11(file, "utf8");
|
|
6689
6748
|
const data = JSON.parse(raw);
|
|
6690
6749
|
if (!Array.isArray(data.sessions)) return [];
|
|
6691
6750
|
return data.sessions.filter((s) => typeof s === "string");
|
|
@@ -6702,8 +6761,8 @@ function defaultSessionTracker(file = defaultSessionsFile()) {
|
|
|
6702
6761
|
if (existing.includes(sessionId)) return;
|
|
6703
6762
|
const next = [...existing, sessionId].slice(-SESSIONS_CAP);
|
|
6704
6763
|
try {
|
|
6705
|
-
mkdirSync4(
|
|
6706
|
-
|
|
6764
|
+
mkdirSync4(join8(file, ".."), { recursive: true });
|
|
6765
|
+
writeFileSync6(file, JSON.stringify({ sessions: next }), "utf8");
|
|
6707
6766
|
} catch {
|
|
6708
6767
|
}
|
|
6709
6768
|
}
|
|
@@ -6728,7 +6787,9 @@ async function userPromptSubmitHook(deps = {}) {
|
|
|
6728
6787
|
const { projectId, apiBase: configApiBase } = await resolveProject();
|
|
6729
6788
|
if (!projectId) return;
|
|
6730
6789
|
const apiBase = process.env.CYBEDEFEND_API_BASE ?? configApiBase ?? config.region.apiBase;
|
|
6731
|
-
const token = resolveTok(config.region.mcpName
|
|
6790
|
+
const token = resolveTok(config.region.mcpName, {
|
|
6791
|
+
mcpUrl: config.region.mcpUrl
|
|
6792
|
+
});
|
|
6732
6793
|
let total = null;
|
|
6733
6794
|
if (token) {
|
|
6734
6795
|
const result = await fetchProposals({ apiBase, projectId, token });
|
|
@@ -7386,7 +7447,7 @@ function validateRule(rule) {
|
|
|
7386
7447
|
}
|
|
7387
7448
|
|
|
7388
7449
|
// src/guards-evaluator/redact.ts
|
|
7389
|
-
import { createHash } from "node:crypto";
|
|
7450
|
+
import { createHash as createHash2 } from "node:crypto";
|
|
7390
7451
|
var REDACTED = "[REDACTED]";
|
|
7391
7452
|
var PATTERNS = [
|
|
7392
7453
|
// 1. JWT — three base64url segments separated by dots
|
|
@@ -7488,7 +7549,7 @@ function redactTarget(text, maxLen = 256) {
|
|
|
7488
7549
|
return result;
|
|
7489
7550
|
}
|
|
7490
7551
|
function hashTarget(text) {
|
|
7491
|
-
return
|
|
7552
|
+
return createHash2("sha256").update(text, "utf8").digest("hex");
|
|
7492
7553
|
}
|
|
7493
7554
|
|
|
7494
7555
|
// src/hooks/runtime/near-miss.ts
|
|
@@ -7766,10 +7827,10 @@ function nearMiss(req, rule) {
|
|
|
7766
7827
|
}
|
|
7767
7828
|
|
|
7768
7829
|
// src/hooks/runtime/guard-rules-cache.ts
|
|
7769
|
-
import { readFileSync as
|
|
7770
|
-
import { dirname as
|
|
7771
|
-
import { homedir as
|
|
7772
|
-
import { join as
|
|
7830
|
+
import { readFileSync as readFileSync12, writeFileSync as writeFileSync7, existsSync as existsSync12, mkdirSync as mkdirSync5 } from "node:fs";
|
|
7831
|
+
import { dirname as dirname5 } from "node:path";
|
|
7832
|
+
import { homedir as homedir9 } from "node:os";
|
|
7833
|
+
import { join as join9 } from "node:path";
|
|
7773
7834
|
|
|
7774
7835
|
// node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js
|
|
7775
7836
|
var external_exports = {};
|
|
@@ -11881,8 +11942,8 @@ function parseRuleFields(raw) {
|
|
|
11881
11942
|
}
|
|
11882
11943
|
|
|
11883
11944
|
// src/hooks/runtime/guard-rules-cache.ts
|
|
11884
|
-
var DEFAULT_CACHE_FILE =
|
|
11885
|
-
|
|
11945
|
+
var DEFAULT_CACHE_FILE = join9(
|
|
11946
|
+
homedir9(),
|
|
11886
11947
|
".cybedefend",
|
|
11887
11948
|
"guards-cache.json"
|
|
11888
11949
|
);
|
|
@@ -12006,9 +12067,9 @@ function makeGuardRulesCache(opts) {
|
|
|
12006
12067
|
}
|
|
12007
12068
|
}
|
|
12008
12069
|
function readCache(projectId) {
|
|
12009
|
-
if (!
|
|
12070
|
+
if (!existsSync12(cacheFile)) return null;
|
|
12010
12071
|
try {
|
|
12011
|
-
const raw =
|
|
12072
|
+
const raw = readFileSync12(cacheFile, "utf8");
|
|
12012
12073
|
const data = JSON.parse(raw);
|
|
12013
12074
|
if (data.projectId !== projectId) return null;
|
|
12014
12075
|
return data;
|
|
@@ -12019,15 +12080,15 @@ function makeGuardRulesCache(opts) {
|
|
|
12019
12080
|
function writeCache(entry) {
|
|
12020
12081
|
try {
|
|
12021
12082
|
ensureDirFor2(cacheFile);
|
|
12022
|
-
|
|
12083
|
+
writeFileSync7(cacheFile, JSON.stringify(entry), "utf8");
|
|
12023
12084
|
} catch {
|
|
12024
12085
|
}
|
|
12025
12086
|
}
|
|
12026
12087
|
return { refreshIfStale };
|
|
12027
12088
|
}
|
|
12028
12089
|
function ensureDirFor2(filePath) {
|
|
12029
|
-
const dir =
|
|
12030
|
-
if (!
|
|
12090
|
+
const dir = dirname5(filePath);
|
|
12091
|
+
if (!existsSync12(dir)) {
|
|
12031
12092
|
mkdirSync5(dir, { recursive: true });
|
|
12032
12093
|
}
|
|
12033
12094
|
}
|
|
@@ -12149,11 +12210,11 @@ function detectPromptInjection(text) {
|
|
|
12149
12210
|
}
|
|
12150
12211
|
|
|
12151
12212
|
// src/hooks/runtime/judge-cache.ts
|
|
12152
|
-
import { readFileSync as
|
|
12153
|
-
import { dirname as
|
|
12154
|
-
import { homedir as
|
|
12155
|
-
var DEFAULT_JUDGE_CACHE_FILE =
|
|
12156
|
-
|
|
12213
|
+
import { readFileSync as readFileSync13, writeFileSync as writeFileSync8, existsSync as existsSync13, mkdirSync as mkdirSync6 } from "node:fs";
|
|
12214
|
+
import { dirname as dirname6, join as join10 } from "node:path";
|
|
12215
|
+
import { homedir as homedir10 } from "node:os";
|
|
12216
|
+
var DEFAULT_JUDGE_CACHE_FILE = join10(
|
|
12217
|
+
homedir10(),
|
|
12157
12218
|
".cybedefend",
|
|
12158
12219
|
"guards-judge-cache.json"
|
|
12159
12220
|
);
|
|
@@ -12163,9 +12224,9 @@ function makeJudgeCache(opts = {}) {
|
|
|
12163
12224
|
const ttlMs = opts.ttlMs ?? DEFAULT_JUDGE_TTL_MS;
|
|
12164
12225
|
const now = opts.now ?? (() => Date.now());
|
|
12165
12226
|
function readAll() {
|
|
12166
|
-
if (!
|
|
12227
|
+
if (!existsSync13(cacheFile)) return {};
|
|
12167
12228
|
try {
|
|
12168
|
-
return JSON.parse(
|
|
12229
|
+
return JSON.parse(readFileSync13(cacheFile, "utf8"));
|
|
12169
12230
|
} catch {
|
|
12170
12231
|
return {};
|
|
12171
12232
|
}
|
|
@@ -12185,36 +12246,36 @@ function makeJudgeCache(opts = {}) {
|
|
|
12185
12246
|
}
|
|
12186
12247
|
all[key] = { res, at: t };
|
|
12187
12248
|
ensureDirFor3(cacheFile);
|
|
12188
|
-
|
|
12249
|
+
writeFileSync8(cacheFile, JSON.stringify(all), "utf8");
|
|
12189
12250
|
} catch {
|
|
12190
12251
|
}
|
|
12191
12252
|
}
|
|
12192
12253
|
return { get, set };
|
|
12193
12254
|
}
|
|
12194
12255
|
function ensureDirFor3(filePath) {
|
|
12195
|
-
const dir =
|
|
12196
|
-
if (!
|
|
12256
|
+
const dir = dirname6(filePath);
|
|
12257
|
+
if (!existsSync13(dir)) {
|
|
12197
12258
|
mkdirSync6(dir, { recursive: true });
|
|
12198
12259
|
}
|
|
12199
12260
|
}
|
|
12200
12261
|
|
|
12201
12262
|
// src/hooks/runtime/guard-check.ts
|
|
12202
|
-
import { homedir as
|
|
12203
|
-
import { join as
|
|
12263
|
+
import { homedir as homedir12 } from "node:os";
|
|
12264
|
+
import { join as join12 } from "node:path";
|
|
12204
12265
|
|
|
12205
12266
|
// src/hooks/runtime/guard-violations-buffer.ts
|
|
12206
12267
|
import {
|
|
12207
12268
|
appendFileSync,
|
|
12208
|
-
existsSync as
|
|
12209
|
-
readFileSync as
|
|
12210
|
-
writeFileSync as
|
|
12269
|
+
existsSync as existsSync14,
|
|
12270
|
+
readFileSync as readFileSync14,
|
|
12271
|
+
writeFileSync as writeFileSync9,
|
|
12211
12272
|
mkdirSync as mkdirSync7
|
|
12212
12273
|
} from "node:fs";
|
|
12213
|
-
import { dirname as
|
|
12214
|
-
import { homedir as
|
|
12215
|
-
import { join as
|
|
12216
|
-
var DEFAULT_BUFFER_FILE =
|
|
12217
|
-
|
|
12274
|
+
import { dirname as dirname7 } from "node:path";
|
|
12275
|
+
import { homedir as homedir11 } from "node:os";
|
|
12276
|
+
import { join as join11 } from "node:path";
|
|
12277
|
+
var DEFAULT_BUFFER_FILE = join11(
|
|
12278
|
+
homedir11(),
|
|
12218
12279
|
".cybedefend",
|
|
12219
12280
|
"guards-violations-buffer.jsonl"
|
|
12220
12281
|
);
|
|
@@ -12233,10 +12294,10 @@ function makeViolationsBuffer(opts = {}) {
|
|
|
12233
12294
|
}
|
|
12234
12295
|
}
|
|
12235
12296
|
async function flushViolations2(ctx, postFn) {
|
|
12236
|
-
if (!
|
|
12297
|
+
if (!existsSync14(bufferFile)) return;
|
|
12237
12298
|
let content;
|
|
12238
12299
|
try {
|
|
12239
|
-
content =
|
|
12300
|
+
content = readFileSync14(bufferFile, "utf8").trim();
|
|
12240
12301
|
} catch {
|
|
12241
12302
|
return;
|
|
12242
12303
|
}
|
|
@@ -12255,7 +12316,7 @@ function makeViolationsBuffer(opts = {}) {
|
|
|
12255
12316
|
}
|
|
12256
12317
|
if (records.length === 0) {
|
|
12257
12318
|
try {
|
|
12258
|
-
|
|
12319
|
+
writeFileSync9(bufferFile, "", "utf8");
|
|
12259
12320
|
} catch {
|
|
12260
12321
|
}
|
|
12261
12322
|
return;
|
|
@@ -12285,10 +12346,10 @@ function makeViolationsBuffer(opts = {}) {
|
|
|
12285
12346
|
}
|
|
12286
12347
|
try {
|
|
12287
12348
|
if (failed.length === 0) {
|
|
12288
|
-
|
|
12349
|
+
writeFileSync9(bufferFile, "", "utf8");
|
|
12289
12350
|
} else {
|
|
12290
12351
|
const serialised = failed.map((r) => JSON.stringify(r)).join("\n") + "\n";
|
|
12291
|
-
|
|
12352
|
+
writeFileSync9(bufferFile, serialised, "utf8");
|
|
12292
12353
|
}
|
|
12293
12354
|
} catch {
|
|
12294
12355
|
}
|
|
@@ -12296,8 +12357,8 @@ function makeViolationsBuffer(opts = {}) {
|
|
|
12296
12357
|
return { bufferViolation: bufferViolation2, flushViolations: flushViolations2 };
|
|
12297
12358
|
}
|
|
12298
12359
|
function ensureDirFor4(filePath) {
|
|
12299
|
-
const dir =
|
|
12300
|
-
if (!
|
|
12360
|
+
const dir = dirname7(filePath);
|
|
12361
|
+
if (!existsSync14(dir)) {
|
|
12301
12362
|
mkdirSync7(dir, { recursive: true });
|
|
12302
12363
|
}
|
|
12303
12364
|
}
|
|
@@ -12325,10 +12386,10 @@ function appendDebugLog(entry) {
|
|
|
12325
12386
|
const homeDir = process.env.HOME ?? process.env.USERPROFILE ?? "";
|
|
12326
12387
|
if (!homeDir) return;
|
|
12327
12388
|
const { mkdirSync: mkdirSync8, appendFileSync: appendFileSync2 } = __require("node:fs");
|
|
12328
|
-
const { join:
|
|
12329
|
-
const dir =
|
|
12389
|
+
const { join: join13 } = __require("node:path");
|
|
12390
|
+
const dir = join13(homeDir, ".cybedefend");
|
|
12330
12391
|
mkdirSync8(dir, { recursive: true });
|
|
12331
|
-
appendFileSync2(
|
|
12392
|
+
appendFileSync2(join13(dir, "hook-debug.log"), entry + "\n", "utf8");
|
|
12332
12393
|
} catch {
|
|
12333
12394
|
}
|
|
12334
12395
|
}
|
|
@@ -12814,8 +12875,6 @@ function emitAgentMessage(verdict, message) {
|
|
|
12814
12875
|
// Claude Code legacy
|
|
12815
12876
|
decision: "block",
|
|
12816
12877
|
reason: fullMessage,
|
|
12817
|
-
continue: false,
|
|
12818
|
-
stopReason: fullMessage,
|
|
12819
12878
|
// Claude Code modern
|
|
12820
12879
|
hookSpecificOutput: {
|
|
12821
12880
|
hookEventName: "PreToolUse",
|
|
@@ -12844,9 +12903,9 @@ function emitAgentMessage(verdict, message) {
|
|
|
12844
12903
|
}
|
|
12845
12904
|
function makeProductionJudgeDeps() {
|
|
12846
12905
|
const cache = makeJudgeCache();
|
|
12847
|
-
const warnDir = process.env.CYBEDEFEND_BASELINE_DIR ??
|
|
12906
|
+
const warnDir = process.env.CYBEDEFEND_BASELINE_DIR ?? join12(homedir12(), ".cybedefend");
|
|
12848
12907
|
const warnTracker = defaultSessionTracker(
|
|
12849
|
-
|
|
12908
|
+
join12(warnDir, "guards-judge-warned-sessions.json")
|
|
12850
12909
|
);
|
|
12851
12910
|
return {
|
|
12852
12911
|
callJudge,
|
|
@@ -12871,7 +12930,11 @@ async function runPreToolUseGuard() {
|
|
|
12871
12930
|
const { projectId, apiBase: configApiBase } = await resolveProjectIdWithApi();
|
|
12872
12931
|
if (!projectId) return 0;
|
|
12873
12932
|
const apiBaseResolved = process.env.CYBEDEFEND_API_BASE ?? configApiBase ?? config.region.apiBase;
|
|
12874
|
-
const token = await resolveTokenWithRefresh(
|
|
12933
|
+
const token = await resolveTokenWithRefresh(
|
|
12934
|
+
config.region.mcpName,
|
|
12935
|
+
{},
|
|
12936
|
+
{ mcpUrl: config.region.mcpUrl }
|
|
12937
|
+
);
|
|
12875
12938
|
if (!token) {
|
|
12876
12939
|
emitUnverifiedBanner(
|
|
12877
12940
|
"Not authenticated \u2014 run `vibedefend login` to restore Action Guards."
|
|
@@ -60,7 +60,9 @@ export async function fetchRulesHook(deps = {}) {
|
|
|
60
60
|
if (!projectId)
|
|
61
61
|
return;
|
|
62
62
|
const apiBase = process.env.CYBEDEFEND_API_BASE ?? configApiBase ?? config.region.apiBase;
|
|
63
|
-
const token = resolveTok(config.region.mcpName
|
|
63
|
+
const token = resolveTok(config.region.mcpName, {
|
|
64
|
+
mcpUrl: config.region.mcpUrl,
|
|
65
|
+
});
|
|
64
66
|
if (!token)
|
|
65
67
|
return;
|
|
66
68
|
const intent = buildIntent(event);
|