@tonyclaw/agent-inspector 2.0.30 → 2.0.32

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 (41) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-BDzfRSt1.js → CompareDrawer-Dgi0hhg5.js} +1 -1
  3. package/.output/public/assets/ProxyViewerContainer-4dG0nLRp.js +115 -0
  4. package/.output/public/assets/{ReplayDialog-p-5TKg75.js → ReplayDialog-BL6BwDuI.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-G0dV8-D_.js → RequestAnatomy-DZMmiIiD.js} +1 -1
  6. package/.output/public/assets/{ResponseView-D2wE6lD-.js → ResponseView-DJLOiTYq.js} +1 -1
  7. package/.output/public/assets/{StreamingChunkSequence-D8JRK-j_.js → StreamingChunkSequence--SxZ5cxc.js} +1 -1
  8. package/.output/public/assets/_sessionId-C4z6gu9i.js +1 -0
  9. package/.output/public/assets/index-Drpb2qR5.js +1 -0
  10. package/.output/public/assets/index-fUUi8iQF.css +1 -0
  11. package/.output/public/assets/{main-XHHZsOBK.js → main-CbRIHhJ5.js} +2 -2
  12. package/.output/server/_libs/lucide-react.mjs +160 -135
  13. package/.output/server/{_sessionId-CK9QEhkB.mjs → _sessionId-DNfumR8F.mjs} +2 -2
  14. package/.output/server/_ssr/{CompareDrawer-BJVPFMIx.mjs → CompareDrawer-CzgjhnUa.mjs} +3 -3
  15. package/.output/server/_ssr/{ProxyViewerContainer-DhbmJ2zj.mjs → ProxyViewerContainer-BqOcZ7en.mjs} +737 -17
  16. package/.output/server/_ssr/{ReplayDialog-DXRj95Gj.mjs → ReplayDialog-DmEknIL8.mjs} +4 -4
  17. package/.output/server/_ssr/{RequestAnatomy-CrYJTXdJ.mjs → RequestAnatomy-DNoiMudY.mjs} +3 -3
  18. package/.output/server/_ssr/{ResponseView-4ESqSITr.mjs → ResponseView-C_cRrleT.mjs} +3 -3
  19. package/.output/server/_ssr/{StreamingChunkSequence-Czdko5n_.mjs → StreamingChunkSequence-DHZ9Q_dL.mjs} +3 -3
  20. package/.output/server/_ssr/{index-bei0I7qL.mjs → index-coYS9XyS.mjs} +2 -2
  21. package/.output/server/_ssr/index.mjs +2 -2
  22. package/.output/server/_ssr/{router-sQh4Gk8J.mjs → router-DUb5lKw1.mjs} +174 -40
  23. package/.output/server/{_tanstack-start-manifest_v-C0fdSWnA.mjs → _tanstack-start-manifest_v-xcG1o8Vt.mjs} +1 -1
  24. package/.output/server/index.mjs +60 -60
  25. package/package.json +1 -1
  26. package/src/components/ProxyViewer.tsx +9 -2
  27. package/src/components/groups/GroupsDialog.tsx +945 -0
  28. package/src/lib/groupContract.ts +24 -2
  29. package/src/lib/runContract.ts +2 -0
  30. package/src/lib/useGroupEvidence.ts +33 -0
  31. package/src/lib/useGroups.ts +28 -0
  32. package/src/mcp/server.ts +20 -1
  33. package/src/mcp/toolHandlers.ts +22 -0
  34. package/src/proxy/groupEvidenceExporter.ts +13 -0
  35. package/src/proxy/groupStore.ts +52 -2
  36. package/src/routes/api/groups.$groupId.evidence.ts +14 -2
  37. package/src/routes/api/groups.$groupId.ts +38 -1
  38. package/.output/public/assets/ProxyViewerContainer-NtOD8Ex_.js +0 -115
  39. package/.output/public/assets/_sessionId-zimzVrJE.js +0 -1
  40. package/.output/public/assets/index-Cv5vPgpr.js +0 -1
  41. package/.output/public/assets/index-CwlHPmgL.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, b as DialogContent, d as DialogHeader, e as DialogTitle, T as Tabs, h as TabsList, i as TabsTrigger, j as TabsContent, k as Button, l as TooltipProvider, m as Tooltip, n as TooltipTrigger, o as TooltipContent, p as dispatchLogFocusRequest } from "./ProxyViewerContainer-DhbmJ2zj.mjs";
