@tonyclaw/agent-inspector 3.0.5 → 3.0.6

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 (35) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{CompareDrawer-Co-35_Xw.js → CompareDrawer-DsvO6QyJ.js} +1 -1
  3. package/.output/public/assets/{ProxyViewerContainer-DPv1rBo7.js → ProxyViewerContainer-CfP-komD.js} +26 -26
  4. package/.output/public/assets/{ReplayDialog-DghbvKdy.js → ReplayDialog-CQlLX1Uo.js} +1 -1
  5. package/.output/public/assets/{RequestAnatomy-CRXE5v8X.js → RequestAnatomy-m1q-uVTl.js} +1 -1
  6. package/.output/public/assets/{ResponseView-CzxoQRjp.js → ResponseView-DuLLeYSh.js} +2 -2
  7. package/.output/public/assets/{StreamingChunkSequence-DnFyF_Hr.js → StreamingChunkSequence-CN4aRFBx.js} +1 -1
  8. package/.output/public/assets/{_sessionId-DHRhWzKe.js → _sessionId-CWP4pxOU.js} +1 -1
  9. package/.output/public/assets/index-0pt1umWP.css +1 -0
  10. package/.output/public/assets/index-DSUEOPbC.js +1 -0
  11. package/.output/public/assets/{index-Dl1oki9E.js → index-zfZUz67K.js} +1 -1
  12. package/.output/public/assets/{json-viewer-B84f7oiG.js → json-viewer-_4r1LBBE.js} +1 -1
  13. package/.output/public/assets/{main-DViDnJ9X.js → main-C_nEHNUM.js} +2 -2
  14. package/.output/server/_libs/lucide-react.mjs +292 -203
  15. package/.output/server/{_sessionId-C43vEAWe.mjs → _sessionId-CTqCAmUF.mjs} +3 -3
  16. package/.output/server/_ssr/{CompareDrawer-DOL6q0jD.mjs → CompareDrawer-D6b6TZ-O.mjs} +3 -3
  17. package/.output/server/_ssr/{ProxyViewerContainer-S9izw3ND.mjs → ProxyViewerContainer-Dp7Va9_T.mjs} +340 -11
  18. package/.output/server/_ssr/{ReplayDialog-tqthwJh0.mjs → ReplayDialog-D_KWQ1GY.mjs} +4 -4
  19. package/.output/server/_ssr/{RequestAnatomy-CgWDjFPR.mjs → RequestAnatomy-CPubXjMX.mjs} +2 -2
  20. package/.output/server/_ssr/{ResponseView-Dk8Op622.mjs → ResponseView-CsTiNoOE.mjs} +3 -3
  21. package/.output/server/_ssr/{StreamingChunkSequence-AlS7PK8f.mjs → StreamingChunkSequence-Bgbzt23U.mjs} +2 -2
  22. package/.output/server/_ssr/{index-BGwvMN2M.mjs → index-P1gSpuM5.mjs} +2 -2
  23. package/.output/server/_ssr/index.mjs +2 -2
  24. package/.output/server/_ssr/{json-viewer-CKHkh5U3.mjs → json-viewer-10ciVGnc.mjs} +3 -3
  25. package/.output/server/_ssr/{router-BJMaHkr1.mjs → router-BJJ0VhsB.mjs} +357 -146
  26. package/.output/server/_tanstack-start-manifest_v-CltlYL3I.mjs +4 -0
  27. package/.output/server/index.mjs +71 -71
  28. package/package.json +1 -1
  29. package/src/components/ProxyViewer.tsx +19 -1
  30. package/src/components/ecosystem/AgentLabDialog.tsx +379 -0
  31. package/src/lib/ecosystemContract.ts +47 -0
  32. package/src/routes/api/ecosystem.packages.ts +263 -0
  33. package/.output/public/assets/index-D8cruW0P.css +0 -1
  34. package/.output/public/assets/index-DZyTpd2w.js +0 -1
  35. package/.output/server/_tanstack-start-manifest_v-C_HvRzgP.mjs +0 -4
