@paretools/swift 0.11.1

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 (58) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +10 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/formatters.d.ts +95 -0
  7. package/dist/lib/formatters.d.ts.map +1 -0
  8. package/dist/lib/formatters.js +208 -0
  9. package/dist/lib/formatters.js.map +1 -0
  10. package/dist/lib/parsers.d.ts +73 -0
  11. package/dist/lib/parsers.d.ts.map +1 -0
  12. package/dist/lib/parsers.js +337 -0
  13. package/dist/lib/parsers.js.map +1 -0
  14. package/dist/lib/swift-runner.d.ts +3 -0
  15. package/dist/lib/swift-runner.d.ts.map +1 -0
  16. package/dist/lib/swift-runner.js +6 -0
  17. package/dist/lib/swift-runner.js.map +1 -0
  18. package/dist/schemas/index.d.ts +159 -0
  19. package/dist/schemas/index.d.ts.map +1 -0
  20. package/dist/schemas/index.js +105 -0
  21. package/dist/schemas/index.js.map +1 -0
  22. package/dist/tools/build.d.ts +4 -0
  23. package/dist/tools/build.d.ts.map +1 -0
  24. package/dist/tools/build.js +69 -0
  25. package/dist/tools/build.js.map +1 -0
  26. package/dist/tools/index.d.ts +4 -0
  27. package/dist/tools/index.d.ts.map +1 -0
  28. package/dist/tools/index.js +30 -0
  29. package/dist/tools/index.js.map +1 -0
  30. package/dist/tools/package-clean.d.ts +4 -0
  31. package/dist/tools/package-clean.d.ts.map +1 -0
  32. package/dist/tools/package-clean.js +25 -0
  33. package/dist/tools/package-clean.js.map +1 -0
  34. package/dist/tools/package-init.d.ts +4 -0
  35. package/dist/tools/package-init.d.ts.map +1 -0
  36. package/dist/tools/package-init.js +38 -0
  37. package/dist/tools/package-init.js.map +1 -0
  38. package/dist/tools/package-resolve.d.ts +4 -0
  39. package/dist/tools/package-resolve.d.ts.map +1 -0
  40. package/dist/tools/package-resolve.js +25 -0
  41. package/dist/tools/package-resolve.js.map +1 -0
  42. package/dist/tools/package-show-dependencies.d.ts +4 -0
  43. package/dist/tools/package-show-dependencies.d.ts.map +1 -0
  44. package/dist/tools/package-show-dependencies.js +31 -0
  45. package/dist/tools/package-show-dependencies.js.map +1 -0
  46. package/dist/tools/package-update.d.ts +4 -0
  47. package/dist/tools/package-update.d.ts.map +1 -0
  48. package/dist/tools/package-update.js +38 -0
  49. package/dist/tools/package-update.js.map +1 -0
  50. package/dist/tools/run.d.ts +4 -0
  51. package/dist/tools/run.d.ts.map +1 -0
  52. package/dist/tools/run.js +59 -0
  53. package/dist/tools/run.js.map +1 -0
  54. package/dist/tools/test.d.ts +4 -0
  55. package/dist/tools/test.d.ts.map +1 -0
  56. package/dist/tools/test.js +43 -0
  57. package/dist/tools/test.js.map +1 -0
  58. package/package.json +73 -0
