@tonyclaw/agent-inspector 2.0.30 → 2.0.31

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 (38) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-BDzfRSt1.js → CompareDrawer-tIUf2EJm.js} +1 -1
  3. package/.output/public/assets/ProxyViewerContainer-BxRaXhKR.js +115 -0
  4. package/.output/public/assets/{ReplayDialog-p-5TKg75.js → ReplayDialog-D6v1xcuC.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-G0dV8-D_.js → RequestAnatomy-D6PniTlx.js} +1 -1
  6. package/.output/public/assets/{ResponseView-D2wE6lD-.js → ResponseView-Sx8PjuvU.js} +1 -1
  7. package/.output/public/assets/{StreamingChunkSequence-D8JRK-j_.js → StreamingChunkSequence-D-Rbfnxh.js} +1 -1
  8. package/.output/public/assets/_sessionId-BhNTuZ31.js +1 -0
  9. package/.output/public/assets/index-Byk60-jA.css +1 -0
  10. package/.output/public/assets/index-Kxptlkpg.js +1 -0
  11. package/.output/public/assets/{main-XHHZsOBK.js → main-B1kdhY98.js} +2 -2
  12. package/.output/server/_libs/lucide-react.mjs +159 -134
  13. package/.output/server/{_sessionId-CK9QEhkB.mjs → _sessionId-BceHFKf4.mjs} +2 -2
  14. package/.output/server/_ssr/{CompareDrawer-BJVPFMIx.mjs → CompareDrawer-uSxK5Ei5.mjs} +3 -3
  15. package/.output/server/_ssr/{ProxyViewerContainer-DhbmJ2zj.mjs → ProxyViewerContainer-_npQ_f2i.mjs} +566 -17
  16. package/.output/server/_ssr/{ReplayDialog-DXRj95Gj.mjs → ReplayDialog-BHAzSLCT.mjs} +4 -4
  17. package/.output/server/_ssr/{RequestAnatomy-CrYJTXdJ.mjs → RequestAnatomy-DjlZLXBd.mjs} +3 -3
  18. package/.output/server/_ssr/{ResponseView-4ESqSITr.mjs → ResponseView-BuDEJ3fl.mjs} +3 -3
  19. package/.output/server/_ssr/{StreamingChunkSequence-Czdko5n_.mjs → StreamingChunkSequence-DFcu0bD8.mjs} +3 -3
  20. package/.output/server/_ssr/{index-bei0I7qL.mjs → index-Bw6Fw33c.mjs} +2 -2
  21. package/.output/server/_ssr/index.mjs +2 -2
  22. package/.output/server/_ssr/{router-sQh4Gk8J.mjs → router-D90tMCb3.mjs} +50 -15
  23. package/.output/server/{_tanstack-start-manifest_v-C0fdSWnA.mjs → _tanstack-start-manifest_v-BVM4AUlx.mjs} +1 -1
  24. package/.output/server/index.mjs +56 -56
  25. package/package.json +1 -1
  26. package/src/components/ProxyViewer.tsx +9 -2
  27. package/src/components/groups/GroupsDialog.tsx +732 -0
  28. package/src/lib/groupContract.ts +11 -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 +4 -1
  33. package/src/proxy/groupEvidenceExporter.ts +13 -0
  34. package/src/routes/api/groups.$groupId.evidence.ts +14 -2
  35. package/.output/public/assets/ProxyViewerContainer-NtOD8Ex_.js +0 -115
  36. package/.output/public/assets/_sessionId-zimzVrJE.js +0 -1
  37. package/.output/public/assets/index-Cv5vPgpr.js +0 -1
  38. 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-_npQ_f2i.mjs";
3
+ import { ResponseView } from "./ResponseView-BuDEJ3fl.mjs";
4
+ import { C as CapturedLogSchema } from "./router-D90tMCb3.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-_npQ_f2i.mjs";
3
+ import "./router-D90tMCb3.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, k 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-_npQ_f2i.mjs";
3
+ import "./router-D90tMCb3.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, k as ChevronRight, T 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-_npQ_f2i.mjs";
3
+ import "./router-D90tMCb3.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, k 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-_npQ_f2i.mjs";
2
2
  import "../_libs/react.mjs";
3
- import "./router-sQh4Gk8J.mjs";
3
+ import "./router-D90tMCb3.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-BVM4AUlx.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-D90tMCb3.mjs").then((n) => n.v);
771
771
  const startEntry = await import("./start-HYkvq4Ni.mjs");
772
772
  return { startEntry, routerEntry };
773
773
  }
