@tonyclaw/agent-inspector 3.1.19 → 3.1.20

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/backend/nitro.json +1 -1
  2. package/.output/cli.js +7 -4
  3. package/.output/server/_ssr/index.mjs +1 -1
  4. package/.output/server/_ssr/{router-0qlvqhVh.mjs → router-DpXchCXm.mjs} +123 -4
  5. package/.output/server/index.mjs +1 -1
  6. package/.output/ui/assets/{CompareDrawer-BOk9hd-Z.js → CompareDrawer-4i1QHaQf.js} +1 -1
  7. package/.output/ui/assets/{InspectorPet-DhHDBpk7.js → InspectorPet-Cw6VJLr7.js} +1 -1
  8. package/.output/ui/assets/{ProxyViewerContainer-BRYf987G.js → ProxyViewerContainer-BST0B7lY.js} +22 -21
  9. package/.output/ui/assets/{ReplayDialog-DJhKtuNB.js → ReplayDialog-DTs575iW.js} +1 -1
  10. package/.output/ui/assets/{RequestAnatomy-hP0tsqDC.js → RequestAnatomy-Cl6Es3gv.js} +1 -1
  11. package/.output/ui/assets/{ResponseView-BSiUkwCb.js → ResponseView-DNCCLkzG.js} +1 -1
  12. package/.output/ui/assets/{StreamingChunkSequence-CzQqwv4X.js → StreamingChunkSequence-DKaxRL9U.js} +1 -1
  13. package/.output/ui/assets/{_sessionId-BU-i6h0V.js → _sessionId-C-YjWz50.js} +1 -1
  14. package/.output/ui/assets/{_sessionId-C2Pq4Jb0.js → _sessionId-rkR3WgRq.js} +1 -1
  15. package/.output/ui/assets/{index-B7NeIBDf.js → index-B48RD1-5.js} +2 -2
  16. package/.output/ui/assets/{index-UUnRwbOJ.js → index-D0d-V67x.js} +1 -1
  17. package/.output/ui/assets/{index-zHpVF0jk.js → index-DYbzZTDM.js} +1 -1
  18. package/.output/ui/assets/{index-D8C-t-2U.js → index-DxiecWHw.js} +1 -1
  19. package/.output/ui/assets/{json-viewer-DOzS5rUT.js → json-viewer-CjAwZhHA.js} +1 -1
  20. package/.output/ui/assets/{jszip.min-CCCY7qNk.js → jszip.min-DEGEN1HP.js} +1 -1
  21. package/.output/ui/index.html +1 -1
  22. package/.output/workers/logFinalizer.worker.js +3 -0
  23. package/.output/workers/sessionWorkerEntry.js +3 -0
  24. package/package.json +4 -4
  25. package/src/contracts/index.ts +2 -0
  26. package/src/contracts/log.ts +5 -0
  27. package/src/lib/stopReason.ts +66 -39
  28. package/src/proxy/logIndex.ts +19 -0
  29. package/src/proxy/schemas.ts +2 -0
  30. package/src/proxy/sqliteLogIndex.ts +27 -2
  31. package/src/proxy/store.ts +7 -1
@@ -1,7 +1,12 @@
1
1
  import { existsSync } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
3
  import { logger, resolveLogDir } from "./logger";
4
- import { ToolTraceEventSchema, type ApiFormat, type CaptureIncompleteReason } from "./schemas";
4
+ import {
5
+ ToolTraceEventSchema,
6
+ type ApiFormat,
7
+ type CaptureIncompleteReason,
8
+ type StopReason,
9
+ } from "./schemas";
5
10
  import type { LogIndexEntry, LogIndexSummary } from "./logIndex";
6
11
  import { ensurePrivateDirectorySync, securePrivateFileSync } from "./privateDataPath";
7
12
 
@@ -52,6 +57,7 @@ CREATE TABLE IF NOT EXISTS log_index (
52
57
  dropped_bytes INTEGER NOT NULL DEFAULT 0,
53
58
  capture_incomplete_reason TEXT,
54
59
  warnings_json TEXT,
60
+ stop_reason TEXT,
55
61
  tool_trace_events_json TEXT,
56
62
  error TEXT
57
63
  );
@@ -99,10 +105,11 @@ INSERT INTO log_index (
99
105
  dropped_bytes,
100
106
  capture_incomplete_reason,
101
107
  warnings_json,
108
+ stop_reason,
102
109
  tool_trace_events_json,
103
110
  error
104
111
  ) VALUES (
105
- ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
112
+ ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
106
113
  )
107
114
  ON CONFLICT(id) DO UPDATE SET
108
115
  file = excluded.file,
@@ -141,6 +148,7 @@ ON CONFLICT(id) DO UPDATE SET
141
148
  dropped_bytes = excluded.dropped_bytes,
142
149
  capture_incomplete_reason = excluded.capture_incomplete_reason,
143
150
  warnings_json = excluded.warnings_json,
151
+ stop_reason = excluded.stop_reason,
144
152
  tool_trace_events_json = excluded.tool_trace_events_json,
145
153
  error = excluded.error
