@empiricalrun/test-gen 0.64.0 → 0.64.2

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 (58) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/agent/browsing/run.d.ts +2 -1
  3. package/dist/agent/browsing/run.d.ts.map +1 -1
  4. package/dist/agent/browsing/run.js +15 -7
  5. package/dist/agent/chat/index.d.ts.map +1 -1
  6. package/dist/agent/chat/index.js +3 -0
  7. package/dist/agent/chat/models.js +1 -1
  8. package/dist/agent/cua/computer.d.ts.map +1 -1
  9. package/dist/agent/cua/computer.js +5 -1
  10. package/dist/agent/cua/pw-codegen/element-from-point.d.ts.map +1 -1
  11. package/dist/agent/cua/pw-codegen/element-from-point.js +58 -46
  12. package/dist/artifacts/utils.d.ts +21 -0
  13. package/dist/artifacts/utils.d.ts.map +1 -0
  14. package/dist/artifacts/utils.js +102 -0
  15. package/dist/bin/index.js +2 -1
  16. package/dist/bin/utils/platform/web/index.d.ts.map +1 -1
  17. package/dist/bin/utils/platform/web/index.js +2 -0
  18. package/dist/test-build/index.js +1 -1
  19. package/dist/tool-call-service/index.d.ts +7 -2
  20. package/dist/tool-call-service/index.d.ts.map +1 -1
  21. package/dist/tool-call-service/index.js +11 -2
  22. package/dist/tool-call-service/utils.d.ts +2 -1
  23. package/dist/tool-call-service/utils.d.ts.map +1 -1
  24. package/dist/tool-call-service/utils.js +9 -5
  25. package/dist/tools/commit-and-create-pr.d.ts +1 -1
  26. package/dist/tools/commit-and-create-pr.d.ts.map +1 -1
  27. package/dist/tools/diagnosis-fetcher.d.ts +1 -1
  28. package/dist/tools/diagnosis-fetcher.d.ts.map +1 -1
  29. package/dist/tools/diagnosis-fetcher.js +3 -1
  30. package/dist/tools/download-build.d.ts +1 -1
  31. package/dist/tools/download-build.d.ts.map +1 -1
  32. package/dist/tools/download-build.js +3 -1
  33. package/dist/tools/environment-crud.d.ts +1 -1
  34. package/dist/tools/environment-crud.d.ts.map +1 -1
  35. package/dist/tools/grep/index.d.ts +1 -1
  36. package/dist/tools/grep/index.d.ts.map +1 -1
  37. package/dist/tools/grep/index.js +3 -2
  38. package/dist/tools/str_replace_editor.d.ts +1 -6
  39. package/dist/tools/str_replace_editor.d.ts.map +1 -1
  40. package/dist/tools/str_replace_editor.js +237 -229
  41. package/dist/tools/test-gen-browser.d.ts +1 -1
  42. package/dist/tools/test-gen-browser.d.ts.map +1 -1
  43. package/dist/tools/test-gen-browser.js +35 -21
  44. package/dist/tools/test-run-fetcher/index.d.ts +1 -1
  45. package/dist/tools/test-run-fetcher/index.d.ts.map +1 -1
  46. package/dist/tools/test-run.d.ts +1 -1
  47. package/dist/tools/test-run.d.ts.map +1 -1
  48. package/dist/tools/test-run.js +36 -12
  49. package/dist/tools/utils/index.d.ts +0 -13
  50. package/dist/tools/utils/index.d.ts.map +1 -1
  51. package/dist/tools/utils/index.js +0 -47
  52. package/dist/utils/exec.d.ts +4 -4
  53. package/dist/utils/exec.d.ts.map +1 -1
  54. package/dist/utils/exec.js +2 -4
  55. package/dist/utils/file-tree.d.ts.map +1 -1
  56. package/dist/utils/file-tree.js +2 -0
  57. package/package.json +4 -4
  58. package/tsconfig.tsbuildinfo +1 -1
