@tonyclaw/llm-inspector 1.11.1 → 1.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, R as React } from "../_libs/react.mjs";
2
- import { C as CapturedLogSchema, R as RuntimeConfigSchema, a as parseRequest, s as stripClaudeCodeBillingHeader, p as parseOpenAIResponse, I as InspectorResponseSchema } from "./router-BwW7lHGB.mjs";
2
+ import { C as CapturedLogSchema, R as RuntimeConfigSchema, a as parseRequest, s as stripClaudeCodeBillingHeader, p as parseOpenAIResponse, I as InspectorResponseSchema } from "./router-e-RbjELX.mjs";
3
3
  import { u as useSWR, a as useSWRConfig } from "../_libs/swr.mjs";
4
4
  import { u as useVirtualizer } from "../_libs/tanstack__react-virtual.mjs";
5
5
  import { J as JSZip } from "../_libs/jszip.mjs";
@@ -255,7 +255,7 @@ async function exportLogsAsZip(logs) {
255
255
  document.body.removeChild(anchor);
256
256
  URL.revokeObjectURL(url);
257
257
  }
258
- const version = "1.11.1";
258
+ const version = "1.11.2";
259
259
  const packageJson = {
260
260
  version
261
261
  };
@@ -3168,6 +3168,7 @@ function ProviderForm({ provider, onSubmit, onCancel }) {
3168
3168
  }
3169
3169
  function ProvidersPanel({
3170
3170
  externalProviders,
3171
+ isLoading = false,
3171
3172
  externalTestResults,
3172
3173
  externalTestingProviders,
3173
3174
  externalTestingTimeLeft,
@@ -3446,7 +3447,7 @@ function ProvidersPanel({
3446
3447
  e.target.value = "";
3447
3448
  })();
3448
3449
  }
3449
- if (providers.length === 0) {
3450
+ if (isLoading) {
3450
3451
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center py-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Loading providers..." }) });
3451
3452
  }
3452
3453
  if (showForm || editingProvider) {
@@ -3584,7 +3585,7 @@ function useProviders() {
3584
3585
  function SettingsDialog() {
3585
3586
  const [open, setOpen] = reactExports.useState(false);
3586
3587
  const [activeTab, setActiveTab] = reactExports.useState("providers");
3587
- const { providers, mutate } = useProviders();
3588
+ const { providers, isLoading, mutate } = useProviders();
3588
3589
  const [testResults, setTestResults] = reactExports.useState({});
3589
3590
  const [testingProviders, setTestingProviders] = reactExports.useState(/* @__PURE__ */ new Set());
3590
3591
  const [testingTimeLeft, setTestingTimeLeft] = reactExports.useState({});
@@ -3635,6 +3636,7 @@ function SettingsDialog() {
3635
3636
  ProvidersPanel,
3636
3637
  {
3637
3638
  externalProviders: providers,
3639
+ isLoading,
3638
3640
  externalTestResults: testResults,
3639
3641
  externalTestingProviders: testingProviders,
3640
3642
  externalTestingTimeLeft: testingTimeLeft,
@@ -85,7 +85,7 @@ function getResponse() {
85
85
  }
86
86
  var HEADERS = { TSS_SHELL: "X-TSS_SHELL" };
87
87
  async function getStartManifest(matchedRoutes) {
88
- const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-BlkT8-rj.mjs");
88
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-C5P5lsG5.mjs");
89
89
  const startManifest = tsrStartManifest();
90
90
  let routes = startManifest.routes;
91
91
  routes[rootRouteId];
@@ -1157,7 +1157,7 @@ var getBaseManifest = getProdBaseManifest;
1157
1157
  var createEarlyHintsForRequest = createEarlyHintsCollector;
1158
1158
  async function loadEntries() {
1159
1159
  const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
1160
- import("./router-BwW7lHGB.mjs").then((n) => n.r),
1160
+ import("./router-e-RbjELX.mjs").then((n) => n.r),
1161
1161
  import("./start-HYkvq4Ni.mjs"),
1162
1162
  import("./empty-plugin-adapters-BFgPZ6_d.mjs")
1163
1163
  ]);
@@ -66,7 +66,7 @@ function RootDocument({ children }) {
66
66
  ] })
67
67
  ] });
68
68
  }
69
- const $$splitComponentImporter = () => import("./index-DWXpepEi.mjs");
69
+ const $$splitComponentImporter = () => import("./index-CYuV1ljD.mjs");
70
70
  const Route$g = createFileRoute("/")({
71
71
  component: lazyRouteComponent($$splitComponentImporter, "component")
72
72
  });
@@ -1,4 +1,4 @@
1
- const tsrStartManifest = () => ({ routes: { __root__: { filePath: "C:/Users/claw/workspace/llm-inspector/src/routes/__root.tsx", children: ["/", "/api/config", "/api/health", "/api/logs", "/api/models", "/api/providers", "/api/sessions", "/proxy/$"], preloads: ["/assets/index-CJAEVDxO.js"], scripts: [{ attrs: { type: "module", async: true, src: "/assets/index-CJAEVDxO.js" } }] }, "/": { filePath: "C:/Users/claw/workspace/llm-inspector/src/routes/index.tsx", children: void 0, preloads: ["/assets/index-Br-A2_Tw.js"] } } });
1
+ const tsrStartManifest = () => ({ routes: { __root__: { filePath: "C:/Users/claw/workspace/llm-inspector/src/routes/__root.tsx", children: ["/", "/api/config", "/api/health", "/api/logs", "/api/models", "/api/providers", "/api/sessions", "/proxy/$"], preloads: ["/assets/index-Chp_30CP.js"], scripts: [{ attrs: { type: "module", async: true, src: "/assets/index-Chp_30CP.js" } }] }, "/": { filePath: "C:/Users/claw/workspace/llm-inspector/src/routes/index.tsx", children: void 0, preloads: ["/assets/index-DLvqlFS9.js"] } } });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };
@@ -35,54 +35,54 @@ const headers = ((m) => function headersRouteRule(event) {
35
35
  }
36
36
  });