3
- import { ResponseView } from "./ResponseView-4ESqSITr.mjs";
4
- import { C as CapturedLogSchema } from "./router-sQh4Gk8J.mjs";
2
+ import { u as useProviders, D as Dialog, b as DialogContent, d as DialogHeader, e as DialogTitle, T as Tabs, h as TabsList, i as TabsTrigger, j as TabsContent, k as Button, l as TooltipProvider, m as Tooltip, n as TooltipTrigger, o as TooltipContent, p as dispatchLogFocusRequest } from "./ProxyViewerContainer-BqOcZ7en.mjs";
3
+ import { ResponseView } from "./ResponseView-C_cRrleT.mjs";
4
+ import { C as CapturedLogSchema } from "./router-DUb5lKw1.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import "../_libs/modelcontextprotocol__server.mjs";
7
- import { N as RotateCcw, ac as Braces, ad as Minimize2 } from "../_libs/lucide-react.mjs";
7
+ import { Q as RotateCcw, ad as Braces, ae as Minimize2 } from "../_libs/lucide-react.mjs";
8
8
  import { d as object, n as number, a as array, c as boolean, b as string } from "../_libs/zod.mjs";
9
9
  import "../_libs/swr.mjs";
10
10
  import "../_libs/use-sync-external-store.mjs";
