From 65e712edfc3b9d5409359fe05ea58e728ef8c19a Mon Sep 17 00:00:00 2001 From: ekko <152005280+EKKOLearnAI@users.noreply.github.com> Date: Sat, 25 Apr 2026 16:16:11 +0800 Subject: [PATCH] fix: group chat UX polish and model switch cleanup (#205) * fix(chat): clamp context remaining tokens to 0 instead of showing negative Co-Authored-By: Claude Opus 4.6 * fix: group chat mention popup position, timestamp style, and model switch cleanup - Move @ mention popup above input to avoid blocking the textarea - Fix .msg-time scoping (was nested inside .msg-header, now top-level) - Reduce timestamp opacity and set to 12px for subtler display - Clean up stale base_url/api_key from config.yaml on model switch Closes #204 Co-Authored-By: Claude Opus 4.6 * fix: remove unused variables in GroupChatInput Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Claude Opus 4.6 --- .../components/hermes/group-chat/GroupChatInput.vue | 5 +---- .../components/hermes/group-chat/GroupMessageItem.vue | 11 ++++++----- packages/server/src/controllers/hermes/models.ts | 2 ++ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/client/src/components/hermes/group-chat/GroupChatInput.vue b/packages/client/src/components/hermes/group-chat/GroupChatInput.vue index 684c7aed..8f6b507b 100644 --- a/packages/client/src/components/hermes/group-chat/GroupChatInput.vue +++ b/packages/client/src/components/hermes/group-chat/GroupChatInput.vue @@ -90,10 +90,7 @@ function updateMentionState() { document.body.removeChild(mirror) dropdownX.value = rect.left + mirrorRect.width - el.scrollLeft - // Estimate Y based on newlines before @ and line height - const linesBeforeAt = text.slice(0, atPos + 1).split('\n').length - 1 - const lineHeight = parseFloat(style.lineHeight) || parseFloat(style.fontSize) * 1.2 - dropdownY.value = rect.top + linesBeforeAt * lineHeight - el.scrollTop + lineHeight + 4 + dropdownY.value = rect.top - el.scrollTop - 8 mentionActive.value = filteredAgents.value.length > 0 } diff --git a/packages/client/src/components/hermes/group-chat/GroupMessageItem.vue b/packages/client/src/components/hermes/group-chat/GroupMessageItem.vue index c80ca181..77752bea 100644 --- a/packages/client/src/components/hermes/group-chat/GroupMessageItem.vue +++ b/packages/client/src/components/hermes/group-chat/GroupMessageItem.vue @@ -122,12 +122,13 @@ const mentionNames = computed(() => props.agents.map(a => a.name).filter(Boolean color: $text-muted; font-style: italic; } +} - .msg-time { - font-size: 11px; - color: $text-muted; - margin-top: 2px; - } +.msg-time { + font-size: 12px; + color: var(--text-muted); + opacity: 0.6; + margin-top: 2px; } .msg-content { diff --git a/packages/server/src/controllers/hermes/models.ts b/packages/server/src/controllers/hermes/models.ts index 74f4ee14..84767166 100644 --- a/packages/server/src/controllers/hermes/models.ts +++ b/packages/server/src/controllers/hermes/models.ts @@ -139,6 +139,8 @@ export async function setConfigModel(ctx: any) { const config = await readConfigYaml() if (typeof config.model !== 'object' || config.model === null) { config.model = {} } config.model.default = defaultModel + delete config.model.base_url + delete config.model.api_key if (reqProvider) { config.model.provider = reqProvider } await writeConfigYaml(config) ctx.body = { success: true }