testeiya 0.9.0 β 0.10.1
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/PIPELINES.md +156 -19
- package/README.md +30 -14
- package/dist/prompt/pipeline-report.js +23 -0
- package/dist/prompt/pipeline-report.js.map +1 -0
- package/dist/prompt/report.js +1 -1
- package/dist/prompt/system-prompt.js +1 -1
- package/dist/prompt/system-prompt.js.map +1 -1
- package/dist/prompt/testomat.io.js +2 -2
- package/dist/prompt/testomat.io.js.map +1 -1
- package/dist/src/args.js +19 -1
- package/dist/src/args.js.map +1 -1
- package/dist/src/cli.js +4 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/doctor.js +8 -10
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/git.js +10 -0
- package/dist/src/git.js.map +1 -1
- package/dist/src/langfuse-extension.js +2 -0
- package/dist/src/langfuse-extension.js.map +1 -1
- package/dist/src/mcp.js +20 -90
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/model.js +2 -0
- package/dist/src/model.js.map +1 -1
- package/dist/src/pipeline/command-stage.js +2 -2
- package/dist/src/pipeline/command-stage.js.map +1 -1
- package/dist/src/pipeline/log.js +5 -0
- package/dist/src/pipeline/log.js.map +1 -1
- package/dist/src/pipeline/overlay.js +217 -0
- package/dist/src/pipeline/overlay.js.map +1 -0
- package/dist/src/pipeline/pipeline-file.js +77 -7
- package/dist/src/pipeline/pipeline-file.js.map +1 -1
- package/dist/src/pipeline/pipeline.js +59 -36
- package/dist/src/pipeline/pipeline.js.map +1 -1
- package/dist/src/pipeline/stage.js +49 -13
- package/dist/src/pipeline/stage.js.map +1 -1
- package/dist/src/pipeline/state.js +3 -1
- package/dist/src/pipeline/state.js.map +1 -1
- package/dist/src/pipeline/summary-stage.js +99 -0
- package/dist/src/pipeline/summary-stage.js.map +1 -0
- package/dist/src/pipeline/task-stage.js +25 -10
- package/dist/src/pipeline/task-stage.js.map +1 -1
- package/dist/src/pipeline/variables.js +34 -2
- package/dist/src/pipeline/variables.js.map +1 -1
- package/dist/src/session.js +22 -15
- package/dist/src/session.js.map +1 -1
- package/package.json +6 -9
- package/pipelines/api-testing.yml +23 -9
- package/pipelines/issue-test-cases.yml +17 -17
- package/pipelines/pr-review.yml +27 -14
- package/pipelines/regression.yml +7 -3
- package/pipelines/web-testing.yml +14 -12
- package/prompt/pipeline-report.ts +23 -0
- package/prompt/report.ts +1 -1
- package/prompt/system-prompt.ts +1 -1
- package/prompt/testomat.io.ts +4 -4
- package/skills/skills.lock.json +1 -1
- package/dist/src/mcp-extension.js +0 -9
- package/dist/src/mcp-extension.js.map +0 -1
- package/dist/vendor/mcp.js +0 -14801
- package/mcp-tools.json +0 -1949
package/pipelines/pr-review.yml
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
name: pr-review
|
|
2
2
|
description: Review a pull request, propose test cases for it, and sync them to Testomat.io.
|
|
3
|
+
target: pr
|
|
3
4
|
|
|
4
5
|
gates:
|
|
5
6
|
code-changed:
|
|
@@ -7,37 +8,49 @@ gates:
|
|
|
7
8
|
min_files: 3
|
|
8
9
|
ignore: ["**/*.md", "**/*.lock", "docs/**"]
|
|
9
10
|
message: Fewer than 3 code files changed.
|
|
11
|
+
testcases-needed:
|
|
12
|
+
env: [CREATE_TESTCASES]
|
|
13
|
+
message: 'No test cases created. Enable test case creation via CREATE_TESTCASES env var'
|
|
10
14
|
testomatio:
|
|
11
|
-
env: [TESTOMATIO
|
|
12
|
-
message: No Testomat.io project. Set TESTOMATIO
|
|
15
|
+
env: [TESTOMATIO]
|
|
16
|
+
message: No Testomat.io project. Set TESTOMATIO.
|
|
13
17
|
|
|
14
18
|
when: [code-changed]
|
|
15
19
|
|
|
20
|
+
env:
|
|
21
|
+
# feature/add-login β feature-add-login
|
|
22
|
+
TESTOMATIO_BRANCH: ${GIT_BRANCH | slugify}
|
|
23
|
+
|
|
24
|
+
|
|
16
25
|
stages:
|
|
17
26
|
- id: requirements
|
|
27
|
+
title: Requirements
|
|
28
|
+
emoji: π
|
|
18
29
|
session: reviewer
|
|
19
|
-
task:
|
|
20
|
-
Work out what this pull request is meant to do. /qa-pr-requirements-analyzer
|
|
21
|
-
Write the acceptance criteria to criteria.md.
|
|
22
|
-
outputs: [criteria.md]
|
|
30
|
+
task: Work out what this pull request is meant to do. /qa-pr-requirements-analyzer
|
|
23
31
|
|
|
24
32
|
- id: review
|
|
33
|
+
title: Review
|
|
34
|
+
emoji: π
|
|
25
35
|
session: reviewer
|
|
26
|
-
task:
|
|
27
|
-
|
|
28
|
-
inputs: [criteria.md]
|
|
36
|
+
task: Review this pull request as a QA engineer against requirements.md. /qa-review-pr
|
|
37
|
+
inputs: [requirements.md]
|
|
29
38
|
|
|
30
39
|
- id: test-cases
|
|
40
|
+
title: Test cases
|
|
41
|
+
emoji: π
|
|
31
42
|
session: writer
|
|
43
|
+
when: [testcases-needed]
|
|
32
44
|
task: |
|
|
33
|
-
|
|
45
|
+
If there is linked issue and it was already reviewed by Testeiya and have linked tests - skip this step
|
|
46
|
+
Write test cases for this pull request from requirements.md and review.md. /qa-write-test-cases
|
|
34
47
|
Put them in test-cases/, one markdown file per suite.
|
|
35
|
-
inputs: [
|
|
48
|
+
inputs: [requirements.md, review.md]
|
|
36
49
|
outputs: [test-cases/]
|
|
37
50
|
|
|
38
51
|
- id: sync
|
|
39
|
-
|
|
40
|
-
|
|
52
|
+
title: Sync to Testomat.io
|
|
53
|
+
emoji: π
|
|
54
|
+
when: [testomatio, testcases-needed]
|
|
41
55
|
task: |
|
|
42
56
|
Sync the test cases in ${ITEM} to Testomat.io. /sync-test-cases-with-tms
|
|
43
|
-
Skip a case that already exists there.
|
package/pipelines/regression.yml
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
name: regression
|
|
2
2
|
description: Run the tests a change can break, from the coverage map, then explain the failures.
|
|
3
|
+
target: pr
|
|
3
4
|
|
|
4
5
|
gates:
|
|
5
6
|
coverage:
|
|
@@ -22,6 +23,8 @@ env:
|
|
|
22
23
|
|
|
23
24
|
stages:
|
|
24
25
|
- id: tests
|
|
26
|
+
title: Tests
|
|
27
|
+
emoji: π§ͺ
|
|
25
28
|
when: [testomatio]
|
|
26
29
|
run: |
|
|
27
30
|
npx -y @testomatio/reporter run --kind detect --warn \
|
|
@@ -30,10 +33,11 @@ stages:
|
|
|
30
33
|
timeout: 30m
|
|
31
34
|
|
|
32
35
|
- id: failures
|
|
36
|
+
title: Failures
|
|
37
|
+
emoji: π
|
|
33
38
|
when: [local, test-command]
|
|
34
39
|
session: triage
|
|
35
40
|
task: |
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
Do not edit any file. Fail the run if this change caused a failure.
|
|
41
|
+
Triage the failures in tests.log without editing files. /debug-fix-failed-flaky-autotests
|
|
42
|
+
Fail the run if this change caused a failure.
|
|
39
43
|
inputs: [tests.log]
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
name: web-testing
|
|
2
2
|
description: Review a pull request, test the change in a browser with Explorbot, explain what broke.
|
|
3
|
+
target: pr
|
|
3
4
|
|
|
4
5
|
gates:
|
|
5
6
|
staging:
|
|
@@ -13,38 +14,39 @@ gates:
|
|
|
13
14
|
message: Explorbot has no AI provider. Set EXPLORBOT_AI_PROVIDER and its key.
|
|
14
15
|
|
|
15
16
|
env:
|
|
16
|
-
EXPLORBOT_OUTPUT: ${PIPELINE_DIR}/explorbot
|
|
17
17
|
EXPLORBOT_NO_BANNER: "1"
|
|
18
18
|
|
|
19
19
|
stages:
|
|
20
20
|
- id: review
|
|
21
|
+
title: Review
|
|
22
|
+
emoji: π
|
|
21
23
|
session: qa
|
|
22
|
-
task:
|
|
23
|
-
Review this pull request as a QA engineer. /qa-review-pr
|
|
24
|
-
Write the user-facing scenarios worth checking in a browser to scenarios.md.
|
|
25
|
-
outputs: [scenarios.md]
|
|
24
|
+
task: Review this pull request as a QA engineer. List the scenarios worth checking in a browser. /qa-review-pr
|
|
26
25
|
|
|
27
26
|
- id: write-plan
|
|
27
|
+
title: Test plan
|
|
28
|
+
emoji: πΊοΈ
|
|
28
29
|
session: qa
|
|
29
30
|
when: [staging]
|
|
30
|
-
task:
|
|
31
|
-
|
|
32
|
-
Write the plan to plan.md. Keep only scenarios a browser can check.
|
|
33
|
-
inputs: [scenarios.md]
|
|
31
|
+
task: Turn the browser scenarios in review.md into an Explorbot test plan for ${EXPLORBOT_URL} in plan.md. /explorbot-plan
|
|
32
|
+
inputs: [review.md]
|
|
34
33
|
outputs: [plan.md]
|
|
35
34
|
|
|
36
35
|
- id: explore
|
|
36
|
+
title: Browser testing
|
|
37
|
+
emoji: π
|
|
37
38
|
when: [staging, browser, explorbot-ai]
|
|
38
|
-
run: npx -y explorbot test "$
|
|
39
|
+
run: EXPLORBOT_OUTPUT="$STAGE_DIR/explorbot" npx -y explorbot test "$STAGE_DIR/plan.md" '*'
|
|
39
40
|
inputs: [plan.md]
|
|
40
41
|
outputs: [explorbot/]
|
|
41
42
|
timeout: 30m
|
|
42
43
|
|
|
43
44
|
- id: results
|
|
45
|
+
title: Results
|
|
46
|
+
emoji: π
|
|
44
47
|
session: qa
|
|
45
48
|
when: [staging, browser, explorbot-ai]
|
|
46
49
|
task: |
|
|
47
|
-
Explorbot
|
|
48
|
-
Say which failed scenarios are real defects in this change and which are test noise.
|
|
50
|
+
Read the Explorbot report in explorbot/ and say which failed scenarios are real defects and which are noise. /explorbot-fundamentals
|
|
49
51
|
Fail the run if any is a real defect.
|
|
50
52
|
inputs: [plan.md, explorbot/]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import dedent from "dedent";
|
|
2
|
+
|
|
3
|
+
export const pipelineReport = dedent`
|
|
4
|
+
<pipeline-report>
|
|
5
|
+
The draft is the report: every stage's report, word for word, under its own \`### <emoji> <title>\` heading. Your job is to trim it, never to write it. This format overrides <final-report>, its title included.
|
|
6
|
+
|
|
7
|
+
1. Copy the draft to the report file with the \`write\` tool, word for word.
|
|
8
|
+
2. Trim it with the \`edit\` tool:
|
|
9
|
+
* Drop a line that repeats what an earlier section already said.
|
|
10
|
+
* When a section is too long, shorten its lines or drop its least important bullets.
|
|
11
|
+
3. Nothing repeats and nothing is too long: leave the copy as it is.
|
|
12
|
+
|
|
13
|
+
Never:
|
|
14
|
+
* Add, rename, merge, reorder or drop a heading.
|
|
15
|
+
* Add a sentence, a title, an intro, a conclusion or a closing summary.
|
|
16
|
+
* Change a fact, a number, an id or a link. Reword only to shorten.
|
|
17
|
+
* Cut a numbered list, or replace a list with a count like "10 items, see the file".
|
|
18
|
+
* Add findings, assumptions or advice of your own.
|
|
19
|
+
|
|
20
|
+
* A command stage's section links its log. You may add up to three bullets quoting its failures from the log.
|
|
21
|
+
* The verdict is given. Do not call a result tool to set one.
|
|
22
|
+
</pipeline-report>
|
|
23
|
+
`;
|
package/prompt/report.ts
CHANGED
|
@@ -18,7 +18,7 @@ export function finalReport(path: string): string {
|
|
|
18
18
|
<final-report>
|
|
19
19
|
* Write your complete final report to \`${path}\` with the \`write\` tool. Writing it is required before you finish.
|
|
20
20
|
* That file is your answer. It is the run's deliverable; nothing else you say is kept.
|
|
21
|
-
* A skill's output format overrides every rule in this block, including the title. Follow it strictly.
|
|
21
|
+
* A skill's or the task's output format overrides every rule in this block, including the title. Follow it strictly.
|
|
22
22
|
* Decide the **severity of your report**. Low severity: a few short bullets, nothing more.
|
|
23
23
|
* Do not make the reader go through a long report for a minor issue with no effect.
|
|
24
24
|
* Severity decides how many items you report, not how long each one is. Even a critical finding is: what breaks, for whom, when.
|
package/prompt/system-prompt.ts
CHANGED
|
@@ -15,7 +15,7 @@ export function buildSystemPrompt(options: SystemPromptOptions): string {
|
|
|
15
15
|
const date = new Date().toISOString().split("T")[0];
|
|
16
16
|
const clis = options.connectedClis?.join(", ") || "none connected yet";
|
|
17
17
|
const mcps = options.connectedMcps?.join(", ") || "none connected yet";
|
|
18
|
-
let manualTestsHint = " Pulled manual tests usually live in `.testeiya/
|
|
18
|
+
let manualTestsHint = " Pulled manual tests usually live in `.testeiya/test-cases/`; check there before declaring the project has no manual tests.";
|
|
19
19
|
if (options.manualTestsHint === false) manualTestsHint = "";
|
|
20
20
|
|
|
21
21
|
const prompt = dedent`
|
package/prompt/testomat.io.ts
CHANGED
|
@@ -38,8 +38,8 @@ export function testomatio(options: TestomatioOptions): string {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
function dynamicData(tms: TmsAccess): string {
|
|
41
|
-
if (tms === "mcp-
|
|
42
|
-
return "Get them through the
|
|
41
|
+
if (tms === "mcp-tools") {
|
|
42
|
+
return "Get them through the `mcp__testomatio__*` tools, one per entity (`tests`, `runs`, `testruns`, `issues`, β¦); pick the operation with its `command` param.";
|
|
43
43
|
}
|
|
44
44
|
if (tms === "cli-only") {
|
|
45
45
|
return "There are no Testomat.io tools in this session. Get them from the REST API: `curl` with the `TESTOMATIO` token as the Authorization header against `$TESTOMATIO_URL/api/v2`. Keep to documented endpoints; never invent paths or parameters.";
|
|
@@ -48,11 +48,11 @@ function dynamicData(tms: TmsAccess): string {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
/**
|
|
51
|
-
* `mcp-
|
|
51
|
+
* `mcp-tools`: one tool per entity, named `mcp__testomatio__<tool>`. `cli-only`: no
|
|
52
52
|
* tools at all; `check-tests` and REST through the shell. `mcp-direct`: one tool
|
|
53
53
|
* per entity, prefixed `testomatio-<slug>`; the desktop app's one-shot mode.
|
|
54
54
|
*/
|
|
55
|
-
export type TmsAccess = "mcp-direct" | "mcp-
|
|
55
|
+
export type TmsAccess = "mcp-direct" | "mcp-tools" | "cli-only";
|
|
56
56
|
|
|
57
57
|
export interface TestomatioOptions {
|
|
58
58
|
/** How the agent reaches Testomat.io in this run. */
|
package/skills/skills.lock.json
CHANGED
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
{
|
|
80
80
|
"source": "microsoft/playwright-cli/tree/main/skills/playwright-cli",
|
|
81
81
|
"ref": null,
|
|
82
|
-
"sha": "
|
|
82
|
+
"sha": "86f5616716033854f0990734fe2f9fcde0c1f6cc",
|
|
83
83
|
"folder": "playwright",
|
|
84
84
|
"skills": [
|
|
85
85
|
"playwright-cli"
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { mcpConfig, seedMetadataCache, vendorBundle } from "./mcp.js";
|
|
2
|
-
/** The MCP adapter, configured from the environment, as a pi extension. */
|
|
3
|
-
export default async function mcpExtension(pi) {
|
|
4
|
-
const config = mcpConfig();
|
|
5
|
-
await seedMetadataCache(config);
|
|
6
|
-
const { createMcpAdapter } = (await import(vendorBundle()));
|
|
7
|
-
await createMcpAdapter({ config })(pi);
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=mcp-extension.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-extension.js","sourceRoot":"","sources":["../../src/mcp-extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEtE,2EAA2E;AAC3E,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,YAAY,CAAC,EAAW;IACpD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEhC,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC,CAEzD,CAAC;IACF,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC"}
|