Path: blob/main/test/mcp/src/automationTools/problems.ts
3520 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';6import { ApplicationService } from '../application';7import { z } from 'zod';89/**10* Problems Panel Tools11*/12export function applyProblemsTools(server: McpServer, appService: ApplicationService): RegisteredTool[] {13const tools: RegisteredTool[] = [];1415tools.push(server.tool(16'vscode_automation_problems_show',17'Show the problems view',18async () => {19const app = await appService.getOrCreateApplication();20await app.workbench.problems.showProblemsView();21return {22content: [{23type: 'text' as const,24text: 'Showed problems view'25}]26};27}28));2930tools.push(server.tool(31'vscode_automation_problems_hide',32'Hide the problems view',33async () => {34const app = await appService.getOrCreateApplication();35await app.workbench.problems.hideProblemsView();36return {37content: [{38type: 'text' as const,39text: 'Hid problems view'40}]41};42}43));4445// Playwright can probably figure this one out46// server.tool(47// 'vscode_automation_problems_wait_for_view',48// 'Wait for the problems view to appear',49// async () => {50// await app.workbench.problems.waitForProblemsView();51// return {52// content: [{53// type: 'text' as const,54// text: 'Problems view is now visible'55// }]56// };57// }58// );5960tools.push(server.tool(61'vscode_automation_problems_get_selector_in_view',62'Get CSS selector for problems of a specific severity in the problems view',63{64severity: z.enum(['WARNING', 'ERROR']).describe('Problem severity (WARNING or ERROR)')65},66async (args) => {67const { severity } = args;68const severityMap: Record<string, number> = {69'WARNING': 0,70'ERROR': 171};7273// This is a static method that returns a selector, not an async operation74const app = await appService.getOrCreateApplication();75const selector = (app.workbench.problems.constructor as any).getSelectorInProblemsView(severityMap[severity]);76return {77content: [{78type: 'text' as const,79text: `CSS selector for ${severity} problems in view: ${selector}`80}]81};82}83));8485// Seems too niche86// server.tool(87// 'vscode_automation_problems_get_selector_in_editor',88// 'Get CSS selector for problems of a specific severity in the editor',89// {90// severity: z.enum(['WARNING', 'ERROR']).describe('Problem severity (WARNING or ERROR)')91// },92// async (args) => {93// const { severity } = args;94// const severityMap: Record<string, number> = {95// 'WARNING': 0,96// 'ERROR': 197// };9899// // This is a static method that returns a selector, not an async operation100// const selector = (app.workbench.problems.constructor as any).getSelectorInEditor(severityMap[severity]);101// return {102// content: [{103// type: 'text' as const,104// text: `CSS selector for ${severity} problems in editor: ${selector}`105// }]106// };107// }108// );109110return tools;111}112113114