@tonyclaw/agent-inspector 2.0.11 → 2.0.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 (47) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-C9OWdxHM.js → CompareDrawer-ClM_uVRy.js} +1 -1
  3. package/.output/public/assets/ProxyViewerContainer-CTNNzXSa.js +114 -0
  4. package/.output/public/assets/{ReplayDialog-CwE6I1Pe.js → ReplayDialog-7rp7N_KJ.js} +1 -1
  5. package/.output/public/assets/RequestAnatomy-sL2FFo_N.js +1 -0
  6. package/.output/public/assets/ResponseView-Cjlf3b6-.js +1 -0
  7. package/.output/public/assets/{StreamingChunkSequence-CLcLZ7-W.js → StreamingChunkSequence-Ctx3sT3r.js} +1 -1
  8. package/.output/public/assets/_sessionId-DEWzDQ8-.js +1 -0
  9. package/.output/public/assets/index-DGIIhZTn.js +1 -0
  10. package/.output/public/assets/index-D_nZj9Vt.css +1 -0
  11. package/.output/public/assets/{main-D1Xanzu7.js → main-FvIQopAy.js} +2 -2
  12. package/.output/server/_libs/lucide-react.mjs +51 -39
  13. package/.output/server/{_sessionId-D3IyPpws.mjs → _sessionId-BDSgtrsI.mjs} +2 -2
  14. package/.output/server/_ssr/{CompareDrawer-BIMThqxy.mjs → CompareDrawer-Cqvv0I3x.mjs} +3 -3
  15. package/.output/server/_ssr/{ProxyViewerContainer-BiBdKWtj.mjs → ProxyViewerContainer-C0YEoG8N.mjs} +1611 -183
  16. package/.output/server/_ssr/{ReplayDialog-D_wiDyM2.mjs → ReplayDialog-CrsynUKI.mjs} +4 -4
  17. package/.output/server/_ssr/RequestAnatomy-CR_JUkcL.mjs +688 -0
  18. package/.output/server/_ssr/{ResponseView-Drk5ghmL.mjs → ResponseView-Dba2Et69.mjs} +3 -3
  19. package/.output/server/_ssr/{StreamingChunkSequence-F889rmG0.mjs → StreamingChunkSequence-BIMHLstI.mjs} +2 -2
  20. package/.output/server/_ssr/{index-CaPniq9z.mjs → index-DveIUTm5.mjs} +2 -2
  21. package/.output/server/_ssr/index.mjs +2 -2
  22. package/.output/server/_ssr/{router-C7S8FRth.mjs → router-D0yXVG0Q.mjs} +85 -22
  23. package/.output/server/{_tanstack-start-manifest_v-CVTkFOdT.mjs → _tanstack-start-manifest_v-pe0xJFuQ.mjs} +1 -1
  24. package/.output/server/index.mjs +62 -62
  25. package/package.json +1 -1
  26. package/src/components/ProxyViewer.tsx +453 -52
  27. package/src/components/providers/ProviderCard.tsx +45 -2
  28. package/src/components/providers/ProviderForm.tsx +245 -80
  29. package/src/components/providers/ProvidersPanel.tsx +7 -1
  30. package/src/components/proxy-viewer/ConversationGroup.tsx +18 -1
  31. package/src/components/proxy-viewer/LogEntry.tsx +25 -0
  32. package/src/components/proxy-viewer/TurnGroup.tsx +15 -0
  33. package/src/components/proxy-viewer/anatomy/RequestAnatomy.tsx +99 -79
  34. package/src/components/proxy-viewer/anatomy/contextIntelligence.ts +22 -4
  35. package/src/components/proxy-viewer/anatomy/sessionContextSummary.ts +196 -0
  36. package/src/components/proxy-viewer/logFocus.ts +33 -0
  37. package/src/lib/providerModelMetadata.ts +64 -12
  38. package/src/lib/utils.ts +7 -0
  39. package/src/proxy/providers.ts +25 -0
  40. package/src/routes/api/providers.ts +3 -0
  41. package/.output/public/assets/ProxyViewerContainer-CNzay4u8.js +0 -114
  42. package/.output/public/assets/RequestAnatomy-DEehC3yz.js +0 -1
  43. package/.output/public/assets/ResponseView-CE5UsuUq.js +0 -1
  44. package/.output/public/assets/_sessionId-DE__tPTo.js +0 -1
  45. package/.output/public/assets/index-BFO4Jmw5.js +0 -1
  46. package/.output/public/assets/index-CDzZ7l_S.css +0 -1
  47. package/.output/server/_ssr/RequestAnatomy-5UiMTESr.mjs +0 -1383
