refactor(hands): 移除空壳 Hand — Whiteboard/Slideshow/Speech (Phase 5)
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
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
删除 3 个仅含 UI 占位的 Hand,清理 Rust 实现与前端引用: - Rust: whiteboard.rs(422行) + slideshow.rs(797行) + speech.rs(442行) - 前端: WhiteboardCanvas + SlideshowRenderer + speech-synth + 相关类型/常量 - 配置: 3 个 HAND.toml - 净减 ~5400 行,Hands 9→6(启用) + Quiz/Browser/Researcher/Collector/Clip/Twitter/Reminder
This commit is contained in:
@@ -24,7 +24,6 @@ import { getSkillDiscovery } from '../../lib/skill-discovery';
|
||||
import { useOfflineStore, isOffline } from '../../store/offlineStore';
|
||||
import { useConnectionStore } from '../../store/connectionStore';
|
||||
import { createLogger } from '../../lib/logger';
|
||||
import { speechSynth } from '../../lib/speech-synth';
|
||||
import { generateRandomString } from '../../lib/crypto-utils';
|
||||
import type { ChatModeType, ChatModeConfig, Subtask } from '../../components/ai';
|
||||
import type { ToolCallStep } from '../../components/ai';
|
||||
@@ -440,22 +439,6 @@ export const useStreamStore = create<StreamState>()(
|
||||
};
|
||||
_chat?.updateMessages(msgs => [...msgs, handMsg]);
|
||||
|
||||
if (name === 'speech' && status === 'completed' && result && typeof result === 'object') {
|
||||
const res = result as Record<string, unknown>;
|
||||
if (res.tts_method === 'browser' && typeof res.text === 'string' && res.text) {
|
||||
speechSynth.speak({
|
||||
text: res.text as string,
|
||||
voice: (res.voice as string) || undefined,
|
||||
language: (res.language as string) || undefined,
|
||||
rate: typeof res.rate === 'number' ? res.rate : undefined,
|
||||
pitch: typeof res.pitch === 'number' ? res.pitch : undefined,
|
||||
volume: typeof res.volume === 'number' ? res.volume : undefined,
|
||||
}).catch((err: unknown) => {
|
||||
const logger = createLogger('speech-synth');
|
||||
logger.warn('Browser TTS failed', { error: String(err) });
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
onSubtaskStatus: (taskId: string, description: string, status: string, detail?: string) => {
|
||||
// Map backend status to frontend Subtask status
|
||||
|
||||
Reference in New Issue
Block a user