@tonyclaw/agent-inspector 2.1.21 → 2.1.23

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 (48) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-Pii_cIqn.js → CompareDrawer-Cvgl_Jmi.js} +1 -1
  3. package/.output/public/assets/ProxyViewerContainer-CNLLZq37.js +106 -0
  4. package/.output/public/assets/{ReplayDialog-BqnYC8ze.js → ReplayDialog-DeEELx0X.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-I8iBshz1.js → RequestAnatomy-CrLSqdiA.js} +1 -1
  6. package/.output/public/assets/ResponseView-CFIqDL5E.js +3 -0
  7. package/.output/public/assets/{StreamingChunkSequence-BrSx21IQ.js → StreamingChunkSequence-DSRjbgqb.js} +1 -1
  8. package/.output/public/assets/_sessionId-ZuH6-ZX5.js +1 -0
  9. package/.output/public/assets/index-B26q0-ch.js +1 -0
  10. package/.output/public/assets/{index-Dw-jXKKY.js → index-BZxLBVYd.js} +1 -1
  11. package/.output/public/assets/index-CxszCIFm.css +1 -0
  12. package/.output/public/assets/{json-viewer-D5mzV0oV.js → json-viewer-DERQNZRV.js} +1 -1
  13. package/.output/public/assets/{main-B7OIQMeA.js → main-BoshTI0W.js} +2 -2
  14. package/.output/server/_libs/lucide-react.mjs +42 -42
  15. package/.output/server/{_sessionId-DeU_JdSX.mjs → _sessionId-BYGtH1pK.mjs} +18 -3
  16. package/.output/server/_ssr/{CompareDrawer-DgDbG4oF.mjs → CompareDrawer-OchnKiac.mjs} +3 -3
  17. package/.output/server/_ssr/{ProxyViewerContainer-BOszhOJD.mjs → ProxyViewerContainer-C2lwYwDu.mjs} +2747 -2639
  18. package/.output/server/_ssr/{ReplayDialog-Cj4gWQv5.mjs → ReplayDialog-BYwaF14u.mjs} +4 -4
  19. package/.output/server/_ssr/{RequestAnatomy-CVzNAA03.mjs → RequestAnatomy-DTueiqT5.mjs} +2 -2
  20. package/.output/server/_ssr/{ResponseView-DLNpai6P.mjs → ResponseView-CqB9NKHB.mjs} +202 -55
  21. package/.output/server/_ssr/{StreamingChunkSequence-BiH8EEQB.mjs → StreamingChunkSequence-DENB9VUj.mjs} +2 -2
  22. package/.output/server/_ssr/{index-DaWXoUgf.mjs → index-BR3ea3Zb.mjs} +2 -2
  23. package/.output/server/_ssr/index.mjs +2 -2
  24. package/.output/server/_ssr/{json-viewer-CqqNYbmS.mjs → json-viewer-BU9ZUaHK.mjs} +3 -3
  25. package/.output/server/_ssr/{router-Di7D0Bcm.mjs → router-DT6BcrEg.mjs} +4 -4
  26. package/.output/server/{_tanstack-start-manifest_v-BR0YvW29.mjs → _tanstack-start-manifest_v-xQ1BRoZw.mjs} +1 -1
  27. package/.output/server/index.mjs +75 -75
  28. package/package.json +1 -1
  29. package/src/components/ProxyViewer.tsx +71 -15
  30. package/src/components/ProxyViewerContainer.tsx +1 -1
  31. package/src/components/proxy-viewer/ConversationGroupList.tsx +23 -7
  32. package/src/components/proxy-viewer/ConversationHeader.tsx +14 -7
  33. package/src/components/proxy-viewer/LogEntry.tsx +10 -0
  34. package/src/components/proxy-viewer/ResponseView.tsx +5 -1
  35. package/src/components/proxy-viewer/ToolTraceEvents.tsx +19 -31
  36. package/src/components/proxy-viewer/TurnGroup.tsx +21 -7
  37. package/src/components/proxy-viewer/formats/anthropic/ContentBlocks.tsx +37 -4
  38. package/src/components/proxy-viewer/formats/anthropic/ResponseView.tsx +17 -3
  39. package/src/components/proxy-viewer/formats/index.tsx +8 -3
  40. package/src/components/proxy-viewer/formats/openai/ResponseView.tsx +122 -16
  41. package/src/components/proxy-viewer/logFocus.ts +11 -3
  42. package/src/components/proxy-viewer/viewerState.ts +22 -7
  43. package/src/routes/session/$sessionId.tsx +27 -1
  44. package/.output/public/assets/ProxyViewerContainer-BxselkhN.js +0 -106
  45. package/.output/public/assets/ResponseView-wZzskUas.js +0 -3
  46. package/.output/public/assets/_sessionId-ByxbBMbE.js +0 -1
  47. package/.output/public/assets/index-BjzVMXJq.css +0 -1
  48. package/.output/public/assets/index-DRCRDo_E.js +0 -1
@@ -1,10 +1,10 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, D as Dialog, d as DialogContent, e as DialogHeader, h as DialogTitle, T as Tabs, i as TabsList, j as TabsTrigger, k as TabsContent, l as Button, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, q as dispatchLogFocusRequest } from "./ProxyViewerContainer-BOszhOJD.mjs";
3
- import { ResponseView } from "./ResponseView-DLNpai6P.mjs";
4
- import { C as CapturedLogSchema } from "./router-Di7D0Bcm.mjs";
2
+ import { u as useProviders, D as Dialog, d as DialogContent, e as DialogHeader, h as DialogTitle, T as Tabs, i as TabsList, j as TabsTrigger, k as TabsContent, l as Button, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, q as dispatchLogFocusRequest } from "./ProxyViewerContainer-C2lwYwDu.mjs";
3
+ import { ResponseView } from "./ResponseView-CqB9NKHB.mjs";
4
+ import { C as CapturedLogSchema } from "./router-DT6BcrEg.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/modelcontextprotocol__server.mjs";
7
- import { ae as RotateCcw, ar as Braces, as as Minimize2 } from "../_libs/lucide-react.mjs";
7
+ import { af as RotateCcw, ar as Braces, as as Minimize2 } from "../_libs/lucide-react.mjs";
8
8
  import { d as object, n as number, a as array, c as boolean, b as string } from "../_libs/zod.mjs";
9
9
  import "../_libs/swr.mjs";
