"""Agent tools for Stemwijzer — atomic primitives for agent operation. Import individual modules or use `list_tools()` for runtime discovery. """ from __future__ import annotations from agent_tools.context import ( append_context_note, list_recent_reports, read_context_md, ) from agent_tools.database import ( compute_party_positions_from_vectors, create_motion, delete_report, query_compass_positions, query_embeddings, query_motions, query_party_positions, query_pipeline_status, query_similar_motions, query_svd_vectors, query_votes, update_motion, ) from agent_tools.pipeline import ( pipeline_get_logs, pipeline_run_stage, ) __all__ = [ # Database "query_motions", "query_votes", "query_svd_vectors", "query_party_positions", "compute_party_positions_from_vectors", "query_pipeline_status", "query_embeddings", "query_similar_motions", "query_compass_positions", "create_motion", "update_motion", "delete_report", # Pipeline "pipeline_run_stage", "pipeline_get_logs", # Context "list_recent_reports", "read_context_md", "append_context_note", # Discovery "list_tools", ] def list_tools() -> list[dict[str, str]]: """Return a list of all available agent tools with signatures and descriptions. Useful for runtime capability discovery and prompt injection. """ return [ {"name": "query_motions", "signature": "query_motions(db_path, limit=100, policy_area=None, start_date=None, end_date=None)", "description": "Query motions from the database with optional filters."}, {"name": "query_votes", "signature": "query_votes(db_path, motion_id=None, party=None)", "description": "Query vote counts or individual votes."}, {"name": "query_svd_vectors", "signature": "query_svd_vectors(db_path, window_id, entity_type='motion')", "description": "Query SVD vectors for a window and entity type."}, {"name": "query_party_positions", "signature": "query_party_positions(db_path, window_id='current_parliament')", "description": "Query party axis positions for a window."}, {"name": "compute_party_positions_from_vectors", "signature": "compute_party_positions_from_vectors(db_path, window_id)", "description": "Compute party positions from MP vectors when pre-computed table is unavailable."}, {"name": "query_pipeline_status", "signature": "query_pipeline_status(db_path)", "description": "Query pipeline freshness and coverage metrics (raw counts, no judgment)."}, {"name": "query_embeddings", "signature": "query_embeddings(db_path, motion_id=None, model=None, limit=100)", "description": "Query text/fused embeddings."}, {"name": "query_similar_motions", "signature": "query_similar_motions(db_path, motion_id, top_k=10)", "description": "Query similar motions from similarity cache."}, {"name": "query_compass_positions", "signature": "query_compass_positions(db_path, window_id='current_parliament')", "description": "Query 2D compass positions for parties/MPs."}, {"name": "create_motion", "signature": "create_motion(db_path, title, description, date, policy_area='General', voting_results='[]')", "description": "Insert a new motion into the database."}, {"name": "update_motion", "signature": "update_motion(db_path, motion_id, **fields)", "description": "Update fields of an existing motion."}, {"name": "delete_report", "signature": "delete_report(output_path)", "description": "Delete a generated report file."}, {"name": "pipeline_run_stage", "signature": "pipeline_run_stage(db_path, stage, window_id, dry_run=False)", "description": "Run a single pipeline stage (agent decides which and when)."}, {"name": "pipeline_get_logs", "signature": "pipeline_get_logs(stage, lines=50)", "description": "Retrieve recent log output for a stage."}, {"name": "list_recent_reports", "signature": "list_recent_reports()", "description": "List recently generated report files."}, {"name": "read_context_md", "signature": "read_context_md()", "description": "Read accumulated agent knowledge from context.md."}, {"name": "append_context_note", "signature": "append_context_note(note)", "description": "Append a note to the accumulated agent knowledge."}, {"name": "list_tools", "signature": "list_tools()", "description": "Return a list of all available agent tools."}, ]