@tonyclaw/agent-inspector 3.0.9 → 3.0.10

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 (36) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-CJKL4LMm.js → CompareDrawer-BxLP7jmX.js} +1 -1
  3. package/.output/public/assets/ProxyViewerContainer-D_2ez29e.js +106 -0
  4. package/.output/public/assets/{ReplayDialog-BYanl-a_.js → ReplayDialog-Btm-wONI.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-DvPz1jqE.js → RequestAnatomy-C9eZJN9E.js} +1 -1
  6. package/.output/public/assets/{ResponseView-sZnxp9GN.js → ResponseView-9R2MW1kp.js} +2 -2
  7. package/.output/public/assets/{StreamingChunkSequence-G-tiYiBd.js → StreamingChunkSequence-zxqGpFfv.js} +1 -1
  8. package/.output/public/assets/{_sessionId-_hDcsmXq.js → _sessionId-C0tPTQlC.js} +1 -1
  9. package/.output/public/assets/index-BIgsQvaF.css +1 -0
  10. package/.output/public/assets/index-DgVWrzsQ.js +1 -0
  11. package/.output/public/assets/{index-SuOSQb2_.js → index-WiDkyjq8.js} +1 -1
  12. package/.output/public/assets/{json-viewer-yQdhgjaw.js → json-viewer-BAmkfRDE.js} +1 -1
  13. package/.output/public/assets/{main-CgjcDxjR.js → main-2feHoEI6.js} +2 -2
  14. package/.output/server/_libs/lucide-react.mjs +2 -2
  15. package/.output/server/{_sessionId-BGISf2En.mjs → _sessionId-BkoyescL.mjs} +2 -2
  16. package/.output/server/_ssr/{CompareDrawer-s-UF9gW3.mjs → CompareDrawer-irfFdkJ8.mjs} +3 -3
  17. package/.output/server/_ssr/{ProxyViewerContainer-C0Sbz9ED.mjs → ProxyViewerContainer-CcJr9STz.mjs} +88 -105
  18. package/.output/server/_ssr/{ReplayDialog-DvS8gvJr.mjs → ReplayDialog-CJnmXQGT.mjs} +3 -3
  19. package/.output/server/_ssr/{RequestAnatomy-BwhWglJL.mjs → RequestAnatomy-CupP0Wdb.mjs} +2 -2
  20. package/.output/server/_ssr/{ResponseView-wBVreqQf.mjs → ResponseView-Bp-0t5cd.mjs} +2 -2
  21. package/.output/server/_ssr/{StreamingChunkSequence-Dr6eg-MJ.mjs → StreamingChunkSequence-BXSn4kMH.mjs} +2 -2
  22. package/.output/server/_ssr/{index-B98Wia1X.mjs → index-KVltJBV8.mjs} +2 -2
  23. package/.output/server/_ssr/index.mjs +2 -2
  24. package/.output/server/_ssr/{json-viewer-D7L8y0FH.mjs → json-viewer-EYQ5eG2Q.mjs} +2 -2
  25. package/.output/server/_ssr/{router-g9mo0nWT.mjs → router-_cAQddXC.mjs} +21 -12
  26. package/.output/server/{_tanstack-start-manifest_v-CbGc-o50.mjs → _tanstack-start-manifest_v-BfiF5iov.mjs} +1 -1
  27. package/.output/server/index.mjs +65 -65
  28. package/package.json +1 -1
  29. package/src/components/ProxyViewerContainer.tsx +10 -2
  30. package/src/components/providers/ProviderCard.tsx +83 -91
  31. package/src/components/providers/ProvidersPanel.tsx +7 -7
  32. package/src/components/providers/SettingsDialog.tsx +17 -22
  33. package/src/routes/api/logs.ts +14 -5
  34. package/.output/public/assets/ProxyViewerContainer-DBUy29O-.js +0 -106
  35. package/.output/public/assets/index-DAPAWsAd.js +0 -1
  36. package/.output/public/assets/index-DspnLqUW.css +0 -1
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, a as React } from "../_libs/react.mjs";
2
- import { C as CapturedLogSchema, 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, d as RuntimeConfigSchema, p as packageJson, P as ProviderConfigSchema, i as apiFormatForPath, n as DeleteInspectorGroupsResponseSchema, o as GroupEvidenceExportResultSchema, q as DeleteInspectorGroupResponseSchema, l as AlertSummarySchema, m as AlertListResponseSchema, I as InspectorGroupsListResponseSchema, G as GroupEvidenceReadResponseSchema, z as createPendingProviderTestResults, B as ProviderTestResultsSchema, E as createFailedProviderTestResults, M as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, F as MAX_PROVIDER_TEST_TIMEOUT_SECONDS, T as TimeDisplayFormatSchema, t as maskApiKey, u as PATH_V1_MESSAGES, v as PATH_V1_CHAT_COMPLETIONS, w as PATH_V1_RESPONSES, r as providerHasContextMetadata, f as parseOpenAIResponse, g as parseOpenAIResponsesResponse, O as OpenAIRequestSchema, h as OpenAIResponsesRequestSchema, A as AnthropicResponseSchema$1, e as AnthropicRequestSchema, s as safeGetOwnProperty, H as resolveProviderContextWindow, j as getSessionPath, x as findProviderModelMetadata, y as previewUpstreamUrl, K as KnowledgeCandidateSchema, J as isPlainRecord, k as stripClaudeCodeBillingHeader, L as LogBodyChunkSchema } from "./router-g9mo0nWT.mjs";
2
+ import { C as CapturedLogSchema, 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, d as RuntimeConfigSchema, p as packageJson, P as ProviderConfigSchema, i as apiFormatForPath, n as DeleteInspectorGroupsResponseSchema, o as GroupEvidenceExportResultSchema, q as DeleteInspectorGroupResponseSchema, l as AlertSummarySchema, m as AlertListResponseSchema, I as InspectorGroupsListResponseSchema, G as GroupEvidenceReadResponseSchema, z as createPendingProviderTestResults, B as ProviderTestResultsSchema, E as createFailedProviderTestResults, M as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, F as MAX_PROVIDER_TEST_TIMEOUT_SECONDS, T as TimeDisplayFormatSchema, t as maskApiKey, v as PATH_V1_MESSAGES, w as PATH_V1_CHAT_COMPLETIONS, x as PATH_V1_RESPONSES, r as providerHasContextMetadata, f as parseOpenAIResponse, g as parseOpenAIResponsesResponse, O as OpenAIRequestSchema, h as OpenAIResponsesRequestSchema, A as AnthropicResponseSchema$1, e as AnthropicRequestSchema, s as safeGetOwnProperty, H as resolveProviderContextWindow, j as getSessionPath, u as findProviderModelMetadata, y as previewUpstreamUrl, K as KnowledgeCandidateSchema, J as isPlainRecord, k as stripClaudeCodeBillingHeader, L as LogBodyChunkSchema } from "./router-_cAQddXC.mjs";
3
3
  import { u as useSWR, a as useSWRConfig } from "../_libs/swr.mjs";