@@ -1,9 +1,9 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { u as useProviders, q as analyzeContextIntelligence, f as formatTokens, l as TooltipProvider, c as cn, m as Tooltip, n as TooltipTrigger, o as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, s as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-DhbmJ2zj.mjs";
3
- import "./router-sQh4Gk8J.mjs";
2
+ import { u as useProviders, q as analyzeContextIntelligence, f as formatTokens, l as TooltipProvider, c as cn, m as Tooltip, n as TooltipTrigger, o as TooltipContent, S as SegmentBar, R as ROLE_COLOR_CLASSES, A as ANATOMY_ROLE_LABELS, s as formatContextWindowTokens, C as CONTEXT_USAGE_THRESHOLDS } from "./ProxyViewerContainer-BqOcZ7en.mjs";
3
+ import "./router-DUb5lKw1.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
- import { ae as Info, b as ChevronDown, i as ChevronRight } from "../_libs/lucide-react.mjs";
6
+ import { af as Info, c as ChevronDown, l 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, t as getStatusCategory, B as Badge, v as Collapsible, w as CollapsibleTrigger, x as CollapsibleContent, y as ScrollArea, z as JsonViewer, E as safeJsonValue } from "./ProxyViewerContainer-DhbmJ2zj.mjs";
3
- import "./router-sQh4Gk8J.mjs";
2
+ import { g as getLogFormatAdapter, f as formatTokens, c as cn, t as getStatusCategory, B as Badge, v as Collapsible, w as CollapsibleTrigger, x as CollapsibleContent, y as ScrollArea, z as JsonViewer, E as safeJsonValue } from "./ProxyViewerContainer-BqOcZ7en.mjs";
3
+ import "./router-DUb5lKw1.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
- import { Z as Zap, o as TriangleAlert, af as CircleStop, B as Brain, b as ChevronDown, i as ChevronRight, T as Terminal } from "../_libs/lucide-react.mjs";
6
+ import { Z as Zap, q as TriangleAlert, ag as CircleStop, B as Brain, c as ChevronDown, l as ChevronRight, f as Terminal } from "../_libs/lucide-react.mjs";
7
7
  import { M as Markdown } from "../_libs/react-markdown.mjs";
8
8
  import { R as Root } from "../_libs/radix-ui__react-separator.mjs";
9
9
  import "../_libs/swr.mjs";
@@ -1,9 +1,9 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { l as TooltipProvider, m as Tooltip, n as TooltipTrigger, B as Badge, o as TooltipContent, z as JsonViewer } from "./ProxyViewerContainer-DhbmJ2zj.mjs";
3
- import "./router-sQh4Gk8J.mjs";
2
+ import { l as TooltipProvider, m as Tooltip, n as TooltipTrigger, B as Badge, o as TooltipContent, z as JsonViewer } from "./ProxyViewerContainer-BqOcZ7en.mjs";
3
+ import "./router-DUb5lKw1.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
- import { b as ChevronDown, i as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
6
+ import { c as ChevronDown, l as ChevronRight, a 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-DhbmJ2zj.mjs";
1
+ import { P as ProxyViewerContainer } from "./ProxyViewerContainer-BqOcZ7en.mjs";
2
2
  import "../_libs/react.mjs";
3
- import "./router-sQh4Gk8J.mjs";
3
+ import "./router-DUb5lKw1.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-C0fdSWnA.mjs");
201
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-xcG1o8Vt.mjs");
202
202
  const startManifest = tsrStartManifest();
203
203
  const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
204
204
  rootRoute.assets = rootRoute.assets || [];
@@ -767,7 +767,7 @@ let entriesPromise;
767
767
  let baseManifestPromise;
768
768
  let cachedFinalManifestPromise;
769
769
  async function loadEntries() {
770
- const routerEntry = await import("./router-sQh4Gk8J.mjs").then((n) => n.t);
770
+ const routerEntry = await import("./router-DUb5lKw1.mjs").then((n) => n.w);
771
771
  const startEntry = await import("./start-HYkvq4Ni.mjs");
772
772
  return { startEntry, routerEntry };
773
773
  }
@@ -1,11 +1,11 @@
1
1
  import { c as createRouter, a as createRootRoute, b as createFileRoute, l as lazyRouteComponent, O as Outlet, H as HeadContent, S as Scripts } from "../_libs/tanstack__react-router.mjs";
2
2
  import { j as jsxRuntimeExports } from "../_libs/react.mjs";
3
3
  import { S as SWRConfig } from "../_libs/swr.mjs";
4
- import { existsSync, mkdirSync, writeFileSync, readFileSync, renameSync, copyFileSync, unlinkSync, createReadStream, readdirSync, statSync, cpSync, rmSync, createWriteStream } from "node:fs";
4
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, renameSync, copyFileSync, unlinkSync, createReadStream, readdirSync, statSync, rmSync, cpSync, createWriteStream } from "node:fs";
5
5
  import fs, { mkdir, appendFile, readFile, writeFile, readdir, open, stat, unlink, rename } from "node:fs/promises";
6
6
  import { createInterface } from "node:readline";
7
7
  import { Buffer } from "node:buffer";
8
- import path, { join, dirname, isAbsolute } from "node:path";
8
+ import path, { join, dirname, isAbsolute, resolve, relative } from "node:path";
9
9
  import { execFile, exec, spawn } from "node:child_process";
10
10
  import { fileURLToPath } from "node:url";
11
11
  import { C as Conf } from "../_libs/conf.mjs";
@@ -50,7 +50,7 @@ import "../_libs/mimic-function.mjs";
50
50
  import "../_libs/semver.mjs";
51
51
  import "../_libs/uint8array-extras.mjs";
52
52
  const faviconSvg = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2064%2064'%20role='img'%20aria-label='Agent%20Inspector'%3e%3crect%20width='64'%20height='64'%20rx='14'%20fill='%23111827'%20/%3e%3cg%20fill='none'%20stroke='%23f59e0b'%20stroke-width='4.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3e%3cpath%20fill='%23f59e0b'%20d='M15%2036c0-11%207-18%2017-18s17%207%2017%2018c0%208-7%2013-17%2013s-17-5-17-13z'%20/%3e%3cpath%20d='M16%2031c-6-5-12-3-12%204%200%205%206%206%2011%202'%20/%3e%3cpath%20d='M48%2031c6-5%2012-3%2012%204%200%205-6%206-11%202'%20/%3e%3cpath%20d='M27%2019l-3-7'%20/%3e%3cpath%20d='M37%2019l3-7'%20/%3e%3cpath%20d='M19%2045l-6%209'%20/%3e%3cpath%20d='M27%2048l-3%209'%20/%3e%3cpath%20d='M37%2048l3%209'%20/%3e%3cpath%20d='M45%2045l6%209'%20/%3e%3c/g%3e%3cpath%20d='M14%2047l9-8%208%209c-5%203.5-12%203-17-1z'%20fill='%232f6b3f'%20opacity='.95'%20/%3e%3cpath%20d='M18%2046l5-5%205%206c-3%201.6-7%201.4-10-1z'%20fill='%236fb36f'%20opacity='.95'%20/%3e%3cpath%20d='M23%2041v10'%20fill='none'%20stroke='%23d6b45f'%20stroke-width='1.6'%20stroke-linecap='round'%20/%3e%3ccircle%20cx='31'%20cy='48'%20r='1.8'%20fill='%23c2412d'%20/%3e%3cpath%20d='M24%2044l13-11%2014%2013c-8%205.8-18%205.3-27-2z'%20fill='%232f6b3f'%20opacity='.97'%20/%3e%3cpath%20d='M30%2043l7-7%209%209c-5%202.7-11%202.5-16-2z'%20fill='%236fb36f'%20opacity='.95'%20/%3e%3cpath%20d='M37%2036v14'%20fill='none'%20stroke='%23d6b45f'%20stroke-width='2'%20stroke-linecap='round'%20/%3e%3cpath%20d='M30%2043c5-2%2011-1.5%2016%202'%20fill='none'%20stroke='%239fca78'%20stroke-width='1.8'%20stroke-linecap='round'%20/%3e%3ccircle%20cx='51'%20cy='46'%20r='2'%20fill='%23c2412d'%20/%3e%3cpath%20d='M40%2050l8-8%207%208c-4.2%203.2-10%203-15%200z'%20fill='%232f6b3f'%20opacity='.95'%20/%3e%3cpath%20d='M43%2049l5-5%204.5%205.5c-3%201.5-6%201.2-9.5-.5z'%20fill='%236fb36f'%20opacity='.95'%20/%3e%3cpath%20d='M48%2044v9'%20fill='none'%20stroke='%23d6b45f'%20stroke-width='1.5'%20stroke-linecap='round'%20/%3e%3ccircle%20cx='55'%20cy='50'%20r='1.7'%20fill='%23c2412d'%20/%3e%3ccircle%20cx='24'%20cy='11'%20r='3.2'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='40'%20cy='11'%20r='3.2'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='25'%20cy='34'%20r='2.1'%20fill='%23111827'%20/%3e%3ccircle%20cx='39'%20cy='34'%20r='2.1'%20fill='%23111827'%20/%3e%3c/svg%3e";
53
- const appCss = "/assets/index-CwlHPmgL.css";
53
+ const appCss = "/assets/index-fUUi8iQF.css";
54
54
  const Route$z = createRootRoute({
55
55
  head: () => ({
56
56
  meta: [
@@ -93,7 +93,7 @@ function RootDocument({ children }) {
93
93
  ] })
94
94
  ] });
95
95
  }
