mirror of
https://github.com/Palm1r/QodeAssist.git
synced 2026-07-23 19:51:05 -04:00
refactor: Decoupling chat architecture (#367)
* refactor: Migrate tests to Qt Creator plugin framework and update llmqore transports * refactor: Move conversation history into IDE-free session library * refactor: Extract turn context assembly behind injected ports * build: Add RunQodeAssistTests target for the plugin test suite * refactor: Route the chat through a Session and ChatBackend seam
This commit is contained in:
58
sources/session/TurnContextBuilder.cpp
Normal file
58
sources/session/TurnContextBuilder.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
// Copyright (C) 2026 Petr Mironychev
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
// Additional attribution terms under GPLv3 §7(b) apply — see LICENSE
|
||||
|
||||
#include "session/TurnContextBuilder.hpp"
|
||||
|
||||
#include <QRegularExpression>
|
||||
#include <QStringList>
|
||||
|
||||
namespace QodeAssist::Session {
|
||||
|
||||
TurnContextBuilder::TurnContextBuilder(
|
||||
const IProjectContextPort &project,
|
||||
const ISkillsContextPort *skills,
|
||||
const ILinkedFilesPort &linkedFiles)
|
||||
: m_project(project)
|
||||
, m_skills(skills)
|
||||
, m_linkedFiles(linkedFiles)
|
||||
{}
|
||||
|
||||
TurnContext TurnContextBuilder::build(const TurnContextRequest &request) const
|
||||
{
|
||||
TurnContext context;
|
||||
context.basePrompt = request.basePrompt;
|
||||
context.rolePrompt = request.rolePrompt;
|
||||
|
||||
context.project = m_project.projectInfo();
|
||||
if (context.project.available)
|
||||
context.projectRules = m_project.projectRules();
|
||||
|
||||
if (m_skills) {
|
||||
context.alwaysOnSkills = m_skills->alwaysOnBodies();
|
||||
context.skillsCatalog = m_skills->catalogText();
|
||||
|
||||
static const QRegularExpression skillCommand(
|
||||
QStringLiteral("(?:^|\\s)/([a-z0-9][a-z0-9-]*)"));
|
||||
QStringList invokedSkillNames;
|
||||
auto skillMatch = skillCommand.globalMatch(request.message);
|
||||
while (skillMatch.hasNext()) {
|
||||
const QString skillName = skillMatch.next().captured(1);
|
||||
if (invokedSkillNames.contains(skillName))
|
||||
continue;
|
||||
const auto invokedSkill = m_skills->findSkill(skillName);
|
||||
if (invokedSkill && !invokedSkill->body.isEmpty()) {
|
||||
invokedSkillNames << skillName;
|
||||
context.invokedSkills.append(*invokedSkill);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
context.linkedFilePaths = request.linkedFilePaths;
|
||||
if (!request.linkedFilePaths.isEmpty())
|
||||
context.linkedFiles = m_linkedFiles.readFiles(request.linkedFilePaths);
|
||||
|
||||
return context;
|
||||
}
|
||||
|
||||
} // namespace QodeAssist::Session
|
||||
Reference in New Issue
Block a user