// 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 #include #include #include #include "session/ConversationHistory.hpp" namespace QodeAssist::Session { enum class RowKind { User, Assistant, System, Tool, FileEdit, Thinking }; struct MessageRow { RowKind kind = RowKind::User; QString id; QString content; bool redacted = false; QString signature; QString toolName; QJsonObject toolArguments; QString toolResult; QList attachments; QList images; Usage usage; bool operator==(const MessageRow &other) const = default; friend QDebug operator<<(QDebug debug, const MessageRow &row) { return debug.nospace() << "Row(kind=" << int(row.kind) << ", id=" << row.id << ", content=" << row.content << ", sig=" << row.signature << ", redacted=" << row.redacted << ", tool=" << row.toolName << ", args=" << row.toolArguments << ", result=" << row.toolResult << ", attachments=" << row.attachments << ", images=" << row.images << ", " << row.usage << ")"; } }; std::optional projectBlockToRow(const Message &message, const ContentBlock &block); QList projectMessageToRows(const Message &message); QList projectToRows(const ConversationHistory &history); ConversationHistory buildFromRows(const QList &rows); } // namespace QodeAssist::Session