@tonyclaw/agent-inspector 2.0.2 → 2.0.4

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 (60) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-Bp7_x-5N.js → CompareDrawer-BCH_fsLm.js} +1 -1
  3. package/.output/public/assets/ProxyViewerContainer-D85_UANk.js +101 -0
  4. package/.output/public/assets/{ReplayDialog-DFHCd0yx.js → ReplayDialog-DTeaHHit.js} +1 -1
  5. package/.output/public/assets/RequestAnatomy-DZ8grAih.js +1 -0
  6. package/.output/public/assets/ResponseView-Cldm6RCi.js +1 -0
  7. package/.output/public/assets/{StreamingChunkSequence-Bjs4Lqwn.js → StreamingChunkSequence-3x4p-yT7.js} +1 -1
  8. package/.output/public/assets/_sessionId-YqWFBu6d.js +1 -0
  9. package/.output/public/assets/index-BIw2H6jO.js +1 -0
  10. package/.output/public/assets/index-CobXD0yH.css +1 -0
  11. package/.output/public/assets/{json-viewer-6uV_YXws.js → json-viewer-BrzjD7qI.js} +1 -1
  12. package/.output/public/assets/{main-FSGUGtEL.js → main-mgxeUdZQ.js} +2 -2
  13. package/.output/server/_libs/lucide-react.mjs +8 -8
  14. package/.output/server/{_sessionId-_bf9vUww.mjs → _sessionId-C4xsxIWm.mjs} +2 -2
  15. package/.output/server/_ssr/{CompareDrawer-DIth2DQM.mjs → CompareDrawer-DuWEpqQ7.mjs} +4 -4
  16. package/.output/server/_ssr/{ProxyViewerContainer-249bTH-T.mjs → ProxyViewerContainer-Cckz5qKu.mjs} +519 -89
  17. package/.output/server/_ssr/{ReplayDialog-C1aGx0y1.mjs → ReplayDialog-BDRcr8E5.mjs} +4 -4
  18. package/.output/server/_ssr/{RequestAnatomy-D2bCiEJn.mjs → RequestAnatomy-BoO2_Ij0.mjs} +5 -5
  19. package/.output/server/_ssr/{ResponseView-DP6k4Xs_.mjs → ResponseView-DZiPBxvO.mjs} +21 -17
  20. package/.output/server/_ssr/{StreamingChunkSequence-HyXZV-b5.mjs → StreamingChunkSequence-D-be7KEL.mjs} +3 -3
  21. package/.output/server/_ssr/{index-Bt47f9pn.mjs → index-5RImHKfu.mjs} +2 -2
  22. package/.output/server/_ssr/index.mjs +2 -2
  23. package/.output/server/_ssr/{json-viewer-Co-YRwUP.mjs → json-viewer-aJhb93ZK.mjs} +2 -2
  24. package/.output/server/_ssr/{router-to_OJirX.mjs → router-Dgkv5nKP.mjs} +38 -99
  25. package/.output/server/{_tanstack-start-manifest_v-Bd-2YRWo.mjs → _tanstack-start-manifest_v-B8rrWXjr.mjs} +1 -1
  26. package/.output/server/index.mjs +63 -63
  27. package/README.md +5 -2
  28. package/package.json +1 -1
  29. package/src/components/ProxyViewer.tsx +25 -15
  30. package/src/components/ProxyViewerContainer.tsx +2 -1
  31. package/src/components/providers/SettingsDialog.tsx +45 -1
  32. package/src/components/proxy-viewer/AgentTraceSummary.tsx +276 -0
  33. package/src/components/proxy-viewer/AnswerMarkdown.tsx +16 -0
  34. package/src/components/proxy-viewer/ConversationGroup.tsx +18 -0
  35. package/src/components/proxy-viewer/ConversationHeader.tsx +6 -6
  36. package/src/components/proxy-viewer/LogEntry.tsx +5 -5
  37. package/src/components/proxy-viewer/LogEntryHeader.tsx +9 -14
  38. package/src/components/proxy-viewer/ResponseView.tsx +2 -6
  39. package/src/components/proxy-viewer/ToolTraceEvents.tsx +32 -0
  40. package/src/components/proxy-viewer/TurnGroup.tsx +15 -1
  41. package/src/components/proxy-viewer/anatomy/SegmentBar.tsx +2 -2
  42. package/src/components/proxy-viewer/formats/anthropic/ContentBlocks.tsx +6 -12
  43. package/src/components/proxy-viewer/formats/openai/ResponseView.tsx +10 -14
  44. package/src/components/proxy-viewer/viewerState.ts +177 -0
  45. package/src/lib/runtimeConfig.ts +6 -0
  46. package/src/lib/timeDisplay.ts +22 -0
  47. package/src/lib/useOnboarding.ts +2 -0
  48. package/src/lib/useStripConfig.ts +16 -0
  49. package/src/proxy/chunkStorage.ts +3 -4
  50. package/src/proxy/config.ts +3 -0
  51. package/src/proxy/logger.ts +8 -15
  52. package/src/proxy/store.ts +8 -16
  53. package/src/routes/api/config.ts +5 -1
  54. package/src/routes/api/providers.$providerId.test.log.ts +0 -79
  55. package/.output/public/assets/ProxyViewerContainer-USuxPy-K.js +0 -101
  56. package/.output/public/assets/RequestAnatomy-ehyrskxt.js +0 -1
  57. package/.output/public/assets/ResponseView-BNGyc8e_.js +0 -1
  58. package/.output/public/assets/_sessionId-D_SeK_qp.js +0 -1
  59. package/.output/public/assets/index-BGGOWR7A.js +0 -1
  60. package/.output/public/assets/index-CIL46Z2y.css +0 -1
