@empiricalrun/test-gen 0.74.1 → 0.75.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 (100) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/agent/base/index.d.ts +36 -0
  3. package/dist/agent/base/index.d.ts.map +1 -0
  4. package/dist/agent/base/index.js +74 -0
  5. package/dist/agent/chat/agent-loop.d.ts +4 -5
  6. package/dist/agent/chat/agent-loop.d.ts.map +1 -1
  7. package/dist/agent/chat/agent-loop.js +2 -9
  8. package/dist/agent/chat/exports.d.ts +3 -3
  9. package/dist/agent/chat/exports.d.ts.map +1 -1
  10. package/dist/agent/chat/exports.js +5 -5
  11. package/dist/agent/chat/index.d.ts.map +1 -1
  12. package/dist/agent/chat/index.js +8 -11
  13. package/dist/agent/chat/state.d.ts +2 -3
  14. package/dist/agent/chat/state.d.ts.map +1 -1
  15. package/dist/agent/chat/state.js +0 -8
  16. package/dist/agent/chat/utils.d.ts +0 -1
  17. package/dist/agent/chat/utils.d.ts.map +1 -1
  18. package/dist/agent/chat/utils.js +1 -14
  19. package/dist/file-info/adapters/github/index.d.ts +2 -2
  20. package/dist/file-info/adapters/github/index.d.ts.map +1 -1
  21. package/dist/file-info/adapters/github/index.js +3 -2
  22. package/dist/file-info/adapters/github/reader.d.ts +3 -3
  23. package/dist/file-info/adapters/github/reader.d.ts.map +1 -1
  24. package/dist/file-info/adapters/github/reader.js +17 -16
  25. package/dist/tools/commit-and-create-pr/index.js +1 -1
  26. package/dist/tools/definitions/fetch-video-analysis.d.ts +28 -0
  27. package/dist/tools/definitions/fetch-video-analysis.d.ts.map +1 -1
  28. package/dist/tools/definitions/fetch-video-analysis.js +39 -4
  29. package/dist/tools/definitions/list-tests-and-projects.d.ts +12 -0
  30. package/dist/tools/definitions/list-tests-and-projects.d.ts.map +1 -0
  31. package/dist/tools/definitions/list-tests-and-projects.js +25 -0
  32. package/dist/tools/definitions/rename-file.d.ts +3 -0
  33. package/dist/tools/definitions/rename-file.d.ts.map +1 -0
  34. package/dist/tools/definitions/rename-file.js +23 -0
  35. package/dist/tools/delete-file/index.d.ts.map +1 -1
  36. package/dist/tools/delete-file/index.js +13 -1
  37. package/dist/tools/executor/index.d.ts.map +1 -1
  38. package/dist/tools/executor/index.js +6 -3
  39. package/dist/tools/executor/utils/checkpoint.d.ts +1 -3
  40. package/dist/tools/executor/utils/checkpoint.d.ts.map +1 -1
  41. package/dist/tools/executor/utils/checkpoint.js +17 -17
  42. package/dist/tools/executor/utils/git.d.ts +9 -1
  43. package/dist/tools/executor/utils/git.d.ts.map +1 -1
  44. package/dist/tools/executor/utils/git.js +72 -2
  45. package/dist/tools/{fetch-image → fetch-file}/index.d.ts +2 -2
  46. package/dist/tools/fetch-file/index.d.ts.map +1 -0
  47. package/dist/tools/fetch-file/index.js +97 -0
  48. package/dist/tools/fetch-video-analysis/index.d.ts +3 -3
  49. package/dist/tools/fetch-video-analysis/index.d.ts.map +1 -1
  50. package/dist/tools/fetch-video-analysis/index.js +71 -22
  51. package/dist/tools/fetch-video-analysis/local-ffmpeg-client.d.ts +8 -9
  52. package/dist/tools/fetch-video-analysis/local-ffmpeg-client.d.ts.map +1 -1
  53. package/dist/tools/fetch-video-analysis/local-ffmpeg-client.js +55 -17
  54. package/dist/tools/fetch-video-analysis/open-ai.d.ts +6 -0
  55. package/dist/tools/fetch-video-analysis/open-ai.d.ts.map +1 -0
  56. package/dist/tools/fetch-video-analysis/open-ai.js +37 -0
  57. package/dist/tools/fetch-video-analysis/utils.d.ts +6 -3
  58. package/dist/tools/fetch-video-analysis/utils.d.ts.map +1 -1
  59. package/dist/tools/fetch-video-analysis/utils.js +41 -15
  60. package/dist/tools/fetch-video-analysis/video-analysis.js +1 -1
  61. package/dist/tools/file-operations/create.d.ts.map +1 -1
  62. package/dist/tools/file-operations/create.js +6 -3
  63. package/dist/tools/file-operations/insert.d.ts.map +1 -1
  64. package/dist/tools/file-operations/insert.js +6 -3
  65. package/dist/tools/file-operations/replace.d.ts.map +1 -1
  66. package/dist/tools/file-operations/replace.js +6 -3
  67. package/dist/tools/file-operations/shared/git-helper.d.ts.map +1 -1
  68. package/dist/tools/file-operations/shared/git-helper.js +1 -1
  69. package/dist/tools/file-operations/view/index.d.ts +2 -5
  70. package/dist/tools/file-operations/view/index.d.ts.map +1 -1
  71. package/dist/tools/file-operations/view/index.js +2 -22
  72. package/dist/tools/index.d.ts +1 -1
  73. package/dist/tools/index.d.ts.map +1 -1
  74. package/dist/tools/index.js +19 -6
  75. package/dist/tools/issues/update-issue.d.ts.map +1 -1
  76. package/dist/tools/issues/update-issue.js +16 -9
  77. package/dist/tools/list-tests-and-projects/index.d.ts +6 -0
  78. package/dist/tools/list-tests-and-projects/index.d.ts.map +1 -0
  79. package/dist/tools/list-tests-and-projects/index.js +57 -0
  80. package/dist/tools/merge-conflicts/index.js +1 -1
  81. package/dist/tools/rename-file/index.d.ts +3 -0
  82. package/dist/tools/rename-file/index.d.ts.map +1 -0
  83. package/dist/tools/rename-file/index.js +88 -0
  84. package/dist/tools/run-test.js +2 -2
  85. package/dist/tools/test-gen-browser.js +1 -1
  86. package/dist/tools/trace-dot-zip/index.d.ts.map +1 -1
  87. package/dist/tools/trace-dot-zip/index.js +2 -1
  88. package/dist/tools/trace-dot-zip/types.d.ts +35 -3
  89. package/dist/tools/trace-dot-zip/types.d.ts.map +1 -1
  90. package/dist/tools/trace-dot-zip/utils/network-trace.d.ts +7 -2
  91. package/dist/tools/trace-dot-zip/utils/network-trace.d.ts.map +1 -1
  92. package/dist/tools/trace-dot-zip/utils/network-trace.js +130 -10
  93. package/dist/tools/upgrade-packages/index.js +1 -1
  94. package/dist/utils/index.d.ts +0 -1
  95. package/dist/utils/index.d.ts.map +1 -1
  96. package/dist/utils/index.js +1 -3
  97. package/package.json +5 -5
  98. package/tsconfig.tsbuildinfo +1 -1
  99. package/dist/tools/fetch-image/index.d.ts.map +0 -1
  100. package/dist/tools/fetch-image/index.js +0 -63
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stripIrrelevantInfoFromNetworkFailureArray = exports.generateNetworkTraceFromZipUrl = exports.generateNetworkTrace = void 0;
3
+ exports.buildNetworkCallSequence = exports.hydrateSha1Bodies = exports.stripIrrelevantInfoFromNetworkFailureArray = exports.generateNetworkTraceFromZipUrl = exports.generateNetworkTrace = void 0;
4
4
  const date_fns_1 = require("date-fns");
