slaunt 0.1.16 → 0.1.18
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 +17 -106
- package/bin/slaunt-hooks.js +96 -0
- package/package.json +9 -59
- package/release/SlauntKillBar.zip +0 -0
- package/release/manifest.json +7 -0
- package/scripts/killbar-portability-check.js +67 -0
- package/scripts/package-killbar-macos.sh +38 -0
- package/src/approval-manager.js +53 -0
- package/src/cli-auth.js +230 -0
- package/src/compact-wordmark.js +13 -0
- package/src/desktop/broker-daemon.js +18 -0
- package/src/desktop/broker-grants.js +37 -0
- package/src/desktop/broker-hook-command.js +23 -0
- package/src/desktop/broker-keychain.js +29 -0
- package/src/desktop/broker-launch-agent.js +34 -0
- package/src/desktop/broker-service.js +40 -0
- package/src/desktop/chat-capture-command.js +7 -0
- package/src/desktop/chat-hook-capture.js +445 -0
- package/src/desktop/claude-lifecycle.js +143 -0
- package/src/desktop/client-identity.js +19 -0
- package/src/desktop/native-claude-broker.js +34 -0
- package/src/desktop/native-claude-connection.js +42 -0
- package/src/desktop/tool-guard-command.js +13 -0
- package/src/desktop/tool-guard.js +225 -0
- package/src/discovery/catalog.js +734 -0
- package/src/full-screen.js +88 -0
- package/src/helper-release.js +27 -0
- package/src/hidden-oauth.js +70 -0
- package/src/independent-grants.js +38 -0
- package/src/install-flow.js +71 -0
- package/src/killbar-background-install.js +47 -0
- package/src/killbar-enrollment.js +74 -0
- package/src/killbar-launch-agent.js +10 -0
- package/src/mcp-identity.js +6 -0
- package/src/native-config.js +150 -0
- package/src/native-oauth.js +33 -0
- package/src/oauth-cohort.js +43 -0
- package/src/pty-wrapper.py +57 -0
- package/src/read-json.js +8 -0
- package/src/setup/client-installer.js +93 -0
- package/src/setup/codex-guard-supervisor.js +34 -0
- package/src/setup/hook-installer.js +496 -0
- package/src/setup/managed-policy.js +26 -0
- package/src/setup/mcp-config-installer.js +204 -0
- package/src/setup-flow.js +66 -0
- package/src/tui.js +205 -0
- package/test/approval-manager.test.js +27 -0
- package/test/broker-grants.test.js +14 -0
- package/test/broker-keychain.test.js +14 -0
- package/test/broker-launch-agent.test.js +15 -0
- package/test/broker-service.test.js +42 -0
- package/test/cli-auth-recovery.test.js +15 -0
- package/test/codex-guard-supervisor.test.js +25 -0
- package/test/full-screen.test.js +49 -0
- package/test/helper-release.test.js +22 -0
- package/test/hidden-oauth.test.js +44 -0
- package/test/hook-installer.test.js +232 -0
- package/test/independent-grants.test.js +16 -0
- package/test/install-flow.test.js +24 -0
- package/test/killbar-background-install.test.js +15 -0
- package/test/killbar-enrollment.test.js +115 -0
- package/test/killbar-launch-agent.test.js +12 -0
- package/test/killbar-portability.test.js +17 -0
- package/test/managed-policy.test.js +18 -0
- package/test/native-claude-broker.test.js +19 -0
- package/test/native-claude-connection.test.js +17 -0
- package/test/native-claude-hooks.test.js +9 -0
- package/test/native-config.test.js +3 -0
- package/test/native-integration.cjs +29 -0
- package/test/native-oauth.test.js +23 -0
- package/test/oauth-cohort.test.js +26 -0
- package/test/tui.test.js +100 -0
- package/LICENSE +0 -201
- package/dist/audit/risk-engine.d.ts +0 -4
- package/dist/audit/risk-engine.d.ts.map +0 -1
- package/dist/audit/risk-engine.js +0 -174
- package/dist/audit/risk-engine.js.map +0 -1
- package/dist/audit/run.d.ts +0 -16
- package/dist/audit/run.d.ts.map +0 -1
- package/dist/audit/run.js +0 -66
- package/dist/audit/run.js.map +0 -1
- package/dist/classification/builtin-catalog.d.ts +0 -3
- package/dist/classification/builtin-catalog.d.ts.map +0 -1
- package/dist/classification/builtin-catalog.js +0 -283
- package/dist/classification/builtin-catalog.js.map +0 -1
- package/dist/classification/catalog.d.ts +0 -10
- package/dist/classification/catalog.d.ts.map +0 -1
- package/dist/classification/catalog.js +0 -194
- package/dist/classification/catalog.js.map +0 -1
- package/dist/classification/classifier.d.ts +0 -3
- package/dist/classification/classifier.d.ts.map +0 -1
- package/dist/classification/classifier.js +0 -64
- package/dist/classification/classifier.js.map +0 -1
- package/dist/classification/public-catalog-config.d.ts +0 -3
- package/dist/classification/public-catalog-config.d.ts.map +0 -1
- package/dist/classification/public-catalog-config.js +0 -5
- package/dist/classification/public-catalog-config.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -220
- package/dist/cli.js.map +0 -1
- package/dist/config/discover.d.ts +0 -8
- package/dist/config/discover.d.ts.map +0 -1
- package/dist/config/discover.js +0 -163
- package/dist/config/discover.js.map +0 -1
- package/dist/config/install.d.ts +0 -10
- package/dist/config/install.d.ts.map +0 -1
- package/dist/config/install.js +0 -143
- package/dist/config/install.js.map +0 -1
- package/dist/config/paths.d.ts +0 -24
- package/dist/config/paths.d.ts.map +0 -1
- package/dist/config/paths.js +0 -90
- package/dist/config/paths.js.map +0 -1
- package/dist/demo.d.ts +0 -4
- package/dist/demo.d.ts.map +0 -1
- package/dist/demo.js +0 -99
- package/dist/demo.js.map +0 -1
- package/dist/explanation/local.d.ts +0 -24
- package/dist/explanation/local.d.ts.map +0 -1
- package/dist/explanation/local.js +0 -667
- package/dist/explanation/local.js.map +0 -1
- package/dist/mcp/introspect.d.ts +0 -14
- package/dist/mcp/introspect.d.ts.map +0 -1
- package/dist/mcp/introspect.js +0 -186
- package/dist/mcp/introspect.js.map +0 -1
- package/dist/presentation/plain-language.d.ts +0 -12
- package/dist/presentation/plain-language.d.ts.map +0 -1
- package/dist/presentation/plain-language.js +0 -120
- package/dist/presentation/plain-language.js.map +0 -1
- package/dist/privacy/redaction.d.ts +0 -2
- package/dist/privacy/redaction.d.ts.map +0 -1
- package/dist/privacy/redaction.js +0 -50
- package/dist/privacy/redaction.js.map +0 -1
- package/dist/report/html.d.ts +0 -4
- package/dist/report/html.d.ts.map +0 -1
- package/dist/report/html.js +0 -101
- package/dist/report/html.js.map +0 -1
- package/dist/tui/analysis-path.d.ts +0 -17
- package/dist/tui/analysis-path.d.ts.map +0 -1
- package/dist/tui/analysis-path.js +0 -184
- package/dist/tui/analysis-path.js.map +0 -1
- package/dist/tui/render.d.ts +0 -4
- package/dist/tui/render.d.ts.map +0 -1
- package/dist/tui/render.js +0 -273
- package/dist/tui/render.js.map +0 -1
- package/dist/tui/splash.d.ts +0 -15
- package/dist/tui/splash.d.ts.map +0 -1
- package/dist/tui/splash.js +0 -130
- package/dist/tui/splash.js.map +0 -1
- package/dist/tui/stream.d.ts +0 -6
- package/dist/tui/stream.d.ts.map +0 -1
- package/dist/tui/stream.js +0 -56
- package/dist/tui/stream.js.map +0 -1
- package/dist/types.d.ts +0 -131
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -8
- package/dist/version.js.map +0 -1
- package/models/APACHE-2.0.txt +0 -202
- package/models/MODEL.json +0 -29
- package/models/NOTICE.md +0 -23
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/explanation/local.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/introspect.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { ServerConfig, ServerProbe } from '../types.js';
|
|
2
|
-
export declare function resolvedEnvironment(configured: Record<string, string>, inheritParentEnvironment?: boolean): Record<string, string>;
|
|
3
|
-
export declare function expandEnvironment(value: string, allowSensitiveEnvironment?: boolean): string;
|
|
4
|
-
export interface ProbeOptions {
|
|
5
|
-
allowServerStarts: boolean;
|
|
6
|
-
inheritParentEnvironment?: boolean;
|
|
7
|
-
allowSensitiveEnvironment?: boolean;
|
|
8
|
-
timeoutMs?: number;
|
|
9
|
-
concurrency?: number;
|
|
10
|
-
}
|
|
11
|
-
export declare function probeServers(servers: ServerConfig[], options: ProbeOptions): Promise<ServerProbe[]>;
|
|
12
|
-
export declare function isDynamicLauncher(server: ServerConfig): boolean;
|
|
13
|
-
export declare function isRecursiveSlauntLauncher(server: ServerConfig): boolean;
|
|
14
|
-
//# sourceMappingURL=introspect.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../../src/mcp/introspect.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAgB,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG3E,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,wBAAwB,UAAQ,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,yBAAyB,UAAQ,GAAG,MAAM,CAO1F;AAqKD,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAYzG;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAG/D;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAYvE"}
|
package/dist/mcp/introspect.js
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { basename } from 'node:path';
|
|
2
|
-
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
3
|
-
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
4
|
-
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
5
|
-
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
6
|
-
import { PACKAGE_VERSION } from '../version.js';
|
|
7
|
-
export function resolvedEnvironment(configured, inheritParentEnvironment = false) {
|
|
8
|
-
if (!inheritParentEnvironment)
|
|
9
|
-
return { ...configured };
|
|
10
|
-
const inherited = Object.fromEntries(Object.entries(process.env).filter((entry) => typeof entry[1] === 'string'));
|
|
11
|
-
return { ...inherited, ...configured };
|
|
12
|
-
}
|
|
13
|
-
const SENSITIVE_ENV_NAME = /(?:TOKEN|SECRET|KEY|PASSWORD|PASSWD|PRIVATE|CREDENTIAL|COOKIE|SESSION|AUTH|JWT|DATABASE_URL|CONNECTION_STRING)/i;
|
|
14
|
-
export function expandEnvironment(value, allowSensitiveEnvironment = false) {
|
|
15
|
-
return value.replace(/\$\{([A-Z_][A-Z0-9_]*)(?::-([^}]*))?\}/gi, (_match, name, fallback) => {
|
|
16
|
-
if (SENSITIVE_ENV_NAME.test(name) && !allowSensitiveEnvironment) {
|
|
17
|
-
throw new Error(`Sensitive environment expansion for ${name} is disabled; pass --allow-sensitive-env only for a trusted local probe`);
|
|
18
|
-
}
|
|
19
|
-
return process.env[name] ?? fallback ?? '';
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
function expandConfiguredEnvironment(configured, allowSensitiveEnvironment) {
|
|
23
|
-
return Object.fromEntries(Object.entries(configured).map(([name, value]) => [name, expandEnvironment(value, allowSensitiveEnvironment)]));
|
|
24
|
-
}
|
|
25
|
-
function redactedError(error, server) {
|
|
26
|
-
let message = error instanceof Error ? error.message : String(error);
|
|
27
|
-
for (const value of [...Object.values(server.env), ...Object.values(server.headers)]) {
|
|
28
|
-
if (value.length >= 4)
|
|
29
|
-
message = message.replaceAll(value, '[redacted]');
|
|
30
|
-
}
|
|
31
|
-
message = message
|
|
32
|
-
.replace(/(bearer\s+)[a-z0-9._~+/=-]+/gi, '$1[redacted]')
|
|
33
|
-
.replace(/([?&](?:token|key|secret|password)=)[^&\s]+/gi, '$1[redacted]');
|
|
34
|
-
return message.slice(0, 300);
|
|
35
|
-
}
|
|
36
|
-
function asInputSchema(value) {
|
|
37
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
38
|
-
? value
|
|
39
|
-
: undefined;
|
|
40
|
-
}
|
|
41
|
-
async function listAllTools(client, server) {
|
|
42
|
-
const tools = [];
|
|
43
|
-
let cursor;
|
|
44
|
-
do {
|
|
45
|
-
const response = await client.listTools(cursor ? { cursor } : undefined);
|
|
46
|
-
for (const tool of response.tools) {
|
|
47
|
-
const inputSchema = asInputSchema(tool.inputSchema);
|
|
48
|
-
tools.push({
|
|
49
|
-
serverId: server.id,
|
|
50
|
-
serverName: server.name,
|
|
51
|
-
client: server.client,
|
|
52
|
-
clientLabel: server.clientLabel,
|
|
53
|
-
name: tool.name,
|
|
54
|
-
description: tool.description || '',
|
|
55
|
-
...(inputSchema ? { inputSchema } : {}),
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
cursor = response.nextCursor;
|
|
59
|
-
} while (cursor);
|
|
60
|
-
return tools;
|
|
61
|
-
}
|
|
62
|
-
async function connectAndList(server, transport) {
|
|
63
|
-
const client = new Client({ name: 'slaunt-audit', version: PACKAGE_VERSION }, { capabilities: {} });
|
|
64
|
-
try {
|
|
65
|
-
// The SDK's transport classes declare `sessionId?: string` while its shared
|
|
66
|
-
// Transport interface is emitted without exact-optional compatibility.
|
|
67
|
-
await client.connect(transport);
|
|
68
|
-
return await listAllTools(client, server);
|
|
69
|
-
}
|
|
70
|
-
finally {
|
|
71
|
-
await client.close().catch(() => undefined);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
async function withTimeout(operation, milliseconds, onTimeout) {
|
|
75
|
-
let timer;
|
|
76
|
-
const timeout = new Promise((_resolve, reject) => {
|
|
77
|
-
timer = setTimeout(() => {
|
|
78
|
-
void onTimeout().finally(() => reject(new Error(`MCP probe timed out after ${milliseconds} ms`)));
|
|
79
|
-
}, milliseconds);
|
|
80
|
-
});
|
|
81
|
-
try {
|
|
82
|
-
return await Promise.race([operation, timeout]);
|
|
83
|
-
}
|
|
84
|
-
finally {
|
|
85
|
-
if (timer)
|
|
86
|
-
clearTimeout(timer);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
async function probeServer(server, allowServerStarts, timeoutMs, inheritParentEnvironment, allowSensitiveEnvironment) {
|
|
90
|
-
if (server.transport === 'stdio') {
|
|
91
|
-
if (isRecursiveSlauntLauncher(server)) {
|
|
92
|
-
return {
|
|
93
|
-
serverId: server.id,
|
|
94
|
-
status: 'skipped',
|
|
95
|
-
tools: [],
|
|
96
|
-
message: 'Skipped a Slaunt CLI launcher to prevent a recursive audit',
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
if (!allowServerStarts) {
|
|
100
|
-
return { serverId: server.id, status: 'skipped', tools: [], message: 'Local server start was not approved' };
|
|
101
|
-
}
|
|
102
|
-
if (!server.command)
|
|
103
|
-
return { serverId: server.id, status: 'failed', tools: [], message: 'Missing stdio command' };
|
|
104
|
-
try {
|
|
105
|
-
const transport = new StdioClientTransport({
|
|
106
|
-
command: expandEnvironment(server.command, allowSensitiveEnvironment),
|
|
107
|
-
args: server.args.map((argument) => expandEnvironment(argument, allowSensitiveEnvironment)),
|
|
108
|
-
env: resolvedEnvironment(expandConfiguredEnvironment(server.env, allowSensitiveEnvironment), inheritParentEnvironment),
|
|
109
|
-
stderr: 'pipe',
|
|
110
|
-
});
|
|
111
|
-
const tools = await withTimeout(connectAndList(server, transport), timeoutMs, () => transport.close());
|
|
112
|
-
return { serverId: server.id, status: 'ok', tools };
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
return { serverId: server.id, status: 'failed', tools: [], message: redactedError(error, server) };
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
if ((server.transport === 'http' || server.transport === 'sse') && server.url) {
|
|
119
|
-
try {
|
|
120
|
-
// HTTP/SSE probes may reach an untrusted remote server. Never expand
|
|
121
|
-
// token/key/secret variables into a URL or header, even when a caller
|
|
122
|
-
// explicitly allows sensitive values for a local stdio launch.
|
|
123
|
-
const endpoint = new URL(expandEnvironment(server.url, false));
|
|
124
|
-
const headers = Object.fromEntries(Object.entries(server.headers).map(([name, value]) => [name, expandEnvironment(value, false)]));
|
|
125
|
-
const requestInit = { headers, redirect: 'error' };
|
|
126
|
-
if (server.transport === 'sse') {
|
|
127
|
-
const transport = new SSEClientTransport(endpoint, { requestInit });
|
|
128
|
-
const tools = await withTimeout(connectAndList(server, transport), timeoutMs, () => transport.close());
|
|
129
|
-
return { serverId: server.id, status: 'ok', tools };
|
|
130
|
-
}
|
|
131
|
-
try {
|
|
132
|
-
const transport = new StreamableHTTPClientTransport(endpoint, { requestInit });
|
|
133
|
-
const tools = await withTimeout(connectAndList(server, transport), timeoutMs, () => transport.close());
|
|
134
|
-
return { serverId: server.id, status: 'ok', tools };
|
|
135
|
-
}
|
|
136
|
-
catch (streamableError) {
|
|
137
|
-
const message = redactedError(streamableError, server);
|
|
138
|
-
if (!/4\d\d|sse|method|content[- ]type/i.test(message))
|
|
139
|
-
throw streamableError;
|
|
140
|
-
const transport = new SSEClientTransport(endpoint, { requestInit });
|
|
141
|
-
const tools = await withTimeout(connectAndList(server, transport), timeoutMs, () => transport.close());
|
|
142
|
-
return { serverId: server.id, status: 'ok', tools };
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
catch (error) {
|
|
146
|
-
return { serverId: server.id, status: 'failed', tools: [], message: redactedError(error, server) };
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
return { serverId: server.id, status: 'skipped', tools: [], message: `Unsupported ${server.transport} transport` };
|
|
150
|
-
}
|
|
151
|
-
async function mapWithConcurrency(items, concurrency, mapper) {
|
|
152
|
-
const results = new Array(items.length);
|
|
153
|
-
let next = 0;
|
|
154
|
-
async function worker() {
|
|
155
|
-
while (true) {
|
|
156
|
-
const index = next++;
|
|
157
|
-
if (index >= items.length)
|
|
158
|
-
return;
|
|
159
|
-
const item = items[index];
|
|
160
|
-
if (item !== undefined)
|
|
161
|
-
results[index] = await mapper(item);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, worker));
|
|
165
|
-
return results;
|
|
166
|
-
}
|
|
167
|
-
export async function probeServers(servers, options) {
|
|
168
|
-
return mapWithConcurrency(servers, options.concurrency || 4, (server) => probeServer(server, options.allowServerStarts, options.timeoutMs || 8_000, options.inheritParentEnvironment === true, options.allowSensitiveEnvironment === true));
|
|
169
|
-
}
|
|
170
|
-
export function isDynamicLauncher(server) {
|
|
171
|
-
const command = server.command ? basename(server.command).toLowerCase() : '';
|
|
172
|
-
return ['npx', 'uvx', 'docker', 'podman', 'bunx', 'pnpx'].includes(command);
|
|
173
|
-
}
|
|
174
|
-
export function isRecursiveSlauntLauncher(server) {
|
|
175
|
-
const command = server.command ? basename(server.command).toLowerCase() : '';
|
|
176
|
-
if (/^slaunt(?:\.cmd|\.exe)?$/.test(command))
|
|
177
|
-
return true;
|
|
178
|
-
if (['npx', 'bunx', 'pnpx'].includes(command)) {
|
|
179
|
-
return server.args.some((argument) => /^slaunt(?:@[^/\s]+)?$/i.test(argument));
|
|
180
|
-
}
|
|
181
|
-
return server.args.some((argument) => {
|
|
182
|
-
const normalized = argument.replaceAll('\\', '/');
|
|
183
|
-
return /(?:^|\/)slaunt(?:-audit)?(?:\/.*)?\/(?:dist\/)?cli\.(?:c?js|mjs)$/i.test(normalized);
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
//# sourceMappingURL=introspect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"introspect.js","sourceRoot":"","sources":["../../src/mcp/introspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Capability, ClientId, Finding, Severity } from '../types.js';
|
|
2
|
-
export interface PlainFinding {
|
|
3
|
-
label: string;
|
|
4
|
-
title: string;
|
|
5
|
-
why: string;
|
|
6
|
-
recommendation: string;
|
|
7
|
-
}
|
|
8
|
-
export declare function plainCapability(capability: Capability): string;
|
|
9
|
-
export declare function plainClient(client: ClientId): string;
|
|
10
|
-
export declare function plainSeverity(severity: Severity): string;
|
|
11
|
-
export declare function plainFinding(item: Finding): PlainFinding;
|
|
12
|
-
//# sourceMappingURL=plain-language.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plain-language.d.ts","sourceRoot":"","sources":["../../src/presentation/plain-language.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;CACxB;AAoCD,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAE9D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAEpD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAuFxD"}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
const severityLabels = {
|
|
2
|
-
critical: 'Critical',
|
|
3
|
-
high: 'High',
|
|
4
|
-
medium: 'Medium',
|
|
5
|
-
low: 'Low',
|
|
6
|
-
info: 'Info',
|
|
7
|
-
};
|
|
8
|
-
const capabilityLabels = {
|
|
9
|
-
'read-data': 'Read data',
|
|
10
|
-
'write-data': 'Write data',
|
|
11
|
-
'read-files': 'Read files',
|
|
12
|
-
'write-files': 'Write files',
|
|
13
|
-
'delete-data': 'Delete data',
|
|
14
|
-
'execute-code': 'Execute code',
|
|
15
|
-
'execute-shell': 'Execute shell commands',
|
|
16
|
-
'read-secrets': 'Read credentials',
|
|
17
|
-
'manage-auth': 'Manage authentication',
|
|
18
|
-
'network-access': 'Access the network',
|
|
19
|
-
'deploy-production': 'Deploy to production',
|
|
20
|
-
'edit-code': 'Edit code',
|
|
21
|
-
'create-pull-request': 'Create pull requests',
|
|
22
|
-
'merge-pull-request': 'Merge pull requests',
|
|
23
|
-
'administer-system': 'Administer systems',
|
|
24
|
-
'control-browser': 'Control browsers',
|
|
25
|
-
'send-message': 'Send messages',
|
|
26
|
-
};
|
|
27
|
-
const clientLabels = {
|
|
28
|
-
'claude-code': 'Claude Code',
|
|
29
|
-
'claude-desktop': 'Claude Desktop',
|
|
30
|
-
codex: 'Codex',
|
|
31
|
-
};
|
|
32
|
-
export function plainCapability(capability) {
|
|
33
|
-
return capabilityLabels[capability];
|
|
34
|
-
}
|
|
35
|
-
export function plainClient(client) {
|
|
36
|
-
return clientLabels[client];
|
|
37
|
-
}
|
|
38
|
-
export function plainSeverity(severity) {
|
|
39
|
-
return severityLabels[severity];
|
|
40
|
-
}
|
|
41
|
-
export function plainFinding(item) {
|
|
42
|
-
const label = plainSeverity(item.severity);
|
|
43
|
-
const title = item.title;
|
|
44
|
-
if (/deploy without an external approval boundary/i.test(title)) {
|
|
45
|
-
const assistant = plainClient(item.clients[0] || 'claude-code');
|
|
46
|
-
return {
|
|
47
|
-
label,
|
|
48
|
-
title: `${assistant} can deploy to production without an approval boundary`,
|
|
49
|
-
why: 'The exposed deployment tool can change the live environment before a person reviews the action.',
|
|
50
|
-
recommendation: 'Require human approval for production deployments and restrict the environments this agent can change.',
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
if (/execute shell commands and access secrets/i.test(title)) {
|
|
54
|
-
const assistant = plainClient(item.clients[0] || 'codex');
|
|
55
|
-
return {
|
|
56
|
-
label,
|
|
57
|
-
title: `${assistant} can chain credential access with shell execution`,
|
|
58
|
-
why: 'A tool chain could read passwords or tokens and then use them from an operating-system command.',
|
|
59
|
-
recommendation: 'Separate credential access from shell execution, or require approval at both capability boundaries.',
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
if (/share broad GitHub permissions/i.test(title)) {
|
|
63
|
-
return {
|
|
64
|
-
label,
|
|
65
|
-
title: 'Claude Code and Codex share broad GitHub permissions',
|
|
66
|
-
why: 'Shared credentials remove role separation, so either agent can use the same code-changing permissions.',
|
|
67
|
-
recommendation: 'Give each agent role-scoped GitHub credentials limited to the repositories and actions it needs.',
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
if (/cleartext HTTP/i.test(title)) {
|
|
71
|
-
const assistant = plainClient(item.clients[0] || 'codex');
|
|
72
|
-
return {
|
|
73
|
-
label,
|
|
74
|
-
title: `${assistant} sends MCP traffic over unencrypted HTTP`,
|
|
75
|
-
why: 'A network observer could read or alter requests and responses sent through this MCP connection.',
|
|
76
|
-
recommendation: 'Use HTTPS with certificate verification before enabling the MCP server.',
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
if (/invalid MCP server URL/i.test(title)) {
|
|
80
|
-
const assistant = plainClient(item.clients[0] || 'codex');
|
|
81
|
-
return {
|
|
82
|
-
label,
|
|
83
|
-
title: `${assistant} has an invalid MCP server URL`,
|
|
84
|
-
why: 'Slaunt cannot safely determine the network destination from the configured address.',
|
|
85
|
-
recommendation: 'Replace it with a reviewed HTTPS URL.',
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
if (/stores credential material in an MCP configuration/i.test(title)) {
|
|
89
|
-
const assistant = plainClient(item.clients[0] || 'codex');
|
|
90
|
-
return {
|
|
91
|
-
label,
|
|
92
|
-
title: `${assistant} stores credentials directly in an MCP configuration`,
|
|
93
|
-
why: 'Plaintext configuration values may be readable through local file access, backups, or diagnostic output.',
|
|
94
|
-
recommendation: 'Reference a protected environment variable or operating-system credential store instead.',
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
if (/unpinned package at startup/i.test(title)) {
|
|
98
|
-
return {
|
|
99
|
-
label,
|
|
100
|
-
title: 'An MCP server can execute an unpinned package at startup',
|
|
101
|
-
why: 'The package version is not fixed, so different code may run without a configuration change.',
|
|
102
|
-
recommendation: 'Pin the package to an exact reviewed version and preserve its lockfile or integrity value.',
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
if (/unclassified tools appear state-changing/i.test(title)) {
|
|
106
|
-
return {
|
|
107
|
-
label,
|
|
108
|
-
title: 'Some unclassified tools appear state-changing',
|
|
109
|
-
why: 'Their names suggest execution or administrative behavior, but no reviewed classification rule matched them.',
|
|
110
|
-
recommendation: 'Manually classify these tools before leaving them exposed to an agent.',
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
return {
|
|
114
|
-
label,
|
|
115
|
-
title,
|
|
116
|
-
why: item.why,
|
|
117
|
-
recommendation: item.recommendation,
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=plain-language.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plain-language.js","sourceRoot":"","sources":["../../src/presentation/plain-language.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../src/privacy/redaction.ts"],"names":[],"mappings":"AA4BA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAyB5D"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
const SENSITIVE_NAME = /(?:token|secret|password|passwd|pass|key|auth|authorization|credential)/iu;
|
|
2
|
-
const SENSITIVE_HEADER = /^(?:authorization|proxy-authorization|cookie|set-cookie|x-api-key|api-key)\s*:/iu;
|
|
3
|
-
function hasSensitiveName(value) {
|
|
4
|
-
return SENSITIVE_NAME.test(value);
|
|
5
|
-
}
|
|
6
|
-
function redactInlineAssignments(value) {
|
|
7
|
-
const assignment = /(^|[?&\s=])(-{0,2}[A-Za-z][A-Za-z0-9_.-]*)\s*=\s*([^&\s]*)/gu;
|
|
8
|
-
return value.replace(assignment, (match, prefix, key, assignedValue) => {
|
|
9
|
-
if (hasSensitiveName(key))
|
|
10
|
-
return `${prefix}${key}=[redacted]`;
|
|
11
|
-
if (!assignedValue.includes('='))
|
|
12
|
-
return match;
|
|
13
|
-
const nested = redactInlineAssignments(assignedValue);
|
|
14
|
-
return nested === assignedValue ? match : `${prefix}${key}=${nested}`;
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
function redactEmbeddedCredentials(value) {
|
|
18
|
-
return redactInlineAssignments(value)
|
|
19
|
-
.replace(/\b(Bearer|Basic|Token)\s+[^\s,;]+/giu, '$1 [redacted]')
|
|
20
|
-
.replace(/(authorization|proxy-authorization|cookie|set-cookie|x-api-key|api-key)\s*:\s*[^\s,;]+/giu, '$1: [redacted]');
|
|
21
|
-
}
|
|
22
|
-
function isSensitiveFlag(value) {
|
|
23
|
-
const match = /^-{1,2}([^=]+)(?:=.*)?$/u.exec(value);
|
|
24
|
-
return Boolean(match && hasSensitiveName(match[1] || ''));
|
|
25
|
-
}
|
|
26
|
-
export function sanitizeCommandArgs(args) {
|
|
27
|
-
const sanitized = [];
|
|
28
|
-
let redactNext = false;
|
|
29
|
-
let inspectNextHeader = false;
|
|
30
|
-
for (const arg of args) {
|
|
31
|
-
if (redactNext) {
|
|
32
|
-
sanitized.push('[redacted]');
|
|
33
|
-
redactNext = false;
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
if (inspectNextHeader) {
|
|
37
|
-
sanitized.push(SENSITIVE_HEADER.test(arg) ? `${arg.split(':', 1)[0]}: [redacted]` : redactEmbeddedCredentials(arg));
|
|
38
|
-
inspectNextHeader = false;
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
const redacted = redactEmbeddedCredentials(arg);
|
|
42
|
-
sanitized.push(redacted);
|
|
43
|
-
if (isSensitiveFlag(arg) && !arg.includes('='))
|
|
44
|
-
redactNext = true;
|
|
45
|
-
if (/^(?:--header|-H)$/iu.test(arg))
|
|
46
|
-
inspectNextHeader = true;
|
|
47
|
-
}
|
|
48
|
-
return sanitized;
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=redaction.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/privacy/redaction.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,2EAA2E,CAAC;AACnG,MAAM,gBAAgB,GAAG,kFAAkF,CAAC;AAE5G,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa;IAC5C,MAAM,UAAU,GAAG,8DAA8D,CAAC;IAClF,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAc,EAAE,GAAW,EAAE,aAAqB,EAAE,EAAE;QAC7F,IAAI,gBAAgB,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,MAAM,GAAG,GAAG,aAAa,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/C,MAAM,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;QACtD,OAAO,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAa;IAC9C,OAAO,uBAAuB,CAAC,KAAK,CAAC;SAClC,OAAO,CAAC,sCAAsC,EAAE,eAAe,CAAC;SAChE,OAAO,CAAC,2FAA2F,EAAE,gBAAgB,CAAC,CAAC;AAC5H,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAc;IAChD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAE9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,UAAU,EAAE,CAAC;YACf,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7B,UAAU,GAAG,KAAK,CAAC;YACnB,SAAS;QACX,CAAC;QAED,IAAI,iBAAiB,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;YACpH,iBAAiB,GAAG,KAAK,CAAC;YAC1B,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;QAChD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,UAAU,GAAG,IAAI,CAAC;QAClE,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,iBAAiB,GAAG,IAAI,CAAC;IAChE,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/report/html.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA+B/C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAyC5D;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B/F"}
|
package/dist/report/html.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { randomBytes } from 'node:crypto';
|
|
2
|
-
import { access, link, mkdir, unlink, writeFile } from 'node:fs/promises';
|
|
3
|
-
import { dirname, resolve } from 'node:path';
|
|
4
|
-
import { plainCapability, plainClient, plainFinding } from '../presentation/plain-language.js';
|
|
5
|
-
function escapeHtml(value) {
|
|
6
|
-
return String(value)
|
|
7
|
-
.replaceAll('&', '&')
|
|
8
|
-
.replaceAll('<', '<')
|
|
9
|
-
.replaceAll('>', '>')
|
|
10
|
-
.replaceAll('"', '"')
|
|
11
|
-
.replaceAll("'", ''');
|
|
12
|
-
}
|
|
13
|
-
function accessOverview(result) {
|
|
14
|
-
const explanations = new Map(result.explanations.map((explanation) => [explanation.serverId, explanation]));
|
|
15
|
-
return result.discovery.clients.filter((client) => client.detected).map((client) => {
|
|
16
|
-
const servers = result.discovery.servers.filter((server) => server.client === client.id);
|
|
17
|
-
const rows = servers.map((server) => {
|
|
18
|
-
const capabilities = [...new Set(result.tools
|
|
19
|
-
.filter((tool) => tool.serverId === server.id)
|
|
20
|
-
.flatMap((tool) => tool.classification.capabilities))];
|
|
21
|
-
const explanation = explanations.get(server.id);
|
|
22
|
-
const source = explanation?.source === 'local-llm'
|
|
23
|
-
? `Local 1B model${explanation.model ? ` ${explanation.model}` : ''}`
|
|
24
|
-
: 'Deterministic local evidence fallback';
|
|
25
|
-
const serverLabel = `${server.name} (${server.scope}/${server.transport})`;
|
|
26
|
-
return `<tr><td>${escapeHtml(serverLabel)}</td><td>${escapeHtml(capabilities.map(plainCapability).join(', ') || 'Permissions could not be read')}</td><td>${escapeHtml(explanation?.text || 'Explanation unavailable')}<br><small>${escapeHtml(source)}</small></td></tr>`;
|
|
27
|
-
}).join('');
|
|
28
|
-
return `<section class="client"><h3>${escapeHtml(client.label)}</h3><table><thead><tr><th>Server</th><th>Declared access</th><th>Explanation</th></tr></thead><tbody>${rows}</tbody></table></section>`;
|
|
29
|
-
}).join('');
|
|
30
|
-
}
|
|
31
|
-
export function renderHtmlReport(result) {
|
|
32
|
-
const summary = result.summary;
|
|
33
|
-
const findings = result.findings.map((item) => {
|
|
34
|
-
const copy = plainFinding(item);
|
|
35
|
-
const assistants = item.clients.map(plainClient).join(', ');
|
|
36
|
-
return `
|
|
37
|
-
<article class="finding ${escapeHtml(item.severity)}">
|
|
38
|
-
<div class="severity">${escapeHtml(copy.label)}</div>
|
|
39
|
-
<h3>${escapeHtml(copy.title)}</h3>
|
|
40
|
-
${assistants ? `<p><strong>Agent client:</strong> ${escapeHtml(assistants)}</p>` : ''}
|
|
41
|
-
${item.serverNames.length ? `<p><strong>MCP server:</strong> ${escapeHtml(item.serverNames.join(', '))}</p>` : ''}
|
|
42
|
-
${item.toolNames.length ? `<p><strong>Tool:</strong> ${escapeHtml(item.toolNames.join(', '))}</p>` : ''}
|
|
43
|
-
${item.access.length ? `<p><strong>Capabilities:</strong> ${escapeHtml(item.access.join(', '))}</p>` : ''}
|
|
44
|
-
<p><strong>Why this matters:</strong> ${escapeHtml(copy.why)}</p>
|
|
45
|
-
<p><strong>Recommended control:</strong> ${escapeHtml(copy.recommendation)}</p>
|
|
46
|
-
</article>`;
|
|
47
|
-
}).join('');
|
|
48
|
-
const unknown = result.tools.filter((tool) => tool.classification.source === 'unknown');
|
|
49
|
-
const unavailable = result.probes.filter((probe) => probe.status !== 'ok').length;
|
|
50
|
-
const scoreAvailable = summary.tools > 0 || unavailable === 0;
|
|
51
|
-
const scoreClass = !scoreAvailable ? 'warn' : summary.postureScore >= 80 ? 'good' : summary.postureScore >= 55 ? 'warn' : 'bad';
|
|
52
|
-
const scoreValue = scoreAvailable ? summary.postureScore : 0;
|
|
53
|
-
return `<!doctype html>
|
|
54
|
-
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
|
55
|
-
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; style-src 'unsafe-inline'; img-src data:">
|
|
56
|
-
<title>Slaunt MCP Agent Access Audit</title><style>
|
|
57
|
-
:root{color-scheme:light dark;--bg:#0b0d12;--card:#141821;--ink:#f4f6fb;--muted:#9ba6b8;--line:#293142;--accent:#8b5cf6;--critical:#ff4d6d;--high:#ff8a4c;--medium:#f7c948;--low:#48cae4}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 15% 0,#24164a 0,transparent 32%),var(--bg);color:var(--ink);font:15px/1.55 ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}main{width:min(1060px,calc(100% - 32px));margin:0 auto;padding:64px 0 96px}header{display:grid;grid-template-columns:1fr auto;gap:24px;align-items:end;padding-bottom:36px;border-bottom:1px solid var(--line)}.eyebrow{color:#b69cff;text-transform:uppercase;letter-spacing:.14em;font-size:12px;font-weight:800}h1{font-size:clamp(34px,6vw,64px);line-height:1;margin:.18em 0}.sub{color:var(--muted);max-width:640px}.score{width:136px;height:136px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--accent) calc(var(--score)*1%),#252b38 0);position:relative}.score:before{content:"";position:absolute;inset:9px;border-radius:50%;background:var(--card)}.score span{position:relative;font-size:38px;font-weight:850}.score small{display:block;font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.1em}.metrics{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin:28px 0}.metric{padding:18px;background:color-mix(in srgb,var(--card) 92%,transparent);border:1px solid var(--line);border-radius:14px}.metric b{display:block;font-size:28px}.metric span{color:var(--muted);font-size:12px}h2{margin:52px 0 18px;font-size:24px}.finding{border:1px solid var(--line);border-left-width:4px;border-radius:14px;background:var(--card);padding:22px;margin:14px 0}.finding.critical{border-left-color:var(--critical)}.finding.high{border-left-color:var(--high)}.finding.medium{border-left-color:var(--medium)}.finding.low{border-left-color:var(--low)}.finding h3{margin:4px 0 12px}.finding p{margin:7px 0;color:#cbd3df}.severity{text-transform:uppercase;letter-spacing:.12em;font-size:11px;font-weight:900}.critical .severity{color:var(--critical)}.high .severity{color:var(--high)}.medium .severity{color:var(--medium)}.low .severity{color:var(--low)}.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}.client{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px}.client h3{margin:0 0 12px}table{width:100%;border-collapse:collapse}td{padding:9px 0;border-top:1px solid var(--line);vertical-align:top}td:first-child{font-weight:750;width:32%}td:last-child{color:var(--muted)}code{background:#202635;padding:.15em .38em;border-radius:5px}.notice{padding:18px;border:1px solid #4c3a86;background:#171229;border-radius:14px;color:#d9cffc}.unknown{columns:2;margin:0;padding-left:22px}.unknown li{break-inside:avoid;padding:3px}.cta{margin-top:52px;padding:30px;border-radius:18px;background:linear-gradient(130deg,#5b21b6,#312e81);box-shadow:0 22px 70px #5b21b633}.cta h2{margin:0 0 8px}.cta a{display:inline-block;margin-top:12px;background:white;color:#28145d;text-decoration:none;font-weight:850;padding:11px 16px;border-radius:9px}.fine{font-size:12px;color:var(--muted);margin-top:42px}@media(max-width:800px){header{grid-template-columns:1fr}.metrics{grid-template-columns:repeat(2,1fr)}.grid{grid-template-columns:1fr}.unknown{columns:1}}
|
|
58
|
-
</style></head><body><main>
|
|
59
|
-
<header><div><div class="eyebrow">Slaunt MCP audit</div><h1>Agent access, explained.</h1><p class="sub">A local audit of MCP servers—the services that expose tools to Claude and Codex. No tool was called and no audit payload was uploaded.</p></div><div class="score ${scoreClass}" style="--score:${scoreValue}"><span>${scoreAvailable ? summary.postureScore : '?'}<small>${scoreAvailable ? 'security posture' : 'insufficient coverage'}</small></span></div></header>
|
|
60
|
-
<section class="metrics">
|
|
61
|
-
<div class="metric"><b>${summary.clientsDetected}</b><span>Agent clients</span></div><div class="metric"><b>${summary.serverBindings}</b><span>MCP server bindings</span></div><div class="metric"><b>${summary.tools}</b><span>Tools exposed</span></div><div class="metric"><b>${summary.sensitiveCapabilities}</b><span>Sensitive tools</span></div><div class="metric"><b>${summary.highRiskFindings}</b><span>High-risk findings</span></div><div class="metric"><b>${summary.unclassified}</b><span>Unclassified tools</span></div>
|
|
62
|
-
</section>
|
|
63
|
-
<div class="notice">Classification source: <strong>${escapeHtml(result.privacy.catalogSource)}</strong>. Tool names, descriptions, schemas, configuration values, findings, and server explanations stayed on this machine. Explanations use a loopback-only local 1B model when available and otherwise fall back to deterministic evidence.</div>
|
|
64
|
-
<h2>High-priority findings</h2>${findings || '<p>No correlated high-risk access paths were identified from the available tool declarations.</p>'}
|
|
65
|
-
<h2>Access overview</h2><p>Capabilities describe what each MCP server allows an agent to do. The <strong>Server explanations</strong> column grounds every row in retrieved tools/list evidence or a deterministic local fallback.</p><div class="grid">${accessOverview(result)}</div>
|
|
66
|
-
<h2>Classification coverage</h2><p><strong>${summary.classified}</strong> tools matched a reviewed catalog rule. <strong>${summary.unclassified}</strong> did not match and require manual review.</p>
|
|
67
|
-
${unknown.length ? `<ul class="unknown">${unknown.map((tool) => `<li><code>${escapeHtml(tool.name)}</code> <span>(${escapeHtml(tool.serverName)})</span></li>`).join('')}</ul>` : '<p>Every retrieved tool matched a reviewed classification rule.</p>'}
|
|
68
|
-
<section class="cta"><h2>Apply controls to the access paths you found.</h2><p>Slaunt can add role-scoped capabilities, approval policies, continuous monitoring, and remote shutdown around the MCP servers you already use. You choose when to connect.</p><a href="https://slaunt.ai/setup">Set up Slaunt →</a></section>
|
|
69
|
-
<p class="fine">Scope: configured MCP servers and their declared tools. This audit did not call tools or inspect prompts, file contents, credentials, non-MCP agents, or tool-use history. Generated ${escapeHtml(result.generatedAt)}.</p>
|
|
70
|
-
</main></body></html>`;
|
|
71
|
-
}
|
|
72
|
-
export async function writeHtmlReport(result, outputPath) {
|
|
73
|
-
const date = result.generatedAt.slice(0, 10);
|
|
74
|
-
const requested = resolve(outputPath || `slaunt-audit-${date}.html`);
|
|
75
|
-
let path = requested;
|
|
76
|
-
if (outputPath) {
|
|
77
|
-
await access(path).then(() => { throw new Error(`refusing to overwrite existing report: ${path}`); }, () => undefined);
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
for (let suffix = 2; suffix < 1_000; suffix += 1) {
|
|
81
|
-
try {
|
|
82
|
-
await access(path);
|
|
83
|
-
path = resolve(`slaunt-audit-${date}-${suffix}.html`);
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
break;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
const temporary = `${path}.${randomBytes(10).toString('hex')}.tmp`;
|
|
91
|
-
await mkdir(dirname(path), { recursive: true, mode: 0o700 });
|
|
92
|
-
try {
|
|
93
|
-
await writeFile(temporary, renderHtmlReport(result), { encoding: 'utf8', mode: 0o600, flag: 'wx' });
|
|
94
|
-
await link(temporary, path);
|
|
95
|
-
}
|
|
96
|
-
finally {
|
|
97
|
-
await unlink(temporary).catch(() => undefined);
|
|
98
|
-
}
|
|
99
|
-
return path;
|
|
100
|
-
}
|
|
101
|
-
//# sourceMappingURL=html.js.map
|