@aimarket/warden 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/CHANGELOG.md +41 -5
  2. package/README-es.md +27 -9
  3. package/README-fr.md +28 -9
  4. package/README-ru.md +28 -9
  5. package/README-zh.md +23 -9
  6. package/README.md +27 -9
  7. package/dist/classifier.d.ts +50 -0
  8. package/dist/classifier.d.ts.map +1 -0
  9. package/dist/classifier.js +164 -0
  10. package/dist/classifier.js.map +1 -0
  11. package/dist/claude-hook.d.ts +53 -0
  12. package/dist/claude-hook.d.ts.map +1 -0
  13. package/dist/claude-hook.js +192 -0
  14. package/dist/claude-hook.js.map +1 -0
  15. package/dist/histor.d.ts +69 -0
  16. package/dist/histor.d.ts.map +1 -0
  17. package/dist/histor.js +82 -0
  18. package/dist/histor.js.map +1 -0
  19. package/dist/index.d.ts +1 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +1 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/jcs.d.ts +8 -0
  24. package/dist/jcs.d.ts.map +1 -1
  25. package/dist/jcs.js +25 -5
  26. package/dist/jcs.js.map +1 -1
  27. package/dist/mcp-client.d.ts +58 -0
  28. package/dist/mcp-client.d.ts.map +1 -0
  29. package/dist/mcp-client.js +451 -0
  30. package/dist/mcp-client.js.map +1 -0
  31. package/dist/mcp-rpc.js +1 -1
  32. package/dist/mcp-server.js +8 -0
  33. package/dist/mcp-server.js.map +1 -1
  34. package/dist/mcp-tools.d.ts.map +1 -1
  35. package/dist/mcp-tools.js +7 -6
  36. package/dist/mcp-tools.js.map +1 -1
  37. package/dist/mtl.d.ts +28 -0
  38. package/dist/mtl.d.ts.map +1 -0
  39. package/dist/mtl.js +77 -0
  40. package/dist/mtl.js.map +1 -0
  41. package/dist/pin-store.js +3 -3
  42. package/dist/pin-store.js.map +1 -1
  43. package/dist/pinning.d.ts +18 -2
  44. package/dist/pinning.d.ts.map +1 -1
  45. package/dist/pinning.js +34 -7
  46. package/dist/pinning.js.map +1 -1
  47. package/dist/scan-cli.d.ts +3 -0
  48. package/dist/scan-cli.d.ts.map +1 -0
  49. package/dist/scan-cli.js +36 -0
  50. package/dist/scan-cli.js.map +1 -0
  51. package/dist/scan-config.d.ts +72 -0
  52. package/dist/scan-config.d.ts.map +1 -0
  53. package/dist/scan-config.js +239 -0
  54. package/dist/scan-config.js.map +1 -0
  55. package/dist/scan-lock.d.ts +46 -0
  56. package/dist/scan-lock.d.ts.map +1 -0
  57. package/dist/scan-lock.js +112 -0
  58. package/dist/scan-lock.js.map +1 -0
  59. package/dist/scan-report.d.ts +21 -0
  60. package/dist/scan-report.d.ts.map +1 -0
  61. package/dist/scan-report.js +273 -0
  62. package/dist/scan-report.js.map +1 -0
  63. package/dist/scan.d.ts +137 -0
  64. package/dist/scan.d.ts.map +1 -0
  65. package/dist/scan.js +534 -0
  66. package/dist/scan.js.map +1 -0
  67. package/dist/static-scan.d.ts +1 -1
  68. package/dist/static-scan.d.ts.map +1 -1
  69. package/dist/static-scan.js +262 -12
  70. package/dist/static-scan.js.map +1 -1
  71. package/dist/tool-list.d.ts +34 -0
  72. package/dist/tool-list.d.ts.map +1 -0
  73. package/dist/tool-list.js +57 -0
  74. package/dist/tool-list.js.map +1 -0
  75. package/dist/wrap-cli.d.ts.map +1 -1
  76. package/dist/wrap-cli.js +6 -4
  77. package/dist/wrap-cli.js.map +1 -1
  78. package/dist/wrap-state.d.ts +3 -0
  79. package/dist/wrap-state.d.ts.map +1 -1
  80. package/dist/wrap-state.js +7 -4
  81. package/dist/wrap-state.js.map +1 -1
  82. package/dist/wrap.js +50 -42
  83. package/dist/wrap.js.map +1 -1
  84. package/docs/gates.es.md +59 -10
  85. package/docs/gates.fr.md +59 -10
  86. package/docs/gates.md +55 -10
  87. package/docs/gates.ru.md +59 -11
  88. package/docs/gates.zh.md +13 -7
  89. package/docs/scan.es.md +184 -0
  90. package/docs/scan.fr.md +184 -0
  91. package/docs/scan.md +184 -0
  92. package/docs/scan.ru.md +184 -0
  93. package/docs/scan.zh.md +184 -0
  94. package/docs/scanner-comparison.es.md +218 -0
  95. package/docs/scanner-comparison.fr.md +223 -0
  96. package/docs/scanner-comparison.md +209 -0
  97. package/docs/scanner-comparison.ru.md +214 -0
  98. package/docs/scanner-comparison.zh.md +135 -0
  99. package/package.json +5 -3
