slaunt 0.1.2 → 0.1.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 -2
- package/dist/audit/run.js +5 -5
- package/dist/audit/run.js.map +1 -1
- package/dist/cli.js +28 -23
- package/dist/cli.js.map +1 -1
- package/dist/mcp/introspect.js +1 -1
- package/dist/presentation/plain-language.d.ts +12 -0
- package/dist/presentation/plain-language.d.ts.map +1 -0
- package/dist/presentation/plain-language.js +120 -0
- package/dist/presentation/plain-language.js.map +1 -0
- package/dist/report/html.d.ts.map +1 -1
- package/dist/report/html.js +29 -31
- package/dist/report/html.js.map +1 -1
- package/dist/tui/analysis-path.d.ts +3 -0
- package/dist/tui/analysis-path.d.ts.map +1 -1
- package/dist/tui/analysis-path.js +136 -22
- package/dist/tui/analysis-path.js.map +1 -1
- package/dist/tui/render.d.ts.map +1 -1
- package/dist/tui/render.js +50 -51
- package/dist/tui/render.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -53,6 +53,7 @@ npx slaunt audit --demo
|
|
|
53
53
|
|
|
54
54
|
# Skip deliberate interactive pacing while keeping the full audit
|
|
55
55
|
npx slaunt audit --no-motion
|
|
56
|
+
npx slaunt audit --quick
|
|
56
57
|
```
|
|
57
58
|
|
|
58
59
|
Run `npx slaunt audit --help` for every option.
|
|
@@ -135,9 +136,9 @@ Database patterns are treated as bounded globs, never executable regular express
|
|
|
135
136
|
|
|
136
137
|
The terminal flow uses immediate collection feedback followed by a short, deliberately paced analysis trail. A single updating line indexes the retrieved tools, searches direct and chained privilege paths, compares client permissions, and ranks the evidence before revealing the report. Every state is derived from the actual audit result; the pacing never invents a server, tool, capability, or finding.
|
|
137
138
|
|
|
138
|
-
The default view is intentionally concise: a
|
|
139
|
+
The default view is intentionally concise and written for people who do not need to know MCP terminology: a safety score, the three issues that most need attention, a plain-language explanation of what each assistant can do, and a short list of unfamiliar actions that need review. Technical service and action names remain visible as secondary details. Supporting issues and complete evidence remain in the local HTML report. The CLI writes that report without opening it; use `--open-report` when you explicitly want a browser window.
|
|
139
140
|
|
|
140
|
-
The
|
|
141
|
+
The guided inspection targets about 78 seconds from launch and walks through 14 evidence-backed phases. Each phase reveals a result derived from the audit—inventory availability, schema coverage, sensitive surfaces, direct authority, cross-server paths, role overlap, unknown tools, and final confidence—while keeping the terminal to one changing status line. It runs only in an interactive terminal. JSON output, piped output, CI, `--yes`, `--quick`, `--no-motion`, and `SLAUNT_NO_MOTION=1` remain immediate. The audit also refuses to start a configured stdio entry that resolves back to the `slaunt` CLI, preventing recursive audit windows. The experience deliberately avoids variable rewards, deceptive urgency, hidden defaults, shame, or an unsupported claim that a UI can medically “optimize dopamine.”
|
|
141
142
|
|
|
142
143
|
The design is informed by evidence that progress feedback can improve follow-through, autonomy-supportive framing is associated with more self-directed motivation, and risk messages work better when paired with an effective action. See the PubMed-indexed reviews on [progress feedback](https://pubmed.ncbi.nlm.nih.gov/33721605/), [autonomy support](https://pubmed.ncbi.nlm.nih.gov/30237648/), and [fear appeals with efficacy](https://pubmed.ncbi.nlm.nih.gov/26501228/). These findings come from other domains, so their application to developer security tooling is a product hypothesis, not a medical claim.
|
|
143
144
|
|
package/dist/audit/run.js
CHANGED
|
@@ -12,24 +12,24 @@ function sanitizeServer(server) {
|
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
14
|
export async function runAudit(options) {
|
|
15
|
-
options.onStage?.('discover', '
|
|
15
|
+
options.onStage?.('discover', 'Looking for Claude and Codex settings on this computer');
|
|
16
16
|
const discovery = options.demo
|
|
17
17
|
? demoDiscovery()
|
|
18
18
|
: options.discovery || await discoverConfigurations({ ...(options.customPaths ? { customPaths: options.customPaths } : {}) });
|
|
19
|
-
options.onStage?.('catalog', 'Loading
|
|
19
|
+
options.onStage?.('catalog', 'Loading Slaunt\'s reviewed safety guide; your local details stay here');
|
|
20
20
|
const catalog = await loadCatalog({ ...(options.offline || options.demo ? { offline: true } : {}) });
|
|
21
21
|
if (catalog.warning)
|
|
22
22
|
discovery.warnings.push(`Classification catalog: ${catalog.warning}`);
|
|
23
|
-
options.onStage?.('probe', '
|
|
23
|
+
options.onStage?.('probe', 'Reading each connected service\'s permission list without using any actions');
|
|
24
24
|
const probes = options.demo
|
|
25
25
|
? demoProbes()
|
|
26
26
|
: await probeServers(discovery.servers, {
|
|
27
27
|
allowServerStarts: options.allowServerStarts,
|
|
28
28
|
...(options.timeoutMs ? { timeoutMs: options.timeoutMs } : {}),
|
|
29
29
|
});
|
|
30
|
-
options.onStage?.('classify', 'Matching
|
|
30
|
+
options.onStage?.('classify', 'Matching each action to the kind of access it provides');
|
|
31
31
|
const tools = classifyTools(probes.flatMap((probe) => probe.tools), catalog.rules);
|
|
32
|
-
options.onStage?.('analyze', '
|
|
32
|
+
options.onStage?.('analyze', 'Checking how access can combine across assistants and services');
|
|
33
33
|
const findings = analyzeRisks(discovery.servers, tools);
|
|
34
34
|
const clientCount = discovery.clients.filter((client) => client.detected).length;
|
|
35
35
|
const serverCount = new Set(discovery.servers.map((server) => server.name.toLowerCase())).size;
|
package/dist/audit/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/audit/run.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAchE,SAAS,cAAc,CAAC,MAAoB;IAC1C,OAAO;QACL,GAAG,MAAM;QACT,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;QACzE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;KACjF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB;IACrD,OAAO,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAC;IACxF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI;QAC5B,CAAC,CAAC,aAAa,EAAE;QACjB,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,sBAAsB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAEhI,OAAO,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,uEAAuE,CAAC,CAAC;IACtG,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrG,IAAI,OAAO,CAAC,OAAO;QAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAE3F,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/audit/run.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -8,33 +8,33 @@ import { discoverConfigurations } from './config/discover.js';
|
|
|
8
8
|
import { installSlauntMcp } from './config/install.js';
|
|
9
9
|
import { isDynamicLauncher } from './mcp/introspect.js';
|
|
10
10
|
import { writeHtmlReport } from './report/html.js';
|
|
11
|
-
import { playAnalysisPath } from './tui/analysis-path.js';
|
|
11
|
+
import { DEFAULT_INSPECTION_WINDOW_MS, playAnalysisPath } from './tui/analysis-path.js';
|
|
12
12
|
import { renderAudit, renderHeader } from './tui/render.js';
|
|
13
|
-
const HELP = `Slaunt
|
|
13
|
+
const HELP = `Slaunt AI Assistant Safety Check
|
|
14
14
|
|
|
15
15
|
Usage:
|
|
16
16
|
npx slaunt audit [options]
|
|
17
17
|
|
|
18
18
|
Options:
|
|
19
|
-
--install-slaunt
|
|
20
|
-
--allow-server-starts Start
|
|
21
|
-
--no-server-starts
|
|
22
|
-
--config <path>
|
|
23
|
-
--offline Use the
|
|
24
|
-
--output <path>
|
|
25
|
-
--no-report Do not
|
|
26
|
-
--open-report Open the
|
|
27
|
-
--no-motion
|
|
19
|
+
--install-slaunt Add Slaunt to the detected AI assistant settings
|
|
20
|
+
--allow-server-starts Start local connections to read their permission lists
|
|
21
|
+
--no-server-starts Check settings only; do not start local connections
|
|
22
|
+
--config <path> Check an additional JSON or TOML settings file (repeatable)
|
|
23
|
+
--offline Use the built-in safety guide; do not download updates
|
|
24
|
+
--output <path> Detailed report path
|
|
25
|
+
--no-report Do not save the detailed report
|
|
26
|
+
--open-report Open the detailed report after the check
|
|
27
|
+
--quick, --no-motion Skip the guided 1-2 minute inspection sequence
|
|
28
28
|
--timeout <ms> Per-server probe timeout (1000-60000; default 8000)
|
|
29
|
-
--json Print a machine-readable
|
|
30
|
-
--yes Approve
|
|
31
|
-
--demo
|
|
29
|
+
--json Print a machine-readable result with private values removed
|
|
30
|
+
--yes Approve reading permission lists for automation
|
|
31
|
+
--demo Show a repeatable 43-action example check
|
|
32
32
|
-h, --help Show help
|
|
33
33
|
-v, --version Show version
|
|
34
34
|
|
|
35
35
|
Privacy:
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
Slaunt may download its reviewed safety guide. Your connected services,
|
|
37
|
+
available actions, settings, and results are analyzed here and are not uploaded.
|
|
38
38
|
`;
|
|
39
39
|
function valueAfter(args, index, option) {
|
|
40
40
|
const value = args[index + 1];
|
|
@@ -60,7 +60,7 @@ function parseArguments(args) {
|
|
|
60
60
|
options.openReport = true;
|
|
61
61
|
else if (argument === '--no-open')
|
|
62
62
|
options.openReport = false;
|
|
63
|
-
else if (argument === '--no-motion')
|
|
63
|
+
else if (argument === '--no-motion' || argument === '--quick')
|
|
64
64
|
options.noMotion = true;
|
|
65
65
|
else if (argument === '--no-report')
|
|
66
66
|
options.noReport = true;
|
|
@@ -89,7 +89,7 @@ function parseArguments(args) {
|
|
|
89
89
|
process.exit(0);
|
|
90
90
|
}
|
|
91
91
|
else if (argument === '--version' || argument === '-v') {
|
|
92
|
-
process.stdout.write('0.1.
|
|
92
|
+
process.stdout.write('0.1.4\n');
|
|
93
93
|
process.exit(0);
|
|
94
94
|
}
|
|
95
95
|
else if (argument === 'connect') {
|
|
@@ -125,6 +125,7 @@ async function main() {
|
|
|
125
125
|
throw new Error(`Unknown command: ${rawArgs[0]}`);
|
|
126
126
|
}
|
|
127
127
|
const options = parseArguments(rawArgs);
|
|
128
|
+
const inspectionStartedAt = Date.now();
|
|
128
129
|
const interactive = Boolean(process.stdin.isTTY && process.stdout.isTTY && !options.json);
|
|
129
130
|
const motionEnabled = interactive
|
|
130
131
|
&& !options.noMotion
|
|
@@ -150,11 +151,11 @@ async function main() {
|
|
|
150
151
|
if (interactive && options.allowServerStarts === undefined && stdioServers.length > 0 && !options.demo) {
|
|
151
152
|
const dynamicCount = stdioServers.filter(isDynamicLauncher).length;
|
|
152
153
|
allowServerStarts = await confirm({
|
|
153
|
-
message: `
|
|
154
|
+
message: `Allow Slaunt to briefly start ${stdioServers.length} local connection${stdioServers.length === 1 ? '' : 's'} so it can read what they allow? It will not use any actions.${dynamicCount ? ` ${dynamicCount} may launch package or container software.` : ''}`,
|
|
154
155
|
default: true,
|
|
155
156
|
});
|
|
156
157
|
}
|
|
157
|
-
const spinner = options.json ? undefined : ora({ text: '
|
|
158
|
+
const spinner = options.json ? undefined : ora({ text: 'Finding connected AI tools', color: 'magenta' }).start();
|
|
158
159
|
const result = await runAudit({
|
|
159
160
|
allowServerStarts: Boolean(allowServerStarts),
|
|
160
161
|
...(options.customPaths.length ? { customPaths: options.customPaths } : {}),
|
|
@@ -165,9 +166,13 @@ async function main() {
|
|
|
165
166
|
onStage: (_stage, detail) => { if (spinner)
|
|
166
167
|
spinner.text = detail; },
|
|
167
168
|
});
|
|
168
|
-
spinner?.succeed('
|
|
169
|
-
if (motionEnabled)
|
|
170
|
-
|
|
169
|
+
spinner?.succeed('Access information collected');
|
|
170
|
+
if (motionEnabled) {
|
|
171
|
+
const elapsedMs = Date.now() - inspectionStartedAt;
|
|
172
|
+
await playAnalysisPath(result, {
|
|
173
|
+
durationMs: Math.max(4_200, DEFAULT_INSPECTION_WINDOW_MS - elapsedMs),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
171
176
|
if (!options.noReport) {
|
|
172
177
|
const reportPath = await writeHtmlReport(result, options.output);
|
|
173
178
|
result.reportPath = reportPath;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/introspect.js
CHANGED
|
@@ -50,7 +50,7 @@ async function listAllTools(client, server) {
|
|
|
50
50
|
return tools;
|
|
51
51
|
}
|
|
52
52
|
async function connectAndList(server, transport) {
|
|
53
|
-
const client = new Client({ name: 'slaunt-audit', version: '0.1.
|
|
53
|
+
const client = new Client({ name: 'slaunt-audit', version: '0.1.4' }, { capabilities: {} });
|
|
54
54
|
try {
|
|
55
55
|
// The SDK's transport classes declare `sessionId?: string` while its shared
|
|
56
56
|
// Transport interface is emitted without exact-optional compatibility.
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
const severityLabels = {
|
|
2
|
+
critical: 'Urgent',
|
|
3
|
+
high: 'High priority',
|
|
4
|
+
medium: 'Review',
|
|
5
|
+
low: 'Low priority',
|
|
6
|
+
info: 'For your information',
|
|
7
|
+
};
|
|
8
|
+
const capabilityLabels = {
|
|
9
|
+
'read-data': 'Read data',
|
|
10
|
+
'write-data': 'Change data',
|
|
11
|
+
'read-files': 'Read files',
|
|
12
|
+
'write-files': 'Change files',
|
|
13
|
+
'delete-data': 'Delete data',
|
|
14
|
+
'execute-code': 'Run code',
|
|
15
|
+
'execute-shell': 'Run commands',
|
|
16
|
+
'read-secrets': 'Read saved credentials',
|
|
17
|
+
'manage-auth': 'Manage sign-in',
|
|
18
|
+
'network-access': 'Connect to the internet',
|
|
19
|
+
'deploy-production': 'Publish live changes',
|
|
20
|
+
'edit-code': 'Edit code',
|
|
21
|
+
'create-pull-request': 'Propose code changes',
|
|
22
|
+
'merge-pull-request': 'Approve and merge code',
|
|
23
|
+
'administer-system': 'Manage system settings',
|
|
24
|
+
'control-browser': 'Control a browser',
|
|
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 publish changes to a live service without approval`,
|
|
49
|
+
why: 'This could change what customers see before a person has reviewed it.',
|
|
50
|
+
recommendation: 'Require a person to approve live releases and limit which environments this assistant 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 combine saved credentials with command access`,
|
|
58
|
+
why: 'Together, these permissions could expose or misuse passwords, tokens, or other credentials.',
|
|
59
|
+
recommendation: 'Keep credential access separate from command access, or require approval before either can be used.',
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (/share broad GitHub permissions/i.test(title)) {
|
|
63
|
+
return {
|
|
64
|
+
label,
|
|
65
|
+
title: 'Multiple AI assistants share powerful GitHub access',
|
|
66
|
+
why: 'Shared access makes it harder to control what each assistant can change or to tell which one made a change.',
|
|
67
|
+
recommendation: 'Give each assistant its own GitHub access, limited to the work it needs to do.',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (/cleartext HTTP/i.test(title)) {
|
|
71
|
+
const assistant = plainClient(item.clients[0] || 'codex');
|
|
72
|
+
return {
|
|
73
|
+
label,
|
|
74
|
+
title: `${assistant} connects to a service without encryption`,
|
|
75
|
+
why: 'Someone on the network could read or change information sent through this connection.',
|
|
76
|
+
recommendation: 'Use a secure HTTPS connection with certificate checking before enabling this service.',
|
|
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 a connection address that cannot be checked safely`,
|
|
84
|
+
why: 'Slaunt cannot reliably determine where this connection sends information.',
|
|
85
|
+
recommendation: 'Replace it with a reviewed HTTPS address.',
|
|
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 a credential directly in its settings`,
|
|
93
|
+
why: 'Other programs, backups, or people with access to this computer may be able to read it.',
|
|
94
|
+
recommendation: 'Move the credential to a protected environment variable or the operating system credential store.',
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
if (/unpinned package at startup/i.test(title)) {
|
|
98
|
+
return {
|
|
99
|
+
label,
|
|
100
|
+
title: 'A connected service can change when it starts',
|
|
101
|
+
why: 'It downloads a package without locking it to one reviewed version.',
|
|
102
|
+
recommendation: 'Lock the package to an exact reviewed version.',
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
if (/unclassified tools appear state-changing/i.test(title)) {
|
|
106
|
+
return {
|
|
107
|
+
label,
|
|
108
|
+
title: 'Some unfamiliar actions may make changes',
|
|
109
|
+
why: 'Their names suggest they can run jobs, change data, or use administrator access, but Slaunt does not recognize them yet.',
|
|
110
|
+
recommendation: 'Have a person review these actions before leaving them available to an AI assistant.',
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
label,
|
|
115
|
+
title: title.replaceAll('MCP', 'connected').replaceAll('agent', 'AI assistant'),
|
|
116
|
+
why: item.why,
|
|
117
|
+
recommendation: item.recommendation,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=plain-language.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plain-language.js","sourceRoot":"","sources":["../../src/presentation/plain-language.ts"],"names":[],"mappings":"AASA,MAAM,cAAc,GAA6B;IAC/C,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,cAAc;IACnB,IAAI,EAAE,sBAAsB;CAC7B,CAAC;AAEF,MAAM,gBAAgB,GAA+B;IACnD,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,aAAa;IAC3B,YAAY,EAAE,YAAY;IAC1B,aAAa,EAAE,cAAc;IAC7B,aAAa,EAAE,aAAa;IAC5B,cAAc,EAAE,UAAU;IAC1B,eAAe,EAAE,cAAc;IAC/B,cAAc,EAAE,wBAAwB;IACxC,aAAa,EAAE,gBAAgB;IAC/B,gBAAgB,EAAE,yBAAyB;IAC3C,mBAAmB,EAAE,sBAAsB;IAC3C,WAAW,EAAE,WAAW;IACxB,qBAAqB,EAAE,sBAAsB;IAC7C,oBAAoB,EAAE,wBAAwB;IAC9C,mBAAmB,EAAE,wBAAwB;IAC7C,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,eAAe;CAChC,CAAC;AAEF,MAAM,YAAY,GAA6B;IAC7C,aAAa,EAAE,aAAa;IAC5B,gBAAgB,EAAE,gBAAgB;IAClC,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,UAAsB;IACpD,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAgB;IAC1C,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAEzB,IAAI,+CAA+C,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;QAChE,OAAO;YACL,KAAK;YACL,KAAK,EAAE,GAAG,SAAS,yDAAyD;YAC5E,GAAG,EAAE,uEAAuE;YAC5E,cAAc,EAAE,mGAAmG;SACpH,CAAC;IACJ,CAAC;IAED,IAAI,4CAA4C,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;QAC1D,OAAO;YACL,KAAK;YACL,KAAK,EAAE,GAAG,SAAS,oDAAoD;YACvE,GAAG,EAAE,6FAA6F;YAClG,cAAc,EAAE,qGAAqG;SACtH,CAAC;IACJ,CAAC;IAED,IAAI,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO;YACL,KAAK;YACL,KAAK,EAAE,qDAAqD;YAC5D,GAAG,EAAE,6GAA6G;YAClH,cAAc,EAAE,gFAAgF;SACjG,CAAC;IACJ,CAAC;IAED,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;QAC1D,OAAO;YACL,KAAK;YACL,KAAK,EAAE,GAAG,SAAS,2CAA2C;YAC9D,GAAG,EAAE,uFAAuF;YAC5F,cAAc,EAAE,uFAAuF;SACxG,CAAC;IACJ,CAAC;IAED,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;QAC1D,OAAO;YACL,KAAK;YACL,KAAK,EAAE,GAAG,SAAS,yDAAyD;YAC5E,GAAG,EAAE,2EAA2E;YAChF,cAAc,EAAE,2CAA2C;SAC5D,CAAC;IACJ,CAAC;IAED,IAAI,qDAAqD,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;QAC1D,OAAO;YACL,KAAK;YACL,KAAK,EAAE,GAAG,SAAS,+CAA+C;YAClE,GAAG,EAAE,yFAAyF;YAC9F,cAAc,EAAE,mGAAmG;SACpH,CAAC;IACJ,CAAC;IAED,IAAI,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO;YACL,KAAK;YACL,KAAK,EAAE,+CAA+C;YACtD,GAAG,EAAE,oEAAoE;YACzE,cAAc,EAAE,gDAAgD;SACjE,CAAC;IACJ,CAAC;IAED,IAAI,2CAA2C,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO;YACL,KAAK;YACL,KAAK,EAAE,0CAA0C;YACjD,GAAG,EAAE,0HAA0H;YAC/H,cAAc,EAAE,sFAAsF;SACvG,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK;QACL,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC;QAC/E,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,cAAc,EAAE,IAAI,CAAC,cAAc;KACpC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAyB/C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAwC5D;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B/F"}
|
package/dist/report/html.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { randomBytes } from 'node:crypto';
|
|
2
2
|
import { access, link, mkdir, unlink, writeFile } from 'node:fs/promises';
|
|
3
3
|
import { dirname, resolve } from 'node:path';
|
|
4
|
+
import { plainCapability, plainClient, plainFinding } from '../presentation/plain-language.js';
|
|
4
5
|
function escapeHtml(value) {
|
|
5
6
|
return String(value)
|
|
6
7
|
.replaceAll('&', '&')
|
|
@@ -9,17 +10,6 @@ function escapeHtml(value) {
|
|
|
9
10
|
.replaceAll('"', '"')
|
|
10
11
|
.replaceAll("'", ''');
|
|
11
12
|
}
|
|
12
|
-
const severityLabels = {
|
|
13
|
-
critical: 'Critical', high: 'High', medium: 'Medium', low: 'Low', info: 'Info',
|
|
14
|
-
};
|
|
15
|
-
const capabilityLabels = {
|
|
16
|
-
'read-data': 'Read data', 'write-data': 'Write data', 'read-files': 'Read files',
|
|
17
|
-
'write-files': 'Write files', 'delete-data': 'Delete data', 'execute-code': 'Execute code',
|
|
18
|
-
'execute-shell': 'Execute commands', 'read-secrets': 'Read credentials', 'manage-auth': 'Manage identity',
|
|
19
|
-
'network-access': 'Access network', 'deploy-production': 'Deploy production', 'edit-code': 'Edit code',
|
|
20
|
-
'create-pull-request': 'Create pull requests', 'merge-pull-request': 'Merge pull requests',
|
|
21
|
-
'administer-system': 'Administer systems', 'control-browser': 'Control browser', 'send-message': 'Send messages',
|
|
22
|
-
};
|
|
23
13
|
function accessOverview(result) {
|
|
24
14
|
return result.discovery.clients.filter((client) => client.detected).map((client) => {
|
|
25
15
|
const servers = result.discovery.servers.filter((server) => server.client === client.id);
|
|
@@ -27,41 +17,49 @@ function accessOverview(result) {
|
|
|
27
17
|
const capabilities = [...new Set(result.tools
|
|
28
18
|
.filter((tool) => tool.serverId === server.id)
|
|
29
19
|
.flatMap((tool) => tool.classification.capabilities))];
|
|
30
|
-
return `<tr><td>${escapeHtml(server.name)}</td><td>${escapeHtml(capabilities.map(
|
|
20
|
+
return `<tr><td>${escapeHtml(server.name)}</td><td>${escapeHtml(capabilities.map(plainCapability).join(', ') || 'Permissions could not be read')}</td></tr>`;
|
|
31
21
|
}).join('');
|
|
32
22
|
return `<section class="client"><h3>${escapeHtml(client.label)}</h3><table><tbody>${rows}</tbody></table></section>`;
|
|
33
23
|
}).join('');
|
|
34
24
|
}
|
|
35
25
|
export function renderHtmlReport(result) {
|
|
36
26
|
const summary = result.summary;
|
|
37
|
-
const findings = result.findings.map((item) =>
|
|
27
|
+
const findings = result.findings.map((item) => {
|
|
28
|
+
const copy = plainFinding(item);
|
|
29
|
+
const assistants = item.clients.map(plainClient).join(', ');
|
|
30
|
+
return `
|
|
38
31
|
<article class="finding ${escapeHtml(item.severity)}">
|
|
39
|
-
<div class="severity">${
|
|
40
|
-
<h3>${escapeHtml(
|
|
41
|
-
${
|
|
42
|
-
${item.
|
|
43
|
-
|
|
44
|
-
<p><strong>
|
|
45
|
-
|
|
32
|
+
<div class="severity">${escapeHtml(copy.label)}</div>
|
|
33
|
+
<h3>${escapeHtml(copy.title)}</h3>
|
|
34
|
+
${assistants ? `<p><strong>AI assistant:</strong> ${escapeHtml(assistants)}</p>` : ''}
|
|
35
|
+
${item.serverNames.length ? `<p><strong>Connected service:</strong> ${escapeHtml(item.serverNames.join(', '))}</p>` : ''}
|
|
36
|
+
${item.toolNames.length ? `<p><strong>Technical action name:</strong> ${escapeHtml(item.toolNames.join(', '))}</p>` : ''}
|
|
37
|
+
<p><strong>Why this matters:</strong> ${escapeHtml(copy.why)}</p>
|
|
38
|
+
<p><strong>What you can do:</strong> ${escapeHtml(copy.recommendation)}</p>
|
|
39
|
+
</article>`;
|
|
40
|
+
}).join('');
|
|
46
41
|
const unknown = result.tools.filter((tool) => tool.classification.source === 'unknown');
|
|
47
|
-
const
|
|
42
|
+
const unavailable = result.probes.filter((probe) => probe.status !== 'ok').length;
|
|
43
|
+
const scoreAvailable = summary.tools > 0 || unavailable === 0;
|
|
44
|
+
const scoreClass = !scoreAvailable ? 'warn' : summary.postureScore >= 80 ? 'good' : summary.postureScore >= 55 ? 'warn' : 'bad';
|
|
45
|
+
const scoreValue = scoreAvailable ? summary.postureScore : 0;
|
|
48
46
|
return `<!doctype html>
|
|
49
47
|
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
|
50
48
|
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; style-src 'unsafe-inline'; img-src data:">
|
|
51
|
-
<title>Slaunt
|
|
49
|
+
<title>Slaunt AI Assistant Safety Check</title><style>
|
|
52
50
|
: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}}
|
|
53
51
|
</style></head><body><main>
|
|
54
|
-
<header><div><div class="eyebrow">Slaunt
|
|
52
|
+
<header><div><div class="eyebrow">Slaunt safety check</div><h1>See what your AI assistants can do.</h1><p class="sub">Slaunt reviewed the actions available to Claude and Codex on this computer. It did not use those actions, and no audit payload was uploaded.</p></div><div class="score ${scoreClass}" style="--score:${scoreValue}"><span>${scoreAvailable ? summary.postureScore : '?'}<small>${scoreAvailable ? 'safety score' : 'not enough data'}</small></span></div></header>
|
|
55
53
|
<section class="metrics">
|
|
56
|
-
<div class="metric"><b>${summary.clientsDetected}</b><span>
|
|
54
|
+
<div class="metric"><b>${summary.clientsDetected}</b><span>AI assistants checked</span></div><div class="metric"><b>${summary.servers}</b><span>Connected services</span></div><div class="metric"><b>${summary.tools}</b><span>Available actions</span></div><div class="metric"><b>${summary.sensitiveCapabilities}</b><span>Sensitive actions</span></div><div class="metric"><b>${summary.highRiskFindings}</b><span>Urgent issues</span></div><div class="metric"><b>${summary.unclassified}</b><span>Need review</span></div>
|
|
57
55
|
</section>
|
|
58
|
-
<div class="notice">
|
|
59
|
-
<h2>
|
|
60
|
-
<h2>
|
|
61
|
-
<h2>
|
|
62
|
-
${unknown.length ? `<ul class="unknown">${unknown.map((tool) => `<li><code>${escapeHtml(tool.name)}</code> <span>(${escapeHtml(tool.serverName)})</span></li>`).join('')}</ul>` : '<p>
|
|
63
|
-
<section class="cta"><h2>
|
|
64
|
-
<p class="fine">
|
|
56
|
+
<div class="notice">Privacy: Slaunt used its <strong>${escapeHtml(result.privacy.catalogSource)}</strong> safety guide. Your connected services, available actions, settings, and results stayed on this computer.</div>
|
|
57
|
+
<h2>What needs your attention</h2>${findings || '<p>No urgent access issues were found in the information Slaunt could read.</p>'}
|
|
58
|
+
<h2>What each assistant can do</h2><div class="grid">${accessOverview(result)}</div>
|
|
59
|
+
<h2>Items Slaunt could not identify</h2><p>Slaunt understood <strong>${summary.classified}</strong> actions. <strong>${summary.unclassified}</strong> need a person to review them.</p>
|
|
60
|
+
${unknown.length ? `<ul class="unknown">${unknown.map((tool) => `<li><code>${escapeHtml(tool.name)}</code> <span>(${escapeHtml(tool.serverName)})</span></li>`).join('')}</ul>` : '<p>Slaunt recognized every available action.</p>'}
|
|
61
|
+
<section class="cta"><h2>Want ongoing protection?</h2><p>Add approval prompts, give each assistant only the access it needs, monitor changes, and turn off access remotely when necessary. You choose when to connect.</p><a href="https://slaunt.ai/setup">Set up Slaunt →</a></section>
|
|
62
|
+
<p class="fine">What this check covered: actions advertised by connected services. Slaunt did not use those actions or read prompts, files, credentials, other types of AI assistants, or past activity. Generated ${escapeHtml(result.generatedAt)}.</p>
|
|
65
63
|
</main></body></html>`;
|
|
66
64
|
}
|
|
67
65
|
export async function writeHtmlReport(result, outputPath) {
|
package/dist/report/html.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/report/html.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,8 +7,11 @@ export interface AnalysisBeat {
|
|
|
7
7
|
tone: AnalysisBeatTone;
|
|
8
8
|
}
|
|
9
9
|
export interface PlayAnalysisPathOptions {
|
|
10
|
+
durationMs?: number;
|
|
11
|
+
silent?: boolean;
|
|
10
12
|
sleep?: (milliseconds: number) => Promise<void>;
|
|
11
13
|
}
|
|
14
|
+
export declare const DEFAULT_INSPECTION_WINDOW_MS = 78000;
|
|
12
15
|
export declare function buildAnalysisPath(result: AuditResult): AnalysisBeat[];
|
|
13
16
|
export declare function playAnalysisPath(result: AuditResult, options?: PlayAnalysisPathOptions): Promise<void>;
|
|
14
17
|
//# sourceMappingURL=analysis-path.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-path.d.ts","sourceRoot":"","sources":["../../src/tui/analysis-path.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"analysis-path.d.ts","sourceRoot":"","sources":["../../src/tui/analysis-path.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAsBnD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,CAkIrE;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAkCf"}
|
|
@@ -1,44 +1,144 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import ora from 'ora';
|
|
3
|
+
export const DEFAULT_INSPECTION_WINDOW_MS = 78_000;
|
|
3
4
|
const wait = (milliseconds) => new Promise((resolve) => {
|
|
4
5
|
setTimeout(resolve, milliseconds);
|
|
5
6
|
});
|
|
6
7
|
function plural(value, singular, pluralForm = `${singular}s`) {
|
|
7
8
|
return value === 1 ? singular : pluralForm;
|
|
8
9
|
}
|
|
10
|
+
function formatRemaining(milliseconds) {
|
|
11
|
+
const seconds = Math.max(0, Math.ceil(milliseconds / 1_000));
|
|
12
|
+
if (seconds < 60)
|
|
13
|
+
return `~${seconds}s left`;
|
|
14
|
+
const minutes = Math.floor(seconds / 60);
|
|
15
|
+
const remainder = seconds % 60;
|
|
16
|
+
return `~${minutes}m ${remainder}s left`;
|
|
17
|
+
}
|
|
18
|
+
function hasAnyCapability(capabilities, expected) {
|
|
19
|
+
return capabilities.some((capability) => expected.has(capability));
|
|
20
|
+
}
|
|
9
21
|
export function buildAnalysisPath(result) {
|
|
10
22
|
const { summary } = result;
|
|
11
23
|
const criticalPaths = result.findings.filter((finding) => finding.severity === 'critical').length;
|
|
12
|
-
const crossServerChains = result.findings.filter((finding) =>
|
|
24
|
+
const crossServerChains = result.findings.filter((finding) => finding.serverNames.length > 1).length;
|
|
13
25
|
const sharedPermissionFindings = result.findings.filter((finding) => finding.clients.length > 1).length;
|
|
26
|
+
const successfulInventories = result.probes.filter((probe) => probe.status === 'ok').length;
|
|
27
|
+
const unavailableInventories = result.probes.filter((probe) => probe.status !== 'ok').length;
|
|
28
|
+
const transportKinds = new Set(result.discovery.servers.map((server) => server.transport)).size;
|
|
29
|
+
const configSources = new Set(result.discovery.clients.flatMap((client) => client.sources)).size;
|
|
30
|
+
const schemaBackedTools = result.tools.filter((tool) => tool.inputSchema && Object.keys(tool.inputSchema).length > 0).length;
|
|
31
|
+
const sensitiveServers = new Set(result.tools
|
|
32
|
+
.filter((tool) => tool.classification.sensitive)
|
|
33
|
+
.map((tool) => `${tool.client}:${tool.serverName}`)).size;
|
|
34
|
+
const stateChangingCapabilities = new Set([
|
|
35
|
+
'write-data', 'write-files', 'delete-data', 'execute-code', 'execute-shell',
|
|
36
|
+
'deploy-production', 'edit-code', 'merge-pull-request', 'administer-system', 'send-message',
|
|
37
|
+
]);
|
|
38
|
+
const stateChangingTools = result.tools.filter((tool) => (hasAnyCapability(tool.classification.capabilities, stateChangingCapabilities))).length;
|
|
39
|
+
const secretExecutionChains = result.findings.filter((finding) => (/secret|credential/i.test(`${finding.title} ${finding.access.join(' ')}`)
|
|
40
|
+
&& /shell|command|execute/i.test(`${finding.title} ${finding.access.join(' ')}`))).length;
|
|
41
|
+
const suspiciousUnknowns = result.tools.filter((tool) => (tool.classification.source === 'unknown'
|
|
42
|
+
&& /admin|execute|trigger|workflow|sync|deploy|delete/i.test(tool.name))).length;
|
|
43
|
+
const clientsWithSensitiveAccess = new Set(result.tools
|
|
44
|
+
.filter((tool) => tool.classification.sensitive)
|
|
45
|
+
.map((tool) => tool.client)).size;
|
|
46
|
+
const confidence = summary.tools > 0 ? Math.round((summary.classified / summary.tools) * 100) : 0;
|
|
47
|
+
const postureAvailable = summary.tools > 0;
|
|
14
48
|
return [
|
|
15
49
|
{
|
|
16
|
-
active:
|
|
17
|
-
complete:
|
|
18
|
-
delayMs:
|
|
50
|
+
active: 'Finding Claude and Codex settings on this computer',
|
|
51
|
+
complete: `${summary.clientsDetected} AI ${plural(summary.clientsDetected, 'assistant')} found in ${configSources} settings ${plural(configSources, 'file')}`,
|
|
52
|
+
delayMs: 4_800,
|
|
53
|
+
tone: 'success',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
active: 'Listing the services each assistant can reach',
|
|
57
|
+
complete: `${summary.servers} connected ${plural(summary.servers, 'service')} · ${transportKinds} connection ${plural(transportKinds, 'type')}`,
|
|
58
|
+
delayMs: 5_400,
|
|
59
|
+
tone: 'success',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
active: 'Checking what each connected service allows',
|
|
63
|
+
complete: `${successfulInventories} permission ${plural(successfulInventories, 'list')} available · ${unavailableInventories} unavailable`,
|
|
64
|
+
delayMs: 5_200,
|
|
65
|
+
tone: unavailableInventories > 0 ? 'warning' : 'success',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
active: `Reading the names and descriptions of ${summary.tools} available actions`,
|
|
69
|
+
complete: `${summary.tools} ${plural(summary.tools, 'action')} reviewed · ${schemaBackedTools} include usage details`,
|
|
70
|
+
delayMs: 5_200,
|
|
19
71
|
tone: 'success',
|
|
20
72
|
},
|
|
21
73
|
{
|
|
22
|
-
active: '
|
|
23
|
-
complete: `${
|
|
24
|
-
delayMs:
|
|
25
|
-
tone:
|
|
74
|
+
active: 'Matching each action to the kind of access it provides',
|
|
75
|
+
complete: `${summary.classified} understood · ${summary.unclassified} need a closer look · ${confidence}% covered`,
|
|
76
|
+
delayMs: 6_000,
|
|
77
|
+
tone: summary.unclassified > 0 ? 'warning' : 'success',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
active: 'Finding access to sensitive information and important changes',
|
|
81
|
+
complete: `${summary.sensitiveCapabilities} sensitive ${plural(summary.sensitiveCapabilities, 'action')} across ${sensitiveServers} service connections`,
|
|
82
|
+
delayMs: 5_200,
|
|
83
|
+
tone: summary.sensitiveCapabilities > 0 ? 'warning' : 'success',
|
|
26
84
|
},
|
|
27
85
|
{
|
|
28
|
-
active:
|
|
86
|
+
active: 'Checking which actions can change data or run commands',
|
|
87
|
+
complete: `${stateChangingTools} ${plural(stateChangingTools, 'action')} can make changes`,
|
|
88
|
+
delayMs: 5_800,
|
|
89
|
+
tone: stateChangingTools > 0 ? 'warning' : 'success',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
active: 'Looking for direct access to live systems or administrator controls',
|
|
93
|
+
complete: criticalPaths > 0
|
|
94
|
+
? `${criticalPaths} urgent ${plural(criticalPaths, 'issue')} found`
|
|
95
|
+
: 'No urgent direct access found',
|
|
96
|
+
delayMs: 5_000,
|
|
97
|
+
tone: criticalPaths > 0 ? 'warning' : 'success',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
active: 'Checking whether credentials and command access can be combined',
|
|
101
|
+
complete: secretExecutionChains > 0
|
|
102
|
+
? `${secretExecutionChains} risky ${plural(secretExecutionChains, 'combination')} found`
|
|
103
|
+
: 'Credentials and command access are kept separate',
|
|
104
|
+
delayMs: 6_200,
|
|
105
|
+
tone: secretExecutionChains > 0 ? 'warning' : 'success',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
active: 'Looking for permissions that become riskier when combined',
|
|
109
|
+
complete: crossServerChains > 0
|
|
110
|
+
? `${crossServerChains} risky ${plural(crossServerChains, 'combination')} across connected services`
|
|
111
|
+
: 'No risky combinations found across services',
|
|
112
|
+
delayMs: 6_400,
|
|
113
|
+
tone: crossServerChains > 0 ? 'warning' : 'success',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
active: `Comparing what each of the ${summary.clientsDetected} AI assistants can do`,
|
|
29
117
|
complete: sharedPermissionFindings > 0
|
|
30
|
-
?
|
|
31
|
-
: '
|
|
32
|
-
delayMs:
|
|
118
|
+
? `${sharedPermissionFindings} ${plural(sharedPermissionFindings, 'case')} of shared powerful access`
|
|
119
|
+
: 'The assistants do not share risky access',
|
|
120
|
+
delayMs: 5_200,
|
|
33
121
|
tone: sharedPermissionFindings > 0 ? 'warning' : 'success',
|
|
34
122
|
},
|
|
35
123
|
{
|
|
36
|
-
active: '
|
|
37
|
-
complete:
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
124
|
+
active: 'Checking whether each assistant has only the access it needs',
|
|
125
|
+
complete: `${clientsWithSensitiveAccess} AI ${plural(clientsWithSensitiveAccess, 'assistant')} have sensitive access`,
|
|
126
|
+
delayMs: 5_400,
|
|
127
|
+
tone: clientsWithSensitiveAccess > 1 ? 'warning' : 'success',
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
active: 'Setting aside unfamiliar actions for a person to review',
|
|
131
|
+
complete: `${summary.unclassified} unfamiliar · ${suspiciousUnknowns} may make changes`,
|
|
132
|
+
delayMs: 4_400,
|
|
133
|
+
tone: summary.unclassified > 0 ? 'warning' : 'success',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
active: 'Putting the most urgent issues first',
|
|
137
|
+
complete: postureAvailable
|
|
138
|
+
? `${summary.highRiskFindings} urgent ${plural(summary.highRiskFindings, 'issue')} · safety score ${summary.postureScore}/100 · ${confidence}% understood`
|
|
139
|
+
: 'Safety score unavailable · no action lists could be read',
|
|
140
|
+
delayMs: 7_800,
|
|
141
|
+
tone: !postureAvailable || summary.highRiskFindings + summary.unclassified > 0 ? 'warning' : 'success',
|
|
42
142
|
},
|
|
43
143
|
];
|
|
44
144
|
}
|
|
@@ -48,15 +148,29 @@ export async function playAnalysisPath(result, options = {}) {
|
|
|
48
148
|
const first = beats[0];
|
|
49
149
|
if (!first)
|
|
50
150
|
return;
|
|
151
|
+
const requestedDuration = Math.max(0, options.durationMs ?? DEFAULT_INSPECTION_WINDOW_MS);
|
|
152
|
+
const nominalDuration = beats.reduce((total, beat) => total + beat.delayMs, 0);
|
|
153
|
+
const scale = nominalDuration > 0 ? requestedDuration / nominalDuration : 0;
|
|
154
|
+
let remainingMs = requestedDuration;
|
|
51
155
|
const spinner = ora({
|
|
52
156
|
color: 'magenta',
|
|
157
|
+
...(options.silent !== undefined ? { isSilent: options.silent } : {}),
|
|
53
158
|
spinner: 'dots12',
|
|
54
159
|
text: first.active,
|
|
55
160
|
}).start();
|
|
56
|
-
for (const beat of beats) {
|
|
57
|
-
|
|
58
|
-
|
|
161
|
+
for (const [index, beat] of beats.entries()) {
|
|
162
|
+
const phaseDuration = beat.delayMs * scale;
|
|
163
|
+
const analysisDuration = Math.round(phaseDuration * 0.82);
|
|
164
|
+
const evidenceDuration = Math.max(0, Math.round(phaseDuration) - analysisDuration);
|
|
165
|
+
const position = chalk.gray(`${String(index + 1).padStart(2, '0')}/${beats.length}`);
|
|
166
|
+
spinner.text = `${position} ${beat.active} ${chalk.gray(`· ${formatRemaining(remainingMs)}`)}`;
|
|
167
|
+
await sleep(analysisDuration);
|
|
168
|
+
remainingMs = Math.max(0, remainingMs - analysisDuration);
|
|
169
|
+
const marker = beat.tone === 'warning' ? chalk.yellow('!') : chalk.green('✓');
|
|
170
|
+
spinner.text = `${position} ${marker} ${beat.complete}`;
|
|
171
|
+
await sleep(evidenceDuration);
|
|
172
|
+
remainingMs = Math.max(0, remainingMs - evidenceDuration);
|
|
59
173
|
}
|
|
60
|
-
spinner.succeed(`${chalk.bold('
|
|
174
|
+
spinner.succeed(`${chalk.bold('Safety check complete')} ${chalk.gray('·')} ${result.summary.highRiskFindings} urgent ${plural(result.summary.highRiskFindings, 'issue')} ${chalk.gray('·')} ${result.summary.unclassified} need review`);
|
|
61
175
|
}
|
|
62
176
|
//# sourceMappingURL=analysis-path.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-path.js","sourceRoot":"","sources":["../../src/tui/analysis-path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"analysis-path.js","sourceRoot":"","sources":["../../src/tui/analysis-path.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/tui/render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAiC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/tui/render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAiC,MAAM,aAAa,CAAC;AAkI9E,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAuEvD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
|
package/dist/tui/render.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { relative } from 'node:path';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
+
import { plainCapability, plainClient, plainFinding } from '../presentation/plain-language.js';
|
|
3
4
|
const severityColor = {
|
|
4
5
|
critical: chalk.red.bold,
|
|
5
6
|
high: chalk.hex('#f59e0b').bold,
|
|
@@ -8,23 +9,10 @@ const severityColor = {
|
|
|
8
9
|
info: chalk.gray,
|
|
9
10
|
};
|
|
10
11
|
const capabilityPriority = [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
['merge-pull-request', 'merge'],
|
|
16
|
-
['edit-code', 'edit'],
|
|
17
|
-
['write-files', 'file write'],
|
|
18
|
-
['delete-data', 'delete'],
|
|
19
|
-
['write-data', 'write'],
|
|
20
|
-
['read-files', 'file read'],
|
|
21
|
-
['manage-auth', 'identity'],
|
|
22
|
-
['control-browser', 'browser'],
|
|
23
|
-
['send-message', 'message'],
|
|
24
|
-
['network-access', 'network'],
|
|
25
|
-
['create-pull-request', 'pull requests'],
|
|
26
|
-
['execute-code', 'code'],
|
|
27
|
-
['read-data', 'read'],
|
|
12
|
+
'deploy-production', 'execute-shell', 'read-secrets', 'administer-system',
|
|
13
|
+
'merge-pull-request', 'edit-code', 'write-files', 'delete-data', 'write-data',
|
|
14
|
+
'read-files', 'manage-auth', 'control-browser', 'send-message', 'network-access',
|
|
15
|
+
'create-pull-request', 'execute-code', 'read-data',
|
|
28
16
|
];
|
|
29
17
|
function width() {
|
|
30
18
|
return Math.max(36, Math.min(82, process.stdout.columns || 78));
|
|
@@ -58,40 +46,50 @@ function section(title) {
|
|
|
58
46
|
}
|
|
59
47
|
function scoreLabel(score) {
|
|
60
48
|
if (score >= 80)
|
|
61
|
-
return { color: chalk.green, label: '
|
|
49
|
+
return { color: chalk.green, label: 'Looks good' };
|
|
62
50
|
if (score >= 55)
|
|
63
|
-
return { color: chalk.yellow, label: '
|
|
64
|
-
return { color: chalk.red, label: '
|
|
51
|
+
return { color: chalk.yellow, label: 'Review recommended' };
|
|
52
|
+
return { color: chalk.red, label: 'Needs attention' };
|
|
65
53
|
}
|
|
66
54
|
function postureLine(result, unavailable) {
|
|
67
55
|
const { summary } = result;
|
|
68
56
|
if (summary.tools === 0 && unavailable > 0) {
|
|
69
|
-
return `${chalk.yellow.bold('
|
|
57
|
+
return `${chalk.yellow.bold('Safety score unavailable')} ${chalk.gray('· some services could not be fully checked')}`;
|
|
70
58
|
}
|
|
71
59
|
const score = scoreLabel(summary.postureScore);
|
|
72
|
-
const suffix = unavailable > 0 ? '
|
|
73
|
-
return `${score.color(chalk.bold(`${summary.postureScore}/100`))}
|
|
60
|
+
const suffix = unavailable > 0 ? 'Some services could not be fully checked' : score.label;
|
|
61
|
+
return `${score.color(chalk.bold(`${summary.postureScore}/100 safety score`))} ${chalk.gray(`· ${suffix}`)}`;
|
|
62
|
+
}
|
|
63
|
+
function naturalList(values) {
|
|
64
|
+
if (values.length <= 1)
|
|
65
|
+
return values[0] || '';
|
|
66
|
+
if (values.length === 2)
|
|
67
|
+
return `${values[0]} and ${values[1]}`;
|
|
68
|
+
return `${values.slice(0, -1).join(', ')}, and ${values.at(-1)}`;
|
|
74
69
|
}
|
|
75
70
|
function findingLines(item) {
|
|
76
71
|
const icon = item.severity === 'critical' ? '◆' : '▲';
|
|
77
72
|
const color = severityColor[item.severity];
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
73
|
+
const copy = plainFinding(item);
|
|
74
|
+
const assistants = naturalList(item.clients.map(plainClient));
|
|
75
|
+
const services = naturalList(item.serverNames);
|
|
76
|
+
const where = [assistants, services].filter(Boolean).join(' → ');
|
|
77
|
+
const actionLabel = item.toolNames.length === 1 ? 'Action name' : 'Action names';
|
|
81
78
|
return [
|
|
82
79
|
'',
|
|
83
|
-
...wrap(`${icon} ${
|
|
84
|
-
...(
|
|
85
|
-
...wrap(item.
|
|
86
|
-
...wrap(`
|
|
80
|
+
...wrap(`${icon} ${copy.label.toUpperCase()} ${copy.title}`),
|
|
81
|
+
...(where ? wrap(`Where: ${where}`, ' ').map((line) => chalk.gray(line)) : []),
|
|
82
|
+
...(item.toolNames.length ? wrap(`${actionLabel}: ${item.toolNames.join(', ')}`, ' ').map((line) => chalk.gray(line)) : []),
|
|
83
|
+
...wrap(`Why this matters: ${copy.why}`, ' '),
|
|
84
|
+
...wrap(`What you can do: ${copy.recommendation}`, ' ').map((line) => color(line)),
|
|
87
85
|
];
|
|
88
86
|
}
|
|
89
87
|
function shortCapabilities(capabilities) {
|
|
90
88
|
const set = new Set(capabilities);
|
|
91
89
|
const labels = capabilityPriority
|
|
92
|
-
.filter((
|
|
93
|
-
.map(
|
|
94
|
-
return [...new Set(labels)].slice(0, 3).join('
|
|
90
|
+
.filter((capability) => set.has(capability))
|
|
91
|
+
.map(plainCapability);
|
|
92
|
+
return [...new Set(labels)].slice(0, 3).join(', ') || 'Permissions could not be read';
|
|
95
93
|
}
|
|
96
94
|
function accessLines(result) {
|
|
97
95
|
const lines = [];
|
|
@@ -104,7 +102,7 @@ function accessLines(result) {
|
|
|
104
102
|
.filter((item) => item.client === client.id)
|
|
105
103
|
.sort((left, right) => highestRisk(right.id) - highestRisk(left.id));
|
|
106
104
|
if (servers.length === 0) {
|
|
107
|
-
lines.push(chalk.gray(' No
|
|
105
|
+
lines.push(chalk.gray(' No connected services found'));
|
|
108
106
|
continue;
|
|
109
107
|
}
|
|
110
108
|
for (const server of servers.slice(0, 6)) {
|
|
@@ -115,7 +113,7 @@ function accessLines(result) {
|
|
|
115
113
|
lines.push(` ${chalk.hex('#a78bfa')(name)}${shortCapabilities(capabilities)}`);
|
|
116
114
|
}
|
|
117
115
|
if (servers.length > 6)
|
|
118
|
-
lines.push(chalk.gray(` + ${servers.length - 6} more in the
|
|
116
|
+
lines.push(chalk.gray(` + ${servers.length - 6} more in the detailed report`));
|
|
119
117
|
}
|
|
120
118
|
return lines;
|
|
121
119
|
}
|
|
@@ -131,45 +129,46 @@ export function renderAudit(result) {
|
|
|
131
129
|
const failedProbes = result.probes.filter((probe) => probe.status !== 'ok');
|
|
132
130
|
const lines = [
|
|
133
131
|
'',
|
|
134
|
-
chalk.bold('
|
|
132
|
+
chalk.bold('Safety check complete'),
|
|
135
133
|
postureLine(result, failedProbes.length),
|
|
136
134
|
'',
|
|
137
|
-
`${chalk.bold(String(summary.clientsDetected))} ${plural(summary.clientsDetected, '
|
|
138
|
-
`${chalk.bold(String(summary.
|
|
139
|
-
|
|
135
|
+
`${chalk.bold(String(summary.clientsDetected))} AI ${plural(summary.clientsDetected, 'assistant')} checked ${chalk.gray('·')} ${chalk.bold(String(summary.servers))} connected ${plural(summary.servers, 'service')}`,
|
|
136
|
+
`${chalk.bold(String(summary.tools))} available ${plural(summary.tools, 'action')} reviewed`,
|
|
137
|
+
`${chalk.bold(String(summary.sensitiveCapabilities))} can access sensitive information or make changes ${chalk.gray('·')} ${chalk.bold(String(summary.unclassified))} need a closer look`,
|
|
138
|
+
...section('What needs your attention'),
|
|
140
139
|
];
|
|
141
140
|
if (priority.length) {
|
|
142
141
|
for (const finding of priority.slice(0, 3))
|
|
143
142
|
lines.push(...findingLines(finding));
|
|
144
143
|
}
|
|
145
144
|
else if (failedProbes.length > 0) {
|
|
146
|
-
lines.push('', chalk.yellow('No
|
|
145
|
+
lines.push('', chalk.yellow('No urgent issues were found in the permissions Slaunt could read.'), chalk.gray('Some services could not be checked, so this result is incomplete.'));
|
|
147
146
|
}
|
|
148
147
|
else {
|
|
149
|
-
lines.push('', chalk.green('✓ No
|
|
148
|
+
lines.push('', chalk.green('✓ No urgent or high-priority access issues found.'));
|
|
150
149
|
}
|
|
151
150
|
if (otherFindings > 0) {
|
|
152
|
-
lines.push('', chalk.gray(`${otherFindings}
|
|
151
|
+
lines.push('', chalk.gray(`${otherFindings} lower-priority ${plural(otherFindings, 'item')} saved in the detailed report.`));
|
|
153
152
|
}
|
|
154
|
-
lines.push(...section('
|
|
153
|
+
lines.push(...section('What each assistant can do'), ...accessLines(result));
|
|
155
154
|
if (unknown.length) {
|
|
156
155
|
const visibleUnknown = unknown.slice(0, 8);
|
|
157
|
-
lines.push(...section(`
|
|
158
|
-
? [chalk.gray(` + ${unknown.length - visibleUnknown.length} more in the
|
|
159
|
-
: []), ...wrap('
|
|
156
|
+
lines.push(...section(`Items Slaunt could not identify (${unknown.length})`), '', ...wrap(visibleUnknown.map((tool) => tool.name).join(' · '), ' '), ...(unknown.length > visibleUnknown.length
|
|
157
|
+
? [chalk.gray(` + ${unknown.length - visibleUnknown.length} more in the detailed report`)]
|
|
158
|
+
: []), ...wrap('These action names are not in Slaunt\'s reviewed guide yet. Until a person checks them, Slaunt treats them as possibly sensitive.', ' ').map((line) => chalk.gray(line)));
|
|
160
159
|
}
|
|
161
160
|
if (failedProbes.length) {
|
|
162
|
-
lines.push(...section(`
|
|
161
|
+
lines.push(...section(`Services that could not be fully checked (${failedProbes.length})`));
|
|
163
162
|
for (const probe of failedProbes.slice(0, 4)) {
|
|
164
163
|
const server = result.discovery.servers.find((item) => item.id === probe.serverId);
|
|
165
164
|
lines.push(...wrap(`${server?.clientLabel || 'Client'} / ${server?.name || probe.serverId}: ${probe.message || probe.status}`, ' '));
|
|
166
165
|
}
|
|
167
166
|
if (failedProbes.length > 4)
|
|
168
|
-
lines.push(chalk.gray(` + ${failedProbes.length - 4} more in the
|
|
167
|
+
lines.push(chalk.gray(` + ${failedProbes.length - 4} more in the detailed report`));
|
|
169
168
|
}
|
|
170
|
-
lines.push(...section('
|
|
169
|
+
lines.push(...section('Your detailed report'), ...(result.reportPath ? ['', chalk.cyan(reportPath(result.reportPath))] : ['', chalk.gray('No detailed report was saved for this run.')]), '', ...wrap('What this check covered: Slaunt reviewed the actions advertised by connected services. It did not use those actions or read your prompts, files, or credentials.').map((line) => chalk.gray(line)), ...section('Want ongoing protection?'), '', ...wrap('Add approval prompts and give each assistant only the access it needs:'), chalk.cyan.underline('https://slaunt.ai/setup'));
|
|
171
170
|
if (result.discovery.warnings.length) {
|
|
172
|
-
lines.push(...section('
|
|
171
|
+
lines.push(...section('Other notes'));
|
|
173
172
|
for (const warning of result.discovery.warnings.slice(0, 3))
|
|
174
173
|
lines.push(...wrap(warning, ' ').map((line) => chalk.gray(line)));
|
|
175
174
|
if (result.discovery.warnings.length > 3)
|
|
@@ -178,6 +177,6 @@ export function renderAudit(result) {
|
|
|
178
177
|
return lines.join('\n');
|
|
179
178
|
}
|
|
180
179
|
export function renderHeader() {
|
|
181
|
-
return `${chalk.bold.hex('#a78bfa')('SLAUNT')} ${chalk.gray('·
|
|
180
|
+
return `${chalk.bold.hex('#a78bfa')('SLAUNT')} ${chalk.gray('· AI assistant safety check')}\n${chalk.gray('Checks access on this computer · nothing from this check is uploaded')}`;
|
|
182
181
|
}
|
|
183
182
|
//# sourceMappingURL=render.js.map
|
package/dist/tui/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tui/render.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tui/render.ts"],"names":[],"mappings":"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"}
|