554c87aaee
Imports nach oben (sortiert), Endpoint-Setzen in main() statt Modulebene -> kein E402/unused-noqa mehr. governor.py war bereits sauber. 'ruff check' = 0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
68 lines
2.6 KiB
Python
68 lines
2.6 KiB
Python
#!/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 <messages-file>
|
|
"""
|
|
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 <messages-file>", 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())
|