# cti-expert — unified skill dependencies (broad collector + vendored intel_engine pipeline).
#
# The COLLECTION layer (scripts/webpivot/*, scripts/*.py) and the KB/correlation/case tools
# (tools/kb/*, tools/*.py, tools/intel.py deterministic pipeline) are STDLIB-ONLY — they run with
# no installs. These deps unlock the deeper layers:
#
#   harness/orchestrator.py, harness/mcp_server.py  — the LLM-driven pipeline + typed MCP server
#   IntelGraph/scripts/*                            — publication-quality charts / network graphs
#
# Install:  uv venv && uv pip install -r requirements.txt
# System tools (not pip): pandoc + xelatex (IntelReport PDF), graphviz `dot` (IntelGraph),
#   Node.js 20+ or Bun for Pele (IntelGraph Mermaid figures) and librsvg `rsvg-convert` to rasterise them
#   — see the per-skill requirements.txt for each.

# --- pipeline brain (harness) ---
claude-agent-sdk>=0.1.0     # LLM-driven Collect→Correlate→Assess orchestrator + MCP server
pydantic>=2.0              # typed schemas for the harness
rich>=13.0                # harness console output

# --- deliver / visualize (IntelGraph) ---
matplotlib>=3.7           # charts, timelines, gantt (theme.py house style)
cairosvg>=2.7             # rasterizes the Diagram Design entity map into the house PDF/DOCX; last-resort Mermaid (Pele) rasteriser
numpy>=1.24               # heatmap / confidence-scatter grids (cti_report_figures.py)
graphviz>=0.20            # entity/infrastructure link graphs (also needs the `dot` binary)

# --- collector extras (light; close silent-degrade paths) ---
openpyxl>=3.1             # .xlsx master evidence ledger (else CSV-only fallback)
pyzbar>=0.1.9            # QR decode for /webpivot --decode-qr (needs system libzbar0/zbar)
pillow>=10.0             # image handling for the pyzbar QR path
psycopg[binary]>=3.1     # crt.sh public PostgreSQL fallback (wp_ct) when the crt.sh web front end is
                         # down; absent → that fallback is skipped with a status note, never an error

# --- authentication surface (Engage) — OPTIONAL, and deliberately not pinned above ---
# Engage's detection half (en_forms) is stdlib+requests and needs nothing extra. Driving a real
# browser to register/log in on a synthetic persona needs Playwright; without it en_engage falls
# back to a manual runbook rather than failing, so this stays opt-in:
#   uv pip install playwright && playwright install chromium

# --- egress proxy / rotation (/proxy) — OPTIONAL ---
# HTTP/HTTPS proxies work with the stdlib and need nothing. SOCKS proxies
# (socks5://, socks5h://) need PySocks; `/proxy add socks5://…` auto-installs it,
# or do it yourself:  uv pip install pysocks
# pysocks>=1.7            # only for SOCKS proxies
