refactor: rename the router subsystem to Talkie

The 'router' name was misleading — it's the always-on conversational front-end
(CHAT triage + STEERING into a running workflow), not a routing layer, and it's
distinct from InferenceRouter. Rename core:router -> core:talkie, package
com.correx.core.router -> com.correx.core.talkie, and RouterFacade/Config/State/
Repository/ContextBuilder/Projector/Reducer/Response -> Talkie*. Config section
[router] -> [talkie] (legacy [router] still read as fallback).

Persisted wire formats are preserved: ChatTurnRole.ROUTER and the
RouterNarrationEvent @SerialName("RouterNarration") stay, so existing event
logs still replay. RouterNarrationEvent the class is now TalkieNarrationEvent.
This commit is contained in:
2026-07-03 13:26:00 +04:00
parent 77c28ba313
commit 595ec187bc
84 changed files with 736 additions and 734 deletions
@@ -53,7 +53,7 @@ data class ContextTruncatedEvent(
@Serializable
@SerialName("RouterNarration")
data class RouterNarrationEvent(
data class TalkieNarrationEvent(
val sessionId: SessionId,
val narrationId: String,
val trigger: String,
@@ -20,7 +20,7 @@ import com.correx.core.events.events.ClarificationRequestedEvent
import com.correx.core.events.events.ChatTurnEvent
import com.correx.core.events.events.CritiqueFindingsRecordedEvent
import com.correx.core.events.events.CritiqueOutcomeCorrelatedEvent
import com.correx.core.events.events.RouterNarrationEvent
import com.correx.core.events.events.TalkieNarrationEvent
import com.correx.core.events.events.OperatorProfileBoundEvent
import com.correx.core.events.events.ProjectProfileBoundEvent
import com.correx.core.events.events.SessionWorkspaceBoundEvent
@@ -147,7 +147,7 @@ val eventModule = SerializersModule {
subclass(ChatSessionStartedEvent::class)
subclass(SessionWorkingTaskEvent::class)
subclass(ChatTurnEvent::class)
subclass(RouterNarrationEvent::class)
subclass(TalkieNarrationEvent::class)
subclass(SessionWorkspaceBoundEvent::class)
subclass(OperatorProfileBoundEvent::class)
subclass(ProjectProfileBoundEvent::class)
@@ -1,16 +1,16 @@
package com.correx.core.events.serialization
import com.correx.core.events.events.EventPayload
import com.correx.core.events.events.RouterNarrationEvent
import com.correx.core.events.events.TalkieNarrationEvent
import com.correx.core.events.types.SessionId
import com.correx.core.inference.TokenUsage
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
class RouterNarrationEventSerializationTest {
class TalkieNarrationEventSerializationTest {
private val sample = RouterNarrationEvent(
private val sample = TalkieNarrationEvent(
sessionId = SessionId("sess-1"),
narrationId = "narr-42",
trigger = "stage_start",
@@ -24,6 +24,8 @@ class RouterNarrationEventSerializationTest {
@Test
fun `round-trips as polymorphic EventPayload`() {
val encoded = eventJson.encodeToString(EventPayload.serializer(), sample)
// Wire discriminator is intentionally still "RouterNarration": the class was renamed
// Router->Talkie, but changing a persisted @SerialName would break replay of existing logs.
assertTrue(encoded.contains("\"type\":\"RouterNarration\""), "SerialName must be present: $encoded")
val decoded = eventJson.decodeFromString(EventPayload.serializer(), encoded)
assertEquals(sample, decoded)
@@ -31,7 +33,7 @@ class RouterNarrationEventSerializationTest {
@Test
fun `round-trips with optional fields absent`() {
val minimal = RouterNarrationEvent(
val minimal = TalkieNarrationEvent(
sessionId = SessionId("sess-2"),
narrationId = "narr-0",
trigger = "manual",