@claude-flow/cli 3.13.3 → 3.14.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.
@@ -25,4 +25,5 @@ export { ruvllmWasmTools } from './ruvllm-tools.js';
25
25
  export { guidanceTools } from './guidance-tools.js';
26
26
  export { autopilotTools } from './autopilot-tools.js';
27
27
  export { metaharnessTools } from './metaharness-tools.js';
28
+ export { testgenTools } from './testgen-tools.js';
28
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -25,4 +25,6 @@ export { guidanceTools } from './guidance-tools.js';
25
25
  export { autopilotTools } from './autopilot-tools.js';
26
26
  // ADR-150 — MetaHarness MCP tools (score / genome / mcp-scan / threat-model / oia-audit)
27
27
  export { metaharnessTools } from './metaharness-tools.js';
28
+ // ADR-175-inspired — Test-Driven Repair via headless `claude -p`
29
+ export { testgenTools } from './testgen-tools.js';
28
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp-tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,yFAAyF;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp-tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,yFAAyF;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,iEAAiE;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Testgen MCP Tools — Test-Driven Repair surface.
3
+ *
4
+ * Exposes `ruflo-testgen` plugin scripts as first-class MCP tools so
5
+ * agents (Claude Code, Codex, etc.) can invoke them programmatically.
6
+ *
7
+ * Current surface (one tool, narrow on purpose — Conformant mode follows
8
+ * in a separate ADR):
9
+ *
10
+ * - testgen_tdd_repair Test-Driven Repair via headless `claude -p`
11
+ * (read failing test → fix source → verify)
12
+ *
13
+ * Inspired by agent-harness-generator/packages/darwin-mode ADR-175.
14
+ *
15
+ * ARCHITECTURAL CONSTRAINT (mirrors metaharness-tools.ts)
16
+ * Zero static `ruflo-testgen/*` imports. All script invocation stays
17
+ * behind a subprocess bridge. When the plugin isn't reachable at
18
+ * runtime, the tool returns `{success: true, degraded: true,
19
+ * reason: 'plugin-not-found'}` and exits 0 — same posture as
20
+ * metaharness-tools so callers see one contract.
21
+ *
22
+ * @module @claude-flow/cli/mcp-tools/testgen
23
+ */
24
+ import type { MCPTool } from './types.js';
25
+ export declare const testgenTools: MCPTool[];
26
+ //# sourceMappingURL=testgen-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testgen-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp-tools/testgen-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AA8F1C,eAAO,MAAM,YAAY,EAAE,OAAO,EAwCjC,CAAC"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Testgen MCP Tools — Test-Driven Repair surface.
3
+ *
4
+ * Exposes `ruflo-testgen` plugin scripts as first-class MCP tools so
5
+ * agents (Claude Code, Codex, etc.) can invoke them programmatically.
6
+ *
7
+ * Current surface (one tool, narrow on purpose — Conformant mode follows
8
+ * in a separate ADR):
9
+ *
10
+ * - testgen_tdd_repair Test-Driven Repair via headless `claude -p`
11
+ * (read failing test → fix source → verify)
12
+ *
13
+ * Inspired by agent-harness-generator/packages/darwin-mode ADR-175.
14
+ *
15
+ * ARCHITECTURAL CONSTRAINT (mirrors metaharness-tools.ts)
16
+ * Zero static `ruflo-testgen/*` imports. All script invocation stays
17
+ * behind a subprocess bridge. When the plugin isn't reachable at
18
+ * runtime, the tool returns `{success: true, degraded: true,
19
+ * reason: 'plugin-not-found'}` and exits 0 — same posture as
20
+ * metaharness-tools so callers see one contract.
21
+ *
22
+ * @module @claude-flow/cli/mcp-tools/testgen
23
+ */
24
+ import { spawn } from 'node:child_process';
25
+ import { existsSync } from 'node:fs';
26
+ import { dirname, join, resolve } from 'node:path';
27
+ import { fileURLToPath } from 'node:url';
28
+ import { getProjectCwd } from './types.js';
29
+ const __filename = fileURLToPath(import.meta.url);
30
+ const __dirname = dirname(__filename);
31
+ /**
32
+ * Locate the ruflo-testgen plugin's scripts directory.
33
+ *
34
+ * Mirrors `metaharness-tools.ts::locatePluginScripts()` strategy but
35
+ * targets the testgen plugin. Walks up from this module's own location
36
+ * (covers npx + global install) then falls back to cwd-walks. We probe
37
+ * for `tdd-repair/tdd-repair.mjs` (the only script in this surface
38
+ * today) — when that lands at a candidate path, we've found the dir.
39
+ */
40
+ function locateTestgenScripts() {
41
+ const candidates = [];
42
+ let p = resolve(__dirname);
43
+ for (let i = 0; i < 8; i++) {
44
+ candidates.push(join(p, 'plugins', 'ruflo-testgen', 'scripts'));
45
+ candidates.push(join(p, '..', 'plugins', 'ruflo-testgen', 'scripts'));
46
+ p = dirname(p);
47
+ }
48
+ const cwd = getProjectCwd();
49
+ candidates.push(join(cwd, 'plugins', 'ruflo-testgen', 'scripts'));
50
+ candidates.push(join(cwd, 'node_modules', '@claude-flow', 'cli', 'plugins', 'ruflo-testgen', 'scripts'));
51
+ for (const c of candidates) {
52
+ if (existsSync(join(c, 'tdd-repair', 'tdd-repair.mjs')))
53
+ return c;
54
+ }
55
+ return null;
56
+ }
57
+ /**
58
+ * Run a testgen plugin script with the same success-semantics contract
59
+ * as metaharness-tools.ts (exit 0 ⇒ success: true even if degraded).
60
+ */
61
+ function runTestgenScript(scriptName, args) {
62
+ return new Promise((resolve) => {
63
+ const dir = locateTestgenScripts();
64
+ if (!dir) {
65
+ resolve({
66
+ exitCode: 0,
67
+ json: { degraded: true, reason: 'plugin-not-found' },
68
+ degraded: true,
69
+ success: true,
70
+ });
71
+ return;
72
+ }
73
+ const scriptPath = join(dir, scriptName);
74
+ const p = spawn('node', [scriptPath, ...args], {
75
+ stdio: ['ignore', 'pipe', 'pipe'],
76
+ env: process.env,
77
+ });
78
+ let stdout = '';
79
+ p.stdout?.on('data', (d) => { stdout += d.toString(); });
80
+ p.stderr?.on('data', () => { });
81
+ // 20 min hard ceiling (tdd-repair has its own 15 min cap; we add 5 min slack)
82
+ const timer = setTimeout(() => { try {
83
+ p.kill('SIGTERM');
84
+ }
85
+ catch { /* ignore */ } }, 20 * 60_000);
86
+ p.on('close', (code) => {
87
+ clearTimeout(timer);
88
+ let json = null;
89
+ const m = /\{[\s\S]*\}/.exec(stdout);
90
+ if (m) {
91
+ try {
92
+ json = JSON.parse(m[0]);
93
+ }
94
+ catch { /* leave null */ }
95
+ }
96
+ const looksDegraded = !!(json && typeof json === 'object' && json.data?.reason === 'plugin-not-found');
97
+ const exitCode = code ?? 0;
98
+ resolve({
99
+ exitCode,
100
+ json,
101
+ degraded: looksDegraded,
102
+ success: exitCode === 0,
103
+ });
104
+ });
105
+ p.on('error', () => {
106
+ clearTimeout(timer);
107
+ resolve({
108
+ exitCode: 127,
109
+ json: { degraded: true, reason: 'spawn-failed' },
110
+ degraded: true,
111
+ success: false,
112
+ });
113
+ });
114
+ });
115
+ }
116
+ const TESTGEN_SUCCESS_SEMANTIC = 'Returns `{success, data, degraded, exitCode}`. success=true when the script ran as designed (including graceful-degradation payloads); ' +
117
+ 'success=false when the test could not be repaired within --max-attempts (exit 1) or on config error (exit 2). ' +
118
+ 'Reads data.repaired for the actual outcome — true means the test now passes, false means it does not.';
119
+ export const testgenTools = [
120
+ {
121
+ name: 'testgen_tdd_repair',
122
+ description: 'ADR-175-inspired Test-Driven Repair. Given a failing test, spawn a bounded headless `claude -p` (Read/Edit/Bash only, --max-budget-usd capped) ' +
123
+ 'that makes the test pass without modifying it. The test\'s exit code IS the fitness function — no LLM-as-judge. ' +
124
+ 'Use when you have a failing test and want a verified fix. Skipping this and asking an agent to "fix the bug" is wrong because (a) you lose the bounded-cost guarantee, ' +
125
+ '(b) you lose the strict no-test-modification constraint, (c) you lose the verify-on-finish step. ' +
126
+ 'REQUIRES --confirm — without it returns a dry-run plan. Cost ladder: Haiku $0.02-0.20, Sonnet $0.30-2.00, Opus $1.50-8.00 per attempt. ' + TESTGEN_SUCCESS_SEMANTIC,
127
+ category: 'testgen',
128
+ inputSchema: {
129
+ type: 'object',
130
+ properties: {
131
+ repo: { type: 'string', description: 'Absolute path to the repo root (default: cwd)', default: '.' },
132
+ test: { type: 'string', description: 'Relative path (from repo root) to the failing test file. REQUIRED.' },
133
+ testCommand: { type: 'string', description: 'Shell command to run the test (e.g. `npx vitest run tests/auth.test.ts`). REQUIRED.' },
134
+ maxAttempts: { type: 'number', description: '1..5 (ruflo cap). Each attempt gets budgetUsd/maxAttempts of the total budget.', default: 1 },
135
+ budgetUsd: { type: 'number', description: 'Total cost ceiling across all attempts. Hard cap — claude exits when reached.', default: 5.0 },
136
+ model: { type: 'string', enum: ['haiku', 'sonnet', 'opus'], description: 'Claude model tier. Haiku for simple bugs (default); Sonnet for multi-file; Opus rarely worth it.', default: 'haiku' },
137
+ confirm: { type: 'boolean', description: 'REQUIRED to actually run. Without it returns a dry-run plan.', default: false },
138
+ noTestOracle: { type: 'boolean', description: 'Conformant mode (agent writes its own repro). NOT YET IMPLEMENTED — returns config error.', default: false },
139
+ timeoutMs: { type: 'number', description: 'Hard wall-clock cap. Default 15 min.', default: 900000 },
140
+ },
141
+ required: ['test', 'testCommand'],
142
+ },
143
+ handler: async (input) => {
144
+ const args = [];
145
+ if (input.repo)
146
+ args.push('--repo', String(input.repo));
147
+ if (input.test)
148
+ args.push('--test', String(input.test));
149
+ if (input.testCommand)
150
+ args.push('--test-command', String(input.testCommand));
151
+ if (input.maxAttempts !== undefined)
152
+ args.push('--max-attempts', String(input.maxAttempts));
153
+ if (input.budgetUsd !== undefined)
154
+ args.push('--budget', String(input.budgetUsd));
155
+ if (input.model)
156
+ args.push('--model', String(input.model));
157
+ if (input.confirm === true)
158
+ args.push('--confirm');
159
+ if (input.noTestOracle === true)
160
+ args.push('--no-test-oracle');
161
+ if (input.timeoutMs !== undefined)
162
+ args.push('--timeout-ms', String(input.timeoutMs));
163
+ const r = await runTestgenScript('tdd-repair/tdd-repair.mjs', args);
164
+ return { success: r.success, data: r.json, degraded: r.degraded, exitCode: r.exitCode };
165
+ },
166
+ },
167
+ ];
168
+ //# sourceMappingURL=testgen-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testgen-tools.js","sourceRoot":"","sources":["../../../src/mcp-tools/testgen-tools.ts"],"names":[],"mappings":"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"}