feat: ship agent-first mission control v0.2.57
CI - Build & Test / Backend (.NET) (push) Successful in 42s
CI - Build & Test / Frontend (Vue/TS) (push) Successful in 2m46s
CI - Build & Test / Security Check (push) Successful in 3s
CI - Build & Test / Deploy Nexus (push) Successful in 56s

This commit is contained in:
AzuTear
2026-07-31 22:39:47 +02:00
parent 3bc7622977
commit f5552218bc
535 changed files with 95242 additions and 8791 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

@@ -0,0 +1,180 @@
# Nexus Sites Mockup: Mission-Control-Evaluation
**Stand:** 2026-07-28
**Artefakt:** `sites/nexus-mission-control`
**Umfang:** 18 bedienbare Routen, ausschließlich deterministische Mockdaten
**Zielbild:** Nexus als agent-first Bedienoberfläche über OpenClaw; OpenAI bleibt
der primäre Modellprovider innerhalb von OpenClaw.
## Kurzurteil
Der Sites-Mockup ist als visuelles und interaktives Zielbild überzeugend. Die
Navigation ist konsistent, Iris bleibt kontextuell erreichbar und die neue
Run-Control-Seite macht Ziel, Agentenhierarchie, Budget, aktuellen Schritt,
Freigabegrenze und Wiederaufnahme erstmals gemeinsam sichtbar.
**Bewertung des Zielbilds:**
| Dimension | Wertung | Urteil |
|---|---:|---|
| Visuelle Konsistenz und Informationshierarchie | 4,5 / 5 | Stark |
| Agent-first Bedienmodell | 3,7 / 5 | Gute Richtung |
| Abdeckung des täglichen Mission-Control-Betriebs | 2,9 / 5 | Wesentliche Flächen fehlen |
| Nachweis realer Betriebsfähigkeit | 0 / 5 | Absichtlich nicht Teil dieses statischen Mockups |
Der Mockup zeigt damit ein belastbares Produktziel, aber noch keine produktive
Control Plane. Er ruft weder Nexus noch OpenClaw, OpenAI, Authentifizierung,
Persistenz, Analytics oder andere Provider auf. Alle sichtbaren Daten und
Interaktionen werden im Browser aus einem fest definierten Fixture erzeugt und
bei einem Reload zurückgesetzt.
## Visuelle Evidenz
![Alle 18 geprüften Routen](./route-contact-sheet.png)
![Referenz-, Breakpoint- und Detailzustände](./evidence-contact-sheet.png)
### Veröffentlichtes Sites-Artefakt
![Privat veröffentlichtes Dashboard](./24-deployed-dashboard.png)
![Privat veröffentlichte Run-Control-Seite](./25-deployed-run-control.png)
## Verbindlicher Mission-Control-Vertrag
Die folgenden Anforderungen ergeben sich sowohl aus dem Nexus-Zielbild als auch
aus den aktuellen Runtime-Schnittstellen:
1. **OpenClaw bleibt die Runtime-Quelle.** Das
[OpenClaw Gateway Protocol](https://docs.openclaw.ai/gateway/protocol)
stellt den typisierten Control-Plane-Zugang für Status, Sessions, Runs,
Tools, Approvals, Cron, Nodes und Ereignisse bereit. Nexus sollte diesen
Vertrag serverseitig hinter domänenspezifischen Read-/Control-Clients
kapseln; der Browser darf weder Gateway-Credentials noch rohe RPC-Rechte
erhalten.
2. **Freigaben sind Teil des Run-Zustands.** Der
[OpenAI Agents SDK HITL-Flow](https://openai.github.io/openai-agents-js/guides/human-in-the-loop/)
pausiert Ausführungen vor einem freigabepflichtigen Tool-Aufruf und setzt sie
aus demselben `RunState` fort. Die Run-Control-Darstellung braucht deshalb
dauerhafte, versionierte Checkpoints statt lokaler UI-Schalter.
3. **Jede Ausführung braucht beweisbare Ereignisse.** Das
[OpenAI Agents SDK Tracing](https://openai.github.io/openai-agents-js/guides/tracing/)
bildet Agenten-, Modell-, Tool-, Handoff- und Guardrail-Arbeit als
verschachtelte Spans ab. Nexus benötigt einen korrelierten Run-/Event-Read
Model mit gezielter Redaction sensitiver Inhalte.
4. **Tool-Rechte ersetzen keine Freigabeoberfläche.** Die
[OpenClaw Tools Invoke API](https://docs.openclaw.ai/gateway/tools-invoke-http-api)
fügt für erreichbare Tools nicht automatisch eine zusätzliche
Einzel-Freigabe hinzu und sperrt besonders riskante Shell-, Datei-,
Session-, Cron-, Gateway- und Node-Flächen standardmäßig. Nexus muss
Least-Privilege-Policies und seine menschlichen Freigabegrenzen explizit
modellieren.
5. **Automationen sind laufende Arbeit, keine Kalenderdekoration.**
[OpenClaw Scheduled Tasks](https://docs.openclaw.ai/automation/cron-jobs)
besitzen persistente Jobs, Ausführungshistorie, Fehlerzustände,
Retry/Backoff und Session-Modi. Die Calendar-Seite muss diesen vollständigen
Lebenszyklus abbilden.
## Evaluation aller Seiten
Skala für **Mockup-Reife**: 1 = Platzhalter, 3 = verständlicher Teilfluss,
5 = belastbares interaktives Zielbild. Die Wertung bewertet nicht die reale
Backend-Funktion.
| Route | Rolle im Mission Control | Mockup-Reife | Was bereits gut funktioniert | Was für den produktiven Zielzustand fehlt | Priorität |
|---|---|---:|---|---|---|
| `/login` | Sicherer Zugang | 3,5 / 5 | Ruhiger Einstieg, Passwortzustand, klare Produktidentität | SSO/Passkeys/2FA, Recovery, Geräte und Sessions, Return-to-Route, Lockout- und Break-glass-Flows | P1 |
| `/dashboard` | Lagebild und Einstieg | 4,5 / 5 | Dominante Live-Orchestrierung, knappe Statusleisten, Agentenpfad, Iris als Modal | Autoritative Run-/Queue-Daten, globale Command Bar, Provider-/Budgetalarme, echte Offline-/Stale-/Partial-Zustände, Deep Link zum Run | P0 |
| `/runs` | Aktive Ausführung steuern | 4,5 / 5 | Ziel, Hierarchie, aktueller Agent, Budget, Event Rail, zweistufige Freigabe, Pause/Stop/Resume/Checkpoint | Dauerhafte Run-ID und State-Version, Toolargumente/Diff, Artifact-Preview, Idempotenz, Race-Konflikte, Replay-Sicherheit, vollständige Trace-Suche | P0 |
| `/agents` | Runtime-Workforce | 4 / 5 | Rollen, Status, Modell und Policy sind scanbar; Karten führen in Details | Create/Import, Enable/Disable/Restart, Capability- und Permission-Diff, Auslastung, Kosten, Drift und Versionsstatus | P1 |
| `/agents/:id` | Agent Cockpit | 4 / 5 | Identität, Live-Zusammenfassung, Aktivität und Konfiguration sind sinnvoll gruppiert | Sessions/Runs, Toolrechte, Modellpolicy, Workspace, Budget, Secrets-Referenzen, Evals, Lifecycle und Rollback | P1 |
| `/projects` | Portfolio und Outcomes | 3,5 / 5 | Projekte und Fortschritt sind schnell erfassbar; Karten sind klickbar | Ziele/KPIs, verantwortliche Agenten, aktive Runs, Budget, Risiken, Artifacts, Automationen und Health-Aggregation | P1 |
| `/projects/:id` | Outcome Control | 3,5 / 5 | Projektkontext und Aufgabenfortschritt sind verdichtet | Delegation, Runstart, Agententeam, Timeline, Abhängigkeiten, Budget, Playbooks, Artifacts und Abschlusskriterien | P1 |
| `/tasks` | Agentische Arbeitswarteschlange | 4 / 5 | Board, Erstellen, Status und Assignee sind bedienbar; fachlich horizontales Board bleibt intern scrollbar | Run-/Approval-Verknüpfung, Dependencies, Bulk-Aktionen, Retry/Resume/Cancel, Queue-SLAs, Blocker und ehrliche Fehlerzustände | P1 |
| `/tasks/:id` | Einzelauftrag steuern | 4 / 5 | Bearbeitung, Agentenzuweisung, Status und Kontext sind gut nutzbar | Session/Run, Tool Calls, Approvals, Artifacts, Checkpoints, Replay, Abhängigkeiten und Abnahmeevidenz | P1 |
| `/memory` | Kuratiertes Langzeitwissen | 3,5 / 5 | Suche, Liste und anklickbare Detailansicht funktionieren | Create/Edit/Archive, Provenienz, Scope, Freshness, Retention, Konflikte, Retrieval-Test und Versions-Rollback | P1 |
| `/docs` | Knowledge Ingestion | 3,5 / 5 | Kategorien, Suche und Dokumentdetail sind verständlich | Upload/Import/Authoring, Ingestionstatus, Parserfehler, Zitate, Versionen, Freigaben, Sync und Retrieval-Evals | P1 |
| `/models` | OpenAI-Policy über OpenClaw | 3 / 5 | Primär-/Fallback-Routing und Status sind klar dargestellt | Auth-Profilstatus ohne Secrets, Fähigkeiten, Limits, Qualität/Kosten/Latenz, Policy-Diff, Testlauf, Circuit Breaker und Rollback | P0 |
| `/activity` | Audit- und Eventstream | 3,5 / 5 | Filterbarer, chronologischer Überblick | Autoritative Eventquelle, Run-/Correlation-ID, Actor, Diff, Payload-Redaction, Suche, Export, Retention und Deep Links | P0 |
| `/calendar` | Scheduler und Automation | 3,5 / 5 | Upcoming und Jobs sind getrennt und scanbar | Vollständiges Cron-CRUD, Run now, Pause/Resume, Owner, Zeitzone, Session Mode, Run History, Retry, Delivery und Fehlerdiagnose | P1 |
| `/security` | Sicherheits- und Policy-Lage | 3,5 / 5 | Auth-, Token-, Rate- und Transportkonfiguration sind als Übersicht lesbar | Tatsächliche effektive Scopes, Findings, Remediation, Schlüsselrotation, Nutzergeräte, Secret-Referenzen, Auditbelege und Drift | P0 |
| `/incidents` | Operative Störungsbearbeitung | 3,5 / 5 | Liste und anklickbares Incident-Detail funktionieren | Create/Acknowledge/Assign, Severity, Timeline, Run-/Provider-Korrelation, Playbook, Remediation, Resolve und Postmortem | P1 |
| `/notifications` | Persönliche Action Inbox | 3,5 / 5 | Read/Read-all und Priorisierung sind verständlich | Acknowledge, Snooze, Assignee, Quiet Hours, Routingregeln, Kanalpräferenzen sowie direkte Approval-/Incident-Aktionen | P1 |
| `/settings` | Control-Plane-Konfiguration | 3 / 5 | Profil, Passwort und Benutzerverwaltung sind klar getrennt | Gateway-/OpenAI-via-OpenClaw-Status, Rollen, Tools, Approval Policies, Budgets, Connectoren, Retention, Secrets-Referenzen und Audit | P0 |
Die frühere Mobile-Chat-Seite ist bewusst entfernt. `/chat` leitet im Mockup
auf `/dashboard` um; Iris bleibt auf jeder authentifizierten Seite als
kontextuelles Modal verfügbar.
## Produktweite Lücken
### P0 Vor jeder realen Steuerung
- Typisierte Nexus-Fassade für den OpenClaw-Gateway-Vertrag mit
Capability-Discovery und kompatibler Protokollversion.
- Authenticated-by-default, getrennte Benutzer-/Service-/Agentenidentitäten,
Least-Privilege-Scopes und keinerlei Secrets im Browser.
- Dauerhafte Domäne für Run, Session, Parent/Child-Agent, Tool Call,
Approval, Artifact, Usage, Budget und State-Version.
- Jede Mutation mit Actor, Correlation ID, Idempotency Key, erwarteter Version,
Policyentscheidung, Ergebnis und unveränderbarem Audit-Eintrag.
- Recovery für Reconnect, Reload, Gateway-Neustart, verlorene Events,
doppelte Zustellung und bereits ausgeführte Seiteneffekte.
- Zentrale Approval Inbox mit Ablaufzeit, Begründung, exaktem Ziel,
Toolargumenten, Konsequenz, Reviewerbindung und First-answer-wins-Semantik.
### P1 Täglicher agent-first Betrieb
- Globale Command Bar: Ziel formulieren, Kontext prüfen, Plan freigeben und
direkt einen dauerhaften Run starten.
- Eigene Deep Links für `/runs/:id` und eine zentrale `/approvals`-Arbeitsfläche.
- Tool-Katalog und effektive Rechte, Artifact-Browser, Session Explorer und
vollständiger Scheduler-Lifecycle.
- Kontextuelle Delegation auf Projekt, Task, Incident, Dokument und Zeitplan.
- Quellen- und Freshness-Markierung für jede operative Zahl; Offline, Stale,
Partial, Unauthorized und Incompatible dürfen nicht wie leere Daten wirken.
- Provider-Quoten, Budgets, Fallbacks, Circuit Breaker und kostenbewusste
Routingregeln für OpenAI innerhalb von OpenClaw.
### P2 Qualität und Plattformreife
- Eval-Arbeitsfläche für Datensätze, Run-Vergleiche, Regressionen,
Tool-Argumentgenauigkeit und Release Gates.
- Gespeicherte Ansichten, globale Suche, Command-History und Operator-Shortcuts.
- SLOs für Agentenqualität, Latenz, Kosten, Queuezeit und Approval-SLA.
- Wiederverwendbare Run-, Agenten-, Incident- und Automations-Playbooks.
- Channels, Connectors und Nodes erst nach stabiler Trust-, Approval- und
Recovery-Schicht als eigenständige Flächen ergänzen.
## Empfohlene nächste Mockups
1. `/approvals` als zentrale, risiko- und SLA-sortierte Freigabe-Inbox.
2. `/runs/:id` als dauerhafter Run-Explorer mit Trace, Tooldiff und Artifacts.
3. `/tools` als Katalog für Schemas, effektive Rechte und Policy-Diffs.
4. `/artifacts` als nachvollziehbare Output- und Provenienzfläche.
5. `/evals` als Vergleichs- und Release-Gate-Arbeitsfläche.
## Durchgeführte Abnahme
| Prüfung | Ergebnis |
|---|---|
| Registrierte Zielrouten | 18 / 18 visuell geprüft |
| Geometrie-/Overflow-Matrix | 90 Prüfungen bei 375, 768, 1024, 1440 und 1920 px; kein dokumentweiter horizontaler Overflow |
| Run Control | Approval Review/Confirm/Undo, Pause/Resume, Stop/Checkpoint-Restart und Eventdetail bedient |
| Kerninteraktionen | Navigation, Detailwechsel, Filter, Formulare, Task-Erstellung, Settings, Notifications und Iris-Modal bedient |
| Browserkonsole | Keine Fehler oder Warnungen im geprüften Ablauf |
| TypeScript | `npm run typecheck` erfolgreich |
| Komponententests | `npm test` erfolgreich |
| Sites-Build | `npm run build` erfolgreich |
| Worker-/SPA-Routing | `npm run test:sites` erfolgreich |
| Private Sites-Produktion | Version 2 erfolgreich; Dashboard, Run Control und zweistufige Approval-Interaktion bedient; keine aktuellen Workerfehler |
## Entscheidung
**Sites-Freigabe als Mockup: Go.**
**Produktiver Einsatz als Mission Control: No-Go.**
Der nächste Umsetzungsslice sollte nicht noch eine reine Übersichtsseite sein.
Er sollte `/runs` mit einer dauerhaften OpenClaw-Session, dem autoritativen
Eventstream und einer echten Approval-Grenze verbinden. Erst dann wird aus dem
visuellen Mission-Control-Versprechen eine belastbare Control Plane.
Binary file not shown.

After

Width:  |  Height:  |  Size: 385 KiB

@@ -0,0 +1,92 @@
Add-Type -AssemblyName System.Drawing
$auditDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path
function New-ContactSheet {
param(
[Parameter(Mandatory)]
[string[]]$Files,
[Parameter(Mandatory)]
[string]$OutputName,
[int]$Columns = 3
)
$thumbnailWidth = 360
$thumbnailHeight = 256
$labelHeight = 38
$cellPadding = 14
$cellWidth = $thumbnailWidth + ($cellPadding * 2)
$cellHeight = $thumbnailHeight + $labelHeight + ($cellPadding * 2)
$rows = [Math]::Ceiling($Files.Count / $Columns)
$sheet = New-Object System.Drawing.Bitmap ($cellWidth * $Columns), ($cellHeight * $rows)
$graphics = [System.Drawing.Graphics]::FromImage($sheet)
$graphics.Clear([System.Drawing.Color]::FromArgb(8, 12, 28))
$graphics.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic
$graphics.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::HighQuality
$font = New-Object System.Drawing.Font 'Segoe UI', 13, ([System.Drawing.FontStyle]::Regular)
$brush = New-Object System.Drawing.SolidBrush ([System.Drawing.Color]::FromArgb(229, 235, 255))
try {
for ($index = 0; $index -lt $Files.Count; $index++) {
$column = $index % $Columns
$row = [Math]::Floor($index / $Columns)
$x = ($column * $cellWidth) + $cellPadding
$y = ($row * $cellHeight) + $cellPadding
$sourcePath = Join-Path $auditDirectory $Files[$index]
$source = [System.Drawing.Image]::FromFile($sourcePath)
try {
$ratio = [Math]::Min($thumbnailWidth / $source.Width, $thumbnailHeight / $source.Height)
$drawWidth = [int]($source.Width * $ratio)
$drawHeight = [int]($source.Height * $ratio)
$drawX = $x + [int](($thumbnailWidth - $drawWidth) / 2)
$drawY = $y + [int](($thumbnailHeight - $drawHeight) / 2)
$graphics.DrawImage($source, $drawX, $drawY, $drawWidth, $drawHeight)
$label = [IO.Path]::GetFileNameWithoutExtension($Files[$index]) -replace '^\d+-', ''
$graphics.DrawString($label, $font, $brush, $x, ($y + $thumbnailHeight + 8))
}
finally {
$source.Dispose()
}
}
$outputPath = Join-Path $auditDirectory $OutputName
$sheet.Save($outputPath, [System.Drawing.Imaging.ImageFormat]::Png)
}
finally {
$brush.Dispose()
$font.Dispose()
$graphics.Dispose()
$sheet.Dispose()
}
}
New-ContactSheet -OutputName 'route-contact-sheet.png' -Files @(
'01-dashboard.png',
'02-run-control.png',
'03-login.png',
'04-agents.png',
'05-agent-detail.png',
'06-projects.png',
'07-project-detail.png',
'08-task-board.png',
'09-task-detail.png',
'10-memory.png',
'11-docs.png',
'12-models.png',
'13-activity.png',
'14-calendar.png',
'15-security.png',
'16-incidents.png',
'17-notifications.png',
'18-settings.png'
)
New-ContactSheet -OutputName 'evidence-contact-sheet.png' -Files @(
'00-baseline-login.png',
'19-run-control-1920.png',
'20-run-control-1024.png',
'21-memory-detail.png',
'22-doc-detail.png',
'23-incident-detail.png'
)
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB