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
This commit is contained in:
Agent Zero
2026-09-01 08:31:30 +02:00
parent c25356c257
commit b40adfdd3a
8 changed files with 698 additions and 30 deletions
+9
View File
@@ -1595,5 +1595,14 @@
"noBlocks": "KI hat keine gültigen Blöcke vorgeschlagen",
"failed": "KI-Vorschlag fehlgeschlagen"
}
},
"workspaces": {
"scopeEditor": {
"hint": "Nichts ausgewählt = keine Einschränkung. Filter können nur einschränken, nie erweitern.",
"noRestriction": "Keine Einschränkung",
"noDimensions": "Für dieses Modul sind keine Filter verfügbar.",
"noValues": "Keine Werte verfügbar",
"loadError": "Werte konnten nicht geladen werden"
}
}
}
+9
View File
@@ -1595,5 +1595,14 @@
"noBlocks": "AI did not suggest valid blocks",
"failed": "AI suggestion failed"
}
},
"workspaces": {
"scopeEditor": {
"hint": "Nothing selected = no restriction. Filters can only restrict, never extend.",
"noRestriction": "No restriction",
"noDimensions": "No filters available for this module.",
"noValues": "No values available",
"loadError": "Failed to load values"
}
}
}