erosolar-cli 1.6.3 → 1.6.5
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/resultVerification.d.ts +138 -0
- package/dist/core/resultVerification.d.ts.map +1 -0
- package/dist/core/resultVerification.js +465 -0
- package/dist/core/resultVerification.js.map +1 -0
- package/dist/plugins/providers/anthropic/index.d.ts +9 -0
- package/dist/plugins/providers/anthropic/index.d.ts.map +1 -1
- package/dist/plugins/providers/anthropic/index.js +13 -1
- package/dist/plugins/providers/anthropic/index.js.map +1 -1
- package/dist/plugins/providers/deepseek/index.d.ts +9 -0
- package/dist/plugins/providers/deepseek/index.d.ts.map +1 -1
- package/dist/plugins/providers/deepseek/index.js +28 -1
- package/dist/plugins/providers/deepseek/index.js.map +1 -1
- package/dist/plugins/providers/google/index.d.ts +9 -0
- package/dist/plugins/providers/google/index.d.ts.map +1 -1
- package/dist/plugins/providers/google/index.js +13 -1
- package/dist/plugins/providers/google/index.js.map +1 -1
- package/dist/plugins/providers/ollama/index.d.ts +5 -1
- package/dist/plugins/providers/ollama/index.d.ts.map +1 -1
- package/dist/plugins/providers/ollama/index.js +11 -2
- package/dist/plugins/providers/ollama/index.js.map +1 -1
- package/dist/plugins/providers/openai/index.d.ts +9 -0
- package/dist/plugins/providers/openai/index.d.ts.map +1 -1
- package/dist/plugins/providers/openai/index.js +13 -1
- package/dist/plugins/providers/openai/index.js.map +1 -1
- package/dist/plugins/providers/xai/index.d.ts +9 -0
- package/dist/plugins/providers/xai/index.d.ts.map +1 -1
- package/dist/plugins/providers/xai/index.js +15 -1
- package/dist/plugins/providers/xai/index.js.map +1 -1
- package/dist/providers/anthropicProvider.d.ts +7 -0
- package/dist/providers/anthropicProvider.d.ts.map +1 -1
- package/dist/providers/anthropicProvider.js +87 -9
- package/dist/providers/anthropicProvider.js.map +1 -1
- package/dist/providers/googleProvider.d.ts +17 -0
- package/dist/providers/googleProvider.d.ts.map +1 -1
- package/dist/providers/googleProvider.js +113 -32
- package/dist/providers/googleProvider.js.map +1 -1
- package/dist/providers/openaiChatCompletionsProvider.d.ts +26 -0
- package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -1
- package/dist/providers/openaiChatCompletionsProvider.js +162 -27
- package/dist/providers/openaiChatCompletionsProvider.js.map +1 -1
- package/dist/providers/openaiResponsesProvider.d.ts +17 -0
- package/dist/providers/openaiResponsesProvider.d.ts.map +1 -1
- package/dist/providers/openaiResponsesProvider.js +109 -25
- package/dist/providers/openaiResponsesProvider.js.map +1 -1
- package/dist/providers/resilientProvider.d.ts.map +1 -1
- package/dist/providers/resilientProvider.js +47 -1
- package/dist/providers/resilientProvider.js.map +1 -1
- package/dist/shell/interactiveShell.d.ts +6 -0
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +48 -0
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/taskCompletionDetector.d.ts +4 -0
- package/dist/shell/taskCompletionDetector.d.ts.map +1 -1
- package/dist/shell/taskCompletionDetector.js +27 -1
- package/dist/shell/taskCompletionDetector.js.map +1 -1
- package/dist/tools/bashTools.d.ts.map +1 -1
- package/dist/tools/bashTools.js +26 -8
- package/dist/tools/bashTools.js.map +1 -1
- package/dist/tools/browserAutomationTools.d.ts.map +1 -1
- package/dist/tools/browserAutomationTools.js +9 -1
- package/dist/tools/browserAutomationTools.js.map +1 -1
- package/dist/tools/cloudTools.d.ts.map +1 -1
- package/dist/tools/cloudTools.js +436 -35
- package/dist/tools/cloudTools.js.map +1 -1
- package/dist/tools/codeGenerationTools.d.ts.map +1 -1
- package/dist/tools/codeGenerationTools.js +77 -7
- package/dist/tools/codeGenerationTools.js.map +1 -1
- package/dist/ui/persistentPrompt.d.ts +10 -0
- package/dist/ui/persistentPrompt.d.ts.map +1 -1
- package/dist/ui/persistentPrompt.js +82 -18
- package/dist/ui/persistentPrompt.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result Verification Framework
|
|
3
|
+
*
|
|
4
|
+
* Prevents erosolar-cli from hallucinating success by requiring explicit
|
|
5
|
+
* verification of tool operation outcomes. All critical operations must
|
|
6
|
+
* return structured results with verification status.
|
|
7
|
+
*
|
|
8
|
+
* CRITICAL: LLMs can misinterpret ambiguous output as success.
|
|
9
|
+
* This module ensures clear, unambiguous success/failure signals.
|
|
10
|
+
*
|
|
11
|
+
* @license MIT
|
|
12
|
+
* @author Bo Shang
|
|
13
|
+
*/
|
|
14
|
+
export type VerificationStatus = 'VERIFIED_SUCCESS' | 'VERIFIED_FAILURE' | 'UNVERIFIED' | 'PARTIAL_SUCCESS' | 'REQUIRES_USER_ACTION';
|
|
15
|
+
export interface VerifiedResult {
|
|
16
|
+
/** Clear status for LLM to interpret */
|
|
17
|
+
status: VerificationStatus;
|
|
18
|
+
/** Human-readable summary (first line must state success/failure clearly) */
|
|
19
|
+
summary: string;
|
|
20
|
+
/** Detailed output from the operation */
|
|
21
|
+
details: string;
|
|
22
|
+
/** Specific verification checks that were performed */
|
|
23
|
+
verificationChecks?: VerificationCheck[];
|
|
24
|
+
/** Suggested next steps if operation failed or requires action */
|
|
25
|
+
suggestedActions?: string[];
|
|
26
|
+
/** Timestamp of verification */
|
|
27
|
+
verifiedAt: string;
|
|
28
|
+
/** Time elapsed for operation in ms */
|
|
29
|
+
durationMs?: number;
|
|
30
|
+
}
|
|
31
|
+
export interface VerificationCheck {
|
|
32
|
+
/** What was checked */
|
|
33
|
+
check: string;
|
|
34
|
+
/** Did it pass */
|
|
35
|
+
passed: boolean;
|
|
36
|
+
/** Details about the check result */
|
|
37
|
+
details?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Format a verified result into a clear, unambiguous string for LLM consumption.
|
|
41
|
+
* The format is designed to prevent misinterpretation.
|
|
42
|
+
*/
|
|
43
|
+
export declare function formatVerifiedResult(result: VerifiedResult): string;
|
|
44
|
+
/**
|
|
45
|
+
* Create a verified success result
|
|
46
|
+
*/
|
|
47
|
+
export declare function verifiedSuccess(summary: string, details: string, checks?: VerificationCheck[], durationMs?: number): string;
|
|
48
|
+
/**
|
|
49
|
+
* Create a verified failure result
|
|
50
|
+
*/
|
|
51
|
+
export declare function verifiedFailure(summary: string, details: string, suggestedActions?: string[], checks?: VerificationCheck[], durationMs?: number): string;
|
|
52
|
+
/**
|
|
53
|
+
* Create an unverified result (when we can't confirm success)
|
|
54
|
+
*/
|
|
55
|
+
export declare function unverifiedResult(summary: string, details: string, suggestedActions?: string[], durationMs?: number): string;
|
|
56
|
+
/**
|
|
57
|
+
* Create a partial success result
|
|
58
|
+
*/
|
|
59
|
+
export declare function partialSuccess(summary: string, details: string, checks: VerificationCheck[], suggestedActions?: string[], durationMs?: number): string;
|
|
60
|
+
/**
|
|
61
|
+
* Create a result requiring user action
|
|
62
|
+
*/
|
|
63
|
+
export declare function requiresUserAction(summary: string, details: string, requiredActions: string[], durationMs?: number): string;
|
|
64
|
+
/**
|
|
65
|
+
* Verification patterns for common outputs
|
|
66
|
+
*/
|
|
67
|
+
export declare const OutputPatterns: {
|
|
68
|
+
firebase: {
|
|
69
|
+
success: RegExp[];
|
|
70
|
+
failure: RegExp[];
|
|
71
|
+
authRequired: RegExp[];
|
|
72
|
+
};
|
|
73
|
+
command: {
|
|
74
|
+
success: RegExp[];
|
|
75
|
+
failure: RegExp[];
|
|
76
|
+
};
|
|
77
|
+
npm: {
|
|
78
|
+
success: RegExp[];
|
|
79
|
+
failure: RegExp[];
|
|
80
|
+
};
|
|
81
|
+
git: {
|
|
82
|
+
success: RegExp[];
|
|
83
|
+
failure: RegExp[];
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Normalize text to prevent Unicode lookalike attacks
|
|
88
|
+
* Converts confusable characters (e.g., Cyrillic 'а' -> Latin 'a')
|
|
89
|
+
* This prevents attackers from bypassing pattern detection with visually similar characters
|
|
90
|
+
*/
|
|
91
|
+
export declare function normalizeForPatternMatch(text: string): string;
|
|
92
|
+
/**
|
|
93
|
+
* Analyze output against patterns to determine success/failure
|
|
94
|
+
*
|
|
95
|
+
* CRITICAL: This function is defensive against:
|
|
96
|
+
* 1. Unicode lookalike attacks (Cyrillic/Greek characters that look like Latin)
|
|
97
|
+
* 2. Exit code 0 with hidden failures in output
|
|
98
|
+
* 3. False positives from success words appearing in error messages
|
|
99
|
+
*/
|
|
100
|
+
export declare function analyzeOutput(output: string, patterns: {
|
|
101
|
+
success: RegExp[];
|
|
102
|
+
failure: RegExp[];
|
|
103
|
+
}, exitCode?: number): {
|
|
104
|
+
isSuccess: boolean;
|
|
105
|
+
isFailure: boolean;
|
|
106
|
+
matchedPattern?: string;
|
|
107
|
+
confidence: 'high' | 'medium' | 'low';
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Create a verification check from a command result
|
|
111
|
+
*/
|
|
112
|
+
export declare function createCommandCheck(checkName: string, exitCode: number, output: string, expectedPatterns?: RegExp[]): VerificationCheck;
|
|
113
|
+
/**
|
|
114
|
+
* Verify that a file exists and optionally contains expected content
|
|
115
|
+
*/
|
|
116
|
+
export declare function verifyFileExists(filePath: string, expectedContent?: string | RegExp): Promise<VerificationCheck>;
|
|
117
|
+
/**
|
|
118
|
+
* Verify URL is accessible (for deployment verification)
|
|
119
|
+
*/
|
|
120
|
+
export declare function verifyUrlAccessible(url: string, expectedStatus?: number, timeoutMs?: number): Promise<VerificationCheck>;
|
|
121
|
+
/**
|
|
122
|
+
* Verify a JSON response matches expected structure
|
|
123
|
+
*/
|
|
124
|
+
export declare function verifyJsonEndpoint(url: string, expectedFields: string[], timeoutMs?: number): Promise<VerificationCheck>;
|
|
125
|
+
/**
|
|
126
|
+
* Check if content that would be truncated might contain error indicators
|
|
127
|
+
* Returns a warning message if potential errors are detected in the truncated portion
|
|
128
|
+
*/
|
|
129
|
+
export declare function checkTruncationForErrors(fullContent: string, truncateAt: number): {
|
|
130
|
+
shouldWarn: boolean;
|
|
131
|
+
warning: string;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Safely truncate content with error detection
|
|
135
|
+
* Returns truncated content with appropriate warning if errors might be hidden
|
|
136
|
+
*/
|
|
137
|
+
export declare function safeTruncate(content: string, maxLength: number, _label?: string): string;
|
|
138
|
+
//# sourceMappingURL=resultVerification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resultVerification.d.ts","sourceRoot":"","sources":["../../src/core/resultVerification.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result Verification Framework
|
|
3
|
+
*
|
|
4
|
+
* Prevents erosolar-cli from hallucinating success by requiring explicit
|
|
5
|
+
* verification of tool operation outcomes. All critical operations must
|
|
6
|
+
* return structured results with verification status.
|
|
7
|
+
*
|
|
8
|
+
* CRITICAL: LLMs can misinterpret ambiguous output as success.
|
|
9
|
+
* This module ensures clear, unambiguous success/failure signals.
|
|
10
|
+
*
|
|
11
|
+
* @license MIT
|
|
12
|
+
* @author Bo Shang
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Format a verified result into a clear, unambiguous string for LLM consumption.
|
|
16
|
+
* The format is designed to prevent misinterpretation.
|
|
17
|
+
*/
|
|
18
|
+
export function formatVerifiedResult(result) {
|
|
19
|
+
const lines = [];
|
|
20
|
+
// CRITICAL: First line must be unambiguous status
|
|
21
|
+
switch (result.status) {
|
|
22
|
+
case 'VERIFIED_SUCCESS':
|
|
23
|
+
lines.push('═══ VERIFIED SUCCESS ═══');
|
|
24
|
+
break;
|
|
25
|
+
case 'VERIFIED_FAILURE':
|
|
26
|
+
lines.push('═══ VERIFIED FAILURE ═══');
|
|
27
|
+
break;
|
|
28
|
+
case 'UNVERIFIED':
|
|
29
|
+
lines.push('═══ UNVERIFIED (CANNOT CONFIRM SUCCESS) ═══');
|
|
30
|
+
break;
|
|
31
|
+
case 'PARTIAL_SUCCESS':
|
|
32
|
+
lines.push('═══ PARTIAL SUCCESS (SOME OPERATIONS FAILED) ═══');
|
|
33
|
+
break;
|
|
34
|
+
case 'REQUIRES_USER_ACTION':
|
|
35
|
+
lines.push('═══ BLOCKED: USER ACTION REQUIRED ═══');
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
lines.push('');
|
|
39
|
+
lines.push(`Summary: ${result.summary}`);
|
|
40
|
+
lines.push('');
|
|
41
|
+
// Show verification checks if any
|
|
42
|
+
if (result.verificationChecks && result.verificationChecks.length > 0) {
|
|
43
|
+
lines.push('Verification Checks:');
|
|
44
|
+
for (const check of result.verificationChecks) {
|
|
45
|
+
const icon = check.passed ? '✓' : '✗';
|
|
46
|
+
lines.push(` ${icon} ${check.check}${check.details ? `: ${check.details}` : ''}`);
|
|
47
|
+
}
|
|
48
|
+
lines.push('');
|
|
49
|
+
}
|
|
50
|
+
// Show details
|
|
51
|
+
if (result.details) {
|
|
52
|
+
lines.push('Details:');
|
|
53
|
+
lines.push(result.details);
|
|
54
|
+
lines.push('');
|
|
55
|
+
}
|
|
56
|
+
// Show suggested actions for non-success states
|
|
57
|
+
if (result.status !== 'VERIFIED_SUCCESS' && result.suggestedActions && result.suggestedActions.length > 0) {
|
|
58
|
+
lines.push('Required Actions:');
|
|
59
|
+
for (const action of result.suggestedActions) {
|
|
60
|
+
lines.push(` → ${action}`);
|
|
61
|
+
}
|
|
62
|
+
lines.push('');
|
|
63
|
+
}
|
|
64
|
+
// Footer with timestamp
|
|
65
|
+
if (result.durationMs !== undefined) {
|
|
66
|
+
lines.push(`[Verified at ${result.verifiedAt} | Duration: ${result.durationMs}ms]`);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
lines.push(`[Verified at ${result.verifiedAt}]`);
|
|
70
|
+
}
|
|
71
|
+
return lines.join('\n');
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Create a verified success result
|
|
75
|
+
*/
|
|
76
|
+
export function verifiedSuccess(summary, details, checks, durationMs) {
|
|
77
|
+
return formatVerifiedResult({
|
|
78
|
+
status: 'VERIFIED_SUCCESS',
|
|
79
|
+
summary,
|
|
80
|
+
details,
|
|
81
|
+
verificationChecks: checks,
|
|
82
|
+
verifiedAt: new Date().toISOString(),
|
|
83
|
+
durationMs,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create a verified failure result
|
|
88
|
+
*/
|
|
89
|
+
export function verifiedFailure(summary, details, suggestedActions, checks, durationMs) {
|
|
90
|
+
return formatVerifiedResult({
|
|
91
|
+
status: 'VERIFIED_FAILURE',
|
|
92
|
+
summary,
|
|
93
|
+
details,
|
|
94
|
+
verificationChecks: checks,
|
|
95
|
+
suggestedActions,
|
|
96
|
+
verifiedAt: new Date().toISOString(),
|
|
97
|
+
durationMs,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create an unverified result (when we can't confirm success)
|
|
102
|
+
*/
|
|
103
|
+
export function unverifiedResult(summary, details, suggestedActions, durationMs) {
|
|
104
|
+
return formatVerifiedResult({
|
|
105
|
+
status: 'UNVERIFIED',
|
|
106
|
+
summary: `${summary} (VERIFICATION NOT POSSIBLE - DO NOT ASSUME SUCCESS)`,
|
|
107
|
+
details,
|
|
108
|
+
suggestedActions: suggestedActions || [
|
|
109
|
+
'Manually verify the operation completed as expected',
|
|
110
|
+
'Run verification commands to confirm state',
|
|
111
|
+
],
|
|
112
|
+
verifiedAt: new Date().toISOString(),
|
|
113
|
+
durationMs,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Create a partial success result
|
|
118
|
+
*/
|
|
119
|
+
export function partialSuccess(summary, details, checks, suggestedActions, durationMs) {
|
|
120
|
+
return formatVerifiedResult({
|
|
121
|
+
status: 'PARTIAL_SUCCESS',
|
|
122
|
+
summary,
|
|
123
|
+
details,
|
|
124
|
+
verificationChecks: checks,
|
|
125
|
+
suggestedActions,
|
|
126
|
+
verifiedAt: new Date().toISOString(),
|
|
127
|
+
durationMs,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create a result requiring user action
|
|
132
|
+
*/
|
|
133
|
+
export function requiresUserAction(summary, details, requiredActions, durationMs) {
|
|
134
|
+
return formatVerifiedResult({
|
|
135
|
+
status: 'REQUIRES_USER_ACTION',
|
|
136
|
+
summary,
|
|
137
|
+
details,
|
|
138
|
+
suggestedActions: requiredActions,
|
|
139
|
+
verifiedAt: new Date().toISOString(),
|
|
140
|
+
durationMs,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Verification patterns for common outputs
|
|
145
|
+
*/
|
|
146
|
+
export const OutputPatterns = {
|
|
147
|
+
// Firebase deployment patterns
|
|
148
|
+
firebase: {
|
|
149
|
+
success: [
|
|
150
|
+
/Deploy complete!/i,
|
|
151
|
+
/✔\s+Deploy complete/i,
|
|
152
|
+
/Hosting URL:/i,
|
|
153
|
+
/Function URL/i,
|
|
154
|
+
],
|
|
155
|
+
failure: [
|
|
156
|
+
/Error:/i,
|
|
157
|
+
/deploy failed/i,
|
|
158
|
+
/Authentication Error/i,
|
|
159
|
+
/not logged in/i,
|
|
160
|
+
/permission denied/i,
|
|
161
|
+
/PERMISSION_DENIED/i,
|
|
162
|
+
/quota exceeded/i,
|
|
163
|
+
/build error/i,
|
|
164
|
+
],
|
|
165
|
+
authRequired: [
|
|
166
|
+
/firebase login/i,
|
|
167
|
+
/not logged in/i,
|
|
168
|
+
/authenticate/i,
|
|
169
|
+
/FIREBASE_TOKEN/i,
|
|
170
|
+
],
|
|
171
|
+
},
|
|
172
|
+
// Generic command patterns
|
|
173
|
+
command: {
|
|
174
|
+
success: [
|
|
175
|
+
/^(success|completed|done|finished)/im,
|
|
176
|
+
/successfully/i,
|
|
177
|
+
],
|
|
178
|
+
failure: [
|
|
179
|
+
/^error/im,
|
|
180
|
+
/^fatal/im,
|
|
181
|
+
/failed/i,
|
|
182
|
+
/command not found/i,
|
|
183
|
+
/permission denied/i,
|
|
184
|
+
/access denied/i,
|
|
185
|
+
/ENOENT/i,
|
|
186
|
+
/EACCES/i,
|
|
187
|
+
/EPERM/i,
|
|
188
|
+
],
|
|
189
|
+
},
|
|
190
|
+
// NPM patterns
|
|
191
|
+
npm: {
|
|
192
|
+
success: [
|
|
193
|
+
/npm notice/i,
|
|
194
|
+
/\+ .+@\d+\.\d+\.\d+/, // Package published pattern
|
|
195
|
+
/published/i,
|
|
196
|
+
],
|
|
197
|
+
failure: [
|
|
198
|
+
/npm ERR!/i,
|
|
199
|
+
/ERESOLVE/i,
|
|
200
|
+
/E404/i,
|
|
201
|
+
/EINTEGRITY/i,
|
|
202
|
+
],
|
|
203
|
+
},
|
|
204
|
+
// Git patterns
|
|
205
|
+
git: {
|
|
206
|
+
success: [
|
|
207
|
+
/\[.+\s+\w+\]/, // Commit hash pattern
|
|
208
|
+
/pushed/i,
|
|
209
|
+
/merged/i,
|
|
210
|
+
],
|
|
211
|
+
failure: [
|
|
212
|
+
/fatal:/i,
|
|
213
|
+
/error:/i,
|
|
214
|
+
/conflict/i,
|
|
215
|
+
/rejected/i,
|
|
216
|
+
],
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* Normalize text to prevent Unicode lookalike attacks
|
|
221
|
+
* Converts confusable characters (e.g., Cyrillic 'а' -> Latin 'a')
|
|
222
|
+
* This prevents attackers from bypassing pattern detection with visually similar characters
|
|
223
|
+
*/
|
|
224
|
+
export function normalizeForPatternMatch(text) {
|
|
225
|
+
// Normalize Unicode to NFC form first
|
|
226
|
+
let normalized = text.normalize('NFC');
|
|
227
|
+
// Map common Unicode confusables to ASCII equivalents
|
|
228
|
+
// This prevents bypass using Cyrillic, Greek, or other lookalikes
|
|
229
|
+
const confusables = {
|
|
230
|
+
// Cyrillic lookalikes
|
|
231
|
+
'а': 'a', 'е': 'e', 'о': 'o', 'р': 'p', 'с': 'c', 'у': 'y', 'х': 'x',
|
|
232
|
+
'А': 'A', 'В': 'B', 'Е': 'E', 'К': 'K', 'М': 'M', 'Н': 'H', 'О': 'O',
|
|
233
|
+
'Р': 'P', 'С': 'C', 'Т': 'T', 'Х': 'X',
|
|
234
|
+
// Greek lookalikes
|
|
235
|
+
'Α': 'A', 'Β': 'B', 'Ε': 'E', 'Η': 'H', 'Ι': 'I', 'Κ': 'K', 'Μ': 'M',
|
|
236
|
+
'Ν': 'N', 'Ο': 'O', 'Ρ': 'P', 'Τ': 'T', 'Χ': 'X', 'Υ': 'Y', 'Ζ': 'Z',
|
|
237
|
+
'ο': 'o', 'ν': 'v', 'ρ': 'p',
|
|
238
|
+
// Fullwidth characters
|
|
239
|
+
'a': 'a', 'b': 'b', 'c': 'c', 'd': 'd', 'e': 'e', 'f': 'f', 'g': 'g',
|
|
240
|
+
'h': 'h', 'i': 'i', 'j': 'j', 'k': 'k', 'l': 'l', 'm': 'm', 'n': 'n',
|
|
241
|
+
'o': 'o', 'p': 'p', 'q': 'q', 'r': 'r', 's': 's', 't': 't', 'u': 'u',
|
|
242
|
+
'v': 'v', 'w': 'w', 'x': 'x', 'y': 'y', 'z': 'z',
|
|
243
|
+
// Other confusables
|
|
244
|
+
'ⅰ': 'i', 'ⅼ': 'l', 'ℓ': 'l', '𝕒': 'a', '𝕓': 'b', '𝕔': 'c',
|
|
245
|
+
'0': '0', '1': '1', '2': '2', '3': '3', '4': '4',
|
|
246
|
+
'5': '5', '6': '6', '7': '7', '8': '8', '9': '9',
|
|
247
|
+
};
|
|
248
|
+
for (const [confusable, replacement] of Object.entries(confusables)) {
|
|
249
|
+
normalized = normalized.split(confusable).join(replacement);
|
|
250
|
+
}
|
|
251
|
+
// Remove zero-width characters that could hide content
|
|
252
|
+
normalized = normalized.replace(/[\u200B-\u200D\uFEFF\u2060\u180E]/g, '');
|
|
253
|
+
return normalized;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Analyze output against patterns to determine success/failure
|
|
257
|
+
*
|
|
258
|
+
* CRITICAL: This function is defensive against:
|
|
259
|
+
* 1. Unicode lookalike attacks (Cyrillic/Greek characters that look like Latin)
|
|
260
|
+
* 2. Exit code 0 with hidden failures in output
|
|
261
|
+
* 3. False positives from success words appearing in error messages
|
|
262
|
+
*/
|
|
263
|
+
export function analyzeOutput(output, patterns, exitCode) {
|
|
264
|
+
// CRITICAL: Normalize output to prevent Unicode bypass attacks
|
|
265
|
+
const normalizedOutput = normalizeForPatternMatch(output);
|
|
266
|
+
// Check explicit failure patterns first (highest priority)
|
|
267
|
+
for (const pattern of patterns.failure) {
|
|
268
|
+
if (pattern.test(normalizedOutput)) {
|
|
269
|
+
return { isSuccess: false, isFailure: true, matchedPattern: pattern.source, confidence: 'high' };
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Check success patterns
|
|
273
|
+
for (const pattern of patterns.success) {
|
|
274
|
+
if (pattern.test(normalizedOutput)) {
|
|
275
|
+
// Additional validation: ensure the success pattern isn't in a negative context
|
|
276
|
+
// e.g., "not successful", "failed to succeed", "success was not achieved"
|
|
277
|
+
const negativeContextPatterns = [
|
|
278
|
+
/not\s+(been\s+)?success/i,
|
|
279
|
+
/fail(ed|ure|s)?\s+to\s+(be\s+)?success/i,
|
|
280
|
+
/success\s+(was|is)\s+not/i,
|
|
281
|
+
/no\s+success/i,
|
|
282
|
+
/unsuccess/i,
|
|
283
|
+
/!success/i,
|
|
284
|
+
];
|
|
285
|
+
const hasNegativeContext = negativeContextPatterns.some(p => p.test(normalizedOutput));
|
|
286
|
+
if (hasNegativeContext) {
|
|
287
|
+
// Success word appears but in negative context - treat as failure
|
|
288
|
+
return { isSuccess: false, isFailure: true, matchedPattern: 'success in negative context', confidence: 'medium' };
|
|
289
|
+
}
|
|
290
|
+
return { isSuccess: true, isFailure: false, matchedPattern: pattern.source, confidence: 'high' };
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// IMPORTANT: Exit code 0 alone is NOT sufficient to declare success
|
|
294
|
+
// We only use exit code as a weak signal, not as verification
|
|
295
|
+
if (exitCode !== undefined) {
|
|
296
|
+
if (exitCode !== 0) {
|
|
297
|
+
// Non-zero exit is a clear failure
|
|
298
|
+
return { isSuccess: false, isFailure: true, confidence: 'high' };
|
|
299
|
+
}
|
|
300
|
+
// Exit code 0 but no success pattern matched - this is INDETERMINATE, not success
|
|
301
|
+
// Return low confidence - the caller should treat this as unverified
|
|
302
|
+
return { isSuccess: false, isFailure: false, confidence: 'low' };
|
|
303
|
+
}
|
|
304
|
+
// Cannot determine at all
|
|
305
|
+
return { isSuccess: false, isFailure: false, confidence: 'low' };
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Create a verification check from a command result
|
|
309
|
+
*/
|
|
310
|
+
export function createCommandCheck(checkName, exitCode, output, expectedPatterns) {
|
|
311
|
+
let passed = exitCode === 0;
|
|
312
|
+
let details = exitCode === 0 ? 'Exit code 0' : `Exit code ${exitCode}`;
|
|
313
|
+
// If we have expected patterns, check for them
|
|
314
|
+
if (expectedPatterns && passed) {
|
|
315
|
+
const foundPattern = expectedPatterns.some((p) => p.test(output));
|
|
316
|
+
if (!foundPattern) {
|
|
317
|
+
passed = false;
|
|
318
|
+
details = 'Exit code 0 but expected output pattern not found';
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return {
|
|
322
|
+
check: checkName,
|
|
323
|
+
passed,
|
|
324
|
+
details,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Verify that a file exists and optionally contains expected content
|
|
329
|
+
*/
|
|
330
|
+
export async function verifyFileExists(filePath, expectedContent) {
|
|
331
|
+
const fs = await import('fs/promises');
|
|
332
|
+
try {
|
|
333
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
334
|
+
if (expectedContent) {
|
|
335
|
+
const matches = typeof expectedContent === 'string'
|
|
336
|
+
? content.includes(expectedContent)
|
|
337
|
+
: expectedContent.test(content);
|
|
338
|
+
return {
|
|
339
|
+
check: `File ${filePath} exists with expected content`,
|
|
340
|
+
passed: matches,
|
|
341
|
+
details: matches ? 'Content verified' : 'Content does not match expected',
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
return {
|
|
345
|
+
check: `File ${filePath} exists`,
|
|
346
|
+
passed: true,
|
|
347
|
+
details: `File size: ${content.length} bytes`,
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
catch (error) {
|
|
351
|
+
return {
|
|
352
|
+
check: `File ${filePath} exists`,
|
|
353
|
+
passed: false,
|
|
354
|
+
details: error instanceof Error ? error.message : 'File not found',
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Verify URL is accessible (for deployment verification)
|
|
360
|
+
*/
|
|
361
|
+
export async function verifyUrlAccessible(url, expectedStatus = 200, timeoutMs = 10000) {
|
|
362
|
+
try {
|
|
363
|
+
const controller = new AbortController();
|
|
364
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
365
|
+
const response = await fetch(url, {
|
|
366
|
+
method: 'HEAD',
|
|
367
|
+
signal: controller.signal,
|
|
368
|
+
});
|
|
369
|
+
clearTimeout(timeout);
|
|
370
|
+
const passed = response.status === expectedStatus;
|
|
371
|
+
return {
|
|
372
|
+
check: `URL ${url} accessible`,
|
|
373
|
+
passed,
|
|
374
|
+
details: passed
|
|
375
|
+
? `Status ${response.status} (expected ${expectedStatus})`
|
|
376
|
+
: `Status ${response.status} (expected ${expectedStatus})`,
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
catch (error) {
|
|
380
|
+
return {
|
|
381
|
+
check: `URL ${url} accessible`,
|
|
382
|
+
passed: false,
|
|
383
|
+
details: error instanceof Error ? error.message : 'Request failed',
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Verify a JSON response matches expected structure
|
|
389
|
+
*/
|
|
390
|
+
export async function verifyJsonEndpoint(url, expectedFields, timeoutMs = 10000) {
|
|
391
|
+
try {
|
|
392
|
+
const controller = new AbortController();
|
|
393
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
394
|
+
const response = await fetch(url, { signal: controller.signal });
|
|
395
|
+
clearTimeout(timeout);
|
|
396
|
+
if (!response.ok) {
|
|
397
|
+
return {
|
|
398
|
+
check: `JSON endpoint ${url}`,
|
|
399
|
+
passed: false,
|
|
400
|
+
details: `HTTP ${response.status}`,
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
const json = await response.json();
|
|
404
|
+
const missingFields = expectedFields.filter((field) => !(field in json));
|
|
405
|
+
return {
|
|
406
|
+
check: `JSON endpoint ${url}`,
|
|
407
|
+
passed: missingFields.length === 0,
|
|
408
|
+
details: missingFields.length === 0
|
|
409
|
+
? `All expected fields present: ${expectedFields.join(', ')}`
|
|
410
|
+
: `Missing fields: ${missingFields.join(', ')}`,
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
return {
|
|
415
|
+
check: `JSON endpoint ${url}`,
|
|
416
|
+
passed: false,
|
|
417
|
+
details: error instanceof Error ? error.message : 'Request failed',
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Common error indicators that might be hidden in truncated content
|
|
423
|
+
*/
|
|
424
|
+
const ERROR_INDICATORS = [
|
|
425
|
+
'error', 'failed', 'failure', 'exception', 'denied', 'unauthorized',
|
|
426
|
+
'forbidden', 'not found', '404', '500', '502', '503', 'timeout',
|
|
427
|
+
'refused', 'rejected', 'invalid', 'expired', 'abort', 'crash',
|
|
428
|
+
'fatal', 'critical', 'panic', 'segfault', 'killed', 'terminated',
|
|
429
|
+
];
|
|
430
|
+
/**
|
|
431
|
+
* Check if content that would be truncated might contain error indicators
|
|
432
|
+
* Returns a warning message if potential errors are detected in the truncated portion
|
|
433
|
+
*/
|
|
434
|
+
export function checkTruncationForErrors(fullContent, truncateAt) {
|
|
435
|
+
if (fullContent.length <= truncateAt) {
|
|
436
|
+
return { shouldWarn: false, warning: '' };
|
|
437
|
+
}
|
|
438
|
+
const truncatedPortion = fullContent.slice(truncateAt).toLowerCase();
|
|
439
|
+
const foundIndicators = ERROR_INDICATORS.filter(indicator => truncatedPortion.includes(indicator));
|
|
440
|
+
if (foundIndicators.length > 0) {
|
|
441
|
+
return {
|
|
442
|
+
shouldWarn: true,
|
|
443
|
+
warning: `⚠️ TRUNCATION WARNING: The hidden portion (${fullContent.length - truncateAt} chars) may contain error indicators: ${foundIndicators.join(', ')}. If the operation appears to have failed, review full output.`,
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
return { shouldWarn: false, warning: '' };
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Safely truncate content with error detection
|
|
450
|
+
* Returns truncated content with appropriate warning if errors might be hidden
|
|
451
|
+
*/
|
|
452
|
+
export function safeTruncate(content, maxLength, _label = 'Content') {
|
|
453
|
+
if (content.length <= maxLength) {
|
|
454
|
+
return content;
|
|
455
|
+
}
|
|
456
|
+
const truncation = checkTruncationForErrors(content, maxLength);
|
|
457
|
+
const truncatedContent = content.slice(0, maxLength);
|
|
458
|
+
const hiddenChars = content.length - maxLength;
|
|
459
|
+
let result = `${truncatedContent}\n\n[... ${hiddenChars} characters truncated]`;
|
|
460
|
+
if (truncation.shouldWarn) {
|
|
461
|
+
result += `\n\n${truncation.warning}`;
|
|
462
|
+
}
|
|
463
|
+
return result;
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=resultVerification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resultVerification.js","sourceRoot":"","sources":["../../src/core/resultVerification.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic (Claude) Provider Plugin
|
|
3
|
+
*
|
|
4
|
+
* Registers the Anthropic provider with hardened error handling for:
|
|
5
|
+
* - Network failures (premature close, connection reset)
|
|
6
|
+
* - Stream errors (gunzip, decompression failures)
|
|
7
|
+
* - Rate limiting with exponential backoff
|
|
8
|
+
* - Circuit breaker for cascading failure prevention
|
|
9
|
+
*/
|
|
1
10
|
export declare function registerAnthropicProviderPlugin(): void;
|
|
2
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/providers/anthropic/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/providers/anthropic/index.ts"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAmBtD"}
|