Agent Zero
b8a556091e
fix(security): F10 (Astra P1) — Token-Scopes sind Obergrenze, kein Ersatz fuer User-Rechte
...
Vorher: require_permission machte bei passendem Token-Scope ein
early-return — die User-Rechte wurden NIE geprueft. Ein Token mit
mail:write erlaubte mail:write selbst dann, wenn der Benutzer die
Berechtigung nie hatte oder sie entzogen bekam (Astra-Repro isoliert
bestaetigt).
Fix: Nach bestandenem Scope-Check in den normalen User-Rechte-Check
fallen. Effektives Recht = User-Rechte UND Token-Scope. Rechteentzug
wirkt sofort auf bestehende Tokens. System-Admin-Bypass unveraendert.
Tests: tests/test_s1_security_guards.py 7/7 (neue Suite):
Scope-ohne-User-Recht 403, beide-present pass, Scope-fehlt-User-hat 403
insufficient_scope, Deny-Revocation wirkt, Session-Pfad unveraendert,
*:*-Scope umgeht nicht, Admin-Bypass bleibt. ruff clean.
2026-09-18 07:52:23 +02:00
Agent Zero
ea39cf4667
docs(progress): S1-Welle — F01+F02 (beide Astra-P0s) gefixt, deployed und live verifiziert
2026-09-17 23:03:13 +02:00
Agent Zero
824686c673
fix(security): F02 (Astra P0) — globale Login-Identitaet von Mandantenverwaltung trennen
...
Vorher: Ein Mandanten-Admin (users:write) konnte die globale User.email
und das Passwort JEDES Mitglieds seines Mandanten aendern. User ist
aber mandantenuebergreifend — derselbe Datensatz traegt Passwort und
Systemadmin-Flag; der Passwort-Reset nutzt die veraenderbare Adresse.
Ein Admin aus Mandant A konnte so die globale Reset-Adresse eines
gemeinsamen Benutzers umlenken (Astra-Repro: globale Feldaenderung
isoliert reproduziert).
Fix (routes/users.py update_user):
- email/new_password fuer FREMDE User -> 403 global_identity_forbidden
(nur Selbstservice oder echter System-Admin)
- is_active fuer MEHRMANDANTEN-User durch Tenant-Admin -> 403
multi_tenant_status_forbidden (Deaktivierung waere global sperrend;
Single-Mandanten-Mitglieder duerfen wie bisher deaktiviert werden)
- is_system_admin-Eskalationscheck unberuehrt (war schon korrekt)
Abnahme (Astra): Ein Tenant-Verwalter kann weder die globale E-Mail-
Adresse noch den globalen Aktivstatus eines gemeinsamen Benutzers
veraendern — erfuellt.
Tests: test_user_service.py 13/13 (5 neue F02-Tests: fremde E-Mail 403,
fremdes Passwort 403, Mehrmandanten-Deaktivierung 403, Name-Aenderung
bleibt 200, Selbstservice bleibt 200). ruff clean.
2026-09-17 22:58:38 +02:00
Agent Zero
f2a7206c7d
fix(security): F01 (Astra P0) — KI-Tool-Ausführung ohne Freigabe verhindern
...
Check Cross-Plugin Imports / check (push) Waiting to run
Vorher: _execute_tool (agent_loop.py) und der KI-Chat-Loop
(stream_chat_comm) führten JEDES im Registry registrierte Tool aus, wenn
das LLM dessen Namen lieferte — ohne Abgleich mit der angebotenen Liste,
ohne required_permission-Check. Reproduktion (Astra): Nur audit_allowed
angeboten, Modell nannte audit_restricted (system:admin) → Handler lief.
Fix (fail-closed, an ALLEN Ausfuehrungspfaden):
- _check_tool_access: (1) Allowlist — nur Tools die dem LLM angeboten
wurden duerfen laufen; (2) required_permission gegen die AKTUELLEN
User-Rechte (deny-first, Rechteentzug wirkt sofort, ohne Kontext =
Ablehnung). Guard vor dry-run/approval/execute-Pfaden.
- stream_chat_comm: gleicher Allowlist-Guard vor execute_tool_call.
- run_react_loop/agent_runner/agent_stream/agent_routes reichen
user_permissions durch (perm_ctx bzw. Session-User).
- check_permission: Session-Kontexte tragen denied_permissions statt
denied — beide Keys werden gelesen, Deny-Liste wird nie mehr ignoriert.
Tests: test_agent_loop.py 18/18 (7 neue F01-Tests nach Astra-Abnahme:
nicht angeboten → Handler null; fehlende Permission → abgewiesen;
Fail-closed ohne Kontext; Deny-Liste session-shape; Rechteentzug
mitten im Lauf wirkt auf naechste Aktion; dry-run guardet auch).
ruff clean. Pre-existing-Beweis: permission_system_live-Failures
reproduzieren sich ohne diesen Patch identisch (Plugin-Aktivierung in
ephemeraler Test-DB, bekanntes Vorbestands-Finding).
2026-09-17 22:48:59 +02:00
Agent Zero
8a26737680
docs(audit): Astra-Externaudit aufgenommen — 41 Findings verifiziert, PHASE S (4 Wellen) in Roadmap, Milestone 16, Issues #396-399
...
- docs/audits/astra-audit-2026-09-17.md: vollstaendiger Pruefbericht (2 P0, 29 P1, 10 P2), 10 Findings intern stichprobenartig verifiziert (alle korrekt)
- PLATFORM_ROADMAP.md: PHASE S (S1 Sicherheitsgrenzen, S2 Ausfuehrung verbinden, S3 Fachliche Integritaet, S4 Betriebsfreigabe) mit je Finding Korrektur+Abnahme; Abnahmeszenarien quer (Kontakt->Outbox->Worker->Suchindex->KI; Mail->Freigabe->Versand)
- Phase R: 8 Astra-Kritikpunkte eingearbeitet (externe Ueberwachung, Sollzustand-Vergleich, Heartbeat statt Queue, echte Prozesse, Modelldiscovery, E2E-Szenarien, Restore-Nachweis, 95%-Formulierung als Freigabekriterien)
- PROGRESS.md: Phase S als NÄCHSTE PHASE, Wellen-Issues verlinkt
2026-09-17 22:27:19 +02:00
Agent Zero
ee5545d58f
docs(roadmap): Phase R — Betriebssicherheit & 95%-Produktionsreife (R1-R6, Milestone 15, Issues #390-395)
2026-09-16 01:29:45 +02:00
Agent Zero
4b97a1bca2
docs: UI-Backlog 16/16 KOMPLETT — Module 15+16 ( #387 , #388 ) + Bugfixes 2026-09-16 ( #389 ) dokumentiert
2026-09-16 00:56:49 +02:00
Agent Zero
b91ee5bf1b
fix(security): Bearer-Requests von CSRF-Middleware ausnehmen
...
Die CSRF-Middleware verlangte Origin+X-CSRF-Token auf allen unsafe
Requests — auch auf Bearer-authentifizierten API-Calls (External-Agent-
API, MCP, Integrationen). Externe Systeme senden nie Origin/CSRF,
dadurch war /api/v1/external/agent/* faktisch unbrauchbar (403).
Fix: Authorization: Bearer-Header-Requests skippen die CSRF-Pruefung.
Bearer ist CSRF-immun per Design: Browser haengen den Authorization-
Header niemals automatisch an, Cross-Site-Requests koennen ihn nicht
schmuggeln. Session-Cookie-Requests (SPA) laufen unverändert durch die
volle Origin+Double-Submit-Pruefung.
Regression: pytest test_auth.py 11/11, ruff clean
2026-09-16 00:49:37 +02:00
Agent Zero
0383dd2f64
fix(plugins): ai_assistant Migrationen von gedroppten ai_chat-Tabellen befreien
...
Check Cross-Plugin Imports / check (push) Has been cancelled
Produktionsbug: Plugin ai_assistant war migration_failed/inactive, weil
Migration 0003 ALTER TABLE ai_chat_sessions ausfuehrte — die Tabelle wurde
von Alembic 0137 (2026-08-21, Umstieg auf comm-Tabellen) gedroppt. Bei jedem
Container-Start crashte die Migration und deaktivierte das Plugin
(KI-Chat und /api/v1/ai/* lieferten 403).
Fix:
- 0003: ai_chat_sessions-Statements entfernt, nur ai_chat_folders behalten
- 0001: Ghost-Tabellen ai_chat_sessions/ai_chat_messages entfernt
(frische Installs duerfen sie nicht rekreieren — Schema-Drift)
- 0002: ai_chat_attachments + toter folder_id-ALTER entfernt,
nur ai_chat_folders behalten
Runner skipt getrackte Migrationen per Dateiname (kein Hash-Check),
Prod-Risiko null; 0003 laeuft beim naechsten Start sauber durch und
aktiviert das Plugin wieder.
2026-09-16 00:43:04 +02:00
Agent Zero
e8e07fa13a
feat(ui): External-Agent-API + Besitzübertragung UI (UI-Backlog Module 15+16/16)
...
Check Cross-Plugin Imports / check (push) Has been cancelled
Modul 15 External-Agent (ai_assistant-Plugin, Manifest settings_page):
- SettingsExternalAgents.tsx: Agentenliste mit curl-Snippets (run/status/stream),
Copy-Buttons, Bearer-Token-Hinweis, Rate-Limit-Doku, Token-Link
- api/externalAgent.ts (useAiAgents, buildCurlSnippets, curlCommand)
- Manifest: settings_pages +external-agents (order 61, permission ai:read)
- Komponenten-Map regeneriert (43)
Modul 16 Ownership-Transfer (Core):
- SettingsOwnership.tsx: Admin-Gate, From/To-User-Selects, 10 Entity-Type-Chips,
ConfirmDialog, Ergebnis-Tabelle
- api/ownership.ts (useTransferOwnership, OWNERSHIP_ENTITY_TYPES)
- Route /settings/ownership + Nav-Eintrag
i18n de/en +28 Keys. Vitest 12/12, tsc 0, Build OK, ruff OK, Manifest-Import OK
2026-09-16 00:32:45 +02:00
Agent Zero
f38dfdeea1
docs: UI-Backlog Modul 14 (Guests) abgeschlossen — #386 , 14/16
2026-09-16 00:13:39 +02:00
Agent Zero
b3eaa0e39b
feat(ui): Gäste-Verwaltung UI — SettingsGuests (UI-Backlog Modul 14/16)
...
- api/guests.ts: useGuests, useInviteGuest, useRevokeGuest (/api/v1/guests)
- SettingsGuests.tsx: Admin-Gate (Outbox-Muster), Gästeliste mit Status-Badges
(invited/active/disabled), Invite-Modal (RHF+zod), Revoke-ConfirmDialog
- Route /settings/guests + Nav-Eintrag in Settings.tsx
- i18n de/en: 14 Keys
- Vitest 8/8, tsc clean, Build OK
2026-09-16 00:08:59 +02:00
Agent Zero
f8b07032e5
docs(progress): Konsistenz-Fix — Roadmap-Offen-Liste und HEAD-Referenz synchronisiert
2026-09-15 23:35:36 +02:00
Agent Zero
2d3ee216ea
docs(progress): Weitermachen-Uebergabe auf Stand 2026-09-15 aktualisiert — Bauplan + Session-Lektionen fuer jede KI
2026-09-15 23:35:07 +02:00
Agent Zero
b1c8891ee0
docs(progress): UI-Backlog Modul 13 (Public-Share) erledigt — live verifiziert ( #385 )
2026-09-15 23:22:29 +02:00
Agent Zero
2fbffcd6e8
fix(public-share): 404/410-Erkennung — ApiError.status statt err.response.status im Catch
2026-09-15 23:20:08 +02:00
Agent Zero
00f8f100d7
feat(public-share): Oeffentliche Share-Zugriffsseite fuer externe Besucher + SPA-Links im DMS-ShareDialog — Modul 13/16 des UI-Backlogs
2026-09-15 23:16:30 +02:00
Agent Zero
7097e28578
docs(progress): UI-Backlog Modul 12 (Companies) erledigt — live verifiziert ( #384 )
2026-09-15 23:01:37 +02:00
Agent Zero
06b72843da
feat(companies): UI fuer Firmen-Verwaltung mit Ansprechpartner-Links — Modul 12/16 des UI-Backlogs
Check Cross-Plugin Imports / check (push) Has been cancelled
2026-09-15 22:56:38 +02:00
Agent Zero
71ffee021e
docs(progress): UI-Backlog Modul 11 (Graph-RAG) erledigt — live verifiziert ( #383 )
2026-09-15 08:36:43 +02:00
Agent Zero
0404c8f5dc
feat(graph-rag): UI fuer Wissens-Graph mit BFS-Traversierung — Modul 11/16 des UI-Backlogs
Check Cross-Plugin Imports / check (push) Has been cancelled
2026-09-15 08:25:21 +02:00
Agent Zero
4eba9eb1d9
docs(progress): UI-Backlog Modul 10 (Policies) erledigt — live verifiziert ( #382 )
2026-09-14 23:43:41 +02:00
Agent Zero
d734923636
feat(policies): UI fuer ABAC-Richtlinien mit Conditions-Builder — Modul 10/16 des UI-Backlogs
2026-09-14 23:41:55 +02:00
Agent Zero
abdf9e7d83
docs(progress): Alle 3 Bugfixes dokumentiert — Webhook-JSONB ( #380 ), Spinner-Hang/Zustand-Selektoren ( #381 ), Registry-qualname
2026-09-14 08:35:12 +02:00
Agent Zero
fccf0099d7
fix(outbox): qualname nur fuer bound methods — plain functions behalten __name__ (test_outbox_phase5 17/17 gruen)
2026-09-14 08:31:50 +02:00
Agent Zero
591ef06a82
fix(outbox): Consumer-Registry zeigt qualname — unterscheidet gleichnamige Handler ueber Plugins hinweg
2026-09-14 08:29:07 +02:00
Agent Zero
dcd2018335
docs(progress): Spinner-Hang-Fix dokumentiert — Zustands-Selector war Dashboard-loads-forever-Ursache ( #381 )
2026-09-14 08:28:07 +02:00
Agent Zero
3fd0c6981d
fix(app-shell): instabile Zustands-Selektoren veroursachten haengende Lazy-Routen ("Dashboard loads forever") — Root Cause: moduleMenuOrder()/visibleModuleKeys() erzeugten bei jedem getSnapshot neue Map/Set-Objekte
2026-09-14 08:25:35 +02:00
Agent Zero
9076983c0c
docs(progress): Webhook-JSONB-Fix dokumentiert — 158 Events live repariert ( #380 )
2026-09-14 08:02:58 +02:00
Agent Zero
50d6733df6
fix(webhooks): JSONB-Containment statt .any() auf JSON-Spalte — behebt 158 fehlgeschlagene Outbox-Events
2026-09-14 07:55:07 +02:00
Agent Zero
36e46f60f7
docs(progress): UI-Backlog Modul 9 (Outbox) erledigt — live verifiziert ( #379 )
2026-09-14 00:23:12 +02:00
Agent Zero
31154b9dc6
feat(outbox): UI fuer Event-Outbox — Modul 9/16 des UI-Backlogs
2026-09-13 23:13:58 +02:00
Agent Zero
00bfcafb9c
docs(progress): Vollstaendige Uebergabe — offene Threads zentral dokumentiert (UI-Backlog 9-16, Re-Audit, Traefik, Server, Phase O/P, Findings, Marketplace leer)
2026-09-13 19:57:17 +02:00
Agent Zero
5ecadd5a89
docs(roadmap): UI-Backlog als eigenstaendiger Abschnitt — Status 8/16, Regeln fuer Plugin- vs Core-Registrierung
2026-09-13 19:56:57 +02:00
Agent Zero
0388ca2072
docs(progress): UI-Backlog Modul 8 (Agent-Memory) erledigt — live verifiziert ( #378 )
2026-09-13 19:47:00 +02:00
Agent Zero
24423b6802
feat(agent-memory): UI fuer Agent-Memories mit semantischer Suche — Modul 8/16
...
Check Cross-Plugin Imports / check (push) Has been cancelled
Drittes Modul via Phase-Q-Manifest-Architektur: Registrierung komplett
ueber das agent_memory-Plugin-Manifest (page_route /agent-memory +
menu_item, Brain-Icon) — routes/index.tsx unangetastet. Komponenten-Map
mit 40 Eintraegen.
Zusaetzlicher Fix: Sidebar-ICON_MAP um Brain, Store, Tags erweitert —
Marketplace (Store) und Tags zeigten bisher Fallback-Icons, weil die
Manifest-Icons nicht in der kuratierten Map standen.
Backend existierte vollstaendig (create mit Embedding, list mit
agent_id-Pflichtfilter + Typ + Pagination, semantische Suche via pgvector,
update mit Embedding-Regeneration, delete; agent_memory:read/write),
Frontend hatte 0% Abdeckung.
- api/agentMemory.ts: TanStack-Hooks (useAgentMemories mit
enabled-Gating, useAgentMemorySearch, create/update/delete)
- pages/AgentMemory.tsx: Agent-Picker (Pflichtfeld — Backend filtert
zwingend nach agent_id), Pick-Agent-Prompt, semantische Suche mit
Relevanz-Score-Badges und Clear, Memory-Karten mit Typ-Badges
(fact/context/pattern/instruction), Create/Edit-Dialog, Delete mit
Confirm — Aktionen hinter agent_memory:write
- i18n agentMemory.* + nav.agentMemory de/en
Verifikation: Vitest 11/11 (Agent-Picker-Pflicht, Pick-Prompt, Badges,
Suche mit Score + Clear, Create/Edit prefilled, Delete mit+ohne Confirm,
Gating, Empty/Error) · tsc exit 0 · production build exit 0 ·
Backend-Regressionen (route-order, m5-miniapps) 10/10 · compileall
sauber · Manifest-Check OK.
2026-09-13 19:45:18 +02:00
Agent Zero
e7b746809b
docs(progress): UI-Backlog Modul 7 (Skills) erledigt — live verifiziert ( #377 )
2026-09-13 10:37:43 +02:00
Agent Zero
3f8d1bd59d
feat(skills): UI fuer AI-Skill-Definitionen — Modul 7/16 des UI-Backlogs
...
Check Cross-Plugin Imports / check (push) Has been cancelled
Zweites Modul via Phase-Q-Manifest-Architektur: Registrierung komplett
ueber das automation-Plugin-Manifest (page_route /skills + menu_item,
Sparkles-Icon) — routes/index.tsx und Sidebar.tsx unangetastet. Der
Komponenten-Map-Generator wired den lazy import (39 Komponenten).
Backend existierte vollstaendig im automation-Plugin (skill_routes.py:
list mit is_active/category-Filtern, create, get, patch, delete;
automation:read/write/delete), Frontend hatte 0% Abdeckung.
- api/skills.ts: TanStack-Hooks (useSkills mit Filtern, useSkill,
create/update/delete mit Cache-Invalidierung)
- pages/Skills.tsx: Filter-Tabs (alle/aktiv/inaktiv), Skill-Karten (Name,
Aktiv/Inaktiv-Badge, Kategorie, Beschreibung, Tool-Count),
Create/Edit-Dialog (Name, Beschreibung, Instructions-Textarea, Kategorie,
Tool-IDs als Komma-Liste, Aktiv-Toggle), Delete mit Confirm —
Create/Edit hinter automation:write, Delete hinter automation:delete
- i18n skills.* + nav.skills de/en
Hinweis: Skills sind Orchestrierungs-Metadaten, KEINE
Berechtigungsquelle — erlaubte Tools verweisen auf Tool-IDs, fuer die
Agent und User bereits berechtigt sein muessen (Backend-Docstring).
Verifikation: Vitest 10/10 (Filter-Tabs, Badges inkl. Inaktiv, Tool-Count,
Create-Flow, Edit prefilled, Delete mit+ohne Confirm, separates
Write/Delete-Gating) · tsc exit 0 · production build exit 0 ·
Backend-Regressionen (route-order, m5-miniapps, n4-scope) 28/28 ·
compileall sauber · Cross-Plugin-Checker 0 · Manifest-Check: page_route
+ menu_item korrekt.
2026-09-13 10:36:02 +02:00
Agent Zero
a09d611cac
docs(progress): UI-Backlog Modul 6 (Permission-Templates) erledigt — live verifiziert ( #376 )
2026-09-13 10:27:50 +02:00
Agent Zero
33b4b52206
feat(templates): UI fuer Berechtigungs-Vorlagen — Modul 6/16 des UI-Backlogs
...
Backend existierte vollstaendig (list mit entity_type-Filter, create, update,
delete, apply — templates:read/write, seit Audit-Fix im Katalog), Frontend
hatte 0% Abdeckung.
- api/permissionTemplates.ts: TanStack-Hooks (usePermissionTemplates,
create/update/delete/apply mit Cache-Invalidierung, TemplateLevel-Typ)
- pages/PermissionTemplates.tsx: Template-Karten (Name, Level-Badge,
Entity-Type, Auto-Share-Zusammenfassung), Create/Edit-Dialog mit
Level-Select und JSON-Textarea inkl. Array-Validierung mit Fehlertext,
Apply-Dialog (Entity-Type vorbelegt, Entity-ID), Ergebnis-Banner mit
Anzahl erstellter Berechtigungen, Delete mit Confirm — alle Aktionen
hinter templates:write gegated
- Platzierung: Settings-Subpage /settings/permission-templates (statisch,
Core-Route) + Settings-Nav-Item
- i18n permissionTemplates.* de/en
Verifikation: Vitest 10/10 (Rendering, Level-Badges, Create mit validem +
invalidem JSON, Edit prefilled, Apply mit Ergebnis, Delete-Confirm,
Permission-Gating, Empty/Error) · tsc exit 0 · production build exit 0.
2026-09-13 10:27:10 +02:00
Agent Zero
c99d2f19ef
docs(progress): UI-Backlog Modul 5 (Marketplace) erledigt — live verifiziert ( #375 )
2026-09-13 09:46:18 +02:00
Agent Zero
289dfc8230
feat(marketplace): UI fuer Plugin-Marketplace — Modul 5/16 des UI-Backlogs
...
Check Cross-Plugin Imports / check (push) Has been cancelled
ERSTES Modul ueber die Phase-Q-Plugin-Architektur: Registrierung komplett
ueber das Plugin-Manifest (page_routes + menu_items) — routes/index.tsx und
Sidebar.tsx wurden NICHT angefasst. Der Komponenten-Map-Generator wired den
lazy import automatisch (38 Komponenten).
Backend existierte vollstaendig (listings mit search/tags/pagination,
listing-detail, install mit Ed25519-Signatur-Verify, verify, categories;
marketplace:read/admin + require_admin fuer Install), Frontend hatte 0%
Abdeckung.
- api/marketplace.ts: TanStack-Hooks (useMarketplaceListings mit
search/tags/pagination, useMarketplaceListing, useMarketplaceCategories,
useInstallFromMarketplace, useVerifyMarketplacePlugin)
- pages/Marketplace.tsx: Suche, Tag-Filter-Chips, Listing-Karten (Name,
Version, Author, Beschreibung, Tags, Download-Counter, Verified-Badge,
Preis/Kostenlos), Install mit Confirm (Admin-only via is_system_admin),
Signatur-Verify, Ergebnis-Banner, Pagination — No-Access-Card ohne
marketplace:read
- Manifest: page_route /marketplace + menu_item (Store-Icon, order 85,
permission marketplace:read)
- i18n marketplace.* + nav.marketplace de/en
Verifikation: Vitest 10/10 (Rendering, No-Access, Empty/Error, Karten,
Search+Tags, Admin-Gating, Install-Flow mit+ohne Confirm, Verify-Flow) ·
tsc exit 0 · production build exit 0 · Backend-Regressionen
(route-order, m5-miniapps) 10/10 · compileall sauber · Manifest-Check:
page_route + menu_item korrekt.
2026-09-13 09:44:28 +02:00
Agent Zero
a3201ae221
docs(progress): UI-Backlog Modul 4 (Tenants) erledigt — live verifiziert ( #374 )
2026-09-13 09:30:21 +02:00
Agent Zero
79ca1cbe6d
feat(tenants): UI fuer Mandanten-Verwaltung — Modul 4/16 des UI-Backlogs
...
Backend existierte vollstaendig (list, create, list users, assign user;
tenants:read/write), Frontend hatte 0% Abdeckung.
- api/tenants.ts: TanStack-Hooks (useTenants, useTenantUsers mit
enabled-Gating, create, assignUser mit Cache-Invalidierung)
- pages/Tenants.tsx: Tenant-Karten (Name, Slug, Standard-Badge),
expandierbare User-Liste pro Tenant (Rolle, E-Mail), Create-Dialog
(Name + Slug mit Auto-Normalisierung), Assign-User-Dialog mit
User-Picker (bereits zugewiesene gefiltert) — Create/Users/Assign
hinter tenants:write gegated
- Platzierung: Settings-Subpage /settings/tenants (statisch, Core-Route)
+ Settings-Nav-Item
- i18n tenants.* de/en
Verifikation: Vitest 8/8 (Rendering, Standard-Badge, Expand-User-Liste,
Create-Flow, Assign-Flow, Permission-Gating, Empty/Error) · tsc exit 0 ·
production build exit 0.
2026-09-13 09:29:42 +02:00
Agent Zero
8d8beebd38
docs(progress): UI-Backlog Modul 3 (API-Tokens) erledicht — live verifiziert ( #373 )
2026-09-13 09:23:42 +02:00
Agent Zero
4bdc6c66c7
feat(api-tokens): UI fuer Bearer-Tokens — Modul 3/16 des UI-Backlogs
...
Backend existierte vollstaendig (POST create mit Einmal-Plaintext-Anzeige,
GET list ohne Hashes, DELETE revoke; mcp:read/mcp:write via mcp_server-
Plugin registriert), Frontend hatte 0% Abdeckung.
- api/apiTokens.ts: TanStack-Hooks (useApiTokens, create mit
ApiTokenCreated-Response inkl. Einmal-Token, revoke)
- pages/ApiTokens.tsx: Token-Karten (Name, Scope-Badges, Ablauf, zuletzt
genutzt, Abgelaufen-Badge), Create-Dialog (Name, Scopes als
Komma-Liste, optionale Gueltigkeit in Tagen), EINMALIGE
Plaintext-Anzeige mit Copy-Button und Warnung, Revoke mit Confirm —
Aktionen hinter mcp:write gegated
- Platzierung: Settings-Subpage /settings/api-tokens (statisch, Core-Route)
+ Settings-Nav-Item (true-core-settings-Muster)
- i18n apiTokens.* de/en
Verifikation: Vitest 8/8 (Rendering, Scopes, Ablauf-Badge,
Permission-Gating, Create-Flow mit Reveal-Dialog, Revoke) · tsc exit 0 ·
production build exit 0.
2026-09-13 09:23:01 +02:00
Agent Zero
f9ff92bec9
docs(progress): UI-Backlog Modul 2 (Delegations) erledigt — live verifiziert ( #372 )
2026-09-13 09:18:33 +02:00
Agent Zero
36771d471d
feat(delegations): UI fuer Berechtigungs-Delegationen — Modul 2/16 des UI-Backlogs
...
Backend existierte vollstaendig (5 Endpoints: list/create/update/delete/
active-check, delegations:read/write seit Audit-Fix im Katalog), Frontend
hatte 0% Abdeckung. Modul folgt dem Approvals-Muster (Modul 1):
- api/delegations.ts: TanStack-Hooks (useDelegations mit direction-Filter,
useActiveDelegations, create/update/delete-Mutations mit Cache-Invalidierung)
- pages/Delegations.tsx: Richtungstabs (alle/von mir/an mich), Karten mit
Phasen-Badges (aktiv/geplant/abgelaufen/inaktiv), Erstellen-Dialog mit
Empfaenger-Picker (useUsers, sich selbst ausschliessend), Start/Ende-
Datetime, Scope-Toggle (alle Berechtigungen), Aktivieren/Deaktivieren,
Loeschen mit Confirm — Aktionen hinter delegations:write gegated
- Route /delegations (PermissionRoute delegations:read) — als Core-Route
bewusst statisch registriert (Phase-Q-Regel: nur Plugin-Routen laufen
ueber Manifeste) Sidebar-Entry order 92 (ArrowRightLeft-Icon)
- i18n delegations.* + nav.delegations de/en
Verifikation: Vitest 9/9 (Rendering, Tabs, Phasen, Permission-Gating,
Create-Flow, Toggle, Delete) · tsc exit 0 · production build exit 0.
2026-09-13 09:17:17 +02:00
Agent Zero
b58c96ff71
feat(arch): Phase Q abgeschlossen — Plugin-Manifeste sind die einzige Frontend-Routen-Quelle
...
PROGRESS.md: Phase-Q-Section mit Live-Beweisen. PLATFORM_ROADMAP.md: Phase Q auf
ABGESCHLOSSEN (Q1-Q4 komplett, Commits 895f85d + b666fe5 , deployed).
Nächster Schritt: Re-Audit durch den externen Prüfer.
2026-09-13 08:58:34 +02:00
Agent Zero
b666fe5b4c
feat(frontend): Q1+Q2 — Plugin-Routen kommen aus Manifesten, statische Duplikate entfernt
...
Check Cross-Plugin Imports / check (push) Has been cancelled
Phase Q1 (Seiten-Routen) + Q2 (Settings-Routen): Die Plugin-Manifeste sind
ab sofort die einzige Quelle fuer Plugin-Frontend-Routen. routes/index.tsx
enthaelt nur noch Core-Routen + die StartLayout-Hub-Baeume (/agents,
/automation, /logs, /help — verschachtelte Sub-Navigation).
- PluginRouteRenderer: variante 'settings' rendert settings_pages mit
bare Sub-Segments (Descendant-Matching im /settings-Subtree); Variante
'pages' (Default) behaelt absolute Pfade. Getrennte Entry-Listen
verhindern Pfad-Kollisionen (settings 'mail' vs. page '/mail').
- Entfernt: 14 statische AppShell-Plugin-Routen + 9 statische
Settings-Routen + 20 tote Lazy-Imports (search, calendar+kanban, dms,
dms/trash, mail, mail/settings, reports, tasks, communication,
workflows, import-export, tags, wiki, roles, users, groups,
notifications, ai, ai-proactive, automation, documents).
- Manifeste ergaenzt: Calendar +/calendar/kanban, Tags +/tags (+ Menue-Item,
Route war sonst unerreichbar), Automation: /workflows-Permission auf
workflows:read (Paritaet zur ersetzten statischen Route).
- Automation: tote flache Manifest-Eintraeger fuer /agents + /automation
entfernt (StartLayout-Hub-Baeume gewinnen diese Pfade immer — die
Eintraege matchten nie).
- Komponenten-Map regeneriert (37 Eintraege, CalendarKanban + Tags neu).
Verifikation: tsc exit 0; production build exit 0; Vitest Dashboard +
MiniAppWindow + pluginStore 35/35; Backend-Regressionen Route-Order,
M5-MiniApps, N4-Scope, N3-Filtering 49/49; compileall sauber;
Cross-Plugin-Checker 497 Dateien / 0 verbotene Imports; ruff clean.
2026-09-13 08:56:29 +02:00