@cybedefend/vibedefend 1.4.2 → 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/README.md +3 -1
- package/dist/auth/auth-store.js +5 -6
- package/dist/auth/auth-store.js.map +1 -1
- package/dist/clients/claude-code.js +4 -1
- package/dist/clients/claude-code.js.map +1 -1
- package/dist/clients/codex.js +4 -2
- package/dist/clients/codex.js.map +1 -1
- package/dist/diagnostics.js +3 -1
- package/dist/diagnostics.js.map +1 -1
- package/dist/hook-runner.js +1669 -1340
- package/dist/hooks/runtime/emit.js +25 -12
- package/dist/hooks/runtime/emit.js.map +1 -1
- package/dist/hooks/runtime/fetch-rules.js +41 -13
- 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 +17 -7
- package/dist/hooks/runtime/session-start.js.map +1 -1
- package/dist/hooks/runtime/shell-writes.js +311 -0
- package/dist/hooks/runtime/shell-writes.js.map +1 -0
- package/dist/hooks/runtime/sniff.js +84 -5
- package/dist/hooks/runtime/sniff.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 +2 -2
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which clients need the `hookSpecificOutput.additionalContext` envelope for
|
|
3
|
+
* a given event. Everything not listed here keeps its plain-markdown (or
|
|
4
|
+
* Cursor's own) shape, which is the contract that already works for it.
|
|
5
|
+
*
|
|
6
|
+
* SessionStart deliberately does NOT list claude-code: its plain stdout is
|
|
7
|
+
* delivered by contract today and works — leave it alone (BACK-173 §2).
|
|
8
|
+
*/
|
|
9
|
+
const ENVELOPE_CLIENTS = {
|
|
10
|
+
SessionStart: new Set(['codex']),
|
|
11
|
+
PreToolUse: new Set(['claude-code', 'codex']),
|
|
12
|
+
};
|
|
1
13
|
export function emit(body, client) {
|
|
2
14
|
if (!body)
|
|
3
15
|
return;
|
|
@@ -15,29 +27,30 @@ export function emit(body, client) {
|
|
|
15
27
|
process.stdout.write('\n');
|
|
16
28
|
}
|
|
17
29
|
/**
|
|
18
|
-
*
|
|
30
|
+
* Model-context emission for a given hook event.
|
|
19
31
|
*
|
|
20
|
-
* For
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
32
|
+
* For the clients listed in `ENVELOPE_CLIENTS[hookEventName]`: writes ONE
|
|
33
|
+
* JSON object `{ hookSpecificOutput: { hookEventName, additionalContext } }`
|
|
34
|
+
* so the body lands in the model's context. Callers MUST call this once per
|
|
35
|
+
* hook run — two JSON objects concatenated on stdout are not valid JSON and
|
|
36
|
+
* the agent drops both (see fetch-rules, which accumulates the business and
|
|
37
|
+
* security blocks before emitting).
|
|
24
38
|
*
|
|
25
39
|
* For every other client: delegates to `emit`, which preserves Cursor's
|
|
26
|
-
* permission-allow envelope and
|
|
27
|
-
*
|
|
28
|
-
* SessionStart equivalents.
|
|
40
|
+
* permission-allow envelope and the plain-markdown shape that already works
|
|
41
|
+
* for the remaining client/event pairs.
|
|
29
42
|
*/
|
|
30
|
-
export function emitContext(body, client) {
|
|
43
|
+
export function emitContext(body, client, hookEventName) {
|
|
31
44
|
if (!body)
|
|
32
45
|
return;
|
|
33
|
-
if (client
|
|
46
|
+
if (ENVELOPE_CLIENTS[hookEventName].has(client)) {
|
|
34
47
|
const payload = JSON.stringify({
|
|
35
48
|
hookSpecificOutput: {
|
|
36
|
-
hookEventName
|
|
49
|
+
hookEventName,
|
|
37
50
|
additionalContext: body,
|
|
38
51
|
},
|
|
39
52
|
});
|
|
40
|
-
process.stdout.write(payload);
|
|
53
|
+
process.stdout.write(payload + '\n');
|
|
41
54
|
return;
|
|
42
55
|
}
|
|
43
56
|
emit(body, client);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../../src/hooks/runtime/emit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../../src/hooks/runtime/emit.ts"],"names":[],"mappings":"AA0CA;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAAoD;IACxE,YAAY,EAAE,IAAI,GAAG,CAAW,CAAC,OAAO,CAAC,CAAC;IAC1C,UAAU,EAAE,IAAI,GAAG,CAAW,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;CACxD,CAAC;AAEF,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,MAAgB;IACjD,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,UAAU,EAAE,OAAO;YACnB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,qCAAqC;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,MAAgB,EAChB,aAA+B;IAE/B,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,IAAI,gBAAgB,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,kBAAkB,EAAE;gBAClB,aAAa;gBACb,iBAAiB,EAAE,IAAI;aACxB;SACF,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,QAAQ,CACtB,IAAY,EACZ,MAAgB,EAChB,MAAe;IAEf,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC;YACb,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;SAChD,CAAC,CACH,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACrB,CAAC"}
|
|
@@ -1,22 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* PreToolUse hook — fetch business rules before
|
|
2
|
+
* PreToolUse hook — fetch business rules before a file is written.
|
|
3
3
|
*
|
|
4
4
|
* Triggered by every agent on every tool call (Cursor and Claude Code
|
|
5
|
-
* honour matchers
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* honour matchers; VS Code ignores matchers, so we self-filter; Windsurf
|
|
6
|
+
* has its own pre_write_code event; Codex uses apply_patch). We early-exit
|
|
7
|
+
* unless the tool name is in our interested set.
|
|
8
|
+
*
|
|
9
|
+
* `Bash` is in that set (BACK-173 follow-up): a shell command that writes
|
|
10
|
+
* files — `cat > f <<EOF`, `sed -i`, `tee`, `cp`… — fetches the rules for
|
|
11
|
+
* every file it targets, exactly like the edit tools. Without it an agent
|
|
12
|
+
* writing through the shell bypassed rules injection entirely, which is the
|
|
13
|
+
* common path in practice. A read-only shell command has no targets and
|
|
14
|
+
* exits silently (see `sniff` + `shell-writes`).
|
|
9
15
|
*/
|
|
10
16
|
import { sniff } from './sniff.js';
|
|
11
17
|
import { resolveProjectIdWithApi, resolveToken, } from './resolve.js';
|
|
12
18
|
import { fetchBusinessRules, fetchSecurityRules } from './api.js';
|
|
13
|
-
import {
|
|
19
|
+
import { emitContext } from './emit.js';
|
|
14
20
|
import { loadRuntimeConfig, readStdinJson } from './config.js';
|
|
21
|
+
/**
|
|
22
|
+
* Production emitter: the rules body must reach the MODEL, and on Claude
|
|
23
|
+
* Code / Codex a PreToolUse hook's plain stdout never does (BACK-173) — it
|
|
24
|
+
* has to travel in a `hookSpecificOutput.additionalContext` envelope whose
|
|
25
|
+
* `hookEventName` names THIS hook.
|
|
26
|
+
*/
|
|
27
|
+
function emitPreToolUseContext(body, client) {
|
|
28
|
+
emitContext(body, client, 'PreToolUse');
|
|
29
|
+
}
|
|
15
30
|
const INTERESTED_TOOLS = new Set([
|
|
16
31
|
'Edit',
|
|
17
32
|
'Write',
|
|
18
33
|
'MultiEdit',
|
|
19
34
|
'apply_patch',
|
|
35
|
+
'Bash',
|
|
20
36
|
]);
|
|
21
37
|
export async function fetchRulesHook(deps = {}) {
|
|
22
38
|
const readStdin = deps.readStdin ?? readStdinJson;
|
|
@@ -25,7 +41,7 @@ export async function fetchRulesHook(deps = {}) {
|
|
|
25
41
|
const resolveTok = deps.resolveTokenFn ?? resolveToken;
|
|
26
42
|
const fetchRules = deps.fetchRulesFn ?? fetchBusinessRules;
|
|
27
43
|
const fetchSecRules = deps.fetchSecurityRulesFn ?? fetchSecurityRules;
|
|
28
|
-
const emitFn = deps.emitFn ??
|
|
44
|
+
const emitFn = deps.emitFn ?? emitPreToolUseContext;
|
|
29
45
|
const stdin = await readStdin();
|
|
30
46
|
const event = sniff(stdin);
|
|
31
47
|
// Self-filter: ignore tool calls we don't care about. Crucial for
|
|
@@ -44,15 +60,21 @@ export async function fetchRulesHook(deps = {}) {
|
|
|
44
60
|
if (!projectId)
|
|
45
61
|
return;
|
|
46
62
|
const apiBase = process.env.CYBEDEFEND_API_BASE ?? configApiBase ?? config.region.apiBase;
|
|
47
|
-
const token = resolveTok(config.region.mcpName
|
|
63
|
+
const token = resolveTok(config.region.mcpName, {
|
|
64
|
+
mcpUrl: config.region.mcpUrl,
|
|
65
|
+
});
|
|
48
66
|
if (!token)
|
|
49
67
|
return;
|
|
50
68
|
const intent = buildIntent(event);
|
|
69
|
+
// Edit tools write one file; a shell command may write several — fetch
|
|
70
|
+
// for all of them and label the callout with the whole list.
|
|
71
|
+
const files = event.filePaths.length > 0 ? event.filePaths : [event.filePath];
|
|
72
|
+
const fileLabel = files.join(', ');
|
|
51
73
|
const fetchOpts = {
|
|
52
74
|
apiBase,
|
|
53
75
|
projectId,
|
|
54
76
|
token,
|
|
55
|
-
files
|
|
77
|
+
files,
|
|
56
78
|
intent,
|
|
57
79
|
topK: 5,
|
|
58
80
|
};
|
|
@@ -62,17 +84,23 @@ export async function fetchRulesHook(deps = {}) {
|
|
|
62
84
|
fetchRules(fetchOpts),
|
|
63
85
|
fetchSecRules(fetchOpts),
|
|
64
86
|
]);
|
|
87
|
+
// Accumulate, then emit ONCE. On Claude Code / Codex the emitter writes a
|
|
88
|
+
// JSON envelope; two envelopes concatenated on stdout are not JSON and the
|
|
89
|
+
// agent drops both — so both blocks ride in a single body (BACK-173 §1).
|
|
90
|
+
const blocks = [];
|
|
65
91
|
if (businessResult) {
|
|
66
|
-
const body = composeBody(businessResult.markdown, businessResult.total,
|
|
92
|
+
const body = composeBody(businessResult.markdown, businessResult.total, fileLabel);
|
|
67
93
|
if (body)
|
|
68
|
-
|
|
94
|
+
blocks.push(body);
|
|
69
95
|
}
|
|
70
96
|
if (securityResult &&
|
|
71
97
|
securityResult.total > 0 &&
|
|
72
98
|
securityResult.markdown &&
|
|
73
99
|
securityResult.markdown.length > 0) {
|
|
74
|
-
|
|
100
|
+
blocks.push(composeSecurityBody(securityResult.markdown, securityResult.total, fileLabel));
|
|
75
101
|
}
|
|
102
|
+
if (blocks.length > 0)
|
|
103
|
+
emitFn(blocks.join('\n'), event.client);
|
|
76
104
|
}
|
|
77
105
|
/** Build the retrieval `intent` string from the event content. */
|
|
78
106
|
function buildIntent(event) {
|
|
@@ -104,7 +132,7 @@ function visibleCalloutTemplate(kind, total, filePath) {
|
|
|
104
132
|
return [
|
|
105
133
|
'---',
|
|
106
134
|
'',
|
|
107
|
-
`**🛡️ REQUIRED USER-VISIBLE MARKER** — you MUST include this exact block as the FIRST paragraph of your next assistant reply, BEFORE the
|
|
135
|
+
`**🛡️ REQUIRED USER-VISIBLE MARKER** — you MUST include this exact block as the FIRST paragraph of your next assistant reply, BEFORE the tool call that writes the file. Do not paraphrase, do not skip — without it, the user cannot see CybeDefend is influencing the change.`,
|
|
108
136
|
'',
|
|
109
137
|
`> 🛡️ **CybeDefend ${kind} Rules** — ${total} rule${total === 1 ? '' : 's'} for \`${filePath}\``,
|
|
110
138
|
`> - **<rule-title>** [<severity> · <category>] — applies because <one-sentence reason>`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-rules.js","sourceRoot":"","sources":["../../../src/hooks/runtime/fetch-rules.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fetch-rules.js","sourceRoot":"","sources":["../../../src/hooks/runtime/fetch-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SessionStart: notice that the agents' hook entries were rendered by another
|
|
3
|
+
* version than the running runner, and re-wire them in the background.
|
|
4
|
+
*
|
|
5
|
+
* `installedVersion` is stamped by whatever last rendered the hooks (the
|
|
6
|
+
* installer, `update`, or `update --refresh-hooks`). The background
|
|
7
|
+
* auto-update, `update --self` and a manual `npm i -g` only replace the
|
|
8
|
+
* package, so after them the stamp names the previous version while the shim
|
|
9
|
+
* already runs the new runner. When a release changes the wiring itself
|
|
10
|
+
* (1.4.3 put fetch-rules on `Bash`, BACK-173), those installs kept the old
|
|
11
|
+
* wiring for good.
|
|
12
|
+
*
|
|
13
|
+
* On drift we spawn `vibedefend update --refresh-hooks` from the same global
|
|
14
|
+
* package, detached, once per runner version (a refresh that keeps failing
|
|
15
|
+
* must not respawn on every session). The new entries take effect in the
|
|
16
|
+
* agent's next session. Never throws, never blocks the bootstrap.
|
|
17
|
+
*/
|
|
18
|
+
import { spawn } from 'node:child_process';
|
|
19
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
20
|
+
import { homedir } from 'node:os';
|
|
21
|
+
import { dirname, join } from 'node:path';
|
|
22
|
+
import { ensureDirFor } from '../../utils.js';
|
|
23
|
+
/** Returns whether a background refresh was spawned. */
|
|
24
|
+
export function maybeRefreshStaleWiring(deps) {
|
|
25
|
+
try {
|
|
26
|
+
const { config, runnerVersion } = deps;
|
|
27
|
+
// Non-global installs have no package to call back into (and no
|
|
28
|
+
// background auto-update): their wiring is rendered by their own flow.
|
|
29
|
+
if (!config.runnerSource || config.installedVersion === runnerVersion) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
// <pkg>/dist/hook-runner.js → <pkg>/bin/vibedefend.js
|
|
33
|
+
const cliEntry = join(dirname(dirname(config.runnerSource)), 'bin', 'vibedefend.js');
|
|
34
|
+
if (!(deps.exists ?? existsSync)(cliEntry))
|
|
35
|
+
return false;
|
|
36
|
+
const markerPath = deps.markerPath ??
|
|
37
|
+
join(process.env.CYBEDEFEND_HOME ?? homedir(), '.cybedefend', 'hook-refresh.json');
|
|
38
|
+
if (readMarkerVersion(markerPath) === runnerVersion)
|
|
39
|
+
return false;
|
|
40
|
+
(deps.spawnRefresh ?? defaultSpawnRefresh)(cliEntry);
|
|
41
|
+
writeMarker(markerPath, runnerVersion);
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function readMarkerVersion(path) {
|
|
49
|
+
try {
|
|
50
|
+
if (!existsSync(path))
|
|
51
|
+
return null;
|
|
52
|
+
const data = JSON.parse(readFileSync(path, 'utf8'));
|
|
53
|
+
return typeof data.version === 'string' ? data.version : null;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function writeMarker(path, version) {
|
|
60
|
+
try {
|
|
61
|
+
ensureDirFor(path);
|
|
62
|
+
writeFileSync(path, JSON.stringify({ version, spawnedAt: Date.now() }) + '\n');
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
/* best-effort */
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function defaultSpawnRefresh(cliEntry) {
|
|
69
|
+
const child = spawn(process.execPath, [cliEntry, 'update', '--refresh-hooks'], {
|
|
70
|
+
detached: true,
|
|
71
|
+
stdio: 'ignore',
|
|
72
|
+
windowsHide: true,
|
|
73
|
+
});
|
|
74
|
+
child.unref();
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=hook-refresh-trigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-refresh-trigger.js","sourceRoot":"","sources":["../../../src/hooks/runtime/hook-refresh-trigger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAc9C,wDAAwD;AACxD,MAAM,UAAU,uBAAuB,CAAC,IAAqB;IAC3D,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QACvC,gEAAgE;QAChE,uEAAuE;QACvE,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,gBAAgB,KAAK,aAAa,EAAE,CAAC;YACtE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,sDAAsD;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;QACrF,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAEzD,MAAM,UAAU,GACd,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,EAAE,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAC;QACrF,IAAI,iBAAiB,CAAC,UAAU,CAAC,KAAK,aAAa;YAAE,OAAO,KAAK,CAAC;QAElE,CAAC,IAAI,CAAC,YAAY,IAAI,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrD,WAAW,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAA0B,CAAC;QAC7E,OAAO,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,OAAe;IAChD,IAAI,CAAC;QACH,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACjF,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE;QAC7E,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -15,8 +15,10 @@
|
|
|
15
15
|
* (Claude Code on Windows doesn't write to a system keychain yet anyway.)
|
|
16
16
|
*/
|
|
17
17
|
import { execFileSync } from 'node:child_process';
|
|
18
|
+
import { createHash } from 'node:crypto';
|
|
18
19
|
import { existsSync, readFileSync } from 'node:fs';
|
|
19
20
|
import { getValidAccessToken, LoginRequiredError } from '../../auth/auth.js';
|
|
21
|
+
import { loadAuth } from '../../auth/auth-store.js';
|
|
20
22
|
import { getOriginRemote, parseRemoteUrl } from '../../git.js';
|
|
21
23
|
import { resolveProjectByRepository, } from '../../api/projects.js';
|
|
22
24
|
import { getCachedRepoLink, writeCachedRepoLink, } from './repo-link-cache.js';
|
|
@@ -62,47 +64,81 @@ export function resolveProjectId(cwd = process.cwd(), deps = {}) {
|
|
|
62
64
|
return { projectId: null, apiBase: null };
|
|
63
65
|
}
|
|
64
66
|
/**
|
|
65
|
-
* Resolve the bearer token. Returns null if not
|
|
67
|
+
* Resolve the bearer token for the configured region. Returns null if not
|
|
68
|
+
* found. Only ever returns a credential that belongs to that region.
|
|
66
69
|
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
70
|
+
* Order:
|
|
71
|
+
* 1. `$CYBEDEFEND_TOKEN`.
|
|
72
|
+
* 2. VibeDefend's own `vibedefend login` bundle for the region, while it is
|
|
73
|
+
* still valid. Read-only: refreshing belongs to `guard-check`
|
|
74
|
+
* ({@link resolveTokenWithRefresh}). Logto rotates the refresh token on
|
|
75
|
+
* every use, so two hook processes refreshing at once (guard-check and
|
|
76
|
+
* fetch-rules fire on the same tool call) would trip its reuse detection.
|
|
77
|
+
* 3. macOS, Claude Code: the "Claude Code-credentials" Keychain blob, entry
|
|
78
|
+
* whose `serverName` matches our MCP name.
|
|
79
|
+
* 4. macOS, Codex: the "Codex MCP Credentials" Keychain service, under the
|
|
80
|
+
* region's exact account (see {@link codexCredentialAccount}).
|
|
81
|
+
* Never the service's first entry: that is whichever server the user
|
|
82
|
+
* logged into first (Linear, in the field), and its token went to our
|
|
83
|
+
* gateway (BACK-173).
|
|
84
|
+
* 5. Linux: `secret-tool lookup service Claude-Code account <mcpName>`
|
|
85
|
+
* (requires libsecret-tools; ships with most desktop distros).
|
|
71
86
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* "<mcpName>|<hash>" and the password is a JSON blob with an
|
|
75
|
-
* `access_token` field. We try this keychain after the Claude Code one.
|
|
76
|
-
*
|
|
77
|
-
* Linux: `secret-tool lookup service Claude-Code account <mcpName>`
|
|
78
|
-
* (requires libsecret-tools; ships with most desktop distros).
|
|
79
|
-
*
|
|
80
|
-
* Windows: env var only for V1. Future improvement: `cmdkey /list` →
|
|
81
|
-
* parse, or via a small PowerShell snippet.
|
|
87
|
+
* Windows: env var or login bundle only. Future improvement: `cmdkey /list`
|
|
88
|
+
* → parse, or via a small PowerShell snippet.
|
|
82
89
|
*/
|
|
83
|
-
export function resolveToken(mcpName) {
|
|
90
|
+
export function resolveToken(mcpName, opts = {}) {
|
|
84
91
|
const envToken = process.env.CYBEDEFEND_TOKEN;
|
|
85
92
|
if (envToken && envToken.length > 0)
|
|
86
93
|
return envToken;
|
|
87
|
-
|
|
88
|
-
|
|
94
|
+
const stored = (opts.loadStoredAuth ?? loadAuth)(mcpName);
|
|
95
|
+
if (stored && (opts.now ?? Date.now)() < stored.expiresAt) {
|
|
96
|
+
return stored.accessToken;
|
|
89
97
|
}
|
|
90
|
-
|
|
98
|
+
const platform = opts.platform ?? process.platform;
|
|
99
|
+
const readKeychain = opts.readKeychain ?? readMacOSKeychain;
|
|
100
|
+
if (platform === 'darwin') {
|
|
101
|
+
return (resolveTokenMacOS(mcpName, readKeychain) ??
|
|
102
|
+
resolveTokenCodexMacOS(mcpName, opts.mcpUrl, readKeychain));
|
|
103
|
+
}
|
|
104
|
+
if (platform === 'linux')
|
|
91
105
|
return resolveTokenLinux(mcpName);
|
|
92
106
|
return null;
|
|
93
107
|
}
|
|
94
|
-
|
|
95
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Keychain account under which Codex stores an MCP server's OAuth credential:
|
|
110
|
+
* `<name>|<first 16 hex chars of sha256('{"type":"http","url":<url>,"headers":{}}')>`.
|
|
111
|
+
* Matches every account of a real Codex 0.142 keychain.
|
|
112
|
+
*/
|
|
113
|
+
export function codexCredentialAccount(mcpName, mcpUrl) {
|
|
114
|
+
const digest = createHash('sha256')
|
|
115
|
+
.update(JSON.stringify({ type: 'http', url: mcpUrl, headers: {} }))
|
|
116
|
+
.digest('hex');
|
|
117
|
+
return `${mcpName}|${digest.slice(0, 16)}`;
|
|
118
|
+
}
|
|
119
|
+
function readMacOSKeychain(service, account) {
|
|
96
120
|
try {
|
|
97
|
-
blob = execFileSync('security', [
|
|
121
|
+
const blob = execFileSync('security', [
|
|
122
|
+
'find-generic-password',
|
|
123
|
+
'-s',
|
|
124
|
+
service,
|
|
125
|
+
...(account === undefined ? [] : ['-a', account]),
|
|
126
|
+
'-w',
|
|
127
|
+
], {
|
|
98
128
|
encoding: 'utf8',
|
|
99
129
|
stdio: ['ignore', 'pipe', 'ignore'],
|
|
100
130
|
timeout: 2000,
|
|
101
131
|
}).trim();
|
|
132
|
+
return blob.length > 0 ? blob : null;
|
|
102
133
|
}
|
|
103
134
|
catch {
|
|
104
135
|
return null;
|
|
105
136
|
}
|
|
137
|
+
}
|
|
138
|
+
function resolveTokenMacOS(mcpName, readKeychain) {
|
|
139
|
+
const blob = readKeychain('Claude Code-credentials');
|
|
140
|
+
if (!blob)
|
|
141
|
+
return null;
|
|
106
142
|
try {
|
|
107
143
|
const data = JSON.parse(blob);
|
|
108
144
|
const oauth = data.mcpOAuth ?? {};
|
|
@@ -121,50 +157,37 @@ function resolveTokenMacOS(mcpName) {
|
|
|
121
157
|
}
|
|
122
158
|
/**
|
|
123
159
|
* Codex stores MCP OAuth tokens in the macOS Keychain under service
|
|
124
|
-
* "Codex MCP Credentials"
|
|
125
|
-
*
|
|
126
|
-
* `
|
|
160
|
+
* "Codex MCP Credentials", account `<mcpName>|<hash>`
|
|
161
|
+
* ({@link codexCredentialAccount}). Codex 0.142 writes
|
|
162
|
+
* `{ token_response: { access_token } }`; flat `access_token` /
|
|
163
|
+
* `accessToken` / raw-string blobs are still accepted.
|
|
127
164
|
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
* (some Codex versions write the raw token string directly).
|
|
165
|
+
* Only the region's own accounts are read. The service-wide lookup
|
|
166
|
+
* (`-s` without `-a`) returns whichever entry comes first, i.e. possibly
|
|
167
|
+
* another server's token.
|
|
132
168
|
*/
|
|
133
|
-
function resolveTokenCodexMacOS(mcpName) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}).trim();
|
|
145
|
-
}
|
|
146
|
-
catch {
|
|
147
|
-
// Exact account match failed (account has a hash suffix). Try without
|
|
148
|
-
// the -a filter and scan all entries for this service by iterating.
|
|
149
|
-
// `security find-generic-password` without `-a` returns the first entry;
|
|
150
|
-
// to iterate all we'd need `security dump-keychain` (requires trust), so
|
|
151
|
-
// we try the service-only lookup and accept the first entry returned.
|
|
152
|
-
try {
|
|
153
|
-
blob = execFileSync('security', ['find-generic-password', '-s', 'Codex MCP Credentials', '-w'], {
|
|
154
|
-
encoding: 'utf8',
|
|
155
|
-
stdio: ['ignore', 'pipe', 'ignore'],
|
|
156
|
-
timeout: 2000,
|
|
157
|
-
}).trim();
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
return null;
|
|
161
|
-
}
|
|
169
|
+
function resolveTokenCodexMacOS(mcpName, mcpUrl, readKeychain) {
|
|
170
|
+
const accounts = mcpUrl
|
|
171
|
+
? [codexCredentialAccount(mcpName, mcpUrl), mcpName]
|
|
172
|
+
: [mcpName];
|
|
173
|
+
for (const account of accounts) {
|
|
174
|
+
const blob = readKeychain('Codex MCP Credentials', account);
|
|
175
|
+
if (!blob)
|
|
176
|
+
continue;
|
|
177
|
+
const token = parseCodexCredential(blob);
|
|
178
|
+
if (token)
|
|
179
|
+
return token;
|
|
162
180
|
}
|
|
163
|
-
|
|
164
|
-
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
function parseCodexCredential(blob) {
|
|
165
184
|
try {
|
|
166
185
|
const data = JSON.parse(blob);
|
|
167
|
-
return data.access_token ??
|
|
186
|
+
return (data.token_response?.access_token ??
|
|
187
|
+
data.access_token ??
|
|
188
|
+
data.accessToken ??
|
|
189
|
+
data.token ??
|
|
190
|
+
null);
|
|
168
191
|
}
|
|
169
192
|
catch {
|
|
170
193
|
// Raw token string stored directly.
|
|
@@ -205,7 +228,9 @@ function resolveTokenLinux(mcpName) {
|
|
|
205
228
|
* Never throws — all errors are converted to null so hook callers remain
|
|
206
229
|
* fail-open.
|
|
207
230
|
*/
|
|
208
|
-
export async function resolveTokenWithRefresh(mcpName, deps = {}
|
|
231
|
+
export async function resolveTokenWithRefresh(mcpName, deps = {},
|
|
232
|
+
/** The region's MCP URL, handed to the legacy lookup (Codex account). */
|
|
233
|
+
opts = {}) {
|
|
209
234
|
const getValidAccessTokenFn = deps.getValidAccessToken ?? getValidAccessToken;
|
|
210
235
|
const resolveTokenFn = deps.resolveTokenFn ?? resolveToken;
|
|
211
236
|
// 1. Env var takes highest precedence (CI / scripted use).
|
|
@@ -230,13 +255,13 @@ export async function resolveTokenWithRefresh(mcpName, deps = {}) {
|
|
|
230
255
|
// agent's MCP OAuth (the common case) — that is the .env-not-blocked bug.
|
|
231
256
|
// Only when the legacy lookup is ALSO empty do we return null, and the
|
|
232
257
|
// caller then surfaces the loud UNVERIFIED banner.
|
|
233
|
-
return resolveTokenFn(mcpName);
|
|
258
|
+
return resolveTokenFn(mcpName, opts);
|
|
234
259
|
}
|
|
235
260
|
// Transient error (network/DNS) — fall through to the legacy path below
|
|
236
261
|
// so a stale-but-unexpired legacy token can still be used.
|
|
237
262
|
}
|
|
238
263
|
// 3. Fall back to the synchronous legacy keychain lookup (pre-PKCE tokens).
|
|
239
|
-
return resolveTokenFn(mcpName);
|
|
264
|
+
return resolveTokenFn(mcpName, opts);
|
|
240
265
|
}
|
|
241
266
|
const RESOLVE_API_TIMEOUT_MS = 4_000;
|
|
242
267
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/hooks/runtime/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EACL,0BAA0B,GAE3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAe/B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAc,OAAO,CAAC,GAAG,EAAE,EAC3B,OAA6B,EAAE;IAE/B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACvD,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,GAAG,0BAA0B,CAAC;IACpD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAGzB,CAAC;YACF,OAAO;gBACL,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI;gBAChC,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;aACtD,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;YAClE,yDAAyD;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/hooks/runtime/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,12 @@ import { fetchProposalsCount } from './api.js';
|
|
|
14
14
|
import { emitContext } from './emit.js';
|
|
15
15
|
import { loadRuntimeConfig, readStdinJson } from './config.js';
|
|
16
16
|
import { selfUpdateCheck } from './self-update-check.js';
|
|
17
|
+
import { maybeRefreshStaleWiring } from './hook-refresh-trigger.js';
|
|
17
18
|
import { pkg } from '../../version.js';
|
|
19
|
+
/** Production emitter — the envelope's `hookEventName` must name THIS hook. */
|
|
20
|
+
function emitSessionStartContext(body, client) {
|
|
21
|
+
emitContext(body, client, 'SessionStart');
|
|
22
|
+
}
|
|
18
23
|
export async function sessionStartHook(deps = {}) {
|
|
19
24
|
const readStdin = deps.readStdin ?? readStdinJson;
|
|
20
25
|
const loadConfig = deps.loadConfig ?? loadRuntimeConfig;
|
|
@@ -25,12 +30,17 @@ export async function sessionStartHook(deps = {}) {
|
|
|
25
30
|
// SessionStart context goes through `emitContext`, not `emit`, so the
|
|
26
31
|
// body lands inside Codex's `additionalContext` JSON envelope (and as
|
|
27
32
|
// plain markdown for everyone else). See emit.ts for the rationale.
|
|
28
|
-
const emitFn = deps.emitFn ??
|
|
33
|
+
const emitFn = deps.emitFn ?? emitSessionStartContext;
|
|
29
34
|
const stdin = await readStdin();
|
|
30
35
|
const event = sniff(stdin);
|
|
31
36
|
const config = loadConfig();
|
|
32
37
|
if (!config)
|
|
33
38
|
return;
|
|
39
|
+
// The wiring is machine-wide: check it before the per-repo early exits.
|
|
40
|
+
(deps.refreshStaleWiringFn ?? maybeRefreshStaleWiring)({
|
|
41
|
+
config,
|
|
42
|
+
runnerVersion: pkg.version,
|
|
43
|
+
});
|
|
34
44
|
// Async: falls back to git-origin auto-discovery (cache + bounded 4s
|
|
35
45
|
// gateway call) when no env var / config.json projectId exists.
|
|
36
46
|
const { projectId, apiBase: configApiBase } = await resolveProject();
|
|
@@ -44,12 +54,12 @@ export async function sessionStartHook(deps = {}) {
|
|
|
44
54
|
}
|
|
45
55
|
// Token + proposal-count are best-effort. The projectId block MUST surface
|
|
46
56
|
// even when neither is available — that is the most important piece of
|
|
47
|
-
// session context for the agent (
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
57
|
+
// session context for the agent (e.g. an expired login bundle that no
|
|
58
|
+
// hook has refreshed yet). The proposal-count line is omitted on failure
|
|
59
|
+
// rather than showing a misleading "0" or blocking the whole bootstrap.
|
|
60
|
+
const token = resolveTok(config.region.mcpName, {
|
|
61
|
+
mcpUrl: config.region.mcpUrl,
|
|
62
|
+
});
|
|
53
63
|
let total = null;
|
|
54
64
|
if (token) {
|
|
55
65
|
const result = await fetchProposals({ apiBase, projectId, token });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../../src/hooks/runtime/session-start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,uBAAuB,EACvB,YAAY,GAEb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../../src/hooks/runtime/session-start.ts"],"names":[],"mappings":"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"}
|