diff --git a/frontend/web/src/components/intelligent_eval/DecisionProcess.tsx b/frontend/web/src/components/intelligent_eval/DecisionProcess.tsx
index f9cb4f2..9baa31b 100644
--- a/frontend/web/src/components/intelligent_eval/DecisionProcess.tsx
+++ b/frontend/web/src/components/intelligent_eval/DecisionProcess.tsx
@@ -100,7 +100,7 @@ export default function DecisionProcess({ evalId, onBack }: DecisionProcessProps
dataIndex: 'cron_id',
key: 'cron_id',
width: 120,
- render: (val: string) => {val.slice(0, 8)},
+ render: (val: string) => {val.slice(0, 8)},
},
{
title: '操作',
@@ -157,8 +157,8 @@ export default function DecisionProcess({ evalId, onBack }: DecisionProcessProps
{formatDateTime(log.created_at)}
-
{log.reason}
-
+
{log.reason}
+
Cron: {log.cron_id.slice(0, 8)}
@@ -174,7 +174,12 @@ export default function DecisionProcess({ evalId, onBack }: DecisionProcessProps
loading={loading}
dataSource={filteredLogs}
columns={columns}
- pagination={false}
+ pagination={{
+ pageSize: 20,
+ showSizeChanger: true,
+ pageSizeOptions: [20, 50, 100],
+ showTotal: (total) => `共 ${total} 条`,
+ }}
expandable={{
expandedRowKeys: expandedLog ? [expandedLog] : [],
expandIcon: () => null,
diff --git a/frontend/web/src/components/intelligent_eval/EvalOverview.tsx b/frontend/web/src/components/intelligent_eval/EvalOverview.tsx
index 1c46be7..aa636ab 100644
--- a/frontend/web/src/components/intelligent_eval/EvalOverview.tsx
+++ b/frontend/web/src/components/intelligent_eval/EvalOverview.tsx
@@ -89,26 +89,49 @@ export default function EvalOverview({ ev, targetName }: EvalOverviewProps) {
-
- {ev.goal || '—'}
- {ev.intent || '—'}
-
- {ev.role_description || '—'}
-
-
- {Object.keys(ev.seeds ?? {}).length === 0
- ? '—'
- : (
-
- {JSON.stringify(ev.seeds, null, 2)}
-
- )}
-
-
+
+
+
评估目标
+
+ {ev.goal || '—'}
+
+
+
+
考察意图
+
+ {ev.intent || '—'}
+
+
+
+
角色描述
+
+ {ev.role_description || '—'}
+
+
+
+
种子集
+ {Object.keys(ev.seeds ?? {}).length === 0 ? (
+
—
+ ) : (
+
+ {JSON.stringify(ev.seeds, null, 2)}
+
+ )}
+
+
diff --git a/frontend/web/src/components/intelligent_eval/ExecutionProcess.test.tsx b/frontend/web/src/components/intelligent_eval/ExecutionProcess.test.tsx
index 7d9818c..9fb866a 100644
--- a/frontend/web/src/components/intelligent_eval/ExecutionProcess.test.tsx
+++ b/frontend/web/src/components/intelligent_eval/ExecutionProcess.test.tsx
@@ -110,13 +110,13 @@ describe('ExecutionProcess', () => {
await waitFor(() => expect(screen.getByText('评估已取消')).toBeInTheDocument())
})
- it('caps the activity feed at 50 entries and hints at the decision tab', async () => {
+ it('shows all activity entries with total count', async () => {
mockApi({}, 60)
render()
- await waitFor(() => expect(screen.getByText(/仅展示最近 50 条/)).toBeInTheDocument())
+ await waitFor(() => expect(screen.getByText(/共 \d+ 条活动/)).toBeInTheDocument())
expect(screen.getByText(/决策·执行会话:时段欠账 59/)).toBeInTheDocument()
- expect(screen.queryByText(/决策·执行会话:时段欠账 0/)).not.toBeInTheDocument()
+ expect(screen.getByText(/决策·执行会话:时段欠账 0/)).toBeInTheDocument()
})
it('scopes task loading to the current evaluation', async () => {
diff --git a/frontend/web/src/components/intelligent_eval/ExecutionProcess.tsx b/frontend/web/src/components/intelligent_eval/ExecutionProcess.tsx
index 4902275..32d9190 100644
--- a/frontend/web/src/components/intelligent_eval/ExecutionProcess.tsx
+++ b/frontend/web/src/components/intelligent_eval/ExecutionProcess.tsx
@@ -13,7 +13,6 @@ import { colors, statusColors } from '../../tokens'
import { formatDateTime } from '../../utils/date'
import { usePolling } from '../../hooks/usePolling'
-const ACTIVITY_LIMIT = 50
const ACTIVE_STATUSES = new Set(['planning', 'pending_approval', 'executing'])
const STAGE_STEPS = [
@@ -123,7 +122,7 @@ export default function ExecutionProcess({ ev }: { ev: IntelligentEval }) {
const activities = useMemo(() => {
const all = [...sessionEvents(ev), ...taskEvents(tasks), ...decisionEvents(logs)]
all.sort((a, b) => (a.time < b.time ? 1 : -1))
- return all.slice(0, ACTIVITY_LIMIT)
+ return all
}, [ev, tasks, logs])
if (loading && progress == null) {
@@ -151,7 +150,10 @@ export default function ExecutionProcess({ ev }: { ev: IntelligentEval }) {
seriesField: 'kind',
group: true,
height: Math.max(200, progress.slots.length * 72),
- color: [colors.textMuted, statusColors.running, statusColors.completed],
+ color: [colors.textMuted, colors.primary, statusColors.completed],
+ legend: { position: 'top' },
+ xAxis: { label: { autoRotate: true } },
+ yAxis: { min: 0 },
}
return (
@@ -160,9 +162,10 @@ export default function ExecutionProcess({ ev }: { ev: IntelligentEval }) {
({
title: s.title,
- status: undefined,
+ description: s.key === progress.current_stage ? '当前阶段' : undefined,
}))}
/>
{progress.blocker != null && (
@@ -201,14 +204,14 @@ export default function ExecutionProcess({ ev }: { ev: IntelligentEval }) {
color: a.color,
children: (
-
{a.text}
-
{formatDateTime(a.time)}
+
{a.text}
+
{formatDateTime(a.time)}
),
}))}
/>
- {`仅展示最近 ${ACTIVITY_LIMIT} 条,完整决策历史见「决策过程」`}
+ {`共 ${activities.length} 条活动,完整决策历史见「决策过程」`}
>
)}
diff --git a/frontend/web/src/pages/IntelligentEvals.tsx b/frontend/web/src/pages/IntelligentEvals.tsx
index 063f97d..ba74912 100644
--- a/frontend/web/src/pages/IntelligentEvals.tsx
+++ b/frontend/web/src/pages/IntelligentEvals.tsx
@@ -160,13 +160,18 @@ export default function IntelligentEvalsPage() {
},
},
{
- title: '会话进度', key: 'progress', width: 170,
+ title: '会话进度', key: 'progress', width: 200,
render: (_, ev) => {
- const pct = ev.session_count ? Math.round((ev.completed_sessions / ev.session_count) * 100) : 0
+ const estimated = ev.plan?.estimated_sessions ?? ev.session_count
+ const running = (ev.sessions ?? []).filter((s) => s.status === 'running').length
+ const pct = estimated ? Math.round((ev.completed_sessions / estimated) * 100) : 0
return (
- {ev.completed_sessions}/{ev.session_count}
+
+ {ev.completed_sessions}/{estimated}
+ {running > 0 && ({running} 进行中)}
+
)
},