erosolar-cli 1.7.14 → 1.7.15
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/dist/core/responseVerifier.d.ts +79 -0
- package/dist/core/responseVerifier.d.ts.map +1 -0
- package/dist/core/responseVerifier.js +443 -0
- package/dist/core/responseVerifier.js.map +1 -0
- package/dist/shell/interactiveShell.d.ts +5 -0
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +38 -0
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/ui/ShellUIAdapter.d.ts +3 -0
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +4 -10
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/dist/ui/persistentPrompt.d.ts +4 -0
- package/dist/ui/persistentPrompt.d.ts.map +1 -1
- package/dist/ui/persistentPrompt.js +10 -11
- package/dist/ui/persistentPrompt.js.map +1 -1
- package/package.json +1 -1
- package/dist/bin/core/agent.js +0 -362
- package/dist/bin/core/agentProfileManifest.js +0 -187
- package/dist/bin/core/agentProfiles.js +0 -34
- package/dist/bin/core/agentRulebook.js +0 -135
- package/dist/bin/core/agentSchemaLoader.js +0 -233
- package/dist/bin/core/contextManager.js +0 -412
- package/dist/bin/core/contextWindow.js +0 -122
- package/dist/bin/core/customCommands.js +0 -80
- package/dist/bin/core/errors/apiKeyErrors.js +0 -114
- package/dist/bin/core/errors/errorTypes.js +0 -340
- package/dist/bin/core/errors/safetyValidator.js +0 -304
- package/dist/bin/core/errors.js +0 -32
- package/dist/bin/core/modelDiscovery.js +0 -755
- package/dist/bin/core/preferences.js +0 -224
- package/dist/bin/core/schemaValidator.js +0 -92
- package/dist/bin/core/secretStore.js +0 -199
- package/dist/bin/core/sessionStore.js +0 -187
- package/dist/bin/core/toolRuntime.js +0 -290
- package/dist/bin/core/types.js +0 -1
- package/dist/bin/shell/bracketedPasteManager.js +0 -350
- package/dist/bin/shell/fileChangeTracker.js +0 -65
- package/dist/bin/shell/interactiveShell.js +0 -2908
- package/dist/bin/shell/liveStatus.js +0 -78
- package/dist/bin/shell/shellApp.js +0 -290
- package/dist/bin/shell/systemPrompt.js +0 -60
- package/dist/bin/shell/updateManager.js +0 -108
- package/dist/bin/ui/ShellUIAdapter.js +0 -459
- package/dist/bin/ui/UnifiedUIController.js +0 -183
- package/dist/bin/ui/animation/AnimationScheduler.js +0 -430
- package/dist/bin/ui/codeHighlighter.js +0 -854
- package/dist/bin/ui/designSystem.js +0 -121
- package/dist/bin/ui/display.js +0 -1222
- package/dist/bin/ui/interrupts/InterruptManager.js +0 -437
- package/dist/bin/ui/layout.js +0 -139
- package/dist/bin/ui/orchestration/StatusOrchestrator.js +0 -403
- package/dist/bin/ui/outputMode.js +0 -38
- package/dist/bin/ui/persistentPrompt.js +0 -183
- package/dist/bin/ui/richText.js +0 -338
- package/dist/bin/ui/shortcutsHelp.js +0 -87
- package/dist/bin/ui/telemetry/UITelemetry.js +0 -443
- package/dist/bin/ui/textHighlighter.js +0 -210
- package/dist/bin/ui/theme.js +0 -116
- package/dist/bin/ui/toolDisplay.js +0 -423
- package/dist/bin/ui/toolDisplayAdapter.js +0 -357
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Response Verification System
|
|
3
|
+
*
|
|
4
|
+
* Automatically verifies assistant claims by:
|
|
5
|
+
* 1. Extracting verifiable claims from responses
|
|
6
|
+
* 2. Generating runtime verification tests
|
|
7
|
+
* 3. Executing tests to verify claims
|
|
8
|
+
* 4. Reporting verification results
|
|
9
|
+
*
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Types of claims that can be verified
|
|
14
|
+
*/
|
|
15
|
+
export type ClaimType = 'file_created' | 'file_modified' | 'file_deleted' | 'command_executed' | 'code_compiles' | 'tests_pass' | 'content_contains' | 'dependency_installed' | 'service_running' | 'url_accessible' | 'git_committed' | 'package_published';
|
|
16
|
+
/**
|
|
17
|
+
* A verifiable claim extracted from assistant response
|
|
18
|
+
*/
|
|
19
|
+
export interface VerifiableClaim {
|
|
20
|
+
type: ClaimType;
|
|
21
|
+
description: string;
|
|
22
|
+
evidence: string;
|
|
23
|
+
params: {
|
|
24
|
+
path?: string;
|
|
25
|
+
command?: string;
|
|
26
|
+
hash?: string;
|
|
27
|
+
version?: string;
|
|
28
|
+
count?: number;
|
|
29
|
+
[key: string]: unknown;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Result of verifying a claim
|
|
34
|
+
*/
|
|
35
|
+
export interface ClaimVerificationResult {
|
|
36
|
+
claim: VerifiableClaim;
|
|
37
|
+
verified: boolean;
|
|
38
|
+
confidence: 'high' | 'medium' | 'low';
|
|
39
|
+
evidence: string;
|
|
40
|
+
error?: string;
|
|
41
|
+
timestamp: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Overall verification report
|
|
45
|
+
*/
|
|
46
|
+
export interface VerificationReport {
|
|
47
|
+
responseId: string;
|
|
48
|
+
timestamp: string;
|
|
49
|
+
claims: VerifiableClaim[];
|
|
50
|
+
results: ClaimVerificationResult[];
|
|
51
|
+
summary: {
|
|
52
|
+
total: number;
|
|
53
|
+
verified: number;
|
|
54
|
+
failed: number;
|
|
55
|
+
inconclusive: number;
|
|
56
|
+
};
|
|
57
|
+
overallVerdict: 'verified' | 'partially_verified' | 'unverified' | 'contradicted';
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Extract verifiable claims from an assistant response
|
|
61
|
+
*/
|
|
62
|
+
export declare function extractClaims(response: string): VerifiableClaim[];
|
|
63
|
+
/**
|
|
64
|
+
* Generate a verification test for a claim
|
|
65
|
+
*/
|
|
66
|
+
export declare function generateVerificationTest(claim: VerifiableClaim): () => Promise<ClaimVerificationResult>;
|
|
67
|
+
/**
|
|
68
|
+
* Verify all claims in an assistant response
|
|
69
|
+
*/
|
|
70
|
+
export declare function verifyResponse(response: string, responseId?: string): Promise<VerificationReport>;
|
|
71
|
+
/**
|
|
72
|
+
* Format a verification report for display
|
|
73
|
+
*/
|
|
74
|
+
export declare function formatVerificationReport(report: VerificationReport): string;
|
|
75
|
+
/**
|
|
76
|
+
* Quick verification - returns true if response claims are valid
|
|
77
|
+
*/
|
|
78
|
+
export declare function quickVerify(response: string): Promise<boolean>;
|
|
79
|
+
//# sourceMappingURL=responseVerifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responseVerifier.d.ts","sourceRoot":"","sources":["../../src/core/responseVerifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,eAAe,GACf,cAAc,GACd,kBAAkB,GAClB,eAAe,GACf,YAAY,GACZ,kBAAkB,GAClB,sBAAsB,GACtB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,mBAAmB,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,cAAc,EAAE,UAAU,GAAG,oBAAoB,GAAG,YAAY,GAAG,cAAc,CAAC;CACnF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAsJjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAqMvG;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAiD7B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAuC3E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpE"}
|
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Response Verification System
|
|
3
|
+
*
|
|
4
|
+
* Automatically verifies assistant claims by:
|
|
5
|
+
* 1. Extracting verifiable claims from responses
|
|
6
|
+
* 2. Generating runtime verification tests
|
|
7
|
+
* 3. Executing tests to verify claims
|
|
8
|
+
* 4. Reporting verification results
|
|
9
|
+
*
|
|
10
|
+
* @license MIT
|
|
11
|
+
*/
|
|
12
|
+
import { exec } from 'node:child_process';
|
|
13
|
+
import { promisify } from 'node:util';
|
|
14
|
+
import * as fs from 'node:fs/promises';
|
|
15
|
+
import * as path from 'node:path';
|
|
16
|
+
const execAsync = promisify(exec);
|
|
17
|
+
/**
|
|
18
|
+
* Extract verifiable claims from an assistant response
|
|
19
|
+
*/
|
|
20
|
+
export function extractClaims(response) {
|
|
21
|
+
const claims = [];
|
|
22
|
+
// Pattern: File creation claims
|
|
23
|
+
// "I created file X", "Created X", "Wrote to X", "I've written X"
|
|
24
|
+
const fileCreationPatterns = [
|
|
25
|
+
/(?:I\s+)?(?:created|wrote|written|generated|added)\s+(?:a\s+)?(?:new\s+)?(?:file\s+)?[`"']?([^\s`"']+\.[a-zA-Z]+)[`"']?/gi,
|
|
26
|
+
/(?:File|Created)\s+[`"']?([^\s`"']+\.[a-zA-Z]+)[`"']?/gi,
|
|
27
|
+
];
|
|
28
|
+
for (const pattern of fileCreationPatterns) {
|
|
29
|
+
let match;
|
|
30
|
+
while ((match = pattern.exec(response)) !== null) {
|
|
31
|
+
const filePath = match[1];
|
|
32
|
+
if (filePath && !claims.some(c => c.type === 'file_created' && c.params.path === filePath)) {
|
|
33
|
+
claims.push({
|
|
34
|
+
type: 'file_created',
|
|
35
|
+
description: `File ${filePath} was created`,
|
|
36
|
+
evidence: match[0],
|
|
37
|
+
params: { path: filePath }
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Pattern: File modification claims
|
|
43
|
+
// "I modified X", "Updated X", "Changed X", "Edited X"
|
|
44
|
+
const fileModPatterns = [
|
|
45
|
+
/(?:I\s+)?(?:modified|updated|changed|edited|fixed)\s+[`"']?([^\s`"']+\.[a-zA-Z]+)[`"']?/gi,
|
|
46
|
+
/(?:Updated|Modified|Edited)\s+[`"']?([^\s`"']+\.[a-zA-Z]+)[`"']?/gi,
|
|
47
|
+
];
|
|
48
|
+
for (const pattern of fileModPatterns) {
|
|
49
|
+
let match;
|
|
50
|
+
while ((match = pattern.exec(response)) !== null) {
|
|
51
|
+
const filePath = match[1];
|
|
52
|
+
if (filePath && !claims.some(c => c.params.path === filePath)) {
|
|
53
|
+
claims.push({
|
|
54
|
+
type: 'file_modified',
|
|
55
|
+
description: `File ${filePath} was modified`,
|
|
56
|
+
evidence: match[0],
|
|
57
|
+
params: { path: filePath }
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Pattern: Command execution claims
|
|
63
|
+
// "I ran X", "Executed X", "Running X completed"
|
|
64
|
+
const cmdPatterns = [
|
|
65
|
+
/(?:I\s+)?(?:ran|executed|run)\s+`([^`]+)`/gi,
|
|
66
|
+
/(?:Running|Executed)\s+`([^`]+)`/gi,
|
|
67
|
+
/`([^`]+)`\s+(?:completed|succeeded|finished)/gi,
|
|
68
|
+
];
|
|
69
|
+
for (const pattern of cmdPatterns) {
|
|
70
|
+
let match;
|
|
71
|
+
while ((match = pattern.exec(response)) !== null) {
|
|
72
|
+
const command = match[1];
|
|
73
|
+
if (command) {
|
|
74
|
+
claims.push({
|
|
75
|
+
type: 'command_executed',
|
|
76
|
+
description: `Command "${command}" was executed`,
|
|
77
|
+
evidence: match[0],
|
|
78
|
+
params: { command }
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Pattern: Build/compile success claims
|
|
84
|
+
const buildPatterns = [
|
|
85
|
+
/(?:build|compilation|type[- ]?check)\s+(?:passed|succeeded|completed|successful)/gi,
|
|
86
|
+
/(?:successfully|passed)\s+(?:build|compilation|type[- ]?check)/gi,
|
|
87
|
+
/no\s+(?:type\s+)?errors/gi,
|
|
88
|
+
];
|
|
89
|
+
for (const pattern of buildPatterns) {
|
|
90
|
+
if (pattern.test(response)) {
|
|
91
|
+
claims.push({
|
|
92
|
+
type: 'code_compiles',
|
|
93
|
+
description: 'Code compiles without errors',
|
|
94
|
+
evidence: response.match(pattern)?.[0] || '',
|
|
95
|
+
params: {}
|
|
96
|
+
});
|
|
97
|
+
break; // Only add once
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Pattern: Test pass claims
|
|
101
|
+
const testPatterns = [
|
|
102
|
+
/(?:all\s+)?tests?\s+(?:pass|passed|passing|succeeded)/gi,
|
|
103
|
+
/(?:passed|passing)\s+(?:all\s+)?tests?/gi,
|
|
104
|
+
/(\d+)\s+tests?\s+passed/gi,
|
|
105
|
+
];
|
|
106
|
+
for (const pattern of testPatterns) {
|
|
107
|
+
const match = pattern.exec(response);
|
|
108
|
+
if (match) {
|
|
109
|
+
claims.push({
|
|
110
|
+
type: 'tests_pass',
|
|
111
|
+
description: 'Tests pass',
|
|
112
|
+
evidence: match[0],
|
|
113
|
+
params: { count: match[1] ? parseInt(match[1], 10) : undefined }
|
|
114
|
+
});
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Pattern: Git commit claims
|
|
119
|
+
const gitPatterns = [
|
|
120
|
+
/committed\s+(?:with\s+message\s+)?["']?([^"'\n]+)["']?/gi,
|
|
121
|
+
/\[(?:main|master|[a-zA-Z0-9-]+)\s+([a-f0-9]+)\]/gi,
|
|
122
|
+
/git\s+commit.*-m\s+["']([^"']+)["']/gi,
|
|
123
|
+
];
|
|
124
|
+
for (const pattern of gitPatterns) {
|
|
125
|
+
const match = pattern.exec(response);
|
|
126
|
+
if (match) {
|
|
127
|
+
claims.push({
|
|
128
|
+
type: 'git_committed',
|
|
129
|
+
description: 'Changes were committed',
|
|
130
|
+
evidence: match[0],
|
|
131
|
+
params: { hash: match[1] }
|
|
132
|
+
});
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Pattern: Package publish claims
|
|
137
|
+
const publishPatterns = [
|
|
138
|
+
/published\s+(?:to\s+)?(?:npm|registry)/gi,
|
|
139
|
+
/\+\s+[a-z@/-]+@(\d+\.\d+\.\d+)/gi,
|
|
140
|
+
/npm\s+publish/gi,
|
|
141
|
+
];
|
|
142
|
+
for (const pattern of publishPatterns) {
|
|
143
|
+
const match = pattern.exec(response);
|
|
144
|
+
if (match) {
|
|
145
|
+
claims.push({
|
|
146
|
+
type: 'package_published',
|
|
147
|
+
description: 'Package was published',
|
|
148
|
+
evidence: match[0],
|
|
149
|
+
params: { version: match[1] }
|
|
150
|
+
});
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return claims;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Generate a verification test for a claim
|
|
158
|
+
*/
|
|
159
|
+
export function generateVerificationTest(claim) {
|
|
160
|
+
const baseResult = {
|
|
161
|
+
claim,
|
|
162
|
+
timestamp: new Date().toISOString()
|
|
163
|
+
};
|
|
164
|
+
switch (claim.type) {
|
|
165
|
+
case 'file_created':
|
|
166
|
+
case 'file_modified':
|
|
167
|
+
return async () => {
|
|
168
|
+
const filePath = claim.params.path;
|
|
169
|
+
try {
|
|
170
|
+
const resolvedPath = path.isAbsolute(filePath) ? filePath : path.resolve(process.cwd(), filePath);
|
|
171
|
+
const stats = await fs.stat(resolvedPath);
|
|
172
|
+
const recentlyModified = (Date.now() - stats.mtimeMs) < 5 * 60 * 1000; // Within 5 minutes
|
|
173
|
+
return {
|
|
174
|
+
...baseResult,
|
|
175
|
+
verified: stats.isFile(),
|
|
176
|
+
confidence: recentlyModified ? 'high' : 'medium',
|
|
177
|
+
evidence: `File exists. Size: ${stats.size} bytes. Modified: ${stats.mtime.toISOString()}`
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
return {
|
|
182
|
+
...baseResult,
|
|
183
|
+
verified: false,
|
|
184
|
+
confidence: 'high',
|
|
185
|
+
evidence: 'File does not exist',
|
|
186
|
+
error: err instanceof Error ? err.message : 'Unknown error'
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
case 'file_deleted':
|
|
191
|
+
return async () => {
|
|
192
|
+
const filePath = claim.params.path;
|
|
193
|
+
try {
|
|
194
|
+
const resolvedPath = path.isAbsolute(filePath) ? filePath : path.resolve(process.cwd(), filePath);
|
|
195
|
+
await fs.stat(resolvedPath);
|
|
196
|
+
return {
|
|
197
|
+
...baseResult,
|
|
198
|
+
verified: false,
|
|
199
|
+
confidence: 'high',
|
|
200
|
+
evidence: 'File still exists (deletion claim is false)'
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return {
|
|
205
|
+
...baseResult,
|
|
206
|
+
verified: true,
|
|
207
|
+
confidence: 'high',
|
|
208
|
+
evidence: 'File does not exist (deletion verified)'
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
case 'code_compiles':
|
|
213
|
+
return async () => {
|
|
214
|
+
try {
|
|
215
|
+
const { stdout, stderr } = await execAsync('npm run type-check 2>&1 || npm run build 2>&1', {
|
|
216
|
+
timeout: 60000,
|
|
217
|
+
cwd: process.cwd()
|
|
218
|
+
});
|
|
219
|
+
const output = stdout + stderr;
|
|
220
|
+
const hasErrors = /error/i.test(output) && !/0 errors/i.test(output);
|
|
221
|
+
return {
|
|
222
|
+
...baseResult,
|
|
223
|
+
verified: !hasErrors,
|
|
224
|
+
confidence: 'high',
|
|
225
|
+
evidence: hasErrors ? `Compilation errors found: ${output.slice(0, 500)}` : 'Code compiles successfully'
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
return {
|
|
230
|
+
...baseResult,
|
|
231
|
+
verified: false,
|
|
232
|
+
confidence: 'high',
|
|
233
|
+
evidence: 'Compilation check failed',
|
|
234
|
+
error: err instanceof Error ? err.message : 'Unknown error'
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
case 'tests_pass':
|
|
239
|
+
return async () => {
|
|
240
|
+
try {
|
|
241
|
+
const { stdout, stderr } = await execAsync('npm test 2>&1', {
|
|
242
|
+
timeout: 120000,
|
|
243
|
+
cwd: process.cwd()
|
|
244
|
+
});
|
|
245
|
+
const output = stdout + stderr;
|
|
246
|
+
const hasFailed = /fail|error/i.test(output) && !/0 failed/i.test(output);
|
|
247
|
+
return {
|
|
248
|
+
...baseResult,
|
|
249
|
+
verified: !hasFailed,
|
|
250
|
+
confidence: 'high',
|
|
251
|
+
evidence: hasFailed ? `Test failures: ${output.slice(0, 500)}` : 'All tests pass'
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
catch (err) {
|
|
255
|
+
return {
|
|
256
|
+
...baseResult,
|
|
257
|
+
verified: false,
|
|
258
|
+
confidence: 'high',
|
|
259
|
+
evidence: 'Test execution failed',
|
|
260
|
+
error: err instanceof Error ? err.message : 'Unknown error'
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
case 'git_committed':
|
|
265
|
+
return async () => {
|
|
266
|
+
try {
|
|
267
|
+
const { stdout } = await execAsync('git log -1 --oneline', {
|
|
268
|
+
timeout: 5000,
|
|
269
|
+
cwd: process.cwd()
|
|
270
|
+
});
|
|
271
|
+
const hash = claim.params.hash;
|
|
272
|
+
if (hash && stdout.includes(hash.slice(0, 7))) {
|
|
273
|
+
return {
|
|
274
|
+
...baseResult,
|
|
275
|
+
verified: true,
|
|
276
|
+
confidence: 'high',
|
|
277
|
+
evidence: `Commit found: ${stdout.trim()}`
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
// Check if there's a recent commit
|
|
281
|
+
const { stdout: logOutput } = await execAsync('git log -1 --format="%H %s"', {
|
|
282
|
+
timeout: 5000
|
|
283
|
+
});
|
|
284
|
+
return {
|
|
285
|
+
...baseResult,
|
|
286
|
+
verified: true,
|
|
287
|
+
confidence: 'medium',
|
|
288
|
+
evidence: `Most recent commit: ${logOutput.trim()}`
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
catch (err) {
|
|
292
|
+
return {
|
|
293
|
+
...baseResult,
|
|
294
|
+
verified: false,
|
|
295
|
+
confidence: 'high',
|
|
296
|
+
evidence: 'Git check failed',
|
|
297
|
+
error: err instanceof Error ? err.message : 'Unknown error'
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
case 'package_published':
|
|
302
|
+
return async () => {
|
|
303
|
+
try {
|
|
304
|
+
// Read package.json to get name and version
|
|
305
|
+
const pkgPath = path.resolve(process.cwd(), 'package.json');
|
|
306
|
+
const pkgContent = await fs.readFile(pkgPath, 'utf-8');
|
|
307
|
+
const pkg = JSON.parse(pkgContent);
|
|
308
|
+
const { stdout } = await execAsync(`npm view ${pkg.name}@${pkg.version} version 2>&1`, {
|
|
309
|
+
timeout: 10000
|
|
310
|
+
});
|
|
311
|
+
const published = stdout.trim() === pkg.version;
|
|
312
|
+
return {
|
|
313
|
+
...baseResult,
|
|
314
|
+
verified: published,
|
|
315
|
+
confidence: 'high',
|
|
316
|
+
evidence: published ? `${pkg.name}@${pkg.version} found on npm` : 'Version not found on npm'
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
catch (err) {
|
|
320
|
+
return {
|
|
321
|
+
...baseResult,
|
|
322
|
+
verified: false,
|
|
323
|
+
confidence: 'medium',
|
|
324
|
+
evidence: 'Could not verify npm publication',
|
|
325
|
+
error: err instanceof Error ? err.message : 'Unknown error'
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
case 'command_executed':
|
|
330
|
+
// Can't really verify past command execution, just acknowledge
|
|
331
|
+
return async () => ({
|
|
332
|
+
...baseResult,
|
|
333
|
+
verified: true, // Assume true since we can't replay
|
|
334
|
+
confidence: 'low',
|
|
335
|
+
evidence: 'Command execution cannot be retroactively verified'
|
|
336
|
+
});
|
|
337
|
+
default:
|
|
338
|
+
return async () => ({
|
|
339
|
+
...baseResult,
|
|
340
|
+
verified: false,
|
|
341
|
+
confidence: 'low',
|
|
342
|
+
evidence: `Unknown claim type: ${claim.type}`
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Verify all claims in an assistant response
|
|
348
|
+
*/
|
|
349
|
+
export async function verifyResponse(response, responseId) {
|
|
350
|
+
const claims = extractClaims(response);
|
|
351
|
+
const results = [];
|
|
352
|
+
for (const claim of claims) {
|
|
353
|
+
const test = generateVerificationTest(claim);
|
|
354
|
+
try {
|
|
355
|
+
const result = await test();
|
|
356
|
+
results.push(result);
|
|
357
|
+
}
|
|
358
|
+
catch (err) {
|
|
359
|
+
results.push({
|
|
360
|
+
claim,
|
|
361
|
+
verified: false,
|
|
362
|
+
confidence: 'low',
|
|
363
|
+
evidence: 'Verification test failed to execute',
|
|
364
|
+
error: err instanceof Error ? err.message : 'Unknown error',
|
|
365
|
+
timestamp: new Date().toISOString()
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
const verified = results.filter(r => r.verified).length;
|
|
370
|
+
const failed = results.filter(r => !r.verified && r.confidence === 'high').length;
|
|
371
|
+
const inconclusive = results.filter(r => !r.verified && r.confidence !== 'high').length;
|
|
372
|
+
let overallVerdict;
|
|
373
|
+
if (failed > 0) {
|
|
374
|
+
overallVerdict = 'contradicted';
|
|
375
|
+
}
|
|
376
|
+
else if (verified === claims.length && claims.length > 0) {
|
|
377
|
+
overallVerdict = 'verified';
|
|
378
|
+
}
|
|
379
|
+
else if (verified > 0) {
|
|
380
|
+
overallVerdict = 'partially_verified';
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
overallVerdict = 'unverified';
|
|
384
|
+
}
|
|
385
|
+
return {
|
|
386
|
+
responseId: responseId || `response-${Date.now()}`,
|
|
387
|
+
timestamp: new Date().toISOString(),
|
|
388
|
+
claims,
|
|
389
|
+
results,
|
|
390
|
+
summary: {
|
|
391
|
+
total: claims.length,
|
|
392
|
+
verified,
|
|
393
|
+
failed,
|
|
394
|
+
inconclusive
|
|
395
|
+
},
|
|
396
|
+
overallVerdict
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Format a verification report for display
|
|
401
|
+
*/
|
|
402
|
+
export function formatVerificationReport(report) {
|
|
403
|
+
const lines = [];
|
|
404
|
+
lines.push('═══════════════════════════════════════════════════════════');
|
|
405
|
+
lines.push(' RESPONSE VERIFICATION REPORT');
|
|
406
|
+
lines.push('═══════════════════════════════════════════════════════════');
|
|
407
|
+
lines.push('');
|
|
408
|
+
const verdictEmoji = {
|
|
409
|
+
verified: '✅',
|
|
410
|
+
partially_verified: '⚠️',
|
|
411
|
+
unverified: '❓',
|
|
412
|
+
contradicted: '❌'
|
|
413
|
+
};
|
|
414
|
+
lines.push(`Verdict: ${verdictEmoji[report.overallVerdict]} ${report.overallVerdict.toUpperCase()}`);
|
|
415
|
+
lines.push(`Claims: ${report.summary.total} total, ${report.summary.verified} verified, ${report.summary.failed} failed`);
|
|
416
|
+
lines.push('');
|
|
417
|
+
if (report.results.length > 0) {
|
|
418
|
+
lines.push('Verification Details:');
|
|
419
|
+
lines.push('─────────────────────');
|
|
420
|
+
for (const result of report.results) {
|
|
421
|
+
const icon = result.verified ? '✅' : (result.confidence === 'high' ? '❌' : '❓');
|
|
422
|
+
lines.push(`${icon} ${result.claim.description}`);
|
|
423
|
+
lines.push(` Evidence: ${result.evidence.slice(0, 100)}`);
|
|
424
|
+
if (result.error) {
|
|
425
|
+
lines.push(` Error: ${result.error}`);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
lines.push('No verifiable claims found in response.');
|
|
431
|
+
}
|
|
432
|
+
lines.push('');
|
|
433
|
+
lines.push('═══════════════════════════════════════════════════════════');
|
|
434
|
+
return lines.join('\n');
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Quick verification - returns true if response claims are valid
|
|
438
|
+
*/
|
|
439
|
+
export async function quickVerify(response) {
|
|
440
|
+
const report = await verifyResponse(response);
|
|
441
|
+
return report.overallVerdict === 'verified' || report.overallVerdict === 'partially_verified';
|
|
442
|
+
}
|
|
443
|
+
//# sourceMappingURL=responseVerifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responseVerifier.js","sourceRoot":"","sources":["../../src/core/responseVerifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,6 +74,7 @@ export declare class InteractiveShell {
|
|
|
74
74
|
private readonly sessionStartTime;
|
|
75
75
|
private activeSessionTitle;
|
|
76
76
|
private sessionResumeNotice;
|
|
77
|
+
private lastAssistantResponse;
|
|
77
78
|
private readonly customCommands;
|
|
78
79
|
private readonly customCommandMap;
|
|
79
80
|
private readonly sessionRestoreConfig;
|
|
@@ -173,6 +174,10 @@ export declare class InteractiveShell {
|
|
|
173
174
|
private handleShortcutsCommand;
|
|
174
175
|
private showFileChangeSummary;
|
|
175
176
|
private showAlphaZeroMetrics;
|
|
177
|
+
/**
|
|
178
|
+
* Handle /verify command - verify the last assistant response
|
|
179
|
+
*/
|
|
180
|
+
private handleVerifyCommand;
|
|
176
181
|
private showImprovementSuggestions;
|
|
177
182
|
private showPluginStatus;
|
|
178
183
|
private showSessionList;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactiveShell.d.ts","sourceRoot":"","sources":["../../src/shell/interactiveShell.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAiCtE,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAI/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAyB,KAAK,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAQtF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"interactiveShell.d.ts","sourceRoot":"","sources":["../../src/shell/interactiveShell.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ import { PersistentPrompt, PinnedChatBox } from '../ui/persistentPrompt.js';
|
|
|
24
24
|
import { formatShortcutsHelp } from '../ui/shortcutsHelp.js';
|
|
25
25
|
import { MetricsTracker } from '../alpha-zero/index.js';
|
|
26
26
|
import { listAvailablePlugins } from '../plugins/index.js';
|
|
27
|
+
import { verifyResponse, formatVerificationReport, } from '../core/responseVerifier.js';
|
|
27
28
|
const DROPDOWN_COLORS = [
|
|
28
29
|
theme.primary,
|
|
29
30
|
theme.info,
|
|
@@ -110,6 +111,7 @@ export class InteractiveShell {
|
|
|
110
111
|
sessionStartTime = Date.now();
|
|
111
112
|
activeSessionTitle = null;
|
|
112
113
|
sessionResumeNotice = null;
|
|
114
|
+
lastAssistantResponse = null;
|
|
113
115
|
customCommands;
|
|
114
116
|
customCommandMap;
|
|
115
117
|
sessionRestoreConfig;
|
|
@@ -1185,6 +1187,9 @@ export class InteractiveShell {
|
|
|
1185
1187
|
case '/discover':
|
|
1186
1188
|
await this.discoverModelsCommand();
|
|
1187
1189
|
break;
|
|
1190
|
+
case '/verify':
|
|
1191
|
+
await this.handleVerifyCommand();
|
|
1192
|
+
break;
|
|
1188
1193
|
default:
|
|
1189
1194
|
if (!(await this.tryCustomSlashCommand(command, input))) {
|
|
1190
1195
|
display.showWarning(`Unknown command "${command}".`);
|
|
@@ -1535,6 +1540,37 @@ export class InteractiveShell {
|
|
|
1535
1540
|
const summary = this.alphaZeroMetrics.getPerformanceSummary();
|
|
1536
1541
|
display.showSystemMessage(summary);
|
|
1537
1542
|
}
|
|
1543
|
+
/**
|
|
1544
|
+
* Handle /verify command - verify the last assistant response
|
|
1545
|
+
*/
|
|
1546
|
+
async handleVerifyCommand() {
|
|
1547
|
+
if (!this.lastAssistantResponse) {
|
|
1548
|
+
display.showWarning('No assistant response to verify. Send a message first.');
|
|
1549
|
+
return;
|
|
1550
|
+
}
|
|
1551
|
+
display.showSystemMessage('Verifying last response...\n');
|
|
1552
|
+
try {
|
|
1553
|
+
const report = await verifyResponse(this.lastAssistantResponse);
|
|
1554
|
+
const formattedReport = formatVerificationReport(report);
|
|
1555
|
+
display.showSystemMessage(formattedReport);
|
|
1556
|
+
// Show actionable summary
|
|
1557
|
+
if (report.overallVerdict === 'contradicted') {
|
|
1558
|
+
display.showError('Some claims in the response could not be verified!');
|
|
1559
|
+
}
|
|
1560
|
+
else if (report.overallVerdict === 'verified') {
|
|
1561
|
+
display.showInfo('All verifiable claims in the response were verified.');
|
|
1562
|
+
}
|
|
1563
|
+
else if (report.overallVerdict === 'partially_verified') {
|
|
1564
|
+
display.showWarning('Some claims were verified, but not all.');
|
|
1565
|
+
}
|
|
1566
|
+
else {
|
|
1567
|
+
display.showInfo('No verifiable claims found in the response.');
|
|
1568
|
+
}
|
|
1569
|
+
}
|
|
1570
|
+
catch (err) {
|
|
1571
|
+
display.showError(`Verification failed: ${err instanceof Error ? err.message : 'Unknown error'}`);
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1538
1574
|
showImprovementSuggestions() {
|
|
1539
1575
|
const suggestions = this.alphaZeroMetrics.getImprovementSuggestions();
|
|
1540
1576
|
if (suggestions.length === 0) {
|
|
@@ -2723,6 +2759,8 @@ What's the next action?`;
|
|
|
2723
2759
|
if (finalContent) {
|
|
2724
2760
|
display.showAssistantMessage(finalContent, enriched);
|
|
2725
2761
|
}
|
|
2762
|
+
// Store last response for verification
|
|
2763
|
+
this.lastAssistantResponse = content;
|
|
2726
2764
|
// Show status line at end (Claude Code style: "Session 5m • Context X% used • Ready for prompts (2s)")
|
|
2727
2765
|
display.stopThinking();
|
|
2728
2766
|
// Calculate context usage and session time
|