@tonyclaw/agent-inspector 3.0.0 → 3.0.2

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 (31) hide show
  1. package/.output/cli.js +7 -1
  2. package/.output/nitro.json +1 -1
  3. package/.output/public/assets/{CompareDrawer-ZL1yvIH6.js → CompareDrawer-Dqpwaku6.js} +1 -1
  4. package/.output/public/assets/{ProxyViewerContainer-vhfV449d.js → ProxyViewerContainer-tu_yG20v.js} +26 -26
  5. package/.output/public/assets/{ReplayDialog-D-gDSuhe.js → ReplayDialog-eaMk-WFG.js} +1 -1
  6. package/.output/public/assets/{RequestAnatomy-CVt2vHih.js → RequestAnatomy-DCnoqam_.js} +1 -1
  7. package/.output/public/assets/{ResponseView-zVdHc0mv.js → ResponseView-Q7HW0fAd.js} +2 -2
  8. package/.output/public/assets/{StreamingChunkSequence-DQFhpV_4.js → StreamingChunkSequence-K7qKD9VX.js} +1 -1
  9. package/.output/public/assets/{_sessionId-DeeeQcS9.js → _sessionId-CHwYmqKk.js} +1 -1
  10. package/.output/public/assets/index-CZnCJkDN.js +1 -0
  11. package/.output/public/assets/{index-_inxJ5Yi.js → index-EI9mxK7O.js} +1 -1
  12. package/.output/public/assets/{json-viewer-B9gYSlz7.js → json-viewer-Dbu2fh6-.js} +1 -1
  13. package/.output/public/assets/{main-Do_fjInc.js → main-CLNurSfs.js} +2 -2
  14. package/.output/server/{_sessionId-D1XraBbJ.mjs → _sessionId-1KajCUiB.mjs} +2 -2
  15. package/.output/server/_ssr/{CompareDrawer-Ot4EsLht.mjs → CompareDrawer-iM778CsC.mjs} +2 -2
  16. package/.output/server/_ssr/{ProxyViewerContainer-Cb4ZWwFC.mjs → ProxyViewerContainer-DzVBZMbn.mjs} +31 -37
  17. package/.output/server/_ssr/{ReplayDialog-B5m_dFdr.mjs → ReplayDialog-BxPm6uxq.mjs} +3 -3
  18. package/.output/server/_ssr/{RequestAnatomy-OUrXKyoI.mjs → RequestAnatomy-D5aE8Qas.mjs} +2 -2
  19. package/.output/server/_ssr/{ResponseView-DV1N1gQ8.mjs → ResponseView-D0mzqj7J.mjs} +2 -2
  20. package/.output/server/_ssr/{StreamingChunkSequence-CJl70SsF.mjs → StreamingChunkSequence-BbeKs1PZ.mjs} +2 -2
  21. package/.output/server/_ssr/{index-CztmjZ0i.mjs → index-BIrW_uL8.mjs} +2 -2
  22. package/.output/server/_ssr/index.mjs +2 -2
  23. package/.output/server/_ssr/{json-viewer-CO0sbce_.mjs → json-viewer-DVAdcOds.mjs} +2 -2
  24. package/.output/server/_ssr/{router-BxWKty_9.mjs → router-DtMA9SLr.mjs} +24 -4
  25. package/.output/server/{_tanstack-start-manifest_v-BvJ2LKGG.mjs → _tanstack-start-manifest_v-Rq5BNh_J.mjs} +1 -1
  26. package/.output/server/index.mjs +69 -69
  27. package/package.json +1 -1
  28. package/src/cli.ts +9 -1
  29. package/src/components/ProxyViewerContainer.tsx +26 -31
  30. package/src/proxy/sessionProcess.ts +22 -1
  31. package/.output/public/assets/index-BJvPLWvO.js +0 -1
@@ -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-07T00:31:07.940Z",
41
+ "mtime": "2026-07-07T01:08:49.703Z",
42
42
  "size": 5915,
43
43
  "path": "../public/assets/alibaba-TTwafVwX.svg"
44
44
  },
