erosolar-cli 2.1.203 → 2.1.205

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 (52) hide show
  1. package/dist/core/agentOrchestrator.d.ts +16 -4
  2. package/dist/core/agentOrchestrator.d.ts.map +1 -1
  3. package/dist/core/agentOrchestrator.js +181 -61
  4. package/dist/core/agentOrchestrator.js.map +1 -1
  5. package/dist/core/errors/errorTypes.d.ts +0 -6
  6. package/dist/core/errors/errorTypes.d.ts.map +1 -1
  7. package/dist/core/errors/errorTypes.js +0 -26
  8. package/dist/core/errors/errorTypes.js.map +1 -1
  9. package/dist/shell/interactiveShell.d.ts +0 -5
  10. package/dist/shell/interactiveShell.d.ts.map +1 -1
  11. package/dist/shell/interactiveShell.js +45 -205
  12. package/dist/shell/interactiveShell.js.map +1 -1
  13. package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
  14. package/dist/ui/UnifiedUIRenderer.js +6 -3
  15. package/dist/ui/UnifiedUIRenderer.js.map +1 -1
  16. package/package.json +1 -1
  17. package/dist/core/LazyLoader.d.ts +0 -129
  18. package/dist/core/LazyLoader.d.ts.map +0 -1
  19. package/dist/core/LazyLoader.js +0 -240
  20. package/dist/core/LazyLoader.js.map +0 -1
  21. package/dist/core/alphaZeroOrchestrator.d.ts +0 -140
  22. package/dist/core/alphaZeroOrchestrator.d.ts.map +0 -1
  23. package/dist/core/alphaZeroOrchestrator.js +0 -418
  24. package/dist/core/alphaZeroOrchestrator.js.map +0 -1
  25. package/dist/core/checkpoint.d.ts +0 -76
  26. package/dist/core/checkpoint.d.ts.map +0 -1
  27. package/dist/core/checkpoint.js +0 -278
  28. package/dist/core/checkpoint.js.map +0 -1
  29. package/dist/core/costTracker.d.ts +0 -87
  30. package/dist/core/costTracker.d.ts.map +0 -1
  31. package/dist/core/costTracker.js +0 -285
  32. package/dist/core/costTracker.js.map +0 -1
  33. package/dist/core/isolatedVerifier.d.ts +0 -40
  34. package/dist/core/isolatedVerifier.d.ts.map +0 -1
  35. package/dist/core/isolatedVerifier.js +0 -129
  36. package/dist/core/isolatedVerifier.js.map +0 -1
  37. package/dist/core/responseVerifier.d.ts +0 -98
  38. package/dist/core/responseVerifier.d.ts.map +0 -1
  39. package/dist/core/responseVerifier.js +0 -509
  40. package/dist/core/responseVerifier.js.map +0 -1
  41. package/dist/core/securityAssessment.d.ts +0 -91
  42. package/dist/core/securityAssessment.d.ts.map +0 -1
  43. package/dist/core/securityAssessment.js +0 -580
  44. package/dist/core/securityAssessment.js.map +0 -1
  45. package/dist/core/verification.d.ts +0 -137
  46. package/dist/core/verification.d.ts.map +0 -1
  47. package/dist/core/verification.js +0 -323
  48. package/dist/core/verification.js.map +0 -1
  49. package/dist/tools/softwareEngineeringTools.d.ts +0 -7
  50. package/dist/tools/softwareEngineeringTools.d.ts.map +0 -1
  51. package/dist/tools/softwareEngineeringTools.js +0 -338
  52. package/dist/tools/softwareEngineeringTools.js.map +0 -1
