From 2d1f35f8a6c2ecfcf5837d2d5dcbead08f3d6f6d Mon Sep 17 00:00:00 2001 From: Jeremy Ruppel Date: Tue, 31 Mar 2026 12:02:19 -0400 Subject: [PATCH] feat(site): session timeline design feedback (#23836) - Remove `border-surface-secondary` from all line art and use the default border color - Use `text-sm` for all timeline elements and tables *(except the `Thinking...` mono font, that's `text-xs`) --------- Co-authored-by: Jake Howell --- .../SessionSummaryTable.tsx | 4 +- .../SessionThreadsPageView.tsx | 2 +- .../SessionTimeline/AgenticLoopTable.tsx | 2 +- .../SessionTimeline/PromptTable.tsx | 2 +- .../SessionTimeline/SessionTimeline.tsx | 58 +++++++++---------- .../SessionTimeline/ToolCallTable.tsx | 2 +- 6 files changed, 34 insertions(+), 36 deletions(-) diff --git a/site/src/pages/AIBridgePage/SessionThreadsPage/SessionSummaryTable.tsx b/site/src/pages/AIBridgePage/SessionThreadsPage/SessionSummaryTable.tsx index fef6378235..d37139b4e0 100644 --- a/site/src/pages/AIBridgePage/SessionThreadsPage/SessionSummaryTable.tsx +++ b/site/src/pages/AIBridgePage/SessionThreadsPage/SessionSummaryTable.tsx @@ -8,9 +8,7 @@ import { formatDateTime } from "#/utils/time"; import { TokenBadges } from "../TokenBadges"; import { getProviderDisplayName, getProviderIconName } from "../utils"; -const Separator = () => ( -
-); +const Separator = () =>
; interface SessionSummaryTableProps { sessionId: string; diff --git a/site/src/pages/AIBridgePage/SessionThreadsPage/SessionThreadsPageView.tsx b/site/src/pages/AIBridgePage/SessionThreadsPage/SessionThreadsPageView.tsx index 0cafebe2b0..00f523a919 100644 --- a/site/src/pages/AIBridgePage/SessionThreadsPage/SessionThreadsPageView.tsx +++ b/site/src/pages/AIBridgePage/SessionThreadsPage/SessionThreadsPageView.tsx @@ -25,7 +25,7 @@ const SessionSummaryTooltip: FC = ({ children }) => (

A session is a set of threads or interceptions logically grouped by a diff --git a/site/src/pages/AIBridgePage/SessionThreadsPage/SessionTimeline/AgenticLoopTable.tsx b/site/src/pages/AIBridgePage/SessionThreadsPage/SessionTimeline/AgenticLoopTable.tsx index 02961230ae..29bb7e05c1 100644 --- a/site/src/pages/AIBridgePage/SessionThreadsPage/SessionTimeline/AgenticLoopTable.tsx +++ b/site/src/pages/AIBridgePage/SessionThreadsPage/SessionTimeline/AgenticLoopTable.tsx @@ -21,7 +21,7 @@ export const AgenticLoopTable: FC = ({ return (

diff --git a/site/src/pages/AIBridgePage/SessionThreadsPage/SessionTimeline/PromptTable.tsx b/site/src/pages/AIBridgePage/SessionThreadsPage/SessionTimeline/PromptTable.tsx index 6ce111eade..88ce33580f 100644 --- a/site/src/pages/AIBridgePage/SessionThreadsPage/SessionTimeline/PromptTable.tsx +++ b/site/src/pages/AIBridgePage/SessionThreadsPage/SessionTimeline/PromptTable.tsx @@ -31,7 +31,7 @@ export const PromptTable: FC = ({ return (
= ({ : "grid-rows-[2rem_auto]", )} > -
+
{/* top rounded line */}
{!hideBottomLine && ( -
+
{/* bottom rounded line */}
)} @@ -157,10 +157,10 @@ interface ThinkingBlockProps { const ThinkingBlock: FC = ({ text }) => (
- - Thinking... + + Thinking...
- +
); @@ -188,11 +188,11 @@ const ToolCallBlock: FC = ({ const [isOpen, setIsOpen] = useState(expandedByDefault); return ( - +
setIsOpen(!isOpen)}> - Tool call - + Tool call + {tool} @@ -207,7 +207,7 @@ const ToolCallBlock: FC = ({ outputTokens={outputTokens} tokenUsageMetadata={tokenUsageMetadata} /> -
+					
 						{tool} 
 					
@@ -231,16 +231,16 @@ const AgenticLoopCompletedBlock: FC = ({ return (
setIsOpen(!isOpen)}> - Agentic loop completed + Agentic loop completed
{isOpen && ( -
+
In / out tokens = ({ thread, initiator }) => { return ( <> -
+
{/* left column: avatar and username */}
= ({ thread, initiator }) => { size="sm" className="flex-shrink-0" /> - + {initiator.username}
@@ -320,10 +320,10 @@ const ThreadItem: FC = ({ thread, initiator }) => {
{thread.prompt && ( <> -
+
Prompt
-

+

{thread.prompt}

@@ -332,7 +332,7 @@ const ThreadItem: FC = ({ thread, initiator }) => { {/* right column: details */} = ({ thread, initiator }) => { {/* Agentic loop */}
@@ -352,7 +352,7 @@ const ThreadItem: FC = ({ thread, initiator }) => { isOpen={agenticLoopOpen} onClick={() => setAgenticLoopOpen(!agenticLoopOpen)} > - Agentic loop + Agentic loop
@@ -368,7 +368,7 @@ const ThreadItem: FC = ({ thread, initiator }) => { {agenticLoopOpen && ( <> {/* the little top rounded line above the thinking block */} -
+
{/* we need the 1px extra to line up with the left border on the other lines */}
@@ -446,17 +446,17 @@ export const SessionTimeline: FC = ({
{/* row 2: vertical line */} -
+
{/* vertical line */}
{/* row 3: sized intentionally to create the visual space above the timeline border */} -
+
{/* vertical line */}
{/* row 3/4: AI Governance tooltip */} -
+
AI Governance @@ -464,7 +464,7 @@ export const SessionTimeline: FC = ({ @@ -476,7 +476,7 @@ export const SessionTimeline: FC = ({ More about AI Governance @@ -493,10 +493,10 @@ export const SessionTimeline: FC = ({
{/* horizontal border */}
-
+
{/* vertical line */}
-
+
{/* horizontal border */}
@@ -531,7 +531,7 @@ export const SessionTimeline: FC = ({
{/* horizontal line */}
-
+
{/* vertical line */}
@@ -542,7 +542,7 @@ export const SessionTimeline: FC = ({
{/* row 7: sized intentionally to create the visual space below the timeline border */} -
+
{/* vertical line */}
diff --git a/site/src/pages/AIBridgePage/SessionThreadsPage/SessionTimeline/ToolCallTable.tsx b/site/src/pages/AIBridgePage/SessionThreadsPage/SessionTimeline/ToolCallTable.tsx index d5f0a8a6c6..59ad645440 100644 --- a/site/src/pages/AIBridgePage/SessionThreadsPage/SessionTimeline/ToolCallTable.tsx +++ b/site/src/pages/AIBridgePage/SessionThreadsPage/SessionTimeline/ToolCallTable.tsx @@ -25,7 +25,7 @@ export const ToolCallTable: FC = ({