@tonyclaw/agent-inspector 3.0.2 → 3.0.4

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 (42) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-Dqpwaku6.js → CompareDrawer-Bs2kzUSp.js} +1 -1
  3. package/.output/public/assets/ProxyViewerContainer-BUnlrfiS.js +106 -0
  4. package/.output/public/assets/{ReplayDialog-eaMk-WFG.js → ReplayDialog-B6xy7pl5.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-DCnoqam_.js → RequestAnatomy-BSvSmpCO.js} +1 -1
  6. package/.output/public/assets/{ResponseView-Q7HW0fAd.js → ResponseView-BFnUva7Z.js} +2 -2
  7. package/.output/public/assets/{StreamingChunkSequence-K7qKD9VX.js → StreamingChunkSequence-u7ZaJOqn.js} +1 -1
  8. package/.output/public/assets/{_sessionId-CHwYmqKk.js → _sessionId-CH4nsMOA.js} +1 -1
  9. package/.output/public/assets/{index-EI9mxK7O.js → index-B5HS6AxR.js} +1 -1
  10. package/.output/public/assets/index-BqVL284D.js +1 -0
  11. package/.output/public/assets/index-DJW6qbnH.css +1 -0
  12. package/.output/public/assets/{json-viewer-Dbu2fh6-.js → json-viewer-5Tj5vkqe.js} +1 -1
  13. package/.output/public/assets/{main-CLNurSfs.js → main-ChxZWG8K.js} +2 -2
  14. package/.output/server/{_sessionId-1KajCUiB.mjs → _sessionId-B3r-VBdM.mjs} +2 -2
  15. package/.output/server/_ssr/{CompareDrawer-iM778CsC.mjs → CompareDrawer-DAYrKHKe.mjs} +2 -2
  16. package/.output/server/_ssr/{ProxyViewerContainer-DzVBZMbn.mjs → ProxyViewerContainer-CYmNmQK9.mjs} +357 -214
  17. package/.output/server/_ssr/{ReplayDialog-BxPm6uxq.mjs → ReplayDialog-CdKvdXxk.mjs} +3 -3
  18. package/.output/server/_ssr/{RequestAnatomy-D5aE8Qas.mjs → RequestAnatomy-BtmTUq7O.mjs} +2 -2
  19. package/.output/server/_ssr/{ResponseView-D0mzqj7J.mjs → ResponseView-DuD_z5hd.mjs} +2 -2
  20. package/.output/server/_ssr/{StreamingChunkSequence-BbeKs1PZ.mjs → StreamingChunkSequence-DpIV2wt_.mjs} +2 -2
  21. package/.output/server/_ssr/{index-BIrW_uL8.mjs → index-B4_8vH8k.mjs} +2 -2
  22. package/.output/server/_ssr/index.mjs +2 -2
  23. package/.output/server/_ssr/{json-viewer-DVAdcOds.mjs → json-viewer-gcNJEB7y.mjs} +2 -2
  24. package/.output/server/_ssr/{router-DtMA9SLr.mjs → router-CYjIsElo.mjs} +4 -4
  25. package/.output/server/{_tanstack-start-manifest_v-Rq5BNh_J.mjs → _tanstack-start-manifest_v-BRdOxY6q.mjs} +1 -1
  26. package/.output/server/index.mjs +72 -72
  27. package/package.json +1 -1
  28. package/src/assets/IDE/claudecode-color.svg +1 -0
  29. package/src/assets/IDE/codex-color.svg +1 -0
  30. package/src/assets/IDE/opencode.svg +1 -0
  31. package/src/assets/IDE/xiaomimimo.svg +1 -0
  32. package/src/assets/logos/opencode.svg +4 -4
  33. package/src/components/ProxyViewer.tsx +92 -25
  34. package/src/components/ProxyViewerContainer.tsx +154 -55
  35. package/src/components/clients/ClientLogo.tsx +14 -52
  36. package/src/components/providers/ProviderCard.tsx +83 -36
  37. package/src/components/proxy-viewer/ConversationGroup.tsx +1 -1
  38. package/src/components/proxy-viewer/ConversationHeader.tsx +4 -5
  39. package/src/components/proxy-viewer/LogEntryHeader.tsx +1 -7
  40. package/.output/public/assets/ProxyViewerContainer-tu_yG20v.js +0 -106
  41. package/.output/public/assets/index-CZnCJkDN.js +0 -1
  42. package/.output/public/assets/index-Tq5s9NV0.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 Dialog, d as DialogContent, e as DialogHeader, h as DialogTitle, T as Tabs, i as TabsList, j as TabsTrigger, k as TabsContent, l as Button, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, q as dispatchLogFocusRequest } from "./ProxyViewerContainer-DzVBZMbn.mjs";
3
- import { ResponseView } from "./ResponseView-D0mzqj7J.mjs";
4
- import { C as CapturedLogSchema } from "./router-DtMA9SLr.mjs";
2
+ import { u as useProviders, D as Dialog, d as DialogContent, e as DialogHeader, h as DialogTitle, T as Tabs, i as TabsList, j as TabsTrigger, k as TabsContent, l as Button, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, q as dispatchLogFocusRequest } from "./ProxyViewerContainer-CYmNmQK9.mjs";
3
+ import { ResponseView } from "./ResponseView-DuD_z5hd.mjs";
4
+ import { C as CapturedLogSchema } from "./router-CYjIsElo.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/modelcontextprotocol__server.mjs";
7
7
  import { af as RotateCcw, ar as Braces, as as Minimize2 } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, s as analyzeContextIntelligence, f as formatTokens, m as TooltipProvider, c as cn, n as Tooltip, o as TooltipTrigger, p as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, t as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-DzVBZMbn.mjs";
