@tonyclaw/agent-inspector 3.0.7 → 3.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.output/cli.js +245 -171
- package/.output/nitro.json +1 -1
- package/.output/public/assets/{CompareDrawer-C0Kbsm-Q.js → CompareDrawer-Bth_Ywyt.js} +1 -1
- package/.output/public/assets/ProxyViewerContainer-C73EU9Jq.js +106 -0
- package/.output/public/assets/ReplayDialog-C2YYAuTe.js +1 -0
- package/.output/public/assets/{RequestAnatomy-fa0JXy5p.js → RequestAnatomy-8k9dAX2j.js} +1 -1
- package/.output/public/assets/ResponseView-DEL6JcXm.js +3 -0
- package/.output/public/assets/StreamingChunkSequence-DngmoR9j.js +1 -0
- package/.output/public/assets/{_sessionId-D5fYH2C0.js → _sessionId-4vk9RMZ5.js} +1 -1
- package/.output/public/assets/index-DBEB1rHe.css +1 -0
- package/.output/public/assets/{index-BEsqvywM.js → index-DINLvnm9.js} +1 -1
- package/.output/public/assets/index-LPIGiUMP.js +1 -0
- package/.output/public/assets/{json-viewer-B0QRbMSf.js → json-viewer-CH5dvS2Y.js} +1 -1
- package/.output/public/assets/{main-CuKZD7n0.js → main-GWkZn4xy.js} +2 -2
- package/.output/server/{_sessionId-DdBTK3qm.mjs → _sessionId-EgsjdkN7.mjs} +3 -3
- package/.output/server/_ssr/{CompareDrawer-m82cVZ73.mjs → CompareDrawer-CaM8FYuD.mjs} +2 -2
- package/.output/server/_ssr/{ProxyViewerContainer-7geuf78f.mjs → ProxyViewerContainer-EJIogcGd.mjs} +545 -309
- package/.output/server/_ssr/{ReplayDialog-B8RlWLLH.mjs → ReplayDialog-BPpJ2-q8.mjs} +58 -23
- package/.output/server/_ssr/{RequestAnatomy-BE7pmwpv.mjs → RequestAnatomy-DeQAWnZx.mjs} +2 -2
- package/.output/server/_ssr/{ResponseView-D-sDsdQr.mjs → ResponseView-Dshm8iQ7.mjs} +2 -2
- package/.output/server/_ssr/{StreamingChunkSequence-DU_hThJr.mjs → StreamingChunkSequence-32yIU2hn.mjs} +30 -20
- package/.output/server/_ssr/{index-D0sV8UbE.mjs → index-XRcx9blU.mjs} +2 -2
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{json-viewer-CaDh1zrw.mjs → json-viewer-C0aX5rqC.mjs} +2 -2
- package/.output/server/_ssr/{router-Zh2iZ_u0.mjs → router-BI-Mvxz9.mjs} +441 -172
- package/.output/server/_tanstack-start-manifest_v-jKScklL_.mjs +4 -0
- package/.output/server/index.mjs +71 -71
- package/package.json +1 -1
- package/src/assets/IDE/opencode.svg +1 -1
- package/src/assets/IDE/xiaomimimo.svg +1 -1
- package/src/cli/detect-tools.ts +2 -27
- package/src/cli/templates/codex-skill-onboard.ts +1 -1
- package/src/cli/templates/skill-onboard.ts +2 -3
- package/src/cli.ts +9 -86
- package/src/components/ProxyViewer.tsx +55 -8
- package/src/components/ProxyViewerContainer.tsx +30 -19
- package/src/components/clients/ClientLogo.tsx +22 -2
- package/src/components/ecosystem/AgentLabDialog.tsx +204 -3
- package/src/components/groups/GroupsDialog.tsx +28 -40
- package/src/components/providers/ImportWizardDialog.tsx +51 -101
- package/src/components/providers/ProvidersPanel.tsx +82 -68
- package/src/components/providers/SettingsDialog.tsx +11 -12
- package/src/components/proxy-viewer/AgentTraceSummary.tsx +15 -23
- package/src/components/proxy-viewer/ReplayDialog.tsx +65 -22
- package/src/components/proxy-viewer/StreamingChunkSequence.tsx +33 -20
- package/src/lib/apiClient.ts +43 -10
- package/src/lib/ecosystemContract.ts +32 -0
- package/src/lib/export-logs.ts +37 -3
- package/src/proxy/ecosystemRegistry.ts +244 -0
- package/src/proxy/ecosystemTasks.ts +153 -0
- package/src/proxy/platformCommands.ts +212 -0
- package/src/proxy/socketTracker.ts +84 -143
- package/src/routes/api/ecosystem.packages.$packageId.help.ts +16 -0
- package/src/routes/api/ecosystem.packages.$packageId.install.ts +16 -0
- package/src/routes/api/ecosystem.packages.$packageId.runner-presets.ts +19 -0
- package/src/routes/api/ecosystem.packages.$packageId.upgrade.ts +16 -0
- package/src/routes/api/ecosystem.packages.ts +1 -248
- package/src/routes/api/ecosystem.tasks.$taskId.ts +16 -0
- package/src/routes/api/ecosystem.tasks.ts +12 -0
- package/.output/public/assets/ProxyViewerContainer-p-rpYyiF.js +0 -106
- package/.output/public/assets/ReplayDialog-CM3dhP8v.js +0 -1
- package/.output/public/assets/ResponseView-Bq6sC7Ay.js +0 -3
- package/.output/public/assets/StreamingChunkSequence-CGOun3Df.js +0 -1
- package/.output/public/assets/index-C29Olfzt.js +0 -1
- package/.output/public/assets/index-DgANE0r3.css +0 -1
- package/.output/server/_tanstack-start-manifest_v-LCE-2AaF.mjs +0 -4
|
@@ -0,0 +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-GWkZn4xy.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-LPIGiUMP.js", "/assets/ProxyViewerContainer-C73EU9Jq.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-4vk9RMZ5.js", "/assets/ProxyViewerContainer-C73EU9Jq.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-GWkZn4xy.js" });
|
|
2
|
+
export {
|
|
3
|
+
tsrStartManifest
|
|
4
|
+
};
|
package/.output/server/index.mjs
CHANGED
|
@@ -38,114 +38,114 @@ const assets = {
|
|
|
38
38
|
"/assets/alibaba-TTwafVwX.svg": {
|
|
39
39
|
"type": "image/svg+xml",
|
|
40
40
|
"etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
|
|
41
|
-
"mtime": "2026-07-
|
|
41
|
+
"mtime": "2026-07-07T06:50:23.987Z",
|
|
42
42
|
"size": 5915,
|
|
43
43
|
"path": "../public/assets/alibaba-TTwafVwX.svg"
|
|
44
44
|
},
|
|
45
|
-
"/assets/
|
|
45
|
+
"/assets/json-viewer-CH5dvS2Y.js": {
|
|
46
46
|
"type": "text/javascript; charset=utf-8",
|
|
47
|
-
"etag": '"
|
|
48
|
-
"mtime": "2026-07-
|
|
49
|
-
"size": 116,
|
|
50
|
-
"path": "../public/assets/index-C29Olfzt.js"
|
|
51
|
-
},
|
|
52
|
-
"/assets/CompareDrawer-C0Kbsm-Q.js": {
|
|
53
|
-
"type": "text/javascript; charset=utf-8",
|
|
54
|
-
"etag": '"4bc3-3/VJbR0ecEp8fqbT2a5kapBN4fQ"',
|
|
55
|
-
"mtime": "2026-07-07T03:30:05.672Z",
|
|
56
|
-
"size": 19395,
|
|
57
|
-
"path": "../public/assets/CompareDrawer-C0Kbsm-Q.js"
|
|
58
|
-
},
|
|
59
|
-
"/assets/json-viewer-B0QRbMSf.js": {
|
|
60
|
-
"type": "text/javascript; charset=utf-8",
|
|
61
|
-
"etag": '"1ae6-HDeKTwqcL77vuf9Xf8Mztpyi9c0"',
|
|
62
|
-
"mtime": "2026-07-07T03:30:05.672Z",
|
|
47
|
+
"etag": '"1ae6-mkJVggyfXvFwp12XQ48FkTNkg0s"',
|
|
48
|
+
"mtime": "2026-07-07T06:50:23.989Z",
|
|
63
49
|
"size": 6886,
|
|
64
|
-
"path": "../public/assets/json-viewer-
|
|
50
|
+
"path": "../public/assets/json-viewer-CH5dvS2Y.js"
|
|
65
51
|
},
|
|
66
|
-
"/assets/index-
|
|
52
|
+
"/assets/index-LPIGiUMP.js": {
|
|
67
53
|
"type": "text/javascript; charset=utf-8",
|
|
68
|
-
"etag": '"
|
|
69
|
-
"mtime": "2026-07-
|
|
70
|
-
"size":
|
|
71
|
-
"path": "../public/assets/index-
|
|
54
|
+
"etag": '"74-Av6m82h27Vs/kt5ZU7JNsr6Ibp8"',
|
|
55
|
+
"mtime": "2026-07-07T06:50:23.987Z",
|
|
56
|
+
"size": 116,
|
|
57
|
+
"path": "../public/assets/index-LPIGiUMP.js"
|
|
72
58
|
},
|
|
73
|
-
"/assets/index-
|
|
59
|
+
"/assets/index-DBEB1rHe.css": {
|
|
74
60
|
"type": "text/css; charset=utf-8",
|
|
75
|
-
"etag": '"
|
|
76
|
-
"mtime": "2026-07-
|
|
77
|
-
"size":
|
|
78
|
-
"path": "../public/assets/index-
|
|
79
|
-
},
|
|
80
|
-
"/assets/main-CuKZD7n0.js": {
|
|
81
|
-
"type": "text/javascript; charset=utf-8",
|
|
82
|
-
"etag": '"512fd-5AcmxJQrVhDjQwawGVXebWzVm+8"',
|
|
83
|
-
"mtime": "2026-07-07T03:30:05.672Z",
|
|
84
|
-
"size": 332541,
|
|
85
|
-
"path": "../public/assets/main-CuKZD7n0.js"
|
|
86
|
-
},
|
|
87
|
-
"/assets/ReplayDialog-CM3dhP8v.js": {
|
|
88
|
-
"type": "text/javascript; charset=utf-8",
|
|
89
|
-
"etag": '"31d6-9NTEpX75drhjb91rAk+PyzE3Ffs"',
|
|
90
|
-
"mtime": "2026-07-07T03:30:05.672Z",
|
|
91
|
-
"size": 12758,
|
|
92
|
-
"path": "../public/assets/ReplayDialog-CM3dhP8v.js"
|
|
61
|
+
"etag": '"2332d-uhZ5O8YO18nm1uKrz7yr4vHuhE8"',
|
|
62
|
+
"mtime": "2026-07-07T06:50:23.987Z",
|
|
63
|
+
"size": 144173,
|
|
64
|
+
"path": "../public/assets/index-DBEB1rHe.css"
|
|
93
65
|
},
|
|
94
66
|
"/assets/minimax-BPMzvuL-.jpeg": {
|
|
95
67
|
"type": "image/jpeg",
|
|
96
68
|
"etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
|
|
97
|
-
"mtime": "2026-07-
|
|
69
|
+
"mtime": "2026-07-07T06:50:23.987Z",
|
|
98
70
|
"size": 6918,
|
|
99
71
|
"path": "../public/assets/minimax-BPMzvuL-.jpeg"
|
|
100
72
|
},
|
|
101
|
-
"/assets/
|
|
73
|
+
"/assets/CompareDrawer-Bth_Ywyt.js": {
|
|
74
|
+
"type": "text/javascript; charset=utf-8",
|
|
75
|
+
"etag": '"4bc3-qiALj2irD3Gvo7RyA4h+9S7S53c"',
|
|
76
|
+
"mtime": "2026-07-07T06:50:23.989Z",
|
|
77
|
+
"size": 19395,
|
|
78
|
+
"path": "../public/assets/CompareDrawer-Bth_Ywyt.js"
|
|
79
|
+
},
|
|
80
|
+
"/assets/ReplayDialog-C2YYAuTe.js": {
|
|
81
|
+
"type": "text/javascript; charset=utf-8",
|
|
82
|
+
"etag": '"3347-yIlDlrQkom3XWNTlzq0+7EmeA0A"',
|
|
83
|
+
"mtime": "2026-07-07T06:50:23.989Z",
|
|
84
|
+
"size": 13127,
|
|
85
|
+
"path": "../public/assets/ReplayDialog-C2YYAuTe.js"
|
|
86
|
+
},
|
|
87
|
+
"/assets/RequestAnatomy-8k9dAX2j.js": {
|
|
102
88
|
"type": "text/javascript; charset=utf-8",
|
|
103
|
-
"etag": '"43f2-
|
|
104
|
-
"mtime": "2026-07-
|
|
89
|
+
"etag": '"43f2-fP26iw3SWnM8J81HJ/BcWXo7hS4"',
|
|
90
|
+
"mtime": "2026-07-07T06:50:23.989Z",
|
|
105
91
|
"size": 17394,
|
|
106
|
-
"path": "../public/assets/RequestAnatomy-
|
|
92
|
+
"path": "../public/assets/RequestAnatomy-8k9dAX2j.js"
|
|
107
93
|
},
|
|
108
|
-
"/assets/StreamingChunkSequence-
|
|
94
|
+
"/assets/StreamingChunkSequence-DngmoR9j.js": {
|
|
109
95
|
"type": "text/javascript; charset=utf-8",
|
|
110
|
-
"etag": '"
|
|
111
|
-
"mtime": "2026-07-
|
|
112
|
-
"size":
|
|
113
|
-
"path": "../public/assets/StreamingChunkSequence-
|
|
96
|
+
"etag": '"e95-KW7/jzgQdbeTfEOjFSon9HoG0/4"',
|
|
97
|
+
"mtime": "2026-07-07T06:50:23.989Z",
|
|
98
|
+
"size": 3733,
|
|
99
|
+
"path": "../public/assets/StreamingChunkSequence-DngmoR9j.js"
|
|
100
|
+
},
|
|
101
|
+
"/assets/ResponseView-DEL6JcXm.js": {
|
|
102
|
+
"type": "text/javascript; charset=utf-8",
|
|
103
|
+
"etag": '"47fc-gYa2hl2X5GBV+v+AJgkfgrKYfQU"',
|
|
104
|
+
"mtime": "2026-07-07T06:50:23.989Z",
|
|
105
|
+
"size": 18428,
|
|
106
|
+
"path": "../public/assets/ResponseView-DEL6JcXm.js"
|
|
114
107
|
},
|
|
115
108
|
"/assets/zhipuai-BPNAnxo-.svg": {
|
|
116
109
|
"type": "image/svg+xml",
|
|
117
110
|
"etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
|
|
118
|
-
"mtime": "2026-07-
|
|
111
|
+
"mtime": "2026-07-07T06:50:23.987Z",
|
|
119
112
|
"size": 11256,
|
|
120
113
|
"path": "../public/assets/zhipuai-BPNAnxo-.svg"
|
|
121
114
|
},
|
|
122
|
-
"/assets/_sessionId-
|
|
115
|
+
"/assets/_sessionId-4vk9RMZ5.js": {
|
|
123
116
|
"type": "text/javascript; charset=utf-8",
|
|
124
|
-
"etag": '"36c-
|
|
125
|
-
"mtime": "2026-07-
|
|
117
|
+
"etag": '"36c-6R/8anu4Vx/I0RvLfHtbU1UcEvs"',
|
|
118
|
+
"mtime": "2026-07-07T06:50:23.987Z",
|
|
126
119
|
"size": 876,
|
|
127
|
-
"path": "../public/assets/_sessionId-
|
|
128
|
-
},
|
|
129
|
-
"/assets/ResponseView-Bq6sC7Ay.js": {
|
|
130
|
-
"type": "text/javascript; charset=utf-8",
|
|
131
|
-
"etag": '"47fa-1d2SEiO5LDVauvFaf3awOUXVtu0"',
|
|
132
|
-
"mtime": "2026-07-07T03:30:05.672Z",
|
|
133
|
-
"size": 18426,
|
|
134
|
-
"path": "../public/assets/ResponseView-Bq6sC7Ay.js"
|
|
120
|
+
"path": "../public/assets/_sessionId-4vk9RMZ5.js"
|
|
135
121
|
},
|
|
136
122
|
"/assets/qwen-CONDcHqt.png": {
|
|
137
123
|
"type": "image/png",
|
|
138
124
|
"etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
|
|
139
|
-
"mtime": "2026-07-
|
|
125
|
+
"mtime": "2026-07-07T06:50:23.987Z",
|
|
140
126
|
"size": 357059,
|
|
141
127
|
"path": "../public/assets/qwen-CONDcHqt.png"
|
|
142
128
|
},
|
|
143
|
-
"/assets/
|
|
129
|
+
"/assets/index-DINLvnm9.js": {
|
|
130
|
+
"type": "text/javascript; charset=utf-8",
|
|
131
|
+
"etag": '"1cd2c-wzEx8p1FStgS+8WpXtaTlrU0YzI"',
|
|
132
|
+
"mtime": "2026-07-07T06:50:23.989Z",
|
|
133
|
+
"size": 118060,
|
|
134
|
+
"path": "../public/assets/index-DINLvnm9.js"
|
|
135
|
+
},
|
|
136
|
+
"/assets/main-GWkZn4xy.js": {
|
|
137
|
+
"type": "text/javascript; charset=utf-8",
|
|
138
|
+
"etag": '"512fd-QsLmdrg3ZNPjkYZZhQKsAA53Elc"',
|
|
139
|
+
"mtime": "2026-07-07T06:50:23.987Z",
|
|
140
|
+
"size": 332541,
|
|
141
|
+
"path": "../public/assets/main-GWkZn4xy.js"
|
|
142
|
+
},
|
|
143
|
+
"/assets/ProxyViewerContainer-C73EU9Jq.js": {
|
|
144
144
|
"type": "text/javascript; charset=utf-8",
|
|
145
|
-
"etag": '"
|
|
146
|
-
"mtime": "2026-07-
|
|
147
|
-
"size":
|
|
148
|
-
"path": "../public/assets/ProxyViewerContainer-
|
|
145
|
+
"etag": '"b5994-2p3NxcYQXaIsMhEXsT/sG65Tz6o"',
|
|
146
|
+
"mtime": "2026-07-07T06:50:23.989Z",
|
|
147
|
+
"size": 743828,
|
|
148
|
+
"path": "../public/assets/ProxyViewerContainer-C73EU9Jq.js"
|
|
149
149
|
}
|
|
150
150
|
};
|
|
151
151
|
function readAsset(id) {
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg fill="
|
|
1
|
+
<svg fill="#7dd3fc" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>OpenCode</title><path d="M16 6H8v12h8V6zm4 16H4V2h16v20z"></path></svg>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg fill="
|
|
1
|
+
<svg fill="#ff6900" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>MiMo Code</title><path d="M.958 15.936a.459.459 0 01.459.44v2.729a.46.46 0 01-.918 0v-2.729a.459.459 0 01.459-.44zm4.814-2.035a.46.46 0 01.553.45v4.754a.458.458 0 11-.918 0V15.48L3.74 17.202a.462.462 0 01-.655.016.462.462 0 01-.065-.082L.628 14.67a.459.459 0 01.658-.637l2.124 2.187 2.127-2.188a.46.46 0 01.235-.13zm2.068.004a.46.46 0 01.458.445v4.755a.46.46 0 01-.458.458.459.459 0 01-.458-.458V14.35a.459.459 0 01.458-.445zm1.973 2.014a.46.46 0 01.46.457v2.729a.46.46 0 01-.784.324.46.46 0 01-.134-.324v-2.729a.46.46 0 01.458-.458zm.002-2.045a.458.458 0 01.328.157l2.127 2.19 2.125-2.19a.459.459 0 01.784.318v4.756a.46.46 0 01-.455.458.46.46 0 01-.458-.458V15.48l-1.667 1.723a.46.46 0 01-.65.008l-.005-.005c0-.002-.002-.002-.004-.003l-2.455-2.534a.46.46 0 01-.008-.667.461.461 0 01.338-.128zm6.797 1.206a.46.46 0 01.53.651A1.966 1.966 0 0019.81 18.4a.462.462 0 01.623.18.46.46 0 01-.181.624 2.863 2.863 0 01-1.38.353l-.142-.004a2.88 2.88 0 01-2.393-4.263.461.461 0 01.274-.21zm.864-.931a2.884 2.884 0 013.915 3.914.46.46 0 01-.402.24l-.057-.004a.458.458 0 01-.164-.055.46.46 0 01-.182-.622 1.967 1.967 0 00-2.669-2.67.459.459 0 11-.441-.803zM9.59 6.368c1.481 0 1.696 1.202 1.696 1.654v2.648h-.917v-.432c-.26.346-.792.535-1.36.535-.133 0-1.289-.03-1.384-1.136-.082-.932.675-1.61 2.053-1.61h.691c0-.563-.367-.886-.983-.886-.44.013-.864.174-1.2.458l-.36-.664c.484-.379 1.012-.567 1.764-.567zm4.427.1c1.263 0 2.082.97 2.083 2.15 0 1.181-.824 2.154-2.083 2.154-1.26 0-2.084-.972-2.084-2.152 0-1.18.82-2.153 2.084-2.153zm6.801.015c.68 0 1.202.465 1.197 1.548v2.642H21.1V8.29c0-.312-.002-.98-.63-.98s-.628.667-.628.838v2.524h-.89V8.148c0-.17-.001-.838-.63-.838-.628 0-.628.668-.628.98v2.383h-.917v-4.03h.917V7a1.22 1.22 0 01.947-.516c.398 0 .76.193.982.686a1.321 1.321 0 011.195-.686zm-18.093.872l1.457-1.772H5.32L3.311 8.07l2.14 2.602H4.24L2.725 8.796 1.21 10.672H0L2.138 8.07.13 5.583h1.138l1.458 1.772zm4.149 3.317h-.916V6.644h.916v4.028zm16.99 0h-.916V6.644h.916v4.028zM9.925 8.71c-1.055 0-1.359.412-1.326.742.032.329.324.537.757.537a1.013 1.013 0 001.014-.968l.002-.31h-.447zM14.018 7.3c-.663 0-1.184.487-1.184 1.32 0 .832.52 1.32 1.184 1.32.662 0 1.182-.49 1.182-1.32 0-.832-.52-1.32-1.182-1.32zM6.417 5.001a.568.568 0 01.587.582.588.588 0 01-1.175 0A.57.57 0 016.417 5zm16.991 0a.57.57 0 01.592.582.588.588 0 01-1.174 0 .57.57 0 01.357-.542.572.572 0 01.225-.04z"></path></svg>
|
package/src/cli/detect-tools.ts
CHANGED
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
* `curl` example in that case.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import { execFileSync } from "node:child_process";
|
|
14
13
|
import { existsSync } from "node:fs";
|
|
15
14
|
import { join } from "node:path";
|
|
16
15
|
import { homedir } from "node:os";
|
|
16
|
+
import { resolveExecutableOnPath } from "../proxy/platformCommands.js";
|
|
17
17
|
|
|
18
18
|
export type DetectedTool = {
|
|
19
19
|
readonly found: true;
|
|
@@ -35,33 +35,8 @@ export type DetectedToolEntry = {
|
|
|
35
35
|
readonly result: ToolDetectionResult;
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
-
/**
|
|
39
|
-
* Run `command -v <bin>` (bash) or `where <bin>` (cmd) and return the first
|
|
40
|
-
* line of stdout. Returns `null` if the binary isn't on PATH. We use the
|
|
41
|
-
* platform's own lookup so we don't have to maintain a hard-coded list of
|
|
42
|
-
* candidate install dirs.
|
|
43
|
-
*/
|
|
44
38
|
function which(bin: string): string | null {
|
|
45
|
-
|
|
46
|
-
if (process.platform === "win32") {
|
|
47
|
-
const out = execFileSync("where", [bin], {
|
|
48
|
-
encoding: "utf8",
|
|
49
|
-
timeout: 3000,
|
|
50
|
-
windowsHide: true,
|
|
51
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
52
|
-
});
|
|
53
|
-
const first = out.split(/\r?\n/).find((line) => line.trim().length > 0);
|
|
54
|
-
return first?.trim() ?? null;
|
|
55
|
-
}
|
|
56
|
-
const out = execFileSync("sh", ["-c", `command -v ${bin}`], {
|
|
57
|
-
encoding: "utf8",
|
|
58
|
-
timeout: 3000,
|
|
59
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
60
|
-
});
|
|
61
|
-
return out.trim() || null;
|
|
62
|
-
} catch {
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
39
|
+
return resolveExecutableOnPath(bin);
|
|
65
40
|
}
|
|
66
41
|
|
|
67
42
|
function tryDir(path: string): string | null {
|
|
@@ -70,7 +70,7 @@ Test-Path (Join-Path $env:USERPROFILE ".codex\\config.toml")
|
|
|
70
70
|
\`\`\`
|
|
71
71
|
|
|
72
72
|
\`\`\`bash
|
|
73
|
-
|
|
73
|
+
node -e "const fs=require('node:fs'),p=require('node:path');const names=process.platform==='win32'?['agent-inspector.cmd','agent-inspector.exe','agent-inspector']:['agent-inspector'];const found=(process.env.PATH||'').split(p.delimiter).some(d=>names.some(n=>fs.existsSync(p.join(d,n))));console.log(found?'agent-inspector: present':'agent-inspector: missing')"
|
|
74
74
|
agent-inspector onboard --status
|
|
75
75
|
test -d "$HOME/.codex" && echo "codex home: present" || echo "codex home: missing"
|
|
76
76
|
test -f "$HOME/.codex/config.toml" && echo "config: present" || echo "config: missing"
|
|
@@ -208,14 +208,13 @@ if ((Test-Path $projMcp) -and (Select-String -Path $projMcp -Pattern 'agent-insp
|
|
|
208
208
|
\`\`\`bash
|
|
209
209
|
# Unix / macOS / WSL
|
|
210
210
|
node --version # expect >= 18
|
|
211
|
-
|
|
211
|
+
node -e "const fs=require('node:fs'),p=require('node:path');const names=process.platform==='win32'?['claude.cmd','claude.exe','claude']:['claude'];const found=(process.env.PATH||'').split(p.delimiter).some(d=>names.some(n=>fs.existsSync(p.join(d,n))));console.log(found?'claude-code: present':'claude-code: not detected')"
|
|
212
212
|
\`\`\`
|
|
213
213
|
|
|
214
214
|
\`\`\`powershell
|
|
215
215
|
# Windows PowerShell — single-quoted so $env: expands correctly
|
|
216
216
|
node --version # expect >= 18
|
|
217
|
-
|
|
218
|
-
if ($null) { Write-Host 'claude-code: present' } else { Write-Host 'claude-code: not detected' }
|
|
217
|
+
node -e "const fs=require('node:fs'),p=require('node:path');const names=process.platform==='win32'?['claude.cmd','claude.exe','claude']:['claude'];const found=(process.env.PATH||'').split(p.delimiter).some(d=>names.some(n=>fs.existsSync(p.join(d,n))));console.log(found?'claude-code: present':'claude-code: not detected')"
|
|
219
218
|
\`\`\`
|
|
220
219
|
|
|
221
220
|
> **PAUSE** — if Node is older than 18, ask the user to install a newer version (https://nodejs.org) before continuing. Use \`AskUserQuestion\` with header \`Node version\`.
|
package/src/cli.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Buffer } from "node:buffer";
|
|
3
|
-
import { spawn,
|
|
3
|
+
import { spawn, type ChildProcess } from "node:child_process";
|
|
4
4
|
import { createConnection } from "node:net";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { dirname, join, resolve as resolvePath } from "node:path";
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
type ServerOutputFilterContext,
|
|
20
20
|
} from "./cli/startupOutput.js";
|
|
21
21
|
import { startIdentityProxy } from "./proxy/identityProxy.js";
|
|
22
|
+
import { findPidsByPort, killPid, openUrlCommand } from "./proxy/platformCommands.js";
|
|
22
23
|
|
|
23
24
|
const __filename = fileURLToPath(import.meta.url);
|
|
24
25
|
const __dirname = dirname(__filename);
|
|
@@ -134,26 +135,9 @@ async function waitForInspectorHealthy(
|
|
|
134
135
|
}
|
|
135
136
|
|
|
136
137
|
function openBrowser(targetUrl: string): void {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
case "darwin":
|
|
141
|
-
command = ["open", targetUrl];
|
|
142
|
-
break;
|
|
143
|
-
case "linux":
|
|
144
|
-
command = ["xdg-open", targetUrl];
|
|
145
|
-
break;
|
|
146
|
-
case "win32":
|
|
147
|
-
command = ["cmd", "/c", "start", "", targetUrl];
|
|
148
|
-
break;
|
|
149
|
-
default:
|
|
150
|
-
// Unsupported platform - do nothing
|
|
151
|
-
break;
|
|
152
|
-
}
|
|
153
|
-
if (command === undefined) return;
|
|
154
|
-
const [bin, ...cmdArgs] = command;
|
|
155
|
-
if (bin === undefined) return;
|
|
156
|
-
const browserProcess = spawn(bin, cmdArgs, {
|
|
138
|
+
const command = openUrlCommand(targetUrl);
|
|
139
|
+
if (command === null) return;
|
|
140
|
+
const browserProcess = spawn(command.command, command.args, {
|
|
157
141
|
stdio: "ignore",
|
|
158
142
|
detached: true,
|
|
159
143
|
windowsHide: true,
|
|
@@ -444,71 +428,10 @@ async function runStart(args: string[]): Promise<void> {
|
|
|
444
428
|
* Check if a port is in use and kill the process using it
|
|
445
429
|
*/
|
|
446
430
|
function killProcessOnPort(targetPort: number): void {
|
|
447
|
-
const
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
if (platform === "win32") {
|
|
453
|
-
// Windows: use netstat to find PID, then taskkill
|
|
454
|
-
const output = execSync(`netstat -ano | findstr :${targetPort}`, {
|
|
455
|
-
encoding: "utf8",
|
|
456
|
-
timeout: 5000,
|
|
457
|
-
windowsHide: true,
|
|
458
|
-
});
|
|
459
|
-
const lines = output.trim().split("\n");
|
|
460
|
-
for (const line of lines) {
|
|
461
|
-
const parts = line.trim().split(/\s+/);
|
|
462
|
-
if (parts.length >= 5) {
|
|
463
|
-
const localAddress = parts[1] ?? "";
|
|
464
|
-
const pidStr = parts[4] ?? "";
|
|
465
|
-
if (localAddress !== "" && pidStr !== "" && localAddress.includes(`:${targetPort}`)) {
|
|
466
|
-
const pid = parseInt(pidStr, 10);
|
|
467
|
-
if (!isNaN(pid) && pid > 0) {
|
|
468
|
-
pids.push(pid);
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
// Remove duplicates
|
|
474
|
-
pids = [...new Set(pids)];
|
|
475
|
-
|
|
476
|
-
for (const pid of pids) {
|
|
477
|
-
try {
|
|
478
|
-
console.log(`Killing process ${pid} on port ${targetPort}...`);
|
|
479
|
-
execSync(`taskkill /PID ${pid} /F`, {
|
|
480
|
-
encoding: "utf8",
|
|
481
|
-
timeout: 5000,
|
|
482
|
-
windowsHide: true,
|
|
483
|
-
});
|
|
484
|
-
} catch {
|
|
485
|
-
// Process may have already exited
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
} else {
|
|
489
|
-
// Unix-like: use lsof
|
|
490
|
-
const output = execSync(`lsof -ti:${targetPort}`, { encoding: "utf8", timeout: 5000 });
|
|
491
|
-
const lines = output.trim().split("\n");
|
|
492
|
-
for (const line of lines) {
|
|
493
|
-
const pid = parseInt(line.trim(), 10);
|
|
494
|
-
if (!isNaN(pid) && pid > 0) {
|
|
495
|
-
pids.push(pid);
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
// Remove duplicates
|
|
499
|
-
pids = [...new Set(pids)];
|
|
500
|
-
|
|
501
|
-
for (const pid of pids) {
|
|
502
|
-
try {
|
|
503
|
-
console.log(`Killing process ${pid} on port ${targetPort}...`);
|
|
504
|
-
execSync(`kill -9 ${pid}`, { encoding: "utf8", timeout: 5000 });
|
|
505
|
-
} catch {
|
|
506
|
-
// Process may have already exited
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
} catch {
|
|
511
|
-
// No process found on port, which is fine
|
|
431
|
+
const pids = findPidsByPort(targetPort);
|
|
432
|
+
for (const pid of pids) {
|
|
433
|
+
console.log(`Killing process ${pid} on port ${targetPort}...`);
|
|
434
|
+
killPid(pid);
|
|
512
435
|
}
|
|
513
436
|
}
|
|
514
437
|
|
|
@@ -1737,8 +1737,27 @@ export function ProxyViewer({
|
|
|
1737
1737
|
const logListRef = useRef<HTMLDivElement>(null);
|
|
1738
1738
|
const logListWrapperRef = useRef<HTMLDivElement>(null);
|
|
1739
1739
|
const importInputRef = useRef<HTMLInputElement>(null);
|
|
1740
|
+
const exportAbortRef = useRef<AbortController | null>(null);
|
|
1741
|
+
const exportRequestIdRef = useRef(0);
|
|
1740
1742
|
useKeyboardNavigation(logListRef, logListWrapperRef, { pageWide: true });
|
|
1741
1743
|
|
|
1744
|
+
const cancelTransientTasks = useCallback(() => {
|
|
1745
|
+
exportRequestIdRef.current += 1;
|
|
1746
|
+
exportAbortRef.current?.abort();
|
|
1747
|
+
exportAbortRef.current = null;
|
|
1748
|
+
setExporting(null);
|
|
1749
|
+
setExportError(null);
|
|
1750
|
+
}, []);
|
|
1751
|
+
|
|
1752
|
+
useEffect(
|
|
1753
|
+
() => () => {
|
|
1754
|
+
exportRequestIdRef.current += 1;
|
|
1755
|
+
exportAbortRef.current?.abort();
|
|
1756
|
+
exportAbortRef.current = null;
|
|
1757
|
+
},
|
|
1758
|
+
[],
|
|
1759
|
+
);
|
|
1760
|
+
|
|
1742
1761
|
useEffect(() => {
|
|
1743
1762
|
const perCrabDuration = 400;
|
|
1744
1763
|
const startDelay = 50;
|
|
@@ -1762,11 +1781,18 @@ export function ProxyViewer({
|
|
|
1762
1781
|
|
|
1763
1782
|
const handleExport = useCallback(
|
|
1764
1783
|
async (mode: ExportMode) => {
|
|
1784
|
+
exportAbortRef.current?.abort();
|
|
1785
|
+
const controller = new AbortController();
|
|
1786
|
+
exportAbortRef.current = controller;
|
|
1787
|
+
const requestId = exportRequestIdRef.current + 1;
|
|
1788
|
+
exportRequestIdRef.current = requestId;
|
|
1765
1789
|
setExporting(mode);
|
|
1766
1790
|
setExportError(null);
|
|
1767
1791
|
try {
|
|
1768
|
-
const result = await exportLogsAsZip(logs, mode);
|
|
1792
|
+
const result = await exportLogsAsZip(logs, mode, { signal: controller.signal });
|
|
1793
|
+
if (exportRequestIdRef.current !== requestId) return;
|
|
1769
1794
|
if (!result.ok) {
|
|
1795
|
+
if (result.canceled === true) return;
|
|
1770
1796
|
if (onNotify !== undefined) {
|
|
1771
1797
|
onNotify({ message: result.message, tone: "error" });
|
|
1772
1798
|
} else {
|
|
@@ -1774,7 +1800,10 @@ export function ProxyViewer({
|
|
|
1774
1800
|
}
|
|
1775
1801
|
}
|
|
1776
1802
|
} finally {
|
|
1777
|
-
|
|
1803
|
+
if (exportRequestIdRef.current === requestId) {
|
|
1804
|
+
exportAbortRef.current = null;
|
|
1805
|
+
setExporting(null);
|
|
1806
|
+
}
|
|
1778
1807
|
}
|
|
1779
1808
|
},
|
|
1780
1809
|
[logs, onNotify],
|
|
@@ -1819,8 +1848,26 @@ export function ProxyViewer({
|
|
|
1819
1848
|
// Close the compare drawer when the user changes the session or model
|
|
1820
1849
|
// filter, since the predecessor relationship may no longer be meaningful.
|
|
1821
1850
|
useEffect(() => {
|
|
1851
|
+
cancelTransientTasks();
|
|
1852
|
+
setComparePair(null);
|
|
1853
|
+
}, [cancelTransientTasks, selectedSession, selectedModel]);
|
|
1854
|
+
|
|
1855
|
+
const handleClearCurrentView = useCallback(() => {
|
|
1856
|
+
cancelTransientTasks();
|
|
1857
|
+
setImportStatus(null);
|
|
1858
|
+
setImportError(null);
|
|
1859
|
+
setComparePair(null);
|
|
1860
|
+
onClearAll();
|
|
1861
|
+
}, [cancelTransientTasks, onClearAll]);
|
|
1862
|
+
|
|
1863
|
+
const handleReloadCurrentSession = useCallback(() => {
|
|
1864
|
+
if (onReloadSession === undefined) return;
|
|
1865
|
+
cancelTransientTasks();
|
|
1866
|
+
setImportStatus(null);
|
|
1867
|
+
setImportError(null);
|
|
1822
1868
|
setComparePair(null);
|
|
1823
|
-
|
|
1869
|
+
onReloadSession();
|
|
1870
|
+
}, [cancelTransientTasks, onReloadSession]);
|
|
1824
1871
|
|
|
1825
1872
|
const closeCompare = useCallback(() => {
|
|
1826
1873
|
setComparePair(null);
|
|
@@ -1927,7 +1974,7 @@ export function ProxyViewer({
|
|
|
1927
1974
|
{onReloadSession !== undefined && (
|
|
1928
1975
|
<button
|
|
1929
1976
|
type="button"
|
|
1930
|
-
onClick={
|
|
1977
|
+
onClick={handleReloadCurrentSession}
|
|
1931
1978
|
disabled={isLoading}
|
|
1932
1979
|
className="bg-white/[0.035] hover:bg-white/[0.065] inline-flex h-8 min-w-0 items-center justify-center gap-1.5 rounded-md px-2 text-xs text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50"
|
|
1933
1980
|
title="Load stored logs for this session"
|
|
@@ -1938,7 +1985,7 @@ export function ProxyViewer({
|
|
|
1938
1985
|
)}
|
|
1939
1986
|
<button
|
|
1940
1987
|
type="button"
|
|
1941
|
-
onClick={
|
|
1988
|
+
onClick={handleClearCurrentView}
|
|
1942
1989
|
disabled={!canClearCurrentView}
|
|
1943
1990
|
className={cn(
|
|
1944
1991
|
"bg-white/[0.035] hover:bg-white/[0.065] inline-flex h-8 min-w-0 items-center justify-center gap-1.5 rounded-md px-2 text-xs text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",
|
|
@@ -2128,7 +2175,7 @@ export function ProxyViewer({
|
|
|
2128
2175
|
{onReloadSession !== undefined && (
|
|
2129
2176
|
<button
|
|
2130
2177
|
type="button"
|
|
2131
|
-
onClick={
|
|
2178
|
+
onClick={handleReloadCurrentSession}
|
|
2132
2179
|
disabled={isLoading}
|
|
2133
2180
|
className="bg-white/[0.035] hover:bg-white/[0.065] inline-flex h-8 items-center gap-1.5 rounded-md px-3 text-xs text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50"
|
|
2134
2181
|
title="Reload this session from stored logs"
|
|
@@ -2139,7 +2186,7 @@ export function ProxyViewer({
|
|
|
2139
2186
|
)}
|
|
2140
2187
|
<button
|
|
2141
2188
|
type="button"
|
|
2142
|
-
onClick={
|
|
2189
|
+
onClick={handleClearCurrentView}
|
|
2143
2190
|
disabled={!canClearCurrentView}
|
|
2144
2191
|
className="bg-white/[0.035] hover:bg-white/[0.065] inline-flex h-8 items-center gap-1.5 rounded-md px-3 text-xs text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50"
|
|
2145
2192
|
title="Clear the current view. Stored logs remain reloadable."
|
|
@@ -2190,7 +2237,7 @@ export function ProxyViewer({
|
|
|
2190
2237
|
{onReloadSession !== undefined && (
|
|
2191
2238
|
<button
|
|
2192
2239
|
type="button"
|
|
2193
|
-
onClick={
|
|
2240
|
+
onClick={handleReloadCurrentSession}
|
|
2194
2241
|
className="bg-white/[0.045] hover:bg-white/[0.075] inline-flex h-8 items-center gap-1.5 rounded-md px-3 text-xs text-muted-foreground shadow-[inset_0_0_0_1px_rgba(255,255,255,0.06)] transition-colors hover:text-foreground"
|
|
2195
2242
|
>
|
|
2196
2243
|
<RefreshCw className="size-3.5" />
|