Jul 4 09:51 Add inline image utilities and integrate image handling into Location, WebFetch, and WebSearch tools. โ chenbhao +1: Claude Opus 4.6 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> 06:59 fix: improve ImageShowTool cursor handling and dynamic image rows; update tsconfig ignoreDeprecations โ chenbhao +1: Claude Opus 4.6 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> 03:08 refactor: emit native image sequences after cell content with cursor hide/show โ chenbhao +1: Claude Big Pickle Move raw APC/DCS emission from before cell rendering to after, wrapping
with cursor-hide/show sequences to prevent cursor flicker. Remove CUP
positioning from rawWritesAtRow entries since the cursor is already at
the correct position via CR+LF or moveCursorTo. Refactor ImageShowTool
to use writeRaw via TerminalWriteContext context instead of embedding
raw sequences in Ink's virtual DOM RawAnsi.
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> 02:03 error 01:14 raw two image 00:13 feat: image in ui Jul 3 16:23 feat: image in ui 14:51 feat: timg -p kitty 06:09 fix: render timg images within Ink's virtual DOM to prevent cursor desync โ chenbhao +1: Claude Big Pickle timg Unicode-block output was written to stdout via process.stdout.write(),
bypassing Ink's rendering pipeline. Ink's virtual cursor didn't know about
the image rows, causing subsequent UI (prompt, input bar) to render at wrong
positions โ overlapping the image and duplicating input bars.
Now the timg ANSI output is passed through the tool data and rendered via
the RawAnsi component within Ink's virtual DOM. Ink's Yoga layout accounts
for the image's width ร height, keeping cursor position in sync.
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> 03:48 feat: add inline terminal image rendering with Kitty protocol support โ chenbhao +1: Claude Big Pickle Introduce InlineImage component, ImageShow tool, and image caching/detection
utilities for rendering images directly in the terminal via the Kitty graphics
protocol. Falls back to clickable hyperlinks when protocol is unavailable.
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> Jul 1 15:57 chore: env map config 15:39 docs: add LocationTool unlimited search news and pagination docs โ chenbhao +1: Claude Big Pickle Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> 15:34 feat: remove result limits on LocationTool place searches (Amap/Google) โ chenbhao +1: Claude Big Pickle - Amap (้ซๅพท): offset 25 โ 1000 per page with pagination loop (โค20 pages)
- Google Places: remove .slice(0,20), add next_page_token pagination (โค3 pages)
- Photos list: remove .slice(0,3) limit
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> 14:02 feat: add LocationTool โ geographic search with Amap/Google Maps โ chenbhao +1: Claude Big Pickle Add a new LocationTool supporting geocoding, POI search, directions,
and trip planning. Automatically selects Amap (China) or Google Maps
(international) based on region detection.
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> Jun 30 13:22 chore: docs โ add Computer Use Python runtime documentation โ chenbhao +1: Claude Big Pickle Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> 03:01 fix: /friend motion โ interrupt hold on new action, drain queue, fix emotion mapping โ chenbhao +1: Claude Big Pickle - MotionController: interrupt hold when new playAction arrives instead of
queueing, so LLM text-message actions are not blocked by stale 10s hold
- MotionController: drain action queue in hold timer callback to prevent
silent drop of queued actions
- App.tsx: remove hold=true from emotion-only messages โ action plays once,
emotion timer handles duration independently
- App.tsx: remove awkward emotionโaction mappings (neutralโsalute,
relaxedโsalute, sadโshy) that caused unnatural gestures
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> 02:08 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> Jun 29 17:39 chore: docs v1.2 โ add debug system, feishu integration; update swarm, tavily, provider auth โ chenbhao +1: Claude Big Pickle New docs:
- docs/cli/debug-system.md โ /debug v2.0 DEBUG PROBE workflow, session debug logging
- docs/services/feishu.md โ Feishu/Lark bot architecture, access control, TTS
Updated docs:
- docs/coordinator/multi-agent.md โ Agent Teams (Swarm topology), Fork Subagent
- docs/tools/overview.md โ WebSearch dual-backend (Tavily vs SearXNG)
- docs/architecture/provider-auth.md โ OpenCode Zen free models, NVIDIA sidecar
- docs/friend/voice-vad.md โ noise suppression, FriendService stricter threshold
- docs/services/overview.md โ condensed feishu section to point to new doc
- docs/README.md โ index updated with all new entries
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> 16:58 fix: prevent TTS replay of historical messages on session resume โ chenbhao +1: Claude Big Pickle useAutoTTS now detects session switches (resume) via UUID discontinuity
and treats all loaded messages as history to skip TTS. Only subsequent
real-time assistant replies will trigger speech.
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> 14:15 chore: remove obsolete test and vendor source, add CLI SDK docs โ chenbhao +1: Claude Big Pickle - Remove test_feishu_ws.ts (contained secrets)
- Remove vendor/audio-capture-src/index.ts (replaced by
packages/audio-capture-napi)
- Add docs/cli/ build system documentation
- Add src/cli/ SDK transport and handler modules
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> 13:53 feat: unify build output paths and extract shared feature flags โ chenbhao +1: Claude Big Pickle - Always build to dist/VersperClaw with symlink at project root
- Always enable all experimental features (dev mode, no release builds)
- Extract feature flag list to scripts/features.ts, shared by build & dev
- Create scripts/dev.ts to run source with --feature and --define flags
- Copy vendor/ to dist/vendor/ at build time for runtime resolution
- Remove redundant build:dev, build:dev:full, compile scripts
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> 12:44 feat: /debug v2.0 โ ๅทฒๅฐ VersperClaw ็ /debug ไป่ขซๅจๆฅๅฟ้
่ฏปๆ่ฝๅฎๅ
จๆฟๆขไธบ Openclaude /debug-mode ็ไธปๅจๆๆกฉ่ฐ่ฏๅทฅไฝๆตใ
ๆนๅจๆไปถ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๆไปถ โ ๆไฝ โ ่ฏดๆ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ src/tools/DebugSessionTool.ts โ ๆฐๅปบ โ ็งปๆค่ช Openclaude๏ผ็ฎก็ .versperclaw-debug/ ็ฎๅฝ๏ผinit/begin_run/begin_verify/read_log/cleanup๏ผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ src/tools.ts โ ไฟฎๆน โ ๅฏผๅ
ฅๅนถๆณจๅ DebugSessionTool ๅฐๅทฅๅ
ทๅ่กจ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฆ Jun 28 12:49 feat: Filter TTS rules based on language 09:21 fix: FriendEmotionTool.call() 08:59 feat: /friend cosplay 07:58 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 ่ก โฆ 07:57 fix: tts not read tool message 06:20 chore: script bun run friend:build Jun 22 14:41 chore: update readme 13:20 chore: docs v1.1 12:38 chore: docs v1.0 11:24 chore: questionnaire rename 11:05 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 ๆฃๆต้ป่พ
้ๅผ่ฐๆด๏ผๅๅฐๅ้ณๆง๏ผ๏ผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๅๆฐ โ ๆงๅผ โ ๆฐๅผ โ ไฝ็จ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โโฆ 10:54 chore: friend and how to use prompt 10:33 chore: no appimage 10:23 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 ็ๆๅไผ็ฒพ็กฎๅฎๆถๅฐ้ณ้ขๅฎ้
้ฟๅบฆ 10:12 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 ้ณ้ข้ฟๅบฆๆฅ๏ผ็จๆท่ฏ้ณไธ่ฝๅฐๅฐฑๆขๅคๆถ้ณ 09:45 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
โ
ๆขๅค้ณ้ข้้ 09:37 feat: VAD 08:51 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๏ผ๏ผๆฐๅขๅบไบ่ฝฎ่ฏข็ๆๅกๅจ็ซฏ่ฏญ้ณ้่ฏ โ
โโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฆ 07:40 feat: VAD but just case choose 00:45 feat: cycle time activate check friend Jun 21 16:31 chore: update news 16:28 feat: /voice use best grop whisper provider free and fast 15:30 feat: grop free stt 14:31 feat: /friend tts add websearch 14:11 feat: friend text tts ok but websearch tts not ok 13:28 fix: Microphone access denied 12:07 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) 08:11 feat: csp null