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
@@ -390,6 +390,64 @@ export const ja: 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: 'プレビュープラグインを追加',