@@ -1,509 +0,0 @@
1
- /**
2
- * AI Response Verification System - Isolated Runtime Only
3
- *
4
- * Verifies assistant claims by spawning fresh CLI instances and running
5
- * actual runtime tests. All verification happens in isolation.
6
- *
7
- * @license MIT
8
- */
9
- import { exec, spawn } from 'node:child_process';
10
- import { promisify } from 'node:util';
11
- import * as fs from 'node:fs/promises';
12
- import * as path from 'node:path';
13
- const execAsync = promisify(exec);
14
- // ============================================================================
15
- // ISOLATED RUNTIME - Core Functions
16
- // ============================================================================
17
- /**
18
- * Spawns a fresh isolated erosolar-cli instance for testing
19
- */
20
- async function spawnIsolatedCLI(cwd, timeout = 60000) {
21
- const cliPath = path.join(cwd, 'dist/bin/erosolar.js');
22
- // Verify CLI exists
23
- try {
24
- await fs.access(cliPath);
25
- }
26
- catch {
27
- throw new Error(`CLI not found at ${cliPath}. Run build first.`);
28
- }
29
- let output = '';
30
- let errors = '';
31
- let exitResolve;
32
- const exitPromise = new Promise(resolve => { exitResolve = resolve; });
33
- const child = spawn('node', [cliPath, '--plain'], {
34
- cwd,
35
- env: { ...process.env, EROSOLAR_TEST_MODE: '1', NO_COLOR: '1' },
36
- stdio: ['pipe', 'pipe', 'pipe']
37
- });
38
- child.stdout.on('data', (data) => { output += data.toString(); });
39
- child.stderr.on('data', (data) => { errors += data.toString(); });
40
- child.on('close', (code) => { exitResolve(code); });
41
- child.on('error', (err) => { errors += err.message; exitResolve(1); });
42
- // Set timeout
43
- const timeoutId = setTimeout(() => {
44
- child.kill('SIGTERM');
45
- errors += `\nTimeout after ${timeout}ms`;
46
- }, timeout);
47
- child.on('close', () => clearTimeout(timeoutId));
48
- // Wait for startup
49
- await new Promise(resolve => {
50
- const checkStartup = setInterval(() => {
51
- if (output.includes('erosolar') || output.includes('>') || output.length > 100) {
52
- clearInterval(checkStartup);
53
- resolve();
54
- }
55
- }, 100);
56
- setTimeout(() => { clearInterval(checkStartup); resolve(); }, 2000);
57
- });
58
- return {
59
- process: child,
60
- stdin: child.stdin,
61
- output,
62
- errors,
63
- exitPromise
64
- };
65
- }
66
- /**
67
- * Sends a command to the spawned CLI and waits for response
68
- */
69
- async function sendCommand(cli, command, waitMs = 5000) {
70
- const outputBefore = cli.output.length;
71
- cli.stdin.write(`${command}\n`);
72
- await new Promise(resolve => {
73
- let lastLength = cli.output.length;
74
- const checkInterval = setInterval(() => {
75
- if (cli.output.length > lastLength) {
76
- lastLength = cli.output.length;
77
- }
78
- else if (cli.output.length > outputBefore) {
79
- clearInterval(checkInterval);
80
- resolve();
81
- }
82
- }, 200);
83
- setTimeout(() => { clearInterval(checkInterval); resolve(); }, waitMs);
84
- });
85
- return cli.output.slice(outputBefore);
86
- }
87
- /**
88
- * Run a shell command for verification (file checks, etc.)
89
- */
90
- async function runShellVerification(cmd, cwd) {
91
- // Safety check - block dangerous commands
92
- const dangerous = [/\brm\s/i, /rmdir/i, /sudo/i, /chmod\s*7/i, /eval\s*\(/i, /DROP\s+TABLE/i, /DELETE\s+FROM/i];
93
- for (const p of dangerous) {
94
- if (p.test(cmd))
95
- return { ok: false, out: `Blocked dangerous command: ${p.source}` };
96
- }
97
- try {
98
- const { stdout, stderr } = await execAsync(cmd, { cwd, timeout: 30000 });
99
- return { ok: true, out: stdout + stderr };
100
- }
101
- catch (e) {
102
- return { ok: false, out: e instanceof Error ? e.message : 'Command failed' };
103
- }
104
- }
105
- /**
106
- * Runs an isolated runtime test
107
- */
108
- export async function runIsolatedTest(test, cwd, llmVerifier) {
109
- const startTime = Date.now();
110
- const result = {
111
- test,
112
- success: false,
113
- output: '',
114
- errors: '',
115
- exitCode: null,
116
- duration: 0,
117
- matchedPatterns: [],
118
- unmatchedPatterns: []
119
- };
120
- try {
121
- // Rebuild if required
122
- if (test.requiresBuild) {
123
- try {
124
- await execAsync('npm run build', { cwd, timeout: 120000 });
125
- }
126
- catch (buildErr) {
127
- result.errors = `Build failed: ${buildErr instanceof Error ? buildErr.message : 'unknown'}`;
128
- result.duration = Date.now() - startTime;
129
- return result;
130
- }
131
- }
132
- // Run shell commands first if any (file checks, etc.)
133
- if (test.shellCommands && test.shellCommands.length > 0) {
134
- for (const cmd of test.shellCommands) {
135
- const shellResult = await runShellVerification(cmd, cwd);
136
- result.output += `$ ${cmd}\n${shellResult.out}\n`;
137
- if (!shellResult.ok) {
138
- result.errors += `${shellResult.out}\n`;
139
- }
140
- }
141
- }
142
- // Run CLI commands if any
143
- if (test.commands && test.commands.length > 0) {
144
- const cli = await spawnIsolatedCLI(cwd, test.timeout || 60000);
145
- for (const cmd of test.commands) {
146
- const cmdOutput = await sendCommand(cli, cmd);
147
- result.output += `> ${cmd}\n${cmdOutput}\n`;
148
- }
149
- cli.stdin.write('/quit\n');
150
- await new Promise(resolve => setTimeout(resolve, 500));
151
- cli.process.kill('SIGTERM');
152
- result.exitCode = await cli.exitPromise;
153
- result.errors += cli.errors;
154
- }
155
- // Check expected output patterns
156
- if (test.expectedOutputs) {
157
- for (const pattern of test.expectedOutputs) {
158
- if (result.output.includes(pattern) || new RegExp(pattern, 'i').test(result.output)) {
159
- result.matchedPatterns.push(pattern);
160
- }
161
- else {
162
- result.unmatchedPatterns.push(pattern);
163
- }
164
- }
165
- }
166
- // LLM assessment of behavior
167
- if (test.expectedBehavior && llmVerifier) {
168
- const assessPrompt = `Assess if this output demonstrates the expected behavior.
169
-
170
- EXPECTED: ${test.expectedBehavior}
171
-
172
- OUTPUT:
173
- ---
174
- ${result.output.slice(0, 4000)}
175
- ---
176
-
177
- Return JSON: {"matches": true/false, "confidence": 0-100, "reasoning": "explanation"}`;
178
- try {
179
- const assessment = await llmVerifier(assessPrompt);
180
- const match = assessment.match(/\{[\s\S]*\}/);
181
- if (match) {
182
- const parsed = JSON.parse(match[0]);
183
- result.llmAssessment = `${parsed.matches ? '✅' : '❌'} [${parsed.confidence}%] ${parsed.reasoning}`;
184
- if (!parsed.matches || parsed.confidence < 70) {
185
- result.unmatchedPatterns.push(`behavior: ${test.expectedBehavior}`);
186
- }
187
- else {
188
- result.matchedPatterns.push(`behavior: ${test.expectedBehavior}`);
189
- }
190
- }
191
- }
192
- catch {
193
- result.llmAssessment = 'LLM assessment failed';
194
- }
195
- }
196
- // Determine success
197
- result.success = result.unmatchedPatterns.length === 0 &&
198
- (result.matchedPatterns.length > 0 || (!test.expectedOutputs?.length && !test.expectedBehavior));
199
- }
200
- catch (err) {
201
- result.errors = err instanceof Error ? err.message : 'Unknown error';
202
- }
203
- result.duration = Date.now() - startTime;
204
- return result;
205
- }
206
- // ============================================================================
207
- // CLAIM EXTRACTION - LLM extracts claims from responses
208
- // ============================================================================
209
- const EXTRACT_CLAIMS_PROMPT = `Extract ALL verifiable claims from this AI assistant response.
210
-
211
- RESPONSE:
212
- ---
213
- {RESPONSE}
214
- ---
215
-
216
- CONTEXT: {CONTEXT}
217
- WORKING_DIR: {WORKING_DIR}
218
-
219
- For each claim, determine:
220
- 1. What specific assertion is being made
221
- 2. Category: file_op (created/modified/deleted files), code (compiles/tests pass), command (executed successfully), state (something changed), behavior (feature works), fact (verifiable truth)
222
- 3. How it can be verified (shell command, file check, CLI test, etc.)
223
- 4. Priority: critical (must verify), high (should verify), medium (nice to verify), low (optional)
224
-
225
- Return JSON array:
226
- [{
227
- "id": "c1",
228
- "statement": "the specific claim",
229
- "category": "file_op|code|command|state|behavior|fact",
230
- "verifiable": true,
231
- "priority": "critical|high|medium|low",
232
- "context": {"path": "/path/if/relevant", "command": "if relevant"}
233
- }]
234
-
235
- Output ONLY valid JSON array.`;
236
- /**
237
- * Extract claims from assistant response using LLM
238
- */
239
- async function extractClaims(response, ctx) {
240
- if (!ctx.llmVerifier)
241
- return [];
242
- try {
243
- const prompt = EXTRACT_CLAIMS_PROMPT
244
- .replace('{RESPONSE}', response.slice(0, 8000))
245
- .replace('{CONTEXT}', ctx.conversationHistory?.slice(-3).join('\n') || '')
246
- .replace('{WORKING_DIR}', ctx.workingDirectory);
247
- const result = await ctx.llmVerifier(prompt);
248
- const match = result.match(/\[[\s\S]*\]/);
249
- if (match) {
250
- return JSON.parse(match[0]);
251
- }
252
- }
253
- catch {
254
- // Fall through
255
- }
256
- return [];
257
- }
258
- // ============================================================================
259
- // TEST GENERATION - LLM generates isolated tests for claims
260
- // ============================================================================
261
- const GENERATE_TESTS_PROMPT = `Generate isolated runtime tests for these claims.
262
-
263
- CLAIMS:
264
- {CLAIMS}
265
-
266
- WORKING_DIR: {WORKING_DIR}
267
- PLATFORM: {PLATFORM}
268
-
269
- For each claim, generate a test that verifies it using:
270
- - Shell commands (for file checks, git status, etc.)
271
- - CLI commands (for testing CLI behavior in fresh instance)
272
- - Expected output patterns
273
-
274
- Return JSON array:
275
- [{
276
- "id": "test-1",
277
- "description": "what we're testing",
278
- "shellCommands": ["ls -la path", "cat file"],
279
- "commands": ["/help", "some input"],
280
- "expectedOutputs": ["pattern1", "pattern2"],
281
- "expectedBehavior": "description for LLM assessment",
282
- "requiresBuild": false,
283
- "timeout": 30000
284
- }]
285
-
286
- Use READ-ONLY commands only. No destructive operations.
287
- Output ONLY valid JSON array.`;
288
- /**
289
- * Generate isolated tests for claims
290
- */
291
- async function generateTests(claims, ctx) {
292
- if (!ctx.llmVerifier || claims.length === 0)
293
- return [];
294
- try {
295
- const prompt = GENERATE_TESTS_PROMPT
296
- .replace('{CLAIMS}', JSON.stringify(claims.slice(0, 10)))
297
- .replace('{WORKING_DIR}', ctx.workingDirectory)
298
- .replace('{PLATFORM}', process.platform);
299
- const result = await ctx.llmVerifier(prompt);
300
- const match = result.match(/\[[\s\S]*\]/);
301
- if (match) {
302
- return JSON.parse(match[0]);
303
- }
304
- }
305
- catch {
306
- // Fall through to basic tests
307
- }
308
- // Fallback: generate basic tests
309
- return claims.filter(c => c.verifiable && (c.priority === 'critical' || c.priority === 'high')).map((c, i) => {
310
- const test = {
311
- id: `test-${i}`,
312
- description: c.statement,
313
- commands: [],
314
- shellCommands: [],
315
- expectedBehavior: c.statement,
316
- timeout: 30000
317
- };
318
- // Add basic verification based on category
319
- if (c.category === 'file_op' && c.context['path']) {
320
- test.shellCommands = [`test -f "${c.context['path']}" && echo "EXISTS" || echo "NOT_FOUND"`];
321
- test.expectedOutputs = ['EXISTS'];
322
- }
323
- else if (c.category === 'code') {
324
- test.shellCommands = ['npm run build 2>&1 | tail -5'];
325
- }
326
- else if (c.category === 'behavior') {
327
- test.commands = ['/help'];
328
- }
329
- return test;
330
- });
331
- }
332
- // ============================================================================
333
- // MAIN VERIFICATION API
334
- // ============================================================================
335
- /**
336
- * Verify an assistant response using a completely isolated process.
337
- *
338
- * This spawns a separate Node.js process to run all verification:
339
- * - Separate memory space from main CLI
340
- * - Separate event loop
341
- * - Independent error handling
342
- * - No shared state
343
- *
344
- * This ensures verification cannot interfere with the main process and vice versa.
345
- */
346
- export async function verifyResponse(response, ctx, responseId) {
347
- const timestamp = new Date().toISOString();
348
- const id = responseId || `verify-${Date.now()}`;
349
- // Find the isolated verifier script
350
- const verifierPath = path.join(ctx.workingDirectory, 'dist/core/isolatedVerifier.js');
351
- try {
352
- await fs.access(verifierPath);
353
- }
354
- catch {
355
- // Fallback: return unverified if script not found
356
- return {
357
- responseId: id,
358
- timestamp,
359
- claims: [],
360
- results: [],
361
- summary: { total: 0, verified: 0, failed: 0, inconclusive: 0 },
362
- overallVerdict: 'unverified',
363
- trustScore: 50
364
- };
365
- }
366
- // Build request for isolated process
367
- const request = {
368
- type: 'verify',
369
- response,
370
- workingDirectory: ctx.workingDirectory,
371
- conversationHistory: ctx.conversationHistory || [],
372
- provider: ctx.provider,
373
- model: ctx.model,
374
- };
375
- return new Promise((resolve) => {
376
- // Spawn completely isolated Node.js process
377
- const child = spawn('node', [verifierPath], {
378
- cwd: ctx.workingDirectory,
379
- env: {
380
- ...process.env,
381
- EROSOLAR_ISOLATED_VERIFIER: '1',
382
- NODE_OPTIONS: '--max-old-space-size=512', // Limit memory for safety
383
- },
384
- stdio: ['pipe', 'pipe', 'pipe'],
385
- });
386
- let stdout = '';
387
- let stderr = '';
388
- child.stdout.on('data', (data) => {
389
- stdout += data.toString();
390
- });
391
- child.stderr.on('data', (data) => {
392
- stderr += data.toString();
393
- });
394
- // Set timeout for verification (2 minutes max)
395
- const timeout = setTimeout(() => {
396
- child.kill('SIGTERM');
397
- resolve({
398
- responseId: id,
399
- timestamp,
400
- claims: [],
401
- results: [],
402
- summary: { total: 0, verified: 0, failed: 0, inconclusive: 0 },
403
- overallVerdict: 'unverified',
404
- trustScore: 50
405
- });
406
- }, 120000);
407
- child.on('close', (_code) => {
408
- clearTimeout(timeout);
409
- try {
410
- // Parse result from isolated process
411
- const result = JSON.parse(stdout);
412
- if (result.error) {
413
- // Process returned error
414
- resolve({
415
- responseId: id,
416
- timestamp,
417
- claims: [],
418
- results: [],
419
- summary: { total: 0, verified: 0, failed: 0, inconclusive: 0 },
420
- overallVerdict: 'unverified',
421
- trustScore: 50
422
- });
423
- }
424
- else {
425
- resolve(result);
426
- }
427
- }
428
- catch {
429
- // JSON parse failed
430
- resolve({
431
- responseId: id,
432
- timestamp,
433
- claims: [],
434
- results: [],
435
- summary: { total: 0, verified: 0, failed: 0, inconclusive: 0 },
436
- overallVerdict: 'unverified',
437
- trustScore: 50
438
- });
439
- }
440
- });
441
- child.on('error', () => {
442
- clearTimeout(timeout);
443
- resolve({
444
- responseId: id,
445
- timestamp,
446
- claims: [],
447
- results: [],
448
- summary: { total: 0, verified: 0, failed: 0, inconclusive: 0 },
449
- overallVerdict: 'unverified',
450
- trustScore: 50
451
- });
452
- });
453
- // Send request to isolated process via stdin
454
- child.stdin.write(JSON.stringify(request));
455
- child.stdin.end();
456
- });
457
- }
458
- /**
459
- * Format verification report for display
460
- */
461
- export function formatVerificationReport(report) {
462
- const bar = '█'.repeat(Math.round(report.trustScore / 10)) + '░'.repeat(10 - Math.round(report.trustScore / 10));
463
- const icon = report.trustScore >= 80 ? '✅' : report.trustScore >= 50 ? '⚠️' : '❌';
464
- let out = `╔════════════════════════════════════════════════════════════╗
465
- ║ ISOLATED RUNTIME VERIFICATION REPORT ║
466
- ╚════════════════════════════════════════════════════════════╝
467
-
468
- `;
469
- out += `Trust: ${icon} ${report.trustScore}/100 [${bar}]
470
- Verdict: ${report.overallVerdict.toUpperCase()}
471
-
472
- Claims: ${report.summary.total} | ✅ ${report.summary.verified} | ❌ ${report.summary.failed} | ❓ ${report.summary.inconclusive}
473
-
474
- `;
475
- out += `🔬 ISOLATED RUNTIME TESTS:\n`;
476
- for (const r of report.results.slice(0, 8)) {
477
- const statusIcon = r.verified ? '✅' : r.confidence === 'high' ? '❌' : '❓';
478
- out += ` ${statusIcon} [${r.confidence}] ${r.claim.statement.slice(0, 50)}...\n`;
479
- if (r.reasoning) {
480
- out += ` └─ ${r.reasoning.slice(0, 60)}\n`;
481
- }
482
- }
483
- if (report.results.length > 8) {
484
- out += ` ... +${report.results.length - 8} more\n`;
485
- }
486
- return out;
487
- }
488
- /**
489
- * Quick verification - verify only critical/high priority claims
490
- */
491
- export async function quickVerify(response, ctx) {
492
- const claims = await extractClaims(response, ctx);
493
- const critical = claims.filter(c => c.verifiable && (c.priority === 'critical' || c.priority === 'high')).slice(0, 3);
494
- if (critical.length === 0) {
495
- return { trustScore: 50, summary: 'No critical claims to verify' };
496
- }
497
- const tests = await generateTests(critical, ctx);
498
- let verified = 0;
499
- for (const test of tests) {
500
- const result = await runIsolatedTest(test, ctx.workingDirectory, ctx.llmVerifier);
501
- if (result.success)
502
- verified++;
503
- }
504
- return {
505
- trustScore: Math.round((verified / critical.length) * 100),
506
- summary: `${verified}/${critical.length} critical claims verified`
507
- };
508
- }
509
- //# sourceMappingURL=responseVerifier.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"responseVerifier.js","sourceRoot":"","sources":["../../src/core/responseVerifier.ts"],"names":[],"mappings":"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"}
@@ -1,91 +0,0 @@
1
- /**
2
- * Authorized Security Assessment Framework
3
- *
4
- * Ethical security testing that requires explicit authorization.
5
- * Focuses on defensive assessment and remediation guidance.
6
- *
7
- * Use cases:
8
- * - Scanning YOUR OWN code for vulnerabilities
9
- * - OWASP-style security checklists
10
- * - Dependency vulnerability analysis
11
- * - Secret detection in codebases you own
12
- * - CTF challenge assistance
13
- */
14
- /**
15
- * Authorization context for security testing
16
- */
17
- export interface SecurityAuthorizationContext {
18
- /** User explicitly confirms they own/have permission to test this target */
19
- ownershipConfirmed: boolean;
20
- /** Target scope (paths, URLs) they're authorized to test */
21
- authorizedScope: string[];
22
- /** Authorization timestamp */
23
- authorizedAt: Date;
24
- /** Type of testing authorized */
25
- testingType: 'code-review' | 'dependency-scan' | 'secret-detection' | 'ctf' | 'full-assessment';
26
- }
27
- /**
28
- * Vulnerability finding
29
- */
30
- export interface VulnerabilityFinding {
31
- id: string;
32
- severity: 'critical' | 'high' | 'medium' | 'low' | 'info';
33
- category: string;
34
- title: string;
35
- description: string;
36
- location: {
37
- file?: string;
38
- line?: number;
39
- snippet?: string;
40
- };
41
- remediation: string;
42
- references: string[];
43
- cwe?: string;
44
- owasp?: string;
45
- }
46
- /**
47
- * Security assessment result
48
- */
49
- export interface SecurityAssessmentResult {
50
- success: boolean;
51
- scanType: string;
52
- scope: string[];
53
- timestamp: Date;
54
- findings: VulnerabilityFinding[];
55
- summary: {
56
- critical: number;
57
- high: number;
58
- medium: number;
59
- low: number;
60
- info: number;
61
- };
62
- recommendations: string[];
63
- }
64
- /**
65
- * Verify authorization before any security testing
66
- */
67
- export declare function verifyAuthorization(context: SecurityAuthorizationContext, targetPath: string): {
68
- authorized: boolean;
69
- reason?: string;
70
- };
71
- /**
72
- * Scan source code for vulnerabilities
73
- */
74
- export declare function scanSourceCode(directory: string, context: SecurityAuthorizationContext): SecurityAssessmentResult;
75
- /**
76
- * Scan for hardcoded secrets
77
- */
78
- export declare function scanSecrets(directory: string, context: SecurityAuthorizationContext): SecurityAssessmentResult;
79
- /**
80
- * Scan npm dependencies for vulnerabilities
81
- */
82
- export declare function scanDependencies(directory: string, context: SecurityAuthorizationContext): SecurityAssessmentResult;
83
- /**
84
- * Format assessment results for display
85
- */
86
- export declare function formatAssessmentReport(result: SecurityAssessmentResult): string;
87
- /**
88
- * Create authorization context (requires user confirmation)
89
- */
90
- export declare function createAuthorizationContext(scope: string[], testingType: SecurityAuthorizationContext['testingType']): SecurityAuthorizationContext;
91
- //# sourceMappingURL=securityAssessment.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"securityAssessment.d.ts","sourceRoot":"","sources":["../../src/core/securityAssessment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,4EAA4E;IAC5E,kBAAkB,EAAE,OAAO,CAAC;IAC5B,4DAA4D;IAC5D,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,8BAA8B;IAC9B,YAAY,EAAE,IAAI,CAAC;IACnB,iCAAiC;IACjC,WAAW,EAAE,aAAa,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,KAAK,GAAG,iBAAiB,CAAC;CACjG;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AA+JD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,4BAA4B,EACrC,UAAU,EAAE,MAAM,GACjB;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAiC1C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,4BAA4B,GACpC,wBAAwB,CA6F1B;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,4BAA4B,GACpC,wBAAwB,CAoG1B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,4BAA4B,GACpC,wBAAwB,CAqG1B;AAuCD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CAuD/E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,4BAA4B,CAAC,aAAa,CAAC,GACvD,4BAA4B,CAO9B"}