@tonyclaw/agent-inspector 3.0.42 → 3.0.43

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 (60) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-7Gr3T28l.js → CompareDrawer-BAXxwTwT.js} +1 -1
  3. package/.output/public/assets/{InspectorPet-BYY_Sa_k.js → InspectorPet-xYuGV4Qz.js} +167 -167
  4. package/.output/public/assets/ProxyViewerContainer-B6GZnUWi.js +126 -0
  5. package/.output/public/assets/{ReplayDialog-By1tvcuO.js → ReplayDialog-D73pyIg3.js} +1 -1
  6. package/.output/public/assets/{RequestAnatomy-AbVJG4VA.js → RequestAnatomy-CSDta_nu.js} +1 -1
  7. package/.output/public/assets/{ResponseView-BqfnTwq-.js → ResponseView-C4aIUPby.js} +1 -1
  8. package/.output/public/assets/{StreamingChunkSequence-BK_GhL1n.js → StreamingChunkSequence-D4xxosLx.js} +1 -1
  9. package/.output/public/assets/{_sessionId-BsoVln_N.js → _sessionId-CZHbJyWO.js} +1 -1
  10. package/.output/public/assets/{_sessionId-BEVn_RD0.js → _sessionId-DvuNLzSE.js} +1 -1
  11. package/.output/public/assets/{index-BmKouSES.js → index-B17u7JMC.js} +16 -22
  12. package/.output/public/assets/index-BWjeqxbk.css +1 -0
  13. package/.output/public/assets/{index-DPsfwdop.js → index-C0g79BAs.js} +1 -1
  14. package/.output/public/assets/{index-DavUo6mY.js → index-CmEO8ykj.js} +1 -1
  15. package/.output/public/assets/{index-D1Ar_Dtb.js → index-DZ_wpqQM.js} +1 -1
  16. package/.output/public/assets/{json-viewer-vkLlnvyf.js → json-viewer-CuWU-H6K.js} +1 -1
  17. package/.output/public/assets/{jszip.min-CMLonFfU.js → jszip.min-DPJI_UKW.js} +1 -1
  18. package/.output/server/{_sessionId-DYkPEoJd.mjs → _sessionId-CoFyeOti.mjs} +2 -2
  19. package/.output/server/{_sessionId-BH52f7aR.mjs → _sessionId-Cun21KZF.mjs} +1 -1
  20. package/.output/server/_ssr/{CompareDrawer-Bt3LIoPy.mjs → CompareDrawer-Bgc2TZh_.mjs} +2 -2
  21. package/.output/server/_ssr/{InspectorPet-CikVNW8S.mjs → InspectorPet-DyK2ojeh.mjs} +20 -10
  22. package/.output/server/_ssr/{ProxyViewerContainer-BS6MZd0t.mjs → ProxyViewerContainer-hvn6oVWD.mjs} +326 -235
  23. package/.output/server/_ssr/{ReplayDialog-DxFLoYlZ.mjs → ReplayDialog-KpnrGtZ-.mjs} +3 -3
  24. package/.output/server/_ssr/{RequestAnatomy-CbLJjhKb.mjs → RequestAnatomy-uCsfucn8.mjs} +2 -2
  25. package/.output/server/_ssr/{ResponseView-Bs1sYg_8.mjs → ResponseView-C8UPqoPO.mjs} +2 -2
  26. package/.output/server/_ssr/{StreamingChunkSequence-D0dBru3U.mjs → StreamingChunkSequence-BP28I9sh.mjs} +2 -2
  27. package/.output/server/_ssr/{index-DIHmtfFU.mjs → index-BVwVoQlZ.mjs} +1 -1
  28. package/.output/server/_ssr/{index-hK95DE4-.mjs → index-Du3YNDKx.mjs} +2 -2
  29. package/.output/server/_ssr/index.mjs +2 -2
  30. package/.output/server/_ssr/{json-viewer-BfRCUg1t.mjs → json-viewer-DrE0vtlB.mjs} +2 -2
  31. package/.output/server/_ssr/{router-NjASMtmk.mjs → router-C6nWUZHK.mjs} +18 -24
  32. package/.output/server/{_tanstack-start-manifest_v-BNqjyvHx.mjs → _tanstack-start-manifest_v-rshlRaiN.mjs} +1 -1
  33. package/.output/server/index.mjs +98 -98
  34. package/package.json +5 -1
  35. package/scripts/generate-theme-scales.mjs +22 -0
  36. package/src/components/ProxyViewer.tsx +217 -103
  37. package/src/components/alerts/AlertsDialog.tsx +17 -17
  38. package/src/components/ecosystem/AgentLabDialog.tsx +11 -4
  39. package/src/components/groups/GroupsDialog.tsx +41 -26
  40. package/src/components/inspector-pet/InspectorPet.tsx +9 -9
  41. package/src/components/inspector-pet/inspectorPetLogic.ts +15 -1
  42. package/src/components/pi-agent/PiAgentPanel.tsx +12 -35
  43. package/src/components/pi-agent/piAgentChatLogic.ts +0 -24
  44. package/src/components/providers/ImportWizardDialog.tsx +1 -1
  45. package/src/components/providers/ProviderCard.tsx +4 -4
  46. package/src/components/providers/ProviderForm.tsx +11 -7
  47. package/src/components/providers/ProviderTestResultsView.tsx +15 -17
  48. package/src/components/providers/ProvidersPanel.tsx +1 -1
  49. package/src/components/providers/SettingsDialog.tsx +11 -7
  50. package/src/components/proxy-viewer/LogEntryHeader.tsx +2 -2
  51. package/src/components/proxy-viewer/TurnGroup.tsx +1 -1
  52. package/src/components/ui/icon-trigger.ts +1 -1
  53. package/src/lib/themeMode.ts +1 -5
  54. package/src/lib/uiScale.ts +8 -3
  55. package/src/routes/__root.tsx +5 -10
  56. package/styles/globals.css +35 -143
  57. package/styles/theme-scales.css +50 -0
  58. package/styles/themes.css +157 -0
  59. package/.output/public/assets/ProxyViewerContainer-CCtygisW.js +0 -126
  60. package/.output/public/assets/index-DKwrwHsI.css +0 -1
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, R as React } from "../_libs/react.mjs";
2
- import { w as withBasePath, C as CapturedLogSchema, N as DeleteInspectorGroupsResponseSchema, D as DEFAULT_CAPTURE_MODE, a as DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS, b as DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS, c as DEFAULT_TIME_DISPLAY_FORMAT, m as cn, G as LazyFeatureBoundary, y as formatTokens, B as Button, d as RuntimeConfigSchema, g as readStoredUiScalePreference, h as persistUiScalePreference, j as applyUiScalePreference, ad as CrabLogo, p as packageJson, k as normalizeUiScalePreference, P as GroupEvidenceExportResultSchema, Q as DeleteInspectorGroupResponseSchema, z as copyTextToClipboard, l as RedactedProviderDtoSchema, U as UI_SCALE_STORAGE_KEY, v as apiFormatForPath, i as isRecord, a3 as createPendingProviderTestResults, a4 as ProviderTestResultsSchema, a5 as createFailedProviderTestResults, a6 as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, a7 as MAX_PROVIDER_TEST_TIMEOUT_SECONDS, a8 as TimeDisplayFormatSchema, H as AlertSummarySchema, I as AlertListResponseSchema, r as readStoredThemeMode, e as applyThemeMode, f as persistThemeMode, ag as formatUiScale, M as InspectorGroupsListResponseSchema, J as GroupEvidenceReadResponseSchema, a9 as EcosystemPackagesResponseSchema, aa as EcosystemTaskResponseSchema, ab as EcosystemTasksResponseSchema, Z as PATH_V1_MESSAGES, _ as PATH_V1_CHAT_COMPLETIONS, $ as PATH_V1_RESPONSES, W as providerHasContextMetadata, V as ProviderScanResponseSchema, T as THEME_MODE_STORAGE_KEY, n as normalizeThemeMode, ac as EcosystemExecutionConfirmationResponseSchema, s as safeGetOwnProperty, a0 as formatContextWindowInput, X as findProviderModelMetadata, Y as formatContextWindowTokens, x as getSessionPath, q as parseOpenAIResponse, t as parseOpenAIResponsesResponse, O as OpenAIRequestSchema, u as OpenAIResponsesRequestSchema, A as AnthropicResponseSchema$1, o as AnthropicRequestSchema, ae as resolveProviderContextWindow, a1 as parseContextWindowTokensInput, a2 as previewUpstreamUrl, K as KnowledgeCandidateSchema, af as isPlainRecord, F as stripClaudeCodeBillingHeader, L as LogBodyChunkSchema, E as getStatusCategory } from "./router-NjASMtmk.mjs";
2
+ import { w as withBasePath, C as CapturedLogSchema, N as DeleteInspectorGroupsResponseSchema, D as DEFAULT_CAPTURE_MODE, a as DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS, b as DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS, c as DEFAULT_TIME_DISPLAY_FORMAT, m as cn, G as LazyFeatureBoundary, y as formatTokens, B as Button, d as RuntimeConfigSchema, g as readStoredUiScalePreference, h as persistUiScalePreference, j as applyUiScalePreference, ad as CrabLogo, p as packageJson, k as normalizeUiScalePreference, P as GroupEvidenceExportResultSchema, Q as DeleteInspectorGroupResponseSchema, z as copyTextToClipboard, l as RedactedProviderDtoSchema, U as UI_SCALE_STORAGE_KEY, v as apiFormatForPath, i as isRecord, a3 as createPendingProviderTestResults, a4 as ProviderTestResultsSchema, a5 as createFailedProviderTestResults, a6 as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, a7 as MAX_PROVIDER_TEST_TIMEOUT_SECONDS, a8 as TimeDisplayFormatSchema, H as AlertSummarySchema, I as AlertListResponseSchema, r as readStoredThemeMode, e as applyThemeMode, f as persistThemeMode, ag as formatUiScale, M as InspectorGroupsListResponseSchema, J as GroupEvidenceReadResponseSchema, a9 as EcosystemPackagesResponseSchema, aa as EcosystemTaskResponseSchema, ab as EcosystemTasksResponseSchema, Z as PATH_V1_MESSAGES, _ as PATH_V1_CHAT_COMPLETIONS, $ as PATH_V1_RESPONSES, W as providerHasContextMetadata, V as ProviderScanResponseSchema, T as THEME_MODE_STORAGE_KEY, n as normalizeThemeMode, ac as EcosystemExecutionConfirmationResponseSchema, s as safeGetOwnProperty, a0 as formatContextWindowInput, X as findProviderModelMetadata, Y as formatContextWindowTokens, x as getSessionPath, q as parseOpenAIResponse, t as parseOpenAIResponsesResponse, O as OpenAIRequestSchema, u as OpenAIResponsesRequestSchema, A as AnthropicResponseSchema$1, o as AnthropicRequestSchema, ae as resolveProviderContextWindow, a1 as parseContextWindowTokensInput, a2 as previewUpstreamUrl, K as KnowledgeCandidateSchema, af as isPlainRecord, F as stripClaudeCodeBillingHeader, L as LogBodyChunkSchema, E as getStatusCategory } from "./router-C6nWUZHK.mjs";
3
3
  import { u as useSWR, a as useSWRConfig } from "../_libs/swr.mjs";
