@tonyclaw/agent-inspector 2.1.4 → 2.1.6

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 (30) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-BihEPd3v.js → CompareDrawer-Djazxhew.js} +1 -1
  3. package/.output/public/assets/{ProxyViewerContainer-DYqXb6WW.js → ProxyViewerContainer-BC-z9RPh.js} +40 -40
  4. package/.output/public/assets/{ReplayDialog-DnX-6kY8.js → ReplayDialog-BaD4R6ac.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-CIkHAxZO.js → RequestAnatomy-w6uGdqYp.js} +1 -1
  6. package/.output/public/assets/{ResponseView-BFc8jjZM.js → ResponseView-VPed-Yif.js} +1 -1
  7. package/.output/public/assets/{StreamingChunkSequence-p8qkpF6K.js → StreamingChunkSequence-CPB8FgHI.js} +1 -1
  8. package/.output/public/assets/_sessionId-mnr0O0Ri.js +1 -0
  9. package/.output/public/assets/index-DH1DjJOl.js +1 -0
  10. package/.output/public/assets/index-DP4NzCZ5.css +1 -0
  11. package/.output/public/assets/{main-xlSdu7_I.js → main-CIV3Chb5.js} +2 -2
  12. package/.output/server/{_sessionId-CwVQgxoK.mjs → _sessionId-CIXQGim9.mjs} +2 -2
  13. package/.output/server/_ssr/{CompareDrawer-Br9Ec0ah.mjs → CompareDrawer-_uFgjkB2.mjs} +2 -2
  14. package/.output/server/_ssr/{ProxyViewerContainer-Oe5Tr3C2.mjs → ProxyViewerContainer-D8YjQDNj.mjs} +240 -28
  15. package/.output/server/_ssr/{ReplayDialog-C1_QsoA-.mjs → ReplayDialog-CFwKM7jc.mjs} +3 -3
  16. package/.output/server/_ssr/{RequestAnatomy-cn08QSoz.mjs → RequestAnatomy-2Vr84GxT.mjs} +2 -2
  17. package/.output/server/_ssr/{ResponseView-CIqUCCTG.mjs → ResponseView-CSBWBHRJ.mjs} +2 -2
  18. package/.output/server/_ssr/{StreamingChunkSequence-0MhVWD2F.mjs → StreamingChunkSequence-Dr4JApqs.mjs} +2 -2
  19. package/.output/server/_ssr/{index-jpnI5ghp.mjs → index-WnsY1fh_.mjs} +2 -2
  20. package/.output/server/_ssr/index.mjs +2 -2
  21. package/.output/server/_ssr/{router-SSOn7c09.mjs → router-sy38X5AX.mjs} +6 -4
  22. package/.output/server/{_tanstack-start-manifest_v-BCgy_9er.mjs → _tanstack-start-manifest_v-Dde-eACV.mjs} +1 -1
  23. package/.output/server/index.mjs +50 -50
  24. package/package.json +1 -1
  25. package/src/components/groups/GroupsDialog.tsx +274 -19
  26. package/src/lib/groupContract.ts +1 -0
  27. package/src/services/groups.ts +1 -0
  28. package/.output/public/assets/_sessionId-Csx4T_y6.js +0 -1
  29. package/.output/public/assets/index-Bcq8bZoK.css +0 -1
  30. package/.output/public/assets/index-KMuh-31x.js +0 -1