@@ -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, s as getStatusCategory, B as Badge, C as Collapsible, t as CollapsibleTrigger, v as CollapsibleContent, S as ScrollArea, w as JsonViewer, x as safeJsonValue } from "./ProxyViewerContainer-BiBdKWtj.mjs";
3
- import "./router-C7S8FRth.mjs";
2
+ import { g as getLogFormatAdapter, f as formatTokens, c as cn, s as getStatusCategory, B as Badge, t as Collapsible, v as CollapsibleTrigger, w as CollapsibleContent, x as ScrollArea, y as JsonViewer, z as safeJsonValue } from "./ProxyViewerContainer-C0YEoG8N.mjs";
3
+ import "./router-D0yXVG0Q.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
- import { Z as Zap, j as TriangleAlert, ab as CircleStop, B as Brain, b as ChevronDown, f as ChevronRight, T as Terminal } from "../_libs/lucide-react.mjs";
6
+ import { Z as Zap, j as TriangleAlert, ad as CircleStop, B as Brain, b as ChevronDown, f 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,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
2
- import { k as TooltipProvider, l as Tooltip, m as TooltipTrigger, B as Badge, n as TooltipContent, w as JsonViewer } from "./ProxyViewerContainer-BiBdKWtj.mjs";
3
- import "./router-C7S8FRth.mjs";
2
+ import { k as TooltipProvider, l as Tooltip, m as TooltipTrigger, B as Badge, n as TooltipContent, y as JsonViewer } from "./ProxyViewerContainer-C0YEoG8N.mjs";
3
+ import "./router-D0yXVG0Q.mjs";
4
4
  import "../_libs/modelcontextprotocol__server.mjs";
5
5
  import "../_libs/jszip.mjs";
6
6
  import { b as ChevronDown, f as ChevronRight, L as LoaderCircle } from "../_libs/lucide-react.mjs";
@@ -1,6 +1,6 @@
1
- import { P as ProxyViewerContainer } from "./ProxyViewerContainer-BiBdKWtj.mjs";
1
+ import { P as ProxyViewerContainer } from "./ProxyViewerContainer-C0YEoG8N.mjs";
2
2
  import "../_libs/react.mjs";
3
- import "./router-C7S8FRth.mjs";
3
+ import "./router-D0yXVG0Q.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-CVTkFOdT.mjs");
201
+ const { tsrStartManifest } = await import("../_tanstack-start-manifest_v-pe0xJFuQ.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-C7S8FRth.mjs").then((n) => n.m);
770
+ const routerEntry = await import("./router-D0yXVG0Q.mjs").then((n) => n.m);
771
771
  const startEntry = await import("./start-HYkvq4Ni.mjs");
772
772
  return { startEntry, routerEntry };
773
773
  }
@@ -49,7 +49,7 @@ import "../_libs/mimic-function.mjs";
49
49
  import "../_libs/semver.mjs";
50
50
  import "../_libs/uint8array-extras.mjs";
51
51
  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";
52
- const appCss = "/assets/index-CDzZ7l_S.css";
52
+ const appCss = "/assets/index-D_nZj9Vt.css";
53
53
  const Route$s = createRootRoute({
54
54
  head: () => ({
55
55
  meta: [
@@ -92,7 +92,7 @@ function RootDocument({ children }) {
92
92
  ] })
93
93
  ] });
94
94
  }
95
- const $$splitComponentImporter$1 = () => import("./index-CaPniq9z.mjs");
95
+ const $$splitComponentImporter$1 = () => import("./index-DveIUTm5.mjs");
96
96
  const Route$r = createFileRoute("/")({
97
97
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
98
98
  });