5
+ const json_1 = require("../../../utils/json");
5
6
  const extract_zip_1 = require("./extract-zip");
6
7
  const NON_RELEVANT_NETWORK_CALL_KEYWORDS = [
7
8
  "sentry",
@@ -97,6 +98,7 @@ const generateNetworkTrace = async ({ logPrefix = "network-trace", url, failure,
97
98
  method: call?.snapshot?.request?.method,
98
99
  request: {
99
100
  headers: call?.snapshot?.request?.headers ?? [],
101
+ body: call?.snapshot?.request?.postData ?? undefined,
100
102
  },
101
103
  response: {
102
104
  headers: call?.snapshot?.response?.headers ?? [],
@@ -130,7 +132,8 @@ const generateNetworkTrace = async ({ logPrefix = "network-trace", url, failure,
130
132
  exports.generateNetworkTrace = generateNetworkTrace;
131
133
  const generateNetworkTraceFromZipUrl = async ({ url, }) => {
132
134
  try {
133
- const failedCalls = [];
135
+ const allNetworkCalls = [];
136
+ const relevantNetworkCalls = [];
134
137
  await (0, extract_zip_1.extractFileFromZipFromUrl)({
135
138
  zipUrl: url,
136
139
  fileNames: ["0-trace.network"],
@@ -141,23 +144,47 @@ const generateNetworkTraceFromZipUrl = async ({ url, }) => {
141
144
  let lines = tempBuffer.split("\n");
142
145
  lines.slice(0, -1).forEach((line) => {
143
146
  const parsedNetworkTrace = JSON.parse(line);
144
- const responseStatus = parsedNetworkTrace?.snapshot?.response?.status;
145
- // const networkTriggerTime =
146
- // parsedNetworkTrace?.snapshot?.startedDateTime;
147
- if (400 <= responseStatus && responseStatus < 600) {
148
- failedCalls.push(parsedNetworkTrace);
147
+ const hasValidResponseStatus = !!parsedNetworkTrace?.snapshot?.response?.status;
148
+ const responseStatus = Number(parsedNetworkTrace?.snapshot?.response?.status);
149
+ allNetworkCalls.push(parsedNetworkTrace);
150
+ // only failures & redirects for detailed analysis
151
+ if (hasValidResponseStatus &&
152
+ (responseStatus === 308 ||
153
+ (400 <= responseStatus && responseStatus < 600))) {
154
+ relevantNetworkCalls.push(parsedNetworkTrace);
149
155
  }
150
156
  });
151
157
  tempBuffer = lines[lines.length - 1] || "";
152
158
  };
153
159
  },
154
160
  });
155
- return failedCalls.map(formatNetworkFailure);
161
+ const failedCalls = relevantNetworkCalls.filter((c) => {
162
+ const status = c.snapshot.response.status;
163
+ return 400 <= status && status < 600;
164
+ });
165
+ const sequenceCalls = allNetworkCalls.filter((c) => {
166
+ const hasValidResponseStatus = !!c.snapshot.response.status;
167
+ const status = Number(c.snapshot.response.status);
168
+ return (hasValidResponseStatus &&
169
+ ((400 <= status && status < 600) ||
170
+ status === 307 ||
171
+ status === 308 ||
172
+ status === 301 ||
173
+ status === 302));
174
+ // excluding: 304 (cached), 2xx success
175
+ });
176
+ const networkCallSequence = (0, exports.buildNetworkCallSequence)(sequenceCalls);
177
+ const formattedFailedCalls = failedCalls.map(formatNetworkFailure);
178
+ const hydratedFailedCalls = await (0, exports.hydrateSha1Bodies)(formattedFailedCalls, url);
179
+ return { hydratedFailedCalls, networkCallSequence };
156
180
  }
157
181
  catch (error) {
158
182
  console.error(`Error fetching or processing the zip file: ${url}`, error);
159
183
  }
160
- return [];
184
+ return {
185
+ hydratedFailedCalls: [],
186
+ networkCallSequence: [],
187
+ };
161
188
  };
162
189
  exports.generateNetworkTraceFromZipUrl = generateNetworkTraceFromZipUrl;
163
190
  const formatNetworkFailure = (call) => {
@@ -169,21 +196,114 @@ const formatNetworkFailure = (call) => {
169
196
  method: call?.snapshot?.request?.method,
170
197
  request: {
171
198
  headers: call?.snapshot?.request?.headers ?? [],
199
+ body: call?.snapshot?.request?.postData ?? undefined,
172
200
  },
173
201
  response: {
174
202
  headers: call?.snapshot?.response?.headers ?? [],
203
+ body: call?.snapshot?.response?.content ?? undefined,
175
204
  },
176
205
  };
177
206
  };
178
207
  const stripIrrelevantInfoFromNetworkFailureArray = (failures) => {
179
- return failures.map(({ endpoint, status, timestamp, method }) => {
208
+ return failures.map(({ endpoint, status, timestamp, method, request, response }) => {
180
209
  const strippedFailureInfo = {
181
210
  endpoint,
182
211
  status,
183
212
  timestamp,
184
213
  method,
214
+ request: {
215
+ headers: [],
216
+ body: request.body,
217
+ },
218
+ response: {
219
+ headers: [],
220
+ body: response.body,
221
+ },
185
222
  };
186
223
  return strippedFailureInfo;
187
224
  });
188
225
  };
189
226
  exports.stripIrrelevantInfoFromNetworkFailureArray = stripIrrelevantInfoFromNetworkFailureArray;
227
+ const resolveSha1File = async (zipUrl, sha1) => {
228
+ if (!sha1)
229
+ return undefined;
230
+ let result;
231
+ const fileName = `resources/${sha1}`; // the _sha1 reference is a filename like abcd.bin or abcd.json
232
+ await (0, extract_zip_1.extractFileFromZipFromUrl)({
233
+ zipUrl,
234
+ fileNames: [fileName],
235
+ chunkProcessor: () => {
236
+ let buffer = "";
237
+ return (chunk) => {
238
+ buffer += chunk.toString("utf-8");
239
+ result = buffer;
240
+ };
241
+ },
242
+ });
243
+ if (!result)
244
+ return undefined;
245
+ let truncatedContent;
246
+ try {
247
+ const parsedResult = JSON.parse(result);
248
+ truncatedContent = JSON.stringify((0, json_1.truncateJsonValues)(parsedResult));
249
+ }
250
+ catch {
251
+ truncatedContent = (0, json_1.truncateJsonValues)(result);
252
+ }
253
+ return truncatedContent;
254
+ };
255
+ const hydrateSha1Bodies = async (failures, zipUrl) => {
256
+ return Promise.all(failures.map(async (failure) => {
257
+ const reqSha1 = failure.request.body?._sha1;
258
+ const reqMimeType = failure.request.body?.mimeType;
259
+ const resSha1 = failure.response.body?._sha1;
260
+ const resMimeType = failure.response.body?.mimeType;
261
+ return {
262
+ ...failure,
263
+ request: {
264
+ ...failure.request,
265
+ body: reqSha1
266
+ ? {
267
+ mimeType: reqMimeType,
268
+ content: await resolveSha1File(zipUrl, reqSha1),
269
+ }
270
+ : failure.request.body,
271
+ },
272
+ response: {
273
+ ...failure.response,
274
+ body: resSha1
275
+ ? {
276
+ mimeType: resMimeType,
277
+ content: await resolveSha1File(zipUrl, resSha1),
278
+ }
279
+ : failure.response.body,
280
+ },
281
+ };
282
+ }));
283
+ };
284
+ exports.hydrateSha1Bodies = hydrateSha1Bodies;
285
+ const buildNetworkCallSequence = (unformattedFailedNetworkCallsWithHeaders) => {
286
+ return unformattedFailedNetworkCallsWithHeaders.map((trace, idx) => {
287
+ const snap = trace.snapshot;
288
+ const url = new URL(snap.request.url);
289
+ let redirect_to = undefined;
290
+ if (snap.response.redirectURL) {
291
+ try {
292
+ // attempting to make it absolute if relative
293
+ redirect_to = new URL(snap.response.redirectURL, snap.request.url).toString();
294
+ }
295
+ catch {
296
+ redirect_to = snap.response.redirectURL; // fallback as-is
297
+ }
298
+ }
299
+ return {
300
+ step: idx + 1,
301
+ method: snap.request.method,
302
+ endpoint: url.pathname,
303
+ status: snap.response.status,
304
+ redirect_to,
305
+ duration_ms: Math.round(snap.time),
306
+ };
307
+ });
308
+ };
309
+ exports.buildNetworkCallSequence = buildNetworkCallSequence;
@@ -50,7 +50,7 @@ exports.upgradePackagesTool = {
50
50
  };
51
51
  }
52
52
  const updateMessage = `upgrade ${changes.length} package${changes.length === 1 ? "" : "s"}`;
53
- (0, git_1.commitFilesAsBotUser)({
53
+ (0, git_1.stageAndCommitFilesAsBotUser)({
54
54
  commitMessage: `[upgrade-packages] ${updateMessage}`,
55
55
  files: ["package.json", "package-lock.json"],
56
56
  repoPath,
@@ -1,3 +1,2 @@
1
1
  export { getTypescriptTestBlock } from "../bin/utils/platform/web";
2
- export { truncateJsonValues } from "./json";
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.truncateJsonValues = exports.getTypescriptTestBlock = void 0;
3
+ exports.getTypescriptTestBlock = void 0;
4
4
  var web_1 = require("../bin/utils/platform/web");
5
5
  Object.defineProperty(exports, "getTypescriptTestBlock", { enumerable: true, get: function () { return web_1.getTypescriptTestBlock; } });
6
- var json_1 = require("./json");
7
- Object.defineProperty(exports, "truncateJsonValues", { enumerable: true, get: function () { return json_1.truncateJsonValues; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empiricalrun/test-gen",
3
- "version": "0.74.1",
3
+ "version": "0.75.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"
@@ -85,9 +85,9 @@
85
85
  "yauzl": "^3.1.3",
86
86
  "zod": "^3.23.8",
87
87
  "@empiricalrun/ast-parser": "^0.0.10",
88
- "@empiricalrun/llm": "^0.21.0",
89
- "@empiricalrun/r2-uploader": "^0.3.10",
90
- "@empiricalrun/test-run": "^0.10.9"
88
+ "@empiricalrun/llm": "^0.22.0",
89
+ "@empiricalrun/r2-uploader": "^0.3.11",
90
+ "@empiricalrun/test-run": "^0.11.1"
91
91
  },
92
92
  "devDependencies": {
93
93
  "@playwright/test": "1.53.2",
@@ -106,7 +106,7 @@
106
106
  "playwright": "1.53.2",
107
107
  "serve-handler": "^6.1.6",
108
108
  "ts-patch": "^3.3.0",
109
- "@empiricalrun/shared-types": "0.9.0"
109
+ "@empiricalrun/shared-types": "0.10.1"
110
110
  },
111
111
  "scripts": {
112
112
  "dev": "tspc --build --watch",
@@ -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/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/index.ts","./src/agent/chat/prompt/pw-utils-docs.ts","./src/agent/chat/prompt/repo.ts","./src/agent/chat/utils/tool-calls.ts","./src/agent/code-review/prompt.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/diagnosis-agent/index.ts","./src/agent/diagnosis-agent/strict-mode-violation.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/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/commit-and-create-pr/index.ts","./src/tools/definitions/commit-and-create-pr.ts","./src/tools/definitions/delete-file.ts","./src/tools/definitions/download-build.ts","./src/tools/definitions/fetch-video-analysis.ts","./src/tools/definitions/grep.ts","./src/tools/definitions/merge-conflicts.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/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-image/index.ts","./src/tools/fetch-last-successful-test-run/index.ts","./src/tools/fetch-video-analysis/index.ts","./src/tools/fetch-video-analysis/local-ffmpeg-client.ts","./src/tools/fetch-video-analysis/utils.ts","./src/tools/fetch-video-analysis/video-analysis.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/git-helper.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/merge-conflicts/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/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/dedup-image-fs.ts","./src/utils/dedup-image.ts","./src/utils/env.ts","./src/utils/exec.ts","./src/utils/file.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"],"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/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/index.ts","./src/agent/chat/prompt/pw-utils-docs.ts","./src/agent/chat/prompt/repo.ts","./src/agent/chat/utils/tool-calls.ts","./src/agent/code-review/prompt.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/diagnosis-agent/index.ts","./src/agent/diagnosis-agent/strict-mode-violation.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/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/commit-and-create-pr/index.ts","./src/tools/definitions/commit-and-create-pr.ts","./src/tools/definitions/delete-file.ts","./src/tools/definitions/download-build.ts","./src/tools/definitions/fetch-video-analysis.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/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/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-video-analysis/index.ts","./src/tools/fetch-video-analysis/local-ffmpeg-client.ts","./src/tools/fetch-video-analysis/open-ai.ts","./src/tools/fetch-video-analysis/utils.ts","./src/tools/fetch-video-analysis/video-analysis.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/git-helper.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/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/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/dedup-image-fs.ts","./src/utils/dedup-image.ts","./src/utils/env.ts","./src/utils/exec.ts","./src/utils/file.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"],"version":"5.8.3"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/fetch-image/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAA8B,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,QAAA,MAAM,gBAAgB;;;;;;EAEpB,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAuDjE,CAAC"}
@@ -1,63 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchImageTool = void 0;
4
- const zod_1 = require("zod");
5
- const SUPPORTED_CONTENT_TYPES = ["image/png", "image/jpeg"];
6
- const fetchImageSchema = zod_1.z.object({
7
- url: zod_1.z.string(),
8
- });
9
- exports.fetchImageTool = {
10
- schema: {
11
- name: "fetchImage",
12
- description: `Use this tool to fetch image data from any valid URL that responds with a PNG or JPEG image.
13
- It takes an image URL as input and returns the image in base64 format, for you to view or analyze.
14
-
15
- ## Common scenarios:
16
- 1. Understand a test report (for the runTest tool) by fetching screenshots: test results can have screenshot URLs in the attachments section of the report.
17
-
18
- 2. While adding new tests, if the user message contains image URLs, use this tool to fetch the images, and understand the steps that the user is looking to cover.`,
19
- parameters: fetchImageSchema,
20
- },
21
- needsBrowser: false,
22
- isInlineTool: true,
23
- execute: async ({ input }) => {
24
- const { url } = input;
25
- try {
26
- const response = await fetch(url);
27
- if (!response.ok) {
28
- console.error(`Failed to fetch image from ${url}: ${response.statusText}`);
29
- return {
30
- result: `Failed to fetch image from ${url}: ${response.statusText}`,
31
- isError: true,
32
- };
33
- }
34
- const contentType = response.headers.get("content-type");
35
- if (!contentType || !SUPPORTED_CONTENT_TYPES.includes(contentType)) {
36
- const errorMessage = `Invalid content type: ${contentType}. URL must return an image.`;
37
- console.error(errorMessage);
38
- return {
39
- result: errorMessage,
40
- isError: true,
41
- };
42
- }
43
- const buffer = await response.arrayBuffer();
44
- const base64 = Buffer.from(buffer).toString("base64");
45
- return {
46
- result: [
47
- {
48
- type: contentType,
49
- base64Data: base64,
50
- },
51
- ],
52
- isError: false,
53
- };
54
- }
55
- catch (error) {
56
- console.error("Error fetching image", error);
57
- return {
58
- result: `Error fetching image: ${error}`,
59
- isError: true,
60
- };
61
- }
62
- },
63
- };