4
4
  import { J as JSZip } from "../_libs/jszip.mjs";
5
5
  import { c as clsx } from "../_libs/clsx.mjs";
@@ -9,7 +9,7 @@ import { c as cva } from "../_libs/class-variance-authority.mjs";
9
9
  import { u as useWindowVirtualizer, a as useVirtualizer } from "../_libs/tanstack__react-virtual.mjs";
10
10
  import { d as diffJson, a as diffLines } from "../_libs/diff.mjs";
11
11
  import { R as Root2, T as Trigger, I as Icon, V as Value, P as Portal, C as Content2, a as Viewport, b as Item, c as ItemIndicator, d as ItemText, S as ScrollUpButton, e as ScrollDownButton } from "../_libs/radix-ui__react-select.mjs";
12
- import { T as TriangleAlert, C as CircleCheck, X, I as Info, a as ChevronDown, b as Check, R as RefreshCw, c as Trash2, S as Search, U as Upload, D as Download, F as FileBraces, P as Plus, A as ArrowLeft, d as ChevronUp, e as Copy, f as ChevronsLeft, g as ChevronLeft, h as ChevronRight, i as ChevronsRight, j as Clapperboard, k as Flag, l as Siren, m as Timer, G as Gauge, L as LoaderCircle, n as Layers, o as FlaskConical, p as Sparkles, q as Activity, B as Beaker, N as Network, r as Terminal, s as Settings, M as Monitor, t as Rocket, u as PackageCheck, v as Scan, w as CircleAlert, x as ArrowUpRight, y as ArrowDownRight, z as Cpu, E as FolderOpen, H as Bell, J as Clock3, K as ShieldAlert, O as EyeOff, Q as Eye, V as ExternalLink, W as Clock, Y as RotateCw, Z as Pencil, _ as MessageSquare, $ as Zap, a0 as Wrench, a1 as Brain, a2 as Minus, a3 as CircleCheckBig, a4 as CircleQuestionMark, a5 as Server, a6 as Lock, a7 as Wifi, a8 as WifiOff, a9 as CircleX, aa as ShieldCheck, ab as Save, ac as FileSearch, ad as CloudUpload, ae as OctagonAlert, af as Radio, ag as Globe, ah as FileTerminal, ai as ChevronsUp, aj as ChevronsDown, ak as FileDiff, al as History, am as RotateCcw, an as GitCompareArrows, ao as ArrowUp, ap as ArrowDown, aq as Ellipsis, ar as CodeXml, as as Blocks, at as MousePointerClick, au as FileText, av as Rows3, aw as Columns2 } from "../_libs/lucide-react.mjs";
12
+ import { T as TriangleAlert, C as CircleCheck, X, I as Info, a as ChevronDown, b as Check, R as RefreshCw, c as Trash2, S as Search, U as Upload, D as Download, F as FileBraces, P as Plus, A as ArrowLeft, d as ChevronUp, e as Copy, f as ChevronsLeft, g as ChevronLeft, h as ChevronRight, i as ChevronsRight, j as Clapperboard, k as Flag, l as Siren, m as Timer, G as Gauge, L as LoaderCircle, n as Layers, o as FlaskConical, p as Sparkles, q as Activity, B as Beaker, N as Network, r as Terminal, s as Settings, M as Monitor, t as Rocket, u as PackageCheck, v as Scan, w as CircleAlert, x as ArrowUpRight, y as ArrowDownRight, z as Cpu, E as FolderOpen, H as Bell, J as Clock3, K as ShieldAlert, O as EyeOff, Q as Eye, V as ExternalLink, W as Clock, Y as RotateCw, Z as Pencil, _ as MessageSquare, $ as Zap, a0 as Wrench, a1 as Brain, a2 as CircleCheckBig, a3 as Minus, a4 as CircleQuestionMark, a5 as Server, a6 as Lock, a7 as Wifi, a8 as WifiOff, a9 as CircleX, aa as ShieldCheck, ab as Save, ac as FileSearch, ad as CloudUpload, ae as OctagonAlert, af as Radio, ag as Globe, ah as FileTerminal, ai as ChevronsUp, aj as ChevronsDown, ak as FileDiff, al as History, am as RotateCcw, an as GitCompareArrows, ao as ArrowUp, ap as ArrowDown, aq as Ellipsis, ar as CodeXml, as as Blocks, at as MousePointerClick, au as FileText, av as Rows3, aw as Columns2 } from "../_libs/lucide-react.mjs";
13
13
  import { u as union, d as object, a as array, l as literal, n as number, c as boolean, b as string, _ as _enum } from "../_libs/zod.mjs";
14
14
  import { S as Slot } from "../_libs/radix-ui__react-slot.mjs";
15
15
  import { R as Root2$1, L as List, T as Trigger$2, C as Content$1 } from "../_libs/radix-ui__react-tabs.mjs";
@@ -2546,27 +2546,27 @@ function useCopyFeedback(text) {
2546
2546
  return { copied, copy };
2547
2547
  }
