diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 124d1e9..71fae71 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -36,7 +36,27 @@ "Bash(powershell -Command \"Get-Process groupchat-server -ErrorAction SilentlyContinue | Stop-Process -Force; Write-Output ''Killed''\")", "Bash(powershell -Command \"Get-Process groupchat-server -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue; Start-Sleep -Seconds 2; Set-Location ''Z:\\\\Projects\\\\Hot\\\\Duke\\\\GroupChat2\\\\server''; cargo build 2>&1\")", "Bash(git init)", - "Bash(git add -A)" + "Bash(git add -A)", + "Bash(git commit:*)", + "Bash(git branch stream)", + "Bash(git checkout stream)", + "Bash(powershell -Command \"cd ''Z:\\\\Projects\\\\Hot\\\\Duke\\\\GroupChat2\\\\server''; Get-Process groupchat-server -ErrorAction SilentlyContinue | Stop-Process -Force; cargo build 2>&1\")", + "Bash(powershell -Command \"cd ''Z:\\\\Projects\\\\Hot\\\\Duke\\\\GroupChat2\\\\server''; cargo build 2>&1\")", + "Bash(powershell -Command \"Get-Process groupchat-server -ErrorAction SilentlyContinue | Select-Object Id, ProcessName\")", + "Bash(powershell -Command \"cd ''Z:\\\\Projects\\\\Hot\\\\Duke\\\\GroupChat2\\\\server''; cargo build 2>&1; Get-Process groupchat-server -ErrorAction SilentlyContinue | Stop-Process -Force; Start-Sleep -Seconds 1; Start-Process -FilePath ''.\\\\target\\\\debug\\\\groupchat-server.exe'' -WindowStyle Hidden; Start-Sleep -Seconds 2; Get-Process groupchat-server -ErrorAction SilentlyContinue | Select-Object Id\")", + "Bash(powershell -Command \"try { $r = Invoke-WebRequest -Uri ''http://localhost:3001/api/models'' -TimeoutSec 5 -ErrorAction Stop; $r.StatusCode } catch { $_Exception.Message }\")", + "Bash(powershell -Command \"Get-Process groupchat-server -ErrorAction SilentlyContinue | Stop-Process -Force\")", + "Bash(powershell -Command \"Start-Process -FilePath ''.\\\\target\\\\debug\\\\groupchat-server.exe'' -WindowStyle Hidden\")", + "Bash(npm run build)", + "Bash(git add client/src/components/app.riot client/src/components/chat-room.riot client/src/components/message-bubble.riot client/src/services/stream-buffer.js server/src/handlers/ws.rs server/src/main.rs server/src/models/mod.rs server/src/services/openrouter.rs)", + "Bash(taskkill /F /IM server.exe)", + "Bash(timeout /t 2 /nobreak)", + "Bash(curl -s http://localhost:3001/api/auth/me -H \"Authorization: Bearer test\")", + "Bash(git add server/migrations/004_ai_name.sql server/src/main.rs server/src/models/mod.rs server/src/handlers/rooms.rs server/src/handlers/ws.rs server/src/handlers/invites.rs client/src/components/app.riot client/src/components/chat-room.riot client/src/components/create-room-modal.riot client/src/components/message-bubble.riot)", + "WebFetch(domain:api.dicebear.com)", + "mcp__Desktop_Commander__list_sessions", + "mcp__Desktop_Commander__write_file", + "Bash(git checkout -b CAN)" ] } } diff --git a/client/src/components/app.riot b/client/src/components/app.riot index e241caf..b96a8a9 100644 --- a/client/src/components/app.riot +++ b/client/src/components/app.riot @@ -146,10 +146,24 @@ .no-room-content p { font-size: var(--text-sm); } + + :global(.hash-highlight) { + animation: hash-flash 3s ease; + } + + @keyframes hash-flash { + 0%, 15% { + background: rgba(108, 92, 231, 0.2); + border-radius: 8px; + } + 100% { + background: transparent; + } + } diff --git a/client/src/components/chat-room.riot b/client/src/components/chat-room.riot index 2cb1503..a5703e9 100644 --- a/client/src/components/chat-room.riot +++ b/client/src/components/chat-room.riot @@ -72,7 +72,7 @@
-
+
{props.message?.sender_name}
{props.message?.content}
-
- - - - {formatModel(props.message.ai_meta.model)} - - - ⚡ {calcSpeed(props.message.ai_meta)} tok/sec - - - 🎯 {props.message.ai_meta.completion_tokens} tokens - - - ⏱ {(props.message.ai_meta.response_ms / 1000).toFixed(1)}s - + +
@@ -262,7 +270,7 @@ overflow-y: auto; } - .ai-stats-bar { + .message-actions-bar { display: flex; align-items: center; gap: var(--space-sm); @@ -271,9 +279,21 @@ font-size: 11px; color: var(--text-muted); flex-wrap: wrap; + opacity: 0; + transition: opacity var(--transition-fast); } - .ai-stat-btn { + .message:hover .message-actions-bar, + .message-actions-bar:focus-within { + opacity: 1; + } + + /* Always show for AI messages with stats */ + .ai-message .message-actions-bar { + opacity: 1; + } + + .msg-action-btn { display: inline-flex; align-items: center; justify-content: center; @@ -284,12 +304,12 @@ line-height: 1; } - .ai-stat-btn:hover { + .msg-action-btn:hover { background: var(--bg-hover); color: var(--text-primary); } - .ai-stat-btn.copied { + .msg-action-btn.copied { color: var(--success); } @@ -345,10 +365,14 @@