feat(client): workflow-graph Tasks page with teams board and jobs drawer

The Subagent page becomes the Tasks page per the approved Variant-D design:

- tasks-model.ts feeds BOTH modes from one pre-order node list: graph
  canvas (TasksGraph: layered nodes over bezier edges, drag-pan,
  wheel-zoom-to-cursor, phase frames, bottom-right control cluster) and
  the classic tree (TasksTree: keyboard navigable) — the view toggle and
  fold toggle stay reachable in both modes.
- Workflow runs (workflows.list) hang under their origin agent; member
  agents re-parent under the run node, missing ones synthesize from run
  data; completed leaf agents fold into per-parent aggregate nodes
  (click or cluster toggle to expand/re-collapse).
- Agent Teams (experimental): roster enriches nodes; a header chip opens
  the shared task board popover with basic CAS operations (complete /
  reopen / delete / reassign / create / edit); no experimental layer →
  the whole block hides (structural degradation).
- Background jobs move into a bottom drawer that auto-collapses at 8+
  agents (manual toggle wins); job output opens as an anchored popover
  (event replay, never the model's cursor); two-click kill preserved.
- Live activity lines render as glyph + tool + args (tool-icons map onto
  host primitive icons).
- Node click jumps to the transcript; ⓘ opens the detail popover;
  popovers follow the selection-popup dismissal contract (Escape /
  outside click / anchor off-screen via IntersectionObserver).
- tasksViewMode pref (graph default) with a select row in settings;
  58 new copy keys across zh/en/ja + 18 third-language dictionaries;
  dead CSS from the old tree/dock pruned.
- Tests: 6 new page-interaction specs (auto-collapse, both-mode toggle,
  jump, fold, popover); jobs-view suite re-pointed at the popover;
  prefs/builtins/smoke lock tests updated for the new pref.
This commit is contained in:
Menghuan1918
2026-09-27 22:18:14 +08:00
parent fdc4520080
commit 6448d8bad9
38 changed files with 4190 additions and 1387 deletions
+58
View File
@@ -388,6 +388,64 @@ export const nl: Record<string, string> = {
jobKill: 'Beëindigen',
jobKillConfirm: 'Klik nogmaals om beëindigen te bevestigen',
jobKillError: 'Beëindigen mislukt',
tasksViewGraph: 'Workflowgrafiek',
tasksViewTree: 'Boom',
tasksViewSwitchToGraph: 'Omschakelen naar de workflowgrafiek',
tasksViewSwitchToTree: 'Omschakelen naar de boom',
settingsViewModeTitle: 'Standaardweergave van de takenpagina',
settingsViewModeDesc: 'Hoe de takenpagina bij het openen wordt weergegeven (de schakelaar op de pagina wisselt nog steeds ad hoc)',
settingsViewModeGraph: 'Workflowgrafiek',
settingsViewModeGraphDesc: 'Gelaagde knoppengrafiek met in- en uitzoomen en pannen',
settingsViewModeTree: 'Boom',
settingsViewModeTreeDesc: 'Klassieke inspringboom, navigeerbaar met het toetsenbord',
tasksWorkflowMember: 'Workflowlid',
tasksFoldCompleted: '✓ {count} voltooid',
tasksFoldExpand: 'Voltooide knopen uitklappen',
tasksFoldCollapse: 'Voltooide knopen inklappen',
tasksZoomIn: 'Inzoomen',
tasksZoomOut: 'Uitzoomen',
tasksZoomFit: 'Passend maken',
tasksNodeJump: 'Transcript openen',
tasksNodeState: 'Status',
tasksNodeMode: 'Modus',
tasksNodeModel: 'Model',
tasksNodeTeamRole: 'Teamrol',
tasksNodeActivity: 'Laatste activiteit',
tasksStateRunning: 'Bezig',
tasksStateIdle: 'Inactief',
tasksStateDone: 'Voltooid',
tasksStateError: 'Fout',
teamBoard: 'Teamtakenbord',
teamChip: 'Team {members} leden · {tasks} taken',
teamMembers: 'Leden',
teamTasksEmpty: 'Nog geen gedeelde taken',
teamTaskCreate: 'Nieuwe taak',
teamTaskSubject: 'Onderwerp',
teamTaskDescription: 'Beschrijving',
teamTaskOwner: 'Verantwoordelijke',
teamTaskUnowned: 'Niet opgeëist',
teamTaskPending: 'Te doen',
teamTaskInProgress: 'Bezig',
teamTaskCompleted: 'Voltooid',
teamTaskBlocked: 'Geblokkeerd',
teamTaskComplete: 'Voltooien',
teamTaskReopen: 'Heropenen',
teamTaskDelete: 'Verwijderen',
teamTaskDeleteConfirm: 'Verwijderen bevestigen',
teamTaskEdit: 'Bewerken',
teamTaskSave: 'Opslaan',
teamTaskCancel: 'Annuleren',
teamTaskConflict: 'De taak is elders gewijzigd; vernieuwd',
teamTaskError: 'Bewerking mislukt: {message}',
teamTaskDeleted: 'Verwijderd',
workflowRunning: 'Bezig',
workflowCompleted: 'Voltooid',
workflowCancelled: 'Geannuleerd',
workflowFailed: 'Mislukt',
workflowPhaseUnnamed: 'Naamloze fase',
workflowMembers: '{done}/{total} leden',
jobsAutoCollapsed: 'Automatisch ingeklapt (veel agents)',
catalogLoadFailed: '{count} branches konden niet worden geladen',
addPluginsTabCard: 'Tabblad-plugins toevoegen',
addPluginsTabCardDesc: 'Een nieuwe zijbalkpagina registreren',
addPluginsViewerCard: 'Preview-plugins toevoegen',