-
feat: /friend aliveness system, motion controller fix, VAD tuning, high-pass filterโ
chenbhao +1: Claude Big Pickle - Remove redundant files (HistoryPanel, MoodIndicator, vmd-loader, vrm-ik-handler, web-file-picker, FriendScreenObserveTool)
- Add action parameter to friend_emotion for VRM animation playback
- Fix motion-controller: replace broken 'finished' event with frame-accurate completion detection and action queue
- Add aliveness system: breathing, postural sway, speech micro-movements, listening response, micro-expressions, enhanced blink
- Add Silero VAD threshold tuning and high-pass filter for low-frequency noise rejection
- Fix build scripts (vite build instead of tauri build)
- Add LipSync.isActive() for speech-driven animation blending
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com>
-
feat: /friend cosplay
-
feat: Friend ๆถๆฏ โ ไป
ไฝฟ็จไบบ่ฎพๆ็คบ่ฏโ
ไฟฎๆน็ๆไปถ (5ไธช)
ๆ ธๅฟๆต็จ๏ผFriend ๆถๆฏ โ ไป
ไฝฟ็จไบบ่ฎพๆ็คบ่ฏ
1. src/types/textInputTypes.ts
- ๅจ QueuedCommand ไธญๆทปๅ overrideSystemPrompt?: string ๅญๆฎต๏ผ็จไบๅญๅจๆฟไปฃ็ณป็ปๆ็คบ่ฏ
2. src/skills/bundled/friendPrompt.ts
- ๅฏผๅบ loadPersona() ๅ buildVrmSystemPrompt()๏ผไพ FriendService ่ฐ็จ
3. src/friend/FriendService.ts
- ๅจ sendText() ไธญๆๅปบ VRM ไบบ่ฎพๆ็คบ่ฏ๏ผไฝไธบ overrideSystemPrompt ้ๆถๆฏๅ
ฅ้
4. src/utils/handlePromptSubmit.ts
- ๅจ onQuery ็ฑปๅไธญๆทปๅ overrideSystemPrompt ๅๆฐ
- ไป commands[0] ๆๅๅนถไผ ้็ป onQuery
5. src/screens/REPL.tsx
- onQuery ๅ onQueryImpl ๅๆฅๆถ overrideSystemPrompt ๅๆฐ
- ไผ ๅ
ฅ buildEffectiveSystemPrompt()๏ผๅฝ่ฏฅๅผๅญๅจๆถๅฎๅ
จๆฟไปฃ้ป่ฎค็ณป็ปๆ็คบ่ฏ
ๆฐๆฎๆต
FriendService.sendText()
โ buildVrmSystemPrompt() โ ๅชๆๅปบ VRM ไบบ่ฎพๆ็คบ่ฏ
โ enqueue({ overrideSystemPrompt, ... })
โ processQueueIfReady()
โ handlePromptSubmit()
โ executeUserInput()
โ onQuery(..., overrideSystemPrompt)
โ onQueryImpl(..., overrideSystemPrompt)
โ buildEffectiveSystemPrompt({ overrideSystemPrompt })
โ ่ฟๅ [overrideSystemPrompt] โ ๅฎๅ
จ็ป่ฟ ~900 ่ก โฆ -
fix: tts not read tool message
-
feat: VAD Noise Suppressionโ
ไปฃ็ ๆญฃ็กฎใ่ฟ่ก็ฐๆๆต่ฏ็กฎไฟๆฒกๆ็ ดๅใ
โ Bash(npx vitest run src/friend/__tests__/ 2>&1 | tail -30)
โฟ ย FAIL src/friend/__tests__/e2e-http-flow.test.ts [ src/friend/__tests__/e2e-http-flow.test.ts ]
Error: Cannot find package 'bun:test' imported from /home/yuki/Code/Agent/VersperClaw/src/friend/__tests__/e2e-http-flow.test.ts
โฏ src/friend/__tests__/e2e-http-flow.test.ts:10:1
โฆ +26 lines (ctrl+o to expand)
โฟ ย (timeout 30s)
โ ๆต่ฏไฝฟ็จ bun๏ผ้่ฆ bun testใ
โ Bash(bun test src/friend/__tests__/ 2>&1 | tail -30)
โฟ ย bun test v1.3.14-canary.1 (0d9b296a)
src/friend/__tests__/e2e-http-flow.test.ts:
โฆ +15 lines (ctrl+o to expand)
โ 4 ๆต่ฏๅ
จ้จ้่ฟ๏ผ15 ไธช expect() ๅๆ ๅคฑ่ดฅใ
ไฟฎๆนๆป็ป
vad-service.ts โ ๆ ธๅฟ VAD ๆฃๆต้ป่พ
้ๅผ่ฐๆด๏ผๅๅฐๅ้ณๆง๏ผ๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๅๆฐ โ ๆงๅผ โ ๆฐๅผ โ ไฝ็จ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โโฆ -
fix: tools call or think voice play will stop receive audioโ
็จๆท่ฏด่ฏ โ VADๆฃๆต่ฏด่ฏ็ปๆ โ _flushVadSegment()
โ sendText(transcript) โ ่ฟๅ
ฅCLIๅฏน่ฏ
โ startAiTurnMute()
โโ muted = true
โโ VAD pause()
โโ 30็ง่ถ
ๆถ๏ผๅฎๅ
จ็ฝ๏ผ่ฆ็AIๅค็ใๅทฅๅ
ท่ฐ็จใๆ่็ญ๏ผ
AIๅค็ไธญ๏ผWebSearch / ๆทฑๅบฆๆ่ / ็ญ๏ผ โ ้ณ้ข้้ณ๏ผไธๆถไธ้
AIๅๅคๅฐฑ็ปช โ broadcastResponse()
โ TTS็ๆๆๅ
โ extendMuteForTts(audioId)
โโ ๆธ
้ค30็งๅฎๅ
จ็ฝ
โโ ่งฃๆMP3็ฎๅบ็ฒพ็กฎ้ณ้ขๆถ้ฟ
โโ ๆฐๅฎๆถๅจ = ็ฒพ็กฎๆถ้ฟ
TTSๆญๆพไธญ โ ้ณ้ข้้ณ
TTSๆญๆพๅฎๆฏ โ unmute()
โโ muted = false
โโ VAD start() โ ๆขๅคๆถ้ณ
โโ ไธไธ่ฝฎๅฏน่ฏๅผๅง
30 ็งๅ
ๅบ้ฒๆญข AI ไธๅๅค๏ผ้่ฏฏ็ญ๏ผๅฏผ่ดๆฐธไน
้้ณ๏ผextendMuteForTts ๅจ TTS ็ๆๅไผ็ฒพ็กฎๅฎๆถๅฐ้ณ้ขๅฎ้
้ฟๅบฆ -
fix: TTS voice play will stop receive audioโ
็ฐๅจ muteForTts ไธๅ้ ไผฐ็ฎ๏ผ่ๆฏๅฎ้
่งฃๆ MP3 ๆไปถๅคด็ฎๅบ็ฒพ็กฎๆถ้ฟ๏ผ
1. ๆพๅฐๅไธคไธชๅธงๅๆญฅ๏ผ0xFFE0๏ผ๏ผๆต้ๅบๅฎ้
ๅธง้ด่ท๏ผ144 ๅญ่๏ผ
2. ็จ่ฟไธชๅธง้ด่ทไฝไธบๆญฅ้ฟ้ๅๆไปถ็ป่ฎกๅธงๆฐ
3. ไป็ฌฌไธๅธงๅคด้จ่งฃๆๅบ้ๆ ท็ๅๆฏๅธง้ๆ ทๆฐ
4. duration = frameCount ร samplesPerFrame / sampleRate
็ญๅฅ "ไฝ ๅฅฝ๏ผ่ฟๆฏไธๆฎตๆต่ฏ่ฏญ้ณใ" โ 2880ms โ
ไธญ็ญ "ไฝ ๅฅฝ๏ผ่ฟๆฏไธๆฎต...voice message." โ 6024ms โ
้ฟๅฅ "ไฝ ๅฅฝ๏ผๆๆฏClaude..." โ 14400ms โ
ๅ
จ้จ็ฒพ็กฎๅน้
ffprobe
้้ณๆถ้ฟไธๅซๆจๆตไฝ้๏ผ็บฏๆๅฎ้
TTS ้ณ้ข้ฟๅบฆๆฅ๏ผ็จๆท่ฏ้ณไธ่ฝๅฐๅฐฑๆขๅคๆถ้ณ -
fix: echo in VAD STT TTSโ
ๅๅฃฐ้ฎ้ขไฟฎๅค
ๆฐๅข้้ณๆบๅถ โ ๅจ AI ้่ฟ TTS ๅ็ญๆ้ด๏ผๆๆถ้ปๆญ้บฆๅ
้ฃ้ณ้ข่ฟๅ
ฅ STT ๅ VAD๏ผ
1. muted ๆ ๅฟ + muteTimer โ ๆงๅถ้ณ้ข้้็้้ณ็ถๆ
2. muteForTts(text) โ ๆ นๆฎๅๅคๆๆฌ้ฟๅบฆไผฐ็ฎ TTS ๆญๆพๆถ้ฟ๏ผ่ชๅจ็ฎก็้้ณๆ๏ผ
- ไผฐ็ฎๅ
ฌๅผ๏ผmax(3000ms, text.length ร 100ms + 1500ms)
- ไธญๆๅญ็ฌฆ็บฆ 125ms/ๅญ๏ผ่ฑๆ็บฆ 83ms/ๅญ็ฌฆ๏ผ+1s ็ๆ/็ฝ็ปๅผ้ + 0.5s ไฝ้
- ๆ็ญ 3 ็ง
3. clearMute() โ ็จๆทๆ F2 ็ปๆ้่ฏๆถ็ซๅณๆธ
้ค้้ณ็ถๆ
4. arecord ๅ่ฐไธญ็ feedAudio(c) โ ้้ณๆถ็ดๆฅ return๏ผ้ณ้ขไธ่ฟๅ
ฅ STT ไนไธ่ฟๅ
ฅ VAD
ๅฎๆดๆต็จ๏ผ
็จๆท่ฏด่ฏ โ ้ณ้ข โ STT โ ่ฝฌๅฝ โ AI โ broadcastResponse()
โ TTS็ๆๆๅ + ้้่ฟ่กไธญ
muteForTts(text)
โ
้้ณๆ้ดๆๆ้ณ้ขไธขๅผ
โ (TTSๆญๆพๅฎๆฏ)
setTimeout โ unmute
โ
ๆขๅค้ณ้ข้้ -
feat: VAD
-
feat: polling voice create stt 5sโ
ๆถๆๅๆด๏ผๆต่งๅจ VAD โ ๆๅกๅจ็ซฏๅฎๆถๅๆฎต
ๆ นๆฌ้ฎ้ข
onnxruntime-web WASM ๅ็ซฏๅจ Tauri ็ WebKitGTK
ไธญๆ ๆณ่ฟ่ก๏ผๅณไฝฟๆๆๆไปถ้ฝๅจๆฌๅฐๆไพ๏ผใ่ฟๆฏ WebKitGTK ็ไธไธชๅทฒ็ฅ้ๅถใ
่งฃๅณๆนๆก
ไธๅๅฐ่ฏๅจๆต่งๅจไธญ่ฟ่ก VADใๆนไธบๆๅกๅจ็ซฏ็ๅฎๆถ้ณ้ขๅๆฎต๏ผ
F2 ๅผๅง โ ๆๅกๅจ็จ cpal/arecord ๅฝๅถ้ณ้ข โ ๆฏ 5 ็ง๏ผ
โโ ็ปๆๅฝๅ STT ่ฟๆฅ โ Groq ่ฝฌๅ โ sendText() โ CLI ๅฏน่ฏ
โโ ๅๅปบๆฐ็ STT ่ฟๆฅ๏ผ็ปง็ปญๅฝๅถ
F2 ็ปๆ โ ๆธ
็
ๅๆดๆไปถ
โโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๆไปถ โ ๅๆด โ
โโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ FriendService.ts โ ๆฐๅขๅฎๆถๅๆฎต๏ผ_flushSegment() + captureTimer๏ผๅฐ้ณ้ขๅๆฎตไธบ โ
โ โ 5 ็ง็ชๅฃ๏ผ่ชๅจๅ้ๅฐ CLI โ
โโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ useServerStt.ts โ ๅฎๅ
จ้ๅ๏ผ็งป้คๆต่งๅจ VAD๏ผ@ricky0123/vad-web / โ
โ โ onnxruntime-web๏ผ๏ผๆฐๅขๅบไบ่ฝฎ่ฏข็ๆๅกๅจ็ซฏ่ฏญ้ณ้่ฏ โ
โโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฆ -
feat: VAD but just case choose
-
feat: grop free stt
-
feat: friend text tts ok but websearch tts not ok
-
fix: Microphone access denied
-
feat: inter-processโ
ๆถๆๅฏนๆฏ
ไนๅ: ไนๅ:
CLI TUI CLI TUI (ๅไธ่ฟ็จ)
โโโ /friend start โโโ FriendService (in-process, cpal)
โโโ ๆๅกๅจๅญ่ฟ็จ :3456 โ โโโ STT via cpal
โ โโโ chat-service.ts โ โโโ enqueue() โ ไธป CLI
โ โ โโโ CLI SDK ๅญ่ฟ็จโ โโโ SSE โ Tauri
โ โโโ arecord ๅญ่ฟ็จ โโโ ่ฝป้ Bun.serve (in-process)
โ โโโ SSE โโโ Tauri (thin display only)
โโโ Tauri (getUserMedia)
-
feat: /friend start tauri app
-
feat: friend refactor to src
-
feat: /friend