From 8f8f7f10205d2b00b65c76ebbde9c10f8974f076 Mon Sep 17 00:00:00 2001 From: subochev Date: Sun, 20 Sep 2026 21:02:50 +0300 Subject: [PATCH] refactor(message-log-api): reorganize classes into separate files for clarity - Extracted `TurnTokens`, `MessageOrigin`, and `MessageEvent` into standalone files. - Simplified `MessageContext` by externalizing `MessageOrigin`. - Improves modularity and code maintainability for append-only audit logs. --- .../agentik/messageLog/MessageContext.kt | 17 ---------------- .../binom/agentik/messageLog/MessageEvent.kt | 6 ++++++ .../binom/agentik/messageLog/MessageOrigin.kt | 20 +++++++++++++++++++ .../binom/agentik/messageLog/MessageRecord.kt | 15 -------------- .../binom/agentik/messageLog/MessageStore.kt | 4 ---- .../pw/binom/agentik/messageLog/TurnTokens.kt | 18 +++++++++++++++++ 6 files changed, 44 insertions(+), 36 deletions(-) create mode 100644 message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageEvent.kt create mode 100644 message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageOrigin.kt create mode 100644 message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/TurnTokens.kt diff --git a/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageContext.kt b/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageContext.kt index 917683b..01cd75b 100644 --- a/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageContext.kt +++ b/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageContext.kt @@ -1,25 +1,8 @@ package pw.binom.agentik.messageLog -import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.json.JsonElement -/** - * Контекст инициации хода (кто/что и почему). Дубликат типа из `:proto` — - * живёт здесь чтобы не тащить `:proto` в слой хранения данных. - */ -@Serializable -enum class MessageOrigin { - @SerialName("user") - USER, - - @SerialName("system") - SYSTEM, - - @SerialName("event") - EVENT, -} - @Serializable data class MessageContext( val origin: MessageOrigin, diff --git a/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageEvent.kt b/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageEvent.kt new file mode 100644 index 0000000..6832c00 --- /dev/null +++ b/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageEvent.kt @@ -0,0 +1,6 @@ +package pw.binom.agentik.messageLog + +sealed interface MessageEvent { + val conversationId: String + data class Appended(override val conversationId: String, val record: MessageRecord) : MessageEvent +} diff --git a/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageOrigin.kt b/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageOrigin.kt new file mode 100644 index 0000000..130d8d2 --- /dev/null +++ b/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageOrigin.kt @@ -0,0 +1,20 @@ +package pw.binom.agentik.messageLog + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +/** + * Контекст инициации хода (кто/что и почему). Дубликат типа из `:proto` — + * живёт здесь чтобы не тащить `:proto` в слой хранения данных. + */ +@Serializable +enum class MessageOrigin { + @SerialName("user") + USER, + + @SerialName("system") + SYSTEM, + + @SerialName("event") + EVENT, +} \ No newline at end of file diff --git a/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageRecord.kt b/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageRecord.kt index 97492a4..08be8ee 100644 --- a/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageRecord.kt +++ b/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageRecord.kt @@ -4,21 +4,6 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlin.time.Instant -/** - * Token usage одного assistant turn'а. - */ -@Serializable -data class TurnTokens( - val input: Int, - val output: Int, -) { - val total: Int get() = input + output - init { - require(input >= 0) { "input tokens must be non-negative, got $input" } - require(output >= 0) { "output tokens must be non-negative, got $output" } - } -} - /** * Запись в таблице `message` (append-only audit). */ diff --git a/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageStore.kt b/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageStore.kt index fdabf23..e4758f5 100644 --- a/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageStore.kt +++ b/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/MessageStore.kt @@ -30,7 +30,3 @@ interface MessageStore : AutoCloseable { suspend fun tokenStats(conversationId: String): TokenStats } -sealed interface MessageEvent { - val conversationId: String - data class Appended(override val conversationId: String, val record: MessageRecord) : MessageEvent -} diff --git a/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/TurnTokens.kt b/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/TurnTokens.kt new file mode 100644 index 0000000..c643d05 --- /dev/null +++ b/message-log-api/src/commonMain/kotlin/pw/binom/agentik/messageLog/TurnTokens.kt @@ -0,0 +1,18 @@ +package pw.binom.agentik.messageLog + +import kotlinx.serialization.Serializable + +/** + * Token usage одного assistant turn'а. + */ +@Serializable +data class TurnTokens( + val input: Int, + val output: Int, +) { + val total: Int get() = input + output + init { + require(input >= 0) { "input tokens must be non-negative, got $input" } + require(output >= 0) { "output tokens must be non-negative, got $output" } + } +} \ No newline at end of file