github Python analyzed d5432e8 deep scan · partial (256/1,714 files)

jonashertner/opencaselaw

github

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

maintainer
jonashertner
licence
MIT
first seen
2026-08-10
last seen
2026-09-18
releases · 30d
11
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 21 tools
transport stdio · streamable-http · http · sse counts 21 tools · 0 res · 0 prompts permission surface via README inference

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)*

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit d5432e8 · analyzer v33 · 3h ago

skills & prompt files 6

danger signals4

code evidence vcli-v0.9.1 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

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@*