fix: make goosed mcp paths container safe

This commit is contained in:
john
2026-06-27 21:31:02 +08:00
parent def9b0b5eb
commit fc5b50c936
7 changed files with 157 additions and 30 deletions
+23 -10
View File
@@ -861,9 +861,12 @@ function validateCustomPayload(payload) {
export function createLlmProviderService(
pool,
{ apiTarget, apiSecret, encryptionKey, apiFetchImpl = undiciFetch } = {},
{ apiTarget, apiTargets = [], apiSecret, encryptionKey, apiFetchImpl = undiciFetch } = {},
) {
const launchStates = new Map();
const syncTargets = [
...new Set([...(Array.isArray(apiTargets) ? apiTargets : []), apiTarget].filter(Boolean)),
];
function catalogItem(providerId) {
return catalogById[providerId] ?? null;
@@ -1742,19 +1745,29 @@ export function createLlmProviderService(
},
async syncSelectedToGoosed() {
let resolved = await resolveExecutorProvider('goose');
if (!resolved.ok) {
resolved = await resolveSelectedProvider();
}
if (!resolved.ok) {
return { ok: false, synced: false, message: resolved.message };
const targets = syncTargets.length ? syncTargets : [apiTarget].filter(Boolean);
let lastResolved = null;
for (const target of targets) {
const targetFetch = (url, init) => {
const pathname = `${url.pathname}${url.search}`;
return goosedApiFetch(target, apiSecret, pathname, init, apiFetchImpl);
};
let resolved = await resolveExecutorProvider('goose', 'default', targetFetch);
if (!resolved.ok) {
resolved = await resolveSelectedProvider(targetFetch);
}
if (!resolved.ok) {
return { ok: false, synced: false, target, message: resolved.message };
}
lastResolved = resolved;
}
return {
ok: true,
synced: true,
source: resolved.source,
providerId: resolved.providerId,
model: resolved.model,
targets,
source: lastResolved.source,
providerId: lastResolved.providerId,
model: lastResolved.model,
};
},