@empiricalrun/test-gen 0.77.0 → 0.78.0

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 (87) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/agent/base/index.d.ts +3 -3
  3. package/dist/agent/base/index.d.ts.map +1 -1
  4. package/dist/agent/base/index.js +5 -3
  5. package/dist/agent/chat/exports.d.ts +1 -1
  6. package/dist/agent/chat/exports.d.ts.map +1 -1
  7. package/dist/agent/chat/exports.js +1 -3
  8. package/dist/agent/chat/models.d.ts.map +1 -1
  9. package/dist/agent/chat/models.js +1 -1
  10. package/dist/agent/chat/state.d.ts +1 -8
  11. package/dist/agent/chat/state.d.ts.map +1 -1
  12. package/dist/agent/chat/state.js +0 -15
  13. package/dist/agent/cli.d.ts.map +1 -1
  14. package/dist/agent/cli.js +12 -25
  15. package/dist/agent/code-review/index.d.ts +1 -1
  16. package/dist/agent/code-review/index.d.ts.map +1 -1
  17. package/dist/agent/code-review/index.js +3 -0
  18. package/dist/agent/code-review/types.d.ts +9 -9
  19. package/dist/agent/code-review/types.d.ts.map +1 -1
  20. package/dist/agent/triage/index.d.ts +1 -1
  21. package/dist/agent/triage/index.d.ts.map +1 -1
  22. package/dist/agent/triage/index.js +9 -14
  23. package/dist/bin/index.js +0 -55
  24. package/dist/tools/analyse-video/index.d.ts.map +1 -1
  25. package/dist/tools/analyse-video/index.js +8 -2
  26. package/dist/tools/definitions/analyse-video.d.ts +4 -4
  27. package/dist/tools/definitions/analyse-video.js +2 -2
  28. package/dist/tools/executor/base.d.ts +1 -1
  29. package/dist/tools/executor/base.d.ts.map +1 -1
  30. package/dist/tools/executor/base.js +19 -2
  31. package/dist/tools/executor/utils/index.d.ts +5 -3
  32. package/dist/tools/executor/utils/index.d.ts.map +1 -1
  33. package/dist/tools/executor/utils/index.js +22 -1
  34. package/dist/tools/file-operations/replace.d.ts.map +1 -1
  35. package/dist/tools/file-operations/replace.js +20 -21
  36. package/dist/tools/file-operations/shared/helpers.d.ts +3 -5
  37. package/dist/tools/file-operations/shared/helpers.d.ts.map +1 -1
  38. package/dist/tools/file-operations/shared/helpers.js +1 -5
  39. package/dist/tools/review-pull-request/index.d.ts.map +1 -1
  40. package/dist/tools/review-pull-request/index.js +4 -11
  41. package/dist/tools/upgrade-packages/index.d.ts.map +1 -1
  42. package/dist/tools/upgrade-packages/index.js +4 -0
  43. package/dist/tools/upgrade-packages/utils.d.ts +1 -0
  44. package/dist/tools/upgrade-packages/utils.d.ts.map +1 -1
  45. package/dist/tools/upgrade-packages/utils.js +1 -0
  46. package/dist/trace-utils/index.d.ts +1 -1
  47. package/dist/trace-utils/index.d.ts.map +1 -1
  48. package/dist/trace-utils/index.js +1 -1
  49. package/dist/utils/dedup/dedup-image.d.ts +22 -0
  50. package/dist/utils/dedup/dedup-image.d.ts.map +1 -0
  51. package/dist/utils/dedup/dedup-image.js +26 -0
  52. package/dist/utils/dedup/find-threshold.d.ts +2 -0
  53. package/dist/utils/dedup/find-threshold.d.ts.map +1 -0
  54. package/dist/utils/{find-threshold.js → dedup/find-threshold.js} +0 -13
  55. package/dist/video-core/agent-orchestrator.d.ts +1 -2
  56. package/dist/video-core/agent-orchestrator.d.ts.map +1 -1
  57. package/dist/video-core/agent-orchestrator.js +11 -30
  58. package/dist/video-core/index.d.ts +11 -16
  59. package/dist/video-core/index.d.ts.map +1 -1
  60. package/dist/video-core/index.js +110 -180
  61. package/dist/video-core/model-limits.d.ts.map +1 -1
  62. package/dist/video-core/model-limits.js +8 -2
  63. package/dist/video-core/storage-manager.d.ts.map +1 -1
  64. package/dist/video-core/storage-manager.js +13 -6
  65. package/dist/video-core/utils.d.ts +0 -10
  66. package/dist/video-core/utils.d.ts.map +1 -1
  67. package/dist/video-core/utils.js +1 -18
  68. package/package.json +5 -4
  69. package/tsconfig.tsbuildinfo +1 -1
  70. package/dist/utils/artifact-paths.d.ts +0 -20
  71. package/dist/utils/artifact-paths.d.ts.map +0 -1
  72. package/dist/utils/artifact-paths.js +0 -16
  73. package/dist/utils/dedup-image-fs.d.ts +0 -13
  74. package/dist/utils/dedup-image-fs.d.ts.map +0 -1
  75. package/dist/utils/dedup-image-fs.js +0 -84
  76. package/dist/utils/dedup-image.d.ts +0 -12
  77. package/dist/utils/dedup-image.d.ts.map +0 -1
  78. package/dist/utils/dedup-image.js +0 -25
  79. package/dist/utils/ffmpeg/index.d.ts +0 -26
  80. package/dist/utils/ffmpeg/index.d.ts.map +0 -1
  81. package/dist/utils/ffmpeg/index.js +0 -415
  82. package/dist/utils/find-threshold.d.ts +0 -8
  83. package/dist/utils/find-threshold.d.ts.map +0 -1
  84. package/dist/video-core/analysis-server.d.ts +0 -24
  85. package/dist/video-core/analysis-server.d.ts.map +0 -1
  86. package/dist/video-core/analysis-server.js +0 -398
  87. package/dist/video-core/analysis-viewer.html +0 -1374
@@ -1,204 +1,134 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.parseVideoAnalysisParams = parseVideoAnalysisParams;
7
- exports.runVideoAnalysisForCli = runVideoAnalysisForCli;
8
3
  exports.runVideoAnalysis = runVideoAnalysis;
9
- const node_fs_1 = __importDefault(require("node:fs"));
10
- const node_path_1 = __importDefault(require("node:path"));
11
- const constants_1 = require("../constants");
12
- const ffmpeg_1 = require("../utils/ffmpeg");
13
- const hash_1 = require("../utils/hash");
4
+ const videostil_1 = require("videostil");
14
5
  const agent_orchestrator_1 = require("./agent-orchestrator");