96
- const $$splitComponentImporter$1 = () => import("./index-bei0I7qL.mjs");
96
+ const $$splitComponentImporter$1 = () => import("./index-coYS9XyS.mjs");
97
97
  const Route$y = createFileRoute("/")({
98
98
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
99
99
  });
@@ -136,7 +136,7 @@ function decodeSessionIdFromPath(encoded) {
136
136
  function getSessionPath(sessionId) {
137
137
  return `/session/${encodeSessionIdForPath(sessionId)}`;
138
138
  }
139
- const $$splitComponentImporter = () => import("../_sessionId-CK9QEhkB.mjs");
139
+ const $$splitComponentImporter = () => import("../_sessionId-DNfumR8F.mjs");
140
140
  const Route$x = createFileRoute("/session/$sessionId")({
141
141
  component: lazyRouteComponent($$splitComponentImporter, "component"),
142
142
  parseParams: (params) => ({
@@ -279,8 +279,8 @@ async function runWithLogWriteLock(fn) {
279
279
  const previousLock = logWriteLock;
280
280
  let releaseLock2 = () => {
281
281
  };
282
- logWriteLock = new Promise((resolve) => {
283
- releaseLock2 = resolve;
282
+ logWriteLock = new Promise((resolve2) => {
283
+ releaseLock2 = resolve2;
284
284
  });
285
285
  await previousLock;
286
286
  try {
@@ -996,22 +996,22 @@ let idGenerationPromise = null;
996
996
  let releaseLock = null;
997
997
  async function acquireLock() {
998
998
  if (releaseLock === null) {
999
- idGenerationPromise = new Promise((resolve) => {
1000
- releaseLock = resolve;
999
+ idGenerationPromise = new Promise((resolve2) => {
1000
+ releaseLock = resolve2;
1001
1001
  });
1002
1002
  } else {
1003
1003
  await idGenerationPromise;
1004
- idGenerationPromise = new Promise((resolve) => {
1005
- releaseLock = resolve;
1004
+ idGenerationPromise = new Promise((resolve2) => {
1005
+ releaseLock = resolve2;
1006
1006
  });
1007
1007
  }
1008
1008
  }
1009
1009
  function releaseLockFn() {
1010
1010
  if (releaseLock) {
1011
- const resolve = releaseLock;
1011
+ const resolve2 = releaseLock;
1012
1012
  releaseLock = null;
1013
1013
  idGenerationPromise = null;
1014
- resolve();
1014
+ resolve2();
1015
1015
  }
1016
1016
  }
1017
1017
  async function getNextLogId() {
@@ -1278,10 +1278,10 @@ class SessionProcess {
1278
1278
  return this.child;
1279
1279
  }
1280
1280
  enqueue(job) {
1281
- return new Promise((resolve, reject) => {
1281
+ return new Promise((resolve2, reject) => {
1282
1282
  const child = this.ensureRunning();
1283
1283
  const id = String(++this.nextId);
1284
- this.pending.set(id, { resolve, reject });
1284
+ this.pending.set(id, { resolve: resolve2, reject });
1285
1285
  child.send({ id, job });
1286
1286
  });
1287
1287
  }
@@ -2009,18 +2009,18 @@ async function removeTempFile(filePath) {
2009
2009
  }
2010
2010
  }
2011
2011
  function waitForWriterDrain(writer) {
2012
- return new Promise((resolve) => {
2012
+ return new Promise((resolve2) => {
2013
2013
  const cleanup = () => {
2014
2014
  writer.off("drain", onDrain);
2015
2015
  writer.off("error", onError);
2016
2016
  };
2017
2017
  const onDrain = () => {
2018
2018
  cleanup();
2019
- resolve(true);
2019
+ resolve2(true);
2020
2020
  };
2021
2021
  const onError = () => {
2022
2022
  cleanup();
2023
- resolve(false);
2023
+ resolve2(false);
2024
2024
  };
2025
2025
  writer.once("drain", onDrain);
2026
2026
  writer.once("error", onError);
@@ -2032,18 +2032,18 @@ async function writeKeptLogLine(writer, line) {
2032
2032
  return await waitForWriterDrain(writer);
2033
2033
  }
2034
2034
  function finishWriter(writer) {
2035
- return new Promise((resolve) => {
2035
+ return new Promise((resolve2) => {
2036
2036
  const cleanup = () => {
2037
2037
  writer.off("finish", onFinish);
2038
2038
  writer.off("error", onError);
2039
2039
  };
2040
2040
  const onFinish = () => {
2041
2041
  cleanup();
2042
- resolve(true);
2042
+ resolve2(true);
2043
2043
  };
2044
2044
  const onError = () => {
2045
2045
  cleanup();
2046
- resolve(false);
2046
+ resolve2(false);
2047
2047
  };
2048
2048
  writer.once("finish", onFinish);
2049
2049
  writer.once("error", onError);
@@ -4504,10 +4504,10 @@ function getWorkers() {
4504
4504
  for (let i = 0; i < WORKER_COUNT; i++) {
4505
4505
  const w = new Worker(new URL("./logFinalizer.worker.ts", import.meta.url));
4506
4506
  w.on("message", (msg) => {
4507
- const resolve = _pending.get(msg.id);
4508
- if (resolve !== void 0) {
4507
+ const resolve2 = _pending.get(msg.id);
4508
+ if (resolve2 !== void 0) {
4509
4509
  _pending.delete(msg.id);
4510
- resolve(msg.result);
4510
+ resolve2(msg.result);
4511
4511
  }
4512
4512
  });
4513
4513
  w.on("error", (err) => {
@@ -4521,14 +4521,14 @@ function getWorkers() {
4521
4521
  return _workers;
4522
4522
  }
4523
4523
  function executeBuildInWorker(job) {
4524
- return new Promise((resolve) => {
4524
+ return new Promise((resolve2) => {
4525
4525
  const list = getWorkers();
4526
4526
  const idx = _nextWorker % list.length;
4527
4527
  _nextWorker++;
4528
4528
  const w = list[idx];
4529
4529
  if (w === void 0) return;
4530
4530
  const id = String(++_jobSeq);
4531
- _pending.set(id, resolve);
4531
+ _pending.set(id, resolve2);
4532
4532
  w.postMessage({ id, job });
4533
4533
  });
4534
4534
  }
@@ -5111,6 +5111,7 @@ const JenkinsReportSchema = object({
5111
5111
  summary: string(),
5112
5112
  markdown: string()
5113
5113
  });
5114
+ const EvidenceReportSchema = JenkinsReportSchema;
5114
5115
  const InspectorRunSchema = object({
5115
5116
  id: string(),
5116
5117
  sessionId: string(),
@@ -5452,6 +5453,10 @@ const Route$s = createFileRoute("/api/models")({
5452
5453
  }
5453
5454
  }
5454
5455
  });
5456
+ const version = "2.0.32";
5457
+ const packageJson = {
5458
+ version
5459
+ };
5455
5460
  const InspectorGroupStatusSchema = _enum([
5456
5461
  "created",
5457
5462
  "running",
@@ -5528,6 +5533,15 @@ const GroupEvidenceExportOptionsSchema = object({
5528
5533
  includeHistory: boolean().optional(),
5529
5534
  latestLogLimit: number().int().positive().max(50).optional()
5530
5535
  }).optional();
5536
+ const DeleteInspectorGroupOptionsSchema = object({
5537
+ deleteEvidence: boolean().optional()
5538
+ });
5539
+ const DeleteInspectorGroupResponseSchema = object({
5540
+ groupId: string(),
5541
+ deleted: boolean(),
5542
+ evidenceDeleted: boolean(),
5543
+ evidencePath: string().nullable()
5544
+ });
5531
5545
  const InspectorGroupExportMemberSchema = object({
5532
5546
  member: InspectorGroupMemberSchema,
5533
5547
  run: InspectorRunSchema.nullable(),
@@ -5546,12 +5560,19 @@ const InspectorGroupEvidenceSummarySchema = object({
5546
5560
  failedMembers: number().int().nonnegative(),
5547
5561
  runningMembers: number().int().nonnegative()
5548
5562
  });
5563
+ const GroupEvidenceReadResponseSchema$1 = object({
5564
+ group: InspectorGroupSchema,
5565
+ evidence: InspectorGroupEvidenceSchema,
5566
+ markdown: string(),
5567
+ summary: InspectorGroupEvidenceSummarySchema.nullable(),
5568
+ report: EvidenceReportSchema.nullable()
5569
+ });
5549
5570
  const GroupEvidenceExportResultSchema = object({
5550
5571
  group: InspectorGroupSchema,
5551
5572
  evidence: InspectorGroupEvidenceSchema,
5552
5573
  members: array(InspectorGroupExportMemberSchema),
5553
5574
  summary: InspectorGroupEvidenceSummarySchema,
5554
- jenkinsReport: JenkinsReportSchema
5575
+ jenkinsReport: EvidenceReportSchema
5555
5576
  });
5556
5577
  const InspectorGroupsListResponseSchema = object({
5557
5578
  groups: array(InspectorGroupSchema)
@@ -6000,6 +6021,18 @@ async function updateGroupImpl(callApi2, args) {
6000
6021
  }
6001
6022
  return textJson(parsed.data);
6002
6023
  }
6024
+ async function deleteGroupImpl(callApi2, args) {
6025
+ const query = args.deleteEvidence === true ? "?deleteEvidence=1" : "";
6026
+ const path2 = `/api/groups/${encodeURIComponent(args.groupId)}${query}`;
6027
+ const res = await callApi2(path2, { method: "DELETE" });
6028
+ if (!res.ok) return toolError(`DELETE ${path2} returned ${res.status}`);
6029
+ const rawBody = await res.json();
6030
+ const parsed = DeleteInspectorGroupResponseSchema.safeParse(rawBody);
6031
+ if (!parsed.success) {
6032
+ return toolError("DELETE /api/groups/{groupId} returned an unparseable delete result");
6033
+ }
6034
+ return textJson(parsed.data);
6035
+ }
6003
6036
  async function addGroupSessionImpl(callApi2, args) {
6004
6037
  const { groupId, ...session } = args;
6005
6038
  const path2 = `/api/groups/${encodeURIComponent(groupId)}/sessions`;
@@ -6159,11 +6192,12 @@ async function safeCall(fn) {
6159
6192
  return toolError(`Tool execution failed: ${message}`);
6160
6193
  }
6161
6194
  }
6195
+ const MCP_SERVER_VERSION = packageJson.version;
6162
6196
  let initialized = null;
6163
6197
  let initPromise = null;
6164
6198
  function buildServer() {
6165
6199
  const server = new McpServer(
6166
- { name: "agent-inspector", version: "1.0.0" },
6200
+ { name: "agent-inspector", version: MCP_SERVER_VERSION },
6167
6201
  { capabilities: { tools: {}, resources: {}, prompts: {} } }
6168
6202
  );
6169
6203
  registerTools(server);
@@ -6586,6 +6620,17 @@ function registerTools(server) {
6586
6620
  },
6587
6621
  (args) => safeCall(() => updateGroupImpl(callApi, args))
6588
6622
  );
6623
+ server.registerTool(
6624
+ "inspector_delete_group",
6625
+ {
6626
+ title: "Delete an Inspector group",
6627
+ description: "Deletes one declared Inspector group from <dataDir>/groups.json. By default this keeps exported evidence files; set deleteEvidence=true only when the local evidence pack should also be removed.",
6628
+ inputSchema: DeleteInspectorGroupOptionsSchema.extend({
6629
+ groupId: string().min(1).describe("The Inspector group id.")
6630
+ })
6631
+ },
6632
+ (args) => safeCall(() => deleteGroupImpl(callApi, args))
6633
+ );
6589
6634
  server.registerTool(
6590
6635
  "inspector_add_group_session",
6591
6636
  {
@@ -7309,6 +7354,25 @@ function writeGroups(groups) {
7309
7354
  function sortedGroups(groups) {
7310
7355
  return [...groups].sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
7311
7356
  }
7357
+ function isPathInside(parentPath, childPath) {
7358
+ const relativePath = relative(parentPath, childPath);
7359
+ return relativePath === "" || relativePath.length > 0 && !relativePath.startsWith("..") && !isAbsolute(relativePath);
7360
+ }
7361
+ function evidenceDirectoryFor(group) {
7362
+ if (group.evidence === null) return null;
7363
+ const root = resolve(getDataDir(), "evidence", "groups");
7364
+ const evidenceDir2 = resolve(dirname(group.evidence.jsonPath));
7365
+ return isPathInside(root, evidenceDir2) ? evidenceDir2 : null;
7366
+ }
7367
+ function removeEvidenceDirectory(evidencePath, deleteEvidence) {
7368
+ if (!deleteEvidence || evidencePath === null || !existsSync(evidencePath)) return false;
7369
+ try {
7370
+ rmSync(evidencePath, { recursive: true, force: true });
7371
+ return !existsSync(evidencePath);
7372
+ } catch {
7373
+ return false;
7374
+ }
7375
+ }
7312
7376
  function listGroups() {
7313
7377
  return sortedGroups(readGroups());
7314
7378
  }
@@ -7362,6 +7426,20 @@ function updateGroup(groupId, input) {
7362
7426
  writeGroups(updatedGroups);
7363
7427
  return updatedGroup;
7364
7428
  }
7429
+ function deleteGroup(groupId, options = {}) {
7430
+ const parsed = DeleteInspectorGroupOptionsSchema.parse(options);
7431
+ const groups = readGroups();
7432
+ const group = groups.find((candidate) => candidate.id === groupId);
7433
+ if (group === void 0) return null;
7434
+ const evidencePath = evidenceDirectoryFor(group);
7435
+ writeGroups(groups.filter((candidate) => candidate.id !== groupId));
7436
+ return {
7437
+ groupId: group.id,
7438
+ deleted: true,
7439
+ evidenceDeleted: removeEvidenceDirectory(evidencePath, parsed.deleteEvidence === true),
7440
+ evidencePath
7441
+ };
7442
+ }
7365
7443
  function matchesExistingMember(member, memberId, sessionId, runId) {
7366
7444
  if (member.id === memberId) return true;
7367
7445
  if (member.sessionId !== sessionId) return false;
@@ -8561,8 +8639,8 @@ function buildOpenClawMemoryMarkdown(candidate) {
8561
8639
  function resolveTargetPath(workspaceDir, relativePath) {
8562
8640
  const root = path.resolve(workspaceDir);
8563
8641
  const target = path.resolve(root, relativePath);
8564
- const relative = path.relative(root, target);
8565
- if (relative.startsWith("..") || path.isAbsolute(relative)) {
8642
+ const relative2 = path.relative(root, target);
8643
+ if (relative2.startsWith("..") || path.isAbsolute(relative2)) {
8566
8644
  return null;
8567
8645
  }
8568
8646
  return target;
@@ -8822,6 +8900,25 @@ async function readJsonBody$3(request) {
8822
8900
  return { ok: false };
8823
8901
  }
8824
8902
  }
8903
+ function readDeleteEvidenceFlag(request) {
8904
+ try {
8905
+ const value = new URL(request.url).searchParams.get("deleteEvidence");
8906
+ switch (value) {
8907
+ case null:
8908
+ return { ok: true, value: void 0 };
8909
+ case "1":
8910
+ case "true":
8911
+ return { ok: true, value: true };
8912
+ case "0":
8913
+ case "false":
8914
+ return { ok: true, value: false };
8915
+ default:
8916
+ return { ok: false };
8917
+ }
8918
+ } catch {
8919
+ return { ok: false };
8920
+ }
8921
+ }
8825
8922
  const Route$c = createFileRoute("/api/groups/$groupId")({
8826
8923
  server: {
8827
8924
  handlers: {
@@ -8849,6 +8946,20 @@ const Route$c = createFileRoute("/api/groups/$groupId")({
8849
8946
  return Response.json({ error: "Group not found" }, { status: 404 });
8850
8947
  }
8851
8948
  return Response.json(updated);
8949
+ },
8950
+ DELETE: ({ params, request }) => {
8951
+ const deleteEvidence = readDeleteEvidenceFlag(request);
8952
+ if (!deleteEvidence.ok) {
8953
+ return Response.json(
8954
+ { error: "deleteEvidence must be one of true, false, 1, or 0" },
8955
+ { status: 400 }
8956
+ );
8957
+ }
8958
+ const deleted = deleteGroup(params.groupId, { deleteEvidence: deleteEvidence.value });
8959
+ if (deleted === null) {
8960
+ return Response.json({ error: "Group not found" }, { status: 404 });
8961
+ }
8962
+ return Response.json(deleted);
8852
8963
  }
8853
8964
  }
8854
8965
  }
@@ -10898,6 +11009,17 @@ function readGroupEvidenceMarkdown(group) {
10898
11009
  return null;
10899
11010
  }
10900
11011
  }
11012
+ function readGroupEvidenceDocument(group) {
11013
+ const path2 = group.evidence?.jsonPath;
11014
+ if (path2 === void 0 || !existsSync(path2)) return null;
11015
+ try {
11016
+ const raw = JSON.parse(readFileSync(path2, "utf8"));
11017
+ const parsed = GroupEvidenceExportResultSchema.safeParse(raw);
11018
+ return parsed.success ? parsed.data : null;
11019
+ } catch {
11020
+ return null;
11021
+ }
11022
+ }
10901
11023
  async function readJsonBody(request) {
10902
11024
  try {
10903
11025
  const raw = await request.text();
@@ -10922,7 +11044,14 @@ const Route$3 = createFileRoute("/api/groups/$groupId/evidence")({
10922
11044
  { status: 404 }
10923
11045
  );
10924
11046
  }
10925
- return Response.json({ group, evidence: group.evidence, markdown });
11047
+ const document = readGroupEvidenceDocument(group);
11048
+ return Response.json({
11049
+ group,
11050
+ evidence: group.evidence,
11051
+ markdown,
11052
+ summary: document?.summary ?? null,
11053
+ report: document?.jenkinsReport ?? null
11054
+ });
10926
11055
  },
10927
11056
  POST: async ({ params, request }) => {
10928
11057
  const group = getGroup(params.groupId);
@@ -11652,6 +11781,8 @@ export {
11652
11781
  AnthropicResponseSchema$1 as A,
11653
11782
  CapturedLogSchema as C,
11654
11783
  DEFAULT_CAPTURE_MODE as D,
11784
+ GroupEvidenceReadResponseSchema$1 as G,
11785
+ InspectorGroupsListResponseSchema as I,
11655
11786
  KnowledgeCandidateSchema as K,
11656
11787
  MAX_SLOW_RESPONSE_THRESHOLD_SECONDS as M,
11657
11788
  OpenAIRequestSchema as O,
@@ -11665,17 +11796,20 @@ export {
11665
11796
  AnthropicRequestSchema as e,
11666
11797
  stripClaudeCodeBillingHeader as f,
11667
11798
  getSessionPath as g,
11668
- providerHasContextMetadata as h,
11669
- findProviderModelMetadata as i,
11670
- createPendingProviderTestResults as j,
11671
- ProviderTestResultsSchema as k,
11672
- createFailedProviderTestResults as l,
11799
+ GroupEvidenceExportResultSchema as h,
11800
+ DeleteInspectorGroupResponseSchema as i,
11801
+ providerHasContextMetadata as j,
11802
+ findProviderModelMetadata as k,
11803
+ createPendingProviderTestResults as l,
11673
11804
  maskApiKey as m,
11674
- MAX_PROVIDER_TEST_TIMEOUT_SECONDS as n,
11675
- resolveProviderContextWindow as o,
11805
+ ProviderTestResultsSchema as n,
11806
+ createFailedProviderTestResults as o,
11676
11807
  parseOpenAIResponse as p,
11677
- isPlainRecord as q,
11808
+ MAX_PROVIDER_TEST_TIMEOUT_SECONDS as q,
11678
11809
  requestFormatForPath as r,
11679
11810
  safeGetOwnProperty as s,
11680
- router as t
11811
+ resolveProviderContextWindow as t,
11812
+ isPlainRecord as u,
11813
+ packageJson as v,
11814
+ router as w
11681
11815
  };
@@ -1,4 +1,4 @@
1
- const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/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-XHHZsOBK.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-Cv5vPgpr.js", "/assets/ProxyViewerContainer-NtOD8Ex_.js"] }, "/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/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-zimzVrJE.js", "/assets/ProxyViewerContainer-NtOD8Ex_.js"] }, "/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/chunks", "/api/logs/$id/replay"] }, "/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/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-XHHZsOBK.js" });
1
+ const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/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-CbRIHhJ5.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-Drpb2qR5.js", "/assets/ProxyViewerContainer-4dG0nLRp.js"] }, "/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/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-C4z6gu9i.js", "/assets/ProxyViewerContainer-4dG0nLRp.js"] }, "/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/chunks", "/api/logs/$id/replay"] }, "/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/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-CbRIHhJ5.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };