@tonyclaw/agent-inspector 3.0.9 → 3.0.10

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 (36) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-CJKL4LMm.js → CompareDrawer-BxLP7jmX.js} +1 -1
  3. package/.output/public/assets/ProxyViewerContainer-D_2ez29e.js +106 -0
  4. package/.output/public/assets/{ReplayDialog-BYanl-a_.js → ReplayDialog-Btm-wONI.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-DvPz1jqE.js → RequestAnatomy-C9eZJN9E.js} +1 -1
  6. package/.output/public/assets/{ResponseView-sZnxp9GN.js → ResponseView-9R2MW1kp.js} +2 -2
  7. package/.output/public/assets/{StreamingChunkSequence-G-tiYiBd.js → StreamingChunkSequence-zxqGpFfv.js} +1 -1
  8. package/.output/public/assets/{_sessionId-_hDcsmXq.js → _sessionId-C0tPTQlC.js} +1 -1
  9. package/.output/public/assets/index-BIgsQvaF.css +1 -0
  10. package/.output/public/assets/index-DgVWrzsQ.js +1 -0
  11. package/.output/public/assets/{index-SuOSQb2_.js → index-WiDkyjq8.js} +1 -1
  12. package/.output/public/assets/{json-viewer-yQdhgjaw.js → json-viewer-BAmkfRDE.js} +1 -1
  13. package/.output/public/assets/{main-CgjcDxjR.js → main-2feHoEI6.js} +2 -2
  14. package/.output/server/_libs/lucide-react.mjs +2 -2
  15. package/.output/server/{_sessionId-BGISf2En.mjs → _sessionId-BkoyescL.mjs} +2 -2
  16. package/.output/server/_ssr/{CompareDrawer-s-UF9gW3.mjs → CompareDrawer-irfFdkJ8.mjs} +3 -3
  17. package/.output/server/_ssr/{ProxyViewerContainer-C0Sbz9ED.mjs → ProxyViewerContainer-CcJr9STz.mjs} +88 -105
  18. package/.output/server/_ssr/{ReplayDialog-DvS8gvJr.mjs → ReplayDialog-CJnmXQGT.mjs} +3 -3
  19. package/.output/server/_ssr/{RequestAnatomy-BwhWglJL.mjs → RequestAnatomy-CupP0Wdb.mjs} +2 -2
  20. package/.output/server/_ssr/{ResponseView-wBVreqQf.mjs → ResponseView-Bp-0t5cd.mjs} +2 -2
  21. package/.output/server/_ssr/{StreamingChunkSequence-Dr6eg-MJ.mjs → StreamingChunkSequence-BXSn4kMH.mjs} +2 -2
  22. package/.output/server/_ssr/{index-B98Wia1X.mjs → index-KVltJBV8.mjs} +2 -2
  23. package/.output/server/_ssr/index.mjs +2 -2
  24. package/.output/server/_ssr/{json-viewer-D7L8y0FH.mjs → json-viewer-EYQ5eG2Q.mjs} +2 -2
  25. package/.output/server/_ssr/{router-g9mo0nWT.mjs → router-_cAQddXC.mjs} +21 -12
  26. package/.output/server/{_tanstack-start-manifest_v-CbGc-o50.mjs → _tanstack-start-manifest_v-BfiF5iov.mjs} +1 -1
  27. package/.output/server/index.mjs +65 -65
  28. package/package.json +1 -1
  29. package/src/components/ProxyViewerContainer.tsx +10 -2
  30. package/src/components/providers/ProviderCard.tsx +83 -91
  31. package/src/components/providers/ProvidersPanel.tsx +7 -7
  32. package/src/components/providers/SettingsDialog.tsx +17 -22
  33. package/src/routes/api/logs.ts +14 -5
  34. package/.output/public/assets/ProxyViewerContainer-DBUy29O-.js +0 -106
  35. package/.output/public/assets/index-DAPAWsAd.js +0 -1
  36. package/.output/public/assets/index-DspnLqUW.css +0 -1
