@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.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/{CompareDrawer-BcEd6V-V.js → CompareDrawer-Ccrrcx1j.js} +1 -1
- package/.output/public/assets/ProxyViewerContainer-DLqClc9A.js +106 -0
- package/.output/public/assets/{ReplayDialog-BNpC0548.js → ReplayDialog-C7axhr-l.js} +1 -1
- package/.output/public/assets/{RequestAnatomy-Ds1uRLVB.js → RequestAnatomy-WOptg8j_.js} +1 -1
- package/.output/public/assets/{ResponseView-7KPVqKl5.js → ResponseView-CSAcxh_M.js} +2 -2
- package/.output/public/assets/{StreamingChunkSequence-BHQT261s.js → StreamingChunkSequence-DJS5KhPx.js} +1 -1
- package/.output/public/assets/_sessionId-DUSalzKH.js +1 -0
- package/.output/public/assets/index-BPpA21dY.css +1 -0
- package/.output/public/assets/index-Bt0Az2I2.js +1 -0
- package/.output/public/assets/{index-DjKt8XKe.js → index-DMPNh46t.js} +1 -1
- package/.output/public/assets/{json-viewer-CkCu-rka.js → json-viewer-inX5QSa3.js} +1 -1
- package/.output/public/assets/{main-DpD1N0S8.js → main-aCAKYGSD.js} +2 -2
- package/.output/server/_libs/lucide-react.mjs +207 -171
- package/.output/server/{_sessionId-DF9Sy8cP.mjs → _sessionId-C0fhvQnn.mjs} +2 -2
- package/.output/server/_ssr/{CompareDrawer-BoxztaO7.mjs → CompareDrawer-CO-Ti5sg.mjs} +3 -3
- package/.output/server/_ssr/{ProxyViewerContainer-CRBkqFlJ.mjs → ProxyViewerContainer-N4J7uBCX.mjs} +807 -386
- package/.output/server/_ssr/{ReplayDialog-Cc1dyDuK.mjs → ReplayDialog-J1VxC0In.mjs} +4 -4
- package/.output/server/_ssr/{RequestAnatomy-CMGSsz5Z.mjs → RequestAnatomy-DBH-F3rq.mjs} +3 -3
- package/.output/server/_ssr/{ResponseView-Cp10DM1D.mjs → ResponseView-DLFwV7Hd.mjs} +3 -3
- package/.output/server/_ssr/{StreamingChunkSequence-B1VGxy3A.mjs → StreamingChunkSequence-BywmuND0.mjs} +3 -3
- package/.output/server/_ssr/{index-47XVPghS.mjs → index-CStymIc0.mjs} +2 -2
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{json-viewer-zDE2rrmJ.mjs → json-viewer-DlQu0N1x.mjs} +3 -3
- package/.output/server/_ssr/{router-DVeuZFqI.mjs → router-CQ4Zxhmr.mjs} +112 -46
- package/.output/server/{_tanstack-start-manifest_v-Bp8JxtPW.mjs → _tanstack-start-manifest_v-BHeJBGfo.mjs} +1 -1
- package/.output/server/index.mjs +72 -72
- package/package.json +1 -1
- package/src/components/ProxyViewer.tsx +146 -105
- package/src/components/ProxyViewerContainer.tsx +77 -67
- package/src/components/alerts/AlertsDialog.tsx +2 -1
- package/src/components/clients/ClientLogo.tsx +1 -1
- package/src/components/groups/GroupsDialog.tsx +19 -1
- package/src/components/providers/ProviderCard.tsx +1 -1
- package/src/components/providers/ProviderForm.tsx +18 -18
- package/src/components/providers/ProviderLogo.tsx +6 -1
- package/src/components/providers/ProvidersPanel.tsx +6 -6
- package/src/components/providers/SettingsDialog.tsx +13 -6
- package/src/components/proxy-viewer/AgentTraceSummary.tsx +6 -6
- package/src/components/proxy-viewer/ConversationGroup.tsx +43 -32
- package/src/components/proxy-viewer/ConversationGroupList.tsx +452 -89
- package/src/components/proxy-viewer/ConversationHeader.tsx +44 -32
- package/src/components/proxy-viewer/LogEntry.tsx +21 -17
- package/src/components/proxy-viewer/LogEntryHeader.tsx +38 -45
- package/src/components/proxy-viewer/ProviderLogoStack.tsx +2 -2
- package/src/components/proxy-viewer/RequestToolsPanel.tsx +9 -9
- package/src/components/proxy-viewer/ThreadConnector.tsx +4 -4
- package/src/components/proxy-viewer/TurnGroup.tsx +16 -11
- package/src/components/proxy-viewer/TurnGroupList.tsx +3 -0
- package/src/components/proxy-viewer/viewerState.ts +0 -4
- package/src/components/ui/icon-trigger.ts +2 -0
- package/src/components/ui/transient-toast.tsx +104 -0
- package/src/lib/sessionInfoContract.ts +4 -0
- package/src/mcp/server.ts +71 -27
- package/src/mcp/toolHandlers.ts +23 -4
- package/src/proxy/formats/openai/alibabaProvider.ts +0 -4
- package/src/proxy/sessionInfo.ts +31 -2
- package/src/proxy/sessionSupervisor.ts +20 -1
- package/src/proxy/store.ts +1 -1
- package/src/routes/api/providers.$providerId.test.log.ts +8 -4
- package/styles/globals.css +180 -180
- package/.output/public/assets/ProxyViewerContainer-h851qWNp.js +0 -106
- package/.output/public/assets/_sessionId-DWePGjnS.js +0 -1
- package/.output/public/assets/index-CI1-G8ua.js +0 -1
- 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-
|
|
3
|
-
import { ResponseView } from "./ResponseView-
|
|
4
|
-
import { C as CapturedLogSchema } from "./router-
|
|
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 {
|
|
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-
|
|
3
|
-
import "./router-
|
|
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,
|
|
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-
|
|
3
|
-
import { s as safeGetOwnProperty } from "./router-
|
|
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,
|
|
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-
|
|
3
|
-
import "./router-
|
|
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 {
|
|
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-
|
|
1
|
+
import { P as ProxyViewerContainer } from "./ProxyViewerContainer-N4J7uBCX.mjs";
|
|
2
2
|
import "../_libs/react.mjs";
|
|
3
|
-
import "./router-
|
|
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-
|
|
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-
|
|
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-
|
|
3
|
-
import "./router-
|
|
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 {
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
1981
|
-
|
|
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.
|
|
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(
|
|
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,
|
|
10983
|
-
inputSchema:
|
|
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.
|
|
11004
|
-
inputSchema:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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-
|
|
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
|
};
|