2548
2548
  const LazyCompareDrawer = reactExports.lazy(
2549
- () => import("./CompareDrawer-s-UF9gW3.mjs").then((m) => ({ default: m.CompareDrawer }))
2549
+ () => import("./CompareDrawer-irfFdkJ8.mjs").then((m) => ({ default: m.CompareDrawer }))
2550
2550
  );
2551
2551
  const LazyReplayDialog = reactExports.lazy(
2552
- () => import("./ReplayDialog-DvS8gvJr.mjs").then((m) => ({ default: m.ReplayDialog }))
2552
+ () => import("./ReplayDialog-CJnmXQGT.mjs").then((m) => ({ default: m.ReplayDialog }))
2553
2553
  );
2554
2554
  const LazyRequestAnatomy = reactExports.lazy(
2555
- () => import("./RequestAnatomy-BwhWglJL.mjs").then((m) => ({ default: m.RequestAnatomy }))
2555
+ () => import("./RequestAnatomy-CupP0Wdb.mjs").then((m) => ({ default: m.RequestAnatomy }))
2556
2556
  );
2557
2557
  const LazyResponseView = reactExports.lazy(
2558
- () => import("./ResponseView-wBVreqQf.mjs").then((m) => ({ default: m.ResponseView }))
2558
+ () => import("./ResponseView-Bp-0t5cd.mjs").then((m) => ({ default: m.ResponseView }))
2559
2559
  );
2560
2560
  const LazyStreamingChunkSequence = reactExports.lazy(
2561
- () => import("./StreamingChunkSequence-Dr6eg-MJ.mjs").then((m) => ({
2561
+ () => import("./StreamingChunkSequence-BXSn4kMH.mjs").then((m) => ({
2562
2562
  default: m.StreamingChunkSequence
2563
2563
  }))
2564
2564
  );
2565
2565
  const LazyJsonViewer = reactExports.lazy(
2566
- () => import("./json-viewer-D7L8y0FH.mjs").then((m) => ({ default: m.JsonViewer }))
2566
+ () => import("./json-viewer-EYQ5eG2Q.mjs").then((m) => ({ default: m.JsonViewer }))
2567
2567
  );
2568
2568
  const LazyJsonViewerFromString = reactExports.lazy(
2569
- () => import("./json-viewer-D7L8y0FH.mjs").then((m) => ({ default: m.JsonViewerFromString }))
2569
+ () => import("./json-viewer-EYQ5eG2Q.mjs").then((m) => ({ default: m.JsonViewerFromString }))
2570
2570
  );
2571
2571
  const HIGHLIGHT_DURATION_MS = 1200;
2572
2572
  const MAX_HIGHLIGHT_ATTEMPTS = 12;
@@ -8299,33 +8299,12 @@ function ProviderFormatTestStatus({
8299
8299
  ] })
8300
8300
  ] });
8301
8301
  }
8302
- function EndpointDiagnosticLine({
8303
- diagnostic
8304
- }) {
8305
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: diagnostic.severity === "warning" ? "text-amber-200" : "text-muted-foreground", children: diagnostic.message });
8306
- }
8307
- function ProviderEndpointSummary({
8302
+ function ProviderFormatStatusBlock({
8308
8303
  label,
8309
- baseUrl,
8310
- endpoint,
8311
- providerName,
8312
8304
  children
8313
8305
  }) {
8314
- const preview = previewUpstreamUrl(baseUrl, endpoint, { providerName });
8315
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 flex-col gap-2 border-t border-border/60 pt-2 first:border-t-0 first:pt-0", children: [
8316
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid min-w-0 gap-1 text-xs sm:grid-cols-[104px_minmax(0,1fr)]", children: [
8317
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-muted-foreground", children: label }),
8318
- /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "min-w-0 break-all font-mono text-foreground/80", children: baseUrl }),
8319
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] uppercase text-muted-foreground/80", children: "Final" }),
8320
- /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "min-w-0 break-all font-mono text-foreground", children: preview.finalUrl })
8321
- ] }),
8322
- preview.diagnostics.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-1 text-xs", children: preview.diagnostics.map((diagnostic) => /* @__PURE__ */ jsxRuntimeExports.jsx(
8323
- EndpointDiagnosticLine,
8324
- {
8325
- diagnostic
8326
- },
8327
- `${diagnostic.severity}:${diagnostic.message}`
8328
- )) }),
8306
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 space-y-2 rounded-md border border-border/60 bg-muted/15 p-2", children: [
8307
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs font-medium text-foreground/80", children: label }),
8329
8308
  children
8330
8309
  ] });
8331
8310
  }
@@ -8345,22 +8324,38 @@ function providerTestTargets(provider) {
8345
8324
  }
8346
8325
  return targets;
8347
8326
  }
8348
- function ProviderTestCoverage({ provider }) {
8349
- const targets = providerTestTargets(provider);
8350
- if (targets.length === 0) {
8327
+ function CapabilityChip({
8328
+ label,
8329
+ enabled,
8330
+ tone
8331
+ }) {
8332
+ const resolvedTone = tone ?? (enabled ? "active" : "quiet");
8333
+ const className = resolvedTone === "response" && enabled ? "border-sky-300/30 bg-sky-300/[0.09] text-sky-100" : enabled ? "border-border/70 bg-muted/25 text-foreground/80" : "border-border/50 bg-transparent text-muted-foreground/70";
8334
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: `inline-flex items-center gap-1 rounded border px-1.5 py-0.5 ${className}`, children: [
8335
+ enabled ? /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "size-3" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Minus, { className: "size-3" }),
8336
+ label
8337
+ ] });
8338
+ }
8339
+ function ProviderCapabilitySummary({ provider }) {
8340
+ const hasAnthropic = providerHasEndpoint(provider.anthropicBaseUrl);
8341
+ const hasChat = providerHasEndpoint(provider.openaiBaseUrl);
8342
+ const hasResponses = providerHasEndpoint(provider.openaiResponsesBaseUrl);
8343
+ if (!hasAnthropic && !hasChat && !hasResponses) {
8351
8344
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: "Test requires at least one configured endpoint." });
8352
8345
  }
