@paretools/build 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.
Files changed (41) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/build-runner.d.ts +2 -2
  5. package/dist/lib/build-runner.d.ts.map +1 -1
  6. package/dist/lib/build-runner.js +6 -6
  7. package/dist/lib/build-runner.js.map +1 -1
  8. package/dist/lib/formatters.d.ts +1 -0
  9. package/dist/lib/formatters.d.ts.map +1 -1
  10. package/dist/lib/formatters.js +61 -9
  11. package/dist/lib/formatters.js.map +1 -1
  12. package/dist/lib/parsers.d.ts +14 -5
  13. package/dist/lib/parsers.d.ts.map +1 -1
  14. package/dist/lib/parsers.js +336 -28
  15. package/dist/lib/parsers.js.map +1 -1
  16. package/dist/schemas/index.d.ts +126 -4
  17. package/dist/schemas/index.d.ts.map +1 -1
  18. package/dist/schemas/index.js +51 -2
  19. package/dist/schemas/index.js.map +1 -1
  20. package/dist/tools/build.d.ts.map +1 -1
  21. package/dist/tools/build.js +29 -12
  22. package/dist/tools/build.js.map +1 -1
  23. package/dist/tools/esbuild.d.ts.map +1 -1
  24. package/dist/tools/esbuild.js +130 -19
  25. package/dist/tools/esbuild.js.map +1 -1
  26. package/dist/tools/nx.d.ts.map +1 -1
  27. package/dist/tools/nx.js +85 -14
  28. package/dist/tools/nx.js.map +1 -1
  29. package/dist/tools/tsc.d.ts.map +1 -1
  30. package/dist/tools/tsc.js +48 -10
  31. package/dist/tools/tsc.js.map +1 -1
  32. package/dist/tools/turbo.d.ts.map +1 -1
  33. package/dist/tools/turbo.js +97 -13
  34. package/dist/tools/turbo.js.map +1 -1
  35. package/dist/tools/vite-build.d.ts.map +1 -1
  36. package/dist/tools/vite-build.js +83 -15
  37. package/dist/tools/vite-build.js.map +1 -1
  38. package/dist/tools/webpack.d.ts.map +1 -1
  39. package/dist/tools/webpack.js +78 -15
  40. package/dist/tools/webpack.js.map +1 -1
  41. package/package.json +2 -2
@@ -4,49 +4,133 @@ import { turboCmd } from "../lib/build-runner.js";
4
4
  import { parseTurboOutput } from "../lib/parsers.js";
5
5
  import { formatTurbo, compactTurboMap, formatTurboCompact } from "../lib/formatters.js";
6
6
  import { TurboResultSchema } from "../schemas/index.js";
7
+ import { readFile } from "node:fs/promises";
8
+ import { resolve } from "node:path";
7
9
  /** Registers the `turbo` tool on the given MCP server. */
