@paretools/lint 0.3.0 → 0.6.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 +42 -10
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/formatters.d.ts +32 -1
  5. package/dist/lib/formatters.d.ts.map +1 -1
  6. package/dist/lib/formatters.js +54 -2
  7. package/dist/lib/formatters.js.map +1 -1
  8. package/dist/lib/lint-runner.d.ts +1 -0
  9. package/dist/lib/lint-runner.d.ts.map +1 -1
  10. package/dist/lib/lint-runner.js +3 -0
  11. package/dist/lib/lint-runner.js.map +1 -1
  12. package/dist/lib/parsers.d.ts +24 -1
  13. package/dist/lib/parsers.d.ts.map +1 -1
  14. package/dist/lib/parsers.js +123 -0
  15. package/dist/lib/parsers.js.map +1 -1
  16. package/dist/schemas/index.d.ts +26 -90
  17. package/dist/schemas/index.d.ts.map +1 -1
  18. package/dist/schemas/index.js +11 -2
  19. package/dist/schemas/index.js.map +1 -1
  20. package/dist/tools/biome-check.d.ts +3 -0
  21. package/dist/tools/biome-check.d.ts.map +1 -0
  22. package/dist/tools/biome-check.js +41 -0
  23. package/dist/tools/biome-check.js.map +1 -0
  24. package/dist/tools/biome-format.d.ts +3 -0
  25. package/dist/tools/biome-format.d.ts.map +1 -0
  26. package/dist/tools/biome-format.js +41 -0
  27. package/dist/tools/biome-format.js.map +1 -0
  28. package/dist/tools/format-check.d.ts.map +1 -1
  29. package/dist/tools/format-check.js +19 -6
  30. package/dist/tools/format-check.js.map +1 -1
  31. package/dist/tools/index.d.ts.map +1 -1
  32. package/dist/tools/index.js +6 -0
  33. package/dist/tools/index.js.map +1 -1
  34. package/dist/tools/lint.d.ts.map +1 -1
  35. package/dist/tools/lint.js +19 -6
  36. package/dist/tools/lint.js.map +1 -1
  37. package/dist/tools/prettier-format.d.ts +3 -0
  38. package/dist/tools/prettier-format.d.ts.map +1 -0
  39. package/dist/tools/prettier-format.js +41 -0
  40. package/dist/tools/prettier-format.js.map +1 -0
  41. package/package.json +20 -10
package/README.md CHANGED
@@ -1,22 +1,36 @@
1
1
  # @paretools/lint
2
2
 