146
154
  `;
@@ -235,6 +243,7 @@ const REQUIRED_SCHEMA_COLUMNS = [
235
243
  { name: "dropped_chunks", definition: "INTEGER NOT NULL DEFAULT 0" },
236
244
  { name: "dropped_bytes", definition: "INTEGER NOT NULL DEFAULT 0" },
237
245
  { name: "capture_incomplete_reason", definition: "TEXT" },
246
+ { name: "stop_reason", definition: "TEXT" },
238
247
  { name: "tool_trace_events_json", definition: "TEXT" },
239
248
  ];
240
249
 
@@ -446,6 +455,7 @@ function entryParams(entry: LogIndexEntry): readonly unknown[] {
446
455
  summary?.droppedBytes ?? 0,
447
456
  summary?.captureIncompleteReason ?? null,
448
457
  warningJson(summary?.warnings),
458
+ summary?.stopReason ?? null,
449
459
  toolTraceEventsJson(summary),
450
460
  summary?.error ?? null,
451
461
  ];
@@ -496,6 +506,20 @@ function readCaptureIncompleteReason(row: unknown): CaptureIncompleteReason | nu
496
506
  }
497
507
  }
498
508
 
509
+ function readStopReason(row: unknown): StopReason | null {
510
+ const value = readString(row, "stop_reason");
511
+ switch (value) {
512
+ case "end_turn":
513
+ case "tool_use":
514
+ case "stop":
515
+ case "length":
516
+ return value;
517
+ case null:
518
+ default:
519
+ return null;
520
+ }
521
+ }
522
+
499
523
  function readWarnings(row: unknown): string[] | undefined {
500
524
  const value = readString(row, "warnings_json");
501
525
  if (value === null) return undefined;
@@ -566,6 +590,7 @@ function summaryFromRow(row: unknown, id: number): LogIndexSummary {
566
590
  droppedBytes: readNumber(row, "dropped_bytes") ?? 0,
567
591
  captureIncompleteReason: readCaptureIncompleteReason(row),
568
592
  warnings: readWarnings(row),
593
+ stopReason: readStopReason(row),
569
594
  toolTraceEvents: readToolTraceEvents(row),
570
595
  error: readString(row, "error"),
571
596
  };
@@ -37,6 +37,7 @@ import { writeChunks } from "./chunkStorage";
37
37
  import { closeSqliteLogIndex } from "./sqliteLogIndex";
38
38
  import type { SessionInfo, SessionLogSummary } from "../lib/sessionInfoContract";
39
39
  import { extractToolTraceEvents } from "../lib/toolTrace";
40
+ import { extractStopReason } from "../lib/stopReason";
40
41
  import { textByteLength } from "../lib/unknown";
41
42
  import { buildSessionInfo, buildSessionLogSummary } from "./sessionInfo";
42
43
  import type { CapturedLog } from "./schemas";
@@ -277,13 +278,15 @@ function normalizeLog(log: CapturedLog): CapturedLog {
277
278
  const droppedChunks = log.droppedChunks ?? 0;
278
279
  const droppedBytes = log.droppedBytes ?? 0;
279
280
  const captureIncompleteReason = log.captureIncompleteReason ?? null;
281
+ const stopReason = log.stopReason ?? extractStopReason(log);
280
282
  if (
281
283
  sessionId === log.sessionId &&
282
284
  apiFormat === log.apiFormat &&
283
285
  log.captureIncomplete !== undefined &&
284
286
  log.droppedChunks !== undefined &&
285
287
  log.droppedBytes !== undefined &&
286
- log.captureIncompleteReason !== undefined
288
+ log.captureIncompleteReason !== undefined &&
289
+ log.stopReason !== undefined
287
290
  ) {
288
291
  return log;
289
292
  }
@@ -295,6 +298,7 @@ function normalizeLog(log: CapturedLog): CapturedLog {
295
298
  droppedChunks,
296
299
  droppedBytes,
297
300
  captureIncompleteReason,
301
+ stopReason,
298
302
  };
299
303
  }
300
304
 
@@ -339,6 +343,7 @@ export function compactLogForList(log: CapturedLog): CapturedLog {
339
343
  rawHeaders: undefined,
340
344
  headers: undefined,
341
345
  streamingChunks: undefined,
346
+ stopReason: log.stopReason ?? extractStopReason(log),
342
347
  toolTraceEvents: log.toolTraceEvents ?? extractToolTraceEvents(log),
343
348
  rawRequestBodyBytes: log.rawRequestBodyBytes ?? textByteLength(log.rawRequestBody),
344
349
  responseTextBytes: log.responseTextBytes ?? textByteLength(log.responseText),
@@ -385,6 +390,7 @@ function compactLogFromIndexSummary(summary: LogIndexSummary): CapturedLog {
385
390
  droppedBytes: summary.droppedBytes,
386
391
  captureIncompleteReason: summary.captureIncompleteReason,
387
392
  warnings: summary.warnings,
393
+ stopReason: summary.stopReason,
388
394
  toolTraceEvents: summary.toolTraceEvents,
389
395
  error: summary.error,
390
396
  });