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.
This commit is contained in:
Agent Zero
2026-09-13 08:56:29 +02:00
parent 895f85dde0
commit b666fe5b4c
6 changed files with 81 additions and 72 deletions
+5 -14
View File
@@ -102,7 +102,7 @@ class AutomationPlugin(BasePlugin):
path="/workflows",
icon="Workflow",
order=52,
permission="automation:read",
permission="workflows:read",
),
FrontendMenuItem(
label_key="nav.importExport",
@@ -137,24 +137,15 @@ class AutomationPlugin(BasePlugin):
permission="contacts:read",
),
],
# Phase Q1: /agents and /automation are served by the static
# StartLayout hub trees (sub-navigation). Flat manifest entries for
# them were dead duplicates (never matched) and were removed.
page_routes=[
FrontendPageRoute(
path="/automation",
component="@/pages/AutomationDashboard",
order=50,
permission="automation:read",
),
FrontendPageRoute(
path="/agents",
component="@/pages/AgentDashboard",
order=51,
permission="agents:read",
),
FrontendPageRoute(
path="/workflows",
component="@/pages/Workflows",
order=52,
permission="automation:read",
permission="workflows:read",
),
FrontendPageRoute(
path="/import-export",
+2
View File
@@ -64,6 +64,8 @@ class CalendarPlugin(BasePlugin):
],
page_routes=[
FrontendPageRoute(path='/calendar', component='@/pages/Calendar', protected=True, permission='calendar:read'),
# Q1: kanban view was static-only before - now manifest-declared.
FrontendPageRoute(path='/calendar/kanban', component='@/pages/CalendarKanban', protected=True, permission='calendar:read'),
],
# BUG (ghost component): ContactCalendarTab does not exist in the
# frontend — tab removed until implemented (Block I-D).
+21 -1
View File
@@ -3,7 +3,7 @@
from __future__ import annotations
from app.plugins.base import BasePlugin
from app.plugins.manifest import PluginManifest, PluginRouteDef
from app.plugins.manifest import FrontendMenuItem, FrontendPageRoute, PluginManifest, PluginRouteDef
class TagsPlugin(BasePlugin):
@@ -30,6 +30,26 @@ class TagsPlugin(BasePlugin):
"tags:delete",
"tags:admin",
],
# Q1: the /tags page was a static-only route before - now
# manifest-declared (route + sidebar menu item).
menu_items=[
FrontendMenuItem(
label_key="nav.tags",
label="Tags",
path="/tags",
icon="Tags",
order=80,
permission="tags:read",
),
],
page_routes=[
FrontendPageRoute(
path="/tags",
component="@/pages/Tags",
protected=True,
permission="tags:read",
),
],
is_core=True,
# BUG (ghost component): ContactTagsTab does not exist in the
# frontend — tab removed until implemented (Block I-D).