@tonyclaw/agent-inspector 2.0.37 → 2.0.38

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 (85) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-nEHCEVP4.js → CompareDrawer-hc5OoAls.js} +1 -1
  3. package/.output/public/assets/{ProxyViewerContainer-BstBIX2B.js → ProxyViewerContainer-BMKBs8Qz.js} +14 -14
  4. package/.output/public/assets/{ReplayDialog-CUnBdt1Q.js → ReplayDialog-CN-KM2nu.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-BU9VT2Sw.js → RequestAnatomy-B1kTlAUk.js} +1 -1
  6. package/.output/public/assets/{ResponseView-amxuKPKY.js → ResponseView-BchUjKjt.js} +1 -1
  7. package/.output/public/assets/{StreamingChunkSequence-DpscrQM2.js → StreamingChunkSequence-BQOxI9Hi.js} +1 -1
  8. package/.output/public/assets/_sessionId-CVw5e8TK.js +1 -0
  9. package/.output/public/assets/index-BdUTMQL6.js +1 -0
  10. package/.output/public/assets/{main-D56QvEyw.js → main-Blykwzsn.js} +2 -2
  11. package/.output/server/{_sessionId-ChwEDyI4.mjs → _sessionId-BUNZz2zZ.mjs} +2 -2
  12. package/.output/server/_ssr/{CompareDrawer-Ce2590rK.mjs → CompareDrawer-VaDYPM5G.mjs} +2 -2
  13. package/.output/server/_ssr/{ProxyViewerContainer-D6xM8A0S.mjs → ProxyViewerContainer-CpdWs7Pk.mjs} +9 -9
  14. package/.output/server/_ssr/{ReplayDialog-CB4KOlLe.mjs → ReplayDialog-DbfIjJhb.mjs} +3 -3
  15. package/.output/server/_ssr/{RequestAnatomy-CsWV3W03.mjs → RequestAnatomy-CrD8h6As.mjs} +2 -2
  16. package/.output/server/_ssr/{ResponseView-BuCCV3LU.mjs → ResponseView-BalvDwtU.mjs} +2 -2
  17. package/.output/server/_ssr/{StreamingChunkSequence-C5dE7V1d.mjs → StreamingChunkSequence-RxatDbPV.mjs} +2 -2
  18. package/.output/server/_ssr/{index-BeIi0CPv.mjs → index-11qAtV9d.mjs} +2 -2
  19. package/.output/server/_ssr/index.mjs +2 -2
  20. package/.output/server/_ssr/{router-Ca2MCyUX.mjs → router-C4OdRnqX.mjs} +69 -76
  21. package/.output/server/{_tanstack-start-manifest_v-CBAJfSAX.mjs → _tanstack-start-manifest_v-F6bwcl33.mjs} +1 -1
  22. package/.output/server/index.mjs +61 -61
  23. package/README.md +1 -1
  24. package/package.json +1 -1
  25. package/src/components/ProxyViewer.tsx +1 -1
  26. package/src/components/ProxyViewerContainer.tsx +1 -1
  27. package/src/components/providers/ProviderForm.tsx +2 -2
  28. package/src/components/proxy-viewer/AgentTraceSummary.tsx +1 -1
  29. package/src/components/proxy-viewer/CompareDrawer.tsx +1 -1
  30. package/src/components/proxy-viewer/ConversationGroup.tsx +1 -1
  31. package/src/components/proxy-viewer/ConversationGroupList.tsx +1 -1
  32. package/src/components/proxy-viewer/ConversationHeader.tsx +1 -1
  33. package/src/components/proxy-viewer/LogEntry.tsx +1 -1
  34. package/src/components/proxy-viewer/LogEntryHeader.tsx +1 -1
  35. package/src/components/proxy-viewer/ReplayDialog.tsx +1 -1
  36. package/src/components/proxy-viewer/ResponseView.tsx +2 -2
  37. package/src/components/proxy-viewer/StreamingChunkSequence.tsx +1 -1
  38. package/src/components/proxy-viewer/TurnGroup.tsx +1 -1
  39. package/src/components/proxy-viewer/anatomy/sessionContextSummary.ts +1 -1
  40. package/src/components/proxy-viewer/formats/anthropic/ContentBlocks.tsx +1 -1
  41. package/src/components/proxy-viewer/formats/anthropic/ResponseView.tsx +2 -2
  42. package/src/components/proxy-viewer/formats/index.tsx +5 -3
  43. package/src/components/proxy-viewer/formats/openai/ResponseView.tsx +1 -1
  44. package/src/components/proxy-viewer/log-formats/anthropic.ts +1 -4
  45. package/src/components/proxy-viewer/log-formats/index.ts +6 -6
  46. package/src/components/proxy-viewer/log-formats/openai.ts +1 -1
  47. package/src/components/proxy-viewer/log-formats/types.ts +2 -2
  48. package/src/components/proxy-viewer/viewerState.ts +1 -1
  49. package/src/contracts/anthropic.ts +235 -0
  50. package/src/contracts/index.ts +27 -0
  51. package/src/contracts/json.ts +32 -0
  52. package/src/contracts/log.ts +72 -0
  53. package/src/contracts/openai.ts +176 -0
  54. package/src/knowledge/distiller.ts +1 -1
  55. package/src/lib/export-logs.ts +1 -1
  56. package/src/lib/groupContract.ts +1 -1
  57. package/src/lib/objectUtils.ts +3 -3
  58. package/src/lib/providerTestContract.ts +1 -1
  59. package/src/lib/runContract.ts +1 -1
  60. package/src/lib/stopReason.ts +1 -1
  61. package/src/mcp/previewExtractor.ts +4 -7
  62. package/src/mcp/server.ts +1 -1
  63. package/src/mcp/toolHandlers.ts +1 -1
  64. package/src/proxy/formats/anthropic/anthropicProvider.ts +2 -2
  65. package/src/proxy/formats/anthropic/schemas.ts +12 -235
  66. package/src/proxy/formats/handler.ts +2 -2
  67. package/src/proxy/formats/index.ts +1 -1
  68. package/src/proxy/formats/jsonSchema.ts +2 -36
  69. package/src/proxy/formats/openai/alibabaProvider.ts +2 -2
  70. package/src/proxy/formats/openai/provider.ts +2 -2
  71. package/src/proxy/formats/openai/schemas.ts +14 -187
  72. package/src/proxy/formats/openai/zhipuProvider.ts +2 -2
  73. package/src/proxy/formats/{protocol.ts → providerAdapter.ts} +5 -5
  74. package/src/proxy/formats/providerRegistry.ts +7 -7
  75. package/src/proxy/formats/providers/index.ts +1 -1
  76. package/src/proxy/formats/registry.ts +16 -13
  77. package/src/proxy/handler.ts +1 -1
  78. package/src/proxy/openaiOrphanToolStrip.ts +1 -1
  79. package/src/proxy/providers.ts +1 -1
  80. package/src/proxy/schemas.ts +18 -80
  81. package/src/proxy/store.ts +2 -2
  82. package/src/proxy/upstream.ts +1 -1
  83. package/src/routes/api/logs.stream.ts +1 -1
  84. package/.output/public/assets/_sessionId-7c9bsOFT.js +0 -1
  85. package/.output/public/assets/index-B7a5OmIO.js +0 -1
