Files
QodeAssist/sources/session/ContentBlock.hpp
Petr Mironychev af85efb554 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
2026-07-19 22:45:04 +02:00

111 lines
2.7 KiB
C++

// Copyright (C) 2026 Petr Mironychev
// SPDX-License-Identifier: GPL-3.0-or-later
// Additional attribution terms under GPLv3 §7(b) apply — see LICENSE
#pragma once
#include <QDebug>
#include <QJsonObject>
#include <QString>
#include <variant>
namespace QodeAssist::Session {
struct TextBlock
{
QString text;
bool operator==(const TextBlock &other) const = default;
friend QDebug operator<<(QDebug debug, const TextBlock &block)
{
return debug.nospace() << "Text(" << block.text << ")";
}
};
struct ThinkingBlock
{
QString text;
QString signature;
bool redacted = false;
bool operator==(const ThinkingBlock &other) const = default;
friend QDebug operator<<(QDebug debug, const ThinkingBlock &block)
{
return debug.nospace() << "Thinking(" << block.text << ", sig=" << block.signature
<< ", redacted=" << block.redacted << ")";
}
};
struct ToolCallBlock
{
QString id;
QString name;
QJsonObject arguments;
QString result;
bool operator==(const ToolCallBlock &other) const = default;
friend QDebug operator<<(QDebug debug, const ToolCallBlock &block)
{
return debug.nospace() << "ToolCall(" << block.id << ", " << block.name
<< ", args=" << block.arguments << ", result=" << block.result
<< ")";
}
};
struct AttachmentBlock
{
QString fileName;
QString storedPath;
bool operator==(const AttachmentBlock &other) const = default;
friend QDebug operator<<(QDebug debug, const AttachmentBlock &block)
{
return debug.nospace() << "Attachment(" << block.fileName << ", " << block.storedPath
<< ")";
}
};
struct ImageBlock
{
QString fileName;
QString storedPath;
QString mediaType;
bool operator==(const ImageBlock &other) const = default;
friend QDebug operator<<(QDebug debug, const ImageBlock &block)
{
return debug.nospace() << "Image(" << block.fileName << ", " << block.storedPath << ", "
<< block.mediaType << ")";
}
};
struct FileEditBlock
{
QString id;
QString payload;
bool operator==(const FileEditBlock &other) const = default;
friend QDebug operator<<(QDebug debug, const FileEditBlock &block)
{
return debug.nospace() << "FileEdit(" << block.id << ", " << block.payload << ")";
}
};
using ContentBlock = std::
variant<TextBlock, ThinkingBlock, ToolCallBlock, AttachmentBlock, ImageBlock, FileEditBlock>;
inline QDebug operator<<(QDebug debug, const ContentBlock &block)
{
std::visit([&debug](const auto &alternative) { debug << alternative; }, block);
return debug;
}
} // namespace QodeAssist::Session