@paretools/go 0.8.5 → 0.10.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 +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/formatters.d.ts +33 -9
- package/dist/lib/formatters.d.ts.map +1 -1
- package/dist/lib/formatters.js +291 -34
- package/dist/lib/formatters.js.map +1 -1
- package/dist/lib/go-runner.d.ts +1 -1
- package/dist/lib/go-runner.d.ts.map +1 -1
- package/dist/lib/go-runner.js +3 -3
- package/dist/lib/go-runner.js.map +1 -1
- package/dist/lib/parsers.d.ts +47 -12
- package/dist/lib/parsers.d.ts.map +1 -1
- package/dist/lib/parsers.js +653 -45
- package/dist/lib/parsers.js.map +1 -1
- package/dist/schemas/index.d.ts +218 -4
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +142 -5
- package/dist/schemas/index.js.map +1 -1
- package/dist/tools/build.d.ts.map +1 -1
- package/dist/tools/build.js +97 -12
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/env.d.ts.map +1 -1
- package/dist/tools/env.js +15 -13
- package/dist/tools/env.js.map +1 -1
- package/dist/tools/fmt.d.ts.map +1 -1
- package/dist/tools/fmt.js +28 -12
- package/dist/tools/fmt.js.map +1 -1
- package/dist/tools/generate.d.ts.map +1 -1
- package/dist/tools/generate.js +77 -12
- package/dist/tools/generate.js.map +1 -1
- package/dist/tools/get.d.ts.map +1 -1
- package/dist/tools/get.js +91 -11
- package/dist/tools/get.js.map +1 -1
- package/dist/tools/golangci-lint.d.ts.map +1 -1
- package/dist/tools/golangci-lint.js +145 -13
- package/dist/tools/golangci-lint.js.map +1 -1
- package/dist/tools/list.d.ts.map +1 -1
- package/dist/tools/list.js +77 -13
- package/dist/tools/list.js.map +1 -1
- package/dist/tools/mod-tidy.d.ts.map +1 -1
- package/dist/tools/mod-tidy.js +119 -12
- package/dist/tools/mod-tidy.js.map +1 -1
- package/dist/tools/run.d.ts.map +1 -1
- package/dist/tools/run.js +108 -16
- package/dist/tools/run.js.map +1 -1
- package/dist/tools/test.d.ts.map +1 -1
- package/dist/tools/test.js +112 -11
- package/dist/tools/test.js.map +1 -1
- package/dist/tools/vet.d.ts.map +1 -1
- package/dist/tools/vet.js +55 -13
- package/dist/tools/vet.js.map +1 -1
- package/package.json +2 -2
package/dist/tools/mod-tidy.js
CHANGED
|
@@ -1,33 +1,140 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { readFile } from "node:fs/promises";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
|
|
3
6
|
import { goCmd } from "../lib/go-runner.js";
|
|
4
7
|
import { parseGoModTidyOutput } from "../lib/parsers.js";
|
|
5
8
|
import { formatGoModTidy, compactModTidyMap, formatModTidyCompact } from "../lib/formatters.js";
|
|
6
9
|
import { GoModTidyResultSchema } from "../schemas/index.js";
|
|
10
|
+
/** Compute a quick hash of a file's contents, or return undefined if the file doesn't exist. */
|
|
11
|
+
async function hashFile(filePath) {
|
|
12
|
+
try {
|
|
13
|
+
const content = await readFile(filePath);
|
|
14
|
+
return createHash("md5").update(content).digest("hex");
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
7
20
|
/** Registers the `mod-tidy` tool on the given MCP server. */
|
|
8
21
|
export function registerModTidyTool(server) {
|
|
9
22
|
server.registerTool("mod-tidy", {
|
|
10
23
|
title: "Go Mod Tidy",
|
|
11
|
-
description: "Runs go mod tidy to add missing and remove unused module dependencies.
|
|
24
|
+
description: "Runs go mod tidy to add missing and remove unused module dependencies.",
|
|
12
25
|
inputSchema: {
|
|
13
|
-
path: z
|
|
14
|
-
|
|
15
|
-
.
|
|
26
|
+
path: z.string().max(INPUT_LIMITS.PATH_MAX).optional().describe("Project root path"),
|
|
27
|
+
diff: z
|
|
28
|
+
.boolean()
|
|
16
29
|
.optional()
|
|
17
|
-
.
|
|
18
|
-
|
|
30
|
+
.default(false)
|
|
31
|
+
.describe("Non-destructive check mode: show what changes would be made without modifying files (-diff)"),
|
|
32
|
+
verbose: z
|
|
19
33
|
.boolean()
|
|
20
34
|
.optional()
|
|
21
|
-
.default(
|
|
22
|
-
.describe("
|
|
35
|
+
.default(false)
|
|
36
|
+
.describe("Print information about removed modules (-v)"),
|
|
37
|
+
continueOnError: z
|
|
38
|
+
.boolean()
|
|
39
|
+
.optional()
|
|
40
|
+
.default(false)
|
|
41
|
+
.describe("Attempt to proceed despite errors encountered while loading packages (-e)"),
|
|
42
|
+
goVersion: z
|
|
43
|
+
.string()
|
|
44
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Set the expected Go language version (-go=<version>). Example: '1.21'"),
|
|
47
|
+
compat: z
|
|
48
|
+
.string()
|
|
49
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Preserve backward compatibility with the specified Go version (-compat=<version>). Example: '1.20'"),
|
|
52
|
+
compact: z.boolean().optional().default(true).describe("Prefer compact output"),
|
|
23
53
|
},
|
|
24
54
|
outputSchema: GoModTidyResultSchema,
|
|
25
|
-
}, async ({ path, compact }) => {
|
|
55
|
+
}, async ({ path, diff, verbose, continueOnError, goVersion, compat, compact }) => {
|
|
26
56
|
const cwd = path || process.cwd();
|
|
27
|
-
|
|
28
|
-
|
|
57
|
+
if (goVersion)
|
|
58
|
+
assertNoFlagInjection(goVersion, "goVersion");
|
|
59
|
+
if (compat)
|
|
60
|
+
assertNoFlagInjection(compat, "compat");
|
|
61
|
+
// Hash go.mod and go.sum before tidy to detect changes (Gap #156)
|
|
62
|
+
const goModPath = join(cwd, "go.mod");
|
|
63
|
+
const goSumPath = join(cwd, "go.sum");
|
|
64
|
+
const [goModHashBefore, goSumHashBefore] = await Promise.all([
|
|
65
|
+
hashFile(goModPath),
|
|
66
|
+
hashFile(goSumPath),
|
|
67
|
+
]);
|
|
68
|
+
const goModBefore = await readGoMod(goModPath);
|
|
69
|
+
const args = ["mod", "tidy"];
|
|
70
|
+
if (diff)
|
|
71
|
+
args.push("-diff");
|
|
72
|
+
if (verbose)
|
|
73
|
+
args.push("-v");
|
|
74
|
+
if (continueOnError)
|
|
75
|
+
args.push("-e");
|
|
76
|
+
if (goVersion)
|
|
77
|
+
args.push(`-go=${goVersion}`);
|
|
78
|
+
if (compat)
|
|
79
|
+
args.push(`-compat=${compat}`);
|
|
80
|
+
const result = await goCmd(args, cwd);
|
|
81
|
+
// Hash go.mod and go.sum after tidy
|
|
82
|
+
const [goModHashAfter, goSumHashAfter] = await Promise.all([
|
|
83
|
+
hashFile(goModPath),
|
|
84
|
+
hashFile(goSumPath),
|
|
85
|
+
]);
|
|
86
|
+
const goModAfter = await readGoMod(goModPath);
|
|
87
|
+
const { addedModules, removedModules } = diffGoModRequirements(goModBefore, goModAfter);
|
|
88
|
+
const data = parseGoModTidyOutput(result.stdout, result.stderr, result.exitCode, goModHashBefore, goModHashAfter, goSumHashBefore, goSumHashAfter, addedModules, removedModules);
|
|
29
89
|
const rawOutput = (result.stdout + "\n" + result.stderr).trim();
|
|
30
90
|
return compactDualOutput(data, rawOutput, formatGoModTidy, compactModTidyMap, formatModTidyCompact, compact === false);
|
|
31
91
|
});
|
|
32
92
|
}
|
|
93
|
+
async function readGoMod(goModPath) {
|
|
94
|
+
try {
|
|
95
|
+
return await readFile(goModPath, "utf-8");
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function diffGoModRequirements(before, after) {
|
|
102
|
+
if (before === undefined || after === undefined) {
|
|
103
|
+
return { addedModules: [], removedModules: [] };
|
|
104
|
+
}
|
|
105
|
+
const beforeSet = parseRequireSet(before);
|
|
106
|
+
const afterSet = parseRequireSet(after);
|
|
107
|
+
return {
|
|
108
|
+
addedModules: [...afterSet].filter((r) => !beforeSet.has(r)).sort(),
|
|
109
|
+
removedModules: [...beforeSet].filter((r) => !afterSet.has(r)).sort(),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function parseRequireSet(goMod) {
|
|
113
|
+
const result = new Set();
|
|
114
|
+
let inBlock = false;
|
|
115
|
+
for (const rawLine of goMod.split("\n")) {
|
|
116
|
+
const line = rawLine.trim();
|
|
117
|
+
if (!line || line.startsWith("//"))
|
|
118
|
+
continue;
|
|
119
|
+
if (line.startsWith("require (")) {
|
|
120
|
+
inBlock = true;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (inBlock && line === ")") {
|
|
124
|
+
inBlock = false;
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
const target = inBlock
|
|
128
|
+
? line
|
|
129
|
+
: line.startsWith("require ")
|
|
130
|
+
? line.slice("require ".length)
|
|
131
|
+
: "";
|
|
132
|
+
if (!target)
|
|
133
|
+
continue;
|
|
134
|
+
const cleaned = target.replace(/\s+\/\/.*$/, "").trim();
|
|
135
|
+
if (cleaned)
|
|
136
|
+
result.add(cleaned);
|
|
137
|
+
}
|
|
138
|
+
return result;
|
|
139
|
+
}
|
|
33
140
|
//# sourceMappingURL=mod-tidy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod-tidy.js","sourceRoot":"","sources":["../../src/tools/mod-tidy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"mod-tidy.js","sourceRoot":"","sources":["../../src/tools/mod-tidy.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QA2KhD"}
|
package/dist/tools/run.js
CHANGED
|
@@ -8,13 +8,9 @@ import { GoRunResultSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerRunTool(server) {
|
|
9
9
|
server.registerTool("run", {
|
|
10
10
|
title: "Go Run",
|
|
11
|
-
description: "Runs a Go program and returns structured output (stdout, stderr, exit code).
|
|
11
|
+
description: "Runs a Go program and returns structured output (stdout, stderr, exit code).",
|
|
12
12
|
inputSchema: {
|
|
13
|
-
path: z
|
|
14
|
-
.string()
|
|
15
|
-
.max(INPUT_LIMITS.PATH_MAX)
|
|
16
|
-
.optional()
|
|
17
|
-
.describe("Project root path (default: cwd)"),
|
|
13
|
+
path: z.string().max(INPUT_LIMITS.PATH_MAX).optional().describe("Project root path"),
|
|
18
14
|
file: z
|
|
19
15
|
.string()
|
|
20
16
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
@@ -32,30 +28,126 @@ export function registerRunTool(server) {
|
|
|
32
28
|
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
33
29
|
.optional()
|
|
34
30
|
.default([])
|
|
35
|
-
.describe("Build flags to pass to go run (e.g., -
|
|
36
|
-
|
|
31
|
+
.describe("Build flags to pass to go run (e.g., '-tags=integration'). " +
|
|
32
|
+
"Note: flags like -race and -tags have dedicated params for discoverability, " +
|
|
33
|
+
"but can also be passed here. Flag injection checks are not applied to buildArgs " +
|
|
34
|
+
"since they are intentionally build flags."),
|
|
35
|
+
race: z.boolean().optional().default(false).describe("Enable data race detection (-race)"),
|
|
36
|
+
tags: z
|
|
37
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
38
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
39
|
+
.optional()
|
|
40
|
+
.describe("Build tags for conditional compilation (-tags)"),
|
|
41
|
+
timeout: z
|
|
42
|
+
.number()
|
|
43
|
+
.int()
|
|
44
|
+
.min(1000)
|
|
45
|
+
.max(600000)
|
|
46
|
+
.optional()
|
|
47
|
+
.describe("Program execution timeout in milliseconds. Overrides the default 300s build timeout. " +
|
|
48
|
+
"Min: 1000 (1s), Max: 600000 (10m)."),
|
|
49
|
+
exec: z
|
|
50
|
+
.string()
|
|
51
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
52
|
+
.optional()
|
|
53
|
+
.describe("Custom execution wrapper (-exec). The built binary is passed to this command instead of being run directly."),
|
|
54
|
+
maxOutput: z
|
|
55
|
+
.number()
|
|
56
|
+
.int()
|
|
57
|
+
.min(1024)
|
|
58
|
+
.max(1048576)
|
|
59
|
+
.optional()
|
|
60
|
+
.describe("Maximum length in characters for stdout/stderr output. Output exceeding this limit will be truncated. " +
|
|
61
|
+
"Default: no limit. Max: 1048576 (1MB)."),
|
|
62
|
+
stream: z
|
|
37
63
|
.boolean()
|
|
38
64
|
.optional()
|
|
39
|
-
.default(
|
|
40
|
-
.describe("
|
|
65
|
+
.default(false)
|
|
66
|
+
.describe("Return tail-focused output for long-running programs. This is a streaming-like mode that keeps recent lines."),
|
|
67
|
+
tailLines: z
|
|
68
|
+
.number()
|
|
69
|
+
.int()
|
|
70
|
+
.min(10)
|
|
71
|
+
.max(5000)
|
|
72
|
+
.optional()
|
|
73
|
+
.default(200)
|
|
74
|
+
.describe("When stream is true, keep this many trailing stdout/stderr lines"),
|
|
75
|
+
compact: z.boolean().optional().default(true).describe("Prefer compact output"),
|
|
41
76
|
},
|
|
42
77
|
outputSchema: GoRunResultSchema,
|
|
43
|
-
}, async ({ path, file, args, buildArgs, compact }) => {
|
|
78
|
+
}, async ({ path, file, args, buildArgs, race, tags, timeout, exec: execWrapper, maxOutput, stream, tailLines, compact, }) => {
|
|
44
79
|
const cwd = path || process.cwd();
|
|
45
80
|
const target = file || ".";
|
|
46
81
|
assertNoFlagInjection(target, "file");
|
|
47
|
-
|
|
48
|
-
assertNoFlagInjection(
|
|
82
|
+
if (execWrapper)
|
|
83
|
+
assertNoFlagInjection(execWrapper, "exec");
|
|
84
|
+
// buildArgs are intentionally build flags (e.g., -race, -tags, -ldflags)
|
|
85
|
+
// so assertNoFlagInjection is not applied to them.
|
|
86
|
+
const cmdArgs = ["run"];
|
|
87
|
+
if (race)
|
|
88
|
+
cmdArgs.push("-race");
|
|
89
|
+
if (tags && tags.length > 0) {
|
|
90
|
+
for (const t of tags) {
|
|
91
|
+
assertNoFlagInjection(t, "tags");
|
|
92
|
+
}
|
|
93
|
+
cmdArgs.push("-tags", tags.join(","));
|
|
49
94
|
}
|
|
50
|
-
|
|
95
|
+
if (execWrapper)
|
|
96
|
+
cmdArgs.push(`-exec=${execWrapper}`);
|
|
97
|
+
cmdArgs.push(...(buildArgs || []), target);
|
|
51
98
|
const programArgs = args || [];
|
|
52
99
|
if (programArgs.length > 0) {
|
|
53
100
|
cmdArgs.push("--", ...programArgs);
|
|
54
101
|
}
|
|
55
|
-
|
|
56
|
-
|
|
102
|
+
let timedOut = false;
|
|
103
|
+
let signal;
|
|
104
|
+
let result;
|
|
105
|
+
try {
|
|
106
|
+
const runResult = await goCmd(cmdArgs, cwd, timeout);
|
|
107
|
+
result = runResult;
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
111
|
+
if (msg.includes("timed out")) {
|
|
112
|
+
timedOut = true;
|
|
113
|
+
signal = extractSignal(msg);
|
|
114
|
+
result = { stdout: "", stderr: msg, exitCode: 124 };
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
throw err;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const data = parseGoRunOutput(result.stdout, result.stderr, result.exitCode, timedOut, signal);
|
|
121
|
+
if (stream) {
|
|
122
|
+
const lineCap = tailLines ?? 200;
|
|
123
|
+
if (data.stdout)
|
|
124
|
+
data.stdout = tailOutput(data.stdout, lineCap);
|
|
125
|
+
if (data.stderr)
|
|
126
|
+
data.stderr = tailOutput(data.stderr, lineCap);
|
|
127
|
+
}
|
|
128
|
+
// Apply maxOutput truncation with truncation flag tracking
|
|
129
|
+
if (maxOutput) {
|
|
130
|
+
if (data.stdout && data.stdout.length > maxOutput) {
|
|
131
|
+
data.stdout = data.stdout.slice(0, maxOutput) + "\n... (truncated)";
|
|
132
|
+
data.stdoutTruncated = true;
|
|
133
|
+
}
|
|
134
|
+
if (data.stderr && data.stderr.length > maxOutput) {
|
|
135
|
+
data.stderr = data.stderr.slice(0, maxOutput) + "\n... (truncated)";
|
|
136
|
+
data.stderrTruncated = true;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
57
139
|
const rawOutput = (result.stdout + "\n" + result.stderr).trim();
|
|
58
140
|
return compactDualOutput(data, rawOutput, formatGoRun, compactRunMap, formatRunCompact, compact === false);
|
|
59
141
|
});
|
|
60
142
|
}
|
|
143
|
+
function tailOutput(text, lineCount) {
|
|
144
|
+
const lines = text.split("\n");
|
|
145
|
+
if (lines.length <= lineCount)
|
|
146
|
+
return text;
|
|
147
|
+
return lines.slice(-lineCount).join("\n");
|
|
148
|
+
}
|
|
149
|
+
function extractSignal(message) {
|
|
150
|
+
const match = message.match(/\((SIG[A-Z0-9]+)\)/);
|
|
151
|
+
return match?.[1];
|
|
152
|
+
}
|
|
61
153
|
//# sourceMappingURL=run.js.map
|
package/dist/tools/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,wDAAwD;AACxD,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,MAAM,CAAC,YAAY,CACjB,KAAK,EACL;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/test.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/tools/test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/tools/test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QA4KjD"}
|
package/dist/tools/test.js
CHANGED
|
@@ -8,13 +8,9 @@ import { GoTestResultSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerTestTool(server) {
|
|
9
9
|
server.registerTool("test", {
|
|
10
10
|
title: "Go Test",
|
|
11
|
-
description: "Runs go test and returns structured test results (name, status, package, elapsed).
|
|
11
|
+
description: "Runs go test and returns structured test results (name, status, package, elapsed).",
|
|
12
12
|
inputSchema: {
|
|
13
|
-
path: z
|
|
14
|
-
.string()
|
|
15
|
-
.max(INPUT_LIMITS.PATH_MAX)
|
|
16
|
-
.optional()
|
|
17
|
-
.describe("Project root path (default: cwd)"),
|
|
13
|
+
path: z.string().max(INPUT_LIMITS.PATH_MAX).optional().describe("Project root path"),
|
|
18
14
|
packages: z
|
|
19
15
|
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
20
16
|
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
@@ -26,21 +22,126 @@ export function registerTestTool(server) {
|
|
|
26
22
|
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
27
23
|
.optional()
|
|
28
24
|
.describe("Test name filter regex"),
|
|
29
|
-
|
|
25
|
+
bench: z
|
|
26
|
+
.string()
|
|
27
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("Benchmark name filter regex (-bench)"),
|
|
30
|
+
benchtime: z
|
|
31
|
+
.string()
|
|
32
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
33
|
+
.optional()
|
|
34
|
+
.describe("Benchmark run duration or count (-benchtime), e.g. '3s' or '100x'"),
|
|
35
|
+
benchmem: z
|
|
36
|
+
.boolean()
|
|
37
|
+
.optional()
|
|
38
|
+
.default(false)
|
|
39
|
+
.describe("Print memory allocation stats for benchmarks (-benchmem)"),
|
|
40
|
+
failfast: z
|
|
41
|
+
.boolean()
|
|
42
|
+
.optional()
|
|
43
|
+
.default(false)
|
|
44
|
+
.describe("Stop running tests after the first failure (-failfast). Saves time and tokens."),
|
|
45
|
+
short: z
|
|
46
|
+
.boolean()
|
|
47
|
+
.optional()
|
|
48
|
+
.default(false)
|
|
49
|
+
.describe("Tell long-running tests to shorten their run time (-short). Enables quick smoke tests."),
|
|
50
|
+
race: z
|
|
51
|
+
.boolean()
|
|
52
|
+
.optional()
|
|
53
|
+
.default(false)
|
|
54
|
+
.describe("Enable data race detection during tests (-race)"),
|
|
55
|
+
timeout: z
|
|
56
|
+
.string()
|
|
57
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("Test execution timeout (-timeout <d>). Examples: '30s', '5m', '1h'. Default: 10m."),
|
|
60
|
+
count: z
|
|
61
|
+
.number()
|
|
62
|
+
.int()
|
|
63
|
+
.min(1)
|
|
64
|
+
.max(1000)
|
|
65
|
+
.optional()
|
|
66
|
+
.describe("Run each test and benchmark N times (-count <n>). Useful for verifying flaky test fixes."),
|
|
67
|
+
cover: z
|
|
30
68
|
.boolean()
|
|
31
69
|
.optional()
|
|
32
|
-
.default(
|
|
33
|
-
.describe("
|
|
70
|
+
.default(false)
|
|
71
|
+
.describe("Enable test coverage analysis (-cover)"),
|
|
72
|
+
coverprofile: z
|
|
73
|
+
.string()
|
|
74
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
75
|
+
.optional()
|
|
76
|
+
.describe("Write a coverage profile to the named file (-coverprofile <file>). Implies -cover."),
|
|
77
|
+
tags: z
|
|
78
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
79
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
80
|
+
.optional()
|
|
81
|
+
.describe("Build tags required to run tests correctly (-tags)"),
|
|
82
|
+
parallel: z
|
|
83
|
+
.number()
|
|
84
|
+
.int()
|
|
85
|
+
.min(1)
|
|
86
|
+
.max(1000)
|
|
87
|
+
.optional()
|
|
88
|
+
.describe("Maximum number of tests to run in parallel (-parallel <n>). Default: GOMAXPROCS."),
|
|
89
|
+
shuffle: z
|
|
90
|
+
.enum(["on", "off"])
|
|
91
|
+
.optional()
|
|
92
|
+
.describe("Randomize test execution order (-shuffle). 'on' uses a random seed, 'off' is the default."),
|
|
93
|
+
compact: z.boolean().optional().default(true).describe("Prefer compact output"),
|
|
34
94
|
},
|
|
35
95
|
outputSchema: GoTestResultSchema,
|
|
36
|
-
}, async ({ path, packages, run: runFilter, compact }) => {
|
|
96
|
+
}, async ({ path, packages, run: runFilter, bench, benchtime, benchmem, failfast, short, race, timeout, count, cover, coverprofile, tags, parallel, shuffle, compact, }) => {
|
|
37
97
|
const cwd = path || process.cwd();
|
|
38
98
|
for (const p of packages ?? []) {
|
|
39
99
|
assertNoFlagInjection(p, "packages");
|
|
40
100
|
}
|
|
41
101
|
if (runFilter)
|
|
42
102
|
assertNoFlagInjection(runFilter, "run");
|
|
43
|
-
|
|
103
|
+
if (bench)
|
|
104
|
+
assertNoFlagInjection(bench, "bench");
|
|
105
|
+
if (benchtime)
|
|
106
|
+
assertNoFlagInjection(benchtime, "benchtime");
|
|
107
|
+
if (timeout)
|
|
108
|
+
assertNoFlagInjection(timeout, "timeout");
|
|
109
|
+
if (coverprofile)
|
|
110
|
+
assertNoFlagInjection(coverprofile, "coverprofile");
|
|
111
|
+
const args = ["test", "-json"];
|
|
112
|
+
if (failfast)
|
|
113
|
+
args.push("-failfast");
|
|
114
|
+
if (short)
|
|
115
|
+
args.push("-short");
|
|
116
|
+
if (race)
|
|
117
|
+
args.push("-race");
|
|
118
|
+
if (timeout)
|
|
119
|
+
args.push("-timeout", timeout);
|
|
120
|
+
if (count !== undefined)
|
|
121
|
+
args.push("-count", String(count));
|
|
122
|
+
if (bench)
|
|
123
|
+
args.push("-bench", bench);
|
|
124
|
+
if (benchtime)
|
|
125
|
+
args.push("-benchtime", benchtime);
|
|
126
|
+
if (benchmem)
|
|
127
|
+
args.push("-benchmem");
|
|
128
|
+
if (coverprofile) {
|
|
129
|
+
args.push("-coverprofile", coverprofile);
|
|
130
|
+
}
|
|
131
|
+
else if (cover) {
|
|
132
|
+
args.push("-cover");
|
|
133
|
+
}
|
|
134
|
+
if (tags && tags.length > 0) {
|
|
135
|
+
for (const t of tags) {
|
|
136
|
+
assertNoFlagInjection(t, "tags");
|
|
137
|
+
}
|
|
138
|
+
args.push("-tags", tags.join(","));
|
|
139
|
+
}
|
|
140
|
+
if (parallel !== undefined)
|
|
141
|
+
args.push("-parallel", String(parallel));
|
|
142
|
+
if (shuffle === "on")
|
|
143
|
+
args.push("-shuffle=on");
|
|
144
|
+
args.push(...(packages || ["./..."]));
|
|
44
145
|
if (runFilter)
|
|
45
146
|
args.push("-run", runFilter);
|
|
46
147
|
const result = await goCmd(args, cwd);
|
package/dist/tools/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/tools/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,yDAAyD;AACzD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/tools/test.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/vet.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vet.d.ts","sourceRoot":"","sources":["../../src/tools/vet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"vet.d.ts","sourceRoot":"","sources":["../../src/tools/vet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QAsFhD"}
|
package/dist/tools/vet.js
CHANGED
|
@@ -8,33 +8,75 @@ import { GoVetResultSchema } from "../schemas/index.js";
|
|
|
8
8
|
export function registerVetTool(server) {
|
|
9
9
|
server.registerTool("vet", {
|
|
10
10
|
title: "Go Vet",
|
|
11
|
-
description: "Runs go vet and returns structured static analysis diagnostics.
|
|
11
|
+
description: "Runs go vet and returns structured static analysis diagnostics with analyzer names. Uses -json flag for native JSON output with automatic text fallback.",
|
|
12
12
|
inputSchema: {
|
|
13
|
-
path: z
|
|
14
|
-
.string()
|
|
15
|
-
.max(INPUT_LIMITS.PATH_MAX)
|
|
16
|
-
.optional()
|
|
17
|
-
.describe("Project root path (default: cwd)"),
|
|
13
|
+
path: z.string().max(INPUT_LIMITS.PATH_MAX).optional().describe("Project root path"),
|
|
18
14
|
packages: z
|
|
19
15
|
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
20
16
|
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
21
17
|
.optional()
|
|
22
18
|
.default(["./..."])
|
|
23
19
|
.describe("Packages to vet (default: ./...)"),
|
|
24
|
-
|
|
25
|
-
.
|
|
20
|
+
analyzers: z
|
|
21
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
22
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("Specific analyzers to enable or disable. Prefix with '-' to disable. Example: ['shadow', '-printf']"),
|
|
25
|
+
tags: z
|
|
26
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
27
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("Build tags for correct vetting of conditionally compiled code (-tags)"),
|
|
30
|
+
contextLines: z
|
|
31
|
+
.number()
|
|
32
|
+
.int()
|
|
33
|
+
.min(0)
|
|
34
|
+
.max(50)
|
|
26
35
|
.optional()
|
|
27
|
-
.
|
|
28
|
-
|
|
36
|
+
.describe("Number of context lines to include around each diagnostic (-c=N)"),
|
|
37
|
+
vettool: z
|
|
38
|
+
.string()
|
|
39
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("Path to a custom analyzer tool binary (-vettool)"),
|
|
42
|
+
compact: z.boolean().optional().default(true).describe("Prefer compact output"),
|
|
29
43
|
},
|
|
30
44
|
outputSchema: GoVetResultSchema,
|
|
31
|
-
}, async ({ path, packages, compact }) => {
|
|
45
|
+
}, async ({ path, packages, analyzers, tags, contextLines, vettool, compact }) => {
|
|
32
46
|
const cwd = path || process.cwd();
|
|
33
47
|
for (const p of packages ?? []) {
|
|
34
48
|
assertNoFlagInjection(p, "packages");
|
|
35
49
|
}
|
|
36
|
-
|
|
37
|
-
|
|
50
|
+
if (vettool)
|
|
51
|
+
assertNoFlagInjection(vettool, "vettool");
|
|
52
|
+
const args = ["vet", "-json"];
|
|
53
|
+
if (tags && tags.length > 0) {
|
|
54
|
+
for (const t of tags) {
|
|
55
|
+
assertNoFlagInjection(t, "tags");
|
|
56
|
+
}
|
|
57
|
+
args.push("-tags", tags.join(","));
|
|
58
|
+
}
|
|
59
|
+
if (contextLines !== undefined)
|
|
60
|
+
args.push(`-c=${contextLines}`);
|
|
61
|
+
if (vettool)
|
|
62
|
+
args.push(`-vettool=${vettool}`);
|
|
63
|
+
if (analyzers && analyzers.length > 0) {
|
|
64
|
+
for (const a of analyzers) {
|
|
65
|
+
assertNoFlagInjection(a, "analyzers");
|
|
66
|
+
// Analyzers are passed as -<name> (disable) or -<name>=true (enable)
|
|
67
|
+
if (a.startsWith("-")) {
|
|
68
|
+
// Disable: go vet -<name>=false
|
|
69
|
+
args.push(`${a}=false`);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// Enable: go vet -<name>
|
|
73
|
+
args.push(`-${a}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
args.push(...(packages || ["./..."]));
|
|
78
|
+
const result = await goCmd(args, cwd);
|
|
79
|
+
const data = parseGoVetOutput(result.stdout, result.stderr, result.exitCode);
|
|
38
80
|
const rawOutput = (result.stdout + "\n" + result.stderr).trim();
|
|
39
81
|
return compactDualOutput(data, rawOutput, formatGoVet, compactVetMap, formatVetCompact, compact === false);
|
|
40
82
|
});
|
package/dist/tools/vet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vet.js","sourceRoot":"","sources":["../../src/tools/vet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,wDAAwD;AACxD,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,MAAM,CAAC,YAAY,CACjB,KAAK,EACL;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"vet.js","sourceRoot":"","sources":["../../src/tools/vet.ts"],"names":[],"mappings":"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"}
|