@paretools/go 0.8.5 → 0.9.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/dist/lib/formatters.d.ts +25 -9
- package/dist/lib/formatters.d.ts.map +1 -1
- package/dist/lib/formatters.js +208 -29
- 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 +45 -10
- package/dist/lib/parsers.d.ts.map +1 -1
- package/dist/lib/parsers.js +490 -33
- package/dist/lib/parsers.js.map +1 -1
- package/dist/schemas/index.d.ts +148 -4
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +96 -5
- package/dist/schemas/index.js.map +1 -1
- package/dist/tools/build.d.ts.map +1 -1
- package/dist/tools/build.js +61 -2
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/env.d.ts.map +1 -1
- package/dist/tools/env.js +14 -4
- package/dist/tools/env.js.map +1 -1
- package/dist/tools/fmt.d.ts.map +1 -1
- package/dist/tools/fmt.js +26 -3
- package/dist/tools/fmt.js.map +1 -1
- package/dist/tools/generate.d.ts.map +1 -1
- package/dist/tools/generate.js +54 -2
- package/dist/tools/generate.js.map +1 -1
- package/dist/tools/get.d.ts.map +1 -1
- package/dist/tools/get.js +34 -3
- package/dist/tools/get.js.map +1 -1
- package/dist/tools/golangci-lint.d.ts.map +1 -1
- package/dist/tools/golangci-lint.js +144 -4
- package/dist/tools/golangci-lint.js.map +1 -1
- package/dist/tools/list.d.ts.map +1 -1
- package/dist/tools/list.js +66 -5
- package/dist/tools/list.js.map +1 -1
- package/dist/tools/mod-tidy.d.ts.map +1 -1
- package/dist/tools/mod-tidy.js +69 -4
- package/dist/tools/mod-tidy.js.map +1 -1
- package/dist/tools/run.d.ts.map +1 -1
- package/dist/tools/run.js +59 -6
- package/dist/tools/run.js.map +1 -1
- package/dist/tools/test.d.ts.map +1 -1
- package/dist/tools/test.js +86 -2
- package/dist/tools/test.js.map +1 -1
- package/dist/tools/vet.d.ts.map +1 -1
- package/dist/tools/vet.js +54 -4
- package/dist/tools/vet.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod-tidy.d.ts","sourceRoot":"","sources":["../../src/tools/mod-tidy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mod-tidy.d.ts","sourceRoot":"","sources":["../../src/tools/mod-tidy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QAmGpD"}
|
package/dist/tools/mod-tidy.js
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
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", {
|
|
@@ -15,6 +28,31 @@ export function registerModTidyTool(server) {
|
|
|
15
28
|
.max(INPUT_LIMITS.PATH_MAX)
|
|
16
29
|
.optional()
|
|
17
30
|
.describe("Project root path (default: cwd)"),
|
|
31
|
+
diff: z
|
|
32
|
+
.boolean()
|
|
33
|
+
.optional()
|
|
34
|
+
.default(false)
|
|
35
|
+
.describe("Non-destructive check mode: show what changes would be made without modifying files (-diff)"),
|
|
36
|
+
verbose: z
|
|
37
|
+
.boolean()
|
|
38
|
+
.optional()
|
|
39
|
+
.default(false)
|
|
40
|
+
.describe("Print information about removed modules (-v)"),
|
|
41
|
+
continueOnError: z
|
|
42
|
+
.boolean()
|
|
43
|
+
.optional()
|
|
44
|
+
.default(false)
|
|
45
|
+
.describe("Attempt to proceed despite errors encountered while loading packages (-e)"),
|
|
46
|
+
goVersion: z
|
|
47
|
+
.string()
|
|
48
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("Set the expected Go language version (-go=<version>). Example: '1.21'"),
|
|
51
|
+
compat: z
|
|
52
|
+
.string()
|
|
53
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
54
|
+
.optional()
|
|
55
|
+
.describe("Preserve backward compatibility with the specified Go version (-compat=<version>). Example: '1.20'"),
|
|
18
56
|
compact: z
|
|
19
57
|
.boolean()
|
|
20
58
|
.optional()
|
|
@@ -22,10 +60,37 @@ export function registerModTidyTool(server) {
|
|
|
22
60
|
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
23
61
|
},
|
|
24
62
|
outputSchema: GoModTidyResultSchema,
|
|
25
|
-
}, async ({ path, compact }) => {
|
|
63
|
+
}, async ({ path, diff, verbose, continueOnError, goVersion, compat, compact }) => {
|
|
26
64
|
const cwd = path || process.cwd();
|
|
27
|
-
|
|
28
|
-
|
|
65
|
+
if (goVersion)
|
|
66
|
+
assertNoFlagInjection(goVersion, "goVersion");
|
|
67
|
+
if (compat)
|
|
68
|
+
assertNoFlagInjection(compat, "compat");
|
|
69
|
+
// Hash go.mod and go.sum before tidy to detect changes (Gap #156)
|
|
70
|
+
const goModPath = join(cwd, "go.mod");
|
|
71
|
+
const goSumPath = join(cwd, "go.sum");
|
|
72
|
+
const [goModHashBefore, goSumHashBefore] = await Promise.all([
|
|
73
|
+
hashFile(goModPath),
|
|
74
|
+
hashFile(goSumPath),
|
|
75
|
+
]);
|
|
76
|
+
const args = ["mod", "tidy"];
|
|
77
|
+
if (diff)
|
|
78
|
+
args.push("-diff");
|
|
79
|
+
if (verbose)
|
|
80
|
+
args.push("-v");
|
|
81
|
+
if (continueOnError)
|
|
82
|
+
args.push("-e");
|
|
83
|
+
if (goVersion)
|
|
84
|
+
args.push(`-go=${goVersion}`);
|
|
85
|
+
if (compat)
|
|
86
|
+
args.push(`-compat=${compat}`);
|
|
87
|
+
const result = await goCmd(args, cwd);
|
|
88
|
+
// Hash go.mod and go.sum after tidy
|
|
89
|
+
const [goModHashAfter, goSumHashAfter] = await Promise.all([
|
|
90
|
+
hashFile(goModPath),
|
|
91
|
+
hashFile(goSumPath),
|
|
92
|
+
]);
|
|
93
|
+
const data = parseGoModTidyOutput(result.stdout, result.stderr, result.exitCode, goModHashBefore, goModHashAfter, goSumHashBefore, goSumHashAfter);
|
|
29
94
|
const rawOutput = (result.stdout + "\n" + result.stderr).trim();
|
|
30
95
|
return compactDualOutput(data, rawOutput, formatGoModTidy, compactModTidyMap, formatModTidyCompact, compact === false);
|
|
31
96
|
});
|
|
@@ -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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,gGAAgG;AAChG,KAAK,UAAU,QAAQ,CAAC,QAAgB;IACtC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,8HAA8H;QAChI,WAAW,EAAE;YACX,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,kCAAkC,CAAC;YAC/C,IAAI,EAAE,CAAC;iBACJ,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CACP,6FAA6F,CAC9F;YACH,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,eAAe,EAAE,CAAC;iBACf,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,2EAA2E,CAAC;YACxF,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,uEAAuE,CAAC;YACpF,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CACP,oGAAoG,CACrG;YACH,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,qBAAqB;KACpC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QAC7E,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,SAAS;YAAE,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC7D,IAAI,MAAM;YAAE,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEpD,kEAAkE;QAClE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC3D,QAAQ,CAAC,SAAS,CAAC;YACnB,QAAQ,CAAC,SAAS,CAAC;SACpB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,eAAe;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC;QAC7C,IAAI,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEtC,oCAAoC;QACpC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzD,QAAQ,CAAC,SAAS,CAAC;YACnB,QAAQ,CAAC,SAAS,CAAC;SACpB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,oBAAoB,CAC/B,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,EACf,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,CACf,CAAC;QACF,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAChE,OAAO,iBAAiB,CACtB,IAAI,EACJ,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
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,QAyIhD"}
|
package/dist/tools/run.js
CHANGED
|
@@ -32,7 +32,37 @@ export function registerRunTool(server) {
|
|
|
32
32
|
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
33
33
|
.optional()
|
|
34
34
|
.default([])
|
|
35
|
-
.describe("Build flags to pass to go run (e.g., -
|
|
35
|
+
.describe("Build flags to pass to go run (e.g., '-tags=integration'). " +
|
|
36
|
+
"Note: flags like -race and -tags have dedicated params for discoverability, " +
|
|
37
|
+
"but can also be passed here. Flag injection checks are not applied to buildArgs " +
|
|
38
|
+
"since they are intentionally build flags."),
|
|
39
|
+
race: z.boolean().optional().default(false).describe("Enable data race detection (-race)"),
|
|
40
|
+
tags: z
|
|
41
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
42
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
43
|
+
.optional()
|
|
44
|
+
.describe("Build tags for conditional compilation (-tags)"),
|
|
45
|
+
timeout: z
|
|
46
|
+
.number()
|
|
47
|
+
.int()
|
|
48
|
+
.min(1000)
|
|
49
|
+
.max(600000)
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Program execution timeout in milliseconds. Overrides the default 300s build timeout. " +
|
|
52
|
+
"Min: 1000 (1s), Max: 600000 (10m)."),
|
|
53
|
+
exec: z
|
|
54
|
+
.string()
|
|
55
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
56
|
+
.optional()
|
|
57
|
+
.describe("Custom execution wrapper (-exec). The built binary is passed to this command instead of being run directly."),
|
|
58
|
+
maxOutput: z
|
|
59
|
+
.number()
|
|
60
|
+
.int()
|
|
61
|
+
.min(1024)
|
|
62
|
+
.max(1048576)
|
|
63
|
+
.optional()
|
|
64
|
+
.describe("Maximum length in characters for stdout/stderr output. Output exceeding this limit will be truncated. " +
|
|
65
|
+
"Default: no limit. Max: 1048576 (1MB)."),
|
|
36
66
|
compact: z
|
|
37
67
|
.boolean()
|
|
38
68
|
.optional()
|
|
@@ -40,20 +70,43 @@ export function registerRunTool(server) {
|
|
|
40
70
|
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
41
71
|
},
|
|
42
72
|
outputSchema: GoRunResultSchema,
|
|
43
|
-
}, async ({ path, file, args, buildArgs, compact }) => {
|
|
73
|
+
}, async ({ path, file, args, buildArgs, race, tags, timeout, exec: execWrapper, maxOutput, compact, }) => {
|
|
44
74
|
const cwd = path || process.cwd();
|
|
45
75
|
const target = file || ".";
|
|
46
76
|
assertNoFlagInjection(target, "file");
|
|
47
|
-
|
|
48
|
-
assertNoFlagInjection(
|
|
77
|
+
if (execWrapper)
|
|
78
|
+
assertNoFlagInjection(execWrapper, "exec");
|
|
79
|
+
// buildArgs are intentionally build flags (e.g., -race, -tags, -ldflags)
|
|
80
|
+
// so assertNoFlagInjection is not applied to them.
|
|
81
|
+
const cmdArgs = ["run"];
|
|
82
|
+
if (race)
|
|
83
|
+
cmdArgs.push("-race");
|
|
84
|
+
if (tags && tags.length > 0) {
|
|
85
|
+
for (const t of tags) {
|
|
86
|
+
assertNoFlagInjection(t, "tags");
|
|
87
|
+
}
|
|
88
|
+
cmdArgs.push("-tags", tags.join(","));
|
|
49
89
|
}
|
|
50
|
-
|
|
90
|
+
if (execWrapper)
|
|
91
|
+
cmdArgs.push(`-exec=${execWrapper}`);
|
|
92
|
+
cmdArgs.push(...(buildArgs || []), target);
|
|
51
93
|
const programArgs = args || [];
|
|
52
94
|
if (programArgs.length > 0) {
|
|
53
95
|
cmdArgs.push("--", ...programArgs);
|
|
54
96
|
}
|
|
55
|
-
const result = await goCmd(cmdArgs, cwd);
|
|
97
|
+
const result = await goCmd(cmdArgs, cwd, timeout);
|
|
56
98
|
const data = parseGoRunOutput(result.stdout, result.stderr, result.exitCode);
|
|
99
|
+
// Apply maxOutput truncation with truncation flag tracking
|
|
100
|
+
if (maxOutput) {
|
|
101
|
+
if (data.stdout && data.stdout.length > maxOutput) {
|
|
102
|
+
data.stdout = data.stdout.slice(0, maxOutput) + "\n... (truncated)";
|
|
103
|
+
data.stdoutTruncated = true;
|
|
104
|
+
}
|
|
105
|
+
if (data.stderr && data.stderr.length > maxOutput) {
|
|
106
|
+
data.stderr = data.stderr.slice(0, maxOutput) + "\n... (truncated)";
|
|
107
|
+
data.stderrTruncated = true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
57
110
|
const rawOutput = (result.stdout + "\n" + result.stderr).trim();
|
|
58
111
|
return compactDualOutput(data, rawOutput, formatGoRun, compactRunMap, formatRunCompact, compact === false);
|
|
59
112
|
});
|
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,EACT,+HAA+H;QACjI,WAAW,EAAE;YACX,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,kCAAkC,CAAC;YAC/C,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,OAAO,CAAC,GAAG,CAAC;iBACZ,QAAQ,CAAC,wCAAwC,CAAC;YACrD,IAAI,EAAE,CAAC;iBACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;iBAC9C,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,kCAAkC,CAAC;YAC/C,SAAS,EAAE,CAAC;iBACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;iBACpD,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,
|
|
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,QA+JjD"}
|
package/dist/tools/test.js
CHANGED
|
@@ -26,6 +26,59 @@ export function registerTestTool(server) {
|
|
|
26
26
|
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
27
27
|
.optional()
|
|
28
28
|
.describe("Test name filter regex"),
|
|
29
|
+
failfast: z
|
|
30
|
+
.boolean()
|
|
31
|
+
.optional()
|
|
32
|
+
.default(false)
|
|
33
|
+
.describe("Stop running tests after the first failure (-failfast). Saves time and tokens."),
|
|
34
|
+
short: z
|
|
35
|
+
.boolean()
|
|
36
|
+
.optional()
|
|
37
|
+
.default(false)
|
|
38
|
+
.describe("Tell long-running tests to shorten their run time (-short). Enables quick smoke tests."),
|
|
39
|
+
race: z
|
|
40
|
+
.boolean()
|
|
41
|
+
.optional()
|
|
42
|
+
.default(false)
|
|
43
|
+
.describe("Enable data race detection during tests (-race)"),
|
|
44
|
+
timeout: z
|
|
45
|
+
.string()
|
|
46
|
+
.max(INPUT_LIMITS.SHORT_STRING_MAX)
|
|
47
|
+
.optional()
|
|
48
|
+
.describe("Test execution timeout (-timeout <d>). Examples: '30s', '5m', '1h'. Default: 10m."),
|
|
49
|
+
count: z
|
|
50
|
+
.number()
|
|
51
|
+
.int()
|
|
52
|
+
.min(1)
|
|
53
|
+
.max(1000)
|
|
54
|
+
.optional()
|
|
55
|
+
.describe("Run each test and benchmark N times (-count <n>). Useful for verifying flaky test fixes."),
|
|
56
|
+
cover: z
|
|
57
|
+
.boolean()
|
|
58
|
+
.optional()
|
|
59
|
+
.default(false)
|
|
60
|
+
.describe("Enable test coverage analysis (-cover)"),
|
|
61
|
+
coverprofile: z
|
|
62
|
+
.string()
|
|
63
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
64
|
+
.optional()
|
|
65
|
+
.describe("Write a coverage profile to the named file (-coverprofile <file>). Implies -cover."),
|
|
66
|
+
tags: z
|
|
67
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
68
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
69
|
+
.optional()
|
|
70
|
+
.describe("Build tags required to run tests correctly (-tags)"),
|
|
71
|
+
parallel: z
|
|
72
|
+
.number()
|
|
73
|
+
.int()
|
|
74
|
+
.min(1)
|
|
75
|
+
.max(1000)
|
|
76
|
+
.optional()
|
|
77
|
+
.describe("Maximum number of tests to run in parallel (-parallel <n>). Default: GOMAXPROCS."),
|
|
78
|
+
shuffle: z
|
|
79
|
+
.enum(["on", "off"])
|
|
80
|
+
.optional()
|
|
81
|
+
.describe("Randomize test execution order (-shuffle). 'on' uses a random seed, 'off' is the default."),
|
|
29
82
|
compact: z
|
|
30
83
|
.boolean()
|
|
31
84
|
.optional()
|
|
@@ -33,14 +86,45 @@ export function registerTestTool(server) {
|
|
|
33
86
|
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
34
87
|
},
|
|
35
88
|
outputSchema: GoTestResultSchema,
|
|
36
|
-
}, async ({ path, packages, run: runFilter, compact }) => {
|
|
89
|
+
}, async ({ path, packages, run: runFilter, failfast, short, race, timeout, count, cover, coverprofile, tags, parallel, shuffle, compact, }) => {
|
|
37
90
|
const cwd = path || process.cwd();
|
|
38
91
|
for (const p of packages ?? []) {
|
|
39
92
|
assertNoFlagInjection(p, "packages");
|
|
40
93
|
}
|
|
41
94
|
if (runFilter)
|
|
42
95
|
assertNoFlagInjection(runFilter, "run");
|
|
43
|
-
|
|
96
|
+
if (timeout)
|
|
97
|
+
assertNoFlagInjection(timeout, "timeout");
|
|
98
|
+
if (coverprofile)
|
|
99
|
+
assertNoFlagInjection(coverprofile, "coverprofile");
|
|
100
|
+
const args = ["test", "-json"];
|
|
101
|
+
if (failfast)
|
|
102
|
+
args.push("-failfast");
|
|
103
|
+
if (short)
|
|
104
|
+
args.push("-short");
|
|
105
|
+
if (race)
|
|
106
|
+
args.push("-race");
|
|
107
|
+
if (timeout)
|
|
108
|
+
args.push("-timeout", timeout);
|
|
109
|
+
if (count !== undefined)
|
|
110
|
+
args.push("-count", String(count));
|
|
111
|
+
if (coverprofile) {
|
|
112
|
+
args.push("-coverprofile", coverprofile);
|
|
113
|
+
}
|
|
114
|
+
else if (cover) {
|
|
115
|
+
args.push("-cover");
|
|
116
|
+
}
|
|
117
|
+
if (tags && tags.length > 0) {
|
|
118
|
+
for (const t of tags) {
|
|
119
|
+
assertNoFlagInjection(t, "tags");
|
|
120
|
+
}
|
|
121
|
+
args.push("-tags", tags.join(","));
|
|
122
|
+
}
|
|
123
|
+
if (parallel !== undefined)
|
|
124
|
+
args.push("-parallel", String(parallel));
|
|
125
|
+
if (shuffle === "on")
|
|
126
|
+
args.push("-shuffle=on");
|
|
127
|
+
args.push(...(packages || ["./..."]));
|
|
44
128
|
if (runFilter)
|
|
45
129
|
args.push("-run", runFilter);
|
|
46
130
|
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,sIAAsI;QACxI,WAAW,EAAE;YACX,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,kCAAkC,CAAC;YAC/C,QAAQ,EAAE,CAAC;iBACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;iBACpD,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;iBAClB,QAAQ,CAAC,mCAAmC,CAAC;YAChD,GAAG,EAAE,CAAC;iBACH,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,wBAAwB,CAAC;YACrC,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,kBAAkB;KACjC,EACD,KAAK,EAAE,
|
|
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,QAgGhD"}
|
package/dist/tools/vet.js
CHANGED
|
@@ -8,7 +8,7 @@ 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. Use instead of running `go vet` in the terminal.",
|
|
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. Use instead of running `go vet` in the terminal.",
|
|
12
12
|
inputSchema: {
|
|
13
13
|
path: z
|
|
14
14
|
.string()
|
|
@@ -21,6 +21,28 @@ export function registerVetTool(server) {
|
|
|
21
21
|
.optional()
|
|
22
22
|
.default(["./..."])
|
|
23
23
|
.describe("Packages to vet (default: ./...)"),
|
|
24
|
+
analyzers: z
|
|
25
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
26
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Specific analyzers to enable or disable. Prefix with '-' to disable. Example: ['shadow', '-printf']"),
|
|
29
|
+
tags: z
|
|
30
|
+
.array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
|
|
31
|
+
.max(INPUT_LIMITS.ARRAY_MAX)
|
|
32
|
+
.optional()
|
|
33
|
+
.describe("Build tags for correct vetting of conditionally compiled code (-tags)"),
|
|
34
|
+
contextLines: z
|
|
35
|
+
.number()
|
|
36
|
+
.int()
|
|
37
|
+
.min(0)
|
|
38
|
+
.max(50)
|
|
39
|
+
.optional()
|
|
40
|
+
.describe("Number of context lines to include around each diagnostic (-c=N)"),
|
|
41
|
+
vettool: z
|
|
42
|
+
.string()
|
|
43
|
+
.max(INPUT_LIMITS.PATH_MAX)
|
|
44
|
+
.optional()
|
|
45
|
+
.describe("Path to a custom analyzer tool binary (-vettool)"),
|
|
24
46
|
compact: z
|
|
25
47
|
.boolean()
|
|
26
48
|
.optional()
|
|
@@ -28,13 +50,41 @@ export function registerVetTool(server) {
|
|
|
28
50
|
.describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
|
|
29
51
|
},
|
|
30
52
|
outputSchema: GoVetResultSchema,
|
|
31
|
-
}, async ({ path, packages, compact }) => {
|
|
53
|
+
}, async ({ path, packages, analyzers, tags, contextLines, vettool, compact }) => {
|
|
32
54
|
const cwd = path || process.cwd();
|
|
33
55
|
for (const p of packages ?? []) {
|
|
34
56
|
assertNoFlagInjection(p, "packages");
|
|
35
57
|
}
|
|
36
|
-
|
|
37
|
-
|
|
58
|
+
if (vettool)
|
|
59
|
+
assertNoFlagInjection(vettool, "vettool");
|
|
60
|
+
const args = ["vet", "-json"];
|
|
61
|
+
if (tags && tags.length > 0) {
|
|
62
|
+
for (const t of tags) {
|
|
63
|
+
assertNoFlagInjection(t, "tags");
|
|
64
|
+
}
|
|
65
|
+
args.push("-tags", tags.join(","));
|
|
66
|
+
}
|
|
67
|
+
if (contextLines !== undefined)
|
|
68
|
+
args.push(`-c=${contextLines}`);
|
|
69
|
+
if (vettool)
|
|
70
|
+
args.push(`-vettool=${vettool}`);
|
|
71
|
+
if (analyzers && analyzers.length > 0) {
|
|
72
|
+
for (const a of analyzers) {
|
|
73
|
+
assertNoFlagInjection(a, "analyzers");
|
|
74
|
+
// Analyzers are passed as -<name> (disable) or -<name>=true (enable)
|
|
75
|
+
if (a.startsWith("-")) {
|
|
76
|
+
// Disable: go vet -<name>=false
|
|
77
|
+
args.push(`${a}=false`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// Enable: go vet -<name>
|
|
81
|
+
args.push(`-${a}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
args.push(...(packages || ["./..."]));
|
|
86
|
+
const result = await goCmd(args, cwd);
|
|
87
|
+
const data = parseGoVetOutput(result.stdout, result.stderr, result.exitCode);
|
|
38
88
|
const rawOutput = (result.stdout + "\n" + result.stderr).trim();
|
|
39
89
|
return compactDualOutput(data, rawOutput, formatGoVet, compactVetMap, formatVetCompact, compact === false);
|
|
40
90
|
});
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paretools/go",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"mcpName": "io.github.Dave-London/pare-go",
|
|
5
5
|
"description": "MCP server for Go tools (build, test, vet, run, mod-tidy, fmt, generate) with structured, token-efficient output",
|
|
6
6
|
"license": "MIT",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
52
52
|
"zod": "^4.3.6",
|
|
53
|
-
"@paretools/shared": "0.
|
|
53
|
+
"@paretools/shared": "0.9.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@types/node": "^25.2.3",
|