@@ -0,0 +1,69 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS, compactInput, projectPathInput, } from "@paretools/shared";
3
+ import { swiftCmd } from "../lib/swift-runner.js";
4
+ import { parseBuildOutput } from "../lib/parsers.js";
5
+ import { formatBuild, compactBuildMap, formatBuildCompact } from "../lib/formatters.js";
6
+ import { SwiftBuildResultSchema } from "../schemas/index.js";
7
+ /** Registers the `build` tool on the given MCP server. */
8
+ export function registerBuildTool(server) {
9
+ server.registerTool("build", {
10
+ title: "Swift Build",
11
+ description: "Builds a Swift package and returns structured compiler diagnostics.",
12
+ inputSchema: {
13
+ configuration: z
14
+ .enum(["debug", "release"])
15
+ .optional()
16
+ .describe("Build configuration (debug or release)"),
17
+ target: z
18
+ .string()
19
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
20
+ .optional()
21
+ .describe("Specific target to build"),
22
+ product: z
23
+ .string()
24
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
25
+ .optional()
26
+ .describe("Specific product to build"),
27
+ verbose: z.boolean().optional().default(false).describe("Enable verbose output (-v)"),
28
+ path: projectPathInput,
29
+ compact: compactInput,
30
+ },
31
+ outputSchema: SwiftBuildResultSchema,
32
+ }, async ({ configuration, target, product, verbose, path, compact }) => {
33
+ const cwd = path || process.cwd();
34
+ if (target)
35
+ assertNoFlagInjection(target, "target");
36
+ if (product)
37
+ assertNoFlagInjection(product, "product");
38
+ const cmdArgs = ["build"];
39
+ if (configuration)
40
+ cmdArgs.push("-c", configuration);
41
+ if (target)
42
+ cmdArgs.push("--target", target);
43
+ if (product)
44
+ cmdArgs.push("--product", product);
45
+ if (verbose)
46
+ cmdArgs.push("-v");
47
+ const start = Date.now();
48
+ let timedOut = false;
49
+ let result;
50
+ try {
51
+ result = await swiftCmd(cmdArgs, cwd);
52
+ }
53
+ catch (err) {
54
+ const errMsg = err instanceof Error ? err.message : String(err);
55
+ if (errMsg.includes("timed out")) {
56
+ timedOut = true;
57
+ result = { exitCode: 124, stdout: "", stderr: errMsg };
58
+ }
59
+ else {
60
+ throw err;
61
+ }
62
+ }
63
+ const duration = Date.now() - start;
64
+ const data = parseBuildOutput(result.stdout, result.stderr, result.exitCode, duration, timedOut);
65
+ const rawOutput = (result.stdout + "\n" + result.stderr).trim();
66
+ return compactDualOutput(data, rawOutput, formatBuild, compactBuildMap, formatBuildCompact, compact === false);
67
+ });
68
+ }
69
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/tools/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /** Registers all Swift tools on the given MCP server, filtered by policy. */
3
+ export declare function registerAllTools(server: McpServer): void;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AAWzE,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAUjD"}
@@ -0,0 +1,30 @@
1
+ import { shouldRegisterTool } from "@paretools/shared";
2
+ import { registerBuildTool } from "./build.js";
3
+ import { registerTestTool } from "./test.js";
4
+ import { registerRunTool } from "./run.js";
5
+ import { registerPackageResolveTool } from "./package-resolve.js";
6
+ import { registerPackageUpdateTool } from "./package-update.js";
7
+ import { registerPackageShowDependenciesTool } from "./package-show-dependencies.js";
8
+ import { registerPackageCleanTool } from "./package-clean.js";
9
+ import { registerPackageInitTool } from "./package-init.js";
10
+ /** Registers all Swift tools on the given MCP server, filtered by policy. */
11
+ export function registerAllTools(server) {
12
+ const s = (name) => shouldRegisterTool("swift", name);
13
+ if (s("build"))
14
+ registerBuildTool(server);
15
+ if (s("test"))
16
+ registerTestTool(server);
17
+ if (s("run"))
18
+ registerRunTool(server);
19
+ if (s("package-resolve"))
20
+ registerPackageResolveTool(server);
21
+ if (s("package-update"))
22
+ registerPackageUpdateTool(server);
23
+ if (s("package-show-dependencies"))
24
+ registerPackageShowDependenciesTool(server);
25
+ if (s("package-clean"))
26
+ registerPackageCleanTool(server);
27
+ if (s("package-init"))
28
+ registerPackageInitTool(server);
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9D,IAAI,CAAC,CAAC,OAAO,CAAC;QAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC,MAAM,CAAC;QAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC,KAAK,CAAC;QAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,CAAC,iBAAiB,CAAC;QAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,CAAC,gBAAgB,CAAC;QAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,2BAA2B,CAAC;QAAE,mCAAmC,CAAC,MAAM,CAAC,CAAC;IAChF,IAAI,CAAC,CAAC,eAAe,CAAC;QAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,cAAc,CAAC;QAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /** Registers the `package-clean` tool on the given MCP server. */
3
+ export declare function registerPackageCleanTool(server: McpServer): void;
4
+ //# sourceMappingURL=package-clean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-clean.d.ts","sourceRoot":"","sources":["../../src/tools/package-clean.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,kEAAkE;AAClE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,QA8BzD"}
@@ -0,0 +1,25 @@
1
+ import { compactDualOutput, compactInput, projectPathInput } from "@paretools/shared";
2
+ import { swiftCmd } from "../lib/swift-runner.js";
3
+ import { parsePackageCleanOutput } from "../lib/parsers.js";
4
+ import { formatPackageClean, compactPackageCleanMap, formatPackageCleanCompact, } from "../lib/formatters.js";
5
+ import { SwiftPackageCleanResultSchema } from "../schemas/index.js";
6
+ /** Registers the `package-clean` tool on the given MCP server. */
7
+ export function registerPackageCleanTool(server) {
8
+ server.registerTool("package-clean", {
9
+ title: "Swift Package Clean",
10
+ description: "Cleans Swift package build artifacts and returns structured result.",
11
+ inputSchema: {
12
+ path: projectPathInput,
13
+ compact: compactInput,
14
+ },
15
+ outputSchema: SwiftPackageCleanResultSchema,
16
+ }, async ({ path, compact }) => {
17
+ const cwd = path || process.cwd();
18
+ const start = Date.now();
19
+ const result = await swiftCmd(["package", "clean"], cwd);
20
+ const duration = Date.now() - start;
21
+ const data = parsePackageCleanOutput(result.exitCode, duration);
22
+ return compactDualOutput(data, result.stdout + result.stderr, formatPackageClean, compactPackageCleanMap, formatPackageCleanCompact, compact === false);
23
+ });
24
+ }
25
+ //# sourceMappingURL=package-clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-clean.js","sourceRoot":"","sources":["../../src/tools/package-clean.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAEpE,kEAAkE;AAClE,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,qEAAqE;QAClF,WAAW,EAAE;YACX,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,YAAY;SACtB;QACD,YAAY,EAAE,6BAA6B;KAC5C,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAEpC,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChE,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAC7B,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /** Registers the `package-init` tool on the given MCP server. */
3
+ export declare function registerPackageInitTool(server: McpServer): void;
4
+ //# sourceMappingURL=package-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-init.d.ts","sourceRoot":"","sources":["../../src/tools/package-init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE,iEAAiE;AACjE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAyCxD"}
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS, compactInput, projectPathInput, } from "@paretools/shared";
3
+ import { swiftCmd } from "../lib/swift-runner.js";
4
+ import { parsePackageInitOutput } from "../lib/parsers.js";
5
+ import { formatPackageInit, compactPackageInitMap, formatPackageInitCompact, } from "../lib/formatters.js";
6
+ import { SwiftPackageInitResultSchema } from "../schemas/index.js";
7
+ /** Registers the `package-init` tool on the given MCP server. */
8
+ export function registerPackageInitTool(server) {
9
+ server.registerTool("package-init", {
10
+ title: "Swift Package Init",
11
+ description: "Initializes a new Swift package and returns structured result with created files.",
12
+ inputSchema: {
13
+ type: z
14
+ .enum(["library", "executable", "tool", "macro"])
15
+ .optional()
16
+ .describe("Package type to create"),
17
+ name: z.string().max(INPUT_LIMITS.SHORT_STRING_MAX).optional().describe("Package name"),
18
+ path: projectPathInput,
19
+ compact: compactInput,
20
+ },
21
+ outputSchema: SwiftPackageInitResultSchema,
22
+ }, async ({ type, name, path, compact }) => {
23
+ const cwd = path || process.cwd();
24
+ if (name)
25
+ assertNoFlagInjection(name, "name");
26
+ const cmdArgs = ["package", "init"];
27
+ if (type)
28
+ cmdArgs.push("--type", type);
29
+ if (name)
30
+ cmdArgs.push("--name", name);
31
+ const start = Date.now();
32
+ const result = await swiftCmd(cmdArgs, cwd);
33
+ const duration = Date.now() - start;
34
+ const data = parsePackageInitOutput(result.stdout, result.stderr, result.exitCode, duration);
35
+ return compactDualOutput(data, result.stdout + result.stderr, formatPackageInit, compactPackageInitMap, formatPackageInitCompact, compact === false);
36
+ });
37
+ }
38
+ //# sourceMappingURL=package-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-init.js","sourceRoot":"","sources":["../../src/tools/package-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAEnE,iEAAiE;AACjE,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,mFAAmF;QACrF,WAAW,EAAE;YACX,IAAI,EAAE,CAAC;iBACJ,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;iBAChD,QAAQ,EAAE;iBACV,QAAQ,CAAC,wBAAwB,CAAC;YACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;YACvF,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,YAAY;SACtB;QACD,YAAY,EAAE,4BAA4B;KAC3C,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,IAAI;YAAE,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE9C,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEvC,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,GAAG,EAAE,GAAG,KAAK,CAAC;QAEpC,MAAM,IAAI,GAAG,sBAAsB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7F,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAC7B,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /** Registers the `package-resolve` tool on the given MCP server. */
3
+ export declare function registerPackageResolveTool(server: McpServer): void;
4
+ //# sourceMappingURL=package-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-resolve.d.ts","sourceRoot":"","sources":["../../src/tools/package-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,oEAAoE;AACpE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,QAmC3D"}
@@ -0,0 +1,25 @@
1
+ import { compactDualOutput, compactInput, projectPathInput } from "@paretools/shared";
2
+ import { swiftCmd } from "../lib/swift-runner.js";
3
+ import { parsePackageResolveOutput } from "../lib/parsers.js";
4
+ import { formatPackageResolve, compactPackageResolveMap, formatPackageResolveCompact, } from "../lib/formatters.js";
5
+ import { SwiftPackageResolveResultSchema } from "../schemas/index.js";
6
+ /** Registers the `package-resolve` tool on the given MCP server. */
7
+ export function registerPackageResolveTool(server) {
8
+ server.registerTool("package-resolve", {
9
+ title: "Swift Package Resolve",
10
+ description: "Resolves Swift package dependencies and returns structured resolution results.",
11
+ inputSchema: {
12
+ path: projectPathInput,
13
+ compact: compactInput,
14
+ },
15
+ outputSchema: SwiftPackageResolveResultSchema,
16
+ }, async ({ path, compact }) => {
17
+ const cwd = path || process.cwd();
18
+ const start = Date.now();
19
+ const result = await swiftCmd(["package", "resolve"], cwd);
20
+ const duration = Date.now() - start;
21
+ const data = parsePackageResolveOutput(result.stdout, result.stderr, result.exitCode, duration);
22
+ return compactDualOutput(data, result.stdout + result.stderr, formatPackageResolve, compactPackageResolveMap, formatPackageResolveCompact, compact === false);
23
+ });
24
+ }
25
+ //# sourceMappingURL=package-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-resolve.js","sourceRoot":"","sources":["../../src/tools/package-resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AAEtE,oEAAoE;AACpE,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,gFAAgF;QAC7F,WAAW,EAAE;YACX,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,YAAY;SACtB;QACD,YAAY,EAAE,+BAA+B;KAC9C,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAEpC,MAAM,IAAI,GAAG,yBAAyB,CACpC,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,EACf,QAAQ,CACT,CAAC;QACF,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAC7B,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,EAC3B,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /** Registers the `package-show-dependencies` tool on the given MCP server. */
3
+ export declare function registerPackageShowDependenciesTool(server: McpServer): void;
4
+ //# sourceMappingURL=package-show-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-show-dependencies.d.ts","sourceRoot":"","sources":["../../src/tools/package-show-dependencies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,8EAA8E;AAC9E,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,SAAS,QAwCpE"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, compactInput, projectPathInput } from "@paretools/shared";
3
+ import { swiftCmd } from "../lib/swift-runner.js";
4
+ import { parsePackageShowDependenciesOutput } from "../lib/parsers.js";
5
+ import { formatPackageShowDependencies, compactPackageShowDependenciesMap, formatPackageShowDependenciesCompact, } from "../lib/formatters.js";
6
+ import { SwiftPackageShowDependenciesResultSchema } from "../schemas/index.js";
7
+ /** Registers the `package-show-dependencies` tool on the given MCP server. */
8
+ export function registerPackageShowDependenciesTool(server) {
9
+ server.registerTool("package-show-dependencies", {
10
+ title: "Swift Package Show Dependencies",
11
+ description: "Shows the dependency tree of a Swift package and returns structured dependency data.",
12
+ inputSchema: {
13
+ format: z
14
+ .enum(["text", "json", "dot"])
15
+ .optional()
16
+ .describe("Output format (text/json/dot)"),
17
+ path: projectPathInput,
18
+ compact: compactInput,
19
+ },
20
+ outputSchema: SwiftPackageShowDependenciesResultSchema,
21
+ }, async ({ format, path, compact }) => {
22
+ const cwd = path || process.cwd();
23
+ const cmdArgs = ["package", "show-dependencies"];
24
+ if (format)
25
+ cmdArgs.push("--format", format);
26
+ const result = await swiftCmd(cmdArgs, cwd);
27
+ const data = parsePackageShowDependenciesOutput(result.stdout, result.stderr, result.exitCode);
28
+ return compactDualOutput(data, result.stdout + result.stderr, formatPackageShowDependencies, compactPackageShowDependenciesMap, formatPackageShowDependenciesCompact, compact === false);
29
+ });
30
+ }
31
+ //# sourceMappingURL=package-show-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-show-dependencies.js","sourceRoot":"","sources":["../../src/tools/package-show-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,kCAAkC,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,EACjC,oCAAoC,GACrC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wCAAwC,EAAE,MAAM,qBAAqB,CAAC;AAE/E,8EAA8E;AAC9E,MAAM,UAAU,mCAAmC,CAAC,MAAiB;IACnE,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,sFAAsF;QACxF,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;iBAC7B,QAAQ,EAAE;iBACV,QAAQ,CAAC,+BAA+B,CAAC;YAC5C,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,YAAY;SACtB;QACD,YAAY,EAAE,wCAAwC;KACvD,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACjD,IAAI,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAE5C,MAAM,IAAI,GAAG,kCAAkC,CAC7C,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,CAChB,CAAC;QACF,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAC7B,6BAA6B,EAC7B,iCAAiC,EACjC,oCAAoC,EACpC,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /** Registers the `package-update` tool on the given MCP server. */
3
+ export declare function registerPackageUpdateTool(server: McpServer): void;
4
+ //# sourceMappingURL=package-update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-update.d.ts","sourceRoot":"","sources":["../../src/tools/package-update.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE,mEAAmE;AACnE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,QAgD1D"}
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS, compactInput, projectPathInput, } from "@paretools/shared";
3
+ import { swiftCmd } from "../lib/swift-runner.js";
4
+ import { parsePackageUpdateOutput } from "../lib/parsers.js";
5
+ import { formatPackageUpdate, compactPackageUpdateMap, formatPackageUpdateCompact, } from "../lib/formatters.js";
6
+ import { SwiftPackageUpdateResultSchema } from "../schemas/index.js";
7
+ /** Registers the `package-update` tool on the given MCP server. */
8
+ export function registerPackageUpdateTool(server) {
9
+ server.registerTool("package-update", {
10
+ title: "Swift Package Update",
11
+ description: "Updates Swift package dependencies and returns structured update results.",
12
+ inputSchema: {
13
+ packages: z
14
+ .array(z.string().max(INPUT_LIMITS.SHORT_STRING_MAX))
15
+ .max(INPUT_LIMITS.ARRAY_MAX)
16
+ .optional()
17
+ .describe("Specific packages to update (updates all if not specified)"),
18
+ path: projectPathInput,
19
+ compact: compactInput,
20
+ },
21
+ outputSchema: SwiftPackageUpdateResultSchema,
22
+ }, async ({ packages, path, compact }) => {
23
+ const cwd = path || process.cwd();
24
+ const cmdArgs = ["package", "update"];
25
+ if (packages && packages.length > 0) {
26
+ for (const pkg of packages) {
27
+ assertNoFlagInjection(pkg, "packages");
28
+ }
29
+ cmdArgs.push(...packages);
30
+ }
31
+ const start = Date.now();
32
+ const result = await swiftCmd(cmdArgs, cwd);
33
+ const duration = Date.now() - start;
34
+ const data = parsePackageUpdateOutput(result.stdout, result.stderr, result.exitCode, duration);
35
+ return compactDualOutput(data, result.stdout + result.stderr, formatPackageUpdate, compactPackageUpdateMap, formatPackageUpdateCompact, compact === false);
36
+ });
37
+ }
38
+ //# sourceMappingURL=package-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-update.js","sourceRoot":"","sources":["../../src/tools/package-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAErE,mEAAmE;AACnE,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,2EAA2E;QACxF,WAAW,EAAE;YACX,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,QAAQ,CAAC,4DAA4D,CAAC;YACzE,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,YAAY;SACtB;QACD,YAAY,EAAE,8BAA8B;KAC7C,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,qBAAqB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAED,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,GAAG,EAAE,GAAG,KAAK,CAAC;QAEpC,MAAM,IAAI,GAAG,wBAAwB,CACnC,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,EACf,QAAQ,CACT,CAAC;QACF,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAC7B,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /** Registers the `run` tool on the given MCP server. */
3
+ export declare function registerRunTool(server: McpServer): void;
4
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +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;AAazE,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QAmEhD"}
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS, compactInput, projectPathInput, } from "@paretools/shared";
3
+ import { swiftCmd } from "../lib/swift-runner.js";
4
+ import { parseRunOutput } from "../lib/parsers.js";
5
+ import { formatRun, compactRunMap, formatRunCompact } from "../lib/formatters.js";
6
+ import { SwiftRunResultSchema } from "../schemas/index.js";
7
+ /** Registers the `run` tool on the given MCP server. */
8
+ export function registerRunTool(server) {
9
+ server.registerTool("run", {
10
+ title: "Swift Run",
11
+ description: "Runs a Swift executable and returns structured output (exit code, stdout, stderr).",
12
+ inputSchema: {
13
+ executable: z
14
+ .string()
15
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
16
+ .optional()
17
+ .describe("Name of the executable product to run"),
18
+ args: z
19
+ .array(z.string().max(INPUT_LIMITS.STRING_MAX))
20
+ .max(INPUT_LIMITS.ARRAY_MAX)
21
+ .optional()
22
+ .describe("Arguments to pass to the executable"),
23
+ path: projectPathInput,
24
+ compact: compactInput,
25
+ },
26
+ outputSchema: SwiftRunResultSchema,
27
+ }, async ({ executable, args, path, compact }) => {
28
+ const cwd = path || process.cwd();
29
+ if (executable)
30
+ assertNoFlagInjection(executable, "executable");
31
+ const cmdArgs = ["run"];
32
+ if (executable)
33
+ cmdArgs.push(executable);
34
+ if (args && args.length > 0) {
35
+ cmdArgs.push("--");
36
+ cmdArgs.push(...args);
37
+ }
38
+ const start = Date.now();
39
+ let timedOut = false;
40
+ let result;
41
+ try {
42
+ result = await swiftCmd(cmdArgs, cwd);
43
+ }
44
+ catch (err) {
45
+ const errMsg = err instanceof Error ? err.message : String(err);
46
+ if (errMsg.includes("timed out")) {
47
+ timedOut = true;
48
+ result = { exitCode: 124, stdout: "", stderr: errMsg };
49
+ }
50
+ else {
51
+ throw err;
52
+ }
53
+ }
54
+ const duration = Date.now() - start;
55
+ const data = parseRunOutput(result.stdout, result.stderr, result.exitCode, duration, timedOut);
56
+ return compactDualOutput(data, result.stdout + result.stderr, formatRun, compactRunMap, formatRunCompact, compact === false);
57
+ });
58
+ }
59
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /** Registers the `test` tool on the given MCP server. */
3
+ export declare function registerTestTool(server: McpServer): void;
4
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +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;AAazE,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QA8CjD"}
@@ -0,0 +1,43 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS, compactInput, projectPathInput, } from "@paretools/shared";
3
+ import { swiftCmd } from "../lib/swift-runner.js";
4
+ import { parseTestOutput } from "../lib/parsers.js";
5
+ import { formatTest, compactTestMap, formatTestCompact } from "../lib/formatters.js";
6
+ import { SwiftTestResultSchema } from "../schemas/index.js";
7
+ /** Registers the `test` tool on the given MCP server. */
8
+ export function registerTestTool(server) {
9
+ server.registerTool("test", {
10
+ title: "Swift Test",
11
+ description: "Runs swift test and returns structured test results (name, status, pass/fail counts).",
12
+ inputSchema: {
13
+ filter: z
14
+ .string()
15
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
16
+ .optional()
17
+ .describe("Test name filter pattern (--filter)"),
18
+ parallel: z
19
+ .boolean()
20
+ .optional()
21
+ .default(true)
22
+ .describe("Run tests in parallel (--parallel)"),
23
+ path: projectPathInput,
24
+ compact: compactInput,
25
+ },
26
+ outputSchema: SwiftTestResultSchema,
27
+ }, async ({ filter, parallel, path, compact }) => {
28
+ const cwd = path || process.cwd();
29
+ if (filter)
30
+ assertNoFlagInjection(filter, "filter");
31
+ const cmdArgs = ["test"];
32
+ if (filter)
33
+ cmdArgs.push("--filter", filter);
34
+ if (parallel)
35
+ cmdArgs.push("--parallel");
36
+ const start = Date.now();
37
+ const result = await swiftCmd(cmdArgs, cwd);
38
+ const duration = Date.now() - start;
39
+ const data = parseTestOutput(result.stdout, result.stderr, result.exitCode, duration);
40
+ return compactDualOutput(data, result.stdout + result.stderr, formatTest, compactTestMap, formatTestCompact, compact === false);
41
+ });
42
+ }
43
+ //# sourceMappingURL=test.js.map
@@ -0,0 +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,EACL,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,yDAAyD;AACzD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,uFAAuF;QACzF,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAClC,QAAQ,EAAE;iBACV,QAAQ,CAAC,qCAAqC,CAAC;YAClD,QAAQ,EAAE,CAAC;iBACR,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,oCAAoC,CAAC;YACjD,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,YAAY;SACtB;QACD,YAAY,EAAE,qBAAqB;KACpC,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,MAAM;YAAE,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEpD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEzC,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,GAAG,EAAE,GAAG,KAAK,CAAC;QAEpC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtF,OAAO,iBAAiB,CACtB,IAAI,EACJ,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAC7B,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,OAAO,KAAK,KAAK,CAClB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@paretools/swift",
3
+ "version": "0.11.1",
4
+ "mcpName": "io.github.Dave-London/pare-swift",
5
+ "description": "MCP server for Swift build, test, and package operations with structured, token-efficient output",
6
+ "license": "MIT",
7
+ "keywords": [
8
+ "mcp",
9
+ "mcp-server",
10
+ "model-context-protocol",
11
+ "structured-output",
12
+ "ai",
13
+ "ai-agent",
14
+ "claude",
15
+ "cursor",
16
+ "copilot",
17
+ "token-efficient",
18
+ "devtools",
19
+ "cli",
20
+ "swift",
21
+ "swiftpm",
22
+ "xcode",
23
+ "apple",
24
+ "ios",
25
+ "macos"
26
+ ],
27
+ "homepage": "https://github.com/Dave-London/Pare/tree/main/packages/server-swift",
28
+ "engines": {
29
+ "node": ">=20"
30
+ },
31
+ "type": "module",
32
+ "bin": {
33
+ "pare-swift": "./dist/index.js"
34
+ },
35
+ "exports": {
36
+ ".": {
37
+ "types": "./dist/index.d.ts",
38
+ "default": "./dist/index.js"
39
+ }
40
+ },
41
+ "publishConfig": {
42
+ "access": "public"
43
+ },
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "https://github.com/Dave-London/Pare.git",
47
+ "directory": "packages/server-swift"
48
+ },
49
+ "bugs": {
50
+ "url": "https://github.com/Dave-London/Pare/issues"
51
+ },
52
+ "files": [
53
+ "dist"
54
+ ],
55
+ "dependencies": {
56
+ "@modelcontextprotocol/sdk": "^1.26.0",
57
+ "zod": "^4.3.6",
58
+ "@paretools/shared": "0.12.0"
59
+ },
60
+ "devDependencies": {
61
+ "@types/node": "^25.2.3",
62
+ "typescript": "^5.7.0",
63
+ "vitest": "^4.0.18",
64
+ "@paretools/tsconfig": "0.0.0"
65
+ },
66
+ "scripts": {
67
+ "build": "tsc",
68
+ "test": "vitest run",
69
+ "test:watch": "vitest",
70
+ "coverage": "vitest run --coverage",
71
+ "lint": "eslint src/"
72
+ }
73
+ }