4
4
  import { u as useWindowVirtualizer, a as useVirtualizer } from "../_libs/tanstack__react-virtual.mjs";
5
5
  import { c as cva } from "../_libs/class-variance-authority.mjs";
@@ -2509,30 +2509,30 @@ function useCopyFeedback(text) {
2509
2509
  return { copied, copy };
2510
2510
  }
2511
2511
  const LazyCompareDrawer = reactExports.lazy(
2512
- () => import("./CompareDrawer-Bt3LIoPy.mjs").then((m) => ({ default: m.CompareDrawer }))
2512
+ () => import("./CompareDrawer-Bgc2TZh_.mjs").then((m) => ({ default: m.CompareDrawer }))
2513
2513
  );
2514
2514
  const LazyInspectorPet = reactExports.lazy(
2515
- () => import("./InspectorPet-CikVNW8S.mjs").then((m) => ({ default: m.InspectorPet }))
2515
+ () => import("./InspectorPet-DyK2ojeh.mjs").then((m) => ({ default: m.InspectorPet }))
2516
2516
  );
2517
2517
  const LazyReplayDialog = reactExports.lazy(
2518
- () => import("./ReplayDialog-DxFLoYlZ.mjs").then((m) => ({ default: m.ReplayDialog }))
2518
+ () => import("./ReplayDialog-KpnrGtZ-.mjs").then((m) => ({ default: m.ReplayDialog }))
2519
2519
  );
2520
2520
  const LazyRequestAnatomy = reactExports.lazy(
2521
- () => import("./RequestAnatomy-CbLJjhKb.mjs").then((m) => ({ default: m.RequestAnatomy }))
2521
+ () => import("./RequestAnatomy-uCsfucn8.mjs").then((m) => ({ default: m.RequestAnatomy }))
2522
2522
  );
2523
2523
  const LazyResponseView = reactExports.lazy(
2524
- () => import("./ResponseView-Bs1sYg_8.mjs").then((m) => ({ default: m.ResponseView }))
2524
+ () => import("./ResponseView-C8UPqoPO.mjs").then((m) => ({ default: m.ResponseView }))
2525
2525
  );
