Architektur-Pivot: nginx fällt komplett weg. HAProxy 2.8+ übernimmt
TLS-Termination, L7-Routing per Host-Header und LB. ACME-Webroot
und Management-UI werden von edgeguard-api ausgeliefert (Phase 3
implementiert die zugehörigen Handler); HAProxy proxied
/.well-known/acme-challenge/* und Management-FQDN-Traffic an
127.0.0.1:9443. Eine Distro-Abhängigkeit weniger, ein Renderer
weniger, sauberere Trennung.
Renderer (alle mit Embed-Templates + Tests):
* internal/configgen/ — atomic write + systemctl reload helpers
* internal/haproxy/ — :80 + :443, ACME-ACL, Host-Header-Routing,
Stats-Frontend, api_backend Fallback
* internal/firewall/ — default-deny input, stateful baseline,
SSH-Rate-Limit, :80/:443 accept,
Cluster-Peer-Set für mTLS :8443,
Custom-Rules aus PG
* internal/{squid,wireguard,unbound}/ — Stubs (ErrNotImplemented)
Orchestrator + CLI:
* internal/services/configorch/ — fester Reihenfolge-Run, Stubs
sind soft-skip statt fatal
* cmd/edgeguard-ctl render-config [--no-reload] [--only=svc1,svc2]
Packaging:
* postinst: /etc/edgeguard/nginx raus, /var/lib/edgeguard/acme rein,
self-signed _default.pem via openssl req (damit HAProxy startet
bevor certbot etwas issuet hat)
* control: Depends nginx raus, openssl rein
* edgeguard-ui: dependency auf nginx weg, "Served by edgeguard-api
gin StaticFS"
Live-Smoke: render-config gegen lokale PG schreibt /etc/edgeguard/
haproxy/haproxy.cfg + nftables.d/ruleset.nft korrekt; CRUD-Test aus
Phase 2 läuft weiter unverändert.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
103 lines
4.1 KiB
Markdown
103 lines
4.1 KiB
Markdown
# agent.md — EdgeGuard Native: Agent-Factory Pipeline
|
|
|
|
> Dieses Dokument beschreibt wie das Projekt über den Architect Center Orchestrator mit spezialisierten Agenten aufgebaut wird. Jeder Agent hat einen klar abgegrenzten Scope und kann parallel zu anderen arbeiten.
|
|
|
|
---
|
|
|
|
## Idee
|
|
|
|
Der Architect Center Orchestrator dispatcht mehrere Claude Code Agenten, jeder spezialisiert auf eine Schicht des Projekts. Alle Agenten haben Zugriff auf:
|
|
- **RAG (Qdrant):** Code-Index von mail-gateway (project_id=6) und netcell-webpanel (project_id=5) als Referenz
|
|
- **MCP-Server `architect`:** ac_search_code, ac_send_instruction, ac_read_file
|
|
- **Session:** eigene tmux-Session pro Agent (EdgeGuardNative-1 … N)
|
|
|
|
---
|
|
|
|
## Agent-Rollen
|
|
|
|
| Agent | Scope | Referenz-Projekt |
|
|
|-------|-------|-----------------|
|
|
| **DB-Architect** | Datenbankschema, goose-Migrations, GORM-Models | mail-gateway models/ |
|
|
| **API-Engineer** | Gin-Router, alle Handler, Middleware (Auth/JWT/RBAC) | mail-gateway handlers/ |
|
|
| **Config-Generator** | HAProxy, Squid, WireGuard, Unbound, nftables Templates + Renderer | mail-gateway config/ |
|
|
| **Cluster-Engineer** | KeyDB AA, PG Streaming Replication, Join/Promote, Write-Proxy | mail-gateway cluster/ |
|
|
| **Scheduler-Engineer** | ACME-Renewal, Backup, Health-Aggregation, License-Heartbeat | mail-gateway scheduler |
|
|
| **CLI-Engineer** | edgeguard-ctl: initdb, migrate, cluster-join, promote, dump-config | mail-gateway cmd/nmg-ctl/ |
|
|
| **Frontend-Engineer** | React 19 + AntD 6 UI (1:1 enconf-Pattern), alle Seiten v1 | netcell-webpanel management-ui/ |
|
|
| **Packaging-Engineer** | .deb-Pakete (dpkg-deb), postinst, systemd-Units, APT-Repo | mail-gateway packaging/ |
|
|
| **Bootstrap-Engineer** | install.sh Onliner, Cluster-Join-Script | netcell-webpanel install.sh |
|
|
|
|
---
|
|
|
|
## Abhängigkeiten (Build-Order)
|
|
|
|
```
|
|
Phase 1 (parallel):
|
|
DB-Architect → migrations/ + internal/models/
|
|
Packaging-Engineer → packaging/debian/ + deploy/systemd/
|
|
|
|
Phase 2 (parallel, braucht Phase 1):
|
|
API-Engineer → internal/handlers/ + cmd/edgeguard-api/
|
|
Config-Generator → internal/{haproxy,squid,wireguard,unbound,firewall}/
|
|
CLI-Engineer → internal/services/ + cmd/edgeguard-ctl/
|
|
|
|
Phase 3 (parallel, braucht Phase 2):
|
|
Cluster-Engineer → internal/{cluster,proxy,aggregator,license}/
|
|
Scheduler-Engineer → cmd/edgeguard-scheduler/
|
|
Frontend-Engineer → management-ui/
|
|
|
|
Phase 4 (braucht Phase 3):
|
|
Bootstrap-Engineer → scripts/install.sh, scripts/apt-repo/
|
|
Integration-Tests → make test + make deb
|
|
```
|
|
|
|
---
|
|
|
|
## Orchestrator-Prompt-Template
|
|
|
|
```
|
|
Du bist der <ROLE>-Agent für EdgeGuard Native (project_id=8, session=EdgeGuardNative-<N>).
|
|
|
|
Deine Aufgabe: <SCOPE>
|
|
|
|
Pflicht vor jeder Implementierung:
|
|
1. ac_search_code(query="<keywords>", project_id=<REF_ID>, limit=6) — Pattern aus Referenz lesen
|
|
2. Erst dann implementieren, NIEMALS raten
|
|
|
|
Referenz-Projekte: mail-gateway (id=6) für Backend-Patterns, netcell-webpanel (id=5) für UI/Bootstrap.
|
|
|
|
Arbeite in /var/www/edgeguard-native/<deinem Scope>.
|
|
Nach jedem Abschnitt: make test (Backend) oder npx tsc --noEmit (Frontend).
|
|
```
|
|
|
|
---
|
|
|
|
## RAG-Collections (Qdrant auf Architect Center Server)
|
|
|
|
| Collection | Inhalt | Wird genutzt von |
|
|
|-----------|--------|-----------------|
|
|
| `project_mail_gateway` | mail-gateway Code-Index | DB-, API-, Config-, Cluster-, Scheduler-, CLI-Agent |
|
|
| `project_netcell_webpanel` | netcell-webpanel Code-Index | Frontend-, Bootstrap-Agent |
|
|
| `project_edgeguard_native` | edgeguard-native eigener Index (live, wird gefüllt) | alle Agenten ab Phase 2 |
|
|
|
|
**Code-Indexer starten:**
|
|
```bash
|
|
# Auf Architect Center Server
|
|
python3 /var/www/architect-center/scripts/code_indexer.py --project-id 8
|
|
```
|
|
|
|
---
|
|
|
|
## Start-Befehl (via Architect Center Orchestrator)
|
|
|
|
1. Architect Center UI → Orchestrator → Neue Pipeline
|
|
2. Template: `edgeguard-native-v1`
|
|
3. Phase 1 starten → bei Completion Phase 2, etc.
|
|
|
|
Oder manuell per Session:
|
|
```bash
|
|
tmux new-session -d -s EdgeGuardNative-2 -c /var/www/edgeguard-native
|
|
# Claude Code in Session starten:
|
|
tmux send-keys -t EdgeGuardNative-2 'ARCHITECT_SESSION=EdgeGuardNative-2 ARCHITECT_PROJECT_ID=8 claude' Enter
|
|
```
|