10
10
  import "../_libs/use-sync-external-store.mjs";
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, s as analyzeContextIntelligence, f as formatTokens, m as TooltipProvider, c as cn, n as Tooltip, o as TooltipTrigger, p as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, t as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-BOszhOJD.mjs";
3
- import "./router-Di7D0Bcm.mjs";
2
+ import { u as useProviders, s as analyzeContextIntelligence, f as formatTokens, m as TooltipProvider, c as cn, n as Tooltip, o as TooltipTrigger, p as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, t as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-C2lwYwDu.mjs";
3
+ import "./router-DT6BcrEg.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { I as Info, a as ChevronDown, h as ChevronRight } from "../_libs/lucide-react.mjs";
@@ -1,9 +1,9 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { g as getLogFormatAdapter, f as formatTokens, c as cn, v as getStatusCategory, B as Badge, w as Collapsible, x as CollapsibleTrigger, y as CollapsibleContent, z as ScrollArea, E as LazyJsonViewer, F as safeJsonValue } from "./ProxyViewerContainer-BOszhOJD.mjs";
3
- import { s as safeGetOwnProperty } from "./router-Di7D0Bcm.mjs";
2
+ import { g as getLogFormatAdapter, f as formatTokens, c as cn, v as getStatusCategory, B as Badge, w as Collapsible, x as CollapsibleTrigger, y as CollapsibleContent, z as ScrollArea, E as LazyJsonViewer, F as safeJsonValue } from "./ProxyViewerContainer-C2lwYwDu.mjs";
3
+ import { s as safeGetOwnProperty } from "./router-DT6BcrEg.mjs";
4
4
  import "../_libs/jszip.mjs";
5
5
  import "../_libs/modelcontextprotocol__server.mjs";
6
- import { Z as Zap, T as TriangleAlert, at as CircleStop, N as Brain, a as ChevronDown, h as ChevronRight, q as Terminal } from "../_libs/lucide-react.mjs";
6
+ import { Z as Zap, T as TriangleAlert, at as CircleStop, O as Brain, a as ChevronDown, h as ChevronRight, r as Terminal } from "../_libs/lucide-react.mjs";
7
7
  import { R as Root } from "../_libs/radix-ui__react-separator.mjs";
8
8
  import "../_libs/swr.mjs";
9
9
  import "../_libs/use-sync-external-store.mjs";
@@ -209,16 +209,38 @@ const ThinkingBlock = reactExports.memo(function ThinkingBlock2({
209
209
  });
210
210
  const ToolUseBlock = reactExports.memo(function ToolUseBlock2({
211
211
  name,
212
- input
212
+ input,
213
+ toolIndex,
214
+ toolFocus
213
215
  }) {
214
216
  const [open, setOpen] = reactExports.useState(false);
215
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-sky-400/25 my-1", children: [
216
- /* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-sky-400/[0.04] transition-colors rounded-r-sm group", children: [
217
- /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-sky-400/70 shrink-0" }),
218
- /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: name }),
219
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
220
- open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
221
- ] }),
217
+ const triggerRef = reactExports.useRef(null);
218
+ const shouldFocus = toolFocus?.focusedToolIndex === toolIndex;
219
+ reactExports.useEffect(() => {
220
+ if (!shouldFocus || toolFocus === void 0 || toolFocus.toolFocusNonce <= 0) return void 0;
221
+ setOpen(true);
222
+ const timer = window.setTimeout(() => {
223
+ const trigger = triggerRef.current;
224
+ if (trigger === null) return;
225
+ trigger.scrollIntoView({ block: "center", behavior: "smooth" });
226
+ trigger.focus({ preventScroll: true });
227
+ }, 0);
228
+ return () => window.clearTimeout(timer);
229
+ }, [shouldFocus, toolFocus, toolFocus?.toolFocusNonce]);
230
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-sky-400/25 my-1", "data-response-tool-index": toolIndex, children: [
231
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
232
+ CollapsibleTrigger,
233
+ {
234
+ ref: triggerRef,
235
+ className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-sky-400/[0.04] transition-colors rounded-r-sm group focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
236
+ children: [
237
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-sky-400/70 shrink-0" }),
238
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: name }),
239
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
240
+ open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
241
+ ]
242
+ }
243
+ ),
222
244
  /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: open && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 pb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "max-h-[60vh]", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
223
245
  reactExports.Suspense,
224
246
  {
@@ -229,7 +251,9 @@ const ToolUseBlock = reactExports.memo(function ToolUseBlock2({
229
251
  ] }) });
230
252
  });
231
253
  const ResponseContentBlockRenderer = reactExports.memo(function ResponseContentBlockRenderer2({
232
- block
254
+ block,
255
+ toolIndex,
256
+ toolFocus
233
257
  }) {
234
258
  switch (block.type) {
235
259
  case "text":
@@ -238,14 +262,24 @@ const ResponseContentBlockRenderer = reactExports.memo(function ResponseContentB
238
262
  case "think":
239
263
  return /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingBlock, { thinking: block.thinking });
240
264
  case "tool_use":
241
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ToolUseBlock, { name: block.name, input: block.input });
265
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
266
+ ToolUseBlock,
267
+ {
268
+ name: block.name,
269
+ input: block.input,
270
+ toolIndex: toolIndex ?? 0,
271
+ toolFocus
272
+ }
273
+ );
242
274
  default:
243
275
  return assertNever();
244
276
  }
245
277
  });
246
278
  const StructuredResponseViewAnthropic = reactExports.memo(function StructuredResponseViewAnthropic2({
247
- response
279
+ response,
280
+ toolFocus
248
281
  }) {
282
+ let toolIndex = 0;
249
283
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
250
284
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
251
285
  /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "secondary", className: "text-[10px] px-1.5 py-0 h-5 font-mono", children: response.model }),
@@ -281,7 +315,19 @@ const StructuredResponseViewAnthropic = reactExports.memo(function StructuredRes
281
315
  ] }),
282
316
  /* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { className: "opacity-50" }),
283
317
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
284
- response.content.map((block, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(ResponseContentBlockRenderer, { block }, i)),
318
+ response.content.map((block, i) => {
319
+ const currentToolIndex = block.type === "tool_use" ? toolIndex : void 0;
320
+ if (block.type === "tool_use") toolIndex += 1;
321
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
322
+ ResponseContentBlockRenderer,
323
+ {
324
+ block,
325
+ toolIndex: currentToolIndex,
326
+ toolFocus
327
+ },
328
+ i
329
+ );
330
+ }),
285
331
  response.content.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground italic", children: "Empty response content" })
286
332
  ] })
287
333
  ] });
@@ -294,18 +340,89 @@ function parseToolArguments(raw) {
294
340
  return null;
295
341
  }
296
342
  }
297
- function OpenAIToolCallBlock({ call }) {
343
+ function useToolFocus({
344
+ toolIndex,
345
+ toolFocus,
346
+ setOpen
347
+ }) {
348
+ const triggerRef = reactExports.useRef(null);
349
+ const shouldFocus = toolFocus?.focusedToolIndex === toolIndex;
350
+ reactExports.useEffect(() => {
351
+ if (!shouldFocus || toolFocus === void 0 || toolFocus.toolFocusNonce <= 0) return void 0;
352
+ setOpen(true);
353
+ const timer = window.setTimeout(() => {
354
+ const trigger = triggerRef.current;
355
+ if (trigger === null) return;
356
+ trigger.scrollIntoView({ block: "center", behavior: "smooth" });
357
+ trigger.focus({ preventScroll: true });
358
+ }, 0);
359
+ return () => window.clearTimeout(timer);
360
+ }, [setOpen, shouldFocus, toolFocus, toolFocus?.toolFocusNonce]);
361
+ return triggerRef;
362
+ }
363
+ function OpenAIFunctionCallBlock({
364
+ name,
365
+ argumentsText,
366
+ toolIndex,
367
+ toolFocus
368
+ }) {
369
+ const blockRef = reactExports.useRef(null);
370
+ const shouldFocus = toolFocus?.focusedToolIndex === toolIndex;
371
+ reactExports.useEffect(() => {
372
+ if (!shouldFocus || toolFocus === void 0 || toolFocus.toolFocusNonce <= 0) return void 0;
373
+ const timer = window.setTimeout(() => {
374
+ const block = blockRef.current;
375
+ if (block === null) return;
376
+ block.scrollIntoView({ block: "center", behavior: "smooth" });
377
+ block.focus({ preventScroll: true });
378
+ }, 0);
379
+ return () => window.clearTimeout(timer);
380
+ }, [shouldFocus, toolFocus, toolFocus?.toolFocusNonce]);
381
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
382
+ "div",
383
+ {
384
+ ref: blockRef,
385
+ tabIndex: -1,
386
+ className: "border border-sky-400/20 rounded-md p-3 bg-muted/20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
387
+ "data-response-tool-index": toolIndex,
388
+ children: [
389
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-sky-400/80 font-mono mb-1", children: "function_call" }),
390
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "font-mono text-xs", children: [
391
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-foreground/80", children: name }),
392
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-muted-foreground", children: [
393
+ "(",
394
+ argumentsText,
395
+ ")"
396
+ ] })
397
+ ] })
398
+ ]
399
+ }
400
+ );
401
+ }
402
+ function OpenAIToolCallBlock({
403
+ call,
404
+ toolIndex,
405
+ toolFocus
406
+ }) {
298
407
  const [open, setOpen] = reactExports.useState(false);
299
408
  const name = call.function.name ?? "(unnamed tool)";
300
409
  const parsed = open ? parseToolArguments(call.function.arguments) : {};
301
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-sky-400/25 my-1", children: [
302
- /* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-sky-400/[0.04] transition-colors rounded-r-sm group", children: [
303
- /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-sky-400/70 shrink-0" }),
304
- /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: name }),
305
- call.id !== void 0 && call.id !== "" && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono text-muted-foreground/60 truncate", children: call.id }),
306
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
307
- open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
308
- ] }),
410
+ const triggerRef = useToolFocus({ toolIndex, toolFocus, setOpen });
411
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-sky-400/25 my-1", "data-response-tool-index": toolIndex, children: [
412
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
413
+ CollapsibleTrigger,
414
+ {
415
+ ref: triggerRef,
416
+ className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-sky-400/[0.04] transition-colors rounded-r-sm group focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
417
+ children: [
418
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-sky-400/70 shrink-0" }),
419
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: name }),
420
+ call.id !== void 0 && call.id !== "" && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono text-muted-foreground/60 truncate", children: call.id }),
421
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
422
+ open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
423
+ ]
424
+ }
425
+ ),
309
426
  /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: open && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 pb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "max-h-[60vh]", children: parsed === null ? (
310
427
  // JSON.parse failed — show the raw string so the user can
311
428
  // still see what the model tried to call.
@@ -358,19 +475,31 @@ function extractResponsesFunctionCalls(response) {
358
475
  }
359
476
  return calls;
360
477
  }
361
- function ResponsesFunctionCallBlock({ call }) {
478
+ function ResponsesFunctionCallBlock({
479
+ call,
480
+ toolIndex,
481
+ toolFocus
482
+ }) {
362
483
  const [open, setOpen] = reactExports.useState(false);
363
484
  const parsed = open ? parseToolArguments(call.argumentsText) : {};
364
485
  const identity = call.callId ?? call.id;
365
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-sky-400/25 my-1", children: [
366
- /* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-sky-400/[0.04] transition-colors rounded-r-sm group", children: [
367
- /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-sky-400/70 shrink-0" }),
368
- /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: call.name }),
369
- identity !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono text-muted-foreground/60 truncate", children: identity }),
370
- call.status !== null && /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "secondary", className: "text-[10px] px-1.5 py-0 h-4 font-mono", children: call.status }),
371
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
372
- open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
373
- ] }),
486
+ const triggerRef = useToolFocus({ toolIndex, toolFocus, setOpen });
487
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-sky-400/25 my-1", "data-response-tool-index": toolIndex, children: [
488
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
489
+ CollapsibleTrigger,
490
+ {
491
+ ref: triggerRef,
492
+ className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-sky-400/[0.04] transition-colors rounded-r-sm group focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
493
+ children: [
494
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-sky-400/70 shrink-0" }),
495
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: call.name }),
496
+ identity !== null && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono text-muted-foreground/60 truncate", children: identity }),
497
+ call.status !== null && /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "secondary", className: "text-[10px] px-1.5 py-0 h-4 font-mono", children: call.status }),
498
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
499
+ open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
500
+ ]
501
+ }
502
+ ),
374
503
  /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: open && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-3 pb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollArea, { className: "max-h-[60vh]", children: parsed === null ? /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "font-mono text-xs whitespace-pre-wrap break-words text-rose-300/90", children: call.argumentsText }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
375
504
  reactExports.Suspense,
376
505
  {
@@ -381,7 +510,8 @@ function ResponsesFunctionCallBlock({ call }) {
381
510
  ] }) });
382
511
  }
383
512
  const OpenAIResponseView = reactExports.memo(function OpenAIResponseView2({
384
- response
513
+ response,
514
+ toolFocus
385
515
  }) {
386
516
  const choice = response.choices[0];
387
517
  const message = choice?.message;
@@ -424,25 +554,32 @@ const OpenAIResponseView = reactExports.memo(function OpenAIResponseView2({
424
554
  })(),
425
555
  toolCalls.map((call, i) => (
426
556
  // biome-ignore lint/suspicious/noArrayIndexKey: tool_calls is the positionally stable list from the response
427
- /* @__PURE__ */ jsxRuntimeExports.jsx(OpenAIToolCallBlock, { call }, call.id ?? `tc-${i}`)
557
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
558
+ OpenAIToolCallBlock,
559
+ {
560
+ call,
561
+ toolIndex: i,
562
+ toolFocus
563
+ },
564
+ call.id ?? `tc-${i}`
565
+ )
428
566
  )),
429
- message?.function_call !== null && message?.function_call !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-sky-400/20 rounded-md p-3 bg-muted/20", children: [
430
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-sky-400/80 font-mono mb-1", children: "function_call" }),
431
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "font-mono text-xs", children: [
432
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-foreground/80", children: message.function_call.name }),
433
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-muted-foreground", children: [
434
- "(",
435
- message.function_call.arguments,
436
- ")"
437
- ] })
438
- ] })
439
- ] }),
567
+ message?.function_call !== null && message?.function_call !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
568
+ OpenAIFunctionCallBlock,
569
+ {
570
+ name: message.function_call.name,
571
+ argumentsText: message.function_call.arguments,
572
+ toolIndex: toolCalls.length,
573
+ toolFocus
574
+ }
575
+ ),
440
576
  (message?.content === null || message?.content === void 0 || message.content.length === 0) && (message?.reasoning_content === null || message?.reasoning_content === void 0 || message.reasoning_content.length === 0) && (message?.function_call === null || message?.function_call === void 0) && toolCalls.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground italic", children: "Empty response content" })
