refactor(chat): tag local feedback with displayKind and refine logical message matching (#1241)
This commit is contained in:
1 parent
c9bbadf5d5
commit
9ae7b6a520
5 files changed
+85
-25
No files matched your search
@@ -581,6 +581,51 @@ class ChatPagingMergeTest {
|
||||
assertTrue(sameLogicalMessage(canonical.copy(reasoningText = "new trace"), live))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun assistantReplyBeginningWithSlashStillMatchesCanonicalEcho() {
|
||||
val live =
|
||||
ChatMessage(
|
||||
id = "uuid-answer",
|
||||
role = MessageRole.ASSISTANT,
|
||||
content = "/help is the command you're looking for.",
|
||||
)
|
||||
val canonical =
|
||||
live.copy(
|
||||
id = "rest-session-10",
|
||||
restId = null,
|
||||
)
|
||||
|
||||
assertTrue(sameLogicalMessage(canonical, live))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun permanentlyLocalRowsDoNotMatchCanonicalRowsByContent() {
|
||||
val localFeedback =
|
||||
ChatMessage(
|
||||
id = "uuid-feedback",
|
||||
role = MessageRole.ASSISTANT,
|
||||
content = "Command completed successfully",
|
||||
displayKind = "local_feedback",
|
||||
)
|
||||
val canonicalAssistant =
|
||||
ChatMessage(
|
||||
id = "rest-session-10",
|
||||
role = MessageRole.ASSISTANT,
|
||||
content = "Command completed successfully",
|
||||
)
|
||||
val clarify =
|
||||
ChatMessage(
|
||||
id = "uuid-clarify",
|
||||
role = MessageRole.USER,
|
||||
content = "yes",
|
||||
displayKind = "clarify_response",
|
||||
)
|
||||
val canonicalUser = ChatMessage(id = "rest-session-11", role = MessageRole.USER, content = "yes")
|
||||
|
||||
assertTrue(!sameLogicalMessage(canonicalAssistant, localFeedback))
|
||||
assertTrue(!sameLogicalMessage(canonicalUser, clarify))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun stripGatewaySteerWrapperRemovesEnvelopesSafely() {
|
||||
val standard =
|
||||
@@ -809,7 +854,12 @@ class ChatPagingMergeTest {
|
||||
val answer = ChatMessage(id = "rest-session-1", role = MessageRole.ASSISTANT, content = "I am Hermes.")
|
||||
val command = ChatMessage(id = "uuid-cmd", role = MessageRole.USER, content = "/reasoning")
|
||||
val output =
|
||||
ChatMessage(id = "uuid-output", role = MessageRole.ASSISTANT, content = "reasoning: low · display on")
|
||||
ChatMessage(
|
||||
id = "uuid-output",
|
||||
role = MessageRole.ASSISTANT,
|
||||
content = "Command completed successfully",
|
||||
displayKind = "local_feedback",
|
||||
)
|
||||
|
||||
val current = listOf(prompt, answer, command, output)
|
||||
|
||||
|
||||
@@ -103,6 +103,16 @@ class FullBleedTurnsTest {
|
||||
assertEquals(listOf<ChatTurn>(ChatTurn.User(steer)), result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `local feedback display kind remains assistant prose`() {
|
||||
val feedback =
|
||||
msg("a1", MessageRole.ASSISTANT, content = "Command completed successfully")
|
||||
.copy(displayKind = "local_feedback")
|
||||
val result = groupIntoTurns(listOf(feedback))
|
||||
|
||||
assertEquals(listOf<ChatTurn>(entries(AgentEntry.Prose(feedback))), result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `max-iterations nudge is a SystemEvent not a user bubble`() {
|
||||
// Backend persists the max-iterations notice as a plain role=user row
|
||||
|
||||
Reference in new issue
Block a user