@@ -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-Byk60-jA.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-Bw6Fw33c.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-BceHFKf4.mjs");
140
140
  const Route$x = createFileRoute("/session/$sessionId")({
141
141
  component: lazyRouteComponent($$splitComponentImporter, "component"),
142
142
  parseParams: (params) => ({
@@ -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.31";
5457
+ const packageJson = {
5458
+ version
5459
+ };
5455
5460
  const InspectorGroupStatusSchema = _enum([
5456
5461
  "created",
5457
5462
  "running",
@@ -5546,12 +5551,19 @@ const InspectorGroupEvidenceSummarySchema = object({
5546
5551
  failedMembers: number().int().nonnegative(),
5547
5552
  runningMembers: number().int().nonnegative()
5548
5553
  });
5554
+ const GroupEvidenceReadResponseSchema$1 = object({
5555
+ group: InspectorGroupSchema,
5556
+ evidence: InspectorGroupEvidenceSchema,
5557
+ markdown: string(),
5558
+ summary: InspectorGroupEvidenceSummarySchema.nullable(),
5559
+ report: EvidenceReportSchema.nullable()
5560
+ });
5549
5561
  const GroupEvidenceExportResultSchema = object({
5550
5562
  group: InspectorGroupSchema,
5551
5563
  evidence: InspectorGroupEvidenceSchema,
5552
5564
  members: array(InspectorGroupExportMemberSchema),
5553
5565
  summary: InspectorGroupEvidenceSummarySchema,
5554
- jenkinsReport: JenkinsReportSchema
5566
+ jenkinsReport: EvidenceReportSchema
5555
5567
  });
5556
5568
  const InspectorGroupsListResponseSchema = object({
5557
5569
  groups: array(InspectorGroupSchema)
@@ -6159,11 +6171,12 @@ async function safeCall(fn) {
6159
6171
  return toolError(`Tool execution failed: ${message}`);
6160
6172
  }
6161
6173
  }
6174
+ const MCP_SERVER_VERSION = packageJson.version;
6162
6175
  let initialized = null;
6163
6176
  let initPromise = null;
6164
6177
  function buildServer() {
6165
6178
  const server = new McpServer(
6166
- { name: "agent-inspector", version: "1.0.0" },
6179
+ { name: "agent-inspector", version: MCP_SERVER_VERSION },
6167
6180
  { capabilities: { tools: {}, resources: {}, prompts: {} } }
6168
6181
  );
6169
6182
  registerTools(server);
@@ -10898,6 +10911,17 @@ function readGroupEvidenceMarkdown(group) {
10898
10911
  return null;
10899
10912
  }
10900
10913
  }
10914
+ function readGroupEvidenceDocument(group) {
10915
+ const path2 = group.evidence?.jsonPath;
10916
+ if (path2 === void 0 || !existsSync(path2)) return null;
10917
+ try {
10918
+ const raw = JSON.parse(readFileSync(path2, "utf8"));
10919
+ const parsed = GroupEvidenceExportResultSchema.safeParse(raw);
10920
+ return parsed.success ? parsed.data : null;
10921
+ } catch {
10922
+ return null;
10923
+ }
10924
+ }
10901
10925
  async function readJsonBody(request) {
10902
10926
  try {
10903
10927
  const raw = await request.text();
@@ -10922,7 +10946,14 @@ const Route$3 = createFileRoute("/api/groups/$groupId/evidence")({
10922
10946
  { status: 404 }
10923
10947
  );
10924
10948
  }
10925
- return Response.json({ group, evidence: group.evidence, markdown });
10949
+ const document = readGroupEvidenceDocument(group);
10950
+ return Response.json({
10951
+ group,
10952
+ evidence: group.evidence,
10953
+ markdown,
10954
+ summary: document?.summary ?? null,
10955
+ report: document?.jenkinsReport ?? null
10956
+ });
10926
10957
  },
10927
10958
  POST: async ({ params, request }) => {
10928
10959
  const group = getGroup(params.groupId);
@@ -11652,6 +11683,8 @@ export {
11652
11683
  AnthropicResponseSchema$1 as A,
11653
11684
  CapturedLogSchema as C,
11654
11685
  DEFAULT_CAPTURE_MODE as D,
11686
+ GroupEvidenceReadResponseSchema$1 as G,
11687
+ InspectorGroupsListResponseSchema as I,
11655
11688
  KnowledgeCandidateSchema as K,
11656
11689
  MAX_SLOW_RESPONSE_THRESHOLD_SECONDS as M,
11657
11690
  OpenAIRequestSchema as O,
@@ -11665,17 +11698,19 @@ export {
11665
11698
  AnthropicRequestSchema as e,
11666
11699
  stripClaudeCodeBillingHeader as f,
11667
11700
  getSessionPath as g,
11668
- providerHasContextMetadata as h,
11669
- findProviderModelMetadata as i,
11670
- createPendingProviderTestResults as j,
11671
- ProviderTestResultsSchema as k,
11672
- createFailedProviderTestResults as l,
11701
+ GroupEvidenceExportResultSchema as h,
11702
+ providerHasContextMetadata as i,
11703
+ findProviderModelMetadata as j,
11704
+ createPendingProviderTestResults as k,
11705
+ ProviderTestResultsSchema as l,
11673
11706
  maskApiKey as m,
11674
- MAX_PROVIDER_TEST_TIMEOUT_SECONDS as n,
11675
- resolveProviderContextWindow as o,
11707
+ createFailedProviderTestResults as n,
11708
+ MAX_PROVIDER_TEST_TIMEOUT_SECONDS as o,
11676
11709
  parseOpenAIResponse as p,
11677
- isPlainRecord as q,
11710
+ resolveProviderContextWindow as q,
11678
11711
  requestFormatForPath as r,
11679
11712
  safeGetOwnProperty as s,
11680
- router as t
11713
+ isPlainRecord as t,
11714
+ packageJson as u,
11715
+ router as v
11681
11716
  };
@@ -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-B1kdhY98.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-Kxptlkpg.js", "/assets/ProxyViewerContainer-BxRaXhKR.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-BhNTuZ31.js", "/assets/ProxyViewerContainer-BxRaXhKR.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-B1kdhY98.js" });
2
2
  export {
3
3
  tsrStartManifest
4
4
  };
@@ -35,103 +35,103 @@ const headers = ((m) => function headersRouteRule(event) {
35
35
  }
36
36
  });
37
37
  const assets = {
38
- "/assets/index-Cv5vPgpr.js": {
38
+ "/assets/index-Kxptlkpg.js": {
39
39
  "type": "text/javascript; charset=utf-8",
40
- "etag": '"74-qPu6sF/kGmsOicFgVQR8W+cHfLQ"',
41
- "mtime": "2026-07-01T01:34:44.486Z",
40
+ "etag": '"74-zVU85yxwksDEAlmGvjnynbRJlsg"',
41
+ "mtime": "2026-07-01T02:23:48.450Z",
42
42
  "size": 116,
43
- "path": "../public/assets/index-Cv5vPgpr.js"
43
+ "path": "../public/assets/index-Kxptlkpg.js"
44
44
  },
45
- "/assets/index-CwlHPmgL.css": {
45
+ "/assets/index-Byk60-jA.css": {
46
46
  "type": "text/css; charset=utf-8",
47
- "etag": '"1a3f0-E2f0kOdSBi1RhjoK38+CSij/apg"',
48
- "mtime": "2026-07-01T01:34:44.486Z",
49
- "size": 107504,
50
- "path": "../public/assets/index-CwlHPmgL.css"
47
+ "etag": '"1ab1a-tPrFGLVNN1Xk1g4iKBR5XFS0VgE"',
48
+ "mtime": "2026-07-01T02:23:48.450Z",
49
+ "size": 109338,
50
+ "path": "../public/assets/index-Byk60-jA.css"
51
51
  },
52
52
  "/assets/alibaba-TTwafVwX.svg": {
53
53
  "type": "image/svg+xml",
54
54
  "etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
55
- "mtime": "2026-07-01T01:34:44.485Z",
55
+ "mtime": "2026-07-01T02:23:48.448Z",
56
56
  "size": 5915,
57
57
  "path": "../public/assets/alibaba-TTwafVwX.svg"
58
58
  },
59
- "/assets/CompareDrawer-BDzfRSt1.js": {
59
+ "/assets/CompareDrawer-tIUf2EJm.js": {
60
60
  "type": "text/javascript; charset=utf-8",
61
- "etag": '"49fe-SgBlfrYSy5DyWozx9HIYT63pan8"',
62
- "mtime": "2026-07-01T01:34:44.486Z",
61
+ "etag": '"49fe-O2b82jiqVijsJaEWXyXHfD26ujs"',
62
+ "mtime": "2026-07-01T02:23:48.450Z",
63
63
  "size": 18942,
64
- "path": "../public/assets/CompareDrawer-BDzfRSt1.js"
64
+ "path": "../public/assets/CompareDrawer-tIUf2EJm.js"
65
65
  },
66
- "/assets/main-XHHZsOBK.js": {
66
+ "/assets/ReplayDialog-D6v1xcuC.js": {
67
67
  "type": "text/javascript; charset=utf-8",
68
- "etag": '"51726-1yTScfInPZoti54sKap6zxOxpvY"',
69
- "mtime": "2026-07-01T01:34:44.486Z",
70
- "size": 333606,
71
- "path": "../public/assets/main-XHHZsOBK.js"
68
+ "etag": '"318c-clYQ+hDlXIV8AGEUD0khiYhAzmM"',
69
+ "mtime": "2026-07-01T02:23:48.450Z",
70
+ "size": 12684,
71
+ "path": "../public/assets/ReplayDialog-D6v1xcuC.js"
72
72
  },
73
- "/assets/qwen-CONDcHqt.png": {
74
- "type": "image/png",
75
- "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
76
- "mtime": "2026-07-01T01:34:44.485Z",
77
- "size": 357059,
78
- "path": "../public/assets/qwen-CONDcHqt.png"
73
+ "/assets/main-B1kdhY98.js": {
74
+ "type": "text/javascript; charset=utf-8",
75
+ "etag": '"51726-il8QGn3n9HZk3cnlzLAvqWtvO8Y"',
76
+ "mtime": "2026-07-01T02:23:48.450Z",
77
+ "size": 333606,
78
+ "path": "../public/assets/main-B1kdhY98.js"
79
79
  },
80
80
  "/assets/minimax-BPMzvuL-.jpeg": {
81
81
  "type": "image/jpeg",
82
82
  "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
83
- "mtime": "2026-07-01T01:34:44.486Z",
83
+ "mtime": "2026-07-01T02:23:48.448Z",
84
84
  "size": 6918,
85
85
  "path": "../public/assets/minimax-BPMzvuL-.jpeg"
86
86
  },
87
- "/assets/RequestAnatomy-G0dV8-D_.js": {
87
+ "/assets/RequestAnatomy-D6PniTlx.js": {
88
88
  "type": "text/javascript; charset=utf-8",
89
- "etag": '"4485-dLrPuUurtUkiFHTiud70zTzhUi8"',
90
- "mtime": "2026-07-01T01:34:44.486Z",
89
+ "etag": '"4485-cUU3kN9eHR4o5pbZQbcY4OqCB50"',
90
+ "mtime": "2026-07-01T02:23:48.450Z",
91
91
  "size": 17541,
92
- "path": "../public/assets/RequestAnatomy-G0dV8-D_.js"
92
+ "path": "../public/assets/RequestAnatomy-D6PniTlx.js"
93
93
  },
94
- "/assets/ReplayDialog-p-5TKg75.js": {
94
+ "/assets/StreamingChunkSequence-D-Rbfnxh.js": {
95
95
  "type": "text/javascript; charset=utf-8",
96
- "etag": '"318c-2IdqYt4/fxajfqXLAVb8U+TSsfM"',
97
- "mtime": "2026-07-01T01:34:44.486Z",
98
- "size": 12684,
99
- "path": "../public/assets/ReplayDialog-p-5TKg75.js"
96
+ "etag": '"d57-a29gzePmbYwiutnSghD7IFULcvE"',
97
+ "mtime": "2026-07-01T02:23:48.450Z",
98
+ "size": 3415,
99
+ "path": "../public/assets/StreamingChunkSequence-D-Rbfnxh.js"
100
100
  },
101
- "/assets/ResponseView-D2wE6lD-.js": {
101
+ "/assets/ResponseView-Sx8PjuvU.js": {
102
102
  "type": "text/javascript; charset=utf-8",
103
- "etag": '"30d0-5TfShOzs9M0k3ghgcC/Uc1CZi5U"',
104
- "mtime": "2026-07-01T01:34:44.486Z",
103
+ "etag": '"30d0-eVm2iIA3EKpWcIYtelIeobfqtiY"',
104
+ "mtime": "2026-07-01T02:23:48.450Z",
105
105
  "size": 12496,
106
- "path": "../public/assets/ResponseView-D2wE6lD-.js"
107
- },
108
- "/assets/StreamingChunkSequence-D8JRK-j_.js": {
109
- "type": "text/javascript; charset=utf-8",
110
- "etag": '"d57-jGvUqgjv7HbrCBsM6bKKdb9Ijro"',
111
- "mtime": "2026-07-01T01:34:44.486Z",
112
- "size": 3415,
113
- "path": "../public/assets/StreamingChunkSequence-D8JRK-j_.js"
106
+ "path": "../public/assets/ResponseView-Sx8PjuvU.js"
114
107
  },
115
108
  "/assets/zhipuai-BPNAnxo-.svg": {
116
109
  "type": "image/svg+xml",
117
110
  "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
118
- "mtime": "2026-07-01T01:34:44.485Z",
111
+ "mtime": "2026-07-01T02:23:48.448Z",
119
112
  "size": 11256,
120
113
  "path": "../public/assets/zhipuai-BPNAnxo-.svg"
121
114
  },
122
- "/assets/_sessionId-zimzVrJE.js": {
115
+ "/assets/_sessionId-BhNTuZ31.js": {
123
116
  "type": "text/javascript; charset=utf-8",
124
- "etag": '"d2-XtmPH9ZczbI8wqjiKa5PV3BIn0Y"',
125
- "mtime": "2026-07-01T01:34:44.486Z",
117
+ "etag": '"d2-N3jVPi19Muv+Rgqnids/dlwNuhs"',
118
+ "mtime": "2026-07-01T02:23:48.450Z",
126
119
  "size": 210,
127
- "path": "../public/assets/_sessionId-zimzVrJE.js"
120
+ "path": "../public/assets/_sessionId-BhNTuZ31.js"
121
+ },
122
+ "/assets/qwen-CONDcHqt.png": {
123
+ "type": "image/png",
124
+ "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
125
+ "mtime": "2026-07-01T02:23:48.448Z",
126
+ "size": 357059,
127
+ "path": "../public/assets/qwen-CONDcHqt.png"
128
128
  },
129
- "/assets/ProxyViewerContainer-NtOD8Ex_.js": {
129
+ "/assets/ProxyViewerContainer-BxRaXhKR.js": {
130
130
  "type": "text/javascript; charset=utf-8",
131
- "etag": '"af8bd-AtJl2HP2L1UcDbcZviRHY1WMV8U"',
132
- "mtime": "2026-07-01T01:34:44.486Z",
133
- "size": 719037,
134
- "path": "../public/assets/ProxyViewerContainer-NtOD8Ex_.js"
131
+ "etag": '"b489b-R0CduB+BYfBdDePPpvc2Nkavq3A"',
132
+ "mtime": "2026-07-01T02:23:48.450Z",
133
+ "size": 739483,
134
+ "path": "../public/assets/ProxyViewerContainer-BxRaXhKR.js"
135
135
  }
136
136
  };
137
137
  function readAsset(id) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonyclaw/agent-inspector",
3
- "version": "2.0.30",
3
+ "version": "2.0.31",
4
4
  "type": "module",
5
5
  "description": "Agent observability and knowledge capture layer for AI coding tools.",
6
6
  "license": "MIT",
@@ -15,6 +15,7 @@ import { crabVariants } from "./ui/crab-variants";
15
15
  import { McpLogo } from "./ui/mcp-logo";
16
16
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "./ui/select";
17
17
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./ui/tooltip";
18
+ import { GroupsDialog } from "./groups/GroupsDialog";
18
19
  import { SettingsDialog } from "./providers/SettingsDialog";
19
20
  import { computeCacheTrends } from "./proxy-viewer/cacheTrend";
20
21
  import { LazyCompareDrawer } from "./proxy-viewer/lazy";
@@ -38,6 +39,10 @@ function truncateSessionId(id: string): string {
38
39
  return `${id.slice(0, 12)}...${id.slice(-12)}`;
39
40
  }
40
41
 
42
+ export function shouldShowRawExport(captureMode: CaptureMode): boolean {
43
+ return captureMode === "full";
44
+ }
45
+
41
46
  function computeTokenSummary(logs: CapturedLog[]): { totalIn: number; totalOut: number } {
42
47
  let totalIn = 0;
43
48
  let totalOut = 0;
@@ -709,6 +714,7 @@ export function ProxyViewer({
709
714
  );
710
715
  const cacheTrends = useMemo(() => computeCacheTrends(groups), [groups]);
711
716
  const comparisonPredecessors = useMemo(() => buildValidPredecessors(groups), [groups]);
717
+ const showRawExport = shouldShowRawExport(captureMode);
712
718
  const handleCompareWithPrevious = useCallback(
713
719
  (log: CapturedLog) => {
714
720
  const predecessor = comparisonPredecessors.get(log.id);
@@ -788,7 +794,8 @@ export function ProxyViewer({
788
794
  </span>
789
795
  <McpReadyBadge />
790
796
  </h1>
791
- <div className="justify-self-end">
797
+ <div className="justify-self-end flex items-center gap-1">
798
+ <GroupsDialog />
792
799
  <SettingsDialog />
793
800
  </div>
794
801
  </div>
@@ -874,7 +881,7 @@ export function ProxyViewer({
874
881
  : ""}
875
882
  </span>
876
883
  )}
877
- {logs.length > 0 && (
884
+ {logs.length > 0 && showRawExport && (
878
885
  <button
879
886
  type="button"
880
887
  onClick={() => {