@fairfox/polly 0.7.0 → 0.7.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.
@@ -9,11 +9,11 @@
9
9
  "#!/usr/bin/env bun\n// CLI for verification system\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { generateConfig } from \"./codegen/config\";\nimport { validateConfig } from \"./config/parser\";\nimport { analyzeCodebase } from \"./extract/types\";\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 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 displayAnalysisResults(analysis);\n displayAnalysisSummary(analysis);\n\n // Generate and write config\n const configContent = generateConfig(analysis);\n const configPath = path.join(process.cwd(), \"specs\", \"verification.config.ts\");\n\n writeConfigFile(configPath, configContent);\n displaySetupSuccess(configPath);\n } catch (_error) {\n process.exit(1);\n }\n}\n\nfunction displayAnalysisResults(analysis: {\n stateType?: unknown;\n fields: unknown[];\n messageTypes: unknown[];\n}): void {\n if (analysis.stateType) {\n console.log(color(`āœ“ Found state type with ${analysis.fields.length} field(s)`, COLORS.green));\n } else {\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 }\n\n console.log(color(`āœ“ Found ${analysis.messageTypes.length} message type(s)`, COLORS.green));\n}\n\nfunction displayAnalysisSummary(analysis: {\n fields: Array<{ path: string; type: { kind: string }; confidence: string }>;\n}): void {\n if (analysis.fields.length === 0) return;\n\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 = getFieldStatus(field.confidence);\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\nfunction getFieldStatus(confidence: string): string {\n if (confidence === \"high\") return color(\"āœ“ Auto-configured\", COLORS.green);\n if (confidence === \"medium\") return color(\"⚠ Review needed\", COLORS.yellow);\n return color(\"⚠ Manual config\", COLORS.red);\n}\n\nfunction writeConfigFile(configPath: string, configContent: string): void {\n const configDir = path.dirname(configPath);\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true });\n }\n fs.writeFileSync(configPath, configContent, \"utf-8\");\n}\n\nfunction displaySetupSuccess(configPath: string): void {\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\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 displayValidationErrors(errors);\n displayValidationWarnings(warnings);\n\n console.log(color(\"Configuration incomplete. Please fix the errors above.\\n\", COLORS.red));\n process.exit(1);\n}\n\nfunction displayValidationErrors(\n errors: Array<{\n message: string;\n field?: string;\n location?: { line: number };\n suggestion: string;\n }>\n): void {\n if (errors.length === 0) return;\n\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\nfunction displayValidationWarnings(\n warnings: Array<{ message: string; field?: string; suggestion: string }>\n): void {\n if (warnings.length === 0) return;\n\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\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 process.exit(1);\n }\n}\n\nasync function runFullVerification(configPath: string) {\n // Load config\n const config = await loadVerificationConfig(configPath);\n\n // Analyze codebase\n const analysis = await runCodebaseAnalysis();\n\n // Generate TLA+ specs\n const { specPath, specDir } = await generateAndWriteTLASpecs(config, analysis);\n\n // Find and copy base spec\n findAndCopyBaseSpec(specDir);\n\n console.log(color(\"āœ“ Specification generated\", COLORS.green));\n console.log(color(` ${specPath}`, COLORS.gray));\n console.log();\n\n // Setup and run Docker\n const docker = await setupDocker();\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 displayVerificationResults(result, specDir);\n}\n\nasync function loadVerificationConfig(configPath: string): Promise<unknown> {\n const resolvedPath = path.resolve(configPath);\n const configModule = await import(`file://${resolvedPath}?t=${Date.now()}`);\n return configModule.default;\n}\n\nasync function runCodebaseAnalysis(): Promise<{ fields: unknown[]; messageTypes: unknown[] }> {\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 return analysis;\n}\n\nasync function generateAndWriteTLASpecs(\n config: unknown,\n analysis: unknown\n): Promise<{ specPath: string; specDir: string }> {\n const { generateTLA } = await import(\"./codegen/tla\");\n\n console.log(color(\"šŸ“ Generating TLA+ specification...\", COLORS.blue));\n const { spec, cfg } = await generateTLA(config, analysis);\n\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 return { specPath, specDir };\n}\n\nfunction findAndCopyBaseSpec(specDir: string): void {\n const possiblePaths = [\n path.join(process.cwd(), \"specs\", \"tla\", \"MessageRouter.tla\"),\n path.join(__dirname, \"..\", \"specs\", \"tla\", \"MessageRouter.tla\"),\n path.join(__dirname, \"..\", \"..\", \"specs\", \"tla\", \"MessageRouter.tla\"),\n path.join(\n process.cwd(),\n \"external\",\n \"polly\",\n \"packages\",\n \"verify\",\n \"specs\",\n \"tla\",\n \"MessageRouter.tla\"\n ),\n path.join(\n process.cwd(),\n \"node_modules\",\n \"@fairfox\",\n \"polly-verify\",\n \"specs\",\n \"tla\",\n \"MessageRouter.tla\"\n ),\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(\n color(\"āš ļø Warning: MessageRouter.tla not found, verification may fail\", COLORS.yellow)\n );\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\nasync function setupDocker(): Promise<{\n runTLC: (\n specPath: string,\n options: { workers: number; timeout: number }\n ) => Promise<{\n success: boolean;\n stats?: { statesGenerated: number; distinctStates: number };\n violation?: { name: string; trace: string[] };\n error?: string;\n output: string;\n }>;\n}> {\n const { DockerRunner } = await import(\"./runner/docker\");\n\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 return docker;\n}\n\nfunction displayVerificationResults(\n result: {\n success: boolean;\n stats?: { statesGenerated: number; distinctStates: number };\n violation?: { name: string; trace: string[] };\n error?: string;\n output: string;\n },\n specDir: string\n): void {\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 return;\n }\n\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\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 if (error instanceof Error && error.stack) {\n // Stack trace already printed by underlying functions\n }\n process.exit(1);\n});\n",
10
10
  "// Configuration file generator with smart comments\n\nimport type { ProjectType } from \"../../../analysis/src/types/architecture\";\nimport type { CodebaseAnalysis, FieldAnalysis, TypeInfo } from \"../types\";\n\nexport class ConfigGenerator {\n private lines: string[] = [];\n private indent = 0;\n private projectType: ProjectType = \"chrome-extension\";\n\n generate(analysis: CodebaseAnalysis, projectType: ProjectType = \"chrome-extension\"): string {\n this.lines = [];\n this.indent = 0;\n this.projectType = projectType;\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(`// Project type: ${this.projectType}`);\n this.line(\"//\");\n this.line(\"// This file configures TLA+ verification for your application.\");\n this.line(\"// Some values are auto-configured, others need your input.\");\n this.line(\"//\");\n this.line(\"// Entry points:\");\n this.addEntryPointsDocumentation();\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 addEntryPointsDocumentation(): void {\n switch (this.projectType) {\n case \"websocket-app\":\n this.line(\"// • server - WebSocket server\");\n this.line(\"// • client-* - Connected clients\");\n break;\n case \"pwa\":\n this.line(\"// • ServiceWorker - Service worker context\");\n this.line(\"// • Window - Browser window context\");\n break;\n case \"electron\":\n this.line(\"// • MainProcess - Electron main process\");\n this.line(\"// • Renderer-* - Renderer processes\");\n break;\n case \"chrome-extension\":\n this.line(\"// • background - Background service worker\");\n this.line(\"// • content - Content scripts\");\n this.line(\"// • popup - Extension popup\");\n break;\n case \"generic\":\n this.line(\"// • Detected from your code\");\n break;\n }\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 if (!field) continue;\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 return this.generateEnumFieldConfig(field);\n\n case \"array\":\n return this.generateArrayFieldConfig(field);\n\n case \"number\":\n return this.generateNumberFieldConfig(field);\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 generateEnumFieldConfig(field: FieldAnalysis): string {\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\n private generateArrayFieldConfig(field: FieldAnalysis): string {\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\n private generateNumberFieldConfig(field: FieldAnalysis): string {\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\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\n // Add project-specific fields\n switch (this.projectType) {\n case \"websocket-app\":\n this.line(\"// Maximum number of connected WebSocket clients to model.\");\n this.line(\"//\");\n this.line(\"// Recommended:\");\n this.line(\"// • 2-3: Most WebSocket apps\");\n this.line(\"// • 4-5: Multi-client coordination\");\n this.line(\"//\");\n this.line(\"maxClients: 3,\");\n this.line(\"\");\n this.line(\"// Maximum messages per client in flight.\");\n this.line(\"//\");\n this.line(\"// Recommended:\");\n this.line(\"// • 1-2: Simple request-response\");\n this.line(\"// • 3-4: Complex message flows\");\n this.line(\"//\");\n this.line(\"maxMessagesPerClient: 2,\");\n break;\n\n case \"pwa\":\n this.line(\"// Maximum number of service workers to model.\");\n this.line(\"//\");\n this.line(\"// Recommended:\");\n this.line(\"// • 1: Most PWAs (single service worker)\");\n this.line(\"// • 2: Testing worker updates\");\n this.line(\"//\");\n this.line(\"maxWorkers: 1,\");\n this.line(\"\");\n this.line(\"// Maximum number of client windows to model.\");\n this.line(\"//\");\n this.line(\"// Recommended:\");\n this.line(\"// • 2-3: Most PWAs\");\n this.line(\"// • 4-5: Multi-window coordination\");\n this.line(\"//\");\n this.line(\"maxClients: 3,\");\n break;\n\n case \"electron\":\n this.line(\"// Maximum number of renderer processes to model.\");\n this.line(\"//\");\n this.line(\"// Recommended:\");\n this.line(\"// • 1-2: Most Electron apps\");\n this.line(\"// • 3-4: Multi-window applications\");\n this.line(\"//\");\n this.line(\"maxRenderers: 2,\");\n break;\n\n case \"chrome-extension\":\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 break;\n\n case \"generic\":\n this.line(\"// Maximum contexts/actors to model.\");\n this.line(\"//\");\n this.line(\"// Recommended:\");\n this.line(\"// • 2-3: Simple message passing\");\n this.line(\"// • 4-5: Complex coordination\");\n this.line(\"//\");\n this.line(\"maxContexts: 3,\");\n break;\n }\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(\n analysis: CodebaseAnalysis,\n projectType: ProjectType = \"chrome-extension\"\n): string {\n const generator = new ConfigGenerator();\n return generator.generate(analysis, projectType);\n}\n",
11
11
  "// Configuration validator - detects incomplete configuration\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ConfigIssue, ValidationResult, VerificationConfig } from \"../types\";\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 ?? 0;\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 ?? 0) - source.lastIndexOf(\"\\n\", position),\n context: fieldName ?? \"unknown\",\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.verificationConfig || 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: unknown, 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 this.validateMessageBounds(config.messages);\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 this.validateFieldBounds(fieldName, fieldConfig);\n }\n }\n\n private validateMessageBounds(messages: {\n maxInFlight: number | null;\n maxTabs?: number | null;\n }): void {\n if (messages.maxInFlight !== null) {\n if (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 (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 (messages.maxTabs !== null && messages.maxTabs !== undefined) {\n if (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 (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\n private validateFieldBounds(fieldName: string, fieldConfig: Record<string, unknown>): void {\n // Array bounds\n if (\"maxLength\" in fieldConfig) {\n this.validateArrayBounds(fieldName, fieldConfig);\n }\n\n // Number bounds\n if (\"min\" in fieldConfig && \"max\" in fieldConfig) {\n this.validateNumberBounds(fieldName, fieldConfig);\n }\n\n // Map/Set bounds\n if (\"maxSize\" in fieldConfig) {\n this.validateMapSetBounds(fieldName, fieldConfig);\n }\n }\n\n private validateArrayBounds(fieldName: string, fieldConfig: Record<string, unknown>): void {\n const maxLength = (fieldConfig as { maxLength?: number | null }).maxLength;\n if (maxLength === null) return;\n\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 private validateNumberBounds(fieldName: string, fieldConfig: Record<string, unknown>): void {\n const min = (fieldConfig as { min?: number | null }).min;\n const max = (fieldConfig as { max?: number | null }).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 private validateMapSetBounds(fieldName: string, fieldConfig: Record<string, unknown>): void {\n const maxSize = (fieldConfig as { maxSize?: number | null }).maxSize;\n if (maxSize === null) return;\n\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\nexport function validateConfig(configPath: string): ValidationResult {\n const validator = new ConfigValidator();\n return validator.validate(configPath);\n}\n",
