@tonyclaw/agent-inspector 3.0.21 → 3.0.23

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 (31) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-BhQ8UZBt.js → CompareDrawer-CFedvZHU.js} +1 -1
  3. package/.output/public/assets/{ProxyViewerContainer-GpMPUmJQ.js → ProxyViewerContainer-BlCrBvdm.js} +11 -11
  4. package/.output/public/assets/{ReplayDialog-CqUvVWFk.js → ReplayDialog-X-fRSKAu.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-DU8c0Ysb.js → RequestAnatomy-S8qB5nVg.js} +1 -1
  6. package/.output/public/assets/{ResponseView-Ce2JAKBf.js → ResponseView-_rcOWSwJ.js} +2 -2
  7. package/.output/public/assets/{StreamingChunkSequence-DvMcBgID.js → StreamingChunkSequence-Bc15AVpN.js} +1 -1
  8. package/.output/public/assets/{_sessionId-BeinzuQZ.js → _sessionId-Cz-HW2Wf.js} +1 -1
  9. package/.output/public/assets/index-B_SIQ47i.css +1 -0
  10. package/.output/public/assets/{index-BMVjOrho.js → index-CEgwWY3E.js} +2 -2
  11. package/.output/public/assets/{index-DENY-gse.js → index-CXYBU0j8.js} +1 -1
  12. package/.output/public/assets/{index-Cu0STzXy.js → index-ClKXooQd.js} +1 -1
  13. package/.output/public/assets/{json-viewer-Bjmt-Mdw.js → json-viewer-QfU4qGdd.js} +1 -1
  14. package/.output/server/{_sessionId-DiAGJ75k.mjs → _sessionId-9FAmYZVf.mjs} +2 -2
  15. package/.output/server/_ssr/{CompareDrawer-DF4wc8NT.mjs → CompareDrawer-BLKjOzwD.mjs} +2 -2
  16. package/.output/server/_ssr/{ProxyViewerContainer-BupCsVk6.mjs → ProxyViewerContainer-Dcs2Mq8l.mjs} +68 -86
  17. package/.output/server/_ssr/{ReplayDialog-BIzO8gkO.mjs → ReplayDialog-oyiF4LIo.mjs} +3 -3
  18. package/.output/server/_ssr/{RequestAnatomy-DR7XdTUQ.mjs → RequestAnatomy-DkyQXSuj.mjs} +2 -2
  19. package/.output/server/_ssr/{ResponseView-DoadSJYH.mjs → ResponseView-3NTDEiDh.mjs} +2 -2
  20. package/.output/server/_ssr/{StreamingChunkSequence-KPnZNTpB.mjs → StreamingChunkSequence-DRq-5Bgn.mjs} +2 -2
  21. package/.output/server/_ssr/{index-uv5HMw8-.mjs → index-dtMiNUa1.mjs} +2 -2
  22. package/.output/server/_ssr/index.mjs +2 -2
  23. package/.output/server/_ssr/{json-viewer-JNF8ttGZ.mjs → json-viewer-BhUwicvp.mjs} +2 -2
  24. package/.output/server/_ssr/{router-07KkEFRt.mjs → router-DO0OntUK.mjs} +4 -4
  25. package/.output/server/{_tanstack-start-manifest_v-CLXgj2ke.mjs → _tanstack-start-manifest_v-DO5v3BHY.mjs} +1 -1
  26. package/.output/server/index.mjs +78 -78
  27. package/package.json +4 -1
  28. package/src/components/ProxyViewer.tsx +4 -4
  29. package/src/components/providers/ProviderCard.tsx +6 -21
  30. package/src/components/providers/ProvidersPanel.tsx +39 -43
  31. package/.output/public/assets/index-D2iiZaNM.css +0 -1
@@ -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-BupCsVk6.mjs";
3
- import { ResponseView } from "./ResponseView-DoadSJYH.mjs";
4
- import { C as CapturedLogSchema } from "./router-07KkEFRt.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-Dcs2Mq8l.mjs";
3
+ import { ResponseView } from "./ResponseView-3NTDEiDh.mjs";
4
+ import { C as CapturedLogSchema } from "./router-DO0OntUK.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "node:fs";
7
7
  import "node:buffer";