37
37
  const assets = {
38
- "/assets/index-BpKPXEcb.css": {
39
- "type": "text/css; charset=utf-8",
40
- "etag": '"11628-5GjLelHqc7BEfGB/7qUFPt5/gyM"',
41
- "mtime": "2026-06-06T08:52:53.277Z",
42
- "size": 71208,
43
- "path": "../public/assets/index-BpKPXEcb.css"
38
+ "/assets/alibaba-TTwafVwX.svg": {
39
+ "type": "image/svg+xml",
40
+ "etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
41
+ "mtime": "2026-06-06T09:13:20.378Z",
42
+ "size": 5915,
43
+ "path": "../public/assets/alibaba-TTwafVwX.svg"
44
44
  },
45
45
  "/assets/minimax-BPMzvuL-.jpeg": {
46
46
  "type": "image/jpeg",
47
47
  "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
48
- "mtime": "2026-06-06T08:52:53.274Z",
48
+ "mtime": "2026-06-06T09:13:20.380Z",
49
49
  "size": 6918,
50
50
  "path": "../public/assets/minimax-BPMzvuL-.jpeg"
51
51
  },
52
+ "/assets/index-BpKPXEcb.css": {
53
+ "type": "text/css; charset=utf-8",
54
+ "etag": '"11628-5GjLelHqc7BEfGB/7qUFPt5/gyM"',
55
+ "mtime": "2026-06-06T09:13:20.380Z",
56
+ "size": 71208,
57
+ "path": "../public/assets/index-BpKPXEcb.css"
58
+ },
52
59
  "/assets/zhipuai-BPNAnxo-.svg": {
53
60
  "type": "image/svg+xml",
54
61
  "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
55
- "mtime": "2026-06-06T08:52:53.276Z",
62
+ "mtime": "2026-06-06T09:13:20.378Z",
56
63
  "size": 11256,
57
64
  "path": "../public/assets/zhipuai-BPNAnxo-.svg"
58
65
  },
59
- "/assets/alibaba-TTwafVwX.svg": {
60
- "type": "image/svg+xml",
61
- "etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
62
- "mtime": "2026-06-06T08:52:53.276Z",
63
- "size": 5915,
64
- "path": "../public/assets/alibaba-TTwafVwX.svg"
65
- },
66
- "/assets/index-CJAEVDxO.js": {
67
- "type": "text/javascript; charset=utf-8",
68
- "etag": '"5103c-Fm0ddCMQjVyxHTIhvYff6MKiugM"',
69
- "mtime": "2026-06-06T08:52:53.277Z",
70
- "size": 331836,
71
- "path": "../public/assets/index-CJAEVDxO.js"
72
- },
73
66
  "/assets/qwen-CONDcHqt.png": {
74
67
  "type": "image/png",
75
68
  "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
76
- "mtime": "2026-06-06T08:52:53.276Z",
69
+ "mtime": "2026-06-06T09:13:20.378Z",
77
70
  "size": 357059,
78
71
  "path": "../public/assets/qwen-CONDcHqt.png"
79
72
  },
80
- "/assets/index-Br-A2_Tw.js": {
73
+ "/assets/index-Chp_30CP.js": {
74
+ "type": "text/javascript; charset=utf-8",
75
+ "etag": '"5103c-5HK4V8mRGKw17pJ5x54GVb2N5bU"',
76
+ "mtime": "2026-06-06T09:13:20.380Z",
77
+ "size": 331836,
78
+ "path": "../public/assets/index-Chp_30CP.js"
79
+ },
80
+ "/assets/index-DLvqlFS9.js": {
81
81
  "type": "text/javascript; charset=utf-8",
82
- "etag": '"8b6c7-Teew6cAGuq8cadMIY7/rFiDpAgw"',
83
- "mtime": "2026-06-06T08:52:53.277Z",
84
- "size": 571079,
85
- "path": "../public/assets/index-Br-A2_Tw.js"
82
+ "etag": '"8b6f3-NmcxU8MkXNUN+0T4A/2Ajs2dUI4"',
83
+ "mtime": "2026-06-06T09:13:20.380Z",
84
+ "size": 571123,
85
+ "path": "../public/assets/index-DLvqlFS9.js"
86
86
  }
87
87
  };
88
88
  function readAsset(id) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonyclaw/llm-inspector",
3
- "version": "1.11.1",
3
+ "version": "1.11.2",
4
4
  "type": "module",
5
5
  "description": "LLM API proxy inspector — captures and displays requests/responses from AI coding tools in a web UI",
6
6
  "license": "MIT",
@@ -46,6 +46,7 @@ export type TestResults = {
46
46
 
47
47
  type ProvidersPanelProps = {
48
48
  externalProviders?: ProviderConfig[];
49
+ isLoading?: boolean;
49
50
  externalTestResults?: Record<string, TestResults>;
50
51
  externalTestingProviders?: Set<string>;
51
52
  externalTestingTimeLeft?: Record<string, number>;
@@ -57,6 +58,7 @@ type ProvidersPanelProps = {
57
58
 
58
59
  export function ProvidersPanel({
59
60
  externalProviders,
61
+ isLoading = false,
60
62
  externalTestResults,
61
63
  externalTestingProviders,
62
64
  externalTestingTimeLeft,
@@ -402,8 +404,8 @@ export function ProvidersPanel({
402
404
  })();
403
405
  }
404
406
 
405
- // Only show loading if we have no providers at all (prevents flashing when reopening Settings during test)
406
- if (providers.length === 0) {
407
+ // Only show loading if we are actually loading (prevents flashing when reopening Settings during test)
408
+ if (isLoading) {
407
409
  return (
408
410
  <div className="flex items-center justify-center py-8">
409
411
  <p className="text-sm text-muted-foreground">Loading providers...</p>
@@ -10,7 +10,7 @@ import { useStripConfig } from "../../lib/useStripConfig";
10
10
  export function SettingsDialog(): JSX.Element {
11
11
  const [open, setOpen] = useState(false);
12
12
  const [activeTab, setActiveTab] = useState("providers");
13
- const { providers, mutate } = useProviders();
13
+ const { providers, isLoading, mutate } = useProviders();
14
14
  const [testResults, setTestResults] = useState<
15
15
  Record<string, import("./ProvidersPanel").TestResults>
16
16
  >({});
@@ -73,6 +73,7 @@ export function SettingsDialog(): JSX.Element {
73
73
  <TabsContent value="providers">
74
74
  <ProvidersPanel
75
75
  externalProviders={providers}
76
+ isLoading={isLoading}
76
77
  externalTestResults={testResults}
77
78
  externalTestingProviders={testingProviders}
78
79
  externalTestingTimeLeft={testingTimeLeft}