@@ -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-Bcq8bZoK.css";
68
+ const appCss = "/assets/index-DP4NzCZ5.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-jpnI5ghp.mjs");
111
+ const $$splitComponentImporter$1 = () => import("./index-WnsY1fh_.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-CwVQgxoK.mjs");
154
+ const $$splitComponentImporter = () => import("../_sessionId-CIXQGim9.mjs");
155
155
  const Route$B = createFileRoute("/session/$sessionId")({
156
156
  component: lazyRouteComponent($$splitComponentImporter, "component"),
157
157
  parseParams: (params) => ({
@@ -7158,6 +7158,7 @@ const InspectorGroupEvidenceSummarySchema = object({
7158
7158
  const GroupEvidenceReadResponseSchema = object({
7159
7159
  group: InspectorGroupSchema,
7160
7160
  evidence: InspectorGroupEvidenceSchema,
7161
+ members: array(InspectorGroupExportMemberSchema).nullable(),
7161
7162
  markdown: string(),
7162
7163
  summary: InspectorGroupEvidenceSummarySchema.nullable(),
7163
7164
  report: EvidenceReportSchema.nullable()
@@ -7925,7 +7926,7 @@ const Route$w = createFileRoute("/api/models")({
7925
7926
  }
7926
7927
  }
7927
7928
  });
7928
- const version = "2.1.4";
7929
+ const version = "2.1.6";
7929
7930
  const packageJson = {
7930
7931
  version
7931
7932
  };
@@ -8351,6 +8352,7 @@ function readInspectorGroupEvidence(groupId) {
8351
8352
  return serviceOk({
8352
8353
  group,
8353
8354
  evidence: group.evidence,
8355
+ members: document?.members ?? null,
8354
8356
  markdown,
8355
8357
  summary: document?.summary ?? null,
8356
8358
  report: document?.jenkinsReport ?? null
@@ -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-xlSdu7_I.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-KMuh-31x.js", "/assets/ProxyViewerContainer-DYqXb6WW.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-Csx4T_y6.js", "/assets/ProxyViewerContainer-DYqXb6WW.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-xlSdu7_I.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-CIV3Chb5.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-DH1DjJOl.js", "/assets/ProxyViewerContainer-BC-z9RPh.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-mnr0O0Ri.js", "/assets/ProxyViewerContainer-BC-z9RPh.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-CIV3Chb5.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };
@@ -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-03T07:52:18.057Z",
41
+ "mtime": "2026-07-03T08:38:18.431Z",
42
42
  "size": 5915,
43
43
  "path": "../public/assets/alibaba-TTwafVwX.svg"
44
44
  },
45
- "/assets/index-KMuh-31x.js": {
45
+ "/assets/index-DH1DjJOl.js": {
46
46
  "type": "text/javascript; charset=utf-8",
47
- "etag": '"74-DDu8Y0k+118MPEojCQ31x0l0t6M"',
48
- "mtime": "2026-07-03T07:52:18.057Z",
47
+ "etag": '"74-XPYkCkmLf6OHNprOlGZmst3ii/c"',
48
+ "mtime": "2026-07-03T08:38:18.431Z",
49
49
  "size": 116,
50
- "path": "../public/assets/index-KMuh-31x.js"
50
+ "path": "../public/assets/index-DH1DjJOl.js"
51
51
  },
52
- "/assets/CompareDrawer-BihEPd3v.js": {
52
+ "/assets/CompareDrawer-Djazxhew.js": {
53
53
  "type": "text/javascript; charset=utf-8",
54
- "etag": '"49e8-cBpqLRmj+nSdwIVvl8By/sv8Gls"',
55
- "mtime": "2026-07-03T07:52:18.057Z",
54
+ "etag": '"49e8-BgBnUkEs/A9S9UOa70+wREN0qNc"',
55
+ "mtime": "2026-07-03T08:38:18.431Z",
56
56
  "size": 18920,
57
- "path": "../public/assets/CompareDrawer-BihEPd3v.js"
57
+ "path": "../public/assets/CompareDrawer-Djazxhew.js"
58
58
  },
59
59
  "/assets/minimax-BPMzvuL-.jpeg": {
60
60
  "type": "image/jpeg",
61
61
  "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
62
- "mtime": "2026-07-03T07:52:18.057Z",
62
+ "mtime": "2026-07-03T08:38:18.431Z",
63
63
  "size": 6918,
64
64
  "path": "../public/assets/minimax-BPMzvuL-.jpeg"
65
65
  },
66
- "/assets/index-Bcq8bZoK.css": {
67
- "type": "text/css; charset=utf-8",
68
- "etag": '"1e82d-Bo+nRYLQB3/4r6wWrfFE4tW/SHg"',
69
- "mtime": "2026-07-03T07:52:18.057Z",
70
- "size": 124973,
71
- "path": "../public/assets/index-Bcq8bZoK.css"
72
- },
73
- "/assets/RequestAnatomy-CIkHAxZO.js": {
66
+ "/assets/ResponseView-VPed-Yif.js": {
74
67
  "type": "text/javascript; charset=utf-8",
75
- "etag": '"43f2-ndCyHyHaIH5k3uyS5zLGEGd8ZQs"',
76
- "mtime": "2026-07-03T07:52:18.057Z",
77
- "size": 17394,
78
- "path": "../public/assets/RequestAnatomy-CIkHAxZO.js"
68
+ "etag": '"30d2-Remim8aO7S0gq3gx4DkhNol2mVs"',
69
+ "mtime": "2026-07-03T08:38:18.432Z",
70
+ "size": 12498,
71
+ "path": "../public/assets/ResponseView-VPed-Yif.js"
79
72
  },
80
- "/assets/ResponseView-BFc8jjZM.js": {
73
+ "/assets/RequestAnatomy-w6uGdqYp.js": {
81
74
  "type": "text/javascript; charset=utf-8",
82
- "etag": '"30d2-FN8BV3cpzR3ubQDpdfQY+p1+z/Q"',
83
- "mtime": "2026-07-03T07:52:18.057Z",
84
- "size": 12498,
85
- "path": "../public/assets/ResponseView-BFc8jjZM.js"
75
+ "etag": '"43f2-7s0ubeaphfsGPvrGnsiVPloVCUM"',
76
+ "mtime": "2026-07-03T08:38:18.431Z",
77
+ "size": 17394,
78
+ "path": "../public/assets/RequestAnatomy-w6uGdqYp.js"
86
79
  },
87
- "/assets/StreamingChunkSequence-p8qkpF6K.js": {
80
+ "/assets/StreamingChunkSequence-CPB8FgHI.js": {
88
81
  "type": "text/javascript; charset=utf-8",
89
- "etag": '"d5c-8wlfYtpc07D3FnsFacfabFwHWYI"',
90
- "mtime": "2026-07-03T07:52:18.059Z",
82
+ "etag": '"d5c-GckK+AzsbwALbgplRm1NjeMIsro"',
83
+ "mtime": "2026-07-03T08:38:18.432Z",
91
84
  "size": 3420,
92
- "path": "../public/assets/StreamingChunkSequence-p8qkpF6K.js"
85
+ "path": "../public/assets/StreamingChunkSequence-CPB8FgHI.js"
93
86
  },
94
87
  "/assets/zhipuai-BPNAnxo-.svg": {
95
88
  "type": "image/svg+xml",
96
89
  "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
97
- "mtime": "2026-07-03T07:52:18.057Z",
90
+ "mtime": "2026-07-03T08:38:18.431Z",
98
91
  "size": 11256,
99
92
  "path": "../public/assets/zhipuai-BPNAnxo-.svg"
100
93
  },
101
- "/assets/_sessionId-Csx4T_y6.js": {
94
+ "/assets/_sessionId-mnr0O0Ri.js": {
102
95
  "type": "text/javascript; charset=utf-8",
103
- "etag": '"d2-Qqkqbm9nR1nIMdgSM7sxuLljO6Q"',
104
- "mtime": "2026-07-03T07:52:18.057Z",
96
+ "etag": '"d2-8fX6eaLvVng9PCQ65DZet+OU12I"',
97
+ "mtime": "2026-07-03T08:38:18.431Z",
105
98
  "size": 210,
106
- "path": "../public/assets/_sessionId-Csx4T_y6.js"
99
+ "path": "../public/assets/_sessionId-mnr0O0Ri.js"
100
+ },
101
+ "/assets/index-DP4NzCZ5.css": {
102
+ "type": "text/css; charset=utf-8",
103
+ "etag": '"1eb57-LKub3VNb71B8B8BuFk7Jbg4bu4U"',
104
+ "mtime": "2026-07-03T08:38:18.431Z",
105
+ "size": 125783,
106
+ "path": "../public/assets/index-DP4NzCZ5.css"
107
107
  },
108
- "/assets/ReplayDialog-DnX-6kY8.js": {
108
+ "/assets/ReplayDialog-BaD4R6ac.js": {
109
109
  "type": "text/javascript; charset=utf-8",
110
- "etag": '"318c-4vrj6maBmg3vnKS0IStIsOYe0SE"',
111
- "mtime": "2026-07-03T07:52:18.057Z",
110
+ "etag": '"318c-vv7692upDQMjsmv8eTib78z3Jbo"',
111
+ "mtime": "2026-07-03T08:38:18.431Z",
112
112
  "size": 12684,
113
- "path": "../public/assets/ReplayDialog-DnX-6kY8.js"
113
+ "path": "../public/assets/ReplayDialog-BaD4R6ac.js"
114
114
  },
115
- "/assets/main-xlSdu7_I.js": {
115
+ "/assets/main-CIV3Chb5.js": {
116
116
  "type": "text/javascript; charset=utf-8",
117
- "etag": '"512fd-w+PhHGmgqkHUWhgkIrieWmaEqYU"',
118
- "mtime": "2026-07-03T07:52:18.057Z",
117
+ "etag": '"512fd-t4pJOLeOXXlAM58KfA92bW148Yc"',
118
+ "mtime": "2026-07-03T08:38:18.431Z",
119
119
  "size": 332541,
120
- "path": "../public/assets/main-xlSdu7_I.js"
120
+ "path": "../public/assets/main-CIV3Chb5.js"
121
121
  },
122
122
  "/assets/qwen-CONDcHqt.png": {
123
123
  "type": "image/png",
124
124
  "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
125
- "mtime": "2026-07-03T07:52:18.057Z",
125
+ "mtime": "2026-07-03T08:38:18.431Z",
126
126
  "size": 357059,
127
127
  "path": "../public/assets/qwen-CONDcHqt.png"
128
128
  },
129
- "/assets/ProxyViewerContainer-DYqXb6WW.js": {
129
+ "/assets/ProxyViewerContainer-BC-z9RPh.js": {
130
130
  "type": "text/javascript; charset=utf-8",
131
- "etag": '"bfe50-rgRP7lJq+wsVfs/xn5xkbtVZs7U"',
132
- "mtime": "2026-07-03T07:52:18.057Z",
133
- "size": 786e3,
134
- "path": "../public/assets/ProxyViewerContainer-DYqXb6WW.js"
131
+ "etag": '"c1234-KOvboCBS0P+YrJrlD23VqmaVzJM"',
132
+ "mtime": "2026-07-03T08:38:18.432Z",
133
+ "size": 791092,
134
+ "path": "../public/assets/ProxyViewerContainer-BC-z9RPh.js"
135
135
  }
136
136
  };
137
137
  function readAsset(id) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonyclaw/agent-inspector",
3
- "version": "2.1.4",
3
+ "version": "2.1.6",
4
4
  "type": "module",
5
5
  "description": "Agent observability and knowledge capture layer for AI coding tools.",
6
6
  "license": "MIT",
@@ -1,6 +1,8 @@
1
- import { type JSX, useCallback, useEffect, useMemo, useState } from "react";
1
+ import { Fragment, type JSX, useCallback, useEffect, useMemo, useState } from "react";
2
2
  import {
3
3
  Check,
4
+ ChevronDown,
5
+ ChevronRight,
4
6
  Copy,
5
7
  Download,
6
8
  ExternalLink,
@@ -44,6 +46,7 @@ type GroupSummary = {
44
46
  type GroupMemberRow = {
45
47
  member: InspectorGroupMember;
46
48
  exportMember: InspectorGroupExportMember | null;
49
+ source: "group" | "export" | "evidence";
47
50
  };
48
51
 
49
52
  export function groupDeletePath(groupId: string, deleteEvidence: boolean): string {
@@ -89,15 +92,29 @@ export function summarizeGroup(group: InspectorGroup): GroupSummary {
89
92
  export function buildGroupMemberRows(
90
93
  group: InspectorGroup,
91
94
  exportResult: GroupEvidenceExportResult | null,
95
+ evidenceResponse: GroupEvidenceReadResponse | null = null,
92
96
  ): GroupMemberRow[] {
93
97
  if (exportResult !== null && exportResult.group.id === group.id) {
94
98
  return exportResult.members.map((exportMember) => ({
95
99
  member: exportMember.member,
96
100
  exportMember,
101
+ source: "export",
97
102
  }));
98
103
  }
99
104
 
100
- return group.members.map((member) => ({ member, exportMember: null }));
105
+ if (
106
+ evidenceResponse !== null &&
107
+ evidenceResponse.group.id === group.id &&
108
+ evidenceResponse.members !== null
109
+ ) {
110
+ return evidenceResponse.members.map((exportMember) => ({
111
+ member: exportMember.member,
112
+ exportMember,
113
+ source: "evidence",
114
+ }));
115
+ }
116
+
117
+ return group.members.map((member) => ({ member, exportMember: null, source: "group" }));
101
118
  }
102
119
 
103
120
  function statusClassName(status: InspectorGroup["status"] | MemberStatus): string {
@@ -160,6 +177,17 @@ function formatTimestamp(value: string): string {
160
177
  }).format(new Date(millis));
161
178
  }
162
179
 
180
+ function formatNullableTimestamp(value: string | null): string {
181
+ return value === null ? "-" : formatTimestamp(value);
182
+ }
183
+
184
+ function formatJsonPreview(value: unknown): string {
185
+ const serialized = JSON.stringify(value);
186
+ const text = serialized === undefined ? String(value) : serialized;
187
+ if (text.length <= 160) return text;
188
+ return `${text.slice(0, 157)}...`;
189
+ }
190
+
163
191
  function firstNonEmpty(...values: Array<string | null>): string {
164
192
  for (const value of values) {
165
193
  if (value !== null && value.trim().length > 0) return value;
@@ -193,6 +221,17 @@ function latestLog(row: GroupMemberRow): SessionLogSummary | null {
193
221
  return logs[0] ?? null;
194
222
  }
195
223
 
224
+ function memberSourceLabel(source: GroupMemberRow["source"]): string {
225
+ switch (source) {
226
+ case "export":
227
+ return "fresh export";
228
+ case "evidence":
229
+ return "evidence";
230
+ case "group":
231
+ return "group";
232
+ }
233
+ }
234
+
196
235
  function evidenceFor(
197
236
  group: InspectorGroup,
198
237
  exportResult: GroupEvidenceExportResult | null,
@@ -553,7 +592,7 @@ function GroupDetails({
553
592
  const exportedSummary = exportSummaryFor(group, exportResult, evidenceResponse);
554
593
  const evidenceReport = evidenceReportFor(group, exportResult, evidenceResponse);
555
594
  const evidence = evidenceFor(group, exportResult);
556
- const rows = buildGroupMemberRows(group, exportResult);
595
+ const rows = buildGroupMemberRows(group, exportResult, evidenceResponse);
557
596
  const isExporting = exportingGroupId === group.id;
558
597
  const isDeleting = deletingGroupId === group.id;
559
598
  const isConfirmingDelete = deleteTarget?.id === group.id;
@@ -874,6 +913,12 @@ function CopyPathRow({ label, value }: { label: string; value: string }): JSX.El
874
913
  }
875
914
 
876
915
  function MemberTable({ rows }: { rows: GroupMemberRow[] }): JSX.Element {
916
+ const [expandedMemberId, setExpandedMemberId] = useState<string | null>(null);
917
+
918
+ const toggleMember = useCallback((memberId: string) => {
919
+ setExpandedMemberId((current) => (current === memberId ? null : memberId));
920
+ }, []);
921
+
877
922
  if (rows.length === 0) {
878
923
  return (
879
924
  <div className="rounded-md border border-dashed border-border px-3 py-8 text-center text-xs text-muted-foreground">
@@ -901,9 +946,15 @@ function MemberTable({ rows }: { rows: GroupMemberRow[] }): JSX.Element {
901
946
  </tr>
902
947
  </thead>
903
948
  <tbody>
904
- {rows.map((row) => (
905
- <MemberRow key={row.member.id} row={row} />
906
- ))}
949
+ {rows.map((row) => {
950
+ const isExpanded = expandedMemberId === row.member.id;
951
+ return (
952
+ <Fragment key={row.member.id}>
953
+ <MemberRow row={row} isExpanded={isExpanded} onToggleDetails={toggleMember} />
954
+ <MemberDetailsRow row={row} isExpanded={isExpanded} />
955
+ </Fragment>
956
+ );
957
+ })}
907
958
  </tbody>
908
959
  </table>
909
960
  </div>
@@ -911,11 +962,20 @@ function MemberTable({ rows }: { rows: GroupMemberRow[] }): JSX.Element {
911
962
  );
912
963
  }
913
964
 
914
- function MemberRow({ row }: { row: GroupMemberRow }): JSX.Element {
965
+ function MemberRow({
966
+ row,
967
+ isExpanded,
968
+ onToggleDetails,
969
+ }: {
970
+ row: GroupMemberRow;
971
+ isExpanded: boolean;
972
+ onToggleDetails: (memberId: string) => void;
973
+ }): JSX.Element {
915
974
  const member = row.member;
916
975
  const session = row.exportMember?.session ?? null;
917
976
  const log = latestLog(row);
918
977
  const sessionPath = session?.inspectorPath ?? getSessionPath(member.sessionId);
978
+ const canOpenLiveSession = row.source !== "evidence";
919
979
  const requests = session?.requestCount ?? null;
920
980
  const errors = session?.errorCount ?? null;
921
981
  const tokens = session?.tokenUsage.total ?? null;
@@ -923,19 +983,53 @@ function MemberRow({ row }: { row: GroupMemberRow }): JSX.Element {
923
983
  const sessionLabel = firstNonEmpty(member.label, member.sessionId);
924
984
 
925
985
  return (
926
- <tr className="border-b border-border last:border-0">
986
+ <tr className="border-b border-border last:border-0 hover:bg-muted/20">
927
987
  <td className="max-w-56 px-3 py-2">
928
- <a
929
- href={sessionPath}
930
- target="_blank"
931
- rel="noreferrer"
932
- className="inline-flex max-w-full min-w-0 items-center gap-2 rounded-sm font-mono text-xs text-primary outline-none hover:underline focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
933
- aria-label={`Open session ${sessionLabel}`}
934
- title={`Open session ${sessionLabel}`}
935
- >
936
- <span className="min-w-0 truncate">{sessionLabel}</span>
937
- <ExternalLink className="size-3 shrink-0 text-muted-foreground" />
938
- </a>
988
+ <div className="flex min-w-0 items-center gap-1.5">
989
+ <Button
990
+ type="button"
991
+ variant="ghost"
992
+ size="icon"
993
+ className="size-6 shrink-0 text-muted-foreground"
994
+ aria-label={isExpanded ? `Hide member ${sessionLabel}` : `Show member ${sessionLabel}`}
995
+ title={isExpanded ? "Hide member details" : "Show member details"}
996
+ onClick={() => {
997
+ onToggleDetails(member.id);
998
+ }}
999
+ >
1000
+ {isExpanded ? (
1001
+ <ChevronDown className="size-3.5" />
1002
+ ) : (
1003
+ <ChevronRight className="size-3.5" />
1004
+ )}
1005
+ </Button>
1006
+ {canOpenLiveSession ? (
1007
+ <a
1008
+ href={sessionPath}
1009
+ target="_blank"
1010
+ rel="noreferrer"
1011
+ className="inline-flex max-w-full min-w-0 items-center gap-2 rounded-sm font-mono text-xs text-primary outline-none hover:underline focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
1012
+ aria-label={`Open session ${sessionLabel}`}
1013
+ title={`Open session ${sessionLabel}`}
1014
+ >
1015
+ <span className="min-w-0 truncate">{sessionLabel}</span>
1016
+ <ExternalLink className="size-3 shrink-0 text-muted-foreground" />
1017
+ </a>
1018
+ ) : (
1019
+ <span
1020
+ className="inline-flex max-w-full min-w-0 items-center gap-2 font-mono text-xs text-foreground"
1021
+ title={`Evidence snapshot for ${sessionLabel}`}
1022
+ >
1023
+ <span className="min-w-0 truncate">{sessionLabel}</span>
1024
+ <Badge
1025
+ variant="outline"
1026
+ className="shrink-0 border-zinc-200 bg-zinc-50 text-zinc-600"
1027
+ >
1028
+ evidence
1029
+ </Badge>
1030
+ </span>
1031
+ )}
1032
+ </div>
939
1033
  <div className="mt-0.5 truncate text-[11px] text-muted-foreground">
940
1034
  {displayText(member.agent)}
941
1035
  </div>
@@ -955,3 +1049,164 @@ function MemberRow({ row }: { row: GroupMemberRow }): JSX.Element {
955
1049
  </tr>
956
1050
  );
957
1051
  }
1052
+
1053
+ function MemberDetailsRow({
1054
+ row,
1055
+ isExpanded,
1056
+ }: {
1057
+ row: GroupMemberRow;
1058
+ isExpanded: boolean;
1059
+ }): JSX.Element | null {
1060
+ if (!isExpanded) return null;
1061
+
1062
+ const member = row.member;
1063
+ const exportMember = row.exportMember;
1064
+ const session = exportMember?.session ?? null;
1065
+ const run = exportMember?.run ?? null;
1066
+ const metadataEntries = Object.entries(member.metadata);
1067
+
1068
+ return (
1069
+ <tr className="border-b border-border bg-muted/10">
1070
+ <td colSpan={7} className="px-3 pb-4 pt-2">
1071
+ <div className="space-y-3 rounded-md border border-border bg-background p-3">
1072
+ <div className="grid gap-2 sm:grid-cols-2 lg:grid-cols-4">
1073
+ <MemberDetailItem label="Source" value={memberSourceLabel(row.source)} />
1074
+ <MemberDetailItem label="Member ID" value={member.id} mono />
1075
+ <MemberDetailItem label="Session ID" value={member.sessionId} mono />
1076
+ <MemberDetailItem label="Run ID" value={run?.id ?? member.runId ?? "-"} mono />
1077
+ <MemberDetailItem label="Created" value={formatTimestamp(member.addedAt)} />
1078
+ <MemberDetailItem label="Updated" value={formatTimestamp(member.updatedAt)} />
1079
+ <MemberDetailItem
1080
+ label="Session created"
1081
+ value={formatNullableTimestamp(session?.createdAt ?? null)}
1082
+ />
1083
+ <MemberDetailItem
1084
+ label="Session updated"
1085
+ value={formatNullableTimestamp(session?.updatedAt ?? null)}
1086
+ />
1087
+ </div>
1088
+
1089
+ {session === null ? (
1090
+ <div className="rounded-md border border-dashed border-border px-3 py-2 text-xs text-muted-foreground">
1091
+ No session snapshot is available for this member.
1092
+ </div>
1093
+ ) : (
1094
+ <div className="grid gap-2 sm:grid-cols-2 lg:grid-cols-4">
1095
+ <MemberDetailItem label="Log coverage" value={session.logCoverage} />
1096
+ <MemberDetailItem label="Runtime" value={displayText(session.runtimeMode)} />
1097
+ <MemberDetailItem label="Requests" value={formatNumber(session.requestCount)} mono />
1098
+ <MemberDetailItem label="Errors" value={formatNumber(session.errorCount)} mono />
1099
+ <MemberDetailItem
1100
+ label="Input tokens"
1101
+ value={formatNumber(session.tokenUsage.input)}
1102
+ mono
1103
+ />
1104
+ <MemberDetailItem
1105
+ label="Output tokens"
1106
+ value={formatNumber(session.tokenUsage.output)}
1107
+ mono
1108
+ />
1109
+ <MemberDetailItem
1110
+ label="Cache read"
1111
+ value={formatNumber(session.tokenUsage.cacheRead)}
1112
+ mono
1113
+ />
1114
+ <MemberDetailItem
1115
+ label="Total tokens"
1116
+ value={formatNumber(session.tokenUsage.total)}
1117
+ mono
1118
+ />
1119
+ </div>
1120
+ )}
1121
+
1122
+ <LatestLogsPreview logs={session?.latestLogs ?? []} />
1123
+ <MemberMetadata entries={metadataEntries} />
1124
+ </div>
1125
+ </td>
1126
+ </tr>
1127
+ );
1128
+ }
1129
+
1130
+ function MemberDetailItem({
1131
+ label,
1132
+ value,
1133
+ mono = false,
1134
+ }: {
1135
+ label: string;
1136
+ value: string;
1137
+ mono?: boolean;
1138
+ }): JSX.Element {
1139
+ return (
1140
+ <div className="min-w-0">
1141
+ <div className="text-[11px] font-medium uppercase tracking-wide text-muted-foreground">
1142
+ {label}
1143
+ </div>
1144
+ <div
1145
+ className={cn("truncate text-xs text-foreground", mono ? "font-mono" : "")}
1146
+ title={value}
1147
+ >
1148
+ {value}
1149
+ </div>
1150
+ </div>
1151
+ );
1152
+ }
1153
+
1154
+ function LatestLogsPreview({ logs }: { logs: SessionLogSummary[] }): JSX.Element {
1155
+ const visibleLogs = logs.slice(0, 5);
1156
+
1157
+ if (visibleLogs.length === 0) {
1158
+ return (
1159
+ <div className="rounded-md border border-dashed border-border px-3 py-2 text-xs text-muted-foreground">
1160
+ No latest logs in this snapshot.
1161
+ </div>
1162
+ );
1163
+ }
1164
+
1165
+ return (
1166
+ <div className="overflow-hidden rounded-md border border-border">
1167
+ <div className="border-b border-border bg-muted/30 px-3 py-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground">
1168
+ Latest logs
1169
+ </div>
1170
+ <div className="divide-y divide-border">
1171
+ {visibleLogs.map((log) => (
1172
+ <div
1173
+ key={log.id}
1174
+ className="grid gap-2 px-3 py-2 text-xs sm:grid-cols-[72px_1fr_88px_88px]"
1175
+ >
1176
+ <span className="font-mono text-muted-foreground">#{log.id}</span>
1177
+ <span className="min-w-0 truncate">
1178
+ {displayText(log.model)} · {log.apiFormat} · {log.path}
1179
+ </span>
1180
+ <span className="font-mono text-muted-foreground">{formatMs(log.firstChunkMs)}</span>
1181
+ <span className="font-mono text-muted-foreground">{formatMs(log.latencyMs)}</span>
1182
+ </div>
1183
+ ))}
1184
+ </div>
1185
+ </div>
1186
+ );
1187
+ }
1188
+
1189
+ function MemberMetadata({ entries }: { entries: Array<[string, unknown]> }): JSX.Element | null {
1190
+ if (entries.length === 0) return null;
1191
+
1192
+ return (
1193
+ <div className="overflow-hidden rounded-md border border-border">
1194
+ <div className="border-b border-border bg-muted/30 px-3 py-2 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground">
1195
+ Metadata
1196
+ </div>
1197
+ <div className="grid gap-x-3 gap-y-2 p-3 text-xs sm:grid-cols-2">
1198
+ {entries.map(([key, value]) => {
1199
+ const preview = formatJsonPreview(value);
1200
+ return (
1201
+ <div key={key} className="min-w-0">
1202
+ <span className="mr-2 text-muted-foreground">{key}</span>
1203
+ <span className="font-mono text-foreground" title={preview}>
1204
+ {preview}
1205
+ </span>
1206
+ </div>
1207
+ );
1208
+ })}
1209
+ </div>
1210
+ </div>
1211
+ );
1212
+ }
@@ -126,6 +126,7 @@ export const InspectorGroupEvidenceSummarySchema = z.object({
126
126
  export const GroupEvidenceReadResponseSchema = z.object({
127
127
  group: InspectorGroupSchema,
128
128
  evidence: InspectorGroupEvidenceSchema,
129
+ members: z.array(InspectorGroupExportMemberSchema).nullable(),
129
130
  markdown: z.string(),
130
131
  summary: InspectorGroupEvidenceSummarySchema.nullable(),
131
132
  report: EvidenceReportSchema.nullable(),