@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.
Files changed (31) hide show
  1. package/.output/cli.js +14676 -399
  2. package/.output/nitro.json +1 -1
  3. package/.output/public/assets/{CompareDrawer-BaGKK2R7.js → CompareDrawer-XTdSOto9.js} +1 -1
  4. package/.output/public/assets/{ProxyViewerContainer-Cxwizw8H.js → ProxyViewerContainer-Cc944N8i.js} +19 -19
  5. package/.output/public/assets/{ReplayDialog-Io8Ufsif.js → ReplayDialog-Cd1VsfRe.js} +1 -1
  6. package/.output/public/assets/{RequestAnatomy-CiZE_fKZ.js → RequestAnatomy-QxSpbmsj.js} +1 -1
  7. package/.output/public/assets/{ResponseView-TJwxn-lh.js → ResponseView-8GivXCzp.js} +1 -1
  8. package/.output/public/assets/{StreamingChunkSequence-D-9ysFSG.js → StreamingChunkSequence-CwNGqJ5n.js} +1 -1
  9. package/.output/public/assets/_sessionId-D89uDTQs.js +1 -0
  10. package/.output/public/assets/index-BsFdgXac.js +1 -0
  11. package/.output/public/assets/{main-JvXpk_ov.js → main-B_EcGyf-.js} +2 -2
  12. package/.output/server/{_sessionId-DSZ76cjr.mjs → _sessionId-CmO9read.mjs} +2 -2
  13. package/.output/server/_ssr/{CompareDrawer-BcUJ7lNL.mjs → CompareDrawer-D9wf870o.mjs} +2 -2
  14. package/.output/server/_ssr/{ProxyViewerContainer-DEtSh7OB.mjs → ProxyViewerContainer-BDLJSawP.mjs} +49 -30
  15. package/.output/server/_ssr/{ReplayDialog-DwSynSXP.mjs → ReplayDialog-B2dS4kmP.mjs} +3 -3
  16. package/.output/server/_ssr/{RequestAnatomy-C6LGadAw.mjs → RequestAnatomy-k49Peshi.mjs} +2 -2
  17. package/.output/server/_ssr/{ResponseView-Dr27DXbx.mjs → ResponseView-Bk3B1suu.mjs} +2 -2
  18. package/.output/server/_ssr/{StreamingChunkSequence-CDTaUWjj.mjs → StreamingChunkSequence-D6MDGCgh.mjs} +2 -2
  19. package/.output/server/_ssr/{index-D803rHfz.mjs → index-CC8KdlTb.mjs} +2 -2
  20. package/.output/server/_ssr/index.mjs +2 -2
  21. package/.output/server/_ssr/{router-D7dDibPa.mjs → router-BEmMnVa7.mjs} +213 -28
  22. package/.output/server/{_tanstack-start-manifest_v-P9lKyaOf.mjs → _tanstack-start-manifest_v-Bf_4hG4w.mjs} +1 -1
  23. package/.output/server/index.mjs +55 -55
  24. package/package.json +1 -1
  25. package/src/cli.ts +107 -2
  26. package/src/components/proxy-viewer/ConversationGroup.tsx +22 -2
  27. package/src/components/proxy-viewer/LogEntryHeader.tsx +35 -29
  28. package/src/proxy/identityProxy.ts +192 -0
  29. package/src/proxy/socketTracker.ts +222 -24
  30. package/.output/public/assets/_sessionId-3JCekYV3.js +0 -1
  31. package/.output/public/assets/index-B3EOwfg7.js +0 -1
@@ -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-D7dDibPa.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-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-BcUJ7lNL.mjs").then((m) => ({ default: m.CompareDrawer }))
1964
+ () => import("./CompareDrawer-D9wf870o.mjs").then((m) => ({ default: m.CompareDrawer }))
1965
1965
  );
1966
1966
  const LazyReplayDialog = reactExports.lazy(
1967
- () => import("./ReplayDialog-DwSynSXP.mjs").then((m) => ({ default: m.ReplayDialog }))
1967
+ () => import("./ReplayDialog-B2dS4kmP.mjs").then((m) => ({ default: m.ReplayDialog }))
1968
1968
  );
