@muggleai/mcp 1.0.0 → 1.0.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/config.ts","../src/shared/logger.ts","../src/shared/credentials.ts","../src/shared/open-browser.ts","../src/shared/auth.ts","../src/server/mcp-server.ts","../src/server/index.ts","../src/server/stdio-server.ts","../src/qa/index.ts","../src/qa/contracts/index.ts","../src/qa/types.ts","../src/qa/upstream-client.ts","../src/qa/tools/tool-registry.ts","../src/local-qa/index.ts","../src/local-qa/contracts/auth-schemas.ts","../src/local-qa/contracts/project-schemas.ts","../src/local-qa/contracts/session-schemas.ts","../src/local-qa/types/enums.ts","../src/local-qa/services/auth-service.ts","../src/local-qa/services/project-storage-service.ts","../src/local-qa/services/storage-service.ts","../src/local-qa/services/execution-service.ts","../src/local-qa/tools/tool-registry.ts"],"names":["path","fs","platform","logger","CREDENTIALS_FILE","path2","fs2","resolve","uuidv4","McpErrorCode","axios","AxiosError","ProjectCreateInputSchema","ProjectUpdateInputSchema","SecretCreateInputSchema","SecretDeleteInputSchema","SecretGetInputSchema","SecretListInputSchema","SecretUpdateInputSchema","TestCaseGetInputSchema","TestCaseListInputSchema","TestScriptGetInputSchema","TestScriptListInputSchema","UseCaseGetInputSchema","UseCaseListInputSchema","z","DeviceCodePollStatus","SessionStatus","LocalRunStatus","LocalRunType","LocalTestScriptStatus","LocalWorkflowRunStatus","CloudMappingEntityType","LocalWorkflowFileEntityType","ExecutionStatus","HealthStatus","TestResultStatus","path3","fs3","secret","serviceInstance","fs5","path5","ulid","path6","createChildLogger","waitForCompletion"],"mappings":"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","file":"chunk-CL6YSSTI.js","sourcesContent":["/**\n * Configuration management for @muggleai/mcp.\n * Unified configuration for both QA Gateway and Local QA.\n */\n\nimport * as fs from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\n\nimport type {\n IAuth0Config,\n IConfig,\n ILocalQaConfig,\n IMuggleConfig,\n IMuggleConfigChecksums,\n IQaConfig,\n} from \"./types.js\";\n\n/** Default prompt service URL (cloud API). */\nconst DEFAULT_PROMPT_SERVICE_URL = \"https://promptservice.muggle-ai.com\";\n\n/** Default web-service URL (local test execution). */\nconst DEFAULT_WEB_SERVICE_URL = \"http://localhost:3001\";\n\n/** Default data directory name. */\nconst DATA_DIR_NAME = \".muggle-ai\";\n\n/** Subdirectory for downloaded electron-app binaries. */\nconst ELECTRON_APP_DIR = \"electron-app\";\n\n/** Credentials file name. */\nconst CREDENTIALS_FILE = \"credentials.json\";\n\n/** Default Auth0 domain (custom domain for production). */\nconst DEFAULT_AUTH0_DOMAIN = \"login.muggle-ai.com\";\n\n/** Default Auth0 client ID (Native app with Device Code grant). */\nconst DEFAULT_AUTH0_CLIENT_ID = \"UgG5UjoyLksxMciWWKqVpwfWrJ4rFvtT\";\n\n/** Default Auth0 audience. */\nconst DEFAULT_AUTH0_AUDIENCE = \"https://muggleai.us.auth0.com/api/v2/\";\n\n/** Default Auth0 scopes. */\nconst DEFAULT_AUTH0_SCOPE = \"openid profile email offline_access\";\n\n/** Cached configuration instance. */\nlet configInstance: IConfig | null = null;\n\n/** Cached muggle config from package.json. */\nlet muggleConfigCache: IMuggleConfig | null = null;\n\n/**\n * Resolve the package root directory from the current module location.\n * @returns The package root directory path.\n */\nfunction getPackageRoot(): string {\n const currentFilePath = fileURLToPath(import.meta.url);\n const currentDir = path.dirname(currentFilePath);\n\n // Handle both bundled (dist/) and development (src/) contexts\n if (currentDir.endsWith(\"dist\") || currentDir.includes(path.join(\"dist\", \"shared\"))) {\n // Navigate up from dist/shared to package root\n return path.resolve(currentDir, \"..\", \"..\");\n }\n\n if (currentDir.includes(path.join(\"src\", \"shared\"))) {\n // Navigate up from src/shared to package root\n return path.resolve(currentDir, \"..\", \"..\");\n }\n\n return path.dirname(currentDir);\n}\n\n/**\n * Get the muggle config from package.json.\n * @returns The muggle config with electronAppVersion, downloadBaseUrl, and checksums.\n */\nfunction getMuggleConfig(): IMuggleConfig {\n if (muggleConfigCache) {\n return muggleConfigCache;\n }\n\n const packageRoot = getPackageRoot();\n const packageJsonPath = path.join(packageRoot, \"package.json\");\n\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const config = packageJson.muggleConfig;\n\n if (config?.electronAppVersion && config?.downloadBaseUrl) {\n muggleConfigCache = {\n electronAppVersion: config.electronAppVersion,\n downloadBaseUrl: config.downloadBaseUrl,\n checksums: config.checksums,\n };\n return muggleConfigCache;\n }\n } catch {\n // Fall through to defaults\n }\n\n // Fallback defaults when package.json can't be read.\n // IMPORTANT: Keep electronAppVersion in sync with package.json muggleConfig.electronAppVersion\n muggleConfigCache = {\n electronAppVersion: \"1.0.1\",\n downloadBaseUrl: \"https://github.com/multiplex-ai/muggle-ai-mcp/releases/download\",\n checksums: {},\n };\n\n return muggleConfigCache;\n}\n\n/**\n * Get the Muggle AI data directory path.\n * @returns Path to ~/.muggle-ai\n */\nexport function getDataDir(): string {\n return path.join(os.homedir(), DATA_DIR_NAME);\n}\n\n/**\n * Get the path to the downloaded electron-app binary for the current platform.\n * @returns The path to the downloaded binary, or null if not found.\n */\nfunction getDownloadedElectronAppPath(): string | null {\n const platform = os.platform();\n const config = getMuggleConfig();\n const version = config.electronAppVersion;\n\n const baseDir = path.join(getDataDir(), ELECTRON_APP_DIR, version);\n\n let binaryPath: string;\n\n switch (platform) {\n case \"darwin\":\n binaryPath = path.join(baseDir, \"MuggleAI.app\", \"Contents\", \"MacOS\", \"MuggleAI\");\n break;\n case \"win32\":\n binaryPath = path.join(baseDir, \"MuggleAI.exe\");\n break;\n case \"linux\":\n binaryPath = path.join(baseDir, \"MuggleAI\");\n break;\n default:\n return null;\n }\n\n if (fs.existsSync(binaryPath)) {\n return binaryPath;\n }\n\n return null;\n}\n\n/**\n * Get the path to the electron-app in well-known system locations.\n * @returns The path to the system-installed binary, or null if not found.\n */\nfunction getSystemElectronAppPath(): string | null {\n const platform = os.platform();\n const homeDir = os.homedir();\n\n let binaryPath: string;\n\n switch (platform) {\n case \"darwin\":\n binaryPath = path.join(homeDir, \"Applications\", \"MuggleAI.app\", \"Contents\", \"MacOS\", \"MuggleAI\");\n break;\n case \"win32\":\n binaryPath = path.join(homeDir, \"AppData\", \"Local\", \"Programs\", \"MuggleAI\", \"MuggleAI.exe\");\n break;\n case \"linux\":\n binaryPath = path.join(homeDir, \".local\", \"share\", \"muggle-ai\", \"MuggleAI\");\n break;\n default:\n return null;\n }\n\n if (fs.existsSync(binaryPath)) {\n return binaryPath;\n }\n\n return null;\n}\n\n/**\n * Resolve the electron-app executable path if available.\n * @returns The path to the electron-app executable, or null when not installed.\n */\nfunction resolveElectronAppPathOrNull(): string | null {\n // 1. Check environment override\n const customPath = process.env.ELECTRON_APP_PATH;\n if (customPath && fs.existsSync(customPath)) {\n return customPath;\n }\n\n // 2. Check downloaded binary\n const downloadedPath = getDownloadedElectronAppPath();\n if (downloadedPath) {\n return downloadedPath;\n }\n\n // 3. Check system location\n const systemPath = getSystemElectronAppPath();\n if (systemPath) {\n return systemPath;\n }\n\n return null;\n}\n\n/**\n * Resolve the web-service entry point path.\n * @returns The path to the web-service index.js, or null if not found.\n */\nfunction resolveWebServicePath(): string | null {\n const customPath = process.env.WEB_SERVICE_PATH;\n if (customPath && fs.existsSync(customPath)) {\n return customPath;\n }\n\n // Check sibling package path (monorepo structure)\n const packageRoot = getPackageRoot();\n const siblingPath = path.resolve(packageRoot, \"..\", \"web-service\", \"dist\", \"src\", \"index.js\");\n\n if (fs.existsSync(siblingPath)) {\n return siblingPath;\n }\n\n return null;\n}\n\n/**\n * Parse an integer environment variable with a default value.\n * @param value - Environment variable value.\n * @param defaultValue - Default value if not set or invalid.\n * @returns Parsed integer.\n */\nfunction parseInteger(value: string | undefined, defaultValue: number): number {\n if (value === undefined || value === \"\") {\n return defaultValue;\n }\n const parsed = parseInt(value, 10);\n return isNaN(parsed) ? defaultValue : parsed;\n}\n\n/**\n * Build Auth0 configuration from environment.\n * @returns Auth0 configuration.\n */\nfunction buildAuth0Config(): IAuth0Config {\n return {\n domain: process.env.AUTH0_DOMAIN ?? DEFAULT_AUTH0_DOMAIN,\n clientId: process.env.AUTH0_CLIENT_ID ?? DEFAULT_AUTH0_CLIENT_ID,\n audience: process.env.AUTH0_AUDIENCE ?? DEFAULT_AUTH0_AUDIENCE,\n scope: process.env.AUTH0_SCOPE ?? DEFAULT_AUTH0_SCOPE,\n };\n}\n\n/**\n * Build QA Gateway configuration from environment.\n * @returns QA Gateway configuration.\n */\nfunction buildQaConfig(): IQaConfig {\n return {\n promptServiceBaseUrl: process.env.PROMPT_SERVICE_BASE_URL ?? DEFAULT_PROMPT_SERVICE_URL,\n requestTimeoutMs: parseInteger(process.env.REQUEST_TIMEOUT_MS, 30000),\n workflowTimeoutMs: parseInteger(process.env.WORKFLOW_TIMEOUT_MS, 120000),\n };\n}\n\n/**\n * Build Local QA configuration from environment.\n * @returns Local QA configuration.\n */\nfunction buildLocalQaConfig(): ILocalQaConfig {\n const dataDir = getDataDir();\n const auth0Scopes = (process.env.AUTH0_SCOPE ?? DEFAULT_AUTH0_SCOPE).split(\" \");\n\n return {\n webServiceUrl: process.env.WEB_SERVICE_URL ?? DEFAULT_WEB_SERVICE_URL,\n promptServiceUrl: process.env.PROMPT_SERVICE_BASE_URL ?? DEFAULT_PROMPT_SERVICE_URL,\n dataDir: dataDir,\n sessionsDir: path.join(dataDir, \"sessions\"),\n projectsDir: path.join(dataDir, \"projects\"),\n tempDir: path.join(dataDir, \"temp\"),\n credentialsFilePath: path.join(dataDir, CREDENTIALS_FILE),\n authFilePath: path.join(dataDir, \"auth.json\"),\n electronAppPath: resolveElectronAppPathOrNull(),\n webServicePath: resolveWebServicePath(),\n webServicePidFile: path.join(dataDir, \"web-service.pid\"),\n auth0: {\n domain: process.env.AUTH0_DOMAIN ?? DEFAULT_AUTH0_DOMAIN,\n clientId: process.env.AUTH0_CLIENT_ID ?? DEFAULT_AUTH0_CLIENT_ID,\n audience: process.env.AUTH0_AUDIENCE ?? DEFAULT_AUTH0_AUDIENCE,\n scopes: auth0Scopes,\n },\n };\n}\n\n/**\n * Get the unified application configuration.\n * @returns The application configuration.\n */\nexport function getConfig(): IConfig {\n if (configInstance) {\n return configInstance;\n }\n\n configInstance = {\n serverName: \"muggle-mcp\",\n serverVersion: \"1.0.0\",\n logLevel: process.env.LOG_LEVEL ?? \"info\",\n auth0: buildAuth0Config(),\n qa: buildQaConfig(),\n localQa: buildLocalQaConfig(),\n };\n\n return configInstance;\n}\n\n/**\n * Reset the configuration (for testing).\n */\nexport function resetConfig(): void {\n configInstance = null;\n muggleConfigCache = null;\n}\n\n/** Filename for storing the overridden electron-app version. */\nconst VERSION_OVERRIDE_FILE = \"electron-app-version-override.json\";\n\n/** Environment variable name for overriding electron-app version. */\nconst ELECTRON_APP_VERSION_ENV = \"ELECTRON_APP_VERSION\";\n\n/**\n * Get the effective electron-app version.\n * Priority order:\n * 1. ELECTRON_APP_VERSION env var (for testing/development)\n * 2. Override file (set by `muggle-mcp upgrade`)\n * 3. package.json muggleConfig.electronAppVersion (bundled default)\n * @returns The electron-app version string.\n */\nexport function getElectronAppVersion(): string {\n // Check environment variable first (highest priority)\n const envVersion = process.env[ELECTRON_APP_VERSION_ENV];\n if (envVersion && /^\\d+\\.\\d+\\.\\d+$/.test(envVersion)) {\n return envVersion;\n }\n\n // Check override file (set by muggle-mcp upgrade)\n const overridePath = path.join(getDataDir(), VERSION_OVERRIDE_FILE);\n\n if (fs.existsSync(overridePath)) {\n try {\n const content = JSON.parse(fs.readFileSync(overridePath, \"utf-8\"));\n if (content.version && typeof content.version === \"string\") {\n return content.version;\n }\n } catch {\n // Fall through to default\n }\n }\n\n // Fall back to bundled version\n return getMuggleConfig().electronAppVersion;\n}\n\n/**\n * Get the source of the current electron-app version.\n * @returns The version source: \"env\", \"override\", or \"bundled\".\n */\nexport function getElectronAppVersionSource(): \"env\" | \"override\" | \"bundled\" {\n // Check environment variable\n const envVersion = process.env[ELECTRON_APP_VERSION_ENV];\n if (envVersion && /^\\d+\\.\\d+\\.\\d+$/.test(envVersion)) {\n return \"env\";\n }\n\n // Check override file\n const overridePath = path.join(getDataDir(), VERSION_OVERRIDE_FILE);\n if (fs.existsSync(overridePath)) {\n try {\n const content = JSON.parse(fs.readFileSync(overridePath, \"utf-8\"));\n if (content.version && typeof content.version === \"string\") {\n return \"override\";\n }\n } catch {\n // Fall through\n }\n }\n\n return \"bundled\";\n}\n\n/**\n * Get the bundled electron-app version from package.json (ignores override).\n * @returns The bundled electron-app version string.\n */\nexport function getBundledElectronAppVersion(): string {\n return getMuggleConfig().electronAppVersion;\n}\n\n/**\n * Get the download base URL for electron-app binaries.\n * @returns The base URL for downloads.\n */\nexport function getDownloadBaseUrl(): string {\n return getMuggleConfig().downloadBaseUrl;\n}\n\n/**\n * Get the checksums for electron-app binaries.\n * @returns Checksums map by platform, or undefined if not configured.\n */\nexport function getElectronAppChecksums(): IMuggleConfigChecksums | undefined {\n return getMuggleConfig().checksums;\n}\n\n/**\n * Check if the electron-app binary is installed for the expected version.\n * @returns True if the binary is installed and accessible.\n */\nexport function isElectronAppInstalled(): boolean {\n return getDownloadedElectronAppPath() !== null;\n}\n\n/**\n * Get the electron-app directory path for a specific version.\n * @param version - Version string (defaults to configured version).\n * @returns Path to the electron-app version directory.\n */\nexport function getElectronAppDir(version?: string): string {\n const ver = version ?? getElectronAppVersion();\n return path.join(getDataDir(), ELECTRON_APP_DIR, ver);\n}\n","/**\n * Logger module for @muggleai/mcp.\n * Provides structured logging using Winston.\n */\n\nimport winston from \"winston\";\n\nimport { getConfig } from \"./config.js\";\n\n/** Cached logger instance. */\nlet loggerInstance: winston.Logger | null = null;\n\n/**\n * Create the Winston logger with appropriate configuration.\n * @returns Configured Winston logger.\n */\nfunction createLogger(): winston.Logger {\n const config = getConfig();\n\n // Use JSON format for structured logging to stderr (MCP-safe)\n const format = winston.format.combine(\n winston.format.timestamp(),\n winston.format.json(),\n );\n\n return winston.createLogger({\n level: config.logLevel,\n format: format,\n defaultMeta: {\n service: config.serverName,\n version: config.serverVersion,\n },\n transports: [\n // Log to stderr to avoid interfering with MCP stdio transport\n new winston.transports.Console({\n stderrLevels: [\"error\", \"warn\", \"info\", \"http\", \"verbose\", \"debug\", \"silly\"],\n }),\n ],\n });\n}\n\n/**\n * Get the logger instance (singleton).\n * @returns Winston logger.\n */\nexport function getLogger(): winston.Logger {\n if (!loggerInstance) {\n loggerInstance = createLogger();\n }\n return loggerInstance;\n}\n\n/**\n * Create a child logger with additional context.\n * @param correlationId - Request correlation ID.\n * @returns Child logger with correlation context.\n */\nexport function createChildLogger(correlationId: string): winston.Logger {\n const logger = getLogger();\n return logger.child({ correlationId: correlationId });\n}\n\n/**\n * Reset the logger (for testing).\n */\nexport function resetLogger(): void {\n loggerInstance = null;\n}\n","/**\n * Credentials storage for @muggleai/mcp.\n * Manages persistent storage of authentication credentials.\n */\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\n\nimport { getDataDir } from \"./config.js\";\nimport { getLogger } from \"./logger.js\";\nimport type { IStoredCredentials } from \"./types.js\";\n\n/** Credentials file name. */\nconst CREDENTIALS_FILE = \"credentials.json\";\n\n/**\n * Get the path to the credentials file.\n * @returns Path to credentials.json\n */\nexport function getCredentialsFilePath(): string {\n return path.join(getDataDir(), CREDENTIALS_FILE);\n}\n\n/**\n * Ensure the data directory exists.\n */\nfunction ensureDataDir(): void {\n const dataDir = getDataDir();\n if (!fs.existsSync(dataDir)) {\n fs.mkdirSync(dataDir, { recursive: true });\n }\n}\n\n/**\n * Load stored credentials from disk.\n * @returns Stored credentials, or null if not found or invalid.\n */\nexport function loadCredentials(): IStoredCredentials | null {\n const logger = getLogger();\n const credentialsPath = getCredentialsFilePath();\n\n try {\n if (!fs.existsSync(credentialsPath)) {\n logger.debug(\"No credentials file found\", { path: credentialsPath });\n return null;\n }\n\n const content = fs.readFileSync(credentialsPath, \"utf-8\");\n const credentials = JSON.parse(content) as IStoredCredentials;\n\n // Validate required fields\n if (!credentials.accessToken || !credentials.expiresAt) {\n logger.warn(\"Invalid credentials file - missing required fields\");\n return null;\n }\n\n return credentials;\n } catch (error) {\n logger.warn(\"Failed to load credentials\", {\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n}\n\n/**\n * Save credentials to disk.\n * @param credentials - Credentials to save.\n */\nexport function saveCredentials(credentials: IStoredCredentials): void {\n const logger = getLogger();\n const credentialsPath = getCredentialsFilePath();\n\n try {\n ensureDataDir();\n\n const content = JSON.stringify(credentials, null, 2);\n fs.writeFileSync(credentialsPath, content, { mode: 0o600 });\n\n logger.info(\"Credentials saved\", { path: credentialsPath });\n } catch (error) {\n logger.error(\"Failed to save credentials\", {\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n}\n\n/**\n * Delete stored credentials.\n */\nexport function deleteCredentials(): void {\n const logger = getLogger();\n const credentialsPath = getCredentialsFilePath();\n\n try {\n if (fs.existsSync(credentialsPath)) {\n fs.unlinkSync(credentialsPath);\n logger.info(\"Credentials deleted\", { path: credentialsPath });\n }\n } catch (error) {\n logger.warn(\"Failed to delete credentials\", {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n}\n\n/**\n * Check if credentials are expired.\n * @param credentials - Credentials to check.\n * @returns True if expired.\n */\nexport function isCredentialsExpired(credentials: IStoredCredentials): boolean {\n const expiresAt = new Date(credentials.expiresAt);\n const now = new Date();\n\n // Consider expired 5 minutes before actual expiry for safety\n const bufferMs = 5 * 60 * 1000;\n return now.getTime() >= expiresAt.getTime() - bufferMs;\n}\n\n/**\n * Get valid credentials if available.\n * Returns null if no credentials or if expired.\n * @returns Valid credentials or null.\n */\nexport function getValidCredentials(): IStoredCredentials | null {\n const credentials = loadCredentials();\n\n if (!credentials) {\n return null;\n }\n\n if (isCredentialsExpired(credentials)) {\n getLogger().info(\"Credentials expired\", { expiresAt: credentials.expiresAt });\n return null;\n }\n\n return credentials;\n}\n\n/**\n * Get authentication status.\n * @returns Object with authentication status information.\n */\nexport function getAuthStatus(): {\n authenticated: boolean;\n email?: string;\n userId?: string;\n expiresAt?: string;\n hasApiKey: boolean;\n} {\n const credentials = loadCredentials();\n\n if (!credentials) {\n return {\n authenticated: false,\n hasApiKey: false,\n };\n }\n\n const expired = isCredentialsExpired(credentials);\n\n return {\n authenticated: !expired,\n email: credentials.email,\n userId: credentials.userId,\n expiresAt: credentials.expiresAt,\n hasApiKey: !!credentials.apiKey,\n };\n}\n","/**\n * Browser opening utility for @muggleai/mcp.\n * Opens URLs in the user's default browser.\n */\n\nimport { exec } from \"child_process\";\nimport { platform } from \"os\";\n\nimport { getLogger } from \"./logger.js\";\n\nconst logger = getLogger();\n\n/**\n * Result of attempting to open a browser.\n */\nexport interface IBrowserOpenResult {\n /** Whether the browser was successfully opened. */\n opened: boolean;\n /** Error message if failed to open. */\n error?: string;\n}\n\n/**\n * Options for opening a browser.\n */\nexport interface IBrowserOpenOptions {\n /** URL to open. */\n url: string;\n}\n\n/**\n * Get the command to open a URL based on platform.\n * @param url - URL to open.\n * @returns Platform-specific command.\n */\nfunction getOpenCommand(url: string): string {\n const plat = platform();\n\n switch (plat) {\n case \"darwin\":\n return `open \"${url}\"`;\n case \"win32\":\n return `start \"\" \"${url}\"`;\n case \"linux\":\n return `xdg-open \"${url}\"`;\n default:\n throw new Error(`Unsupported platform: ${plat}`);\n }\n}\n\n/**\n * Open a URL in the user's default browser.\n * @param options - Options containing the URL to open.\n * @returns Result indicating success or failure.\n */\nexport async function openBrowserUrl(options: IBrowserOpenOptions): Promise<IBrowserOpenResult> {\n return new Promise((resolve) => {\n try {\n const command = getOpenCommand(options.url);\n\n logger.debug(\"[Browser] Opening URL\", { url: options.url, command: command });\n\n exec(command, (error) => {\n if (error) {\n logger.warn(\"[Browser] Failed to open URL\", {\n url: options.url,\n error: error.message,\n });\n resolve({\n opened: false,\n error: error.message,\n });\n } else {\n logger.info(\"[Browser] URL opened successfully\", { url: options.url });\n resolve({ opened: true });\n }\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.warn(\"[Browser] Failed to open URL\", {\n url: options.url,\n error: errorMessage,\n });\n resolve({\n opened: false,\n error: errorMessage,\n });\n }\n });\n}\n","/**\n * Authentication module for @muggleai/mcp.\n * Implements device code flow for user authentication.\n */\n\nimport axios, { AxiosError } from \"axios\";\n\nimport { getConfig } from \"./config.js\";\nimport {\n deleteCredentials,\n getValidCredentials,\n saveCredentials,\n} from \"./credentials.js\";\nimport { getLogger } from \"./logger.js\";\nimport { openBrowserUrl } from \"./open-browser.js\";\nimport type {\n IAuth0Config,\n ICallerCredentials,\n IDeviceCodePollResponse,\n IDeviceCodeResponse,\n IStoredCredentials,\n} from \"./types.js\";\n\nconst logger = getLogger();\n\n/**\n * Start the device code authorization flow.\n * Returns a device code and verification URL for the user.\n *\n * @param config - Auth0 configuration.\n * @returns Device code response with URLs and codes.\n * @throws Error if the device code request fails.\n */\nexport async function startDeviceCodeFlow(config: IAuth0Config): Promise<IDeviceCodeResponse> {\n const deviceCodeUrl = `https://${config.domain}/oauth/device/code`;\n\n try {\n logger.info(\"[Auth] Starting device code flow\", {\n domain: config.domain,\n clientId: config.clientId,\n });\n\n const response = await axios.post(\n deviceCodeUrl,\n new URLSearchParams({\n client_id: config.clientId,\n scope: config.scope,\n audience: config.audience,\n }).toString(),\n {\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n },\n );\n\n const data = response.data;\n\n logger.info(\"[Auth] Device code flow started successfully\", {\n userCode: data.user_code,\n expiresIn: data.expires_in,\n });\n\n // Try to open browser automatically\n const browserOpenResult = await openBrowserUrl({\n url: data.verification_uri_complete,\n });\n\n if (browserOpenResult.opened) {\n logger.info(\"[Auth] Browser opened for device code login\");\n } else {\n logger.warn(\"[Auth] Failed to open browser\", {\n error: browserOpenResult.error,\n verificationUriComplete: data.verification_uri_complete,\n });\n }\n\n return {\n deviceCode: data.device_code,\n userCode: data.user_code,\n verificationUri: data.verification_uri,\n verificationUriComplete: data.verification_uri_complete,\n expiresIn: data.expires_in,\n interval: data.interval || 5,\n browserOpened: browserOpenResult.opened,\n browserOpenError: browserOpenResult.error,\n };\n } catch (error) {\n if (error instanceof AxiosError) {\n logger.error(\"[Auth] Failed to start device code flow\", {\n status: error.response?.status,\n data: error.response?.data,\n });\n throw new Error(\n `Failed to start device code flow: ${error.response?.data?.error_description || error.message}`,\n );\n }\n throw error;\n }\n}\n\n/**\n * Poll for device code authorization completion.\n * Should be called at the interval specified in startDeviceCodeFlow response.\n *\n * @param config - Auth0 configuration.\n * @param deviceCode - The device code from startDeviceCodeFlow.\n * @returns Poll response with status and optionally access token.\n */\nexport async function pollDeviceCode(\n config: IAuth0Config,\n deviceCode: string,\n): Promise<IDeviceCodePollResponse> {\n const tokenUrl = `https://${config.domain}/oauth/token`;\n\n try {\n const response = await axios.post(\n tokenUrl,\n new URLSearchParams({\n grant_type: \"urn:ietf:params:oauth:grant-type:device_code\",\n device_code: deviceCode,\n client_id: config.clientId,\n }).toString(),\n {\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n },\n );\n\n logger.info(\"[Auth] Authorization successful\");\n\n return {\n status: \"authorized\",\n accessToken: response.data.access_token,\n tokenType: response.data.token_type,\n expiresIn: response.data.expires_in,\n };\n } catch (error) {\n if (error instanceof AxiosError && error.response) {\n const data = error.response.data;\n const errorCode = data.error;\n\n if (errorCode === \"authorization_pending\") {\n return {\n status: \"authorization_pending\",\n error: errorCode,\n errorDescription: data.error_description || \"User has not yet authorized\",\n };\n }\n\n if (errorCode === \"slow_down\") {\n return {\n status: \"slow_down\",\n error: errorCode,\n errorDescription: data.error_description || \"Too many requests, slow down\",\n };\n }\n\n if (errorCode === \"expired_token\") {\n return {\n status: \"expired_token\",\n error: errorCode,\n errorDescription: data.error_description || \"Device code expired, please restart flow\",\n };\n }\n\n if (errorCode === \"access_denied\") {\n return {\n status: \"access_denied\",\n error: errorCode,\n errorDescription: data.error_description || \"User denied access\",\n };\n }\n\n logger.error(\"[Auth] Unexpected error during poll\", {\n status: error.response.status,\n error: errorCode,\n description: data.error_description,\n });\n\n throw new Error(\n `Device code poll failed: ${data.error_description || data.error || \"Unknown error\"}`,\n );\n }\n throw error;\n }\n}\n\n/**\n * Create an API key using an access token.\n * Calls the prompt service API to create a new API key.\n *\n * @param accessToken - Auth0 access token.\n * @param keyName - Optional name for the API key.\n * @param expiry - Expiry option ('30d', '90d', '1y', 'never').\n * @returns Created API key details.\n */\nexport async function createApiKeyWithToken(\n accessToken: string,\n keyName: string | undefined,\n expiry: \"30d\" | \"90d\" | \"1y\" | \"never\" = \"90d\",\n): Promise<{\n id: string;\n key: string;\n name: string | null;\n status: string;\n prefix: string;\n lastFour: string;\n createdAt: number;\n expiresAt: number | null;\n}> {\n const config = getConfig();\n const apiKeyUrl = `${config.qa.promptServiceBaseUrl}/v1/protected/api-keys`;\n\n try {\n logger.info(\"[Auth] Creating API key\", {\n keyName: keyName,\n expiry: expiry,\n });\n\n const response = await axios.post(\n apiKeyUrl,\n {\n name: keyName || \"MCP Auto-Generated\",\n expiry: expiry,\n },\n {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\",\n },\n },\n );\n\n logger.info(\"[Auth] API key created successfully\", {\n keyId: response.data.id,\n });\n\n return response.data;\n } catch (error) {\n if (error instanceof AxiosError) {\n logger.error(\"[Auth] Failed to create API key\", {\n status: error.response?.status,\n data: error.response?.data,\n });\n throw new Error(\n `Failed to create API key: ${error.response?.data?.message || error.message}`,\n );\n }\n throw error;\n }\n}\n\n/**\n * Complete the full device code login flow.\n * Starts the flow, waits for user authorization, and creates credentials.\n *\n * @param keyName - Optional name for the API key.\n * @param keyExpiry - Expiry option for API key.\n * @param timeoutMs - Maximum time to wait for authorization.\n * @returns Result of the login flow.\n */\nexport async function performLogin(\n keyName?: string,\n keyExpiry: \"30d\" | \"90d\" | \"1y\" | \"never\" = \"90d\",\n timeoutMs: number = 120000,\n): Promise<{\n success: boolean;\n deviceCodeResponse?: IDeviceCodeResponse;\n credentials?: IStoredCredentials;\n error?: string;\n}> {\n const config = getConfig();\n\n try {\n // Start device code flow\n const deviceCodeResponse = await startDeviceCodeFlow(config.auth0);\n\n // Poll for completion\n const startTime = Date.now();\n const interval = deviceCodeResponse.interval * 1000;\n let currentInterval = interval;\n\n while (Date.now() - startTime < timeoutMs) {\n await new Promise((resolve) => setTimeout(resolve, currentInterval));\n\n const pollResult = await pollDeviceCode(config.auth0, deviceCodeResponse.deviceCode);\n\n if (pollResult.status === \"authorized\" && pollResult.accessToken) {\n // Calculate expiration\n const expiresAt = new Date(\n Date.now() + (pollResult.expiresIn || 86400) * 1000,\n ).toISOString();\n\n // Create API key for persistent authentication\n const apiKeyResult = await createApiKeyWithToken(\n pollResult.accessToken,\n keyName,\n keyExpiry,\n );\n\n // Store credentials\n const credentials: IStoredCredentials = {\n accessToken: pollResult.accessToken,\n expiresAt: expiresAt,\n apiKey: apiKeyResult.key,\n apiKeyId: apiKeyResult.id,\n };\n\n saveCredentials(credentials);\n\n return {\n success: true,\n deviceCodeResponse: deviceCodeResponse,\n credentials: credentials,\n };\n }\n\n if (pollResult.status === \"slow_down\") {\n // Increase polling interval\n currentInterval = Math.min(currentInterval + 1000, 15000);\n continue;\n }\n\n if (pollResult.status === \"expired_token\") {\n return {\n success: false,\n error: \"Device code expired. Please try again.\",\n };\n }\n\n if (pollResult.status === \"access_denied\") {\n return {\n success: false,\n error: \"Access denied. User did not authorize the request.\",\n };\n }\n\n // authorization_pending - continue polling\n }\n\n return {\n success: false,\n deviceCodeResponse: deviceCodeResponse,\n error: \"Timeout waiting for user authorization\",\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Perform logout by clearing credentials.\n */\nexport function performLogout(): void {\n deleteCredentials();\n logger.info(\"[Auth] Logged out successfully\");\n}\n\n/**\n * Get caller credentials for API requests.\n * Returns credentials from storage if available and valid.\n * @returns Caller credentials or empty object.\n */\nexport function getCallerCredentials(): ICallerCredentials {\n const credentials = getValidCredentials();\n\n if (!credentials) {\n return {};\n }\n\n // Prefer API key if available (longer lived)\n if (credentials.apiKey) {\n return { apiKey: credentials.apiKey };\n }\n\n // Fall back to bearer token\n return { bearerToken: credentials.accessToken };\n}\n\n/**\n * Check if authentication is required for the given tool.\n * Local-only tools don't require auth.\n * @param toolName - Name of the tool.\n * @returns True if tool requires authentication.\n */\nexport function toolRequiresAuth(toolName: string): boolean {\n // Local tools that don't require auth\n const noAuthTools = [\n // Auth tools\n \"muggle_auth_status\",\n \"muggle_auth_login\",\n \"muggle_auth_poll\",\n \"muggle_auth_logout\",\n // Local project tools (no cloud)\n \"muggle_project_create\",\n \"muggle_project_list\",\n \"muggle_project_get\",\n \"muggle_project_update\",\n \"muggle_project_delete\",\n \"muggle_use_case_save\",\n \"muggle_use_case_list\",\n \"muggle_use_case_get\",\n \"muggle_use_case_update\",\n \"muggle_use_case_delete\",\n \"muggle_test_case_save\",\n \"muggle_test_case_list\",\n \"muggle_test_case_get\",\n \"muggle_test_case_update\",\n \"muggle_test_case_delete\",\n \"muggle_test_script_save\",\n \"muggle_test_script_list\",\n \"muggle_test_script_get\",\n \"muggle_test_script_delete\",\n \"muggle_execute_test_generation\",\n \"muggle_execute_replay\",\n \"muggle_cancel_execution\",\n \"muggle_check_status\",\n \"muggle_list_sessions\",\n \"muggle_cleanup_sessions\",\n \"muggle_get_page_state\",\n \"muggle_run_test\",\n \"muggle_explore_page\",\n \"muggle_execute_action\",\n \"muggle_get_screenshot\",\n \"muggle_run_result_list\",\n \"muggle_run_result_get\",\n \"muggle_secret_create\",\n \"muggle_secret_list\",\n \"muggle_secret_get\",\n \"muggle_secret_update\",\n \"muggle_secret_delete\",\n \"muggle_workflow_file_create\",\n \"muggle_workflow_file_list\",\n \"muggle_workflow_file_list_available\",\n \"muggle_workflow_file_get\",\n \"muggle_workflow_file_update\",\n \"muggle_workflow_file_delete\",\n ];\n\n return !noAuthTools.includes(toolName);\n}\n","/**\n * Unified MCP server implementation for @muggleai/mcp.\n * Combines QA Gateway and Local QA tools into a single server.\n */\n\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport {\n CallToolRequestSchema,\n ListResourcesRequestSchema,\n ListToolsRequestSchema,\n ReadResourceRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { ZodError } from \"zod\";\n\nimport { getCallerCredentials, toolRequiresAuth } from \"../shared/auth.js\";\nimport { getConfig } from \"../shared/config.js\";\nimport { createChildLogger, getLogger } from \"../shared/logger.js\";\nimport type { ICallerCredentials, IMcpTool } from \"../shared/types.js\";\n\n/** Options for creating the unified MCP server. */\nexport interface IUnifiedMcpServerOptions {\n /** Enable Cloud QA tools. */\n enableQaTools: boolean;\n /** Enable Local QA tools. */\n enableLocalTools: boolean;\n}\n\n/** Global tool registry. */\nlet registeredTools: IMcpTool[] = [];\n\n/**\n * Register tools with the server.\n * @param tools - Tools to register.\n */\nexport function registerTools(tools: IMcpTool[]): void {\n registeredTools = [...registeredTools, ...tools];\n}\n\n/**\n * Get all registered tools.\n * @returns Array of registered tools.\n */\nexport function getAllTools(): IMcpTool[] {\n return registeredTools;\n}\n\n/**\n * Clear all registered tools (for testing).\n */\nexport function clearTools(): void {\n registeredTools = [];\n}\n\n/**\n * Convert a Zod schema to JSON Schema format for MCP.\n * @param schema - Zod schema.\n * @returns JSON Schema object.\n */\nfunction zodToJsonSchema(schema: unknown): object {\n try {\n const zodSchema = schema as { _def?: { typeName?: string } };\n if (zodSchema._def) {\n return convertZodDef(zodSchema);\n }\n } catch {\n // Fallback to generic schema\n }\n\n return {\n type: \"object\",\n properties: {},\n additionalProperties: true,\n };\n}\n\n/**\n * Convert Zod definition to JSON Schema.\n * @param schema - Zod schema definition.\n * @returns JSON Schema object.\n */\nfunction convertZodDef(schema: unknown): object {\n const zodSchema = schema as {\n _def?: {\n typeName?: string;\n shape?: () => Record<string, unknown>;\n innerType?: unknown;\n checks?: Array<{ kind: string; value?: unknown }>;\n description?: string;\n values?: string[];\n options?: unknown[];\n };\n shape?: Record<string, unknown>;\n description?: string;\n };\n\n if (!zodSchema._def) {\n return { type: \"object\" };\n }\n\n const def = zodSchema._def;\n const typeName = def.typeName;\n\n switch (typeName) {\n case \"ZodObject\": {\n const shape = def.shape ? def.shape() : zodSchema.shape || {};\n const properties: Record<string, object> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(shape)) {\n properties[key] = convertZodDef(value);\n const valueDef = (value as { _def?: { typeName?: string } })._def;\n if (valueDef?.typeName !== \"ZodOptional\") {\n required.push(key);\n }\n }\n\n const result: Record<string, unknown> = {\n type: \"object\",\n properties: properties,\n };\n if (required.length > 0) {\n result.required = required;\n }\n return result;\n }\n\n case \"ZodString\": {\n const result: Record<string, unknown> = { type: \"string\" };\n if (def.description) result.description = def.description;\n if (def.checks) {\n for (const check of def.checks) {\n if (check.kind === \"min\") result.minLength = check.value;\n if (check.kind === \"max\") result.maxLength = check.value;\n if (check.kind === \"url\") result.format = \"uri\";\n if (check.kind === \"email\") result.format = \"email\";\n }\n }\n return result;\n }\n\n case \"ZodNumber\": {\n const result: Record<string, unknown> = { type: \"number\" };\n if (def.description) result.description = def.description;\n if (def.checks) {\n for (const check of def.checks) {\n if (check.kind === \"int\") result.type = \"integer\";\n if (check.kind === \"min\") result.minimum = check.value;\n if (check.kind === \"max\") result.maximum = check.value;\n }\n }\n return result;\n }\n\n case \"ZodBoolean\": {\n const result: Record<string, unknown> = { type: \"boolean\" };\n if (def.description) result.description = def.description;\n return result;\n }\n\n case \"ZodArray\": {\n const result: Record<string, unknown> = {\n type: \"array\",\n items: def.innerType ? convertZodDef(def.innerType) : {},\n };\n if (def.description) result.description = def.description;\n return result;\n }\n\n case \"ZodEnum\": {\n const result: Record<string, unknown> = {\n type: \"string\",\n enum: def.values || [],\n };\n if (def.description) result.description = def.description;\n return result;\n }\n\n case \"ZodOptional\": {\n const inner = def.innerType ? convertZodDef(def.innerType) : {};\n if (def.description) (inner as Record<string, unknown>).description = def.description;\n return inner;\n }\n\n case \"ZodUnion\": {\n const options = def.options || [];\n return {\n oneOf: options.map((opt) => convertZodDef(opt)),\n };\n }\n\n default:\n return { type: \"object\" };\n }\n}\n\n/**\n * Handle just-in-time authentication for tools that require it.\n * @param toolName - Name of the tool being called.\n * @param correlationId - Request correlation ID.\n * @returns Credentials if available, or triggers auth flow.\n */\nasync function handleJitAuth(\n toolName: string,\n correlationId: string,\n): Promise<{ credentials: ICallerCredentials; authTriggered: boolean }> {\n const childLogger = createChildLogger(correlationId);\n\n // Check if tool requires auth\n if (!toolRequiresAuth(toolName)) {\n return { credentials: {}, authTriggered: false };\n }\n\n // Check for valid credentials\n const credentials = getCallerCredentials();\n if (credentials.apiKey || credentials.bearerToken) {\n return { credentials: credentials, authTriggered: false };\n }\n\n // No credentials - trigger auth flow\n childLogger.info(\"No credentials found, triggering JIT auth\", { tool: toolName });\n\n // For now, return empty credentials and let the tool fail with auth error\n // The full JIT auth flow would be more complex (involving browser popup)\n return { credentials: {}, authTriggered: false };\n}\n\n/**\n * Create and configure the unified MCP server.\n * @param options - Server options.\n * @returns Configured MCP Server instance.\n */\nexport function createUnifiedMcpServer(options: IUnifiedMcpServerOptions): Server {\n const logger = getLogger();\n const config = getConfig();\n\n const server = new Server(\n {\n name: config.serverName,\n version: config.serverVersion,\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n },\n );\n\n // Handle list tools request\n server.setRequestHandler(ListToolsRequestSchema, () => {\n const tools = getAllTools();\n logger.debug(\"Listing tools\", { count: tools.length });\n\n const toolDefinitions = tools.map((tool) => {\n const jsonSchema = zodToJsonSchema(tool.inputSchema);\n\n return {\n name: tool.name,\n description: tool.description,\n inputSchema: jsonSchema,\n };\n });\n\n return { tools: toolDefinitions };\n });\n\n // Handle call tool request\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const correlationId = uuidv4();\n const childLogger = createChildLogger(correlationId);\n\n const toolName = request.params.name;\n const toolInput = request.params.arguments || {};\n\n childLogger.info(\"Tool call received\", {\n tool: toolName,\n hasArguments: Object.keys(toolInput).length > 0,\n });\n\n try {\n // Find the tool\n const tool = getAllTools().find((t) => t.name === toolName);\n if (!tool) {\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({\n error: \"NOT_FOUND\",\n message: `Unknown tool: ${toolName}`,\n }),\n },\n ],\n isError: true,\n };\n }\n\n // Handle JIT authentication\n const { authTriggered } = await handleJitAuth(toolName, correlationId);\n\n if (authTriggered) {\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({\n message: \"Authentication required. Please complete login in your browser.\",\n }),\n },\n ],\n };\n }\n\n // Execute the tool\n const startTime = Date.now();\n const result = await tool.execute({\n input: toolInput,\n correlationId: correlationId,\n });\n const latency = Date.now() - startTime;\n\n childLogger.info(\"Tool call completed\", {\n tool: toolName,\n latencyMs: latency,\n isError: result.isError,\n });\n\n return {\n content: [\n {\n type: \"text\",\n text: result.content,\n },\n ],\n isError: result.isError,\n };\n } catch (error) {\n if (error instanceof ZodError) {\n childLogger.warn(\"Tool call failed with validation error\", {\n tool: toolName,\n errors: error.errors,\n });\n\n const issueMessages = error.errors.slice(0, 3).map((issue) => {\n const path = issue.path.join(\".\");\n return path ? `'${path}': ${issue.message}` : issue.message;\n });\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({\n error: \"INVALID_ARGUMENT\",\n message: `Invalid input: ${issueMessages.join(\"; \")}`,\n }),\n },\n ],\n isError: true,\n };\n }\n\n childLogger.error(\"Tool call failed with error\", {\n tool: toolName,\n error: String(error),\n });\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({\n error: \"INTERNAL_ERROR\",\n message: error instanceof Error ? error.message : \"An unexpected error occurred\",\n }),\n },\n ],\n isError: true,\n };\n }\n });\n\n // Handle list resources request\n server.setRequestHandler(ListResourcesRequestSchema, () => {\n logger.debug(\"Listing resources\");\n return { resources: [] };\n });\n\n // Handle read resource request\n server.setRequestHandler(ReadResourceRequestSchema, (request) => {\n const uri = request.params.uri;\n logger.debug(\"Reading resource\", { uri: uri });\n\n return {\n contents: [\n {\n uri: uri,\n mimeType: \"text/plain\",\n text: `Resource not found: ${uri}`,\n },\n ],\n };\n });\n\n logger.info(\"Unified MCP server configured\", {\n tools: getAllTools().length,\n enableQaTools: options.enableQaTools,\n enableLocalTools: options.enableLocalTools,\n });\n\n return server;\n}\n","/**\n * Server module exports for @muggleai/mcp.\n */\n\nexport * from \"./mcp-server.js\";\nexport * from \"./stdio-server.js\";\n","/**\n * Stdio server implementation for @muggleai/mcp.\n * Runs the MCP server using stdin/stdout transport.\n */\n\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nimport { getLogger } from \"../shared/logger.js\";\n\nconst logger = getLogger();\n\n/**\n * Start the MCP server using stdio transport.\n * @param server - Configured MCP Server instance.\n */\nexport async function startStdioServer(server: Server): Promise<void> {\n logger.info(\"Starting stdio server transport\");\n\n const transport = new StdioServerTransport();\n\n await server.connect(transport);\n\n logger.info(\"Stdio server connected\");\n\n // Handle process signals for graceful shutdown\n const shutdown = (signal: string): void => {\n logger.info(`Received ${signal}, shutting down...`);\n process.exit(0);\n };\n\n process.on(\"SIGTERM\", () => shutdown(\"SIGTERM\"));\n process.on(\"SIGINT\", () => shutdown(\"SIGINT\"));\n}\n","/**\n * QA Gateway tools module.\n * Cloud-based QA tools that require authentication.\n */\n\nimport type { IMcpTool } from \"../shared/types.js\";\n\nimport { allQaToolDefinitions, executeQaTool } from \"./tools/tool-registry.js\";\n\nexport * from \"./contracts/index.js\";\nexport * from \"./tools/index.js\";\nexport * from \"./types.js\";\nexport * from \"./upstream-client.js\";\n\n/**\n * Convert QA tool definitions to IMcpTool format.\n * @returns Array of IMcpTool definitions.\n */\nexport function getQaTools(): IMcpTool[] {\n return allQaToolDefinitions.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n requiresAuth: tool.requiresAuth !== false,\n execute: async (params: { input: unknown; correlationId: string }) => {\n return executeQaTool(tool.name, params.input, params.correlationId);\n },\n }));\n}\n","/**\n * Zod schemas/contracts for QA Gateway tools.\n */\n\nimport { z } from \"zod\";\n\n// =============================================================================\n// Common Schemas\n// =============================================================================\n\n/** Pagination input schema. */\nexport const PaginationInputSchema = z.object({\n page: z.number().int().positive().optional().describe(\"Page number (1-based)\"),\n pageSize: z.number().int().positive().max(100).optional().describe(\"Number of items per page\"),\n});\n\n/** ID string schema. */\nexport const IdSchema = z.string().min(1).describe(\"Unique identifier\");\n\n/** Optional workflow parameters. */\nexport const WorkflowParamsSchema = z\n .record(z.unknown())\n .optional()\n .describe(\"Optional workflow parameters for memory configuration overrides\");\n\n// =============================================================================\n// Project Schemas\n// =============================================================================\n\nexport const ProjectCreateInputSchema = z.object({\n projectName: z.string().min(1).max(255).describe(\"Name of the project\"),\n description: z.string().min(1).describe(\"Project description\"),\n url: z.string().url().describe(\"Target website URL to test\"),\n});\n\nexport const ProjectGetInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to retrieve\"),\n});\n\nexport const ProjectDeleteInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to delete\"),\n});\n\nexport const ProjectUpdateInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to update\"),\n projectName: z.string().min(1).max(255).optional().describe(\"New project name\"),\n description: z.string().optional().describe(\"Updated description\"),\n url: z.string().url().optional().describe(\"Updated target URL\"),\n});\n\nexport const ProjectListInputSchema = PaginationInputSchema.extend({});\n\n// =============================================================================\n// PRD File Schemas\n// =============================================================================\n\nexport const PrdFileUploadInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to associate the PRD file with\"),\n fileName: z.string().min(1).describe(\"Name of the file\"),\n contentBase64: z.string().min(1).describe(\"Base64-encoded file content\"),\n contentType: z.string().optional().describe(\"MIME type of the file\"),\n});\n\nexport const PrdFileListInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to list PRD files for\"),\n});\n\nexport const PrdFileDeleteInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID\"),\n prdFileId: IdSchema.describe(\"PRD file ID to delete\"),\n});\n\nexport const PrdFileProcessStartInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to process PRD files for\"),\n name: z.string().min(1).describe(\"Workflow name\"),\n description: z.string().min(1).describe(\"Description of the PRD processing workflow\"),\n prdFilePath: z.string().min(1).describe(\"Storage path of the uploaded PRD file (from upload response)\"),\n originalFileName: z.string().min(1).describe(\"Original file name of the PRD document\"),\n url: z.string().url().describe(\"Target website URL for context\"),\n contentChecksum: z.string().min(1).describe(\"SHA-256 checksum of the PRD file content (from upload response)\"),\n fileSize: z.number().int().min(0).describe(\"Size of the PRD file in bytes (from upload response)\"),\n});\n\nexport const PrdFileProcessLatestRunInputSchema = z.object({\n workflowRuntimeId: IdSchema.describe(\"PRD processing workflow runtime ID\"),\n});\n\n// =============================================================================\n// Secret Schemas\n// =============================================================================\n\nexport const SecretListInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to list secrets for\"),\n});\n\nexport const SecretCreateInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to create the secret for\"),\n name: z.string().min(1).describe(\"Secret name/key\"),\n value: z.string().min(1).describe(\"Secret value\"),\n description: z.string().min(1).describe(\"Human-readable description for selection guidance\"),\n source: z.enum([\"user\", \"agent\"]).optional().describe(\"Source of the secret: 'user' for user-provided credentials, 'agent' for agent-generated credentials\"),\n});\n\nexport const SecretGetInputSchema = z.object({\n secretId: IdSchema.describe(\"Secret ID to retrieve\"),\n});\n\nexport const SecretUpdateInputSchema = z.object({\n secretId: IdSchema.describe(\"Secret ID to update\"),\n name: z.string().min(1).optional().describe(\"Updated secret name\"),\n value: z.string().min(1).optional().describe(\"Updated secret value\"),\n description: z.string().optional().describe(\"Updated description\"),\n});\n\nexport const SecretDeleteInputSchema = z.object({\n secretId: IdSchema.describe(\"Secret ID to delete\"),\n});\n\n// =============================================================================\n// Use Case Schemas\n// =============================================================================\n\nexport const UseCaseDiscoveryMemoryGetInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to get use case discovery memory for\"),\n});\n\nexport const UseCaseCandidatesApproveInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID\"),\n approvedCandidateIds: z.array(IdSchema).min(1).describe(\"IDs of candidates to approve/graduate\"),\n});\n\nexport const UseCaseListInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to list use cases for\"),\n}).merge(PaginationInputSchema);\n\nexport const UseCaseGetInputSchema = z.object({\n useCaseId: IdSchema.describe(\"Use case ID to retrieve\"),\n});\n\nexport const UseCasePromptPreviewInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to generate use case for\"),\n instruction: z.string().min(1).describe(\"Natural language instruction describing the use case (e.g., 'As a logged-in user, I can add items to cart')\"),\n});\n\nexport const UseCaseCreateFromPromptsInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to create use cases for\"),\n prompts: z.array(z.object({\n instruction: z.string().min(1).describe(\"Natural language instruction describing the use case\"),\n })).min(1).describe(\"Array of prompts to generate use cases from\"),\n});\n\nexport const UseCaseUpdateFromPromptInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID\"),\n useCaseId: IdSchema.describe(\"Use case ID to update\"),\n instruction: z.string().min(1).describe(\"Natural language instruction to regenerate the use case from\"),\n});\n\n// =============================================================================\n// Test Case Schemas\n// =============================================================================\n\nexport const TestCaseListInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to list test cases for\"),\n}).merge(PaginationInputSchema);\n\nexport const TestCaseGetInputSchema = z.object({\n testCaseId: IdSchema.describe(\"Test case ID to retrieve\"),\n});\n\nexport const TestCaseListByUseCaseInputSchema = z.object({\n useCaseId: IdSchema.describe(\"Use case ID to list test cases for\"),\n});\n\nexport const TestCaseGenerateFromPromptInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID\"),\n useCaseId: IdSchema.describe(\"Use case ID to generate test cases for\"),\n instruction: z.string().min(1).describe(\"Natural language instruction describing the test cases to generate\"),\n});\n\nexport const TestCaseCreateInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID\"),\n useCaseId: IdSchema.describe(\"Use case ID to associate the test case with\"),\n title: z.string().min(1).describe(\"Test case title\"),\n description: z.string().min(1).describe(\"Detailed description of what the test case validates\"),\n goal: z.string().min(1).describe(\"Concise, measurable goal of the test\"),\n precondition: z.string().optional().describe(\"Initial state/setup required before test execution\"),\n expectedResult: z.string().min(1).describe(\"Expected outcome after test execution\"),\n url: z.string().url().describe(\"Target URL for the test case\"),\n status: z.enum([\"DRAFT\", \"ACTIVE\", \"DEPRECATED\", \"ARCHIVED\"]).optional().describe(\"Test case status\"),\n priority: z.enum([\"HIGH\", \"MEDIUM\", \"LOW\"]).optional().describe(\"Test case priority\"),\n tags: z.array(z.string()).optional().describe(\"Tags for categorization\"),\n category: z.string().optional().describe(\"Test case category\"),\n automated: z.boolean().optional().describe(\"Whether this test case is automated (default: true)\"),\n});\n\n// =============================================================================\n// Test Script Schemas\n// =============================================================================\n\nexport const TestScriptListInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to list test scripts for\"),\n}).merge(PaginationInputSchema);\n\nexport const TestScriptGetInputSchema = z.object({\n testScriptId: IdSchema.describe(\"Test script ID to retrieve\"),\n});\n\nexport const TestScriptListPaginatedInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to list test scripts for\"),\n}).merge(PaginationInputSchema);\n\n// =============================================================================\n// Workflow Schemas\n// =============================================================================\n\nexport const WorkflowStartWebsiteScanInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to scan\"),\n url: z.string().url().describe(\"Website URL to scan\"),\n description: z.string().min(1).describe(\"Description of what to scan/discover\"),\n archiveUnapproved: z.boolean().optional().describe(\"Whether to archive unapproved candidates before scanning\"),\n workflowParams: WorkflowParamsSchema,\n});\n\nexport const WorkflowListRuntimesInputSchema = z.object({\n projectId: IdSchema.optional().describe(\"Filter by project ID\"),\n});\n\nexport const WorkflowGetLatestRunInputSchema = z.object({\n workflowRuntimeId: IdSchema.describe(\"Workflow runtime ID\"),\n});\n\nexport const WorkflowStartTestCaseDetectionInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID\"),\n useCaseId: IdSchema.describe(\"Use case ID to detect test cases for\"),\n name: z.string().min(1).describe(\"Workflow name\"),\n description: z.string().min(1).describe(\"Workflow description\"),\n url: z.string().url().describe(\"Target website URL\"),\n workflowParams: WorkflowParamsSchema,\n});\n\nexport const WorkflowStartTestScriptGenerationInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID\"),\n useCaseId: IdSchema.describe(\"Use case ID\"),\n testCaseId: IdSchema.describe(\"Test case ID\"),\n name: z.string().min(1).describe(\"Workflow name\"),\n url: z.string().url().describe(\"Target website URL\"),\n goal: z.string().min(1).describe(\"Test goal\"),\n precondition: z.string().min(1).describe(\"Preconditions\"),\n instructions: z.string().min(1).describe(\"Step-by-step instructions\"),\n expectedResult: z.string().min(1).describe(\"Expected result\"),\n workflowParams: WorkflowParamsSchema,\n});\n\nexport const WorkflowGetLatestScriptGenByTestCaseInputSchema = z.object({\n testCaseId: IdSchema.describe(\"Test case ID\"),\n});\n\nexport const WorkflowStartTestScriptReplayInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID\"),\n useCaseId: IdSchema.describe(\"Use case ID\"),\n testCaseId: IdSchema.describe(\"Test case ID\"),\n testScriptId: IdSchema.describe(\"Test script ID to replay\"),\n name: z.string().min(1).describe(\"Workflow name\"),\n workflowParams: WorkflowParamsSchema,\n});\n\nexport const WorkflowStartTestScriptReplayBulkInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID\"),\n name: z.string().min(1).describe(\"Workflow name\"),\n intervalSec: z.number().int().describe(\"Interval in seconds (-1 for one-time / on-demand)\"),\n useCaseId: IdSchema.optional().describe(\"Optional: only replay test cases under this use case\"),\n namePrefix: z.string().optional().describe(\"Optional: prefix for generated workflow names\"),\n limit: z.number().int().optional().describe(\"Optional: limit number of test cases to replay\"),\n testCaseIds: z.array(IdSchema).optional().describe(\"Optional: targeted test cases to replay\"),\n repeatPerTestCase: z.number().int().optional().describe(\"Optional: repeat count per test case\"),\n workflowParams: WorkflowParamsSchema,\n});\n\nexport const WorkflowGetReplayBulkBatchSummaryInputSchema = z.object({\n runBatchId: IdSchema.describe(\"Run batch ID\"),\n});\n\nexport const WorkflowCancelRunInputSchema = z.object({\n workflowRunId: IdSchema.describe(\"Workflow run ID to cancel\"),\n});\n\nexport const WorkflowCancelRuntimeInputSchema = z.object({\n workflowRuntimeId: IdSchema.describe(\"Workflow runtime ID to cancel\"),\n});\n\n// =============================================================================\n// Report Schemas\n// =============================================================================\n\nexport const ProjectTestResultsSummaryInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to get test results summary for\"),\n});\n\nexport const ProjectTestScriptsSummaryInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to get test scripts summary for\"),\n});\n\nexport const ProjectTestRunsSummaryInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to get test runs summary for\"),\n});\n\nexport const ReportStatsSummaryInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to get report stats for\"),\n});\n\nexport const ReportCostQueryInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID\"),\n startDateKey: z.string().optional().describe(\"Start date key (YYYYMMDD)\"),\n endDateKey: z.string().optional().describe(\"End date key (YYYYMMDD)\"),\n filterType: z.string().optional().describe(\"Filter type for cost breakdown\"),\n filterIds: z.array(z.unknown()).optional().describe(\"Filter IDs\"),\n});\n\nexport const ReportPreferencesUpsertInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID\"),\n channels: z.array(z.unknown()).describe(\"Delivery channels to enable\"),\n emails: z.array(z.unknown()).optional().describe(\"Email addresses for delivery\"),\n phones: z.array(z.unknown()).optional().describe(\"Phone numbers for SMS delivery\"),\n webhookUrl: z.string().url().optional().describe(\"Webhook URL for delivery\"),\n defaultExportFormat: z.string().optional().describe(\"Default export format (pdf, html, etc.)\"),\n});\n\nexport const ReportFinalGenerateInputSchema = z.object({\n projectId: IdSchema.describe(\"Project ID to generate report for\"),\n exportFormat: z.enum([\"pdf\", \"html\", \"markdown\"]).describe(\"Export format for the report\"),\n});\n\n// =============================================================================\n// Wallet Schemas\n// =============================================================================\n\nexport const WalletTopUpInputSchema = z.object({\n packageId: IdSchema.describe(\"Token package ID to purchase\"),\n checkoutSuccessCallback: z.string().url().describe(\"URL to redirect to when checkout succeeds\"),\n checkoutCancelCallback: z.string().url().describe(\"URL to redirect to when checkout is canceled\"),\n});\n\nexport const WalletPaymentMethodCreateSetupSessionInputSchema = z.object({\n checkoutSuccessCallback: z.string().url().describe(\"URL to redirect to when payment method setup succeeds\"),\n checkoutCancelCallback: z.string().url().describe(\"URL to redirect to when payment method setup is canceled\"),\n});\n\nexport const WalletAutoTopUpSetPaymentMethodInputSchema = z.object({\n paymentMethodId: IdSchema.describe(\"Saved Stripe payment method ID (e.g., pm_xxx)\"),\n});\n\nexport const WalletPaymentMethodListInputSchema = z.object({});\n\nexport const WalletAutoTopUpUpdateInputSchema = z.object({\n enabled: z.boolean().describe(\"Whether auto top-up is enabled\"),\n topUpTriggerTokenThreshold: z.number().int().min(0).describe(\"Token balance threshold to trigger auto top-up\"),\n packageId: IdSchema.describe(\"Token package ID to purchase when auto top-up triggers\"),\n});\n\n// =============================================================================\n// Recommendation Schemas\n// =============================================================================\n\nexport const RecommendScheduleInputSchema = z.object({\n projectId: IdSchema.optional().describe(\"Project ID for context\"),\n testFrequency: z.enum([\"daily\", \"weekly\", \"onDemand\"]).optional().describe(\"Desired test frequency\"),\n timezone: z.string().optional().describe(\"Timezone for scheduling\"),\n});\n\nexport const RecommendCicdSetupInputSchema = z.object({\n projectId: IdSchema.optional().describe(\"Project ID for context\"),\n repositoryProvider: z.enum([\"github\", \"azureDevOps\", \"gitlab\", \"other\"]).optional().describe(\"Git repository provider\"),\n cadence: z.enum([\"onPullRequest\", \"nightly\", \"onDemand\"]).optional().describe(\"CI/CD trigger cadence\"),\n});\n","/**\n * Type definitions for QA Gateway tools.\n */\n\nimport type { ZodSchema } from \"zod\";\n\n/**\n * MCP error codes.\n */\nexport enum McpErrorCode {\n UNAUTHORIZED = \"UNAUTHORIZED\",\n FORBIDDEN = \"FORBIDDEN\",\n NOT_FOUND = \"NOT_FOUND\",\n INVALID_ARGUMENT = \"INVALID_ARGUMENT\",\n UPSTREAM_ERROR = \"UPSTREAM_ERROR\",\n INTERNAL_ERROR = \"INTERNAL_ERROR\",\n}\n\n/**\n * Gateway error with MCP error code.\n */\nexport class GatewayError extends Error {\n /** MCP error code. */\n public readonly code: McpErrorCode;\n\n /** HTTP status code (if applicable). */\n public readonly statusCode?: number;\n\n /** Additional error details. */\n public readonly details?: Record<string, unknown>;\n\n constructor(params: {\n code: McpErrorCode;\n message: string;\n statusCode?: number;\n details?: Record<string, unknown>;\n }) {\n super(params.message);\n this.name = \"GatewayError\";\n this.code = params.code;\n this.statusCode = params.statusCode;\n this.details = params.details;\n }\n}\n\n/**\n * Mapped upstream HTTP call specification.\n */\nexport interface IUpstreamCall {\n /** HTTP method. */\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n\n /** Path relative to prompt-service base URL. */\n path: string;\n\n /** Query parameters. */\n queryParams?: Record<string, string | number | boolean | undefined>;\n\n /** Request body (for POST/PUT/PATCH). */\n body?: unknown;\n\n /** Optional multipart form-data upload. */\n multipartFormData?: {\n /** Field name for the uploaded file (e.g., \"file\"). */\n fileFieldName: string;\n /** File name to provide to upstream. */\n fileName: string;\n /** MIME type for the uploaded file. */\n contentType: string;\n /** Base64-encoded file bytes. */\n fileBase64: string;\n };\n\n /** Timeout in milliseconds (overrides default). */\n timeoutMs?: number;\n}\n\n/**\n * Upstream response.\n */\nexport interface IUpstreamResponse<T = unknown> {\n /** HTTP status code. */\n statusCode: number;\n /** Response data. */\n data: T;\n /** Response headers. */\n headers: Record<string, string>;\n}\n\n/**\n * Caller credentials for API requests.\n */\nexport interface ICallerCredentials {\n /** Bearer token (from device code flow or config). */\n bearerToken?: string;\n /** API key (from device code flow or config). */\n apiKey?: string;\n}\n\n/**\n * QA tool definition with schema, description, and implementation.\n */\nexport interface IQaToolDefinition {\n /** Tool name (used in MCP). */\n name: string;\n\n /** Tool description (shown to LLM). */\n description: string;\n\n /** Input schema (Zod). */\n inputSchema: ZodSchema;\n\n /** Whether this tool requires authentication (default: true). */\n requiresAuth?: boolean;\n\n /** Map validated input to upstream call. */\n mapToUpstream: (input: unknown) => IUpstreamCall;\n\n /** Map upstream response to tool output. */\n mapFromUpstream?: (response: IUpstreamResponse, input?: unknown) => unknown;\n\n /**\n * Local handler for tools that don't make upstream calls.\n * Used for auth tools and recommendation tools.\n */\n localHandler?: (input: unknown) => Promise<unknown>;\n}\n","/**\n * HTTP client for forwarding requests to prompt-service.\n */\n\nimport axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\";\n\nimport { getConfig } from \"../shared/config.js\";\nimport { getLogger } from \"../shared/logger.js\";\n\nimport {\n GatewayError,\n ICallerCredentials,\n IUpstreamCall,\n IUpstreamResponse,\n McpErrorCode,\n} from \"./types.js\";\n\n/** Allowed upstream path prefixes. */\nconst ALLOWED_UPSTREAM_PREFIXES = [\n \"/v1/protected/muggle-test/\",\n \"/v1/protected/wallet/\",\n \"/v1/protected/api-keys\",\n];\n\n/**\n * Client for forwarding requests to prompt-service with auth passthrough.\n */\nexport class PromptServiceClient {\n private readonly httpClient: AxiosInstance;\n private readonly baseUrl: string;\n private readonly requestTimeoutMs: number;\n\n constructor() {\n const config = getConfig();\n this.baseUrl = config.qa.promptServiceBaseUrl;\n this.requestTimeoutMs = config.qa.requestTimeoutMs;\n\n this.httpClient = axios.create({\n baseURL: this.baseUrl,\n timeout: this.requestTimeoutMs,\n validateStatus: () => true,\n });\n }\n\n /**\n * Validate that the upstream path is within the allowed prefix.\n * @param path - Path to validate.\n * @throws GatewayError if path is not allowed.\n */\n private validatePath(path: string): void {\n const isAllowed = ALLOWED_UPSTREAM_PREFIXES.some((prefix) => path.startsWith(prefix));\n\n if (!isAllowed) {\n const logger = getLogger();\n logger.error(\"Path not in allowlist\", {\n path: path,\n allowedPrefixes: ALLOWED_UPSTREAM_PREFIXES,\n });\n throw new GatewayError({\n code: McpErrorCode.FORBIDDEN,\n message: `Path '${path}' is not allowed`,\n });\n }\n }\n\n /**\n * Build headers for upstream request with credential forwarding.\n * @param credentials - Caller credentials to forward.\n * @param correlationId - Request correlation ID.\n * @returns Headers object.\n */\n private buildHeaders(\n credentials: ICallerCredentials,\n correlationId: string,\n ): Record<string, string> {\n const headers: Record<string, string> = {\n \"X-Correlation-Id\": correlationId,\n };\n\n if (credentials.bearerToken) {\n headers[\"Authorization\"] = credentials.bearerToken.startsWith(\"Bearer \")\n ? credentials.bearerToken\n : `Bearer ${credentials.bearerToken}`;\n }\n\n if (credentials.apiKey) {\n headers[\"x-api-key\"] = credentials.apiKey;\n }\n\n return headers;\n }\n\n /**\n * Build query string from parameters.\n * @param params - Query parameters.\n * @returns Query string (without leading '?').\n */\n private buildQueryString(\n params?: Record<string, string | number | boolean | undefined>,\n ): string {\n if (!params) {\n return \"\";\n }\n\n const entries = Object.entries(params)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n\n return entries.length > 0 ? `?${entries.join(\"&\")}` : \"\";\n }\n\n /**\n * Map HTTP status code to MCP error code.\n * @param statusCode - HTTP status code.\n * @returns MCP error code.\n */\n private mapStatusToErrorCode(statusCode: number): McpErrorCode {\n if (statusCode === 401) {\n return McpErrorCode.UNAUTHORIZED;\n }\n if (statusCode === 403) {\n return McpErrorCode.FORBIDDEN;\n }\n if (statusCode === 404) {\n return McpErrorCode.NOT_FOUND;\n }\n if (statusCode >= 400 && statusCode < 500) {\n return McpErrorCode.INVALID_ARGUMENT;\n }\n return McpErrorCode.UPSTREAM_ERROR;\n }\n\n /**\n * Format upstream error response into a user-friendly message.\n * @param statusCode - HTTP status code.\n * @param data - Response data from upstream.\n * @returns User-friendly error message.\n */\n private formatUpstreamErrorMessage(statusCode: number, data: unknown): string {\n const responseData = data as {\n error?: string;\n message?: string;\n detail?: string;\n details?: string;\n } | null;\n\n const rawMessage =\n responseData?.message ||\n responseData?.error ||\n responseData?.detail ||\n responseData?.details;\n\n if (rawMessage && typeof rawMessage === \"string\") {\n let cleaned = rawMessage\n .replace(/^Error:\\s*/i, \"\")\n .replace(/^INVALID_ARGUMENT:\\s*/i, \"\")\n .replace(/^NOT_FOUND:\\s*/i, \"\")\n .replace(/^FORBIDDEN:\\s*/i, \"\");\n\n cleaned = cleaned.charAt(0).toUpperCase() + cleaned.slice(1);\n return cleaned;\n }\n\n switch (statusCode) {\n case 400:\n return \"Invalid request. Please check your input parameters.\";\n case 401:\n return \"Authentication required. Please check your credentials.\";\n case 403:\n return \"You don't have permission to perform this action.\";\n case 404:\n return \"The requested resource was not found.\";\n case 409:\n return \"A conflict occurred. The resource may already exist.\";\n case 429:\n return \"Too many requests. Please wait and try again.\";\n case 500:\n return \"The service encountered an error. Please try again later.\";\n case 502:\n case 503:\n case 504:\n return \"The service is temporarily unavailable. Please try again later.\";\n default:\n return `Request failed with status ${statusCode}.`;\n }\n }\n\n /**\n * Execute an upstream call to prompt-service.\n * @param call - Upstream call specification.\n * @param credentials - Caller credentials to forward.\n * @param correlationId - Request correlation ID.\n * @returns Upstream response.\n * @throws GatewayError on validation or upstream errors.\n */\n async execute<T = unknown>(\n call: IUpstreamCall,\n credentials: ICallerCredentials,\n correlationId: string,\n ): Promise<IUpstreamResponse<T>> {\n const logger = getLogger();\n\n // Validate credentials\n if (!credentials.bearerToken && !credentials.apiKey) {\n throw new GatewayError({\n code: McpErrorCode.UNAUTHORIZED,\n message: \"Missing authentication. Please run 'muggle-mcp login' to authenticate.\",\n });\n }\n\n // Validate path\n this.validatePath(call.path);\n\n const url = call.path + this.buildQueryString(call.queryParams);\n const headers = this.buildHeaders(credentials, correlationId);\n const timeout = call.timeoutMs || this.requestTimeoutMs;\n\n const startTime = Date.now();\n\n logger.info(\"Upstream request\", {\n correlationId: correlationId,\n method: call.method,\n path: call.path,\n hasBody: !!call.body,\n });\n\n try {\n const requestConfig: AxiosRequestConfig = {\n method: call.method,\n url: url,\n headers: headers,\n timeout: timeout,\n };\n\n if (call.body && [\"POST\", \"PUT\", \"PATCH\"].includes(call.method)) {\n requestConfig.data = call.body;\n requestConfig.headers = {\n ...headers,\n \"Content-Type\": \"application/json\",\n };\n } else {\n requestConfig.headers = {\n ...headers,\n \"Content-Type\": \"application/json\",\n };\n }\n\n const response = await this.httpClient.request(requestConfig);\n const latency = Date.now() - startTime;\n\n logger.info(\"Upstream response\", {\n correlationId: correlationId,\n statusCode: response.status,\n latencyMs: latency,\n });\n\n // Handle error responses\n if (response.status >= 400) {\n const errorCode = this.mapStatusToErrorCode(response.status);\n const errorMessage = this.formatUpstreamErrorMessage(response.status, response.data);\n\n throw new GatewayError({\n code: errorCode,\n message: errorMessage,\n statusCode: response.status,\n });\n }\n\n // Extract response headers\n const responseHeaders: Record<string, string> = {};\n for (const [key, value] of Object.entries(response.headers)) {\n if (typeof value === \"string\") {\n responseHeaders[key.toLowerCase()] = value;\n }\n }\n\n return {\n statusCode: response.status,\n data: response.data as T,\n headers: responseHeaders,\n };\n } catch (error) {\n const latency = Date.now() - startTime;\n\n if (error instanceof GatewayError) {\n throw error;\n }\n\n if (error instanceof AxiosError) {\n logger.error(\"Upstream request failed\", {\n correlationId: correlationId,\n error: error.message,\n code: error.code,\n latencyMs: latency,\n });\n\n if (error.code === \"ECONNABORTED\" || error.code === \"ETIMEDOUT\") {\n throw new GatewayError({\n code: McpErrorCode.UPSTREAM_ERROR,\n message: `Request timeout after ${timeout}ms`,\n details: { upstreamPath: call.path },\n });\n }\n\n throw new GatewayError({\n code: McpErrorCode.UPSTREAM_ERROR,\n message: `Upstream connection error: ${error.message}`,\n details: { upstreamPath: call.path },\n });\n }\n\n logger.error(\"Unknown upstream error\", {\n correlationId: correlationId,\n error: String(error),\n latencyMs: latency,\n });\n\n throw new GatewayError({\n code: McpErrorCode.INTERNAL_ERROR,\n message: \"Internal gateway error\",\n });\n }\n }\n}\n\n/** Singleton client instance. */\nlet clientInstance: PromptServiceClient | null = null;\n\n/**\n * Get the PromptServiceClient instance (singleton).\n * @returns PromptServiceClient instance.\n */\nexport function getPromptServiceClient(): PromptServiceClient {\n if (!clientInstance) {\n clientInstance = new PromptServiceClient();\n }\n return clientInstance;\n}\n","/**\n * QA Tool registry - maps tool names to their implementations.\n */\n\nimport { z } from \"zod\";\n\nimport { getCallerCredentials } from \"../../shared/auth.js\";\nimport { getConfig } from \"../../shared/config.js\";\nimport { createChildLogger } from \"../../shared/logger.js\";\nimport type { IMcpToolResult } from \"../../shared/types.js\";\n\nimport * as schemas from \"../contracts/index.js\";\nimport { GatewayError, IQaToolDefinition, IUpstreamResponse } from \"../types.js\";\nimport { getPromptServiceClient } from \"../upstream-client.js\";\n\n/** Muggle Test API prefix. */\nconst MUGGLE_TEST_PREFIX = \"/v1/protected/muggle-test\";\n\n/** Default workflow timeout. */\nconst getWorkflowTimeoutMs = (): number => getConfig().qa.workflowTimeoutMs;\n\n// =============================================================================\n// Project Tools\n// =============================================================================\n\nconst projectTools: IQaToolDefinition[] = [\n {\n name: \"qa_project_create\",\n description: \"Create a new QA testing project. Projects organize use cases, test cases, and test scripts.\",\n inputSchema: schemas.ProjectCreateInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.ProjectCreateInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/projects`,\n body: {\n name: data.projectName,\n description: data.description,\n url: data.url,\n },\n };\n },\n },\n {\n name: \"qa_project_get\",\n description: \"Get details of a specific project by ID.\",\n inputSchema: schemas.ProjectGetInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.ProjectGetInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}`,\n };\n },\n },\n {\n name: \"qa_project_update\",\n description: \"Update an existing project's details.\",\n inputSchema: schemas.ProjectUpdateInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.ProjectUpdateInputSchema>;\n const body: Record<string, unknown> = { id: data.projectId };\n if (data.projectName !== undefined) body.name = data.projectName;\n if (data.description !== undefined) body.description = data.description;\n if (data.url !== undefined) body.url = data.url;\n return {\n method: \"PUT\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}`,\n body: body,\n };\n },\n },\n {\n name: \"qa_project_list\",\n description: \"List all projects accessible to the authenticated user.\",\n inputSchema: schemas.ProjectListInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.ProjectListInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/projects`,\n queryParams: { page: data.page, pageSize: data.pageSize },\n };\n },\n },\n {\n name: \"qa_project_delete\",\n description: \"Delete a project and all associated entities. This is a soft delete.\",\n inputSchema: schemas.ProjectDeleteInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.ProjectDeleteInputSchema>;\n return {\n method: \"DELETE\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}`,\n };\n },\n },\n];\n\n// =============================================================================\n// Use Case Tools\n// =============================================================================\n\nconst useCaseTools: IQaToolDefinition[] = [\n {\n name: \"qa_use_case_discovery_memory_get\",\n description: \"Get the use case discovery memory for a project, including all discovered use case candidates.\",\n inputSchema: schemas.UseCaseDiscoveryMemoryGetInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.UseCaseDiscoveryMemoryGetInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}/use-case-discovery-memory`,\n };\n },\n },\n {\n name: \"qa_use_case_candidates_approve\",\n description: \"Approve (graduate) selected use case candidates into actual use cases.\",\n inputSchema: schemas.UseCaseCandidatesApproveInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.UseCaseCandidatesApproveInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}/use-case-discovery-memory/graduate`,\n body: { approveIds: data.approvedCandidateIds },\n };\n },\n },\n {\n name: \"qa_use_case_list\",\n description: \"List all use cases for a project.\",\n inputSchema: schemas.UseCaseListInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.UseCaseListInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/use-cases`,\n queryParams: { projectId: data.projectId, page: data.page, pageSize: data.pageSize },\n };\n },\n },\n {\n name: \"qa_use_case_get\",\n description: \"Get details of a specific use case by ID.\",\n inputSchema: schemas.UseCaseGetInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.UseCaseGetInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/use-cases/${data.useCaseId}`,\n };\n },\n },\n {\n name: \"qa_use_case_prompt_preview\",\n description: \"Preview a use case generated from a natural language instruction without saving.\",\n inputSchema: schemas.UseCasePromptPreviewInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.UseCasePromptPreviewInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}/use-cases/prompt/preview`,\n body: { instruction: data.instruction },\n };\n },\n },\n {\n name: \"qa_use_case_create_from_prompts\",\n description: \"Create one or more use cases from natural language instructions.\",\n inputSchema: schemas.UseCaseCreateFromPromptsInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.UseCaseCreateFromPromptsInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}/use-cases/prompts/bulk`,\n body: { projectId: data.projectId, prompts: data.prompts },\n };\n },\n },\n {\n name: \"qa_use_case_update_from_prompt\",\n description: \"Update an existing use case by regenerating its fields from a new instruction.\",\n inputSchema: schemas.UseCaseUpdateFromPromptInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.UseCaseUpdateFromPromptInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}/use-cases/${data.useCaseId}/prompt`,\n body: { instruction: data.instruction },\n };\n },\n },\n];\n\n// =============================================================================\n// Test Case Tools\n// =============================================================================\n\nconst testCaseTools: IQaToolDefinition[] = [\n {\n name: \"qa_test_case_list\",\n description: \"List test cases for a project.\",\n inputSchema: schemas.TestCaseListInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.TestCaseListInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/test-cases`,\n queryParams: { projectId: data.projectId, page: data.page, pageSize: data.pageSize },\n };\n },\n },\n {\n name: \"qa_test_case_get\",\n description: \"Get details of a specific test case.\",\n inputSchema: schemas.TestCaseGetInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.TestCaseGetInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/test-cases/${data.testCaseId}`,\n };\n },\n },\n {\n name: \"qa_test_case_list_by_use_case\",\n description: \"List test cases for a specific use case.\",\n inputSchema: schemas.TestCaseListByUseCaseInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.TestCaseListByUseCaseInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/use-cases/${data.useCaseId}/test-cases`,\n };\n },\n },\n {\n name: \"qa_test_case_generate_from_prompt\",\n description: \"Generate test cases from a natural language prompt. Returns preview test cases.\",\n inputSchema: schemas.TestCaseGenerateFromPromptInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.TestCaseGenerateFromPromptInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}/use-cases/${data.useCaseId}/test-cases/prompt/preview`,\n body: { instruction: data.instruction },\n };\n },\n },\n {\n name: \"qa_test_case_create\",\n description: \"Create a new test case for a use case.\",\n inputSchema: schemas.TestCaseCreateInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.TestCaseCreateInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/test-cases`,\n body: {\n projectId: data.projectId,\n useCaseId: data.useCaseId,\n title: data.title,\n description: data.description,\n goal: data.goal,\n precondition: data.precondition,\n expectedResult: data.expectedResult,\n url: data.url,\n status: data.status || \"DRAFT\",\n priority: data.priority || \"MEDIUM\",\n tags: data.tags || [],\n category: data.category || \"Functional\",\n automated: data.automated ?? true,\n },\n };\n },\n },\n];\n\n// =============================================================================\n// Test Script Tools\n// =============================================================================\n\nconst testScriptTools: IQaToolDefinition[] = [\n {\n name: \"qa_test_script_list\",\n description: \"List test scripts for a project.\",\n inputSchema: schemas.TestScriptListInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.TestScriptListInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/test-scripts`,\n queryParams: { projectId: data.projectId, page: data.page, pageSize: data.pageSize },\n };\n },\n },\n {\n name: \"qa_test_script_get\",\n description: \"Get details of a specific test script.\",\n inputSchema: schemas.TestScriptGetInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.TestScriptGetInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/test-scripts/${data.testScriptId}`,\n };\n },\n },\n {\n name: \"qa_test_script_list_paginated\",\n description: \"List test scripts with full pagination support.\",\n inputSchema: schemas.TestScriptListPaginatedInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.TestScriptListPaginatedInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/test-scripts/paginated`,\n queryParams: { projectId: data.projectId, page: data.page, pageSize: data.pageSize },\n };\n },\n },\n];\n\n// =============================================================================\n// Workflow Tools\n// =============================================================================\n\nconst workflowTools: IQaToolDefinition[] = [\n {\n name: \"qa_workflow_start_website_scan\",\n description: \"Start a website scan workflow to discover use cases from a URL.\",\n inputSchema: schemas.WorkflowStartWebsiteScanInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowStartWebsiteScanInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/use-case/website-scan`,\n body: {\n projectId: data.projectId,\n url: data.url,\n description: data.description,\n archiveUnapproved: data.archiveUnapproved,\n ...(data.workflowParams && { workflowParams: data.workflowParams }),\n },\n timeoutMs: getWorkflowTimeoutMs(),\n };\n },\n },\n {\n name: \"qa_workflow_list_website_scan_runtimes\",\n description: \"List website scan workflow runtimes.\",\n inputSchema: schemas.WorkflowListRuntimesInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowListRuntimesInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/use-case/website-scan/workflowRuntimes`,\n queryParams: { projectId: data.projectId },\n };\n },\n },\n {\n name: \"qa_workflow_get_website_scan_latest_run\",\n description: \"Get the latest run status for a website scan workflow runtime.\",\n inputSchema: schemas.WorkflowGetLatestRunInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowGetLatestRunInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/use-case/website-scan/${data.workflowRuntimeId}/run/latest`,\n };\n },\n },\n {\n name: \"qa_workflow_start_test_case_detection\",\n description: \"Start a test case detection workflow to generate test cases from use cases.\",\n inputSchema: schemas.WorkflowStartTestCaseDetectionInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowStartTestCaseDetectionInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/test-case/test-case-detection`,\n body: {\n projectId: data.projectId,\n useCaseId: data.useCaseId,\n name: data.name,\n description: data.description,\n url: data.url,\n ...(data.workflowParams && { workflowParams: data.workflowParams }),\n },\n timeoutMs: getWorkflowTimeoutMs(),\n };\n },\n },\n {\n name: \"qa_workflow_list_test_case_detection_runtimes\",\n description: \"List test case detection workflow runtimes.\",\n inputSchema: schemas.WorkflowListRuntimesInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowListRuntimesInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/test-case/test-case-detection/workflowRuntimes`,\n queryParams: { projectId: data.projectId },\n };\n },\n },\n {\n name: \"qa_workflow_get_test_case_detection_latest_run\",\n description: \"Get the latest run status for a test case detection workflow runtime.\",\n inputSchema: schemas.WorkflowGetLatestRunInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowGetLatestRunInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/test-case/test-case-detection/${data.workflowRuntimeId}/run/latest`,\n };\n },\n },\n {\n name: \"qa_workflow_start_test_script_generation\",\n description: \"Start a test script generation workflow.\",\n inputSchema: schemas.WorkflowStartTestScriptGenerationInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowStartTestScriptGenerationInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/test-script/test-script-generation`,\n body: {\n projectId: data.projectId,\n testCaseId: data.testCaseId,\n useCaseId: data.useCaseId,\n name: data.name,\n url: data.url,\n goal: data.goal,\n precondition: data.precondition,\n instructions: data.instructions,\n expectedResult: data.expectedResult,\n ...(data.workflowParams && { workflowParams: data.workflowParams }),\n },\n timeoutMs: getWorkflowTimeoutMs(),\n };\n },\n },\n {\n name: \"qa_workflow_get_test_script_generation_latest_run\",\n description: \"Get the latest run status for a test script generation workflow runtime.\",\n inputSchema: schemas.WorkflowGetLatestRunInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowGetLatestRunInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/test-script/test-script-generation/${data.workflowRuntimeId}/run/latest`,\n };\n },\n },\n {\n name: \"qa_workflow_get_latest_test_script_generation_runtime_by_test_case\",\n description: \"Get the latest test script generation runtime for a specific test case.\",\n inputSchema: schemas.WorkflowGetLatestScriptGenByTestCaseInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowGetLatestScriptGenByTestCaseInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/test-script/test-script-generation/testcases/${data.testCaseId}/runtime/latest`,\n };\n },\n },\n {\n name: \"qa_workflow_start_test_script_replay\",\n description: \"Start a test script replay workflow to execute a single test script.\",\n inputSchema: schemas.WorkflowStartTestScriptReplayInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowStartTestScriptReplayInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/test-script/test-script-replay`,\n body: {\n projectId: data.projectId,\n useCaseId: data.useCaseId,\n testCaseId: data.testCaseId,\n testScriptId: data.testScriptId,\n name: data.name,\n ...(data.workflowParams && { workflowParams: data.workflowParams }),\n },\n timeoutMs: getWorkflowTimeoutMs(),\n };\n },\n },\n {\n name: \"qa_workflow_get_test_script_replay_latest_run\",\n description: \"Get the latest run status for a test script replay workflow runtime.\",\n inputSchema: schemas.WorkflowGetLatestRunInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowGetLatestRunInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/test-script/test-script-replay/${data.workflowRuntimeId}/run/latest`,\n };\n },\n },\n {\n name: \"qa_workflow_start_test_script_replay_bulk\",\n description: \"Start a bulk test script replay workflow to execute multiple test scripts.\",\n inputSchema: schemas.WorkflowStartTestScriptReplayBulkInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowStartTestScriptReplayBulkInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/test-script/test-script-replay/bulk/workflowRuntimes`,\n body: {\n projectId: data.projectId,\n name: data.name,\n intervalSec: data.intervalSec,\n useCaseId: data.useCaseId,\n namePrefix: data.namePrefix,\n limit: data.limit,\n testCaseIds: data.testCaseIds,\n repeatPerTestCase: data.repeatPerTestCase,\n ...(data.workflowParams && { workflowParams: data.workflowParams }),\n },\n timeoutMs: getWorkflowTimeoutMs(),\n };\n },\n },\n {\n name: \"qa_workflow_list_test_script_replay_bulk_runtimes\",\n description: \"List bulk test script replay workflow runtimes.\",\n inputSchema: schemas.WorkflowListRuntimesInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowListRuntimesInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/test-script/test-script-replay/bulk/workflowRuntimes`,\n queryParams: { projectId: data.projectId },\n };\n },\n },\n {\n name: \"qa_workflow_get_test_script_replay_bulk_latest_run\",\n description: \"Get the latest run status for a bulk test script replay workflow runtime.\",\n inputSchema: schemas.WorkflowGetLatestRunInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowGetLatestRunInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/test-script/test-script-replay/bulk/${data.workflowRuntimeId}/run/latest`,\n };\n },\n },\n {\n name: \"qa_workflow_get_replay_bulk_run_batch_summary\",\n description: \"Get the summary of a bulk replay run batch.\",\n inputSchema: schemas.WorkflowGetReplayBulkBatchSummaryInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowGetReplayBulkBatchSummaryInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/test-script/test-script-replay/bulk/run-batch/${data.runBatchId}/summary`,\n };\n },\n },\n {\n name: \"qa_workflow_cancel_run\",\n description: \"Cancel a running workflow run.\",\n inputSchema: schemas.WorkflowCancelRunInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowCancelRunInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/runs/${data.workflowRunId}/cancel`,\n };\n },\n },\n {\n name: \"qa_workflow_cancel_runtime\",\n description: \"Cancel a workflow runtime and all its runs.\",\n inputSchema: schemas.WorkflowCancelRuntimeInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WorkflowCancelRuntimeInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/runtimes/${data.workflowRuntimeId}/cancel`,\n };\n },\n },\n];\n\n// =============================================================================\n// Report Tools\n// =============================================================================\n\nconst reportTools: IQaToolDefinition[] = [\n {\n name: \"qa_project_test_results_summary_get\",\n description: \"Get a summary of test results for a project.\",\n inputSchema: schemas.ProjectTestResultsSummaryInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.ProjectTestResultsSummaryInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}/testResults`,\n };\n },\n },\n {\n name: \"qa_project_test_scripts_summary_get\",\n description: \"Get a summary of test scripts for a project.\",\n inputSchema: schemas.ProjectTestScriptsSummaryInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.ProjectTestScriptsSummaryInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}/test-scripts/summary`,\n };\n },\n },\n {\n name: \"qa_project_test_runs_summary_get\",\n description: \"Get a summary of test runs for a project.\",\n inputSchema: schemas.ProjectTestRunsSummaryInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.ProjectTestRunsSummaryInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}/test-runs/summary`,\n };\n },\n },\n {\n name: \"qa_report_stats_summary_get\",\n description: \"Get report statistics summary for a project.\",\n inputSchema: schemas.ReportStatsSummaryInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.ReportStatsSummaryInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/report/stats-summary`,\n queryParams: { projectId: data.projectId },\n };\n },\n },\n {\n name: \"qa_report_cost_query\",\n description: \"Query cost/usage data for a project over a date range.\",\n inputSchema: schemas.ReportCostQueryInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.ReportCostQueryInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/report/cost/query`,\n body: {\n projectId: data.projectId,\n startDateKey: data.startDateKey,\n endDateKey: data.endDateKey,\n filterType: data.filterType,\n filterIds: data.filterIds,\n },\n };\n },\n },\n {\n name: \"qa_report_preferences_upsert\",\n description: \"Update report delivery preferences for a project.\",\n inputSchema: schemas.ReportPreferencesUpsertInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.ReportPreferencesUpsertInputSchema>;\n return {\n method: \"PUT\",\n path: `${MUGGLE_TEST_PREFIX}/report/preferences`,\n body: {\n projectId: data.projectId,\n channels: data.channels,\n emails: data.emails,\n phones: data.phones,\n webhookUrl: data.webhookUrl,\n defaultExportFormat: data.defaultExportFormat,\n },\n };\n },\n },\n {\n name: \"qa_report_final_generate\",\n description: \"Generate a final test report for a project.\",\n inputSchema: schemas.ReportFinalGenerateInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.ReportFinalGenerateInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/report/final/generate`,\n body: {\n projectId: data.projectId,\n exportFormat: data.exportFormat,\n },\n timeoutMs: getWorkflowTimeoutMs(),\n };\n },\n },\n];\n\n// =============================================================================\n// Secret Tools\n// =============================================================================\n\nconst secretTools: IQaToolDefinition[] = [\n {\n name: \"qa_secret_list\",\n description: \"List all secrets for a project. Secret values are not returned for security.\",\n inputSchema: schemas.SecretListInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.SecretListInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/secrets`,\n queryParams: { projectId: data.projectId },\n };\n },\n },\n {\n name: \"qa_secret_create\",\n description: \"Create a new secret (credential) for a project.\",\n inputSchema: schemas.SecretCreateInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.SecretCreateInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/secrets`,\n body: {\n projectId: data.projectId,\n secretName: data.name,\n value: data.value,\n description: data.description,\n source: data.source,\n },\n };\n },\n },\n {\n name: \"qa_secret_get\",\n description: \"Get details of a specific secret. The secret value is not returned for security.\",\n inputSchema: schemas.SecretGetInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.SecretGetInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/secrets/${data.secretId}`,\n };\n },\n },\n {\n name: \"qa_secret_update\",\n description: \"Update an existing secret.\",\n inputSchema: schemas.SecretUpdateInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.SecretUpdateInputSchema>;\n const body: Record<string, unknown> = {};\n if (data.name !== undefined) body.name = data.name;\n if (data.value !== undefined) body.value = data.value;\n if (data.description !== undefined) body.description = data.description;\n return {\n method: \"PUT\",\n path: `${MUGGLE_TEST_PREFIX}/secrets/${data.secretId}`,\n body: body,\n };\n },\n },\n {\n name: \"qa_secret_delete\",\n description: \"Delete a secret from a project.\",\n inputSchema: schemas.SecretDeleteInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.SecretDeleteInputSchema>;\n return {\n method: \"DELETE\",\n path: `${MUGGLE_TEST_PREFIX}/secrets/${data.secretId}`,\n };\n },\n },\n];\n\n// =============================================================================\n// PRD File Tools\n// =============================================================================\n\nconst prdFileTools: IQaToolDefinition[] = [\n {\n name: \"qa_prd_file_upload\",\n description: \"Upload a PRD file to a project. File content should be base64-encoded.\",\n inputSchema: schemas.PrdFileUploadInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.PrdFileUploadInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/use-case/prd-file-upload`,\n multipartFormData: {\n fileFieldName: \"file\",\n fileName: data.fileName,\n contentType: data.contentType || \"application/octet-stream\",\n fileBase64: data.contentBase64,\n },\n };\n },\n },\n {\n name: \"qa_prd_file_list_by_project\",\n description: \"List all PRD files associated with a project.\",\n inputSchema: schemas.PrdFileListInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.PrdFileListInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}/prd-files`,\n };\n },\n },\n {\n name: \"qa_prd_file_delete\",\n description: \"Delete a PRD file from a project.\",\n inputSchema: schemas.PrdFileDeleteInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.PrdFileDeleteInputSchema>;\n return {\n method: \"DELETE\",\n path: `${MUGGLE_TEST_PREFIX}/projects/${data.projectId}/prd-files/${data.prdFileId}`,\n };\n },\n },\n {\n name: \"qa_workflow_start_prd_file_process\",\n description: \"Start a PRD file processing workflow to extract use cases.\",\n inputSchema: schemas.PrdFileProcessStartInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.PrdFileProcessStartInputSchema>;\n return {\n method: \"POST\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/use-case/prd-file-process`,\n body: {\n projectId: data.projectId,\n name: data.name,\n description: data.description,\n prdFilePath: data.prdFilePath,\n originalFileName: data.originalFileName,\n url: data.url,\n contentChecksum: data.contentChecksum,\n fileSize: data.fileSize,\n },\n };\n },\n },\n {\n name: \"qa_workflow_get_prd_file_process_latest_run\",\n description: \"Get the latest run status of a PRD file processing workflow.\",\n inputSchema: schemas.PrdFileProcessLatestRunInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.PrdFileProcessLatestRunInputSchema>;\n return {\n method: \"GET\",\n path: `${MUGGLE_TEST_PREFIX}/workflow/use-case/prd-file-process/${data.workflowRuntimeId}/run/latest`,\n };\n },\n },\n];\n\n// =============================================================================\n// Wallet Tools\n// =============================================================================\n\nconst walletTools: IQaToolDefinition[] = [\n {\n name: \"qa_wallet_topup\",\n description: \"Create a Stripe checkout session to purchase a token package.\",\n inputSchema: schemas.WalletTopUpInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WalletTopUpInputSchema>;\n return {\n method: \"POST\",\n path: \"/v1/protected/wallet/topup\",\n body: {\n packageId: data.packageId,\n checkoutSuccessCallback: data.checkoutSuccessCallback,\n checkoutCancelCallback: data.checkoutCancelCallback,\n },\n };\n },\n },\n {\n name: \"qa_wallet_payment_method_create_setup_session\",\n description: \"Create a Stripe setup session to add a payment method.\",\n inputSchema: schemas.WalletPaymentMethodCreateSetupSessionInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WalletPaymentMethodCreateSetupSessionInputSchema>;\n return {\n method: \"POST\",\n path: \"/v1/protected/wallet/payment-methods/setup\",\n body: {\n checkoutSuccessCallback: data.checkoutSuccessCallback,\n checkoutCancelCallback: data.checkoutCancelCallback,\n },\n };\n },\n },\n {\n name: \"qa_wallet_auto_topup_set_payment_method\",\n description: \"Set the saved payment method used by wallet auto top-up.\",\n inputSchema: schemas.WalletAutoTopUpSetPaymentMethodInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WalletAutoTopUpSetPaymentMethodInputSchema>;\n return {\n method: \"PUT\",\n path: \"/v1/protected/wallet/auto-topup/payment-method\",\n body: { paymentMethodId: data.paymentMethodId },\n };\n },\n },\n {\n name: \"qa_wallet_payment_method_list\",\n description: \"List saved payment methods.\",\n inputSchema: schemas.WalletPaymentMethodListInputSchema,\n mapToUpstream: () => {\n return {\n method: \"GET\",\n path: \"/v1/protected/wallet/payment-methods\",\n };\n },\n },\n {\n name: \"qa_wallet_auto_topup_update\",\n description: \"Update wallet auto-topup settings.\",\n inputSchema: schemas.WalletAutoTopUpUpdateInputSchema,\n mapToUpstream: (input) => {\n const data = input as z.infer<typeof schemas.WalletAutoTopUpUpdateInputSchema>;\n return {\n method: \"PUT\",\n path: \"/v1/protected/wallet/auto-topup\",\n body: {\n enabled: data.enabled,\n topUpTriggerTokenThreshold: data.topUpTriggerTokenThreshold,\n packageId: data.packageId,\n },\n };\n },\n },\n];\n\n// =============================================================================\n// Recommendation Tools (No upstream calls)\n// =============================================================================\n\nconst recommendationTools: IQaToolDefinition[] = [\n {\n name: \"qa_recommend_schedule\",\n description: \"Get recommendations for test scheduling based on project needs.\",\n inputSchema: schemas.RecommendScheduleInputSchema,\n requiresAuth: false,\n mapToUpstream: () => {\n throw new Error(\"RECOMMENDATION_ONLY\");\n },\n mapFromUpstream: () => {\n return {\n recommendations: [\n {\n title: \"Nightly Regression Tests\",\n rationale: \"Running tests every night catches regressions quickly.\",\n schedule: \"0 2 * * *\",\n timezone: \"UTC\",\n },\n {\n title: \"On-Demand with Smoke Tests\",\n rationale: \"Run smoke tests on every PR, full regression on merge.\",\n schedule: \"Pull Request trigger + main branch merge\",\n },\n {\n title: \"Continuous Monitoring\",\n rationale: \"Run tests every 4 hours for production monitoring.\",\n schedule: \"0 */4 * * *\",\n },\n ],\n };\n },\n localHandler: async () => {\n return {\n recommendations: [\n {\n title: \"Nightly Regression Tests\",\n rationale: \"Running tests every night catches regressions quickly.\",\n schedule: \"0 2 * * *\",\n timezone: \"UTC\",\n },\n {\n title: \"On-Demand with Smoke Tests\",\n rationale: \"Run smoke tests on every PR, full regression on merge.\",\n schedule: \"Pull Request trigger + main branch merge\",\n },\n {\n title: \"Continuous Monitoring\",\n rationale: \"Run tests every 4 hours for production monitoring.\",\n schedule: \"0 */4 * * *\",\n },\n ],\n };\n },\n },\n {\n name: \"qa_recommend_cicd_setup\",\n description: \"Get recommendations and templates for CI/CD integration.\",\n inputSchema: schemas.RecommendCicdSetupInputSchema,\n requiresAuth: false,\n mapToUpstream: () => {\n throw new Error(\"RECOMMENDATION_ONLY\");\n },\n localHandler: async (input) => {\n const data = input as z.infer<typeof schemas.RecommendCicdSetupInputSchema>;\n const provider = data?.repositoryProvider || \"github\";\n\n const recommendations = [];\n\n if (provider === \"github\" || provider === \"other\") {\n recommendations.push({\n title: \"GitHub Actions Integration\",\n rationale: \"Native GitHub integration with minimal setup.\",\n steps: [\n \"Create .github/workflows/muggle-test.yml\",\n \"Add MUGGLE_AI_API_KEY as a repository secret\",\n \"Configure workflow trigger\",\n ],\n });\n }\n\n if (provider === \"azureDevOps\" || provider === \"other\") {\n recommendations.push({\n title: \"Azure DevOps Pipelines Integration\",\n rationale: \"Native Azure DevOps integration with pipeline triggers.\",\n steps: [\n \"Create azure-pipelines.yml\",\n \"Add MUGGLE_AI_API_KEY to variable group\",\n \"Configure triggers\",\n ],\n });\n }\n\n if (provider === \"gitlab\" || provider === \"other\") {\n recommendations.push({\n title: \"GitLab CI Integration\",\n rationale: \"Native GitLab CI integration with merge request pipelines.\",\n steps: [\n \"Add .gitlab-ci.yml\",\n \"Add MUGGLE_AI_API_KEY as CI/CD variable\",\n \"Configure pipeline rules\",\n ],\n });\n }\n\n return { recommendations: recommendations };\n },\n },\n];\n\n// =============================================================================\n// All Tools Combined\n// =============================================================================\n\n/** All QA tool definitions. */\nexport const allQaToolDefinitions: IQaToolDefinition[] = [\n ...projectTools,\n ...useCaseTools,\n ...testCaseTools,\n ...testScriptTools,\n ...workflowTools,\n ...reportTools,\n ...secretTools,\n ...prdFileTools,\n ...walletTools,\n ...recommendationTools,\n];\n\n/**\n * Get a QA tool definition by name.\n * @param name - Tool name.\n * @returns Tool definition or undefined.\n */\nexport function getQaToolByName(name: string): IQaToolDefinition | undefined {\n return allQaToolDefinitions.find((tool) => tool.name === name);\n}\n\n/**\n * Default response mapper.\n * @param response - Upstream response.\n * @returns Response data.\n */\nfunction defaultResponseMapper(response: IUpstreamResponse): unknown {\n return response.data;\n}\n\n/**\n * Execute a QA tool.\n * @param toolName - Tool name.\n * @param input - Tool input.\n * @param correlationId - Correlation ID.\n * @returns Tool result.\n */\nexport async function executeQaTool(\n toolName: string,\n input: unknown,\n correlationId: string,\n): Promise<IMcpToolResult> {\n const logger = createChildLogger(correlationId);\n const tool = getQaToolByName(toolName);\n\n if (!tool) {\n return {\n content: JSON.stringify({ error: \"NOT_FOUND\", message: `Unknown tool: ${toolName}` }),\n isError: true,\n };\n }\n\n try {\n // Validate input\n const validatedInput = tool.inputSchema.parse(input);\n\n // Check if tool has a local handler\n if (tool.localHandler) {\n const result = await tool.localHandler(validatedInput);\n return {\n content: JSON.stringify(result, null, 2),\n isError: false,\n };\n }\n\n // Get credentials\n const credentials = getCallerCredentials();\n\n // Execute upstream call\n try {\n const upstreamCall = tool.mapToUpstream(validatedInput);\n const client = getPromptServiceClient();\n const response = await client.execute(upstreamCall, credentials, correlationId);\n\n // Map response\n const mapper = tool.mapFromUpstream || defaultResponseMapper;\n const result = mapper(response, validatedInput);\n\n return {\n content: JSON.stringify(result, null, 2),\n isError: false,\n };\n } catch (error) {\n if (error instanceof Error && error.message === \"RECOMMENDATION_ONLY\") {\n // This is a recommendation tool, return static response\n const mapper = tool.mapFromUpstream || defaultResponseMapper;\n const result = mapper({ statusCode: 200, data: {}, headers: {} }, validatedInput);\n return {\n content: JSON.stringify(result, null, 2),\n isError: false,\n };\n }\n throw error;\n }\n } catch (error) {\n if (error instanceof GatewayError) {\n logger.warn(\"Tool call failed with gateway error\", {\n tool: toolName,\n code: error.code,\n message: error.message,\n });\n return {\n content: JSON.stringify({ error: error.code, message: error.message }),\n isError: true,\n };\n }\n\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Tool call failed\", { tool: toolName, error: errorMessage });\n return {\n content: JSON.stringify({ error: \"INTERNAL_ERROR\", message: errorMessage }),\n isError: true,\n };\n }\n}\n","/**\n * Local QA module for the unified MCP package.\n *\n * This module provides local testing capabilities including:\n * - Project management (create, list, update, delete)\n * - Use case management\n * - Test case management\n * - Test script management\n * - Test execution (generation and replay)\n * - Session management\n * - Local secret management\n */\n\nimport type { IMcpTool } from \"../shared/types.js\";\n\nimport { allLocalQaTools } from \"./tools/index.js\";\n\n// Re-export types\nexport * from \"./types/index.js\";\n\n// Re-export contracts\nexport * from \"./contracts/index.js\";\n\n// Re-export services\nexport * from \"./services/index.js\";\n\n// Re-export tools\nexport * from \"./tools/index.js\";\n\n/**\n * Get all local QA tools as IMcpTool instances for registration.\n *\n * Maps the ILocalMcpTool interface to the generic IMcpTool interface\n * used by the unified MCP server.\n *\n * @returns Array of MCP tool definitions.\n */\nexport function getLocalQaTools(): IMcpTool[] {\n return allLocalQaTools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n requiresAuth: !isLocalOnlyTool(tool.name),\n execute: async (params: { input: unknown; correlationId: string }) => {\n const result = await tool.execute({\n input: params.input,\n correlationId: params.correlationId,\n });\n return {\n content: result.content,\n isError: result.isError,\n data: result.data,\n };\n },\n }));\n}\n\n/**\n * Check if a tool is local-only (doesn't require cloud auth).\n *\n * Tools that only interact with local storage don't need authentication.\n */\nfunction isLocalOnlyTool(toolName: string): boolean {\n const localOnlyTools = [\n // Auth tools (handle their own auth)\n \"muggle_auth_status\",\n \"muggle_auth_login\",\n \"muggle_auth_poll\",\n \"muggle_auth_logout\",\n // Status and session tools\n \"muggle_check_status\",\n \"muggle_list_sessions\",\n \"muggle_cleanup_sessions\",\n \"muggle_get_page_state\",\n // Project management (local storage only)\n \"muggle_project_create\",\n \"muggle_project_list\",\n \"muggle_project_get\",\n \"muggle_project_update\",\n \"muggle_project_delete\",\n // Use case management (local storage only)\n \"muggle_use_case_save\",\n \"muggle_use_case_list\",\n \"muggle_use_case_get\",\n \"muggle_use_case_update\",\n \"muggle_use_case_delete\",\n // Test case management (local storage only)\n \"muggle_test_case_save\",\n \"muggle_test_case_list\",\n \"muggle_test_case_get\",\n \"muggle_test_case_update\",\n \"muggle_test_case_delete\",\n // Test script management (local storage only)\n \"muggle_test_script_save\",\n \"muggle_test_script_list\",\n \"muggle_test_script_get\",\n \"muggle_test_script_delete\",\n // Run result management (local storage only)\n \"muggle_run_result_list\",\n \"muggle_run_result_get\",\n // Local secret management\n \"muggle_secret_create\",\n \"muggle_secret_list\",\n \"muggle_secret_get\",\n \"muggle_secret_update\",\n \"muggle_secret_delete\",\n // Workflow file management (local)\n \"muggle_workflow_file_create\",\n \"muggle_workflow_file_list\",\n \"muggle_workflow_file_list_available\",\n \"muggle_workflow_file_get\",\n \"muggle_workflow_file_update\",\n \"muggle_workflow_file_delete\",\n ];\n\n return localOnlyTools.includes(toolName);\n}\n","/**\n * Zod schemas for auth-related tools.\n */\n\nimport { z } from \"zod\";\n\n/**\n * Auth login input schema.\n */\nexport const AuthLoginInputSchema = z.object({\n waitForCompletion: z.boolean().optional().describe(\"Whether to wait for browser login completion before returning. Default: true\"),\n timeoutMs: z.number().int().positive().min(1000).max(900000).optional().describe(\"Maximum time to wait for login completion in milliseconds. Default: 120000\"),\n});\n\nexport type AuthLoginInput = z.infer<typeof AuthLoginInputSchema>;\n\n/**\n * Auth poll input schema.\n */\nexport const AuthPollInputSchema = z.object({\n deviceCode: z.string().optional().describe(\"Device code from the login response. Optional if a login was recently started.\"),\n});\n\nexport type AuthPollInput = z.infer<typeof AuthPollInputSchema>;\n\n/**\n * Empty input schema for tools that take no parameters.\n */\nexport const EmptyInputSchema = z.object({});\n\nexport type EmptyInput = z.infer<typeof EmptyInputSchema>;\n","/**\n * Zod schemas for project-related tools.\n */\n\nimport { z } from \"zod\";\n\n/**\n * Project create input schema.\n */\nexport const ProjectCreateInputSchema = z.object({\n name: z.string().min(1).describe(\"Name of the project\"),\n description: z.string().min(1).describe(\"Description of the project\"),\n url: z.string().url().describe(\"Target URL to test (e.g., http://localhost:3000)\"),\n});\n\nexport type ProjectCreateInput = z.infer<typeof ProjectCreateInputSchema>;\n\n/**\n * Project ID input schema.\n */\nexport const ProjectIdInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n});\n\nexport type ProjectIdInput = z.infer<typeof ProjectIdInputSchema>;\n\n/**\n * Project update input schema.\n */\nexport const ProjectUpdateInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID to update\"),\n name: z.string().min(1).optional().describe(\"New project name\"),\n description: z.string().min(1).optional().describe(\"New project description\"),\n url: z.string().url().optional().describe(\"New target URL\"),\n});\n\nexport type ProjectUpdateInput = z.infer<typeof ProjectUpdateInputSchema>;\n\n/**\n * Use case save input schema.\n */\nexport const UseCaseSaveInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID to save the use case under\"),\n useCase: z.object({\n title: z.string().min(1).describe(\"Use case title\"),\n userStory: z.string().optional().describe(\"User story description\"),\n description: z.string().optional().describe(\"Detailed description\"),\n breakdownItems: z.array(z.object({\n title: z.string(),\n description: z.string(),\n })).optional().describe(\"Breakdown steps\"),\n }).describe(\"Use case data from preview API\"),\n});\n\nexport type UseCaseSaveInput = z.infer<typeof UseCaseSaveInputSchema>;\n\n/**\n * Use case get input schema.\n */\nexport const UseCaseGetInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n useCaseId: z.string().min(1).describe(\"Use case ID to retrieve\"),\n});\n\nexport type UseCaseGetInput = z.infer<typeof UseCaseGetInputSchema>;\n\n/**\n * Use case list input schema.\n */\nexport const UseCaseListInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID to list use cases for\"),\n});\n\nexport type UseCaseListInput = z.infer<typeof UseCaseListInputSchema>;\n\n/**\n * Use case update input schema.\n */\nexport const UseCaseUpdateInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n useCaseId: z.string().min(1).describe(\"Use case ID to update\"),\n title: z.string().min(1).optional().describe(\"Updated use case title\"),\n userStory: z.string().optional().describe(\"Updated user story description\"),\n description: z.string().optional().describe(\"Updated detailed description\"),\n breakdownItems: z.array(z.object({\n title: z.string(),\n description: z.string(),\n })).optional().describe(\"Updated breakdown steps\"),\n});\n\nexport type UseCaseUpdateInput = z.infer<typeof UseCaseUpdateInputSchema>;\n\n/**\n * Use case delete input schema.\n */\nexport const UseCaseDeleteInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n useCaseId: z.string().min(1).describe(\"Use case ID to delete\"),\n});\n\nexport type UseCaseDeleteInput = z.infer<typeof UseCaseDeleteInputSchema>;\n\n/**\n * Test case save input schema.\n */\nexport const TestCaseSaveInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n useCaseId: z.string().min(1).describe(\"Use case ID to save the test case under\"),\n testCase: z.object({\n title: z.string().min(1).describe(\"Test case title\"),\n description: z.string().min(1).describe(\"Test case description\"),\n goal: z.string().min(1).describe(\"Test goal\"),\n precondition: z.string().optional().describe(\"Preconditions required\"),\n instructions: z.string().optional().describe(\"Step-by-step instructions\"),\n expectedResult: z.string().min(1).describe(\"Expected result\"),\n url: z.string().url().describe(\"Target URL for the test\"),\n }).describe(\"Test case data\"),\n});\n\nexport type TestCaseSaveInput = z.infer<typeof TestCaseSaveInputSchema>;\n\n/**\n * Test case get input schema.\n */\nexport const TestCaseGetInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n testCaseId: z.string().min(1).describe(\"Test case ID to retrieve\"),\n});\n\nexport type TestCaseGetInput = z.infer<typeof TestCaseGetInputSchema>;\n\n/**\n * Test case list input schema.\n */\nexport const TestCaseListInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n useCaseId: z.string().optional().describe(\"Optional use case ID to filter by\"),\n});\n\nexport type TestCaseListInput = z.infer<typeof TestCaseListInputSchema>;\n\n/**\n * Test case update input schema.\n */\nexport const TestCaseUpdateInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n testCaseId: z.string().min(1).describe(\"Test case ID to update\"),\n title: z.string().min(1).optional().describe(\"Updated test case title\"),\n description: z.string().optional().describe(\"Updated test case description\"),\n goal: z.string().optional().describe(\"Updated test goal\"),\n precondition: z.string().optional().describe(\"Updated preconditions\"),\n instructions: z.string().optional().describe(\"Updated step-by-step instructions\"),\n expectedResult: z.string().optional().describe(\"Updated expected result\"),\n url: z.string().url().optional().describe(\"Updated target URL for the test\"),\n});\n\nexport type TestCaseUpdateInput = z.infer<typeof TestCaseUpdateInputSchema>;\n\n/**\n * Test case delete input schema.\n */\nexport const TestCaseDeleteInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n testCaseId: z.string().min(1).describe(\"Test case ID to delete\"),\n});\n\nexport type TestCaseDeleteInput = z.infer<typeof TestCaseDeleteInputSchema>;\n\n/**\n * Test script save input schema.\n */\nexport const TestScriptSaveInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n useCaseId: z.string().min(1).describe(\"Use case ID\"),\n testCaseId: z.string().min(1).describe(\"Test case ID the script was generated from\"),\n testScript: z.object({\n name: z.string().min(1).describe(\"Test script name\"),\n url: z.string().url().describe(\"Target URL for the test\"),\n goal: z.string().optional().describe(\"Test goal\"),\n description: z.string().optional().describe(\"Test description\"),\n precondition: z.string().optional().describe(\"Test precondition\"),\n expectedResult: z.string().optional().describe(\"Expected result\"),\n actionScriptId: z.string().optional().describe(\"Firebase action script ID\"),\n actionScript: z.array(z.unknown()).optional().describe(\"Action script steps\"),\n }).describe(\"Test script data\"),\n});\n\nexport type TestScriptSaveInput = z.infer<typeof TestScriptSaveInputSchema>;\n\n/**\n * Test script get input schema.\n */\nexport const TestScriptGetInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n testScriptId: z.string().min(1).describe(\"Test script ID to retrieve\"),\n});\n\nexport type TestScriptGetInput = z.infer<typeof TestScriptGetInputSchema>;\n\n/**\n * Test script list input schema.\n */\nexport const TestScriptListInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n testCaseId: z.string().optional().describe(\"Optional test case ID to filter by\"),\n});\n\nexport type TestScriptListInput = z.infer<typeof TestScriptListInputSchema>;\n\n/**\n * Test script delete input schema.\n */\nexport const TestScriptDeleteInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n testScriptId: z.string().min(1).describe(\"Test script ID to delete\"),\n});\n\nexport type TestScriptDeleteInput = z.infer<typeof TestScriptDeleteInputSchema>;\n\n/**\n * Run result list input schema.\n */\nexport const RunResultListInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n testScriptId: z.string().optional().describe(\"Optional test script ID to filter by\"),\n limit: z.number().int().positive().optional().describe(\"Maximum results to return (default: 20)\"),\n});\n\nexport type RunResultListInput = z.infer<typeof RunResultListInputSchema>;\n\n/**\n * Run result get input schema.\n */\nexport const RunResultGetInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n runId: z.string().min(1).describe(\"Run result ID to retrieve\"),\n});\n\nexport type RunResultGetInput = z.infer<typeof RunResultGetInputSchema>;\n\n/**\n * Execute test generation input schema.\n */\nexport const ExecuteTestGenerationInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID containing the test case\"),\n testCaseId: z.string().min(1).describe(\"Test case ID to generate a test script for\"),\n approveElectronAppLaunch: z.boolean().describe(\"Set to true after the user explicitly approves launching electron-app\"),\n timeoutMs: z.number().int().positive().optional().describe(\"Timeout in milliseconds (default: 300000 = 5 min)\"),\n});\n\nexport type ExecuteTestGenerationInput = z.infer<typeof ExecuteTestGenerationInputSchema>;\n\n/**\n * Execute replay input schema.\n */\nexport const ExecuteReplayInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n testScriptId: z.string().min(1).describe(\"Test script ID to replay\"),\n approveElectronAppLaunch: z.boolean().describe(\"Set to true after the user explicitly approves launching electron-app\"),\n timeoutMs: z.number().int().positive().optional().describe(\"Timeout in milliseconds (default: 180000 = 3 min)\"),\n});\n\nexport type ExecuteReplayInput = z.infer<typeof ExecuteReplayInputSchema>;\n\n/**\n * Cancel execution input schema.\n */\nexport const CancelExecutionInputSchema = z.object({\n runId: z.string().min(1).describe(\"Run ID to cancel\"),\n});\n\nexport type CancelExecutionInput = z.infer<typeof CancelExecutionInputSchema>;\n\n/**\n * Secret create input schema.\n */\nexport const SecretCreateInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n secretName: z.string().min(1).describe(\"Canonical secret name\"),\n value: z.string().min(1).describe(\"Secret value\"),\n description: z.string().min(1).describe(\"Human-readable secret description\"),\n source: z.enum([\"agent\", \"user\"]).optional().describe(\"Secret source\"),\n});\n\nexport type SecretCreateInput = z.infer<typeof SecretCreateInputSchema>;\n\n/**\n * Secret get input schema.\n */\nexport const SecretGetInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n secretId: z.string().min(1).describe(\"Secret ID\"),\n});\n\nexport type SecretGetInput = z.infer<typeof SecretGetInputSchema>;\n\n/**\n * Secret list input schema.\n */\nexport const SecretListInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n});\n\nexport type SecretListInput = z.infer<typeof SecretListInputSchema>;\n\n/**\n * Secret update input schema.\n */\nexport const SecretUpdateInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n secretId: z.string().min(1).describe(\"Secret ID\"),\n secretName: z.string().min(1).optional().describe(\"Updated canonical secret name\"),\n value: z.string().min(1).optional().describe(\"Updated secret value\"),\n description: z.string().min(1).optional().describe(\"Updated human-readable description\"),\n source: z.enum([\"agent\", \"user\"]).optional().describe(\"Updated secret source\"),\n});\n\nexport type SecretUpdateInput = z.infer<typeof SecretUpdateInputSchema>;\n\n/**\n * Secret delete input schema.\n */\nexport const SecretDeleteInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n secretId: z.string().min(1).describe(\"Secret ID\"),\n});\n\nexport type SecretDeleteInput = z.infer<typeof SecretDeleteInputSchema>;\n\n/**\n * Publish project input schema.\n */\nexport const PublishProjectInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Local project ID to publish\"),\n cloudProjectId: z.string().optional().describe(\"Existing cloud project ID to update. If not provided, creates a new project.\"),\n targetUrl: z.string().url().optional().describe(\"Production URL to update the project with\"),\n});\n\nexport type PublishProjectInput = z.infer<typeof PublishProjectInputSchema>;\n\n/**\n * Publish test script input schema.\n */\nexport const PublishTestScriptInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Local project ID\"),\n testScriptId: z.string().min(1).describe(\"Local test script ID to publish\"),\n cloudProjectId: z.string().min(1).describe(\"Cloud project ID where the test script will be published\"),\n cloudUseCaseId: z.string().min(1).describe(\"Cloud use case ID\"),\n cloudTestCaseId: z.string().min(1).describe(\"Cloud test case ID\"),\n});\n\nexport type PublishTestScriptInput = z.infer<typeof PublishTestScriptInputSchema>;\n\n// ========================================\n// Local Workflow File Schemas\n// ========================================\n\n/**\n * Workflow file association schema.\n */\nexport const WorkflowFileAssociationSchema = z.object({\n entityType: z.enum([\"project\", \"use_case\", \"test_case\"]).describe(\"Scope entity type\"),\n entityId: z.string().min(1).describe(\"Scope entity ID\"),\n});\n\n/**\n * Workflow file create input schema.\n */\nexport const WorkflowFileCreateInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n filePath: z.string().min(1).describe(\"Local source file path\"),\n description: z.string().min(1).describe(\"Workflow file description\"),\n tags: z.array(z.string()).optional().describe(\"Workflow file tags\"),\n associations: z.array(WorkflowFileAssociationSchema).optional().describe(\"Workflow file scope associations\"),\n});\n\nexport type WorkflowFileCreateInput = z.infer<typeof WorkflowFileCreateInputSchema>;\n\n/**\n * Workflow file list input schema.\n */\nexport const WorkflowFileListInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n});\n\nexport type WorkflowFileListInput = z.infer<typeof WorkflowFileListInputSchema>;\n\n/**\n * Workflow file list available input schema.\n */\nexport const WorkflowFileListAvailableInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n entityType: z.enum([\"project\", \"use_case\", \"test_case\"]).describe(\"Scope entity type\"),\n entityId: z.string().min(1).describe(\"Scope entity ID\"),\n});\n\nexport type WorkflowFileListAvailableInput = z.infer<typeof WorkflowFileListAvailableInputSchema>;\n\n/**\n * Workflow file get input schema.\n */\nexport const WorkflowFileGetInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n fileId: z.string().min(1).describe(\"Workflow file ID\"),\n});\n\nexport type WorkflowFileGetInput = z.infer<typeof WorkflowFileGetInputSchema>;\n\n/**\n * Workflow file update input schema.\n */\nexport const WorkflowFileUpdateInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n fileId: z.string().min(1).describe(\"Workflow file ID\"),\n description: z.string().min(1).optional().describe(\"Updated workflow file description\"),\n tags: z.array(z.string()).optional().describe(\"Updated workflow file tags\"),\n associations: z.array(WorkflowFileAssociationSchema).optional().describe(\"Updated scope associations\"),\n});\n\nexport type WorkflowFileUpdateInput = z.infer<typeof WorkflowFileUpdateInputSchema>;\n\n/**\n * Workflow file delete input schema.\n */\nexport const WorkflowFileDeleteInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Project ID\"),\n fileId: z.string().min(1).describe(\"Workflow file ID\"),\n});\n\nexport type WorkflowFileDeleteInput = z.infer<typeof WorkflowFileDeleteInputSchema>;\n\n// ========================================\n// Cloud Project Schemas\n// ========================================\n\n/**\n * Cloud project list input schema (empty - uses auth to determine user).\n */\nexport const CloudProjectListInputSchema = z.object({});\n\nexport type CloudProjectListInput = z.infer<typeof CloudProjectListInputSchema>;\n\n/**\n * Cloud pull project input schema.\n */\nexport const CloudPullProjectInputSchema = z.object({\n cloudProjectId: z.string().min(1).describe(\"Cloud project ID to pull\"),\n localUrl: z.string().url().describe(\"Local URL to use for testing (e.g., http://localhost:3000)\"),\n});\n\nexport type CloudPullProjectInput = z.infer<typeof CloudPullProjectInputSchema>;\n\n/**\n * Cloud pull use case input schema.\n */\nexport const CloudPullUseCaseInputSchema = z.object({\n cloudProjectId: z.string().min(1).describe(\"Cloud project ID\"),\n cloudUseCaseId: z.string().min(1).describe(\"Cloud use case ID to pull\"),\n localProjectId: z.string().min(1).describe(\"Local project ID to save under\"),\n localUrl: z.string().url().describe(\"Local URL to use for testing\"),\n});\n\nexport type CloudPullUseCaseInput = z.infer<typeof CloudPullUseCaseInputSchema>;\n\n/**\n * Cloud pull test case input schema.\n */\nexport const CloudPullTestCaseInputSchema = z.object({\n cloudProjectId: z.string().min(1).describe(\"Cloud project ID\"),\n cloudUseCaseId: z.string().min(1).describe(\"Cloud use case ID\"),\n cloudTestCaseId: z.string().min(1).describe(\"Cloud test case ID to pull\"),\n localProjectId: z.string().min(1).describe(\"Local project ID to save under\"),\n localUseCaseId: z.string().min(1).describe(\"Local use case ID to save under\"),\n localUrl: z.string().url().describe(\"Local URL to use for testing\"),\n});\n\nexport type CloudPullTestCaseInput = z.infer<typeof CloudPullTestCaseInputSchema>;\n\n// ========================================\n// Cloud Secret Schemas\n// ========================================\n\n/**\n * Cloud secret create input schema.\n */\nexport const CloudSecretCreateInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Cloud project ID\"),\n secretName: z.string().min(1).describe(\"Canonical secret name\"),\n value: z.string().min(1).describe(\"Secret value\"),\n description: z.string().min(1).describe(\"Secret description\"),\n source: z.enum([\"agent\", \"user\"]).optional().describe(\"Secret source\"),\n});\n\nexport type CloudSecretCreateInput = z.infer<typeof CloudSecretCreateInputSchema>;\n\n/**\n * Cloud secret list input schema.\n */\nexport const CloudSecretListInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Cloud project ID\"),\n});\n\nexport type CloudSecretListInput = z.infer<typeof CloudSecretListInputSchema>;\n\n/**\n * Cloud secret get input schema.\n */\nexport const CloudSecretGetInputSchema = z.object({\n secretId: z.string().min(1).describe(\"Cloud secret ID\"),\n});\n\nexport type CloudSecretGetInput = z.infer<typeof CloudSecretGetInputSchema>;\n\n/**\n * Cloud secret update input schema.\n */\nexport const CloudSecretUpdateInputSchema = z.object({\n secretId: z.string().min(1).describe(\"Cloud secret ID\"),\n projectId: z.string().min(1).describe(\"Cloud project ID\"),\n secretName: z.string().min(1).optional().describe(\"Updated canonical secret name\"),\n value: z.string().min(1).optional().describe(\"Updated secret value\"),\n description: z.string().min(1).optional().describe(\"Updated description\"),\n source: z.enum([\"agent\", \"user\"]).optional().describe(\"Updated secret source\"),\n});\n\nexport type CloudSecretUpdateInput = z.infer<typeof CloudSecretUpdateInputSchema>;\n\n/**\n * Cloud secret delete input schema.\n */\nexport const CloudSecretDeleteInputSchema = z.object({\n secretId: z.string().min(1).describe(\"Cloud secret ID\"),\n});\n\nexport type CloudSecretDeleteInput = z.infer<typeof CloudSecretDeleteInputSchema>;\n\n// ========================================\n// Cloud Workflow File Schemas\n// ========================================\n\n/**\n * Cloud workflow file create input schema.\n */\nexport const CloudWorkflowFileCreateInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Cloud project ID\"),\n filePath: z.string().min(1).describe(\"Local file path to upload\"),\n description: z.string().min(1).describe(\"Workflow file description\"),\n tags: z.array(z.string()).optional().describe(\"Workflow file tags\"),\n associations: z.array(WorkflowFileAssociationSchema).optional().describe(\"Workflow file scope associations\"),\n});\n\nexport type CloudWorkflowFileCreateInput = z.infer<typeof CloudWorkflowFileCreateInputSchema>;\n\n/**\n * Cloud workflow file list input schema.\n */\nexport const CloudWorkflowFileListInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Cloud project ID\"),\n});\n\nexport type CloudWorkflowFileListInput = z.infer<typeof CloudWorkflowFileListInputSchema>;\n\n/**\n * Cloud workflow file list available input schema.\n */\nexport const CloudWorkflowFileListAvailableInputSchema = z.object({\n projectId: z.string().min(1).describe(\"Cloud project ID\"),\n entityType: z.enum([\"project\", \"use_case\", \"test_case\"]).describe(\"Scope entity type\"),\n entityId: z.string().min(1).describe(\"Scope entity ID\"),\n});\n\nexport type CloudWorkflowFileListAvailableInput = z.infer<typeof CloudWorkflowFileListAvailableInputSchema>;\n\n/**\n * Cloud workflow file get input schema.\n */\nexport const CloudWorkflowFileGetInputSchema = z.object({\n fileId: z.string().min(1).describe(\"Cloud workflow file ID\"),\n});\n\nexport type CloudWorkflowFileGetInput = z.infer<typeof CloudWorkflowFileGetInputSchema>;\n\n/**\n * Cloud workflow file update input schema.\n */\nexport const CloudWorkflowFileUpdateInputSchema = z.object({\n fileId: z.string().min(1).describe(\"Cloud workflow file ID\"),\n description: z.string().min(1).optional().describe(\"Updated description\"),\n tags: z.array(z.string()).optional().describe(\"Updated tags\"),\n associations: z.array(WorkflowFileAssociationSchema).optional().describe(\"Updated scope associations\"),\n});\n\nexport type CloudWorkflowFileUpdateInput = z.infer<typeof CloudWorkflowFileUpdateInputSchema>;\n\n/**\n * Cloud workflow file delete input schema.\n */\nexport const CloudWorkflowFileDeleteInputSchema = z.object({\n fileId: z.string().min(1).describe(\"Cloud workflow file ID\"),\n});\n\nexport type CloudWorkflowFileDeleteInput = z.infer<typeof CloudWorkflowFileDeleteInputSchema>;\n\n// ========================================\n// Test Execution Schemas (Web Service Based)\n// ========================================\n\n/**\n * Run test input schema.\n */\nexport const RunTestInputSchema = z.object({\n url: z.string().url().describe(\"Target URL to test (supports localhost)\"),\n instructions: z.string().describe(\"Natural language test instructions\"),\n timeout_ms: z.number().optional().describe(\"Maximum execution time in milliseconds (default: 120000)\"),\n capture_screenshots: z.boolean().optional().describe(\"Whether to capture screenshots during test (default: true)\"),\n});\n\nexport type RunTestInput = z.infer<typeof RunTestInputSchema>;\n\n/**\n * Explore page input schema.\n */\nexport const ExplorePageInputSchema = z.object({\n url: z.string().url().describe(\"Target URL to explore\"),\n analysis_depth: z.enum([\"quick\", \"standard\", \"detailed\"]).optional().describe(\"Depth of page analysis (default: standard)\"),\n});\n\nexport type ExplorePageInput = z.infer<typeof ExplorePageInputSchema>;\n\n/**\n * Execute action input schema.\n */\nexport const ExecuteActionInputSchema = z.object({\n action_type: z.enum([\"click\", \"type\", \"select\", \"scroll\", \"navigate\", \"wait\"]).describe(\"Type of browser action to execute\"),\n target: z.string().optional().describe(\"Element selector or description for click/type/select actions\"),\n value: z.string().optional().describe(\"Text to type or option to select\"),\n url: z.string().url().optional().describe(\"URL to navigate to (for navigate action)\"),\n duration_ms: z.number().optional().describe(\"Wait duration in milliseconds (for wait action)\"),\n});\n\nexport type ExecuteActionInput = z.infer<typeof ExecuteActionInputSchema>;\n\n/**\n * Get screenshot input schema.\n */\nexport const GetScreenshotInputSchema = z.object({\n execution_id: z.string().optional().describe(\"Specific execution ID to capture (uses current if not provided)\"),\n full_page: z.boolean().optional().describe(\"Whether to capture the full scrollable page (default: false)\"),\n});\n\nexport type GetScreenshotInput = z.infer<typeof GetScreenshotInputSchema>;\n\n/**\n * Get page state input schema.\n */\nexport const GetPageStateInputSchema = z.object({\n executionId: z.string().optional().describe(\"Optional execution ID. If not provided, uses the current active execution.\"),\n});\n\nexport type GetPageStateInput = z.infer<typeof GetPageStateInputSchema>;\n","/**\n * Zod schemas for session-related tools.\n */\n\nimport { z } from \"zod\";\n\n/**\n * List sessions input schema.\n */\nexport const ListSessionsInputSchema = z.object({\n limit: z.number().int().positive().optional().describe(\"Maximum number of sessions to return. Defaults to 10.\"),\n});\n\nexport type ListSessionsInput = z.infer<typeof ListSessionsInputSchema>;\n\n/**\n * Cleanup sessions input schema.\n */\nexport const CleanupSessionsInputSchema = z.object({\n max_age_days: z.number().int().min(0).optional().describe(\"Maximum age of sessions to keep (in days). Sessions older than this will be deleted. Defaults to 30.\"),\n});\n\nexport type CleanupSessionsInput = z.infer<typeof CleanupSessionsInputSchema>;\n","/**\n * Enums for local QA module.\n */\n\n/**\n * Device code poll status values.\n */\nexport enum DeviceCodePollStatus {\n /** Authorization is still pending. */\n Pending = \"pending\",\n /** Authorization completed successfully. */\n Complete = \"complete\",\n /** The device code has expired. */\n Expired = \"expired\",\n /** An error occurred during polling. */\n Error = \"error\",\n}\n\n/**\n * Session status values.\n */\nexport enum SessionStatus {\n /** Session is currently running. */\n Running = \"running\",\n /** Session completed successfully. */\n Completed = \"completed\",\n /** Session failed. */\n Failed = \"failed\",\n}\n\n/**\n * Local run status values.\n */\nexport enum LocalRunStatus {\n /** Run is pending execution. */\n PENDING = \"pending\",\n /** Run is currently executing. */\n RUNNING = \"running\",\n /** Run passed successfully. */\n PASSED = \"passed\",\n /** Run failed. */\n FAILED = \"failed\",\n /** Run was cancelled. */\n CANCELLED = \"cancelled\",\n}\n\n/**\n * Local run type values.\n */\nexport enum LocalRunType {\n /** Test script generation run. */\n GENERATION = \"generation\",\n /** Test script replay run. */\n REPLAY = \"replay\",\n}\n\n/**\n * Local test script status values.\n */\nexport enum LocalTestScriptStatus {\n /** Draft test script (not yet generated). */\n DRAFT = \"draft\",\n /** Generated test script. */\n GENERATED = \"generated\",\n /** Validated test script. */\n VALIDATED = \"validated\",\n /** Failed test script. */\n FAILED = \"failed\",\n}\n\n/**\n * Local workflow run status values.\n */\nexport enum LocalWorkflowRunStatus {\n /** Workflow run is pending. */\n PENDING = \"pending\",\n /** Workflow run is currently running. */\n RUNNING = \"running\",\n /** Workflow run completed successfully. */\n COMPLETED = \"completed\",\n /** Workflow run failed. */\n FAILED = \"failed\",\n /** Workflow run was cancelled. */\n CANCELLED = \"cancelled\",\n}\n\n/**\n * Cloud ID mapping entity types.\n */\nexport enum CloudMappingEntityType {\n /** Project entity. */\n PROJECT = \"project\",\n /** Use case entity. */\n USE_CASE = \"use_case\",\n /** Test case entity. */\n TEST_CASE = \"test_case\",\n /** Test script entity. */\n TEST_SCRIPT = \"test_script\",\n}\n\n/**\n * Local workflow file entity types.\n */\nexport enum LocalWorkflowFileEntityType {\n /** Project-level workflow file. */\n PROJECT = \"project\",\n /** Use case-level workflow file. */\n USE_CASE = \"use_case\",\n /** Test case-level workflow file. */\n TEST_CASE = \"test_case\",\n}\n\n/**\n * Execution status values.\n */\nexport enum ExecutionStatus {\n /** Execution is pending. */\n Pending = \"pending\",\n /** Execution is running. */\n Running = \"running\",\n /** Execution completed successfully. */\n Completed = \"completed\",\n /** Execution failed. */\n Failed = \"failed\",\n /** Execution was cancelled. */\n Cancelled = \"cancelled\",\n}\n\n/**\n * Health status values.\n */\nexport enum HealthStatus {\n /** Service is healthy. */\n Healthy = \"healthy\",\n /** Service is degraded. */\n Degraded = \"degraded\",\n /** Service is unhealthy. */\n Unhealthy = \"unhealthy\",\n}\n\n/**\n * Test result status values.\n */\nexport enum TestResultStatus {\n /** Test passed. */\n Passed = \"passed\",\n /** Test failed. */\n Failed = \"failed\",\n /** Test was skipped. */\n Skipped = \"skipped\",\n}\n","/**\n * Auth service for Auth0 authentication in local QA.\n * Supports Device Code flow for user authentication.\n */\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\n\nimport { getConfig } from \"../../shared/config.js\";\nimport { getLogger } from \"../../shared/logger.js\";\nimport { openBrowserUrl } from \"../../shared/open-browser.js\";\nimport type {\n IAuthStatus,\n IDeviceCodePollResult,\n IDeviceCodeResponse,\n IStoredAuth,\n ITokenResponse,\n} from \"../types/index.js\";\nimport { DeviceCodePollStatus } from \"../types/index.js\";\n\n/** Default timeout for waiting on browser login completion. */\nconst DEFAULT_LOGIN_WAIT_TIMEOUT_MS = 120000;\n\n/**\n * Service for handling Auth0 authentication.\n */\nexport class AuthService {\n /** Path to the auth file. */\n private readonly authFilePath: string;\n\n /** Path to the pending device code file. */\n private readonly pendingDeviceCodePath: string;\n\n /**\n * Create a new AuthService.\n */\n constructor() {\n const config = getConfig();\n this.authFilePath = config.localQa.authFilePath;\n this.pendingDeviceCodePath = path.join(\n path.dirname(config.localQa.authFilePath),\n \"pending-device-code.json\",\n );\n }\n\n /**\n * Get current authentication status.\n */\n getAuthStatus(): IAuthStatus {\n const logger = getLogger();\n const storedAuth = this.loadStoredAuth();\n\n if (!storedAuth) {\n logger.debug(\"No stored auth found\");\n return { authenticated: false };\n }\n\n const now = new Date();\n const expiresAt = new Date(storedAuth.expiresAt);\n const isExpired = now >= expiresAt;\n\n logger.debug(\"Auth status checked\", {\n email: storedAuth.email,\n isExpired: isExpired,\n expiresAt: storedAuth.expiresAt,\n });\n\n return {\n authenticated: !isExpired,\n email: storedAuth.email,\n userId: storedAuth.userId,\n expiresAt: storedAuth.expiresAt,\n isExpired: isExpired,\n };\n }\n\n /**\n * Start the device code flow.\n */\n async startDeviceCodeFlow(): Promise<IDeviceCodeResponse> {\n const logger = getLogger();\n const config = getConfig();\n const { domain, clientId, audience, scopes } = config.localQa.auth0;\n\n logger.info(\"Starting device code flow\");\n\n const url = `https://${domain}/oauth/device/code`;\n const body = new URLSearchParams({\n client_id: clientId,\n scope: scopes.join(\" \"),\n audience: audience,\n });\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: body.toString(),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n logger.error(\"Device code request failed\", {\n status: response.status,\n error: errorText,\n });\n throw new Error(`Failed to start device code flow: ${response.status} ${errorText}`);\n }\n\n const data = (await response.json()) as {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete: string;\n expires_in: number;\n interval: number;\n };\n\n logger.info(\"Device code flow started\", {\n userCode: data.user_code,\n verificationUri: data.verification_uri,\n expiresIn: data.expires_in,\n });\n\n this.storePendingDeviceCode({\n deviceCode: data.device_code,\n userCode: data.user_code,\n expiresAt: new Date(Date.now() + data.expires_in * 1000).toISOString(),\n });\n\n const browserOpenResult = await openBrowserUrl({\n url: data.verification_uri_complete,\n });\n\n if (browserOpenResult.opened) {\n logger.info(\"Browser opened for device code login\");\n } else {\n logger.warn(\"Failed to open browser for device code login\", {\n error: browserOpenResult.error,\n verificationUriComplete: data.verification_uri_complete,\n });\n }\n\n return {\n deviceCode: data.device_code,\n userCode: data.user_code,\n verificationUri: data.verification_uri,\n verificationUriComplete: data.verification_uri_complete,\n expiresIn: data.expires_in,\n interval: data.interval,\n browserOpened: browserOpenResult.opened,\n browserOpenError: browserOpenResult.error,\n };\n }\n\n /**\n * Store a pending device code for later retrieval.\n */\n private storePendingDeviceCode(params: {\n deviceCode: string;\n userCode: string;\n expiresAt: string;\n }): void {\n const logger = getLogger();\n\n const dir = path.dirname(this.pendingDeviceCodePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n fs.writeFileSync(this.pendingDeviceCodePath, JSON.stringify(params, null, 2), {\n encoding: \"utf-8\",\n mode: 0o600,\n });\n\n logger.debug(\"Pending device code stored\", { userCode: params.userCode });\n }\n\n /**\n * Get the pending device code if one exists and is not expired.\n */\n getPendingDeviceCode(): string | null {\n const logger = getLogger();\n\n if (!fs.existsSync(this.pendingDeviceCodePath)) {\n logger.debug(\"No pending device code found\");\n return null;\n }\n\n try {\n const content = fs.readFileSync(this.pendingDeviceCodePath, \"utf-8\");\n const data = JSON.parse(content) as {\n deviceCode: string;\n userCode: string;\n expiresAt: string;\n };\n\n const now = new Date();\n const expiresAt = new Date(data.expiresAt);\n\n if (now >= expiresAt) {\n logger.debug(\"Pending device code expired\");\n this.clearPendingDeviceCode();\n return null;\n }\n\n return data.deviceCode;\n } catch (error) {\n logger.warn(\"Failed to read pending device code\", {\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n /**\n * Clear the pending device code file.\n */\n private clearPendingDeviceCode(): void {\n const logger = getLogger();\n\n if (fs.existsSync(this.pendingDeviceCodePath)) {\n try {\n fs.unlinkSync(this.pendingDeviceCodePath);\n logger.debug(\"Pending device code cleared\");\n } catch (error) {\n logger.warn(\"Failed to clear pending device code\", {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n\n /**\n * Poll for device code authorization completion.\n */\n async pollDeviceCode(deviceCode: string): Promise<IDeviceCodePollResult> {\n const logger = getLogger();\n const config = getConfig();\n const { domain, clientId } = config.localQa.auth0;\n\n logger.debug(\"Polling for device code authorization\");\n\n const url = `https://${domain}/oauth/token`;\n const body = new URLSearchParams({\n grant_type: \"urn:ietf:params:oauth:grant-type:device_code\",\n client_id: clientId,\n device_code: deviceCode,\n });\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: body.toString(),\n });\n\n if (response.ok) {\n const tokenData = (await response.json()) as {\n access_token: string;\n refresh_token?: string;\n token_type: string;\n expires_in: number;\n };\n\n const tokenResponse: ITokenResponse = {\n accessToken: tokenData.access_token,\n refreshToken: tokenData.refresh_token,\n tokenType: tokenData.token_type,\n expiresIn: tokenData.expires_in,\n };\n\n const userInfo = await this.getUserInfo(tokenResponse.accessToken);\n\n await this.storeAuth({\n tokenResponse: tokenResponse,\n email: userInfo.email,\n userId: userInfo.sub,\n });\n\n this.clearPendingDeviceCode();\n\n logger.info(\"Device code authorization complete\", { email: userInfo.email });\n\n return {\n status: DeviceCodePollStatus.Complete,\n message: \"Authentication successful!\",\n email: userInfo.email,\n };\n }\n\n const errorData = (await response.json()) as { error: string; error_description?: string };\n\n if (errorData.error === \"authorization_pending\") {\n logger.debug(\"Authorization pending\");\n return {\n status: DeviceCodePollStatus.Pending,\n message: \"Waiting for user to complete authorization...\",\n };\n }\n\n if (errorData.error === \"slow_down\") {\n logger.debug(\"Polling too fast\");\n return {\n status: DeviceCodePollStatus.Pending,\n message: \"Polling too fast, slowing down...\",\n };\n }\n\n if (errorData.error === \"expired_token\") {\n logger.warn(\"Device code expired\");\n return {\n status: DeviceCodePollStatus.Expired,\n message: \"The authorization code has expired. Please start again.\",\n };\n }\n\n if (errorData.error === \"access_denied\") {\n logger.warn(\"Access denied\");\n return {\n status: DeviceCodePollStatus.Error,\n message: \"Access was denied by the user.\",\n error: errorData.error_description ?? errorData.error,\n };\n }\n\n logger.error(\"Unexpected error during polling\", { error: errorData });\n return {\n status: DeviceCodePollStatus.Error,\n message: errorData.error_description ?? errorData.error,\n error: errorData.error,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Poll request failed\", { error: errorMessage });\n return {\n status: DeviceCodePollStatus.Error,\n message: `Poll request failed: ${errorMessage}`,\n error: errorMessage,\n };\n }\n }\n\n /**\n * Poll for device code authorization until completion or timeout.\n */\n async waitForDeviceCodeAuthorization(params: {\n deviceCode: string;\n intervalSeconds: number;\n timeoutMs?: number;\n }): Promise<IDeviceCodePollResult> {\n const logger = getLogger();\n const timeoutMs = params.timeoutMs ?? DEFAULT_LOGIN_WAIT_TIMEOUT_MS;\n const pollIntervalMs = Math.max(params.intervalSeconds, 1) * 1000;\n const startedAt = Date.now();\n\n logger.info(\"Waiting for device code authorization\", {\n timeoutMs: timeoutMs,\n pollIntervalMs: pollIntervalMs,\n });\n\n while (Date.now() - startedAt < timeoutMs) {\n const result = await this.pollDeviceCode(params.deviceCode);\n\n if (result.status !== DeviceCodePollStatus.Pending) {\n return result;\n }\n\n const remainingMs = timeoutMs - (Date.now() - startedAt);\n if (remainingMs <= 0) {\n break;\n }\n\n await sleep({ durationMs: Math.min(pollIntervalMs, remainingMs) });\n }\n\n return {\n status: DeviceCodePollStatus.Pending,\n message:\n \"Timed out waiting for browser login confirmation. Please finish login in your browser, then call `muggle_auth_poll` to continue.\",\n };\n }\n\n /**\n * Get user info from Auth0.\n */\n private async getUserInfo(accessToken: string): Promise<{ email?: string; sub?: string }> {\n const logger = getLogger();\n const config = getConfig();\n const { domain } = config.localQa.auth0;\n\n const url = `https://${domain}/userinfo`;\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n });\n\n if (!response.ok) {\n logger.warn(\"Failed to get user info\", { status: response.status });\n return {};\n }\n\n const data = (await response.json()) as { email?: string; sub?: string };\n return data;\n } catch (error) {\n logger.warn(\"User info request failed\", {\n error: error instanceof Error ? error.message : String(error),\n });\n return {};\n }\n }\n\n /**\n * Store authentication tokens.\n */\n private async storeAuth(params: {\n tokenResponse: ITokenResponse;\n email?: string;\n userId?: string;\n }): Promise<void> {\n const { tokenResponse, email, userId } = params;\n const logger = getLogger();\n\n const expiresAt = new Date(Date.now() + tokenResponse.expiresIn * 1000).toISOString();\n\n const storedAuth: IStoredAuth = {\n accessToken: tokenResponse.accessToken,\n refreshToken: tokenResponse.refreshToken,\n expiresAt: expiresAt,\n email: email,\n userId: userId,\n };\n\n const dir = path.dirname(this.authFilePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n fs.writeFileSync(this.authFilePath, JSON.stringify(storedAuth, null, 2), {\n encoding: \"utf-8\",\n mode: 0o600,\n });\n\n logger.info(\"Auth stored successfully\", { email: email, expiresAt: expiresAt });\n }\n\n /**\n * Load stored authentication.\n */\n loadStoredAuth(): IStoredAuth | null {\n const logger = getLogger();\n\n if (!fs.existsSync(this.authFilePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(this.authFilePath, \"utf-8\");\n return JSON.parse(content) as IStoredAuth;\n } catch (error) {\n logger.error(\"Failed to load stored auth\", {\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n /**\n * Get the current access token (if valid).\n */\n getAccessToken(): string | null {\n const storedAuth = this.loadStoredAuth();\n\n if (!storedAuth) {\n return null;\n }\n\n const now = new Date();\n const expiresAt = new Date(storedAuth.expiresAt);\n\n if (now >= expiresAt) {\n return null;\n }\n\n return storedAuth.accessToken;\n }\n\n /**\n * Clear stored authentication (logout).\n */\n logout(): boolean {\n const logger = getLogger();\n\n if (!fs.existsSync(this.authFilePath)) {\n logger.debug(\"No auth to clear\");\n return false;\n }\n\n try {\n fs.unlinkSync(this.authFilePath);\n logger.info(\"Auth cleared successfully\");\n return true;\n } catch (error) {\n logger.error(\"Failed to clear auth\", {\n error: error instanceof Error ? error.message : String(error),\n });\n return false;\n }\n }\n}\n\n/** Cached service instance. */\nlet serviceInstance: AuthService | null = null;\n\n/**\n * Get the singleton AuthService instance.\n */\nexport function getAuthService(): AuthService {\n serviceInstance ??= new AuthService();\n return serviceInstance;\n}\n\n/**\n * Reset the service (for testing).\n */\nexport function resetAuthService(): void {\n serviceInstance = null;\n}\n\n/**\n * Sleep for the requested duration.\n */\nfunction sleep(params: { durationMs: number }): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, params.durationMs);\n });\n}\n","/**\n * Project storage service for local-first development.\n * Manages local file storage for projects, use cases, test cases, and test scripts.\n */\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { ulid } from \"ulid\";\n\nimport { getConfig } from \"../../shared/config.js\";\nimport { getLogger } from \"../../shared/logger.js\";\nimport type {\n ICloudIdMapping,\n ICreateLocalProjectRequest,\n ICreateLocalTestScriptParams,\n IDeleteLocalSecretParams,\n IDeleteLocalTestCaseParams,\n IDeleteLocalTestScriptParams,\n IDeleteLocalUseCaseParams,\n IDeleteLocalWorkflowFileParams,\n IGetCloudIdMappingParams,\n IGetLocalRunResultParams,\n IGetLocalSecretParams,\n IGetLocalTestCaseParams,\n IGetLocalTestScriptParams,\n IGetLocalTestScriptPathParams,\n IGetLocalUseCaseParams,\n IGetLocalWorkflowFileParams,\n IGetLocalWorkflowRunParams,\n IListLocalTestCasesParams,\n IListLocalTestScriptsParams,\n ILocalProject,\n ILocalRunResult,\n ILocalSecret,\n ILocalTestCase,\n ILocalTestScript,\n ILocalUseCase,\n ILocalWorkflowFile,\n ILocalWorkflowRun,\n IResolveLocalWorkflowFilesParams,\n ISaveCloudIdMappingParams,\n ISaveLocalActionScriptParams,\n ISaveLocalRunScreenshotParams,\n ISaveLocalSecretParams,\n ISaveLocalTestCaseRequest,\n ISaveLocalTestScriptScreenshotParams,\n ISaveLocalUseCaseRequest,\n ISaveLocalWorkflowFileParams,\n IUpdateCloudMappingParams,\n IUpdateLocalProjectRequest,\n IUpdateLocalRunResultParams,\n IUpdateLocalSecretParams,\n IUpdateLocalTestCaseParams,\n IUpdateLocalTestScriptParams,\n IUpdateLocalUseCaseParams,\n IUpdateLocalWorkflowFileParams,\n IUpdateLocalWorkflowRunParams,\n} from \"../types/index.js\";\nimport { LocalTestScriptStatus, LocalWorkflowFileEntityType } from \"../types/index.js\";\n\n/**\n * Service for managing local project storage.\n */\nexport class ProjectStorageService {\n /** Base projects directory. */\n private readonly projectsDir: string;\n\n /**\n * Create a new ProjectStorageService.\n */\n constructor() {\n const config = getConfig();\n this.projectsDir = config.localQa.projectsDir;\n }\n\n /**\n * Ensure the projects directory exists.\n */\n ensureProjectsDirectory(): void {\n const logger = getLogger();\n\n if (!fs.existsSync(this.projectsDir)) {\n fs.mkdirSync(this.projectsDir, { recursive: true });\n logger.info(\"Created projects directory\", { path: this.projectsDir });\n }\n }\n\n /**\n * Generate a new project ID with prefix.\n */\n private generateProjectId(): string {\n return `proj_${ulid()}`;\n }\n\n /**\n * Generate a new use case ID with prefix.\n */\n private generateUseCaseId(): string {\n return `uc_${ulid()}`;\n }\n\n /**\n * Generate a new test case ID with prefix.\n */\n private generateTestCaseId(): string {\n return `tc_${ulid()}`;\n }\n\n /**\n * Generate a new test script ID with prefix.\n */\n private generateTestScriptId(): string {\n return `ts_${ulid()}`;\n }\n\n /**\n * Generate a new run ID with prefix.\n */\n private generateRunId(): string {\n return `run_${ulid()}`;\n }\n\n /**\n * Generate a new secret ID with prefix.\n */\n private generateSecretId(): string {\n return `sec_${ulid()}`;\n }\n\n /**\n * Generate a new workflow file ID with prefix.\n */\n private generateWorkflowFileId(): string {\n return `wf_${ulid()}`;\n }\n\n /**\n * Get the project directory path.\n * @param projectId - Project ID.\n */\n getProjectPath(projectId: string): string {\n return path.join(this.projectsDir, projectId);\n }\n\n /**\n * Get the secrets directory path for a project.\n */\n private getSecretsPath(projectId: string): string {\n return path.join(this.getProjectPath(projectId), \"secrets\");\n }\n\n /**\n * Get the workflow files directory path for a project.\n */\n private getWorkflowFilesPath(projectId: string): string {\n return path.join(this.getProjectPath(projectId), \"workflow-files\");\n }\n\n /**\n * Detect a basic MIME type from filename extension.\n */\n private detectMimeType(filename: string): string {\n const extension = path.extname(filename).toLowerCase();\n const mimeTypes: Record<string, string> = {\n \".csv\": \"text/csv\",\n \".gif\": \"image/gif\",\n \".jpeg\": \"image/jpeg\",\n \".jpg\": \"image/jpeg\",\n \".json\": \"application/json\",\n \".pdf\": \"application/pdf\",\n \".png\": \"image/png\",\n \".txt\": \"text/plain\",\n \".webp\": \"image/webp\",\n \".xml\": \"application/xml\",\n };\n\n return mimeTypes[extension] ?? \"application/octet-stream\";\n }\n\n // ========================================\n // Project Methods\n // ========================================\n\n /**\n * Create a new local project.\n */\n createProject(request: ICreateLocalProjectRequest): ILocalProject {\n const logger = getLogger();\n this.ensureProjectsDirectory();\n\n const projectId = this.generateProjectId();\n const projectDir = this.getProjectPath(projectId);\n const now = Date.now();\n\n const project: ILocalProject = {\n id: projectId,\n name: request.name,\n description: request.description,\n url: request.url,\n originalUrl: request.originalUrl,\n createdAt: now,\n updatedAt: now,\n cloudSource: request.cloudSource,\n };\n\n fs.mkdirSync(projectDir, { recursive: true });\n fs.mkdirSync(path.join(projectDir, \"use-cases\"), { recursive: true });\n fs.mkdirSync(path.join(projectDir, \"test-cases\"), { recursive: true });\n fs.mkdirSync(path.join(projectDir, \"test-scripts\"), { recursive: true });\n fs.mkdirSync(path.join(projectDir, \"secrets\"), { recursive: true });\n fs.mkdirSync(path.join(projectDir, \"workflow-files\"), { recursive: true });\n fs.mkdirSync(path.join(projectDir, \"runs\"), { recursive: true });\n\n const projectFilePath = path.join(projectDir, \"project.json\");\n fs.writeFileSync(projectFilePath, JSON.stringify(project, null, 2), \"utf-8\");\n\n logger.info(\"Created local project\", { projectId: projectId, name: request.name });\n\n return project;\n }\n\n /**\n * Get a project by ID.\n */\n getProject(projectId: string): ILocalProject | null {\n const logger = getLogger();\n const projectFilePath = path.join(this.getProjectPath(projectId), \"project.json\");\n\n if (!fs.existsSync(projectFilePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(projectFilePath, \"utf-8\");\n return JSON.parse(content) as ILocalProject;\n } catch (error) {\n logger.error(\"Failed to load project\", {\n projectId: projectId,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n /**\n * List all local projects.\n */\n listProjects(): ILocalProject[] {\n const logger = getLogger();\n\n if (!fs.existsSync(this.projectsDir)) {\n return [];\n }\n\n const projects: ILocalProject[] = [];\n const entries = fs.readdirSync(this.projectsDir);\n\n for (const entry of entries) {\n const projectPath = path.join(this.projectsDir, entry);\n const projectFilePath = path.join(projectPath, \"project.json\");\n\n if (fs.statSync(projectPath).isDirectory() && fs.existsSync(projectFilePath)) {\n try {\n const content = fs.readFileSync(projectFilePath, \"utf-8\");\n const project = JSON.parse(content) as ILocalProject;\n projects.push(project);\n } catch (error) {\n logger.warn(\"Failed to load project\", {\n path: projectPath,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n\n projects.sort((a, b) => b.updatedAt - a.updatedAt);\n\n return projects;\n }\n\n /**\n * Update a project.\n */\n updateProject(request: IUpdateLocalProjectRequest): ILocalProject {\n const logger = getLogger();\n const existing = this.getProject(request.id);\n\n if (!existing) {\n throw new Error(`Project ${request.id} not found`);\n }\n\n const updated: ILocalProject = {\n ...existing,\n name: request.name ?? existing.name,\n description: request.description ?? existing.description,\n url: request.url ?? existing.url,\n originalUrl: request.originalUrl ?? existing.originalUrl,\n cloudProjectId: request.cloudProjectId ?? existing.cloudProjectId,\n lastPublishedAt: request.lastPublishedAt ?? existing.lastPublishedAt,\n cloudSource: request.cloudSource ?? existing.cloudSource,\n updatedAt: Date.now(),\n };\n\n const projectFilePath = path.join(this.getProjectPath(request.id), \"project.json\");\n fs.writeFileSync(projectFilePath, JSON.stringify(updated, null, 2), \"utf-8\");\n\n logger.info(\"Updated local project\", { projectId: request.id });\n\n return updated;\n }\n\n /**\n * Delete a project and all its contents.\n */\n deleteProject(projectId: string): boolean {\n const logger = getLogger();\n const projectPath = this.getProjectPath(projectId);\n\n if (!fs.existsSync(projectPath)) {\n logger.warn(\"Project not found for deletion\", { projectId: projectId });\n return false;\n }\n\n try {\n fs.rmSync(projectPath, { recursive: true, force: true });\n logger.info(\"Deleted local project\", { projectId: projectId });\n return true;\n } catch (error) {\n logger.error(\"Failed to delete project\", {\n projectId: projectId,\n error: error instanceof Error ? error.message : String(error),\n });\n return false;\n }\n }\n\n // ========================================\n // Secret Methods\n // ========================================\n\n /**\n * Save a local secret.\n */\n saveSecret(params: ISaveLocalSecretParams): ILocalSecret {\n const logger = getLogger();\n const project = this.getProject(params.projectId);\n if (!project) {\n throw new Error(`Project ${params.projectId} not found`);\n }\n\n const existingSecrets = this.listSecrets(params.projectId);\n const duplicateSecret = existingSecrets.find(\n (secret) => secret.secretName === params.secretName,\n );\n if (duplicateSecret) {\n throw new Error(`Secret with name ${params.secretName} already exists`);\n }\n\n const secretId = this.generateSecretId();\n const now = Date.now();\n const secret: ILocalSecret = {\n id: secretId,\n projectId: params.projectId,\n secretName: params.secretName,\n value: params.value,\n description: params.description,\n source: params.source,\n createdAt: now,\n updatedAt: now,\n };\n\n const secretsDir = this.getSecretsPath(params.projectId);\n if (!fs.existsSync(secretsDir)) {\n fs.mkdirSync(secretsDir, { recursive: true });\n }\n\n const secretFilePath = path.join(secretsDir, `${secretId}.json`);\n fs.writeFileSync(secretFilePath, JSON.stringify(secret, null, 2), \"utf-8\");\n logger.info(\"Saved local secret\", { projectId: params.projectId, secretId: secretId });\n return secret;\n }\n\n /**\n * Get a local secret by ID.\n */\n getSecret(params: IGetLocalSecretParams): ILocalSecret | null {\n const logger = getLogger();\n const secretFilePath = path.join(\n this.getSecretsPath(params.projectId),\n `${params.secretId}.json`,\n );\n if (!fs.existsSync(secretFilePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(secretFilePath, \"utf-8\");\n return JSON.parse(content) as ILocalSecret;\n } catch (error) {\n logger.error(\"Failed to load secret\", {\n projectId: params.projectId,\n secretId: params.secretId,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n /**\n * List local secrets for a project.\n */\n listSecrets(projectId: string): ILocalSecret[] {\n const logger = getLogger();\n const secretsDir = this.getSecretsPath(projectId);\n if (!fs.existsSync(secretsDir)) {\n return [];\n }\n\n const secrets: ILocalSecret[] = [];\n const files = fs.readdirSync(secretsDir).filter((file) => file.endsWith(\".json\"));\n for (const file of files) {\n try {\n const content = fs.readFileSync(path.join(secretsDir, file), \"utf-8\");\n secrets.push(JSON.parse(content) as ILocalSecret);\n } catch (error) {\n logger.warn(\"Failed to load secret file\", {\n projectId: projectId,\n file: file,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n secrets.sort((a, b) => b.updatedAt - a.updatedAt);\n return secrets;\n }\n\n /**\n * Update a local secret.\n */\n updateSecret(params: IUpdateLocalSecretParams): ILocalSecret {\n const logger = getLogger();\n const existingSecret = this.getSecret({\n projectId: params.projectId,\n secretId: params.secretId,\n });\n if (!existingSecret) {\n throw new Error(`Secret ${params.secretId} not found`);\n }\n\n const updatedSecret: ILocalSecret = {\n ...existingSecret,\n ...params.updates,\n updatedAt: Date.now(),\n };\n\n const duplicateSecret = this.listSecrets(params.projectId).find(\n (secret) => secret.id !== params.secretId && secret.secretName === updatedSecret.secretName,\n );\n if (duplicateSecret) {\n throw new Error(`Secret with name ${updatedSecret.secretName} already exists`);\n }\n\n const secretFilePath = path.join(\n this.getSecretsPath(params.projectId),\n `${params.secretId}.json`,\n );\n fs.writeFileSync(secretFilePath, JSON.stringify(updatedSecret, null, 2), \"utf-8\");\n logger.info(\"Updated local secret\", { projectId: params.projectId, secretId: params.secretId });\n return updatedSecret;\n }\n\n /**\n * Delete a local secret.\n */\n deleteSecret(params: IDeleteLocalSecretParams): boolean {\n const logger = getLogger();\n const secretFilePath = path.join(\n this.getSecretsPath(params.projectId),\n `${params.secretId}.json`,\n );\n if (!fs.existsSync(secretFilePath)) {\n logger.warn(\"Secret not found for deletion\", {\n projectId: params.projectId,\n secretId: params.secretId,\n });\n return false;\n }\n\n try {\n fs.unlinkSync(secretFilePath);\n logger.info(\"Deleted local secret\", {\n projectId: params.projectId,\n secretId: params.secretId,\n });\n return true;\n } catch (error) {\n logger.error(\"Failed to delete secret\", {\n projectId: params.projectId,\n secretId: params.secretId,\n error: error instanceof Error ? error.message : String(error),\n });\n return false;\n }\n }\n\n // ========================================\n // Workflow File Methods\n // ========================================\n\n /**\n * Save a local workflow file.\n */\n saveWorkflowFile(params: ISaveLocalWorkflowFileParams): ILocalWorkflowFile {\n const logger = getLogger();\n const project = this.getProject(params.projectId);\n if (!project) {\n throw new Error(`Project ${params.projectId} not found`);\n }\n\n if (!fs.existsSync(params.sourceFilePath)) {\n throw new Error(`Workflow file source not found: ${params.sourceFilePath}`);\n }\n\n const fileId = this.generateWorkflowFileId();\n const now = Date.now();\n const filename = path.basename(params.sourceFilePath);\n const workflowFileDir = path.join(this.getWorkflowFilesPath(params.projectId), fileId);\n fs.mkdirSync(workflowFileDir, { recursive: true });\n\n const localPath = path.join(workflowFileDir, filename);\n fs.copyFileSync(params.sourceFilePath, localPath);\n const stats = fs.statSync(localPath);\n const associations = params.associations ?? [];\n const workflowFile: ILocalWorkflowFile = {\n id: fileId,\n projectId: params.projectId,\n filename: filename,\n description: params.description,\n mimeType: this.detectMimeType(filename),\n sizeBytes: stats.size,\n storageUrl: `file://${localPath}`,\n tags: params.tags ?? [],\n localPath: localPath,\n associations: associations,\n createdAt: now,\n updatedAt: now,\n };\n\n const metadataPath = path.join(workflowFileDir, \"metadata.json\");\n fs.writeFileSync(metadataPath, JSON.stringify(workflowFile, null, 2), \"utf-8\");\n logger.info(\"Saved local workflow file\", {\n projectId: params.projectId,\n fileId: fileId,\n filename: filename,\n });\n return workflowFile;\n }\n\n /**\n * Get a local workflow file by ID.\n */\n getWorkflowFile(params: IGetLocalWorkflowFileParams): ILocalWorkflowFile | null {\n const logger = getLogger();\n const metadataPath = path.join(\n this.getWorkflowFilesPath(params.projectId),\n params.fileId,\n \"metadata.json\",\n );\n if (!fs.existsSync(metadataPath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(metadataPath, \"utf-8\");\n return JSON.parse(content) as ILocalWorkflowFile;\n } catch (error) {\n logger.error(\"Failed to load workflow file\", {\n projectId: params.projectId,\n fileId: params.fileId,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n /**\n * List local workflow files for a project.\n */\n listWorkflowFiles(projectId: string): ILocalWorkflowFile[] {\n const logger = getLogger();\n const workflowFilesDir = this.getWorkflowFilesPath(projectId);\n if (!fs.existsSync(workflowFilesDir)) {\n return [];\n }\n\n const workflowFiles: ILocalWorkflowFile[] = [];\n const entries = fs.readdirSync(workflowFilesDir);\n for (const entry of entries) {\n const metadataPath = path.join(workflowFilesDir, entry, \"metadata.json\");\n if (!fs.existsSync(metadataPath)) {\n continue;\n }\n\n try {\n const content = fs.readFileSync(metadataPath, \"utf-8\");\n workflowFiles.push(JSON.parse(content) as ILocalWorkflowFile);\n } catch (error) {\n logger.warn(\"Failed to load workflow file metadata\", {\n projectId: projectId,\n entry: entry,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n workflowFiles.sort((a, b) => b.updatedAt - a.updatedAt);\n return workflowFiles;\n }\n\n /**\n * Update workflow file metadata.\n */\n updateWorkflowFile(params: IUpdateLocalWorkflowFileParams): ILocalWorkflowFile {\n const logger = getLogger();\n const existingFile = this.getWorkflowFile({\n projectId: params.projectId,\n fileId: params.fileId,\n });\n if (!existingFile) {\n throw new Error(`Workflow file ${params.fileId} not found`);\n }\n\n const updatedFile: ILocalWorkflowFile = {\n ...existingFile,\n ...params.updates,\n updatedAt: Date.now(),\n };\n\n const metadataPath = path.join(\n this.getWorkflowFilesPath(params.projectId),\n params.fileId,\n \"metadata.json\",\n );\n fs.writeFileSync(metadataPath, JSON.stringify(updatedFile, null, 2), \"utf-8\");\n logger.info(\"Updated local workflow file\", {\n projectId: params.projectId,\n fileId: params.fileId,\n });\n return updatedFile;\n }\n\n /**\n * Delete a local workflow file.\n */\n deleteWorkflowFile(params: IDeleteLocalWorkflowFileParams): boolean {\n const logger = getLogger();\n const workflowFileDir = path.join(this.getWorkflowFilesPath(params.projectId), params.fileId);\n if (!fs.existsSync(workflowFileDir)) {\n logger.warn(\"Workflow file not found for deletion\", {\n projectId: params.projectId,\n fileId: params.fileId,\n });\n return false;\n }\n\n try {\n fs.rmSync(workflowFileDir, { recursive: true, force: true });\n logger.info(\"Deleted local workflow file\", {\n projectId: params.projectId,\n fileId: params.fileId,\n });\n return true;\n } catch (error) {\n logger.error(\"Failed to delete workflow file\", {\n projectId: params.projectId,\n fileId: params.fileId,\n error: error instanceof Error ? error.message : String(error),\n });\n return false;\n }\n }\n\n /**\n * Resolve workflow files available for execution.\n */\n resolveWorkflowFilesForExecution(params: IResolveLocalWorkflowFilesParams): ILocalWorkflowFile[] {\n const workflowFiles = this.listWorkflowFiles(params.projectId);\n return workflowFiles.filter((workflowFile) => {\n if (!workflowFile.associations || workflowFile.associations.length === 0) {\n return true;\n }\n\n if (params.testCaseId) {\n const matchesTestCase = workflowFile.associations.some(\n (association) =>\n association.entityType === LocalWorkflowFileEntityType.TEST_CASE &&\n association.entityId === params.testCaseId,\n );\n if (matchesTestCase) {\n return true;\n }\n }\n\n if (params.useCaseId) {\n return workflowFile.associations.some(\n (association) =>\n association.entityType === LocalWorkflowFileEntityType.USE_CASE &&\n association.entityId === params.useCaseId,\n );\n }\n\n return false;\n });\n }\n\n // ========================================\n // Use Case Methods\n // ========================================\n\n /**\n * Save a use case.\n */\n saveUseCase(request: ISaveLocalUseCaseRequest): ILocalUseCase {\n const logger = getLogger();\n const project = this.getProject(request.projectId);\n\n if (!project) {\n throw new Error(`Project ${request.projectId} not found`);\n }\n\n const useCaseId = this.generateUseCaseId();\n const now = Date.now();\n\n const useCase: ILocalUseCase = {\n id: useCaseId,\n projectId: request.projectId,\n title: request.title,\n userStory: request.userStory,\n description: request.description,\n breakdownItems: request.breakdownItems,\n originalUrl: request.originalUrl,\n createdAt: now,\n updatedAt: now,\n cloudSource: request.cloudSource,\n };\n\n const useCasesDir = path.join(this.getProjectPath(request.projectId), \"use-cases\");\n if (!fs.existsSync(useCasesDir)) {\n fs.mkdirSync(useCasesDir, { recursive: true });\n }\n\n const useCaseFilePath = path.join(useCasesDir, `${useCaseId}.json`);\n fs.writeFileSync(useCaseFilePath, JSON.stringify(useCase, null, 2), \"utf-8\");\n\n logger.info(\"Saved local use case\", { useCaseId: useCaseId, projectId: request.projectId });\n\n return useCase;\n }\n\n /**\n * Get a use case by ID.\n */\n getUseCase(params: IGetLocalUseCaseParams): ILocalUseCase | null {\n const logger = getLogger();\n const useCaseFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"use-cases\",\n `${params.useCaseId}.json`,\n );\n\n if (!fs.existsSync(useCaseFilePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(useCaseFilePath, \"utf-8\");\n return JSON.parse(content) as ILocalUseCase;\n } catch (error) {\n logger.error(\"Failed to load use case\", {\n useCaseId: params.useCaseId,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n /**\n * List use cases for a project.\n */\n listUseCases(projectId: string): ILocalUseCase[] {\n const logger = getLogger();\n const useCasesDir = path.join(this.getProjectPath(projectId), \"use-cases\");\n\n if (!fs.existsSync(useCasesDir)) {\n return [];\n }\n\n const useCases: ILocalUseCase[] = [];\n const files = fs.readdirSync(useCasesDir).filter((f) => f.endsWith(\".json\"));\n\n for (const file of files) {\n try {\n const content = fs.readFileSync(path.join(useCasesDir, file), \"utf-8\");\n const useCase = JSON.parse(content) as ILocalUseCase;\n useCases.push(useCase);\n } catch (error) {\n logger.warn(\"Failed to load use case file\", {\n file: file,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n useCases.sort((a, b) => b.updatedAt - a.updatedAt);\n\n return useCases;\n }\n\n /**\n * Update a use case.\n */\n updateUseCase(params: IUpdateLocalUseCaseParams): ILocalUseCase {\n const logger = getLogger();\n const existing = this.getUseCase({\n projectId: params.projectId,\n useCaseId: params.useCaseId,\n });\n\n if (!existing) {\n throw new Error(`Use case ${params.useCaseId} not found`);\n }\n\n const updated: ILocalUseCase = {\n ...existing,\n ...params.updates,\n updatedAt: Date.now(),\n };\n\n const useCaseFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"use-cases\",\n `${params.useCaseId}.json`,\n );\n fs.writeFileSync(useCaseFilePath, JSON.stringify(updated, null, 2), \"utf-8\");\n\n logger.info(\"Updated local use case\", { useCaseId: params.useCaseId });\n\n return updated;\n }\n\n /**\n * Delete a use case.\n */\n deleteUseCase(params: IDeleteLocalUseCaseParams): boolean {\n const logger = getLogger();\n const useCaseFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"use-cases\",\n `${params.useCaseId}.json`,\n );\n\n if (!fs.existsSync(useCaseFilePath)) {\n logger.warn(\"Use case not found for deletion\", { useCaseId: params.useCaseId });\n return false;\n }\n\n try {\n fs.unlinkSync(useCaseFilePath);\n logger.info(\"Deleted local use case\", { useCaseId: params.useCaseId });\n return true;\n } catch (error) {\n logger.error(\"Failed to delete use case\", {\n useCaseId: params.useCaseId,\n error: error instanceof Error ? error.message : String(error),\n });\n return false;\n }\n }\n\n // ========================================\n // Test Case Methods\n // ========================================\n\n /**\n * Save a test case.\n */\n saveTestCase(request: ISaveLocalTestCaseRequest): ILocalTestCase {\n const logger = getLogger();\n const project = this.getProject(request.projectId);\n\n if (!project) {\n throw new Error(`Project ${request.projectId} not found`);\n }\n\n const useCase = this.getUseCase({\n projectId: request.projectId,\n useCaseId: request.useCaseId,\n });\n\n if (!useCase) {\n throw new Error(`Use case ${request.useCaseId} not found`);\n }\n\n const testCaseId = this.generateTestCaseId();\n const now = Date.now();\n\n const testCase: ILocalTestCase = {\n id: testCaseId,\n projectId: request.projectId,\n useCaseId: request.useCaseId,\n title: request.title,\n description: request.description,\n goal: request.goal,\n precondition: request.precondition,\n instructions: request.instructions,\n expectedResult: request.expectedResult,\n url: request.url,\n originalUrl: request.originalUrl,\n createdAt: now,\n updatedAt: now,\n cloudSource: request.cloudSource,\n };\n\n const testCasesDir = path.join(this.getProjectPath(request.projectId), \"test-cases\");\n if (!fs.existsSync(testCasesDir)) {\n fs.mkdirSync(testCasesDir, { recursive: true });\n }\n\n const testCaseFilePath = path.join(testCasesDir, `${testCaseId}.json`);\n fs.writeFileSync(testCaseFilePath, JSON.stringify(testCase, null, 2), \"utf-8\");\n\n logger.info(\"Saved local test case\", {\n testCaseId: testCaseId,\n useCaseId: request.useCaseId,\n });\n\n return testCase;\n }\n\n /**\n * Get a test case by ID.\n */\n getTestCase(params: IGetLocalTestCaseParams): ILocalTestCase | null {\n const logger = getLogger();\n const testCaseFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"test-cases\",\n `${params.testCaseId}.json`,\n );\n\n if (!fs.existsSync(testCaseFilePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(testCaseFilePath, \"utf-8\");\n return JSON.parse(content) as ILocalTestCase;\n } catch (error) {\n logger.error(\"Failed to load test case\", {\n testCaseId: params.testCaseId,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n /**\n * List test cases.\n */\n listTestCases(params: IListLocalTestCasesParams): ILocalTestCase[] {\n const logger = getLogger();\n const testCasesDir = path.join(this.getProjectPath(params.projectId), \"test-cases\");\n\n if (!fs.existsSync(testCasesDir)) {\n return [];\n }\n\n const testCases: ILocalTestCase[] = [];\n const files = fs.readdirSync(testCasesDir).filter((f) => f.endsWith(\".json\"));\n\n for (const file of files) {\n try {\n const content = fs.readFileSync(path.join(testCasesDir, file), \"utf-8\");\n const testCase = JSON.parse(content) as ILocalTestCase;\n\n if (!params.useCaseId || testCase.useCaseId === params.useCaseId) {\n testCases.push(testCase);\n }\n } catch (error) {\n logger.warn(\"Failed to load test case file\", {\n file: file,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n testCases.sort((a, b) => b.updatedAt - a.updatedAt);\n\n return testCases;\n }\n\n /**\n * Update a test case.\n */\n updateTestCase(params: IUpdateLocalTestCaseParams): ILocalTestCase {\n const logger = getLogger();\n const existing = this.getTestCase({\n projectId: params.projectId,\n testCaseId: params.testCaseId,\n });\n\n if (!existing) {\n throw new Error(`Test case ${params.testCaseId} not found`);\n }\n\n const updated: ILocalTestCase = {\n ...existing,\n ...params.updates,\n updatedAt: Date.now(),\n };\n\n const testCaseFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"test-cases\",\n `${params.testCaseId}.json`,\n );\n fs.writeFileSync(testCaseFilePath, JSON.stringify(updated, null, 2), \"utf-8\");\n\n logger.info(\"Updated local test case\", { testCaseId: params.testCaseId });\n\n return updated;\n }\n\n /**\n * Delete a test case.\n */\n deleteTestCase(params: IDeleteLocalTestCaseParams): boolean {\n const logger = getLogger();\n const testCaseFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"test-cases\",\n `${params.testCaseId}.json`,\n );\n\n if (!fs.existsSync(testCaseFilePath)) {\n logger.warn(\"Test case not found for deletion\", { testCaseId: params.testCaseId });\n return false;\n }\n\n try {\n fs.unlinkSync(testCaseFilePath);\n logger.info(\"Deleted local test case\", { testCaseId: params.testCaseId });\n return true;\n } catch (error) {\n logger.error(\"Failed to delete test case\", {\n testCaseId: params.testCaseId,\n error: error instanceof Error ? error.message : String(error),\n });\n return false;\n }\n }\n\n // ========================================\n // Test Script Methods\n // ========================================\n\n /**\n * Create a test script entry.\n */\n createTestScript(params: ICreateLocalTestScriptParams): ILocalTestScript {\n const logger = getLogger();\n const testScriptId = params.testScriptId ?? this.generateTestScriptId();\n const now = Date.now();\n const testScriptDir = path.join(\n this.getProjectPath(params.projectId),\n \"test-scripts\",\n testScriptId,\n );\n\n if (fs.existsSync(testScriptDir)) {\n throw new Error(`Test script already exists: ${testScriptId}`);\n }\n\n const testScript: ILocalTestScript = {\n id: testScriptId,\n projectId: params.projectId,\n useCaseId: params.useCaseId,\n testCaseId: params.testCaseId,\n name: params.name ?? `Test Script for ${params.testCaseId}`,\n url: params.url,\n status: LocalTestScriptStatus.DRAFT,\n createdAt: now,\n updatedAt: now,\n };\n\n fs.mkdirSync(testScriptDir, { recursive: true });\n fs.mkdirSync(path.join(testScriptDir, \"screenshots\"), { recursive: true });\n\n const testScriptFilePath = path.join(testScriptDir, \"script.json\");\n fs.writeFileSync(testScriptFilePath, JSON.stringify(testScript, null, 2), \"utf-8\");\n\n logger.info(\"Created local test script\", {\n testScriptId: testScriptId,\n testCaseId: params.testCaseId,\n });\n\n return testScript;\n }\n\n /**\n * Get a test script by ID.\n */\n getTestScript(params: IGetLocalTestScriptParams): ILocalTestScript | null {\n const logger = getLogger();\n const testScriptFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"test-scripts\",\n params.testScriptId,\n \"script.json\",\n );\n\n if (!fs.existsSync(testScriptFilePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(testScriptFilePath, \"utf-8\");\n return JSON.parse(content) as ILocalTestScript;\n } catch (error) {\n logger.error(\"Failed to load test script\", {\n testScriptId: params.testScriptId,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n /**\n * List test scripts for a project.\n */\n listTestScripts(params: IListLocalTestScriptsParams): ILocalTestScript[] {\n const logger = getLogger();\n const testScriptsDir = path.join(this.getProjectPath(params.projectId), \"test-scripts\");\n\n if (!fs.existsSync(testScriptsDir)) {\n return [];\n }\n\n const testScripts: ILocalTestScript[] = [];\n const entries = fs.readdirSync(testScriptsDir);\n\n for (const entry of entries) {\n const entryPath = path.join(testScriptsDir, entry);\n const scriptFilePath = path.join(entryPath, \"script.json\");\n\n if (fs.statSync(entryPath).isDirectory() && fs.existsSync(scriptFilePath)) {\n try {\n const content = fs.readFileSync(scriptFilePath, \"utf-8\");\n const testScript = JSON.parse(content) as ILocalTestScript;\n\n if (!params.testCaseId || testScript.testCaseId === params.testCaseId) {\n testScripts.push(testScript);\n }\n } catch (error) {\n logger.warn(\"Failed to load test script\", {\n path: scriptFilePath,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n\n testScripts.sort((a, b) => b.updatedAt - a.updatedAt);\n\n return testScripts;\n }\n\n /**\n * Delete a test script.\n */\n deleteTestScript(params: IDeleteLocalTestScriptParams): boolean {\n const logger = getLogger();\n const testScriptDir = path.join(\n this.getProjectPath(params.projectId),\n \"test-scripts\",\n params.testScriptId,\n );\n\n if (!fs.existsSync(testScriptDir)) {\n return false;\n }\n\n fs.rmSync(testScriptDir, { recursive: true, force: true });\n\n logger.info(\"Deleted local test script\", { testScriptId: params.testScriptId });\n\n return true;\n }\n\n /**\n * Update a test script.\n */\n updateTestScript(params: IUpdateLocalTestScriptParams): ILocalTestScript {\n const logger = getLogger();\n const existing = this.getTestScript({\n projectId: params.projectId,\n testScriptId: params.testScriptId,\n });\n\n if (!existing) {\n throw new Error(`Test script ${params.testScriptId} not found`);\n }\n\n const updated: ILocalTestScript = {\n ...existing,\n ...params.updates,\n updatedAt: Date.now(),\n };\n\n const testScriptFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"test-scripts\",\n params.testScriptId,\n \"script.json\",\n );\n fs.writeFileSync(testScriptFilePath, JSON.stringify(updated, null, 2), \"utf-8\");\n\n logger.info(\"Updated local test script\", { testScriptId: params.testScriptId });\n\n return updated;\n }\n\n /**\n * Get the test script directory path.\n */\n getTestScriptPath(params: IGetLocalTestScriptPathParams): string {\n return path.join(this.getProjectPath(params.projectId), \"test-scripts\", params.testScriptId);\n }\n\n /**\n * Save action script to test script directory.\n */\n saveActionScript(params: ISaveLocalActionScriptParams): string {\n const logger = getLogger();\n const testScriptDir = this.getTestScriptPath({\n projectId: params.projectId,\n testScriptId: params.testScriptId,\n });\n\n const actionScriptPath = path.join(testScriptDir, \"action-script.json\");\n fs.writeFileSync(actionScriptPath, JSON.stringify(params.actionScript, null, 2), \"utf-8\");\n\n logger.info(\"Saved action script\", { testScriptId: params.testScriptId });\n\n return actionScriptPath;\n }\n\n /**\n * Save screenshot to test script directory.\n */\n saveTestScriptScreenshot(params: ISaveLocalTestScriptScreenshotParams): string {\n const logger = getLogger();\n const screenshotDir = path.join(\n this.getTestScriptPath({\n projectId: params.projectId,\n testScriptId: params.testScriptId,\n }),\n \"screenshots\",\n );\n\n if (!fs.existsSync(screenshotDir)) {\n fs.mkdirSync(screenshotDir, { recursive: true });\n }\n\n const screenshotPath = path.join(screenshotDir, params.filename);\n fs.writeFileSync(screenshotPath, params.data);\n\n logger.debug(\"Saved test script screenshot\", {\n testScriptId: params.testScriptId,\n filename: params.filename,\n });\n\n return screenshotPath;\n }\n\n // ========================================\n // Run Result Methods\n // ========================================\n\n /**\n * Create a run result entry.\n */\n createRunResult(runResult: ILocalRunResult): ILocalRunResult {\n const logger = getLogger();\n const runDir = path.join(this.getProjectPath(runResult.projectId), \"runs\", runResult.id);\n\n fs.mkdirSync(runDir, { recursive: true });\n fs.mkdirSync(path.join(runDir, \"screenshots\"), { recursive: true });\n\n const runFilePath = path.join(runDir, \"result.json\");\n fs.writeFileSync(runFilePath, JSON.stringify(runResult, null, 2), \"utf-8\");\n\n logger.info(\"Created local run result\", { runId: runResult.id });\n\n return runResult;\n }\n\n /**\n * List run results for a project.\n */\n listRunResults(projectId: string): ILocalRunResult[] {\n const logger = getLogger();\n const runsDir = path.join(this.getProjectPath(projectId), \"runs\");\n\n if (!fs.existsSync(runsDir)) {\n return [];\n }\n\n const runResults: ILocalRunResult[] = [];\n const entries = fs.readdirSync(runsDir);\n\n for (const entry of entries) {\n const entryPath = path.join(runsDir, entry);\n const resultFilePath = path.join(entryPath, \"result.json\");\n\n if (fs.statSync(entryPath).isDirectory() && fs.existsSync(resultFilePath)) {\n try {\n const content = fs.readFileSync(resultFilePath, \"utf-8\");\n const runResult = JSON.parse(content) as ILocalRunResult;\n runResults.push(runResult);\n } catch (error) {\n logger.warn(\"Failed to load run result\", {\n path: resultFilePath,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n\n return runResults;\n }\n\n /**\n * Get a run result by ID.\n */\n getRunResult(params: IGetLocalRunResultParams): ILocalRunResult | null {\n const logger = getLogger();\n const runFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"runs\",\n params.runId,\n \"result.json\",\n );\n\n if (!fs.existsSync(runFilePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(runFilePath, \"utf-8\");\n return JSON.parse(content) as ILocalRunResult;\n } catch (error) {\n logger.error(\"Failed to load run result\", {\n runId: params.runId,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n /**\n * Update a run result.\n */\n updateRunResult(params: IUpdateLocalRunResultParams): ILocalRunResult {\n const logger = getLogger();\n const existing = this.getRunResult({\n projectId: params.projectId,\n runId: params.runId,\n });\n\n if (!existing) {\n throw new Error(`Run ${params.runId} not found`);\n }\n\n const updated: ILocalRunResult = {\n ...existing,\n ...params.updates,\n };\n\n const runFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"runs\",\n params.runId,\n \"result.json\",\n );\n fs.writeFileSync(runFilePath, JSON.stringify(updated, null, 2), \"utf-8\");\n\n logger.info(\"Updated local run result\", { runId: params.runId });\n\n return updated;\n }\n\n /**\n * Save screenshot to run directory.\n */\n saveRunScreenshot(params: ISaveLocalRunScreenshotParams): string {\n const logger = getLogger();\n const screenshotDir = path.join(\n this.getProjectPath(params.projectId),\n \"runs\",\n params.runId,\n \"screenshots\",\n );\n\n if (!fs.existsSync(screenshotDir)) {\n fs.mkdirSync(screenshotDir, { recursive: true });\n }\n\n const screenshotPath = path.join(screenshotDir, params.filename);\n fs.writeFileSync(screenshotPath, params.data);\n\n logger.debug(\"Saved run screenshot\", {\n runId: params.runId,\n filename: params.filename,\n });\n\n return screenshotPath;\n }\n\n // ========================================\n // Workflow Run Methods\n // ========================================\n\n /**\n * Create a workflow run entry.\n */\n createWorkflowRun(workflowRun: ILocalWorkflowRun): ILocalWorkflowRun {\n const logger = getLogger();\n const workflowRunsDir = path.join(this.getProjectPath(workflowRun.projectId), \"workflow-runs\");\n\n fs.mkdirSync(workflowRunsDir, { recursive: true });\n\n const workflowRunFilePath = path.join(workflowRunsDir, `${workflowRun.id}.json`);\n fs.writeFileSync(workflowRunFilePath, JSON.stringify(workflowRun, null, 2), \"utf-8\");\n\n logger.info(\"Created local workflow run\", {\n workflowRunId: workflowRun.id,\n projectId: workflowRun.projectId,\n });\n\n return workflowRun;\n }\n\n /**\n * Get a workflow run by ID.\n */\n getWorkflowRun(params: IGetLocalWorkflowRunParams): ILocalWorkflowRun | null {\n const logger = getLogger();\n const workflowRunFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"workflow-runs\",\n `${params.workflowRunId}.json`,\n );\n\n if (!fs.existsSync(workflowRunFilePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(workflowRunFilePath, \"utf-8\");\n return JSON.parse(content) as ILocalWorkflowRun;\n } catch (error) {\n logger.error(\"Failed to load workflow run\", {\n workflowRunId: params.workflowRunId,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n /**\n * Update a workflow run.\n */\n updateWorkflowRun(params: IUpdateLocalWorkflowRunParams): ILocalWorkflowRun {\n const logger = getLogger();\n const existing = this.getWorkflowRun({\n projectId: params.projectId,\n workflowRunId: params.workflowRunId,\n });\n\n if (!existing) {\n throw new Error(`Workflow run ${params.workflowRunId} not found`);\n }\n\n const updated: ILocalWorkflowRun = {\n ...existing,\n ...params.updates,\n };\n\n const workflowRunFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"workflow-runs\",\n `${params.workflowRunId}.json`,\n );\n fs.writeFileSync(workflowRunFilePath, JSON.stringify(updated, null, 2), \"utf-8\");\n\n logger.info(\"Updated local workflow run\", { workflowRunId: params.workflowRunId });\n\n return updated;\n }\n\n // ========================================\n // Cloud ID Mapping Methods\n // ========================================\n\n /**\n * Update cloud ID mapping.\n */\n updateCloudMapping(params: IUpdateCloudMappingParams): void {\n const logger = getLogger();\n const mappingsDir = path.join(this.projectsDir, \"_mappings\");\n\n if (!fs.existsSync(mappingsDir)) {\n fs.mkdirSync(mappingsDir, { recursive: true });\n }\n\n const mappingsFilePath = path.join(mappingsDir, \"cloud-id-mappings.json\");\n let mappings: Array<{ localId: string; cloudId: string; entityType: string }> = [];\n\n if (fs.existsSync(mappingsFilePath)) {\n try {\n const content = fs.readFileSync(mappingsFilePath, \"utf-8\");\n mappings = JSON.parse(content);\n } catch {\n mappings = [];\n }\n }\n\n const existingIndex = mappings.findIndex(\n (m) => m.localId === params.localId && m.entityType === params.entityType,\n );\n\n if (existingIndex >= 0) {\n mappings[existingIndex] = {\n localId: params.localId,\n cloudId: params.cloudId,\n entityType: params.entityType,\n };\n } else {\n mappings.push({\n localId: params.localId,\n cloudId: params.cloudId,\n entityType: params.entityType,\n });\n }\n\n fs.writeFileSync(mappingsFilePath, JSON.stringify(mappings, null, 2), \"utf-8\");\n\n logger.debug(\"Updated cloud ID mapping\", {\n localId: params.localId,\n cloudId: params.cloudId,\n entityType: params.entityType,\n });\n }\n\n /**\n * Save cloud ID mapping.\n */\n saveCloudIdMapping(params: ISaveCloudIdMappingParams): void {\n const logger = getLogger();\n const mappingsDir = path.join(this.getProjectPath(params.projectId), \"mappings\");\n\n if (!fs.existsSync(mappingsDir)) {\n fs.mkdirSync(mappingsDir, { recursive: true });\n }\n\n const mappingsFilePath = path.join(mappingsDir, \"cloud-id-mappings.json\");\n let mappings: ICloudIdMapping[] = [];\n\n if (fs.existsSync(mappingsFilePath)) {\n try {\n const content = fs.readFileSync(mappingsFilePath, \"utf-8\");\n mappings = JSON.parse(content) as ICloudIdMapping[];\n } catch {\n mappings = [];\n }\n }\n\n const existingIndex = mappings.findIndex(\n (m) => m.localId === params.mapping.localId && m.entityType === params.mapping.entityType,\n );\n\n if (existingIndex >= 0) {\n mappings[existingIndex] = params.mapping;\n } else {\n mappings.push(params.mapping);\n }\n\n fs.writeFileSync(mappingsFilePath, JSON.stringify(mappings, null, 2), \"utf-8\");\n\n logger.debug(\"Saved cloud ID mapping\", {\n localId: params.mapping.localId,\n cloudId: params.mapping.cloudId,\n entityType: params.mapping.entityType,\n });\n }\n\n /**\n * Get cloud ID mapping for a local entity.\n */\n getCloudIdMapping(params: IGetCloudIdMappingParams): string | null {\n const mappingsFilePath = path.join(\n this.getProjectPath(params.projectId),\n \"mappings\",\n \"cloud-id-mappings.json\",\n );\n\n if (!fs.existsSync(mappingsFilePath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(mappingsFilePath, \"utf-8\");\n const mappings = JSON.parse(content) as ICloudIdMapping[];\n const mapping = mappings.find(\n (m) => m.localId === params.localId && m.entityType === params.entityType,\n );\n return mapping?.cloudId ?? null;\n } catch {\n return null;\n }\n }\n\n /**\n * Get the projects directory path.\n */\n getProjectsDir(): string {\n return this.projectsDir;\n }\n\n /**\n * Generate a new run ID.\n */\n generateNewRunId(): string {\n return this.generateRunId();\n }\n}\n\n/** Cached service instance. */\nlet serviceInstance: ProjectStorageService | null = null;\n\n/**\n * Get the singleton ProjectStorageService instance.\n */\nexport function getProjectStorageService(): ProjectStorageService {\n serviceInstance ??= new ProjectStorageService();\n return serviceInstance;\n}\n\n/**\n * Reset the service (for testing).\n */\nexport function resetProjectStorageService(): void {\n serviceInstance = null;\n}\n","/**\n * Local storage service for managing ~/.muggle-ai/ directory.\n */\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\n\nimport { getConfig } from \"../../shared/config.js\";\nimport { getLogger } from \"../../shared/logger.js\";\nimport type {\n ISessionMetadata,\n ISessionSummary,\n ITestStep,\n} from \"../types/index.js\";\nimport { SessionStatus } from \"../types/index.js\";\n\n/** Default max age for sessions in days. */\nconst DEFAULT_SESSION_MAX_AGE_DAYS = 30;\n\n/**\n * Service for managing local file storage.\n */\nexport class StorageService {\n /** Base data directory. */\n private readonly dataDir: string;\n /** Sessions directory. */\n private readonly sessionsDir: string;\n\n /**\n * Create a new StorageService.\n */\n constructor() {\n const config = getConfig();\n this.dataDir = config.localQa.dataDir;\n this.sessionsDir = config.localQa.sessionsDir;\n }\n\n /**\n * Ensure the base directories exist.\n */\n ensureDirectories(): void {\n const logger = getLogger();\n\n if (!fs.existsSync(this.dataDir)) {\n fs.mkdirSync(this.dataDir, { recursive: true });\n logger.info(\"Created data directory\", { path: this.dataDir });\n }\n\n if (!fs.existsSync(this.sessionsDir)) {\n fs.mkdirSync(this.sessionsDir, { recursive: true });\n logger.info(\"Created sessions directory\", { path: this.sessionsDir });\n }\n }\n\n /**\n * Create a new session directory.\n * @param sessionId - Unique session ID.\n * @returns Path to the session directory.\n */\n createSessionDirectory(sessionId: string): string {\n const logger = getLogger();\n this.ensureDirectories();\n\n const sessionDir = path.join(this.sessionsDir, sessionId);\n\n if (!fs.existsSync(sessionDir)) {\n fs.mkdirSync(sessionDir, { recursive: true });\n fs.mkdirSync(path.join(sessionDir, \"screenshots\"), { recursive: true });\n fs.mkdirSync(path.join(sessionDir, \"logs\"), { recursive: true });\n logger.info(\"Created session directory\", { sessionId: sessionId, path: sessionDir });\n }\n\n return sessionDir;\n }\n\n /**\n * Save session metadata.\n * @param metadata - Session metadata to save.\n */\n saveSessionMetadata(metadata: ISessionMetadata): void {\n const logger = getLogger();\n const sessionDir = this.createSessionDirectory(metadata.sessionId);\n const metadataPath = path.join(sessionDir, \"metadata.json\");\n\n fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2), \"utf-8\");\n logger.debug(\"Saved session metadata\", { sessionId: metadata.sessionId });\n }\n\n /**\n * Load session metadata.\n * @param sessionId - Session ID to load.\n * @returns Session metadata, or null if not found.\n */\n loadSessionMetadata(sessionId: string): ISessionMetadata | null {\n const logger = getLogger();\n const metadataPath = path.join(this.sessionsDir, sessionId, \"metadata.json\");\n\n if (!fs.existsSync(metadataPath)) {\n return null;\n }\n\n try {\n const content = fs.readFileSync(metadataPath, \"utf-8\");\n return JSON.parse(content) as ISessionMetadata;\n } catch (error) {\n logger.error(\"Failed to load session metadata\", {\n sessionId: sessionId,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n /**\n * List all sessions.\n * @returns Array of session IDs.\n */\n listSessions(): string[] {\n if (!fs.existsSync(this.sessionsDir)) {\n return [];\n }\n\n return fs.readdirSync(this.sessionsDir).filter((entry) => {\n const entryPath = path.join(this.sessionsDir, entry);\n return fs.statSync(entryPath).isDirectory();\n });\n }\n\n /**\n * Get the current session ID (if any).\n * @returns Current session ID, or null.\n */\n getCurrentSessionId(): string | null {\n const currentPath = path.join(this.sessionsDir, \"current\");\n\n if (!fs.existsSync(currentPath)) {\n return null;\n }\n\n try {\n const target = fs.readlinkSync(currentPath);\n return path.basename(target);\n } catch {\n return null;\n }\n }\n\n /**\n * Set the current session.\n * @param sessionId - Session ID to set as current.\n */\n setCurrentSession(sessionId: string): void {\n const logger = getLogger();\n const currentPath = path.join(this.sessionsDir, \"current\");\n const targetPath = path.join(this.sessionsDir, sessionId);\n\n if (fs.existsSync(currentPath)) {\n fs.unlinkSync(currentPath);\n }\n\n fs.symlinkSync(targetPath, currentPath);\n logger.info(\"Set current session\", { sessionId: sessionId });\n }\n\n /**\n * Save a screenshot to the session directory.\n * @param params - Screenshot save parameters.\n */\n saveScreenshot(params: { sessionId: string; filename: string; data: Buffer }): string {\n const { sessionId, filename, data } = params;\n const logger = getLogger();\n const sessionDir = this.createSessionDirectory(sessionId);\n const screenshotPath = path.join(sessionDir, \"screenshots\", filename);\n\n fs.writeFileSync(screenshotPath, data);\n logger.debug(\"Saved screenshot\", { sessionId: sessionId, filename: filename });\n\n return screenshotPath;\n }\n\n /**\n * Append to the results markdown file.\n * @param params - Results append parameters.\n */\n appendToResults(params: { sessionId: string; content: string }): void {\n const { sessionId, content } = params;\n const logger = getLogger();\n const sessionDir = this.createSessionDirectory(sessionId);\n const resultsPath = path.join(sessionDir, \"results.md\");\n\n fs.appendFileSync(resultsPath, content + \"\\n\", \"utf-8\");\n logger.debug(\"Appended to results\", { sessionId: sessionId });\n }\n\n /**\n * Get the results markdown content.\n * @param sessionId - Session ID.\n * @returns Results content, or null if not found.\n */\n getResults(sessionId: string): string | null {\n const resultsPath = path.join(this.sessionsDir, sessionId, \"results.md\");\n\n if (!fs.existsSync(resultsPath)) {\n return null;\n }\n\n return fs.readFileSync(resultsPath, \"utf-8\");\n }\n\n /**\n * Get the data directory path.\n * @returns Data directory path.\n */\n getDataDir(): string {\n return this.dataDir;\n }\n\n /**\n * Get the sessions directory path.\n * @returns Sessions directory path.\n */\n getSessionsDir(): string {\n return this.sessionsDir;\n }\n\n /**\n * Create a new session with metadata.\n * @param params - Session creation parameters.\n * @returns Path to the session directory.\n */\n createSession(params: {\n sessionId: string;\n targetUrl: string;\n testInstructions: string;\n }): string {\n const { sessionId, targetUrl, testInstructions } = params;\n const logger = getLogger();\n\n const sessionDir = this.createSessionDirectory(sessionId);\n\n const metadata: ISessionMetadata = {\n sessionId: sessionId,\n workflowRunId: sessionId,\n status: SessionStatus.Running,\n startTime: new Date().toISOString(),\n targetUrl: targetUrl,\n testInstructions: testInstructions,\n };\n\n this.saveSessionMetadata(metadata);\n this.setCurrentSession(sessionId);\n\n logger.info(\"Created session\", { sessionId: sessionId, targetUrl: targetUrl });\n\n return sessionDir;\n }\n\n /**\n * Update the status of an existing session.\n * @param params - Status update parameters.\n */\n updateSessionStatus(params: { sessionId: string; status: SessionStatus }): void {\n const { sessionId, status } = params;\n const logger = getLogger();\n\n const metadata = this.loadSessionMetadata(sessionId);\n if (!metadata) {\n logger.warn(\"Session not found for status update\", { sessionId: sessionId });\n return;\n }\n\n metadata.status = status;\n if (status === SessionStatus.Completed || status === SessionStatus.Failed) {\n metadata.endTime = new Date().toISOString();\n }\n\n this.saveSessionMetadata(metadata);\n logger.debug(\"Updated session status\", { sessionId: sessionId, status: status });\n }\n\n /**\n * Initialize the results.md file with a header.\n * @param params - Initialization parameters.\n */\n initializeResults(params: {\n sessionId: string;\n targetUrl: string;\n testInstructions: string;\n }): void {\n const { sessionId, targetUrl, testInstructions } = params;\n const logger = getLogger();\n const sessionDir = this.createSessionDirectory(sessionId);\n const resultsPath = path.join(sessionDir, \"results.md\");\n\n const header = [\n `# Test Results: ${sessionId}`,\n \"\",\n `**Target URL:** ${targetUrl}`,\n `**Started:** ${new Date().toISOString()}`,\n `**Instructions:** ${testInstructions}`,\n \"\",\n \"---\",\n \"\",\n \"## Test Steps\",\n \"\",\n ].join(\"\\n\");\n\n fs.writeFileSync(resultsPath, header, \"utf-8\");\n logger.debug(\"Initialized results.md\", { sessionId: sessionId });\n }\n\n /**\n * Append a test step to the results.md file.\n * @param params - Step parameters.\n */\n appendStepToResults(params: { sessionId: string; step: ITestStep }): void {\n const { sessionId, step } = params;\n const logger = getLogger();\n const sessionDir = this.createSessionDirectory(sessionId);\n const resultsPath = path.join(sessionDir, \"results.md\");\n\n const statusIcon = step.success ? \"✓\" : \"✗\";\n const stepContent = [\n `### Step ${step.stepNumber}: ${step.action}`,\n \"\",\n step.target ? `- **Target:** ${step.target}` : \"\",\n `- **Result:** ${step.result} ${statusIcon}`,\n step.screenshotPath\n ? `- **Screenshot:** [step-${String(step.stepNumber).padStart(3, \"0\")}.png](screenshots/step-${String(step.stepNumber).padStart(3, \"0\")}.png)`\n : \"\",\n \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n fs.appendFileSync(resultsPath, stepContent + \"\\n\", \"utf-8\");\n logger.debug(\"Appended step to results\", { sessionId: sessionId, stepNumber: step.stepNumber });\n\n const metadata = this.loadSessionMetadata(sessionId);\n if (metadata) {\n metadata.stepsCount = (metadata.stepsCount ?? 0) + 1;\n this.saveSessionMetadata(metadata);\n }\n }\n\n /**\n * Finalize the results.md file with a summary.\n * @param params - Finalization parameters.\n */\n finalizeResults(params: { sessionId: string; status: SessionStatus; summary?: string }): void {\n const { sessionId, status, summary } = params;\n const logger = getLogger();\n const sessionDir = path.join(this.sessionsDir, sessionId);\n const resultsPath = path.join(sessionDir, \"results.md\");\n\n if (!fs.existsSync(resultsPath)) {\n logger.warn(\"Results file not found for finalization\", { sessionId: sessionId });\n return;\n }\n\n const metadata = this.loadSessionMetadata(sessionId);\n const endTime = new Date();\n const startTime = metadata?.startTime ? new Date(metadata.startTime) : endTime;\n const durationMs = endTime.getTime() - startTime.getTime();\n const durationSeconds = (durationMs / 1000).toFixed(2);\n\n const statusDisplay =\n status === SessionStatus.Completed\n ? \"✓ Passed\"\n : status === SessionStatus.Failed\n ? \"✗ Failed\"\n : \"— Running\";\n\n const footer = [\n \"\",\n \"---\",\n \"\",\n \"## Summary\",\n \"\",\n `**Status:** ${statusDisplay}`,\n `**Duration:** ${durationSeconds}s`,\n `**Steps:** ${metadata?.stepsCount ?? 0}`,\n `**Completed:** ${endTime.toISOString()}`,\n \"\",\n summary ? summary : \"\",\n ].join(\"\\n\");\n\n fs.appendFileSync(resultsPath, footer, \"utf-8\");\n logger.debug(\"Finalized results.md\", { sessionId: sessionId, status: status });\n\n if (metadata) {\n metadata.durationMs = durationMs;\n metadata.endTime = endTime.toISOString();\n metadata.status = status;\n this.saveSessionMetadata(metadata);\n }\n }\n\n /**\n * List all sessions with their metadata.\n * @returns Array of session summaries.\n */\n listSessionsWithMetadata(): ISessionSummary[] {\n const sessionIds = this.listSessions();\n const summaries: ISessionSummary[] = [];\n\n for (const sessionId of sessionIds) {\n if (sessionId === \"current\") {\n continue;\n }\n\n const metadata = this.loadSessionMetadata(sessionId);\n if (metadata) {\n summaries.push({\n sessionId: metadata.sessionId,\n status: metadata.status,\n startTime: metadata.startTime,\n endTime: metadata.endTime,\n targetUrl: metadata.targetUrl,\n durationMs: metadata.durationMs,\n stepsCount: metadata.stepsCount,\n });\n }\n }\n\n summaries.sort((a, b) => new Date(b.startTime).getTime() - new Date(a.startTime).getTime());\n\n return summaries;\n }\n\n /**\n * Cleanup old sessions beyond the specified age.\n * @param params - Cleanup parameters.\n * @returns Number of sessions deleted.\n */\n cleanupOldSessions(params?: { maxAgeDays?: number }): number {\n const maxAgeDays = params?.maxAgeDays ?? DEFAULT_SESSION_MAX_AGE_DAYS;\n const logger = getLogger();\n const cutoffDate = new Date();\n cutoffDate.setDate(cutoffDate.getDate() - maxAgeDays);\n\n const sessionIds = this.listSessions();\n let deletedCount = 0;\n\n for (const sessionId of sessionIds) {\n if (sessionId === \"current\") {\n continue;\n }\n\n const metadata = this.loadSessionMetadata(sessionId);\n if (!metadata) {\n continue;\n }\n\n const sessionDate = new Date(metadata.startTime);\n if (sessionDate < cutoffDate) {\n const sessionDir = path.join(this.sessionsDir, sessionId);\n try {\n fs.rmSync(sessionDir, { recursive: true, force: true });\n deletedCount++;\n logger.info(\"Deleted old session\", {\n sessionId: sessionId,\n age: Math.floor((Date.now() - sessionDate.getTime()) / (1000 * 60 * 60 * 24)),\n });\n } catch (error) {\n logger.error(\"Failed to delete session\", {\n sessionId: sessionId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n\n if (deletedCount > 0) {\n logger.info(\"Session cleanup completed\", {\n deletedCount: deletedCount,\n maxAgeDays: maxAgeDays,\n });\n }\n\n return deletedCount;\n }\n\n /**\n * Get a session directory path.\n * @param sessionId - Session ID.\n * @returns Session directory path.\n */\n getSessionPath(sessionId: string): string {\n return path.join(this.sessionsDir, sessionId);\n }\n\n /**\n * Delete a specific session.\n * @param sessionId - Session ID to delete.\n * @returns Whether deletion succeeded.\n */\n deleteSession(sessionId: string): boolean {\n const logger = getLogger();\n const sessionDir = path.join(this.sessionsDir, sessionId);\n\n if (!fs.existsSync(sessionDir)) {\n logger.warn(\"Session not found for deletion\", { sessionId: sessionId });\n return false;\n }\n\n try {\n const currentId = this.getCurrentSessionId();\n if (currentId === sessionId) {\n const currentPath = path.join(this.sessionsDir, \"current\");\n if (fs.existsSync(currentPath)) {\n fs.unlinkSync(currentPath);\n }\n }\n\n fs.rmSync(sessionDir, { recursive: true, force: true });\n logger.info(\"Deleted session\", { sessionId: sessionId });\n return true;\n } catch (error) {\n logger.error(\"Failed to delete session\", {\n sessionId: sessionId,\n error: error instanceof Error ? error.message : String(error),\n });\n return false;\n }\n }\n}\n\n/** Cached service instance. */\nlet serviceInstance: StorageService | null = null;\n\n/**\n * Get the singleton StorageService instance.\n * @returns StorageService instance.\n */\nexport function getStorageService(): StorageService {\n serviceInstance ??= new StorageService();\n return serviceInstance;\n}\n\n/**\n * Reset the service (for testing).\n */\nexport function resetStorageService(): void {\n serviceInstance = null;\n}\n","/**\n * Execution service for managing electron-app processes.\n * Handles test script generation and replay via direct electron-app execution.\n */\n\nimport { spawn } from \"child_process\";\nimport type { ChildProcess } from \"child_process\";\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\n\nimport { ulid } from \"ulid\";\n\nimport { getConfig } from \"../../shared/config.js\";\nimport type {\n IExecutionProcess,\n IExecutionResult,\n ILocalRunResult,\n ILocalTestCase,\n ILocalTestScript,\n ILocalWorkflowRun,\n} from \"../types/index.js\";\nimport {\n LocalRunStatus,\n LocalRunType,\n LocalTestScriptStatus,\n LocalWorkflowRunStatus,\n} from \"../types/index.js\";\nimport { getAuthService, getProjectStorageService } from \"./index.js\";\n\n/**\n * Studio auth info for electron-app.\n */\ninterface IStudioAuthInfo {\n /** Access token. */\n accessToken: string;\n /** User email. */\n email: string;\n /** User ID. */\n userId: string;\n}\n\n/**\n * Secret option for action scripts.\n */\ninterface ISecretOption {\n /** Secret ID. */\n id: string;\n /** Secret name. */\n secretName: string;\n /** Secret description. */\n description: string;\n /** Secret source. */\n source?: \"agent\" | \"user\";\n}\n\n/**\n * Workflow file metadata for action scripts.\n */\ninterface IWorkflowFileMetadata {\n /** File ID. */\n id: string;\n /** File path. */\n filePath: string;\n /** File description. */\n description: string;\n /** File tags. */\n tags?: string[];\n}\n\n/**\n * Map local workflow files to workflow file metadata for action scripts.\n * @param files - Local workflow files.\n * @returns Workflow file metadata array.\n */\nfunction mapWorkflowFilesToMetadata (files: Array<{\n id: string;\n localPath: string;\n description: string;\n tags?: string[];\n}>): IWorkflowFileMetadata[] {\n return files.map((f) => ({\n id: f.id,\n filePath: f.localPath,\n description: f.description,\n tags: f.tags,\n }));\n}\n\n/**\n * Get the authenticated user ID from the auth file.\n * @returns The user ID or throws if not authenticated.\n */\nfunction getAuthenticatedUserId (): string {\n const authService = getAuthService();\n const authStatus = authService.getAuthStatus();\n\n if (!authStatus.authenticated) {\n throw new Error(\"Not authenticated. Please run muggle_auth_login first.\");\n }\n\n if (!authStatus.userId) {\n throw new Error(\"User ID not found in auth. Please re-authenticate.\");\n }\n\n return authStatus.userId;\n}\n\n/**\n * Build studio auth content from stored local authentication.\n * @returns Auth content compatible with electron-app runtime.\n */\nfunction buildStudioAuthContent (): IStudioAuthInfo {\n const authService = getAuthService();\n const authStatus = authService.getAuthStatus();\n const storedAuth = authService.loadStoredAuth();\n\n if (!authStatus.authenticated || !storedAuth) {\n throw new Error(\"Not authenticated. Please run muggle_auth_login first.\");\n }\n\n if (!storedAuth.email || !storedAuth.userId) {\n throw new Error(\"Auth data incomplete. Please re-authenticate.\");\n }\n\n return {\n accessToken: storedAuth.accessToken,\n email: storedAuth.email,\n userId: storedAuth.userId,\n };\n}\n\n/**\n * Convert local secrets to secret option metadata for action scripts.\n * @param params - Conversion parameters.\n * @returns Secret option metadata.\n */\nfunction buildSecretOptionsFromLocalSecrets (params: {\n localSecrets: Array<{\n id: string;\n secretName: string;\n description: string;\n source?: \"agent\" | \"user\";\n }>;\n}): ISecretOption[] | undefined {\n if (params.localSecrets.length === 0) {\n return undefined;\n }\n\n return params.localSecrets.map((localSecret) => ({\n id: localSecret.id,\n secretName: localSecret.secretName,\n description: localSecret.description,\n source: localSecret.source,\n }));\n}\n\n/** Default timeout for test generation (5 minutes). */\nconst DEFAULT_GENERATION_TIMEOUT_MS = 300000;\n\n/** Default timeout for replay (3 minutes). */\nconst DEFAULT_REPLAY_TIMEOUT_MS = 180000;\n\n/**\n * Early exit info captured when process exits before waitForCompletion is called.\n */\ninterface IEarlyExitInfo {\n /** Exit code from process. */\n code: number | null;\n /** Signal that terminated the process. */\n signal: NodeJS.Signals | null;\n /** Captured stdout. */\n stdout: string;\n /** Captured stderr. */\n stderr: string;\n}\n\n/**\n * How long the process can be inactive (no stdout/stderr) before we consider it stuck (ms).\n * If the process produces no output for this duration while still running, we assume\n * it's stuck on an error dialog or similar blocking state.\n */\nconst INACTIVITY_TIMEOUT_MS = 120000;\n\n/**\n * How often to check for process inactivity (ms).\n */\nconst INACTIVITY_CHECK_INTERVAL_MS = 5000;\n\n/**\n * Extended execution process with ChildProcess.\n */\ninterface IInternalExecutionProcess extends IExecutionProcess {\n /** The child process. */\n process: ChildProcess;\n /** Timeout timer. */\n timeoutTimer?: ReturnType<typeof setTimeout>;\n /** Inactivity check interval. */\n inactivityCheckInterval?: ReturnType<typeof setInterval>;\n /** Captured stdout from early handlers. */\n capturedStdout: string;\n /** Captured stderr from early handlers. */\n capturedStderr: string;\n /** Early exit info if process exits before waitForCompletion. */\n earlyExitInfo?: IEarlyExitInfo;\n /** Whether the process has exited. */\n hasExited: boolean;\n /** Timestamp of last output (stdout or stderr) received. */\n lastOutputAt: number;\n /** Whether the process was killed due to inactivity. */\n killedDueToInactivity: boolean;\n}\n\n/** Map of active execution processes by run ID. */\nconst activeProcesses: Map<string, IInternalExecutionProcess> = new Map();\n\n/**\n * Generate a run ID with prefix.\n * @returns A ULID with run_ prefix.\n */\nfunction generateRunId (): string {\n return `run_${ulid()}`;\n}\n\n/**\n * Ensure the temp directory exists.\n * @returns The temp directory path.\n */\nasync function ensureTempDir (): Promise<string> {\n const config = getConfig();\n const tempDir = config.localQa.tempDir;\n await fs.mkdir(tempDir, { recursive: true });\n return tempDir;\n}\n\n/**\n * Write a JSON file to the temp directory.\n * @param params - The parameters.\n * @param params.filename - The filename.\n * @param params.data - The data to write.\n * @returns The full path to the written file.\n */\nasync function writeTempFile (params: { filename: string; data: unknown; }): Promise<string> {\n const { filename, data } = params;\n const tempDir = await ensureTempDir();\n const filePath = path.join(tempDir, filename);\n await fs.writeFile(filePath, JSON.stringify(data, null, 2), \"utf-8\");\n return filePath;\n}\n\n/**\n * Read a JSON file from the temp directory.\n * @param filePath - The file path.\n * @returns The parsed JSON data or null if not found.\n */\nasync function readTempFile (filePath: string): Promise<unknown | null> {\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\n/**\n * Read generated action script written by electron-app (gen_ prefix fallback file).\n * @param params - File lookup parameters.\n * @returns Parsed generated action script, or null when unavailable.\n */\nasync function readGeneratedActionScriptFile (params: {\n inputFilePath: string;\n}): Promise<unknown | null> {\n const generatedFilePath = path.join(\n path.dirname(params.inputFilePath),\n `gen_${path.basename(params.inputFilePath)}`,\n );\n return readTempFile(generatedFilePath);\n}\n\n/**\n * Studio returned result status values that indicate failure.\n */\nconst FAILED_STUDIO_STATUSES = [\"goal_not_achievable\", \"failed\", \"error\", \"timeout\", \"cancelled\"];\n\n/**\n * Check if the workflow run indicates a failure based on studioReturnedResult.\n * @param params - The parameters.\n * @param params.projectId - The project ID.\n * @param params.workflowRunId - The workflow run ID.\n * @returns Object with success status and error message if failed.\n */\nasync function checkWorkflowRunResult (params: {\n projectId: string;\n workflowRunId: string;\n}): Promise<{ success: boolean; error?: string; }> {\n const { projectId, workflowRunId } = params;\n const config = getConfig();\n\n const workflowRunPath = path.join(\n config.localQa.projectsDir,\n projectId,\n \"workflow-runs\",\n `${workflowRunId}.json`,\n );\n\n try {\n const content = await fs.readFile(workflowRunPath, \"utf-8\");\n const workflowRun = JSON.parse(content) as {\n studioReturnedResult?: {\n status?: string;\n summary?: string;\n error?: string;\n };\n };\n\n if (!workflowRun.studioReturnedResult) {\n return { success: true };\n }\n\n const studioResult = workflowRun.studioReturnedResult;\n const status = studioResult.status?.toLowerCase() ?? \"\";\n\n if (FAILED_STUDIO_STATUSES.includes(status)) {\n const errorMessage =\n studioResult.error ?? studioResult.summary ?? `Test failed with status: ${status}`;\n return { success: false, error: errorMessage };\n }\n\n return { success: true };\n } catch {\n return { success: true };\n }\n}\n\n/**\n * Extract generated action steps from electron-app output.\n * @param actionScriptResult - Raw action script payload.\n * @returns Generated action steps, when present.\n */\nfunction extractGeneratedActionSteps (actionScriptResult: unknown): unknown[] | undefined {\n if (Array.isArray(actionScriptResult)) {\n return actionScriptResult;\n }\n\n if (actionScriptResult === null || typeof actionScriptResult !== \"object\") {\n return undefined;\n }\n\n const actionScriptResultRecord = actionScriptResult as Record<string, unknown>;\n const topLevelSteps = actionScriptResultRecord.steps;\n if (Array.isArray(topLevelSteps)) {\n return topLevelSteps;\n }\n\n const outputSteps = actionScriptResultRecord.output;\n if (Array.isArray(outputSteps)) {\n return outputSteps;\n }\n\n return undefined;\n}\n\n/**\n * Ensure a generated test script is persisted locally with a stable ID.\n * @param params - Persistence parameters.\n * @returns The persisted test script ID.\n */\nfunction ensureGeneratedTestScript (params: {\n projectId: string;\n testCase: ILocalTestCase;\n projectUrl: string;\n testScriptId: string;\n actionScriptId: string;\n actionScriptResult: unknown;\n}): string {\n const { projectId, testCase, projectUrl, testScriptId, actionScriptId, actionScriptResult } =\n params;\n const storageService = getProjectStorageService();\n const existingTestScript = storageService.getTestScript({\n projectId: projectId,\n testScriptId: testScriptId,\n });\n\n if (!existingTestScript) {\n storageService.createTestScript({\n projectId: projectId,\n useCaseId: testCase.useCaseId,\n testCaseId: testCase.id,\n url: projectUrl,\n name: testCase.title,\n testScriptId: testScriptId,\n });\n }\n\n const actionScriptSteps = extractGeneratedActionSteps(actionScriptResult);\n if (actionScriptResult !== null && actionScriptResult !== undefined) {\n storageService.saveActionScript({\n projectId: projectId,\n testScriptId: testScriptId,\n actionScript: actionScriptResult,\n });\n }\n\n storageService.updateTestScript({\n projectId: projectId,\n testScriptId: testScriptId,\n updates: {\n goal: testCase.goal,\n description: testCase.description,\n precondition: testCase.precondition,\n expectedResult: testCase.expectedResult,\n actionScriptId: actionScriptId,\n actionScript: actionScriptSteps,\n status: LocalTestScriptStatus.GENERATED,\n },\n });\n\n return testScriptId;\n}\n\n/**\n * Clean up temp files for a run.\n * @param params - The parameters.\n * @param params.filePaths - The file paths to clean up.\n */\nasync function cleanupTempFiles (params: { filePaths: string[]; }): Promise<void> {\n const { filePaths } = params;\n try {\n await Promise.all(\n filePaths.map(async (filePath) =>\n fs.unlink(filePath).catch(() => {\n /* ignore */\n }),\n ),\n );\n } catch {\n /* ignore cleanup errors */\n }\n}\n\n/**\n * Build action script for test generation.\n * @param params - The parameters.\n * @returns The action script object.\n */\nfunction buildGenerationActionScript (params: {\n projectSecretOptions?: ISecretOption[];\n projectWorkflowFiles?: IWorkflowFileMetadata[];\n testCase: ILocalTestCase;\n projectUrl: string;\n userId: string;\n}): {\n actionScript: Record<string, unknown>;\n actionScriptId: string;\n testScriptId: string;\n workflowRunId: string;\n actionParams: Record<string, unknown>;\n} {\n const { projectSecretOptions, projectWorkflowFiles, testCase, projectUrl, userId } = params;\n const actionScriptId = `as_${ulid()}`;\n const testScriptId = `ts_${ulid()}`;\n const workflowRunId = `local_${ulid()}`;\n const actionParams = {\n type: \"Test Script Generation Workflow\",\n name: testCase.title,\n projectId: testCase.projectId,\n useCaseId: testCase.useCaseId,\n testCaseId: testCase.id,\n testScriptId: testScriptId,\n actionScriptId: actionScriptId,\n workflowRunId: workflowRunId,\n url: projectUrl,\n sharedTestMemoryId: `stm_local_${ulid()}`,\n workflowFiles: projectWorkflowFiles,\n ownerId: userId,\n };\n\n return {\n actionScript: {\n actionScriptId: actionScriptId,\n actionScriptName: testCase.title,\n actionType: \"Exploratory\",\n actionParams: actionParams,\n goal: testCase.expectedResult ?? testCase.title,\n url: projectUrl,\n description: testCase.description ?? \"\",\n precondition: testCase.precondition,\n expectedResult: testCase.expectedResult ?? \"\",\n steps: [],\n ownerId: userId,\n createdAt: Date.now(),\n isRemoteScript: false,\n status: \"active\",\n secretOptions: projectSecretOptions,\n },\n actionScriptId: actionScriptId,\n testScriptId: testScriptId,\n workflowRunId: workflowRunId,\n actionParams: actionParams,\n };\n}\n\n/**\n * Build action script for replay.\n * @param params - The parameters.\n * @returns The action script object.\n */\nfunction buildReplayActionScript (params: {\n projectSecretOptions?: ISecretOption[];\n projectWorkflowFiles?: IWorkflowFileMetadata[];\n testScript: ILocalTestScript;\n userId: string;\n}): {\n actionScript: Record<string, unknown>;\n actionScriptId: string;\n testScriptId: string;\n workflowRunId: string;\n actionParams: Record<string, unknown>;\n} {\n const { projectSecretOptions, projectWorkflowFiles, testScript, userId } = params;\n const actionScriptId = testScript.actionScriptId ?? `as_${ulid()}`;\n const workflowRunId = `local_${ulid()}`;\n const actionParams = {\n type: \"Test Script Replay Workflow\",\n name: testScript.name,\n projectId: testScript.projectId,\n useCaseId: testScript.useCaseId,\n testCaseId: testScript.testCaseId,\n testScriptId: testScript.id,\n workflowRunId: workflowRunId,\n sharedTestMemoryId: `stm_local_${ulid()}`,\n workflowFiles: projectWorkflowFiles,\n ownerId: userId,\n };\n\n return {\n actionScript: {\n actionScriptId: actionScriptId,\n actionScriptName: testScript.name,\n actionType: \"UserDefined\",\n actionParams: actionParams,\n goal: testScript.goal ?? testScript.name,\n url: testScript.url ?? \"\",\n description: testScript.description ?? \"\",\n precondition: testScript.precondition,\n expectedResult: testScript.expectedResult ?? \"\",\n steps: testScript.actionScript ?? [],\n ownerId: userId,\n createdAt: testScript.createdAt,\n isRemoteScript: false,\n status: \"active\",\n secretOptions: projectSecretOptions,\n },\n actionScriptId: actionScriptId,\n testScriptId: testScript.id,\n workflowRunId: workflowRunId,\n actionParams: actionParams,\n };\n}\n\n/**\n * Build a local workflow run record.\n * @param params - The parameters.\n * @returns The workflow run record.\n */\nfunction buildLocalWorkflowRun (params: {\n projectId: string;\n workflowRunId: string;\n ownerId: string;\n taskDef: Record<string, unknown>;\n}): ILocalWorkflowRun {\n const { projectId, workflowRunId, ownerId, taskDef } = params;\n const now = Date.now();\n\n return {\n id: workflowRunId,\n projectId: projectId,\n workflowRuntimeId: workflowRunId,\n ownerId: ownerId,\n status: LocalWorkflowRunStatus.RUNNING,\n progress: 0,\n taskDef: taskDef,\n createdAt: now,\n startedAt: now,\n };\n}\n\n/**\n * Execute the electron-app with the given parameters.\n * @param params - The parameters.\n * @returns The execution process info.\n */\nasync function spawnElectronApp (params: {\n runId: string;\n projectId: string;\n entityId: string;\n runType: LocalRunType;\n runMode: \"explore\" | \"engine\";\n inputFilePath: string;\n mutationFilePath: string;\n outputFilePath: string;\n authFilePath: string;\n additionalArgs?: string[];\n timeoutMs: number;\n}): Promise<IInternalExecutionProcess> {\n const {\n runId,\n projectId,\n entityId,\n runType,\n runMode,\n inputFilePath,\n mutationFilePath,\n outputFilePath,\n authFilePath,\n additionalArgs,\n timeoutMs,\n } = params;\n\n const config = getConfig();\n const electronAppPath = config.localQa.electronAppPath;\n if (!electronAppPath) {\n throw new Error(\n \"Electron-app not found. Run 'muggle-mcp setup' to install, \" +\n \"or set ELECTRON_APP_PATH environment variable.\",\n );\n }\n\n const args = [\n runMode,\n inputFilePath,\n mutationFilePath,\n authFilePath,\n \"--no-sandbox\",\n ...(additionalArgs ?? []),\n ];\n\n const childProcessEnv: NodeJS.ProcessEnv = {\n ...process.env,\n MUGGLE_LOCAL_DATA_DIR: config.localQa.dataDir,\n };\n delete childProcessEnv.ELECTRON_RUN_AS_NODE;\n delete childProcessEnv.ELECTRON_NO_ASAR;\n\n const childProcess = spawn(electronAppPath, args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: false,\n env: childProcessEnv,\n });\n\n if (!childProcess.pid) {\n throw new Error(\"Failed to spawn electron-app process\");\n }\n\n const now = Date.now();\n const executionProcess: IInternalExecutionProcess = {\n runId: runId,\n projectId: projectId,\n entityId: entityId,\n runType: runType,\n process: childProcess,\n pid: childProcess.pid,\n startedAt: now,\n status: LocalRunStatus.RUNNING,\n inputFilePath: inputFilePath,\n outputFilePath: outputFilePath,\n capturedStdout: \"\",\n capturedStderr: \"\",\n hasExited: false,\n lastOutputAt: now,\n killedDueToInactivity: false,\n };\n\n childProcess.stdout?.on(\"data\", (data: Buffer) => {\n executionProcess.capturedStdout += data.toString();\n executionProcess.lastOutputAt = Date.now();\n });\n\n childProcess.stderr?.on(\"data\", (data: Buffer) => {\n executionProcess.capturedStderr += data.toString();\n executionProcess.lastOutputAt = Date.now();\n });\n\n // Set up inactivity monitoring\n const inactivityCheck = setInterval(() => {\n if (executionProcess.hasExited) {\n clearInterval(inactivityCheck);\n return;\n }\n\n const inactiveDuration = Date.now() - executionProcess.lastOutputAt;\n if (inactiveDuration >= INACTIVITY_TIMEOUT_MS) {\n executionProcess.killedDueToInactivity = true;\n executionProcess.status = LocalRunStatus.FAILED;\n clearInterval(inactivityCheck);\n\n try {\n executionProcess.process.kill(\"SIGKILL\");\n } catch {\n /* ignore kill errors */\n }\n }\n }, INACTIVITY_CHECK_INTERVAL_MS);\n\n executionProcess.inactivityCheckInterval = inactivityCheck;\n\n childProcess.on(\"close\", (code, signal) => {\n executionProcess.hasExited = true;\n executionProcess.earlyExitInfo = {\n code: code,\n signal: signal,\n stdout: executionProcess.capturedStdout,\n stderr: executionProcess.capturedStderr,\n };\n });\n\n childProcess.on(\"error\", (error) => {\n executionProcess.hasExited = true;\n executionProcess.capturedStderr += `\\nSpawn error: ${error.message}`;\n executionProcess.earlyExitInfo = {\n code: -1,\n signal: null,\n stdout: executionProcess.capturedStdout,\n stderr: executionProcess.capturedStderr,\n };\n });\n\n const timeoutTimer = setTimeout(() => {\n handleTimeout({ executionProcess: executionProcess });\n }, timeoutMs);\n\n executionProcess.timeoutTimer = timeoutTimer;\n\n activeProcesses.set(runId, executionProcess);\n\n return executionProcess;\n}\n\n/**\n * Handle execution timeout.\n * @param params - The parameters.\n * @param params.executionProcess - The execution process.\n */\nfunction handleTimeout (params: { executionProcess: IInternalExecutionProcess; }): void {\n const { executionProcess } = params;\n\n if (executionProcess.status === LocalRunStatus.RUNNING) {\n executionProcess.status = LocalRunStatus.FAILED;\n\n // Clear inactivity check if timeout takes over\n if (executionProcess.inactivityCheckInterval) {\n clearInterval(executionProcess.inactivityCheckInterval);\n }\n\n try {\n executionProcess.process.kill(\"SIGTERM\");\n } catch {\n /* ignore kill errors */\n }\n }\n}\n\n/**\n * Handle process exit and return appropriate result.\n * @param params - The parameters.\n * @returns The execution result.\n */\nasync function handleProcessExit (params: {\n executionProcess: IInternalExecutionProcess;\n code: number | null;\n stderr: string;\n}): Promise<IExecutionResult> {\n const { executionProcess, code, stderr } = params;\n\n // Clear all timers\n if (executionProcess.timeoutTimer) {\n clearTimeout(executionProcess.timeoutTimer);\n }\n if (executionProcess.inactivityCheckInterval) {\n clearInterval(executionProcess.inactivityCheckInterval);\n }\n\n activeProcesses.delete(executionProcess.runId);\n\n if (executionProcess.status === LocalRunStatus.CANCELLED) {\n return {\n success: false,\n status: \"FAILURE\",\n summary: \"Execution was cancelled\",\n error: \"Cancelled by user\",\n };\n }\n\n // Check if killed due to inactivity (likely stuck on dialog)\n if (executionProcess.killedDueToInactivity) {\n executionProcess.status = LocalRunStatus.FAILED;\n const stderrSummary = stderr.trim().slice(0, 500);\n return {\n success: false,\n status: \"FAILURE\",\n summary: \"Process became unresponsive\",\n error: `Process killed after ${INACTIVITY_TIMEOUT_MS / 1000}s of inactivity (likely stuck on error dialog). ` +\n (stderrSummary ? `Last stderr: ${stderrSummary}` : \"No stderr captured.\"),\n };\n }\n\n if (code !== 0 || executionProcess.status === LocalRunStatus.FAILED) {\n executionProcess.status = LocalRunStatus.FAILED;\n const errorMessage = stderr || `Process exited with code ${code}`;\n return {\n success: false,\n status: \"FAILURE\",\n summary: \"Execution failed\",\n error: code === -1 ? errorMessage : `Process exited with code ${code}. ${errorMessage}`,\n };\n }\n\n const outputData = await readTempFile(executionProcess.outputFilePath);\n executionProcess.status = LocalRunStatus.PASSED;\n\n return {\n success: true,\n status: \"SUCCESS\",\n summary: \"Execution completed successfully\",\n actionScript: outputData,\n };\n}\n\n/**\n * Wait for the electron-app process to complete.\n * Handles early exits where process crashes before this function is called.\n * @param params - The parameters.\n * @param params.executionProcess - The execution process.\n * @returns The execution result.\n */\nasync function waitForCompletion (params: {\n executionProcess: IInternalExecutionProcess;\n}): Promise<IExecutionResult> {\n const { executionProcess } = params;\n\n if (executionProcess.hasExited && executionProcess.earlyExitInfo) {\n const earlyExit = executionProcess.earlyExitInfo;\n return handleProcessExit({\n executionProcess: executionProcess,\n code: earlyExit.code,\n stderr: earlyExit.stderr,\n });\n }\n\n return new Promise((resolve) => {\n let resolved = false;\n\n const resolveOnce = (result: IExecutionResult): void => {\n if (!resolved) {\n resolved = true;\n resolve(result);\n }\n };\n\n const checkEarlyExit = setInterval(() => {\n if (executionProcess.hasExited && executionProcess.earlyExitInfo) {\n clearInterval(checkEarlyExit);\n const earlyExit = executionProcess.earlyExitInfo;\n handleProcessExit({\n executionProcess: executionProcess,\n code: earlyExit.code,\n stderr: earlyExit.stderr,\n }).then(resolveOnce);\n }\n }, 100);\n\n executionProcess.process.on(\"close\", async (code) => {\n clearInterval(checkEarlyExit);\n const result = await handleProcessExit({\n executionProcess: executionProcess,\n code: code,\n stderr: executionProcess.capturedStderr,\n });\n resolveOnce(result);\n });\n\n executionProcess.process.on(\"error\", async (error) => {\n clearInterval(checkEarlyExit);\n if (executionProcess.timeoutTimer) {\n clearTimeout(executionProcess.timeoutTimer);\n }\n\n activeProcesses.delete(executionProcess.runId);\n executionProcess.status = LocalRunStatus.FAILED;\n\n resolveOnce({\n success: false,\n status: \"FAILURE\",\n summary: \"Execution error\",\n error: error.message,\n });\n });\n });\n}\n\n/**\n * Execute test script generation for a test case.\n * @param params - The parameters.\n * @param params.projectId - The project ID.\n * @param params.testCaseId - The test case ID.\n * @param params.timeoutMs - Optional timeout in milliseconds.\n * @returns The run result.\n */\nexport async function executeTestGeneration (params: {\n projectId: string;\n testCaseId: string;\n timeoutMs?: number;\n}): Promise<ILocalRunResult> {\n const { projectId, testCaseId, timeoutMs = DEFAULT_GENERATION_TIMEOUT_MS } = params;\n\n const storageService = getProjectStorageService();\n\n const project = storageService.getProject(projectId);\n if (!project) {\n throw new Error(`Project not found: ${projectId}`);\n }\n\n const testCase = storageService.getTestCase({\n projectId: projectId,\n testCaseId: testCaseId,\n });\n if (!testCase) {\n throw new Error(`Test case not found: ${testCaseId}`);\n }\n\n const useCase = storageService.getUseCase({\n projectId: projectId,\n useCaseId: testCase.useCaseId,\n });\n if (!useCase) {\n throw new Error(`Use case not found: ${testCase.useCaseId}`);\n }\n\n const userId = getAuthenticatedUserId();\n const authContent = buildStudioAuthContent();\n\n const localSecretOptions = buildSecretOptionsFromLocalSecrets({\n localSecrets: storageService.listSecrets(projectId),\n });\n const localWorkflowFiles = storageService.resolveWorkflowFilesForExecution({\n projectId: projectId,\n useCaseId: testCase.useCaseId,\n testCaseId: testCase.id,\n });\n const workflowFileMetadata = mapWorkflowFilesToMetadata(localWorkflowFiles);\n\n const runId = generateRunId();\n const actionScriptBuild = buildGenerationActionScript({\n projectSecretOptions: localSecretOptions,\n projectWorkflowFiles: workflowFileMetadata,\n testCase: testCase,\n projectUrl: project.url,\n userId: userId,\n });\n const localWorkflowRun = buildLocalWorkflowRun({\n projectId: projectId,\n workflowRunId: actionScriptBuild.workflowRunId,\n ownerId: userId,\n taskDef: actionScriptBuild.actionParams,\n });\n storageService.createWorkflowRun(localWorkflowRun);\n\n const inputFilePath = await writeTempFile({\n filename: `${runId}_input.json`,\n data: actionScriptBuild.actionScript,\n });\n const mutationFilePath = await writeTempFile({\n filename: `${runId}_mutations.json`,\n data: [],\n });\n const authFilePath = await writeTempFile({\n filename: `${runId}_auth.json`,\n data: authContent,\n });\n\n const outputFilePath = path.join(await ensureTempDir(), `${runId}_output.json`);\n\n const executionProcess = await spawnElectronApp({\n runId: runId,\n projectId: projectId,\n entityId: testCaseId,\n runType: LocalRunType.GENERATION,\n runMode: \"explore\",\n inputFilePath: inputFilePath,\n mutationFilePath: mutationFilePath,\n outputFilePath: outputFilePath,\n authFilePath: authFilePath,\n timeoutMs: timeoutMs,\n });\n\n const startedAt = executionProcess.startedAt;\n\n const result = await waitForCompletion({ executionProcess: executionProcess });\n\n const completedAt = Date.now();\n\n let actionScriptResult = result.actionScript;\n if (actionScriptResult === null || actionScriptResult === undefined) {\n actionScriptResult = await readGeneratedActionScriptFile({\n inputFilePath: inputFilePath,\n });\n }\n\n const workflowResult = await checkWorkflowRunResult({\n projectId: projectId,\n workflowRunId: actionScriptBuild.workflowRunId,\n });\n\n let finalSuccess = result.success && workflowResult.success;\n let finalError = result.error ?? workflowResult.error;\n\n if (!workflowResult.success) {\n finalSuccess = false;\n finalError = workflowResult.error ?? \"Workflow reported failure\";\n }\n\n const generatedActionSteps = extractGeneratedActionSteps(actionScriptResult);\n if (finalSuccess && (!generatedActionSteps || generatedActionSteps.length === 0)) {\n finalSuccess = false;\n finalError = \"Generation finished without executable action steps.\";\n }\n\n const persistedTestScriptId = finalSuccess\n ? ensureGeneratedTestScript({\n projectId: projectId,\n testCase: testCase,\n projectUrl: project.url,\n testScriptId: actionScriptBuild.testScriptId,\n actionScriptId: actionScriptBuild.actionScriptId,\n actionScriptResult: actionScriptResult,\n })\n : actionScriptBuild.testScriptId;\n\n const runResult: ILocalRunResult = {\n id: runId,\n projectId: projectId,\n testScriptId: persistedTestScriptId,\n runType: LocalRunType.GENERATION,\n status: finalSuccess ? LocalRunStatus.PASSED : LocalRunStatus.FAILED,\n startedAt: startedAt,\n completedAt: completedAt,\n executionTimeMs: completedAt - startedAt,\n errorMessage: finalError,\n localScreenshots: [],\n actionScriptResult: actionScriptResult,\n };\n\n storageService.createRunResult(runResult);\n storageService.updateWorkflowRun({\n projectId: projectId,\n workflowRunId: actionScriptBuild.workflowRunId,\n updates: {\n status: finalSuccess ? LocalWorkflowRunStatus.COMPLETED : LocalWorkflowRunStatus.FAILED,\n finishedAt: completedAt,\n error: finalError,\n },\n });\n\n await cleanupTempFiles({\n filePaths: [inputFilePath, mutationFilePath, authFilePath, outputFilePath],\n });\n\n return runResult;\n}\n\n/**\n * Execute test script replay.\n * @param params - The parameters.\n * @param params.projectId - The project ID.\n * @param params.testScriptId - The test script ID.\n * @param params.timeoutMs - Optional timeout in milliseconds.\n * @returns The run result.\n */\nexport async function executeReplay (params: {\n projectId: string;\n testScriptId: string;\n timeoutMs?: number;\n}): Promise<ILocalRunResult> {\n const { projectId, testScriptId, timeoutMs = DEFAULT_REPLAY_TIMEOUT_MS } = params;\n\n const storageService = getProjectStorageService();\n\n const testScript = storageService.getTestScript({\n projectId: projectId,\n testScriptId: testScriptId,\n });\n if (!testScript) {\n throw new Error(`Test script not found: ${testScriptId}`);\n }\n\n const project = storageService.getProject(projectId);\n if (!project) {\n throw new Error(`Project not found: ${projectId}`);\n }\n\n const useCase = storageService.getUseCase({\n projectId: projectId,\n useCaseId: testScript.useCaseId,\n });\n if (!useCase) {\n throw new Error(`Use case not found: ${testScript.useCaseId}`);\n }\n\n const testCase = storageService.getTestCase({\n projectId: projectId,\n testCaseId: testScript.testCaseId,\n });\n if (!testCase) {\n throw new Error(`Test case not found: ${testScript.testCaseId}`);\n }\n\n const userId = getAuthenticatedUserId();\n const authContent = buildStudioAuthContent();\n\n const localSecretOptions = buildSecretOptionsFromLocalSecrets({\n localSecrets: storageService.listSecrets(projectId),\n });\n const localWorkflowFiles = storageService.resolveWorkflowFilesForExecution({\n projectId: projectId,\n useCaseId: testScript.useCaseId,\n testCaseId: testScript.testCaseId,\n });\n const workflowFileMetadata = mapWorkflowFilesToMetadata(localWorkflowFiles);\n\n const runId = generateRunId();\n const actionScriptBuild = buildReplayActionScript({\n projectSecretOptions: localSecretOptions,\n projectWorkflowFiles: workflowFileMetadata,\n testScript: testScript,\n userId: userId,\n });\n const localWorkflowRun = buildLocalWorkflowRun({\n projectId: projectId,\n workflowRunId: actionScriptBuild.workflowRunId,\n ownerId: userId,\n taskDef: actionScriptBuild.actionParams,\n });\n storageService.createWorkflowRun(localWorkflowRun);\n\n const inputFilePath = await writeTempFile({\n filename: `${runId}_input.json`,\n data: actionScriptBuild.actionScript,\n });\n const mutationFilePath = await writeTempFile({\n filename: `${runId}_mutations.json`,\n data: [],\n });\n const authFilePath = await writeTempFile({\n filename: `${runId}_auth.json`,\n data: authContent,\n });\n\n const outputFilePath = path.join(await ensureTempDir(), `${runId}_output.json`);\n\n const executionProcess = await spawnElectronApp({\n runId: runId,\n projectId: projectId,\n entityId: testScriptId,\n runType: LocalRunType.REPLAY,\n runMode: \"engine\",\n inputFilePath: inputFilePath,\n mutationFilePath: mutationFilePath,\n outputFilePath: outputFilePath,\n authFilePath: authFilePath,\n timeoutMs: timeoutMs,\n });\n\n const startedAt = executionProcess.startedAt;\n\n const result = await waitForCompletion({ executionProcess: executionProcess });\n\n const completedAt = Date.now();\n\n const workflowResult = await checkWorkflowRunResult({\n projectId: projectId,\n workflowRunId: actionScriptBuild.workflowRunId,\n });\n\n let finalSuccess = result.success && workflowResult.success;\n let finalError = result.error ?? workflowResult.error;\n\n if (!workflowResult.success) {\n finalSuccess = false;\n finalError = workflowResult.error ?? \"Workflow reported failure\";\n }\n\n const runResult: ILocalRunResult = {\n id: runId,\n projectId: projectId,\n testScriptId: testScriptId,\n runType: LocalRunType.REPLAY,\n status: finalSuccess ? LocalRunStatus.PASSED : LocalRunStatus.FAILED,\n startedAt: startedAt,\n completedAt: completedAt,\n executionTimeMs: completedAt - startedAt,\n errorMessage: finalError,\n localScreenshots: [],\n actionScriptResult: result.actionScript,\n };\n\n storageService.createRunResult(runResult);\n storageService.updateWorkflowRun({\n projectId: projectId,\n workflowRunId: actionScriptBuild.workflowRunId,\n updates: {\n status: finalSuccess ? LocalWorkflowRunStatus.COMPLETED : LocalWorkflowRunStatus.FAILED,\n finishedAt: completedAt,\n error: finalError,\n },\n });\n\n await cleanupTempFiles({\n filePaths: [inputFilePath, mutationFilePath, authFilePath, outputFilePath],\n });\n\n return runResult;\n}\n\n/**\n * Cancel an active execution.\n * @param params - The parameters.\n * @param params.runId - The run ID to cancel.\n * @returns Whether the cancellation was successful.\n */\nexport function cancelExecution (params: { runId: string; }): boolean {\n const { runId } = params;\n\n const executionProcess = activeProcesses.get(runId);\n if (!executionProcess) {\n return false;\n }\n\n if (executionProcess.status !== LocalRunStatus.RUNNING) {\n return false;\n }\n\n executionProcess.status = LocalRunStatus.CANCELLED;\n\n // Clear all timers\n if (executionProcess.timeoutTimer) {\n clearTimeout(executionProcess.timeoutTimer);\n }\n if (executionProcess.inactivityCheckInterval) {\n clearInterval(executionProcess.inactivityCheckInterval);\n }\n\n try {\n executionProcess.process.kill(\"SIGTERM\");\n } catch {\n /* ignore kill errors */\n }\n\n return true;\n}\n\n/**\n * List active executions.\n * @returns Array of active execution info.\n */\nexport function listActiveExecutions (): Array<{\n runId: string;\n projectId: string;\n entityId: string;\n runType: LocalRunType;\n pid: number;\n startedAt: number;\n status: LocalRunStatus;\n}> {\n return Array.from(activeProcesses.values()).map((proc) => ({\n runId: proc.runId,\n projectId: proc.projectId,\n entityId: proc.entityId,\n runType: proc.runType,\n pid: proc.pid,\n startedAt: proc.startedAt,\n status: proc.status,\n }));\n}\n","/**\n * Tool registry for local-qa.\n * Manages all available tools and provides lookup functionality.\n */\n\nimport { getLogger } from \"../../shared/logger.js\";\nimport type { IMcpToolResult, ILocalMcpTool } from \"../types/index.js\";\nimport {\n EmptyInputSchema,\n AuthLoginInputSchema,\n AuthPollInputSchema,\n ListSessionsInputSchema,\n CleanupSessionsInputSchema,\n ProjectCreateInputSchema,\n ProjectIdInputSchema,\n ProjectUpdateInputSchema,\n UseCaseSaveInputSchema,\n UseCaseListInputSchema,\n UseCaseGetInputSchema,\n UseCaseUpdateInputSchema,\n UseCaseDeleteInputSchema,\n TestCaseSaveInputSchema,\n TestCaseListInputSchema,\n TestCaseGetInputSchema,\n TestCaseUpdateInputSchema,\n TestCaseDeleteInputSchema,\n TestScriptSaveInputSchema,\n TestScriptListInputSchema,\n TestScriptGetInputSchema,\n TestScriptDeleteInputSchema,\n RunResultListInputSchema,\n RunResultGetInputSchema,\n ExecuteTestGenerationInputSchema,\n ExecuteReplayInputSchema,\n CancelExecutionInputSchema,\n SecretCreateInputSchema,\n SecretListInputSchema,\n SecretGetInputSchema,\n SecretUpdateInputSchema,\n SecretDeleteInputSchema,\n PublishProjectInputSchema,\n PublishTestScriptInputSchema,\n WorkflowFileCreateInputSchema,\n WorkflowFileListInputSchema,\n WorkflowFileListAvailableInputSchema,\n WorkflowFileGetInputSchema,\n WorkflowFileUpdateInputSchema,\n WorkflowFileDeleteInputSchema,\n CloudProjectListInputSchema,\n CloudPullProjectInputSchema,\n CloudPullUseCaseInputSchema,\n CloudPullTestCaseInputSchema,\n CloudSecretCreateInputSchema,\n CloudSecretListInputSchema,\n CloudSecretGetInputSchema,\n CloudSecretUpdateInputSchema,\n CloudSecretDeleteInputSchema,\n CloudWorkflowFileCreateInputSchema,\n CloudWorkflowFileListInputSchema,\n CloudWorkflowFileListAvailableInputSchema,\n CloudWorkflowFileGetInputSchema,\n CloudWorkflowFileUpdateInputSchema,\n CloudWorkflowFileDeleteInputSchema,\n RunTestInputSchema,\n ExplorePageInputSchema,\n ExecuteActionInputSchema,\n GetScreenshotInputSchema,\n GetPageStateInputSchema,\n} from \"../contracts/index.js\";\nimport {\n cancelExecution,\n executeReplay,\n executeTestGeneration,\n getAuthService,\n getProjectStorageService,\n getStorageService,\n} from \"../services/index.js\";\nimport { DeviceCodePollStatus, LocalTestScriptStatus, LocalWorkflowFileEntityType } from \"../types/index.js\";\nimport type { ILocalWorkflowFile } from \"../types/index.js\";\n\n/**\n * Create a child logger for correlation.\n */\nfunction createChildLogger (correlationId: string) {\n const logger = getLogger();\n return {\n info: (msg: string, meta?: Record<string, unknown>) => logger.info(msg, { ...meta, correlationId: correlationId }),\n error: (msg: string, meta?: Record<string, unknown>) => logger.error(msg, { ...meta, correlationId: correlationId }),\n warn: (msg: string, meta?: Record<string, unknown>) => logger.warn(msg, { ...meta, correlationId: correlationId }),\n debug: (msg: string, meta?: Record<string, unknown>) => logger.debug(msg, { ...meta, correlationId: correlationId }),\n };\n}\n\n// ========================================\n// Auth Tools\n// ========================================\n\nconst authStatusTool: ILocalMcpTool = {\n name: \"muggle_auth_status\",\n description: \"Check current authentication status. Shows if you're logged in and when your session expires.\",\n inputSchema: EmptyInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_auth_status\");\n\n const authService = getAuthService();\n const status = authService.getAuthStatus();\n\n if (!status.authenticated) {\n return {\n content: \"Not authenticated. Use muggle_auth_login to authenticate.\",\n isError: false,\n data: { authenticated: false },\n };\n }\n\n const content = [\n \"## Authentication Status\",\n \"\",\n `**Authenticated:** Yes`,\n `**Email:** ${status.email ?? \"N/A\"}`,\n `**User ID:** ${status.userId ?? \"N/A\"}`,\n `**Expires:** ${status.expiresAt}`,\n status.isExpired ? \"**Warning:** Token has expired. Please re-authenticate.\" : \"\",\n ].filter(Boolean).join(\"\\n\");\n\n return { content: content, isError: false, data: status };\n },\n};\n\nconst authLoginTool: ILocalMcpTool = {\n name: \"muggle_auth_login\",\n description: \"Start authentication with the Muggle Test service. Opens a browser-based login flow and waits for confirmation by default. If login is still pending after the wait timeout, use muggle_auth_poll to finish authentication.\",\n inputSchema: AuthLoginInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_auth_login\");\n\n const input = AuthLoginInputSchema.parse(ctx.input);\n const authService = getAuthService();\n\n try {\n const deviceCodeResponse = await authService.startDeviceCodeFlow();\n const waitForCompletion = input.waitForCompletion ?? true;\n\n if (!waitForCompletion) {\n return {\n content: [\n \"## Login Started\",\n \"\",\n `**User Code:** ${deviceCodeResponse.userCode}`,\n `**Verification URL:** ${deviceCodeResponse.verificationUri}`,\n \"\",\n deviceCodeResponse.browserOpened\n ? \"A browser window has been opened. Please complete the login there.\"\n : `Please open the URL above and enter the code.`,\n \"\",\n \"After completing login in your browser, call `muggle_auth_poll` to finish.\",\n ].join(\"\\n\"),\n isError: false,\n data: {\n deviceCode: deviceCodeResponse.deviceCode,\n userCode: deviceCodeResponse.userCode,\n verificationUri: deviceCodeResponse.verificationUri,\n browserOpened: deviceCodeResponse.browserOpened,\n },\n };\n }\n\n const pollResult = await authService.waitForDeviceCodeAuthorization({\n deviceCode: deviceCodeResponse.deviceCode,\n intervalSeconds: deviceCodeResponse.interval,\n timeoutMs: input.timeoutMs,\n });\n\n if (pollResult.status === DeviceCodePollStatus.Complete) {\n return {\n content: `## Login Successful\\n\\n**Email:** ${pollResult.email ?? \"N/A\"}\\n\\nYou are now authenticated.`,\n isError: false,\n data: { success: true, email: pollResult.email },\n };\n }\n\n return {\n content: [\n \"## Login Pending\",\n \"\",\n pollResult.message,\n \"\",\n \"Use `muggle_auth_poll` to check for completion.\",\n ].join(\"\\n\"),\n isError: false,\n data: { status: pollResult.status, message: pollResult.message },\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Login failed\", { error: errorMessage });\n return { content: `Login failed: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst authPollTool: ILocalMcpTool = {\n name: \"muggle_auth_poll\",\n description: \"Poll for login completion after starting the login flow with muggle_auth_login. Call this after the user completes authentication in their browser.\",\n inputSchema: AuthPollInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_auth_poll\");\n\n const input = AuthPollInputSchema.parse(ctx.input);\n const authService = getAuthService();\n\n const deviceCode = input.deviceCode ?? authService.getPendingDeviceCode();\n\n if (!deviceCode) {\n return {\n content: \"No pending login found. Please start a new login with muggle_auth_login.\",\n isError: true,\n };\n }\n\n try {\n const result = await authService.pollDeviceCode(deviceCode);\n\n if (result.status === DeviceCodePollStatus.Complete) {\n return {\n content: `## Login Complete\\n\\n**Email:** ${result.email ?? \"N/A\"}\\n\\nYou are now authenticated.`,\n isError: false,\n data: { success: true, email: result.email },\n };\n }\n\n return {\n content: result.message,\n isError: result.status === DeviceCodePollStatus.Error,\n data: { status: result.status, message: result.message },\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Poll failed\", { error: errorMessage });\n return { content: `Poll failed: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst authLogoutTool: ILocalMcpTool = {\n name: \"muggle_auth_logout\",\n description: \"Log out and clear stored credentials.\",\n inputSchema: EmptyInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_auth_logout\");\n\n const authService = getAuthService();\n const result = authService.logout();\n\n if (result) {\n return { content: \"Successfully logged out.\", isError: false };\n }\n\n return { content: \"No active session to log out from.\", isError: false };\n },\n};\n\n// ========================================\n// Session Tools\n// ========================================\n\nconst checkStatusTool: ILocalMcpTool = {\n name: \"muggle_check_status\",\n description: \"Check the status of Muggle Test Local. This verifies the connection to web-service and shows current session information.\",\n inputSchema: EmptyInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_check_status\");\n\n const authService = getAuthService();\n const storageService = getStorageService();\n const authStatus = authService.getAuthStatus();\n\n const content = [\n \"## Muggle Test Local Status\",\n \"\",\n `**Data Directory:** ${storageService.getDataDir()}`,\n `**Sessions Directory:** ${storageService.getSessionsDir()}`,\n \"\",\n \"### Authentication\",\n `**Authenticated:** ${authStatus.authenticated ? \"Yes\" : \"No\"}`,\n authStatus.email ? `**Email:** ${authStatus.email}` : \"\",\n authStatus.expiresAt ? `**Expires:** ${authStatus.expiresAt}` : \"\",\n ].filter(Boolean).join(\"\\n\");\n\n return { content: content, isError: false };\n },\n};\n\nconst listSessionsTool: ILocalMcpTool = {\n name: \"muggle_list_sessions\",\n description: \"List all stored testing sessions. Shows session IDs, status, and metadata for each session.\",\n inputSchema: ListSessionsInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_list_sessions\");\n\n const input = ListSessionsInputSchema.parse(ctx.input);\n const storageService = getStorageService();\n const sessions = storageService.listSessionsWithMetadata();\n const limit = input.limit ?? 10;\n const limited = sessions.slice(0, limit);\n\n if (limited.length === 0) {\n return { content: \"No sessions found.\", isError: false, data: { sessions: [] } };\n }\n\n const lines = limited.map((s) => {\n return `- **${s.sessionId}** - ${s.status} - ${s.targetUrl} (${s.stepsCount ?? 0} steps)`;\n });\n\n const content = [\n \"## Sessions\",\n \"\",\n ...lines,\n \"\",\n sessions.length > limit ? `Showing ${limit} of ${sessions.length} sessions.` : \"\",\n ].filter(Boolean).join(\"\\n\");\n\n return { content: content, isError: false, data: { sessions: limited } };\n },\n};\n\nconst cleanupSessionsTool: ILocalMcpTool = {\n name: \"muggle_cleanup_sessions\",\n description: \"Clean up old testing sessions to free disk space. Deletes sessions older than the specified age (default: 30 days).\",\n inputSchema: CleanupSessionsInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cleanup_sessions\");\n\n const input = CleanupSessionsInputSchema.parse(ctx.input);\n const storageService = getStorageService();\n const deleted = storageService.cleanupOldSessions({ maxAgeDays: input.max_age_days });\n\n return {\n content: `Cleaned up ${deleted} old session(s).`,\n isError: false,\n data: { deletedCount: deleted },\n };\n },\n};\n\n// ========================================\n// Project Tools\n// ========================================\n\nconst projectCreateTool: ILocalMcpTool = {\n name: \"muggle_project_create\",\n description: \"Create a new local project for testing. Projects store use cases, test cases, and test scripts locally.\",\n inputSchema: ProjectCreateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_project_create\");\n\n const input = ProjectCreateInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n\n try {\n const project = storage.createProject({\n name: input.name,\n description: input.description,\n url: input.url,\n });\n\n const content = [\n \"## Project Created\",\n \"\",\n `**Project ID:** ${project.id}`,\n `**Name:** ${project.name}`,\n `**URL:** ${project.url}`,\n `**Description:** ${project.description}`,\n \"\",\n `**Local Path:** ${storage.getProjectPath(project.id)}`,\n \"\",\n \"You can now create use cases and test cases for this project.\",\n ].join(\"\\n\");\n\n return { content: content, isError: false, data: project };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Failed to create project\", { error: errorMessage });\n return { content: `Failed to create project: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst projectListTool: ILocalMcpTool = {\n name: \"muggle_project_list\",\n description: \"List all local projects.\",\n inputSchema: EmptyInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_project_list\");\n\n const storage = getProjectStorageService();\n const projects = storage.listProjects();\n\n if (projects.length === 0) {\n return { content: \"No projects found. Use muggle_project_create to create one.\", isError: false, data: { projects: [] } };\n }\n\n const lines = projects.map((p) => {\n return `- **${p.name}** (${p.id}) - ${p.url}`;\n });\n\n const content = [\"## Local Projects\", \"\", ...lines].join(\"\\n\");\n\n return { content: content, isError: false, data: { projects: projects } };\n },\n};\n\nconst projectGetTool: ILocalMcpTool = {\n name: \"muggle_project_get\",\n description: \"Get details of a local project including statistics.\",\n inputSchema: ProjectIdInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_project_get\");\n\n const input = ProjectIdInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const project = storage.getProject(input.projectId);\n\n if (!project) {\n return { content: `Project not found: ${input.projectId}`, isError: true };\n }\n\n const useCases = storage.listUseCases(project.id);\n const testCases = storage.listTestCases({ projectId: project.id });\n const testScripts = storage.listTestScripts({ projectId: project.id });\n\n const content = [\n \"## Project Details\",\n \"\",\n `**ID:** ${project.id}`,\n `**Name:** ${project.name}`,\n `**URL:** ${project.url}`,\n `**Description:** ${project.description}`,\n \"\",\n \"### Statistics\",\n `- Use Cases: ${useCases.length}`,\n `- Test Cases: ${testCases.length}`,\n `- Test Scripts: ${testScripts.length}`,\n ].join(\"\\n\");\n\n return {\n content: content,\n isError: false,\n data: {\n project: project,\n stats: {\n useCases: useCases.length,\n testCases: testCases.length,\n testScripts: testScripts.length,\n },\n },\n };\n },\n};\n\nconst projectUpdateTool: ILocalMcpTool = {\n name: \"muggle_project_update\",\n description: \"Update a local project's name, description, or URL.\",\n inputSchema: ProjectUpdateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_project_update\");\n\n const input = ProjectUpdateInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n\n try {\n const project = storage.updateProject({\n id: input.projectId,\n name: input.name,\n description: input.description,\n url: input.url,\n });\n\n return {\n content: `Project updated: ${project.name}`,\n isError: false,\n data: project,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Failed to update project\", { error: errorMessage });\n return { content: `Failed to update project: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst projectDeleteTool: ILocalMcpTool = {\n name: \"muggle_project_delete\",\n description: \"Delete a local project and all its contents (use cases, test cases, test scripts).\",\n inputSchema: ProjectIdInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_project_delete\");\n\n const input = ProjectIdInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const deleted = storage.deleteProject(input.projectId);\n\n if (deleted) {\n return { content: `Project deleted: ${input.projectId}`, isError: false };\n }\n\n return { content: `Project not found: ${input.projectId}`, isError: true };\n },\n};\n\n// ========================================\n// Use Case Tools\n// ========================================\n\nconst useCaseSaveTool: ILocalMcpTool = {\n name: \"muggle_use_case_save\",\n description: \"Save a use case (from preview API) to local storage. Use qa_use_case_prompt_preview to generate the use case first.\",\n inputSchema: UseCaseSaveInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_use_case_save\");\n\n const input = UseCaseSaveInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n\n try {\n const useCase = storage.saveUseCase({\n projectId: input.projectId,\n title: input.useCase.title,\n userStory: input.useCase.userStory,\n description: input.useCase.description,\n breakdownItems: input.useCase.breakdownItems,\n });\n\n return {\n content: `Use case saved: ${useCase.title} (${useCase.id})`,\n isError: false,\n data: useCase,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Failed to save use case\", { error: errorMessage });\n return { content: `Failed to save use case: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst useCaseListTool: ILocalMcpTool = {\n name: \"muggle_use_case_list\",\n description: \"List all use cases for a local project.\",\n inputSchema: UseCaseListInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_use_case_list\");\n\n const input = UseCaseListInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const useCases = storage.listUseCases(input.projectId);\n\n if (useCases.length === 0) {\n return { content: \"No use cases found.\", isError: false, data: { useCases: [] } };\n }\n\n const lines = useCases.map((uc) => `- **${uc.title}** (${uc.id})`);\n const content = [\"## Use Cases\", \"\", ...lines].join(\"\\n\");\n\n return { content: content, isError: false, data: { useCases: useCases } };\n },\n};\n\nconst useCaseGetTool: ILocalMcpTool = {\n name: \"muggle_use_case_get\",\n description: \"Get details of a local use case.\",\n inputSchema: UseCaseGetInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_use_case_get\");\n\n const input = UseCaseGetInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const useCase = storage.getUseCase({ projectId: input.projectId, useCaseId: input.useCaseId });\n\n if (!useCase) {\n return { content: `Use case not found: ${input.useCaseId}`, isError: true };\n }\n\n const content = [\n \"## Use Case Details\",\n \"\",\n `**ID:** ${useCase.id}`,\n `**Title:** ${useCase.title}`,\n useCase.userStory ? `**User Story:** ${useCase.userStory}` : \"\",\n useCase.description ? `**Description:** ${useCase.description}` : \"\",\n ].filter(Boolean).join(\"\\n\");\n\n return { content: content, isError: false, data: useCase };\n },\n};\n\nconst useCaseUpdateTool: ILocalMcpTool = {\n name: \"muggle_use_case_update\",\n description: \"Update an existing local use case with new values. Only provided fields will be updated.\",\n inputSchema: UseCaseUpdateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_use_case_update\");\n\n const input = UseCaseUpdateInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n\n try {\n const useCase = storage.updateUseCase({\n projectId: input.projectId,\n useCaseId: input.useCaseId,\n updates: {\n title: input.title,\n userStory: input.userStory,\n description: input.description,\n breakdownItems: input.breakdownItems,\n },\n });\n\n return { content: `Use case updated: ${useCase.title}`, isError: false, data: useCase };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Failed to update use case\", { error: errorMessage });\n return { content: `Failed to update use case: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst useCaseDeleteTool: ILocalMcpTool = {\n name: \"muggle_use_case_delete\",\n description: \"Delete a local use case.\",\n inputSchema: UseCaseDeleteInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_use_case_delete\");\n\n const input = UseCaseDeleteInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const deleted = storage.deleteUseCase({ projectId: input.projectId, useCaseId: input.useCaseId });\n\n if (deleted) {\n return { content: `Use case deleted: ${input.useCaseId}`, isError: false };\n }\n\n return { content: `Use case not found: ${input.useCaseId}`, isError: true };\n },\n};\n\n// ========================================\n// Test Case Tools\n// ========================================\n\nconst testCaseSaveTool: ILocalMcpTool = {\n name: \"muggle_test_case_save\",\n description: \"Save a test case (from preview API) to local storage. Use qa_test_case_generate_from_prompt to generate test cases first.\",\n inputSchema: TestCaseSaveInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_test_case_save\");\n\n const input = TestCaseSaveInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n\n try {\n const testCase = storage.saveTestCase({\n projectId: input.projectId,\n useCaseId: input.useCaseId,\n title: input.testCase.title,\n description: input.testCase.description,\n goal: input.testCase.goal,\n precondition: input.testCase.precondition,\n instructions: input.testCase.instructions,\n expectedResult: input.testCase.expectedResult,\n url: input.testCase.url,\n });\n\n return {\n content: `Test case saved: ${testCase.title} (${testCase.id})`,\n isError: false,\n data: testCase,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Failed to save test case\", { error: errorMessage });\n return { content: `Failed to save test case: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst testCaseListTool: ILocalMcpTool = {\n name: \"muggle_test_case_list\",\n description: \"List test cases for a local project, optionally filtered by use case.\",\n inputSchema: TestCaseListInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_test_case_list\");\n\n const input = TestCaseListInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const testCases = storage.listTestCases({ projectId: input.projectId, useCaseId: input.useCaseId });\n\n if (testCases.length === 0) {\n return { content: \"No test cases found.\", isError: false, data: { testCases: [] } };\n }\n\n const lines = testCases.map((tc) => `- **${tc.title}** (${tc.id})`);\n const content = [\"## Test Cases\", \"\", ...lines].join(\"\\n\");\n\n return { content: content, isError: false, data: { testCases: testCases } };\n },\n};\n\nconst testCaseGetTool: ILocalMcpTool = {\n name: \"muggle_test_case_get\",\n description: \"Get details of a local test case.\",\n inputSchema: TestCaseGetInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_test_case_get\");\n\n const input = TestCaseGetInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const testCase = storage.getTestCase({ projectId: input.projectId, testCaseId: input.testCaseId });\n\n if (!testCase) {\n return { content: `Test case not found: ${input.testCaseId}`, isError: true };\n }\n\n const content = [\n \"## Test Case Details\",\n \"\",\n `**ID:** ${testCase.id}`,\n `**Title:** ${testCase.title}`,\n `**Goal:** ${testCase.goal}`,\n `**URL:** ${testCase.url}`,\n testCase.precondition ? `**Precondition:** ${testCase.precondition}` : \"\",\n `**Expected Result:** ${testCase.expectedResult}`,\n ].filter(Boolean).join(\"\\n\");\n\n return { content: content, isError: false, data: testCase };\n },\n};\n\nconst testCaseUpdateTool: ILocalMcpTool = {\n name: \"muggle_test_case_update\",\n description: \"Update an existing local test case with new values. Only provided fields will be updated.\",\n inputSchema: TestCaseUpdateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_test_case_update\");\n\n const input = TestCaseUpdateInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n\n try {\n const testCase = storage.updateTestCase({\n projectId: input.projectId,\n testCaseId: input.testCaseId,\n updates: {\n title: input.title,\n description: input.description,\n goal: input.goal,\n precondition: input.precondition,\n instructions: input.instructions,\n expectedResult: input.expectedResult,\n url: input.url,\n },\n });\n\n return { content: `Test case updated: ${testCase.title}`, isError: false, data: testCase };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Failed to update test case\", { error: errorMessage });\n return { content: `Failed to update test case: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst testCaseDeleteTool: ILocalMcpTool = {\n name: \"muggle_test_case_delete\",\n description: \"Delete a local test case.\",\n inputSchema: TestCaseDeleteInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_test_case_delete\");\n\n const input = TestCaseDeleteInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const deleted = storage.deleteTestCase({ projectId: input.projectId, testCaseId: input.testCaseId });\n\n if (deleted) {\n return { content: `Test case deleted: ${input.testCaseId}`, isError: false };\n }\n\n return { content: `Test case not found: ${input.testCaseId}`, isError: true };\n },\n};\n\n// ========================================\n// Test Script Tools\n// ========================================\n\nconst testScriptListTool: ILocalMcpTool = {\n name: \"muggle_test_script_list\",\n description: \"List all test scripts in a project, optionally filtered by test case.\",\n inputSchema: TestScriptListInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_test_script_list\");\n\n const input = TestScriptListInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const testScripts = storage.listTestScripts({ projectId: input.projectId, testCaseId: input.testCaseId });\n\n if (testScripts.length === 0) {\n return { content: \"No test scripts found.\", isError: false, data: { testScripts: [] } };\n }\n\n const lines = testScripts.map((ts) => `- **${ts.name}** (${ts.id}) - ${ts.status}`);\n const content = [\"## Test Scripts\", \"\", ...lines].join(\"\\n\");\n\n return { content: content, isError: false, data: { testScripts: testScripts } };\n },\n};\n\nconst testScriptGetTool: ILocalMcpTool = {\n name: \"muggle_test_script_get\",\n description: \"Get details of a local test script including action script steps.\",\n inputSchema: TestScriptGetInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_test_script_get\");\n\n const input = TestScriptGetInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const testScript = storage.getTestScript({ projectId: input.projectId, testScriptId: input.testScriptId });\n\n if (!testScript) {\n return { content: `Test script not found: ${input.testScriptId}`, isError: true };\n }\n\n const content = [\n \"## Test Script Details\",\n \"\",\n `**ID:** ${testScript.id}`,\n `**Name:** ${testScript.name}`,\n `**URL:** ${testScript.url}`,\n `**Status:** ${testScript.status}`,\n testScript.goal ? `**Goal:** ${testScript.goal}` : \"\",\n testScript.actionScript ? `**Steps:** ${testScript.actionScript.length}` : \"\",\n ].filter(Boolean).join(\"\\n\");\n\n return { content: content, isError: false, data: testScript };\n },\n};\n\nconst testScriptSaveTool: ILocalMcpTool = {\n name: \"muggle_test_script_save\",\n description: \"Save a test script locally. Test scripts are typically generated by muggle_execute_test_generation, but can also be manually saved.\",\n inputSchema: TestScriptSaveInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_test_script_save\");\n\n const input = TestScriptSaveInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n\n try {\n const testScript = storage.createTestScript({\n projectId: input.projectId,\n useCaseId: input.useCaseId,\n testCaseId: input.testCaseId,\n name: input.testScript.name,\n url: input.testScript.url,\n });\n\n if (input.testScript.actionScript) {\n storage.updateTestScript({\n projectId: input.projectId,\n testScriptId: testScript.id,\n updates: {\n goal: input.testScript.goal,\n description: input.testScript.description,\n precondition: input.testScript.precondition,\n expectedResult: input.testScript.expectedResult,\n actionScriptId: input.testScript.actionScriptId,\n actionScript: input.testScript.actionScript,\n status: LocalTestScriptStatus.GENERATED,\n },\n });\n }\n\n return {\n content: `Test script saved: ${testScript.name} (${testScript.id})`,\n isError: false,\n data: testScript,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Failed to save test script\", { error: errorMessage });\n return { content: `Failed to save test script: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst testScriptDeleteTool: ILocalMcpTool = {\n name: \"muggle_test_script_delete\",\n description: \"Delete a local test script. Note: This only deletes the local copy; cloud copies remain.\",\n inputSchema: TestScriptDeleteInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_test_script_delete\");\n\n const input = TestScriptDeleteInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const deleted = storage.deleteTestScript({ projectId: input.projectId, testScriptId: input.testScriptId });\n\n if (deleted) {\n return { content: `Test script deleted: ${input.testScriptId}`, isError: false };\n }\n\n return { content: `Test script not found: ${input.testScriptId}`, isError: true };\n },\n};\n\n// ========================================\n// Run Result Tools\n// ========================================\n\nconst runResultListTool: ILocalMcpTool = {\n name: \"muggle_run_result_list\",\n description: \"List run results (test generation and replay history) for a project, optionally filtered by test script.\",\n inputSchema: RunResultListInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_run_result_list\");\n\n const input = RunResultListInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n let results = storage.listRunResults(input.projectId);\n\n if (input.testScriptId) {\n results = results.filter((r) => r.testScriptId === input.testScriptId);\n }\n\n const limit = input.limit ?? 20;\n results = results.slice(0, limit);\n\n if (results.length === 0) {\n return { content: \"No run results found.\", isError: false, data: { results: [] } };\n }\n\n const lines = results.map((r) => {\n return `- **${r.id}** - ${r.runType} - ${r.status} (${r.executionTimeMs ?? 0}ms)`;\n });\n\n const content = [\"## Run Results\", \"\", ...lines].join(\"\\n\");\n\n return { content: content, isError: false, data: { results: results } };\n },\n};\n\nconst runResultGetTool: ILocalMcpTool = {\n name: \"muggle_run_result_get\",\n description: \"Get detailed information about a run result including screenshots and action script output.\",\n inputSchema: RunResultGetInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_run_result_get\");\n\n const input = RunResultGetInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const result = storage.getRunResult({ projectId: input.projectId, runId: input.runId });\n\n if (!result) {\n return { content: `Run result not found: ${input.runId}`, isError: true };\n }\n\n const content = [\n \"## Run Result Details\",\n \"\",\n `**ID:** ${result.id}`,\n `**Type:** ${result.runType}`,\n `**Status:** ${result.status}`,\n `**Test Script:** ${result.testScriptId}`,\n `**Duration:** ${result.executionTimeMs ?? 0}ms`,\n result.errorMessage ? `**Error:** ${result.errorMessage}` : \"\",\n ].filter(Boolean).join(\"\\n\");\n\n return { content: content, isError: false, data: result };\n },\n};\n\n// ========================================\n// Execution Tools (Placeholder - requires electron-app)\n// ========================================\n\nconst executeTestGenerationTool: ILocalMcpTool = {\n name: \"muggle_execute_test_generation\",\n description: \"Execute test script generation for a test case. Requires explicit approval before launching electron-app in explore mode.\",\n inputSchema: ExecuteTestGenerationInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_execute_test_generation\");\n\n const input = ExecuteTestGenerationInputSchema.parse(ctx.input);\n\n if (!input.approveElectronAppLaunch) {\n return {\n content: [\n \"## Electron App Launch Required\",\n \"\",\n \"This tool will launch the electron-app to generate a test script.\",\n \"Please set `approveElectronAppLaunch: true` to proceed.\",\n \"\",\n \"**Note:** The electron-app will open a browser window and navigate to your test URL.\",\n ].join(\"\\n\"),\n isError: false,\n data: { requiresApproval: true },\n };\n }\n\n try {\n const result = await executeTestGeneration({\n projectId: input.projectId,\n testCaseId: input.testCaseId,\n timeoutMs: input.timeoutMs,\n });\n\n const content = [\n \"## Test Generation \" + (result.status === \"passed\" ? \"Successful\" : \"Failed\"),\n \"\",\n `**Run ID:** ${result.id}`,\n `**Test Script ID:** ${result.testScriptId}`,\n `**Status:** ${result.status}`,\n `**Duration:** ${result.executionTimeMs}ms`,\n result.errorMessage ? `**Error:** ${result.errorMessage}` : \"\",\n ].filter(Boolean).join(\"\\n\");\n\n return {\n content: content,\n isError: result.status !== \"passed\",\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Test generation failed\", { error: errorMessage });\n return { content: `Test generation failed: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst executeReplayTool: ILocalMcpTool = {\n name: \"muggle_execute_replay\",\n description: \"Execute test script replay. Requires explicit approval before launching electron-app in engine mode.\",\n inputSchema: ExecuteReplayInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_execute_replay\");\n\n const input = ExecuteReplayInputSchema.parse(ctx.input);\n\n if (!input.approveElectronAppLaunch) {\n return {\n content: [\n \"## Electron App Launch Required\",\n \"\",\n \"This tool will launch the electron-app to replay a test script.\",\n \"Please set `approveElectronAppLaunch: true` to proceed.\",\n \"\",\n \"**Note:** The electron-app will open a browser window and execute the test steps.\",\n ].join(\"\\n\"),\n isError: false,\n data: { requiresApproval: true },\n };\n }\n\n try {\n const result = await executeReplay({\n projectId: input.projectId,\n testScriptId: input.testScriptId,\n timeoutMs: input.timeoutMs,\n });\n\n const content = [\n \"## Test Replay \" + (result.status === \"passed\" ? \"Successful\" : \"Failed\"),\n \"\",\n `**Run ID:** ${result.id}`,\n `**Test Script ID:** ${result.testScriptId}`,\n `**Status:** ${result.status}`,\n `**Duration:** ${result.executionTimeMs}ms`,\n result.errorMessage ? `**Error:** ${result.errorMessage}` : \"\",\n ].filter(Boolean).join(\"\\n\");\n\n return {\n content: content,\n isError: result.status !== \"passed\",\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Test replay failed\", { error: errorMessage });\n return { content: `Test replay failed: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst cancelExecutionTool: ILocalMcpTool = {\n name: \"muggle_cancel_execution\",\n description: \"Cancel an active test generation or replay execution.\",\n inputSchema: CancelExecutionInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cancel_execution\");\n\n const input = CancelExecutionInputSchema.parse(ctx.input);\n\n const cancelled = cancelExecution({ runId: input.runId });\n\n if (cancelled) {\n return { content: `Execution cancelled: ${input.runId}`, isError: false };\n }\n\n return { content: `No active execution found with ID: ${input.runId}`, isError: true };\n },\n};\n\n// ========================================\n// Secret Tools\n// ========================================\n\nconst secretCreateTool: ILocalMcpTool = {\n name: \"muggle_secret_create\",\n description: \"Create a local secret for a project. Secret values are stored locally and never returned in tool output.\",\n inputSchema: SecretCreateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_secret_create\");\n\n const input = SecretCreateInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n\n try {\n const secret = storage.saveSecret({\n projectId: input.projectId,\n secretName: input.secretName,\n value: input.value,\n description: input.description,\n source: input.source,\n });\n\n return {\n content: `Secret created: ${secret.secretName} (${secret.id})`,\n isError: false,\n data: { id: secret.id, secretName: secret.secretName },\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Failed to create secret\", { error: errorMessage });\n return { content: `Failed to create secret: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst secretListTool: ILocalMcpTool = {\n name: \"muggle_secret_list\",\n description: \"List local secret metadata for a project without exposing secret values.\",\n inputSchema: SecretListInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_secret_list\");\n\n const input = SecretListInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const secrets = storage.listSecrets(input.projectId);\n\n if (secrets.length === 0) {\n return { content: \"No secrets found.\", isError: false, data: { secrets: [] } };\n }\n\n const lines = secrets.map((s) => `- **${s.secretName}** (${s.id}) - ${s.description}`);\n const content = [\"## Secrets\", \"\", ...lines].join(\"\\n\");\n\n // Return metadata without values\n const metadata = secrets.map((s) => ({\n id: s.id,\n secretName: s.secretName,\n description: s.description,\n source: s.source,\n }));\n\n return { content: content, isError: false, data: { secrets: metadata } };\n },\n};\n\nconst secretGetTool: ILocalMcpTool = {\n name: \"muggle_secret_get\",\n description: \"Get local secret metadata by ID without exposing the secret value.\",\n inputSchema: SecretGetInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_secret_get\");\n\n const input = SecretGetInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const secret = storage.getSecret({ projectId: input.projectId, secretId: input.secretId });\n\n if (!secret) {\n return { content: `Secret not found: ${input.secretId}`, isError: true };\n }\n\n const content = [\n \"## Secret Details\",\n \"\",\n `**ID:** ${secret.id}`,\n `**Name:** ${secret.secretName}`,\n `**Description:** ${secret.description}`,\n secret.source ? `**Source:** ${secret.source}` : \"\",\n ].filter(Boolean).join(\"\\n\");\n\n return {\n content: content,\n isError: false,\n data: { id: secret.id, secretName: secret.secretName, description: secret.description },\n };\n },\n};\n\nconst secretUpdateTool: ILocalMcpTool = {\n name: \"muggle_secret_update\",\n description: \"Update a local secret. Secret values are stored but never returned in tool output.\",\n inputSchema: SecretUpdateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_secret_update\");\n\n const input = SecretUpdateInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n\n try {\n const secret = storage.updateSecret({\n projectId: input.projectId,\n secretId: input.secretId,\n updates: {\n secretName: input.secretName,\n value: input.value,\n description: input.description,\n source: input.source,\n },\n });\n\n return {\n content: `Secret updated: ${secret.secretName}`,\n isError: false,\n data: { id: secret.id, secretName: secret.secretName },\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Failed to update secret\", { error: errorMessage });\n return { content: `Failed to update secret: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst secretDeleteTool: ILocalMcpTool = {\n name: \"muggle_secret_delete\",\n description: \"Delete a local secret.\",\n inputSchema: SecretDeleteInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_secret_delete\");\n\n const input = SecretDeleteInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const deleted = storage.deleteSecret({ projectId: input.projectId, secretId: input.secretId });\n\n if (deleted) {\n return { content: `Secret deleted: ${input.secretId}`, isError: false };\n }\n\n return { content: `Secret not found: ${input.secretId}`, isError: true };\n },\n};\n\n// ========================================\n// Local Workflow File Tools\n// ========================================\n\nconst workflowFileCreateTool: ILocalMcpTool = {\n name: \"muggle_workflow_file_create\",\n description: \"Create a local workflow file by copying a file into project storage and assigning scope associations.\",\n inputSchema: WorkflowFileCreateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_workflow_file_create\");\n\n const input = WorkflowFileCreateInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n\n try {\n const workflowFile = storage.saveWorkflowFile({\n projectId: input.projectId,\n sourceFilePath: input.filePath,\n description: input.description,\n tags: input.tags,\n associations: input.associations?.map((a) => ({\n entityType: a.entityType as LocalWorkflowFileEntityType,\n entityId: a.entityId,\n })),\n });\n\n return {\n content: `Workflow file created: ${workflowFile.id}`,\n isError: false,\n data: workflowFile,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Failed to create workflow file\", { error: errorMessage });\n return { content: `Failed to create workflow file: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst workflowFileListTool: ILocalMcpTool = {\n name: \"muggle_workflow_file_list\",\n description: \"List local workflow files for a project.\",\n inputSchema: WorkflowFileListInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_workflow_file_list\");\n\n const input = WorkflowFileListInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const files = storage.listWorkflowFiles(input.projectId);\n\n if (files.length === 0) {\n return { content: \"No workflow files found.\", isError: false, data: { files: [] } };\n }\n\n const lines = files.map((f) => `- **${f.id}** - ${f.description}`);\n const content = [\"## Workflow Files\", \"\", ...lines].join(\"\\n\");\n\n return { content: content, isError: false, data: { files: files } };\n },\n};\n\nconst workflowFileListAvailableTool: ILocalMcpTool = {\n name: \"muggle_workflow_file_list_available\",\n description: \"List local workflow files available to a use case or test case based on scope associations.\",\n inputSchema: WorkflowFileListAvailableInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_workflow_file_list_available\");\n\n const input = WorkflowFileListAvailableInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const files = storage.resolveWorkflowFilesForExecution({\n projectId: input.projectId,\n useCaseId: input.entityType === \"use_case\" ? input.entityId : undefined,\n testCaseId: input.entityType === \"test_case\" ? input.entityId : undefined,\n });\n\n if (files.length === 0) {\n return { content: \"No available workflow files.\", isError: false, data: { files: [] } };\n }\n\n const lines = files.map((f: ILocalWorkflowFile) => `- **${f.id}** - ${f.description}`);\n const content = [\"## Available Workflow Files\", \"\", ...lines].join(\"\\n\");\n\n return { content: content, isError: false, data: { files: files } };\n },\n};\n\nconst workflowFileGetTool: ILocalMcpTool = {\n name: \"muggle_workflow_file_get\",\n description: \"Get a local workflow file and its scope associations.\",\n inputSchema: WorkflowFileGetInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_workflow_file_get\");\n\n const input = WorkflowFileGetInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const file = storage.getWorkflowFile({ projectId: input.projectId, fileId: input.fileId });\n\n if (!file) {\n return { content: `Workflow file not found: ${input.fileId}`, isError: true };\n }\n\n const content = [\n \"## Workflow File Details\",\n \"\",\n `**ID:** ${file.id}`,\n `**Description:** ${file.description}`,\n file.tags?.length ? `**Tags:** ${file.tags.join(\", \")}` : \"\",\n ].filter(Boolean).join(\"\\n\");\n\n return { content: content, isError: false, data: file };\n },\n};\n\nconst workflowFileUpdateTool: ILocalMcpTool = {\n name: \"muggle_workflow_file_update\",\n description: \"Update local workflow file metadata and scope associations.\",\n inputSchema: WorkflowFileUpdateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_workflow_file_update\");\n\n const input = WorkflowFileUpdateInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n\n try {\n const file = storage.updateWorkflowFile({\n projectId: input.projectId,\n fileId: input.fileId,\n updates: {\n description: input.description,\n tags: input.tags,\n associations: input.associations?.map((a) => ({\n entityType: a.entityType as LocalWorkflowFileEntityType,\n entityId: a.entityId,\n })),\n },\n });\n\n return { content: `Workflow file updated: ${file.id}`, isError: false, data: file };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.error(\"Failed to update workflow file\", { error: errorMessage });\n return { content: `Failed to update workflow file: ${errorMessage}`, isError: true };\n }\n },\n};\n\nconst workflowFileDeleteTool: ILocalMcpTool = {\n name: \"muggle_workflow_file_delete\",\n description: \"Delete a local workflow file.\",\n inputSchema: WorkflowFileDeleteInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_workflow_file_delete\");\n\n const input = WorkflowFileDeleteInputSchema.parse(ctx.input);\n const storage = getProjectStorageService();\n const deleted = storage.deleteWorkflowFile({ projectId: input.projectId, fileId: input.fileId });\n\n if (deleted) {\n return { content: `Workflow file deleted: ${input.fileId}`, isError: false };\n }\n\n return { content: `Workflow file not found: ${input.fileId}`, isError: true };\n },\n};\n\n// ========================================\n// Publishing Tools (Placeholder - requires prompt-service client)\n// ========================================\n\nconst publishProjectTool: ILocalMcpTool = {\n name: \"muggle_publish_project\",\n description: \"Publish a local project to the Muggle AI cloud. Creates or updates the cloud project and syncs use cases, test cases, and test scripts.\",\n inputSchema: PublishProjectInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_publish_project\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Project publishing is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst publishTestScriptTool: ILocalMcpTool = {\n name: \"muggle_publish_test_script\",\n description: \"Check the cloud status of a test script. Test scripts are automatically uploaded to Firebase by electron-app during muggle_execute_test_generation. This tool verifies if the upload completed and returns the cloud reference.\",\n inputSchema: PublishTestScriptInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_publish_test_script\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Test script publishing is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\n// ========================================\n// Cloud Sync Tools (Placeholder - requires prompt-service client)\n// ========================================\n\nconst cloudProjectListTool: ILocalMcpTool = {\n name: \"muggle_cloud_project_list\",\n description: \"List all cloud projects for the authenticated user. Requires authentication.\",\n inputSchema: CloudProjectListInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_project_list\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud project listing is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudPullProjectTool: ILocalMcpTool = {\n name: \"muggle_cloud_pull_project\",\n description: \"Pull a cloud project to local storage with URL rewritten to localhost. Downloads project, use cases, and test cases.\",\n inputSchema: CloudPullProjectInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_pull_project\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud project pull is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudPullUseCaseTool: ILocalMcpTool = {\n name: \"muggle_cloud_pull_use_case\",\n description: \"Pull a single cloud use case and its test cases to local storage with URL rewritten to localhost.\",\n inputSchema: CloudPullUseCaseInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_pull_use_case\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud use case pull is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudPullTestCaseTool: ILocalMcpTool = {\n name: \"muggle_cloud_pull_test_case\",\n description: \"Pull a single cloud test case to local storage with URL rewritten to localhost.\",\n inputSchema: CloudPullTestCaseInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_pull_test_case\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud test case pull is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudSecretCreateTool: ILocalMcpTool = {\n name: \"muggle_cloud_secret_create\",\n description: \"Create a cloud secret. Secret values are sent to prompt-service but never returned in tool output.\",\n inputSchema: CloudSecretCreateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_secret_create\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud secret creation is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudSecretListTool: ILocalMcpTool = {\n name: \"muggle_cloud_secret_list\",\n description: \"List cloud secret metadata for a project without exposing secret values.\",\n inputSchema: CloudSecretListInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_secret_list\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud secret listing is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudSecretGetTool: ILocalMcpTool = {\n name: \"muggle_cloud_secret_get\",\n description: \"Get cloud secret metadata without exposing the secret value.\",\n inputSchema: CloudSecretGetInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_secret_get\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud secret get is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudSecretUpdateTool: ILocalMcpTool = {\n name: \"muggle_cloud_secret_update\",\n description: \"Update a cloud secret without returning the secret value.\",\n inputSchema: CloudSecretUpdateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_secret_update\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud secret update is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudSecretDeleteTool: ILocalMcpTool = {\n name: \"muggle_cloud_secret_delete\",\n description: \"Delete a cloud secret.\",\n inputSchema: CloudSecretDeleteInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_secret_delete\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud secret deletion is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudWorkflowFileCreateTool: ILocalMcpTool = {\n name: \"muggle_cloud_workflow_file_create\",\n description: \"Upload a workflow file to cloud storage with scope associations.\",\n inputSchema: CloudWorkflowFileCreateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_workflow_file_create\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud workflow file creation is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudWorkflowFileListTool: ILocalMcpTool = {\n name: \"muggle_cloud_workflow_file_list\",\n description: \"List cloud workflow files for a project.\",\n inputSchema: CloudWorkflowFileListInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_workflow_file_list\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud workflow file listing is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudWorkflowFileListAvailableTool: ILocalMcpTool = {\n name: \"muggle_cloud_workflow_file_list_available\",\n description: \"List cloud workflow files available to a scoped entity.\",\n inputSchema: CloudWorkflowFileListAvailableInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_workflow_file_list_available\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud workflow file list available is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudWorkflowFileGetTool: ILocalMcpTool = {\n name: \"muggle_cloud_workflow_file_get\",\n description: \"Get cloud workflow file metadata and scope associations.\",\n inputSchema: CloudWorkflowFileGetInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_workflow_file_get\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud workflow file get is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudWorkflowFileUpdateTool: ILocalMcpTool = {\n name: \"muggle_cloud_workflow_file_update\",\n description: \"Update cloud workflow file metadata and scope associations.\",\n inputSchema: CloudWorkflowFileUpdateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_workflow_file_update\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud workflow file update is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\nconst cloudWorkflowFileDeleteTool: ILocalMcpTool = {\n name: \"muggle_cloud_workflow_file_delete\",\n description: \"Delete a cloud workflow file.\",\n inputSchema: CloudWorkflowFileDeleteInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_cloud_workflow_file_delete\");\n\n // TODO: Implement with prompt-service client\n return {\n content: \"Cloud workflow file deletion is not yet implemented in the unified package. This requires the prompt-service client.\",\n isError: true,\n };\n },\n};\n\n// ========================================\n// Test Execution Tools (Web Service Based - Placeholder)\n// ========================================\n\nconst runTestTool: ILocalMcpTool = {\n name: \"muggle_run_test\",\n description: \"Execute an AI-driven test flow against a web application. Provide a URL and natural language test instructions.\",\n inputSchema: RunTestInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_run_test\");\n\n // TODO: Implement with web-service client\n return {\n content: \"AI-driven test execution is not yet implemented in the unified package. This requires the web-service client.\",\n isError: true,\n };\n },\n};\n\nconst explorePageTool: ILocalMcpTool = {\n name: \"muggle_explore_page\",\n description: \"Navigate to a URL and return a structured analysis of the page including interactive elements, forms, and suggested actions.\",\n inputSchema: ExplorePageInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_explore_page\");\n\n // TODO: Implement with web-service client\n return {\n content: \"Page exploration is not yet implemented in the unified package. This requires the web-service client.\",\n isError: true,\n };\n },\n};\n\nconst executeActionTool: ILocalMcpTool = {\n name: \"muggle_execute_action\",\n description: \"Execute a single browser action (click, type, select, scroll, navigate, or wait) on the current page.\",\n inputSchema: ExecuteActionInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_execute_action\");\n\n // TODO: Implement with web-service client\n return {\n content: \"Browser action execution is not yet implemented in the unified package. This requires the web-service client.\",\n isError: true,\n };\n },\n};\n\nconst getScreenshotTool: ILocalMcpTool = {\n name: \"muggle_get_screenshot\",\n description: \"Capture the current page state as a screenshot. Optionally specify an execution ID or use the current active session.\",\n inputSchema: GetScreenshotInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_get_screenshot\");\n\n // TODO: Implement with web-service client\n return {\n content: \"Screenshot capture is not yet implemented in the unified package. This requires the web-service client.\",\n isError: true,\n };\n },\n};\n\nconst getPageStateTool: ILocalMcpTool = {\n name: \"muggle_get_page_state\",\n description: \"Get the current page state (URL, title) from the active browser session. Use this to understand where the browser is currently navigated.\",\n inputSchema: GetPageStateInputSchema,\n execute: async (ctx) => {\n const logger = createChildLogger(ctx.correlationId);\n logger.info(\"Executing muggle_get_page_state\");\n\n // TODO: Implement with web-service client\n return {\n content: \"Page state retrieval is not yet implemented in the unified package. This requires the web-service client.\",\n isError: true,\n };\n },\n};\n\n// ========================================\n// All Tools Registry\n// ========================================\n\n/**\n * All registered local QA tools.\n */\nexport const allLocalQaTools: ILocalMcpTool[] = [\n // Auth tools\n authStatusTool,\n authLoginTool,\n authPollTool,\n authLogoutTool,\n // Session tools\n checkStatusTool,\n listSessionsTool,\n cleanupSessionsTool,\n getPageStateTool,\n // Project tools\n projectCreateTool,\n projectListTool,\n projectGetTool,\n projectUpdateTool,\n projectDeleteTool,\n // Local secret tools\n secretCreateTool,\n secretListTool,\n secretGetTool,\n secretUpdateTool,\n secretDeleteTool,\n // Local workflow file tools\n workflowFileCreateTool,\n workflowFileListTool,\n workflowFileListAvailableTool,\n workflowFileGetTool,\n workflowFileUpdateTool,\n workflowFileDeleteTool,\n // Use case tools\n useCaseSaveTool,\n useCaseListTool,\n useCaseGetTool,\n useCaseUpdateTool,\n useCaseDeleteTool,\n // Test case tools\n testCaseSaveTool,\n testCaseListTool,\n testCaseGetTool,\n testCaseUpdateTool,\n testCaseDeleteTool,\n // Test script tools\n testScriptSaveTool,\n testScriptListTool,\n testScriptGetTool,\n testScriptDeleteTool,\n // Run result tools\n runResultListTool,\n runResultGetTool,\n // Execution tools\n executeTestGenerationTool,\n executeReplayTool,\n cancelExecutionTool,\n // Publishing tools\n publishProjectTool,\n publishTestScriptTool,\n // Cloud sync tools\n cloudProjectListTool,\n cloudPullProjectTool,\n cloudPullUseCaseTool,\n cloudPullTestCaseTool,\n cloudSecretCreateTool,\n cloudSecretListTool,\n cloudSecretGetTool,\n cloudSecretUpdateTool,\n cloudSecretDeleteTool,\n cloudWorkflowFileCreateTool,\n cloudWorkflowFileListTool,\n cloudWorkflowFileListAvailableTool,\n cloudWorkflowFileGetTool,\n cloudWorkflowFileUpdateTool,\n cloudWorkflowFileDeleteTool,\n // Test execution tools (web-service based)\n runTestTool,\n explorePageTool,\n executeActionTool,\n getScreenshotTool,\n];\n\n/**\n * Map of tool name to tool definition for fast lookup.\n */\nconst toolMap: Map<string, ILocalMcpTool> = new Map(\n allLocalQaTools.map((tool) => [tool.name, tool]),\n);\n\n/**\n * Get a tool by name.\n */\nexport function getTool (name: string): ILocalMcpTool | undefined {\n return toolMap.get(name);\n}\n\n/**\n * Execute a tool by name.\n */\nexport async function executeTool (\n name: string,\n input: unknown,\n correlationId: string,\n): Promise<IMcpToolResult> {\n const tool = getTool(name);\n\n if (!tool) {\n return {\n content: `Unknown tool: ${name}. Available tools: ${allLocalQaTools.map((t) => t.name).join(\", \")}`,\n isError: true,\n };\n }\n\n return tool.execute({ input: input, correlationId: correlationId });\n}\n"]}