refactor: Separate and simplified tools (#340)

This commit is contained in:
Petr Mironychev
2026-04-19 18:12:15 +02:00
committed by GitHub
parent ede2c01eb7
commit 2891b313d2
16 changed files with 465 additions and 245 deletions

View File

@@ -21,29 +21,62 @@
#include <LLMQore/ToolsManager.hpp>
#include <settings/ToolsSettings.hpp>
#include <utils/aspects.h>
#include "BuildProjectTool.hpp"
#include "CreateNewFileTool.hpp"
#include "EditFileTool.hpp"
#include "ExecuteTerminalCommandTool.hpp"
#include "FindAndReadFileTool.hpp"
#include "FindFileTool.hpp"
#include "GetIssuesListTool.hpp"
#include "ListProjectFilesTool.hpp"
#include "ProjectSearchTool.hpp"
#include "ReadFileTool.hpp"
#include "TodoTool.hpp"
namespace QodeAssist::Tools {
namespace {
template<typename ToolT>
void wireTool(::LLMQore::ToolsManager *manager,
Utils::BoolAspect &aspect,
const QString &toolId)
{
auto sync = [manager, toolId, &aspect]() {
const bool wanted = aspect.volatileValue();
const bool present = manager->tool(toolId) != nullptr;
if (wanted && !present) {
manager->addTool(new ToolT(manager));
} else if (!wanted && present) {
manager->removeTool(toolId);
}
};
sync();
QObject::connect(&aspect, &Utils::BoolAspect::volatileValueChanged, manager, sync);
QObject::connect(&aspect, &Utils::BaseAspect::changed, manager, sync);
}
} // namespace
void registerQodeAssistTools(::LLMQore::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));
auto &s = Settings::toolsSettings();
wireTool<ListProjectFilesTool>(manager, s.enableListProjectFilesTool, "list_project_files");
wireTool<FindFileTool>(manager, s.enableFindFileTool, "find_file");
wireTool<ReadFileTool>(manager, s.enableReadFileTool, "read_file");
wireTool<ProjectSearchTool>(manager, s.enableProjectSearchTool, "search_project");
wireTool<CreateNewFileTool>(manager, s.enableCreateNewFileTool, "create_new_file");
wireTool<EditFileTool>(manager, s.enableEditFileTool, "edit_file");
wireTool<BuildProjectTool>(manager, s.enableBuildProjectTool, "build_project");
wireTool<GetIssuesListTool>(manager, s.enableGetIssuesListTool, "get_issues_list");
wireTool<ExecuteTerminalCommandTool>(
manager, s.enableTerminalCommandTool, "execute_terminal_command");
wireTool<TodoTool>(manager, s.enableTodoTool, "todo_tool");
}
} // namespace QodeAssist::Tools