56 lines
1.8 KiB
Python
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())
|