3
- Pare MCP server for **linters**. Returns structured output from ESLint and Prettier.
3
+ [![npm](https://img.shields.io/npm/v/@paretools/lint.svg)](https://www.npmjs.com/package/@paretools/lint)
4
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/Dave-London/Pare/blob/main/LICENSE)
4
5
 
5
- ## Tools
6
+ **Structured, token-efficient linter output for AI agents.** Typed diagnostics from ESLint, Prettier, and Biome.
6
7
 
7
- | Tool | Description |
8
- | -------------- | -------------------------------------------------------- |
9
- | `lint` | ESLint diagnostics (file, line, rule, severity, message) |
10
- | `format-check` | Prettier check — list of files needing formatting |
8
+ Part of the [Pare](https://github.com/Dave-London/Pare) suite of MCP servers.
11
9
 
12
- ## Setup
10
+ ## Tools (5)
11
+
12
+ | Tool | Description |
13
+ | ----------------- | ----------------------------------------------------------- |
14
+ | `lint` | ESLint diagnostics (file, line, rule, severity, message) |
15
+ | `format-check` | Prettier check — list of files needing formatting |
16
+ | `prettier-format` | Format files with Prettier (--write), returns changed files |
17
+ | `biome-check` | Biome check (lint + format) with structured diagnostics |
18
+ | `biome-format` | Format files with Biome (--write), returns changed files |
19
+
20
+ ## Quick Start
21
+
22
+ ```bash
23
+ npx -y @paretools/lint
24
+ ```
25
+
26
+ Add to your MCP client config:
13
27
 
14
28
  ```json
15
29
  {
16
30
  "mcpServers": {
17
31
  "pare-lint": {
18
32
  "command": "npx",
19
- "args": ["@paretools/lint"]
33
+ "args": ["-y", "@paretools/lint"]
20
34
  }
21
35
  }
22
36
  }
@@ -47,11 +61,29 @@ Pare MCP server for **linters**. Returns structured output from ESLint and Prett
47
61
  }
48
62
  ```
49
63
 
64
+ ## All Pare Servers (62 tools)
65
+
66
+ | Package | Tools | Wraps |
67
+ | -------------------------------------------------------------------- | --------------------------------------------------------------------------- | ---------------------------------- |
68
+ | [@paretools/git](https://www.npmjs.com/package/@paretools/git) | status, log, diff, branch, show, add, commit, push, pull, checkout | git |
69
+ | [@paretools/test](https://www.npmjs.com/package/@paretools/test) | run, coverage | pytest, jest, vitest, mocha |
70
+ | [@paretools/npm](https://www.npmjs.com/package/@paretools/npm) | install, audit, outdated, list, run, test, init | npm |
71
+ | [@paretools/build](https://www.npmjs.com/package/@paretools/build) | tsc, build, esbuild, vite-build, webpack | tsc, esbuild, vite, webpack |
72
+ | **@paretools/lint** | lint, format-check, prettier-format, biome-check, biome-format | eslint, prettier, biome |
73
+ | [@paretools/python](https://www.npmjs.com/package/@paretools/python) | pip-install, mypy, ruff-check, pip-audit, pytest, uv-install, uv-run, black | pip, mypy, ruff, pytest, uv, black |
74
+ | [@paretools/docker](https://www.npmjs.com/package/@paretools/docker) | ps, build, logs, images, run, exec, compose-up, compose-down, pull | docker, docker compose |
75
+ | [@paretools/cargo](https://www.npmjs.com/package/@paretools/cargo) | build, test, clippy, run, add, remove, fmt, doc, check | cargo |
76
+ | [@paretools/go](https://www.npmjs.com/package/@paretools/go) | build, test, vet, run, mod-tidy, fmt, generate | go, gofmt |
77
+
78
+ ## Compatible Clients
79
+
80
+ Works with any MCP-compatible client: [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Claude Desktop](https://claude.ai/download), [Cursor](https://cursor.com), [Windsurf](https://codeium.com/windsurf), [VS Code / GitHub Copilot](https://code.visualstudio.com), [Cline](https://github.com/cline/cline), [Roo Code](https://roocode.com), [Zed](https://zed.dev), [Continue.dev](https://continue.dev), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [OpenAI Codex](https://openai.com/index/codex/)
81
+
50
82
  ## Links
51
83
 
52
- - [Pare monorepo](https://github.com/Dave-London/pare)
84
+ - [Pare monorepo](https://github.com/Dave-London/Pare)
53
85
  - [MCP protocol](https://modelcontextprotocol.io)
54
86
 
55
87
  ## License
56
88
 
57
- [MIT](https://github.com/Dave-London/pare/blob/main/LICENSE)
89
+ [MIT](https://github.com/Dave-London/Pare/blob/main/LICENSE)
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
4
  import { registerAllTools } from "./tools/index.js";
5
5
  const server = new McpServer({ name: "@paretools/lint", version: "0.2.0" }, {
6
- instructions: "Structured linting operations (ESLint, Prettier format check). Use instead of running lint commands via bash. Returns typed JSON with structured violation details and counts.",
6
+ instructions: "Structured linting and formatting operations (ESLint, Prettier, Biome). Use instead of running lint/format commands via bash. Returns typed JSON with structured violation details and counts.",
7
7
  });
8
8
  registerAllTools(server);
9
9
  const transport = new StdioServerTransport();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC7C;IACE,YAAY,EACV,gLAAgL;CACnL,CACF,CAAC;AAEF,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEzB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC7C;IACE,YAAY,EACV,gMAAgM;CACnM,CACF,CAAC;AAEF,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEzB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -1,4 +1,35 @@
1
- import type { LintResult, FormatCheckResult } from "../schemas/index.js";
1
+ import type { LintResult, FormatCheckResult, FormatWriteResult } from "../schemas/index.js";
2
+ /** Formats structured ESLint results into a human-readable diagnostic summary with file locations. */
2
3
  export declare function formatLint(data: LintResult): string;
4
+ /** Formats structured Prettier check results into a human-readable list of unformatted files. */
3
5
  export declare function formatFormatCheck(data: FormatCheckResult): string;
6
+ /** Formats structured format-write results into a human-readable summary. */
7
+ export declare function formatFormatWrite(data: FormatWriteResult): string;
8
+ /** Compact lint: counts only, no individual diagnostics. */
9
+ export interface LintResultCompact {
10
+ [key: string]: unknown;
11
+ total: number;
12
+ errors: number;
13
+ warnings: number;
14
+ fixable: number;
15
+ filesChecked: number;
16
+ }
17
+ export declare function compactLintMap(data: LintResult): LintResultCompact;
18
+ export declare function formatLintCompact(data: LintResultCompact): string;
19
+ /** Compact format check: counts only, no individual file paths. */
20
+ export interface FormatCheckResultCompact {
21
+ [key: string]: unknown;
22
+ formatted: boolean;
23
+ total: number;
24
+ }
25
+ export declare function compactFormatCheckMap(data: FormatCheckResult): FormatCheckResultCompact;
26
+ export declare function formatFormatCheckCompact(data: FormatCheckResultCompact): string;
27
+ /** Compact format write: counts only, no individual file paths. */
28
+ export interface FormatWriteResultCompact {
29
+ [key: string]: unknown;
30
+ success: boolean;
31
+ filesChanged: number;
32
+ }
33
+ export declare function compactFormatWriteMap(data: FormatWriteResult): FormatWriteResultCompact;
34
+ export declare function formatFormatWriteCompact(data: FormatWriteResultCompact): string;
4
35
  //# sourceMappingURL=formatters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAUnD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAQjE"}
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE5F,sGAAsG;AACtG,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAUnD;AAED,iGAAiG;AACjG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAQjE;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CASjE;AAID,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,CAQlE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAGjE;AAED,mEAAmE;AACnE,MAAM,WAAW,wBAAwB;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,wBAAwB,CAKvF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAG/E;AAED,mEAAmE;AACnE,MAAM,WAAW,wBAAwB;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,wBAAwB,CAKvF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAI/E"}
@@ -1,21 +1,73 @@
1
+ /** Formats structured ESLint results into a human-readable diagnostic summary with file locations. */
1
2
  export function formatLint(data) {
2
3
  if (data.total === 0)
3
4
  return `Lint: no issues found (${data.filesChecked} files checked).`;
4
5
  const lines = [
5
6
  `Lint: ${data.errors} errors, ${data.warnings} warnings (${data.fixable} fixable)`,
6
7
  ];
7
- for (const d of data.diagnostics) {
8
+ for (const d of data.diagnostics ?? []) {
8
9
  lines.push(` ${d.file}:${d.line}:${d.column} ${d.severity} ${d.rule}: ${d.message}`);
9
10
  }
10
11
  return lines.join("\n");
11
12
  }
13
+ /** Formats structured Prettier check results into a human-readable list of unformatted files. */
12
14
  export function formatFormatCheck(data) {
13
15
  if (data.formatted)
14
16
  return "All files are formatted.";
15
17
  const lines = [`${data.total} files need formatting:`];
16
- for (const f of data.files) {
18
+ for (const f of data.files ?? []) {
17
19
  lines.push(` ${f}`);
18
20
  }
19
21
  return lines.join("\n");
20
22
  }
23
+ /** Formats structured format-write results into a human-readable summary. */
24
+ export function formatFormatWrite(data) {
25
+ if (!data.success)
26
+ return "Format failed.";
27
+ if (data.filesChanged === 0)
28
+ return "All files already formatted.";
29
+ const lines = [`Formatted ${data.filesChanged} files:`];
30
+ for (const f of data.files ?? []) {
31
+ lines.push(` ${f}`);
32
+ }
33
+ return lines.join("\n");
34
+ }
35
+ export function compactLintMap(data) {
36
+ return {
37
+ total: data.total,
38
+ errors: data.errors,
39
+ warnings: data.warnings,
40
+ fixable: data.fixable,
41
+ filesChecked: data.filesChecked,
42
+ };
43
+ }
44
+ export function formatLintCompact(data) {
45
+ if (data.total === 0)
46
+ return `Lint: no issues found (${data.filesChecked} files checked).`;
47
+ return `Lint: ${data.errors} errors, ${data.warnings} warnings (${data.fixable} fixable) across ${data.filesChecked} files.`;
48
+ }
49
+ export function compactFormatCheckMap(data) {
50
+ return {
51
+ formatted: data.formatted,
52
+ total: data.total,
53
+ };
54
+ }
55
+ export function formatFormatCheckCompact(data) {
56
+ if (data.formatted)
57
+ return "All files are formatted.";
58
+ return `${data.total} files need formatting.`;
59
+ }
60
+ export function compactFormatWriteMap(data) {
61
+ return {
62
+ success: data.success,
63
+ filesChanged: data.filesChanged,
64
+ };
65
+ }
66
+ export function formatFormatWriteCompact(data) {
67
+ if (!data.success)
68
+ return "Format failed.";
69
+ if (data.filesChanged === 0)
70
+ return "All files already formatted.";
71
+ return `Formatted ${data.filesChanged} files.`;
72
+ }
21
73
  //# sourceMappingURL=formatters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,0BAA0B,IAAI,CAAC,YAAY,kBAAkB,CAAC;IAE3F,MAAM,KAAK,GAAG;QACZ,SAAS,IAAI,CAAC,MAAM,YAAY,IAAI,CAAC,QAAQ,cAAc,IAAI,CAAC,OAAO,WAAW;KACnF,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,0BAA0B,CAAC;IAEtD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,yBAAyB,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAEA,sGAAsG;AACtG,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,0BAA0B,IAAI,CAAC,YAAY,kBAAkB,CAAC;IAE3F,MAAM,KAAK,GAAG;QACZ,SAAS,IAAI,CAAC,MAAM,YAAY,IAAI,CAAC,QAAQ,cAAc,IAAI,CAAC,OAAO,WAAW;KACnF,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,0BAA0B,CAAC;IAEtD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,yBAAyB,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,gBAAgB,CAAC;IAC3C,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC;QAAE,OAAO,8BAA8B,CAAC;IAEnE,MAAM,KAAK,GAAG,CAAC,aAAa,IAAI,CAAC,YAAY,SAAS,CAAC,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAcD,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC7C,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,0BAA0B,IAAI,CAAC,YAAY,kBAAkB,CAAC;IAC3F,OAAO,SAAS,IAAI,CAAC,MAAM,YAAY,IAAI,CAAC,QAAQ,cAAc,IAAI,CAAC,OAAO,oBAAoB,IAAI,CAAC,YAAY,SAAS,CAAC;AAC/H,CAAC;AASD,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IAC3D,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAA8B;IACrE,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,0BAA0B,CAAC;IACtD,OAAO,GAAG,IAAI,CAAC,KAAK,yBAAyB,CAAC;AAChD,CAAC;AASD,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IAC3D,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAA8B;IACrE,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,gBAAgB,CAAC;IAC3C,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC;QAAE,OAAO,8BAA8B,CAAC;IACnE,OAAO,aAAa,IAAI,CAAC,YAAY,SAAS,CAAC;AACjD,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { type RunResult } from "@paretools/shared";
2
2
  export declare function eslint(args: string[], cwd?: string): Promise<RunResult>;
3
3
  export declare function prettier(args: string[], cwd?: string): Promise<RunResult>;
4
+ export declare function biome(args: string[], cwd?: string): Promise<RunResult>;
4
5
  //# sourceMappingURL=lint-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lint-runner.d.ts","sourceRoot":"","sources":["../../src/lib/lint-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAExD,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAE7E;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAE/E"}
1
+ {"version":3,"file":"lint-runner.d.ts","sourceRoot":"","sources":["../../src/lib/lint-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAExD,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAE7E;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAE/E;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAE5E"}
@@ -5,4 +5,7 @@ export async function eslint(args, cwd) {
5
5
  export async function prettier(args, cwd) {
6
6
  return run("npx", ["prettier", ...args], { cwd });
7
7
  }
8
+ export async function biome(args, cwd) {
9
+ return run("npx", ["@biomejs/biome", ...args], { cwd });
10
+ }
8
11
  //# sourceMappingURL=lint-runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lint-runner.js","sourceRoot":"","sources":["../../src/lib/lint-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAkB,MAAM,mBAAmB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,GAAY;IACvD,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc,EAAE,GAAY;IACzD,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"lint-runner.js","sourceRoot":"","sources":["../../src/lib/lint-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAkB,MAAM,mBAAmB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,GAAY;IACvD,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc,EAAE,GAAY;IACzD,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAc,EAAE,GAAY;IACtD,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1D,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { LintResult, FormatCheckResult } from "../schemas/index.js";
1
+ import type { LintResult, FormatCheckResult, FormatWriteResult } from "../schemas/index.js";
2
2
  /**
3
3
  * Parses ESLint JSON output (from `eslint --format json`).
4
4
  *
@@ -13,4 +13,27 @@ export declare function parseEslintJson(stdout: string): LintResult;
13
13
  * "Checking formatting...\n[warn] src/index.ts\n[warn] Code style issues found..."
14
14
  */
15
15
  export declare function parsePrettierCheck(stdout: string, stderr: string, exitCode: number): FormatCheckResult;
16
+ /**
17
+ * Parses Prettier `--write` output.
18
+ *
19
+ * Prettier --write outputs one file path per line for each file it rewrites.
20
+ * If all files are already formatted, output may be empty or just the file names
21
+ * with no changes. We detect changed files from the output lines.
22
+ */
23
+ export declare function parsePrettierWrite(stdout: string, stderr: string, exitCode: number): FormatWriteResult;
24
+ /**
25
+ * Parses Biome `check --reporter=json` output.
26
+ *
27
+ * Biome JSON reporter outputs an object with a `diagnostics` array:
28
+ * { diagnostics: [{ category, severity, description, location: { path: { file }, span }, advices }] }
29
+ */
30
+ export declare function parseBiomeJson(stdout: string): LintResult;
31
+ /**
32
+ * Parses Biome `format --write` output.
33
+ *
34
+ * Biome format --write outputs lines like:
35
+ * "Formatted 3 files in 50ms. Fixed 2 files."
36
+ * It also outputs individual file paths that were formatted.
37
+ */
38
+ export declare function parseBiomeFormat(stdout: string, stderr: string, exitCode: number): FormatWriteResult;
16
39
  //# sourceMappingURL=parsers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/lib/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAkB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEzF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAsC1D;AAkBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,iBAAiB,CAiBnB"}
1
+ {"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/lib/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAEV,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAE7B;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAsC1D;AAkBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,iBAAiB,CAiBnB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,iBAAiB,CAyBnB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAsDzD;AAmCD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,iBAAiB,CAwBnB"}
@@ -62,4 +62,127 @@ export function parsePrettierCheck(stdout, stderr, exitCode) {
62
62
  total: files.length,
63
63
  };
64
64
  }
65
+ /**
66
+ * Parses Prettier `--write` output.
67
+ *
68
+ * Prettier --write outputs one file path per line for each file it rewrites.
69
+ * If all files are already formatted, output may be empty or just the file names
70
+ * with no changes. We detect changed files from the output lines.
71
+ */
72
+ export function parsePrettierWrite(stdout, stderr, exitCode) {
73
+ const output = stdout + "\n" + stderr;
74
+ const lines = output.split("\n").filter(Boolean);
75
+ const files = [];
76
+ for (const line of lines) {
77
+ const trimmed = line.trim();
78
+ // Prettier --write outputs file paths for files it processes.
79
+ // Skip lines that don't look like file paths.
80
+ if (trimmed &&
81
+ !trimmed.startsWith("[") &&
82
+ !trimmed.startsWith("Checking") &&
83
+ !trimmed.startsWith("All ") &&
84
+ /\.\w+$/.test(trimmed)) {
85
+ files.push(trimmed);
86
+ }
87
+ }
88
+ return {
89
+ filesChanged: files.length,
90
+ files,
91
+ success: exitCode === 0,
92
+ };
93
+ }
94
+ /**
95
+ * Parses Biome `check --reporter=json` output.
96
+ *
97
+ * Biome JSON reporter outputs an object with a `diagnostics` array:
98
+ * { diagnostics: [{ category, severity, description, location: { path: { file }, span }, advices }] }
99
+ */
100
+ export function parseBiomeJson(stdout) {
101
+ let biomeOutput;
102
+ try {
103
+ biomeOutput = JSON.parse(stdout);
104
+ }
105
+ catch {
106
+ return { diagnostics: [], total: 0, errors: 0, warnings: 0, fixable: 0, filesChecked: 0 };
107
+ }
108
+ const diagnostics = [];
109
+ const filesSet = new Set();
110
+ const rawDiags = biomeOutput.diagnostics ?? [];
111
+ for (const diag of rawDiags) {
112
+ const file = diag.location?.path?.file ?? "unknown";
113
+ filesSet.add(file);
114
+ const severity = mapBiomeSeverity(diag.severity);
115
+ const rule = diag.category ?? "unknown";
116
+ const message = typeof diag.description === "string"
117
+ ? diag.description
118
+ : (diag.message ?? "unknown diagnostic");
119
+ // Biome spans are byte offsets, not line/column. We extract from sourceCode if available,
120
+ // but default to 0 if line info is not in the JSON output.
121
+ const line = diag.location?.sourceCode?.lineNumber ?? 0;
122
+ const column = diag.location?.sourceCode?.columnNumber ?? 0;
123
+ const fixable = diag.tags?.includes("fixable") ?? false;
124
+ diagnostics.push({
125
+ file,
126
+ line,
127
+ column,
128
+ severity,
129
+ rule,
130
+ message,
131
+ fixable,
132
+ });
133
+ }
134
+ const errors = diagnostics.filter((d) => d.severity === "error").length;
135
+ const warnings = diagnostics.filter((d) => d.severity === "warning").length;
136
+ const fixable = diagnostics.filter((d) => d.fixable).length;
137
+ return {
138
+ diagnostics,
139
+ total: diagnostics.length,
140
+ errors,
141
+ warnings,
142
+ fixable,
143
+ filesChecked: filesSet.size,
144
+ };
145
+ }
146
+ function mapBiomeSeverity(severity) {
147
+ switch (severity) {
148
+ case "error":
149
+ case "fatal":
150
+ return "error";
151
+ case "warning":
152
+ return "warning";
153
+ case "information":
154
+ case "hint":
155
+ return "info";
156
+ default:
157
+ return "warning";
158
+ }
159
+ }
160
+ /**
161
+ * Parses Biome `format --write` output.
162
+ *
163
+ * Biome format --write outputs lines like:
164
+ * "Formatted 3 files in 50ms. Fixed 2 files."
165
+ * It also outputs individual file paths that were formatted.
166
+ */
167
+ export function parseBiomeFormat(stdout, stderr, exitCode) {
168
+ const output = stdout + "\n" + stderr;
169
+ const lines = output.split("\n").filter(Boolean);
170
+ const files = [];
171
+ for (const line of lines) {
172
+ const trimmed = line.trim();
173
+ // Skip summary lines and empty lines. File paths end with an extension.
174
+ if (trimmed &&
175
+ !trimmed.startsWith("Formatted ") &&
176
+ !trimmed.startsWith("Fixed ") &&
177
+ !trimmed.startsWith("Checked ") &&
178
+ /\.\w+$/.test(trimmed)) {
179
+ files.push(trimmed);
180
+ }
181
+ }
182
+ return {
183
+ filesChanged: files.length,
184
+ files,
185
+ success: exitCode === 0,
186
+ };
187
+ }
65
188
  //# sourceMappingURL=parsers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/lib/parsers.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,IAAI,KAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAC5F,CAAC;IAED,MAAM,WAAW,GAAqB,EAAE,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC;gBACnB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC;gBACvB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;gBAChF,IAAI,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;gBAC7B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;IACxE,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAE5D,OAAO;QACL,WAAW;QACX,KAAK,EAAE,WAAW,CAAC,MAAM;QACzB,MAAM;QACN,QAAQ;QACR,OAAO;QACP,YAAY,EAAE,KAAK,CAAC,MAAM;KAC3B,CAAC;AACJ,CAAC;AAkBD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,MAAc,EACd,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACnD,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ,KAAK,CAAC;QACzB,KAAK;QACL,KAAK,EAAE,KAAK,CAAC,MAAM;KACpB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/lib/parsers.ts"],"names":[],"mappings":"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"}
@@ -1,121 +1,57 @@
1
1
  import { z } from "zod";
2
+ /** Zod schema for a single ESLint diagnostic with file location, severity, rule name, and fixability. */
2
3
  export declare const LintDiagnosticSchema: z.ZodObject<{
3
4
  file: z.ZodString;
4
5
  line: z.ZodNumber;
5
6
  column: z.ZodNumber;
6
7
  endLine: z.ZodOptional<z.ZodNumber>;
7
8
  endColumn: z.ZodOptional<z.ZodNumber>;
8
- severity: z.ZodEnum<["error", "warning", "info"]>;
9
+ severity: z.ZodEnum<{
10
+ error: "error";
11
+ warning: "warning";
12
+ info: "info";
13
+ }>;
9
14
  rule: z.ZodString;
10
15
  message: z.ZodString;
11
16
  fixable: z.ZodBoolean;
12
- }, "strip", z.ZodTypeAny, {
13
- file: string;
14
- line: number;
15
- column: number;
16
- severity: "error" | "warning" | "info";
17
- message: string;
18
- rule: string;
19
- fixable: boolean;
20
- endLine?: number | undefined;
21
- endColumn?: number | undefined;
22
- }, {
23
- file: string;
24
- line: number;
25
- column: number;
26
- severity: "error" | "warning" | "info";
27
- message: string;
28
- rule: string;
29
- fixable: boolean;
30
- endLine?: number | undefined;
31
- endColumn?: number | undefined;
32
- }>;
17
+ }, z.core.$strip>;
18
+ /** Zod schema for structured ESLint output including diagnostics, counts, and files checked. */
33
19
  export declare const LintResultSchema: z.ZodObject<{
34
- diagnostics: z.ZodArray<z.ZodObject<{
20
+ diagnostics: z.ZodOptional<z.ZodArray<z.ZodObject<{
35
21
  file: z.ZodString;
36
22
  line: z.ZodNumber;
37
23
  column: z.ZodNumber;
38
24
  endLine: z.ZodOptional<z.ZodNumber>;
39
25
  endColumn: z.ZodOptional<z.ZodNumber>;
40
- severity: z.ZodEnum<["error", "warning", "info"]>;
26
+ severity: z.ZodEnum<{
27
+ error: "error";
28
+ warning: "warning";
29
+ info: "info";
30
+ }>;
41
31
  rule: z.ZodString;
42
32
  message: z.ZodString;
43
33
  fixable: z.ZodBoolean;
44
- }, "strip", z.ZodTypeAny, {
45
- file: string;
46
- line: number;
47
- column: number;
48
- severity: "error" | "warning" | "info";
49
- message: string;
50
- rule: string;
51
- fixable: boolean;
52
- endLine?: number | undefined;
53
- endColumn?: number | undefined;
54
- }, {
55
- file: string;
56
- line: number;
57
- column: number;
58
- severity: "error" | "warning" | "info";
59
- message: string;
60
- rule: string;
61
- fixable: boolean;
62
- endLine?: number | undefined;
63
- endColumn?: number | undefined;
64
- }>, "many">;
34
+ }, z.core.$strip>>>;
65
35
  total: z.ZodNumber;
66
36
  errors: z.ZodNumber;
67
37
  warnings: z.ZodNumber;
68
38
  fixable: z.ZodNumber;
69
39
  filesChecked: z.ZodNumber;
70
- }, "strip", z.ZodTypeAny, {
71
- fixable: number;
72
- diagnostics: {
73
- file: string;
74
- line: number;
75
- column: number;
76
- severity: "error" | "warning" | "info";
77
- message: string;
78
- rule: string;
79
- fixable: boolean;
80
- endLine?: number | undefined;
81
- endColumn?: number | undefined;
82
- }[];
83
- total: number;
84
- errors: number;
85
- warnings: number;
86
- filesChecked: number;
87
- }, {
88
- fixable: number;
89
- diagnostics: {
90
- file: string;
91
- line: number;
92
- column: number;
93
- severity: "error" | "warning" | "info";
94
- message: string;
95
- rule: string;
96
- fixable: boolean;
97
- endLine?: number | undefined;
98
- endColumn?: number | undefined;
99
- }[];
100
- total: number;
101
- errors: number;
102
- warnings: number;
103
- filesChecked: number;
104
- }>;
40
+ }, z.core.$strip>;
105
41
  export type LintResult = z.infer<typeof LintResultSchema>;
106
42
  export type LintDiagnostic = z.infer<typeof LintDiagnosticSchema>;
43
+ /** Zod schema for structured Prettier format check output with formatted status and unformatted file list. */
107
44
  export declare const FormatCheckResultSchema: z.ZodObject<{
108
45
  formatted: z.ZodBoolean;
109
- files: z.ZodArray<z.ZodString, "many">;
46
+ files: z.ZodOptional<z.ZodArray<z.ZodString>>;
110
47
  total: z.ZodNumber;
111
- }, "strip", z.ZodTypeAny, {
112
- total: number;
113
- formatted: boolean;
114
- files: string[];
115
- }, {
116
- total: number;
117
- formatted: boolean;
118
- files: string[];
119
- }>;
48
+ }, z.core.$strip>;
120
49
  export type FormatCheckResult = z.infer<typeof FormatCheckResultSchema>;
50
+ /** Zod schema for structured format-write output (Prettier --write, Biome format --write). */
51
+ export declare const FormatWriteResultSchema: z.ZodObject<{
52
+ filesChanged: z.ZodNumber;
53
+ files: z.ZodOptional<z.ZodArray<z.ZodString>>;
54
+ success: z.ZodBoolean;
55
+ }, z.core.$strip>;
56
+ export type FormatWriteResult = z.infer<typeof FormatWriteResultSchema>;
121
57
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU/B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAIlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,yGAAyG;AACzG,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;iBAU/B,CAAC;AAEH,gGAAgG;AAChG,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;iBAO3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,8GAA8G;AAC9G,eAAO,MAAM,uBAAuB;;;;iBAIlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,8FAA8F;AAC9F,eAAO,MAAM,uBAAuB;;;;iBAIlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ /** Zod schema for a single ESLint diagnostic with file location, severity, rule name, and fixability. */
2
3
  export const LintDiagnosticSchema = z.object({
3
4
  file: z.string(),
4
5
  line: z.number(),
@@ -10,17 +11,25 @@ export const LintDiagnosticSchema = z.object({
10
11
  message: z.string(),
11
12
  fixable: z.boolean(),
12
13
  });
14
+ /** Zod schema for structured ESLint output including diagnostics, counts, and files checked. */
13
15
  export const LintResultSchema = z.object({
14
- diagnostics: z.array(LintDiagnosticSchema),
16
+ diagnostics: z.array(LintDiagnosticSchema).optional(),
15
17
  total: z.number(),
16
18
  errors: z.number(),
17
19
  warnings: z.number(),
18
20
  fixable: z.number(),
19
21
  filesChecked: z.number(),
20
22
  });
23
+ /** Zod schema for structured Prettier format check output with formatted status and unformatted file list. */
21
24
  export const FormatCheckResultSchema = z.object({
22
25
  formatted: z.boolean(),
23
- files: z.array(z.string()),
26
+ files: z.array(z.string()).optional(),
24
27
  total: z.number(),
25
28
  });
29
+ /** Zod schema for structured format-write output (Prettier --write, Biome format --write). */
30
+ export const FormatWriteResultSchema = z.object({
31
+ filesChanged: z.number(),
32
+ files: z.array(z.string()).optional(),
33
+ success: z.boolean(),
34
+ });
26
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;CACzB,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,yGAAyG;AACzG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;CACrB,CAAC,CAAC;AAEH,gGAAgG;AAChG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE;IACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;CACzB,CAAC,CAAC;AAKH,8GAA8G;AAC9G,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAIH,8FAA8F;AAC9F,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;CACrB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerBiomeCheckTool(server: McpServer): void;
3
+ //# sourceMappingURL=biome-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"biome-check.d.ts","sourceRoot":"","sources":["../../src/tools/biome-check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,QAgDvD"}
@@ -0,0 +1,41 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
+ import { biome } from "../lib/lint-runner.js";
4
+ import { parseBiomeJson } from "../lib/parsers.js";
5
+ import { formatLint, compactLintMap, formatLintCompact } from "../lib/formatters.js";
6
+ import { LintResultSchema } from "../schemas/index.js";
7
+ export function registerBiomeCheckTool(server) {
8
+ server.registerTool("biome-check", {
9
+ title: "Biome Check",
10
+ description: "Runs Biome check (lint + format) and returns structured diagnostics (file, line, rule, severity, message). Use instead of running `biome check` in the terminal.",
11
+ inputSchema: {
12
+ path: z
13
+ .string()
14
+ .max(INPUT_LIMITS.PATH_MAX)
15
+ .optional()
16
+ .describe("Project root path (default: cwd)"),
17
+ patterns: z
18
+ .array(z.string().max(INPUT_LIMITS.PATH_MAX))
19
+ .max(INPUT_LIMITS.ARRAY_MAX)
20
+ .optional()
21
+ .default(["."])
22
+ .describe("File patterns to check (default: ['.'])"),
23
+ compact: z
24
+ .boolean()
25
+ .optional()
26
+ .default(true)
27
+ .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
28
+ },
29
+ outputSchema: LintResultSchema,
30
+ }, async ({ path, patterns, compact }) => {
31
+ const cwd = path || process.cwd();
32
+ for (const p of patterns ?? []) {
33
+ assertNoFlagInjection(p, "patterns");
34
+ }
35
+ const args = ["check", "--reporter=json", ...(patterns || ["."])];
36
+ const result = await biome(args, cwd);
37
+ const data = parseBiomeJson(result.stdout);
38
+ return compactDualOutput(data, result.stdout, formatLint, compactLintMap, formatLintCompact, compact === false);
39
+ });
40
+ }
41
+ //# sourceMappingURL=biome-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"biome-check.js","sourceRoot":"","sources":["../../src/tools/biome-check.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,uBAAuB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,kKAAkK;QACpK,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,QAAQ,CAAC,CAAC;iBAC5C,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;iBACd,QAAQ,CAAC,yCAAyC,CAAC;YACtD,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,gBAAgB;KAC/B,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC/B,qBAAqB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerBiomeFormatTool(server: McpServer): void;
3
+ //# sourceMappingURL=biome-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"biome-format.d.ts","sourceRoot":"","sources":["../../src/tools/biome-format.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAgDxD"}
@@ -0,0 +1,41 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
+ import { biome } from "../lib/lint-runner.js";
4
+ import { parseBiomeFormat } from "../lib/parsers.js";
5
+ import { formatFormatWrite, compactFormatWriteMap, formatFormatWriteCompact, } from "../lib/formatters.js";
6
+ import { FormatWriteResultSchema } from "../schemas/index.js";
7
+ export function registerBiomeFormatTool(server) {
8
+ server.registerTool("biome-format", {
9
+ title: "Biome Format",
10
+ description: "Formats files with Biome (format --write) and returns a structured list of changed files. Use instead of running `biome format --write` in the terminal.",
11
+ inputSchema: {
12
+ path: z
13
+ .string()
14
+ .max(INPUT_LIMITS.PATH_MAX)
15
+ .optional()
16
+ .describe("Project root path (default: cwd)"),
17
+ patterns: z
18
+ .array(z.string().max(INPUT_LIMITS.PATH_MAX))
19
+ .max(INPUT_LIMITS.ARRAY_MAX)
20
+ .optional()
21
+ .default(["."])
22
+ .describe("File patterns to format (default: ['.'])"),
23
+ compact: z
24
+ .boolean()
25
+ .optional()
26
+ .default(true)
27
+ .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
28
+ },
29
+ outputSchema: FormatWriteResultSchema,
30
+ }, async ({ path, patterns, compact }) => {
31
+ const cwd = path || process.cwd();
32
+ for (const p of patterns ?? []) {
33
+ assertNoFlagInjection(p, "patterns");
34
+ }
35
+ const args = ["format", "--write", ...(patterns || ["."])];
36
+ const result = await biome(args, cwd);
37
+ const data = parseBiomeFormat(result.stdout, result.stderr, result.exitCode);
38
+ return compactDualOutput(data, result.stdout, formatFormatWrite, compactFormatWriteMap, formatFormatWriteCompact, compact === false);
39
+ });
40
+ }
41
+ //# sourceMappingURL=biome-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"biome-format.js","sourceRoot":"","sources":["../../src/tools/biome-format.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,uBAAuB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,0JAA0J;QAC5J,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,QAAQ,CAAC,CAAC;iBAC5C,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;iBACd,QAAQ,CAAC,0CAA0C,CAAC;YACvD,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,uBAAuB;KACtC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC/B,qBAAqB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE3D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7E,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"format-check.d.ts","sourceRoot":"","sources":["../../src/tools/format-check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QA0BxD"}
1
+ {"version":3,"file":"format-check.d.ts","sourceRoot":"","sources":["../../src/tools/format-check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAgDxD"}
@@ -1,28 +1,41 @@
1
1
  import { z } from "zod";
2
- import { dualOutput } from "@paretools/shared";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
3
  import { prettier } from "../lib/lint-runner.js";
4
4
  import { parsePrettierCheck } from "../lib/parsers.js";
5
- import { formatFormatCheck } from "../lib/formatters.js";
5
+ import { formatFormatCheck, compactFormatCheckMap, formatFormatCheckCompact, } from "../lib/formatters.js";
6
6
  import { FormatCheckResultSchema } from "../schemas/index.js";
7
7
  export function registerFormatCheckTool(server) {
8
8
  server.registerTool("format-check", {
9
9
  title: "Prettier Check",
10
10
  description: "Checks if files are formatted and returns a structured list of files needing formatting. Use instead of running `prettier --check` in the terminal.",
11
11
  inputSchema: {
12
- path: z.string().optional().describe("Project root path (default: cwd)"),
12
+ path: z
13
+ .string()
14
+ .max(INPUT_LIMITS.PATH_MAX)
15
+ .optional()
16
+ .describe("Project root path (default: cwd)"),
13
17
  patterns: z
14
- .array(z.string())
18
+ .array(z.string().max(INPUT_LIMITS.PATH_MAX))
19
+ .max(INPUT_LIMITS.ARRAY_MAX)
15
20
  .optional()
16
21
  .default(["."])
17
22
  .describe("File patterns to check (default: ['.'])"),
23
+ compact: z
24
+ .boolean()
25
+ .optional()
26
+ .default(true)
27
+ .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
18
28
  },
19
29
  outputSchema: FormatCheckResultSchema,
20
- }, async ({ path, patterns }) => {
30
+ }, async ({ path, patterns, compact }) => {
21
31
  const cwd = path || process.cwd();
32
+ for (const p of patterns ?? []) {
33
+ assertNoFlagInjection(p, "patterns");
34
+ }
22
35
  const args = ["--check", ...(patterns || ["."])];
23
36
  const result = await prettier(args, cwd);
24
37
  const data = parsePrettierCheck(result.stdout, result.stderr, result.exitCode);
25
- return dualOutput(data, formatFormatCheck);
38
+ return compactDualOutput(data, result.stdout, formatFormatCheck, compactFormatCheckMap, formatFormatCheckCompact, compact === false);
26
39
  });
27
40
  }
28
41
  //# sourceMappingURL=format-check.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-check.js","sourceRoot":"","sources":["../../src/tools/format-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,qJAAqJ;QACvJ,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YACxE,QAAQ,EAAE,CAAC;iBACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,EAAE;iBACV,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;iBACd,QAAQ,CAAC,yCAAyC,CAAC;SACvD;QACD,YAAY,EAAE,uBAAuB;KACtC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/E,OAAO,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC7C,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"format-check.js","sourceRoot":"","sources":["../../src/tools/format-check.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,uBAAuB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,qJAAqJ;QACvJ,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,QAAQ,CAAC,CAAC;iBAC5C,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;iBACd,QAAQ,CAAC,yCAAyC,CAAC;YACtD,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,uBAAuB;KACtC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC/B,qBAAqB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/E,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAGjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAMjD"}
@@ -1,7 +1,13 @@
1
1
  import { registerLintTool } from "./lint.js";
2
2
  import { registerFormatCheckTool } from "./format-check.js";
3
+ import { registerPrettierFormatTool } from "./prettier-format.js";
4
+ import { registerBiomeCheckTool } from "./biome-check.js";
5
+ import { registerBiomeFormatTool } from "./biome-format.js";
3
6
  export function registerAllTools(server) {
4
7
  registerLintTool(server);
5
8
  registerFormatCheckTool(server);
9
+ registerPrettierFormatTool(server);
10
+ registerBiomeCheckTool(server);
11
+ registerBiomeFormatTool(server);
6
12
  }
7
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACnC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/tools/lint.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QA4BjD"}
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/tools/lint.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAkDjD"}
@@ -1,31 +1,44 @@
1
1
  import { z } from "zod";
2
- import { dualOutput } from "@paretools/shared";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
3
  import { eslint } from "../lib/lint-runner.js";
4
4
  import { parseEslintJson } from "../lib/parsers.js";
5
- import { formatLint } from "../lib/formatters.js";
5
+ import { formatLint, compactLintMap, formatLintCompact } from "../lib/formatters.js";
6
6
  import { LintResultSchema } from "../schemas/index.js";
7
7
  export function registerLintTool(server) {
8
8
  server.registerTool("lint", {
9
9
  title: "ESLint Check",
10
10
  description: "Runs ESLint and returns structured diagnostics (file, line, rule, severity, message). Use instead of running `eslint` in the terminal.",
11
11
  inputSchema: {
12
- path: z.string().optional().describe("Project root path (default: cwd)"),
12
+ path: z
13
+ .string()
14
+ .max(INPUT_LIMITS.PATH_MAX)
15
+ .optional()
16
+ .describe("Project root path (default: cwd)"),
13
17
  patterns: z
14
- .array(z.string())
18
+ .array(z.string().max(INPUT_LIMITS.PATH_MAX))
19
+ .max(INPUT_LIMITS.ARRAY_MAX)
15
20
  .optional()
16
21
  .default(["."])
17
22
  .describe("File patterns to lint (default: ['.'])"),
18
23
  fix: z.boolean().optional().default(false).describe("Auto-fix problems"),
24
+ compact: z
25
+ .boolean()
26
+ .optional()
27
+ .default(true)
28
+ .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
19
29
  },
20
30
  outputSchema: LintResultSchema,
21
- }, async ({ path, patterns, fix }) => {
31
+ }, async ({ path, patterns, fix, compact }) => {
22
32
  const cwd = path || process.cwd();
33
+ for (const p of patterns ?? []) {
34
+ assertNoFlagInjection(p, "patterns");
35
+ }
23
36
  const args = ["--format", "json", ...(patterns || ["."])];
24
37
  if (fix)
25
38
  args.push("--fix");
26
39
  const result = await eslint(args, cwd);
27
40
  const data = parseEslintJson(result.stdout);
28
- return dualOutput(data, formatLint);
41
+ return compactDualOutput(data, result.stdout, formatLint, compactLintMap, formatLintCompact, compact === false);
29
42
  });
30
43
  }
31
44
  //# sourceMappingURL=lint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/tools/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,wIAAwI;QAC1I,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YACxE,QAAQ,EAAE,CAAC;iBACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,EAAE;iBACV,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;iBACd,QAAQ,CAAC,wCAAwC,CAAC;YACrD,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;SACzE;QACD,YAAY,EAAE,gBAAgB;KAC/B,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,GAAG;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/tools/lint.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,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,wIAAwI;QAC1I,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,QAAQ,CAAC,CAAC;iBAC5C,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;iBACd,QAAQ,CAAC,wCAAwC,CAAC;YACrD,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACxE,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,gBAAgB;KAC/B,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC/B,qBAAqB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,GAAG;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerPrettierFormatTool(server: McpServer): void;
3
+ //# sourceMappingURL=prettier-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prettier-format.d.ts","sourceRoot":"","sources":["../../src/tools/prettier-format.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,QAgD3D"}
@@ -0,0 +1,41 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS } from "@paretools/shared";
3
+ import { prettier } from "../lib/lint-runner.js";
4
+ import { parsePrettierWrite } from "../lib/parsers.js";
5
+ import { formatFormatWrite, compactFormatWriteMap, formatFormatWriteCompact, } from "../lib/formatters.js";
6
+ import { FormatWriteResultSchema } from "../schemas/index.js";
7
+ export function registerPrettierFormatTool(server) {
8
+ server.registerTool("prettier-format", {
9
+ title: "Prettier Format",
10
+ description: "Formats files with Prettier (--write) and returns a structured list of changed files. Use instead of running `prettier --write` in the terminal.",
11
+ inputSchema: {
12
+ path: z
13
+ .string()
14
+ .max(INPUT_LIMITS.PATH_MAX)
15
+ .optional()
16
+ .describe("Project root path (default: cwd)"),
17
+ patterns: z
18
+ .array(z.string().max(INPUT_LIMITS.PATH_MAX))
19
+ .max(INPUT_LIMITS.ARRAY_MAX)
20
+ .optional()
21
+ .default(["."])
22
+ .describe("File patterns to format (default: ['.'])"),
23
+ compact: z
24
+ .boolean()
25
+ .optional()
26
+ .default(true)
27
+ .describe("Auto-compact when structured output exceeds raw CLI tokens. Set false to always get full schema."),
28
+ },
29
+ outputSchema: FormatWriteResultSchema,
30
+ }, async ({ path, patterns, compact }) => {
31
+ const cwd = path || process.cwd();
32
+ for (const p of patterns ?? []) {
33
+ assertNoFlagInjection(p, "patterns");
34
+ }
35
+ const args = ["--write", ...(patterns || ["."])];
36
+ const result = await prettier(args, cwd);
37
+ const data = parsePrettierWrite(result.stdout, result.stderr, result.exitCode);
38
+ return compactDualOutput(data, result.stdout, formatFormatWrite, compactFormatWriteMap, formatFormatWriteCompact, compact === false);
39
+ });
40
+ }
41
+ //# sourceMappingURL=prettier-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prettier-format.js","sourceRoot":"","sources":["../../src/tools/prettier-format.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,uBAAuB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,kJAAkJ;QACpJ,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,QAAQ,CAAC,CAAC;iBAC5C,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;iBAC3B,QAAQ,EAAE;iBACV,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;iBACd,QAAQ,CAAC,0CAA0C,CAAC;YACvD,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,kGAAkG,CACnG;SACJ;QACD,YAAY,EAAE,uBAAuB;KACtC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC/B,qBAAqB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/E,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,21 +1,31 @@
1
1
  {
2
2
  "name": "@paretools/lint",
3
- "version": "0.3.0",
3
+ "version": "0.6.0",
4
4
  "mcpName": "io.github.Dave-London/lint",
5
- "description": "MCP server for linters (ESLint, Prettier) with structured, token-efficient output",
5
+ "description": "MCP server for linters (ESLint, Prettier, Biome) with structured, token-efficient output",
6
6
  "license": "MIT",
7
7
  "keywords": [
8
8
  "mcp",
9
9
  "mcp-server",
10
10
  "model-context-protocol",
11
11
  "structured-output",
12
+ "ai",
13
+ "ai-agent",
14
+ "claude",
15
+ "cursor",
16
+ "copilot",
17
+ "token-efficient",
18
+ "devtools",
19
+ "cli",
12
20
  "eslint",
13
21
  "prettier",
14
- "linting"
22
+ "biome",
23
+ "linting",
24
+ "formatter"
15
25
  ],
16
- "homepage": "https://github.com/Dave-London/pare/tree/main/packages/server-lint",
26
+ "homepage": "https://github.com/Dave-London/Pare/tree/main/packages/server-lint",
17
27
  "engines": {
18
- "node": ">=18"
28
+ "node": ">=20"
19
29
  },
20
30
  "type": "module",
21
31
  "bin": {
@@ -32,7 +42,7 @@
32
42
  },
33
43
  "repository": {
34
44
  "type": "git",
35
- "url": "https://github.com/Dave-London/pare.git",
45
+ "url": "https://github.com/Dave-London/Pare.git",
36
46
  "directory": "packages/server-lint"
37
47
  },
38
48
  "files": [
@@ -40,13 +50,13 @@
40
50
  ],
41
51
  "dependencies": {
42
52
  "@modelcontextprotocol/sdk": "^1.26.0",
43
- "zod": "^3.25.0",
44
- "@paretools/shared": "0.3.0"
53
+ "zod": "^4.3.6",
54
+ "@paretools/shared": "0.6.0"
45
55
  },
46
56
  "devDependencies": {
47
- "@types/node": "^22.0.0",
57
+ "@types/node": "^25.2.3",
48
58
  "typescript": "^5.7.0",
49
- "vitest": "^3.0.0",
59
+ "vitest": "^4.0.18",
50
60
  "@paretools/tsconfig": "0.0.0"
51
61
  },
52
62
  "scripts": {