from __future__ import annotations import os, yaml from pathlib import Path from .provenance import ROOT, expand def load(name: str) -> dict: with open(ROOT / "config" / f"{name}.yaml") as f: return yaml.safe_load(f) def corpus_root() -> Path: env = os.environ.get("JOF250_CORPUS_ROOT") return expand(env or load("corpus")["corpus_root"]) def derived_dir() -> Path: d = ROOT / load("corpus")["derived_dir"]; d.mkdir(parents=True, exist_ok=True); return d def manifests_dir() -> Path: d = ROOT / load("corpus")["manifests_dir"]; d.mkdir(parents=True, exist_ok=True); return d def api_key() -> str | None: """Read key from env or from a key file (never printed).""" if os.environ.get("ANTHROPIC_API_KEY"): return os.environ["ANTHROPIC_API_KEY"] env_file = ROOT / ".env" kf = os.environ.get("JOF250_ANTHROPIC_KEY_FILE") if env_file.exists(): for line in env_file.read_text().splitlines(): if line.startswith("JOF250_ANTHROPIC_KEY_FILE="): kf = line.split("=",1)[1].strip() if line.startswith("ANTHROPIC_API_KEY="): return line.split("=",1)[1].strip() if kf and expand(kf).exists(): for line in expand(kf).read_text().splitlines(): if line.startswith("ANTHROPIC_API_KEY="): return line.split("=",1)[1].strip() return None