@fairfox/polly 0.3.0 → 0.3.1

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.
@@ -6,11 +6,11 @@
6
6
  "// Docker container management for TLA+ verification\n\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\n\nexport type DockerRunResult = {\n exitCode: number;\n stdout: string;\n stderr: string;\n};\n\nexport class DockerRunner {\n private containerName = \"web-ext-tla-verify\";\n\n /**\n * Check if Docker is available\n */\n async isDockerAvailable(): Promise<boolean> {\n try {\n const result = await this.runCommand(\"docker\", [\"--version\"]);\n return result.exitCode === 0;\n } catch {\n return false;\n }\n }\n\n /**\n * Check if TLA+ image exists\n */\n async hasImage(): Promise<boolean> {\n try {\n const result = await this.runCommand(\"docker\", [\"images\", \"-q\", \"talex5/tla\"]);\n return result.stdout.trim().length > 0;\n } catch {\n return false;\n }\n }\n\n /**\n * Pull TLA+ image\n */\n async pullImage(onProgress?: (line: string) => void): Promise<void> {\n await this.runCommandStreaming(\"docker\", [\"pull\", \"talex5/tla:latest\"], onProgress);\n }\n\n /**\n * Run TLC model checker on a spec\n */\n async runTLC(\n specPath: string,\n options?: {\n workers?: number;\n timeout?: number;\n }\n ): Promise<TLCResult> {\n // Ensure spec file exists\n if (!fs.existsSync(specPath)) {\n throw new Error(`Spec file not found: ${specPath}`);\n }\n\n const specDir = path.dirname(specPath);\n const specName = path.basename(specPath, \".tla\");\n const cfgPath = path.join(specDir, `${specName}.cfg`);\n\n // Ensure cfg file exists\n if (!fs.existsSync(cfgPath)) {\n throw new Error(`Config file not found: ${cfgPath}`);\n }\n\n // Run TLC in Docker\n // Use sh -c to cd into /specs directory so TLC can find imported modules\n const args = [\n \"run\",\n \"--rm\",\n \"-v\",\n `${specDir}:/specs`,\n \"talex5/tla\",\n \"sh\",\n \"-c\",\n `cd /specs && tlc -workers ${options?.workers || 1} ${specName}.tla`,\n ];\n\n const result = await this.runCommand(\"docker\", args, {\n timeout: options?.timeout || 60000,\n });\n\n return this.parseTLCOutput(result);\n }\n\n /**\n * Parse TLC output\n */\n private parseTLCOutput(result: DockerRunResult): TLCResult {\n const output = result.stdout + result.stderr;\n\n // Check for violations\n const violationMatch = output.match(/Error: Invariant (.*?) is violated/);\n if (violationMatch) {\n return {\n success: false,\n violation: {\n type: \"invariant\",\n name: violationMatch[1],\n trace: this.extractTrace(output),\n },\n output,\n };\n }\n\n // Check for errors\n if (result.exitCode !== 0 || output.includes(\"Error:\")) {\n return {\n success: false,\n error: this.extractError(output),\n output,\n };\n }\n\n // Success\n const statesMatch = output.match(/(\\d+) states generated/);\n const distinctMatch = output.match(/(\\d+) distinct states/);\n\n return {\n success: true,\n stats: {\n statesGenerated: statesMatch ? Number.parseInt(statesMatch[1]) : 0,\n distinctStates: distinctMatch ? Number.parseInt(distinctMatch[1]) : 0,\n },\n output,\n };\n }\n\n /**\n * Extract error trace from TLC output\n */\n private extractTrace(output: string): string[] {\n const lines = output.split(\"\\n\");\n const trace: string[] = [];\n let inTrace = false;\n\n for (const line of lines) {\n if (line.includes(\"State \") && line.includes(\":\")) {\n inTrace = true;\n trace.push(line);\n } else if (inTrace) {\n if (line.trim() === \"\" || line.startsWith(\"Error:\")) {\n break;\n }\n trace.push(line);\n }\n }\n\n return trace;\n }\n\n /**\n * Extract error message from TLC output\n */\n private extractError(output: string): string {\n const errorMatch = output.match(/Error: (.*?)(?:\\n|$)/);\n if (errorMatch) {\n return errorMatch[1];\n }\n\n // Look for common error patterns\n if (output.includes(\"Parse Error\")) {\n return \"TLA+ syntax error in specification\";\n }\n if (output.includes(\"Semantic Error\")) {\n return \"Semantic error in specification\";\n }\n\n return \"Unknown error occurred during model checking\";\n }\n\n /**\n * Run a command and return output\n */\n private runCommand(\n command: string,\n args: string[],\n options?: { timeout?: number }\n ): Promise<DockerRunResult> {\n return new Promise((resolve, reject) => {\n const proc = spawn(command, args);\n\n let stdout = \"\";\n let stderr = \"\";\n\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString();\n });\n\n proc.stderr.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n const timeout = options?.timeout\n ? setTimeout(() => {\n proc.kill();\n reject(new Error(`Command timed out after ${options.timeout}ms`));\n }, options.timeout)\n : null;\n\n proc.on(\"close\", (exitCode) => {\n if (timeout) clearTimeout(timeout);\n\n resolve({\n exitCode: exitCode || 0,\n stdout,\n stderr,\n });\n });\n\n proc.on(\"error\", (error) => {\n if (timeout) clearTimeout(timeout);\n reject(error);\n });\n });\n }\n\n /**\n * Run a command with streaming output\n */\n private runCommandStreaming(\n command: string,\n args: string[],\n onOutput?: (line: string) => void\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n const proc = spawn(command, args);\n\n proc.stdout.on(\"data\", (data) => {\n if (onOutput) {\n const lines = data.toString().split(\"\\n\");\n for (const line of lines) {\n if (line.trim()) {\n onOutput(line.trim());\n }\n }\n }\n });\n\n proc.stderr.on(\"data\", (data) => {\n if (onOutput) {\n const lines = data.toString().split(\"\\n\");\n for (const line of lines) {\n if (line.trim()) {\n onOutput(line.trim());\n }\n }\n }\n });\n\n proc.on(\"close\", (exitCode) => {\n if (exitCode === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${exitCode}`));\n }\n });\n\n proc.on(\"error\", reject);\n });\n }\n}\n\nexport type TLCResult = {\n success: boolean;\n violation?: {\n type: \"invariant\" | \"property\" | \"deadlock\";\n name?: string;\n trace: string[];\n };\n error?: string;\n stats?: {\n statesGenerated: number;\n distinctStates: number;\n };\n output: string;\n};\n",
