重构: 对话透明化 L1 + ③.2 审批拆分 + ⑥.4 @展开 + DAG 展示
修复 tool_result 压缩零效果(BUG-260628-01):单行/少行/JSON 大字符 串字段逃逸压缩的问题,基于实测数据(53/94 次迭代零节省)调参, 增加字符级保底截断,压缩有效率从 8% 提升至 ~85%+
This commit is contained in:
@@ -86,9 +86,11 @@
|
||||
{{ $t('taskDetail.workflowStepsProgress', { done: wfDoneCount, total: wfDoneTotal }) }}
|
||||
</span>
|
||||
<span v-if="wfCompletedHint" class="wf-progress-hint">{{ $t('taskDetail.workflowCompletedHint') }}</span>
|
||||
<span v-else-if="wfFailedHint" class="wf-progress-hint wf-progress-hint-fail">{{ $t('taskDetail.workflowFailedHint') }}</span>
|
||||
<span v-if="wfFailedHint" class="wf-progress-hint wf-progress-hint-fail">{{ $t('taskDetail.workflowFailedHint') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 工作流 DAG 结构 -->
|
||||
<WorkflowDagDisplay v-if="wfDagJson" :dag-json="wfDagJson" :node-statuses="wfNodeStatuses" />
|
||||
<div class="info-item">
|
||||
<span class="label">{{ $t('taskDetail.priority') }}</span>
|
||||
<span class="value">
|
||||
@@ -169,6 +171,7 @@ import {
|
||||
import type { TaskRecord, ProjectRecord, IdeaRecord, DfDataChangedPayload, WorkflowEventPayload } from '@/api/types'
|
||||
import TaskOutputCard from '@/components/task/TaskOutputCard.vue'
|
||||
import WorkflowDagDisplay from '@/components/workflow/WorkflowDagDisplay.vue'
|
||||
import type { NodeStatus } from '@/components/workflow/WorkflowDagDisplay.vue'
|
||||
|
||||
const { t } = useI18n()
|
||||
const route = useRoute()
|
||||
@@ -202,7 +205,9 @@ const wfFailedHint = computed(() => wfResult.value === 'failed')
|
||||
|
||||
// 工作流 DAG 结构展示
|
||||
const wfDagJson = ref('')
|
||||
const wfNodeStatuses = ref<Record<string, NodeStatus>>({})
|
||||
async function refreshWorkflowDag(execId: string) {
|
||||
wfNodeStatuses.value = {}
|
||||
try {
|
||||
const record = await workflowApi.getExecution(execId)
|
||||
if (record?.dag_json) wfDagJson.value = record.dag_json
|
||||
@@ -365,12 +370,16 @@ function handleWorkflowEvent(payload: WorkflowEventPayload) {
|
||||
// 用「已启动 + 已完成」近似 total,显示已完成/已启动进度)
|
||||
const node = String(evt.node_id ?? '')
|
||||
wfRunningNode.value = node
|
||||
wfNodeStatuses.value = { ...wfNodeStatuses.value, [node]: 'running' }
|
||||
if (wfTotalNodes.value === 0) wfTotalNodes.value = 1
|
||||
else wfTotalNodes.value = Math.max(wfTotalNodes.value, wfDoneCount.value + 1)
|
||||
break
|
||||
}
|
||||
case 'node_completed': {
|
||||
wfDoneCount.value += 1
|
||||
if (wfRunningNode.value) {
|
||||
wfNodeStatuses.value = { ...wfNodeStatuses.value, [wfRunningNode.value]: 'completed' }
|
||||
}
|
||||
wfRunningNode.value = ''
|
||||
break
|
||||
}
|
||||
@@ -387,7 +396,12 @@ function handleWorkflowEvent(payload: WorkflowEventPayload) {
|
||||
break
|
||||
}
|
||||
case 'workflow_failed':
|
||||
case 'node_failed': {
|
||||
case 'node_failed':
|
||||
case 'workflow_failed': {
|
||||
if (evt?.node_id) {
|
||||
const node = String(evt.node_id)
|
||||
wfNodeStatuses.value = { ...wfNodeStatuses.value, [node]: 'failed' }
|
||||
}
|
||||
if (evt?.type === 'workflow_failed') {
|
||||
wfAdvancing.value = false
|
||||
wfRunningNode.value = ''
|
||||
|
||||
Reference in New Issue
Block a user