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.
Files changed (60) hide show
  1. package/PIPELINES.md +156 -19
  2. package/README.md +30 -14
  3. package/dist/prompt/pipeline-report.js +23 -0
  4. package/dist/prompt/pipeline-report.js.map +1 -0
  5. package/dist/prompt/report.js +1 -1
  6. package/dist/prompt/system-prompt.js +1 -1
  7. package/dist/prompt/system-prompt.js.map +1 -1
  8. package/dist/prompt/testomat.io.js +2 -2
  9. package/dist/prompt/testomat.io.js.map +1 -1
  10. package/dist/src/args.js +19 -1
  11. package/dist/src/args.js.map +1 -1
  12. package/dist/src/cli.js +4 -2
  13. package/dist/src/cli.js.map +1 -1
  14. package/dist/src/doctor.js +8 -10
  15. package/dist/src/doctor.js.map +1 -1
  16. package/dist/src/git.js +10 -0
  17. package/dist/src/git.js.map +1 -1
  18. package/dist/src/langfuse-extension.js +2 -0
  19. package/dist/src/langfuse-extension.js.map +1 -1
  20. package/dist/src/mcp.js +20 -90
  21. package/dist/src/mcp.js.map +1 -1
  22. package/dist/src/model.js +2 -0
  23. package/dist/src/model.js.map +1 -1
  24. package/dist/src/pipeline/command-stage.js +2 -2
  25. package/dist/src/pipeline/command-stage.js.map +1 -1
  26. package/dist/src/pipeline/log.js +5 -0
  27. package/dist/src/pipeline/log.js.map +1 -1
  28. package/dist/src/pipeline/overlay.js +217 -0
  29. package/dist/src/pipeline/overlay.js.map +1 -0
  30. package/dist/src/pipeline/pipeline-file.js +77 -7
  31. package/dist/src/pipeline/pipeline-file.js.map +1 -1
  32. package/dist/src/pipeline/pipeline.js +59 -36
  33. package/dist/src/pipeline/pipeline.js.map +1 -1
  34. package/dist/src/pipeline/stage.js +49 -13
  35. package/dist/src/pipeline/stage.js.map +1 -1
  36. package/dist/src/pipeline/state.js +3 -1
  37. package/dist/src/pipeline/state.js.map +1 -1
  38. package/dist/src/pipeline/summary-stage.js +99 -0
  39. package/dist/src/pipeline/summary-stage.js.map +1 -0
  40. package/dist/src/pipeline/task-stage.js +25 -10
  41. package/dist/src/pipeline/task-stage.js.map +1 -1
  42. package/dist/src/pipeline/variables.js +34 -2
  43. package/dist/src/pipeline/variables.js.map +1 -1
  44. package/dist/src/session.js +22 -15
  45. package/dist/src/session.js.map +1 -1
  46. package/package.json +6 -9
  47. package/pipelines/api-testing.yml +23 -9
  48. package/pipelines/issue-test-cases.yml +17 -17
  49. package/pipelines/pr-review.yml +27 -14
  50. package/pipelines/regression.yml +7 -3
  51. package/pipelines/web-testing.yml +14 -12
  52. package/prompt/pipeline-report.ts +23 -0
  53. package/prompt/report.ts +1 -1
  54. package/prompt/system-prompt.ts +1 -1
  55. package/prompt/testomat.io.ts +4 -4
  56. package/skills/skills.lock.json +1 -1
  57. package/dist/src/mcp-extension.js +0 -9
  58. package/dist/src/mcp-extension.js.map +0 -1
  59. package/dist/vendor/mcp.js +0 -14801
  60. package/mcp-tools.json +0 -1949