@@ -135,7 +135,7 @@ function decodeSessionIdFromPath(encoded) {
135
135
  function getSessionPath(sessionId) {
136
136
  return `/session/${encodeSessionIdForPath(sessionId)}`;
137
137
  }
138
- const $$splitComponentImporter = () => import("../_sessionId-D3IyPpws.mjs");
138
+ const $$splitComponentImporter = () => import("../_sessionId-BDSgtrsI.mjs");
139
139
  const Route$q = createFileRoute("/session/$sessionId")({
140
140
  component: lazyRouteComponent($$splitComponentImporter, "component"),
141
141
  parseParams: (params) => ({
@@ -2093,6 +2093,15 @@ const ProviderModelRegistrySchema = object({
2093
2093
  models: array(ProviderRegistryModelSchema).optional().default([])
2094
2094
  });
2095
2095
  const BUILTIN_MODEL_METADATA_SOURCE_URL = "agent-inspector://builtin/model-metadata";
2096
+ const HF_DEEPSEEK_V4_PRO_URL = "https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro";
2097
+ const HF_DEEPSEEK_V4_FLASH_URL = "https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash";
2098
+ const HF_MINIMAX_M3_URL = "https://huggingface.co/MiniMaxAI/MiniMax-M3";
2099
+ const HF_MINIMAX_M2_7_URL = "https://huggingface.co/MiniMaxAI/MiniMax-M2.7";
2100
+ const HF_MINIMAX_M2_5_URL = "https://huggingface.co/MiniMaxAI/MiniMax-M2.5";
2101
+ const HF_MINIMAX_M2_1_URL = "https://huggingface.co/MiniMaxAI/MiniMax-M2.1";
2102
+ const HF_GLM_5_URL = "https://huggingface.co/zai-org/GLM-5";
2103
+ const HF_GLM_5_1_URL = "https://huggingface.co/zai-org/GLM-5.1";
2104
+ const HF_GLM_5_2_URL = "https://huggingface.co/zai-org/GLM-5.2";
2096
2105
  const BUILTIN_PROVIDER_MODEL_REGISTRY = {
2097
2106
  providers: [
2098
2107
  {
@@ -2103,12 +2112,14 @@ const BUILTIN_PROVIDER_MODEL_REGISTRY = {
2103
2112
  {
2104
2113
  id: "deepseek-v4-pro",
2105
2114
  aliases: ["DeepSeek-V4-Pro"],
2106
- contextWindow: 1e6
2115
+ contextWindow: 1048576,
2116
+ sourceUrl: HF_DEEPSEEK_V4_PRO_URL
2107
2117
  },
2108
2118
  {
2109
2119
  id: "deepseek-v4-flash",
2110
2120
  aliases: ["DeepSeek-V4-Flash"],
2111
- contextWindow: 1e6
2121
+ contextWindow: 1048576,
2122
+ sourceUrl: HF_DEEPSEEK_V4_FLASH_URL
2112
2123
  }
2113
2124
  ]
2114
2125
  },
@@ -2120,37 +2131,69 @@ const BUILTIN_PROVIDER_MODEL_REGISTRY = {
2120
2131
  {
2121
2132
  id: "MiniMax M3",
2122
2133
  aliases: ["MiniMax-M3", "minimax-m3"],
2123
- contextWindow: 1e6
2134
+ contextWindow: 1048576,
2135
+ sourceUrl: HF_MINIMAX_M3_URL
2124
2136
  },
2125
2137
  {
2126
2138
  id: "MiniMax M2.7",
2127
2139
  aliases: ["MiniMax-M2.7", "minimax-m2.7"],
2128
- contextWindow: 204800
2140
+ contextWindow: 204800,
2141
+ sourceUrl: HF_MINIMAX_M2_7_URL
2129
2142
  },
2130
2143
  {
2131
2144
  id: "MiniMax M2.7-highspeed",
2132
2145
  aliases: ["MiniMax-M2.7-highspeed", "minimax-m2.7-highspeed"],
2133
- contextWindow: 204800
2146
+ contextWindow: 204800,
2147
+ sourceUrl: HF_MINIMAX_M2_7_URL
2134
2148
  },
2135
2149
  {
2136
2150
  id: "MiniMax M2.5",
2137
2151
  aliases: ["MiniMax-M2.5", "minimax-m2.5"],
2138
- contextWindow: 204800
2152
+ contextWindow: 196608,
2153
+ sourceUrl: HF_MINIMAX_M2_5_URL
2139
2154
  },
2140
2155
  {
2141
2156
  id: "MiniMax M2.5-highspeed",
2142
2157
  aliases: ["MiniMax-M2.5-highspeed", "minimax-m2.5-highspeed"],
2143
- contextWindow: 204800
2158
+ contextWindow: 196608,
2159
+ sourceUrl: HF_MINIMAX_M2_5_URL
2144
2160
  },
2145
2161
  {
2146
2162
  id: "MiniMax M2.1",
2147
2163
  aliases: ["MiniMax-M2.1", "minimax-m2.1"],
2148
- contextWindow: 204800
2164
+ contextWindow: 196608,
2165
+ sourceUrl: HF_MINIMAX_M2_1_URL
2149
2166
  },
2150
2167
  {
2151
2168
  id: "MiniMax M2.1-highspeed",
2152
2169
  aliases: ["MiniMax-M2.1-highspeed", "minimax-m2.1-highspeed"],
2153
- contextWindow: 204800
2170
+ contextWindow: 196608,
2171
+ sourceUrl: HF_MINIMAX_M2_1_URL
2172
+ }
2173
+ ]
2174
+ },
2175
+ {
2176
+ name: "GLM",
2177
+ aliases: ["glm", "zai", "zhipu", "bigmodel"],
2178
+ baseUrls: [],
2179
+ models: [
2180
+ {
2181
+ id: "glm-5",
2182
+ aliases: ["GLM-5"],
2183
+ contextWindow: 202752,
2184
+ sourceUrl: HF_GLM_5_URL
2185
+ },
2186
+ {
2187
+ id: "glm-5.1",
2188
+ aliases: ["GLM-5.1"],
2189
+ contextWindow: 202752,
2190
+ sourceUrl: HF_GLM_5_1_URL
2191
+ },
2192
+ {
2193
+ id: "glm-5.2",
2194
+ aliases: ["GLM-5.2"],
2195
+ contextWindow: 1048576,
2196
+ sourceUrl: HF_GLM_5_2_URL
2154
2197
  }
2155
2198
  ]
2156
2199
  }
@@ -2279,15 +2322,17 @@ function applyProviderModelRegistry(provider, registry2, sourceUrl, updatedAt, m
2279
2322
  }
2280
2323
  const normalized = normalizeModelName$1(model);
2281
2324
  const existingMetadata = existing.get(normalized);
2282
- if (mode === "fill-missing" && existingMetadata !== void 0 && existingMetadata.contextWindow !== void 0 && (existingMetadata.outputLimit !== void 0 || registryModel.outputLimit === void 0)) {
2325
+ const existingIsManual = existingMetadata?.source === "manual";
2326
+ if (mode === "fill-missing" && existingIsManual && existingMetadata !== void 0 && existingMetadata.contextWindow !== void 0 && (existingMetadata.outputLimit !== void 0 || registryModel.outputLimit === void 0)) {
2283
2327
  continue;
2284
2328
  }
2329
+ const keepManualValue = mode === "fill-missing" && existingIsManual;
2285
2330
  existing.set(normalized, {
2286
2331
  model,
2287
- contextWindow: existingMetadata?.contextWindow ?? registryModel.contextWindow,
2288
- outputLimit: existingMetadata?.outputLimit ?? registryModel.outputLimit,
2289
- source: existingMetadata?.source ?? "registry",
2290
- sourceUrl: existingMetadata?.sourceUrl ?? registryModel.sourceUrl ?? sourceUrl,
2332
+ contextWindow: keepManualValue ? existingMetadata?.contextWindow ?? registryModel.contextWindow : registryModel.contextWindow ?? existingMetadata?.contextWindow,
2333
+ outputLimit: keepManualValue ? existingMetadata?.outputLimit ?? registryModel.outputLimit : registryModel.outputLimit ?? existingMetadata?.outputLimit,
2334
+ source: keepManualValue ? "manual" : "registry",
2335
+ sourceUrl: keepManualValue ? existingMetadata?.sourceUrl ?? registryModel.sourceUrl ?? sourceUrl : registryModel.sourceUrl ?? sourceUrl,
2291
2336
  updatedAt
2292
2337
  });
2293
2338
  matchedModels.push(model);
@@ -2320,6 +2365,20 @@ function withBuiltinProviderModelMetadata(provider, updatedAt) {
2320
2365
  object({
2321
2366
  providers: array(ProviderConfigSchema)
2322
2367
  });
2368
+ function normalizeMetadataModelName(value) {
2369
+ return value.trim().toLowerCase().replace(/\s+/g, "-");
2370
+ }
2371
+ function mergeModelMetadata(existing, incoming) {
2372
+ if (existing === void 0 && incoming === void 0) return void 0;
2373
+ const merged = /* @__PURE__ */ new Map();
2374
+ for (const metadata of existing ?? []) {
2375
+ merged.set(normalizeMetadataModelName(metadata.model), metadata);
2376
+ }
2377
+ for (const metadata of incoming ?? []) {
2378
+ merged.set(normalizeMetadataModelName(metadata.model), metadata);
2379
+ }
2380
+ return [...merged.values()].toSorted((left, right) => left.model.localeCompare(right.model));
2381
+ }
2323
2382
  const LegacyProviderConfigSchema = object({
2324
2383
  id: string().optional(),
2325
2384
  name: string().optional(),
@@ -2557,7 +2616,7 @@ function getProvider(id) {
2557
2616
  function normalizeApiKey(apiKey) {
2558
2617
  return apiKey.replace(/^Bearer\s+/i, "").trim();
2559
2618
  }
2560
- function addProvider(name, apiKey, format, baseUrl, models, authHeader, apiDocsUrl, anthropicBaseUrl, openaiBaseUrl, source, modelMetadataUrl) {
2619
+ function addProvider(name, apiKey, format, baseUrl, models, authHeader, apiDocsUrl, anthropicBaseUrl, openaiBaseUrl, source, modelMetadataUrl, modelMetadata) {
2561
2620
  const providers = getProviders();
2562
2621
  const normalizedKey = normalizeApiKey(apiKey);
2563
2622
  const resolvedAnthropicUrl = anthropicBaseUrl ?? "";
@@ -2570,6 +2629,7 @@ function addProvider(name, apiKey, format, baseUrl, models, authHeader, apiDocsU
2570
2629
  const existingIndex = providers.findIndex((p) => p.id === existing.id);
2571
2630
  const newModels = (models ?? []).filter((m) => m !== "");
2572
2631
  existing.modelMetadataUrl = modelMetadataUrl ?? existing.modelMetadataUrl;
2632
+ existing.modelMetadata = mergeModelMetadata(existing.modelMetadata, modelMetadata);
2573
2633
  if (newModels.length > 0) {
2574
2634
  const mergedModels = new Set(existing.models ?? []);
2575
2635
  for (const m of newModels) mergedModels.add(m);
@@ -2594,6 +2654,7 @@ function addProvider(name, apiKey, format, baseUrl, models, authHeader, apiDocsU
2594
2654
  authHeader: authHeader ?? "bearer",
2595
2655
  apiDocsUrl,
2596
2656
  modelMetadataUrl,
2657
+ modelMetadata,
2597
2658
  createdAt: now,
2598
2659
  updatedAt: now,
2599
2660
  anthropicBaseUrl: resolvedAnthropicUrl,
@@ -3696,6 +3757,7 @@ const ProviderInputSchema = object({
3696
3757
  authHeader: _enum(["bearer", "x-api-key"]).optional().default("bearer"),
3697
3758
  apiDocsUrl: string().optional(),
3698
3759
  modelMetadataUrl: string().optional(),
3760
+ modelMetadata: array(ProviderModelMetadataSchema).optional(),
3699
3761
  source: _enum(["company", "personal"]).optional()
3700
3762
  });
3701
3763
  const Route$n = createFileRoute("/api/providers")({
@@ -3721,7 +3783,8 @@ const Route$n = createFileRoute("/api/providers")({
3721
3783
  parsed.data.anthropicBaseUrl,
3722
3784
  parsed.data.openaiBaseUrl,
3723
3785
  parsed.data.source,
3724
- parsed.data.modelMetadataUrl
3786
+ parsed.data.modelMetadataUrl,
3787
+ parsed.data.modelMetadata
3725
3788
  );
3726
3789
  return Response.json(newProvider, { status: 201 });
3727
3790
  }
@@ -7084,7 +7147,7 @@ export {
7084
7147
  KnowledgeCandidateSchema as K,
7085
7148
  MAX_SLOW_RESPONSE_THRESHOLD_SECONDS as M,
7086
7149
  OpenAIRequestSchema as O,
7087
- ProviderTestResultsSchema as P,
7150
+ ProviderConfigSchema as P,
7088
7151
  Route$q as R,
7089
7152
  TimeDisplayFormatSchema as T,
7090
7153
  DEFAULT_TIME_DISPLAY_FORMAT as a,
@@ -7095,8 +7158,8 @@ export {
7095
7158
  findProviderModelMetadata as f,
7096
7159
  getSessionPath as g,
7097
7160
  createPendingProviderTestResults as h,
7098
- createFailedProviderTestResults as i,
7099
- ProviderConfigSchema as j,
7161
+ ProviderTestResultsSchema as i,
7162
+ createFailedProviderTestResults as j,
7100
7163
  resolveProviderContextWindow as k,
7101
7164
  isPlainRecord as l,
7102
7165
  router as m,
@@ -1,4 +1,4 @@
1
- const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/api/config", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/providers", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-D1Xanzu7.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-BFO4Jmw5.js", "/assets/ProxyViewerContainer-CNzay4u8.js"] }, "/api/config": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.ts", "children": ["/api/config/paths"] }, "/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/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-DE__tPTo.js", "/assets/ProxyViewerContainer-CNzay4u8.js"] }, "/api/config/paths": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.paths.ts" }, "/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/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/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-D1Xanzu7.js" });
1
+ const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/__root.tsx", "children": ["/", "/api/config", "/api/health", "/api/logs", "/api/mcp", "/api/models", "/api/providers", "/api/sessions", "/proxy/$", "/session/$sessionId", "/api/knowledge/candidates", "/api/knowledge/project-context", "/api/knowledge/search", "/api/knowledge/sessions/$sessionId/candidates"], "preloads": ["/assets/main-FvIQopAy.js"], "assets": [] }, "/": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-DGIIhZTn.js", "/assets/ProxyViewerContainer-CTNNzXSa.js"] }, "/api/config": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.ts", "children": ["/api/config/paths"] }, "/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/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-DEWzDQ8-.js", "/assets/ProxyViewerContainer-CTNNzXSa.js"] }, "/api/config/paths": { "filePath": "C:/Users/claw/workspace/agent-inspector/src/routes/api/config.paths.ts" }, "/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/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/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-FvIQopAy.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/CompareDrawer-ClM_uVRy.js": {
39
+ "type": "text/javascript; charset=utf-8",
40
+ "etag": '"49fe-SZ34GYuPl79DInUwwjhnDXXVMhI"',
41
+ "mtime": "2026-06-24T06:20:41.552Z",
42
+ "size": 18942,
43
+ "path": "../public/assets/CompareDrawer-ClM_uVRy.js"
44
+ },
38
45
  "/assets/alibaba-TTwafVwX.svg": {
39
46
  "type": "image/svg+xml",
40
47
  "etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
41
- "mtime": "2026-06-23T08:36:33.058Z",
48
+ "mtime": "2026-06-24T06:20:41.552Z",
42
49
  "size": 5915,
43
50
  "path": "../public/assets/alibaba-TTwafVwX.svg"
44
51
  },
45
52
  "/assets/minimax-BPMzvuL-.jpeg": {
46
53
  "type": "image/jpeg",
47
54
  "etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
48
- "mtime": "2026-06-23T08:36:33.058Z",
55
+ "mtime": "2026-06-24T06:20:41.552Z",
49
56
  "size": 6918,
50
57
  "path": "../public/assets/minimax-BPMzvuL-.jpeg"
51
58
  },
52
- "/assets/CompareDrawer-C9OWdxHM.js": {
59
+ "/assets/ReplayDialog-7rp7N_KJ.js": {
53
60
  "type": "text/javascript; charset=utf-8",
54
- "etag": '"49fe-9KuSjKKkAoP6a0iGR+t3fm/p6YQ"',
55
- "mtime": "2026-06-23T08:36:33.058Z",
56
- "size": 18942,
57
- "path": "../public/assets/CompareDrawer-C9OWdxHM.js"
58
- },
59
- "/assets/index-CDzZ7l_S.css": {
60
- "type": "text/css; charset=utf-8",
61
- "etag": '"198f8-JSABQ5kb8kjFxUYWlMXh0v7U1/M"',
62
- "mtime": "2026-06-23T08:36:33.058Z",
63
- "size": 104696,
64
- "path": "../public/assets/index-CDzZ7l_S.css"
61
+ "etag": '"2361-3PSK8yYyFJmDityfBTwVPCzjRSY"',
62
+ "mtime": "2026-06-24T06:20:41.552Z",
63
+ "size": 9057,
64
+ "path": "../public/assets/ReplayDialog-7rp7N_KJ.js"
65
65
  },
66
- "/assets/index-BFO4Jmw5.js": {
66
+ "/assets/ResponseView-Cjlf3b6-.js": {
67
67
  "type": "text/javascript; charset=utf-8",
68
- "etag": '"74-Gu7fKa694PjJJnvtWQ6J0TLqtOk"',
69
- "mtime": "2026-06-23T08:36:33.058Z",
70
- "size": 116,
71
- "path": "../public/assets/index-BFO4Jmw5.js"
68
+ "etag": '"30cd-dnE/7Xs5a8yBdd/19x1oIzp25xo"',
69
+ "mtime": "2026-06-24T06:20:41.552Z",
70
+ "size": 12493,
71
+ "path": "../public/assets/ResponseView-Cjlf3b6-.js"
72
72
  },
73
- "/assets/ReplayDialog-CwE6I1Pe.js": {
74
- "type": "text/javascript; charset=utf-8",
75
- "etag": '"2361-VL9x6j7BihuyZ9dMZsqM98VjmmI"',
76
- "mtime": "2026-06-23T08:36:33.058Z",
77
- "size": 9057,
78
- "path": "../public/assets/ReplayDialog-CwE6I1Pe.js"
73
+ "/assets/qwen-CONDcHqt.png": {
74
+ "type": "image/png",
75
+ "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
76
+ "mtime": "2026-06-24T06:20:41.552Z",
77
+ "size": 357059,
78
+ "path": "../public/assets/qwen-CONDcHqt.png"
79
79
  },
80
- "/assets/ResponseView-CE5UsuUq.js": {
80
+ "/assets/StreamingChunkSequence-Ctx3sT3r.js": {
81
81
  "type": "text/javascript; charset=utf-8",
82
- "etag": '"30cc-iFUGYetD4rrl6vC/+kBARwOWLOk"',
83
- "mtime": "2026-06-23T08:36:33.058Z",
84
- "size": 12492,
85
- "path": "../public/assets/ResponseView-CE5UsuUq.js"
82
+ "etag": '"d5b-0ssVQEgzVEKXeVl8OBnr/0c5j/8"',
83
+ "mtime": "2026-06-24T06:20:41.552Z",
84
+ "size": 3419,
85
+ "path": "../public/assets/StreamingChunkSequence-Ctx3sT3r.js"
86
86
  },
87
- "/assets/RequestAnatomy-DEehC3yz.js": {
87
+ "/assets/RequestAnatomy-sL2FFo_N.js": {
88
88
  "type": "text/javascript; charset=utf-8",
89
- "etag": '"5e5e-pTc9BmNCScOTaCbusfi7M+/T6bI"',
90
- "mtime": "2026-06-23T08:36:33.058Z",
91
- "size": 24158,
92
- "path": "../public/assets/RequestAnatomy-DEehC3yz.js"
89
+ "etag": '"33eb-T6aNFNvMnWyjzccn6H3t5vU/fkE"',
90
+ "mtime": "2026-06-24T06:20:41.552Z",
91
+ "size": 13291,
92
+ "path": "../public/assets/RequestAnatomy-sL2FFo_N.js"
93
93
  },
94
94
  "/assets/zhipuai-BPNAnxo-.svg": {
95
95
  "type": "image/svg+xml",
96
96
  "etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
97
- "mtime": "2026-06-23T08:36:33.058Z",
97
+ "mtime": "2026-06-24T06:20:41.552Z",
98
98
  "size": 11256,
99
99
  "path": "../public/assets/zhipuai-BPNAnxo-.svg"
100
100
  },
101
- "/assets/_sessionId-DE__tPTo.js": {
101
+ "/assets/index-DGIIhZTn.js": {
102
102
  "type": "text/javascript; charset=utf-8",
103
- "etag": '"d2-xgLDkEVkcVSNakd4RdAiTyyL3dU"',
104
- "mtime": "2026-06-23T08:36:33.058Z",
105
- "size": 210,
106
- "path": "../public/assets/_sessionId-DE__tPTo.js"
103
+ "etag": '"74-RrRblbF2q1u29lOAOi/P9cfzSS4"',
104
+ "mtime": "2026-06-24T06:20:41.552Z",
105
+ "size": 116,
106
+ "path": "../public/assets/index-DGIIhZTn.js"
107
107
  },
108
- "/assets/main-D1Xanzu7.js": {
108
+ "/assets/main-FvIQopAy.js": {
109
109
  "type": "text/javascript; charset=utf-8",
110
- "etag": '"51726-1VCm3nooMYxuhh7dIY976qw9+Qs"',
111
- "mtime": "2026-06-23T08:36:33.058Z",
110
+ "etag": '"51726-DFNFb/Ckwew0+zUlseKJJYHiKQ8"',
111
+ "mtime": "2026-06-24T06:20:41.552Z",
112
112
  "size": 333606,
113
- "path": "../public/assets/main-D1Xanzu7.js"
114
- },
115
- "/assets/qwen-CONDcHqt.png": {
116
- "type": "image/png",
117
- "etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
118
- "mtime": "2026-06-23T08:36:33.058Z",
119
- "size": 357059,
120
- "path": "../public/assets/qwen-CONDcHqt.png"
113
+ "path": "../public/assets/main-FvIQopAy.js"
121
114
  },
122
- "/assets/StreamingChunkSequence-CLcLZ7-W.js": {
115
+ "/assets/_sessionId-DEWzDQ8-.js": {
123
116
  "type": "text/javascript; charset=utf-8",
124
- "etag": '"d5b-XSX42WCh8Ym5efHZ+MkzQ8m0l+I"',
125
- "mtime": "2026-06-23T08:36:33.060Z",
126
- "size": 3419,
127
- "path": "../public/assets/StreamingChunkSequence-CLcLZ7-W.js"
117
+ "etag": '"d2-iMkEwYrKkBow2arO0sFX4nIYuOY"',
118
+ "mtime": "2026-06-24T06:20:41.552Z",
119
+ "size": 210,
120
+ "path": "../public/assets/_sessionId-DEWzDQ8-.js"
121
+ },
122
+ "/assets/index-D_nZj9Vt.css": {
123
+ "type": "text/css; charset=utf-8",
124
+ "etag": '"1a275-7T1iSNG2p6BSsqLwdpfky+9evLw"',
125
+ "mtime": "2026-06-24T06:20:41.552Z",
126
+ "size": 107125,
127
+ "path": "../public/assets/index-D_nZj9Vt.css"
128
128
  },
129
- "/assets/ProxyViewerContainer-CNzay4u8.js": {
129
+ "/assets/ProxyViewerContainer-CTNNzXSa.js": {
130
130
  "type": "text/javascript; charset=utf-8",
131
- "etag": '"a3740-n67V6FziV4gg7BgR5eQg3/G5GzY"',
132
- "mtime": "2026-06-23T08:36:33.058Z",
133
- "size": 669504,
134
- "path": "../public/assets/ProxyViewerContainer-CNzay4u8.js"
131
+ "etag": '"a9eef-lBcKUWi8akLXHGw0mBMzzJmE6ZE"',
132
+ "mtime": "2026-06-24T06:20:41.552Z",
133
+ "size": 696047,
134
+ "path": "../public/assets/ProxyViewerContainer-CTNNzXSa.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.11",
3
+ "version": "2.0.12",
4
4
  "type": "module",
5
5
  "description": "Agent observability and knowledge capture layer for AI coding tools.",
6
6
  "license": "MIT",