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 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
@@ -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 { isAbsolute } from 'node:path';
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
- const server = new McpServer({ name: 'tewip', version: '0.5.0' });
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.32.0",
4
- "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.",
5
- "keywords": [
6
- "test-failures",
7
- "flaky-tests",
8
- "triage",
9
- "root-cause",
10
- "ci",
11
- "github-action",
12
- "playwright",
13
- "pytest",
14
- "jest",
15
- "vitest",
16
- "junit",
17
- "mcp",
18
- "ai-agent",
19
- "test-automation",
20
- "qa",
21
- "sdet",
22
- "devops"
23
- ],
24
- "homepage": "https://github.com/hmamut39/tewip#readme",
25
- "repository": {
26
- "type": "git",
27
- "url": "https://github.com/hmamut39/tewip.git"
28
- },
29
- "type": "module",
30
- "engines": {
31
- "node": ">=22.18"
32
- },
33
- "bin": {
34
- "tewip": "dist/cli/tewip.js"
35
- },
36
- "files": [
37
- "LICENSE",
38
- "QUICKSTART.md",
39
- "README.md",
40
- "TEAM-GUIDE.md",
41
- "dist/"
42
- ],
43
- "scripts": {
44
- "test": "playwright test",
45
- "test:loop": "node scripts/test-loop.ts 5",
46
- "history": "node scripts/history.ts",
47
- "diagnose": "node scripts/diagnose.ts",
48
- "triage": "node scripts/triage.ts",
49
- "explain": "node scripts/explain.ts",
50
- "lab": "node scripts/lab.ts",
51
- "test:engine": "node --test engine/test/*.test.ts outlets/test/*.test.ts mcp/test/*.test.ts",
52
- "mcp": "node mcp/server.ts",
53
- "eval": "node eval/evaluate.ts eval/ground-truth.jsonl --data data/real/gutenberg",
54
- "eval:holdout": "node eval/evaluate.ts eval/ground-truth.holdout.jsonl --data data/real/gutenberg-holdout",
55
- "eval:fresh": "node eval/evaluate.ts eval/ground-truth.fresh.jsonl --data data/real/gutenberg-fresh",
56
- "eval:aug": "node eval/evaluate.ts eval/ground-truth.aug.jsonl --data data/real/gutenberg-aug",
57
- "eval:aug2": "node eval/evaluate.ts eval/ground-truth.aug2.jsonl --data data/real/gutenberg-aug2",
58
- "eval:supabase": "node eval/evaluate.ts eval/ground-truth.supabase.jsonl --data data/real/supabase",
59
- "shadow": "node scripts/shadow.ts",
60
- "harvest": "node eval/harvest/harvest.ts",
61
- "eval:synthetic": "node eval/evaluate.ts eval/ground-truth.synthetic.jsonl",
62
- "typecheck": "tsc --noEmit",
63
- "build": "tsc -p tsconfig.build.json",
64
- "prepack": "npm run build",
65
- "tewip": "node cli/tewip.ts"
66
- },
67
- "license": "Apache-2.0",
68
- "devDependencies": {
69
- "@playwright/test": "^1.63.0",
70
- "@types/node": "^26.5.1",
71
- "typescript": "^7.0.2"
72
- },
73
- "dependencies": {
74
- "@modelcontextprotocol/sdk": "^1.30.0",
75
- "zod": "^4.6.5"
76
- },
77
- "bugs": {
78
- "url": "https://github.com/hmamut39/tewip/issues"
79
- },
80
- "author": "Hasan Mamut"
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
+ }