({
}));
vi.mock('@/components/task/AgentRunTimelinePanel', () => ({
- AgentRunTimelinePanel: () => Run timeline panel
,
+ AgentRunTimelinePanel: ({
+ initialAttemptId,
+ initialEventId,
+ }: {
+ initialAttemptId?: string | null;
+ initialEventId?: string | null;
+ }) => (
+
+ Run timeline panel
+ Attempt target: {initialAttemptId ?? 'none'}
+ Event target: {initialEventId ?? 'none'}
+
+ ),
}));
vi.mock('@/components/task/DiffViewer', () => ({
@@ -537,7 +549,11 @@ describe('task detail Mantine migration', () => {
task={codeTask}
open
onOpenChange={mocks.onOpenChange}
- navigationTarget={{ tab: 'timeline', timelineAttemptId: 'attempt-1' }}
+ navigationTarget={{
+ tab: 'timeline',
+ timelineAttemptId: 'attempt-1',
+ timelineEventId: 'event-1',
+ }}
/>
);
@@ -549,6 +565,8 @@ describe('task detail Mantine migration', () => {
expect(screen.getByRole('tab', { name: 'Timeline' }).getAttribute('aria-selected')).toBe(
'true'
);
+ expect(screen.getByText('Attempt target: attempt-1')).toBeDefined();
+ expect(screen.getByText('Event target: event-1')).toBeDefined();
rerender(
!selectedAttemptId || product.sourceRunId === selectedAttemptId
);
const pendingTaskApprovals = approvals.filter((approval) => approval.taskId === task.id);
+ const selectedIsLatestAttempt = Boolean(
+ selectedAttemptId && selectedAttemptId === task.attempt?.id
+ );
+ const selectedIsLiveAttempt = hasLiveAttempt && selectedIsLatestAttempt;
+ const selectedAttemptScope = selectedIsLiveAttempt
+ ? 'Current attempt'
+ : selectedIsLatestAttempt
+ ? 'Latest attempt'
+ : selectedAttemptId
+ ? 'Historical attempt'
+ : 'Derived history';
useEffect(() => {
setVisibleCount(TIMELINE_PAGE_SIZE);
@@ -1436,7 +1452,8 @@ export function AgentRunTimelinePanel({
- Run Timeline
+ Attempt Timeline
+ {selectedAttemptScope}
{source === 'live' ? 'Live' : source === 'stored' ? 'Stored replay' : 'Derived'}
@@ -1451,7 +1468,7 @@ export function AgentRunTimelinePanel({
{selectedAttemptId || 'No attempt selected'} | {events.length} events
- {hasLiveAttempt ? ' | live polling' : ''}
+ {selectedIsLiveAttempt ? ' | live polling' : ''}
{isLoading && (
@@ -1466,8 +1483,8 @@ export function AgentRunTimelinePanel({