@empiricalrun/test-gen 0.57.2 → 0.59.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 (147) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/dist/actions/index.d.ts.map +1 -1
  3. package/dist/actions/skill.js +2 -2
  4. package/dist/actions/utils/index.js +2 -3
  5. package/dist/agent/browsing/index.js +1 -2
  6. package/dist/agent/browsing/run.d.ts +3 -1
  7. package/dist/agent/browsing/run.d.ts.map +1 -1
  8. package/dist/agent/browsing/run.js +24 -27
  9. package/dist/agent/browsing/utils.d.ts +1 -14
  10. package/dist/agent/browsing/utils.d.ts.map +1 -1
  11. package/dist/agent/browsing/utils.js +10 -67
  12. package/dist/agent/chat/agent-loop.d.ts +6 -3
  13. package/dist/agent/chat/agent-loop.d.ts.map +1 -1
  14. package/dist/agent/chat/agent-loop.js +43 -27
  15. package/dist/agent/chat/exports.d.ts +7 -8
  16. package/dist/agent/chat/exports.d.ts.map +1 -1
  17. package/dist/agent/chat/exports.js +14 -34
  18. package/dist/agent/chat/index.d.ts +1 -1
  19. package/dist/agent/chat/index.d.ts.map +1 -1
  20. package/dist/agent/chat/index.js +20 -10
  21. package/dist/agent/chat/models.d.ts +6 -0
  22. package/dist/agent/chat/models.d.ts.map +1 -0
  23. package/dist/agent/chat/models.js +37 -0
  24. package/dist/agent/chat/prompt.d.ts +2 -1
  25. package/dist/agent/chat/prompt.d.ts.map +1 -1
  26. package/dist/agent/chat/prompt.js +40 -12
  27. package/dist/agent/chat/repo.d.ts +2 -1
  28. package/dist/agent/chat/repo.d.ts.map +1 -1
  29. package/dist/agent/chat/repo.js +32 -36
  30. package/dist/agent/chat/state.d.ts +15 -7
  31. package/dist/agent/chat/state.d.ts.map +1 -1
  32. package/dist/agent/chat/state.js +95 -32
  33. package/dist/agent/chat/types.d.ts +0 -1
  34. package/dist/agent/chat/types.d.ts.map +1 -1
  35. package/dist/agent/codegen/create-test-block.js +1 -2
  36. package/dist/agent/codegen/fix-ts-errors.js +1 -2
  37. package/dist/agent/codegen/generate-code-apply-changes.js +2 -3
  38. package/dist/agent/codegen/lexical-scoped-vars.js +1 -2
  39. package/dist/agent/codegen/repo-edit.js +2 -3
  40. package/dist/agent/codegen/run.js +2 -3
  41. package/dist/agent/codegen/skills-retriever.d.ts +3 -3
  42. package/dist/agent/codegen/skills-retriever.d.ts.map +1 -1
  43. package/dist/agent/codegen/skills-retriever.js +2 -2
  44. package/dist/agent/codegen/test-update-feedback.js +1 -2
  45. package/dist/agent/codegen/update-flow.js +4 -5
  46. package/dist/agent/codegen/use-skill.js +1 -2
  47. package/dist/agent/codegen/utils.js +9 -10
  48. package/dist/agent/cua/computer.js +3 -4
  49. package/dist/agent/cua/index.js +2 -3
  50. package/dist/agent/cua/model.js +1 -2
  51. package/dist/agent/diagnosis-agent/index.js +2 -3
  52. package/dist/agent/diagnosis-agent/strict-mode-violation.js +1 -2
  53. package/dist/agent/enrich-prompt/index.d.ts +1 -1
  54. package/dist/agent/enrich-prompt/index.d.ts.map +1 -1
  55. package/dist/agent/enrich-prompt/utils.js +1 -2
  56. package/dist/agent/infer-agent/index.js +1 -2
  57. package/dist/agent/master/action-tool-calls.js +3 -3
  58. package/dist/agent/master/browser-tests/index.spec.js +6 -6
  59. package/dist/agent/master/element-annotation.js +2 -3
  60. package/dist/agent/master/execute-browser-action.d.ts +1 -1
  61. package/dist/agent/master/execute-browser-action.d.ts.map +1 -1
  62. package/dist/agent/master/execute-browser-action.js +1 -2
  63. package/dist/agent/master/execute-skill-action.js +1 -2
  64. package/dist/agent/master/icon-descriptor/index.js +6 -7
  65. package/dist/agent/master/icon-descriptor/normalize-svg.js +1 -2
  66. package/dist/agent/master/next-action.js +1 -2
  67. package/dist/agent/master/planner.d.ts.map +1 -1
  68. package/dist/agent/master/planner.js +1 -2
  69. package/dist/agent/master/run.js +3 -3
  70. package/dist/agent/master/scroller.js +1 -2
  71. package/dist/agent/master/with-hints.d.ts +1 -1
  72. package/dist/agent/master/with-hints.d.ts.map +1 -1
  73. package/dist/agent/planner/run-time-planner.d.ts.map +1 -1
  74. package/dist/agent/planner/run-time-planner.js +1 -2
  75. package/dist/agent/planner/run.js +1 -2
  76. package/dist/bin/index.js +4 -0
  77. package/dist/bin/logger/index.js +2 -2
  78. package/dist/bin/utils/context.js +5 -6
  79. package/dist/bin/utils/fs/index.d.ts.map +1 -1
  80. package/dist/bin/utils/fs/index.js +4 -5
  81. package/dist/bin/utils/index.d.ts +1 -0
  82. package/dist/bin/utils/index.d.ts.map +1 -1
  83. package/dist/bin/utils/index.js +2 -3
  84. package/dist/bin/utils/platform/web/index.d.ts.map +1 -1
  85. package/dist/bin/utils/platform/web/index.js +21 -21
  86. package/dist/bin/utils/scenarios/index.js +3 -4
  87. package/dist/constants/index.js +1 -1
  88. package/dist/file/server.js +2 -2
  89. package/dist/human-in-the-loop/cli.js +1 -2
  90. package/dist/human-in-the-loop/ipc.js +2 -3
  91. package/dist/index.d.ts +1 -0
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +4 -2
  94. package/dist/prompts/lib/ts-transformer.js +17 -7
  95. package/dist/reporter/index.js +3 -3
  96. package/dist/reporter/lib.js +1 -1
  97. package/dist/session/index.js +6 -7
  98. package/dist/test-build/index.js +3 -4
  99. package/dist/tool-call-service/index.d.ts +3 -3
  100. package/dist/tool-call-service/index.d.ts.map +1 -1
  101. package/dist/tool-call-service/index.js +51 -71
  102. package/dist/tool-call-service/utils.d.ts +10 -0
  103. package/dist/tool-call-service/utils.d.ts.map +1 -0
  104. package/dist/tool-call-service/utils.js +23 -0
  105. package/dist/tools/commit-and-create-pr.js +2 -2
  106. package/dist/tools/download-build.d.ts +9 -0
  107. package/dist/tools/download-build.d.ts.map +1 -1
  108. package/dist/tools/download-build.js +5 -4
  109. package/dist/tools/grep/ripgrep/index.js +2 -3
  110. package/dist/tools/grep/ripgrep/types.d.ts +0 -2
  111. package/dist/tools/grep/ripgrep/types.d.ts.map +1 -1
  112. package/dist/tools/str_replace_editor.js +3 -3
  113. package/dist/tools/test-gen-browser.d.ts.map +1 -1
  114. package/dist/tools/test-gen-browser.js +8 -13
  115. package/dist/tools/test-run-fetcher/index.js +2 -2
  116. package/dist/tools/test-run.d.ts.map +1 -1
  117. package/dist/tools/test-run.js +8 -13
  118. package/dist/tools/utils/index.js +2 -3
  119. package/dist/types/index.d.ts +8 -0
  120. package/dist/types/index.d.ts.map +1 -1
  121. package/dist/uploader/index.js +6 -6
  122. package/dist/uploader/utils.d.ts.map +1 -1
  123. package/dist/uploader/utils.js +2 -2
  124. package/dist/utils/checkpoint.d.ts.map +1 -1
  125. package/dist/utils/checkpoint.js +4 -3
  126. package/dist/utils/env.js +1 -2
  127. package/dist/utils/exec.d.ts +2 -2
  128. package/dist/utils/exec.d.ts.map +1 -1
  129. package/dist/utils/exec.js +7 -6
  130. package/dist/utils/file-tree.d.ts +3 -0
  131. package/dist/utils/file-tree.d.ts.map +1 -0
  132. package/dist/utils/file-tree.js +42 -0
  133. package/dist/utils/file.js +1 -2
  134. package/dist/utils/git.js +7 -8
  135. package/dist/utils/html.d.ts.map +1 -1
  136. package/dist/utils/pw-test.js +1 -2
  137. package/dist/utils/repo-tree.d.ts +2 -1
  138. package/dist/utils/repo-tree.d.ts.map +1 -1
  139. package/dist/utils/repo-tree.js +62 -53
  140. package/dist/utils/slug.d.ts.map +1 -1
  141. package/dist/utils/slug.js +1 -1
  142. package/dist/utils/string.js +1 -2
  143. package/package.json +5 -5
  144. package/tsconfig.tsbuildinfo +1 -0
  145. package/dist/agent/chat/model.d.ts +0 -4
  146. package/dist/agent/chat/model.d.ts.map +0 -1
  147. package/dist/agent/chat/model.js +0 -17
