tewip-ai 0.32.0 → 0.33.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/README.md +16 -0
- package/dist/mcp/server.js +16 -2
- package/package.json +82 -81
package/README.md
CHANGED
|
@@ -114,6 +114,22 @@ The report reads the history cache of the branch it runs on, usually the default
|
|
|
114
114
|
|
|
115
115
|
The repository needs "Allow GitHub Actions to create and approve pull requests" enabled for fix PRs. Pull requests opened by the workflow token don't trigger CI themselves; the agent verified each change by re-running the test before opening the PR. See [triage-agent-sandbox](https://github.com/hmamut39/triage-agent-sandbox) for a working example. If this repository is private, other repositories can only use the action when Settings → Actions → Access allows it.
|
|
116
116
|
|
|
117
|
+
### As a Claude Code plugin (no account, no marketplace approval)
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
claude plugin marketplace add hmamut39/tewip
|
|
121
|
+
claude plugin install tewip@tewip
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
That is the whole publication process. A marketplace is a `.claude-plugin/marketplace.json` file in a git
|
|
125
|
+
repository, so Tewip ships one in its own repo - nobody has to approve it, and there is nothing to pay
|
|
126
|
+
for. The plugin brings Tewip's MCP server and three skills that tell Claude Code *when* to use it:
|
|
127
|
+
before claiming a change is done, when a test fails, and when a change touches a migration. It costs
|
|
128
|
+
about 410 tokens per session until a skill is actually needed.
|
|
129
|
+
|
|
130
|
+
The MCP server runs from the published package (`npx -y tewip-ai@latest mcp`), so the plugin stays small
|
|
131
|
+
and you always get the current version.
|
|
132
|
+
|
|
117
133
|
### The editor extension (VS Code, Cursor, Windsurf, VSCodium)
|
|
118
134
|
|
|
119
135
|
Download **[tewip-0.5.0.vsix](https://github.com/hmamut39/tewip/releases/tag/vscode-0.5.0)**, then in the
|
package/dist/mcp/server.js
CHANGED
|
@@ -8,11 +8,25 @@
|
|
|
8
8
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
9
9
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
10
10
|
import { existsSync } from 'node:fs';
|
|
11
|
-
import {
|
|
11
|
+
import { readFileSync } from 'node:fs';
|
|
12
|
+
import { isAbsolute, join } from 'node:path';
|
|
12
13
|
import { z } from 'zod';
|
|
13
14
|
import { githubCiReport } from './github-report.js';
|
|
14
15
|
import { explainFailure, listDatasets, listFailedRuns, runView, windowView } from './tools.js';
|
|
15
|
-
|
|
16
|
+
/**
|
|
17
|
+
* The version a client is told, read from the package rather than written here. It had drifted to 0.5.0
|
|
18
|
+
* while the package was at 0.32.0 - a small lie, but this server's whole job is to be the thing that
|
|
19
|
+
* does not say unverified numbers.
|
|
20
|
+
*/
|
|
21
|
+
const version = (() => {
|
|
22
|
+
try {
|
|
23
|
+
return JSON.parse(readFileSync(join(import.meta.dirname, '..', 'package.json'), 'utf8')).version ?? '0.0.0';
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return '0.0.0';
|
|
27
|
+
}
|
|
28
|
+
})();
|
|
29
|
+
const server = new McpServer({ name: 'tewip', version });
|
|
16
30
|
const readOnly = { readOnlyHint: true, destructiveHint: false, idempotentHint: true };
|
|
17
31
|
const dataset = z.string().optional().describe('Dataset directory relative to the Tewip repo, e.g. "data/real/gutenberg-holdout". Default: data/ (what the reporter collected). See list_datasets.');
|
|
18
32
|
const run = z.string().optional().describe('Run id or a unique part of it. Default: the latest run with failures.');
|
package/package.json
CHANGED
|
@@ -1,81 +1,82 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "tewip-ai",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"test
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"eval
|
|
55
|
-
"eval:
|
|
56
|
-
"eval:
|
|
57
|
-
"eval:
|
|
58
|
-
"eval:
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
"
|
|
69
|
-
|
|
70
|
-
"@
|
|
71
|
-
"
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
"
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "tewip-ai",
|
|
3
|
+
"version": "0.33.0",
|
|
4
|
+
"mcpName": "io.github.hmamut39/tewip",
|
|
5
|
+
"description": "Tewip finds why each failing test failed - real bug, flaky test, environment, test data or changed selector - for any stack, from the command line, CI, or your editor.",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"test-failures",
|
|
8
|
+
"flaky-tests",
|
|
9
|
+
"triage",
|
|
10
|
+
"root-cause",
|
|
11
|
+
"ci",
|
|
12
|
+
"github-action",
|
|
13
|
+
"playwright",
|
|
14
|
+
"pytest",
|
|
15
|
+
"jest",
|
|
16
|
+
"vitest",
|
|
17
|
+
"junit",
|
|
18
|
+
"mcp",
|
|
19
|
+
"ai-agent",
|
|
20
|
+
"test-automation",
|
|
21
|
+
"qa",
|
|
22
|
+
"sdet",
|
|
23
|
+
"devops"
|
|
24
|
+
],
|
|
25
|
+
"homepage": "https://github.com/hmamut39/tewip#readme",
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "https://github.com/hmamut39/tewip.git"
|
|
29
|
+
},
|
|
30
|
+
"type": "module",
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=22.18"
|
|
33
|
+
},
|
|
34
|
+
"bin": {
|
|
35
|
+
"tewip": "dist/cli/tewip.js"
|
|
36
|
+
},
|
|
37
|
+
"files": [
|
|
38
|
+
"LICENSE",
|
|
39
|
+
"QUICKSTART.md",
|
|
40
|
+
"README.md",
|
|
41
|
+
"TEAM-GUIDE.md",
|
|
42
|
+
"dist/"
|
|
43
|
+
],
|
|
44
|
+
"scripts": {
|
|
45
|
+
"test": "playwright test",
|
|
46
|
+
"test:loop": "node scripts/test-loop.ts 5",
|
|
47
|
+
"history": "node scripts/history.ts",
|
|
48
|
+
"diagnose": "node scripts/diagnose.ts",
|
|
49
|
+
"triage": "node scripts/triage.ts",
|
|
50
|
+
"explain": "node scripts/explain.ts",
|
|
51
|
+
"lab": "node scripts/lab.ts",
|
|
52
|
+
"test:engine": "node --test engine/test/*.test.ts outlets/test/*.test.ts mcp/test/*.test.ts",
|
|
53
|
+
"mcp": "node mcp/server.ts",
|
|
54
|
+
"eval": "node eval/evaluate.ts eval/ground-truth.jsonl --data data/real/gutenberg",
|
|
55
|
+
"eval:holdout": "node eval/evaluate.ts eval/ground-truth.holdout.jsonl --data data/real/gutenberg-holdout",
|
|
56
|
+
"eval:fresh": "node eval/evaluate.ts eval/ground-truth.fresh.jsonl --data data/real/gutenberg-fresh",
|
|
57
|
+
"eval:aug": "node eval/evaluate.ts eval/ground-truth.aug.jsonl --data data/real/gutenberg-aug",
|
|
58
|
+
"eval:aug2": "node eval/evaluate.ts eval/ground-truth.aug2.jsonl --data data/real/gutenberg-aug2",
|
|
59
|
+
"eval:supabase": "node eval/evaluate.ts eval/ground-truth.supabase.jsonl --data data/real/supabase",
|
|
60
|
+
"shadow": "node scripts/shadow.ts",
|
|
61
|
+
"harvest": "node eval/harvest/harvest.ts",
|
|
62
|
+
"eval:synthetic": "node eval/evaluate.ts eval/ground-truth.synthetic.jsonl",
|
|
63
|
+
"typecheck": "tsc --noEmit",
|
|
64
|
+
"build": "tsc -p tsconfig.build.json",
|
|
65
|
+
"prepack": "npm run build",
|
|
66
|
+
"tewip": "node cli/tewip.ts"
|
|
67
|
+
},
|
|
68
|
+
"license": "Apache-2.0",
|
|
69
|
+
"devDependencies": {
|
|
70
|
+
"@playwright/test": "^1.63.0",
|
|
71
|
+
"@types/node": "^26.5.1",
|
|
72
|
+
"typescript": "^7.0.2"
|
|
73
|
+
},
|
|
74
|
+
"dependencies": {
|
|
75
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
76
|
+
"zod": "^4.6.5"
|
|
77
|
+
},
|
|
78
|
+
"bugs": {
|
|
79
|
+
"url": "https://github.com/hmamut39/tewip/issues"
|
|
80
|
+
},
|
|
81
|
+
"author": "Hasan Mamut"
|
|
82
|
+
}
|