8
10
  export function registerTurboTool(server) {
9
11
  server.registerTool("turbo", {
10
12
  title: "turbo",
11
- description: "Runs Turborepo tasks and returns structured per-package results with cache hit/miss info. Use instead of running `turbo` in the terminal.",
13
+ description: "Runs Turborepo tasks and returns structured per-package results with cache hit/miss info.",
12
14
  inputSchema: {
13
15
  task: z
14
16
  .string()
15
17
  .max(INPUT_LIMITS.SHORT_STRING_MAX)
16
- .describe("Turbo task to run (e.g., 'build', 'test', 'lint')"),
18
+ .optional()
19
+ .describe("Turbo task to run (e.g., 'build', 'test', 'lint')."),
20
+ tasks: z
21
+ .array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
22
+ .max(INPUT_LIMITS.ARRAY_MAX)
23
+ .optional()
24
+ .describe("Multiple Turbo tasks to run in one invocation (e.g., ['build','test'])"),
17
25
  filter: z
18
26
  .string()
19
27
  .max(INPUT_LIMITS.STRING_MAX)
20
28
  .optional()
21
29
  .describe("Package filter (e.g., '@scope/pkg' or 'pkg...')"),
22
30
  concurrency: z.number().optional().describe("Maximum number of concurrent tasks"),
23
- path: z
24
- .string()
25
- .max(INPUT_LIMITS.PATH_MAX)
31
+ force: z
32
+ .boolean()
26
33
  .optional()
27
- .describe("Project root path (default: cwd)"),
28
- compact: z
34
+ .describe("Bypass the turbo cache and re-run all tasks (maps to --force)"),
35
+ continue_on_error: z
29
36
  .boolean()
30
37
  .optional()
31
- .default(true)
32
- .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
38
+ .describe("Continue running tasks even after failures to surface all errors (maps to --continue)"),
39
+ dryRun: z
40
+ .boolean()
41
+ .optional()
42
+ .describe("Preview the task graph without executing (maps to --dry-run)"),
43
+ affected: z
44
+ .boolean()
45
+ .optional()
46
+ .describe("Run only tasks affected by changes since the base branch (maps to --affected)"),
47
+ graph: z
48
+ .boolean()
49
+ .optional()
50
+ .describe("Generate the task graph visualization (maps to --graph)"),
51
+ logOrder: z
52
+ .enum(["stream", "grouped", "auto"])
53
+ .optional()
54
+ .describe("Order of task log output"),
55
+ profile: z
56
+ .boolean()
57
+ .optional()
58
+ .describe("Generate a performance profile (maps to --profile)"),
59
+ summarize: z
60
+ .boolean()
61
+ .optional()
62
+ .describe("Generate Turbo run summary metadata and parse it into structured `summary` when available (maps to --summarize)"),
63
+ outputLogs: z
64
+ .enum(["full", "hash-only", "new-only", "errors-only", "none"])
65
+ .optional()
66
+ .describe("Control which task logs are shown (default: 'new-only'). Maps to --output-logs."),
67
+ args: z
68
+ .array(z.string().max(INPUT_LIMITS.STRING_MAX))
69
+ .max(INPUT_LIMITS.ARRAY_MAX)
70
+ .optional()
71
+ .describe("Additional turbo flags (e.g., ['--env-mode=strict']). Each arg is validated with assertNoFlagInjection."),
72
+ path: z.string().max(INPUT_LIMITS.PATH_MAX).optional().describe("Project root path"),
73
+ compact: z.boolean().optional().default(true).describe("Prefer compact output"),
33
74
  },
34
75
  outputSchema: TurboResultSchema,
35
- }, async ({ task, filter, concurrency, path, compact }) => {
76
+ }, async ({ task, tasks, filter, concurrency, force, continue_on_error, dryRun, affected, graph, logOrder, profile, summarize, outputLogs, args, path, compact, }) => {
36
77
  const cwd = path || process.cwd();
37
- assertNoFlagInjection(task, "task");
78
+ const taskList = tasks && tasks.length > 0 ? tasks : task ? [task] : [];
79
+ if (taskList.length === 0) {
80
+ throw new Error("Either task or tasks must be provided.");
81
+ }
82
+ for (const selectedTask of taskList) {
83
+ assertNoFlagInjection(selectedTask, "tasks");
84
+ }
38
85
  if (filter)
39
86
  assertNoFlagInjection(filter, "filter");
40
- const cliArgs = ["run", task, "--output-logs=new-only"];
87
+ const outputLogsValue = outputLogs ?? "new-only";
88
+ const cliArgs = ["run", ...taskList, `--output-logs=${outputLogsValue}`];
41
89
  if (filter)
42
90
  cliArgs.push("--filter", filter);
43
91
  if (concurrency !== undefined)
44
92
  cliArgs.push("--concurrency", String(concurrency));
93
+ if (force)
94
+ cliArgs.push("--force");
95
+ if (continue_on_error)
96
+ cliArgs.push("--continue");
97
+ if (dryRun)
98
+ cliArgs.push("--dry-run");
99
+ if (affected)
100
+ cliArgs.push("--affected");
101
+ if (graph)
102
+ cliArgs.push("--graph");
103
+ if (logOrder)
104
+ cliArgs.push(`--log-order=${logOrder}`);
105
+ if (profile)
106
+ cliArgs.push("--profile");
107
+ if (summarize)
108
+ cliArgs.push("--summarize");
109
+ if (args) {
110
+ cliArgs.push(...args);
111
+ }
45
112
  const start = Date.now();
46
113
  const result = await turboCmd(cliArgs, cwd);
47
114
  const duration = Math.round((Date.now() - start) / 100) / 10;
48
115
  const rawOutput = result.stdout + "\n" + result.stderr;
49
- const data = parseTurboOutput(result.stdout, result.stderr, result.exitCode, duration);
116
+ let summaryJsonContent;
117
+ if (summarize) {
118
+ const combined = `${result.stdout}\n${result.stderr}`;
119
+ const summaryPathMatch = combined.match(/(\S*\.turbo\S*\.json)/);
120
+ const summaryPath = summaryPathMatch?.[1];
121
+ if (summaryPath) {
122
+ try {
123
+ const resolvedPath = summaryPath.startsWith("/")
124
+ ? summaryPath
125
+ : resolve(cwd, summaryPath);
126
+ summaryJsonContent = await readFile(resolvedPath, "utf8");
127
+ }
128
+ catch {
129
+ // Summary file is optional; ignore read/parse failures.
130
+ }
131
+ }
132
+ }
133
+ const data = parseTurboOutput(result.stdout, result.stderr, result.exitCode, duration, summaryJsonContent);
50
134
  return compactDualOutput(data, rawOutput, formatTurbo, compactTurboMap, formatTurboCompact, compact === false);
51
135
  });
52
136
  }