@@ -1,10 +1,10 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { D as Dialog, b as DialogContent, d as DialogHeader, e as DialogTitle, T as Tabs, h as TabsList, i as TabsTrigger, j as TabsContent, k as TooltipProvider, l as Tooltip, m as TooltipTrigger, n as TooltipContent, o as Button } from "./ProxyViewerContainer-249bTH-T.mjs";
3
- import { ResponseView } from "./ResponseView-DP6k4Xs_.mjs";
4
- import "./router-to_OJirX.mjs";
2
+ import { D as Dialog, b as DialogContent, d as DialogHeader, e as DialogTitle, T as Tabs, h as TabsList, i as TabsTrigger, j as TabsContent, k as TooltipProvider, l as Tooltip, m as TooltipTrigger, n as TooltipContent, o as Button } from "./ProxyViewerContainer-Cckz5qKu.mjs";
3
+ import { ResponseView } from "./ResponseView-DZiPBxvO.mjs";
4
+ import "./router-Dgkv5nKP.mjs";
5
5
  import "../_libs/modelcontextprotocol__server.mjs";
6
6
  import "../_libs/jszip.mjs";
7
- import "./json-viewer-Co-YRwUP.mjs";
7
+ import "./json-viewer-aJhb93ZK.mjs";
8
8
  import { s as RotateCcw } from "../_libs/lucide-react.mjs";
9
9
  import { d as object, c as boolean, n as number, b as string } from "../_libs/zod.mjs";
10
10
  import "../_libs/swr.mjs";
@@ -1,9 +1,9 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { k as TooltipProvider, f as formatTokens, c as cn, l as Tooltip, m as TooltipTrigger, n as TooltipContent } from "./ProxyViewerContainer-249bTH-T.mjs";
3
- import "./router-to_OJirX.mjs";
2
+ import { k as TooltipProvider, f as formatTokens, c as cn, l as Tooltip, m as TooltipTrigger, n as TooltipContent } from "./ProxyViewerContainer-Cckz5qKu.mjs";
3
+ import "./router-Dgkv5nKP.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
- import { Q as Info } from "../_libs/lucide-react.mjs";
6
+ import { V as Info } 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";
@@ -116,14 +116,14 @@ const ROLE_COLOR_CLASSES = {
116
116
  system: "bg-sky-500/70",
117
117
  user: "bg-emerald-500/70",
118
118
  assistant: "bg-violet-500/70",
119
- tool: "bg-amber-500/70",
119
+ tool: "bg-sky-400/55",
120
120
  tools: "bg-slate-500/70"
121
121
  };
122
122
  const ROLE_FOCUS_RING = {
123
123
  system: "focus-visible:ring-sky-300",
124
124
  user: "focus-visible:ring-emerald-300",
125
125
  assistant: "focus-visible:ring-violet-300",
126
- tool: "focus-visible:ring-amber-300",
126
+ tool: "focus-visible:ring-sky-300",
127
127
  tools: "focus-visible:ring-slate-300"
128
128
  };
129
129
  const MAX_VISIBLE_SEGMENTS = 12;
@@ -1,10 +1,10 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { g as getLogFormatAdapter, f as formatTokens, c as cn, p as getStatusCategory, B as Badge, s as safeJsonValue } from "./ProxyViewerContainer-249bTH-T.mjs";
3
- import { JsonViewer } from "./json-viewer-Co-YRwUP.mjs";
4
- import "./router-to_OJirX.mjs";
2
+ import { g as getLogFormatAdapter, f as formatTokens, c as cn, p as getStatusCategory, B as Badge, s as safeJsonValue } from "./ProxyViewerContainer-Cckz5qKu.mjs";
3
+ import { JsonViewer } from "./json-viewer-aJhb93ZK.mjs";
4
+ import "./router-Dgkv5nKP.mjs";
5
5
  import "../_libs/modelcontextprotocol__server.mjs";
6
6
  import "../_libs/jszip.mjs";
7
- import { Z as Zap, i as TriangleAlert, V as CircleStop, Y as Brain, b as ChevronDown, f as ChevronRight, _ as Terminal } from "../_libs/lucide-react.mjs";
7
+ import { Z as Zap, i as TriangleAlert, Y as CircleStop, B as Brain, b as ChevronDown, f as ChevronRight, _ as Terminal } from "../_libs/lucide-react.mjs";
8
8
  import { M as Markdown } from "../_libs/react-markdown.mjs";
