feat(agenten): Runde 10 Prompt 1 — gemeinsame Bearbeitung für Aufgaben, Systeme und Kanäle

Aufgaben, Systeme und Kanäle werden alle drei als Liste geführt und ab jetzt
auch gleich bearbeitet: anlegen, ändern, entfernen, zu- und abschalten — dort,
wo man sie sieht. Die Maske und die drei Listengriffe stehen einmal zentral
statt dreimal je Reiter; sonst unterscheiden sie sich nach der ersten Korrektur.

- AgentEntityDialog: eine Maske für alle drei Entitäten, über den React-
  Schlüssel je Eintrag neu aufgebaut statt über einen Effekt zurückgesetzt
- agentEntityEditing: upsertById, removeById, newEntityId als reine Funktionen
- Systeme sind über Provider, Service und Hook schreibbar (saveSystems) und
  tragen neu einen Aktiv-Schalter
- Systemreiter: eine einzige Liste statt «Lesende»/«Schreibende Systemzugänge»,
  kein Einleitungsbalken mehr; Aktiv, Zugriff und Verbindung stehen je Eintrag
- Thomas steht als «Agentenverwalter» in der Navigation, zählt aber nicht als
  sechster Agent in Sitzungszimmer, Auslastung und Begrüssung
- Chatverlauf scrollt in sich, ohne die Seite springen zu lassen

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Benjamin SutterandClaude Opus 5 committed 2026-09-12 22:41:34 +02:00
1 parent c6f3b2d6e3
commit 1c4b3f7dd8
15 files changed
+952 -131

No files matched your search

@@ -11,7 +11,7 @@ import { describe, it, expect } from 'vitest'
import { WORKSPACE_CONFIG, getPageNameFromPath } from '../appShellConfig'
import { WorkspaceType } from '../../../domain/enums'
import { HOME_NAV_LABEL, MY_AGENTS_LABEL, ROUTES } from '../../../lib/constants'
import { AGENT_WORKSPACES } from '../../../lib/agentWorkspaces'
import { AGENT_NAV_ENTRIES } from '../../../lib/agentWorkspaces'
const supplyNav = WORKSPACE_CONFIG[WorkspaceType.SUPPLY].navItems
@@ -47,9 +47,9 @@ describe('Navigationseintrag «Meine Agenten»', () => {
expect(agenten?.path).toBe(ROUTES.SUPPLY.TEAM)
})
it('trägt die fünf Agenten in verbindlicher Reihenfolge', () => {
it('trägt Thomas zuoberst und darunter die fünf in verbindlicher Reihenfolge', () => {
const agenten = supplyNav.find(item => item.label === MY_AGENTS_LABEL)
expect(agenten?.children?.map(c => c.label)).toEqual(['Ferdi', 'Bruno', 'Livia', 'Nora', 'Sina'])
expect(agenten?.children?.map(c => c.label)).toEqual(['Thomas', 'Ferdi', 'Bruno', 'Livia', 'Nora', 'Sina'])
})
it('gibt jedem Agenten Porträt-ID und Funktionsbezeichnung mit', () => {
@@ -63,7 +63,7 @@ describe('Navigationseintrag «Meine Agenten»', () => {
it('verweist mit jedem Agenten auf eine eigene Seite', () => {
const agenten = supplyNav.find(item => item.label === MY_AGENTS_LABEL)
const paths = agenten?.children?.map(c => c.path) ?? []
expect(paths).toEqual(AGENT_WORKSPACES.map(a => a.path))
expect(paths).toEqual(AGENT_NAV_ENTRIES.map(a => a.path))
expect(new Set(paths).size).toBe(paths.length)
})