@agent-native/dispatch 0.16.2 → 0.16.4
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/dist/actions/get-agent-thread-debug.d.ts +9 -0
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +2 -0
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/list-agent-run-failures.d.ts +61 -0
- package/dist/actions/list-agent-run-failures.d.ts.map +1 -0
- package/dist/actions/list-agent-run-failures.js +38 -0
- package/dist/actions/list-agent-run-failures.js.map +1 -0
- package/dist/actions/provider-api-register.d.ts +12 -12
- package/dist/actions/upsert-destination.d.ts +12 -12
- package/dist/actions/view-screen.js +32 -5
- package/dist/actions/view-screen.js.map +1 -1
- package/dist/hooks/use-navigation-state.d.ts +6 -0
- package/dist/hooks/use-navigation-state.d.ts.map +1 -1
- package/dist/hooks/use-navigation-state.js +30 -0
- package/dist/hooks/use-navigation-state.js.map +1 -1
- package/dist/routes/pages/thread-debug.d.ts.map +1 -1
- package/dist/routes/pages/thread-debug.js +291 -77
- package/dist/routes/pages/thread-debug.js.map +1 -1
- package/dist/server/lib/thread-debug-store.d.ts +72 -0
- package/dist/server/lib/thread-debug-store.d.ts.map +1 -1
- package/dist/server/lib/thread-debug-store.js +215 -19
- package/dist/server/lib/thread-debug-store.js.map +1 -1
- package/dist/server/plugins/agent-chat.js +1 -0
- package/dist/server/plugins/agent-chat.js.map +1 -1
- package/package.json +3 -3
- package/src/actions/index.ts +2 -0
- package/src/actions/list-agent-run-failures.ts +44 -0
- package/src/actions/view-screen.spec.ts +91 -0
- package/src/actions/view-screen.ts +34 -4
- package/src/hooks/use-navigation-state.spec.ts +45 -0
- package/src/hooks/use-navigation-state.ts +28 -0
- package/src/routes/pages/thread-debug.spec.tsx +272 -0
- package/src/routes/pages/thread-debug.tsx +843 -224
- package/src/server/lib/thread-debug-store.spec.ts +292 -16
- package/src/server/lib/thread-debug-store.ts +318 -22
- package/src/server/plugins/agent-chat.spec.ts +30 -0
- package/src/server/plugins/agent-chat.ts +1 -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 { agentNativePath } from \"@agent-native/core/client/api-path\";\nimport { useActionQuery } from \"@agent-native/core/client/hooks\";\nimport {\n IconDatabase,\n IconFileSearch,\n IconRefresh,\n IconSearch,\n} from \"@tabler/icons-react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useSearchParams } from \"react-router\";\n\nimport { ActionQueryError } from \"../../components/action-query-error\";\nimport { DispatchShell } from \"../../components/dispatch-shell\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { Input } from \"../../components/ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport { Skeleton } from \"../../components/ui/skeleton\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../components/ui/tabs\";\nimport { cn } from \"../../lib/utils\";\n\nexport function meta() {\n return [{ title: \"Thread Debug — Dispatch\" }];\n}\n\ninterface ThreadDebugSource {\n id: string;\n label: string;\n kind: \"current\" | \"env\" | \"configured\";\n current: boolean;\n connected: boolean;\n databaseUrlEnv: string | null;\n databaseAuthTokenEnv: string | null;\n canInspectAll: boolean;\n}\n\ninterface ThreadSearchResult {\n id: string;\n ownerEmail: string;\n title: string;\n preview: string;\n messageCount: number;\n createdAt: number;\n updatedAt: number;\n snippet: string;\n}\n\ninterface ThreadMessage {\n index: number;\n id: string | null;\n role: string;\n createdAt: string | number | null;\n status: unknown;\n text: string;\n contentParts: any[];\n attachments: any[];\n metadata: unknown;\n}\n\ninterface ThreadRun {\n id: string;\n status: string;\n abortReason: string | null;\n startedAt: number;\n completedAt: number | null;\n heartbeatAt: number | null;\n events: Array<{ seq: number; event: any; rawEventData: string }>;\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\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 json(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction eventLabel(event: any): string {\n if (!event || typeof event !== \"object\") return \"event\";\n if (event.type === \"tool_start\") return `tool_start · ${event.tool}`;\n if (event.type === \"tool_done\") return `tool_done · ${event.tool}`;\n if (event.type === \"text\") return \"text\";\n if (event.type === \"error\") return `error · ${event.errorCode ?? \"agent\"}`;\n return String(event.type ?? \"event\");\n}\n\nfunction messageTitle(message: ThreadMessage): string {\n const role = message.role || \"unknown\";\n return `${role.charAt(0).toUpperCase()}${role.slice(1)} ${message.index + 1}`;\n}\n\nfunction toolParts(message: ThreadMessage): any[] {\n return message.contentParts.filter((part) => part?.type === \"tool-call\");\n}\n\nfunction RawBlock({\n value,\n className,\n}: {\n value: unknown;\n className?: string;\n}) {\n return (\n <pre\n className={cn(\n \"max-h-[520px] overflow-auto rounded-lg border bg-muted/30 p-3 text-xs leading-relaxed text-foreground\",\n \"whitespace-pre-wrap break-words\",\n className,\n )}\n >\n {typeof value === \"string\" ? value : json(value)}\n </pre>\n );\n}\n\nfunction SourceBadge({ source }: { source: ThreadDebugSource }) {\n return (\n <Badge variant={source.current ? \"default\" : \"secondary\"}>\n {source.current ? \"current\" : source.kind}\n </Badge>\n );\n}\n\nfunction ResultCard({\n result,\n selected,\n onSelect,\n}: {\n result: ThreadSearchResult;\n selected: boolean;\n onSelect: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n \"w-full rounded-lg border px-3 py-3 text-left transition-colors\",\n selected\n ? \"border-foreground bg-muted\"\n : \"bg-card hover:border-foreground/30 hover:bg-muted/40\",\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {result.title || result.preview || result.id}\n </div>\n <div className=\"mt-1 truncate font-mono text-[11px] text-muted-foreground\">\n {result.id}\n </div>\n </div>\n <Badge variant=\"outline\" className=\"shrink-0\">\n {result.messageCount}\n </Badge>\n </div>\n <div className=\"mt-2 line-clamp-3 text-xs leading-relaxed text-muted-foreground\">\n {result.snippet || result.preview || \"No preview\"}\n </div>\n <div className=\"mt-2 flex items-center justify-between gap-3 text-[11px] text-muted-foreground\">\n <span className=\"truncate\">{result.ownerEmail}</span>\n <span className=\"shrink-0\">{formatDate(result.updatedAt)}</span>\n </div>\n </button>\n );\n}\n\nfunction MessageBlock({ message }: { message: ThreadMessage }) {\n const tools = toolParts(message);\n return (\n <div className=\"rounded-lg bg-card\">\n <div className=\"flex flex-wrap items-center justify-between gap-2 border-b px-3 py-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge\n variant={message.role === \"assistant\" ? \"default\" : \"secondary\"}\n >\n {message.role}\n </Badge>\n <span className=\"truncate text-sm font-medium text-foreground\">\n {messageTitle(message)}\n </span>\n </div>\n <div className=\"flex items-center gap-2 text-[11px] text-muted-foreground\">\n {message.attachments.length > 0 ? (\n <Badge variant=\"outline\">{message.attachments.length} files</Badge>\n ) : null}\n <span>{formatDate(message.createdAt)}</span>\n </div>\n </div>\n <div className=\"space-y-3 px-3 py-3\">\n {message.text ? (\n <div className=\"whitespace-pre-wrap break-words text-sm leading-relaxed text-foreground\">\n {message.text}\n </div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">No text content</div>\n )}\n {tools.length > 0 ? (\n <div className=\"space-y-2\">\n {tools.map((tool, index) => (\n <details\n key={`${message.id ?? message.index}-tool-${index}`}\n className=\"rounded-md border bg-muted/30 px-3 py-2\"\n >\n <summary className=\"cursor-pointer text-xs font-medium text-foreground\">\n {tool.toolName ?? tool.name ?? \"tool-call\"}\n </summary>\n <RawBlock value={tool} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction ThreadDetail({ detail }: { detail: ThreadDebugResponse }) {\n const rawBundle = useMemo(\n () => ({\n thread: detail.thread,\n debug: detail.debug,\n debugRuns: detail.debugRuns,\n queuedMessages: detail.queuedMessages,\n threadData: detail.threadData,\n runs: detail.runs,\n traces: detail.traces,\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }),\n [detail],\n );\n\n return (\n <div className=\"rounded-lg bg-card\">\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-base font-semibold text-foreground\">\n {detail.thread.title || detail.thread.preview || detail.thread.id}\n </div>\n <div className=\"mt-1 truncate font-mono text-xs text-muted-foreground\">\n {detail.thread.id}\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge variant=\"secondary\">{detail.messages.length} messages</Badge>\n <Badge variant=\"secondary\">{detail.runs.length} runs</Badge>\n <Badge variant=\"outline\">{detail.source.label}</Badge>\n </div>\n </div>\n <div className=\"mt-3 grid gap-2 text-xs text-muted-foreground sm:grid-cols-3\">\n <div className=\"truncate\">Owner: {detail.thread.ownerEmail}</div>\n <div>Created: {formatDate(detail.thread.createdAt)}</div>\n <div>Updated: {formatDate(detail.thread.updatedAt)}</div>\n </div>\n </div>\n\n <Tabs defaultValue=\"transcript\" className=\"p-4\">\n <TabsList>\n <TabsTrigger value=\"transcript\">Transcript</TabsTrigger>\n <TabsTrigger value=\"runs\">Runs</TabsTrigger>\n <TabsTrigger value=\"internals\">Internals</TabsTrigger>\n <TabsTrigger value=\"raw\">Raw</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"transcript\" className=\"mt-4 space-y-3\">\n {detail.messages.length > 0 ? (\n detail.messages.map((message) => (\n <MessageBlock\n key={message.id ?? `message-${message.index}`}\n message={message}\n />\n ))\n ) : (\n <div className=\"rounded-lg border border-dashed px-4 py-8 text-center text-sm text-muted-foreground\">\n No persisted messages.\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"runs\" className=\"mt-4 space-y-3\">\n {detail.runs.length > 0 ? (\n detail.runs.map((run) => (\n <details key={run.id} className=\"rounded-lg bg-card\">\n <summary className=\"cursor-pointer px-4 py-3\">\n <div className=\"inline-flex flex-wrap items-center gap-2\">\n <Badge variant=\"outline\">{run.status}</Badge>\n <span className=\"font-mono text-xs text-foreground\">\n {run.id}\n </span>\n <span className=\"text-xs text-muted-foreground\">\n {formatDate(run.startedAt)}\n </span>\n </div>\n </summary>\n <div className=\"space-y-2 border-t px-4 py-3\">\n {run.events.map((event) => (\n <details\n key={`${run.id}-${event.seq}`}\n className=\"rounded-md border bg-muted/30 px-3 py-2\"\n >\n <summary className=\"cursor-pointer text-xs font-medium text-foreground\">\n #{event.seq} {eventLabel(event.event)}\n </summary>\n <RawBlock value={event.event} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n {run.events.length === 0 ? (\n <div className=\"text-sm text-muted-foreground\">\n No retained run events.\n </div>\n ) : null}\n </div>\n </details>\n ))\n ) : (\n <div className=\"rounded-lg border border-dashed px-4 py-8 text-center text-sm text-muted-foreground\">\n No retained runs.\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"internals\" className=\"mt-4 space-y-4\">\n <div className=\"grid gap-4 lg:grid-cols-2\">\n <div>\n <div className=\"mb-2 text-sm font-medium text-foreground\">\n Debug Runs\n </div>\n <RawBlock\n value={\n detail.debugRuns.length > 0\n ? detail.debugRuns\n : (detail.debug ?? {})\n }\n />\n </div>\n <div>\n <div className=\"mb-2 text-sm font-medium text-foreground\">\n Trace Summaries\n </div>\n <RawBlock value={detail.traces.summaries} />\n </div>\n <div>\n <div className=\"mb-2 text-sm font-medium text-foreground\">\n Trace Spans\n </div>\n <RawBlock value={detail.traces.spans} />\n </div>\n <div>\n <div className=\"mb-2 text-sm font-medium text-foreground\">\n Feedback And Evals\n </div>\n <RawBlock\n value={{\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }}\n />\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"raw\" className=\"mt-4 space-y-4\">\n <RawBlock value={rawBundle} />\n <RawBlock value={detail.rawThreadData} />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n\nexport default function ThreadDebugRoute() {\n const [routeSearchParams] = useSearchParams();\n const initialSourceId = routeSearchParams.get(\"source\") || \"current\";\n const initialQuery = routeSearchParams.get(\"query\") || \"\";\n const initialOwnerEmail = routeSearchParams.get(\"ownerEmail\") || \"\";\n const [sourceId, setSourceId] = useState(initialSourceId);\n const [query, setQuery] = useState(initialQuery);\n const [ownerEmail, setOwnerEmail] = useState(initialOwnerEmail);\n const [lookupId, setLookupId] = useState(\"\");\n const [submittedSearch, setSubmittedSearch] = useState({\n sourceId: initialSourceId,\n query: initialQuery,\n ownerEmail: initialOwnerEmail,\n });\n const [selected, setSelected] = useState<{\n sourceId: string;\n lookupId: string;\n lookupKind: \"thread\" | \"run\";\n ownerEmail?: string;\n } | null>(null);\n\n const sourcesQuery = useActionQuery<{\n access: {\n viewerEmail: string;\n orgId: string | null;\n role: string | null;\n envAdmin: boolean;\n canInspectAll: boolean;\n memberCount: number;\n };\n sources: ThreadDebugSource[];\n }>(\"list-agent-thread-sources\", {});\n const { data: sourcesData, isLoading: sourcesLoading } = sourcesQuery;\n\n const sources: ThreadDebugSource[] = sourcesData?.sources ?? [];\n const searchParams = useMemo(\n () => ({\n sourceId: submittedSearch.sourceId,\n query: submittedSearch.query || undefined,\n ownerEmail: submittedSearch.ownerEmail || undefined,\n limit: 25,\n }),\n [submittedSearch],\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);\n const searchThreads: ThreadSearchResult[] = searchData?.threads ?? [];\n\n const detailParams = useMemo(\n () => ({\n sourceId: selected?.sourceId ?? \"current\",\n ...(selected?.lookupKind === \"run\"\n ? { runId: selected.lookupId }\n : { threadId: selected?.lookupId ?? \"\" }),\n ownerEmail: selected?.ownerEmail,\n maxRuns: 20,\n maxEvents: 800,\n maxTraceSpans: 600,\n }),\n [selected],\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(selected?.lookupId),\n },\n );\n\n const selectedSource = sources.find((source) => source.id === sourceId);\n\n useEffect(() => {\n fetch(agentNativePath(\"/_agent-native/application-state/navigation\"), {\n method: \"PUT\",\n keepalive: true,\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n view: \"thread-debug\",\n path:\n typeof window === \"undefined\"\n ? \"/thread-debug\"\n : window.location.pathname,\n sourceId,\n query,\n ownerEmail: ownerEmail.trim() || undefined,\n threadId:\n selected?.lookupKind === \"thread\"\n ? selected.lookupId\n : !selected && lookupId.trim() && !lookupId.startsWith(\"run-\")\n ? lookupId.trim()\n : undefined,\n runId:\n selected?.lookupKind === \"run\"\n ? selected.lookupId\n : !selected && lookupId.trim() && lookupId.startsWith(\"run-\")\n ? lookupId.trim()\n : undefined,\n }),\n }).catch(() => {});\n }, [ownerEmail, query, selected, sourceId, lookupId]);\n\n return (\n <DispatchShell\n title=\"Thread Debug\"\n description=\"Inspect persisted agent chat threads, run events, and AI internals.\"\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 <section className=\"rounded-lg bg-card p-4\">\n <div className=\"grid gap-3 lg:grid-cols-[220px_1fr_260px_auto]\">\n <Select value={sourceId} onValueChange={setSourceId}>\n <SelectTrigger>\n <SelectValue placeholder=\"Source\" />\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\">Current Dispatch DB</SelectItem>\n ) : null}\n </SelectContent>\n </Select>\n <Input\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n placeholder=\"Search title, preview, messages, tools\"\n />\n <Input\n value={ownerEmail}\n onChange={(event) => setOwnerEmail(event.target.value)}\n placeholder=\"Owner email\"\n />\n <Button\n type=\"button\"\n onClick={() =>\n setSubmittedSearch({\n sourceId,\n query: query.trim(),\n ownerEmail: ownerEmail.trim(),\n })\n }\n >\n <IconSearch size={16} />\n Search\n </Button>\n </div>\n\n <div className=\"mt-3 grid gap-3 lg:grid-cols-[1fr_auto]\">\n <Input\n value={lookupId}\n onChange={(event) => setLookupId(event.target.value)}\n placeholder=\"Paste thread or request/run ID\"\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 setSelected({\n sourceId,\n lookupId: trimmed,\n lookupKind: trimmed.startsWith(\"run-\") ? \"run\" : \"thread\",\n ownerEmail: ownerEmail.trim() || undefined,\n });\n }}\n >\n <IconFileSearch size={16} />\n Inspect\n </Button>\n </div>\n\n <div className=\"mt-3 flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n {sourcesLoading ? <Skeleton className=\"h-5 w-32\" /> : null}\n {selectedSource ? <SourceBadge source={selectedSource} /> : null}\n {selectedSource?.databaseUrlEnv ? (\n <Badge variant=\"outline\" className=\"font-mono\">\n {selectedSource.databaseUrlEnv}\n </Badge>\n ) : null}\n {sourcesData?.access ? (\n <span>\n {sourcesData.access.viewerEmail} ·{\" \"}\n {sourcesData.access.canInspectAll ? \"admin scope\" : \"own scope\"}\n </span>\n ) : null}\n </div>\n </section>\n\n {searchError ? (\n <ActionQueryError\n error={searchError}\n onRetry={() => void refetchSearch()}\n />\n ) : null}\n\n <div className=\"grid gap-4 xl:grid-cols-[380px_1fr]\">\n <section className=\"min-h-[520px] rounded-lg bg-card\">\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div>\n <div className=\"text-sm font-semibold text-foreground\">\n Threads\n </div>\n <div className=\"text-xs text-muted-foreground\">\n {searchData?.count ?? 0} results ·{\" \"}\n {searchData?.access?.scope ?? \"current scope\"}\n </div>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => refetchSearch()}\n aria-label=\"Refresh threads\"\n >\n <IconRefresh size={16} />\n </Button>\n </div>\n <div className=\"max-h-[760px] space-y-2 overflow-auto p-3\">\n {searchLoading ? (\n <>\n <Skeleton className=\"h-28 w-full rounded-lg\" />\n <Skeleton className=\"h-28 w-full rounded-lg\" />\n <Skeleton className=\"h-28 w-full rounded-lg\" />\n </>\n ) : null}\n {!searchLoading && searchThreads.length === 0 ? (\n <div className=\"flex min-h-64 flex-col items-center justify-center rounded-lg border border-dashed px-4 text-center text-sm text-muted-foreground\">\n <IconDatabase className=\"mb-2 h-5 w-5\" />\n No threads found.\n </div>\n ) : null}\n {searchThreads.map((result) => (\n <ResultCard\n key={result.id}\n result={result}\n selected={\n selected?.lookupKind === \"thread\" &&\n selected.lookupId === result.id\n }\n onSelect={() =>\n setSelected({\n sourceId: submittedSearch.sourceId,\n lookupId: result.id,\n lookupKind: \"thread\",\n ownerEmail: submittedSearch.ownerEmail || undefined,\n })\n }\n />\n ))}\n </div>\n </section>\n\n <section className=\"min-w-0\">\n {detailError ? (\n <ActionQueryError\n error={detailError}\n onRetry={() => void refetchDetail()}\n />\n ) : null}\n {detailLoading ? (\n <div className=\"rounded-lg bg-card p-4\">\n <Skeleton className=\"h-6 w-72\" />\n <Skeleton className=\"mt-3 h-4 w-96\" />\n <Skeleton className=\"mt-6 h-[520px] w-full\" />\n </div>\n ) : detail ? (\n <ThreadDetail detail={detail} />\n ) : (\n <div className=\"flex min-h-[520px] flex-col items-center justify-center rounded-lg border border-dashed bg-card px-4 text-center text-sm text-muted-foreground\">\n <IconFileSearch className=\"mb-2 h-5 w-5\" />\n Select or inspect a thread or request/run ID.\n </div>\n )}\n </section>\n </div>\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 IconAlertTriangle,\n IconClock,\n IconDatabase,\n IconFileSearch,\n IconRefresh,\n IconSearch,\n} from \"@tabler/icons-react\";\nimport { useMemo, useState } from \"react\";\nimport { useSearchParams } from \"react-router\";\n\nimport { ActionQueryError } from \"../../components/action-query-error\";\nimport { DispatchShell } from \"../../components/dispatch-shell\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { Input } from \"../../components/ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport { Skeleton } from \"../../components/ui/skeleton\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../components/ui/tabs\";\nimport { cn } from \"../../lib/utils\";\n\nexport function meta() {\n return [{ title: \"Thread Debug — Dispatch\" }];\n}\n\ninterface ThreadDebugSource {\n id: string;\n label: string;\n kind: \"current\" | \"env\" | \"configured\";\n current: boolean;\n connected: boolean;\n databaseUrlEnv: string | null;\n databaseAuthTokenEnv: string | null;\n canInspectAll: boolean;\n}\n\ninterface ThreadSearchResult {\n id: string;\n ownerEmail: string;\n title: string;\n preview: string;\n messageCount: number;\n createdAt: number;\n updatedAt: number;\n snippet: string;\n}\n\ninterface ThreadMessage {\n index: number;\n id: string | null;\n role: string;\n createdAt: string | number | null;\n status: unknown;\n text: string;\n contentParts: any[];\n attachments: any[];\n metadata: unknown;\n}\n\ninterface ThreadRun {\n id: string;\n status: string;\n turnId?: string | null;\n abortReason: string | null;\n errorCode?: string | null;\n errorDetail?: string | null;\n terminalReason?: string | null;\n dispatchMode?: string | null;\n diagStage?: string | null;\n workerStage?: string | null;\n startedAt: number;\n completedAt: number | null;\n heartbeatAt: number | null;\n lastProgressAt?: number | null;\n durationMs?: number | null;\n peakRssMb?: number | null;\n events: Array<{ seq: number; event: any; rawEventData: string }>;\n}\n\ntype ThreadDebugMode = \"failures\" | \"threads\";\ntype FailureStatus = \"all\" | \"errored\" | \"aborted\" | \"truncated\";\ntype FailureRange = \"24h\" | \"7d\" | \"30d\";\n\ninterface AgentRunFailure {\n id: string;\n threadId: string;\n sourceId?: string;\n sourceLabel?: string;\n source?: {\n id: string;\n label: string;\n kind?: string;\n databaseUrlEnv?: string | null;\n };\n ownerEmail: string;\n threadTitle: string;\n threadPreview: string;\n status: string;\n errorCode: string | null;\n errorDetail: string | null;\n terminalReason: string | null;\n abortReason: string | null;\n dispatchMode: string | null;\n diagStage: string | null;\n workerStage?: string | null;\n startedAt: number;\n completedAt: number | null;\n durationMs: number | null;\n}\n\ninterface AgentRunFailuresResponse {\n failures: AgentRunFailure[];\n sources: Array<{\n source: {\n id: string;\n label: string;\n kind?: string;\n databaseUrlEnv?: string | null;\n };\n status: \"ok\" | \"unsupported\" | \"unavailable\" | \"disconnected\";\n failureCount: number;\n errorCode?: string | null;\n }>;\n partial: boolean;\n count?: number;\n access: { viewerEmail: string; scope: string; canInspectAll: boolean };\n filters?: {\n sourceId?: string;\n status?: FailureStatus;\n lookbackHours?: number;\n limit?: number;\n };\n}\n\ninterface ThreadDebugResponse {\n source: {\n id: string;\n label: string;\n kind: string;\n databaseUrlEnv: string | null;\n };\n access: { viewerEmail: string; scope: string; canInspectAll: boolean };\n thread: ThreadSearchResult;\n lookup?: { requestedId: string; threadId: string; runId: string | null };\n messages: ThreadMessage[];\n debug: any;\n debugRuns: any[];\n queuedMessages: any[];\n threadData: any;\n rawThreadData: string;\n runs: ThreadRun[];\n traces: { summaries: any[]; spans: any[] };\n feedback: any[];\n satisfaction: any[];\n evals: any[];\n checkpoints: any[];\n}\n\nconst FAILURE_RANGE_HOURS: Record<FailureRange, number> = {\n \"24h\": 24,\n \"7d\": 7 * 24,\n \"30d\": 30 * 24,\n};\n\nfunction parseMode(value: string | null): ThreadDebugMode {\n return value === \"threads\" ? \"threads\" : \"failures\";\n}\n\nfunction parseFailureStatus(value: string | null): FailureStatus {\n return value === \"errored\" || value === \"aborted\" || value === \"truncated\"\n ? value\n : \"all\";\n}\n\nfunction parseFailureRange(value: string | null): FailureRange {\n return value === \"7d\" || value === \"30d\" ? value : \"24h\";\n}\n\nfunction failureSourceId(failure: AgentRunFailure): string {\n return failure.sourceId || failure.source?.id || \"current\";\n}\n\nfunction failureSourceLabel(failure: AgentRunFailure): string {\n return (\n failure.sourceLabel || failure.source?.label || failureSourceId(failure)\n );\n}\n\nfunction formatDate(value: number | string | null | undefined): string {\n if (value == null || value === \"\") return \"n/a\";\n const numeric = Number(value);\n const date = Number.isFinite(numeric) ? new Date(numeric) : new Date(value);\n if (Number.isNaN(date.getTime())) return \"n/a\";\n return date.toLocaleString();\n}\n\nfunction formatDuration(value: number | null | undefined): string {\n if (value == null || !Number.isFinite(value)) return \"n/a\";\n if (value < 1_000) return `${Math.round(value)}ms`;\n if (value < 60_000) return `${(value / 1_000).toFixed(1)}s`;\n return `${(value / 60_000).toFixed(1)}m`;\n}\n\nfunction json(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction eventLabel(event: any): string {\n if (!event || typeof event !== \"object\") return \"event\";\n if (event.type === \"tool_start\") return `tool_start · ${event.tool}`;\n if (event.type === \"tool_done\") return `tool_done · ${event.tool}`;\n if (event.type === \"text\") return \"text\";\n if (event.type === \"error\") return `error · ${event.errorCode ?? \"agent\"}`;\n return String(event.type ?? \"event\");\n}\n\nfunction messageTitle(message: ThreadMessage): string {\n const role = message.role || \"unknown\";\n return `${role.charAt(0).toUpperCase()}${role.slice(1)} ${message.index + 1}`;\n}\n\nfunction toolParts(message: ThreadMessage): any[] {\n return message.contentParts.filter((part) => part?.type === \"tool-call\");\n}\n\nfunction diagnosticStage(value: string | null | undefined): string | null {\n if (!value) return null;\n try {\n const parsed = JSON.parse(value) as { stage?: unknown; detail?: unknown };\n const stage =\n typeof parsed.stage === \"string\" && parsed.stage.trim()\n ? parsed.stage.trim()\n : value;\n const detail =\n typeof parsed.detail === \"string\" && parsed.detail.trim()\n ? parsed.detail.trim()\n : \"\";\n return detail ? `${stage}: ${detail}` : stage;\n } catch {\n return value;\n }\n}\n\nfunction RawBlock({\n value,\n className,\n}: {\n value: unknown;\n className?: string;\n}) {\n return (\n <pre\n className={cn(\n \"max-h-[520px] overflow-auto rounded-lg border bg-muted/30 p-3 text-xs leading-relaxed text-foreground\",\n \"whitespace-pre-wrap break-words\",\n className,\n )}\n >\n {typeof value === \"string\" ? value : json(value)}\n </pre>\n );\n}\n\nfunction SourceBadge({ source }: { source: ThreadDebugSource }) {\n return (\n <Badge variant={source.current ? \"default\" : \"secondary\"}>\n {source.current ? \"current\" : source.kind}\n </Badge>\n );\n}\n\nfunction ResultCard({\n result,\n selected,\n onSelect,\n}: {\n result: ThreadSearchResult;\n selected: boolean;\n onSelect: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n \"w-full rounded-lg border px-3 py-3 text-left transition-colors\",\n selected\n ? \"border-foreground bg-muted\"\n : \"bg-card hover:border-foreground/30 hover:bg-muted/40\",\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {result.title || result.preview || result.id}\n </div>\n <div className=\"mt-1 truncate font-mono text-[11px] text-muted-foreground\">\n {result.id}\n </div>\n </div>\n <Badge variant=\"outline\" className=\"shrink-0\">\n {result.messageCount}\n </Badge>\n </div>\n <div className=\"mt-2 line-clamp-3 text-xs leading-relaxed text-muted-foreground\">\n {result.snippet || result.preview || \"No preview\"}\n </div>\n <div className=\"mt-2 flex items-center justify-between gap-3 text-[11px] text-muted-foreground\">\n <span className=\"truncate\">{result.ownerEmail}</span>\n <span className=\"shrink-0\">{formatDate(result.updatedAt)}</span>\n </div>\n </button>\n );\n}\n\nfunction FailureCard({\n failure,\n selected,\n onSelect,\n}: {\n failure: AgentRunFailure;\n selected: boolean;\n onSelect: () => void;\n}) {\n const t = useT();\n const summary =\n failure.errorCode ||\n failure.terminalReason ||\n failure.abortReason ||\n failure.status;\n const statusLabel =\n failure.status === \"errored\"\n ? t(\"dispatch.pages.threadDebugErrored\", {\n defaultValue: \"Errored\",\n })\n : failure.status === \"aborted\"\n ? t(\"dispatch.pages.threadDebugAborted\", {\n defaultValue: \"Aborted\",\n })\n : failure.status === \"truncated\"\n ? t(\"dispatch.pages.threadDebugTruncated\", {\n defaultValue: \"Truncated\",\n })\n : failure.status;\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n \"w-full rounded-lg border px-3 py-3 text-left transition-colors\",\n selected\n ? \"border-foreground bg-muted\"\n : \"bg-card hover:border-foreground/30 hover:bg-muted/40\",\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {failure.threadTitle || failure.threadPreview || failure.threadId}\n </div>\n <div className=\"mt-1 truncate font-mono text-[11px] text-muted-foreground\">\n {failure.id}\n </div>\n </div>\n <Badge variant=\"outline\" className=\"shrink-0\">\n {statusLabel}\n </Badge>\n </div>\n <div className=\"mt-2 flex items-center gap-1.5 text-xs text-foreground\">\n <IconAlertTriangle className=\"size-3.5 shrink-0 text-muted-foreground\" />\n <span className=\"truncate\">{summary}</span>\n </div>\n {failure.errorDetail ? (\n <div className=\"mt-1 line-clamp-2 text-xs leading-relaxed text-muted-foreground\">\n {failure.errorDetail}\n </div>\n ) : null}\n <div className=\"mt-2 flex items-center justify-between gap-3 text-[11px] text-muted-foreground\">\n <span className=\"truncate\">\n {failureSourceLabel(failure)} · {failure.ownerEmail}\n </span>\n <span className=\"inline-flex shrink-0 items-center gap-1\">\n <IconClock className=\"size-3\" />\n {formatDate(failure.completedAt ?? failure.startedAt)}\n {failure.durationMs == null\n ? null\n : ` · ${formatDuration(failure.durationMs)}`}\n </span>\n </div>\n <span className=\"sr-only\">\n {t(\"dispatch.pages.threadDebugInspectFailure\", {\n defaultValue: \"Inspect failed run\",\n })}\n </span>\n </button>\n );\n}\n\nfunction MessageBlock({ message }: { message: ThreadMessage }) {\n const tools = toolParts(message);\n return (\n <div className=\"rounded-lg bg-card\">\n <div className=\"flex flex-wrap items-center justify-between gap-2 border-b px-3 py-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge\n variant={message.role === \"assistant\" ? \"default\" : \"secondary\"}\n >\n {message.role}\n </Badge>\n <span className=\"truncate text-sm font-medium text-foreground\">\n {messageTitle(message)}\n </span>\n </div>\n <div className=\"flex items-center gap-2 text-[11px] text-muted-foreground\">\n {message.attachments.length > 0 ? (\n <Badge variant=\"outline\">{message.attachments.length} files</Badge>\n ) : null}\n <span>{formatDate(message.createdAt)}</span>\n </div>\n </div>\n <div className=\"space-y-3 px-3 py-3\">\n {message.text ? (\n <div className=\"whitespace-pre-wrap break-words text-sm leading-relaxed text-foreground\">\n {message.text}\n </div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">No text content</div>\n )}\n {tools.length > 0 ? (\n <div className=\"space-y-2\">\n {tools.map((tool, index) => (\n <details\n key={`${message.id ?? message.index}-tool-${index}`}\n className=\"rounded-md border bg-muted/30 px-3 py-2\"\n >\n <summary className=\"cursor-pointer text-xs font-medium text-foreground\">\n {tool.toolName ?? tool.name ?? \"tool-call\"}\n </summary>\n <RawBlock value={tool} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction ThreadDetail({ detail }: { detail: ThreadDebugResponse }) {\n const t = useT();\n const rawBundle = useMemo(\n () => ({\n thread: detail.thread,\n debug: detail.debug,\n debugRuns: detail.debugRuns,\n queuedMessages: detail.queuedMessages,\n threadData: detail.threadData,\n runs: detail.runs,\n traces: detail.traces,\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }),\n [detail],\n );\n\n return (\n <div className=\"rounded-lg bg-card\">\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-base font-semibold text-foreground\">\n {detail.thread.title || detail.thread.preview || detail.thread.id}\n </div>\n <div className=\"mt-1 truncate font-mono text-xs text-muted-foreground\">\n {detail.thread.id}\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge variant=\"secondary\">{detail.messages.length} messages</Badge>\n <Badge variant=\"secondary\">{detail.runs.length} runs</Badge>\n <Badge variant=\"outline\">{detail.source.label}</Badge>\n </div>\n </div>\n <div className=\"mt-3 grid gap-2 text-xs text-muted-foreground sm:grid-cols-3\">\n <div className=\"truncate\">Owner: {detail.thread.ownerEmail}</div>\n <div>Created: {formatDate(detail.thread.createdAt)}</div>\n <div>Updated: {formatDate(detail.thread.updatedAt)}</div>\n </div>\n </div>\n\n <Tabs defaultValue=\"transcript\" className=\"p-4\">\n <TabsList>\n <TabsTrigger value=\"transcript\">Transcript</TabsTrigger>\n <TabsTrigger value=\"runs\">Runs</TabsTrigger>\n <TabsTrigger value=\"internals\">Internals</TabsTrigger>\n <TabsTrigger value=\"raw\">Raw</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"transcript\" className=\"mt-4 space-y-3\">\n {detail.messages.length > 0 ? (\n detail.messages.map((message) => (\n <MessageBlock\n key={message.id ?? `message-${message.index}`}\n message={message}\n />\n ))\n ) : (\n <div className=\"rounded-lg border border-dashed px-4 py-8 text-center text-sm text-muted-foreground\">\n No persisted messages.\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"runs\" className=\"mt-4 space-y-3\">\n {detail.runs.length > 0 ? (\n detail.runs.map((run) => (\n <details key={run.id} className=\"rounded-lg bg-card\">\n <summary className=\"cursor-pointer px-4 py-3\">\n <div className=\"inline-flex flex-wrap items-center gap-2\">\n <Badge variant=\"outline\">{run.status}</Badge>\n <span className=\"font-mono text-xs text-foreground\">\n {run.id}\n </span>\n {run.errorCode ? (\n <span className=\"font-mono text-xs text-destructive\">\n {run.errorCode}\n </span>\n ) : null}\n <span className=\"text-xs text-muted-foreground\">\n {formatDate(run.startedAt)}\n </span>\n </div>\n </summary>\n <div className=\"space-y-3 border-t px-4 py-3\">\n <div className=\"grid gap-2 text-xs sm:grid-cols-2 xl:grid-cols-3\">\n <div>\n <div className=\"text-muted-foreground\">\n {t(\"dispatch.pages.threadDebugFailureCode\", {\n defaultValue: \"Failure code\",\n })}\n </div>\n <div className=\"mt-0.5 break-words font-mono text-foreground\">\n {run.errorCode || \"n/a\"}\n </div>\n </div>\n <div>\n <div className=\"text-muted-foreground\">\n {t(\"dispatch.pages.threadDebugTerminalReason\", {\n defaultValue: \"Terminal reason\",\n })}\n </div>\n <div className=\"mt-0.5 break-words font-mono text-foreground\">\n {run.terminalReason || run.abortReason || \"n/a\"}\n </div>\n </div>\n <div>\n <div className=\"text-muted-foreground\">\n {t(\"dispatch.pages.threadDebugDispatchMode\", {\n defaultValue: \"Dispatch mode\",\n })}\n </div>\n <div className=\"mt-0.5 break-words font-mono text-foreground\">\n {run.dispatchMode || \"foreground\"}\n </div>\n </div>\n <div>\n <div className=\"text-muted-foreground\">\n {t(\"dispatch.pages.threadDebugLastStage\", {\n defaultValue: \"Last stage\",\n })}\n </div>\n <div className=\"mt-0.5 break-words font-mono text-foreground\">\n {diagnosticStage(run.workerStage) ||\n diagnosticStage(run.diagStage) ||\n \"n/a\"}\n </div>\n </div>\n <div>\n <div className=\"text-muted-foreground\">\n {t(\"dispatch.pages.threadDebugDuration\", {\n defaultValue: \"Duration\",\n })}\n </div>\n <div className=\"mt-0.5 text-foreground\">\n {formatDuration(\n run.durationMs ??\n (run.completedAt == null\n ? null\n : run.completedAt - run.startedAt),\n )}\n </div>\n </div>\n <div>\n <div className=\"text-muted-foreground\">\n {t(\"dispatch.pages.threadDebugLastProgress\", {\n defaultValue: \"Last progress\",\n })}\n </div>\n <div className=\"mt-0.5 text-foreground\">\n {formatDate(run.lastProgressAt ?? run.heartbeatAt)}\n </div>\n </div>\n </div>\n {run.errorDetail ? (\n <div className=\"rounded-md bg-destructive/10 px-3 py-2 text-xs leading-relaxed text-destructive\">\n {run.errorDetail}\n </div>\n ) : null}\n {run.events.map((event) => (\n <details\n key={`${run.id}-${event.seq}`}\n className=\"rounded-md border bg-muted/30 px-3 py-2\"\n >\n <summary className=\"cursor-pointer text-xs font-medium text-foreground\">\n #{event.seq} {eventLabel(event.event)}\n </summary>\n <RawBlock value={event.event} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n {run.events.length === 0 ? (\n <div className=\"text-sm text-muted-foreground\">\n No retained run events.\n </div>\n ) : null}\n </div>\n </details>\n ))\n ) : (\n <div className=\"rounded-lg border border-dashed px-4 py-8 text-center text-sm text-muted-foreground\">\n No retained runs.\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"internals\" className=\"mt-4 space-y-4\">\n <div className=\"grid gap-4 lg:grid-cols-2\">\n <div>\n <div className=\"mb-2 text-sm font-medium text-foreground\">\n Debug Runs\n </div>\n <RawBlock\n value={\n detail.debugRuns.length > 0\n ? detail.debugRuns\n : (detail.debug ?? {})\n }\n />\n </div>\n <div>\n <div className=\"mb-2 text-sm font-medium text-foreground\">\n Trace Summaries\n </div>\n <RawBlock value={detail.traces.summaries} />\n </div>\n <div>\n <div className=\"mb-2 text-sm font-medium text-foreground\">\n Trace Spans\n </div>\n <RawBlock value={detail.traces.spans} />\n </div>\n <div>\n <div className=\"mb-2 text-sm font-medium text-foreground\">\n Feedback And Evals\n </div>\n <RawBlock\n value={{\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }}\n />\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"raw\" className=\"mt-4 space-y-4\">\n <RawBlock value={rawBundle} />\n <RawBlock value={detail.rawThreadData} />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n\nexport default function ThreadDebugRoute() {\n const t = useT();\n const [routeSearchParams, setRouteSearchParams] = useSearchParams();\n const mode = parseMode(routeSearchParams.get(\"mode\"));\n const sourceId =\n routeSearchParams.get(\"source\") ||\n (mode === \"failures\" ? \"all\" : \"current\");\n const ownerEmail = routeSearchParams.get(\"owner\") || \"\";\n const query = routeSearchParams.get(\"query\") || \"\";\n const status = parseFailureStatus(routeSearchParams.get(\"status\"));\n const range = parseFailureRange(routeSearchParams.get(\"range\"));\n const runId = routeSearchParams.get(\"runId\") || \"\";\n const threadId = routeSearchParams.get(\"threadId\") || \"\";\n const inspectSourceId = routeSearchParams.get(\"inspectSource\") || \"\";\n const [lookupId, setLookupId] = useState(\"\");\n\n function updateRouteState(\n updates: Record<string, string | null | undefined>,\n ) {\n const next = new URLSearchParams(routeSearchParams);\n for (const [key, value] of Object.entries(updates)) {\n if (value == null || value === \"\") next.delete(key);\n else next.set(key, value);\n }\n setRouteSearchParams(next, { replace: true });\n }\n\n const sourcesQuery = useActionQuery<{\n access: {\n viewerEmail: string;\n orgId: string | null;\n role: string | null;\n envAdmin: boolean;\n canInspectAll: boolean;\n memberCount: number;\n };\n sources: ThreadDebugSource[];\n }>(\"list-agent-thread-sources\", {});\n const { data: sourcesData, isLoading: sourcesLoading } = sourcesQuery;\n\n const sources: ThreadDebugSource[] = sourcesData?.sources ?? [];\n const failureParams = useMemo(\n () => ({\n sourceId,\n ownerEmail: ownerEmail.trim() || undefined,\n status,\n lookbackHours: FAILURE_RANGE_HOURS[range],\n limit: 25,\n }),\n [ownerEmail, range, sourceId, status],\n );\n const {\n data: failuresData,\n isLoading: failuresLoading,\n error: failuresError,\n refetch: refetchFailures,\n } = useActionQuery<AgentRunFailuresResponse>(\n \"list-agent-run-failures\",\n failureParams,\n { enabled: mode === \"failures\" },\n );\n const failures = failuresData?.failures ?? [];\n const unavailableFailureSources = (failuresData?.sources ?? []).filter(\n (source) => source.status !== \"ok\",\n );\n const failureSourceStatusLabels = {\n ok: \"ok\",\n disconnected: t(\"dispatch.pages.threadDebugDisconnected\", {\n defaultValue: \"disconnected\",\n }),\n unsupported: t(\"dispatch.pages.threadDebugUnsupported\", {\n defaultValue: \"unsupported\",\n }),\n unavailable: t(\"dispatch.pages.threadDebugUnavailable\", {\n defaultValue: \"unavailable\",\n }),\n };\n\n const threadSourceId = sourceId === \"all\" ? \"current\" : sourceId;\n const detailSourceId =\n runId && inspectSourceId ? inspectSourceId : threadSourceId;\n const searchParams = useMemo(\n () => ({\n sourceId: threadSourceId,\n query: query.trim() || undefined,\n ownerEmail: ownerEmail.trim() || undefined,\n limit: 25,\n }),\n [ownerEmail, query, threadSourceId],\n );\n const {\n data: searchData,\n isLoading: searchLoading,\n error: searchError,\n refetch: refetchSearch,\n } = useActionQuery<{\n count: number;\n threads: ThreadSearchResult[];\n access: { scope: string; canInspectAll: boolean };\n source: { id: string; label: string };\n }>(\"search-agent-threads\", searchParams, { enabled: mode === \"threads\" });\n const searchThreads: ThreadSearchResult[] = searchData?.threads ?? [];\n\n const detailParams = useMemo(\n () => ({\n sourceId: detailSourceId,\n ...(runId ? { runId } : { threadId }),\n ownerEmail: ownerEmail.trim() || undefined,\n maxRuns: 20,\n maxEvents: 800,\n maxTraceSpans: 600,\n }),\n [detailSourceId, ownerEmail, runId, threadId],\n );\n const {\n data: detail,\n isLoading: detailLoading,\n error: detailError,\n refetch: refetchDetail,\n } = useActionQuery<ThreadDebugResponse>(\n \"get-agent-thread-debug\",\n detailParams,\n {\n enabled: Boolean(runId || threadId),\n },\n );\n\n const selectedSource = sources.find((source) => source.id === threadSourceId);\n const detailPane = (\n <section className=\"min-w-0\">\n {detailError ? (\n <ActionQueryError\n error={detailError}\n onRetry={() => void refetchDetail()}\n />\n ) : null}\n {detailLoading ? (\n <div className=\"rounded-lg bg-card p-4\">\n <Skeleton className=\"h-6 w-72\" />\n <Skeleton className=\"mt-3 h-4 w-96\" />\n <Skeleton className=\"mt-6 h-[520px] w-full\" />\n </div>\n ) : detail ? (\n <ThreadDetail detail={detail} />\n ) : (\n <div className=\"flex min-h-[520px] flex-col items-center justify-center rounded-lg border border-dashed bg-card px-4 text-center text-sm text-muted-foreground\">\n <IconFileSearch className=\"mb-2 size-5\" />\n {t(\"dispatch.pages.threadDebugSelectPrompt\", {\n defaultValue: \"Select a failed run or thread to inspect.\",\n })}\n </div>\n )}\n </section>\n );\n\n return (\n <DispatchShell\n title={t(\"dispatch.pages.threadDebugTitle\", {\n defaultValue: \"Thread Debug\",\n })}\n description={t(\"dispatch.pages.threadDebugDescription\", {\n defaultValue:\n \"Inspect failed agent runs, persisted threads, run events, and AI internals.\",\n })}\n >\n <div className=\"space-y-4\">\n {sourcesQuery.isError ? (\n <ActionQueryError\n error={sourcesQuery.error}\n onRetry={() => void sourcesQuery.refetch()}\n />\n ) : null}\n <Tabs\n value={mode}\n onValueChange={(value) => {\n const nextMode = parseMode(value);\n updateRouteState({\n mode: nextMode,\n source:\n nextMode === \"threads\" && sourceId === \"all\"\n ? \"current\"\n : sourceId,\n runId: null,\n threadId: null,\n inspectSource: null,\n });\n }}\n >\n <TabsList>\n <TabsTrigger value=\"failures\">\n {t(\"dispatch.pages.threadDebugFailedRuns\", {\n defaultValue: \"Failed runs\",\n })}\n </TabsTrigger>\n <TabsTrigger value=\"threads\">\n {t(\"dispatch.pages.threadDebugThreads\", {\n defaultValue: \"Threads\",\n })}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"failures\" className=\"mt-4 space-y-4\">\n <section className=\"rounded-lg bg-card p-4\">\n <div className=\"grid gap-3 md:grid-cols-2 xl:grid-cols-[220px_1fr_180px_150px]\">\n <Select\n value={sourceId}\n onValueChange={(value) =>\n updateRouteState({\n source: value,\n runId: null,\n threadId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugSource\", {\n defaultValue: \"Source\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">\n {t(\"dispatch.pages.threadDebugAllSources\", {\n defaultValue: \"All sources\",\n })}\n </SelectItem>\n {sources.map((source) => (\n <SelectItem key={source.id} value={source.id}>\n {source.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n value={ownerEmail}\n onChange={(event) =>\n updateRouteState({ owner: event.target.value })\n }\n placeholder={t(\"dispatch.pages.threadDebugOwner\", {\n defaultValue: \"Owner email\",\n })}\n />\n <Select\n value={status}\n onValueChange={(value) =>\n updateRouteState({\n status: parseFailureStatus(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugStatus\", {\n defaultValue: \"Status\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">\n {t(\"dispatch.pages.threadDebugAllStatuses\", {\n defaultValue: \"All statuses\",\n })}\n </SelectItem>\n <SelectItem value=\"errored\">\n {t(\"dispatch.pages.threadDebugErrored\", {\n defaultValue: \"Errored\",\n })}\n </SelectItem>\n <SelectItem value=\"aborted\">\n {t(\"dispatch.pages.threadDebugAborted\", {\n defaultValue: \"Aborted\",\n })}\n </SelectItem>\n <SelectItem value=\"truncated\">\n {t(\"dispatch.pages.threadDebugTruncated\", {\n defaultValue: \"Truncated\",\n })}\n </SelectItem>\n </SelectContent>\n </Select>\n <Select\n value={range}\n onValueChange={(value) =>\n updateRouteState({\n range: parseFailureRange(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugRange\", {\n defaultValue: \"Time range\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"24h\">\n {t(\"dispatch.pages.threadDebugRange24h\", {\n defaultValue: \"Last 24 hours\",\n })}\n </SelectItem>\n <SelectItem value=\"7d\">\n {t(\"dispatch.pages.threadDebugRange7d\", {\n defaultValue: \"Last 7 days\",\n })}\n </SelectItem>\n <SelectItem value=\"30d\">\n {t(\"dispatch.pages.threadDebugRange30d\", {\n defaultValue: \"Last 30 days\",\n })}\n </SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n <span>\n {failuresData?.count ?? failures.length}{\" \"}\n {t(\"dispatch.pages.threadDebugFailureResults\", {\n defaultValue: \"failed runs\",\n })}\n </span>\n <span>·</span>\n <span>\n {failuresData?.access?.scope ??\n t(\"dispatch.pages.threadDebugCurrentScope\", {\n defaultValue: \"current scope\",\n })}\n </span>\n {failuresData?.partial ? (\n <Badge variant=\"outline\">\n {t(\"dispatch.pages.threadDebugPartialResults\", {\n defaultValue: \"Partial results\",\n })}\n </Badge>\n ) : null}\n </div>\n {unavailableFailureSources.length > 0 ? (\n <div className=\"mt-2 flex items-start gap-1.5 text-xs text-muted-foreground\">\n <IconAlertTriangle className=\"mt-0.5 size-3.5 shrink-0\" />\n <span>\n {t(\"dispatch.pages.threadDebugUnavailableSources\", {\n defaultValue: \"Unavailable sources:\",\n })}{\" \"}\n {unavailableFailureSources\n .map(\n ({ source, status: sourceStatus }) =>\n `${source.label} (${failureSourceStatusLabels[sourceStatus]})`,\n )\n .join(\", \")}\n </span>\n </div>\n ) : null}\n </section>\n\n {failuresError ? (\n <ActionQueryError\n error={failuresError}\n onRetry={() => void refetchFailures()}\n />\n ) : null}\n\n <div className=\"grid gap-4 xl:grid-cols-[380px_1fr]\">\n <section className=\"min-h-[520px] rounded-lg bg-card\">\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div className=\"text-sm font-semibold text-foreground\">\n {t(\"dispatch.pages.threadDebugFailedRuns\", {\n defaultValue: \"Failed runs\",\n })}\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => void refetchFailures()}\n aria-label={t(\"dispatch.pages.threadDebugRefreshFailures\", {\n defaultValue: \"Refresh failed runs\",\n })}\n >\n <IconRefresh className=\"size-4\" />\n </Button>\n </div>\n <div className=\"max-h-[760px] space-y-2 overflow-auto p-3\">\n {failuresLoading ? (\n <>\n <Skeleton className=\"h-32 w-full rounded-lg\" />\n <Skeleton className=\"h-32 w-full rounded-lg\" />\n <Skeleton className=\"h-32 w-full rounded-lg\" />\n </>\n ) : null}\n {!failuresLoading && failures.length === 0 ? (\n <div className=\"flex min-h-64 flex-col items-center justify-center rounded-lg border border-dashed px-4 text-center text-sm text-muted-foreground\">\n <IconDatabase className=\"mb-2 size-5\" />\n {t(\"dispatch.pages.threadDebugNoFailures\", {\n defaultValue: \"No failed runs found.\",\n })}\n </div>\n ) : null}\n {failures.map((failure) => (\n <FailureCard\n key={`${failureSourceId(failure)}:${failure.id}`}\n failure={failure}\n selected={\n runId === failure.id &&\n detailSourceId === failureSourceId(failure)\n }\n onSelect={() =>\n updateRouteState({\n inspectSource: failureSourceId(failure),\n runId: failure.id,\n threadId: null,\n })\n }\n />\n ))}\n </div>\n </section>\n {detailPane}\n </div>\n </TabsContent>\n\n <TabsContent value=\"threads\" className=\"mt-4 space-y-4\">\n <section className=\"rounded-lg bg-card p-4\">\n <div className=\"grid gap-3 lg:grid-cols-[220px_1fr_260px_auto]\">\n <Select\n value={threadSourceId}\n onValueChange={(value) =>\n updateRouteState({\n source: value,\n runId: null,\n threadId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugSource\", {\n defaultValue: \"Source\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n {sources.map((source) => (\n <SelectItem key={source.id} value={source.id}>\n {source.label}\n </SelectItem>\n ))}\n {sources.length === 0 ? (\n <SelectItem value=\"current\">\n {t(\"dispatch.pages.threadDebugCurrentDatabase\", {\n defaultValue: \"Current Dispatch DB\",\n })}\n </SelectItem>\n ) : null}\n </SelectContent>\n </Select>\n <Input\n value={query}\n onChange={(event) =>\n updateRouteState({ query: event.target.value })\n }\n placeholder={t(\n \"dispatch.pages.threadDebugSearchPlaceholder\",\n {\n defaultValue: \"Search title, preview, messages, tools\",\n },\n )}\n />\n <Input\n value={ownerEmail}\n onChange={(event) =>\n updateRouteState({ owner: event.target.value })\n }\n placeholder={t(\"dispatch.pages.threadDebugOwner\", {\n defaultValue: \"Owner email\",\n })}\n />\n <Button type=\"button\" onClick={() => void refetchSearch()}>\n <IconSearch className=\"size-4\" />\n {t(\"dispatch.pages.threadDebugSearch\", {\n defaultValue: \"Search\",\n })}\n </Button>\n </div>\n\n <div className=\"mt-3 grid gap-3 lg:grid-cols-[1fr_auto]\">\n <Input\n value={lookupId}\n onChange={(event) => setLookupId(event.target.value)}\n placeholder={t(\n \"dispatch.pages.threadDebugLookupPlaceholder\",\n {\n defaultValue: \"Paste thread or request/run ID\",\n },\n )}\n className=\"font-mono\"\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n const trimmed = lookupId.trim();\n if (!trimmed) return;\n updateRouteState(\n trimmed.startsWith(\"run-\")\n ? {\n runId: trimmed,\n threadId: null,\n inspectSource: null,\n }\n : {\n threadId: trimmed,\n runId: null,\n inspectSource: null,\n },\n );\n }}\n >\n <IconFileSearch className=\"size-4\" />\n {t(\"dispatch.pages.threadDebugInspect\", {\n defaultValue: \"Inspect\",\n })}\n </Button>\n </div>\n\n <div className=\"mt-3 flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n {sourcesLoading ? <Skeleton className=\"h-5 w-32\" /> : null}\n {selectedSource ? (\n <SourceBadge source={selectedSource} />\n ) : null}\n {selectedSource?.databaseUrlEnv ? (\n <Badge variant=\"outline\" className=\"font-mono\">\n {selectedSource.databaseUrlEnv}\n </Badge>\n ) : null}\n {sourcesData?.access ? (\n <span>\n {sourcesData.access.viewerEmail} ·{\" \"}\n {sourcesData.access.canInspectAll\n ? t(\"dispatch.pages.threadDebugAdminScope\", {\n defaultValue: \"admin scope\",\n })\n : t(\"dispatch.pages.threadDebugOwnScope\", {\n defaultValue: \"own scope\",\n })}\n </span>\n ) : null}\n </div>\n </section>\n\n {searchError ? (\n <ActionQueryError\n error={searchError}\n onRetry={() => void refetchSearch()}\n />\n ) : null}\n\n <div className=\"grid gap-4 xl:grid-cols-[380px_1fr]\">\n <section className=\"min-h-[520px] rounded-lg bg-card\">\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div>\n <div className=\"text-sm font-semibold text-foreground\">\n {t(\"dispatch.pages.threadDebugThreads\", {\n defaultValue: \"Threads\",\n })}\n </div>\n <div className=\"text-xs text-muted-foreground\">\n {searchData?.count ?? 0}{\" \"}\n {t(\"dispatch.pages.threadDebugResults\", {\n defaultValue: \"results\",\n })}{\" \"}\n ·{\" \"}\n {searchData?.access?.scope ??\n t(\"dispatch.pages.threadDebugCurrentScope\", {\n defaultValue: \"current scope\",\n })}\n </div>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => void refetchSearch()}\n aria-label={t(\"dispatch.pages.threadDebugRefreshThreads\", {\n defaultValue: \"Refresh threads\",\n })}\n >\n <IconRefresh className=\"size-4\" />\n </Button>\n </div>\n <div className=\"max-h-[760px] space-y-2 overflow-auto p-3\">\n {searchLoading ? (\n <>\n <Skeleton className=\"h-28 w-full rounded-lg\" />\n <Skeleton className=\"h-28 w-full rounded-lg\" />\n <Skeleton className=\"h-28 w-full rounded-lg\" />\n </>\n ) : null}\n {!searchLoading && searchThreads.length === 0 ? (\n <div className=\"flex min-h-64 flex-col items-center justify-center rounded-lg border border-dashed px-4 text-center text-sm text-muted-foreground\">\n <IconDatabase className=\"mb-2 size-5\" />\n {t(\"dispatch.pages.threadDebugNoThreads\", {\n defaultValue: \"No threads found.\",\n })}\n </div>\n ) : null}\n {searchThreads.map((result) => (\n <ResultCard\n key={result.id}\n result={result}\n selected={threadId === result.id}\n onSelect={() =>\n updateRouteState({\n threadId: result.id,\n runId: null,\n inspectSource: null,\n })\n }\n />\n ))}\n </div>\n </section>\n {detailPane}\n </div>\n </TabsContent>\n </Tabs>\n </div>\n </DispatchShell>\n );\n}\n"]}
|
|
@@ -16,6 +16,9 @@ export interface DebugAccess {
|
|
|
16
16
|
canInspectAll: boolean;
|
|
17
17
|
memberEmails: string[];
|
|
18
18
|
}
|
|
19
|
+
declare const UNSUCCESSFUL_RUN_STATUSES: readonly ["errored", "aborted", "truncated"];
|
|
20
|
+
export type AgentRunFailureStatus = (typeof UNSUCCESSFUL_RUN_STATUSES)[number];
|
|
21
|
+
type ThreadDebugSourceHealthStatus = "ok" | "disconnected" | "unsupported" | "unavailable";
|
|
19
22
|
export declare function listThreadDebugSources(): Promise<{
|
|
20
23
|
access: Omit<DebugAccess, "memberEmails" | "envAdmin"> & {
|
|
21
24
|
envAdmin: boolean;
|
|
@@ -23,6 +26,65 @@ export declare function listThreadDebugSources(): Promise<{
|
|
|
23
26
|
};
|
|
24
27
|
sources: ThreadDebugSource[];
|
|
25
28
|
}>;
|
|
29
|
+
export declare function listAgentRunFailures(input: {
|
|
30
|
+
sourceId?: string;
|
|
31
|
+
ownerEmail?: string;
|
|
32
|
+
status?: AgentRunFailureStatus | "all";
|
|
33
|
+
lookbackHours?: number;
|
|
34
|
+
limit?: number;
|
|
35
|
+
}): Promise<{
|
|
36
|
+
sourceId: string;
|
|
37
|
+
status: "aborted" | "all" | "errored" | "truncated";
|
|
38
|
+
lookbackHours: number;
|
|
39
|
+
limit: number;
|
|
40
|
+
count: number;
|
|
41
|
+
partial: boolean;
|
|
42
|
+
access: {
|
|
43
|
+
viewerEmail: string;
|
|
44
|
+
scope: string;
|
|
45
|
+
canInspectAll: boolean;
|
|
46
|
+
};
|
|
47
|
+
sources: {
|
|
48
|
+
source: {
|
|
49
|
+
id: string;
|
|
50
|
+
label: string;
|
|
51
|
+
kind: "configured" | "current" | "env";
|
|
52
|
+
databaseUrlEnv: string | null;
|
|
53
|
+
};
|
|
54
|
+
status: ThreadDebugSourceHealthStatus;
|
|
55
|
+
failureCount: number;
|
|
56
|
+
errorCode: "thread_debug_schema_unsupported" | "thread_debug_source_disconnected" | "thread_debug_source_unavailable" | null;
|
|
57
|
+
}[];
|
|
58
|
+
failures: {
|
|
59
|
+
source: {
|
|
60
|
+
id: string;
|
|
61
|
+
label: string;
|
|
62
|
+
kind: "configured" | "current" | "env";
|
|
63
|
+
databaseUrlEnv: string | null;
|
|
64
|
+
};
|
|
65
|
+
id: string;
|
|
66
|
+
threadId: string;
|
|
67
|
+
turnId: string | null;
|
|
68
|
+
ownerEmail: string;
|
|
69
|
+
threadTitle: string;
|
|
70
|
+
threadPreview: string;
|
|
71
|
+
status: AgentRunFailureStatus;
|
|
72
|
+
abortReason: string | null;
|
|
73
|
+
errorCode: string | null;
|
|
74
|
+
errorDetail: string | null;
|
|
75
|
+
terminalReason: string | null;
|
|
76
|
+
startedAt: number;
|
|
77
|
+
completedAt: number | null;
|
|
78
|
+
heartbeatAt: number | null;
|
|
79
|
+
lastProgressAt: number | null;
|
|
80
|
+
durationMs: number | null;
|
|
81
|
+
dispatchMode: string | null;
|
|
82
|
+
workerStage: string | null;
|
|
83
|
+
diagStage: string | null;
|
|
84
|
+
peakRssMb: number | null;
|
|
85
|
+
terminalEvent: Record<string, unknown> | null;
|
|
86
|
+
}[];
|
|
87
|
+
}>;
|
|
26
88
|
export declare function searchAgentThreads(input: {
|
|
27
89
|
sourceId?: string;
|
|
28
90
|
query?: string;
|
|
@@ -96,11 +158,20 @@ export declare function getAgentThreadDebug(input: {
|
|
|
96
158
|
runs: {
|
|
97
159
|
id: string;
|
|
98
160
|
threadId: string;
|
|
161
|
+
turnId: string | null;
|
|
99
162
|
status: string;
|
|
100
163
|
abortReason: string | null;
|
|
164
|
+
errorCode: string | null;
|
|
165
|
+
errorDetail: string | null;
|
|
166
|
+
terminalReason: string | null;
|
|
101
167
|
startedAt: number;
|
|
102
168
|
completedAt: number | null;
|
|
103
169
|
heartbeatAt: number | null;
|
|
170
|
+
lastProgressAt: number | null;
|
|
171
|
+
dispatchMode: string | null;
|
|
172
|
+
workerStage: string | null;
|
|
173
|
+
diagStage: string | null;
|
|
174
|
+
peakRssMb: number | null;
|
|
104
175
|
events: any[];
|
|
105
176
|
}[];
|
|
106
177
|
traces: {
|
|
@@ -112,4 +183,5 @@ export declare function getAgentThreadDebug(input: {
|
|
|
112
183
|
evals: Record<string, unknown>[];
|
|
113
184
|
checkpoints: Record<string, unknown>[];
|
|
114
185
|
}>;
|
|
186
|
+
export {};
|
|
115
187
|
//# sourceMappingURL=thread-debug-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread-debug-store.d.ts","sourceRoot":"","sources":["../../../src/server/lib/thread-debug-store.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,YAAY,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"thread-debug-store.d.ts","sourceRoot":"","sources":["../../../src/server/lib/thread-debug-store.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,YAAY,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAwCD,QAAA,MAAM,yBAAyB,YAAI,SAAS,EAAE,SAAS,EAAE,WAAW,CAAU,CAAC;AAE/E,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/E,KAAK,6BAA6B,GAC9B,IAAI,GACJ,cAAc,GACd,aAAa,GACb,aAAa,CAAC;AA6flB,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IACtD,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,UAAU,CAAC,GAAG;QACvD,QAAQ,EAAE,OAAO,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B,CAAC,CAsBD;AA+GD,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,qBAAqB,GAAG,KAAK,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;;;;;;QA8FK,WAAW;QACX,KAAK;QACL,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;gBAhLe,qBAAqB;;;;;;;;;;;;;;;;GAqLtD;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;QAmDK,EAAE;QACF,KAAK;QACL,IAAI;QACJ,cAAc;;;QAGd,WAAW;QACX,KAAK;QACL,aAAa;;;;;;;;;;;;;;GAMlB;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;;QAwKK,EAAE;QACF,KAAK;QACL,IAAI;QACJ,cAAc;;;QAGd,WAAW;QACX,KAAK;QACL,aAAa;;;QAGb,EAAE;QACF,UAAU;QACV,KAAK;QACL,OAAO;QACP,YAAY;QACZ,SAAS;QACT,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiBT,SAAS;QACT,KAAK;;;;;;GAOV"}
|