testeiya 0.3.10 → 0.3.15
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/README.md +55 -14
- package/dist/prompt/index.js +1 -1
- package/dist/prompt/system-prompt.js +3 -3
- package/dist/prompt/system-prompt.js.map +1 -1
- package/dist/prompt/tools.js +13 -0
- package/dist/prompt/tools.js.map +1 -1
- package/dist/src/args.js +70 -18
- package/dist/src/args.js.map +1 -1
- package/dist/src/cli.js +17 -9
- package/dist/src/cli.js.map +1 -1
- package/dist/src/doctor.js +15 -30
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/env.js +10 -0
- package/dist/src/env.js.map +1 -1
- package/dist/src/output.js +32 -1
- package/dist/src/output.js.map +1 -1
- package/dist/src/run.js +34 -12
- package/dist/src/run.js.map +1 -1
- package/dist/src/session.js +8 -2
- package/dist/src/session.js.map +1 -1
- package/dist/src/sessions.js +11 -0
- package/dist/src/sessions.js.map +1 -1
- package/dist/src/skills.js +130 -0
- package/dist/src/skills.js.map +1 -0
- package/package.json +1 -1
- package/prompt/index.ts +3 -3
- package/prompt/system-prompt.ts +5 -5
- package/prompt/tools.ts +15 -0
- package/skills/skills.lock.json +16 -15
- package/skills/skills.yaml +1 -0
- package/skills/testomatio/explorbot/prima/SKILL.md +87 -0
package/README.md
CHANGED
|
@@ -54,6 +54,7 @@ testeiya models anthropic # list what your key can reach
|
|
|
54
54
|
```bash
|
|
55
55
|
testeiya task "<task>" # run one task, deliver a report, exit
|
|
56
56
|
testeiya ask "<question>" # answer a question, no report
|
|
57
|
+
testeiya skills # list the skills bundled with this package
|
|
57
58
|
testeiya sessions # list saved sessions for this folder
|
|
58
59
|
```
|
|
59
60
|
|
|
@@ -66,6 +67,10 @@ The agent runs one task and exits. Progress goes to stderr, so a run drops into
|
|
|
66
67
|
| `2` | bad usage |
|
|
67
68
|
| `130` | interrupted |
|
|
68
69
|
|
|
70
|
+
Pass `--exit-zero` when a negative verdict must not fail the job. A broken run
|
|
71
|
+
still exits `1`, bad usage still exits `2`, and the verdict is still in the
|
|
72
|
+
report and in the run envelope for anything that wants to gate on it.
|
|
73
|
+
|
|
69
74
|
A task can come from stdin too:
|
|
70
75
|
|
|
71
76
|
```bash
|
|
@@ -274,6 +279,24 @@ Posting uses the GitHub CLI and resolves the PR number from `GITHUB_EVENT_PATH`,
|
|
|
274
279
|
`GITHUB_REF`, or `gh pr view` — so inside Actions it just works. Every
|
|
275
280
|
destination is checked before the run starts, so a missing `gh` costs no tokens.
|
|
276
281
|
|
|
282
|
+
`--footer "<text>"` adds a line under the report and `--header "<text>"` adds
|
|
283
|
+
one above. Both go wherever the report goes: stdout, the file, the posted
|
|
284
|
+
comment. A footer is what turns a posted report into a conversation: tell the
|
|
285
|
+
reader how to answer, and let the workflow feed their reply back into the same
|
|
286
|
+
session.
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
testeiya task "Review this pull request" \
|
|
290
|
+
--output gh:pr-comment \
|
|
291
|
+
--footer "> You can reply to this comment by typing /testeiya"
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
Write no footer of your own and the report is signed:
|
|
295
|
+
|
|
296
|
+
> *🧚🏻♀️ Provided by [Testeiya QA Agent](https://testomat.ai/testeiya) & claude-sonnet-5*
|
|
297
|
+
|
|
298
|
+
Pass `--no-default-footer`, or set `TESTEIYA_NO_DEFAULT_FOOTER`, to drop it.
|
|
299
|
+
|
|
277
300
|
## Sessions
|
|
278
301
|
|
|
279
302
|
Runs are saved under `~/.testeiya`, so a follow-up picks up where the last one
|
|
@@ -286,8 +309,17 @@ testeiya sessions
|
|
|
286
309
|
testeiya task "<task>" --resume <id>
|
|
287
310
|
```
|
|
288
311
|
|
|
289
|
-
Pass `--name` to label a session and `--no-session` to save nothing.
|
|
290
|
-
|
|
312
|
+
Pass `--name` to label a session and `--no-session` to save nothing.
|
|
313
|
+
|
|
314
|
+
In CI, `--session <label>` is the one to reach for: it continues the session
|
|
315
|
+
with that label, and starts it the first time, so a job that runs again and
|
|
316
|
+
again needs no "does it exist yet" branch. Give each thread its own label, and
|
|
317
|
+
carry `~/.testeiya` between rounds with the runner's cache. `--no-session` keeps
|
|
318
|
+
runners stateless when continuity is not wanted.
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
testeiya task "Review the new commits" --session "pr-42" --output gh:pr-comment
|
|
322
|
+
```
|
|
291
323
|
|
|
292
324
|
## Testomat.io
|
|
293
325
|
|
|
@@ -305,20 +337,29 @@ points at a self-hosted instance.
|
|
|
305
337
|
|
|
306
338
|
## Skills
|
|
307
339
|
|
|
308
|
-
A skill is a folder with a `SKILL.md`. The agent
|
|
309
|
-
ones a task calls for
|
|
310
|
-
does.
|
|
340
|
+
A skill is a folder with a `SKILL.md`. The agent sees them all and reaches for
|
|
341
|
+
the ones a task calls for. Name one with a slash to make it certain:
|
|
311
342
|
|
|
312
|
-
|
|
343
|
+
```bash
|
|
344
|
+
testeiya task "Review this pull request as a QA engineer /qa-thinking"
|
|
345
|
+
```
|
|
313
346
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
347
|
+
That skill is loaded in front of the task before the run starts, so it does not
|
|
348
|
+
depend on the model deciding to open it. A name the package does not ship is
|
|
349
|
+
left as plain text, which keeps a task safe to build from someone else's words —
|
|
350
|
+
a `/word` in a pull request comment stays a word.
|
|
351
|
+
|
|
352
|
+
The set is vendored from upstream repositories and moves with every release, so
|
|
353
|
+
ask your own install rather than a list in a README:
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
testeiya skills # every bundled skill: name and what it is for
|
|
357
|
+
testeiya skills playwright # filter by name, category or description
|
|
358
|
+
testeiya skills --json # [{name, group, description}]
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
Categories today: QA process, test management, test automation, Explorbot,
|
|
362
|
+
Playwright, CodeceptJS.
|
|
322
363
|
|
|
323
364
|
Sources are declared in `skills/skills.yaml` and pinned in
|
|
324
365
|
`skills/skills.lock.json`. The vendored folders are deliberately not committed —
|
package/dist/prompt/index.js
CHANGED
|
@@ -16,7 +16,7 @@ export function buildSystemPrompt(options) {
|
|
|
16
16
|
toolBullets: options?.toolBullets,
|
|
17
17
|
rules: options?.rules,
|
|
18
18
|
connectedClis: options?.connectedClis,
|
|
19
|
-
|
|
19
|
+
connectedMcps: options?.connectedMcps,
|
|
20
20
|
}),
|
|
21
21
|
];
|
|
22
22
|
const tokenSlugs = options?.tokens ? Object.keys(options.tokens) : [];
|
|
@@ -9,8 +9,8 @@ export function getSystemPrompt(cwd, options) {
|
|
|
9
9
|
let extraRules = "";
|
|
10
10
|
for (const rule of options?.rules ?? [])
|
|
11
11
|
extraRules += ` * ${rule}\n`;
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const cliList = (options?.connectedClis ?? []).join(", ") || "none connected yet";
|
|
13
|
+
const mcpList = (options?.connectedMcps ?? []).join(", ") || "none connected yet";
|
|
14
14
|
return dedent `
|
|
15
15
|
<role>
|
|
16
16
|
You are Testeiya, an AI agent that helps with QA tasks.
|
|
@@ -93,7 +93,7 @@ export function getSystemPrompt(cwd, options) {
|
|
|
93
93
|
Testeiya connects external tools for you — CLI tools and MCP servers. This session has:
|
|
94
94
|
|
|
95
95
|
* **Connected CLIs:** ${cliList}
|
|
96
|
-
* **
|
|
96
|
+
* **Connected MCP servers:** ${mcpList}
|
|
97
97
|
|
|
98
98
|
* **Missing Connection — Ask, Never Improvise:** When a task needs a tool that is not in the lists above, STOP and ask the user to connect it in Testeiya (Settings → Connections). Never reach the service sideways: no raw REST/GraphQL calls against its API, no scraping credentials from dotfiles or env dumps, no installing binaries on your own.
|
|
99
99
|
* If a task needs both a CLI and an MCP server, ask once for both and say that Testeiya supports them both as connections — the user installs them side by side there.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../prompt/system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,OAAuB;IACnE,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC;IACjD,IAAI,mBAAmB,GAAG,qCAAqC,CAAC;IAChE,IAAI,CAAC,WAAW;QAAE,mBAAmB,GAAG,uCAAuC,CAAC;IAChF,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,KAAK,IAAI,EAAE;QAAE,UAAU,IAAI,SAAS,IAAI,IAAI,CAAC;IACzE,
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../prompt/system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,OAAuB;IACnE,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC;IACjD,IAAI,mBAAmB,GAAG,qCAAqC,CAAC;IAChE,IAAI,CAAC,WAAW;QAAE,mBAAmB,GAAG,uCAAuC,CAAC;IAChF,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,KAAK,IAAI,EAAE;QAAE,UAAU,IAAI,SAAS,IAAI,IAAI,CAAC;IACzE,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC;IAClF,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC;IAClF,OAAO,MAAM,CAAA;;;;;;;;;;;qBAWM,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;oEAC2B,iBAAiB;yEACZ,iBAAiB;uCACnD,iBAAiB;wEACgB,iBAAiB;0BAC/D,iBAAiB,0GAA0G,iBAAiB,0DAA0D,iBAAiB;;yHAExH,iBAAiB;;;;2CAI/F,iBAAiB;UAClD,iBAAiB;;;;;;;gWAOqU,iBAAiB;2FACtR,iBAAiB,sJAAsJ,iBAAiB;;6EAEtM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAyCxF,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;IAExC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;;;;;4BAKd,OAAO;mCACA,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA2BV,WAAW,CAAC,CAAC,CAAC,sEAAsE,CAAC,CAAC,CAAC,6EAA6E;;;;;;;;;;;;;;;;;;;EAmBlM,UAAU,6HAA6H,mBAAmB;;;;;gFAK5E,iBAAiB;;;;GAI9F,CAAC;AACJ,CAAC;AAeD;;;;;;;;;;;;;;;;;;;;EAoBE"}
|
package/dist/prompt/tools.js
CHANGED
|
@@ -54,4 +54,17 @@ function onPath(bin) {
|
|
|
54
54
|
}
|
|
55
55
|
return false;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* CLIs Testeiya knows how to connect, probed on PATH — the same trio routed in
|
|
59
|
+
* `<available-tools>` above. Shared with the prompt's connections section so
|
|
60
|
+
* the two can never disagree about whether `gh` etc. exist.
|
|
61
|
+
*/
|
|
62
|
+
export const KNOWN_CLIS = [
|
|
63
|
+
{ bin: 'gh', label: 'gh (GitHub CLI)' },
|
|
64
|
+
{ bin: 'acli', label: 'acli (Atlassian CLI)' },
|
|
65
|
+
{ bin: 'glab', label: 'glab (GitLab CLI)' },
|
|
66
|
+
];
|
|
67
|
+
export function pathClis() {
|
|
68
|
+
return KNOWN_CLIS.filter((c) => onPath(c.bin)).map((c) => c.label);
|
|
69
|
+
}
|
|
57
70
|
//# sourceMappingURL=tools.js.map
|
package/dist/prompt/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../prompt/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,OAA8B;IAClD,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAG,gDAAgD,CAAC;IAC/D,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,OAAO;YACL,8JAA8J,CAAC;IACnK,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,OAAO;YACL,0LAA0L,CAAC;IAC/L,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,OAAO;YACL,kNAAkN,CAAC;IACvN,CAAC;IACD,OAAO,MAAM,CAAA;;;;;;;EAOb,KAAK;;;;EAIL,OAAO;;;;;;;;;CASR,CAAC;AACF,CAAC;AAED,oFAAoF;AACpF,SAAS,MAAM,CAAC,GAAW;IACzB,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACrF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../prompt/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,OAA8B;IAClD,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAG,gDAAgD,CAAC;IAC/D,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,OAAO;YACL,8JAA8J,CAAC;IACnK,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,OAAO;YACL,0LAA0L,CAAC;IAC/L,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,OAAO;YACL,kNAAkN,CAAC;IACvN,CAAC;IACD,OAAO,MAAM,CAAA;;;;;;;EAOb,KAAK;;;;EAIL,OAAO;;;;;;;;;CASR,CAAC;AACF,CAAC;AAED,oFAAoF;AACpF,SAAS,MAAM,CAAC,GAAW;IACzB,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACrF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAqC;IAC1D,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACvC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAC9C,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE;CAC5C,CAAC;AAEF,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC"}
|
package/dist/src/args.js
CHANGED
|
@@ -16,27 +16,34 @@ Usage:
|
|
|
16
16
|
testeiya ask "<question>" answer a question
|
|
17
17
|
testeiya doctor check what a run would resolve
|
|
18
18
|
testeiya models [pattern] list the models your key can reach
|
|
19
|
+
testeiya skills [pattern] list the skills bundled with this package
|
|
19
20
|
testeiya sessions list saved sessions for this folder
|
|
20
21
|
|
|
21
22
|
Options:
|
|
22
|
-
-o, --output <dest>
|
|
23
|
-
--model <id>
|
|
24
|
-
--project <id>
|
|
25
|
-
-c, --continue
|
|
26
|
-
--resume <id>
|
|
27
|
-
--
|
|
28
|
-
--
|
|
29
|
-
--
|
|
30
|
-
--
|
|
31
|
-
|
|
32
|
-
|
|
23
|
+
-o, --output <dest> report destination, repeatable: file.md, file.json, gh:pr-comment
|
|
24
|
+
--model <id> provider/model to run
|
|
25
|
+
--project <id> Testomat.io project id
|
|
26
|
+
-c, --continue continue the last session in this folder
|
|
27
|
+
--resume <id> continue that session
|
|
28
|
+
--session <label> continue the session with that name, or start it
|
|
29
|
+
--name <label> name the session
|
|
30
|
+
--no-session do not save the session
|
|
31
|
+
--exit-zero a negative verdict exits 0
|
|
32
|
+
--header <text> line added above the report
|
|
33
|
+
--footer <text> line added under the report
|
|
34
|
+
--no-default-footer do not sign the report
|
|
35
|
+
--json machine-readable output
|
|
36
|
+
--probe doctor only: test the key with one request
|
|
37
|
+
-h, --help show this
|
|
38
|
+
-v, --version show version
|
|
33
39
|
|
|
34
40
|
Environment:
|
|
35
|
-
TESTEIYA_MODEL
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
TESTEIYA_MODEL model to run, e.g. openrouter/anthropic/claude-sonnet-5
|
|
42
|
+
TESTEIYA_NO_DEFAULT_FOOTER do not sign the report
|
|
43
|
+
OPENROUTER_API_KEY provider key, also ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY
|
|
44
|
+
TESTOMATIO Testomat.io project API key
|
|
45
|
+
TESTOMATIO_PROJECT_ID Testomat.io project id, same as --project
|
|
46
|
+
TESTOMATIO_URL Testomat.io base url, for self-hosted
|
|
40
47
|
|
|
41
48
|
Run "testeiya help" for the full guide.`;
|
|
42
49
|
export const HELP = `${USAGE}
|
|
@@ -51,6 +58,10 @@ Running a task
|
|
|
51
58
|
|
|
52
59
|
Exit codes: 0 pass, 1 failed run or negative verdict, 2 bad usage, 130 interrupted.
|
|
53
60
|
|
|
61
|
+
--exit-zero keeps a negative verdict from failing the command: a broken run
|
|
62
|
+
still exits 1 and bad usage still exits 2. The verdict is still in the report
|
|
63
|
+
and in the run envelope, so a pipeline can gate on it when it wants to.
|
|
64
|
+
|
|
54
65
|
Where the report goes
|
|
55
66
|
|
|
56
67
|
--output names a destination and can repeat. Without one the report goes to
|
|
@@ -61,6 +72,16 @@ Where the report goes
|
|
|
61
72
|
gh:pr-comment posted on this branch's pull request, through the GitHub CLI
|
|
62
73
|
gh:pr#123 posted on that pull request
|
|
63
74
|
|
|
75
|
+
--footer adds a line under the report and --header adds one above. Both go
|
|
76
|
+
wherever the report goes: stdout, the file, the posted comment. Use --footer
|
|
77
|
+
to say how to answer a comment, e.g. --footer "> Reply with /testeiya".
|
|
78
|
+
|
|
79
|
+
The report is signed, unless you write your own footer:
|
|
80
|
+
|
|
81
|
+
*🧚🏻♀️ Provided by [Testeiya QA Agent](https://testomat.ai/testeiya) & <model>*
|
|
82
|
+
|
|
83
|
+
--no-default-footer drops the signature, so does TESTEIYA_NO_DEFAULT_FOOTER.
|
|
84
|
+
|
|
64
85
|
Every destination is checked before the run starts, so a missing gh costs no
|
|
65
86
|
tokens.
|
|
66
87
|
|
|
@@ -79,6 +100,18 @@ Sessions
|
|
|
79
100
|
stopped. -c continues the last session in this folder, --resume <id> picks
|
|
80
101
|
another, --name labels one, and --no-session saves nothing.
|
|
81
102
|
|
|
103
|
+
--session <label> is the one for a job that runs again and again: it continues
|
|
104
|
+
the session with that name, and starts it the first time. Give each thread its
|
|
105
|
+
own label and they never mix.
|
|
106
|
+
|
|
107
|
+
Skills
|
|
108
|
+
|
|
109
|
+
The package ships the skills the agent reads, and only those: skills found in
|
|
110
|
+
the folder it runs in are ignored, so a checkout cannot hand it its own.
|
|
111
|
+
"testeiya skills" lists them. Name one in the task with a slash and it is
|
|
112
|
+
loaded before the run, e.g. "/qa-thinking". A name we do not ship is left
|
|
113
|
+
alone, so a stray "/word" in the task is just a word.
|
|
114
|
+
|
|
82
115
|
Testomat.io
|
|
83
116
|
|
|
84
117
|
Set TESTOMATIO to a project API key and the agent reads and writes that
|
|
@@ -86,7 +119,7 @@ Testomat.io
|
|
|
86
119
|
Add the project id, with --project or TESTOMATIO_PROJECT_ID, and it also gets
|
|
87
120
|
the Testomat.io tools. The MCP server needs the id: a token alone does not say
|
|
88
121
|
which project to talk to.`;
|
|
89
|
-
export const COMMANDS = ["task", "ask", "models", "doctor", "sessions", "help"];
|
|
122
|
+
export const COMMANDS = ["task", "ask", "models", "skills", "doctor", "sessions", "help"];
|
|
90
123
|
export function parseCliArgs(argv) {
|
|
91
124
|
const first = argv[0];
|
|
92
125
|
if (!first)
|
|
@@ -116,7 +149,7 @@ export function parseCliArgs(argv) {
|
|
|
116
149
|
const text = parsed.positionals.join(" ").trim();
|
|
117
150
|
if ((first === "task" || first === "ask") && text)
|
|
118
151
|
args.prompt = text;
|
|
119
|
-
if (first === "models" && text)
|
|
152
|
+
if ((first === "models" || first === "skills") && text)
|
|
120
153
|
args.pattern = text;
|
|
121
154
|
if (Array.isArray(values.output))
|
|
122
155
|
args.outputs = values.output;
|
|
@@ -132,10 +165,23 @@ export function parseCliArgs(argv) {
|
|
|
132
165
|
args.continueLast = true;
|
|
133
166
|
if (typeof values.resume === "string")
|
|
134
167
|
args.resume = values.resume;
|
|
168
|
+
if (typeof values.session === "string")
|
|
169
|
+
args.session = values.session;
|
|
135
170
|
if (typeof values.name === "string")
|
|
136
171
|
args.name = values.name;
|
|
137
172
|
if (values["no-session"])
|
|
138
173
|
args.noSession = true;
|
|
174
|
+
if (values["exit-zero"])
|
|
175
|
+
args.exitZero = true;
|
|
176
|
+
if (typeof values.header === "string")
|
|
177
|
+
args.header = values.header;
|
|
178
|
+
if (typeof values.footer === "string")
|
|
179
|
+
args.footer = values.footer;
|
|
180
|
+
if (values["no-default-footer"])
|
|
181
|
+
args.noDefaultFooter = true;
|
|
182
|
+
if (args.session && (args.continueLast || args.resume || args.name || args.noSession)) {
|
|
183
|
+
return { error: "--session already names and continues a session" };
|
|
184
|
+
}
|
|
139
185
|
return args;
|
|
140
186
|
}
|
|
141
187
|
const HELP_FLAG = { type: "boolean", short: "h" };
|
|
@@ -147,14 +193,20 @@ const RUN_OPTIONS = {
|
|
|
147
193
|
project: { type: "string" },
|
|
148
194
|
continue: { type: "boolean", short: "c" },
|
|
149
195
|
resume: { type: "string" },
|
|
196
|
+
session: { type: "string" },
|
|
150
197
|
name: { type: "string" },
|
|
151
198
|
"no-session": { type: "boolean" },
|
|
199
|
+
"exit-zero": { type: "boolean" },
|
|
200
|
+
header: { type: "string" },
|
|
201
|
+
footer: { type: "string" },
|
|
202
|
+
"no-default-footer": { type: "boolean" },
|
|
152
203
|
help: HELP_FLAG,
|
|
153
204
|
};
|
|
154
205
|
const OPTIONS = {
|
|
155
206
|
task: RUN_OPTIONS,
|
|
156
207
|
ask: RUN_OPTIONS,
|
|
157
208
|
models: { json: JSON_FLAG, help: HELP_FLAG },
|
|
209
|
+
skills: { json: JSON_FLAG, help: HELP_FLAG },
|
|
158
210
|
doctor: { json: JSON_FLAG, probe: { type: "boolean" }, model: { type: "string" }, help: HELP_FLAG },
|
|
159
211
|
sessions: { json: JSON_FLAG, help: HELP_FLAG },
|
|
160
212
|
help: {},
|
package/dist/src/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwB,MAAM,WAAW,CAAC;AAE5D,MAAM,CAAC,MAAM,OAAO,GAAG;;;;;;;;;CAStB,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/args.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { readFileSync } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
2
|
import { HELP, parseCliArgs, USAGE, WELCOME } from "./args.js";
|
|
5
3
|
import { runDoctor } from "./doctor.js";
|
|
6
|
-
import { loadEnvFiles,
|
|
4
|
+
import { loadEnvFiles, VERSION } from "./env.js";
|
|
7
5
|
import { UsageError } from "./model.js";
|
|
8
6
|
import { runModels } from "./models.js";
|
|
7
|
+
import { runSkills } from "./skills.js";
|
|
9
8
|
import { parseDestinations, preflight } from "./output.js";
|
|
10
9
|
import { runPrint } from "./run.js";
|
|
11
10
|
import { openSessionManager, runSessions } from "./sessions.js";
|
|
@@ -33,7 +32,7 @@ async function main(argv) {
|
|
|
33
32
|
return;
|
|
34
33
|
}
|
|
35
34
|
if (args.command === "version") {
|
|
36
|
-
process.stdout.write(`${
|
|
35
|
+
process.stdout.write(`${VERSION}\n`);
|
|
37
36
|
return;
|
|
38
37
|
}
|
|
39
38
|
const envSources = loadEnvFiles();
|
|
@@ -44,6 +43,8 @@ async function main(argv) {
|
|
|
44
43
|
try {
|
|
45
44
|
if (args.command === "models")
|
|
46
45
|
process.exit(await runModels(args.pattern, args.json));
|
|
46
|
+
if (args.command === "skills")
|
|
47
|
+
process.exit(await runSkills(args.pattern, args.json));
|
|
47
48
|
if (args.command === "doctor") {
|
|
48
49
|
process.exit(await runDoctor({ envSources, json: args.json, probe: args.probe, model: args.model }));
|
|
49
50
|
}
|
|
@@ -80,7 +81,18 @@ async function task(args) {
|
|
|
80
81
|
if (!args.noSession)
|
|
81
82
|
sessionId = sessionManager.getSessionId();
|
|
82
83
|
const brief = args.command === "ask";
|
|
83
|
-
return runPrint({
|
|
84
|
+
return runPrint({
|
|
85
|
+
prompt,
|
|
86
|
+
destinations,
|
|
87
|
+
sessionManager,
|
|
88
|
+
sessionId,
|
|
89
|
+
brief,
|
|
90
|
+
model: args.model,
|
|
91
|
+
exitZero: args.exitZero,
|
|
92
|
+
header: args.header,
|
|
93
|
+
footer: args.footer,
|
|
94
|
+
noDefaultFooter: args.noDefaultFooter,
|
|
95
|
+
});
|
|
84
96
|
}
|
|
85
97
|
async function readStdin() {
|
|
86
98
|
if (process.stdin.isTTY)
|
|
@@ -90,8 +102,4 @@ async function readStdin() {
|
|
|
90
102
|
chunks.push(chunk);
|
|
91
103
|
return Buffer.concat(chunks).toString("utf8");
|
|
92
104
|
}
|
|
93
|
-
function version() {
|
|
94
|
-
const pkg = JSON.parse(readFileSync(join(PACKAGE_ROOT, "package.json"), "utf8"));
|
|
95
|
-
return pkg.version;
|
|
96
|
-
}
|
|
97
105
|
//# sourceMappingURL=cli.js.map
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/src/doctor.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
|
-
import {
|
|
3
|
-
import { dirname, relative } from "node:path";
|
|
2
|
+
import { relative } from "node:path";
|
|
4
3
|
import { fileURLToPath } from "node:url";
|
|
5
4
|
import { TESTEIYA_HOME } from "./env.js";
|
|
6
5
|
import { hasMcp, hasTestomatio, metadataCachePath, vendorBundle } from "./mcp.js";
|
|
7
6
|
import { PROVIDER_KEYS, resolveModel, UsageError } from "./model.js";
|
|
8
|
-
import {
|
|
7
|
+
import { loadBundledSkills } from "./skills.js";
|
|
8
|
+
import { BUNDLED_SKILLS_DIR, createRuntime } from "./session.js";
|
|
9
9
|
const MIN_NODE = [22, 19];
|
|
10
10
|
/**
|
|
11
11
|
* Everything a run resolves silently: which key file won, whether skills loaded,
|
|
@@ -81,22 +81,15 @@ function modelCheck(runtime, explicit) {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
async function skillsChecks() {
|
|
84
|
-
const
|
|
85
|
-
cwd: process.cwd(),
|
|
86
|
-
settingsManager: SettingsManager.inMemory(),
|
|
87
|
-
extensionPaths: [],
|
|
88
|
-
systemPrompt: () => "",
|
|
89
|
-
});
|
|
90
|
-
await loader.reload();
|
|
91
|
-
const { skills, diagnostics } = loader.getSkills();
|
|
92
|
-
const groups = byGroup(skills);
|
|
84
|
+
const { count, groups, diagnostics } = await loadBundledSkills();
|
|
93
85
|
const checks = [];
|
|
94
|
-
if (
|
|
86
|
+
if (count === 0) {
|
|
95
87
|
checks.push({ name: "skills", status: "warn", detail: "none loaded" });
|
|
96
88
|
}
|
|
97
|
-
if (
|
|
98
|
-
checks.push({ name: "skills", status: "ok", detail: `${
|
|
99
|
-
for (const
|
|
89
|
+
if (count > 0) {
|
|
90
|
+
checks.push({ name: "skills", status: "ok", detail: `${count} loaded` });
|
|
91
|
+
for (const { group, skills } of groups) {
|
|
92
|
+
const names = skills.map((skill) => skill.name);
|
|
100
93
|
checks.push({ name: "", status: "list", detail: `${group.padEnd(28)} ${summarize(names)}` });
|
|
101
94
|
}
|
|
102
95
|
}
|
|
@@ -108,7 +101,11 @@ async function skillsChecks() {
|
|
|
108
101
|
detail = `${detail} — ${shorten(diagnostic.path)}`;
|
|
109
102
|
checks.push({ name: "skills", status, detail });
|
|
110
103
|
}
|
|
111
|
-
|
|
104
|
+
const listed = groups.map(({ group, skills }) => ({
|
|
105
|
+
group,
|
|
106
|
+
skills: skills.map((skill) => skill.name),
|
|
107
|
+
}));
|
|
108
|
+
return { checks, groups: listed };
|
|
112
109
|
}
|
|
113
110
|
function shorten(path) {
|
|
114
111
|
const inBundle = relative(BUNDLED_SKILLS_DIR, path);
|
|
@@ -116,24 +113,12 @@ function shorten(path) {
|
|
|
116
113
|
return path;
|
|
117
114
|
return inBundle;
|
|
118
115
|
}
|
|
119
|
-
// The full list is
|
|
116
|
+
// The full list is `testeiya skills`; this line only proves the right set loaded.
|
|
120
117
|
function summarize(names) {
|
|
121
118
|
if (names.length <= 6)
|
|
122
119
|
return names.join(", ");
|
|
123
120
|
return `${names.slice(0, 6).join(", ")}, +${names.length - 6}`;
|
|
124
121
|
}
|
|
125
|
-
function byGroup(skills) {
|
|
126
|
-
const groups = new Map();
|
|
127
|
-
for (const skill of skills) {
|
|
128
|
-
let group = dirname(relative(BUNDLED_SKILLS_DIR, skill.baseDir));
|
|
129
|
-
if (group === "." || group.startsWith(".."))
|
|
130
|
-
group = "bundled";
|
|
131
|
-
const names = groups.get(group) ?? [];
|
|
132
|
-
names.push(skill.name);
|
|
133
|
-
groups.set(group, names);
|
|
134
|
-
}
|
|
135
|
-
return groups;
|
|
136
|
-
}
|
|
137
122
|
function testomatioCheck() {
|
|
138
123
|
if (!hasTestomatio()) {
|
|
139
124
|
return { name: "testomatio", status: "warn", detail: "no TESTOMATIO token, not connected" };
|
package/dist/src/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/src/env.js
CHANGED
|
@@ -11,6 +11,8 @@ export const TESTEIYA_HOME = join(homedir(), ".testeiya");
|
|
|
11
11
|
* built, `src` when run from source. Bundled files resolve from here.
|
|
12
12
|
*/
|
|
13
13
|
export const PACKAGE_ROOT = packageRoot();
|
|
14
|
+
/** This package's version, read from the same package.json. */
|
|
15
|
+
export const VERSION = packageVersion();
|
|
14
16
|
/**
|
|
15
17
|
* Where pi keeps its own state for this CLI. Deliberately not `~/.pi` — running
|
|
16
18
|
* `npx testeiya` must not write into a user's own pi installation.
|
|
@@ -80,6 +82,14 @@ function loadFile(path, sources) {
|
|
|
80
82
|
sources.set(key, path);
|
|
81
83
|
}
|
|
82
84
|
}
|
|
85
|
+
function packageVersion() {
|
|
86
|
+
try {
|
|
87
|
+
return JSON.parse(readFileSync(join(PACKAGE_ROOT, "package.json"), "utf8")).version ?? "";
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return "";
|
|
91
|
+
}
|
|
92
|
+
}
|
|
83
93
|
function packageRoot() {
|
|
84
94
|
let dir = import.meta.dirname;
|
|
85
95
|
while (!existsSync(join(dir, "package.json"))) {
|
package/dist/src/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/env.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/env.ts"],"names":[],"mappings":"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"}
|