9
9
  import { R as Root } from "../_libs/radix-ui__react-separator.mjs";
10
10
  import { R as Root$1, C as CollapsibleTrigger$1, a as CollapsibleContent$1 } from "../_libs/radix-ui__react-collapsible.mjs";
@@ -167,6 +167,10 @@ import "../_libs/inline-style-parser.mjs";
167
167
  import "../_libs/hast-util-whitespace.mjs";
168
168
  import "../_libs/estree-util-is-identifier-name.mjs";
169
169
  import "../_libs/html-url-attributes.mjs";
170
+ const ANSWER_MARKDOWN_CLASS = "prose prose-sm dark:prose-invert max-w-none text-[13px] leading-[1.65] [&_pre]:bg-muted [&_pre]:text-foreground [&_code]:text-[0.8em] [&_p]:my-1 [&_p]:leading-[1.65] [&_ul]:my-1 [&_ol]:my-1 [&_li]:my-0.5 [&_li]:leading-[1.6]";
171
+ function AnswerMarkdown({ text }) {
172
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: ANSWER_MARKDOWN_CLASS, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Markdown, { children: text }) });
173
+ }
170
174
  function Separator({
171
175
  className,
172
176
  orientation = "horizontal",
@@ -276,7 +280,7 @@ function SystemReminderBlock({ text }) {
276
280
  open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" }),
277
281
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted-foreground text-xs italic select-none opacity-60", children: "[system-reminder]" })
278
282
  ] }),
279
- /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "pl-4 pt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none [&_pre]:bg-muted [&_pre]:text-foreground [&_code]:text-[0.8em] [&_p]:my-1 [&_ul]:my-1 [&_ol]:my-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Markdown, { children: text }) }) }) })
283
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "pl-4 pt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(AnswerMarkdown, { text }) }) })
280
284
  ] });
281
285
  }
282
286
  const TextBlock = reactExports.memo(function TextBlock2({ text }) {
@@ -286,7 +290,7 @@ const TextBlock = reactExports.memo(function TextBlock2({ text }) {
286
290
  const { thinking, remainingText } = extractThinkingFromContent(text);
287
291
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
288
292
  thinking !== null && /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingBlock, { thinking }),
289
- remainingText.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none [&_pre]:bg-muted [&_pre]:text-foreground [&_code]:text-[0.8em] [&_p]:my-1 [&_ul]:my-1 [&_ol]:my-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Markdown, { children: remainingText }) }),
293
+ remainingText.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(AnswerMarkdown, { text: remainingText }),
290
294
  thinking === null && remainingText.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground italic", children: "Empty text block" })
291
295
  ] });
292
296
  });
@@ -320,9 +324,9 @@ const ToolUseBlock = reactExports.memo(function ToolUseBlock2({
320
324
  input
321
325
  }) {
322
326
  const [open, setOpen] = reactExports.useState(false);
323
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-blue-500/40 my-1", children: [
324
- /* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-blue-500/5 transition-colors rounded-r-sm group", children: [
325
- /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-blue-400 shrink-0" }),
327
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-sky-400/25 my-1", children: [
328
+ /* @__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: [
329
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-sky-400/70 shrink-0" }),
326
330
  /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: name }),
327
331
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
328
332
  open ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3 text-muted-foreground" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "size-3 text-muted-foreground" })
@@ -400,9 +404,9 @@ function OpenAIToolCallBlock({ call }) {
400
404
  const [open, setOpen] = reactExports.useState(false);
401
405
  const name = call.function.name ?? "(unnamed tool)";
402
406
  const parsed = parseToolArguments(call.function.arguments);
403
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-blue-500/40 my-1", children: [
404
- /* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "flex items-center gap-1.5 px-3 py-1 w-full text-left cursor-pointer hover:bg-blue-500/5 transition-colors rounded-r-sm group", children: [
405
- /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-blue-400 shrink-0" }),
407
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-l-2 border-sky-400/25 my-1", children: [
408
+ /* @__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: [
409
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Terminal, { className: "size-3.5 text-sky-400/70 shrink-0" }),
406
410
  /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-[10px] font-mono px-1.5 py-0 h-4", children: name }),
407
411
  call.id !== void 0 && call.id !== "" && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono text-muted-foreground/60 truncate", children: call.id }),
408
412
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-1" }),
@@ -454,17 +458,17 @@ const OpenAIResponseView = reactExports.memo(function OpenAIResponseView2({
454
458
  const { thinking, remainingText } = extractThinkingFromContent(message.content);
455
459
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
456
460
  thinking !== null && !hasReasoningField && /* @__PURE__ */ jsxRuntimeExports.jsx(ThinkingBlock, { thinking }),
457
- remainingText.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none [&_pre]:bg-muted [&_pre]:text-foreground [&_code]:text-[0.8em] [&_p]:my-1 [&_ul]:my-1 [&_ol]:my-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Markdown, { children: remainingText }) })
461
+ remainingText.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(AnswerMarkdown, { text: remainingText })
458
462
  ] });