@@ -198,7 +198,7 @@ function getResponse() {
198
198
  return event.res;
199
199
  }
200
200
  async function getStartManifest(matchedRoutes) {
201
- const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-CBAJfSAX.mjs");
201
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-F6bwcl33.mjs");
202
202
  const startManifest = tsrStartManifest();
203
203
  const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
204
204
  rootRoute.assets = rootRoute.assets || [];
@@ -776,7 +776,7 @@ let entriesPromise;
776
776
  let baseManifestPromise;
777
777
  let cachedFinalManifestPromise;
778
778
  async function loadEntries() {
779
- const routerEntry = await import("./router-Ca2MCyUX.mjs").then((n) => n.w);
779
+ const routerEntry = await import("./router-C4OdRnqX.mjs").then((n) => n.w);
780
780
  const startEntry = await import("./start-HYkvq4Ni.mjs");
781
781
  return { startEntry, routerEntry };
782
782
  }
@@ -93,7 +93,7 @@ function RootDocument({ children }) {
93
93
  ] })
94
94
  ] });
95
95
  }
96
- const $$splitComponentImporter$1 = () => import("./index-BeIi0CPv.mjs");
96
+ const $$splitComponentImporter$1 = () => import("./index-11qAtV9d.mjs");
97
97
  const Route$y = createFileRoute("/")({
98
98
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
99
99
  });
