@tonyclaw/agent-inspector 2.1.16 → 2.1.18

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 (55) hide show
  1. package/.output/cli.js +57 -13
  2. package/.output/nitro.json +1 -1
  3. package/.output/public/assets/{CompareDrawer-Ccrrcx1j.js → CompareDrawer-Fqqw5Lci.js} +1 -1
  4. package/.output/public/assets/ProxyViewerContainer-CP_RzwW9.js +106 -0
  5. package/.output/public/assets/{ReplayDialog-C7axhr-l.js → ReplayDialog-hYhz_i6W.js} +1 -1
  6. package/.output/public/assets/{RequestAnatomy-WOptg8j_.js → RequestAnatomy-CTuWbtwC.js} +1 -1
  7. package/.output/public/assets/{ResponseView-CSAcxh_M.js → ResponseView-CsZ7S5Gv.js} +2 -2
  8. package/.output/public/assets/{StreamingChunkSequence-DJS5KhPx.js → StreamingChunkSequence-PIbJMotU.js} +1 -1
  9. package/.output/public/assets/_sessionId-CUGA9qU3.js +1 -0
  10. package/.output/public/assets/{index-DMPNh46t.js → index-F7mynwuH.js} +1 -1
  11. package/.output/public/assets/index-G4dTUobw.js +1 -0
  12. package/.output/public/assets/index-gvYkgMPF.css +1 -0
  13. package/.output/public/assets/{json-viewer-inX5QSa3.js → json-viewer-DCXtNmmD.js} +1 -1
  14. package/.output/public/assets/{main-aCAKYGSD.js → main-BJZf7_Ib.js} +2 -2
  15. package/.output/server/_libs/lucide-react.mjs +220 -202
  16. package/.output/server/{_sessionId-C0fhvQnn.mjs → _sessionId-DjSHDNh8.mjs} +2 -2
  17. package/.output/server/_ssr/{CompareDrawer-CO-Ti5sg.mjs → CompareDrawer-Dal52IFo.mjs} +3 -3
  18. package/.output/server/_ssr/{ProxyViewerContainer-N4J7uBCX.mjs → ProxyViewerContainer-CVqFZGff.mjs} +1833 -1366
  19. package/.output/server/_ssr/{ReplayDialog-J1VxC0In.mjs → ReplayDialog-BOEgdMes.mjs} +4 -4
  20. package/.output/server/_ssr/{RequestAnatomy-DBH-F3rq.mjs → RequestAnatomy-gch7_vCV.mjs} +2 -2
  21. package/.output/server/_ssr/{ResponseView-DLFwV7Hd.mjs → ResponseView-lEWPy-H4.mjs} +3 -3
  22. package/.output/server/_ssr/{StreamingChunkSequence-BywmuND0.mjs → StreamingChunkSequence-DnudbJ1O.mjs} +2 -2
  23. package/.output/server/_ssr/{index-CStymIc0.mjs → index-Cza8zDrW.mjs} +2 -2
  24. package/.output/server/_ssr/index.mjs +2 -2
  25. package/.output/server/_ssr/{json-viewer-DlQu0N1x.mjs → json-viewer-C2lIVEX3.mjs} +3 -3
  26. package/.output/server/_ssr/{router-CQ4Zxhmr.mjs → router-bF9uzd1k.mjs} +939 -113
  27. package/.output/server/{_tanstack-start-manifest_v-BHeJBGfo.mjs → _tanstack-start-manifest_v-ErvW-mtr.mjs} +1 -1
  28. package/.output/server/index.mjs +74 -74
  29. package/README.md +57 -2
  30. package/package.json +1 -1
  31. package/src/cli/startupOutput.ts +16 -0
  32. package/src/cli.ts +61 -15
  33. package/src/components/ProxyViewer.tsx +395 -64
  34. package/src/components/providers/ProviderCard.tsx +132 -31
  35. package/src/components/providers/ProviderForm.tsx +43 -11
  36. package/src/components/providers/ProvidersPanel.tsx +1 -1
  37. package/src/components/proxy-viewer/ConversationHeader.tsx +133 -112
  38. package/src/components/proxy-viewer/LogEntry.tsx +109 -26
  39. package/src/components/proxy-viewer/LogEntryHeader.tsx +339 -329
  40. package/src/components/proxy-viewer/ThreadConnector.tsx +49 -46
  41. package/src/components/proxy-viewer/TurnGroup.tsx +22 -62
  42. package/src/components/proxy-viewer/bodyHydration.ts +56 -0
  43. package/src/lib/providerTestContract.ts +56 -10
  44. package/src/lib/providerTestPrompt.ts +23 -1
  45. package/src/lib/upstreamUrl.ts +105 -1
  46. package/src/mcp/server.ts +275 -0
  47. package/src/mcp/toolHandlers.ts +381 -4
  48. package/src/proxy/logSearch.ts +3 -0
  49. package/src/proxy/store.ts +40 -15
  50. package/src/routes/api/logs.ts +8 -2
  51. package/src/routes/api/providers.$providerId.test.log.ts +85 -10
  52. package/.output/public/assets/ProxyViewerContainer-DLqClc9A.js +0 -106
  53. package/.output/public/assets/_sessionId-DUSalzKH.js +0 -1
  54. package/.output/public/assets/index-BPpA21dY.css +0 -1
  55. package/.output/public/assets/index-Bt0Az2I2.js +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/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-aCAKYGSD.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-Bt0Az2I2.js", "/assets/ProxyViewerContainer-DLqClc9A.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-DUSalzKH.js", "/assets/ProxyViewerContainer-DLqClc9A.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-aCAKYGSD.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-BJZf7_Ib.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-G4dTUobw.js", "/assets/ProxyViewerContainer-CP_RzwW9.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-CUGA9qU3.js", "/assets/ProxyViewerContainer-CP_RzwW9.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-BJZf7_Ib.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };
@@ -35,117 +35,117 @@ const headers = ((m) => function headersRouteRule(event) {
35
35
  }
36
36
  });
37
37
  const assets = {
38
+ "/assets/index-G4dTUobw.js": {
39
+ "type": "text/javascript; charset=utf-8",
40
+ "etag": '"74-G+Wy36aQXMFWtM2juvBC91P1cPo"',
41
+ "mtime": "2026-07-06T03:16:09.580Z",
42
+ "size": 116,
43
+ "path": "../public/assets/index-G4dTUobw.js"
44
+ },
45
+ "/assets/CompareDrawer-Fqqw5Lci.js": {
46
+ "type": "text/javascript; charset=utf-8",
47
+ "etag": '"4bbf-d+KiMwQK8csZD6MZwqm5WH3tl0Y"',
48
+ "mtime": "2026-07-06T03:16:09.580Z",
49
+ "size": 19391,
50
+ "path": "../public/assets/CompareDrawer-Fqqw5Lci.js"
51
+ },
52
+ "/assets/json-viewer-DCXtNmmD.js": {
53
+ "type": "text/javascript; charset=utf-8",
54
+ "etag": '"1ae6-xXyRZMiLYae+0u65mVJT2bBjIGw"',
55
+ "mtime": "2026-07-06T03:16:09.581Z",
56
+ "size": 6886,
57
+ "path": "../public/assets/json-viewer-DCXtNmmD.js"
58
+ },
59
+ "/assets/index-F7mynwuH.js": {
60
+ "type": "text/javascript; charset=utf-8",
61
+ "etag": '"1cd2c-9hK4Mmn22geAPkEXOQqANliuMiA"',
62
+ "mtime": "2026-07-06T03:16:09.581Z",
63
+ "size": 118060,
64
+ "path": "../public/assets/index-F7mynwuH.js"
65
+ },
38
66
  "/assets/alibaba-TTwafVwX.svg": {
39
67
  "type": "image/svg+xml",
40
68
  "etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
41
- "mtime": "2026-07-04T10:05:47.048Z",
69
+ "mtime": "2026-07-06T03:16:09.580Z",
42
70
  "size": 5915,
43
71
  "path": "../public/assets/alibaba-TTwafVwX.svg"
44
72
  },
45
- "/assets/index-Bt0Az2I2.js": {
73
+ "/assets/index-gvYkgMPF.css": {
74
+ "type": "text/css; charset=utf-8",
75
+ "etag": '"21e71-A0ehAqTWzWPsd1GM1PqrHVOH5uQ"',
76
+ "mtime": "2026-07-06T03:16:09.580Z",
77
+ "size": 138865,
78
+ "path": "../public/assets/index-gvYkgMPF.css"
79
+ },
80
+ "/assets/ReplayDialog-hYhz_i6W.js": {
46
81
  "type": "text/javascript; charset=utf-8",
47
- "etag": '"74-B8h6nEZ6xhH+NvH5fLgAfifs1Wo"',
48
- "mtime": "2026-07-04T10:05:47.053Z",
49
- "size": 116,
50
- "path": "../public/assets/index-Bt0Az2I2.js"
82
+ "etag": '"31d6-OuYMx1ZLYauLqe18liRlIWPThkk"',
83
+ "mtime": "2026-07-06T03:16:09.580Z",
84
+ "size": 12758,
85
+ "path": "../public/assets/ReplayDialog-hYhz_i6W.js"
51
86
  },
52
87
  "/assets/minimax-BPMzvuL-.jpeg": {
53
88
  "type": "image/jpeg",
54
89
  "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
55
- "mtime": "2026-07-04T10:05:47.053Z",
90
+ "mtime": "2026-07-06T03:16:09.580Z",
56
91
  "size": 6918,
57
92
  "path": "../public/assets/minimax-BPMzvuL-.jpeg"
58
93
  },
59
- "/assets/CompareDrawer-Ccrrcx1j.js": {
94
+ "/assets/RequestAnatomy-CTuWbtwC.js": {
60
95
  "type": "text/javascript; charset=utf-8",
61
- "etag": '"4bbf-AzbtyRi3tivEhYaInvBN58Oehq4"',
62
- "mtime": "2026-07-04T10:05:47.054Z",
63
- "size": 19391,
64
- "path": "../public/assets/CompareDrawer-Ccrrcx1j.js"
65
- },
66
- "/assets/json-viewer-inX5QSa3.js": {
67
- "type": "text/javascript; charset=utf-8",
68
- "etag": '"1ae6-iCGT+KIacyb7JjsrgCNnQJe7XnM"',
69
- "mtime": "2026-07-04T10:05:47.054Z",
70
- "size": 6886,
71
- "path": "../public/assets/json-viewer-inX5QSa3.js"
72
- },
73
- "/assets/index-BPpA21dY.css": {
74
- "type": "text/css; charset=utf-8",
75
- "etag": '"21572-4x3h7uJe9GjUQrElMl6CynZzzYQ"',
76
- "mtime": "2026-07-04T10:05:47.053Z",
77
- "size": 136562,
78
- "path": "../public/assets/index-BPpA21dY.css"
96
+ "etag": '"43f2-HeCHVsZF7BGYCBIXpjAKkOh4F44"',
97
+ "mtime": "2026-07-06T03:16:09.580Z",
98
+ "size": 17394,
99
+ "path": "../public/assets/RequestAnatomy-CTuWbtwC.js"
79
100
  },
80
- "/assets/main-aCAKYGSD.js": {
101
+ "/assets/main-BJZf7_Ib.js": {
81
102
  "type": "text/javascript; charset=utf-8",
82
- "etag": '"512fd-7QxvHG1P5/02gNzixphN5OZxSTY"',
83
- "mtime": "2026-07-04T10:05:47.053Z",
103
+ "etag": '"512fd-EJOXBMERSrzfgsfzj0SamtIRX6k"',
104
+ "mtime": "2026-07-06T03:16:09.580Z",
84
105
  "size": 332541,
85
- "path": "../public/assets/main-aCAKYGSD.js"
86
- },
87
- "/assets/index-DMPNh46t.js": {
88
- "type": "text/javascript; charset=utf-8",
89
- "etag": '"1cd2c-Z2sMQnhpb/jicWeGFyP2+Thsl/0"',
90
- "mtime": "2026-07-04T10:05:47.054Z",
91
- "size": 118060,
92
- "path": "../public/assets/index-DMPNh46t.js"
106
+ "path": "../public/assets/main-BJZf7_Ib.js"
93
107
  },
94
- "/assets/StreamingChunkSequence-DJS5KhPx.js": {
108
+ "/assets/ResponseView-CsZ7S5Gv.js": {
95
109
  "type": "text/javascript; charset=utf-8",
96
- "etag": '"dd6-xnCwSKh/fDqCqLrlcNR3AqgRcsU"',
97
- "mtime": "2026-07-04T10:05:47.054Z",
98
- "size": 3542,
99
- "path": "../public/assets/StreamingChunkSequence-DJS5KhPx.js"
100
- },
101
- "/assets/ResponseView-CSAcxh_M.js": {
102
- "type": "text/javascript; charset=utf-8",
103
- "etag": '"3fbb-4Ii+xEd6irkE8DKu6WG8Fe+gu/s"',
104
- "mtime": "2026-07-04T10:05:47.053Z",
110
+ "etag": '"3fbb-A01k3vtoURXRqFZpUM7nvhzCzXk"',
111
+ "mtime": "2026-07-06T03:16:09.580Z",
105
112
  "size": 16315,
106
- "path": "../public/assets/ResponseView-CSAcxh_M.js"
107
- },
108
- "/assets/RequestAnatomy-WOptg8j_.js": {
109
- "type": "text/javascript; charset=utf-8",
110
- "etag": '"43f2-ji37b8zi45gOVGzjVphiUSQLy3o"',
111
- "mtime": "2026-07-04T10:05:47.054Z",
112
- "size": 17394,
113
- "path": "../public/assets/RequestAnatomy-WOptg8j_.js"
114
- },
115
- "/assets/_sessionId-DUSalzKH.js": {
116
- "type": "text/javascript; charset=utf-8",
117
- "etag": '"d2-s3mJmPBLPnJiXj50aaxEzeF/OiY"',
118
- "mtime": "2026-07-04T10:05:47.053Z",
119
- "size": 210,
120
- "path": "../public/assets/_sessionId-DUSalzKH.js"
113
+ "path": "../public/assets/ResponseView-CsZ7S5Gv.js"
121
114
  },
122
- "/assets/ReplayDialog-C7axhr-l.js": {
115
+ "/assets/StreamingChunkSequence-PIbJMotU.js": {
123
116
  "type": "text/javascript; charset=utf-8",
124
- "etag": '"31d6-xZReaVWcvkK8stU66OojK5fMPo0"',
125
- "mtime": "2026-07-04T10:05:47.053Z",
126
- "size": 12758,
127
- "path": "../public/assets/ReplayDialog-C7axhr-l.js"
117
+ "etag": '"dd6-8dNqFVPNQt96Q6ov5fmug8gHPJg"',
118
+ "mtime": "2026-07-06T03:16:09.580Z",
119
+ "size": 3542,
120
+ "path": "../public/assets/StreamingChunkSequence-PIbJMotU.js"
128
121
  },
129
122
  "/assets/zhipuai-BPNAnxo-.svg": {
130
123
  "type": "image/svg+xml",
131
124
  "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
132
- "mtime": "2026-07-04T10:05:47.053Z",
125
+ "mtime": "2026-07-06T03:16:09.580Z",
133
126
  "size": 11256,
134
127
  "path": "../public/assets/zhipuai-BPNAnxo-.svg"
135
128
  },
129
+ "/assets/_sessionId-CUGA9qU3.js": {
130
+ "type": "text/javascript; charset=utf-8",
131
+ "etag": '"d2-EbzgICXvZ7UjgIxAGZVoJ8zc0C4"',
132
+ "mtime": "2026-07-06T03:16:09.580Z",
133
+ "size": 210,
134
+ "path": "../public/assets/_sessionId-CUGA9qU3.js"
135
+ },
136
136
  "/assets/qwen-CONDcHqt.png": {
137
137
  "type": "image/png",
138
138
  "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
139
- "mtime": "2026-07-04T10:05:47.053Z",
139
+ "mtime": "2026-07-06T03:16:09.580Z",
140
140
  "size": 357059,
141
141
  "path": "../public/assets/qwen-CONDcHqt.png"
142
142
  },
143
- "/assets/ProxyViewerContainer-DLqClc9A.js": {
143
+ "/assets/ProxyViewerContainer-CP_RzwW9.js": {
144
144
  "type": "text/javascript; charset=utf-8",
145
- "etag": '"aba93-QnYCVCb3u5RqCGaIkpeQG13EYAw"',
146
- "mtime": "2026-07-04T10:05:47.054Z",
147
- "size": 703123,
148
- "path": "../public/assets/ProxyViewerContainer-DLqClc9A.js"
145
+ "etag": '"ae2dd-gQKBSF7KRrPg0IO5skof4vGzHH0"',
146
+ "mtime": "2026-07-06T03:16:09.581Z",
147
+ "size": 713437,
148
+ "path": "../public/assets/ProxyViewerContainer-CP_RzwW9.js"
149
149
  }
150
150
  };
151
151
  function readAsset(id) {
package/README.md CHANGED
@@ -6,7 +6,8 @@ The npm package and CLI remain `agent-inspector`; the platform name is Agent Ins
6
6
 
7
7
  ## What It Does
8
8
 
9
- - Runs a local transparent proxy for Anthropic and OpenAI-compatible APIs.
9
+ - Runs a local transparent proxy for Anthropic and OpenAI-compatible APIs, including OpenAI Chat
10
+ Completions and Responses paths.
10
11
  - Captures model requests, responses, tool definitions, token usage, and errors.
11
12
  - Provides a web UI for browsing sessions and logs in real time.
12
13
  - Exposes sessions, logs, runs, and evidence packs through MCP Tools, Resources, and Prompts.
@@ -125,7 +126,19 @@ Then point an AI coding tool at the proxy:
125
126
  ANTHROPIC_BASE_URL=http://localhost:25947/proxy <tool>
126
127
  ```
127
128
 
128
- The web UI runs at http://localhost:25947.
129
+ The web UI runs at http://localhost:25947. The public proxy endpoint is also
130
+ `http://localhost:25947/proxy`; internally Agent Inspector may run the app on a private helper port,
131
+ but AI tools should use the public URL printed by the CLI.
132
+
133
+ For Codex-style OpenAI Responses clients, configure the proxy as an OpenAI-compatible `/v1` base:
134
+
135
+ ```toml
136
+ model_provider = "agent-inspector"
137
+
138
+ [model_providers."agent-inspector"]
139
+ base_url = "http://127.0.0.1:25947/proxy/v1"
140
+ wire_api = "responses"
141
+ ```
129
142
 
130
143
  ## Documentation Map
131
144
 
@@ -166,6 +179,48 @@ can also set `AGENT_INSPECTOR_MODE=full` or
166
179
  `AGENT_INSPECTOR_CAPTURE_MODE=full`; the CLI flag takes precedence over the
167
180
  environment.
168
181
 
182
+ ## Provider URLs And Responses
183
+
184
+ Provider URL fields are base URLs. The UI shows the immutable API suffix next to each input and a
185
+ `Final URL` preview beneath it, using the same upstream URL builder that the proxy uses at runtime.
186
+ This makes path mistakes visible before saving the Provider.
187
+
188
+ | Provider field | Enter this kind of base URL | Runtime suffix |
189
+ | --- | --- | --- |
190
+ | Anthropic Base URL | `https://api.anthropic.com` | `/v1/messages` |
191
+ | OpenAI Chat Base URL | `https://api.openai.com` | `/v1/chat/completions` |
192
+ | OpenAI Responses Base URL | `https://api.openai.com` | `/v1/responses` |
193
+
194
+ Existing configurations that already store a full endpoint stay compatible. For example,
195
+ `https://api.minimaxi.com/v1/responses` remains exactly that for Responses requests; Agent Inspector
196
+ does not append `/v1/responses` a second time. Bases that already end in `/v1` also avoid `/v1/v1`
197
+ duplication.
198
+
199
+ MiniMax supports both OpenAI-compatible endpoints:
200
+
201
+ ```text
202
+ https://api.minimaxi.com/v1/chat/completions
203
+ https://api.minimaxi.com/v1/responses
204
+ ```
205
+
206
+ In the Provider UI, enter `https://api.minimaxi.com` as the OpenAI Chat and OpenAI Responses base;
207
+ the preview will show the final endpoint with the suffix appended. DeepSeek's official API supports
208
+ OpenAI Chat Completions but does not currently expose OpenAI Responses, so leave the Responses URL
209
+ empty for DeepSeek unless you are routing through a compatible gateway.
210
+
211
+ The proxy chooses protocol by request path, not by Provider name:
212
+
213
+ | Client-facing path | Parsed as |
214
+ | --- | --- |
215
+ | `/proxy/v1/messages` | Anthropic |
216
+ | `/proxy/v1/chat/completions` | OpenAI Chat Completions |
217
+ | `/proxy/v1/responses` | OpenAI Responses |
218
+
219
+ Provider Test runs configured endpoints independently: Anthropic, OpenAI Chat Completions, and
220
+ OpenAI Responses each get separate non-streaming and streaming probes. Test evidence is written into
221
+ a provider-specific Session so the UI can show which exact path, payload shape, status code, and
222
+ upstream URL failed.
223
+
169
224
  ## MCP Evidence Workflows
170
225
 
171
226
  Agent Inspector exposes MCP at:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonyclaw/agent-inspector",
3
- "version": "2.1.16",
3
+ "version": "2.1.18",
4
4
  "type": "module",
5
5
  "description": "Agent observability and knowledge capture layer for AI coding tools.",
6
6
  "license": "MIT",
@@ -0,0 +1,16 @@
1
+ export type ServerOutputFilterContext = {
2
+ enableIdentityProxy: boolean;
3
+ publicPort: number;
4
+ upstreamPort: number;
5
+ };
6
+
7
+ export function shouldSuppressServerOutputLine(
8
+ line: string,
9
+ context: ServerOutputFilterContext,
10
+ ): boolean {
11
+ if (!context.enableIdentityProxy) return false;
12
+ if (context.publicPort === context.upstreamPort) return false;
13
+
14
+ const lowerLine = line.toLowerCase();
15
+ return lowerLine.includes("listening on") && lowerLine.includes(`:${context.upstreamPort}`);
16
+ }
package/src/cli.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  #!/usr/bin/env node
2
+ import { Buffer } from "node:buffer";
2
3
  import { spawn, execSync, type ChildProcess } from "node:child_process";
3
4
  import { createConnection } from "node:net";
4
5
  import { fileURLToPath } from "node:url";
5
6
  import { dirname, join, resolve as resolvePath } from "node:path";
6
7
  import { existsSync } from "node:fs";
8
+ import type { Readable, Writable } from "node:stream";
7
9
  import {
8
10
  formatAccessHintLines,
9
11
  isValidBindHost,
@@ -12,6 +14,10 @@ import {
12
14
  probeHostForBindHost,
13
15
  urlForHost,
14
16
  } from "./cli/networkHints.js";
17
+ import {
18
+ shouldSuppressServerOutputLine,
19
+ type ServerOutputFilterContext,
20
+ } from "./cli/startupOutput.js";
15
21
  import { startIdentityProxy } from "./proxy/identityProxy.js";
16
22
 
17
23
  const __filename = fileURLToPath(import.meta.url);
@@ -167,6 +173,38 @@ function waitForProcessExit(child: ChildProcess): Promise<number> {
167
173
  });
168
174
  }
169
175
 
176
+ function pipeServerOutput(child: ChildProcess, context: ServerOutputFilterContext): void {
177
+ pipeServerOutputStream(child.stdout, process.stdout, context);
178
+ pipeServerOutputStream(child.stderr, process.stderr, context);
179
+ }
180
+
181
+ function pipeServerOutputStream(
182
+ stream: Readable | null,
183
+ target: Writable,
184
+ context: ServerOutputFilterContext,
185
+ ): void {
186
+ if (stream === null) return;
187
+
188
+ let buffered = "";
189
+ stream.on("data", (chunk: unknown) => {
190
+ const text = Buffer.isBuffer(chunk) ? chunk.toString("utf8") : String(chunk);
191
+ const lines = `${buffered}${text}`.split(/\r?\n/);
192
+ buffered = lines.pop() ?? "";
193
+ for (const line of lines) {
194
+ if (!shouldSuppressServerOutputLine(line, context)) {
195
+ target.write(`${line}\n`);
196
+ }
197
+ }
198
+ });
199
+ stream.on("end", () => {
200
+ if (buffered.length === 0) return;
201
+ if (!shouldSuppressServerOutputLine(buffered, context)) {
202
+ target.write(buffered);
203
+ }
204
+ buffered = "";
205
+ });
206
+ }
207
+
170
208
  type ServerCommand = {
171
209
  command: string;
172
210
  args: string[];
@@ -485,10 +523,14 @@ async function runStart(args: string[]): Promise<void> {
485
523
  }
486
524
 
487
525
  if (forceRestart) {
488
- killProcessOnPort(port);
526
+ const restartPorts = new Set<number>();
527
+ restartPorts.add(port);
489
528
  if (enableIdentityProxy) {
490
- killProcessOnPort(identityProxyPort);
491
- killProcessOnPort(upstreamPort);
529
+ restartPorts.add(identityProxyPort);
530
+ restartPorts.add(upstreamPort);
531
+ }
532
+ for (const targetPort of restartPorts) {
533
+ killProcessOnPort(targetPort);
492
534
  }
493
535
  }
494
536
 
@@ -554,11 +596,18 @@ async function runStart(args: string[]): Promise<void> {
554
596
  }
555
597
  serverEnv["AGENT_INSPECTOR_CAPTURE_MODE"] = captureMode;
556
598
  const serverProcess = spawn(serverCommand.command, serverCommand.args, {
557
- stdio: background ? ["ignore", "ignore", "ignore"] : "inherit",
599
+ stdio: background ? ["ignore", "ignore", "ignore"] : ["ignore", "pipe", "pipe"],
558
600
  detached: background,
559
601
  env: serverEnv,
560
602
  windowsHide: background,
561
603
  });
604
+ if (!background) {
605
+ pipeServerOutput(serverProcess, {
606
+ enableIdentityProxy,
607
+ publicPort: port,
608
+ upstreamPort,
609
+ });
610
+ }
562
611
 
563
612
  // Identity proxy — a native Node HTTP server that sits in front of
564
613
  // TanStack Start and looks up each client's PID via the OS connection
@@ -597,20 +646,17 @@ async function runStart(args: string[]): Promise<void> {
597
646
  return;
598
647
  }
599
648
 
649
+ if (identityProxy !== null) {
650
+ console.log(``);
651
+ console.log(`Identity proxy ready at ${url} (PID-attributing public entrypoint).`);
652
+ if (upstreamPort !== port) {
653
+ console.log(` Internal runtime port ${upstreamPort} is hidden behind the public proxy.`);
654
+ }
655
+ }
656
+
600
657
  process.exitCode = await waitForProcessExit(serverProcess);
601
658
 
602
- // Foreground path: print the smart-port hint now that the proxy is up,
603
- // then keep the proxy alive until the server exits.
604
659
  if (identityProxy !== null) {
605
- console.log(
606
- ``,
607
- `Identity proxy is listening on port ${identityProxyPort}:`,
608
- ` Route AI coding tools through the identity proxy for accurate PID attribution:`,
609
- ` Claude Code: ANTHROPIC_BASE_URL=http://localhost:${identityProxyPort}/proxy claude`,
610
- ` OpenCode: LLM_BASE_URL=http://localhost:${identityProxyPort}/proxy opencode`,
611
- ` MiMo Code: OPENAI_BASE_URL=http://localhost:${identityProxyPort}/proxy mimo`,
612
- ` Direct port ${port} still works (falls back to OS-scan heuristic).`,
613
- );
614
660
  await new Promise<void>((resolve) => identityProxy.close(() => resolve()));
615
661
  }
616
662
  }