()
| 49 | |
| 50 | |
| 51 | def main() -> int: |
| 52 | ap = argparse.ArgumentParser() |
| 53 | ap.add_argument("repo", help="name of the repo (from repos.toml)") |
| 54 | ap.add_argument("--tools", nargs="*", help="restrict to these tool names") |
| 55 | args = ap.parse_args() |
| 56 | |
| 57 | repos = {r["name"]: r for r in load_repos()} |
| 58 | if args.repo not in repos: |
| 59 | print(f"unknown repo '{args.repo}'. Known: {sorted(repos)}", file=sys.stderr) |
| 60 | return 2 |
| 61 | repo = repos[args.repo] |
| 62 | |
| 63 | print(f"=== isolated probe: {repo['name']} ({repo['path']}) ===", file=sys.stderr) |
| 64 | # Quick discover pass against a primer server so per-tool fresh servers |
| 65 | # have plausible node ids etc. |
| 66 | primer = McpClient(repo["path"]) |
| 67 | try: |
| 68 | discovered = discover(primer) |
| 69 | finally: |
| 70 | primer.close() |
| 71 | |
| 72 | probes: dict = {} |
| 73 | for lang in repo.get("languages", []): |
| 74 | mod = importlib.import_module(f"tools.{lang}") |
| 75 | probes.update(mod.probes_for(discovered)) |
| 76 | |
| 77 | if args.tools: |
| 78 | wanted = set(args.tools) |
| 79 | probes = {k: v for k, v in probes.items() if k in wanted} |
| 80 | missing = wanted - set(probes) |
| 81 | if missing: |
| 82 | print(f"warning: tools not in probe set: {sorted(missing)}", file=sys.stderr) |
| 83 | |
| 84 | with open(LOG_PATH, "w") as log: |
| 85 | for tool, queries in probes.items(): |
| 86 | print(f"# {tool}", file=sys.stderr, flush=True) |
| 87 | run_tool_fresh(repo["name"], repo["path"], tool, queries, log) |
| 88 | |
| 89 | print(f"log written to {LOG_PATH}", file=sys.stderr) |
| 90 | return 0 |
| 91 | |
| 92 | |
| 93 | if __name__ == "__main__": |
no test coverage detected