import os, json, subprocess, http.server, socketserver

BASE = os.path.expanduser("~/Claude/Projects/에이전트구축")
PORT = 8899
TOKEN = "sx7k2m"
PY = "/opt/homebrew/bin/python3"
ALLOWED = {"collect_x": "collect_x.py", "collect_news": "collect_news.py"}

class H(http.server.SimpleHTTPRequestHandler):
    def __init__(self, *a, **kw):
        super().__init__(*a, directory=BASE, **kw)

    def log_message(self, *a):
        pass

    def do_GET(self):
        if self.path.startswith("/run/"):
            raw = self.path[5:]
            name, _, qs = raw.partition("?")
            name = name.strip("/")
            token = ""
            for part in qs.split("&"):
                if part.startswith("k="):
                    token = part[2:]
            if token != TOKEN:
                self.send_error(403, "bad token")
                return
            script = ALLOWED.get(name)
            if not script:
                self.send_error(404, "unknown job")
                return
            try:
                p = subprocess.run([PY, os.path.join(BASE, script)],
                                   cwd=BASE, capture_output=True,
                                   text=True, timeout=240)
                out = {"job": name, "returncode": p.returncode,
                       "stdout": p.stdout[-2000:], "stderr": p.stderr[-2000:]}
            except subprocess.TimeoutExpired:
                out = {"job": name, "returncode": -1, "error": "timeout 240s"}
            body = json.dumps(out, ensure_ascii=False).encode()
            self.send_response(200)
            self.send_header("Content-Type", "application/json; charset=utf-8")
            self.send_header("Content-Length", str(len(body)))
            self.end_headers()
            self.wfile.write(body)
            return
        super().do_GET()

class S(socketserver.ThreadingTCPServer):
    allow_reuse_address = True
    daemon_threads = True

S(("127.0.0.1", PORT), H).serve_forever()
