refactor(api): remove MCP marketplace cache integration

Removed dependencies on MCPCacheRepository and PulseMCPService from MCP routes to simplify installation and listing logic, avoiding reliance on potentially stale cached data and streamlining the codebase. Updated available-for-chat filter to include MCPs without explicit status.
This commit is contained in:
Evandro Fonseca Junior committed 2025-10-29 15:35:15 -03:00
1 parent 4739a13458
commit f96d4ed696
34 files changed
+260 -3775

No files matched your search

+49 -2
View File
@@ -150,6 +150,7 @@ export function extractToolCallFromResponse(response: string): {
const parsed = JSON.parse(jsonText.trim());
// Formato atual suportado pelo prompt engineering
if (parsed.tool_call && parsed.tool_call.name) {
return {
name: parsed.tool_call.name,
@@ -157,14 +158,60 @@ export function extractToolCallFromResponse(response: string): {
};
}
// Formato OpenAI-like: { type: 'function', function: { name, parameters|arguments } }
// Algumas implementações usam `arguments` como string JSON
if (parsed.type === "function" && parsed.function && parsed.function.name) {
const fn = parsed.function;
let params: any = fn.parameters ?? fn.arguments ?? {};
if (typeof params === "string") {
try {
params = JSON.parse(params);
} catch {
// se não for JSON válido, mantém string (executor fará fallback)
}
}
return { name: fn.name, parameters: params || {} };
}
// Formato simples: { name: "tool", parameters: {...} }
if (parsed.name && (parsed.parameters || parsed.arguments)) {
let params: any = parsed.parameters ?? parsed.arguments ?? {};
if (typeof params === "string") {
try {
params = JSON.parse(params);
} catch {
// mantém string se não for JSON válido
}
}
return { name: parsed.name, parameters: params || {} };
}
return null;
} catch (error) {
// Tentar extrair manualmente
const nameMatch = response.match(/"name":\s*"([^"]+)"/);
if (nameMatch) {
const name = nameMatch[1];
const paramsMatch = response.match(/"parameters":\s*({[^}]+})/);
const parameters = paramsMatch ? JSON.parse(paramsMatch[1]) : {};
// Captura tanto parameters quanto arguments
const paramsMatch =
response.match(/"parameters"\s*:\s*({[\s\S]*?})/) ||
response.match(/"arguments"\s*:\s*("[\s\S]*?"|{[\s\S]*?})/);
let parameters: any = {};
if (paramsMatch) {
const raw = paramsMatch[1];
try {
parameters = JSON.parse(raw);
} catch {
// caso venha como string com JSON dentro de aspas
if (raw.startsWith('"') && raw.endsWith('"')) {
try {
parameters = JSON.parse(raw.slice(1, -1));
} catch {
parameters = {};
}
}
}
}
return { name, parameters };
}