{"endpoints":[{"endpoint":"GET /","description":"List semua endpoint yang tersedia (self-discovery)."},{"endpoint":"GET /health","description":"Liveness check. Response: {\"status\":\"ok\"}."},{"endpoint":"POST /webhook","description":"Webhook receiver dari GitHub. Verifikasi HMAC SHA256 + dispatch command rule."},{"endpoint":"GET /repos","description":"List semua rule yang terdaftar (dengan id)."},{"endpoint":"GET /repos/:id","description":"Detail 1 rule by id."},{"endpoint":"POST /repos","description":"Daftarkan repo+branch baru + auto-generate file action."},{"endpoint":"PATCH /repos/:id","description":"Partial update rule (timeout_seconds, command, work_dir, env)."},{"endpoint":"DELETE /repos/:id","description":"Hapus rule. ?branch=\u003cname\u003e peel-off 1 branch; ?delete_script=true ikut hapus file .sh."},{"endpoint":"POST /ssh-keys","description":"Generate keypair ed25519 ke secrets/ssh/\u003cname\u003e{,.pub}. Body: {\"name\":\"...\"} (alias \"label\"). Response: isi \u003cname\u003e.pub (text/plain)."},{"endpoint":"POST /hard-reset","description":"DESTRUCTIVE. Wipe all runtime state: rules, generated scripts (deployments/act/*.sh kecuali actions_example.sh), ssh keys (secrets/ssh/*), logs/*. Body wajib {\"confirm\":\"RESET\"}."}]}