@vitest-agent/mcp 5.1.8 → 5.2.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/index.d.ts +120 -0
- package/package.json +8 -8
- package/tools/run-tests.js +6 -4
- package/version.js +1 -1
package/index.d.ts
CHANGED
|
@@ -426,6 +426,21 @@ export declare const TestCoverageResult: Schema.Union<readonly [Schema.Struct<{
|
|
|
426
426
|
readonly uncoveredLines: Schema.String;
|
|
427
427
|
}>>>;
|
|
428
428
|
readonly belowTargetFiles: Schema.optional<Schema.$Array<Schema.String>>;
|
|
429
|
+
readonly globShortfalls: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
430
|
+
readonly pattern: Schema.String;
|
|
431
|
+
readonly summary: Schema.Struct<{
|
|
432
|
+
readonly statements: Schema.Number;
|
|
433
|
+
readonly branches: Schema.Number;
|
|
434
|
+
readonly functions: Schema.Number;
|
|
435
|
+
readonly lines: Schema.Number;
|
|
436
|
+
}>;
|
|
437
|
+
readonly thresholds: Schema.Struct<{
|
|
438
|
+
readonly lines: Schema.optional<Schema.Number>;
|
|
439
|
+
readonly functions: Schema.optional<Schema.Number>;
|
|
440
|
+
readonly branches: Schema.optional<Schema.Number>;
|
|
441
|
+
readonly statements: Schema.optional<Schema.Number>;
|
|
442
|
+
}>;
|
|
443
|
+
}>>>;
|
|
429
444
|
}>;
|
|
430
445
|
}>, Schema.Struct<{
|
|
431
446
|
readonly dataAvailable: Schema.Literal<false>;
|
|
@@ -1372,6 +1387,21 @@ export declare const RunTestsResult: Schema.Union<readonly [Schema.Struct<{
|
|
|
1372
1387
|
readonly uncoveredLines: Schema.String;
|
|
1373
1388
|
}>>>;
|
|
1374
1389
|
readonly belowTargetFiles: Schema.optional<Schema.$Array<Schema.String>>;
|
|
1390
|
+
readonly globShortfalls: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
1391
|
+
readonly pattern: Schema.String;
|
|
1392
|
+
readonly summary: Schema.Struct<{
|
|
1393
|
+
readonly statements: Schema.Number;
|
|
1394
|
+
readonly branches: Schema.Number;
|
|
1395
|
+
readonly functions: Schema.Number;
|
|
1396
|
+
readonly lines: Schema.Number;
|
|
1397
|
+
}>;
|
|
1398
|
+
readonly thresholds: Schema.Struct<{
|
|
1399
|
+
readonly lines: Schema.optional<Schema.Number>;
|
|
1400
|
+
readonly functions: Schema.optional<Schema.Number>;
|
|
1401
|
+
readonly branches: Schema.optional<Schema.Number>;
|
|
1402
|
+
readonly statements: Schema.optional<Schema.Number>;
|
|
1403
|
+
}>;
|
|
1404
|
+
}>>>;
|
|
1375
1405
|
}>>;
|
|
1376
1406
|
readonly tagCounts: Schema.optional<Schema.$Record<Schema.String, Schema.Struct<{
|
|
1377
1407
|
readonly passed: Schema.optional<Schema.Number>;
|
|
@@ -1393,6 +1423,16 @@ export declare const RunTestsResult: Schema.Union<readonly [Schema.Struct<{
|
|
|
1393
1423
|
readonly files: Schema.Number;
|
|
1394
1424
|
}>>;
|
|
1395
1425
|
}>>;
|
|
1426
|
+
readonly strayOutput: Schema.optional<Schema.Struct<{
|
|
1427
|
+
readonly total: Schema.Number;
|
|
1428
|
+
readonly stdout: Schema.Number;
|
|
1429
|
+
readonly stderr: Schema.Number;
|
|
1430
|
+
readonly bytes: Schema.Number;
|
|
1431
|
+
readonly samples: Schema.$Array<Schema.Struct<{
|
|
1432
|
+
readonly stream: Schema.Literals<readonly ["stdout", "stderr"]>;
|
|
1433
|
+
readonly text: Schema.String;
|
|
1434
|
+
}>>;
|
|
1435
|
+
}>>;
|
|
1396
1436
|
}>;
|
|
1397
1437
|
readonly classifications: Schema.$Record<Schema.String, Schema.String>;
|
|
1398
1438
|
readonly discoveryLastScannedAt: Schema.optional<Schema.NullOr<Schema.String>>;
|
|
@@ -2104,6 +2144,21 @@ export declare const Kit: Toolkit.Toolkit<{
|
|
|
2104
2144
|
readonly uncoveredLines: import("effect/Schema").String;
|
|
2105
2145
|
}>>>;
|
|
2106
2146
|
readonly belowTargetFiles: import("effect/Schema").optional<import("effect/Schema").$Array<import("effect/Schema").String>>;
|
|
2147
|
+
readonly globShortfalls: import("effect/Schema").optional<import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
2148
|
+
readonly pattern: import("effect/Schema").String;
|
|
2149
|
+
readonly summary: import("effect/Schema").Struct<{
|
|
2150
|
+
readonly statements: import("effect/Schema").Number;
|
|
2151
|
+
readonly branches: import("effect/Schema").Number;
|
|
2152
|
+
readonly functions: import("effect/Schema").Number;
|
|
2153
|
+
readonly lines: import("effect/Schema").Number;
|
|
2154
|
+
}>;
|
|
2155
|
+
readonly thresholds: import("effect/Schema").Struct<{
|
|
2156
|
+
readonly lines: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
2157
|
+
readonly functions: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
2158
|
+
readonly branches: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
2159
|
+
readonly statements: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
2160
|
+
}>;
|
|
2161
|
+
}>>>;
|
|
2107
2162
|
}>>;
|
|
2108
2163
|
readonly tagCounts: import("effect/Schema").optional<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Struct<{
|
|
2109
2164
|
readonly passed: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
@@ -2125,6 +2180,16 @@ export declare const Kit: Toolkit.Toolkit<{
|
|
|
2125
2180
|
readonly files: import("effect/Schema").Number;
|
|
2126
2181
|
}>>;
|
|
2127
2182
|
}>>;
|
|
2183
|
+
readonly strayOutput: import("effect/Schema").optional<import("effect/Schema").Struct<{
|
|
2184
|
+
readonly total: import("effect/Schema").Number;
|
|
2185
|
+
readonly stdout: import("effect/Schema").Number;
|
|
2186
|
+
readonly stderr: import("effect/Schema").Number;
|
|
2187
|
+
readonly bytes: import("effect/Schema").Number;
|
|
2188
|
+
readonly samples: import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
2189
|
+
readonly stream: import("effect/Schema").Literals<readonly ["stdout", "stderr"]>;
|
|
2190
|
+
readonly text: import("effect/Schema").String;
|
|
2191
|
+
}>>;
|
|
2192
|
+
}>>;
|
|
2128
2193
|
}>;
|
|
2129
2194
|
readonly classifications: import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").String>;
|
|
2130
2195
|
readonly discoveryLastScannedAt: import("effect/Schema").optional<import("effect/Schema").NullOr<import("effect/Schema").String>>;
|
|
@@ -2801,6 +2866,21 @@ export declare const Kit: Toolkit.Toolkit<{
|
|
|
2801
2866
|
readonly uncoveredLines: import("effect/Schema").String;
|
|
2802
2867
|
}>>>;
|
|
2803
2868
|
readonly belowTargetFiles: import("effect/Schema").optional<import("effect/Schema").$Array<import("effect/Schema").String>>;
|
|
2869
|
+
readonly globShortfalls: import("effect/Schema").optional<import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
2870
|
+
readonly pattern: import("effect/Schema").String;
|
|
2871
|
+
readonly summary: import("effect/Schema").Struct<{
|
|
2872
|
+
readonly statements: import("effect/Schema").Number;
|
|
2873
|
+
readonly branches: import("effect/Schema").Number;
|
|
2874
|
+
readonly functions: import("effect/Schema").Number;
|
|
2875
|
+
readonly lines: import("effect/Schema").Number;
|
|
2876
|
+
}>;
|
|
2877
|
+
readonly thresholds: import("effect/Schema").Struct<{
|
|
2878
|
+
readonly lines: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
2879
|
+
readonly functions: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
2880
|
+
readonly branches: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
2881
|
+
readonly statements: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
2882
|
+
}>;
|
|
2883
|
+
}>>>;
|
|
2804
2884
|
}>;
|
|
2805
2885
|
}>, import("effect/Schema").Struct<{
|
|
2806
2886
|
readonly dataAvailable: import("effect/Schema").Literal<false>;
|
|
@@ -4563,6 +4643,21 @@ export declare const ToolsLayer: import("effect/Layer").Layer<import("effect/ai/
|
|
|
4563
4643
|
readonly uncoveredLines: import("effect/Schema").String;
|
|
4564
4644
|
}>>>;
|
|
4565
4645
|
readonly belowTargetFiles: import("effect/Schema").optional<import("effect/Schema").$Array<import("effect/Schema").String>>;
|
|
4646
|
+
readonly globShortfalls: import("effect/Schema").optional<import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
4647
|
+
readonly pattern: import("effect/Schema").String;
|
|
4648
|
+
readonly summary: import("effect/Schema").Struct<{
|
|
4649
|
+
readonly statements: import("effect/Schema").Number;
|
|
4650
|
+
readonly branches: import("effect/Schema").Number;
|
|
4651
|
+
readonly functions: import("effect/Schema").Number;
|
|
4652
|
+
readonly lines: import("effect/Schema").Number;
|
|
4653
|
+
}>;
|
|
4654
|
+
readonly thresholds: import("effect/Schema").Struct<{
|
|
4655
|
+
readonly lines: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
4656
|
+
readonly functions: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
4657
|
+
readonly branches: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
4658
|
+
readonly statements: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
4659
|
+
}>;
|
|
4660
|
+
}>>>;
|
|
4566
4661
|
}>>;
|
|
4567
4662
|
readonly tagCounts: import("effect/Schema").optional<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").Struct<{
|
|
4568
4663
|
readonly passed: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
@@ -4584,6 +4679,16 @@ export declare const ToolsLayer: import("effect/Layer").Layer<import("effect/ai/
|
|
|
4584
4679
|
readonly files: import("effect/Schema").Number;
|
|
4585
4680
|
}>>;
|
|
4586
4681
|
}>>;
|
|
4682
|
+
readonly strayOutput: import("effect/Schema").optional<import("effect/Schema").Struct<{
|
|
4683
|
+
readonly total: import("effect/Schema").Number;
|
|
4684
|
+
readonly stdout: import("effect/Schema").Number;
|
|
4685
|
+
readonly stderr: import("effect/Schema").Number;
|
|
4686
|
+
readonly bytes: import("effect/Schema").Number;
|
|
4687
|
+
readonly samples: import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
4688
|
+
readonly stream: import("effect/Schema").Literals<readonly ["stdout", "stderr"]>;
|
|
4689
|
+
readonly text: import("effect/Schema").String;
|
|
4690
|
+
}>>;
|
|
4691
|
+
}>>;
|
|
4587
4692
|
}>;
|
|
4588
4693
|
readonly classifications: import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").String>;
|
|
4589
4694
|
readonly discoveryLastScannedAt: import("effect/Schema").optional<import("effect/Schema").NullOr<import("effect/Schema").String>>;
|
|
@@ -5260,6 +5365,21 @@ export declare const ToolsLayer: import("effect/Layer").Layer<import("effect/ai/
|
|
|
5260
5365
|
readonly uncoveredLines: import("effect/Schema").String;
|
|
5261
5366
|
}>>>;
|
|
5262
5367
|
readonly belowTargetFiles: import("effect/Schema").optional<import("effect/Schema").$Array<import("effect/Schema").String>>;
|
|
5368
|
+
readonly globShortfalls: import("effect/Schema").optional<import("effect/Schema").$Array<import("effect/Schema").Struct<{
|
|
5369
|
+
readonly pattern: import("effect/Schema").String;
|
|
5370
|
+
readonly summary: import("effect/Schema").Struct<{
|
|
5371
|
+
readonly statements: import("effect/Schema").Number;
|
|
5372
|
+
readonly branches: import("effect/Schema").Number;
|
|
5373
|
+
readonly functions: import("effect/Schema").Number;
|
|
5374
|
+
readonly lines: import("effect/Schema").Number;
|
|
5375
|
+
}>;
|
|
5376
|
+
readonly thresholds: import("effect/Schema").Struct<{
|
|
5377
|
+
readonly lines: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
5378
|
+
readonly functions: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
5379
|
+
readonly branches: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
5380
|
+
readonly statements: import("effect/Schema").optional<import("effect/Schema").Number>;
|
|
5381
|
+
}>;
|
|
5382
|
+
}>>>;
|
|
5263
5383
|
}>;
|
|
5264
5384
|
}>, import("effect/Schema").Struct<{
|
|
5265
5385
|
readonly dataAvailable: import("effect/Schema").Literal<false>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vitest-agent/mcp",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Model Context Protocol server for vitest-agent. Exposes 30 tools for agent access to test data, TDD lifecycle, and session management.",
|
|
6
6
|
"keywords": [
|
|
@@ -43,15 +43,15 @@
|
|
|
43
43
|
"vitest-agent-mcp": "bin/vitest-agent-mcp.js"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@effect/platform-node": "^4.0.
|
|
47
|
-
"@effect/sql-sqlite-node": "^4.0.
|
|
48
|
-
"@effected/engine": "^0.
|
|
46
|
+
"@effect/platform-node": "^4.0.2",
|
|
47
|
+
"@effect/sql-sqlite-node": "^4.0.2",
|
|
48
|
+
"@effected/engine": "^0.4.0",
|
|
49
49
|
"@effected/git": "^0.20.0",
|
|
50
|
-
"@effected/mcp": "^0.
|
|
50
|
+
"@effected/mcp": "^0.5.0",
|
|
51
51
|
"@effected/walker": "^0.15.0",
|
|
52
|
-
"@vitest-agent/engine": "0.
|
|
53
|
-
"@vitest-agent/sdk": "
|
|
54
|
-
"effect": "^4.0.
|
|
52
|
+
"@vitest-agent/engine": "1.0.0",
|
|
53
|
+
"@vitest-agent/sdk": "7.0.0",
|
|
54
|
+
"effect": "^4.0.2"
|
|
55
55
|
},
|
|
56
56
|
"peerDependencies": {
|
|
57
57
|
"vitest": "^5.0.0"
|
package/tools/run-tests.js
CHANGED
|
@@ -4,7 +4,7 @@ import { ToolOutputSchema } from "@effected/mcp";
|
|
|
4
4
|
import { Data, Effect, Layer, Option, Path, Result, Schema, Semaphore } from "effect";
|
|
5
5
|
import { DataReader, DataStore } from "@vitest-agent/engine";
|
|
6
6
|
import { Tool } from "effect/ai";
|
|
7
|
-
import { AgentReport, buildAgentReport, buildConsoleLeaks, coerceErrorField, collectConsoleLeakEntries, formatScopedCoverageNote } from "@vitest-agent/sdk";
|
|
7
|
+
import { AgentReport, buildAgentReport, buildConsoleLeaks, coerceErrorField, collectConsoleLeakEntries, formatScopedCoverageNote, readStrayOutput } from "@vitest-agent/sdk";
|
|
8
8
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
9
9
|
import { existsSync, mkdtempSync, rmSync } from "node:fs";
|
|
10
10
|
import { stat } from "node:fs/promises";
|
|
@@ -603,10 +603,12 @@ const runTestsBody = async (input, ctx) => {
|
|
|
603
603
|
const preliminaryReason = unhandledErrors.length > 0 || result.testModules.some((m) => m.state() === "failed") ? "failed" : "passed";
|
|
604
604
|
const baseReport = buildAgentReport(testModules, unhandledErrors, preliminaryReason, { omitPassingTests: true });
|
|
605
605
|
const leaks = buildConsoleLeaks(collectConsoleLeakEntries(localVitest.state.getFiles()));
|
|
606
|
-
const
|
|
606
|
+
const strayOutput = readStrayOutput(localVitest.logger);
|
|
607
|
+
const report = {
|
|
607
608
|
...baseReport,
|
|
608
|
-
consoleLeaks: leaks
|
|
609
|
-
|
|
609
|
+
...leaks !== void 0 && { consoleLeaks: leaks },
|
|
610
|
+
...strayOutput !== void 0 && { strayOutput }
|
|
611
|
+
};
|
|
610
612
|
let classifications;
|
|
611
613
|
try {
|
|
612
614
|
classifications = await ctx.runPromise(Effect.gen(function* () {
|