@@ -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/ecosystem/packages", "/api/ecosystem/tasks", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-CgjcDxjR.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-DAPAWsAd.js", "/assets/ProxyViewerContainer-DBUy29O-.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-_hDcsmXq.js", "/assets/ProxyViewerContainer-DBUy29O-.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/ecosystem/packages": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.packages.ts", "children": ["/api/ecosystem/packages/$packageId/help", "/api/ecosystem/packages/$packageId/install", "/api/ecosystem/packages/$packageId/runner-presets", "/api/ecosystem/packages/$packageId/upgrade"] }, "/api/ecosystem/tasks": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.tasks.ts", "children": ["/api/ecosystem/tasks/$taskId"] }, "/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/ecosystem/tasks/$taskId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.tasks.$taskId.ts" }, "/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/ecosystem/packages/$packageId/help": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.packages.$packageId.help.ts" }, "/api/ecosystem/packages/$packageId/install": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.packages.$packageId.install.ts" }, "/api/ecosystem/packages/$packageId/runner-presets": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.packages.$packageId.runner-presets.ts" }, "/api/ecosystem/packages/$packageId/upgrade": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.packages.$packageId.upgrade.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-CgjcDxjR.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/ecosystem/packages", "/api/ecosystem/tasks", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-2feHoEI6.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-DgVWrzsQ.js", "/assets/ProxyViewerContainer-D_2ez29e.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-C0tPTQlC.js", "/assets/ProxyViewerContainer-D_2ez29e.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/ecosystem/packages": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.packages.ts", "children": ["/api/ecosystem/packages/$packageId/help", "/api/ecosystem/packages/$packageId/install", "/api/ecosystem/packages/$packageId/runner-presets", "/api/ecosystem/packages/$packageId/upgrade"] }, "/api/ecosystem/tasks": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.tasks.ts", "children": ["/api/ecosystem/tasks/$taskId"] }, "/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/ecosystem/tasks/$taskId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.tasks.$taskId.ts" }, "/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/ecosystem/packages/$packageId/help": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.packages.$packageId.help.ts" }, "/api/ecosystem/packages/$packageId/install": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.packages.$packageId.install.ts" }, "/api/ecosystem/packages/$packageId/runner-presets": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.packages.$packageId.runner-presets.ts" }, "/api/ecosystem/packages/$packageId/upgrade": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/ecosystem.packages.$packageId.upgrade.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-2feHoEI6.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };
@@ -38,121 +38,121 @@ const assets = {
38
38
  "/assets/agent-inspector-58K1_MsC.ico": {
39
39
  "type": "image/vnd.microsoft.icon",
40
40
  "etag": '"38fa-ZD8kPABHYjPIkcH82FMY6iZM7fI"',
41
- "mtime": "2026-07-07T07:16:49.136Z",
41
+ "mtime": "2026-07-07T07:37:45.927Z",
42
42
  "size": 14586,
43
43
  "path": "../public/assets/agent-inspector-58K1_MsC.ico"
44
44
  },
45
45
  "/assets/alibaba-TTwafVwX.svg": {
46
46
  "type": "image/svg+xml",
47
47
  "etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
48
- "mtime": "2026-07-07T07:16:49.136Z",
48
+ "mtime": "2026-07-07T07:37:45.927Z",
49
49
  "size": 5915,
50
50
  "path": "../public/assets/alibaba-TTwafVwX.svg"
51
51
  },
52
- "/assets/index-DAPAWsAd.js": {
52
+ "/assets/CompareDrawer-BxLP7jmX.js": {
53
53
  "type": "text/javascript; charset=utf-8",
54
- "etag": '"74-ZZKHhoKO+55DHAA498w0K6Lm4qw"',
55
- "mtime": "2026-07-07T07:16:49.140Z",
54
+ "etag": '"4bc3-pQHdPyhcFoJS5VEN66ArtTIlZcs"',
55
+ "mtime": "2026-07-07T07:37:45.927Z",
56
+ "size": 19395,
57
+ "path": "../public/assets/CompareDrawer-BxLP7jmX.js"
58
+ },
59
+ "/assets/index-BIgsQvaF.css": {
60
+ "type": "text/css; charset=utf-8",
61
+ "etag": '"23c25-AyhoABstT65ludnAAzbIkqX0g+A"',
62
+ "mtime": "2026-07-07T07:37:45.927Z",
63
+ "size": 146469,
64
+ "path": "../public/assets/index-BIgsQvaF.css"
65
+ },
66
+ "/assets/index-DgVWrzsQ.js": {
67
+ "type": "text/javascript; charset=utf-8",
68
+ "etag": '"74-Ptr2n1hNkglfFx4nXQ7xwYjxLlU"',
69
+ "mtime": "2026-07-07T07:37:45.927Z",
56
70
  "size": 116,
57
- "path": "../public/assets/index-DAPAWsAd.js"
71
+ "path": "../public/assets/index-DgVWrzsQ.js"
58
72
  },
59
- "/assets/json-viewer-yQdhgjaw.js": {
73
+ "/assets/json-viewer-BAmkfRDE.js": {
60
74
  "type": "text/javascript; charset=utf-8",
61
- "etag": '"1ae6-/dOqzrafTSuVKqV2HeORzmyl5nQ"',
62
- "mtime": "2026-07-07T07:16:49.140Z",
75
+ "etag": '"1ae6-xWR2Y4I0qrKVEAMp6RDeLeJYGzk"',
76
+ "mtime": "2026-07-07T07:37:45.927Z",
63
77
  "size": 6886,
64
- "path": "../public/assets/json-viewer-yQdhgjaw.js"
78
+ "path": "../public/assets/json-viewer-BAmkfRDE.js"
65
79
  },
66
80
  "/assets/minimax-BPMzvuL-.jpeg": {
67
81
  "type": "image/jpeg",
68
82
  "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
69
- "mtime": "2026-07-07T07:16:49.137Z",
83
+ "mtime": "2026-07-07T07:37:45.927Z",
70
84
  "size": 6918,
71
85
  "path": "../public/assets/minimax-BPMzvuL-.jpeg"
72
86
  },
73
- "/assets/index-SuOSQb2_.js": {
87
+ "/assets/index-WiDkyjq8.js": {
74
88
  "type": "text/javascript; charset=utf-8",
75
- "etag": '"1cd2c-fcz/7fAkC94L+5g/O/yTEJNwdLM"',
76
- "mtime": "2026-07-07T07:16:49.140Z",
89
+ "etag": '"1cd2c-J6txwFjMDpeFT1J6hhzRrZ9xyaA"',
90
+ "mtime": "2026-07-07T07:37:45.927Z",
77
91
  "size": 118060,
78
- "path": "../public/assets/index-SuOSQb2_.js"
92
+ "path": "../public/assets/index-WiDkyjq8.js"
79
93
  },
80
- "/assets/ReplayDialog-BYanl-a_.js": {
94
+ "/assets/main-2feHoEI6.js": {
81
95
  "type": "text/javascript; charset=utf-8",
82
- "etag": '"3347-l7JyhtUv5PuwyRFuP/S2WhlW2vA"',
83
- "mtime": "2026-07-07T07:16:49.140Z",
84
- "size": 13127,
85
- "path": "../public/assets/ReplayDialog-BYanl-a_.js"
96
+ "etag": '"512fd-VVmFJtTQujgPm48jQL0EbnYnk3Y"',
97
+ "mtime": "2026-07-07T07:37:45.927Z",
98
+ "size": 332541,
99
+ "path": "../public/assets/main-2feHoEI6.js"
86
100
  },
87
- "/assets/CompareDrawer-CJKL4LMm.js": {
101
+ "/assets/RequestAnatomy-C9eZJN9E.js": {
88
102
  "type": "text/javascript; charset=utf-8",
89
- "etag": '"4bc3-xmP76TYJVpRr+vvy+zLDrQtQciY"',
90
- "mtime": "2026-07-07T07:16:49.140Z",
91
- "size": 19395,
92
- "path": "../public/assets/CompareDrawer-CJKL4LMm.js"
93
- },
94
- "/assets/index-DspnLqUW.css": {
95
- "type": "text/css; charset=utf-8",
96
- "etag": '"23991-XuDW77lmswcy3Fj+3lAejKbHi7M"',
97
- "mtime": "2026-07-07T07:16:49.140Z",
98
- "size": 145809,
99
- "path": "../public/assets/index-DspnLqUW.css"
103
+ "etag": '"43f2-U41d/MIHOCUxD2kBUVyFrSp3X2g"',
104
+ "mtime": "2026-07-07T07:37:45.927Z",
105
+ "size": 17394,
106
+ "path": "../public/assets/RequestAnatomy-C9eZJN9E.js"
100
107
  },
101
- "/assets/main-CgjcDxjR.js": {
108
+ "/assets/ReplayDialog-Btm-wONI.js": {
102
109
  "type": "text/javascript; charset=utf-8",
103
- "etag": '"512fd-lIDKQ2kW3Kssu+XZYoU7FG3vr/o"',
104
- "mtime": "2026-07-07T07:16:49.140Z",
105
- "size": 332541,
106
- "path": "../public/assets/main-CgjcDxjR.js"
110
+ "etag": '"3347-z8MZmK/weGipqo7s2Q7+fPscSFs"',
111
+ "mtime": "2026-07-07T07:37:45.927Z",
112
+ "size": 13127,
113
+ "path": "../public/assets/ReplayDialog-Btm-wONI.js"
107
114
  },
108
- "/assets/RequestAnatomy-DvPz1jqE.js": {
115
+ "/assets/ResponseView-9R2MW1kp.js": {
109
116
  "type": "text/javascript; charset=utf-8",
110
- "etag": '"43f2-v0SNumN4LRV0ESTSVtpSLFvrw7U"',
111
- "mtime": "2026-07-07T07:16:49.140Z",
112
- "size": 17394,
113
- "path": "../public/assets/RequestAnatomy-DvPz1jqE.js"
117
+ "etag": '"47fc-zv4sjZTOZUHS8fs7xPvI8TcizZY"',
118
+ "mtime": "2026-07-07T07:37:45.927Z",
119
+ "size": 18428,
120
+ "path": "../public/assets/ResponseView-9R2MW1kp.js"
114
121
  },
115
- "/assets/ResponseView-sZnxp9GN.js": {
122
+ "/assets/StreamingChunkSequence-zxqGpFfv.js": {
116
123
  "type": "text/javascript; charset=utf-8",
117
- "etag": '"47fc-UL48vL9KqYv1bfotBEGotFclCdc"',
118
- "mtime": "2026-07-07T07:16:49.140Z",
119
- "size": 18428,
120
- "path": "../public/assets/ResponseView-sZnxp9GN.js"
124
+ "etag": '"e95-nFwGBn96pOPzj9CzxqeWZKnF7KE"',
125
+ "mtime": "2026-07-07T07:37:45.927Z",
126
+ "size": 3733,
127
+ "path": "../public/assets/StreamingChunkSequence-zxqGpFfv.js"
121
128
  },
122
129
  "/assets/zhipuai-BPNAnxo-.svg": {
123
130
  "type": "image/svg+xml",
124
131
  "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
125
- "mtime": "2026-07-07T07:16:49.136Z",
132
+ "mtime": "2026-07-07T07:37:45.927Z",
126
133
  "size": 11256,
127
134
  "path": "../public/assets/zhipuai-BPNAnxo-.svg"
128
135
  },
129
- "/assets/StreamingChunkSequence-G-tiYiBd.js": {
130
- "type": "text/javascript; charset=utf-8",
131
- "etag": '"e95-tlk/fXLPRlYoIMbaCU9ocnm8KuQ"',
132
- "mtime": "2026-07-07T07:16:49.140Z",
133
- "size": 3733,
134
- "path": "../public/assets/StreamingChunkSequence-G-tiYiBd.js"
135
- },
136
- "/assets/_sessionId-_hDcsmXq.js": {
136
+ "/assets/_sessionId-C0tPTQlC.js": {
137
137
  "type": "text/javascript; charset=utf-8",
138
- "etag": '"36c-7689u/S8XCNOa1m8tQB02g3UHs8"',
139
- "mtime": "2026-07-07T07:16:49.140Z",
138
+ "etag": '"36c-mV3aXHj2mdIDnNvZ5pVcAuGaHLI"',
139
+ "mtime": "2026-07-07T07:37:45.927Z",
140
140
  "size": 876,
141
- "path": "../public/assets/_sessionId-_hDcsmXq.js"
141
+ "path": "../public/assets/_sessionId-C0tPTQlC.js"
142
142
  },
143
143
  "/assets/qwen-CONDcHqt.png": {
144
144
  "type": "image/png",
145
145
  "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
146
- "mtime": "2026-07-07T07:16:49.137Z",
146
+ "mtime": "2026-07-07T07:37:45.927Z",
147
147
  "size": 357059,
148
148
  "path": "../public/assets/qwen-CONDcHqt.png"
149
149
  },
150
- "/assets/ProxyViewerContainer-DBUy29O-.js": {
150
+ "/assets/ProxyViewerContainer-D_2ez29e.js": {
151
151
  "type": "text/javascript; charset=utf-8",
152
- "etag": '"b6d05-7MUF7Pf21pXPXLAoeJj+3yw5QQ4"',
153
- "mtime": "2026-07-07T07:16:49.140Z",
154
- "size": 748805,
155
- "path": "../public/assets/ProxyViewerContainer-DBUy29O-.js"
152
+ "etag": '"b6c94-hpe5c1o9ykcltAH5FoipHk35tFA"',
153
+ "mtime": "2026-07-07T07:37:45.927Z",
154
+ "size": 748692,
155
+ "path": "../public/assets/ProxyViewerContainer-D_2ez29e.js"
156
156
  }
157
157
  };
158
158
  function readAsset(id) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonyclaw/agent-inspector",
3
- "version": "3.0.9",
3
+ "version": "3.0.10",
4
4
  "type": "module",
5
5
  "description": "Agent observability and knowledge capture layer for AI coding tools.",
6
6
  "license": "MIT",
@@ -688,12 +688,20 @@ export function ProxyViewerContainer({
688
688
  const handleDeleteCurrentView = useCallback(
689
689
  async (ids: number[]): Promise<void> => {
690
690
  if (ids.length === 0) return;
691
- const idSet = new Set(ids);
691
+ const persistedIds = ids.filter((id) => Number.isInteger(id) && id >= 0);
692
+ if (persistedIds.length === 0) {
693
+ showToast({
694
+ message: "No persisted log records were found for this view.",
695
+ tone: "error",
696
+ });
697
+ return;
698
+ }
699
+ const idSet = new Set(persistedIds);
692
700
  const removed = allLogs.filter((log) => idSet.has(log.id));
693
701
  const result = await fetchJson("/api/logs", DeleteLogsResponseSchema, {
694
702
  method: "DELETE",
695
703
  headers: { "content-type": "application/json" },
696
- body: JSON.stringify({ ids }),
704
+ body: JSON.stringify({ ids: persistedIds }),
697
705
  });
698
706
 
699
707
  setAllLogs((prev) => {
@@ -31,13 +31,6 @@ import {
31
31
  providerHasContextMetadata,
32
32
  } from "../../lib/providerModelMetadata";
33
33
  import { formatContextWindowTokens } from "../../lib/utils";
34
- import {
35
- PATH_V1_CHAT_COMPLETIONS,
36
- PATH_V1_MESSAGES,
37
- PATH_V1_RESPONSES,
38
- previewUpstreamUrl,
39
- type UpstreamUrlDiagnostic,
40
- } from "../../lib/upstreamUrl";
41
34
  import type {
42
35
  ProviderFormatTestResults,
43
36
  ProviderTestErrorType as ErrorType,
@@ -225,51 +218,16 @@ function ProviderFormatTestStatus({
225
218
  );
226
219
  }
227
220
 
228
- function EndpointDiagnosticLine({
229
- diagnostic,
230
- }: {
231
- diagnostic: UpstreamUrlDiagnostic;
232
- }): JSX.Element {
233
- return (
234
- <div className={diagnostic.severity === "warning" ? "text-amber-200" : "text-muted-foreground"}>
235
- {diagnostic.message}
236
- </div>
237
- );
238
- }
239
-
240
- function ProviderEndpointSummary({
221
+ function ProviderFormatStatusBlock({
241
222
  label,
242
- baseUrl,
243
- endpoint,
244
- providerName,
245
223
  children,
246
224
  }: {
247
225
  label: string;
248
- baseUrl: string;
249
- endpoint: string;
250
- providerName: string;
251
226
  children?: ReactNode;
252
227
  }): JSX.Element {
253
- const preview = previewUpstreamUrl(baseUrl, endpoint, { providerName });
254
-
255
228
  return (
256
- <div className="flex min-w-0 flex-col gap-2 border-t border-border/60 pt-2 first:border-t-0 first:pt-0">
257
- <div className="grid min-w-0 gap-1 text-xs sm:grid-cols-[104px_minmax(0,1fr)]">
258
- <span className="font-medium text-muted-foreground">{label}</span>
259
- <code className="min-w-0 break-all font-mono text-foreground/80">{baseUrl}</code>
260
- <span className="text-[10px] uppercase text-muted-foreground/80">Final</span>
261
- <code className="min-w-0 break-all font-mono text-foreground">{preview.finalUrl}</code>
262
- </div>
263
- {preview.diagnostics.length > 0 && (
264
- <div className="space-y-1 text-xs">
265
- {preview.diagnostics.map((diagnostic) => (
266
- <EndpointDiagnosticLine
267
- key={`${diagnostic.severity}:${diagnostic.message}`}
268
- diagnostic={diagnostic}
269
- />
270
- ))}
271
- </div>
272
- )}
229
+ <div className="min-w-0 space-y-2 rounded-md border border-border/60 bg-muted/15 p-2">
230
+ <div className="text-xs font-medium text-foreground/80">{label}</div>
273
231
  {children}
274
232
  </div>
275
233
  );
@@ -293,9 +251,38 @@ function providerTestTargets(provider: ProviderConfig): string[] {
293
251
  return targets;
294
252
  }
295
253
 
296
- function ProviderTestCoverage({ provider }: { provider: ProviderConfig }): JSX.Element {
297
- const targets = providerTestTargets(provider);
298
- if (targets.length === 0) {
254
+ type CapabilityChipTone = "active" | "quiet" | "response";
255
+
256
+ function CapabilityChip({
257
+ label,
258
+ enabled,
259
+ tone,
260
+ }: {
261
+ label: string;
262
+ enabled: boolean;
263
+ tone?: CapabilityChipTone;
264
+ }): JSX.Element {
265
+ const resolvedTone: CapabilityChipTone = tone ?? (enabled ? "active" : "quiet");
266
+ const className =
267
+ resolvedTone === "response" && enabled
268
+ ? "border-sky-300/30 bg-sky-300/[0.09] text-sky-100"
269
+ : enabled
270
+ ? "border-border/70 bg-muted/25 text-foreground/80"
271
+ : "border-border/50 bg-transparent text-muted-foreground/70";
272
+ return (
273
+ <span className={`inline-flex items-center gap-1 rounded border px-1.5 py-0.5 ${className}`}>
274
+ {enabled ? <CheckCircle className="size-3" /> : <Minus className="size-3" />}
275
+ {label}
276
+ </span>
277
+ );
278
+ }
279
+
280
+ function ProviderCapabilitySummary({ provider }: { provider: ProviderConfig }): JSX.Element {
281
+ const hasAnthropic = providerHasEndpoint(provider.anthropicBaseUrl);
282
+ const hasChat = providerHasEndpoint(provider.openaiBaseUrl);
283
+ const hasResponses = providerHasEndpoint(provider.openaiResponsesBaseUrl);
284
+
285
+ if (!hasAnthropic && !hasChat && !hasResponses) {
299
286
  return (
300
287
  <div className="text-xs text-muted-foreground">
301
288
  Test requires at least one configured endpoint.
@@ -305,16 +292,15 @@ function ProviderTestCoverage({ provider }: { provider: ProviderConfig }): JSX.E
305
292
 
306
293
  return (
307
294
  <div className="flex min-w-0 flex-wrap items-center gap-1.5 text-xs text-muted-foreground">
308
- <span>Test covers</span>
309
- {targets.map((target) => (
310
- <span
311
- key={target}
312
- className="rounded border border-border/70 bg-muted/25 px-1.5 py-0.5 text-foreground/80"
313
- >
314
- {target}
315
- </span>
316
- ))}
317
- <span>non-stream + stream</span>
295
+ <span>Capabilities</span>
296
+ {hasAnthropic && <CapabilityChip label="Anthropic" enabled={true} />}
297
+ {hasChat && <CapabilityChip label="OpenAI Chat" enabled={true} />}
298
+ <CapabilityChip
299
+ label={hasResponses ? "OpenAI Responses" : "No OpenAI Responses"}
300
+ enabled={hasResponses}
301
+ tone="response"
302
+ />
303
+ <span>tested non-stream + stream</span>
318
304
  </div>
319
305
  );
320
306
  }
@@ -762,7 +748,7 @@ export function ProviderCard({
762
748
  </div>
763
749
 
764
750
  <div className="flex flex-col gap-2 text-xs text-muted-foreground sm:flex-row sm:items-center sm:justify-between">
765
- <ProviderTestCoverage provider={provider} />
751
+ <ProviderCapabilitySummary provider={provider} />
766
752
  <div className="flex flex-wrap items-center gap-2">
767
753
  <span>Key configured</span>
768
754
  <span>{provider.authHeader === "x-api-key" ? "x-api-key" : "Bearer"}</span>
@@ -838,43 +824,49 @@ export function ProviderCard({
838
824
  </div>
839
825
  )}
840
826
 
841
- {providerHasEndpoint(provider.anthropicBaseUrl) && (
842
- <ProviderEndpointSummary
843
- label="Anthropic"
844
- baseUrl={provider.anthropicBaseUrl}
845
- endpoint={PATH_V1_MESSAGES}
846
- providerName={provider.name}
847
- >
848
- {testResults !== undefined && (
849
- <ProviderFormatTestStatus results={testResults.anthropic} />
827
+ {(providerHasEndpoint(provider.anthropicBaseUrl) ||
828
+ providerHasEndpoint(provider.openaiBaseUrl) ||
829
+ providerHasEndpoint(provider.openaiResponsesBaseUrl)) && (
830
+ <div className="grid gap-2 lg:grid-cols-3">
831
+ {providerHasEndpoint(provider.anthropicBaseUrl) && (
832
+ <ProviderFormatStatusBlock label="Anthropic">
833
+ {testResults !== undefined && (
834
+ <ProviderFormatTestStatus results={testResults.anthropic} />
835
+ )}
836
+ {testResults === undefined && (
837
+ <div className="text-xs text-muted-foreground">Not tested yet</div>
838
+ )}
839
+ </ProviderFormatStatusBlock>
850
840
  )}
851
- </ProviderEndpointSummary>
852
- )}
853
841
 
854
- {providerHasEndpoint(provider.openaiBaseUrl) && (
855
- <ProviderEndpointSummary
856
- label="Chat"
857
- baseUrl={provider.openaiBaseUrl}
858
- endpoint={PATH_V1_CHAT_COMPLETIONS}
859
- providerName={provider.name}
860
- >
861
- {testResults !== undefined && (
862
- <ProviderFormatTestStatus results={testResults.openaiChat} />
842
+ {providerHasEndpoint(provider.openaiBaseUrl) && (
843
+ <ProviderFormatStatusBlock label="OpenAI Chat">
844
+ {testResults !== undefined && (
845
+ <ProviderFormatTestStatus results={testResults.openaiChat} />
846
+ )}
847
+ {testResults === undefined && (
848
+ <div className="text-xs text-muted-foreground">Not tested yet</div>
849
+ )}
850
+ </ProviderFormatStatusBlock>
863
851
  )}
864
- </ProviderEndpointSummary>
865
- )}
866
852
 
867
- {providerHasEndpoint(provider.openaiResponsesBaseUrl) && (
868
- <ProviderEndpointSummary
869
- label="Responses"
870
- baseUrl={provider.openaiResponsesBaseUrl}
871
- endpoint={PATH_V1_RESPONSES}
872
- providerName={provider.name}
873
- >
874
- {testResults !== undefined && (
875
- <ProviderFormatTestStatus results={testResults.openaiResponses} />
853
+ {providerHasEndpoint(provider.openaiResponsesBaseUrl) && (
854
+ <ProviderFormatStatusBlock label="OpenAI Responses">
855
+ {testResults !== undefined && (
856
+ <ProviderFormatTestStatus results={testResults.openaiResponses} />
857
+ )}
858
+ {testResults === undefined && (
859
+ <div className="text-xs text-muted-foreground">Not tested yet</div>
860
+ )}
861
+ </ProviderFormatStatusBlock>
876
862
  )}
877
- </ProviderEndpointSummary>
863
+
864
+ {!providerHasEndpoint(provider.openaiResponsesBaseUrl) && (
865
+ <div className="min-w-0 rounded-md border border-border/50 bg-transparent p-2 text-xs text-muted-foreground/75">
866
+ OpenAI Responses not configured
867
+ </div>
868
+ )}
869
+ </div>
878
870
  )}
879
871
 
880
872
  {testResults?.models !== undefined && Object.keys(testResults.models).length > 0 && (
@@ -535,7 +535,7 @@ export function ProvidersPanel({
535
535
  if (showForm || editingProvider) {
536
536
  return (
537
537
  <div className="space-y-4">
538
- <div className="border border-border bg-background/95 shadow-sm sticky top-0 z-10 flex items-center justify-between rounded-[8px] px-3 py-2">
538
+ <div className="sticky top-0 z-10 flex items-center justify-between gap-3 rounded-[8px] bg-background/95 px-1 py-1 backdrop-blur">
539
539
  <h3 className="text-lg font-medium">
540
540
  {editingProvider ? "Edit Provider" : "Add New Provider"}
541
541
  </h3>
@@ -554,7 +554,7 @@ export function ProvidersPanel({
554
554
 
555
555
  return (
556
556
  <div className="space-y-4">
557
- <div className="border border-border bg-background/95 shadow-sm sticky top-0 z-10 flex items-center justify-between rounded-[8px] px-3 py-2">
557
+ <div className="sticky top-0 z-10 flex items-center justify-between gap-3 rounded-[8px] bg-background/95 px-1 py-1 backdrop-blur">
558
558
  <h3 className="text-lg font-medium">Providers</h3>
559
559
  <div className="flex items-center gap-2">
560
560
  <TooltipProvider>
@@ -622,7 +622,7 @@ export function ProvidersPanel({
622
622
  </div>
623
623
 
624
624
  {configPath !== null && (
625
- <div className="border border-border bg-card shadow-sm flex items-center gap-2 rounded-[8px] px-3 py-2 text-xs text-muted-foreground">
625
+ <div className="flex items-center gap-2 rounded-[8px] bg-muted/15 px-3 py-2 text-xs text-muted-foreground">
626
626
  <span className="shrink-0">Config:</span>
627
627
  <span className="font-mono truncate" title={configPath}>
628
628
  {configPath}
@@ -674,7 +674,7 @@ export function ProvidersPanel({
674
674
  </div>
675
675
  ) : (
676
676
  <div className="space-y-3">
677
- <div className="border border-border bg-muted/40 flex gap-1 rounded-[8px] p-1">
677
+ <div className="inline-flex w-fit gap-1 rounded-[8px] bg-muted/20 p-1">
678
678
  {(["all", "personal", "company"] as const).map((tab) => (
679
679
  <TooltipProvider key={tab}>
680
680
  <Tooltip>
@@ -682,10 +682,10 @@ export function ProvidersPanel({
682
682
  <button
683
683
  type="button"
684
684
  onClick={() => setSourceFilter(tab)}
685
- className={`px-3 py-2 text-sm font-medium border-b-2 transition-colors ${
685
+ className={`rounded-md px-3 py-1.5 text-sm font-medium transition-colors ${
686
686
  sourceFilter === tab
687
- ? "border-primary text-primary"
688
- : "border-transparent text-muted-foreground hover:text-foreground"
687
+ ? "bg-background text-foreground shadow-sm"
688
+ : "text-muted-foreground hover:text-foreground"
689
689
  }`}
690
690
  >
691
691
  {tab === "all" ? "All" : tab === "personal" ? "Personal" : "Company"}