12
- "// Type extraction from TypeScript using ts-morph\n\nimport { Project, type SourceFile, type Type } from \"ts-morph\";\nimport type { CodebaseAnalysis, FieldAnalysis, TypeInfo } 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 ? this.extractStateType(stateFilePath) : 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 // Combine and filter message types to only include valid TLA+ identifiers\n const allMessageTypes = Array.from(new Set([...messageTypes, ...handlerAnalysis.messageTypes]));\n const validMessageTypes: string[] = [];\n const invalidMessageTypes: string[] = [];\n\n for (const msgType of allMessageTypes) {\n if (this.isValidTLAIdentifier(msgType)) {\n validMessageTypes.push(msgType);\n } else {\n invalidMessageTypes.push(msgType);\n }\n }\n\n // Log warnings about invalid message types\n if (invalidMessageTypes.length > 0 && process.env[\"POLLY_DEBUG\"]) {\n console.log(`[WARN] Filtered out ${invalidMessageTypes.length} invalid message type(s):`);\n for (const invalid of invalidMessageTypes) {\n console.log(`[WARN] - \"${invalid}\" (not a valid TLA+ identifier)`);\n }\n }\n\n return {\n stateType,\n messageTypes: validMessageTypes,\n fields,\n handlers: handlerAnalysis.handlers,\n };\n }\n\n /**\n * Check if a string is a valid TLA+ identifier\n * TLA+ identifiers must:\n * - Start with a letter (a-zA-Z)\n * - Contain only letters, digits, and underscores\n * - Not be empty\n */\n private isValidTLAIdentifier(s: string): boolean {\n if (!s || s.length === 0) {\n return false;\n }\n // TLA+ identifiers: start with letter, contain only alphanumeric + underscore\n return /^[a-zA-Z][a-zA-Z0-9_]*$/.test(s);\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 =\n 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\") || 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 * Handles:\n * - Simple string literal unions\n * - Discriminated unions ({ type: 'foo' } | { type: 'bar' })\n * - Type aliases across files\n * - Template literal types (with warning)\n * - Conditional types (conservatively)\n * - Mapped types\n */\n private findMessageTypes(): string[] {\n const messageTypes: string[] = [];\n const warnings: 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 might contain message types\n for (const typeAlias of file.getTypeAliases()) {\n const extractedTypes = this.extractMessageTypesFromType(\n typeAlias.getType(),\n typeAlias.getName(),\n file,\n warnings\n );\n messageTypes.push(...extractedTypes);\n }\n }\n\n // Log warnings about unbounded types\n if (warnings.length > 0 && process.env[\"POLLY_DEBUG\"]) {\n console.log(\"[WARN] Message type extraction warnings:\");\n for (const warning of warnings) {\n console.log(`[WARN] ${warning}`);\n }\n }\n\n return [...new Set(messageTypes)]; // Dedupe\n }\n\n /**\n * Extract message types from a TypeScript type\n * Recursively handles unions, discriminated unions, aliases, etc.\n */\n private extractMessageTypesFromType(\n type: Type,\n typeName: string,\n sourceFile: SourceFile,\n warnings: string[]\n ): string[] {\n if (type.isUnion()) {\n return this.extractFromUnionType(type, typeName, sourceFile, warnings);\n }\n\n if (type.getAliasSymbol()) {\n return this.extractFromTypeAlias(type, typeName, sourceFile, warnings);\n }\n\n if (type.isConditionalType?.()) {\n return this.extractFromConditionalType(type, warnings);\n }\n\n if (type.getText().includes(\"[K in \")) {\n return this.extractFromMappedType(type, sourceFile, warnings);\n }\n\n if (type.getText().includes(\"`\")) {\n this.warnTemplateLiteral(type, warnings);\n return [];\n }\n\n return [];\n }\n\n /**\n * Extract message types from union type\n */\n private extractFromUnionType(\n type: Type,\n typeName: string,\n sourceFile: SourceFile,\n warnings: string[]\n ): string[] {\n const messageTypes: string[] = [];\n const unionTypes = type.getUnionTypes();\n\n for (const unionType of unionTypes) {\n const extracted = this.extractFromUnionMember(unionType, typeName, sourceFile, warnings);\n messageTypes.push(...extracted);\n }\n\n return messageTypes;\n }\n\n /**\n * Extract message types from a single union member\n */\n private extractFromUnionMember(\n unionType: Type,\n typeName: string,\n sourceFile: SourceFile,\n warnings: string[]\n ): string[] {\n if (unionType.isObject()) {\n return this.extractFromDiscriminatedUnion(unionType, sourceFile, warnings);\n }\n\n if (unionType.isStringLiteral()) {\n return [unionType.getLiteralValue() as string];\n }\n\n if (unionType.getAliasSymbol()) {\n const aliasedType = unionType.getAliasSymbol()?.getDeclaredType();\n if (aliasedType) {\n return this.extractMessageTypesFromType(aliasedType, typeName, sourceFile, warnings);\n }\n }\n\n return [];\n }\n\n /**\n * Extract message types from discriminated union\n */\n private extractFromDiscriminatedUnion(\n unionType: Type,\n sourceFile: SourceFile,\n warnings: string[]\n ): string[] {\n const typeProperty = unionType.getProperty(\"type\");\n if (!typeProperty) {\n return [];\n }\n\n const typeType = typeProperty.getTypeAtLocation(sourceFile);\n\n if (typeType.isStringLiteral()) {\n return [typeType.getLiteralValue() as string];\n }\n\n if (typeType.getText().includes(\"`\")) {\n warnings.push(\n `Template literal type in discriminant: ${typeType.getText()} - may be unbounded`\n );\n }\n\n return [];\n }\n\n /**\n * Extract message types from type alias\n */\n private extractFromTypeAlias(\n type: Type,\n typeName: string,\n sourceFile: SourceFile,\n warnings: string[]\n ): string[] {\n const aliasedType = type.getAliasSymbol()?.getDeclaredType();\n if (!aliasedType || aliasedType === type) {\n return [];\n }\n\n return this.extractMessageTypesFromType(aliasedType, typeName, sourceFile, warnings);\n }\n\n /**\n * Extract message types from conditional type\n */\n private extractFromConditionalType(type: Type, warnings: string[]): string[] {\n warnings.push(`Conditional type detected: ${type.getText()} - extracting conservatively`);\n\n const messageTypes: string[] = [];\n const typeText = type.getText();\n const parts = typeText.split(\"?\");\n\n if (parts.length < 2) {\n return messageTypes;\n }\n\n const branches = parts[1].split(\":\");\n for (const branch of branches) {\n const extracted = this.extractStringLiteralFromBranch(branch);\n if (extracted) {\n messageTypes.push(extracted);\n }\n }\n\n return messageTypes;\n }\n\n /**\n * Extract string literal from conditional branch\n */\n private extractStringLiteralFromBranch(branch: string): string | null {\n const trimmed = branch.trim();\n const match = trimmed.match(/^[\"'](\\w+)[\"']$/);\n return match?.[1] ?? null;\n }\n\n /**\n * Extract message types from mapped type\n */\n private extractFromMappedType(type: Type, sourceFile: SourceFile, warnings: string[]): string[] {\n warnings.push(`Mapped type detected: ${type.getText()} - attempting to extract keys`);\n\n const match = type.getText().match(/\\[K in ([^\\]]+)\\]/);\n if (!match?.[1]) {\n return [];\n }\n\n const keyTypeName = match[1].trim();\n const keyTypeAlias = sourceFile.getTypeAlias?.(keyTypeName);\n\n if (!keyTypeAlias) {\n return [];\n }\n\n const keyType = keyTypeAlias.getType();\n return this.extractMessageTypesFromType(keyType, keyTypeName, sourceFile, warnings);\n }\n\n /**\n * Warn about template literal types\n */\n private warnTemplateLiteral(type: Type, warnings: string[]): void {\n warnings.push(\n `Template literal type: ${type.getText()} - this creates an unbounded set and cannot be fully extracted`\n );\n }\n\n /**\n * Convert ts-morph Type to our TypeInfo\n */\n private convertType(type: Type, name: string): TypeInfo {\n const nullable = type.isNullable();\n\n if (type.isBoolean() || type.isBooleanLiteral()) {\n return { name, kind: \"boolean\", nullable };\n }\n\n if (type.isUnion()) {\n return this.convertUnionType(type, name, nullable);\n }\n\n if (type.isString() || type.isStringLiteral()) {\n return { name, kind: \"string\", nullable };\n }\n\n if (type.isNumber() || type.isNumberLiteral()) {\n return { name, kind: \"number\", nullable };\n }\n\n if (type.isArray()) {\n return this.convertArrayType(type, name, nullable);\n }\n\n const collectionType = this.tryConvertCollectionType(type, name, nullable);\n if (collectionType) {\n return collectionType;\n }\n\n if (type.isObject()) {\n return this.convertObjectType(type, name, nullable);\n }\n\n if (type.isNull()) {\n return { name, kind: \"null\", nullable: true };\n }\n\n return { name, kind: \"unknown\", nullable };\n }\n\n /**\n * Convert union type to TypeInfo\n */\n private convertUnionType(type: Type, name: string, nullable: boolean): TypeInfo {\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 { name, kind: \"enum\", nullable, enumValues };\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 const firstType = nonNullTypes[0];\n if (firstType) {\n const baseType = this.convertType(firstType, name);\n return { ...baseType, nullable: true };\n }\n }\n\n // Generic union\n return {\n name,\n kind: \"union\",\n nullable,\n unionTypes: unionTypes.map((t, i) => this.convertType(t, `${name}_${i}`)),\n };\n }\n\n /**\n * Convert array type to TypeInfo\n */\n private convertArrayType(type: Type, name: string, nullable: boolean): TypeInfo {\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 /**\n * Try to convert Map or Set type to TypeInfo\n */\n private tryConvertCollectionType(type: Type, name: string, nullable: boolean): TypeInfo | null {\n const symbol = type.getSymbol();\n if (!symbol) return null;\n\n const symbolName = symbol.getName();\n\n if (symbolName === \"Map\") {\n const typeArgs = type.getTypeArguments();\n return {\n name,\n kind: \"map\",\n nullable,\n valueType: typeArgs?.[1] ? this.convertType(typeArgs[1], `${name}_value`) : undefined,\n };\n }\n\n if (symbolName === \"Set\") {\n const typeArgs = type.getTypeArguments();\n return {\n name,\n kind: \"set\",\n nullable,\n elementType: typeArgs?.[0] ? this.convertType(typeArgs[0], `${name}_element`) : undefined,\n };\n }\n\n return null;\n }\n\n /**\n * Convert object type to TypeInfo\n */\n private convertObjectType(type: Type, name: string, nullable: boolean): TypeInfo {\n const properties: Record<string, TypeInfo> = {};\n const sourceFile = this.project.getSourceFiles()[0];\n\n if (sourceFile) {\n for (const prop of type.getProperties()) {\n const propName = prop.getName();\n const propType = prop.getTypeAtLocation(sourceFile);\n properties[propName] = this.convertType(propType, propName);\n }\n }\n\n return { name, kind: \"object\", nullable, properties };\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 if (type.kind === \"boolean\") return this.analyzeBooleanField(analysis);\n if (type.kind === \"enum\") return this.analyzeEnumField(analysis, type);\n if (type.kind === \"array\") return this.analyzeArrayField(analysis);\n if (type.kind === \"number\") return this.analyzeNumberField(analysis);\n if (type.kind === \"string\") return this.analyzeStringField(analysis);\n if (type.kind === \"map\" || type.kind === \"set\") return this.analyzeMapSetField(analysis);\n\n return analysis;\n }\n\n private analyzeBooleanField(analysis: FieldAnalysis): FieldAnalysis {\n analysis.confidence = \"high\";\n analysis.evidence.push(\"Boolean type - auto-configured\");\n return analysis;\n }\n\n private analyzeEnumField(analysis: FieldAnalysis, type: TypeInfo): FieldAnalysis {\n if (type.enumValues) {\n analysis.confidence = \"high\";\n analysis.evidence.push(`Enum with ${type.enumValues.length} values`);\n if (analysis.bounds) {\n analysis.bounds.values = type.enumValues;\n }\n }\n return analysis;\n }\n\n private analyzeArrayField(analysis: FieldAnalysis): FieldAnalysis {\n analysis.confidence = \"low\";\n analysis.suggestions.push(\"Choose maxLength: 5 (fast), 10 (balanced), or 20 (thorough)\");\n if (analysis.bounds) {\n analysis.bounds.maxLength = undefined;\n }\n\n const foundBound = this.findArrayBound();\n if (foundBound && analysis.bounds) {\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 private analyzeNumberField(analysis: FieldAnalysis): FieldAnalysis {\n analysis.confidence = \"low\";\n analysis.suggestions.push(\"Provide min and max values based on your application logic\");\n if (analysis.bounds) {\n analysis.bounds.min = undefined;\n analysis.bounds.max = undefined;\n }\n\n const foundBound = this.findNumberBound();\n if (foundBound && analysis.bounds) {\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 private analyzeStringField(analysis: FieldAnalysis): FieldAnalysis {\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 if (analysis.bounds) {\n analysis.bounds.values = undefined;\n }\n return analysis;\n }\n\n private analyzeMapSetField(analysis: FieldAnalysis): FieldAnalysis {\n analysis.confidence = \"low\";\n analysis.suggestions.push(\"Provide maxSize (recommended: 3-5)\");\n if (analysis.bounds) {\n analysis.bounds.maxSize = undefined;\n }\n return analysis;\n }\n\n /**\n * Try to find array bounds by searching for length checks\n */\n private findArrayBound(): { 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(): { 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",
12
+ "// Type extraction from TypeScript using ts-morph\n\nimport { Project, type SourceFile, type Type } from \"ts-morph\";\nimport type { CodebaseAnalysis, FieldAnalysis, TypeInfo } 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 ? this.extractStateType(stateFilePath) : 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 handlerAnalysis = this.extractHandlerAnalysis();\n\n // Filter message types and handlers to only include valid TLA+ identifiers\n const validMessageTypes = this.filterAndLogMessageTypes(\n messageTypes,\n handlerAnalysis.messageTypes\n );\n const validHandlers = this.filterAndLogHandlers(handlerAnalysis.handlers);\n\n return {\n stateType,\n messageTypes: validMessageTypes,\n fields,\n handlers: validHandlers,\n };\n }\n\n /**\n * Extract handler analysis from the project\n */\n private extractHandlerAnalysis() {\n const configFilePath = this.project.getCompilerOptions()[\"configFilePath\"];\n const tsConfigPath = typeof configFilePath === \"string\" ? configFilePath : \"tsconfig.json\";\n const handlerExtractor = new HandlerExtractor(tsConfigPath);\n return handlerExtractor.extractHandlers();\n }\n\n /**\n * Filter and log message types, keeping only valid TLA+ identifiers\n */\n private filterAndLogMessageTypes(\n messageTypes: string[],\n handlerMessageTypes: Set<string>\n ): string[] {\n const allMessageTypes = Array.from(new Set([...messageTypes, ...handlerMessageTypes]));\n const validMessageTypes: string[] = [];\n const invalidMessageTypes: string[] = [];\n\n for (const msgType of allMessageTypes) {\n if (this.isValidTLAIdentifier(msgType)) {\n validMessageTypes.push(msgType);\n } else {\n invalidMessageTypes.push(msgType);\n }\n }\n\n this.logInvalidMessageTypes(invalidMessageTypes);\n return validMessageTypes;\n }\n\n /**\n * Log warnings about invalid message types\n */\n private logInvalidMessageTypes(invalidMessageTypes: string[]): void {\n if (invalidMessageTypes.length === 0 || !process.env[\"POLLY_DEBUG\"]) return;\n\n console.log(`[WARN] Filtered out ${invalidMessageTypes.length} invalid message type(s):`);\n for (const invalid of invalidMessageTypes) {\n console.log(`[WARN] - \"${invalid}\" (not a valid TLA+ identifier)`);\n }\n }\n\n /**\n * Filter and log handlers, keeping only those with valid TLA+ identifier message types\n */\n private filterAndLogHandlers(\n handlers: Array<{ messageType: string; location: { file: string; line: number } }>\n ) {\n const validHandlers = handlers.filter((h) => this.isValidTLAIdentifier(h.messageType));\n\n this.logInvalidHandlers(handlers, validHandlers);\n return validHandlers;\n }\n\n /**\n * Log warnings about filtered handlers\n */\n private logInvalidHandlers(\n allHandlers: Array<{ messageType: string; location: { file: string; line: number } }>,\n validHandlers: Array<{ messageType: string }>\n ): void {\n const filteredHandlerCount = allHandlers.length - validHandlers.length;\n if (filteredHandlerCount === 0 || !process.env[\"POLLY_DEBUG\"]) return;\n\n console.log(\n `[WARN] Filtered out ${filteredHandlerCount} handler(s) with invalid message types:`\n );\n for (const handler of allHandlers) {\n if (!this.isValidTLAIdentifier(handler.messageType)) {\n console.log(\n `[WARN] - Handler for \"${handler.messageType}\" at ${handler.location.file}:${handler.location.line}`\n );\n }\n }\n }\n\n /**\n * Check if a string is a valid TLA+ identifier\n * TLA+ identifiers must:\n * - Start with a letter (a-zA-Z)\n * - Contain only letters, digits, and underscores\n * - Not be empty\n */\n private isValidTLAIdentifier(s: string): boolean {\n if (!s || s.length === 0) {\n return false;\n }\n // TLA+ identifiers: start with letter, contain only alphanumeric + underscore\n return /^[a-zA-Z][a-zA-Z0-9_]*$/.test(s);\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 =\n 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\") || 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 * Handles:\n * - Simple string literal unions\n * - Discriminated unions ({ type: 'foo' } | { type: 'bar' })\n * - Type aliases across files\n * - Template literal types (with warning)\n * - Conditional types (conservatively)\n * - Mapped types\n */\n private findMessageTypes(): string[] {\n const messageTypes: string[] = [];\n const warnings: 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 might contain message types\n for (const typeAlias of file.getTypeAliases()) {\n const extractedTypes = this.extractMessageTypesFromType(\n typeAlias.getType(),\n typeAlias.getName(),\n file,\n warnings\n );\n messageTypes.push(...extractedTypes);\n }\n }\n\n // Log warnings about unbounded types\n if (warnings.length > 0 && process.env[\"POLLY_DEBUG\"]) {\n console.log(\"[WARN] Message type extraction warnings:\");\n for (const warning of warnings) {\n console.log(`[WARN] ${warning}`);\n }\n }\n\n return [...new Set(messageTypes)]; // Dedupe\n }\n\n /**\n * Extract message types from a TypeScript type\n * Recursively handles unions, discriminated unions, aliases, etc.\n */\n private extractMessageTypesFromType(\n type: Type,\n typeName: string,\n sourceFile: SourceFile,\n warnings: string[]\n ): string[] {\n if (type.isUnion()) {\n return this.extractFromUnionType(type, typeName, sourceFile, warnings);\n }\n\n if (type.getAliasSymbol()) {\n return this.extractFromTypeAlias(type, typeName, sourceFile, warnings);\n }\n\n if (type.isConditionalType?.()) {\n return this.extractFromConditionalType(type, warnings);\n }\n\n if (type.getText().includes(\"[K in \")) {\n return this.extractFromMappedType(type, sourceFile, warnings);\n }\n\n if (type.getText().includes(\"`\")) {\n this.warnTemplateLiteral(type, warnings);\n return [];\n }\n\n return [];\n }\n\n /**\n * Extract message types from union type\n */\n private extractFromUnionType(\n type: Type,\n typeName: string,\n sourceFile: SourceFile,\n warnings: string[]\n ): string[] {\n const messageTypes: string[] = [];\n const unionTypes = type.getUnionTypes();\n\n for (const unionType of unionTypes) {\n const extracted = this.extractFromUnionMember(unionType, typeName, sourceFile, warnings);\n messageTypes.push(...extracted);\n }\n\n return messageTypes;\n }\n\n /**\n * Extract message types from a single union member\n */\n private extractFromUnionMember(\n unionType: Type,\n typeName: string,\n sourceFile: SourceFile,\n warnings: string[]\n ): string[] {\n if (unionType.isObject()) {\n return this.extractFromDiscriminatedUnion(unionType, sourceFile, warnings);\n }\n\n if (unionType.isStringLiteral()) {\n return [unionType.getLiteralValue() as string];\n }\n\n if (unionType.getAliasSymbol()) {\n const aliasedType = unionType.getAliasSymbol()?.getDeclaredType();\n if (aliasedType) {\n return this.extractMessageTypesFromType(aliasedType, typeName, sourceFile, warnings);\n }\n }\n\n return [];\n }\n\n /**\n * Extract message types from discriminated union\n */\n private extractFromDiscriminatedUnion(\n unionType: Type,\n sourceFile: SourceFile,\n warnings: string[]\n ): string[] {\n const typeProperty = unionType.getProperty(\"type\");\n if (!typeProperty) {\n return [];\n }\n\n const typeType = typeProperty.getTypeAtLocation(sourceFile);\n\n if (typeType.isStringLiteral()) {\n return [typeType.getLiteralValue() as string];\n }\n\n if (typeType.getText().includes(\"`\")) {\n warnings.push(\n `Template literal type in discriminant: ${typeType.getText()} - may be unbounded`\n );\n }\n\n return [];\n }\n\n /**\n * Extract message types from type alias\n */\n private extractFromTypeAlias(\n type: Type,\n typeName: string,\n sourceFile: SourceFile,\n warnings: string[]\n ): string[] {\n const aliasedType = type.getAliasSymbol()?.getDeclaredType();\n if (!aliasedType || aliasedType === type) {\n return [];\n }\n\n return this.extractMessageTypesFromType(aliasedType, typeName, sourceFile, warnings);\n }\n\n /**\n * Extract message types from conditional type\n */\n private extractFromConditionalType(type: Type, warnings: string[]): string[] {\n warnings.push(`Conditional type detected: ${type.getText()} - extracting conservatively`);\n\n const messageTypes: string[] = [];\n const typeText = type.getText();\n const parts = typeText.split(\"?\");\n\n if (parts.length < 2) {\n return messageTypes;\n }\n\n const branches = parts[1].split(\":\");\n for (const branch of branches) {\n const extracted = this.extractStringLiteralFromBranch(branch);\n if (extracted) {\n messageTypes.push(extracted);\n }\n }\n\n return messageTypes;\n }\n\n /**\n * Extract string literal from conditional branch\n */\n private extractStringLiteralFromBranch(branch: string): string | null {\n const trimmed = branch.trim();\n const match = trimmed.match(/^[\"'](\\w+)[\"']$/);\n return match?.[1] ?? null;\n }\n\n /**\n * Extract message types from mapped type\n */\n private extractFromMappedType(type: Type, sourceFile: SourceFile, warnings: string[]): string[] {\n warnings.push(`Mapped type detected: ${type.getText()} - attempting to extract keys`);\n\n const match = type.getText().match(/\\[K in ([^\\]]+)\\]/);\n if (!match?.[1]) {\n return [];\n }\n\n const keyTypeName = match[1].trim();\n const keyTypeAlias = sourceFile.getTypeAlias?.(keyTypeName);\n\n if (!keyTypeAlias) {\n return [];\n }\n\n const keyType = keyTypeAlias.getType();\n return this.extractMessageTypesFromType(keyType, keyTypeName, sourceFile, warnings);\n }\n\n /**\n * Warn about template literal types\n */\n private warnTemplateLiteral(type: Type, warnings: string[]): void {\n warnings.push(\n `Template literal type: ${type.getText()} - this creates an unbounded set and cannot be fully extracted`\n );\n }\n\n /**\n * Convert ts-morph Type to our TypeInfo\n */\n private convertType(type: Type, name: string): TypeInfo {\n const nullable = type.isNullable();\n\n if (type.isBoolean() || type.isBooleanLiteral()) {\n return { name, kind: \"boolean\", nullable };\n }\n\n if (type.isUnion()) {\n return this.convertUnionType(type, name, nullable);\n }\n\n if (type.isString() || type.isStringLiteral()) {\n return { name, kind: \"string\", nullable };\n }\n\n if (type.isNumber() || type.isNumberLiteral()) {\n return { name, kind: \"number\", nullable };\n }\n\n if (type.isArray()) {\n return this.convertArrayType(type, name, nullable);\n }\n\n const collectionType = this.tryConvertCollectionType(type, name, nullable);\n if (collectionType) {\n return collectionType;\n }\n\n if (type.isObject()) {\n return this.convertObjectType(type, name, nullable);\n }\n\n if (type.isNull()) {\n return { name, kind: \"null\", nullable: true };\n }\n\n return { name, kind: \"unknown\", nullable };\n }\n\n /**\n * Convert union type to TypeInfo\n */\n private convertUnionType(type: Type, name: string, nullable: boolean): TypeInfo {\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 { name, kind: \"enum\", nullable, enumValues };\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 const firstType = nonNullTypes[0];\n if (firstType) {\n const baseType = this.convertType(firstType, name);\n return { ...baseType, nullable: true };\n }\n }\n\n // Generic union\n return {\n name,\n kind: \"union\",\n nullable,\n unionTypes: unionTypes.map((t, i) => this.convertType(t, `${name}_${i}`)),\n };\n }\n\n /**\n * Convert array type to TypeInfo\n */\n private convertArrayType(type: Type, name: string, nullable: boolean): TypeInfo {\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 /**\n * Try to convert Map or Set type to TypeInfo\n */\n private tryConvertCollectionType(type: Type, name: string, nullable: boolean): TypeInfo | null {\n const symbol = type.getSymbol();\n if (!symbol) return null;\n\n const symbolName = symbol.getName();\n\n if (symbolName === \"Map\") {\n const typeArgs = type.getTypeArguments();\n return {\n name,\n kind: \"map\",\n nullable,\n valueType: typeArgs?.[1] ? this.convertType(typeArgs[1], `${name}_value`) : undefined,\n };\n }\n\n if (symbolName === \"Set\") {\n const typeArgs = type.getTypeArguments();\n return {\n name,\n kind: \"set\",\n nullable,\n elementType: typeArgs?.[0] ? this.convertType(typeArgs[0], `${name}_element`) : undefined,\n };\n }\n\n return null;\n }\n\n /**\n * Convert object type to TypeInfo\n */\n private convertObjectType(type: Type, name: string, nullable: boolean): TypeInfo {\n const properties: Record<string, TypeInfo> = {};\n const sourceFile = this.project.getSourceFiles()[0];\n\n if (sourceFile) {\n for (const prop of type.getProperties()) {\n const propName = prop.getName();\n const propType = prop.getTypeAtLocation(sourceFile);\n properties[propName] = this.convertType(propType, propName);\n }\n }\n\n return { name, kind: \"object\", nullable, properties };\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 if (type.kind === \"boolean\") return this.analyzeBooleanField(analysis);\n if (type.kind === \"enum\") return this.analyzeEnumField(analysis, type);\n if (type.kind === \"array\") return this.analyzeArrayField(analysis);\n if (type.kind === \"number\") return this.analyzeNumberField(analysis);\n if (type.kind === \"string\") return this.analyzeStringField(analysis);\n if (type.kind === \"map\" || type.kind === \"set\") return this.analyzeMapSetField(analysis);\n\n return analysis;\n }\n\n private analyzeBooleanField(analysis: FieldAnalysis): FieldAnalysis {\n analysis.confidence = \"high\";\n analysis.evidence.push(\"Boolean type - auto-configured\");\n return analysis;\n }\n\n private analyzeEnumField(analysis: FieldAnalysis, type: TypeInfo): FieldAnalysis {\n if (type.enumValues) {\n analysis.confidence = \"high\";\n analysis.evidence.push(`Enum with ${type.enumValues.length} values`);\n if (analysis.bounds) {\n analysis.bounds.values = type.enumValues;\n }\n }\n return analysis;\n }\n\n private analyzeArrayField(analysis: FieldAnalysis): FieldAnalysis {\n analysis.confidence = \"low\";\n analysis.suggestions.push(\"Choose maxLength: 5 (fast), 10 (balanced), or 20 (thorough)\");\n if (analysis.bounds) {\n analysis.bounds.maxLength = undefined;\n }\n\n const foundBound = this.findArrayBound();\n if (foundBound && analysis.bounds) {\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 private analyzeNumberField(analysis: FieldAnalysis): FieldAnalysis {\n analysis.confidence = \"low\";\n analysis.suggestions.push(\"Provide min and max values based on your application logic\");\n if (analysis.bounds) {\n analysis.bounds.min = undefined;\n analysis.bounds.max = undefined;\n }\n\n const foundBound = this.findNumberBound();\n if (foundBound && analysis.bounds) {\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 private analyzeStringField(analysis: FieldAnalysis): FieldAnalysis {\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 if (analysis.bounds) {\n analysis.bounds.values = undefined;\n }\n return analysis;\n }\n\n private analyzeMapSetField(analysis: FieldAnalysis): FieldAnalysis {\n analysis.confidence = \"low\";\n analysis.suggestions.push(\"Provide maxSize (recommended: 3-5)\");\n if (analysis.bounds) {\n analysis.bounds.maxSize = undefined;\n }\n return analysis;\n }\n\n /**\n * Try to find array bounds by searching for length checks\n */\n private findArrayBound(): { 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(): { 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",
13
13
  "// Handler extraction from TypeScript code\n// Extracts message handlers and their state mutations\n\nimport {\n type ArrowFunction,\n type CallExpression,\n type FunctionExpression,\n type Identifier,\n type IfStatement,\n Node,\n type ObjectLiteralExpression,\n Project,\n type PropertyAccessExpression,\n type SourceFile,\n type Statement,\n type SwitchStatement,\n SyntaxKind,\n type VariableDeclaration,\n} from \"ts-morph\";\nimport type {\n ComponentRelationship,\n MessageHandler,\n StateAssignment,\n VerificationCondition,\n} from \"../types\";\nimport { RelationshipExtractor } from \"./relationships\";\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 private relationshipExtractor: RelationshipExtractor;\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n });\n this.typeGuardCache = new WeakMap();\n this.relationshipExtractor = new RelationshipExtractor();\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 const invalidMessageTypes = new Set<string>();\n\n // Find all source files\n const sourceFiles = this.project.getSourceFiles();\n this.debugLogSourceFiles(sourceFiles);\n\n for (const sourceFile of sourceFiles) {\n const fileHandlers = this.extractFromFile(sourceFile);\n handlers.push(...fileHandlers);\n this.categorizeHandlerMessageTypes(fileHandlers, messageTypes, invalidMessageTypes);\n }\n\n this.debugLogExtractionResults(handlers.length, invalidMessageTypes.size);\n\n return {\n handlers,\n messageTypes,\n };\n }\n\n private debugLogSourceFiles(sourceFiles: SourceFile[]): void {\n if (!process.env[\"POLLY_DEBUG\"]) return;\n\n console.log(`[DEBUG] Loaded ${sourceFiles.length} source files`);\n if (sourceFiles.length <= 20) {\n for (const sf of sourceFiles) {\n console.log(`[DEBUG] - ${sf.getFilePath()}`);\n }\n }\n }\n\n private categorizeHandlerMessageTypes(\n handlers: MessageHandler[],\n messageTypes: Set<string>,\n invalidMessageTypes: Set<string>\n ): void {\n for (const handler of handlers) {\n if (this.isValidTLAIdentifier(handler.messageType)) {\n messageTypes.add(handler.messageType);\n } else {\n invalidMessageTypes.add(handler.messageType);\n }\n }\n }\n\n private debugLogExtractionResults(handlerCount: number, invalidCount: number): void {\n if (!process.env[\"POLLY_DEBUG\"]) return;\n\n console.log(`[DEBUG] Total handlers extracted: ${handlerCount}`);\n if (invalidCount > 0) {\n console.log(`[DEBUG] Filtered ${invalidCount} invalid message type(s) from handlers`);\n }\n }\n\n /**\n * Check if a string is a valid TLA+ identifier\n * TLA+ identifiers must:\n * - Start with a letter (a-zA-Z)\n * - Contain only letters, digits, and underscores\n * - Not be empty\n */\n private isValidTLAIdentifier(s: string): boolean {\n if (!s || s.length === 0) {\n return false;\n }\n // TLA+ identifiers: start with letter, contain only alphanumeric + underscore\n return /^[a-zA-Z][a-zA-Z0-9_]*$/.test(s);\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 const context = this.inferContext(filePath);\n\n sourceFile.forEachDescendant((node) => {\n this.processNodeForHandlers(node, context, filePath, handlers);\n });\n\n return handlers;\n }\n\n /**\n * Process a single node to find handler patterns\n */\n private processNodeForHandlers(\n node: Node,\n context: string,\n filePath: string,\n handlers: MessageHandler[]\n ): void {\n if (Node.isCallExpression(node)) {\n this.processCallExpressionHandler(node, context, filePath, handlers);\n }\n\n if (Node.isSwitchStatement(node)) {\n const switchHandlers = this.extractSwitchCaseHandlers(node, context, filePath);\n handlers.push(...switchHandlers);\n }\n\n if (Node.isVariableDeclaration(node)) {\n const mapHandlers = this.extractHandlerMapPattern(node, context, filePath);\n handlers.push(...mapHandlers);\n }\n\n if (Node.isIfStatement(node) && !this.isElseIfStatement(node)) {\n const typeGuardHandlers = this.extractTypeGuardHandlers(node, context, filePath);\n handlers.push(...typeGuardHandlers);\n }\n }\n\n /**\n * Process call expression to find .on() or .addEventListener() handlers\n */\n private processCallExpressionHandler(\n node: CallExpression,\n context: string,\n filePath: string,\n handlers: MessageHandler[]\n ): void {\n const expression = node.getExpression();\n\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 /**\n * Check if a node is an else-if statement\n */\n private isElseIfStatement(node: Node): boolean {\n const parent = node.getParent();\n return parent !== undefined && Node.isIfStatement(parent);\n }\n\n /**\n * Extract handler details from a .on() call expression\n */\n private extractHandler(\n callExpr: CallExpression,\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 // Check for async mutations (potential race conditions)\n this.checkAsyncMutations(handlerArg, messageType);\n }\n\n const line = callExpr.getStartLineNumber();\n\n // Extract relationships from handler code\n const sourceFile = callExpr.getSourceFile();\n const handlerName = `${messageType}_handler`;\n let relationships: ComponentRelationship[] | undefined;\n\n if (Node.isArrowFunction(handlerArg) || Node.isFunctionExpression(handlerArg)) {\n const detectedRelationships = this.relationshipExtractor.extractFromHandler(\n handlerArg,\n sourceFile,\n handlerName\n );\n if (detectedRelationships.length > 0) {\n relationships = detectedRelationships;\n }\n }\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 relationships,\n };\n }\n\n /**\n * Extract state assignments from a handler function\n * Handles:\n * - Simple assignments: state.field = value\n * - Compound operators: state.count += 1\n * - Array mutations: state.items.push(item)\n * - Array indexing: state.items[0] = value\n */\n private extractAssignments(\n funcNode: ArrowFunction | FunctionExpression,\n assignments: StateAssignment[]\n ): void {\n funcNode.forEachDescendant((node: Node) => {\n if (Node.isBinaryExpression(node)) {\n this.extractBinaryExpressionAssignment(node, assignments);\n }\n\n if (Node.isCallExpression(node)) {\n this.extractArrayMutationAssignment(node, assignments);\n }\n });\n }\n\n /**\n * Extract assignments from binary expressions (=, +=, -=, etc.)\n */\n private extractBinaryExpressionAssignment(node: Node, assignments: StateAssignment[]): void {\n if (!Node.isBinaryExpression(node)) return;\n\n const operator = node.getOperatorToken().getText();\n\n if (operator === \"=\") {\n this.extractSimpleOrElementAccessAssignment(node, assignments);\n } else if ([\"+=\", \"-=\", \"*=\", \"/=\", \"%=\"].includes(operator)) {\n this.extractCompoundAssignment(node, assignments);\n }\n }\n\n /**\n * Extract simple or element access assignments (state.field = value or state.items[0] = value)\n */\n private extractSimpleOrElementAccessAssignment(node: Node, assignments: StateAssignment[]): void {\n if (!Node.isBinaryExpression(node)) return;\n\n const left = node.getLeft();\n const right = node.getRight();\n\n if (Node.isPropertyAccessExpression(left)) {\n this.extractPropertyAccessAssignment(left, right, assignments);\n } else if (Node.isElementAccessExpression(left)) {\n this.extractElementAccessAssignment(left, right, assignments);\n }\n }\n\n /**\n * Extract property access assignment (state.field = value)\n */\n private extractPropertyAccessAssignment(\n left: Node,\n right: Node,\n assignments: StateAssignment[]\n ): void {\n if (!Node.isPropertyAccessExpression(left)) return;\n\n const fieldPath = this.getPropertyPath(left);\n if (fieldPath.startsWith(\"state.\")) {\n const field = fieldPath.substring(6);\n const value = this.extractValue(right);\n if (value !== undefined) {\n assignments.push({ field, value });\n }\n }\n }\n\n /**\n * Extract element access assignment (state.items[index] = value)\n */\n private extractElementAccessAssignment(\n left: Node,\n right: Node,\n assignments: StateAssignment[]\n ): void {\n if (!Node.isElementAccessExpression(left)) return;\n\n const expr = left.getExpression();\n if (!Node.isPropertyAccessExpression(expr)) return;\n\n const fieldPath = this.getPropertyPath(expr);\n if (!fieldPath.startsWith(\"state.\")) return;\n\n const field = fieldPath.substring(6);\n const indexExpr = left.getArgumentExpression();\n const index = indexExpr ? indexExpr.getText() : \"0\";\n const value = this.extractValue(right);\n\n if (value !== undefined) {\n const tlaIndex = this.isNumericLiteral(index)\n ? (Number.parseInt(index) + 1).toString()\n : `${index} + 1`;\n assignments.push({\n field: `${field}[${tlaIndex}]`,\n value,\n });\n }\n }\n\n /**\n * Extract compound assignments (+=, -=, *=, /=, %=)\n */\n private extractCompoundAssignment(node: Node, assignments: StateAssignment[]): void {\n if (!Node.isBinaryExpression(node)) return;\n\n const operator = node.getOperatorToken().getText();\n const left = node.getLeft();\n const right = node.getRight();\n\n if (Node.isPropertyAccessExpression(left)) {\n const fieldPath = this.getPropertyPath(left);\n if (fieldPath.startsWith(\"state.\")) {\n const field = fieldPath.substring(6);\n const rightValue = right.getText();\n const tlaOp = operator.slice(0, -1); // Remove '=' suffix\n assignments.push({\n field,\n value: `@ ${tlaOp} ${rightValue}`,\n });\n }\n }\n }\n\n /**\n * Extract array mutation assignments (push, pop, shift, unshift, splice)\n */\n private extractArrayMutationAssignment(node: Node, assignments: StateAssignment[]): void {\n if (!Node.isCallExpression(node)) return;\n\n const expr = node.getExpression();\n if (!Node.isPropertyAccessExpression(expr)) return;\n\n const methodName = expr.getName();\n const object = expr.getExpression();\n\n if (Node.isPropertyAccessExpression(object)) {\n const fieldPath = this.getPropertyPath(object);\n if (fieldPath.startsWith(\"state.\")) {\n const field = fieldPath.substring(6);\n const args = node.getArguments().map((arg) => arg.getText());\n const tlaValue = this.translateArrayMethod(methodName, args, fieldPath);\n\n if (tlaValue) {\n assignments.push({ field, value: tlaValue });\n }\n }\n }\n }\n\n /**\n * Translate array mutation methods to TLA+ operators\n */\n private translateArrayMethod(\n methodName: string,\n args: string[],\n fieldPath: string\n ): string | null {\n switch (methodName) {\n case \"push\":\n return args.length === 1 ? `Append(@, ${args[0]})` : null;\n\n case \"pop\":\n return \"SubSeq(@, 1, Len(@)-1)\";\n\n case \"shift\":\n return \"Tail(@)\";\n\n case \"unshift\":\n return args.length === 1 ? `<<${args[0]}>> \\\\o @` : null;\n\n case \"splice\":\n if (process.env[\"POLLY_DEBUG\"]) {\n console.log(`[DEBUG] Warning: splice() mutation on ${fieldPath} not fully translated`);\n }\n return null;\n\n default:\n return null;\n }\n }\n\n /**\n * Check for async mutations that could cause race conditions\n * Warns when async handlers have state mutations after await expressions\n */\n private checkAsyncMutations(\n funcNode: ArrowFunction | FunctionExpression,\n messageType: string\n ): void {\n // Check if function is async\n const isAsync =\n funcNode.hasModifier?.(SyntaxKind.AsyncKeyword) ||\n funcNode.getModifiers?.()?.some((m: Node) => m.getKind() === SyntaxKind.AsyncKeyword);\n\n if (!isAsync) {\n return; // Not async, no race conditions possible\n }\n\n // Find all await expressions\n const awaitExpressions: Node[] = [];\n funcNode.forEachDescendant((node: Node) => {\n if (Node.isAwaitExpression(node)) {\n awaitExpressions.push(node);\n }\n });\n\n if (awaitExpressions.length === 0) {\n return; // No awaits, no interleaving possible\n }\n\n // Find all state mutations\n const mutations: Array<{ field: string; line: number; afterAwait: boolean }> = [];\n const body = funcNode.getBody();\n\n if (!body) {\n return;\n }\n\n // Get position of first await\n const firstAwaitPos = awaitExpressions[0].getStart();\n\n // Track mutations and whether they occur after await\n funcNode.forEachDescendant((node: Node) => {\n if (Node.isBinaryExpression(node)) {\n this.checkBinaryExpressionMutation(node, firstAwaitPos, mutations);\n }\n\n if (Node.isCallExpression(node)) {\n this.checkCallExpressionMutation(node, firstAwaitPos, mutations);\n }\n });\n\n // Filter to mutations after await\n const mutationsAfterAwait = mutations.filter((m) => m.afterAwait);\n\n if (mutationsAfterAwait.length > 0 && process.env[\"POLLY_DEBUG\"]) {\n console.log(\n `[DEBUG] Warning: Async handler for '${messageType}' has ${mutationsAfterAwait.length} state mutation(s) after await`\n );\n console.log(\n \"[DEBUG] This may cause race conditions if multiple messages are processed concurrently\"\n );\n console.log(\n `[DEBUG] Mutations: ${mutationsAfterAwait.map((m) => `${m.field} (line ${m.line})`).join(\", \")}`\n );\n }\n }\n\n /**\n * Extract verification conditions (requires/ensures) from a handler function\n */\n private extractVerificationConditions(\n funcNode: ArrowFunction | FunctionExpression,\n preconditions: VerificationCondition[],\n postconditions: VerificationCondition[]\n ): void {\n const body = funcNode.getBody();\n const statements = Node.isBlock(body) ? body.getStatements() : [body];\n\n for (const statement of statements) {\n this.processStatementForConditions(statement, preconditions, postconditions);\n }\n }\n\n /**\n * Process a statement to extract verification conditions\n */\n private processStatementForConditions(\n statement: Node | Statement,\n preconditions: VerificationCondition[],\n postconditions: VerificationCondition[]\n ): void {\n if (!Node.isExpressionStatement(statement)) return;\n\n const expr = statement.getExpression();\n if (!Node.isCallExpression(expr)) return;\n\n const callee = expr.getExpression();\n if (!Node.isIdentifier(callee)) return;\n\n const functionName = callee.getText();\n\n if (functionName === \"requires\") {\n const condition = this.extractCondition(expr);\n if (condition) {\n preconditions.push(condition);\n }\n } else if (functionName === \"ensures\") {\n const condition = this.extractCondition(expr);\n if (condition) {\n postconditions.push(condition);\n }\n }\n }\n\n /**\n * Extract condition from a requires() or ensures() call\n */\n private extractCondition(callExpr: CallExpression): 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: PropertyAccessExpression | Node): 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: Node): 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 * Check if a string represents a numeric literal\n */\n private isNumericLiteral(str: string): boolean {\n return /^\\d+$/.test(str);\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: SwitchStatement,\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: VariableDeclaration,\n context: string,\n filePath: string\n ): MessageHandler[] {\n const handlers: MessageHandler[] = [];\n\n try {\n const initializer = varDecl.getInitializer();\n if (!this.isHandlerMapInitializer(initializer, varDecl)) {\n return handlers;\n }\n\n // Extract handlers from object properties\n const properties = initializer.getProperties();\n for (const prop of properties) {\n const handler = this.extractHandlerFromProperty(prop, context, filePath);\n if (handler) {\n handlers.push(handler);\n }\n }\n } catch (_error) {\n // Skip malformed object literals\n }\n\n return handlers;\n }\n\n /**\n * Check if initializer is a valid handler map\n */\n private isHandlerMapInitializer(\n initializer: Node | undefined,\n varDecl: VariableDeclaration\n ): initializer is ObjectLiteralExpression {\n if (!initializer || !Node.isObjectLiteralExpression(initializer)) {\n return false;\n }\n\n // Check if variable name suggests it's a handler map\n const varName = varDecl.getName().toLowerCase();\n return /(handler|listener|callback|event)s?/.test(varName);\n }\n\n /**\n * Extract handler from a property assignment in a handler map\n */\n private extractHandlerFromProperty(\n prop: Node,\n context: string,\n filePath: string\n ): MessageHandler | null {\n if (!Node.isPropertyAssignment(prop)) {\n return null;\n }\n\n const nameNode = prop.getNameNode();\n const messageType = this.getMessageTypeFromPropertyName(nameNode);\n\n if (!messageType) {\n return null;\n }\n\n const line = prop.getStartLineNumber();\n return {\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n };\n }\n\n /**\n * Extract message type from property name node\n */\n private getMessageTypeFromPropertyName(nameNode: Node): string | null {\n if (Node.isStringLiteral(nameNode)) {\n return nameNode.getLiteralValue();\n }\n if (Node.isIdentifier(nameNode)) {\n return nameNode.getText();\n }\n return null;\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 const sourceFile = ifNode.getSourceFile();\n const typeGuards = this.getOrComputeTypeGuards(sourceFile);\n\n this.debugLogTypeGuards(sourceFile, typeGuards);\n this.processIfElseChain(ifNode as IfStatement, typeGuards, context, filePath, handlers);\n } catch (error) {\n this.debugLogError(error);\n }\n\n return handlers;\n }\n\n /**\n * Get cached type guards or compute if not cached\n */\n private getOrComputeTypeGuards(sourceFile: SourceFile): Map<string, string> {\n let typeGuards = this.typeGuardCache.get(sourceFile);\n if (!typeGuards) {\n typeGuards = this.findTypePredicateFunctions(sourceFile);\n this.typeGuardCache.set(sourceFile, typeGuards);\n }\n return typeGuards;\n }\n\n /**\n * Debug log type guards found in source file\n */\n private debugLogTypeGuards(sourceFile: SourceFile, typeGuards: Map<string, string>): void {\n if (!process.env[\"POLLY_DEBUG\"]) return;\n\n console.log(`[DEBUG] File: ${sourceFile.getBaseName()}`);\n console.log(`[DEBUG] Local type guards found: ${typeGuards.size}`);\n\n if (typeGuards.size > 0) {\n for (const [name, type] of typeGuards.entries()) {\n console.log(`[DEBUG] - ${name} → ${type}`);\n }\n }\n }\n\n /**\n * Process if-else-if chain to extract handlers\n */\n private processIfElseChain(\n currentIf: IfStatement,\n typeGuards: Map<string, string>,\n context: string,\n filePath: string,\n handlers: MessageHandler[]\n ): void {\n let ifStatement = currentIf;\n while (ifStatement) {\n const handler = this.extractHandlerFromIfClause(ifStatement, typeGuards, context, filePath);\n\n if (handler) {\n handlers.push(handler);\n this.debugLogFoundHandler(handler);\n }\n\n // Check for else-if\n const elseStatement = ifStatement.getElseStatement();\n if (elseStatement && Node.isIfStatement(elseStatement)) {\n ifStatement = elseStatement;\n } else {\n break;\n }\n }\n }\n\n /**\n * Debug log found handler\n */\n private debugLogFoundHandler(handler: MessageHandler): void {\n if (process.env[\"POLLY_DEBUG\"]) {\n console.log(`[DEBUG] Found handler: ${handler.messageType} at line ${handler.location.line}`);\n }\n }\n\n /**\n * Debug log error\n */\n private debugLogError(error: unknown): void {\n if (process.env[\"POLLY_DEBUG\"]) {\n console.log(`[DEBUG] Error in extractTypeGuardHandlers: ${error}`);\n }\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 const ifStmt = ifNode as IfStatement;\n const condition = ifStmt.getExpression();\n\n if (!Node.isCallExpression(condition)) {\n return null;\n }\n\n const funcExpr = condition.getExpression();\n const funcName = Node.isIdentifier(funcExpr) ? funcExpr.getText() : undefined;\n\n this.debugLogProcessingFunction(funcName);\n\n const messageType = this.resolveMessageType(funcExpr, funcName, typeGuards);\n if (!messageType) {\n this.debugLogUnresolvedMessageType(funcName);\n return null;\n }\n\n const line = ifStmt.getStartLineNumber();\n const relationships = this.extractRelationshipsFromIfBlock(ifStmt, messageType);\n\n return {\n messageType,\n node: context,\n assignments: [],\n preconditions: [],\n postconditions: [],\n location: { file: filePath, line },\n relationships,\n };\n } catch (_error) {\n return null;\n }\n }\n\n /**\n * Debug log processing function\n */\n private debugLogProcessingFunction(funcName: string | undefined): void {\n if (process.env[\"POLLY_DEBUG\"] && funcName) {\n console.log(`[DEBUG] Processing if condition with function: ${funcName}`);\n }\n }\n\n /**\n * Debug log unresolved message type\n */\n private debugLogUnresolvedMessageType(funcName: string | undefined): void {\n if (process.env[\"POLLY_DEBUG\"] && funcName) {\n console.log(`[DEBUG] Could not resolve message type for: ${funcName}`);\n }\n }\n\n /**\n * Resolve message type from function expression\n */\n private resolveMessageType(\n funcExpr: Node,\n funcName: string | undefined,\n typeGuards: Map<string, string>\n ): string | undefined {\n if (funcName && typeGuards.has(funcName)) {\n const guardType = typeGuards.get(funcName);\n if (guardType) {\n this.debugLogFoundInLocalTypeGuards(funcName, guardType);\n return guardType;\n }\n }\n\n if (Node.isIdentifier(funcExpr)) {\n this.debugLogTryingImportResolution(funcName);\n return this.resolveImportedTypeGuard(funcExpr) ?? undefined;\n }\n\n return undefined;\n }\n\n /**\n * Debug log found in local type guards\n */\n private debugLogFoundInLocalTypeGuards(funcName: string, messageType: string): void {\n if (process.env[\"POLLY_DEBUG\"]) {\n console.log(`[DEBUG] Found in local type guards: ${funcName} → ${messageType}`);\n }\n }\n\n /**\n * Debug log trying import resolution\n */\n private debugLogTryingImportResolution(funcName: string | undefined): void {\n if (process.env[\"POLLY_DEBUG\"]) {\n console.log(`[DEBUG] Not found locally, trying import resolution for: ${funcName}`);\n }\n }\n\n /**\n * Extract relationships from if block\n */\n private extractRelationshipsFromIfBlock(\n ifStmt: IfStatement,\n messageType: string\n ): ComponentRelationship[] | undefined {\n const thenStatement = ifStmt.getThenStatement();\n if (!thenStatement) {\n return undefined;\n }\n\n const sourceFile = ifStmt.getSourceFile();\n const handlerName = `${messageType}_handler`;\n const detectedRelationships = this.relationshipExtractor.extractFromHandler(\n thenStatement,\n sourceFile,\n handlerName\n );\n\n return detectedRelationships.length > 0 ? detectedRelationships : undefined;\n }\n\n /**\n * Find all type predicate functions in a source file\n * Returns a map of function name → message type\n * Uses AST-based detection for consistency with imported type guard resolution\n */\n private findTypePredicateFunctions(sourceFile: SourceFile): Map<string, string> {\n const typeGuards = new Map<string, string>();\n\n sourceFile.forEachDescendant((node) => {\n this.processTypePredicate(node, typeGuards);\n });\n\n return typeGuards;\n }\n\n /**\n * Process a node that might be a type predicate function\n */\n private processTypePredicate(node: Node, typeGuards: Map<string, string>): void {\n if (!this.isFunctionNode(node)) {\n return;\n }\n\n const returnTypeNode = node.getReturnTypeNode();\n if (!returnTypeNode || !Node.isTypePredicate(returnTypeNode)) {\n return;\n }\n\n const functionName = this.extractFunctionName(node);\n if (!functionName) {\n return;\n }\n\n const messageType = this.extractMessageTypeFromTypePredicateFunction(node, returnTypeNode);\n if (messageType) {\n typeGuards.set(functionName, messageType);\n }\n }\n\n /**\n * Extract function name from function node\n */\n private extractFunctionName(\n node: FunctionDeclaration | FunctionExpression | ArrowFunction\n ): string | undefined {\n if (Node.isFunctionDeclaration(node)) {\n return node.getName();\n }\n\n if (Node.isFunctionExpression(node) || Node.isArrowFunction(node)) {\n return this.extractFunctionNameFromVariable(node);\n }\n\n return undefined;\n }\n\n /**\n * Extract function name from variable declaration\n */\n private extractFunctionNameFromVariable(\n node: FunctionExpression | ArrowFunction\n ): string | undefined {\n const parent = node.getParent();\n if (Node.isVariableDeclaration(parent)) {\n return parent.getName();\n }\n return undefined;\n }\n\n /**\n * Extract message type from type predicate function\n */\n private extractMessageTypeFromTypePredicateFunction(\n node: FunctionDeclaration | FunctionExpression | ArrowFunction,\n returnTypeNode: Node\n ): string | null {\n const typeNode = returnTypeNode.getTypeNode();\n\n if (typeNode) {\n const typeName = typeNode.getText();\n const messageType = this.extractMessageTypeFromTypeName(typeName);\n if (messageType) {\n return messageType;\n }\n }\n\n return this.extractMessageTypeFromFunctionBodyText(node);\n }\n\n /**\n * Extract message type from function body text\n */\n private extractMessageTypeFromFunctionBodyText(\n node: FunctionDeclaration | FunctionExpression | ArrowFunction\n ): string | null {\n const body = node.getBody();\n if (!body) {\n return null;\n }\n\n const bodyText = body.getText();\n const typeValueMatch = bodyText.match(/\\.type\\s*===?\\s*['\"](\\w+)['\"]/);\n\n if (typeValueMatch) {\n return typeValueMatch[1] ?? null;\n }\n\n return null;\n }\n\n /**\n * Resolve type guard from imported function\n * Uses ts-morph symbol resolution to find definition across files\n * Checks AST structure, not resolved types (which can lose type predicate info)\n */\n private resolveImportedTypeGuard(identifier: Identifier): string | null {\n try {\n const funcName = identifier.getText();\n const definitions = identifier.getDefinitionNodes();\n\n if (definitions.length === 0) {\n this.debugLogNoDefinitions(funcName);\n return null;\n }\n\n for (const def of definitions) {\n const messageType = this.tryExtractTypeGuardFromDefinition(def, funcName);\n if (messageType) {\n return messageType;\n }\n }\n } catch (error) {\n this.debugLogResolutionError(error);\n }\n\n return null;\n }\n\n /**\n * Try to extract type guard from a single function definition\n */\n private tryExtractTypeGuardFromDefinition(def: Node, funcName: string): string | null {\n if (!this.isFunctionNode(def)) {\n return null;\n }\n\n const returnTypeNode = def.getReturnTypeNode();\n this.debugLogReturnTypeInfo(funcName, def, returnTypeNode);\n\n const typePredicateResult = this.extractFromTypePredicate(returnTypeNode, funcName);\n if (typePredicateResult) {\n return typePredicateResult;\n }\n\n return this.extractFromFunctionBody(def, funcName);\n }\n\n /**\n * Check if node is a function type\n */\n private isFunctionNode(\n node: Node\n ): node is FunctionDeclaration | FunctionExpression | ArrowFunction {\n return (\n Node.isFunctionDeclaration(node) ||\n Node.isFunctionExpression(node) ||\n Node.isArrowFunction(node)\n );\n }\n\n /**\n * Extract message type from type predicate node\n */\n private extractFromTypePredicate(\n returnTypeNode: Node | undefined,\n funcName: string\n ): string | null {\n if (!returnTypeNode || !Node.isTypePredicate(returnTypeNode)) {\n return null;\n }\n\n const typeNode = returnTypeNode.getTypeNode();\n if (!typeNode) {\n return null;\n }\n\n const typeName = typeNode.getText();\n const messageType = this.extractMessageTypeFromTypeName(typeName);\n\n if (messageType) {\n this.debugLogTypePredicateResolution(funcName, messageType);\n return messageType;\n }\n\n return null;\n }\n\n /**\n * Extract message type from function body\n */\n private extractFromFunctionBody(\n def: FunctionDeclaration | FunctionExpression | ArrowFunction,\n funcName: string\n ): string | null {\n const body = def.getBody();\n if (!body) {\n return null;\n }\n\n const bodyText = body.getText();\n const typeValueMatch = bodyText.match(/\\.type\\s*===?\\s*['\"](\\w+)['\"]/);\n\n if (typeValueMatch) {\n const messageType = typeValueMatch[1] ?? null;\n this.debugLogBodyResolution(funcName, messageType);\n return messageType;\n }\n\n return null;\n }\n\n /**\n * Debug: Log no definitions found\n */\n private debugLogNoDefinitions(funcName: string): void {\n if (process.env[\"POLLY_DEBUG\"]) {\n console.log(`[DEBUG] No definitions found for imported function: ${funcName}`);\n }\n }\n\n /**\n * Debug: Log return type info\n */\n private debugLogReturnTypeInfo(\n funcName: string,\n def: FunctionDeclaration | FunctionExpression | ArrowFunction,\n returnTypeNode: Node | undefined\n ): void {\n if (process.env[\"POLLY_DEBUG\"]) {\n const returnType = def.getReturnType().getText();\n console.log(`[DEBUG] Function ${funcName} return type (resolved): ${returnType}`);\n console.log(`[DEBUG] Has return type node: ${!!returnTypeNode}`);\n console.log(\n `[DEBUG] Is type predicate node: ${returnTypeNode && Node.isTypePredicate(returnTypeNode)}`\n );\n }\n }\n\n /**\n * Debug: Log type predicate resolution\n */\n private debugLogTypePredicateResolution(funcName: string, messageType: string): void {\n if (process.env[\"POLLY_DEBUG\"]) {\n console.log(`[DEBUG] Resolved ${funcName} → ${messageType} (from AST type predicate)`);\n }\n }\n\n /**\n * Debug: Log body resolution\n */\n private debugLogBodyResolution(funcName: string, messageType: string | null): void {\n if (process.env[\"POLLY_DEBUG\"]) {\n console.log(`[DEBUG] Resolved ${funcName} → ${messageType} (from body)`);\n }\n }\n\n /**\n * Debug: Log resolution error\n */\n private debugLogResolutionError(error: unknown): void {\n if (process.env[\"POLLY_DEBUG\"]) {\n console.log(`[DEBUG] Error resolving imported type guard: ${error}`);\n }\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 // Check contexts in priority order\n return (\n this.inferElectronContext(path) ||\n this.inferWorkerContext(path) ||\n this.inferServerAppContext(path) ||\n this.inferChromeExtensionContext(path) ||\n \"unknown\"\n );\n }\n\n /**\n * Infer Electron context (main, renderer, preload)\n */\n private inferElectronContext(path: string): string | null {\n if (\n path.includes(\"main.ts\") ||\n path.includes(\"main.js\") ||\n path.includes(\"/main/\") ||\n path.includes(\"\\\\main\\\\\")\n ) {\n return \"main\";\n }\n\n if (\n path.includes(\"/renderer/\") ||\n path.includes(\"\\\\renderer\\\\\") ||\n path.includes(\"renderer.ts\") ||\n path.includes(\"renderer.js\")\n ) {\n return \"renderer\";\n }\n\n if (path.includes(\"preload.ts\") || path.includes(\"preload.js\")) {\n return \"preload\";\n }\n\n return null;\n }\n\n /**\n * Infer Worker/PWA context\n */\n private inferWorkerContext(path: string): string | null {\n if (path.includes(\"service-worker\") || path.includes(\"sw.ts\") || path.includes(\"sw.js\")) {\n return \"worker\";\n }\n\n if (path.includes(\"/worker/\") || path.includes(\"\\\\worker\\\\\")) {\n return \"worker\";\n }\n\n return null;\n }\n\n /**\n * Infer WebSocket/server app context\n */\n private inferServerAppContext(path: string): string | null {\n if (\n path.includes(\"/server/\") ||\n path.includes(\"\\\\server\\\\\") ||\n path.includes(\"/server.\") ||\n path.includes(\"server.ts\") ||\n path.includes(\"server.js\")\n ) {\n return \"server\";\n }\n\n if (path.includes(\"/client/\") || path.includes(\"\\\\client\\\\\") || path.includes(\"/client.\")) {\n return \"client\";\n }\n\n return null;\n }\n\n /**\n * Infer Chrome extension context\n */\n private inferChromeExtensionContext(path: string): string | null {\n if (path.includes(\"/background/\") || path.includes(\"\\\\background\\\\\")) {\n return \"background\";\n }\n\n if (path.includes(\"/content/\") || path.includes(\"\\\\content\\\\\")) {\n return \"content\";\n }\n\n if (path.includes(\"/popup/\") || path.includes(\"\\\\popup\\\\\")) {\n return \"popup\";\n }\n\n if (path.includes(\"/devtools/\") || path.includes(\"\\\\devtools\\\\\")) {\n return \"devtools\";\n }\n\n if (path.includes(\"/options/\") || path.includes(\"\\\\options\\\\\")) {\n return \"options\";\n }\n\n if (path.includes(\"/offscreen/\") || path.includes(\"\\\\offscreen\\\\\")) {\n return \"offscreen\";\n }\n\n return null;\n }\n\n /**\n * Check binary expression for state mutations\n */\n private checkBinaryExpressionMutation(\n node: Node,\n firstAwaitPos: number,\n mutations: Array<{ field: string; line: number; afterAwait: boolean }>\n ): void {\n if (!Node.isBinaryExpression(node)) return;\n\n const operator = node.getOperatorToken().getText();\n if (operator !== \"=\" && ![\"+=\", \"-=\", \"*=\", \"/=\", \"%=\"].includes(operator)) return;\n\n const left = node.getLeft();\n if (!Node.isPropertyAccessExpression(left) && !Node.isElementAccessExpression(left)) return;\n\n const fieldPath = Node.isPropertyAccessExpression(left)\n ? this.getPropertyPath(left)\n : this.getPropertyPath(left.getExpression());\n\n if (fieldPath.startsWith(\"state.\")) {\n const field = fieldPath.substring(6);\n const line = node.getStartLineNumber();\n const afterAwait = node.getStart() > firstAwaitPos;\n mutations.push({ field, line, afterAwait });\n }\n }\n\n /**\n * Check call expression for array mutation methods\n */\n private checkCallExpressionMutation(\n node: Node,\n firstAwaitPos: number,\n mutations: Array<{ field: string; line: number; afterAwait: boolean }>\n ): void {\n if (!Node.isCallExpression(node)) return;\n\n const expr = node.getExpression();\n if (!Node.isPropertyAccessExpression(expr)) return;\n\n const methodName = expr.getName();\n const object = expr.getExpression();\n\n if (!Node.isPropertyAccessExpression(object)) return;\n\n const fieldPath = this.getPropertyPath(object);\n if (!fieldPath.startsWith(\"state.\")) return;\n\n if ([\"push\", \"pop\", \"shift\", \"unshift\", \"splice\"].includes(methodName)) {\n const field = fieldPath.substring(6);\n const line = node.getStartLineNumber();\n const afterAwait = node.getStart() > firstAwaitPos;\n mutations.push({ field, line, afterAwait });\n }\n }\n}\n\nexport function extractHandlers(tsConfigPath: string): HandlerAnalysis {\n const extractor = new HandlerExtractor(tsConfigPath);\n return extractor.extractHandlers();\n}\n",