8353
8346
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-1.5 text-xs text-muted-foreground", children: [
8354
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Test covers" }),
8355
- targets.map((target) => /* @__PURE__ */ jsxRuntimeExports.jsx(
8356
- "span",
8347
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Capabilities" }),
8348
+ hasAnthropic && /* @__PURE__ */ jsxRuntimeExports.jsx(CapabilityChip, { label: "Anthropic", enabled: true }),
8349
+ hasChat && /* @__PURE__ */ jsxRuntimeExports.jsx(CapabilityChip, { label: "OpenAI Chat", enabled: true }),
8350
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
8351
+ CapabilityChip,
8357
8352
  {
8358
- className: "rounded border border-border/70 bg-muted/25 px-1.5 py-0.5 text-foreground/80",
8359
- children: target
8360
- },
8361
- target
8362
- )),
8363
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "non-stream + stream" })
8353
+ label: hasResponses ? "OpenAI Responses" : "No OpenAI Responses",
8354
+ enabled: hasResponses,
8355
+ tone: "response"
8356
+ }
8357
+ ),
8358
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "tested non-stream + stream" })
8364
8359
  ] });
8365
8360
  }
8366
8361
  function configuredFormatResults(provider, testResults) {
@@ -8725,7 +8720,7 @@ function ProviderCard({
8725
8720
  ] })
8726
8721
  ] }),
8727
8722
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2 text-xs text-muted-foreground sm:flex-row sm:items-center sm:justify-between", children: [
8728
- /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderTestCoverage, { provider }),
8723
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderCapabilitySummary, { provider }),
8729
8724
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
8730
8725
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Key configured" }),
8731
8726
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: provider.authHeader === "x-api-key" ? "x-api-key" : "Bearer" }),
@@ -8792,36 +8787,21 @@ function ProviderCard({
8792
8787
  )
8793
8788
  ] }),
8794
8789
  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)) }),
8795
- providerHasEndpoint(provider.anthropicBaseUrl) && /* @__PURE__ */ jsxRuntimeExports.jsx(
8796
- ProviderEndpointSummary,
8797
- {
8798
- label: "Anthropic",
8799
- baseUrl: provider.anthropicBaseUrl,
8800
- endpoint: PATH_V1_MESSAGES,
8801
- providerName: provider.name,
8802
- children: testResults !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderFormatTestStatus, { results: testResults.anthropic })
8803
- }
8804
- ),
8805
- providerHasEndpoint(provider.openaiBaseUrl) && /* @__PURE__ */ jsxRuntimeExports.jsx(
8806
- ProviderEndpointSummary,
8807
- {
8808
- label: "Chat",
8809
- baseUrl: provider.openaiBaseUrl,
8810
- endpoint: PATH_V1_CHAT_COMPLETIONS,
8811
- providerName: provider.name,
8812
- children: testResults !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderFormatTestStatus, { results: testResults.openaiChat })
8813
- }
8814
- ),
8815
- providerHasEndpoint(provider.openaiResponsesBaseUrl) && /* @__PURE__ */ jsxRuntimeExports.jsx(
8816
- ProviderEndpointSummary,
8817
- {
8818
- label: "Responses",
8819
- baseUrl: provider.openaiResponsesBaseUrl,
8820
- endpoint: PATH_V1_RESPONSES,
8821
- providerName: provider.name,
8822
- children: testResults !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderFormatTestStatus, { results: testResults.openaiResponses })
8823
- }
8824
- ),
8790
+ (providerHasEndpoint(provider.anthropicBaseUrl) || providerHasEndpoint(provider.openaiBaseUrl) || providerHasEndpoint(provider.openaiResponsesBaseUrl)) && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-2 lg:grid-cols-3", children: [
8791
+ providerHasEndpoint(provider.anthropicBaseUrl) && /* @__PURE__ */ jsxRuntimeExports.jsxs(ProviderFormatStatusBlock, { label: "Anthropic", children: [
8792
+ testResults !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderFormatTestStatus, { results: testResults.anthropic }),
8793
+ testResults === void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: "Not tested yet" })
8794
+ ] }),
8795
+ providerHasEndpoint(provider.openaiBaseUrl) && /* @__PURE__ */ jsxRuntimeExports.jsxs(ProviderFormatStatusBlock, { label: "OpenAI Chat", children: [
8796
+ testResults !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderFormatTestStatus, { results: testResults.openaiChat }),
8797
+ testResults === void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: "Not tested yet" })
8798
+ ] }),
8799
+ providerHasEndpoint(provider.openaiResponsesBaseUrl) && /* @__PURE__ */ jsxRuntimeExports.jsxs(ProviderFormatStatusBlock, { label: "OpenAI Responses", children: [
8800
+ testResults !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderFormatTestStatus, { results: testResults.openaiResponses }),
8801
+ testResults === void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: "Not tested yet" })
8802
+ ] }),
8803
+ !providerHasEndpoint(provider.openaiResponsesBaseUrl) && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-w-0 rounded-md border border-border/50 bg-transparent p-2 text-xs text-muted-foreground/75", children: "OpenAI Responses not configured" })
8804
+ ] }),
8825
8805
  testResults?.models !== void 0 && Object.keys(testResults.models).length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
8826
8806
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
8827
8807
  "button",
@@ -10244,7 +10224,7 @@ function ProvidersPanel({
10244
10224
  }
10245
10225
  if (showForm || editingProvider) {
10246
10226
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
10247
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border border-border bg-background/95 shadow-sm sticky top-0 z-10 flex items-center justify-between rounded-[8px] px-3 py-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-medium", children: editingProvider ? "Edit Provider" : "Add New Provider" }) }),
10227
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "sticky top-0 z-10 flex items-center justify-between gap-3 rounded-[8px] bg-background/95 px-1 py-1 backdrop-blur", children: /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-medium", children: editingProvider ? "Edit Provider" : "Add New Provider" }) }),
10248
10228
  /* @__PURE__ */ jsxRuntimeExports.jsx(
10249
10229
  ProviderForm,
10250
10230
  {
@@ -10259,7 +10239,7 @@ function ProvidersPanel({
10259
10239
  ] });
10260
10240
  }
10261
10241
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
10262
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-border bg-background/95 shadow-sm sticky top-0 z-10 flex items-center justify-between rounded-[8px] px-3 py-2", children: [
10242
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "sticky top-0 z-10 flex items-center justify-between gap-3 rounded-[8px] bg-background/95 px-1 py-1 backdrop-blur", children: [
10263
10243
  /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-medium", children: "Providers" }),
10264
10244
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
10265
10245
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
@@ -10326,7 +10306,7 @@ function ProvidersPanel({
10326
10306
  ] })
10327
10307
  ] })
10328
10308
  ] }),
10329
- configPath !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-border bg-card shadow-sm flex items-center gap-2 rounded-[8px] px-3 py-2 text-xs text-muted-foreground", children: [
10309
+ configPath !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 rounded-[8px] bg-muted/15 px-3 py-2 text-xs text-muted-foreground", children: [
10330
10310
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0", children: "Config:" }),
10331
10311
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono truncate", title: configPath, children: configPath }),
10332
10312
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
@@ -10360,13 +10340,13 @@ function ProvidersPanel({
10360
10340
  "Add Your First Provider"
10361
10341
  ] })
10362
10342
  ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
10363
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border border-border bg-muted/40 flex gap-1 rounded-[8px] p-1", children: ["all", "personal", "company"].map((tab) => /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
10343
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "inline-flex w-fit gap-1 rounded-[8px] bg-muted/20 p-1", children: ["all", "personal", "company"].map((tab) => /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
10364
10344
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
10365
10345
  "button",
10366
10346
  {
10367
10347
  type: "button",
10368
10348
  onClick: () => setSourceFilter(tab),
10369
- className: `px-3 py-2 text-sm font-medium border-b-2 transition-colors ${sourceFilter === tab ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground"}`,
10349
+ className: `rounded-md px-3 py-1.5 text-sm font-medium transition-colors ${sourceFilter === tab ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"}`,
10370
10350
  children: tab === "all" ? "All" : tab === "personal" ? "Personal" : "Company"
10371
10351
  }
10372
10352
  ) }),
@@ -10471,17 +10451,17 @@ function SettingsDialog() {
10471
10451
  ]
10472
10452
  }
10473
10453
  ) }),
10474
- /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "max-w-2xl max-h-[80vh] overflow-hidden flex flex-col", children: [
10454
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "flex max-h-[80vh] max-w-2xl flex-col overflow-hidden", children: [
10475
10455
  /* @__PURE__ */ jsxRuntimeExports.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(DialogTitle, { children: "Settings" }) }),
10476
10456
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Tabs, { value: activeTab, onValueChange: setActiveTab, className: "flex-1 overflow-hidden", children: [
10477
- /* @__PURE__ */ jsxRuntimeExports.jsxs(TabsList, { children: [
10457
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(TabsList, { className: "w-full justify-start bg-muted/35", children: [
10478
10458
  /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "providers", children: "Providers" }),
10479
10459
  /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "proxy", children: "Proxy" }),
10480
10460
  /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "storage", children: "Storage" }),
10481
10461
  /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "mcp", children: "MCP" }),
10482
10462
  /* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "onboarding", children: "Onboarding" })
10483
10463
  ] }),
10484
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-4 flex-1 overflow-x-hidden overflow-y-auto pr-3", children: [
10464
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-4 flex-1 overflow-x-hidden overflow-y-auto pr-2", children: [
10485
10465
  /* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "providers", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
10486
10466
  ProvidersPanel,
10487
10467
  {
@@ -10561,7 +10541,7 @@ function StorageSettingsTab() {
10561
10541
  }, []);
10562
10542
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
10563
10543
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-3", children: [
10564
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
10544
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0", children: [
10565
10545
  /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-semibold", children: "Log storage" }),
10566
10546
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Inspect local log and streaming chunk footprint before exporting or clearing sessions." })
10567
10547
  ] }),
@@ -10598,14 +10578,14 @@ function StorageSettingsTab() {
10598
10578
  onCopy: handleCopy
10599
10579
  }
10600
10580
  ),
10601
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-border bg-muted/40 rounded-md px-3 py-2", children: [
10581
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md bg-muted/20 px-3 py-2", children: [
10602
10582
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-medium", children: "In-memory logs" }),
10603
10583
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-1 font-mono text-muted-foreground", children: [
10604
10584
  stats.memoryCount.toLocaleString(),
10605
10585
  " loaded"
10606
10586
  ] })
10607
10587
  ] }),
10608
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-border bg-muted/40 rounded-md px-3 py-2", children: [
10588
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md bg-muted/20 px-3 py-2", children: [
10609
10589
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-medium", children: "Log files" }),
10610
10590
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-1 font-mono text-muted-foreground", children: [
10611
10591
  stats.logFileCount.toLocaleString(),
@@ -10613,7 +10593,7 @@ function StorageSettingsTab() {
10613
10593
  formatBytes(stats.logBytes)
10614
10594
  ] })
10615
10595
  ] }),
10616
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-border bg-muted/40 rounded-md px-3 py-2", children: [
10596
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md bg-muted/20 px-3 py-2", children: [
10617
10597
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-medium", children: "Streaming chunks" }),
10618
10598
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-1 font-mono text-muted-foreground", children: [
10619
10599
  stats.chunkFileCount.toLocaleString(),
@@ -10621,7 +10601,7 @@ function StorageSettingsTab() {
10621
10601
  formatBytes(stats.chunkBytes)
10622
10602
  ] })
10623
10603
  ] }),
10624
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-border bg-muted/40 rounded-md px-3 py-2", children: [
10604
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md bg-muted/20 px-3 py-2", children: [
10625
10605
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-medium", children: "Session archives" }),
10626
10606
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-1 font-mono text-muted-foreground", children: [
10627
10607
  stats.sessionArchiveFileCount.toLocaleString(),
@@ -10642,7 +10622,7 @@ function CopyableSetupValue({
10642
10622
  onCopy
10643
10623
  }) {
10644
10624
  const copied = copiedId === id;
10645
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-border bg-muted/40 min-w-0 rounded-md px-3 py-2", children: [
10625
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 rounded-md border border-border/45 bg-muted/15 px-3 py-2 transition-colors hover:bg-muted/25", children: [
10646
10626
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-1 text-xs font-medium text-muted-foreground", children: label }),
10647
10627
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
10648
10628
  /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "min-w-0 flex-1 truncate font-mono text-xs text-foreground", children: value }),
@@ -10741,7 +10721,7 @@ function OnboardingSettingsTab() {
10741
10721
  },
10742
10722
  item.id
10743
10723
  )) }),
10744
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-2 rounded-md border border-border bg-background px-3 py-2 text-xs text-muted-foreground", children: [
10724
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-2 rounded-md bg-muted/15 px-3 py-2 text-xs text-muted-foreground", children: [
10745
10725
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
10746
10726
  /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-emerald-500" }),
10747
10727
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Provider test creates a traceable memory probe session." })
@@ -10920,7 +10900,7 @@ args = ["stdio", "--url", "${endpoint}"]`
10920
10900
  /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-4 text-muted-foreground" }),
10921
10901
  /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-semibold", children: "MCP access" })
10922
10902
  ] }),
10923
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-2 rounded-md border border-border bg-background px-3 py-2 text-xs text-muted-foreground", children: [
10903
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-2 rounded-md bg-muted/15 px-3 py-2 text-xs text-muted-foreground", children: [
10924
10904
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "Use Streamable HTTP when the client supports URL-based MCP. Use the stdio bridge only for stdio-only clients. Configure one entry for the same Inspector instance." }),
10925
10905
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "If the MCP client runs in another container or host, replace localhost with a reachable host/IP and verify the network path." })
10926
10906
  ] }),
@@ -11011,14 +10991,9 @@ function ProxySettingsTab() {
11011
10991
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
11012
10992
  /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-semibold", children: "Claude Code billing header" }),
11013
10993
  /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-muted-foreground", children: [
11014
- "When enabled, the proxy strips the synthetic ",
11015
- /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: "x-anthropic-billing-header" }),
11016
- " text block that Claude Code prepends to the system prompt before forwarding to upstream. Improves prefix-cache hit rates against third-party upstreams. The default at startup is controlled by the ",
11017
- /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: "AGENT_INSPECTOR_STRIP_CLAUDE_CODE_BILLING_HEADER" }),
11018
- " ",
11019
- "environment variable; your choice is persisted to ",
10994
+ "Strip Claude Code's synthetic billing block before upstream forwarding. This can improve prefix-cache hits with third-party providers and is persisted to ",
11020
10995
  /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: "config.json" }),
11021
- " and overrides the env var for subsequent requests."
10996
+ "."
11022
10997
  ] })
11023
10998
  ] }),
11024
10999
  /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "flex items-center gap-3", children: [
@@ -11040,9 +11015,9 @@ function ProxySettingsTab() {
11040
11015
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
11041
11016
  /* @__PURE__ */ jsxRuntimeExports.jsx("label", { htmlFor: "slow-response-threshold", className: "text-sm font-semibold", children: "Slow response threshold" }),
11042
11017
  /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-muted-foreground", children: [
11043
- "Logs whose elapsed time exceeds this many seconds show a warning icon next to the duration. Set to ",
11018
+ "Show a slow marker when elapsed time exceeds this many seconds. Use ",
11044
11019
  /* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: "0" }),
11045
- " to disable the indicator."
11020
+ " to disable it."
11046
11021
  ] }),
11047
11022
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
11048
11023
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -11069,7 +11044,7 @@ function ProxySettingsTab() {
11069
11044
  ] }),
11070
11045
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
11071
11046
  /* @__PURE__ */ jsxRuntimeExports.jsx("label", { htmlFor: "provider-test-timeout", className: "text-sm font-semibold", children: "Provider test timeout" }),
11072
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Provider Test waits this many seconds per configured model before aborting slow probes. The full test window scales with model count." }),
11047
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Abort slow Provider Test probes after this many seconds per model." }),
11073
11048
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
11074
11049
  /* @__PURE__ */ jsxRuntimeExports.jsx(
11075
11050
  "input",
@@ -11095,7 +11070,7 @@ function ProxySettingsTab() {
11095
11070
  ] }),
11096
11071
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
11097
11072
  /* @__PURE__ */ jsxRuntimeExports.jsx("label", { htmlFor: "time-display-format", className: "text-sm font-semibold", children: "Time display" }),
11098
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Controls timestamps in session summaries, conversation headers, and log rows." }),
11073
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Controls timestamps in session summaries, headers, and log rows." }),
11099
11074
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
11100
11075
  "select",
11101
11076
  {
@@ -15577,12 +15552,20 @@ function ProxyViewerContainer({
15577
15552
  const handleDeleteCurrentView = reactExports.useCallback(
15578
15553
  async (ids) => {
15579
15554
  if (ids.length === 0) return;
15580
- const idSet = new Set(ids);
15555
+ const persistedIds = ids.filter((id) => Number.isInteger(id) && id >= 0);
15556
+ if (persistedIds.length === 0) {
15557
+ showToast({
15558
+ message: "No persisted log records were found for this view.",
15559
+ tone: "error"
15560
+ });
15561
+ return;
15562
+ }
15563
+ const idSet = new Set(persistedIds);
15581
15564
  const removed = allLogs.filter((log) => idSet.has(log.id));
15582
15565
  const result = await fetchJson("/api/logs", DeleteLogsResponseSchema, {
15583
15566
  method: "DELETE",
15584
15567
  headers: { "content-type": "application/json" },
15585
- body: JSON.stringify({ ids })
15568
+ body: JSON.stringify({ ids: persistedIds })
15586
15569
  });
15587
15570
  setAllLogs((prev) => {
15588
15571
  const remaining = prev.filter((log) => !idSet.has(log.id));
@@ -1,7 +1,7 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, d as fetchJsonWithTimeout, D as Dialog, e as DialogContent, h as DialogHeader, i as DialogTitle, T as Tabs, j as TabsList, k as TabsTrigger, l as TabsContent, m as Button, n as TooltipProvider, o as Tooltip, p as TooltipTrigger, q as TooltipContent, s as dispatchLogFocusRequest, A as ApiTimeoutError } from "./ProxyViewerContainer-C0Sbz9ED.mjs";
3
- import { ResponseView } from "./ResponseView-wBVreqQf.mjs";
4
- import { C as CapturedLogSchema } from "./router-g9mo0nWT.mjs";
2
+ import { u as useProviders, d as fetchJsonWithTimeout, D as Dialog, e as DialogContent, h as DialogHeader, i as DialogTitle, T as Tabs, j as TabsList, k as TabsTrigger, l as TabsContent, m as Button, n as TooltipProvider, o as Tooltip, p as TooltipTrigger, q as TooltipContent, s as dispatchLogFocusRequest, A as ApiTimeoutError } from "./ProxyViewerContainer-CcJr9STz.mjs";
3
+ import { ResponseView } from "./ResponseView-Bp-0t5cd.mjs";
4
+ import { C as CapturedLogSchema } from "./router-_cAQddXC.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/modelcontextprotocol__server.mjs";
7
7
  import { am as RotateCcw, ay as Braces, az as Minimize2 } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, t as analyzeContextIntelligence, f as formatTokens, n as TooltipProvider, c as cn, o as Tooltip, p as TooltipTrigger, q as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, v as ANATOMY_ROLE_LABELS, w as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-C0Sbz9ED.mjs";
3
- import "./router-g9mo0nWT.mjs";
2
+ import { u as useProviders, t as analyzeContextIntelligence, f as formatTokens, n as TooltipProvider, c as cn, o as Tooltip, p as TooltipTrigger, q as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, v as ANATOMY_ROLE_LABELS, w as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-CcJr9STz.mjs";
3
+ import "./router-_cAQddXC.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { I as Info, a as ChevronDown, h as ChevronRight } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { g as getLogFormatAdapter, f as formatTokens, c as cn, x as getStatusCategory, B as Badge, y as Collapsible, z as CollapsibleTrigger, E as CollapsibleContent, F as ScrollArea, G as LazyJsonViewer, H as safeJsonValue } from "./ProxyViewerContainer-C0Sbz9ED.mjs";
3
- import { s as safeGetOwnProperty } from "./router-g9mo0nWT.mjs";
2
+ import { g as getLogFormatAdapter, f as formatTokens, c as cn, x as getStatusCategory, B as Badge, y as Collapsible, z as CollapsibleTrigger, E as CollapsibleContent, F as ScrollArea, G as LazyJsonViewer, H as safeJsonValue } from "./ProxyViewerContainer-CcJr9STz.mjs";
3
+ import { s as safeGetOwnProperty } from "./router-_cAQddXC.mjs";
4
4
  import "../_libs/jszip.mjs";
5
5
  import "../_libs/modelcontextprotocol__server.mjs";
6
6
  import { $ as Zap, T as TriangleAlert, aA as CircleStop, a1 as Brain, a as ChevronDown, h as ChevronRight, r as Terminal } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { d as fetchJsonWithTimeout, n as TooltipProvider, o as Tooltip, p as TooltipTrigger, B as Badge, q as TooltipContent, G as LazyJsonViewer } from "./ProxyViewerContainer-C0Sbz9ED.mjs";
3
- import { S as StreamingChunkSchema$1 } from "./router-g9mo0nWT.mjs";
2
+ import { d as fetchJsonWithTimeout, n as TooltipProvider, o as Tooltip, p as TooltipTrigger, B as Badge, q as TooltipContent, G as LazyJsonViewer } from "./ProxyViewerContainer-CcJr9STz.mjs";
3
+ import { S as StreamingChunkSchema$1 } from "./router-_cAQddXC.mjs";
4
4
  import "../_libs/jszip.mjs";
5
5
  import "../_libs/modelcontextprotocol__server.mjs";
6
6
  import { a as ChevronDown, h as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
- import { P as ProxyViewerContainer } from "./ProxyViewerContainer-C0Sbz9ED.mjs";
1
+ import { P as ProxyViewerContainer } from "./ProxyViewerContainer-CcJr9STz.mjs";
2
2
  import "../_libs/react.mjs";
3
- import "./router-g9mo0nWT.mjs";
3
+ import "./router-_cAQddXC.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/swr.mjs";
@@ -198,7 +198,7 @@ function getResponse() {
198
198
  return event.res;
199
199
  }
200
200
  async function getStartManifest(matchedRoutes) {
201
- const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-CbGc-o50.mjs");
201
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-BfiF5iov.mjs");
202
202
  const startManifest = tsrStartManifest();
203
203
  const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
204
204
  rootRoute.assets = rootRoute.assets || [];
@@ -776,7 +776,7 @@ let entriesPromise;
776
776
  let baseManifestPromise;
777
777
  let cachedFinalManifestPromise;
778
778
  async function loadEntries() {
779
- const routerEntry = await import("./router-g9mo0nWT.mjs").then((n) => n.N);
779
+ const routerEntry = await import("./router-_cAQddXC.mjs").then((n) => n.N);
780
780
  const startEntry = await import("./start-HYkvq4Ni.mjs");
781
781
  return { startEntry, routerEntry };
782
782
  }
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { I as parseJsonText, c as cn, n as TooltipProvider, o as Tooltip, p as TooltipTrigger, q as TooltipContent, b as copyTextToClipboard } from "./ProxyViewerContainer-C0Sbz9ED.mjs";
3
- import "./router-g9mo0nWT.mjs";
2
+ import { I as parseJsonText, c as cn, n as TooltipProvider, o as Tooltip, p as TooltipTrigger, q as TooltipContent, b as copyTextToClipboard } from "./ProxyViewerContainer-CcJr9STz.mjs";
3
+ import "./router-_cAQddXC.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { b as Check, e as Copy, a as ChevronDown, h as ChevronRight, aj as ChevronsDown } from "../_libs/lucide-react.mjs";
@@ -65,7 +65,7 @@ import "../_libs/immediate.mjs";
65
65
  import "../_libs/setimmediate.mjs";
66
66
  import "../_libs/pako.mjs";
67
67
  const faviconSvg = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20role='img'%20aria-label='Agent%20Inspector'%3e%3cg%20fill='none'%20stroke='%23f59e0b'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M5%2013%20C5%209%208%207%2012%207%20C16%207%2019%209%2019%2013%20C19%2016%2016%2018%2012%2018%20C8%2018%205%2016%205%2013%20Z'%20/%3e%3cpath%20d='M5%2011%20C3.5%209.5%201.5%2010%202%2012.5%20C2.5%2014%204%2013.5%205%2012.5'%20/%3e%3cpath%20d='M19%2011%20C20.5%209.5%2022.5%2010%2022%2012.5%20C21.5%2014%2020%2013.5%2019%2012.5'%20/%3e%3cline%20x1='10'%20y1='7'%20x2='9.5'%20y2='5'%20/%3e%3cline%20x1='14'%20y1='7'%20x2='14.5'%20y2='5'%20/%3e%3cline%20x1='6.5'%20y1='16'%20x2='4.5'%20y2='19.5'%20/%3e%3cline%20x1='9'%20y1='17.5'%20x2='8'%20y2='20.5'%20/%3e%3cline%20x1='15'%20y1='17.5'%20x2='16'%20y2='20.5'%20/%3e%3cline%20x1='17.5'%20y1='16'%20x2='19.5'%20y2='19.5'%20/%3e%3c/g%3e%3ccircle%20cx='9.5'%20cy='4.5'%20r='0.9'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='14.5'%20cy='4.5'%20r='0.9'%20fill='%23f59e0b'%20/%3e%3c/svg%3e";
68
- const appCss = "/assets/index-DspnLqUW.css";
68
+ const appCss = "/assets/index-BIgsQvaF.css";
69
69
  const Route$K = createRootRoute({
70
70
  head: () => ({
71
71
  meta: [
@@ -108,7 +108,7 @@ function RootDocument({ children }) {
108
108
  ] })
109
109
  ] });
110
110
  }
111
- const $$splitComponentImporter$1 = () => import("./index-B98Wia1X.mjs");
111
+ const $$splitComponentImporter$1 = () => import("./index-KVltJBV8.mjs");
112
112
  const Route$J = createFileRoute("/")({
113
113
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
114
114
  });
@@ -151,7 +151,7 @@ function decodeSessionIdFromPath(encoded) {
151
151
  function getSessionPath(sessionId) {
152
152
  return `/session/${encodeSessionIdForPath(sessionId)}`;
153
153
  }
154
- const $$splitComponentImporter = () => import("../_sessionId-BGISf2En.mjs");
154
+ const $$splitComponentImporter = () => import("../_sessionId-BkoyescL.mjs");
155
155
  const Route$I = createFileRoute("/session/$sessionId")({
156
156
  component: lazyRouteComponent($$splitComponentImporter, "component"),
157
157
  parseParams: (params) => ({
@@ -9156,7 +9156,7 @@ const Route$D = createFileRoute("/api/models")({
9156
9156
  }
9157
9157
  });
9158
9158
  const name = "@tonyclaw/agent-inspector";
9159
- const version = "3.0.9";
9159
+ const version = "3.0.10";
9160
9160
  const packageJson = {
9161
9161
  name,
9162
9162
  version
@@ -12361,8 +12361,8 @@ async function searchLogsPage(options) {
12361
12361
  scanned: scanPage.logs.length
12362
12362
  };
12363
12363
  }
12364
- const DeleteBodySchema = object({
12365
- ids: array(number().int().positive()).optional()
12364
+ const DeleteLogsBodySchema = object({
12365
+ ids: array(number().int().nonnegative()).optional()
12366
12366
  }).optional();
12367
12367
  function parseNonNegativeInt(value, fallback) {
12368
12368
  if (value === null) return fallback;
@@ -12456,7 +12456,7 @@ const Route$B = createFileRoute("/api/logs")({
12456
12456
  const raw = await request.text();
12457
12457
  if (raw !== "") {
12458
12458
  const parsed = JSON.parse(raw);
12459
- const result2 = DeleteBodySchema.safeParse(parsed);
12459
+ const result2 = DeleteLogsBodySchema.safeParse(parsed);
12460
12460
  if (!result2.success) {
12461
12461
  return Response.json(
12462
12462
  { error: "Invalid request body", details: result2.error.format() },
@@ -12468,7 +12468,16 @@ const Route$B = createFileRoute("/api/logs")({
12468
12468
  } catch {
12469
12469
  return Response.json({ error: "Invalid JSON body" }, { status: 400 });
12470
12470
  }
12471
- if (body?.ids !== void 0 && body.ids.length > 0) {
12471
+ if (body?.ids !== void 0) {
12472
+ if (body.ids.length === 0) {
12473
+ return Response.json({
12474
+ success: true,
12475
+ cleared: 0,
12476
+ logFilesRewritten: 0,
12477
+ chunkFilesDeleted: 0,
12478
+ sessionArchiveLogsDeleted: 0
12479
+ });
12480
+ }
12472
12481
  const result2 = await clearPersistedLogsByIds(body.ids);
12473
12482
  return Response.json({
12474
12483
  success: true,
@@ -17803,10 +17812,10 @@ export {
17803
17812
  providerHasContextMetadata as r,
17804
17813
  safeGetOwnProperty as s,
17805
17814
  maskApiKey as t,
17806
- PATH_V1_MESSAGES as u,
17807
- PATH_V1_CHAT_COMPLETIONS as v,
17808
- PATH_V1_RESPONSES as w,
17809
- findProviderModelMetadata as x,
17815
+ findProviderModelMetadata as u,
17816
+ PATH_V1_MESSAGES as v,
17817
+ PATH_V1_CHAT_COMPLETIONS as w,
17818
+ PATH_V1_RESPONSES as x,
17810
17819
  previewUpstreamUrl as y,
17811
17820
  createPendingProviderTestResults as z
17812
17821
  };