@@ -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-BupCsVk6.mjs";
3
- import "./router-07KkEFRt.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-Dcs2Mq8l.mjs";
3
+ import "./router-DO0OntUK.mjs";
4
4
  import "node:fs";
5
5
  import "node:buffer";
6
6
  import "node:path";
@@ -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-BupCsVk6.mjs";
3
- import { s as safeGetOwnProperty } from "./router-07KkEFRt.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-Dcs2Mq8l.mjs";
3
+ import { s as safeGetOwnProperty } from "./router-DO0OntUK.mjs";
4
4
  import "../_libs/jszip.mjs";
5
5
  import "node:fs";
6
6
  import "node:buffer";
@@ -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-BupCsVk6.mjs";
3
- import { U as StreamingChunkSchema$1 } from "./router-07KkEFRt.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-Dcs2Mq8l.mjs";
3
+ import { U as StreamingChunkSchema$1 } from "./router-DO0OntUK.mjs";
4
4
  import "../_libs/jszip.mjs";
5
5
  import "node:fs";
6
6
  import "node:buffer";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { P as ProxyViewerContainer } from "./ProxyViewerContainer-BupCsVk6.mjs";
3
- import "./router-07KkEFRt.mjs";
2
+ import { P as ProxyViewerContainer } from "./ProxyViewerContainer-Dcs2Mq8l.mjs";
3
+ import "./router-DO0OntUK.mjs";
4
4
  import "../_libs/jszip.mjs";
5
5
  import "node:fs";
6
6
  import "node:buffer";
@@ -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-CLXgj2ke.mjs");
88
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-DO5v3BHY.mjs");
89
89
  const startManifest = tsrStartManifest();
90
90
  let routes = startManifest.routes;
91
91
  routes[rootRouteId];
@@ -1162,7 +1162,7 @@ var getBaseManifest = getProdBaseManifest;
1162
1162
  var createEarlyHintsForRequest = createEarlyHintsCollector;
1163
1163
  async function loadEntries() {
1164
1164
  const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
1165
- import("./router-07KkEFRt.mjs").then((n) => n.V),
1165
+ import("./router-DO0OntUK.mjs").then((n) => n.V),
1166
1166
  import("./start-HYkvq4Ni.mjs"),
1167
1167
  import("./empty-plugin-adapters-BFgPZ6_d.mjs")
1168
1168
  ]);
@@ -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-BupCsVk6.mjs";
3
- import "./router-07KkEFRt.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-Dcs2Mq8l.mjs";
3
+ import "./router-DO0OntUK.mjs";
4
4
  import "node:fs";
5
5
  import "node:buffer";
6
6
  import "node:path";
@@ -64,7 +64,7 @@ import "../_libs/immediate.mjs";
64
64
  import "../_libs/setimmediate.mjs";
65
65
  import "../_libs/pako.mjs";
66
66
  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";
67
- const appCss = "/assets/index-D2iiZaNM.css";
67
+ const appCss = "/assets/index-B_SIQ47i.css";
68
68
  const CHUNK_LOAD_RELOAD_AT_KEY = "agent-inspector.chunkLoadReloadAt";
69
69
  const CHUNK_LOAD_RELOAD_WINDOW_MS = 15e3;
70
70
  const CHUNK_LOAD_FAILURE_PATTERNS = [
@@ -176,7 +176,7 @@ function RootDocument({ children }) {
176
176
  ] })
177
177
  ] });
178
178
  }