@@ -0,0 +1,273 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { relative, isAbsolute, sep } from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ import { readFileSync } from 'node:fs';
5
+ import { homedir } from 'node:os';
6
+ import { displaySafe } from './sanitize.js';
7
+ const SEVERITY_ORDER = ['info', 'low', 'medium', 'high', 'critical'];
8
+ /** Short, fixed descriptions; the finding message carries the specifics. */
9
+ export const CODE_TEXT = {
10
+ TOOL_DEF_INJECTION: 'Tool definition carries prompt-injection phrasing',
11
+ TOOL_DEF_SECRET_REQUEST: 'Tool definition asks for a private key, seed phrase or SSH key',
12
+ TOOL_DEF_SECRET_HARVEST: 'Tool whose stated job is to read or reveal secrets',
13
+ TOOL_DEF_EXFIL: 'Tool definition instructs sending data to an outside destination',
14
+ TOOL_DEF_HIDDEN_UNICODE: 'Invisible or bidirectional characters in a tool definition',
15
+ TOOL_DEF_BASE64_BLOB: 'Long base64 run in a tool definition',
16
+ TOOL_DEF_DATA_URL: 'data: or javascript: URL in a tool definition',
17
+ TOOL_DEF_CREDENTIAL_PARAM: 'Tool asks for a credential as a parameter',
18
+ TOOL_DEF_ENV_REFERENCE: 'Tool definition refers to environment files or variables',
19
+ TOOL_DEF_SECRET_EXFIL: 'A secret store and a destination named close together',
20
+ TOOL_DEF_IMPERATIVE: 'Prompt-shaped imperative phrasing',
21
+ TOOL_DEF_DRIFT: 'Tool definitions changed since they were approved',
22
+ TOOL_DEF_UNPINNED: 'No approved snapshot of the tool definitions yet',
23
+ TOOL_DEF_UNCANONICAL: 'Tool definitions have no canonical form to pin',
24
+ SERVER_IDENTITY_DRIFT: 'The command or URL behind an approved server changed',
25
+ PIN_FORMAT_UPGRADE_REQUIRED: 'Approval predates extended tool fields; re-approve',
26
+ SERVER_UNDECLARED: 'Server came from a catalog, not from the operator',
27
+ LOCK_MISSING: 'Server is not in the reviewed lock file',
28
+ HISTOR_UNSEEN_TOOLSET: 'HISTOR never observed the tool set this server served',
29
+ HISTOR_CLASSIFIER: "HISTOR's classifier reads a tool as directing the model",
30
+ TOOL_DEF_CLASSIFIER: 'A model reads the tool as directing the model (opt-in classifier)',
31
+ TOOL_DEF_CROSS_TOOL: "A tool's description directs how another tool is called",
32
+ HISTOR_OLDER_TOOLSET: 'This server served a tool set HISTOR saw earlier, not the current one',
33
+ GATE_ERROR: 'A WARDEN gate failed to complete',
34
+ };
35
+ function codeText(code) {
36
+ return CODE_TEXT[code] ?? (code.startsWith('THREAT_') ? 'Matches a known-bad record in the threat feed' : code);
37
+ }
38
+ /** JSON report without the raw tool definitions (they are in the lock when they matter). */
39
+ export function toJson(report) {
40
+ return JSON.stringify({ ...report, servers: report.servers.map(({ tools: _tools, ...rest }) => rest) }, null, 2);
41
+ }
42
+ function displayPath(path, cwd) {
43
+ const rel = relative(cwd, path);
44
+ if (rel && !rel.startsWith('..') && !isAbsolute(rel))
45
+ return rel;
46
+ const home = homedir();
47
+ return path.startsWith(home + sep) ? '~' + path.slice(home.length) : path;
48
+ }
49
+ function findingLabel(f) {
50
+ return `${displaySafe(f.code, 60)}${f.tool ? `(${displaySafe(f.tool, 60)})` : ''}`;
51
+ }
52
+ /** The terminal table. Every untrusted string goes through displaySafe. */
53
+ export function toTable(report, cwd, color) {
54
+ const c = (code, text) => color ? `\x1b[${code}m${text}\x1b[0m` : text;
55
+ const lines = [];
56
+ const r = report.ruleset;
57
+ lines.push(`WARDEN scan ${report.version} · ruleset ${r.version} ${r.digest.slice(0, 19)}… · block at ${report.policy.blockAtSeverity}`);
58
+ if (!report.sources.length)
59
+ lines.push('No MCP client config found. Pass a file, or run where .mcp.json lives.');
60
+ for (const s of report.sources)
61
+ lines.push(` ${s.error ? c('31', 'unreadable') : 'read'} ${displayPath(s.path, cwd)} (${s.client}, ${s.servers} server${s.servers === 1 ? '' : 's'})${s.error ? ': ' + displaySafe(s.error, 200) : ''}`);
62
+ lines.push('');
63
+ const width = Math.min(28, Math.max(6, ...report.servers.map(s => displaySafe(s.key, 28).length)));
64
+ for (const s of report.servers) {
65
+ const mark = s.allow === false ? c('31;1', '✗ BLOCK ') : s.status === 'error' ? c('33', '! error ') : s.status === 'skipped' ? c('2', '- skip ')
66
+ : s.status === 'launch-only' ? c('36', '~ launch') : c('32', '✓ allow ');
67
+ const name = displaySafe(s.key, 28).padEnd(width);
68
+ let detail;
69
+ if (s.status === 'skipped')
70
+ detail = displaySafe(s.skipped ?? '', 120);
71
+ else if (s.status === 'error')
72
+ detail = displaySafe(s.error ?? '', 200);
73
+ else {
74
+ const blockingFindings = s.findings.filter(f => !f.advisory && SEVERITY_ORDER.indexOf(f.severity) >= SEVERITY_ORDER.indexOf(report.policy.blockAtSeverity));
75
+ const labels = [...new Set((s.allow === false ? blockingFindings : s.findings.filter(f => !f.advisory)).map(findingLabel))];
76
+ const shown = labels.slice(0, 4);
77
+ const parts = [];
78
+ if (s.status === 'launch-only')
79
+ parts.push('not started (--no-launch): launch line vetted only');
80
+ if (s.toolCount !== undefined)
81
+ parts.push(`${s.toolCount} tool${s.toolCount === 1 ? '' : 's'}`);
82
+ if (s.score !== undefined && s.status === 'scanned')
83
+ parts.push(`score ${s.score.toFixed(2)}`);
84
+ if (shown.length)
85
+ parts.push(shown.join(' '));
86
+ const more = labels.length - shown.length;
87
+ if (more > 0)
88
+ parts.push(`+${more} more`);
89
+ if (s.lock)
90
+ parts.push(`lock: ${s.lock.state}`);
91
+ if (s.histor)
92
+ parts.push(`histor: ${displaySafe(s.histor.match ?? (s.histor.notSent ? 'not sent' : 'unavailable'), 40)}`);
93
+ if (s.classifier)
94
+ parts.push(s.classifier.error ? 'classifier: no answer' : `classifier: ${s.classifier.flagged} flagged`);
95
+ detail = parts.join(' · ');
96
+ }
97
+ lines.push(` ${mark} ${name} ${c('2', s.client.padEnd(14))} ${detail}`);
98
+ }
99
+ const m = report.summary;
100
+ lines.push('');
101
+ lines.push(`${m.servers} server${m.servers === 1 ? '' : 's'}: ${m.allowed} allowed, ${m.blocked} blocked, ${m.errors} not checked, ${m.skipped} skipped${m.launchOnly ? `, ${m.launchOnly} not started` : ''}.`);
102
+ if (report.lock) {
103
+ if (report.lock.written)
104
+ lines.push(`Lock written: ${displayPath(report.lock.path, cwd)}. Commit it; the diff is the review.`);
105
+ if (report.lock.stale.length)
106
+ lines.push(`In the lock but not in any config: ${report.lock.stale.map(id => displaySafe(id, 60)).join(', ')}`);
107
+ }
108
+ if (m.blocked)
109
+ lines.push(`Details: warden-mcp scan --json, or --markdown FILE. To review a changed server: warden-mcp scan --lock warden.lock.json --update-lock.`);
110
+ return lines.join('\n');
111
+ }
112
+ // ── SARIF 2.1.0 ──────────────────────────────────────────────────────────────
113
+ const SECURITY_SEVERITY = { critical: '9.5', high: '8.0', medium: '5.5', low: '3.0', info: '1.0' };
114
+ const LEVEL = { critical: 'error', high: 'error', medium: 'warning', low: 'note', info: 'note' };
115
+ function lineOf(path, key) {
116
+ try {
117
+ const text = readFileSync(path, 'utf8');
118
+ const needle = JSON.stringify(key);
119
+ const at = text.indexOf(needle + ':') >= 0 ? text.indexOf(needle + ':') : text.indexOf(needle);
120
+ return at < 0 ? 1 : text.slice(0, at).split('\n').length;
121
+ }
122
+ catch {
123
+ return 1;
124
+ }
125
+ }
126
+ function artifactUri(path, cwd) {
127
+ const rel = relative(cwd, path);
128
+ if (rel && !rel.startsWith('..') && !isAbsolute(rel))
129
+ return { uri: rel.split(sep).join('/'), uriBaseId: '%SRCROOT%' };
130
+ return { uri: pathToFileURL(path).href };
131
+ }
132
+ /**
133
+ * SARIF for GitHub code scanning. Advisory findings are left out on purpose: the
134
+ * Security tab is for things that block, and TOOL_DEF_UNPINNED alone would put a
135
+ * result on every server in every repository.
136
+ */
137
+ export function toSarif(report, cwd) {
138
+ const rules = new Map();
139
+ const results = [];
140
+ for (const s of report.servers) {
141
+ for (const f of s.findings) {
142
+ if (f.advisory)
143
+ continue;
144
+ const known = rules.get(f.code);
145
+ if (!known || SEVERITY_ORDER.indexOf(f.severity) > SEVERITY_ORDER.indexOf(known.severity))
146
+ rules.set(f.code, { severity: f.severity });
147
+ const fingerprint = createHash('sha256').update([s.client, s.key, f.code, f.tool ?? '', f.message].join('\u0000')).digest('hex');
148
+ results.push({
149
+ ruleId: f.code,
150
+ level: LEVEL[f.severity],
151
+ message: { text: `${displaySafe(s.key, 120)}: ${displaySafe(f.message, 1500)}` },
152
+ locations: [{ physicalLocation: { artifactLocation: artifactUri(s.source, cwd), region: { startLine: lineOf(s.source, s.key) } } }],
153
+ partialFingerprints: { 'wardenFinding/v1': fingerprint },
154
+ properties: { server: displaySafe(s.key, 200), client: s.client, gate: f.gate, severity: f.severity, ...(f.tool ? { tool: displaySafe(f.tool, 200) } : {}) },
155
+ });
156
+ }
157
+ }
158
+ return {
159
+ $schema: 'https://json.schemastore.org/sarif-2.1.0.json',
160
+ version: '2.1.0',
161
+ runs: [{
162
+ tool: { driver: {
163
+ name: 'WARDEN', semanticVersion: report.version, informationUri: 'https://warden.modelmarket.dev/',
164
+ rules: [...rules.entries()].sort(([a], [b]) => a < b ? -1 : 1).map(([id, r]) => ({
165
+ id, name: id, shortDescription: { text: codeText(id) },
166
+ helpUri: 'https://github.com/alexar76/warden/blob/main/docs/gates.md',
167
+ defaultConfiguration: { level: LEVEL[r.severity] },
168
+ properties: { tags: ['security', 'mcp', 'prompt-injection'], 'security-severity': SECURITY_SEVERITY[r.severity] },
169
+ })),
170
+ } },
171
+ results,
172
+ properties: { ruleset: report.ruleset, blockAtSeverity: report.policy.blockAtSeverity },
173
+ }],
174
+ };
175
+ }
176
+ // ── Markdown (GitHub step summary, PR comment) ───────────────────────────────
177
+ /** Inline code that untrusted text cannot break out of. */
178
+ export function mdCode(text, max = 80) {
179
+ const t = displaySafe(text, max).replace(/[\r\n]+/g, ' ').replace(/\|/g, '¦');
180
+ const run = Math.max(0, ...[...t.matchAll(/`+/g)].map(m => m[0].length));
181
+ const fence = '`'.repeat(run + 1);
182
+ return `${fence}${run ? ' ' : ''}${t}${run ? ' ' : ''}${fence}`;
183
+ }
184
+ /** A fenced block that untrusted text cannot close. */
185
+ export function mdBlock(text, lang = '') {
186
+ const run = Math.max(2, ...[...text.matchAll(/`+/g)].map(m => m[0].length));
187
+ const fence = '`'.repeat(run + 1);
188
+ return `${fence}${lang}\n${text}\n${fence}`;
189
+ }
190
+ function toolText(t) {
191
+ if (!t)
192
+ return [];
193
+ const lines = [`name: ${t.name}`];
194
+ if (t.title)
195
+ lines.push(`title: ${t.title}`);
196
+ for (const l of String(t.description ?? '').split(/\r?\n/))
197
+ lines.push(`description: ${l}`);
198
+ lines.push(`inputSchema: ${JSON.stringify(t.inputSchema ?? {})}`);
199
+ for (const k of Object.keys(t).filter(k => !['name', 'title', 'description', 'inputSchema'].includes(k)).sort())
200
+ lines.push(`${k}: ${JSON.stringify(t[k])}`);
201
+ return lines.map(l => displaySafe(l, 4000));
202
+ }
203
+ /** Line diff, small and dependency-free: common prefix/suffix, then the middle as -/+. */
204
+ export function lineDiff(before, after) {
205
+ let start = 0;
206
+ while (start < before.length && start < after.length && before[start] === after[start])
207
+ start++;
208
+ let endA = before.length, endB = after.length;
209
+ while (endA > start && endB > start && before[endA - 1] === after[endB - 1]) {
210
+ endA--;
211
+ endB--;
212
+ }
213
+ return [
214
+ ...before.slice(Math.max(0, start - 1), start).map(l => ' ' + l),
215
+ ...before.slice(start, endA).map(l => '- ' + l),
216
+ ...after.slice(start, endB).map(l => '+ ' + l),
217
+ ...after.slice(endB, endB + 1).map(l => ' ' + l),
218
+ ];
219
+ }
220
+ export function toMarkdown(report, cwd) {
221
+ const m = report.summary;
222
+ const out = [];
223
+ out.push(`## WARDEN · MCP server scan`);
224
+ out.push('');
225
+ out.push(`${m.blocked ? '❌' : '✅'} **${m.blocked} blocked**, ${m.allowed} allowed, ${m.errors} not checked, ${m.skipped} skipped${m.launchOnly ? `, ${m.launchOnly} not started` : ''} · ruleset ${mdCode(report.ruleset.version)} · block at ${mdCode(report.policy.blockAtSeverity)}`);
226
+ out.push('');
227
+ if (!report.servers.length) {
228
+ out.push('No MCP servers found in the scanned config files.');
229
+ return out.join('\n') + '\n';
230
+ }
231
+ out.push('| | Server | Config | Tools | Findings | Lock |');
232
+ out.push('|---|---|---|---|---|---|');
233
+ for (const s of report.servers) {
234
+ const mark = s.allow === false ? '❌' : s.status === 'error' ? '⚠️' : s.status === 'skipped' ? '➖' : s.status === 'launch-only' ? '🔸' : '✅';
235
+ const findings = s.status === 'error' ? `not checked: ${mdCode(s.error ?? '', 100)}`
236
+ : s.status === 'skipped' ? mdCode(s.skipped ?? '', 80)
237
+ : [...new Set(s.findings.filter(f => !f.advisory).map(f => f.code + (f.tool ? `(${f.tool})` : '')))].slice(0, 5).map(l => mdCode(l, 70)).join(' ') || (s.status === 'launch-only' ? 'launch line only (not started)' : '—');
238
+ out.push(`| ${mark} | ${mdCode(s.key, 50)} | ${mdCode(displayPath(s.source, cwd), 60)} | ${s.toolCount ?? '—'} | ${findings} | ${s.lock ? mdCode(s.lock.state) : '—'} |`);
239
+ }
240
+ const blocked = report.servers.filter(s => s.allow === false);
241
+ for (const s of blocked) {
242
+ out.push('');
243
+ out.push(`<details><summary>❌ ${mdCode(s.key, 60)} — why it was blocked</summary>`);
244
+ out.push('');
245
+ out.push(mdBlock(s.findings.filter(f => !f.advisory).map(f => `[${f.severity}] ${f.code}${f.tool ? ` (${f.tool})` : ''}: ${f.message}`).map(l => displaySafe(l, 1500)).join('\n')));
246
+ out.push('');
247
+ out.push('</details>');
248
+ }
249
+ const changed = report.servers.filter(s => s.lock?.changes?.length);
250
+ for (const s of changed) {
251
+ out.push('');
252
+ out.push(`<details${s.lock.state === 'drift' || s.lock.state === 'missing' ? ' open' : ''}><summary>${s.lock.state === 'missing' ? 'New server' : 'Changed tool definitions'}: ${mdCode(s.key, 60)} (${s.lock.changes.length} tool${s.lock.changes.length === 1 ? '' : 's'})</summary>`);
253
+ out.push('');
254
+ const diff = [];
255
+ for (const ch of s.lock.changes.slice(0, 40)) {
256
+ diff.push(`@@ ${ch.kind} ${displaySafe(ch.tool, 120)} @@`);
257
+ diff.push(...lineDiff(toolText(ch.before), toolText(ch.after)));
258
+ }
259
+ if (s.lock.changes.length > 40)
260
+ diff.push(`… ${s.lock.changes.length - 40} more tools`);
261
+ out.push(mdBlock(diff.join('\n').slice(0, 60_000), 'diff'));
262
+ out.push('');
263
+ out.push('</details>');
264
+ }
265
+ if (report.lock?.stale.length) {
266
+ out.push('');
267
+ out.push(`In the lock but no longer in any config: ${report.lock.stale.map(id => mdCode(id, 60)).join(', ')}`);
268
+ }
269
+ out.push('');
270
+ out.push(`<sub>@aimarket/warden ${displaySafe(report.version, 20)} · ${mdCode(report.ruleset.digest, 60)} · tool descriptions are shown as code; they are untrusted text from the servers.</sub>`);
271
+ return out.join('\n') + '\n';
272
+ }
273
+ //# sourceMappingURL=scan-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-report.js","sourceRoot":"","sources":["../src/scan-report.ts"],"names":[],"mappings":"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"}
package/dist/scan.d.ts ADDED
@@ -0,0 +1,137 @@
1
+ import { type ClientKind, type ConfiguredServer, type DiscoveryEnv } from './scan-config.js';
2
+ import { type FetchedServer } from './mcp-client.js';
3
+ import { type ClassifierOptions } from './classifier.js';
4
+ import { type ToolChange } from './scan-lock.js';
5
+ import type { Severity, ToolDef, WardenFinding, WardenPolicy, RulesetRef } from './types.js';
6
+ export declare const SEVERITIES: Severity[];
7
+ export interface ScanOptions {
8
+ configs: string[];
9
+ project: boolean;
10
+ clients?: ClientKind[];
11
+ cwd: string;
12
+ launch: boolean;
13
+ publicOnly: boolean;
14
+ timeoutMs: number;
15
+ concurrency: number;
16
+ policy: WardenPolicy;
17
+ lock?: string;
18
+ updateLock: boolean;
19
+ stateDir: string;
20
+ feed?: string;
21
+ feedKey?: string;
22
+ histor: boolean;
23
+ historUrl: string;
24
+ /** Opt-in meaning-based check; absent unless both --classifier-url and --classifier-model are given. */
25
+ classifier?: ClassifierOptions & {
26
+ blocks: boolean;
27
+ };
28
+ format: 'table' | 'json';
29
+ sarif?: string;
30
+ markdown?: string;
31
+ jsonFile?: string;
32
+ failOnError: boolean;
33
+ color: boolean;
34
+ }
35
+ export type ServerStatus = 'scanned' | 'launch-only' | 'blocked-at-launch' | 'error' | 'skipped';
36
+ export interface HistorSummary {
37
+ match?: string;
38
+ note?: string;
39
+ page?: string;
40
+ unchangedSince?: string;
41
+ changes?: number;
42
+ error?: string;
43
+ notSent?: string;
44
+ }
45
+ export interface ScanServerResult {
46
+ id: string;
47
+ key: string;
48
+ client: ClientKind;
49
+ source: string;
50
+ scope: 'user' | 'project';
51
+ transport: 'stdio' | 'sse' | 'http';
52
+ wrapped: boolean;
53
+ /** Display form of the launch: secrets in args and URLs are redacted. */
54
+ launch: string;
55
+ status: ServerStatus;
56
+ allow: boolean | null;
57
+ score?: number;
58
+ decidedBy?: string;
59
+ findings: WardenFinding[];
60
+ allowedTools: string[];
61
+ blockedTools: string[];
62
+ toolCount?: number;
63
+ serverInfo?: {
64
+ name?: string;
65
+ version?: string;
66
+ };
67
+ error?: string;
68
+ skipped?: string;
69
+ mtlDigest?: string;
70
+ mtlError?: string;
71
+ histor?: HistorSummary;
72
+ classifier?: {
73
+ model: string;
74
+ flagged: number;
75
+ error?: string;
76
+ };
77
+ lock?: {
78
+ state: 'match' | 'drift' | 'missing' | 'updated' | 'unchanged' | 'refused';
79
+ changes?: ToolChange[];
80
+ };
81
+ /** The fetched definitions; kept for the Markdown diff and --update-lock, not printed in JSON. */
82
+ tools?: ToolDef[];
83
+ }
84
+ export interface ScanReport {
85
+ tool: 'warden-scan';
86
+ version: string;
87
+ scannedAt: string;
88
+ ruleset: RulesetRef;
89
+ policy: WardenPolicy;
90
+ launch: boolean;
91
+ sources: Array<{
92
+ path: string;
93
+ client: ClientKind;
94
+ scope: 'user' | 'project';
95
+ servers: number;
96
+ error?: string;
97
+ }>;
98
+ servers: ScanServerResult[];
99
+ lock?: {
100
+ path: string;
101
+ stale: string[];
102
+ written: boolean;
103
+ };
104
+ summary: {
105
+ servers: number;
106
+ scanned: number;
107
+ allowed: number;
108
+ blocked: number;
109
+ errors: number;
110
+ skipped: number;
111
+ launchOnly: number;
112
+ };
113
+ }
114
+ export declare const SCAN_USAGE: string;
115
+ export declare function parseScanArgs(argv: string[], env?: NodeJS.ProcessEnv): Promise<ScanOptions>;
116
+ export declare class UsageRequested extends Error {
117
+ constructor();
118
+ }
119
+ /** A path segment or argument that looks like it carries a credential. */
120
+ export declare function looksSecret(text: string): boolean;
121
+ /** The launch line with credentials replaced, for terminals, reports and SARIF. */
122
+ export declare function redactLaunch(server: ConfiguredServer): string;
123
+ export declare function redactUrl(raw: string): string;
124
+ /** The endpoint HISTOR may be asked about, or why it is not sent. */
125
+ export declare function historEndpoint(raw: string): {
126
+ endpoint?: string;
127
+ reason?: string;
128
+ };
129
+ export interface ScanDeps {
130
+ fetch?: (server: ConfiguredServer, opts: ScanOptions) => Promise<FetchedServer>;
131
+ historFetch?: typeof fetch;
132
+ now?: () => Date;
133
+ discovery?: Partial<DiscoveryEnv>;
134
+ }
135
+ export declare function runScan(opts: ScanOptions, deps?: ScanDeps): Promise<ScanReport>;
136
+ export declare function exitCode(report: ScanReport, opts: Pick<ScanOptions, 'failOnError'>): number;
137
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}