diff --git a/mcp-server/src/legal_mcp/services/db.py b/mcp-server/src/legal_mcp/services/db.py index 71adb4c..d531962 100644 --- a/mcp-server/src/legal_mcp/services/db.py +++ b/mcp-server/src/legal_mcp/services/db.py @@ -2052,9 +2052,19 @@ async def list_external_case_law( offset: int = 0, source_kind: str = "external_upload", ) -> list[dict]: - """List chair-uploaded precedents, with simple filters.""" + """List chair-uploaded precedents, with simple filters. + + source_kind="all_committees" expands to: source_kind='internal_committee' + OR (source_kind='external_upload' AND source_type='appeals_committee'). + """ pool = await get_pool() - conditions = [f"source_kind = '{source_kind}'"] + if source_kind == "all_committees": + conditions = [ + "(source_kind = 'internal_committee' OR " + "(source_kind = 'external_upload' AND source_type = 'appeals_committee'))" + ] + else: + conditions = [f"source_kind = '{source_kind}'"] params: list = [] idx = 1 if practice_area: @@ -2488,19 +2498,17 @@ async def precedent_library_stats() -> dict: pool = await get_pool() async with pool.acquire() as conn: total = await conn.fetchval( - "SELECT COUNT(*) FROM case_law WHERE source_kind = 'external_upload'" + "SELECT COUNT(*) FROM case_law" ) by_practice = await conn.fetch( """SELECT practice_area, COUNT(*) AS n FROM case_law - WHERE source_kind = 'external_upload' GROUP BY practice_area ORDER BY n DESC""" ) by_level = await conn.fetch( """SELECT precedent_level, COUNT(*) AS n FROM case_law - WHERE source_kind = 'external_upload' GROUP BY precedent_level ORDER BY n DESC""" ) diff --git a/web-ui/src/components/precedents/library-list-panel.tsx b/web-ui/src/components/precedents/library-list-panel.tsx index 38eaea8..bda5ba7 100644 --- a/web-ui/src/components/precedents/library-list-panel.tsx +++ b/web-ui/src/components/precedents/library-list-panel.tsx @@ -313,8 +313,8 @@ export function LibraryListPanel() { limit: 200, }; - const courts = usePrecedents({ ...sharedFilters, sourceKind: "external_upload" }); - const committee = usePrecedents({ ...sharedFilters, sourceKind: "internal_committee" }); + const courts = usePrecedents({ ...sharedFilters, sourceKind: "external_upload", sourceType: "court_ruling" }); + const committee = usePrecedents({ ...sharedFilters, sourceKind: "all_committees" }); return (