mirror of
https://github.com/Palm1r/QodeAssist.git
synced 2026-06-14 10:19:16 -04:00
refactor: add to template agent roles
This commit is contained in:
@@ -15,9 +15,8 @@
|
||||
#include <QSaveFile>
|
||||
#include <QTimer>
|
||||
|
||||
#include <LLMQore/ToolsManager.hpp>
|
||||
#include <logger/Logger.hpp>
|
||||
#include <pluginllmcore/Provider.hpp>
|
||||
#include <pluginllmcore/ProvidersManager.hpp>
|
||||
#include <settings/McpSettings.hpp>
|
||||
|
||||
namespace QodeAssist::Mcp {
|
||||
@@ -176,18 +175,14 @@ QList<McpServerConnection *> McpClientsManager::connections() const
|
||||
return m_connections;
|
||||
}
|
||||
|
||||
QList<PluginLLMCore::Provider *> McpClientsManager::toolsCapableProviders() const
|
||||
void McpClientsManager::registerToolsOn(::LLMQore::ToolsManager *tools) const
|
||||
{
|
||||
QList<PluginLLMCore::Provider *> out;
|
||||
auto &pm = PluginLLMCore::ProvidersManager::instance();
|
||||
for (const QString &name : pm.providersNames()) {
|
||||
auto *p = pm.getProviderByName(name);
|
||||
if (!p)
|
||||
continue;
|
||||
if (p->capabilities().testFlag(PluginLLMCore::ProviderCapability::Tools))
|
||||
out.append(p);
|
||||
if (!tools)
|
||||
return;
|
||||
for (auto *c : m_connections) {
|
||||
if (c)
|
||||
c->registerToolsOn(tools);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
QJsonObject McpClientsManager::builtinServers()
|
||||
@@ -319,8 +314,6 @@ void McpClientsManager::loadFromDisk()
|
||||
newConfigs.append(McpServerConfig::fromJson(it.key(), it.value().toObject()));
|
||||
}
|
||||
|
||||
const auto providers = toolsCapableProviders();
|
||||
|
||||
const bool masterEnabled = Settings::mcpSettings().enableMcpClients();
|
||||
|
||||
QList<McpServerConnection *> keep;
|
||||
@@ -350,7 +343,6 @@ void McpClientsManager::loadFromDisk()
|
||||
existing->deleteLater();
|
||||
}
|
||||
c = new McpServerConnection(cfg, this);
|
||||
c->setProviders(providers);
|
||||
connect(
|
||||
c,
|
||||
&McpServerConnection::stateChanged,
|
||||
|
||||
@@ -35,6 +35,8 @@ public:
|
||||
bool removeServer(const QString &name);
|
||||
void reload();
|
||||
|
||||
void registerToolsOn(::LLMQore::ToolsManager *tools) const;
|
||||
|
||||
signals:
|
||||
void serversChanged();
|
||||
void writeFailed(const QString &reason);
|
||||
@@ -50,7 +52,6 @@ private:
|
||||
void setupWatcher();
|
||||
void updateWatchedPaths();
|
||||
|
||||
QList<PluginLLMCore::Provider *> toolsCapableProviders() const;
|
||||
static QJsonObject builtinServers();
|
||||
QJsonObject readRoot() const;
|
||||
bool writeRoot(const QJsonObject &root);
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
#include <QStandardPaths>
|
||||
|
||||
#include <logger/Logger.hpp>
|
||||
#include <pluginllmcore/Provider.hpp>
|
||||
#include <settings/McpSettings.hpp>
|
||||
|
||||
namespace QodeAssist::Mcp {
|
||||
@@ -35,13 +34,6 @@ QString transportToString(McpTransportKind k)
|
||||
return k == McpTransportKind::Http ? QStringLiteral("http") : QStringLiteral("stdio");
|
||||
}
|
||||
|
||||
bool providerSupportsTools(PluginLLMCore::Provider *p)
|
||||
{
|
||||
if (!p)
|
||||
return false;
|
||||
return p->capabilities().testFlag(PluginLLMCore::ProviderCapability::Tools);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
McpServerConfig McpServerConfig::fromJson(const QString &name, const QJsonObject &obj)
|
||||
@@ -133,15 +125,6 @@ McpServerConnection::~McpServerConnection()
|
||||
disconnectFromServer();
|
||||
}
|
||||
|
||||
void McpServerConnection::setProviders(const QList<PluginLLMCore::Provider *> &providers)
|
||||
{
|
||||
m_providers.clear();
|
||||
for (auto *p : providers) {
|
||||
if (providerSupportsTools(p))
|
||||
m_providers.append(p);
|
||||
}
|
||||
}
|
||||
|
||||
::LLMQore::Mcp::McpTransport *McpServerConnection::createTransport()
|
||||
{
|
||||
if (m_config.transport == McpTransportKind::Http) {
|
||||
@@ -293,40 +276,20 @@ void McpServerConnection::fetchAndRegisterTools()
|
||||
[this](const QList<::LLMQore::Mcp::ToolInfo> &tools) {
|
||||
if (m_listToolsWatchdog)
|
||||
m_listToolsWatchdog->stop();
|
||||
if (m_providers.isEmpty()) {
|
||||
LOG_MESSAGE(QString("MCP client [%1]: no tools-capable providers to "
|
||||
"register %2 tools into")
|
||||
.arg(m_config.name)
|
||||
.arg(tools.size()));
|
||||
setState(
|
||||
McpConnectionState::Connected,
|
||||
QStringLiteral("Connected (%1 tools)").arg(tools.size()));
|
||||
return;
|
||||
}
|
||||
|
||||
m_tools.clear();
|
||||
for (const auto &info : tools) {
|
||||
if (info.name.isEmpty())
|
||||
continue;
|
||||
m_toolIds.append(info.name);
|
||||
for (const auto &p : m_providers) {
|
||||
if (!p)
|
||||
continue;
|
||||
auto *tm = p->toolsManager();
|
||||
if (!tm)
|
||||
continue;
|
||||
auto *remote = new ::LLMQore::Mcp::McpRemoteTool(
|
||||
m_client.data(), info, tm);
|
||||
tm->addTool(remote);
|
||||
}
|
||||
m_tools.append(info);
|
||||
}
|
||||
|
||||
LOG_MESSAGE(QString("MCP client [%1]: registered %2 tools across %3 providers")
|
||||
LOG_MESSAGE(QString("MCP client [%1]: discovered %2 tools")
|
||||
.arg(m_config.name)
|
||||
.arg(tools.size())
|
||||
.arg(m_providers.size()));
|
||||
.arg(m_tools.size()));
|
||||
setState(
|
||||
McpConnectionState::Connected,
|
||||
QStringLiteral("Connected (%1 tools)").arg(tools.size()));
|
||||
QStringLiteral("Connected (%1 tools)").arg(m_tools.size()));
|
||||
})
|
||||
.onFailed(this, [this](const std::exception &e) {
|
||||
if (m_listToolsWatchdog)
|
||||
@@ -337,21 +300,19 @@ void McpServerConnection::fetchAndRegisterTools()
|
||||
});
|
||||
}
|
||||
|
||||
void McpServerConnection::registerToolsOn(::LLMQore::ToolsManager *tools)
|
||||
{
|
||||
if (!tools || !m_client || m_state != McpConnectionState::Connected)
|
||||
return;
|
||||
for (const auto &info : m_tools) {
|
||||
auto *remote = new ::LLMQore::Mcp::McpRemoteTool(m_client.data(), info, tools);
|
||||
tools->addTool(remote);
|
||||
}
|
||||
}
|
||||
|
||||
void McpServerConnection::unregisterTools()
|
||||
{
|
||||
if (m_toolIds.isEmpty())
|
||||
return;
|
||||
|
||||
for (const auto &p : m_providers) {
|
||||
if (!p)
|
||||
continue;
|
||||
auto *tm = p->toolsManager();
|
||||
if (!tm)
|
||||
continue;
|
||||
for (const QString &id : m_toolIds)
|
||||
tm->removeTool(id);
|
||||
}
|
||||
m_toolIds.clear();
|
||||
m_tools.clear();
|
||||
}
|
||||
|
||||
void McpServerConnection::disconnectFromServer()
|
||||
|
||||
@@ -14,15 +14,17 @@
|
||||
#include <QTimer>
|
||||
#include <QUrl>
|
||||
|
||||
#include <LLMQore/McpTypes.hpp>
|
||||
|
||||
namespace LLMQore {
|
||||
class ToolsManager;
|
||||
}
|
||||
|
||||
namespace LLMQore::Mcp {
|
||||
class McpClient;
|
||||
class McpTransport;
|
||||
} // namespace LLMQore::Mcp
|
||||
|
||||
namespace QodeAssist::PluginLLMCore {
|
||||
class Provider;
|
||||
}
|
||||
|
||||
namespace QodeAssist::Mcp {
|
||||
|
||||
enum class McpTransportKind { Http, Stdio };
|
||||
@@ -61,10 +63,17 @@ public:
|
||||
const McpServerConfig &config() const { return m_config; }
|
||||
McpConnectionState state() const { return m_state; }
|
||||
QString statusText() const { return m_statusText; }
|
||||
int toolCount() const { return m_toolIds.size(); }
|
||||
QStringList toolNames() const { return m_toolIds; }
|
||||
int toolCount() const { return m_tools.size(); }
|
||||
QStringList toolNames() const
|
||||
{
|
||||
QStringList names;
|
||||
names.reserve(m_tools.size());
|
||||
for (const auto &tool : m_tools)
|
||||
names << tool.name;
|
||||
return names;
|
||||
}
|
||||
|
||||
void setProviders(const QList<PluginLLMCore::Provider *> &providers);
|
||||
void registerToolsOn(::LLMQore::ToolsManager *tools);
|
||||
|
||||
void connectToServer();
|
||||
void disconnectFromServer();
|
||||
@@ -75,7 +84,6 @@ signals:
|
||||
private:
|
||||
void setState(McpConnectionState state, const QString &text = {});
|
||||
void fetchAndRegisterTools();
|
||||
void registerTools(const QList<::LLMQore::Mcp::McpClient *> & /*unused*/);
|
||||
void unregisterTools();
|
||||
::LLMQore::Mcp::McpTransport *createTransport();
|
||||
|
||||
@@ -87,8 +95,7 @@ private:
|
||||
QPointer<::LLMQore::Mcp::McpTransport> m_transport;
|
||||
QPointer<QTimer> m_listToolsWatchdog;
|
||||
|
||||
QList<QPointer<PluginLLMCore::Provider>> m_providers;
|
||||
QStringList m_toolIds;
|
||||
QList<::LLMQore::Mcp::ToolInfo> m_tools;
|
||||
};
|
||||
|
||||
} // namespace QodeAssist::Mcp
|
||||
|
||||
Reference in New Issue
Block a user