@fairfox/polly 0.2.0 ā 0.2.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.
- package/dist/vendor/verify/specs/Dockerfile +13 -0
- package/dist/vendor/verify/specs/README.md +37 -0
- package/dist/vendor/verify/specs/docker-compose.yml +9 -0
- package/dist/vendor/verify/specs/tla/MessageRouter.cfg +24 -0
- package/dist/vendor/verify/specs/tla/MessageRouter.tla +221 -0
- package/dist/vendor/verify/specs/tla/README.md +179 -0
- package/dist/vendor/verify/specs/verification.config.ts +61 -0
- package/dist/vendor/verify/src/cli.js +22 -4
- package/dist/vendor/verify/src/cli.js.map +5 -5
- package/dist/vendor/visualize/src/cli.js +379 -46
- package/dist/vendor/visualize/src/cli.js.map +11 -10
- package/package.json +1 -1
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"// TLA+ specification generator\n\nimport type { VerificationConfig, CodebaseAnalysis } from \"../types\";\nimport type { MessageHandler } from \"../core/model\";\n\nexport class TLAGenerator {\n private lines: string[] = [];\n private indent = 0;\n\n generate(\n config: VerificationConfig,\n analysis: CodebaseAnalysis\n ): {\n spec: string;\n cfg: string;\n } {\n this.lines = [];\n this.indent = 0;\n\n const spec = this.generateSpec(config, analysis);\n const cfg = this.generateConfig(config, analysis);\n\n return { spec, cfg };\n }\n\n private generateSpec(config: VerificationConfig, analysis: CodebaseAnalysis): string {\n this.lines = [];\n this.indent = 0;\n\n this.addHeader();\n this.addExtends();\n this.addConstants(config, analysis);\n this.addMessageTypes(config, analysis);\n this.addStateType(config, analysis);\n this.addVariables();\n this.addInit(config, analysis);\n this.addActions(config, analysis);\n this.addRouteWithHandlers(config, analysis);\n this.addNext(config, analysis);\n this.addSpec();\n this.addInvariants(config, analysis);\n\n return this.lines.join(\"\\n\");\n }\n\n private generateConfig(config: VerificationConfig, analysis: CodebaseAnalysis): string {\n const lines: string[] = [];\n\n lines.push(\"SPECIFICATION UserSpec\");\n lines.push(\"\");\n lines.push(\"\\\\* Constants\");\n lines.push(\"CONSTANTS\");\n\n // Generate context set (reduced for faster verification)\n lines.push(\" Contexts = {background, content, popup}\");\n\n // Message bounds (defaults chosen for reasonable verification time)\n lines.push(` MaxMessages = ${config.messages.maxInFlight || 3}`);\n lines.push(` MaxTabId = ${config.messages.maxTabs || 1}`);\n lines.push(\" TimeoutLimit = 3\");\n\n // State bounds from config\n for (const [field, fieldConfig] of Object.entries(config.state)) {\n if (typeof fieldConfig === \"object\" && fieldConfig !== null) {\n if (\"maxLength\" in fieldConfig && fieldConfig.maxLength !== null) {\n const constName = this.fieldToConstName(field);\n lines.push(` ${constName}_MaxLength = ${fieldConfig.maxLength}`);\n }\n if (\"max\" in fieldConfig && fieldConfig.max !== null) {\n const constName = this.fieldToConstName(field);\n lines.push(` ${constName}_Max = ${fieldConfig.max}`);\n }\n if (\"maxSize\" in fieldConfig && fieldConfig.maxSize !== null) {\n const constName = this.fieldToConstName(field);\n lines.push(` ${constName}_MaxSize = ${fieldConfig.maxSize}`);\n }\n }\n }\n\n lines.push(\"\");\n lines.push(\"\\\\* Invariants to check\");\n lines.push(\"INVARIANTS\");\n lines.push(\" TypeOK\");\n lines.push(\" NoRoutingLoops\");\n lines.push(\" UserStateTypeInvariant\");\n lines.push(\"\");\n lines.push(\"\\\\* State constraint\");\n lines.push(\"CONSTRAINT\");\n lines.push(\" StateConstraint\");\n\n return lines.join(\"\\n\");\n }\n\n private addHeader(): void {\n this.line(\"------------------------- MODULE UserApp -------------------------\");\n this.line(\"(*\");\n this.line(\" Auto-generated TLA+ specification for web extension\");\n this.line(\" \");\n this.line(\" Generated from:\");\n this.line(\" - TypeScript type definitions\");\n this.line(\" - Verification configuration\");\n this.line(\" \");\n this.line(\" This spec extends MessageRouter with:\");\n this.line(\" - Application-specific state types\");\n this.line(\" - Message type definitions\");\n this.line(\" - State transition actions\");\n this.line(\"*)\");\n this.line(\"\");\n }\n\n private addExtends(): void {\n this.line(\"EXTENDS MessageRouter\");\n this.line(\"\");\n }\n\n private addConstants(config: VerificationConfig, analysis: CodebaseAnalysis): void {\n // MessageRouter already defines: Contexts, MaxMessages, MaxTabId, TimeoutLimit\n // We only add application-specific constants\n\n const hasCustomConstants = Object.entries(config.state).some(([field, fieldConfig]) => {\n if (typeof fieldConfig !== \"object\" || fieldConfig === null) return false;\n return (\n (\"maxLength\" in fieldConfig && fieldConfig.maxLength !== null) ||\n (\"max\" in fieldConfig && fieldConfig.max !== null) ||\n (\"maxSize\" in fieldConfig && fieldConfig.maxSize !== null)\n );\n });\n\n if (!hasCustomConstants) {\n // No custom constants needed\n return;\n }\n\n this.line(\"\\\\* Application-specific constants\");\n this.line(\"CONSTANTS\");\n this.indent++;\n\n let first = true;\n for (const [field, fieldConfig] of Object.entries(config.state)) {\n if (typeof fieldConfig === \"object\" && fieldConfig !== null) {\n const constName = this.fieldToConstName(field);\n\n if (\"maxLength\" in fieldConfig && fieldConfig.maxLength !== null) {\n this.line(`${first ? \"\" : \",\"}${constName}_MaxLength \\\\* Max length for ${field}`);\n first = false;\n }\n if (\"max\" in fieldConfig && fieldConfig.max !== null) {\n this.line(`${first ? \"\" : \",\"}${constName}_Max \\\\* Max value for ${field}`);\n first = false;\n }\n if (\"maxSize\" in fieldConfig && fieldConfig.maxSize !== null) {\n this.line(`${first ? \"\" : \",\"}${constName}_MaxSize \\\\* Max size for ${field}`);\n first = false;\n }\n }\n }\n\n this.indent--;\n this.line(\"\");\n }\n\n private addStateType(config: VerificationConfig, analysis: CodebaseAnalysis): void {\n // Define Value type for generic sequences and maps\n // Use a finite set for model checking\n this.line(\"\\\\* Generic value type for sequences and maps\");\n this.line(\"\\\\* Bounded to allow model checking\");\n this.line('Value == {\"v1\", \"v2\", \"v3\"}');\n this.line(\"\");\n\n // Define Keys type for map domains\n this.line(\"\\\\* Generic key type for maps\");\n this.line(\"\\\\* Bounded to allow model checking\");\n this.line('Keys == {\"k1\", \"k2\", \"k3\"}');\n this.line(\"\");\n\n this.line(\"\\\\* Application state type definition\");\n this.line(\"State == [\");\n this.indent++;\n\n const stateFields: string[] = [];\n\n for (const [fieldPath, fieldConfig] of Object.entries(config.state)) {\n if (typeof fieldConfig !== \"object\" || fieldConfig === null) continue;\n\n const fieldName = this.sanitizeFieldName(fieldPath);\n const tlaType = this.fieldConfigToTLAType(fieldPath, fieldConfig, config);\n\n stateFields.push(`${fieldName}: ${tlaType}`);\n }\n\n for (let i = 0; i < stateFields.length; i++) {\n const field = stateFields[i];\n const suffix = i < stateFields.length - 1 ? \",\" : \"\";\n this.line(`${field}${suffix}`);\n }\n\n this.indent--;\n this.line(\"]\");\n this.line(\"\");\n }\n\n private addMessageTypes(config: VerificationConfig, analysis: CodebaseAnalysis): void {\n if (analysis.messageTypes.length === 0) {\n // No message types found, skip\n return;\n }\n\n this.line(\"\\\\* Message types from application\");\n const messageTypeSet = analysis.messageTypes.map((t) => `\"${t}\"`).join(\", \");\n this.line(`UserMessageTypes == {${messageTypeSet}}`);\n this.line(\"\");\n }\n\n private addVariables(): void {\n // MessageRouter already defines: ports, messages, pendingRequests, delivered, routingDepth, time\n // We add: contextStates for application state\n\n this.line(\"\\\\* Application state per context\");\n this.line(\"VARIABLE contextStates\");\n this.line(\"\");\n this.line(\"\\\\* All variables (extending MessageRouter vars)\");\n this.line(\n \"allVars == <<ports, messages, pendingRequests, delivered, routingDepth, time, contextStates>>\"\n );\n this.line(\"\");\n }\n\n private addInit(config: VerificationConfig, analysis: CodebaseAnalysis): void {\n // Generate InitialState first\n this.line(\"\\\\* Initial application state\");\n this.line(\"InitialState == [\");\n this.indent++;\n\n const fields: string[] = [];\n for (const [fieldPath, fieldConfig] of Object.entries(config.state)) {\n if (typeof fieldConfig !== \"object\" || fieldConfig === null) continue;\n\n const fieldName = this.sanitizeFieldName(fieldPath);\n const initialValue = this.getInitialValue(fieldConfig);\n fields.push(`${fieldName} |-> ${initialValue}`);\n }\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n const suffix = i < fields.length - 1 ? \",\" : \"\";\n this.line(`${field}${suffix}`);\n }\n\n this.indent--;\n this.line(\"]\");\n this.line(\"\");\n\n // Init extends MessageRouter's Init\n this.line(\"\\\\* Initial state (extends MessageRouter)\");\n this.line(\"UserInit ==\");\n this.indent++;\n this.line(\"/\\\\ Init \\\\* MessageRouter's init\");\n this.line(\"/\\\\ contextStates = [c \\\\in Contexts |-> InitialState]\");\n this.indent--;\n this.line(\"\");\n }\n\n private addActions(config: VerificationConfig, analysis: CodebaseAnalysis): void {\n this.line(\"\\\\* =============================================================================\");\n this.line(\"\\\\* Application-specific actions\");\n this.line(\"\\\\* =============================================================================\");\n this.line(\"\");\n\n if (analysis.handlers.length === 0) {\n // No handlers found, keep the stub\n this.line(\"\\\\* No message handlers found in codebase\");\n this.line(\"\\\\* State remains unchanged for all messages\");\n this.line(\"StateTransition(ctx, msgType) ==\");\n this.indent++;\n this.line(\"UNCHANGED contextStates\");\n this.indent--;\n this.line(\"\");\n return;\n }\n\n // Generate state transition actions for each handler\n this.line(\"\\\\* State transitions extracted from message handlers\");\n this.line(\"\");\n\n // Group handlers by message type\n const handlersByType = new Map<string, typeof analysis.handlers>();\n for (const handler of analysis.handlers) {\n if (!handlersByType.has(handler.messageType)) {\n handlersByType.set(handler.messageType, []);\n }\n handlersByType.get(handler.messageType)!.push(handler);\n }\n\n // Generate an action for each message type\n for (const [messageType, handlers] of handlersByType.entries()) {\n this.generateHandlerAction(messageType, handlers, config);\n }\n\n // Generate the main StateTransition action that dispatches to specific handlers\n this.line(\"\\\\* Main state transition action\");\n this.line(\"StateTransition(ctx, msgType) ==\");\n this.indent++;\n\n const messageTypes = Array.from(handlersByType.keys());\n for (let i = 0; i < messageTypes.length; i++) {\n const msgType = messageTypes[i];\n const actionName = this.messageTypeToActionName(msgType);\n\n if (i === 0) {\n this.line(`IF msgType = \"${msgType}\" THEN ${actionName}(ctx)`);\n } else if (i === messageTypes.length - 1) {\n this.line(`ELSE IF msgType = \"${msgType}\" THEN ${actionName}(ctx)`);\n this.line(\"ELSE UNCHANGED contextStates \\\\* Unknown message type\");\n } else {\n this.line(`ELSE IF msgType = \"${msgType}\" THEN ${actionName}(ctx)`);\n }\n }\n\n this.indent--;\n this.line(\"\");\n }\n\n private generateHandlerAction(\n messageType: string,\n handlers: MessageHandler[],\n config: VerificationConfig\n ): void {\n const actionName = this.messageTypeToActionName(messageType);\n\n this.line(`\\\\* Handler for ${messageType}`);\n this.line(`${actionName}(ctx) ==`);\n this.indent++;\n\n // Collect all preconditions from all handlers\n const allPreconditions = handlers.flatMap((h) => h.preconditions);\n\n // Collect all assignments from all handlers for this message type\n const allAssignments = handlers.flatMap((h) => h.assignments);\n\n // Collect all postconditions from all handlers\n const allPostconditions = handlers.flatMap((h) => h.postconditions);\n\n // Emit preconditions first\n if (allPreconditions.length > 0) {\n for (const precondition of allPreconditions) {\n const tlaExpr = this.tsExpressionToTLA(precondition.expression);\n const comment = precondition.message ? ` \\\\* ${precondition.message}` : \"\";\n this.line(`/\\\\ ${tlaExpr}${comment}`);\n }\n }\n\n // Filter out null assignments and map them to valid values\n const validAssignments = allAssignments\n .filter((a) => {\n if (a.value === null) {\n // For null values, check if we can map to a valid value based on field config\n const fieldConfig = config.state[a.field];\n if (\n fieldConfig &&\n typeof fieldConfig === \"object\" &&\n \"values\" in fieldConfig &&\n fieldConfig.values\n ) {\n // Use the last value as the \"null\" value (often \"guest\", \"none\", etc.)\n return true;\n }\n // Skip null assignments if we can't map them\n return false;\n }\n return true;\n })\n .map((a) => {\n if (a.value === null) {\n const fieldConfig = config.state[a.field];\n if (\n fieldConfig &&\n typeof fieldConfig === \"object\" &&\n \"values\" in fieldConfig &&\n fieldConfig.values\n ) {\n // Use the last value as the \"null\" value\n const nullValue = fieldConfig.values[fieldConfig.values.length - 1];\n return { ...a, value: nullValue };\n }\n }\n return a;\n });\n\n if (validAssignments.length === 0) {\n // Handler exists but makes no state changes\n if (allPreconditions.length === 0) {\n this.line(\"\\\\* No state changes in handler\");\n }\n this.line(\"/\\\\ UNCHANGED contextStates\");\n } else {\n // Generate state updates\n this.line(\"/\\\\ contextStates' = [contextStates EXCEPT\");\n this.indent++;\n\n for (let i = 0; i < validAssignments.length; i++) {\n const assignment = validAssignments[i];\n const fieldName = this.sanitizeFieldName(assignment.field);\n const value = this.assignmentValueToTLA(assignment.value);\n const suffix = i < validAssignments.length - 1 ? \",\" : \"\";\n\n this.line(`![ctx].${fieldName} = ${value}${suffix}`);\n }\n\n this.indent--;\n this.line(\"]\");\n }\n\n // Emit postconditions last\n if (allPostconditions.length > 0) {\n for (const postcondition of allPostconditions) {\n const tlaExpr = this.tsExpressionToTLA(postcondition.expression, true);\n const comment = postcondition.message ? ` \\\\* ${postcondition.message}` : \"\";\n this.line(`/\\\\ ${tlaExpr}${comment}`);\n }\n }\n\n this.indent--;\n this.line(\"\");\n }\n\n /**\n * Translate TypeScript expression to TLA+ syntax\n * @param expr - TypeScript expression from requires() or ensures()\n * @param isPrimed - If true, use contextStates' (for postconditions)\n */\n private tsExpressionToTLA(expr: string, isPrimed: boolean = false): string {\n let tla = expr;\n\n // Replace state references with contextStates[ctx] or contextStates'[ctx]\n const statePrefix = isPrimed ? \"contextStates'[ctx]\" : \"contextStates[ctx]\";\n\n // Replace state.field.subfield with contextStates[ctx].field_subfield\n tla = tla.replace(/state\\.([a-zA-Z_][a-zA-Z0-9_.]*)/g, (match, path) => {\n return `${statePrefix}.${this.sanitizeFieldName(path)}`;\n });\n\n // Replace payload.field with payload.field (no change needed, but sanitize)\n tla = tla.replace(/payload\\.([a-zA-Z_][a-zA-Z0-9_.]*)/g, (match, path) => {\n return `payload.${this.sanitizeFieldName(path)}`;\n });\n\n // Replace comparison operators\n tla = tla.replace(/===/g, \"=\");\n tla = tla.replace(/!==/g, \"#\");\n tla = tla.replace(/!=/g, \"#\");\n tla = tla.replace(/==/g, \"=\");\n\n // Replace logical operators\n tla = tla.replace(/&&/g, \"/\\\\\");\n tla = tla.replace(/\\|\\|/g, \"\\\\/\");\n\n // Replace negation operator (careful with !== already handled)\n // Match ! that's not part of !== or !=\n tla = tla.replace(/!([^=])/g, \"~$1\");\n tla = tla.replace(/!$/g, \"~\"); // Handle ! at end of string\n\n // Replace boolean literals\n tla = tla.replace(/\\btrue\\b/g, \"TRUE\");\n tla = tla.replace(/\\bfalse\\b/g, \"FALSE\");\n\n // Replace null\n tla = tla.replace(/\\bnull\\b/g, \"NULL\");\n\n // Replace less than / greater than comparisons\n tla = tla.replace(/</g, \"<\");\n tla = tla.replace(/>/g, \">\");\n tla = tla.replace(/<=/g, \"<=\");\n tla = tla.replace(/>=/g, \">=\");\n\n return tla;\n }\n\n private messageTypeToActionName(messageType: string): string {\n // Convert USER_LOGIN -> HandleUserLogin\n return (\n \"Handle\" +\n messageType\n .split(\"_\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())\n .join(\"\")\n );\n }\n\n private assignmentValueToTLA(value: string | boolean | number | null): string {\n if (typeof value === \"boolean\") {\n return value ? \"TRUE\" : \"FALSE\";\n }\n if (typeof value === \"number\") {\n return String(value);\n }\n if (value === null) {\n return \"NULL\"; // Will need to handle this based on type\n }\n if (typeof value === \"string\") {\n return `\"${value}\"`;\n }\n return \"NULL\";\n }\n\n private addRouteWithHandlers(config: VerificationConfig, analysis: CodebaseAnalysis): void {\n this.line(\"\\\\* =============================================================================\");\n this.line(\"\\\\* Message Routing with State Transitions\");\n this.line(\"\\\\* =============================================================================\");\n this.line(\"\");\n\n if (analysis.handlers.length === 0) {\n // No handlers, just use base routing\n return;\n }\n\n this.line(\"\\\\* Route a message and invoke its handler\");\n this.line(\"UserRouteMessage(msgIndex) ==\");\n this.indent++;\n this.line(\"/\\\\ msgIndex \\\\in 1..Len(messages)\");\n this.line(\"/\\\\ LET msg == messages[msgIndex]\");\n this.line(' IN /\\\\ msg.status = \"pending\"');\n this.line(\" /\\\\ routingDepth' = routingDepth + 1\");\n this.line(\" /\\\\ routingDepth < 5\");\n this.line(\" /\\\\ \\\\E target \\\\in msg.targets :\");\n this.line(' /\\\\ IF target \\\\in Contexts /\\\\ ports[target] = \"connected\"');\n this.line(\" THEN \\\\* Successful delivery - route AND invoke handler\");\n this.line(\n ' /\\\\ messages\\' = [messages EXCEPT ![msgIndex].status = \"delivered\"]'\n );\n this.line(\" /\\\\ delivered' = delivered \\\\union {msg.id}\");\n this.line(\n \" /\\\\ pendingRequests' = [id \\\\in DOMAIN pendingRequests \\\\ {msg.id} |->\"\n );\n this.line(\" pendingRequests[id]]\");\n this.line(\" /\\\\ time' = time + 1\");\n this.line(\" /\\\\ StateTransition(target, msg.msgType)\");\n this.line(\" ELSE \\\\* Port not connected - message fails\");\n this.line(\n ' /\\\\ messages\\' = [messages EXCEPT ![msgIndex].status = \"failed\"]'\n );\n this.line(\n \" /\\\\ pendingRequests' = [id \\\\in DOMAIN pendingRequests \\\\ {msg.id} |->\"\n );\n this.line(\" pendingRequests[id]]\");\n this.line(\" /\\\\ time' = time + 1\");\n this.line(\" /\\\\ UNCHANGED <<delivered, contextStates>>\");\n this.line(\" /\\\\ UNCHANGED ports\");\n this.indent--;\n this.line(\"\");\n }\n\n private addNext(config: VerificationConfig, analysis: CodebaseAnalysis): void {\n this.line(\"\\\\* Next state relation (extends MessageRouter)\");\n this.line(\"UserNext ==\");\n this.indent++;\n\n if (analysis.handlers.length > 0) {\n // Use integrated routing + handlers\n this.line(\"\\\\/ \\\\E c \\\\in Contexts : ConnectPort(c) /\\\\ UNCHANGED contextStates\");\n this.line(\"\\\\/ \\\\E c \\\\in Contexts : DisconnectPort(c) /\\\\ UNCHANGED contextStates\");\n this.line(\n \"\\\\/ \\\\E src \\\\in Contexts : \\\\E targetSet \\\\in (SUBSET Contexts \\\\ {{}}) : \\\\E tab \\\\in 0..MaxTabId : \\\\E msgType \\\\in UserMessageTypes :\"\n );\n this.indent++;\n this.line(\"SendMessage(src, targetSet, tab, msgType) /\\\\ UNCHANGED contextStates\");\n this.indent--;\n this.line(\"\\\\/ \\\\E i \\\\in 1..Len(messages) : UserRouteMessage(i)\");\n this.line(\"\\\\/ CompleteRouting /\\\\ UNCHANGED contextStates\");\n this.line(\"\\\\/ \\\\E i \\\\in 1..Len(messages) : TimeoutMessage(i) /\\\\ UNCHANGED contextStates\");\n } else {\n // No handlers, all actions preserve contextStates\n this.line(\"\\\\/ Next /\\\\ UNCHANGED contextStates\");\n }\n\n this.indent--;\n this.line(\"\");\n }\n\n private addSpec(): void {\n this.line(\"\\\\* Specification\");\n this.line(\"UserSpec == UserInit /\\\\ [][UserNext]_allVars /\\\\ WF_allVars(UserNext)\");\n this.line(\"\");\n }\n\n private addInvariants(config: VerificationConfig, analysis: CodebaseAnalysis): void {\n this.line(\"\\\\* =============================================================================\");\n this.line(\"\\\\* Application Invariants\");\n this.line(\"\\\\* =============================================================================\");\n this.line(\"\");\n\n this.line(\"\\\\* TypeOK and NoRoutingLoops are inherited from MessageRouter\");\n this.line(\"\");\n\n this.line(\"\\\\* Application state type invariant\");\n this.line(\"UserStateTypeInvariant ==\");\n this.indent++;\n this.line(\"\\\\A ctx \\\\in Contexts :\");\n this.indent++;\n this.line(\"contextStates[ctx] \\\\in State\");\n this.indent--;\n this.indent--;\n this.line(\"\");\n\n this.line(\"\\\\* State constraint to bound state space\");\n this.line(\"StateConstraint ==\");\n this.indent++;\n this.line(\"Len(messages) <= MaxMessages\");\n this.indent--;\n this.line(\"\");\n\n this.line(\"=============================================================================\");\n }\n\n private fieldConfigToTLAType(\n fieldPath: string,\n fieldConfig: any,\n config: VerificationConfig\n ): string {\n if (\"type\" in fieldConfig) {\n if (fieldConfig.type === \"boolean\") {\n return \"BOOLEAN\";\n }\n if (fieldConfig.type === \"enum\" && fieldConfig.values) {\n const values = fieldConfig.values.map((v: string) => `\"${v}\"`).join(\", \");\n return `{${values}}`;\n }\n }\n\n if (\"maxLength\" in fieldConfig) {\n // Array type - represented as sequence with bounded length\n const constName = this.fieldToConstName(fieldPath);\n return `Seq(Value)`; // Simplified - would need element type\n }\n\n if (\"min\" in fieldConfig && \"max\" in fieldConfig) {\n // Number type\n const constName = this.fieldToConstName(fieldPath);\n const min = fieldConfig.min || 0;\n const max = fieldConfig.max || 100;\n return `${min}..${max}`;\n }\n\n if (\"values\" in fieldConfig) {\n if (fieldConfig.values && Array.isArray(fieldConfig.values)) {\n // String with concrete values\n const values = fieldConfig.values.map((v: string) => `\"${v}\"`).join(\", \");\n return `{${values}}`;\n }\n if (fieldConfig.abstract) {\n // Abstract string\n return \"STRING\";\n }\n // Needs configuration\n return \"STRING\";\n }\n\n if (\"maxSize\" in fieldConfig) {\n // Map with bounded key set\n return \"[Keys -> Value]\";\n }\n\n return \"Value\"; // Generic fallback\n }\n\n private getInitialValue(fieldConfig: any): string {\n if (\"type\" in fieldConfig) {\n if (fieldConfig.type === \"boolean\") {\n return \"FALSE\";\n }\n if (fieldConfig.type === \"enum\" && fieldConfig.values && fieldConfig.values.length > 0) {\n return `\"${fieldConfig.values[0]}\"`;\n }\n }\n\n if (\"maxLength\" in fieldConfig) {\n return \"<<>>\"; // Empty sequence\n }\n\n if (\"min\" in fieldConfig) {\n return String(fieldConfig.min || 0);\n }\n\n if (\"values\" in fieldConfig && fieldConfig.values && fieldConfig.values.length > 0) {\n return `\"${fieldConfig.values[0]}\"`;\n }\n\n if (\"maxSize\" in fieldConfig) {\n // Map with all keys mapped to default value\n return '[k \\\\in Keys |-> \"v1\"]';\n }\n\n return \"0\"; // Default fallback\n }\n\n private fieldToConstName(fieldPath: string): string {\n return fieldPath.replace(/\\./g, \"_\").toUpperCase();\n }\n\n private sanitizeFieldName(fieldPath: string): string {\n return fieldPath.replace(/\\./g, \"_\");\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 generateTLA(\n config: VerificationConfig,\n analysis: CodebaseAnalysis\n): { spec: string; cfg: string } {\n const generator = new TLAGenerator();\n return generator.generate(config, analysis);\n}\n",
|
|
6
6
|
"// Docker container management for TLA+ verification\n\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as os from \"node:os\";\n\nexport type DockerRunResult = {\n exitCode: number;\n stdout: string;\n stderr: string;\n};\n\nexport class DockerRunner {\n private containerName = \"web-ext-tla-verify\";\n\n /**\n * Check if Docker is available\n */\n async isDockerAvailable(): Promise<boolean> {\n try {\n const result = await this.runCommand(\"docker\", [\"--version\"]);\n return result.exitCode === 0;\n } catch {\n return false;\n }\n }\n\n /**\n * Check if TLA+ image exists\n */\n async hasImage(): Promise<boolean> {\n try {\n const result = await this.runCommand(\"docker\", [\"images\", \"-q\", \"talex5/tla\"]);\n return result.stdout.trim().length > 0;\n } catch {\n return false;\n }\n }\n\n /**\n * Pull TLA+ image\n */\n async pullImage(onProgress?: (line: string) => void): Promise<void> {\n await this.runCommandStreaming(\"docker\", [\"pull\", \"talex5/tla:latest\"], onProgress);\n }\n\n /**\n * Run TLC model checker on a spec\n */\n async runTLC(\n specPath: string,\n options?: {\n workers?: number;\n timeout?: number;\n }\n ): Promise<TLCResult> {\n // Ensure spec file exists\n if (!fs.existsSync(specPath)) {\n throw new Error(`Spec file not found: ${specPath}`);\n }\n\n const specDir = path.dirname(specPath);\n const specName = path.basename(specPath, \".tla\");\n const cfgPath = path.join(specDir, `${specName}.cfg`);\n\n // Ensure cfg file exists\n if (!fs.existsSync(cfgPath)) {\n throw new Error(`Config file not found: ${cfgPath}`);\n }\n\n // Run TLC in Docker\n // Use sh -c to cd into /specs directory so TLC can find imported modules\n const args = [\n \"run\",\n \"--rm\",\n \"-v\",\n `${specDir}:/specs`,\n \"talex5/tla\",\n \"sh\",\n \"-c\",\n `cd /specs && tlc -workers ${options?.workers || 1} ${specName}.tla`,\n ];\n\n const result = await this.runCommand(\"docker\", args, {\n timeout: options?.timeout || 60000,\n });\n\n return this.parseTLCOutput(result);\n }\n\n /**\n * Parse TLC output\n */\n private parseTLCOutput(result: DockerRunResult): TLCResult {\n const output = result.stdout + result.stderr;\n\n // Check for violations\n const violationMatch = output.match(/Error: Invariant (.*?) is violated/);\n if (violationMatch) {\n return {\n success: false,\n violation: {\n type: \"invariant\",\n name: violationMatch[1],\n trace: this.extractTrace(output),\n },\n output,\n };\n }\n\n // Check for errors\n if (result.exitCode !== 0 || output.includes(\"Error:\")) {\n return {\n success: false,\n error: this.extractError(output),\n output,\n };\n }\n\n // Success\n const statesMatch = output.match(/(\\d+) states generated/);\n const distinctMatch = output.match(/(\\d+) distinct states/);\n\n return {\n success: true,\n stats: {\n statesGenerated: statesMatch ? Number.parseInt(statesMatch[1]) : 0,\n distinctStates: distinctMatch ? Number.parseInt(distinctMatch[1]) : 0,\n },\n output,\n };\n }\n\n /**\n * Extract error trace from TLC output\n */\n private extractTrace(output: string): string[] {\n const lines = output.split(\"\\n\");\n const trace: string[] = [];\n let inTrace = false;\n\n for (const line of lines) {\n if (line.includes(\"State \") && line.includes(\":\")) {\n inTrace = true;\n trace.push(line);\n } else if (inTrace) {\n if (line.trim() === \"\" || line.startsWith(\"Error:\")) {\n break;\n }\n trace.push(line);\n }\n }\n\n return trace;\n }\n\n /**\n * Extract error message from TLC output\n */\n private extractError(output: string): string {\n const errorMatch = output.match(/Error: (.*?)(?:\\n|$)/);\n if (errorMatch) {\n return errorMatch[1];\n }\n\n // Look for common error patterns\n if (output.includes(\"Parse Error\")) {\n return \"TLA+ syntax error in specification\";\n }\n if (output.includes(\"Semantic Error\")) {\n return \"Semantic error in specification\";\n }\n\n return \"Unknown error occurred during model checking\";\n }\n\n /**\n * Run a command and return output\n */\n private runCommand(\n command: string,\n args: string[],\n options?: { timeout?: number }\n ): Promise<DockerRunResult> {\n return new Promise((resolve, reject) => {\n const proc = spawn(command, args);\n\n let stdout = \"\";\n let stderr = \"\";\n\n proc.stdout.on(\"data\", (data) => {\n stdout += data.toString();\n });\n\n proc.stderr.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n const timeout = options?.timeout\n ? setTimeout(() => {\n proc.kill();\n reject(new Error(`Command timed out after ${options.timeout}ms`));\n }, options.timeout)\n : null;\n\n proc.on(\"close\", (exitCode) => {\n if (timeout) clearTimeout(timeout);\n\n resolve({\n exitCode: exitCode || 0,\n stdout,\n stderr,\n });\n });\n\n proc.on(\"error\", (error) => {\n if (timeout) clearTimeout(timeout);\n reject(error);\n });\n });\n }\n\n /**\n * Run a command with streaming output\n */\n private runCommandStreaming(\n command: string,\n args: string[],\n onOutput?: (line: string) => void\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n const proc = spawn(command, args);\n\n proc.stdout.on(\"data\", (data) => {\n if (onOutput) {\n const lines = data.toString().split(\"\\n\");\n for (const line of lines) {\n if (line.trim()) {\n onOutput(line.trim());\n }\n }\n }\n });\n\n proc.stderr.on(\"data\", (data) => {\n if (onOutput) {\n const lines = data.toString().split(\"\\n\");\n for (const line of lines) {\n if (line.trim()) {\n onOutput(line.trim());\n }\n }\n }\n });\n\n proc.on(\"close\", (exitCode) => {\n if (exitCode === 0) {\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${exitCode}`));\n }\n });\n\n proc.on(\"error\", reject);\n });\n }\n}\n\nexport type TLCResult = {\n success: boolean;\n violation?: {\n type: \"invariant\" | \"property\" | \"deadlock\";\n name?: string;\n trace: string[];\n };\n error?: string;\n stats?: {\n statesGenerated: number;\n distinctStates: number;\n };\n output: string;\n};\n",
|
|
7
|
-
"#!/usr/bin/env bun\n// CLI for verification system\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { analyzeCodebase } from \"../../analysis/src/extract/types\";\nimport { generateConfig } from \"./codegen/config\";\nimport { validateConfig } from \"./config/parser\";\n\nconst COLORS = {\n reset: \"\\x1b[0m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n gray: \"\\x1b[90m\",\n};\n\nfunction color(text: string, colorCode: string): string {\n return `${colorCode}${text}${COLORS.reset}`;\n}\n\nasync function main() {\n const args = process.argv.slice(2);\n const command = args[0];\n\n switch (command) {\n case \"--setup\":\n case \"setup\":\n await setupCommand();\n break;\n\n case \"--validate\":\n case \"validate\":\n await validateCommand();\n break;\n\n case \"--help\":\n case \"help\":\n showHelp();\n break;\n\n default:\n await verifyCommand();\n }\n}\n\nasync function setupCommand() {\n console.log(color(\"\\nš Analyzing codebase...\\n\", COLORS.blue));\n\n try {\n // Find tsconfig\n const tsConfigPath = findTsConfig();\n if (!tsConfigPath) {\n console.error(color(\"ā Could not find tsconfig.json\", COLORS.red));\n console.error(\" Run this command from your project root\");\n process.exit(1);\n }\n\n console.log(color(` Using: ${tsConfigPath}`, COLORS.gray));\n\n // Analyze codebase\n const analysis = await analyzeCodebase({\n tsConfigPath,\n stateFilePath: findStateFile(),\n });\n\n if (!analysis.stateType) {\n console.log(color(\"\\nā ļø Could not find state type definition\", COLORS.yellow));\n console.log(\" Expected to find a type named 'AppState' or 'State'\");\n console.log(\" in a file matching **/state*.ts\");\n console.log();\n console.log(\" You can still generate a config template:\");\n console.log(\" It will be empty and you'll need to fill it in manually.\");\n console.log();\n } else {\n console.log(\n color(`ā Found state type with ${analysis.fields.length} field(s)`, COLORS.green)\n );\n }\n\n console.log(color(`ā Found ${analysis.messageTypes.length} message type(s)`, COLORS.green));\n\n // Show analysis summary\n if (analysis.fields.length > 0) {\n console.log(color(\"\\nš Configuration Summary:\\n\", COLORS.blue));\n\n const table = [\n [\"Field\", \"Type\", \"Status\"],\n [\"ā\".repeat(30), \"ā\".repeat(20), \"ā\".repeat(20)],\n ];\n\n for (const field of analysis.fields) {\n const status =\n field.confidence === \"high\"\n ? color(\"ā Auto-configured\", COLORS.green)\n : field.confidence === \"medium\"\n ? color(\"ā Review needed\", COLORS.yellow)\n : color(\"ā Manual config\", COLORS.red);\n\n table.push([field.path, field.type.kind, status]);\n }\n\n for (const row of table) {\n console.log(` ${row[0].padEnd(32)} ${row[1].padEnd(22)} ${row[2]}`);\n }\n }\n\n // Generate config\n const configContent = generateConfig(analysis);\n const configPath = path.join(process.cwd(), \"specs\", \"verification.config.ts\");\n\n // Ensure directory exists\n const configDir = path.dirname(configPath);\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true });\n }\n\n // Write config\n fs.writeFileSync(configPath, configContent, \"utf-8\");\n\n console.log(color(\"\\nā
Configuration generated!\\n\", COLORS.green));\n console.log(` File: ${color(configPath, COLORS.blue)}`);\n console.log();\n console.log(color(\"š Next steps:\", COLORS.blue));\n console.log();\n console.log(\" 1. Review the generated configuration file\");\n console.log(\" 2. Fill in values marked with /* CONFIGURE */\");\n console.log(\" 3. Run 'bun verify' to check your configuration\");\n console.log();\n console.log(color(\"š” Tip:\", COLORS.gray));\n console.log(color(\" Look for comments explaining what each field needs.\", COLORS.gray));\n console.log();\n } catch (error) {\n console.error(color(\"\\nā Setup failed:\", COLORS.red));\n console.error(` ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n}\n\nasync function validateCommand() {\n const configPath = path.join(process.cwd(), \"specs\", \"verification.config.ts\");\n\n console.log(color(\"\\nš Validating configuration...\\n\", COLORS.blue));\n\n const result = validateConfig(configPath);\n\n if (result.valid) {\n console.log(color(\"ā
Configuration is complete and valid!\\n\", COLORS.green));\n console.log(\" You can now run 'bun verify' to start verification.\");\n console.log();\n return;\n }\n\n // Show errors\n const errors = result.issues.filter((i) => i.severity === \"error\");\n const warnings = result.issues.filter((i) => i.severity === \"warning\");\n\n if (errors.length > 0) {\n console.log(color(`ā Found ${errors.length} error(s):\\n`, COLORS.red));\n\n for (const error of errors) {\n console.log(color(` ⢠${error.message}`, COLORS.red));\n if (error.field) {\n console.log(color(` Field: ${error.field}`, COLORS.gray));\n }\n if (error.location) {\n console.log(color(` Location: line ${error.location.line}`, COLORS.gray));\n }\n console.log(color(` ā ${error.suggestion}`, COLORS.yellow));\n console.log();\n }\n }\n\n if (warnings.length > 0) {\n console.log(color(`ā ļø Found ${warnings.length} warning(s):\\n`, COLORS.yellow));\n\n for (const warning of warnings) {\n console.log(color(` ⢠${warning.message}`, COLORS.yellow));\n if (warning.field) {\n console.log(color(` Field: ${warning.field}`, COLORS.gray));\n }\n console.log(color(` ā ${warning.suggestion}`, COLORS.gray));\n console.log();\n }\n }\n\n console.log(color(\"Configuration incomplete. Please fix the errors above.\\n\", COLORS.red));\n process.exit(1);\n}\n\nasync function verifyCommand() {\n const configPath = path.join(process.cwd(), \"specs\", \"verification.config.ts\");\n\n console.log(color(\"\\nš Running verification...\\n\", COLORS.blue));\n\n // First validate config\n const validation = validateConfig(configPath);\n\n if (!validation.valid) {\n const errors = validation.issues.filter((i) => i.severity === \"error\");\n console.log(color(`ā Configuration incomplete (${errors.length} error(s))\\n`, COLORS.red));\n\n for (const error of errors.slice(0, 3)) {\n console.log(color(` ⢠${error.message}`, COLORS.red));\n if (error.field) {\n console.log(color(` Field: ${error.field}`, COLORS.gray));\n }\n console.log();\n }\n\n if (errors.length > 3) {\n console.log(color(` ... and ${errors.length - 3} more error(s)`, COLORS.gray));\n console.log();\n }\n\n console.log(\" Run 'bun verify --validate' to see all issues\");\n console.log(\" Run 'bun verify --setup' to regenerate configuration\");\n console.log();\n process.exit(1);\n }\n\n console.log(color(\"ā Configuration valid\", COLORS.green));\n console.log();\n\n // Run full verification\n try {\n await runFullVerification(configPath);\n } catch (error) {\n console.error(color(\"\\nā Verification failed:\", COLORS.red));\n console.error(` ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n }\n}\n\nasync function runFullVerification(configPath: string) {\n const { generateTLA } = await import(\"./codegen/tla\");\n const { DockerRunner } = await import(\"./runner/docker\");\n\n // Load config\n delete require.cache[require.resolve(path.resolve(configPath))];\n const configModule = require(path.resolve(configPath));\n const config = configModule.default || configModule;\n\n // Analyze codebase\n console.log(color(\"š Analyzing codebase...\", COLORS.blue));\n const tsConfigPath = findTsConfig();\n if (!tsConfigPath) {\n throw new Error(\"Could not find tsconfig.json\");\n }\n\n const analysis = await analyzeCodebase({\n tsConfigPath,\n stateFilePath: findStateFile(),\n });\n\n console.log(color(\"ā Analysis complete\", COLORS.green));\n console.log();\n\n // Generate TLA+ specs\n console.log(color(\"š Generating TLA+ specification...\", COLORS.blue));\n const { spec, cfg } = generateTLA(config, analysis);\n\n // Write specs to temp directory\n const specDir = path.join(process.cwd(), \"specs\", \"tla\", \"generated\");\n if (!fs.existsSync(specDir)) {\n fs.mkdirSync(specDir, { recursive: true });\n }\n\n const specPath = path.join(specDir, \"UserApp.tla\");\n const cfgPath = path.join(specDir, \"UserApp.cfg\");\n\n fs.writeFileSync(specPath, spec);\n fs.writeFileSync(cfgPath, cfg);\n\n // Copy base MessageRouter spec to generated directory so TLC can find it\n const baseSpecPath = path.join(process.cwd(), \"specs\", \"tla\", \"MessageRouter.tla\");\n if (fs.existsSync(baseSpecPath)) {\n const destSpecPath = path.join(specDir, \"MessageRouter.tla\");\n fs.copyFileSync(baseSpecPath, destSpecPath);\n } else {\n console.log(\n color(\"ā ļø Warning: MessageRouter.tla not found, verification may fail\", COLORS.yellow)\n );\n }\n\n console.log(color(\"ā Specification generated\", COLORS.green));\n console.log(color(` ${specPath}`, COLORS.gray));\n console.log();\n\n // Check Docker\n console.log(color(\"š³ Checking Docker...\", COLORS.blue));\n const docker = new DockerRunner();\n\n if (!(await docker.isDockerAvailable())) {\n throw new Error(\"Docker is not available. Please install Docker and try again.\");\n }\n\n if (!(await docker.hasImage())) {\n console.log(color(\" Pulling TLA+ image (this may take a moment)...\", COLORS.gray));\n await docker.pullImage((line) => {\n console.log(color(` ${line}`, COLORS.gray));\n });\n }\n\n console.log(color(\"ā Docker ready\", COLORS.green));\n console.log();\n\n // Run TLC\n console.log(color(\"āļø Running TLC model checker...\", COLORS.blue));\n console.log(color(\" This may take a minute...\", COLORS.gray));\n console.log();\n\n const result = await docker.runTLC(specPath, {\n workers: 2,\n timeout: 120000, // 2 minutes\n });\n\n // Display results\n if (result.success) {\n console.log(color(\"ā
Verification passed!\\n\", COLORS.green));\n console.log(color(\"Statistics:\", COLORS.blue));\n console.log(color(` States explored: ${result.stats?.statesGenerated || 0}`, COLORS.gray));\n console.log(color(` Distinct states: ${result.stats?.distinctStates || 0}`, COLORS.gray));\n console.log();\n } else {\n console.log(color(\"ā Verification failed!\\n\", COLORS.red));\n\n if (result.violation) {\n console.log(color(`Invariant violated: ${result.violation.name}\\n`, COLORS.red));\n console.log(color(\"Trace to violation:\", COLORS.yellow));\n for (const line of result.violation.trace.slice(0, 20)) {\n console.log(color(` ${line}`, COLORS.gray));\n }\n if (result.violation.trace.length > 20) {\n console.log(color(` ... (${result.violation.trace.length - 20} more lines)`, COLORS.gray));\n }\n } else if (result.error) {\n console.log(color(`Error: ${result.error}`, COLORS.red));\n }\n\n console.log();\n console.log(color(\"Full output saved to:\", COLORS.gray));\n console.log(color(` ${path.join(specDir, \"tlc-output.log\")}`, COLORS.gray));\n fs.writeFileSync(path.join(specDir, \"tlc-output.log\"), result.output);\n\n process.exit(1);\n }\n}\n\nfunction showHelp() {\n console.log(`\n${color(\"bun verify\", COLORS.blue)} - Formal verification for web extensions\n\n${color(\"Commands:\", COLORS.blue)}\n\n ${color(\"bun verify\", COLORS.green)}\n Run verification (validates config, generates specs, runs TLC)\n\n ${color(\"bun verify --setup\", COLORS.green)}\n Analyze codebase and generate configuration file\n\n ${color(\"bun verify --validate\", COLORS.green)}\n Validate existing configuration without running verification\n\n ${color(\"bun verify --help\", COLORS.green)}\n Show this help message\n\n${color(\"Getting Started:\", COLORS.blue)}\n\n 1. Run ${color(\"bun verify --setup\", COLORS.green)} to generate configuration\n 2. Review ${color(\"specs/verification.config.ts\", COLORS.blue)} and fill in marked fields\n 3. Run ${color(\"bun verify --validate\", COLORS.green)} to check your configuration\n 4. Run ${color(\"bun verify\", COLORS.green)} to start verification\n\n${color(\"Configuration Help:\", COLORS.blue)}\n\n The generated config file uses special markers:\n\n ${color(\"/* CONFIGURE */\", COLORS.yellow)} - Replace with your value\n ${color(\"/* REVIEW */\", COLORS.yellow)} - Check auto-generated value\n ${color(\"null\", COLORS.yellow)} - Must be replaced with concrete value\n\n${color(\"Learn More:\", COLORS.blue)}\n\n Documentation: https://github.com/fairfox/web-ext\n TLA+ Resources: https://learntla.com\n`);\n}\n\nfunction findTsConfig(): string | null {\n const locations = [\n path.join(process.cwd(), \"tsconfig.json\"),\n path.join(process.cwd(), \"packages\", \"web-ext\", \"tsconfig.json\"),\n ];\n\n for (const loc of locations) {\n if (fs.existsSync(loc)) {\n return loc;\n }\n }\n\n return null;\n}\n\nfunction findStateFile(): string | undefined {\n const locations = [\n path.join(process.cwd(), \"types\", \"state.ts\"),\n path.join(process.cwd(), \"src\", \"types\", \"state.ts\"),\n path.join(process.cwd(), \"packages\", \"web-ext\", \"src\", \"shared\", \"state\", \"app-state.ts\"),\n ];\n\n for (const loc of locations) {\n if (fs.existsSync(loc)) {\n return loc;\n }\n }\n\n return undefined;\n}\n\nmain().catch((error) => {\n console.error(color(\"\\nā Fatal error:\", COLORS.red));\n console.error(` ${error instanceof Error ? error.message : String(error)}`);\n if (error instanceof Error && error.stack) {\n console.error(color(\"\\nStack trace:\", COLORS.gray));\n console.error(color(error.stack, COLORS.gray));\n }\n process.exit(1);\n});\n",
|
|
8
|
-
"// Type extraction from TypeScript using ts-morph\n\nimport { Project, SourceFile, Type, TypeFormatFlags } from \"ts-morph\";\nimport type { TypeInfo, TypeKind, FieldAnalysis, Confidence, CodebaseAnalysis } from \"../types\";\nimport { HandlerExtractor } from \"./handlers\";\n\nexport class TypeExtractor {\n private project: Project;\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n });\n }\n\n /**\n * Analyze the codebase and extract state types and message types\n */\n async analyzeCodebase(stateFilePath?: string): Promise<CodebaseAnalysis> {\n // Find state type\n const stateType = stateFilePath ? 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 return {\n stateType,\n messageTypes: Array.from(new Set([...messageTypes, ...handlerAnalysis.messageTypes])),\n fields,\n handlers: handlerAnalysis.handlers,\n };\n }\n\n /**\n * Extract state type from a specific file\n */\n private extractStateType(filePath: string): TypeInfo | null {\n const sourceFile = this.project.getSourceFile(filePath);\n if (!sourceFile) {\n return null;\n }\n\n // Look for type alias named \"AppState\" or similar\n const typeAlias =\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 */\n private findMessageTypes(): string[] {\n const messageTypes: string[] = [];\n\n // Search for files with \"message\" in the name\n const messageFiles = this.project.getSourceFiles(\"**/message*.ts\");\n\n for (const file of messageFiles) {\n // Look for type aliases that are unions\n for (const typeAlias of file.getTypeAliases()) {\n const type = typeAlias.getType();\n if (type.isUnion()) {\n // Extract message type literals\n for (const unionType of type.getUnionTypes()) {\n if (unionType.isObject()) {\n const typeProperty = unionType.getProperty(\"type\");\n if (typeProperty) {\n const typeType = typeProperty.getTypeAtLocation(file);\n if (typeType.isStringLiteral()) {\n messageTypes.push(typeType.getLiteralValue() as string);\n }\n }\n }\n }\n }\n }\n }\n\n return [...new Set(messageTypes)]; // Dedupe\n }\n\n /**\n * Convert ts-morph Type to our TypeInfo\n */\n private convertType(type: Type, name: string): TypeInfo {\n // Check for null/undefined\n const nullable = type.isNullable();\n\n // Boolean\n if (type.isBoolean() || type.isBooleanLiteral()) {\n return { name, kind: \"boolean\", nullable };\n }\n\n // Union types\n if (type.isUnion()) {\n const unionTypes = type.getUnionTypes();\n\n // Check for string literal union (enum)\n const allStringLiterals = unionTypes.every((t) => t.isStringLiteral());\n if (allStringLiterals) {\n const enumValues = unionTypes.map((t) => t.getLiteralValue() as string);\n return {\n name,\n kind: \"enum\",\n nullable,\n enumValues,\n };\n }\n\n // Check for nullable type (T | null | undefined)\n const nonNullTypes = unionTypes.filter((t) => !t.isNull() && !t.isUndefined());\n\n if (nonNullTypes.length === 1) {\n // This is a nullable type: T | null or T | undefined\n const baseType = this.convertType(nonNullTypes[0], name);\n return {\n ...baseType,\n nullable: true,\n };\n }\n\n // Generic union - keep as-is\n return {\n name,\n kind: \"union\",\n nullable,\n unionTypes: unionTypes.map((t, i) => this.convertType(t, `${name}_${i}`)),\n };\n }\n\n // String\n if (type.isString() || type.isStringLiteral()) {\n return { name, kind: \"string\", nullable };\n }\n\n // Number\n if (type.isNumber() || type.isNumberLiteral()) {\n return { name, kind: \"number\", nullable };\n }\n\n // Array\n if (type.isArray()) {\n const elementType = type.getArrayElementType();\n return {\n name,\n kind: \"array\",\n nullable,\n elementType: elementType\n ? this.convertType(elementType, `${name}_element`)\n : { name: \"unknown\", kind: \"unknown\", nullable: false },\n };\n }\n\n // Map/Set detection - must come before generic object handling\n const symbol = type.getSymbol();\n if (symbol) {\n const symbolName = symbol.getName();\n\n // Map<K, V>\n if (symbolName === \"Map\") {\n const typeArgs = type.getTypeArguments();\n return {\n name,\n kind: \"map\",\n nullable,\n // Extract value type from Map<K, V>\n valueType:\n typeArgs && typeArgs[1] ? this.convertType(typeArgs[1], `${name}_value`) : undefined,\n };\n }\n\n // Set<T>\n if (symbolName === \"Set\") {\n const typeArgs = type.getTypeArguments();\n return {\n name,\n kind: \"set\",\n nullable,\n elementType:\n typeArgs && typeArgs[0] ? this.convertType(typeArgs[0], `${name}_element`) : undefined,\n };\n }\n }\n\n // Object\n if (type.isObject()) {\n const properties: Record<string, TypeInfo> = {};\n\n for (const prop of type.getProperties()) {\n const propName = prop.getName();\n const propType = prop.getTypeAtLocation(this.project.getSourceFiles()[0]);\n properties[propName] = this.convertType(propType, propName);\n }\n\n return {\n name,\n kind: \"object\",\n nullable,\n properties,\n };\n }\n\n // Null\n if (type.isNull()) {\n return { name, kind: \"null\", nullable: true };\n }\n\n // Unknown/Any\n return { name, kind: \"unknown\", nullable };\n }\n\n /**\n * Analyze fields and determine confidence/bounds\n */\n private analyzeFields(stateType: TypeInfo, prefix = \"\"): FieldAnalysis[] {\n const fields: FieldAnalysis[] = [];\n\n if (stateType.kind === \"object\" && stateType.properties) {\n for (const [key, propType] of Object.entries(stateType.properties)) {\n const path = prefix ? `${prefix}.${key}` : key;\n\n // Recursively analyze nested objects (but not Map/Set - they're leaf nodes)\n if (propType.kind === \"object\") {\n // Don't add intermediate objects as fields, just recurse into them\n fields.push(...this.analyzeFields(propType, path));\n } else {\n // This is a leaf field (or Map/Set), add it for configuration\n const analysis = this.analyzeField(path, propType);\n fields.push(analysis);\n }\n }\n }\n\n return fields;\n }\n\n /**\n * Analyze a single field and determine configuration needs\n */\n private analyzeField(path: string, type: TypeInfo): FieldAnalysis {\n const analysis: FieldAnalysis = {\n path,\n type,\n confidence: \"low\",\n evidence: [],\n suggestions: [],\n bounds: {},\n };\n\n // Boolean - high confidence, no config needed\n if (type.kind === \"boolean\") {\n analysis.confidence = \"high\";\n analysis.evidence.push(\"Boolean type - auto-configured\");\n return analysis;\n }\n\n // Enum - high confidence\n if (type.kind === \"enum\" && type.enumValues) {\n analysis.confidence = \"high\";\n analysis.evidence.push(`Enum with ${type.enumValues.length} values`);\n analysis.bounds!.values = type.enumValues;\n return analysis;\n }\n\n // Array - needs manual configuration\n if (type.kind === \"array\") {\n analysis.confidence = \"low\";\n analysis.suggestions.push(\"Choose maxLength: 5 (fast), 10 (balanced), or 20 (thorough)\");\n analysis.bounds!.maxLength = undefined;\n\n // Try to find bounds in code\n const foundBound = this.findArrayBound(path);\n if (foundBound) {\n analysis.confidence = \"medium\";\n analysis.evidence.push(`Found array check: ${foundBound.evidence}`);\n analysis.bounds!.maxLength = foundBound.value;\n }\n\n return analysis;\n }\n\n // Number - needs manual configuration\n if (type.kind === \"number\") {\n analysis.confidence = \"low\";\n analysis.suggestions.push(\"Provide min and max values based on your application logic\");\n analysis.bounds!.min = undefined;\n analysis.bounds!.max = undefined;\n\n // Try to find bounds in code\n const foundBound = this.findNumberBound(path);\n if (foundBound) {\n analysis.confidence = \"high\";\n analysis.evidence.push(`Found comparison: ${foundBound.evidence}`);\n analysis.bounds = { ...analysis.bounds!, ...foundBound.bounds };\n }\n\n return analysis;\n }\n\n // String - needs manual configuration\n if (type.kind === \"string\") {\n analysis.confidence = \"low\";\n analysis.suggestions.push(\n 'Provide 2-3 example values: [\"value1\", \"value2\", \"value3\"]',\n \"Or use { abstract: true } for symbolic verification\"\n );\n analysis.bounds!.values = undefined;\n return analysis;\n }\n\n // Map/Set - needs manual configuration\n if (type.kind === \"map\" || type.kind === \"set\") {\n analysis.confidence = \"low\";\n analysis.suggestions.push(\"Provide maxSize (recommended: 3-5)\");\n analysis.bounds!.maxSize = undefined;\n return analysis;\n }\n\n return analysis;\n }\n\n /**\n * Try to find array bounds by searching for length checks\n */\n private findArrayBound(path: string): { value: number; evidence: string } | null {\n // TODO: Search source code for patterns like:\n // - if (array.length < N)\n // - array.slice(0, N)\n // This would require analyzing the actual usage in code\n return null;\n }\n\n /**\n * Try to find number bounds by searching for comparisons\n */\n private findNumberBound(\n path: string\n ): { bounds: { min?: number; max?: number }; evidence: string } | null {\n // TODO: Search source code for patterns like:\n // - if (counter < 100)\n // - if (value >= 0 && value <= 100)\n // This would require analyzing the actual usage in code\n return null;\n }\n}\n\nexport async function analyzeCodebase(options: {\n tsConfigPath: string;\n stateFilePath?: string;\n}): Promise<CodebaseAnalysis> {\n const extractor = new TypeExtractor(options.tsConfigPath);\n return extractor.analyzeCodebase(options.stateFilePath);\n}\n",
|
|
9
|
-
"// Handler extraction from TypeScript code\n// Extracts message handlers and their state mutations\n\nimport { Project, type SourceFile, SyntaxKind, Node } from \"ts-morph\"
|
|
7
|
+
"#!/usr/bin/env bun\n// CLI for verification system\n\nimport * as fs from \"node:fs\"\nimport * as path from \"node:path\"\nimport { analyzeCodebase } from \"./extract/types\"\nimport { generateConfig } from \"./codegen/config\"\nimport { validateConfig } from \"./config/parser\"\n\nconst COLORS = {\n reset: \"\\x1b[0m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n gray: \"\\x1b[90m\",\n}\n\nfunction color(text: string, colorCode: string): string {\n return `${colorCode}${text}${COLORS.reset}`\n}\n\nasync function main() {\n const args = process.argv.slice(2)\n const command = args[0]\n\n switch (command) {\n case \"--setup\":\n case \"setup\":\n await setupCommand()\n break\n\n case \"--validate\":\n case \"validate\":\n await validateCommand()\n break\n\n case \"--help\":\n case \"help\":\n showHelp()\n break\n\n default:\n await verifyCommand()\n }\n}\n\nasync function setupCommand() {\n console.log(color(\"\\nš Analyzing codebase...\\n\", COLORS.blue))\n\n try {\n // Find tsconfig\n const tsConfigPath = findTsConfig()\n if (!tsConfigPath) {\n console.error(color(\"ā Could not find tsconfig.json\", COLORS.red))\n console.error(\" Run this command from your project root\")\n process.exit(1)\n }\n\n console.log(color(` Using: ${tsConfigPath}`, COLORS.gray))\n\n // Analyze codebase\n const analysis = await analyzeCodebase({\n tsConfigPath,\n stateFilePath: findStateFile()\n })\n\n if (!analysis.stateType) {\n console.log(color(\"\\nā ļø Could not find state type definition\", COLORS.yellow))\n console.log(\" Expected to find a type named 'AppState' or 'State'\")\n console.log(\" in a file matching **/state*.ts\")\n console.log()\n console.log(\" You can still generate a config template:\")\n console.log(\" It will be empty and you'll need to fill it in manually.\")\n console.log()\n } else {\n console.log(color(`ā Found state type with ${analysis.fields.length} field(s)`, COLORS.green))\n }\n\n console.log(color(`ā Found ${analysis.messageTypes.length} message type(s)`, COLORS.green))\n\n // Show analysis summary\n if (analysis.fields.length > 0) {\n console.log(color(\"\\nš Configuration Summary:\\n\", COLORS.blue))\n\n const table = [\n [\"Field\", \"Type\", \"Status\"],\n [\"ā\".repeat(30), \"ā\".repeat(20), \"ā\".repeat(20)],\n ]\n\n for (const field of analysis.fields) {\n const status = field.confidence === \"high\"\n ? color(\"ā Auto-configured\", COLORS.green)\n : field.confidence === \"medium\"\n ? color(\"ā Review needed\", COLORS.yellow)\n : color(\"ā Manual config\", COLORS.red)\n\n table.push([field.path, field.type.kind, status])\n }\n\n for (const row of table) {\n console.log(` ${row[0].padEnd(32)} ${row[1].padEnd(22)} ${row[2]}`)\n }\n }\n\n // Generate config\n const configContent = generateConfig(analysis)\n const configPath = path.join(process.cwd(), \"specs\", \"verification.config.ts\")\n\n // Ensure directory exists\n const configDir = path.dirname(configPath)\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true })\n }\n\n // Write config\n fs.writeFileSync(configPath, configContent, \"utf-8\")\n\n console.log(color(\"\\nā
Configuration generated!\\n\", COLORS.green))\n console.log(` File: ${color(configPath, COLORS.blue)}`)\n console.log()\n console.log(color(\"š Next steps:\", COLORS.blue))\n console.log()\n console.log(\" 1. Review the generated configuration file\")\n console.log(\" 2. Fill in values marked with /* CONFIGURE */\")\n console.log(\" 3. Run 'bun verify' to check your configuration\")\n console.log()\n console.log(color(\"š” Tip:\", COLORS.gray))\n console.log(color(\" Look for comments explaining what each field needs.\", COLORS.gray))\n console.log()\n\n } catch (error) {\n console.error(color(\"\\nā Setup failed:\", COLORS.red))\n console.error(` ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n}\n\nasync function validateCommand() {\n const configPath = path.join(process.cwd(), \"specs\", \"verification.config.ts\")\n\n console.log(color(\"\\nš Validating configuration...\\n\", COLORS.blue))\n\n const result = validateConfig(configPath)\n\n if (result.valid) {\n console.log(color(\"ā
Configuration is complete and valid!\\n\", COLORS.green))\n console.log(\" You can now run 'bun verify' to start verification.\")\n console.log()\n return\n }\n\n // Show errors\n const errors = result.issues.filter(i => i.severity === \"error\")\n const warnings = result.issues.filter(i => i.severity === \"warning\")\n\n if (errors.length > 0) {\n console.log(color(`ā Found ${errors.length} error(s):\\n`, COLORS.red))\n\n for (const error of errors) {\n console.log(color(` ⢠${error.message}`, COLORS.red))\n if (error.field) {\n console.log(color(` Field: ${error.field}`, COLORS.gray))\n }\n if (error.location) {\n console.log(color(` Location: line ${error.location.line}`, COLORS.gray))\n }\n console.log(color(` ā ${error.suggestion}`, COLORS.yellow))\n console.log()\n }\n }\n\n if (warnings.length > 0) {\n console.log(color(`ā ļø Found ${warnings.length} warning(s):\\n`, COLORS.yellow))\n\n for (const warning of warnings) {\n console.log(color(` ⢠${warning.message}`, COLORS.yellow))\n if (warning.field) {\n console.log(color(` Field: ${warning.field}`, COLORS.gray))\n }\n console.log(color(` ā ${warning.suggestion}`, COLORS.gray))\n console.log()\n }\n }\n\n console.log(color(\"Configuration incomplete. Please fix the errors above.\\n\", COLORS.red))\n process.exit(1)\n}\n\nasync function verifyCommand() {\n const configPath = path.join(process.cwd(), \"specs\", \"verification.config.ts\")\n\n console.log(color(\"\\nš Running verification...\\n\", COLORS.blue))\n\n // First validate config\n const validation = validateConfig(configPath)\n\n if (!validation.valid) {\n const errors = validation.issues.filter(i => i.severity === \"error\")\n console.log(color(`ā Configuration incomplete (${errors.length} error(s))\\n`, COLORS.red))\n\n for (const error of errors.slice(0, 3)) {\n console.log(color(` ⢠${error.message}`, COLORS.red))\n if (error.field) {\n console.log(color(` Field: ${error.field}`, COLORS.gray))\n }\n console.log()\n }\n\n if (errors.length > 3) {\n console.log(color(` ... and ${errors.length - 3} more error(s)`, COLORS.gray))\n console.log()\n }\n\n console.log(\" Run 'bun verify --validate' to see all issues\")\n console.log(\" Run 'bun verify --setup' to regenerate configuration\")\n console.log()\n process.exit(1)\n }\n\n console.log(color(\"ā Configuration valid\", COLORS.green))\n console.log()\n\n // Run full verification\n try {\n await runFullVerification(configPath)\n } catch (error) {\n console.error(color(\"\\nā Verification failed:\", COLORS.red))\n console.error(` ${error instanceof Error ? error.message : String(error)}`)\n process.exit(1)\n }\n}\n\nasync function runFullVerification(configPath: string) {\n const { generateTLA } = await import(\"./codegen/tla\")\n const { DockerRunner } = await import(\"./runner/docker\")\n\n // Load config\n delete require.cache[require.resolve(path.resolve(configPath))]\n const configModule = require(path.resolve(configPath))\n const config = configModule.default || configModule\n\n // Analyze codebase\n console.log(color(\"š Analyzing codebase...\", COLORS.blue))\n const tsConfigPath = findTsConfig()\n if (!tsConfigPath) {\n throw new Error(\"Could not find tsconfig.json\")\n }\n\n const analysis = await analyzeCodebase({\n tsConfigPath,\n stateFilePath: findStateFile()\n })\n\n console.log(color(\"ā Analysis complete\", COLORS.green))\n console.log()\n\n // Generate TLA+ specs\n console.log(color(\"š Generating TLA+ specification...\", COLORS.blue))\n const { spec, cfg } = generateTLA(config, analysis)\n\n // Write specs to temp directory\n const specDir = path.join(process.cwd(), \"specs\", \"tla\", \"generated\")\n if (!fs.existsSync(specDir)) {\n fs.mkdirSync(specDir, { recursive: true })\n }\n\n const specPath = path.join(specDir, \"UserApp.tla\")\n const cfgPath = path.join(specDir, \"UserApp.cfg\")\n\n fs.writeFileSync(specPath, spec)\n fs.writeFileSync(cfgPath, cfg)\n\n // Copy base MessageRouter spec to generated directory so TLC can find it\n // Try multiple locations to find MessageRouter.tla:\n // 1. User's specs/tla/MessageRouter.tla (if they've customized it)\n // 2. Package's bundled specs/tla/MessageRouter.tla (when installed via npm)\n // 3. External polly directory (when using git submodule or manual clone)\n const possiblePaths = [\n // User's custom version\n path.join(process.cwd(), \"specs\", \"tla\", \"MessageRouter.tla\"),\n\n // Package's bundled version (when installed as npm package)\n // CLI runs from dist/cli.js, so specs/ is at ../specs/\n path.join(__dirname, \"..\", \"specs\", \"tla\", \"MessageRouter.tla\"),\n\n // When running from source in development\n path.join(__dirname, \"..\", \"..\", \"specs\", \"tla\", \"MessageRouter.tla\"),\n\n // External polly directory (common in monorepos or git submodules)\n path.join(process.cwd(), \"external\", \"polly\", \"packages\", \"verify\", \"specs\", \"tla\", \"MessageRouter.tla\"),\n\n // Node modules (scoped package)\n path.join(process.cwd(), \"node_modules\", \"@fairfox\", \"polly-verify\", \"specs\", \"tla\", \"MessageRouter.tla\"),\n ]\n\n let baseSpecPath: string | null = null\n for (const candidatePath of possiblePaths) {\n if (fs.existsSync(candidatePath)) {\n baseSpecPath = candidatePath\n break\n }\n }\n\n if (baseSpecPath) {\n const destSpecPath = path.join(specDir, \"MessageRouter.tla\")\n fs.copyFileSync(baseSpecPath, destSpecPath)\n console.log(color(\"ā Copied MessageRouter.tla\", COLORS.green))\n } else {\n console.log(color(\"ā ļø Warning: MessageRouter.tla not found, verification may fail\", COLORS.yellow))\n console.log(color(` Searched in:`, COLORS.gray))\n for (const searchPath of possiblePaths) {\n console.log(color(` - ${searchPath}`, COLORS.gray))\n }\n }\n\n console.log(color(\"ā Specification generated\", COLORS.green))\n console.log(color(` ${specPath}`, COLORS.gray))\n console.log()\n\n // Check Docker\n console.log(color(\"š³ Checking Docker...\", COLORS.blue))\n const docker = new DockerRunner()\n\n if (!(await docker.isDockerAvailable())) {\n throw new Error(\"Docker is not available. Please install Docker and try again.\")\n }\n\n if (!(await docker.hasImage())) {\n console.log(color(\" Pulling TLA+ image (this may take a moment)...\", COLORS.gray))\n await docker.pullImage((line) => {\n console.log(color(` ${line}`, COLORS.gray))\n })\n }\n\n console.log(color(\"ā Docker ready\", COLORS.green))\n console.log()\n\n // Run TLC\n console.log(color(\"āļø Running TLC model checker...\", COLORS.blue))\n console.log(color(\" This may take a minute...\", COLORS.gray))\n console.log()\n\n const result = await docker.runTLC(specPath, {\n workers: 2,\n timeout: 120000 // 2 minutes\n })\n\n // Display results\n if (result.success) {\n console.log(color(\"ā
Verification passed!\\n\", COLORS.green))\n console.log(color(\"Statistics:\", COLORS.blue))\n console.log(color(` States explored: ${result.stats?.statesGenerated || 0}`, COLORS.gray))\n console.log(color(` Distinct states: ${result.stats?.distinctStates || 0}`, COLORS.gray))\n console.log()\n } else {\n console.log(color(\"ā Verification failed!\\n\", COLORS.red))\n\n if (result.violation) {\n console.log(color(`Invariant violated: ${result.violation.name}\\n`, COLORS.red))\n console.log(color(\"Trace to violation:\", COLORS.yellow))\n for (const line of result.violation.trace.slice(0, 20)) {\n console.log(color(` ${line}`, COLORS.gray))\n }\n if (result.violation.trace.length > 20) {\n console.log(color(` ... (${result.violation.trace.length - 20} more lines)`, COLORS.gray))\n }\n } else if (result.error) {\n console.log(color(`Error: ${result.error}`, COLORS.red))\n }\n\n console.log()\n console.log(color(\"Full output saved to:\", COLORS.gray))\n console.log(color(` ${path.join(specDir, \"tlc-output.log\")}`, COLORS.gray))\n fs.writeFileSync(path.join(specDir, \"tlc-output.log\"), result.output)\n\n process.exit(1)\n }\n}\n\nfunction showHelp() {\n console.log(`\n${color(\"bun verify\", COLORS.blue)} - Formal verification for web extensions\n\n${color(\"Commands:\", COLORS.blue)}\n\n ${color(\"bun verify\", COLORS.green)}\n Run verification (validates config, generates specs, runs TLC)\n\n ${color(\"bun verify --setup\", COLORS.green)}\n Analyze codebase and generate configuration file\n\n ${color(\"bun verify --validate\", COLORS.green)}\n Validate existing configuration without running verification\n\n ${color(\"bun verify --help\", COLORS.green)}\n Show this help message\n\n${color(\"Getting Started:\", COLORS.blue)}\n\n 1. Run ${color(\"bun verify --setup\", COLORS.green)} to generate configuration\n 2. Review ${color(\"specs/verification.config.ts\", COLORS.blue)} and fill in marked fields\n 3. Run ${color(\"bun verify --validate\", COLORS.green)} to check your configuration\n 4. Run ${color(\"bun verify\", COLORS.green)} to start verification\n\n${color(\"Configuration Help:\", COLORS.blue)}\n\n The generated config file uses special markers:\n\n ${color(\"/* CONFIGURE */\", COLORS.yellow)} - Replace with your value\n ${color(\"/* REVIEW */\", COLORS.yellow)} - Check auto-generated value\n ${color(\"null\", COLORS.yellow)} - Must be replaced with concrete value\n\n${color(\"Learn More:\", COLORS.blue)}\n\n Documentation: https://github.com/fairfox/web-ext\n TLA+ Resources: https://learntla.com\n`)\n}\n\nfunction findTsConfig(): string | null {\n const locations = [\n path.join(process.cwd(), \"tsconfig.json\"),\n path.join(process.cwd(), \"packages\", \"web-ext\", \"tsconfig.json\"),\n ]\n\n for (const loc of locations) {\n if (fs.existsSync(loc)) {\n return loc\n }\n }\n\n return null\n}\n\nfunction findStateFile(): string | undefined {\n const locations = [\n path.join(process.cwd(), \"types\", \"state.ts\"),\n path.join(process.cwd(), \"src\", \"types\", \"state.ts\"),\n path.join(process.cwd(), \"packages\", \"web-ext\", \"src\", \"shared\", \"state\", \"app-state.ts\"),\n ]\n\n for (const loc of locations) {\n if (fs.existsSync(loc)) {\n return loc\n }\n }\n\n return undefined\n}\n\nmain().catch((error) => {\n console.error(color(\"\\nā Fatal error:\", COLORS.red))\n console.error(` ${error instanceof Error ? error.message : String(error)}`)\n if (error instanceof Error && error.stack) {\n console.error(color(\"\\nStack trace:\", COLORS.gray))\n console.error(color(error.stack, COLORS.gray))\n }\n process.exit(1)\n})\n",
|
|
8
|
+
"// Type extraction from TypeScript using ts-morph\n\nimport { Project, SourceFile, Type, TypeFormatFlags } from \"ts-morph\"\nimport type { TypeInfo, TypeKind, FieldAnalysis, Confidence, CodebaseAnalysis } from \"../types\"\nimport { HandlerExtractor } from \"./handlers\"\n\nexport class TypeExtractor {\n private project: Project\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n })\n }\n\n /**\n * Analyze the codebase and extract state types and message types\n */\n async analyzeCodebase(stateFilePath?: string): Promise<CodebaseAnalysis> {\n // Find state type\n const stateType = stateFilePath\n ? this.extractStateType(stateFilePath)\n : this.findStateType()\n\n // Find message types\n const messageTypes = this.findMessageTypes()\n\n // Analyze fields\n const fields = stateType ? this.analyzeFields(stateType) : []\n\n // Extract message handlers\n const configFilePath = this.project.getCompilerOptions().configFilePath\n const tsConfigPath = typeof configFilePath === \"string\" ? configFilePath : \"tsconfig.json\"\n const handlerExtractor = new HandlerExtractor(tsConfigPath)\n const handlerAnalysis = handlerExtractor.extractHandlers()\n\n return {\n stateType,\n messageTypes: Array.from(new Set([...messageTypes, ...handlerAnalysis.messageTypes])),\n fields,\n handlers: handlerAnalysis.handlers,\n }\n }\n\n /**\n * Extract state type from a specific file\n */\n private extractStateType(filePath: string): TypeInfo | null {\n const sourceFile = this.project.getSourceFile(filePath)\n if (!sourceFile) {\n return null\n }\n\n // Look for type alias named \"AppState\" or similar\n const typeAlias = sourceFile.getTypeAlias(\"AppState\")\n || sourceFile.getTypeAlias(\"State\")\n || sourceFile.getTypeAliases()[0]\n\n if (!typeAlias) {\n return null\n }\n\n const type = typeAlias.getType()\n return this.convertType(type, typeAlias.getName())\n }\n\n /**\n * Find state type by searching common patterns\n */\n private findStateType(): TypeInfo | null {\n // Search for files with \"state\" in the name\n const stateFiles = this.project.getSourceFiles(\"**/state*.ts\")\n\n for (const file of stateFiles) {\n const typeAlias = file.getTypeAlias(\"AppState\")\n || file.getTypeAlias(\"State\")\n\n if (typeAlias) {\n const type = typeAlias.getType()\n return this.convertType(type, typeAlias.getName())\n }\n }\n\n return null\n }\n\n /**\n * Find message types by searching for type unions\n */\n private findMessageTypes(): string[] {\n const messageTypes: string[] = []\n\n // Search for files with \"message\" in the name\n const messageFiles = this.project.getSourceFiles(\"**/message*.ts\")\n\n for (const file of messageFiles) {\n // Look for type aliases that are unions\n for (const typeAlias of file.getTypeAliases()) {\n const type = typeAlias.getType()\n if (type.isUnion()) {\n // Extract message type literals\n for (const unionType of type.getUnionTypes()) {\n if (unionType.isObject()) {\n const typeProperty = unionType.getProperty(\"type\")\n if (typeProperty) {\n const typeType = typeProperty.getTypeAtLocation(file)\n if (typeType.isStringLiteral()) {\n messageTypes.push(typeType.getLiteralValue() as string)\n }\n }\n }\n }\n }\n }\n }\n\n return [...new Set(messageTypes)] // Dedupe\n }\n\n /**\n * Convert ts-morph Type to our TypeInfo\n */\n private convertType(type: Type, name: string): TypeInfo {\n // Check for null/undefined\n const nullable = type.isNullable()\n\n // Boolean\n if (type.isBoolean() || type.isBooleanLiteral()) {\n return { name, kind: \"boolean\", nullable }\n }\n\n // Union types\n if (type.isUnion()) {\n const unionTypes = type.getUnionTypes()\n\n // Check for string literal union (enum)\n const allStringLiterals = unionTypes.every(t => t.isStringLiteral())\n if (allStringLiterals) {\n const enumValues = unionTypes.map(t => t.getLiteralValue() as string)\n return {\n name,\n kind: \"enum\",\n nullable,\n enumValues\n }\n }\n\n // Check for nullable type (T | null | undefined)\n const nonNullTypes = unionTypes.filter(t => !t.isNull() && !t.isUndefined())\n\n if (nonNullTypes.length === 1) {\n // This is a nullable type: T | null or T | undefined\n const baseType = this.convertType(nonNullTypes[0], name)\n return {\n ...baseType,\n nullable: true\n }\n }\n\n // Generic union - keep as-is\n return {\n name,\n kind: \"union\",\n nullable,\n unionTypes: unionTypes.map((t, i) => this.convertType(t, `${name}_${i}`))\n }\n }\n\n // String\n if (type.isString() || type.isStringLiteral()) {\n return { name, kind: \"string\", nullable }\n }\n\n // Number\n if (type.isNumber() || type.isNumberLiteral()) {\n return { name, kind: \"number\", nullable }\n }\n\n // Array\n if (type.isArray()) {\n const elementType = type.getArrayElementType()\n return {\n name,\n kind: \"array\",\n nullable,\n elementType: elementType\n ? this.convertType(elementType, `${name}_element`)\n : { name: \"unknown\", kind: \"unknown\", nullable: false }\n }\n }\n\n // Map/Set detection - must come before generic object handling\n const symbol = type.getSymbol()\n if (symbol) {\n const symbolName = symbol.getName()\n\n // Map<K, V>\n if (symbolName === \"Map\") {\n const typeArgs = type.getTypeArguments()\n return {\n name,\n kind: \"map\",\n nullable,\n // Extract value type from Map<K, V>\n valueType: typeArgs && typeArgs[1]\n ? this.convertType(typeArgs[1], `${name}_value`)\n : undefined\n }\n }\n\n // Set<T>\n if (symbolName === \"Set\") {\n const typeArgs = type.getTypeArguments()\n return {\n name,\n kind: \"set\",\n nullable,\n elementType: typeArgs && typeArgs[0]\n ? this.convertType(typeArgs[0], `${name}_element`)\n : undefined\n }\n }\n }\n\n // Object\n if (type.isObject()) {\n const properties: Record<string, TypeInfo> = {}\n\n for (const prop of type.getProperties()) {\n const propName = prop.getName()\n const propType = prop.getTypeAtLocation(this.project.getSourceFiles()[0])\n properties[propName] = this.convertType(propType, propName)\n }\n\n return {\n name,\n kind: \"object\",\n nullable,\n properties\n }\n }\n\n // Null\n if (type.isNull()) {\n return { name, kind: \"null\", nullable: true }\n }\n\n // Unknown/Any\n return { name, kind: \"unknown\", nullable }\n }\n\n /**\n * Analyze fields and determine confidence/bounds\n */\n private analyzeFields(stateType: TypeInfo, prefix = \"\"): FieldAnalysis[] {\n const fields: FieldAnalysis[] = []\n\n if (stateType.kind === \"object\" && stateType.properties) {\n for (const [key, propType] of Object.entries(stateType.properties)) {\n const path = prefix ? `${prefix}.${key}` : key\n\n // Recursively analyze nested objects (but not Map/Set - they're leaf nodes)\n if (propType.kind === \"object\") {\n // Don't add intermediate objects as fields, just recurse into them\n fields.push(...this.analyzeFields(propType, path))\n } else {\n // This is a leaf field (or Map/Set), add it for configuration\n const analysis = this.analyzeField(path, propType)\n fields.push(analysis)\n }\n }\n }\n\n return fields\n }\n\n /**\n * Analyze a single field and determine configuration needs\n */\n private analyzeField(path: string, type: TypeInfo): FieldAnalysis {\n const analysis: FieldAnalysis = {\n path,\n type,\n confidence: \"low\",\n evidence: [],\n suggestions: [],\n bounds: {}\n }\n\n // Boolean - high confidence, no config needed\n if (type.kind === \"boolean\") {\n analysis.confidence = \"high\"\n analysis.evidence.push(\"Boolean type - auto-configured\")\n return analysis\n }\n\n // Enum - high confidence\n if (type.kind === \"enum\" && type.enumValues) {\n analysis.confidence = \"high\"\n analysis.evidence.push(`Enum with ${type.enumValues.length} values`)\n analysis.bounds!.values = type.enumValues\n return analysis\n }\n\n // Array - needs manual configuration\n if (type.kind === \"array\") {\n analysis.confidence = \"low\"\n analysis.suggestions.push(\n \"Choose maxLength: 5 (fast), 10 (balanced), or 20 (thorough)\"\n )\n analysis.bounds!.maxLength = undefined\n\n // Try to find bounds in code\n const foundBound = this.findArrayBound(path)\n if (foundBound) {\n analysis.confidence = \"medium\"\n analysis.evidence.push(`Found array check: ${foundBound.evidence}`)\n analysis.bounds!.maxLength = foundBound.value\n }\n\n return analysis\n }\n\n // Number - needs manual configuration\n if (type.kind === \"number\") {\n analysis.confidence = \"low\"\n analysis.suggestions.push(\"Provide min and max values based on your application logic\")\n analysis.bounds!.min = undefined\n analysis.bounds!.max = undefined\n\n // Try to find bounds in code\n const foundBound = this.findNumberBound(path)\n if (foundBound) {\n analysis.confidence = \"high\"\n analysis.evidence.push(`Found comparison: ${foundBound.evidence}`)\n analysis.bounds = { ...analysis.bounds!, ...foundBound.bounds }\n }\n\n return analysis\n }\n\n // String - needs manual configuration\n if (type.kind === \"string\") {\n analysis.confidence = \"low\"\n analysis.suggestions.push(\n 'Provide 2-3 example values: [\"value1\", \"value2\", \"value3\"]',\n \"Or use { abstract: true } for symbolic verification\"\n )\n analysis.bounds!.values = undefined\n return analysis\n }\n\n // Map/Set - needs manual configuration\n if (type.kind === \"map\" || type.kind === \"set\") {\n analysis.confidence = \"low\"\n analysis.suggestions.push(\"Provide maxSize (recommended: 3-5)\")\n analysis.bounds!.maxSize = undefined\n return analysis\n }\n\n return analysis\n }\n\n /**\n * Try to find array bounds by searching for length checks\n */\n private findArrayBound(path: string): { value: number; evidence: string } | null {\n // TODO: Search source code for patterns like:\n // - if (array.length < N)\n // - array.slice(0, N)\n // This would require analyzing the actual usage in code\n return null\n }\n\n /**\n * Try to find number bounds by searching for comparisons\n */\n private findNumberBound(path: string): { bounds: { min?: number; max?: number }; evidence: string } | null {\n // TODO: Search source code for patterns like:\n // - if (counter < 100)\n // - if (value >= 0 && value <= 100)\n // This would require analyzing the actual usage in code\n return null\n }\n}\n\nexport async function analyzeCodebase(options: {\n tsConfigPath: string\n stateFilePath?: string\n}): Promise<CodebaseAnalysis> {\n const extractor = new TypeExtractor(options.tsConfigPath)\n return extractor.analyzeCodebase(options.stateFilePath)\n}\n",
|
|
9
|
+
"// Handler extraction from TypeScript code\n// Extracts message handlers and their state mutations\n\nimport { Project, type SourceFile, SyntaxKind, Node } from \"ts-morph\"\nimport type { MessageHandler, StateAssignment, VerificationCondition } from \"../types\"\n\nexport interface HandlerAnalysis {\n handlers: MessageHandler[]\n messageTypes: Set<string>\n}\n\nexport class HandlerExtractor {\n private project: Project\n\n constructor(tsConfigPath: string) {\n this.project = new Project({\n tsConfigFilePath: tsConfigPath,\n })\n }\n\n /**\n * Extract all message handlers from the codebase\n */\n extractHandlers(): HandlerAnalysis {\n const handlers: MessageHandler[] = []\n const messageTypes = new Set<string>()\n\n // Find all source files\n const sourceFiles = this.project.getSourceFiles()\n\n for (const sourceFile of sourceFiles) {\n const fileHandlers = this.extractFromFile(sourceFile)\n handlers.push(...fileHandlers)\n\n for (const handler of fileHandlers) {\n messageTypes.add(handler.messageType)\n }\n }\n\n return {\n handlers,\n messageTypes,\n }\n }\n\n /**\n * Extract handlers from a single source file\n */\n private extractFromFile(sourceFile: SourceFile): MessageHandler[] {\n const handlers: MessageHandler[] = []\n const filePath = sourceFile.getFilePath()\n\n // Determine context from file path\n const context = this.inferContext(filePath)\n\n // Find all .on() call expressions\n sourceFile.forEachDescendant((node) => {\n if (Node.isCallExpression(node)) {\n const expression = node.getExpression()\n\n // Check if this is a .on() call\n if (Node.isPropertyAccessExpression(expression)) {\n const methodName = expression.getName()\n\n if (methodName === \"on\") {\n const handler = this.extractHandler(node, context, filePath)\n if (handler) {\n handlers.push(handler)\n }\n }\n }\n }\n })\n\n return handlers\n }\n\n /**\n * Extract handler details from a .on() call expression\n */\n private extractHandler(\n callExpr: any,\n context: string,\n filePath: string\n ): MessageHandler | null {\n const args = callExpr.getArguments()\n\n if (args.length < 2) {\n return null\n }\n\n // First argument should be the message type (string literal)\n const messageTypeArg = args[0]\n let messageType: string | null = null\n\n if (Node.isStringLiteral(messageTypeArg)) {\n messageType = messageTypeArg.getLiteralValue()\n } else if (Node.isTemplateExpression(messageTypeArg)) {\n // Handle template literals if needed\n messageType = messageTypeArg.getText().replace(/[`'\"]/g, \"\")\n }\n\n if (!messageType) {\n return null\n }\n\n // Second argument is the handler function\n const handlerArg = args[1]\n const assignments: StateAssignment[] = []\n const preconditions: VerificationCondition[] = []\n const postconditions: VerificationCondition[] = []\n\n // Parse the handler function for state assignments and verification conditions\n if (Node.isArrowFunction(handlerArg) || Node.isFunctionExpression(handlerArg)) {\n this.extractAssignments(handlerArg, assignments)\n this.extractVerificationConditions(handlerArg, preconditions, postconditions)\n }\n\n const line = callExpr.getStartLineNumber()\n\n return {\n messageType,\n node: context, // Renamed from 'context' to 'node' for generalization\n assignments,\n preconditions,\n postconditions,\n location: {\n file: filePath,\n line,\n },\n }\n }\n\n /**\n * Extract state assignments from a handler function\n */\n private extractAssignments(funcNode: any, assignments: StateAssignment[]): void {\n funcNode.forEachDescendant((node: any) => {\n // Look for assignment expressions: state.field = value\n if (Node.isBinaryExpression(node)) {\n const operator = node.getOperatorToken().getText()\n\n if (operator === \"=\") {\n const left = node.getLeft()\n const right = node.getRight()\n\n // Check if left side is a state property access\n if (Node.isPropertyAccessExpression(left)) {\n const fieldPath = this.getPropertyPath(left)\n\n // Check if this is a state access\n if (fieldPath.startsWith(\"state.\")) {\n const field = fieldPath.substring(6) // Remove \"state.\" prefix\n const value = this.extractValue(right)\n\n if (value !== undefined) {\n assignments.push({\n field,\n value,\n })\n }\n }\n }\n }\n }\n })\n }\n\n /**\n * Extract verification conditions (requires/ensures) from a handler function\n */\n private extractVerificationConditions(\n funcNode: any,\n preconditions: VerificationCondition[],\n postconditions: VerificationCondition[]\n ): void {\n const body = funcNode.getBody()\n\n // Get all statements in the function body\n const statements = Node.isBlock(body) ? body.getStatements() : [body]\n\n statements.forEach((statement: any, index: number) => {\n // Look for expression statements that are function calls\n if (Node.isExpressionStatement(statement)) {\n const expr = statement.getExpression()\n\n if (Node.isCallExpression(expr)) {\n const callee = expr.getExpression()\n\n if (Node.isIdentifier(callee)) {\n const functionName = callee.getText()\n\n if (functionName === \"requires\") {\n // Extract precondition\n const condition = this.extractCondition(expr)\n if (condition) {\n preconditions.push(condition)\n }\n } else if (functionName === \"ensures\") {\n // Extract postcondition\n const condition = this.extractCondition(expr)\n if (condition) {\n postconditions.push(condition)\n }\n }\n }\n }\n }\n })\n }\n\n /**\n * Extract condition from a requires() or ensures() call\n */\n private extractCondition(callExpr: any): VerificationCondition | null {\n const args = callExpr.getArguments()\n\n if (args.length === 0) {\n return null\n }\n\n // First argument is the condition expression\n const conditionArg = args[0]\n const expression = conditionArg.getText()\n\n // Second argument (optional) is the message\n let message: string | undefined\n if (args.length >= 2 && Node.isStringLiteral(args[1])) {\n message = args[1].getLiteralValue()\n }\n\n const line = callExpr.getStartLineNumber()\n const column = callExpr.getStartLinePos()\n\n return {\n expression,\n message,\n location: {\n line,\n column,\n },\n }\n }\n\n /**\n * Get the full property access path (e.g., \"state.user.loggedIn\")\n */\n private getPropertyPath(node: any): string {\n const parts: string[] = []\n\n let current = node\n while (Node.isPropertyAccessExpression(current)) {\n parts.unshift(current.getName())\n current = current.getExpression()\n }\n\n // Add the base identifier\n if (Node.isIdentifier(current)) {\n parts.unshift(current.getText())\n }\n\n return parts.join(\".\")\n }\n\n /**\n * Extract a literal value from an expression\n */\n private extractValue(node: any): string | boolean | number | null | undefined {\n if (Node.isStringLiteral(node)) {\n return node.getLiteralValue()\n }\n\n if (Node.isNumericLiteral(node)) {\n return node.getLiteralValue()\n }\n\n if (node.getKind() === SyntaxKind.TrueKeyword) {\n return true\n }\n\n if (node.getKind() === SyntaxKind.FalseKeyword) {\n return false\n }\n\n if (node.getKind() === SyntaxKind.NullKeyword) {\n return null\n }\n\n // For complex expressions, return undefined (can't extract)\n return undefined\n }\n\n /**\n * Infer the context (background, content, popup, etc.) from file path\n */\n private inferContext(filePath: string): string {\n const path = filePath.toLowerCase()\n\n if (path.includes(\"/background/\") || path.includes(\"\\\\background\\\\\")) {\n return \"background\"\n }\n if (path.includes(\"/content/\") || path.includes(\"\\\\content\\\\\")) {\n return \"content\"\n }\n if (path.includes(\"/popup/\") || path.includes(\"\\\\popup\\\\\")) {\n return \"popup\"\n }\n if (path.includes(\"/devtools/\") || path.includes(\"\\\\devtools\\\\\")) {\n return \"devtools\"\n }\n if (path.includes(\"/options/\") || path.includes(\"\\\\options\\\\\")) {\n return \"options\"\n }\n if (path.includes(\"/offscreen/\") || path.includes(\"\\\\offscreen\\\\\")) {\n return \"offscreen\"\n }\n\n return \"unknown\"\n }\n}\n\nexport function extractHandlers(tsConfigPath: string): HandlerAnalysis {\n const extractor = new HandlerExtractor(tsConfigPath)\n return extractor.extractHandlers()\n}\n",
|
|
10
10
|
"// Configuration file generator with smart comments\n\nimport type { FieldAnalysis, CodebaseAnalysis, TypeInfo } from \"../types\";\n\nexport class ConfigGenerator {\n private lines: string[] = [];\n private indent = 0;\n\n generate(analysis: CodebaseAnalysis): string {\n this.lines = [];\n this.indent = 0;\n\n this.addHeader();\n this.addImports();\n this.addExport();\n this.addStateConfig(analysis.fields);\n this.addMessagesConfig();\n this.addBehaviorConfig();\n this.closeExport();\n\n return this.lines.join(\"\\n\");\n }\n\n private addHeader(): void {\n this.line(\"// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\");\n this.line(\"// Verification Configuration\");\n this.line(\"// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\");\n this.line(\"//\");\n this.line(\"// This file configures TLA+ verification for your extension.\");\n this.line(\"// Some values are auto-configured, others need your input.\");\n this.line(\"//\");\n this.line(\"// Look for:\");\n this.line(\"// ⢠/* CONFIGURE */ - Replace with your value\");\n this.line(\"// ⢠/* REVIEW */ - Check the auto-generated value\");\n this.line(\"// ⢠null - Must be replaced with a concrete value\");\n this.line(\"//\");\n this.line(\"// Run 'bun verify' to check for incomplete configuration.\");\n this.line(\"// Run 'bun verify --setup' for interactive help.\");\n this.line(\"//\");\n this.line(\"\");\n }\n\n private addImports(): void {\n this.line(\"import { defineVerification } from '@fairfox/polly/verify'\");\n this.line(\"\");\n }\n\n private addExport(): void {\n this.line(\"export default defineVerification({\");\n this.indent++;\n }\n\n private closeExport(): void {\n this.indent--;\n this.line(\"})\");\n }\n\n private addStateConfig(fields: FieldAnalysis[]): void {\n this.line(\"state: {\");\n this.indent++;\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n\n // Add blank line between fields\n if (i > 0) {\n this.line(\"\");\n }\n\n this.addFieldConfig(field);\n }\n\n this.indent--;\n this.line(\"},\");\n this.line(\"\");\n }\n\n private addFieldConfig(field: FieldAnalysis): void {\n // Generate comment block\n this.addFieldComment(field);\n\n // Generate configuration line\n const config = this.generateFieldConfig(field);\n this.line(`\"${field.path}\": ${config},`);\n }\n\n private addFieldComment(field: FieldAnalysis): void {\n const separator = \"ā\".repeat(60);\n\n // Header\n this.line(`// ${separator}`);\n this.line(`// ${field.path}: ${this.formatTypeName(field.type)}`);\n this.line(`// ${separator}`);\n\n // High confidence: auto-configured\n if (field.confidence === \"high\") {\n this.line(\"// ā Auto-configured from code analysis\");\n if (field.evidence.length > 0) {\n for (const evidence of field.evidence) {\n this.line(`// ${evidence}`);\n }\n }\n this.line(\"//\");\n return;\n }\n\n // Medium confidence: needs review\n if (field.confidence === \"medium\") {\n this.line(\"// ā ļø Please review this auto-generated value\");\n if (field.evidence.length > 0) {\n for (const evidence of field.evidence) {\n this.line(`// Found: ${evidence}`);\n }\n }\n this.line(\"//\");\n this.line(\"// REVIEW: Adjust if needed\");\n this.line(\"//\");\n return;\n }\n\n // Low confidence: manual configuration required\n this.line(\"// ā ļø Manual configuration required\");\n this.line(\"//\");\n\n // Type-specific guidance\n this.addTypeGuidance(field);\n\n // Suggestions\n if (field.suggestions.length > 0) {\n this.line(\"//\");\n for (const suggestion of field.suggestions) {\n this.line(`// ${suggestion}`);\n }\n }\n\n this.line(\"//\");\n this.line(\"// CONFIGURE: Fill in the value below\");\n this.line(\"//\");\n }\n\n private addTypeGuidance(field: FieldAnalysis): void {\n switch (field.type.kind) {\n case \"array\":\n this.line(\"// This array has no bounds in your code. Choose a maximum\");\n this.line(\"// length for verification. Tradeoffs:\");\n this.line(\"// ⢠Small (3-5): Fast, catches basic bugs\");\n this.line(\"// ⢠Medium (10-15): Balanced, catches most bugs\");\n this.line(\"// ⢠Large (20+): Thorough, much slower\");\n break;\n\n case \"string\":\n this.line(\"// Strings need concrete values for precise verification.\");\n this.line(\"// Provide 2-3 representative values from your app.\");\n if (field.type.nullable) {\n this.line(\"//\");\n this.line(\"// Note: This field is nullable (can be null)\");\n }\n this.line(\"//\");\n this.line(\"// Examples:\");\n this.line('// [\"user_abc123\", \"user_xyz789\", \"guest_000\"]');\n this.line('// [\"active\", \"inactive\", \"pending\"]');\n this.line(\"//\");\n this.line(\"// Alternative: Use abstract verification (less precise, faster)\");\n this.line(\"// { abstract: true }\");\n break;\n\n case \"number\":\n this.line(\"// Numbers need a range. Choose min and max values based on\");\n this.line(\"// realistic bounds in your application.\");\n if (field.type.nullable) {\n this.line(\"//\");\n this.line(\"// Note: This field is nullable (can be null)\");\n }\n this.line(\"//\");\n this.line(\"// Examples:\");\n this.line(\"// { min: 0, max: 100 } // Counter\");\n this.line(\"// { min: 0, max: 999999 } // Timestamp\");\n break;\n\n case \"map\":\n case \"set\":\n this.line(`// ${field.type.kind} needs a maximum size. How many entries`);\n this.line(\"// do you need to model to catch bugs?\");\n this.line(\"//\");\n this.line(\"// Recommended: 3-5 for most cases\");\n break;\n\n case \"object\":\n this.line(\"// Complex nested object. Configure each field separately.\");\n break;\n\n default:\n this.line(`// ${field.type.kind} type requires configuration.`);\n }\n }\n\n private generateFieldConfig(field: FieldAnalysis): string {\n switch (field.type.kind) {\n case \"boolean\":\n return \"{ type: 'boolean' }\";\n\n case \"enum\":\n if (field.type.enumValues) {\n const values = field.type.enumValues.map((v) => `\"${v}\"`).join(\", \");\n return `{ type: \"enum\", values: [${values}] }`;\n }\n return \"{ type: 'enum', values: /* CONFIGURE */ null }\";\n\n case \"array\":\n if (field.bounds?.maxLength !== undefined && field.bounds.maxLength !== null) {\n if (field.confidence === \"medium\") {\n return `{ maxLength: /* REVIEW */ ${field.bounds.maxLength} }`;\n }\n return `{ maxLength: ${field.bounds.maxLength} }`;\n }\n return \"{ maxLength: /* CONFIGURE */ null }\";\n\n case \"number\":\n if (field.bounds?.min !== undefined && field.bounds?.max !== undefined) {\n const minStr = field.bounds.min !== null ? field.bounds.min : \"/* CONFIGURE */\";\n const maxStr = field.bounds.max !== null ? field.bounds.max : \"/* CONFIGURE */\";\n\n if (field.confidence === \"high\") {\n return `{ min: ${minStr}, max: ${maxStr} }`;\n }\n return `{ min: /* REVIEW */ ${minStr}, max: /* REVIEW */ ${maxStr} }`;\n }\n return \"{ min: /* CONFIGURE */ null, max: /* CONFIGURE */ null }\";\n\n case \"string\":\n return \"{ values: /* CONFIGURE */ null }\";\n\n case \"map\":\n case \"set\":\n return \"{ maxSize: /* CONFIGURE */ null }\";\n\n default:\n return \"{ /* CONFIGURE */ }\";\n }\n }\n\n private addMessagesConfig(): void {\n this.line(\"messages: {\");\n this.indent++;\n\n this.line(\"// Maximum messages in flight simultaneously across all contexts.\");\n this.line(\"// Higher = more realistic concurrency, but exponentially slower.\");\n this.line(\"//\");\n this.line(\"// Recommended values:\");\n this.line(\"// ⢠2-3: Fast verification (< 10 seconds)\");\n this.line(\"// ⢠4-6: Balanced (10-60 seconds)\");\n this.line(\"// ⢠8+: Thorough but slow (minutes)\");\n this.line(\"//\");\n this.line(\"// WARNING: State space grows exponentially! Start small.\");\n this.line(\"maxInFlight: 3,\");\n this.line(\"\");\n this.line(\"// Maximum tab IDs to model (content scripts are per-tab).\");\n this.line(\"//\");\n this.line(\"// Recommended:\");\n this.line(\"// ⢠0-1: Most extensions (single tab or tab-agnostic)\");\n this.line(\"// ⢠2-3: Multi-tab coordination\");\n this.line(\"//\");\n this.line(\"// Start with 0 or 1 for faster verification.\");\n this.line(\"maxTabs: 1,\");\n\n this.indent--;\n this.line(\"},\");\n this.line(\"\");\n }\n\n private addBehaviorConfig(): void {\n this.line(\"// Verification behavior\");\n this.line(\"// āāāāāāāāāāāāāāāāāāāāā\");\n this.line(\"//\");\n this.line(\"// onBuild: What to do during development builds\");\n this.line(\"// ⢠'warn' - Show warnings but don't fail (recommended)\");\n this.line(\"// ⢠'error' - Fail the build on violations\");\n this.line(\"// ⢠'off' - Skip verification\");\n this.line(\"//\");\n this.line(\"onBuild: 'warn',\");\n this.line(\"\");\n this.line(\"// onRelease: What to do during production builds\");\n this.line(\"// ⢠'error' - Fail the build on violations (recommended)\");\n this.line(\"// ⢠'warn' - Show warnings but don't fail\");\n this.line(\"// ⢠'off' - Skip verification\");\n this.line(\"//\");\n this.line(\"onRelease: 'error',\");\n }\n\n private formatTypeName(type: TypeInfo): string {\n let typeName: string;\n\n switch (type.kind) {\n case \"boolean\":\n typeName = \"boolean\";\n break;\n case \"string\":\n typeName = \"string\";\n break;\n case \"number\":\n typeName = \"number\";\n break;\n case \"enum\":\n if (type.enumValues) {\n typeName = type.enumValues.map((v) => `\"${v}\"`).join(\" | \");\n } else {\n typeName = \"enum\";\n }\n break;\n case \"array\":\n if (type.elementType) {\n typeName = `${this.formatTypeName(type.elementType)}[]`;\n } else {\n typeName = \"array\";\n }\n break;\n case \"object\":\n typeName = \"object\";\n break;\n case \"map\":\n typeName = \"Map\";\n break;\n case \"set\":\n typeName = \"Set\";\n break;\n case \"null\":\n typeName = \"null\";\n break;\n default:\n typeName = \"unknown\";\n }\n\n // Append \" | null\" if type is nullable\n if (type.nullable && type.kind !== \"null\") {\n typeName += \" | null\";\n }\n\n return typeName;\n }\n\n private line(content: string): void {\n if (content === \"\") {\n this.lines.push(\"\");\n } else {\n const indentation = \" \".repeat(this.indent);\n this.lines.push(indentation + content);\n }\n }\n}\n\nexport function generateConfig(analysis: CodebaseAnalysis): string {\n const generator = new ConfigGenerator();\n return generator.generate(analysis);\n}\n",
|
|
11
11
|
"// Configuration validator - detects incomplete configuration\n\nimport type { ValidationResult, ConfigIssue, VerificationConfig } from \"../types\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nexport class ConfigValidator {\n private issues: ConfigIssue[] = [];\n\n validate(configPath: string): ValidationResult {\n this.issues = [];\n\n if (!fs.existsSync(configPath)) {\n this.issues.push({\n type: \"incomplete\",\n severity: \"error\",\n message: \"Configuration file does not exist\",\n suggestion: \"Run 'bun verify --setup' to generate configuration\",\n });\n\n return {\n valid: false,\n issues: this.issues,\n };\n }\n\n // Read the source file\n const configSource = fs.readFileSync(configPath, \"utf-8\");\n\n // Check for CONFIGURE markers\n this.checkConfigureMarkers(configSource);\n\n // Check for REVIEW markers (warnings only)\n this.checkReviewMarkers(configSource);\n\n // Load and validate the actual config\n try {\n const config = this.loadConfig(configPath);\n this.validateConfig(config);\n } catch (error) {\n this.issues.push({\n type: \"invalid_value\",\n severity: \"error\",\n message: `Failed to load configuration: ${error instanceof Error ? error.message : String(error)}`,\n suggestion: \"Check for syntax errors in the configuration file\",\n });\n }\n\n const hasErrors = this.issues.some((i) => i.severity === \"error\");\n\n return {\n valid: !hasErrors,\n issues: this.issues,\n };\n }\n\n private checkConfigureMarkers(source: string): void {\n const configureRegex = /\\/\\*\\s*CONFIGURE\\s*\\*\\//g;\n const matches = [...source.matchAll(configureRegex)];\n\n if (matches.length > 0) {\n // Find line numbers for each match\n const lines = source.split(\"\\n\");\n const locations: Array<{ line: number; column: number; context: string }> = [];\n\n for (const match of matches) {\n const position = match.index!;\n const lineNumber = source.substring(0, position).split(\"\\n\").length;\n const line = lines[lineNumber - 1];\n\n // Extract field name from context\n const fieldMatch = line.match(/\"([^\"]+)\":\\s*{/);\n const fieldName = fieldMatch ? fieldMatch[1] : \"unknown\";\n\n locations.push({\n line: lineNumber,\n column: match.index! - source.lastIndexOf(\"\\n\", position),\n context: fieldName,\n });\n }\n\n this.issues.push({\n type: \"incomplete\",\n severity: \"error\",\n message: `Found ${matches.length} incomplete configuration marker(s)`,\n suggestion: \"Replace all /* CONFIGURE */ markers with actual values\",\n });\n\n // Add individual issues for each marker\n for (const loc of locations) {\n this.issues.push({\n type: \"incomplete\",\n severity: \"error\",\n field: loc.context,\n location: { line: loc.line, column: loc.column },\n message: `Incomplete configuration at line ${loc.line}`,\n suggestion: `Fill in value for \"${loc.context}\"`,\n });\n }\n }\n }\n\n private checkReviewMarkers(source: string): void {\n const reviewRegex = /\\/\\*\\s*REVIEW\\s*\\*\\//g;\n const matches = [...source.matchAll(reviewRegex)];\n\n if (matches.length > 0) {\n this.issues.push({\n type: \"incomplete\",\n severity: \"warning\",\n message: `Found ${matches.length} value(s) that should be reviewed`,\n suggestion: \"Review auto-generated values marked with /* REVIEW */\",\n });\n }\n }\n\n private loadConfig(configPath: string): VerificationConfig {\n // Dynamic import of the config file\n // Note: In production, this would use proper module loading\n delete require.cache[require.resolve(path.resolve(configPath))];\n const module = require(path.resolve(configPath));\n return module.default || module;\n }\n\n private validateConfig(config: VerificationConfig): void {\n // Check for null values\n this.findNullPlaceholders(config.state, \"state\");\n this.findNullPlaceholders(config.messages, \"messages\");\n\n // Validate bounds\n this.validateBounds(config);\n }\n\n private findNullPlaceholders(obj: any, path: string): void {\n if (obj === null || obj === undefined) {\n this.issues.push({\n type: \"null_placeholder\",\n severity: \"error\",\n field: path,\n message: `Configuration incomplete: ${path}`,\n suggestion: \"Replace null with a concrete value\",\n });\n return;\n }\n\n if (typeof obj !== \"object\") {\n return;\n }\n\n for (const [key, value] of Object.entries(obj)) {\n const fullPath = `${path}.${key}`;\n\n if (value === null) {\n this.issues.push({\n type: \"null_placeholder\",\n severity: \"error\",\n field: fullPath,\n message: `Configuration incomplete: ${fullPath}`,\n suggestion: \"Replace null with a concrete value\",\n });\n } else if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n this.findNullPlaceholders(value, fullPath);\n }\n }\n }\n\n private validateBounds(config: VerificationConfig): void {\n // Check messages config\n if (config.messages.maxInFlight !== null) {\n if (config.messages.maxInFlight < 1) {\n this.issues.push({\n type: \"invalid_value\",\n severity: \"error\",\n field: \"messages.maxInFlight\",\n message: \"maxInFlight must be at least 1\",\n suggestion: \"Use a value between 4-10 for most cases\",\n });\n }\n\n if (config.messages.maxInFlight > 20) {\n this.issues.push({\n type: \"unrealistic_bound\",\n severity: \"warning\",\n field: \"messages.maxInFlight\",\n message: \"Very high maxInFlight (>20) will slow verification significantly\",\n suggestion: \"Use 4-10 for development, up to 20 for thorough verification\",\n });\n }\n }\n\n if (config.messages.maxTabs !== null) {\n if (config.messages.maxTabs < 1) {\n this.issues.push({\n type: \"invalid_value\",\n severity: \"error\",\n field: \"messages.maxTabs\",\n message: \"maxTabs must be at least 1\",\n suggestion: \"Use 2-3 for most cases\",\n });\n }\n\n if (config.messages.maxTabs > 10) {\n this.issues.push({\n type: \"unrealistic_bound\",\n severity: \"warning\",\n field: \"messages.maxTabs\",\n message: \"Very high maxTabs (>10) will slow verification significantly\",\n suggestion: \"Use 2-3 for most cases\",\n });\n }\n }\n\n // Check state field bounds\n for (const [fieldName, fieldConfig] of Object.entries(config.state)) {\n if (typeof fieldConfig !== \"object\" || fieldConfig === null) {\n continue;\n }\n\n // Array bounds\n if (\"maxLength\" in fieldConfig) {\n const maxLength = (fieldConfig as any).maxLength;\n if (maxLength !== null) {\n if (maxLength < 0) {\n this.issues.push({\n type: \"invalid_value\",\n severity: \"error\",\n field: `state.${fieldName}.maxLength`,\n message: \"maxLength cannot be negative\",\n suggestion: \"Use a positive number\",\n });\n }\n\n if (maxLength > 50) {\n this.issues.push({\n type: \"unrealistic_bound\",\n severity: \"warning\",\n field: `state.${fieldName}.maxLength`,\n message: `Very large maxLength (${maxLength}) will slow verification`,\n suggestion: \"Use 10-20 for most cases\",\n });\n }\n }\n }\n\n // Number bounds\n if (\"min\" in fieldConfig && \"max\" in fieldConfig) {\n const min = (fieldConfig as any).min;\n const max = (fieldConfig as any).max;\n\n if (min !== null && max !== null && min > max) {\n this.issues.push({\n type: \"invalid_value\",\n severity: \"error\",\n field: `state.${fieldName}`,\n message: `Invalid range: min (${min}) > max (${max})`,\n suggestion: \"Ensure min is less than or equal to max\",\n });\n }\n\n if (min !== null && max !== null && max - min > 1000) {\n this.issues.push({\n type: \"unrealistic_bound\",\n severity: \"warning\",\n field: `state.${fieldName}`,\n message: `Very large number range (${max - min}) will slow verification`,\n suggestion: \"Use smaller ranges when possible\",\n });\n }\n }\n\n // Map/Set bounds\n if (\"maxSize\" in fieldConfig) {\n const maxSize = (fieldConfig as any).maxSize;\n if (maxSize !== null) {\n if (maxSize < 0) {\n this.issues.push({\n type: \"invalid_value\",\n severity: \"error\",\n field: `state.${fieldName}.maxSize`,\n message: \"maxSize cannot be negative\",\n suggestion: \"Use a positive number\",\n });\n }\n\n if (maxSize > 20) {\n this.issues.push({\n type: \"unrealistic_bound\",\n severity: \"warning\",\n field: `state.${fieldName}.maxSize`,\n message: `Very large maxSize (${maxSize}) will slow verification`,\n suggestion: \"Use 3-5 for most cases\",\n });\n }\n }\n }\n }\n }\n}\n\nexport function validateConfig(configPath: string): ValidationResult {\n const validator = new ConfigValidator();\n return validator.validate(configPath);\n}\n"
|
|
12
12
|
],
|
|
13
|
-
"mappings": "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",
|
|
14
|
-
"debugId": "
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "F6E692DF29A2A67064756E2164756E21",
|
|
15
15
|
"names": []
|
|
16
16
|
}
|