459
463
  })(),
460
464
  toolCalls.map((call, i) => (
461
465
  // biome-ignore lint/suspicious/noArrayIndexKey: tool_calls is the positionally stable list from the response
462
466
  /* @__PURE__ */ jsxRuntimeExports.jsx(OpenAIToolCallBlock, { call }, call.id ?? `tc-${i}`)
463
467
  )),
464
- message?.function_call !== null && message?.function_call !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-blue-500/30 rounded-md p-3 bg-blue-500/5", children: [
465
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-blue-400 font-mono mb-1", children: "function_call" }),
468
+ 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: [
469
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-sky-400/80 font-mono mb-1", children: "function_call" }),
466
470
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "font-mono text-xs", children: [
467
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-blue-300", children: message.function_call.name }),
471
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-foreground/80", children: message.function_call.name }),
468
472
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-muted-foreground", children: [
469
473
  "(",
470
474
  message.function_call.arguments,
@@ -521,7 +525,7 @@ function ErrorResponseView({ text }) {
521
525
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-md border border-red-500/30 bg-red-500/5 p-3", children: /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "text-xs text-red-300 whitespace-pre-wrap font-mono leading-relaxed overflow-auto max-h-[60vh]", children: text }) });
522
526
  }
523
527
  function MarkdownFallbackView({ text }) {
524
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "prose prose-sm dark:prose-invert max-w-none [&_pre]:bg-muted [&_pre]:text-foreground [&_code]:text-[0.8em] [&_p]:my-1 [&_ul]:my-1 [&_ol]:my-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Markdown, { children: text }) });
528
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(AnswerMarkdown, { text });
525
529
  }
526
530
  const ResponseView = reactExports.memo(function ResponseView2({
527
531
  responseText,
@@ -1,7 +1,7 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { k as TooltipProvider, l as Tooltip, m as TooltipTrigger, B as Badge, n as TooltipContent } from "./ProxyViewerContainer-249bTH-T.mjs";
3
- import { JsonViewer } from "./json-viewer-Co-YRwUP.mjs";
4
- import "./router-to_OJirX.mjs";
2
+ import { k as TooltipProvider, l as Tooltip, m as TooltipTrigger, B as Badge, n as TooltipContent } from "./ProxyViewerContainer-Cckz5qKu.mjs";
3
+ import { JsonViewer } from "./json-viewer-aJhb93ZK.mjs";
4
+ import "./router-Dgkv5nKP.mjs";
5
5
  import "../_libs/modelcontextprotocol__server.mjs";
6
6
  import "../_libs/jszip.mjs";
7
7
  import { b as ChevronDown, f as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
- import { P as ProxyViewerContainer } from "./ProxyViewerContainer-249bTH-T.mjs";
1
+ import { P as ProxyViewerContainer } from "./ProxyViewerContainer-Cckz5qKu.mjs";
2
2
  import "../_libs/react.mjs";
3
- import "./router-to_OJirX.mjs";
3
+ import "./router-Dgkv5nKP.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-Bd-2YRWo.mjs");
201
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-B8rrWXjr.mjs");
202
202
  const startManifest = tsrStartManifest();
203
203
  const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
204
204
  rootRoute.assets = rootRoute.assets || [];
@@ -767,7 +767,7 @@ let entriesPromise;
767
767
  let baseManifestPromise;
768
768
  let cachedFinalManifestPromise;
769
769
  async function loadEntries() {
770
- const routerEntry = await import("./router-to_OJirX.mjs").then((n) => n.f);
770
+ const routerEntry = await import("./router-Dgkv5nKP.mjs").then((n) => n.i);
771
771
  const startEntry = await import("./start-HYkvq4Ni.mjs");
772
772
  return { startEntry, routerEntry };
773
773
  }
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { q as parseJsonText, c as cn, k as TooltipProvider, l as Tooltip, m as TooltipTrigger, n as TooltipContent } from "./ProxyViewerContainer-249bTH-T.mjs";
3
- import "./router-to_OJirX.mjs";
2
+ import { q as parseJsonText, c as cn, k as TooltipProvider, l as Tooltip, m as TooltipTrigger, n as TooltipContent } from "./ProxyViewerContainer-Cckz5qKu.mjs";
3
+ import "./router-Dgkv5nKP.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { C as Check, a as Copy, b as ChevronDown, f as ChevronRight, q as ChevronsDown } from "../_libs/lucide-react.mjs";
@@ -49,7 +49,7 @@ import "../_libs/mimic-function.mjs";
49
49
  import "../_libs/semver.mjs";
50
50
  import "../_libs/uint8array-extras.mjs";
51
51
  const faviconSvg = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2064%2064'%20role='img'%20aria-label='Agent%20Inspector'%3e%3crect%20width='64'%20height='64'%20rx='14'%20fill='%23111827'%20/%3e%3cg%20fill='none'%20stroke='%23f59e0b'%20stroke-width='4.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3e%3cpath%20fill='%23f59e0b'%20d='M15%2036c0-11%207-18%2017-18s17%207%2017%2018c0%208-7%2013-17%2013s-17-5-17-13z'%20/%3e%3cpath%20d='M16%2031c-6-5-12-3-12%204%200%205%206%206%2011%202'%20/%3e%3cpath%20d='M48%2031c6-5%2012-3%2012%204%200%205-6%206-11%202'%20/%3e%3cpath%20d='M27%2019l-3-7'%20/%3e%3cpath%20d='M37%2019l3-7'%20/%3e%3cpath%20d='M19%2045l-6%209'%20/%3e%3cpath%20d='M27%2048l-3%209'%20/%3e%3cpath%20d='M37%2048l3%209'%20/%3e%3cpath%20d='M45%2045l6%209'%20/%3e%3c/g%3e%3cpath%20d='M14%2047l9-8%208%209c-5%203.5-12%203-17-1z'%20fill='%232f6b3f'%20opacity='.95'%20/%3e%3cpath%20d='M18%2046l5-5%205%206c-3%201.6-7%201.4-10-1z'%20fill='%236fb36f'%20opacity='.95'%20/%3e%3cpath%20d='M23%2041v10'%20fill='none'%20stroke='%23d6b45f'%20stroke-width='1.6'%20stroke-linecap='round'%20/%3e%3ccircle%20cx='31'%20cy='48'%20r='1.8'%20fill='%23c2412d'%20/%3e%3cpath%20d='M24%2044l13-11%2014%2013c-8%205.8-18%205.3-27-2z'%20fill='%232f6b3f'%20opacity='.97'%20/%3e%3cpath%20d='M30%2043l7-7%209%209c-5%202.7-11%202.5-16-2z'%20fill='%236fb36f'%20opacity='.95'%20/%3e%3cpath%20d='M37%2036v14'%20fill='none'%20stroke='%23d6b45f'%20stroke-width='2'%20stroke-linecap='round'%20/%3e%3cpath%20d='M30%2043c5-2%2011-1.5%2016%202'%20fill='none'%20stroke='%239fca78'%20stroke-width='1.8'%20stroke-linecap='round'%20/%3e%3ccircle%20cx='51'%20cy='46'%20r='2'%20fill='%23c2412d'%20/%3e%3cpath%20d='M40%2050l8-8%207%208c-4.2%203.2-10%203-15%200z'%20fill='%232f6b3f'%20opacity='.95'%20/%3e%3cpath%20d='M43%2049l5-5%204.5%205.5c-3%201.5-6%201.2-9.5-.5z'%20fill='%236fb36f'%20opacity='.95'%20/%3e%3cpath%20d='M48%2044v9'%20fill='none'%20stroke='%23d6b45f'%20stroke-width='1.5'%20stroke-linecap='round'%20/%3e%3ccircle%20cx='55'%20cy='50'%20r='1.7'%20fill='%23c2412d'%20/%3e%3ccircle%20cx='24'%20cy='11'%20r='3.2'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='40'%20cy='11'%20r='3.2'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='25'%20cy='34'%20r='2.1'%20fill='%23111827'%20/%3e%3ccircle%20cx='39'%20cy='34'%20r='2.1'%20fill='%23111827'%20/%3e%3c/svg%3e";
52
- const appCss = "/assets/index-CIL46Z2y.css";
52
+ const appCss = "/assets/index-CobXD0yH.css";
53
53
  const Route$q = createRootRoute({
54
54
  head: () => ({
55
55
  meta: [
@@ -76,7 +76,7 @@ function RootDocument({ children }) {
76
76
  ] })
77
77
  ] });
78
78
  }
79
- const $$splitComponentImporter$1 = () => import("./index-Bt47f9pn.mjs");
79
+ const $$splitComponentImporter$1 = () => import("./index-5RImHKfu.mjs");
80
80
  const Route$p = createFileRoute("/")({
81
81
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
82
82
  });
@@ -119,7 +119,7 @@ function decodeSessionIdFromPath(encoded) {
119
119
  function getSessionPath(sessionId) {
120
120
  return `/session/${encodeSessionIdForPath(sessionId)}`;
121
121
  }
122
- const $$splitComponentImporter = () => import("../_sessionId-_bf9vUww.mjs");
122
+ const $$splitComponentImporter = () => import("../_sessionId-C4xsxIWm.mjs");
123
123
  const Route$o = createFileRoute("/session/$sessionId")({
124
124
  component: lazyRouteComponent($$splitComponentImporter, "component"),
125
125
  parseParams: (params) => ({
@@ -155,18 +155,13 @@ function resolveDataDir(pathExists, env = process.env, platform = process.platfo
155
155
  function hasExplicitDataDir() {
156
156
  return process.env["AGENT_INSPECTOR_DATA_DIR"] !== void 0 && process.env["AGENT_INSPECTOR_DATA_DIR"] !== "" || process.env["AGENT_INSPECTOR_CONFIG_DIR"] !== void 0 && process.env["AGENT_INSPECTOR_CONFIG_DIR"] !== "";
157
157
  }
158
- const LOG_DIR_ENV = process.env["LOG_DIR"];
159
158
  const RETENTION_DAYS = Number(process.env["LOG_RETENTION_DAYS"] ?? "7");
160
- const LOG_FILE_ENV = process.env["AGENT_INSPECTOR_LOG_FILE"];
161
- let resolvedLogDir = null;
162
159
  function resolveLogDir() {
163
- if (resolvedLogDir !== null) return resolvedLogDir;
164
- if (LOG_DIR_ENV !== void 0) {
165
- resolvedLogDir = path.isAbsolute(LOG_DIR_ENV) ? LOG_DIR_ENV : path.join(getDataDir(), LOG_DIR_ENV);
166
- } else {
167
- resolvedLogDir = path.join(getDataDir(), "logs");
160
+ const logDirEnv = process.env["LOG_DIR"];
161
+ if (logDirEnv !== void 0 && logDirEnv !== "") {
162
+ return path.isAbsolute(logDirEnv) ? logDirEnv : path.join(getDataDir(), logDirEnv);
168
163
  }
169
- return resolvedLogDir;
164
+ return path.join(getDataDir(), "logs");
170
165
  }
171
166
  function getLogFilePath() {
172
167
  const date = /* @__PURE__ */ new Date();
@@ -176,8 +171,9 @@ function getLogFilePath() {
176
171
  return path.join(resolveLogDir(), `${yyyy}-${mm}-${dd}.jsonl`);
177
172
  }
178
173
  function getInspectorLogPath() {
179
- if (LOG_FILE_ENV !== void 0) {
180
- return LOG_FILE_ENV;
174
+ const logFileEnv = process.env["AGENT_INSPECTOR_LOG_FILE"];
175
+ if (logFileEnv !== void 0 && logFileEnv !== "") {
176
+ return logFileEnv;
181
177
  }
182
178
  return path.join(getDataDir(), "logs", "inspector.log");
183
179
  }
@@ -186,6 +182,7 @@ async function initLogger() {
186
182
  const retentionMs = RETENTION_DAYS * 24 * 60 * 60 * 1e3;
187
183
  const cutoff = Date.now() - retentionMs;
188
184
  try {
185
+ await mkdir(dir, { recursive: true });
189
186
  const entries = await readdir(dir);
190
187
  for (const entry of entries) {
191
188
  if (!entry.endsWith(".jsonl")) continue;
@@ -852,10 +849,10 @@ const StreamingChunksDataSchema = object({
852
849
  chunks: array(StreamingChunkSchema),
853
850
  truncated: boolean().optional()
854
851
  });
855
- const CHUNKS_DIR_ENV = process.env["CHUNKS_DIR"];
856
852
  function getChunksDir() {
857
- if (CHUNKS_DIR_ENV !== void 0) {
858
- return isAbsolute(CHUNKS_DIR_ENV) ? CHUNKS_DIR_ENV : join(getDataDir(), CHUNKS_DIR_ENV);
853
+ const chunksDirEnv = process.env["CHUNKS_DIR"];
854
+ if (chunksDirEnv !== void 0 && chunksDirEnv !== "") {
855
+ return isAbsolute(chunksDirEnv) ? chunksDirEnv : join(getDataDir(), chunksDirEnv);
859
856
  }
860
857
  return join(getDataDir(), "chunks");
861
858
  }
@@ -1228,11 +1225,6 @@ function removeFromCache(id) {
1228
1225
  }
1229
1226
  async function addTestLogEntry(entry) {
1230
1227
  const id = await getNextLogId();
1231
- const index = await loadIndex();
1232
- if (id > index.maxId) {
1233
- index.maxId = id;
1234
- await saveIndex(index);
1235
- }
1236
1228
  let streamingChunksPath = null;
1237
1229
  if (entry.streamingChunks !== void 0 && entry.streamingChunks.chunks.length > 0) {
1238
1230
  streamingChunksPath = writeChunks(
@@ -1251,6 +1243,9 @@ async function addTestLogEntry(entry) {
1251
1243
  sessionId: session.id,
1252
1244
  streamingChunksPath
1253
1245
  };
1246
+ const logFile = getCurrentLogFile();
1247
+ appendLogEntry(log);
1248
+ await addToIndex(id, logFile, -1, -1);
1254
1249
  addToCache(log);
1255
1250
  observeSessionLog(log, session.source);
1256
1251
  emitLogUpdate(log);
@@ -2639,10 +2634,13 @@ async function getClientInfo(request) {
2639
2634
  }
2640
2635
  const DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS = 10;
2641
2636
  const MAX_SLOW_RESPONSE_THRESHOLD_SECONDS = 600;
2637
+ const DEFAULT_TIME_DISPLAY_FORMAT = "time";
2638
+ const TimeDisplayFormatSchema = _enum(["time", "full"]);
2642
2639
  const RuntimeConfigSchema = object({
2643
2640
  stripClaudeCodeBillingHeader: boolean(),
2644
2641
  hasSeenOnboarding: boolean().default(false),
2645
- slowResponseThresholdSeconds: number().int().min(0).max(MAX_SLOW_RESPONSE_THRESHOLD_SECONDS).default(DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS)
2642
+ slowResponseThresholdSeconds: number().int().min(0).max(MAX_SLOW_RESPONSE_THRESHOLD_SECONDS).default(DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS),
2643
+ timeDisplayFormat: TimeDisplayFormatSchema.default(DEFAULT_TIME_DISPLAY_FORMAT)
2646
2644
  });
2647
2645
  function getConfigFilePath() {
2648
2646
  return join(getDataDir(), "config.json");
@@ -2675,13 +2673,15 @@ function resolveInitialConfig() {
2675
2673
  return {
2676
2674
  stripClaudeCodeBillingHeader: true,
2677
2675
  hasSeenOnboarding: false,
2678
- slowResponseThresholdSeconds: DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS
2676
+ slowResponseThresholdSeconds: DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS,
2677
+ timeDisplayFormat: DEFAULT_TIME_DISPLAY_FORMAT
2679
2678
  };
2680
2679
  }
2681
2680
  return {
2682
2681
  stripClaudeCodeBillingHeader: false,
2683
2682
  hasSeenOnboarding: false,
2684
- slowResponseThresholdSeconds: DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS
2683
+ slowResponseThresholdSeconds: DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS,
2684
+ timeDisplayFormat: DEFAULT_TIME_DISPLAY_FORMAT
2685
2685
  };
2686
2686
  }
2687
2687
  function getConfig() {
@@ -4100,7 +4100,8 @@ const Route$h = createFileRoute("/api/health")({
4100
4100
  const RuntimeConfigPatchSchema = object({
4101
4101
  stripClaudeCodeBillingHeader: boolean().optional(),
4102
4102
  hasSeenOnboarding: boolean().optional(),
4103
- slowResponseThresholdSeconds: number().int().min(0).max(MAX_SLOW_RESPONSE_THRESHOLD_SECONDS).optional()
4103
+ slowResponseThresholdSeconds: number().int().min(0).max(MAX_SLOW_RESPONSE_THRESHOLD_SECONDS).optional(),
4104
+ timeDisplayFormat: TimeDisplayFormatSchema.optional()
4104
4105
  }).strict().refine((v) => Object.keys(v).length > 0, {
4105
4106
  message: "At least one field must be provided"
4106
4107
  });
@@ -4729,7 +4730,7 @@ const RedactionMetadataSchema = object({
4729
4730
  redacted: boolean(),
4730
4731
  patterns: array(string())
4731
4732
  });
4732
- object({
4733
+ const KnowledgeCandidateSchema = object({
4733
4734
  id: string(),
4734
4735
  type: KnowledgeCandidateTypeSchema,
4735
4736
  title: string(),
@@ -6097,30 +6098,6 @@ function createFailedProviderTestResults(message, type) {
6097
6098
  function hasSuccessField(result) {
6098
6099
  return Object.prototype.hasOwnProperty.call(result, "success");
6099
6100
  }
6100
- function createTestLogEntry(providerName, path2, body, upstreamUrl, result, isTest) {
6101
- return {
6102
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
6103
- id: `test-${Date.now()}`,
6104
- method: "POST",
6105
- path: path2,
6106
- model: isTest ? result.model : void 0,
6107
- sessionId: null,
6108
- rawRequestBody: body,
6109
- responseStatus: result.success ? 200 : 500,
6110
- responseText: result.rawResponse ?? JSON.stringify(result),
6111
- inputTokens: result.inputTokens ?? null,
6112
- outputTokens: result.outputTokens ?? null,
6113
- elapsedMs: result.latencyMs ?? 0,
6114
- streaming: result.streaming ?? false,
6115
- userAgent: "provider-test",
6116
- origin: null,
6117
- upstreamUrl,
6118
- error: result.success ? null : result.error?.message ?? String(result.error),
6119
- isTest: true,
6120
- providerName,
6121
- headers: result.requestHeaders ?? {}
6122
- };
6123
- }
6124
6101
  async function logModelResults(displayName, providerName, anthropicUrl, openaiUrl, modelResults) {
6125
6102
  const usageModel = getModelUsageName(displayName, providerName);
6126
6103
  if (anthropicUrl !== void 0) {
@@ -6130,7 +6107,6 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
6130
6107
  const nonStreamingResult = nsResult;
6131
6108
  const streamingResult = sResult;
6132
6109
  const requestBody = JSON.stringify(buildProviderTestRequestBody(usageModel, "non-streaming"));
6133
- const upstreamUrl = `${anthropicUrl}/v1/messages`;
6134
6110
  await addTestLogEntry({
6135
6111
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
6136
6112
  method: "POST",
@@ -6153,16 +6129,6 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
6153
6129
  providerName,
6154
6130
  headers: nonStreamingResult.requestHeaders ?? {}
6155
6131
  });
6156
- appendLogEntry(
6157
- createTestLogEntry(
6158
- providerName,
6159
- "/v1/messages",
6160
- requestBody,
6161
- upstreamUrl,
6162
- nonStreamingResult,
6163
- true
6164
- )
6165
- );
6166
6132
  const streamingRequestBody = JSON.stringify(
6167
6133
  buildProviderTestRequestBody(usageModel, "streaming")
6168
6134
  );
@@ -6189,16 +6155,6 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
6189
6155
  providerName,
6190
6156
  headers: streamingResult.requestHeaders ?? {}
6191
6157
  });
6192
- appendLogEntry(
6193
- createTestLogEntry(
6194
- providerName,
6195
- "/v1/messages",
6196
- streamingRequestBody,
6197
- upstreamUrl,
6198
- streamingResult,
6199
- true
6200
- )
6201
- );
6202
6158
  }
6203
6159
  }
6204
6160
  if (openaiUrl !== void 0) {
@@ -6208,7 +6164,6 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
6208
6164
  const nonStreamingResult = nsResult;
6209
6165
  const streamingResult = sResult;
6210
6166
  const requestBody = JSON.stringify(buildProviderTestRequestBody(usageModel, "non-streaming"));
6211
- const upstreamUrl = `${openaiUrl}/v1/chat/completions`;
6212
6167
  await addTestLogEntry({
6213
6168
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
6214
6169
  method: "POST",
@@ -6231,16 +6186,6 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
6231
6186
  providerName,
6232
6187
  headers: nonStreamingResult.requestHeaders ?? {}
6233
6188
  });
6234
- appendLogEntry(
6235
- createTestLogEntry(
6236
- providerName,
6237
- "/v1/chat/completions",
6238
- requestBody,
6239
- upstreamUrl,
6240
- nonStreamingResult,
6241
- true
6242
- )
6243
- );
6244
6189
  const streamingRequestBody = JSON.stringify(
6245
6190
  buildProviderTestRequestBody(usageModel, "streaming")
6246
6191
  );
@@ -6267,16 +6212,6 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
6267
6212
  providerName,
6268
6213
  headers: streamingResult.requestHeaders ?? {}
6269
6214
  });
6270
- appendLogEntry(
6271
- createTestLogEntry(
6272
- providerName,
6273
- "/v1/chat/completions",
6274
- streamingRequestBody,
6275
- upstreamUrl,
6276
- streamingResult,
6277
- true
6278
- )
6279
- );
6280
6215
  }
6281
6216
  }
6282
6217
  }
@@ -6640,17 +6575,21 @@ export {
6640
6575
  AnthropicResponseSchema$1 as A,
6641
6576
  CapturedLogSchema as C,
6642
6577
  DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS as D,
6578
+ KnowledgeCandidateSchema as K,
6643
6579
  MAX_SLOW_RESPONSE_THRESHOLD_SECONDS as M,
6644
6580
  OpenAIRequestSchema as O,
6645
6581
  ProviderTestResultsSchema as P,
6646
6582
  Route$o as R,
6647
- RuntimeConfigSchema as a,
6648
- AnthropicRequestSchema as b,
6649
- createPendingProviderTestResults as c,
6650
- createFailedProviderTestResults as d,
6651
- ProviderConfigSchema as e,
6652
- router as f,
6583
+ TimeDisplayFormatSchema as T,
6584
+ DEFAULT_TIME_DISPLAY_FORMAT as a,
6585
+ RuntimeConfigSchema as b,
6586
+ AnthropicRequestSchema as c,
6587
+ safeGetOwnProperty as d,
6588
+ createPendingProviderTestResults as e,
6589
+ createFailedProviderTestResults as f,
6653
6590
  getSessionPath as g,
6591
+ ProviderConfigSchema as h,
6592
+ router as i,
6654
6593
  parseOpenAIResponse as p,
6655
6594
  requestFormatForPath as r,
6656
6595
  stripClaudeCodeBillingHeader as s
@@ -1,4 +1,4 @@
1
- const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/api/config", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/providers", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-FSGUGtEL.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-BGGOWR7A.js", "/assets/ProxyViewerContainer-USuxPy-K.js"] }, "/api/config": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.ts", "children": ["/api/config/paths"] }, "/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/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-D_SeK_qp.js", "/assets/ProxyViewerContainer-USuxPy-K.js"] }, "/api/config/paths": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.paths.ts" }, "/api/knowledge/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.ts", "children": ["/api/knowledge/candidates/$candidateId/promote"] }, "/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/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/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/test": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.ts", "children": ["/api/providers/$providerId/test/log"] }, "/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-FSGUGtEL.js" });
1
+ const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/api/config", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/providers", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-mgxeUdZQ.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-BIw2H6jO.js", "/assets/ProxyViewerContainer-D85_UANk.js"] }, "/api/config": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.ts", "children": ["/api/config/paths"] }, "/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/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-YqWFBu6d.js", "/assets/ProxyViewerContainer-D85_UANk.js"] }, "/api/config/paths": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.paths.ts" }, "/api/knowledge/candidates": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/knowledge.candidates.ts", "children": ["/api/knowledge/candidates/$candidateId/promote"] }, "/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/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/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/test": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/providers.$providerId.test.ts", "children": ["/api/providers/$providerId/test/log"] }, "/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-mgxeUdZQ.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };