feat: add parent-only disclaimer and report link to session cost

The Visible Context panel's Session Cost only reflects the parent
session. Add "(parent only · view full cost)" label that links to
the Session Report where parent + subagent costs are shown.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Paul Holstein 2026-02-23 12:25:45 -05:00
parent 33b63b46a5
commit db9a676680
4 changed files with 25 additions and 0 deletions

View file

@ -64,6 +64,7 @@ export const ChatHistory = ({ tabId }: ChatHistoryProps): JSX.Element => {
syncSearchMatchesWithRendered,
selectSearchMatch,
setTabVisibleAIGroup,
openSessionReport,
} = useStore(
useShallow((s) => ({
searchQuery: s.searchQuery,
@ -76,6 +77,7 @@ export const ChatHistory = ({ tabId }: ChatHistoryProps): JSX.Element => {
syncSearchMatchesWithRendered: s.syncSearchMatchesWithRendered,
selectSearchMatch: s.selectSearchMatch,
setTabVisibleAIGroup: s.setTabVisibleAIGroup,
openSessionReport: s.openSessionReport,
}))
);
@ -872,6 +874,7 @@ export const ChatHistory = ({ tabId }: ChatHistoryProps): JSX.Element => {
onNavigateToUserGroup={handleNavigateToUserGroup}
totalSessionTokens={lastAiGroupTotalTokens}
sessionMetrics={sessionDetail?.metrics}
onViewReport={effectiveTabId ? () => openSessionReport(effectiveTabId) : undefined}
phaseInfo={sessionPhaseInfo ?? undefined}
selectedPhase={selectedContextPhase}
onPhaseChange={setSelectedContextPhase}

View file

@ -29,6 +29,7 @@ interface SessionContextHeaderProps {
totalSessionTokens?: number;
sessionMetrics?: SessionMetrics;
onClose?: () => void;
onViewReport?: () => void;
phaseInfo?: ContextPhaseInfo;
selectedPhase: number | null;
onPhaseChange: (phase: number | null) => void;
@ -42,6 +43,7 @@ export const SessionContextHeader = ({
totalSessionTokens,
sessionMetrics,
onClose,
onViewReport,
phaseInfo,
selectedPhase,
onPhaseChange,
@ -132,6 +134,22 @@ export const SessionContextHeader = ({
<span className="font-medium tabular-nums" style={{ color: COLOR_TEXT_SECONDARY }}>
{formatCostUsd(sessionMetrics.costUsd)}
</span>
<span style={{ color: COLOR_TEXT_MUTED }}> (parent only</span>
{onViewReport ? (
<span>
<span style={{ color: COLOR_TEXT_MUTED }}> · </span>
<button
onClick={onViewReport}
className="underline"
style={{ color: COLOR_TEXT_SECONDARY }}
>
view full cost
</button>
<span style={{ color: COLOR_TEXT_MUTED }}>)</span>
</span>
) : (
<span style={{ color: COLOR_TEXT_MUTED }}>)</span>
)}
</div>
)}
</div>

View file

@ -49,6 +49,7 @@ export const SessionContextPanel = ({
onNavigateToUserGroup,
totalSessionTokens,
sessionMetrics,
onViewReport,
phaseInfo,
selectedPhase,
onPhaseChange,
@ -193,6 +194,7 @@ export const SessionContextPanel = ({
totalSessionTokens={totalSessionTokens}
sessionMetrics={sessionMetrics}
onClose={onClose}
onViewReport={onViewReport}
phaseInfo={phaseInfo}
selectedPhase={selectedPhase}
onPhaseChange={onPhaseChange}

View file

@ -27,6 +27,8 @@ export interface SessionContextPanelProps {
totalSessionTokens?: number;
/** Full session metrics (input, output, cache tokens, cost) */
sessionMetrics?: SessionMetrics;
/** Open the Session Report to see full cost breakdown */
onViewReport?: () => void;
/** Phase information for phase selector */
phaseInfo?: ContextPhaseInfo;
/** Currently selected phase (null = current/latest) */