1969
1969
  const LazyRequestAnatomy = reactExports.lazy(
1970
- () => import("./RequestAnatomy-C6LGadAw.mjs").then((m) => ({ default: m.RequestAnatomy }))
1970
+ () => import("./RequestAnatomy-k49Peshi.mjs").then((m) => ({ default: m.RequestAnatomy }))
1971
1971
  );
1972
1972
  const LazyResponseView = reactExports.lazy(
1973
- () => import("./ResponseView-Dr27DXbx.mjs").then((m) => ({ default: m.ResponseView }))
1973
+ () => import("./ResponseView-Bk3B1suu.mjs").then((m) => ({ default: m.ResponseView }))
1974
1974
  );
1975
1975
  const LazyStreamingChunkSequence = reactExports.lazy(
1976
- () => import("./StreamingChunkSequence-CDTaUWjj.mjs").then((m) => ({
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
- "span",
2517
- {
2518
- className: cn(
2519
- "flex items-center gap-1 text-xs shrink-0",
2520
- isSlowResponse ? "text-amber-400" : "text-muted-foreground"
2521
- ),
2522
- children: [
2523
- /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "size-3" }),
2524
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: formatElapsed$3(log.elapsedMs) }),
2525
- isSlowResponse && /* @__PURE__ */ jsxRuntimeExports.jsx(TriangleAlert, { className: "size-3", "aria-label": "Slow response" })
2526
- ]
2527
- }
2528
- ) }),
2529
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: isSlowResponse ? `Slow response: ${formatElapsed$3(log.elapsedMs)} exceeds ${formatElapsed$3(
2530
- slowResponseThresholdSeconds * 1e3
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
- (log.clientPid !== null || log.clientProjectFolder !== null) && /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
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
- log.clientProjectFolder !== null ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono tabular-nums", children: log.clientProjectFolder }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-mono tabular-nums", children: [
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: log.clientCwd !== null ? `PID: ${log.clientPid ?? "?"} CWD: ${log.clientCwd}` : `Process ID: ${log.clientPid ?? "?"}` })
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: group.logs[0]?.clientPid ?? null,
5671
- clientProjectFolder: group.logs[0]?.clientProjectFolder ?? null,
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-DEtSh7OB.mjs";
3
- import { ResponseView } from "./ResponseView-Dr27DXbx.mjs";
4
- import { C as CapturedLogSchema } from "./router-D7dDibPa.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-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-DEtSh7OB.mjs";
3
- import "./router-D7dDibPa.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-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-DEtSh7OB.mjs";
3
- import "./router-D7dDibPa.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-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-DEtSh7OB.mjs";
3
- import "./router-D7dDibPa.mjs";
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-DEtSh7OB.mjs";
1
+ import { P as ProxyViewerContainer } from "./ProxyViewerContainer-BDLJSawP.mjs";
2
2
  import "../_libs/react.mjs";
3
- import "./router-D7dDibPa.mjs";
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-P9lKyaOf.mjs");
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-D7dDibPa.mjs").then((n) => n.y);
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-D803rHfz.mjs");
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-DSZ76cjr.mjs");
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 psScript = [
5248
- `$rows = Get-NetTCPConnection -RemotePort ${port} -State Established -ErrorAction SilentlyContinue`,
5249
- `if ($rows) {`,
5250
- ` $rows = $rows | Sort-Object CreationTime -Descending`,
5251
- ` $top = $rows | Select-Object -First 1`,
5252
- ` if ($top) { Write-Output ("$($top.OwningProcess)|$($top.LocalPort)") }`,
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: Number.isInteger(clientPort) && clientPort > 0 ? clientPort : null,
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.10";
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, pick) {
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 = pick(log);
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-JvXpk_ov.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-B3EOwfg7.js", "/assets/ProxyViewerContainer-Cxwizw8H.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-3JCekYV3.js", "/assets/ProxyViewerContainer-Cxwizw8H.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-JvXpk_ov.js" });
1
+ const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/api/alerts", "/api/config", "/api/groups", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/providers", "/api/runs", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-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
  };