2526
2526
  const LazyStreamingChunkSequence = reactExports.lazy(
2527
- () => import("./StreamingChunkSequence-D0dBru3U.mjs").then((m) => ({
2527
+ () => import("./StreamingChunkSequence-BP28I9sh.mjs").then((m) => ({
2528
2528
  default: m.StreamingChunkSequence
2529
2529
  }))
2530
2530
  );
2531
2531
  const LazyJsonViewer = reactExports.lazy(
2532
- () => import("./json-viewer-BfRCUg1t.mjs").then((m) => ({ default: m.JsonViewer }))
2532
+ () => import("./json-viewer-DrE0vtlB.mjs").then((m) => ({ default: m.JsonViewer }))
2533
2533
  );
2534
2534
  const LazyJsonViewerFromString = reactExports.lazy(
2535
- () => import("./json-viewer-BfRCUg1t.mjs").then((m) => ({ default: m.JsonViewerFromString }))
2535
+ () => import("./json-viewer-DrE0vtlB.mjs").then((m) => ({ default: m.JsonViewerFromString }))
2536
2536
  );
2537
2537
  const HIGHLIGHT_DURATION_MS = 1200;
2538
2538
  const MAX_HIGHLIGHT_ATTEMPTS = 12;
@@ -3051,7 +3051,7 @@ const STATUS_BADGE_CLASSES = {
3051
3051
  };
3052
3052
  const STATUS_CUE_CLASSES = {
3053
3053
  success: {
3054
- frame: "border-cyan-200/15 bg-white/[0.04] text-slate-100"
3054
+ frame: "border-cyan-200/15 bg-white/[0.04] text-text-strong"
3055
3055
  },
3056
3056
  client_error: {
3057
3057
  frame: "border-amber-300/25 bg-amber-300/[0.08] text-amber-100"
@@ -3405,7 +3405,7 @@ const LogEntryHeader = reactExports.memo(function({
3405
3405
  /* @__PURE__ */ jsxRuntimeExports.jsx(
3406
3406
  "span",
3407
3407
  {
3408
- className: "bg-white/[0.045] hover:bg-white/[0.075] inline-flex size-8 shrink-0 items-center justify-center rounded-md text-slate-200",
3408
+ className: "bg-white/[0.045] hover:bg-white/[0.075] inline-flex size-8 shrink-0 items-center justify-center rounded-md text-text-strong",
3409
3409
  "aria-hidden": "true",
3410
3410
  children: expanded ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-4 shrink-0" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-4 shrink-0" })
3411
3411
  }
@@ -5213,7 +5213,7 @@ const TurnGroup = reactExports.memo(function TurnGroup2({
5213
5213
  /* @__PURE__ */ jsxRuntimeExports.jsx(
5214
5214
  "span",
5215
5215
  {
5216
- className: "bg-white/[0.045] inline-flex size-7 shrink-0 items-center justify-center rounded-md text-slate-200",
5216
+ className: "bg-white/[0.045] inline-flex size-7 shrink-0 items-center justify-center rounded-md text-text-strong",
5217
5217
  "aria-hidden": "true",
5218
5218
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-4 shrink-0" })
5219
5219
  }
@@ -6704,7 +6704,7 @@ function useAlertSummary() {
6704
6704
  mutate: response.mutate
6705
6705
  };
6706
6706
  }
6707
- const INSPECTOR_ICON_TRIGGER_CLASS = "relative size-8 rounded-md border-0 bg-white/[0.035] text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors hover:bg-white/[0.065] hover:text-accent-foreground focus-visible:ring-ring/50";
6707
+ const INSPECTOR_ICON_TRIGGER_CLASS = "relative size-9 rounded-md border border-border/70 bg-muted/60 text-muted-foreground transition-colors hover:bg-muted hover:text-accent-foreground focus-visible:ring-ring/50 max-lg:size-11";
6708
6708
  const ALERT_CATEGORIES = [
6709
6709
  "request-failure",
6710
6710
  "request-timeout",
@@ -6757,31 +6757,31 @@ function categoryLabel(category) {
6757
6757
  function severityAccent(severity) {
6758
6758
  switch (severity) {
6759
6759
  case "critical":
6760
- return "border-red-400/40 bg-red-500/12 text-red-100";
6760
+ return "border-status-danger/40 bg-status-danger/10 text-status-danger";
6761
6761
  case "warning":
6762
- return "border-amber-300/35 bg-amber-400/12 text-amber-100";
6762
+ return "border-status-watch/40 bg-status-watch/10 text-status-watch";
6763
6763
  case "notice":
6764
- return "border-sky-300/35 bg-sky-400/12 text-sky-100";
6764
+ return "border-status-cool/40 bg-status-cool/10 text-status-cool";
6765
6765
  }
6766
6766
  }
6767
6767
  function severityDot(severity) {
6768
6768
  switch (severity) {
6769
6769
  case "critical":
6770
- return "bg-red-400";
6770
+ return "bg-status-danger";
6771
6771
  case "warning":
6772
- return "bg-amber-300";
6772
+ return "bg-status-watch";
6773
6773
  case "notice":
6774
- return "bg-sky-300";
6774
+ return "bg-status-cool";
6775
6775
  }
6776
6776
  }
6777
6777
  function severityText(severity) {
6778
6778
  switch (severity) {
6779
6779
  case "critical":
6780
- return "text-red-200";
6780
+ return "text-status-danger";
6781
6781
  case "warning":
6782
- return "text-amber-100";
6782
+ return "text-status-watch";
6783
6783
  case "notice":
6784
- return "text-sky-100";
6784
+ return "text-status-cool";
6785
6785
  }
6786
6786
  }
6787
6787
  function categoryIcon(category) {
@@ -6837,7 +6837,7 @@ function AlertSummaryPill({
6837
6837
  count,
6838
6838
  tone
6839
6839
  }) {
6840
- const toneClass = tone === "critical" ? "border-red-400/30 bg-red-500/10 text-red-100" : tone === "warning" ? "border-amber-300/30 bg-amber-400/10 text-amber-100" : tone === "notice" ? "border-sky-300/30 bg-sky-400/10 text-sky-100" : "border-border bg-muted/40 text-foreground";
6840
+ const toneClass = tone === "critical" ? "border-status-danger/30 bg-status-danger/10 text-status-danger" : tone === "warning" ? "border-status-watch/30 bg-status-watch/10 text-status-watch" : tone === "notice" ? "border-status-cool/30 bg-status-cool/10 text-status-cool" : "border-border bg-muted/40 text-foreground";
6841
6841
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: cn("rounded-md border px-3 py-2", toneClass), children: [
6842
6842
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-[10px] font-semibold uppercase opacity-75", children: label }),
6843
6843
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-1 text-lg font-semibold leading-none", children: formatCount(count) })
@@ -6903,7 +6903,7 @@ function AlertList({
6903
6903
  ] });
6904
6904
  }
6905
6905
  if (error !== void 0) {
6906
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-red-300/30 bg-red-500/10 px-3 py-2 text-xs text-red-100", children: error.message });
6906
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-status-danger/30 bg-status-danger/10 px-3 py-2 text-xs text-status-danger", children: error.message });
6907
6907
  }
6908
6908
  if (alerts.length === 0) {
6909
6909
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex min-h-56 items-center justify-center rounded-md border border-dashed border-border px-4 text-center text-xs text-muted-foreground", children: "No alerts match the current filters." });
@@ -7057,7 +7057,7 @@ function AlertsDialog() {
7057
7057
  const criticalCount = summary?.critical ?? 0;
7058
7058
  const warningCount = summary?.warning ?? 0;
7059
7059
  const noticeCount = summary?.notice ?? 0;
7060
- const triggerTone = criticalCount > 0 ? "bg-red-600 text-white" : warningCount > 0 ? "bg-amber-400 text-zinc-950" : "bg-sky-400 text-zinc-950";
7060
+ const triggerTone = criticalCount > 0 ? "bg-status-danger text-primary-foreground" : warningCount > 0 ? "bg-status-watch text-primary-foreground" : "bg-status-cool text-primary-foreground";
7061
7061
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(Dialog, { open, onOpenChange: setOpen, children: [
7062
7062
  /* @__PURE__ */ jsxRuntimeExports.jsx(DialogTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
7063
7063
  Button,
@@ -7087,7 +7087,7 @@ function AlertsDialog() {
7087
7087
  /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "flex max-h-[86vh] max-w-6xl flex-col overflow-hidden", children: [
7088
7088
  /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogHeader, { children: [
7089
7089
  /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogTitle, { className: "flex items-center gap-2 pr-8", children: [
7090
- /* @__PURE__ */ jsxRuntimeExports.jsx(Siren, { className: "size-5 text-red-300" }),
7090
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Siren, { className: "size-5 text-status-danger" }),
7091
7091
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Alerts" }),
7092
7092
  /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", children: formatCount(totalCount) })
7093
7093
  ] }),
@@ -7376,16 +7376,16 @@ function buildGroupMemberRows(group, exportResult, evidenceResponse = null) {
7376
7376
  function statusClassName(status) {
7377
7377
  switch (status) {
7378
7378
  case "completed":
7379
- return "border-emerald-200 bg-emerald-50 text-emerald-700";
7379
+ return "border-status-success/30 bg-status-success/10 text-status-success";
7380
7380
  case "failed":
7381
7381
  case "cancelled":
7382
- return "border-red-200 bg-red-50 text-red-700";
7382
+ return "border-status-danger/30 bg-status-danger/10 text-status-danger";
7383
7383
  case "running":
7384
- return "border-sky-200 bg-sky-50 text-sky-700";
7384
+ return "border-status-cool/30 bg-status-cool/10 text-status-cool";
7385
7385
  case "created":
7386
- return "border-zinc-200 bg-zinc-50 text-zinc-600";
7386
+ return "border-border bg-muted/30 text-muted-foreground";
7387
7387
  case null:
7388
- return "border-zinc-200 bg-zinc-50 text-zinc-500";
7388
+ return "border-border bg-muted/30 text-muted-foreground";
7389
7389
  }
7390
7390
  }
7391
7391
  function statusLabel(status) {
@@ -7394,13 +7394,13 @@ function statusLabel(status) {
7394
7394
  function reportStatusClassName(status) {
7395
7395
  switch (status) {
7396
7396
  case "PASS":
7397
- return "border-emerald-200 bg-emerald-50 text-emerald-700";
7397
+ return "border-status-success/30 bg-status-success/10 text-status-success";
7398
7398
  case "FAIL":
7399
- return "border-red-200 bg-red-50 text-red-700";
7399
+ return "border-status-danger/30 bg-status-danger/10 text-status-danger";
7400
7400
  case "RUNNING":
7401
- return "border-sky-200 bg-sky-50 text-sky-700";
7401
+ return "border-status-cool/30 bg-status-cool/10 text-status-cool";
7402
7402
  case "UNKNOWN":
7403
- return "border-zinc-200 bg-zinc-50 text-zinc-600";
7403
+ return "border-border bg-muted/30 text-muted-foreground";
7404
7404
  }
7405
7405
  }
7406
7406
  function displayText(value) {
@@ -7496,7 +7496,9 @@ function evidenceReportFor(group, exportResult, evidenceResponse) {
7496
7496
  }
7497
7497
  return null;
7498
7498
  }
7499
- function GroupsDialog() {
7499
+ function GroupsDialog({
7500
+ labelledTrigger = false
7501
+ }) {
7500
7502
  const [open, setOpen] = reactExports.useState(false);
7501
7503
  const [selectedGroupId, setSelectedGroupId] = reactExports.useState(null);
7502
7504
  const [exportingGroupId, setExportingGroupId] = reactExports.useState(null);
@@ -7639,14 +7641,17 @@ function GroupsDialog() {
7639
7641
  {
7640
7642
  type: "button",
7641
7643
  variant: "ghost",
7642
- size: "icon",
7643
- className: INSPECTOR_ICON_TRIGGER_CLASS,
7644
+ size: labelledTrigger ? "default" : "icon",
7645
+ className: cn(
7646
+ INSPECTOR_ICON_TRIGGER_CLASS,
7647
+ labelledTrigger && "w-auto gap-2 px-3 text-xs max-lg:h-11 max-lg:w-auto"
7648
+ ),
7644
7649
  "aria-label": "Evaluation groups",
7645
7650
  title: "Evaluation groups",
7646
7651
  children: [
7647
7652
  /* @__PURE__ */ jsxRuntimeExports.jsx(Layers, { className: "size-4" }),
7648
7653
  isLoading ? /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "absolute -right-0.5 -top-0.5 size-3 animate-spin text-muted-foreground" }) : groups.length > 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "absolute -right-1 -top-1 min-w-4 rounded-full bg-primary px-1 text-[10px] leading-4 text-primary-foreground", children: groups.length }) : null,
7649
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sr-only", children: "Evaluation groups" })
7654
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: labelledTrigger ? "" : "sr-only", children: "Groups" })
7650
7655
  ]
7651
7656
  }
7652
7657
  ) }),
@@ -7727,7 +7732,7 @@ function GroupList({
7727
7732
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex min-h-48 items-center justify-center rounded-md border border-dashed border-border text-xs text-muted-foreground", children: "Loading groups..." });
7728
7733
  }
7729
7734
  if (error !== void 0) {
7730
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700", children: error.message });
7735
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-status-danger/30 bg-status-danger/10 px-3 py-2 text-xs text-status-danger", children: error.message });
7731
7736
  }
7732
7737
  if (groups.length === 0) {
7733
7738
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-dashed border-border px-3 py-8 text-center text-xs text-muted-foreground", children: "No groups yet." });
@@ -7814,7 +7819,7 @@ function GroupDetails({
7814
7819
  type: "button",
7815
7820
  variant: "outline",
7816
7821
  size: "icon",
7817
- className: "size-8 text-red-600 hover:text-red-700",
7822
+ className: "size-8 text-status-danger hover:text-status-danger/80",
7818
7823
  "aria-label": "Delete group",
7819
7824
  title: "Delete group",
7820
7825
  disabled: isDeleting,
@@ -7874,8 +7879,8 @@ function GroupDetails({
7874
7879
  }
7875
7880
  ),
7876
7881
  /* @__PURE__ */ jsxRuntimeExports.jsx(EvidencePaths, { evidence }),
7877
- exportError !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700", children: exportError }),
7878
- deleteError !== null && !isConfirmingDelete && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700", children: deleteError }),
7882
+ exportError !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-status-danger/30 bg-status-danger/10 px-3 py-2 text-xs text-status-danger", children: exportError }),
7883
+ deleteError !== null && !isConfirmingDelete && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-status-danger/30 bg-status-danger/10 px-3 py-2 text-xs text-status-danger", children: deleteError }),
7879
7884
  /* @__PURE__ */ jsxRuntimeExports.jsx(MemberTable, { rows })
7880
7885
  ] }) });
7881
7886
  }
@@ -7890,13 +7895,13 @@ function DeleteGroupPanel({
7890
7895
  }) {
7891
7896
  const hasEvidence = group.evidence !== null;
7892
7897
  const evidencePath = group.evidence?.markdownPath ?? "No evidence pack exported.";
7893
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-red-200 bg-red-50 px-3 py-3 text-red-900", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 flex-col gap-3 lg:flex-row lg:items-start lg:justify-between", children: [
7898
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-status-danger/30 bg-status-danger/10 px-3 py-3 text-status-danger", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 flex-col gap-3 lg:flex-row lg:items-start lg:justify-between", children: [
7894
7899
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 space-y-2", children: [
7895
7900
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-sm font-semibold", children: [
7896
- /* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, { className: "size-4 text-red-600" }),
7901
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, { className: "size-4 text-status-danger" }),
7897
7902
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Delete group?" })
7898
7903
  ] }),
7899
- /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-red-800", children: [
7904
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-status-danger", children: [
7900
7905
  "Delete ",
7901
7906
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium", children: group.title }),
7902
7907
  ". Session logs and run records stay intact."
@@ -7921,12 +7926,12 @@ function DeleteGroupPanel({
7921
7926
  ),
7922
7927
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "min-w-0", children: [
7923
7928
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "block font-medium", children: "Also delete exported evidence files" }),
7924
- /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "mt-1 block truncate font-mono text-[11px] text-red-700", children: evidencePath })
7929
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "mt-1 block truncate font-mono text-[11px] text-status-danger", children: evidencePath })
7925
7930
  ] })
7926
7931
  ]
7927
7932
  }
7928
7933
  ),
7929
- error !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-red-200 bg-white px-2 py-1.5 text-xs text-red-700", children: error })
7934
+ error !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-status-danger/30 bg-card px-2 py-1.5 text-xs text-status-danger", children: error })
7930
7935
  ] }),
7931
7936
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex shrink-0 justify-end gap-2", children: [
7932
7937
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -7978,7 +7983,7 @@ function EvidenceReportCard({
7978
7983
  ] });
7979
7984
  }
7980
7985
  if (error !== void 0 && hasEvidence) {
7981
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700", children: [
7986
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md border border-status-danger/30 bg-status-danger/10 px-3 py-2 text-xs text-status-danger", children: [
7982
7987
  "Failed to load evidence report: ",
7983
7988
  error.message
7984
7989
  ] });
@@ -7999,7 +8004,7 @@ function EvidenceReportCard({
7999
8004
  className: "size-7 shrink-0",
8000
8005
  "aria-label": copied ? "Copied evidence report" : "Copy evidence report",
8001
8006
  onClick: copy,
8002
- children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-emerald-500" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-3.5" })
8007
+ children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-status-success" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-3.5" })
8003
8008
  }
8004
8009
  )
8005
8010
  ] }),
@@ -8036,7 +8041,7 @@ function CopyPathRow({ label, value }) {
8036
8041
  className: "size-7 shrink-0",
8037
8042
  "aria-label": copied ? `Copied ${label} path` : `Copy ${label} path`,
8038
8043
  onClick: copy,
8039
- children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-emerald-500" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-3.5" })
8044
+ children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-status-success" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-3.5" })
8040
8045
  }
8041
8046
  )
8042
8047
  ] });
@@ -8143,7 +8148,7 @@ function MemberRow({
8143
8148
  Badge,
8144
8149
  {
8145
8150
  variant: "outline",
8146
- className: "shrink-0 border-zinc-200 bg-zinc-50 text-zinc-600",
8151
+ className: "shrink-0 border-border bg-muted/30 text-muted-foreground",
8147
8152
  children: "evidence"
8148
8153
  }
8149
8154
  )
@@ -8477,7 +8482,7 @@ function ImportWizardDialog({
8477
8482
  /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { className: "size-3" }),
8478
8483
  w
8479
8484
  ] }, i)) }),
8480
- importResult !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm text-green-500 border-t pt-2", children: importResult }),
8485
+ importResult !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t pt-2 text-sm text-status-success", children: importResult }),
8481
8486
  importError !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm text-destructive border-t pt-2", children: importError })
8482
8487
  ] }),
8483
8488
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between pt-3 border-t", children: [
@@ -8690,13 +8695,13 @@ function ProviderTestResultDialog({
8690
8695
  /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "max-h-[82vh] max-w-2xl gap-0 overflow-hidden p-0", children: [
8691
8696
  /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogHeader, { className: "border-b border-border/70 px-5 py-4 pr-12", children: [
8692
8697
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
8693
- result.success ? /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "size-4 text-cyan-300" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { className: "size-4 text-red-300" }),
8698
+ result.success ? /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "size-4 text-status-success" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { className: "size-4 text-status-danger" }),
8694
8699
  /* @__PURE__ */ jsxRuntimeExports.jsx(DialogTitle, { className: "text-base", children: probeLabel })
8695
8700
  ] }),
8696
8701
  /* @__PURE__ */ jsxRuntimeExports.jsx(DialogDescription, { children: result.success ? "Connection probe passed." : errorMessage })
8697
8702
  ] }),
8698
8703
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4 overflow-y-auto p-5", children: [
8699
- !result.success && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md border border-red-400/20 bg-red-400/[0.06] px-3 py-2 text-sm text-red-200", children: [
8704
+ !result.success && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md border border-status-danger/30 bg-status-danger/10 px-3 py-2 text-sm text-status-danger", children: [
8700
8705
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-medium", children: errorLabel(result.error?.type ?? "unknown") }),
8701
8706
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-1 break-words text-xs text-muted-foreground", children: errorMessage })
8702
8707
  ] }),
@@ -8728,8 +8733,8 @@ function errorIcon(type) {
8728
8733
  }
8729
8734
  }
8730
8735
  const PROBE_TONE_CLASSES = {
8731
- success: "bg-cyan-300/[0.07] text-cyan-100 hover:bg-cyan-300/[0.11]",
8732
- failure: "bg-red-400/[0.07] text-red-200 hover:bg-red-400/[0.11]",
8736
+ success: "bg-status-success/10 text-status-success hover:bg-status-success/15",
8737
+ failure: "bg-status-danger/10 text-status-danger hover:bg-status-danger/15",
8733
8738
  pending: "bg-muted/40 text-foreground/80",
8734
8739
  quiet: "bg-transparent text-muted-foreground/70"
8735
8740
  };
@@ -8796,14 +8801,7 @@ function ProviderTestMatrix({
8796
8801
  ] }),
8797
8802
  hasAnthropic && /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderFormatRow, { label: "Anthropic", results: results?.anthropic }),
8798
8803
  hasChat && /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderFormatRow, { label: "OpenAI Chat", results: results?.openaiChat }),
8799
- /* @__PURE__ */ jsxRuntimeExports.jsx(
8800
- ProviderFormatRow,
8801
- {
8802
- label: "OpenAI Responses",
8803
- results: results?.openaiResponses,
8804
- configured: hasResponses
8805
- }
8806
- )
8804
+ hasResponses && /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderFormatRow, { label: "OpenAI Responses", results: results?.openaiResponses })
8807
8805
  ] }) });
