From 2d939ea11bb4f7eadd972c7dd778b666a475e1b0 Mon Sep 17 00:00:00 2001 From: Ajax Davis Date: Tue, 20 Jan 2026 06:04:58 +1000 Subject: [PATCH] fix: handle null/undefined usage object in scenario runs - Make usage field nullable in TypeScript interface - Add optional chaining for run.usage?.executionTimeMs - Add optional chaining for run.usage?.totalTokens - Prevents TypeError when usage object is missing --- .../collections/[slug]/scenarios/[id]/page.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/web/src/app/(profile)/[username]/collections/[slug]/scenarios/[id]/page.tsx b/apps/web/src/app/(profile)/[username]/collections/[slug]/scenarios/[id]/page.tsx index 6387b0b..a70b3f7 100644 --- a/apps/web/src/app/(profile)/[username]/collections/[slug]/scenarios/[id]/page.tsx +++ b/apps/web/src/app/(profile)/[username]/collections/[slug]/scenarios/[id]/page.tsx @@ -24,7 +24,7 @@ interface ScenarioRun { totalTokens: number | null; executionTimeMs: number | null; estimatedCost: number | null; - }; + } | null; timestamps: { startedAt: string | null; completedAt: string | null; @@ -361,12 +361,12 @@ export default function CollectionScenarioDetailPage(): React.ReactElement { {formatDate(run.timestamps?.createdAt || null)} - {run.usage.executionTimeMs && ( + {run.usage?.executionTimeMs && ( {formatDuration(run.usage.executionTimeMs)} )} - {run.usage.totalTokens && ( + {run.usage?.totalTokens && ( {run.usage.totalTokens.toLocaleString()} tokens @@ -413,13 +413,13 @@ export default function CollectionScenarioDetailPage(): React.ReactElement {
Duration:{' '} - {formatDuration(run.usage.executionTimeMs)} + {formatDuration(run.usage?.executionTimeMs || null)}
Tokens:{' '} - {run.usage.totalTokens?.toLocaleString() || '—'} + {run.usage?.totalTokens?.toLocaleString() || '—'}