@@ -2,10 +2,10 @@ import { c as createRouter, a as createRootRoute, b as createFileRoute, l as laz
2
2
  import { j as jsxRuntimeExports } from "../_libs/react.mjs";
3
3
  import { S as SWRConfig } from "../_libs/swr.mjs";
4
4
  import { existsSync, readFileSync, mkdirSync, writeFileSync, renameSync, copyFileSync, unlinkSync, createReadStream, readdirSync, statSync, rmSync, cpSync, createWriteStream } from "node:fs";
5
- import fs, { mkdir, appendFile, readFile, writeFile, readdir, open, stat, unlink, rm, rename } from "node:fs/promises";
5
+ import fs, { readFile, mkdir, appendFile, writeFile, readdir, open, stat, unlink, rm, rename } from "node:fs/promises";
6
6
  import { createInterface } from "node:readline";
7
7
  import { Buffer } from "node:buffer";
8
- import path, { basename, join, dirname, isAbsolute, resolve, relative } from "node:path";
8
+ import path, { join, basename, dirname, isAbsolute, resolve, relative } from "node:path";
9
9
  import { randomUUID as randomUUID$1, createHash } from "node:crypto";
10
10
  import { execFile, exec, spawn } from "node:child_process";
11
11
  import { fileURLToPath } from "node:url";
@@ -65,8 +65,8 @@ import "../_libs/immediate.mjs";
65
65
  import "../_libs/setimmediate.mjs";
66
66
  import "../_libs/pako.mjs";
67
67
  const faviconSvg = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20role='img'%20aria-label='Agent%20Inspector'%3e%3cg%20fill='none'%20stroke='%23f59e0b'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'%20%3e%3cpath%20d='M5%2013%20C5%209%208%207%2012%207%20C16%207%2019%209%2019%2013%20C19%2016%2016%2018%2012%2018%20C8%2018%205%2016%205%2013%20Z'%20/%3e%3cpath%20d='M5%2011%20C3.5%209.5%201.5%2010%202%2012.5%20C2.5%2014%204%2013.5%205%2012.5'%20/%3e%3cpath%20d='M19%2011%20C20.5%209.5%2022.5%2010%2022%2012.5%20C21.5%2014%2020%2013.5%2019%2012.5'%20/%3e%3cline%20x1='10'%20y1='7'%20x2='9.5'%20y2='5'%20/%3e%3cline%20x1='14'%20y1='7'%20x2='14.5'%20y2='5'%20/%3e%3cline%20x1='6.5'%20y1='16'%20x2='4.5'%20y2='19.5'%20/%3e%3cline%20x1='9'%20y1='17.5'%20x2='8'%20y2='20.5'%20/%3e%3cline%20x1='15'%20y1='17.5'%20x2='16'%20y2='20.5'%20/%3e%3cline%20x1='17.5'%20y1='16'%20x2='19.5'%20y2='19.5'%20/%3e%3c/g%3e%3ccircle%20cx='9.5'%20cy='4.5'%20r='0.9'%20fill='%23f59e0b'%20/%3e%3ccircle%20cx='14.5'%20cy='4.5'%20r='0.9'%20fill='%23f59e0b'%20/%3e%3c/svg%3e";
68
- const appCss = "/assets/index-D8cruW0P.css";
69
- const Route$D = createRootRoute({
68
+ const appCss = "/assets/index-0pt1umWP.css";
69
+ const Route$E = createRootRoute({
70
70
  head: () => ({
71
71
  meta: [
72
72
  { charSet: "utf-8" },
@@ -108,8 +108,8 @@ function RootDocument({ children }) {
108
108
  ] })
109
109
  ] });
110
110
  }
111
- const $$splitComponentImporter$1 = () => import("./index-BGwvMN2M.mjs");
112
- const Route$C = createFileRoute("/")({
111
+ const $$splitComponentImporter$1 = () => import("./index-P1gSpuM5.mjs");
112
+ const Route$D = createFileRoute("/")({
113
113
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
114
114
  });
115
115
  const B64URL_RE = /^[A-Za-z0-9_-]+$/;
@@ -151,8 +151,8 @@ function decodeSessionIdFromPath(encoded) {
151
151
  function getSessionPath(sessionId) {
152
152
  return `/session/${encodeSessionIdForPath(sessionId)}`;
153
153
  }
154
- const $$splitComponentImporter = () => import("../_sessionId-C43vEAWe.mjs");
155
- const Route$B = createFileRoute("/session/$sessionId")({
154
+ const $$splitComponentImporter = () => import("../_sessionId-CTqCAmUF.mjs");
155
+ const Route$C = createFileRoute("/session/$sessionId")({
156
156
  component: lazyRouteComponent($$splitComponentImporter, "component"),
157
157
  parseParams: (params) => ({
158
158
  sessionId: decodeSessionIdFromPath(params.sessionId)
@@ -1061,12 +1061,12 @@ function objectFromUnknown$1(value) {
1061
1061
  if (typeof value === "object" || typeof value === "function") return value;
1062
1062
  return null;
1063
1063
  }
1064
- function readProperty$4(value, name) {
1064
+ function readProperty$4(value, name2) {
1065
1065
  let current = objectFromUnknown$1(value);
1066
1066
  while (current !== null) {
1067
- const desc = Object.getOwnPropertyDescriptor(current, name);
1067
+ const desc = Object.getOwnPropertyDescriptor(current, name2);
1068
1068
  if (desc !== void 0) {
1069
- const propertyValue = Reflect.get(current, name);
1069
+ const propertyValue = Reflect.get(current, name2);
1070
1070
  return propertyValue;
1071
1071
  }
1072
1072
  const nextPrototype = Object.getPrototypeOf(current);
@@ -1074,8 +1074,8 @@ function readProperty$4(value, name) {
1074
1074
  }
1075
1075
  return void 0;
1076
1076
  }
1077
- function readFunction$1(value, name) {
1078
- const property = readProperty$4(value, name);
1077
+ function readFunction$1(value, name2) {
1078
+ const property = readProperty$4(value, name2);
1079
1079
  return typeof property === "function" ? property : null;
1080
1080
  }
1081
1081
  function callMethod$1(target, methodName, args) {
@@ -1259,16 +1259,16 @@ function entryParams(entry) {
1259
1259
  summary?.error ?? null
1260
1260
  ];
1261
1261
  }
1262
- function readNumber$1(row, name) {
1263
- const value = readProperty$4(row, name);
1262
+ function readNumber$1(row, name2) {
1263
+ const value = readProperty$4(row, name2);
1264
1264
  return typeof value === "number" && Number.isFinite(value) ? value : null;
1265
1265
  }
1266
- function readString$2(row, name) {
1267
- const value = readProperty$4(row, name);
1266
+ function readString$2(row, name2) {
1267
+ const value = readProperty$4(row, name2);
1268
1268
  return typeof value === "string" ? value : null;
1269
1269
  }
1270
- function readBoolean(row, name) {
1271
- return readNumber$1(row, name) === 1;
1270
+ function readBoolean(row, name2) {
1271
+ return readNumber$1(row, name2) === 1;
1272
1272
  }
1273
1273
  function readApiFormat(row) {
1274
1274
  const value = readString$2(row, "api_format");
@@ -1300,8 +1300,8 @@ function readWarnings(row) {
1300
1300
  return void 0;
1301
1301
  }
1302
1302
  }
1303
- function readRequiredNumber(row, name) {
1304
- const value = readNumber$1(row, name);
1303
+ function readRequiredNumber(row, name2) {
1304
+ const value = readNumber$1(row, name2);
1305
1305
  return value === null || !Number.isInteger(value) ? null : value;
1306
1306
  }
1307
1307
  function summaryFromRow(row, id) {
@@ -2130,12 +2130,12 @@ function objectFromUnknown(value) {
2130
2130
  if (typeof value === "object" || typeof value === "function") return value;
2131
2131
  return null;
2132
2132
  }
2133
- function readProperty$3(value, name) {
2133
+ function readProperty$3(value, name2) {
2134
2134
  let current = objectFromUnknown(value);
2135
2135
  while (current !== null) {
2136
- const desc = Object.getOwnPropertyDescriptor(current, name);
2136
+ const desc = Object.getOwnPropertyDescriptor(current, name2);
2137
2137
  if (desc !== void 0) {
2138
- const propertyValue = Reflect.get(current, name);
2138
+ const propertyValue = Reflect.get(current, name2);
2139
2139
  return propertyValue;
2140
2140
  }
2141
2141
  const nextPrototype = Object.getPrototypeOf(current);
@@ -2143,8 +2143,8 @@ function readProperty$3(value, name) {
2143
2143
  }
2144
2144
  return void 0;
2145
2145
  }
2146
- function readFunction(value, name) {
2147
- const property = readProperty$3(value, name);
2146
+ function readFunction(value, name2) {
2147
+ const property = readProperty$3(value, name2);
2148
2148
  return typeof property === "function" ? property : null;
2149
2149
  }
2150
2150
  function callMethod(target, methodName, args) {
@@ -2272,12 +2272,12 @@ async function archiveSessionLog(log) {
2272
2272
  closeDatabase(db);
2273
2273
  }
2274
2274
  }
2275
- function readString$1(row, name) {
2276
- const value = readProperty$3(row, name);
2275
+ function readString$1(row, name2) {
2276
+ const value = readProperty$3(row, name2);
2277
2277
  return typeof value === "string" ? value : null;
2278
2278
  }
2279
- function readNumber(row, name) {
2280
- const value = readProperty$3(row, name);
2279
+ function readNumber(row, name2) {
2280
+ const value = readProperty$3(row, name2);
2281
2281
  return typeof value === "number" && Number.isFinite(value) ? value : null;
2282
2282
  }
2283
2283
  function logFromJson(value) {
@@ -4381,12 +4381,12 @@ function updateFunctionCallFromItem(calls, key, item) {
4381
4381
  const call = ensureFunctionCall(calls, key);
4382
4382
  const id = readStringProperty$2(item, "id");
4383
4383
  const callId = readStringProperty$2(item, "call_id");
4384
- const name = readStringProperty$2(item, "name");
4384
+ const name2 = readStringProperty$2(item, "name");
4385
4385
  const args = readStringProperty$2(item, "arguments");
4386
4386
  const status = readStringProperty$2(item, "status");
4387
4387
  if (id !== null) call.id = id;
4388
4388
  if (callId !== null) call.call_id = callId;
4389
- if (name !== null) call.name = name;
4389
+ if (name2 !== null) call.name = name2;
4390
4390
  if (args !== null) call.arguments = args;
4391
4391
  if (status !== null) call.status = status;
4392
4392
  }
@@ -4974,8 +4974,8 @@ function registryModelMatches(model, registryModel) {
4974
4974
  function providerEntryMatches(provider, entry) {
4975
4975
  const providerName = normalizeProviderName(provider.name);
4976
4976
  const names = entry.name === void 0 ? [...entry.aliases] : [entry.name, ...entry.aliases];
4977
- const nameMatches = names.some((name) => {
4978
- const normalized = normalizeProviderName(name);
4977
+ const nameMatches = names.some((name2) => {
4978
+ const normalized = normalizeProviderName(name2);
4979
4979
  return providerName.includes(normalized) || normalized.includes(providerName);
4980
4980
  });
4981
4981
  if (nameMatches) return true;
@@ -5141,14 +5141,14 @@ function migrateLegacyProvider(provider, index, now) {
5141
5141
  const format = provider.format ?? provider.type;
5142
5142
  const fallbackName = format === "openai" ? "OpenAI" : format === "anthropic" ? "Anthropic" : "Legacy Provider";
5143
5143
  const trimmedName = provider.name?.trim();
5144
- const name = trimmedName !== void 0 && trimmedName !== "" ? trimmedName : `${fallbackName} ${index + 1}`;
5144
+ const name2 = trimmedName !== void 0 && trimmedName !== "" ? trimmedName : `${fallbackName} ${index + 1}`;
5145
5145
  const baseUrl = provider.baseUrl;
5146
5146
  const anthropicBaseUrl = provider.anthropicBaseUrl ?? (format === "anthropic" && baseUrl !== void 0 ? baseUrl : "");
5147
5147
  const openaiBaseUrl = provider.openaiBaseUrl ?? (format === "openai" && baseUrl !== void 0 ? baseUrl : "");
5148
5148
  const openaiResponsesBaseUrl = provider.openaiResponsesBaseUrl ?? "";
5149
5149
  const candidate = {
5150
5150
  id: provider.id ?? randomUUID(),
5151
- name,
5151
+ name: name2,
5152
5152
  apiKey,
5153
5153
  model: provider.model,
5154
5154
  models: legacyModels(provider),
@@ -5354,7 +5354,7 @@ function redactProviders(providers) {
5354
5354
  function normalizeApiKey(apiKey) {
5355
5355
  return apiKey.replace(/^Bearer\s+/i, "").trim();
5356
5356
  }
5357
- function addProvider(name, apiKey, format, baseUrl, models, authHeader, apiDocsUrl, anthropicBaseUrl, openaiBaseUrl, source, modelMetadataUrl, modelMetadata, openaiResponsesBaseUrl) {
5357
+ function addProvider(name2, apiKey, format, baseUrl, models, authHeader, apiDocsUrl, anthropicBaseUrl, openaiBaseUrl, source, modelMetadataUrl, modelMetadata, openaiResponsesBaseUrl) {
5358
5358
  const providers = getProviders();
5359
5359
  const normalizedKey = normalizeApiKey(apiKey);
5360
5360
  const resolvedAnthropicUrl = anthropicBaseUrl ?? "";
@@ -5385,7 +5385,7 @@ function addProvider(name, apiKey, format, baseUrl, models, authHeader, apiDocsU
5385
5385
  const newProvider = withBuiltinProviderModelMetadata(
5386
5386
  {
5387
5387
  id: randomUUID(),
5388
- name,
5388
+ name: name2,
5389
5389
  apiKey: normalizedKey,
5390
5390
  format: format ?? (anthropicBaseUrl !== void 0 ? "anthropic" : openaiBaseUrl !== void 0 || openaiResponsesBaseUrl !== void 0 ? "openai" : void 0),
5391
5391
  baseUrl,
@@ -5526,8 +5526,8 @@ function getModelUsageName(model, providerName) {
5526
5526
  }
5527
5527
  return model;
5528
5528
  }
5529
- function normalizeModelName(name) {
5530
- return name.toLowerCase().replace(/\s+/g, "-");
5529
+ function normalizeModelName(name2) {
5530
+ return name2.toLowerCase().replace(/\s+/g, "-");
5531
5531
  }
5532
5532
  const ZHIPU_MODEL_PREFIXES = ["glm-", "charglm-", "cogview-", "embedding-", "rerank-"];
5533
5533
  const ZHIPU_PROVIDER_ALIASES = ["zhipu", "zhipuai", "bigmodel", "zai", "glm"];
@@ -5536,8 +5536,8 @@ const ZHIPU_BASE_URL_MARKERS = [
5536
5536
  "open.bigmodel.cn/api/coding/paas/v4",
5537
5537
  "open.bigmodel.cn/api/anthropic"
5538
5538
  ];
5539
- function normalizeProviderAlias(name) {
5540
- return name.toLowerCase().replace(/[^a-z0-9]/g, "");
5539
+ function normalizeProviderAlias(name2) {
5540
+ return name2.toLowerCase().replace(/[^a-z0-9]/g, "");
5541
5541
  }
5542
5542
  function providerRoutingUrls(provider) {
5543
5543
  const urls = [];
@@ -5851,8 +5851,8 @@ const CLIENT_HEADERS = {
5851
5851
  cwd: "x-agent-inspector-client-cwd",
5852
5852
  projectFolder: "x-agent-inspector-client-project-folder"
5853
5853
  };
5854
- function readIntHeader(headers, name) {
5855
- const raw = headers.get(name);
5854
+ function readIntHeader(headers, name2) {
5855
+ const raw = headers.get(name2);
5856
5856
  if (raw === null || raw === "") return null;
5857
5857
  const parsed = parseInt(raw, 10);
5858
5858
  if (!Number.isInteger(parsed) || parsed < 0) return null;
@@ -6495,10 +6495,10 @@ function extractAnthropicToolSchemas(request) {
6495
6495
  const tools = /* @__PURE__ */ new Map();
6496
6496
  for (const tool of readArray(request, "tools")) {
6497
6497
  if (!isRecord$1(tool)) continue;
6498
- const name = readString(tool, "name");
6499
- if (name === null || name === "") continue;
6500
- tools.set(name, {
6501
- name,
6498
+ const name2 = readString(tool, "name");
6499
+ if (name2 === null || name2 === "") continue;
6500
+ tools.set(name2, {
6501
+ name: name2,
6502
6502
  schema: readObject(tool, "input_schema")
6503
6503
  });
6504
6504
  }
@@ -6508,11 +6508,11 @@ function extractOpenAIToolSchemas(request) {
6508
6508
  const tools = /* @__PURE__ */ new Map();
6509
6509
  for (const tool of readArray(request, "tools")) {
6510
6510
  const functionDefinition = readObject(tool, "function");
6511
- const name = functionDefinition === null ? readString(tool, "name") : readString(functionDefinition, "name") ?? readString(tool, "name");
6512
- if (name === null || name === "") continue;
6511
+ const name2 = functionDefinition === null ? readString(tool, "name") : readString(functionDefinition, "name") ?? readString(tool, "name");
6512
+ if (name2 === null || name2 === "") continue;
6513
6513
  const parameters = functionDefinition === null ? readObject(tool, "parameters") : readObject(functionDefinition, "parameters") ?? readObject(tool, "parameters");
6514
- tools.set(name, {
6515
- name,
6514
+ tools.set(name2, {
6515
+ name: name2,
6516
6516
  schema: parameters
6517
6517
  });
6518
6518
  }
@@ -6520,8 +6520,8 @@ function extractOpenAIToolSchemas(request) {
6520
6520
  }
6521
6521
  function mergeToolSchemas(primary, secondary) {
6522
6522
  const merged = new Map(primary);
6523
- for (const [name, schema] of secondary) {
6524
- if (!merged.has(name)) merged.set(name, schema);
6523
+ for (const [name2, schema] of secondary) {
6524
+ if (!merged.has(name2)) merged.set(name2, schema);
6525
6525
  }
6526
6526
  return merged;
6527
6527
  }
@@ -6563,10 +6563,10 @@ function extractOpenAIToolCalls(response) {
6563
6563
  let callIndex = 0;
6564
6564
  for (const call of readArray(message, "tool_calls")) {
6565
6565
  const functionCall = readObject(call, "function");
6566
- const name = functionCall === null ? null : readString(functionCall, "name");
6566
+ const name2 = functionCall === null ? null : readString(functionCall, "name");
6567
6567
  const parsedArguments = functionCall === null ? { value: {}, issue: "function block is missing" } : parseOpenAIArguments(readProperty$1(functionCall, "arguments"));
6568
6568
  calls.push({
6569
- name,
6569
+ name: name2,
6570
6570
  arguments: parsedArguments.value,
6571
6571
  argumentIssue: parsedArguments.issue,
6572
6572
  location: `choices[${choiceIndex}].message.tool_calls[${callIndex}]`
@@ -7341,10 +7341,10 @@ function buildProxyHeaders(originalHeaders, captureRawHeaders) {
7341
7341
  }
7342
7342
  headers.set(HEADER_USER_AGENT, PROXY_IDENTITY);
7343
7343
  headers.set(HEADER_X_PROXY_IDENTITY, PROXY_IDENTITY);
7344
- for (const name of PRESERVE_HEADERS) {
7345
- const value = originalHeaders.get(name);
7344
+ for (const name2 of PRESERVE_HEADERS) {
7345
+ const value = originalHeaders.get(name2);
7346
7346
  if (value !== null) {
7347
- headers.set(name, value);
7347
+ headers.set(name2, value);
7348
7348
  }
7349
7349
  }
7350
7350
  return { headers, rawHeaders };
@@ -7562,7 +7562,7 @@ async function handleProxy(req) {
7562
7562
  }
7563
7563
  return handleStreamingResponse(upstreamRes, req, startTime, upstreamUrl, log, captureFullDetails);
7564
7564
  }
7565
- const Route$A = createFileRoute("/proxy/$")({
7565
+ const Route$B = createFileRoute("/proxy/$")({
7566
7566
  server: {
7567
7567
  handlers: {
7568
7568
  GET: ({ request }) => handleProxy(request),
@@ -7583,7 +7583,7 @@ function parsePositiveInt$4(value) {
7583
7583
  function parseBooleanFlag(value) {
7584
7584
  return value === "1" || value === "true";
7585
7585
  }
7586
- const Route$z = createFileRoute("/api/sessions")({
7586
+ const Route$A = createFileRoute("/api/sessions")({
7587
7587
  server: {
7588
7588
  handlers: {
7589
7589
  GET: async ({ request }) => {
@@ -9048,7 +9048,7 @@ function parsePositiveInt$3(value, fallback) {
9048
9048
  if (!Number.isInteger(parsed) || parsed < 1) return fallback;
9049
9049
  return parsed;
9050
9050
  }
9051
- const Route$y = createFileRoute("/api/runs")({
9051
+ const Route$z = createFileRoute("/api/runs")({
9052
9052
  server: {
9053
9053
  handlers: {
9054
9054
  GET: ({ request }) => {
@@ -9094,7 +9094,7 @@ const ProviderInputSchema = object({
9094
9094
  modelMetadata: array(ProviderModelMetadataSchema).optional(),
9095
9095
  source: _enum(["company", "personal"]).optional()
9096
9096
  });
9097
- const Route$x = createFileRoute("/api/providers")({
9097
+ const Route$y = createFileRoute("/api/providers")({
9098
9098
  server: {
9099
9099
  handlers: {
9100
9100
  GET: ({ request }) => {
@@ -9129,15 +9129,17 @@ const Route$x = createFileRoute("/api/providers")({
9129
9129
  }
9130
9130
  }
9131
9131
  });
9132
- const Route$w = createFileRoute("/api/models")({
9132
+ const Route$x = createFileRoute("/api/models")({
9133
9133
  server: {
9134
9134
  handlers: {
9135
9135
  GET: () => Response.json(getModels())
9136
9136
  }
9137
9137
  }
9138
9138
  });
9139
- const version = "3.0.5";
9139
+ const name = "@tonyclaw/agent-inspector";
9140
+ const version = "3.0.6";
9140
9141
  const packageJson = {
9142
+ name,
9141
9143
  version
9142
9144
  };
9143
9145
  let overridePort = null;
@@ -9163,8 +9165,8 @@ function getCurrentPort() {
9163
9165
  "Inspector server port not initialized: PORT env var is unset and setCurrentPort() has not been called"
9164
9166
  );
9165
9167
  }
9166
- function envString(name) {
9167
- const value = process.env[name];
9168
+ function envString(name2) {
9169
+ const value = process.env[name2];
9168
9170
  if (value === void 0) return null;
9169
9171
  const trimmed = value.trim();
9170
9172
  return trimmed.length === 0 ? null : trimmed;
@@ -10885,8 +10887,8 @@ const WRITE_TOOL_NAMES = /* @__PURE__ */ new Set([
10885
10887
  "inspector_promote_knowledge_candidate"
10886
10888
  ]);
10887
10889
  function mcpCapabilities() {
10888
- const readTools = TOOL_NAMES.filter((name) => !WRITE_TOOL_NAMES.has(name));
10889
- const writeTools = TOOL_NAMES.filter((name) => WRITE_TOOL_NAMES.has(name));
10890
+ const readTools = TOOL_NAMES.filter((name2) => !WRITE_TOOL_NAMES.has(name2));
10891
+ const writeTools = TOOL_NAMES.filter((name2) => WRITE_TOOL_NAMES.has(name2));
10890
10892
  return {
10891
10893
  serverInfo: {
10892
10894
  name: "agent-inspector",
@@ -10973,8 +10975,8 @@ function safeWriteCall(toolName, fn) {
10973
10975
  return fn();
10974
10976
  });
10975
10977
  }
10976
- function variableString(variables, name) {
10977
- const value = variables[name];
10978
+ function variableString(variables, name2) {
10979
+ const value = variables[name2];
10978
10980
  if (Array.isArray(value)) return value[0] ?? null;
10979
10981
  return value ?? null;
10980
10982
  }
@@ -12242,7 +12244,7 @@ const PROMPT_NAMES = [
12242
12244
  "inspector_generate_group_report",
12243
12245
  "inspector_extract_repro_steps"
12244
12246
  ];
12245
- const Route$v = createFileRoute("/api/mcp")({
12247
+ const Route$w = createFileRoute("/api/mcp")({
12246
12248
  server: {
12247
12249
  handlers: {
12248
12250
  // The SDK may issue either POST, GET, or DELETE. TanStack Start only
@@ -12361,7 +12363,7 @@ function parseOptionalPositiveInt(value) {
12361
12363
  if (!Number.isInteger(parsed) || parsed < 1) return { ok: false };
12362
12364
  return { ok: true, value: parsed };
12363
12365
  }
12364
- const Route$u = createFileRoute("/api/logs")({
12366
+ const Route$v = createFileRoute("/api/logs")({
12365
12367
  server: {
12366
12368
  handlers: {
12367
12369
  GET: async ({ request }) => {
@@ -12470,7 +12472,7 @@ const Route$u = createFileRoute("/api/logs")({
12470
12472
  }
12471
12473
  });
12472
12474
  logger.debug("Health endpoint loaded");
12473
- const Route$t = createFileRoute("/api/health")({
12475
+ const Route$u = createFileRoute("/api/health")({
12474
12476
  server: {
12475
12477
  handlers: {
12476
12478
  GET: () => {
@@ -12507,7 +12509,7 @@ function readDeleteEvidenceFlag$1(request) {
12507
12509
  return { ok: false };
12508
12510
  }
12509
12511
  }
12510
- const Route$s = createFileRoute("/api/groups")({
12512
+ const Route$t = createFileRoute("/api/groups")({
12511
12513
  server: {
12512
12514
  handlers: {
12513
12515
  GET: () => Response.json(listInspectorGroups()),
@@ -12551,7 +12553,7 @@ const RuntimeConfigPatchSchema = object({
12551
12553
  }).strict().refine((v) => Object.keys(v).length > 0, {
12552
12554
  message: "At least one field must be provided"
12553
12555
  });
12554
- const Route$r = createFileRoute("/api/config")({
12556
+ const Route$s = createFileRoute("/api/config")({
12555
12557
  server: {
12556
12558
  handlers: {
12557
12559
  GET: () => {
@@ -13160,7 +13162,7 @@ function parseFilters(url) {
13160
13162
  source: sourceResult.success ? sourceResult.data : void 0
13161
13163
  };
13162
13164
  }
13163
- const Route$q = createFileRoute("/api/alerts")({
13165
+ const Route$r = createFileRoute("/api/alerts")({
13164
13166
  server: {
13165
13167
  handlers: {
13166
13168
  GET: async ({ request }) => {
@@ -13185,7 +13187,7 @@ async function readJsonBody$4(request) {
13185
13187
  return { ok: false };
13186
13188
  }
13187
13189
  }
13188
- const Route$p = createFileRoute("/api/runs/$runId")({
13190
+ const Route$q = createFileRoute("/api/runs/$runId")({
13189
13191
  server: {
13190
13192
  handlers: {
13191
13193
  GET: ({ params }) => {
@@ -13660,7 +13662,7 @@ function scanExternalProviders() {
13660
13662
  }
13661
13663
  return { providers: filteredProviders, warnings };
13662
13664
  }
13663
- const Route$o = createFileRoute("/api/providers/scan")({
13665
+ const Route$p = createFileRoute("/api/providers/scan")({
13664
13666
  server: {
13665
13667
  handlers: {
13666
13668
  GET: () => {
@@ -13681,7 +13683,7 @@ const Route$o = createFileRoute("/api/providers/scan")({
13681
13683
  }
13682
13684
  });
13683
13685
  union([string(), object({ providers: unknown() })]);
13684
- const Route$n = createFileRoute("/api/providers/import")({
13686
+ const Route$o = createFileRoute("/api/providers/import")({
13685
13687
  server: {
13686
13688
  handlers: {
13687
13689
  POST: async ({ request }) => {
@@ -13714,7 +13716,7 @@ const Route$n = createFileRoute("/api/providers/import")({
13714
13716
  }
13715
13717
  }
13716
13718
  });
13717
- const Route$m = createFileRoute("/api/providers/export")({
13719
+ const Route$n = createFileRoute("/api/providers/export")({
13718
13720
  server: {
13719
13721
  handlers: {
13720
13722
  GET: ({ request }) => {
@@ -13748,7 +13750,7 @@ const ProviderUpdateSchema = object({
13748
13750
  modelMetadata: array(ProviderModelMetadataSchema).optional(),
13749
13751
  source: _enum(["company", "personal"]).optional()
13750
13752
  });
13751
- const Route$l = createFileRoute("/api/providers/$providerId")({
13753
+ const Route$m = createFileRoute("/api/providers/$providerId")({
13752
13754
  server: {
13753
13755
  handlers: {
13754
13756
  GET: ({ params, request }) => {
@@ -13783,7 +13785,7 @@ const Route$l = createFileRoute("/api/providers/$providerId")({
13783
13785
  }
13784
13786
  });
13785
13787
  const INITIAL_STREAM_LOG_LIMIT = 100;
13786
- const Route$k = createFileRoute("/api/logs/stream")({
13788
+ const Route$l = createFileRoute("/api/logs/stream")({
13787
13789
  server: {
13788
13790
  handlers: {
13789
13791
  GET: ({ request }) => {
@@ -13870,9 +13872,9 @@ const StreamingChunksImportSchema = object({
13870
13872
  truncated: boolean().optional().default(false)
13871
13873
  });
13872
13874
  const SEMVER_MAJOR_PATTERN = /^([0-9]+)\.[0-9]+\.[0-9]+(?:[-+].*)?$/;
13873
- function readRecordProperty(value, name) {
13875
+ function readRecordProperty(value, name2) {
13874
13876
  if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
13875
- const desc = Object.getOwnPropertyDescriptor(value, name);
13877
+ const desc = Object.getOwnPropertyDescriptor(value, name2);
13876
13878
  return desc === void 0 ? void 0 : desc.value;
13877
13879
  }
13878
13880
  function parseJson(text) {
@@ -13906,13 +13908,13 @@ function parseJsonlLogs(text) {
13906
13908
  }
13907
13909
  return { logs, skipped };
13908
13910
  }
13909
- function readStringProperty$1(value, name) {
13910
- const property = readRecordProperty(value, name);
13911
+ function readStringProperty$1(value, name2) {
13912
+ const property = readRecordProperty(value, name2);
13911
13913
  return typeof property === "string" ? property : null;
13912
13914
  }
13913
- function hasProperty(value, name) {
13915
+ function hasProperty(value, name2) {
13914
13916
  if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
13915
- return Object.getOwnPropertyDescriptor(value, name) !== void 0;
13917
+ return Object.getOwnPropertyDescriptor(value, name2) !== void 0;
13916
13918
  }
13917
13919
  function modelFromRequestText(requestText) {
13918
13920
  return readStringProperty$1(parseJson(requestText), "model");
@@ -14223,7 +14225,7 @@ function sessionNameFromImportFileName(fileName) {
14223
14225
  function isUploadedFile(value) {
14224
14226
  return value instanceof File;
14225
14227
  }
14226
- const Route$j = createFileRoute("/api/logs/import")({
14228
+ const Route$k = createFileRoute("/api/logs/import")({
14227
14229
  server: {
14228
14230
  handlers: {
14229
14231
  POST: async ({ request }) => {
@@ -14260,7 +14262,7 @@ const Route$j = createFileRoute("/api/logs/import")({
14260
14262
  }
14261
14263
  }
14262
14264
  });
14263
- const Route$i = createFileRoute("/api/logs/$id")({
14265
+ const Route$j = createFileRoute("/api/logs/$id")({
14264
14266
  server: {
14265
14267
  handlers: {
14266
14268
  GET: async ({ params }) => {
@@ -14797,7 +14799,7 @@ const SearchBodySchema = object({
14797
14799
  query: string().min(1),
14798
14800
  project: string().optional()
14799
14801
  });
14800
- const Route$h = createFileRoute("/api/knowledge/search")({
14802
+ const Route$i = createFileRoute("/api/knowledge/search")({
14801
14803
  server: {
14802
14804
  handlers: {
14803
14805
  GET: async ({ request }) => {
@@ -14819,7 +14821,7 @@ const Route$h = createFileRoute("/api/knowledge/search")({
14819
14821
  }
14820
14822
  }
14821
14823
  });
14822
- const Route$g = createFileRoute("/api/knowledge/project-context")({
14824
+ const Route$h = createFileRoute("/api/knowledge/project-context")({
14823
14825
  server: {
14824
14826
  handlers: {
14825
14827
  GET: async ({ request }) => {
@@ -14901,7 +14903,7 @@ function updateCandidateDraft(id, updates) {
14901
14903
  candidates.set(id, updated);
14902
14904
  return updated;
14903
14905
  }
14904
- const Route$f = createFileRoute("/api/knowledge/candidates")({
14906
+ const Route$g = createFileRoute("/api/knowledge/candidates")({
14905
14907
  server: {
14906
14908
  handlers: {
14907
14909
  GET: () => Response.json({ candidates: listCandidates() })
@@ -14936,7 +14938,7 @@ function readDeleteEvidenceFlag(request) {
14936
14938
  return { ok: false };
14937
14939
  }
14938
14940
  }
14939
- const Route$e = createFileRoute("/api/groups/$groupId")({
14941
+ const Route$f = createFileRoute("/api/groups/$groupId")({
14940
14942
  server: {
14941
14943
  handlers: {
14942
14944
  GET: ({ params }) => {
@@ -14983,6 +14985,209 @@ const Route$e = createFileRoute("/api/groups/$groupId")({
14983
14985
  }
14984
14986
  }
14985
14987
  });
14988
+ const ECOSYSTEM_PACKAGES = [
14989
+ {
14990
+ id: "inspector",
14991
+ name: "Agent Inspector",
14992
+ npmName: "@tonyclaw/agent-inspector",
14993
+ capability: "Observe",
14994
+ description: "Captures proxy traffic, sessions, turns, tools, providers, and raw bodies.",
14995
+ workflow: "Keep every agent run visible and reloadable.",
14996
+ primary: true
14997
+ },
14998
+ {
14999
+ id: "mcp",
15000
+ name: "Inspector MCP",
15001
+ npmName: "@tonyclaw/agent-inspector-mcp",
15002
+ capability: "Connect",
15003
+ description: "Exposes sessions, logs, providers, runs, and evidence to MCP clients.",
15004
+ workflow: "Let Codex, OpenCode, MiMo Code, and other tools query Inspector as memory.",
15005
+ primary: true
15006
+ },
15007
+ {
15008
+ id: "eval-harness",
15009
+ name: "Eval Harness",
15010
+ npmName: "@tonyclaw/eval-harness",
15011
+ capability: "Evaluate",
15012
+ description: "Runs MCP-aware agent evaluations, runner presets, regressions, and model bakeoffs.",
15013
+ workflow: "Promote Inspector evidence into repeatable evaluation batches.",
15014
+ primary: false
15015
+ }
15016
+ ];
15017
+ const RUNNER_PRESETS = [
15018
+ {
15019
+ id: "opencode",
15020
+ name: "OpenCode",
15021
+ validatedVersion: "1.17.11",
15022
+ binary: "opencode",
15023
+ modelFlag: "--model",
15024
+ variantFlag: "--variant",
15025
+ tools: ["opencode", "node"],
15026
+ logDir: "opencode",
15027
+ skillsDir: ".opencode/skills",
15028
+ agentsDir: ".opencode/agents"
15029
+ },
15030
+ {
15031
+ id: "mimo",
15032
+ name: "MiMo Code",
15033
+ validatedVersion: "0.1.4",
15034
+ binary: "mimo",
15035
+ modelFlag: "--model",
15036
+ variantFlag: "--agent",
15037
+ tools: ["mimo", "node"],
15038
+ logDir: "mimocode",
15039
+ skillsDir: ".mimocode/skills",
15040
+ agentsDir: ".mimocode/agents"
15041
+ },
15042
+ {
15043
+ id: "codex",
15044
+ name: "Codex CLI",
15045
+ validatedVersion: "0.142.5",
15046
+ binary: "codex",
15047
+ modelFlag: "--model",
15048
+ variantFlag: null,
15049
+ tools: ["codex"],
15050
+ logDir: "codex",
15051
+ skillsDir: ".codex/skills",
15052
+ agentsDir: ".codex/agents"
15053
+ },
15054
+ {
15055
+ id: "claude",
15056
+ name: "Claude Code",
15057
+ validatedVersion: "2.1.195",
15058
+ binary: "claude",
15059
+ modelFlag: "--model",
15060
+ variantFlag: null,
15061
+ tools: ["claude"],
15062
+ logDir: "claude",
15063
+ skillsDir: ".claude/skills",
15064
+ agentsDir: ".claude/agents"
15065
+ }
15066
+ ];
15067
+ const NPM_TIMEOUT_MS = 4e3;
15068
+ function npmCommand() {
15069
+ return process.platform === "win32" ? "npm.cmd" : "npm";
15070
+ }
15071
+ function runNpm(args) {
15072
+ return new Promise((resolve2) => {
15073
+ try {
15074
+ execFile(
15075
+ npmCommand(),
15076
+ [...args],
15077
+ { timeout: NPM_TIMEOUT_MS, windowsHide: true },
15078
+ (error, stdout) => {
15079
+ resolve2({
15080
+ ok: error === null,
15081
+ stdout: String(stdout).trim()
15082
+ });
15083
+ }
15084
+ );
15085
+ } catch {
15086
+ resolve2({ ok: false, stdout: "" });
15087
+ }
15088
+ });
15089
+ }
15090
+ async function readGlobalNpmRoot() {
15091
+ const result = await runNpm(["root", "-g"]);
15092
+ if (!result.ok || result.stdout.length === 0) return null;
15093
+ return result.stdout;
15094
+ }
15095
+ function readGlobalNpmRootFallback() {
15096
+ switch (process.platform) {
15097
+ case "win32": {
15098
+ const appData = process.env["APPDATA"];
15099
+ if (appData === void 0 || appData.length === 0) return null;
15100
+ return join(appData, "npm", "node_modules");
15101
+ }
15102
+ case "darwin":
15103
+ case "linux":
15104
+ case "aix":
15105
+ case "freebsd":
15106
+ case "openbsd":
15107
+ case "sunos": {
15108
+ const prefix = process.env["PREFIX"];
15109
+ if (prefix !== void 0 && prefix.length > 0) return join(prefix, "lib", "node_modules");
15110
+ return "/usr/local/lib/node_modules";
15111
+ }
15112
+ case "android":
15113
+ case "cygwin":
15114
+ case "haiku":
15115
+ case "netbsd":
15116
+ return null;
15117
+ }
15118
+ return null;
15119
+ }
15120
+ function packageJsonPath(globalRoot, npmName) {
15121
+ const parts = npmName.split("/");
15122
+ return join(globalRoot, ...parts, "package.json");
15123
+ }
15124
+ function readJsonStringField(raw, field) {
15125
+ if (typeof raw !== "object" || raw === null) return null;
15126
+ const descriptor = Object.getOwnPropertyDescriptor(raw, field);
15127
+ if (descriptor === void 0) return null;
15128
+ return typeof descriptor.value === "string" ? descriptor.value : null;
15129
+ }
15130
+ async function readInstalledVersion(globalRoot, npmName) {
15131
+ if (npmName === packageJson.name) return packageJson.version;
15132
+ if (globalRoot === null) return null;
15133
+ try {
15134
+ const raw = await readFile(packageJsonPath(globalRoot, npmName), "utf8");
15135
+ return readJsonStringField(JSON.parse(raw), "version");
15136
+ } catch {
15137
+ return null;
15138
+ }
15139
+ }
15140
+ async function readLatestVersion(npmName) {
15141
+ const result = await runNpm(["view", npmName, "version", "--json"]);
15142
+ if (!result.ok || result.stdout.length === 0) return null;
15143
+ try {
15144
+ const parsed = JSON.parse(result.stdout);
15145
+ return typeof parsed === "string" && parsed.length > 0 ? parsed : null;
15146
+ } catch {
15147
+ return result.stdout.length > 0 ? result.stdout : null;
15148
+ }
15149
+ }
15150
+ function packageState(installedVersion, latestVersion) {
15151
+ if (installedVersion !== null && latestVersion !== null && installedVersion !== latestVersion) {
15152
+ return "update-available";
15153
+ }
15154
+ if (installedVersion !== null) return "installed";
15155
+ if (latestVersion !== null) return "available";
15156
+ return "planned";
15157
+ }
15158
+ async function describePackage(definition, globalRoot) {
15159
+ const [installedVersion, latestVersion] = await Promise.all([
15160
+ readInstalledVersion(globalRoot, definition.npmName),
15161
+ readLatestVersion(definition.npmName)
15162
+ ]);
15163
+ const state = packageState(installedVersion, latestVersion);
15164
+ return {
15165
+ ...definition,
15166
+ installCommand: `npm install -g ${definition.npmName}`,
15167
+ installedVersion,
15168
+ latestVersion,
15169
+ state
15170
+ };
15171
+ }
15172
+ async function listEcosystemPackages() {
15173
+ const globalRoot = await readGlobalNpmRoot() ?? readGlobalNpmRootFallback();
15174
+ return Promise.all(
15175
+ ECOSYSTEM_PACKAGES.map((definition) => describePackage(definition, globalRoot))
15176
+ );
15177
+ }
15178
+ const Route$e = createFileRoute("/api/ecosystem/packages")({
15179
+ server: {
15180
+ handlers: {
15181
+ GET: async () => {
15182
+ return Response.json({
15183
+ checkedAt: (/* @__PURE__ */ new Date()).toISOString(),
15184
+ packages: await listEcosystemPackages(),
15185
+ runnerPresets: RUNNER_PRESETS
15186
+ });
15187
+ }
15188
+ }
15189
+ }
15190
+ });
14986
15191
  const Route$d = createFileRoute("/api/config/paths")({
14987
15192
  server: {
14988
15193
  handlers: {
@@ -15241,8 +15446,8 @@ function headersToRecord(headers) {
15241
15446
  });
15242
15447
  return result;
15243
15448
  }
15244
- function redactHeaderValue(name, value) {
15245
- const lowerName = name.toLowerCase();
15449
+ function redactHeaderValue(name2, value) {
15450
+ const lowerName = name2.toLowerCase();
15246
15451
  if (!SENSITIVE_HEADER_NAMES.has(lowerName)) {
15247
15452
  return value;
15248
15453
  }
@@ -15253,8 +15458,8 @@ function redactHeaderValue(name, value) {
15253
15458
  }
15254
15459
  function redactHeaders(headers) {
15255
15460
  const result = {};
15256
- for (const [name, value] of Object.entries(headers)) {
15257
- result[name] = redactHeaderValue(name, value);
15461
+ for (const [name2, value] of Object.entries(headers)) {
15462
+ result[name2] = redactHeaderValue(name2, value);
15258
15463
  }
15259
15464
  return result;
15260
15465
  }
@@ -16034,10 +16239,10 @@ const Route$8 = createFileRoute("/api/logs/$id/replay")({
16034
16239
  headers.set(HEADER_USER_AGENT, PROXY_IDENTITY);
16035
16240
  headers.set(HEADER_X_PROXY_IDENTITY, PROXY_IDENTITY);
16036
16241
  headers.set(HEADER_CONTENT_TYPE, "application/json");
16037
- for (const name of PRESERVE_HEADERS) {
16038
- const value = log.rawHeaders?.[name.toLowerCase()];
16242
+ for (const name2 of PRESERVE_HEADERS) {
16243
+ const value = log.rawHeaders?.[name2.toLowerCase()];
16039
16244
  if (value !== void 0) {
16040
- headers.set(name, value);
16245
+ headers.set(name2, value);
16041
16246
  }
16042
16247
  }
16043
16248
  setUpstreamHost(headers, upstreamBase);
@@ -16970,131 +17175,136 @@ const Route = createFileRoute("/api/knowledge/candidates/$candidateId/promote")(
16970
17175
  }
16971
17176
  }
16972
17177
  });
16973
- const IndexRoute = Route$C.update({
17178
+ const IndexRoute = Route$D.update({
16974
17179
  id: "/",
16975
17180
  path: "/",
16976
- getParentRoute: () => Route$D
17181
+ getParentRoute: () => Route$E
16977
17182
  });
16978
- const SessionSessionIdRoute = Route$B.update({
17183
+ const SessionSessionIdRoute = Route$C.update({
16979
17184
  id: "/session/$sessionId",
16980
17185
  path: "/session/$sessionId",
16981
- getParentRoute: () => Route$D
17186
+ getParentRoute: () => Route$E
16982
17187
  });
16983
- const ProxySplatRoute = Route$A.update({
17188
+ const ProxySplatRoute = Route$B.update({
16984
17189
  id: "/proxy/$",
16985
17190
  path: "/proxy/$",
16986
- getParentRoute: () => Route$D
17191
+ getParentRoute: () => Route$E
16987
17192
  });
16988
- const ApiSessionsRoute = Route$z.update({
17193
+ const ApiSessionsRoute = Route$A.update({
16989
17194
  id: "/api/sessions",
16990
17195
  path: "/api/sessions",
16991
- getParentRoute: () => Route$D
17196
+ getParentRoute: () => Route$E
16992
17197
  });
16993
- const ApiRunsRoute = Route$y.update({
17198
+ const ApiRunsRoute = Route$z.update({
16994
17199
  id: "/api/runs",
16995
17200
  path: "/api/runs",
16996
- getParentRoute: () => Route$D
17201
+ getParentRoute: () => Route$E
16997
17202
  });
16998
- const ApiProvidersRoute = Route$x.update({
17203
+ const ApiProvidersRoute = Route$y.update({
16999
17204
  id: "/api/providers",
17000
17205
  path: "/api/providers",
17001
- getParentRoute: () => Route$D
17206
+ getParentRoute: () => Route$E
17002
17207
  });
17003
- const ApiModelsRoute = Route$w.update({
17208
+ const ApiModelsRoute = Route$x.update({
17004
17209
  id: "/api/models",
17005
17210
  path: "/api/models",
17006
- getParentRoute: () => Route$D
17211
+ getParentRoute: () => Route$E
17007
17212
  });
17008
- const ApiMcpRoute = Route$v.update({
17213
+ const ApiMcpRoute = Route$w.update({
17009
17214
  id: "/api/mcp",
17010
17215
  path: "/api/mcp",
17011
- getParentRoute: () => Route$D
17216
+ getParentRoute: () => Route$E
17012
17217
  });
17013
- const ApiLogsRoute = Route$u.update({
17218
+ const ApiLogsRoute = Route$v.update({
17014
17219
  id: "/api/logs",
17015
17220
  path: "/api/logs",
17016
- getParentRoute: () => Route$D
17221
+ getParentRoute: () => Route$E
17017
17222
  });
17018
- const ApiHealthRoute = Route$t.update({
17223
+ const ApiHealthRoute = Route$u.update({
17019
17224
  id: "/api/health",
17020
17225
  path: "/api/health",
17021
- getParentRoute: () => Route$D
17226
+ getParentRoute: () => Route$E
17022
17227
  });
17023
- const ApiGroupsRoute = Route$s.update({
17228
+ const ApiGroupsRoute = Route$t.update({
17024
17229
  id: "/api/groups",
17025
17230
  path: "/api/groups",
17026
- getParentRoute: () => Route$D
17231
+ getParentRoute: () => Route$E
17027
17232
  });
17028
- const ApiConfigRoute = Route$r.update({
17233
+ const ApiConfigRoute = Route$s.update({
17029
17234
  id: "/api/config",
17030
17235
  path: "/api/config",
17031
- getParentRoute: () => Route$D
17236
+ getParentRoute: () => Route$E
17032
17237
  });
17033
- const ApiAlertsRoute = Route$q.update({
17238
+ const ApiAlertsRoute = Route$r.update({
17034
17239
  id: "/api/alerts",
17035
17240
  path: "/api/alerts",
17036
- getParentRoute: () => Route$D
17241
+ getParentRoute: () => Route$E
17037
17242
  });
17038
- const ApiRunsRunIdRoute = Route$p.update({
17243
+ const ApiRunsRunIdRoute = Route$q.update({
17039
17244
  id: "/$runId",
17040
17245
  path: "/$runId",
17041
17246
  getParentRoute: () => ApiRunsRoute
17042
17247
  });
17043
- const ApiProvidersScanRoute = Route$o.update({
17248
+ const ApiProvidersScanRoute = Route$p.update({
17044
17249
  id: "/scan",
17045
17250
  path: "/scan",
17046
17251
  getParentRoute: () => ApiProvidersRoute
17047
17252
  });
17048
- const ApiProvidersImportRoute = Route$n.update({
17253
+ const ApiProvidersImportRoute = Route$o.update({
17049
17254
  id: "/import",
17050
17255
  path: "/import",
17051
17256
  getParentRoute: () => ApiProvidersRoute
17052
17257
  });
17053
- const ApiProvidersExportRoute = Route$m.update({
17258
+ const ApiProvidersExportRoute = Route$n.update({
17054
17259
  id: "/export",
17055
17260
  path: "/export",
17056
17261
  getParentRoute: () => ApiProvidersRoute
17057
17262
  });
17058
- const ApiProvidersProviderIdRoute = Route$l.update({
17263
+ const ApiProvidersProviderIdRoute = Route$m.update({
17059
17264
  id: "/$providerId",
17060
17265
  path: "/$providerId",
17061
17266
  getParentRoute: () => ApiProvidersRoute
17062
17267
  });
17063
- const ApiLogsStreamRoute = Route$k.update({
17268
+ const ApiLogsStreamRoute = Route$l.update({
17064
17269
  id: "/stream",
17065
17270
  path: "/stream",
17066
17271
  getParentRoute: () => ApiLogsRoute
17067
17272
  });
17068
- const ApiLogsImportRoute = Route$j.update({
17273
+ const ApiLogsImportRoute = Route$k.update({
17069
17274
  id: "/import",
17070
17275
  path: "/import",
17071
17276
  getParentRoute: () => ApiLogsRoute
17072
17277
  });
17073
- const ApiLogsIdRoute = Route$i.update({
17278
+ const ApiLogsIdRoute = Route$j.update({
17074
17279
  id: "/$id",
17075
17280
  path: "/$id",
17076
17281
  getParentRoute: () => ApiLogsRoute
17077
17282
  });
17078
- const ApiKnowledgeSearchRoute = Route$h.update({
17283
+ const ApiKnowledgeSearchRoute = Route$i.update({
17079
17284
  id: "/api/knowledge/search",
17080
17285
  path: "/api/knowledge/search",
17081
- getParentRoute: () => Route$D
17286
+ getParentRoute: () => Route$E
17082
17287
  });
17083
- const ApiKnowledgeProjectContextRoute = Route$g.update({
17288
+ const ApiKnowledgeProjectContextRoute = Route$h.update({
17084
17289
  id: "/api/knowledge/project-context",
17085
17290
  path: "/api/knowledge/project-context",
17086
- getParentRoute: () => Route$D
17291
+ getParentRoute: () => Route$E
17087
17292
  });
17088
- const ApiKnowledgeCandidatesRoute = Route$f.update({
17293
+ const ApiKnowledgeCandidatesRoute = Route$g.update({
17089
17294
  id: "/api/knowledge/candidates",
17090
17295
  path: "/api/knowledge/candidates",
17091
- getParentRoute: () => Route$D
17296
+ getParentRoute: () => Route$E
17092
17297
  });
17093
- const ApiGroupsGroupIdRoute = Route$e.update({
17298
+ const ApiGroupsGroupIdRoute = Route$f.update({
17094
17299
  id: "/$groupId",
17095
17300
  path: "/$groupId",
17096
17301
  getParentRoute: () => ApiGroupsRoute
17097
17302
  });
17303
+ const ApiEcosystemPackagesRoute = Route$e.update({
17304
+ id: "/api/ecosystem/packages",
17305
+ path: "/api/ecosystem/packages",
17306
+ getParentRoute: () => Route$E
17307
+ });
17098
17308
  const ApiConfigPathsRoute = Route$d.update({
17099
17309
  id: "/paths",
17100
17310
  path: "/paths",
@@ -17158,7 +17368,7 @@ const ApiProvidersProviderIdTestLogRoute = Route$2.update({
17158
17368
  const ApiKnowledgeSessionsSessionIdCandidatesRoute = Route$1.update({
17159
17369
  id: "/api/knowledge/sessions/$sessionId/candidates",
17160
17370
  path: "/api/knowledge/sessions/$sessionId/candidates",
17161
- getParentRoute: () => Route$D
17371
+ getParentRoute: () => Route$E
17162
17372
  });
17163
17373
  const ApiKnowledgeCandidatesCandidateIdPromoteRoute = Route.update({
17164
17374
  id: "/promote",
@@ -17260,12 +17470,13 @@ const rootRouteChildren = {
17260
17470
  ApiSessionsRoute,
17261
17471
  ProxySplatRoute,
17262
17472
  SessionSessionIdRoute,
17473
+ ApiEcosystemPackagesRoute,
17263
17474
  ApiKnowledgeCandidatesRoute: ApiKnowledgeCandidatesRouteWithChildren,
17264
17475
  ApiKnowledgeProjectContextRoute,
17265
17476
  ApiKnowledgeSearchRoute,
17266
17477
  ApiKnowledgeSessionsSessionIdCandidatesRoute
17267
17478
  };
17268
- const routeTree = Route$D._addFileChildren(rootRouteChildren)._addFileTypes();
17479
+ const routeTree = Route$E._addFileChildren(rootRouteChildren)._addFileTypes();
17269
17480
  function getRouter() {
17270
17481
  const router2 = createRouter({
17271
17482
  routeTree,
@@ -17307,7 +17518,7 @@ export {
17307
17518
  router as N,
17308
17519
  OpenAIRequestSchema as O,
17309
17520
  ProviderConfigSchema as P,
17310
- Route$B as R,
17521
+ Route$C as R,
17311
17522
  TimeDisplayFormatSchema as T,
17312
17523
  DEFAULT_SLOW_RESPONSE_THRESHOLD_SECONDS as a,
17313
17524
  DEFAULT_PROVIDER_TEST_TIMEOUT_SECONDS as b,