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
Agent Zero
895f85dde0
feat(frontend): Q3+Q4 — Komponenten-Chunk-Map wird aus Plugin-Manifesten GENERIERT
...
Check Cross-Plugin Imports / check (push) Has been cancelled
scripts/generate_component_map.py scannt alle builtin-Manifeste + system_miniapps.py
und erzeugt frontend/src/generated/pluginComponents.generated.ts (37 Komponenten).
PluginLoader (STATIC_COMPONENT_MAP) und MiniAppHost (widgetRegistry) nutzen die
generierte Map — ein Plugin meldet seine Komponenten nur noch im Manifest,
keine zentrale Frontend-Datei muss angefasst werden.
Garantien: Generator failt hart bei Ghost-Komponenten (bewiesen: exit 1),
erkennt default- vs. named-exports, deterministische Ausgabe, --check-Modus
fuer CI. Kontakts DedupMergePage-Pfad-Alias auf echte Datei korrigiert.
Verifikation: tsc exit 0; production build exit 0; Ghost-Fail-Hard exit 1;
Dashboard+MiniAppWindow 17/17; pluginStore 18/18; keine Restreferenzen auf
STATIC_COMPONENT_MAP/widgetRegistry.
2026-09-13 08:40:39 +02:00
Agent Zero
dbe9ded4f1
docs(progress): Audit-Section vervollstaendigt — Live-Beweise (12/12 Keys, modules=24), Korruption repariert
2026-09-13 02:39:15 +02:00
Agent Zero
1b80090ad2
fix(plugins): forgejo_error_reporter permissions korrekt auf Manifest-Ebene
...
Check Cross-Plugin Imports / check (push) Has been cancelled
Der vorherige Patch hatte permissions=["system:read"] versehentlich in die
PluginRouteDef-kwargs gesetzt statt auf Manifest-Ebene — der Key blieb
dadurch unregistriert (live bewiesen: nur 11/12 Keys im Produktionskatalog
sichtbar). Korrigiert; Test f9 prueft jetzt die ECHTEN Manifeste statt
manueller Registrierung, so haette der Fehler ab sofort gefangen werden
muessen.
Verifikation: tests/test_audit_architecture_fixes.py 17/17,
manifest.permissions=['system:read'], is_core=False, routes=1.
2026-09-13 02:35:52 +02:00
Agent Zero
4210e164fa
docs(progress): Audit-Fixes — Issue #370 verlinkt
2026-09-13 02:25:29 +02:00
Agent Zero
4a25ac1379
fix(arch): externes Audit — 13 Backend-Fixes (Workspace-Modules, Tenant-Manifeste, Lifecycle, Contracts, Permissions)
...
Check Cross-Plugin Imports / check (push) Has been cancelled
Verifikation: Alle 17 Audit-Findings gegen den Code geprueft — alle bestaetigt.
Backend-Lifecycle-Fixes umgesetzt; 4 Frontend-Plugin-Architektur-Punkte
als Phase Q in die Roadmap eingeplant.
- P1 list_workspaces: Module + User-Counts gebuendelt laden (Editor-Overwrite-Bug)
- P1 active-manifests: Tenant-Deaktivierung (tenant_plugin_activation) filtern
- P1 uninstall: volle Service-Deactivation VOR registry.uninstall()
- P1 ContractRegistry: DB-Aktivstatus-Guard (Restart-Edge-Case) + Re-Activate
- P1/P2 Field-Definitions: voller Lifecycle (register/unregister) im Service
- P1/P2 Contact-Felddefinitionen (39) ins ContactsPlugin-Manifest verschoben
- P1 12 fehlende Permission-Keys registriert (AST-Scan: 0 fehlend)
- P2 contact_folder -> ContactsPlugin; ENTITY_PLUGIN_OWNERS wird befuellt
- P2 Entity-Permission-Fallback fail-closed statt contacts:read
- P2 forgejo_error_reporter is_core=False; DMS is_core=True (ADR-020)
- P2 Worker: Contacts-Trash-Cleanup ins Plugin (get_job_modules-Discovery)
- P1/P2 DSGVO-Export delegiert an DSAR-Collector (kein Core->Contacts)
- P2 False-green Tests korrigiert (or True, veraltete Route-Count-Assertion)
Verifikation: tests/test_audit_architecture_fixes.py 17/17; Regressionen
gruen (contacts_lifecycle, entity_registry, workspace_scopes, rbac,
lifecycle_service); Combo-Order-Test 35/35; Cross-Plugin-Checker 497/0;
compileall sauber; ruff auf 7-Error-Baseline.
Doku: PROGRESS.md Audit-Section, PLATFORM_ROADMAP.md Phase Q (Q1-Q4),
plugin-development-guide.md Lifecycle, permissions.md Katalog.
2026-09-13 02:25:01 +02:00
Agent Zero
86cea5d6c4
fix(frontend): Interceptor normalisiert ALLE apiClient-URLs — auch Direktaufrufe und Cache-Alte-Chunks
...
Der apiX-Wrapper-Fix (744f2a1 ) heilte nur Wrapper-Aufrufe. Produktion-Logs
zeigten: POST /api/v1/api/v1/ai-proactive/context → 405 (4x vom User-
Browser mit alten gecachten Chunks). Der Request-Interceptor strippt jetzt
redundante /api/v1-Präfixe auf Transport-Ebene — heilt auch Direkt-
apiClient-Calls und stale Cache-Artefakte transparent.
2026-09-12 00:32:42 +02:00
Agent Zero
ac5edef3dc
docs(progress): UI-Backlog-Tracking — 16 UI-lose Module, Modul 1 (Approvals) erledigt ( #369 )
2026-09-08 23:33:43 +02:00
Agent Zero
ecc7a24c1c
feat(approvals): UI für Freigaben — Review-Queue mit Approve/Reject (Modul 1/16)
...
Backend:
- Phantom-Permission-Bug gefixt: approvals:read/write/approve fehlten in
CORE_PERMISSIONS (Rollen konnten sie nie zugewiesen bekommen — gleiche
Fehlerklasse wie dashboard:read in M2)
Frontend:
- api/approvals.ts: TanStack Hooks (list/detail/approve/reject/expire/create)
- pages/Approvals.tsx: Review-Queue — Status-Tabs (Offen/Alle/Genehmigt/
Abgelehnt/Abgelaufen), Karten mit Aktion/Entity/Requester/Metadata,
Approve/Reject mit Kommentar-Modal, Permission-Gating (approvals:approve)
- Route /approvals (PermissionRoute approvals:read), Sidebar-Eintrag
- i18n approvals.* + nav.approvals (de/en)
Verifikation: Vitest 10/10 (Rendering, Tabs, Approve/Reject-Flow,
Kommentar, Permission-Gating, Resolved-Zustände), RBAC-Regression 102/102,
tsc clean, Build OK
2026-09-08 23:26:56 +02:00
Agent Zero
4eb05d96ad
fix(frontend): downloadIcsFile rief nicht existierenden Endpoint auf — auf echten ics-feed umgestellt
...
- Vorher: apiClient.get('/calendar/{id}/ics-feed-public') — Endpoint
existiert im Backend nie (live 404 bewiesen via curl; Reverse-Check aus
der Frontend-Backend-Gegenüberstellung)
- Jetzt: nutzt getIcsFeedUrl() mit optionalem Token — derselbe Fluss wie
IcsControls (Backend auto-generiert ics_token beim ersten Hit)
- Funktion war tot (kein Aufrufer), aber garantiert kaputt für jeden
künftigen Nutzer des Download-Buttons
2026-09-08 23:05:57 +02:00
Agent Zero
744f2a1dbf
fix(frontend): URL-Normalisierung gegen Doppel-Präfix — Workspace-UI & Permission-Refresh in Produktion repariert
...
Problem: Axios baseURL '/api/v1' + 16 apiX-Calls mit vollem Präfix
('/api/v1/workspaces/...') ergaben '/api/v1/api/v1/...' → 404 live
(bewiesen per curl + Node). Betroffen: komplette Workspace-UI
(Switcher, Manager, Phase-N-Scope-Editor) + Permission-Refresh.
Fix (Defense-in-Depth):
- normalizeApiUrl() in client.ts: alle apiX-Wrapper strippen redundanten
'/api/v1'-Präfix — deckt auch DYNAMISCHE Backend-Contract-Endpoints
(N2-Scope-Editor-Wertquellen) ab, die Call-Sites nicht umschreiben können
- workspaces.ts + useUserPermissions.ts auf relative Pfade gesäubert (16 Calls)
Tests: clientUrl 8/8 neu (Normalisierung + Wrapper-Beweis), tsc clean,
Build OK, Workspace-Regression 3 Dateien grün
2026-09-08 22:53:11 +02:00
Agent Zero
03dd477899
feat(N4): Restliche Module — Tasks/Kommunikation/Wiki/Reports/Agents/Tags/Search + Navigation + Dashboard-Schnittstelle ( #368 )
...
Check Cross-Plugin Imports / check (push) Has been cancelled
- Scope-Deklarationen: tasks only_mine, kommunikation conversation_ids, wiki category_ids (NEUE contracts.py), report_generator template_ids, automation agent_ids (module_key agents), tags tag_ids, unified_search entity_types dynamisch aus Provider-Registry
- Core-Beiträge: navigation default_route (Startseite) + dashboard widget_app_ids (Widget-TYP-Angebot, Layout bleibt Phase M)
- Backend-Filter (additive UND): /tasks (only_mine), /comm/conversations, /wiki/articles+/categories (Subtree), /reports/print-templates, /agents, /tags, /search GET+POST (entity_types-Schnitt), /miniapps?host=dashboard
- apply_entity_type_scope-Helper (requested ∧ scope)
- Frontend: WorkspaceSwitcher default_route-Navigation, Sidebar workspace-menu_order-Sortierung, workspaceStore moduleMenuOrder()
- Tests: 18/18 Deklarationen + 11/11 Filter (TDD), Frontend 2/2 + Store 18/18, tsc clean, Build OK
- Regression 64 passed (4 Kombi-Failures = Suite-Isolation, solo-bewiesen); Checker 0; Ruff = Vorbestand (Stash-bewiesen)
2026-09-01 23:23:15 +02:00
Agent Zero
26506a5027
feat(N3): Backend respektiert X-Workspace-ID bei Listen — contacts/dms/mail/calendar ( #367 )
...
Check Cross-Plugin Imports / check (push) Has been cancelled
- Core-Resolver resolve_workspace_scope(): Zuweisungs-Check, leere Werte fallen weg; Exemptions System-Admin + workspaces:configure_modules (Editor-Deadlock)
- require_workspace_scope(module_key) FastAPI-Dependency (deps.py)
- expand_folder_scope(): Ordner-Subtree (zyklensicher) für ContactFolder + DMS Folder; scope_uuid_set() fail-closed
- contacts: folder_ids-Subtree + contact_types auf GET /contacts, List-Cache bei aktivem Scope deaktiviert (Cache-Leak-Gefahr)
- dms: folder_ids-Subtree + file_types (semantische Matcher) auf /files, Baum-Reduktion auf /folders
- mail: account_ids auf /mails, /threads, /accounts
- calendar: calendar_ids auf /calendar/entries, /calendars
- Frontend-Defaults: getModuleConfig() im workspaceStore, ContactsList default_saved_view_id, Calendar default_view
- Tests: 21/21 neu (TDD rot→grün), Regression 81 passed, Checker 0, tsc clean, Vitest grün, Build OK
2026-09-01 10:27:23 +02:00
Agent Zero
b40adfdd3a
feat(N2): Dynamischer Scope-Editor — WorkspaceScopeEditor ersetzt JSON-Textarea ( #366 )
...
- WorkspaceScopeEditor.tsx: generisches Filter-UI aus /scope-definitions (multiselect mit value_source-Fetch, select mit Keine-Einschränkung-Placeholder, toggle) — WidgetSettingsForm-Philosophie
- resolveScopeItems: Wertequellen-Auflösung (items-Wrapper, Root-Listen, DMS-Ordner-Baum-Flattening), nie-crashend
- Hooks: useWorkspaceScopeDefinitions + useScopeValues (TanStack Query, staleTime 60s)
- WorkspaceManager: JSON-Textarea entfernt, Scope-Editor inline pro sichtbarem Modul, Speicherung in workspace_modules.config
- i18n: workspaces.scopeEditor.* 5 Keys de/en (Security-Invariante im UI: nichts ausgewählt = keine Einschränkung)
- Tests: 21/21 (TDD rot 4→grün), tsc clean, Production-Build OK
2026-09-01 08:31:30 +02:00