Jul 17 11:37 refactor: remove friend feature, local whisper, doubao & anthropic STT; consolidate voice to Groq chenbhao +1: Claude Opus 4.6 Remove the entire /friend desktop companion feature (Tauri frontend, FriendService,
SSE/STT server, skills, tools, routes) and the 11G Tauri build artifacts. Migrate the
edgeTts helper from friend/tts.ts into services/voice/edgeTTS.ts so auto-TTS survives.
Remove local whisper STT (whisperSTT.ts + whisper_server.py/transcribe.py) and the
doubao + anthropic voice_stream backends, since STT now runs exclusively on Groq
Whisper (whisper-large-v3 / -turbo). Shared STT connection types move into groqSTT.ts
and the voiceProvider setting is narrowed to ['groq'] with a default. Also rework
edgeTTS.ts to use the node-edge-tts package instead of a Python subprocess, dropping
the now-unused scripts/speak.py.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Jul 5 05:24 chore: rename VersperClaw to Codev, update org to chenbhao chenbhao +1: Claude Big Pickle Rename all references across the codebase: VersperClaw → Codev,
Versper Claw → Codev, versperclaw → codev, VERSPER_CLAW → CODEV,
versperai → chenbhao (GitHub username change).
Co-Authored-By: Claude Big Pickle <noreply@anthropic.com> Jun 28 07:57 fix: tts not read tool message Jun 21 16:28 feat: /voice use best grop whisper provider free and fast 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) Jun 20 18:20 chore: cancel exc /friend (no content) 17:50 fix: /friend start stop (no content) 17:32 fix: auto esc /friend start stop 17:20 fix: after /friend stop can esc 17:16 fix: esc in /friend start 1. 启动 Tauri 窗口(异步,后台运行)
2. 渲染 FriendStartView 组件,显示状态信息
3. 按 Esc 或 Enter 关闭 TUI 面板,Tauri 窗口继续在后台运行
launchTauri 之前用了 await 会阻塞 UI,现在改成了直接调用让它在后台异步运行。试试 /friend start 看看效果 16:34 feat: /friend start tauri app 14:29 feat: friend refactor to src 10:31 tools: add prompt() to Friend tools to avoid undefined prompt runtime error chenbhao +1: Copilot Ensure tools expose prompt() to satisfy callers that invoke tool.prompt() at runtime.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Jun 18 10:34 fix: goal can resuem by /resume 问题根源:Goal 状态只存储在 AppState.goal(内存)中,会话重启时内存丢失。
解决方案:把 Goal 状态持久化到 JSONL transcript 中,resume 时恢复。
改动的文件
src/types/logs.ts
- 新增 GoalEntry 类型(包含 type: 'goal'、所有 Goal 字段)
- GoalEntry 加入 Entry 联合类型
- LogOption 新增 goal?: GoalEntry 字段
src/utils/sessionStorage.ts
- METADATA_TYPE_MARKERS 数组加入 'type:goal'(支持预-compact 边界扫描时恢复)
- Project 类新增 currentSessionGoal: GoalEntry | undefined 缓存
- reAppendSessionMetadata() 中 re-append currentSessionGoal(session 退出时重写最新状态)
- restoreSessionMetadata() 新增 goal?: GoalEntry 参数,会写到 currentSessionGoal 缓存
- appendEntry() 中的 type === 'goal' 分支(不需要,已由 saveGoal 直接写)
- 新增 saveGoal(goal: GoalEntry) 函数:立即写入 transcript + 缓存
- 新增 clearGoal() 函数:清空缓存(用于 /goal clear)
- loadTranscriptFile() 解析 goal 条目,返回值加入 goal
- loadFullLog、getLastSessionLog、loadAllLogsFromSessionFile、loadTranscriptFromFile 均透传 goal
src/utils/conversationRecovery.ts
- loadConversationForResume 返回值新增 goal?: GoalEntry
src/utils/sessionRestore.ts
- ResumeLoadResult … Jun 15 11:07 feat: /goal 新增文件 (12个)
- src/commands/goal/index.ts — 命令入口
- src/commands/goal/goal.tsx — 命令核心逻辑
- src/utils/goal.ts — prompt 构建和工具函数
- src/tools/GoalUpdateTool/ — update_goal 工具 (3个文件)
- src/tools/GoalCreateTool/ — create_goal 工具 (3个文件)
- src/tools/GoalGetTool/ — get_goal 工具 (3个文件)
- src/hooks/useGoalAutoContinue.ts — 自动继续 hook
- src/components/PromptInput/GoalIndicator.tsx — Footer 状态显示
修改文件 (6个)
- src/state/AppStateStore.ts — 添加 GoalStatus / Goal 类型和 goal 字段
- src/commands.ts — 注册 goal 命令
- src/tools.ts — 注册三个 goal 工具
- src/screens/REPL.tsx — 调用 useGoalAutoContinue(queryGuard)
- src/components/PromptInput/PromptInputFooterLeftSide.tsx — 引入并显示 GoalIndicator
- src/bootstrap/state.ts — 添加 getTotalTokensUsed() 函数
功能
- /goal <objective> — 设置长期自治目标
- /goal pause|resume|clear|edit — 管理目标
- agent 在每个 turn 结束后自动 enqueue 继续 prompt(直到目标完成或被阻塞)
- update_goal 工具供 agent 标记目标完成或 3+ 轮阻塞后标记 blocked
- Footer 显示 goal 状态指示器 07:29 feat: feishu voice voxcpm and edge-tts 04:09 feat: feishu voice tts 01:55 feat: feishu Jun 14 13:45 feat: feishu connect Jun 13 04:36 feat: add nvidia provider 02:06 chore: rm bak of fix config render 02:01 feat: voice stt+tts just first have voice Jun 12 17:13 feat: voice add fully-local STT (faster-whisper) + TTS (edge-tts) 06:29 feat: voice mode asr May 23 16:49 feat: desktop cd desktop && bun run tauri dev May 21 17:08 chore: fix prompt identity 16:32 fix: opencode login May 6 09:41 fix: refresh model list 07:20 feat: add new free provider opencode Apr 4 07:06 feat: /telegram backend load 01:59 feat: /buddy Apr 3 05:15 feat: auto load free openrouter model Apr 2 19:32 feat: /login local model 18:35 fix: /model's search 17:45 init: verspercode v0.1.0