8808
8806
  }
8809
8807
  function summarizeFormat(results) {
@@ -8822,7 +8820,7 @@ function FormatSummaryBadge({
8822
8820
  results
8823
8821
  }) {
8824
8822
  const summary = summarizeFormat(results);
8825
- const className = summary.failed > 0 ? "border-red-400/20 bg-red-400/[0.06] text-red-200" : summary.testing > 0 ? "border-amber-300/20 bg-amber-300/[0.06] text-amber-100" : summary.total > 0 && summary.passed === summary.total ? "border-cyan-300/20 bg-cyan-300/[0.06] text-cyan-100" : "border-border/60 bg-transparent text-muted-foreground";
8823
+ const className = summary.failed > 0 ? "border-status-danger/30 bg-status-danger/10 text-status-danger" : summary.testing > 0 ? "border-status-watch/30 bg-status-watch/10 text-status-watch" : summary.total > 0 && summary.passed === summary.total ? "border-status-success/30 bg-status-success/10 text-status-success" : "border-border/60 bg-transparent text-muted-foreground";
8826
8824
  const value = summary.failed > 0 ? `${summary.failed} fail` : summary.testing > 0 ? "running" : summary.total === 0 ? "off" : `${summary.passed}/${summary.total}`;
8827
8825
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: cn("rounded border px-1.5 py-0.5 text-[10px]", className), children: [
8828
8826
  label,
@@ -8903,7 +8901,7 @@ function ProviderTestPill({
8903
8901
  const hasEndpoint2 = providerHasEndpoint$1(provider.anthropicBaseUrl) || providerHasEndpoint$1(provider.openaiBaseUrl) || providerHasEndpoint$1(provider.openaiResponsesBaseUrl);
8904
8902
  const summary = summarizeProviderTestResults(provider, testResults);
8905
8903
  if (isTesting) {
8906
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-1 rounded border border-cyan-300/25 bg-cyan-300/[0.08] px-2 py-1 text-xs text-cyan-100", children: [
8904
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-1 rounded border border-status-cool/30 bg-status-cool/10 px-2 py-1 text-xs text-status-cool", children: [
8907
8905
  /* @__PURE__ */ jsxRuntimeExports.jsx(RotateCw, { className: "size-3 animate-spin" }),
8908
8906
  "Testing"
8909
8907
  ] });
@@ -8915,20 +8913,20 @@ function ProviderTestPill({
8915
8913
  return /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "rounded border border-border/70 bg-muted/20 px-2 py-1 text-xs text-muted-foreground", children: "Not tested" });
8916
8914
  }
8917
8915
  if (summary.failed > 0) {
8918
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-1 rounded border border-red-400/25 bg-red-500/[0.08] px-2 py-1 text-xs text-red-200", children: [
8916
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-1 rounded border border-status-danger/30 bg-status-danger/10 px-2 py-1 text-xs text-status-danger", children: [
8919
8917
  /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { className: "size-3" }),
8920
8918
  summary.failed,
8921
8919
  " failed"
8922
8920
  ] });
8923
8921
  }
8924
8922
  if (summary.testing > 0 || summary.passed < summary.total) {
8925
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "rounded border border-amber-300/25 bg-amber-400/[0.08] px-2 py-1 text-xs text-amber-100", children: [
8923
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "rounded border border-status-watch/30 bg-status-watch/10 px-2 py-1 text-xs text-status-watch", children: [
8926
8924
  summary.passed,
8927
8925
  "/",
8928
8926
  summary.total
8929
8927
  ] });
8930
8928
  }
8931
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-1 rounded border border-cyan-300/25 bg-cyan-300/[0.08] px-2 py-1 text-xs text-cyan-100", children: [
8929
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-1 rounded border border-status-success/30 bg-status-success/10 px-2 py-1 text-xs text-status-success", children: [
8932
8930
  /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "size-3" }),
8933
8931
  summary.passed,
8934
8932
  "/",
@@ -9038,7 +9036,7 @@ function ProviderCard({
9038
9036
  const canRefreshMetadata = provider.modelMetadataUrl !== void 0 && provider.modelMetadataUrl.trim() !== "";
9039
9037
  const metadataImportLabel = canRefreshMetadata ? "Refresh" : "Import defaults";
9040
9038
  const isTestingValue = isTesting ?? false;
9041
- const providerSourceBadge = provider.source === "company" ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 rounded border border-cyan-300/20 bg-cyan-300/[0.08] px-1.5 py-0.5 text-xs text-cyan-100", children: "Company" }) : provider.source === "personal" ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 rounded border border-violet-300/20 bg-violet-300/[0.08] px-1.5 py-0.5 text-xs text-violet-100", children: "Personal" }) : null;
9039
+ const providerSourceBadge = provider.source === "company" ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 rounded border border-status-cool/30 bg-status-cool/10 px-1.5 py-0.5 text-xs text-status-cool", children: "Company" }) : provider.source === "personal" ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 rounded border border-status-accent/30 bg-status-accent/10 px-1.5 py-0.5 text-xs text-status-accent", children: "Personal" }) : null;
9042
9040
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
9043
9041
  "div",
9044
9042
  {
@@ -9085,7 +9083,7 @@ function ProviderCard({
9085
9083
  formatTimeAgo(testResults.testedAt)
9086
9084
  ] })
9087
9085
  ] }),
9088
- !hasContextMetadata && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 rounded-md border border-amber-500/25 bg-amber-500/6 px-2 py-1.5 text-xs text-muted-foreground", children: [
9086
+ !hasContextMetadata && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2 rounded-md border border-status-watch/30 bg-status-watch/10 px-2 py-1.5 text-xs text-status-watch", children: [
9089
9087
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Context window metadata missing" }),
9090
9088
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
9091
9089
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -9118,7 +9116,7 @@ function ProviderCard({
9118
9116
  ] }),
9119
9117
  showDetails && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3 border-t border-border/60 pt-3", children: [
9120
9118
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
9121
- /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "size-3.5 text-emerald-500" }),
9119
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "size-3.5 text-status-success" }),
9122
9120
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "API key configured" })
9123
9121
  ] }),
9124
9122
  provider.models !== void 0 && provider.models.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap gap-1", children: provider.models.map((model) => /* @__PURE__ */ jsxRuntimeExports.jsx(ModelChip, { provider, model }, model)) }),
@@ -9425,7 +9423,7 @@ function EndpointUrlPreview({
9425
9423
  preview.diagnostics.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-2 space-y-1", children: preview.diagnostics.map((diagnostic) => /* @__PURE__ */ jsxRuntimeExports.jsx(
9426
9424
  "div",
9427
9425
  {
9428
- className: diagnostic.severity === "warning" ? "text-amber-200" : "text-muted-foreground",
9426
+ className: diagnostic.severity === "warning" ? "text-status-watch" : "text-muted-foreground",
9429
9427
  children: diagnostic.message
9430
9428
  },
9431
9429
  `${diagnostic.severity}:${diagnostic.message}`
@@ -9890,7 +9888,7 @@ function ProviderForm({ provider, onSubmit, onCancel }) {
9890
9888
  className: "min-w-0 flex-1 bg-transparent px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50"
9891
9889
  }
9892
9890
  ),
9893
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 select-none border-l border-white/10 bg-white/[0.04] px-3 py-2 font-mono text-xs text-muted-foreground", children: ANTHROPIC_MESSAGES_ENDPOINT })
9891
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 select-none border-l border-border bg-muted/35 px-3 py-2 font-mono text-xs text-muted-foreground", children: ANTHROPIC_MESSAGES_ENDPOINT })
9894
9892
  ] }),
9895
9893
  errors.anthropicBaseUrl !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-destructive", children: errors.anthropicBaseUrl }),
9896
9894
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -9922,7 +9920,7 @@ function ProviderForm({ provider, onSubmit, onCancel }) {
9922
9920
  className: "min-w-0 flex-1 bg-transparent px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50"
9923
9921
  }
9924
9922
  ),
9925
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 select-none border-l border-white/10 bg-white/[0.04] px-3 py-2 font-mono text-xs text-muted-foreground", children: OPENAI_CHAT_COMPLETIONS_ENDPOINT })
9923
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 select-none border-l border-border bg-muted/35 px-3 py-2 font-mono text-xs text-muted-foreground", children: OPENAI_CHAT_COMPLETIONS_ENDPOINT })
9926
9924
  ] }),
