import gradio as gr from phases.phase1_ingest import ingest from phases.phase2_rules import load_rules from phases.phase3_static import static_scan from phases.phase4_runtime import runtime_risks from ci_guard import run_ci with gr.Blocks(title="SpecGuard AI Lab", theme=gr.themes.Soft()) as app: gr.Markdown("## ๐Ÿง  SpecGuard AI Lab") gr.Markdown("Rulebook โ†” Code Deep Research & Verification System") # โ”€โ”€ Sidebar โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ with gr.Sidebar(): rulebook_input = gr.Textbox( label="๐Ÿ“˜ Rulebook (paste)", lines=12, placeholder="Paste specification or rulebook text here" ) code_zip = gr.File(label="๐Ÿ“ฆ Source Code (ZIP)") ci_mode = gr.Checkbox( label="๐Ÿงช CI Mode (Fail on CRITICAL)", value=False ) run_btn = gr.Button("๐Ÿš€ Start Deep Research", variant="primary") # โ”€โ”€ Outputs โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ status = gr.Markdown() output = gr.Markdown() # โ”€โ”€ Core runner โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ def run_all(rulebook, zipfile, ci): ingest(rulebook, zipfile) rules = load_rules() findings = static_scan(rules) risks = runtime_risks() # CI enforcement if ci: try: run_ci() except SystemExit: return ( "โŒ CI FAILED", "Critical rule violation detected. Fix CRITICAL issues to proceed." ) # Build report (THIS is where f-strings belong) report = f""" ### โœ… Research Complete - **Rules Loaded:** {len(rules.get("rules", []))} - **Static Findings:** {len(findings)} - **Runtime Risks Identified:** {len(risks)} ๐Ÿ“ Artifacts saved in `/artifacts/` """ return "โœ… Done", report # โ”€โ”€ Button binding โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ run_btn.click( run_all, inputs=[rulebook_input, code_zip, ci_mode], outputs=[status, output] ) if __name__ == "__main__": app.launch()