@tonyclaw/agent-inspector 2.0.42 → 2.0.43
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-Cfqxlo-U.js → CompareDrawer-CxM1gCfL.js} +1 -1
- package/.output/public/assets/{ProxyViewerContainer-CE9pAX4c.js → ProxyViewerContainer-TtRG-0E7.js} +37 -37
- package/.output/public/assets/{ReplayDialog-daRidZo_.js → ReplayDialog-UseUkucS.js} +1 -1
- package/.output/public/assets/{RequestAnatomy-CJ7EPQGQ.js → RequestAnatomy-aPxgEJ2L.js} +1 -1
- package/.output/public/assets/{ResponseView-xBmr54hB.js → ResponseView-DA-F4F97.js} +1 -1
- package/.output/public/assets/{StreamingChunkSequence-nK-0LpbM.js → StreamingChunkSequence-JSQEPeNS.js} +1 -1
- package/.output/public/assets/_sessionId-BEXuCWq5.js +1 -0
- package/.output/public/assets/index-Bhsa_2xX.js +1 -0
- package/.output/public/assets/index-DOWlRJ0W.css +1 -0
- package/.output/public/assets/{main-DOy_Q96H.js → main-BpGVJcpB.js} +2 -2
- package/.output/server/{_sessionId-DtYRZHlM.mjs → _sessionId-DGn-TENM.mjs} +2 -2
- package/.output/server/_ssr/{CompareDrawer-fy1ARwtx.mjs → CompareDrawer-CFElCSYY.mjs} +2 -2
- package/.output/server/_ssr/{ProxyViewerContainer-9GJtCWCq.mjs → ProxyViewerContainer-B7SR9mrD.mjs} +258 -76
- package/.output/server/_ssr/{ReplayDialog-BrS7syOE.mjs → ReplayDialog-DfKapj0k.mjs} +3 -3
- package/.output/server/_ssr/{RequestAnatomy-BtWt1cWY.mjs → RequestAnatomy-CUxTCg31.mjs} +2 -2
- package/.output/server/_ssr/{ResponseView-CkKGYE6m.mjs → ResponseView-BXY0w197.mjs} +2 -2
- package/.output/server/_ssr/{StreamingChunkSequence-C7rB3osr.mjs → StreamingChunkSequence-CzMnES9H.mjs} +2 -2
- package/.output/server/_ssr/{index-D24WforP.mjs → index-CVlT-REW.mjs} +2 -2
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{router-CVqVjBzJ.mjs → router-B2d1LUx6.mjs} +4 -4
- package/.output/server/{_tanstack-start-manifest_v-DSikvwru.mjs → _tanstack-start-manifest_v-Drpi28BM.mjs} +1 -1
- package/.output/server/index.mjs +61 -61
- package/package.json +1 -1
- package/src/components/ProxyViewer.tsx +156 -17
- package/src/components/ProxyViewerContainer.tsx +66 -4
- package/src/components/groups/GroupsDialog.tsx +11 -10
- package/src/components/proxy-viewer/LogEntry.tsx +107 -56
- package/src/components/ui/dialog.tsx +1 -1
- package/.output/public/assets/_sessionId-CbWEG5ej.js +0 -1
- package/.output/public/assets/index-BfGJEb-2.css +0 -1
- package/.output/public/assets/index-D1MkoT4l.js +0 -1
|
@@ -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 JsonViewer, F as safeJsonValue } from "./ProxyViewerContainer-
|
|
3
|
-
import "./router-
|
|
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 JsonViewer, F as safeJsonValue } from "./ProxyViewerContainer-B7SR9mrD.mjs";
|
|
3
|
+
import "./router-B2d1LUx6.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import { Z as Zap, q as TriangleAlert, ah as CircleStop, B as Brain, c as ChevronDown, l as ChevronRight, f 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 JsonViewer } from "./ProxyViewerContainer-
|
|
3
|
-
import "./router-
|
|
2
|
+
import { m as TooltipProvider, n as Tooltip, o as TooltipTrigger, B as Badge, p as TooltipContent, E as JsonViewer } from "./ProxyViewerContainer-B7SR9mrD.mjs";
|
|
3
|
+
import "./router-B2d1LUx6.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import { c as ChevronDown, l as ChevronRight, a as LoaderCircle } from "../_libs/lucide-react.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { P as ProxyViewerContainer } from "./ProxyViewerContainer-
|
|
1
|
+
import { P as ProxyViewerContainer } from "./ProxyViewerContainer-B7SR9mrD.mjs";
|
|
2
2
|
import "../_libs/react.mjs";
|
|
3
|
-
import "./router-
|
|
3
|
+
import "./router-B2d1LUx6.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-
|
|
201
|
+
const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-Drpi28BM.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-
|
|
779
|
+
const routerEntry = await import("./router-B2d1LUx6.mjs").then((n) => n.w);
|
|
780
780
|
const startEntry = await import("./start-HYkvq4Ni.mjs");
|
|
781
781
|
return { startEntry, routerEntry };
|
|
782
782
|
}
|
|
@@ -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%2064%2064'%20role='img'%20aria-label='Agent%20Inspector'%3e%3crect%20width='64'%20height='64'%20rx='14'%20fill='%23111827'%20/%3e%3cg%20fill='none'%20stroke='%23f59e0b'%20stroke-width='4.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3e%3cpath%20fill='%23f59e0b'%20d='M15%2036c0-11%207-18%2017-18s17%207%2017%2018c0%208-7%2013-17%2013s-17-5-17-13z'%20/%3e%3cpath%20d='M16%2031c-6-5-12-3-12%204%200%205%206%206%2011%202'%20/%3e%3cpath%20d='M48%2031c6-5%2012-3%2012%204%200%205-6%206-11%202'%20/%3e%3cpath%20d='M27%2019l-3-7'%20/%3e%3cpath%20d='M37%2019l3-7'%20/%3e%3cpath%20d='M19%2045l-6%209'%20/%3e%3cpath%20d='M27%2048l-3%209'%20/%3e%3cpath%20d='M37%2048l3%209'%20/%3e%3cpath%20d='M45%2045l6%209'%20/%3e%3c/g%3e%3cpath%20d='M14%2047l9-8%208%209c-5%203.5-12%203-17-1z'%20fill='%232f6b3f'%20opacity='.95'%20/%3e%3cpath%20d='M18%2046l5-5%205%206c-3%201.6-7%201.4-10-1z'%20fill='%236fb36f'%20opacity='.95'%20/%3e%3cpath%20d='M23%2041v10'%20fill='none'%20stroke='%23d6b45f'%20stroke-width='1.6'%20stroke-linecap='round'%20/%3e%3ccircle%20cx='31'%20cy='48'%20r='1.8'%20fill='%23c2412d'%20/%3e%3cpath%20d='M24%2044l13-11%2014%2013c-8%205.8-18%205.3-27-2z'%20fill='%232f6b3f'%20opacity='.97'%20/%3e%3cpath%20d='M30%2043l7-7%209%209c-5%202.7-11%202.5-16-2z'%20fill='%236fb36f'%20opacity='.95'%20/%3e%3cpath%20d='M37%2036v14'%20fill='none'%20stroke='%23d6b45f'%20stroke-width='2'%20stroke-linecap='round'%20/%3e%3cpath%20d='M30%2043c5-2%2011-1.5%2016%202'%20fill='none'%20stroke='%239fca78'%20stroke-width='1.8'%20stroke-linecap='round'%20/%3e%3ccircle%20cx='51'%20cy='46'%20r='2'%20fill='%23c2412d'%20/%3e%3cpath%20d='M40%2050l8-8%207%208c-4.2%203.2-10%203-15%200z'%20fill='%232f6b3f'%20opacity='.95'%20/%3e%3cpath%20d='M43%2049l5-5%204.5%205.5c-3%201.5-6%201.2-9.5-.5z'%20fill='%236fb36f'%20opacity='.95'%20/%3e%3cpath%20d='M48%2044v9'%20fill='none'%20stroke='%23d6b45f'%20stroke-width='1.5'%20stroke-linecap='round'%20/%3e%3ccircle%20cx='55'%20cy='50'%20r='1.7'%20fill='%23c2412d'%20/%3e%3ccircle%20cx='24'%20cy='11'%20r='3.2'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='40'%20cy='11'%20r='3.2'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='25'%20cy='34'%20r='2.1'%20fill='%23111827'%20/%3e%3ccircle%20cx='39'%20cy='34'%20r='2.1'%20fill='%23111827'%20/%3e%3c/svg%3e";
|
|
68
|
-
const appCss = "/assets/index-
|
|
68
|
+
const appCss = "/assets/index-DOWlRJ0W.css";
|
|
69
69
|
const Route$z = 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-
|
|
111
|
+
const $$splitComponentImporter$1 = () => import("./index-CVlT-REW.mjs");
|
|
112
112
|
const Route$y = 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-
|
|
154
|
+
const $$splitComponentImporter = () => import("../_sessionId-DGn-TENM.mjs");
|
|
155
155
|
const Route$x = createFileRoute("/session/$sessionId")({
|
|
156
156
|
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
157
157
|
parseParams: (params) => ({
|
|
@@ -6921,7 +6921,7 @@ const Route$s = createFileRoute("/api/models")({
|
|
|
6921
6921
|
}
|
|
6922
6922
|
}
|
|
6923
6923
|
});
|
|
6924
|
-
const version = "2.0.
|
|
6924
|
+
const version = "2.0.43";
|
|
6925
6925
|
const packageJson = {
|
|
6926
6926
|
version
|
|
6927
6927
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/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-
|
|
1
|
+
const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/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-BpGVJcpB.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-Bhsa_2xX.js", "/assets/ProxyViewerContainer-TtRG-0E7.js"] }, "/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/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-BEXuCWq5.js", "/assets/ProxyViewerContainer-TtRG-0E7.js"] }, "/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/chunks", "/api/logs/$id/replay"] }, "/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/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-BpGVJcpB.js" });
|
|
2
2
|
export {
|
|
3
3
|
tsrStartManifest
|
|
4
4
|
};
|
package/.output/server/index.mjs
CHANGED
|
@@ -38,100 +38,100 @@ const assets = {
|
|
|
38
38
|
"/assets/alibaba-TTwafVwX.svg": {
|
|
39
39
|
"type": "image/svg+xml",
|
|
40
40
|
"etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
|
|
41
|
-
"mtime": "2026-07-
|
|
41
|
+
"mtime": "2026-07-03T02:24:32.082Z",
|
|
42
42
|
"size": 5915,
|
|
43
43
|
"path": "../public/assets/alibaba-TTwafVwX.svg"
|
|
44
44
|
},
|
|
45
|
-
"/assets/
|
|
45
|
+
"/assets/CompareDrawer-CxM1gCfL.js": {
|
|
46
46
|
"type": "text/javascript; charset=utf-8",
|
|
47
|
-
"etag": '"
|
|
48
|
-
"mtime": "2026-07-
|
|
49
|
-
"size": 116,
|
|
50
|
-
"path": "../public/assets/index-D1MkoT4l.js"
|
|
51
|
-
},
|
|
52
|
-
"/assets/minimax-BPMzvuL-.jpeg": {
|
|
53
|
-
"type": "image/jpeg",
|
|
54
|
-
"etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
|
|
55
|
-
"mtime": "2026-07-03T01:44:09.155Z",
|
|
56
|
-
"size": 6918,
|
|
57
|
-
"path": "../public/assets/minimax-BPMzvuL-.jpeg"
|
|
58
|
-
},
|
|
59
|
-
"/assets/index-BfGJEb-2.css": {
|
|
60
|
-
"type": "text/css; charset=utf-8",
|
|
61
|
-
"etag": '"1acc9-JrjZs7fIRGuBr66cqP9miLHcLKk"',
|
|
62
|
-
"mtime": "2026-07-03T01:44:09.155Z",
|
|
63
|
-
"size": 109769,
|
|
64
|
-
"path": "../public/assets/index-BfGJEb-2.css"
|
|
65
|
-
},
|
|
66
|
-
"/assets/CompareDrawer-Cfqxlo-U.js": {
|
|
67
|
-
"type": "text/javascript; charset=utf-8",
|
|
68
|
-
"etag": '"49e8-4/OM/oQ2JC3boP6H31ljkTMqaic"',
|
|
69
|
-
"mtime": "2026-07-03T01:44:09.157Z",
|
|
47
|
+
"etag": '"49e8-MWCeQ8XhCRwryE9ztGUYYFSWZMU"',
|
|
48
|
+
"mtime": "2026-07-03T02:24:32.084Z",
|
|
70
49
|
"size": 18920,
|
|
71
|
-
"path": "../public/assets/CompareDrawer-
|
|
50
|
+
"path": "../public/assets/CompareDrawer-CxM1gCfL.js"
|
|
72
51
|
},
|
|
73
|
-
"/assets/
|
|
52
|
+
"/assets/index-Bhsa_2xX.js": {
|
|
74
53
|
"type": "text/javascript; charset=utf-8",
|
|
75
|
-
"etag": '"
|
|
76
|
-
"mtime": "2026-07-
|
|
77
|
-
"size":
|
|
78
|
-
"path": "../public/assets/
|
|
54
|
+
"etag": '"74-FekOZ7LhkvEikN+5Vtic9whLu2c"',
|
|
55
|
+
"mtime": "2026-07-03T02:24:32.084Z",
|
|
56
|
+
"size": 116,
|
|
57
|
+
"path": "../public/assets/index-Bhsa_2xX.js"
|
|
79
58
|
},
|
|
80
|
-
"/assets/
|
|
81
|
-
"type": "text/
|
|
82
|
-
"etag": '"
|
|
83
|
-
"mtime": "2026-07-
|
|
84
|
-
"size":
|
|
85
|
-
"path": "../public/assets/
|
|
59
|
+
"/assets/index-DOWlRJ0W.css": {
|
|
60
|
+
"type": "text/css; charset=utf-8",
|
|
61
|
+
"etag": '"1ad8b-QtGZOCeSfvBzb+puIlHYbHPVBvo"',
|
|
62
|
+
"mtime": "2026-07-03T02:24:32.084Z",
|
|
63
|
+
"size": 109963,
|
|
64
|
+
"path": "../public/assets/index-DOWlRJ0W.css"
|
|
86
65
|
},
|
|
87
|
-
"/assets/
|
|
66
|
+
"/assets/ReplayDialog-UseUkucS.js": {
|
|
88
67
|
"type": "text/javascript; charset=utf-8",
|
|
89
|
-
"etag": '"
|
|
90
|
-
"mtime": "2026-07-
|
|
91
|
-
"size":
|
|
92
|
-
"path": "../public/assets/
|
|
68
|
+
"etag": '"318c-kKQJY2fzKwzsc7gAjVFVbioolPs"',
|
|
69
|
+
"mtime": "2026-07-03T02:24:32.084Z",
|
|
70
|
+
"size": 12684,
|
|
71
|
+
"path": "../public/assets/ReplayDialog-UseUkucS.js"
|
|
93
72
|
},
|
|
94
|
-
"/assets/RequestAnatomy-
|
|
73
|
+
"/assets/RequestAnatomy-aPxgEJ2L.js": {
|
|
95
74
|
"type": "text/javascript; charset=utf-8",
|
|
96
|
-
"etag": '"4485-
|
|
97
|
-
"mtime": "2026-07-
|
|
75
|
+
"etag": '"4485-mO43pmS8TLLXBnkqeHw5yJys4xE"',
|
|
76
|
+
"mtime": "2026-07-03T02:24:32.084Z",
|
|
98
77
|
"size": 17541,
|
|
99
|
-
"path": "../public/assets/RequestAnatomy-
|
|
78
|
+
"path": "../public/assets/RequestAnatomy-aPxgEJ2L.js"
|
|
100
79
|
},
|
|
101
|
-
"/assets/ResponseView-
|
|
80
|
+
"/assets/ResponseView-DA-F4F97.js": {
|
|
102
81
|
"type": "text/javascript; charset=utf-8",
|
|
103
|
-
"etag": '"30d1-
|
|
104
|
-
"mtime": "2026-07-
|
|
82
|
+
"etag": '"30d1-5KGpGiZC9fD4bpancX3Blld/U6c"',
|
|
83
|
+
"mtime": "2026-07-03T02:24:32.084Z",
|
|
105
84
|
"size": 12497,
|
|
106
|
-
"path": "../public/assets/ResponseView-
|
|
85
|
+
"path": "../public/assets/ResponseView-DA-F4F97.js"
|
|
86
|
+
},
|
|
87
|
+
"/assets/minimax-BPMzvuL-.jpeg": {
|
|
88
|
+
"type": "image/jpeg",
|
|
89
|
+
"etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
|
|
90
|
+
"mtime": "2026-07-03T02:24:32.082Z",
|
|
91
|
+
"size": 6918,
|
|
92
|
+
"path": "../public/assets/minimax-BPMzvuL-.jpeg"
|
|
93
|
+
},
|
|
94
|
+
"/assets/StreamingChunkSequence-JSQEPeNS.js": {
|
|
95
|
+
"type": "text/javascript; charset=utf-8",
|
|
96
|
+
"etag": '"d5c-ZXGtNk6QwMMsBCwiFU85hEx0MWk"',
|
|
97
|
+
"mtime": "2026-07-03T02:24:32.084Z",
|
|
98
|
+
"size": 3420,
|
|
99
|
+
"path": "../public/assets/StreamingChunkSequence-JSQEPeNS.js"
|
|
107
100
|
},
|
|
108
101
|
"/assets/zhipuai-BPNAnxo-.svg": {
|
|
109
102
|
"type": "image/svg+xml",
|
|
110
103
|
"etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
|
|
111
|
-
"mtime": "2026-07-
|
|
104
|
+
"mtime": "2026-07-03T02:24:32.082Z",
|
|
112
105
|
"size": 11256,
|
|
113
106
|
"path": "../public/assets/zhipuai-BPNAnxo-.svg"
|
|
114
107
|
},
|
|
115
|
-
"/assets/_sessionId-
|
|
108
|
+
"/assets/_sessionId-BEXuCWq5.js": {
|
|
116
109
|
"type": "text/javascript; charset=utf-8",
|
|
117
|
-
"etag": '"d2-
|
|
118
|
-
"mtime": "2026-07-
|
|
110
|
+
"etag": '"d2-exeT3w9Bi3c+xV7elTFmaQnyqhI"',
|
|
111
|
+
"mtime": "2026-07-03T02:24:32.084Z",
|
|
119
112
|
"size": 210,
|
|
120
|
-
"path": "../public/assets/_sessionId-
|
|
113
|
+
"path": "../public/assets/_sessionId-BEXuCWq5.js"
|
|
114
|
+
},
|
|
115
|
+
"/assets/main-BpGVJcpB.js": {
|
|
116
|
+
"type": "text/javascript; charset=utf-8",
|
|
117
|
+
"etag": '"517d9-g8ehe8xaUgKICmE82dajQ3Rg1Aw"',
|
|
118
|
+
"mtime": "2026-07-03T02:24:32.084Z",
|
|
119
|
+
"size": 333785,
|
|
120
|
+
"path": "../public/assets/main-BpGVJcpB.js"
|
|
121
121
|
},
|
|
122
122
|
"/assets/qwen-CONDcHqt.png": {
|
|
123
123
|
"type": "image/png",
|
|
124
124
|
"etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
|
|
125
|
-
"mtime": "2026-07-
|
|
125
|
+
"mtime": "2026-07-03T02:24:32.084Z",
|
|
126
126
|
"size": 357059,
|
|
127
127
|
"path": "../public/assets/qwen-CONDcHqt.png"
|
|
128
128
|
},
|
|
129
|
-
"/assets/ProxyViewerContainer-
|
|
129
|
+
"/assets/ProxyViewerContainer-TtRG-0E7.js": {
|
|
130
130
|
"type": "text/javascript; charset=utf-8",
|
|
131
|
-
"etag": '"
|
|
132
|
-
"mtime": "2026-07-
|
|
133
|
-
"size":
|
|
134
|
-
"path": "../public/assets/ProxyViewerContainer-
|
|
131
|
+
"etag": '"b7ea9-7bsvy+ETcxfBpFGaacydCBqQiqA"',
|
|
132
|
+
"mtime": "2026-07-03T02:24:32.084Z",
|
|
133
|
+
"size": 753321,
|
|
134
|
+
"path": "../public/assets/ProxyViewerContainer-TtRG-0E7.js"
|
|
135
135
|
}
|
|
136
136
|
};
|
|
137
137
|
function readAsset(id) {
|
package/package.json
CHANGED
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
import type { CapturedLog } from "../contracts";
|
|
15
15
|
import { exportLogsAsZip, type ExportMode } from "../lib/export-logs";
|
|
16
16
|
import { copyTextToClipboard } from "../lib/clipboard";
|
|
17
|
+
import type { InspectorGroupEvidence, InspectorGroupMember } from "../lib/groupContract";
|
|
17
18
|
import type { CaptureMode, TimeDisplayFormat } from "../lib/runtimeConfig";
|
|
18
19
|
import { formatTimestampRange } from "../lib/timeDisplay";
|
|
19
20
|
import { cn, formatContextWindowTokens, formatTokens } from "../lib/utils";
|
|
@@ -86,6 +87,17 @@ export type SessionContextScope = {
|
|
|
86
87
|
showBackLink: boolean;
|
|
87
88
|
};
|
|
88
89
|
|
|
90
|
+
export type SessionMembershipEvidence = {
|
|
91
|
+
groupId: string;
|
|
92
|
+
groupTitle: string;
|
|
93
|
+
groupKind: string;
|
|
94
|
+
groupStatus: string;
|
|
95
|
+
groupTask: string | null;
|
|
96
|
+
groupProject: string | null;
|
|
97
|
+
groupEvidence: InspectorGroupEvidence | null;
|
|
98
|
+
member: InspectorGroupMember;
|
|
99
|
+
};
|
|
100
|
+
|
|
89
101
|
function formatTimeRange(logs: CapturedLog[], timeDisplayFormat: TimeDisplayFormat): string | null {
|
|
90
102
|
const first = logs[0];
|
|
91
103
|
const last = logs[logs.length - 1];
|
|
@@ -194,6 +206,114 @@ function formatContextWindow(summary: SessionModelContextSummary): string {
|
|
|
194
206
|
return `Context window ${formatContextWindowTokens(tokens)}`;
|
|
195
207
|
}
|
|
196
208
|
|
|
209
|
+
const MEMBER_METADATA_KEYS: string[] = [
|
|
210
|
+
"score",
|
|
211
|
+
"decision",
|
|
212
|
+
"final_status",
|
|
213
|
+
"validation_pass_ratio",
|
|
214
|
+
"semantic_memory_score",
|
|
215
|
+
"opencode_exit",
|
|
216
|
+
"actual_model",
|
|
217
|
+
"run_dir",
|
|
218
|
+
"workspace",
|
|
219
|
+
"project_dir",
|
|
220
|
+
"work_dir",
|
|
221
|
+
];
|
|
222
|
+
|
|
223
|
+
function formatMetadataValue(value: InspectorGroupMember["metadata"][string]): string | null {
|
|
224
|
+
if (typeof value === "string") return value.length > 0 ? value : null;
|
|
225
|
+
if (typeof value === "number" || typeof value === "boolean") return String(value);
|
|
226
|
+
if (value === null) return null;
|
|
227
|
+
return JSON.stringify(value);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function getMemberMetadataRows(member: InspectorGroupMember): { key: string; value: string }[] {
|
|
231
|
+
const rows: { key: string; value: string }[] = [];
|
|
232
|
+
for (const key of MEMBER_METADATA_KEYS) {
|
|
233
|
+
const value = member.metadata[key];
|
|
234
|
+
if (value === undefined) continue;
|
|
235
|
+
const formatted = formatMetadataValue(value);
|
|
236
|
+
if (formatted !== null) rows.push({ key, value: formatted });
|
|
237
|
+
}
|
|
238
|
+
return rows;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function SessionMembershipPanel({
|
|
242
|
+
memberships,
|
|
243
|
+
}: {
|
|
244
|
+
memberships: SessionMembershipEvidence[];
|
|
245
|
+
}): JSX.Element | null {
|
|
246
|
+
if (memberships.length === 0) return null;
|
|
247
|
+
|
|
248
|
+
return (
|
|
249
|
+
<div className="mb-4 rounded-md border border-border bg-muted/10 px-3 py-2 text-xs">
|
|
250
|
+
<div className="mb-2 flex items-center justify-between gap-2">
|
|
251
|
+
<div className="font-semibold text-foreground">Group Member Evidence</div>
|
|
252
|
+
<div className="font-mono text-[10px] text-muted-foreground">
|
|
253
|
+
{memberships.length} group{memberships.length === 1 ? "" : "s"}
|
|
254
|
+
</div>
|
|
255
|
+
</div>
|
|
256
|
+
<div className="space-y-2">
|
|
257
|
+
{memberships.map((membership) => {
|
|
258
|
+
const member = membership.member;
|
|
259
|
+
const metadataRows = getMemberMetadataRows(member);
|
|
260
|
+
return (
|
|
261
|
+
<div key={`${membership.groupId}:${member.id}`} className="min-w-0">
|
|
262
|
+
<div className="flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1">
|
|
263
|
+
<span
|
|
264
|
+
className="truncate font-medium text-foreground"
|
|
265
|
+
title={membership.groupTitle}
|
|
266
|
+
>
|
|
267
|
+
{membership.groupTitle}
|
|
268
|
+
</span>
|
|
269
|
+
<span className="font-mono text-[10px] uppercase text-muted-foreground">
|
|
270
|
+
{membership.groupStatus}
|
|
271
|
+
</span>
|
|
272
|
+
{member.status !== null && (
|
|
273
|
+
<span className="font-mono text-[10px] text-muted-foreground">
|
|
274
|
+
member {member.status}
|
|
275
|
+
</span>
|
|
276
|
+
)}
|
|
277
|
+
</div>
|
|
278
|
+
<div className="mt-1 flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1 text-muted-foreground">
|
|
279
|
+
<span className="font-mono" title={member.sessionId}>
|
|
280
|
+
{truncateSessionId(member.sessionId)}
|
|
281
|
+
</span>
|
|
282
|
+
{member.label !== null && <span>{member.label}</span>}
|
|
283
|
+
{member.provider !== null && <span>{member.provider}</span>}
|
|
284
|
+
{member.model !== null && <span className="font-mono">{member.model}</span>}
|
|
285
|
+
{member.runId !== null && (
|
|
286
|
+
<span className="font-mono" title={member.runId}>
|
|
287
|
+
run {truncateSessionId(member.runId)}
|
|
288
|
+
</span>
|
|
289
|
+
)}
|
|
290
|
+
</div>
|
|
291
|
+
{metadataRows.length > 0 && (
|
|
292
|
+
<div className="mt-2 grid gap-1 sm:grid-cols-2 xl:grid-cols-3">
|
|
293
|
+
{metadataRows.map((row) => (
|
|
294
|
+
<div
|
|
295
|
+
key={row.key}
|
|
296
|
+
className="min-w-0 rounded border border-border/60 px-2 py-1"
|
|
297
|
+
>
|
|
298
|
+
<div className="font-mono text-[10px] text-muted-foreground">{row.key}</div>
|
|
299
|
+
<div
|
|
300
|
+
className="truncate font-mono text-[11px] text-foreground"
|
|
301
|
+
title={row.value}
|
|
302
|
+
>
|
|
303
|
+
{row.value}
|
|
304
|
+
</div>
|
|
305
|
+
</div>
|
|
306
|
+
))}
|
|
307
|
+
</div>
|
|
308
|
+
)}
|
|
309
|
+
</div>
|
|
310
|
+
);
|
|
311
|
+
})}
|
|
312
|
+
</div>
|
|
313
|
+
</div>
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
|
|
197
317
|
function formatRequestCount(count: number): string {
|
|
198
318
|
return `${count} ${count === 1 ? "request" : "requests"}`;
|
|
199
319
|
}
|
|
@@ -641,6 +761,10 @@ export type ProxyViewerProps = {
|
|
|
641
761
|
slowResponseThresholdSeconds: number;
|
|
642
762
|
/** Controls whether timestamps render as compact local time or full ISO strings. */
|
|
643
763
|
timeDisplayFormat: TimeDisplayFormat;
|
|
764
|
+
/** True while a pinned session page is waiting for its initial log scan. */
|
|
765
|
+
isLoading?: boolean;
|
|
766
|
+
/** Group/run member metadata attached to the pinned session id. */
|
|
767
|
+
sessionMemberships?: SessionMembershipEvidence[];
|
|
644
768
|
/** Hide the session filter dropdown. Used on `/session/$id` routes where
|
|
645
769
|
* the session is already pinned by the URL and the dropdown would just
|
|
646
770
|
* fight the URL state. */
|
|
@@ -665,6 +789,8 @@ export function ProxyViewer({
|
|
|
665
789
|
strip,
|
|
666
790
|
slowResponseThresholdSeconds,
|
|
667
791
|
timeDisplayFormat,
|
|
792
|
+
isLoading = false,
|
|
793
|
+
sessionMemberships = [],
|
|
668
794
|
hideSessionFilter = false,
|
|
669
795
|
pinnedSessionId,
|
|
670
796
|
}: ProxyViewerProps): JSX.Element {
|
|
@@ -841,6 +967,10 @@ export function ProxyViewer({
|
|
|
841
967
|
/>
|
|
842
968
|
)}
|
|
843
969
|
|
|
970
|
+
{hasSessionContext && pinnedSessionId !== undefined && sessionMemberships.length > 0 && (
|
|
971
|
+
<SessionMembershipPanel memberships={sessionMemberships} />
|
|
972
|
+
)}
|
|
973
|
+
|
|
844
974
|
{/* Controls + Filters */}
|
|
845
975
|
<div className="flex items-center gap-3 mb-4">
|
|
846
976
|
{!hideSessionFilter && (
|
|
@@ -972,26 +1102,35 @@ export function ProxyViewer({
|
|
|
972
1102
|
{logs.length === 0 ? (
|
|
973
1103
|
selectedSession !== "__all__" ? (
|
|
974
1104
|
<div className="text-center text-muted-foreground py-16 space-y-4">
|
|
975
|
-
<p className="text-sm font-medium">
|
|
1105
|
+
<p className="text-sm font-medium">
|
|
1106
|
+
{isLoading ? "Loading session data..." : "Session not found"}
|
|
1107
|
+
</p>
|
|
976
1108
|
<p className="text-xs font-mono bg-muted px-3 py-1 rounded inline-block max-w-[500px] break-all">
|
|
977
1109
|
{truncateSessionId(selectedSession)}
|
|
978
1110
|
</p>
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
1111
|
+
{sessionMemberships.length > 0 && (
|
|
1112
|
+
<div className="mx-auto max-w-3xl text-left">
|
|
1113
|
+
<SessionMembershipPanel memberships={sessionMemberships} />
|
|
1114
|
+
</div>
|
|
1115
|
+
)}
|
|
1116
|
+
{!isLoading && (
|
|
1117
|
+
<p className="text-xs">
|
|
1118
|
+
This session may have been cleared or never existed.{" "}
|
|
1119
|
+
{hideSessionFilter ? (
|
|
1120
|
+
<a href="/" className="underline hover:text-foreground transition-colors">
|
|
1121
|
+
Back to all sessions
|
|
1122
|
+
</a>
|
|
1123
|
+
) : (
|
|
1124
|
+
<button
|
|
1125
|
+
type="button"
|
|
1126
|
+
onClick={() => onSessionChange("__all__")}
|
|
1127
|
+
className="underline hover:text-foreground transition-colors"
|
|
1128
|
+
>
|
|
1129
|
+
Show all sessions
|
|
1130
|
+
</button>
|
|
1131
|
+
)}
|
|
1132
|
+
</p>
|
|
1133
|
+
)}
|
|
995
1134
|
</div>
|
|
996
1135
|
) : (
|
|
997
1136
|
<div className="text-center text-muted-foreground py-16 space-y-4">
|