9927
9925
  errors.openaiBaseUrl !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-destructive", children: errors.openaiBaseUrl }),
9928
9926
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -9954,7 +9952,7 @@ function ProviderForm({ provider, onSubmit, onCancel }) {
9954
9952
  className: "min-w-0 flex-1 bg-transparent px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50"
9955
9953
  }
9956
9954
  ),
9957
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 select-none border-l border-white/10 bg-white/[0.04] px-3 py-2 font-mono text-xs text-muted-foreground", children: OPENAI_RESPONSES_ENDPOINT })
9955
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 select-none border-l border-border bg-muted/35 px-3 py-2 font-mono text-xs text-muted-foreground", children: OPENAI_RESPONSES_ENDPOINT })
9958
9956
  ] }),
9959
9957
  errors.openaiResponsesBaseUrl !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-destructive", children: errors.openaiResponsesBaseUrl }),
9960
9958
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -10002,7 +10000,7 @@ function ProviderForm({ provider, onSubmit, onCancel }) {
10002
10000
  ),
10003
10001
  errors.modelMetadataUrl !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-destructive", children: errors.modelMetadataUrl }),
10004
10002
  modelMetadataUrl.trim() === "" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border border-border bg-muted/40 rounded-md px-3 py-2 text-xs text-muted-foreground", children: "Built-in limits cover DeepSeek v4 pro/flash, MiniMax M3/M2.7/M2.5/M2.1, and GLM coding models. Use a registry URL for private or custom model limits." }),
10005
- provider !== void 0 && !hasContextMetadata && modelMetadataUrl.trim() === "" && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-amber-400", children: "This provider has no matching context metadata yet." }),
10003
+ provider !== void 0 && !hasContextMetadata && modelMetadataUrl.trim() === "" && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-status-watch", children: "This provider has no matching context metadata yet." }),
10006
10004
  modelMetadataUrl.trim() !== "" && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Agent Inspector will refresh model limits from this JSON registry after save." })
10007
10005
  ] }),
10008
10006
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
@@ -10039,7 +10037,7 @@ function ProviderForm({ provider, onSubmit, onCancel }) {
10039
10037
  onClick: handleCopy,
10040
10038
  className: "text-muted-foreground hover:text-foreground transition-colors p-1 shrink-0",
10041
10039
  "aria-label": "Copy API key",
10042
- children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-4 text-cyan-300" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-4" })
10040
+ children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-4 text-status-success" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-4" })
10043
10041
  }
10044
10042
  )
10045
10043
  ] }),
@@ -10096,7 +10094,7 @@ function ProviderForm({ provider, onSubmit, onCancel }) {
10096
10094
  updateModel(i, opt);
10097
10095
  setOpenModelDropdown(null);
10098
10096
  },
10099
- className: "w-full px-3 py-2 text-left text-sm transition-colors hover:bg-white/[0.06]",
10097
+ className: "w-full px-3 py-2 text-left text-sm transition-colors hover:bg-muted/60",
10100
10098
  children: opt
10101
10099
  },
10102
10100
  opt
@@ -10752,7 +10750,7 @@ function ProvidersPanel({
10752
10750
  },
10753
10751
  className: "ml-auto shrink-0 text-muted-foreground transition-colors hover:text-foreground",
10754
10752
  "aria-label": configPathCopied ? "Copied config file path" : "Copy config file path",
10755
- children: configPathCopied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 text-cyan-300" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-3" })
10753
+ children: configPathCopied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 text-status-success" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-3" })
10756
10754
  }
10757
10755
  )
10758
10756
  ] }),
@@ -11079,7 +11077,7 @@ function CopyableSetupValue({
11079
11077
  className: "size-7 shrink-0",
11080
11078
  onClick: () => onCopy(id, value),
11081
11079
  "aria-label": copied ? `Copied ${label}` : `Copy ${label}`,
11082
- children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-emerald-500" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-3.5" })
11080
+ children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-status-success" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-3.5" })
11083
11081
  }
11084
11082
  )
11085
11083
  ] })
@@ -11183,15 +11181,15 @@ function OnboardingSettingsTab() {
11183
11181
  )) }),
11184
11182
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-2 rounded-md bg-muted/15 px-3 py-2 text-xs text-muted-foreground", children: [
11185
11183
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
11186
- /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-emerald-500" }),
11184
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-status-success" }),
11187
11185
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Provider test creates a traceable memory probe session." })
11188
11186
  ] }),
11189
11187
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
11190
- /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-emerald-500" }),
11188
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-status-success" }),
11191
11189
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Captured sessions can produce reviewable memory candidates." })
11192
11190
  ] }),
11193
11191
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2", children: [
11194
- /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "mt-0.5 size-3.5 text-emerald-500" }),
11192
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "mt-0.5 size-3.5 text-status-success" }),
11195
11193
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
11196
11194
  "Streamable HTTP clients should use the MCP URL directly. Stdio-only clients should use",
11197
11195
  /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "mx-1 rounded bg-muted px-1 py-0.5 font-mono text-[11px] text-foreground", children: "agent-inspector-mcp stdio" }),
@@ -11199,7 +11197,7 @@ function OnboardingSettingsTab() {
11199
11197
  ] })
11200
11198
  ] }),
11201
11199
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2", children: [
11202
- /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "mt-0.5 size-3.5 text-emerald-500" }),
11200
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "mt-0.5 size-3.5 text-status-success" }),
11203
11201
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
11204
11202
  "OpenCode onboarding safely merges",
11205
11203
  " ",
@@ -11215,7 +11213,7 @@ function OnboardingSettingsTab() {
11215
11213
  ] })
11216
11214
  ] }),
11217
11215
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2", children: [
11218
- /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "mt-0.5 size-3.5 text-emerald-500" }),
11216
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "mt-0.5 size-3.5 text-status-success" }),
11219
11217
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
11220
11218
  "MiMo Code onboarding safely merges",
11221
11219
  " ",
@@ -11231,7 +11229,7 @@ function OnboardingSettingsTab() {
11231
11229
  ] })
11232
11230
  ] }),
11233
11231
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2", children: [
11234
- /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "mt-0.5 size-3.5 text-emerald-500" }),
11232
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "mt-0.5 size-3.5 text-status-success" }),
11235
11233
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "If your AI tool runs in another container or host, replace localhost with an address reachable from that tool and verify the network/firewall path." })
11236
11234
  ] })
11237
11235
  ] })
@@ -12032,7 +12030,11 @@ function ExecutionConfirmationDialog({
12032
12030
  ] })
12033
12031
  ] }) });
12034
12032
  }
12035
- function AgentLabDialog({ currentSessionId, logCount }) {
12033
+ function AgentLabDialog({
12034
+ currentSessionId,
12035
+ logCount,
12036
+ labelledTrigger = false
12037
+ }) {
12036
12038
  const [open, setOpen] = reactExports.useState(false);
12037
12039
  const [copied, setCopied] = reactExports.useState(false);
12038
12040
  const [copiedPresets, setCopiedPresets] = reactExports.useState(false);
@@ -12131,13 +12133,16 @@ function AgentLabDialog({ currentSessionId, logCount }) {
12131
12133
  Button,
12132
12134
  {
12133
12135
  variant: "ghost",
12134
- size: "icon",
12135
- className: INSPECTOR_ICON_TRIGGER_CLASS,
12136
+ size: labelledTrigger ? "default" : "icon",
12137
+ className: cn(
12138
+ INSPECTOR_ICON_TRIGGER_CLASS,
12139
+ labelledTrigger && "w-auto gap-2 px-3 text-xs max-lg:h-11 max-lg:w-auto"
12140
+ ),
12136
12141
  "aria-label": "TonyClaw Lab",
12137
12142
  title: "TonyClaw Lab",
12138
12143
  children: [
12139
12144
  /* @__PURE__ */ jsxRuntimeExports.jsx(FlaskConical, { className: "size-4" }),
12140
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sr-only", children: "TonyClaw Lab" })
12145
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: labelledTrigger ? "" : "sr-only", children: "Lab" })
12141
12146
  ]
12142
12147
  }
12143
12148
  ) }),
@@ -12305,23 +12310,6 @@ function getPiAgentResultLogIds(response) {
12305
12310
  )
12306
12311
  ];
12307
12312
  }
12308
- const PI_AGENT_SCOPE_PILLS = [
12309
- {
12310
- id: "saved-data",
12311
- label: "Saved Inspector data",
12312
- description: "requests, responses, sessions, tools, alerts, runs, groups, and knowledge"
12313
- },
12314
- {
12315
- id: "root-cause",
12316
- label: "Root-cause hints",
12317
- description: "failures, hangs, slow paths, token spikes, and provider drift"
12318
- },
12319
- {
12320
- id: "evidence",
12321
- label: "Evidence links",
12322
- description: "matched logs and metrics you can jump back into"
12323
- }
12324
- ];
12325
12313
  const PI_AGENT_STARTERS = [
12326
12314
  {
12327
12315
  id: "reliability",
@@ -12489,7 +12477,7 @@ function AnswerMarkdown({ text }) {
12489
12477
  }
12490
12478
  ) });
12491
12479
  }
12492
- const DEFAULT_QUESTION = "Analyze the current Inspector session. What looks abnormal, slow, or likely to hang?";
12480
+ const DEFAULT_QUESTION = "What looks abnormal, slow, or likely to hang?";
12493
12481
  function providerSupportsPiAgent(provider) {
12494
12482
  return provider.openaiResponsesBaseUrl !== void 0 || provider.openaiBaseUrl !== void 0 || provider.anthropicBaseUrl !== void 0;
12495
12483
  }
@@ -12635,6 +12623,7 @@ function PiAgentPanel({
12635
12623
  const modelOptions = selectedProvider?.models ?? [];
12636
12624
  const question = conversation.question;
12637
12625
  const canAsk = question.trim() !== "" && piProviders.length > 0 && !loading;
12626
+ if (piProviders.length === 0) return null;
12638
12627
  const handleQuestionChange = (event) => {
12639
12628
  setConversation((current) => ({ ...current, question: event.currentTarget.value }));
12640
12629
  };
@@ -12729,8 +12718,8 @@ function PiAgentPanel({
12729
12718
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
12730
12719
  /* @__PURE__ */ jsxRuntimeExports.jsx(BrainCircuit, { className: "size-4 text-cyan-200" }),
12731
12720
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 flex-1", children: [
12732
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs font-semibold text-foreground", children: "Search with Assistant" }),
12733
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-[11px] text-muted-foreground", children: currentSessionId === null ? "Search all Inspector evidence" : "Search this session" })
12721
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs font-semibold text-foreground", children: "Assistant" }),
12722
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-[11px] text-muted-foreground", children: currentSessionId === null ? "All evidence" : "Current session" })
12734
12723
  ] }),
12735
12724
  /* @__PURE__ */ jsxRuntimeExports.jsx(
12736
12725
  "button",
@@ -12743,20 +12732,7 @@ function PiAgentPanel({
12743
12732
  }
12744
12733
  )
12745
12734
  ] }),