7
7
  "#!/usr/bin/env bun\n// CLI for verification system\n\nimport * as fs from \"node:fs\"\nimport * as path from \"node:path\"\nimport { analyzeCodebase } from \"./extract/types\"\nimport { generateConfig } from \"./codegen/config\"\nimport { validateConfig } from \"./config/parser\"\n\nconst COLORS = {\n reset: \"\\x1b[0m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n gray: \"\\x1b[90m\",\n}\n\nfunction color(text: string, colorCode: string): string {\n return `${colorCode}${text}${COLORS.reset}`\n}\n\nasync function main() {\n const args = process.argv.slice(2)\n const command = args[0]\n\n switch (command) {\n case \"--setup\":\n case \"setup\":\n await setupCommand()\n break\n\n case \"--validate\":\n case \"validate\":\n await validateCommand()\n break\n\n case \"--help\":\n case \"help\":\n showHelp()\n break\n\n default:\n await verifyCommand()\n }\n}\n\nasync function setupCommand() {\n console.log(color(\"\\nšŸ” Analyzing codebase...\\n\", COLORS.blue))\n\n try {\n // Find tsconfig\n const tsConfigPath = findTsConfig()\n if (!tsConfigPath) {\n console.error(color(\"āŒ Could not find tsconfig.json\", COLORS.red))\n console.error(\" Run this command from your project root\")\n process.exit(1)\n }\n\n console.log(color(` Using: ${tsConfigPath}`, COLORS.gray))\n\n // Analyze codebase\n const analysis = await analyzeCodebase({\n tsConfigPath,\n stateFilePath: findStateFile()\n })\n\n if (!analysis.stateType) {\n console.log(color(\"\\nāš ļø Could not find state type definition\", COLORS.yellow))\n console.log(\" Expected to find a type named 'AppState' or 'State'\")\n console.log(\" in a file matching **/state*.ts\")\n console.log()\n console.log(\" You can still generate a config template:\")\n console.log(\" It will be empty and you'll need to fill it in manually.\")\n console.log()\n } else {\n console.log(color(`āœ“ Found state type with ${analysis.fields.length} field(s)`, COLORS.green))\n }\n\n console.log(color(`āœ“ Found ${analysis.messageTypes.length} message type(s)`, COLORS.green))\n\n // Show analysis summary\n if (analysis.fields.length > 0) {\n console.log(color(\"\\nšŸ“Š Configuration Summary:\\n\", COLORS.blue))\n\n const table = [\n [\"Field\", \"Type\", \"Status\"],\n [\"─\".repeat(30), \"─\".repeat(20), \"─\".repeat(20)],\n ]\n\n for (const field of analysis.fields) {\n const status = field.confidence === \"high\"\n ? color(\"āœ“ Auto-configured\", COLORS.green)\n : field.confidence === \"medium\"\n ? color(\"⚠ Review needed\", COLORS.yellow)\n : color(\"⚠ Manual config\", COLORS.red)\n\n table.push([field.path, field.type.kind, status])\n }\n\n for (const row of table) {\n console.log(` ${row[0].padEnd(32)} ${row[1].padEnd(22)} ${row[2]}`)\n }\n }\n\n // Generate config\n const configContent = generateConfig(analysis)\n const configPath = path.join(process.cwd(), \"specs\", \"verification.config.ts\")\n\n // Ensure directory exists\n const configDir = path.dirname(configPath)\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true })\n }\n\n // Write config\n fs.writeFileSync(configPath, configContent, \"utf-8\")\n\n console.log(color(\"\\nāœ… Configuration generated!\\n\", COLORS.green))\n console.log(` File: ${color(configPath, COLORS.blue)}`)\n console.log()\n console.log(color(\"šŸ“ Next steps:\", COLORS.blue))\n console.log()\n console.log(\" 1. Review the generated configuration file\")\n console.log(\" 2. Fill in values marked with /* CONFIGURE */\")\n console.log(\" 3. Run 'bun verify' to check your configuration\")\n console.log()\n console.log(color(\"šŸ’” Tip:\", COLORS.gray))\n console.log(color(\" Look for comments explaining what each field needs.\", COLORS.gray))\n console.log()\n\n } catch (error) {\n console.error(color(\"\\nāŒ Setup failed:\", COLORS.red))\n console.error(` ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n}\n\nasync function validateCommand() {\n const configPath = path.join(process.cwd(), \"specs\", \"verification.config.ts\")\n\n console.log(color(\"\\nšŸ” Validating configuration...\\n\", COLORS.blue))\n\n const result = validateConfig(configPath)\n\n if (result.valid) {\n console.log(color(\"āœ… Configuration is complete and valid!\\n\", COLORS.green))\n console.log(\" You can now run 'bun verify' to start verification.\")\n console.log()\n return\n }\n\n // Show errors\n const errors = result.issues.filter(i => i.severity === \"error\")\n const warnings = result.issues.filter(i => i.severity === \"warning\")\n\n if (errors.length > 0) {\n console.log(color(`āŒ Found ${errors.length} error(s):\\n`, COLORS.red))\n\n for (const error of errors) {\n console.log(color(` • ${error.message}`, COLORS.red))\n if (error.field) {\n console.log(color(` Field: ${error.field}`, COLORS.gray))\n }\n if (error.location) {\n console.log(color(` Location: line ${error.location.line}`, COLORS.gray))\n }\n console.log(color(` → ${error.suggestion}`, COLORS.yellow))\n console.log()\n }\n }\n\n if (warnings.length > 0) {\n console.log(color(`āš ļø Found ${warnings.length} warning(s):\\n`, COLORS.yellow))\n\n for (const warning of warnings) {\n console.log(color(` • ${warning.message}`, COLORS.yellow))\n if (warning.field) {\n console.log(color(` Field: ${warning.field}`, COLORS.gray))\n }\n console.log(color(` → ${warning.suggestion}`, COLORS.gray))\n console.log()\n }\n }\n\n console.log(color(\"Configuration incomplete. Please fix the errors above.\\n\", COLORS.red))\n process.exit(1)\n}\n\nasync function verifyCommand() {\n const configPath = path.join(process.cwd(), \"specs\", \"verification.config.ts\")\n\n console.log(color(\"\\nšŸ” Running verification...\\n\", COLORS.blue))\n\n // First validate config\n const validation = validateConfig(configPath)\n\n if (!validation.valid) {\n const errors = validation.issues.filter(i => i.severity === \"error\")\n console.log(color(`āŒ Configuration incomplete (${errors.length} error(s))\\n`, COLORS.red))\n\n for (const error of errors.slice(0, 3)) {\n console.log(color(` • ${error.message}`, COLORS.red))\n if (error.field) {\n console.log(color(` Field: ${error.field}`, COLORS.gray))\n }\n console.log()\n }\n\n if (errors.length > 3) {\n console.log(color(` ... and ${errors.length - 3} more error(s)`, COLORS.gray))\n console.log()\n }\n\n console.log(\" Run 'bun verify --validate' to see all issues\")\n console.log(\" Run 'bun verify --setup' to regenerate configuration\")\n console.log()\n process.exit(1)\n }\n\n console.log(color(\"āœ“ Configuration valid\", COLORS.green))\n console.log()\n\n // Run full verification\n try {\n await runFullVerification(configPath)\n } catch (error) {\n console.error(color(\"\\nāŒ Verification failed:\", COLORS.red))\n console.error(` ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n}\n\nasync function runFullVerification(configPath: string) {\n const { generateTLA } = await import(\"./codegen/tla\")\n const { DockerRunner } = await import(\"./runner/docker\")\n\n // Load config\n delete require.cache[require.resolve(path.resolve(configPath))]\n const configModule = require(path.resolve(configPath))\n const config = configModule.default || configModule\n\n // Analyze codebase\n console.log(color(\"šŸ“Š Analyzing codebase...\", COLORS.blue))\n const tsConfigPath = findTsConfig()\n if (!tsConfigPath) {\n throw new Error(\"Could not find tsconfig.json\")\n }\n\n const analysis = await analyzeCodebase({\n tsConfigPath,\n stateFilePath: findStateFile()\n })\n\n console.log(color(\"āœ“ Analysis complete\", COLORS.green))\n console.log()\n\n // Generate TLA+ specs\n console.log(color(\"šŸ“ Generating TLA+ specification...\", COLORS.blue))\n const { spec, cfg } = generateTLA(config, analysis)\n\n // Write specs to temp directory\n const specDir = path.join(process.cwd(), \"specs\", \"tla\", \"generated\")\n if (!fs.existsSync(specDir)) {\n fs.mkdirSync(specDir, { recursive: true })\n }\n\n const specPath = path.join(specDir, \"UserApp.tla\")\n const cfgPath = path.join(specDir, \"UserApp.cfg\")\n\n fs.writeFileSync(specPath, spec)\n fs.writeFileSync(cfgPath, cfg)\n\n // Copy base MessageRouter spec to generated directory so TLC can find it\n // Try multiple locations to find MessageRouter.tla:\n // 1. User's specs/tla/MessageRouter.tla (if they've customized it)\n // 2. Package's bundled specs/tla/MessageRouter.tla (when installed via npm)\n // 3. External polly directory (when using git submodule or manual clone)\n const possiblePaths = [\n // User's custom version\n path.join(process.cwd(), \"specs\", \"tla\", \"MessageRouter.tla\"),\n\n // Package's bundled version (when installed as npm package)\n // CLI runs from dist/cli.js, so specs/ is at ../specs/\n path.join(__dirname, \"..\", \"specs\", \"tla\", \"MessageRouter.tla\"),\n\n // When running from source in development\n path.join(__dirname, \"..\", \"..\", \"specs\", \"tla\", \"MessageRouter.tla\"),\n\n // External polly directory (common in monorepos or git submodules)\n path.join(process.cwd(), \"external\", \"polly\", \"packages\", \"verify\", \"specs\", \"tla\", \"MessageRouter.tla\"),\n\n // Node modules (scoped package)\n path.join(process.cwd(), \"node_modules\", \"@fairfox\", \"polly-verify\", \"specs\", \"tla\", \"MessageRouter.tla\"),\n ]\n\n let baseSpecPath: string | null = null\n for (const candidatePath of possiblePaths) {\n if (fs.existsSync(candidatePath)) {\n baseSpecPath = candidatePath\n break\n }\n }\n\n if (baseSpecPath) {\n const destSpecPath = path.join(specDir, \"MessageRouter.tla\")\n fs.copyFileSync(baseSpecPath, destSpecPath)\n console.log(color(\"āœ“ Copied MessageRouter.tla\", COLORS.green))\n } else {\n console.log(color(\"āš ļø Warning: MessageRouter.tla not found, verification may fail\", COLORS.yellow))\n console.log(color(` Searched in:`, COLORS.gray))\n for (const searchPath of possiblePaths) {\n console.log(color(` - ${searchPath}`, COLORS.gray))\n }\n }\n\n console.log(color(\"āœ“ Specification generated\", COLORS.green))\n console.log(color(` ${specPath}`, COLORS.gray))\n console.log()\n\n // Check Docker\n console.log(color(\"🐳 Checking Docker...\", COLORS.blue))\n const docker = new DockerRunner()\n\n if (!(await docker.isDockerAvailable())) {\n throw new Error(\"Docker is not available. Please install Docker and try again.\")\n }\n\n if (!(await docker.hasImage())) {\n console.log(color(\" Pulling TLA+ image (this may take a moment)...\", COLORS.gray))\n await docker.pullImage((line) => {\n console.log(color(` ${line}`, COLORS.gray))\n })\n }\n\n console.log(color(\"āœ“ Docker ready\", COLORS.green))\n console.log()\n\n // Run TLC\n console.log(color(\"āš™ļø Running TLC model checker...\", COLORS.blue))\n console.log(color(\" This may take a minute...\", COLORS.gray))\n console.log()\n\n const result = await docker.runTLC(specPath, {\n workers: 2,\n timeout: 120000 // 2 minutes\n })\n\n // Display results\n if (result.success) {\n console.log(color(\"āœ… Verification passed!\\n\", COLORS.green))\n console.log(color(\"Statistics:\", COLORS.blue))\n console.log(color(` States explored: ${result.stats?.statesGenerated || 0}`, COLORS.gray))\n console.log(color(` Distinct states: ${result.stats?.distinctStates || 0}`, COLORS.gray))\n console.log()\n } else {\n console.log(color(\"āŒ Verification failed!\\n\", COLORS.red))\n\n if (result.violation) {\n console.log(color(`Invariant violated: ${result.violation.name}\\n`, COLORS.red))\n console.log(color(\"Trace to violation:\", COLORS.yellow))\n for (const line of result.violation.trace.slice(0, 20)) {\n console.log(color(` ${line}`, COLORS.gray))\n }\n if (result.violation.trace.length > 20) {\n console.log(color(` ... (${result.violation.trace.length - 20} more lines)`, COLORS.gray))\n }\n } else if (result.error) {\n console.log(color(`Error: ${result.error}`, COLORS.red))\n }\n\n console.log()\n console.log(color(\"Full output saved to:\", COLORS.gray))\n console.log(color(` ${path.join(specDir, \"tlc-output.log\")}`, COLORS.gray))\n fs.writeFileSync(path.join(specDir, \"tlc-output.log\"), result.output)\n\n process.exit(1)\n }\n}\n\nfunction showHelp() {\n console.log(`\n${color(\"bun verify\", COLORS.blue)} - Formal verification for web extensions\n\n${color(\"Commands:\", COLORS.blue)}\n\n ${color(\"bun verify\", COLORS.green)}\n Run verification (validates config, generates specs, runs TLC)\n\n ${color(\"bun verify --setup\", COLORS.green)}\n Analyze codebase and generate configuration file\n\n ${color(\"bun verify --validate\", COLORS.green)}\n Validate existing configuration without running verification\n\n ${color(\"bun verify --help\", COLORS.green)}\n Show this help message\n\n${color(\"Getting Started:\", COLORS.blue)}\n\n 1. Run ${color(\"bun verify --setup\", COLORS.green)} to generate configuration\n 2. Review ${color(\"specs/verification.config.ts\", COLORS.blue)} and fill in marked fields\n 3. Run ${color(\"bun verify --validate\", COLORS.green)} to check your configuration\n 4. Run ${color(\"bun verify\", COLORS.green)} to start verification\n\n${color(\"Configuration Help:\", COLORS.blue)}\n\n The generated config file uses special markers:\n\n ${color(\"/* CONFIGURE */\", COLORS.yellow)} - Replace with your value\n ${color(\"/* REVIEW */\", COLORS.yellow)} - Check auto-generated value\n ${color(\"null\", COLORS.yellow)} - Must be replaced with concrete value\n\n${color(\"Learn More:\", COLORS.blue)}\n\n Documentation: https://github.com/fairfox/web-ext\n TLA+ Resources: https://learntla.com\n`)\n}\n\nfunction findTsConfig(): string | null {\n const locations = [\n path.join(process.cwd(), \"tsconfig.json\"),\n path.join(process.cwd(), \"packages\", \"web-ext\", \"tsconfig.json\"),\n ]\n\n for (const loc of locations) {\n if (fs.existsSync(loc)) {\n return loc\n }\n }\n\n return null\n}\n\nfunction findStateFile(): string | undefined {\n const locations = [\n path.join(process.cwd(), \"types\", \"state.ts\"),\n path.join(process.cwd(), \"src\", \"types\", \"state.ts\"),\n path.join(process.cwd(), \"packages\", \"web-ext\", \"src\", \"shared\", \"state\", \"app-state.ts\"),\n ]\n\n for (const loc of locations) {\n if (fs.existsSync(loc)) {\n return loc\n }\n }\n\n return undefined\n}\n\nmain().catch((error) => {\n console.error(color(\"\\nāŒ Fatal error:\", COLORS.red))\n console.error(` ${error instanceof Error ? error.message : String(error)}`)\n if (error instanceof Error && error.stack) {\n console.error(color(\"\\nStack trace:\", COLORS.gray))\n console.error(color(error.stack, COLORS.gray))\n }\n process.exit(1)\n})\n",
