slaunt 0.1.2 → 0.1.3
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 +2 -1
- package/dist/cli.js +11 -6
- package/dist/cli.js.map +1 -1
- package/dist/mcp/introspect.js +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 +134 -20
- package/dist/tui/analysis-path.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.
|
|
@@ -137,7 +138,7 @@ The terminal flow uses immediate collection feedback followed by a short, delibe
|
|
|
137
138
|
|
|
138
139
|
The default view is intentionally concise: a posture summary, the three highest-priority findings, a compact client access map, and the unclassified-tool queue. Supporting findings 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/cli.js
CHANGED
|
@@ -8,7 +8,7 @@ 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
13
|
const HELP = `Slaunt Agent Access Audit
|
|
14
14
|
|
|
@@ -24,7 +24,7 @@ Options:
|
|
|
24
24
|
--output <path> HTML report path
|
|
25
25
|
--no-report Do not write the local HTML report
|
|
26
26
|
--open-report Open the local HTML report after the audit
|
|
27
|
-
--no-motion
|
|
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
29
|
--json Print a machine-readable, redacted JSON result
|
|
30
30
|
--yes Approve read-only tools/list startup for automation
|
|
@@ -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.3\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
|
|
@@ -166,8 +167,12 @@ async function main() {
|
|
|
166
167
|
spinner.text = detail; },
|
|
167
168
|
});
|
|
168
169
|
spinner?.succeed('Evidence collected');
|
|
169
|
-
if (motionEnabled)
|
|
170
|
-
|
|
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.3' }, { 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.
|
|
@@ -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: 'Mapping Claude and Codex configuration boundaries',
|
|
51
|
+
complete: `${summary.clientsDetected} ${plural(summary.clientsDetected, 'client')} · ${configSources} configuration ${plural(configSources, 'source')}`,
|
|
52
|
+
delayMs: 4_800,
|
|
53
|
+
tone: 'success',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
active: 'Normalizing MCP server identities and transports',
|
|
57
|
+
complete: `${summary.servers} unique ${plural(summary.servers, 'server')} · ${transportKinds} transport ${plural(transportKinds, 'type')}`,
|
|
58
|
+
delayMs: 5_400,
|
|
59
|
+
tone: 'success',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
active: 'Verifying declared tool inventories without invoking tools',
|
|
63
|
+
complete: `${successfulInventories} inventories available · ${unavailableInventories} unavailable`,
|
|
64
|
+
delayMs: 5_200,
|
|
65
|
+
tone: unavailableInventories > 0 ? 'warning' : 'success',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
active: `Fingerprinting ${summary.tools} tool names, descriptions, and schemas`,
|
|
69
|
+
complete: `${summary.tools} tool signatures indexed · ${schemaBackedTools} include schemas`,
|
|
70
|
+
delayMs: 5_200,
|
|
19
71
|
tone: 'success',
|
|
20
72
|
},
|
|
21
73
|
{
|
|
22
|
-
active: '
|
|
23
|
-
complete: `${
|
|
24
|
-
delayMs:
|
|
25
|
-
tone:
|
|
74
|
+
active: 'Semantically matching tool intent against trusted classifications',
|
|
75
|
+
complete: `${summary.classified} recognized · ${summary.unclassified} held for review · ${confidence}% coverage`,
|
|
76
|
+
delayMs: 6_000,
|
|
77
|
+
tone: summary.unclassified > 0 ? 'warning' : 'success',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
active: 'Mapping sensitive capabilities to their owning servers',
|
|
81
|
+
complete: `${summary.sensitiveCapabilities} sensitive ${plural(summary.sensitiveCapabilities, 'tool')} across ${sensitiveServers} server bindings`,
|
|
82
|
+
delayMs: 5_200,
|
|
83
|
+
tone: summary.sensitiveCapabilities > 0 ? 'warning' : 'success',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
active: 'Tracing state-changing write, execution, and deployment surfaces',
|
|
87
|
+
complete: `${stateChangingTools} state-changing ${plural(stateChangingTools, 'tool')} exposed`,
|
|
88
|
+
delayMs: 5_800,
|
|
89
|
+
tone: stateChangingTools > 0 ? 'warning' : 'success',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
active: 'Checking for direct production and administrative authority',
|
|
93
|
+
complete: criticalPaths > 0
|
|
94
|
+
? `${criticalPaths} critical direct ${plural(criticalPaths, 'path')} found`
|
|
95
|
+
: 'No critical direct authority found',
|
|
96
|
+
delayMs: 5_000,
|
|
97
|
+
tone: criticalPaths > 0 ? 'warning' : 'success',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
active: 'Testing credential access against command-execution reachability',
|
|
101
|
+
complete: secretExecutionChains > 0
|
|
102
|
+
? `${secretExecutionChains} credential-to-execution ${plural(secretExecutionChains, 'chain')} found`
|
|
103
|
+
: 'No credential-to-execution chain found',
|
|
104
|
+
delayMs: 6_200,
|
|
105
|
+
tone: secretExecutionChains > 0 ? 'warning' : 'success',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
active: 'Searching cross-server paths that amplify agent authority',
|
|
109
|
+
complete: crossServerChains > 0
|
|
110
|
+
? `${crossServerChains} cross-server ${plural(crossServerChains, 'path')} contributes to risk`
|
|
111
|
+
: 'No cross-server amplification path found',
|
|
112
|
+
delayMs: 6_400,
|
|
113
|
+
tone: crossServerChains > 0 ? 'warning' : 'success',
|
|
26
114
|
},
|
|
27
115
|
{
|
|
28
116
|
active: `Comparing permissions across ${summary.clientsDetected} agent clients`,
|
|
29
117
|
complete: sharedPermissionFindings > 0
|
|
30
|
-
?
|
|
118
|
+
? `${sharedPermissionFindings} shared-permission ${plural(sharedPermissionFindings, 'finding')}`
|
|
31
119
|
: 'No risky permission overlap found',
|
|
32
|
-
delayMs:
|
|
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: 'Testing least-privilege separation between agent roles',
|
|
125
|
+
complete: `${clientsWithSensitiveAccess} ${plural(clientsWithSensitiveAccess, 'client')} hold sensitive access`,
|
|
126
|
+
delayMs: 5_400,
|
|
127
|
+
tone: clientsWithSensitiveAccess > 1 ? 'warning' : 'success',
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
active: 'Isolating ambiguous tools for conservative review',
|
|
131
|
+
complete: `${summary.unclassified} unknown · ${suspiciousUnknowns} appear state-changing`,
|
|
132
|
+
delayMs: 4_400,
|
|
133
|
+
tone: summary.unclassified > 0 ? 'warning' : 'success',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
active: 'Ranking exploitability, blast radius, and classification confidence',
|
|
137
|
+
complete: postureAvailable
|
|
138
|
+
? `${summary.highRiskFindings} high-risk · posture ${summary.postureScore}/100 · coverage ${confidence}%`
|
|
139
|
+
: 'Posture unavailable · no tool definitions retrieved',
|
|
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('Inspection complete')} ${chalk.gray('·')} ${result.summary.highRiskFindings} high-risk ${chalk.gray('·')} ${result.summary.unclassified} unclassified`);
|
|
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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"}
|