@agent-native/dispatch 0.21.0 → 0.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/actions/get-agent-thread-debug.d.ts +2 -0
  2. package/dist/actions/provider-api-register.d.ts +8 -8
  3. package/dist/actions/search-agent-threads.js +2 -2
  4. package/dist/actions/search-agent-threads.js.map +1 -1
  5. package/dist/components/layout/HeaderActions.d.ts +1 -17
  6. package/dist/components/layout/HeaderActions.d.ts.map +1 -1
  7. package/dist/components/layout/HeaderActions.js +1 -51
  8. package/dist/components/layout/HeaderActions.js.map +1 -1
  9. package/dist/components/layout/Layout.d.ts.map +1 -1
  10. package/dist/components/layout/Layout.js +22 -14
  11. package/dist/components/layout/Layout.js.map +1 -1
  12. package/dist/components/ui/dialog.d.ts +1 -19
  13. package/dist/components/ui/dialog.d.ts.map +1 -1
  14. package/dist/components/ui/dialog.js +1 -22
  15. package/dist/components/ui/dialog.js.map +1 -1
  16. package/dist/components/ui/dropdown-menu.d.ts +1 -27
  17. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  18. package/dist/components/ui/dropdown-menu.js +1 -35
  19. package/dist/components/ui/dropdown-menu.js.map +1 -1
  20. package/dist/components/ui/popover.d.ts +2 -1
  21. package/dist/components/ui/popover.d.ts.map +1 -1
  22. package/dist/components/ui/popover.js +2 -1
  23. package/dist/components/ui/popover.js.map +1 -1
  24. package/dist/components/ui/select.d.ts +1 -13
  25. package/dist/components/ui/select.d.ts.map +1 -1
  26. package/dist/components/ui/select.js +1 -26
  27. package/dist/components/ui/select.js.map +1 -1
  28. package/dist/hooks/use-mobile.d.ts +1 -1
  29. package/dist/hooks/use-mobile.d.ts.map +1 -1
  30. package/dist/hooks/use-mobile.js +1 -15
  31. package/dist/hooks/use-mobile.js.map +1 -1
  32. package/dist/lib/automation-display.js +1 -1
  33. package/dist/lib/automation-display.js.map +1 -1
  34. package/dist/routes/pages/thread-debug.d.ts.map +1 -1
  35. package/dist/routes/pages/thread-debug.js +288 -118
  36. package/dist/routes/pages/thread-debug.js.map +1 -1
  37. package/dist/server/lib/thread-debug-store.d.ts +2 -0
  38. package/dist/server/lib/thread-debug-store.d.ts.map +1 -1
  39. package/dist/server/lib/thread-debug-store.js +6 -2
  40. package/dist/server/lib/thread-debug-store.js.map +1 -1
  41. package/package.json +3 -3
  42. package/src/actions/search-agent-threads.ts +2 -2
  43. package/src/components/layout/HeaderActions.tsx +1 -84
  44. package/src/components/layout/Layout.spec.tsx +94 -10
  45. package/src/components/layout/Layout.tsx +107 -101
  46. package/src/components/ui/dialog.tsx +1 -120
  47. package/src/components/ui/dropdown-menu.tsx +1 -198
  48. package/src/components/ui/popover.tsx +3 -1
  49. package/src/components/ui/select.tsx +1 -158
  50. package/src/hooks/use-mobile.tsx +1 -21
  51. package/src/lib/automation-display.spec.ts +1 -1
  52. package/src/lib/automation-display.ts +1 -1
  53. package/src/routes/pages/thread-debug.spec.tsx +103 -5
  54. package/src/routes/pages/thread-debug.tsx +1051 -451
  55. package/src/server/lib/thread-debug-store.spec.ts +17 -0
  56. package/src/server/lib/thread-debug-store.ts +9 -2
