@tonyclaw/agent-inspector 2.1.15 → 2.1.16

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 (65) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-BcEd6V-V.js → CompareDrawer-Ccrrcx1j.js} +1 -1
  3. package/.output/public/assets/ProxyViewerContainer-DLqClc9A.js +106 -0
  4. package/.output/public/assets/{ReplayDialog-BNpC0548.js → ReplayDialog-C7axhr-l.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-Ds1uRLVB.js → RequestAnatomy-WOptg8j_.js} +1 -1
  6. package/.output/public/assets/{ResponseView-7KPVqKl5.js → ResponseView-CSAcxh_M.js} +2 -2
  7. package/.output/public/assets/{StreamingChunkSequence-BHQT261s.js → StreamingChunkSequence-DJS5KhPx.js} +1 -1
  8. package/.output/public/assets/_sessionId-DUSalzKH.js +1 -0
  9. package/.output/public/assets/index-BPpA21dY.css +1 -0
  10. package/.output/public/assets/index-Bt0Az2I2.js +1 -0
  11. package/.output/public/assets/{index-DjKt8XKe.js → index-DMPNh46t.js} +1 -1
  12. package/.output/public/assets/{json-viewer-CkCu-rka.js → json-viewer-inX5QSa3.js} +1 -1
  13. package/.output/public/assets/{main-DpD1N0S8.js → main-aCAKYGSD.js} +2 -2
  14. package/.output/server/_libs/lucide-react.mjs +207 -171
  15. package/.output/server/{_sessionId-DF9Sy8cP.mjs → _sessionId-C0fhvQnn.mjs} +2 -2
  16. package/.output/server/_ssr/{CompareDrawer-BoxztaO7.mjs → CompareDrawer-CO-Ti5sg.mjs} +3 -3
  17. package/.output/server/_ssr/{ProxyViewerContainer-CRBkqFlJ.mjs → ProxyViewerContainer-N4J7uBCX.mjs} +807 -386
  18. package/.output/server/_ssr/{ReplayDialog-Cc1dyDuK.mjs → ReplayDialog-J1VxC0In.mjs} +4 -4
  19. package/.output/server/_ssr/{RequestAnatomy-CMGSsz5Z.mjs → RequestAnatomy-DBH-F3rq.mjs} +3 -3
  20. package/.output/server/_ssr/{ResponseView-Cp10DM1D.mjs → ResponseView-DLFwV7Hd.mjs} +3 -3
  21. package/.output/server/_ssr/{StreamingChunkSequence-B1VGxy3A.mjs → StreamingChunkSequence-BywmuND0.mjs} +3 -3
  22. package/.output/server/_ssr/{index-47XVPghS.mjs → index-CStymIc0.mjs} +2 -2
  23. package/.output/server/_ssr/index.mjs +2 -2
  24. package/.output/server/_ssr/{json-viewer-zDE2rrmJ.mjs → json-viewer-DlQu0N1x.mjs} +3 -3
  25. package/.output/server/_ssr/{router-DVeuZFqI.mjs → router-CQ4Zxhmr.mjs} +112 -46
  26. package/.output/server/{_tanstack-start-manifest_v-Bp8JxtPW.mjs → _tanstack-start-manifest_v-BHeJBGfo.mjs} +1 -1
  27. package/.output/server/index.mjs +72 -72
  28. package/package.json +1 -1
  29. package/src/components/ProxyViewer.tsx +146 -105
  30. package/src/components/ProxyViewerContainer.tsx +77 -67
  31. package/src/components/alerts/AlertsDialog.tsx +2 -1
  32. package/src/components/clients/ClientLogo.tsx +1 -1
  33. package/src/components/groups/GroupsDialog.tsx +19 -1
  34. package/src/components/providers/ProviderCard.tsx +1 -1
  35. package/src/components/providers/ProviderForm.tsx +18 -18
  36. package/src/components/providers/ProviderLogo.tsx +6 -1
  37. package/src/components/providers/ProvidersPanel.tsx +6 -6
  38. package/src/components/providers/SettingsDialog.tsx +13 -6
  39. package/src/components/proxy-viewer/AgentTraceSummary.tsx +6 -6
  40. package/src/components/proxy-viewer/ConversationGroup.tsx +43 -32
  41. package/src/components/proxy-viewer/ConversationGroupList.tsx +452 -89
  42. package/src/components/proxy-viewer/ConversationHeader.tsx +44 -32
  43. package/src/components/proxy-viewer/LogEntry.tsx +21 -17
  44. package/src/components/proxy-viewer/LogEntryHeader.tsx +38 -45
  45. package/src/components/proxy-viewer/ProviderLogoStack.tsx +2 -2
  46. package/src/components/proxy-viewer/RequestToolsPanel.tsx +9 -9
  47. package/src/components/proxy-viewer/ThreadConnector.tsx +4 -4
  48. package/src/components/proxy-viewer/TurnGroup.tsx +16 -11
  49. package/src/components/proxy-viewer/TurnGroupList.tsx +3 -0
  50. package/src/components/proxy-viewer/viewerState.ts +0 -4
  51. package/src/components/ui/icon-trigger.ts +2 -0
  52. package/src/components/ui/transient-toast.tsx +104 -0
  53. package/src/lib/sessionInfoContract.ts +4 -0
  54. package/src/mcp/server.ts +71 -27
  55. package/src/mcp/toolHandlers.ts +23 -4
  56. package/src/proxy/formats/openai/alibabaProvider.ts +0 -4
  57. package/src/proxy/sessionInfo.ts +31 -2
  58. package/src/proxy/sessionSupervisor.ts +20 -1
  59. package/src/proxy/store.ts +1 -1
  60. package/src/routes/api/providers.$providerId.test.log.ts +8 -4
  61. package/styles/globals.css +180 -180
  62. package/.output/public/assets/ProxyViewerContainer-h851qWNp.js +0 -106
  63. package/.output/public/assets/_sessionId-DWePGjnS.js +0 -1
  64. package/.output/public/assets/index-CI1-G8ua.js +0 -1
  65. package/.output/public/assets/index-DdhFqPsI.css +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-CRBkqFlJ.mjs";
