@tonyclaw/agent-inspector 3.0.4 → 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.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/{CompareDrawer-Bs2kzUSp.js → CompareDrawer-DsvO6QyJ.js} +1 -1
- package/.output/public/assets/ProxyViewerContainer-CfP-komD.js +106 -0
- package/.output/public/assets/{ReplayDialog-B6xy7pl5.js → ReplayDialog-CQlLX1Uo.js} +1 -1
- package/.output/public/assets/{RequestAnatomy-BSvSmpCO.js → RequestAnatomy-m1q-uVTl.js} +1 -1
- package/.output/public/assets/{ResponseView-BFnUva7Z.js → ResponseView-DuLLeYSh.js} +2 -2
- package/.output/public/assets/{StreamingChunkSequence-u7ZaJOqn.js → StreamingChunkSequence-CN4aRFBx.js} +1 -1
- package/.output/public/assets/{_sessionId-CH4nsMOA.js → _sessionId-CWP4pxOU.js} +1 -1
- package/.output/public/assets/index-0pt1umWP.css +1 -0
- package/.output/public/assets/index-DSUEOPbC.js +1 -0
- package/.output/public/assets/{index-B5HS6AxR.js → index-zfZUz67K.js} +1 -1
- package/.output/public/assets/{json-viewer-5Tj5vkqe.js → json-viewer-_4r1LBBE.js} +1 -1
- package/.output/public/assets/{main-ChxZWG8K.js → main-C_nEHNUM.js} +2 -2
- package/.output/server/_libs/lucide-react.mjs +292 -203
- package/.output/server/{_sessionId-B3r-VBdM.mjs → _sessionId-CTqCAmUF.mjs} +3 -3
- package/.output/server/_ssr/{CompareDrawer-DAYrKHKe.mjs → CompareDrawer-D6b6TZ-O.mjs} +3 -3
- package/.output/server/_ssr/{ProxyViewerContainer-CYmNmQK9.mjs → ProxyViewerContainer-Dp7Va9_T.mjs} +593 -148
- package/.output/server/_ssr/{ReplayDialog-CdKvdXxk.mjs → ReplayDialog-D_KWQ1GY.mjs} +4 -4
- package/.output/server/_ssr/{RequestAnatomy-BtmTUq7O.mjs → RequestAnatomy-CPubXjMX.mjs} +2 -2
- package/.output/server/_ssr/{ResponseView-DuD_z5hd.mjs → ResponseView-CsTiNoOE.mjs} +3 -3
- package/.output/server/_ssr/{StreamingChunkSequence-DpIV2wt_.mjs → StreamingChunkSequence-Bgbzt23U.mjs} +2 -2
- package/.output/server/_ssr/{index-B4_8vH8k.mjs → index-P1gSpuM5.mjs} +2 -2
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{json-viewer-gcNJEB7y.mjs → json-viewer-10ciVGnc.mjs} +3 -3
- package/.output/server/_ssr/{router-CYjIsElo.mjs → router-BJJ0VhsB.mjs} +362 -151
- package/.output/server/_tanstack-start-manifest_v-CltlYL3I.mjs +4 -0
- package/.output/server/index.mjs +75 -75
- package/package.json +1 -1
- package/src/components/ProxyViewer.tsx +19 -1
- package/src/components/ecosystem/AgentLabDialog.tsx +379 -0
- package/src/components/providers/ProviderCard.tsx +342 -206
- package/src/lib/ecosystemContract.ts +47 -0
- package/src/lib/stopReason.ts +4 -0
- package/src/routes/api/ecosystem.packages.ts +263 -0
- package/.output/public/assets/ProxyViewerContainer-BUnlrfiS.js +0 -106
- package/.output/public/assets/index-BqVL284D.js +0 -1
- package/.output/public/assets/index-DJW6qbnH.css +0 -1
- package/.output/server/_tanstack-start-manifest_v-BRdOxY6q.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,
|
|
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, {
|
|
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-
|
|
69
|
-
const Route$
|
|
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-
|
|
112
|
-
const Route$
|
|
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-
|
|
155
|
-
const Route$
|
|
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,
|
|
1064
|
+
function readProperty$4(value, name2) {
|
|
1065
1065
|
let current = objectFromUnknown$1(value);
|
|
1066
1066
|
while (current !== null) {
|
|
1067
|
-
const desc = Object.getOwnPropertyDescriptor(current,
|
|
1067
|
+
const desc = Object.getOwnPropertyDescriptor(current, name2);
|
|
1068
1068
|
if (desc !== void 0) {
|
|
1069
|
-
const propertyValue = Reflect.get(current,
|
|
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,
|
|
1078
|
-
const property = readProperty$4(value,
|
|
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,
|
|
1263
|
-
const value = readProperty$4(row,
|
|
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,
|
|
1267
|
-
const value = readProperty$4(row,
|
|
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,
|
|
1271
|
-
return readNumber$1(row,
|
|
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,
|
|
1304
|
-
const value = readNumber$1(row,
|
|
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,
|
|
2133
|
+
function readProperty$3(value, name2) {
|
|
2134
2134
|
let current = objectFromUnknown(value);
|
|
2135
2135
|
while (current !== null) {
|
|
2136
|
-
const desc = Object.getOwnPropertyDescriptor(current,
|
|
2136
|
+
const desc = Object.getOwnPropertyDescriptor(current, name2);
|
|
2137
2137
|
if (desc !== void 0) {
|
|
2138
|
-
const propertyValue = Reflect.get(current,
|
|
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,
|
|
2147
|
-
const property = readProperty$3(value,
|
|
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,
|
|
2276
|
-
const value = readProperty$3(row,
|
|
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,
|
|
2280
|
-
const value = readProperty$3(row,
|
|
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
|
|
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 (
|
|
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((
|
|
4978
|
-
const normalized = normalizeProviderName(
|
|
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
|
|
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(
|
|
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(
|
|
5530
|
-
return
|
|
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(
|
|
5540
|
-
return
|
|
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,
|
|
5855
|
-
const raw = headers.get(
|
|
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
|
|
6499
|
-
if (
|
|
6500
|
-
tools.set(
|
|
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
|
|
6512
|
-
if (
|
|
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(
|
|
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 [
|
|
6524
|
-
if (!merged.has(
|
|
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
|
|
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
|
|
7345
|
-
const value = originalHeaders.get(
|
|
7344
|
+
for (const name2 of PRESERVE_HEADERS) {
|
|
7345
|
+
const value = originalHeaders.get(name2);
|
|
7346
7346
|
if (value !== null) {
|
|
7347
|
-
headers.set(
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
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(
|
|
9167
|
-
const value = process.env[
|
|
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((
|
|
10889
|
-
const writeTools = TOOL_NAMES.filter((
|
|
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,
|
|
10977
|
-
const value = variables[
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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,
|
|
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,
|
|
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,
|
|
13910
|
-
const property = readRecordProperty(value,
|
|
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,
|
|
13915
|
+
function hasProperty(value, name2) {
|
|
13914
13916
|
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
13915
|
-
return Object.getOwnPropertyDescriptor(value,
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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(
|
|
15245
|
-
const lowerName =
|
|
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 [
|
|
15257
|
-
result[
|
|
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
|
|
16038
|
-
const value = log.rawHeaders?.[
|
|
16242
|
+
for (const name2 of PRESERVE_HEADERS) {
|
|
16243
|
+
const value = log.rawHeaders?.[name2.toLowerCase()];
|
|
16039
16244
|
if (value !== void 0) {
|
|
16040
|
-
headers.set(
|
|
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$
|
|
17178
|
+
const IndexRoute = Route$D.update({
|
|
16974
17179
|
id: "/",
|
|
16975
17180
|
path: "/",
|
|
16976
|
-
getParentRoute: () => Route$
|
|
17181
|
+
getParentRoute: () => Route$E
|
|
16977
17182
|
});
|
|
16978
|
-
const SessionSessionIdRoute = Route$
|
|
17183
|
+
const SessionSessionIdRoute = Route$C.update({
|
|
16979
17184
|
id: "/session/$sessionId",
|
|
16980
17185
|
path: "/session/$sessionId",
|
|
16981
|
-
getParentRoute: () => Route$
|
|
17186
|
+
getParentRoute: () => Route$E
|
|
16982
17187
|
});
|
|
16983
|
-
const ProxySplatRoute = Route$
|
|
17188
|
+
const ProxySplatRoute = Route$B.update({
|
|
16984
17189
|
id: "/proxy/$",
|
|
16985
17190
|
path: "/proxy/$",
|
|
16986
|
-
getParentRoute: () => Route$
|
|
17191
|
+
getParentRoute: () => Route$E
|
|
16987
17192
|
});
|
|
16988
|
-
const ApiSessionsRoute = Route$
|
|
17193
|
+
const ApiSessionsRoute = Route$A.update({
|
|
16989
17194
|
id: "/api/sessions",
|
|
16990
17195
|
path: "/api/sessions",
|
|
16991
|
-
getParentRoute: () => Route$
|
|
17196
|
+
getParentRoute: () => Route$E
|
|
16992
17197
|
});
|
|
16993
|
-
const ApiRunsRoute = Route$
|
|
17198
|
+
const ApiRunsRoute = Route$z.update({
|
|
16994
17199
|
id: "/api/runs",
|
|
16995
17200
|
path: "/api/runs",
|
|
16996
|
-
getParentRoute: () => Route$
|
|
17201
|
+
getParentRoute: () => Route$E
|
|
16997
17202
|
});
|
|
16998
|
-
const ApiProvidersRoute = Route$
|
|
17203
|
+
const ApiProvidersRoute = Route$y.update({
|
|
16999
17204
|
id: "/api/providers",
|
|
17000
17205
|
path: "/api/providers",
|
|
17001
|
-
getParentRoute: () => Route$
|
|
17206
|
+
getParentRoute: () => Route$E
|
|
17002
17207
|
});
|
|
17003
|
-
const ApiModelsRoute = Route$
|
|
17208
|
+
const ApiModelsRoute = Route$x.update({
|
|
17004
17209
|
id: "/api/models",
|
|
17005
17210
|
path: "/api/models",
|
|
17006
|
-
getParentRoute: () => Route$
|
|
17211
|
+
getParentRoute: () => Route$E
|
|
17007
17212
|
});
|
|
17008
|
-
const ApiMcpRoute = Route$
|
|
17213
|
+
const ApiMcpRoute = Route$w.update({
|
|
17009
17214
|
id: "/api/mcp",
|
|
17010
17215
|
path: "/api/mcp",
|
|
17011
|
-
getParentRoute: () => Route$
|
|
17216
|
+
getParentRoute: () => Route$E
|
|
17012
17217
|
});
|
|
17013
|
-
const ApiLogsRoute = Route$
|
|
17218
|
+
const ApiLogsRoute = Route$v.update({
|
|
17014
17219
|
id: "/api/logs",
|
|
17015
17220
|
path: "/api/logs",
|
|
17016
|
-
getParentRoute: () => Route$
|
|
17221
|
+
getParentRoute: () => Route$E
|
|
17017
17222
|
});
|
|
17018
|
-
const ApiHealthRoute = Route$
|
|
17223
|
+
const ApiHealthRoute = Route$u.update({
|
|
17019
17224
|
id: "/api/health",
|
|
17020
17225
|
path: "/api/health",
|
|
17021
|
-
getParentRoute: () => Route$
|
|
17226
|
+
getParentRoute: () => Route$E
|
|
17022
17227
|
});
|
|
17023
|
-
const ApiGroupsRoute = Route$
|
|
17228
|
+
const ApiGroupsRoute = Route$t.update({
|
|
17024
17229
|
id: "/api/groups",
|
|
17025
17230
|
path: "/api/groups",
|
|
17026
|
-
getParentRoute: () => Route$
|
|
17231
|
+
getParentRoute: () => Route$E
|
|
17027
17232
|
});
|
|
17028
|
-
const ApiConfigRoute = Route$
|
|
17233
|
+
const ApiConfigRoute = Route$s.update({
|
|
17029
17234
|
id: "/api/config",
|
|
17030
17235
|
path: "/api/config",
|
|
17031
|
-
getParentRoute: () => Route$
|
|
17236
|
+
getParentRoute: () => Route$E
|
|
17032
17237
|
});
|
|
17033
|
-
const ApiAlertsRoute = Route$
|
|
17238
|
+
const ApiAlertsRoute = Route$r.update({
|
|
17034
17239
|
id: "/api/alerts",
|
|
17035
17240
|
path: "/api/alerts",
|
|
17036
|
-
getParentRoute: () => Route$
|
|
17241
|
+
getParentRoute: () => Route$E
|
|
17037
17242
|
});
|
|
17038
|
-
const ApiRunsRunIdRoute = Route$
|
|
17243
|
+
const ApiRunsRunIdRoute = Route$q.update({
|
|
17039
17244
|
id: "/$runId",
|
|
17040
17245
|
path: "/$runId",
|
|
17041
17246
|
getParentRoute: () => ApiRunsRoute
|
|
17042
17247
|
});
|
|
17043
|
-
const ApiProvidersScanRoute = Route$
|
|
17248
|
+
const ApiProvidersScanRoute = Route$p.update({
|
|
17044
17249
|
id: "/scan",
|
|
17045
17250
|
path: "/scan",
|
|
17046
17251
|
getParentRoute: () => ApiProvidersRoute
|
|
17047
17252
|
});
|
|
17048
|
-
const ApiProvidersImportRoute = Route$
|
|
17253
|
+
const ApiProvidersImportRoute = Route$o.update({
|
|
17049
17254
|
id: "/import",
|
|
17050
17255
|
path: "/import",
|
|
17051
17256
|
getParentRoute: () => ApiProvidersRoute
|
|
17052
17257
|
});
|
|
17053
|
-
const ApiProvidersExportRoute = Route$
|
|
17258
|
+
const ApiProvidersExportRoute = Route$n.update({
|
|
17054
17259
|
id: "/export",
|
|
17055
17260
|
path: "/export",
|
|
17056
17261
|
getParentRoute: () => ApiProvidersRoute
|
|
17057
17262
|
});
|
|
17058
|
-
const ApiProvidersProviderIdRoute = Route$
|
|
17263
|
+
const ApiProvidersProviderIdRoute = Route$m.update({
|
|
17059
17264
|
id: "/$providerId",
|
|
17060
17265
|
path: "/$providerId",
|
|
17061
17266
|
getParentRoute: () => ApiProvidersRoute
|
|
17062
17267
|
});
|
|
17063
|
-
const ApiLogsStreamRoute = Route$
|
|
17268
|
+
const ApiLogsStreamRoute = Route$l.update({
|
|
17064
17269
|
id: "/stream",
|
|
17065
17270
|
path: "/stream",
|
|
17066
17271
|
getParentRoute: () => ApiLogsRoute
|
|
17067
17272
|
});
|
|
17068
|
-
const ApiLogsImportRoute = Route$
|
|
17273
|
+
const ApiLogsImportRoute = Route$k.update({
|
|
17069
17274
|
id: "/import",
|
|
17070
17275
|
path: "/import",
|
|
17071
17276
|
getParentRoute: () => ApiLogsRoute
|
|
17072
17277
|
});
|
|
17073
|
-
const ApiLogsIdRoute = Route$
|
|
17278
|
+
const ApiLogsIdRoute = Route$j.update({
|
|
17074
17279
|
id: "/$id",
|
|
17075
17280
|
path: "/$id",
|
|
17076
17281
|
getParentRoute: () => ApiLogsRoute
|
|
17077
17282
|
});
|
|
17078
|
-
const ApiKnowledgeSearchRoute = Route$
|
|
17283
|
+
const ApiKnowledgeSearchRoute = Route$i.update({
|
|
17079
17284
|
id: "/api/knowledge/search",
|
|
17080
17285
|
path: "/api/knowledge/search",
|
|
17081
|
-
getParentRoute: () => Route$
|
|
17286
|
+
getParentRoute: () => Route$E
|
|
17082
17287
|
});
|
|
17083
|
-
const ApiKnowledgeProjectContextRoute = Route$
|
|
17288
|
+
const ApiKnowledgeProjectContextRoute = Route$h.update({
|
|
17084
17289
|
id: "/api/knowledge/project-context",
|
|
17085
17290
|
path: "/api/knowledge/project-context",
|
|
17086
|
-
getParentRoute: () => Route$
|
|
17291
|
+
getParentRoute: () => Route$E
|
|
17087
17292
|
});
|
|
17088
|
-
const ApiKnowledgeCandidatesRoute = Route$
|
|
17293
|
+
const ApiKnowledgeCandidatesRoute = Route$g.update({
|
|
17089
17294
|
id: "/api/knowledge/candidates",
|
|
17090
17295
|
path: "/api/knowledge/candidates",
|
|
17091
|
-
getParentRoute: () => Route$
|
|
17296
|
+
getParentRoute: () => Route$E
|
|
17092
17297
|
});
|
|
17093
|
-
const ApiGroupsGroupIdRoute = Route$
|
|
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$
|
|
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$
|
|
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$
|
|
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,
|
|
@@ -17328,11 +17539,11 @@ export {
|
|
|
17328
17539
|
DeleteInspectorGroupResponseSchema as q,
|
|
17329
17540
|
providerHasContextMetadata as r,
|
|
17330
17541
|
safeGetOwnProperty as s,
|
|
17331
|
-
|
|
17332
|
-
|
|
17333
|
-
|
|
17334
|
-
|
|
17335
|
-
|
|
17542
|
+
maskApiKey as t,
|
|
17543
|
+
PATH_V1_MESSAGES as u,
|
|
17544
|
+
PATH_V1_CHAT_COMPLETIONS as v,
|
|
17545
|
+
PATH_V1_RESPONSES as w,
|
|
17546
|
+
findProviderModelMetadata as x,
|
|
17336
17547
|
previewUpstreamUrl as y,
|
|
17337
17548
|
createPendingProviderTestResults as z
|
|
17338
17549
|
};
|