12746
- conversation.messages.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-3 rounded-md bg-black/[0.18] px-3 py-2 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.045)]", children: [
12747
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[11px] leading-5 text-muted-foreground", children: "Describe the traffic you want to find in plain language. Assistant searches saved traffic, sessions, tools, alerts, runs, groups, and knowledge, then uses linked evidence to shape the log results." }),
12748
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-2 grid gap-1.5", children: PI_AGENT_SCOPE_PILLS.map((pill) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
12749
- "div",
12750
- {
12751
- className: "rounded-sm bg-cyan-400/[0.06] px-2 py-1.5 shadow-[inset_0_0_0_1px_rgba(103,232,249,0.08)]",
12752
- children: [
12753
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-[10px] font-medium text-cyan-50", children: pill.label }),
12754
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-0.5 text-[9px] leading-4 text-muted-foreground", children: pill.description })
12755
- ]
12756
- },
12757
- pill.id
12758
- )) })
12759
- ] }),
12735
+ conversation.messages.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-3 text-[11px] leading-5 text-muted-foreground", children: "Ask about failures, latency, tokens, and tools." }),
12760
12736
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-3 grid grid-cols-2 gap-2", children: [
12761
12737
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Select, { value: providerId, onValueChange: handleProviderChange, children: [
12762
12738
  /* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { className: "h-8 border-0 bg-black/25 text-xs shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)]", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, { placeholder: "Provider" }) }),
@@ -12805,7 +12781,7 @@ function PiAgentPanel({
12805
12781
  value: question,
12806
12782
  onChange: handleQuestionChange,
12807
12783
  className: "mt-3 min-h-20 w-full resize-y rounded-md bg-black/25 px-3 py-2 text-xs leading-5 text-foreground outline-none shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors placeholder:text-muted-foreground focus-visible:ring-1 focus-visible:ring-ring",
12808
- placeholder: "Search failures, slow requests, token spikes, tool calls..."
12784
+ placeholder: "Ask about this Inspector data..."
12809
12785
  }
12810
12786
  ),
12811
12787
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -12817,13 +12793,12 @@ function PiAgentPanel({
12817
12793
  className: "mt-2 inline-flex h-8 w-full items-center justify-center gap-2 rounded-md bg-cyan-400/12 px-3 text-xs font-medium text-cyan-100 shadow-[inset_0_0_0_1px_rgba(103,232,249,0.18)] transition-colors hover:bg-cyan-400/18 disabled:cursor-not-allowed disabled:opacity-50",
12818
12794
  children: [
12819
12795
  loading ? /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "size-3.5 animate-spin" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Send, { className: "size-3.5" }),
12820
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: loading ? "Searching..." : "Search logs" })
12796
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: loading ? "Searching..." : "Ask Assistant" })
12821
12797
  ]
12822
12798
  }
12823
12799
  ),
12824
12800
  conversation.error !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-2 break-words text-[11px] leading-5 text-red-200", children: conversation.error }),
12825
- piProviders.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-2 text-[11px] leading-5 text-muted-foreground", children: "Configure a Provider with Responses, Chat, or Anthropic URL to enable Inspector Assistant." }),
12826
- logCount === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-2 text-[11px] leading-5 text-muted-foreground", children: "No logs are visible in this scope yet; Inspector Assistant can still answer Provider setup questions." })
12801
+ logCount === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-2 text-[11px] leading-5 text-muted-foreground", children: "No logs in this scope. Setup questions still work." })
12827
12802
  ] });
12828
12803
  }
12829
12804
  function computeCacheTrends(groups) {
@@ -14908,15 +14883,27 @@ function formatTimeRange(logs, timeDisplayFormat) {
14908
14883
  function slateMetricToneClass(tone) {
14909
14884
  switch (tone) {
14910
14885
  case "cool":
14911
- return "text-cyan-100";
14886
+ return "text-status-cool";
14912
14887
  case "danger":
14913
- return "text-red-100";
14888
+ return "text-status-danger";
14914
14889
  case "watch":
14915
- return "text-amber-100";
14890
+ return "text-status-watch";
14916
14891
  case "neutral":
14917
14892
  return "text-foreground";
14918
14893
  }
14919
14894
  }
14895
+ function statusMetricIcon(status) {
14896
+ switch (status) {
14897
+ case "rolling":
14898
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "size-3 text-status-cool" });
14899
+ case "failed":
14900
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Siren, { className: "size-3 text-status-danger" });
14901
+ case "watch":
14902
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Timer, { className: "size-3 text-status-watch" });
14903
+ case "clear":
14904
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 text-status-success" });
14905
+ }
14906
+ }
14920
14907
  function statusMetricTone(status) {
14921
14908
  switch (status) {
14922
14909
  case "rolling":
@@ -14941,7 +14928,7 @@ function SessionSlateMetric({
14941
14928
  icon,
14942
14929
  tone = "neutral"
14943
14930
  }) {
14944
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 border-t border-white/10 px-4 py-3", children: [
14931
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 border-t border-border/60 px-4 py-3", children: [
14945
14932
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1 text-[10px] uppercase text-muted-foreground", children: [
14946
14933
  icon,
14947
14934
  label
@@ -14952,7 +14939,7 @@ function SessionSlateMetric({
14952
14939
  }
14953
14940
  function SessionOpeningSlate({ stats }) {
14954
14941
  if (stats.requests === 0) return null;
14955
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-border bg-card shadow-sm mb-4 overflow-hidden rounded-[8px]", children: [
14942
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-4 overflow-hidden rounded-[8px] border border-border bg-card", children: [
14956
14943
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-4 py-3", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-end justify-between gap-3", children: [
14957
14944
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0", children: [
14958
14945
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-[10px] font-semibold uppercase text-muted-foreground", children: [
@@ -14966,13 +14953,14 @@ function SessionOpeningSlate({ stats }) {
14966
14953
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "min-w-0 font-mono", children: stats.timeRange ?? "Timeline pending" })
14967
14954
  ] })
14968
14955
  ] }) }),
14969
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-2 border-t border-white/10 md:grid-cols-3 2xl:grid-cols-6", children: [
14956
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-2 border-t border-border/60 md:grid-cols-3 2xl:grid-cols-6", children: [
14970
14957
  /* @__PURE__ */ jsxRuntimeExports.jsx(
14971
14958
  SessionSlateMetric,
14972
14959
  {
14973
14960
  label: "Status",
14974
14961
  value: stats.statusLabel,
14975
14962
  detail: requestHealthDetail(stats),
14963
+ icon: statusMetricIcon(stats.status),
14976
14964
  tone: statusMetricTone(stats.status)
14977
14965
  }
14978
14966
  ),
@@ -15412,24 +15400,15 @@ function SidebarPanel({
15412
15400
  children,
15413
15401
  className
15414
15402
  }) {
15415
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
15416
- "section",
15417
- {
15418
- className: cn(
15419
- "bg-white/[0.028] shadow-[inset_0_1px_0_rgba(255,255,255,0.035)] rounded-[8px]",
15420
- className
15421
- ),
15422
- children: [
15423
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 pt-3", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-mono text-[10px] font-semibold uppercase tracking-[0.14em] text-white/35", children: label }) }),
15424
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-3 pt-2", children })
15425
- ]
15426
- }
15427
- );
15403
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: cn("rounded-[8px] border border-border/60 bg-card/55", className), children: [
15404
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 pt-3", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-mono text-[10px] font-semibold uppercase tracking-[0.14em] text-text-subtle", children: label }) }),
15405
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-3 pt-2", children })
15406
+ ] });
15428
15407
  }
15429
15408
  function SidebarMetric({ label, value }) {
15430
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-black/20 min-w-0 rounded-md px-2 py-2 shadow-[inset_0_1px_0_rgba(255,255,255,0.035)]", children: [
15431
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "truncate font-mono text-lg font-semibold leading-6 text-slate-100", children: value }),
15432
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-0.5 truncate font-mono text-[10px] uppercase tracking-[0.12em] text-white/35", children: label })
15409
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 rounded-md border border-border/50 bg-muted/30 px-2 py-2", children: [
15410
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "truncate font-mono text-lg font-semibold leading-6 text-text-strong", children: value }),
15411
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-0.5 truncate font-mono text-[10px] uppercase tracking-[0.12em] text-text-subtle", children: label })
15433
15412
  ] });
15434
15413
  }
