refactor: add to template agent roles

This commit is contained in:
Petr Mironychev
2026-06-04 16:21:34 +02:00
parent c151c5030b
commit 3179c0c358
113 changed files with 383 additions and 5292 deletions

View File

@@ -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,

View File

@@ -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);

View File

@@ -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()

View File

@@ -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