179
- const $$splitComponentImporter$1 = () => import("./index-uv5HMw8-.mjs");
179
+ const $$splitComponentImporter$1 = () => import("./index-dtMiNUa1.mjs");
180
180
  const Route$L = createFileRoute("/")({
181
181
  ssr: false,
182
182
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
@@ -220,7 +220,7 @@ function decodeSessionIdFromPath(encoded) {
220
220
  function getSessionPath(sessionId) {
221
221
  return `/session/${encodeSessionIdForPath(sessionId)}`;
222
222
  }
223
- const $$splitComponentImporter = () => import("../_sessionId-DiAGJ75k.mjs");
223
+ const $$splitComponentImporter = () => import("../_sessionId-9FAmYZVf.mjs");
224
224
  const Route$K = createFileRoute("/session/$sessionId")({
225
225
  ssr: false,
226
226
  component: lazyRouteComponent($$splitComponentImporter, "component"),
@@ -9786,7 +9786,7 @@ const Route$E = createFileRoute("/api/models")({
9786
9786
  }
9787
9787
  });
9788
9788
  const name = "@tonyclaw/agent-inspector";
9789
- const version = "3.0.21";
9789
+ const version = "3.0.23";
9790
9790
  const packageJson = {
9791
9791
  name,
9792
9792
  version
@@ -1,4 +1,4 @@
1
- const tsrStartManifest = () => ({ routes: { __root__: { filePath: "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", children: ["/", "/api/alerts", "/api/config", "/api/groups", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/pi-agent", "/api/providers", "/api/runs", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/ecosystem/packages", "/api/ecosystem/tasks", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/ecosystem/recipes/$recipeId/run", "/api/knowledge/sessions/$sessionId/candidates"], preloads: ["/assets/index-BMVjOrho.js"], scripts: [{ attrs: { type: "module", async: true, src: "/assets/index-BMVjOrho.js" } }] }, "/": { filePath: "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", children: void 0, preloads: ["/assets/index-Cu0STzXy.js", "/assets/ProxyViewerContainer-GpMPUmJQ.js"] }, "/session/$sessionId": { filePath: "C:/Users/claw/workspace/agent-inspector/src/routes/session/$sessionId.tsx", children: void 0, preloads: ["/assets/_sessionId-BeinzuQZ.js", "/assets/ProxyViewerContainer-GpMPUmJQ.js"] } } });
1
+ const tsrStartManifest = () => ({ routes: { __root__: { filePath: "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", children: ["/", "/api/alerts", "/api/config", "/api/groups", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/pi-agent", "/api/providers", "/api/runs", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/ecosystem/packages", "/api/ecosystem/tasks", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/ecosystem/recipes/$recipeId/run", "/api/knowledge/sessions/$sessionId/candidates"], preloads: ["/assets/index-CEgwWY3E.js"], scripts: [{ attrs: { type: "module", async: true, src: "/assets/index-CEgwWY3E.js" } }] }, "/": { filePath: "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", children: void 0, preloads: ["/assets/index-ClKXooQd.js", "/assets/ProxyViewerContainer-BlCrBvdm.js"] }, "/session/$sessionId": { filePath: "C:/Users/claw/workspace/agent-inspector/src/routes/session/$sessionId.tsx", children: void 0, preloads: ["/assets/_sessionId-Cz-HW2Wf.js", "/assets/ProxyViewerContainer-BlCrBvdm.js"] } } });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };
@@ -17,124 +17,124 @@ const headers = ((m) => function headersRouteRule(event) {
17
17
  }
18
18
  });
19
19
  const assets = {
20
- "/assets/CompareDrawer-BhQ8UZBt.js": {
20
+ "/assets/agent-inspector-58K1_MsC.ico": {
21
+ "type": "image/vnd.microsoft.icon",
22
+ "etag": '"38fa-ZD8kPABHYjPIkcH82FMY6iZM7fI"',
23
+ "mtime": "2026-07-10T02:23:59.067Z",
24
+ "size": 14586,
25
+ "path": "../public/assets/agent-inspector-58K1_MsC.ico"
26
+ },
27
+ "/assets/CompareDrawer-CFedvZHU.js": {
21
28
  "type": "text/javascript; charset=utf-8",
22
- "etag": '"4bc4-q7/WZBBoHI4QCp2aBIrQbpS+ZwA"',
23
- "mtime": "2026-07-09T07:33:08.150Z",
29
+ "etag": '"4bc4-0uRFG7DXyM57fhQh6r5uURKwVMM"',
30
+ "mtime": "2026-07-10T02:23:59.067Z",
24
31
  "size": 19396,
25
- "path": "../public/assets/CompareDrawer-BhQ8UZBt.js"
32
+ "path": "../public/assets/CompareDrawer-CFedvZHU.js"
33
+ },
34
+ "/assets/json-viewer-QfU4qGdd.js": {
35
+ "type": "text/javascript; charset=utf-8",
36
+ "etag": '"1ae7-rm5qDCVJwdUziWLyOD1vTnUAf4o"',
37
+ "mtime": "2026-07-10T02:23:59.067Z",
38
+ "size": 6887,
39
+ "path": "../public/assets/json-viewer-QfU4qGdd.js"
40
+ },
41
+ "/assets/index-B_SIQ47i.css": {
42
+ "type": "text/css; charset=utf-8",
43
+ "etag": '"25d54-asgl2zlLx2BQ5Ck4FZzSTvzd6h8"',
44
+ "mtime": "2026-07-10T02:23:59.067Z",
45
+ "size": 154964,
46
+ "path": "../public/assets/index-B_SIQ47i.css"
26
47
  },
27
48
  "/assets/alibaba-TTwafVwX.svg": {
28
49
  "type": "image/svg+xml",
29
50
  "etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
30
- "mtime": "2026-07-09T07:33:08.149Z",
51
+ "mtime": "2026-07-10T02:23:59.067Z",
31
52
  "size": 5915,
32
53
  "path": "../public/assets/alibaba-TTwafVwX.svg"
33
54
  },
34
- "/assets/index-Cu0STzXy.js": {
35
- "type": "text/javascript; charset=utf-8",
36
- "etag": '"265-Y2kn4+kLz0UCilDKDhsxBE8vpnc"',
37
- "mtime": "2026-07-09T07:33:08.150Z",
38
- "size": 613,
39
- "path": "../public/assets/index-Cu0STzXy.js"
55
+ "/assets/minimax-BPMzvuL-.jpeg": {
56
+ "type": "image/jpeg",
57
+ "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
58
+ "mtime": "2026-07-10T02:23:59.067Z",
59
+ "size": 6918,
60
+ "path": "../public/assets/minimax-BPMzvuL-.jpeg"
40
61
  },
41
- "/assets/json-viewer-Bjmt-Mdw.js": {
62
+ "/assets/index-ClKXooQd.js": {
42
63
  "type": "text/javascript; charset=utf-8",
43
- "etag": '"1ae7-tt6uImcLjdS2gr8kUpKvBHv82YY"',
44
- "mtime": "2026-07-09T07:33:08.150Z",
45
- "size": 6887,
46
- "path": "../public/assets/json-viewer-Bjmt-Mdw.js"
47
- },
48
- "/assets/agent-inspector-58K1_MsC.ico": {
49
- "type": "image/vnd.microsoft.icon",
50
- "etag": '"38fa-ZD8kPABHYjPIkcH82FMY6iZM7fI"',
51
- "mtime": "2026-07-09T07:33:08.149Z",
52
- "size": 14586,
53
- "path": "../public/assets/agent-inspector-58K1_MsC.ico"
54
- },
55
- "/assets/index-D2iiZaNM.css": {
56
- "type": "text/css; charset=utf-8",
57
- "etag": '"25cbf-gXyEinEYizYtkUYphvKg/JJAlXM"',
58
- "mtime": "2026-07-09T07:33:08.149Z",
59
- "size": 154815,
60
- "path": "../public/assets/index-D2iiZaNM.css"
64
+ "etag": '"265-q1w0MASWxGEVkFrV/yvofPF1jk4"',
65
+ "mtime": "2026-07-10T02:23:59.067Z",
66
+ "size": 613,
67
+ "path": "../public/assets/index-ClKXooQd.js"
61
68
  },
62
- "/assets/index-DENY-gse.js": {
69
+ "/assets/index-CXYBU0j8.js": {
63
70
  "type": "text/javascript; charset=utf-8",
64
- "etag": '"1cd2d-azZxx60qWI9z51uvMu8o3Zkmqqg"',
65
- "mtime": "2026-07-09T07:33:08.150Z",
71
+ "etag": '"1cd2d-682q/pzvufhk92gQtQ+ah6WfCp8"',
72
+ "mtime": "2026-07-10T02:23:59.068Z",
66
73
  "size": 118061,
67
- "path": "../public/assets/index-DENY-gse.js"
74
+ "path": "../public/assets/index-CXYBU0j8.js"
68
75
  },
69
- "/assets/minimax-BPMzvuL-.jpeg": {
70
- "type": "image/jpeg",
71
- "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
72
- "mtime": "2026-07-09T07:33:08.149Z",
73
- "size": 6918,
74
- "path": "../public/assets/minimax-BPMzvuL-.jpeg"
76
+ "/assets/ReplayDialog-X-fRSKAu.js": {
77
+ "type": "text/javascript; charset=utf-8",
78
+ "etag": '"3348-TWp7gwHOM35elmUN9nnWrTowB+M"',
79
+ "mtime": "2026-07-10T02:23:59.067Z",
80
+ "size": 13128,
81
+ "path": "../public/assets/ReplayDialog-X-fRSKAu.js"
75
82
  },
76
- "/assets/RequestAnatomy-DU8c0Ysb.js": {
83
+ "/assets/RequestAnatomy-S8qB5nVg.js": {
77
84
  "type": "text/javascript; charset=utf-8",
78
- "etag": '"43f3-tict+3CArhDH0oq7q3mampyiL4o"',
79
- "mtime": "2026-07-09T07:33:08.150Z",
85
+ "etag": '"43f3-xXcWByTKIW8m/hkxBdCKfcVQz8I"',
86
+ "mtime": "2026-07-10T02:23:59.067Z",
80
87
  "size": 17395,
81
- "path": "../public/assets/RequestAnatomy-DU8c0Ysb.js"
88
+ "path": "../public/assets/RequestAnatomy-S8qB5nVg.js"
89
+ },
90
+ "/assets/index-CEgwWY3E.js": {
91
+ "type": "text/javascript; charset=utf-8",
92
+ "etag": '"5231f-BBAwxlxt2sMPQLHPwLTX62JwHW0"',
93
+ "mtime": "2026-07-10T02:23:59.067Z",
94
+ "size": 336671,
95
+ "path": "../public/assets/index-CEgwWY3E.js"
82
96
  },
83
97
  "/assets/zhipuai-BPNAnxo-.svg": {
84
98
  "type": "image/svg+xml",
85
99
  "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
86
- "mtime": "2026-07-09T07:33:08.149Z",
100
+ "mtime": "2026-07-10T02:23:59.067Z",
87
101
  "size": 11256,
88
102
  "path": "../public/assets/zhipuai-BPNAnxo-.svg"
89
103
  },
90
- "/assets/_sessionId-BeinzuQZ.js": {
104
+ "/assets/_sessionId-Cz-HW2Wf.js": {
91
105
  "type": "text/javascript; charset=utf-8",
92
- "etag": '"36d-wyDMru6FvHjuW6fdH0fxfDL5csw"',
93
- "mtime": "2026-07-09T07:33:08.150Z",
106
+ "etag": '"36d-iuvRB/342+DMxAamB22m6wRukjc"',
107
+ "mtime": "2026-07-10T02:23:59.067Z",
94
108
  "size": 877,
95
- "path": "../public/assets/_sessionId-BeinzuQZ.js"
96
- },
97
- "/assets/StreamingChunkSequence-DvMcBgID.js": {
98
- "type": "text/javascript; charset=utf-8",
99
- "etag": '"e96-6BaPiEMr6EDDv+mO5wBLCpH1qYQ"',
100
- "mtime": "2026-07-09T07:33:08.150Z",
101
- "size": 3734,
102
- "path": "../public/assets/StreamingChunkSequence-DvMcBgID.js"
109
+ "path": "../public/assets/_sessionId-Cz-HW2Wf.js"
103
110
  },
104
- "/assets/ReplayDialog-CqUvVWFk.js": {
111
+ "/assets/ResponseView-_rcOWSwJ.js": {
105
112
  "type": "text/javascript; charset=utf-8",
106
- "etag": '"3348-tWBPWrexRvJS3YQIdPt3HDAs1p0"',
107
- "mtime": "2026-07-09T07:33:08.150Z",
108
- "size": 13128,
109
- "path": "../public/assets/ReplayDialog-CqUvVWFk.js"
110
- },
111
- "/assets/ResponseView-Ce2JAKBf.js": {
112
- "type": "text/javascript; charset=utf-8",
113
- "etag": '"47fe-SBZtSFnLFU3zdUC9GzC5G68XDpI"',
114
- "mtime": "2026-07-09T07:33:08.150Z",
113
+ "etag": '"47fe-E2O3S5UHMh9pNqFnLVvge02PFuc"',
114
+ "mtime": "2026-07-10T02:23:59.067Z",
115
115
  "size": 18430,
116
- "path": "../public/assets/ResponseView-Ce2JAKBf.js"
116
+ "path": "../public/assets/ResponseView-_rcOWSwJ.js"
117
117
  },
118
- "/assets/index-BMVjOrho.js": {
118
+ "/assets/StreamingChunkSequence-Bc15AVpN.js": {
119
119
  "type": "text/javascript; charset=utf-8",
120
- "etag": '"5231f-+JWwi3Ne4jFZpTso0unc0dEWK7M"',
121
- "mtime": "2026-07-09T07:33:08.150Z",
122
- "size": 336671,
123
- "path": "../public/assets/index-BMVjOrho.js"
120
+ "etag": '"e96-d+RCmS23VeqmkU3hADPu2YMDCrQ"',
121
+ "mtime": "2026-07-10T02:23:59.067Z",
122
+ "size": 3734,
123
+ "path": "../public/assets/StreamingChunkSequence-Bc15AVpN.js"
124
124
  },
125
125
  "/assets/qwen-CONDcHqt.png": {
126
126
  "type": "image/png",
127
127
  "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
128
- "mtime": "2026-07-09T07:33:08.150Z",
128
+ "mtime": "2026-07-10T02:23:59.067Z",
129
129
  "size": 357059,
130
130
  "path": "../public/assets/qwen-CONDcHqt.png"
131
131
  },
132
- "/assets/ProxyViewerContainer-GpMPUmJQ.js": {
132
+ "/assets/ProxyViewerContainer-BlCrBvdm.js": {
133
133
  "type": "text/javascript; charset=utf-8",
134
- "etag": '"bd7e1-Uddz5LuKxXdcrqA/GQwaawsmbAI"',
135
- "mtime": "2026-07-09T07:33:08.150Z",
136
- "size": 776161,
137
- "path": "../public/assets/ProxyViewerContainer-GpMPUmJQ.js"
134
+ "etag": '"bd60a-dX5hHNyTs/ZzARE4nFb0gj1tzE0"',
135
+ "mtime": "2026-07-10T02:23:59.068Z",
136
+ "size": 775690,
137
+ "path": "../public/assets/ProxyViewerContainer-BlCrBvdm.js"
138
138
  }
139
139
  };
140
140
  function readAsset(id) {
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "@tonyclaw/agent-inspector",
3
- "version": "3.0.21",
3
+ "version": "3.0.23",
4
4
  "type": "module",
5
5
  "description": "Agent observability and knowledge capture layer for AI coding tools.",
6
6
  "license": "MIT",
7
+ "engines": {
8
+ "node": ">=18.18.0"
9
+ },
7
10
  "author": "TonyClaw",
8
11
  "repository": {
9
12
  "type": "git",
@@ -2328,7 +2328,7 @@ export function ProxyViewer({
2328
2328
  : selectedSession;
2329
2329
 
2330
2330
  return (
2331
- <div className="bg-background min-h-screen w-full text-foreground">
2331
+ <div className="bg-background min-h-screen w-full text-foreground lg:h-screen lg:flex lg:flex-col lg:overflow-hidden">
2332
2332
  <button
2333
2333
  type="button"
2334
2334
  onClick={toggleDetailsPanelCollapsed}
@@ -2349,14 +2349,14 @@ export function ProxyViewer({
2349
2349
  {detailsPanelCollapsed && <FloatingInspectorLogo />}
2350
2350
  <div
2351
2351
  className={cn(
2352
- "grid min-h-screen w-full grid-cols-1",
2352
+ "grid w-full min-w-0 grid-cols-1 lg:min-h-0 lg:flex-1 lg:overflow-hidden",
2353
2353
  detailsPanelCollapsed
2354
2354
  ? "lg:grid-cols-[minmax(0,1fr)]"
2355
2355
  : "lg:grid-cols-[minmax(0,1fr)_340px] xl:grid-cols-[minmax(0,1fr)_360px]",
2356
2356
  )}
2357
2357
  >
2358
2358
  {!detailsPanelCollapsed && (
2359
- <aside className="bg-background/95 order-1 border-b border-white/[0.045] lg:sticky lg:top-0 lg:order-2 lg:h-screen lg:overflow-y-auto lg:border-b-0 lg:border-l lg:border-white/[0.055]">
2359
+ <aside className="bg-background/95 order-1 border-b border-white/[0.045] lg:order-2 lg:h-full lg:overflow-y-auto lg:border-b-0 lg:border-l lg:border-white/[0.055] inspector-scrollbar">
2360
2360
  <div className="space-y-4 p-4">
2361
2361
  <BrandHeader
2362
2362
  compact={true}
@@ -2485,7 +2485,7 @@ export function ProxyViewer({
2485
2485
  </aside>
2486
2486
  )}
2487
2487
 
2488
- <main className="order-2 min-w-0 lg:order-1">
2488
+ <main className="order-2 min-w-0 lg:order-1 lg:h-full lg:overflow-y-auto inspector-scrollbar">
2489
2489
  <div className="bg-background/95 shadow-[0_12px_36px_rgba(0,0,0,0.18),inset_0_-1px_0_rgba(255,255,255,0.045)] sticky top-0 z-30 px-4 py-3 lg:px-5">
2490
2490
  <div className="flex flex-wrap items-center gap-2">
2491
2491
  <div className="min-w-[180px] flex-1">
@@ -289,7 +289,6 @@ function ProviderCapabilitySummary({ provider }: { provider: ProviderConfig }):
289
289
 
290
290
  return (
291
291
  <div className="flex min-w-0 flex-wrap items-center gap-1.5 text-xs text-muted-foreground">
292
- <span>Capabilities</span>
293
292
  {hasAnthropic && <CapabilityChip label="Anthropic" enabled={true} />}
294
293
  {hasChat && <CapabilityChip label="OpenAI Chat" enabled={true} />}
295
294
  {hasResponses && <CapabilityChip label="OpenAI Responses" enabled={true} />}
@@ -448,14 +447,6 @@ function ModelChip({ provider, model }: { provider: ProviderConfig; model: strin
448
447
  );
449
448
  }
450
449
 
451
- function modelResultsLabel(testResults: TestResults | undefined): string | null {
452
- const models = testResults?.models;
453
- if (models === undefined) return null;
454
- const count = Object.keys(models).length;
455
- if (count === 0) return null;
456
- return `${count} model${count === 1 ? "" : "s"} tested`;
457
- }
458
-
459
450
  function getErrorIcon(type: ErrorType): JSX.Element {
460
451
  const iconProps = { className: "size-3", strokeWidth: 2 };
461
452
  switch (type) {
@@ -662,7 +653,6 @@ export function ProviderCard({
662
653
  provider.modelMetadataUrl !== undefined && provider.modelMetadataUrl.trim() !== "";
663
654
  const metadataImportLabel = canRefreshMetadata ? "Refresh" : "Import defaults";
664
655
  const isTestingValue = isTesting ?? false;
665
- const testedModelsLabel = modelResultsLabel(testResults);
666
656
  const providerSourceBadge =
667
657
  provider.source === "company" ? (
668
658
  <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">
@@ -711,17 +701,12 @@ export function ProviderCard({
711
701
 
712
702
  <div className="flex flex-col gap-2 text-xs text-muted-foreground sm:flex-row sm:items-center sm:justify-between">
713
703
  <ProviderCapabilitySummary provider={provider} />
714
- <div className="flex flex-wrap items-center gap-2">
715
- <span>Key configured</span>
716
- <span>{provider.authHeader === "x-api-key" ? "x-api-key" : "Bearer"}</span>
717
- {testedModelsLabel !== null && <span>{testedModelsLabel}</span>}
718
- {testResults?.testedAt !== undefined && (
719
- <span className="inline-flex items-center gap-1">
720
- <Clock className="size-3" />
721
- {formatTimeAgo(testResults.testedAt)}
722
- </span>
723
- )}
724
- </div>
704
+ {testResults?.testedAt !== undefined && (
705
+ <span className="inline-flex items-center gap-1">
706
+ <Clock className="size-3" />
707
+ {formatTimeAgo(testResults.testedAt)}
708
+ </span>
709
+ )}
725
710
  </div>
726
711
 
727
712
  {!hasContextMetadata && (
@@ -553,53 +553,49 @@ export function ProvidersPanel({
553
553
 
554
554
  return (
555
555
  <div className="space-y-4">
556
- <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">
557
- <h3 className="text-lg font-medium">Providers</h3>
558
- <div className="flex items-center gap-2">
559
- <Button
560
- variant="outline"
561
- size="sm"
562
- onClick={() => handleExport(false)}
563
- className="gap-1 hover:bg-muted"
564
- >
565
- <Download className="size-3" />
566
- Export
567
- </Button>
568
- <Button
569
- variant="outline"
570
- size="sm"
571
- onClick={handleImportClick}
572
- className="gap-1 hover:bg-muted"
573
- >
574
- <Upload className="size-3" />
575
- Import
576
- </Button>
577
- <input
578
- type="file"
579
- ref={fileInputRef}
580
- accept=".json"
581
- onChange={handleFileChange}
582
- style={{ display: "none" }}
583
- />
584
- <Button
585
- variant="outline"
586
- size="sm"
587
- onClick={() => setShowImportWizard(true)}
588
- className="gap-1"
589
- >
590
- <Scan className="size-3" />
591
- Scan
592
- </Button>
593
- <Button onClick={() => setShowForm(true)} size="sm" className="gap-1">
594
- <Plus className="size-4" />
595
- Add Provider
596
- </Button>
597
- </div>
556
+ <div className="sticky top-0 z-10 flex items-center justify-end gap-2 rounded-[8px] bg-background/95 px-1 py-1 backdrop-blur">
557
+ <Button
558
+ variant="outline"
559
+ size="sm"
560
+ onClick={() => handleExport(false)}
561
+ className="gap-1 hover:bg-muted"
562
+ >
563
+ <Download className="size-3" />
564
+ Export
565
+ </Button>
566
+ <Button
567
+ variant="outline"
568
+ size="sm"
569
+ onClick={handleImportClick}
570
+ className="gap-1 hover:bg-muted"
571
+ >
572
+ <Upload className="size-3" />
573
+ Import
574
+ </Button>
575
+ <input
576
+ type="file"
577
+ ref={fileInputRef}
578
+ accept=".json"
579
+ onChange={handleFileChange}
580
+ style={{ display: "none" }}
581
+ />
582
+ <Button
583
+ variant="outline"
584
+ size="sm"
585
+ onClick={() => setShowImportWizard(true)}
586
+ className="gap-1"
587
+ >
588
+ <Scan className="size-3" />
589
+ Scan
590
+ </Button>
591
+ <Button onClick={() => setShowForm(true)} size="sm" className="gap-1">
592
+ <Plus className="size-4" />
593
+ Add Provider
594
+ </Button>
598
595
  </div>
599
596
 
600
597
  {configPath !== null && (
601
598
  <div className="flex items-center gap-2 rounded-[8px] bg-muted/15 px-3 py-2 text-xs text-muted-foreground">
602
- <span className="shrink-0">Config:</span>
603
599
  <span className="font-mono truncate" title={configPath}>
604
600
  {configPath}
605
601
  </span>