{
"tool_response": {
"stdout": "\"\"\"KIGlove Graph CLI - Code-Analyse mit ArangoDB.\"\"\"\n\nimport argparse\nimport sys\n\nsys.path.insert(0, \"\/var\/www\/kiglove\")\n\nfrom cli.graph.api import cmd_api\nfrom cli.graph.build import cmd_build\nfrom cli.graph.metrics import cmd_dead, cmd_duplicates, cmd_metrics\nfrom cli.graph.query import (\n cmd_cycles,\n cmd_dependents,\n cmd_deps,\n cmd_find,\n cmd_impact,\n cmd_stats,\n cmd_symbols,\n)\nfrom cli.graph.refactor import cmd_rename\n\n\ndef _register_query_commands(subparsers: argparse._SubParsersAction) -> None:\n \"\"\"Registriert Query-Befehle: deps, dependents, symbols, find, impact, cycles, stats.\"\"\"\n p_deps = subparsers.add_parser(\"deps\", help=\"Abhaengigkeiten einer Datei\")\n p_deps.add_argument(\"path\", help=\"Dateipfad\")\n p_deps.set_defaults(func=cmd_deps)\n\n p_dependents = subparsers.add_parser(\"dependents\", help=\"Wer importiert diese Datei?\")\n p_dependents.add_argument(\"path\", help=\"Dateipfad\")\n p_dependents.set_defaults(func=cmd_dependents)\n\n p_symbols = subparsers.add_parser(\"symbols\", help=\"Symbole einer Datei\")\n p_symbols.add_argument(\"path\", help=\"Dateipfad\")\n p_symbols.set_defaults(func=cmd_symbols)\n\n p_find = subparsers.add_parser(\"find\", help=\"Symbol nach Namen suchen\")\n p_find.add_argument(\"name\", help=\"Symbol-Name\")\n p_find.set_defaults(func=cmd_find)\n\n p_impact = subparsers.add_parser(\"impact\", help=\"Impact-Analyse\")\n p_impact.add_argument(\"path\", help=\"Dateipfad\")\n p_impact.add_argument(\"--depth\", type=int, default=3, help=\"Max. Tiefe (default: 3)\")\n p_impact.set_defaults(func=cmd_impact)\n\n p_cycles = subparsers.add_parser(\"cycles\", help=\"Zirkulaere Abhaengigkeiten erkennen\")\n p_cycles.add_argument(\"--scope\", help=\"Nur diesen Scope analysieren\")\n p_cycles.set_defaults(func=cmd_cycles)\n\n p_stats = subparsers.add_parser(\"stats\", help=\"Graph-Statistiken\")\n p_stats.set_defaults(func=cmd_stats)\n\n\ndef _register_analysis_commands(subparsers: argparse._SubParsersAction) -> None:\n \"\"\"Registriert Analyse-Befehle: build, metrics, dead, api, duplicates.\"\"\"\n p_build = subparsers.add_parser(\"build\", help=\"Graph aufbauen\")\n p_build.add_argument(\"--scope\", help=\"Nur diesen Scope indexieren\")\n p_build.set_defaults(func=cmd_build)\n\n p_metrics = subparsers.add_parser(\"metrics\", help=\"Code-Qualitaetsmetriken berechnen\")\n p_metrics.add_argument(\"path\", help=\"Dateipfad\")\n p_metrics.set_defaults(func=cmd_metrics)\n\n p_dead = subparsers.add_parser(\"dead\", help=\"Dead Code Detection\")\n p_dead.add_argument(\"--scope\", help=\"Nur diesen Scope analysieren\")\n p_dead.add_argument(\n \"--type\",\n choices=[\"functions\", \"classes\", \"imports\"],\n help=\"Nur bestimmten Typ analysieren\",\n )\n p_dead.set_defaults(func=cmd_dead)\n\n p_api = subparsers.add_parser(\"api\", help=\"API Surface Analysis\")\n p_api.add_argument(\"path\", help=\"Dateipfad\")\n p_api.add_argument(\"--markdown\", action=\"store_true\", help=\"Markdown-Format ausgeben\")\n p_api.add_argument(\"--private\", action=\"store_true\", help=\"Private Members einschliessen\")\n p_api.set_defaults(func=cmd_api)\n\n p_dup = subparsers.add_parser(\"duplicates\", help=\"Code-Duplikate finden\")\n p_dup.add_argument(\"--scope\", help=\"Nur diesen Scope analysieren\")\n p_dup.add_argument(\"--min-lines\", type=int, default=6, help=\"Min. Zeilen (default: 6)\")\n p_dup.add_argument(\n \"--min-similarity\",\n type=float,\n default=0.8,\n help=\"Min. Aehnlichkeit 0.0-1.0 (default: 0.8)\",\n )\n p_dup.add_argument(\"--store\", action=\"store_true\", help=\"In ArangoDB speichern\")\n p_dup.set_defaults(func=cmd_duplicates)\n\n\ndef _register_refactor_commands(subparsers: argparse._SubParsersAction) -> None:\n \"\"\"Registriert Refactor-Befehle: rename.\"\"\"\n p_rename = subparsers.add_parser(\"rename\", help=\"Symbol umbenennen\")\n p_rename.add_argument(\"old_name\", help=\"Aktueller Name\")\n p_rename.add_argument(\"new_name\", help=\"Neuer Name\")\n p_rename.add_argument(\"--scope\", help=\"Nur diesen Scope analysieren\")\n p_rename.add_argument(\n \"--dry-run\",\n action=\"store_true\",\n dest=\"dry_run\",\n help=\"Nur Vorschau (default)\",\n )\n p_rename.add_argument(\"--execute\", action=\"store_true\", help=\"Aenderungen ausfuehren\")\n p_rename.set_defaults(func=cmd_rename)\n\n\ndef main() -> None:\n \"\"\"CLI Hauptfunktion.\"\"\"\n parser = argparse.ArgumentParser(description=\"KIGlove Code Graph\")\n subparsers = parser.add_subparsers(dest=\"command\", help=\"Verfuegbare Befehle\")\n\n _register_query_commands(subparsers)\n _register_analysis_commands(subparsers)\n _register_refactor_commands(subparsers)\n\n args = parser.parse_args()\n\n if not args.command:\n parser.print_help()\n return\n\n args.func(args)\n\n\nif __name__ == \"__main__\":\n main()",
"stderr": "",
"interrupted": false,
"isImage": false,
"noOutputExpected": false
}
}