merge: sync upstream v0.5.81 into MIBP fork

# Conflicts:
#	.gitignore
#	Dockerfile
#	open-sse/handlers/chatCore.js
#	open-sse/providers/registry/cline.js
#	open-sse/providers/registry/index.js
#	open-sse/services/usage.js
#	open-sse/utils/streamHandler.js
#	package.json
#	src/app/(dashboard)/dashboard/profile/page.js
#	src/app/(dashboard)/dashboard/providers/[id]/page.js
This commit is contained in:
MUH. IQRAM BAHRING committed 2026-09-19 11:35:34 +08:00
commit 0ac771bad8
208 files changed
+13062 -977

No files matched your search

+47 -15
View File
@@ -13,12 +13,10 @@ function buildModelListHeaders(token, isApiKey) {
}
/**
* Fetch ClinePass live model catalog from Cline's /models endpoint.
*
* @param {object} credentials - Connection credentials ({ accessToken, apiKey })
* @returns {Promise<{ models: { id: string, name: string }[] } | null>}
* Internal: fetch the raw model list from Cline's /models endpoint.
* Returns the parsed array or null on any failure.
*/
export async function resolveClinepassModels(credentials) {
async function fetchClineRawModels(credentials) {
const isApiKey = Boolean(credentials?.apiKey);
const token = isApiKey ? credentials.apiKey : credentials?.accessToken;
if (!token) return null;
@@ -39,19 +37,53 @@ export async function resolveClinepassModels(credentials) {
const json = await response.json();
const rawList = Array.isArray(json) ? json : json?.data;
if (!Array.isArray(rawList)) return null;
const models = rawList
.filter((m) => typeof m?.id === "string" && m.id.startsWith("cline-pass/"))
.map((m) => ({
id: m.id,
name: m.name || m.id,
}));
return models.length ? { models } : null;
return Array.isArray(rawList) ? rawList : null;
} catch {
return null;
} finally {
clearTimeout(timer);
}
}
/**
* Fetch ClinePass live model catalog from Cline's /models endpoint.
* Returns only models with the cline-pass/ prefix.
*
* @param {object} credentials - Connection credentials ({ accessToken, apiKey })
* @returns {Promise<{ models: { id: string, name: string }[] } | null>}
*/
export async function resolveClinepassModels(credentials) {
const rawList = await fetchClineRawModels(credentials);
if (!rawList) return null;
const models = rawList
.filter((m) => typeof m?.id === "string" && m.id.startsWith("cline-pass/"))
.map((m) => ({
id: m.id,
name: m.name || m.id,
}));
return models.length ? { models } : null;
}
/**
* Fetch Cline live model catalog from Cline's /models endpoint.
* Unlike resolveClinepassModels, this returns ALL models (including
* free-tier models like z-ai/glm-5.3-flash) without the cline-pass/ prefix filter.
*
* @param {object} credentials - Connection credentials ({ accessToken, apiKey })
* @returns {Promise<{ models: { id: string, name: string }[] } | null>}
*/
export async function resolveClineModels(credentials) {
const rawList = await fetchClineRawModels(credentials);
if (!rawList) return null;
const models = rawList
.filter((m) => typeof m?.id === "string" && m.id.trim() !== "")
.map((m) => ({
id: m.id,
name: m.name || m.id,
}));
return models.length ? { models } : null;
}