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.
Files changed (72) hide show
  1. package/dist/core/resultVerification.d.ts +138 -0
  2. package/dist/core/resultVerification.d.ts.map +1 -0
  3. package/dist/core/resultVerification.js +465 -0
  4. package/dist/core/resultVerification.js.map +1 -0
  5. package/dist/plugins/providers/anthropic/index.d.ts +9 -0
  6. package/dist/plugins/providers/anthropic/index.d.ts.map +1 -1
  7. package/dist/plugins/providers/anthropic/index.js +13 -1
  8. package/dist/plugins/providers/anthropic/index.js.map +1 -1
  9. package/dist/plugins/providers/deepseek/index.d.ts +9 -0
  10. package/dist/plugins/providers/deepseek/index.d.ts.map +1 -1
  11. package/dist/plugins/providers/deepseek/index.js +28 -1
  12. package/dist/plugins/providers/deepseek/index.js.map +1 -1
  13. package/dist/plugins/providers/google/index.d.ts +9 -0
  14. package/dist/plugins/providers/google/index.d.ts.map +1 -1
  15. package/dist/plugins/providers/google/index.js +13 -1
  16. package/dist/plugins/providers/google/index.js.map +1 -1
  17. package/dist/plugins/providers/ollama/index.d.ts +5 -1
  18. package/dist/plugins/providers/ollama/index.d.ts.map +1 -1
  19. package/dist/plugins/providers/ollama/index.js +11 -2
  20. package/dist/plugins/providers/ollama/index.js.map +1 -1
  21. package/dist/plugins/providers/openai/index.d.ts +9 -0
  22. package/dist/plugins/providers/openai/index.d.ts.map +1 -1
  23. package/dist/plugins/providers/openai/index.js +13 -1
  24. package/dist/plugins/providers/openai/index.js.map +1 -1
  25. package/dist/plugins/providers/xai/index.d.ts +9 -0
  26. package/dist/plugins/providers/xai/index.d.ts.map +1 -1
  27. package/dist/plugins/providers/xai/index.js +15 -1
  28. package/dist/plugins/providers/xai/index.js.map +1 -1
  29. package/dist/providers/anthropicProvider.d.ts +7 -0
  30. package/dist/providers/anthropicProvider.d.ts.map +1 -1
  31. package/dist/providers/anthropicProvider.js +87 -9
  32. package/dist/providers/anthropicProvider.js.map +1 -1
  33. package/dist/providers/googleProvider.d.ts +17 -0
  34. package/dist/providers/googleProvider.d.ts.map +1 -1
  35. package/dist/providers/googleProvider.js +113 -32
  36. package/dist/providers/googleProvider.js.map +1 -1
  37. package/dist/providers/openaiChatCompletionsProvider.d.ts +26 -0
  38. package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -1
  39. package/dist/providers/openaiChatCompletionsProvider.js +162 -27
  40. package/dist/providers/openaiChatCompletionsProvider.js.map +1 -1
  41. package/dist/providers/openaiResponsesProvider.d.ts +17 -0
  42. package/dist/providers/openaiResponsesProvider.d.ts.map +1 -1
  43. package/dist/providers/openaiResponsesProvider.js +109 -25
  44. package/dist/providers/openaiResponsesProvider.js.map +1 -1
  45. package/dist/providers/resilientProvider.d.ts.map +1 -1
  46. package/dist/providers/resilientProvider.js +47 -1
  47. package/dist/providers/resilientProvider.js.map +1 -1
  48. package/dist/shell/interactiveShell.d.ts +6 -0
  49. package/dist/shell/interactiveShell.d.ts.map +1 -1
  50. package/dist/shell/interactiveShell.js +48 -0
  51. package/dist/shell/interactiveShell.js.map +1 -1
  52. package/dist/shell/taskCompletionDetector.d.ts +4 -0
  53. package/dist/shell/taskCompletionDetector.d.ts.map +1 -1
  54. package/dist/shell/taskCompletionDetector.js +27 -1
  55. package/dist/shell/taskCompletionDetector.js.map +1 -1
  56. package/dist/tools/bashTools.d.ts.map +1 -1
  57. package/dist/tools/bashTools.js +26 -8
  58. package/dist/tools/bashTools.js.map +1 -1
  59. package/dist/tools/browserAutomationTools.d.ts.map +1 -1
  60. package/dist/tools/browserAutomationTools.js +9 -1
  61. package/dist/tools/browserAutomationTools.js.map +1 -1
  62. package/dist/tools/cloudTools.d.ts.map +1 -1
  63. package/dist/tools/cloudTools.js +436 -35
  64. package/dist/tools/cloudTools.js.map +1 -1
  65. package/dist/tools/codeGenerationTools.d.ts.map +1 -1
  66. package/dist/tools/codeGenerationTools.js +77 -7
  67. package/dist/tools/codeGenerationTools.js.map +1 -1
  68. package/dist/ui/persistentPrompt.d.ts +10 -0
  69. package/dist/ui/persistentPrompt.d.ts.map +1 -1
  70. package/dist/ui/persistentPrompt.js +82 -18
  71. package/dist/ui/persistentPrompt.js.map +1 -1
  72. 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":"AAKA,wBAAgB,+BAA+B,IAAI,IAAI,CAgBtD"}
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"}