feat: Add skills feature for tool and chat calling (#351)

This commit is contained in:
Petr Mironychev
2026-05-19 09:46:50 +02:00
committed by GitHub
parent a3ad314cd4
commit 7483c78777
41 changed files with 1379 additions and 30 deletions

View File

@@ -17,11 +17,15 @@
namespace QodeAssist::Chat {
ChatEditor::ChatEditor(QQmlEngine *engine, SessionFileRegistry *sessionFileRegistry)
ChatEditor::ChatEditor(
QQmlEngine *engine,
SessionFileRegistry *sessionFileRegistry,
Skills::SkillsManager *skillsManager)
: m_engine(engine)
, m_sessionFileRegistry(sessionFileRegistry)
, m_skillsManager(skillsManager)
, m_document(new ChatDocument(this))
, m_chatWidget(new ChatWidget(engine, sessionFileRegistry))
, m_chatWidget(new ChatWidget(engine, sessionFileRegistry, skillsManager))
{
setWidget(m_chatWidget);
setContext(Core::Context(Constants::QODE_ASSIST_CHAT_CONTEXT));
@@ -67,7 +71,7 @@ QWidget *ChatEditor::toolBar()
Core::IEditor *ChatEditor::duplicate()
{
return new ChatEditor(m_engine, m_sessionFileRegistry);
return new ChatEditor(m_engine, m_sessionFileRegistry, m_skillsManager);
}
} // namespace QodeAssist::Chat

View File

@@ -7,6 +7,10 @@
class QQmlEngine;
namespace QodeAssist::Skills {
class SkillsManager;
}
namespace QodeAssist::Chat {
class ChatDocument;
@@ -20,7 +24,10 @@ class ChatEditor : public Core::IEditor
Q_OBJECT
public:
ChatEditor(QQmlEngine *engine, SessionFileRegistry *sessionFileRegistry);
ChatEditor(
QQmlEngine *engine,
SessionFileRegistry *sessionFileRegistry,
Skills::SkillsManager *skillsManager);
~ChatEditor() override;
Core::IDocument *document() const override;
@@ -32,6 +39,7 @@ public:
private:
QQmlEngine *m_engine;
SessionFileRegistry *m_sessionFileRegistry;
Skills::SkillsManager *m_skillsManager;
ChatDocument *m_document;
ChatWidget *m_chatWidget;
};

View File

@@ -9,12 +9,16 @@
namespace QodeAssist::Chat {
ChatEditorFactory::ChatEditorFactory(QQmlEngine *engine, SessionFileRegistry *sessionFileRegistry)
ChatEditorFactory::ChatEditorFactory(
QQmlEngine *engine,
SessionFileRegistry *sessionFileRegistry,
Skills::SkillsManager *skillsManager)
{
setId(Constants::QODE_ASSIST_CHAT_EDITOR_ID);
setDisplayName(Tr::tr("QodeAssist Chat"));
setEditorCreator(
[engine, sessionFileRegistry] { return new ChatEditor(engine, sessionFileRegistry); });
setEditorCreator([engine, sessionFileRegistry, skillsManager] {
return new ChatEditor(engine, sessionFileRegistry, skillsManager);
});
}
} // namespace QodeAssist::Chat

View File

@@ -7,6 +7,10 @@
class QQmlEngine;
namespace QodeAssist::Skills {
class SkillsManager;
}
namespace QodeAssist::Chat {
class SessionFileRegistry;
@@ -14,7 +18,10 @@ class SessionFileRegistry;
class ChatEditorFactory : public Core::IEditorFactory
{
public:
ChatEditorFactory(QQmlEngine *engine, SessionFileRegistry *sessionFileRegistry);
ChatEditorFactory(
QQmlEngine *engine,
SessionFileRegistry *sessionFileRegistry,
Skills::SkillsManager *skillsManager);
};
} // namespace QodeAssist::Chat

View File

@@ -8,9 +8,12 @@
namespace QodeAssist::Chat {
ChatOutputPane::ChatOutputPane(
QQmlEngine *engine, SessionFileRegistry *sessionFileRegistry, QObject *parent)
QQmlEngine *engine,
SessionFileRegistry *sessionFileRegistry,
Skills::SkillsManager *skillsManager,
QObject *parent)
: Core::IOutputPane(parent)
, m_chatWidget{new ChatWidget{engine, sessionFileRegistry}}
, m_chatWidget{new ChatWidget{engine, sessionFileRegistry, skillsManager}}
{
setId("QodeAssistChat");
setDisplayName(Tr::tr("QodeAssist Chat"));

View File

@@ -6,6 +6,10 @@
#include "ChatView/ChatWidget.hpp"
#include <coreplugin/ioutputpane.h>
namespace QodeAssist::Skills {
class SkillsManager;
}
namespace QodeAssist::Chat {
class SessionFileRegistry;
@@ -18,6 +22,7 @@ public:
explicit ChatOutputPane(
QQmlEngine *engine,
SessionFileRegistry *sessionFileRegistry,
Skills::SkillsManager *skillsManager,
QObject *parent = nullptr);
~ChatOutputPane() override;

View File

@@ -6,12 +6,17 @@
#include "ChatView/ChatWidget.hpp"
#include "ChatView/SessionFileRegistry.hpp"
#include "QodeAssistConstants.hpp"
#include "sources/skills/SkillsManager.hpp"
namespace QodeAssist::Chat {
NavigationPanel::NavigationPanel(QQmlEngine *engine, SessionFileRegistry *sessionFileRegistry)
NavigationPanel::NavigationPanel(
QQmlEngine *engine,
SessionFileRegistry *sessionFileRegistry,
Skills::SkillsManager *skillsManager)
: m_engine{engine}
, m_sessionFileRegistry{sessionFileRegistry}
, m_skillsManager{skillsManager}
{
setDisplayName(tr("QodeAssist Chat"));
setPriority(500);
@@ -23,7 +28,7 @@ NavigationPanel::~NavigationPanel() {}
Core::NavigationView NavigationPanel::createWidget()
{
return {.widget = new ChatWidget{m_engine, m_sessionFileRegistry}};
return {.widget = new ChatWidget{m_engine, m_sessionFileRegistry, m_skillsManager}};
}
} // namespace QodeAssist::Chat

View File

@@ -9,6 +9,10 @@
class QQmlEngine;
namespace QodeAssist::Skills {
class SkillsManager;
}
namespace QodeAssist::Chat {
class SessionFileRegistry;
@@ -17,7 +21,10 @@ class NavigationPanel : public Core::INavigationWidgetFactory
{
Q_OBJECT
public:
explicit NavigationPanel(QQmlEngine *engine, SessionFileRegistry *sessionFileRegistry);
explicit NavigationPanel(
QQmlEngine *engine,
SessionFileRegistry *sessionFileRegistry,
Skills::SkillsManager *skillsManager);
~NavigationPanel();
Core::NavigationView createWidget() override;
@@ -25,6 +32,7 @@ public:
private:
QPointer<QQmlEngine> m_engine;
QPointer<SessionFileRegistry> m_sessionFileRegistry;
QPointer<Skills::SkillsManager> m_skillsManager;
};
} // namespace QodeAssist::Chat