8
8
  "// Type extraction from TypeScript using ts-morph\n\nimport { Project, SourceFile, Type, TypeFormatFlags } from \"ts-morph\"\nimport type { TypeInfo, TypeKind, FieldAnalysis, Confidence, CodebaseAnalysis } from \"../types\"\nimport { HandlerExtractor } from \"./handlers\"\n\nexport class TypeExtractor {\n private project: Project\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n })\n }\n\n /**\n * Analyze the codebase and extract state types and message types\n */\n async analyzeCodebase(stateFilePath?: string): Promise<CodebaseAnalysis> {\n // Find state type\n const stateType = stateFilePath\n ? this.extractStateType(stateFilePath)\n : this.findStateType()\n\n // Find message types\n const messageTypes = this.findMessageTypes()\n\n // Analyze fields\n const fields = stateType ? this.analyzeFields(stateType) : []\n\n // Extract message handlers\n const configFilePath = this.project.getCompilerOptions().configFilePath\n const tsConfigPath = typeof configFilePath === \"string\" ? configFilePath : \"tsconfig.json\"\n const handlerExtractor = new HandlerExtractor(tsConfigPath)\n const handlerAnalysis = handlerExtractor.extractHandlers()\n\n return {\n stateType,\n messageTypes: Array.from(new Set([...messageTypes, ...handlerAnalysis.messageTypes])),\n fields,\n handlers: handlerAnalysis.handlers,\n }\n }\n\n /**\n * Extract state type from a specific file\n */\n private extractStateType(filePath: string): TypeInfo | null {\n const sourceFile = this.project.getSourceFile(filePath)\n if (!sourceFile) {\n return null\n }\n\n // Look for type alias named \"AppState\" or similar\n const typeAlias = sourceFile.getTypeAlias(\"AppState\")\n || sourceFile.getTypeAlias(\"State\")\n || sourceFile.getTypeAliases()[0]\n\n if (!typeAlias) {\n return null\n }\n\n const type = typeAlias.getType()\n return this.convertType(type, typeAlias.getName())\n }\n\n /**\n * Find state type by searching common patterns\n */\n private findStateType(): TypeInfo | null {\n // Search for files with \"state\" in the name\n const stateFiles = this.project.getSourceFiles(\"**/state*.ts\")\n\n for (const file of stateFiles) {\n const typeAlias = file.getTypeAlias(\"AppState\")\n || file.getTypeAlias(\"State\")\n\n if (typeAlias) {\n const type = typeAlias.getType()\n return this.convertType(type, typeAlias.getName())\n }\n }\n\n return null\n }\n\n /**\n * Find message types by searching for type unions\n */\n private findMessageTypes(): string[] {\n const messageTypes: string[] = []\n\n // Search for files with \"message\" in the name\n const messageFiles = this.project.getSourceFiles(\"**/message*.ts\")\n\n for (const file of messageFiles) {\n // Look for type aliases that are unions\n for (const typeAlias of file.getTypeAliases()) {\n const type = typeAlias.getType()\n if (type.isUnion()) {\n // Extract message type literals\n for (const unionType of type.getUnionTypes()) {\n if (unionType.isObject()) {\n const typeProperty = unionType.getProperty(\"type\")\n if (typeProperty) {\n const typeType = typeProperty.getTypeAtLocation(file)\n if (typeType.isStringLiteral()) {\n messageTypes.push(typeType.getLiteralValue() as string)\n }\n }\n }\n }\n }\n }\n }\n\n return [...new Set(messageTypes)] // Dedupe\n }\n\n /**\n * Convert ts-morph Type to our TypeInfo\n */\n private convertType(type: Type, name: string): TypeInfo {\n // Check for null/undefined\n const nullable = type.isNullable()\n\n // Boolean\n if (type.isBoolean() || type.isBooleanLiteral()) {\n return { name, kind: \"boolean\", nullable }\n }\n\n // Union types\n if (type.isUnion()) {\n const unionTypes = type.getUnionTypes()\n\n // Check for string literal union (enum)\n const allStringLiterals = unionTypes.every(t => t.isStringLiteral())\n if (allStringLiterals) {\n const enumValues = unionTypes.map(t => t.getLiteralValue() as string)\n return {\n name,\n kind: \"enum\",\n nullable,\n enumValues\n }\n }\n\n // Check for nullable type (T | null | undefined)\n const nonNullTypes = unionTypes.filter(t => !t.isNull() && !t.isUndefined())\n\n if (nonNullTypes.length === 1) {\n // This is a nullable type: T | null or T | undefined\n const baseType = this.convertType(nonNullTypes[0], name)\n return {\n ...baseType,\n nullable: true\n }\n }\n\n // Generic union - keep as-is\n return {\n name,\n kind: \"union\",\n nullable,\n unionTypes: unionTypes.map((t, i) => this.convertType(t, `${name}_${i}`))\n }\n }\n\n // String\n if (type.isString() || type.isStringLiteral()) {\n return { name, kind: \"string\", nullable }\n }\n\n // Number\n if (type.isNumber() || type.isNumberLiteral()) {\n return { name, kind: \"number\", nullable }\n }\n\n // Array\n if (type.isArray()) {\n const elementType = type.getArrayElementType()\n return {\n name,\n kind: \"array\",\n nullable,\n elementType: elementType\n ? this.convertType(elementType, `${name}_element`)\n : { name: \"unknown\", kind: \"unknown\", nullable: false }\n }\n }\n\n // Map/Set detection - must come before generic object handling\n const symbol = type.getSymbol()\n if (symbol) {\n const symbolName = symbol.getName()\n\n // Map<K, V>\n if (symbolName === \"Map\") {\n const typeArgs = type.getTypeArguments()\n return {\n name,\n kind: \"map\",\n nullable,\n // Extract value type from Map<K, V>\n valueType: typeArgs && typeArgs[1]\n ? this.convertType(typeArgs[1], `${name}_value`)\n : undefined\n }\n }\n\n // Set<T>\n if (symbolName === \"Set\") {\n const typeArgs = type.getTypeArguments()\n return {\n name,\n kind: \"set\",\n nullable,\n elementType: typeArgs && typeArgs[0]\n ? this.convertType(typeArgs[0], `${name}_element`)\n : undefined\n }\n }\n }\n\n // Object\n if (type.isObject()) {\n const properties: Record<string, TypeInfo> = {}\n\n for (const prop of type.getProperties()) {\n const propName = prop.getName()\n const propType = prop.getTypeAtLocation(this.project.getSourceFiles()[0])\n properties[propName] = this.convertType(propType, propName)\n }\n\n return {\n name,\n kind: \"object\",\n nullable,\n properties\n }\n }\n\n // Null\n if (type.isNull()) {\n return { name, kind: \"null\", nullable: true }\n }\n\n // Unknown/Any\n return { name, kind: \"unknown\", nullable }\n }\n\n /**\n * Analyze fields and determine confidence/bounds\n */\n private analyzeFields(stateType: TypeInfo, prefix = \"\"): FieldAnalysis[] {\n const fields: FieldAnalysis[] = []\n\n if (stateType.kind === \"object\" && stateType.properties) {\n for (const [key, propType] of Object.entries(stateType.properties)) {\n const path = prefix ? `${prefix}.${key}` : key\n\n // Recursively analyze nested objects (but not Map/Set - they're leaf nodes)\n if (propType.kind === \"object\") {\n // Don't add intermediate objects as fields, just recurse into them\n fields.push(...this.analyzeFields(propType, path))\n } else {\n // This is a leaf field (or Map/Set), add it for configuration\n const analysis = this.analyzeField(path, propType)\n fields.push(analysis)\n }\n }\n }\n\n return fields\n }\n\n /**\n * Analyze a single field and determine configuration needs\n */\n private analyzeField(path: string, type: TypeInfo): FieldAnalysis {\n const analysis: FieldAnalysis = {\n path,\n type,\n confidence: \"low\",\n evidence: [],\n suggestions: [],\n bounds: {}\n }\n\n // Boolean - high confidence, no config needed\n if (type.kind === \"boolean\") {\n analysis.confidence = \"high\"\n analysis.evidence.push(\"Boolean type - auto-configured\")\n return analysis\n }\n\n // Enum - high confidence\n if (type.kind === \"enum\" && type.enumValues) {\n analysis.confidence = \"high\"\n analysis.evidence.push(`Enum with ${type.enumValues.length} values`)\n analysis.bounds!.values = type.enumValues\n return analysis\n }\n\n // Array - needs manual configuration\n if (type.kind === \"array\") {\n analysis.confidence = \"low\"\n analysis.suggestions.push(\n \"Choose maxLength: 5 (fast), 10 (balanced), or 20 (thorough)\"\n )\n analysis.bounds!.maxLength = undefined\n\n // Try to find bounds in code\n const foundBound = this.findArrayBound(path)\n if (foundBound) {\n analysis.confidence = \"medium\"\n analysis.evidence.push(`Found array check: ${foundBound.evidence}`)\n analysis.bounds!.maxLength = foundBound.value\n }\n\n return analysis\n }\n\n // Number - needs manual configuration\n if (type.kind === \"number\") {\n analysis.confidence = \"low\"\n analysis.suggestions.push(\"Provide min and max values based on your application logic\")\n analysis.bounds!.min = undefined\n analysis.bounds!.max = undefined\n\n // Try to find bounds in code\n const foundBound = this.findNumberBound(path)\n if (foundBound) {\n analysis.confidence = \"high\"\n analysis.evidence.push(`Found comparison: ${foundBound.evidence}`)\n analysis.bounds = { ...analysis.bounds!, ...foundBound.bounds }\n }\n\n return analysis\n }\n\n // String - needs manual configuration\n if (type.kind === \"string\") {\n analysis.confidence = \"low\"\n analysis.suggestions.push(\n 'Provide 2-3 example values: [\"value1\", \"value2\", \"value3\"]',\n \"Or use { abstract: true } for symbolic verification\"\n )\n analysis.bounds!.values = undefined\n return analysis\n }\n\n // Map/Set - needs manual configuration\n if (type.kind === \"map\" || type.kind === \"set\") {\n analysis.confidence = \"low\"\n analysis.suggestions.push(\"Provide maxSize (recommended: 3-5)\")\n analysis.bounds!.maxSize = undefined\n return analysis\n }\n\n return analysis\n }\n\n /**\n * Try to find array bounds by searching for length checks\n */\n private findArrayBound(path: string): { value: number; evidence: string } | null {\n // TODO: Search source code for patterns like:\n // - if (array.length < N)\n // - array.slice(0, N)\n // This would require analyzing the actual usage in code\n return null\n }\n\n /**\n * Try to find number bounds by searching for comparisons\n */\n private findNumberBound(path: string): { bounds: { min?: number; max?: number }; evidence: string } | null {\n // TODO: Search source code for patterns like:\n // - if (counter < 100)\n // - if (value >= 0 && value <= 100)\n // This would require analyzing the actual usage in code\n return null\n }\n}\n\nexport async function analyzeCodebase(options: {\n tsConfigPath: string\n stateFilePath?: string\n}): Promise<CodebaseAnalysis> {\n const extractor = new TypeExtractor(options.tsConfigPath)\n return extractor.analyzeCodebase(options.stateFilePath)\n}\n",
