@agent-native/dispatch 0.23.5 → 0.24.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/actions/list-connected-agents.d.ts +1 -0
  2. package/dist/actions/list-connected-agents.js +5 -1
  3. package/dist/actions/list-connected-agents.js.map +1 -1
  4. package/dist/actions/list-dispatch-usage-metrics.d.ts +2 -0
  5. package/dist/actions/list-dispatch-usage-metrics.js +11 -1
  6. package/dist/actions/list-dispatch-usage-metrics.js.map +1 -1
  7. package/dist/actions/provider-api-register.d.ts +12 -12
  8. package/dist/actions/remix-workspace-template.js +4 -3
  9. package/dist/actions/remix-workspace-template.js.map +1 -1
  10. package/dist/actions/scaffold-workspace-app.js +3 -2
  11. package/dist/actions/scaffold-workspace-app.js.map +1 -1
  12. package/dist/actions/start-workspace-app-creation.js +3 -2
  13. package/dist/actions/start-workspace-app-creation.js.map +1 -1
  14. package/dist/actions/view-screen.js +11 -1
  15. package/dist/actions/view-screen.js.map +1 -1
  16. package/dist/components/admin-navigation.d.ts.map +1 -1
  17. package/dist/components/admin-navigation.js +21 -5
  18. package/dist/components/admin-navigation.js.map +1 -1
  19. package/dist/components/app-icon.js +1 -1
  20. package/dist/components/app-icon.js.map +1 -1
  21. package/dist/components/app-list-row.d.ts +1 -1
  22. package/dist/components/app-list-row.d.ts.map +1 -1
  23. package/dist/components/app-list-row.js +1 -1
  24. package/dist/components/app-list-row.js.map +1 -1
  25. package/dist/components/app-open-actions.d.ts +1 -17
  26. package/dist/components/app-open-actions.d.ts.map +1 -1
  27. package/dist/components/app-open-actions.js +1 -20
  28. package/dist/components/app-open-actions.js.map +1 -1
  29. package/dist/components/app-row-settings.d.ts +6 -0
  30. package/dist/components/app-row-settings.d.ts.map +1 -0
  31. package/dist/components/app-row-settings.js +11 -0
  32. package/dist/components/app-row-settings.js.map +1 -0
  33. package/dist/components/automation-run-history-dialog.d.ts.map +1 -1
  34. package/dist/components/automation-run-history-dialog.js +3 -2
  35. package/dist/components/automation-run-history-dialog.js.map +1 -1
  36. package/dist/components/connected-app-card.d.ts.map +1 -1
  37. package/dist/components/connected-app-card.js +3 -2
  38. package/dist/components/connected-app-card.js.map +1 -1
  39. package/dist/components/create-app-popover.js +2 -2
  40. package/dist/components/create-app-popover.js.map +1 -1
  41. package/dist/components/dispatch-control-plane.d.ts.map +1 -1
  42. package/dist/components/dispatch-control-plane.js +23 -7
  43. package/dist/components/dispatch-control-plane.js.map +1 -1
  44. package/dist/components/dispatch-shell.d.ts.map +1 -1
  45. package/dist/components/dispatch-shell.js +5 -1
  46. package/dist/components/dispatch-shell.js.map +1 -1
  47. package/dist/components/docs-link.d.ts +16 -0
  48. package/dist/components/docs-link.d.ts.map +1 -0
  49. package/dist/components/docs-link.js +34 -0
  50. package/dist/components/docs-link.js.map +1 -0
  51. package/dist/components/layout/Layout.d.ts +1 -0
  52. package/dist/components/layout/Layout.d.ts.map +1 -1
  53. package/dist/components/layout/Layout.js +43 -35
  54. package/dist/components/layout/Layout.js.map +1 -1
  55. package/dist/components/messaging-setup-panel.d.ts.map +1 -1
  56. package/dist/components/messaging-setup-panel.js +3 -2
  57. package/dist/components/messaging-setup-panel.js.map +1 -1
  58. package/dist/components/usage-alerts-panel.d.ts +11 -0
  59. package/dist/components/usage-alerts-panel.d.ts.map +1 -0
  60. package/dist/components/usage-alerts-panel.js +125 -0
  61. package/dist/components/usage-alerts-panel.js.map +1 -0
  62. package/dist/components/workspace-app-card.d.ts +3 -1
  63. package/dist/components/workspace-app-card.d.ts.map +1 -1
  64. package/dist/components/workspace-app-card.js +70 -29
  65. package/dist/components/workspace-app-card.js.map +1 -1
  66. package/dist/components/workspace-app-search.d.ts +10 -0
  67. package/dist/components/workspace-app-search.d.ts.map +1 -0
  68. package/dist/components/workspace-app-search.js +27 -0
  69. package/dist/components/workspace-app-search.js.map +1 -0
  70. package/dist/components/workspace-resource-effective-stack.d.ts.map +1 -1
  71. package/dist/components/workspace-resource-effective-stack.js +3 -2
  72. package/dist/components/workspace-resource-effective-stack.js.map +1 -1
  73. package/dist/components/workspace-template-card.d.ts.map +1 -1
  74. package/dist/components/workspace-template-card.js +10 -15
  75. package/dist/components/workspace-template-card.js.map +1 -1
  76. package/dist/hooks/use-navigation-state.d.ts +2 -0
  77. package/dist/hooks/use-navigation-state.d.ts.map +1 -1
  78. package/dist/hooks/use-navigation-state.js +10 -0
  79. package/dist/hooks/use-navigation-state.js.map +1 -1
  80. package/dist/lib/embed-session-recovery.d.ts +3 -0
  81. package/dist/lib/embed-session-recovery.d.ts.map +1 -0
  82. package/dist/lib/embed-session-recovery.js +18 -0
  83. package/dist/lib/embed-session-recovery.js.map +1 -0
  84. package/dist/lib/other-apps.d.ts +2 -0
  85. package/dist/lib/other-apps.d.ts.map +1 -1
  86. package/dist/lib/other-apps.js.map +1 -1
  87. package/dist/lib/workspace-app-layout.d.ts +19 -0
  88. package/dist/lib/workspace-app-layout.d.ts.map +1 -0
  89. package/dist/lib/workspace-app-layout.js +75 -0
  90. package/dist/lib/workspace-app-layout.js.map +1 -0
  91. package/dist/lib/workspace-apps.d.ts +14 -0
  92. package/dist/lib/workspace-apps.d.ts.map +1 -1
  93. package/dist/lib/workspace-apps.js +66 -0
  94. package/dist/lib/workspace-apps.js.map +1 -1
  95. package/dist/lib/workspace-apps.test.d.ts +2 -0
  96. package/dist/lib/workspace-apps.test.d.ts.map +1 -0
  97. package/dist/lib/workspace-apps.test.js +33 -0
  98. package/dist/lib/workspace-apps.test.js.map +1 -0
  99. package/dist/routes/pages/$appId.d.ts.map +1 -1
  100. package/dist/routes/pages/$appId.js +4 -2
  101. package/dist/routes/pages/$appId.js.map +1 -1
  102. package/dist/routes/pages/agents.d.ts.map +1 -1
  103. package/dist/routes/pages/agents.js +2 -3
  104. package/dist/routes/pages/agents.js.map +1 -1
  105. package/dist/routes/pages/apps.$appId.d.ts.map +1 -1
  106. package/dist/routes/pages/apps.$appId.js +17 -13
  107. package/dist/routes/pages/apps.$appId.js.map +1 -1
  108. package/dist/routes/pages/apps.d.ts.map +1 -1
  109. package/dist/routes/pages/apps.js +31 -16
  110. package/dist/routes/pages/apps.js.map +1 -1
  111. package/dist/routes/pages/audit.d.ts.map +1 -1
  112. package/dist/routes/pages/audit.js +2 -1
  113. package/dist/routes/pages/audit.js.map +1 -1
  114. package/dist/routes/pages/chat.d.ts.map +1 -1
  115. package/dist/routes/pages/chat.js +7 -2
  116. package/dist/routes/pages/chat.js.map +1 -1
  117. package/dist/routes/pages/dreams.d.ts.map +1 -1
  118. package/dist/routes/pages/dreams.js +14 -18
  119. package/dist/routes/pages/dreams.js.map +1 -1
  120. package/dist/routes/pages/integrations.d.ts.map +1 -1
  121. package/dist/routes/pages/integrations.js +51 -14
  122. package/dist/routes/pages/integrations.js.map +1 -1
  123. package/dist/routes/pages/metrics.d.ts.map +1 -1
  124. package/dist/routes/pages/metrics.js +146 -17
  125. package/dist/routes/pages/metrics.js.map +1 -1
  126. package/dist/routes/pages/operations.js +1 -1
  127. package/dist/routes/pages/operations.js.map +1 -1
  128. package/dist/routes/pages/settings.d.ts.map +1 -1
  129. package/dist/routes/pages/settings.js +19 -2
  130. package/dist/routes/pages/settings.js.map +1 -1
  131. package/dist/routes/pages/thread-debug.d.ts.map +1 -1
  132. package/dist/routes/pages/thread-debug.js +5 -8
  133. package/dist/routes/pages/thread-debug.js.map +1 -1
  134. package/dist/routes/pages/vault.d.ts.map +1 -1
  135. package/dist/routes/pages/vault.js +1 -1
  136. package/dist/routes/pages/vault.js.map +1 -1
  137. package/dist/routes/pages/workspace.d.ts.map +1 -1
  138. package/dist/routes/pages/workspace.js +13 -10
  139. package/dist/routes/pages/workspace.js.map +1 -1
  140. package/dist/server/index.d.ts.map +1 -1
  141. package/dist/server/index.js +3 -0
  142. package/dist/server/index.js.map +1 -1
  143. package/dist/server/lib/app-creation-store.d.ts.map +1 -1
  144. package/dist/server/lib/app-creation-store.js +12 -52
  145. package/dist/server/lib/app-creation-store.js.map +1 -1
  146. package/dist/server/lib/usage-metrics-store.d.ts +17 -0
  147. package/dist/server/lib/usage-metrics-store.d.ts.map +1 -1
  148. package/dist/server/lib/usage-metrics-store.js +187 -30
  149. package/dist/server/lib/usage-metrics-store.js.map +1 -1
  150. package/dist/server/plugins/agent-chat.js +2 -0
  151. package/dist/server/plugins/agent-chat.js.map +1 -1
  152. package/dist/server/plugins/integrations.d.ts.map +1 -1
  153. package/dist/server/plugins/integrations.js +1 -0
  154. package/dist/server/plugins/integrations.js.map +1 -1
  155. package/dist/shared/app-roles.d.ts +9 -0
  156. package/dist/shared/app-roles.d.ts.map +1 -0
  157. package/dist/shared/app-roles.js +7 -0
  158. package/dist/shared/app-roles.js.map +1 -0
  159. package/package.json +4 -3
  160. package/src/actions/list-connected-agents.spec.ts +73 -0
  161. package/src/actions/list-connected-agents.ts +6 -2
  162. package/src/actions/list-dispatch-usage-metrics.ts +11 -1
  163. package/src/actions/remix-workspace-template.spec.ts +29 -0
  164. package/src/actions/remix-workspace-template.ts +13 -6
  165. package/src/actions/scaffold-workspace-app.ts +12 -5
  166. package/src/actions/start-workspace-app-creation.ts +8 -2
  167. package/src/actions/view-screen.ts +13 -1
  168. package/src/components/admin-navigation.tsx +57 -11
  169. package/src/components/app-icon.spec.tsx +34 -0
  170. package/src/components/app-icon.tsx +1 -1
  171. package/src/components/app-list-row.tsx +1 -2
  172. package/src/components/app-open-actions.tsx +5 -114
  173. package/src/components/app-row-settings.tsx +54 -0
  174. package/src/components/automation-run-history-dialog.tsx +8 -4
  175. package/src/components/connected-app-card.tsx +3 -2
  176. package/src/components/create-app-popover.spec.tsx +1 -1
  177. package/src/components/create-app-popover.tsx +2 -2
  178. package/src/components/dispatch-control-plane.spec.tsx +44 -3
  179. package/src/components/dispatch-control-plane.tsx +83 -27
  180. package/src/components/dispatch-shell.tsx +7 -1
  181. package/src/components/docs-link.tsx +52 -0
  182. package/src/components/layout/Layout.spec.tsx +13 -0
  183. package/src/components/layout/Layout.tsx +63 -32
  184. package/src/components/messaging-setup-panel.tsx +10 -3
  185. package/src/components/usage-alerts-panel.tsx +445 -0
  186. package/src/components/workspace-app-card.spec.tsx +130 -9
  187. package/src/components/workspace-app-card.tsx +128 -71
  188. package/src/components/workspace-app-search.tsx +96 -0
  189. package/src/components/workspace-resource-effective-stack.tsx +10 -5
  190. package/src/components/workspace-template-card.spec.tsx +53 -24
  191. package/src/components/workspace-template-card.tsx +16 -26
  192. package/src/hooks/use-navigation-state.ts +12 -0
  193. package/src/lib/embed-session-recovery.spec.ts +63 -0
  194. package/src/lib/embed-session-recovery.ts +26 -0
  195. package/src/lib/other-apps.ts +2 -0
  196. package/src/lib/workspace-app-layout.spec.ts +47 -0
  197. package/src/lib/workspace-app-layout.ts +121 -0
  198. package/src/lib/workspace-apps.test.ts +64 -0
  199. package/src/lib/workspace-apps.ts +82 -0
  200. package/src/routes/pages/$appId.tsx +3 -6
  201. package/src/routes/pages/agents.tsx +6 -3
  202. package/src/routes/pages/apps.$appId.tsx +16 -17
  203. package/src/routes/pages/apps.tsx +116 -62
  204. package/src/routes/pages/audit.tsx +28 -8
  205. package/src/routes/pages/chat.spec.tsx +10 -0
  206. package/src/routes/pages/chat.tsx +8 -0
  207. package/src/routes/pages/dreams.tsx +92 -142
  208. package/src/routes/pages/integrations.tsx +147 -68
  209. package/src/routes/pages/metrics.tsx +460 -102
  210. package/src/routes/pages/operations.tsx +2 -2
  211. package/src/routes/pages/settings.tsx +27 -10
  212. package/src/routes/pages/thread-debug.tsx +18 -36
  213. package/src/routes/pages/vault.tsx +7 -2
  214. package/src/routes/pages/workspace.tsx +92 -56
  215. package/src/server/index.ts +4 -0
  216. package/src/server/lib/app-creation-store.spec.ts +90 -43
  217. package/src/server/lib/app-creation-store.ts +15 -61
  218. package/src/server/lib/usage-metrics-store.spec.ts +117 -0
  219. package/src/server/lib/usage-metrics-store.ts +249 -30
  220. package/src/server/plugins/agent-chat.spec.ts +4 -0
  221. package/src/server/plugins/agent-chat.ts +2 -0
  222. package/src/server/plugins/integrations.ts +1 -0
  223. package/src/shared/app-roles.ts +8 -0
  224. package/src/styles/dispatch.css +9 -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 IconActivity,\n IconAdjustmentsHorizontal,\n IconAlertTriangle,\n IconCopy,\n IconDatabase,\n IconFileSearch,\n IconInfoCircle,\n IconRefresh,\n IconSearch,\n IconTool,\n} from \"@tabler/icons-react\";\nimport { useMemo, useState } from \"react\";\nimport { useSearchParams } from \"react-router\";\n\nimport { ActionQueryError } from \"../../components/action-query-error\";\nimport { DispatchShell } from \"../../components/dispatch-shell\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { Input } from \"../../components/ui/input\";\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n} from \"../../components/ui/popover\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport { Skeleton } from \"../../components/ui/skeleton\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../components/ui/tabs\";\nimport { cn } from \"../../lib/utils\";\n\nexport function meta() {\n return [{ title: \"Thread Debug — Dispatch\" }];\n}\n\ninterface ThreadDebugSource {\n id: string;\n label: string;\n kind: \"current\" | \"env\" | \"configured\";\n current: boolean;\n connected: boolean;\n databaseUrlEnv: string | null;\n databaseAuthTokenEnv: string | null;\n canInspectAll: boolean;\n}\n\ninterface ThreadSearchResult {\n id: string;\n ownerEmail: string;\n title: string;\n preview: string;\n messageCount: number;\n createdAt: number;\n updatedAt: number;\n snippet: string;\n}\n\ninterface ThreadMessage {\n index: number;\n id: string | null;\n role: string;\n createdAt: string | number | null;\n status: unknown;\n text: string;\n contentParts: any[];\n attachments: any[];\n metadata: unknown;\n}\n\ninterface ThreadRun {\n id: string;\n status: string;\n turnId?: string | null;\n abortReason: string | null;\n errorCode?: string | null;\n errorDetail?: string | null;\n terminalReason?: string | null;\n dispatchMode?: string | null;\n diagStage?: string | null;\n workerStage?: string | null;\n startedAt: number;\n completedAt: number | null;\n heartbeatAt: number | null;\n lastProgressAt?: number | null;\n durationMs?: number | null;\n peakRssMb?: number | null;\n inFlightSince?: number | null;\n hasDispatchPayload?: boolean;\n events: Array<{ seq: number; event: any; rawEventData: string }>;\n}\n\ntype ThreadDebugMode = \"failures\" | \"threads\";\ntype FailureStatus = \"all\" | \"errored\" | \"aborted\" | \"truncated\";\ntype FailureRegime = \"all\" | \"interactive\" | \"scheduled\";\ntype FailureRange = \"24h\" | \"7d\" | \"30d\";\n\ninterface FailureTaxonomy {\n code: string;\n label: string;\n regime: \"interactive\" | \"scheduled\";\n source: \"error_code\" | \"error_detail\" | \"unknown\";\n}\n\ninterface RunFailureLike {\n id?: string;\n status?: string | null;\n errorCode?: string | null;\n errorDetail?: string | null;\n terminalReason?: string | null;\n abortReason?: string | null;\n dispatchMode?: string | null;\n diagStage?: string | null;\n workerStage?: string | null;\n durationMs?: number | null;\n heartbeatAt?: number | null;\n lastProgressAt?: number | null;\n}\n\ninterface AgentRunFailure {\n id: string;\n threadId: string;\n sourceId?: string;\n sourceLabel?: string;\n source?: {\n id: string;\n label: string;\n kind?: string;\n databaseUrlEnv?: string | null;\n };\n ownerEmail: string;\n turnId?: string | null;\n threadTitle: string;\n threadPreview: string;\n status: string;\n errorCode: string | null;\n errorDetail: string | null;\n terminalReason: string | null;\n abortReason: string | null;\n heartbeatAt?: number | null;\n lastProgressAt?: number | null;\n dispatchMode: string | null;\n diagStage: string | null;\n workerStage?: string | null;\n startedAt: number;\n completedAt: number | null;\n durationMs: number | null;\n regime?: \"interactive\" | \"scheduled\";\n failureTaxonomy?: FailureTaxonomy;\n}\n\ninterface AgentRunFailuresResponse {\n failures: AgentRunFailure[];\n sources: Array<{\n source: {\n id: string;\n label: string;\n kind?: string;\n databaseUrlEnv?: string | null;\n };\n status: \"ok\" | \"unsupported\" | \"unavailable\" | \"disconnected\";\n failureCount: number;\n errorCode?: string | null;\n }>;\n partial: boolean;\n count?: number;\n access: { viewerEmail: string; scope: string; canInspectAll: boolean };\n filters?: {\n sourceId?: string;\n status?: FailureStatus;\n lookbackHours?: number;\n limit?: number;\n };\n}\n\ninterface ThreadDebugResponse {\n source: {\n id: string;\n label: string;\n kind: string;\n databaseUrlEnv: string | null;\n };\n access: { viewerEmail: string; scope: string; canInspectAll: boolean };\n thread: ThreadSearchResult;\n lookup?: { requestedId: string; threadId: string; runId: string | null };\n messages: ThreadMessage[];\n debug: any;\n debugRuns: any[];\n queuedMessages: any[];\n threadData: any;\n rawThreadData: string;\n runs: ThreadRun[];\n traces: { summaries: any[]; spans: any[] };\n feedback: any[];\n satisfaction: any[];\n evals: any[];\n checkpoints: any[];\n}\n\nconst FAILURE_RANGE_HOURS: Record<FailureRange, number> = {\n \"24h\": 24,\n \"7d\": 7 * 24,\n \"30d\": 30 * 24,\n};\n\nconst EMPTY_FAILURES: AgentRunFailure[] = [];\n\nfunction parseMode(value: string | null): ThreadDebugMode {\n return value === \"threads\" ? \"threads\" : \"failures\";\n}\n\nfunction parseFailureStatus(value: string | null): FailureStatus {\n return value === \"errored\" || value === \"aborted\" || value === \"truncated\"\n ? value\n : \"all\";\n}\n\nfunction parseFailureRegime(value: string | null): FailureRegime {\n return value === \"interactive\" || value === \"scheduled\" ? value : \"all\";\n}\n\nfunction parseFailureRange(value: string | null): FailureRange {\n return value === \"7d\" || value === \"30d\" ? value : \"24h\";\n}\n\nfunction failureSourceId(failure: AgentRunFailure): string {\n return failure.sourceId || failure.source?.id || \"current\";\n}\n\nfunction failureSourceLabel(failure: AgentRunFailure): string {\n return (\n failure.sourceLabel || failure.source?.label || failureSourceId(failure)\n );\n}\n\nfunction isTechnicalIdentifier(value: string): boolean {\n return /^(?:job|run|thread|turn|request|req)-[a-z0-9][a-z0-9_-]*$/i.test(\n value.trim(),\n );\n}\n\nfunction displayListTitle(\n value: string | null | undefined,\n fallbackValue: string | null | undefined,\n fallbackLabel: string,\n): string {\n const candidate = [value, fallbackValue]\n .map((entry) => entry?.trim() || \"\")\n .find((entry) => entry && !isTechnicalIdentifier(entry));\n if (!candidate) return fallbackLabel;\n\n const withoutDate = candidate\n .replace(/\\s+[—-]\\s+\\d{1,2}\\/\\d{1,2}\\/\\d{4}\\s*$/, \"\")\n .trim();\n if (!withoutDate) return fallbackLabel;\n\n if (/^job:/i.test(withoutDate)) {\n return withoutDate\n .replace(/^job:\\s*/i, \"\")\n .replace(/[-_]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .replace(/\\b\\w/g, (character) => character.toUpperCase())\n .trim();\n }\n\n return withoutDate;\n}\n\nfunction formatDate(value: number | string | null | undefined): string {\n if (value == null || value === \"\") return \"n/a\";\n const numeric = Number(value);\n const date = Number.isFinite(numeric) ? new Date(numeric) : new Date(value);\n if (Number.isNaN(date.getTime())) return \"n/a\";\n return date.toLocaleString();\n}\n\nfunction formatRelativeDate(value: number | string | null | undefined): string {\n if (value == null || value === \"\") return \"n/a\";\n const numeric = Number(value);\n const timestamp = Number.isFinite(numeric)\n ? numeric\n : new Date(value).getTime();\n if (!Number.isFinite(timestamp)) return \"n/a\";\n const elapsed = Date.now() - timestamp;\n if (elapsed < 0) return \"in a moment\";\n if (elapsed < 60_000) return \"just now\";\n if (elapsed < 3_600_000) return `${Math.floor(elapsed / 60_000)}m ago`;\n if (elapsed < 86_400_000) return `${Math.floor(elapsed / 3_600_000)}h ago`;\n return `${Math.floor(elapsed / 86_400_000)}d ago`;\n}\n\nfunction formatDuration(value: number | null | undefined): string {\n if (value == null || !Number.isFinite(value)) return \"n/a\";\n if (value < 1_000) return `${Math.round(value)}ms`;\n if (value < 60_000) return `${(value / 1_000).toFixed(1)}s`;\n return `${(value / 60_000).toFixed(1)}m`;\n}\n\nfunction humanizeIdentifier(value: string | null | undefined): string {\n if (!value) return \"Unknown failure\";\n return value\n .replace(/^(error:|failure:)/, \"\")\n .replace(/[_-]+/g, \" \")\n .replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction failureLabel(run: RunFailureLike): string {\n const code = run.errorCode || run.terminalReason || run.abortReason;\n const labels: Record<string, string> = {\n stale_run: \"Worker heartbeat stopped\",\n background_worker_never_started: \"Background worker never started\",\n background_worker_failed: \"Background worker setup failed\",\n builder_gateway_network_error: \"Gateway stream ended early\",\n provider_timeout: \"Provider timed out\",\n provider_network_error: \"Provider connection dropped\",\n provider_config_error: \"Provider configuration rejected\",\n authentication_error: \"Provider authentication failed\",\n overloaded_error: \"Provider was overloaded\",\n \"aborted:user\": \"Stopped by user\",\n };\n return (code && labels[code]) || humanizeIdentifier(code);\n}\n\nfunction runDiagnosis(run: RunFailureLike): {\n title: string;\n summary: string;\n nextStep: string;\n code: string;\n} {\n const code =\n run.errorCode || run.terminalReason || run.abortReason || \"unknown\";\n if (code === \"stale_run\") {\n const workerStarted = run.dispatchMode === \"background-processing\";\n return {\n title: \"Worker stopped reporting\",\n summary: workerStarted\n ? \"The worker claimed this run, then stopped writing heartbeat or progress signals before it finished. This is a liveness failure, not proof that the provider failed.\"\n : \"The run stayed active until liveness recovery closed it. No completed result was recorded, so inspect the handoff and retained evidence before blaming a provider.\",\n nextStep: workerStarted\n ? \"Check the last worker stage and database heartbeat writes.\"\n : \"Check the scheduled background handoff and whether a worker claimed it.\",\n code,\n };\n }\n if (code === \"background_worker_never_started\") {\n return {\n title: \"Background worker never started\",\n summary:\n \"The handoff was acknowledged, but no background worker claimed the run.\",\n nextStep:\n \"Check the background route, authentication, and function logs.\",\n code,\n };\n }\n if (code === \"background_worker_failed\") {\n return {\n title: \"Background worker failed during setup\",\n summary:\n \"The worker claimed the run but stopped before it could start the turn.\",\n nextStep:\n \"Use the recorded setup stage and worker logs to find the first failure.\",\n code,\n };\n }\n if (code === \"builder_gateway_network_error\") {\n return {\n title: \"Gateway stream ended early\",\n summary:\n run.errorDetail ||\n \"The model stream ended before the run emitted a terminal event.\",\n nextStep:\n \"Retry once; if it repeats, inspect gateway and provider transport health.\",\n code,\n };\n }\n if (code === \"aborted:user\") {\n return {\n title: \"Stopped by user\",\n summary: \"This run was explicitly aborted and is not a system failure.\",\n nextStep: \"No recovery action is required.\",\n code,\n };\n }\n return {\n title: failureLabel(run),\n summary:\n run.errorDetail || \"The run ended without a more specific explanation.\",\n nextStep: \"Open the timeline and inspect the last recorded stage or event.\",\n code,\n };\n}\n\nfunction eventType(event: any): string {\n return typeof event?.type === \"string\" ? event.type : \"event\";\n}\n\nfunction eventIsNoise(event: any): boolean {\n return [\n \"thinking\",\n \"text\",\n \"tool_input_delta\",\n \"stream_keepalive\",\n \"activity\",\n ].includes(eventType(event));\n}\n\nfunction summarizeEvents(events: ThreadRun[\"events\"]) {\n const toolNames = new Map<string, number>();\n let toolStarts = 0;\n for (const entry of events) {\n if (eventType(entry.event) !== \"tool_start\") continue;\n toolStarts += 1;\n const name = String(entry.event?.tool ?? \"tool\");\n toolNames.set(name, (toolNames.get(name) ?? 0) + 1);\n }\n return {\n toolStarts,\n toolNames: [...toolNames.entries()],\n meaningful: events.filter((entry) => !eventIsNoise(entry.event)).slice(-12),\n };\n}\n\nfunction json(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction eventLabel(event: any): string {\n if (!event || typeof event !== \"object\") return \"event\";\n if (event.type === \"tool_start\") return `tool_start · ${event.tool}`;\n if (event.type === \"tool_done\") return `tool_done · ${event.tool}`;\n if (event.type === \"text\") return \"text\";\n if (event.type === \"error\") return `error · ${event.errorCode ?? \"agent\"}`;\n return String(event.type ?? \"event\");\n}\n\nfunction messageTitle(message: ThreadMessage): string {\n const role = message.role || \"unknown\";\n return `${role.charAt(0).toUpperCase()}${role.slice(1)} ${message.index + 1}`;\n}\n\nfunction toolParts(message: ThreadMessage): any[] {\n return message.contentParts.filter((part) => part?.type === \"tool-call\");\n}\n\nfunction diagnosticStage(value: string | null | undefined): string | null {\n if (!value) return null;\n try {\n const parsed = JSON.parse(value) as { stage?: unknown; detail?: unknown };\n const stage =\n typeof parsed.stage === \"string\" && parsed.stage.trim()\n ? parsed.stage.trim()\n : value;\n const detail =\n typeof parsed.detail === \"string\" && parsed.detail.trim()\n ? parsed.detail.trim()\n : \"\";\n return detail ? `${stage}: ${detail}` : stage;\n } catch {\n return value;\n }\n}\n\nfunction RawBlock({\n value,\n className,\n}: {\n value: unknown;\n className?: string;\n}) {\n return (\n <pre\n className={cn(\n \"max-h-[520px] overflow-auto rounded-lg border bg-muted/30 p-3 text-xs leading-relaxed text-foreground\",\n \"whitespace-pre-wrap break-words\",\n className,\n )}\n >\n {typeof value === \"string\" ? value : json(value)}\n </pre>\n );\n}\n\nfunction ResultCard({\n result,\n selected,\n onSelect,\n}: {\n result: ThreadSearchResult;\n selected: boolean;\n onSelect: () => void;\n}) {\n const title = displayListTitle(\n result.title,\n result.preview,\n \"Untitled thread\",\n );\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n aria-current={selected ? \"true\" : undefined}\n className={cn(\n \"group w-full border-b px-4 py-3 text-left transition-colors last:border-b-0\",\n selected ? \"bg-accent/70\" : \"hover:bg-muted/50\",\n )}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {title}\n </div>\n </div>\n <Badge variant=\"outline\" className=\"shrink-0\">\n {result.messageCount}{\" \"}\n {result.messageCount === 1 ? \"message\" : \"messages\"}\n </Badge>\n </div>\n <div className=\"mt-2 flex items-center justify-between gap-3 text-[11px] text-muted-foreground\">\n <span className=\"min-w-0 truncate\">{result.ownerEmail}</span>\n <span className=\"shrink-0\">{formatRelativeDate(result.updatedAt)}</span>\n </div>\n </button>\n );\n}\n\nfunction FailureCard({\n failure,\n selected,\n onSelect,\n}: {\n failure: AgentRunFailure;\n selected: boolean;\n onSelect: () => void;\n}) {\n const t = useT();\n const diagnosis = runDiagnosis(failure);\n const title = displayListTitle(\n failure.threadTitle,\n failure.threadPreview,\n \"Agent run\",\n );\n const statusLabel =\n failure.status === \"errored\"\n ? t(\"dispatch.pages.threadDebugErrored\", {\n defaultValue: \"Errored\",\n })\n : failure.status === \"aborted\"\n ? t(\"dispatch.pages.threadDebugAborted\", {\n defaultValue: \"Aborted\",\n })\n : failure.status === \"truncated\"\n ? t(\"dispatch.pages.threadDebugTruncated\", {\n defaultValue: \"Truncated\",\n })\n : failure.status;\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n aria-current={selected ? \"true\" : undefined}\n className={cn(\n \"group w-full border-b px-4 py-3 text-left transition-[background-color,border-color] last:border-b-0\",\n selected ? \"bg-accent/70\" : \"hover:bg-muted/50\",\n )}\n >\n <div className=\"flex items-start gap-3\">\n <span\n aria-hidden=\"true\"\n className={cn(\n \"mt-1.5 size-2 shrink-0 rounded-full\",\n failure.status === \"aborted\"\n ? \"bg-muted-foreground/50\"\n : \"bg-destructive\",\n )}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-foreground\">\n {title}\n </div>\n <div className=\"mt-0.5 truncate text-xs text-muted-foreground\">\n {failureSourceLabel(failure)}\n </div>\n </div>\n <span className=\"shrink-0 text-[11px] text-muted-foreground\">\n {formatRelativeDate(failure.completedAt ?? failure.startedAt)}\n </span>\n </div>\n <div className=\"mt-2 flex min-w-0 items-center gap-2 text-xs\">\n <span className=\"truncate font-medium text-foreground\">\n {diagnosis.title}\n </span>\n <span className=\"shrink-0 text-muted-foreground\">·</span>\n <span className=\"shrink-0 text-muted-foreground\">\n {statusLabel}\n </span>\n </div>\n {failure.durationMs == null ? null : (\n <div className=\"mt-1 text-[11px] text-muted-foreground\">\n {formatDuration(failure.durationMs)}\n </div>\n )}\n </div>\n </div>\n <span className=\"sr-only\">\n {t(\"dispatch.pages.threadDebugInspectFailure\", {\n defaultValue: \"Inspect failed run\",\n })}\n </span>\n </button>\n );\n}\n\nfunction MessageBlock({ message }: { message: ThreadMessage }) {\n const tools = toolParts(message);\n return (\n <div className=\"rounded-lg bg-card\">\n <div className=\"flex flex-wrap items-center justify-between gap-2 border-b px-3 py-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge\n variant={message.role === \"assistant\" ? \"default\" : \"secondary\"}\n >\n {message.role}\n </Badge>\n <span className=\"truncate text-sm font-medium text-foreground\">\n {messageTitle(message)}\n </span>\n </div>\n <div className=\"flex items-center gap-2 text-[11px] text-muted-foreground\">\n {message.attachments.length > 0 ? (\n <Badge variant=\"outline\">{message.attachments.length} files</Badge>\n ) : null}\n <span>{formatDate(message.createdAt)}</span>\n </div>\n </div>\n <div className=\"space-y-3 px-3 py-3\">\n {message.text ? (\n <div className=\"whitespace-pre-wrap break-words text-sm leading-relaxed text-foreground\">\n {message.text}\n </div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">No text content</div>\n )}\n {tools.length > 0 ? (\n <div className=\"space-y-2\">\n {tools.map((tool, index) => (\n <details\n key={`${message.id ?? message.index}-tool-${index}`}\n className=\"rounded-md border bg-muted/30 px-3 py-2\"\n >\n <summary className=\"cursor-pointer text-xs font-medium text-foreground\">\n {tool.toolName ?? tool.name ?? \"tool-call\"}\n </summary>\n <RawBlock value={tool} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction EvidenceStat({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"min-w-0\">\n <div className=\"text-[11px] text-muted-foreground\">{label}</div>\n <div className=\"mt-1 truncate text-sm font-medium text-foreground\">\n {value}\n </div>\n </div>\n );\n}\n\nfunction DiagnosisPanel({\n run,\n eventCount,\n toolCount,\n}: {\n run: ThreadRun;\n eventCount: number;\n toolCount: number;\n}) {\n const diagnosis = runDiagnosis(run);\n const isStoppedByUser = diagnosis.code === \"aborted:user\";\n const isScheduled =\n run.id?.startsWith(\"job-\") || run.dispatchMode === \"background-processing\";\n const workerClaimed = run.dispatchMode === \"background-processing\";\n const staleThreshold = isScheduled\n ? workerClaimed\n ? \"45s after claim\"\n : \"90s before claim\"\n : \"15s\";\n return (\n <section\n className={cn(\n \"border-b px-5 py-4\",\n isStoppedByUser ? \"bg-muted/20\" : \"bg-destructive/[0.04]\",\n )}\n aria-label=\"Run diagnosis\"\n >\n <div className=\"flex items-start gap-3\">\n <span\n aria-hidden=\"true\"\n className={cn(\n \"mt-1.5 size-2 shrink-0 rounded-full\",\n isStoppedByUser ? \"bg-muted-foreground/50\" : \"bg-destructive\",\n )}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-start justify-between gap-2\">\n <div>\n <h2 className=\"text-sm font-semibold text-foreground\">\n {diagnosis.title}\n </h2>\n <p className=\"mt-1 max-w-3xl text-sm leading-relaxed text-muted-foreground\">\n {diagnosis.summary}\n </p>\n </div>\n <span className=\"font-mono text-[11px] text-muted-foreground\">\n {diagnosis.code}\n </span>\n </div>\n <div className=\"mt-3 flex items-start gap-2 text-xs text-foreground\">\n <IconInfoCircle className=\"mt-0.5 size-3.5 shrink-0 text-muted-foreground\" />\n <span>\n <span className=\"font-medium\">Next check:</span>{\" \"}\n {diagnosis.nextStep}\n </span>\n </div>\n </div>\n </div>\n <div className=\"mt-4 grid gap-3 border-t pt-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-7\">\n <EvidenceStat\n label=\"Run type\"\n value={isScheduled ? \"Scheduled job\" : \"Interactive chat\"}\n />\n <EvidenceStat\n label=\"Worker claim\"\n value={workerClaimed ? \"Claimed\" : \"Not recorded\"}\n />\n <EvidenceStat\n label=\"Last heartbeat\"\n value={formatDate(run.heartbeatAt)}\n />\n <EvidenceStat\n label=\"Last progress\"\n value={formatDate(run.lastProgressAt)}\n />\n <EvidenceStat label=\"Stale threshold\" value={staleThreshold} />\n <EvidenceStat\n label=\"Recovery payload\"\n value={run.hasDispatchPayload ? \"Retained\" : \"Not retained\"}\n />\n <EvidenceStat\n label=\"Worker stage\"\n value={\n diagnosticStage(run.workerStage) ||\n diagnosticStage(run.diagStage) ||\n \"Not recorded\"\n }\n />\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground\">\n <span>\n Evidence:{\" \"}\n <span className=\"font-medium text-foreground\">\n {eventCount.toLocaleString()}\n </span>{\" \"}\n retained events\n </span>\n <span aria-hidden=\"true\">·</span>\n <span>\n <span className=\"font-medium text-foreground\">\n {toolCount.toLocaleString()}\n </span>{\" \"}\n tool starts\n </span>\n <span aria-hidden=\"true\">·</span>\n <span>Liveness uses the newer heartbeat or progress timestamp.</span>\n </div>\n </section>\n );\n}\n\nfunction RunTimeline({ run }: { run: ThreadRun }) {\n const summary = summarizeEvents(run.events);\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center justify-between gap-3 border-b pb-3\">\n <div className=\"flex items-center gap-2\">\n <IconActivity className=\"size-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">\n {run.events.length.toLocaleString()} events retained\n </span>\n <span className=\"text-xs text-muted-foreground\">\n {summary.toolStarts} tool starts\n </span>\n </div>\n <span className=\"text-xs text-muted-foreground\">\n Started {formatDate(run.startedAt)}\n </span>\n </div>\n\n {summary.toolNames.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {summary.toolNames.map(([name, count]) => (\n <span\n key={name}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-muted/60 px-2 py-1 text-xs text-foreground\"\n >\n <IconTool className=\"size-3.5 text-muted-foreground\" />\n {name} <span className=\"text-muted-foreground\">×{count}</span>\n </span>\n ))}\n </div>\n ) : null}\n\n <div className=\"divide-y rounded-lg border\">\n {summary.meaningful.length > 0 ? (\n summary.meaningful.map((entry) => (\n <div\n key={`${run.id}-${entry.seq}`}\n className=\"flex items-start gap-3 px-3 py-2.5 text-xs\"\n >\n <span className=\"w-8 shrink-0 font-mono text-muted-foreground\">\n #{entry.seq}\n </span>\n <span className=\"min-w-0 flex-1 break-words text-foreground\">\n {eventLabel(entry.event)}\n </span>\n </div>\n ))\n ) : (\n <div className=\"px-3 py-4 text-sm text-muted-foreground\">\n No summarized events were retained for this run.\n </div>\n )}\n </div>\n\n <details className=\"rounded-lg border\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-2.5 text-xs font-medium text-foreground\">\n <span>Show raw event stream</span>\n <span className=\"font-normal text-muted-foreground\">\n {run.events.length.toLocaleString()} records\n </span>\n </summary>\n <div className=\"space-y-2 border-t p-3\">\n {run.events.map((entry) => (\n <details\n key={`${run.id}-raw-${entry.seq}`}\n className=\"rounded-md border bg-muted/20 px-3 py-2\"\n >\n <summary className=\"cursor-pointer text-xs text-foreground\">\n #{entry.seq} {eventLabel(entry.event)}\n </summary>\n <RawBlock value={entry.event} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n </div>\n </details>\n </div>\n );\n}\n\nfunction ThreadDetail({ detail }: { detail: ThreadDebugResponse }) {\n const rawBundle = useMemo(\n () => ({\n thread: detail.thread,\n debug: detail.debug,\n debugRuns: detail.debugRuns,\n queuedMessages: detail.queuedMessages,\n threadData: detail.threadData,\n runs: detail.runs,\n traces: detail.traces,\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }),\n [detail],\n );\n const primaryRun =\n detail.runs.find((run) => run.id === detail.lookup?.runId) ??\n detail.runs[0] ??\n null;\n const eventCount = detail.runs.reduce(\n (total, run) => total + run.events.length,\n 0,\n );\n const toolCount = detail.runs.reduce(\n (total, run) => total + summarizeEvents(run.events).toolStarts,\n 0,\n );\n\n return (\n <div className=\"min-w-0\">\n <div className=\"border-b px-5 py-4\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-base font-semibold text-foreground\">\n {detail.thread.title || detail.thread.preview || detail.thread.id}\n </div>\n <div className=\"mt-1 flex min-w-0 items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"truncate font-mono\">\n {detail.lookup?.runId || detail.thread.id}\n </span>\n {detail.lookup?.runId ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0\"\n title=\"Copy run ID\"\n aria-label=\"Copy run ID\"\n onClick={() =>\n void navigator.clipboard?.writeText(\n detail.lookup?.runId ?? \"\",\n )\n }\n >\n <IconCopy className=\"size-3.5\" />\n </Button>\n ) : null}\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n {primaryRun ? (\n <Badge\n variant={\n primaryRun.status === \"errored\" ? \"destructive\" : \"secondary\"\n }\n >\n {primaryRun.status}\n </Badge>\n ) : null}\n <Badge variant=\"outline\">{detail.source.label}</Badge>\n </div>\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground\">\n <span className=\"truncate\">{detail.thread.ownerEmail}</span>\n <span aria-hidden=\"true\">·</span>\n <span>{detail.messages.length} messages</span>\n <span aria-hidden=\"true\">·</span>\n <span>{detail.runs.length} runs</span>\n <span aria-hidden=\"true\">·</span>\n <span>updated {formatDate(detail.thread.updatedAt)}</span>\n </div>\n </div>\n\n {primaryRun ? (\n <DiagnosisPanel\n run={primaryRun}\n eventCount={eventCount}\n toolCount={toolCount}\n />\n ) : null}\n\n <Tabs defaultValue=\"overview\" className=\"p-5\">\n <TabsList className=\"h-9\">\n <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n <TabsTrigger value=\"timeline\">Timeline</TabsTrigger>\n <TabsTrigger value=\"transcript\">Transcript</TabsTrigger>\n <TabsTrigger value=\"technical\">Technical</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"overview\" className=\"mt-4 space-y-4\">\n <div className=\"flex items-start gap-2 border-b pb-4 text-sm text-muted-foreground\">\n <IconInfoCircle className=\"mt-0.5 size-4 shrink-0\" />\n <p className=\"max-w-2xl leading-relaxed\">\n This is the compact readout. Open Timeline for the last meaningful\n signals, Transcript for persisted messages and tool calls, or\n Technical for raw records.\n </p>\n </div>\n <div className=\"grid gap-4 sm:grid-cols-2 xl:grid-cols-3\">\n <EvidenceStat\n label=\"Created\"\n value={formatDate(detail.thread.createdAt)}\n />\n <EvidenceStat\n label=\"Updated\"\n value={formatDate(detail.thread.updatedAt)}\n />\n <EvidenceStat label=\"Source\" value={detail.source.label} />\n <EvidenceStat\n label=\"Messages\"\n value={detail.messages.length.toLocaleString()}\n />\n <EvidenceStat\n label=\"Retained events\"\n value={eventCount.toLocaleString()}\n />\n <EvidenceStat\n label=\"Tool starts\"\n value={toolCount.toLocaleString()}\n />\n </div>\n {detail.messages.length === 0 && eventCount > 0 ? (\n <div className=\"flex items-start gap-2 rounded-lg border bg-muted/20 px-3 py-3 text-sm text-muted-foreground\">\n <IconActivity className=\"mt-0.5 size-4 shrink-0\" />\n <span>\n No persisted messages are available, but this run retained{\" \"}\n {eventCount.toLocaleString()} execution events. The timeline is\n the authoritative audit trail for this run.\n </span>\n </div>\n ) : null}\n </TabsContent>\n\n <TabsContent value=\"timeline\" className=\"mt-4 space-y-5\">\n {detail.runs.length > 0 ? (\n detail.runs.map((run) => (\n <section\n key={run.id}\n className=\"border-b pb-5 last:border-b-0 last:pb-0\"\n >\n <div className=\"mb-3 flex flex-wrap items-center gap-2\">\n <Badge\n variant={\n run.status === \"errored\" ? \"destructive\" : \"outline\"\n }\n >\n {run.status}\n </Badge>\n <span className=\"font-mono text-xs text-muted-foreground\">\n {run.id}\n </span>\n <span className=\"text-xs text-muted-foreground\">\n {formatDuration(run.durationMs)}\n </span>\n </div>\n <RunTimeline run={run} />\n </section>\n ))\n ) : (\n <div className=\"rounded-lg border border-dashed px-4 py-8 text-center text-sm text-muted-foreground\">\n No retained runs.\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"transcript\" className=\"mt-4 space-y-3\">\n {detail.messages.length > 0 ? (\n detail.messages.map((message) => (\n <MessageBlock\n key={message.id ?? `message-${message.index}`}\n message={message}\n />\n ))\n ) : (\n <div className=\"rounded-lg border border-dashed px-4 py-8 text-center text-sm text-muted-foreground\">\n <div>No persisted messages.</div>\n {eventCount > 0 ? (\n <div className=\"mt-1\">\n Open Timeline to audit the retained execution events.\n </div>\n ) : null}\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"technical\" className=\"mt-4 space-y-3\">\n <details className=\"rounded-lg border\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-3 text-sm font-medium text-foreground\">\n <span>Run records</span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n {detail.runs.length} {detail.runs.length === 1 ? \"run\" : \"runs\"}\n </span>\n </summary>\n <div className=\"space-y-4 border-t p-3\">\n {detail.runs.length > 0 ? (\n detail.runs.map((run) => (\n <div key={run.id} className=\"space-y-3\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge\n variant={\n run.status === \"errored\" ? \"destructive\" : \"outline\"\n }\n >\n {run.status}\n </Badge>\n <span className=\"break-all font-mono text-xs text-foreground\">\n {run.id}\n </span>\n </div>\n <div className=\"grid gap-3 text-xs sm:grid-cols-2 xl:grid-cols-3\">\n <EvidenceStat\n label=\"Failure code\"\n value={run.errorCode || \"n/a\"}\n />\n <EvidenceStat\n label=\"Terminal reason\"\n value={run.terminalReason || run.abortReason || \"n/a\"}\n />\n <EvidenceStat\n label=\"Dispatch mode\"\n value={run.dispatchMode || \"foreground\"}\n />\n <EvidenceStat\n label=\"Last stage\"\n value={\n diagnosticStage(run.workerStage) ||\n diagnosticStage(run.diagStage) ||\n \"n/a\"\n }\n />\n <EvidenceStat\n label=\"Duration\"\n value={formatDuration(\n run.durationMs ??\n (run.completedAt == null\n ? null\n : run.completedAt - run.startedAt),\n )}\n />\n <EvidenceStat\n label=\"Last progress\"\n value={formatDate(\n run.lastProgressAt ?? run.heartbeatAt,\n )}\n />\n <EvidenceStat\n label=\"In-flight marker\"\n value={formatDate(run.inFlightSince)}\n />\n <EvidenceStat\n label=\"Recovery payload\"\n value={\n run.hasDispatchPayload ? \"retained\" : \"not retained\"\n }\n />\n </div>\n {run.errorDetail ? (\n <div className=\"rounded-md bg-destructive/10 px-3 py-2 text-xs leading-relaxed text-destructive\">\n {run.errorDetail}\n </div>\n ) : null}\n </div>\n ))\n ) : (\n <div className=\"text-sm text-muted-foreground\">\n No retained run records.\n </div>\n )}\n </div>\n </details>\n\n <details className=\"rounded-lg border\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-3 text-sm font-medium text-foreground\">\n <span>Traces, feedback, and evaluations</span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n diagnostic records\n </span>\n </summary>\n <div className=\"grid gap-4 border-t p-3 lg:grid-cols-2\">\n <div>\n <div className=\"mb-2 text-xs font-medium text-foreground\">\n Debug runs\n </div>\n <RawBlock\n value={\n detail.debugRuns.length > 0\n ? detail.debugRuns\n : (detail.debug ?? {})\n }\n />\n </div>\n <div>\n <div className=\"mb-2 text-xs font-medium text-foreground\">\n Trace summaries\n </div>\n <RawBlock value={detail.traces.summaries} />\n </div>\n <div>\n <div className=\"mb-2 text-xs font-medium text-foreground\">\n Trace spans\n </div>\n <RawBlock value={detail.traces.spans} />\n </div>\n <div>\n <div className=\"mb-2 text-xs font-medium text-foreground\">\n Feedback and evals\n </div>\n <RawBlock\n value={{\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }}\n />\n </div>\n </div>\n </details>\n\n <details className=\"rounded-lg border\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-3 text-sm font-medium text-foreground\">\n <span>Raw thread bundle</span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n JSON\n </span>\n </summary>\n <div className=\"space-y-3 border-t p-3\">\n <RawBlock value={rawBundle} />\n <RawBlock value={detail.rawThreadData} />\n </div>\n </details>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n\nexport default function ThreadDebugRoute() {\n const t = useT();\n const [routeSearchParams, setRouteSearchParams] = useSearchParams();\n const mode = parseMode(routeSearchParams.get(\"mode\"));\n const sourceId =\n routeSearchParams.get(\"source\") ||\n (mode === \"failures\" ? \"all\" : \"current\");\n const ownerEmail = routeSearchParams.get(\"owner\") || \"\";\n const query = routeSearchParams.get(\"query\") || \"\";\n const status = parseFailureStatus(routeSearchParams.get(\"status\"));\n const regime = parseFailureRegime(routeSearchParams.get(\"regime\"));\n const range = parseFailureRange(routeSearchParams.get(\"range\"));\n const runId = routeSearchParams.get(\"runId\") || \"\";\n const threadId = routeSearchParams.get(\"threadId\") || \"\";\n const inspectSourceId = routeSearchParams.get(\"inspectSource\") || \"\";\n const [lookupId, setLookupId] = useState(\"\");\n const [searchFocused, setSearchFocused] = useState(false);\n\n function updateRouteState(\n updates: Record<string, string | null | undefined>,\n ) {\n const next = new URLSearchParams(routeSearchParams);\n for (const [key, value] of Object.entries(updates)) {\n if (value == null || value === \"\") next.delete(key);\n else next.set(key, value);\n }\n setRouteSearchParams(next, { replace: true });\n }\n\n const sourcesQuery = useActionQuery<{\n access: {\n viewerEmail: string;\n orgId: string | null;\n role: string | null;\n envAdmin: boolean;\n canInspectAll: boolean;\n memberCount: number;\n };\n sources: ThreadDebugSource[];\n }>(\"list-agent-thread-sources\", {});\n const { data: sourcesData } = sourcesQuery;\n\n const sources: ThreadDebugSource[] = sourcesData?.sources ?? [];\n const failureParams = useMemo(\n () => ({\n sourceId,\n ownerEmail: ownerEmail.trim() || undefined,\n status,\n regime,\n lookbackHours: FAILURE_RANGE_HOURS[range],\n limit: 25,\n }),\n [ownerEmail, range, regime, sourceId, status],\n );\n const {\n data: failuresData,\n isLoading: failuresLoading,\n error: failuresError,\n refetch: refetchFailures,\n } = useActionQuery<AgentRunFailuresResponse>(\n \"list-agent-run-failures\",\n failureParams,\n { enabled: mode === \"failures\" },\n );\n const failures = failuresData?.failures ?? EMPTY_FAILURES;\n const failurePatterns = useMemo(() => {\n const patterns = new Map<string, { label: string; count: number }>();\n for (const failure of failures) {\n const diagnosis = runDiagnosis(failure);\n const current = patterns.get(diagnosis.code);\n patterns.set(diagnosis.code, {\n label: diagnosis.title,\n count: (current?.count ?? 0) + 1,\n });\n }\n return [...patterns.values()].sort((a, b) => b.count - a.count);\n }, [failures]);\n const unavailableFailureSources = (failuresData?.sources ?? []).filter(\n (source) => source.status !== \"ok\",\n );\n const failureSourceStatusLabels = {\n ok: \"ok\",\n disconnected: t(\"dispatch.pages.threadDebugDisconnected\", {\n defaultValue: \"disconnected\",\n }),\n unsupported: t(\"dispatch.pages.threadDebugUnsupported\", {\n defaultValue: \"unsupported\",\n }),\n unavailable: t(\"dispatch.pages.threadDebugUnavailable\", {\n defaultValue: \"unavailable\",\n }),\n };\n\n const threadSourceId = sourceId === \"all\" ? \"current\" : sourceId;\n const detailSourceId =\n runId && inspectSourceId ? inspectSourceId : threadSourceId;\n const searchParams = useMemo(\n () => ({\n sourceId: threadSourceId,\n query: query.trim() || undefined,\n limit: 25,\n }),\n [query, threadSourceId],\n );\n const {\n data: searchData,\n isLoading: searchLoading,\n error: searchError,\n refetch: refetchSearch,\n } = useActionQuery<{\n count: number;\n threads: ThreadSearchResult[];\n access: { scope: string; canInspectAll: boolean };\n source: { id: string; label: string };\n }>(\"search-agent-threads\", searchParams, { enabled: mode === \"threads\" });\n const searchThreads: ThreadSearchResult[] = searchData?.threads ?? [];\n const ownerEmailSuggestions = useMemo(() => {\n const emailQuery = query.trim().includes(\"@\")\n ? query.trim().toLowerCase()\n : \"\";\n return [...new Set(searchThreads.map((thread) => thread.ownerEmail))]\n .filter(\n (email) => !emailQuery || email.toLowerCase().includes(emailQuery),\n )\n .slice(0, 8);\n }, [query, searchThreads]);\n\n const detailParams = useMemo(\n () => ({\n sourceId: detailSourceId,\n ...(runId ? { runId } : { threadId }),\n ownerEmail: ownerEmail.trim() || undefined,\n maxRuns: 20,\n maxEvents: 800,\n maxTraceSpans: 600,\n }),\n [detailSourceId, ownerEmail, runId, threadId],\n );\n const {\n data: detail,\n isLoading: detailLoading,\n error: detailError,\n refetch: refetchDetail,\n } = useActionQuery<ThreadDebugResponse>(\n \"get-agent-thread-debug\",\n detailParams,\n {\n enabled: Boolean(runId || threadId),\n },\n );\n\n const detailPane = (\n <section className=\"min-w-0\">\n {detailError ? (\n <ActionQueryError\n error={detailError}\n onRetry={() => void refetchDetail()}\n />\n ) : null}\n {detailLoading ? (\n <div className=\"p-5\">\n <Skeleton className=\"h-6 w-72\" />\n <Skeleton className=\"mt-3 h-4 w-96\" />\n <Skeleton className=\"mt-6 h-[520px] w-full\" />\n </div>\n ) : detail ? (\n <ThreadDetail detail={detail} />\n ) : (\n <div className=\"flex min-h-[520px] flex-col items-center justify-center px-5 text-center text-sm text-muted-foreground\">\n <IconFileSearch className=\"mb-2 size-5\" />\n <div className=\"font-medium text-foreground\">\n Choose a run to inspect\n </div>\n <div className=\"mt-1 max-w-xs leading-relaxed\">\n See the diagnosis first, then open the timeline or technical\n evidence.\n </div>\n </div>\n )}\n </section>\n );\n\n return (\n <DispatchShell\n title={t(\"dispatch.pages.threadDebugTitle\", {\n defaultValue: \"Thread Debug\",\n })}\n description={t(\"dispatch.pages.threadDebugDescription\", {\n defaultValue: \"Find the failure pattern, then inspect the evidence.\",\n })}\n >\n <div className=\"space-y-4\">\n {sourcesQuery.isError ? (\n <ActionQueryError\n error={sourcesQuery.error}\n onRetry={() => void sourcesQuery.refetch()}\n />\n ) : null}\n <Tabs\n value={mode}\n onValueChange={(value) => {\n const nextMode = parseMode(value);\n updateRouteState({\n mode: nextMode,\n source:\n nextMode === \"threads\" && sourceId === \"all\"\n ? \"current\"\n : sourceId,\n runId: null,\n threadId: null,\n inspectSource: null,\n });\n }}\n >\n <TabsList>\n <TabsTrigger value=\"failures\">\n {t(\"dispatch.pages.threadDebugFailedRuns\", {\n defaultValue: \"Failed runs\",\n })}\n </TabsTrigger>\n <TabsTrigger value=\"threads\">\n {t(\"dispatch.pages.threadDebugThreads\", {\n defaultValue: \"Threads\",\n })}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"failures\" className=\"mt-4 space-y-4\">\n <section className=\"border-b pb-4\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <h2 className=\"text-sm font-semibold text-foreground\">\n Run health\n </h2>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Start with the dominant failure pattern, then open one run.\n </p>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => void refetchFailures()}\n aria-label={t(\"dispatch.pages.threadDebugRefreshFailures\", {\n defaultValue: \"Refresh failed runs\",\n })}\n >\n <IconRefresh className=\"size-4\" />\n </Button>\n </div>\n <div className=\"mt-3 grid gap-2 sm:grid-cols-2 xl:grid-cols-[200px_minmax(180px,1fr)_180px_160px_150px]\">\n <Select\n value={sourceId}\n onValueChange={(value) =>\n updateRouteState({\n source: value,\n runId: null,\n threadId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugSource\", {\n defaultValue: \"Source\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">\n {t(\"dispatch.pages.threadDebugAllSources\", {\n defaultValue: \"All sources\",\n })}\n </SelectItem>\n {sources.map((source) => (\n <SelectItem key={source.id} value={source.id}>\n {source.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n value={ownerEmail}\n onChange={(event) =>\n updateRouteState({ owner: event.target.value })\n }\n aria-label={t(\"dispatch.pages.threadDebugOwner\", {\n defaultValue: \"Owner email\",\n })}\n placeholder={t(\"dispatch.pages.threadDebugOwner\", {\n defaultValue: \"Owner email\",\n })}\n />\n <Select\n value={status}\n onValueChange={(value) =>\n updateRouteState({\n status: parseFailureStatus(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugStatus\", {\n defaultValue: \"Status\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">\n {t(\"dispatch.pages.threadDebugAllStatuses\", {\n defaultValue: \"All statuses\",\n })}\n </SelectItem>\n <SelectItem value=\"errored\">\n {t(\"dispatch.pages.threadDebugErrored\", {\n defaultValue: \"Errored\",\n })}\n </SelectItem>\n <SelectItem value=\"aborted\">\n {t(\"dispatch.pages.threadDebugAborted\", {\n defaultValue: \"Aborted\",\n })}\n </SelectItem>\n <SelectItem value=\"truncated\">\n {t(\"dispatch.pages.threadDebugTruncated\", {\n defaultValue: \"Truncated\",\n })}\n </SelectItem>\n </SelectContent>\n </Select>\n <Select\n value={regime}\n onValueChange={(value) =>\n updateRouteState({\n regime: parseFailureRegime(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger aria-label=\"Run type\">\n <SelectValue placeholder=\"Run type\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All run types</SelectItem>\n <SelectItem value=\"interactive\">\n Interactive chats\n </SelectItem>\n <SelectItem value=\"scheduled\">Scheduled jobs</SelectItem>\n </SelectContent>\n </Select>\n <Select\n value={range}\n onValueChange={(value) =>\n updateRouteState({\n range: parseFailureRange(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugRange\", {\n defaultValue: \"Time range\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"24h\">\n {t(\"dispatch.pages.threadDebugRange24h\", {\n defaultValue: \"Last 24 hours\",\n })}\n </SelectItem>\n <SelectItem value=\"7d\">\n {t(\"dispatch.pages.threadDebugRange7d\", {\n defaultValue: \"Last 7 days\",\n })}\n </SelectItem>\n <SelectItem value=\"30d\">\n {t(\"dispatch.pages.threadDebugRange30d\", {\n defaultValue: \"Last 30 days\",\n })}\n </SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"font-medium text-foreground\">\n {failures.length} loaded{\" \"}\n {failures.length === 1 ? \"run\" : \"runs\"}\n </span>\n <span>·</span>\n <span>\n {failuresData?.access?.scope ??\n t(\"dispatch.pages.threadDebugCurrentScope\", {\n defaultValue: \"current scope\",\n })}\n </span>\n {failurePatterns.slice(0, 3).map((pattern) => (\n <Badge key={pattern.label} variant=\"outline\">\n {pattern.count} {pattern.label}\n </Badge>\n ))}\n {failuresData?.partial ? (\n <Badge variant=\"outline\">\n {t(\"dispatch.pages.threadDebugPartialResults\", {\n defaultValue: \"Partial results\",\n })}\n </Badge>\n ) : null}\n </div>\n {unavailableFailureSources.length > 0 ? (\n <div className=\"mt-2 flex items-start gap-1.5 text-xs text-muted-foreground\">\n <IconAlertTriangle className=\"mt-0.5 size-3.5 shrink-0\" />\n <span>\n {t(\"dispatch.pages.threadDebugUnavailableSources\", {\n defaultValue: \"Unavailable sources:\",\n })}{\" \"}\n {unavailableFailureSources\n .map(\n ({ source, status: sourceStatus }) =>\n `${source.label} (${failureSourceStatusLabels[sourceStatus]})`,\n )\n .join(\", \")}\n </span>\n </div>\n ) : null}\n </section>\n\n {failuresError ? (\n <ActionQueryError\n error={failuresError}\n onRetry={() => void refetchFailures()}\n />\n ) : null}\n\n <div className=\"overflow-hidden rounded-xl border bg-card\">\n <div className=\"grid xl:grid-cols-[360px_minmax(0,1fr)]\">\n <section className=\"min-h-[560px] border-b xl:border-b-0 xl:border-r\">\n <div className=\"flex items-center justify-between border-b px-4 py-3\">\n <div>\n <div className=\"text-sm font-semibold text-foreground\">\n Needs attention\n </div>\n <div className=\"mt-0.5 text-xs text-muted-foreground\">\n {failurePatterns[0]\n ? `${failurePatterns[0].count} ${failurePatterns[0].label.toLowerCase()}`\n : \"No active failure pattern\"}\n </div>\n </div>\n <span className=\"text-xs text-muted-foreground\">\n {failures.length}\n </span>\n </div>\n <div className=\"max-h-[760px] overflow-auto\">\n {failuresLoading ? (\n <>\n <Skeleton className=\"mx-4 mt-4 h-16 w-[calc(100%-2rem)]\" />\n <Skeleton className=\"mx-4 mt-2 h-16 w-[calc(100%-2rem)]\" />\n <Skeleton className=\"mx-4 mt-2 h-16 w-[calc(100%-2rem)]\" />\n </>\n ) : null}\n {!failuresLoading && failures.length === 0 ? (\n <div className=\"flex min-h-64 flex-col items-center justify-center px-4 text-center text-sm text-muted-foreground\">\n <IconDatabase className=\"mb-2 size-5\" />\n {t(\"dispatch.pages.threadDebugNoFailures\", {\n defaultValue: \"No failed runs found.\",\n })}\n </div>\n ) : null}\n {failures.map((failure) => (\n <FailureCard\n key={`${failureSourceId(failure)}:${failure.id}`}\n failure={failure}\n selected={\n runId === failure.id &&\n detailSourceId === failureSourceId(failure)\n }\n onSelect={() =>\n updateRouteState({\n inspectSource: failureSourceId(failure),\n runId: failure.id,\n threadId: null,\n })\n }\n />\n ))}\n </div>\n </section>\n <div className=\"min-w-0\">{detailPane}</div>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"threads\" className=\"mt-4 space-y-4\">\n <section className=\"border-b pb-4\">\n <div className=\"grid gap-2 pt-3 lg:grid-cols-2 xl:grid-cols-[auto_180px_minmax(220px,1fr)_auto_auto]\">\n <Select\n value={threadSourceId}\n onValueChange={(value) =>\n updateRouteState({\n source: value,\n runId: null,\n threadId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugSource\", {\n defaultValue: \"Source\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n {sources.map((source) => (\n <SelectItem key={source.id} value={source.id}>\n {source.label}\n </SelectItem>\n ))}\n {sources.length === 0 ? (\n <SelectItem value=\"current\">\n {t(\"dispatch.pages.threadDebugCurrentDatabase\", {\n defaultValue: \"Current Dispatch DB\",\n })}\n </SelectItem>\n ) : null}\n </SelectContent>\n </Select>\n <Popover\n open={searchFocused && ownerEmailSuggestions.length > 0}\n onOpenChange={setSearchFocused}\n >\n <PopoverAnchor asChild>\n <span className=\"block\">\n <Input\n value={query}\n onChange={(event) =>\n updateRouteState({ query: event.target.value })\n }\n onFocus={() => setSearchFocused(true)}\n placeholder={t(\n \"dispatch.pages.threadDebugSearchPlaceholder\",\n {\n defaultValue: \"Search threads or email\",\n },\n )}\n aria-label=\"Search threads or email\"\n />\n </span>\n </PopoverAnchor>\n <PopoverContent\n align=\"start\"\n sideOffset={6}\n className=\"w-[var(--radix-popover-trigger-width)] p-1\"\n onOpenAutoFocus={(event) => event.preventDefault()}\n >\n <div role=\"listbox\" aria-label=\"Owner email suggestions\">\n {ownerEmailSuggestions.map((email) => (\n <button\n key={email}\n type=\"button\"\n role=\"option\"\n aria-selected=\"false\"\n className=\"flex w-full items-center rounded-sm px-2 py-1.5 text-left text-sm text-foreground outline-none hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n updateRouteState({ query: email });\n setSearchFocused(false);\n }}\n >\n {email}\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n <Button\n type=\"button\"\n size=\"icon\"\n onClick={() => void refetchSearch()}\n aria-label=\"Search threads or email\"\n title=\"Search threads or email\"\n >\n <IconSearch className=\"size-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => void refetchSearch()}\n aria-label={t(\"dispatch.pages.threadDebugRefreshThreads\", {\n defaultValue: \"Refresh threads\",\n })}\n >\n <IconRefresh className=\"size-4\" />\n </Button>\n <details className=\"order-first justify-self-start rounded-lg border\">\n <summary\n aria-label=\"Advanced lookup\"\n title=\"Advanced lookup\"\n className=\"flex size-10 cursor-pointer list-none items-center justify-center text-foreground\"\n >\n <IconAdjustmentsHorizontal\n aria-hidden=\"true\"\n className=\"size-4\"\n />\n <span className=\"sr-only\">Advanced lookup</span>\n </summary>\n <div className=\"grid gap-3 border-t p-3 lg:w-80\">\n <Input\n value={lookupId}\n onChange={(event) => setLookupId(event.target.value)}\n placeholder={t(\n \"dispatch.pages.threadDebugLookupPlaceholder\",\n {\n defaultValue: \"Paste thread or request/run ID\",\n },\n )}\n className=\"font-mono\"\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n const trimmed = lookupId.trim();\n if (!trimmed) return;\n updateRouteState(\n trimmed.startsWith(\"run-\")\n ? {\n runId: trimmed,\n threadId: null,\n inspectSource: null,\n }\n : {\n threadId: trimmed,\n runId: null,\n inspectSource: null,\n },\n );\n }}\n >\n <IconFileSearch className=\"size-4\" />\n {t(\"dispatch.pages.threadDebugInspect\", {\n defaultValue: \"Inspect\",\n })}\n </Button>\n </div>\n </details>\n </div>\n </section>\n\n {searchError ? (\n <ActionQueryError\n error={searchError}\n onRetry={() => void refetchSearch()}\n />\n ) : null}\n\n <div className=\"overflow-hidden rounded-xl border bg-card\">\n <div className=\"grid xl:grid-cols-[360px_minmax(0,1fr)]\">\n <section className=\"min-h-[560px] border-b xl:border-b-0 xl:border-r\">\n <div className=\"max-h-[760px] overflow-auto\">\n {searchLoading ? (\n <>\n <Skeleton className=\"mx-4 mt-4 h-16 w-[calc(100%-2rem)]\" />\n <Skeleton className=\"mx-4 mt-2 h-16 w-[calc(100%-2rem)]\" />\n <Skeleton className=\"mx-4 mt-2 h-16 w-[calc(100%-2rem)]\" />\n </>\n ) : null}\n {!searchLoading && searchThreads.length === 0 ? (\n <div className=\"flex min-h-64 flex-col items-center justify-center px-4 text-center text-sm text-muted-foreground\">\n <IconDatabase className=\"mb-2 size-5\" />\n {t(\"dispatch.pages.threadDebugNoThreads\", {\n defaultValue: \"No threads found.\",\n })}\n </div>\n ) : null}\n {searchThreads.map((result) => (\n <ResultCard\n key={result.id}\n result={result}\n selected={threadId === result.id}\n onSelect={() =>\n updateRouteState({\n threadId: result.id,\n runId: null,\n inspectSource: null,\n })\n }\n />\n ))}\n </div>\n </section>\n <div className=\"min-w-0\">{detailPane}</div>\n </div>\n </div>\n </TabsContent>\n </Tabs>\n </div>\n </DispatchShell>\n );\n}\n"]}
1
+ {"version":3,"file":"thread-debug.js","sourceRoot":"","sources":["../../../src/routes/pages/thread-debug.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useActionQuery } from \"@agent-native/core/client/hooks\";\nimport { useT } from \"@agent-native/core/client/i18n\";\nimport {\n IconActivity,\n IconAdjustmentsHorizontal,\n IconAlertTriangle,\n IconCopy,\n IconDatabase,\n IconFileSearch,\n IconInfoCircle,\n IconRefresh,\n IconSearch,\n IconTool,\n} from \"@tabler/icons-react\";\nimport { useMemo, useState } from \"react\";\nimport { useSearchParams } from \"react-router\";\n\nimport { ActionQueryError } from \"../../components/action-query-error\";\nimport { DispatchShell } from \"../../components/dispatch-shell\";\nimport { Badge } from \"../../components/ui/badge\";\nimport { Button } from \"../../components/ui/button\";\nimport { Input } from \"../../components/ui/input\";\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n} from \"../../components/ui/popover\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../../components/ui/select\";\nimport { Skeleton } from \"../../components/ui/skeleton\";\nimport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n} from \"../../components/ui/tabs\";\nimport { cn } from \"../../lib/utils\";\n\nexport function meta() {\n return [{ title: \"Thread Debug — Dispatch\" }];\n}\n\ninterface ThreadDebugSource {\n id: string;\n label: string;\n kind: \"current\" | \"env\" | \"configured\";\n current: boolean;\n connected: boolean;\n databaseUrlEnv: string | null;\n databaseAuthTokenEnv: string | null;\n canInspectAll: boolean;\n}\n\ninterface ThreadSearchResult {\n id: string;\n ownerEmail: string;\n title: string;\n preview: string;\n messageCount: number;\n createdAt: number;\n updatedAt: number;\n snippet: string;\n}\n\ninterface ThreadMessage {\n index: number;\n id: string | null;\n role: string;\n createdAt: string | number | null;\n status: unknown;\n text: string;\n contentParts: any[];\n attachments: any[];\n metadata: unknown;\n}\n\ninterface ThreadRun {\n id: string;\n status: string;\n turnId?: string | null;\n abortReason: string | null;\n errorCode?: string | null;\n errorDetail?: string | null;\n terminalReason?: string | null;\n dispatchMode?: string | null;\n diagStage?: string | null;\n workerStage?: string | null;\n startedAt: number;\n completedAt: number | null;\n heartbeatAt: number | null;\n lastProgressAt?: number | null;\n durationMs?: number | null;\n peakRssMb?: number | null;\n inFlightSince?: number | null;\n hasDispatchPayload?: boolean;\n events: Array<{ seq: number; event: any; rawEventData: string }>;\n}\n\ntype ThreadDebugMode = \"failures\" | \"threads\";\ntype FailureStatus = \"all\" | \"errored\" | \"aborted\" | \"truncated\";\ntype FailureRegime = \"all\" | \"interactive\" | \"scheduled\";\ntype FailureRange = \"24h\" | \"7d\" | \"30d\";\n\ninterface FailureTaxonomy {\n code: string;\n label: string;\n regime: \"interactive\" | \"scheduled\";\n source: \"error_code\" | \"error_detail\" | \"unknown\";\n}\n\ninterface RunFailureLike {\n id?: string;\n status?: string | null;\n errorCode?: string | null;\n errorDetail?: string | null;\n terminalReason?: string | null;\n abortReason?: string | null;\n dispatchMode?: string | null;\n diagStage?: string | null;\n workerStage?: string | null;\n durationMs?: number | null;\n heartbeatAt?: number | null;\n lastProgressAt?: number | null;\n}\n\ninterface AgentRunFailure {\n id: string;\n threadId: string;\n sourceId?: string;\n sourceLabel?: string;\n source?: {\n id: string;\n label: string;\n kind?: string;\n databaseUrlEnv?: string | null;\n };\n ownerEmail: string;\n turnId?: string | null;\n threadTitle: string;\n threadPreview: string;\n status: string;\n errorCode: string | null;\n errorDetail: string | null;\n terminalReason: string | null;\n abortReason: string | null;\n heartbeatAt?: number | null;\n lastProgressAt?: number | null;\n dispatchMode: string | null;\n diagStage: string | null;\n workerStage?: string | null;\n startedAt: number;\n completedAt: number | null;\n durationMs: number | null;\n regime?: \"interactive\" | \"scheduled\";\n failureTaxonomy?: FailureTaxonomy;\n}\n\ninterface AgentRunFailuresResponse {\n failures: AgentRunFailure[];\n sources: Array<{\n source: {\n id: string;\n label: string;\n kind?: string;\n databaseUrlEnv?: string | null;\n };\n status: \"ok\" | \"unsupported\" | \"unavailable\" | \"disconnected\";\n failureCount: number;\n errorCode?: string | null;\n }>;\n partial: boolean;\n count?: number;\n access: { viewerEmail: string; scope: string; canInspectAll: boolean };\n filters?: {\n sourceId?: string;\n status?: FailureStatus;\n lookbackHours?: number;\n limit?: number;\n };\n}\n\ninterface ThreadDebugResponse {\n source: {\n id: string;\n label: string;\n kind: string;\n databaseUrlEnv: string | null;\n };\n access: { viewerEmail: string; scope: string; canInspectAll: boolean };\n thread: ThreadSearchResult;\n lookup?: { requestedId: string; threadId: string; runId: string | null };\n messages: ThreadMessage[];\n debug: any;\n debugRuns: any[];\n queuedMessages: any[];\n threadData: any;\n rawThreadData: string;\n runs: ThreadRun[];\n traces: { summaries: any[]; spans: any[] };\n feedback: any[];\n satisfaction: any[];\n evals: any[];\n checkpoints: any[];\n}\n\nconst FAILURE_RANGE_HOURS: Record<FailureRange, number> = {\n \"24h\": 24,\n \"7d\": 7 * 24,\n \"30d\": 30 * 24,\n};\n\nconst EMPTY_FAILURES: AgentRunFailure[] = [];\n\nfunction parseMode(value: string | null): ThreadDebugMode {\n return value === \"threads\" ? \"threads\" : \"failures\";\n}\n\nfunction parseFailureStatus(value: string | null): FailureStatus {\n return value === \"errored\" || value === \"aborted\" || value === \"truncated\"\n ? value\n : \"all\";\n}\n\nfunction parseFailureRegime(value: string | null): FailureRegime {\n return value === \"interactive\" || value === \"scheduled\" ? value : \"all\";\n}\n\nfunction parseFailureRange(value: string | null): FailureRange {\n return value === \"7d\" || value === \"30d\" ? value : \"24h\";\n}\n\nfunction failureSourceId(failure: AgentRunFailure): string {\n return failure.sourceId || failure.source?.id || \"current\";\n}\n\nfunction failureSourceLabel(failure: AgentRunFailure): string {\n return (\n failure.sourceLabel || failure.source?.label || failureSourceId(failure)\n );\n}\n\nfunction isTechnicalIdentifier(value: string): boolean {\n return /^(?:job|run|thread|turn|request|req)-[a-z0-9][a-z0-9_-]*$/i.test(\n value.trim(),\n );\n}\n\nfunction displayListTitle(\n value: string | null | undefined,\n fallbackValue: string | null | undefined,\n fallbackLabel: string,\n): string {\n const candidate = [value, fallbackValue]\n .map((entry) => entry?.trim() || \"\")\n .find((entry) => entry && !isTechnicalIdentifier(entry));\n if (!candidate) return fallbackLabel;\n\n const withoutDate = candidate\n .replace(/\\s+[—-]\\s+\\d{1,2}\\/\\d{1,2}\\/\\d{4}\\s*$/, \"\")\n .trim();\n if (!withoutDate) return fallbackLabel;\n\n if (/^job:/i.test(withoutDate)) {\n return withoutDate\n .replace(/^job:\\s*/i, \"\")\n .replace(/[-_]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .replace(/\\b\\w/g, (character) => character.toUpperCase())\n .trim();\n }\n\n return withoutDate;\n}\n\nfunction formatDate(value: number | string | null | undefined): string {\n if (value == null || value === \"\") return \"n/a\";\n const numeric = Number(value);\n const date = Number.isFinite(numeric) ? new Date(numeric) : new Date(value);\n if (Number.isNaN(date.getTime())) return \"n/a\";\n return date.toLocaleString();\n}\n\nfunction formatRelativeDate(value: number | string | null | undefined): string {\n if (value == null || value === \"\") return \"n/a\";\n const numeric = Number(value);\n const timestamp = Number.isFinite(numeric)\n ? numeric\n : new Date(value).getTime();\n if (!Number.isFinite(timestamp)) return \"n/a\";\n const elapsed = Date.now() - timestamp;\n if (elapsed < 0) return \"in a moment\";\n if (elapsed < 60_000) return \"just now\";\n if (elapsed < 3_600_000) return `${Math.floor(elapsed / 60_000)}m ago`;\n if (elapsed < 86_400_000) return `${Math.floor(elapsed / 3_600_000)}h ago`;\n return `${Math.floor(elapsed / 86_400_000)}d ago`;\n}\n\nfunction formatDuration(value: number | null | undefined): string {\n if (value == null || !Number.isFinite(value)) return \"n/a\";\n if (value < 1_000) return `${Math.round(value)}ms`;\n if (value < 60_000) return `${(value / 1_000).toFixed(1)}s`;\n return `${(value / 60_000).toFixed(1)}m`;\n}\n\nfunction humanizeIdentifier(value: string | null | undefined): string {\n if (!value) return \"Unknown failure\";\n return value\n .replace(/^(error:|failure:)/, \"\")\n .replace(/[_-]+/g, \" \")\n .replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction failureLabel(run: RunFailureLike): string {\n const code = run.errorCode || run.terminalReason || run.abortReason;\n const labels: Record<string, string> = {\n stale_run: \"Worker heartbeat stopped\",\n background_worker_never_started: \"Background worker never started\",\n background_worker_failed: \"Background worker setup failed\",\n builder_gateway_network_error: \"Gateway stream ended early\",\n provider_timeout: \"Provider timed out\",\n provider_network_error: \"Provider connection dropped\",\n provider_config_error: \"Provider configuration rejected\",\n authentication_error: \"Provider authentication failed\",\n overloaded_error: \"Provider was overloaded\",\n \"aborted:user\": \"Stopped by user\",\n };\n return (code && labels[code]) || humanizeIdentifier(code);\n}\n\nfunction runDiagnosis(run: RunFailureLike): {\n title: string;\n summary: string;\n nextStep: string;\n code: string;\n} {\n const code =\n run.errorCode || run.terminalReason || run.abortReason || \"unknown\";\n if (code === \"stale_run\") {\n const workerStarted = run.dispatchMode === \"background-processing\";\n return {\n title: \"Worker stopped reporting\",\n summary: workerStarted\n ? \"The worker claimed this run, then stopped writing heartbeat or progress signals before it finished. This is a liveness failure, not proof that the provider failed.\"\n : \"The run stayed active until liveness recovery closed it. No completed result was recorded, so inspect the handoff and retained evidence before blaming a provider.\",\n nextStep: workerStarted\n ? \"Check the last worker stage and database heartbeat writes.\"\n : \"Check the scheduled background handoff and whether a worker claimed it.\",\n code,\n };\n }\n if (code === \"background_worker_never_started\") {\n return {\n title: \"Background worker never started\",\n summary:\n \"The handoff was acknowledged, but no background worker claimed the run.\",\n nextStep:\n \"Check the background route, authentication, and function logs.\",\n code,\n };\n }\n if (code === \"background_worker_failed\") {\n return {\n title: \"Background worker failed during setup\",\n summary:\n \"The worker claimed the run but stopped before it could start the turn.\",\n nextStep:\n \"Use the recorded setup stage and worker logs to find the first failure.\",\n code,\n };\n }\n if (code === \"builder_gateway_network_error\") {\n return {\n title: \"Gateway stream ended early\",\n summary:\n run.errorDetail ||\n \"The model stream ended before the run emitted a terminal event.\",\n nextStep:\n \"Retry once; if it repeats, inspect gateway and provider transport health.\",\n code,\n };\n }\n if (code === \"aborted:user\") {\n return {\n title: \"Stopped by user\",\n summary: \"This run was explicitly aborted and is not a system failure.\",\n nextStep: \"No recovery action is required.\",\n code,\n };\n }\n return {\n title: failureLabel(run),\n summary:\n run.errorDetail || \"The run ended without a more specific explanation.\",\n nextStep: \"Open the timeline and inspect the last recorded stage or event.\",\n code,\n };\n}\n\nfunction eventType(event: any): string {\n return typeof event?.type === \"string\" ? event.type : \"event\";\n}\n\nfunction eventIsNoise(event: any): boolean {\n return [\n \"thinking\",\n \"text\",\n \"tool_input_delta\",\n \"stream_keepalive\",\n \"activity\",\n ].includes(eventType(event));\n}\n\nfunction summarizeEvents(events: ThreadRun[\"events\"]) {\n const toolNames = new Map<string, number>();\n let toolStarts = 0;\n for (const entry of events) {\n if (eventType(entry.event) !== \"tool_start\") continue;\n toolStarts += 1;\n const name = String(entry.event?.tool ?? \"tool\");\n toolNames.set(name, (toolNames.get(name) ?? 0) + 1);\n }\n return {\n toolStarts,\n toolNames: [...toolNames.entries()],\n meaningful: events.filter((entry) => !eventIsNoise(entry.event)).slice(-12),\n };\n}\n\nfunction json(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction eventLabel(event: any): string {\n if (!event || typeof event !== \"object\") return \"event\";\n if (event.type === \"tool_start\") return `tool_start · ${event.tool}`;\n if (event.type === \"tool_done\") return `tool_done · ${event.tool}`;\n if (event.type === \"text\") return \"text\";\n if (event.type === \"error\") return `error · ${event.errorCode ?? \"agent\"}`;\n return String(event.type ?? \"event\");\n}\n\nfunction messageTitle(message: ThreadMessage): string {\n const role = message.role || \"unknown\";\n return `${role.charAt(0).toUpperCase()}${role.slice(1)} ${message.index + 1}`;\n}\n\nfunction toolParts(message: ThreadMessage): any[] {\n return message.contentParts.filter((part) => part?.type === \"tool-call\");\n}\n\nfunction diagnosticStage(value: string | null | undefined): string | null {\n if (!value) return null;\n try {\n const parsed = JSON.parse(value) as { stage?: unknown; detail?: unknown };\n const stage =\n typeof parsed.stage === \"string\" && parsed.stage.trim()\n ? parsed.stage.trim()\n : value;\n const detail =\n typeof parsed.detail === \"string\" && parsed.detail.trim()\n ? parsed.detail.trim()\n : \"\";\n return detail ? `${stage}: ${detail}` : stage;\n } catch {\n return value;\n }\n}\n\nfunction RawBlock({\n value,\n className,\n}: {\n value: unknown;\n className?: string;\n}) {\n return (\n <pre\n className={cn(\n \"max-h-[520px] overflow-auto rounded-lg border bg-muted/30 p-3 text-xs leading-relaxed text-foreground\",\n \"whitespace-pre-wrap break-words\",\n className,\n )}\n >\n {typeof value === \"string\" ? value : json(value)}\n </pre>\n );\n}\n\nfunction ResultCard({\n result,\n selected,\n onSelect,\n}: {\n result: ThreadSearchResult;\n selected: boolean;\n onSelect: () => void;\n}) {\n const title = displayListTitle(\n result.title,\n result.preview,\n \"Untitled thread\",\n );\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n aria-current={selected ? \"true\" : undefined}\n className={cn(\n \"group w-full border-b px-4 py-3 text-left transition-colors last:border-b-0\",\n selected ? \"bg-accent/70\" : \"hover:bg-muted/50\",\n )}\n >\n <div className=\"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 MessageBlock({ message }: { message: ThreadMessage }) {\n const tools = toolParts(message);\n return (\n <div className=\"rounded-lg bg-card\">\n <div className=\"flex flex-wrap items-center justify-between gap-2 border-b px-3 py-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge\n variant={message.role === \"assistant\" ? \"default\" : \"secondary\"}\n >\n {message.role}\n </Badge>\n <span className=\"truncate text-sm font-medium text-foreground\">\n {messageTitle(message)}\n </span>\n </div>\n <div className=\"flex items-center gap-2 text-[11px] text-muted-foreground\">\n {message.attachments.length > 0 ? (\n <Badge variant=\"outline\">{message.attachments.length} files</Badge>\n ) : null}\n <span>{formatDate(message.createdAt)}</span>\n </div>\n </div>\n <div className=\"space-y-3 px-3 py-3\">\n {message.text ? (\n <div className=\"whitespace-pre-wrap break-words text-sm leading-relaxed text-foreground\">\n {message.text}\n </div>\n ) : (\n <div className=\"text-sm text-muted-foreground\">No text content</div>\n )}\n {tools.length > 0 ? (\n <div className=\"space-y-2\">\n {tools.map((tool, index) => (\n <details\n key={`${message.id ?? message.index}-tool-${index}`}\n className=\"rounded-md border bg-muted/30 px-3 py-2\"\n >\n <summary className=\"cursor-pointer text-xs font-medium text-foreground\">\n {tool.toolName ?? tool.name ?? \"tool-call\"}\n </summary>\n <RawBlock value={tool} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction EvidenceStat({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"min-w-0\">\n <div className=\"text-[11px] text-muted-foreground\">{label}</div>\n <div className=\"mt-1 truncate text-sm font-medium text-foreground\">\n {value}\n </div>\n </div>\n );\n}\n\nfunction DiagnosisPanel({\n run,\n eventCount,\n toolCount,\n}: {\n run: ThreadRun;\n eventCount: number;\n toolCount: number;\n}) {\n const diagnosis = runDiagnosis(run);\n const isStoppedByUser = diagnosis.code === \"aborted:user\";\n const isScheduled =\n run.id?.startsWith(\"job-\") || run.dispatchMode === \"background-processing\";\n const workerClaimed = run.dispatchMode === \"background-processing\";\n const staleThreshold = isScheduled\n ? workerClaimed\n ? \"45s after claim\"\n : \"90s before claim\"\n : \"15s\";\n return (\n <section\n className={cn(\n \"border-b px-5 py-4\",\n isStoppedByUser ? \"bg-muted/20\" : \"bg-destructive/[0.04]\",\n )}\n aria-label=\"Run diagnosis\"\n >\n <div className=\"flex items-start gap-3\">\n <span\n aria-hidden=\"true\"\n className={cn(\n \"mt-1.5 size-2 shrink-0 rounded-full\",\n isStoppedByUser ? \"bg-muted-foreground/50\" : \"bg-destructive\",\n )}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-start justify-between gap-2\">\n <div>\n <h2 className=\"text-sm font-semibold text-foreground\">\n {diagnosis.title}\n </h2>\n <p className=\"mt-1 max-w-3xl text-sm leading-relaxed text-muted-foreground\">\n {diagnosis.summary}\n </p>\n </div>\n <span className=\"font-mono text-[11px] text-muted-foreground\">\n {diagnosis.code}\n </span>\n </div>\n <div className=\"mt-3 flex items-start gap-2 text-xs text-foreground\">\n <IconInfoCircle className=\"mt-0.5 size-3.5 shrink-0 text-muted-foreground\" />\n <span>\n <span className=\"font-medium\">Next check:</span>{\" \"}\n {diagnosis.nextStep}\n </span>\n </div>\n </div>\n </div>\n <div className=\"mt-4 grid gap-3 border-t pt-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-7\">\n <EvidenceStat\n label=\"Run type\"\n value={isScheduled ? \"Scheduled job\" : \"Interactive chat\"}\n />\n <EvidenceStat\n label=\"Worker claim\"\n value={workerClaimed ? \"Claimed\" : \"Not recorded\"}\n />\n <EvidenceStat\n label=\"Last heartbeat\"\n value={formatDate(run.heartbeatAt)}\n />\n <EvidenceStat\n label=\"Last progress\"\n value={formatDate(run.lastProgressAt)}\n />\n <EvidenceStat label=\"Stale threshold\" value={staleThreshold} />\n <EvidenceStat\n label=\"Recovery payload\"\n value={run.hasDispatchPayload ? \"Retained\" : \"Not retained\"}\n />\n <EvidenceStat\n label=\"Worker stage\"\n value={\n diagnosticStage(run.workerStage) ||\n diagnosticStage(run.diagStage) ||\n \"Not recorded\"\n }\n />\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground\">\n <span>\n Evidence:{\" \"}\n <span className=\"font-medium text-foreground\">\n {eventCount.toLocaleString()}\n </span>{\" \"}\n retained events\n </span>\n <span aria-hidden=\"true\">·</span>\n <span>\n <span className=\"font-medium text-foreground\">\n {toolCount.toLocaleString()}\n </span>{\" \"}\n tool starts\n </span>\n <span aria-hidden=\"true\">·</span>\n <span>Liveness uses the newer heartbeat or progress timestamp.</span>\n </div>\n </section>\n );\n}\n\nfunction RunTimeline({ run }: { run: ThreadRun }) {\n const summary = summarizeEvents(run.events);\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-wrap items-center justify-between gap-3 border-b pb-3\">\n <div className=\"flex items-center gap-2\">\n <IconActivity className=\"size-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium text-foreground\">\n {run.events.length.toLocaleString()} events retained\n </span>\n <span className=\"text-xs text-muted-foreground\">\n {summary.toolStarts} tool starts\n </span>\n </div>\n <span className=\"text-xs text-muted-foreground\">\n Started {formatDate(run.startedAt)}\n </span>\n </div>\n\n {summary.toolNames.length > 0 ? (\n <div className=\"flex flex-wrap gap-2\">\n {summary.toolNames.map(([name, count]) => (\n <span\n key={name}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-muted/60 px-2 py-1 text-xs text-foreground\"\n >\n <IconTool className=\"size-3.5 text-muted-foreground\" />\n {name} <span className=\"text-muted-foreground\">×{count}</span>\n </span>\n ))}\n </div>\n ) : null}\n\n <div className=\"divide-y rounded-lg border\">\n {summary.meaningful.length > 0 ? (\n summary.meaningful.map((entry) => (\n <div\n key={`${run.id}-${entry.seq}`}\n className=\"flex items-start gap-3 px-3 py-2.5 text-xs\"\n >\n <span className=\"w-8 shrink-0 font-mono text-muted-foreground\">\n #{entry.seq}\n </span>\n <span className=\"min-w-0 flex-1 break-words text-foreground\">\n {eventLabel(entry.event)}\n </span>\n </div>\n ))\n ) : (\n <div className=\"px-3 py-4 text-sm text-muted-foreground\">\n No summarized events were retained for this run.\n </div>\n )}\n </div>\n\n <details className=\"rounded-lg border\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-2.5 text-xs font-medium text-foreground\">\n <span>Show raw event stream</span>\n <span className=\"font-normal text-muted-foreground\">\n {run.events.length.toLocaleString()} records\n </span>\n </summary>\n <div className=\"space-y-2 border-t p-3\">\n {run.events.map((entry) => (\n <details\n key={`${run.id}-raw-${entry.seq}`}\n className=\"rounded-md border bg-muted/20 px-3 py-2\"\n >\n <summary className=\"cursor-pointer text-xs text-foreground\">\n #{entry.seq} {eventLabel(entry.event)}\n </summary>\n <RawBlock value={entry.event} className=\"mt-2 max-h-72\" />\n </details>\n ))}\n </div>\n </details>\n </div>\n );\n}\n\nfunction ThreadDetail({ detail }: { detail: ThreadDebugResponse }) {\n const rawBundle = useMemo(\n () => ({\n thread: detail.thread,\n debug: detail.debug,\n debugRuns: detail.debugRuns,\n queuedMessages: detail.queuedMessages,\n threadData: detail.threadData,\n runs: detail.runs,\n traces: detail.traces,\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }),\n [detail],\n );\n const primaryRun =\n detail.runs.find((run) => run.id === detail.lookup?.runId) ??\n detail.runs[0] ??\n null;\n const eventCount = detail.runs.reduce(\n (total, run) => total + run.events.length,\n 0,\n );\n const toolCount = detail.runs.reduce(\n (total, run) => total + summarizeEvents(run.events).toolStarts,\n 0,\n );\n\n return (\n <div className=\"min-w-0\">\n <div className=\"border-b px-5 py-4\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"truncate text-base font-semibold text-foreground\">\n {detail.thread.title || detail.thread.preview || detail.thread.id}\n </div>\n <div className=\"mt-1 flex min-w-0 items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"truncate font-mono\">\n {detail.lookup?.runId || detail.thread.id}\n </span>\n {detail.lookup?.runId ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0\"\n title=\"Copy run ID\"\n aria-label=\"Copy run ID\"\n onClick={() =>\n void navigator.clipboard?.writeText(\n detail.lookup?.runId ?? \"\",\n )\n }\n >\n <IconCopy className=\"size-3.5\" />\n </Button>\n ) : null}\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n {primaryRun ? (\n <Badge\n variant={\n primaryRun.status === \"errored\" ? \"destructive\" : \"secondary\"\n }\n >\n {primaryRun.status}\n </Badge>\n ) : null}\n <Badge variant=\"outline\">{detail.source.label}</Badge>\n </div>\n </div>\n <div className=\"mt-3 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground\">\n <span className=\"truncate\">{detail.thread.ownerEmail}</span>\n <span aria-hidden=\"true\">·</span>\n <span>{detail.messages.length} messages</span>\n <span aria-hidden=\"true\">·</span>\n <span>{detail.runs.length} runs</span>\n <span aria-hidden=\"true\">·</span>\n <span>updated {formatDate(detail.thread.updatedAt)}</span>\n </div>\n </div>\n\n {primaryRun ? (\n <DiagnosisPanel\n run={primaryRun}\n eventCount={eventCount}\n toolCount={toolCount}\n />\n ) : null}\n\n <Tabs defaultValue=\"overview\" className=\"p-5\">\n <TabsList className=\"h-9\">\n <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n <TabsTrigger value=\"timeline\">Timeline</TabsTrigger>\n <TabsTrigger value=\"transcript\">Transcript</TabsTrigger>\n <TabsTrigger value=\"technical\">Technical</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"overview\" className=\"mt-4 space-y-4\">\n <div className=\"flex items-start gap-2 border-b pb-4 text-sm text-muted-foreground\">\n <IconInfoCircle className=\"mt-0.5 size-4 shrink-0\" />\n <p className=\"max-w-2xl leading-relaxed\">\n This is the compact readout. Open Timeline for the last meaningful\n signals, Transcript for persisted messages and tool calls, or\n Technical for raw records.\n </p>\n </div>\n <div className=\"grid gap-4 sm:grid-cols-2 xl:grid-cols-3\">\n <EvidenceStat\n label=\"Created\"\n value={formatDate(detail.thread.createdAt)}\n />\n <EvidenceStat\n label=\"Updated\"\n value={formatDate(detail.thread.updatedAt)}\n />\n <EvidenceStat label=\"Source\" value={detail.source.label} />\n <EvidenceStat\n label=\"Messages\"\n value={detail.messages.length.toLocaleString()}\n />\n <EvidenceStat\n label=\"Retained events\"\n value={eventCount.toLocaleString()}\n />\n <EvidenceStat\n label=\"Tool starts\"\n value={toolCount.toLocaleString()}\n />\n </div>\n {detail.messages.length === 0 && eventCount > 0 ? (\n <div className=\"flex items-start gap-2 rounded-lg border bg-muted/20 px-3 py-3 text-sm text-muted-foreground\">\n <IconActivity className=\"mt-0.5 size-4 shrink-0\" />\n <span>\n No persisted messages are available, but this run retained{\" \"}\n {eventCount.toLocaleString()} execution events. The timeline is\n the authoritative audit trail for this run.\n </span>\n </div>\n ) : null}\n </TabsContent>\n\n <TabsContent value=\"timeline\" className=\"mt-4 space-y-5\">\n {detail.runs.length > 0 ? (\n detail.runs.map((run) => (\n <section\n key={run.id}\n className=\"border-b pb-5 last:border-b-0 last:pb-0\"\n >\n <div className=\"mb-3 flex flex-wrap items-center gap-2\">\n <Badge\n variant={\n run.status === \"errored\" ? \"destructive\" : \"outline\"\n }\n >\n {run.status}\n </Badge>\n <span className=\"font-mono text-xs text-muted-foreground\">\n {run.id}\n </span>\n <span className=\"text-xs text-muted-foreground\">\n {formatDuration(run.durationMs)}\n </span>\n </div>\n <RunTimeline run={run} />\n </section>\n ))\n ) : (\n <div className=\"rounded-lg border border-dashed px-4 py-8 text-center text-sm text-muted-foreground\">\n No retained runs.\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"transcript\" className=\"mt-4 space-y-3\">\n {detail.messages.length > 0 ? (\n detail.messages.map((message) => (\n <MessageBlock\n key={message.id ?? `message-${message.index}`}\n message={message}\n />\n ))\n ) : (\n <div className=\"rounded-lg border border-dashed px-4 py-8 text-center text-sm text-muted-foreground\">\n <div>No persisted messages.</div>\n {eventCount > 0 ? (\n <div className=\"mt-1\">\n Open Timeline to audit the retained execution events.\n </div>\n ) : null}\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"technical\" className=\"mt-4 space-y-3\">\n <details className=\"rounded-lg border\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-3 text-sm font-medium text-foreground\">\n <span>Run records</span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n {detail.runs.length} {detail.runs.length === 1 ? \"run\" : \"runs\"}\n </span>\n </summary>\n <div className=\"space-y-4 border-t p-3\">\n {detail.runs.length > 0 ? (\n detail.runs.map((run) => (\n <div key={run.id} className=\"space-y-3\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge\n variant={\n run.status === \"errored\" ? \"destructive\" : \"outline\"\n }\n >\n {run.status}\n </Badge>\n <span className=\"break-all font-mono text-xs text-foreground\">\n {run.id}\n </span>\n </div>\n <div className=\"grid gap-3 text-xs sm:grid-cols-2 xl:grid-cols-3\">\n <EvidenceStat\n label=\"Failure code\"\n value={run.errorCode || \"n/a\"}\n />\n <EvidenceStat\n label=\"Terminal reason\"\n value={run.terminalReason || run.abortReason || \"n/a\"}\n />\n <EvidenceStat\n label=\"Dispatch mode\"\n value={run.dispatchMode || \"foreground\"}\n />\n <EvidenceStat\n label=\"Last stage\"\n value={\n diagnosticStage(run.workerStage) ||\n diagnosticStage(run.diagStage) ||\n \"n/a\"\n }\n />\n <EvidenceStat\n label=\"Duration\"\n value={formatDuration(\n run.durationMs ??\n (run.completedAt == null\n ? null\n : run.completedAt - run.startedAt),\n )}\n />\n <EvidenceStat\n label=\"Last progress\"\n value={formatDate(\n run.lastProgressAt ?? run.heartbeatAt,\n )}\n />\n <EvidenceStat\n label=\"In-flight marker\"\n value={formatDate(run.inFlightSince)}\n />\n <EvidenceStat\n label=\"Recovery payload\"\n value={\n run.hasDispatchPayload ? \"retained\" : \"not retained\"\n }\n />\n </div>\n {run.errorDetail ? (\n <div className=\"rounded-md bg-destructive/10 px-3 py-2 text-xs leading-relaxed text-destructive\">\n {run.errorDetail}\n </div>\n ) : null}\n </div>\n ))\n ) : (\n <div className=\"text-sm text-muted-foreground\">\n No retained run records.\n </div>\n )}\n </div>\n </details>\n\n <details className=\"rounded-lg border\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-3 text-sm font-medium text-foreground\">\n <span>Traces, feedback, and evaluations</span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n diagnostic records\n </span>\n </summary>\n <div className=\"grid gap-4 border-t p-3 lg:grid-cols-2\">\n <div>\n <div className=\"mb-2 text-xs font-medium text-foreground\">\n Debug runs\n </div>\n <RawBlock\n value={\n detail.debugRuns.length > 0\n ? detail.debugRuns\n : (detail.debug ?? {})\n }\n />\n </div>\n <div>\n <div className=\"mb-2 text-xs font-medium text-foreground\">\n Trace summaries\n </div>\n <RawBlock value={detail.traces.summaries} />\n </div>\n <div>\n <div className=\"mb-2 text-xs font-medium text-foreground\">\n Trace spans\n </div>\n <RawBlock value={detail.traces.spans} />\n </div>\n <div>\n <div className=\"mb-2 text-xs font-medium text-foreground\">\n Feedback and evals\n </div>\n <RawBlock\n value={{\n feedback: detail.feedback,\n satisfaction: detail.satisfaction,\n evals: detail.evals,\n checkpoints: detail.checkpoints,\n }}\n />\n </div>\n </div>\n </details>\n\n <details className=\"rounded-lg border\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-3 text-sm font-medium text-foreground\">\n <span>Raw thread bundle</span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n JSON\n </span>\n </summary>\n <div className=\"space-y-3 border-t p-3\">\n <RawBlock value={rawBundle} />\n <RawBlock value={detail.rawThreadData} />\n </div>\n </details>\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n\nexport default function ThreadDebugRoute() {\n const t = useT();\n const [routeSearchParams, setRouteSearchParams] = useSearchParams();\n const mode = parseMode(routeSearchParams.get(\"mode\"));\n const sourceId =\n routeSearchParams.get(\"source\") ||\n (mode === \"failures\" ? \"all\" : \"current\");\n const ownerEmail = routeSearchParams.get(\"owner\") || \"\";\n const query = routeSearchParams.get(\"query\") || \"\";\n const status = parseFailureStatus(routeSearchParams.get(\"status\"));\n const regime = parseFailureRegime(routeSearchParams.get(\"regime\"));\n const range = parseFailureRange(routeSearchParams.get(\"range\"));\n const runId = routeSearchParams.get(\"runId\") || \"\";\n const threadId = routeSearchParams.get(\"threadId\") || \"\";\n const inspectSourceId = routeSearchParams.get(\"inspectSource\") || \"\";\n const [lookupId, setLookupId] = useState(\"\");\n const [searchFocused, setSearchFocused] = useState(false);\n\n function updateRouteState(\n updates: Record<string, string | null | undefined>,\n ) {\n const next = new URLSearchParams(routeSearchParams);\n for (const [key, value] of Object.entries(updates)) {\n if (value == null || value === \"\") next.delete(key);\n else next.set(key, value);\n }\n setRouteSearchParams(next, { replace: true });\n }\n\n const sourcesQuery = useActionQuery<{\n access: {\n viewerEmail: string;\n orgId: string | null;\n role: string | null;\n envAdmin: boolean;\n canInspectAll: boolean;\n memberCount: number;\n };\n sources: ThreadDebugSource[];\n }>(\"list-agent-thread-sources\", {});\n const { data: sourcesData } = sourcesQuery;\n\n const sources: ThreadDebugSource[] = sourcesData?.sources ?? [];\n const failureParams = useMemo(\n () => ({\n sourceId,\n ownerEmail: ownerEmail.trim() || undefined,\n status,\n regime,\n lookbackHours: FAILURE_RANGE_HOURS[range],\n limit: 25,\n }),\n [ownerEmail, range, regime, sourceId, status],\n );\n const {\n data: failuresData,\n isLoading: failuresLoading,\n error: failuresError,\n refetch: refetchFailures,\n } = useActionQuery<AgentRunFailuresResponse>(\n \"list-agent-run-failures\",\n failureParams,\n { enabled: mode === \"failures\" },\n );\n const failures = failuresData?.failures ?? EMPTY_FAILURES;\n const failurePatterns = useMemo(() => {\n const patterns = new Map<string, { label: string; count: number }>();\n for (const failure of failures) {\n const diagnosis = runDiagnosis(failure);\n const current = patterns.get(diagnosis.code);\n patterns.set(diagnosis.code, {\n label: diagnosis.title,\n count: (current?.count ?? 0) + 1,\n });\n }\n return [...patterns.values()].sort((a, b) => b.count - a.count);\n }, [failures]);\n const unavailableFailureSources = (failuresData?.sources ?? []).filter(\n (source) => source.status !== \"ok\",\n );\n const failureSourceStatusLabels = {\n ok: \"ok\",\n disconnected: t(\"dispatch.pages.threadDebugDisconnected\", {\n defaultValue: \"disconnected\",\n }),\n unsupported: t(\"dispatch.pages.threadDebugUnsupported\", {\n defaultValue: \"unsupported\",\n }),\n unavailable: t(\"dispatch.pages.threadDebugUnavailable\", {\n defaultValue: \"unavailable\",\n }),\n };\n\n const threadSourceId = sourceId === \"all\" ? \"current\" : sourceId;\n const detailSourceId =\n runId && inspectSourceId ? inspectSourceId : threadSourceId;\n const searchParams = useMemo(\n () => ({\n sourceId: threadSourceId,\n query: query.trim() || undefined,\n limit: 25,\n }),\n [query, threadSourceId],\n );\n const {\n data: searchData,\n isLoading: searchLoading,\n error: searchError,\n refetch: refetchSearch,\n } = useActionQuery<{\n count: number;\n threads: ThreadSearchResult[];\n access: { scope: string; canInspectAll: boolean };\n source: { id: string; label: string };\n }>(\"search-agent-threads\", searchParams, { enabled: mode === \"threads\" });\n const searchThreads: ThreadSearchResult[] = searchData?.threads ?? [];\n const ownerEmailSuggestions = useMemo(() => {\n const emailQuery = query.trim().includes(\"@\")\n ? query.trim().toLowerCase()\n : \"\";\n return [...new Set(searchThreads.map((thread) => thread.ownerEmail))]\n .filter(\n (email) => !emailQuery || email.toLowerCase().includes(emailQuery),\n )\n .slice(0, 8);\n }, [query, searchThreads]);\n\n const detailParams = useMemo(\n () => ({\n sourceId: detailSourceId,\n ...(runId ? { runId } : { threadId }),\n ownerEmail: ownerEmail.trim() || undefined,\n maxRuns: 20,\n maxEvents: 800,\n maxTraceSpans: 600,\n }),\n [detailSourceId, ownerEmail, runId, threadId],\n );\n const {\n data: detail,\n isLoading: detailLoading,\n error: detailError,\n refetch: refetchDetail,\n } = useActionQuery<ThreadDebugResponse>(\n \"get-agent-thread-debug\",\n detailParams,\n {\n enabled: Boolean(runId || threadId),\n },\n );\n\n const detailPane = (\n <section className=\"min-w-0\">\n {detailError ? (\n <ActionQueryError\n error={detailError}\n onRetry={() => void refetchDetail()}\n />\n ) : null}\n {detailLoading ? (\n <div className=\"p-5\">\n <Skeleton className=\"h-6 w-72\" />\n <Skeleton className=\"mt-3 h-4 w-96\" />\n <Skeleton className=\"mt-6 h-[520px] w-full\" />\n </div>\n ) : detail ? (\n <ThreadDetail detail={detail} />\n ) : (\n <div className=\"flex min-h-[520px] flex-col items-center justify-center px-5 text-center text-sm text-muted-foreground\">\n <IconFileSearch className=\"mb-2 size-5\" />\n <div className=\"font-medium text-foreground\">\n Choose a run to inspect\n </div>\n <div className=\"mt-1 max-w-xs leading-relaxed\">\n See the diagnosis first, then open the timeline or technical\n evidence.\n </div>\n </div>\n )}\n </section>\n );\n\n return (\n <DispatchShell\n title={t(\"dispatch.pages.threadDebugTitle\", {\n defaultValue: \"Thread Debug\",\n })}\n description={t(\"dispatch.pages.threadDebugDescription\", {\n defaultValue: \"Find the failure pattern, then inspect the evidence.\",\n })}\n >\n <div className=\"space-y-4\">\n {sourcesQuery.isError ? (\n <ActionQueryError\n error={sourcesQuery.error}\n onRetry={() => void sourcesQuery.refetch()}\n />\n ) : null}\n <Tabs\n value={mode}\n onValueChange={(value) => {\n const nextMode = parseMode(value);\n updateRouteState({\n mode: nextMode,\n source:\n nextMode === \"threads\" && sourceId === \"all\"\n ? \"current\"\n : sourceId,\n runId: null,\n threadId: null,\n inspectSource: null,\n });\n }}\n >\n <TabsList>\n <TabsTrigger value=\"failures\">\n {t(\"dispatch.pages.threadDebugFailedRuns\", {\n defaultValue: \"Failed runs\",\n })}\n </TabsTrigger>\n <TabsTrigger value=\"threads\">\n {t(\"dispatch.pages.threadDebugThreads\", {\n defaultValue: \"Threads\",\n })}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"failures\" className=\"mt-4 space-y-4\">\n <section className=\"border-b pb-4\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <h2 className=\"text-sm font-semibold text-foreground\">\n Run health\n </h2>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Start with the dominant failure pattern, then open one run.\n </p>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => void refetchFailures()}\n aria-label={t(\"dispatch.pages.threadDebugRefreshFailures\", {\n defaultValue: \"Refresh failed runs\",\n })}\n >\n <IconRefresh className=\"size-4\" />\n </Button>\n </div>\n <div className=\"mt-3 grid gap-2 sm:grid-cols-2 xl:grid-cols-[200px_minmax(180px,1fr)_180px_160px_150px]\">\n <Select\n value={sourceId}\n onValueChange={(value) =>\n updateRouteState({\n source: value,\n runId: null,\n threadId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugSource\", {\n defaultValue: \"Source\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">\n {t(\"dispatch.pages.threadDebugAllSources\", {\n defaultValue: \"All sources\",\n })}\n </SelectItem>\n {sources.map((source) => (\n <SelectItem key={source.id} value={source.id}>\n {source.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n value={ownerEmail}\n onChange={(event) =>\n updateRouteState({ owner: event.target.value })\n }\n aria-label={t(\"dispatch.pages.threadDebugOwner\", {\n defaultValue: \"Owner email\",\n })}\n placeholder={t(\"dispatch.pages.threadDebugOwner\", {\n defaultValue: \"Owner email\",\n })}\n />\n <Select\n value={status}\n onValueChange={(value) =>\n updateRouteState({\n status: parseFailureStatus(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugStatus\", {\n defaultValue: \"Status\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">\n {t(\"dispatch.pages.threadDebugAllStatuses\", {\n defaultValue: \"All statuses\",\n })}\n </SelectItem>\n <SelectItem value=\"errored\">\n {t(\"dispatch.pages.threadDebugErrored\", {\n defaultValue: \"Errored\",\n })}\n </SelectItem>\n <SelectItem value=\"aborted\">\n {t(\"dispatch.pages.threadDebugAborted\", {\n defaultValue: \"Aborted\",\n })}\n </SelectItem>\n <SelectItem value=\"truncated\">\n {t(\"dispatch.pages.threadDebugTruncated\", {\n defaultValue: \"Truncated\",\n })}\n </SelectItem>\n </SelectContent>\n </Select>\n <Select\n value={regime}\n onValueChange={(value) =>\n updateRouteState({\n regime: parseFailureRegime(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger aria-label=\"Run type\">\n <SelectValue placeholder=\"Run type\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All run types</SelectItem>\n <SelectItem value=\"interactive\">\n Interactive chats\n </SelectItem>\n <SelectItem value=\"scheduled\">Scheduled jobs</SelectItem>\n </SelectContent>\n </Select>\n <Select\n value={range}\n onValueChange={(value) =>\n updateRouteState({\n range: parseFailureRange(value),\n runId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugRange\", {\n defaultValue: \"Time range\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"24h\">\n {t(\"dispatch.pages.threadDebugRange24h\", {\n defaultValue: \"Last 24 hours\",\n })}\n </SelectItem>\n <SelectItem value=\"7d\">\n {t(\"dispatch.pages.threadDebugRange7d\", {\n defaultValue: \"Last 7 days\",\n })}\n </SelectItem>\n <SelectItem value=\"30d\">\n {t(\"dispatch.pages.threadDebugRange30d\", {\n defaultValue: \"Last 30 days\",\n })}\n </SelectItem>\n </SelectContent>\n </Select>\n </div>\n {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 })\n }\n />\n ))}\n </div>\n </section>\n <div className=\"min-w-0\">{detailPane}</div>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"threads\" className=\"mt-4 space-y-4\">\n <section className=\"border-b pb-4\">\n <div className=\"grid gap-2 pt-3 lg:grid-cols-2 xl:grid-cols-[auto_180px_minmax(220px,1fr)_auto_auto]\">\n <Select\n value={threadSourceId}\n onValueChange={(value) =>\n updateRouteState({\n source: value,\n runId: null,\n threadId: null,\n inspectSource: null,\n })\n }\n >\n <SelectTrigger>\n <SelectValue\n placeholder={t(\"dispatch.pages.threadDebugSource\", {\n defaultValue: \"Source\",\n })}\n />\n </SelectTrigger>\n <SelectContent>\n {sources.map((source) => (\n <SelectItem key={source.id} value={source.id}>\n {source.label}\n </SelectItem>\n ))}\n {sources.length === 0 ? (\n <SelectItem value=\"current\">\n {t(\"dispatch.pages.threadDebugCurrentDatabase\", {\n defaultValue: \"Current Dispatch DB\",\n })}\n </SelectItem>\n ) : null}\n </SelectContent>\n </Select>\n <Popover\n open={searchFocused && ownerEmailSuggestions.length > 0}\n onOpenChange={setSearchFocused}\n >\n <PopoverAnchor asChild>\n <span className=\"block\">\n <Input\n value={query}\n onChange={(event) =>\n updateRouteState({ query: event.target.value })\n }\n onFocus={() => setSearchFocused(true)}\n placeholder={t(\n \"dispatch.pages.threadDebugSearchPlaceholder\",\n {\n defaultValue: \"Search threads or email\",\n },\n )}\n aria-label=\"Search threads or email\"\n />\n </span>\n </PopoverAnchor>\n <PopoverContent\n align=\"start\"\n sideOffset={6}\n className=\"w-[var(--radix-popover-trigger-width)] p-1\"\n onOpenAutoFocus={(event) => event.preventDefault()}\n >\n <div role=\"listbox\" aria-label=\"Owner email suggestions\">\n {ownerEmailSuggestions.map((email) => (\n <button\n key={email}\n type=\"button\"\n role=\"option\"\n aria-selected=\"false\"\n className=\"flex w-full items-center rounded-sm px-2 py-1.5 text-left text-sm text-foreground outline-none hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n updateRouteState({ query: email });\n setSearchFocused(false);\n }}\n >\n {email}\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n <Button\n type=\"button\"\n size=\"icon\"\n onClick={() => void refetchSearch()}\n aria-label=\"Search threads or email\"\n title=\"Search threads or email\"\n >\n <IconSearch className=\"size-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => void refetchSearch()}\n aria-label={t(\"dispatch.pages.threadDebugRefreshThreads\", {\n defaultValue: \"Refresh threads\",\n })}\n >\n <IconRefresh className=\"size-4\" />\n </Button>\n <details className=\"order-first justify-self-start rounded-lg border\">\n <summary\n aria-label=\"Advanced lookup\"\n title=\"Advanced lookup\"\n className=\"flex size-10 cursor-pointer list-none items-center justify-center text-foreground\"\n >\n <IconAdjustmentsHorizontal\n aria-hidden=\"true\"\n className=\"size-4\"\n />\n <span className=\"sr-only\">Advanced lookup</span>\n </summary>\n <div className=\"grid gap-3 border-t p-3 lg:w-80\">\n <Input\n value={lookupId}\n onChange={(event) => setLookupId(event.target.value)}\n placeholder={t(\n \"dispatch.pages.threadDebugLookupPlaceholder\",\n {\n defaultValue: \"Paste thread or request/run ID\",\n },\n )}\n className=\"font-mono\"\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n const trimmed = lookupId.trim();\n if (!trimmed) return;\n updateRouteState(\n trimmed.startsWith(\"run-\")\n ? {\n runId: trimmed,\n threadId: null,\n inspectSource: null,\n }\n : {\n threadId: trimmed,\n runId: null,\n inspectSource: null,\n },\n );\n }}\n >\n <IconFileSearch className=\"size-4\" />\n {t(\"dispatch.pages.threadDebugInspect\", {\n defaultValue: \"Inspect\",\n })}\n </Button>\n </div>\n </details>\n </div>\n </section>\n\n {searchError ? (\n <ActionQueryError\n error={searchError}\n onRetry={() => void refetchSearch()}\n />\n ) : null}\n\n <div className=\"overflow-hidden rounded-xl border bg-card\">\n <div className=\"grid xl:grid-cols-[360px_minmax(0,1fr)]\">\n <section className=\"min-h-[560px] border-b xl:border-b-0 xl:border-r\">\n <div className=\"max-h-[760px] overflow-auto\">\n {searchLoading ? (\n <>\n <Skeleton className=\"mx-4 mt-4 h-16 w-[calc(100%-2rem)]\" />\n <Skeleton className=\"mx-4 mt-2 h-16 w-[calc(100%-2rem)]\" />\n <Skeleton className=\"mx-4 mt-2 h-16 w-[calc(100%-2rem)]\" />\n </>\n ) : null}\n {!searchLoading && searchThreads.length === 0 ? (\n <div className=\"flex min-h-64 flex-col items-center justify-center px-4 text-center text-sm text-muted-foreground\">\n <IconDatabase className=\"mb-2 size-5\" />\n {t(\"dispatch.pages.threadDebugNoThreads\", {\n defaultValue: \"No threads found.\",\n })}\n </div>\n ) : null}\n {searchThreads.map((result) => (\n <ResultCard\n key={result.id}\n result={result}\n selected={threadId === result.id}\n onSelect={() =>\n updateRouteState({\n threadId: result.id,\n runId: null,\n inspectSource: null,\n })\n }\n />\n ))}\n </div>\n </section>\n <div className=\"min-w-0\">{detailPane}</div>\n </div>\n </div>\n </TabsContent>\n </Tabs>\n </div>\n </DispatchShell>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/vault.tsx"],"names":[],"mappings":"AA+EA,wBAAgB,IAAI;;IAEnB;AA+pBD,MAAM,CAAC,OAAO,UAAU,UAAU,oDA4NjC"}
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../../src/routes/pages/vault.tsx"],"names":[],"mappings":"AA+EA,wBAAgB,IAAI;;IAEnB;AA+pBD,MAAM,CAAC,OAAO,UAAU,UAAU,oDAiOjC"}
@@ -197,7 +197,7 @@ export default function VaultRoute() {
197
197
  return acc;
198
198
  }, {});
199
199
  const pendingRequests = (requests || []).filter((r) => r.status === "pending");
200
- return (_jsx(DispatchShell, { title: "Vault", description: "Centralized secret management for your workspace. Store credentials once and sync them to apps.", children: _jsxs(Tabs, { defaultValue: "secrets", children: [_jsxs(TabsList, { children: [_jsxs(TabsTrigger, { value: "secrets", children: ["Secrets ", (secrets?.length || 0) > 0 && `(${secrets?.length})`] }), _jsxs(TabsTrigger, { value: "requests", children: ["Requests", " ", pendingRequests.length > 0 && (_jsx(Badge, { variant: "secondary", className: "ml-1.5 h-5 px-1.5 text-xs bg-amber-500/10 text-amber-700 dark:text-amber-400", children: pendingRequests.length }))] }), canManageVault ? (_jsx(TabsTrigger, { value: "audit", children: "Audit" })) : null] }), _jsxs(TabsContent, { value: "secrets", className: "mt-4 space-y-3", children: [!accessReady ? (_jsx("div", { className: "rounded-2xl border border-dashed px-6 py-12 text-center text-sm text-muted-foreground", children: "Checking workspace access\u2026" })) : !canManageVault ? (_jsxs("div", { className: "rounded-2xl border border-dashed px-6 py-12 text-center", children: [_jsx(IconKey, { size: 32, className: "mx-auto text-muted-foreground/50" }), _jsx("h3", { className: "mt-3 text-sm font-medium text-foreground", children: "Vault management is restricted" }), _jsx("p", { className: "mx-auto mt-1 max-w-md text-sm text-muted-foreground", children: "Workspace owners and admins manage shared secret values. Use a request from the app that needs a key, and an admin can review it from the Requests tab." })] })) : secretsQuery.isError ||
200
+ return (_jsx(DispatchShell, { title: "Vault", description: "Centralized secret management for your workspace. Store credentials once and sync them to apps.", children: _jsxs(Tabs, { defaultValue: "secrets", children: [_jsxs(TabsList, { children: [_jsxs(TabsTrigger, { value: "secrets", children: ["Secrets ", (secrets?.length || 0) > 0 && `(${secrets?.length})`] }), _jsxs(TabsTrigger, { value: "requests", children: ["Requests", " ", pendingRequests.length > 0 && (_jsx(Badge, { variant: "secondary", className: "ml-1.5 h-5 px-1.5 text-xs bg-amber-500/10 text-amber-700 dark:text-amber-400", children: pendingRequests.length }))] }), canManageVault ? (_jsx(TabsTrigger, { value: "audit", children: "Audit" })) : null] }), _jsxs(TabsContent, { value: "secrets", className: "mt-4 space-y-3", children: [!accessReady ? (_jsx("div", { className: "space-y-3", children: Array.from({ length: 3 }).map((_, index) => (_jsxs("div", { className: "rounded-lg bg-card px-4 py-4", children: [_jsx(Skeleton, { className: "h-4 w-1/3" }), _jsx(Skeleton, { className: "mt-2 h-3 w-2/3" })] }, index))) })) : !canManageVault ? (_jsxs("div", { className: "rounded-2xl border border-dashed px-6 py-12 text-center", children: [_jsx(IconKey, { size: 32, className: "mx-auto text-muted-foreground/50" }), _jsx("h3", { className: "mt-3 text-sm font-medium text-foreground", children: "Vault management is restricted" }), _jsx("p", { className: "mx-auto mt-1 max-w-md text-sm text-muted-foreground", children: "Workspace owners and admins manage shared secret values. Use a request from the app that needs a key, and an admin can review it from the Requests tab." })] })) : secretsQuery.isError ||
201
201
  grantsQuery.isError ||
202
202
  accessQuery.isError ? (_jsx(ActionQueryError, { error: secretsQuery.error ?? grantsQuery.error ?? accessQuery.error, onRetry: () => {
203
203
  void secretsQuery.refetch();