@@ -1 +1 @@
1
- {"version":3,"file":"thread-debug.js","sourceRoot":"","sources":["../../../src/routes/pages/thread-debug.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useActionQuery } from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport {\n IconAlertTriangle,\n IconClock,\n IconDatabase,\n IconFileSearch,\n IconRefresh,\n IconSearch,\n} from \"@tabler/icons-react\";\nimport { useMemo, useState } from \"react\";\nimport { useSearchParams } from \"react-router\";\n\nimport { ActionQueryError } from \"../../components/action-query-error\";\nimport { DispatchShell } from \"../../components/dispatch-shell\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { Input } from \"../../components/ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport { Skeleton } from \"../../components/ui/skeleton\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../components/ui/tabs\";\nimport { cn } from \"../../lib/utils\";\n\nexport function meta() {\n return [{ title: \"Thread Debug — Dispatch\" }];\n}\n\ninterface ThreadDebugSource {\n id: string;\n label: string;\n kind: \"current\" | \"env\" | \"configured\";\n current: boolean;\n connected: boolean;\n databaseUrlEnv: string | null;\n databaseAuthTokenEnv: string | null;\n canInspectAll: boolean;\n}\n\ninterface ThreadSearchResult {\n id: string;\n ownerEmail: string;\n title: string;\n preview: string;\n messageCount: number;\n createdAt: number;\n updatedAt: number;\n snippet: string;\n}\n\ninterface ThreadMessage {\n index: number;\n id: string | null;\n role: string;\n createdAt: string | number | null;\n status: unknown;\n text: string;\n contentParts: any[];\n attachments: any[];\n metadata: unknown;\n}\n\ninterface ThreadRun {\n id: string;\n status: string;\n turnId?: string | null;\n abortReason: string | null;\n errorCode?: string | null;\n errorDetail?: string | null;\n terminalReason?: string | null;\n dispatchMode?: string | null;\n diagStage?: string | null;\n workerStage?: string | null;\n startedAt: number;\n completedAt: number | null;\n heartbeatAt: number | null;\n lastProgressAt?: number | null;\n durationMs?: number | null;\n peakRssMb?: number | null;\n events: Array<{ seq: number; event: any; rawEventData: string }>;\n}\n\ntype ThreadDebugMode = \"failures\" | \"threads\";\ntype FailureStatus = \"all\" | \"errored\" | \"aborted\" | \"truncated\";\ntype FailureRange = \"24h\" | \"7d\" | \"30d\";\n\ninterface AgentRunFailure {\n id: string;\n threadId: string;\n sourceId?: string;\n sourceLabel?: string;\n source?: {\n id: string;\n label: string;\n kind?: string;\n databaseUrlEnv?: string | null;\n };\n ownerEmail: string;\n threadTitle: string;\n threadPreview: string;\n status: string;\n errorCode: string | null;\n errorDetail: string | null;\n terminalReason: string | null;\n abortReason: string | null;\n dispatchMode: string | null;\n diagStage: string | null;\n workerStage?: string | null;\n startedAt: number;\n completedAt: number | null;\n durationMs: number | null;\n}\n\ninterface AgentRunFailuresResponse {\n failures: AgentRunFailure[];\n sources: Array<{\n source: {\n id: string;\n label: string;\n kind?: string;\n databaseUrlEnv?: string | null;\n };\n status: \"ok\" | \"unsupported\" | \"unavailable\" | \"disconnected\";\n failureCount: number;\n errorCode?: string | null;\n }>;\n partial: boolean;\n count?: number;\n access: { viewerEmail: string; scope: string; canInspectAll: boolean };\n filters?: {\n sourceId?: string;\n status?: FailureStatus;\n lookbackHours?: number;\n limit?: number;\n };\n}\n\ninterface ThreadDebugResponse {\n source: {\n id: string;\n label: string;\n kind: string;\n databaseUrlEnv: string | null;\n };\n access: { viewerEmail: string; scope: string; canInspectAll: boolean };\n thread: ThreadSearchResult;\n lookup?: { requestedId: string; threadId: string; runId: string | null };\n messages: ThreadMessage[];\n debug: any;\n debugRuns: any[];\n queuedMessages: any[];\n threadData: any;\n rawThreadData: string;\n runs: ThreadRun[];\n traces: { summaries: any[]; spans: any[] };\n feedback: any[];\n satisfaction: any[];\n evals: any[];\n checkpoints: any[];\n}\n\nconst FAILURE_RANGE_HOURS: Record<FailureRange, number> = {\n \"24h\": 24,\n \"7d\": 7 * 24,\n \"30d\": 30 * 24,\n};\n\nfunction parseMode(value: string | null): ThreadDebugMode {\n return value === \"threads\" ? \"threads\" : \"failures\";\n}\n\nfunction parseFailureStatus(value: string | null): FailureStatus {\n return value === \"errored\" || value === \"aborted\" || value === \"truncated\"\n ? value\n : \"all\";\n}\n\nfunction parseFailureRange(value: string | null): FailureRange {\n return value === \"7d\" || value === \"30d\" ? value : \"24h\";\n}\n\nfunction failureSourceId(failure: AgentRunFailure): string {\n return failure.sourceId || failure.source?.id || \"current\";\n}\n\nfunction failureSourceLabel(failure: AgentRunFailure): string {\n return (\n failure.sourceLabel || failure.source?.label || failureSourceId(failure)\n );\n}\n\nfunction formatDate(value: number | string | null | undefined): string {\n if (value == null || value === \"\") return \"n/a\";\n const numeric = Number(value);\n const date = Number.isFinite(numeric) ? new Date(numeric) : new Date(value);\n if (Number.isNaN(date.getTime())) return \"n/a\";\n return date.toLocaleString();\n}\n\nfunction formatDuration(value: number | null | undefined): string {\n if (value == null || !Number.isFinite(value)) return \"n/a\";\n if (value < 1_000) return `${Math.round(value)}ms`;\n if (value < 60_000) return `${(value / 1_000).toFixed(1)}s`;\n return `${(value / 60_000).toFixed(1)}m`;\n}\n\nfunction json(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction eventLabel(event: any): string {\n if (!event || typeof event !== \"object\") return \"event\";\n if (event.type === \"tool_start\") return `tool_start · ${event.tool}`;\n if (event.type === \"tool_done\") return `tool_done · ${event.tool}`;\n if (event.type === \"text\") return \"text\";\n if (event.type === \"error\") return `error · ${event.errorCode ?? \"agent\"}`;\n return String(event.type ?? \"event\");\n}\n\nfunction messageTitle(message: ThreadMessage): string {\n const role = message.role || \"unknown\";\n return `${role.charAt(0).toUpperCase()}${role.slice(1)} ${message.index + 1}`;\n}\n\nfunction toolParts(message: ThreadMessage): any[] {\n return message.contentParts.filter((part) => part?.type === \"tool-call\");\n}\n\nfunction diagnosticStage(value: string | null | undefined): string | null {\n if (!value) return null;\n try {\n const parsed = JSON.parse(value) as { stage?: unknown; detail?: unknown };\n const stage =\n typeof parsed.stage === \"string\" && parsed.stage.trim()\n ? parsed.stage.trim()\n : value;\n const detail =\n typeof parsed.detail === \"string\" && parsed.detail.trim()\n ? parsed.detail.trim()\n : \"\";\n return detail ? `${stage}: ${detail}` : stage;\n } catch {\n return value;\n }\n}\n\nfunction RawBlock({\n value,\n className,\n}: {\n value: unknown;\n className?: string;\n}) {\n return (\n <pre\n className={cn(\n \"max-h-[520px] overflow-auto rounded-lg border bg-muted/30 p-3 text-xs leading-relaxed text-foreground\",\n \"whitespace-pre-wrap break-words\",\n className,\n )}\n >\n {typeof value === \"string\" ? value : json(value)}\n </pre>\n );\n}\n\nfunction SourceBadge({ source }: { source: ThreadDebugSource }) {\n return (\n <Badge variant={source.current ? \"default\" : \"secondary\"}>\n {source.current ? \"current\" : source.kind}\n </Badge>\n );\n}\n\nfunction ResultCard({\n result,\n selected,\n onSelect,\n}: {\n result: ThreadSearchResult;\n selected: boolean;\n onSelect: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n \"w-full rounded-lg border px-3 py-3 text-left transition-colors\",\n selected\n ? \"border-foreground bg-muted\"\n : \"bg-card hover:border-foreground/30 hover:bg-muted/40\",\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {result.title || result.preview || result.id}\n </div>\n <div className=\"mt-1 truncate font-mono text-[11px] text-muted-foreground\">\n {result.id}\n </div>\n </div>\n <Badge variant=\"outline\" className=\"shrink-0\">\n {result.messageCount}\n </Badge>\n </div>\n <div className=\"mt-2 line-clamp-3 text-xs leading-relaxed text-muted-foreground\">\n {result.snippet || result.preview || \"No preview\"}\n </div>\n <div className=\"mt-2 flex items-center justify-between gap-3 text-[11px] text-muted-foreground\">\n <span className=\"truncate\">{result.ownerEmail}</span>\n <span className=\"shrink-0\">{formatDate(result.updatedAt)}</span>\n </div>\n </button>\n );\n}\n\nfunction FailureCard({\n failure,\n selected,\n onSelect,\n}: {\n failure: AgentRunFailure;\n selected: boolean;\n onSelect: () => void;\n}) {\n const t = useT();\n const summary =\n failure.errorCode ||\n failure.terminalReason ||\n failure.abortReason ||\n failure.status;\n const statusLabel =\n failure.status === \"errored\"\n ? t(\"dispatch.pages.threadDebugErrored\", {\n defaultValue: \"Errored\",\n })\n : failure.status === \"aborted\"\n ? t(\"dispatch.pages.threadDebugAborted\", {\n defaultValue: \"Aborted\",\n })\n : failure.status === \"truncated\"\n ? t(\"dispatch.pages.threadDebugTruncated\", {\n defaultValue: \"Truncated\",\n })\n : failure.status;\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n \"w-full rounded-lg border px-3 py-3 text-left transition-colors\",\n selected\n ? \"border-foreground bg-muted\"\n : \"bg-card hover:border-foreground/30 hover:bg-muted/40\",\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {failure.threadTitle || failure.threadPreview || failure.threadId}\n </div>\n <div className=\"mt-1 truncate font-mono text-[11px] text-muted-foreground\">\n {failure.id}\n </div>\n </div>\n <Badge variant=\"outline\" className=\"shrink-0\">\n {statusLabel}\n </Badge>\n </div>\n <div className=\"mt-2 flex items-center gap-1.5 text-xs text-foreground\">\n <IconAlertTriangle className=\"size-3.5 shrink-0 text-muted-foreground\" />\n <span className=\"truncate\">{summary}</span>\n </div>\n {failure.errorDetail ? (\n <div className=\"mt-1 line-clamp-2 text-xs leading-relaxed text-muted-foreground\">\n {failure.errorDetail}\n </div>\n ) : null}\n <div className=\"mt-2 flex items-center justify-between gap-3 text-[11px] text-muted-foreground\">\n <span className=\"truncate\">\n {failureSourceLabel(failure)} · {failure.ownerEmail}\n </span>\n <span className=\"inline-flex shrink-0 items-center gap-1\">\n <IconClock className=\"size-3\" />\n {formatDate(failure.completedAt ?? failure.startedAt)}\n {failure.durationMs == null\n ? null\n : ` · ${formatDuration(failure.durationMs)}`}\n </span>\n </div>\n <span className=\"sr-only\">\n {t(\"dispatch.pages.threadDebugInspectFailure\", {\n defaultValue: \"Inspect failed run\",\n })}\n </span>\n </button>\n );\n}\n\nfunction MessageBlock({ message }: { message: ThreadMessage }) {\n const tools = toolParts(message);\n return (\n <div className=\"rounded-lg bg-card\">\n <div className=\"flex flex-wrap items-center justify-between gap-2 border-b px-3 py-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge\n variant={message.role === \"assistant\" ? \"default\" : \"secondary\"}\n >\n {message.role}\n </Badge>\n <span className=\"truncate text-sm font-medium text-foreground\">\n {messageTitle(message)}\n </span>\n </div>\n <div className=\"flex items-center gap-2 text-[11px] text-muted-foreground\">\n {message.attachments.length > 0 ? (\n <Badge variant=\"outline\">{message.attachments.length} files</Badge>\n ) : null}\n <span>{formatDate(message.createdAt)}</span>\n </div>\n </div>\n <div className=\"space-y-3 px-3 py-3\">\n {message.text ? (\n <div className=\"whitespace-pre-wrap break-words text-sm leading-relaxed text-foreground\">\n {message.text}\n </div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">No text content</div>\n )}\n {tools.length > 0 ? (\n <div className=\"space-y-2\">\n {tools.map((tool, index) => (\n <details\n key={`${message.id ?? message.index}-tool-${index}`}\n className=\"rounded-md border bg-muted/30 px-3 py-2\"\n >\n <summary className=\"cursor-pointer text-xs font-medium text-foreground\">\n {tool.toolName ?? tool.name ?? \"tool-call\"}\n </summary>\n <RawBlock value={tool} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction ThreadDetail({ detail }: { detail: ThreadDebugResponse }) {\n const t = useT();\n const rawBundle = useMemo(\n () => ({\n thread: detail.thread,\n debug: detail.debug,\n debugRuns: detail.debugRuns,\n queuedMessages: detail.queuedMessages,\n threadData: detail.threadData,\n runs: detail.runs,\n traces: detail.traces,\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }),\n [detail],\n );\n\n return (\n <div className=\"rounded-lg bg-card\">\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-base font-semibold text-foreground\">\n {detail.thread.title || detail.thread.preview || detail.thread.id}\n </div>\n <div className=\"mt-1 truncate font-mono text-xs text-muted-foreground\">\n {detail.thread.id}\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge variant=\"secondary\">{detail.messages.length} messages</Badge>\n <Badge variant=\"secondary\">{detail.runs.length} runs</Badge>\n <Badge variant=\"outline\">{detail.source.label}</Badge>\n </div>\n </div>\n <div className=\"mt-3 grid gap-2 text-xs text-muted-foreground sm:grid-cols-3\">\n <div className=\"truncate\">Owner: {detail.thread.ownerEmail}</div>\n <div>Created: {formatDate(detail.thread.createdAt)}</div>\n <div>Updated: {formatDate(detail.thread.updatedAt)}</div>\n </div>\n </div>\n\n <Tabs defaultValue=\"transcript\" className=\"p-4\">\n <TabsList>\n <TabsTrigger value=\"transcript\">Transcript</TabsTrigger>\n <TabsTrigger value=\"runs\">Runs</TabsTrigger>\n <TabsTrigger value=\"internals\">Internals</TabsTrigger>\n <TabsTrigger value=\"raw\">Raw</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"transcript\" className=\"mt-4 space-y-3\">\n {detail.messages.length > 0 ? (\n detail.messages.map((message) => (\n <MessageBlock\n key={message.id ?? `message-${message.index}`}\n message={message}\n />\n ))\n ) : (\n <div className=\"rounded-lg border border-dashed px-4 py-8 text-center text-sm text-muted-foreground\">\n No persisted messages.\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"runs\" className=\"mt-4 space-y-3\">\n {detail.runs.length > 0 ? (\n detail.runs.map((run) => (\n <details key={run.id} className=\"rounded-lg bg-card\">\n <summary className=\"cursor-pointer px-4 py-3\">\n <div className=\"inline-flex flex-wrap items-center gap-2\">\n <Badge variant=\"outline\">{run.status}</Badge>\n <span className=\"font-mono text-xs text-foreground\">\n {run.id}\n </span>\n {run.errorCode ? (\n <span className=\"font-mono text-xs text-destructive\">\n {run.errorCode}\n </span>\n ) : null}\n <span className=\"text-xs text-muted-foreground\">\n {formatDate(run.startedAt)}\n </span>\n </div>\n </summary>\n <div className=\"space-y-3 border-t px-4 py-3\">\n <div className=\"grid gap-2 text-xs sm:grid-cols-2 xl:grid-cols-3\">\n <div>\n <div className=\"text-muted-foreground\">\n {t(\"dispatch.pages.threadDebugFailureCode\", {\n defaultValue: \"Failure code\",\n })}\n </div>\n <div className=\"mt-0.5 break-words font-mono text-foreground\">\n {run.errorCode || \"n/a\"}\n </div>\n </div>\n <div>\n <div className=\"text-muted-foreground\">\n {t(\"dispatch.pages.threadDebugTerminalReason\", {\n defaultValue: \"Terminal reason\",\n })}\n </div>\n <div className=\"mt-0.5 break-words font-mono text-foreground\">\n {run.terminalReason || run.abortReason || \"n/a\"}\n </div>\n </div>\n <div>\n <div className=\"text-muted-foreground\">\n {t(\"dispatch.pages.threadDebugDispatchMode\", {\n defaultValue: \"Dispatch mode\",\n })}\n </div>\n <div className=\"mt-0.5 break-words font-mono text-foreground\">\n {run.dispatchMode || \"foreground\"}\n </div>\n </div>\n <div>\n <div className=\"text-muted-foreground\">\n {t(\"dispatch.pages.threadDebugLastStage\", {\n defaultValue: \"Last stage\",\n })}\n </div>\n <div className=\"mt-0.5 break-words font-mono text-foreground\">\n {diagnosticStage(run.workerStage) ||\n diagnosticStage(run.diagStage) ||\n \"n/a\"}\n </div>\n </div>\n <div>\n <div className=\"text-muted-foreground\">\n {t(\"dispatch.pages.threadDebugDuration\", {\n defaultValue: \"Duration\",\n })}\n </div>\n <div className=\"mt-0.5 text-foreground\">\n {formatDuration(\n run.durationMs ??\n (run.completedAt == null\n ? null\n : run.completedAt - run.startedAt),\n )}\n </div>\n </div>\n <div>\n <div className=\"text-muted-foreground\">\n {t(\"dispatch.pages.threadDebugLastProgress\", {\n defaultValue: \"Last progress\",\n })}\n </div>\n <div className=\"mt-0.5 text-foreground\">\n {formatDate(run.lastProgressAt ?? run.heartbeatAt)}\n </div>\n </div>\n </div>\n {run.errorDetail ? (\n <div className=\"rounded-md bg-destructive/10 px-3 py-2 text-xs leading-relaxed text-destructive\">\n {run.errorDetail}\n </div>\n ) : null}\n {run.events.map((event) => (\n <details\n key={`${run.id}-${event.seq}`}\n className=\"rounded-md border bg-muted/30 px-3 py-2\"\n >\n <summary className=\"cursor-pointer text-xs font-medium text-foreground\">\n #{event.seq} {eventLabel(event.event)}\n </summary>\n <RawBlock value={event.event} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n {run.events.length === 0 ? (\n <div className=\"text-sm text-muted-foreground\">\n No retained run events.\n </div>\n ) : null}\n </div>\n </details>\n ))\n ) : (\n <div className=\"rounded-lg border border-dashed px-4 py-8 text-center text-sm text-muted-foreground\">\n No retained runs.\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"internals\" className=\"mt-4 space-y-4\">\n <div className=\"grid gap-4 lg:grid-cols-2\">\n <div>\n <div className=\"mb-2 text-sm font-medium text-foreground\">\n Debug Runs\n </div>\n <RawBlock\n value={\n detail.debugRuns.length > 0\n ? detail.debugRuns\n : (detail.debug ?? {})\n }\n />\n </div>\n <div>\n <div className=\"mb-2 text-sm font-medium text-foreground\">\n Trace Summaries\n </div>\n <RawBlock value={detail.traces.summaries} />\n </div>\n <div>\n <div className=\"mb-2 text-sm font-medium text-foreground\">\n Trace Spans\n </div>\n <RawBlock value={detail.traces.spans} />\n </div>\n <div>\n <div className=\"mb-2 text-sm font-medium text-foreground\">\n Feedback And Evals\n </div>\n <RawBlock\n value={{\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }}\n />\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"raw\" className=\"mt-4 space-y-4\">\n <RawBlock value={rawBundle} />\n <RawBlock value={detail.rawThreadData} />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n\nexport default function ThreadDebugRoute() {\n const t = useT();\n const [routeSearchParams, setRouteSearchParams] = useSearchParams();\n const mode = parseMode(routeSearchParams.get(\"mode\"));\n const sourceId =\n routeSearchParams.get(\"source\") ||\n (mode === \"failures\" ? \"all\" : \"current\");\n const ownerEmail = routeSearchParams.get(\"owner\") || \"\";\n const query = routeSearchParams.get(\"query\") || \"\";\n const status = parseFailureStatus(routeSearchParams.get(\"status\"));\n const range = parseFailureRange(routeSearchParams.get(\"range\"));\n const runId = routeSearchParams.get(\"runId\") || \"\";\n const threadId = routeSearchParams.get(\"threadId\") || \"\";\n const inspectSourceId = routeSearchParams.get(\"inspectSource\") || \"\";\n const [lookupId, setLookupId] = useState(\"\");\n\n function updateRouteState(\n updates: Record<string, string | null | undefined>,\n ) {\n const next = new URLSearchParams(routeSearchParams);\n for (const [key, value] of Object.entries(updates)) {\n if (value == null || value === \"\") next.delete(key);\n else next.set(key, value);\n }\n setRouteSearchParams(next, { replace: true });\n }\n\n const sourcesQuery = useActionQuery<{\n access: {\n viewerEmail: string;\n orgId: string | null;\n role: string | null;\n envAdmin: boolean;\n canInspectAll: boolean;\n memberCount: number;\n };\n sources: ThreadDebugSource[];\n }>(\"list-agent-thread-sources\", {});\n const { data: sourcesData, isLoading: sourcesLoading } = sourcesQuery;\n\n const sources: ThreadDebugSource[] = sourcesData?.sources ?? [];\n const failureParams = useMemo(\n () => ({\n sourceId,\n ownerEmail: ownerEmail.trim() || undefined,\n status,\n lookbackHours: FAILURE_RANGE_HOURS[range],\n limit: 25,\n }),\n [ownerEmail, range, sourceId, status],\n );\n const {\n data: failuresData,\n isLoading: failuresLoading,\n error: failuresError,\n refetch: refetchFailures,\n } = useActionQuery<AgentRunFailuresResponse>(\n \"list-agent-run-failures\",\n failureParams,\n { enabled: mode === \"failures\" },\n );\n const failures = failuresData?.failures ?? [];\n const unavailableFailureSources = (failuresData?.sources ?? []).filter(\n (source) => source.status !== \"ok\",\n );\n const failureSourceStatusLabels = {\n ok: \"ok\",\n disconnected: t(\"dispatch.pages.threadDebugDisconnected\", {\n defaultValue: \"disconnected\",\n }),\n unsupported: t(\"dispatch.pages.threadDebugUnsupported\", {\n defaultValue: \"unsupported\",\n }),\n unavailable: t(\"dispatch.pages.threadDebugUnavailable\", {\n defaultValue: \"unavailable\",\n }),\n };\n\n const threadSourceId = sourceId === \"all\" ? \"current\" : sourceId;\n const detailSourceId =\n runId && inspectSourceId ? inspectSourceId : threadSourceId;\n const searchParams = useMemo(\n () => ({\n sourceId: threadSourceId,\n query: query.trim() || undefined,\n ownerEmail: ownerEmail.trim() || undefined,\n limit: 25,\n }),\n [ownerEmail, query, threadSourceId],\n );\n const {\n data: searchData,\n isLoading: searchLoading,\n error: searchError,\n refetch: refetchSearch,\n } = useActionQuery<{\n count: number;\n threads: ThreadSearchResult[];\n access: { scope: string; canInspectAll: boolean };\n source: { id: string; label: string };\n }>(\"search-agent-threads\", searchParams, { enabled: mode === \"threads\" });\n const searchThreads: ThreadSearchResult[] = searchData?.threads ?? [];\n\n const detailParams = useMemo(\n () => ({\n sourceId: detailSourceId,\n ...(runId ? { runId } : { threadId }),\n ownerEmail: ownerEmail.trim() || undefined,\n maxRuns: 20,\n maxEvents: 800,\n maxTraceSpans: 600,\n }),\n [detailSourceId, ownerEmail, runId, threadId],\n );\n const {\n data: detail,\n isLoading: detailLoading,\n error: detailError,\n refetch: refetchDetail,\n } = useActionQuery<ThreadDebugResponse>(\n \"get-agent-thread-debug\",\n detailParams,\n {\n enabled: Boolean(runId || threadId),\n },\n );\n\n const selectedSource = sources.find((source) => source.id === threadSourceId);\n const detailPane = (\n <section className=\"min-w-0\">\n {detailError ? (\n <ActionQueryError\n error={detailError}\n onRetry={() => void refetchDetail()}\n />\n ) : null}\n {detailLoading ? (\n <div className=\"rounded-lg bg-card p-4\">\n <Skeleton className=\"h-6 w-72\" />\n <Skeleton className=\"mt-3 h-4 w-96\" />\n <Skeleton className=\"mt-6 h-[520px] w-full\" />\n </div>\n ) : detail ? (\n <ThreadDetail detail={detail} />\n ) : (\n <div className=\"flex min-h-[520px] flex-col items-center justify-center rounded-lg border border-dashed bg-card px-4 text-center text-sm text-muted-foreground\">\n <IconFileSearch className=\"mb-2 size-5\" />\n {t(\"dispatch.pages.threadDebugSelectPrompt\", {\n defaultValue: \"Select a failed run or thread to inspect.\",\n })}\n </div>\n )}\n </section>\n );\n\n return (\n <DispatchShell\n title={t(\"dispatch.pages.threadDebugTitle\", {\n defaultValue: \"Thread Debug\",\n })}\n description={t(\"dispatch.pages.threadDebugDescription\", {\n defaultValue:\n \"Inspect failed agent runs, persisted threads, run events, and AI internals.\",\n })}\n >\n <div className=\"space-y-4\">\n {sourcesQuery.isError ? (\n <ActionQueryError\n error={sourcesQuery.error}\n onRetry={() => void sourcesQuery.refetch()}\n />\n ) : null}\n <Tabs\n value={mode}\n onValueChange={(value) => {\n const nextMode = parseMode(value);\n updateRouteState({\n mode: nextMode,\n source:\n nextMode === \"threads\" && sourceId === \"all\"\n ? \"current\"\n : sourceId,\n runId: null,\n threadId: null,\n inspectSource: null,\n });\n }}\n >\n <TabsList>\n <TabsTrigger value=\"failures\">\n {t(\"dispatch.pages.threadDebugFailedRuns\", {\n defaultValue: \"Failed runs\",\n })}\n </TabsTrigger>\n <TabsTrigger value=\"threads\">\n {t(\"dispatch.pages.threadDebugThreads\", {\n defaultValue: \"Threads\",\n })}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"failures\" className=\"mt-4 space-y-4\">\n <section className=\"rounded-lg bg-card p-4\">\n <div className=\"grid gap-3 md:grid-cols-2 xl:grid-cols-[220px_1fr_180px_150px]\">\n <Select\n value={sourceId}\n onValueChange={(value) =>\n updateRouteState({\n source: value,\n runId: null,\n threadId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugSource\", {\n defaultValue: \"Source\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">\n {t(\"dispatch.pages.threadDebugAllSources\", {\n defaultValue: \"All sources\",\n })}\n </SelectItem>\n {sources.map((source) => (\n <SelectItem key={source.id} value={source.id}>\n {source.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n value={ownerEmail}\n onChange={(event) =>\n updateRouteState({ owner: event.target.value })\n }\n placeholder={t(\"dispatch.pages.threadDebugOwner\", {\n defaultValue: \"Owner email\",\n })}\n />\n <Select\n value={status}\n onValueChange={(value) =>\n updateRouteState({\n status: parseFailureStatus(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugStatus\", {\n defaultValue: \"Status\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">\n {t(\"dispatch.pages.threadDebugAllStatuses\", {\n defaultValue: \"All statuses\",\n })}\n </SelectItem>\n <SelectItem value=\"errored\">\n {t(\"dispatch.pages.threadDebugErrored\", {\n defaultValue: \"Errored\",\n })}\n </SelectItem>\n <SelectItem value=\"aborted\">\n {t(\"dispatch.pages.threadDebugAborted\", {\n defaultValue: \"Aborted\",\n })}\n </SelectItem>\n <SelectItem value=\"truncated\">\n {t(\"dispatch.pages.threadDebugTruncated\", {\n defaultValue: \"Truncated\",\n })}\n </SelectItem>\n </SelectContent>\n </Select>\n <Select\n value={range}\n onValueChange={(value) =>\n updateRouteState({\n range: parseFailureRange(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugRange\", {\n defaultValue: \"Time range\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"24h\">\n {t(\"dispatch.pages.threadDebugRange24h\", {\n defaultValue: \"Last 24 hours\",\n })}\n </SelectItem>\n <SelectItem value=\"7d\">\n {t(\"dispatch.pages.threadDebugRange7d\", {\n defaultValue: \"Last 7 days\",\n })}\n </SelectItem>\n <SelectItem value=\"30d\">\n {t(\"dispatch.pages.threadDebugRange30d\", {\n defaultValue: \"Last 30 days\",\n })}\n </SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n <span>\n {failuresData?.count ?? failures.length}{\" \"}\n {t(\"dispatch.pages.threadDebugFailureResults\", {\n defaultValue: \"failed runs\",\n })}\n </span>\n <span>·</span>\n <span>\n {failuresData?.access?.scope ??\n t(\"dispatch.pages.threadDebugCurrentScope\", {\n defaultValue: \"current scope\",\n })}\n </span>\n {failuresData?.partial ? (\n <Badge variant=\"outline\">\n {t(\"dispatch.pages.threadDebugPartialResults\", {\n defaultValue: \"Partial results\",\n })}\n </Badge>\n ) : null}\n </div>\n {unavailableFailureSources.length > 0 ? (\n <div className=\"mt-2 flex items-start gap-1.5 text-xs text-muted-foreground\">\n <IconAlertTriangle className=\"mt-0.5 size-3.5 shrink-0\" />\n <span>\n {t(\"dispatch.pages.threadDebugUnavailableSources\", {\n defaultValue: \"Unavailable sources:\",\n })}{\" \"}\n {unavailableFailureSources\n .map(\n ({ source, status: sourceStatus }) =>\n `${source.label} (${failureSourceStatusLabels[sourceStatus]})`,\n )\n .join(\", \")}\n </span>\n </div>\n ) : null}\n </section>\n\n {failuresError ? (\n <ActionQueryError\n error={failuresError}\n onRetry={() => void refetchFailures()}\n />\n ) : null}\n\n <div className=\"grid gap-4 xl:grid-cols-[380px_1fr]\">\n <section className=\"min-h-[520px] rounded-lg bg-card\">\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div className=\"text-sm font-semibold text-foreground\">\n {t(\"dispatch.pages.threadDebugFailedRuns\", {\n defaultValue: \"Failed runs\",\n })}\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => void refetchFailures()}\n aria-label={t(\"dispatch.pages.threadDebugRefreshFailures\", {\n defaultValue: \"Refresh failed runs\",\n })}\n >\n <IconRefresh className=\"size-4\" />\n </Button>\n </div>\n <div className=\"max-h-[760px] space-y-2 overflow-auto p-3\">\n {failuresLoading ? (\n <>\n <Skeleton className=\"h-32 w-full rounded-lg\" />\n <Skeleton className=\"h-32 w-full rounded-lg\" />\n <Skeleton className=\"h-32 w-full rounded-lg\" />\n </>\n ) : null}\n {!failuresLoading && failures.length === 0 ? (\n <div className=\"flex min-h-64 flex-col items-center justify-center rounded-lg border border-dashed px-4 text-center text-sm text-muted-foreground\">\n <IconDatabase className=\"mb-2 size-5\" />\n {t(\"dispatch.pages.threadDebugNoFailures\", {\n defaultValue: \"No failed runs found.\",\n })}\n </div>\n ) : null}\n {failures.map((failure) => (\n <FailureCard\n key={`${failureSourceId(failure)}:${failure.id}`}\n failure={failure}\n selected={\n runId === failure.id &&\n detailSourceId === failureSourceId(failure)\n }\n onSelect={() =>\n updateRouteState({\n inspectSource: failureSourceId(failure),\n runId: failure.id,\n threadId: null,\n })\n }\n />\n ))}\n </div>\n </section>\n {detailPane}\n </div>\n </TabsContent>\n\n <TabsContent value=\"threads\" className=\"mt-4 space-y-4\">\n <section className=\"rounded-lg bg-card p-4\">\n <div className=\"grid gap-3 lg:grid-cols-[220px_1fr_260px_auto]\">\n <Select\n value={threadSourceId}\n onValueChange={(value) =>\n updateRouteState({\n source: value,\n runId: null,\n threadId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugSource\", {\n defaultValue: \"Source\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n {sources.map((source) => (\n <SelectItem key={source.id} value={source.id}>\n {source.label}\n </SelectItem>\n ))}\n {sources.length === 0 ? (\n <SelectItem value=\"current\">\n {t(\"dispatch.pages.threadDebugCurrentDatabase\", {\n defaultValue: \"Current Dispatch DB\",\n })}\n </SelectItem>\n ) : null}\n </SelectContent>\n </Select>\n <Input\n value={query}\n onChange={(event) =>\n updateRouteState({ query: event.target.value })\n }\n placeholder={t(\n \"dispatch.pages.threadDebugSearchPlaceholder\",\n {\n defaultValue: \"Search title, preview, messages, tools\",\n },\n )}\n />\n <Input\n value={ownerEmail}\n onChange={(event) =>\n updateRouteState({ owner: event.target.value })\n }\n placeholder={t(\"dispatch.pages.threadDebugOwner\", {\n defaultValue: \"Owner email\",\n })}\n />\n <Button type=\"button\" onClick={() => void refetchSearch()}>\n <IconSearch className=\"size-4\" />\n {t(\"dispatch.pages.threadDebugSearch\", {\n defaultValue: \"Search\",\n })}\n </Button>\n </div>\n\n <div className=\"mt-3 grid gap-3 lg:grid-cols-[1fr_auto]\">\n <Input\n value={lookupId}\n onChange={(event) => setLookupId(event.target.value)}\n placeholder={t(\n \"dispatch.pages.threadDebugLookupPlaceholder\",\n {\n defaultValue: \"Paste thread or request/run ID\",\n },\n )}\n className=\"font-mono\"\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n const trimmed = lookupId.trim();\n if (!trimmed) return;\n updateRouteState(\n trimmed.startsWith(\"run-\")\n ? {\n runId: trimmed,\n threadId: null,\n inspectSource: null,\n }\n : {\n threadId: trimmed,\n runId: null,\n inspectSource: null,\n },\n );\n }}\n >\n <IconFileSearch className=\"size-4\" />\n {t(\"dispatch.pages.threadDebugInspect\", {\n defaultValue: \"Inspect\",\n })}\n </Button>\n </div>\n\n <div className=\"mt-3 flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n {sourcesLoading ? <Skeleton className=\"h-5 w-32\" /> : null}\n {selectedSource ? (\n <SourceBadge source={selectedSource} />\n ) : null}\n {selectedSource?.databaseUrlEnv ? (\n <Badge variant=\"outline\" className=\"font-mono\">\n {selectedSource.databaseUrlEnv}\n </Badge>\n ) : null}\n {sourcesData?.access ? (\n <span>\n {sourcesData.access.viewerEmail} ·{\" \"}\n {sourcesData.access.canInspectAll\n ? t(\"dispatch.pages.threadDebugAdminScope\", {\n defaultValue: \"admin scope\",\n })\n : t(\"dispatch.pages.threadDebugOwnScope\", {\n defaultValue: \"own scope\",\n })}\n </span>\n ) : null}\n </div>\n </section>\n\n {searchError ? (\n <ActionQueryError\n error={searchError}\n onRetry={() => void refetchSearch()}\n />\n ) : null}\n\n <div className=\"grid gap-4 xl:grid-cols-[380px_1fr]\">\n <section className=\"min-h-[520px] rounded-lg bg-card\">\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div>\n <div className=\"text-sm font-semibold text-foreground\">\n {t(\"dispatch.pages.threadDebugThreads\", {\n defaultValue: \"Threads\",\n })}\n </div>\n <div className=\"text-xs text-muted-foreground\">\n {searchData?.count ?? 0}{\" \"}\n {t(\"dispatch.pages.threadDebugResults\", {\n defaultValue: \"results\",\n })}{\" \"}\n ·{\" \"}\n {searchData?.access?.scope ??\n t(\"dispatch.pages.threadDebugCurrentScope\", {\n defaultValue: \"current scope\",\n })}\n </div>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => void refetchSearch()}\n aria-label={t(\"dispatch.pages.threadDebugRefreshThreads\", {\n defaultValue: \"Refresh threads\",\n })}\n >\n <IconRefresh className=\"size-4\" />\n </Button>\n </div>\n <div className=\"max-h-[760px] space-y-2 overflow-auto p-3\">\n {searchLoading ? (\n <>\n <Skeleton className=\"h-28 w-full rounded-lg\" />\n <Skeleton className=\"h-28 w-full rounded-lg\" />\n <Skeleton className=\"h-28 w-full rounded-lg\" />\n </>\n ) : null}\n {!searchLoading && searchThreads.length === 0 ? (\n <div className=\"flex min-h-64 flex-col items-center justify-center rounded-lg border border-dashed px-4 text-center text-sm text-muted-foreground\">\n <IconDatabase className=\"mb-2 size-5\" />\n {t(\"dispatch.pages.threadDebugNoThreads\", {\n defaultValue: \"No threads found.\",\n })}\n </div>\n ) : null}\n {searchThreads.map((result) => (\n <ResultCard\n key={result.id}\n result={result}\n selected={threadId === result.id}\n onSelect={() =>\n updateRouteState({\n threadId: result.id,\n runId: null,\n inspectSource: null,\n })\n }\n />\n ))}\n </div>\n </section>\n {detailPane}\n </div>\n </TabsContent>\n </Tabs>\n </div>\n </DispatchShell>\n );\n}\n"]}
1
+ {"version":3,"file":"thread-debug.js","sourceRoot":"","sources":["../../../src/routes/pages/thread-debug.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useActionQuery } from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport {\n IconActivity,\n IconAdjustmentsHorizontal,\n IconAlertTriangle,\n IconCopy,\n IconDatabase,\n IconFileSearch,\n IconInfoCircle,\n IconRefresh,\n IconSearch,\n IconTool,\n} from \"@tabler/icons-react\";\nimport { useMemo, useState } from \"react\";\nimport { useSearchParams } from \"react-router\";\n\nimport { ActionQueryError } from \"../../components/action-query-error\";\nimport { DispatchShell } from \"../../components/dispatch-shell\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { Input } from \"../../components/ui/input\";\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n} from \"../../components/ui/popover\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport { Skeleton } from \"../../components/ui/skeleton\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../components/ui/tabs\";\nimport { cn } from \"../../lib/utils\";\n\nexport function meta() {\n return [{ title: \"Thread Debug — Dispatch\" }];\n}\n\ninterface ThreadDebugSource {\n id: string;\n label: string;\n kind: \"current\" | \"env\" | \"configured\";\n current: boolean;\n connected: boolean;\n databaseUrlEnv: string | null;\n databaseAuthTokenEnv: string | null;\n canInspectAll: boolean;\n}\n\ninterface ThreadSearchResult {\n id: string;\n ownerEmail: string;\n title: string;\n preview: string;\n messageCount: number;\n createdAt: number;\n updatedAt: number;\n snippet: string;\n}\n\ninterface ThreadMessage {\n index: number;\n id: string | null;\n role: string;\n createdAt: string | number | null;\n status: unknown;\n text: string;\n contentParts: any[];\n attachments: any[];\n metadata: unknown;\n}\n\ninterface ThreadRun {\n id: string;\n status: string;\n turnId?: string | null;\n abortReason: string | null;\n errorCode?: string | null;\n errorDetail?: string | null;\n terminalReason?: string | null;\n dispatchMode?: string | null;\n diagStage?: string | null;\n workerStage?: string | null;\n startedAt: number;\n completedAt: number | null;\n heartbeatAt: number | null;\n lastProgressAt?: number | null;\n durationMs?: number | null;\n peakRssMb?: number | null;\n inFlightSince?: number | null;\n hasDispatchPayload?: boolean;\n events: Array<{ seq: number; event: any; rawEventData: string }>;\n}\n\ntype ThreadDebugMode = \"failures\" | \"threads\";\ntype FailureStatus = \"all\" | \"errored\" | \"aborted\" | \"truncated\";\ntype FailureRegime = \"all\" | \"interactive\" | \"scheduled\";\ntype FailureRange = \"24h\" | \"7d\" | \"30d\";\n\ninterface FailureTaxonomy {\n code: string;\n label: string;\n regime: \"interactive\" | \"scheduled\";\n source: \"error_code\" | \"error_detail\" | \"unknown\";\n}\n\ninterface RunFailureLike {\n id?: string;\n status?: string | null;\n errorCode?: string | null;\n errorDetail?: string | null;\n terminalReason?: string | null;\n abortReason?: string | null;\n dispatchMode?: string | null;\n diagStage?: string | null;\n workerStage?: string | null;\n durationMs?: number | null;\n heartbeatAt?: number | null;\n lastProgressAt?: number | null;\n}\n\ninterface AgentRunFailure {\n id: string;\n threadId: string;\n sourceId?: string;\n sourceLabel?: string;\n source?: {\n id: string;\n label: string;\n kind?: string;\n databaseUrlEnv?: string | null;\n };\n ownerEmail: string;\n turnId?: string | null;\n threadTitle: string;\n threadPreview: string;\n status: string;\n errorCode: string | null;\n errorDetail: string | null;\n terminalReason: string | null;\n abortReason: string | null;\n heartbeatAt?: number | null;\n lastProgressAt?: number | null;\n dispatchMode: string | null;\n diagStage: string | null;\n workerStage?: string | null;\n startedAt: number;\n completedAt: number | null;\n durationMs: number | null;\n regime?: \"interactive\" | \"scheduled\";\n failureTaxonomy?: FailureTaxonomy;\n}\n\ninterface AgentRunFailuresResponse {\n failures: AgentRunFailure[];\n sources: Array<{\n source: {\n id: string;\n label: string;\n kind?: string;\n databaseUrlEnv?: string | null;\n };\n status: \"ok\" | \"unsupported\" | \"unavailable\" | \"disconnected\";\n failureCount: number;\n errorCode?: string | null;\n }>;\n partial: boolean;\n count?: number;\n access: { viewerEmail: string; scope: string; canInspectAll: boolean };\n filters?: {\n sourceId?: string;\n status?: FailureStatus;\n lookbackHours?: number;\n limit?: number;\n };\n}\n\ninterface ThreadDebugResponse {\n source: {\n id: string;\n label: string;\n kind: string;\n databaseUrlEnv: string | null;\n };\n access: { viewerEmail: string; scope: string; canInspectAll: boolean };\n thread: ThreadSearchResult;\n lookup?: { requestedId: string; threadId: string; runId: string | null };\n messages: ThreadMessage[];\n debug: any;\n debugRuns: any[];\n queuedMessages: any[];\n threadData: any;\n rawThreadData: string;\n runs: ThreadRun[];\n traces: { summaries: any[]; spans: any[] };\n feedback: any[];\n satisfaction: any[];\n evals: any[];\n checkpoints: any[];\n}\n\nconst FAILURE_RANGE_HOURS: Record<FailureRange, number> = {\n \"24h\": 24,\n \"7d\": 7 * 24,\n \"30d\": 30 * 24,\n};\n\nconst EMPTY_FAILURES: AgentRunFailure[] = [];\n\nfunction parseMode(value: string | null): ThreadDebugMode {\n return value === \"threads\" ? \"threads\" : \"failures\";\n}\n\nfunction parseFailureStatus(value: string | null): FailureStatus {\n return value === \"errored\" || value === \"aborted\" || value === \"truncated\"\n ? value\n : \"all\";\n}\n\nfunction parseFailureRegime(value: string | null): FailureRegime {\n return value === \"interactive\" || value === \"scheduled\" ? value : \"all\";\n}\n\nfunction parseFailureRange(value: string | null): FailureRange {\n return value === \"7d\" || value === \"30d\" ? value : \"24h\";\n}\n\nfunction failureSourceId(failure: AgentRunFailure): string {\n return failure.sourceId || failure.source?.id || \"current\";\n}\n\nfunction failureSourceLabel(failure: AgentRunFailure): string {\n return (\n failure.sourceLabel || failure.source?.label || failureSourceId(failure)\n );\n}\n\nfunction isTechnicalIdentifier(value: string): boolean {\n return /^(?:job|run|thread|turn|request|req)-[a-z0-9][a-z0-9_-]*$/i.test(\n value.trim(),\n );\n}\n\nfunction displayListTitle(\n value: string | null | undefined,\n fallbackValue: string | null | undefined,\n fallbackLabel: string,\n): string {\n const candidate = [value, fallbackValue]\n .map((entry) => entry?.trim() || \"\")\n .find((entry) => entry && !isTechnicalIdentifier(entry));\n if (!candidate) return fallbackLabel;\n\n const withoutDate = candidate\n .replace(/\\s+[—-]\\s+\\d{1,2}\\/\\d{1,2}\\/\\d{4}\\s*$/, \"\")\n .trim();\n if (!withoutDate) return fallbackLabel;\n\n if (/^job:/i.test(withoutDate)) {\n return withoutDate\n .replace(/^job:\\s*/i, \"\")\n .replace(/[-_]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .replace(/\\b\\w/g, (character) => character.toUpperCase())\n .trim();\n }\n\n return withoutDate;\n}\n\nfunction formatDate(value: number | string | null | undefined): string {\n if (value == null || value === \"\") return \"n/a\";\n const numeric = Number(value);\n const date = Number.isFinite(numeric) ? new Date(numeric) : new Date(value);\n if (Number.isNaN(date.getTime())) return \"n/a\";\n return date.toLocaleString();\n}\n\nfunction formatRelativeDate(value: number | string | null | undefined): string {\n if (value == null || value === \"\") return \"n/a\";\n const numeric = Number(value);\n const timestamp = Number.isFinite(numeric)\n ? numeric\n : new Date(value).getTime();\n if (!Number.isFinite(timestamp)) return \"n/a\";\n const elapsed = Date.now() - timestamp;\n if (elapsed < 0) return \"in a moment\";\n if (elapsed < 60_000) return \"just now\";\n if (elapsed < 3_600_000) return `${Math.floor(elapsed / 60_000)}m ago`;\n if (elapsed < 86_400_000) return `${Math.floor(elapsed / 3_600_000)}h ago`;\n return `${Math.floor(elapsed / 86_400_000)}d ago`;\n}\n\nfunction formatDuration(value: number | null | undefined): string {\n if (value == null || !Number.isFinite(value)) return \"n/a\";\n if (value < 1_000) return `${Math.round(value)}ms`;\n if (value < 60_000) return `${(value / 1_000).toFixed(1)}s`;\n return `${(value / 60_000).toFixed(1)}m`;\n}\n\nfunction humanizeIdentifier(value: string | null | undefined): string {\n if (!value) return \"Unknown failure\";\n return value\n .replace(/^(error:|failure:)/, \"\")\n .replace(/[_-]+/g, \" \")\n .replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction failureLabel(run: RunFailureLike): string {\n const code = run.errorCode || run.terminalReason || run.abortReason;\n const labels: Record<string, string> = {\n stale_run: \"Worker heartbeat stopped\",\n background_worker_never_started: \"Background worker never started\",\n background_worker_failed: \"Background worker setup failed\",\n builder_gateway_network_error: \"Gateway stream ended early\",\n provider_timeout: \"Provider timed out\",\n provider_network_error: \"Provider connection dropped\",\n provider_config_error: \"Provider configuration rejected\",\n authentication_error: \"Provider authentication failed\",\n overloaded_error: \"Provider was overloaded\",\n \"aborted:user\": \"Stopped by user\",\n };\n return (code && labels[code]) || humanizeIdentifier(code);\n}\n\nfunction runDiagnosis(run: RunFailureLike): {\n title: string;\n summary: string;\n nextStep: string;\n code: string;\n} {\n const code =\n run.errorCode || run.terminalReason || run.abortReason || \"unknown\";\n if (code === \"stale_run\") {\n const workerStarted = run.dispatchMode === \"background-processing\";\n return {\n title: \"Worker stopped reporting\",\n summary: workerStarted\n ? \"The worker claimed this run, then stopped writing heartbeat or progress signals before it finished. This is a liveness failure, not proof that the provider failed.\"\n : \"The run stayed active until liveness recovery closed it. No completed result was recorded, so inspect the handoff and retained evidence before blaming a provider.\",\n nextStep: workerStarted\n ? \"Check the last worker stage and database heartbeat writes.\"\n : \"Check the scheduled background handoff and whether a worker claimed it.\",\n code,\n };\n }\n if (code === \"background_worker_never_started\") {\n return {\n title: \"Background worker never started\",\n summary:\n \"The handoff was acknowledged, but no background worker claimed the run.\",\n nextStep:\n \"Check the background route, authentication, and function logs.\",\n code,\n };\n }\n if (code === \"background_worker_failed\") {\n return {\n title: \"Background worker failed during setup\",\n summary:\n \"The worker claimed the run but stopped before it could start the turn.\",\n nextStep:\n \"Use the recorded setup stage and worker logs to find the first failure.\",\n code,\n };\n }\n if (code === \"builder_gateway_network_error\") {\n return {\n title: \"Gateway stream ended early\",\n summary:\n run.errorDetail ||\n \"The model stream ended before the run emitted a terminal event.\",\n nextStep:\n \"Retry once; if it repeats, inspect gateway and provider transport health.\",\n code,\n };\n }\n if (code === \"aborted:user\") {\n return {\n title: \"Stopped by user\",\n summary: \"This run was explicitly aborted and is not a system failure.\",\n nextStep: \"No recovery action is required.\",\n code,\n };\n }\n return {\n title: failureLabel(run),\n summary:\n run.errorDetail || \"The run ended without a more specific explanation.\",\n nextStep: \"Open the timeline and inspect the last recorded stage or event.\",\n code,\n };\n}\n\nfunction eventType(event: any): string {\n return typeof event?.type === \"string\" ? event.type : \"event\";\n}\n\nfunction eventIsNoise(event: any): boolean {\n return [\n \"thinking\",\n \"text\",\n \"tool_input_delta\",\n \"stream_keepalive\",\n \"activity\",\n ].includes(eventType(event));\n}\n\nfunction summarizeEvents(events: ThreadRun[\"events\"]) {\n const toolNames = new Map<string, number>();\n let toolStarts = 0;\n for (const entry of events) {\n if (eventType(entry.event) !== \"tool_start\") continue;\n toolStarts += 1;\n const name = String(entry.event?.tool ?? \"tool\");\n toolNames.set(name, (toolNames.get(name) ?? 0) + 1);\n }\n return {\n toolStarts,\n toolNames: [...toolNames.entries()],\n meaningful: events.filter((entry) => !eventIsNoise(entry.event)).slice(-12),\n };\n}\n\nfunction json(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction eventLabel(event: any): string {\n if (!event || typeof event !== \"object\") return \"event\";\n if (event.type === \"tool_start\") return `tool_start · ${event.tool}`;\n if (event.type === \"tool_done\") return `tool_done · ${event.tool}`;\n if (event.type === \"text\") return \"text\";\n if (event.type === \"error\") return `error · ${event.errorCode ?? \"agent\"}`;\n return String(event.type ?? \"event\");\n}\n\nfunction messageTitle(message: ThreadMessage): string {\n const role = message.role || \"unknown\";\n return `${role.charAt(0).toUpperCase()}${role.slice(1)} ${message.index + 1}`;\n}\n\nfunction toolParts(message: ThreadMessage): any[] {\n return message.contentParts.filter((part) => part?.type === \"tool-call\");\n}\n\nfunction diagnosticStage(value: string | null | undefined): string | null {\n if (!value) return null;\n try {\n const parsed = JSON.parse(value) as { stage?: unknown; detail?: unknown };\n const stage =\n typeof parsed.stage === \"string\" && parsed.stage.trim()\n ? parsed.stage.trim()\n : value;\n const detail =\n typeof parsed.detail === \"string\" && parsed.detail.trim()\n ? parsed.detail.trim()\n : \"\";\n return detail ? `${stage}: ${detail}` : stage;\n } catch {\n return value;\n }\n}\n\nfunction RawBlock({\n value,\n className,\n}: {\n value: unknown;\n className?: string;\n}) {\n return (\n <pre\n className={cn(\n \"max-h-[520px] overflow-auto rounded-lg border bg-muted/30 p-3 text-xs leading-relaxed text-foreground\",\n \"whitespace-pre-wrap break-words\",\n className,\n )}\n >\n {typeof value === \"string\" ? value : json(value)}\n </pre>\n );\n}\n\nfunction ResultCard({\n result,\n selected,\n onSelect,\n}: {\n result: ThreadSearchResult;\n selected: boolean;\n onSelect: () => void;\n}) {\n const title = displayListTitle(\n result.title,\n result.preview,\n \"Untitled thread\",\n );\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n aria-current={selected ? \"true\" : undefined}\n className={cn(\n \"group w-full border-b px-4 py-3 text-left transition-colors last:border-b-0\",\n selected ? \"bg-accent/70\" : \"hover:bg-muted/50\",\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {title}\n </div>\n </div>\n <Badge variant=\"outline\" className=\"shrink-0\">\n {result.messageCount}{\" \"}\n {result.messageCount === 1 ? \"message\" : \"messages\"}\n </Badge>\n </div>\n <div className=\"mt-2 flex items-center justify-between gap-3 text-[11px] text-muted-foreground\">\n <span className=\"min-w-0 truncate\">{result.ownerEmail}</span>\n <span className=\"shrink-0\">{formatRelativeDate(result.updatedAt)}</span>\n </div>\n </button>\n );\n}\n\nfunction FailureCard({\n failure,\n selected,\n onSelect,\n}: {\n failure: AgentRunFailure;\n selected: boolean;\n onSelect: () => void;\n}) {\n const t = useT();\n const diagnosis = runDiagnosis(failure);\n const title = displayListTitle(\n failure.threadTitle,\n failure.threadPreview,\n \"Agent run\",\n );\n const statusLabel =\n failure.status === \"errored\"\n ? t(\"dispatch.pages.threadDebugErrored\", {\n defaultValue: \"Errored\",\n })\n : failure.status === \"aborted\"\n ? t(\"dispatch.pages.threadDebugAborted\", {\n defaultValue: \"Aborted\",\n })\n : failure.status === \"truncated\"\n ? t(\"dispatch.pages.threadDebugTruncated\", {\n defaultValue: \"Truncated\",\n })\n : failure.status;\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n aria-current={selected ? \"true\" : undefined}\n className={cn(\n \"group w-full border-b px-4 py-3 text-left transition-[background-color,border-color] last:border-b-0\",\n selected ? \"bg-accent/70\" : \"hover:bg-muted/50\",\n )}\n >\n <div className=\"flex items-start gap-3\">\n <span\n aria-hidden=\"true\"\n className={cn(\n \"mt-1.5 size-2 shrink-0 rounded-full\",\n failure.status === \"aborted\"\n ? \"bg-muted-foreground/50\"\n : \"bg-destructive\",\n )}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {title}\n </div>\n <div className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {failureSourceLabel(failure)}\n </div>\n </div>\n <span className=\"shrink-0 text-[11px] text-muted-foreground\">\n {formatRelativeDate(failure.completedAt ?? failure.startedAt)}\n </span>\n </div>\n <div className=\"mt-2 flex min-w-0 items-center gap-2 text-xs\">\n <span className=\"truncate font-medium text-foreground\">\n {diagnosis.title}\n </span>\n <span className=\"shrink-0 text-muted-foreground\">·</span>\n <span className=\"shrink-0 text-muted-foreground\">\n {statusLabel}\n </span>\n </div>\n {failure.durationMs == null ? null : (\n <div className=\"mt-1 text-[11px] text-muted-foreground\">\n {formatDuration(failure.durationMs)}\n </div>\n )}\n </div>\n </div>\n <span className=\"sr-only\">\n {t(\"dispatch.pages.threadDebugInspectFailure\", {\n defaultValue: \"Inspect failed run\",\n })}\n </span>\n </button>\n );\n}\n\nfunction MessageBlock({ message }: { message: ThreadMessage }) {\n const tools = toolParts(message);\n return (\n <div className=\"rounded-lg bg-card\">\n <div className=\"flex flex-wrap items-center justify-between gap-2 border-b px-3 py-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge\n variant={message.role === \"assistant\" ? \"default\" : \"secondary\"}\n >\n {message.role}\n </Badge>\n <span className=\"truncate text-sm font-medium text-foreground\">\n {messageTitle(message)}\n </span>\n </div>\n <div className=\"flex items-center gap-2 text-[11px] text-muted-foreground\">\n {message.attachments.length > 0 ? (\n <Badge variant=\"outline\">{message.attachments.length} files</Badge>\n ) : null}\n <span>{formatDate(message.createdAt)}</span>\n </div>\n </div>\n <div className=\"space-y-3 px-3 py-3\">\n {message.text ? (\n <div className=\"whitespace-pre-wrap break-words text-sm leading-relaxed text-foreground\">\n {message.text}\n </div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">No text content</div>\n )}\n {tools.length > 0 ? (\n <div className=\"space-y-2\">\n {tools.map((tool, index) => (\n <details\n key={`${message.id ?? message.index}-tool-${index}`}\n className=\"rounded-md border bg-muted/30 px-3 py-2\"\n >\n <summary className=\"cursor-pointer text-xs font-medium text-foreground\">\n {tool.toolName ?? tool.name ?? \"tool-call\"}\n </summary>\n <RawBlock value={tool} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction EvidenceStat({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"min-w-0\">\n <div className=\"text-[11px] text-muted-foreground\">{label}</div>\n <div className=\"mt-1 truncate text-sm font-medium text-foreground\">\n {value}\n </div>\n </div>\n );\n}\n\nfunction DiagnosisPanel({\n run,\n eventCount,\n toolCount,\n}: {\n run: ThreadRun;\n eventCount: number;\n toolCount: number;\n}) {\n const diagnosis = runDiagnosis(run);\n const isStoppedByUser = diagnosis.code === \"aborted:user\";\n const isScheduled =\n run.id?.startsWith(\"job-\") || run.dispatchMode === \"background-processing\";\n const workerClaimed = run.dispatchMode === \"background-processing\";\n const staleThreshold = isScheduled\n ? workerClaimed\n ? \"45s after claim\"\n : \"90s before claim\"\n : \"15s\";\n return (\n <section\n className={cn(\n \"border-b px-5 py-4\",\n isStoppedByUser ? \"bg-muted/20\" : \"bg-destructive/[0.04]\",\n )}\n aria-label=\"Run diagnosis\"\n >\n <div className=\"flex items-start gap-3\">\n <span\n aria-hidden=\"true\"\n className={cn(\n \"mt-1.5 size-2 shrink-0 rounded-full\",\n isStoppedByUser ? \"bg-muted-foreground/50\" : \"bg-destructive\",\n )}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-start justify-between gap-2\">\n <div>\n <h2 className=\"text-sm font-semibold text-foreground\">\n {diagnosis.title}\n </h2>\n <p className=\"mt-1 max-w-3xl text-sm leading-relaxed text-muted-foreground\">\n {diagnosis.summary}\n </p>\n </div>\n <span className=\"font-mono text-[11px] text-muted-foreground\">\n {diagnosis.code}\n </span>\n </div>\n <div className=\"mt-3 flex items-start gap-2 text-xs text-foreground\">\n <IconInfoCircle className=\"mt-0.5 size-3.5 shrink-0 text-muted-foreground\" />\n <span>\n <span className=\"font-medium\">Next check:</span>{\" \"}\n {diagnosis.nextStep}\n </span>\n </div>\n </div>\n </div>\n <div className=\"mt-4 grid gap-3 border-t pt-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-7\">\n <EvidenceStat\n label=\"Run type\"\n value={isScheduled ? \"Scheduled job\" : \"Interactive chat\"}\n />\n <EvidenceStat\n label=\"Worker claim\"\n value={workerClaimed ? \"Claimed\" : \"Not recorded\"}\n />\n <EvidenceStat\n label=\"Last heartbeat\"\n value={formatDate(run.heartbeatAt)}\n />\n <EvidenceStat\n label=\"Last progress\"\n value={formatDate(run.lastProgressAt)}\n />\n <EvidenceStat label=\"Stale threshold\" value={staleThreshold} />\n <EvidenceStat\n label=\"Recovery payload\"\n value={run.hasDispatchPayload ? \"Retained\" : \"Not retained\"}\n />\n <EvidenceStat\n label=\"Worker stage\"\n value={\n diagnosticStage(run.workerStage) ||\n diagnosticStage(run.diagStage) ||\n \"Not recorded\"\n }\n />\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground\">\n <span>\n Evidence:{\" \"}\n <span className=\"font-medium text-foreground\">\n {eventCount.toLocaleString()}\n </span>{\" \"}\n retained events\n </span>\n <span aria-hidden=\"true\">·</span>\n <span>\n <span className=\"font-medium text-foreground\">\n {toolCount.toLocaleString()}\n </span>{\" \"}\n tool starts\n </span>\n <span aria-hidden=\"true\">·</span>\n <span>Liveness uses the newer heartbeat or progress timestamp.</span>\n </div>\n </section>\n );\n}\n\nfunction RunTimeline({ run }: { run: ThreadRun }) {\n const summary = summarizeEvents(run.events);\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center justify-between gap-3 border-b pb-3\">\n <div className=\"flex items-center gap-2\">\n <IconActivity className=\"size-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">\n {run.events.length.toLocaleString()} events retained\n </span>\n <span className=\"text-xs text-muted-foreground\">\n {summary.toolStarts} tool starts\n </span>\n </div>\n <span className=\"text-xs text-muted-foreground\">\n Started {formatDate(run.startedAt)}\n </span>\n </div>\n\n {summary.toolNames.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {summary.toolNames.map(([name, count]) => (\n <span\n key={name}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-muted/60 px-2 py-1 text-xs text-foreground\"\n >\n <IconTool className=\"size-3.5 text-muted-foreground\" />\n {name} <span className=\"text-muted-foreground\">×{count}</span>\n </span>\n ))}\n </div>\n ) : null}\n\n <div className=\"divide-y rounded-lg border\">\n {summary.meaningful.length > 0 ? (\n summary.meaningful.map((entry) => (\n <div\n key={`${run.id}-${entry.seq}`}\n className=\"flex items-start gap-3 px-3 py-2.5 text-xs\"\n >\n <span className=\"w-8 shrink-0 font-mono text-muted-foreground\">\n #{entry.seq}\n </span>\n <span className=\"min-w-0 flex-1 break-words text-foreground\">\n {eventLabel(entry.event)}\n </span>\n </div>\n ))\n ) : (\n <div className=\"px-3 py-4 text-sm text-muted-foreground\">\n No summarized events were retained for this run.\n </div>\n )}\n </div>\n\n <details className=\"rounded-lg border\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-2.5 text-xs font-medium text-foreground\">\n <span>Show raw event stream</span>\n <span className=\"font-normal text-muted-foreground\">\n {run.events.length.toLocaleString()} records\n </span>\n </summary>\n <div className=\"space-y-2 border-t p-3\">\n {run.events.map((entry) => (\n <details\n key={`${run.id}-raw-${entry.seq}`}\n className=\"rounded-md border bg-muted/20 px-3 py-2\"\n >\n <summary className=\"cursor-pointer text-xs text-foreground\">\n #{entry.seq} {eventLabel(entry.event)}\n </summary>\n <RawBlock value={entry.event} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n </div>\n </details>\n </div>\n );\n}\n\nfunction ThreadDetail({ detail }: { detail: ThreadDebugResponse }) {\n const rawBundle = useMemo(\n () => ({\n thread: detail.thread,\n debug: detail.debug,\n debugRuns: detail.debugRuns,\n queuedMessages: detail.queuedMessages,\n threadData: detail.threadData,\n runs: detail.runs,\n traces: detail.traces,\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }),\n [detail],\n );\n const primaryRun =\n detail.runs.find((run) => run.id === detail.lookup?.runId) ??\n detail.runs[0] ??\n null;\n const eventCount = detail.runs.reduce(\n (total, run) => total + run.events.length,\n 0,\n );\n const toolCount = detail.runs.reduce(\n (total, run) => total + summarizeEvents(run.events).toolStarts,\n 0,\n );\n\n return (\n <div className=\"min-w-0\">\n <div className=\"border-b px-5 py-4\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-base font-semibold text-foreground\">\n {detail.thread.title || detail.thread.preview || detail.thread.id}\n </div>\n <div className=\"mt-1 flex min-w-0 items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"truncate font-mono\">\n {detail.lookup?.runId || detail.thread.id}\n </span>\n {detail.lookup?.runId ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0\"\n title=\"Copy run ID\"\n aria-label=\"Copy run ID\"\n onClick={() =>\n void navigator.clipboard?.writeText(\n detail.lookup?.runId ?? \"\",\n )\n }\n >\n <IconCopy className=\"size-3.5\" />\n </Button>\n ) : null}\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n {primaryRun ? (\n <Badge\n variant={\n primaryRun.status === \"errored\" ? \"destructive\" : \"secondary\"\n }\n >\n {primaryRun.status}\n </Badge>\n ) : null}\n <Badge variant=\"outline\">{detail.source.label}</Badge>\n </div>\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground\">\n <span className=\"truncate\">{detail.thread.ownerEmail}</span>\n <span aria-hidden=\"true\">·</span>\n <span>{detail.messages.length} messages</span>\n <span aria-hidden=\"true\">·</span>\n <span>{detail.runs.length} runs</span>\n <span aria-hidden=\"true\">·</span>\n <span>updated {formatDate(detail.thread.updatedAt)}</span>\n </div>\n </div>\n\n {primaryRun ? (\n <DiagnosisPanel\n run={primaryRun}\n eventCount={eventCount}\n toolCount={toolCount}\n />\n ) : null}\n\n <Tabs defaultValue=\"overview\" className=\"p-5\">\n <TabsList className=\"h-9\">\n <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n <TabsTrigger value=\"timeline\">Timeline</TabsTrigger>\n <TabsTrigger value=\"transcript\">Transcript</TabsTrigger>\n <TabsTrigger value=\"technical\">Technical</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"overview\" className=\"mt-4 space-y-4\">\n <div className=\"flex items-start gap-2 border-b pb-4 text-sm text-muted-foreground\">\n <IconInfoCircle className=\"mt-0.5 size-4 shrink-0\" />\n <p className=\"max-w-2xl leading-relaxed\">\n This is the compact readout. Open Timeline for the last meaningful\n signals, Transcript for persisted messages and tool calls, or\n Technical for raw records.\n </p>\n </div>\n <div className=\"grid gap-4 sm:grid-cols-2 xl:grid-cols-3\">\n <EvidenceStat\n label=\"Created\"\n value={formatDate(detail.thread.createdAt)}\n />\n <EvidenceStat\n label=\"Updated\"\n value={formatDate(detail.thread.updatedAt)}\n />\n <EvidenceStat label=\"Source\" value={detail.source.label} />\n <EvidenceStat\n label=\"Messages\"\n value={detail.messages.length.toLocaleString()}\n />\n <EvidenceStat\n label=\"Retained events\"\n value={eventCount.toLocaleString()}\n />\n <EvidenceStat\n label=\"Tool starts\"\n value={toolCount.toLocaleString()}\n />\n </div>\n {detail.messages.length === 0 && eventCount > 0 ? (\n <div className=\"flex items-start gap-2 rounded-lg border bg-muted/20 px-3 py-3 text-sm text-muted-foreground\">\n <IconActivity className=\"mt-0.5 size-4 shrink-0\" />\n <span>\n No persisted messages are available, but this run retained{\" \"}\n {eventCount.toLocaleString()} execution events. The timeline is\n the authoritative audit trail for this run.\n </span>\n </div>\n ) : null}\n </TabsContent>\n\n <TabsContent value=\"timeline\" className=\"mt-4 space-y-5\">\n {detail.runs.length > 0 ? (\n detail.runs.map((run) => (\n <section\n key={run.id}\n className=\"border-b pb-5 last:border-b-0 last:pb-0\"\n >\n <div className=\"mb-3 flex flex-wrap items-center gap-2\">\n <Badge\n variant={\n run.status === \"errored\" ? \"destructive\" : \"outline\"\n }\n >\n {run.status}\n </Badge>\n <span className=\"font-mono text-xs text-muted-foreground\">\n {run.id}\n </span>\n <span className=\"text-xs text-muted-foreground\">\n {formatDuration(run.durationMs)}\n </span>\n </div>\n <RunTimeline run={run} />\n </section>\n ))\n ) : (\n <div className=\"rounded-lg border border-dashed px-4 py-8 text-center text-sm text-muted-foreground\">\n No retained runs.\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"transcript\" className=\"mt-4 space-y-3\">\n {detail.messages.length > 0 ? (\n detail.messages.map((message) => (\n <MessageBlock\n key={message.id ?? `message-${message.index}`}\n message={message}\n />\n ))\n ) : (\n <div className=\"rounded-lg border border-dashed px-4 py-8 text-center text-sm text-muted-foreground\">\n <div>No persisted messages.</div>\n {eventCount > 0 ? (\n <div className=\"mt-1\">\n Open Timeline to audit the retained execution events.\n </div>\n ) : null}\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"technical\" className=\"mt-4 space-y-3\">\n <details className=\"rounded-lg border\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-3 text-sm font-medium text-foreground\">\n <span>Run records</span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n {detail.runs.length} {detail.runs.length === 1 ? \"run\" : \"runs\"}\n </span>\n </summary>\n <div className=\"space-y-4 border-t p-3\">\n {detail.runs.length > 0 ? (\n detail.runs.map((run) => (\n <div key={run.id} className=\"space-y-3\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge\n variant={\n run.status === \"errored\" ? \"destructive\" : \"outline\"\n }\n >\n {run.status}\n </Badge>\n <span className=\"break-all font-mono text-xs text-foreground\">\n {run.id}\n </span>\n </div>\n <div className=\"grid gap-3 text-xs sm:grid-cols-2 xl:grid-cols-3\">\n <EvidenceStat\n label=\"Failure code\"\n value={run.errorCode || \"n/a\"}\n />\n <EvidenceStat\n label=\"Terminal reason\"\n value={run.terminalReason || run.abortReason || \"n/a\"}\n />\n <EvidenceStat\n label=\"Dispatch mode\"\n value={run.dispatchMode || \"foreground\"}\n />\n <EvidenceStat\n label=\"Last stage\"\n value={\n diagnosticStage(run.workerStage) ||\n diagnosticStage(run.diagStage) ||\n \"n/a\"\n }\n />\n <EvidenceStat\n label=\"Duration\"\n value={formatDuration(\n run.durationMs ??\n (run.completedAt == null\n ? null\n : run.completedAt - run.startedAt),\n )}\n />\n <EvidenceStat\n label=\"Last progress\"\n value={formatDate(\n run.lastProgressAt ?? run.heartbeatAt,\n )}\n />\n <EvidenceStat\n label=\"In-flight marker\"\n value={formatDate(run.inFlightSince)}\n />\n <EvidenceStat\n label=\"Recovery payload\"\n value={\n run.hasDispatchPayload ? \"retained\" : \"not retained\"\n }\n />\n </div>\n {run.errorDetail ? (\n <div className=\"rounded-md bg-destructive/10 px-3 py-2 text-xs leading-relaxed text-destructive\">\n {run.errorDetail}\n </div>\n ) : null}\n </div>\n ))\n ) : (\n <div className=\"text-sm text-muted-foreground\">\n No retained run records.\n </div>\n )}\n </div>\n </details>\n\n <details className=\"rounded-lg border\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-3 text-sm font-medium text-foreground\">\n <span>Traces, feedback, and evaluations</span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n diagnostic records\n </span>\n </summary>\n <div className=\"grid gap-4 border-t p-3 lg:grid-cols-2\">\n <div>\n <div className=\"mb-2 text-xs font-medium text-foreground\">\n Debug runs\n </div>\n <RawBlock\n value={\n detail.debugRuns.length > 0\n ? detail.debugRuns\n : (detail.debug ?? {})\n }\n />\n </div>\n <div>\n <div className=\"mb-2 text-xs font-medium text-foreground\">\n Trace summaries\n </div>\n <RawBlock value={detail.traces.summaries} />\n </div>\n <div>\n <div className=\"mb-2 text-xs font-medium text-foreground\">\n Trace spans\n </div>\n <RawBlock value={detail.traces.spans} />\n </div>\n <div>\n <div className=\"mb-2 text-xs font-medium text-foreground\">\n Feedback and evals\n </div>\n <RawBlock\n value={{\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }}\n />\n </div>\n </div>\n </details>\n\n <details className=\"rounded-lg border\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-3 text-sm font-medium text-foreground\">\n <span>Raw thread bundle</span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n JSON\n </span>\n </summary>\n <div className=\"space-y-3 border-t p-3\">\n <RawBlock value={rawBundle} />\n <RawBlock value={detail.rawThreadData} />\n </div>\n </details>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n\nexport default function ThreadDebugRoute() {\n const t = useT();\n const [routeSearchParams, setRouteSearchParams] = useSearchParams();\n const mode = parseMode(routeSearchParams.get(\"mode\"));\n const sourceId =\n routeSearchParams.get(\"source\") ||\n (mode === \"failures\" ? \"all\" : \"current\");\n const ownerEmail = routeSearchParams.get(\"owner\") || \"\";\n const query = routeSearchParams.get(\"query\") || \"\";\n const status = parseFailureStatus(routeSearchParams.get(\"status\"));\n const regime = parseFailureRegime(routeSearchParams.get(\"regime\"));\n const range = parseFailureRange(routeSearchParams.get(\"range\"));\n const runId = routeSearchParams.get(\"runId\") || \"\";\n const threadId = routeSearchParams.get(\"threadId\") || \"\";\n const inspectSourceId = routeSearchParams.get(\"inspectSource\") || \"\";\n const [lookupId, setLookupId] = useState(\"\");\n const [searchFocused, setSearchFocused] = useState(false);\n\n function updateRouteState(\n updates: Record<string, string | null | undefined>,\n ) {\n const next = new URLSearchParams(routeSearchParams);\n for (const [key, value] of Object.entries(updates)) {\n if (value == null || value === \"\") next.delete(key);\n else next.set(key, value);\n }\n setRouteSearchParams(next, { replace: true });\n }\n\n const sourcesQuery = useActionQuery<{\n access: {\n viewerEmail: string;\n orgId: string | null;\n role: string | null;\n envAdmin: boolean;\n canInspectAll: boolean;\n memberCount: number;\n };\n sources: ThreadDebugSource[];\n }>(\"list-agent-thread-sources\", {});\n const { data: sourcesData } = sourcesQuery;\n\n const sources: ThreadDebugSource[] = sourcesData?.sources ?? [];\n const failureParams = useMemo(\n () => ({\n sourceId,\n ownerEmail: ownerEmail.trim() || undefined,\n status,\n regime,\n lookbackHours: FAILURE_RANGE_HOURS[range],\n limit: 25,\n }),\n [ownerEmail, range, regime, sourceId, status],\n );\n const {\n data: failuresData,\n isLoading: failuresLoading,\n error: failuresError,\n refetch: refetchFailures,\n } = useActionQuery<AgentRunFailuresResponse>(\n \"list-agent-run-failures\",\n failureParams,\n { enabled: mode === \"failures\" },\n );\n const failures = failuresData?.failures ?? EMPTY_FAILURES;\n const failurePatterns = useMemo(() => {\n const patterns = new Map<string, { label: string; count: number }>();\n for (const failure of failures) {\n const diagnosis = runDiagnosis(failure);\n const current = patterns.get(diagnosis.code);\n patterns.set(diagnosis.code, {\n label: diagnosis.title,\n count: (current?.count ?? 0) + 1,\n });\n }\n return [...patterns.values()].sort((a, b) => b.count - a.count);\n }, [failures]);\n const unavailableFailureSources = (failuresData?.sources ?? []).filter(\n (source) => source.status !== \"ok\",\n );\n const failureSourceStatusLabels = {\n ok: \"ok\",\n disconnected: t(\"dispatch.pages.threadDebugDisconnected\", {\n defaultValue: \"disconnected\",\n }),\n unsupported: t(\"dispatch.pages.threadDebugUnsupported\", {\n defaultValue: \"unsupported\",\n }),\n unavailable: t(\"dispatch.pages.threadDebugUnavailable\", {\n defaultValue: \"unavailable\",\n }),\n };\n\n const threadSourceId = sourceId === \"all\" ? \"current\" : sourceId;\n const detailSourceId =\n runId && inspectSourceId ? inspectSourceId : threadSourceId;\n const searchParams = useMemo(\n () => ({\n sourceId: threadSourceId,\n query: query.trim() || undefined,\n limit: 25,\n }),\n [query, threadSourceId],\n );\n const {\n data: searchData,\n isLoading: searchLoading,\n error: searchError,\n refetch: refetchSearch,\n } = useActionQuery<{\n count: number;\n threads: ThreadSearchResult[];\n access: { scope: string; canInspectAll: boolean };\n source: { id: string; label: string };\n }>(\"search-agent-threads\", searchParams, { enabled: mode === \"threads\" });\n const searchThreads: ThreadSearchResult[] = searchData?.threads ?? [];\n const ownerEmailSuggestions = useMemo(() => {\n const emailQuery = query.trim().includes(\"@\")\n ? query.trim().toLowerCase()\n : \"\";\n return [...new Set(searchThreads.map((thread) => thread.ownerEmail))]\n .filter(\n (email) => !emailQuery || email.toLowerCase().includes(emailQuery),\n )\n .slice(0, 8);\n }, [query, searchThreads]);\n\n const detailParams = useMemo(\n () => ({\n sourceId: detailSourceId,\n ...(runId ? { runId } : { threadId }),\n ownerEmail: ownerEmail.trim() || undefined,\n maxRuns: 20,\n maxEvents: 800,\n maxTraceSpans: 600,\n }),\n [detailSourceId, ownerEmail, runId, threadId],\n );\n const {\n data: detail,\n isLoading: detailLoading,\n error: detailError,\n refetch: refetchDetail,\n } = useActionQuery<ThreadDebugResponse>(\n \"get-agent-thread-debug\",\n detailParams,\n {\n enabled: Boolean(runId || threadId),\n },\n );\n\n const detailPane = (\n <section className=\"min-w-0\">\n {detailError ? (\n <ActionQueryError\n error={detailError}\n onRetry={() => void refetchDetail()}\n />\n ) : null}\n {detailLoading ? (\n <div className=\"p-5\">\n <Skeleton className=\"h-6 w-72\" />\n <Skeleton className=\"mt-3 h-4 w-96\" />\n <Skeleton className=\"mt-6 h-[520px] w-full\" />\n </div>\n ) : detail ? (\n <ThreadDetail detail={detail} />\n ) : (\n <div className=\"flex min-h-[520px] flex-col items-center justify-center px-5 text-center text-sm text-muted-foreground\">\n <IconFileSearch className=\"mb-2 size-5\" />\n <div className=\"font-medium text-foreground\">\n Choose a run to inspect\n </div>\n <div className=\"mt-1 max-w-xs leading-relaxed\">\n See the diagnosis first, then open the timeline or technical\n evidence.\n </div>\n </div>\n )}\n </section>\n );\n\n return (\n <DispatchShell\n title={t(\"dispatch.pages.threadDebugTitle\", {\n defaultValue: \"Thread Debug\",\n })}\n description={t(\"dispatch.pages.threadDebugDescription\", {\n defaultValue: \"Find the failure pattern, then inspect the evidence.\",\n })}\n >\n <div className=\"space-y-4\">\n {sourcesQuery.isError ? (\n <ActionQueryError\n error={sourcesQuery.error}\n onRetry={() => void sourcesQuery.refetch()}\n />\n ) : null}\n <Tabs\n value={mode}\n onValueChange={(value) => {\n const nextMode = parseMode(value);\n updateRouteState({\n mode: nextMode,\n source:\n nextMode === \"threads\" && sourceId === \"all\"\n ? \"current\"\n : sourceId,\n runId: null,\n threadId: null,\n inspectSource: null,\n });\n }}\n >\n <TabsList>\n <TabsTrigger value=\"failures\">\n {t(\"dispatch.pages.threadDebugFailedRuns\", {\n defaultValue: \"Failed runs\",\n })}\n </TabsTrigger>\n <TabsTrigger value=\"threads\">\n {t(\"dispatch.pages.threadDebugThreads\", {\n defaultValue: \"Threads\",\n })}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"failures\" className=\"mt-4 space-y-4\">\n <section className=\"border-b pb-4\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <h2 className=\"text-sm font-semibold text-foreground\">\n Run health\n </h2>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Start with the dominant failure pattern, then open one run.\n </p>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => void refetchFailures()}\n aria-label={t(\"dispatch.pages.threadDebugRefreshFailures\", {\n defaultValue: \"Refresh failed runs\",\n })}\n >\n <IconRefresh className=\"size-4\" />\n </Button>\n </div>\n <div className=\"mt-3 grid gap-2 sm:grid-cols-2 xl:grid-cols-[200px_minmax(180px,1fr)_180px_160px_150px]\">\n <Select\n value={sourceId}\n onValueChange={(value) =>\n updateRouteState({\n source: value,\n runId: null,\n threadId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugSource\", {\n defaultValue: \"Source\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">\n {t(\"dispatch.pages.threadDebugAllSources\", {\n defaultValue: \"All sources\",\n })}\n </SelectItem>\n {sources.map((source) => (\n <SelectItem key={source.id} value={source.id}>\n {source.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n value={ownerEmail}\n onChange={(event) =>\n updateRouteState({ owner: event.target.value })\n }\n aria-label={t(\"dispatch.pages.threadDebugOwner\", {\n defaultValue: \"Owner email\",\n })}\n placeholder={t(\"dispatch.pages.threadDebugOwner\", {\n defaultValue: \"Owner email\",\n })}\n />\n <Select\n value={status}\n onValueChange={(value) =>\n updateRouteState({\n status: parseFailureStatus(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugStatus\", {\n defaultValue: \"Status\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">\n {t(\"dispatch.pages.threadDebugAllStatuses\", {\n defaultValue: \"All statuses\",\n })}\n </SelectItem>\n <SelectItem value=\"errored\">\n {t(\"dispatch.pages.threadDebugErrored\", {\n defaultValue: \"Errored\",\n })}\n </SelectItem>\n <SelectItem value=\"aborted\">\n {t(\"dispatch.pages.threadDebugAborted\", {\n defaultValue: \"Aborted\",\n })}\n </SelectItem>\n <SelectItem value=\"truncated\">\n {t(\"dispatch.pages.threadDebugTruncated\", {\n defaultValue: \"Truncated\",\n })}\n </SelectItem>\n </SelectContent>\n </Select>\n <Select\n value={regime}\n onValueChange={(value) =>\n updateRouteState({\n regime: parseFailureRegime(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger aria-label=\"Run type\">\n <SelectValue placeholder=\"Run type\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All run types</SelectItem>\n <SelectItem value=\"interactive\">\n Interactive chats\n </SelectItem>\n <SelectItem value=\"scheduled\">Scheduled jobs</SelectItem>\n </SelectContent>\n </Select>\n <Select\n value={range}\n onValueChange={(value) =>\n updateRouteState({\n range: parseFailureRange(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugRange\", {\n defaultValue: \"Time range\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"24h\">\n {t(\"dispatch.pages.threadDebugRange24h\", {\n defaultValue: \"Last 24 hours\",\n })}\n </SelectItem>\n <SelectItem value=\"7d\">\n {t(\"dispatch.pages.threadDebugRange7d\", {\n defaultValue: \"Last 7 days\",\n })}\n </SelectItem>\n <SelectItem value=\"30d\">\n {t(\"dispatch.pages.threadDebugRange30d\", {\n defaultValue: \"Last 30 days\",\n })}\n </SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"font-medium text-foreground\">\n {failures.length} loaded{\" \"}\n {failures.length === 1 ? \"run\" : \"runs\"}\n </span>\n <span>·</span>\n <span>\n {failuresData?.access?.scope ??\n t(\"dispatch.pages.threadDebugCurrentScope\", {\n defaultValue: \"current scope\",\n })}\n </span>\n {failurePatterns.slice(0, 3).map((pattern) => (\n <Badge key={pattern.label} variant=\"outline\">\n {pattern.count} {pattern.label}\n </Badge>\n ))}\n {failuresData?.partial ? (\n <Badge variant=\"outline\">\n {t(\"dispatch.pages.threadDebugPartialResults\", {\n defaultValue: \"Partial results\",\n })}\n </Badge>\n ) : null}\n </div>\n {unavailableFailureSources.length > 0 ? (\n <div className=\"mt-2 flex items-start gap-1.5 text-xs text-muted-foreground\">\n <IconAlertTriangle className=\"mt-0.5 size-3.5 shrink-0\" />\n <span>\n {t(\"dispatch.pages.threadDebugUnavailableSources\", {\n defaultValue: \"Unavailable sources:\",\n })}{\" \"}\n {unavailableFailureSources\n .map(\n ({ source, status: sourceStatus }) =>\n `${source.label} (${failureSourceStatusLabels[sourceStatus]})`,\n )\n .join(\", \")}\n </span>\n </div>\n ) : null}\n </section>\n\n {failuresError ? (\n <ActionQueryError\n error={failuresError}\n onRetry={() => void refetchFailures()}\n />\n ) : null}\n\n <div className=\"overflow-hidden rounded-xl border bg-card\">\n <div className=\"grid xl:grid-cols-[360px_minmax(0,1fr)]\">\n <section className=\"min-h-[560px] border-b xl:border-b-0 xl:border-r\">\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div>\n <div className=\"text-sm font-semibold text-foreground\">\n Needs attention\n </div>\n <div className=\"mt-0.5 text-xs text-muted-foreground\">\n {failurePatterns[0]\n ? `${failurePatterns[0].count} ${failurePatterns[0].label.toLowerCase()}`\n : \"No active failure pattern\"}\n </div>\n </div>\n <span className=\"text-xs text-muted-foreground\">\n {failures.length}\n </span>\n </div>\n <div className=\"max-h-[760px] overflow-auto\">\n {failuresLoading ? (\n <>\n <Skeleton className=\"mx-4 mt-4 h-16 w-[calc(100%-2rem)]\" />\n <Skeleton className=\"mx-4 mt-2 h-16 w-[calc(100%-2rem)]\" />\n <Skeleton className=\"mx-4 mt-2 h-16 w-[calc(100%-2rem)]\" />\n </>\n ) : null}\n {!failuresLoading && failures.length === 0 ? (\n <div className=\"flex min-h-64 flex-col items-center justify-center px-4 text-center text-sm text-muted-foreground\">\n <IconDatabase className=\"mb-2 size-5\" />\n {t(\"dispatch.pages.threadDebugNoFailures\", {\n defaultValue: \"No failed runs found.\",\n })}\n </div>\n ) : null}\n {failures.map((failure) => (\n <FailureCard\n key={`${failureSourceId(failure)}:${failure.id}`}\n failure={failure}\n selected={\n runId === failure.id &&\n detailSourceId === failureSourceId(failure)\n }\n onSelect={() =>\n updateRouteState({\n inspectSource: failureSourceId(failure),\n runId: failure.id,\n threadId: null,\n })\n }\n />\n ))}\n </div>\n </section>\n <div className=\"min-w-0\">{detailPane}</div>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"threads\" className=\"mt-4 space-y-4\">\n <section className=\"border-b pb-4\">\n <div className=\"grid gap-2 pt-3 lg:grid-cols-2 xl:grid-cols-[auto_180px_minmax(220px,1fr)_auto_auto]\">\n <Select\n value={threadSourceId}\n onValueChange={(value) =>\n updateRouteState({\n source: value,\n runId: null,\n threadId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugSource\", {\n defaultValue: \"Source\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n {sources.map((source) => (\n <SelectItem key={source.id} value={source.id}>\n {source.label}\n </SelectItem>\n ))}\n {sources.length === 0 ? (\n <SelectItem value=\"current\">\n {t(\"dispatch.pages.threadDebugCurrentDatabase\", {\n defaultValue: \"Current Dispatch DB\",\n })}\n </SelectItem>\n ) : null}\n </SelectContent>\n </Select>\n <Popover\n open={searchFocused && ownerEmailSuggestions.length > 0}\n onOpenChange={setSearchFocused}\n >\n <PopoverAnchor asChild>\n <span className=\"block\">\n <Input\n value={query}\n onChange={(event) =>\n updateRouteState({ query: event.target.value })\n }\n onFocus={() => setSearchFocused(true)}\n placeholder={t(\n \"dispatch.pages.threadDebugSearchPlaceholder\",\n {\n defaultValue: \"Search threads or email\",\n },\n )}\n aria-label=\"Search threads or email\"\n />\n </span>\n </PopoverAnchor>\n <PopoverContent\n align=\"start\"\n sideOffset={6}\n className=\"w-[var(--radix-popover-trigger-width)] p-1\"\n onOpenAutoFocus={(event) => event.preventDefault()}\n >\n <div role=\"listbox\" aria-label=\"Owner email suggestions\">\n {ownerEmailSuggestions.map((email) => (\n <button\n key={email}\n type=\"button\"\n role=\"option\"\n aria-selected=\"false\"\n className=\"flex w-full items-center rounded-sm px-2 py-1.5 text-left text-sm text-foreground outline-none hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n updateRouteState({ query: email });\n setSearchFocused(false);\n }}\n >\n {email}\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n <Button\n type=\"button\"\n size=\"icon\"\n onClick={() => void refetchSearch()}\n aria-label=\"Search threads or email\"\n title=\"Search threads or email\"\n >\n <IconSearch className=\"size-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => void refetchSearch()}\n aria-label={t(\"dispatch.pages.threadDebugRefreshThreads\", {\n defaultValue: \"Refresh threads\",\n })}\n >\n <IconRefresh className=\"size-4\" />\n </Button>\n <details className=\"order-first justify-self-start rounded-lg border\">\n <summary\n aria-label=\"Advanced lookup\"\n title=\"Advanced lookup\"\n className=\"flex size-10 cursor-pointer list-none items-center justify-center text-foreground\"\n >\n <IconAdjustmentsHorizontal\n aria-hidden=\"true\"\n className=\"size-4\"\n />\n <span className=\"sr-only\">Advanced lookup</span>\n </summary>\n <div className=\"grid gap-3 border-t p-3 lg:w-80\">\n <Input\n value={lookupId}\n onChange={(event) => setLookupId(event.target.value)}\n placeholder={t(\n \"dispatch.pages.threadDebugLookupPlaceholder\",\n {\n defaultValue: \"Paste thread or request/run ID\",\n },\n )}\n className=\"font-mono\"\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n const trimmed = lookupId.trim();\n if (!trimmed) return;\n updateRouteState(\n trimmed.startsWith(\"run-\")\n ? {\n runId: trimmed,\n threadId: null,\n inspectSource: null,\n }\n : {\n threadId: trimmed,\n runId: null,\n inspectSource: null,\n },\n );\n }}\n >\n <IconFileSearch className=\"size-4\" />\n {t(\"dispatch.pages.threadDebugInspect\", {\n defaultValue: \"Inspect\",\n })}\n </Button>\n </div>\n </details>\n </div>\n </section>\n\n {searchError ? (\n <ActionQueryError\n error={searchError}\n onRetry={() => void refetchSearch()}\n />\n ) : null}\n\n <div className=\"overflow-hidden rounded-xl border bg-card\">\n <div className=\"grid xl:grid-cols-[360px_minmax(0,1fr)]\">\n <section className=\"min-h-[560px] border-b xl:border-b-0 xl:border-r\">\n <div className=\"max-h-[760px] overflow-auto\">\n {searchLoading ? (\n <>\n <Skeleton className=\"mx-4 mt-4 h-16 w-[calc(100%-2rem)]\" />\n <Skeleton className=\"mx-4 mt-2 h-16 w-[calc(100%-2rem)]\" />\n <Skeleton className=\"mx-4 mt-2 h-16 w-[calc(100%-2rem)]\" />\n </>\n ) : null}\n {!searchLoading && searchThreads.length === 0 ? (\n <div className=\"flex min-h-64 flex-col items-center justify-center px-4 text-center text-sm text-muted-foreground\">\n <IconDatabase className=\"mb-2 size-5\" />\n {t(\"dispatch.pages.threadDebugNoThreads\", {\n defaultValue: \"No threads found.\",\n })}\n </div>\n ) : null}\n {searchThreads.map((result) => (\n <ResultCard\n key={result.id}\n result={result}\n selected={threadId === result.id}\n onSelect={() =>\n updateRouteState({\n threadId: result.id,\n runId: null,\n inspectSource: null,\n })\n }\n />\n ))}\n </div>\n </section>\n <div className=\"min-w-0\">{detailPane}</div>\n </div>\n </div>\n </TabsContent>\n </Tabs>\n </div>\n </DispatchShell>\n );\n}\n"]}
@@ -177,6 +177,8 @@ export declare function getAgentThreadDebug(input: {
177
177
  workerStage: string | null;
178
178
  diagStage: string | null;
179
179
  peakRssMb: number | null;
180
+ inFlightSince: number | null;
181
+ hasDispatchPayload: boolean;
180
182
  events: any[];
181
183
  }[];
182
184
  traces: {
@@ -1 +1 @@
1
- {"version":3,"file":"thread-debug-store.d.ts","sourceRoot":"","sources":["../../../src/server/lib/thread-debug-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thread-debug-store.d.ts","sourceRoot":"","sources":["../../../src/server/lib/thread-debug-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,iCAAiC,CAAC;AAwBzC,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,YAAY,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AA0CD,QAAA,MAAM,yBAAyB,YAAI,SAAS,EAAE,SAAS,EAAE,WAAW,CAAU,CAAC;AAE/E,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/E,KAAK,6BAA6B,GAC9B,IAAI,GACJ,cAAc,GACd,aAAa,GACb,aAAa,CAAC;AAkgBlB,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IACtD,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,UAAU,CAAC,GAAG;QACvD,QAAQ,EAAE,OAAO,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B,CAAC,CAsBD;AAiID,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,qBAAqB,GAAG,KAAK,CAAC;IACvC,MAAM,CAAC,EAAE,kBAAkB,GAAG,KAAK,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;;;;;;;QAiGK,WAAW;QACX,KAAK;QACL,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;gBA9Le,qBAAqB;;;;;;;;;;;;;;;;;;GAmMtD;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;QAmDK,EAAE;QACF,KAAK;QACL,IAAI;QACJ,cAAc;;;QAGd,WAAW;QACX,KAAK;QACL,aAAa;;;;;;;;;;;;;;GAMlB;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;;QAwKK,EAAE;QACF,KAAK;QACL,IAAI;QACJ,cAAc;;;QAGd,WAAW;QACX,KAAK;QACL,aAAa;;;QAGb,EAAE;QACF,UAAU;QACV,KAAK;QACL,OAAO;QACP,YAAY;QACZ,SAAS;QACT,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiBT,SAAS;QACT,KAAK;;;;;;GAOV"}
@@ -433,6 +433,10 @@ function serializeRun(row, events = []) {
433
433
  workerStage: row.worker_stage ? String(row.worker_stage) : null,
434
434
  diagStage: row.diag_stage ? String(row.diag_stage) : null,
435
435
  peakRssMb: nullableNumberField(row.peak_rss_mb),
436
+ inFlightSince: nullableNumberField(row.in_flight_since),
437
+ hasDispatchPayload: row.dispatch_payload !== null &&
438
+ row.dispatch_payload !== undefined &&
439
+ String(row.dispatch_payload).length > 0,
436
440
  events,
437
441
  };
438
442
  }
@@ -662,10 +666,10 @@ export async function searchAgentThreads(input) {
662
666
  const runIdClause = runThreadIds.length > 0
663
667
  ? " OR id IN (" + runThreadIds.map(() => "?").join(", ") + ")"
664
668
  : "";
665
- where.push("(LOWER(title) LIKE ? ESCAPE '\\' OR LOWER(preview) LIKE ? ESCAPE '\\' OR LOWER(thread_data) LIKE ? ESCAPE '\\'" +
669
+ where.push("(LOWER(title) LIKE ? ESCAPE '\\' OR LOWER(preview) LIKE ? ESCAPE '\\' OR LOWER(owner_email) LIKE ? ESCAPE '\\' OR LOWER(thread_data) LIKE ? ESCAPE '\\'" +
666
670
  runIdClause +
667
671
  ")");
668
- args.push(pattern, pattern, pattern);
672
+ args.push(pattern, pattern, pattern, pattern);
669
673
  args.push(...runThreadIds);
670
674
  }
671
675
  args.push(limit);