9
- "// Handler extraction from TypeScript code\n// Extracts message handlers and their state mutations\n\nimport { Project, type SourceFile, SyntaxKind, Node } from \"ts-morph\"\nimport type { MessageHandler, StateAssignment, VerificationCondition } from \"../types\"\n\nexport interface HandlerAnalysis {\n handlers: MessageHandler[]\n messageTypes: Set<string>\n}\n\nexport class HandlerExtractor {\n private project: Project\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n })\n }\n\n /**\n * Extract all message handlers from the codebase\n */\n extractHandlers(): HandlerAnalysis {\n const handlers: MessageHandler[] = []\n const messageTypes = new Set<string>()\n\n // Find all source files\n const sourceFiles = this.project.getSourceFiles()\n\n for (const sourceFile of sourceFiles) {\n const fileHandlers = this.extractFromFile(sourceFile)\n handlers.push(...fileHandlers)\n\n for (const handler of fileHandlers) {\n messageTypes.add(handler.messageType)\n }\n }\n\n return {\n handlers,\n messageTypes,\n }\n }\n\n /**\n * Extract handlers from a single source file\n */\n private extractFromFile(sourceFile: SourceFile): MessageHandler[] {\n const handlers: MessageHandler[] = []\n const filePath = sourceFile.getFilePath()\n\n // Determine context from file path\n const context = this.inferContext(filePath)\n\n // Find all handler patterns\n sourceFile.forEachDescendant((node) => {\n if (Node.isCallExpression(node)) {\n const expression = node.getExpression()\n\n // Pattern 1: .on() calls (bus.on, ws.on, socket.on, etc.)\n if (Node.isPropertyAccessExpression(expression)) {\n const methodName = expression.getName()\n\n if (methodName === \"on\" || methodName === \"addEventListener\") {\n const handler = this.extractHandler(node, context, filePath)\n if (handler) {\n handlers.push(handler)\n }\n }\n }\n }\n\n // Pattern 2: Switch/case message routers\n if (Node.isSwitchStatement(node)) {\n const switchHandlers = this.extractSwitchCaseHandlers(node, context, filePath)\n handlers.push(...switchHandlers)\n }\n\n // Pattern 3: Handler map patterns (const handlers = { 'EVENT': fn })\n if (Node.isVariableDeclaration(node)) {\n const mapHandlers = this.extractHandlerMapPattern(node, context, filePath)\n handlers.push(...mapHandlers)\n }\n })\n\n return handlers\n }\n\n /**\n * Extract handler details from a .on() call expression\n */\n private extractHandler(\n callExpr: any,\n context: string,\n filePath: string\n ): MessageHandler | null {\n const args = callExpr.getArguments()\n\n if (args.length < 2) {\n return null\n }\n\n // First argument should be the message type (string literal)\n const messageTypeArg = args[0]\n let messageType: string | null = null\n\n if (Node.isStringLiteral(messageTypeArg)) {\n messageType = messageTypeArg.getLiteralValue()\n } else if (Node.isTemplateExpression(messageTypeArg)) {\n // Handle template literals if needed\n messageType = messageTypeArg.getText().replace(/[`'\"]/g, \"\")\n }\n\n if (!messageType) {\n return null\n }\n\n // Second argument is the handler function\n const handlerArg = args[1]\n const assignments: StateAssignment[] = []\n const preconditions: VerificationCondition[] = []\n const postconditions: VerificationCondition[] = []\n\n // Parse the handler function for state assignments and verification conditions\n if (Node.isArrowFunction(handlerArg) || Node.isFunctionExpression(handlerArg)) {\n this.extractAssignments(handlerArg, assignments)\n this.extractVerificationConditions(handlerArg, preconditions, postconditions)\n }\n\n const line = callExpr.getStartLineNumber()\n\n return {\n messageType,\n node: context, // Renamed from 'context' to 'node' for generalization\n assignments,\n preconditions,\n postconditions,\n location: {\n file: filePath,\n line,\n },\n }\n }\n\n /**\n * Extract state assignments from a handler function\n */\n private extractAssignments(funcNode: any, assignments: StateAssignment[]): void {\n funcNode.forEachDescendant((node: any) => {\n // Look for assignment expressions: state.field = value\n if (Node.isBinaryExpression(node)) {\n const operator = node.getOperatorToken().getText()\n\n if (operator === \"=\") {\n const left = node.getLeft()\n const right = node.getRight()\n\n // Check if left side is a state property access\n if (Node.isPropertyAccessExpression(left)) {\n const fieldPath = this.getPropertyPath(left)\n\n // Check if this is a state access\n if (fieldPath.startsWith(\"state.\")) {\n const field = fieldPath.substring(6) // Remove \"state.\" prefix\n const value = this.extractValue(right)\n\n if (value !== undefined) {\n assignments.push({\n field,\n value,\n })\n }\n }\n }\n }\n }\n })\n }\n\n /**\n * Extract verification conditions (requires/ensures) from a handler function\n */\n private extractVerificationConditions(\n funcNode: any,\n preconditions: VerificationCondition[],\n postconditions: VerificationCondition[]\n ): void {\n const body = funcNode.getBody()\n\n // Get all statements in the function body\n const statements = Node.isBlock(body) ? body.getStatements() : [body]\n\n statements.forEach((statement: any, index: number) => {\n // Look for expression statements that are function calls\n if (Node.isExpressionStatement(statement)) {\n const expr = statement.getExpression()\n\n if (Node.isCallExpression(expr)) {\n const callee = expr.getExpression()\n\n if (Node.isIdentifier(callee)) {\n const functionName = callee.getText()\n\n if (functionName === \"requires\") {\n // Extract precondition\n const condition = this.extractCondition(expr)\n if (condition) {\n preconditions.push(condition)\n }\n } else if (functionName === \"ensures\") {\n // Extract postcondition\n const condition = this.extractCondition(expr)\n if (condition) {\n postconditions.push(condition)\n }\n }\n }\n }\n }\n })\n }\n\n /**\n * Extract condition from a requires() or ensures() call\n */\n private extractCondition(callExpr: any): VerificationCondition | null {\n const args = callExpr.getArguments()\n\n if (args.length === 0) {\n return null\n }\n\n // First argument is the condition expression\n const conditionArg = args[0]\n const expression = conditionArg.getText()\n\n // Second argument (optional) is the message\n let message: string | undefined\n if (args.length >= 2 && Node.isStringLiteral(args[1])) {\n message = args[1].getLiteralValue()\n }\n\n const line = callExpr.getStartLineNumber()\n const column = callExpr.getStartLinePos()\n\n return {\n expression,\n message,\n location: {\n line,\n column,\n },\n }\n }\n\n /**\n * Get the full property access path (e.g., \"state.user.loggedIn\")\n */\n private getPropertyPath(node: any): string {\n const parts: string[] = []\n\n let current = node\n while (Node.isPropertyAccessExpression(current)) {\n parts.unshift(current.getName())\n current = current.getExpression()\n }\n\n // Add the base identifier\n if (Node.isIdentifier(current)) {\n parts.unshift(current.getText())\n }\n\n return parts.join(\".\")\n }\n\n /**\n * Extract a literal value from an expression\n */\n private extractValue(node: any): string | boolean | number | null | undefined {\n if (Node.isStringLiteral(node)) {\n return node.getLiteralValue()\n }\n\n if (Node.isNumericLiteral(node)) {\n return node.getLiteralValue()\n }\n\n if (node.getKind() === SyntaxKind.TrueKeyword) {\n return true\n }\n\n if (node.getKind() === SyntaxKind.FalseKeyword) {\n return false\n }\n\n if (node.getKind() === SyntaxKind.NullKeyword) {\n return null\n }\n\n // For complex expressions, return undefined (can't extract)\n return undefined\n }\n\n /**\n * Extract handlers from switch/case message router patterns\n * Detects: switch(message.type) { case 'EVENT': handler(); }\n */\n private extractSwitchCaseHandlers(\n switchNode: any,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n // Check if switching on message.type or similar\n const expression = switchNode.getExpression()\n const expressionText = expression.getText()\n\n // Look for patterns like: message.type, data.type, msg.type, event.type\n if (!/\\.(type|kind|event|action)/.test(expressionText)) {\n return handlers\n }\n\n // Extract handlers from each case clause\n const caseClauses = switchNode.getClauses()\n for (const clause of caseClauses) {\n if (Node.isCaseClause(clause)) {\n const caseExpr = clause.getExpression()\n\n // Extract message type from case expression\n let messageType: string | null = null\n if (Node.isStringLiteral(caseExpr)) {\n messageType = caseExpr.getLiteralValue()\n }\n\n if (messageType) {\n const line = clause.getStartLineNumber()\n\n handlers.push({\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n })\n }\n }\n }\n } catch (error) {\n // Skip malformed switch statements\n }\n\n return handlers\n }\n\n /**\n * Extract handlers from handler map patterns\n * Detects: const handlers = { 'EVENT': handlerFn, ... }\n */\n private extractHandlerMapPattern(\n varDecl: any,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n const initializer = varDecl.getInitializer()\n if (!initializer || !Node.isObjectLiteralExpression(initializer)) {\n return handlers\n }\n\n // Check if variable name suggests it's a handler map\n const varName = varDecl.getName().toLowerCase()\n if (!/(handler|listener|callback|event)s?/.test(varName)) {\n return handlers\n }\n\n // Extract handlers from object properties\n const properties = initializer.getProperties()\n for (const prop of properties) {\n if (Node.isPropertyAssignment(prop)) {\n const nameNode = prop.getNameNode()\n let messageType: string | null = null\n\n if (Node.isStringLiteral(nameNode)) {\n messageType = nameNode.getLiteralValue()\n } else if (Node.isIdentifier(nameNode)) {\n messageType = nameNode.getText()\n }\n\n if (messageType) {\n const line = prop.getStartLineNumber()\n\n handlers.push({\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n })\n }\n }\n }\n } catch (error) {\n // Skip malformed object literals\n }\n\n return handlers\n }\n\n /**\n * Infer the context (background, content, popup, etc.) from file path\n */\n private inferContext(filePath: string): string {\n const path = filePath.toLowerCase()\n\n // Chrome extension contexts\n if (path.includes(\"/background/\") || path.includes(\"\\\\background\\\\\")) {\n return \"background\"\n }\n if (path.includes(\"/content/\") || path.includes(\"\\\\content\\\\\")) {\n return \"content\"\n }\n if (path.includes(\"/popup/\") || path.includes(\"\\\\popup\\\\\")) {\n return \"popup\"\n }\n if (path.includes(\"/devtools/\") || path.includes(\"\\\\devtools\\\\\")) {\n return \"devtools\"\n }\n if (path.includes(\"/options/\") || path.includes(\"\\\\options\\\\\")) {\n return \"options\"\n }\n if (path.includes(\"/offscreen/\") || path.includes(\"\\\\offscreen\\\\\")) {\n return \"offscreen\"\n }\n\n // WebSocket/server app contexts\n if (path.includes(\"/server/\") || path.includes(\"\\\\server\\\\\") || path.includes(\"/server.\")) {\n return \"server\"\n }\n if (path.includes(\"/client/\") || path.includes(\"\\\\client\\\\\") || path.includes(\"/client.\")) {\n return \"client\"\n }\n\n // PWA/Worker contexts\n if (path.includes(\"/worker/\") || path.includes(\"\\\\worker\\\\\") || path.includes(\"service-worker\")) {\n return \"worker\"\n }\n\n return \"unknown\"\n }\n}\n\nexport function extractHandlers(tsConfigPath: string): HandlerAnalysis {\n const extractor = new HandlerExtractor(tsConfigPath)\n return extractor.extractHandlers()\n}\n",
9
+ "// Handler extraction from TypeScript code\n// Extracts message handlers and their state mutations\n\nimport { Project, type SourceFile, SyntaxKind, Node } from \"ts-morph\"\nimport type { MessageHandler, StateAssignment, VerificationCondition } from \"../types\"\n\nexport interface HandlerAnalysis {\n handlers: MessageHandler[]\n messageTypes: Set<string>\n}\n\nexport class HandlerExtractor {\n private project: Project\n private typeGuardCache: WeakMap<SourceFile, Map<string, string>>\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n })\n this.typeGuardCache = new WeakMap()\n }\n\n /**\n * Extract all message handlers from the codebase\n */\n extractHandlers(): HandlerAnalysis {\n const handlers: MessageHandler[] = []\n const messageTypes = new Set<string>()\n\n // Find all source files\n const sourceFiles = this.project.getSourceFiles()\n\n for (const sourceFile of sourceFiles) {\n const fileHandlers = this.extractFromFile(sourceFile)\n handlers.push(...fileHandlers)\n\n for (const handler of fileHandlers) {\n messageTypes.add(handler.messageType)\n }\n }\n\n return {\n handlers,\n messageTypes,\n }\n }\n\n /**\n * Extract handlers from a single source file\n */\n private extractFromFile(sourceFile: SourceFile): MessageHandler[] {\n const handlers: MessageHandler[] = []\n const filePath = sourceFile.getFilePath()\n\n // Determine context from file path\n const context = this.inferContext(filePath)\n\n // Find all handler patterns\n sourceFile.forEachDescendant((node) => {\n if (Node.isCallExpression(node)) {\n const expression = node.getExpression()\n\n // Pattern 1: .on() calls (bus.on, ws.on, socket.on, etc.)\n if (Node.isPropertyAccessExpression(expression)) {\n const methodName = expression.getName()\n\n if (methodName === \"on\" || methodName === \"addEventListener\") {\n const handler = this.extractHandler(node, context, filePath)\n if (handler) {\n handlers.push(handler)\n }\n }\n }\n }\n\n // Pattern 2: Switch/case message routers\n if (Node.isSwitchStatement(node)) {\n const switchHandlers = this.extractSwitchCaseHandlers(node, context, filePath)\n handlers.push(...switchHandlers)\n }\n\n // Pattern 3: Handler map patterns (const handlers = { 'EVENT': fn })\n if (Node.isVariableDeclaration(node)) {\n const mapHandlers = this.extractHandlerMapPattern(node, context, filePath)\n handlers.push(...mapHandlers)\n }\n\n // Pattern 4: Type guard if/else-if chains\n if (Node.isIfStatement(node)) {\n const typeGuardHandlers = this.extractTypeGuardHandlers(node, context, filePath)\n handlers.push(...typeGuardHandlers)\n }\n })\n\n return handlers\n }\n\n /**\n * Extract handler details from a .on() call expression\n */\n private extractHandler(\n callExpr: any,\n context: string,\n filePath: string\n ): MessageHandler | null {\n const args = callExpr.getArguments()\n\n if (args.length < 2) {\n return null\n }\n\n // First argument should be the message type (string literal)\n const messageTypeArg = args[0]\n let messageType: string | null = null\n\n if (Node.isStringLiteral(messageTypeArg)) {\n messageType = messageTypeArg.getLiteralValue()\n } else if (Node.isTemplateExpression(messageTypeArg)) {\n // Handle template literals if needed\n messageType = messageTypeArg.getText().replace(/[`'\"]/g, \"\")\n }\n\n if (!messageType) {\n return null\n }\n\n // Second argument is the handler function\n const handlerArg = args[1]\n const assignments: StateAssignment[] = []\n const preconditions: VerificationCondition[] = []\n const postconditions: VerificationCondition[] = []\n\n // Parse the handler function for state assignments and verification conditions\n if (Node.isArrowFunction(handlerArg) || Node.isFunctionExpression(handlerArg)) {\n this.extractAssignments(handlerArg, assignments)\n this.extractVerificationConditions(handlerArg, preconditions, postconditions)\n }\n\n const line = callExpr.getStartLineNumber()\n\n return {\n messageType,\n node: context, // Renamed from 'context' to 'node' for generalization\n assignments,\n preconditions,\n postconditions,\n location: {\n file: filePath,\n line,\n },\n }\n }\n\n /**\n * Extract state assignments from a handler function\n */\n private extractAssignments(funcNode: any, assignments: StateAssignment[]): void {\n funcNode.forEachDescendant((node: any) => {\n // Look for assignment expressions: state.field = value\n if (Node.isBinaryExpression(node)) {\n const operator = node.getOperatorToken().getText()\n\n if (operator === \"=\") {\n const left = node.getLeft()\n const right = node.getRight()\n\n // Check if left side is a state property access\n if (Node.isPropertyAccessExpression(left)) {\n const fieldPath = this.getPropertyPath(left)\n\n // Check if this is a state access\n if (fieldPath.startsWith(\"state.\")) {\n const field = fieldPath.substring(6) // Remove \"state.\" prefix\n const value = this.extractValue(right)\n\n if (value !== undefined) {\n assignments.push({\n field,\n value,\n })\n }\n }\n }\n }\n }\n })\n }\n\n /**\n * Extract verification conditions (requires/ensures) from a handler function\n */\n private extractVerificationConditions(\n funcNode: any,\n preconditions: VerificationCondition[],\n postconditions: VerificationCondition[]\n ): void {\n const body = funcNode.getBody()\n\n // Get all statements in the function body\n const statements = Node.isBlock(body) ? body.getStatements() : [body]\n\n statements.forEach((statement: any, index: number) => {\n // Look for expression statements that are function calls\n if (Node.isExpressionStatement(statement)) {\n const expr = statement.getExpression()\n\n if (Node.isCallExpression(expr)) {\n const callee = expr.getExpression()\n\n if (Node.isIdentifier(callee)) {\n const functionName = callee.getText()\n\n if (functionName === \"requires\") {\n // Extract precondition\n const condition = this.extractCondition(expr)\n if (condition) {\n preconditions.push(condition)\n }\n } else if (functionName === \"ensures\") {\n // Extract postcondition\n const condition = this.extractCondition(expr)\n if (condition) {\n postconditions.push(condition)\n }\n }\n }\n }\n }\n })\n }\n\n /**\n * Extract condition from a requires() or ensures() call\n */\n private extractCondition(callExpr: any): VerificationCondition | null {\n const args = callExpr.getArguments()\n\n if (args.length === 0) {\n return null\n }\n\n // First argument is the condition expression\n const conditionArg = args[0]\n const expression = conditionArg.getText()\n\n // Second argument (optional) is the message\n let message: string | undefined\n if (args.length >= 2 && Node.isStringLiteral(args[1])) {\n message = args[1].getLiteralValue()\n }\n\n const line = callExpr.getStartLineNumber()\n const column = callExpr.getStartLinePos()\n\n return {\n expression,\n message,\n location: {\n line,\n column,\n },\n }\n }\n\n /**\n * Get the full property access path (e.g., \"state.user.loggedIn\")\n */\n private getPropertyPath(node: any): string {\n const parts: string[] = []\n\n let current = node\n while (Node.isPropertyAccessExpression(current)) {\n parts.unshift(current.getName())\n current = current.getExpression()\n }\n\n // Add the base identifier\n if (Node.isIdentifier(current)) {\n parts.unshift(current.getText())\n }\n\n return parts.join(\".\")\n }\n\n /**\n * Extract a literal value from an expression\n */\n private extractValue(node: any): string | boolean | number | null | undefined {\n if (Node.isStringLiteral(node)) {\n return node.getLiteralValue()\n }\n\n if (Node.isNumericLiteral(node)) {\n return node.getLiteralValue()\n }\n\n if (node.getKind() === SyntaxKind.TrueKeyword) {\n return true\n }\n\n if (node.getKind() === SyntaxKind.FalseKeyword) {\n return false\n }\n\n if (node.getKind() === SyntaxKind.NullKeyword) {\n return null\n }\n\n // For complex expressions, return undefined (can't extract)\n return undefined\n }\n\n /**\n * Extract handlers from switch/case message router patterns\n * Detects: switch(message.type) { case 'EVENT': handler(); }\n */\n private extractSwitchCaseHandlers(\n switchNode: any,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n // Check if switching on message.type or similar\n const expression = switchNode.getExpression()\n const expressionText = expression.getText()\n\n // Look for patterns like: message.type, data.type, msg.type, event.type\n if (!/\\.(type|kind|event|action)/.test(expressionText)) {\n return handlers\n }\n\n // Extract handlers from each case clause\n const caseClauses = switchNode.getClauses()\n for (const clause of caseClauses) {\n if (Node.isCaseClause(clause)) {\n const caseExpr = clause.getExpression()\n\n // Extract message type from case expression\n let messageType: string | null = null\n if (Node.isStringLiteral(caseExpr)) {\n messageType = caseExpr.getLiteralValue()\n }\n\n if (messageType) {\n const line = clause.getStartLineNumber()\n\n handlers.push({\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n })\n }\n }\n }\n } catch (error) {\n // Skip malformed switch statements\n }\n\n return handlers\n }\n\n /**\n * Extract handlers from handler map patterns\n * Detects: const handlers = { 'EVENT': handlerFn, ... }\n */\n private extractHandlerMapPattern(\n varDecl: any,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n const initializer = varDecl.getInitializer()\n if (!initializer || !Node.isObjectLiteralExpression(initializer)) {\n return handlers\n }\n\n // Check if variable name suggests it's a handler map\n const varName = varDecl.getName().toLowerCase()\n if (!/(handler|listener|callback|event)s?/.test(varName)) {\n return handlers\n }\n\n // Extract handlers from object properties\n const properties = initializer.getProperties()\n for (const prop of properties) {\n if (Node.isPropertyAssignment(prop)) {\n const nameNode = prop.getNameNode()\n let messageType: string | null = null\n\n if (Node.isStringLiteral(nameNode)) {\n messageType = nameNode.getLiteralValue()\n } else if (Node.isIdentifier(nameNode)) {\n messageType = nameNode.getText()\n }\n\n if (messageType) {\n const line = prop.getStartLineNumber()\n\n handlers.push({\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n })\n }\n }\n }\n } catch (error) {\n // Skip malformed object literals\n }\n\n return handlers\n }\n\n /**\n * Extract handlers from type guard if/else-if patterns\n * Detects: if (isQueryMessage(msg)) { handleQuery(msg); }\n */\n private extractTypeGuardHandlers(\n ifNode: Node,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = []\n\n try {\n // Get the source file to find type predicates\n const sourceFile = ifNode.getSourceFile()\n\n // Use cached type guards or compute if not cached\n let typeGuards = this.typeGuardCache.get(sourceFile)\n if (!typeGuards) {\n typeGuards = this.findTypePredicateFunctions(sourceFile)\n this.typeGuardCache.set(sourceFile, typeGuards)\n }\n\n if (typeGuards.size === 0) {\n return handlers\n }\n\n // Process the if statement and all else-if chains\n let currentIf: Node = ifNode\n\n while (currentIf) {\n const handler = this.extractHandlerFromIfClause(currentIf, typeGuards, context, filePath)\n if (handler) {\n handlers.push(handler)\n }\n\n // Check for else-if\n const elseStatement = currentIf.getElseStatement()\n if (elseStatement && Node.isIfStatement(elseStatement)) {\n currentIf = elseStatement\n } else {\n break\n }\n }\n } catch (error) {\n // Skip malformed if statements\n }\n\n return handlers\n }\n\n /**\n * Extract handler from a single if clause\n */\n private extractHandlerFromIfClause(\n ifNode: Node,\n typeGuards: Map<string, string>,\n context: string,\n filePath: string\n ): MessageHandler | null {\n try {\n // Get condition expression\n const condition = ifNode.getExpression()\n\n // Check if condition is a call expression (function call)\n if (!Node.isCallExpression(condition)) {\n return null\n }\n\n // Get the function being called\n const funcExpr = condition.getExpression()\n let funcName: string | undefined\n\n if (Node.isIdentifier(funcExpr)) {\n funcName = funcExpr.getText()\n }\n\n if (!funcName || !typeGuards.has(funcName)) {\n return null\n }\n\n // Found a type guard call! Extract message type\n const messageType = typeGuards.get(funcName)!\n const line = ifNode.getStartLineNumber()\n\n return {\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n }\n } catch (error) {\n return null\n }\n }\n\n /**\n * Find all type predicate functions in a source file\n * Returns a map of function name → message type\n */\n private findTypePredicateFunctions(sourceFile: SourceFile): Map<string, string> {\n const typeGuards = new Map<string, string>()\n\n sourceFile.forEachDescendant((node) => {\n if (Node.isFunctionDeclaration(node) || Node.isFunctionExpression(node) || Node.isArrowFunction(node)) {\n const returnType = node.getReturnType()\n const returnTypeText = returnType.getText()\n\n // Check if return type is a type predicate: \"arg is Type\"\n if (/is\\s+\\w+/.test(returnTypeText)) {\n // Extract function name\n let functionName: string | undefined\n if (Node.isFunctionDeclaration(node)) {\n functionName = node.getName()\n } else if (Node.isFunctionExpression(node)) {\n const parent = node.getParent()\n if (Node.isVariableDeclaration(parent)) {\n functionName = parent.getName()\n }\n } else if (Node.isArrowFunction(node)) {\n const parent = node.getParent()\n if (Node.isVariableDeclaration(parent)) {\n functionName = parent.getName()\n }\n }\n\n if (functionName) {\n // Extract message type from:\n // 1. Type predicate: \"msg is QueryMessage\" → \"query\" or \"QueryMessage\"\n // 2. Function body: return msg.type === 'query'\n\n let messageType: string | null = null\n\n // Strategy 1: Parse from type predicate name\n // \"msg is QueryMessage\" → extract \"QueryMessage\"\n const typeMatch = returnTypeText.match(/is\\s+(\\w+)/)\n if (typeMatch) {\n const typeName = typeMatch[1]\n // Convert \"QueryMessage\" → \"query\"\n messageType = this.extractMessageTypeFromTypeName(typeName)\n }\n\n // Strategy 2: Analyze function body for msg.type === 'value'\n if (!messageType) {\n const body = node.getBody()\n if (body) {\n const bodyText = body.getText()\n const typeValueMatch = bodyText.match(/\\.type\\s*===?\\s*['\"](\\w+)['\"]/)\n if (typeValueMatch) {\n messageType = typeValueMatch[1]\n }\n }\n }\n\n if (messageType) {\n typeGuards.set(functionName, messageType)\n }\n }\n }\n }\n })\n\n return typeGuards\n }\n\n /**\n * Extract message type from TypeScript type name\n * Examples:\n * QueryMessage → query\n * CommandMessage → command\n * SubscribeMessage → subscribe\n */\n private extractMessageTypeFromTypeName(typeName: string): string {\n // Remove common suffixes and convert to lowercase\n const messageType = typeName\n .replace(/Message$/, '')\n .replace(/Event$/, '')\n .replace(/Request$/, '')\n .replace(/Command$/, '')\n .replace(/Query$/, '')\n .toLowerCase()\n\n return messageType\n }\n\n /**\n * Infer the context (background, content, popup, etc.) from file path\n */\n private inferContext(filePath: string): string {\n const path = filePath.toLowerCase()\n\n // Chrome extension contexts\n if (path.includes(\"/background/\") || path.includes(\"\\\\background\\\\\")) {\n return \"background\"\n }\n if (path.includes(\"/content/\") || path.includes(\"\\\\content\\\\\")) {\n return \"content\"\n }\n if (path.includes(\"/popup/\") || path.includes(\"\\\\popup\\\\\")) {\n return \"popup\"\n }\n if (path.includes(\"/devtools/\") || path.includes(\"\\\\devtools\\\\\")) {\n return \"devtools\"\n }\n if (path.includes(\"/options/\") || path.includes(\"\\\\options\\\\\")) {\n return \"options\"\n }\n if (path.includes(\"/offscreen/\") || path.includes(\"\\\\offscreen\\\\\")) {\n return \"offscreen\"\n }\n\n // WebSocket/server app contexts\n if (path.includes(\"/server/\") || path.includes(\"\\\\server\\\\\") || path.includes(\"/server.\")) {\n return \"server\"\n }\n if (path.includes(\"/client/\") || path.includes(\"\\\\client\\\\\") || path.includes(\"/client.\")) {\n return \"client\"\n }\n\n // PWA/Worker contexts\n if (path.includes(\"/worker/\") || path.includes(\"\\\\worker\\\\\") || path.includes(\"service-worker\")) {\n return \"worker\"\n }\n\n return \"unknown\"\n }\n}\n\nexport function extractHandlers(tsConfigPath: string): HandlerAnalysis {\n const extractor = new HandlerExtractor(tsConfigPath)\n return extractor.extractHandlers()\n}\n",
10
10
  "// Configuration file generator with smart comments\n\nimport type { FieldAnalysis, CodebaseAnalysis, TypeInfo } from \"../types\";\n\nexport class ConfigGenerator {\n private lines: string[] = [];\n private indent = 0;\n\n generate(analysis: CodebaseAnalysis): string {\n this.lines = [];\n this.indent = 0;\n\n this.addHeader();\n this.addImports();\n this.addExport();\n this.addStateConfig(analysis.fields);\n this.addMessagesConfig();\n this.addBehaviorConfig();\n this.closeExport();\n\n return this.lines.join(\"\\n\");\n }\n\n private addHeader(): void {\n this.line(\"// ═══════════════════════════════════════════════════════════════\");\n this.line(\"// Verification Configuration\");\n this.line(\"// ═══════════════════════════════════════════════════════════════\");\n this.line(\"//\");\n this.line(\"// This file configures TLA+ verification for your extension.\");\n this.line(\"// Some values are auto-configured, others need your input.\");\n this.line(\"//\");\n this.line(\"// Look for:\");\n this.line(\"// • /* CONFIGURE */ - Replace with your value\");\n this.line(\"// • /* REVIEW */ - Check the auto-generated value\");\n this.line(\"// • null - Must be replaced with a concrete value\");\n this.line(\"//\");\n this.line(\"// Run 'bun verify' to check for incomplete configuration.\");\n this.line(\"// Run 'bun verify --setup' for interactive help.\");\n this.line(\"//\");\n this.line(\"\");\n }\n\n private addImports(): void {\n this.line(\"import { defineVerification } from '@fairfox/polly/verify'\");\n this.line(\"\");\n }\n\n private addExport(): void {\n this.line(\"export default defineVerification({\");\n this.indent++;\n }\n\n private closeExport(): void {\n this.indent--;\n this.line(\"})\");\n }\n\n private addStateConfig(fields: FieldAnalysis[]): void {\n this.line(\"state: {\");\n this.indent++;\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n\n // Add blank line between fields\n if (i > 0) {\n this.line(\"\");\n }\n\n this.addFieldConfig(field);\n }\n\n this.indent--;\n this.line(\"},\");\n this.line(\"\");\n }\n\n private addFieldConfig(field: FieldAnalysis): void {\n // Generate comment block\n this.addFieldComment(field);\n\n // Generate configuration line\n const config = this.generateFieldConfig(field);\n this.line(`\"${field.path}\": ${config},`);\n }\n\n private addFieldComment(field: FieldAnalysis): void {\n const separator = \"─\".repeat(60);\n\n // Header\n this.line(`// ${separator}`);\n this.line(`// ${field.path}: ${this.formatTypeName(field.type)}`);\n this.line(`// ${separator}`);\n\n // High confidence: auto-configured\n if (field.confidence === \"high\") {\n this.line(\"// āœ“ Auto-configured from code analysis\");\n if (field.evidence.length > 0) {\n for (const evidence of field.evidence) {\n this.line(`// ${evidence}`);\n }\n }\n this.line(\"//\");\n return;\n }\n\n // Medium confidence: needs review\n if (field.confidence === \"medium\") {\n this.line(\"// āš ļø Please review this auto-generated value\");\n if (field.evidence.length > 0) {\n for (const evidence of field.evidence) {\n this.line(`// Found: ${evidence}`);\n }\n }\n this.line(\"//\");\n this.line(\"// REVIEW: Adjust if needed\");\n this.line(\"//\");\n return;\n }\n\n // Low confidence: manual configuration required\n this.line(\"// āš ļø Manual configuration required\");\n this.line(\"//\");\n\n // Type-specific guidance\n this.addTypeGuidance(field);\n\n // Suggestions\n if (field.suggestions.length > 0) {\n this.line(\"//\");\n for (const suggestion of field.suggestions) {\n this.line(`// ${suggestion}`);\n }\n }\n\n this.line(\"//\");\n this.line(\"// CONFIGURE: Fill in the value below\");\n this.line(\"//\");\n }\n\n private addTypeGuidance(field: FieldAnalysis): void {\n switch (field.type.kind) {\n case \"array\":\n this.line(\"// This array has no bounds in your code. Choose a maximum\");\n this.line(\"// length for verification. Tradeoffs:\");\n this.line(\"// • Small (3-5): Fast, catches basic bugs\");\n this.line(\"// • Medium (10-15): Balanced, catches most bugs\");\n this.line(\"// • Large (20+): Thorough, much slower\");\n break;\n\n case \"string\":\n this.line(\"// Strings need concrete values for precise verification.\");\n this.line(\"// Provide 2-3 representative values from your app.\");\n if (field.type.nullable) {\n this.line(\"//\");\n this.line(\"// Note: This field is nullable (can be null)\");\n }\n this.line(\"//\");\n this.line(\"// Examples:\");\n this.line('// [\"user_abc123\", \"user_xyz789\", \"guest_000\"]');\n this.line('// [\"active\", \"inactive\", \"pending\"]');\n this.line(\"//\");\n this.line(\"// Alternative: Use abstract verification (less precise, faster)\");\n this.line(\"// { abstract: true }\");\n break;\n\n case \"number\":\n this.line(\"// Numbers need a range. Choose min and max values based on\");\n this.line(\"// realistic bounds in your application.\");\n if (field.type.nullable) {\n this.line(\"//\");\n this.line(\"// Note: This field is nullable (can be null)\");\n }\n this.line(\"//\");\n this.line(\"// Examples:\");\n this.line(\"// { min: 0, max: 100 } // Counter\");\n this.line(\"// { min: 0, max: 999999 } // Timestamp\");\n break;\n\n case \"map\":\n case \"set\":\n this.line(`// ${field.type.kind} needs a maximum size. How many entries`);\n this.line(\"// do you need to model to catch bugs?\");\n this.line(\"//\");\n this.line(\"// Recommended: 3-5 for most cases\");\n break;\n\n case \"object\":\n this.line(\"// Complex nested object. Configure each field separately.\");\n break;\n\n default:\n this.line(`// ${field.type.kind} type requires configuration.`);\n }\n }\n\n private generateFieldConfig(field: FieldAnalysis): string {\n switch (field.type.kind) {\n case \"boolean\":\n return \"{ type: 'boolean' }\";\n\n case \"enum\":\n if (field.type.enumValues) {\n const values = field.type.enumValues.map((v) => `\"${v}\"`).join(\", \");\n return `{ type: \"enum\", values: [${values}] }`;\n }\n return \"{ type: 'enum', values: /* CONFIGURE */ null }\";\n\n case \"array\":\n if (field.bounds?.maxLength !== undefined && field.bounds.maxLength !== null) {\n if (field.confidence === \"medium\") {\n return `{ maxLength: /* REVIEW */ ${field.bounds.maxLength} }`;\n }\n return `{ maxLength: ${field.bounds.maxLength} }`;\n }\n return \"{ maxLength: /* CONFIGURE */ null }\";\n\n case \"number\":\n if (field.bounds?.min !== undefined && field.bounds?.max !== undefined) {\n const minStr = field.bounds.min !== null ? field.bounds.min : \"/* CONFIGURE */\";\n const maxStr = field.bounds.max !== null ? field.bounds.max : \"/* CONFIGURE */\";\n\n if (field.confidence === \"high\") {\n return `{ min: ${minStr}, max: ${maxStr} }`;\n }\n return `{ min: /* REVIEW */ ${minStr}, max: /* REVIEW */ ${maxStr} }`;\n }\n return \"{ min: /* CONFIGURE */ null, max: /* CONFIGURE */ null }\";\n\n case \"string\":\n return \"{ values: /* CONFIGURE */ null }\";\n\n case \"map\":\n case \"set\":\n return \"{ maxSize: /* CONFIGURE */ null }\";\n\n default:\n return \"{ /* CONFIGURE */ }\";\n }\n }\n\n private addMessagesConfig(): void {\n this.line(\"messages: {\");\n this.indent++;\n\n this.line(\"// Maximum messages in flight simultaneously across all contexts.\");\n this.line(\"// Higher = more realistic concurrency, but exponentially slower.\");\n this.line(\"//\");\n this.line(\"// Recommended values:\");\n this.line(\"// • 2-3: Fast verification (< 10 seconds)\");\n this.line(\"// • 4-6: Balanced (10-60 seconds)\");\n this.line(\"// • 8+: Thorough but slow (minutes)\");\n this.line(\"//\");\n this.line(\"// WARNING: State space grows exponentially! Start small.\");\n this.line(\"maxInFlight: 3,\");\n this.line(\"\");\n this.line(\"// Maximum tab IDs to model (content scripts are per-tab).\");\n this.line(\"//\");\n this.line(\"// Recommended:\");\n this.line(\"// • 0-1: Most extensions (single tab or tab-agnostic)\");\n this.line(\"// • 2-3: Multi-tab coordination\");\n this.line(\"//\");\n this.line(\"// Start with 0 or 1 for faster verification.\");\n this.line(\"maxTabs: 1,\");\n\n this.indent--;\n this.line(\"},\");\n this.line(\"\");\n }\n\n private addBehaviorConfig(): void {\n this.line(\"// Verification behavior\");\n this.line(\"// ─────────────────────\");\n this.line(\"//\");\n this.line(\"// onBuild: What to do during development builds\");\n this.line(\"// • 'warn' - Show warnings but don't fail (recommended)\");\n this.line(\"// • 'error' - Fail the build on violations\");\n this.line(\"// • 'off' - Skip verification\");\n this.line(\"//\");\n this.line(\"onBuild: 'warn',\");\n this.line(\"\");\n this.line(\"// onRelease: What to do during production builds\");\n this.line(\"// • 'error' - Fail the build on violations (recommended)\");\n this.line(\"// • 'warn' - Show warnings but don't fail\");\n this.line(\"// • 'off' - Skip verification\");\n this.line(\"//\");\n this.line(\"onRelease: 'error',\");\n }\n\n private formatTypeName(type: TypeInfo): string {\n let typeName: string;\n\n switch (type.kind) {\n case \"boolean\":\n typeName = \"boolean\";\n break;\n case \"string\":\n typeName = \"string\";\n break;\n case \"number\":\n typeName = \"number\";\n break;\n case \"enum\":\n if (type.enumValues) {\n typeName = type.enumValues.map((v) => `\"${v}\"`).join(\" | \");\n } else {\n typeName = \"enum\";\n }\n break;\n case \"array\":\n if (type.elementType) {\n typeName = `${this.formatTypeName(type.elementType)}[]`;\n } else {\n typeName = \"array\";\n }\n break;\n case \"object\":\n typeName = \"object\";\n break;\n case \"map\":\n typeName = \"Map\";\n break;\n case \"set\":\n typeName = \"Set\";\n break;\n case \"null\":\n typeName = \"null\";\n break;\n default:\n typeName = \"unknown\";\n }\n\n // Append \" | null\" if type is nullable\n if (type.nullable && type.kind !== \"null\") {\n typeName += \" | null\";\n }\n\n return typeName;\n }\n\n private line(content: string): void {\n if (content === \"\") {\n this.lines.push(\"\");\n } else {\n const indentation = \" \".repeat(this.indent);\n this.lines.push(indentation + content);\n }\n }\n}\n\nexport function generateConfig(analysis: CodebaseAnalysis): string {\n const generator = new ConfigGenerator();\n return generator.generate(analysis);\n}\n",
