@empiricalrun/test-gen 0.80.2 → 0.81.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.
- package/CHANGELOG.md +25 -0
- package/dist/agent/chat/index.d.ts.map +1 -1
- package/dist/agent/chat/index.js +1 -9
- package/dist/agent/chat/prompt/pw-utils-docs.d.ts +1 -1
- package/dist/agent/chat/prompt/pw-utils-docs.d.ts.map +1 -1
- package/dist/agent/chat/prompt/pw-utils-docs.js +0 -56
- package/dist/agent/chat/prompt/skills.d.ts +1 -2
- package/dist/agent/chat/prompt/skills.d.ts.map +1 -1
- package/dist/agent/chat/prompt/skills.js +34 -20
- package/dist/recorder/index.d.ts.map +1 -1
- package/dist/recorder/index.js +5 -3
- package/dist/tools/diagnosis-fetcher.d.ts +6 -2
- package/dist/tools/diagnosis-fetcher.d.ts.map +1 -1
- package/dist/tools/diagnosis-fetcher.js +1 -1
- package/dist/tools/executor/index.d.ts.map +1 -1
- package/dist/tools/executor/index.js +0 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -1
- package/dist/tools/run-test.js +2 -2
- package/dist/tools/test-run-fetcher/index.d.ts.map +1 -1
- package/package.json +8 -8
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/tools/slack-message/index.d.ts +0 -3
- package/dist/tools/slack-message/index.d.ts.map +0 -1
- package/dist/tools/slack-message/index.js +0 -69
- package/dist/tools/test-run-fetcher/types.d.ts +0 -79
- package/dist/tools/test-run-fetcher/types.d.ts.map +0 -1
- package/dist/tools/test-run-fetcher/types.js +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# @empiricalrun/test-gen
|
|
2
2
|
|
|
3
|
+
## 0.81.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 6fb8170: feat: playwright utils upgraded to use new core
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [6fb8170]
|
|
12
|
+
- Updated dependencies [aa78c40]
|
|
13
|
+
- @empiricalrun/cua@0.4.0
|
|
14
|
+
- @empiricalrun/reporter@0.29.0
|
|
15
|
+
- @empiricalrun/shared-types@0.13.0
|
|
16
|
+
- @empiricalrun/test-run@0.17.0
|
|
17
|
+
- @empiricalrun/dashboard-client@0.3.0
|
|
18
|
+
- @empiricalrun/llm@0.26.0
|
|
19
|
+
- videostil@0.3.5
|
|
20
|
+
|
|
21
|
+
## 0.80.3
|
|
22
|
+
|
|
23
|
+
### Patch Changes
|
|
24
|
+
|
|
25
|
+
- Updated dependencies [12b14e5]
|
|
26
|
+
- @empiricalrun/dashboard-client@0.3.0
|
|
27
|
+
|
|
3
28
|
## 0.80.2
|
|
4
29
|
|
|
5
30
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAoBpE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAOpC,qBAAa,SAAS,CAAC,CAAC,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAC5C,SAAS,CAAC,QAAQ,IAAI,WAAW;IA2B3B,iBAAiB,CACrB,eAAe,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,GACvC,OAAO,CAAC,MAAM,CAAC;CA2GnB"}
|
package/dist/agent/chat/index.js
CHANGED
|
@@ -2,15 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ChatAgent = void 0;
|
|
4
4
|
const tools_1 = require("../../tools");
|
|
5
|
-
const api_client_1 = require("../../tools/api-client");
|
|
6
5
|
const analyse_video_1 = require("../../tools/definitions/analyse-video");
|
|
7
6
|
const grep_1 = require("../../tools/definitions/grep");
|
|
8
7
|
const list_tests_and_projects_1 = require("../../tools/definitions/list-tests-and-projects");
|
|
9
8
|
const run_test_1 = require("../../tools/definitions/run-test");
|
|
10
|
-
const test_gen_browser_1 = require("../../tools/definitions/test-gen-browser");
|
|
11
9
|
const diagnosis_fetcher_1 = require("../../tools/diagnosis-fetcher");
|
|
12
10
|
const fetch_file_1 = require("../../tools/fetch-file");
|
|
13
|
-
const slack_message_1 = require("../../tools/slack-message");
|
|
14
11
|
const base_1 = require("../base");
|
|
15
12
|
const pw_utils_docs_1 = require("./prompt/pw-utils-docs");
|
|
16
13
|
const repo_1 = require("./prompt/repo");
|
|
@@ -19,14 +16,11 @@ const test_case_def_1 = require("./prompt/test-case-def");
|
|
|
19
16
|
const trace_utils_docs_1 = require("./prompt/trace-utils-docs");
|
|
20
17
|
class ChatAgent extends base_1.BaseAgent {
|
|
21
18
|
getTools() {
|
|
22
|
-
const hasSlackTool = this.featureFlags.includes("has_slack_tool");
|
|
23
|
-
const hasSkills = this.featureFlags.includes("useSkills");
|
|
24
19
|
const hasAnalyseVideoTool = this.featureFlags.includes("has_analyse_video_tool");
|
|
25
20
|
const custom = [
|
|
26
21
|
...(hasAnalyseVideoTool ? [analyse_video_1.analyseVideo] : []),
|
|
27
22
|
run_test_1.runTestTool,
|
|
28
23
|
grep_1.grepTool,
|
|
29
|
-
...(hasSlackTool ? [slack_message_1.slackMessageTool] : []),
|
|
30
24
|
fetch_file_1.fetchFileTool,
|
|
31
25
|
list_tests_and_projects_1.listProjectsTool,
|
|
32
26
|
list_tests_and_projects_1.listTestsForProjectTool,
|
|
@@ -35,7 +29,6 @@ class ChatAgent extends base_1.BaseAgent {
|
|
|
35
29
|
tools_1.safeBashTool,
|
|
36
30
|
...(!(0, tools_1.hasBuiltInWebFetch)(this.selectedModel) ? [tools_1.scrapeHtmlTool] : []),
|
|
37
31
|
...tools_1.testGenerationToolsWithoutBrowserAgent,
|
|
38
|
-
...(!hasSkills ? [api_client_1.apiClientTool, test_gen_browser_1.generateTestWithBrowserAgent] : []),
|
|
39
32
|
];
|
|
40
33
|
return {
|
|
41
34
|
custom,
|
|
@@ -48,8 +41,7 @@ class ChatAgent extends base_1.BaseAgent {
|
|
|
48
41
|
async buildSystemPrompt(repoInfoBuilder) {
|
|
49
42
|
const repoInfo = await repoInfoBuilder();
|
|
50
43
|
const repoContext = await (0, repo_1.getRepoContextPrompt)(repoInfo);
|
|
51
|
-
const
|
|
52
|
-
const skillsInToolsPrompt = hasSkills ? skills_1.skillsToolsPrompt : "";
|
|
44
|
+
const skillsInToolsPrompt = await (0, skills_1.getSkillsToolsPrompt)(this.workerEnv?.HIVE_API_KEY);
|
|
53
45
|
const preamble = `
|
|
54
46
|
You are a helpful assistant that can answer questions and help with tasks related to writing and maintaining Playwright tests.
|
|
55
47
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const playwrightUtilsDocs = "\nYou can refer to the following recipes to learn how to write or diagnose tests for different scenarios.\n\n<
|
|
1
|
+
export declare const playwrightUtilsDocs = "\nYou can refer to the following recipes to learn how to write or diagnose tests for different scenarios.\n\n<fixtures>\n\nThe playwright-utils package provides fixtures that wrap around Playwright's built-in\n`page`, `context` fixtures to provide a mouse highlighter (which makes it easier to\nsee actions taken in a video).\n\nTo use this, you can use the `baseTestFixture` and `extendExpect` imports\nin your fixtures file.\n\n```ts\nimport { test as base, expect as baseExpect } from \"@playwright/test\";\nimport { baseTestFixture, extendExpect } from \"@empiricalrun/playwright-utils/test\";\n\nexport const test = baseTestFixture(base);\nexport const expect = extendExpect(baseExpect);\n```\n\n### Get a new browser context\n\nThis package provides a fixture `customContextPageProvider` which is a good way to create\na fresh, new browser context, and a page inside it.\n\nThere are two benefits of using this to create contexts or pages:\n1. Videos get recorded and attached to the test report\n2. Mouse highlights are available\n\n```ts\nimport { test, expect } from \"./fixtures\";\n\ntest(\"Example test\", async ({ page: builtInPage, customContextPageProvider }) => {\n // builtInPage is from default browser context\n const { page: newPage, context } = await customContextPageProvider();\n // newPage is from this other browser context\n});\n```\n\ncustomContextPageProvider can accept options to customize the browser context.\n\n```\n customContextPageProvider: (\n options?: BrowserContextOptions,\n ) => Promise<{ context: BrowserContext; page: Page }>;\n```\n\nFor example, pass { storageState: undefined } to create a new browser context without\nthe auth state of the current browser context. This is useful for multi-user scenarios.\n\n</fixtures>\n\n<video-labels>\n\n# Video Labels\n\nPages generate video recordings after test execution, with 1 page generating 1 video file (webm). \n\nIf your test case relies on multiple pages (e.g. for multi-user or multi-app flows), it can get difficult to\nknow which page does \"video-1.webm\" belong to.\n\nTo solve this, you should set video labels for pages. This will enable you to identify videos faster.\n\n## Usage\n\n```typescript\nimport { setVideoLabel } from '@empiricalrun/playwright-utils/test';\n\ntest('my test', async ({ page }) => {\n setVideoLabel(page, 'checkout-flow');\n // Video will be saved as 'checkout-flow.webm'\n});\n```\n\n## Multiple Contexts\n\n```typescript\ntest('multi-user scenario', async ({ page, customContextPageProvider }) => {\n setVideoLabel(page, 'host-page');\n\n const { page: guestPage } = await customContextPageProvider({ storageState: undefined });\n setVideoLabel(guestPage, 'guest-page');\n // Videos saved as 'guest-page.webm' and 'host-page.webm'\n});\n```\n\n## Notes\n\n- The default behavior is to label videos for multiple pages as: `video-0.webm`, `video-1.webm`, etc.\n- If setVideoLabel is called twice for the same page, the last label will be set\n\n</video-labels>\n\n";
|
|
2
2
|
//# sourceMappingURL=pw-utils-docs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pw-utils-docs.d.ts","sourceRoot":"","sources":["../../../../src/agent/chat/prompt/pw-utils-docs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pw-utils-docs.d.ts","sourceRoot":"","sources":["../../../../src/agent/chat/prompt/pw-utils-docs.ts"],"names":[],"mappings":"AAuFA,eAAO,MAAM,mBAAmB,s8FAW/B,CAAC"}
|
|
@@ -1,58 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.playwrightUtilsDocs = void 0;
|
|
4
|
-
// Ref: packages/playwright-utils/docs/email.md
|
|
5
|
-
const emailRecipe = `
|
|
6
|
-
# Email automation
|
|
7
|
-
|
|
8
|
-
## Example usage
|
|
9
|
-
|
|
10
|
-
### Dynamic email
|
|
11
|
-
|
|
12
|
-
This dynamically generates a random email address that can
|
|
13
|
-
be used for the test (e.g. invite a new user).
|
|
14
|
-
|
|
15
|
-
\`\`\`ts
|
|
16
|
-
import { EmailClient } from "@empiricalrun/playwright-utils";
|
|
17
|
-
import { expect } from "@playwright/test";
|
|
18
|
-
|
|
19
|
-
const client = new EmailClient();
|
|
20
|
-
const address = client.getAddress();
|
|
21
|
-
|
|
22
|
-
// Input the \`address\` in the application
|
|
23
|
-
// that sends the email.
|
|
24
|
-
|
|
25
|
-
// Get email received on the \`address\`
|
|
26
|
-
const email = await client.waitForEmail();
|
|
27
|
-
expect(
|
|
28
|
-
email.links.find((l) => l.text === "Join your team")
|
|
29
|
-
).toBeTruthy();
|
|
30
|
-
\`\`\`
|
|
31
|
-
|
|
32
|
-
### Static email
|
|
33
|
-
|
|
34
|
-
This uses a known (static) email that can be used to login
|
|
35
|
-
into an application.
|
|
36
|
-
|
|
37
|
-
This needs an email id (e.g. \`test-login-user\`). The email id
|
|
38
|
-
is appended with the domain (managed internally) to get the full
|
|
39
|
-
email address.
|
|
40
|
-
|
|
41
|
-
\`\`\`ts
|
|
42
|
-
import { EmailClient } from "@empiricalrun/playwright-utils";
|
|
43
|
-
|
|
44
|
-
const emailId = \`test-login-user\`;
|
|
45
|
-
|
|
46
|
-
const client = new EmailClient({ emailId });
|
|
47
|
-
const address = client.getAddress(); // Returns full address with domain
|
|
48
|
-
|
|
49
|
-
// Get email received on the \`address\`
|
|
50
|
-
const email = await client.waitForEmail();
|
|
51
|
-
|
|
52
|
-
// Get login OTP
|
|
53
|
-
const loginCode = email.codes[0];
|
|
54
|
-
\`\`\`
|
|
55
|
-
`;
|
|
56
4
|
// Ref: packages/playwright-utils/docs/fixtures.md
|
|
57
5
|
const fixturesRecipe = `
|
|
58
6
|
The playwright-utils package provides fixtures that wrap around Playwright's built-in
|
|
@@ -141,10 +89,6 @@ test('multi-user scenario', async ({ page, customContextPageProvider }) => {
|
|
|
141
89
|
exports.playwrightUtilsDocs = `
|
|
142
90
|
You can refer to the following recipes to learn how to write or diagnose tests for different scenarios.
|
|
143
91
|
|
|
144
|
-
<email-automation>
|
|
145
|
-
${emailRecipe}
|
|
146
|
-
</email-automation>
|
|
147
|
-
|
|
148
92
|
<fixtures>
|
|
149
93
|
${fixturesRecipe}
|
|
150
94
|
</fixtures>
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
export declare
|
|
2
|
-
export declare const skillsProactivenessPrompt = "\nIf your listed tools don't seem sufficient for a task, load a relevant skill file using the bash tool to learn how to accomplish the task with your existing tools.\n";
|
|
1
|
+
export declare function getSkillsToolsPrompt(hiveApiKey?: string): Promise<string>;
|
|
3
2
|
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../../src/agent/chat/prompt/skills.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../../src/agent/chat/prompt/skills.ts"],"names":[],"mappings":"AAiEA,wBAAsB,oBAAoB,CACxC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAGjB"}
|
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
];
|
|
3
|
+
exports.getSkillsToolsPrompt = getSkillsToolsPrompt;
|
|
4
|
+
const HIVE_URL = process.env.HIVE_URL || "https://hive.empirical.run";
|
|
5
|
+
async function fetchSkillCatalog(hiveApiKey) {
|
|
6
|
+
const apiKey = hiveApiKey || process.env.HIVE_API_KEY;
|
|
7
|
+
if (!apiKey) {
|
|
8
|
+
console.warn("[skills] HIVE_API_KEY not set, no skills available");
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
const res = await fetch(`${HIVE_URL}/api/skills`, {
|
|
12
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
13
|
+
});
|
|
14
|
+
if (!res.ok) {
|
|
15
|
+
console.error(`[skills] Failed to fetch skill catalog: ${res.status} ${res.statusText}`);
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
const { data } = (await res.json());
|
|
19
|
+
return data.map((s) => ({
|
|
20
|
+
name: s.name,
|
|
21
|
+
description: s.description || "",
|
|
22
|
+
location: `/opt/skills/${s.name}/SKILL.md`,
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
16
25
|
const skillToXml = (s) => {
|
|
17
26
|
return `<skill>
|
|
18
27
|
<name>${s.name}</name>
|
|
@@ -20,17 +29,22 @@ const skillToXml = (s) => {
|
|
|
20
29
|
<location>${s.location}</location>
|
|
21
30
|
</skill>`;
|
|
22
31
|
};
|
|
23
|
-
|
|
24
|
-
|
|
32
|
+
function buildSkillsPrompt(skills) {
|
|
33
|
+
if (skills.length === 0)
|
|
34
|
+
return "";
|
|
35
|
+
const catalogXml = `<available_skills>
|
|
36
|
+
${skills.map(skillToXml).join("\n")}
|
|
25
37
|
</available_skills>`;
|
|
26
|
-
|
|
38
|
+
return `
|
|
27
39
|
You have access to **skill files** — documentation that teaches you how to accomplish tasks using your existing safeBash tool.
|
|
28
40
|
Skills are NOT callable functions. To use a skill, read its file with bash, then follow the instructions inside.
|
|
29
41
|
|
|
30
|
-
${
|
|
42
|
+
${catalogXml}
|
|
31
43
|
|
|
32
44
|
To use a skill: run \`cat <location>\` using the bash tool, then follow the instructions in the output.
|
|
33
45
|
`;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
46
|
+
}
|
|
47
|
+
async function getSkillsToolsPrompt(hiveApiKey) {
|
|
48
|
+
const skills = await fetchSkillCatalog(hiveApiKey);
|
|
49
|
+
return buildSkillsPrompt(skills);
|
|
50
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recorder/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recorder/index.ts"],"names":[],"mappings":"AAuEA,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB;AAiUD,wBAAsB,WAAW,CAAC,EAChC,QAAQ,EACR,OAAO,EACP,GAAG,GACJ,EAAE,kBAAkB,iBAGpB"}
|
package/dist/recorder/index.js
CHANGED
|
@@ -99,9 +99,9 @@ async function collectTestInfo({ testName, project, repoDir, }) {
|
|
|
99
99
|
}
|
|
100
100
|
async function collectTestInfoFromDiagnosis(url) {
|
|
101
101
|
const slug = (0, slug_1.extractSlugFromDiagnosisUrl)(url);
|
|
102
|
-
const data =
|
|
102
|
+
const data = await client_1.apiClient.request(`/api/diagnosis/${slug}/detailed`, {
|
|
103
103
|
method: "GET",
|
|
104
|
-
})
|
|
104
|
+
});
|
|
105
105
|
if (!data.data ||
|
|
106
106
|
!data.data.error_stack?.file_info ||
|
|
107
107
|
data.data.error_stack.file_info.length === 0) {
|
|
@@ -111,7 +111,9 @@ async function collectTestInfoFromDiagnosis(url) {
|
|
|
111
111
|
? data.data.test_case.file_path
|
|
112
112
|
: `tests/${data.data.test_case.file_path}`;
|
|
113
113
|
const testName = data.data.test_case.name;
|
|
114
|
-
const selectedProjects =
|
|
114
|
+
const selectedProjects = data.data.diagnosis.test_project
|
|
115
|
+
? [data.data.diagnosis.test_project]
|
|
116
|
+
: [];
|
|
115
117
|
const fileInfo = data.data.error_stack.file_info.map((file) => ({
|
|
116
118
|
fileName: file.file_name,
|
|
117
119
|
filePath: file.file_path,
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import type { TestCaseTestRunMetadataEntry
|
|
1
|
+
import type { TestCaseTestRunMetadataEntry } from "@empiricalrun/shared-types/api/test-cases";
|
|
2
2
|
import type { Tool } from "@empiricalrun/shared-types/chat-agent";
|
|
3
|
+
import { getDiagnosisDetailedContract, type InferResponse } from "@empiricalrun/shared-types/external-api";
|
|
3
4
|
import type { PlaywrightMatchingTest } from "@empiricalrun/shared-types/playwright-utils";
|
|
5
|
+
type DiagnosisData = InferResponse<typeof getDiagnosisDetailedContract>;
|
|
6
|
+
type DiagnosisDetailedTestCase = DiagnosisData["test_case"];
|
|
4
7
|
export declare const fetchDiagnosisReportTool: Tool;
|
|
5
|
-
export declare function getDataForLastSuccessfulRuns(testCase:
|
|
8
|
+
export declare function getDataForLastSuccessfulRuns(testCase: DiagnosisDetailedTestCase): Promise<never[] | Record<string, TestCaseTestRunMetadataEntry & {
|
|
6
9
|
test_case: PlaywrightMatchingTest;
|
|
7
10
|
}>>;
|
|
11
|
+
export {};
|
|
8
12
|
//# sourceMappingURL=diagnosis-fetcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnosis-fetcher.d.ts","sourceRoot":"","sources":["../../src/tools/diagnosis-fetcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"diagnosis-fetcher.d.ts","sourceRoot":"","sources":["../../src/tools/diagnosis-fetcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAE9F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EACL,4BAA4B,EAC5B,KAAK,aAAa,EACnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAG1F,KAAK,aAAa,GAAG,aAAa,CAAC,OAAO,4BAA4B,CAAC,CAAC;AACxE,KAAK,yBAAyB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;AAgB5D,eAAO,MAAM,wBAAwB,EAAE,IAwItC,CAAC;AAEF,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,yBAAyB;eAKW,sBAAsB;IAkDrE"}
|
|
@@ -104,7 +104,7 @@ In the above, the diagnosis id is after the double hyphen, which is "ULRHHNwiGZ2
|
|
|
104
104
|
# Test Case Information
|
|
105
105
|
- **Name**: ${test_case.name}
|
|
106
106
|
- **Test suite** (Describe blocks): ${test_case.suites}
|
|
107
|
-
- **File path**:
|
|
107
|
+
- **File path**: ${test_case.file_path}
|
|
108
108
|
- **Playwright project**: ${project}
|
|
109
109
|
|
|
110
110
|
# Test Run #${test_run.id}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/executor/index.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAEjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,YAAY,EACV,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/executor/index.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAEjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,YAAY,EACV,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,YAAa,SAAQ,gBAAgB;gBACpC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC;CAgCzD"}
|
|
@@ -22,7 +22,6 @@ const publish_markdown_report_1 = require("../publish-markdown-report");
|
|
|
22
22
|
const rename_file_1 = require("../rename-file");
|
|
23
23
|
const run_test_1 = require("../run-test");
|
|
24
24
|
const safe_bash_1 = require("../safe-bash");
|
|
25
|
-
const slack_message_1 = require("../slack-message");
|
|
26
25
|
const test_gen_browser_1 = require("../test-gen-browser");
|
|
27
26
|
const test_run_fetcher_1 = require("../test-run-fetcher");
|
|
28
27
|
const trace_dot_zip_1 = require("../trace-dot-zip");
|
|
@@ -61,7 +60,6 @@ class ToolExecutor extends base_1.BaseToolExecutor {
|
|
|
61
60
|
set_issue_description_1.setIssueDescriptionTool,
|
|
62
61
|
update_issue_1.updateIssueTool,
|
|
63
62
|
firecrawl_scrape_1.scrapeHtmlTool,
|
|
64
|
-
slack_message_1.slackMessageTool,
|
|
65
63
|
...file_operations_1.textEditorTools,
|
|
66
64
|
];
|
|
67
65
|
super({ ...params, tools });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,IAAI,EACJ,cAAc,EACf,MAAM,uCAAuC,CAAC;AA+B/C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,KAAK,oBAAoB,GAAG,IAAI,GAAG,cAAc,CAAC;AAclD,eAAO,MAAM,sCAAsC,EAAE,oBAAoB,EAKxE,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,oBAAoB,EAGrD,CAAC;AAkBF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,WAE9D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,IAAI,EACJ,cAAc,EACf,MAAM,uCAAuC,CAAC;AA+B/C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,KAAK,oBAAoB,GAAG,IAAI,GAAG,cAAc,CAAC;AAclD,eAAO,MAAM,sCAAsC,EAAE,oBAAoB,EAKxE,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,oBAAoB,EAGrD,CAAC;AAkBF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,WAE9D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,WAM5D;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,mBAAmB,GACzB,oBAAoB,EAAE,CAExB;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,mBAAmB,GACzB,oBAAoB,EAAE,CAExB;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,eAAe,EAAE,WAM5D;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAQlE"}
|
package/dist/tools/index.js
CHANGED
|
@@ -74,7 +74,9 @@ function hasBuiltInTextEditor(model) {
|
|
|
74
74
|
return model.includes("claude");
|
|
75
75
|
}
|
|
76
76
|
function hasBuiltInWebFetch(model) {
|
|
77
|
-
return model.includes("claude")
|
|
77
|
+
return (model.includes("claude") &&
|
|
78
|
+
!model.includes(":vertex") &&
|
|
79
|
+
!model.includes(":bedrock"));
|
|
78
80
|
}
|
|
79
81
|
function textEditorToolsForModel(model) {
|
|
80
82
|
return !hasBuiltInTextEditor(model) ? Object.values(str_replace_editor_1.textEditorTools) : [];
|
package/dist/tools/run-test.js
CHANGED
|
@@ -12,8 +12,8 @@ const utils_1 = require("../artifacts/utils");
|
|
|
12
12
|
const json_1 = require("../utils/json");
|
|
13
13
|
const run_test_1 = require("./definitions/run-test");
|
|
14
14
|
const helpers_1 = require("./file-operations/shared/helpers");
|
|
15
|
-
function buildReportUrl(
|
|
16
|
-
return `https://reports-r2.empirical.run/${
|
|
15
|
+
function buildReportUrl(projectSlug, testRunId) {
|
|
16
|
+
return `https://reports-r2.empirical.run/${projectSlug}/${testRunId}/index.html`;
|
|
17
17
|
}
|
|
18
18
|
function buildResult({ hasTestPassed, summaryJson, reportUrl, }) {
|
|
19
19
|
const summaryWithoutConfig = { ...summaryJson, config: undefined };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/test-run-fetcher/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/test-run-fetcher/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uCAAuC,CAAC;AAUlE,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOnE;AAED,eAAO,MAAM,uBAAuB,EAAE,IAgHrC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@empiricalrun/test-gen",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.81.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org/",
|
|
6
6
|
"access": "public"
|
|
@@ -89,18 +89,18 @@
|
|
|
89
89
|
"typescript": "^5.3.3",
|
|
90
90
|
"zod": "^4.0.1",
|
|
91
91
|
"@empiricalrun/ast-parser": "^0.0.10",
|
|
92
|
-
"@empiricalrun/cua": "^0.
|
|
93
|
-
"@empiricalrun/dashboard-client": "^0.
|
|
94
|
-
"@empiricalrun/shared-types": "0.
|
|
92
|
+
"@empiricalrun/cua": "^0.4.0",
|
|
93
|
+
"@empiricalrun/dashboard-client": "^0.3.0",
|
|
94
|
+
"@empiricalrun/shared-types": "0.13.0",
|
|
95
95
|
"@empiricalrun/llm": "^0.26.0",
|
|
96
96
|
"@empiricalrun/r2-uploader": "^0.9.1",
|
|
97
97
|
"@empiricalrun/trace-utils": "^0.1.0",
|
|
98
|
-
"@empiricalrun/reporter": "^0.
|
|
99
|
-
"@empiricalrun/test-run": "^0.
|
|
98
|
+
"@empiricalrun/reporter": "^0.29.0",
|
|
99
|
+
"@empiricalrun/test-run": "^0.17.0",
|
|
100
100
|
"videostil": "0.3.5"
|
|
101
101
|
},
|
|
102
102
|
"devDependencies": {
|
|
103
|
-
"@playwright/test": "1.
|
|
103
|
+
"@playwright/test": "1.60.0",
|
|
104
104
|
"@types/async-retry": "^1.4.8",
|
|
105
105
|
"@types/console-log-level": "^1.4.5",
|
|
106
106
|
"@types/detect-port": "^1.3.5",
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
"@types/pixelmatch": "^5.2.6",
|
|
114
114
|
"@types/serve-handler": "^6.1.4",
|
|
115
115
|
"js-levenshtein": "^1.1.6",
|
|
116
|
-
"playwright": "1.
|
|
116
|
+
"playwright": "1.60.0",
|
|
117
117
|
"serve-handler": "^6.1.6",
|
|
118
118
|
"ts-patch": "^3.3.0"
|
|
119
119
|
},
|
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/skills.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/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/
|
|
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/skills.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/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/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/apply-line-limit.ts","./src/tools/utils/validate-schema.ts","./src/tools/utils/validators.ts","./src/types/handlebars.d.ts","./src/types/index.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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/slack-message/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uCAAuC,CAAC;AAuBlE,eAAO,MAAM,gBAAgB,EAAE,IAiD9B,CAAC"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.slackMessageTool = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
const SlackActionSchema = zod_1.z.object({
|
|
6
|
-
label: zod_1.z.string().describe("Button label text"),
|
|
7
|
-
url: zod_1.z.string().describe("URL to open when clicked"),
|
|
8
|
-
style: zod_1.z
|
|
9
|
-
.enum(["primary", "danger"])
|
|
10
|
-
.optional()
|
|
11
|
-
.describe("Optional button style: primary (green) or danger (red)"),
|
|
12
|
-
});
|
|
13
|
-
const SlackMessageSchema = zod_1.z.object({
|
|
14
|
-
channel_id: zod_1.z.string().describe("Slack channel ID to post the message to"),
|
|
15
|
-
message: zod_1.z.string().describe("Message text to post"),
|
|
16
|
-
actions: zod_1.z
|
|
17
|
-
.array(SlackActionSchema)
|
|
18
|
-
.optional()
|
|
19
|
-
.describe("Optional list of action buttons to include below the message. Each button opens a URL when clicked."),
|
|
20
|
-
});
|
|
21
|
-
exports.slackMessageTool = {
|
|
22
|
-
schema: {
|
|
23
|
-
name: "slackMessage",
|
|
24
|
-
description: `Post a message to a Slack channel.
|
|
25
|
-
|
|
26
|
-
Use this tool to send messages to Slack channels that are linked to the project.
|
|
27
|
-
|
|
28
|
-
## Known channels
|
|
29
|
-
|
|
30
|
-
- \`C07AQ97P37D\` - #notifications-customer
|
|
31
|
-
- \`C08P2JDA3AR\` - #agent-sessions
|
|
32
|
-
- \`C09DP3HBGEB\` - #agent-sessions-preprod
|
|
33
|
-
- \`C08UZP9TT3K\` - #agent-errors-prod
|
|
34
|
-
- \`C09AR2WQPDX\` - #issues-alerts
|
|
35
|
-
- \`C09SFF6TKAQ\` - #requests-alerts
|
|
36
|
-
- \`C0A6S4VUYKX\` - #customer-summaries
|
|
37
|
-
- \`C07CJT50B45\` - #alerts
|
|
38
|
-
- \`C0AFJ20FHTP\` - #alerts-staging
|
|
39
|
-
`,
|
|
40
|
-
parameters: SlackMessageSchema,
|
|
41
|
-
},
|
|
42
|
-
needsBrowser: false,
|
|
43
|
-
isInlineTool: true,
|
|
44
|
-
execute: async ({ input, apiClient }) => {
|
|
45
|
-
if (!apiClient) {
|
|
46
|
-
throw new Error("Dashboard API client is not available.");
|
|
47
|
-
}
|
|
48
|
-
try {
|
|
49
|
-
const response = await apiClient.request("/api/slack/message", {
|
|
50
|
-
method: "POST",
|
|
51
|
-
body: {
|
|
52
|
-
channel_id: input.channel_id,
|
|
53
|
-
message: input.message,
|
|
54
|
-
actions: input.actions,
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
return {
|
|
58
|
-
isError: false,
|
|
59
|
-
result: JSON.stringify(response, null, 2),
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
return {
|
|
64
|
-
isError: true,
|
|
65
|
-
result: `Slack message failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
};
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
type Project = {
|
|
2
|
-
id: number;
|
|
3
|
-
org_id: number;
|
|
4
|
-
name: string;
|
|
5
|
-
repo_name: string;
|
|
6
|
-
};
|
|
7
|
-
type TestRun = {
|
|
8
|
-
id: number;
|
|
9
|
-
run_id: number;
|
|
10
|
-
project_id: number;
|
|
11
|
-
total_count: number;
|
|
12
|
-
unique_count: number;
|
|
13
|
-
success_count: number;
|
|
14
|
-
failed_count: number;
|
|
15
|
-
skipped_count: number;
|
|
16
|
-
flaky_count: number;
|
|
17
|
-
run_ended_at: string;
|
|
18
|
-
run_started_at: string;
|
|
19
|
-
created_at: string;
|
|
20
|
-
duration: number;
|
|
21
|
-
test_run_branch: string;
|
|
22
|
-
summary_url: string;
|
|
23
|
-
send_notifications: boolean;
|
|
24
|
-
state: string;
|
|
25
|
-
build_id: number;
|
|
26
|
-
environment_id: number;
|
|
27
|
-
metadata: Record<string, any>;
|
|
28
|
-
test_run_head_sha: string;
|
|
29
|
-
};
|
|
30
|
-
type TestRunEnriched = TestRun & {
|
|
31
|
-
environment_name: string | null;
|
|
32
|
-
environment_slug: string | null;
|
|
33
|
-
commit: string | null;
|
|
34
|
-
commit_url: string | null;
|
|
35
|
-
build_branch: string | null;
|
|
36
|
-
build_url: string | null;
|
|
37
|
-
};
|
|
38
|
-
type FailedRunMetadata = {
|
|
39
|
-
stack: string;
|
|
40
|
-
trace: string;
|
|
41
|
-
videos: string[];
|
|
42
|
-
nesting: string[];
|
|
43
|
-
location: {
|
|
44
|
-
file: string;
|
|
45
|
-
line: number;
|
|
46
|
-
column: number;
|
|
47
|
-
};
|
|
48
|
-
start_time: string;
|
|
49
|
-
pw_test_id: string;
|
|
50
|
-
varying_retries: boolean;
|
|
51
|
-
};
|
|
52
|
-
type TestCaseSummaryDetail = {
|
|
53
|
-
id: number;
|
|
54
|
-
test_case_id: number;
|
|
55
|
-
test_run_id: number;
|
|
56
|
-
status: string;
|
|
57
|
-
test_project: string;
|
|
58
|
-
failure_type: string;
|
|
59
|
-
failure_type_description: string;
|
|
60
|
-
last_commit_before_run_started_at: string;
|
|
61
|
-
failed_run_metadata: FailedRunMetadata;
|
|
62
|
-
created_at: string;
|
|
63
|
-
slug: string;
|
|
64
|
-
failing_line: string;
|
|
65
|
-
};
|
|
66
|
-
export type GetTestRunApiResponse = {
|
|
67
|
-
data: {
|
|
68
|
-
test_run: {
|
|
69
|
-
project: Project;
|
|
70
|
-
testRun: TestRunEnriched;
|
|
71
|
-
flattenedSummaryDetails: TestCaseSummaryDetail[];
|
|
72
|
-
};
|
|
73
|
-
} | null;
|
|
74
|
-
error?: {
|
|
75
|
-
message: string;
|
|
76
|
-
};
|
|
77
|
-
};
|
|
78
|
-
export {};
|
|
79
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/test-run-fetcher/types.ts"],"names":[],"mappings":"AACA,KAAK,OAAO,GAAG;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,KAAK,eAAe,GAAG,OAAO,GAAG;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB,EAAE,MAAM,CAAC;IACjC,iCAAiC,EAAE,MAAM,CAAC;IAC1C,mBAAmB,EAAE,iBAAiB,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,OAAO,EAAE,OAAO,CAAC;YACjB,OAAO,EAAE,eAAe,CAAC;YACzB,uBAAuB,EAAE,qBAAqB,EAAE,CAAC;SAClD,CAAC;KACH,GAAG,IAAI,CAAC;IACT,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC"}
|