diff --git a/packages/mcp-provider-metadata-enrichment/package.json b/packages/mcp-provider-metadata-enrichment/package.json index 69407740..6b2e52c5 100644 --- a/packages/mcp-provider-metadata-enrichment/package.json +++ b/packages/mcp-provider-metadata-enrichment/package.json @@ -16,7 +16,7 @@ "@modelcontextprotocol/sdk": "^1.18.0", "@salesforce/mcp-provider-api": "^0.5.0", "@salesforce/mcp-provider-dx-core": "^0.7.0", - "@salesforce/metadata-enrichment": "^0.0.4", + "@salesforce/metadata-enrichment": "^0.0.6", "@salesforce/source-deploy-retrieve": "^12.31.10", "zod": "^3.25.76" }, diff --git a/packages/mcp-provider-metadata-enrichment/src/tools/enrich_metadata.ts b/packages/mcp-provider-metadata-enrichment/src/tools/enrich_metadata.ts index 9d1bfe90..11431a12 100644 --- a/packages/mcp-provider-metadata-enrichment/src/tools/enrich_metadata.ts +++ b/packages/mcp-provider-metadata-enrichment/src/tools/enrich_metadata.ts @@ -29,7 +29,7 @@ import { Toolset, } from "@salesforce/mcp-provider-api"; import { ComponentSetBuilder } from "@salesforce/source-deploy-retrieve"; -import { ComponentProcessor, EnrichmentHandler, EnrichmentRecords, EnrichmentStatus, FileProcessor } from "@salesforce/metadata-enrichment"; +import { SourceComponentProcessor, EnrichmentHandler, EnrichmentRecords, EnrichmentStatus, FileProcessor } from "@salesforce/metadata-enrichment"; /* * Enrich metadata in a Salesforce org. @@ -164,7 +164,7 @@ export class EnrichMetadataMcpTool extends McpTool ` • ${r.componentName}`)); + summaryParts.push('Metadata enrichment completed'); + summaryParts.push('Components enriched:'); + summaryParts.push(...successfulRecords.map((r) => ` • ${r.componentName}\n (Request ID: ${r.response?.metadata?.requestId ?? 'None'})`)); } if (skippedRecords.length > 0) { summaryParts.push('Skipped:'); @@ -228,9 +229,10 @@ export class EnrichMetadataMcpTool extends McpTool 0) { summaryParts.push('Failed:'); summaryParts.push( - ...failedRecords.map((r) => ` • ${r.componentName}: ${r.message ?? 'Failed'}`) + ...failedRecords.map((r) => ` • ${r.componentName}: ${r.message ?? 'Failed'}\n (Request ID: ${r.response?.metadata?.requestId ?? 'None'})`) ); } + const summary = summaryParts.join('\n'); // Only return error response IFF there were only failed records diff --git a/packages/mcp-provider-metadata-enrichment/test/unit/enrich_metadata.test.ts b/packages/mcp-provider-metadata-enrichment/test/unit/enrich_metadata.test.ts index d993d2d7..d5caa0b9 100644 --- a/packages/mcp-provider-metadata-enrichment/test/unit/enrich_metadata.test.ts +++ b/packages/mcp-provider-metadata-enrichment/test/unit/enrich_metadata.test.ts @@ -19,7 +19,7 @@ import { describe, it, expect, beforeEach, vi, afterEach } from "vitest"; import { Connection, SfProject } from "@salesforce/core"; import { ReleaseState, Toolset, Services } from "@salesforce/mcp-provider-api"; import { EnrichmentStatus } from "@salesforce/metadata-enrichment"; -import { ComponentProcessor, EnrichmentHandler, FileProcessor } from "@salesforce/metadata-enrichment"; +import { SourceComponentProcessor, EnrichmentHandler, FileProcessor } from "@salesforce/metadata-enrichment"; import type { EnrichmentRequestRecord } from "@salesforce/metadata-enrichment"; import { ComponentSetBuilder } from "@salesforce/source-deploy-retrieve"; import { EnrichMetadataMcpTool } from "../../src/tools/enrich_metadata.js"; @@ -117,7 +117,7 @@ describe("EnrichMetadataMcpTool", () => { getConnection: () => Promise.resolve(mockConnection), }), } as unknown as Services; - vi.spyOn(ComponentProcessor, "getComponentsToSkip").mockReturnValue(new Set()); + vi.spyOn(SourceComponentProcessor, "getComponentsToSkip").mockReturnValue(new Set()); vi.spyOn(EnrichmentHandler, "enrich").mockResolvedValue([ { componentName: "myLwc", @@ -128,8 +128,8 @@ describe("EnrichMetadataMcpTool", () => { status: EnrichmentStatus.SUCCESS, }, ] as unknown as EnrichmentRequestRecord[]); - vi.spyOn(FileProcessor, "updateMetadataFiles").mockResolvedValue( - [] as unknown as Awaited> + vi.spyOn(FileProcessor, "updateMetadata").mockResolvedValue( + [] as unknown as Awaited> ); }); @@ -192,7 +192,7 @@ describe("EnrichMetadataMcpTool", () => { getConnection: () => Promise.resolve(mockConnection), }), } as unknown as Services; - vi.spyOn(ComponentProcessor, "getComponentsToSkip").mockReturnValue( + vi.spyOn(SourceComponentProcessor, "getComponentsToSkip").mockReturnValue( new Set([ { typeName: "LightningComponentBundle", componentName: "otherCmp" }, ]) @@ -207,8 +207,8 @@ describe("EnrichMetadataMcpTool", () => { status: EnrichmentStatus.SUCCESS, }, ] as unknown as EnrichmentRequestRecord[]); - vi.spyOn(FileProcessor, "updateMetadataFiles").mockResolvedValue( - [] as unknown as Awaited> + vi.spyOn(FileProcessor, "updateMetadata").mockResolvedValue( + [] as unknown as Awaited> ); const tool = new EnrichMetadataMcpTool(servicesWithConnection); @@ -220,7 +220,7 @@ describe("EnrichMetadataMcpTool", () => { expect(result.isError).toBe(false); const text = result.content[0].type === "text" ? result.content[0].text : ""; - expect(text).toContain("Metadata enrichment completed. Components enriched:"); + expect(text).toContain("Metadata enrichment completed"); expect(text).toContain(" • myLwc"); expect(text).toContain("Skipped:"); expect(text).toContain(" • otherCmp: Skipped"); @@ -262,7 +262,7 @@ describe("EnrichMetadataMcpTool", () => { getConnection: () => Promise.resolve(mockConnection), }), } as unknown as Services; - vi.spyOn(ComponentProcessor, "getComponentsToSkip").mockReturnValue(new Set()); + vi.spyOn(SourceComponentProcessor, "getComponentsToSkip").mockReturnValue(new Set()); vi.spyOn(EnrichmentHandler, "enrich").mockResolvedValue([ { componentName: "myLwc", @@ -281,8 +281,8 @@ describe("EnrichMetadataMcpTool", () => { status: EnrichmentStatus.FAIL, }, ] as unknown as EnrichmentRequestRecord[]); - vi.spyOn(FileProcessor, "updateMetadataFiles").mockResolvedValue( - [] as unknown as Awaited> + vi.spyOn(FileProcessor, "updateMetadata").mockResolvedValue( + [] as unknown as Awaited> ); const tool = new EnrichMetadataMcpTool(servicesWithConnection); @@ -294,7 +294,7 @@ describe("EnrichMetadataMcpTool", () => { expect(result.isError).toBe(false); const text = result.content[0].type === "text" ? result.content[0].text : ""; - expect(text).toContain("Metadata enrichment completed. Components enriched:"); + expect(text).toContain("Metadata enrichment completed"); expect(text).toContain(" • myLwc"); expect(text).toContain("Failed:"); expect(text).toContain(" • failedCmp: Enrichment API error"); @@ -308,7 +308,7 @@ describe("EnrichMetadataMcpTool", () => { getConnection: () => Promise.resolve(mockConnection), }), } as unknown as Services; - vi.spyOn(ComponentProcessor, "getComponentsToSkip").mockReturnValue(new Set()); + vi.spyOn(SourceComponentProcessor, "getComponentsToSkip").mockReturnValue(new Set()); vi.spyOn(EnrichmentHandler, "enrich").mockResolvedValue([ { componentName: "failedCmp", @@ -319,8 +319,8 @@ describe("EnrichMetadataMcpTool", () => { status: EnrichmentStatus.FAIL, }, ] as unknown as EnrichmentRequestRecord[]); - vi.spyOn(FileProcessor, "updateMetadataFiles").mockResolvedValue( - [] as unknown as Awaited> + vi.spyOn(FileProcessor, "updateMetadata").mockResolvedValue( + [] as unknown as Awaited> ); const tool = new EnrichMetadataMcpTool(servicesWithConnection);