mirror of
https://github.com/Palm1r/QodeAssist.git
synced 2026-04-02 02:42:45 -04:00
refactor: Replace plugin tools manager to client api tools manager
This commit is contained in:
@ -59,12 +59,12 @@ BuildProjectTool::~BuildProjectTool()
|
||||
m_activeBuilds.clear();
|
||||
}
|
||||
|
||||
QString BuildProjectTool::name() const
|
||||
QString BuildProjectTool::id() const
|
||||
{
|
||||
return "build_project";
|
||||
}
|
||||
|
||||
QString BuildProjectTool::stringName() const
|
||||
QString BuildProjectTool::displayName() const
|
||||
{
|
||||
return "Building and running project";
|
||||
}
|
||||
@ -80,7 +80,7 @@ QString BuildProjectTool::description() const
|
||||
"Note: This operation may take some time depending on project size.";
|
||||
}
|
||||
|
||||
QJsonObject BuildProjectTool::getDefinition(PluginLLMCore::ToolSchemaFormat format) const
|
||||
QJsonObject BuildProjectTool::parametersSchema() const
|
||||
{
|
||||
QJsonObject definition;
|
||||
definition["type"] = "object";
|
||||
@ -96,26 +96,9 @@ QJsonObject BuildProjectTool::getDefinition(PluginLLMCore::ToolSchemaFormat form
|
||||
definition["properties"] = properties;
|
||||
definition["required"] = QJsonArray();
|
||||
|
||||
switch (format) {
|
||||
case PluginLLMCore::ToolSchemaFormat::OpenAI:
|
||||
return customizeForOpenAI(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Claude:
|
||||
return customizeForClaude(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Ollama:
|
||||
return customizeForOllama(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Google:
|
||||
return customizeForGoogle(definition);
|
||||
}
|
||||
|
||||
return definition;
|
||||
}
|
||||
|
||||
PluginLLMCore::ToolPermissions BuildProjectTool::requiredPermissions() const
|
||||
{
|
||||
return PluginLLMCore::ToolPermission::FileSystemRead
|
||||
| PluginLLMCore::ToolPermission::FileSystemWrite;
|
||||
}
|
||||
|
||||
QFuture<QString> BuildProjectTool::executeAsync(const QJsonObject &input)
|
||||
{
|
||||
auto *project = ProjectExplorer::ProjectManager::startupProject();
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <pluginllmcore/BaseTool.hpp>
|
||||
#include <LLMCore/BaseTool.hpp>
|
||||
#include <QHash>
|
||||
#include <QObject>
|
||||
#include <QPointer>
|
||||
@ -42,18 +42,17 @@ struct BuildInfo
|
||||
QMetaObject::Connection buildFinishedConnection;
|
||||
};
|
||||
|
||||
class BuildProjectTool : public PluginLLMCore::BaseTool
|
||||
class BuildProjectTool : public ::LLMCore::BaseTool
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit BuildProjectTool(QObject *parent = nullptr);
|
||||
~BuildProjectTool() override;
|
||||
|
||||
QString name() const override;
|
||||
QString stringName() const override;
|
||||
QString id() const override;
|
||||
QString displayName() const override;
|
||||
QString description() const override;
|
||||
QJsonObject getDefinition(PluginLLMCore::ToolSchemaFormat format) const override;
|
||||
PluginLLMCore::ToolPermissions requiredPermissions() const override;
|
||||
QJsonObject parametersSchema() const override;
|
||||
|
||||
QFuture<QString> executeAsync(const QJsonObject &input = QJsonObject()) override;
|
||||
|
||||
|
||||
@ -36,12 +36,12 @@ CreateNewFileTool::CreateNewFileTool(QObject *parent)
|
||||
: BaseTool(parent)
|
||||
{}
|
||||
|
||||
QString CreateNewFileTool::name() const
|
||||
QString CreateNewFileTool::id() const
|
||||
{
|
||||
return "create_new_file";
|
||||
}
|
||||
|
||||
QString CreateNewFileTool::stringName() const
|
||||
QString CreateNewFileTool::displayName() const
|
||||
{
|
||||
return {"Creating new file"};
|
||||
}
|
||||
@ -54,7 +54,7 @@ QString CreateNewFileTool::description() const
|
||||
"to the project file";
|
||||
}
|
||||
|
||||
QJsonObject CreateNewFileTool::getDefinition(PluginLLMCore::ToolSchemaFormat format) const
|
||||
QJsonObject CreateNewFileTool::parametersSchema() const
|
||||
{
|
||||
QJsonObject properties;
|
||||
|
||||
@ -70,25 +70,9 @@ QJsonObject CreateNewFileTool::getDefinition(PluginLLMCore::ToolSchemaFormat for
|
||||
required.append("filepath");
|
||||
definition["required"] = required;
|
||||
|
||||
switch (format) {
|
||||
case PluginLLMCore::ToolSchemaFormat::OpenAI:
|
||||
return customizeForOpenAI(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Claude:
|
||||
return customizeForClaude(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Ollama:
|
||||
return customizeForOllama(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Google:
|
||||
return customizeForGoogle(definition);
|
||||
}
|
||||
|
||||
return definition;
|
||||
}
|
||||
|
||||
PluginLLMCore::ToolPermissions CreateNewFileTool::requiredPermissions() const
|
||||
{
|
||||
return PluginLLMCore::ToolPermission::FileSystemWrite;
|
||||
}
|
||||
|
||||
QFuture<QString> CreateNewFileTool::executeAsync(const QJsonObject &input)
|
||||
{
|
||||
return QtConcurrent::run([this, input]() -> QString {
|
||||
|
||||
@ -19,21 +19,20 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <pluginllmcore/BaseTool.hpp>
|
||||
#include <LLMCore/BaseTool.hpp>
|
||||
|
||||
namespace QodeAssist::Tools {
|
||||
|
||||
class CreateNewFileTool : public PluginLLMCore::BaseTool
|
||||
class CreateNewFileTool : public ::LLMCore::BaseTool
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit CreateNewFileTool(QObject *parent = nullptr);
|
||||
|
||||
QString name() const override;
|
||||
QString stringName() const override;
|
||||
QString id() const override;
|
||||
QString displayName() const override;
|
||||
QString description() const override;
|
||||
QJsonObject getDefinition(PluginLLMCore::ToolSchemaFormat format) const override;
|
||||
PluginLLMCore::ToolPermissions requiredPermissions() const override;
|
||||
QJsonObject parametersSchema() const override;
|
||||
|
||||
QFuture<QString> executeAsync(const QJsonObject &input = QJsonObject()) override;
|
||||
};
|
||||
|
||||
@ -39,12 +39,12 @@ EditFileTool::EditFileTool(QObject *parent)
|
||||
: BaseTool(parent)
|
||||
{}
|
||||
|
||||
QString EditFileTool::name() const
|
||||
QString EditFileTool::id() const
|
||||
{
|
||||
return "edit_file";
|
||||
}
|
||||
|
||||
QString EditFileTool::stringName() const
|
||||
QString EditFileTool::displayName() const
|
||||
{
|
||||
return {"Editing file"};
|
||||
}
|
||||
@ -71,7 +71,7 @@ QString EditFileTool::description() const
|
||||
"disabled auto-apply. DO NOT retry the same edit - wait for user action.";
|
||||
}
|
||||
|
||||
QJsonObject EditFileTool::getDefinition(PluginLLMCore::ToolSchemaFormat format) const
|
||||
QJsonObject EditFileTool::parametersSchema() const
|
||||
{
|
||||
QJsonObject properties;
|
||||
|
||||
@ -104,25 +104,9 @@ QJsonObject EditFileTool::getDefinition(PluginLLMCore::ToolSchemaFormat format)
|
||||
required.append("new_content");
|
||||
definition["required"] = required;
|
||||
|
||||
switch (format) {
|
||||
case PluginLLMCore::ToolSchemaFormat::OpenAI:
|
||||
return customizeForOpenAI(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Claude:
|
||||
return customizeForClaude(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Ollama:
|
||||
return customizeForOllama(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Google:
|
||||
return customizeForGoogle(definition);
|
||||
}
|
||||
|
||||
return definition;
|
||||
}
|
||||
|
||||
PluginLLMCore::ToolPermissions EditFileTool::requiredPermissions() const
|
||||
{
|
||||
return PluginLLMCore::ToolPermission::FileSystemWrite;
|
||||
}
|
||||
|
||||
QFuture<QString> EditFileTool::executeAsync(const QJsonObject &input)
|
||||
{
|
||||
return QtConcurrent::run([this, input]() -> QString {
|
||||
|
||||
@ -19,21 +19,20 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <pluginllmcore/BaseTool.hpp>
|
||||
#include <LLMCore/BaseTool.hpp>
|
||||
|
||||
namespace QodeAssist::Tools {
|
||||
|
||||
class EditFileTool : public PluginLLMCore::BaseTool
|
||||
class EditFileTool : public ::LLMCore::BaseTool
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit EditFileTool(QObject *parent = nullptr);
|
||||
|
||||
QString name() const override;
|
||||
QString stringName() const override;
|
||||
QString id() const override;
|
||||
QString displayName() const override;
|
||||
QString description() const override;
|
||||
QJsonObject getDefinition(PluginLLMCore::ToolSchemaFormat format) const override;
|
||||
PluginLLMCore::ToolPermissions requiredPermissions() const override;
|
||||
QJsonObject parametersSchema() const override;
|
||||
|
||||
QFuture<QString> executeAsync(const QJsonObject &input = QJsonObject()) override;
|
||||
};
|
||||
|
||||
@ -41,12 +41,12 @@ ExecuteTerminalCommandTool::ExecuteTerminalCommandTool(QObject *parent)
|
||||
{
|
||||
}
|
||||
|
||||
QString ExecuteTerminalCommandTool::name() const
|
||||
QString ExecuteTerminalCommandTool::id() const
|
||||
{
|
||||
return "execute_terminal_command";
|
||||
}
|
||||
|
||||
QString ExecuteTerminalCommandTool::stringName() const
|
||||
QString ExecuteTerminalCommandTool::displayName() const
|
||||
{
|
||||
return "Executing terminal command";
|
||||
}
|
||||
@ -56,7 +56,7 @@ QString ExecuteTerminalCommandTool::description() const
|
||||
return getCommandDescription();
|
||||
}
|
||||
|
||||
QJsonObject ExecuteTerminalCommandTool::getDefinition(PluginLLMCore::ToolSchemaFormat format) const
|
||||
QJsonObject ExecuteTerminalCommandTool::parametersSchema() const
|
||||
{
|
||||
QJsonObject definition;
|
||||
definition["type"] = "object";
|
||||
@ -70,34 +70,16 @@ QJsonObject ExecuteTerminalCommandTool::getDefinition(PluginLLMCore::ToolSchemaF
|
||||
|
||||
properties["args"] = QJsonObject{
|
||||
{"type", "string"},
|
||||
{"description",
|
||||
{"description",
|
||||
"Optional arguments for the command. Arguments with spaces should be properly quoted. "
|
||||
"Example: '--file \"path with spaces.txt\" --verbose'"}};
|
||||
|
||||
definition["properties"] = properties;
|
||||
definition["required"] = QJsonArray{"command"};
|
||||
|
||||
switch (format) {
|
||||
case PluginLLMCore::ToolSchemaFormat::OpenAI:
|
||||
return customizeForOpenAI(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Claude:
|
||||
return customizeForClaude(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Ollama:
|
||||
return customizeForOllama(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Google:
|
||||
return customizeForGoogle(definition);
|
||||
}
|
||||
|
||||
return definition;
|
||||
}
|
||||
|
||||
PluginLLMCore::ToolPermissions ExecuteTerminalCommandTool::requiredPermissions() const
|
||||
{
|
||||
return PluginLLMCore::ToolPermission::FileSystemRead
|
||||
| PluginLLMCore::ToolPermission::FileSystemWrite
|
||||
| PluginLLMCore::ToolPermission::NetworkAccess;
|
||||
}
|
||||
|
||||
QFuture<QString> ExecuteTerminalCommandTool::executeAsync(const QJsonObject &input)
|
||||
{
|
||||
const QString command = input.value("command").toString().trimmed();
|
||||
|
||||
@ -19,22 +19,21 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <pluginllmcore/BaseTool.hpp>
|
||||
#include <LLMCore/BaseTool.hpp>
|
||||
#include <QObject>
|
||||
|
||||
namespace QodeAssist::Tools {
|
||||
|
||||
class ExecuteTerminalCommandTool : public PluginLLMCore::BaseTool
|
||||
class ExecuteTerminalCommandTool : public ::LLMCore::BaseTool
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ExecuteTerminalCommandTool(QObject *parent = nullptr);
|
||||
|
||||
QString name() const override;
|
||||
QString stringName() const override;
|
||||
QString id() const override;
|
||||
QString displayName() const override;
|
||||
QString description() const override;
|
||||
QJsonObject getDefinition(PluginLLMCore::ToolSchemaFormat format) const override;
|
||||
PluginLLMCore::ToolPermissions requiredPermissions() const override;
|
||||
QJsonObject parametersSchema() const override;
|
||||
|
||||
QFuture<QString> executeAsync(const QJsonObject &input = QJsonObject()) override;
|
||||
|
||||
|
||||
@ -32,12 +32,12 @@ FindAndReadFileTool::FindAndReadFileTool(QObject *parent)
|
||||
, m_ignoreManager(new Context::IgnoreManager(this))
|
||||
{}
|
||||
|
||||
QString FindAndReadFileTool::name() const
|
||||
QString FindAndReadFileTool::id() const
|
||||
{
|
||||
return "find_and_read_file";
|
||||
}
|
||||
|
||||
QString FindAndReadFileTool::stringName() const
|
||||
QString FindAndReadFileTool::displayName() const
|
||||
{
|
||||
return "Finding and reading file";
|
||||
}
|
||||
@ -48,7 +48,7 @@ QString FindAndReadFileTool::description() const
|
||||
"Returns the best matching file and its content.";
|
||||
}
|
||||
|
||||
QJsonObject FindAndReadFileTool::getDefinition(PluginLLMCore::ToolSchemaFormat format) const
|
||||
QJsonObject FindAndReadFileTool::parametersSchema() const
|
||||
{
|
||||
QJsonObject properties;
|
||||
|
||||
@ -68,24 +68,9 @@ QJsonObject FindAndReadFileTool::getDefinition(PluginLLMCore::ToolSchemaFormat f
|
||||
definition["properties"] = properties;
|
||||
definition["required"] = QJsonArray{"query"};
|
||||
|
||||
switch (format) {
|
||||
case PluginLLMCore::ToolSchemaFormat::OpenAI:
|
||||
return customizeForOpenAI(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Claude:
|
||||
return customizeForClaude(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Ollama:
|
||||
return customizeForOllama(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Google:
|
||||
return customizeForGoogle(definition);
|
||||
}
|
||||
return definition;
|
||||
}
|
||||
|
||||
PluginLLMCore::ToolPermissions FindAndReadFileTool::requiredPermissions() const
|
||||
{
|
||||
return PluginLLMCore::ToolPermission::FileSystemRead;
|
||||
}
|
||||
|
||||
QFuture<QString> FindAndReadFileTool::executeAsync(const QJsonObject &input)
|
||||
{
|
||||
return QtConcurrent::run([this, input]() -> QString {
|
||||
|
||||
@ -22,25 +22,24 @@
|
||||
#include "FileSearchUtils.hpp"
|
||||
|
||||
#include <context/IgnoreManager.hpp>
|
||||
#include <pluginllmcore/BaseTool.hpp>
|
||||
#include <LLMCore/BaseTool.hpp>
|
||||
#include <QFuture>
|
||||
#include <QJsonObject>
|
||||
#include <QObject>
|
||||
|
||||
namespace QodeAssist::Tools {
|
||||
|
||||
class FindAndReadFileTool : public PluginLLMCore::BaseTool
|
||||
class FindAndReadFileTool : public ::LLMCore::BaseTool
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit FindAndReadFileTool(QObject *parent = nullptr);
|
||||
|
||||
QString name() const override;
|
||||
QString stringName() const override;
|
||||
QString id() const override;
|
||||
QString displayName() const override;
|
||||
QString description() const override;
|
||||
QJsonObject getDefinition(PluginLLMCore::ToolSchemaFormat format) const override;
|
||||
PluginLLMCore::ToolPermissions requiredPermissions() const override;
|
||||
QJsonObject parametersSchema() const override;
|
||||
QFuture<QString> executeAsync(const QJsonObject &input) override;
|
||||
|
||||
private:
|
||||
|
||||
@ -121,12 +121,12 @@ GetIssuesListTool::GetIssuesListTool(QObject *parent)
|
||||
IssuesTracker::instance();
|
||||
}
|
||||
|
||||
QString GetIssuesListTool::name() const
|
||||
QString GetIssuesListTool::id() const
|
||||
{
|
||||
return "get_issues_list";
|
||||
}
|
||||
|
||||
QString GetIssuesListTool::stringName() const
|
||||
QString GetIssuesListTool::displayName() const
|
||||
{
|
||||
return "Getting issues list from Qt Creator";
|
||||
}
|
||||
@ -138,7 +138,7 @@ QString GetIssuesListTool::description() const
|
||||
"Optional severity filter: 'error', 'warning', or 'all' (default).";
|
||||
}
|
||||
|
||||
QJsonObject GetIssuesListTool::getDefinition(PluginLLMCore::ToolSchemaFormat format) const
|
||||
QJsonObject GetIssuesListTool::parametersSchema() const
|
||||
{
|
||||
QJsonObject definition;
|
||||
definition["type"] = "object";
|
||||
@ -152,25 +152,9 @@ QJsonObject GetIssuesListTool::getDefinition(PluginLLMCore::ToolSchemaFormat for
|
||||
definition["properties"] = properties;
|
||||
definition["required"] = QJsonArray();
|
||||
|
||||
switch (format) {
|
||||
case PluginLLMCore::ToolSchemaFormat::OpenAI:
|
||||
return customizeForOpenAI(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Claude:
|
||||
return customizeForClaude(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Ollama:
|
||||
return customizeForOllama(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Google:
|
||||
return customizeForGoogle(definition);
|
||||
}
|
||||
|
||||
return definition;
|
||||
}
|
||||
|
||||
PluginLLMCore::ToolPermissions GetIssuesListTool::requiredPermissions() const
|
||||
{
|
||||
return PluginLLMCore::ToolPermission::FileSystemRead;
|
||||
}
|
||||
|
||||
QFuture<QString> GetIssuesListTool::executeAsync(const QJsonObject &input)
|
||||
{
|
||||
return QtConcurrent::run([input]() -> QString {
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <pluginllmcore/BaseTool.hpp>
|
||||
#include <LLMCore/BaseTool.hpp>
|
||||
#include <projectexplorer/task.h>
|
||||
#include <QList>
|
||||
#include <QMutex>
|
||||
@ -46,17 +46,16 @@ private:
|
||||
mutable QMutex m_mutex;
|
||||
};
|
||||
|
||||
class GetIssuesListTool : public PluginLLMCore::BaseTool
|
||||
class GetIssuesListTool : public ::LLMCore::BaseTool
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit GetIssuesListTool(QObject *parent = nullptr);
|
||||
|
||||
QString name() const override;
|
||||
QString stringName() const override;
|
||||
QString id() const override;
|
||||
QString displayName() const override;
|
||||
QString description() const override;
|
||||
QJsonObject getDefinition(PluginLLMCore::ToolSchemaFormat format) const override;
|
||||
PluginLLMCore::ToolPermissions requiredPermissions() const override;
|
||||
QJsonObject parametersSchema() const override;
|
||||
|
||||
QFuture<QString> executeAsync(const QJsonObject &input = QJsonObject()) override;
|
||||
};
|
||||
|
||||
@ -37,12 +37,12 @@ ListProjectFilesTool::ListProjectFilesTool(QObject *parent)
|
||||
|
||||
{}
|
||||
|
||||
QString ListProjectFilesTool::name() const
|
||||
QString ListProjectFilesTool::id() const
|
||||
{
|
||||
return "list_project_files";
|
||||
}
|
||||
|
||||
QString ListProjectFilesTool::stringName() const
|
||||
QString ListProjectFilesTool::displayName() const
|
||||
{
|
||||
return {"Reading project files list"};
|
||||
}
|
||||
@ -53,32 +53,16 @@ QString ListProjectFilesTool::description() const
|
||||
"Useful for understanding project structure. No parameters required.";
|
||||
}
|
||||
|
||||
QJsonObject ListProjectFilesTool::getDefinition(PluginLLMCore::ToolSchemaFormat format) const
|
||||
QJsonObject ListProjectFilesTool::parametersSchema() const
|
||||
{
|
||||
QJsonObject definition;
|
||||
definition["type"] = "object";
|
||||
definition["properties"] = QJsonObject();
|
||||
definition["required"] = QJsonArray();
|
||||
|
||||
switch (format) {
|
||||
case PluginLLMCore::ToolSchemaFormat::OpenAI:
|
||||
return customizeForOpenAI(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Claude:
|
||||
return customizeForClaude(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Ollama:
|
||||
return customizeForOllama(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Google:
|
||||
return customizeForGoogle(definition);
|
||||
}
|
||||
|
||||
return definition;
|
||||
}
|
||||
|
||||
PluginLLMCore::ToolPermissions ListProjectFilesTool::requiredPermissions() const
|
||||
{
|
||||
return PluginLLMCore::ToolPermission::FileSystemRead;
|
||||
}
|
||||
|
||||
QFuture<QString> ListProjectFilesTool::executeAsync(const QJsonObject &input)
|
||||
{
|
||||
Q_UNUSED(input)
|
||||
|
||||
@ -19,23 +19,22 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <pluginllmcore/BaseTool.hpp>
|
||||
#include <LLMCore/BaseTool.hpp>
|
||||
|
||||
#include <context/IgnoreManager.hpp>
|
||||
|
||||
namespace QodeAssist::Tools {
|
||||
|
||||
class ListProjectFilesTool : public PluginLLMCore::BaseTool
|
||||
class ListProjectFilesTool : public ::LLMCore::BaseTool
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ListProjectFilesTool(QObject *parent = nullptr);
|
||||
|
||||
QString name() const override;
|
||||
QString stringName() const override;
|
||||
QString id() const override;
|
||||
QString displayName() const override;
|
||||
QString description() const override;
|
||||
QJsonObject getDefinition(PluginLLMCore::ToolSchemaFormat format) const override;
|
||||
PluginLLMCore::ToolPermissions requiredPermissions() const override;
|
||||
QJsonObject parametersSchema() const override;
|
||||
|
||||
QFuture<QString> executeAsync(const QJsonObject &input = QJsonObject()) override;
|
||||
|
||||
|
||||
@ -43,12 +43,12 @@ ProjectSearchTool::ProjectSearchTool(QObject *parent)
|
||||
, m_ignoreManager(new Context::IgnoreManager(this))
|
||||
{}
|
||||
|
||||
QString ProjectSearchTool::name() const
|
||||
QString ProjectSearchTool::id() const
|
||||
{
|
||||
return "search_project";
|
||||
}
|
||||
|
||||
QString ProjectSearchTool::stringName() const
|
||||
QString ProjectSearchTool::displayName() const
|
||||
{
|
||||
return "Searching in project";
|
||||
}
|
||||
@ -60,7 +60,7 @@ QString ProjectSearchTool::description() const
|
||||
"Symbol mode: finds C++ definitions (classes, functions, etc).";
|
||||
}
|
||||
|
||||
QJsonObject ProjectSearchTool::getDefinition(PluginLLMCore::ToolSchemaFormat format) const
|
||||
QJsonObject ProjectSearchTool::parametersSchema() const
|
||||
{
|
||||
QJsonObject properties;
|
||||
|
||||
@ -94,24 +94,9 @@ QJsonObject ProjectSearchTool::getDefinition(PluginLLMCore::ToolSchemaFormat for
|
||||
definition["properties"] = properties;
|
||||
definition["required"] = QJsonArray{"query", "search_type"};
|
||||
|
||||
switch (format) {
|
||||
case PluginLLMCore::ToolSchemaFormat::OpenAI:
|
||||
return customizeForOpenAI(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Claude:
|
||||
return customizeForClaude(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Ollama:
|
||||
return customizeForOllama(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Google:
|
||||
return customizeForGoogle(definition);
|
||||
}
|
||||
return definition;
|
||||
}
|
||||
|
||||
PluginLLMCore::ToolPermissions ProjectSearchTool::requiredPermissions() const
|
||||
{
|
||||
return PluginLLMCore::ToolPermission::FileSystemRead;
|
||||
}
|
||||
|
||||
QFuture<QString> ProjectSearchTool::executeAsync(const QJsonObject &input)
|
||||
{
|
||||
return QtConcurrent::run([this, input]() -> QString {
|
||||
|
||||
@ -20,25 +20,24 @@
|
||||
#pragma once
|
||||
|
||||
#include <context/IgnoreManager.hpp>
|
||||
#include <pluginllmcore/BaseTool.hpp>
|
||||
#include <LLMCore/BaseTool.hpp>
|
||||
#include <QFuture>
|
||||
#include <QJsonObject>
|
||||
#include <QObject>
|
||||
|
||||
namespace QodeAssist::Tools {
|
||||
|
||||
class ProjectSearchTool : public PluginLLMCore::BaseTool
|
||||
class ProjectSearchTool : public ::LLMCore::BaseTool
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ProjectSearchTool(QObject *parent = nullptr);
|
||||
|
||||
QString name() const override;
|
||||
QString stringName() const override;
|
||||
QString id() const override;
|
||||
QString displayName() const override;
|
||||
QString description() const override;
|
||||
QJsonObject getDefinition(PluginLLMCore::ToolSchemaFormat format) const override;
|
||||
PluginLLMCore::ToolPermissions requiredPermissions() const override;
|
||||
QJsonObject parametersSchema() const override;
|
||||
QFuture<QString> executeAsync(const QJsonObject &input) override;
|
||||
|
||||
private:
|
||||
|
||||
@ -31,12 +31,12 @@ TodoTool::TodoTool(QObject *parent)
|
||||
: BaseTool(parent)
|
||||
{}
|
||||
|
||||
QString TodoTool::name() const
|
||||
QString TodoTool::id() const
|
||||
{
|
||||
return "todo_tool";
|
||||
}
|
||||
|
||||
QString TodoTool::stringName() const
|
||||
QString TodoTool::displayName() const
|
||||
{
|
||||
return "Managing TODO list for task tracking";
|
||||
}
|
||||
@ -53,7 +53,7 @@ QString TodoTool::description() const
|
||||
"The list persists throughout the conversation.";
|
||||
}
|
||||
|
||||
QJsonObject TodoTool::getDefinition(PluginLLMCore::ToolSchemaFormat format) const
|
||||
QJsonObject TodoTool::parametersSchema() const
|
||||
{
|
||||
QJsonObject definition;
|
||||
definition["type"] = "object";
|
||||
@ -97,32 +97,15 @@ QJsonObject TodoTool::getDefinition(PluginLLMCore::ToolSchemaFormat format) cons
|
||||
required.append("operation");
|
||||
definition["required"] = required;
|
||||
|
||||
switch (format) {
|
||||
case PluginLLMCore::ToolSchemaFormat::OpenAI:
|
||||
return customizeForOpenAI(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Claude:
|
||||
return customizeForClaude(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Ollama:
|
||||
return customizeForOllama(definition);
|
||||
case PluginLLMCore::ToolSchemaFormat::Google:
|
||||
return customizeForGoogle(definition);
|
||||
}
|
||||
|
||||
return definition;
|
||||
}
|
||||
|
||||
PluginLLMCore::ToolPermissions TodoTool::requiredPermissions() const
|
||||
{
|
||||
return PluginLLMCore::ToolPermission::None;
|
||||
}
|
||||
|
||||
QFuture<QString> TodoTool::executeAsync(const QJsonObject &input)
|
||||
{
|
||||
return QtConcurrent::run([this, input]() -> QString {
|
||||
QString sessionId = input.value("session_id").toString();
|
||||
if (sessionId.isEmpty()) {
|
||||
sessionId = "current";
|
||||
}
|
||||
QMutexLocker sessionLocker(&m_mutex);
|
||||
QString sessionId = m_currentSessionId.isEmpty() ? "current" : m_currentSessionId;
|
||||
sessionLocker.unlock();
|
||||
|
||||
const QString operation = input.value("operation").toString();
|
||||
|
||||
@ -194,6 +177,12 @@ QFuture<QString> TodoTool::executeAsync(const QJsonObject &input)
|
||||
});
|
||||
}
|
||||
|
||||
void TodoTool::setCurrentSessionId(const QString &sessionId)
|
||||
{
|
||||
QMutexLocker locker(&m_mutex);
|
||||
m_currentSessionId = sessionId;
|
||||
}
|
||||
|
||||
void TodoTool::clearSession(const QString &sessionId)
|
||||
{
|
||||
QMutexLocker locker(&m_mutex);
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <pluginllmcore/BaseTool.hpp>
|
||||
#include <LLMCore/BaseTool.hpp>
|
||||
|
||||
#include <QHash>
|
||||
#include <QMutex>
|
||||
@ -34,21 +34,21 @@ struct TodoItem
|
||||
bool completed;
|
||||
};
|
||||
|
||||
class TodoTool : public PluginLLMCore::BaseTool
|
||||
class TodoTool : public ::LLMCore::BaseTool
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit TodoTool(QObject *parent = nullptr);
|
||||
|
||||
QString name() const override;
|
||||
QString stringName() const override;
|
||||
QString id() const override;
|
||||
QString displayName() const override;
|
||||
QString description() const override;
|
||||
QJsonObject getDefinition(PluginLLMCore::ToolSchemaFormat format) const override;
|
||||
PluginLLMCore::ToolPermissions requiredPermissions() const override;
|
||||
QJsonObject parametersSchema() const override;
|
||||
|
||||
QFuture<QString> executeAsync(const QJsonObject &input = QJsonObject()) override;
|
||||
|
||||
void setCurrentSessionId(const QString &sessionId);
|
||||
void clearSession(const QString &sessionId);
|
||||
|
||||
private:
|
||||
@ -59,6 +59,7 @@ private:
|
||||
QString listRemainingTodosLocked(const QString &sessionId) const;
|
||||
|
||||
mutable QMutex m_mutex;
|
||||
QString m_currentSessionId;
|
||||
QHash<QString, QHash<int, TodoItem>> m_sessionTodos;
|
||||
QHash<QString, int> m_sessionNextId;
|
||||
};
|
||||
|
||||
49
tools/ToolsRegistration.cpp
Normal file
49
tools/ToolsRegistration.cpp
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright (C) 2026 Petr Mironychev
|
||||
*
|
||||
* This file is part of QodeAssist.
|
||||
*
|
||||
* QodeAssist is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* QodeAssist is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with QodeAssist. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "ToolsRegistration.hpp"
|
||||
|
||||
#include <LLMCore/ToolsManager.hpp>
|
||||
|
||||
#include "BuildProjectTool.hpp"
|
||||
#include "CreateNewFileTool.hpp"
|
||||
#include "EditFileTool.hpp"
|
||||
#include "ExecuteTerminalCommandTool.hpp"
|
||||
#include "FindAndReadFileTool.hpp"
|
||||
#include "GetIssuesListTool.hpp"
|
||||
#include "ListProjectFilesTool.hpp"
|
||||
#include "ProjectSearchTool.hpp"
|
||||
#include "TodoTool.hpp"
|
||||
|
||||
namespace QodeAssist::Tools {
|
||||
|
||||
void registerQodeAssistTools(::LLMCore::ToolsManager *manager)
|
||||
{
|
||||
manager->addTool(new ListProjectFilesTool(manager));
|
||||
manager->addTool(new GetIssuesListTool(manager));
|
||||
manager->addTool(new CreateNewFileTool(manager));
|
||||
manager->addTool(new EditFileTool(manager));
|
||||
manager->addTool(new BuildProjectTool(manager));
|
||||
manager->addTool(new ExecuteTerminalCommandTool(manager));
|
||||
manager->addTool(new ProjectSearchTool(manager));
|
||||
manager->addTool(new FindAndReadFileTool(manager));
|
||||
manager->addTool(new TodoTool(manager));
|
||||
}
|
||||
|
||||
} // namespace QodeAssist::Tools
|
||||
30
tools/ToolsRegistration.hpp
Normal file
30
tools/ToolsRegistration.hpp
Normal file
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (C) 2025 Petr Mironychev
|
||||
*
|
||||
* This file is part of QodeAssist.
|
||||
*
|
||||
* QodeAssist is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* QodeAssist is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with QodeAssist. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace LLMCore {
|
||||
class ToolsManager;
|
||||
}
|
||||
|
||||
namespace QodeAssist::Tools {
|
||||
|
||||
void registerQodeAssistTools(::LLMCore::ToolsManager *manager);
|
||||
|
||||
} // namespace QodeAssist::Tools
|
||||
Reference in New Issue
Block a user