441
577
  ] })
442
578
  ] });
443
579
  });
444
580
  const OpenAIResponsesResponseView = reactExports.memo(function OpenAIResponsesResponseView2({
445
- response
581
+ response,
582
+ toolFocus
446
583
  }) {
447
584
  const text = extractResponsesOutputText(response);
448
585
  const calls = extractResponsesFunctionCalls(response);
@@ -478,7 +615,15 @@ const OpenAIResponsesResponseView = reactExports.memo(function OpenAIResponsesRe
478
615
  text.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(AnswerMarkdown, { text }),
479
616
  calls.map((call, i) => (
480
617
  // biome-ignore lint/suspicious/noArrayIndexKey: response output order is stable
481
- /* @__PURE__ */ jsxRuntimeExports.jsx(ResponsesFunctionCallBlock, { call }, call.callId ?? call.id ?? `call-${i}`)
618
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
619
+ ResponsesFunctionCallBlock,
620
+ {
621
+ call,
622
+ toolIndex: i,
623
+ toolFocus
624
+ },
625
+ call.callId ?? call.id ?? `call-${i}`
626
+ )
482
627
  )),
483
628
  text.length === 0 && calls.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground italic", children: "Empty response content" })
484
629
  ] })
@@ -496,15 +641,15 @@ function isOpenAIResponsesResponse(response) {
496
641
  function isAnthropicResponse(response) {
497
642
  return isRecord(response) && response.type === "message" && Array.isArray(response.content);
498
643
  }
499
- function formatViewFor(apiFormat, response) {
644
+ function formatViewFor(apiFormat, response, toolFocus) {
500
645
  if (apiFormat === "openai" && isOpenAIResponse(response)) {
501
- return /* @__PURE__ */ jsxRuntimeExports.jsx(OpenAIResponseView, { response });
646
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(OpenAIResponseView, { response, toolFocus });
502
647
  }
503
648
  if (apiFormat === "openai" && isOpenAIResponsesResponse(response)) {
504
- return /* @__PURE__ */ jsxRuntimeExports.jsx(OpenAIResponsesResponseView, { response });
649
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(OpenAIResponsesResponseView, { response, toolFocus });
505
650
  }
506
651
  if (apiFormat === "anthropic" && isAnthropicResponse(response)) {
507
- return /* @__PURE__ */ jsxRuntimeExports.jsx(StructuredResponseViewAnthropic, { response });
652
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(StructuredResponseViewAnthropic, { response, toolFocus });
508
653
  }
509
654
  return null;
510
655
  }
@@ -546,7 +691,9 @@ const ResponseView = reactExports.memo(function ResponseView2({
546
691
  cacheCreationInputTokens,
547
692
  cacheReadInputTokens,
548
693
  apiFormat,
549
- error
694
+ error,
695
+ focusedToolIndex = null,
696
+ toolFocusNonce = 0
550
697
  }) {
551
698
  const resolvedFormat = apiFormat ?? "unknown";
552
699
  const parsed = reactExports.useMemo(
@@ -583,7 +730,7 @@ const ResponseView = reactExports.memo(function ResponseView2({
583
730
  if (parsed !== null) {
584
731
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
585
732
  /* @__PURE__ */ jsxRuntimeExports.jsx(StatusIndicator, { status: responseStatus }),
586
- formatViewFor(resolvedFormat, parsed)
733
+ formatViewFor(resolvedFormat, parsed, { focusedToolIndex, toolFocusNonce })
587
734
  ] });
588
735
  }
589
736
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { m as TooltipProvider, n as Tooltip, o as TooltipTrigger, B as Badge, p as TooltipContent, E as LazyJsonViewer } from "./ProxyViewerContainer-BOszhOJD.mjs";
3
- import "./router-Di7D0Bcm.mjs";
2
+ import { m as TooltipProvider, n as Tooltip, o as TooltipTrigger, B as Badge, p as TooltipContent, E as LazyJsonViewer } from "./ProxyViewerContainer-C2lwYwDu.mjs";
3
+ import "./router-DT6BcrEg.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { a as ChevronDown, h as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
- import { P as ProxyViewerContainer } from "./ProxyViewerContainer-BOszhOJD.mjs";
1
+ import { P as ProxyViewerContainer } from "./ProxyViewerContainer-C2lwYwDu.mjs";
2
2
  import "../_libs/react.mjs";
3
- import "./router-Di7D0Bcm.mjs";
3
+ import "./router-DT6BcrEg.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/swr.mjs";
@@ -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-BR0YvW29.mjs");
201
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-xQ1BRoZw.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-Di7D0Bcm.mjs").then((n) => n.N);
779
+ const routerEntry = await import("./router-DT6BcrEg.mjs").then((n) => n.N);
780
780
  const startEntry = await import("./start-HYkvq4Ni.mjs");
781
781
  return { startEntry, routerEntry };
782
782
  }
@@ -1,9 +1,9 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { G as parseJsonText, c as cn, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, b as copyTextToClipboard } from "./ProxyViewerContainer-BOszhOJD.mjs";
3
- import "./router-Di7D0Bcm.mjs";
2
+ import { G as parseJsonText, c as cn, m as TooltipProvider, n as Tooltip, o as TooltipTrigger, p as TooltipContent, b as copyTextToClipboard } from "./ProxyViewerContainer-C2lwYwDu.mjs";
3
+ import "./router-DT6BcrEg.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
- import { b as Check, e as Copy, a as ChevronDown, h as ChevronRight, ab as ChevronsDown } from "../_libs/lucide-react.mjs";
6
+ import { b as Check, e as Copy, a as ChevronDown, h as ChevronRight, ac as ChevronsDown } from "../_libs/lucide-react.mjs";
7
7
  import "../_libs/swr.mjs";
8
8
  import "../_libs/use-sync-external-store.mjs";
9
9
  import "../_libs/dequal.mjs";
@@ -65,7 +65,7 @@ import "../_libs/immediate.mjs";
65
65
  import "../_libs/setimmediate.mjs";
66
66
  import "../_libs/pako.mjs";
67
67
  const faviconSvg = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20role='img'%20aria-label='Agent%20Inspector'%3e%3cg%20fill='none'%20stroke='%23f59e0b'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M5%2013%20C5%209%208%207%2012%207%20C16%207%2019%209%2019%2013%20C19%2016%2016%2018%2012%2018%20C8%2018%205%2016%205%2013%20Z'%20/%3e%3cpath%20d='M5%2011%20C3.5%209.5%201.5%2010%202%2012.5%20C2.5%2014%204%2013.5%205%2012.5'%20/%3e%3cpath%20d='M19%2011%20C20.5%209.5%2022.5%2010%2022%2012.5%20C21.5%2014%2020%2013.5%2019%2012.5'%20/%3e%3cline%20x1='10'%20y1='7'%20x2='9.5'%20y2='5'%20/%3e%3cline%20x1='14'%20y1='7'%20x2='14.5'%20y2='5'%20/%3e%3cline%20x1='6.5'%20y1='16'%20x2='4.5'%20y2='19.5'%20/%3e%3cline%20x1='9'%20y1='17.5'%20x2='8'%20y2='20.5'%20/%3e%3cline%20x1='15'%20y1='17.5'%20x2='16'%20y2='20.5'%20/%3e%3cline%20x1='17.5'%20y1='16'%20x2='19.5'%20y2='19.5'%20/%3e%3c/g%3e%3ccircle%20cx='9.5'%20cy='4.5'%20r='0.9'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='14.5'%20cy='4.5'%20r='0.9'%20fill='%23f59e0b'%20/%3e%3c/svg%3e";
68
- const appCss = "/assets/index-BjzVMXJq.css";
68
+ const appCss = "/assets/index-CxszCIFm.css";
69
69
  const Route$D = createRootRoute({
70
70
  head: () => ({
71
71
  meta: [
@@ -108,7 +108,7 @@ function RootDocument({ children }) {
108
108
  ] })
109
109
  ] });
110
110
  }
111
- const $$splitComponentImporter$1 = () => import("./index-DaWXoUgf.mjs");
111
+ const $$splitComponentImporter$1 = () => import("./index-BR3ea3Zb.mjs");
112
112
  const Route$C = createFileRoute("/")({
113
113
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
114
114
  });
@@ -151,7 +151,7 @@ function decodeSessionIdFromPath(encoded) {
151
151
  function getSessionPath(sessionId) {
152
152
  return `/session/${encodeSessionIdForPath(sessionId)}`;
153
153
  }
154
- const $$splitComponentImporter = () => import("../_sessionId-DeU_JdSX.mjs");
154
+ const $$splitComponentImporter = () => import("../_sessionId-BYGtH1pK.mjs");
155
155
  const Route$B = createFileRoute("/session/$sessionId")({
156
156
  component: lazyRouteComponent($$splitComponentImporter, "component"),
157
157
  parseParams: (params) => ({
@@ -9116,7 +9116,7 @@ const Route$w = createFileRoute("/api/models")({
9116
9116
  }
9117
9117
  }
9118
9118
  });
9119
- const version = "2.1.21";
9119
+ const version = "2.1.23";
9120
9120
  const packageJson = {
9121
9121
  version
9122
9122
  };
@@ -1,4 +1,4 @@
1
- const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/api/alerts", "/api/config", "/api/groups", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/providers", "/api/runs", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-B7OIQMeA.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-DRCRDo_E.js", "/assets/ProxyViewerContainer-BxselkhN.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-ByxbBMbE.js", "/assets/ProxyViewerContainer-BxselkhN.js"] }, "/api/alerts/summary": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/alerts.summary.ts" }, "/api/config/paths": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.paths.ts" }, "/api/groups/$groupId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.$groupId.ts", "children": ["/api/groups/$groupId/evidence", "/api/groups/$groupId/sessions"] }, "/api/knowledge/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.ts", "children": ["/api/knowledge/candidates/$candidateId"] }, "/api/knowledge/project-context": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.project-context.ts" }, "/api/knowledge/search": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.search.ts" }, "/api/logs/$id": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.ts", "children": ["/api/logs/$id/body", "/api/logs/$id/chunks", "/api/logs/$id/replay"] }, "/api/logs/import": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.import.ts" }, "/api/logs/stream": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.stream.ts" }, "/api/providers/$providerId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.ts", "children": ["/api/providers/$providerId/model-metadata", "/api/providers/$providerId/test"] }, "/api/providers/export": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.export.ts" }, "/api/providers/import": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.import.ts" }, "/api/providers/scan": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.scan.ts" }, "/api/runs/$runId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.$runId.ts", "children": ["/api/runs/$runId/evidence"] }, "/api/groups/$groupId/evidence": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.$groupId.evidence.ts" }, "/api/groups/$groupId/sessions": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.$groupId.sessions.ts" }, "/api/knowledge/candidates/$candidateId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.ts", "children": ["/api/knowledge/candidates/$candidateId/promote"] }, "/api/logs/$id/body": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.body.ts" }, "/api/logs/$id/chunks": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.chunks.ts" }, "/api/logs/$id/replay": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.replay.ts" }, "/api/providers/$providerId/model-metadata": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.model-metadata.ts" }, "/api/providers/$providerId/test": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.ts", "children": ["/api/providers/$providerId/test/log"] }, "/api/runs/$runId/evidence": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.$runId.evidence.ts" }, "/api/knowledge/candidates/$candidateId/promote": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.promote.ts" }, "/api/knowledge/sessions/$sessionId/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.sessions.$sessionId.candidates.ts" }, "/api/providers/$providerId/test/log": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.log.ts" } }, "clientEntry": "/assets/main-B7OIQMeA.js" });
1
+ const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/api/alerts", "/api/config", "/api/groups", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/providers", "/api/runs", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-BoshTI0W.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-B26q0-ch.js", "/assets/ProxyViewerContainer-CNLLZq37.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-ZuH6-ZX5.js", "/assets/ProxyViewerContainer-CNLLZq37.js"] }, "/api/alerts/summary": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/alerts.summary.ts" }, "/api/config/paths": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.paths.ts" }, "/api/groups/$groupId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.$groupId.ts", "children": ["/api/groups/$groupId/evidence", "/api/groups/$groupId/sessions"] }, "/api/knowledge/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.ts", "children": ["/api/knowledge/candidates/$candidateId"] }, "/api/knowledge/project-context": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.project-context.ts" }, "/api/knowledge/search": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.search.ts" }, "/api/logs/$id": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.ts", "children": ["/api/logs/$id/body", "/api/logs/$id/chunks", "/api/logs/$id/replay"] }, "/api/logs/import": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.import.ts" }, "/api/logs/stream": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.stream.ts" }, "/api/providers/$providerId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.ts", "children": ["/api/providers/$providerId/model-metadata", "/api/providers/$providerId/test"] }, "/api/providers/export": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.export.ts" }, "/api/providers/import": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.import.ts" }, "/api/providers/scan": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.scan.ts" }, "/api/runs/$runId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.$runId.ts", "children": ["/api/runs/$runId/evidence"] }, "/api/groups/$groupId/evidence": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.$groupId.evidence.ts" }, "/api/groups/$groupId/sessions": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/groups.$groupId.sessions.ts" }, "/api/knowledge/candidates/$candidateId": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.ts", "children": ["/api/knowledge/candidates/$candidateId/promote"] }, "/api/logs/$id/body": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.body.ts" }, "/api/logs/$id/chunks": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.chunks.ts" }, "/api/logs/$id/replay": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/logs.$id.replay.ts" }, "/api/providers/$providerId/model-metadata": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.model-metadata.ts" }, "/api/providers/$providerId/test": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.ts", "children": ["/api/providers/$providerId/test/log"] }, "/api/runs/$runId/evidence": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/runs.$runId.evidence.ts" }, "/api/knowledge/candidates/$candidateId/promote": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.$candidateId.promote.ts" }, "/api/knowledge/sessions/$sessionId/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.sessions.$sessionId.candidates.ts" }, "/api/providers/$providerId/test/log": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.log.ts" } }, "clientEntry": "/assets/main-BoshTI0W.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };