codebuff 1.0.176 → 1.0.177
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/checkpoints/checkpoint-manager.d.ts +73 -0
- package/dist/checkpoints/checkpoint-manager.js +193 -0
- package/dist/checkpoints/checkpoint-manager.js.map +1 -0
- package/dist/{checkpoint-file-manager.d.ts → checkpoints/file-manager.d.ts} +10 -0
- package/dist/{checkpoint-file-manager.js → checkpoints/file-manager.js} +92 -35
- package/dist/checkpoints/file-manager.js.map +1 -0
- package/dist/cli.js +20 -18
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +7 -6
- package/dist/client.js +20 -15
- package/dist/client.js.map +1 -1
- package/dist/common/actions.d.ts +120 -120
- package/dist/common/advanced-analyzer.d.ts +19 -0
- package/dist/common/advanced-analyzer.js +140 -0
- package/dist/common/advanced-analyzer.js.map +1 -0
- package/dist/common/browser-actions.d.ts +44 -44
- package/dist/common/message-image-handling.d.ts +41 -0
- package/dist/common/message-image-handling.js +57 -0
- package/dist/common/message-image-handling.js.map +1 -0
- package/dist/common/types/agent-state.d.ts +26 -26
- package/dist/common/types/message.d.ts +14 -14
- package/dist/common/types/usage.d.ts +2 -2
- package/dist/common/util/credentials.d.ts +2 -2
- package/dist/common/util/process-stream.d.ts +8 -0
- package/dist/common/util/process-stream.js +102 -0
- package/dist/common/util/process-stream.js.map +1 -0
- package/dist/common/websockets/websocket-schema.d.ts +368 -368
- package/dist/index.js +1 -1
- package/dist/menu.js +1 -1
- package/dist/menu.js.map +1 -1
- package/dist/project-files.js +2 -2
- package/dist/project-files.js.map +1 -1
- package/dist/workers/checkpoint-worker.js +47 -0
- package/dist/workers/checkpoint-worker.js.map +1 -0
- package/dist/workers/project-context.d.ts +1 -0
- package/dist/{worker-script-project-context.js → workers/project-context.js} +5 -5
- package/dist/workers/project-context.js.map +1 -0
- package/package.json +1 -1
- package/dist/checkpoint-file-manager.js.map +0 -1
- package/dist/checkpoints.d.ts +0 -64
- package/dist/checkpoints.js +0 -162
- package/dist/checkpoints.js.map +0 -1
- package/dist/common/logger.d.ts +0 -1
- package/dist/common/logger.js +0 -7
- package/dist/common/logger.js.map +0 -1
- package/dist/common/util/constants.d.ts +0 -1
- package/dist/common/util/constants.js +0 -7
- package/dist/common/util/constants.js.map +0 -1
- package/dist/common/util/helpers.d.ts +0 -1
- package/dist/common/util/helpers.js +0 -6
- package/dist/common/util/helpers.js.map +0 -1
- package/dist/common/util/token-counter.d.ts +0 -3
- package/dist/common/util/token-counter.js +0 -27
- package/dist/common/util/token-counter.js.map +0 -1
- package/dist/worker-script-project-context.js.map +0 -1
- /package/dist/{worker-script-project-context.d.ts → workers/checkpoint-worker.d.ts} +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BrowserResponse } from './browser-actions';
|
|
2
|
+
/**
|
|
3
|
+
* Each detected issue includes a type, severity, detection reason,
|
|
4
|
+
* and an optional recommendation for the user.
|
|
5
|
+
*/
|
|
6
|
+
export interface AnalysisIssue {
|
|
7
|
+
type: string;
|
|
8
|
+
severity: 'low' | 'medium' | 'high';
|
|
9
|
+
message: string;
|
|
10
|
+
recommendation?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface AnalysisResult {
|
|
13
|
+
issues: AnalysisIssue[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Entrypoint function to run a suite of heuristic checks over
|
|
17
|
+
* logs, network events, performance metrics, etc.
|
|
18
|
+
*/
|
|
19
|
+
export declare function analyzeBrowserData(response: BrowserResponse): AnalysisResult;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyzeBrowserData = analyzeBrowserData;
|
|
4
|
+
/**
|
|
5
|
+
* Entrypoint function to run a suite of heuristic checks over
|
|
6
|
+
* logs, network events, performance metrics, etc.
|
|
7
|
+
*/
|
|
8
|
+
function analyzeBrowserData(response) {
|
|
9
|
+
const issues = [];
|
|
10
|
+
// 1. Check logs for known error patterns or repeated errors
|
|
11
|
+
issues.push(...analyzeLogs(response));
|
|
12
|
+
// 2. Check network events for 4xx, 5xx, or suspicious patterns
|
|
13
|
+
issues.push(...analyzeNetwork(response));
|
|
14
|
+
// 3. Check performance metrics (TTFB, LCP, memory usage, etc.)
|
|
15
|
+
if (response.metrics) {
|
|
16
|
+
issues.push(...analyzePerformance(response.metrics));
|
|
17
|
+
}
|
|
18
|
+
// Return combined issues
|
|
19
|
+
return { issues };
|
|
20
|
+
}
|
|
21
|
+
function analyzeLogs(response) {
|
|
22
|
+
const issues = [];
|
|
23
|
+
const logs = response.logs || [];
|
|
24
|
+
// Check for high number of JavaScript errors
|
|
25
|
+
const jsErrors = logs.filter((log) => log.type === 'error');
|
|
26
|
+
if (jsErrors.length > 5) {
|
|
27
|
+
issues.push({
|
|
28
|
+
type: 'JS_ERROR_OVERFLOW',
|
|
29
|
+
severity: 'medium',
|
|
30
|
+
message: `Detected ${jsErrors.length} JavaScript errors in logs.`,
|
|
31
|
+
recommendation: 'Review the console logs for repeated error patterns. Fix the root cause or handle errors in code.'
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
// Pattern-based error detection
|
|
35
|
+
const errorPatterns = {
|
|
36
|
+
'not defined': {
|
|
37
|
+
severity: 'medium',
|
|
38
|
+
recommendation: 'Check for missing script dependencies or undefined variables'
|
|
39
|
+
},
|
|
40
|
+
'Failed to fetch': {
|
|
41
|
+
severity: 'medium',
|
|
42
|
+
recommendation: 'Verify endpoint URLs and network connectivity'
|
|
43
|
+
},
|
|
44
|
+
'SSL': {
|
|
45
|
+
severity: 'high',
|
|
46
|
+
recommendation: 'SSL certificate error - check HTTPS configuration'
|
|
47
|
+
},
|
|
48
|
+
'ERR_NAME_NOT_RESOLVED': {
|
|
49
|
+
severity: 'medium',
|
|
50
|
+
recommendation: 'DNS resolution failed - check domain name'
|
|
51
|
+
},
|
|
52
|
+
'ERR_CONNECTION_TIMED_OUT': {
|
|
53
|
+
severity: 'medium',
|
|
54
|
+
recommendation: 'Connection timeout - check network or firewall'
|
|
55
|
+
},
|
|
56
|
+
'Navigation timeout': {
|
|
57
|
+
severity: 'medium',
|
|
58
|
+
recommendation: 'Page took too long to load - check performance or timeouts'
|
|
59
|
+
},
|
|
60
|
+
'Frame detached': {
|
|
61
|
+
severity: 'low',
|
|
62
|
+
recommendation: 'Target frame or element no longer exists'
|
|
63
|
+
},
|
|
64
|
+
'Node is detached': {
|
|
65
|
+
severity: 'low',
|
|
66
|
+
recommendation: 'Element was removed from DOM'
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
for (const log of jsErrors) {
|
|
70
|
+
for (const [pattern, { severity, recommendation }] of Object.entries(errorPatterns)) {
|
|
71
|
+
if (log.message.includes(pattern)) {
|
|
72
|
+
issues.push({
|
|
73
|
+
type: 'JS_ERROR',
|
|
74
|
+
severity,
|
|
75
|
+
message: `Error detected: ${log.message}`,
|
|
76
|
+
recommendation
|
|
77
|
+
});
|
|
78
|
+
break; // Stop after first matching pattern
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return issues;
|
|
83
|
+
}
|
|
84
|
+
function analyzeNetwork(response) {
|
|
85
|
+
const issues = [];
|
|
86
|
+
const netEvents = response.networkEvents || [];
|
|
87
|
+
// Count 4xx / 5xx
|
|
88
|
+
const errorEvents = netEvents.filter((evt) => (evt.status && evt.status >= 400) || evt.errorText);
|
|
89
|
+
if (errorEvents.length > 0) {
|
|
90
|
+
issues.push({
|
|
91
|
+
type: 'NETWORK_ERRORS',
|
|
92
|
+
severity: 'medium',
|
|
93
|
+
message: `${errorEvents.length} network request(s) failed with 4xx/5xx error(s).`,
|
|
94
|
+
recommendation: 'Check your API endpoints and resource URLs. Verify server logs for possible configuration or routing issues.'
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
// Detect repeated 404s
|
|
98
|
+
const fourOhFours = netEvents.filter((e) => e.status === 404);
|
|
99
|
+
if (fourOhFours.length > 2) {
|
|
100
|
+
issues.push({
|
|
101
|
+
type: 'MISSING_RESOURCES',
|
|
102
|
+
severity: 'low',
|
|
103
|
+
message: `${fourOhFours.length} resources returned 404 Not Found.`,
|
|
104
|
+
recommendation: 'Ensure static assets or pages exist at the requested path.'
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return issues;
|
|
108
|
+
}
|
|
109
|
+
function analyzePerformance(metrics) {
|
|
110
|
+
const issues = [];
|
|
111
|
+
// Check Time to First Byte
|
|
112
|
+
if ((metrics.ttfb ?? 0) > 1000) {
|
|
113
|
+
issues.push({
|
|
114
|
+
type: 'HIGH_TTFB',
|
|
115
|
+
severity: 'medium',
|
|
116
|
+
message: `Time to First Byte is ${metrics.ttfb}ms, which is high.`,
|
|
117
|
+
recommendation: 'Optimize server response times or check network constraints. Look for server-side bottlenecks.'
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
// Check memory usage
|
|
121
|
+
if (metrics.memoryUsage > 100_000_000) { // ~100MB in JS heap
|
|
122
|
+
issues.push({
|
|
123
|
+
type: 'HIGH_MEMORY_USAGE',
|
|
124
|
+
severity: 'medium',
|
|
125
|
+
message: `Memory usage reached ${metrics.memoryUsage} bytes in JS heap.`,
|
|
126
|
+
recommendation: 'Investigate potential memory leaks, unbounded data structures, or large on-page assets.'
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
// Check Largest Contentful Paint
|
|
130
|
+
if ((metrics.lcp ?? 0) > 4000) {
|
|
131
|
+
issues.push({
|
|
132
|
+
type: 'PERFORMANCE_LCP',
|
|
133
|
+
severity: 'medium',
|
|
134
|
+
message: `Largest Contentful Paint is ${metrics.lcp}ms (over 4s).`,
|
|
135
|
+
recommendation: 'Consider optimizing images, breaking up large bundle files, or deferring non-critical scripts.'
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return issues;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=advanced-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanced-analyzer.js","sourceRoot":"","sources":["../src/advanced-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -250,13 +250,13 @@ export declare const BrowserResponseChunkSchema: z.ZodObject<{
|
|
|
250
250
|
index: z.ZodNumber;
|
|
251
251
|
data: z.ZodString;
|
|
252
252
|
}, "strip", z.ZodTypeAny, {
|
|
253
|
-
id: string;
|
|
254
253
|
data: string;
|
|
254
|
+
id: string;
|
|
255
255
|
total: number;
|
|
256
256
|
index: number;
|
|
257
257
|
}, {
|
|
258
|
-
id: string;
|
|
259
258
|
data: string;
|
|
259
|
+
id: string;
|
|
260
260
|
total: number;
|
|
261
261
|
index: number;
|
|
262
262
|
}>;
|
|
@@ -267,27 +267,27 @@ export declare const ImageContentSchema: z.ZodObject<{
|
|
|
267
267
|
media_type: z.ZodLiteral<"image/jpeg">;
|
|
268
268
|
data: z.ZodString;
|
|
269
269
|
}, "strip", z.ZodTypeAny, {
|
|
270
|
+
data: string;
|
|
270
271
|
type: "base64";
|
|
271
272
|
media_type: "image/jpeg";
|
|
272
|
-
data: string;
|
|
273
273
|
}, {
|
|
274
|
+
data: string;
|
|
274
275
|
type: "base64";
|
|
275
276
|
media_type: "image/jpeg";
|
|
276
|
-
data: string;
|
|
277
277
|
}>;
|
|
278
278
|
}, "strip", z.ZodTypeAny, {
|
|
279
279
|
type: "image";
|
|
280
280
|
source: {
|
|
281
|
+
data: string;
|
|
281
282
|
type: "base64";
|
|
282
283
|
media_type: "image/jpeg";
|
|
283
|
-
data: string;
|
|
284
284
|
};
|
|
285
285
|
}, {
|
|
286
286
|
type: "image";
|
|
287
287
|
source: {
|
|
288
|
+
data: string;
|
|
288
289
|
type: "base64";
|
|
289
290
|
media_type: "image/jpeg";
|
|
290
|
-
data: string;
|
|
291
291
|
};
|
|
292
292
|
}>;
|
|
293
293
|
export type ImageContent = z.infer<typeof ImageContentSchema>;
|
|
@@ -393,27 +393,27 @@ export declare const BrowserResponseSchema: z.ZodObject<{
|
|
|
393
393
|
media_type: z.ZodLiteral<"image/jpeg">;
|
|
394
394
|
data: z.ZodString;
|
|
395
395
|
}, "strip", z.ZodTypeAny, {
|
|
396
|
+
data: string;
|
|
396
397
|
type: "base64";
|
|
397
398
|
media_type: "image/jpeg";
|
|
398
|
-
data: string;
|
|
399
399
|
}, {
|
|
400
|
+
data: string;
|
|
400
401
|
type: "base64";
|
|
401
402
|
media_type: "image/jpeg";
|
|
402
|
-
data: string;
|
|
403
403
|
}>;
|
|
404
404
|
}, "strip", z.ZodTypeAny, {
|
|
405
405
|
type: "image";
|
|
406
406
|
source: {
|
|
407
|
+
data: string;
|
|
407
408
|
type: "base64";
|
|
408
409
|
media_type: "image/jpeg";
|
|
409
|
-
data: string;
|
|
410
410
|
};
|
|
411
411
|
}, {
|
|
412
412
|
type: "image";
|
|
413
413
|
source: {
|
|
414
|
+
data: string;
|
|
414
415
|
type: "base64";
|
|
415
416
|
media_type: "image/jpeg";
|
|
416
|
-
data: string;
|
|
417
417
|
};
|
|
418
418
|
}>>;
|
|
419
419
|
post: z.ZodObject<{
|
|
@@ -423,61 +423,61 @@ export declare const BrowserResponseSchema: z.ZodObject<{
|
|
|
423
423
|
media_type: z.ZodLiteral<"image/jpeg">;
|
|
424
424
|
data: z.ZodString;
|
|
425
425
|
}, "strip", z.ZodTypeAny, {
|
|
426
|
+
data: string;
|
|
426
427
|
type: "base64";
|
|
427
428
|
media_type: "image/jpeg";
|
|
428
|
-
data: string;
|
|
429
429
|
}, {
|
|
430
|
+
data: string;
|
|
430
431
|
type: "base64";
|
|
431
432
|
media_type: "image/jpeg";
|
|
432
|
-
data: string;
|
|
433
433
|
}>;
|
|
434
434
|
}, "strip", z.ZodTypeAny, {
|
|
435
435
|
type: "image";
|
|
436
436
|
source: {
|
|
437
|
+
data: string;
|
|
437
438
|
type: "base64";
|
|
438
439
|
media_type: "image/jpeg";
|
|
439
|
-
data: string;
|
|
440
440
|
};
|
|
441
441
|
}, {
|
|
442
442
|
type: "image";
|
|
443
443
|
source: {
|
|
444
|
+
data: string;
|
|
444
445
|
type: "base64";
|
|
445
446
|
media_type: "image/jpeg";
|
|
446
|
-
data: string;
|
|
447
447
|
};
|
|
448
448
|
}>;
|
|
449
449
|
}, "strip", z.ZodTypeAny, {
|
|
450
450
|
post: {
|
|
451
451
|
type: "image";
|
|
452
452
|
source: {
|
|
453
|
+
data: string;
|
|
453
454
|
type: "base64";
|
|
454
455
|
media_type: "image/jpeg";
|
|
455
|
-
data: string;
|
|
456
456
|
};
|
|
457
457
|
};
|
|
458
458
|
pre?: {
|
|
459
459
|
type: "image";
|
|
460
460
|
source: {
|
|
461
|
+
data: string;
|
|
461
462
|
type: "base64";
|
|
462
463
|
media_type: "image/jpeg";
|
|
463
|
-
data: string;
|
|
464
464
|
};
|
|
465
465
|
} | undefined;
|
|
466
466
|
}, {
|
|
467
467
|
post: {
|
|
468
468
|
type: "image";
|
|
469
469
|
source: {
|
|
470
|
+
data: string;
|
|
470
471
|
type: "base64";
|
|
471
472
|
media_type: "image/jpeg";
|
|
472
|
-
data: string;
|
|
473
473
|
};
|
|
474
474
|
};
|
|
475
475
|
pre?: {
|
|
476
476
|
type: "image";
|
|
477
477
|
source: {
|
|
478
|
+
data: string;
|
|
478
479
|
type: "base64";
|
|
479
480
|
media_type: "image/jpeg";
|
|
480
|
-
data: string;
|
|
481
481
|
};
|
|
482
482
|
} | undefined;
|
|
483
483
|
}>>;
|
|
@@ -521,17 +521,17 @@ export declare const BrowserResponseSchema: z.ZodObject<{
|
|
|
521
521
|
post: {
|
|
522
522
|
type: "image";
|
|
523
523
|
source: {
|
|
524
|
+
data: string;
|
|
524
525
|
type: "base64";
|
|
525
526
|
media_type: "image/jpeg";
|
|
526
|
-
data: string;
|
|
527
527
|
};
|
|
528
528
|
};
|
|
529
529
|
pre?: {
|
|
530
530
|
type: "image";
|
|
531
531
|
source: {
|
|
532
|
+
data: string;
|
|
532
533
|
type: "base64";
|
|
533
534
|
media_type: "image/jpeg";
|
|
534
|
-
data: string;
|
|
535
535
|
};
|
|
536
536
|
} | undefined;
|
|
537
537
|
} | undefined;
|
|
@@ -575,17 +575,17 @@ export declare const BrowserResponseSchema: z.ZodObject<{
|
|
|
575
575
|
post: {
|
|
576
576
|
type: "image";
|
|
577
577
|
source: {
|
|
578
|
+
data: string;
|
|
578
579
|
type: "base64";
|
|
579
580
|
media_type: "image/jpeg";
|
|
580
|
-
data: string;
|
|
581
581
|
};
|
|
582
582
|
};
|
|
583
583
|
pre?: {
|
|
584
584
|
type: "image";
|
|
585
585
|
source: {
|
|
586
|
+
data: string;
|
|
586
587
|
type: "base64";
|
|
587
588
|
media_type: "image/jpeg";
|
|
588
|
-
data: string;
|
|
589
589
|
};
|
|
590
590
|
} | undefined;
|
|
591
591
|
} | undefined;
|
|
@@ -832,12 +832,12 @@ export declare const RequiredBrowserTypeActionSchema: z.ZodObject<{
|
|
|
832
832
|
selector: z.ZodString;
|
|
833
833
|
text: z.ZodString;
|
|
834
834
|
}, "strip", z.ZodTypeAny, {
|
|
835
|
-
type: "type";
|
|
836
835
|
text: string;
|
|
836
|
+
type: "type";
|
|
837
837
|
selector: string;
|
|
838
838
|
}, {
|
|
839
|
-
type: "type";
|
|
840
839
|
text: string;
|
|
840
|
+
type: "type";
|
|
841
841
|
selector: string;
|
|
842
842
|
}>;
|
|
843
843
|
export declare const BrowserTypeActionSchema: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
|
|
@@ -876,8 +876,8 @@ export declare const BrowserTypeActionSchema: z.ZodObject<z.objectUtil.extendSha
|
|
|
876
876
|
}>, {
|
|
877
877
|
delay: z.ZodOptional<z.ZodNumber>;
|
|
878
878
|
}>, "strip", z.ZodTypeAny, {
|
|
879
|
-
type: "type";
|
|
880
879
|
text: string;
|
|
880
|
+
type: "type";
|
|
881
881
|
selector: string;
|
|
882
882
|
debug?: boolean | undefined;
|
|
883
883
|
timeout?: number | undefined;
|
|
@@ -893,8 +893,8 @@ export declare const BrowserTypeActionSchema: z.ZodObject<z.objectUtil.extendSha
|
|
|
893
893
|
} | undefined;
|
|
894
894
|
delay?: number | undefined;
|
|
895
895
|
}, {
|
|
896
|
-
type: "type";
|
|
897
896
|
text: string;
|
|
897
|
+
type: "type";
|
|
898
898
|
selector: string;
|
|
899
899
|
debug?: boolean | undefined;
|
|
900
900
|
timeout?: number | undefined;
|
|
@@ -1380,8 +1380,8 @@ export declare const DiagnosticStepSchema: z.ZodObject<{
|
|
|
1380
1380
|
}>, {
|
|
1381
1381
|
delay: z.ZodOptional<z.ZodNumber>;
|
|
1382
1382
|
}>, "strip", z.ZodTypeAny, {
|
|
1383
|
-
type: "type";
|
|
1384
1383
|
text: string;
|
|
1384
|
+
type: "type";
|
|
1385
1385
|
selector: string;
|
|
1386
1386
|
debug?: boolean | undefined;
|
|
1387
1387
|
timeout?: number | undefined;
|
|
@@ -1397,8 +1397,8 @@ export declare const DiagnosticStepSchema: z.ZodObject<{
|
|
|
1397
1397
|
} | undefined;
|
|
1398
1398
|
delay?: number | undefined;
|
|
1399
1399
|
}, {
|
|
1400
|
-
type: "type";
|
|
1401
1400
|
text: string;
|
|
1401
|
+
type: "type";
|
|
1402
1402
|
selector: string;
|
|
1403
1403
|
debug?: boolean | undefined;
|
|
1404
1404
|
timeout?: number | undefined;
|
|
@@ -1665,8 +1665,8 @@ export declare const DiagnosticStepSchema: z.ZodObject<{
|
|
|
1665
1665
|
visualVerify?: boolean | undefined;
|
|
1666
1666
|
visualThreshold?: number | undefined;
|
|
1667
1667
|
} | {
|
|
1668
|
-
type: "type";
|
|
1669
1668
|
text: string;
|
|
1669
|
+
type: "type";
|
|
1670
1670
|
selector: string;
|
|
1671
1671
|
debug?: boolean | undefined;
|
|
1672
1672
|
timeout?: number | undefined;
|
|
@@ -1787,8 +1787,8 @@ export declare const DiagnosticStepSchema: z.ZodObject<{
|
|
|
1787
1787
|
visualVerify?: boolean | undefined;
|
|
1788
1788
|
visualThreshold?: number | undefined;
|
|
1789
1789
|
} | {
|
|
1790
|
-
type: "type";
|
|
1791
1790
|
text: string;
|
|
1791
|
+
type: "type";
|
|
1792
1792
|
selector: string;
|
|
1793
1793
|
debug?: boolean | undefined;
|
|
1794
1794
|
timeout?: number | undefined;
|
|
@@ -2132,8 +2132,8 @@ export declare const BrowserDiagnoseActionSchema: z.ZodObject<{
|
|
|
2132
2132
|
}>, {
|
|
2133
2133
|
delay: z.ZodOptional<z.ZodNumber>;
|
|
2134
2134
|
}>, "strip", z.ZodTypeAny, {
|
|
2135
|
-
type: "type";
|
|
2136
2135
|
text: string;
|
|
2136
|
+
type: "type";
|
|
2137
2137
|
selector: string;
|
|
2138
2138
|
debug?: boolean | undefined;
|
|
2139
2139
|
timeout?: number | undefined;
|
|
@@ -2149,8 +2149,8 @@ export declare const BrowserDiagnoseActionSchema: z.ZodObject<{
|
|
|
2149
2149
|
} | undefined;
|
|
2150
2150
|
delay?: number | undefined;
|
|
2151
2151
|
}, {
|
|
2152
|
-
type: "type";
|
|
2153
2152
|
text: string;
|
|
2153
|
+
type: "type";
|
|
2154
2154
|
selector: string;
|
|
2155
2155
|
debug?: boolean | undefined;
|
|
2156
2156
|
timeout?: number | undefined;
|
|
@@ -2417,8 +2417,8 @@ export declare const BrowserDiagnoseActionSchema: z.ZodObject<{
|
|
|
2417
2417
|
visualVerify?: boolean | undefined;
|
|
2418
2418
|
visualThreshold?: number | undefined;
|
|
2419
2419
|
} | {
|
|
2420
|
-
type: "type";
|
|
2421
2420
|
text: string;
|
|
2421
|
+
type: "type";
|
|
2422
2422
|
selector: string;
|
|
2423
2423
|
debug?: boolean | undefined;
|
|
2424
2424
|
timeout?: number | undefined;
|
|
@@ -2539,8 +2539,8 @@ export declare const BrowserDiagnoseActionSchema: z.ZodObject<{
|
|
|
2539
2539
|
visualVerify?: boolean | undefined;
|
|
2540
2540
|
visualThreshold?: number | undefined;
|
|
2541
2541
|
} | {
|
|
2542
|
-
type: "type";
|
|
2543
2542
|
text: string;
|
|
2543
|
+
type: "type";
|
|
2544
2544
|
selector: string;
|
|
2545
2545
|
debug?: boolean | undefined;
|
|
2546
2546
|
timeout?: number | undefined;
|
|
@@ -2667,8 +2667,8 @@ export declare const BrowserDiagnoseActionSchema: z.ZodObject<{
|
|
|
2667
2667
|
visualVerify?: boolean | undefined;
|
|
2668
2668
|
visualThreshold?: number | undefined;
|
|
2669
2669
|
} | {
|
|
2670
|
-
type: "type";
|
|
2671
2670
|
text: string;
|
|
2671
|
+
type: "type";
|
|
2672
2672
|
selector: string;
|
|
2673
2673
|
debug?: boolean | undefined;
|
|
2674
2674
|
timeout?: number | undefined;
|
|
@@ -2807,8 +2807,8 @@ export declare const BrowserDiagnoseActionSchema: z.ZodObject<{
|
|
|
2807
2807
|
visualVerify?: boolean | undefined;
|
|
2808
2808
|
visualThreshold?: number | undefined;
|
|
2809
2809
|
} | {
|
|
2810
|
-
type: "type";
|
|
2811
2810
|
text: string;
|
|
2811
|
+
type: "type";
|
|
2812
2812
|
selector: string;
|
|
2813
2813
|
debug?: boolean | undefined;
|
|
2814
2814
|
timeout?: number | undefined;
|
|
@@ -3136,8 +3136,8 @@ export declare const BrowserActionSchema: z.ZodDiscriminatedUnion<"type", [z.Zod
|
|
|
3136
3136
|
}>, {
|
|
3137
3137
|
delay: z.ZodOptional<z.ZodNumber>;
|
|
3138
3138
|
}>, "strip", z.ZodTypeAny, {
|
|
3139
|
-
type: "type";
|
|
3140
3139
|
text: string;
|
|
3140
|
+
type: "type";
|
|
3141
3141
|
selector: string;
|
|
3142
3142
|
debug?: boolean | undefined;
|
|
3143
3143
|
timeout?: number | undefined;
|
|
@@ -3153,8 +3153,8 @@ export declare const BrowserActionSchema: z.ZodDiscriminatedUnion<"type", [z.Zod
|
|
|
3153
3153
|
} | undefined;
|
|
3154
3154
|
delay?: number | undefined;
|
|
3155
3155
|
}, {
|
|
3156
|
-
type: "type";
|
|
3157
3156
|
text: string;
|
|
3157
|
+
type: "type";
|
|
3158
3158
|
selector: string;
|
|
3159
3159
|
debug?: boolean | undefined;
|
|
3160
3160
|
timeout?: number | undefined;
|
|
@@ -3638,8 +3638,8 @@ export declare const BrowserActionSchema: z.ZodDiscriminatedUnion<"type", [z.Zod
|
|
|
3638
3638
|
}>, {
|
|
3639
3639
|
delay: z.ZodOptional<z.ZodNumber>;
|
|
3640
3640
|
}>, "strip", z.ZodTypeAny, {
|
|
3641
|
-
type: "type";
|
|
3642
3641
|
text: string;
|
|
3642
|
+
type: "type";
|
|
3643
3643
|
selector: string;
|
|
3644
3644
|
debug?: boolean | undefined;
|
|
3645
3645
|
timeout?: number | undefined;
|
|
@@ -3655,8 +3655,8 @@ export declare const BrowserActionSchema: z.ZodDiscriminatedUnion<"type", [z.Zod
|
|
|
3655
3655
|
} | undefined;
|
|
3656
3656
|
delay?: number | undefined;
|
|
3657
3657
|
}, {
|
|
3658
|
-
type: "type";
|
|
3659
3658
|
text: string;
|
|
3659
|
+
type: "type";
|
|
3660
3660
|
selector: string;
|
|
3661
3661
|
debug?: boolean | undefined;
|
|
3662
3662
|
timeout?: number | undefined;
|
|
@@ -3923,8 +3923,8 @@ export declare const BrowserActionSchema: z.ZodDiscriminatedUnion<"type", [z.Zod
|
|
|
3923
3923
|
visualVerify?: boolean | undefined;
|
|
3924
3924
|
visualThreshold?: number | undefined;
|
|
3925
3925
|
} | {
|
|
3926
|
-
type: "type";
|
|
3927
3926
|
text: string;
|
|
3927
|
+
type: "type";
|
|
3928
3928
|
selector: string;
|
|
3929
3929
|
debug?: boolean | undefined;
|
|
3930
3930
|
timeout?: number | undefined;
|
|
@@ -4045,8 +4045,8 @@ export declare const BrowserActionSchema: z.ZodDiscriminatedUnion<"type", [z.Zod
|
|
|
4045
4045
|
visualVerify?: boolean | undefined;
|
|
4046
4046
|
visualThreshold?: number | undefined;
|
|
4047
4047
|
} | {
|
|
4048
|
-
type: "type";
|
|
4049
4048
|
text: string;
|
|
4049
|
+
type: "type";
|
|
4050
4050
|
selector: string;
|
|
4051
4051
|
debug?: boolean | undefined;
|
|
4052
4052
|
timeout?: number | undefined;
|
|
@@ -4173,8 +4173,8 @@ export declare const BrowserActionSchema: z.ZodDiscriminatedUnion<"type", [z.Zod
|
|
|
4173
4173
|
visualVerify?: boolean | undefined;
|
|
4174
4174
|
visualThreshold?: number | undefined;
|
|
4175
4175
|
} | {
|
|
4176
|
-
type: "type";
|
|
4177
4176
|
text: string;
|
|
4177
|
+
type: "type";
|
|
4178
4178
|
selector: string;
|
|
4179
4179
|
debug?: boolean | undefined;
|
|
4180
4180
|
timeout?: number | undefined;
|
|
@@ -4313,8 +4313,8 @@ export declare const BrowserActionSchema: z.ZodDiscriminatedUnion<"type", [z.Zod
|
|
|
4313
4313
|
visualVerify?: boolean | undefined;
|
|
4314
4314
|
visualThreshold?: number | undefined;
|
|
4315
4315
|
} | {
|
|
4316
|
-
type: "type";
|
|
4317
4316
|
text: string;
|
|
4317
|
+
type: "type";
|
|
4318
4318
|
selector: string;
|
|
4319
4319
|
debug?: boolean | undefined;
|
|
4320
4320
|
timeout?: number | undefined;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Message } from './actions';
|
|
2
|
+
/**
|
|
3
|
+
* Contexts where message processing may occur
|
|
4
|
+
*/
|
|
5
|
+
export declare enum ProcessingContext {
|
|
6
|
+
ModelCall = "model-call",
|
|
7
|
+
FileCache = "file-cache",
|
|
8
|
+
WarmCache = "warm-cache"
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Interface for provider-specific image handling
|
|
12
|
+
*/
|
|
13
|
+
export interface IImageHandler {
|
|
14
|
+
/**
|
|
15
|
+
* Returns whether images should be passed along in the given context
|
|
16
|
+
*/
|
|
17
|
+
supportsImages(context: ProcessingContext): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Transform a message by either stripping, replacing, or modifying image blocks
|
|
20
|
+
*/
|
|
21
|
+
transformMessage(message: Message, context: ProcessingContext): Message;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Base handler that removes all images unless explicitly allowed
|
|
25
|
+
*/
|
|
26
|
+
export declare class DefaultImageHandler implements IImageHandler {
|
|
27
|
+
supportsImages(context: ProcessingContext): boolean;
|
|
28
|
+
transformMessage(message: Message, context: ProcessingContext): Message;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Register a new image handler for a provider
|
|
32
|
+
*/
|
|
33
|
+
export declare function registerImageHandler(provider: string, handler: IImageHandler): void;
|
|
34
|
+
/**
|
|
35
|
+
* Transform a message for a specific provider and context
|
|
36
|
+
*/
|
|
37
|
+
export declare function transformMessageForProvider(message: Message, provider: string, context: ProcessingContext): Message;
|
|
38
|
+
/**
|
|
39
|
+
* Transform an array of messages for a specific provider and context
|
|
40
|
+
*/
|
|
41
|
+
export declare function transformMessagesForProvider(messages: Message[], provider: string, context: ProcessingContext): Message[];
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultImageHandler = exports.ProcessingContext = void 0;
|
|
4
|
+
exports.registerImageHandler = registerImageHandler;
|
|
5
|
+
exports.transformMessageForProvider = transformMessageForProvider;
|
|
6
|
+
exports.transformMessagesForProvider = transformMessagesForProvider;
|
|
7
|
+
/**
|
|
8
|
+
* Contexts where message processing may occur
|
|
9
|
+
*/
|
|
10
|
+
var ProcessingContext;
|
|
11
|
+
(function (ProcessingContext) {
|
|
12
|
+
ProcessingContext["ModelCall"] = "model-call";
|
|
13
|
+
ProcessingContext["FileCache"] = "file-cache";
|
|
14
|
+
ProcessingContext["WarmCache"] = "warm-cache";
|
|
15
|
+
})(ProcessingContext || (exports.ProcessingContext = ProcessingContext = {}));
|
|
16
|
+
/**
|
|
17
|
+
* Base handler that removes all images unless explicitly allowed
|
|
18
|
+
*/
|
|
19
|
+
class DefaultImageHandler {
|
|
20
|
+
supportsImages(context) {
|
|
21
|
+
return context === ProcessingContext.FileCache;
|
|
22
|
+
}
|
|
23
|
+
transformMessage(message, context) {
|
|
24
|
+
if (!this.supportsImages(context)) {
|
|
25
|
+
const transformed = Array.isArray(message.content)
|
|
26
|
+
? message.content.filter(block => typeof block === 'string' ? true : block.type !== 'image')
|
|
27
|
+
: message.content;
|
|
28
|
+
return { ...message, content: transformed };
|
|
29
|
+
}
|
|
30
|
+
return message;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.DefaultImageHandler = DefaultImageHandler;
|
|
34
|
+
/**
|
|
35
|
+
* Registry mapping provider names to their image handlers
|
|
36
|
+
*/
|
|
37
|
+
const imageHandlerRegistry = {};
|
|
38
|
+
/**
|
|
39
|
+
* Register a new image handler for a provider
|
|
40
|
+
*/
|
|
41
|
+
function registerImageHandler(provider, handler) {
|
|
42
|
+
imageHandlerRegistry[provider] = handler;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Transform a message for a specific provider and context
|
|
46
|
+
*/
|
|
47
|
+
function transformMessageForProvider(message, provider, context) {
|
|
48
|
+
const handler = imageHandlerRegistry[provider] || new DefaultImageHandler();
|
|
49
|
+
return handler.transformMessage(message, context);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Transform an array of messages for a specific provider and context
|
|
53
|
+
*/
|
|
54
|
+
function transformMessagesForProvider(messages, provider, context) {
|
|
55
|
+
return messages.map(message => transformMessageForProvider(message, provider, context));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=message-image-handling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-image-handling.js","sourceRoot":"","sources":["../src/message-image-handling.ts"],"names":[],"mappings":";;;AAuDA,oDAEC;AAKD,kEAOC;AAKD,oEAMC;AA9ED;;GAEG;AACH,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,6CAAwB,CAAA;IACxB,6CAAwB,CAAA;IACxB,6CAAwB,CAAA;AAC1B,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AAiBD;;GAEG;AACH,MAAa,mBAAmB;IAC9B,cAAc,CAAC,OAA0B;QACvC,OAAO,OAAO,KAAK,iBAAiB,CAAC,SAAS,CAAC;IACjD,CAAC;IAED,gBAAgB,CAAC,OAAgB,EAAE,OAA0B;QAC3D,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBAChD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC7B,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAC1D;gBACH,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACpB,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAhBD,kDAgBC;AAED;;GAEG;AACH,MAAM,oBAAoB,GAAkC,EAAE,CAAC;AAE/D;;GAEG;AACH,SAAgB,oBAAoB,CAAC,QAAgB,EAAE,OAAsB;IAC3E,oBAAoB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CACzC,OAAgB,EAChB,QAAgB,EAChB,OAA0B;IAE1B,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;IAC5E,OAAO,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAgB,4BAA4B,CAC1C,QAAmB,EACnB,QAAgB,EAChB,OAA0B;IAE1B,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,2BAA2B,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1F,CAAC"}
|