fix(butler): wire verification gaps — pain storage init, cold start, UI mode switches
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

- Call init_pain_storage() in Tauri .setup() so pain persistence activates on boot
- Integrate useColdStart hook into FirstConversationPrompt for auto-greeting
- Add UI mode toggle section to Settings/General (already had imports)
- Add "简洁" mode switch-back button to TopBar in professional layout
- Update SemanticSkillRouter @reserved annotation to reflect active status
This commit is contained in:
iven
2026-04-09 10:38:49 +08:00
parent e6937e1e5f
commit 646d8c21af
5 changed files with 78 additions and 4 deletions

View File

@@ -7,6 +7,7 @@
* - Horizontal quick-action chips (colored pills)
* - Clean, minimal aesthetic
*/
import { useEffect } from 'react';
import { motion } from 'framer-motion';
import {
Sparkles,
@@ -21,6 +22,7 @@ import {
generateWelcomeMessage,
getScenarioById,
} from '../lib/personality-presets';
import { useColdStart } from '../lib/use-cold-start';
import type { Clone } from '../store/agentStore';
import { useChatStore } from '../store/chatStore';
import { useClassroomStore } from '../store/classroomStore';
@@ -56,6 +58,16 @@ export function FirstConversationPrompt({
onSelectSuggestion,
}: FirstConversationPromptProps) {
const chatMode = useChatStore((s) => s.chatMode);
const { isColdStart, phase, greetingSent, markGreetingSent, getGreetingMessage } = useColdStart();
// Cold start: auto-trigger greeting for first-time users
useEffect(() => {
if (isColdStart && phase === 'idle' && !greetingSent) {
const greeting = getGreetingMessage(clone.nickname || clone.name, clone.emoji);
onSelectSuggestion?.(greeting);
markGreetingSent();
}
}, [isColdStart, phase, greetingSent, clone.nickname, clone.name, clone.emoji, onSelectSuggestion, markGreetingSent, getGreetingMessage]);
const modeGreeting: Record<string, string> = {
flash: '快速回答,即时响应',