15
6
  const model_limits_1 = require("./model-limits");
16
7
  const storage_manager_1 = require("./storage-manager");
17
8
  const utils_1 = require("./utils");
18
- function parseVideoAnalysisParams(paramsString) {
19
- const defaults = {
20
- model: constants_1.VIDEO_ANALYSIS.DEFAULT_MODEL,
21
- fps: constants_1.VIDEO_ANALYSIS.DEFAULT_FPS,
22
- threshold: constants_1.VIDEO_ANALYSIS.DEFAULT_THRESHOLD,
9
+ async function runVideoAnalysis({ videoUrl, videoUrlHash, params, featureFlags, workingDirectory, skipUpload, algo, }) {
10
+ const result = {
11
+ total_extracted_frames: 0,
12
+ video_duration: 0,
13
+ unique_frames_count: 0,
14
+ video_url: videoUrl,
15
+ analysis: "",
16
+ analysis_id: videoUrlHash,
17
+ params,
23
18
  };
24
- if (!paramsString?.trim())
25
- return defaults;
26
- const result = { ...defaults };
27
- for (const chunk of paramsString.split(",")) {
28
- const [key, value] = chunk.split("=").map((s) => s.trim());
29
- if (!key || !value)
30
- continue;
31
- switch (key.toLowerCase()) {
32
- case "fps":
33
- case "threshold": {
34
- const num = Number(value);
35
- if (Number.isFinite(num))
36
- result[key] = num;
37
- break;
38
- }
39
- case "model":
40
- result.model = value;
41
- break;
42
- case "starttime":
43
- case "start_time":
44
- result.startTime = Number(value);
45
- break;
46
- case "duration":
47
- result.duration = Number(value);
48
- break;
49
- }
50
- }
51
- return result;
52
- }
53
- async function runVideoAnalysisForCli({ url, params, startServer = true, }) {
54
- console.log("🎬 Starting video analysis...");
55
- console.log(`📹 Video URL: ${url}`);
56
- console.log(`⚙️ Parameters: ${params || "default"}`);
57
- const videoAnalysisParams = parseVideoAnalysisParams(params);
58
- const videoUrlHash = (0, hash_1.createHashBasedOnParams)(url, videoAnalysisParams);
59
- const WORKING_DIR = node_path_1.default.join("video-analysis", videoUrlHash);
60
- let result;
61
- const startTime = performance.now();
19
+ let uniqueFrameInfos = [];
20
+ let interleavedResults = [];
21
+ let allMessages = [];
22
+ let currentStep = "initialization";
23
+ let finalError = null;
62
24
  try {
63
- const { result: analysisResult, unique_frames, interleaved_tool_result, chat_messages, } = await runVideoAnalysis({
64
- videoUrl: url,
65
- videoUrlHash,
66
- params: videoAnalysisParams,
67
- featureFlags: [],
68
- workingDirectory: WORKING_DIR,
69
- skipUpload: true,
70
- });
71
- result = {
72
- ...analysisResult,
73
- unique_frames: unique_frames,
74
- interleaved_tool_result: interleaved_tool_result,
75
- chat_messages: chat_messages,
76
- };
77
- const endTime = performance.now();
78
- const durationMs = endTime - startTime;
79
- console.log(`[Performance] Video analysis completed in ${durationMs.toFixed(2)}ms (${(durationMs / 1000).toFixed(2)}s)`);
80
- }
81
- catch (error) {
82
- console.error("Error during video analysis:", error);
83
- throw error;
84
- }
85
- console.log("✅ Video analysis completed!");
86
- console.log(`📊 Found ${result.unique_frames_count} unique frames`);
87
- if (startServer) {
88
- const resultFileName = `analysis-result.json`;
89
- await node_fs_1.default.promises.mkdir(WORKING_DIR, { recursive: true });
90
- const resultFilePath = node_path_1.default.join(WORKING_DIR, resultFileName);
91
- await node_fs_1.default.promises.writeFile(resultFilePath, JSON.stringify({ ...result, workingDir: WORKING_DIR }, null, 2));
92
- console.log(`💾 Analysis result saved to: ${resultFilePath}`);
93
- console.log("🚀 Starting analysis viewer server...");
94
- // Dynamic import to avoid circular dependency
95
- const { startAnalysisServer } = await import("./analysis-server.js");
96
- const handle = await startAnalysisServer("video-analysis");
97
- console.log(`🌐 Analysis viewer available at: ${handle.url}`);
98
- console.log("📋 Press Ctrl+C to stop the server");
99
- let isShuttingDown = false;
100
- const gracefulShutdown = async (signal) => {
101
- if (isShuttingDown)
102
- return;
103
- isShuttingDown = true;
104
- console.log(`\n🛑 Received ${signal}, shutting down server...`);
105
- try {
106
- await handle.close();
107
- process.exit(0);
108
- }
109
- catch (error) {
110
- console.error("Error closing server:", error);
111
- process.exit(1);
112
- }
113
- };
114
- process.once("SIGINT", () => gracefulShutdown("SIGINT"));
115
- process.once("SIGTERM", () => gracefulShutdown("SIGTERM"));
116
- return handle;
117
- }
118
- else {
119
- console.log("🚀 Analysis viewer server not started. Results available in the CLI.");
120
- console.log(result);
121
- process.exit(0);
122
- }
123
- }
124
- async function runVideoAnalysis({ videoUrl, videoUrlHash, params, featureFlags, workingDirectory, skipUpload, }) {
125
- try {
126
- const ffmpegClient = new ffmpeg_1.LocalFFmpegClient();
127
- const extractionResult = await ffmpegClient.extractVideoFrames(videoUrl, videoUrlHash, workingDirectory, {
128
- fps: params.fps,
129
- threshold: params.threshold,
130
- startTime: params.startTime,
131
- duration: params.duration,
132
- });
133
- const { totalFramesCount, uniqueFrameInfos, videoDurationSeconds } = extractionResult;
134
- await (0, storage_manager_1.uploadFramesToR2)(videoUrlHash, uniqueFrameInfos);
135
- const batchSize = await (0, model_limits_1.calculateOptimalBatchSize)(params.model, uniqueFrameInfos);
136
- const frameBatch = uniqueFrameInfos
137
- .map((f) => {
138
- return {
139
- name: f.fileName,
140
- contentType: "image/png",
141
- url: f.url,
142
- };
143
- })
144
- .slice(0, batchSize);
145
- const { analysis, allMessages, parsedXml } = await (0, agent_orchestrator_1.orchestrateVideoAnalysis)({
146
- selectedModel: params.model,
147
- featureFlags,
148
- workingDirectory,
149
- frameBatch,
150
- });
151
- const isTruncated = frameBatch.length !== batchSize;
152
- const finalAnalysis = isTruncated
153
- ? `NOTE: the unique frames to be processed were truncated to ${batchSize} due to limitations on the number of frames that can be processed in a single batch. ${analysis}`
25
+ currentStep = "frame_extraction";
26
+ let extractionResult;
27
+ try {
28
+ extractionResult = await (0, videostil_1.extractUniqueFrames)({
29
+ videoUrl,
30
+ fps: params.fps,
31
+ threshold: params.threshold,
32
+ startTime: params.startTime,
33
+ duration: params.duration,
34
+ algo: algo,
35
+ workingDir: workingDirectory,
36
+ });
37
+ }
38
+ catch (error) {
39
+ throw new Error(`Frame extraction failed: ${error instanceof Error ? error.message : String(error)}`);
40
+ }
41
+ const { totalFramesCount, uniqueFrames: extractedFrames, videoDurationSeconds, } = extractionResult;
42
+ // Map videostil FrameInfo to test-gen UniqueFrameInfos
43
+ uniqueFrameInfos = extractedFrames.map((frame) => ({
44
+ index: frame.index,
45
+ path: frame.path,
46
+ fileName: frame.fileName,
47
+ url: frame.url || `${(0, utils_1.getR2BaseUrlByHash)(videoUrlHash)}${frame.fileName}`,
48
+ base64: frame.base64 || "",
49
+ timestamp: frame.timestamp || "",
50
+ }));
51
+ result.total_extracted_frames = totalFramesCount;
52
+ result.video_duration = videoDurationSeconds;
53
+ result.unique_frames_count = uniqueFrameInfos.length;
54
+ currentStep = "batch_size_calculation";
55
+ let batchSize;
56
+ try {
57
+ batchSize = await (0, model_limits_1.calculateOptimalBatchSize)(params.model, uniqueFrameInfos);
58
+ }
59
+ catch (error) {
60
+ throw new Error(`Batch size calculation failed: ${error instanceof Error ? error.message : String(error)}`);
61
+ }
62
+ const uniqueFramesBatch = uniqueFrameInfos.slice(0, batchSize);
63
+ const frameBatch = uniqueFramesBatch.map((f) => ({
64
+ name: f.fileName,
65
+ contentType: "image/png",
66
+ base64Data: f.base64,
67
+ }));
68
+ currentStep = "video_analysis";
69
+ let analysis, parsedXml;
70
+ try {
71
+ const orchestrationResult = await (0, agent_orchestrator_1.orchestrateVideoAnalysis)({
72
+ selectedModel: params.model,
73
+ featureFlags,
74
+ workingDirectory,
75
+ frameBatch,
76
+ });
77
+ analysis = orchestrationResult.analysis;
78
+ allMessages = orchestrationResult.allMessages;
79
+ parsedXml = orchestrationResult.parsedXml;
80
+ }
81
+ catch (error) {
82
+ throw new Error(`Video analysis orchestration failed: ${error instanceof Error ? error.message : String(error)}`);
83
+ }
84
+ const allFramesLength = uniqueFrameInfos.length;
85
+ const isTruncated = allFramesLength !== batchSize;
86
+ const finalFrameTimestamp = uniqueFramesBatch[uniqueFramesBatch.length - 1]?.timestamp;
87
+ result.analysis = isTruncated
88
+ ? `NOTE: the unique frames to be processed were truncated to ${batchSize} due to limitations on the number of frames that can be processed in a single batch. The last frame processed was at timestamp ${finalFrameTimestamp}. ${analysis}`
154
89
  : analysis;
155
- const interleavedResults = (0, utils_1.createInterleavedResults)(parsedXml, uniqueFrameInfos);
156
- const videoAnalysisSummary = {
157
- total_extracted_frames: totalFramesCount,
158
- video_duration: videoDurationSeconds,
159
- unique_frames_count: uniqueFrameInfos.length,
160
- video_url: videoUrl,
161
- analysis: finalAnalysis,
162
- analysis_id: videoUrlHash,
163
- params,
164
- interleaved_tool_result: interleavedResults,
165
- };
90
+ currentStep = "interleaved_results";
91
+ try {
92
+ interleavedResults = (0, utils_1.createInterleavedResults)(parsedXml, uniqueFrameInfos);
93
+ }
94
+ catch (error) {
95
+ throw new Error(`Interleaved results creation failed: ${error instanceof Error ? error.message : String(error)}`);
96
+ }
166
97
  if (!skipUpload) {
167
- await (0, storage_manager_1.uploadSummaryToR2)(videoAnalysisSummary);
168
- await (0, storage_manager_1.uploadChatStateToR2)(allMessages, videoUrlHash);
98
+ currentStep = "upload_all";
99
+ const uploadPromises = [
100
+ (0, storage_manager_1.uploadFramesToR2)(videoUrlHash, uniqueFrameInfos).catch((error) => {
101
+ throw new Error(`Frame upload failed: ${error instanceof Error ? error.message : String(error)}`);
102
+ }),
103
+ (0, storage_manager_1.uploadSummaryToR2)({
104
+ ...result,
105
+ interleaved_tool_result: interleavedResults,
106
+ }).catch((error) => {
107
+ throw new Error(`Summary upload failed: ${error instanceof Error ? error.message : String(error)}`);
108
+ }),
109
+ (0, storage_manager_1.uploadChatStateToR2)(allMessages, videoUrlHash).catch((error) => {
110
+ throw new Error(`Chat state upload failed: ${error instanceof Error ? error.message : String(error)}`);
111
+ }),
112
+ ];
113
+ await Promise.all(uploadPromises);
169
114
  }
170
- const toolResult = {
171
- total_extracted_frames: totalFramesCount,
172
- video_duration: videoDurationSeconds,
173
- unique_frames_count: uniqueFrameInfos.length,
174
- video_url: videoUrl,
175
- analysis: finalAnalysis,
176
- analysis_id: videoUrlHash,
177
- params,
178
- };
179
115
  return {
180
- result: toolResult,
116
+ result,
181
117
  unique_frames: uniqueFrameInfos,
182
118
  interleaved_tool_result: interleavedResults,
183
119
  chat_messages: allMessages,
184
- isError: false,
120
+ error: finalError,
185
121
  };
186
122
  }
187
123
  catch (error) {
188
124
  const errorMessage = error instanceof Error ? error.message : String(error);
125
+ finalError = `Error at step [${currentStep}]: ${errorMessage}`;
189
126
  return {
190
- result: {
191
- total_extracted_frames: 0,
192
- video_duration: 0,
193
- unique_frames_count: 0,
194
- video_url: videoUrl,
195
- analysis: `Error during video analysis: ${errorMessage}`,
196
- analysis_id: videoUrlHash,
197
- params,
198
- },
199
- interleaved_tool_result: [],
200
- chat_messages: [],
201
- isError: true,
127
+ result,
128
+ unique_frames: uniqueFrameInfos,
129
+ interleaved_tool_result: interleavedResults,
130
+ chat_messages: allMessages,
131
+ error: finalError,
202
132
  };
203
133
  }
204
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model-limits.d.ts","sourceRoot":"","sources":["../../src/video-core/model-limits.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AAgCpC,wBAAsB,wBAAwB,CAC5C,gBAAgB,EAAE,gBAAgB,EAAE,GACnC,OAAO,CAAC,MAAM,CAAC,CAwBjB;AAED,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,mBAAmB,EAC1B,gBAAgB,EAAE,gBAAgB,EAAE,GACnC,OAAO,CAAC,MAAM,CAAC,CAwBjB"}
1
+ {"version":3,"file":"model-limits.d.ts","sourceRoot":"","sources":["../../src/video-core/model-limits.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AAgCpC,wBAAsB,wBAAwB,CAC5C,gBAAgB,EAAE,gBAAgB,EAAE,GACnC,OAAO,CAAC,MAAM,CAAC,CA6BjB;AAED,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,mBAAmB,EAC1B,gBAAgB,EAAE,gBAAgB,EAAE,GACnC,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
@@ -42,11 +42,14 @@ async function calculateActualBatchSize(uniqueFrameInfos) {
42
42
  return stats.size;
43
43
  }));
44
44
  const totalBytes = sizes.reduce((sum, size) => sum + size, 0);
45
- const totalMB = totalBytes / (1024 * 1024);
45
+ // Base64 encoding inflates size by ~33% (4/3 ratio)
46
+ const base64InflatedBytes = totalBytes * (4 / 3);
47
+ const totalMB = base64InflatedBytes / (1024 * 1024);
46
48
  return totalMB;
47
49
  }
48
50
  catch (error) {
49
- return uniqueFrameInfos.length * constants_1.VIDEO_ANALYSIS.DEFAULT_FRAME_SIZE_MB;
51
+ // Apply same base64 inflation to default calculation
52
+ return (uniqueFrameInfos.length * constants_1.VIDEO_ANALYSIS.DEFAULT_FRAME_SIZE_MB * (4 / 3));
50
53
  }
51
54
  }
52
55
  async function calculateOptimalBatchSize(model, uniqueFrameInfos) {
@@ -57,11 +60,14 @@ async function calculateOptimalBatchSize(model, uniqueFrameInfos) {
57
60
  let batchSize = Math.min(limits.maxImages, uniqueFrameInfos.length);
58
61
  while (batchSize > 0) {
59
62
  const frameBatch = uniqueFrameInfos.slice(0, batchSize);
63
+ console.log("Batch size:", frameBatch.length);
60
64
  const actualBatchSizeMB = await calculateActualBatchSize(frameBatch);
65
+ console.log("Actual batch size in MB:", actualBatchSizeMB);
61
66
  if (actualBatchSizeMB <= limits.maxSizeMB) {
62
67
  return batchSize;
63
68
  }
64
69
  batchSize = Math.floor(batchSize * constants_1.VIDEO_ANALYSIS.BATCH_SIZE_REDUCTION_FACTOR);
70
+ console.log("Reduced batch size:", batchSize);
65
71
  }
66
72
  return 1;
67
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage-manager.d.ts","sourceRoot":"","sources":["../../src/video-core/storage-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAoCpC,eAAO,MAAM,gBAAgB,GAC3B,cAAc,MAAM,EACpB,QAAQ,gBAAgB,EAAE,KACzB,OAAO,CAAC,IAAI,CAQd,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,WAAW,oBAAoB,KAC9B,OAAO,CAAC,IAAI,CAWd,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,gBAAgB,EAAE,EAC/B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf"}
1
+ {"version":3,"file":"storage-manager.d.ts","sourceRoot":"","sources":["../../src/video-core/storage-manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAoCpC,eAAO,MAAM,gBAAgB,GAC3B,cAAc,MAAM,EACpB,QAAQ,gBAAgB,EAAE,KACzB,OAAO,CAAC,IAAI,CAiBd,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,WAAW,oBAAoB,KAC9B,OAAO,CAAC,IAAI,CAWd,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,gBAAgB,EAAE,EAC/B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -26,12 +26,19 @@ const uploadToR2 = async (files, videoUrlHash) => {
26
26
  }
27
27
  };
28
28
  const uploadFramesToR2 = async (videoUrlHash, frames) => {
29
- const frameFiles = frames.map((f) => ({
30
- buffer: Buffer.from(f.base64, "base64"),
31
- fileName: f.fileName,
32
- mimeType: "image/png",
33
- }));
34
- await uploadToR2(frameFiles, videoUrlHash);
29
+ console.log(`[uploadFramesToR2] queuing ${frames.length} frames for upload`);
30
+ for (const frame of frames) {
31
+ (0, r2_uploader_1.sendTaskToQueue)(async () => {
32
+ const frameFile = {
33
+ buffer: Buffer.from(frame.base64, "base64"),
34
+ fileName: frame.fileName,
35
+ mimeType: "image/png",
36
+ };
37
+ await uploadToR2([frameFile], videoUrlHash);
38
+ });
39
+ }
40
+ await (0, r2_uploader_1.waitForTaskQueueToFinish)();
41
+ console.log(`[uploadFramesToR2] all ${frames.length} frames uploaded`);
35
42
  };
36
43
  exports.uploadFramesToR2 = uploadFramesToR2;
37
44
  const uploadSummaryToR2 = async (videoInfo) => {
@@ -12,14 +12,4 @@ export interface VideoValidationResult {
12
12
  }
13
13
  export declare function validateVideoAccess(videoUrl: string): Promise<VideoValidationResult>;
14
14
  export declare function downloadVideo(videoUrl: string, outputPath: string): Promise<void>;
15
- export declare function convertFramesForUpload(keyFrameImagesMap: Map<string, {
16
- type: "image/png";
17
- base64Data: string;
18
- }>): {
19
- metadata: {
20
- index: number;
21
- path: string;
22
- };
23
- image: string;
24
- }[];
25
15
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/video-core/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EAC1B,MAAM,4BAA4B,CAAC;AAIpC,eAAO,MAAM,kBAAkB,GAAI,cAAc,MAAM,WAEtD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,YAAY,MAAM,KACjB,KAAK,CAAC,yBAAyB,CAyCjC,CAAC;AA8DF,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EAAE,EACnB,sBAAsB,EAAE,MAAM,GAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAkBjE;AAED,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,yBAAyB,EAAE,EAC3C,gBAAgB,EAAE,gBAAgB,EAAE,GACnC,cAAc,EAAE,CAwClB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC,CAgBhC;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,GACxE;IACD,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf,EAAE,CAiBF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/video-core/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EAC1B,MAAM,4BAA4B,CAAC;AAIpC,eAAO,MAAM,kBAAkB,GAAI,cAAc,MAAM,WAEtD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,YAAY,MAAM,KACjB,KAAK,CAAC,yBAAyB,CAyCjC,CAAC;AA0DF,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EAAE,EACnB,sBAAsB,EAAE,MAAM,GAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAkBjE;AAED,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,yBAAyB,EAAE,EAC3C,gBAAgB,EAAE,gBAAgB,EAAE,GACnC,cAAc,EAAE,CAwClB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC,CAgBhC;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAoDf"}
@@ -8,7 +8,6 @@ exports.loadKeyFrameImages = loadKeyFrameImages;
8
8
  exports.createInterleavedResults = createInterleavedResults;
9
9
  exports.validateVideoAccess = validateVideoAccess;
10
10
  exports.downloadVideo = downloadVideo;
11
- exports.convertFramesForUpload = convertFramesForUpload;
12
11
  const fs_1 = require("fs");
13
12
  const path_1 = __importDefault(require("path"));
14
13
  const getR2BaseUrlByHash = (videoUrlHash) => {
@@ -56,7 +55,7 @@ async function fileExists(filePath) {
56
55
  // Try unique_frames directory first, then consolidated_frames as fallback
57
56
  async function findFramePath(frameId, baseDir) {
58
57
  const uniqueFramePath = path_1.default.join(baseDir, "unique_frames", `${frameId}.png`);
59
- const consolidatedFramePath = path_1.default.join(baseDir, "consolidated_frames", `${frameId}.png`);
58
+ const consolidatedFramePath = path_1.default.join(baseDir, "frames", `${frameId}.png`);
60
59
  if (await fileExists(uniqueFramePath)) {
61
60
  return uniqueFramePath;
62
61
  }
@@ -193,19 +192,3 @@ async function downloadVideo(videoUrl, outputPath) {
193
192
  }
194
193
  await fs_1.promises.writeFile(outputPath, buffer);
195
194
  }
196
- function convertFramesForUpload(keyFrameImagesMap) {
197
- return Array.from(keyFrameImagesMap.entries()).map(([frameId, imageData]) => {
198
- // Extract frame index from frameId (e.g., "frame_000006" -> 6)
199
- const frameNumberMatch = frameId.match(/frame_(\d+)/);
200
- const frameIndex = frameNumberMatch && frameNumberMatch[1]
201
- ? parseInt(frameNumberMatch[1], 10)
202
- : 0;
203
- return {
204
- metadata: {
205
- index: frameIndex,
206
- path: `${frameId}.png`,
207
- },
208
- image: imageData.base64Data,
209
- };
210
- });
211
- }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empiricalrun/test-gen",
3
- "version": "0.77.0",
3
+ "version": "0.78.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"
@@ -81,11 +81,12 @@
81
81
  "ts-morph": "^23.0.0",
82
82
  "tsx": "^4.16.2",
83
83
  "typescript": "^5.3.3",
84
+ "videostil": "^0.1.2",
84
85
  "yauzl": "^3.1.3",
85
86
  "zod": "^3.23.8",
86
87
  "@empiricalrun/ast-parser": "^0.0.10",
87
- "@empiricalrun/llm": "^0.23.0",
88
- "@empiricalrun/r2-uploader": "^0.3.11",
88
+ "@empiricalrun/llm": "^0.24.0",
89
+ "@empiricalrun/r2-uploader": "^0.4.0",
89
90
  "@empiricalrun/test-run": "^0.11.1"
90
91
  },
91
92
  "devDependencies": {
@@ -109,7 +110,7 @@
109
110
  },
110
111
  "scripts": {
111
112
  "dev": "tspc --build --watch",
112
- "build": "tspc --build && cp -r src/browser-injected-scripts dist && cp src/video-core/analysis-viewer.html dist/video-core/",
113
+ "build": "tspc --build && cp -r src/browser-injected-scripts dist",
113
114
  "clean": "tspc --build --clean",
114
115
  "lint": "biome check --unsafe",
115
116
  "test": "vitest run",
@@ -1 +1 @@
1
- {"root":["./src/index.ts","./src/logger.ts","./src/actions/assert.ts","./src/actions/click.ts","./src/actions/done.ts","./src/actions/fill.ts","./src/actions/goto.ts","./src/actions/hover.ts","./src/actions/index.ts","./src/actions/next-task.ts","./src/actions/press.ts","./src/actions/skill.ts","./src/actions/text-content.ts","./src/actions/constants/index.ts","./src/actions/utils/index.ts","./src/agent/cli.ts","./src/agent/index.ts","./src/agent/base/index.ts","./src/agent/browsing/index.ts","./src/agent/browsing/run.ts","./src/agent/browsing/utils.ts","./src/agent/chat/agent-loop.ts","./src/agent/chat/exports.ts","./src/agent/chat/filesystem-cache.ts","./src/agent/chat/index.ts","./src/agent/chat/models.ts","./src/agent/chat/state.ts","./src/agent/chat/types.ts","./src/agent/chat/utils.ts","./src/agent/chat/prompt/pw-utils-docs.ts","./src/agent/chat/prompt/repo.ts","./src/agent/chat/prompt/test-case-def.ts","./src/agent/code-review/index.ts","./src/agent/code-review/parser.ts","./src/agent/code-review/types.ts","./src/agent/code-review/executor/index.ts","./src/agent/codegen/create-test-block.ts","./src/agent/codegen/fix-ts-errors.ts","./src/agent/codegen/lexical-scoped-vars.ts","./src/agent/codegen/skills-retriever.ts","./src/agent/codegen/test-update-feedback.ts","./src/agent/codegen/types.ts","./src/agent/codegen/update-flow.ts","./src/agent/codegen/use-skill.ts","./src/agent/codegen/utils.ts","./src/agent/cua/computer.ts","./src/agent/cua/index.ts","./src/agent/cua/model.ts","./src/agent/cua/pw-codegen/element-from-point.ts","./src/agent/cua/pw-codegen/types.ts","./src/agent/cua/pw-codegen/pw-pause/for-recorder.ts","./src/agent/cua/pw-codegen/pw-pause/index.ts","./src/agent/cua/pw-codegen/pw-pause/ipc.ts","./src/agent/cua/pw-codegen/pw-pause/patch.ts","./src/agent/cua/pw-codegen/pw-pause/types.ts","./src/agent/cua/pw-codegen/pw-pause/utils.ts","./src/agent/master/action-tool-calls.ts","./src/agent/master/element-annotation.ts","./src/agent/master/execute-browser-action.ts","./src/agent/master/execute-skill-action.ts","./src/agent/master/next-action.ts","./src/agent/master/planner.ts","./src/agent/master/run.ts","./src/agent/master/scroller.ts","./src/agent/master/with-hints.ts","./src/agent/master/browser-tests/cua.spec.ts","./src/agent/master/browser-tests/fixtures.ts","./src/agent/master/browser-tests/index.spec.ts","./src/agent/master/browser-tests/skills.spec.ts","./src/agent/master/icon-descriptor/index.ts","./src/agent/master/icon-descriptor/normalize-svg.ts","./src/agent/planner/run-time-planner.ts","./src/agent/planner/run.ts","./src/agent/triage/index.ts","./src/agent/video-analysis/index.ts","./src/agent/video-analysis/executor/index.ts","./src/artifacts/index.ts","./src/artifacts/utils.ts","./src/auth/cli-auth.ts","./src/auth/index.ts","./src/auth/token-store.ts","./src/bin/environments.ts","./src/bin/index.ts","./src/bin/setup.ts","./src/bin/logger/index.ts","./src/bin/utils/context.ts","./src/bin/utils/index.ts","./src/bin/utils/fs/index.ts","./src/bin/utils/platform/web/index.ts","./src/bin/utils/platform/web/test-files/ts-path-import-validate.ts","./src/bin/utils/scenarios/index.ts","./src/browser-injected-scripts/annotate-elements.spec.ts","./src/constants/index.ts","./src/dashboard/client.ts","./src/dashboard/index.ts","./src/dashboard/totp.ts","./src/dashboard/types.ts","./src/errors/index.ts","./src/evals/append-create-test-agent.evals.ts","./src/evals/fetch-pom-skills-agent.evals.ts","./src/evals/master-agent.evals.ts","./src/evals/type.ts","./src/evals/update-scenario-agent.evals.ts","./src/file/client.ts","./src/file/server.ts","./src/file-info/index.ts","./src/file-info/adapters/file-system/index.ts","./src/file-info/adapters/file-system/reader.ts","./src/file-info/adapters/github/index.ts","./src/file-info/adapters/github/reader.ts","./src/human-in-the-loop/cli.ts","./src/human-in-the-loop/index.ts","./src/human-in-the-loop/ipc.ts","./src/page/index.ts","./src/prompts/lib/ts-transformer.ts","./src/recorder/env-variables.ts","./src/recorder/index.ts","./src/recorder/request.ts","./src/recorder/temp-files.ts","./src/recorder/upload.ts","./src/recorder/validation.ts","./src/test-build/index.ts","./src/tools/diagnosis-fetcher.ts","./src/tools/index.ts","./src/tools/list-environments.ts","./src/tools/run-test.ts","./src/tools/test-gen-browser.ts","./src/tools/analyse-video/index.ts","./src/tools/create-pull-request/index.ts","./src/tools/create-pull-request/utils.ts","./src/tools/definitions/analyse-video.ts","./src/tools/definitions/delete-file.ts","./src/tools/definitions/download-build.ts","./src/tools/definitions/grep.ts","./src/tools/definitions/list-tests-and-projects.ts","./src/tools/definitions/merge-conflicts.ts","./src/tools/definitions/rename-file.ts","./src/tools/definitions/review-pull-request.ts","./src/tools/definitions/run-test.ts","./src/tools/definitions/str_replace_editor.ts","./src/tools/definitions/test-gen-browser.ts","./src/tools/definitions/upgrade-packages.ts","./src/tools/definitions/utils.ts","./src/tools/delete-file/index.ts","./src/tools/download-build/index.ts","./src/tools/executor/base.ts","./src/tools/executor/index.ts","./src/tools/executor/utils/checkpoint.ts","./src/tools/executor/utils/git.ts","./src/tools/executor/utils/index.ts","./src/tools/executor/utils/pr-description.ts","./src/tools/fetch-file/index.ts","./src/tools/fetch-last-successful-test-run/index.ts","./src/tools/fetch-session-diff/index.ts","./src/tools/file-operations/create.ts","./src/tools/file-operations/index.ts","./src/tools/file-operations/insert.ts","./src/tools/file-operations/replace.ts","./src/tools/file-operations/shared/helpers.ts","./src/tools/file-operations/view/index.ts","./src/tools/grep/index.ts","./src/tools/grep/types.ts","./src/tools/grep/ripgrep/index.ts","./src/tools/issues/create-issue.ts","./src/tools/issues/index.ts","./src/tools/issues/list-issues.ts","./src/tools/issues/metadata-schema.ts","./src/tools/issues/update-issue.ts","./src/tools/issues/utils.ts","./src/tools/list-tests-and-projects/index.ts","./src/tools/merge-conflicts/index.ts","./src/tools/rename-file/index.ts","./src/tools/review-pull-request/index.ts","./src/tools/test-run-fetcher/index.ts","./src/tools/test-run-fetcher/types.ts","./src/tools/trace-dot-zip/index.ts","./src/tools/trace-dot-zip/types.ts","./src/tools/trace-dot-zip/utils/console-trace.ts","./src/tools/trace-dot-zip/utils/extract-zip.ts","./src/tools/trace-dot-zip/utils/network-trace.ts","./src/tools/triage-summary/index.ts","./src/tools/triage-summary/types.ts","./src/tools/triage-summary/utils.ts","./src/tools/upgrade-packages/index.ts","./src/tools/upgrade-packages/utils.ts","./src/tools/utils/queue.ts","./src/tools/utils/urls.ts","./src/tools/view-failed-test-run-report/index.ts","./src/trace-utils/index.ts","./src/types/handlebars.d.ts","./src/types/index.ts","./src/utils/SQSClient.ts","./src/utils/artifact-paths.ts","./src/utils/dedup-image-fs.ts","./src/utils/dedup-image.ts","./src/utils/env.ts","./src/utils/exec.ts","./src/utils/file.ts","./src/utils/find-threshold.ts","./src/utils/hash.ts","./src/utils/html.ts","./src/utils/index.ts","./src/utils/json.ts","./src/utils/model.ts","./src/utils/playwright-report-parser.ts","./src/utils/repo-tree.ts","./src/utils/slug.ts","./src/utils/string.ts","./src/utils/stripAnsi.ts","./src/utils/ffmpeg/index.ts","./src/video-core/agent-orchestrator.ts","./src/video-core/analysis-server.ts","./src/video-core/index.ts","./src/video-core/model-limits.ts","./src/video-core/storage-manager.ts","./src/video-core/types.ts","./src/video-core/utils.ts","./src/video-core/xml-parser.ts"],"version":"5.8.3"}
1
+ {"root":["./src/index.ts","./src/logger.ts","./src/actions/assert.ts","./src/actions/click.ts","./src/actions/done.ts","./src/actions/fill.ts","./src/actions/goto.ts","./src/actions/hover.ts","./src/actions/index.ts","./src/actions/next-task.ts","./src/actions/press.ts","./src/actions/skill.ts","./src/actions/text-content.ts","./src/actions/constants/index.ts","./src/actions/utils/index.ts","./src/agent/cli.ts","./src/agent/index.ts","./src/agent/base/index.ts","./src/agent/browsing/index.ts","./src/agent/browsing/run.ts","./src/agent/browsing/utils.ts","./src/agent/chat/agent-loop.ts","./src/agent/chat/exports.ts","./src/agent/chat/filesystem-cache.ts","./src/agent/chat/index.ts","./src/agent/chat/models.ts","./src/agent/chat/state.ts","./src/agent/chat/types.ts","./src/agent/chat/utils.ts","./src/agent/chat/prompt/pw-utils-docs.ts","./src/agent/chat/prompt/repo.ts","./src/agent/chat/prompt/test-case-def.ts","./src/agent/code-review/index.ts","./src/agent/code-review/parser.ts","./src/agent/code-review/types.ts","./src/agent/code-review/executor/index.ts","./src/agent/codegen/create-test-block.ts","./src/agent/codegen/fix-ts-errors.ts","./src/agent/codegen/lexical-scoped-vars.ts","./src/agent/codegen/skills-retriever.ts","./src/agent/codegen/test-update-feedback.ts","./src/agent/codegen/types.ts","./src/agent/codegen/update-flow.ts","./src/agent/codegen/use-skill.ts","./src/agent/codegen/utils.ts","./src/agent/cua/computer.ts","./src/agent/cua/index.ts","./src/agent/cua/model.ts","./src/agent/cua/pw-codegen/element-from-point.ts","./src/agent/cua/pw-codegen/types.ts","./src/agent/cua/pw-codegen/pw-pause/for-recorder.ts","./src/agent/cua/pw-codegen/pw-pause/index.ts","./src/agent/cua/pw-codegen/pw-pause/ipc.ts","./src/agent/cua/pw-codegen/pw-pause/patch.ts","./src/agent/cua/pw-codegen/pw-pause/types.ts","./src/agent/cua/pw-codegen/pw-pause/utils.ts","./src/agent/master/action-tool-calls.ts","./src/agent/master/element-annotation.ts","./src/agent/master/execute-browser-action.ts","./src/agent/master/execute-skill-action.ts","./src/agent/master/next-action.ts","./src/agent/master/planner.ts","./src/agent/master/run.ts","./src/agent/master/scroller.ts","./src/agent/master/with-hints.ts","./src/agent/master/browser-tests/cua.spec.ts","./src/agent/master/browser-tests/fixtures.ts","./src/agent/master/browser-tests/index.spec.ts","./src/agent/master/browser-tests/skills.spec.ts","./src/agent/master/icon-descriptor/index.ts","./src/agent/master/icon-descriptor/normalize-svg.ts","./src/agent/planner/run-time-planner.ts","./src/agent/planner/run.ts","./src/agent/triage/index.ts","./src/agent/video-analysis/index.ts","./src/agent/video-analysis/executor/index.ts","./src/artifacts/index.ts","./src/artifacts/utils.ts","./src/auth/cli-auth.ts","./src/auth/index.ts","./src/auth/token-store.ts","./src/bin/environments.ts","./src/bin/index.ts","./src/bin/setup.ts","./src/bin/logger/index.ts","./src/bin/utils/context.ts","./src/bin/utils/index.ts","./src/bin/utils/fs/index.ts","./src/bin/utils/platform/web/index.ts","./src/bin/utils/platform/web/test-files/ts-path-import-validate.ts","./src/bin/utils/scenarios/index.ts","./src/browser-injected-scripts/annotate-elements.spec.ts","./src/constants/index.ts","./src/dashboard/client.ts","./src/dashboard/index.ts","./src/dashboard/totp.ts","./src/dashboard/types.ts","./src/errors/index.ts","./src/evals/append-create-test-agent.evals.ts","./src/evals/fetch-pom-skills-agent.evals.ts","./src/evals/master-agent.evals.ts","./src/evals/type.ts","./src/evals/update-scenario-agent.evals.ts","./src/file/client.ts","./src/file/server.ts","./src/file-info/index.ts","./src/file-info/adapters/file-system/index.ts","./src/file-info/adapters/file-system/reader.ts","./src/file-info/adapters/github/index.ts","./src/file-info/adapters/github/reader.ts","./src/human-in-the-loop/cli.ts","./src/human-in-the-loop/index.ts","./src/human-in-the-loop/ipc.ts","./src/page/index.ts","./src/prompts/lib/ts-transformer.ts","./src/recorder/env-variables.ts","./src/recorder/index.ts","./src/recorder/request.ts","./src/recorder/temp-files.ts","./src/recorder/upload.ts","./src/recorder/validation.ts","./src/test-build/index.ts","./src/tools/diagnosis-fetcher.ts","./src/tools/index.ts","./src/tools/list-environments.ts","./src/tools/run-test.ts","./src/tools/test-gen-browser.ts","./src/tools/analyse-video/index.ts","./src/tools/create-pull-request/index.ts","./src/tools/create-pull-request/utils.ts","./src/tools/definitions/analyse-video.ts","./src/tools/definitions/delete-file.ts","./src/tools/definitions/download-build.ts","./src/tools/definitions/grep.ts","./src/tools/definitions/list-tests-and-projects.ts","./src/tools/definitions/merge-conflicts.ts","./src/tools/definitions/rename-file.ts","./src/tools/definitions/review-pull-request.ts","./src/tools/definitions/run-test.ts","./src/tools/definitions/str_replace_editor.ts","./src/tools/definitions/test-gen-browser.ts","./src/tools/definitions/upgrade-packages.ts","./src/tools/definitions/utils.ts","./src/tools/delete-file/index.ts","./src/tools/download-build/index.ts","./src/tools/executor/base.ts","./src/tools/executor/index.ts","./src/tools/executor/utils/checkpoint.ts","./src/tools/executor/utils/git.ts","./src/tools/executor/utils/index.ts","./src/tools/executor/utils/pr-description.ts","./src/tools/fetch-file/index.ts","./src/tools/fetch-last-successful-test-run/index.ts","./src/tools/fetch-session-diff/index.ts","./src/tools/file-operations/create.ts","./src/tools/file-operations/index.ts","./src/tools/file-operations/insert.ts","./src/tools/file-operations/replace.ts","./src/tools/file-operations/shared/helpers.ts","./src/tools/file-operations/view/index.ts","./src/tools/grep/index.ts","./src/tools/grep/types.ts","./src/tools/grep/ripgrep/index.ts","./src/tools/issues/create-issue.ts","./src/tools/issues/index.ts","./src/tools/issues/list-issues.ts","./src/tools/issues/metadata-schema.ts","./src/tools/issues/update-issue.ts","./src/tools/issues/utils.ts","./src/tools/list-tests-and-projects/index.ts","./src/tools/merge-conflicts/index.ts","./src/tools/rename-file/index.ts","./src/tools/review-pull-request/index.ts","./src/tools/test-run-fetcher/index.ts","./src/tools/test-run-fetcher/types.ts","./src/tools/trace-dot-zip/index.ts","./src/tools/trace-dot-zip/types.ts","./src/tools/trace-dot-zip/utils/console-trace.ts","./src/tools/trace-dot-zip/utils/extract-zip.ts","./src/tools/trace-dot-zip/utils/network-trace.ts","./src/tools/triage-summary/index.ts","./src/tools/triage-summary/types.ts","./src/tools/triage-summary/utils.ts","./src/tools/upgrade-packages/index.ts","./src/tools/upgrade-packages/utils.ts","./src/tools/utils/queue.ts","./src/tools/utils/urls.ts","./src/tools/view-failed-test-run-report/index.ts","./src/trace-utils/index.ts","./src/types/handlebars.d.ts","./src/types/index.ts","./src/utils/SQSClient.ts","./src/utils/env.ts","./src/utils/exec.ts","./src/utils/file.ts","./src/utils/hash.ts","./src/utils/html.ts","./src/utils/index.ts","./src/utils/json.ts","./src/utils/model.ts","./src/utils/playwright-report-parser.ts","./src/utils/repo-tree.ts","./src/utils/slug.ts","./src/utils/string.ts","./src/utils/stripAnsi.ts","./src/utils/dedup/dedup-image.ts","./src/utils/dedup/find-threshold.ts","./src/video-core/agent-orchestrator.ts","./src/video-core/index.ts","./src/video-core/model-limits.ts","./src/video-core/storage-manager.ts","./src/video-core/types.ts","./src/video-core/utils.ts","./src/video-core/xml-parser.ts"],"version":"5.8.3"}
@@ -1,20 +0,0 @@
1
- /**
2
- * root/ (= baseArtifactDir)
3
- * - video_<videoUrlHash>.webm (= videoFile)
4
- * - chunk_1.mp4
5
- * - consolidated_frames/ (= consolidatedFramesDir)
6
- * - frame_0001.png
7
- * - frame_0002.png
8
- * - ...
9
- * - unique_frames/ (= uniqueFramesDir)
10
- * - frame_0002.png
11
- * - ...
12
- */
13
- export interface VideoArtifactPaths {
14
- baseArtifactDir: string;
15
- videoFile: string;
16
- consolidatedFramesDir: string;
17
- uniqueFramesDir: string;
18
- }
19
- export declare function resolveVideoArtifactPaths(artifactsPath: string, videoUrlHash: string): VideoArtifactPaths;
20
- //# sourceMappingURL=artifact-paths.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"artifact-paths.d.ts","sourceRoot":"","sources":["../../src/utils/artifact-paths.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,kBAAkB;IAEjC,eAAe,EAAE,MAAM,CAAC;IAExB,SAAS,EAAE,MAAM,CAAC;IAElB,qBAAqB,EAAE,MAAM,CAAC;IAE9B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,kBAAkB,CAQpB"}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.resolveVideoArtifactPaths = resolveVideoArtifactPaths;
7
- const node_path_1 = __importDefault(require("node:path"));
8
- function resolveVideoArtifactPaths(artifactsPath, videoUrlHash) {
9
- const baseArtifactDir = artifactsPath;
10
- return {
11
- baseArtifactDir,
12
- videoFile: node_path_1.default.join(baseArtifactDir, `video_${videoUrlHash}.webm`),
13
- consolidatedFramesDir: node_path_1.default.join(baseArtifactDir, "consolidated_frames"),
14
- uniqueFramesDir: node_path_1.default.join(baseArtifactDir, "unique_frames"),
15
- };
16
- }
@@ -1,13 +0,0 @@
1
- export declare function deduplicateImageFiles({ imagePaths, batchSize, threshold, logPrefix, }: {
2
- imagePaths: string[];
3
- batchSize: number;
4
- threshold: number;
5
- logPrefix?: string;
6
- }): Promise<{
7
- metadata: {
8
- index: number;
9
- path: string;
10
- };
11
- image: string;
12
- }[]>;
13
- //# sourceMappingURL=dedup-image-fs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dedup-image-fs.d.ts","sourceRoot":"","sources":["../../src/utils/dedup-image-fs.ts"],"names":[],"mappings":"AAKA,wBAAsB,qBAAqB,CAAC,EAC1C,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAA4B,GAC7B,EAAE;IACD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CA2G1E"}