@cybedefend/vibedefend 1.5.0 → 1.6.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 +67 -2
- package/dist/api/gateway-request.js +49 -0
- package/dist/api/gateway-request.js.map +1 -0
- package/dist/api/projects.js +67 -0
- package/dist/api/projects.js.map +1 -1
- package/dist/api/repository-link.js +157 -0
- package/dist/api/repository-link.js.map +1 -0
- package/dist/auth/auth-store.js +107 -25
- package/dist/auth/auth-store.js.map +1 -1
- package/dist/auth/auth.js +21 -0
- package/dist/auth/auth.js.map +1 -1
- package/dist/clients/cursor.js +5 -1
- package/dist/clients/cursor.js.map +1 -1
- package/dist/clients/vscode.js +38 -29
- package/dist/clients/vscode.js.map +1 -1
- package/dist/commands/mcp/allow.js +219 -0
- package/dist/commands/mcp/allow.js.map +1 -0
- package/dist/commands/mcp/connect.js +337 -0
- package/dist/commands/mcp/connect.js.map +1 -0
- package/dist/commands/mcp/index.js +170 -0
- package/dist/commands/mcp/index.js.map +1 -0
- package/dist/commands/mcp/proxy.js +264 -0
- package/dist/commands/mcp/proxy.js.map +1 -0
- package/dist/commands/mcp/scan.js +349 -0
- package/dist/commands/mcp/scan.js.map +1 -0
- package/dist/commands/mcp/sync.js +215 -0
- package/dist/commands/mcp/sync.js.map +1 -0
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/diagnostics.js +78 -12
- package/dist/diagnostics.js.map +1 -1
- package/dist/doctor.js +19 -0
- package/dist/doctor.js.map +1 -1
- package/dist/guards-evaluator/analysis-types.js +27 -0
- package/dist/guards-evaluator/analysis-types.js.map +1 -0
- package/dist/guards-evaluator/command-analysis.js +572 -0
- package/dist/guards-evaluator/command-analysis.js.map +1 -0
- package/dist/guards-evaluator/command-view.js +586 -0
- package/dist/guards-evaluator/command-view.js.map +1 -0
- package/dist/guards-evaluator/env.js +11 -0
- package/dist/guards-evaluator/env.js.map +1 -0
- package/dist/guards-evaluator/evaluate.js +91 -41
- package/dist/guards-evaluator/evaluate.js.map +1 -1
- package/dist/guards-evaluator/index.js +2 -1
- package/dist/guards-evaluator/index.js.map +1 -1
- package/dist/guards-evaluator/inline-code.js +259 -0
- package/dist/guards-evaluator/inline-code.js.map +1 -0
- package/dist/guards-evaluator/normalize.js +716 -0
- package/dist/guards-evaluator/normalize.js.map +1 -0
- package/dist/guards-evaluator/preprocess.js +13 -5
- package/dist/guards-evaluator/preprocess.js.map +1 -1
- package/dist/guards-evaluator/redact.js +19 -0
- package/dist/guards-evaluator/redact.js.map +1 -1
- package/dist/guards-evaluator/regex.js +25 -3
- package/dist/guards-evaluator/regex.js.map +1 -1
- package/dist/guards-evaluator/safe-commands.js +155 -0
- package/dist/guards-evaluator/safe-commands.js.map +1 -0
- package/dist/guards-evaluator/triage.js +315 -0
- package/dist/guards-evaluator/triage.js.map +1 -0
- package/dist/hook-runner.js +24679 -5079
- package/dist/hooks/install.js +38 -0
- package/dist/hooks/install.js.map +1 -1
- package/dist/hooks/runtime/config.js +38 -0
- package/dist/hooks/runtime/config.js.map +1 -1
- package/dist/hooks/runtime/emit.js +94 -61
- package/dist/hooks/runtime/emit.js.map +1 -1
- package/dist/hooks/runtime/fetch-rules.js +22 -7
- package/dist/hooks/runtime/fetch-rules.js.map +1 -1
- package/dist/hooks/runtime/gateway-http-error.js +34 -0
- package/dist/hooks/runtime/gateway-http-error.js.map +1 -0
- package/dist/hooks/runtime/guard-rules-cache.js +139 -17
- package/dist/hooks/runtime/guard-rules-cache.js.map +1 -1
- package/dist/hooks/runtime/guard-violations-buffer.js +321 -48
- package/dist/hooks/runtime/guard-violations-buffer.js.map +1 -1
- package/dist/hooks/runtime/judge-cache.js +6 -0
- package/dist/hooks/runtime/judge-cache.js.map +1 -1
- package/dist/hooks/runtime/judge-triage.js +193 -0
- package/dist/hooks/runtime/judge-triage.js.map +1 -0
- package/dist/hooks/runtime/judge.js +7 -1
- package/dist/hooks/runtime/judge.js.map +1 -1
- package/dist/hooks/runtime/pre-compact.js +12 -6
- package/dist/hooks/runtime/pre-compact.js.map +1 -1
- package/dist/hooks/runtime/resolve.js +90 -8
- package/dist/hooks/runtime/resolve.js.map +1 -1
- package/dist/hooks/runtime/retry-policy.js +57 -0
- package/dist/hooks/runtime/retry-policy.js.map +1 -0
- package/dist/hooks/runtime/review-sessions.js +74 -0
- package/dist/hooks/runtime/review-sessions.js.map +1 -0
- package/dist/hooks/runtime/script-resolve.js +695 -0
- package/dist/hooks/runtime/script-resolve.js.map +1 -0
- package/dist/hooks/runtime/session-activation.js +5 -1
- package/dist/hooks/runtime/session-activation.js.map +1 -1
- package/dist/hooks/runtime/session-review.js +163 -45
- package/dist/hooks/runtime/session-review.js.map +1 -1
- package/dist/hooks/runtime/session-start.js +2 -1
- package/dist/hooks/runtime/session-start.js.map +1 -1
- package/dist/hooks/runtime/session-writes.js +232 -0
- package/dist/hooks/runtime/session-writes.js.map +1 -0
- package/dist/hooks/runtime/sniff.js +26 -7
- package/dist/hooks/runtime/sniff.js.map +1 -1
- package/dist/hooks/runtime/target-resolve.js +336 -0
- package/dist/hooks/runtime/target-resolve.js.map +1 -0
- package/dist/hooks/runtime/unmapped-tools.js +93 -0
- package/dist/hooks/runtime/unmapped-tools.js.map +1 -0
- package/dist/hooks/runtime/usage-block.js +4 -0
- package/dist/hooks/runtime/usage-block.js.map +1 -1
- package/dist/hooks/runtime/user-prompt-submit.js +2 -1
- package/dist/hooks/runtime/user-prompt-submit.js.map +1 -1
- package/dist/hooks/runtime/wire-text.js +41 -0
- package/dist/hooks/runtime/wire-text.js.map +1 -0
- package/dist/hooks/runtime/work-dir.js +84 -0
- package/dist/hooks/runtime/work-dir.js.map +1 -0
- package/dist/index.js +45 -12
- package/dist/index.js.map +1 -1
- package/dist/install.js +174 -11
- package/dist/install.js.map +1 -1
- package/dist/link.js +74 -48
- package/dist/link.js.map +1 -1
- package/dist/login.js +77 -11
- package/dist/login.js.map +1 -1
- package/dist/mcp/auth/agent-sign-ins.js +174 -0
- package/dist/mcp/auth/agent-sign-ins.js.map +1 -0
- package/dist/mcp/auth/callback.js +200 -0
- package/dist/mcp/auth/callback.js.map +1 -0
- package/dist/mcp/auth/connect.js +392 -0
- package/dist/mcp/auth/connect.js.map +1 -0
- package/dist/mcp/auth/discovery.js +399 -0
- package/dist/mcp/auth/discovery.js.map +1 -0
- package/dist/mcp/auth/oauth.js +326 -0
- package/dist/mcp/auth/oauth.js.map +1 -0
- package/dist/mcp/auth/probe.js +128 -0
- package/dist/mcp/auth/probe.js.map +1 -0
- package/dist/mcp/auth/secrets.js +446 -0
- package/dist/mcp/auth/secrets.js.map +1 -0
- package/dist/mcp/auth/store.js +260 -0
- package/dist/mcp/auth/store.js.map +1 -0
- package/dist/mcp/auth/tokenSource.js +55 -0
- package/dist/mcp/auth/tokenSource.js.map +1 -0
- package/dist/mcp/config/atomicWrite.js +98 -0
- package/dist/mcp/config/atomicWrite.js.map +1 -0
- package/dist/mcp/config/clients.js +171 -0
- package/dist/mcp/config/clients.js.map +1 -0
- package/dist/mcp/config/cybedefend-servers.js +48 -0
- package/dist/mcp/config/cybedefend-servers.js.map +1 -0
- package/dist/mcp/config/discover.js +114 -0
- package/dist/mcp/config/discover.js.map +1 -0
- package/dist/mcp/config/hook.js +123 -0
- package/dist/mcp/config/hook.js.map +1 -0
- package/dist/mcp/config/index.js +11 -0
- package/dist/mcp/config/index.js.map +1 -0
- package/dist/mcp/config/install.js +132 -0
- package/dist/mcp/config/install.js.map +1 -0
- package/dist/mcp/config/installed.js +37 -0
- package/dist/mcp/config/installed.js.map +1 -0
- package/dist/mcp/config/jsonEdit.js +119 -0
- package/dist/mcp/config/jsonEdit.js.map +1 -0
- package/dist/mcp/config/lock.js +102 -0
- package/dist/mcp/config/lock.js.map +1 -0
- package/dist/mcp/config/proxyBinary.js +211 -0
- package/dist/mcp/config/proxyBinary.js.map +1 -0
- package/dist/mcp/config/rewrite.js +388 -0
- package/dist/mcp/config/rewrite.js.map +1 -0
- package/dist/mcp/config/types.js +34 -0
- package/dist/mcp/config/types.js.map +1 -0
- package/dist/mcp/proxy/audit.js +83 -0
- package/dist/mcp/proxy/audit.js.map +1 -0
- package/dist/mcp/proxy/authInterceptor.js +119 -0
- package/dist/mcp/proxy/authInterceptor.js.map +1 -0
- package/dist/mcp/proxy/expand.js +93 -0
- package/dist/mcp/proxy/expand.js.map +1 -0
- package/dist/mcp/proxy/inject.js +397 -0
- package/dist/mcp/proxy/inject.js.map +1 -0
- package/dist/mcp/proxy/intercept.js +37 -0
- package/dist/mcp/proxy/intercept.js.map +1 -0
- package/dist/mcp/proxy/jsonrpc.js +153 -0
- package/dist/mcp/proxy/jsonrpc.js.map +1 -0
- package/dist/mcp/proxy/log.js +109 -0
- package/dist/mcp/proxy/log.js.map +1 -0
- package/dist/mcp/proxy/paths.js +53 -0
- package/dist/mcp/proxy/paths.js.map +1 -0
- package/dist/mcp/proxy/proxy.js +510 -0
- package/dist/mcp/proxy/proxy.js.map +1 -0
- package/dist/mcp/proxy/spec.js +203 -0
- package/dist/mcp/proxy/spec.js.map +1 -0
- package/dist/mcp/proxy/sse.js +77 -0
- package/dist/mcp/proxy/sse.js.map +1 -0
- package/dist/mcp/proxy/upstream.js +2 -0
- package/dist/mcp/proxy/upstream.js.map +1 -0
- package/dist/mcp/proxy/upstreamHttp.js +499 -0
- package/dist/mcp/proxy/upstreamHttp.js.map +1 -0
- package/dist/mcp/proxy/upstreamStdio.js +188 -0
- package/dist/mcp/proxy/upstreamStdio.js.map +1 -0
- package/dist/mcp/proxy/upstreams.js +143 -0
- package/dist/mcp/proxy/upstreams.js.map +1 -0
- package/dist/mcp/proxy/verifyInterceptor.js +559 -0
- package/dist/mcp/proxy/verifyInterceptor.js.map +1 -0
- package/dist/mcp/proxy/windowsCommand.js +99 -0
- package/dist/mcp/proxy/windowsCommand.js.map +1 -0
- package/dist/mcp/scan/args.js +228 -0
- package/dist/mcp/scan/args.js.map +1 -0
- package/dist/mcp/scan/results.js +253 -0
- package/dist/mcp/scan/results.js.map +1 -0
- package/dist/mcp/scan/types.js +40 -0
- package/dist/mcp/scan/types.js.map +1 -0
- package/dist/mcp/verify/api.js +475 -0
- package/dist/mcp/verify/api.js.map +1 -0
- package/dist/mcp/verify/backend.js +143 -0
- package/dist/mcp/verify/backend.js.map +1 -0
- package/dist/mcp/verify/cache.js +182 -0
- package/dist/mcp/verify/cache.js.map +1 -0
- package/dist/mcp/verify/contract-errors.js +198 -0
- package/dist/mcp/verify/contract-errors.js.map +1 -0
- package/dist/mcp/verify/digest.js +91 -0
- package/dist/mcp/verify/digest.js.map +1 -0
- package/dist/mcp/verify/factory.js +56 -0
- package/dist/mcp/verify/factory.js.map +1 -0
- package/dist/mcp/verify/identity.js +173 -0
- package/dist/mcp/verify/identity.js.map +1 -0
- package/dist/mcp/verify/policy-store.js +63 -0
- package/dist/mcp/verify/policy-store.js.map +1 -0
- package/dist/mcp/verify/policy.js +158 -0
- package/dist/mcp/verify/policy.js.map +1 -0
- package/dist/mcp/verify/pool.js +27 -0
- package/dist/mcp/verify/pool.js.map +1 -0
- package/dist/mcp/verify/token-refresh.js +44 -0
- package/dist/mcp/verify/token-refresh.js.map +1 -0
- package/dist/mcp/verify/token.js +67 -0
- package/dist/mcp/verify/token.js.map +1 -0
- package/dist/mcp/verify/verifier.js +1009 -0
- package/dist/mcp/verify/verifier.js.map +1 -0
- package/dist/org-gate.js +1 -1
- package/dist/org-gate.js.map +1 -1
- package/dist/org.js +146 -0
- package/dist/org.js.map +1 -0
- package/dist/project-create.js +129 -0
- package/dist/project-create.js.map +1 -0
- package/dist/prompts.js +21 -0
- package/dist/prompts.js.map +1 -1
- package/dist/re2.wasm +0 -0
- package/dist/status.js +61 -0
- package/dist/status.js.map +1 -1
- package/dist/uninstall.js +49 -4
- package/dist/uninstall.js.map +1 -1
- package/dist/utils.js +62 -6
- package/dist/utils.js.map +1 -1
- package/package.json +10 -3
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { isMcpClientId, MCP_CLIENT_ADAPTERS } from '../../mcp/config/clients.js';
|
|
2
|
+
import { installSyncHook, removeSyncHook } from '../../mcp/config/hook.js';
|
|
3
|
+
import { installProxy, installRefusalMessage, installRefusalSentence, uninstallProxy, } from '../../mcp/config/install.js';
|
|
4
|
+
import { log } from '../../utils.js';
|
|
5
|
+
export const EXIT_OK = 0;
|
|
6
|
+
export const EXIT_PROBLEM = 1;
|
|
7
|
+
export const EXIT_USAGE = 2;
|
|
8
|
+
export async function runMcpSyncCommand(options, runtime, mode = 'sync') {
|
|
9
|
+
const stdout = runtime.stdout ?? process.stdout;
|
|
10
|
+
const stderr = runtime.stderr ?? process.stderr;
|
|
11
|
+
if (options.hook !== undefined) {
|
|
12
|
+
return runHook(options, runtime, stdout, stderr);
|
|
13
|
+
}
|
|
14
|
+
let clients;
|
|
15
|
+
if (options.client) {
|
|
16
|
+
if (!isMcpClientId(options.client)) {
|
|
17
|
+
stderr.write(`vibedefend ${mode}: unknown client "${options.client}". Known: ${MCP_CLIENT_ADAPTERS.map((adapter) => adapter.id).join(', ')}.\n`);
|
|
18
|
+
return EXIT_USAGE;
|
|
19
|
+
}
|
|
20
|
+
clients = [options.client];
|
|
21
|
+
}
|
|
22
|
+
// The original entry is recorded in `upstreams.json`, which is what
|
|
23
|
+
// `uninstall` restores from; the backup is for the user, not for us.
|
|
24
|
+
const shared = {
|
|
25
|
+
env: runtime.env,
|
|
26
|
+
clients,
|
|
27
|
+
dryRun: options.dryRun,
|
|
28
|
+
backup: !options.noBackup,
|
|
29
|
+
now: runtime.now,
|
|
30
|
+
platform: runtime.platform,
|
|
31
|
+
};
|
|
32
|
+
let plan;
|
|
33
|
+
let result;
|
|
34
|
+
if (mode === 'uninstall') {
|
|
35
|
+
({ plan, result } = uninstallProxy(shared));
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
const outcome = installProxy({
|
|
39
|
+
...shared,
|
|
40
|
+
argv1: runtime.argv1 ?? process.argv[1],
|
|
41
|
+
execFileFn: runtime.execFileFn,
|
|
42
|
+
});
|
|
43
|
+
if (outcome.refused) {
|
|
44
|
+
writeRefusal(outcome.refused, options, stdout, stderr);
|
|
45
|
+
return EXIT_PROBLEM;
|
|
46
|
+
}
|
|
47
|
+
plan = outcome.plan;
|
|
48
|
+
result = outcome.result;
|
|
49
|
+
}
|
|
50
|
+
const report = buildReport(plan, result, options.dryRun === true);
|
|
51
|
+
if (options.json) {
|
|
52
|
+
stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
|
53
|
+
}
|
|
54
|
+
else if (options.quiet) {
|
|
55
|
+
writeQuiet(report, stdout);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
writeVerbose(report, mode, stdout);
|
|
59
|
+
}
|
|
60
|
+
return report.problems.length > 0 || report.failed.length > 0 ? EXIT_PROBLEM : EXIT_OK;
|
|
61
|
+
}
|
|
62
|
+
function runHook(options, runtime, stdout, stderr) {
|
|
63
|
+
if (options.hook !== 'claude-code') {
|
|
64
|
+
stderr.write(`vibedefend sync: --hook only knows claude-code for now (got "${String(options.hook)}").\n`);
|
|
65
|
+
return EXIT_USAGE;
|
|
66
|
+
}
|
|
67
|
+
const result = options.removeHook
|
|
68
|
+
? removeSyncHook({ env: runtime.env })
|
|
69
|
+
: installSyncHook({ env: runtime.env });
|
|
70
|
+
if (result.outcome === 'unreadable') {
|
|
71
|
+
stderr.write(`vibedefend sync: cannot read ${result.file}. It may contain comments, which cannot be edited without dropping them; add the hook by hand.\n`);
|
|
72
|
+
return EXIT_PROBLEM;
|
|
73
|
+
}
|
|
74
|
+
if (options.json) {
|
|
75
|
+
stdout.write(`${JSON.stringify(result, null, 2)}\n`);
|
|
76
|
+
}
|
|
77
|
+
else if (!options.quiet) {
|
|
78
|
+
log.ok(options.removeHook
|
|
79
|
+
? `SessionStart hook removed from ${result.file}`
|
|
80
|
+
: result.outcome === 'already-installed'
|
|
81
|
+
? `SessionStart hook already in ${result.file}`
|
|
82
|
+
: `SessionStart hook added to ${result.file}`);
|
|
83
|
+
}
|
|
84
|
+
return EXIT_OK;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Sync did nothing, and says why in the mode's own voice: a JSON block for a
|
|
88
|
+
* program, one sentence on stdout for the hook (it lands in the agent's
|
|
89
|
+
* context, and the user has to hear about it from somewhere), the full
|
|
90
|
+
* explanation on stderr for a human.
|
|
91
|
+
*/
|
|
92
|
+
function writeRefusal(refusal, options, stdout, stderr) {
|
|
93
|
+
if (options.json) {
|
|
94
|
+
stdout.write(`${JSON.stringify({ refused: refusal }, null, 2)}\n`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (options.quiet) {
|
|
98
|
+
stdout.write(`${installRefusalSentence(refusal)}\n`);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
stderr.write(`${installRefusalMessage(refusal)}\n`);
|
|
102
|
+
}
|
|
103
|
+
function buildReport(plan, result, dryRun) {
|
|
104
|
+
const failedChanges = new Set(result.failed.map((failure) => failure.change));
|
|
105
|
+
const applied = plan.changes.filter((change) => !failedChanges.has(change));
|
|
106
|
+
return {
|
|
107
|
+
wrapped: applied
|
|
108
|
+
.filter((change) => change.kind === 'wrap')
|
|
109
|
+
.map((change) => ({
|
|
110
|
+
name: change.upstreamName,
|
|
111
|
+
client: change.entry.location.client,
|
|
112
|
+
from: change.entry.kind,
|
|
113
|
+
})),
|
|
114
|
+
unwrapped: applied
|
|
115
|
+
.filter((change) => change.kind === 'unwrap')
|
|
116
|
+
.map((change) => ({ name: change.upstreamName, client: change.location.client })),
|
|
117
|
+
forgotten: applied
|
|
118
|
+
.filter((change) => change.kind === 'forget')
|
|
119
|
+
.map((change) => change.upstreamName),
|
|
120
|
+
skipped: plan.skipped.map((entry) => ({
|
|
121
|
+
name: entry.entry.name,
|
|
122
|
+
client: entry.entry.location.client,
|
|
123
|
+
reason: entry.reason,
|
|
124
|
+
})),
|
|
125
|
+
problems: plan.problems.map((problem) => ({
|
|
126
|
+
file: problem.location.file,
|
|
127
|
+
problem: problem.problem,
|
|
128
|
+
})),
|
|
129
|
+
failed: result.failed.map((failure) => ({ reason: failure.reason })),
|
|
130
|
+
files: result.written,
|
|
131
|
+
backups: result.backups,
|
|
132
|
+
dryRun,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* The hook's output, which lands in the agent's context.
|
|
137
|
+
*
|
|
138
|
+
* Silence when nothing happened. One sentence when something did — naming the
|
|
139
|
+
* servers, because "1 server was wrapped" tells the agent nothing it can act
|
|
140
|
+
* on.
|
|
141
|
+
*/
|
|
142
|
+
function writeQuiet(report, stdout) {
|
|
143
|
+
const lines = [];
|
|
144
|
+
if (report.wrapped.length > 0) {
|
|
145
|
+
lines.push(`VibeDefend is now proxying ${report.wrapped.length === 1 ? 'a new MCP server' : `${report.wrapped.length} new MCP servers`}: ${report.wrapped.map((entry) => entry.name).join(', ')}.`);
|
|
146
|
+
}
|
|
147
|
+
if (report.problems.length > 0) {
|
|
148
|
+
lines.push(`VibeDefend could not read ${report.problems.length === 1 ? 'an MCP config file' : `${report.problems.length} MCP config files`}: ${report.problems.map((problem) => problem.file).join(', ')}.`);
|
|
149
|
+
}
|
|
150
|
+
// Loud even in quiet mode: this one is not "nothing happened", it is a
|
|
151
|
+
// server deliberately left alone, and the user has to know which.
|
|
152
|
+
const interactive = report.skipped.filter((entry) => entry.reason === 'needs-interactive-input');
|
|
153
|
+
if (interactive.length > 0) {
|
|
154
|
+
lines.push(`VibeDefend left ${interactive.map((entry) => entry.name).join(', ')} untouched: ${interactive.length === 1 ? 'it uses' : 'they use'} a \${input:…} placeholder, which only the client can resolve by asking you.`);
|
|
155
|
+
}
|
|
156
|
+
if (lines.length > 0)
|
|
157
|
+
stdout.write(`${lines.join(' ')}\n`);
|
|
158
|
+
}
|
|
159
|
+
function writeVerbose(report, mode, stdout) {
|
|
160
|
+
void stdout;
|
|
161
|
+
const prefix = report.dryRun ? '[dry-run] ' : '';
|
|
162
|
+
for (const entry of report.wrapped) {
|
|
163
|
+
log.ok(`${prefix}${entry.client}: ${entry.name} is now behind the proxy`);
|
|
164
|
+
}
|
|
165
|
+
for (const entry of report.unwrapped) {
|
|
166
|
+
log.ok(`${prefix}${entry.client}: ${entry.name} restored to its original entry`);
|
|
167
|
+
}
|
|
168
|
+
for (const name of report.forgotten) {
|
|
169
|
+
log.info(`${prefix}forgot ${name}, which no client lists any more`);
|
|
170
|
+
}
|
|
171
|
+
for (const entry of report.skipped) {
|
|
172
|
+
const explanation = explainSkip(entry.reason);
|
|
173
|
+
if (explanation)
|
|
174
|
+
log.warn(`${entry.client}: ${entry.name} ${explanation}`);
|
|
175
|
+
}
|
|
176
|
+
for (const problem of report.problems) {
|
|
177
|
+
log.warn(`${problem.file}: ${explainProblem(problem.problem)}`);
|
|
178
|
+
}
|
|
179
|
+
for (const failure of report.failed) {
|
|
180
|
+
log.err(failure.reason);
|
|
181
|
+
}
|
|
182
|
+
if (report.wrapped.length === 0 && report.unwrapped.length === 0 && report.forgotten.length === 0) {
|
|
183
|
+
log.info(mode === 'uninstall' ? 'Nothing was behind the proxy.' : 'Everything is already in order.');
|
|
184
|
+
}
|
|
185
|
+
if (report.backups.length > 0) {
|
|
186
|
+
log.hint(`Backups: ${report.backups.join(', ')}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Why an entry was left alone, when that is worth a line. `null` for the
|
|
191
|
+
* reasons that are business as usual — an already-wrapped server is not news.
|
|
192
|
+
*/
|
|
193
|
+
function explainSkip(reason) {
|
|
194
|
+
if (reason === 'needs-interactive-input') {
|
|
195
|
+
return ('was left untouched: it references a ${input:…} placeholder, whose value ' +
|
|
196
|
+
'the client obtains by asking you. The proxy has no way to ask, so ' +
|
|
197
|
+
'wrapping it would break a server that works today. Replace the ' +
|
|
198
|
+
'placeholder with an environment variable to put it behind the proxy.');
|
|
199
|
+
}
|
|
200
|
+
if (reason === 'unreadable-transport') {
|
|
201
|
+
return 'was left untouched: its transport could not be read';
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
function explainProblem(problem) {
|
|
206
|
+
if (problem === 'jsonc') {
|
|
207
|
+
return 'contains comments or trailing commas, which cannot be rewritten without dropping them — wrap its servers by hand, or remove the comments';
|
|
208
|
+
}
|
|
209
|
+
if (problem === 'unparseable')
|
|
210
|
+
return 'is not valid JSON; left untouched';
|
|
211
|
+
if (problem === 'not-an-object')
|
|
212
|
+
return 'is valid JSON but not an object; left untouched';
|
|
213
|
+
return 'could not be read; left untouched';
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/mcp/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -48,5 +48,11 @@ export const HOOK_DEFAULTS = {
|
|
|
48
48
|
// the files it changed (cybe_scan_diff) before the user commits. Opt-out at
|
|
49
49
|
// install. Rides on session-review, so it only fires when that hook is on.
|
|
50
50
|
enableDiffScan: true,
|
|
51
|
+
// BACK-174 — `auto` keeps git-origin auto-discovery (VibeDefend lights up on
|
|
52
|
+
// every repo of the machine that is a CybeDefend project). `opt-in` limits
|
|
53
|
+
// the hooks to repos that carry `.cybedefend/config.json` (or
|
|
54
|
+
// CYBEDEFEND_PROJECT_ID). Default stays `auto` so existing installs keep
|
|
55
|
+
// their behaviour; the installer asks.
|
|
56
|
+
activation: 'auto',
|
|
51
57
|
};
|
|
52
58
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AA0CA,MAAM,CAAC,MAAM,OAAO,GAA4B;IAC9C;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,kFAAkF;QACpF,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,2BAA2B;KAC1C;IACD;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,0EAA0E;QAC5E,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,2BAA2B;KAC1C;CACO,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,mBAAmB,EAAE,IAAI;IACzB,eAAe,EAAE,CAAC;IAClB,eAAe,EAAE,KAAK;IACtB,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,sEAAsE;IACtE,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,IAAI;IAChB,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,cAAc,EAAE,IAAI;IACpB,6EAA6E;IAC7E,2EAA2E;IAC3E,8DAA8D;IAC9D,yEAAyE;IACzE,uCAAuC;IACvC,UAAU,EAAE,MAAwB;CAC5B,CAAC"}
|
package/dist/diagnostics.js
CHANGED
|
@@ -10,7 +10,30 @@ import { join } from 'node:path';
|
|
|
10
10
|
import { ALL_ADAPTERS } from './clients/registry.js';
|
|
11
11
|
import { pkg } from './version.js';
|
|
12
12
|
import { pingGateway } from './hooks/runtime/api.js';
|
|
13
|
-
import { resolveProjectId,
|
|
13
|
+
import { resolveActivationMode, resolveProjectId, } from './hooks/runtime/resolve.js';
|
|
14
|
+
import { readUnmappedTools, } from './hooks/runtime/unmapped-tools.js';
|
|
15
|
+
import { getOrgPolicy } from './mcp/verify/api.js';
|
|
16
|
+
import { resolveVerifyToken, TOKEN_ENV_VARS } from './mcp/verify/token.js';
|
|
17
|
+
/**
|
|
18
|
+
* The token `status` / `doctor` report on: `CYBEDEFEND_TOKEN` /
|
|
19
|
+
* `VIBEDEFEND_TOKEN`, then the bundle `vibedefend login` wrote. The SAME two
|
|
20
|
+
* places the proxy and `mcp scan` read (`resolveVerifyToken`), so what these
|
|
21
|
+
* commands print is what those will experience — and nothing else: the
|
|
22
|
+
* agent's own keychain (Claude Code / Codex MCP OAuth) is not ours to probe,
|
|
23
|
+
* the proxy refuses it by design, and a `status` that answered
|
|
24
|
+
* "authenticated" on its strength would contradict the very next `mcp scan`.
|
|
25
|
+
* The hooks alone keep that fallback (BACK-124), through their own resolver.
|
|
26
|
+
*/
|
|
27
|
+
export function lookupStoreToken(mcpName, deps = {}) {
|
|
28
|
+
const env = deps.env ?? process.env;
|
|
29
|
+
for (const name of TOKEN_ENV_VARS) {
|
|
30
|
+
const value = env[name];
|
|
31
|
+
if (value && value.trim() !== '')
|
|
32
|
+
return { token: value.trim(), source: 'environment' };
|
|
33
|
+
}
|
|
34
|
+
const token = resolveVerifyToken(mcpName, { ...deps, env: {} });
|
|
35
|
+
return { token, source: token ? 'vibedefend store' : null };
|
|
36
|
+
}
|
|
14
37
|
/** `~/.cybedefend`, overridable via CYBEDEFEND_HOME for tests. */
|
|
15
38
|
function cybeHome() {
|
|
16
39
|
return join(process.env.CYBEDEFEND_HOME ?? homedir(), '.cybedefend');
|
|
@@ -36,16 +59,28 @@ function readTextSafe(path) {
|
|
|
36
59
|
return null;
|
|
37
60
|
}
|
|
38
61
|
}
|
|
39
|
-
export async function gatherInstallState(opts = {}) {
|
|
62
|
+
export async function gatherInstallState(opts = {}, deps = {}) {
|
|
63
|
+
const adapters = deps.adapters ?? ALL_ADAPTERS;
|
|
64
|
+
const resolveTokenImpl = deps.resolveTokenFn ?? lookupStoreToken;
|
|
65
|
+
const pingImpl = deps.pingFn ?? pingGateway;
|
|
66
|
+
const policyImpl = deps.policyFn ?? getOrgPolicy;
|
|
40
67
|
const dir = cybeHome();
|
|
41
68
|
const runtimeConfig = readJsonSafe(join(dir, 'runtime-config.json'));
|
|
42
69
|
const region = runtimeConfig?.region ?? null;
|
|
70
|
+
const organization = organizationOf(runtimeConfig);
|
|
43
71
|
const runnerSource = typeof runtimeConfig?.runnerSource === 'string'
|
|
44
72
|
? runtimeConfig.runnerSource
|
|
45
73
|
: null;
|
|
46
74
|
const runnerSourceValid = runnerSource === null || existsSync(runnerSource);
|
|
75
|
+
const runnerPresent = existsSync(join(dir, 'hook-runner.js'));
|
|
76
|
+
const re2WasmPresent = runnerSource !== null || !runnerPresent || existsSync(join(dir, 're2.wasm'));
|
|
47
77
|
const versionStamped = readTextSafe(join(dir, 'version'));
|
|
48
|
-
const
|
|
78
|
+
const activation = runtimeConfig ? resolveActivationMode(runtimeConfig) : null;
|
|
79
|
+
// Read from where the HOOK writes (its own dir convention), not from this
|
|
80
|
+
// CLI-side dir — otherwise an override in one env var and not the other
|
|
81
|
+
// would make `status` report an empty list while the file fills up.
|
|
82
|
+
const unmappedTools = readUnmappedTools();
|
|
83
|
+
const clients = adapters.map((a) => {
|
|
49
84
|
const detected = (() => {
|
|
50
85
|
try {
|
|
51
86
|
return a.detect().installed;
|
|
@@ -83,17 +118,20 @@ export async function gatherInstallState(opts = {}) {
|
|
|
83
118
|
catch {
|
|
84
119
|
projectId = null;
|
|
85
120
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
121
|
+
// Looked up whenever there is a region, live check or not: the source is
|
|
122
|
+
// part of the report, and a lookup is a file read.
|
|
123
|
+
let lookup = { token: null, source: null };
|
|
124
|
+
if (region) {
|
|
89
125
|
try {
|
|
90
|
-
|
|
91
|
-
? resolveToken(region.mcpName, { mcpUrl: region.mcpUrl })
|
|
92
|
-
: null;
|
|
126
|
+
lookup = await resolveTokenImpl(region.mcpName);
|
|
93
127
|
}
|
|
94
128
|
catch {
|
|
95
|
-
|
|
129
|
+
lookup = { token: null, source: null };
|
|
96
130
|
}
|
|
131
|
+
}
|
|
132
|
+
const token = lookup.token;
|
|
133
|
+
let live = null;
|
|
134
|
+
if (opts.live) {
|
|
97
135
|
if (!region) {
|
|
98
136
|
live = { status: 'skipped', reason: 'not installed' };
|
|
99
137
|
}
|
|
@@ -105,7 +143,7 @@ export async function gatherInstallState(opts = {}) {
|
|
|
105
143
|
}
|
|
106
144
|
else {
|
|
107
145
|
try {
|
|
108
|
-
live = await
|
|
146
|
+
live = await pingImpl({
|
|
109
147
|
apiBase: region.apiBase,
|
|
110
148
|
projectId,
|
|
111
149
|
token,
|
|
@@ -116,16 +154,44 @@ export async function gatherInstallState(opts = {}) {
|
|
|
116
154
|
}
|
|
117
155
|
}
|
|
118
156
|
}
|
|
157
|
+
// The policy is displayed, never applied from here: the verifier learns
|
|
158
|
+
// it from every response. Read only when there is something to read it
|
|
159
|
+
// with, and said to be unavailable when the read fails.
|
|
160
|
+
let policy = null;
|
|
161
|
+
if (opts.live && region && organization && token) {
|
|
162
|
+
try {
|
|
163
|
+
policy = await policyImpl({ apiBase: region.apiBase, token, mcpName: region.mcpName, organizationId: organization.id });
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
policy = 'unavailable';
|
|
167
|
+
}
|
|
168
|
+
}
|
|
119
169
|
return {
|
|
120
170
|
installed: runtimeConfig !== null,
|
|
121
171
|
region,
|
|
122
|
-
|
|
172
|
+
organization,
|
|
173
|
+
policy,
|
|
174
|
+
runnerPresent,
|
|
123
175
|
runnerSourceValid,
|
|
124
176
|
versionStamped,
|
|
125
177
|
versionCurrent: pkg.version,
|
|
126
178
|
clients,
|
|
127
179
|
projectId,
|
|
180
|
+
tokenSource: token ? lookup.source : null,
|
|
128
181
|
live,
|
|
182
|
+
activation,
|
|
183
|
+
unmappedTools,
|
|
184
|
+
re2WasmPresent,
|
|
129
185
|
};
|
|
130
186
|
}
|
|
187
|
+
/** The selected organization of a runtime config, or `null` for none or a malformed entry. */
|
|
188
|
+
function organizationOf(runtimeConfig) {
|
|
189
|
+
const raw = runtimeConfig?.organization;
|
|
190
|
+
if (!raw || typeof raw !== 'object')
|
|
191
|
+
return null;
|
|
192
|
+
const { id, name } = raw;
|
|
193
|
+
if (typeof id !== 'string' || id === '')
|
|
194
|
+
return null;
|
|
195
|
+
return { id, name: typeof name === 'string' ? name : '' };
|
|
196
|
+
}
|
|
131
197
|
//# sourceMappingURL=diagnostics.js.map
|
package/dist/diagnostics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,WAAW,EAAkB,MAAM,wBAAwB,CAAC;AACrE,OAAO,
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.js
CHANGED
|
@@ -45,6 +45,9 @@ export function resolveHookConfigFrom(hooks) {
|
|
|
45
45
|
...hooks,
|
|
46
46
|
enableDiffScan: hooks.enableDiffScan ?? HOOK_DEFAULTS.enableDiffScan,
|
|
47
47
|
nonBlockingMode: hooks.nonBlockingMode ?? HOOK_DEFAULTS.nonBlockingMode,
|
|
48
|
+
// BACK-174 — same backfill for the activation mode; an explicit `opt-in`
|
|
49
|
+
// survives a repair.
|
|
50
|
+
activation: hooks.activation ?? HOOK_DEFAULTS.activation,
|
|
48
51
|
};
|
|
49
52
|
}
|
|
50
53
|
/** A built-in region's label + URL for its MCP URL, else the URL alone. */
|
|
@@ -89,6 +92,22 @@ export function deriveRepairs(state) {
|
|
|
89
92
|
},
|
|
90
93
|
});
|
|
91
94
|
}
|
|
95
|
+
if (state.runnerPresent && !state.re2WasmPresent) {
|
|
96
|
+
// BACK-174 — a full-copy runner whose `re2.wasm` is gone runs every rule
|
|
97
|
+
// on native RegExp and says so on each hook. Re-rendering the runtime
|
|
98
|
+
// copies the wasm back next to it.
|
|
99
|
+
repairs.push({
|
|
100
|
+
id: 'runner-wasm-missing',
|
|
101
|
+
description: 'RE2 engine binary ~/.cybedefend/re2.wasm is missing — rules run on native RegExp; re-render the runner.',
|
|
102
|
+
fix: () => {
|
|
103
|
+
installHookRuntime({
|
|
104
|
+
region,
|
|
105
|
+
hooks: resolveHookConfig(),
|
|
106
|
+
installedVersion: pkg.version,
|
|
107
|
+
});
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
}
|
|
92
111
|
for (const c of state.clients) {
|
|
93
112
|
if (c.detected && !c.hooksWired) {
|
|
94
113
|
repairs.push({
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AASnC;;;;;;;;GAQG;AACH,SAAS,iBAAiB;IACxB,OAAO,qBAAqB,CAAC,iBAAiB,EAAE,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAyC;IAEzC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IACxC,OAAO;QACL,GAAG,KAAK;QACR,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,aAAa,CAAC,cAAc;QACpE,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,aAAa,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AASnC;;;;;;;;GAQG;AACH,SAAS,iBAAiB;IACxB,OAAO,qBAAqB,CAAC,iBAAiB,EAAE,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAyC;IAEzC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IACxC,OAAO;QACL,GAAG,KAAK;QACR,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,aAAa,CAAC,cAAc;QACpE,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,aAAa,CAAC,eAAe;QACvE,yEAAyE;QACzE,qBAAqB;QACrB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,aAAa,CAAC,UAAU;KACzD,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAChD,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,aAAa,CAAC,KAAmB;IAC/C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,eAAe;YACnB,WAAW,EAAE,yDAAyD;SACvE,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,gBAAgB;YACpB,WAAW,EACT,qEAAqE;YACvE,GAAG,EAAE,GAAG,EAAE;gBACR,kBAAkB,CAAC;oBACjB,MAAM;oBACN,KAAK,EAAE,iBAAiB,EAAE;oBAC1B,gBAAgB,EAAE,GAAG,CAAC,OAAO;iBAC9B,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,qBAAqB;YACzB,WAAW,EACT,0EAA0E;YAC5E,GAAG,EAAE,GAAG,EAAE;gBACR,kBAAkB,CAAC;oBACjB,MAAM;oBACN,KAAK,EAAE,iBAAiB,EAAE;oBAC1B,gBAAgB,EAAE,GAAG,CAAC,OAAO;iBAC9B,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QACjD,yEAAyE;QACzE,sEAAsE;QACtE,mCAAmC;QACnC,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,qBAAqB;YACzB,WAAW,EACT,yGAAyG;YAC3G,GAAG,EAAE,GAAG,EAAE;gBACR,kBAAkB,CAAC;oBACjB,MAAM;oBACN,KAAK,EAAE,iBAAiB,EAAE;oBAC1B,gBAAgB,EAAE,GAAG,CAAC,OAAO;iBAC9B,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE;gBACnB,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,2DAA2D;gBAClF,GAAG,EAAE,GAAG,EAAE;oBACR,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;oBAClC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC;wBAC7B,OAAO,EAAE,EAAE;wBACX,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;wBAC9C,MAAM;wBACN,KAAK;qBACN,CAAC,CAAC;gBACL,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;YACnC,uEAAuE;YACvE,0EAA0E;YAC1E,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE;gBACjB,WAAW,EACT,CAAC,CAAC,MAAM,KAAK,IAAI;oBACf,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,2CAA2C,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,KAAK,iBAAiB;oBACtH,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,mEAAmE;gBACnF,GAAG,EAAE,GAAG,EAAE;oBACR,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACjC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;oBAClC,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;gBACrC,CAAC;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAA2C,EAAE;IAE7C,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAErC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,EAAE,CAAC,+CAA+C,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC;IAC7D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACtD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;YACvB,OAAO,EAAE,SAAS,OAAO,CAAC,MAAM,WAAW;YAC3C,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,IAAI,CAAC,EAAE;YAAE,OAAO;IAClB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACxB,MAAM,CAAC,CAAC,GAAI,EAAE,CAAC;YACf,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,GAAG,CACL,kBAAkB,CAAC,CAAC,EAAE,MACpB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE,CACH,CAAC;YACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared analysis contract for the Action Guards hardening work (Level 0–2).
|
|
3
|
+
*
|
|
4
|
+
* The current evaluator matches regexes against the RAW command string, which
|
|
5
|
+
* is blind to trivial rewrites (`/bin/rm`, `--recursive --force`, `.e""nv`,
|
|
6
|
+
* `bash -c "<here>"`, `$( … )`). This module defines the shape that lets a
|
|
7
|
+
* de-obfuscation pass and a triage pass be built and tested independently of
|
|
8
|
+
* the evaluator:
|
|
9
|
+
*
|
|
10
|
+
* normalizeCommand(raw) -> NormalizeResult (normalize.ts)
|
|
11
|
+
* triageCommand(result) -> TriageVerdict (triage.ts)
|
|
12
|
+
*
|
|
13
|
+
* Nothing here is consumed by `evaluate()` directly; the PreToolUse hook
|
|
14
|
+
* (guard-check.ts) wires these in. Keeping the contract in one small, stable
|
|
15
|
+
* file means `normalize.ts`, `triage.ts` and `judge-triage.ts` never have to
|
|
16
|
+
* import each other's implementation to agree on a shape.
|
|
17
|
+
*
|
|
18
|
+
* Design rules every consumer relies on:
|
|
19
|
+
* - PURE: no I/O, no network, no clock. Disk resolution lives elsewhere
|
|
20
|
+
* (target-resolve.ts / script-resolve.ts).
|
|
21
|
+
* - NEVER THROWS: a parse failure sets `incomplete: true` and returns what
|
|
22
|
+
* was recovered. Blindness must fail toward "look closer", never toward a
|
|
23
|
+
* silent allow.
|
|
24
|
+
* - ALLOCATION-LIGHT: runs on every Bash tool call on the hot path.
|
|
25
|
+
*/
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=analysis-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis-types.js","sourceRoot":"","sources":["../../src/guards-evaluator/analysis-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG"}
|