From e143a5a0dae7efe3ace6f082f0e45e39db5de5bd Mon Sep 17 00:00:00 2001 From: Gros Frumos Date: Sat, 21 Mar 2026 09:16:41 +0200 Subject: [PATCH] kin: KIN-UI-028-frontend_dev --- web/frontend/src/locales/en.json | 4 +- web/frontend/src/locales/ru.json | 4 +- web/frontend/src/views/TaskDetail.vue | 73 ++++++++++++++++++++++++++- 3 files changed, 78 insertions(+), 3 deletions(-) diff --git a/web/frontend/src/locales/en.json b/web/frontend/src/locales/en.json index ce4e34d..8c19bdc 100644 --- a/web/frontend/src/locales/en.json +++ b/web/frontend/src/locales/en.json @@ -175,7 +175,9 @@ "acceptance_criteria_label": "Acceptance criteria", "acceptance_criteria_placeholder": "What should the output be? What result counts as success?", "create_followup": "🔗 Create Follow-up", - "generating_followup": "Generating..." + "generating_followup": "Generating...", + "review_required": "Review required:", + "banner_auto_mode": "🔓 Auto mode" }, "projectView": { "tasks_tab": "Tasks", diff --git a/web/frontend/src/locales/ru.json b/web/frontend/src/locales/ru.json index d85c638..f4394c5 100644 --- a/web/frontend/src/locales/ru.json +++ b/web/frontend/src/locales/ru.json @@ -175,7 +175,9 @@ "acceptance_criteria_label": "Критерии приёмки", "acceptance_criteria_placeholder": "Что должно быть на выходе? Какой результат считается успешным?", "create_followup": "🔗 Создать зависимости", - "generating_followup": "Создаём..." + "generating_followup": "Создаём...", + "review_required": "Требует проверки:", + "banner_auto_mode": "🔓 Авто режим" }, "projectView": { "tasks_tab": "Задачи", diff --git a/web/frontend/src/views/TaskDetail.vue b/web/frontend/src/views/TaskDetail.vue index 1fd783f..0743912 100644 --- a/web/frontend/src/views/TaskDetail.vue +++ b/web/frontend/src/views/TaskDetail.vue @@ -283,6 +283,24 @@ async function runPipeline() { const hasSteps = computed(() => (task.value?.pipeline_steps?.length ?? 0) > 0) const isRunning = computed(() => task.value?.status === 'in_progress') const isManualEscalation = computed(() => task.value?.brief?.task_type === 'manual_escalation') +const useVerticalPipeline = computed(() => (task.value?.pipeline_steps?.length ?? 0) > 5) + +const expandedSteps = ref>({}) +function toggleStepExpand(id: number) { + expandedSteps.value = { ...expandedSteps.value, [id]: !expandedSteps.value[id] } +} + +function verticalStepIcon(step: PipelineStep) { + if (step.success === true || step.success === 1) return '\u2713' + if (step.success === false || step.success === 0) return '\u2717' + return '\u25CF' +} + +function verticalStepIconColor(step: PipelineStep) { + if (step.success === true || step.success === 1) return 'text-green-400' + if (step.success === false || step.success === 0) return 'text-red-400' + return 'text-blue-400' +} const resolvingManually = ref(false) @@ -482,13 +500,36 @@ async function saveEdit() { + +
+ {{ t('taskDetail.review_required') }} + + + + +
+

{{ t('taskDetail.pipeline') }} {{ t('taskDetail.running') }}

-
+ +
+ + +
+
+
+ {{ verticalStepIcon(step) }} + {{ roleIcons[step.agent_role] || '\u{1F916}' }} + {{ step.agent_role }} + {{ step.duration_seconds }}s + ${{ step.cost_usd?.toFixed(3) }} + {{ expandedSteps[step.id] ? '▲' : '▼' }} +
+
+ + +
+
+