@empiricalrun/test-gen 0.79.5 → 0.79.6
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.
- package/CHANGELOG.md +9 -0
- package/dist/agent/base/index.d.ts +2 -2
- package/dist/agent/base/index.d.ts.map +1 -1
- package/dist/agent/base/index.js +38 -7
- package/dist/agent/browsing/utils.d.ts.map +1 -1
- package/dist/agent/browsing/utils.js +8 -3
- package/dist/agent/chat/exports.d.ts +1 -1
- package/dist/agent/chat/exports.d.ts.map +1 -1
- package/dist/agent/chat/exports.js +1 -2
- package/dist/agent/chat/index.d.ts.map +1 -1
- package/dist/agent/chat/index.js +5 -5
- package/dist/agent/chat/prompt/repo.d.ts.map +1 -1
- package/dist/agent/chat/prompt/repo.js +24 -0
- package/dist/agent/chat/state.d.ts +0 -1
- package/dist/agent/chat/state.d.ts.map +1 -1
- package/dist/agent/chat/state.js +0 -28
- package/dist/agent/master/browser-tests/cua.spec.js +3 -3
- package/dist/agent/master/browser-tests/index.spec.js +2 -111
- package/dist/agent/master/run.d.ts +0 -1
- package/dist/agent/master/run.d.ts.map +1 -1
- package/dist/agent/master/run.js +1 -3
- package/dist/bin/index.js +0 -12
- package/dist/file-info/adapters/github/reader.d.ts.map +1 -1
- package/dist/file-info/adapters/github/reader.js +10 -2
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -29
- package/dist/recorder/index.d.ts.map +1 -1
- package/dist/recorder/index.js +1 -1
- package/dist/tools/api-client/index.d.ts +3 -0
- package/dist/tools/api-client/index.d.ts.map +1 -0
- package/dist/tools/api-client/index.js +73 -0
- package/dist/tools/create-pull-request/utils.d.ts +1 -1
- package/dist/tools/definitions/run-test.d.ts +2 -2
- package/dist/tools/definitions/run-test.d.ts.map +1 -1
- package/dist/tools/definitions/run-test.js +6 -5
- package/dist/tools/definitions/safe-bash.d.ts +1 -0
- package/dist/tools/definitions/safe-bash.d.ts.map +1 -1
- package/dist/tools/definitions/safe-bash.js +15 -6
- package/dist/tools/definitions/test-gen-browser.d.ts +2 -2
- package/dist/tools/definitions/test-gen-browser.d.ts.map +1 -1
- package/dist/tools/definitions/test-gen-browser.js +4 -5
- package/dist/tools/delete-file/index.d.ts.map +1 -1
- package/dist/tools/delete-file/index.js +4 -5
- package/dist/tools/executor/index.d.ts.map +1 -1
- package/dist/tools/executor/index.js +0 -4
- package/dist/tools/fetch-file/index.d.ts.map +1 -1
- package/dist/tools/fetch-file/index.js +3 -7
- package/dist/tools/file-operations/create.js +4 -4
- package/dist/tools/file-operations/insert.js +5 -5
- package/dist/tools/file-operations/replace.js +5 -5
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +0 -4
- package/dist/tools/issues-v1/utils.d.ts +1 -3
- package/dist/tools/issues-v1/utils.d.ts.map +1 -1
- package/dist/tools/issues-v1/utils.js +0 -16
- package/dist/tools/list-tests-and-projects/index.d.ts.map +1 -1
- package/dist/tools/list-tests-and-projects/index.js +1 -1
- package/dist/tools/rename-file/index.d.ts.map +1 -1
- package/dist/tools/rename-file/index.js +7 -4
- package/dist/tools/run-test.d.ts.map +1 -1
- package/dist/tools/run-test.js +33 -7
- package/dist/tools/safe-bash/index.d.ts.map +1 -1
- package/dist/tools/safe-bash/index.js +25 -10
- package/dist/tools/test-gen-browser.d.ts.map +1 -1
- package/dist/tools/test-gen-browser.js +24 -5
- package/dist/tools/utils/validators.d.ts +7 -0
- package/dist/tools/utils/validators.d.ts.map +1 -0
- package/dist/tools/utils/validators.js +93 -0
- package/dist/video-core/index.d.ts.map +1 -1
- package/dist/video-core/index.js +5 -0
- package/package.json +9 -11
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/bin/environments.d.ts +0 -6
- package/dist/bin/environments.d.ts.map +0 -1
- package/dist/bin/environments.js +0 -99
- package/dist/tools/definitions/upgrade-packages.d.ts +0 -14
- package/dist/tools/definitions/upgrade-packages.d.ts.map +0 -1
- package/dist/tools/definitions/upgrade-packages.js +0 -21
- package/dist/tools/upgrade-packages/index.d.ts +0 -3
- package/dist/tools/upgrade-packages/index.d.ts.map +0 -1
- package/dist/tools/upgrade-packages/index.js +0 -134
- package/dist/tools/upgrade-packages/utils.d.ts +0 -28
- package/dist/tools/upgrade-packages/utils.d.ts.map +0 -1
- package/dist/tools/upgrade-packages/utils.js +0 -152
|
@@ -7,9 +7,9 @@ exports.renameFileTool = void 0;
|
|
|
7
7
|
const child_process_1 = require("child_process");
|
|
8
8
|
const promises_1 = require("fs/promises");
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
10
|
-
const web_1 = require("../../bin/utils/platform/web");
|
|
11
10
|
const rename_file_1 = require("../definitions/rename-file");
|
|
12
11
|
const helpers_1 = require("../file-operations/shared/helpers");
|
|
12
|
+
const validators_1 = require("../utils/validators");
|
|
13
13
|
exports.renameFileTool = {
|
|
14
14
|
...rename_file_1.renameFileTool,
|
|
15
15
|
execute: async ({ input, repoPath }) => {
|
|
@@ -68,10 +68,13 @@ exports.renameFileTool = {
|
|
|
68
68
|
}
|
|
69
69
|
stageFile(oldFilePath);
|
|
70
70
|
stageFile(newFilePath);
|
|
71
|
-
const
|
|
72
|
-
|
|
71
|
+
const validationResult = await (0, validators_1.runValidators)(repoPath, [
|
|
72
|
+
normalizedOldPath,
|
|
73
|
+
normalizedNewPath,
|
|
74
|
+
]);
|
|
75
|
+
if (!validationResult.success) {
|
|
73
76
|
return {
|
|
74
|
-
result: `File renamed from '${normalizedOldPath}' to '${normalizedNewPath}'. However,
|
|
77
|
+
result: `File renamed from '${normalizedOldPath}' to '${normalizedNewPath}'. However, validation is failing with errors:\n\n${validationResult.errors.join("\n")}`,
|
|
75
78
|
isError: false,
|
|
76
79
|
};
|
|
77
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-test.d.ts","sourceRoot":"","sources":["../../src/tools/run-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,uCAAuC,CAAC;AA2C/C,eAAO,MAAM,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"run-test.d.ts","sourceRoot":"","sources":["../../src/tools/run-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,IAAI,EAEL,MAAM,uCAAuC,CAAC;AA2C/C,eAAO,MAAM,WAAW,EAAE,IAmKzB,CAAC"}
|
package/dist/tools/run-test.js
CHANGED
|
@@ -47,7 +47,8 @@ exports.runTestTool = {
|
|
|
47
47
|
const warnMsg = "R2 credentials not found: report artifacts will not be uploaded";
|
|
48
48
|
logger?.warn(warnMsg) || console.warn(warnMsg);
|
|
49
49
|
}
|
|
50
|
-
const { filePath
|
|
50
|
+
const { filePath } = input;
|
|
51
|
+
let { project } = input;
|
|
51
52
|
// Normalize the path to support both /repo/... and relative paths
|
|
52
53
|
const normalizedFilePath = (0, helpers_1.normalizePath)(filePath);
|
|
53
54
|
const absoluteFilePath = path_1.default.join(repoPath, normalizedFilePath);
|
|
@@ -63,8 +64,33 @@ exports.runTestTool = {
|
|
|
63
64
|
};
|
|
64
65
|
}
|
|
65
66
|
try {
|
|
66
|
-
const { projects } = await (0, test_run_1.listProjectsAndTests)(repoPath);
|
|
67
|
-
if (!
|
|
67
|
+
const { projects, projectsToTestCases } = await (0, test_run_1.listProjectsAndTests)(repoPath);
|
|
68
|
+
if (!project) {
|
|
69
|
+
// Auto-select project if the test file belongs to only one project
|
|
70
|
+
const matchingProjects = projects.filter((p) => projectsToTestCases[p]?.some((tc) => normalizedFilePath.endsWith(tc.filePath)));
|
|
71
|
+
if (matchingProjects.length === 1) {
|
|
72
|
+
project = matchingProjects[0];
|
|
73
|
+
logger?.info("Auto-selected project", { project }) ||
|
|
74
|
+
console.log("Auto-selected project:", project);
|
|
75
|
+
}
|
|
76
|
+
else if (matchingProjects.length === 0) {
|
|
77
|
+
const errorMsg = `Could not find any project containing the test file: ${normalizedFilePath}. Valid project names are: ${projects.join(", ")}`;
|
|
78
|
+
logger?.error("No matching project found", {
|
|
79
|
+
filePath: normalizedFilePath,
|
|
80
|
+
validProjects: projects,
|
|
81
|
+
}) || console.error("No matching project found:", normalizedFilePath);
|
|
82
|
+
return { isError: true, result: errorMsg };
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
const errorMsg = `Multiple projects contain this test file: ${matchingProjects.join(", ")}. Please specify one using the 'project' parameter.`;
|
|
86
|
+
logger?.error("Multiple matching projects", {
|
|
87
|
+
filePath: normalizedFilePath,
|
|
88
|
+
matchingProjects,
|
|
89
|
+
}) || console.error("Multiple matching projects:", matchingProjects);
|
|
90
|
+
return { isError: true, result: errorMsg };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else if (!projects.includes(project)) {
|
|
68
94
|
const errorMsg = `Invalid project name: ${project}. Valid project names are: ${projects.join(", ")}`;
|
|
69
95
|
logger?.error("Invalid project name", {
|
|
70
96
|
project,
|
|
@@ -84,17 +110,17 @@ exports.runTestTool = {
|
|
|
84
110
|
result: `Error reading playwright config: ${error}`,
|
|
85
111
|
};
|
|
86
112
|
}
|
|
87
|
-
if (input.
|
|
113
|
+
if (input.envSlug) {
|
|
88
114
|
envOverrides = {
|
|
89
115
|
...envOverrides,
|
|
90
|
-
|
|
116
|
+
ENV_SLUG: input.envSlug,
|
|
91
117
|
};
|
|
92
118
|
}
|
|
93
119
|
try {
|
|
94
120
|
logger?.info("Starting test execution", {
|
|
95
121
|
testName: input.testName,
|
|
96
122
|
filePath: normalizedFilePath,
|
|
97
|
-
project
|
|
123
|
+
project,
|
|
98
124
|
suites: input.suites,
|
|
99
125
|
}) || console.log("Starting test execution:", input.testName);
|
|
100
126
|
const result = await (0, test_run_1.runSingleTest)({
|
|
@@ -102,7 +128,7 @@ exports.runTestTool = {
|
|
|
102
128
|
suites: input.suites,
|
|
103
129
|
filePath: normalizedFilePath,
|
|
104
130
|
repoDir: repoPath,
|
|
105
|
-
projects: [
|
|
131
|
+
projects: [project],
|
|
106
132
|
envOverrides,
|
|
107
133
|
stdout: logger?.createPrefixedStream?.("stdout"),
|
|
108
134
|
stderr: logger?.createPrefixedStream?.("stderr"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/safe-bash/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/safe-bash/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,uCAAuC,CAAC;AA0I9E,eAAO,MAAM,YAAY,EAAE,IAoF1B,CAAC"}
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.safeBashTool = void 0;
|
|
4
4
|
const child_process_1 = require("child_process");
|
|
5
5
|
const util_1 = require("util");
|
|
6
|
-
const web_1 = require("../../bin/utils/platform/web");
|
|
7
6
|
const safe_bash_1 = require("../definitions/safe-bash");
|
|
7
|
+
const validators_1 = require("../utils/validators");
|
|
8
8
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
9
9
|
const DANGEROUS_PATTERNS = [
|
|
10
10
|
/git\s+checkout/i,
|
|
@@ -47,6 +47,19 @@ async function getGitStatus(cwd) {
|
|
|
47
47
|
return { staged: "Unable to get status", unstaged: "Unable to get status" };
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
+
function getChangedFilesFromGitStatus(gitStatus) {
|
|
51
|
+
const files = [];
|
|
52
|
+
for (const section of [gitStatus.staged, gitStatus.unstaged]) {
|
|
53
|
+
for (const line of section.split("\n")) {
|
|
54
|
+
// Format: "M\tfile.ts", "A\tfile.ts", "??\tfile.ts"
|
|
55
|
+
const match = line.match(/^[A-Z?]+\t(.+)$/);
|
|
56
|
+
if (match?.[1]) {
|
|
57
|
+
files.push(match[1]);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return files;
|
|
62
|
+
}
|
|
50
63
|
function containsDangerousPattern(script) {
|
|
51
64
|
for (const pattern of DANGEROUS_PATTERNS) {
|
|
52
65
|
if (pattern.test(script)) {
|
|
@@ -55,7 +68,7 @@ function containsDangerousPattern(script) {
|
|
|
55
68
|
}
|
|
56
69
|
return null;
|
|
57
70
|
}
|
|
58
|
-
function formatResult({ stdout, stderr, gitStatus,
|
|
71
|
+
function formatResult({ stdout, stderr, gitStatus, validationResult, }) {
|
|
59
72
|
const parts = [];
|
|
60
73
|
if (stdout.trim()) {
|
|
61
74
|
parts.push(`## stdout\n\`\`\`\n${stdout.trim()}\n\`\`\``);
|
|
@@ -63,13 +76,13 @@ function formatResult({ stdout, stderr, gitStatus, tscResult, }) {
|
|
|
63
76
|
if (stderr.trim()) {
|
|
64
77
|
parts.push(`## stderr\n\`\`\`\n${stderr.trim()}\n\`\`\``);
|
|
65
78
|
}
|
|
66
|
-
if (
|
|
67
|
-
if (!
|
|
68
|
-
const errors =
|
|
69
|
-
parts.push(`##
|
|
79
|
+
if (validationResult) {
|
|
80
|
+
if (!validationResult.success) {
|
|
81
|
+
const errors = validationResult.errors;
|
|
82
|
+
parts.push(`## Validation result: Errors\n\`\`\`\n${errors.join("\n")}\n\`\`\``);
|
|
70
83
|
}
|
|
71
84
|
else {
|
|
72
|
-
parts.push(`##
|
|
85
|
+
parts.push(`## Validation result: No errors`);
|
|
73
86
|
}
|
|
74
87
|
}
|
|
75
88
|
parts.push(`## Staged (will be committed)\n\`\`\`\n${gitStatus.staged}\n\`\`\``);
|
|
@@ -78,7 +91,7 @@ function formatResult({ stdout, stderr, gitStatus, tscResult, }) {
|
|
|
78
91
|
}
|
|
79
92
|
exports.safeBashTool = {
|
|
80
93
|
...safe_bash_1.safeBashTool,
|
|
81
|
-
execute: async ({ input, repoPath, logger }) => {
|
|
94
|
+
execute: async ({ input, repoPath, logger, environmentOverrides, }) => {
|
|
82
95
|
const { script, timeout = 60000 } = input;
|
|
83
96
|
const initialBranch = await getCurrentBranch(repoPath);
|
|
84
97
|
if (!initialBranch) {
|
|
@@ -101,6 +114,7 @@ exports.safeBashTool = {
|
|
|
101
114
|
cwd: repoPath,
|
|
102
115
|
timeout,
|
|
103
116
|
shell: "/bin/bash",
|
|
117
|
+
env: { ...process.env, ...environmentOverrides },
|
|
104
118
|
});
|
|
105
119
|
stdout = result.stdout;
|
|
106
120
|
stderr = result.stderr;
|
|
@@ -130,14 +144,15 @@ exports.safeBashTool = {
|
|
|
130
144
|
};
|
|
131
145
|
}
|
|
132
146
|
const gitStatus = await getGitStatus(repoPath);
|
|
133
|
-
const
|
|
147
|
+
const changedFiles = getChangedFilesFromGitStatus(gitStatus);
|
|
148
|
+
const validationResult = await (0, validators_1.runValidators)(repoPath, changedFiles);
|
|
134
149
|
return {
|
|
135
150
|
isError: false,
|
|
136
151
|
result: formatResult({
|
|
137
152
|
stdout,
|
|
138
153
|
stderr,
|
|
139
154
|
gitStatus,
|
|
140
|
-
|
|
155
|
+
validationResult,
|
|
141
156
|
}),
|
|
142
157
|
};
|
|
143
158
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-gen-browser.d.ts","sourceRoot":"","sources":["../../src/tools/test-gen-browser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAGV,IAAI,EACL,MAAM,uCAAuC,CAAC;AAkB/C,eAAO,MAAM,4BAA4B,EAAE,
|
|
1
|
+
{"version":3,"file":"test-gen-browser.d.ts","sourceRoot":"","sources":["../../src/tools/test-gen-browser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAGV,IAAI,EACL,MAAM,uCAAuC,CAAC;AAkB/C,eAAO,MAAM,4BAA4B,EAAE,IA2Q1C,CAAC"}
|
|
@@ -21,7 +21,7 @@ const helpers_1 = require("./file-operations/shared/helpers");
|
|
|
21
21
|
exports.generateTestWithBrowserAgent = {
|
|
22
22
|
...test_gen_browser_1.generateTestWithBrowserAgent,
|
|
23
23
|
execute: async ({ input, repoPath, trace, collectArtifacts, environmentOverrides = {}, chatSession, logger, }) => {
|
|
24
|
-
|
|
24
|
+
let { project } = input;
|
|
25
25
|
// Normalize the path to support both /repo/... and relative paths
|
|
26
26
|
const normalizedFilePath = (0, helpers_1.normalizePath)(input.filePath);
|
|
27
27
|
const absoluteFilePath = path_1.default.join(repoPath, normalizedFilePath);
|
|
@@ -32,8 +32,27 @@ exports.generateTestWithBrowserAgent = {
|
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
try {
|
|
35
|
-
const { projects } = await (0, test_run_1.listProjectsAndTests)(repoPath);
|
|
36
|
-
if (!
|
|
35
|
+
const { projects, projectsToTestCases } = await (0, test_run_1.listProjectsAndTests)(repoPath);
|
|
36
|
+
if (!project) {
|
|
37
|
+
const matchingProjects = projects.filter((p) => projectsToTestCases[p]?.some((tc) => normalizedFilePath.endsWith(tc.filePath)));
|
|
38
|
+
if (matchingProjects.length === 1) {
|
|
39
|
+
project = matchingProjects[0];
|
|
40
|
+
logger.info("Auto-selected project", { project });
|
|
41
|
+
}
|
|
42
|
+
else if (matchingProjects.length === 0) {
|
|
43
|
+
return {
|
|
44
|
+
isError: true,
|
|
45
|
+
result: `Could not find any project containing the test file: ${normalizedFilePath}. Valid project names are: ${projects.join(", ")}`,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return {
|
|
50
|
+
isError: true,
|
|
51
|
+
result: `Multiple projects contain this test file: ${matchingProjects.join(", ")}. Please specify one using the 'project' parameter.`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else if (!projects.includes(project)) {
|
|
37
56
|
return {
|
|
38
57
|
isError: true,
|
|
39
58
|
result: `Invalid project name: ${project}. Valid project names are: ${projects.join(", ")}`,
|
|
@@ -96,10 +115,10 @@ exports.generateTestWithBrowserAgent = {
|
|
|
96
115
|
// Running browser agent in headed implies using page.pause method for codegen
|
|
97
116
|
RUN_PLAYWRIGHT_HEADED: "true",
|
|
98
117
|
};
|
|
99
|
-
if (input.
|
|
118
|
+
if (input.envSlug) {
|
|
100
119
|
envOverrides = {
|
|
101
120
|
...envOverrides,
|
|
102
|
-
|
|
121
|
+
ENV_SLUG: input.envSlug,
|
|
103
122
|
};
|
|
104
123
|
}
|
|
105
124
|
const testGenToken = (0, scenarios_1.buildTokenFromOptions)({ name: testName, file: normalizedFilePath }, { useComputerUseAgent: true });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/validators.ts"],"names":[],"mappings":"AAcA,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAgED,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAgC3B"}
|
|
@@ -0,0 +1,93 @@
|
|
|
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.runValidators = runValidators;
|
|
7
|
+
const environments_1 = require("@empiricalrun/shared-types/environments");
|
|
8
|
+
const owners_1 = require("@empiricalrun/shared-types/owners");
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const web_1 = require("../../bin/utils/platform/web");
|
|
13
|
+
function validateOwnersYaml(repoDir) {
|
|
14
|
+
const filePath = path_1.default.join(repoDir, owners_1.OWNERS_FILE_PATH);
|
|
15
|
+
if (!fs_1.default.existsSync(filePath)) {
|
|
16
|
+
return {
|
|
17
|
+
success: false,
|
|
18
|
+
errors: [`OWNERS.yaml file not found at ${owners_1.OWNERS_FILE_PATH}`],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const content = fs_1.default.readFileSync(filePath, "utf8");
|
|
22
|
+
let parsed;
|
|
23
|
+
try {
|
|
24
|
+
parsed = js_yaml_1.default.load(content);
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
return {
|
|
28
|
+
success: false,
|
|
29
|
+
errors: [`Failed to parse OWNERS.yaml: ${e?.message}`],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const result = (0, owners_1.parseOwnersConfig)(parsed);
|
|
33
|
+
if ("errors" in result) {
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
errors: result.errors,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return { success: true, errors: [] };
|
|
40
|
+
}
|
|
41
|
+
function validateEnvironmentsYaml(repoDir) {
|
|
42
|
+
const filePath = path_1.default.join(repoDir, environments_1.ENVIRONMENTS_FILE_PATH);
|
|
43
|
+
if (!fs_1.default.existsSync(filePath)) {
|
|
44
|
+
return {
|
|
45
|
+
success: false,
|
|
46
|
+
errors: [`ENVIRONMENTS.yaml file not found at ${environments_1.ENVIRONMENTS_FILE_PATH}`],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const content = fs_1.default.readFileSync(filePath, "utf8");
|
|
50
|
+
let parsed;
|
|
51
|
+
try {
|
|
52
|
+
parsed = js_yaml_1.default.load(content);
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
return {
|
|
56
|
+
success: false,
|
|
57
|
+
errors: [`Failed to parse ENVIRONMENTS.yaml: ${e?.message}`],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const result = (0, environments_1.parseEnvironmentsConfig)(parsed);
|
|
61
|
+
if ("errors" in result) {
|
|
62
|
+
return {
|
|
63
|
+
success: false,
|
|
64
|
+
errors: result.errors,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return { success: true, errors: [] };
|
|
68
|
+
}
|
|
69
|
+
async function runValidators(repoDir, changedFiles) {
|
|
70
|
+
const allErrors = [];
|
|
71
|
+
const tscResult = await (0, web_1.runTypescriptCompiler)(repoDir);
|
|
72
|
+
if (!tscResult.success) {
|
|
73
|
+
allErrors.push(...tscResult.errors);
|
|
74
|
+
}
|
|
75
|
+
const hasOwnersChange = changedFiles.some((f) => f === owners_1.OWNERS_FILE_PATH || f.endsWith("OWNERS.yaml"));
|
|
76
|
+
if (hasOwnersChange) {
|
|
77
|
+
const ownersResult = validateOwnersYaml(repoDir);
|
|
78
|
+
if (!ownersResult.success) {
|
|
79
|
+
allErrors.push(...ownersResult.errors);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const hasEnvironmentsChange = changedFiles.some((f) => f === environments_1.ENVIRONMENTS_FILE_PATH || f.endsWith("ENVIRONMENTS.yaml"));
|
|
83
|
+
if (hasEnvironmentsChange) {
|
|
84
|
+
const environmentsResult = validateEnvironmentsYaml(repoDir);
|
|
85
|
+
if (!environmentsResult.success) {
|
|
86
|
+
allErrors.push(...environmentsResult.errors);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
success: allErrors.length === 0,
|
|
91
|
+
errors: allErrors,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/video-core/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/video-core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,cAAc,EACd,KAAK,EACN,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,WAAW,CAAC;AAgBnB,KAAK,eAAe,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,EACrC,GAAG,EACH,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,UAAU,EACV,MAAM,GACP,EAAE,eAAe;;;;;GA0IjB"}
|
package/dist/video-core/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.runVideoAnalysis = runVideoAnalysis;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
4
5
|
const videostil_1 = require("videostil");
|
|
5
6
|
const constants_1 = require("../constants");
|
|
6
7
|
const model_limits_1 = require("./model-limits");
|
|
@@ -98,6 +99,10 @@ async function runVideoAnalysis({ url, videoHash, params, workingDirectory, skip
|
|
|
98
99
|
await Promise.all(uploadPromises);
|
|
99
100
|
}
|
|
100
101
|
const usage = (0, utils_1.aggregateUsageFromMessages)(allMessages);
|
|
102
|
+
// Clean up local working directory (frames are already in memory / uploaded)
|
|
103
|
+
await node_fs_1.promises
|
|
104
|
+
.rm(workingDirectory, { recursive: true, force: true })
|
|
105
|
+
.catch(() => { });
|
|
101
106
|
return {
|
|
102
107
|
result,
|
|
103
108
|
error: finalError,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@empiricalrun/test-gen",
|
|
3
|
-
"version": "0.79.
|
|
3
|
+
"version": "0.79.6",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org/",
|
|
6
6
|
"access": "public"
|
|
@@ -10,10 +10,6 @@
|
|
|
10
10
|
},
|
|
11
11
|
"main": "dist/index.js",
|
|
12
12
|
"exports": {
|
|
13
|
-
"./agent/master/run": {
|
|
14
|
-
"types": "./dist/agent/master/run.d.ts",
|
|
15
|
-
"default": "./dist/agent/master/run.js"
|
|
16
|
-
},
|
|
17
13
|
"./chat": {
|
|
18
14
|
"types": "./dist/agent/chat/exports.d.ts",
|
|
19
15
|
"default": "./dist/agent/chat/exports.js"
|
|
@@ -73,6 +69,7 @@
|
|
|
73
69
|
"dotenv": "^16.4.5",
|
|
74
70
|
"express": "^4.19.2",
|
|
75
71
|
"ignore": "^5.3.1",
|
|
72
|
+
"js-yaml": "^4.1.0",
|
|
76
73
|
"inquirer": "^12.4.2",
|
|
77
74
|
"istextorbinary": "^9.5.0",
|
|
78
75
|
"lodash.isequal": "^4.5.0",
|
|
@@ -80,7 +77,7 @@
|
|
|
80
77
|
"minimatch": "^10.0.1",
|
|
81
78
|
"nanoid": "^5.0.7",
|
|
82
79
|
"open": "^10.1.2",
|
|
83
|
-
"openai": "^6.
|
|
80
|
+
"openai": "^6.27.0",
|
|
84
81
|
"ora": "^8.1.0",
|
|
85
82
|
"picocolors": "^1.0.1",
|
|
86
83
|
"pixelmatch": "^6.0.0",
|
|
@@ -92,14 +89,15 @@
|
|
|
92
89
|
"typescript": "^5.3.3",
|
|
93
90
|
"zod": "^4.0.1",
|
|
94
91
|
"@empiricalrun/ast-parser": "^0.0.10",
|
|
95
|
-
"@empiricalrun/cua": "^0.
|
|
92
|
+
"@empiricalrun/cua": "^0.3.0",
|
|
96
93
|
"@empiricalrun/dashboard-client": "^0.2.0",
|
|
97
|
-
"@empiricalrun/
|
|
94
|
+
"@empiricalrun/shared-types": "0.12.1",
|
|
95
|
+
"@empiricalrun/llm": "^0.26.0",
|
|
98
96
|
"@empiricalrun/r2-uploader": "^0.9.1",
|
|
99
97
|
"@empiricalrun/trace-utils": "^0.1.0",
|
|
100
98
|
"@empiricalrun/reporter": "^0.27.0",
|
|
101
99
|
"@empiricalrun/test-run": "^0.14.2",
|
|
102
|
-
"videostil": "0.3.
|
|
100
|
+
"videostil": "0.3.5"
|
|
103
101
|
},
|
|
104
102
|
"devDependencies": {
|
|
105
103
|
"@playwright/test": "1.57.0",
|
|
@@ -108,6 +106,7 @@
|
|
|
108
106
|
"@types/detect-port": "^1.3.5",
|
|
109
107
|
"@types/express": "^4.17.21",
|
|
110
108
|
"@types/js-levenshtein": "^1.1.3",
|
|
109
|
+
"@types/js-yaml": "^4.0.9",
|
|
111
110
|
"@types/lodash.isequal": "^4.5.8",
|
|
112
111
|
"@types/mime": "3.0.0",
|
|
113
112
|
"@types/node": "^24.3.0",
|
|
@@ -116,8 +115,7 @@
|
|
|
116
115
|
"js-levenshtein": "^1.1.6",
|
|
117
116
|
"playwright": "1.57.0",
|
|
118
117
|
"serve-handler": "^6.1.6",
|
|
119
|
-
"ts-patch": "^3.3.0"
|
|
120
|
-
"@empiricalrun/shared-types": "0.12.0"
|
|
118
|
+
"ts-patch": "^3.3.0"
|
|
121
119
|
},
|
|
122
120
|
"scripts": {
|
|
123
121
|
"dev": "tspc --build --watch",
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./src/index.ts","./src/logger.ts","./src/actions/assert.ts","./src/actions/click.ts","./src/actions/done.ts","./src/actions/fill.ts","./src/actions/goto.ts","./src/actions/hover.ts","./src/actions/index.ts","./src/actions/next-task.ts","./src/actions/press.ts","./src/actions/text-content.ts","./src/actions/constants/index.ts","./src/actions/utils/index.ts","./src/agent/cli.ts","./src/agent/index.ts","./src/agent/base/index.ts","./src/agent/browsing/index.ts","./src/agent/browsing/run.ts","./src/agent/browsing/utils.ts","./src/agent/chat/agent-loop.ts","./src/agent/chat/exports.ts","./src/agent/chat/index.ts","./src/agent/chat/models.ts","./src/agent/chat/state.ts","./src/agent/chat/types.ts","./src/agent/chat/utils.ts","./src/agent/chat/prompt/pw-utils-docs.ts","./src/agent/chat/prompt/repo.ts","./src/agent/chat/prompt/test-case-def.ts","./src/agent/chat/prompt/trace-utils-docs.ts","./src/agent/code-review/index.ts","./src/agent/code-review/types.ts","./src/agent/code-review/xml-parser.ts","./src/agent/code-review/executor/index.ts","./src/agent/fast-triage/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/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/planner/run-time-planner.ts","./src/agent/planner/run.ts","./src/agent/triage/index.ts","./src/artifacts/index.ts","./src/artifacts/utils.ts","./src/auth/cli-auth.ts","./src/auth/index.ts","./src/auth/token-store.ts","./src/bin/
|
|
1
|
+
{"root":["./src/index.ts","./src/logger.ts","./src/actions/assert.ts","./src/actions/click.ts","./src/actions/done.ts","./src/actions/fill.ts","./src/actions/goto.ts","./src/actions/hover.ts","./src/actions/index.ts","./src/actions/next-task.ts","./src/actions/press.ts","./src/actions/text-content.ts","./src/actions/constants/index.ts","./src/actions/utils/index.ts","./src/agent/cli.ts","./src/agent/index.ts","./src/agent/base/index.ts","./src/agent/browsing/index.ts","./src/agent/browsing/run.ts","./src/agent/browsing/utils.ts","./src/agent/chat/agent-loop.ts","./src/agent/chat/exports.ts","./src/agent/chat/index.ts","./src/agent/chat/models.ts","./src/agent/chat/state.ts","./src/agent/chat/types.ts","./src/agent/chat/utils.ts","./src/agent/chat/prompt/pw-utils-docs.ts","./src/agent/chat/prompt/repo.ts","./src/agent/chat/prompt/test-case-def.ts","./src/agent/chat/prompt/trace-utils-docs.ts","./src/agent/code-review/index.ts","./src/agent/code-review/types.ts","./src/agent/code-review/xml-parser.ts","./src/agent/code-review/executor/index.ts","./src/agent/fast-triage/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/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/planner/run-time-planner.ts","./src/agent/planner/run.ts","./src/agent/triage/index.ts","./src/artifacts/index.ts","./src/artifacts/utils.ts","./src/auth/cli-auth.ts","./src/auth/index.ts","./src/auth/token-store.ts","./src/bin/index.ts","./src/bin/setup.ts","./src/bin/logger/index.ts","./src/bin/utils/context.ts","./src/bin/utils/index.ts","./src/bin/utils/fs/index.ts","./src/bin/utils/platform/web/index.ts","./src/bin/utils/platform/web/test-files/ts-path-import-validate.ts","./src/bin/utils/scenarios/index.ts","./src/browser-injected-scripts/annotate-elements.spec.ts","./src/constants/index.ts","./src/dashboard/client.ts","./src/dashboard/index.ts","./src/dashboard/tool-response-from-sandbox.ts","./src/dashboard/tool-response.ts","./src/dashboard/totp.ts","./src/dashboard/types.ts","./src/errors/index.ts","./src/file/client.ts","./src/file/server.ts","./src/file-info/index.ts","./src/file-info/adapters/file-system/index.ts","./src/file-info/adapters/file-system/reader.ts","./src/file-info/adapters/github/index.ts","./src/file-info/adapters/github/reader.ts","./src/generate-summary/frame-sampling.ts","./src/generate-summary/generate-error-stack-summary.ts","./src/generate-summary/generate-failed-step-screenshot-diff-summary.ts","./src/generate-summary/generate-grouped-summary.ts","./src/generate-summary/merge-summary.ts","./src/generate-summary/pick-videos-for-comparison.ts","./src/human-in-the-loop/cli.ts","./src/human-in-the-loop/index.ts","./src/human-in-the-loop/ipc.ts","./src/page/index.ts","./src/prompts/lib/ts-transformer.ts","./src/recorder/env-variables.ts","./src/recorder/index.ts","./src/recorder/request.ts","./src/recorder/temp-files.ts","./src/recorder/upload.ts","./src/recorder/validation.ts","./src/telemetry/index.ts","./src/test-build/index.ts","./src/tools/diagnosis-fetcher.ts","./src/tools/index.ts","./src/tools/list-environments.ts","./src/tools/run-test.ts","./src/tools/test-gen-browser.ts","./src/tools/analyse-video/index.ts","./src/tools/api-client/index.ts","./src/tools/create-pull-request/index.ts","./src/tools/create-pull-request/utils.ts","./src/tools/definitions/analyse-video.ts","./src/tools/definitions/delete-file.ts","./src/tools/definitions/download-build.ts","./src/tools/definitions/grep.ts","./src/tools/definitions/list-tests-and-projects.ts","./src/tools/definitions/merge-conflicts.ts","./src/tools/definitions/publish-markdown-report.ts","./src/tools/definitions/rename-file.ts","./src/tools/definitions/run-test.ts","./src/tools/definitions/safe-bash.ts","./src/tools/definitions/str_replace_editor.ts","./src/tools/definitions/test-gen-browser.ts","./src/tools/definitions/trace-dot-zip.ts","./src/tools/definitions/utils.ts","./src/tools/delete-file/index.ts","./src/tools/download-build/index.ts","./src/tools/executor/base.ts","./src/tools/executor/index.ts","./src/tools/executor/types.ts","./src/tools/executor/utils/checkpoint.ts","./src/tools/executor/utils/git.ts","./src/tools/executor/utils/index.ts","./src/tools/executor/utils/pr-description.ts","./src/tools/fetch-file/index.ts","./src/tools/fetch-file/utils.ts","./src/tools/fetch-session-diff/index.ts","./src/tools/file-operations/create.ts","./src/tools/file-operations/index.ts","./src/tools/file-operations/insert.ts","./src/tools/file-operations/replace.ts","./src/tools/file-operations/shared/helpers.ts","./src/tools/file-operations/view/index.ts","./src/tools/firecrawl-scrape/index.ts","./src/tools/grep/index.ts","./src/tools/grep/types.ts","./src/tools/grep/ripgrep/index.ts","./src/tools/issues-v1/index.ts","./src/tools/issues-v1/list-issues.ts","./src/tools/issues-v1/utils.ts","./src/tools/issues-v2/create-issue.ts","./src/tools/issues-v2/set-issue-description.ts","./src/tools/issues-v2/update-issue.ts","./src/tools/list-tests-and-projects/index.ts","./src/tools/merge-conflicts/index.ts","./src/tools/publish-markdown-report/index.ts","./src/tools/rename-file/index.ts","./src/tools/safe-bash/index.ts","./src/tools/test-run-fetcher/index.ts","./src/tools/test-run-fetcher/types.ts","./src/tools/trace-dot-zip/index.ts","./src/tools/trace-dot-zip/types.ts","./src/tools/trace-dot-zip/utils/console-trace.ts","./src/tools/trace-dot-zip/utils/extract-screenshots.ts","./src/tools/trace-dot-zip/utils/extract-steps.ts","./src/tools/trace-dot-zip/utils/extract-zip.ts","./src/tools/trace-dot-zip/utils/network-trace.ts","./src/tools/triage-summary/index.ts","./src/tools/triage-summary/types.ts","./src/tools/triage-summary/utils.ts","./src/tools/utils/queue.ts","./src/tools/utils/validate-schema.ts","./src/tools/utils/validators.ts","./src/types/handlebars.d.ts","./src/types/index.ts","./src/utils/SQSClient.ts","./src/utils/env.ts","./src/utils/exec.ts","./src/utils/file.ts","./src/utils/hash.ts","./src/utils/html.ts","./src/utils/index.ts","./src/utils/json.ts","./src/utils/model.ts","./src/utils/playwright-test-id.ts","./src/utils/repo-tree.ts","./src/utils/slug.ts","./src/utils/string.ts","./src/utils/stripAnsi.ts","./src/utils/url-validation.ts","./src/utils/dedup/dedup-image.ts","./src/utils/dedup/find-threshold.ts","./src/video-core/index.ts","./src/video-core/model-limits.ts","./src/video-core/storage-manager.ts","./src/video-core/types.ts","./src/video-core/utils.ts"],"version":"5.8.3"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { IDashboardAPIClient } from "@empiricalrun/shared-types/api/base";
|
|
2
|
-
export declare function listEnvironments({ apiClient, repoPath: repoDir, }: {
|
|
3
|
-
repoPath: string;
|
|
4
|
-
apiClient: IDashboardAPIClient;
|
|
5
|
-
}): Promise<void>;
|
|
6
|
-
//# sourceMappingURL=environments.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"environments.d.ts","sourceRoot":"","sources":["../../src/bin/environments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAkE/E,wBAAsB,gBAAgB,CAAC,EACrC,SAAS,EACT,QAAQ,EAAE,OAAO,GAClB,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,mBAAmB,CAAC;CAChC,iBAiDA"}
|
package/dist/bin/environments.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.listEnvironments = listEnvironments;
|
|
4
|
-
const test_run_1 = require("@empiricalrun/test-run");
|
|
5
|
-
const validation_1 = require("../recorder/validation");
|
|
6
|
-
async function getMatchingPlaywrightProjects(patterns, repoDir) {
|
|
7
|
-
if (patterns.length === 0) {
|
|
8
|
-
return [];
|
|
9
|
-
}
|
|
10
|
-
try {
|
|
11
|
-
// Use test-run's existing logic that handles comma-separated values and all patterns
|
|
12
|
-
return await (0, test_run_1.generateProjectFilters)({
|
|
13
|
-
platform: test_run_1.Platform.WEB,
|
|
14
|
-
filteringSets: patterns,
|
|
15
|
-
repoDir,
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
catch (error) {
|
|
19
|
-
console.warn("Warning: Could not match Playwright projects:", error);
|
|
20
|
-
return [];
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
function printLatestBuild(latestBuild) {
|
|
24
|
-
if (!latestBuild) {
|
|
25
|
-
console.log(` └─ No builds available`);
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
console.log("");
|
|
29
|
-
const commit = latestBuild.commit
|
|
30
|
-
? latestBuild.commit.substring(0, 7)
|
|
31
|
-
: "N/A";
|
|
32
|
-
const branch = latestBuild.branch || "N/A";
|
|
33
|
-
// Calculate relative time
|
|
34
|
-
const createdAt = new Date(latestBuild.created_at);
|
|
35
|
-
const now = new Date();
|
|
36
|
-
const diffMs = now.getTime() - createdAt.getTime();
|
|
37
|
-
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
|
|
38
|
-
const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
|
|
39
|
-
const diffMinutes = Math.floor(diffMs / (1000 * 60));
|
|
40
|
-
let timeAgo;
|
|
41
|
-
if (diffDays > 0) {
|
|
42
|
-
timeAgo = `${diffDays} day${diffDays > 1 ? "s" : ""} ago`;
|
|
43
|
-
}
|
|
44
|
-
else if (diffHours > 0) {
|
|
45
|
-
timeAgo = `${diffHours} hour${diffHours > 1 ? "s" : ""} ago`;
|
|
46
|
-
}
|
|
47
|
-
else if (diffMinutes > 0) {
|
|
48
|
-
timeAgo = `${diffMinutes} minute${diffMinutes > 1 ? "s" : ""} ago`;
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
timeAgo = "Just now";
|
|
52
|
-
}
|
|
53
|
-
console.log(` ┌─ Latest build`);
|
|
54
|
-
console.log(` │ Commit: ${commit}`);
|
|
55
|
-
console.log(` │ Branch: ${branch}`);
|
|
56
|
-
console.log(` │ Created: ${timeAgo}`);
|
|
57
|
-
console.log(` │ URL: ${latestBuild.build_url}`);
|
|
58
|
-
console.log(` └─`);
|
|
59
|
-
}
|
|
60
|
-
async function listEnvironments({ apiClient, repoPath: repoDir, }) {
|
|
61
|
-
try {
|
|
62
|
-
let repoName = await (0, validation_1.validatePackageJson)(repoDir);
|
|
63
|
-
const data = await apiClient.request(`/api/environments/list`, {
|
|
64
|
-
method: "GET",
|
|
65
|
-
params: { project_repo_name: repoName },
|
|
66
|
-
});
|
|
67
|
-
if (data.data?.environments && data.data.environments.length > 0) {
|
|
68
|
-
const environments = data.data.environments;
|
|
69
|
-
for (const env of environments) {
|
|
70
|
-
const envIndex = environments.indexOf(env);
|
|
71
|
-
if (envIndex > 0) {
|
|
72
|
-
console.log("");
|
|
73
|
-
}
|
|
74
|
-
console.log(`Environment: ${env.name}`);
|
|
75
|
-
console.log(` Slug: ${env.slug}`);
|
|
76
|
-
if (env.playwright_projects && env.playwright_projects.length > 0) {
|
|
77
|
-
const matchingProjects = await getMatchingPlaywrightProjects(env.playwright_projects, repoDir);
|
|
78
|
-
if (matchingProjects.length > 0) {
|
|
79
|
-
console.log(` Playwright Projects: ${matchingProjects.join(", ")}`);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
console.log(` Playwright Projects: No matches found for patterns: ${env.playwright_projects.join(", ")}`);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
console.log(` Playwright Projects: None`);
|
|
87
|
-
}
|
|
88
|
-
printLatestBuild(env.latest_build);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
console.log(`No environments found for repository: ${repoName}`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
console.error("❌ Error fetching environments:", error.message);
|
|
97
|
-
process.exit(1);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { ToolDefinition } from "@empiricalrun/shared-types/chat-agent";
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
export declare const packageSpecSchema: z.ZodObject<{
|
|
4
|
-
name: z.ZodString;
|
|
5
|
-
version: z.ZodString;
|
|
6
|
-
}, z.core.$strip>;
|
|
7
|
-
export declare const upgradePackagesSchema: z.ZodObject<{
|
|
8
|
-
packages: z.ZodArray<z.ZodObject<{
|
|
9
|
-
name: z.ZodString;
|
|
10
|
-
version: z.ZodString;
|
|
11
|
-
}, z.core.$strip>>;
|
|
12
|
-
}, z.core.$strip>;
|
|
13
|
-
export declare const upgradePackagesTool: ToolDefinition;
|
|
14
|
-
//# sourceMappingURL=upgrade-packages.d.ts.map
|