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
@@ -382,6 +382,64 @@ export const ko: Record<string, string> = {
jobKill: '종료',
jobKillConfirm: '다시 클릭하여 종료 확인',
jobKillError: '종료 실패',
tasksViewGraph: '워크플로 그래프',
tasksViewTree: '트리',
tasksViewSwitchToGraph: '워크플로 그래프로 전환',
tasksViewSwitchToTree: '트리로 전환',
settingsViewModeTitle: '작업 관리 기본 보기',
settingsViewModeDesc: '작업 관리 페이지를 열 때의 기본 표시 방식(페이지 안에서 언제든 임시 전환 가능)',
settingsViewModeGraph: '워크플로 그래프',
settingsViewModeGraphDesc: '계층형 노드 그래프, 확대/이동 가능',
settingsViewModeTree: '트리',
settingsViewModeTreeDesc: '클래식 들여쓰기 트리, 키보드 탐색 지원',
tasksWorkflowMember: '워크플로 멤버',
tasksFoldCompleted: '✓ {count} 완료됨',
tasksFoldExpand: '완료된 노드 펼치기',
tasksFoldCollapse: '완료된 노드 접기',
tasksZoomIn: '확대',
tasksZoomOut: '축소',
tasksZoomFit: '캔버스에 맞추기',
tasksNodeJump: '대화 기록 보기',
tasksNodeState: '상태',
tasksNodeMode: '모드',
tasksNodeModel: '모델',
tasksNodeTeamRole: '팀 역할',
tasksNodeActivity: '최근 활동',
tasksStateRunning: '실행 중',
tasksStateIdle: '대기 중',
tasksStateDone: '완료됨',
tasksStateError: '오류',
teamBoard: '팀 작업 보드',
teamChip: '팀 멤버 {members}명 · 작업 {tasks}개',
teamMembers: '멤버',
teamTasksEmpty: '공유 작업이 없습니다',
teamTaskCreate: '새 작업',
teamTaskSubject: '제목',
teamTaskDescription: '설명',
teamTaskOwner: '담당자',
teamTaskUnowned: '미배정',
teamTaskPending: '할 일',
teamTaskInProgress: '진행 중',
teamTaskCompleted: '완료됨',
teamTaskBlocked: '차단됨',
teamTaskComplete: '완료',
teamTaskReopen: '다시 열기',
teamTaskDelete: '삭제',
teamTaskDeleteConfirm: '삭제 확인',
teamTaskEdit: '편집',
teamTaskSave: '저장',
teamTaskCancel: '취소',
teamTaskConflict: '다른 사람이 작업을 수정해 새로고침했습니다',
teamTaskError: '작업 실패: {message}',
teamTaskDeleted: '삭제됨',
workflowRunning: '진행 중',
workflowCompleted: '완료됨',
workflowCancelled: '취소됨',
workflowFailed: '실패',
workflowPhaseUnnamed: '이름 없는 단계',
workflowMembers: '{done}/{total} 멤버',
jobsAutoCollapsed: '에이전트가 많아 자동으로 접었습니다',
catalogLoadFailed: '{count}개 브랜치 로드 실패',
addPluginsTabCard: 'Tab 플러그인 추가',
addPluginsTabCardDesc: '새 사이드바 페이지 등록',
addPluginsViewerCard: '미리보기 플러그인 추가',