@agent-native/dispatch 0.40.22 → 0.40.23-nightly-20261014070126
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.
- package/CHANGELOG.md +23 -0
- package/dist/actions/create-workspace-resource.d.ts +13 -13
- package/dist/actions/provider-api-register.d.ts +11 -11
- package/dist/routes/pages/thread-debug.d.ts.map +1 -1
- package/dist/routes/pages/thread-debug.js +29 -9
- package/dist/routes/pages/thread-debug.js.map +1 -1
- package/dist/server/lib/thread-debug-store.d.ts.map +1 -1
- package/dist/server/lib/thread-debug-store.js +25 -2
- package/dist/server/lib/thread-debug-store.js.map +1 -1
- package/dist/shared/thread-debug-noise.d.ts +3 -0
- package/dist/shared/thread-debug-noise.d.ts.map +1 -0
- package/dist/shared/thread-debug-noise.js +13 -0
- package/dist/shared/thread-debug-noise.js.map +1 -0
- package/package.json +4 -4
- package/src/routes/pages/thread-debug.tsx +45 -8
- package/src/server/lib/thread-debug-store.ts +36 -2
- package/src/shared/thread-debug-noise.ts +13 -0
|
@@ -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 IconAdjustmentsHorizontal,\n IconAlertTriangle,\n IconArrowLeft,\n IconCopy,\n IconDatabase,\n IconFileSearch,\n IconRefresh,\n IconRobot,\n IconSearch,\n IconTool,\n IconUser,\n} from \"@tabler/icons-react\";\nimport { useMemo, useState, type ReactNode } 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 { Label } from \"../../components/ui/label\";\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 { Switch } from \"../../components/ui/switch\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../components/ui/tabs\";\nimport {\n buildConversationRows,\n defaultConversationRowKey,\n type ConversationRow,\n} from \"../../lib/thread-debug-conversation\";\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 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\nconst DIAGNOSIS_TITLES: Record<string, string> = {\n stale_run: \"Worker stopped reporting\",\n background_worker_failed: \"Background worker failed during setup\",\n};\n\nfunction runDiagnosis(run: RunFailureLike): { title: string; code: string } {\n const code =\n run.errorCode || run.terminalReason || run.abortReason || \"unknown\";\n return { title: DIAGNOSIS_TITLES[code] ?? failureLabel(run), code };\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 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 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=\"truncate text-sm font-medium text-foreground\">\n {title}\n </div>\n <div className=\"mt-1 flex flex-wrap items-center gap-x-2 gap-y-1 text-[11px] text-muted-foreground\">\n <span>\n {result.messageCount}{\" \"}\n {result.messageCount === 1 ? \"message\" : \"messages\"}\n </span>\n <span aria-hidden=\"true\">·</span>\n <span className=\"min-w-0 truncate\">{result.ownerEmail}</span>\n <span aria-hidden=\"true\">·</span>\n <span>{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 toolCounts(message: ThreadMessage): Array<[string, number]> {\n const counts = new Map<string, number>();\n for (const tool of toolParts(message)) {\n const name = String(tool.toolName ?? tool.name ?? \"tool-call\");\n counts.set(name, (counts.get(name) ?? 0) + 1);\n }\n return [...counts.entries()];\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 runFailed(run: ThreadRun): boolean {\n return (\n run.status !== \"completed\" &&\n run.status !== \"running\" &&\n (run.terminalReason || run.abortReason) !== \"user\"\n );\n}\n\n// Runs that fail before the model starts (run_preparation_failed,\n// background_worker_never_started) retain no events, so the run row's own\n// terminal fields are the only record of how they ended.\nfunction RunOutcome({ run, needle = \"\" }: { run: ThreadRun; needle?: string }) {\n const reason = run.terminalReason || run.abortReason;\n const codes = [\n ...new Set(\n [reason, run.errorCode].filter((code): code is string => Boolean(code)),\n ),\n ];\n const stage =\n diagnosticStage(run.workerStage) || diagnosticStage(run.diagStage);\n const failed = runFailed(run);\n return (\n <div className=\"min-w-0 space-y-1 text-xs\">\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1\">\n <span\n className={cn(\n \"font-medium\",\n failed ? \"text-destructive\" : \"text-foreground\",\n )}\n >\n <Highlighted text={run.status} needle={needle} />\n </span>\n {codes.map((code) => (\n <span key={code} className=\"font-mono text-muted-foreground\">\n <Highlighted text={code} needle={needle} />\n </span>\n ))}\n </div>\n {run.errorDetail ? (\n <div className=\"whitespace-pre-wrap break-words text-foreground\">\n <Highlighted text={run.errorDetail} needle={needle} />\n </div>\n ) : null}\n {stage ? (\n <div className=\"text-muted-foreground\">Last stage: {stage}</div>\n ) : null}\n </div>\n );\n}\n\ntype ThreadRow = ConversationRow<ThreadMessage, ThreadRun>;\n\nconst SNIPPET_LEAD_CHARS = 60;\n\n// Rows clamp to three lines, so a match deep in a long message would be\n// highlighted out of view; start the preview shortly before the first match.\nfunction matchPreview(text: string, needle: string): string {\n const index = needle ? text.toLowerCase().indexOf(needle) : -1;\n if (index <= SNIPPET_LEAD_CHARS) return text;\n const start = text.lastIndexOf(\" \", index - SNIPPET_LEAD_CHARS) + 1;\n return `…${text.slice(start)}`;\n}\n\nfunction Highlighted({ text, needle }: { text: string; needle: string }) {\n if (!needle) return <>{text}</>;\n const lower = text.toLowerCase();\n const parts: ReactNode[] = [];\n let cursor = 0;\n let index = lower.indexOf(needle);\n while (index !== -1) {\n if (index > cursor) parts.push(text.slice(cursor, index));\n parts.push(\n <mark\n key={index}\n className=\"rounded-sm bg-[hsl(var(--dispatch-search-match))] px-0.5 text-foreground\"\n >\n {text.slice(index, index + needle.length)}\n </mark>,\n );\n cursor = index + needle.length;\n index = lower.indexOf(needle, cursor);\n }\n parts.push(text.slice(cursor));\n return <>{parts}</>;\n}\n\nfunction ConversationRowButton({\n row,\n selected,\n needle,\n onSelect,\n}: {\n row: ThreadRow;\n selected: boolean;\n needle: string;\n onSelect: () => void;\n}) {\n const run = row.run;\n const failed = run ? runFailed(run) : false;\n const isUser = row.kind === \"message\" && row.message.role === \"user\";\n const Icon =\n row.kind === \"run\" ? IconAlertTriangle : isUser ? IconUser : IconRobot;\n const tools = row.kind === \"message\" ? toolCounts(row.message) : [];\n const showOutcome =\n run && (row.kind === \"run\" || (!isUser && run.status !== \"completed\"));\n const time =\n row.kind === \"message\" ? row.message.createdAt : (run?.startedAt ?? null);\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n aria-current={selected ? \"true\" : undefined}\n className={cn(\n \"flex w-full items-start gap-3 border-b px-4 py-3 text-left transition-colors last:border-b-0\",\n selected ? \"bg-accent/70\" : \"hover:bg-muted/50\",\n row.kind === \"run\" && failed && !selected && \"bg-destructive/[0.04]\",\n )}\n >\n <Icon\n aria-hidden=\"true\"\n className={cn(\n \"mt-0.5 size-4 shrink-0\",\n row.kind === \"run\" && failed\n ? \"text-destructive\"\n : \"text-muted-foreground\",\n )}\n />\n <div className=\"min-w-0 flex-1 space-y-1.5\">\n <div className=\"flex items-center justify-between gap-3 text-[11px] text-muted-foreground\">\n <span className=\"font-medium text-foreground\">\n {row.kind === \"run\" ? \"Run\" : isUser ? \"User\" : \"Agent\"}\n </span>\n <span className=\"shrink-0\">{formatDate(time)}</span>\n </div>\n {row.kind === \"message\" ? (\n row.message.text ? (\n <div className=\"line-clamp-3 whitespace-pre-wrap break-words text-sm text-foreground\">\n <Highlighted\n text={matchPreview(row.message.text, needle)}\n needle={needle}\n />\n </div>\n ) : tools.length === 0 ? (\n <div className=\"text-sm text-muted-foreground\">No text content</div>\n ) : null\n ) : null}\n {tools.length > 0 || (!isUser && run?.durationMs != null) ? (\n <div className=\"flex flex-wrap items-center gap-1.5 text-xs\">\n {tools.map(([name, count]) => (\n <span\n key={name}\n className=\"inline-flex items-center gap-1 rounded-md bg-muted/60 px-1.5 py-0.5 text-foreground\"\n >\n <IconTool className=\"size-3 text-muted-foreground\" />\n <Highlighted text={name} needle={needle} />\n {count > 1 ? (\n <span className=\"text-muted-foreground\">×{count}</span>\n ) : null}\n </span>\n ))}\n {!isUser && run?.durationMs != null ? (\n <span className=\"text-muted-foreground\">\n {formatDuration(run.durationMs)}\n </span>\n ) : null}\n </div>\n ) : null}\n {showOutcome && run ? <RunOutcome run={run} needle={needle} /> : null}\n </div>\n </button>\n );\n}\n\nfunction RunRecord({ run }: { run: ThreadRun }) {\n return (\n <div className=\"space-y-4\">\n <RunOutcome run={run} />\n <div className=\"grid gap-3 text-xs sm:grid-cols-2\">\n <EvidenceStat label=\"Run ID\" value={run.id} />\n <EvidenceStat\n label=\"Dispatch mode\"\n value={run.dispatchMode || \"foreground\"}\n />\n <EvidenceStat label=\"Started\" value={formatDate(run.startedAt)} />\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(run.lastProgressAt ?? run.heartbeatAt)}\n />\n <EvidenceStat\n label=\"In-flight marker\"\n value={formatDate(run.inFlightSince)}\n />\n <EvidenceStat\n label=\"Recovery payload\"\n value={run.hasDispatchPayload ? \"retained\" : \"not retained\"}\n />\n </div>\n <RawBlock\n value={Object.fromEntries(\n Object.entries(run).filter(([key]) => key !== \"events\"),\n )}\n />\n </div>\n );\n}\n\nfunction RunEvents({ run }: { run: ThreadRun }) {\n const [showStream, setShowStream] = useState(false);\n const switchId = `thread-debug-stream-${run.id}`;\n const events = showStream\n ? run.events\n : run.events.filter((entry) => !eventIsNoise(entry.event));\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <Switch\n id={switchId}\n checked={showStream}\n onCheckedChange={setShowStream}\n />\n <Label htmlFor={switchId} className=\"text-xs font-normal\">\n Show stream events\n </Label>\n </div>\n {events.length > 0 ? (\n <div className=\"space-y-2\">\n {events.map((entry) => (\n <details\n key={`${run.id}-event-${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 <span className=\"font-mono text-muted-foreground\">\n #{entry.seq}\n </span>{\" \"}\n {eventLabel(entry.event)}\n </summary>\n <RawBlock value={entry.event} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n </div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">\n No events were retained for this run.\n </div>\n )}\n </div>\n );\n}\n\ntype InspectorTab = \"message\" | \"run\" | \"events\" | \"traces\";\n\nconst THREAD_ITEM = \"thread\";\n\nfunction ThreadRecords({ detail }: { detail: ThreadDebugResponse }) {\n const threadBundle = useMemo(\n () => ({\n thread: detail.thread,\n debug: detail.debug,\n debugRuns: detail.debugRuns,\n queuedMessages: detail.queuedMessages,\n // Trace records with no run_id are thread-scoped, so they never show\n // up in a per-run RowInspector traces tab.\n threadTraces: {\n summaries: detail.traces.summaries.filter((record) => !record.run_id),\n spans: detail.traces.spans.filter((record) => !record.run_id),\n },\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }),\n [detail],\n );\n return (\n <div className=\"space-y-3 p-4\">\n <RawBlock value={threadBundle} />\n <RawBlock value={detail.rawThreadData} />\n </div>\n );\n}\n\n// A user prompt and the agent reply to it share one run. The run belongs to\n// the reply (or to a run row when there was no reply); repeating it on the\n// prompt makes two different rows look identical in the inspector.\nfunction inspectedRun(row: ThreadRow): ThreadRun | null {\n if (row.kind === \"run\") return row.run;\n return row.message.role === \"user\" ? null : row.run;\n}\n\nfunction RowInspector({\n row,\n detail,\n}: {\n row: ThreadRow;\n detail: ThreadDebugResponse;\n}) {\n const [tab, setTab] = useState<InspectorTab>(\"message\");\n const run = inspectedRun(row);\n const available: InspectorTab[] = [\n ...(row.kind === \"message\" ? ([\"message\"] as const) : []),\n ...(run ? ([\"run\", \"events\", \"traces\"] as const) : []),\n ];\n const activeTab = available.includes(tab) ? tab : available[0];\n const traces = useMemo(() => {\n if (!run) return { summaries: [], spans: [] };\n const forRun = (record: any) => record?.run_id === run.id;\n return {\n summaries: detail.traces.summaries.filter(forRun),\n spans: detail.traces.spans.filter(forRun),\n };\n }, [detail.traces, run]);\n\n return (\n <Tabs\n value={activeTab}\n onValueChange={(value) => setTab(value as InspectorTab)}\n className=\"p-4\"\n >\n <TabsList>\n {row.kind === \"message\" ? (\n <TabsTrigger value=\"message\">Message</TabsTrigger>\n ) : null}\n {run ? (\n <>\n <TabsTrigger value=\"run\">Run</TabsTrigger>\n <TabsTrigger value=\"events\">Events</TabsTrigger>\n <TabsTrigger value=\"traces\">Traces</TabsTrigger>\n </>\n ) : null}\n </TabsList>\n\n {row.kind === \"message\" ? (\n <TabsContent value=\"message\" className=\"mt-4 space-y-3\">\n {toolParts(row.message).map((tool, index) => (\n <details\n key={`${row.key}-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 <RawBlock value={row.message} />\n </TabsContent>\n ) : null}\n {run ? (\n <>\n <TabsContent value=\"run\" className=\"mt-4\">\n <RunRecord run={run} />\n </TabsContent>\n <TabsContent value=\"events\" className=\"mt-4\">\n <RunEvents key={run.id} run={run} />\n </TabsContent>\n <TabsContent value=\"traces\" className=\"mt-4 space-y-3\">\n {traces.summaries.length > 0 || traces.spans.length > 0 ? (\n <>\n <RawBlock value={traces.summaries} />\n <RawBlock value={traces.spans} />\n </>\n ) : (\n <div className=\"text-sm text-muted-foreground\">\n No traces were recorded for this run.\n </div>\n )}\n </TabsContent>\n </>\n ) : null}\n </Tabs>\n );\n}\n\nfunction rowMatches(row: ThreadRow, needle: string): boolean {\n const run = row.kind === \"run\" ? row.run : null;\n const haystack = [\n row.kind === \"message\" ? row.message.text : \"\",\n ...(row.kind === \"message\"\n ? toolCounts(row.message).map(([name]) => name)\n : []),\n row.run?.status,\n row.run?.terminalReason,\n row.run?.abortReason,\n row.run?.errorCode,\n row.run?.errorDetail,\n run?.id,\n ];\n return haystack.some(\n (value) =>\n typeof value === \"string\" && value.toLowerCase().includes(needle),\n );\n}\n\nfunction ThreadDetail({\n detail,\n selectedRowKey,\n onSelectRow,\n onBack,\n}: {\n detail: ThreadDebugResponse;\n selectedRowKey: string | null;\n onSelectRow: (key: string) => void;\n onBack?: () => void;\n}) {\n const rows = useMemo(\n () => buildConversationRows(detail.messages, detail.runs),\n [detail.messages, detail.runs],\n );\n const [search, setSearch] = useState(\"\");\n const needle = search.trim().toLowerCase();\n const visibleRows = needle\n ? rows.filter((row) => rowMatches(row, needle))\n : rows;\n const showThread = selectedRowKey === THREAD_ITEM;\n const activeKey = showThread\n ? null\n : (rows.find((row) => row.key === selectedRowKey)?.key ??\n defaultConversationRowKey(rows, detail.lookup?.runId));\n const selectedRow = rows.find((row) => row.key === activeKey) ?? null;\n const lookupRun =\n detail.runs.find((run) => run.id === detail.lookup?.runId) ?? null;\n\n return (\n <div className=\"min-w-0\">\n <div className=\"flex items-start gap-2 border-b px-5 py-4\">\n {onBack ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"-ml-2 size-8 shrink-0\"\n aria-label=\"Back to threads\"\n title=\"Back to threads\"\n onClick={onBack}\n >\n <IconArrowLeft className=\"size-4\" />\n </Button>\n ) : null}\n <div className=\"flex min-w-0 flex-1 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 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>updated {formatDate(detail.thread.updatedAt)}</span>\n <span aria-hidden=\"true\">·</span>\n <span className=\"flex min-w-0 items-center gap-1\">\n <span className=\"truncate font-mono\">\n {detail.lookup?.runId || detail.thread.id}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-6 shrink-0\"\n title={\n detail.lookup?.runId ? \"Copy run ID\" : \"Copy thread ID\"\n }\n aria-label={\n detail.lookup?.runId ? \"Copy run ID\" : \"Copy thread ID\"\n }\n onClick={() =>\n void navigator.clipboard?.writeText(\n detail.lookup?.runId || detail.thread.id,\n )\n }\n >\n <IconCopy className=\"size-3.5\" />\n </Button>\n </span>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n variant={showThread ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n aria-pressed={showThread}\n onClick={() => onSelectRow(showThread ? \"\" : THREAD_ITEM)}\n >\n <IconDatabase className=\"size-4\" />\n Thread data\n </Button>\n {lookupRun ? (\n <Badge\n variant={\n lookupRun.status === \"errored\" ? \"destructive\" : \"secondary\"\n }\n >\n {lookupRun.status}\n </Badge>\n ) : null}\n <Badge variant=\"outline\">{detail.source.label}</Badge>\n </div>\n </div>\n </div>\n\n <div className=\"grid lg:grid-cols-2\">\n <section\n aria-label=\"Conversation\"\n className=\"max-h-[760px] min-w-0 overflow-auto border-b lg:border-b-0 lg:border-r\"\n >\n {rows.length > 0 ? (\n <div className=\"sticky top-0 z-10 border-b bg-card p-2\">\n <div className=\"relative\">\n <IconSearch\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\"\n />\n <Input\n type=\"search\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n placeholder=\"Search messages\"\n aria-label=\"Search messages\"\n className=\"h-8 pl-8\"\n />\n </div>\n </div>\n ) : null}\n {visibleRows.map((row) => (\n <ConversationRowButton\n key={row.key}\n row={row}\n selected={row.key === activeKey}\n needle={needle}\n onSelect={() => onSelectRow(row.key)}\n />\n ))}\n {rows.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">\n No messages or runs were retained for this thread.\n </div>\n ) : visibleRows.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">\n No matching messages.\n </div>\n ) : null}\n </section>\n <section\n aria-label=\"Inspector\"\n className=\"max-h-[760px] min-w-0 overflow-auto\"\n >\n {showThread ? (\n <ThreadRecords detail={detail} />\n ) : selectedRow ? (\n <RowInspector row={selectedRow} detail={detail} />\n ) : null}\n </section>\n </div>\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 selectedItem = routeSearchParams.get(\"item\");\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\n detail={detail}\n selectedRowKey={selectedItem}\n onSelectRow={(key) => updateRouteState({ item: key })}\n onBack={\n mode === \"threads\"\n ? () =>\n updateRouteState({\n threadId: null,\n runId: null,\n inspectSource: null,\n item: null,\n })\n : undefined\n }\n />\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 item: 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 {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 {failuresData?.partial ? (\n <div className=\"mt-2\">\n <Badge variant=\"outline\">\n {t(\"dispatch.pages.threadDebugPartialResults\", {\n defaultValue: \"Partial results\",\n })}\n </Badge>\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 item: 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 item: 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 item: null,\n }\n : {\n threadId: trimmed,\n runId: null,\n inspectSource: null,\n item: 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 {runId || threadId ? (\n detailPane\n ) : (\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 item: null,\n })\n }\n />\n ))}\n </div>\n </section>\n <div className=\"min-w-0\">{detailPane}</div>\n </div>\n )}\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 IconAdjustmentsHorizontal,\n IconAlertTriangle,\n IconArrowLeft,\n IconCopy,\n IconDatabase,\n IconFileSearch,\n IconRefresh,\n IconRobot,\n IconSearch,\n IconTool,\n IconUser,\n} from \"@tabler/icons-react\";\nimport { useMemo, useState, type ReactNode } 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 { Label } from \"../../components/ui/label\";\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 { Switch } from \"../../components/ui/switch\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../components/ui/tabs\";\nimport {\n buildConversationRows,\n defaultConversationRowKey,\n type ConversationRow,\n} from \"../../lib/thread-debug-conversation\";\nimport { cn } from \"../../lib/utils\";\nimport { isThreadDebugNoiseEventType } from \"../../shared/thread-debug-noise\";\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 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<{\n seq: number;\n eventAt?: number | null;\n event: any;\n rawEventData: string;\n }>;\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\nconst DIAGNOSIS_TITLES: Record<string, string> = {\n stale_run: \"Worker stopped reporting\",\n background_worker_failed: \"Background worker failed during setup\",\n};\n\nfunction runDiagnosis(run: RunFailureLike): { title: string; code: string } {\n const code =\n run.errorCode || run.terminalReason || run.abortReason || \"unknown\";\n return { title: DIAGNOSIS_TITLES[code] ?? failureLabel(run), code };\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 isThreadDebugNoiseEventType(eventType(event));\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\n// Legacy rows have no event_at, so their tools get no duration rather than 0ms.\nfunction toolDurations(events: ThreadRun[\"events\"]) {\n const bySeq = new Map<number, number>();\n const byId = new Map<string, number>();\n const pending = new Map<string, number[]>();\n for (const { seq, eventAt, event } of events) {\n if (eventAt == null) continue;\n const key = event?.id ? String(event.id) : `tool:${event?.tool}`;\n if (event?.type === \"tool_start\") {\n pending.set(key, [...(pending.get(key) ?? []), eventAt]);\n } else if (event?.type === \"tool_done\") {\n const startedAt = pending.get(key)?.shift();\n if (startedAt == null) continue;\n bySeq.set(seq, eventAt - startedAt);\n if (event.id) byId.set(String(event.id), eventAt - startedAt);\n }\n }\n return { bySeq, byId };\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=\"truncate text-sm font-medium text-foreground\">\n {title}\n </div>\n <div className=\"mt-1 flex flex-wrap items-center gap-x-2 gap-y-1 text-[11px] text-muted-foreground\">\n <span>\n {result.messageCount}{\" \"}\n {result.messageCount === 1 ? \"message\" : \"messages\"}\n </span>\n <span aria-hidden=\"true\">·</span>\n <span className=\"min-w-0 truncate\">{result.ownerEmail}</span>\n <span aria-hidden=\"true\">·</span>\n <span>{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 toolCounts(message: ThreadMessage): Array<[string, number]> {\n const counts = new Map<string, number>();\n for (const tool of toolParts(message)) {\n const name = String(tool.toolName ?? tool.name ?? \"tool-call\");\n counts.set(name, (counts.get(name) ?? 0) + 1);\n }\n return [...counts.entries()];\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 runFailed(run: ThreadRun): boolean {\n return (\n run.status !== \"completed\" &&\n run.status !== \"running\" &&\n (run.terminalReason || run.abortReason) !== \"user\"\n );\n}\n\n// Runs that fail before the model starts (run_preparation_failed,\n// background_worker_never_started) retain no events, so the run row's own\n// terminal fields are the only record of how they ended.\nfunction RunOutcome({ run, needle = \"\" }: { run: ThreadRun; needle?: string }) {\n const reason = run.terminalReason || run.abortReason;\n const codes = [\n ...new Set(\n [reason, run.errorCode].filter((code): code is string => Boolean(code)),\n ),\n ];\n const stage =\n diagnosticStage(run.workerStage) || diagnosticStage(run.diagStage);\n const failed = runFailed(run);\n return (\n <div className=\"min-w-0 space-y-1 text-xs\">\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1\">\n <span\n className={cn(\n \"font-medium\",\n failed ? \"text-destructive\" : \"text-foreground\",\n )}\n >\n <Highlighted text={run.status} needle={needle} />\n </span>\n {codes.map((code) => (\n <span key={code} className=\"font-mono text-muted-foreground\">\n <Highlighted text={code} needle={needle} />\n </span>\n ))}\n </div>\n {run.errorDetail ? (\n <div className=\"whitespace-pre-wrap break-words text-foreground\">\n <Highlighted text={run.errorDetail} needle={needle} />\n </div>\n ) : null}\n {stage ? (\n <div className=\"text-muted-foreground\">Last stage: {stage}</div>\n ) : null}\n </div>\n );\n}\n\ntype ThreadRow = ConversationRow<ThreadMessage, ThreadRun>;\n\nconst SNIPPET_LEAD_CHARS = 60;\n\n// Rows clamp to three lines, so a match deep in a long message would be\n// highlighted out of view; start the preview shortly before the first match.\nfunction matchPreview(text: string, needle: string): string {\n const index = needle ? text.toLowerCase().indexOf(needle) : -1;\n if (index <= SNIPPET_LEAD_CHARS) return text;\n const start = text.lastIndexOf(\" \", index - SNIPPET_LEAD_CHARS) + 1;\n return `…${text.slice(start)}`;\n}\n\nfunction Highlighted({ text, needle }: { text: string; needle: string }) {\n if (!needle) return <>{text}</>;\n const lower = text.toLowerCase();\n const parts: ReactNode[] = [];\n let cursor = 0;\n let index = lower.indexOf(needle);\n while (index !== -1) {\n if (index > cursor) parts.push(text.slice(cursor, index));\n parts.push(\n <mark\n key={index}\n className=\"rounded-sm bg-[hsl(var(--dispatch-search-match))] px-0.5 text-foreground\"\n >\n {text.slice(index, index + needle.length)}\n </mark>,\n );\n cursor = index + needle.length;\n index = lower.indexOf(needle, cursor);\n }\n parts.push(text.slice(cursor));\n return <>{parts}</>;\n}\n\nfunction ConversationRowButton({\n row,\n selected,\n needle,\n onSelect,\n}: {\n row: ThreadRow;\n selected: boolean;\n needle: string;\n onSelect: () => void;\n}) {\n const run = row.run;\n const failed = run ? runFailed(run) : false;\n const isUser = row.kind === \"message\" && row.message.role === \"user\";\n const Icon =\n row.kind === \"run\" ? IconAlertTriangle : isUser ? IconUser : IconRobot;\n const tools = row.kind === \"message\" ? toolCounts(row.message) : [];\n const showOutcome =\n run && (row.kind === \"run\" || (!isUser && run.status !== \"completed\"));\n const time =\n row.kind === \"message\" ? row.message.createdAt : (run?.startedAt ?? null);\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n aria-current={selected ? \"true\" : undefined}\n className={cn(\n \"flex w-full items-start gap-3 border-b px-4 py-3 text-left transition-colors last:border-b-0\",\n selected ? \"bg-accent/70\" : \"hover:bg-muted/50\",\n row.kind === \"run\" && failed && !selected && \"bg-destructive/[0.04]\",\n )}\n >\n <Icon\n aria-hidden=\"true\"\n className={cn(\n \"mt-0.5 size-4 shrink-0\",\n row.kind === \"run\" && failed\n ? \"text-destructive\"\n : \"text-muted-foreground\",\n )}\n />\n <div className=\"min-w-0 flex-1 space-y-1.5\">\n <div className=\"flex items-center justify-between gap-3 text-[11px] text-muted-foreground\">\n <span className=\"font-medium text-foreground\">\n {row.kind === \"run\" ? \"Run\" : isUser ? \"User\" : \"Agent\"}\n </span>\n <span className=\"shrink-0\">{formatDate(time)}</span>\n </div>\n {row.kind === \"message\" ? (\n row.message.text ? (\n <div className=\"line-clamp-3 whitespace-pre-wrap break-words text-sm text-foreground\">\n <Highlighted\n text={matchPreview(row.message.text, needle)}\n needle={needle}\n />\n </div>\n ) : tools.length === 0 ? (\n <div className=\"text-sm text-muted-foreground\">No text content</div>\n ) : null\n ) : null}\n {tools.length > 0 || (!isUser && run?.durationMs != null) ? (\n <div className=\"flex flex-wrap items-center gap-1.5 text-xs\">\n {tools.map(([name, count]) => (\n <span\n key={name}\n className=\"inline-flex items-center gap-1 rounded-md bg-muted/60 px-1.5 py-0.5 text-foreground\"\n >\n <IconTool className=\"size-3 text-muted-foreground\" />\n <Highlighted text={name} needle={needle} />\n {count > 1 ? (\n <span className=\"text-muted-foreground\">×{count}</span>\n ) : null}\n </span>\n ))}\n {!isUser && run?.durationMs != null ? (\n <span className=\"text-muted-foreground\">\n {formatDuration(run.durationMs)}\n </span>\n ) : null}\n </div>\n ) : null}\n {showOutcome && run ? <RunOutcome run={run} needle={needle} /> : null}\n </div>\n </button>\n );\n}\n\nfunction RunRecord({ run }: { run: ThreadRun }) {\n return (\n <div className=\"space-y-4\">\n <RunOutcome run={run} />\n <div className=\"grid gap-3 text-xs sm:grid-cols-2\">\n <EvidenceStat label=\"Run ID\" value={run.id} />\n <EvidenceStat\n label=\"Dispatch mode\"\n value={run.dispatchMode || \"foreground\"}\n />\n <EvidenceStat label=\"Started\" value={formatDate(run.startedAt)} />\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(run.lastProgressAt ?? run.heartbeatAt)}\n />\n <EvidenceStat\n label=\"In-flight marker\"\n value={formatDate(run.inFlightSince)}\n />\n <EvidenceStat\n label=\"Recovery payload\"\n value={run.hasDispatchPayload ? \"retained\" : \"not retained\"}\n />\n </div>\n <RawBlock\n value={Object.fromEntries(\n Object.entries(run).filter(([key]) => key !== \"events\"),\n )}\n />\n </div>\n );\n}\n\nfunction RunEvents({ run }: { run: ThreadRun }) {\n const [showStream, setShowStream] = useState(false);\n const switchId = `thread-debug-stream-${run.id}`;\n const events = showStream\n ? run.events\n : run.events.filter((entry) => !eventIsNoise(entry.event));\n const durations = useMemo(() => toolDurations(run.events).bySeq, [run]);\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <Switch\n id={switchId}\n checked={showStream}\n onCheckedChange={setShowStream}\n />\n <Label htmlFor={switchId} className=\"text-xs font-normal\">\n Show stream events\n </Label>\n </div>\n {events.length > 0 ? (\n <div className=\"space-y-2\">\n {events.map((entry) => (\n <details\n key={`${run.id}-event-${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 <span className=\"font-mono text-muted-foreground\">\n #{entry.seq}\n </span>{\" \"}\n {eventLabel(entry.event)}\n {durations.has(entry.seq) ? (\n <span className=\"text-muted-foreground\">\n {\" \"}\n · {formatDuration(durations.get(entry.seq))}\n </span>\n ) : null}\n </summary>\n <RawBlock value={entry.event} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n </div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">\n No events were retained for this run.\n </div>\n )}\n </div>\n );\n}\n\ntype InspectorTab = \"message\" | \"run\" | \"events\" | \"traces\";\n\nconst THREAD_ITEM = \"thread\";\n\nfunction ThreadRecords({ detail }: { detail: ThreadDebugResponse }) {\n const threadBundle = useMemo(\n () => ({\n thread: detail.thread,\n debug: detail.debug,\n debugRuns: detail.debugRuns,\n queuedMessages: detail.queuedMessages,\n // Trace records with no run_id are thread-scoped, so they never show\n // up in a per-run RowInspector traces tab.\n threadTraces: {\n summaries: detail.traces.summaries.filter((record) => !record.run_id),\n spans: detail.traces.spans.filter((record) => !record.run_id),\n },\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }),\n [detail],\n );\n return (\n <div className=\"space-y-3 p-4\">\n <RawBlock value={threadBundle} />\n <RawBlock value={detail.rawThreadData} />\n </div>\n );\n}\n\n// A user prompt and the agent reply to it share one run. The run belongs to\n// the reply (or to a run row when there was no reply); repeating it on the\n// prompt makes two different rows look identical in the inspector.\nfunction inspectedRun(row: ThreadRow): ThreadRun | null {\n if (row.kind === \"run\") return row.run;\n return row.message.role === \"user\" ? null : row.run;\n}\n\nfunction RowInspector({\n row,\n detail,\n}: {\n row: ThreadRow;\n detail: ThreadDebugResponse;\n}) {\n const [tab, setTab] = useState<InspectorTab>(\"message\");\n const run = inspectedRun(row);\n const available: InspectorTab[] = [\n ...(row.kind === \"message\" ? ([\"message\"] as const) : []),\n ...(run ? ([\"run\", \"events\", \"traces\"] as const) : []),\n ];\n const activeTab = available.includes(tab) ? tab : available[0];\n const toolDurationsById = useMemo(\n () => toolDurations(row.run?.events ?? []).byId,\n [row.run],\n );\n const traces = useMemo(() => {\n if (!run) return { summaries: [], spans: [] };\n const forRun = (record: any) => record?.run_id === run.id;\n return {\n summaries: detail.traces.summaries.filter(forRun),\n spans: detail.traces.spans.filter(forRun),\n };\n }, [detail.traces, run]);\n\n return (\n <Tabs\n value={activeTab}\n onValueChange={(value) => setTab(value as InspectorTab)}\n className=\"p-4\"\n >\n <TabsList>\n {row.kind === \"message\" ? (\n <TabsTrigger value=\"message\">Message</TabsTrigger>\n ) : null}\n {run ? (\n <>\n <TabsTrigger value=\"run\">Run</TabsTrigger>\n <TabsTrigger value=\"events\">Events</TabsTrigger>\n <TabsTrigger value=\"traces\">Traces</TabsTrigger>\n </>\n ) : null}\n </TabsList>\n\n {row.kind === \"message\" ? (\n <TabsContent value=\"message\" className=\"mt-4 space-y-3\">\n {toolParts(row.message).map((tool, index) => (\n <details\n key={`${row.key}-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 {toolDurationsById.has(tool.toolCallId) ? (\n <span className=\"font-normal text-muted-foreground\">\n {\" \"}\n · {formatDuration(toolDurationsById.get(tool.toolCallId))}\n </span>\n ) : null}\n </summary>\n <RawBlock value={tool} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n <RawBlock value={row.message} />\n </TabsContent>\n ) : null}\n {run ? (\n <>\n <TabsContent value=\"run\" className=\"mt-4\">\n <RunRecord run={run} />\n </TabsContent>\n <TabsContent value=\"events\" className=\"mt-4\">\n <RunEvents key={run.id} run={run} />\n </TabsContent>\n <TabsContent value=\"traces\" className=\"mt-4 space-y-3\">\n {traces.summaries.length > 0 || traces.spans.length > 0 ? (\n <>\n <RawBlock value={traces.summaries} />\n <RawBlock value={traces.spans} />\n </>\n ) : (\n <div className=\"text-sm text-muted-foreground\">\n No traces were recorded for this run.\n </div>\n )}\n </TabsContent>\n </>\n ) : null}\n </Tabs>\n );\n}\n\nfunction rowMatches(row: ThreadRow, needle: string): boolean {\n const run = row.kind === \"run\" ? row.run : null;\n const haystack = [\n row.kind === \"message\" ? row.message.text : \"\",\n ...(row.kind === \"message\"\n ? toolCounts(row.message).map(([name]) => name)\n : []),\n row.run?.status,\n row.run?.terminalReason,\n row.run?.abortReason,\n row.run?.errorCode,\n row.run?.errorDetail,\n run?.id,\n ];\n return haystack.some(\n (value) =>\n typeof value === \"string\" && value.toLowerCase().includes(needle),\n );\n}\n\nfunction ThreadDetail({\n detail,\n selectedRowKey,\n onSelectRow,\n onBack,\n}: {\n detail: ThreadDebugResponse;\n selectedRowKey: string | null;\n onSelectRow: (key: string) => void;\n onBack?: () => void;\n}) {\n const rows = useMemo(\n () => buildConversationRows(detail.messages, detail.runs),\n [detail.messages, detail.runs],\n );\n const [search, setSearch] = useState(\"\");\n const needle = search.trim().toLowerCase();\n const visibleRows = needle\n ? rows.filter((row) => rowMatches(row, needle))\n : rows;\n const showThread = selectedRowKey === THREAD_ITEM;\n const activeKey = showThread\n ? null\n : (rows.find((row) => row.key === selectedRowKey)?.key ??\n defaultConversationRowKey(rows, detail.lookup?.runId));\n const selectedRow = rows.find((row) => row.key === activeKey) ?? null;\n const lookupRun =\n detail.runs.find((run) => run.id === detail.lookup?.runId) ?? null;\n\n return (\n <div className=\"min-w-0\">\n <div className=\"flex items-start gap-2 border-b px-5 py-4\">\n {onBack ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"-ml-2 size-8 shrink-0\"\n aria-label=\"Back to threads\"\n title=\"Back to threads\"\n onClick={onBack}\n >\n <IconArrowLeft className=\"size-4\" />\n </Button>\n ) : null}\n <div className=\"flex min-w-0 flex-1 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 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>updated {formatDate(detail.thread.updatedAt)}</span>\n <span aria-hidden=\"true\">·</span>\n <span className=\"flex min-w-0 items-center gap-1\">\n <span className=\"truncate font-mono\">\n {detail.lookup?.runId || detail.thread.id}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-6 shrink-0\"\n title={\n detail.lookup?.runId ? \"Copy run ID\" : \"Copy thread ID\"\n }\n aria-label={\n detail.lookup?.runId ? \"Copy run ID\" : \"Copy thread ID\"\n }\n onClick={() =>\n void navigator.clipboard?.writeText(\n detail.lookup?.runId || detail.thread.id,\n )\n }\n >\n <IconCopy className=\"size-3.5\" />\n </Button>\n </span>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n variant={showThread ? \"secondary\" : \"ghost\"}\n size=\"sm\"\n aria-pressed={showThread}\n onClick={() => onSelectRow(showThread ? \"\" : THREAD_ITEM)}\n >\n <IconDatabase className=\"size-4\" />\n Thread data\n </Button>\n {lookupRun ? (\n <Badge\n variant={\n lookupRun.status === \"errored\" ? \"destructive\" : \"secondary\"\n }\n >\n {lookupRun.status}\n </Badge>\n ) : null}\n <Badge variant=\"outline\">{detail.source.label}</Badge>\n </div>\n </div>\n </div>\n\n <div className=\"grid lg:grid-cols-2\">\n <section\n aria-label=\"Conversation\"\n className=\"max-h-[760px] min-w-0 overflow-auto border-b lg:border-b-0 lg:border-r\"\n >\n {rows.length > 0 ? (\n <div className=\"sticky top-0 z-10 border-b bg-card p-2\">\n <div className=\"relative\">\n <IconSearch\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\"\n />\n <Input\n type=\"search\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n placeholder=\"Search messages\"\n aria-label=\"Search messages\"\n className=\"h-8 pl-8\"\n />\n </div>\n </div>\n ) : null}\n {visibleRows.map((row) => (\n <ConversationRowButton\n key={row.key}\n row={row}\n selected={row.key === activeKey}\n needle={needle}\n onSelect={() => onSelectRow(row.key)}\n />\n ))}\n {rows.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">\n No messages or runs were retained for this thread.\n </div>\n ) : visibleRows.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">\n No matching messages.\n </div>\n ) : null}\n </section>\n <section\n aria-label=\"Inspector\"\n className=\"max-h-[760px] min-w-0 overflow-auto\"\n >\n {showThread ? (\n <ThreadRecords detail={detail} />\n ) : selectedRow ? (\n <RowInspector row={selectedRow} detail={detail} />\n ) : null}\n </section>\n </div>\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 selectedItem = routeSearchParams.get(\"item\");\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\n detail={detail}\n selectedRowKey={selectedItem}\n onSelectRow={(key) => updateRouteState({ item: key })}\n onBack={\n mode === \"threads\"\n ? () =>\n updateRouteState({\n threadId: null,\n runId: null,\n inspectSource: null,\n item: null,\n })\n : undefined\n }\n />\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 item: 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 {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 {failuresData?.partial ? (\n <div className=\"mt-2\">\n <Badge variant=\"outline\">\n {t(\"dispatch.pages.threadDebugPartialResults\", {\n defaultValue: \"Partial results\",\n })}\n </Badge>\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 item: 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 item: 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 item: null,\n }\n : {\n threadId: trimmed,\n runId: null,\n inspectSource: null,\n item: 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 {runId || threadId ? (\n detailPane\n ) : (\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 item: null,\n })\n }\n />\n ))}\n </div>\n </section>\n <div className=\"min-w-0\">{detailPane}</div>\n </div>\n )}\n </div>\n </TabsContent>\n </Tabs>\n </div>\n </DispatchShell>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-debug-store.d.ts","sourceRoot":"","sources":["../../../src/server/lib/thread-debug-store.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"thread-debug-store.d.ts","sourceRoot":"","sources":["../../../src/server/lib/thread-debug-store.ts"],"names":[],"mappings":"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"}
|