@@ -1 +1 @@
1
- {"version":3,"file":"turbo.js","sourceRoot":"","sources":["../../src/tools/turbo.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,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,0DAA0D;AAC1D,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CACjB,OAAO,EACP;QACE,KAAK,EAAE,OAAO;QACd,WAAW,EACT,2IAA2I;QAC7I,WAAW,EAAE;YACX,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,CAAC,mDAAmD,CAAC;YAChE,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC;iBAC5B,QAAQ,EAAE;iBACV,QAAQ,CAAC,iDAAiD,CAAC;YAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YACjF,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC;iBAC1B,QAAQ,EAAE;iBACV,QAAQ,CAAC,kCAAkC,CAAC;YAC/C,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,iBAAiB;KAChC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACrD,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,MAAM;YAAE,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEpD,MAAM,OAAO,GAAa,CAAC,KAAK,EAAE,IAAI,EAAE,wBAAwB,CAAC,CAAC;QAElE,IAAI,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,WAAW,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QAElF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QAEvD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvF,OAAO,iBAAiB,CACtB,IAAI,EACJ,SAAS,EACT,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"turbo.js","sourceRoot":"","sources":["../../src/tools/turbo.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vite-build.d.ts","sourceRoot":"","sources":["../../src/tools/vite-build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAoEtD"}
1
+ {"version":3,"file":"vite-build.d.ts","sourceRoot":"","sources":["../../src/tools/vite-build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QA2ItD"}
@@ -8,43 +8,111 @@ import { ViteBuildResultSchema } from "../schemas/index.js";
8
8
  export function registerViteBuildTool(server) {
9
9
  server.registerTool("vite-build", {
10
10
  title: "Vite Build",
11
- description: "Runs Vite production build and returns structured output files with sizes. Use instead of running `vite build` in the terminal.",
11
+ description: "Runs Vite production build and returns structured output files with sizes.",
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
  mode: z
19
15
  .string()
20
16
  .max(INPUT_LIMITS.SHORT_STRING_MAX)
21
17
  .optional()
22
18
  .default("production")
23
19
  .describe("Build mode (default: production)"),
20
+ outDir: z
21
+ .string()
22
+ .max(INPUT_LIMITS.PATH_MAX)
23
+ .optional()
24
+ .describe("Custom output directory (maps to --outDir)"),
25
+ config: z
26
+ .string()
27
+ .max(INPUT_LIMITS.PATH_MAX)
28
+ .optional()
29
+ .describe("Path to Vite config file (maps to --config)"),
30
+ sourcemap: z
31
+ .union([z.boolean(), z.enum(["inline", "hidden"])])
32
+ .optional()
33
+ .describe("Generate source maps. true for default, 'inline' for inline, 'hidden' for hidden source maps."),
34
+ base: z
35
+ .string()
36
+ .max(INPUT_LIMITS.STRING_MAX)
37
+ .optional()
38
+ .describe("Public base path for non-root deployments (maps to --base)"),
39
+ ssr: z
40
+ .string()
41
+ .max(INPUT_LIMITS.PATH_MAX)
42
+ .optional()
43
+ .describe("SSR build entry point (maps to --ssr)"),
44
+ manifest: z
45
+ .boolean()
46
+ .optional()
47
+ .describe("Generate a manifest.json for backend-integrated builds (maps to --manifest)"),
48
+ minify: z
49
+ .enum(["esbuild", "terser", "false"])
50
+ .optional()
51
+ .describe("Minification strategy (esbuild, terser, or false to disable)"),
52
+ logLevel: z
53
+ .enum(["info", "warn", "error", "silent"])
54
+ .optional()
55
+ .describe("Log level to control output verbosity"),
56
+ emptyOutDir: z
57
+ .boolean()
58
+ .optional()
59
+ .describe("Empty the output directory before building (maps to --emptyOutDir)"),
60
+ reportCompressedSize: z
61
+ .boolean()
62
+ .optional()
63
+ .describe("Report compressed (gzip) size of output files — disable to speed up large builds"),
24
64
  args: z
25
65
  .array(z.string().max(INPUT_LIMITS.STRING_MAX))
26
66
  .max(INPUT_LIMITS.ARRAY_MAX)
27
67
  .optional()
28
68
  .default([])
29
69
  .describe("Additional Vite build flags"),
30
- compact: z
31
- .boolean()
32
- .optional()
33
- .default(true)
34
- .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
70
+ compact: z.boolean().optional().default(true).describe("Prefer compact output"),
35
71
  },
36
72
  outputSchema: ViteBuildResultSchema,
37
- }, async ({ path, mode, args, compact }) => {
73
+ }, async ({ path, mode, outDir, config, sourcemap, base, ssr, manifest, minify, logLevel, emptyOutDir, reportCompressedSize, args, compact, }) => {
38
74
  const cwd = path || process.cwd();
39
75
  if (mode)
40
76
  assertNoFlagInjection(mode, "mode");
41
- for (const a of args ?? []) {
42
- assertNoFlagInjection(a, "args");
43
- }
77
+ if (outDir)
78
+ assertNoFlagInjection(outDir, "outDir");
79
+ if (config)
80
+ assertNoFlagInjection(config, "config");
81
+ if (base)
82
+ assertNoFlagInjection(base, "base");
83
+ if (ssr)
84
+ assertNoFlagInjection(ssr, "ssr");
44
85
  const cliArgs = [];
45
86
  if (mode && mode !== "production") {
46
87
  cliArgs.push("--mode", mode);
47
88
  }
89
+ if (outDir)
90
+ cliArgs.push(`--outDir=${outDir}`);
91
+ if (config)
92
+ cliArgs.push(`--config=${config}`);
93
+ if (sourcemap !== undefined) {
94
+ if (typeof sourcemap === "boolean") {
95
+ cliArgs.push(sourcemap ? "--sourcemap" : "--no-sourcemap");
96
+ }
97
+ else {
98
+ cliArgs.push(`--sourcemap=${sourcemap}`);
99
+ }
100
+ }
101
+ if (base)
102
+ cliArgs.push(`--base=${base}`);
103
+ if (ssr)
104
+ cliArgs.push(`--ssr=${ssr}`);
105
+ if (manifest)
106
+ cliArgs.push("--manifest");
107
+ if (minify)
108
+ cliArgs.push(`--minify=${minify}`);
109
+ if (logLevel)
110
+ cliArgs.push(`--logLevel=${logLevel}`);
111
+ if (emptyOutDir !== undefined) {
112
+ cliArgs.push(emptyOutDir ? "--emptyOutDir" : "--no-emptyOutDir");
113
+ }
114
+ if (reportCompressedSize === false)
115
+ cliArgs.push("--no-reportCompressedSize");
48
116
  if (args) {
49
117
  cliArgs.push(...args);
50
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vite-build.js","sourceRoot":"","sources":["../../src/tools/vite-build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite-build.js","sourceRoot":"","sources":["../../src/tools/vite-build.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"webpack.d.ts","sourceRoot":"","sources":["../../src/tools/webpack.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QAuEpD"}
1
+ {"version":3,"file":"webpack.d.ts","sourceRoot":"","sources":["../../src/tools/webpack.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QAwJpD"}
@@ -8,13 +8,9 @@ import { WebpackResultSchema } from "../schemas/index.js";
8
8
  export function registerWebpackTool(server) {
9
9
  server.registerTool("webpack", {
10
10
  title: "webpack",
11
- description: "Runs webpack build with JSON stats output and returns structured assets, errors, and warnings. Use instead of running `webpack` in the terminal.",
11
+ description: "Runs webpack build with JSON stats output and returns structured assets, errors, and warnings.",
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
  config: z
19
15
  .string()
20
16
  .max(INPUT_LIMITS.PATH_MAX)
@@ -24,32 +20,99 @@ export function registerWebpackTool(server) {
24
20
  .enum(["production", "development", "none"])
25
21
  .optional()
26
22
  .describe("Build mode (production, development, none)"),
23
+ entry: z
24
+ .string()
25
+ .max(INPUT_LIMITS.PATH_MAX)
26
+ .optional()
27
+ .describe("Entry point file to build (maps to --entry)"),
28
+ target: z
29
+ .string()
30
+ .max(INPUT_LIMITS.STRING_MAX)
31
+ .optional()
32
+ .describe("Build target environment (e.g., 'web', 'node', 'electron-main'). Maps to --target."),
33
+ devtool: z
34
+ .string()
35
+ .max(INPUT_LIMITS.STRING_MAX)
36
+ .optional()
37
+ .describe("Source map strategy (e.g., 'source-map', 'eval', 'cheap-module-source-map'). Maps to --devtool."),
38
+ analyze: z
39
+ .boolean()
40
+ .optional()
41
+ .describe("Enable webpack-bundle-analyzer for bundle size analysis (maps to --analyze)"),
42
+ bail: z
43
+ .boolean()
44
+ .optional()
45
+ .describe("Fail on the first error instead of tolerating them (maps to --bail)"),
46
+ cache: z
47
+ .boolean()
48
+ .optional()
49
+ .describe("Enable or disable webpack caching (maps to --cache / --no-cache)"),
50
+ env: z
51
+ .record(z.string(), z.string().max(INPUT_LIMITS.STRING_MAX))
52
+ .optional()
53
+ .describe("Environment variables passed to the webpack config function via --env key=value " +
54
+ "(e.g., { production: 'true', apiUrl: 'https://api.example.com' })."),
55
+ profile: z
56
+ .boolean()
57
+ .optional()
58
+ .describe("Enable webpack profiling to capture per-module timing data (maps to --profile). " +
59
+ "When enabled, profile data is included in the structured output."),
27
60
  args: z
28
61
  .array(z.string().max(INPUT_LIMITS.STRING_MAX))
29
62
  .max(INPUT_LIMITS.ARRAY_MAX)
30
63
  .optional()
31
64
  .default([])
32
65
  .describe("Additional webpack flags"),
33
- compact: z
34
- .boolean()
35
- .optional()
36
- .default(true)
37
- .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
66
+ compact: z.boolean().optional().default(true).describe("Prefer compact output"),
38
67
  },
39
68
  outputSchema: WebpackResultSchema,
40
- }, async ({ path, config, mode, args, compact }) => {
69
+ }, async ({ path, config, mode, entry, target, devtool, analyze, bail, cache, env, profile, args, compact, }) => {
41
70
  const cwd = path || process.cwd();
42
71
  if (config)
43
72
  assertNoFlagInjection(config, "config");
44
- for (const a of args ?? []) {
45
- assertNoFlagInjection(a, "args");
73
+ if (entry)
74
+ assertNoFlagInjection(entry, "entry");
75
+ if (target)
76
+ assertNoFlagInjection(target, "target");
77
+ if (devtool)
78
+ assertNoFlagInjection(devtool, "devtool");
79
+ // Validate env keys and values (Gap #84)
80
+ const envRecord = env;
81
+ if (envRecord) {
82
+ for (const [key, value] of Object.entries(envRecord)) {
83
+ assertNoFlagInjection(String(key), "env key");
84
+ assertNoFlagInjection(String(value), "env value");
85
+ }
46
86
  }
47
87
  const cliArgs = [];
48
88
  if (config)
49
89
  cliArgs.push("--config", config);
50
90
  if (mode)
51
91
  cliArgs.push("--mode", mode);
92
+ if (entry)
93
+ cliArgs.push("--entry", entry);
94
+ if (target)
95
+ cliArgs.push("--target", target);
96
+ if (devtool)
97
+ cliArgs.push("--devtool", devtool);
98
+ if (analyze)
99
+ cliArgs.push("--analyze");
100
+ if (bail)
101
+ cliArgs.push("--bail");
102
+ if (cache !== undefined) {
103
+ cliArgs.push(cache ? "--cache" : "--no-cache");
104
+ }
105
+ // Gap #84: env parameter — pass key=value pairs to webpack config function
106
+ if (envRecord) {
107
+ for (const [key, value] of Object.entries(envRecord)) {
108
+ cliArgs.push("--env", `${key}=${value}`);
109
+ }
110
+ }
111
+ // Gap #85: profile parameter — enable per-module timing data
112
+ if (profile)
113
+ cliArgs.push("--profile");
52
114
  cliArgs.push("--json");
115
+ cliArgs.push("--no-color");
53
116
  if (args) {
54
117
  cliArgs.push(...args);
55
118
  }
@@ -57,7 +120,7 @@ export function registerWebpackTool(server) {
57
120
  const result = await webpackCmd(cliArgs, cwd);
58
121
  const duration = Math.round((Date.now() - start) / 100) / 10;
59
122
  const rawOutput = result.stdout + "\n" + result.stderr;
60
- const data = parseWebpackOutput(result.stdout, result.stderr, result.exitCode, duration);
123
+ const data = parseWebpackOutput(result.stdout, result.stderr, result.exitCode, duration, profile);
61
124
  return compactDualOutput(data, rawOutput, formatWebpack, compactWebpackMap, formatWebpackCompact, compact === false);
62
125
  });
63
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webpack.js","sourceRoot":"","sources":["../../src/tools/webpack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webpack.js","sourceRoot":"","sources":["../../src/tools/webpack.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paretools/build",
3
- "version": "0.8.5",
3
+ "version": "0.10.0",
4
4
  "mcpName": "io.github.Dave-London/pare-build",
5
5
  "description": "MCP server for build tools (tsc, esbuild, etc.) with structured, token-efficient output",
6
6
  "license": "MIT",
@@ -52,7 +52,7 @@
52
52
  "dependencies": {
53
53
  "@modelcontextprotocol/sdk": "^1.26.0",
54
54
  "zod": "^4.3.6",
55
- "@paretools/shared": "0.8.5"
55
+ "@paretools/shared": "0.10.0"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@types/node": "^25.2.3",