14
14
  "// Component relationship extraction from TypeScript code\n// Detects function calls, imports, and dependencies between components\n\nimport {\n type ArrowFunction,\n type CallExpression,\n type FunctionDeclaration,\n type FunctionExpression,\n Node,\n type SourceFile,\n} from \"ts-morph\";\n\n/**\n * Represents a relationship between components detected from code analysis\n */\nexport interface DetectedRelationship {\n /** Source component (handler, service, etc.) */\n from: string;\n /** Target component being called/used */\n to: string;\n /** Description of the relationship */\n description: string;\n /** Technology/method used (e.g., \"Function Call\", \"Import\", \"SQL\", \"HTTP\") */\n technology?: string;\n /** Confidence level of this detection */\n confidence: \"high\" | \"medium\" | \"low\";\n /** Evidence supporting this detection */\n evidence: string[];\n}\n\n/**\n * Extracts component relationships from handler code\n */\nexport class RelationshipExtractor {\n /**\n * Extract relationships from a function/handler body\n */\n extractFromHandler(\n handlerNode: Node,\n sourceFile: SourceFile,\n handlerName: string\n ): DetectedRelationship[] {\n const relationships: DetectedRelationship[] = [];\n const visited = new Set<string>(); // Prevent infinite recursion\n\n this.extractFromNode(handlerNode, sourceFile, handlerName, relationships, visited);\n\n return this.deduplicateRelationships(relationships);\n }\n\n /**\n * Recursively extract relationships from a node and follow function calls\n */\n private extractFromNode(\n node: Node,\n sourceFile: SourceFile,\n handlerName: string,\n relationships: DetectedRelationship[],\n visited: Set<string>\n ): void {\n node.forEachDescendant((descendant) => {\n this.processDescendantNode(descendant, sourceFile, handlerName, relationships, visited);\n });\n }\n\n /**\n * Process a single descendant node for relationship extraction\n */\n private processDescendantNode(\n descendant: Node,\n sourceFile: SourceFile,\n handlerName: string,\n relationships: DetectedRelationship[],\n visited: Set<string>\n ): void {\n if (Node.isCallExpression(descendant)) {\n this.processCallExpression(descendant, sourceFile, handlerName, relationships, visited);\n }\n\n if (Node.isAwaitExpression(descendant)) {\n const rel = this.extractFromDatabaseCall(descendant, handlerName);\n if (rel) {\n relationships.push(rel);\n }\n }\n\n if (Node.isCallExpression(descendant) && descendant.getExpression().getText() === \"fetch\") {\n const rel = this.extractFromFetchCall(descendant, handlerName);\n if (rel) {\n relationships.push(rel);\n }\n }\n }\n\n /**\n * Process a call expression for relationship extraction\n */\n private processCallExpression(\n callExpr: CallExpression,\n sourceFile: SourceFile,\n handlerName: string,\n relationships: DetectedRelationship[],\n visited: Set<string>\n ): void {\n const expr = callExpr.getExpression();\n\n if (Node.isIdentifier(expr)) {\n this.processIdentifierCall(expr, sourceFile, handlerName, relationships, visited);\n return;\n }\n\n if (Node.isPropertyAccessExpression(expr)) {\n const rel = this.extractFromPropertyAccess(expr, handlerName);\n if (rel) {\n relationships.push(rel);\n return;\n }\n }\n\n const rel = this.extractFromFunctionCall(callExpr, handlerName, sourceFile);\n if (rel) {\n relationships.push(rel);\n }\n }\n\n /**\n * Process an identifier call (local or imported function)\n */\n private processIdentifierCall(\n identifier: Identifier,\n sourceFile: SourceFile,\n handlerName: string,\n relationships: DetectedRelationship[],\n visited: Set<string>\n ): void {\n const functionName = identifier.getText();\n const resolved = this.resolveFunctionDeclaration(functionName, sourceFile);\n\n if (resolved && !visited.has(functionName)) {\n this.followFunctionCall(\n functionName,\n resolved.functionDecl,\n resolved.sourceFile,\n handlerName,\n relationships,\n visited\n );\n return;\n }\n\n if (!resolved) {\n this.tryAddServiceCallRelationship(functionName, handlerName, relationships);\n }\n }\n\n /**\n * Resolve function declaration from name\n */\n private resolveFunctionDeclaration(\n functionName: string,\n sourceFile: SourceFile\n ): { functionDecl: FunctionDeclaration; sourceFile: SourceFile } | null {\n let functionDecl = sourceFile.getFunction(functionName);\n let targetSourceFile = sourceFile;\n\n if (!functionDecl) {\n const resolved = this.resolveImportedFunction(functionName, sourceFile);\n if (resolved) {\n functionDecl = resolved.functionDecl;\n targetSourceFile = resolved.sourceFile;\n }\n }\n\n if (!functionDecl) {\n return null;\n }\n\n return { functionDecl, sourceFile: targetSourceFile };\n }\n\n /**\n * Follow a function call recursively\n */\n private followFunctionCall(\n functionName: string,\n functionDecl: FunctionDeclaration,\n targetSourceFile: SourceFile,\n handlerName: string,\n relationships: DetectedRelationship[],\n visited: Set<string>\n ): void {\n visited.add(functionName);\n\n const body = functionDecl.getBody();\n if (body) {\n this.extractFromNode(body, targetSourceFile, handlerName, relationships, visited);\n }\n }\n\n /**\n * Try to add a service call relationship based on function name\n */\n private tryAddServiceCallRelationship(\n functionName: string,\n handlerName: string,\n relationships: DetectedRelationship[]\n ): void {\n const componentFromName = this.inferComponentFromFunctionName(functionName);\n if (componentFromName) {\n relationships.push({\n from: this.toComponentId(handlerName),\n to: componentFromName,\n description: `Calls ${functionName}()`,\n technology: \"Function Call\",\n confidence: \"medium\",\n evidence: [`Function call: ${functionName}`],\n });\n }\n }\n\n /**\n * Extract relationship from a function call\n */\n private extractFromFunctionCall(\n callExpr: CallExpression,\n handlerName: string,\n sourceFile: SourceFile\n ): DetectedRelationship | null {\n const expr = callExpr.getExpression();\n const exprText = expr.getText();\n\n // Skip common utility functions and built-ins\n const skipList = [\n \"console.\",\n \"JSON.\",\n \"Math.\",\n \"Object.\",\n \"Array.\",\n \"String.\",\n \"Number.\",\n \"Date.\",\n \"Promise.\",\n \"setTimeout\",\n \"setInterval\",\n \"clearTimeout\",\n \"clearInterval\",\n ];\n\n if (skipList.some((skip) => exprText.startsWith(skip))) {\n return null;\n }\n\n // Extract function name\n let functionName = exprText;\n let targetComponent: string | null = null;\n\n // Handle property access (e.g., db.getConnection() -> db_client)\n if (Node.isPropertyAccessExpression(expr)) {\n const objectExpr = expr.getExpression();\n const objectName = objectExpr.getText();\n const methodName = expr.getName();\n\n // Map common patterns to component names\n targetComponent = this.inferComponentFromCall(objectName);\n\n if (!targetComponent) {\n return null;\n }\n\n functionName = methodName;\n } else {\n // Direct function call - try to resolve from imports\n targetComponent = this.resolveComponentFromImport(exprText, sourceFile);\n\n if (!targetComponent) {\n return null;\n }\n }\n\n return {\n from: this.toComponentId(handlerName),\n to: targetComponent,\n description: `Calls ${functionName}()`,\n technology: \"Function Call\",\n confidence: \"high\",\n evidence: [`Function call: ${exprText}`],\n };\n }\n\n /**\n * Extract relationship from property access chain\n * Handles both simple (obj.method) and nested (obj.prop.method) patterns\n */\n private extractFromPropertyAccess(\n propAccess: Node,\n handlerName: string\n ): DetectedRelationship | null {\n if (!Node.isPropertyAccessExpression(propAccess)) {\n return null;\n }\n\n const fullChain = propAccess.getText();\n const methodName = propAccess.getName();\n\n // Extract the root object from potentially nested property access\n // e.g., repositories.users.create -> repositories\n let rootObject = propAccess.getExpression();\n while (Node.isPropertyAccessExpression(rootObject)) {\n rootObject = rootObject.getExpression();\n }\n\n const objectName = rootObject.getText();\n\n // Map object name to component name\n const targetComponent = this.inferComponentFromCall(objectName);\n\n if (!targetComponent) {\n return null;\n }\n\n return {\n from: this.toComponentId(handlerName),\n to: targetComponent,\n description: `Calls ${methodName}()`,\n technology: \"Function Call\",\n confidence: \"high\",\n evidence: [`Property access: ${fullChain}`],\n };\n }\n\n /**\n * Extract relationship from database call\n */\n private extractFromDatabaseCall(\n awaitExpr: Node,\n handlerName: string\n ): DetectedRelationship | null {\n if (!Node.isAwaitExpression(awaitExpr)) {\n return null;\n }\n\n const innerExpr = awaitExpr.getExpression();\n if (!Node.isCallExpression(innerExpr)) {\n return null;\n }\n\n const callExpr = innerExpr.getExpression().getText();\n\n // Detect database patterns\n if (\n callExpr.includes(\"db.query\") ||\n callExpr.includes(\"db.execute\") ||\n callExpr.includes(\"db.select\") ||\n callExpr.includes(\"db.insert\") ||\n callExpr.includes(\"db.update\") ||\n callExpr.includes(\"db.delete\")\n ) {\n const operation = this.inferDatabaseOperation(callExpr);\n\n return {\n from: this.toComponentId(handlerName),\n to: \"database\",\n description: operation,\n technology: \"SQL\",\n confidence: \"high\",\n evidence: [`Database call: ${callExpr}`],\n };\n }\n\n return null;\n }\n\n /**\n * Extract relationship from fetch/HTTP call\n */\n private extractFromFetchCall(\n callExpr: CallExpression,\n handlerName: string\n ): DetectedRelationship | null {\n const args = callExpr.getArguments();\n if (args.length === 0 || !args[0]) {\n return null;\n }\n\n const urlArg = args[0].getText();\n\n // Try to extract API name from URL\n let apiName = \"external_api\";\n if (urlArg.includes(\"openai\")) {\n apiName = \"openai_api\";\n } else if (urlArg.includes(\"anthropic\")) {\n apiName = \"anthropic_api\";\n }\n\n return {\n from: this.toComponentId(handlerName),\n to: apiName,\n description: \"Calls external API\",\n technology: \"HTTP/REST\",\n confidence: \"high\",\n evidence: [`fetch() call to: ${urlArg}`],\n };\n }\n\n /**\n * Infer component name from object.method pattern\n */\n private inferComponentFromCall(objectName: string): string | null {\n const mappings: Record<string, string> = {\n db: \"db_client\",\n database: \"database\",\n repos: \"repositories\",\n repository: \"repositories\",\n repositories: \"repositories\",\n cache: \"cache\",\n storage: \"storage\",\n ai: \"ai_service\",\n auth: \"auth_service\",\n authservice: \"auth_service\",\n user: \"user_service\",\n userservice: \"user_service\",\n logger: \"logger\",\n queue: \"queue_service\",\n };\n\n const normalized = objectName.toLowerCase();\n return mappings[normalized] || null;\n }\n\n /**\n * Infer component name from function name patterns\n * Detects patterns like getDatabase(), createRepositories(), etc.\n */\n private inferComponentFromFunctionName(functionName: string): string | null {\n const normalized = functionName.toLowerCase();\n\n // Pattern 1: getXxx() or createXxx()\n if (normalized.startsWith(\"get\") || normalized.startsWith(\"create\")) {\n const prefixLength = normalized.startsWith(\"get\") ? 3 : 6;\n const suffix = functionName.substring(prefixLength);\n return this.matchComponentPattern(suffix);\n }\n\n // Pattern 2: initXxx() or setupXxx()\n if (normalized.startsWith(\"init\") || normalized.startsWith(\"setup\")) {\n const prefixLength = normalized.startsWith(\"init\") ? 4 : 5;\n const suffix = functionName.substring(prefixLength);\n return this.matchInitPattern(suffix);\n }\n\n return null;\n }\n\n /**\n * Match component patterns for get/create functions\n */\n private matchComponentPattern(suffix: string): string | null {\n const suffixLower = suffix.toLowerCase();\n\n const componentPatterns = [\n {\n patterns: [\"database\", \"db\", \"dbconnection\", \"connection\"],\n component: \"db_client\",\n },\n {\n patterns: [\"repositories\", \"repos\", \"repository\"],\n component: \"repositories\",\n },\n {\n patterns: [\"cache\"],\n component: \"cache\",\n },\n {\n patterns: [\"storage\"],\n component: \"storage\",\n },\n {\n patterns: [\"ai\", \"llm\"],\n component: \"ai_service\",\n },\n {\n patterns: [\"logger\"],\n component: \"logger\",\n },\n ];\n\n for (const { patterns, component } of componentPatterns) {\n if (patterns.some((pattern) => suffixLower.includes(pattern) || suffixLower === pattern)) {\n return component;\n }\n }\n\n // Service patterns (special case with extraction)\n if (suffixLower.includes(\"service\")) {\n const serviceMatch = suffix.match(/^(.+?)Service/i);\n if (serviceMatch) {\n return this.toComponentId(`${serviceMatch[1]}_service`);\n }\n return \"service\";\n }\n\n return null;\n }\n\n /**\n * Match patterns for init/setup functions\n */\n private matchInitPattern(suffix: string): string | null {\n const suffixLower = suffix.toLowerCase();\n\n if (suffixLower.includes(\"database\") || suffixLower === \"db\") {\n return \"db_client\";\n }\n if (suffixLower.includes(\"cache\")) {\n return \"cache\";\n }\n\n return null;\n }\n\n /**\n * Resolve component from import statement\n */\n private resolveComponentFromImport(functionName: string, sourceFile: SourceFile): string | null {\n for (const importDecl of sourceFile.getImportDeclarations()) {\n const namedImports = importDecl.getNamedImports();\n\n for (const namedImport of namedImports) {\n if (namedImport.getName() === functionName) {\n const modulePath = importDecl.getModuleSpecifierValue();\n const component = this.inferComponentFromModulePath(modulePath);\n if (component) return component;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Infer component from module path\n */\n private inferComponentFromModulePath(modulePath: string): string | null {\n if (modulePath.includes(\"/db/\") || modulePath.includes(\"/database/\")) {\n return \"db_client\";\n }\n if (modulePath.includes(\"/repos\") || modulePath.includes(\"/repositories\")) {\n return \"repositories\";\n }\n if (modulePath.includes(\"/service\") || modulePath.includes(\"/services\")) {\n const match = modulePath.match(/\\/([^/]+)\\.ts$/);\n if (match?.[1]) {\n return this.toComponentId(match[1]);\n }\n }\n return null;\n }\n\n /**\n * Resolve imported function to its declaration in another file\n * This enables cross-file relationship detection for architectures where\n * handlers are separated from routing logic\n */\n private resolveImportedFunction(\n functionName: string,\n sourceFile: SourceFile\n ): {\n functionDecl: FunctionDeclaration | ArrowFunction | FunctionExpression;\n sourceFile: SourceFile;\n } | null {\n try {\n for (const importDecl of sourceFile.getImportDeclarations()) {\n const namedImports = importDecl.getNamedImports();\n\n for (const namedImport of namedImports) {\n if (namedImport.getName() === functionName) {\n const moduleSpecifier = importDecl.getModuleSpecifierSourceFile();\n if (!moduleSpecifier) continue;\n\n const result = this.findFunctionInModule(functionName, moduleSpecifier);\n if (result) return result;\n }\n }\n }\n } catch (_error) {\n // Silently fail on resolution errors (e.g., missing files, parse errors)\n // This ensures the extractor is resilient to incomplete projects\n return null;\n }\n\n return null;\n }\n\n /**\n * Find function declaration or arrow function in a module\n */\n private findFunctionInModule(\n functionName: string,\n moduleSpecifier: SourceFile\n ): {\n functionDecl: FunctionDeclaration | ArrowFunction | FunctionExpression;\n sourceFile: SourceFile;\n } | null {\n // Find the function in the imported file\n const functionDecl = moduleSpecifier.getFunction(functionName);\n if (functionDecl) {\n return {\n functionDecl,\n sourceFile: moduleSpecifier,\n };\n }\n\n // Also check for exported arrow functions or const declarations\n const variableDecl = moduleSpecifier.getVariableDeclaration(functionName);\n if (variableDecl) {\n const initializer = variableDecl.getInitializer();\n if (\n initializer &&\n (Node.isArrowFunction(initializer) || Node.isFunctionExpression(initializer))\n ) {\n return {\n functionDecl: initializer,\n sourceFile: moduleSpecifier,\n };\n }\n }\n\n return null;\n }\n\n /**\n * Infer database operation type\n */\n private inferDatabaseOperation(callExpr: string): string {\n if (callExpr.includes(\"query\") || callExpr.includes(\"select\")) {\n return \"Reads from database\";\n }\n if (\n callExpr.includes(\"execute\") ||\n callExpr.includes(\"insert\") ||\n callExpr.includes(\"update\") ||\n callExpr.includes(\"delete\")\n ) {\n return \"Writes to database\";\n }\n return \"Accesses database\";\n }\n\n /**\n * Convert name to component ID format\n */\n private toComponentId(name: string): string {\n return name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_|_$/g, \"\");\n }\n\n /**\n * Remove duplicate relationships\n */\n private deduplicateRelationships(relationships: DetectedRelationship[]): DetectedRelationship[] {\n const seen = new Set<string>();\n const unique: DetectedRelationship[] = [];\n\n for (const rel of relationships) {\n const key = `${rel.from}->${rel.to}`;\n if (!seen.has(key)) {\n seen.add(key);\n unique.push(rel);\n }\n }\n\n return unique;\n }\n}\n"
15
15
  ],
16
- "mappings": "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",
17
- "debugId": "0953A65126AAFD2664756E2164756E21",
16
+ "mappings": "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",
17
+ "debugId": "3B4BC06E615961E764756E2164756E21",
18
18
  "names": []
19
19
  }