@@ -39,32 +39,27 @@ exports.runTestTool = {
39
39
  },
40
40
  execute: async (input) => {
41
41
  let reportUrl = undefined;
42
- let projectName = undefined;
43
- let testRunId = undefined;
42
+ let envOverrides = undefined;
44
43
  if (hasCloudflareCredentials()) {
45
- projectName = "test-gen-chat-agent";
46
- testRunId = Date.now().toString();
44
+ const projectName = "test-gen-chat-agent";
45
+ const testRunId = Date.now().toString();
47
46
  reportUrl = buildReportUrl(projectName, testRunId);
47
+ envOverrides = {
48
+ PROJECT_NAME: projectName,
49
+ TEST_RUN_GITHUB_ACTION_ID: testRunId,
50
+ };
48
51
  }
49
52
  else {
50
53
  console.warn("R2 credentials not found: report artifacts will not be uploaded");
51
54
  }
52
55
  const { testName, suites, fileName, project } = input;
53
56
  try {
54
- // {"project":"chromium","suites":[],"fileName":"tests/quizizz-for-work/group.spec.ts","testName":"Create a group"}
55
- // This runs all tests - TODO: Debug this, should only run the testName
56
57
  const result = await (0, test_run_1.runSingleTest)({
57
58
  testName,
58
59
  suites,
59
60
  fileName,
60
61
  projects: [project],
61
- // Adding these to enforce report artifacts are uploaded
62
- envOverrides: projectName && testRunId
63
- ? {
64
- PROJECT_NAME: projectName,
65
- TEST_RUN_GITHUB_ACTION_ID: testRunId,
66
- }
67
- : undefined,
62
+ envOverrides,
68
63
  });
69
64
  return {
70
65
  result: buildResult({
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.callGitHubProxy = exports.makeDashboardRequest = void 0;
3
+ exports.makeDashboardRequest = makeDashboardRequest;
4
+ exports.callGitHubProxy = callGitHubProxy;
4
5
  async function makeDashboardRequest({ path, method = "GET", body, }) {
5
6
  const API_KEY = process.env.EMPIRICALRUN_API_KEY;
6
7
  if (!API_KEY) {
@@ -23,7 +24,6 @@ async function makeDashboardRequest({ path, method = "GET", body, }) {
23
24
  }
24
25
  return await response.json();
25
26
  }
26
- exports.makeDashboardRequest = makeDashboardRequest;
27
27
  async function callGitHubProxy({ method, url, body, }) {
28
28
  const githubApiPath = url.replace("https://api.github.com", "");
29
29
  return makeDashboardRequest({
@@ -36,4 +36,3 @@ async function callGitHubProxy({ method, url, body, }) {
36
36
  },
37
37
  });
38
38
  }
39
- exports.callGitHubProxy = callGitHubProxy;
@@ -65,5 +65,13 @@ export type SkillActionArgs = BaseActionArgs & {
65
65
  skill: string;
66
66
  action: string;
67
67
  };
68
+ export type FileInfo = {
69
+ isDirectory: boolean;
70
+ isFile: boolean;
71
+ path: string;
72
+ name: string;
73
+ children: FileInfo[];
74
+ getContent: () => Promise<string>;
75
+ };
68
76
  export type ActionArgs = ClickActionArgs | FillActionArgs | GotoActionArgs | PressActionArgs | AssertTextVisibilityActionArgs | TextContentActionArgs | HoverActionArgs | SkillActionArgs;
69
77
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.checkIfResultsUploadAllowed = exports.getUploadPathForRun = exports.uploadTestResultsUsingPrjRepo = exports.getRelativeUploadPath = exports.getFullUploadPath = exports.UPLOAD_DOMAIN = exports.UPLOAD_BUCKET = void 0;
6
+ exports.UPLOAD_DOMAIN = exports.UPLOAD_BUCKET = void 0;
7
+ exports.getFullUploadPath = getFullUploadPath;
8
+ exports.getRelativeUploadPath = getRelativeUploadPath;
9
+ exports.uploadTestResultsUsingPrjRepo = uploadTestResultsUsingPrjRepo;
10
+ exports.getUploadPathForRun = getUploadPathForRun;
11
+ exports.checkIfResultsUploadAllowed = checkIfResultsUploadAllowed;
7
12
  const r2_uploader_1 = require("@empiricalrun/r2-uploader");
8
13
  const path_1 = __importDefault(require("path"));
9
14
  const utils_1 = require("./utils");
@@ -21,11 +26,9 @@ function getFullUploadPath(repoDir, filePath, uploadDir) {
21
26
  const relativeFilePath = getRelativeUploadPath(filePath, repoDir);
22
27
  return `${exports.UPLOAD_DOMAIN}/${uploadDir}${relativeFilePath}`;
23
28
  }
24
- exports.getFullUploadPath = getFullUploadPath;
25
29
  function getRelativeUploadPath(filePath, repoDir) {
26
30
  return filePath.replace(path_1.default.join(repoDir, PLAYWRIGHT_REPORT_DATA), "");
27
31
  }
28
- exports.getRelativeUploadPath = getRelativeUploadPath;
29
32
  /**
30
33
  * Function to upload test results to R2 using the project repo name and test name.
31
34
  * This function uploads both the JSON summary of test results and associated video files.
@@ -86,12 +89,10 @@ async function uploadTestResultsUsingPrjRepo({ projectRepoName, testName, repoDi
86
89
  .filter((url) => !!url),
87
90
  };
88
91
  }
89
- exports.uploadTestResultsUsingPrjRepo = uploadTestResultsUsingPrjRepo;
90
92
  function getUploadPathForRun(projectRepoName) {
91
93
  const uploadDir = `test-generation/${projectRepoName.replace("-tests", "")}/${uploadId}`;
92
94
  return uploadDir;
93
95
  }
94
- exports.getUploadPathForRun = getUploadPathForRun;
95
96
  function checkIfResultsUploadAllowed() {
96
97
  // TODO: check for valid R2 credentials
97
98
  // check for project repo name, and r2 creds
@@ -99,4 +100,3 @@ function checkIfResultsUploadAllowed() {
99
100
  process.env.R2_ACCESS_KEY_ID &&
100
101
  process.env.R2_SECRET_ACCESS_KEY);
101
102
  }
102
- exports.checkIfResultsUploadAllowed = checkIfResultsUploadAllowed;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/uploader/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAChB,MAAM,2BAA2B,CAAC;AAGnC,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAErD;AAMD,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,eAAO,MAAM,oBAAoB,WACvB,eAAe,EAAE,KACxB,cAAc,EA4BhB,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/uploader/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAChB,MAAM,2BAA2B,CAAC;AAGnC,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CAErD;AAMD,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,eAAe,EAAE,KACxB,cAAc,EA4BhB,CAAC"}
@@ -3,12 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getFlattenedTestList = exports.parseJsonReport = void 0;
6
+ exports.getFlattenedTestList = void 0;
7
+ exports.parseJsonReport = parseJsonReport;
7
8
  const fs_1 = __importDefault(require("fs"));
8
9
  function parseJsonReport(srcFile) {
9
10
  return JSON.parse(fs_1.default.readFileSync(srcFile, { encoding: "utf-8" }));
10
11
  }
11
- exports.parseJsonReport = parseJsonReport;
12
12
  const getFlattenedTestList = (suites) => {
13
13
  let flattenedSpecs = [];
14
14
  const traverseSuites = (suite, nesting = []) => {
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/utils/checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,eAAe,EAAE,EAC5B,UAAU,EAAE,MAAM,iBAcnB"}
1
+ {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/utils/checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,eAAe,EAAE,EAC5B,UAAU,EAAE,MAAM,iBAqBnB"}
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCheckpoint = void 0;
3
+ exports.createCheckpoint = createCheckpoint;
4
4
  const git_1 = require("./git");
5
5
  async function createCheckpoint(toolCalls, branchName) {
6
6
  const filesChanged = await (0, git_1.getFilesChanged)();
7
7
  const toolsWithUpdatedFiles = toolCalls
8
- .filter((tc) => tc.input.path && filesChanged.includes(tc.input.path))
8
+ .filter((tc) => "path" in tc.input &&
9
+ tc.input.path &&
10
+ filesChanged.includes(tc.input.path))
9
11
  .map((toolCall) => ({
10
12
  name: toolCall.name,
11
13
  path: toolCall.input.path,
@@ -16,4 +18,3 @@ async function createCheckpoint(toolCalls, branchName) {
16
18
  await (0, git_1.commitFilesAndPushBranch)(commitMessage, branchName, filesToCommit);
17
19
  }
18
20
  }
19
- exports.createCheckpoint = createCheckpoint;
package/dist/utils/env.js CHANGED
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isRunningOnCloud = void 0;
3
+ exports.isRunningOnCloud = isRunningOnCloud;
4
4
  function isRunningOnCloud() {
5
5
  return (process.env.CI === "true" ||
6
6
  // eslint-disable-next-line turbo/no-undeclared-env-vars
7
7
  !!process.env.RUNNING_BROWSER_TESTS_FOR_TEST_GEN);
8
8
  }
9
- exports.isRunningOnCloud = isRunningOnCloud;
@@ -1,12 +1,12 @@
1
1
  export declare class ProcessManager {
2
2
  private childProcess;
3
- execute(command: string[], options: {
3
+ execute(command: string, args: string[], options: {
4
4
  env?: Record<string, string>;
5
5
  }): Promise<number>;
6
6
  terminate(): void;
7
7
  isRunning(): boolean;
8
8
  }
9
- export declare function cmd(command: string[], options: {
9
+ export declare function cmd(command: string, args: string[], options: {
10
10
  env?: Record<string, string>;
11
11
  }): Promise<number>;
12
12
  //# 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,EAAE,EACjB,OAAO,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GACxC,OAAO,CAAC,MAAM,CAAC;IAkDlB,SAAS,IAAI,IAAI;IASjB,SAAS,IAAI,OAAO;CAGrB;AAED,wBAAsB,GAAG,CACvB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACxC,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,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GACxC,OAAO,CAAC,MAAM,CAAC;IAmDlB,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,CAAA;CAAE,GACxC,OAAO,CAAC,MAAM,CAAC,CAGjB"}
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.cmd = exports.ProcessManager = void 0;
6
+ exports.ProcessManager = void 0;
7
+ exports.cmd = cmd;
7
8
  const child_process_1 = require("child_process");
8
9
  const process_1 = __importDefault(require("process"));
9
10
  function isAcceptableExit(exitCode, signal) {
@@ -20,7 +21,8 @@ function isAcceptableExit(exitCode, signal) {
20
21
  }
21
22
  class ProcessManager {
22
23
  childProcess = null;
23
- async execute(command, options) {
24
+ async execute(command, args, options) {
25
+ console.log(`Executing command: ${command} with args: ${args}`);
24
26
  if (this.childProcess) {
25
27
  throw new Error("Process is already running");
26
28
  }
@@ -30,7 +32,7 @@ class ProcessManager {
30
32
  rejectFunc(new Error("Command cannot be empty"));
31
33
  return;
32
34
  }
33
- const p = (0, child_process_1.spawn)(command[0], command.slice(1), {
35
+ const p = (0, child_process_1.spawn)(command, args, {
34
36
  env: { ...process_1.default.env, ...options.env },
35
37
  detached: true, // Create process group so we can terminate all child processes
36
38
  });
@@ -76,8 +78,7 @@ class ProcessManager {
76
78
  }
77
79
  }
78
80
  exports.ProcessManager = ProcessManager;
79
- async function cmd(command, options) {
81
+ async function cmd(command, args, options) {
80
82
  const manager = new ProcessManager();
81
- return manager.execute(command, options);
83
+ return manager.execute(command, args, options);
82
84
  }
83
- exports.cmd = cmd;
@@ -0,0 +1,3 @@
1
+ import { FileInfo } from "../types";
2
+ export declare function getFileInfoFromFS(directory: string): Promise<FileInfo>;
3
+ //# sourceMappingURL=file-tree.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getFileInfoFromFS = getFileInfoFromFS;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const path_1 = __importDefault(require("path"));
9
+ async function getFileInfoFromFS(directory) {
10
+ let currentDirName = path_1.default.basename(directory);
11
+ let currentDir = {
12
+ isDirectory: true,
13
+ isFile: false,
14
+ path: currentDirName,
15
+ name: currentDirName,
16
+ children: [],
17
+ getContent: async () => {
18
+ return "";
19
+ },
20
+ };
21
+ const files = await promises_1.default.readdir(directory);
22
+ for (const file of files) {
23
+ const filePath = path_1.default.join(directory, file);
24
+ const stats = await promises_1.default.stat(filePath);
25
+ if (stats.isDirectory()) {
26
+ currentDir.children.push(await getFileInfoFromFS(filePath));
27
+ }
28
+ else {
29
+ currentDir.children.push({
30
+ isDirectory: false,
31
+ isFile: true,
32
+ path: filePath,
33
+ name: file,
34
+ children: [],
35
+ getContent: async () => {
36
+ return await promises_1.default.readFile(filePath, "utf8");
37
+ },
38
+ });
39
+ }
40
+ }
41
+ return currentDir;
42
+ }
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.findFileRecursively = void 0;
6
+ exports.findFileRecursively = findFileRecursively;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  function findFileRecursively(directory, fileName) {
@@ -22,4 +22,3 @@ function findFileRecursively(directory, fileName) {
22
22
  }
23
23
  }
24
24
  }
25
- exports.findFileRecursively = findFileRecursively;
package/dist/utils/git.js CHANGED
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getFilesChanged = exports.commitFilesAndPushBranch = exports.pullBranch = exports.getCurrentBranchName = exports.commitAsBotUser = exports.checkoutBranch = exports.getGitDiff = void 0;
3
+ exports.getGitDiff = getGitDiff;
4
+ exports.checkoutBranch = checkoutBranch;
5
+ exports.commitAsBotUser = commitAsBotUser;
6
+ exports.getCurrentBranchName = getCurrentBranchName;
7
+ exports.pullBranch = pullBranch;
8
+ exports.commitFilesAndPushBranch = commitFilesAndPushBranch;
9
+ exports.getFilesChanged = getFilesChanged;
4
10
  const child_process_1 = require("child_process");
5
11
  const GIT_USER_NAME = "empiricalrun[bot]";
6
12
  const GIT_USER_EMAIL = "180257021+empiricalrun[bot]@users.noreply.github.com";
@@ -10,7 +16,6 @@ function getGitDiff(filepath) {
10
16
  });
11
17
  return diff;
12
18
  }
13
- exports.getGitDiff = getGitDiff;
14
19
  async function checkoutBranch(branchName) {
15
20
  // TODO: This assumes repoDir is process.cwd()
16
21
  try {
@@ -21,7 +26,6 @@ async function checkoutBranch(branchName) {
21
26
  (0, child_process_1.execSync)(`git checkout -b ${branchName}`);
22
27
  }
23
28
  }
24
- exports.checkoutBranch = checkoutBranch;
25
29
  async function commitAsBotUser(commitMessage) {
26
30
  const status = (0, child_process_1.execSync)("git status --porcelain", { encoding: "utf-8" });
27
31
  if (!status) {
@@ -30,22 +34,18 @@ async function commitAsBotUser(commitMessage) {
30
34
  const commitMessageWithSkipCi = `${commitMessage} [skip ci]`;
31
35
  (0, child_process_1.execSync)(`git -c user.name="${GIT_USER_NAME}" -c user.email="${GIT_USER_EMAIL}" commit -m "${commitMessageWithSkipCi}"`);
32
36
  }
33
- exports.commitAsBotUser = commitAsBotUser;
34
37
  async function getCurrentBranchName() {
35
38
  const branchName = (0, child_process_1.execSync)("git branch --show-current").toString().trim();
36
39
  return branchName;
37
40
  }
38
- exports.getCurrentBranchName = getCurrentBranchName;
39
41
  async function pullBranch(branchName) {
40
42
  (0, child_process_1.execSync)(`git pull origin ${branchName}`);
41
43
  }
42
- exports.pullBranch = pullBranch;
43
44
  async function commitFilesAndPushBranch(commitMessage, branchName, files) {
44
45
  (0, child_process_1.execSync)(`git add ${files.join(" ")}`);
45
46
  await commitAsBotUser(commitMessage);
46
47
  (0, child_process_1.execSync)(`git push origin ${branchName}`);
47
48
  }
48
- exports.commitFilesAndPushBranch = commitFilesAndPushBranch;
49
49
  async function getFilesChanged() {
50
50
  const output = (0, child_process_1.execSync)("git status --porcelain").toString();
51
51
  let filesChanged = output
@@ -55,4 +55,3 @@ async function getFilesChanged() {
55
55
  .filter((fileName) => fileName != "");
56
56
  return filesChanged;
57
57
  }
58
- exports.getFilesChanged = getFilesChanged;
@@ -1 +1 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/utils/html.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,QAClB,MAAM,YACF;IACP,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,WAsCF,CAAC"}
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/utils/html.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,GACvB,KAAK,MAAM,EACX,UAAS;IACP,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,WAsCP,CAAC"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getTestFixtureModuleFromRepo = void 0;
6
+ exports.getTestFixtureModuleFromRepo = getTestFixtureModuleFromRepo;
7
7
  const api_1 = __importDefault(require("tsx/cjs/api"));
8
8
  async function getTestFixtureModuleFromRepo(repoDir) {
9
9
  const [lastDir] = repoDir.split("/").reverse();
@@ -11,4 +11,3 @@ async function getTestFixtureModuleFromRepo(repoDir) {
11
11
  const { test } = await api_1.default.require(`./tests/fixtures.ts`, dir);
12
12
  return test;
13
13
  }
14
- exports.getTestFixtureModuleFromRepo = getTestFixtureModuleFromRepo;
@@ -1,3 +1,4 @@
1
+ import { FileInfo } from "../types";
1
2
  export declare const DEFAULT_EXCLUDE: (string | RegExp)[];
2
- export declare function generateAsciiTree(dirPath: string, options?: {}): string;
3
+ export declare function generateAsciiTree(root: FileInfo, options?: {}): string;
3
4
  //# sourceMappingURL=repo-tree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repo-tree.d.ts","sourceRoot":"","sources":["../../src/utils/repo-tree.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,qBAW3B,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,UAsE9D"}
1
+ {"version":3,"file":"repo-tree.d.ts","sourceRoot":"","sources":["../../src/utils/repo-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,eAAO,MAAM,eAAe,qBAW3B,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,KAAK,UAqF7D"}
@@ -1,11 +1,7 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.generateAsciiTree = exports.DEFAULT_EXCLUDE = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
3
+ exports.DEFAULT_EXCLUDE = void 0;
4
+ exports.generateAsciiTree = generateAsciiTree;
9
5
  exports.DEFAULT_EXCLUDE = [
10
6
  "node_modules",
11
7
  "dist",
@@ -18,62 +14,75 @@ exports.DEFAULT_EXCLUDE = [
18
14
  "auth",
19
15
  "package-lock.json",
20
16
  ];
21
- function generateAsciiTree(dirPath, options = {}) {
17
+ function generateAsciiTree(root, options = {}) {
22
18
  const defaultOptions = {
23
19
  showHidden: false,
24
20
  exclude: exports.DEFAULT_EXCLUDE,
25
21
  maxDepth: 10,
26
22
  };
27
23
  const opts = { ...defaultOptions, ...options };
28
- // Make sure the path exists and is a directory
29
- if (!fs_1.default.existsSync(dirPath) || !fs_1.default.statSync(dirPath).isDirectory()) {
30
- throw new Error(`"${dirPath}" is not a valid directory path`);
24
+ if (!root.isDirectory) {
25
+ throw new Error(`"${root.path}" is not a valid directory`);
26
+ }
27
+ let result = root.name + "\n";
28
+ const stack = [];
29
+ // Add root's children to stack in reverse order
30
+ const rootChildren = [...root.children]
31
+ .filter((child) => child !== undefined)
32
+ .sort((a, b) => {
33
+ // Files first, then directories
34
+ if (!a.isDirectory && b.isDirectory)
35
+ return -1;
36
+ if (a.isDirectory && !b.isDirectory)
37
+ return 1;
38
+ return a.name.localeCompare(b.name);
39
+ });
40
+ for (let i = rootChildren.length - 1; i >= 0; i--) {
41
+ const child = rootChildren[i];
42
+ if (child) {
43
+ stack.push([child, "", 1, i === 0]);
44
+ }
31
45
  }
32
- // Start with the root directory name
33
- const rootName = path_1.default.basename(dirPath);
34
- let result = rootName + "\n";
35
- function processDirectory(currentPath, prefix = "", depth = 1) {
46
+ while (stack.length > 0) {
47
+ const current = stack.pop();
48
+ if (!current)
49
+ continue;
50
+ const [node, prefix, depth, isLast] = current;
36
51
  if (depth > opts.maxDepth)
37
- return;
38
- const items = fs_1.default.readdirSync(currentPath);
39
- // Sort items: directories first, then files
40
- const sortedItems = items.sort((a, b) => {
41
- const aIsDir = fs_1.default.statSync(path_1.default.join(currentPath, a)).isDirectory();
42
- const bIsDir = fs_1.default.statSync(path_1.default.join(currentPath, b)).isDirectory();
43
- if (aIsDir && !bIsDir)
44
- return -1;
45
- if (!aIsDir && bIsDir)
46
- return 1;
47
- return a.localeCompare(b);
48
- });
49
- // Process each item
50
- sortedItems.forEach((item, index) => {
51
- // Skip hidden files if not showing hidden
52
- if (!opts.showHidden && item.startsWith("."))
53
- return;
54
- // Skip excluded patterns
55
- if (opts.exclude.some((pattern) => typeof pattern === "string"
56
- ? item === pattern
57
- : pattern instanceof RegExp
58
- ? pattern.test(item)
59
- : false))
60
- return;
61
- const itemPath = path_1.default.join(currentPath, item);
62
- const isDirectory = fs_1.default.statSync(itemPath).isDirectory();
63
- const isLast = index === sortedItems.length - 1;
64
- // Current item symbols
65
- const symbol = isLast ? "└── " : "├── ";
66
- const nextPrefix = isLast ? " " : "│ ";
67
- // Add the current item to the result
68
- result += `${prefix}${symbol}${item}${isDirectory ? "/" : ""}\n`;
69
- // Process subdirectories
70
- if (isDirectory) {
71
- processDirectory(itemPath, prefix + nextPrefix, depth + 1);
52
+ continue;
53
+ // Skip hidden files if not showing hidden
54
+ if (!opts.showHidden && node.name.startsWith("."))
55
+ continue;
56
+ // Skip excluded patterns
57
+ if (opts.exclude.some((pattern) => typeof pattern === "string"
58
+ ? node.path === pattern
59
+ : pattern instanceof RegExp
60
+ ? pattern.test(node.path)
61
+ : false))
62
+ continue;
63
+ // Add the current item to the result
64
+ const symbol = isLast ? "└── " : "├── ";
65
+ result += `${prefix}${symbol}${node.name}${node.isDirectory ? "/" : ""}\n`;
66
+ if (node.isDirectory && node.children.length > 0) {
67
+ const nextPrefix = prefix + (isLast ? " " : "│ ");
68
+ // Sort and add children to stack in reverse order
69
+ const children = [...node.children]
70
+ .filter((child) => child !== undefined)
71
+ .sort((a, b) => {
72
+ // Files first, then directories
73
+ if (!a.isDirectory && b.isDirectory)
74
+ return -1;
75
+ if (a.isDirectory && !b.isDirectory)
76
+ return 1;
77
+ return a.name.localeCompare(b.name);
78
+ });
79
+ for (let i = children.length - 1; i >= 0; i--) {
80
+ const child = children[i];
81
+ if (child) {
82
+ stack.push([child, nextPrefix, depth + 1, i === 0]);
83
+ }
72
84
  }
73
- });
85
+ }
74
86
  }
75
- // Start the recursive processing
76
- processDirectory(dirPath);
77
87
  return result;
78
88
  }
79
- exports.generateAsciiTree = generateAsciiTree;
@@ -1 +1 @@
1
- {"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,uBAAuB,SAAgB,MAAM,oBAOzD,CAAC"}
1
+ {"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,uBAAuB,GAAU,MAAM,MAAM,oBAOzD,CAAC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.asyncGenerateRandomSlug = void 0;
4
- // @ts-expect-error
4
+ // @ts-ignore
5
5
  let customAlphabet;
6
6
  const loadNanoid = async () => {
7
7
  const { customAlphabet: importedCustomAlphabet } = await import("nanoid");
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertTextToJsComments = void 0;
3
+ exports.convertTextToJsComments = convertTextToJsComments;
4
4
  function convertTextToJsComments(text) {
5
5
  const lines = text.split("\n");
6
6
  const commentedLines = lines.map((line) => `// ${line}`);
7
7
  return commentedLines.join("\n");
8
8
  }
9
- exports.convertTextToJsComments = convertTextToJsComments;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empiricalrun/test-gen",
3
- "version": "0.57.2",
3
+ "version": "0.59.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"
@@ -60,9 +60,9 @@
60
60
  "tsx": "^4.16.2",
61
61
  "typescript": "^5.3.3",
62
62
  "zod": "^3.23.8",
63
- "@empiricalrun/llm": "^0.15.3",
64
- "@empiricalrun/r2-uploader": "^0.3.8",
65
- "@empiricalrun/test-run": "^0.8.4"
63
+ "@empiricalrun/llm": "^0.16.0",
64
+ "@empiricalrun/r2-uploader": "^0.3.9",
65
+ "@empiricalrun/test-run": "^0.9.0"
66
66
  },
67
67
  "devDependencies": {
68
68
  "@playwright/test": "1.47.1",
@@ -76,7 +76,7 @@
76
76
  "playwright": "1.47.1",
77
77
  "serve-handler": "^6.1.6",
78
78
  "ts-patch": "^3.3.0",
79
- "@empiricalrun/shared-types": "0.0.7"
79
+ "@empiricalrun/shared-types": "0.1.0"
80
80
  },
81
81
  "scripts": {
82
82
  "dev": "tspc --build --watch",
@@ -0,0 +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/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/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/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/codegen-agent.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/pw-test.ts","./src/utils/repo-tree.ts","./src/utils/slug.ts","./src/utils/string.ts"],"version":"5.8.3"}
@@ -1,4 +0,0 @@
1
- import { IChatModel } from "@empiricalrun/llm/chat";
2
- import { SupportedChatModels } from "./types";
3
- export declare function createChatModel(messages: any[], selectedModel: SupportedChatModels): IChatModel<any>;
4
- //# sourceMappingURL=model.d.ts.map