Path: blob/main/test/mcp/src/automationTools/problems.ts
5240 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();75// eslint-disable-next-line local/code-no-any-casts76const selector = (app.workbench.problems.constructor as any).getSelectorInProblemsView(severityMap[severity]);77return {78content: [{79type: 'text' as const,80text: `CSS selector for ${severity} problems in view: ${selector}`81}]82};83}84));8586// Seems too niche87// server.tool(88// 'vscode_automation_problems_get_selector_in_editor',89// 'Get CSS selector for problems of a specific severity in the editor',90// {91// severity: z.enum(['WARNING', 'ERROR']).describe('Problem severity (WARNING or ERROR)')92// },93// async (args) => {94// const { severity } = args;95// const severityMap: Record<string, number> = {96// 'WARNING': 0,97// 'ERROR': 198// };99100// // This is a static method that returns a selector, not an async operation101// const selector = (app.workbench.problems.constructor as any).getSelectorInEditor(severityMap[severity]);102// return {103// content: [{104// type: 'text' as const,105// text: `CSS selector for ${severity} problems in editor: ${selector}`106// }]107// };108// }109// );110111return tools;112}113114115