diff --git a/desktop/src/components/chat/MessageList.tsx b/desktop/src/components/chat/MessageList.tsx index 76754e0d..abd74ca9 100644 --- a/desktop/src/components/chat/MessageList.tsx +++ b/desktop/src/components/chat/MessageList.tsx @@ -1,5 +1,5 @@ import { useRef, useEffect, useMemo, memo, useState, useCallback, useLayoutEffect, type ReactNode } from 'react' -import { ArrowDown, BookMarked, Settings, Target } from 'lucide-react' +import { ArrowDown, BookMarked, ChevronDown, ChevronRight, Settings, Target } from 'lucide-react' import { ApiError } from '../../api/client' import { sessionsApi, type SessionTurnCheckpoint } from '../../api/sessions' import { useChatStore } from '../../stores/chatStore' @@ -151,6 +151,7 @@ function ChatSelectionMenu({ function GoalEventCard({ message }: { message: GoalEvent }) { const t = useTranslation() + const [expanded, setExpanded] = useState(true) const titleKey = `chat.goalEvent.${message.action === 'status' ? 'statusTitle' : message.action}` as TranslationKey const title = t(titleKey) === titleKey ? t('chat.goalEvent.message') : t(titleKey) const metaDetails = [ @@ -160,35 +161,60 @@ function GoalEventCard({ message }: { message: GoalEvent }) { ].filter((detail): detail is string => detail !== null) return ( -
-
-
-
-
-
{title}
- {message.objective ? ( -
- {t('chat.goalEvent.objective', { value: message.objective })} -
- ) : message.message ? ( -
- {message.message} -
- ) : null} - {metaDetails.length > 0 && ( -
- {metaDetails.map((detail) => ( - - {detail} - - ))} -
+
+
+
+
) diff --git a/desktop/src/pages/ActiveSession.tsx b/desktop/src/pages/ActiveSession.tsx index bcc83ba1..9c835163 100644 --- a/desktop/src/pages/ActiveSession.tsx +++ b/desktop/src/pages/ActiveSession.tsx @@ -218,6 +218,7 @@ function GoalStatusPanel({ : isRunning && goal.status !== 'complete' ? t('chat.activeGoal.running') : t('chat.activeGoal.active') + const hasMeta = Boolean(goal.budget || goal.continuations || goal.elapsed) return (
-
- -