@tonyclaw/agent-inspector 2.1.14 → 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-Ccrrcx1j.js +1 -0
- package/.output/public/assets/ProxyViewerContainer-DLqClc9A.js +106 -0
- package/.output/public/assets/ReplayDialog-C7axhr-l.js +1 -0
- package/.output/public/assets/{RequestAnatomy-BNahe83D.js → RequestAnatomy-WOptg8j_.js} +1 -1
- package/.output/public/assets/{ResponseView-DSOnGqi6.js → ResponseView-CSAcxh_M.js} +2 -2
- package/.output/public/assets/{StreamingChunkSequence-BEKTDklB.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-DWOkqdCa.js → index-DMPNh46t.js} +1 -1
- package/.output/public/assets/{json-viewer-C2JpgcW0.js → json-viewer-inX5QSa3.js} +1 -1
- package/.output/public/assets/{main-CSONBwwn.js → main-aCAKYGSD.js} +2 -2
- package/.output/server/_libs/lucide-react.mjs +224 -194
- package/.output/server/{_sessionId-CPAa37n5.mjs → _sessionId-C0fhvQnn.mjs} +2 -2
- package/.output/server/_ssr/{CompareDrawer-ceW5VxMo.mjs → CompareDrawer-CO-Ti5sg.mjs} +36 -15
- package/.output/server/_ssr/{ProxyViewerContainer-CDfEE_w-.mjs → ProxyViewerContainer-N4J7uBCX.mjs} +1153 -494
- package/.output/server/_ssr/{ReplayDialog-V0s_eEbR.mjs → ReplayDialog-J1VxC0In.mjs} +14 -7
- package/.output/server/_ssr/{RequestAnatomy-f1ccwR9d.mjs → RequestAnatomy-DBH-F3rq.mjs} +3 -3
- package/.output/server/_ssr/{ResponseView-BIRrqG4H.mjs → ResponseView-DLFwV7Hd.mjs} +3 -3
- package/.output/server/_ssr/{StreamingChunkSequence-V3JFjCgX.mjs → StreamingChunkSequence-BywmuND0.mjs} +3 -3
- package/.output/server/_ssr/{index-DsykulzS.mjs → index-CStymIc0.mjs} +2 -2
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{json-viewer-Dcnm0Ivf.mjs → json-viewer-DlQu0N1x.mjs} +3 -3
- package/.output/server/_ssr/{router-4bdm6Mt2.mjs → router-CQ4Zxhmr.mjs} +118 -47
- package/.output/server/{_tanstack-start-manifest_v-Xp4CO64V.mjs → _tanstack-start-manifest_v-BHeJBGfo.mjs} +1 -1
- package/.output/server/index.mjs +75 -75
- package/package.json +1 -1
- package/src/components/ProxyViewer.tsx +174 -107
- package/src/components/ProxyViewerContainer.tsx +77 -67
- package/src/components/alerts/AlertsDialog.tsx +2 -1
- package/src/components/clients/ClientLogo.tsx +132 -0
- package/src/components/groups/GroupsDialog.tsx +37 -14
- 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 +62 -29
- package/src/components/proxy-viewer/CompareDrawer.tsx +38 -8
- 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 +65 -61
- package/src/components/proxy-viewer/LogEntry.tsx +31 -18
- package/src/components/proxy-viewer/LogEntryHeader.tsx +42 -49
- package/src/components/proxy-viewer/ProviderLogoStack.tsx +60 -0
- package/src/components/proxy-viewer/ReplayDialog.tsx +8 -2
- package/src/components/proxy-viewer/RequestToolsPanel.tsx +9 -9
- package/src/components/proxy-viewer/ThreadConnector.tsx +22 -11
- package/src/components/proxy-viewer/TurnGroup.tsx +30 -36
- package/src/components/proxy-viewer/TurnGroupList.tsx +3 -0
- package/src/components/proxy-viewer/viewerState.ts +5 -6
- package/src/components/ui/icon-trigger.ts +2 -0
- package/src/components/ui/transient-toast.tsx +104 -0
- package/src/lib/sessionInfoContract.ts +5 -0
- package/src/lib/stopReason.ts +48 -16
- 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 +36 -3
- 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/CompareDrawer-DjgjIFx7.js +0 -1
- package/.output/public/assets/ProxyViewerContainer-CWUQZLYy.js +0 -106
- package/.output/public/assets/ReplayDialog-CU0Tbb2c.js +0 -1
- package/.output/public/assets/_sessionId-Cif8JZdn.js +0 -1
- package/.output/public/assets/index-D_WfwzUi.js +0 -1
- package/.output/public/assets/index-DtLuQrs0.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";
|
|
@@ -315,7 +315,12 @@ function ReplayComparisonTable({
|
|
|
315
315
|
))
|
|
316
316
|
] });
|
|
317
317
|
}
|
|
318
|
-
function ReplayDialog({
|
|
318
|
+
function ReplayDialog({
|
|
319
|
+
log,
|
|
320
|
+
displayNumber,
|
|
321
|
+
open,
|
|
322
|
+
onOpenChange
|
|
323
|
+
}) {
|
|
319
324
|
const { providers } = useProviders();
|
|
320
325
|
const originalBody = log.rawRequestBody ?? "{}";
|
|
321
326
|
const [modifiedBody, setModifiedBody] = reactExports.useState(() => {
|
|
@@ -442,8 +447,10 @@ function ReplayDialog({ log, open, onOpenChange }) {
|
|
|
442
447
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(Dialog, { open, onOpenChange: handleClose, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "max-w-4xl max-h-[85vh] overflow-auto", children: [
|
|
443
448
|
/* @__PURE__ */ jsxRuntimeExports.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogTitle, { className: "flex items-center gap-2", children: [
|
|
444
449
|
/* @__PURE__ */ jsxRuntimeExports.jsx(RotateCcw, { className: "size-4" }),
|
|
445
|
-
|
|
446
|
-
|
|
450
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { title: `Log ID ${String(log.id)}`, children: [
|
|
451
|
+
"Replay Request #",
|
|
452
|
+
displayNumber
|
|
453
|
+
] })
|
|
447
454
|
] }) }),
|
|
448
455
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(Tabs, { defaultValue: "modified", children: [
|
|
449
456
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(TabsList, { children: [
|
|
@@ -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) {
|
|
@@ -1943,6 +1967,10 @@ function buildSessionInfo(input) {
|
|
|
1943
1967
|
const inspectorPath = getSessionPath(input.sessionId);
|
|
1944
1968
|
const apiPath = buildApiPath(input.sessionId);
|
|
1945
1969
|
const compactLogsPath = buildCompactLogsPath(input.sessionId);
|
|
1970
|
+
const latestLogs = summaries.slice(0, latestLogLimit).map((summary, index) => ({
|
|
1971
|
+
...summary,
|
|
1972
|
+
sessionLogNumber: Math.max(1, requestCount - index)
|
|
1973
|
+
}));
|
|
1946
1974
|
return {
|
|
1947
1975
|
id: input.sessionId,
|
|
1948
1976
|
status: deriveSessionStatus({
|
|
@@ -1973,8 +2001,9 @@ function buildSessionInfo(input) {
|
|
|
1973
2001
|
tokenUsage,
|
|
1974
2002
|
lastLogId: input.snapshot?.lastLogId ?? latestLog?.id ?? null,
|
|
1975
2003
|
lastModel: normalizeString(input.snapshot?.lastModel) ?? latestLog?.model ?? null,
|
|
1976
|
-
|
|
1977
|
-
|
|
2004
|
+
clientUserAgent: firstSummaryUserAgent(summaries),
|
|
2005
|
+
clientPid: input.snapshot?.clientPid ?? firstSummaryClientPid(summaries),
|
|
2006
|
+
clientProjectFolder: normalizeString(input.snapshot?.clientProjectFolder) ?? firstSummaryProjectFolder(summaries),
|
|
1978
2007
|
inspectorPath,
|
|
1979
2008
|
inspectorUrl: buildAbsoluteUrl(input.baseUrl, inspectorPath),
|
|
1980
2009
|
apiPath,
|
|
@@ -1982,7 +2011,7 @@ function buildSessionInfo(input) {
|
|
|
1982
2011
|
compactLogsPath,
|
|
1983
2012
|
compactLogsUrl: buildAbsoluteUrl(input.baseUrl, compactLogsPath),
|
|
1984
2013
|
latestLogLimit,
|
|
1985
|
-
latestLogs
|
|
2014
|
+
latestLogs
|
|
1986
2015
|
};
|
|
1987
2016
|
}
|
|
1988
2017
|
const DEFAULT_UPSTREAM$1 = "https://api.anthropic.com";
|
|
@@ -2504,6 +2533,14 @@ function normalizeExplicitSessionId(sessionId) {
|
|
|
2504
2533
|
const trimmed = sessionId.trim();
|
|
2505
2534
|
return trimmed.length > 0 ? trimmed : null;
|
|
2506
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
|
+
}
|
|
2507
2544
|
function buildClientSessionId(clientInfo) {
|
|
2508
2545
|
const projectFolder = normalizeExplicitSessionId(clientInfo.projectFolder);
|
|
2509
2546
|
if (clientInfo.pid !== null) {
|
|
@@ -2521,10 +2558,16 @@ function buildClientSessionId(clientInfo) {
|
|
|
2521
2558
|
return { id: null, source: null };
|
|
2522
2559
|
}
|
|
2523
2560
|
function resolveSessionIdentity(input) {
|
|
2561
|
+
const explicit = normalizeExplicitSessionId(input.explicitSessionId);
|
|
2524
2562
|
if (input.isTest === true) {
|
|
2563
|
+
if (explicit !== null) {
|
|
2564
|
+
return {
|
|
2565
|
+
id: explicit,
|
|
2566
|
+
source: isProviderTestSessionId(explicit) ? "provider-test" : "explicit"
|
|
2567
|
+
};
|
|
2568
|
+
}
|
|
2525
2569
|
return { id: PROVIDER_TEST_SESSION_ID, source: "provider-test" };
|
|
2526
2570
|
}
|
|
2527
|
-
const explicit = normalizeExplicitSessionId(input.explicitSessionId);
|
|
2528
2571
|
if (explicit !== null) {
|
|
2529
2572
|
return { id: explicit, source: "explicit" };
|
|
2530
2573
|
}
|
|
@@ -4618,9 +4661,6 @@ const alibabaProvider = {
|
|
|
4618
4661
|
name: "alibaba",
|
|
4619
4662
|
matches(model) {
|
|
4620
4663
|
const m = model.toLowerCase().replace(/\s+/g, "-");
|
|
4621
|
-
if (m.startsWith("glm-5")) {
|
|
4622
|
-
return true;
|
|
4623
|
-
}
|
|
4624
4664
|
if (m.startsWith("qwen")) {
|
|
4625
4665
|
return true;
|
|
4626
4666
|
}
|
|
@@ -7483,6 +7523,7 @@ const SessionTokenUsageSchema = object({
|
|
|
7483
7523
|
});
|
|
7484
7524
|
const SessionLogSummarySchema = object({
|
|
7485
7525
|
id: number().int().positive(),
|
|
7526
|
+
sessionLogNumber: number().int().positive().optional(),
|
|
7486
7527
|
timestamp: string(),
|
|
7487
7528
|
provider: string().nullable(),
|
|
7488
7529
|
model: string().nullable(),
|
|
@@ -7503,7 +7544,10 @@ const SessionLogSummarySchema = object({
|
|
|
7503
7544
|
cacheCreate: number().nullable(),
|
|
7504
7545
|
cacheRead: number().nullable()
|
|
7505
7546
|
}),
|
|
7506
|
-
sessionId: string().nullable()
|
|
7547
|
+
sessionId: string().nullable(),
|
|
7548
|
+
userAgent: string().nullable().optional(),
|
|
7549
|
+
clientPid: number().nullable().optional(),
|
|
7550
|
+
clientProjectFolder: string().nullable().optional()
|
|
7507
7551
|
});
|
|
7508
7552
|
const SessionInfoSchema = object({
|
|
7509
7553
|
id: string(),
|
|
@@ -7527,6 +7571,7 @@ const SessionInfoSchema = object({
|
|
|
7527
7571
|
tokenUsage: SessionTokenUsageSchema,
|
|
7528
7572
|
lastLogId: number().nullable(),
|
|
7529
7573
|
lastModel: string().nullable(),
|
|
7574
|
+
clientUserAgent: string().nullable().optional(),
|
|
7530
7575
|
clientPid: number().nullable(),
|
|
7531
7576
|
clientProjectFolder: string().nullable(),
|
|
7532
7577
|
inspectorPath: string(),
|
|
@@ -8971,7 +9016,7 @@ const Route$w = createFileRoute("/api/models")({
|
|
|
8971
9016
|
}
|
|
8972
9017
|
}
|
|
8973
9018
|
});
|
|
8974
|
-
const version = "2.1.
|
|
9019
|
+
const version = "2.1.16";
|
|
8975
9020
|
const packageJson = {
|
|
8976
9021
|
version
|
|
8977
9022
|
};
|
|
@@ -9681,7 +9726,10 @@ function buildLogSummary(log) {
|
|
|
9681
9726
|
cacheRead: log.cacheReadInputTokens
|
|
9682
9727
|
},
|
|
9683
9728
|
sessionId: log.sessionId,
|
|
9729
|
+
userAgent: log.userAgent ?? null,
|
|
9684
9730
|
clientPid: log.clientPid ?? null,
|
|
9731
|
+
clientCwd: log.clientCwd ?? null,
|
|
9732
|
+
clientProjectFolder: log.clientProjectFolder ?? null,
|
|
9685
9733
|
lastUserMessagePreview: extractLastUserMessagePreview(log),
|
|
9686
9734
|
responsePreview: extractResponsePreview(log),
|
|
9687
9735
|
hasChunks: log.streamingChunks !== void 0 && log.streamingChunks !== null || log.streamingChunksPath !== null && log.streamingChunksPath !== void 0,
|
|
@@ -10051,21 +10099,31 @@ async function replayLogImpl(callApi2, args) {
|
|
|
10051
10099
|
}
|
|
10052
10100
|
return textJson(await replayRes.json());
|
|
10053
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
|
+
}
|
|
10054
10109
|
async function addProviderImpl(callApi2, provider) {
|
|
10110
|
+
const models = normalizedProviderModels(provider);
|
|
10055
10111
|
const res = await callApi2("/api/providers", {
|
|
10056
10112
|
method: "POST",
|
|
10057
10113
|
headers: { "content-type": "application/json" },
|
|
10058
|
-
body: JSON.stringify(provider)
|
|
10114
|
+
body: JSON.stringify({ ...provider, models })
|
|
10059
10115
|
});
|
|
10060
10116
|
if (!res.ok) return toolError(`POST /api/providers returned ${res.status}`);
|
|
10061
10117
|
return textJson(await res.json());
|
|
10062
10118
|
}
|
|
10063
10119
|
async function updateProviderImpl(callApi2, input) {
|
|
10064
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 };
|
|
10065
10123
|
const res = await callApi2(`/api/providers/${encodeURIComponent(id)}`, {
|
|
10066
10124
|
method: "PUT",
|
|
10067
10125
|
headers: { "content-type": "application/json" },
|
|
10068
|
-
body: JSON.stringify(
|
|
10126
|
+
body: JSON.stringify(body)
|
|
10069
10127
|
});
|
|
10070
10128
|
if (!res.ok) return toolError(`PUT /api/providers/${id} returned ${res.status}`);
|
|
10071
10129
|
return textJson(await res.json());
|
|
@@ -10297,13 +10355,46 @@ Parameters:
|
|
|
10297
10355
|
Returns: array of "thick summary" objects, each containing:
|
|
10298
10356
|
- id, timestamp, provider, model, apiFormat, method, path, status, isStreaming,
|
|
10299
10357
|
hasError, latencyMs, tokens { input, output, cacheCreate, cacheRead },
|
|
10300
|
-
sessionId, clientPid,
|
|
10358
|
+
sessionId, userAgent, clientPid, clientCwd, clientProjectFolder,
|
|
10301
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)
|
|
10302
10360
|
- responsePreview (string|null, ≤500 chars) — first text block of the assistant response
|
|
10303
10361
|
- hasChunks, hasRawRequestBody (booleans)
|
|
10304
10362
|
|
|
10305
10363
|
Either preview field is null when the body is unknown format, unparseable, or the relevant content is non-text (e.g., image-only).`;
|
|
10306
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
|
+
});
|
|
10307
10398
|
const LogResourceListResponseSchema = object({
|
|
10308
10399
|
logs: array(object({ id: number().int().positive() }))
|
|
10309
10400
|
});
|
|
@@ -10974,18 +11065,8 @@ function registerTools(server) {
|
|
|
10974
11065
|
title: "Add a new LLM provider",
|
|
10975
11066
|
description: `${PROVIDER_WRITE_WARNING}
|
|
10976
11067
|
|
|
10977
|
-
Persists a new provider to <dataDir>/providers.json. Required fields: name, apiKey,
|
|
10978
|
-
inputSchema:
|
|
10979
|
-
name: string().min(1),
|
|
10980
|
-
apiKey: string().min(1),
|
|
10981
|
-
format: _enum(["anthropic", "openai"]),
|
|
10982
|
-
model: string().min(1),
|
|
10983
|
-
anthropicBaseUrl: string().optional(),
|
|
10984
|
-
openaiBaseUrl: string().optional(),
|
|
10985
|
-
openaiResponsesBaseUrl: string().optional(),
|
|
10986
|
-
authHeader: _enum(["bearer", "x-api-key"]).optional(),
|
|
10987
|
-
apiDocsUrl: string().optional()
|
|
10988
|
-
})
|
|
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
|
|
10989
11070
|
},
|
|
10990
11071
|
(provider) => safeWriteCall("inspector_add_provider", () => addProviderImpl(callApi, provider))
|
|
10991
11072
|
);
|
|
@@ -10995,20 +11076,8 @@ Persists a new provider to <dataDir>/providers.json. Required fields: name, apiK
|
|
|
10995
11076
|
title: "Update an existing provider",
|
|
10996
11077
|
description: `${PROVIDER_WRITE_WARNING} Updating with nonsense values effectively soft-deletes a provider. Confirm with the user before invoking.
|
|
10997
11078
|
|
|
10998
|
-
PATCH-style update: only the fields you supply are changed.
|
|
10999
|
-
inputSchema:
|
|
11000
|
-
id: string().describe("The provider id to update."),
|
|
11001
|
-
name: string().min(1).optional(),
|
|
11002
|
-
apiKey: string().min(1).optional(),
|
|
11003
|
-
format: _enum(["anthropic", "openai"]).optional(),
|
|
11004
|
-
model: string().min(1).optional(),
|
|
11005
|
-
baseUrl: string().min(1).optional(),
|
|
11006
|
-
authHeader: _enum(["bearer", "x-api-key"]).optional(),
|
|
11007
|
-
anthropicBaseUrl: string().optional(),
|
|
11008
|
-
openaiBaseUrl: string().optional(),
|
|
11009
|
-
openaiResponsesBaseUrl: string().optional(),
|
|
11010
|
-
apiDocsUrl: string().optional()
|
|
11011
|
-
})
|
|
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
|
|
11012
11081
|
},
|
|
11013
11082
|
(input) => safeWriteCall("inspector_update_provider", () => updateProviderImpl(callApi, input))
|
|
11014
11083
|
);
|
|
@@ -15695,7 +15764,7 @@ function getResultTokensPerSecond(result) {
|
|
|
15695
15764
|
totalStreamMs: getResultTotalStreamMs(result)
|
|
15696
15765
|
});
|
|
15697
15766
|
}
|
|
15698
|
-
async function logModelResults(displayName, providerName, anthropicUrl, openaiUrl, modelResults, captureFullDetails) {
|
|
15767
|
+
async function logModelResults(displayName, providerName, providerSessionId, anthropicUrl, openaiUrl, modelResults, captureFullDetails) {
|
|
15699
15768
|
const usageModel = getModelUsageName(displayName, providerName);
|
|
15700
15769
|
if (anthropicUrl !== void 0) {
|
|
15701
15770
|
const nsResult = modelResults.anthropic.nonStreaming;
|
|
@@ -15709,7 +15778,7 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
|
|
|
15709
15778
|
method: "POST",
|
|
15710
15779
|
path: "/v1/messages",
|
|
15711
15780
|
model: nonStreamingResult.model ?? displayName,
|
|
15712
|
-
sessionId:
|
|
15781
|
+
sessionId: providerSessionId,
|
|
15713
15782
|
rawRequestBody: requestBody,
|
|
15714
15783
|
responseStatus: getResultResponseStatus(nonStreamingResult),
|
|
15715
15784
|
responseText: getResultResponseText(nonStreamingResult),
|
|
@@ -15737,7 +15806,7 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
|
|
|
15737
15806
|
method: "POST",
|
|
15738
15807
|
path: "/v1/messages",
|
|
15739
15808
|
model: streamingResult.model ?? displayName,
|
|
15740
|
-
sessionId:
|
|
15809
|
+
sessionId: providerSessionId,
|
|
15741
15810
|
rawRequestBody: streamingRequestBody,
|
|
15742
15811
|
responseStatus: getResultResponseStatus(streamingResult),
|
|
15743
15812
|
responseText: getResultResponseText(streamingResult),
|
|
@@ -15772,7 +15841,7 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
|
|
|
15772
15841
|
method: "POST",
|
|
15773
15842
|
path: "/v1/chat/completions",
|
|
15774
15843
|
model: nonStreamingResult.model ?? displayName,
|
|
15775
|
-
sessionId:
|
|
15844
|
+
sessionId: providerSessionId,
|
|
15776
15845
|
rawRequestBody: requestBody,
|
|
15777
15846
|
responseStatus: getResultResponseStatus(nonStreamingResult),
|
|
15778
15847
|
responseText: getResultResponseText(nonStreamingResult),
|
|
@@ -15800,7 +15869,7 @@ async function logModelResults(displayName, providerName, anthropicUrl, openaiUr
|
|
|
15800
15869
|
method: "POST",
|
|
15801
15870
|
path: "/v1/chat/completions",
|
|
15802
15871
|
model: streamingResult.model ?? displayName,
|
|
15803
|
-
sessionId:
|
|
15872
|
+
sessionId: providerSessionId,
|
|
15804
15873
|
rawRequestBody: streamingRequestBody,
|
|
15805
15874
|
responseStatus: getResultResponseStatus(streamingResult),
|
|
15806
15875
|
responseText: getResultResponseText(streamingResult),
|
|
@@ -15846,6 +15915,7 @@ const Route$2 = createFileRoute("/api/providers/$providerId/test/log")({
|
|
|
15846
15915
|
);
|
|
15847
15916
|
}
|
|
15848
15917
|
const results = parsed.data;
|
|
15918
|
+
const providerSessionId = buildProviderTestSessionId(params.providerId);
|
|
15849
15919
|
const captureFullDetails = getConfig().captureMode === "full";
|
|
15850
15920
|
const anthropicUrl = provider.anthropicBaseUrl !== void 0 && provider.anthropicBaseUrl.length > 0 ? provider.anthropicBaseUrl : void 0;
|
|
15851
15921
|
const openaiUrl = provider.openaiBaseUrl !== void 0 && provider.openaiBaseUrl.length > 0 ? provider.openaiBaseUrl : void 0;
|
|
@@ -15856,6 +15926,7 @@ const Route$2 = createFileRoute("/api/providers/$providerId/test/log")({
|
|
|
15856
15926
|
logModelResults(
|
|
15857
15927
|
modelName,
|
|
15858
15928
|
provider.name,
|
|
15929
|
+
providerSessionId,
|
|
15859
15930
|
anthropicUrl,
|
|
15860
15931
|
openaiUrl,
|
|
15861
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
|
};
|