@@ -1 +1 @@
1
- {"version":3,"file":"stage.js","sourceRoot":"","sources":["../../../src/pipeline/stage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stage.js","sourceRoot":"","sources":["../../../src/pipeline/stage.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,9 @@ export const STATE_FILE = "pipeline.json";
4
4
  export const COPY_FILE = "pipeline.yml";
5
5
  export const SESSIONS_DIR = ".sessions";
6
6
  export const CHANGES_FILE = "changes.txt";
7
- const OWN = [STATE_FILE, COPY_FILE, SESSIONS_DIR];
7
+ /** The last round's files, kept so the next round updates them. */
8
+ export const LAST_DIR = ".last";
9
+ const OWN = [STATE_FILE, COPY_FILE, SESSIONS_DIR, LAST_DIR];
8
10
  /**
9
11
  * `pipeline.json` in the pipeline folder: the round, each stage's result, and
10
12
  * the rounds before. The next run reads it to retry or start a new round, the
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/pipeline/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC;AAC1C,MAAM,CAAC,MAAM,SAAS,GAAG,cAAc,CAAC;AACxC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;AAC1C,MAAM,GAAG,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAElD;;;;GAIG;AACH,MAAM,OAAO,aAAa;IAQL;IACR;IARX,6EAA6E;IAC7E,MAAM,CAAU,OAAO,GAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAE5E,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7B,aAAa,GAAa,EAAE,CAAC;IAErC,YACmB,GAAW,EACnB,MAAsB;QADd,QAAG,GAAH,GAAG,CAAQ;QACnB,WAAM,GAAN,MAAM,CAAgB;IAC9B,CAAC;IAEJ,MAAM,CAAC,IAAI,CAAC,GAAW;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,CAAC,OAAO,CAAC,OAAkC;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,KAAK,MAAM,MAAM,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAa,EAAE,CAAC;YAC9E,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC;QAC/C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,EAAU;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,uFAAuF;IACvF,UAAU;QACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,yEAAyE;IACzE,WAAW;QACT,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7E,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,IAAI;QACF,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACrG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACzF,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/pipeline/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { pipelineReport } from "../../prompt/pipeline-report.js";
4
+ import { STATE_FILE } from "./state.js";
5
+ import { TaskStage } from "./task-stage.js";
6
+ const DRAFT_FILE = "draft.md";
7
+ /** A stage's own headings start one level under its section. */
8
+ const TOP_LEVEL = 4;
9
+ /**
10
+ * The final report. Code joins the stages' reports into a draft, word for
11
+ * word, so the agent only trims it and never writes a section of its own.
12
+ */
13
+ export class SummaryStage extends TaskStage {
14
+ stages;
15
+ state;
16
+ constructor(pipeline, stages, state, dir) {
17
+ const lines = [`Write the final report of the "${pipeline.name}" pipeline, round ${state.record.round}.`];
18
+ if (pipeline.summary)
19
+ lines.push("", pipeline.summary.trim());
20
+ lines.push("", `The verdict is ${state.record.status}.`, `The draft: ${join(dir, "summary", DRAFT_FILE)}`, "", pipelineReport);
21
+ const spec = { id: "summary", title: "Summary", emoji: "🧾", task: lines.join("\n"), session: "summary" };
22
+ super({ ...spec, inputs: [STATE_FILE], outputs: [], when: [], stopOn: [] });
23
+ this.stages = stages;
24
+ this.state = state;
25
+ }
26
+ files() {
27
+ return [...super.files(), DRAFT_FILE];
28
+ }
29
+ async run(context, record) {
30
+ mkdirSync(this.dir(context), { recursive: true });
31
+ writeFileSync(join(this.dir(context), DRAFT_FILE), this.draft(context.dir));
32
+ await super.run(context, record);
33
+ }
34
+ /** The stages' reports already update the last round, so the summary starts from the draft. */
35
+ lastRound() {
36
+ return null;
37
+ }
38
+ /** One `### <emoji> <title>` section per stage, in order. */
39
+ draft(dir) {
40
+ const sections = this.stages.map((stage) => {
41
+ const body = this.section(stage, this.state.stage(stage.id), dir);
42
+ return `### ${stage.spec.emoji} ${stage.spec.title}\n\n${body}`;
43
+ });
44
+ return `${sections.join("\n\n")}\n`;
45
+ }
46
+ section(stage, record, dir) {
47
+ if (!record || record.status === "not-run")
48
+ return "Did not run.";
49
+ if (record.status === "skipped")
50
+ return `Skipped: ${record.reason}`;
51
+ const lines = [];
52
+ if (record.status === "broken" || record.status === "timeout") {
53
+ lines.push(`Stopped: ${record.reason}. A re-run on the same commit picks up from there.`);
54
+ }
55
+ if (record.status === "fail" && record.reason)
56
+ lines.push(`Failed: ${record.reason}`);
57
+ if (record.log)
58
+ lines.push(`\`${stage.spec.run}\` ended ${record.status}. Log: [${record.log}](${record.log})`);
59
+ const report = record.report && join(dir, record.report);
60
+ if (report && existsSync(report))
61
+ lines.push(this.demote(readFileSync(report, "utf8").trim()));
62
+ if (lines.length === 0)
63
+ return `Ended ${record.status}.`;
64
+ return lines.join("\n\n");
65
+ }
66
+ /** Moves every heading down so the report's top one is `####`, outside code blocks. */
67
+ demote(text) {
68
+ const lines = text.split("\n");
69
+ const levels = this.headings(lines).map((index) => this.level(lines[index]));
70
+ if (levels.length === 0)
71
+ return text;
72
+ const shift = TOP_LEVEL - Math.min(...levels);
73
+ if (shift <= 0)
74
+ return text;
75
+ for (const index of this.headings(lines))
76
+ lines[index] = `${"#".repeat(shift)}${lines[index]}`;
77
+ return lines.join("\n");
78
+ }
79
+ headings(lines) {
80
+ const found = [];
81
+ let fenced = false;
82
+ for (const [index, line] of lines.entries()) {
83
+ if (line.startsWith("```"))
84
+ fenced = !fenced;
85
+ if (!fenced && this.level(line) > 0)
86
+ found.push(index);
87
+ }
88
+ return found;
89
+ }
90
+ level(line) {
91
+ let hashes = 0;
92
+ while (line[hashes] === "#")
93
+ hashes++;
94
+ if (hashes === 0 || hashes > 6 || line[hashes] !== " ")
95
+ return 0;
96
+ return hashes;
97
+ }
98
+ }
99
+ //# sourceMappingURL=summary-stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary-stage.js","sourceRoot":"","sources":["../../../src/pipeline/summary-stage.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,11 @@ import { existsSync, readFileSync, rmSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { log } from "./log.js";
4
4
  import { Stage } from "./stage.js";
5
- import { SESSIONS_DIR } from "./state.js";
6
- const RETRY_NOTE = "This stage stopped before it finished. Go on from where you stopped. Files you already wrote are in the pipeline folder.";
5
+ import { CHANGES_FILE, LAST_DIR, SESSIONS_DIR } from "./state.js";
6
+ const RETRY_NOTE = "This stage stopped before it finished. Go on from where you stopped. Files you already wrote are in the stage folder.";
7
7
  /**
8
8
  * An agent stage: a `testeiya task` run. It writes its report to `<id>.md`
9
- * and its verdict to `<id>.json`.
9
+ * and its verdict to `<id>.json`, in its folder.
10
10
  */
11
11
  export class TaskStage extends Stage {
12
12
  result = { field: "report", extension: "md" };
@@ -15,8 +15,8 @@ export class TaskStage extends Stage {
15
15
  }
16
16
  async runItem(context, item, vars) {
17
17
  const { dir } = context;
18
- const report = `${this.id}${item.suffix}.md`;
19
- const envelope = `${this.id}${item.suffix}.json`;
18
+ const report = `${this.folder}/${this.id}${item.suffix}.md`;
19
+ const envelope = `${this.folder}/${this.id}${item.suffix}.json`;
20
20
  rmSync(join(dir, report), { force: true });
21
21
  rmSync(join(dir, envelope), { force: true });
22
22
  const task = this.task(context, vars);
@@ -38,8 +38,9 @@ export class TaskStage extends Stage {
38
38
  const { session } = this.spec;
39
39
  const args = [];
40
40
  // Only the reporting stage posts. Every other stage keeps out of the comment thread.
41
+ // Their reports land in the summary, which is signed once.
41
42
  if (!context.report)
42
- args.push("--no-thread");
43
+ args.push("--no-thread", "--no-default-footer");
43
44
  for (const output of outputs)
44
45
  args.push("-o", output);
45
46
  if (context.report)
@@ -56,20 +57,34 @@ export class TaskStage extends Stage {
56
57
  }
57
58
  /** The task, then where its files are, so the model never guesses a path. */
58
59
  task(context, vars) {
59
- const { dir } = context;
60
- const lines = [`Pipeline folder: ${dir}`];
60
+ const dir = this.dir(context);
61
+ const lines = [`Stage folder: ${dir}`];
61
62
  const wanted = this.inputs();
62
63
  const present = wanted.filter((input) => existsSync(join(dir, input)));
63
64
  const absent = wanted.filter((input) => !present.includes(input));
64
65
  if (present.length > 0)
65
- lines.push(`Read these first: ${present.join(", ")}`);
66
- const outputs = this.spec.outputs.map((output) => vars.expand(output));
66
+ lines.push(`Read these first: ${present.map((input) => join(dir, input)).join(", ")}`);
67
+ const outputs = this.spec.outputs.map((output) => join(dir, vars.expand(output)));
67
68
  if (outputs.length > 0)
68
69
  lines.push(`Write these files: ${outputs.join(", ")}`);
69
70
  for (const input of absent)
70
71
  lines.push(`Not available: ${input} (${context.missing(input)})`);
72
+ const last = this.lastRound(context);
73
+ if (last)
74
+ lines.push(last);
71
75
  return `${vars.expand(this.spec.task ?? "").trim()}\n\n${lines.join("\n")}`;
72
76
  }
77
+ /** A new round updates the last one's result instead of starting over. */
78
+ lastRound(context) {
79
+ const last = join(context.dir, LAST_DIR, this.folder);
80
+ if (!existsSync(last))
81
+ return null;
82
+ let line = `Last round: ${last}. Update its result: keep what still holds, redo what the changes touch.`;
83
+ const changes = join(context.dir, CHANGES_FILE);
84
+ if (existsSync(changes))
85
+ line += ` Changed files: ${changes}`;
86
+ return line;
87
+ }
73
88
  readEnvelope(path) {
74
89
  if (!existsSync(path))
75
90
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"task-stage.js","sourceRoot":"","sources":["../../../src/pipeline/task-stage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-stage.js","sourceRoot":"","sources":["../../../src/pipeline/task-stage.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,42 @@
1
+ import { Liquid } from "liquidjs";
2
+ /** `${NAME}`, `${NAME:-default}` or `${NAME | filter | filter: arg}`. */
3
+ const REFERENCE = /\$\{([A-Za-z_][A-Za-z0-9_]*)(?::-([^}]*)|(\s*\|[^}]*))?\}/g;
4
+ /** Liquid's filters, and ours for URLs. Only expressions: Liquid's tags never run. */
5
+ const liquid = new Liquid({ strictFilters: true });
6
+ liquid.registerFilter("host", (value) => url(value)?.host ?? "");
7
+ liquid.registerFilter("path", (value) => url(value)?.pathname ?? "");
1
8
  /** The environment a pipeline runs in, and `${NAME}` expansion over it. */
2
9
  export class Variables {
3
10
  values;
4
11
  constructor(values) {
5
12
  this.values = values;
6
13
  }
14
+ /** Why the filters in `text` cannot run, or null. */
15
+ static problem(text) {
16
+ for (const [, name, , filters] of text.matchAll(REFERENCE)) {
17
+ if (!filters)
18
+ continue;
19
+ try {
20
+ liquid.evalValueSync(`${name}${filters}`, {});
21
+ }
22
+ catch (err) {
23
+ return `\${${name}${filters}}: ${err.message.split("\n")[0]}`;
24
+ }
25
+ }
26
+ return null;
27
+ }
28
+ /** Whether `text` uses a filter. */
29
+ static filtered(text) {
30
+ return [...text.matchAll(REFERENCE)].some((match) => match[3]);
31
+ }
7
32
  get(name) {
8
33
  return this.values[name];
9
34
  }
10
- /** `${NAME}` and `${NAME:-default}`, the shell's rule: unset is empty. */
35
+ /** `${NAME}` and `${NAME:-default}`, the shell's rule: unset is empty. A `|` runs Liquid filters. */
11
36
  expand(text) {
12
- return text.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)(?::-([^}]*))?\}/g, (_, name, fallback) => {
37
+ return text.replace(REFERENCE, (_, name, fallback, filters) => {
38
+ if (filters)
39
+ return String(liquid.evalValueSync(`${name}${filters}`, this.values) ?? "");
13
40
  const value = this.values[name];
14
41
  if (value)
15
42
  return value;
@@ -38,4 +65,9 @@ export class Variables {
38
65
  return { ...this.values };
39
66
  }
40
67
  }
68
+ function url(value) {
69
+ if (typeof value !== "string" || !URL.canParse(value))
70
+ return null;
71
+ return new URL(value);
72
+ }
41
73
  //# sourceMappingURL=variables.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"variables.js","sourceRoot":"","sources":["../../../src/pipeline/variables.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,OAAO,SAAS;IACS;IAA7B,YAA6B,MAAW;QAAX,WAAM,GAAN,MAAM,CAAK;IAAG,CAAC;IAE5C,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,0EAA0E;IAC1E,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,+CAA+C,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,QAAiB,EAAE,EAAE;YAC1G,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;YACxB,OAAO,QAAQ,IAAI,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qDAAqD;IACrD,IAAI,CAAC,KAAU;QACb,OAAO,IAAI,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,4EAA4E;IAC5E,YAAY,CAAC,KAA6B;QACxC,MAAM,MAAM,GAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpG,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,KAAe;QACrB,MAAM,MAAM,GAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,2BAA2B;IAC3B,KAAK;QACH,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"variables.js","sourceRoot":"","sources":["../../../src/pipeline/variables.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,29 @@
1
1
  import { existsSync } from "node:fs";
2
- import { join } from "node:path";
3
- import { createAgentSession, DefaultResourceLoader, ModelRuntime, SettingsManager, } from "@earendil-works/pi-coding-agent";
2
+ import { createRequire } from "node:module";
3
+ import { dirname, join } from "node:path";
4
+ import { createAgentSession, createCodemodeExtension, createMcpExtension, DefaultResourceLoader, ModelRuntime, SettingsManager, } from "@earendil-works/pi-coding-agent";
4
5
  import { buildSystemPrompt } from "../prompt/system-prompt.js";
5
6
  import { pathClis } from "../prompt/clis.js";
6
7
  import { PACKAGE_ROOT, PI_STATE_DIR, TESTEIYA_HOME } from "./env.js";
7
8
  import { langfuseConfig } from "./langfuse.js";
8
- import { hasMcp, tmsAccess } from "./mcp.js";
9
+ import { hasMcp, mcpConfig, tmsAccess } from "./mcp.js";
9
10
  import { applyEnvKeys, resolveModel } from "./model.js";
10
11
  import { createSetResultTool } from "./result.js";
11
12
  import { sessionModel } from "./sessions.js";
12
13
  // From the package root, never this file's own directory: `../skills` would
13
14
  // resolve to dist/skills, and the filter below would silently drop everything.
14
15
  export const BUNDLED_SKILLS_DIR = join(PACKAGE_ROOT, "skills");
15
- const MCP_EXTENSION = extensionPath("mcp-extension");
16
16
  const ATTRIBUTION_EXTENSION = extensionPath("attribution-extension");
17
17
  const LANGFUSE_EXTENSION = extensionPath("langfuse-extension");
18
+ // The package root: pi loads it through its `pi.extensions` manifest.
19
+ const SUBAGENTS_EXTENSION = dirname(createRequire(import.meta.url).resolve("pi-subagents"));
18
20
  /** The one runtime factory, so every command reads the same auth. */
19
21
  export async function createRuntime() {
20
22
  const runtime = await ModelRuntime.create({
21
23
  authPath: join(TESTEIYA_HOME, "auth.json"),
22
- modelsPath: null,
24
+ // A run inside Testeiya Cloud points its providers at the cloud's own AI
25
+ // proxy by handing the CLI a models.json; anywhere else this stays unset.
26
+ modelsPath: process.env.TESTEIYA_MODELS_JSON ?? null,
23
27
  });
24
28
  await applyEnvKeys(runtime);
25
29
  return runtime;
@@ -37,6 +41,7 @@ export function createLoader(options) {
37
41
  settingsManager: options.settingsManager,
38
42
  additionalSkillPaths: [BUNDLED_SKILLS_DIR],
39
43
  additionalExtensionPaths: options.extensionPaths,
44
+ extensionFactories: options.extensionFactories,
40
45
  systemPromptOverride: options.systemPrompt,
41
46
  skillsOverride: (current) => ({
42
47
  skills: current.skills.filter((s) => s.baseDir.startsWith(BUNDLED_SKILLS_DIR)),
@@ -47,19 +52,26 @@ export function createLoader(options) {
47
52
  export async function createTesteiyaSession(options) {
48
53
  const runtime = await createRuntime();
49
54
  const model = resolveModel(runtime, options.model, sessionModel(options.sessionManager));
50
- const settingsManager = SettingsManager.inMemory();
51
- const extensionPaths = [ATTRIBUTION_EXTENSION];
55
+ const settingsManager = SettingsManager.inMemory({
56
+ defaultTools: ["+codemode"],
57
+ // A checkout never gets to add agents, settings or MCP servers of its own.
58
+ defaultProjectTrust: "never",
59
+ });
60
+ const extensionPaths = [ATTRIBUTION_EXTENSION, SUBAGENTS_EXTENSION];
52
61
  if (langfuseConfig())
53
62
  extensionPaths.push(LANGFUSE_EXTENSION);
63
+ // pi's CLI loads these as built-ins; SDK sessions only get what is listed here.
64
+ const extensionFactories = [createCodemodeExtension({ models: false })];
54
65
  const connectedMcps = [];
55
66
  if (hasMcp()) {
56
- extensionPaths.push(MCP_EXTENSION);
67
+ extensionFactories.push(createMcpExtension({ loadConfig: mcpConfig, openUrl: () => { } }));
57
68
  connectedMcps.push("Testomat.io");
58
69
  }
59
70
  const loader = createLoader({
60
71
  cwd: options.cwd,
61
72
  settingsManager,
62
73
  extensionPaths,
74
+ extensionFactories,
63
75
  systemPrompt: () => buildSystemPrompt({
64
76
  cwd: options.cwd,
65
77
  tms: tmsAccess(),
@@ -83,15 +95,10 @@ export async function createTesteiyaSession(options) {
83
95
  settingsManager,
84
96
  sessionManager: options.sessionManager,
85
97
  customTools: [createSetResultTool(options.result)],
86
- // Extensions start their runtime on this event. Without it the MCP adapter
87
- // registers its tools but never connects, and every call answers
88
- // "MCP not initialized".
89
98
  sessionStartEvent: { type: "session_start", reason: "startup" },
90
99
  });
91
- // Starts the extension runtime and fires session_start. createAgentSession
92
- // does not do this — pi's own modes do — and without it an extension is
93
- // constructed but never initialized: the MCP adapter registers its tools and
94
- // then answers "MCP not initialized" for every call.
100
+ // Starts the extension runtime and fires session_start, where MCP connects.
101
+ // createAgentSession does not do this; pi's own modes do.
95
102
  await session.bindExtensions({
96
103
  mode: "print",
97
104
  onError: (err) => {
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testeiya",
3
- "version": "0.9.0",
3
+ "version": "0.10.1",
4
4
  "description": "AI testing agent — QA-focused coding agent for manual and automated tests",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -18,7 +18,6 @@
18
18
  "pipelines",
19
19
  "PIPELINES.md",
20
20
  "skills",
21
- "mcp-tools.json",
22
21
  "README.md",
23
22
  "LICENSE"
24
23
  ],
@@ -31,8 +30,7 @@
31
30
  "scripts": {
32
31
  "start": "npm run build && node dist/src/cli.js",
33
32
  "dev": "./testeiya",
34
- "build": "tsc -p tsconfig.json && npm run build:vendor",
35
- "build:vendor": "esbuild scripts/vendor-entry.ts --bundle --format=esm --platform=node --packages=external --outfile=dist/vendor/mcp.js",
33
+ "build": "tsc -p tsconfig.json",
36
34
  "typecheck": "tsc -p tsconfig.json --noEmit",
37
35
  "prepublishOnly": "npm run build",
38
36
  "test": "npm run build && node --test test/*.test.js"
@@ -46,19 +44,18 @@
46
44
  "pi"
47
45
  ],
48
46
  "dependencies": {
49
- "@earendil-works/pi-ai": "^0.84.3",
50
- "@earendil-works/pi-coding-agent": "^0.84.3",
51
- "@earendil-works/pi-tui": "^0.84.3",
47
+ "@earendil-works/pi-ai": "^1.4.0",
48
+ "@earendil-works/pi-coding-agent": "^1.4.0",
52
49
  "@testomatio/mcp": "^3.1.0",
53
50
  "chalk": "^5.6.2",
54
51
  "dedent": "^1.7.2",
55
- "pi-mcp-adapter": "^2.21.1",
52
+ "liquidjs": "^10.30.0",
53
+ "pi-subagents": "^0.81.0",
56
54
  "typebox": "1.3.7",
57
55
  "yaml": "^2.9.0"
58
56
  },
59
57
  "devDependencies": {
60
58
  "@types/node": "^22.19.19",
61
- "esbuild": "^0.28.1",
62
59
  "tsx": "^4.23.12",
63
60
  "typescript": "^5.9.3"
64
61
  }
@@ -1,39 +1,53 @@
1
1
  name: api-testing
2
2
  description: Find the API endpoints a pull request changed, test each with Explorbot, explain what broke.
3
+ target: pr
3
4
 
4
5
  gates:
5
6
  api:
6
- env: [EXPLORBOT_URL, EXPLORBOT_API_SPEC]
7
- message: No API to test. Set EXPLORBOT_URL to the API base and EXPLORBOT_API_SPEC to its OpenAPI spec.
7
+ env: [EXPLORBOT_URL, OPENAPI_SPEC]
8
+ message: No API to test. Set EXPLORBOT_URL to the API base and OPENAPI_SPEC to its OpenAPI spec.
8
9
  explorbot-ai:
9
10
  env: [EXPLORBOT_AI_PROVIDER]
10
11
  message: Explorbot has no AI provider. Set EXPLORBOT_AI_PROVIDER and its key.
11
12
 
12
13
  env:
13
- EXPLORBOT_OUTPUT: ${PIPELINE_DIR}/explorbot
14
14
  EXPLORBOT_NO_BANNER: "1"
15
15
 
16
16
  stages:
17
+ - id: spec
18
+ title: OpenAPI spec
19
+ emoji: 📜
20
+ when: [api]
21
+ run: npx -y @apidevtools/swagger-cli validate "$OPENAPI_SPEC"
22
+ stopOn: fail
23
+ timeout: 2m
24
+
17
25
  - id: review
26
+ title: API review
27
+ emoji: 🔍
18
28
  session: qa
29
+ when: [API_SPEC]
19
30
  task: |
20
- Review this pull request as a QA engineer. /qa-review-pr
21
- List every API endpoint it adds or changes in endpoints.txt, one path per line, like /users/{id}.
22
- Leave the file empty when no endpoint changed.
31
+ Review this pull request for public API changes
32
+ List the API endpoints it adds or changes in endpoints.txt, one path per line like /users/{id}, empty if none.
33
+
23
34
  outputs: [endpoints.txt]
24
35
 
25
36
  - id: explore
37
+ title: API exploration
38
+ emoji: 🤖
26
39
  when: [api, explorbot-ai]
27
40
  each_line: endpoints.txt
28
- run: npx -y explorbot api explore "$ITEM" --style psycho
41
+ run: EXPLORBOT_OUTPUT="$STAGE_DIR/explorbot" npx -y explorbot api explore "$ITEM" --spec "$OPENAPI_SPEC"
29
42
  outputs: [explorbot/]
30
43
  timeout: 10m
31
44
 
32
45
  - id: results
46
+ title: Results
47
+ emoji: 📊
33
48
  session: qa
34
49
  when: [api, explorbot-ai]
35
50
  task: |
36
- Explorbot results are under explorbot/: plans, request logs, and a session report. Read them.
37
- Say which failures are real defects in this change: a broken contract, missing validation, a wrong status.
51
+ Read the Explorbot results in explorbot/ and say which failures are real defects in this change. /explorbot-fundamentals
38
52
  Fail the run if any is a real defect.
39
53
  inputs: [endpoints.txt, explorbot/]
@@ -1,41 +1,41 @@
1
1
  name: issue-test-cases
2
2
  description: Turn an issue or epic into test cases, and sync them to Testomat.io.
3
+ target: issue
3
4
 
4
5
  gates:
5
6
  issue:
6
7
  env: [ISSUE_URL]
7
8
  message: No issue. Set ISSUE_URL to the issue or epic to cover.
8
9
  testomatio:
9
- env: [TESTOMATIO, TESTOMATIO_PROJECT_ID]
10
- message: No Testomat.io project. Set TESTOMATIO and TESTOMATIO_PROJECT_ID.
10
+ env: [TESTOMATIO]
11
+ message: No Testomat.io project. Set TESTOMATIO API Key to import test cases
11
12
 
12
13
  when: [issue]
13
14
 
15
+ env:
16
+ # https://github.com/org/repo/issues/42 → org-repo-issues-42
17
+ TESTOMATIO_BRANCH: ${ISSUE_URL | path | slugify}
18
+
14
19
  stages:
15
20
  - id: requirements
21
+ title: Requirements
22
+ emoji: 📋
16
23
  session: analyst
17
- task: |
18
- Read the issue at ${ISSUE_URL}: its body, its comments, and every linked issue.
19
- An epic has sub-issues. Read each one. On GitHub, `gh issue view <url> --comments`
20
- reads an issue and `gh api repos/<owner>/<repo>/issues/<number>/sub_issues` lists sub-issues.
21
- Review the requirements as a QA engineer. /qa-requirement-reviewer
22
- Write the acceptance criteria to criteria.md, one section per sub-issue or feature area.
23
- End it with the open questions and gaps you found.
24
- The code here may not implement the issue yet. Read it only to use the real names of screens and terms.
25
- outputs: [criteria.md]
24
+ task: Review the requirements in ${ISSUE_URL}. /qa-requirement-reviewer
26
25
 
27
26
  - id: test-cases
27
+ title: Test cases
28
+ emoji: 📝
28
29
  session: writer
29
30
  task: |
30
- Write test cases from criteria.md. /qa-write-test-cases
31
- Put them in test-cases/, one markdown file per suite, one suite per sub-issue or feature area.
32
- Cover every criterion. A case that depends on an open question says so in its description.
33
- inputs: [criteria.md]
31
+ Write test cases from requirements.md. /qa-write-test-cases
32
+ Put them in test-cases/, one markdown file per suite.
33
+ inputs: [requirements.md]
34
34
  outputs: [test-cases/]
35
35
 
36
36
  - id: sync
37
+ title: Sync to Testomat.io
38
+ emoji: 🔄
37
39
  when: [testomatio]
38
- each_file: test-cases/*.md
39
40
  task: |
40
41
  Sync the test cases in ${ITEM} to Testomat.io. /sync-test-cases-with-tms
41
- Skip a case that already exists there.