@tonyclaw/agent-inspector 2.1.10 → 2.1.12
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/cli.js +14676 -399
- package/.output/nitro.json +1 -1
- package/.output/public/assets/{CompareDrawer-BaGKK2R7.js → CompareDrawer-XTdSOto9.js} +1 -1
- package/.output/public/assets/{ProxyViewerContainer-Cxwizw8H.js → ProxyViewerContainer-Cc944N8i.js} +19 -19
- package/.output/public/assets/{ReplayDialog-Io8Ufsif.js → ReplayDialog-Cd1VsfRe.js} +1 -1
- package/.output/public/assets/{RequestAnatomy-CiZE_fKZ.js → RequestAnatomy-QxSpbmsj.js} +1 -1
- package/.output/public/assets/{ResponseView-TJwxn-lh.js → ResponseView-8GivXCzp.js} +1 -1
- package/.output/public/assets/{StreamingChunkSequence-D-9ysFSG.js → StreamingChunkSequence-CwNGqJ5n.js} +1 -1
- package/.output/public/assets/_sessionId-D89uDTQs.js +1 -0
- package/.output/public/assets/index-BsFdgXac.js +1 -0
- package/.output/public/assets/{main-JvXpk_ov.js → main-B_EcGyf-.js} +2 -2
- package/.output/server/{_sessionId-DSZ76cjr.mjs → _sessionId-CmO9read.mjs} +2 -2
- package/.output/server/_ssr/{CompareDrawer-BcUJ7lNL.mjs → CompareDrawer-D9wf870o.mjs} +2 -2
- package/.output/server/_ssr/{ProxyViewerContainer-DEtSh7OB.mjs → ProxyViewerContainer-BDLJSawP.mjs} +49 -30
- package/.output/server/_ssr/{ReplayDialog-DwSynSXP.mjs → ReplayDialog-B2dS4kmP.mjs} +3 -3
- package/.output/server/_ssr/{RequestAnatomy-C6LGadAw.mjs → RequestAnatomy-k49Peshi.mjs} +2 -2
- package/.output/server/_ssr/{ResponseView-Dr27DXbx.mjs → ResponseView-Bk3B1suu.mjs} +2 -2
- package/.output/server/_ssr/{StreamingChunkSequence-CDTaUWjj.mjs → StreamingChunkSequence-D6MDGCgh.mjs} +2 -2
- package/.output/server/_ssr/{index-D803rHfz.mjs → index-CC8KdlTb.mjs} +2 -2
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{router-D7dDibPa.mjs → router-BEmMnVa7.mjs} +213 -28
- package/.output/server/{_tanstack-start-manifest_v-P9lKyaOf.mjs → _tanstack-start-manifest_v-Bf_4hG4w.mjs} +1 -1
- package/.output/server/index.mjs +55 -55
- package/package.json +1 -1
- package/src/cli.ts +107 -2
- package/src/components/proxy-viewer/ConversationGroup.tsx +22 -2
- package/src/components/proxy-viewer/LogEntryHeader.tsx +35 -29
- package/src/proxy/identityProxy.ts +192 -0
- package/src/proxy/socketTracker.ts +222 -24
- package/.output/public/assets/_sessionId-3JCekYV3.js +0 -1
- package/.output/public/assets/index-B3EOwfg7.js +0 -1
package/.output/server/_ssr/{ProxyViewerContainer-DEtSh7OB.mjs → ProxyViewerContainer-BDLJSawP.mjs}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports, a as React } from "../_libs/react.mjs";
|
|
2
|
-
import { I as InspectorGroupsListResponseSchema, C as CapturedLogSchema, D as DEFAULT_CAPTURE_MODE, a as DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS, b as DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS, c as DEFAULT_TIME_DISPLAY_FORMAT, d as RuntimeConfigSchema, p as packageJson, P as ProviderConfigSchema, g as apiFormatForPath, l as GroupEvidenceExportResultSchema, m as DeleteInspectorGroupResponseSchema, r as createPendingProviderTestResults, t as ProviderTestResultsSchema, u as createFailedProviderTestResults, M as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, v as MAX_PROVIDER_TEST_TIMEOUT_SECONDS, T as TimeDisplayFormatSchema, h as getSessionPath, f as parseOpenAIResponse, O as OpenAIRequestSchema, A as AnthropicResponseSchema$1, e as AnthropicRequestSchema, s as safeGetOwnProperty, w as resolveProviderContextWindow, j as AlertSummarySchema, k as AlertListResponseSchema, G as GroupEvidenceReadResponseSchema, q as maskApiKey, n as providerHasContextMetadata, o as findProviderModelMetadata, K as KnowledgeCandidateSchema, i as stripClaudeCodeBillingHeader, L as LogBodyChunkSchema, x as isPlainRecord } from "./router-
|
|
2
|
+
import { I as InspectorGroupsListResponseSchema, C as CapturedLogSchema, D as DEFAULT_CAPTURE_MODE, a as DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS, b as DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS, c as DEFAULT_TIME_DISPLAY_FORMAT, d as RuntimeConfigSchema, p as packageJson, P as ProviderConfigSchema, g as apiFormatForPath, l as GroupEvidenceExportResultSchema, m as DeleteInspectorGroupResponseSchema, r as createPendingProviderTestResults, t as ProviderTestResultsSchema, u as createFailedProviderTestResults, M as MAX_SLOW_RESPONSE_THRESHOLD_SECONDS, v as MAX_PROVIDER_TEST_TIMEOUT_SECONDS, T as TimeDisplayFormatSchema, h as getSessionPath, f as parseOpenAIResponse, O as OpenAIRequestSchema, A as AnthropicResponseSchema$1, e as AnthropicRequestSchema, s as safeGetOwnProperty, w as resolveProviderContextWindow, j as AlertSummarySchema, k as AlertListResponseSchema, G as GroupEvidenceReadResponseSchema, q as maskApiKey, n as providerHasContextMetadata, o as findProviderModelMetadata, K as KnowledgeCandidateSchema, i as stripClaudeCodeBillingHeader, L as LogBodyChunkSchema, x as isPlainRecord } from "./router-BEmMnVa7.mjs";
|
|
3
3
|
import { u as useSWR, a as useSWRConfig } from "../_libs/swr.mjs";
|
|
4
4
|
import { J as JSZip } from "../_libs/jszip.mjs";
|
|
5
5
|
import { c as clsx } from "../_libs/clsx.mjs";
|
|
@@ -1961,19 +1961,19 @@ function useCopyFeedback(text) {
|
|
|
1961
1961
|
return { copied, copy };
|
|
1962
1962
|
}
|
|
1963
1963
|
const LazyCompareDrawer = reactExports.lazy(
|
|
1964
|
-
() => import("./CompareDrawer-
|
|
1964
|
+
() => import("./CompareDrawer-D9wf870o.mjs").then((m) => ({ default: m.CompareDrawer }))
|
|
1965
1965
|
);
|
|
1966
1966
|
const LazyReplayDialog = reactExports.lazy(
|
|
1967
|
-
() => import("./ReplayDialog-
|
|
1967
|
+
() => import("./ReplayDialog-B2dS4kmP.mjs").then((m) => ({ default: m.ReplayDialog }))
|
|
1968
1968
|
);
|
|
1969
1969
|
const LazyRequestAnatomy = reactExports.lazy(
|
|
1970
|
-
() => import("./RequestAnatomy-
|
|
1970
|
+
() => import("./RequestAnatomy-k49Peshi.mjs").then((m) => ({ default: m.RequestAnatomy }))
|
|
1971
1971
|
);
|
|
1972
1972
|
const LazyResponseView = reactExports.lazy(
|
|
1973
|
-
() => import("./ResponseView-
|
|
1973
|
+
() => import("./ResponseView-Bk3B1suu.mjs").then((m) => ({ default: m.ResponseView }))
|
|
1974
1974
|
);
|
|
1975
1975
|
const LazyStreamingChunkSequence = reactExports.lazy(
|
|
1976
|
-
() => import("./StreamingChunkSequence-
|
|
1976
|
+
() => import("./StreamingChunkSequence-D6MDGCgh.mjs").then((m) => ({
|
|
1977
1977
|
default: m.StreamingChunkSequence
|
|
1978
1978
|
}))
|
|
1979
1979
|
);
|
|
@@ -2453,6 +2453,9 @@ const LogEntryHeader = reactExports.memo(function({
|
|
|
2453
2453
|
const firstChunkLabel = firstChunkMs === null ? null : formatElapsed$3(firstChunkMs);
|
|
2454
2454
|
const tokenRateLabel = tokensPerSecond === null || tokensPerSecond <= 0 ? null : formatTokenRate$1(tokensPerSecond);
|
|
2455
2455
|
const warningCount = log.warnings?.length ?? 0;
|
|
2456
|
+
const hasClientPid = log.clientPid !== null && log.clientPid !== void 0;
|
|
2457
|
+
const hasClientProjectFolder = log.clientProjectFolder !== null && log.clientProjectFolder !== void 0 && log.clientProjectFolder !== "";
|
|
2458
|
+
const hasClientCwd = log.clientCwd !== null && log.clientCwd !== void 0 && log.clientCwd !== "";
|
|
2456
2459
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2457
2460
|
"div",
|
|
2458
2461
|
{
|
|
@@ -2511,25 +2514,23 @@ const LogEntryHeader = reactExports.memo(function({
|
|
|
2511
2514
|
) }),
|
|
2512
2515
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: warningCount === 1 ? "1 tool schema warning" : `${warningCount} tool schema warnings` })
|
|
2513
2516
|
] }),
|
|
2514
|
-
log.elapsedMs !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
|
|
2515
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
2516
|
-
"
|
|
2517
|
-
{
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
2530
|
-
|
|
2531
|
-
)}` : log.streaming ? "Total streaming response time" : "Elapsed response time" })
|
|
2532
|
-
] }),
|
|
2517
|
+
log.elapsedMs !== null && (isSlowResponse ? /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
|
|
2518
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1 text-xs text-amber-400 shrink-0", children: [
|
|
2519
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "size-3" }),
|
|
2520
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: formatElapsed$3(log.elapsedMs) }),
|
|
2521
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(TriangleAlert, { className: "size-3", "aria-label": "Slow response" })
|
|
2522
|
+
] }) }),
|
|
2523
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(TooltipContent, { children: [
|
|
2524
|
+
"Slow response: ",
|
|
2525
|
+
formatElapsed$3(log.elapsedMs),
|
|
2526
|
+
" exceeds",
|
|
2527
|
+
" ",
|
|
2528
|
+
formatElapsed$3(slowResponseThresholdSeconds * 1e3)
|
|
2529
|
+
] })
|
|
2530
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1 text-xs text-muted-foreground shrink-0", children: [
|
|
2531
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "size-3" }),
|
|
2532
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: formatElapsed$3(log.elapsedMs) })
|
|
2533
|
+
] })),
|
|
2533
2534
|
log.streaming && firstChunkLabel !== null && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
|
|
2534
2535
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1 text-xs text-cyan-400 shrink-0", children: [
|
|
2535
2536
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Radio, { className: "size-3" }),
|
|
@@ -2612,15 +2613,15 @@ const LogEntryHeader = reactExports.memo(function({
|
|
|
2612
2613
|
]
|
|
2613
2614
|
}
|
|
2614
2615
|
),
|
|
2615
|
-
(
|
|
2616
|
+
(hasClientPid || hasClientProjectFolder) && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
|
|
2616
2617
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "hidden xl:flex items-center gap-1 text-purple-400/80 text-xs shrink-0", children: [
|
|
2617
2618
|
/* @__PURE__ */ jsxRuntimeExports.jsx(FileTerminal, { className: "size-3" }),
|
|
2618
|
-
|
|
2619
|
+
hasClientProjectFolder ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: log.clientProjectFolder }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums", children: [
|
|
2619
2620
|
"PID ",
|
|
2620
2621
|
log.clientPid
|
|
2621
2622
|
] })
|
|
2622
2623
|
] }) }),
|
|
2623
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children:
|
|
2624
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: hasClientCwd ? `PID: ${log.clientPid ?? "?"} CWD: ${log.clientCwd}` : `Process ID: ${log.clientPid ?? "?"}` })
|
|
2624
2625
|
] }),
|
|
2625
2626
|
log.streaming && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
|
|
2626
2627
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Radio, { className: "size-3 text-muted-foreground/60 shrink-0" }) }),
|
|
@@ -5605,6 +5606,22 @@ function collectProviders(logs) {
|
|
|
5605
5606
|
models: [...models]
|
|
5606
5607
|
}));
|
|
5607
5608
|
}
|
|
5609
|
+
function getFirstClientPid(logs) {
|
|
5610
|
+
for (const log of logs) {
|
|
5611
|
+
const pid = log.clientPid;
|
|
5612
|
+
if (pid !== null && pid !== void 0) return pid;
|
|
5613
|
+
}
|
|
5614
|
+
return null;
|
|
5615
|
+
}
|
|
5616
|
+
function getFirstClientProjectFolder(logs) {
|
|
5617
|
+
for (const log of logs) {
|
|
5618
|
+
const projectFolder = log.clientProjectFolder;
|
|
5619
|
+
if (projectFolder !== null && projectFolder !== void 0 && projectFolder !== "") {
|
|
5620
|
+
return projectFolder;
|
|
5621
|
+
}
|
|
5622
|
+
}
|
|
5623
|
+
return null;
|
|
5624
|
+
}
|
|
5608
5625
|
const ConversationGroup = reactExports.memo(function({
|
|
5609
5626
|
group,
|
|
5610
5627
|
viewMode = "simple",
|
|
@@ -5638,6 +5655,8 @@ const ConversationGroup = reactExports.memo(function({
|
|
|
5638
5655
|
const endTime = group.logs[group.logs.length - 1]?.timestamp ?? (/* @__PURE__ */ new Date()).toISOString();
|
|
5639
5656
|
const isLoading = group.logs.some((log) => log.responseStatus === null);
|
|
5640
5657
|
const showTraceRollupMetrics = standalone && !hasPinnedSessionContext;
|
|
5658
|
+
const clientPid = reactExports.useMemo(() => getFirstClientPid(group.logs), [group.logs]);
|
|
5659
|
+
const clientProjectFolder = reactExports.useMemo(() => getFirstClientProjectFolder(group.logs), [group.logs]);
|
|
5641
5660
|
const turnGroups = reactExports.useMemo(() => buildTurnGroups(group.logs), [group.logs]);
|
|
5642
5661
|
reactExports.useEffect(() => {
|
|
5643
5662
|
const handleLogFocusRequest = (event) => {
|
|
@@ -5667,8 +5686,8 @@ const ConversationGroup = reactExports.memo(function({
|
|
|
5667
5686
|
providers,
|
|
5668
5687
|
isLoading,
|
|
5669
5688
|
userAgent: group.logs[0]?.userAgent ?? null,
|
|
5670
|
-
clientPid
|
|
5671
|
-
clientProjectFolder
|
|
5689
|
+
clientPid,
|
|
5690
|
+
clientProjectFolder,
|
|
5672
5691
|
timeDisplayFormat,
|
|
5673
5692
|
onClear: () => onClearGroup(group.logs.map((l) => l.id))
|
|
5674
5693
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
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-BDLJSawP.mjs";
|
|
3
|
+
import { ResponseView } from "./ResponseView-Bk3B1suu.mjs";
|
|
4
|
+
import { C as CapturedLogSchema } from "./router-BEmMnVa7.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
7
7
|
import { a3 as RotateCcw, an as Braces, ao as Minimize2 } from "../_libs/lucide-react.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { u as useProviders, s as analyzeContextIntelligence, f as formatTokens, m as TooltipProvider, c as cn, n as Tooltip, o as TooltipTrigger, p as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, t as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-
|
|
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-BDLJSawP.mjs";
|
|
3
|
+
import "./router-BEmMnVa7.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import { I as Info, C as ChevronDown, f as ChevronRight } from "../_libs/lucide-react.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
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 JsonViewer, F as safeJsonValue } from "./ProxyViewerContainer-
|
|
3
|
-
import "./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 JsonViewer, F as safeJsonValue } from "./ProxyViewerContainer-BDLJSawP.mjs";
|
|
3
|
+
import "./router-BEmMnVa7.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import { Z as Zap, r as TriangleAlert, ap as CircleStop, B as Brain, C as ChevronDown, f as ChevronRight, m as Terminal } from "../_libs/lucide-react.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
-
import { m as TooltipProvider, n as Tooltip, o as TooltipTrigger, B as Badge, p as TooltipContent, E as JsonViewer } from "./ProxyViewerContainer-
|
|
3
|
-
import "./router-
|
|
2
|
+
import { m as TooltipProvider, n as Tooltip, o as TooltipTrigger, B as Badge, p as TooltipContent, E as JsonViewer } from "./ProxyViewerContainer-BDLJSawP.mjs";
|
|
3
|
+
import "./router-BEmMnVa7.mjs";
|
|
4
4
|
import "../_libs/modelcontextprotocol__server.mjs";
|
|
5
5
|
import "../_libs/jszip.mjs";
|
|
6
6
|
import { C as ChevronDown, f as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { P as ProxyViewerContainer } from "./ProxyViewerContainer-
|
|
1
|
+
import { P as ProxyViewerContainer } from "./ProxyViewerContainer-BDLJSawP.mjs";
|
|
2
2
|
import "../_libs/react.mjs";
|
|
3
|
-
import "./router-
|
|
3
|
+
import "./router-BEmMnVa7.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-Bf_4hG4w.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-BEmMnVa7.mjs").then((n) => n.y);
|
|
780
780
|
const startEntry = await import("./start-HYkvq4Ni.mjs");
|
|
781
781
|
return { startEntry, routerEntry };
|
|
782
782
|
}
|
|
@@ -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-CC8KdlTb.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-CmO9read.mjs");
|
|
155
155
|
const Route$B = createFileRoute("/session/$sessionId")({
|
|
156
156
|
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
157
157
|
parseParams: (params) => ({
|
|
@@ -5150,10 +5150,14 @@ function findProviderByModel(model) {
|
|
|
5150
5150
|
}
|
|
5151
5151
|
const execAsync = promisify(exec);
|
|
5152
5152
|
const execFileAsync = promisify(execFile);
|
|
5153
|
+
const cache = /* @__PURE__ */ new Map();
|
|
5154
|
+
const CACHE_TTL_MS = 5 * 60 * 1e3;
|
|
5155
|
+
const MAX_CACHE_SIZE = 200;
|
|
5153
5156
|
const RemotePortSchema = number().int().min(1).max(65535);
|
|
5154
|
-
object({
|
|
5157
|
+
const SocketSchema = object({
|
|
5155
5158
|
remotePort: RemotePortSchema.nullish()
|
|
5156
5159
|
}).passthrough();
|
|
5160
|
+
const inflight = /* @__PURE__ */ new Map();
|
|
5157
5161
|
const RECENT_CLIENT_TTL_MS = 1e3;
|
|
5158
5162
|
let recentInflight = null;
|
|
5159
5163
|
let recentCache = null;
|
|
@@ -5178,6 +5182,58 @@ function setRecentClientCache(info) {
|
|
|
5178
5182
|
recentCache = info;
|
|
5179
5183
|
recentCacheExpiresAt = Date.now() + RECENT_CLIENT_TTL_MS;
|
|
5180
5184
|
}
|
|
5185
|
+
function evictCacheIfNeeded() {
|
|
5186
|
+
while (cache.size > MAX_CACHE_SIZE) {
|
|
5187
|
+
const oldestKey = cache.keys().next().value;
|
|
5188
|
+
if (oldestKey === void 0) break;
|
|
5189
|
+
cache.delete(oldestKey);
|
|
5190
|
+
}
|
|
5191
|
+
}
|
|
5192
|
+
function getFromCache(port) {
|
|
5193
|
+
const entry = cache.get(port);
|
|
5194
|
+
if (entry && Date.now() < entry.expiresAt) {
|
|
5195
|
+
return { port: entry.port, pid: entry.pid, cwd: entry.cwd, projectFolder: entry.projectFolder };
|
|
5196
|
+
}
|
|
5197
|
+
if (entry) cache.delete(port);
|
|
5198
|
+
return null;
|
|
5199
|
+
}
|
|
5200
|
+
function setCache(port, info) {
|
|
5201
|
+
cache.set(port, { ...info, expiresAt: Date.now() + CACHE_TTL_MS });
|
|
5202
|
+
evictCacheIfNeeded();
|
|
5203
|
+
}
|
|
5204
|
+
function extractRemotePort(request) {
|
|
5205
|
+
const candidateSockets = [];
|
|
5206
|
+
const requestAsUnknown = request;
|
|
5207
|
+
const ctx = pick(requestAsUnknown, "context");
|
|
5208
|
+
const nitro = pick(ctx, "nitro");
|
|
5209
|
+
const node = pick(nitro, "node");
|
|
5210
|
+
const innerReq = pick(node, "req");
|
|
5211
|
+
const sock = pick(innerReq, "socket") ?? pick(innerReq, "connection");
|
|
5212
|
+
if (sock !== void 0) candidateSockets.push(sock);
|
|
5213
|
+
const descriptor = Object.getOwnPropertyDescriptor(request, "socket");
|
|
5214
|
+
if (descriptor !== void 0 && descriptor.get === void 0) {
|
|
5215
|
+
candidateSockets.push(descriptor.value);
|
|
5216
|
+
}
|
|
5217
|
+
const directSocket = pick(requestAsUnknown, "socket");
|
|
5218
|
+
if (directSocket !== void 0) candidateSockets.push(directSocket);
|
|
5219
|
+
const directConnection = pick(requestAsUnknown, "connection");
|
|
5220
|
+
if (directConnection !== void 0) candidateSockets.push(directConnection);
|
|
5221
|
+
for (const candidate of candidateSockets) {
|
|
5222
|
+
const parsed = SocketSchema.safeParse(candidate);
|
|
5223
|
+
if (!parsed.success) continue;
|
|
5224
|
+
const remotePort = parsed.data.remotePort;
|
|
5225
|
+
if (remotePort === void 0 || remotePort === null) continue;
|
|
5226
|
+
return remotePort;
|
|
5227
|
+
}
|
|
5228
|
+
return null;
|
|
5229
|
+
}
|
|
5230
|
+
function isObject(value) {
|
|
5231
|
+
return value !== void 0 && value !== null && typeof value === "object";
|
|
5232
|
+
}
|
|
5233
|
+
function pick(value, key) {
|
|
5234
|
+
if (!isObject(value)) return void 0;
|
|
5235
|
+
return value[key];
|
|
5236
|
+
}
|
|
5181
5237
|
function parseCommandLine(commandLine, sep) {
|
|
5182
5238
|
if (!commandLine) return { cwd: null, projectFolder: null };
|
|
5183
5239
|
const exeMatch = commandLine.match(/^"([^"]+)"/) || commandLine.match(/^([^\s]+)/);
|
|
@@ -5244,31 +5300,19 @@ async function lookupRecentClient() {
|
|
|
5244
5300
|
const platform = process.platform;
|
|
5245
5301
|
try {
|
|
5246
5302
|
if (platform === "win32") {
|
|
5247
|
-
const
|
|
5248
|
-
|
|
5249
|
-
|
|
5250
|
-
|
|
5251
|
-
|
|
5252
|
-
|
|
5253
|
-
|
|
5254
|
-
].join("; ");
|
|
5255
|
-
const { stdout: stdout2 } = await execFileAsync(
|
|
5256
|
-
"powershell.exe",
|
|
5257
|
-
["-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-Command", psScript],
|
|
5258
|
-
{ windowsHide: true, timeout: 3e3, maxBuffer: 16 * 1024 }
|
|
5259
|
-
);
|
|
5260
|
-
const trimmed = stdout2.trim();
|
|
5261
|
-
if (trimmed === "") return { port: null, pid: null, cwd: null, projectFolder: null };
|
|
5262
|
-
const [pidStr, portStr] = trimmed.split("|");
|
|
5263
|
-
const pid = parseInt(pidStr ?? "", 10);
|
|
5264
|
-
const clientPort = parseInt(portStr ?? "", 10);
|
|
5265
|
-
if (!Number.isInteger(pid) || pid <= 0) {
|
|
5303
|
+
const { stdout: stdout2 } = await execFileAsync("netstat.exe", ["-ano", "-p", "TCP"], {
|
|
5304
|
+
windowsHide: true,
|
|
5305
|
+
timeout: 2e3,
|
|
5306
|
+
maxBuffer: 2 * 1024 * 1024
|
|
5307
|
+
});
|
|
5308
|
+
const client = pickNewestClientFromWindowsNetstat(stdout2.split("\n"), port);
|
|
5309
|
+
if (client === null) {
|
|
5266
5310
|
return { port: null, pid: null, cwd: null, projectFolder: null };
|
|
5267
5311
|
}
|
|
5268
|
-
const { cwd: cwd2, projectFolder: projectFolder2 } = await lookupProcessInfo(pid);
|
|
5312
|
+
const { cwd: cwd2, projectFolder: projectFolder2 } = await lookupProcessInfo(client.pid);
|
|
5269
5313
|
return {
|
|
5270
|
-
port:
|
|
5271
|
-
pid,
|
|
5314
|
+
port: client.localPort,
|
|
5315
|
+
pid: client.pid,
|
|
5272
5316
|
cwd: cwd2,
|
|
5273
5317
|
projectFolder: projectFolder2
|
|
5274
5318
|
};
|
|
@@ -5313,6 +5357,39 @@ function pickNewestClientPidFromNetstat(lines, proxyPort) {
|
|
|
5313
5357
|
candidates2.sort((a, b) => b.localPort - a.localPort || b.order - a.order);
|
|
5314
5358
|
return candidates2[0]?.pid ?? null;
|
|
5315
5359
|
}
|
|
5360
|
+
function parseAddressPort(address) {
|
|
5361
|
+
const match = address.match(/:(\d+)$/);
|
|
5362
|
+
if (match === null) return null;
|
|
5363
|
+
const parsed = parseInt(match[1] ?? "", 10);
|
|
5364
|
+
if (!Number.isInteger(parsed) || parsed <= 0 || parsed > 65535) return null;
|
|
5365
|
+
return parsed;
|
|
5366
|
+
}
|
|
5367
|
+
function pickNewestClientFromWindowsNetstat(lines, proxyPort) {
|
|
5368
|
+
const proxyToken = `:${proxyPort}`;
|
|
5369
|
+
const candidates2 = [];
|
|
5370
|
+
let order = 0;
|
|
5371
|
+
for (const line of lines) {
|
|
5372
|
+
order++;
|
|
5373
|
+
const cols = line.trim().split(/\s+/);
|
|
5374
|
+
if (cols.length < 5) continue;
|
|
5375
|
+
const localAddr = cols[1] ?? "";
|
|
5376
|
+
const remoteAddr = cols[2] ?? "";
|
|
5377
|
+
const state = cols[3] ?? "";
|
|
5378
|
+
const pidStr = cols[4] ?? "";
|
|
5379
|
+
if (state !== "ESTABLISHED") continue;
|
|
5380
|
+
if (!remoteAddr.endsWith(proxyToken)) continue;
|
|
5381
|
+
const localPort = parseAddressPort(localAddr);
|
|
5382
|
+
if (localPort === null || localPort === proxyPort) continue;
|
|
5383
|
+
const pid = parseInt(pidStr, 10);
|
|
5384
|
+
if (!Number.isInteger(pid) || pid <= 0) continue;
|
|
5385
|
+
candidates2.push({ pid, localPort, order });
|
|
5386
|
+
}
|
|
5387
|
+
if (candidates2.length === 0) return null;
|
|
5388
|
+
candidates2.sort((a, b) => b.localPort - a.localPort || b.order - a.order);
|
|
5389
|
+
const selected = candidates2[0];
|
|
5390
|
+
if (selected === void 0) return null;
|
|
5391
|
+
return { pid: selected.pid, localPort: selected.localPort };
|
|
5392
|
+
}
|
|
5316
5393
|
const CLIENT_HEADERS = {
|
|
5317
5394
|
pid: "x-agent-inspector-client-pid",
|
|
5318
5395
|
port: "x-agent-inspector-client-port",
|
|
@@ -5342,6 +5419,31 @@ function readClientHeaders(request) {
|
|
|
5342
5419
|
async function getClientInfo(request) {
|
|
5343
5420
|
const fromHeaders = readClientHeaders(request);
|
|
5344
5421
|
if (fromHeaders !== null) return fromHeaders;
|
|
5422
|
+
const remotePort = extractRemotePort(request);
|
|
5423
|
+
if (remotePort !== null) {
|
|
5424
|
+
const cachedPort = getFromCache(remotePort);
|
|
5425
|
+
if (cachedPort !== null) return cachedPort;
|
|
5426
|
+
const existingPortLookup = inflight.get(remotePort);
|
|
5427
|
+
if (existingPortLookup !== void 0) return existingPortLookup;
|
|
5428
|
+
const portLookup = lookupClientByPort(remotePort).then((info) => {
|
|
5429
|
+
setCache(remotePort, info);
|
|
5430
|
+
inflight.delete(remotePort);
|
|
5431
|
+
return info;
|
|
5432
|
+
}).catch((err) => {
|
|
5433
|
+
inflight.delete(remotePort);
|
|
5434
|
+
logger.debug(`[socketTracker] Remote-port lookup failed for ${remotePort}:`, String(err));
|
|
5435
|
+
const fallback = {
|
|
5436
|
+
port: remotePort,
|
|
5437
|
+
pid: null,
|
|
5438
|
+
cwd: null,
|
|
5439
|
+
projectFolder: null
|
|
5440
|
+
};
|
|
5441
|
+
setCache(remotePort, fallback);
|
|
5442
|
+
return fallback;
|
|
5443
|
+
});
|
|
5444
|
+
inflight.set(remotePort, portLookup);
|
|
5445
|
+
return portLookup;
|
|
5446
|
+
}
|
|
5345
5447
|
const cached = getRecentClientFromCache();
|
|
5346
5448
|
if (cached !== null) return cached;
|
|
5347
5449
|
const existing = recentInflight;
|
|
@@ -5358,6 +5460,89 @@ async function getClientInfo(request) {
|
|
|
5358
5460
|
recentInflight = promise;
|
|
5359
5461
|
return promise;
|
|
5360
5462
|
}
|
|
5463
|
+
const PORT_LOOKUP_TTL_MS = 5 * 60 * 1e3;
|
|
5464
|
+
const portInfoCache = /* @__PURE__ */ new Map();
|
|
5465
|
+
async function lookupClientByPort(clientPort) {
|
|
5466
|
+
if (!Number.isInteger(clientPort) || clientPort <= 0 || clientPort > 65535) {
|
|
5467
|
+
return { port: null, pid: null, cwd: null, projectFolder: null };
|
|
5468
|
+
}
|
|
5469
|
+
const cached = portInfoCache.get(clientPort);
|
|
5470
|
+
if (cached !== void 0 && Date.now() < cached.expiresAt) {
|
|
5471
|
+
return cached.info;
|
|
5472
|
+
}
|
|
5473
|
+
try {
|
|
5474
|
+
const pid = await lookupPidByLocalPort(clientPort);
|
|
5475
|
+
if (pid === null) {
|
|
5476
|
+
const fallback = {
|
|
5477
|
+
port: clientPort,
|
|
5478
|
+
pid: null,
|
|
5479
|
+
cwd: null,
|
|
5480
|
+
projectFolder: null
|
|
5481
|
+
};
|
|
5482
|
+
portInfoCache.set(clientPort, { info: fallback, expiresAt: Date.now() + PORT_LOOKUP_TTL_MS });
|
|
5483
|
+
return fallback;
|
|
5484
|
+
}
|
|
5485
|
+
const { cwd, projectFolder } = await lookupProcessInfo(pid);
|
|
5486
|
+
const info = { port: clientPort, pid, cwd, projectFolder };
|
|
5487
|
+
portInfoCache.set(clientPort, { info, expiresAt: Date.now() + PORT_LOOKUP_TTL_MS });
|
|
5488
|
+
return info;
|
|
5489
|
+
} catch (err) {
|
|
5490
|
+
logger.debug(`[socketTracker] lookupClientByPort(${clientPort}) failed:`, String(err));
|
|
5491
|
+
return { port: clientPort, pid: null, cwd: null, projectFolder: null };
|
|
5492
|
+
}
|
|
5493
|
+
}
|
|
5494
|
+
async function lookupPidByLocalPort(clientPort) {
|
|
5495
|
+
const platform = process.platform;
|
|
5496
|
+
try {
|
|
5497
|
+
if (platform === "win32") {
|
|
5498
|
+
const { stdout } = await execAsync(
|
|
5499
|
+
`netstat -ano | findstr :${clientPort} | findstr ESTABLISHED`,
|
|
5500
|
+
{ shell: "cmd.exe", timeout: 2e3, windowsHide: true }
|
|
5501
|
+
);
|
|
5502
|
+
const clientToken = `:${clientPort}`;
|
|
5503
|
+
for (const rawLine of stdout.split("\n")) {
|
|
5504
|
+
const line = rawLine.trim();
|
|
5505
|
+
if (line === "") continue;
|
|
5506
|
+
const cols = line.split(/\s+/);
|
|
5507
|
+
if (cols.length < 5) continue;
|
|
5508
|
+
const localAddr = cols[1] ?? "";
|
|
5509
|
+
if (!localAddr.endsWith(clientToken)) continue;
|
|
5510
|
+
const pidStr = cols[cols.length - 1] ?? "";
|
|
5511
|
+
const parsed = parseInt(pidStr, 10);
|
|
5512
|
+
if (Number.isInteger(parsed) && parsed > 0) return parsed;
|
|
5513
|
+
}
|
|
5514
|
+
return null;
|
|
5515
|
+
}
|
|
5516
|
+
try {
|
|
5517
|
+
const { stdout } = await execAsync(
|
|
5518
|
+
`ss -tanp state established 'sport = :${clientPort}' 2>/dev/null | tail -n +2 | head -n 1`,
|
|
5519
|
+
{ shell: "/bin/sh" }
|
|
5520
|
+
);
|
|
5521
|
+
const match = stdout.match(/pid=(\d+)/);
|
|
5522
|
+
if (match !== null) {
|
|
5523
|
+
const parsed = parseInt(match[1] ?? "", 10);
|
|
5524
|
+
if (Number.isInteger(parsed) && parsed > 0) return parsed;
|
|
5525
|
+
}
|
|
5526
|
+
} catch {
|
|
5527
|
+
}
|
|
5528
|
+
try {
|
|
5529
|
+
const { stdout } = await execAsync(
|
|
5530
|
+
`lsof -ti tcp:${clientPort} -sTCP:ESTABLISHED 2>/dev/null`,
|
|
5531
|
+
{
|
|
5532
|
+
shell: "/bin/sh"
|
|
5533
|
+
}
|
|
5534
|
+
);
|
|
5535
|
+
const trimmed = stdout.trim().split("\n")[0] ?? "";
|
|
5536
|
+
const parsed = parseInt(trimmed, 10);
|
|
5537
|
+
if (Number.isInteger(parsed) && parsed > 0) return parsed;
|
|
5538
|
+
} catch {
|
|
5539
|
+
}
|
|
5540
|
+
return null;
|
|
5541
|
+
} catch (err) {
|
|
5542
|
+
logger.debug(`[socketTracker] lookupPidByLocalPort(${clientPort}) failed:`, String(err));
|
|
5543
|
+
return null;
|
|
5544
|
+
}
|
|
5545
|
+
}
|
|
5361
5546
|
const DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS = 10;
|
|
5362
5547
|
const MAX_SLOW_RESPONSE_THRESHOLD_SECONDS = 600;
|
|
5363
5548
|
const DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS = 60;
|
|
@@ -8362,7 +8547,7 @@ const Route$w = createFileRoute("/api/models")({
|
|
|
8362
8547
|
}
|
|
8363
8548
|
}
|
|
8364
8549
|
});
|
|
8365
|
-
const version = "2.1.
|
|
8550
|
+
const version = "2.1.12";
|
|
8366
8551
|
const packageJson = {
|
|
8367
8552
|
version
|
|
8368
8553
|
};
|
|
@@ -15211,11 +15396,11 @@ function outcomeFor(logs) {
|
|
|
15211
15396
|
if (hasPending) return "pending";
|
|
15212
15397
|
return "success";
|
|
15213
15398
|
}
|
|
15214
|
-
function latestPreview(logs,
|
|
15399
|
+
function latestPreview(logs, pick2) {
|
|
15215
15400
|
for (let i = logs.length - 1; i >= 0; i--) {
|
|
15216
15401
|
const log = logs[i];
|
|
15217
15402
|
if (log === void 0) continue;
|
|
15218
|
-
const preview =
|
|
15403
|
+
const preview = pick2(log);
|
|
15219
15404
|
if (preview !== null && preview !== "") {
|
|
15220
15405
|
return preview;
|
|
15221
15406
|
}
|
|
@@ -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-B_EcGyf-.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-BsFdgXac.js", "/assets/ProxyViewerContainer-Cc944N8i.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-D89uDTQs.js", "/assets/ProxyViewerContainer-Cc944N8i.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-B_EcGyf-.js" });
|
|
2
2
|
export {
|
|
3
3
|
tsrStartManifest
|
|
4
4
|
};
|