#!/usr/bin/env python3 """driver.py — treibt EINE Aider-Sitzung ueber die Scripting-API durch den Governor. Jede Zeile der Nachrichtendatei ist eine User-Runde. Weil derselbe Coder alle Runden bedient, akkumuliert die Historie und die Anfrage waechst jede Runde — genau das, was der Governor beobachtet. Aiders EIGENE History-Zusammenfassung wird abgeschaltet, damit der Governor die alleinige Sitzungsgrenze ist (der Plan verwirft Auto-Compaction bewusst). Aufruf (cwd muss das Test-Repo sein, mit venv-python): .../aider-chat/bin/python driver.py """ import os import sys from aider.coders import Coder from aider.io import InputOutput from aider.models import Model def main() -> int: # Endpoint VOR den Aider-Aufrufen setzen (litellm liest es zur Laufzeit). os.environ.setdefault("OPENAI_API_BASE", "http://127.0.0.1:8100/v1") os.environ.setdefault("OPENAI_API_KEY", "dummy") if len(sys.argv) < 2: print("usage: driver.py ", file=sys.stderr) return 2 with open(sys.argv[1], encoding="utf-8") as fh: messages = [ln.strip() for ln in fh if ln.strip() and not ln.lstrip().startswith("#")] model = Model("openai/Qwen3-Coder-Next") io = InputOutput(yes=True) # alle Rueckfragen automatisch bejahen coder = Coder.create( main_model=model, io=io, fnames=["SAVEPOINT.md"], # editierbar read_only_fnames=["CONVENTIONS.md"], # nur-lesbar auto_commits=True, # jede Etappe -> git-Commit stream=False, # deterministische Logs fuer P0 map_tokens=512, use_git=True, ) # Aiders eigene Zusammenfassung ausschalten: too_big() wird nie wahr. try: coder.summarizer.max_tokens = 10 ** 9 print(f"[driver] summarizer.max_tokens -> {coder.summarizer.max_tokens}", flush=True) except Exception as exc: # noqa: BLE001 print(f"[driver] WARN konnte summarizer nicht abschalten: {exc}", flush=True) for i, msg in enumerate(messages, 1): print(f"\n===== TURN {i}/{len(messages)} =====", flush=True) print(f">> {msg[:140]}", flush=True) try: coder.run(with_message=msg) except Exception as exc: # noqa: BLE001 print(f"[driver] TURN {i} Fehler: {exc!r}", flush=True) break sent = getattr(coder, "total_tokens_sent", "?") recv = getattr(coder, "total_tokens_received", "?") print(f"-- aider kum: gesendet={sent} empfangen={recv}", flush=True) print("\n===== SESSION ENDE =====", flush=True) return 0 if __name__ == "__main__": sys.exit(main())