@empiricalrun/test-gen 0.64.3 → 0.65.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 (66) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/agent/browsing/run.d.ts +6 -4
  3. package/dist/agent/browsing/run.d.ts.map +1 -1
  4. package/dist/agent/browsing/run.js +9 -9
  5. package/dist/agent/chat/agent-loop.d.ts +2 -1
  6. package/dist/agent/chat/agent-loop.d.ts.map +1 -1
  7. package/dist/agent/chat/exports.d.ts +2 -2
  8. package/dist/agent/chat/exports.d.ts.map +1 -1
  9. package/dist/agent/chat/index.d.ts +1 -1
  10. package/dist/agent/chat/index.d.ts.map +1 -1
  11. package/dist/agent/chat/index.js +16 -1
  12. package/dist/agent/chat/models.d.ts +1 -1
  13. package/dist/agent/chat/models.d.ts.map +1 -1
  14. package/dist/agent/chat/state.d.ts +2 -2
  15. package/dist/agent/chat/state.d.ts.map +1 -1
  16. package/dist/agent/chat/utils.d.ts +2 -1
  17. package/dist/agent/chat/utils.d.ts.map +1 -1
  18. package/dist/agent/cua/index.d.ts +10 -3
  19. package/dist/agent/cua/index.d.ts.map +1 -1
  20. package/dist/agent/cua/index.js +61 -29
  21. package/dist/agent/cua/model.d.ts +7 -0
  22. package/dist/agent/cua/model.d.ts.map +1 -1
  23. package/dist/agent/cua/model.js +10 -0
  24. package/dist/bin/index.js +2 -2
  25. package/dist/bin/utils/index.d.ts +1 -1
  26. package/dist/bin/utils/index.d.ts.map +1 -1
  27. package/dist/bin/utils/index.js +3 -3
  28. package/dist/file/client.d.ts +2 -8
  29. package/dist/file/client.d.ts.map +1 -1
  30. package/dist/file/client.js +2 -23
  31. package/dist/file/server.d.ts +15 -3
  32. package/dist/file/server.d.ts.map +1 -1
  33. package/dist/file/server.js +17 -28
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +6 -13
  36. package/dist/tool-call-service/index.d.ts +3 -3
  37. package/dist/tool-call-service/index.d.ts.map +1 -1
  38. package/dist/tool-call-service/index.js +4 -3
  39. package/dist/tool-call-service/utils.d.ts +3 -10
  40. package/dist/tool-call-service/utils.d.ts.map +1 -1
  41. package/dist/tool-call-service/utils.js +21 -5
  42. package/dist/tools/commit-and-create-pr.d.ts.map +1 -1
  43. package/dist/tools/commit-and-create-pr.js +1 -0
  44. package/dist/tools/diagnosis-fetcher.d.ts.map +1 -1
  45. package/dist/tools/diagnosis-fetcher.js +1 -0
  46. package/dist/tools/download-build.d.ts.map +1 -1
  47. package/dist/tools/download-build.js +1 -0
  48. package/dist/tools/grep/index.d.ts.map +1 -1
  49. package/dist/tools/grep/index.js +1 -0
  50. package/dist/tools/list-environments.d.ts +3 -0
  51. package/dist/tools/list-environments.d.ts.map +1 -0
  52. package/dist/tools/list-environments.js +49 -0
  53. package/dist/tools/str_replace_editor.d.ts.map +1 -1
  54. package/dist/tools/str_replace_editor.js +4 -0
  55. package/dist/tools/test-gen-browser.d.ts +1 -1
  56. package/dist/tools/test-gen-browser.d.ts.map +1 -1
  57. package/dist/tools/test-gen-browser.js +50 -12
  58. package/dist/tools/test-run-fetcher/index.d.ts.map +1 -1
  59. package/dist/tools/test-run-fetcher/index.js +1 -0
  60. package/dist/tools/test-run.d.ts.map +1 -1
  61. package/dist/tools/test-run.js +1 -0
  62. package/package.json +3 -3
  63. package/tsconfig.tsbuildinfo +1 -1
  64. package/dist/tools/environment-crud.d.ts +0 -4
  65. package/dist/tools/environment-crud.d.ts.map +0 -1
  66. package/dist/tools/environment-crud.js +0 -100
@@ -1,20 +1,32 @@
1
- import { ArtifactInput } from "@empiricalrun/shared-types";
1
+ import { ArtifactInput, Usage } from "@empiricalrun/shared-types";
2
+ import { BrowserAgentResult } from "../agent/cua";
3
+ export type BrowserAgentIPCPayload = {
4
+ task: string;
5
+ result: BrowserAgentResult;
6
+ usage: Usage;
7
+ generatedCode: string;
8
+ importPaths: string[];
9
+ };
2
10
  export declare class FileServiceServer {
3
11
  private port;
4
12
  private filePath;
5
13
  private repoDir;
6
14
  private server;
7
- private actionsSummary;
8
15
  private updateFile;
9
16
  private onComplete?;
10
17
  private artifactsInputs;
18
+ private result;
19
+ private usage;
11
20
  constructor({ port, repoDir, updateFile, onComplete, }: {
12
21
  port: number;
13
22
  repoDir: string;
14
23
  updateFile: boolean;
15
24
  onComplete?: () => void;
16
25
  });
17
- getActionsSummary(): string | undefined;
26
+ getResultAndUsage(): {
27
+ result: BrowserAgentResult | undefined;
28
+ usage: Usage | undefined;
29
+ };
18
30
  getArtifactInputsFromServer(): ArtifactInput[];
19
31
  setFilePath(filePath: string): void;
20
32
  startFileService(): Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/file/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAY3D,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,eAAe,CAAuB;gBAClC,EACV,IAAI,EACJ,OAAO,EACP,UAAU,EACV,UAAU,GACX,EAAE;QACD,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;KACzB;IAOD,iBAAiB;IAIjB,2BAA2B;IAI3B,WAAW,CAAC,QAAQ,EAAE,MAAM;IAItB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IA4EnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB5B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/file/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAKlE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAQlD,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAa;IAEhC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,KAAK,CAAoB;gBAErB,EACV,IAAI,EACJ,OAAO,EACP,UAAU,EACV,UAAU,GACX,EAAE;QACD,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;KACzB;IAOD,iBAAiB;;;;IAIjB,2BAA2B;IAI3B,WAAW,CAAC,QAAQ,EAAE,MAAM;IAItB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IA4DnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB5B"}
@@ -14,18 +14,19 @@ class FileServiceServer {
14
14
  filePath = "";
15
15
  repoDir = "";
16
16
  server;
17
- actionsSummary;
18
17
  updateFile = false;
19
18
  onComplete;
20
19
  artifactsInputs = [];
20
+ result;
21
+ usage;
21
22
  constructor({ port, repoDir, updateFile, onComplete, }) {
22
23
  this.port = port;
23
24
  this.repoDir = repoDir;
24
25
  this.updateFile = updateFile;
25
26
  this.onComplete = onComplete;
26
27
  }
27
- getActionsSummary() {
28
- return this.actionsSummary;
28
+ getResultAndUsage() {
29
+ return { result: this.result, usage: this.usage };
29
30
  }
30
31
  getArtifactInputsFromServer() {
31
32
  return this.artifactsInputs;
@@ -37,9 +38,19 @@ class FileServiceServer {
37
38
  const app = (0, express_1.default)();
38
39
  app.use(express_1.default.json({ limit: "50mb" }));
39
40
  (0, ipc_1.humanLoopRoute)(app);
40
- app.post("/test", async (req, res) => {
41
- const { generatedCode, importPaths, actionsSummary } = req.body;
42
- this.actionsSummary = actionsSummary;
41
+ app.post("/agent-results", async (req, res) => {
42
+ const { generatedCode, importPaths, result, usage } = req.body;
43
+ this.result = result;
44
+ this.usage = usage;
45
+ this.artifactsInputs = this.result
46
+ .filter((item) => item.type === "screenshot")
47
+ .map((item) => item.screenshot)
48
+ .map((artifact) => ({
49
+ ...artifact,
50
+ data: Buffer.isBuffer(artifact.data)
51
+ ? artifact.data
52
+ : Buffer.from(artifact.data),
53
+ }));
43
54
  if (!this.updateFile) {
44
55
  // Not updating the file in this scenario
45
56
  if (this.onComplete)
@@ -64,28 +75,6 @@ class FileServiceServer {
64
75
  }
65
76
  return res.send({ success: false });
66
77
  });
67
- app.post("/artifact", async (req, res) => {
68
- const artifactInputs = Array.isArray(req.body) ? req.body : [req.body];
69
- for (const artifactInput of artifactInputs) {
70
- const { name, contentType, data } = artifactInput;
71
- if (!data) {
72
- console.error("No data in artifact", artifactInput);
73
- continue;
74
- }
75
- // Passing buffer data to the server
76
- // Serialises the buffer data to an obbject
77
- // Which needs to be converted back to a buffer
78
- const bufferData = Buffer.isBuffer(data)
79
- ? data
80
- : Buffer.from(data.data);
81
- this.artifactsInputs.push({
82
- name,
83
- contentType,
84
- data: bufferData,
85
- });
86
- }
87
- return res.send({ success: true });
88
- });
89
78
  return new Promise((resolve) => {
90
79
  this.server = app.listen(this.port, () => resolve(this.port));
91
80
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAQhD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAqB7C,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,GAAG,YAAY,EAC5B,KAAK,CAAC,EAAE,SAAS,iBA+ElB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAWhD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAsB7C,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,GAAG,YAAY,EAC5B,KAAK,CAAC,EAAE,SAAS,iBAwElB"}
package/dist/index.js CHANGED
@@ -78,21 +78,14 @@ async function createTest(task, pageRef, scope) {
78
78
  scopeVars: scope,
79
79
  });
80
80
  }
81
- const { code, importPaths, actionsSummary, artifacts } = agentResult;
82
- if (artifacts && artifacts.length > 0) {
83
- await fileServiceClient.sendArtifactInputsToServer(artifacts);
84
- }
85
- await fileServiceClient.updateTest({
81
+ await fileServiceClient.sendAgentResult({
86
82
  task,
87
- generatedCode: code,
88
- importPaths,
89
- actionsSummary,
90
- });
91
- span?.end({
92
- output: {
93
- actionsSummary,
94
- },
83
+ result: agentResult.result,
84
+ usage: agentResult.usage,
85
+ generatedCode: agentResult.code,
86
+ importPaths: agentResult.importPaths,
95
87
  });
88
+ span?.end({ output: { agentResult } });
96
89
  }
97
90
  finally {
98
91
  // Ensure listeners are removed even if an error occurs
@@ -1,7 +1,6 @@
1
1
  import { TraceClient } from "@empiricalrun/llm";
2
- import { PendingToolCall, SupportedChatModels, ToolResult } from "@empiricalrun/llm/chat";
3
- import { Tool, ToolExecute } from "@empiricalrun/shared-types";
4
- export type { SupportedChatModels };
2
+ import { PendingToolCall, ToolResult } from "@empiricalrun/llm/chat";
3
+ import { SupportedChatModels, Tool, ToolExecute } from "@empiricalrun/shared-types";
5
4
  type ToolExecutors = {
6
5
  [key: string]: ToolExecute;
7
6
  };
@@ -29,4 +28,5 @@ export declare class ToolCallService {
29
28
  sendToQueue(toolCalls: PendingToolCall[]): Promise<void>;
30
29
  execute(toolCalls: PendingToolCall[]): Promise<ToolResult[]>;
31
30
  }
31
+ export {};
32
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tool-call-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAEL,eAAe,EACf,mBAAmB,EACnB,UAAU,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAiB,IAAI,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAiB9E,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,KAAK,aAAa,GAAG;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B,CAAC;AAEF,qBAAa,eAAe;IAC1B,KAAK,EAAE,IAAI,EAAE,CAAM;IACnB,aAAa,EAAE,aAAa,CAAM;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,mBAAmB,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACjC,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,QAAQ,EACR,MAAM,EACN,KAAK,EACL,YAAY,EACZ,oBAAyB,GAC1B,EAAE;QACD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,aAAa,EAAE,mBAAmB,CAAC;QACnC,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/C;IAmCK,WAAW,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBxD,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAuEnE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tool-call-service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAEL,eAAe,EACf,UAAU,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,mBAAmB,EACnB,IAAI,EACJ,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAkBpC,KAAK,aAAa,GAAG;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B,CAAC;AAEF,qBAAa,eAAe;IAC1B,KAAK,EAAE,IAAI,EAAE,CAAM;IACnB,aAAa,EAAE,aAAa,CAAM;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,mBAAmB,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAEjC,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,QAAQ,EACR,MAAM,EACN,KAAK,EACL,YAAY,EACZ,oBAAyB,GAC1B,EAAE;QACD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,aAAa,EAAE,mBAAmB,CAAC;QACnC,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/C;IAmCK,WAAW,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBxD,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAwEnE"}
@@ -6,8 +6,8 @@ const artifacts_1 = require("../artifacts");
6
6
  const commit_and_create_pr_1 = require("../tools/commit-and-create-pr");
7
7
  const diagnosis_fetcher_1 = require("../tools/diagnosis-fetcher");
8
8
  const download_build_1 = require("../tools/download-build");
9
- const environment_crud_1 = require("../tools/environment-crud");
10
9
  const grep_1 = require("../tools/grep");
10
+ const list_environments_1 = require("../tools/list-environments");
11
11
  const str_replace_editor_1 = require("../tools/str_replace_editor");
12
12
  const test_gen_browser_1 = require("../tools/test-gen-browser");
13
13
  const test_run_1 = require("../tools/test-run");
@@ -41,7 +41,7 @@ class ToolCallService {
41
41
  diagnosis_fetcher_1.fetchDiagnosisReportTool,
42
42
  test_gen_browser_1.generateTestWithBrowserAgent,
43
43
  commit_and_create_pr_1.createPullRequestTool,
44
- environment_crud_1.getEnvironmentTool,
44
+ list_environments_1.listEnvironmentsTool,
45
45
  download_build_1.downloadBuildTool,
46
46
  ];
47
47
  if ((0, chat_1.getProviderForModel)(this.selectedModel) !== "claude") {
@@ -64,7 +64,7 @@ class ToolCallService {
64
64
  if (!requestId) {
65
65
  throw new Error("Could not find an id for the tool call.");
66
66
  }
67
- const queueUrl = (0, utils_1.getQueueUrl)(this.featureFlags);
67
+ const queueUrl = (0, utils_1.getQueueUrl)(toolCalls, this.tools);
68
68
  if (!queueUrl) {
69
69
  throw new Error(`queueUrl is required for remote execution.`);
70
70
  }
@@ -116,6 +116,7 @@ class ToolCallService {
116
116
  trace: this.trace,
117
117
  collectArtifacts: collectArtifactsFn,
118
118
  environmentOverrides: this.environmentOverrides,
119
+ featureFlags: this.featureFlags,
119
120
  });
120
121
  const artifacts = await uploadArtifactsQueue.waitForCompletion();
121
122
  toolResults.push({ ...result, artifacts });
@@ -1,11 +1,4 @@
1
- import { SupportedChatModels } from "@empiricalrun/llm/chat";
2
- import { PendingToolCall } from "@empiricalrun/shared-types";
3
- export declare function getQueueUrl(featureFlags: string[]): string | undefined;
4
- export declare function sendToolRequestToRemoteQueue(queueUrl: string, payload: {
5
- toolCalls: PendingToolCall[];
6
- requestId: string;
7
- chatSessionId: number;
8
- selectedModel: SupportedChatModels;
9
- branchName: string;
10
- }): Promise<void>;
1
+ import { PendingToolCall, ServicePayload, Tool } from "@empiricalrun/shared-types";
2
+ export declare function getQueueUrl(toolCalls: PendingToolCall[], tools: Tool[]): string;
3
+ export declare function sendToolRequestToRemoteQueue(queueUrl: string, payload: ServicePayload): Promise<void>;
11
4
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tool-call-service/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,sBAMjD;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IACP,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,mBAAmB,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB,iBAiBF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tool-call-service/utils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,cAAc,EACd,IAAI,EACL,MAAM,4BAA4B,CAAC;AAUpC,wBAAgB,WAAW,CACzB,SAAS,EAAE,eAAe,EAAE,EAC5B,KAAK,EAAE,IAAI,EAAE,GACZ,MAAM,CAwBR;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,iBAiBxB"}
@@ -3,12 +3,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getQueueUrl = getQueueUrl;
4
4
  exports.sendToolRequestToRemoteQueue = sendToolRequestToRemoteQueue;
5
5
  const client_sqs_1 = require("@aws-sdk/client-sqs");
6
- function getQueueUrl(featureFlags) {
7
- const useToolExecutionOnEcs = featureFlags.includes("useToolExecutionOnEcs");
8
- if (useToolExecutionOnEcs) {
9
- return process.env.TOOL_EXECUTION_SQS_URL_ECS;
6
+ function appendPrefixToQueueUrl(queueUrl, prefix) {
7
+ if (!queueUrl || !prefix) {
8
+ throw new Error("queueUrl and prefix must be set");
10
9
  }
11
- return process.env.TOOL_EXECUTION_SQS_URL;
10
+ const parts = queueUrl.split("/");
11
+ return `${parts.slice(0, -1).join("/")}/${prefix}-${parts.pop()}`;
12
+ }
13
+ function getQueueUrl(toolCalls, tools) {
14
+ const needsBrowser = toolCalls.some((toolCall) => tools.find((t) => t.schema.name === toolCall.name)?.needsBrowser);
15
+ const baseQueueUrl = needsBrowser
16
+ ? process.env.TOOL_EXECUTION_SQS_URL_BROWSER
17
+ : process.env.TOOL_EXECUTION_SQS_URL;
18
+ if (process.env.VERCEL_ENV !== "preview") {
19
+ return baseQueueUrl;
20
+ }
21
+ const branch = process.env.VERCEL_GIT_COMMIT_REF;
22
+ if (!branch) {
23
+ throw new Error("VERCEL_GIT_COMMIT_REF is not set");
24
+ }
25
+ const queueUrl = appendPrefixToQueueUrl(baseQueueUrl, `gh-branch-${branch.replace(/\//g, "-")}`);
26
+ console.log("queueUrl", queueUrl);
27
+ return queueUrl;
12
28
  }
13
29
  async function sendToolRequestToRemoteQueue(queueUrl, payload) {
14
30
  const sqs = new client_sqs_1.SQSClient({
@@ -1 +1 @@
1
- {"version":3,"file":"commit-and-create-pr.d.ts","sourceRoot":"","sources":["../../src/tools/commit-and-create-pr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,4BAA4B,CAAC;AAOpC,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAiB1D;AAiCD,eAAO,MAAM,qBAAqB,EAAE,IAkFnC,CAAC"}
1
+ {"version":3,"file":"commit-and-create-pr.d.ts","sourceRoot":"","sources":["../../src/tools/commit-and-create-pr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,4BAA4B,CAAC;AAOpC,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAiB1D;AAiCD,eAAO,MAAM,qBAAqB,EAAE,IAmFnC,CAAC"}
@@ -51,6 +51,7 @@ Don't ask the user for this information, just come up with it yourself.
51
51
  `,
52
52
  parameters: createPullRequestSchema,
53
53
  },
54
+ needsBrowser: false,
54
55
  execute: async ({ input, repoPath, apiKey, }) => {
55
56
  try {
56
57
  const { pullRequestTitle, pullRequestDescription } = input;
@@ -1 +1 @@
1
- {"version":3,"file":"diagnosis-fetcher.d.ts","sourceRoot":"","sources":["../../src/tools/diagnosis-fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAe,MAAM,4BAA4B,CAAC;AAepE,eAAO,MAAM,wBAAwB,EAAE,IAqFtC,CAAC"}
1
+ {"version":3,"file":"diagnosis-fetcher.d.ts","sourceRoot":"","sources":["../../src/tools/diagnosis-fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAe,MAAM,4BAA4B,CAAC;AAepE,eAAO,MAAM,wBAAwB,EAAE,IAsFtC,CAAC"}
@@ -19,6 +19,7 @@ exports.fetchDiagnosisReportTool = {
19
19
  description: "Fetch details about a test case diagnosis using its URL or slug",
20
20
  parameters: DiagnosisSchema,
21
21
  },
22
+ needsBrowser: false,
22
23
  execute: async (params) => {
23
24
  const { input } = params;
24
25
  const { repoPath, apiKey } = params;
@@ -1 +1 @@
1
- {"version":3,"file":"download-build.d.ts","sourceRoot":"","sources":["../../src/tools/download-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAe,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE7E,eAAO,MAAM,iBAAiB,EAAE,IAkC/B,CAAC"}
1
+ {"version":3,"file":"download-build.d.ts","sourceRoot":"","sources":["../../src/tools/download-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAe,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE7E,eAAO,MAAM,iBAAiB,EAAE,IAmC/B,CAAC"}
@@ -14,6 +14,7 @@ have a build URL, you can try getting the environment details with the getEnviro
14
14
  Environment details will include the build URL.`,
15
15
  parameters: exports.downloadBuildToolSchema,
16
16
  },
17
+ needsBrowser: false,
17
18
  execute: async (params) => {
18
19
  const { input } = params;
19
20
  const { repoPath, apiKey } = params;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/grep/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,IAAI,EAGL,MAAM,4BAA4B,CAAC;AA8HpC,eAAO,MAAM,QAAQ,EAAE,IA2BtB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/grep/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,IAAI,EAGL,MAAM,4BAA4B,CAAC;AA8HpC,eAAO,MAAM,QAAQ,EAAE,IA4BtB,CAAC"}
@@ -124,6 +124,7 @@ If ripgrep is not available, it will fall back to using system grep.
124
124
  Search is case insensitive and regex patterns are not supported.`,
125
125
  parameters: GrepInputSchema,
126
126
  },
127
+ needsBrowser: false,
127
128
  execute: async ({ input, repoPath, }) => {
128
129
  if ((0, ripgrep_1.isRgAvailable)()) {
129
130
  return usingRipgrep(input, repoPath);
@@ -0,0 +1,3 @@
1
+ import type { Tool } from "@empiricalrun/shared-types";
2
+ export declare const listEnvironmentsTool: Tool;
3
+ //# sourceMappingURL=list-environments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-environments.d.ts","sourceRoot":"","sources":["../../src/tools/list-environments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,4BAA4B,CAAC;AAKpC,eAAO,MAAM,oBAAoB,EAAE,IAsDlC,CAAC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listEnvironmentsTool = void 0;
4
+ const zod_1 = require("zod");
5
+ const utils_1 = require("./utils");
6
+ exports.listEnvironmentsTool = {
7
+ schema: {
8
+ name: "listEnvironments",
9
+ description: "List all environments and their latest builds for this repository.",
10
+ parameters: zod_1.z.object({}),
11
+ },
12
+ needsBrowser: false,
13
+ execute: async ({ apiKey, }) => {
14
+ let response;
15
+ try {
16
+ response = await (0, utils_1.makeDashboardRequest)({
17
+ path: `/api/environments/list`,
18
+ method: "GET",
19
+ apiKey,
20
+ });
21
+ }
22
+ catch (error) {
23
+ return {
24
+ isError: true,
25
+ result: `Failed to make API request to fetch environments: ${error instanceof Error ? error.message : String(error)}`,
26
+ };
27
+ }
28
+ try {
29
+ const data = response;
30
+ if (data.error) {
31
+ return {
32
+ isError: true,
33
+ result: `API error while fetching environments: ${data.error.message}`,
34
+ data: data.error,
35
+ };
36
+ }
37
+ return {
38
+ result: JSON.stringify(data.data),
39
+ isError: false,
40
+ };
41
+ }
42
+ catch (error) {
43
+ return {
44
+ isError: true,
45
+ result: `Failed to parse or validate environment response data: ${error instanceof Error ? error.message : String(error)}`,
46
+ };
47
+ }
48
+ },
49
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"str_replace_editor.d.ts","sourceRoot":"","sources":["../../src/tools/str_replace_editor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAe,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAOhF,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6UD;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,EAC7C,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2CtB;AA8HD,eAAO,MAAM,eAAe,EAAE,IAAI,EAKjC,CAAC"}
1
+ {"version":3,"file":"str_replace_editor.d.ts","sourceRoot":"","sources":["../../src/tools/str_replace_editor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAe,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAOhF,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6UD;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,EAC7C,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2CtB;AAkID,eAAO,MAAM,eAAe,EAAE,IAAI,EAKjC,CAAC"}
@@ -340,6 +340,7 @@ File contents are returned with line numbers, starting from 1.
340
340
  path: zod_1.z.string().describe("The path to the file or directory to view."),
341
341
  }),
342
342
  },
343
+ needsBrowser: false,
343
344
  execute: async (params) => {
344
345
  const { input } = params;
345
346
  const { repoPath } = params;
@@ -364,6 +365,7 @@ directories "tests", "tests/example", and "tests/example/foo.spec.ts".`,
364
365
  file_text: zod_1.z.string().describe("The contents of the new file."),
365
366
  }),
366
367
  },
368
+ needsBrowser: false,
367
369
  execute: async (params) => {
368
370
  const { input } = params;
369
371
  const { repoPath } = params;
@@ -388,6 +390,7 @@ in the file. If old_str is not unique, the tool will return an error.`,
388
390
  new_str: zod_1.z.string().describe("The string to replace old_str with."),
389
391
  }),
390
392
  },
393
+ needsBrowser: false,
391
394
  execute: async (params) => {
392
395
  const { input } = params;
393
396
  const { repoPath } = params;
@@ -418,6 +421,7 @@ To insert a string at the end of the file, you should use insert_line = (total l
418
421
  new_str: zod_1.z.string().describe("The string to insert."),
419
422
  }),
420
423
  },
424
+ needsBrowser: false,
421
425
  execute: async (params) => {
422
426
  const { input } = params;
423
427
  const { repoPath } = params;
@@ -1,3 +1,3 @@
1
- import { Tool } from "@empiricalrun/shared-types";
1
+ import type { Tool } from "@empiricalrun/shared-types";
2
2
  export declare const generateTestWithBrowserAgent: Tool;
3
3
  //# sourceMappingURL=test-gen-browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-gen-browser.d.ts","sourceRoot":"","sources":["../../src/tools/test-gen-browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAmGpE,eAAO,MAAM,4BAA4B,EAAE,IA0I1C,CAAC"}
1
+ {"version":3,"file":"test-gen-browser.d.ts","sourceRoot":"","sources":["../../src/tools/test-gen-browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,IAAI,EAGL,MAAM,4BAA4B,CAAC;AAoGpC,eAAO,MAAM,4BAA4B,EAAE,IA2L1C,CAAC"}
@@ -95,7 +95,8 @@ exports.generateTestWithBrowserAgent = {
95
95
  description: BROWSER_AGENT_DESCRIPTION,
96
96
  parameters: BrowserAgentSchema,
97
97
  },
98
- execute: async ({ input, repoPath, trace, collectArtifacts, environmentOverrides = {}, }) => {
98
+ needsBrowser: true,
99
+ execute: async ({ input, repoPath, trace, collectArtifacts, environmentOverrides = {}, featureFlags, }) => {
99
100
  const { filePath, project } = input;
100
101
  const absoluteFilePath = path_1.default.join(repoPath, filePath);
101
102
  if (!fs_1.default.existsSync(absoluteFilePath)) {
@@ -161,7 +162,7 @@ exports.generateTestWithBrowserAgent = {
161
162
  }
162
163
  const testGenToken = (0, scenarios_1.buildTokenFromOptions)({ name: testName, file: filePath, prompt: input.changeToMake }, { useComputerUseAgent: true });
163
164
  console.log("[generateTestWithBrowserAgent] Validations passed, starting agent");
164
- const toolResult = await (0, run_1.generateTestsUsingMasterAgent)({
165
+ const agentResult = await (0, run_1.runBrowsingAgent)({
165
166
  testCaseName: testName,
166
167
  testCaseSuites: testSuites,
167
168
  testFilePath: filePath,
@@ -176,27 +177,64 @@ exports.generateTestWithBrowserAgent = {
176
177
  // Cleanup: Undo the TODO -> createTest changes
177
178
  await (0, pw_pause_1.revertToOriginalPwCode)(repoPath);
178
179
  fs_1.default.writeFileSync(absoluteFilePath, fileBackup, "utf-8");
179
- const { isError, error, actionsSummary, artifacts } = toolResult;
180
+ const { isError, error, result: toolResult, artifacts, usage, } = agentResult;
180
181
  if (artifacts) {
181
182
  void collectArtifacts?.(artifacts);
182
183
  }
183
- if (!isError) {
184
+ if (isError || !toolResult) {
184
185
  return {
185
186
  isError,
186
- result: `Browser agent has finished running. Here is the summary of actions it took
187
- and the generated Playwright code:
188
-
189
- ${actionsSummary}
187
+ result: `Browser agent failed to run successfully. Here is the error:
188
+ ${error}
190
189
  `,
191
190
  };
192
191
  }
192
+ let result = [
193
+ {
194
+ type: "text",
195
+ text: "Browser agent has finished running. Here is the summary of actions it took, and the generated Playwright code:",
196
+ },
197
+ ...toolResult.map((item) => {
198
+ if (item.type === "text") {
199
+ return {
200
+ type: "text",
201
+ text: item.text,
202
+ };
203
+ }
204
+ else if (item.type === "screenshot") {
205
+ const bufferData = Buffer.isBuffer(item.screenshot.data)
206
+ ? item.screenshot.data
207
+ : Buffer.from(item.screenshot.data);
208
+ return {
209
+ type: "image/png",
210
+ base64Data: `${bufferData.toString("base64")}`,
211
+ };
212
+ }
213
+ else {
214
+ return {
215
+ type: "text",
216
+ text: `Unknown item type: ${item}`,
217
+ };
218
+ }
219
+ }),
220
+ ];
221
+ const isMultiModalEnabled = featureFlags.includes("multi_modal_tool_result_from_browser_agent");
222
+ if (isMultiModalEnabled) {
223
+ return {
224
+ isError,
225
+ result,
226
+ usage,
227
+ };
228
+ }
193
229
  else {
230
+ const textOnlyResult = result
231
+ .filter((item) => item.type === "text")
232
+ .map((item) => item.text)
233
+ .join("\n");
194
234
  return {
195
235
  isError,
196
- result: `Browser agent failed to run successfully. Here is the error:
197
-
198
- ${error}
199
- `,
236
+ result: textOnlyResult,
237
+ usage,
200
238
  };
201
239
  }
202
240
  },
@@ -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,4BAA4B,CAAC;AAcvD,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,IAgIpC,CAAC"}
@@ -24,6 +24,7 @@ exports.fetchTestRunReportTool = {
24
24
  description: "Fetch details about a test run using its URL",
25
25
  parameters: TestRunSchema,
26
26
  },
27
+ needsBrowser: false,
27
28
  execute: async ({ input, apiKey, }) => {
28
29
  const { testRunUrl } = input;
29
30
  // Remove query parameters if they exist
@@ -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,4BAA4B,CAAC;AAwDnE,eAAO,MAAM,WAAW,EAAE,IAoFzB,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;AAwDnE,eAAO,MAAM,WAAW,EAAE,IAqFzB,CAAC"}
@@ -47,6 +47,7 @@ exports.runTestTool = {
47
47
  description: "Run a test",
48
48
  parameters: RunTestSchema,
49
49
  },
50
+ needsBrowser: true,
50
51
  execute: async ({ input, repoPath, collectArtifacts, environmentOverrides = {}, }) => {
51
52
  let reportUrl = undefined;
52
53
  let envOverrides = { ...environmentOverrides };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empiricalrun/test-gen",
3
- "version": "0.64.3",
3
+ "version": "0.65.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"
@@ -62,7 +62,7 @@
62
62
  "tsx": "^4.16.2",
63
63
  "typescript": "^5.3.3",
64
64
  "zod": "^3.23.8",
65
- "@empiricalrun/llm": "^0.17.3",
65
+ "@empiricalrun/llm": "^0.18.0",
66
66
  "@empiricalrun/r2-uploader": "^0.3.9",
67
67
  "@empiricalrun/test-run": "^0.10.1"
68
68
  },
@@ -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.2"
82
+ "@empiricalrun/shared-types": "0.5.0"
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/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/json.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/list-environments.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/json.ts","./src/utils/repo-tree.ts","./src/utils/slug.ts","./src/utils/string.ts","./src/utils/stripAnsi.ts"],"version":"5.8.3"}
@@ -1,4 +0,0 @@
1
- import type { Tool } from "@empiricalrun/shared-types";
2
- export declare const getEnvironmentTool: Tool;
3
- export declare const environmentTools: Tool[];
4
- //# sourceMappingURL=environment-crud.d.ts.map