Skip to content

Dissenyar dashboard operatiu amb GitHub OAuth per al bridge #4

@pilipilisbot

Description

@pilipilisbot

Dashboard operatiu del GitHub Agent Bridge

Context

Els incidents recents amb github-agent-bridge han deixat clar que mirar només l'estat pending/running/blocked/done no és suficient. Un job pot estar running però no estar fent progrés útil, i l'usuari no hauria d'haver d'entrar a Telegram a preguntar què passa.

Volem un backend i dashboard operatiu per veure l'estat real dels agents, jobs, processos, mètriques i logs, amb autenticació GitHub OAuth.

Stack acordat

  • Backend: FastAPI com a servei separat github-agent-bridge-dashboard.
  • Frontend: React + Vite + TypeScript.
  • UI: Tailwind + components estil shadcn/ui + lucide-react.
  • Dades client: TanStack Query amb polling inicial.
  • Gràfiques: Recharts.
  • Logs/events live: SSE inicialment; WebSocket només si cal bidireccionalitat real.
  • Producció: build estàtic servit pel mateix FastAPI.

Estat actual

Ja s'han integrat:

Norma de seguiment: cada PR futura que avanci aquesta issue ha de marcar els checkboxes corresponents en aquesta descripció.

Checklist

M0: Arquitectura i stack

  • Definir objectius i no objectius del dashboard.
  • Triar stack backend/frontend/UI.
  • Decidir servei separat github-agent-bridge-dashboard.
  • Mantenir la superfície inicial read-only, sense accions mutatives.

M1: Backend read-only i OAuth

  • Crear app FastAPI del dashboard.
  • Servir el dashboard com a servei separat de l'executor.
  • Obrir SQLite en mode read-only per a consultes del dashboard.
  • Reutilitzar lògica compartida de dades fora del backend perquè també serveixi CLI/monitor.
  • Implementar GitHub OAuth login/callback.
  • Signar sessions amb cookie httpOnly, secure i sameSite=lax.
  • Autoritzar per GITHUB_AGENT_BRIDGE_DASHBOARD_ALLOWED_USERS.
  • Autoritzar per GITHUB_AGENT_BRIDGE_DASHBOARD_ALLOWED_ORGS amb scope read:org només quan cal.
  • Exposar GET /api/health.
  • Exposar GET /api/status.
  • Exposar GET /api/jobs amb filtres per status, repo, thread, action, intent, since, until, limit.
  • Exposar GET /api/jobs/{id}.
  • Exposar GET /api/jobs/{id}/logs.
  • Exposar GET /api/metrics/summary amb counts i percentils.
  • Afegir tests d'autorització, API i consultes.
  • Afegir allowedTeams.
  • Afegir repoScopes per limitar visibilitat per repos/thread.

M2: UI read-only

  • Crear app React + Vite + TypeScript a dashboard/.
  • Servir el build estàtic des de FastAPI a /.
  • Afegir overview amb counts operatius.
  • Afegir taula de jobs amb filtres.
  • Afegir detall de job amb timeline/worklog i links GitHub.
  • Mostrar mètriques de runtime i queue wait amb Recharts.
  • Usar TanStack Query per polling/refetch.
  • Mantenir UI sense accions mutatives.
  • Millorar el layout responsive per a dispositius mòbils amb cards compactes i detall inline.
  • Limitar el scroll de la llista de jobs en desktop i mantenir el detall visible.
  • Afegir gràfica de jobs per dia.
  • Mostrar l'avatar de l'usuari autenticat al header.
  • Afegir vista/panell dedicat d'alertes quan hi hagi storage d'alertes persistent.
  • Afegir lectura SSE per invalidar/refrescar dades en temps real.

M3: Runtime/proc observability i watchdog

  • Afegir helper compartit de lectura /proc per cmd, estat, CPU ticks, I/O bytes i fills.
  • Reutilitzar el helper en monitor/watchdog en comptes de duplicar lògica.
  • Exposar snapshot live a GET /api/processes.
  • Mostrar process activity a la UI.
  • Documentar que el snapshot actual és live i no històric.
  • Persistir samples curts a job_process_samples o taula equivalent.
  • Afegir retenció configurable de samples/process logs.
  • Separar explícitament a l'API procés viu, procés actiu, progrés semàntic i progrés visible.
  • Registrar heartbeat semàntic/fase del job durant execució.
  • Persistir alertes i accions del watchdog en una taula alerts o equivalent.
  • Fer que el watchdog prengui decisions amb CPU/I/O/PID tree quiet i heartbeat semàntic recent, no només edat.

M4: Session/log correlation

  • Assignar openclaw_session_id determinista github-agent-bridge-job-{id} quan es reclama un job.
  • Passar --session-id a openclaw agent.
  • Exposar metadades segures a GET /api/jobs/{id}/session.
  • Mostrar la correlació de sessió al detall del job.
  • Documentar que no s'exposen transcripts complets.
  • Exposar activitat redacted bridge-side de sessió/agent amb events de claim, dispatch i finalització.
  • Exposar entrades redacted i truncades del transcript OpenClaw per job/sessió.
  • Integrar resum segur de sessió/últimes fases si OpenClaw exposa una API adequada.
  • Definir política d'admin/redacció/truncament abans d'exposar qualsevol transcript.

M5: Admin actions guarded

  • Retry job des del dashboard.
  • Dismiss/ack de job blocked.
  • Kill de child stale.
  • Confirmacions explícites per accions mutatives.
  • CSRF/session hardening específic per mutacions.
  • Audit log per totes les accions mutatives.
  • Política d'autorització admin separada de la lectura.

Documentació i operació

  • Documentar configuració del servei dashboard.
  • Documentar creació/configuració de GitHub OAuth App.
  • Documentar callback URL, scopes, allowlists, reverse proxy/TLS i troubleshooting.
  • Afegir variables del dashboard a systemd/env.example.
  • Documentar com executar i compilar la UI.
  • Afegir guia operativa específica per alertes persistides quan existeixin.
  • Afegir notes de deploy/rollout del dashboard en producció real.

Seguretat

  • No exposar env vars ni secrets en respostes API/UI.
  • No servir fitxers arbitraris per path.
  • Mantenir l'API inicial read-only.
  • Usar cookies httpOnly, secure i sameSite=lax.
  • OAuth state obligatori.
  • Requerir autenticació per defecte.
  • Tancar/definir CORS explícitament si el servei s'exposa fora de localhost.
  • Afegir repo/team scopes abans d'obrir el dashboard a més operadors.
  • Definir redacció/truncament per logs voluminosos o transcripts.

Proper pas recomanat

Amb M3 completat, el següent pas recomanat és tancar els controls d.accés pendents (allowedTeams i repoScopes) abans d.obrir el dashboard a més operadors o començar M5/admin actions.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions