@tonyclaw/agent-inspector 3.0.9 → 3.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/{CompareDrawer-CJKL4LMm.js → CompareDrawer-gb4FHIDP.js} +1 -1
- package/.output/public/assets/ProxyViewerContainer-yqasBIbY.js +106 -0
- package/.output/public/assets/{ReplayDialog-BYanl-a_.js → ReplayDialog-uXfMIorn.js} +1 -1
- package/.output/public/assets/{RequestAnatomy-DvPz1jqE.js → RequestAnatomy-NqGFn7lk.js} +1 -1
- package/.output/public/assets/{ResponseView-sZnxp9GN.js → ResponseView-BWSWdjPl.js} +2 -2
- package/.output/public/assets/{StreamingChunkSequence-G-tiYiBd.js → StreamingChunkSequence-qeCLglzr.js} +1 -1
- package/.output/public/assets/{_sessionId-_hDcsmXq.js → _sessionId-COT-xg31.js} +1 -1
- package/.output/public/assets/index-BIgsQvaF.css +1 -0
- package/.output/public/assets/{index-SuOSQb2_.js → index-CKVD6xzC.js} +1 -1
- package/.output/public/assets/index-swjqFLcG.js +1 -0
- package/.output/public/assets/{json-viewer-yQdhgjaw.js → json-viewer-ux5usy0f.js} +1 -1
- package/.output/public/assets/{main-CgjcDxjR.js → main-BM5Sp2nO.js} +2 -2
- package/.output/server/_libs/lucide-react.mjs +2 -2
- package/.output/server/{_sessionId-BGISf2En.mjs → _sessionId-8D0eTdRJ.mjs} +2 -2
- package/.output/server/_ssr/{CompareDrawer-s-UF9gW3.mjs → CompareDrawer-Hcs0aQWl.mjs} +3 -3
- package/.output/server/_ssr/{ProxyViewerContainer-C0Sbz9ED.mjs → ProxyViewerContainer-D2CkbvcS.mjs} +185 -246
- package/.output/server/_ssr/{ReplayDialog-DvS8gvJr.mjs → ReplayDialog-O2R9y9xD.mjs} +3 -3
- package/.output/server/_ssr/{RequestAnatomy-BwhWglJL.mjs → RequestAnatomy-DkvrjK-3.mjs} +2 -2
- package/.output/server/_ssr/{ResponseView-wBVreqQf.mjs → ResponseView-CPcMs3Um.mjs} +2 -2
- package/.output/server/_ssr/{StreamingChunkSequence-Dr6eg-MJ.mjs → StreamingChunkSequence-FlBdqDP3.mjs} +2 -2
- package/.output/server/_ssr/{index-B98Wia1X.mjs → index-ChG0L62e.mjs} +2 -2
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{json-viewer-D7L8y0FH.mjs → json-viewer-Bb1g2nec.mjs} +2 -2
- package/.output/server/_ssr/{router-g9mo0nWT.mjs → router-840N-dk9.mjs} +21 -12
- package/.output/server/{_tanstack-start-manifest_v-CbGc-o50.mjs → _tanstack-start-manifest_v-Qi0D1Tl0.mjs} +1 -1
- package/.output/server/index.mjs +70 -70
- package/package.json +1 -1
- package/src/components/ProxyViewerContainer.tsx +10 -2
- package/src/components/providers/ProviderCard.tsx +98 -136
- package/src/components/providers/ProvidersPanel.tsx +61 -106
- package/src/components/providers/SettingsDialog.tsx +17 -22
- package/src/components/proxy-viewer/LogEntryHeader.tsx +17 -43
- package/src/components/ui/tooltip.tsx +1 -1
- package/src/routes/api/logs.ts +14 -5
- package/.output/public/assets/ProxyViewerContainer-DBUy29O-.js +0 -106
- package/.output/public/assets/index-DAPAWsAd.js +0 -1
- package/.output/public/assets/index-DspnLqUW.css +0 -1
package/.output/server/_ssr/{ProxyViewerContainer-C0Sbz9ED.mjs → ProxyViewerContainer-D2CkbvcS.mjs}
RENAMED
|
@@ -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,
|
|
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-840N-dk9.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
|
|
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";
|
|
@@ -1074,7 +1074,7 @@ function ProviderLogo({
|
|
|
1074
1074
|
}
|
|
1075
1075
|
}
|
|
1076
1076
|
function TooltipProvider({
|
|
1077
|
-
delayDuration =
|
|
1077
|
+
delayDuration = 600,
|
|
1078
1078
|
...props
|
|
1079
1079
|
}) {
|
|
1080
1080
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -2546,27 +2546,27 @@ function useCopyFeedback(text) {
|
|
|
2546
2546
|
return { copied, copy };
|
|
2547
2547
|
}
|
|
2548
2548
|
const LazyCompareDrawer = reactExports.lazy(
|
|
2549
|
-
() => import("./CompareDrawer-
|
|
2549
|
+
() => import("./CompareDrawer-Hcs0aQWl.mjs").then((m) => ({ default: m.CompareDrawer }))
|
|
2550
2550
|
);
|
|
2551
2551
|
const LazyReplayDialog = reactExports.lazy(
|
|
2552
|
-
() => import("./ReplayDialog-
|
|
2552
|
+
() => import("./ReplayDialog-O2R9y9xD.mjs").then((m) => ({ default: m.ReplayDialog }))
|
|
2553
2553
|
);
|
|
2554
2554
|
const LazyRequestAnatomy = reactExports.lazy(
|
|
2555
|
-
() => import("./RequestAnatomy-
|
|
2555
|
+
() => import("./RequestAnatomy-DkvrjK-3.mjs").then((m) => ({ default: m.RequestAnatomy }))
|
|
2556
2556
|
);
|
|
2557
2557
|
const LazyResponseView = reactExports.lazy(
|
|
2558
|
-
() => import("./ResponseView-
|
|
2558
|
+
() => import("./ResponseView-CPcMs3Um.mjs").then((m) => ({ default: m.ResponseView }))
|
|
2559
2559
|
);
|
|
2560
2560
|
const LazyStreamingChunkSequence = reactExports.lazy(
|
|
2561
|
-
() => import("./StreamingChunkSequence-
|
|
2561
|
+
() => import("./StreamingChunkSequence-FlBdqDP3.mjs").then((m) => ({
|
|
2562
2562
|
default: m.StreamingChunkSequence
|
|
2563
2563
|
}))
|
|
2564
2564
|
);
|
|
2565
2565
|
const LazyJsonViewer = reactExports.lazy(
|
|
2566
|
-
() => import("./json-viewer-
|
|
2566
|
+
() => import("./json-viewer-Bb1g2nec.mjs").then((m) => ({ default: m.JsonViewer }))
|
|
2567
2567
|
);
|
|
2568
2568
|
const LazyJsonViewerFromString = reactExports.lazy(
|
|
2569
|
-
() => import("./json-viewer-
|
|
2569
|
+
() => import("./json-viewer-Bb1g2nec.mjs").then((m) => ({ default: m.JsonViewerFromString }))
|
|
2570
2570
|
);
|
|
2571
2571
|
const HIGHLIGHT_DURATION_MS = 1200;
|
|
2572
2572
|
const MAX_HIGHLIGHT_ATTEMPTS = 12;
|
|
@@ -3105,7 +3105,7 @@ const LogEntryHeader = reactExports.memo(function({
|
|
|
3105
3105
|
const warningCount = log.warnings?.length ?? 0;
|
|
3106
3106
|
const hasClientPid = log.clientPid !== null && log.clientPid !== void 0;
|
|
3107
3107
|
const hasClientProjectFolder = log.clientProjectFolder !== null && log.clientProjectFolder !== void 0 && log.clientProjectFolder !== "";
|
|
3108
|
-
|
|
3108
|
+
log.clientCwd !== null && log.clientCwd !== void 0 && log.clientCwd !== "";
|
|
3109
3109
|
const statusCue = STATUS_CUE_CLASSES[statusCategory];
|
|
3110
3110
|
const statusLabel2 = statusCueLabel(statusCategory, log.responseStatus);
|
|
3111
3111
|
const showStatusBadge = statusCategory !== "success" || log.responseStatus !== 200;
|
|
@@ -3204,22 +3204,16 @@ const LogEntryHeader = reactExports.memo(function({
|
|
|
3204
3204
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "size-3" }),
|
|
3205
3205
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: formatElapsed$3(log.elapsedMs) })
|
|
3206
3206
|
] })),
|
|
3207
|
-
log.streaming && firstChunkLabel !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3208
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3209
|
-
|
|
3210
|
-
|
|
3211
|
-
|
|
3212
|
-
|
|
3213
|
-
] })
|
|
3214
|
-
] }) }),
|
|
3215
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Time to first streaming chunk" })
|
|
3207
|
+
log.streaming && firstChunkLabel !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: cn(TELEMETRY_CHIP_CLASS, "shrink-0 text-cyan-300"), children: [
|
|
3208
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Radio, { className: "size-3" }),
|
|
3209
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums", children: [
|
|
3210
|
+
"first ",
|
|
3211
|
+
firstChunkLabel
|
|
3212
|
+
] })
|
|
3216
3213
|
] }),
|
|
3217
|
-
log.streaming && tokenRateLabel !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3218
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3219
|
-
|
|
3220
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: tokenRateLabel })
|
|
3221
|
-
] }) }),
|
|
3222
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Output token throughput after first chunk" })
|
|
3214
|
+
log.streaming && tokenRateLabel !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: cn(TELEMETRY_CHIP_CLASS, "shrink-0 text-cyan-300"), children: [
|
|
3215
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Gauge, { className: "size-3" }),
|
|
3216
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: tokenRateLabel })
|
|
3223
3217
|
] }),
|
|
3224
3218
|
hasTokens && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: cn(TELEMETRY_CHIP_CLASS, "min-w-0 sm:shrink-0"), children: [
|
|
3225
3219
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Zap, { className: "size-3 text-muted-foreground" }),
|
|
@@ -3286,26 +3280,14 @@ const LogEntryHeader = reactExports.memo(function({
|
|
|
3286
3280
|
]
|
|
3287
3281
|
}
|
|
3288
3282
|
),
|
|
3289
|
-
showClientMetadata && (hasClientPid || hasClientProjectFolder) && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
3290
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
3291
|
-
|
|
3292
|
-
|
|
3293
|
-
|
|
3294
|
-
|
|
3295
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(FileTerminal, { className: "size-3" }),
|
|
3296
|
-
hasClientProjectFolder ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: log.clientProjectFolder }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums", children: [
|
|
3297
|
-
"PID ",
|
|
3298
|
-
log.clientPid
|
|
3299
|
-
] })
|
|
3300
|
-
]
|
|
3301
|
-
}
|
|
3302
|
-
) }),
|
|
3303
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: hasClientCwd ? `PID: ${log.clientPid ?? "?"} CWD: ${log.clientCwd}` : `Process ID: ${log.clientPid ?? "?"}` })
|
|
3283
|
+
showClientMetadata && (hasClientPid || hasClientProjectFolder) && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: cn(TELEMETRY_CHIP_CLASS, "hidden shrink-0 text-purple-300 xl:flex"), children: [
|
|
3284
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(FileTerminal, { className: "size-3" }),
|
|
3285
|
+
hasClientProjectFolder ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: log.clientProjectFolder }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums", children: [
|
|
3286
|
+
"PID ",
|
|
3287
|
+
log.clientPid
|
|
3288
|
+
] })
|
|
3304
3289
|
] }),
|
|
3305
|
-
showStandaloneStreamingIndicator && /* @__PURE__ */ jsxRuntimeExports.
|
|
3306
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Radio, { className: "size-3 text-muted-foreground/60 shrink-0" }) }),
|
|
3307
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Request used SSE streaming" })
|
|
3308
|
-
] })
|
|
3290
|
+
showStandaloneStreamingIndicator && /* @__PURE__ */ jsxRuntimeExports.jsx(Radio, { className: "size-3 shrink-0 text-muted-foreground/60" })
|
|
3309
3291
|
] }),
|
|
3310
3292
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex shrink-0 items-start gap-1.5", children: [
|
|
3311
3293
|
expanded && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
@@ -8299,33 +8281,12 @@ function ProviderFormatTestStatus({
|
|
|
8299
8281
|
] })
|
|
8300
8282
|
] });
|
|
8301
8283
|
}
|
|
8302
|
-
function
|
|
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({
|
|
8284
|
+
function ProviderFormatStatusBlock({
|
|
8308
8285
|
label,
|
|
8309
|
-
baseUrl,
|
|
8310
|
-
endpoint,
|
|
8311
|
-
providerName,
|
|
8312
8286
|
children
|
|
8313
8287
|
}) {
|
|
8314
|
-
|
|
8315
|
-
|
|
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
|
-
)) }),
|
|
8288
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0 space-y-2 rounded-md border border-border/60 bg-muted/15 p-2", children: [
|
|
8289
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs font-medium text-foreground/80", children: label }),
|
|
8329
8290
|
children
|
|
8330
8291
|
] });
|
|
8331
8292
|
}
|
|
@@ -8345,22 +8306,38 @@ function providerTestTargets(provider) {
|
|
|
8345
8306
|
}
|
|
8346
8307
|
return targets;
|
|
8347
8308
|
}
|
|
8348
|
-
function
|
|
8349
|
-
|
|
8350
|
-
|
|
8309
|
+
function CapabilityChip({
|
|
8310
|
+
label,
|
|
8311
|
+
enabled,
|
|
8312
|
+
tone
|
|
8313
|
+
}) {
|
|
8314
|
+
const resolvedTone = tone ?? (enabled ? "active" : "quiet");
|
|
8315
|
+
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";
|
|
8316
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: `inline-flex items-center gap-1 rounded border px-1.5 py-0.5 ${className}`, children: [
|
|
8317
|
+
enabled ? /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "size-3" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Minus, { className: "size-3" }),
|
|
8318
|
+
label
|
|
8319
|
+
] });
|
|
8320
|
+
}
|
|
8321
|
+
function ProviderCapabilitySummary({ provider }) {
|
|
8322
|
+
const hasAnthropic = providerHasEndpoint(provider.anthropicBaseUrl);
|
|
8323
|
+
const hasChat = providerHasEndpoint(provider.openaiBaseUrl);
|
|
8324
|
+
const hasResponses = providerHasEndpoint(provider.openaiResponsesBaseUrl);
|
|
8325
|
+
if (!hasAnthropic && !hasChat && !hasResponses) {
|
|
8351
8326
|
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: "Test requires at least one configured endpoint." });
|
|
8352
8327
|
}
|
|
8353
8328
|
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: "
|
|
8355
|
-
|
|
8356
|
-
|
|
8329
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Capabilities" }),
|
|
8330
|
+
hasAnthropic && /* @__PURE__ */ jsxRuntimeExports.jsx(CapabilityChip, { label: "Anthropic", enabled: true }),
|
|
8331
|
+
hasChat && /* @__PURE__ */ jsxRuntimeExports.jsx(CapabilityChip, { label: "OpenAI Chat", enabled: true }),
|
|
8332
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
8333
|
+
CapabilityChip,
|
|
8357
8334
|
{
|
|
8358
|
-
|
|
8359
|
-
|
|
8360
|
-
|
|
8361
|
-
|
|
8362
|
-
)
|
|
8363
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "non-stream + stream" })
|
|
8335
|
+
label: hasResponses ? "OpenAI Responses" : "No OpenAI Responses",
|
|
8336
|
+
enabled: hasResponses,
|
|
8337
|
+
tone: "response"
|
|
8338
|
+
}
|
|
8339
|
+
),
|
|
8340
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "tested non-stream + stream" })
|
|
8364
8341
|
] });
|
|
8365
8342
|
}
|
|
8366
8343
|
function configuredFormatResults(provider, testResults) {
|
|
@@ -8572,23 +8549,20 @@ function TestStatus({ result }) {
|
|
|
8572
8549
|
if (i > 0) displayTiming.push(", ");
|
|
8573
8550
|
displayTiming.push(timingParts[i]);
|
|
8574
8551
|
}
|
|
8575
|
-
return /* @__PURE__ */ jsxRuntimeExports.
|
|
8576
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
8577
|
-
|
|
8578
|
-
|
|
8579
|
-
|
|
8580
|
-
|
|
8581
|
-
|
|
8582
|
-
|
|
8583
|
-
|
|
8584
|
-
|
|
8585
|
-
|
|
8586
|
-
|
|
8587
|
-
|
|
8588
|
-
|
|
8589
|
-
] }) }),
|
|
8590
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Connection test passed" })
|
|
8591
|
-
] }) });
|
|
8552
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex shrink-0 items-center gap-1 text-xs text-cyan-100", children: [
|
|
8553
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "size-3 text-cyan-300" }),
|
|
8554
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Connected" }),
|
|
8555
|
+
tokenParts.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-muted-foreground", children: [
|
|
8556
|
+
"(",
|
|
8557
|
+
displayTokens,
|
|
8558
|
+
")"
|
|
8559
|
+
] }),
|
|
8560
|
+
timingParts.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "hidden text-muted-foreground lg:inline", children: [
|
|
8561
|
+
"(",
|
|
8562
|
+
displayTiming,
|
|
8563
|
+
")"
|
|
8564
|
+
] })
|
|
8565
|
+
] });
|
|
8592
8566
|
}
|
|
8593
8567
|
const error = result.error;
|
|
8594
8568
|
const errorMessage = error?.message ?? "Connection failed";
|
|
@@ -8597,10 +8571,7 @@ function TestStatus({ result }) {
|
|
|
8597
8571
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-1 shrink-0", children: [
|
|
8598
8572
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1 text-xs text-red-600 max-w-[200px]", children: [
|
|
8599
8573
|
getErrorIcon(errorType),
|
|
8600
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
8601
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: errorMessage }) }),
|
|
8602
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Connection test failed" })
|
|
8603
|
-
] }) }),
|
|
8574
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: errorMessage }),
|
|
8604
8575
|
hasDetails && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
8605
8576
|
"button",
|
|
8606
8577
|
{
|
|
@@ -8679,13 +8650,7 @@ function ProviderCard({
|
|
|
8679
8650
|
const metadataImportLabel = canRefreshMetadata ? "Refresh" : "Import defaults";
|
|
8680
8651
|
const isTestingValue = isTesting ?? false;
|
|
8681
8652
|
const testedModelsLabel = modelResultsLabel(testResults);
|
|
8682
|
-
const providerSourceBadge = provider.source === "company" ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
8683
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__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" }) }),
|
|
8684
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Company-provided API key" })
|
|
8685
|
-
] }) }) : provider.source === "personal" ? /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
|
|
8686
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__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" }) }),
|
|
8687
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Your personal API key" })
|
|
8688
|
-
] }) }) : null;
|
|
8653
|
+
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;
|
|
8689
8654
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
8690
8655
|
"div",
|
|
8691
8656
|
{
|
|
@@ -8725,7 +8690,7 @@ function ProviderCard({
|
|
|
8725
8690
|
] })
|
|
8726
8691
|
] }),
|
|
8727
8692
|
/* @__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(
|
|
8693
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ProviderCapabilitySummary, { provider }),
|
|
8729
8694
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
8730
8695
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Key configured" }),
|
|
8731
8696
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: provider.authHeader === "x-api-key" ? "x-api-key" : "Bearer" }),
|
|
@@ -8792,36 +8757,21 @@ function ProviderCard({
|
|
|
8792
8757
|
)
|
|
8793
8758
|
] }),
|
|
8794
8759
|
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.
|
|
8796
|
-
|
|
8797
|
-
|
|
8798
|
-
|
|
8799
|
-
|
|
8800
|
-
|
|
8801
|
-
|
|
8802
|
-
|
|
8803
|
-
}
|
|
8804
|
-
|
|
8805
|
-
|
|
8806
|
-
|
|
8807
|
-
|
|
8808
|
-
|
|
8809
|
-
|
|
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
|
-
),
|
|
8760
|
+
(providerHasEndpoint(provider.anthropicBaseUrl) || providerHasEndpoint(provider.openaiBaseUrl) || providerHasEndpoint(provider.openaiResponsesBaseUrl)) && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-2 lg:grid-cols-3", children: [
|
|
8761
|
+
providerHasEndpoint(provider.anthropicBaseUrl) && /* @__PURE__ */ jsxRuntimeExports.jsxs(ProviderFormatStatusBlock, { label: "Anthropic", children: [
|
|
8762
|
+
testResults !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderFormatTestStatus, { results: testResults.anthropic }),
|
|
8763
|
+
testResults === void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: "Not tested yet" })
|
|
8764
|
+
] }),
|
|
8765
|
+
providerHasEndpoint(provider.openaiBaseUrl) && /* @__PURE__ */ jsxRuntimeExports.jsxs(ProviderFormatStatusBlock, { label: "OpenAI Chat", children: [
|
|
8766
|
+
testResults !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderFormatTestStatus, { results: testResults.openaiChat }),
|
|
8767
|
+
testResults === void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: "Not tested yet" })
|
|
8768
|
+
] }),
|
|
8769
|
+
providerHasEndpoint(provider.openaiResponsesBaseUrl) && /* @__PURE__ */ jsxRuntimeExports.jsxs(ProviderFormatStatusBlock, { label: "OpenAI Responses", children: [
|
|
8770
|
+
testResults !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(ProviderFormatTestStatus, { results: testResults.openaiResponses }),
|
|
8771
|
+
testResults === void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: "Not tested yet" })
|
|
8772
|
+
] }),
|
|
8773
|
+
!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" })
|
|
8774
|
+
] }),
|
|
8825
8775
|
testResults?.models !== void 0 && Object.keys(testResults.models).length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
8826
8776
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
8827
8777
|
"button",
|
|
@@ -10244,7 +10194,7 @@ function ProvidersPanel({
|
|
|
10244
10194
|
}
|
|
10245
10195
|
if (showForm || editingProvider) {
|
|
10246
10196
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
|
|
10247
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "
|
|
10197
|
+
/* @__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
10198
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
10249
10199
|
ProviderForm,
|
|
10250
10200
|
{
|
|
@@ -10259,41 +10209,35 @@ function ProvidersPanel({
|
|
|
10259
10209
|
] });
|
|
10260
10210
|
}
|
|
10261
10211
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
|
|
10262
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "
|
|
10212
|
+
/* @__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
10213
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-medium", children: "Providers" }),
|
|
10264
10214
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
10265
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
10266
|
-
|
|
10267
|
-
|
|
10268
|
-
|
|
10269
|
-
|
|
10270
|
-
|
|
10271
|
-
|
|
10272
|
-
|
|
10273
|
-
|
|
10274
|
-
|
|
10275
|
-
|
|
10276
|
-
|
|
10277
|
-
|
|
10278
|
-
|
|
10279
|
-
|
|
10280
|
-
|
|
10281
|
-
|
|
10282
|
-
|
|
10283
|
-
|
|
10284
|
-
|
|
10285
|
-
|
|
10286
|
-
|
|
10287
|
-
|
|
10288
|
-
|
|
10289
|
-
|
|
10290
|
-
|
|
10291
|
-
"Import"
|
|
10292
|
-
]
|
|
10293
|
-
}
|
|
10294
|
-
) }),
|
|
10295
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Import providers from an exported JSON file" })
|
|
10296
|
-
] }) }),
|
|
10215
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
10216
|
+
Button,
|
|
10217
|
+
{
|
|
10218
|
+
variant: "outline",
|
|
10219
|
+
size: "sm",
|
|
10220
|
+
onClick: () => handleExport(),
|
|
10221
|
+
className: "gap-1 hover:bg-muted",
|
|
10222
|
+
children: [
|
|
10223
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Download, { className: "size-3" }),
|
|
10224
|
+
"Export"
|
|
10225
|
+
]
|
|
10226
|
+
}
|
|
10227
|
+
),
|
|
10228
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
10229
|
+
Button,
|
|
10230
|
+
{
|
|
10231
|
+
variant: "outline",
|
|
10232
|
+
size: "sm",
|
|
10233
|
+
onClick: handleImportClick,
|
|
10234
|
+
className: "gap-1 hover:bg-muted",
|
|
10235
|
+
children: [
|
|
10236
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Upload, { className: "size-3" }),
|
|
10237
|
+
"Import"
|
|
10238
|
+
]
|
|
10239
|
+
}
|
|
10240
|
+
),
|
|
10297
10241
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
10298
10242
|
"input",
|
|
10299
10243
|
{
|
|
@@ -10304,50 +10248,44 @@ function ProvidersPanel({
|
|
|
10304
10248
|
style: { display: "none" }
|
|
10305
10249
|
}
|
|
10306
10250
|
),
|
|
10307
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
10308
|
-
|
|
10309
|
-
|
|
10310
|
-
|
|
10311
|
-
|
|
10312
|
-
|
|
10313
|
-
|
|
10314
|
-
|
|
10315
|
-
|
|
10316
|
-
|
|
10317
|
-
|
|
10318
|
-
|
|
10319
|
-
|
|
10320
|
-
) }),
|
|
10321
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Detect and import provider configs from Claude Code and OpenCode" })
|
|
10322
|
-
] }) }),
|
|
10251
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
10252
|
+
Button,
|
|
10253
|
+
{
|
|
10254
|
+
variant: "outline",
|
|
10255
|
+
size: "sm",
|
|
10256
|
+
onClick: () => setShowImportWizard(true),
|
|
10257
|
+
className: "gap-1",
|
|
10258
|
+
children: [
|
|
10259
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Scan, { className: "size-3" }),
|
|
10260
|
+
"Scan"
|
|
10261
|
+
]
|
|
10262
|
+
}
|
|
10263
|
+
),
|
|
10323
10264
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(Button, { onClick: () => setShowForm(true), size: "sm", className: "gap-1", children: [
|
|
10324
10265
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Plus, { className: "size-4" }),
|
|
10325
10266
|
"Add Provider"
|
|
10326
10267
|
] })
|
|
10327
10268
|
] })
|
|
10328
10269
|
] }),
|
|
10329
|
-
configPath !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "
|
|
10270
|
+
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
10271
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0", children: "Config:" }),
|
|
10331
10272
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono truncate", title: configPath, children: configPath }),
|
|
10332
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
10333
|
-
|
|
10334
|
-
|
|
10335
|
-
|
|
10336
|
-
|
|
10337
|
-
|
|
10338
|
-
|
|
10339
|
-
|
|
10340
|
-
|
|
10341
|
-
|
|
10342
|
-
|
|
10343
|
-
|
|
10344
|
-
|
|
10345
|
-
|
|
10346
|
-
|
|
10347
|
-
|
|
10348
|
-
) }),
|
|
10349
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: "Copy config file path to clipboard" })
|
|
10350
|
-
] }) })
|
|
10273
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
10274
|
+
"button",
|
|
10275
|
+
{
|
|
10276
|
+
type: "button",
|
|
10277
|
+
onClick: () => {
|
|
10278
|
+
void copyTextToClipboard(configPath).then((success) => {
|
|
10279
|
+
if (!success) return;
|
|
10280
|
+
setConfigPathCopied(true);
|
|
10281
|
+
setTimeout(() => setConfigPathCopied(false), 2e3);
|
|
10282
|
+
});
|
|
10283
|
+
},
|
|
10284
|
+
className: "ml-auto shrink-0 text-muted-foreground transition-colors hover:text-foreground",
|
|
10285
|
+
"aria-label": configPathCopied ? "Copied config file path" : "Copy config file path",
|
|
10286
|
+
children: configPathCopied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3 text-cyan-300" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "size-3" })
|
|
10287
|
+
}
|
|
10288
|
+
)
|
|
10351
10289
|
] }),
|
|
10352
10290
|
error !== 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-sm text-destructive", children: [
|
|
10353
10291
|
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { className: "size-4 shrink-0" }),
|
|
@@ -10360,18 +10298,16 @@ function ProvidersPanel({
|
|
|
10360
10298
|
"Add Your First Provider"
|
|
10361
10299
|
] })
|
|
10362
10300
|
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
|
|
10363
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "
|
|
10364
|
-
|
|
10365
|
-
|
|
10366
|
-
|
|
10367
|
-
|
|
10368
|
-
|
|
10369
|
-
|
|
10370
|
-
|
|
10371
|
-
|
|
10372
|
-
|
|
10373
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: tab === "all" ? "Show all providers" : tab === "personal" ? "Providers you configured yourself" : "Providers set by your organization" })
|
|
10374
|
-
] }) }, tab)) }),
|
|
10301
|
+
/* @__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(
|
|
10302
|
+
"button",
|
|
10303
|
+
{
|
|
10304
|
+
type: "button",
|
|
10305
|
+
onClick: () => setSourceFilter(tab),
|
|
10306
|
+
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"}`,
|
|
10307
|
+
children: tab === "all" ? "All" : tab === "personal" ? "Personal" : "Company"
|
|
10308
|
+
},
|
|
10309
|
+
tab
|
|
10310
|
+
)) }),
|
|
10375
10311
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: listScrollRef, className: "space-y-3", children: filteredProviders.map((provider) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
10376
10312
|
ProviderCard,
|
|
10377
10313
|
{
|
|
@@ -10471,17 +10407,17 @@ function SettingsDialog() {
|
|
|
10471
10407
|
]
|
|
10472
10408
|
}
|
|
10473
10409
|
) }),
|
|
10474
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "
|
|
10410
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "flex max-h-[80vh] max-w-2xl flex-col overflow-hidden", children: [
|
|
10475
10411
|
/* @__PURE__ */ jsxRuntimeExports.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(DialogTitle, { children: "Settings" }) }),
|
|
10476
10412
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(Tabs, { value: activeTab, onValueChange: setActiveTab, className: "flex-1 overflow-hidden", children: [
|
|
10477
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(TabsList, { children: [
|
|
10413
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(TabsList, { className: "w-full justify-start bg-muted/35", children: [
|
|
10478
10414
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "providers", children: "Providers" }),
|
|
10479
10415
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "proxy", children: "Proxy" }),
|
|
10480
10416
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "storage", children: "Storage" }),
|
|
10481
10417
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "mcp", children: "MCP" }),
|
|
10482
10418
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TabsTrigger, { value: "onboarding", children: "Onboarding" })
|
|
10483
10419
|
] }),
|
|
10484
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-4 flex-1 overflow-x-hidden overflow-y-auto pr-
|
|
10420
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-4 flex-1 overflow-x-hidden overflow-y-auto pr-2", children: [
|
|
10485
10421
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TabsContent, { value: "providers", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
10486
10422
|
ProvidersPanel,
|
|
10487
10423
|
{
|
|
@@ -10561,7 +10497,7 @@ function StorageSettingsTab() {
|
|
|
10561
10497
|
}, []);
|
|
10562
10498
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
|
|
10563
10499
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-3", children: [
|
|
10564
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
10500
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0", children: [
|
|
10565
10501
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-semibold", children: "Log storage" }),
|
|
10566
10502
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Inspect local log and streaming chunk footprint before exporting or clearing sessions." })
|
|
10567
10503
|
] }),
|
|
@@ -10598,14 +10534,14 @@ function StorageSettingsTab() {
|
|
|
10598
10534
|
onCopy: handleCopy
|
|
10599
10535
|
}
|
|
10600
10536
|
),
|
|
10601
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "
|
|
10537
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md bg-muted/20 px-3 py-2", children: [
|
|
10602
10538
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-medium", children: "In-memory logs" }),
|
|
10603
10539
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-1 font-mono text-muted-foreground", children: [
|
|
10604
10540
|
stats.memoryCount.toLocaleString(),
|
|
10605
10541
|
" loaded"
|
|
10606
10542
|
] })
|
|
10607
10543
|
] }),
|
|
10608
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "
|
|
10544
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md bg-muted/20 px-3 py-2", children: [
|
|
10609
10545
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-medium", children: "Log files" }),
|
|
10610
10546
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-1 font-mono text-muted-foreground", children: [
|
|
10611
10547
|
stats.logFileCount.toLocaleString(),
|
|
@@ -10613,7 +10549,7 @@ function StorageSettingsTab() {
|
|
|
10613
10549
|
formatBytes(stats.logBytes)
|
|
10614
10550
|
] })
|
|
10615
10551
|
] }),
|
|
10616
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "
|
|
10552
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md bg-muted/20 px-3 py-2", children: [
|
|
10617
10553
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-medium", children: "Streaming chunks" }),
|
|
10618
10554
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-1 font-mono text-muted-foreground", children: [
|
|
10619
10555
|
stats.chunkFileCount.toLocaleString(),
|
|
@@ -10621,7 +10557,7 @@ function StorageSettingsTab() {
|
|
|
10621
10557
|
formatBytes(stats.chunkBytes)
|
|
10622
10558
|
] })
|
|
10623
10559
|
] }),
|
|
10624
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "
|
|
10560
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-md bg-muted/20 px-3 py-2", children: [
|
|
10625
10561
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-medium", children: "Session archives" }),
|
|
10626
10562
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-1 font-mono text-muted-foreground", children: [
|
|
10627
10563
|
stats.sessionArchiveFileCount.toLocaleString(),
|
|
@@ -10642,7 +10578,7 @@ function CopyableSetupValue({
|
|
|
10642
10578
|
onCopy
|
|
10643
10579
|
}) {
|
|
10644
10580
|
const copied = copiedId === id;
|
|
10645
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-border bg-muted/
|
|
10581
|
+
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
10582
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-1 text-xs font-medium text-muted-foreground", children: label }),
|
|
10647
10583
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
10648
10584
|
/* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "min-w-0 flex-1 truncate font-mono text-xs text-foreground", children: value }),
|
|
@@ -10741,7 +10677,7 @@ function OnboardingSettingsTab() {
|
|
|
10741
10677
|
},
|
|
10742
10678
|
item.id
|
|
10743
10679
|
)) }),
|
|
10744
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-2 rounded-md
|
|
10680
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-2 rounded-md bg-muted/15 px-3 py-2 text-xs text-muted-foreground", children: [
|
|
10745
10681
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
10746
10682
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "size-3.5 text-emerald-500" }),
|
|
10747
10683
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Provider test creates a traceable memory probe session." })
|
|
@@ -10920,7 +10856,7 @@ args = ["stdio", "--url", "${endpoint}"]`
|
|
|
10920
10856
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-4 text-muted-foreground" }),
|
|
10921
10857
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-semibold", children: "MCP access" })
|
|
10922
10858
|
] }),
|
|
10923
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-2 rounded-md
|
|
10859
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid gap-2 rounded-md bg-muted/15 px-3 py-2 text-xs text-muted-foreground", children: [
|
|
10924
10860
|
/* @__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
10861
|
/* @__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
10862
|
] }),
|
|
@@ -11011,14 +10947,9 @@ function ProxySettingsTab() {
|
|
|
11011
10947
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
|
|
11012
10948
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-semibold", children: "Claude Code billing header" }),
|
|
11013
10949
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-muted-foreground", children: [
|
|
11014
|
-
"
|
|
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 ",
|
|
10950
|
+
"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
10951
|
/* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: "config.json" }),
|
|
11021
|
-
"
|
|
10952
|
+
"."
|
|
11022
10953
|
] })
|
|
11023
10954
|
] }),
|
|
11024
10955
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "flex items-center gap-3", children: [
|
|
@@ -11040,9 +10971,9 @@ function ProxySettingsTab() {
|
|
|
11040
10971
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
|
|
11041
10972
|
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { htmlFor: "slow-response-threshold", className: "text-sm font-semibold", children: "Slow response threshold" }),
|
|
11042
10973
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-muted-foreground", children: [
|
|
11043
|
-
"
|
|
10974
|
+
"Show a slow marker when elapsed time exceeds this many seconds. Use ",
|
|
11044
10975
|
/* @__PURE__ */ jsxRuntimeExports.jsx("code", { children: "0" }),
|
|
11045
|
-
" to disable
|
|
10976
|
+
" to disable it."
|
|
11046
10977
|
] }),
|
|
11047
10978
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
11048
10979
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -11069,7 +11000,7 @@ function ProxySettingsTab() {
|
|
|
11069
11000
|
] }),
|
|
11070
11001
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
|
|
11071
11002
|
/* @__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
|
|
11003
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Abort slow Provider Test probes after this many seconds per model." }),
|
|
11073
11004
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
11074
11005
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
11075
11006
|
"input",
|
|
@@ -11095,7 +11026,7 @@ function ProxySettingsTab() {
|
|
|
11095
11026
|
] }),
|
|
11096
11027
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1", children: [
|
|
11097
11028
|
/* @__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,
|
|
11029
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Controls timestamps in session summaries, headers, and log rows." }),
|
|
11099
11030
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
11100
11031
|
"select",
|
|
11101
11032
|
{
|
|
@@ -15577,12 +15508,20 @@ function ProxyViewerContainer({
|
|
|
15577
15508
|
const handleDeleteCurrentView = reactExports.useCallback(
|
|
15578
15509
|
async (ids) => {
|
|
15579
15510
|
if (ids.length === 0) return;
|
|
15580
|
-
const
|
|
15511
|
+
const persistedIds = ids.filter((id) => Number.isInteger(id) && id >= 0);
|
|
15512
|
+
if (persistedIds.length === 0) {
|
|
15513
|
+
showToast({
|
|
15514
|
+
message: "No persisted log records were found for this view.",
|
|
15515
|
+
tone: "error"
|
|
15516
|
+
});
|
|
15517
|
+
return;
|
|
15518
|
+
}
|
|
15519
|
+
const idSet = new Set(persistedIds);
|
|
15581
15520
|
const removed = allLogs.filter((log) => idSet.has(log.id));
|
|
15582
15521
|
const result = await fetchJson("/api/logs", DeleteLogsResponseSchema, {
|
|
15583
15522
|
method: "DELETE",
|
|
15584
15523
|
headers: { "content-type": "application/json" },
|
|
15585
|
-
body: JSON.stringify({ ids })
|
|
15524
|
+
body: JSON.stringify({ ids: persistedIds })
|
|
15586
15525
|
});
|
|
15587
15526
|
setAllLogs((prev) => {
|
|
15588
15527
|
const remaining = prev.filter((log) => !idSet.has(log.id));
|