@@ -18,12 +18,18 @@ const BrowserAgentSchema = zod_1.z.object({
18
18
  testSuites: zod_1.z
19
19
  .array(zod_1.z.string())
20
20
  .describe("The suites (describe blocks) where the test is located"),
21
- fileName: zod_1.z
21
+ filePath: zod_1.z
22
22
  .string()
23
- .describe("The name of the file where the test is located. File name must end with .spec.ts"),
23
+ .describe("Path of the file where the test is located. Path must be relative to the root of the repository. File name must end with .spec.ts. For example: tests/lesson.spec.ts"),
24
24
  project: zod_1.z
25
25
  .string()
26
26
  .describe("The Playwright project to run tests against (e.g. 'chromium' or 'firefox')"),
27
+ buildUrl: zod_1.z
28
+ .string()
29
+ .optional()
30
+ .describe(`The URL of the build to run the test on.
31
+ This is ONLY useful for preview deployments that are dynamically created on every pull request, like Vercel preview deployments.
32
+ For all other cases, the build url does not need to be provided, since it is already hard coded in the test repo.`),
27
33
  changeToMake: zod_1.z.string().describe("The change to make to the test"),
28
34
  });
29
35
  const BROWSER_AGENT_DESCRIPTION = `
@@ -89,12 +95,17 @@ exports.generateTestWithBrowserAgent = {
89
95
  description: BROWSER_AGENT_DESCRIPTION,
90
96
  parameters: BrowserAgentSchema,
91
97
  },
92
- execute: async ({ input, repoPath, trace, collectArtifacts, }) => {
93
- const repoDir = repoPath;
94
- const { testName, testSuites, fileName, changeToMake, project } = input;
95
- const absoluteFilePath = path_1.default.join(repoDir, fileName);
98
+ execute: async ({ input, repoPath, trace, collectArtifacts, environmentOverrides = {}, }) => {
99
+ const { filePath, project } = input;
100
+ const absoluteFilePath = path_1.default.join(repoPath, filePath);
101
+ if (!fs_1.default.existsSync(absoluteFilePath)) {
102
+ return {
103
+ isError: true,
104
+ result: `Could not find file in repository: ${filePath}. Did you use the full path relative to the root of the repository?`,
105
+ };
106
+ }
96
107
  try {
97
- const { projects } = await (0, test_run_1.getAllPlaywrightProjects)(repoDir);
108
+ const { projects } = await (0, test_run_1.getAllPlaywrightProjects)(repoPath);
98
109
  if (!projects.includes(project)) {
99
110
  return {
100
111
  isError: true,
@@ -109,12 +120,7 @@ exports.generateTestWithBrowserAgent = {
109
120
  result: `Error reading playwright config: ${error}`,
110
121
  };
111
122
  }
112
- if (!fs_1.default.existsSync(absoluteFilePath)) {
113
- return {
114
- isError: true,
115
- result: `Could not find file in repository: ${fileName}. Did you use the full path relative to the root of the repository?`,
116
- };
117
- }
123
+ const { testName, testSuites } = input;
118
124
  if (!(0, web_1.hasTestBlock)({
119
125
  testName,
120
126
  testSuites,
@@ -122,13 +128,13 @@ exports.generateTestWithBrowserAgent = {
122
128
  })) {
123
129
  return {
124
130
  isError: true,
125
- result: `Test block not found for test name: "${testName}" in file: "${fileName}" with describe blocks: "${testSuites.join(", ")}"`,
131
+ result: `Test block not found for test name: "${testName}" in file: "${filePath}" with describe blocks: "${testSuites.join(", ")}"`,
126
132
  };
127
133
  }
128
134
  // Prepare the file for the browser agent
129
135
  const fileBackup = fs_1.default.readFileSync(absoluteFilePath, "utf-8");
130
136
  try {
131
- await (0, utils_1.replaceTodoWithCreateTest)(fileName, repoDir);
137
+ await (0, utils_1.replaceTodoWithCreateTest)(filePath, repoPath);
132
138
  }
133
139
  catch (error) {
134
140
  // Undo the TODO -> createTest and test.only changes
@@ -141,26 +147,34 @@ exports.generateTestWithBrowserAgent = {
141
147
  try {
142
148
  // Prepare playwright for codegen
143
149
  console.log("[generateTestWithBrowserAgent] Preparing playwright for codegen");
144
- await (0, pw_pause_1.preparePlaywrightForCodegen)(repoDir);
150
+ await (0, pw_pause_1.preparePlaywrightForCodegen)(repoPath);
145
151
  }
146
152
  catch (err) {
147
153
  console.warn("[generateTestWithBrowserAgent] Error preparing playwright for codegen", err);
148
154
  }
149
- const testGenToken = (0, scenarios_1.buildTokenFromOptions)({ name: testName, file: fileName, prompt: changeToMake }, { useComputerUseAgent: true });
155
+ let envOverrides = { ...environmentOverrides };
156
+ if (input.buildUrl) {
157
+ envOverrides = {
158
+ ...envOverrides,
159
+ BUILD_URL: input.buildUrl,
160
+ };
161
+ }
162
+ const testGenToken = (0, scenarios_1.buildTokenFromOptions)({ name: testName, file: filePath, prompt: input.changeToMake }, { useComputerUseAgent: true });
150
163
  console.log("[generateTestWithBrowserAgent] Validations passed, starting agent");
151
164
  const toolResult = await (0, run_1.generateTestsUsingMasterAgent)({
152
165
  testCaseName: testName,
153
166
  testCaseSuites: testSuites,
154
- testFilePath: fileName,
155
- filePathToUpdate: fileName,
167
+ testFilePath: filePath,
168
+ filePathToUpdate: filePath,
156
169
  projectName: project,
157
170
  traceId: trace?.id,
158
171
  testGenToken,
159
- repoDir,
172
+ repoDir: repoPath,
160
173
  editFileWithGeneratedCode: false,
174
+ envOverrides,
161
175
  });
162
176
  // Cleanup: Undo the TODO -> createTest changes
163
- await (0, pw_pause_1.revertToOriginalPwCode)(repoDir);
177
+ await (0, pw_pause_1.revertToOriginalPwCode)(repoPath);
164
178
  fs_1.default.writeFileSync(absoluteFilePath, fileBackup, "utf-8");
165
179
  const { isError, error, actionsSummary, artifacts } = toolResult;
166
180
  if (artifacts) {
@@ -1,4 +1,4 @@
1
- import type { Tool } from "@empiricalrun/llm/chat";
1
+ import type { Tool } from "@empiricalrun/shared-types";
2
2
  export declare function extractPathAfterSourceRepo(fullPath: string): string;
3
3
  export declare const fetchTestRunReportTool: Tool;
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/test-run-fetcher/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAcnD,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOnE;AAED,eAAO,MAAM,sBAAsB,EAAE,IA+HpC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/test-run-fetcher/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAcvD,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOnE;AAED,eAAO,MAAM,sBAAsB,EAAE,IA+HpC,CAAC"}
@@ -1,3 +1,3 @@
1
- import type { Tool } from "@empiricalrun/llm/chat";
1
+ import type { Tool } from "@empiricalrun/shared-types";
2
2
  export declare const runTestTool: Tool;
3
3
  //# sourceMappingURL=test-run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-run.d.ts","sourceRoot":"","sources":["../../src/tools/test-run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,wBAAwB,CAAC;AA4C/D,eAAO,MAAM,WAAW,EAAE,IAmEzB,CAAC"}
1
+ {"version":3,"file":"test-run.d.ts","sourceRoot":"","sources":["../../src/tools/test-run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,4BAA4B,CAAC;AAsDnE,eAAO,MAAM,WAAW,EAAE,IAoFzB,CAAC"}
@@ -1,19 +1,30 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.runTestTool = void 0;
4
7
  const test_run_1 = require("@empiricalrun/test-run");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
5
10
  const zod_1 = require("zod");
6
11
  const artifacts_1 = require("../artifacts");
7
- const utils_1 = require("./utils");
12
+ const utils_1 = require("../artifacts/utils");
8
13
  const RunTestSchema = zod_1.z.object({
9
14
  testName: zod_1.z.string().describe("The name of the test to run"),
10
15
  suites: zod_1.z
11
16
  .array(zod_1.z.string())
12
17
  .describe("The suites (describe blocks) where the test is located."),
13
- fileName: zod_1.z
18
+ filePath: zod_1.z
14
19
  .string()
15
- .describe("The name of the file where the test is located. File name must end with .spec.ts"),
20
+ .describe("Path of the file where the test is located. Path must be relative to the root of the repository. File name must end with .spec.ts. For example: tests/lesson.spec.ts"),
16
21
  project: zod_1.z.string().describe("The project to run the test on"),
22
+ buildUrl: zod_1.z
23
+ .string()
24
+ .optional()
25
+ .describe(`The URL of the build to run the test on.
26
+ This is ONLY useful for preview deployments that are dynamically created on every pull request, like Vercel preview deployments.
27
+ For all other cases, the build url does not need to be provided, since it is already hard coded in the test repo.`),
17
28
  });
18
29
  function buildReportUrl(projectName, testRunId) {
19
30
  return `https://reports.empirical.run/${projectName}/${testRunId}/index.html`;