11
11
  "// Configuration validator - detects incomplete configuration\n\nimport type { ValidationResult, ConfigIssue, VerificationConfig } from \"../types\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nexport class ConfigValidator {\n private issues: ConfigIssue[] = [];\n\n validate(configPath: string): ValidationResult {\n this.issues = [];\n\n if (!fs.existsSync(configPath)) {\n this.issues.push({\n type: \"incomplete\",\n severity: \"error\",\n message: \"Configuration file does not exist\",\n suggestion: \"Run 'bun verify --setup' to generate configuration\",\n });\n\n return {\n valid: false,\n issues: this.issues,\n };\n }\n\n // Read the source file\n const configSource = fs.readFileSync(configPath, \"utf-8\");\n\n // Check for CONFIGURE markers\n this.checkConfigureMarkers(configSource);\n\n // Check for REVIEW markers (warnings only)\n this.checkReviewMarkers(configSource);\n\n // Load and validate the actual config\n try {\n const config = this.loadConfig(configPath);\n this.validateConfig(config);\n } catch (error) {\n this.issues.push({\n type: \"invalid_value\",\n severity: \"error\",\n message: `Failed to load configuration: ${error instanceof Error ? error.message : String(error)}`,\n suggestion: \"Check for syntax errors in the configuration file\",\n });\n }\n\n const hasErrors = this.issues.some((i) => i.severity === \"error\");\n\n return {\n valid: !hasErrors,\n issues: this.issues,\n };\n }\n\n private checkConfigureMarkers(source: string): void {\n const configureRegex = /\\/\\*\\s*CONFIGURE\\s*\\*\\//g;\n const matches = [...source.matchAll(configureRegex)];\n\n if (matches.length > 0) {\n // Find line numbers for each match\n const lines = source.split(\"\\n\");\n const locations: Array<{ line: number; column: number; context: string }> = [];\n\n for (const match of matches) {\n const position = match.index!;\n const lineNumber = source.substring(0, position).split(\"\\n\").length;\n const line = lines[lineNumber - 1];\n\n // Extract field name from context\n const fieldMatch = line.match(/\"([^\"]+)\":\\s*{/);\n const fieldName = fieldMatch ? fieldMatch[1] : \"unknown\";\n\n locations.push({\n line: lineNumber,\n column: match.index! - source.lastIndexOf(\"\\n\", position),\n context: fieldName,\n });\n }\n\n this.issues.push({\n type: \"incomplete\",\n severity: \"error\",\n message: `Found ${matches.length} incomplete configuration marker(s)`,\n suggestion: \"Replace all /* CONFIGURE */ markers with actual values\",\n });\n\n // Add individual issues for each marker\n for (const loc of locations) {\n this.issues.push({\n type: \"incomplete\",\n severity: \"error\",\n field: loc.context,\n location: { line: loc.line, column: loc.column },\n message: `Incomplete configuration at line ${loc.line}`,\n suggestion: `Fill in value for \"${loc.context}\"`,\n });\n }\n }\n }\n\n private checkReviewMarkers(source: string): void {\n const reviewRegex = /\\/\\*\\s*REVIEW\\s*\\*\\//g;\n const matches = [...source.matchAll(reviewRegex)];\n\n if (matches.length > 0) {\n this.issues.push({\n type: \"incomplete\",\n severity: \"warning\",\n message: `Found ${matches.length} value(s) that should be reviewed`,\n suggestion: \"Review auto-generated values marked with /* REVIEW */\",\n });\n }\n }\n\n private loadConfig(configPath: string): VerificationConfig {\n // Dynamic import of the config file\n // Note: In production, this would use proper module loading\n delete require.cache[require.resolve(path.resolve(configPath))];\n const module = require(path.resolve(configPath));\n return module.default || module;\n }\n\n private validateConfig(config: VerificationConfig): void {\n // Check for null values\n this.findNullPlaceholders(config.state, \"state\");\n this.findNullPlaceholders(config.messages, \"messages\");\n\n // Validate bounds\n this.validateBounds(config);\n }\n\n private findNullPlaceholders(obj: any, path: string): void {\n if (obj === null || obj === undefined) {\n this.issues.push({\n type: \"null_placeholder\",\n severity: \"error\",\n field: path,\n message: `Configuration incomplete: ${path}`,\n suggestion: \"Replace null with a concrete value\",\n });\n return;\n }\n\n if (typeof obj !== \"object\") {\n return;\n }\n\n for (const [key, value] of Object.entries(obj)) {\n const fullPath = `${path}.${key}`;\n\n if (value === null) {\n this.issues.push({\n type: \"null_placeholder\",\n severity: \"error\",\n field: fullPath,\n message: `Configuration incomplete: ${fullPath}`,\n suggestion: \"Replace null with a concrete value\",\n });\n } else if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n this.findNullPlaceholders(value, fullPath);\n }\n }\n }\n\n private validateBounds(config: VerificationConfig): void {\n // Check messages config\n if (config.messages.maxInFlight !== null) {\n if (config.messages.maxInFlight < 1) {\n this.issues.push({\n type: \"invalid_value\",\n severity: \"error\",\n field: \"messages.maxInFlight\",\n message: \"maxInFlight must be at least 1\",\n suggestion: \"Use a value between 4-10 for most cases\",\n });\n }\n\n if (config.messages.maxInFlight > 20) {\n this.issues.push({\n type: \"unrealistic_bound\",\n severity: \"warning\",\n field: \"messages.maxInFlight\",\n message: \"Very high maxInFlight (>20) will slow verification significantly\",\n suggestion: \"Use 4-10 for development, up to 20 for thorough verification\",\n });\n }\n }\n\n if (config.messages.maxTabs !== null) {\n if (config.messages.maxTabs < 1) {\n this.issues.push({\n type: \"invalid_value\",\n severity: \"error\",\n field: \"messages.maxTabs\",\n message: \"maxTabs must be at least 1\",\n suggestion: \"Use 2-3 for most cases\",\n });\n }\n\n if (config.messages.maxTabs > 10) {\n this.issues.push({\n type: \"unrealistic_bound\",\n severity: \"warning\",\n field: \"messages.maxTabs\",\n message: \"Very high maxTabs (>10) will slow verification significantly\",\n suggestion: \"Use 2-3 for most cases\",\n });\n }\n }\n\n // Check state field bounds\n for (const [fieldName, fieldConfig] of Object.entries(config.state)) {\n if (typeof fieldConfig !== \"object\" || fieldConfig === null) {\n continue;\n }\n\n // Array bounds\n if (\"maxLength\" in fieldConfig) {\n const maxLength = (fieldConfig as any).maxLength;\n if (maxLength !== null) {\n if (maxLength < 0) {\n this.issues.push({\n type: \"invalid_value\",\n severity: \"error\",\n field: `state.${fieldName}.maxLength`,\n message: \"maxLength cannot be negative\",\n suggestion: \"Use a positive number\",\n });\n }\n\n if (maxLength > 50) {\n this.issues.push({\n type: \"unrealistic_bound\",\n severity: \"warning\",\n field: `state.${fieldName}.maxLength`,\n message: `Very large maxLength (${maxLength}) will slow verification`,\n suggestion: \"Use 10-20 for most cases\",\n });\n }\n }\n }\n\n // Number bounds\n if (\"min\" in fieldConfig && \"max\" in fieldConfig) {\n const min = (fieldConfig as any).min;\n const max = (fieldConfig as any).max;\n\n if (min !== null && max !== null && min > max) {\n this.issues.push({\n type: \"invalid_value\",\n severity: \"error\",\n field: `state.${fieldName}`,\n message: `Invalid range: min (${min}) > max (${max})`,\n suggestion: \"Ensure min is less than or equal to max\",\n });\n }\n\n if (min !== null && max !== null && max - min > 1000) {\n this.issues.push({\n type: \"unrealistic_bound\",\n severity: \"warning\",\n field: `state.${fieldName}`,\n message: `Very large number range (${max - min}) will slow verification`,\n suggestion: \"Use smaller ranges when possible\",\n });\n }\n }\n\n // Map/Set bounds\n if (\"maxSize\" in fieldConfig) {\n const maxSize = (fieldConfig as any).maxSize;\n if (maxSize !== null) {\n if (maxSize < 0) {\n this.issues.push({\n type: \"invalid_value\",\n severity: \"error\",\n field: `state.${fieldName}.maxSize`,\n message: \"maxSize cannot be negative\",\n suggestion: \"Use a positive number\",\n });\n }\n\n if (maxSize > 20) {\n this.issues.push({\n type: \"unrealistic_bound\",\n severity: \"warning\",\n field: `state.${fieldName}.maxSize`,\n message: `Very large maxSize (${maxSize}) will slow verification`,\n suggestion: \"Use 3-5 for most cases\",\n });\n }\n }\n }\n }\n }\n}\n\nexport function validateConfig(configPath: string): ValidationResult {\n const validator = new ConfigValidator();\n return validator.validate(configPath);\n}\n"
12
12
  ],
13
- "mappings": "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",
14
- "debugId": "8C53367A419D15AA64756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "5E943FE5FB56B58764756E2164756E21",
15
15
  "names": []
16
16
  }