fix: improve chat message display and compression logic (#476)

Frontend:
- Filter out assistant messages with empty content in mapHermesMessages()
- Prevents displaying 194/585 empty messages in long sessions
- Reduces visual clutter and improves UX

Backend:
- Add message count limit (<= 200) to compression threshold checks
- Prevents compressing sessions with too many messages
- Improves compression performance and reliability

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
ekko
2026-05-06 14:07:13 +08:00
committed by GitHub
parent 9ba0ba5185
commit 1011c950be
2 changed files with 12 additions and 4 deletions
@@ -578,7 +578,7 @@ export class ChatRunSocket {
logger.info('[context-compress] session=%s: snapshot at %d, %d new messages, assembled ~%d tokens (threshold %d)',
session_id, snapshot.lastMessageIndex, newMessages.length, totalTokens, triggerTokens)
// triggerTokens
if (totalTokens <= triggerTokens) {
if (totalTokens <= triggerTokens && newMessages.length <= 200) {
// Under threshold — use assembled context directly, no LLM call needed
history = [
{ role: 'user', content: SUMMARY_PREFIX + '\n\n' + snapshot.summary },
@@ -684,7 +684,7 @@ export class ChatRunSocket {
} else if (history.length > 4) {
// No snapshot — check if raw history exceeds threshold
if (totalTokens <= triggerTokens) {
if (totalTokens <= triggerTokens && history.length <= 200) {
// Under threshold — use raw history as-is
logger.info('[context-compress] session=%s: %d messages, ~%d tokens — under threshold, skip', session_id, history.length, totalTokens)
} else {