@@ -34,14 +45,15 @@ exports.runTestTool = {
34
45
  description: "Run a test",
35
46
  parameters: RunTestSchema,
36
47
  },
37
- execute: async ({ input, repoPath, collectArtifacts, }) => {
48
+ execute: async ({ input, repoPath, collectArtifacts, environmentOverrides = {}, }) => {
38
49
  let reportUrl = undefined;
39
- let envOverrides = undefined;
50
+ let envOverrides = { ...environmentOverrides };
40
51
  if ((0, artifacts_1.isArtifactCollectionEnabled)()) {
41
52
  const projectName = "test-gen-chat-agent";
42
53
  const testRunId = Date.now().toString();
43
54
  reportUrl = buildReportUrl(projectName, testRunId);
44
55
  envOverrides = {
56
+ ...envOverrides,
45
57
  PROJECT_NAME: projectName,
46
58
  TEST_RUN_GITHUB_ACTION_ID: testRunId,
47
59
  };
@@ -49,16 +61,28 @@ exports.runTestTool = {
49
61
  else {
50
62
  console.warn("R2 credentials not found: report artifacts will not be uploaded");
51
63
  }
52
- const { testName, suites, fileName, project } = input;
53
- const repoDir = repoPath;
64
+ const { filePath } = input;
65
+ const absoluteFilePath = path_1.default.join(repoPath, filePath);
66
+ if (!fs_1.default.existsSync(absoluteFilePath)) {
67
+ return {
68
+ isError: true,
69
+ result: `File ${filePath} does not exist.`,
70
+ };
71
+ }
72
+ if (input.buildUrl) {
73
+ envOverrides = {
74
+ ...envOverrides,
75
+ BUILD_URL: input.buildUrl,
76
+ };
77
+ }
54
78
  try {
55
79
  const result = await (0, test_run_1.runSingleTest)({
56
- testName,
57
- suites,
58
- fileName,
59
- projects: [project],
80
+ testName: input.testName,
81
+ suites: input.suites,
82
+ filePath,
83
+ repoDir: repoPath,
84
+ projects: [input.project],
60
85
  envOverrides,
61
- repoDir,
62
86
  });
63
87
  const attachments = (0, utils_1.extractAttachmentsFromPlaywrightJSONReport)(result.summaryJson);
64
88
  void collectArtifacts?.(attachments);
@@ -1,4 +1,3 @@
1
- import { JSONReport as PlaywrightJSONReport } from "@playwright/test/reporter";
2
1
  export declare function makeDashboardRequest<T>({ path, method, body, apiKey, }: {
3
2
  path: string;
4
3
  method?: string;
@@ -11,16 +10,4 @@ export declare function callGitHubProxy({ method, url, body, apiKey, }: {
11
10
  body?: any;
12
11
  apiKey: string;
13
12
  }): Promise<unknown>;
14
- type AttachmentInfo = {
15
- name: string;
16
- path: string;
17
- contentType: string;
18
- };
19
- /**
20
- * Extracts attachment information from a Playwright JSON report.
21
- * @param report The Playwright JSON report to extract attachments from
22
- * @returns An array of objects containing path and contentType for each attachment
23
- */
24
- export declare function extractAttachmentsFromPlaywrightJSONReport(report: PlaywrightJSONReport): AttachmentInfo[];
25
- export {};
26
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,IAAI,oBAAoB,EAEnC,MAAM,2BAA2B,CAAC;AAEnC,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,EAC5C,IAAI,EACJ,MAAc,EACd,IAAI,EACJ,MAAM,GACP,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,CAAC,CAAC,CAmBb;AAED,wBAAsB,eAAe,CAAC,EACpC,MAAM,EACN,GAAG,EACH,IAAI,EACJ,MAAM,GACP,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB,oBAYA;AAED,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,0CAA0C,CACxD,MAAM,EAAE,oBAAoB,GAC3B,cAAc,EAAE,CA4ClB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/index.ts"],"names":[],"mappings":"AAAA,wBAAsB,oBAAoB,CAAC,CAAC,EAAE,EAC5C,IAAI,EACJ,MAAc,EACd,IAAI,EACJ,MAAM,GACP,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,CAAC,CAAC,CAmBb;AAED,wBAAsB,eAAe,CAAC,EACpC,MAAM,EACN,GAAG,EACH,IAAI,EACJ,MAAM,GACP,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB,oBAYA"}
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeDashboardRequest = makeDashboardRequest;
4
4
  exports.callGitHubProxy = callGitHubProxy;
5
- exports.extractAttachmentsFromPlaywrightJSONReport = extractAttachmentsFromPlaywrightJSONReport;
6
5
  async function makeDashboardRequest({ path, method = "GET", body, apiKey, }) {
7
6
  const requestHeaders = {
8
7
  "Content-Type": "application/json",
@@ -34,49 +33,3 @@ async function callGitHubProxy({ method, url, body, apiKey, }) {
34
33
  apiKey,
35
34
  });
36
35
  }
37
- /**
38
- * Extracts attachment information from a Playwright JSON report.
39
- * @param report The Playwright JSON report to extract attachments from
40
- * @returns An array of objects containing path and contentType for each attachment
41
- */
42
- function extractAttachmentsFromPlaywrightJSONReport(report) {
43
- const attachments = [];
44
- if (!report) {
45
- return attachments;
46
- }
47
- function processSpec(spec) {
48
- const testTitle = spec.title;
49
- for (const test of spec.tests) {
50
- for (const result of test.results) {
51
- if (!result.attachments)
52
- continue;
53
- for (const attachment of result.attachments) {
54
- if (attachment.path && attachment.contentType) {
55
- attachments.push({
56
- name: `${testTitle} ${attachment.name}`,
57
- path: attachment.path,
58
- contentType: attachment.contentType,
59
- });
60
- }
61
- }
62
- }
63
- }
64
- }
65
- for (const suite of report.suites) {
66
- // Process nested suites
67
- if (suite.suites) {
68
- for (const nestedSuite of suite.suites) {
69
- for (const spec of nestedSuite.specs) {
70
- processSpec(spec);
71
- }
72
- }
73
- }
74
- // Process specs in current suite
75
- if (suite.specs) {
76
- for (const spec of suite.specs) {
77
- processSpec(spec);
78
- }
79
- }
80
- }
81
- return attachments;
82
- }
@@ -1,14 +1,14 @@
1
1
  export declare class ProcessManager {
2
2
  private childProcess;
3
3
  execute(command: string, args: string[], options: {
4
- env?: Record<string, string>;
5
- cwd?: string;
4
+ envOverrides: Record<string, string>;
5
+ cwd: string;
6
6
  }): Promise<number>;
7
7
  terminate(): void;
8
8
  isRunning(): boolean;
9
9
  }
10
10
  export declare function cmd(command: string, args: string[], options: {
11
- env?: Record<string, string>;
12
- cwd?: string;
11
+ envOverrides: Record<string, string>;
12
+ cwd: string;
13
13
  }): Promise<number>;
14
14
  //# sourceMappingURL=exec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":"AAmBA,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAA6B;IAE3C,OAAO,CACX,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EAEd,OAAO,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACtD,OAAO,CAAC,MAAM,CAAC;IAoDlB,SAAS,IAAI,IAAI;IASjB,SAAS,IAAI,OAAO;CAGrB;AAED,wBAAsB,GAAG,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,OAAO,CAAC,MAAM,CAAC,CAGjB"}
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":"AAmBA,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAA6B;IAE3C,OAAO,CACX,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAC7D,OAAO,CAAC,MAAM,CAAC;IAoDlB,SAAS,IAAI,IAAI;IASjB,SAAS,IAAI,OAAO;CAGrB;AAED,wBAAsB,GAAG,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC7D,OAAO,CAAC,MAAM,CAAC,CAGjB"}
@@ -21,9 +21,7 @@ function isAcceptableExit(exitCode, signal) {
21
21
  }
22
22
  class ProcessManager {
23
23
  childProcess = null;
24
- async execute(command, args,
25
- // TODO: Make these required when all tools use repoPath
26
- options) {
24
+ async execute(command, args, options) {
27
25
  console.log(`Executing command: ${command} with args: ${args}`);
28
26
  if (this.childProcess) {
29
27
  throw new Error("Process is already running");
@@ -35,7 +33,7 @@ class ProcessManager {
35
33
  return;
36
34
  }
37
35
  const p = (0, child_process_1.spawn)(command, args, {
38
- env: { ...process_1.default.env, ...options.env },
36
+ env: { ...process_1.default.env, ...options.envOverrides },
39
37
  cwd: options.cwd,
40
38
  detached: true, // Create process group so we can terminate all child processes
41
39
  });
@@ -1 +1 @@
1
- {"version":3,"file":"file-tree.d.ts","sourceRoot":"","sources":["../../src/utils/file-tree.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgC5E"}
1
+ {"version":3,"file":"file-tree.d.ts","sourceRoot":"","sources":["../../src/utils/file-tree.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsC5E"}
@@ -7,6 +7,7 @@ exports.getFileInfoFromFS = getFileInfoFromFS;
7
7
  const promises_1 = __importDefault(require("fs/promises"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  async function getFileInfoFromFS(directory) {
10
+ // TODO: This traverses all node_modules - can be excluded with DEFAULT_EXCLUDE
10
11
  let currentDirName = path_1.default.basename(directory);
11
12
  let currentDir = {
12
13
  isDirectory: true,
@@ -21,6 +22,7 @@ async function getFileInfoFromFS(directory) {
21
22
  const files = await promises_1.default.readdir(directory);
22
23
  for (const file of files) {
23
24
  const filePath = path_1.default.join(directory, file);
25
+ // TODO: Symlinks fail here
24
26
  const stats = await promises_1.default.stat(filePath);
25
27
  if (stats.isDirectory()) {
26
28
  currentDir.children.push(await getFileInfoFromFS(filePath));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empiricalrun/test-gen",
3
- "version": "0.64.0",
3
+ "version": "0.64.2",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"
@@ -62,9 +62,9 @@
62
62
  "tsx": "^4.16.2",
63
63
  "typescript": "^5.3.3",
64
64
  "zod": "^3.23.8",
65
- "@empiricalrun/llm": "^0.17.2",
65
+ "@empiricalrun/llm": "^0.17.3",
66
66
  "@empiricalrun/r2-uploader": "^0.3.9",
67
- "@empiricalrun/test-run": "^0.9.4"
67
+ "@empiricalrun/test-run": "^0.10.1"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@playwright/test": "1.47.1",
@@ -79,7 +79,7 @@
79
79
  "playwright": "1.47.1",
80
80
  "serve-handler": "^6.1.6",
81
81
  "ts-patch": "^3.3.0",
82
- "@empiricalrun/shared-types": "0.4.0"
82
+ "@empiricalrun/shared-types": "0.4.2"
83
83
  },
84
84
  "scripts": {
85
85
  "dev": "tspc --build --watch",
@@ -1 +1 @@
1
- {"root":["./src/index.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/index.ts","./src/agent/chat/models.ts","./src/agent/chat/prompt.ts","./src/agent/chat/repo.ts","./src/agent/chat/state.ts","./src/agent/chat/types.ts","./src/agent/chat/utils.ts","./src/agent/codegen/create-test-block.ts","./src/agent/codegen/fix-ts-errors.ts","./src/agent/codegen/generate-code-apply-changes.ts","./src/agent/codegen/lexical-scoped-vars.ts","./src/agent/codegen/repo-edit.ts","./src/agent/codegen/run.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/index.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/enrich-prompt/index.ts","./src/agent/enrich-prompt/utils.ts","./src/agent/infer-agent/index.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/bin/index.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/errors/index.ts","./src/evals/add-scenario-agent.evals.ts","./src/evals/append-create-test-agent.evals.ts","./src/evals/fetch-pom-skills-agent.evals.ts","./src/evals/infer-master-or-code-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/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/reporter/index.ts","./src/reporter/lib.ts","./src/session/index.ts","./src/test-build/index.ts","./src/tool-call-service/index.ts","./src/tool-call-service/utils.ts","./src/tools/commit-and-create-pr.ts","./src/tools/diagnosis-fetcher.ts","./src/tools/download-build.ts","./src/tools/environment-crud.ts","./src/tools/str_replace_editor.ts","./src/tools/test-gen-browser.ts","./src/tools/test-run.ts","./src/tools/grep/index.ts","./src/tools/grep/ripgrep/index.ts","./src/tools/grep/ripgrep/types.ts","./src/tools/test-run-fetcher/index.ts","./src/tools/test-run-fetcher/types.ts","./src/tools/utils/index.ts","./src/types/handlebars.d.ts","./src/types/index.ts","./src/uploader/index.ts","./src/uploader/utils.ts","./src/utils/checkpoint.ts","./src/utils/env.ts","./src/utils/exec.ts","./src/utils/file-tree.ts","./src/utils/file.ts","./src/utils/git.ts","./src/utils/html.ts","./src/utils/index.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/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/index.ts","./src/agent/chat/models.ts","./src/agent/chat/prompt.ts","./src/agent/chat/repo.ts","./src/agent/chat/state.ts","./src/agent/chat/types.ts","./src/agent/chat/utils.ts","./src/agent/codegen/create-test-block.ts","./src/agent/codegen/fix-ts-errors.ts","./src/agent/codegen/generate-code-apply-changes.ts","./src/agent/codegen/lexical-scoped-vars.ts","./src/agent/codegen/repo-edit.ts","./src/agent/codegen/run.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/index.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/enrich-prompt/index.ts","./src/agent/enrich-prompt/utils.ts","./src/agent/infer-agent/index.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/bin/index.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/errors/index.ts","./src/evals/add-scenario-agent.evals.ts","./src/evals/append-create-test-agent.evals.ts","./src/evals/fetch-pom-skills-agent.evals.ts","./src/evals/infer-master-or-code-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/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/reporter/index.ts","./src/reporter/lib.ts","./src/session/index.ts","./src/test-build/index.ts","./src/tool-call-service/index.ts","./src/tool-call-service/utils.ts","./src/tools/commit-and-create-pr.ts","./src/tools/diagnosis-fetcher.ts","./src/tools/download-build.ts","./src/tools/environment-crud.ts","./src/tools/str_replace_editor.ts","./src/tools/test-gen-browser.ts","./src/tools/test-run.ts","./src/tools/grep/index.ts","./src/tools/grep/ripgrep/index.ts","./src/tools/grep/ripgrep/types.ts","./src/tools/test-run-fetcher/index.ts","./src/tools/test-run-fetcher/types.ts","./src/tools/utils/index.ts","./src/types/handlebars.d.ts","./src/types/index.ts","./src/uploader/index.ts","./src/uploader/utils.ts","./src/utils/checkpoint.ts","./src/utils/env.ts","./src/utils/exec.ts","./src/utils/file-tree.ts","./src/utils/file.ts","./src/utils/git.ts","./src/utils/html.ts","./src/utils/index.ts","./src/utils/repo-tree.ts","./src/utils/slug.ts","./src/utils/string.ts","./src/utils/stripAnsi.ts"],"version":"5.8.3"}