@@ -136,7 +136,7 @@ function decodeSessionIdFromPath(encoded) {
136
136
  function getSessionPath(sessionId) {
137
137
  return `/session/${encodeSessionIdForPath(sessionId)}`;
138
138
  }
139
- const $$splitComponentImporter = () => import("../_sessionId-ChwEDyI4.mjs");
139
+ const $$splitComponentImporter = () => import("../_sessionId-BUNZz2zZ.mjs");
140
140
  const Route$x = createFileRoute("/session/$sessionId")({
141
141
  component: lazyRouteComponent($$splitComponentImporter, "component"),
142
142
  parseParams: (params) => ({
@@ -360,6 +360,56 @@ const JsonValueSchema = lazy(
360
360
  function trustAsJsonValue(value) {
361
361
  return value;
362
362
  }
363
+ const StreamingChunkSchema$1 = object({
364
+ index: number(),
365
+ timestamp: number(),
366
+ type: string(),
367
+ data: JsonValueSchema
368
+ });
369
+ const StreamingChunksArraySchema = object({
370
+ chunks: array(StreamingChunkSchema$1),
371
+ truncated: boolean().optional().default(false)
372
+ });
373
+ const CapturedLogSchema = object({
374
+ id: number(),
375
+ timestamp: string(),
376
+ method: string(),
377
+ path: string(),
378
+ model: string().nullable(),
379
+ sessionId: string().nullable(),
380
+ rawRequestBody: string().nullable(),
381
+ responseStatus: number().nullable(),
382
+ responseText: string().nullable(),
383
+ inputTokens: number().nullable(),
384
+ outputTokens: number().nullable(),
385
+ cacheCreationInputTokens: number().nullable(),
386
+ cacheReadInputTokens: number().nullable(),
387
+ elapsedMs: number().nullable(),
388
+ firstChunkMs: number().nullable().optional(),
389
+ totalStreamMs: number().nullable().optional(),
390
+ tokensPerSecond: number().nullable().optional(),
391
+ streaming: boolean(),
392
+ userAgent: string().nullable(),
393
+ origin: string().nullable(),
394
+ rawHeaders: record(string(), string()).optional(),
395
+ /** Headers sent to the upstream LLM */
396
+ headers: record(string(), string()).optional(),
397
+ apiFormat: _enum(["anthropic", "openai", "unknown"]).default("unknown"),
398
+ isTest: boolean().optional().default(false),
399
+ replayOfLogId: number().nullable().optional(),
400
+ providerName: string().nullable().optional(),
401
+ clientPort: number().nullable().optional(),
402
+ clientPid: number().nullable().optional(),
403
+ clientCwd: string().nullable().optional(),
404
+ clientProjectFolder: string().nullable().optional(),
405
+ streamingChunks: StreamingChunksArraySchema.optional(),
406
+ streamingChunksPath: string().nullable().optional(),
407
+ rawRequestBodyBytes: number().int().nonnegative().nullable().optional(),
408
+ responseTextBytes: number().int().nonnegative().nullable().optional(),
409
+ bodyContentMode: _enum(["full", "compact", "truncated"]).optional(),
410
+ /** Error message from streaming response (e.g., SSE error event) */
411
+ error: string().nullable().optional()
412
+ });
363
413
  const CacheControl = object({
364
414
  type: string(),
365
415
  ttl: string().optional(),
@@ -563,9 +613,7 @@ const OpenAIMessage = object({
563
613
  name: string().optional(),
564
614
  reasoning_content: string().optional(),
565
615
  thinking: string().optional(),
566
- // Some providers use 'thinking' field
567
616
  think: string().optional()
568
- // MiniMax uses 'think' field
569
617
  });
570
618
  const OpenAIFunctionCall = object({
571
619
  name: string(),
@@ -613,9 +661,7 @@ const OpenAIChoiceDelta = object({
613
661
  content: string().nullable().optional(),
614
662
  reasoning_content: string().nullable().optional(),
615
663
  thinking: string().nullable().optional(),
616
- // Some providers use 'thinking' field
617
664
  think: string().nullable().optional(),
618
- // MiniMax uses 'think' field
619
665
  function_call: object({ name: string().optional(), arguments: string().optional() }).nullable().optional(),
620
666
  tool_calls: array(
621
667
  object({
@@ -636,9 +682,7 @@ const OpenAIChoice = object({
636
682
  content: string().nullable(),
637
683
  reasoning_content: string().optional(),
638
684
  thinking: string().optional(),
639
- // Some providers use 'thinking' field in message
640
685
  think: string().optional(),
641
- // MiniMax uses 'think' field in message
642
686
  function_call: object({ name: string(), arguments: string() }).nullable().optional(),
643
687
  tool_calls: array(OpenAIToolCallSchema).optional()
644
688
  }).optional(),
@@ -656,7 +700,6 @@ const OpenAIResponseSchema$1 = object({
656
700
  completion_tokens: number().nullable().optional(),
657
701
  total_tokens: number().nullable().optional()
658
702
  }).passthrough(),
659
- // Allow extra fields like prompt_tokens_details, completion_tokens_details
660
703
  service_tier: string().nullable().optional(),
661
704
  system_fingerprint: string().nullable().optional()
662
705
  }).passthrough();
@@ -688,56 +731,6 @@ function parseOpenAIResponse(rawBody) {
688
731
  return null;
689
732
  }
690
733
  }
691
- const StreamingChunkSchema$1 = object({
692
- index: number(),
693
- timestamp: number(),
694
- type: string(),
695
- data: JsonValueSchema
696
- });
697
- const StreamingChunksArraySchema = object({
698
- chunks: array(StreamingChunkSchema$1),
699
- truncated: boolean().optional().default(false)
700
- });
701
- const CapturedLogSchema = object({
702
- id: number(),
703
- timestamp: string(),
704
- method: string(),
705
- path: string(),
706
- model: string().nullable(),
707
- sessionId: string().nullable(),
708
- rawRequestBody: string().nullable(),
709
- responseStatus: number().nullable(),
710
- responseText: string().nullable(),
711
- inputTokens: number().nullable(),
712
- outputTokens: number().nullable(),
713
- cacheCreationInputTokens: number().nullable(),
714
- cacheReadInputTokens: number().nullable(),
715
- elapsedMs: number().nullable(),
716
- firstChunkMs: number().nullable().optional(),
717
- totalStreamMs: number().nullable().optional(),
718
- tokensPerSecond: number().nullable().optional(),
719
- streaming: boolean(),
720
- userAgent: string().nullable(),
721
- origin: string().nullable(),
722
- rawHeaders: record(string(), string()).optional(),
723
- /** Headers sent to the upstream LLM */
724
- headers: record(string(), string()).optional(),
725
- apiFormat: _enum(["anthropic", "openai", "unknown"]).default("unknown"),
726
- isTest: boolean().optional().default(false),
727
- replayOfLogId: number().nullable().optional(),
728
- providerName: string().nullable().optional(),
729
- clientPort: number().nullable().optional(),
730
- clientPid: number().nullable().optional(),
731
- clientCwd: string().nullable().optional(),
732
- clientProjectFolder: string().nullable().optional(),
733
- streamingChunks: StreamingChunksArraySchema.optional(),
734
- streamingChunksPath: string().nullable().optional(),
735
- rawRequestBodyBytes: number().int().nonnegative().nullable().optional(),
736
- responseTextBytes: number().int().nonnegative().nullable().optional(),
737
- bodyContentMode: _enum(["full", "compact", "truncated"]).optional(),
738
- /** Error message from streaming response (e.g., SSE error event) */
739
- error: string().nullable().optional()
740
- });
741
734
  const RequestModelSchema = object({
742
735
  model: string()
743
736
  });
@@ -1252,12 +1245,12 @@ class FormatRegistryImpl {
1252
1245
  const format = this.pathMap.get(messagesPath);
1253
1246
  return format === void 0 ? void 0 : this.handlers.get(format);
1254
1247
  }
1255
- /** Get the wire format matching a request path without requiring handlers. */
1256
- getFormatByPath(path2) {
1248
+ /** Get the API format matching a request path without requiring handlers. */
1249
+ getApiFormatByPath(path2) {
1257
1250
  const messagesPath = path2.split("?")[0] ?? "";
1258
1251
  return this.pathMap.get(messagesPath);
1259
1252
  }
1260
- /** Detect format from request body content */
1253
+ /** Detect API format from request body content */
1261
1254
  detectFormat(rawBody) {
1262
1255
  if (rawBody === null) return "unknown";
1263
1256
  for (const handler of this.handlers.values()) {
@@ -1270,8 +1263,8 @@ const formatRegistry = new FormatRegistryImpl();
1270
1263
  function formatForPath(path2) {
1271
1264
  return formatRegistry.getByPath(path2) ?? null;
1272
1265
  }
1273
- function requestFormatForPath(path2) {
1274
- return formatRegistry.getFormatByPath(path2) ?? "unknown";
1266
+ function apiFormatForPath(path2) {
1267
+ return formatRegistry.getApiFormatByPath(path2) ?? "unknown";
1275
1268
  }
1276
1269
  formatRegistry.registerPath(PATH_V1_MESSAGES, "anthropic");
1277
1270
  formatRegistry.registerPath(PATH_V1_CHAT_COMPLETIONS, "openai");
@@ -1583,7 +1576,7 @@ function evictOldestIfNeeded() {
1583
1576
  }
1584
1577
  function normalizeLog(log) {
1585
1578
  const sessionId = getLogSessionId(log);
1586
- const pathFormat = requestFormatForPath(log.path);
1579
+ const pathFormat = apiFormatForPath(log.path);
1587
1580
  const apiFormat = pathFormat === "unknown" ? log.apiFormat : pathFormat;
1588
1581
  if (sessionId === log.sessionId && apiFormat === log.apiFormat) return log;
1589
1582
  return { ...log, sessionId, apiFormat };
@@ -6103,7 +6096,7 @@ const Route$s = createFileRoute("/api/models")({
6103
6096
  }
6104
6097
  }
6105
6098
  });
6106
- const version = "2.0.37";
6099
+ const version = "2.0.38";
6107
6100
  const packageJson = {
6108
6101
  version
6109
6102
  };
@@ -11738,19 +11731,19 @@ export {
11738
11731
  DEFAULT_TIME_DISPLAY_FORMAT as c,
11739
11732
  RuntimeConfigSchema as d,
11740
11733
  AnthropicRequestSchema as e,
11741
- stripClaudeCodeBillingHeader as f,
11734
+ apiFormatForPath as f,
11742
11735
  getSessionPath as g,
11743
- GroupEvidenceExportResultSchema as h,
11744
- DeleteInspectorGroupResponseSchema as i,
11745
- providerHasContextMetadata as j,
11746
- findProviderModelMetadata as k,
11747
- createPendingProviderTestResults as l,
11736
+ stripClaudeCodeBillingHeader as h,
11737
+ GroupEvidenceExportResultSchema as i,
11738
+ DeleteInspectorGroupResponseSchema as j,
11739
+ providerHasContextMetadata as k,
11740
+ findProviderModelMetadata as l,
11748
11741
  maskApiKey as m,
11749
- ProviderTestResultsSchema as n,
11750
- createFailedProviderTestResults as o,
11742
+ createPendingProviderTestResults as n,
11743
+ ProviderTestResultsSchema as o,
11751
11744
  parseOpenAIResponse as p,
11752
- MAX_PROVIDER_TEST_TIMEOUT_SECONDS as q,
11753
- requestFormatForPath as r,
11745
+ createFailedProviderTestResults as q,
11746
+ MAX_PROVIDER_TEST_TIMEOUT_SECONDS as r,
11754
11747
  safeGetOwnProperty as s,
11755
11748
  resolveProviderContextWindow as t,
11756
11749
  isPlainRecord as u,
@@ -1,4 +1,4 @@
1
- const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/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-D56QvEyw.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-B7a5OmIO.js", "/assets/ProxyViewerContainer-BstBIX2B.js"] }, "/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/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-7c9bsOFT.js", "/assets/ProxyViewerContainer-BstBIX2B.js"] }, "/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/chunks", "/api/logs/$id/replay"] }, "/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/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-D56QvEyw.js" });
1
+ const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/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-Blykwzsn.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-BdUTMQL6.js", "/assets/ProxyViewerContainer-BMKBs8Qz.js"] }, "/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/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-CVw5e8TK.js", "/assets/ProxyViewerContainer-BMKBs8Qz.js"] }, "/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/chunks", "/api/logs/$id/replay"] }, "/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/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-Blykwzsn.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };
@@ -35,103 +35,103 @@ const headers = ((m) => function headersRouteRule(event) {
35
35
  }
36
36
  });
37
37
  const assets = {
38
- "/assets/CompareDrawer-nEHCEVP4.js": {
38
+ "/assets/alibaba-TTwafVwX.svg": {
39
+ "type": "image/svg+xml",
40
+ "etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
41
+ "mtime": "2026-07-01T07:15:57.121Z",
42
+ "size": 5915,
43
+ "path": "../public/assets/alibaba-TTwafVwX.svg"
44
+ },
45
+ "/assets/CompareDrawer-hc5OoAls.js": {
39
46
  "type": "text/javascript; charset=utf-8",
40
- "etag": '"49fe-1WPgHKOPq0ddXIWvSE/vtMZLaDQ"',
41
- "mtime": "2026-07-01T06:30:10.266Z",
47
+ "etag": '"49fe-BHtwU/NjhFJzLdwy953kVTz0OMs"',
48
+ "mtime": "2026-07-01T07:15:57.121Z",
42
49
  "size": 18942,
43
- "path": "../public/assets/CompareDrawer-nEHCEVP4.js"
50
+ "path": "../public/assets/CompareDrawer-hc5OoAls.js"
51
+ },
52
+ "/assets/index-BdUTMQL6.js": {
53
+ "type": "text/javascript; charset=utf-8",
54
+ "etag": '"74-62iPuuX47jLXNHf/ZV6ct/elkTk"',
55
+ "mtime": "2026-07-01T07:15:57.121Z",
56
+ "size": 116,
57
+ "path": "../public/assets/index-BdUTMQL6.js"
44
58
  },
45
59
  "/assets/minimax-BPMzvuL-.jpeg": {
46
60
  "type": "image/jpeg",
47
61
  "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
48
- "mtime": "2026-07-01T06:30:10.264Z",
62
+ "mtime": "2026-07-01T07:15:57.121Z",
49
63
  "size": 6918,
50
64
  "path": "../public/assets/minimax-BPMzvuL-.jpeg"
51
65
  },
52
- "/assets/index-B7a5OmIO.js": {
53
- "type": "text/javascript; charset=utf-8",
54
- "etag": '"74-2tmqYa6JYQCoz24PRr5/e9l3IEU"',
55
- "mtime": "2026-07-01T06:30:10.264Z",
56
- "size": 116,
57
- "path": "../public/assets/index-B7a5OmIO.js"
58
- },
59
66
  "/assets/index-BfGJEb-2.css": {
60
67
  "type": "text/css; charset=utf-8",
61
68
  "etag": '"1acc9-JrjZs7fIRGuBr66cqP9miLHcLKk"',
62
- "mtime": "2026-07-01T06:30:10.264Z",
69
+ "mtime": "2026-07-01T07:15:57.121Z",
63
70
  "size": 109769,
64
71
  "path": "../public/assets/index-BfGJEb-2.css"
65
72
  },
66
- "/assets/alibaba-TTwafVwX.svg": {
67
- "type": "image/svg+xml",
68
- "etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
69
- "mtime": "2026-07-01T06:30:10.264Z",
70
- "size": 5915,
71
- "path": "../public/assets/alibaba-TTwafVwX.svg"
72
- },
73
- "/assets/ReplayDialog-CUnBdt1Q.js": {
73
+ "/assets/main-Blykwzsn.js": {
74
74
  "type": "text/javascript; charset=utf-8",
75
- "etag": '"318c-mANbJzYXI0pIcc5jzrFrUuqiMwc"',
76
- "mtime": "2026-07-01T06:30:10.266Z",
77
- "size": 12684,
78
- "path": "../public/assets/ReplayDialog-CUnBdt1Q.js"
75
+ "etag": '"517d9-1RW0upmMLsMivL5FlKjWPPFMbb8"',
76
+ "mtime": "2026-07-01T07:15:57.121Z",
77
+ "size": 333785,
78
+ "path": "../public/assets/main-Blykwzsn.js"
79
79
  },
80
- "/assets/ResponseView-amxuKPKY.js": {
80
+ "/assets/ReplayDialog-CN-KM2nu.js": {
81
81
  "type": "text/javascript; charset=utf-8",
82
- "etag": '"30d0-bu5y6cqBhqxvCaAnThTTl2zDf04"',
83
- "mtime": "2026-07-01T06:30:10.266Z",
84
- "size": 12496,
85
- "path": "../public/assets/ResponseView-amxuKPKY.js"
82
+ "etag": '"318c-bHppq4F90VcBylI8MEq9phZKKYY"',
83
+ "mtime": "2026-07-01T07:15:57.121Z",
84
+ "size": 12684,
85
+ "path": "../public/assets/ReplayDialog-CN-KM2nu.js"
86
86
  },
87
- "/assets/StreamingChunkSequence-DpscrQM2.js": {
87
+ "/assets/StreamingChunkSequence-BQOxI9Hi.js": {
88
88
  "type": "text/javascript; charset=utf-8",
89
- "etag": '"d57-OC5EYm/6GsS9Oxo54ALIugTyOjI"',
90
- "mtime": "2026-07-01T06:30:10.266Z",
89
+ "etag": '"d57-VudeFeolN8IfFVek6HMLmXTmPQY"',
90
+ "mtime": "2026-07-01T07:15:57.121Z",
91
91
  "size": 3415,
92
- "path": "../public/assets/StreamingChunkSequence-DpscrQM2.js"
92
+ "path": "../public/assets/StreamingChunkSequence-BQOxI9Hi.js"
93
+ },
94
+ "/assets/zhipuai-BPNAnxo-.svg": {
95
+ "type": "image/svg+xml",
96
+ "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
97
+ "mtime": "2026-07-01T07:15:57.121Z",
98
+ "size": 11256,
99
+ "path": "../public/assets/zhipuai-BPNAnxo-.svg"
93
100
  },
94
- "/assets/main-D56QvEyw.js": {
101
+ "/assets/RequestAnatomy-B1kTlAUk.js": {
95
102
  "type": "text/javascript; charset=utf-8",
96
- "etag": '"517d9-nZ39KCP9uiOY2kWYxTAU9TcHQ/Y"',
97
- "mtime": "2026-07-01T06:30:10.264Z",
98
- "size": 333785,
99
- "path": "../public/assets/main-D56QvEyw.js"
103
+ "etag": '"4485-zOrU17hrJUbuuYLZW8HdqHozpuE"',
104
+ "mtime": "2026-07-01T07:15:57.121Z",
105
+ "size": 17541,
106
+ "path": "../public/assets/RequestAnatomy-B1kTlAUk.js"
100
107
  },
101
- "/assets/_sessionId-7c9bsOFT.js": {
108
+ "/assets/_sessionId-CVw5e8TK.js": {
102
109
  "type": "text/javascript; charset=utf-8",
103
- "etag": '"d2-PXCfOJpgg3Ks7hrg95OEj0HlduI"',
104
- "mtime": "2026-07-01T06:30:10.264Z",
110
+ "etag": '"d2-cV8zzbK+/RUFmfT5dWvK333bSe8"',
111
+ "mtime": "2026-07-01T07:15:57.121Z",
105
112
  "size": 210,
106
- "path": "../public/assets/_sessionId-7c9bsOFT.js"
113
+ "path": "../public/assets/_sessionId-CVw5e8TK.js"
107
114
  },
108
- "/assets/RequestAnatomy-BU9VT2Sw.js": {
115
+ "/assets/ResponseView-BchUjKjt.js": {
109
116
  "type": "text/javascript; charset=utf-8",
110
- "etag": '"4485-wbw3sIZ8wpySXN4TtsN05mU2t6E"',
111
- "mtime": "2026-07-01T06:30:10.266Z",
112
- "size": 17541,
113
- "path": "../public/assets/RequestAnatomy-BU9VT2Sw.js"
114
- },
115
- "/assets/zhipuai-BPNAnxo-.svg": {
116
- "type": "image/svg+xml",
117
- "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
118
- "mtime": "2026-07-01T06:30:10.264Z",
119
- "size": 11256,
120
- "path": "../public/assets/zhipuai-BPNAnxo-.svg"
117
+ "etag": '"30d0-i5IJUGuKCFfLsaiZy5PG5wFw9NM"',
118
+ "mtime": "2026-07-01T07:15:57.121Z",
119
+ "size": 12496,
120
+ "path": "../public/assets/ResponseView-BchUjKjt.js"
121
121
  },
122
122
  "/assets/qwen-CONDcHqt.png": {
123
123
  "type": "image/png",
124
124
  "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
125
- "mtime": "2026-07-01T06:30:10.264Z",
125
+ "mtime": "2026-07-01T07:15:57.121Z",
126
126
  "size": 357059,
127
127
  "path": "../public/assets/qwen-CONDcHqt.png"
128
128
  },
129
- "/assets/ProxyViewerContainer-BstBIX2B.js": {
129
+ "/assets/ProxyViewerContainer-BMKBs8Qz.js": {
130
130
  "type": "text/javascript; charset=utf-8",
131
- "etag": '"b5aeb-NVYP8P0JeiMfeh1ogEwxQvpdbUc"',
132
- "mtime": "2026-07-01T06:30:10.266Z",
133
- "size": 744171,
134
- "path": "../public/assets/ProxyViewerContainer-BstBIX2B.js"
131
+ "etag": '"b5a7d-eALnI6HNEToSu0yqva+VFivYgJA"',
132
+ "mtime": "2026-07-01T07:15:57.121Z",
133
+ "size": 744061,
134
+ "path": "../public/assets/ProxyViewerContainer-BMKBs8Qz.js"
135
135
  }
136
136
  };
137
137
  function readAsset(id) {
package/README.md CHANGED
@@ -139,7 +139,7 @@ needed for the session timeline, request/response views, token usage, provider
139
139
  routing, errors, and knowledge workflows, but it does not retain raw request
140
140
  headers, upstream headers, or detailed streaming chunk artifacts.
141
141
 
142
- Use `full` mode when you need protocol-level diagnostics:
142
+ Use `full` mode when you need API-format-level diagnostics:
143
143
 
144
144
  ```bash
145
145
  agent-inspector --mode full
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonyclaw/agent-inspector",
3
- "version": "2.0.37",
3
+ "version": "2.0.38",
4
4
  "type": "module",
5
5
  "description": "Agent observability and knowledge capture layer for AI coding tools.",
6
6
  "license": "MIT",
@@ -11,7 +11,7 @@ import {
11
11
  Trash2,
12
12
  } from "lucide-react";
13
13
 
14
- import type { CapturedLog } from "../proxy/schemas";
14
+ import type { CapturedLog } from "../contracts";
15
15
  import { exportLogsAsZip, type ExportMode } from "../lib/export-logs";
16
16
  import type { CaptureMode, TimeDisplayFormat } from "../lib/runtimeConfig";
17
17
  import { formatTimestampRange } from "../lib/timeDisplay";
@@ -1,6 +1,6 @@
1
1
  import { useState, useEffect, useCallback, useRef, useMemo, type JSX } from "react";
2
2
  import { z } from "zod";
3
- import { CapturedLogSchema, type CapturedLog } from "../proxy/schemas";
3
+ import { CapturedLogSchema, type CapturedLog } from "../contracts";
4
4
  import { useStripConfig } from "../lib/useStripConfig";
5
5
  import { OnboardingBanner } from "./OnboardingBanner";
6
6
  import { ProxyViewer } from "./ProxyViewer";
@@ -845,7 +845,7 @@ export function ProviderForm({ provider, onSubmit, onCancel }: ProviderFormProps
845
845
  Anthropic Format
846
846
  </button>
847
847
  </TooltipTrigger>
848
- <TooltipContent>Anthropic Messages API protocol</TooltipContent>
848
+ <TooltipContent>Anthropic Messages API format</TooltipContent>
849
849
  </Tooltip>
850
850
  </TooltipProvider>
851
851
  <TooltipProvider>
@@ -863,7 +863,7 @@ export function ProviderForm({ provider, onSubmit, onCancel }: ProviderFormProps
863
863
  OpenAI Format
864
864
  </button>
865
865
  </TooltipTrigger>
866
- <TooltipContent>OpenAI Chat Completions API protocol</TooltipContent>
866
+ <TooltipContent>OpenAI Chat Completions API format</TooltipContent>
867
867
  </Tooltip>
868
868
  </TooltipProvider>
869
869
  </div>
@@ -29,7 +29,7 @@ import {
29
29
  type KnowledgeCandidate,
30
30
  type KnowledgeCandidateStatus,
31
31
  } from "../../knowledge/types";
32
- import type { CapturedLog } from "../../proxy/schemas";
32
+ import type { CapturedLog } from "../../contracts";
33
33
  import { Badge } from "../ui/badge";
34
34
  import { Button } from "../ui/button";
35
35
  import { buildTraceSummary, extractToolTraceEvents, type TraceSummary } from "./viewerState";
@@ -13,7 +13,7 @@ import {
13
13
  X,
14
14
  } from "lucide-react";
15
15
  import { cn, formatTokens } from "../../lib/utils";
16
- import type { CapturedLog } from "../../proxy/schemas";
16
+ import type { CapturedLog } from "../../contracts";
17
17
  import {
18
18
  type DiffOp,
19
19
  type JsonNode,
@@ -1,7 +1,7 @@
1
1
  import { useState, memo, useCallback, useEffect, useMemo } from "react";
2
2
  import type { JSX } from "react";
3
3
  import type { TimeDisplayFormat } from "../../lib/runtimeConfig";
4
- import type { CapturedLog } from "../../proxy/schemas";
4
+ import type { CapturedLog } from "../../contracts";
5
5
  import {
6
6
  ConversationHeader,
7
7
  getGroupApiFormat,
@@ -1,6 +1,6 @@
1
1
  import { type JSX, useCallback, useEffect, useMemo, useState } from "react";
2
2
  import { useWindowVirtualizer } from "@tanstack/react-virtual";
3
- import type { CapturedLog } from "../../proxy/schemas";
3
+ import type { CapturedLog } from "../../contracts";
4
4
  import { ConversationGroup, type ConversationGroupProps } from "./ConversationGroup";
5
5
  import type { ConversationGroupData } from "./ConversationHeader";
6
6
  import { LOG_FOCUS_REQUEST_EVENT, readLogFocusRequest } from "./logFocus";
@@ -15,7 +15,7 @@ import { getSessionPath } from "../../lib/sessionUrl";
15
15
  import type { TimeDisplayFormat } from "../../lib/runtimeConfig";
16
16
  import { formatTimestampRange } from "../../lib/timeDisplay";
17
17
  import { cn, formatTokens } from "../../lib/utils";
18
- import type { CapturedLog } from "../../proxy/schemas";
18
+ import type { CapturedLog } from "../../contracts";
19
19
  import { Badge } from "../ui/badge";
20
20
  import { ConfirmDialog } from "../ui/confirm-dialog";
21
21
  import { resolveLogFormat } from "./log-formats";
@@ -1,7 +1,7 @@
1
1
  import { GitCompareArrows } from "lucide-react";
2
2
  import { Suspense, type JSX } from "react";
3
3
  import { useEffect, useMemo, useRef, useState, memo } from "react";
4
- import type { CapturedLog } from "../../proxy/schemas";
4
+ import type { CapturedLog } from "../../contracts";
5
5
  import type { TimeDisplayFormat } from "../../lib/runtimeConfig";
6
6
  import { stripClaudeCodeBillingHeader } from "../../proxy/claudeCodeStrip";
7
7
  import { Button } from "../ui/button";
@@ -27,7 +27,7 @@ import { memo } from "react";
27
27
  import type { TimeDisplayFormat } from "../../lib/runtimeConfig";
28
28
  import { formatTimestamp } from "../../lib/timeDisplay";
29
29
  import { cn, formatTokens, getStatusCategory, type StatusCategory } from "../../lib/utils";
30
- import type { CapturedLog } from "../../proxy/schemas";
30
+ import type { CapturedLog } from "../../contracts";
31
31
  import { Badge } from "../ui/badge";
32
32
  import { Button } from "../ui/button";
33
33
  import { ProviderLogo, detectProvider } from "../providers/ProviderLogo";
@@ -8,7 +8,7 @@ import { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from "../ui/
8
8
  import { Dialog, DialogContent, DialogHeader, DialogTitle } from "../ui/dialog";
9
9
  import { Tabs, TabsContent, TabsList, TabsTrigger } from "../ui/tabs";
10
10
  import { ResponseView } from "./ResponseView";
11
- import { CapturedLogSchema, type CapturedLog } from "../../proxy/schemas";
11
+ import { CapturedLogSchema, type CapturedLog } from "../../contracts";
12
12
  import { dispatchLogFocusRequest } from "./logFocus";
13
13
  import {
14
14
  buildReplayComparisons,
@@ -3,7 +3,7 @@ import type { JSX } from "react";
3
3
  import { memo } from "react";
4
4
  import { useMemo } from "react";
5
5
  import { cn, formatTokens, getStatusCategory, type StatusCategory } from "../../lib/utils";
6
- import type { RequestFormat } from "../../proxy/schemas";
6
+ import type { ApiFormat } from "../../contracts";
7
7
  import { AnswerMarkdown } from "./AnswerMarkdown";
8
8
  import { formatViewFor } from "./formats";
9
9
  import { getLogFormatAdapter } from "./log-formats";
@@ -16,7 +16,7 @@ export type ResponseViewProps = {
16
16
  outputTokens: number | null;
17
17
  cacheCreationInputTokens?: number | null;
18
18
  cacheReadInputTokens?: number | null;
19
- apiFormat?: RequestFormat;
19
+ apiFormat?: ApiFormat;
20
20
  /** SSE error message from streaming response */
21
21
  error?: string | null;
22
22
  };
@@ -3,7 +3,7 @@ import { ChevronDown, ChevronRight, Loader2 } from "lucide-react";
3
3
  import { Badge } from "../ui/badge";
4
4
  import { JsonViewer } from "../ui/json-viewer";
5
5
  import { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from "../ui/tooltip";
6
- import type { StreamingChunk } from "../../proxy/schemas";
6
+ import type { StreamingChunk } from "../../contracts";
7
7
 
8
8
  export type StreamingChunkSequenceProps = {
9
9
  logId: number;