Files
awoooi/scripts/aider_watch_client/aider_watch_client/cli.py

56 lines
1.8 KiB
Python

# aider-watch-client cli | 2026-04-20 @ Asia/Taipei
"""aider-watch subcommands: doctor, flush."""
from __future__ import annotations
import argparse, subprocess, sys
from aider_watch_client import config, buffer
from aider_watch_client.api_client import post_events
def cmd_doctor(_a) -> int:
ok = True
print("== aider-watch doctor ==")
for k in ("AIDER_API_URL", "AIDER_WEBHOOK_SECRET"):
v = config.get(k)
mark = "ok" if v else "FAIL"
print(f" env {k:30s} {mark}")
if not v:
ok = False
# API reachability
try:
import requests
url = config.get("AIDER_API_URL", required=True)
# use healthz if available; otherwise try the url itself (HEAD won't post events)
health = url.replace("/aider/events", "/healthz")
r = requests.get(health, timeout=3)
mark = "ok" if r.status_code < 500 else "FAIL"
print(f" API reachable {mark} {r.status_code} ({health})")
if r.status_code >= 500:
ok = False
except Exception as e:
print(f" API reachable FAIL {e}")
ok = False
# launchd
res = subprocess.run(["launchctl", "list"], capture_output=True, text=True)
mark = "ok" if "com.awoooi.aider-flush" in res.stdout else "FAIL"
print(f" launchd aider-flush {mark}")
return 0 if ok else 1
def cmd_flush(_a) -> int:
n = buffer.flush(post_fn=post_events)
print(f"flushed {n} events")
return 0
def main() -> int:
p = argparse.ArgumentParser(prog="aider-watch")
sub = p.add_subparsers(dest="cmd", required=True)
sub.add_parser("doctor").set_defaults(func=cmd_doctor)
sub.add_parser("flush").set_defaults(func=cmd_flush)
a = p.parse_args()
return a.func(a)
if __name__ == "__main__":
sys.exit(main())