erosolar-cli 2.1.202 → 2.1.204
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/agents/erosolar-code.rules.json +8 -13
- package/agents/general.rules.json +20 -33
- package/dist/core/agentOrchestrator.d.ts +19 -5
- package/dist/core/agentOrchestrator.d.ts.map +1 -1
- package/dist/core/agentOrchestrator.js +221 -245
- package/dist/core/agentOrchestrator.js.map +1 -1
- package/dist/core/errors/errorTypes.d.ts +0 -6
- package/dist/core/errors/errorTypes.d.ts.map +1 -1
- package/dist/core/errors/errorTypes.js +0 -26
- package/dist/core/errors/errorTypes.js.map +1 -1
- package/dist/core/errors/safetyValidator.d.ts +1 -40
- package/dist/core/errors/safetyValidator.d.ts.map +1 -1
- package/dist/core/errors/safetyValidator.js +1 -145
- package/dist/core/errors/safetyValidator.js.map +1 -1
- package/dist/core/reliabilityPrompt.d.ts.map +1 -1
- package/dist/core/reliabilityPrompt.js +10 -11
- package/dist/core/reliabilityPrompt.js.map +1 -1
- package/dist/providers/openaiResponsesProvider.d.ts +0 -5
- package/dist/providers/openaiResponsesProvider.d.ts.map +1 -1
- package/dist/providers/openaiResponsesProvider.js +1 -38
- package/dist/providers/openaiResponsesProvider.js.map +1 -1
- package/dist/shell/interactiveShell.d.ts +0 -3
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +47 -73
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/ui/PromptController.d.ts +1 -0
- package/dist/ui/PromptController.d.ts.map +1 -1
- package/dist/ui/PromptController.js +3 -0
- package/dist/ui/PromptController.js.map +1 -1
- package/dist/ui/UnifiedUIRenderer.d.ts +2 -0
- package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
- package/dist/ui/UnifiedUIRenderer.js +8 -1
- package/dist/ui/UnifiedUIRenderer.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/LazyLoader.d.ts +0 -129
- package/dist/core/LazyLoader.d.ts.map +0 -1
- package/dist/core/LazyLoader.js +0 -240
- package/dist/core/LazyLoader.js.map +0 -1
- package/dist/core/alphaZeroOrchestrator.d.ts +0 -140
- package/dist/core/alphaZeroOrchestrator.d.ts.map +0 -1
- package/dist/core/alphaZeroOrchestrator.js +0 -418
- package/dist/core/alphaZeroOrchestrator.js.map +0 -1
- package/dist/core/checkpoint.d.ts +0 -76
- package/dist/core/checkpoint.d.ts.map +0 -1
- package/dist/core/checkpoint.js +0 -278
- package/dist/core/checkpoint.js.map +0 -1
- package/dist/core/costTracker.d.ts +0 -87
- package/dist/core/costTracker.d.ts.map +0 -1
- package/dist/core/costTracker.js +0 -285
- package/dist/core/costTracker.js.map +0 -1
- package/dist/core/errors/errorUtils.d.ts +0 -87
- package/dist/core/errors/errorUtils.d.ts.map +0 -1
- package/dist/core/errors/errorUtils.js +0 -158
- package/dist/core/errors/errorUtils.js.map +0 -1
- package/dist/core/errors/promptBlockErrors.d.ts +0 -9
- package/dist/core/errors/promptBlockErrors.d.ts.map +0 -1
- package/dist/core/errors/promptBlockErrors.js +0 -54
- package/dist/core/errors/promptBlockErrors.js.map +0 -1
- package/dist/core/isolatedVerifier.d.ts +0 -40
- package/dist/core/isolatedVerifier.d.ts.map +0 -1
- package/dist/core/isolatedVerifier.js +0 -129
- package/dist/core/isolatedVerifier.js.map +0 -1
- package/dist/core/responseVerifier.d.ts +0 -98
- package/dist/core/responseVerifier.d.ts.map +0 -1
- package/dist/core/responseVerifier.js +0 -509
- package/dist/core/responseVerifier.js.map +0 -1
- package/dist/core/securityAssessment.d.ts +0 -91
- package/dist/core/securityAssessment.d.ts.map +0 -1
- package/dist/core/securityAssessment.js +0 -580
- package/dist/core/securityAssessment.js.map +0 -1
- package/dist/core/verification.d.ts +0 -137
- package/dist/core/verification.d.ts.map +0 -1
- package/dist/core/verification.js +0 -323
- package/dist/core/verification.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"}
|