feat(tasks-ui): tasks on their owner nodes, host-primitive controls, icon glyphs, draggable output

Round-two review feedback, all three points:

- TASKS ON NODES: the model maps each shared task (ownerName -> member name
  -> member session id) onto its owner's node; graph cards and tree rows
  render a fourth line (icon + subject + status + '+N'), and the node detail
  popover lists every owned task.
- TEAM BOARD: member Pills double as the owner filter; each task row is a
  status dot + subject + owner + status Tag + ONE overflow Menu (complete /
  reopen / edit / reassign submenu / delete with a two-step arm). Creating
  and editing moved into a real Modal with labeled Inputs and owner Pills —
  the narrow strip is no longer where you type.
- HOST PRIMITIVES ONLY: the board and the jobs drawer now use Menu / Modal /
  Input / Button / Pill / Tag / Switch / StateDot; no native select or input
  remains (guarded by a spec).
- ICONS, NOT HAND-DRAWN GLYPHS: every text glyph (circle/diamond/triangle/
  check/chevrons/i/house) is replaced by a host icon — agent preset, user
  (teammate), branch (workflow run), checklist (fold + tasks), tree corner,
  fullscreen (fit), ellipsis (node details), copy/stop (jobs). The live line
  now shows the tool's own icon + name + args without the drawn box.
- JOBS UX: the output popover is DRAGGABLE (offset clamped to the viewport,
  double click re-anchors, controls do not start a drag), defaults to 380px,
  and gains copy-output, a follow-latest switch, kind/status Tags and a drag
  hint; the drawer highlights the open row.
- 19 new copy keys across zh/en/ja and the 18 third-language dictionaries.

Tests: 4 new specs (task rendered on its node, no native select/input +
menu-driven board, create-through-dialog posts the CAS-free create, job
popover drag moves the card). Full suite 1404 passed / 133 files.
This commit is contained in:
Menghuan1918
2026-09-27 22:18:19 +08:00
parent 85a19cecc3
commit e41f10afc9
32 changed files with 1257 additions and 382 deletions
+9
View File
@@ -433,6 +433,15 @@ export const it: Record<string, string> = {
teamTaskConflict: 'L’attività è stata modificata da altri; aggiornata',
teamTaskError: 'Operazione non riuscita: {message}',
teamTaskDeleted: 'Eliminata',
teamTaskActions: 'Azioni attività',
teamTaskSubjectPlaceholder: 'Descrivi il lavoro in una riga',
teamTaskDescriptionPlaceholder: 'Dettagli aggiuntivi (opzionale)',
teamFilterAll: 'Tutti',
tasksNodeTasks: 'Attività condivise',
jobCopyOutput: 'Copia output',
jobCopied: 'Copiato',
jobFollowTail: 'Segui le ultime righe',
jobDragHint: 'Trascina per spostare',
workflowRunning: 'In corso',
workflowCompleted: 'Completato',
workflowCancelled: 'Annullato',