jonashertner/opencaselaw
Open Swiss legal corpus + MCP server: 1M+ court decisions (1875–today), 21k laws, 10M-edge citation graph, 42 MCP tools. CC0 data, MIT code. Live at mcp.opencaselaw.ch
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
tools
-
analyze_legal_trend
Year-by-year decision counts for a statute or topic
-
browse_legislation_changes
Recent-changes feed per canton or federal level (live LexFind API, no local mirror)
-
check_update_status
Check progress of a running database update *(local only)*
-
draft_mock_decision
Build a research-only mock decision outline from facts, grounded in caselaw + statute references; asks clarification questions before conclusion
-
find_appeal_chain
Trace the appeal chain (Instanzenzug) — prior and subsequent instances
-
find_citations
Show what a decision cites and what cites it, with confidence scores
-
find_leading_cases
Find the most-cited decisions for a topic or statute
-
generate_exam_question
Legal topic → real BGE fact pattern with hidden analysis for Fallbearbeitung practice
-
get_case_brief
Structured brief for any case — regeste, key Erwägungen, cited statutes, and citation authority
-
get_commentary
Scholarly commentary for a specific federal law article from OnlineKommentar.ch (CC-BY-4.0)
-
get_decision
Fetch a single decision by docket number or ID. Includes citation graph counts (cited by / cites).
-
get_doctrine
Statute article or legal concept → ranked leading cases + doctrine timeline
-
get_law
Look up a federal or cantonal Swiss law by SR number / abbreviation + optional canton. Returns full article text from the local mirror (Fedlex for federal; cantonal_laws.db for cantonal — direct porta
-
get_legislation
Full metadata + article text for any federal or cantonal law. Local-first (statutes.db → cantonal_laws.db → LexFind API fallback)
-
get_statistics
Aggregate stats by court, canton, or year
-
list_courts
List all courts with decision counts
-
search_commentaries
Full-text search across 362 legal commentaries from OnlineKommentar.ch across 19 federal laws
-
search_decisions
Full-text search with filters (court, canton, language, date range, chamber)
-
search_laws
Unified federal + cantonal FTS5 search with BM25 rank interleaving. Filter by canton= for a specific jurisdiction, or jurisdiction='federal' / 'cantonal'
-
search_legislation
LexFind-backed discovery search across federal + cantonal legislation. fetch_top_n_texts=N enriches the top N results with full article text in a single call
-
update_database
Re-download latest Parquet files from HuggingFace and rebuild the local database *(local only)*
analyzed commit d5432e8 · analyzer v33 · 3h ago
skills & prompt files 6
- skill jonashertner-opencaselaw-d5432e8/.agents/skills/opencaselaw-maintenance/SKILL.md
- agent-rules jonashertner-opencaselaw-d5432e8/AGENTS.md
- agent-rules jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/AGENTS.md
- skill jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/skills/citation-check/SKILL.md
- skill jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/skills/evidence-bundle/SKILL.md
- skill jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/skills/research/SKILL.md
danger signals4
- dynamic code execution eval()/exec() jonashertner-opencaselaw-d5432e8/tests/test_ip_pseudonym_ledger.py :37
exec(src[start:end], ns) - dynamic code execution eval()/exec() jonashertner-opencaselaw-d5432e8/tests/test_sanitize_fts5_syntax_chars.py :34
exec(src[start:end], ns) - dynamic code execution __import__() jonashertner-opencaselaw-d5432e8/tests/test_zg_gvp_scraper.py :252
__import__(mod) - credential in logs credential in log jonashertner-opencaselaw-d5432e8/stripe_billing.py :586
logger.info("score_supporting_results: key=%s results=%d", bool(api_key), len(results))
code files: 908
filesystem 359
- fs jonashertner-opencaselaw-d5432e8/audit_bge_decision_dates.py :44
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/audit_entscheidsuche_dependence.py :29
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/backfill_bger_docket_collisions.py :40
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/backfill_bstger_urls.py :40
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/backfill_canonical_identity.py :21
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/backfill_ge_ocr.py :61
with open(dest, "wb") as fh: - fs jonashertner-opencaselaw-d5432e8/backfill_ne_fiche_collisions.py :31
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/base_scraper.py :24
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/build_canonical_top_statutes.py :40
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/citation_precision_audit.py :55
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/citation_precision_audit_rules.py :52
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/citation_precision_audit_tui.py :40
from pathlib import Path
show 28 more
- fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/citation_precision_proxies.py :40
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/citation_roundtrip.py :24
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/cli_vs_http.py :20
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/generate_golden_queries.py :15
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/pinpoint_regeste_bench.py :37
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/run_citation_eval.py :19
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/run_cross_lingual.py :23
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/run_hallucination_probe.py :28
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/run_search_benchmark.py :21
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/score_baseline.py :22
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/swiss_legal_rag_bench/build_it_target_candidates.py :38
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/swiss_legal_rag_bench/evaluate.py :35
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/benchmarks/swiss_legal_rag_bench/statistical_analysis.py :25
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/build_fts5.py :33
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/clients/python/installer/build_tree.py :24
import shutil - fs (weak) jonashertner-opencaselaw-d5432e8/clients/python/installer/smoke/make_fixture.py :14
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/cli.py :12
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/client.py :16
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/documents.py :16
import shutil - fs jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/local.py :35
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/render.py :12
import shutil - fs jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/report.py :18
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/statutes.py :22
from pathlib import Path - fs jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/workflows.py :17
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_agent_layer.py :4
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_check_document.py :4
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_check_submissions.py :3
from pathlib import Path - fs (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_installer_smoke_fixture.py :10
from pathlib import Path
319 more not shown — this panel samples each group; the count above is the real total.
shell / exec 62
- shell jonashertner-opencaselaw-d5432e8/audit_bge_decision_dates.py :41
import subprocess - shell jonashertner-opencaselaw-d5432e8/backfill_ge_ocr.py :32
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/benchmarks/citation_roundtrip.py :20
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/benchmarks/cli_vs_http.py :14
import subprocess - shell jonashertner-opencaselaw-d5432e8/build_fts5.py :201
import subprocess - shell jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/documents.py :17
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_installer_smoke_fixture.py :8
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_installer_tree.py :9
import subprocess - shell jonashertner-opencaselaw-d5432e8/generate_stats.py :1636
import subprocess - shell jonashertner-opencaselaw-d5432e8/mcp_server.py :21014
import subprocess - shell jonashertner-opencaselaw-d5432e8/publish.py :39
import subprocess - shell jonashertner-opencaselaw-d5432e8/run_all_scrapers.py :39
import subprocess
show 28 more
- shell jonashertner-opencaselaw-d5432e8/run_scraper.py :933
# subprocess.run() with stderr=DEVNULL hides bare tracebacks otherwise, - shell jonashertner-opencaselaw-d5432e8/scrapers/bge_historical.py :25
import subprocess - shell jonashertner-opencaselaw-d5432e8/scrapers/entscheidsuche_ingest.py :31
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/agent_assess.py :14
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/agent_record.py :7
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/agent_safe_deploy.py :12
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/bger_poller.py :33
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/build_integrity_root.py :25
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/build_paper_release_bundle.py :23
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/check_output_freshness.py :32
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/check_scraper_freshness.py :37
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/citation_anomaly_report.py :32
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/cli_live_check.py :13
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/collect_dev_data.py :41
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/court_by_court_audit.py :9
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/cut_paper_release.py :12
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/debug_suite.py :18
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/disk_monitor.py :29
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/dispatch_health_alerts.py :27
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/generate_release_manifest.py :24
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/incremental_nightly.py :50
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/ocr_short_text.py :23
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/ops_dashboard_snapshot.py :33
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/post_publish_health_check.py :22
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/release_comparison.py :23
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/repair_short_text.py :30
import subprocess - shell (weak) jonashertner-opencaselaw-d5432e8/scripts/run_release_matched_benchmark.py :19
import subprocess - shell jonashertner-opencaselaw-d5432e8/search_stack/publish_delta.py :38
import subprocess as _subprocess
22 more not shown — this panel samples each group; the count above is the real total.
network 164
- net jonashertner-opencaselaw-d5432e8/audit_source_urls.py :22
from urllib.parse import urlparse - net jonashertner-opencaselaw-d5432e8/backfill_bstger_urls.py :109
import urllib.request - net jonashertner-opencaselaw-d5432e8/backfill_ge_ocr.py :36
import urllib.request - net jonashertner-opencaselaw-d5432e8/base_scraper.py :26
from urllib.parse import urlsplit, urlunsplit - net (weak) jonashertner-opencaselaw-d5432e8/benchmarks/cli_vs_http.py :18
import urllib.parse - net (weak) jonashertner-opencaselaw-d5432e8/benchmarks/copilot_openapi_validation.py :49
import urllib.request - net (weak) jonashertner-opencaselaw-d5432e8/benchmarks/run_hallucination_probe.py :30
import httpx - net (weak) jonashertner-opencaselaw-d5432e8/benchmarks/run_stress_test.py :17
import httpx - net (weak) jonashertner-opencaselaw-d5432e8/benchmarks/swiss_legal_rag_bench/evaluate.py :74
import httpx - net jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/cli.py :13
from urllib.parse import quote - net jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/client.py :17
from urllib.error import HTTPError, URLError - net jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/local.py :36
from urllib.error import HTTPError, URLError
show 28 more
- net jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/report.py :19
from urllib.parse import quote - net jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/statutes.py :168
from urllib.parse import quote - net jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/workflows.py :18
from urllib.parse import quote - net (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_agent_layer.py :174
from urllib.error import HTTPError - net (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_client.py :3
from urllib.error import HTTPError, URLError - net (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_statutes_check.py :3
import socket - net (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_workflows.py :5
from urllib.parse import quote - net jonashertner-opencaselaw-d5432e8/decision_ref.py :45
from urllib.parse import unquote - net (weak) jonashertner-opencaselaw-d5432e8/docs/paper/v2/experiments/01_run_ablation.py :42
import httpx - net jonashertner-opencaselaw-d5432e8/generate_feeds.py :54
import urllib.parse - net jonashertner-opencaselaw-d5432e8/generate_stats.py :526
import requests - net jonashertner-opencaselaw-d5432e8/incapsula_bypass.py :632
import requests as req - net jonashertner-opencaselaw-d5432e8/mcp_server.py :91
import urllib.parse - net jonashertner-opencaselaw-d5432e8/publish.py :37
import urllib.request - net jonashertner-opencaselaw-d5432e8/quality/checks/urls.py :126
using `requests.get(url)` without explicit encoding will fail. - net jonashertner-opencaselaw-d5432e8/quality/smoke.py :35
import urllib.error - net jonashertner-opencaselaw-d5432e8/run_all_scrapers.py :107
import socket - net jonashertner-opencaselaw-d5432e8/scrapers/bazg.py :32
from urllib.parse import urljoin - net jonashertner-opencaselaw-d5432e8/scrapers/bge.py :41
import requests - net jonashertner-opencaselaw-d5432e8/scrapers/bge_historical.py :28
from urllib.parse import urljoin, urlsplit - net jonashertner-opencaselaw-d5432e8/scrapers/bger.py :51
from urllib.parse import urljoin - net jonashertner-opencaselaw-d5432e8/scrapers/cantonal/base_tribuna.py :36
from urllib.parse import quote - net jonashertner-opencaselaw-d5432e8/scrapers/cantonal/be_direktionen.py :23
from urllib.parse import urljoin - net jonashertner-opencaselaw-d5432e8/scrapers/cantonal/bs_rekurskommissionen.py :24
from urllib.parse import urljoin - net jonashertner-opencaselaw-d5432e8/scrapers/cantonal/fr_anwaltsaufsicht.py :18
from urllib.parse import urljoin, urlparse - net jonashertner-opencaselaw-d5432e8/scrapers/cantonal/sg_publikationen.py :30
from urllib.parse import urljoin - net jonashertner-opencaselaw-d5432e8/scrapers/cantonal/tg_anwaltskommission.py :18
from urllib.parse import urljoin, urlparse - net jonashertner-opencaselaw-d5432e8/scrapers/cantonal/tg_gerichte.py :35
from urllib.parse import urljoin
124 more not shown — this panel samples each group; the count above is the real total.
secrets 14
- secrets (weak) jonashertner-opencaselaw-d5432e8/benchmarks/swiss_legal_rag_bench/evaluate.py :155
api_key = api_key or os.environ.get("ANTHROPIC_API_KEY") - secrets (weak) jonashertner-opencaselaw-d5432e8/docs/paper/v2/experiments/01_run_ablation.py :66
ANTHROPIC_API_KEY = os.environ.get("ANTHROPIC_API_KEY") - secrets jonashertner-opencaselaw-d5432e8/mcp_server.py :353
secret = os.environ.get("OCL_IP_PSEUDONYM_SECRET") or _IP_PSEUDONYM_FALLBACK_SALT - secrets jonashertner-opencaselaw-d5432e8/pipeline.py :153
token = token or os.environ.get("HF_TOKEN") - secrets jonashertner-opencaselaw-d5432e8/quality/checks/llm_spot_check.py :69
if not os.environ.get("ANTHROPIC_API_KEY"): - secrets (weak) jonashertner-opencaselaw-d5432e8/scripts/citation_anomaly_report.py :49
DEPLOY_KEY = os.environ.get("OCL_ANOMALY_DEPLOY_KEY", - secrets (weak) jonashertner-opencaselaw-d5432e8/scripts/run_release_matched_benchmark.py :94
"anthropic_api_configured": bool(os.environ.get("ANTHROPIC_API_KEY")), - secrets jonashertner-opencaselaw-d5432e8/stripe_billing.py :31
STRIPE_SECRET_KEY = os.environ.get("STRIPE_SECRET_KEY", "") - secrets jonashertner-opencaselaw-d5432e8/study/enrich_curriculum.py :214
api_key = os.environ.get("ANTHROPIC_API_KEY", "") - secrets jonashertner-opencaselaw-d5432e8/test_llm_expansion.py :166
if not os.environ.get("ANTHROPIC_API_KEY"): - secrets jonashertner-opencaselaw-d5432e8/upload_legislation_hf.py :30
tok = os.environ.get("HF_TOKEN") - secrets jonashertner-opencaselaw-d5432e8/web_api/providers/anthropic_adapter.py :16
self.client = anthropic.AsyncAnthropic(api_key=os.environ.get("ANTHROPIC_API_KEY"))
show 2 more
- secrets jonashertner-opencaselaw-d5432e8/web_api/providers/gemini_adapter.py :14
self.client = genai.Client(api_key=os.environ.get("GEMINI_API_KEY")) - secrets jonashertner-opencaselaw-d5432e8/web_api/providers/openai_adapter.py :14
self.client = AsyncOpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
database 284
- db jonashertner-opencaselaw-d5432e8/audit_bge_decision_dates.py :40
import sqlite3 - db jonashertner-opencaselaw-d5432e8/audit_source_urls.py :20
import sqlite3 - db jonashertner-opencaselaw-d5432e8/backfill_bger_chambers.py :45
import sqlite3 - db jonashertner-opencaselaw-d5432e8/backfill_bvger_chambers.py :52
import sqlite3 - db jonashertner-opencaselaw-d5432e8/backfill_canonical_identity.py :18
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/benchmarks/build_canonical_top_statutes.py :38
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/benchmarks/citation_precision_audit.py :53
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/benchmarks/citation_precision_proxies.py :37
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/benchmarks/citation_resolution_analysis.py :34
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/benchmarks/generate_golden_queries.py :14
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/benchmarks/pinpoint_regeste_bench.py :33
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/benchmarks/run_citation_eval.py :16
import sqlite3
show 28 more
- db (weak) jonashertner-opencaselaw-d5432e8/benchmarks/run_cross_lingual.py :19
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/benchmarks/run_search_benchmark.py :17
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/benchmarks/swiss_legal_rag_bench/build_it_target_candidates.py :36
import sqlite3 - db jonashertner-opencaselaw-d5432e8/build_fts5.py :29
import sqlite3 - db jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/cli.py :1031
import sqlite3 - db jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/local.py :29
import sqlite3 - db jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/statutes.py :20
import sqlite3 - db jonashertner-opencaselaw-d5432e8/clients/python/src/opencaselaw_cli/workflows.py :13
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_local_pack.py :7
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_offline_check.py :7
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_pack_integrity.py :12
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_report_honesty.py :7
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/clients/python/tests/test_statutes_check.py :4
import sqlite3 - db jonashertner-opencaselaw-d5432e8/coverage_report.py :16
import sqlite3 - db (weak) jonashertner-opencaselaw-d5432e8/docs/paper/v3/scripts/refresh_graph_stats.py :28
import sqlite3 - db jonashertner-opencaselaw-d5432e8/export_legislation.py :18
import sqlite3 - db jonashertner-opencaselaw-d5432e8/export_parquet.py :21
import sqlite3 - db jonashertner-opencaselaw-d5432e8/fts5_server.py :21
import sqlite3 - db jonashertner-opencaselaw-d5432e8/generate_feeds.py :52
import sqlite3 - db jonashertner-opencaselaw-d5432e8/generate_stats.py :19
import sqlite3 - db jonashertner-opencaselaw-d5432e8/health_metrics.py :21
import sqlite3 - db jonashertner-opencaselaw-d5432e8/mcp_server.py :86
import sqlite3 - db jonashertner-opencaselaw-d5432e8/pipeline.py :264
import sqlite3 - db jonashertner-opencaselaw-d5432e8/publish.py :673
import sqlite3 - db jonashertner-opencaselaw-d5432e8/quality/baseline.py :10
import sqlite3 - db jonashertner-opencaselaw-d5432e8/quality/checks/_common.py :4
import sqlite3 - db jonashertner-opencaselaw-d5432e8/quality/checks/citation_anomalies.py :51
import sqlite3 - db jonashertner-opencaselaw-d5432e8/quality/checks/citation_graph.py :10
import sqlite3
244 more not shown — this panel samples each group; the count above is the real total.
declared dependencies 26
- mcp@>=1.28.1,<2
- requests@>=2.31
- beautifulsoup4@>=4.12
- lxml@>=4.9
- playwright@>=1.58.0
- pydantic@>=2.0
- pyarrow@>=14.0
- huggingface-hub@>=0.20
- zstandard@>=0.22
- pycryptodome@>=3.20
- pymupdf@>=1.27.2.2
- pdfplumber@>=0.11
show 14 more
- fastapi@>=0.104
- uvicorn@>=0.24
- python-dotenv@>=1.0
- anthropic@>=0.40
- google-genai@>=0.3
- openai@>=1.40
- sentence-transformers@>=3.0
- sqlite-vec@>=0.1.6
- onnxruntime@>=1.24.3
- pytest@>=9.0.3
- pytest-asyncio@>=1.3.0
- ruff@>=0.1
- openapi-spec-validator@>=0.7
- swiss-caselaw-scrapers@*