3
- import "./router-DtMA9SLr.mjs";
2
+ import { u as useProviders, s as analyzeContextIntelligence, f as formatTokens, m as TooltipProvider, c as cn, n as Tooltip, o as TooltipTrigger, p as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, t as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-CYmNmQK9.mjs";
3
+ import "./router-CYjIsElo.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { I as Info, a as ChevronDown, h as ChevronRight } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { g as getLogFormatAdapter, f as formatTokens, c as cn, v as getStatusCategory, B as Badge, w as Collapsible, x as CollapsibleTrigger, y as CollapsibleContent, z as ScrollArea, E as LazyJsonViewer, F as safeJsonValue } from "./ProxyViewerContainer-DzVBZMbn.mjs";
3
- import { s as safeGetOwnProperty } from "./router-DtMA9SLr.mjs";
2
+ import { g as getLogFormatAdapter, f as formatTokens, c as cn, v as getStatusCategory, B as Badge, w as Collapsible, x as CollapsibleTrigger, y as CollapsibleContent, z as ScrollArea, E as LazyJsonViewer, F as safeJsonValue } from "./ProxyViewerContainer-CYmNmQK9.mjs";
3
+ import { s as safeGetOwnProperty } from "./router-CYjIsElo.mjs";
4
4
  import "../_libs/jszip.mjs";
5
5
  import "../_libs/modelcontextprotocol__server.mjs";
6
6
  import { Z as Zap, T as TriangleAlert, at as CircleStop, O as Brain, a as ChevronDown, h as ChevronRight, r as Terminal } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { m as TooltipProvider, n as Tooltip, o as TooltipTrigger, B as Badge, p as TooltipContent, E as LazyJsonViewer } from "./ProxyViewerContainer-DzVBZMbn.mjs";
3
- import "./router-DtMA9SLr.mjs";
2
+ import { m as TooltipProvider, n as Tooltip, o as TooltipTrigger, B as Badge, p as TooltipContent, E as LazyJsonViewer } from "./ProxyViewerContainer-CYmNmQK9.mjs";
3
+ import "./router-CYjIsElo.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { a as ChevronDown, h as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
- import { P as ProxyViewerContainer } from "./ProxyViewerContainer-DzVBZMbn.mjs";
1
+ import { P as ProxyViewerContainer } from "./ProxyViewerContainer-CYmNmQK9.mjs";
2
2
  import "../_libs/react.mjs";
3
- import "./router-DtMA9SLr.mjs";
3
+ import "./router-CYjIsElo.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/swr.mjs";
@@ -198,7 +198,7 @@ function getResponse() {
198
198
  return event.res;
199
199
  }
200
200
  async function getStartManifest(matchedRoutes) {
201
- const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-Rq5BNh_J.mjs");
201
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-BRdOxY6q.mjs");
202
202
  const startManifest = tsrStartManifest();
203
203
  const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
204
204
  rootRoute.assets = rootRoute.assets || [];
@@ -776,7 +776,7 @@ let entriesPromise;
776
776
  let baseManifestPromise;
777
777
  let cachedFinalManifestPromise;
778
778
  async function loadEntries() {
779
- const routerEntry = await import("./router-DtMA9SLr.mjs").then((n) => n.N);
779
+ const routerEntry = await import("./router-CYjIsElo.mjs").then((n) => n.N);
780
780
  const startEntry = await import("./start-HYkvq4Ni.mjs");
781
781
  return { startEntry, routerEntry };
782
782
  }
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { G as parseJsonText, c as cn, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, b as copyTextToClipboard } from "./ProxyViewerContainer-DzVBZMbn.mjs";
3
- import "./router-DtMA9SLr.mjs";
2
+ import { G as parseJsonText, c as cn, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, b as copyTextToClipboard } from "./ProxyViewerContainer-CYmNmQK9.mjs";
3
+ import "./router-CYjIsElo.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { b as Check, e as Copy, a as ChevronDown, h as ChevronRight, ac as ChevronsDown } from "../_libs/lucide-react.mjs";
@@ -65,7 +65,7 @@ import "../_libs/immediate.mjs";
65
65
  import "../_libs/setimmediate.mjs";
66
66
  import "../_libs/pako.mjs";
67
67
  const faviconSvg = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20role='img'%20aria-label='Agent%20Inspector'%3e%3cg%20fill='none'%20stroke='%23f59e0b'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M5%2013%20C5%209%208%207%2012%207%20C16%207%2019%209%2019%2013%20C19%2016%2016%2018%2012%2018%20C8%2018%205%2016%205%2013%20Z'%20/%3e%3cpath%20d='M5%2011%20C3.5%209.5%201.5%2010%202%2012.5%20C2.5%2014%204%2013.5%205%2012.5'%20/%3e%3cpath%20d='M19%2011%20C20.5%209.5%2022.5%2010%2022%2012.5%20C21.5%2014%2020%2013.5%2019%2012.5'%20/%3e%3cline%20x1='10'%20y1='7'%20x2='9.5'%20y2='5'%20/%3e%3cline%20x1='14'%20y1='7'%20x2='14.5'%20y2='5'%20/%3e%3cline%20x1='6.5'%20y1='16'%20x2='4.5'%20y2='19.5'%20/%3e%3cline%20x1='9'%20y1='17.5'%20x2='8'%20y2='20.5'%20/%3e%3cline%20x1='15'%20y1='17.5'%20x2='16'%20y2='20.5'%20/%3e%3cline%20x1='17.5'%20y1='16'%20x2='19.5'%20y2='19.5'%20/%3e%3c/g%3e%3ccircle%20cx='9.5'%20cy='4.5'%20r='0.9'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='14.5'%20cy='4.5'%20r='0.9'%20fill='%23f59e0b'%20/%3e%3c/svg%3e";
68
- const appCss = "/assets/index-Tq5s9NV0.css";
68
+ const appCss = "/assets/index-DJW6qbnH.css";
69
69
  const Route$D = createRootRoute({
70
70
  head: () => ({
71
71
  meta: [
@@ -108,7 +108,7 @@ function RootDocument({ children }) {
108
108
  ] })
109
109
  ] });
110
110
  }
111
- const $$splitComponentImporter$1 = () => import("./index-BIrW_uL8.mjs");
111
+ const $$splitComponentImporter$1 = () => import("./index-B4_8vH8k.mjs");
112
112
  const Route$C = createFileRoute("/")({
113
113
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
114
114
  });
@@ -151,7 +151,7 @@ function decodeSessionIdFromPath(encoded) {
151
151
  function getSessionPath(sessionId) {
152
152
  return `/session/${encodeSessionIdForPath(sessionId)}`;
153
153
  }
154
- const $$splitComponentImporter = () => import("../_sessionId-1KajCUiB.mjs");
154
+ const $$splitComponentImporter = () => import("../_sessionId-B3r-VBdM.mjs");
155
155
  const Route$B = createFileRoute("/session/$sessionId")({
156
156
  component: lazyRouteComponent($$splitComponentImporter, "component"),
157
157
  parseParams: (params) => ({
@@ -9136,7 +9136,7 @@ const Route$w = createFileRoute("/api/models")({
9136
9136
  }
9137
9137
  }
9138
9138
  });
9139
- const version = "3.0.2";
9139
+ const version = "3.0.4";
9140
9140
  const packageJson = {
9141
9141
  version
9142
9142
  };
@@ -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/providers", "/api/runs", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-CLNurSfs.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-CZnCJkDN.js", "/assets/ProxyViewerContainer-tu_yG20v.js"] }, "/api/alerts": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/alerts.ts", "children": ["/api/alerts/summary"] }, "/api/config": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.ts", "children": ["/api/config/paths"] }, "/api/groups": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.ts", "children": ["/api/groups/$groupId"] }, "/api/health": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/health.ts" }, "/api/logs": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.ts", "children": ["/api/logs/$id", "/api/logs/import", "/api/logs/stream"] }, "/api/mcp": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/mcp.ts" }, "/api/models": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/models.ts" }, "/api/providers": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.ts", "children": ["/api/providers/$providerId", "/api/providers/export", "/api/providers/import", "/api/providers/scan"] }, "/api/runs": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.ts", "children": ["/api/runs/$runId"] }, "/api/sessions": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/sessions.ts" }, "/proxy/$": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/proxy/$.ts" }, "/session/$sessionId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/session/$sessionId.tsx", "assets": [], "preloads": ["/assets/_sessionId-CHwYmqKk.js", "/assets/ProxyViewerContainer-tu_yG20v.js"] }, "/api/alerts/summary": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/alerts.summary.ts" }, "/api/config/paths": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.paths.ts" }, "/api/groups/$groupId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.$groupId.ts", "children": ["/api/groups/$groupId/evidence", "/api/groups/$groupId/sessions"] }, "/api/knowledge/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.ts", "children": ["/api/knowledge/candidates/$candidateId"] }, "/api/knowledge/project-context": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.project-context.ts" }, "/api/knowledge/search": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.search.ts" }, "/api/logs/$id": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.ts", "children": ["/api/logs/$id/body", "/api/logs/$id/chunks", "/api/logs/$id/replay"] }, "/api/logs/import": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.import.ts" }, "/api/logs/stream": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.stream.ts" }, "/api/providers/$providerId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.ts", "children": ["/api/providers/$providerId/model-metadata", "/api/providers/$providerId/test"] }, "/api/providers/export": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.export.ts" }, "/api/providers/import": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.import.ts" }, "/api/providers/scan": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.scan.ts" }, "/api/runs/$runId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.$runId.ts", "children": ["/api/runs/$runId/evidence"] }, "/api/groups/$groupId/evidence": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.$groupId.evidence.ts" }, "/api/groups/$groupId/sessions": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.$groupId.sessions.ts" }, "/api/knowledge/candidates/$candidateId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.ts", "children": ["/api/knowledge/candidates/$candidateId/promote"] }, "/api/logs/$id/body": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.body.ts" }, "/api/logs/$id/chunks": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.chunks.ts" }, "/api/logs/$id/replay": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.replay.ts" }, "/api/providers/$providerId/model-metadata": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.model-metadata.ts" }, "/api/providers/$providerId/test": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.ts", "children": ["/api/providers/$providerId/test/log"] }, "/api/runs/$runId/evidence": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.$runId.evidence.ts" }, "/api/knowledge/candidates/$candidateId/promote": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.promote.ts" }, "/api/knowledge/sessions/$sessionId/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.sessions.$sessionId.candidates.ts" }, "/api/providers/$providerId/test/log": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.log.ts" } }, "clientEntry": "/assets/main-CLNurSfs.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/providers", "/api/runs", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-ChxZWG8K.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-BqVL284D.js", "/assets/ProxyViewerContainer-BUnlrfiS.js"] }, "/api/alerts": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/alerts.ts", "children": ["/api/alerts/summary"] }, "/api/config": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.ts", "children": ["/api/config/paths"] }, "/api/groups": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.ts", "children": ["/api/groups/$groupId"] }, "/api/health": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/health.ts" }, "/api/logs": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.ts", "children": ["/api/logs/$id", "/api/logs/import", "/api/logs/stream"] }, "/api/mcp": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/mcp.ts" }, "/api/models": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/models.ts" }, "/api/providers": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.ts", "children": ["/api/providers/$providerId", "/api/providers/export", "/api/providers/import", "/api/providers/scan"] }, "/api/runs": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.ts", "children": ["/api/runs/$runId"] }, "/api/sessions": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/sessions.ts" }, "/proxy/$": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/proxy/$.ts" }, "/session/$sessionId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/session/$sessionId.tsx", "assets": [], "preloads": ["/assets/_sessionId-CH4nsMOA.js", "/assets/ProxyViewerContainer-BUnlrfiS.js"] }, "/api/alerts/summary": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/alerts.summary.ts" }, "/api/config/paths": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.paths.ts" }, "/api/groups/$groupId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.$groupId.ts", "children": ["/api/groups/$groupId/evidence", "/api/groups/$groupId/sessions"] }, "/api/knowledge/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.ts", "children": ["/api/knowledge/candidates/$candidateId"] }, "/api/knowledge/project-context": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.project-context.ts" }, "/api/knowledge/search": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.search.ts" }, "/api/logs/$id": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.ts", "children": ["/api/logs/$id/body", "/api/logs/$id/chunks", "/api/logs/$id/replay"] }, "/api/logs/import": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.import.ts" }, "/api/logs/stream": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.stream.ts" }, "/api/providers/$providerId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.ts", "children": ["/api/providers/$providerId/model-metadata", "/api/providers/$providerId/test"] }, "/api/providers/export": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.export.ts" }, "/api/providers/import": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.import.ts" }, "/api/providers/scan": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.scan.ts" }, "/api/runs/$runId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.$runId.ts", "children": ["/api/runs/$runId/evidence"] }, "/api/groups/$groupId/evidence": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.$groupId.evidence.ts" }, "/api/groups/$groupId/sessions": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.$groupId.sessions.ts" }, "/api/knowledge/candidates/$candidateId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.ts", "children": ["/api/knowledge/candidates/$candidateId/promote"] }, "/api/logs/$id/body": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.body.ts" }, "/api/logs/$id/chunks": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.chunks.ts" }, "/api/logs/$id/replay": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.replay.ts" }, "/api/providers/$providerId/model-metadata": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.model-metadata.ts" }, "/api/providers/$providerId/test": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.ts", "children": ["/api/providers/$providerId/test/log"] }, "/api/runs/$runId/evidence": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.$runId.evidence.ts" }, "/api/knowledge/candidates/$candidateId/promote": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.promote.ts" }, "/api/knowledge/sessions/$sessionId/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.sessions.$sessionId.candidates.ts" }, "/api/providers/$providerId/test/log": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.log.ts" } }, "clientEntry": "/assets/main-ChxZWG8K.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };
@@ -38,114 +38,114 @@ const assets = {
38
38
  "/assets/alibaba-TTwafVwX.svg": {
39
39
  "type": "image/svg+xml",
40
40
  "etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
41
- "mtime": "2026-07-07T01:08:49.703Z",
41
+ "mtime": "2026-07-07T02:21:04.311Z",
42
42
  "size": 5915,
43
43
  "path": "../public/assets/alibaba-TTwafVwX.svg"
44
44
  },
45
+ "/assets/index-B5HS6AxR.js": {
46
+ "type": "text/javascript; charset=utf-8",
47
+ "etag": '"1cd2c-EDX4XirwFQ64OqLFRJwR9ucgkOA"',
48
+ "mtime": "2026-07-07T02:21:04.311Z",
49
+ "size": 118060,
50
+ "path": "../public/assets/index-B5HS6AxR.js"
51
+ },
52
+ "/assets/CompareDrawer-Bs2kzUSp.js": {
53
+ "type": "text/javascript; charset=utf-8",
54
+ "etag": '"4bbf-OkdMzzuYsc0p52m848ZX4xujI/U"',
55
+ "mtime": "2026-07-07T02:21:04.311Z",
56
+ "size": 19391,
57
+ "path": "../public/assets/CompareDrawer-Bs2kzUSp.js"
58
+ },
45
59
  "/assets/minimax-BPMzvuL-.jpeg": {
46
60
  "type": "image/jpeg",
47
61
  "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
48
- "mtime": "2026-07-07T01:08:49.703Z",
62
+ "mtime": "2026-07-07T02:21:04.311Z",
49
63
  "size": 6918,
50
64
  "path": "../public/assets/minimax-BPMzvuL-.jpeg"
51
65
  },
52
- "/assets/CompareDrawer-Dqpwaku6.js": {
53
- "type": "text/javascript; charset=utf-8",
54
- "etag": '"4bbf-ZPntxP9PDr7AIoGdVZZXJYRM4HE"',
55
- "mtime": "2026-07-07T01:08:49.704Z",
56
- "size": 19391,
57
- "path": "../public/assets/CompareDrawer-Dqpwaku6.js"
58
- },
59
- "/assets/index-EI9mxK7O.js": {
66
+ "/assets/index-BqVL284D.js": {
60
67
  "type": "text/javascript; charset=utf-8",
61
- "etag": '"1cd2c-19Vm1WJDNbK2EWsAi7Bxrn6rS2k"',
62
- "mtime": "2026-07-07T01:08:49.706Z",
63
- "size": 118060,
64
- "path": "../public/assets/index-EI9mxK7O.js"
65
- },
66
- "/assets/index-CZnCJkDN.js": {
67
- "type": "text/javascript; charset=utf-8",
68
- "etag": '"74-UzXK8qp7BqgU02youM+REZzAtyE"',
69
- "mtime": "2026-07-07T01:08:49.704Z",
68
+ "etag": '"74-I9QmAJsscCqjSkLfQHCzr7tltYk"',
69
+ "mtime": "2026-07-07T02:21:04.311Z",
70
70
  "size": 116,
71
- "path": "../public/assets/index-CZnCJkDN.js"
71
+ "path": "../public/assets/index-BqVL284D.js"
72
72
  },
73
- "/assets/json-viewer-Dbu2fh6-.js": {
73
+ "/assets/json-viewer-5Tj5vkqe.js": {
74
74
  "type": "text/javascript; charset=utf-8",
75
- "etag": '"1ae6-TrhZZ3eS6TP+barBIj9MbTMvsHs"',
76
- "mtime": "2026-07-07T01:08:49.705Z",
75
+ "etag": '"1ae6-46wufUwc2WCo8Q8eRLMvBJCA3uE"',
76
+ "mtime": "2026-07-07T02:21:04.311Z",
77
77
  "size": 6886,
78
- "path": "../public/assets/json-viewer-Dbu2fh6-.js"
78
+ "path": "../public/assets/json-viewer-5Tj5vkqe.js"
79
+ },
80
+ "/assets/index-DJW6qbnH.css": {
81
+ "type": "text/css; charset=utf-8",
82
+ "etag": '"2205e-7jRa3Crop49x40EeDJr4U5txznk"',
83
+ "mtime": "2026-07-07T02:21:04.311Z",
84
+ "size": 139358,
85
+ "path": "../public/assets/index-DJW6qbnH.css"
79
86
  },
80
- "/assets/main-CLNurSfs.js": {
87
+ "/assets/main-ChxZWG8K.js": {
81
88
  "type": "text/javascript; charset=utf-8",
82
- "etag": '"512fd-IxzZTYdmlPycsVhBCJBtoIeXuFg"',
83
- "mtime": "2026-07-07T01:08:49.704Z",
89
+ "etag": '"512fd-++aglOSkYu3wcC27zqoFHfftG7A"',
90
+ "mtime": "2026-07-07T02:21:04.311Z",
84
91
  "size": 332541,
85
- "path": "../public/assets/main-CLNurSfs.js"
92
+ "path": "../public/assets/main-ChxZWG8K.js"
86
93
  },
87
- "/assets/index-Tq5s9NV0.css": {
88
- "type": "text/css; charset=utf-8",
89
- "etag": '"22408-MQKT02eqQudVEj/DozyiEJoTl6E"',
90
- "mtime": "2026-07-07T01:08:49.704Z",
91
- "size": 140296,
92
- "path": "../public/assets/index-Tq5s9NV0.css"
94
+ "/assets/ResponseView-BFnUva7Z.js": {
95
+ "type": "text/javascript; charset=utf-8",
96
+ "etag": '"47fa-fO1kSvWV0a5uE7Q6c7BVGvL65kM"',
97
+ "mtime": "2026-07-07T02:21:04.311Z",
98
+ "size": 18426,
99
+ "path": "../public/assets/ResponseView-BFnUva7Z.js"
93
100
  },
94
- "/assets/ReplayDialog-eaMk-WFG.js": {
101
+ "/assets/StreamingChunkSequence-u7ZaJOqn.js": {
95
102
  "type": "text/javascript; charset=utf-8",
96
- "etag": '"31d6-itkTVP7cbdhyrrb/qFFjd/CAQXQ"',
97
- "mtime": "2026-07-07T01:08:49.704Z",
98
- "size": 12758,
99
- "path": "../public/assets/ReplayDialog-eaMk-WFG.js"
103
+ "etag": '"dd6-kl1keZJrpdwTap/1d0rIcH2kmvg"',
104
+ "mtime": "2026-07-07T02:21:04.311Z",
105
+ "size": 3542,
106
+ "path": "../public/assets/StreamingChunkSequence-u7ZaJOqn.js"
100
107
  },
101
- "/assets/RequestAnatomy-DCnoqam_.js": {
108
+ "/assets/RequestAnatomy-BSvSmpCO.js": {
102
109
  "type": "text/javascript; charset=utf-8",
103
- "etag": '"43f2-dBgBpSu/6XXhbX9gSNaf6TpOm+U"',
104
- "mtime": "2026-07-07T01:08:49.704Z",
110
+ "etag": '"43f2-mIe+IsVw9DHI6z9piNFU0jQPNUs"',
111
+ "mtime": "2026-07-07T02:21:04.311Z",
105
112
  "size": 17394,
106
- "path": "../public/assets/RequestAnatomy-DCnoqam_.js"
113
+ "path": "../public/assets/RequestAnatomy-BSvSmpCO.js"
107
114
  },
108
- "/assets/qwen-CONDcHqt.png": {
109
- "type": "image/png",
110
- "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
111
- "mtime": "2026-07-07T01:08:49.703Z",
112
- "size": 357059,
113
- "path": "../public/assets/qwen-CONDcHqt.png"
114
- },
115
- "/assets/StreamingChunkSequence-K7qKD9VX.js": {
115
+ "/assets/_sessionId-CH4nsMOA.js": {
116
116
  "type": "text/javascript; charset=utf-8",
117
- "etag": '"dd6-ODWFyg5pO+hUjPIjqkT9DJKpTW8"',
118
- "mtime": "2026-07-07T01:08:49.704Z",
119
- "size": 3542,
120
- "path": "../public/assets/StreamingChunkSequence-K7qKD9VX.js"
117
+ "etag": '"36c-9p/kN1A7zNDoM8PANgtcd3OSgwo"',
118
+ "mtime": "2026-07-07T02:21:04.311Z",
119
+ "size": 876,
120
+ "path": "../public/assets/_sessionId-CH4nsMOA.js"
121
121
  },
122
122
  "/assets/zhipuai-BPNAnxo-.svg": {
123
123
  "type": "image/svg+xml",
124
124
  "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
125
- "mtime": "2026-07-07T01:08:49.703Z",
125
+ "mtime": "2026-07-07T02:21:04.311Z",
126
126
  "size": 11256,
127
127
  "path": "../public/assets/zhipuai-BPNAnxo-.svg"
128
128
  },
129
- "/assets/ResponseView-Q7HW0fAd.js": {
130
- "type": "text/javascript; charset=utf-8",
131
- "etag": '"47fa-/Wc+ATNSNSBBRdaiY9vHnwKGJg4"',
132
- "mtime": "2026-07-07T01:08:49.704Z",
133
- "size": 18426,
134
- "path": "../public/assets/ResponseView-Q7HW0fAd.js"
129
+ "/assets/qwen-CONDcHqt.png": {
130
+ "type": "image/png",
131
+ "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
132
+ "mtime": "2026-07-07T02:21:04.311Z",
133
+ "size": 357059,
134
+ "path": "../public/assets/qwen-CONDcHqt.png"
135
135
  },
136
- "/assets/_sessionId-CHwYmqKk.js": {
136
+ "/assets/ReplayDialog-B6xy7pl5.js": {
137
137
  "type": "text/javascript; charset=utf-8",
138
- "etag": '"36c-DOWoQuaVbR9fu8b6L65Qv4ouNHs"',
139
- "mtime": "2026-07-07T01:08:49.704Z",
140
- "size": 876,
141
- "path": "../public/assets/_sessionId-CHwYmqKk.js"
138
+ "etag": '"31d6-XCGGD+MKf4wADYWp/RBq6C2nTC0"',
139
+ "mtime": "2026-07-07T02:21:04.311Z",
140
+ "size": 12758,
141
+ "path": "../public/assets/ReplayDialog-B6xy7pl5.js"
142
142
  },
143
- "/assets/ProxyViewerContainer-tu_yG20v.js": {
143
+ "/assets/ProxyViewerContainer-BUnlrfiS.js": {
144
144
  "type": "text/javascript; charset=utf-8",
145
- "etag": '"aeea7-4wGPgiGZUhpr0jD/D7mkeiq0940"',
146
- "mtime": "2026-07-07T01:08:49.706Z",
147
- "size": 716455,
148
- "path": "../public/assets/ProxyViewerContainer-tu_yG20v.js"
145
+ "etag": '"b10f6-9V5A+lyAHccOp3IC9oDV36uSVDA"',
146
+ "mtime": "2026-07-07T02:21:04.311Z",
147
+ "size": 725238,
148
+ "path": "../public/assets/ProxyViewerContainer-BUnlrfiS.js"
149
149
  }
150
150
  };
151
151
  function readAsset(id) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonyclaw/agent-inspector",
3
- "version": "3.0.2",
3
+ "version": "3.0.4",
4
4
  "type": "module",
5
5
  "description": "Agent observability and knowledge capture layer for AI coding tools.",
6
6
  "license": "MIT",
@@ -0,0 +1 @@
1
+ <svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Claude Code</title><path clip-rule="evenodd" d="M20.998 10.949H24v3.102h-3v3.028h-1.487V20H18v-2.921h-1.487V20H15v-2.921H9V20H7.488v-2.921H6V20H4.487v-2.921H3V14.05H0V10.95h3V5h17.998v5.949zM6 10.949h1.488V8.102H6v2.847zm10.51 0H18V8.102h-1.49v2.847z" fill="#D97757" fill-rule="evenodd"></path></svg>
@@ -0,0 +1 @@
1
+ <svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Codex</title><path d="M19.503 0H4.496A4.496 4.496 0 000 4.496v15.007A4.496 4.496 0 004.496 24h15.007A4.496 4.496 0 0024 19.503V4.496A4.496 4.496 0 0019.503 0z" fill="#fff"></path><path d="M9.064 3.344a4.578 4.578 0 012.285-.312c1 .115 1.891.54 2.673 1.275.01.01.024.017.037.021a.09.09 0 00.043 0 4.55 4.55 0 013.046.275l.047.022.116.057a4.581 4.581 0 012.188 2.399c.209.51.313 1.041.315 1.595a4.24 4.24 0 01-.134 1.223.123.123 0 00.03.115c.594.607.988 1.33 1.183 2.17.289 1.425-.007 2.71-.887 3.854l-.136.166a4.548 4.548 0 01-2.201 1.388.123.123 0 00-.081.076c-.191.551-.383 1.023-.74 1.494-.9 1.187-2.222 1.846-3.711 1.838-1.187-.006-2.239-.44-3.157-1.302a.107.107 0 00-.105-.024c-.388.125-.78.143-1.204.138a4.441 4.441 0 01-1.945-.466 4.544 4.544 0 01-1.61-1.335c-.152-.202-.303-.392-.414-.617a5.81 5.81 0 01-.37-.961 4.582 4.582 0 01-.014-2.298.124.124 0 00.006-.056.085.085 0 00-.027-.048 4.467 4.467 0 01-1.034-1.651 3.896 3.896 0 01-.251-1.192 5.189 5.189 0 01.141-1.6c.337-1.112.982-1.985 1.933-2.618.212-.141.413-.251.601-.33.215-.089.43-.164.646-.227a.098.098 0 00.065-.066 4.51 4.51 0 01.829-1.615 4.535 4.535 0 011.837-1.388zm3.482 10.565a.637.637 0 000 1.272h3.636a.637.637 0 100-1.272h-3.636zM8.462 9.23a.637.637 0 00-1.106.631l1.272 2.224-1.266 2.136a.636.636 0 101.095.649l1.454-2.455a.636.636 0 00.005-.64L8.462 9.23z" fill="url(#lobe-icons-codex-_R_0_)"></path><defs><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-codex-_R_0_" x1="12" x2="12" y1="3" y2="21"><stop stop-color="#B1A7FF"></stop><stop offset=".5" stop-color="#7A9DFF"></stop><stop offset="1" stop-color="#3941FF"></stop></linearGradient></defs></svg>
@@ -0,0 +1 @@
1
+ <svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>opencode</title><path d="M16 6H8v12h8V6zm4 16H4V2h16v20z"></path></svg>
@@ -0,0 +1 @@
1
+ <svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>XiaomiMiMo</title><path d="M.958 15.936a.459.459 0 01.459.44v2.729a.46.46 0 01-.918 0v-2.729a.459.459 0 01.459-.44zm4.814-2.035a.46.46 0 01.553.45v4.754a.458.458 0 11-.918 0V15.48L3.74 17.202a.462.462 0 01-.655.016.462.462 0 01-.065-.082L.628 14.67a.459.459 0 01.658-.637l2.124 2.187 2.127-2.188a.46.46 0 01.235-.13zm2.068.004a.46.46 0 01.458.445v4.755a.46.46 0 01-.458.458.459.459 0 01-.458-.458V14.35a.459.459 0 01.458-.445zm1.973 2.014a.46.46 0 01.46.457v2.729a.46.46 0 01-.784.324.46.46 0 01-.134-.324v-2.729a.46.46 0 01.458-.458zm.002-2.045a.458.458 0 01.328.157l2.127 2.19 2.125-2.19a.459.459 0 01.784.318v4.756a.46.46 0 01-.455.458.46.46 0 01-.458-.458V15.48l-1.667 1.723a.46.46 0 01-.65.008l-.005-.005c0-.002-.002-.002-.004-.003l-2.455-2.534a.46.46 0 01-.008-.667.461.461 0 01.338-.128zm6.797 1.206a.46.46 0 01.53.651A1.966 1.966 0 0019.81 18.4a.462.462 0 01.623.18.46.46 0 01-.181.624 2.863 2.863 0 01-1.38.353l-.142-.004a2.88 2.88 0 01-2.393-4.263.461.461 0 01.274-.21zm.864-.931a2.884 2.884 0 013.915 3.914.46.46 0 01-.402.24l-.057-.004a.458.458 0 01-.164-.055.46.46 0 01-.182-.622 1.967 1.967 0 00-2.669-2.67.459.459 0 11-.441-.803zM9.59 6.368c1.481 0 1.696 1.202 1.696 1.654v2.648h-.917v-.432c-.26.346-.792.535-1.36.535-.133 0-1.289-.03-1.384-1.136-.082-.932.675-1.61 2.053-1.61h.691c0-.563-.367-.886-.983-.886-.44.013-.864.174-1.2.458l-.36-.664c.484-.379 1.012-.567 1.764-.567zm4.427.1c1.263 0 2.082.97 2.083 2.15 0 1.181-.824 2.154-2.083 2.154-1.26 0-2.084-.972-2.084-2.152 0-1.18.82-2.153 2.084-2.153zm6.801.015c.68 0 1.202.465 1.197 1.548v2.642H21.1V8.29c0-.312-.002-.98-.63-.98s-.628.667-.628.838v2.524h-.89V8.148c0-.17-.001-.838-.63-.838-.628 0-.628.668-.628.98v2.383h-.917v-4.03h.917V7a1.22 1.22 0 01.947-.516c.398 0 .76.193.982.686a1.321 1.321 0 011.195-.686zm-18.093.872l1.457-1.772H5.32L3.311 8.07l2.14 2.602H4.24L2.725 8.796 1.21 10.672H0L2.138 8.07.13 5.583h1.138l1.458 1.772zm4.149 3.317h-.916V6.644h.916v4.028zm16.99 0h-.916V6.644h.916v4.028zM9.925 8.71c-1.055 0-1.359.412-1.326.742.032.329.324.537.757.537a1.013 1.013 0 001.014-.968l.002-.31h-.447zM14.018 7.3c-.663 0-1.184.487-1.184 1.32 0 .832.52 1.32 1.184 1.32.662 0 1.182-.49 1.182-1.32 0-.832-.52-1.32-1.182-1.32zM6.417 5.001a.568.568 0 01.587.582.588.588 0 01-1.175 0A.57.57 0 016.417 5zm16.991 0a.57.57 0 01.592.582.588.588 0 01-1.174 0 .57.57 0 01.357-.542.572.572 0 01.225-.04z"></path></svg>
@@ -1,4 +1,4 @@
1
- <svg fill="currentColor" fillRule="evenodd" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
2
- <title>OpenCode</title>
3
- <path d="M16 6H8v12h8V6zm4 16H4V2h16v20z"/>
4
- </svg>
1
+ <svg fill="currentColor" fillRule="evenodd" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
2
+ <title>OpenCode</title>
3
+ <path d="M16 6H8v12h8V6zm4 16H4V2h16v20z"/>
4
+ </svg>
@@ -27,6 +27,7 @@ import {
27
27
  Gauge,
28
28
  Flag,
29
29
  Plus,
30
+ RefreshCw,
30
31
  Search,
31
32
  Siren,
32
33
  Timer,
@@ -1661,6 +1662,8 @@ export type ProxyViewerProps = {
1661
1662
  onSessionChange: (session: string) => void;
1662
1663
  onModelChange: (model: string) => void;
1663
1664
  onClearAll: () => void;
1665
+ /** Reload the selected/pinned session from stored logs without requiring a page refresh. */
1666
+ onReloadSession?: () => void;
1664
1667
  /** Clear only the logs whose ids are passed. Called by the per-group
1665
1668
  * Clear button on each conversation header. */
1666
1669
  onClearGroup: (ids: number[]) => void;
@@ -1698,6 +1701,7 @@ export function ProxyViewer({
1698
1701
  onSessionChange,
1699
1702
  onModelChange,
1700
1703
  onClearAll,
1704
+ onReloadSession,
1701
1705
  onClearGroup,
1702
1706
  onNotify,
1703
1707
  onImportLogs,
@@ -1835,6 +1839,8 @@ export function ProxyViewer({
1835
1839
  const comparisonPredecessors = useMemo(() => buildValidPredecessors(groups), [groups]);
1836
1840
  const exportActionVisibility = getExportActionVisibility(captureMode, logs.length);
1837
1841
  const isPinnedSessionPage = pinnedSessionId !== undefined;
1842
+ const canClearCurrentView = logs.length > 0;
1843
+ const reloadSessionLabel = logs.length === 0 ? "Load" : "Reload";
1838
1844
  const sessionInputValue = selectedSession === "__all__" ? "" : selectedSession;
1839
1845
  const sessionSelectValue =
1840
1846
  selectedSession === "__all__" || sessions.includes(selectedSession)
@@ -1881,14 +1887,15 @@ export function ProxyViewer({
1881
1887
 
1882
1888
  return (
1883
1889
  <div className="bg-background min-h-screen w-full text-foreground">
1884
- <div className="grid min-h-screen w-full grid-cols-1 lg:grid-cols-[340px_minmax(0,1fr)] xl:grid-cols-[360px_minmax(0,1fr)]">
1885
- <aside className="bg-background/95 border-b border-white/[0.045] lg:sticky lg:top-0 lg:h-screen lg:overflow-y-auto lg:border-b-0 lg:border-r lg:border-white/[0.055]">
1890
+ <div className="grid min-h-screen w-full grid-cols-1 lg:grid-cols-[minmax(0,1fr)_340px] xl:grid-cols-[minmax(0,1fr)_360px]">
1891
+ <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]">
1886
1892
  <div className="space-y-4 p-4">
1887
1893
  <BrandHeader compact={true} crabEntrancePhase={crabEntrancePhase} />
1888
1894
 
1889
1895
  <SidebarPanel label="Session">
1890
- <div className="grid grid-cols-3 gap-2">
1896
+ <div className="grid grid-cols-2 gap-2">
1891
1897
  <SidebarMetric label="Requests" value={logs.length} />
1898
+ <SidebarMetric label="Sessions" value={sessions.length} />
1892
1899
  <SidebarMetric
1893
1900
  label="Input"
1894
1901
  value={formatTokens(hasSessionContext ? sessionContextTotalIn : totalIn)}
@@ -1898,6 +1905,33 @@ export function ProxyViewer({
1898
1905
  value={formatTokens(hasSessionContext ? sessionContextTotalOut : totalOut)}
1899
1906
  />
1900
1907
  </div>
1908
+ <div className="mt-2 grid grid-cols-2 gap-2">
1909
+ {onReloadSession !== undefined && (
1910
+ <button
1911
+ type="button"
1912
+ onClick={onReloadSession}
1913
+ disabled={isLoading}
1914
+ className="bg-white/[0.035] hover:bg-white/[0.065] inline-flex h-8 min-w-0 items-center justify-center gap-1.5 rounded-md px-2 text-xs text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50"
1915
+ title="Load stored logs for this session"
1916
+ >
1917
+ <RefreshCw className={cn("size-3.5", isLoading && "animate-spin")} />
1918
+ <span>{reloadSessionLabel}</span>
1919
+ </button>
1920
+ )}
1921
+ <button
1922
+ type="button"
1923
+ onClick={onClearAll}
1924
+ disabled={!canClearCurrentView}
1925
+ className={cn(
1926
+ "bg-white/[0.035] hover:bg-white/[0.065] inline-flex h-8 min-w-0 items-center justify-center gap-1.5 rounded-md px-2 text-xs text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",
1927
+ onReloadSession === undefined && "col-span-2",
1928
+ )}
1929
+ title="Clear the current view. Stored logs remain reloadable."
1930
+ >
1931
+ <Trash2 className="size-3.5" />
1932
+ <span>Clear view</span>
1933
+ </button>
1934
+ </div>
1901
1935
  </SidebarPanel>
1902
1936
 
1903
1937
  <SidebarPanel label="Workspace">
@@ -1997,7 +2031,7 @@ export function ProxyViewer({
1997
2031
  </div>
1998
2032
  </aside>
1999
2033
 
2000
- <main className="min-w-0">
2034
+ <main className="order-2 min-w-0 lg:order-1">
2001
2035
  <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">
2002
2036
  <div className="flex flex-wrap items-center gap-2">
2003
2037
  <div className="min-w-[180px] flex-1">
@@ -2073,14 +2107,27 @@ export function ProxyViewer({
2073
2107
  )}
2074
2108
  </button>
2075
2109
  )}
2110
+ {onReloadSession !== undefined && (
2111
+ <button
2112
+ type="button"
2113
+ onClick={onReloadSession}
2114
+ disabled={isLoading}
2115
+ className="bg-white/[0.035] hover:bg-white/[0.065] inline-flex h-8 items-center gap-1.5 rounded-md px-3 text-xs text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50"
2116
+ title="Reload this session from stored logs"
2117
+ >
2118
+ <RefreshCw className={cn("size-3.5", isLoading && "animate-spin")} />
2119
+ <span>{reloadSessionLabel}</span>
2120
+ </button>
2121
+ )}
2076
2122
  <button
2077
2123
  type="button"
2078
2124
  onClick={onClearAll}
2079
- className="bg-white/[0.035] hover:bg-white/[0.065] inline-flex h-8 items-center gap-1.5 rounded-md px-3 text-xs text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors hover:text-foreground"
2080
- title="Clear all logs"
2125
+ disabled={!canClearCurrentView}
2126
+ className="bg-white/[0.035] hover:bg-white/[0.065] inline-flex h-8 items-center gap-1.5 rounded-md px-3 text-xs text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50"
2127
+ title="Clear the current view. Stored logs remain reloadable."
2081
2128
  >
2082
2129
  <Trash2 className="size-3.5" />
2083
- <span>Clear</span>
2130
+ <span>Clear view</span>
2084
2131
  </button>
2085
2132
  </div>
2086
2133
  <LogPaginationBar logs={logs} pagination={pagination} embedded={true} />
@@ -2108,7 +2155,7 @@ export function ProxyViewer({
2108
2155
  <div className="py-16 text-center text-muted-foreground">
2109
2156
  <div className="bg-white/[0.035] shadow-[inset_0_1px_0_rgba(255,255,255,0.045),0_18px_52px_rgba(0,0,0,0.18)] mx-auto max-w-xl space-y-4 rounded-[8px] px-4 py-8">
2110
2157
  <p className="text-sm font-medium">
2111
- {isLoading ? "Loading session data..." : "Session not found"}
2158
+ {isLoading ? "Loading session data..." : "No logs loaded for this session"}
2112
2159
  </p>
2113
2160
  <p className="inline-block max-w-full rounded bg-muted px-3 py-1 font-mono text-xs break-all">
2114
2161
  {truncateSessionId(selectedSession)}
@@ -2119,29 +2166,49 @@ export function ProxyViewer({
2119
2166
  </div>
2120
2167
  )}
2121
2168
  {!isLoading && (
2122
- <p className="text-xs">
2123
- This session may have been cleared or never existed.{" "}
2124
- {hideSessionFilter ? (
2125
- <a href="/" className="underline transition-colors hover:text-foreground">
2126
- Back to all sessions
2127
- </a>
2128
- ) : (
2129
- <button
2130
- type="button"
2131
- onClick={() => onSessionChange("__all__")}
2132
- className="underline transition-colors hover:text-foreground"
2133
- >
2134
- Show all sessions
2135
- </button>
2136
- )}
2137
- </p>
2169
+ <div className="flex flex-col items-center gap-3 text-xs">
2170
+ <p>Stored logs may still be available.</p>
2171
+ <div className="flex flex-wrap items-center justify-center gap-2">
2172
+ {onReloadSession !== undefined && (
2173
+ <button
2174
+ type="button"
2175
+ onClick={onReloadSession}
2176
+ className="bg-white/[0.045] hover:bg-white/[0.075] inline-flex h-8 items-center gap-1.5 rounded-md px-3 text-xs text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors hover:text-foreground"
2177
+ >
2178
+ <RefreshCw className="size-3.5" />
2179
+ <span>Load session</span>
2180
+ </button>
2181
+ )}
2182
+ {hideSessionFilter ? (
2183
+ <a
2184
+ href="/"
2185
+ className="inline-flex h-8 items-center rounded-md px-3 text-xs text-muted-foreground underline transition-colors hover:text-foreground"
2186
+ >
2187
+ Back to all sessions
2188
+ </a>
2189
+ ) : (
2190
+ <button
2191
+ type="button"
2192
+ onClick={() => onSessionChange("__all__")}
2193
+ className="inline-flex h-8 items-center rounded-md px-3 text-xs text-muted-foreground underline transition-colors hover:text-foreground"
2194
+ >
2195
+ Show all sessions
2196
+ </button>
2197
+ )}
2198
+ </div>
2199
+ </div>
2138
2200
  )}
2139
2201
  </div>
2140
2202
  </div>
2141
2203
  ) : (
2142
2204
  <div className="py-16 text-center text-muted-foreground">
2143
2205
  <div className="bg-white/[0.035] shadow-[inset_0_1px_0_rgba(255,255,255,0.045),0_18px_52px_rgba(0,0,0,0.18)] mx-auto max-w-2xl space-y-4 rounded-[8px] px-4 py-8">
2144
- <p className="text-sm">No requests captured yet.</p>
2206
+ <p className="text-sm">No logs loaded in the current view.</p>
2207
+ {sessions.length > 0 && (
2208
+ <p className="mx-auto max-w-xl text-xs leading-relaxed text-muted-foreground">
2209
+ Pick a session from the filter panel to load stored logs on demand.
2210
+ </p>
2211
+ )}
2145
2212
  <div className="flex flex-col items-center gap-2">
2146
2213
  <CopyableCommand command="ANTHROPIC_BASE_URL=http://localhost:9527/proxy <your-tool>" />
2147
2214
  <CopyableCommand command="OPENAI_BASE_URL=http://localhost:9527/proxy <your-tool>" />