Heavy-Tools / app.py
lexicalspace's picture
Update app.py
7717949 verified
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()