From 053d5513d694869c84dca2c959f7e0e300164f0e Mon Sep 17 00:00:00 2001 From: Louis Knight-Webb Date: Sun, 22 Jun 2025 21:31:18 +0100 Subject: [PATCH 1/2] Task attempt 5b1ff1ea-5eac-4b84-9ce5-c94932e6d99a - Final changes --- .../src/components/tasks/TaskDetailsPanel.tsx | 22 +++++++++---------- frontend/src/lib/keyboard-shortcuts.ts | 5 +++-- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/frontend/src/components/tasks/TaskDetailsPanel.tsx b/frontend/src/components/tasks/TaskDetailsPanel.tsx index f97866d3..649f1846 100644 --- a/frontend/src/components/tasks/TaskDetailsPanel.tsx +++ b/frontend/src/components/tasks/TaskDetailsPanel.tsx @@ -1,4 +1,5 @@ import { useState, useEffect, useMemo } from "react"; +import { Link } from "react-router-dom"; import { X, History, @@ -608,18 +609,15 @@ export function TaskDetailsPanel({ Editor - )} diff --git a/frontend/src/lib/keyboard-shortcuts.ts b/frontend/src/lib/keyboard-shortcuts.ts index ea13c399..827451f2 100644 --- a/frontend/src/lib/keyboard-shortcuts.ts +++ b/frontend/src/lib/keyboard-shortcuts.ts @@ -1,5 +1,5 @@ import { useEffect, useCallback } from 'react'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useLocation } from 'react-router-dom'; // Define available keyboard shortcuts export interface KeyboardShortcut { @@ -16,6 +16,7 @@ export interface KeyboardShortcutContext { openCreateTask?: () => void; currentPath?: string; hasOpenDialog?: boolean; + location?: ReturnType; } // Centralized shortcut definitions @@ -32,7 +33,7 @@ export const createKeyboardShortcuts = (context: KeyboardShortcutContext): Recor // Otherwise, navigate back if (context.navigate) { - const currentPath = context.currentPath || window.location.pathname; + const currentPath = context.currentPath || context.location?.pathname || '/'; // Navigate back based on current path if (currentPath.includes('/attempts/') && currentPath.includes('/compare')) { From 63de1fe54277b8dc4ab46b5433b2b5c2db1703ef Mon Sep 17 00:00:00 2001 From: Louis Knight-Webb Date: Sun, 22 Jun 2025 21:41:02 +0100 Subject: [PATCH 2/2] Open in same window --- .../src/components/tasks/TaskDetailsPanel.tsx | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/frontend/src/components/tasks/TaskDetailsPanel.tsx b/frontend/src/components/tasks/TaskDetailsPanel.tsx index 649f1846..7b147340 100644 --- a/frontend/src/components/tasks/TaskDetailsPanel.tsx +++ b/frontend/src/components/tasks/TaskDetailsPanel.tsx @@ -140,7 +140,9 @@ export function TaskDetailsPanel({ const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false); const [selectedExecutor, setSelectedExecutor] = useState("claude"); const [isStopping, setIsStopping] = useState(false); - const [expandedOutputs, setExpandedOutputs] = useState>(new Set()); + const [expandedOutputs, setExpandedOutputs] = useState>( + new Set() + ); const { config } = useConfig(); // Available executors @@ -159,10 +161,15 @@ export function TaskDetailsPanel({ // Group activities by execution_process_id and get the latest one for each const latestActivitiesByProcess = new Map(); - + attemptActivities.forEach((activity) => { - const existing = latestActivitiesByProcess.get(activity.execution_process_id); - if (!existing || new Date(activity.created_at) > new Date(existing.created_at)) { + const existing = latestActivitiesByProcess.get( + activity.execution_process_id + ); + if ( + !existing || + new Date(activity.created_at) > new Date(existing.created_at) + ) { latestActivitiesByProcess.set(activity.execution_process_id, activity); } }); @@ -380,7 +387,7 @@ export function TaskDetailsPanel({ }; const toggleOutputExpansion = (processId: string) => { - setExpandedOutputs(prev => { + setExpandedOutputs((prev) => { const newSet = new Set(prev); if (newSet.has(processId)) { newSet.delete(processId); @@ -612,8 +619,6 @@ export function TaskDetailsPanel({