45
- "/assets/CompareDrawer-ZL1yvIH6.js": {
46
- "type": "text/javascript; charset=utf-8",
47
- "etag": '"4bbf-CIi9MFvNx5XBmXT0nU0DPL42gd8"',
48
- "mtime": "2026-07-07T00:31:07.942Z",
49
- "size": 19391,
50
- "path": "../public/assets/CompareDrawer-ZL1yvIH6.js"
51
- },
52
- "/assets/json-viewer-B9gYSlz7.js": {
53
- "type": "text/javascript; charset=utf-8",
54
- "etag": '"1ae6-eUFnKJytY27s8aDs8Lo5QbvfXRw"',
55
- "mtime": "2026-07-07T00:31:07.942Z",
56
- "size": 6886,
57
- "path": "../public/assets/json-viewer-B9gYSlz7.js"
58
- },
59
45
  "/assets/minimax-BPMzvuL-.jpeg": {
60
46
  "type": "image/jpeg",
61
47
  "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
62
- "mtime": "2026-07-07T00:31:07.942Z",
48
+ "mtime": "2026-07-07T01:08:49.703Z",
63
49
  "size": 6918,
64
50
  "path": "../public/assets/minimax-BPMzvuL-.jpeg"
65
51
  },
66
- "/assets/index-_inxJ5Yi.js": {
52
+ "/assets/CompareDrawer-Dqpwaku6.js": {
67
53
  "type": "text/javascript; charset=utf-8",
68
- "etag": '"1cd2c-oLlmpQRDfuZo5GBb+xP4a/4UY4g"',
69
- "mtime": "2026-07-07T00:31:07.942Z",
54
+ "etag": '"4bbf-ZPntxP9PDr7AIoGdVZZXJYRM4HE"',
55
+ "mtime": "2026-07-07T01:08:49.704Z",
56
+ "size": 19391,
57
+ "path": "../public/assets/CompareDrawer-Dqpwaku6.js"
58
+ },
59
+ "/assets/index-EI9mxK7O.js": {
60
+ "type": "text/javascript; charset=utf-8",
61
+ "etag": '"1cd2c-19Vm1WJDNbK2EWsAi7Bxrn6rS2k"',
62
+ "mtime": "2026-07-07T01:08:49.706Z",
70
63
  "size": 118060,
71
- "path": "../public/assets/index-_inxJ5Yi.js"
64
+ "path": "../public/assets/index-EI9mxK7O.js"
72
65
  },
73
- "/assets/index-BJvPLWvO.js": {
66
+ "/assets/index-CZnCJkDN.js": {
74
67
  "type": "text/javascript; charset=utf-8",
75
- "etag": '"74-BHSPo95dMXATS9vdlnudttsOua0"',
76
- "mtime": "2026-07-07T00:31:07.942Z",
68
+ "etag": '"74-UzXK8qp7BqgU02youM+REZzAtyE"',
69
+ "mtime": "2026-07-07T01:08:49.704Z",
77
70
  "size": 116,
78
- "path": "../public/assets/index-BJvPLWvO.js"
71
+ "path": "../public/assets/index-CZnCJkDN.js"
72
+ },
73
+ "/assets/json-viewer-Dbu2fh6-.js": {
74
+ "type": "text/javascript; charset=utf-8",
75
+ "etag": '"1ae6-TrhZZ3eS6TP+barBIj9MbTMvsHs"',
76
+ "mtime": "2026-07-07T01:08:49.705Z",
77
+ "size": 6886,
78
+ "path": "../public/assets/json-viewer-Dbu2fh6-.js"
79
+ },
80
+ "/assets/main-CLNurSfs.js": {
81
+ "type": "text/javascript; charset=utf-8",
82
+ "etag": '"512fd-IxzZTYdmlPycsVhBCJBtoIeXuFg"',
83
+ "mtime": "2026-07-07T01:08:49.704Z",
84
+ "size": 332541,
85
+ "path": "../public/assets/main-CLNurSfs.js"
79
86
  },
80
87
  "/assets/index-Tq5s9NV0.css": {
81
88
  "type": "text/css; charset=utf-8",
82
89
  "etag": '"22408-MQKT02eqQudVEj/DozyiEJoTl6E"',
83
- "mtime": "2026-07-07T00:31:07.942Z",
90
+ "mtime": "2026-07-07T01:08:49.704Z",
84
91
  "size": 140296,
85
92
  "path": "../public/assets/index-Tq5s9NV0.css"
86
93
  },
87
- "/assets/RequestAnatomy-CVt2vHih.js": {
94
+ "/assets/ReplayDialog-eaMk-WFG.js": {
88
95
  "type": "text/javascript; charset=utf-8",
89
- "etag": '"43f2-Pb1rRv8VdlgdFtX52V4rCBrFcCo"',
90
- "mtime": "2026-07-07T00:31:07.942Z",
96
+ "etag": '"31d6-itkTVP7cbdhyrrb/qFFjd/CAQXQ"',
97
+ "mtime": "2026-07-07T01:08:49.704Z",
98
+ "size": 12758,
99
+ "path": "../public/assets/ReplayDialog-eaMk-WFG.js"
100
+ },
101
+ "/assets/RequestAnatomy-DCnoqam_.js": {
102
+ "type": "text/javascript; charset=utf-8",
103
+ "etag": '"43f2-dBgBpSu/6XXhbX9gSNaf6TpOm+U"',
104
+ "mtime": "2026-07-07T01:08:49.704Z",
91
105
  "size": 17394,
92
- "path": "../public/assets/RequestAnatomy-CVt2vHih.js"
106
+ "path": "../public/assets/RequestAnatomy-DCnoqam_.js"
107
+ },
108
+ "/assets/qwen-CONDcHqt.png": {
109
+ "type": "image/png",
110
+ "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
111
+ "mtime": "2026-07-07T01:08:49.703Z",
112
+ "size": 357059,
113
+ "path": "../public/assets/qwen-CONDcHqt.png"
93
114
  },
94
- "/assets/StreamingChunkSequence-DQFhpV_4.js": {
115
+ "/assets/StreamingChunkSequence-K7qKD9VX.js": {
95
116
  "type": "text/javascript; charset=utf-8",
96
- "etag": '"dd6-SMIn60D5iwf77dJ0W8fWzwFQ+y4"',
97
- "mtime": "2026-07-07T00:31:07.942Z",
117
+ "etag": '"dd6-ODWFyg5pO+hUjPIjqkT9DJKpTW8"',
118
+ "mtime": "2026-07-07T01:08:49.704Z",
98
119
  "size": 3542,
99
- "path": "../public/assets/StreamingChunkSequence-DQFhpV_4.js"
120
+ "path": "../public/assets/StreamingChunkSequence-K7qKD9VX.js"
100
121
  },
101
122
  "/assets/zhipuai-BPNAnxo-.svg": {
102
123
  "type": "image/svg+xml",
103
124
  "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
104
- "mtime": "2026-07-07T00:31:07.942Z",
125
+ "mtime": "2026-07-07T01:08:49.703Z",
105
126
  "size": 11256,
106
127
  "path": "../public/assets/zhipuai-BPNAnxo-.svg"
107
128
  },
108
- "/assets/_sessionId-DeeeQcS9.js": {
129
+ "/assets/ResponseView-Q7HW0fAd.js": {
109
130
  "type": "text/javascript; charset=utf-8",
110
- "etag": '"36c-9kxd4A0O2DRX90CFKTSW0gvJg7A"',
111
- "mtime": "2026-07-07T00:31:07.942Z",
112
- "size": 876,
113
- "path": "../public/assets/_sessionId-DeeeQcS9.js"
114
- },
115
- "/assets/ReplayDialog-D-gDSuhe.js": {
116
- "type": "text/javascript; charset=utf-8",
117
- "etag": '"31d6-7nPX+7CzElY2l3LTEI8tdhGnb9g"',
118
- "mtime": "2026-07-07T00:31:07.942Z",
119
- "size": 12758,
120
- "path": "../public/assets/ReplayDialog-D-gDSuhe.js"
121
- },
122
- "/assets/ResponseView-zVdHc0mv.js": {
123
- "type": "text/javascript; charset=utf-8",
124
- "etag": '"47fa-My/gIfJNAY80sXwdo3igU0H0hlA"',
125
- "mtime": "2026-07-07T00:31:07.942Z",
131
+ "etag": '"47fa-/Wc+ATNSNSBBRdaiY9vHnwKGJg4"',
132
+ "mtime": "2026-07-07T01:08:49.704Z",
126
133
  "size": 18426,
127
- "path": "../public/assets/ResponseView-zVdHc0mv.js"
134
+ "path": "../public/assets/ResponseView-Q7HW0fAd.js"
128
135
  },
129
- "/assets/main-Do_fjInc.js": {
136
+ "/assets/_sessionId-CHwYmqKk.js": {
130
137
  "type": "text/javascript; charset=utf-8",
131
- "etag": '"512fd-fApJrxOu5dijJDTxHvG75pv2C6s"',
132
- "mtime": "2026-07-07T00:31:07.942Z",
133
- "size": 332541,
134
- "path": "../public/assets/main-Do_fjInc.js"
135
- },
136
- "/assets/qwen-CONDcHqt.png": {
137
- "type": "image/png",
138
- "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
139
- "mtime": "2026-07-07T00:31:07.942Z",
140
- "size": 357059,
141
- "path": "../public/assets/qwen-CONDcHqt.png"
138
+ "etag": '"36c-DOWoQuaVbR9fu8b6L65Qv4ouNHs"',
139
+ "mtime": "2026-07-07T01:08:49.704Z",
140
+ "size": 876,
141
+ "path": "../public/assets/_sessionId-CHwYmqKk.js"
142
142
  },
143
- "/assets/ProxyViewerContainer-vhfV449d.js": {
143
+ "/assets/ProxyViewerContainer-tu_yG20v.js": {
144
144
  "type": "text/javascript; charset=utf-8",
145
- "etag": '"aef11-EMJh1fZUCmNDbpYKv5051UbD1KI"',
146
- "mtime": "2026-07-07T00:31:07.942Z",
147
- "size": 716561,
148
- "path": "../public/assets/ProxyViewerContainer-vhfV449d.js"
145
+ "etag": '"aeea7-4wGPgiGZUhpr0jD/D7mkeiq0940"',
146
+ "mtime": "2026-07-07T01:08:49.706Z",
147
+ "size": 716455,
148
+ "path": "../public/assets/ProxyViewerContainer-tu_yG20v.js"
149
149
  }
150
150
  };
151
151
  function readAsset(id) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonyclaw/agent-inspector",
3
- "version": "3.0.0",
3
+ "version": "3.0.2",
4
4
  "type": "module",
5
5
  "description": "Agent observability and knowledge capture layer for AI coding tools.",
6
6
  "license": "MIT",
package/src/cli.ts CHANGED
@@ -158,6 +158,10 @@ function openBrowser(targetUrl: string): void {
158
158
  detached: true,
159
159
  windowsHide: true,
160
160
  });
161
+ browserProcess.once("error", () => {
162
+ // Opening a browser is best-effort. Minimal Linux/container images may not
163
+ // include xdg-open, and that should not make the CLI look unhealthy.
164
+ });
161
165
  browserProcess.unref();
162
166
  }
163
167
 
@@ -629,6 +633,10 @@ async function runStart(args: string[]): Promise<void> {
629
633
  env: serverEnv,
630
634
  windowsHide: background,
631
635
  });
636
+ serverProcess.once("error", (err) => {
637
+ console.error(`Failed to start Agent Inspector runtime: ${err.message}`);
638
+ });
639
+ const serverExit = waitForProcessExit(serverProcess);
632
640
  if (!background) {
633
641
  pipeServerOutput(serverProcess, {
634
642
  enableIdentityProxy,
@@ -708,7 +716,7 @@ async function runStart(args: string[]): Promise<void> {
708
716
  }
709
717
  }
710
718
 
711
- process.exitCode = await waitForProcessExit(serverProcess);
719
+ process.exitCode = await serverExit;
712
720
 
713
721
  for (const proxy of identityProxies) {
714
722
  await new Promise<void>((resolve) => proxy.server.close(() => resolve()));
@@ -113,7 +113,6 @@ export function filterLogs(
113
113
  const DEBOUNCE_MS = 100;
114
114
  const HASH_SCROLL_ATTEMPTS = 12;
115
115
  const HASH_HIGHLIGHT_MS = 1800;
116
- const MAX_CLIENT_LOGS = 500;
117
116
  const SESSION_PAGE_LIMIT = 100;
118
117
 
119
118
  function buildLogsStreamUrl(sessionId: string | undefined): string {
@@ -160,9 +159,19 @@ function buildLogIndex(logs: readonly CapturedLog[]): Map<number, number> {
160
159
  return idx;
161
160
  }
162
161
 
163
- function trimClientLogs(logs: CapturedLog[]): CapturedLog[] {
164
- if (logs.length <= MAX_CLIENT_LOGS) return logs;
165
- return logs.slice(logs.length - MAX_CLIENT_LOGS);
162
+ export function mergeLogsById(
163
+ previousLogs: readonly CapturedLog[],
164
+ incomingLogs: readonly CapturedLog[],
165
+ ): CapturedLog[] {
166
+ if (incomingLogs.length === 0) return [...previousLogs];
167
+ const byId = new Map<number, CapturedLog>();
168
+ for (const log of previousLogs) {
169
+ byId.set(log.id, log);
170
+ }
171
+ for (const log of incomingLogs) {
172
+ byId.set(log.id, log);
173
+ }
174
+ return [...byId.values()].sort((left, right) => left.id - right.id);
166
175
  }
167
176
 
168
177
  export function ProxyViewerContainer({
@@ -227,25 +236,9 @@ export function ProxyViewerContainer({
227
236
 
228
237
  startLogTransition(() => {
229
238
  setAllLogs((prev) => {
230
- const next = [...prev];
231
- for (const log of updates) {
232
- const indexedPosition = logIndexRef.current.get(log.id);
233
- if (indexedPosition !== undefined && next[indexedPosition]?.id === log.id) {
234
- next[indexedPosition] = log;
235
- continue;
236
- }
237
-
238
- const existingPosition = next.findIndex((entry) => entry.id === log.id);
239
- if (existingPosition >= 0) {
240
- next[existingPosition] = log;
241
- continue;
242
- }
243
-
244
- next.push(log);
245
- }
246
- const trimmed = trimClientLogs(next);
247
- logIndexRef.current = buildLogIndex(trimmed);
248
- return trimmed;
239
+ const next = mergeLogsById(prev, updates);
240
+ logIndexRef.current = buildLogIndex(next);
241
+ return next;
249
242
  });
250
243
  });
251
244
  }, [startLogTransition]);
@@ -288,9 +281,11 @@ export function ProxyViewerContainer({
288
281
  }
289
282
  pendingUpdatesRef.current = [];
290
283
 
291
- const nextLogs = trimClientLogs(update.logs);
292
- logIndexRef.current = buildLogIndex(nextLogs);
293
- setAllLogs(nextLogs);
284
+ setAllLogs((prev) => {
285
+ const nextLogs = mergeLogsById(prev, update.logs);
286
+ logIndexRef.current = buildLogIndex(nextLogs);
287
+ return nextLogs;
288
+ });
294
289
  setStreamInitialized(true);
295
290
  dismissToast();
296
291
  } else if (update.type === "update") {
@@ -517,12 +512,12 @@ export function ProxyViewerContainer({
517
512
 
518
513
  setAllLogs((prev) => {
519
514
  const importedIds = new Set(result.logs.map((log) => log.id));
520
- const next = [...prev.filter((log) => !importedIds.has(log.id)), ...result.logs].sort(
521
- (left, right) => left.id - right.id,
515
+ const next = mergeLogsById(
516
+ prev.filter((log) => !importedIds.has(log.id)),
517
+ result.logs,
522
518
  );
523
- const trimmed = trimClientLogs(next);
524
- logIndexRef.current = buildLogIndex(trimmed);
525
- return trimmed;
519
+ logIndexRef.current = buildLogIndex(next);
520
+ return next;
526
521
  });
527
522
  setSelectedSession(result.sessionId);
528
523
  setSelectedModel("__all__");
@@ -14,6 +14,10 @@ type PendingJob = {
14
14
  reject: (err: Error) => void;
15
15
  };
16
16
 
17
+ function errorMessage(err: unknown): string {
18
+ return err instanceof Error ? err.message : String(err);
19
+ }
20
+
17
21
  function resolveSessionWorkerPath(): string {
18
22
  return fileURLToPath(new URL("./sessionWorkerEntry.ts", import.meta.url));
19
23
  }
@@ -95,7 +99,24 @@ export class SessionProcess {
95
99
  const child = this.ensureRunning();
96
100
  const id = String(++this.nextId);
97
101
  this.pending.set(id, { resolve, reject });
98
- child.send({ id, job });
102
+ try {
103
+ child.send({ id, job }, (err) => {
104
+ if (err === null || err === undefined) return;
105
+ this.pending.delete(id);
106
+ reject(
107
+ new Error(
108
+ `Session process send failed for session=${this.sessionId}: ${errorMessage(err)}`,
109
+ ),
110
+ );
111
+ });
112
+ } catch (err) {
113
+ this.pending.delete(id);
114
+ reject(
115
+ new Error(
116
+ `Session process send failed for session=${this.sessionId}: ${errorMessage(err)}`,
117
+ ),
118
+ );
119
+ }
99
120
  });
100
121
  }
101
122
 
@@ -1 +0,0 @@
1
- import{P as o}from"./ProxyViewerContainer-vhfV449d.js";import"./main-Do_fjInc.js";const r=o;export{r as component};