15435
15414
  function ThemeModeToggle() {
@@ -15437,7 +15416,7 @@ function ThemeModeToggle() {
15437
15416
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
15438
15417
  "div",
15439
15418
  {
15440
- className: "border-border/70 bg-muted/70 inline-flex h-8 items-center rounded-md border p-0.5 shadow-sm",
15419
+ className: "inline-flex h-9 items-center rounded-md border border-border/70 bg-muted/70 p-0.5",
15441
15420
  "aria-label": "Theme mode",
15442
15421
  role: "group",
15443
15422
  children: [
@@ -15447,7 +15426,7 @@ function ThemeModeToggle() {
15447
15426
  type: "button",
15448
15427
  onClick: () => setThemeMode("light"),
15449
15428
  className: cn(
15450
- "inline-flex size-7 items-center justify-center rounded-[6px] text-muted-foreground transition-colors hover:text-foreground focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-none",
15429
+ "inline-flex size-8 items-center justify-center rounded-[6px] text-muted-foreground transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none max-lg:size-11",
15451
15430
  themeMode === "light" && "bg-background text-foreground shadow-sm"
15452
15431
  ),
15453
15432
  "aria-label": "Use light mode",
@@ -15462,7 +15441,7 @@ function ThemeModeToggle() {
15462
15441
  type: "button",
15463
15442
  onClick: () => setThemeMode("eye-care"),
15464
15443
  className: cn(
15465
- "inline-flex size-7 items-center justify-center rounded-[6px] text-muted-foreground transition-colors hover:text-foreground focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-none",
15444
+ "inline-flex size-8 items-center justify-center rounded-[6px] text-muted-foreground transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none max-lg:size-11",
15466
15445
  themeMode === "eye-care" && "bg-background text-foreground shadow-sm"
15467
15446
  ),
15468
15447
  "aria-label": "Use eye care mode",
@@ -15477,7 +15456,7 @@ function ThemeModeToggle() {
15477
15456
  type: "button",
15478
15457
  onClick: () => setThemeMode("dark"),
15479
15458
  className: cn(
15480
- "inline-flex size-7 items-center justify-center rounded-[6px] text-muted-foreground transition-colors hover:text-foreground focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-none",
15459
+ "inline-flex size-8 items-center justify-center rounded-[6px] text-muted-foreground transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none max-lg:size-11",
15481
15460
  themeMode === "dark" && "bg-background text-foreground shadow-sm"
15482
15461
  ),
15483
15462
  "aria-label": "Use dark mode",
@@ -15528,7 +15507,7 @@ function UiScaleControl({
15528
15507
  SelectTrigger,
15529
15508
  {
15530
15509
  size: "sm",
15531
- className: "bg-white/[0.035] hover:bg-white/[0.065] h-8 min-w-[4rem] justify-center gap-1 border-0 px-2 py-0 text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] [&>svg:last-child]:hidden",
15510
+ className: "h-9 min-w-[4.5rem] justify-center gap-1 border-border/70 bg-muted/70 px-2 py-0 text-muted-foreground hover:bg-muted max-lg:h-11 [&>svg:last-child]:hidden",
15532
15511
  "aria-label": `Interface size: ${currentLabel}`,
15533
15512
  children: [
15534
15513
  /* @__PURE__ */ jsxRuntimeExports.jsx(ALargeSmall, { className: "size-3.5" }),
@@ -15547,11 +15526,33 @@ function UiScaleControl({
15547
15526
  );
15548
15527
  }
15549
15528
  const DETAILS_PANEL_COLLAPSED_STORAGE_KEY = "agent-inspector.detailsPanelCollapsed";
15529
+ const DETAILS_PANEL_WIDTH_STORAGE_KEY = "agent-inspector.detailsPanelWidth";
15550
15530
  const INSPECTOR_PET_VISIBLE_STORAGE_KEY = "agent-inspector.pet.visible";
15531
+ const DETAILS_PANEL_DEFAULT_WIDTH = 360;
15532
+ const DETAILS_PANEL_MIN_WIDTH = 288;
15533
+ const DETAILS_PANEL_MAX_WIDTH = 520;
15534
+ function clampDetailsPanelWidth(width) {
15535
+ return Math.min(Math.max(width, DETAILS_PANEL_MIN_WIDTH), DETAILS_PANEL_MAX_WIDTH);
15536
+ }
15551
15537
  function readStoredDetailsPanelCollapsed() {
15552
15538
  if (typeof window === "undefined") return true;
15553
- const stored = window.localStorage.getItem(DETAILS_PANEL_COLLAPSED_STORAGE_KEY);
15554
- return stored === null || stored === "1";
15539
+ try {
15540
+ const stored = window.localStorage.getItem(DETAILS_PANEL_COLLAPSED_STORAGE_KEY);
15541
+ return stored === null || stored === "1";
15542
+ } catch {
15543
+ return true;
15544
+ }
15545
+ }
15546
+ function readStoredDetailsPanelWidth() {
15547
+ if (typeof window === "undefined") return DETAILS_PANEL_DEFAULT_WIDTH;
15548
+ try {
15549
+ const stored = window.localStorage.getItem(DETAILS_PANEL_WIDTH_STORAGE_KEY);
15550
+ if (stored === null) return DETAILS_PANEL_DEFAULT_WIDTH;
15551
+ const parsed = Number.parseInt(stored, 10);
15552
+ return Number.isFinite(parsed) ? clampDetailsPanelWidth(parsed) : DETAILS_PANEL_DEFAULT_WIDTH;
15553
+ } catch {
15554
+ return DETAILS_PANEL_DEFAULT_WIDTH;
15555
+ }
15555
15556
  }
15556
15557
  function readStoredInspectorPetVisible() {
15557
15558
  if (typeof window === "undefined") return true;
@@ -15644,7 +15645,7 @@ function SessionModelContextRow({ summary }) {
15644
15645
  {
15645
15646
  type: "button",
15646
15647
  onClick: openLatestContext,
15647
- className: "min-w-0 truncate rounded-sm text-left font-mono font-semibold text-foreground transition-colors hover:text-cyan-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
15648
+ className: "min-w-0 truncate rounded-sm text-left font-mono font-semibold text-foreground transition-colors hover:text-text-link focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
15648
15649
  title: `Open latest Context for ${summary.model}`,
15649
15650
  children: summary.model
15650
15651
  }
@@ -15889,6 +15890,8 @@ function ProxyViewer({
15889
15890
  const [deleteDialogOpen, setDeleteDialogOpen] = reactExports.useState(false);
15890
15891
  const [deletingCurrentView, setDeletingCurrentView] = reactExports.useState(false);
15891
15892
  const [detailsPanelCollapsed, setDetailsPanelCollapsed] = reactExports.useState(true);
15893
+ const [detailsPanelWidth, setDetailsPanelWidth] = reactExports.useState(DETAILS_PANEL_DEFAULT_WIDTH);
15894
+ const [detailsPanelResizing, setDetailsPanelResizing] = reactExports.useState(false);
15892
15895
  const [detailsPanelStorageLoaded, setDetailsPanelStorageLoaded] = reactExports.useState(false);
15893
15896
  const [petVisible, setPetVisible] = reactExports.useState(true);
15894
15897
  const [petVisibilityStorageLoaded, setPetVisibilityStorageLoaded] = reactExports.useState(false);
@@ -15901,6 +15904,7 @@ function ProxyViewer({
15901
15904
  const importInputRef = reactExports.useRef(null);
15902
15905
  const exportAbortRef = reactExports.useRef(null);
15903
15906
  const exportRequestIdRef = reactExports.useRef(0);
15907
+ const detailsPanelResizeRef = reactExports.useRef(null);
15904
15908
  useKeyboardNavigation(logListRef, logListWrapperRef, { pageWide: true });
15905
15909
  const proxyEndpoint = reactExports.useMemo(() => {
15906
15910
  const origin = typeof window === "undefined" ? "http://localhost:9527" : window.location.origin;
@@ -15923,6 +15927,7 @@ function ProxyViewer({
15923
15927
  );
15924
15928
  reactExports.useEffect(() => {
15925
15929
  setDetailsPanelCollapsed(readStoredDetailsPanelCollapsed());
15930
+ setDetailsPanelWidth(readStoredDetailsPanelWidth());
15926
15931
  setDetailsPanelStorageLoaded(true);
15927
15932
  }, []);
15928
15933
  reactExports.useEffect(() => {
@@ -15932,6 +15937,13 @@ function ProxyViewer({
15932
15937
  detailsPanelCollapsed ? "1" : "0"
15933
15938
  );
15934
15939
  }, [detailsPanelCollapsed, detailsPanelStorageLoaded]);
15940
+ reactExports.useEffect(() => {
15941
+ if (!detailsPanelStorageLoaded) return;
15942
+ try {
15943
+ window.localStorage.setItem(DETAILS_PANEL_WIDTH_STORAGE_KEY, String(detailsPanelWidth));
15944
+ } catch {
15945
+ }
15946
+ }, [detailsPanelStorageLoaded, detailsPanelWidth]);
15935
15947
  reactExports.useEffect(() => {
15936
15948
  setPetVisible(readStoredInspectorPetVisible());
15937
15949
  setPetVisibilityStorageLoaded(true);
@@ -16079,6 +16091,40 @@ function ProxyViewer({
16079
16091
  const toggleDetailsPanelCollapsed = reactExports.useCallback(() => {
16080
16092
  setDetailsPanelCollapsed((value) => !value);
16081
16093
  }, []);
16094
+ const handleDetailsPanelResizeStart = reactExports.useCallback(
16095
+ (event) => {
16096
+ detailsPanelResizeRef.current = {
16097
+ startX: event.clientX,
16098
+ startWidth: detailsPanelWidth,
16099
+ pointerId: event.pointerId
16100
+ };
16101
+ event.currentTarget.setPointerCapture(event.pointerId);
16102
+ setDetailsPanelResizing(true);
16103
+ },
16104
+ [detailsPanelWidth]
16105
+ );
16106
+ const handleDetailsPanelResizeMove = reactExports.useCallback(
16107
+ (event) => {
16108
+ const resize = detailsPanelResizeRef.current;
16109
+ if (resize === null || resize.pointerId !== event.pointerId) return;
16110
+ setDetailsPanelWidth(
16111
+ clampDetailsPanelWidth(resize.startWidth + resize.startX - event.clientX)
16112
+ );
16113
+ },
16114
+ []
16115
+ );
16116
+ const handleDetailsPanelResizeEnd = reactExports.useCallback((event) => {
16117
+ const resize = detailsPanelResizeRef.current;
16118
+ if (resize === null || resize.pointerId !== event.pointerId) return;
16119
+ if (event.currentTarget.hasPointerCapture(event.pointerId)) {
16120
+ event.currentTarget.releasePointerCapture(event.pointerId);
16121
+ }
16122
+ detailsPanelResizeRef.current = null;
16123
+ setDetailsPanelResizing(false);
16124
+ }, []);
16125
+ const resetDetailsPanelWidth = reactExports.useCallback(() => {
16126
+ setDetailsPanelWidth(DETAILS_PANEL_DEFAULT_WIDTH);
16127
+ }, []);
16082
16128
  const togglePetVisibility = reactExports.useCallback(() => {
16083
16129
  setPetVisible((value) => !value);
16084
16130
  }, []);
@@ -16151,13 +16197,12 @@ function ProxyViewer({
16151
16197
  type: "button",
16152
16198
  onClick: toggleDetailsPanelCollapsed,
16153
16199
  className: cn(
16154
- "group fixed top-1/2 right-3 z-40 inline-flex h-14 w-7 -translate-y-1/2 items-center justify-center rounded-l-md border border-white/[0.08] bg-background/90 text-muted-foreground shadow-[0_12px_34px_rgba(0,0,0,0.26),inset_0_1px_0_rgba(255,255,255,0.06)] backdrop-blur transition-[right,background-color,color,border-color] duration-200 motion-reduce:transition-none hover:border-white/[0.16] hover:bg-white/[0.07] hover:text-foreground focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-none",
16155
- detailsPanelCollapsed ? "right-3" : "lg:right-[calc(21.25rem-0.875rem)] xl:right-[calc(22.5rem-0.875rem)]"
16200
+ "group fixed top-1/2 right-3 z-50 inline-flex h-14 w-8 -translate-y-1/2 items-center justify-center rounded-l-md border border-border/70 bg-background/90 text-muted-foreground shadow-lg backdrop-blur transition-colors motion-reduce:transition-none hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none"
16156
16201
  ),
16157
16202
  "aria-label": detailsPanelCollapsed ? "Show details panel" : "Hide details panel",
16158
16203
  title: detailsPanelCollapsed ? "Show details panel" : "Hide details panel",
16159
16204
  children: [
16160
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "absolute left-1 top-2 bottom-2 w-px rounded-full bg-white/[0.16] transition-colors group-hover:bg-white/[0.28]" }),
16205
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "absolute bottom-2 left-1 top-2 w-px rounded-full bg-border transition-colors group-hover:bg-foreground/35" }),
16161
16206
  detailsPanelCollapsed ? /* @__PURE__ */ jsxRuntimeExports.jsx(PanelRightOpen, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(PanelRightClose, { className: "size-3.5" })
16162
16207
  ]
16163
16208
  }
@@ -16167,86 +16212,132 @@ function ProxyViewer({
16167
16212
  "div",
16168
16213
  {
16169
16214
  className: cn(
16170
- "grid w-full min-w-0 grid-cols-1 lg:min-h-0 lg:flex-1 lg:overflow-hidden",
16171
- detailsPanelCollapsed ? "lg:grid-cols-[minmax(0,1fr)]" : "lg:grid-cols-[minmax(0,1fr)_21.25rem] xl:grid-cols-[minmax(0,1fr)_22.5rem]"
16215
+ "flex w-full min-w-0 flex-col lg:min-h-0 lg:flex-1 lg:flex-row lg:overflow-hidden",
16216
+ detailsPanelResizing && "cursor-col-resize select-none"
16172
16217
  ),
16173
16218
  children: [
16174
- !detailsPanelCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsx("aside", { className: "bg-background/95 order-1 border-b border-white/[0.045] lg:order-2 lg:h-full lg:overflow-y-auto lg:border-b-0 lg:border-l lg:border-white/[0.055] inspector-scrollbar", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-h-full flex-col gap-4 p-4", children: [
16175
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-background/95 sticky top-0 z-20 -mx-4 -mt-4 px-4 pt-4 pb-3 shadow-[0_12px_24px_rgba(0,0,0,0.18),inset_0_-1px_0_rgba(255,255,255,0.045)] backdrop-blur", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarPanel, { label: "Tools", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
16176
- /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeModeToggle, {}),
16177
- /* @__PURE__ */ jsxRuntimeExports.jsx(
16178
- UiScaleControl,
16179
- {
16180
- preference: uiScalePreference,
16181
- resolvedScale: resolvedUiScale,
16182
- onChange: setUiScalePreference
16183
- }
16184
- ),
16185
- /* @__PURE__ */ jsxRuntimeExports.jsx(GroupsDialog, {}),
16186
- /* @__PURE__ */ jsxRuntimeExports.jsx(AgentLabDialog, { currentSessionId: labSessionId, logCount: logs.length })
16187
- ] }) }) }),
16188
- /* @__PURE__ */ jsxRuntimeExports.jsxs(SidebarPanel, { label: "Current scope", children: [
16189
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-2 rounded-md bg-black/20 px-3 py-2 shadow-[inset_0_1px_0_rgba(255,255,255,0.035)]", children: [
16190
- /* @__PURE__ */ jsxRuntimeExports.jsx(
16191
- "div",
16192
- {
16193
- className: "truncate font-mono text-xs font-semibold text-cyan-100",
16194
- title: activeScopeLabel,
16195
- children: activeScopeLabel
16196
- }
16197
- ),
16198
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-1 text-[11px] text-muted-foreground", children: isPinnedSessionPage ? "Pinned session" : "Live Inspector data" })
16199
- ] }),
16200
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-2 gap-2", children: [
16201
- /* @__PURE__ */ jsxRuntimeExports.jsx(
16202
- SidebarMetric,
16203
- {
16204
- label: assistantSearchResult === null ? "Requests" : "Results",
16205
- value: displayedLogs.length
16206
- }
16207
- ),
16208
- /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarMetric, { label: "Sessions", value: sessions.length }),
16209
- /* @__PURE__ */ jsxRuntimeExports.jsx(
16210
- SidebarMetric,
16211
- {
16212
- label: "Input",
16213
- value: formatTokens(hasSessionContext ? sessionContextTotalIn : totalIn)
16214
- }
16215
- ),
16216
- /* @__PURE__ */ jsxRuntimeExports.jsx(
16217
- SidebarMetric,
16218
- {
16219
- label: "Output",
16220
- value: formatTokens(hasSessionContext ? sessionContextTotalOut : totalOut)
16221
- }
16222
- )
16223
- ] }),
16224
- sessionLoadProgress !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-2 rounded-md bg-black/20 px-2 py-2 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.045)]", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SessionLoadProgressBar, { progress: sessionLoadProgress }) })
16225
- ] }),
16226
- hasSessionContext && sessionContextScope !== null && /* @__PURE__ */ jsxRuntimeExports.jsx(
16227
- SessionContextBar,
16219
+ !detailsPanelCollapsed && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
16220
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
16221
+ "button",
16228
16222
  {
16229
- label: sessionContextScope.label,
16230
- logs: sessionContextLogs,
16231
- totalIn: sessionContextTotalIn,
16232
- totalOut: sessionContextTotalOut,
16233
- timeDisplayFormat,
16234
- contextSummary: sessionContextSummary,
16235
- showBackLink: sessionContextScope.showBackLink
16223
+ type: "button",
16224
+ className: "fixed inset-0 z-30 bg-background/70 backdrop-blur-sm lg:hidden",
16225
+ onClick: toggleDetailsPanelCollapsed,
16226
+ "aria-label": "Close details panel"
16236
16227
  }
16237
16228
  ),
16238
- hasSessionContext && pinnedSessionId !== void 0 && sessionMemberships.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(SessionMembershipPanel, { memberships: sessionMemberships }),
16239
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" }),
16240
- /* @__PURE__ */ jsxRuntimeExports.jsx(
16241
- PiAgentPanel,
16229
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
16230
+ "aside",
16242
16231
  {
16243
- currentSessionId: labSessionId,
16244
- logCount: logs.length,
16245
- onResultChange: setAssistantSearchResult
16232
+ className: "inspector-scrollbar fixed inset-x-3 bottom-3 top-24 z-40 order-1 overflow-y-auto rounded-lg border border-border bg-background/98 shadow-2xl max-lg:!w-auto lg:relative lg:inset-auto lg:order-2 lg:h-full lg:shrink-0 lg:rounded-none lg:border-y-0 lg:border-r-0 lg:shadow-none",
16233
+ style: { width: detailsPanelWidth },
16234
+ children: [
16235
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
16236
+ "button",
16237
+ {
16238
+ type: "button",
16239
+ className: "absolute bottom-0 left-0 top-0 z-30 hidden w-2 -translate-x-1/2 cursor-col-resize touch-none items-center justify-center lg:flex",
16240
+ onPointerDown: handleDetailsPanelResizeStart,
16241
+ onPointerMove: handleDetailsPanelResizeMove,
16242
+ onPointerUp: handleDetailsPanelResizeEnd,
16243
+ onPointerCancel: handleDetailsPanelResizeEnd,
16244
+ onDoubleClick: resetDetailsPanelWidth,
16245
+ "aria-label": "Resize details panel",
16246
+ title: "Drag to resize; double-click to reset",
16247
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "h-12 w-1 rounded-full bg-border transition-colors hover:bg-primary" })
16248
+ }
16249
+ ),
16250
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-h-full flex-col gap-4 p-4", children: [
16251
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "sticky top-0 z-20 -mx-4 -mt-4 grid gap-2 border-b border-border/60 bg-background/95 px-4 pb-3 pt-4 backdrop-blur", children: [
16252
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarPanel, { label: "View", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
16253
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ThemeModeToggle, {}),
16254
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
16255
+ UiScaleControl,
16256
+ {
16257
+ preference: uiScalePreference,
16258
+ resolvedScale: resolvedUiScale,
16259
+ onChange: setUiScalePreference
16260
+ }
16261
+ )
16262
+ ] }) }),
16263
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarPanel, { label: "Workspace", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
16264
+ /* @__PURE__ */ jsxRuntimeExports.jsx(GroupsDialog, { labelledTrigger: true }),
16265
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
16266
+ AgentLabDialog,
16267
+ {
16268
+ currentSessionId: labSessionId,
16269
+ logCount: logs.length,
16270
+ labelledTrigger: true
16271
+ }
16272
+ )
16273
+ ] }) })
16274
+ ] }),
16275
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(SidebarPanel, { label: "Current scope", children: [
16276
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-2 rounded-md border border-border/50 bg-muted/25 px-3 py-2", children: [
16277
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
16278
+ "div",
16279
+ {
16280
+ className: "truncate font-mono text-xs font-semibold text-text-link",
16281
+ title: activeScopeLabel,
16282
+ children: activeScopeLabel
16283
+ }
16284
+ ),
16285
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-1 text-[11px] text-muted-foreground", children: isPinnedSessionPage ? "Pinned session" : "Live Inspector data" })
16286
+ ] }),
16287
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-2 gap-2", children: [
16288
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
16289
+ SidebarMetric,
16290
+ {
16291
+ label: assistantSearchResult === null ? "Requests" : "Results",
16292
+ value: displayedLogs.length
16293
+ }
16294
+ ),
16295
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarMetric, { label: "Sessions", value: sessions.length }),
16296
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
16297
+ SidebarMetric,
16298
+ {
16299
+ label: "Input",
16300
+ value: formatTokens(hasSessionContext ? sessionContextTotalIn : totalIn)
16301
+ }
16302
+ ),
16303
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
16304
+ SidebarMetric,
16305
+ {
16306
+ label: "Output",
16307
+ value: formatTokens(hasSessionContext ? sessionContextTotalOut : totalOut)
16308
+ }
16309
+ )
16310
+ ] }),
16311
+ sessionLoadProgress !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-2 rounded-md border border-border/50 bg-muted/25 px-2 py-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SessionLoadProgressBar, { progress: sessionLoadProgress }) })
16312
+ ] }),
16313
+ hasSessionContext && sessionContextScope !== null && /* @__PURE__ */ jsxRuntimeExports.jsx(
16314
+ SessionContextBar,
16315
+ {
16316
+ label: sessionContextScope.label,
16317
+ logs: sessionContextLogs,
16318
+ totalIn: sessionContextTotalIn,
16319
+ totalOut: sessionContextTotalOut,
16320
+ timeDisplayFormat,
16321
+ contextSummary: sessionContextSummary,
16322
+ showBackLink: sessionContextScope.showBackLink
16323
+ }
16324
+ ),
16325
+ hasSessionContext && pinnedSessionId !== void 0 && sessionMemberships.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(SessionMembershipPanel, { memberships: sessionMemberships }),
16326
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" }),
16327
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
16328
+ PiAgentPanel,
16329
+ {
16330
+ currentSessionId: labSessionId,
16331
+ logCount: logs.length,
16332
+ onResultChange: setAssistantSearchResult
16333
+ }
16334
+ )
16335
+ ] })
16336
+ ]
16246
16337
  }
16247
16338
  )
16248
- ] }) }),
16249
- /* @__PURE__ */ jsxRuntimeExports.jsxs("main", { className: "order-2 min-w-0 lg:order-1 lg:h-full lg:overflow-y-auto inspector-scrollbar", children: [
16339
+ ] }),
16340
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("main", { className: "inspector-scrollbar order-2 min-w-0 lg:order-1 lg:h-full lg:flex-1 lg:overflow-y-auto", children: [
16250
16341
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-background/95 shadow-[0_12px_36px_rgba(0,0,0,0.18),inset_0_-1px_0_rgba(255,255,255,0.045)] sticky top-0 z-30 px-4 py-3 lg:px-5", children: [
16251
16342
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
16252
16343
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-[180px] flex-1", children: [