UNPKG

@debugmcp/mcp-debugger

Version:

Run-time step-through debugging for LLM agents.

90 lines (75 loc) 4.07 kB
import { DebugMcpServer } from '../../../src/server.js'; import { createLogger } from '../../../src/utils/logger.js'; import { DebugSessionInfo, DebugLanguage, Breakpoint, Variable, StackFrame } from '../../../src/session/models.js'; import { DebugProtocol } from '@vscode/debugprotocol'; // Create a logger for the test helpers const logger = createLogger('debug-mcp:test-helpers'); // Instantiate the DebugMcpServer once for all tests using these helpers // This ensures a consistent server instance and avoids re-initializing it for every test const debugServer = new DebugMcpServer({ logLevel: 'debug', // Set a detailed log level for tests logFile: 'integration_test_server_real_discovery.log' // Direct logs to the specific file }); // Helper to create a debug session export async function createDebugSession(params: { language: DebugLanguage; name?: string; pythonPath?: string; }): Promise<DebugSessionInfo> { logger.info(`[Test Helper] Calling createDebugSession with language: ${params.language}, name: ${params.name || 'unnamed'}, pythonPath: ${params.pythonPath || 'none'}`); return debugServer.createDebugSession(params); } // Helper to start debugging export async function startDebugging( sessionId: string, scriptPath: string, args?: string[], dapLaunchArgs?: Partial<DebugProtocol.LaunchRequestArguments>, dryRunSpawn?: boolean ): Promise<{ success: boolean; state: string; error?: string; data?: unknown; }> { logger.info(`[Test Helper] Calling startDebugging for session: ${sessionId}, script: ${scriptPath}, dryRun: ${dryRunSpawn}`); return debugServer.startDebugging(sessionId, scriptPath, args, dapLaunchArgs, dryRunSpawn); } // Helper to close a debug session export async function closeDebugSession(sessionId: string): Promise<boolean> { logger.info(`[Test Helper] Calling closeDebugSession for session: ${sessionId}`); return debugServer.closeDebugSession(sessionId); } // Helper to set a breakpoint export async function setBreakpoint(sessionId: string, file: string, line: number, condition?: string): Promise<Breakpoint> { logger.info(`[Test Helper] Calling setBreakpoint for session: ${sessionId}, file: ${file}, line: ${line}`); return debugServer.setBreakpoint(sessionId, file, line, condition); } // Helper to get variables export async function getVariables(sessionId: string, scope: number): Promise<Variable[]> { logger.info(`[Test Helper] Calling getVariables for session: ${sessionId}, scope: ${scope}`); return debugServer.getVariables(sessionId, scope); } // Helper to get stack trace export async function getStackTrace(sessionId: string): Promise<StackFrame[]> { logger.info(`[Test Helper] Calling getStackTrace for session: ${sessionId}`); return debugServer.getStackTrace(sessionId); } // Helper to get scopes export async function getScopes(sessionId: string, frameId: number): Promise<DebugProtocol.Scope[]> { logger.info(`[Test Helper] Calling getScopes for session: ${sessionId}, frameId: ${frameId}`); return debugServer.getScopes(sessionId, frameId); } // Helper to continue execution export async function continueExecution(sessionId: string): Promise<boolean> { logger.info(`[Test Helper] Calling continueExecution for session: ${sessionId}`); return debugServer.continueExecution(sessionId); } // Helper to step over export async function stepOver(sessionId: string): Promise<boolean> { logger.info(`[Test Helper] Calling stepOver for session: ${sessionId}`); return debugServer.stepOver(sessionId); } // Helper to step into export async function stepInto(sessionId: string): Promise<boolean> { logger.info(`[Test Helper] Calling stepInto for session: ${sessionId}`); return debugServer.stepInto(sessionId); } // Helper to step out export async function stepOut(sessionId: string): Promise<boolean> { logger.info(`[Test Helper] Calling stepOut for session: ${sessionId}`); return debugServer.stepOut(sessionId); } // Export the server instance for direct access if needed (e.g., for `beforeAll`/`afterAll` hooks) export { debugServer };