3
- import { ResponseView } from "./ResponseView-Cp10DM1D.mjs";
4
- import { C as CapturedLogSchema } from "./router-DVeuZFqI.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-N4J7uBCX.mjs";
3
+ import { ResponseView } from "./ResponseView-DLFwV7Hd.mjs";
4
+ import { C as CapturedLogSchema } from "./router-CQ4Zxhmr.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/modelcontextprotocol__server.mjs";
7
- import { a9 as RotateCcw, am as Braces, an as Minimize2 } from "../_libs/lucide-react.mjs";
7
+ import { ac as RotateCcw, ap as Braces, aq 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,9 +1,9 @@
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-CRBkqFlJ.mjs";
3
- import "./router-DVeuZFqI.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-N4J7uBCX.mjs";
3
+ import "./router-CQ4Zxhmr.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
- import { I as Info, C as ChevronDown, f as ChevronRight } from "../_libs/lucide-react.mjs";
6
+ import { I as Info, a as ChevronDown, h as ChevronRight } 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";
@@ -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-CRBkqFlJ.mjs";
3
- import { s as safeGetOwnProperty } from "./router-DVeuZFqI.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-N4J7uBCX.mjs";
3
+ import { s as safeGetOwnProperty } from "./router-CQ4Zxhmr.mjs";
4
4
  import "../_libs/jszip.mjs";
5
5
  import "../_libs/modelcontextprotocol__server.mjs";
6
- import { Z as Zap, q as TriangleAlert, ao as CircleStop, B as Brain, C as ChevronDown, f as ChevronRight, m as Terminal } from "../_libs/lucide-react.mjs";
6
+ import { Z as Zap, T as TriangleAlert, ar as CircleStop, J as Brain, a as ChevronDown, h as ChevronRight, o 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";
@@ -1,9 +1,9 @@
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-CRBkqFlJ.mjs";
3
- import "./router-DVeuZFqI.mjs";
2
+ import { m as TooltipProvider, n as Tooltip, o as TooltipTrigger, B as Badge, p as TooltipContent, E as LazyJsonViewer } from "./ProxyViewerContainer-N4J7uBCX.mjs";
3
+ import "./router-CQ4Zxhmr.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
- import { C as ChevronDown, f as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
6
+ import { a as ChevronDown, h as ChevronRight, L as LoaderCircle } 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";
@@ -1,6 +1,6 @@
1
- import { P as ProxyViewerContainer } from "./ProxyViewerContainer-CRBkqFlJ.mjs";
1
+ import { P as ProxyViewerContainer } from "./ProxyViewerContainer-N4J7uBCX.mjs";
2
2
  import "../_libs/react.mjs";
3
- import "./router-DVeuZFqI.mjs";
3
+ import "./router-CQ4Zxhmr.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-Bp8JxtPW.mjs");
201
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-BHeJBGfo.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-DVeuZFqI.mjs").then((n) => n.E);
779
+ const routerEntry = await import("./router-CQ4Zxhmr.mjs").then((n) => n.E);
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-CRBkqFlJ.mjs";
3
- import "./router-DVeuZFqI.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-N4J7uBCX.mjs";
3
+ import "./router-CQ4Zxhmr.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
- import { a as Check, c as Copy, C as ChevronDown, f as ChevronRight, a6 as ChevronsDown } from "../_libs/lucide-react.mjs";
6
+ import { b as Check, e as Copy, a as ChevronDown, h as ChevronRight, a9 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-DdhFqPsI.css";
68
+ const appCss = "/assets/index-BPpA21dY.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-47XVPghS.mjs");
111
+ const $$splitComponentImporter$1 = () => import("./index-CStymIc0.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-DF9Sy8cP.mjs");
154
+ const $$splitComponentImporter = () => import("../_sessionId-C0fhvQnn.mjs");
155
155
  const Route$B = createFileRoute("/session/$sessionId")({
156
156
  component: lazyRouteComponent($$splitComponentImporter, "component"),
157
157
  parseParams: (params) => ({
@@ -1849,7 +1849,10 @@ function buildSessionLogSummary(log) {
1849
1849
  cacheCreate: log.cacheCreationInputTokens,
1850
1850
  cacheRead: log.cacheReadInputTokens
1851
1851
  },
1852
- sessionId: normalizeString(log.sessionId)
1852
+ sessionId: normalizeString(log.sessionId),
1853
+ userAgent: normalizeString(log.userAgent),
1854
+ clientPid: log.clientPid ?? null,
1855
+ clientProjectFolder: normalizeString(log.clientProjectFolder)
1853
1856
  };
1854
1857
  }
1855
1858
  function nonNegativeInteger(value) {
@@ -1895,6 +1898,27 @@ function collectSortedValues$1(values) {
1895
1898
  }
1896
1899
  return [...set].sort();
1897
1900
  }
1901
+ function firstSummaryUserAgent(summaries) {
1902
+ for (const summary of summaries) {
1903
+ const value = normalizeString(summary.userAgent);
1904
+ if (value !== null) return value;
1905
+ }
1906
+ return null;
1907
+ }
1908
+ function firstSummaryClientPid(summaries) {
1909
+ for (const summary of summaries) {
1910
+ const value = summary.clientPid;
1911
+ if (value !== null && value !== void 0) return value;
1912
+ }
1913
+ return null;
1914
+ }
1915
+ function firstSummaryProjectFolder(summaries) {
1916
+ for (const summary of summaries) {
1917
+ const value = normalizeString(summary.clientProjectFolder);
1918
+ if (value !== null) return value;
1919
+ }
1920
+ return null;
1921
+ }
1898
1922
  function countCompletedLogs(summaries) {
1899
1923
  let count = 0;
1900
1924
  for (const summary of summaries) {
@@ -1977,8 +2001,9 @@ function buildSessionInfo(input) {
1977
2001
  tokenUsage,
1978
2002
  lastLogId: input.snapshot?.lastLogId ?? latestLog?.id ?? null,
1979
2003
  lastModel: normalizeString(input.snapshot?.lastModel) ?? latestLog?.model ?? null,
1980
- clientPid: input.snapshot?.clientPid ?? null,
1981
- clientProjectFolder: normalizeString(input.snapshot?.clientProjectFolder),
2004
+ clientUserAgent: firstSummaryUserAgent(summaries),
2005
+ clientPid: input.snapshot?.clientPid ?? firstSummaryClientPid(summaries),
2006
+ clientProjectFolder: normalizeString(input.snapshot?.clientProjectFolder) ?? firstSummaryProjectFolder(summaries),
1982
2007
  inspectorPath,
1983
2008
  inspectorUrl: buildAbsoluteUrl(input.baseUrl, inspectorPath),
1984
2009
  apiPath,
@@ -2508,6 +2533,14 @@ function normalizeExplicitSessionId(sessionId) {
2508
2533
  const trimmed = sessionId.trim();
2509
2534
  return trimmed.length > 0 ? trimmed : null;
2510
2535
  }
2536
+ function buildProviderTestSessionId(providerId) {
2537
+ const normalizedProviderId = normalizeExplicitSessionId(providerId);
2538
+ if (normalizedProviderId === null) return PROVIDER_TEST_SESSION_ID;
2539
+ return `${PROVIDER_TEST_SESSION_ID}:${normalizedProviderId}`;
2540
+ }
2541
+ function isProviderTestSessionId(sessionId) {
2542
+ return sessionId === PROVIDER_TEST_SESSION_ID || sessionId.startsWith(`${PROVIDER_TEST_SESSION_ID}:`);
2543
+ }
2511
2544
  function buildClientSessionId(clientInfo) {
2512
2545
  const projectFolder = normalizeExplicitSessionId(clientInfo.projectFolder);
2513
2546
  if (clientInfo.pid !== null) {
@@ -2525,10 +2558,16 @@ function buildClientSessionId(clientInfo) {
2525
2558
  return { id: null, source: null };
2526
2559
  }
2527
2560
  function resolveSessionIdentity(input) {
2561
+ const explicit = normalizeExplicitSessionId(input.explicitSessionId);
2528
2562
  if (input.isTest === true) {
2563
+ if (explicit !== null) {
2564
+ return {
2565
+ id: explicit,
2566
+ source: isProviderTestSessionId(explicit) ? "provider-test" : "explicit"
2567
+ };
2568
+ }
2529
2569
  return { id: PROVIDER_TEST_SESSION_ID, source: "provider-test" };
2530
2570
  }
2531
- const explicit = normalizeExplicitSessionId(input.explicitSessionId);
2532
2571
  if (explicit !== null) {
2533
2572
  return { id: explicit, source: "explicit" };
2534
2573
  }
@@ -4622,9 +4661,6 @@ const alibabaProvider = {
4622
4661
  name: "alibaba",
4623
4662
  matches(model) {
4624
4663
  const m = model.toLowerCase().replace(/\s+/g, "-");
4625
- if (m.startsWith("glm-5")) {
4626
- return true;
4627
- }
4628
4664
  if (m.startsWith("qwen")) {
4629
4665
  return true;
4630
4666
  }
@@ -7508,7 +7544,10 @@ const SessionLogSummarySchema = object({
7508
7544
  cacheCreate: number().nullable(),
7509
7545
  cacheRead: number().nullable()
7510
7546
  }),
7511
- sessionId: string().nullable()
7547
+ sessionId: string().nullable(),
7548
+ userAgent: string().nullable().optional(),
7549
+ clientPid: number().nullable().optional(),
7550
+ clientProjectFolder: string().nullable().optional()
7512
7551
  });
7513
7552
  const SessionInfoSchema = object({
7514
7553
  id: string(),
@@ -7532,6 +7571,7 @@ const SessionInfoSchema = object({
7532
7571
  tokenUsage: SessionTokenUsageSchema,
7533
7572
  lastLogId: number().nullable(),
7534
7573
  lastModel: string().nullable(),
7574
+ clientUserAgent: string().nullable().optional(),
7535
7575
  clientPid: number().nullable(),
7536
7576
  clientProjectFolder: string().nullable(),
7537
7577
  inspectorPath: string(),
@@ -8976,7 +9016,7 @@ const Route$w = createFileRoute("/api/models")({
8976
9016
  }
8977
9017
  }
8978
9018
  });
8979
- const version = "2.1.15";
9019
+ const version = "2.1.16";
8980
9020
  const packageJson = {
8981
9021
  version
8982
9022
  };
@@ -9686,7 +9726,10 @@ function buildLogSummary(log) {
9686
9726
  cacheRead: log.cacheReadInputTokens
9687
9727
  },
9688
9728
  sessionId: log.sessionId,
9729
+ userAgent: log.userAgent ?? null,
9689
9730
  clientPid: log.clientPid ?? null,
9731
+ clientCwd: log.clientCwd ?? null,
9732
+ clientProjectFolder: log.clientProjectFolder ?? null,
9690
9733
  lastUserMessagePreview: extractLastUserMessagePreview(log),
9691
9734
  responsePreview: extractResponsePreview(log),
9692
9735
  hasChunks: log.streamingChunks !== void 0 && log.streamingChunks !== null || log.streamingChunksPath !== null && log.streamingChunksPath !== void 0,
@@ -10056,21 +10099,31 @@ async function replayLogImpl(callApi2, args) {
10056
10099
  }
10057
10100
  return textJson(await replayRes.json());
10058
10101
  }
10102
+ function normalizedProviderModels(input) {
10103
+ const modelList = input.models ?? [];
10104
+ const models = modelList.map((model2) => model2.trim()).filter((model2) => model2 !== "");
10105
+ if (models.length > 0) return models;
10106
+ const model = input.model?.trim();
10107
+ return model !== void 0 && model !== "" ? [model] : [];
10108
+ }
10059
10109
  async function addProviderImpl(callApi2, provider) {
10110
+ const models = normalizedProviderModels(provider);
10060
10111
  const res = await callApi2("/api/providers", {
10061
10112
  method: "POST",
10062
10113
  headers: { "content-type": "application/json" },
10063
- body: JSON.stringify(provider)
10114
+ body: JSON.stringify({ ...provider, models })
10064
10115
  });
10065
10116
  if (!res.ok) return toolError(`POST /api/providers returned ${res.status}`);
10066
10117
  return textJson(await res.json());
10067
10118
  }
10068
10119
  async function updateProviderImpl(callApi2, input) {
10069
10120
  const { id, ...patch } = input;
10121
+ const models = patch.models !== void 0 || patch.model !== void 0 ? normalizedProviderModels(patch) : void 0;
10122
+ const body = models === void 0 ? patch : { ...patch, models };
10070
10123
  const res = await callApi2(`/api/providers/${encodeURIComponent(id)}`, {
10071
10124
  method: "PUT",
10072
10125
  headers: { "content-type": "application/json" },
10073
- body: JSON.stringify(patch)
10126
+ body: JSON.stringify(body)
10074
10127
  });
10075
10128
  if (!res.ok) return toolError(`PUT /api/providers/${id} returned ${res.status}`);
10076
10129
  return textJson(await res.json());
@@ -10302,13 +10355,46 @@ Parameters:
10302
10355
  Returns: array of "thick summary" objects, each containing:
10303
10356
  - id, timestamp, provider, model, apiFormat, method, path, status, isStreaming,
10304
10357
  hasError, latencyMs, tokens { input, output, cacheCreate, cacheRead },
10305
- sessionId, clientPid,
10358
+ sessionId, userAgent, clientPid, clientCwd, clientProjectFolder,
10306
10359
  - lastUserMessagePreview (string|null, ≤500 chars) — first text block of the last user message, parsed via the format-specific schema (NOT a raw body slice)
10307
10360
  - responsePreview (string|null, ≤500 chars) — first text block of the assistant response
10308
10361
  - hasChunks, hasRawRequestBody (booleans)
10309
10362
 
10310
10363
  Either preview field is null when the body is unknown format, unparseable, or the relevant content is non-text (e.g., image-only).`;
10311
10364
  const PROVIDER_WRITE_WARNING = "⚠ This tool mutates provider configuration. Confirm with the user before invoking.";
10365
+ const AddProviderInputSchema = object({
10366
+ name: string().min(1).describe("Provider display name."),
10367
+ apiKey: string().min(1).describe("Plaintext provider API key."),
10368
+ format: _enum(["anthropic", "openai"]).optional().describe("Primary API family. Use openai for Chat Completions or Responses providers."),
10369
+ model: string().min(1).optional().describe("Legacy single-model input. Prefer models for new clients."),
10370
+ models: array(string().min(1)).min(1).optional().describe("Provider model names."),
10371
+ anthropicBaseUrl: string().optional().describe("Anthropic-compatible base or exact /v1/messages endpoint."),
10372
+ openaiBaseUrl: string().optional().describe("OpenAI Chat Completions base or exact /v1/chat/completions endpoint."),
10373
+ openaiResponsesBaseUrl: string().optional().describe(
10374
+ "OpenAI Responses base or exact /v1/responses endpoint. MiniMax default endpoint is https://api.minimaxi.com/v1/responses."
10375
+ ),
10376
+ authHeader: _enum(["bearer", "x-api-key"]).optional(),
10377
+ apiDocsUrl: string().optional()
10378
+ }).refine(
10379
+ (input) => input.model !== void 0 || input.models !== void 0 && input.models.length > 0,
10380
+ { message: "Provide models or legacy model." }
10381
+ );
10382
+ const UpdateProviderInputSchema = object({
10383
+ id: string().describe("The provider id to update."),
10384
+ name: string().min(1).optional(),
10385
+ apiKey: string().min(1).optional(),
10386
+ format: _enum(["anthropic", "openai"]).optional(),
10387
+ model: string().min(1).optional().describe("Legacy single-model input. Prefer models."),
10388
+ models: array(string().min(1)).optional().describe("Replace provider model names."),
10389
+ baseUrl: string().min(1).optional().describe("Legacy route URL retained for old configs; prefer format-specific URL fields."),
10390
+ authHeader: _enum(["bearer", "x-api-key"]).optional(),
10391
+ anthropicBaseUrl: string().optional().describe("Anthropic-compatible base or exact /v1/messages endpoint."),
10392
+ openaiBaseUrl: string().optional().describe("OpenAI Chat Completions base or exact /v1/chat/completions endpoint."),
10393
+ openaiResponsesBaseUrl: string().optional().describe(
10394
+ "OpenAI Responses base or exact /v1/responses endpoint. MiniMax default endpoint is https://api.minimaxi.com/v1/responses."
10395
+ ),
10396
+ apiDocsUrl: string().optional()
10397
+ });
10312
10398
  const LogResourceListResponseSchema = object({
10313
10399
  logs: array(object({ id: number().int().positive() }))
10314
10400
  });
@@ -10979,18 +11065,8 @@ function registerTools(server) {
10979
11065
  title: "Add a new LLM provider",
10980
11066
  description: `${PROVIDER_WRITE_WARNING}
10981
11067
 
10982
- Persists a new provider to <dataDir>/providers.json. Required fields: name, apiKey, format (anthropic|openai), model. Optional: baseUrl, authHeader (default: bearer), apiDocsUrl.`,
10983
- inputSchema: object({
10984
- name: string().min(1),
10985
- apiKey: string().min(1),
10986
- format: _enum(["anthropic", "openai"]),
10987
- model: string().min(1),
10988
- anthropicBaseUrl: string().optional(),
10989
- openaiBaseUrl: string().optional(),
10990
- openaiResponsesBaseUrl: string().optional(),
10991
- authHeader: _enum(["bearer", "x-api-key"]).optional(),
10992
- apiDocsUrl: string().optional()
10993
- })
11068
+ Persists a new provider to <dataDir>/providers.json. Required fields: name, apiKey, and models (or legacy model). Chat Completions and Responses can use different upstream URLs: set openaiBaseUrl for /v1/chat/completions and openaiResponsesBaseUrl for /v1/responses. The URL builder accepts either a base URL such as https://api.minimaxi.com or an exact endpoint such as https://api.minimaxi.com/v1/responses.`,
11069
+ inputSchema: AddProviderInputSchema
10994
11070
  },
10995
11071
  (provider) => safeWriteCall("inspector_add_provider", () => addProviderImpl(callApi, provider))
10996
11072
  );
@@ -11000,20 +11076,8 @@ Persists a new provider to <dataDir>/providers.json. Required fields: name, apiK
11000
11076
  title: "Update an existing provider",
11001
11077
  description: `${PROVIDER_WRITE_WARNING} Updating with nonsense values effectively soft-deletes a provider. Confirm with the user before invoking.
11002
11078
 
11003
- PATCH-style update: only the fields you supply are changed. Returns the updated ProviderConfig.`,
11004
- inputSchema: object({
11005
- id: string().describe("The provider id to update."),
11006
- name: string().min(1).optional(),
11007
- apiKey: string().min(1).optional(),
11008
- format: _enum(["anthropic", "openai"]).optional(),
11009
- model: string().min(1).optional(),
11010
- baseUrl: string().min(1).optional(),
11011
- authHeader: _enum(["bearer", "x-api-key"]).optional(),
11012
- anthropicBaseUrl: string().optional(),
11013
- openaiBaseUrl: string().optional(),
11014
- openaiResponsesBaseUrl: string().optional(),
11015
- apiDocsUrl: string().optional()
11016
- })
11079
+ PATCH-style update: only the fields you supply are changed. Use models to update the configured model list. For OpenAI-compatible providers, openaiBaseUrl targets /v1/chat/completions and openaiResponsesBaseUrl targets /v1/responses, and those endpoints may be different.`,
11080
+ inputSchema: UpdateProviderInputSchema
11017
11081
  },
11018
11082
  (input) => safeWriteCall("inspector_update_provider", () => updateProviderImpl(callApi, input))
11019
11083
  );
@@ -15700,7 +15764,7 @@ function getResultTokensPerSecond(result) {
15700
15764
  totalStreamMs: getResultTotalStreamMs(result)
15701
15765
  });
15702
15766
  }
15703
- async function logModelResults(displayName, providerName, anthropicUrl, openaiUrl, modelResults, captureFullDetails) {
15767
+ async function logModelResults(displayName, providerName, providerSessionId, anthropicUrl, openaiUrl, modelResults, captureFullDetails) {
15704
15768
  const usageModel = getModelUsageName(displayName, providerName);
15705
15769
  if (anthropicUrl !== void 0) {
15706
15770
  const nsResult = modelResults.anthropic.nonStreaming;
@@ -15714,7 +15778,7 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
15714
15778
  method: "POST",
15715
15779
  path: "/v1/messages",
15716
15780
  model: nonStreamingResult.model ?? displayName,
15717
- sessionId: null,
15781
+ sessionId: providerSessionId,
15718
15782
  rawRequestBody: requestBody,
15719
15783
  responseStatus: getResultResponseStatus(nonStreamingResult),
15720
15784
  responseText: getResultResponseText(nonStreamingResult),
@@ -15742,7 +15806,7 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
15742
15806
  method: "POST",
15743
15807
  path: "/v1/messages",
15744
15808
  model: streamingResult.model ?? displayName,
15745
- sessionId: null,
15809
+ sessionId: providerSessionId,
15746
15810
  rawRequestBody: streamingRequestBody,
15747
15811
  responseStatus: getResultResponseStatus(streamingResult),
15748
15812
  responseText: getResultResponseText(streamingResult),
@@ -15777,7 +15841,7 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
15777
15841
  method: "POST",
15778
15842
  path: "/v1/chat/completions",
15779
15843
  model: nonStreamingResult.model ?? displayName,
15780
- sessionId: null,
15844
+ sessionId: providerSessionId,
15781
15845
  rawRequestBody: requestBody,
15782
15846
  responseStatus: getResultResponseStatus(nonStreamingResult),
15783
15847
  responseText: getResultResponseText(nonStreamingResult),
@@ -15805,7 +15869,7 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
15805
15869
  method: "POST",
15806
15870
  path: "/v1/chat/completions",
15807
15871
  model: streamingResult.model ?? displayName,
15808
- sessionId: null,
15872
+ sessionId: providerSessionId,
15809
15873
  rawRequestBody: streamingRequestBody,
15810
15874
  responseStatus: getResultResponseStatus(streamingResult),
15811
15875
  responseText: getResultResponseText(streamingResult),
@@ -15851,6 +15915,7 @@ const Route$2 = createFileRoute("/api/providers/$providerId/test/log")({
15851
15915
  );
15852
15916
  }
15853
15917
  const results = parsed.data;
15918
+ const providerSessionId = buildProviderTestSessionId(params.providerId);
15854
15919
  const captureFullDetails = getConfig().captureMode === "full";
15855
15920
  const anthropicUrl = provider.anthropicBaseUrl !== void 0 && provider.anthropicBaseUrl.length > 0 ? provider.anthropicBaseUrl : void 0;
15856
15921
  const openaiUrl = provider.openaiBaseUrl !== void 0 && provider.openaiBaseUrl.length > 0 ? provider.openaiBaseUrl : void 0;
@@ -15861,6 +15926,7 @@ const Route$2 = createFileRoute("/api/providers/$providerId/test/log")({
15861
15926
  logModelResults(
15862
15927
  modelName,
15863
15928
  provider.name,
15929
+ providerSessionId,
15864
15930
  anthropicUrl,
15865
15931
  openaiUrl,
15866
15932
  modelResult,
@@ -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-DpD1N0S8.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-CI1-G8ua.js", "/assets/ProxyViewerContainer-h851qWNp.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-DWePGjnS.js", "/assets/ProxyViewerContainer-h851qWNp.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-DpD1N0S8.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-aCAKYGSD.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-Bt0Az2I2.js", "/assets/ProxyViewerContainer-DLqClc9A.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-DUSalzKH.js", "/assets/ProxyViewerContainer-DLqClc9A.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-aCAKYGSD.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };