"""Reports tab: nightly research notes, committee memo, and PDFs per trade date.""" from __future__ import annotations import streamlit as st from web.views.common import S def render() -> None: rdir = S.reports_dir rdates = ( sorted((p.name for p in rdir.iterdir() if p.is_dir()), reverse=True) if rdir.exists() else [] ) if not rdates: st.info("No reports yet — generated during the nightly run (state/reports/).") return rdate = st.selectbox("Report date", rdates, key="rdate") ddir = rdir / rdate # daily.md first, then each agent mds = sorted(ddir.glob("*.md"), key=lambda p: (p.name != "daily.md", p.name)) for md in mds: st.markdown(md.read_text()) pdf = md.with_suffix(".pdf") if pdf.exists(): st.download_button( f"⬇ Download {pdf.name}", pdf.read_bytes(), file_name=pdf.name, mime="application/pdf", key=f"dl_{md.stem}", ) for png in sorted(ddir.glob(f"{md.stem}_*.png")): st.image(str(png)) st.divider()