diff --git a/.gitignore b/.gitignore index 41822d8f9ac769fc1d3b42e585a5d3182a823d51..15b2176519149b011a15a4a876288c7772cd17b1 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ node_modules/ packages/ dist/ .codex -VersperClaw +codev # Prebuilt native binaries (tracked in claude-code/ reference) vendor/ diff --git a/Codev b/Codev new file mode 120000 index 0000000000000000000000000000000000000000..ecac7176c0bbb56184439e0cfc2fed7b260e9d84 --- /dev/null +++ b/Codev @@ -0,0 +1 @@ +dist/Codev \ No newline at end of file diff --git a/README.md b/README.md index 880e9f69dd7c250282c3832ccfb76a1a31978d48..400df44101878f4f9c2ab9a7d74391887d5ad2de 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ - **2026-05-06** 🚀 Added OpenCode as a free provider — includes GPT-5 Nano and Big Pickle 🥒 models, `/model` list with life-free model display, and auto-refresh. Introduced ctx_line context tracking with online persistence. Better collapsing fetch results and auto-compact documentation polish. Merged PR #6 for Tavily search backend migration. - **2026-04-30** 🔍 Added Tavily as optional search backend in WebSearchTool via PR #6. - **2026-04-24** 🧹 Cleaned up empty contributor docs. -- **2026-04-21** 🛡️ Fixed auto-compact env in settings.json; VersperClaw now handles Ctrl+C resume gracefully. +- **2026-04-21** 🛡️ Fixed auto-compact env in settings.json; Codev now handles Ctrl+C resume gracefully. - **2026-04-20** 📝 Documented ToolSearch behavior and table formatting. - **2026-04-19** 📖 Described auto-dream and subagent features in README; punctuation and layout polish. Tagged **v2.0.1** 🏷️. - **2026-04-18** 💭 Snapshot auto-dream feature; ToolSearch now uses WebSearch under the hood. @@ -48,7 +48,7 @@ - **2026-04-08** 🌐 Full WebSearch toolchain — SearXNG integration, Jina AI websearch & fetch, WebFetch UI notes, build fix. Four search approaches landed in one day. - **2026-04-07** 🔍 Zero-search prototype; Python env removed; TLS-enabled web search working end-to-end. - **2026-04-06** 🛠️ Open ripgrep via USE_BUILTIN_RIPGREP=0; WebFetch UI notes; skill message renamed; WebSearch API error fixed. -- **2026-04-05** 🤖 AutoMode — autonomous decision-making execution mode. `/sandbox` with sandbox-runtime @0.0.44. Project renamed to versperclaw. OpenRouter ↔ Local model switching, auto-refresh TUI, Telegram `/login` local model transition. +- **2026-04-05** 🤖 AutoMode — autonomous decision-making execution mode. `/sandbox` with sandbox-runtime @0.0.44. Project renamed to codev. OpenRouter ↔ Local model switching, auto-refresh TUI, Telegram `/login` local model transition. - **2026-04-04** 📱 Telegram backend — `/telegram` command, interactive commands, message receiving in TUI, chatId overflow fixed. `/buddy` companion mode; recent activity in individual directories. - **2026-04-03** 🔄 Reborn as verspercode **v0.1.0** — complete `/login` system (OpenRouter + local models), `/model` search & UI, free OpenRouter model auto-load, onboarding flow. Local model filesystem-based provider. @@ -63,7 +63,7 @@ - **2026-03-27** 🔬 Research workflow — `/paper` and `/code` commands, 4-step research + autoresearch, ANN vector index, hybrid retrieval with semantic cache, external memory, token-budgeted evidence pipeline, IncompleteRead retry, long-term index cache. Workflows engine, `/resume` session toggle, CLI UI refresh. - **2026-03-26** 🏗️ Configuration overhaul — YAML → JSON + .env + TOML. Clean config dir. - **2026-03-24** 🌐 Browser control — Chrome DevTools MCP integration, WeChat gateway, Telegram gateway. Setup wizard, README with demo GIF, version menu. -- **2026-03-22** 🎉 Initial commit — versperclaw **v0.1.0** born. +- **2026-03-22** 🎉 Initial commit — codev **v0.1.0** born. @@ -71,14 +71,16 @@ ```bash # script install -curl -fsSL https://raw.githubusercontent.com/versperai/VersperClaw/main/install.sh | bash +curl -fsSL https://raw.githubusercontent.com/chenbhao/Codev/main/install.sh | bash # source install -git clone https://github.com/versperai/VersperClaw.git && cd VersperClaw && bun install && bun run build && bun run friend:build && ./VersperClaw +git clone https://github.com/chenbhao/Codev.git && cd Codev && bun install && bun run build && bun run friend:build && ./Codev # if want global use bin file -cp VersperClaw ~/.local/bin -# then can use VersperClaw in everywhere after `/login` +# cp dist/codev ~/.local/bin +ln -sf dist/codev ~/.local/bin/codev + +# then can use Codev in everywhere after `/login` ``` ## 🚀 Quick Start @@ -139,7 +141,7 @@ sudo usermod -aG docker $USER sudo systemctl enable --now docker # 2. docker-compose pull -# use VersperSearch a pre-build docker config in https://github.com/versperai/VersperSearch +# use VersperSearch a pre-build docker config in https://github.com/chenbhao/VersperSearch # or install searxng in docker-compose by yourself curl -fsSL \ -O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml \ diff --git a/docs/README.md b/docs/README.md index 038c4bb7ecacbe8ac57685fc54b6d7b52e2e8184..e1e1f8f1fd1aa289e5f960ac6e874157a8538dbd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,6 @@ -# VersperClaw 文档 +# Codev 文档 -> VersperClaw — 基于 Anthropic Claude Code 的增强型 AI CLI 代理,集成 VRM 桌面伴侣、多 Provider、语音对话和自动化模式。 +> Codev — 基于 Anthropic Claude Code 的增强型 AI CLI 代理,集成 VRM 桌面伴侣、多 Provider、语音对话和自动化模式。 ## 目录 diff --git a/docs/architecture/agent-loop.md b/docs/architecture/agent-loop.md index c25be65f02727d80a489351e87bbc95c496045db..8506e742b67afe5421db598fd3f1daae4fcc6d8e 100644 --- a/docs/architecture/agent-loop.md +++ b/docs/architecture/agent-loop.md @@ -1,7 +1,7 @@ # Agent 循环与查询引擎深度分析 > 本文基于 `src/query.ts`、`src/QueryEngine.ts`、`src/query/*`、`src/services/tools/*` 等核心模块, -> 详细阐述 VersperClaw (Claude Code) 的 Agent 循环架构、模型调用管道、工具调度机制、恢复策略与继续决策逻辑。 +> 详细阐述 Codev (Claude Code) 的 Agent 循环架构、模型调用管道、工具调度机制、恢复策略与继续决策逻辑。 > 文中列出具体文件路径、函数名称与行号,供开发者快速定位代码。 --- diff --git a/docs/architecture/cross-cutting.md b/docs/architecture/cross-cutting.md index 4dafb1481e942224420893d03cc4cb28cd2ce9c9..19ce03afeba75681b520d93128e6ab34f08b353e 100644 --- a/docs/architecture/cross-cutting.md +++ b/docs/architecture/cross-cutting.md @@ -260,7 +260,7 @@ VAD(Voice Activity Detection)服务 (`src/friend/voice/vad-service.ts`) 使 4. **外部模块排除**: `@ant/*`、`audio-capture-napi`、`image-processor-napi`、`modifiers-napi`、`url-handler-napi` 通过 `--external` 排除捆绑,减小二进制体积并允许运行时加载原生模块。 5. **环境变量定义**: `process.env.USER_TYPE='external'`、`process.env.CLAUDE_CODE_FORCE_FULL_LOGO='true'`、`process.env.CCR_FORCE_BUNDLE='true'` 等定义确保构建产物运行于正确模式。 6. **完整特性集**: 使用 `--feature-set=dev-full` 启用全部实验特性(50+ feature flags),默认仅启用 `VOICE_MODE`。 -7. **输出产物**: 开发版本输出到 `./VersperClaw`,发布版本输出到 `./dist/cli`。 +7. **输出产物**: 开发版本输出到 `./Codev`,发布版本输出到 `./dist/cli`。 --- diff --git a/docs/architecture/data-flow.md b/docs/architecture/data-flow.md index 1c4a604d764f9da3529c315b3a9967183429e5ad..5d20e39002e4885c0fee74212ca9ba56c8cb19bc 100644 --- a/docs/architecture/data-flow.md +++ b/docs/architecture/data-flow.md @@ -1,6 +1,6 @@ # 核心数据流 -本文档详细描述 VersperClaw 的六大核心数据流,包含 ASCII 序列图和关键代码路径。 +本文档详细描述 Codev 的六大核心数据流,包含 ASCII 序列图和关键代码路径。 --- @@ -90,7 +90,7 @@ query() 函数 ### 语音捕获架构 -VersperClaw 使用进程内音频捕获(cpal Rust 库,通过 `native-modules/audio-capture-napi`),而不是传统的 arecord/parecord 子进程。 +Codev 使用进程内音频捕获(cpal Rust 库,通过 `native-modules/audio-capture-napi`),而不是传统的 arecord/parecord 子进程。 ``` 麦克风 (硬件) diff --git a/docs/architecture/design-philosophy.md b/docs/architecture/design-philosophy.md index 45573136081444b486637fbe89a012ac7abb4acb..1269ccfef1d7c05dff941bce8e338b28577eb532 100644 --- a/docs/architecture/design-philosophy.md +++ b/docs/architecture/design-philosophy.md @@ -1,10 +1,10 @@ # 设计哲学与架构原则 -> 本文档综合自 Dive into Claude Code (arXiv:2604.14228v1) 的架构分析以及 VersperClaw +> 本文档综合自 Dive into Claude Code (arXiv:2604.14228v1) 的架构分析以及 Codev > 源代码的实际实现模式,旨在为面试准备和系统设计讨论提供参考。 > > Claude Code 的设计哲学源于五个核心人类价值,通过十三条设计原则转化为具体的架构决策。 -> VersperClaw 在此基础上进行了多 Provider 和 Friend VRM 等扩展。 +> Codev 在此基础上进行了多 Provider 和 Friend VRM 等扩展。 --- @@ -171,13 +171,13 @@ Claude Code 的原则组合的独特之处在于:最小决策脚手架 + 分 --- -## 4. VersperClaw 与 Claude Code 的差异 +## 4. Codev 与 Claude Code 的差异 -VersperClaw 以 Claude Code 为上游基础,进行了以下主要变更和扩展: +Codev 以 Claude Code 为上游基础,进行了以下主要变更和扩展: ### 4.1 多 Provider 支持 -- Claude Code 内置仅支持 Anthropic API,而 VersperClaw 通过 Provider 代理架构 +- Claude Code 内置仅支持 Anthropic API,而 Codev 通过 Provider 代理架构 支持 OpenAI、Groq、DeepSeek 以及所有兼容 OpenAI 的 API。 - **实现模式**:`src/server/proxy/handler.ts` 实现双路由决策—— - 1P Anthropic 路径:直接调用 Anthropic SDK @@ -314,7 +314,7 @@ Budget Reduction (工具结果大小限制) - **Dive into Claude Code** (arXiv:2604.14228v1): 对本文档所基于的原始架构分析论文 - **Anthropic Safe Agents Framework**: 安全代理设计的原则文档 - **Claude Code 官方文档**: [https://code.claude.com/docs/](https://code.claude.com/docs/) -- **VersperClaw 源代码**: `/home/yuki/Code/Agent/VersperClaw/src/` +- **Codev 源代码**: `/home/yuki/Code/Agent/Codev/src/` - 核心循环: `src/query.ts` - 权限系统: `src/utils/permissions/` - 压缩管道: `src/services/compact/` @@ -326,4 +326,4 @@ Budget Reduction (工具结果大小限制) --- > **文档版本**: v1.0 — 2026-06-22 -> **作者**: 基于 Claude Code 设计哲学论文和 VersperClaw 源代码综合分析 +> **作者**: 基于 Claude Code 设计哲学论文和 Codev 源代码综合分析 diff --git a/docs/architecture/overview.md b/docs/architecture/overview.md index 6b8d9a71dd57dd656d1db35fd9d315fa52dd78bb..84b2f4b235403c74479405eb6148c989cc4de78c 100644 --- a/docs/architecture/overview.md +++ b/docs/architecture/overview.md @@ -2,7 +2,7 @@ ## 项目定位 -VersperClaw 是一个 AI CLI 智能代理,基于 Anthropic Claude Code 源代码构建,增强了对以下场景的支持: +Codev 是一个 AI CLI 智能代理,基于 Anthropic Claude Code 源代码构建,增强了对以下场景的支持: - **VRM 桌面伴侣**(Friend):在同一进程中运行 HTTP/SSE 服务,驱动 3D VRM 角色的表情、语音和文本气泡 - **多模型提供者**:通过反向代理层将 Anthropic Messages API 协议翻译为 OpenAI Chat/Responses API 协议,支持数十种第三方模型 diff --git a/docs/architecture/provider-auth.md b/docs/architecture/provider-auth.md index 65005fade2470ab51866528d9027180fd8a5590c..3830f34e9e83bdfc8929afb3ec55e702444a8dd6 100644 --- a/docs/architecture/provider-auth.md +++ b/docs/architecture/provider-auth.md @@ -1,13 +1,13 @@ # 多 Provider 认证与协议转换架构 -> 本文档描述 VersperClaw (cc-haha) 的多 Provider 认证架构、OAuth 2.0 流程、API 协议转换机制以及 Provider 配置管理体系。 -> 代码库:`/home/yuki/Code/Agent/VersperClaw` +> 本文档描述 Codev (cc-haha) 的多 Provider 认证架构、OAuth 2.0 流程、API 协议转换机制以及 Provider 配置管理体系。 +> 代码库:`/home/yuki/Code/Agent/Codev` --- ## 1. 支持的认证提供者 -VersperClaw 支持以下 Provider,按认证方式与协议类型分类: +Codev 支持以下 Provider,按认证方式与协议类型分类: | Provider | 认证方式 | 协议格式 | 实现位置 | |---|---|---|---| @@ -28,7 +28,7 @@ VersperClaw 支持以下 Provider,按认证方式与协议类型分类: ### 2.1 两级架构总览 -VersperClaw 拥有两套独立的 Provider 系统,设计目标不同: +Codev 拥有两套独立的 Provider 系统,设计目标不同: ``` Tier 1: TUI 内置 Provider (原始 Claude Code) @@ -36,7 +36,7 @@ Tier 1: TUI 内置 Provider (原始 Claude Code) 存储: ~/.claude.json (单字段 authProvider) 实现: src/services/api/client.ts + src/utils/model/providers.ts -Tier 2: cc-haha Provider 预设系统 (VersperClaw 扩展) +Tier 2: cc-haha Provider 预设系统 (Codev 扩展) 用途: 桌面端多 Provider 管理、预设配置、Proxy 转换 存储: ~/.claude/cc-haha/providers.json (结构化索引) 实现: src/server/services/providerService.ts @@ -240,7 +240,7 @@ OpenAI → Anthropic (非流式): ### 3.5 服务端 Proxy 模式 -除了客户端的 Fetch Override 模式,VersperClaw 还实现了一套**服务端 Proxy**,位于 `src/server/proxy/handler.ts`。 +除了客户端的 Fetch Override 模式,Codev 还实现了一套**服务端 Proxy**,位于 `src/server/proxy/handler.ts`。 设计目标:将协议转换逻辑从客户端分离到独立 HTTP 服务,支持更灵活的 Provider 管理。 diff --git a/docs/architecture/safety-and-permissions.md b/docs/architecture/safety-and-permissions.md index 9f989951cb28936f51c4ca389313536fd6b5a053..2d60ac8a4960df7c6314925ee2754b89f651c730 100644 --- a/docs/architecture/safety-and-permissions.md +++ b/docs/architecture/safety-and-permissions.md @@ -1,6 +1,6 @@ # 安全与权限系统深度分析 -> 本文基于 VersperClaw (Claude Code) 源代码,深入分析其安全架构与权限子系统。 +> 本文基于 Codev (Claude Code) 源代码,深入分析其安全架构与权限子系统。 > 版本参考:commit `835ff5a` / `cdb3bdd` --- diff --git a/docs/cli/build-system.md b/docs/cli/build-system.md index 0e4be9c7f40415b0d8ea427135f1b1ee968e3f61..76ecf9eb07dc6ac6fb0c1ec84db54e403a7d6671 100644 --- a/docs/cli/build-system.md +++ b/docs/cli/build-system.md @@ -9,8 +9,8 @@ | 命令 | 对应脚本参数 | 输出格式 | 说明 | | --- | --- | --- | --- | | `bun run build` | 无 | 源码产物 (`./cli`) | 默认构建,不编译为二进制 | -| `bun run build:dev` | `--dev` | 源码产物 (`./VersperClaw`) | 开发版本,自动附加 git SHA 和构建时间作为开发版本号 | -| `bun run build:dev:full` | `--dev --feature-set=dev-full` | 源码产物 (`./VersperClaw`) | 开发版本,启用全部实验性功能标记 | +| `bun run build:dev` | `--dev` | 源码产物 (`./Codev`) | 开发版本,自动附加 git SHA 和构建时间作为开发版本号 | +| `bun run build:dev:full` | `--dev --feature-set=dev-full` | 源码产物 (`./Codev`) | 开发版本,启用全部实验性功能标记 | | `bun run compile` | `--compile` | 二进制可执行文件 (`./dist/cli`) | 生产构建,编译为 Bun 原生二进制 | | `bun run dev` | — | 直接运行 | 通过 `bun run ./src/entrypoints/cli.tsx` 直接执行,跳过构建步骤 | @@ -534,7 +534,7 @@ export function filterToolsByDenyRules try { - require('fs').appendFileSync('.versperclaw-debug/debug.log', + require('fs').appendFileSync('.codev-debug/debug.log', `[${new Date().toISOString()}] [js] file.ts:42 | label | value=${JSON.stringify(value)}\n`) } catch {} // DEBUG PROBE END [1] @@ -118,16 +118,16 @@ try { | 动作 | 说明 | |------|------| -| `init` | 创建 `.versperclaw-debug/` 目录、`debug.log`、`state` 文件 | +| `init` | 创建 `.codev-debug/` 目录、`debug.log`、`state` 文件 | | `begin_run` | 追加 `RUN #N` 分隔符,递增运行计数器 | | `begin_verify` | 追加 `VERIFY` 分隔符 | | `read_log` | 读取 `debug.log` 尾部内容 | -| `cleanup` | 删除 `.versperclaw-debug/` 目录 | +| `cleanup` | 删除 `.codev-debug/` 目录 | ### 目录结构 ``` -.versperclaw-debug/ +.codev-debug/ debug.log -- 探针写入 + RUN/VERIFY 分隔符 state -- JSON: { "runCount": 3 } ``` diff --git a/docs/cli/overview.md b/docs/cli/overview.md index 0ee80e92a66376bab6023c9d7c684aed4971c986..f610f381796cf6179bd5ce7e4c4387b3685d39c5 100644 --- a/docs/cli/overview.md +++ b/docs/cli/overview.md @@ -260,7 +260,7 @@ CLI 入口由 **Commander.js** 解析命令行参数,随后启动 **REPL**( 支持的配置项包括 theme、model、permissions(权限模式)、音效、通知等。 相关文件: -- `/home/yuki/Code/Agent/VersperClaw/src/commands.ts` — 命令注册与过滤核心 -- `/home/yuki/Code/Agent/VersperClaw/src/types/command.ts` — Command 类型定义 -- `/home/yuki/Code/Agent/VersperClaw/src/skills/loadSkillsDir.ts` — 技能目录加载 -- `/home/yuki/Code/Agent/VersperClaw/src/tools/WorkflowTool/` — 工作流工具实现 +- `/home/yuki/Code/Agent/Codev/src/commands.ts` — 命令注册与过滤核心 +- `/home/yuki/Code/Agent/Codev/src/types/command.ts` — Command 类型定义 +- `/home/yuki/Code/Agent/Codev/src/skills/loadSkillsDir.ts` — 技能目录加载 +- `/home/yuki/Code/Agent/Codev/src/tools/WorkflowTool/` — 工作流工具实现 diff --git a/docs/coordinator/multi-agent.md b/docs/coordinator/multi-agent.md index dc2c48aa45f26b93d4d37f109de5921ca3c5baf2..8fb1b3f3e529d94c3a7d6bbe98cd0f4c39a3c49c 100644 --- a/docs/coordinator/multi-agent.md +++ b/docs/coordinator/multi-agent.md @@ -2,7 +2,7 @@ ## 概述 -Coordinator 模式是 VersperClaw 的一种高级执行模式,允许一个协调者(Coordinator)LLM 通过 `AgentTool` 派生子代理(Worker)并行执行任务。通过 `CLAUDE_CODE_COORDINATOR_MODE` 环境变量激活。 +Coordinator 模式是 Codev 的一种高级执行模式,允许一个协调者(Coordinator)LLM 通过 `AgentTool` 派生子代理(Worker)并行执行任务。通过 `CLAUDE_CODE_COORDINATOR_MODE` 环境变量激活。 ### 激活方式 @@ -210,7 +210,7 @@ AgentTool({ prompt: "Based on your findings, implement the fix" }) // 错误: ### 概述 -Agent Teams(Swarm 模式)是 VersperClaw 的多 Agent 拓扑模型,通过 `feature('AGENT_SWARMS')` 编译期标记门控。与 Coordinator/Worker 模式不同,Teams 采用**文件系统邮箱通信**,每个 Agent 在独立进程中运行(tmux split-pane / in-process)。 +Agent Teams(Swarm 模式)是 Codev 的多 Agent 拓扑模型,通过 `feature('AGENT_SWARMS')` 编译期标记门控。与 Coordinator/Worker 模式不同,Teams 采用**文件系统邮箱通信**,每个 Agent 在独立进程中运行(tmux split-pane / in-process)。 ### 激活方式 diff --git a/docs/friend/architecture.md b/docs/friend/architecture.md index 8db08ab805d5801128ae86ba86a5fd8db9102ba5..df02ba3b0a30a57fea5931a9b61b8a7947c0ef3e 100644 --- a/docs/friend/architecture.md +++ b/docs/friend/architecture.md @@ -195,7 +195,7 @@ broadcastToVrm(payload: VrmBroadcastPayload) `freePort()` 方法在启动时尝试释放被占用的端口: 1. 使用 `ss -tlnp` 查找端口占用进程 -2. 验证进程是否为 `bun`/`VersperClaw`/`claude-*`/`node` +2. 验证进程是否为 `bun`/`Codev`/`claude-*`/`node` 3. 发送 SIGTERM,等待 3s,失败则 SIGKILL ### 3.3 路由 @@ -365,7 +365,7 @@ interface FriendPrefs { } ``` -持久化路径: `~/.config/VersperClaw/friend.json` +持久化路径: `~/.config/Codev/friend.json` --- @@ -378,7 +378,7 @@ interface FriendPrefs { - 管道 stdout/stderr 到主进程日志 - 退出时自动清理 -启动路径: `src/components/friend/frontend/src-tauri/target/{release|debug}/versperclaw-friend` +启动路径: `src/components/friend/frontend/src-tauri/target/{release|debug}/codev-friend` --- diff --git a/docs/friend/overview.md b/docs/friend/overview.md index 664e9ed76ca5b782acaa8ba0d2b48cb1237a132f..f3db3094674609086756353a505503ba5f77d2de 100644 --- a/docs/friend/overview.md +++ b/docs/friend/overview.md @@ -2,7 +2,7 @@ ## 定位 -Friend 是 VersperClaw 的 VRM 3D 桌面伙伴系统,与 CLI 共享同一进程运行。它通过 SSE + HTTP 与 Tauri 前端通信,无需独立的子进程或外部服务。用户可以与 VRM 角色进行文字聊天、语音对话,角色会通过 3D 表情、肢体动作和语音进行反馈。 +Friend 是 Codev 的 VRM 3D 桌面伙伴系统,与 CLI 共享同一进程运行。它通过 SSE + HTTP 与 Tauri 前端通信,无需独立的子进程或外部服务。用户可以与 VRM 角色进行文字聊天、语音对话,角色会通过 3D 表情、肢体动作和语音进行反馈。 核心设计理念:**同进程集成** — FriendService 作为单例运行在 CLI 主进程中,消息通过 `messageQueueManager.enqueue()` 直接注入到对话流程中,AI 回复通过 SSE 实时广播到前端显示。 @@ -19,7 +19,7 @@ Friend 是 VersperClaw 的 VRM 3D 桌面伙伴系统,与 CLI 共享同一进 | **TTS 服务** | `src/friend/tts.ts` | Edge TTS + Qwen DashScope TTS,音频文件注册表 | | **STT 服务** | `src/friend/stt-service.ts` | 基于文件的语音转录(REST 端点) | | **VAD 服务** | `src/friend/voice/vad-service.ts` | Silero VAD ONNX 模型,onnxruntime-web WASM 后端 | -| **偏好设置** | `src/friend/prefs.ts` | 持久化到 `~/.config/VersperClaw/friend.json` | +| **偏好设置** | `src/friend/prefs.ts` | 持久化到 `~/.config/Codev/friend.json` | | **Tauri 启动器** | `src/friend/tauri-launcher.ts` | 启动 Tauri 桌面窗口 | | **前端应用** | `src/components/friend/frontend/` | React + Three.js + @pixiv/three-vrm | @@ -81,7 +81,7 @@ Friend 支持 13 种情绪,映射到 VRM blend shapes 和骨骼动画: ``` ┌─────────────────────────────────────────────────────────────────┐ -│ VersperClaw 主进程 (Bun) │ +│ Codev 主进程 (Bun) │ │ │ │ ┌──────────────┐ ┌──────────────────┐ ┌───────────────┐ │ │ │ CLI TUI │ │ LLM Provider │ │ Bridge API │ │ @@ -135,4 +135,4 @@ Friend 支持 13 种情绪,映射到 VRM blend shapes 和骨骼动画: - API 路由: `src/server/api/friend.ts` — 所有 HTTP 端点 - LLM 工具: `src/tools/FriendEmotionTool.ts`, `src/tools/FriendScreenObserveTool.ts` - 技能注入: `src/skills/bundled/friendPrompt.ts` -- 配置: `~/.config/VersperClaw/friend.json` +- 配置: `~/.config/Codev/friend.json` diff --git a/docs/friend/voice-vad.md b/docs/friend/voice-vad.md index 1f1b14dcff3ecabcaab49da64c7c3eff218fcc05..a0d4529c80ae2f79663f577cf6277e6e0ab688c4 100644 --- a/docs/friend/voice-vad.md +++ b/docs/friend/voice-vad.md @@ -146,7 +146,7 @@ startSttConnectionWithTimeout(provider, language) startSttConnection(provider, language) │ ├── anthropic: connectVoiceStream(callbacks, { language, keyterms }) - │ keyterms: ['code', 'versperclaw'] 提高相关词汇识别率 + │ keyterms: ['code', 'codev'] 提高相关词汇识别率 │ ├── local: preloadWhisperModel + connectLocalWhisperStream │ 需预加载模型(首次加载较慢) diff --git a/docs/ink-ui/overview.md b/docs/ink-ui/overview.md index 1062773c6fc8cf8c37ba90b440fa7c84a180727b..096770b5113175bd1ac028731c577696be937b6e 100644 --- a/docs/ink-ui/overview.md +++ b/docs/ink-ui/overview.md @@ -2,9 +2,9 @@ ## 概述 -VersperClaw 的 Ink 是基于 [vadimdemedes/ink](https://github.com/vadimdemedes/ink) v6 的深度定制分叉(fork)。Ink 使用 React 组件模型渲染终端用户界面。它将 React 的虚拟 DOM 映射到终端字符网格,支持 Yoga Flexbox 布局、样式继承、事件处理、文本选择、搜索高亮等丰富的交互能力。 +Codev 的 Ink 是基于 [vadimdemedes/ink](https://github.com/vadimdemedes/ink) v6 的深度定制分叉(fork)。Ink 使用 React 组件模型渲染终端用户界面。它将 React 的虚拟 DOM 映射到终端字符网格,支持 Yoga Flexbox 布局、样式继承、事件处理、文本选择、搜索高亮等丰富的交互能力。 -> 与上游相比,VersperClaw 的 Ink 新增/修改了以下核心能力:自定义 DOM 节点树、压缩屏幕缓冲区(Int32Array)、基于 Yoga WASM 的布局引擎、Kitty 键盘协议支持、SGR 鼠标跟踪、文本选择模式、搜索高亮、双向文本处理、scrollable 容器、声明式光标位置等。 +> 与上游相比,Codev 的 Ink 新增/修改了以下核心能力:自定义 DOM 节点树、压缩屏幕缓冲区(Int32Array)、基于 Yoga WASM 的布局引擎、Kitty 键盘协议支持、SGR 鼠标跟踪、文本选择模式、搜索高亮、双向文本处理、scrollable 容器、声明式光标位置等。 --- diff --git a/docs/interview-prep.md b/docs/interview-prep.md index d38e505eb43943ebb0cb9e4df918c09eb090684a..9e0468158a24ba66fc775743aed0b3aa48596ab3 100644 --- a/docs/interview-prep.md +++ b/docs/interview-prep.md @@ -1,4 +1,4 @@ -# 面试准备指南 — VersperClaw / Claude Code 架构知识体系 +# 面试准备指南 — Codev / Claude Code 架构知识体系 > 适用场景: 系统设计面试、技术深挖面试、架构师/高级工程师面试 > 目标: 覆盖 AI CLI 代理的核心设计决策、权衡、以及可以引申到通用分布式系统的知识点 @@ -7,9 +7,9 @@ ## 1. 项目概述 (30-second pitch) -**VersperClaw 是什么?** +**Codev 是什么?** -VersperClaw 是从 Anthropic Claude Code fork 出来的 AI CLI 代理 (Agentic Coding Assistant),运行在终端中,核心能力是理解自然语言开发指令并自动执行多步骤编码任务。 +Codev 是从 Anthropic Claude Code fork 出来的 AI CLI 代理 (Agentic Coding Assistant),运行在终端中,核心能力是理解自然语言开发指令并自动执行多步骤编码任务。 **三个核心差异化:** @@ -157,7 +157,7 @@ Transparency (丢失细节, LLM 可能遗忘关键上下文) ### Q: 多 Provider 架构如何实现? -VersperClaw 支持多种 LLM Provider, 架构分为两层: +Codev 支持多种 LLM Provider, 架构分为两层: **Tier 1: Anthropic 原生通道** @@ -199,7 +199,7 @@ VersperClaw 支持多种 LLM Provider, 架构分为两层: ### Q: Friend VRM 系统为什么设计为同进程 + SSE? -Friend 是 VersperClaw 的 3D 桌面伴侣系统, 使用 VRM 模型 (3D 虚拟角色), 具备表情、动作、语音对话能力。 +Friend 是 Codev 的 3D 桌面伴侣系统, 使用 VRM 模型 (3D 虚拟角色), 具备表情、动作、语音对话能力。 **架构选择:** @@ -250,7 +250,7 @@ vs 微服务 (Microservices) ### Q: Feature Flag 系统如何实现死代码消除? -VersperClaw 使用编译时 Feature Flag 系统, 实现 `#ifdef` 风格的死代码消除。 +Codev 使用编译时 Feature Flag 系统, 实现 `#ifdef` 风格的死代码消除。 **实现位置:** `src/feature/feature.ts` / `feature()` 函数 @@ -342,7 +342,7 @@ if (feature("VOICE_MODE")) { - 不同用户有不同的风险和信任水平 - 需要有审计和回溯能力 -**方案设计 (参考 VersperClaw):** +**方案设计 (参考 Codev):** ``` 权限光谱: default → acceptEdits → plan → auto → bypassPermissions → dontAsk → bubble @@ -392,7 +392,7 @@ if (feature("VOICE_MODE")) { **架构选择: 同进程 vs 微服务** ``` -方案 A: 同进程 (VersperClaw 的选择) +方案 A: 同进程 (Codev 的选择) ┌─────────────────────────────┐ │ Agent Process │ │ ┌──────┐ ┌──────────────┐ │ @@ -451,7 +451,7 @@ if (feature("VOICE_MODE")) { **方案对比:** ``` -方案 A: Fetch Override (VersperClaw 选型) +方案 A: Fetch Override (Codev 选型) 优点: - 无侵入: 不修改 SDK, 不修改 Agent 核心逻辑 - 统一接口: 所有代码只认识 Anthropic Messages 格式 @@ -519,7 +519,7 @@ OpenAI → Anthropic 逆映射同理 ``` - **37signals 二分法**: 权限提示是摩擦, 但也是安全护栏 -- **VersperClaw 的答案**: 渐进信任 + 4 层防御 + ML 辅助 +- **Codev 的答案**: 渐进信任 + 4 层防御 + ML 辅助 - **面试价值**: 展示对安全架构和 UX 权衡的深度理解 --- @@ -537,7 +537,7 @@ OpenAI → Anthropic 逆映射同理 但可能丢失关键信息 但 token 成本更高 ``` -- **VersperClaw 的答案**: 5 层压缩管道 + JSONL 持久化 + Append-only 日志 +- **Codev 的答案**: 5 层压缩管道 + JSONL 持久化 + Append-only 日志 - **关键洞察**: 压缩丢弃的是"发送给 LLM 的内容", 不是"系统记录的内容" - **面试价值**: 展示对 LLM 上下文窗口限制的实际工程理解 @@ -578,7 +578,7 @@ Agent Loop 简单 (~88 行) 扩展机制丰富 开发效率高 但调试困难 ``` -- **VersperClaw 的答案**: 同进程, 因为这是一个单用户终端工具, 不是分布式系统 +- **Codev 的答案**: 同进程, 因为这是一个单用户终端工具, 不是分布式系统 - **何时应该选微服务?** 多用户 Web 服务、需要独立扩缩容、团队分工明确 - **面试价值**: 展示架构选型不是技术炫耀, 而是根据实际场景做合理决策 @@ -687,15 +687,15 @@ Friend VRM 的场景是 Agent → Avatar 的单向广播, SSE 是最优解。如 ``` 30 秒: "一个带 3D 桌宠的 AI 编程助手 CLI" - 2 分钟: "VersperClaw 是从 Claude Code fork 的 AI CLI 代理, + 2 分钟: "Codev 是从 Claude Code fork 的 AI CLI 代理, 核心增强是多 Provider 支持和 VRM 桌面伴侣, 采用同进程 + SSE 架构实现低延迟语音对话" 10 分钟: 深入 Agent Loop、权限系统、压缩管道、Friend 架构 ``` -### 把 VersperClaw 经验映射到通用系统设计 +### 把 Codev 经验映射到通用系统设计 -| VersperClaw 概念 | 通用系统设计概念 | +| Codev 概念 | 通用系统设计概念 | |------------------|-------------------| | Agent Loop | Event-driven orchestration | | 4 层防御纵深 | Defense in depth | @@ -711,4 +711,4 @@ Friend VRM 的场景是 Agent → Avatar 的单向广播, SSE 是最优解。如 --- > 最后更新: 2026-06-22 -> 基于 VersperClaw main branch (commit 835ff5a) +> 基于 Codev main branch (commit 835ff5a) diff --git a/docs/memory-context/context.md b/docs/memory-context/context.md index 864e4d54fd3329a11157f03c6c49ceb653fc72a9..d762527c6679df1a47b0745f1193de4f3f99c039 100644 --- a/docs/memory-context/context.md +++ b/docs/memory-context/context.md @@ -2,7 +2,7 @@ ## 概述 -VersperClaw 的上下文管理系统负责构建模型会话的输入上下文,包含系统级信息和用户级信息,并在上下文超过限制时自动压缩。 +Codev 的上下文管理系统负责构建模型会话的输入上下文,包含系统级信息和用户级信息,并在上下文超过限制时自动压缩。 --- diff --git a/docs/memory-context/memory.md b/docs/memory-context/memory.md index 93113ebe0e763c80c186caa75767fa5c13b8cc9c..0a76157dc6907af0a9c67c7febdfab7a21eedf9a 100644 --- a/docs/memory-context/memory.md +++ b/docs/memory-context/memory.md @@ -2,7 +2,7 @@ ## 概述 -VersperClaw 拥有一个基于文件的持久化记忆存储系统(Memdir),允许 Agent 在不同会话间记住用户信息、偏好、项目上下文等。记忆存储在项目对应的 `~/.claude/projects//memory/` 目录中。 +Codev 拥有一个基于文件的持久化记忆存储系统(Memdir),允许 Agent 在不同会话间记住用户信息、偏好、项目上下文等。记忆存储在项目对应的 `~/.claude/projects//memory/` 目录中。 --- diff --git a/docs/server/overview.md b/docs/server/overview.md index 3e244e7eeca334e82253614aa1c17eb368f0aba5..558cdd0181a474f579c37030a9a6af4378f416f8 100644 --- a/docs/server/overview.md +++ b/docs/server/overview.md @@ -2,7 +2,7 @@ ## 概述 -VersperClaw 桌面服务器是一个同进程 HTTP + WebSocket 服务器,基于 **Bun.serve()** 运行,为 Tauri 桌面应用提供全套 API 接口。服务器与 CLI 子进程通过 SDK WebSocket Bridge 通信,桌面 UI 通过客户端 WebSocket 与服务器交互。 +Codev 桌面服务器是一个同进程 HTTP + WebSocket 服务器,基于 **Bun.serve()** 运行,为 Tauri 桌面应用提供全套 API 接口。服务器与 CLI 子进程通过 SDK WebSocket Bridge 通信,桌面 UI 通过客户端 WebSocket 与服务器交互。 - **入口文件**: `src/server/server.ts` - **运行时**: Bun (JavaScript/TypeScript 运行时) diff --git a/docs/services/compact-deep-dive.md b/docs/services/compact-deep-dive.md index fca4981b0e5f877801e31e4a8d8833093085e33d..b5b8bb8caac12095234b95b9fb1ef9106689c103 100644 --- a/docs/services/compact-deep-dive.md +++ b/docs/services/compact-deep-dive.md @@ -1,6 +1,6 @@ # 上下文压缩管道 (Compaction Pipeline) 深度分析 -> 本文档基于 VersperClaw 源代码分析,涵盖 `/src/services/compact/` 目录下的全部压缩机制, +> 本文档基于 Codev 源代码分析,涵盖 `/src/services/compact/` 目录下的全部压缩机制, > 以及 `/src/query.ts` 中压缩管道编排逻辑。 --- @@ -784,11 +784,11 @@ clearSessionMessagesCache() // 清理消息缓存 --- -## 7. VersperClaw 中的具体实现 +## 7. Codev 中的具体实现 ### 7.1 与官方 Claude Code 的差异 -VersperClaw 的压缩实现相比于 Anthropic 官方 Claude Code 有以下主要差异和保留: +Codev 的压缩实现相比于 Anthropic 官方 Claude Code 有以下主要差异和保留: #### 保留的核心能力 @@ -902,5 +902,5 @@ VersperClaw 的压缩实现相比于 Anthropic 官方 Claude Code 有以下主 --- -> 文档版本: 基于 VersperClaw `cdb3bdd` 提交分析 +> 文档版本: 基于 Codev `cdb3bdd` 提交分析 > 最后更新: 2026-06-22 diff --git a/docs/services/feishu.md b/docs/services/feishu.md index 0a2ce71da198670b9eec34f055274c21a7decfb6..444b4b6cb11d53c04853a9ef7139afdd90336a8b 100644 --- a/docs/services/feishu.md +++ b/docs/services/feishu.md @@ -2,7 +2,7 @@ ## 概述 -VersperClaw 内置飞书(国内版)和 Lark(国际版)机器人集成,允许用户在即时通讯中与 AI CLI 进行对话。机器人通过 `@larksuite/channel` SDK 建立长连接 WebSocket,支持私聊、群聊、语音回复、引用回复等功能。 +Codev 内置飞书(国内版)和 Lark(国际版)机器人集成,允许用户在即时通讯中与 AI CLI 进行对话。机器人通过 `@larksuite/channel` SDK 建立长连接 WebSocket,支持私聊、群聊、语音回复、引用回复等功能。 --- @@ -172,7 +172,7 @@ Feishu WS → NormalizedMessage → PendingQueue → Access Control → Slash Ro 支持一键创建飞书应用,无需手动在开发者后台操作: -1. 调用 `@larksuite/channel` 的 `registerApp({ source: 'versperclaw' })` +1. 调用 `@larksuite/channel` 的 `registerApp({ source: 'codev' })` 2. 返回 QR 码 URL,终端用 ASCII 渲染 3. 用户使用飞书手机端扫码授权 4. `client_id` 和 `client_secret` 自动保存到配置 diff --git a/docs/services/overview.md b/docs/services/overview.md index 975b8ab8bf669553898d3bd4f4ed1925c22e62cc..83e6af6c613f66f0123e2682bbbb03a09f62c3a9 100644 --- a/docs/services/overview.md +++ b/docs/services/overview.md @@ -1,6 +1,6 @@ # 后端服务 -VersperClaw 提供一系列后台服务,涵盖 MCP 集成、上下文压缩、自主记忆整合、即时通讯集成、OAuth 认证、分析监控及工具执行引擎。 +Codev 提供一系列后台服务,涵盖 MCP 集成、上下文压缩、自主记忆整合、即时通讯集成、OAuth 认证、分析监控及工具执行引擎。 --- diff --git a/docs/tools/overview.md b/docs/tools/overview.md index 8f19cd958280997b6152fd6ab18be4448e16fca0..75183a7cd9655c31dc74fce3cc6479ab426c985e 100644 --- a/docs/tools/overview.md +++ b/docs/tools/overview.md @@ -52,7 +52,7 @@ Tool | `toAutoClassifierInput()` | `''`(跳过分类器) | | `userFacingName()` | `name` | -相关文件:`/home/yuki/Code/Agent/VersperClaw/src/Tool.ts` +相关文件:`/home/yuki/Code/Agent/Codev/src/Tool.ts` --- @@ -87,7 +87,7 @@ getTools(permissionContext) → Tool[] 单纯合并内置工具与 MCP 工具(不去重、不排序),用于工具搜索阈值计算等场景。 -相关文件:`/home/yuki/Code/Agent/VersperClaw/src/tools.ts` +相关文件:`/home/yuki/Code/Agent/Codev/src/tools.ts` --- @@ -207,10 +207,10 @@ LLM 请求工具调用 | `HookProgress` | 钩子执行进度 | Hooks | 相关文件: -- `/home/yuki/Code/Agent/VersperClaw/src/services/tools/toolExecution.ts` — 执行引擎 -- `/home/yuki/Code/Agent/VersperClaw/src/types/tools.ts` — 进度类型定义 -- `/home/yuki/Code/Agent/VersperClaw/src/hooks/toolPermission/` — 权限钩子 -- `/home/yuki/Code/Agent/VersperClaw/src/utils/permissions/` — 权限工具函数 +- `/home/yuki/Code/Agent/Codev/src/services/tools/toolExecution.ts` — 执行引擎 +- `/home/yuki/Code/Agent/Codev/src/types/tools.ts` — 进度类型定义 +- `/home/yuki/Code/Agent/Codev/src/hooks/toolPermission/` — 权限钩子 +- `/home/yuki/Code/Agent/Codev/src/utils/permissions/` — 权限工具函数 --- @@ -264,10 +264,10 @@ WebSearchTool 支持两个搜索后端: - `JINA_API_KEY` — 可选的 Jina AI API 密钥,用于增强型内容提取 相关文件: -- `/home/yuki/Code/Agent/VersperClaw/src/Tool.ts` — Tool 类型与 buildTool 框架 -- `/home/yuki/Code/Agent/VersperClaw/src/tools.ts` — 工具注册与过滤 -- `/home/yuki/Code/Agent/VersperClaw/src/services/tools/toolExecution.ts` — 执行引擎 -- `/home/yuki/Code/Agent/VersperClaw/src/services/tools/toolHooks.ts` — 工具钩子 +- `/home/yuki/Code/Agent/Codev/src/Tool.ts` — Tool 类型与 buildTool 框架 +- `/home/yuki/Code/Agent/Codev/src/tools.ts` — 工具注册与过滤 +- `/home/yuki/Code/Agent/Codev/src/services/tools/toolExecution.ts` — 执行引擎 +- `/home/yuki/Code/Agent/Codev/src/services/tools/toolHooks.ts` — 工具钩子 --- @@ -299,9 +299,9 @@ WebSearchTool 支持两个搜索后端: **输入参数:** `action` (必填), `location` (必填), `destination`, `query`, `radius` (默认 5000m), `mode` (driving/walking/transit/bicycling), `waypoints`, `type` (Amap POI 类型过滤), `region` (强制指定), `language` 相关文件: -- `/home/yuki/Code/Agent/VersperClaw/src/tools/LocationTool/LocationTool.ts` — 主工具逻辑 -- `/home/yuki/Code/Agent/VersperClaw/src/tools/LocationTool/prompt.ts` — 提示词 -- `/home/yuki/Code/Agent/VersperClaw/src/tools/LocationTool/UI.tsx` — 渲染组件 +- `/home/yuki/Code/Agent/Codev/src/tools/LocationTool/LocationTool.ts` — 主工具逻辑 +- `/home/yuki/Code/Agent/Codev/src/tools/LocationTool/prompt.ts` — 提示词 +- `/home/yuki/Code/Agent/Codev/src/tools/LocationTool/UI.tsx` — 渲染组件 #### API Key 申请指南 diff --git a/docs/tools/tool-reference.md b/docs/tools/tool-reference.md index eae78df31aa0176872f34f87f02ce752d058a464..ee13a22d9fcc11c24caa21802c49ec6467dc57f8 100644 --- a/docs/tools/tool-reference.md +++ b/docs/tools/tool-reference.md @@ -1,6 +1,6 @@ # 工具参考大全 -> 完整收录 VersperClaw 中所有 AI 可调用的工具(约 60+),按功能分类。 +> 完整收录 Codev 中所有 AI 可调用的工具(约 60+),按功能分类。 --- @@ -184,4 +184,4 @@ --- -> 注: 本参考基于 `/home/yuki/Code/Agent/VersperClaw/src/tools.ts` 的 `getAllBaseTools()` 函数。MCP 工具的完整列表取决于用户配置的 MCP 服务器,未在此表中逐一列出。 +> 注: 本参考基于 `/home/yuki/Code/Agent/Codev/src/tools.ts` 的 `getAllBaseTools()` 函数。MCP 工具的完整列表取决于用户配置的 MCP 服务器,未在此表中逐一列出。 diff --git a/docs/voice/overview.md b/docs/voice/overview.md index 1aa9ac8a334201c8d48d19fa493f157212dd4ed8..5f7e458e4f7baac0ff15d7958d9acc63c199143c 100644 --- a/docs/voice/overview.md +++ b/docs/voice/overview.md @@ -2,7 +2,7 @@ ## 概述 -VersperClaw 的语音系统支持**语音转文字(STT, Speech-to-Text)** 和 **文字转语音(TTS, Text-to-Speech)** 功能。语音录制使用底层音频捕获库(cpal),含有 SoX 和 arecord 回退方案。语音识别支持多个提供商,包括云端 API 和本地模型;语音合成同样支持多个引擎,涵盖 Edge TTS 和 DashScope TTS。 +Codev 的语音系统支持**语音转文字(STT, Speech-to-Text)** 和 **文字转语音(TTS, Text-to-Speech)** 功能。语音录制使用底层音频捕获库(cpal),含有 SoX 和 arecord 回退方案。语音识别支持多个提供商,包括云端 API 和本地模型;语音合成同样支持多个引擎,涵盖 Edge TTS 和 DashScope TTS。 > 注意:部分功能受构建特性门控(feature gate)限制,仅在 ant-internal 构建中可用。 diff --git a/install.sh b/install.sh index 88f23452efb444109cff4c5664c035821533c9f7..0ad524f5ddf46bb6bdf2372a70d28da79317b242 100755 --- a/install.sh +++ b/install.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -euo pipefail -# versperclaw installer +# codev installer # Usage: curl -fsSL https://raw.githubusercontent.com/paoloanzn/free-code/main/install.sh | bash RED='\033[0;31m' @@ -12,8 +12,8 @@ BOLD='\033[1m' DIM='\033[2m' RESET='\033[0m' -REPO="https://github.com/versperai/VerserClaw.git" -INSTALL_DIR="$HOME/versperclaw" +REPO="https://github.com/chenbhao/Codev.git" +INSTALL_DIR="$HOME/codev" BUN_MIN_VERSION="1.3.11" info() { printf "${CYAN}[*]${RESET} %s\n" "$*"; } @@ -125,18 +125,18 @@ install_deps() { } build_binary() { - info "Building VersperClaw (all experimental features enabled)..." + info "Building Codev (all experimental features enabled)..." cd "$INSTALL_DIR" bun run build:dev:full - ok "Binary built: $INSTALL_DIR/VersperClaw" + ok "Binary built: $INSTALL_DIR/Codev" } link_binary() { local link_dir="$HOME/.local/bin" mkdir -p "$link_dir" - ln -sf "$INSTALL_DIR/VersperClaw" "$link_dir/versperclaw" - ok "Symlinked: $link_dir/versperclaw" + ln -sf "$INSTALL_DIR/Codev" "$link_dir/codev" + ok "Symlinked: $link_dir/codev" if ! echo "$PATH" | tr ':' '\n' | grep -qx "$link_dir"; then warn "$link_dir is not on your PATH" @@ -169,16 +169,16 @@ echo "" printf "${GREEN}${BOLD} Installation complete!${RESET}\n" echo "" printf " ${BOLD}Run it:${RESET}\n" -printf " ${CYAN}versperclaw${RESET} # interactive REPL\n" -printf " ${CYAN}versperclaw -p \"your prompt\"${RESET} # one-shot mode\n" +printf " ${CYAN}codev${RESET} # interactive REPL\n" +printf " ${CYAN}codev -p \"your prompt\"${RESET} # one-shot mode\n" echo "" printf " ${BOLD}Set your API key:${RESET}\n" printf " ${CYAN}export ANTHROPIC_API_KEY=\"sk-ant-...\"${RESET}\n" echo "" printf " ${BOLD}Or log in with Claude.ai:${RESET}\n" -printf " ${CYAN}versperclaw /login${RESET}\n" +printf " ${CYAN}codev /login${RESET}\n" echo "" printf " ${DIM}Source: $INSTALL_DIR${RESET}\n" -printf " ${DIM}Binary: $INSTALL_DIR/VersperClaw${RESET}\n" -printf " ${DIM}Link: ~/.local/bin/versperclaw${RESET}\n" +printf " ${DIM}Binary: $INSTALL_DIR/Codev${RESET}\n" +printf " ${DIM}Link: ~/.local/bin/codev${RESET}\n" echo "" diff --git a/scripts/build.ts b/scripts/build.ts index f616f6aa251cbaa41762a89e3cf539e1738ffcd5..69e70e25d0605d48d4904f9a00e2a87e1f85a8b7 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -49,7 +49,7 @@ for (let i = 0; i < args.length; i += 1) { } const features = [...featureSet] -const outfile = join('dist', 'VersperClaw') +const outfile = join('dist', 'codev') // ── Pre-step: build Friend VRM frontend ────────────────────────────────── function buildFriendFrontend(): boolean { @@ -164,7 +164,7 @@ if (!existsSync(vendorDir)) { } // Create symlink at project root for convenient access -const symlink = join(process.cwd(), 'VersperClaw') +const symlink = join(process.cwd(), 'codev') const symlinkTarget = relative(process.cwd(), outfile) try { unlinkSync(symlink) } catch { /* ignore */ } try { symlinkSync(symlinkTarget, symlink) } catch { /* ignore */ } diff --git a/scripts/dev.ts b/scripts/dev.ts index 7559c58f583db5d0a92461fd2e02d2b475a91c9d..a0f1d062a806ad000bf1ce99e119ef3fd72dc7aa 100644 --- a/scripts/dev.ts +++ b/scripts/dev.ts @@ -15,7 +15,7 @@ const featureArgs = FULL_EXPERIMENTAL_FEATURES.flatMap(f => ['--feature', f]) const defineArgs = [ '--define', `MACRO.VERSION:${JSON.stringify(version)}`, '--define', `MACRO.BUILD_TIME:${JSON.stringify(buildTime)}`, - '--define', `MACRO.PACKAGE_URL:${JSON.stringify('versperclaw-dev')}`, + '--define', `MACRO.PACKAGE_URL:${JSON.stringify('codev-dev')}`, '--define', `MACRO.NATIVE_PACKAGE_URL:undefined`, '--define', `MACRO.FEEDBACK_CHANNEL:${JSON.stringify('github')}`, '--define', `MACRO.ISSUES_EXPLAINER:${JSON.stringify('')}`, diff --git a/src/commands/feishu/feishu.tsx b/src/commands/feishu/feishu.tsx index bf49dc5f32e1d29b4ab3b65ccb6a250a6aa62ee7..6d07abda86317a4756920a4d545e885f09dccba6 100644 --- a/src/commands/feishu/feishu.tsx +++ b/src/commands/feishu/feishu.tsx @@ -883,7 +883,7 @@ function ScanningDialog({ const { registerApp } = await import('@larksuite/channel') const result = await registerApp({ - source: 'versperclaw', + source: 'codev', onQRCodeReady: (info) => { if (cancelled) return setQrUrl(info.url) diff --git a/src/commands/insights.ts b/src/commands/insights.ts index cfa3a3dac401dd646dfeade391fbec8dbed21c1a..7aad02cce692ca7a59b41a0fce1fb1d70544df3e 100644 --- a/src/commands/insights.ts +++ b/src/commands/insights.ts @@ -427,7 +427,7 @@ function getSessionMetaDir(): string { return join(getDataDir(), 'session-meta') } -const FACET_EXTRACTION_PROMPT = `Analyze this VersperClaw session and extract structured facets. +const FACET_EXTRACTION_PROMPT = `Analyze this Codev session and extract structured facets. CRITICAL GUIDELINES: @@ -867,7 +867,7 @@ function formatTranscriptForFacets(log: LogOption): string { return lines.join('\n') } -const SUMMARIZE_CHUNK_PROMPT = `Summarize this portion of a VersperClaw session transcript. Focus on: +const SUMMARIZE_CHUNK_PROMPT = `Summarize this portion of a Codev session transcript. Focus on: 1. What the user asked for 2. What Claude did (tools used, files modified) 3. Any friction or issues @@ -1336,12 +1336,12 @@ type InsightSection = { const INSIGHT_SECTIONS: InsightSection[] = [ { name: 'project_areas', - prompt: `Analyze this VersperClaw usage data and identify project areas. + prompt: `Analyze this Codev usage data and identify project areas. RESPOND WITH ONLY A VALID JSON OBJECT: { "areas": [ - {"name": "Area name", "session_count": N, "description": "2-3 sentences about what was worked on and how VersperClaw was used."} + {"name": "Area name", "session_count": N, "description": "2-3 sentences about what was worked on and how Codev was used."} ] } @@ -1350,18 +1350,18 @@ Include 4-5 areas. Skip internal CC operations.`, }, { name: 'interaction_style', - prompt: `Analyze this VersperClaw usage data and describe the user's interaction style. + prompt: `Analyze this Codev usage data and describe the user's interaction style. RESPOND WITH ONLY A VALID JSON OBJECT: { - "narrative": "2-3 paragraphs analyzing HOW the user interacts with VersperClaw. Use second person 'you'. Describe patterns: iterate quickly vs detailed upfront specs? Interrupt often or let Claude run? Include specific examples. Use **bold** for key insights.", + "narrative": "2-3 paragraphs analyzing HOW the user interacts with Codev. Use second person 'you'. Describe patterns: iterate quickly vs detailed upfront specs? Interrupt often or let Claude run? Include specific examples. Use **bold** for key insights.", "key_pattern": "One sentence summary of most distinctive interaction style" }`, maxTokens: 8192, }, { name: 'what_works', - prompt: `Analyze this VersperClaw usage data and identify what's working well for this user. Use second person ("you"). + prompt: `Analyze this Codev usage data and identify what's working well for this user. Use second person ("you"). RESPOND WITH ONLY A VALID JSON OBJECT: { @@ -1376,7 +1376,7 @@ Include 3 impressive workflows.`, }, { name: 'friction_analysis', - prompt: `Analyze this VersperClaw usage data and identify friction points for this user. Use second person ("you"). + prompt: `Analyze this Codev usage data and identify friction points for this user. Use second person ("you"). RESPOND WITH ONLY A VALID JSON OBJECT: { @@ -1391,7 +1391,7 @@ Include 3 friction categories with 2 examples each.`, }, { name: 'suggestions', - prompt: `Analyze this VersperClaw usage data and suggest improvements. + prompt: `Analyze this Codev usage data and suggest improvements. ## CC FEATURES REFERENCE (pick from these for features_to_try): 1. **MCP Servers**: Connect Claude to external tools, databases, and APIs via Model Context Protocol. @@ -1434,7 +1434,7 @@ IMPORTANT for features_to_try: Pick 2-3 from the CC FEATURES REFERENCE above. In }, { name: 'on_the_horizon', - prompt: `Analyze this VersperClaw usage data and identify future opportunities. + prompt: `Analyze this Codev usage data and identify future opportunities. RESPOND WITH ONLY A VALID JSON OBJECT: { @@ -1451,7 +1451,7 @@ Include 3 opportunities. Think BIG - autonomous workflows, parallel agents, iter ? [ { name: 'cc_team_improvements', - prompt: `Analyze this VersperClaw usage data and suggest product improvements for the CC team. + prompt: `Analyze this Codev usage data and suggest product improvements for the CC team. RESPOND WITH ONLY A VALID JSON OBJECT: { @@ -1465,7 +1465,7 @@ Include 2-3 improvements based on friction patterns observed.`, }, { name: 'model_behavior_improvements', - prompt: `Analyze this VersperClaw usage data and suggest model behavior improvements. + prompt: `Analyze this Codev usage data and suggest model behavior improvements. RESPOND WITH ONLY A VALID JSON OBJECT: { @@ -1481,7 +1481,7 @@ Include 2-3 improvements based on friction patterns observed.`, : []), { name: 'fun_ending', - prompt: `Analyze this VersperClaw usage data and find a memorable moment. + prompt: `Analyze this Codev usage data and find a memorable moment. RESPOND WITH ONLY A VALID JSON OBJECT: { @@ -1735,7 +1735,7 @@ async function generateParallelInsights( .join('\n') || '' // Now generate "At a Glance" with access to other sections' outputs - const atAGlancePrompt = `You're writing an "At a Glance" summary for a VersperClaw usage insights report for VersperClaw users. The goal is to help them understand their usage and improve how they can use Claude better, especially as models improve. + const atAGlancePrompt = `You're writing an "At a Glance" summary for a Codev usage insights report for Codev users. The goal is to help them understand their usage and improve how they can use Claude better, especially as models improve. Use this 4-part structure: @@ -1743,7 +1743,7 @@ Use this 4-part structure: 2. **What's hindering you** - Split into (a) Claude's fault (misunderstandings, wrong approaches, bugs) and (b) user-side friction (not providing enough context, environment issues -- ideally more general than just one project). Be honest but constructive. -3. **Quick wins to try** - Specific VersperClaw features they could try from the examples below, or a workflow technique if you think it's really compelling. (Avoid stuff like "Ask Claude to confirm before taking actions" or "Type out more context up front" which are less compelling.) +3. **Quick wins to try** - Specific Codev features they could try from the examples below, or a workflow technique if you think it's really compelling. (Avoid stuff like "Ask Claude to confirm before taking actions" or "Type out more context up front" which are less compelling.) 4. **Ambitious workflows for better models** - As we move to much more capable models over the next 3-6 months, what should they prepare for? What workflows that seem impossible now will become possible? Draw from the appropriate section below. @@ -2006,7 +2006,7 @@ function generateHtmlReport( const interactionStyle = insights.interaction_style const interactionHtml = interactionStyle?.narrative ? ` -

How You Use VersperClaw

+

How You Use Codev

${markdownToHtml(interactionStyle.narrative)} ${interactionStyle.key_pattern ? `
Key pattern: ${escapeHtml(interactionStyle.key_pattern)}
` : ''} @@ -2070,7 +2070,7 @@ function generateHtmlReport(

Existing CC Features to Try

Suggested CLAUDE.md Additions

-

Just copy this into VersperClaw to add it to your CLAUDE.md.

+

Just copy this into Codev to add it to your CLAUDE.md.

@@ -2095,7 +2095,7 @@ function generateHtmlReport( ${ suggestions.features_to_try && suggestions.features_to_try.length > 0 ? ` -

Just copy this into VersperClaw and it'll set it up for you.

+

Just copy this into Codev and it'll set it up for you.

${suggestions.features_to_try .map( @@ -2129,8 +2129,8 @@ function generateHtmlReport( ${ suggestions.usage_patterns && suggestions.usage_patterns.length > 0 ? ` -

New Ways to Use VersperClaw

-

Just copy this into VersperClaw and it'll walk you through it.

+

New Ways to Use Codev

+

Just copy this into Codev and it'll walk you through it.

${suggestions.usage_patterns .map( @@ -2143,7 +2143,7 @@ function generateHtmlReport( pat.copyable_prompt ? `
-
Paste into VersperClaw:
+
Paste into Codev:
${escapeHtml(pat.copyable_prompt)} @@ -2178,7 +2178,7 @@ function generateHtmlReport(
${escapeHtml(opp.title || '')}
${escapeHtml(opp.whats_possible || '')}
${opp.how_to_try ? `
Getting started: ${escapeHtml(opp.how_to_try)}
` : ''} - ${opp.copyable_prompt ? `
Paste into VersperClaw:
${escapeHtml(opp.copyable_prompt)}
` : ''} + ${opp.copyable_prompt ? `
Paste into Codev:
${escapeHtml(opp.copyable_prompt)}
` : ''}
`, ) @@ -2485,13 +2485,13 @@ function generateHtmlReport( - VersperClaw Insights + Codev Insights
-

VersperClaw Insights

+

Codev Insights

${data.total_messages.toLocaleString()} messages across ${data.total_sessions} sessions${data.total_sessions_scanned && data.total_sessions_scanned > data.total_sessions ? ` (${data.total_sessions_scanned.toLocaleString()} total)` : ''} | ${data.date_range.start} to ${data.date_range.end}

${atAGlanceHtml} @@ -2557,7 +2557,7 @@ function generateHtmlReport( data.multi_clauding.overlap_events === 0 ? `

- No parallel session usage detected. You typically work with one VersperClaw session at a time. + No parallel session usage detected. You typically work with one Codev session at a time.

` : ` @@ -2576,7 +2576,7 @@ function generateHtmlReport(

- You run multiple VersperClaw sessions simultaneously. Multi-clauding is detected when sessions + You run multiple Codev sessions simultaneously. Multi-clauding is detected when sessions overlap in time, suggesting parallel workflows.

` @@ -3039,7 +3039,7 @@ function safeKeys(obj: Record | undefined | null): string[] { const usageReport: Command = { type: 'prompt', name: 'insights', - description: 'Generate a report analyzing your VersperClaw sessions', + description: 'Generate a report analyzing your Codev sessions', contentLength: 0, // Dynamic content progressMessage: 'analyzing your sessions', source: 'builtin', @@ -3141,7 +3141,7 @@ ${atAGlance.quick_wins ? `**Quick wins to try:** ${atAGlance.quick_wins} See _Fe ${atAGlance.ambitious_workflows ? `**Ambitious workflows:** ${atAGlance.ambitious_workflows} See _On the Horizon_.` : ''}` : '_No insights generated_' - const header = `# VersperClaw Insights + const header = `# Codev Insights ${stats} ${data.date_range.start} to ${data.date_range.end} @@ -3156,7 +3156,7 @@ Your full shareable insights report is ready: ${reportUrl}${uploadHint}` return [ { type: 'text', - text: `The user just ran /insights to generate a usage report analyzing their VersperClaw sessions. + text: `The user just ran /insights to generate a usage report analyzing their Codev sessions. Here is the full insights data: ${jsonStringify(insights, null, 2)} diff --git a/src/commands/telegram/telegram.tsx b/src/commands/telegram/telegram.tsx index db94bd02b070b5574c6e3b72ed78ee4ad7cac5bc..c52448f166bba20ef4b8235d522a2f9a19974a07 100644 --- a/src/commands/telegram/telegram.tsx +++ b/src/commands/telegram/telegram.tsx @@ -369,7 +369,7 @@ function TelegramDialog({ onDone(undefined, { display: 'skip' })}> - 在当前 VersperClaw 进程内启动 Telegram 长轮询,并把私聊消息接入当前会话。 + 在当前 Codev 进程内启动 Telegram 长轮询,并把私聊消息接入当前会话。 状态: diff --git a/src/components/AutoModeOptInDialog.tsx b/src/components/AutoModeOptInDialog.tsx index 016f10e9a31beff44b8c062e81b8594c5498e445..0d23eb993304364cbaae6c6ff5c44c41f8518312 100644 --- a/src/components/AutoModeOptInDialog.tsx +++ b/src/components/AutoModeOptInDialog.tsx @@ -7,7 +7,7 @@ import { Select } from './CustomSelect/index.js'; import { Dialog } from './design-system/Dialog.js'; // NOTE: This copy is legally reviewed — do not modify without Legal team approval. -export const AUTO_MODE_DESCRIPTION = "Auto mode lets VersperClaw handle permission prompts automatically — VersperClaw checks each tool call for risky actions and prompt injection before executing. Actions VersperClaw identifies as safe are executed, while actions Claude identifies as risky are blocked and Claude may try a different approach. Ideal for long-running tasks. Sessions are slightly more expensive. VersperClaw can make mistakes that allow harmful commands to run, it's recommended to only use in isolated environments. Shift+Tab to change mode."; +export const AUTO_MODE_DESCRIPTION = "Auto mode lets Codev handle permission prompts automatically — Codev checks each tool call for risky actions and prompt injection before executing. Actions Codev identifies as safe are executed, while actions Claude identifies as risky are blocked and Claude may try a different approach. Ideal for long-running tasks. Sessions are slightly more expensive. Codev can make mistakes that allow harmful commands to run, it's recommended to only use in isolated environments. Shift+Tab to change mode."; type Props = { onAccept(): void; onDecline(): void; @@ -70,7 +70,7 @@ export function AutoModeOptInDialog(t0) { const onChange = t2; let t3; if ($[4] === Symbol.for("react.memo_cache_sentinel")) { - t3 = {AUTO_MODE_DESCRIPTION}; + t3 = {AUTO_MODE_DESCRIPTION}; $[4] = t3; } else { t3 = $[4]; diff --git a/src/components/FeedbackSurvey/FeedbackSurveyView.tsx b/src/components/FeedbackSurvey/FeedbackSurveyView.tsx index 3accb75bea7998a3b37a3de2dd04b34bd7fe4368..5f76428977c51fd7b9d2999e7b94ffbf28fea742 100644 --- a/src/components/FeedbackSurvey/FeedbackSurveyView.tsx +++ b/src/components/FeedbackSurvey/FeedbackSurveyView.tsx @@ -18,7 +18,7 @@ const inputToResponse: Record = { '3': 'good' } as const; export const isValidResponseInput = (input: string): input is ResponseInput => (RESPONSE_INPUTS as readonly string[]).includes(input); -const DEFAULT_MESSAGE = 'How is VersperClaw doing this session? (optional)'; +const DEFAULT_MESSAGE = 'How is Codev doing this session? (optional)'; export function FeedbackSurveyView(t0) { const $ = _c(15); const { diff --git a/src/components/HelpV2/General.tsx b/src/components/HelpV2/General.tsx index cd3c514f3e7f3d99c92511d3317f169743d28cd8..8291ab471697f9c7b33b7842d8161ad63948d3d2 100644 --- a/src/components/HelpV2/General.tsx +++ b/src/components/HelpV2/General.tsx @@ -6,7 +6,7 @@ export function General() { const $ = _c(2); let t0; if ($[0] === Symbol.for("react.memo_cache_sentinel")) { - t0 = VersperClaw understands your codebase, makes edits with your permission, and executes commands — right from your terminal.; + t0 = Codev understands your codebase, makes edits with your permission, and executes commands — right from your terminal.; $[0] = t0; } else { t0 = $[0]; diff --git a/src/components/HelpV2/HelpV2.tsx b/src/components/HelpV2/HelpV2.tsx index bd419232b59f07c4967f1d7ec87cb2fd2fb1ee9a..1bfc6626720dae2aa7561e25262b43e9c93fd728 100644 --- a/src/components/HelpV2/HelpV2.tsx +++ b/src/components/HelpV2/HelpV2.tsx @@ -138,7 +138,7 @@ export function HelpV2(t0) { const t5 = insideModal ? undefined : maxHeight; let t6; if ($[31] !== tabs) { - t6 = {tabs}; + t6 = {tabs}; $[31] = tabs; $[32] = t6; } else { @@ -146,7 +146,7 @@ export function HelpV2(t0) { } let t7; if ($[33] === Symbol.for("react.memo_cache_sentinel")) { - t7 = For more help:{" "}; + t7 = For more help:{" "}; $[33] = t7; } else { t7 = $[33]; diff --git a/src/components/LogoV2/CondensedLogo.tsx b/src/components/LogoV2/CondensedLogo.tsx index ebbe787a3eb769011dee4f5aaaa90c4eaf63788d..878eb1e1b86c46d1aa182ffe85ae589f0fa1dd97 100644 --- a/src/components/LogoV2/CondensedLogo.tsx +++ b/src/components/LogoV2/CondensedLogo.tsx @@ -58,7 +58,7 @@ export function CondensedLogo(): ReactNode { const textWidth = Math.max(columns - 15, 20) // Truncate version to fit within available width, accounting for "Claude Code v" prefix - const versionPrefix = 'Versper Claw v' + const versionPrefix = 'Codev v' const truncatedVersion = truncate( version, Math.max(textWidth - versionPrefix.length, 6), @@ -92,7 +92,7 @@ export function CondensedLogo(): ReactNode { {/* Info */} - Versper Claw{' '} + Codev{' '} v{truncatedVersion} {shouldSplit ? ( diff --git a/src/components/LogoV2/GuestPassesUpsell.tsx b/src/components/LogoV2/GuestPassesUpsell.tsx index e0294cfa70391e3964e092474021eb138cd55e35..735ef1eab3cd0a5391d84657de39571aaf5281cd 100644 --- a/src/components/LogoV2/GuestPassesUpsell.tsx +++ b/src/components/LogoV2/GuestPassesUpsell.tsx @@ -66,7 +66,7 @@ export function GuestPassesUpsell(): React.ReactNode { [✻] [✻]{' '} [✻] ·{' '} {reward - ? `Share Versper Claw and earn ${formatCreditAmount(reward)} of extra usage · /passes` + ? `Share Codev and earn ${formatCreditAmount(reward)} of extra usage · /passes` : '3 guest passes at /passes'} ) diff --git a/src/components/LogoV2/LogoV2.tsx b/src/components/LogoV2/LogoV2.tsx index 7af3b0cd1d5a4e0b7a78dbc07e827046e16f61f3..393a803b810c5ca76ce601fa23461ca4747eccf9 100644 --- a/src/components/LogoV2/LogoV2.tsx +++ b/src/components/LogoV2/LogoV2.tsx @@ -250,8 +250,8 @@ export function LogoV2(): React.ReactNode { const layoutMode = getLayoutMode(columns) const userTheme = resolveThemeSetting(getGlobalConfig().theme) - const borderTitle = ` ${color('clawd_body', userTheme)('Versper Claw')} ${color('inactive', userTheme)(`v${version}`)} ` - const compactBorderTitle = color('clawd_body', userTheme)(' Versper Claw ') + const borderTitle = ` ${color('clawd_body', userTheme)('Codev')} ${color('inactive', userTheme)(`v${version}`)} ` + const compactBorderTitle = color('clawd_body', userTheme)(' Codev ') // Early return for compact mode if (layoutMode === 'compact') { diff --git a/src/components/LogoV2/WelcomeV2.tsx b/src/components/LogoV2/WelcomeV2.tsx index 5af866fda0e18ddb7265423a75eb3b85f7bd1cc2..8c3e4ab12793b37a7b6f2a7a02ad23c7e58da1d2 100644 --- a/src/components/LogoV2/WelcomeV2.tsx +++ b/src/components/LogoV2/WelcomeV2.tsx @@ -6,7 +6,7 @@ const WELCOME_V2_WIDTH = 58 export function WelcomeV2(): React.ReactNode { const [theme] = useTheme() - const welcomeMessage = 'Welcome to Versper Claw' + const welcomeMessage = 'Welcome to Codev' if (env.terminal === 'Apple_Terminal') { return ( diff --git a/src/components/LogoV2/feedConfigs.tsx b/src/components/LogoV2/feedConfigs.tsx index 0f16ee94a8a2a3d45018189dc79fe60e955cda84..539ba4e39506919c81823995da1466bdccf61956 100644 --- a/src/components/LogoV2/feedConfigs.tsx +++ b/src/components/LogoV2/feedConfigs.tsx @@ -39,7 +39,7 @@ export function createWhatsNewFeed(releaseNotes: string[]): FeedConfig { text: note }; }); - const emptyMessage = "external" === 'ant' ? 'Unable to fetch latest claude-cli-internal commits' : 'Check the VersperClaw changelog for updates'; + const emptyMessage = "external" === 'ant' ? 'Unable to fetch latest claude-cli-internal commits' : 'Check the Codev changelog for updates'; return { title: "external" === 'ant' ? "What's new [ANT-ONLY: Latest CC commits]" : "What's new", lines, @@ -73,7 +73,7 @@ export function createProjectOnboardingFeed(steps: Step[]): FeedConfig { } export function createGuestPassesFeed(): FeedConfig { const reward = getCachedReferrerReward(); - const subtitle = reward ? `Share VersperClaw and earn ${formatCreditAmount(reward)} of extra usage` : 'Share VersperClaw with friends'; + const subtitle = reward ? `Share Codev and earn ${formatCreditAmount(reward)} of extra usage` : 'Share Codev with friends'; return { title: '3 guest passes', lines: [], diff --git a/src/components/Onboarding.tsx b/src/components/Onboarding.tsx index 60e864215b5274e6cbcb0e4737eebf9f4af5d071..009cd6d5a309133a8bd31a941adfa987e27ca74b 100644 --- a/src/components/Onboarding.tsx +++ b/src/components/Onboarding.tsx @@ -72,9 +72,9 @@ export function Onboarding({ */} - VersperClaw can make mistakes + Codev can make mistakes - You should always review VersperClaw's responses, especially when + You should always review Codev's responses, especially when running code. @@ -87,7 +87,7 @@ export function Onboarding({ For more details see: - + diff --git a/src/components/friend/frontend/api.ts b/src/components/friend/frontend/api.ts index 92ec46cf6e29e1135ca3345f63120dd990ecee4c..885ca3bd531cec8b053179a0fc2060d4ec4c4476 100644 --- a/src/components/friend/frontend/api.ts +++ b/src/components/friend/frontend/api.ts @@ -1,6 +1,6 @@ import type { VRMSceneHandle } from './components/VRMScene' -/** VersperClaw server base URL */ +/** Codev server base URL */ export const SERVER_URL = 'http://127.0.0.1:3456' /** Base path for the Friend VRM plugin API */ diff --git a/src/components/friend/frontend/src-tauri/Cargo.lock b/src/components/friend/frontend/src-tauri/Cargo.lock index a5afc548ea519e0f5229dd455c8b2d10d2fbc5f8..970e25582773eb89b2a1b3c7d148bb4c2b221859 100644 --- a/src/components/friend/frontend/src-tauri/Cargo.lock +++ b/src/components/friend/frontend/src-tauri/Cargo.lock @@ -4022,7 +4022,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "versperclaw-friend" +name = "codev-friend" version = "0.1.0" dependencies = [ "serde", diff --git a/src/components/friend/frontend/src-tauri/Cargo.toml b/src/components/friend/frontend/src-tauri/Cargo.toml index f996a3060aad0413d825962481ae686765753aa5..335f6fb0f0807f1695c2bc3b80eeb874d152e396 100644 --- a/src/components/friend/frontend/src-tauri/Cargo.toml +++ b/src/components/friend/frontend/src-tauri/Cargo.toml @@ -1,12 +1,12 @@ [package] -name = "versperclaw-friend" +name = "codev-friend" version = "0.1.0" -description = "VersperClaw VRM desktop pet" -authors = ["VersperClaw"] +description = "Codev VRM desktop pet" +authors = ["Codev"] edition = "2021" [lib] -name = "versperclaw_friend_lib" +name = "codev_friend_lib" crate-type = ["lib", "cdylib", "staticlib"] [build-dependencies] diff --git a/src/components/friend/frontend/src-tauri/capabilities/default.json b/src/components/friend/frontend/src-tauri/capabilities/default.json index 56265d8ed95d6d12635b7384838c1b94800e6f54..541373c5d14b53a5c55c8c5e027f1bf159d69f4b 100644 --- a/src/components/friend/frontend/src-tauri/capabilities/default.json +++ b/src/components/friend/frontend/src-tauri/capabilities/default.json @@ -1,6 +1,6 @@ { "identifier": "default", - "description": "Default capabilities for VersperClaw Friend", + "description": "Default capabilities for Codev Friend", "windows": ["main"], "permissions": [ "core:default", diff --git a/src/components/friend/frontend/src-tauri/src/main.rs b/src/components/friend/frontend/src-tauri/src/main.rs index d31dd31bb6b5dfd547c895263a6d988de540d798..022d0327f8c997e4a0ba27c197d76875f2f3518b 100644 --- a/src/components/friend/frontend/src-tauri/src/main.rs +++ b/src/components/friend/frontend/src-tauri/src/main.rs @@ -2,5 +2,5 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] fn main() { - versperclaw_friend_lib::run() + codev_friend_lib::run() } diff --git a/src/components/friend/frontend/src-tauri/tauri.conf.json b/src/components/friend/frontend/src-tauri/tauri.conf.json index 98db3e089653dcbcdbbfc89514dc46b2f50aec61..047db4aa7cd2adad72138383680a95419463abf4 100644 --- a/src/components/friend/frontend/src-tauri/tauri.conf.json +++ b/src/components/friend/frontend/src-tauri/tauri.conf.json @@ -1,8 +1,8 @@ { "$schema": "https://raw.githubusercontent.com/nicedoc/tauri/dev/crates/tauri-config-schema/schema.json", - "productName": "VersperClaw Friend", + "productName": "Codev Friend", "version": "0.1.0", - "identifier": "com.versperclaw.friend", + "identifier": "com.codev.friend", "build": { "devUrl": "http://127.0.0.1:3456/friend/" }, @@ -21,7 +21,7 @@ "app": { "windows": [ { - "title": "VersperClaw Friend", + "title": "Codev Friend", "label": "main", "url": "http://127.0.0.1:3456/friend/", "transparent": true, diff --git a/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx b/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx index ca17f0a081a371f159d99b51b848748d8e6a0a16..547b175324d660c5f6c7e828da4df959837241ce 100644 --- a/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +++ b/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx @@ -303,7 +303,7 @@ export function SkillPermissionRequest(props) { const t12 = `Use skill "${skill}"?`; let t13; if ($[33] === Symbol.for("react.memo_cache_sentinel")) { - t13 = VersperClaw may use instructions, code, or files from this Skill.; + t13 = Codev may use instructions, code, or files from this Skill.; $[33] = t13; } else { t13 = $[33]; diff --git a/src/constants/product.ts b/src/constants/product.ts index ae63ef7801319f9643c8ea3e9263857f4dd941a0..d5ee17dc3d00d1170bbf717d5814849eb0d271de 100644 --- a/src/constants/product.ts +++ b/src/constants/product.ts @@ -1,6 +1,6 @@ export const PRODUCT_URL = 'https://claude.com/claude-code' -// VersperClaw Remote session URLs +// Codev Remote session URLs export const CLAUDE_AI_BASE_URL = 'https://claude.ai' export const CLAUDE_AI_STAGING_BASE_URL = 'https://claude-ai.staging.ant.dev' export const CLAUDE_AI_LOCAL_BASE_URL = 'http://localhost:4000' diff --git a/src/constants/prompts.ts b/src/constants/prompts.ts index 85caca6577cb8db44a3ef534bd4aeee74284f69e..afec90e6d3f489709dd3bf62d8075a1cac45a751 100644 --- a/src/constants/prompts.ts +++ b/src/constants/prompts.ts @@ -99,7 +99,7 @@ const skillSearchFeatureCheck = feature('EXPERIMENTAL_SKILL_SEARCH') import type { OutputStyleConfig } from './outputStyles.js' import { CYBER_RISK_INSTRUCTION } from './cyberRiskInstruction.js' -export const VERSPER_CLAW_DOCS_MAP_URL = +export const CODEV_DOCS_MAP_URL = 'https://code.claude.com/docs/en/claude_code_docs_map.md' /** @@ -214,7 +214,7 @@ function getSimpleDoingTasksSection(): string { ] const userHelpSubitems = [ - `/help: Get help with using VersperClaw`, + `/help: Get help with using Codev`, `To give feedback, users should ${MACRO.ISSUES_EXPLAINER}`, ] @@ -242,7 +242,7 @@ function getSimpleDoingTasksSection(): string { : []), ...(process.env.USER_TYPE === 'ant' ? [ - `If the user reports a bug, slowness, or unexpected behavior with VersperClaw itself (as opposed to asking you to fix their own code), recommend the appropriate slash command: /issue for model-related problems (odd outputs, wrong tool choices, hallucinations, refusals), or /share to upload the full session transcript for product bugs, crashes, slowness, or general issues. Only recommend these when the user is describing a problem with VersperClaw. After /share produces a ccshare link, if you have a Slack MCP tool available, offer to post the link to #versperclaw-feedback (channel ID C07VBSHV7EV) for the user.`, + `If the user reports a bug, slowness, or unexpected behavior with Codev itself (as opposed to asking you to fix their own code), recommend the appropriate slash command: /issue for model-related problems (odd outputs, wrong tool choices, hallucinations, refusals), or /share to upload the full session transcript for product bugs, crashes, slowness, or general issues. Only recommend these when the user is describing a problem with Codev. After /share produces a ccshare link, if you have a Slack MCP tool available, offer to post the link to #codev-feedback (channel ID C07VBSHV7EV) for the user.`, ] : []), `If the user asks for help or wants to give feedback inform them of the following:`, @@ -434,7 +434,7 @@ function getSimpleToneAndStyleSection(): string { ? null : `Your responses should be short and concise.`, `When referencing specific functions or pieces of code include the pattern file_path:line_number to allow the user to easily navigate to the source code location.`, - `When referencing GitHub issues or pull requests, use the owner/repo#123 format (e.g. versperai/versperclaw#100) so they render as clickable links.`, + `When referencing GitHub issues or pull requests, use the owner/repo#123 format (e.g. chenbhao/codev#100) so they render as clickable links.`, `Do not use a colon before tool calls. Your tool calls may not be shown directly in the output, so text like "Let me read the file:" followed by a read tool call should just be "Let me read the file." with a period.`, ].filter(item => item !== null) @@ -449,7 +449,7 @@ export async function getSystemPrompt( ): Promise { if (isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE)) { return [ - `You are VersperClaw, versperai's CLI.\n\nCWD: ${getCwd()}\nDate: ${getSessionStartDate()}`, + `You are Codev, chenbhao's CLI.\n\nCWD: ${getCwd()}\nDate: ${getSessionStartDate()}`, ] } @@ -684,7 +684,7 @@ export async function computeSimpleEnvInfo( null, process.env.USER_TYPE === 'ant' && isUndercover() ? null - : `VersperClaw is available as a CLI in the terminal, desktop app (Mac/Windows), web app (claude.ai/code), and IDE extensions (VS Code, JetBrains).`, + : `Codev is available as a CLI in the terminal, desktop app (Mac/Windows), web app (claude.ai/code), and IDE extensions (VS Code, JetBrains).`, null, ].filter(item => item !== null) @@ -741,7 +741,7 @@ export function getUnameSR(): string { return `${osType()} ${osRelease()}` } -export const DEFAULT_AGENT_PROMPT = `You are an agent for VersperClaw, versperai's CLI. Given the user's message, you should use the tools available to complete the task. Complete the task fully—don't gold-plate, but don't leave it half-done. When you complete the task, respond with a concise report covering what was done and any key findings — the caller will relay this to the user, so it only needs the essentials.` +export const DEFAULT_AGENT_PROMPT = `You are an agent for Codev, chenbhao's CLI. Given the user's message, you should use the tools available to complete the task. Complete the task fully—don't gold-plate, but don't leave it half-done. When you complete the task, respond with a concise report covering what was done and any key findings — the caller will relay this to the user, so it only needs the essentials.` export async function enhanceSystemPromptWithEnvDetails( existingSystemPrompt: string[], diff --git a/src/constants/system.ts b/src/constants/system.ts index b7efee7eace4c1a890de0d10fbea9e3d6eed8160..ef01e4c528b1ca21ae3dc174a450af0a5db81eb6 100644 --- a/src/constants/system.ts +++ b/src/constants/system.ts @@ -7,9 +7,9 @@ import { isEnvDefinedFalsy } from '../utils/envUtils.js' import { getAPIProvider } from '../utils/model/providers.js' import { getWorkload } from '../utils/workloadContext.js' -const DEFAULT_PREFIX = `You are VersperClaw, versperai's CLI.` -const AGENT_SDK_CLAUDE_CODE_PRESET_PREFIX = `You are VersperClaw, versperai's CLI, running within the Agent SDK.` -const AGENT_SDK_PREFIX = `You are a VersperClaw agent, built on versperai's Agent SDK.` +const DEFAULT_PREFIX = `You are Codev, chenbhao's CLI.` +const AGENT_SDK_CLAUDE_CODE_PRESET_PREFIX = `You are Codev, chenbhao's CLI, running within the Agent SDK.` +const AGENT_SDK_PREFIX = `You are a Codev agent, built on chenbhao's Agent SDK.` const CLI_SYSPROMPT_PREFIX_VALUES = [ DEFAULT_PREFIX, diff --git a/src/entrypoints/cli.tsx b/src/entrypoints/cli.tsx index c0a70fe7a221573e9336eae611d29a9c787bc887..3cef6c276e9fb50d7d51b83876ba40a018bc0eaf 100644 --- a/src/entrypoints/cli.tsx +++ b/src/entrypoints/cli.tsx @@ -37,7 +37,7 @@ async function main(): Promise { if (args.length === 1 && (args[0] === '--version' || args[0] === '-v' || args[0] === '-V')) { // MACRO.VERSION is inlined at build time // biome-ignore lint/suspicious/noConsole:: intentional console output - console.log(`${MACRO.VERSION} (Versper Claw)`); + console.log(`${MACRO.VERSION} (Codev)`); return; } diff --git a/src/friend/FriendService.ts b/src/friend/FriendService.ts index 8991408f9f4f42f477abf6736099282064b494d8..f737a5b6108311d9247fab6e6f2b609e65c6cd83 100644 --- a/src/friend/FriendService.ts +++ b/src/friend/FriendService.ts @@ -173,9 +173,9 @@ class FriendService { listener({ text: trimmed }); } - // Build the override system prompt (persona-only, no VersperClaw CLI prompt) + // Build the override system prompt (persona-only, no Codev CLI prompt) const baseVrmPrompt = buildVrmSystemPrompt(); - const overrideSystemPrompt = `${baseVrmPrompt}\n\nIMPORTANT: You are ONLY the character(s) defined above. Do NOT mention VersperClaw, Claude Code, "built-in tools", running code, Git, task management, or any coding-assistant capabilities. You may use available tools when appropriate, but your identity and behavior must follow your character persona strictly.`; + const overrideSystemPrompt = `${baseVrmPrompt}\n\nIMPORTANT: You are ONLY the character(s) defined above. Do NOT mention Codev, Claude Code, "built-in tools", running code, Git, task management, or any coding-assistant capabilities. You may use available tools when appropriate, but your identity and behavior must follow your character persona strictly.`; // Dynamically import enqueue to avoid circular deps import('../utils/messageQueueManager.js').then(({ enqueue }) => { @@ -737,7 +737,7 @@ class FriendService { if (!isVoiceStreamAvailable()) { throw new Error('Anthropic Voice Stream not available'); } - return await connectVoiceStream(callbacks, { language, keyterms: ['code', 'versperclaw'] }); + return await connectVoiceStream(callbacks, { language, keyterms: ['code', 'codev'] }); } case 'local': { diff --git a/src/friend/constants.ts b/src/friend/constants.ts index dd8cd0ba5cff0d9c3efb891f46bf82521a588107..e072c536245bfcbc7c66d3f954357703dd344dce 100644 --- a/src/friend/constants.ts +++ b/src/friend/constants.ts @@ -1,5 +1,5 @@ /** - * Shared constants for Friend — VersperClaw native plugin. + * Shared constants for Friend — Codev native plugin. */ export const GATEWAY_URL = 'http://127.0.0.1:3456'; diff --git a/src/friend/prefs.ts b/src/friend/prefs.ts index a7fc20576e5ad94ca239ea01e48f0039bd9b2d0d..79477a53498d0b72f736aa52de740a87c6d21b00 100644 --- a/src/friend/prefs.ts +++ b/src/friend/prefs.ts @@ -1,5 +1,5 @@ /** - * Persistent preferences for Friend desktop pet (VersperClaw native). + * Persistent preferences for Friend desktop pet (Codev native). */ import path from 'node:path'; import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs'; @@ -27,7 +27,7 @@ export interface FriendPrefs { } const homeDir = process.env.HOME || process.env.USERPROFILE || ''; -const VSCODE_CONFIG_DIR = path.join(homeDir, '.config', 'VersperClaw'); +const VSCODE_CONFIG_DIR = path.join(homeDir, '.config', 'Codev'); const PREFS_PATH = path.join(VSCODE_CONFIG_DIR, 'friend.json'); const DEFAULT_PREFS: FriendPrefs = { diff --git a/src/friend/server.ts b/src/friend/server.ts index 30c2b3749865096cc94ebe12459f6f7c04357e3d..d496a5e2013323f347c15daea2f33d04b444f7f3 100644 --- a/src/friend/server.ts +++ b/src/friend/server.ts @@ -36,13 +36,13 @@ function freePort(port: number): boolean { const pid = parseInt(pidMatch[1]!, 10); if (pid === process.pid) return true; // we own it - // Only kill bun/VersperClaw processes — don't touch unknown services + // Only kill bun/Codev processes — don't touch unknown services const proc = Bun.spawnSync(['ps', '-p', String(pid), '-o', 'comm=']); const comm = proc.stdout.toString().trim(); if (!comm) return false; // process doesn't exist const baseName = comm.split('/').pop() || comm; - if (baseName !== 'bun' && baseName !== 'VersperClaw' && !baseName.startsWith('claude-') && !baseName.includes('node')) { - console.warn(`[FriendServer] Port ${port} is occupied by non-VersperClaw process: ${comm}`); + if (baseName !== 'bun' && baseName !== 'Codev' && !baseName.startsWith('claude-') && !baseName.includes('node')) { + console.warn(`[FriendServer] Port ${port} is occupied by non-Codev process: ${comm}`); return false; } diff --git a/src/friend/sse.ts b/src/friend/sse.ts index e4e819beab2971ea644bf87e7afa3f9fc67e5dd2..91516146a35b383b5bd34b2f7ebde46876d83b64 100644 --- a/src/friend/sse.ts +++ b/src/friend/sse.ts @@ -2,7 +2,7 @@ * SSE client registry and typed broadcast for Friend VRM avatar. * * Uses Bun ReadableStream-based SSE (not Node http.ServerResponse), - * compatible with the VersperClaw Bun.serve() infrastructure. + * compatible with the Codev Bun.serve() infrastructure. */ type SseClient = { diff --git a/src/friend/stt-service.ts b/src/friend/stt-service.ts index e4af848ce8a1380f97d06455ad4fa53336a34fa4..4006f940d80e4d78d8a505adb27f510f1d3e49dc 100644 --- a/src/friend/stt-service.ts +++ b/src/friend/stt-service.ts @@ -42,7 +42,7 @@ async function startSttConnection( } const conn = await connectVoiceStream(callbacks, { language: language || 'en', - keyterms: ['code', 'versperclaw'], + keyterms: ['code', 'codev'], }); return conn; } diff --git a/src/friend/tauri-launcher.ts b/src/friend/tauri-launcher.ts index 5463d6c80fda349fffc23acb8a61f3133ed09d83..f747d01c5910437e4635195a8ba97016bd46c05f 100644 --- a/src/friend/tauri-launcher.ts +++ b/src/friend/tauri-launcher.ts @@ -1,5 +1,5 @@ /** - * Tauri desktop app process management for Friend (VersperClaw native). + * Tauri desktop app process management for Friend (Codev native). * * Launches the VRM desktop pet as a native Tauri window. * The HTTP server runs in-process via friend/server.ts — @@ -14,8 +14,8 @@ let tauriProcess: ReturnType | null = null; export async function launchTauri(log: { info: (msg: string) => void; warn: (msg: string) => void }) { // Find the Tauri binary const cwd = process.cwd() - const releaseBinary = path.join(cwd, 'src', 'components', 'friend', 'frontend', 'src-tauri', 'target', 'release', 'versperclaw-friend') - const debugBinary = path.join(cwd, 'src', 'components', 'friend', 'frontend', 'src-tauri', 'target', 'debug', 'versperclaw-friend') + const releaseBinary = path.join(cwd, 'src', 'components', 'friend', 'frontend', 'src-tauri', 'target', 'release', 'codev-friend') + const debugBinary = path.join(cwd, 'src', 'components', 'friend', 'frontend', 'src-tauri', 'target', 'debug', 'codev-friend') const binary = existsSync(releaseBinary) ? releaseBinary : existsSync(debugBinary) ? debugBinary diff --git a/src/screens/REPL.tsx b/src/screens/REPL.tsx index 39785c3d0b57620f142f5c1487cbad24bf98911e..8e14ca768f9017fa82069f255439173bcce7ecd2 100644 --- a/src/screens/REPL.tsx +++ b/src/screens/REPL.tsx @@ -1581,7 +1581,7 @@ export function REPL({ const titleGenerationAttemptedRef = useRef((initialMessages?.length ?? 0) > 0) const agentTitle = mainThreadAgentDefinition?.agentType const terminalTitle = - sessionTitle ?? agentTitle ?? autoGeneratedTitle ?? 'Versper Claw' + sessionTitle ?? agentTitle ?? autoGeneratedTitle ?? 'Codev' const isWaitingForApproval = toolUseConfirmQueue.length > 0 || promptQueue.length > 0 || diff --git a/src/server/api/friend.ts b/src/server/api/friend.ts index 8bc6d655cc738d46ff100a6bc2bcd9b2ae70f587..1ffbd71afddd5c7115e54db0f8917a0b690b0b5b 100644 --- a/src/server/api/friend.ts +++ b/src/server/api/friend.ts @@ -1,5 +1,5 @@ /** - * Friend API — VRM avatar frontend HTTP routes for VersperClaw. + * Friend API — VRM avatar frontend HTTP routes for Codev. * * Simplified to only voice + emotion/action features. */ @@ -217,7 +217,7 @@ export async function handleFriendApi(req: Request, url: URL): Promise // ── Persona (read-only) ── const workspaceRoot = path.join( process.env.HOME || process.env.USERPROFILE || '', - '.config', 'VersperClaw', 'friend', + '.config', 'Codev', 'friend', ); const identityPath = path.join(workspaceRoot, 'IDENTITY.md'); const soulPath = path.join(workspaceRoot, 'SOUL.md'); diff --git a/src/services/PromptSuggestion/promptSuggestion.ts b/src/services/PromptSuggestion/promptSuggestion.ts index ce23e6d1083daae7ab23a8386447dcff1c775ee3..5de26d13603c6a997ad52c6b7c4f97cde1b9b728 100644 --- a/src/services/PromptSuggestion/promptSuggestion.ts +++ b/src/services/PromptSuggestion/promptSuggestion.ts @@ -255,7 +255,7 @@ export function getParentCacheSuppressReason( : null } -const SUGGESTION_PROMPT = `[SUGGESTION MODE: Suggest what the user might naturally type next into VersperClaw.] +const SUGGESTION_PROMPT = `[SUGGESTION MODE: Suggest what the user might naturally type next into Codev.] FIRST: Look at the user's recent messages and original request. diff --git a/src/services/feishu/FeishuService.ts b/src/services/feishu/FeishuService.ts index eb8ea6dcea983e91ea1bf13ff8f375d6ef4b91f8..5e1c622a732c9b8679eae90896d89da4f5d74fe4 100644 --- a/src/services/feishu/FeishuService.ts +++ b/src/services/feishu/FeishuService.ts @@ -244,7 +244,7 @@ class FeishuService { appId: config.appId!, appSecret: config.appSecret!, domain, - source: 'versperclaw', + source: 'codev', // Use default logger level (info) respectProxyEnv: true, wsConfig: { pingTimeout: 3 }, @@ -437,7 +437,7 @@ class FeishuService { async runRegistrationWizard(): Promise<{ appId: string; appSecret: string }> { const result = await registerApp({ - source: 'versperclaw', + source: 'codev', onQRCodeReady: info => { log.info('wizard', 'qr-ready', { url: info.url, @@ -542,7 +542,7 @@ class FeishuService { try { await new Promise((resolve, reject) => { const child = spawn( - '/home/yuki/Code/Agent/VersperClaw/.venv/bin/voxcpm', + '/home/yuki/Code/Agent/Codev/.venv/bin/voxcpm', ['clone', '--text', chunk, '--reference-audio', refAudio, '--denoise', '--output', rawPath], { shell: false }, ) diff --git a/src/services/telegram/TelegramService.ts b/src/services/telegram/TelegramService.ts index 6dfb69bcbe35d1f953a0339cd6f82dc4755c93b1..578cb9df3c593bd7db40b720a0c570a320ef9863 100644 --- a/src/services/telegram/TelegramService.ts +++ b/src/services/telegram/TelegramService.ts @@ -501,7 +501,7 @@ class TelegramService { if (text === '/start') { void this.sendMessage( normalizedChatId, - 'Telegram 已连接到当前 VersperClaw 会话。直接发送文本即可开始远程对话。', + 'Telegram 已连接到当前 Codev 会话。直接发送文本即可开始远程对话。', ).catch(() => {}) return } diff --git a/src/services/voice/providers.ts b/src/services/voice/providers.ts index 186d56958f507bdac3b0a87bb2fe8cfa22a41110..7e886f0c2e7c55c5ddc78dcce5aa1528bd72334e 100644 --- a/src/services/voice/providers.ts +++ b/src/services/voice/providers.ts @@ -1,4 +1,4 @@ -// Provider abstraction for VersperClaw voice mode. +// Provider abstraction for Codev voice mode. // // Two interfaces: // - `TranscriptionProvider` — speech → text @@ -121,7 +121,7 @@ export class LocalWhisperSTT implements TranscriptionProvider { } private async makeTmpDir(prefix: string): Promise { - const dir = path.join(os.tmpdir(), `versperclaw-${prefix}-${process.pid}-${Date.now()}`) + const dir = path.join(os.tmpdir(), `codev-${prefix}-${process.pid}-${Date.now()}`) await new Promise((resolve) => { const w = spawn('mkdir', ['-p', dir]) w.on('close', (code) => (code === 0 ? resolve() : resolve())) @@ -231,7 +231,7 @@ export class EdgeTTSProvider implements TTSProvider { } private async writeTempText(text: string): Promise { - const p = path.join(os.tmpdir(), `versperclaw-edge-tts-${process.pid}-${Date.now()}.txt`) + const p = path.join(os.tmpdir(), `codev-edge-tts-${process.pid}-${Date.now()}.txt`) await (await import('node:fs')).promises.writeFile(p, text, 'utf8') return p } diff --git a/src/skills/bundled/debug.ts b/src/skills/bundled/debug.ts index ad75504153c576805c36cdee60b384761a7c8184..9df3d926414cc50801d790ace29ae8cd3c76fa88 100644 --- a/src/skills/bundled/debug.ts +++ b/src/skills/bundled/debug.ts @@ -20,14 +20,14 @@ const ALLOWED_TOOLS = [ DEBUG_SESSION_TOOL_NAME, ] -const DEBUG_SESSION_DIR = '.versperclaw-debug' +const DEBUG_SESSION_DIR = '.codev-debug' function buildDebugPrompt(args: string): string { const issue = args.trim() || 'The user did not provide a bug description yet.' return `# /debug - Runtime Debugging -You are in VersperClaw debug mode. Debug mode is evidence-driven: insert temporary probes, collect runtime data, identify the root cause from logs, fix, verify, and clean up. +You are in Codev debug mode. Debug mode is evidence-driven: insert temporary probes, collect runtime data, identify the root cause from logs, fix, verify, and clean up. Debug artifact directory: \`${DEBUG_SESSION_DIR}/\` Runtime log file: \`${DEBUG_SESSION_DIR}/debug.log\` diff --git a/src/skills/bundled/friendPrompt.ts b/src/skills/bundled/friendPrompt.ts index b6f6f4ec98ee175c33d23ac39f620277c3b0a084..534c5761d70cf6a79e8315a75c0608a71e2c352b 100644 --- a/src/skills/bundled/friendPrompt.ts +++ b/src/skills/bundled/friendPrompt.ts @@ -15,7 +15,7 @@ const FRIEND_URL = 'http://127.0.0.1:3456/friend/' export function loadPersona(): string { const homeDir = process.env.HOME || process.env.USERPROFILE || '' - const baseDir = path.join(homeDir, '.config', 'VersperClaw', 'friend') + const baseDir = path.join(homeDir, '.config', 'Codev', 'friend') const parts: string[] = [] const identityPath = path.join(baseDir, 'IDENTITY.md') diff --git a/src/skills/bundled/stuck.ts b/src/skills/bundled/stuck.ts index 89666d2f43ffcdc2e89f7db16943be5dcb71cf01..80e71433f63c3afe60e82e16082d5ad4158c3c78 100644 --- a/src/skills/bundled/stuck.ts +++ b/src/skills/bundled/stuck.ts @@ -3,13 +3,13 @@ import { registerBundledSkill } from '../bundledSkills.js' // Prompt text contains `ps` commands as instructions for Claude to run, // not commands this file executes. // eslint-disable-next-line custom-rules/no-direct-ps-commands -const STUCK_PROMPT = `# /stuck — diagnose frozen/slow VersperClaw sessions +const STUCK_PROMPT = `# /stuck — diagnose frozen/slow Codev sessions -The user thinks another VersperClaw session on this machine is frozen, stuck, or very slow. Investigate and post a report to #versperclaw-feedback. +The user thinks another Codev session on this machine is frozen, stuck, or very slow. Investigate and post a report to #codev-feedback. ## What to look for -Scan for other VersperClaw processes (excluding the current one — PID is in \`process.pid\` but for shell commands just exclude the PID you see running this prompt). Process names are typically \`claude\` (installed) or \`cli\` (native dev build). +Scan for other Codev processes (excluding the current one — PID is in \`process.pid\` but for shell commands just exclude the PID you see running this prompt). Process names are typically \`claude\` (installed) or \`cli\` (native dev build). Signs of a stuck session: - **High CPU (≥90%) sustained** — likely an infinite loop. Sample twice, 1-2s apart, to confirm it's not a transient spike. @@ -21,7 +21,7 @@ Signs of a stuck session: ## Investigation steps -1. **List all VersperClaw processes** (macOS/Linux): +1. **List all Codev processes** (macOS/Linux): \`\`\` ps -axo pid=,pcpu=,rss=,etime=,state=,comm=,command= | grep -E '(claude|cli)' | grep -v grep \`\`\` @@ -41,17 +41,17 @@ Signs of a stuck session: **Only post to Slack if you actually found something stuck.** If every session looks healthy, tell the user that directly — do not post an all-clear to the channel. -If you did find a stuck/slow session, post to **#versperclaw-feedback** (channel ID: \`C07VBSHV7EV\`) using the Slack MCP tool. Use ToolSearch to find \`slack_send_message\` if it's not already loaded. +If you did find a stuck/slow session, post to **#codev-feedback** (channel ID: \`C07VBSHV7EV\`) using the Slack MCP tool. Use ToolSearch to find \`slack_send_message\` if it's not already loaded. **Use a two-message structure** to keep the channel scannable: -1. **Top-level message** — one short line: hostname, VersperClaw version, and a terse symptom (e.g. "session PID 12345 pegged at 100% CPU for 10min" or "git subprocess hung in D state"). No code blocks, no details. +1. **Top-level message** — one short line: hostname, Codev version, and a terse symptom (e.g. "session PID 12345 pegged at 100% CPU for 10min" or "git subprocess hung in D state"). No code blocks, no details. 2. **Thread reply** — the full diagnostic dump. Pass the top-level message's \`ts\` as \`thread_ts\`. Include: - PID, CPU%, RSS, state, uptime, command line, child processes - Your diagnosis of what's likely wrong - Relevant debug log tail or \`sample\` output if you captured it -If Slack MCP isn't available, format the report as a message the user can copy-paste into #versperclaw-feedback (and let them know to thread the details themselves). +If Slack MCP isn't available, format the report as a message the user can copy-paste into #codev-feedback (and let them know to thread the details themselves). ## Notes - Don't kill or signal any processes — this is diagnostic only. @@ -66,7 +66,7 @@ export function registerStuckSkill(): void { registerBundledSkill({ name: 'stuck', description: - '[ANT-ONLY] Investigate frozen/stuck/slow Claude Code sessions on this machine and post a diagnostic report to #versperclaw-feedback.', + '[ANT-ONLY] Investigate frozen/stuck/slow Claude Code sessions on this machine and post a diagnostic report to #codev-feedback.', userInvocable: true, async getPromptForCommand(args) { let prompt = STUCK_PROMPT diff --git a/src/skills/bundled/updateConfig.ts b/src/skills/bundled/updateConfig.ts index bca5631f741763a5d09ba265c8a3889895661b32..547fbd2f6a2ad1cd436ba2349a694a1b00775bce 100644 --- a/src/skills/bundled/updateConfig.ts +++ b/src/skills/bundled/updateConfig.ts @@ -91,7 +91,7 @@ Set \`commit\` or \`pr\` to empty string \`""\` to hide that attribution. } } \`\`\` -Plugin syntax: \`plugin-name@source\` where source is \`versperclaw-marketplace\`, \`claude-plugins-official\`, or \`builtin\`. +Plugin syntax: \`plugin-name@source\` where source is \`codev-marketplace\`, \`claude-plugins-official\`, or \`builtin\`. ### Other Settings - \`language\`: Preferred response language (e.g., "japanese") @@ -109,7 +109,7 @@ Plugin syntax: \`plugin-name@source\` where source is \`versperclaw-marketplace\ const HOOKS_DOCS = `## Hooks Configuration -Hooks run commands at specific points in VersperClaw's lifecycle. +Hooks run commands at specific points in Codev's lifecycle. ### Hook Structure \`\`\`json @@ -306,7 +306,7 @@ Given an event, matcher, target file, and desired behavior, follow this flow. Ea const UPDATE_CONFIG_PROMPT = `# Update Config Skill -Modify VersperClaw configuration by updating settings.json files. +Modify Codev configuration by updating settings.json files. ## When Hooks Are Required (Not Memory) @@ -446,7 +446,7 @@ export function registerUpdateConfigSkill(): void { registerBundledSkill({ name: 'update-config', description: - 'Use this skill to configure the VersperClaw harness via settings.json. Automated behaviors ("from now on when X", "each time X", "whenever X", "before/after X") require hooks configured in settings.json - the harness executes these, not Claude, so memory/preferences cannot fulfill them. Also use for: permissions ("allow X", "add permission", "move permission to"), env vars ("set X=Y"), hook troubleshooting, or any changes to settings.json/settings.local.json files. Examples: "allow npm commands", "add bq permission to global settings", "move permission to user settings", "set DEBUG=true", "when claude stops show X". For simple settings like theme/model, use Config tool.', + 'Use this skill to configure the Codev harness via settings.json. Automated behaviors ("from now on when X", "each time X", "whenever X", "before/after X") require hooks configured in settings.json - the harness executes these, not Claude, so memory/preferences cannot fulfill them. Also use for: permissions ("allow X", "add permission", "move permission to"), env vars ("set X=Y"), hook troubleshooting, or any changes to settings.json/settings.local.json files. Examples: "allow npm commands", "add bq permission to global settings", "move permission to user settings", "set DEBUG=true", "when claude stops show X". For simple settings like theme/model, use Config tool.', allowedTools: ['Read'], userInvocable: true, async getPromptForCommand(args) { diff --git a/src/tools/AgentTool/built-in/versperClawGuideAgent.ts b/src/tools/AgentTool/built-in/codevGuideAgent.ts similarity index 84% rename from src/tools/AgentTool/built-in/versperClawGuideAgent.ts rename to src/tools/AgentTool/built-in/codevGuideAgent.ts index 455fa50666c493024323fead391445c40ece58fd..e7d060ccaeeaeae350a98e007eb00a11f81c8ef0 100644 --- a/src/tools/AgentTool/built-in/versperClawGuideAgent.ts +++ b/src/tools/AgentTool/built-in/codevGuideAgent.ts @@ -14,32 +14,32 @@ import type { BuiltInAgentDefinition, } from '../loadAgentsDir.js' -const VERSPER_CLAW_DOCS_MAP_URL = +const CODEV_DOCS_MAP_URL = 'https://code.claude.com/docs/en/claude_code_docs_map.md' const CDP_DOCS_MAP_URL = 'https://platform.claude.com/llms.txt' -export const VERSPER_CLAW_GUIDE_AGENT_TYPE = 'claude-code-guide' +export const CODEV_GUIDE_AGENT_TYPE = 'claude-code-guide' -function getVersperClawGuideBasePrompt(): string { +function getCodevGuideBasePrompt(): string { // Ant-native builds alias find/grep to embedded bfs/ugrep and remove the // dedicated Glob/Grep tools, so point at find/grep instead. const localSearchHint = hasEmbeddedSearchTools() ? `${FILE_READ_TOOL_NAME}, \`find\`, and \`grep\`` : `${FILE_READ_TOOL_NAME}, ${GLOB_TOOL_NAME}, and ${GREP_TOOL_NAME}` - return `You are the VersperClaw guide agent. Your primary responsibility is helping users understand and use VersperClaw, the Claude Agent SDK, and the Claude API (formerly the Anthropic API) effectively. + return `You are the Codev guide agent. Your primary responsibility is helping users understand and use Codev, the Claude Agent SDK, and the Claude API (formerly the Anthropic API) effectively. **Your expertise spans three domains:** -1. **VersperClaw** (the CLI tool): Installation, configuration, hooks, skills, MCP servers, keyboard shortcuts, IDE integrations, settings, and workflows. +1. **Codev** (the CLI tool): Installation, configuration, hooks, skills, MCP servers, keyboard shortcuts, IDE integrations, settings, and workflows. -2. **Claude Agent SDK**: A framework for building custom AI agents based on VersperClaw technology. Available for Node.js/TypeScript and Python. +2. **Claude Agent SDK**: A framework for building custom AI agents based on Codev technology. Available for Node.js/TypeScript and Python. 3. **Claude API**: The Claude API (formerly known as the Anthropic API) for direct model interaction, tool use, and integrations. **Documentation sources:** -- **VersperClaw docs** (${VERSPER_CLAW_DOCS_MAP_URL}): Fetch this for questions about the VersperClaw CLI tool, including: +- **Codev docs** (${CODEV_DOCS_MAP_URL}): Fetch this for questions about the Codev CLI tool, including: - Installation, setup, and getting started - Hooks (pre/post command execution) - Custom skills @@ -95,9 +95,9 @@ function getFeedbackGuideline(): string { return "- When you cannot find an answer or the feature doesn't exist, direct the user to use /feedback to report a feature request or bug" } -export const VERSPER_CLAW_GUIDE_AGENT: BuiltInAgentDefinition = { - agentType: VERSPER_CLAW_GUIDE_AGENT_TYPE, - whenToUse: `Use this agent when the user asks questions ("Can Claude...", "Does Claude...", "How do I...") about: (1) VersperClaw (the CLI tool) - features, hooks, slash commands, MCP servers, settings, IDE integrations, keyboard shortcuts; (2) Claude Agent SDK - building custom agents; (3) Claude API (formerly Anthropic API) - API usage, tool use, Anthropic SDK usage. **IMPORTANT:** Before spawning a new agent, check if there is already a running or recently completed claude-code-guide agent that you can continue via ${SEND_MESSAGE_TOOL_NAME}.`, +export const CODEV_GUIDE_AGENT: BuiltInAgentDefinition = { + agentType: CODEV_GUIDE_AGENT_TYPE, + whenToUse: `Use this agent when the user asks questions ("Can Claude...", "Does Claude...", "How do I...") about: (1) Codev (the CLI tool) - features, hooks, slash commands, MCP servers, settings, IDE integrations, keyboard shortcuts; (2) Claude Agent SDK - building custom agents; (3) Claude API (formerly Anthropic API) - API usage, tool use, Anthropic SDK usage. **IMPORTANT:** Before spawning a new agent, check if there is already a running or recently completed claude-code-guide agent that you can continue via ${SEND_MESSAGE_TOOL_NAME}.`, // Ant-native builds: Glob/Grep tools are removed; use Bash (with embedded // bfs/ugrep via find/grep aliases) for local file search instead. tools: hasEmbeddedSearchTools() @@ -181,7 +181,7 @@ export const VERSPER_CLAW_GUIDE_AGENT: BuiltInAgentDefinition = { // Add the feedback guideline (conditional based on whether user is using 3P services) const feedbackGuideline = getFeedbackGuideline() - const basePromptWithFeedback = `${getVersperClawGuideBasePrompt()} + const basePromptWithFeedback = `${getCodevGuideBasePrompt()} ${feedbackGuideline}` // If we have any context to add, append it to the base system prompt diff --git a/src/tools/AgentTool/builtInAgents.ts b/src/tools/AgentTool/builtInAgents.ts index 1f74dafdc8699a38b5dd86940f97bea09334cd31..e36f73dcd11adf1b5102f7de60fa878ffdd2d12a 100644 --- a/src/tools/AgentTool/builtInAgents.ts +++ b/src/tools/AgentTool/builtInAgents.ts @@ -2,7 +2,7 @@ import { feature } from 'bun:bundle' import { getIsNonInteractiveSession } from '../../bootstrap/state.js' import { getFeatureValue_CACHED_MAY_BE_STALE } from '../../services/analytics/growthbook.js' import { isEnvTruthy } from '../../utils/envUtils.js' -import { VERSPER_CLAW_GUIDE_AGENT } from './built-in/versperClawGuideAgent.js' +import { CODEV_GUIDE_AGENT } from './built-in/codevGuideAgent.js' import { EXPLORE_AGENT } from './built-in/exploreAgent.js' import { GENERAL_PURPOSE_AGENT } from './built-in/generalPurposeAgent.js' import { PLAN_AGENT } from './built-in/planAgent.js' @@ -73,7 +73,7 @@ export function getBuiltInAgents(): AgentDefinition[] { process.env.CLAUDE_CODE_ENTRYPOINT !== 'sdk-cli' if (isNonSdkEntrypoint) { - agents.push(VERSPER_CLAW_GUIDE_AGENT) + agents.push(CODEV_GUIDE_AGENT) } if (isVerificationAgentEnabled()) { diff --git a/src/tools/DebugSessionTool.ts b/src/tools/DebugSessionTool.ts index c280e4ce5f20135aec0d7d60dc08323cecd2f67e..aeac0df6bf06915e8918b8e9e703e4ae6b38fa4d 100644 --- a/src/tools/DebugSessionTool.ts +++ b/src/tools/DebugSessionTool.ts @@ -1,5 +1,5 @@ /** - * DebugSessionTool — manage the .versperclaw-debug runtime debugging directory. + * DebugSessionTool — manage the .codev-debug runtime debugging directory. * * Ported from Openclaude's DebugSessionTool. * Used by /debug to manage log sessions, separators, tail-reading, and cleanup. @@ -13,7 +13,7 @@ import { lazySchema } from '../utils/lazySchema.js' import { jsonStringify } from '../utils/slowOperations.js' export const DEBUG_SESSION_TOOL_NAME = 'DebugSession' -const DEBUG_SESSION_DIR = '.versperclaw-debug' +const DEBUG_SESSION_DIR = '.codev-debug' const DEBUG_SESSION_LOG_FILE = 'debug.log' const DEBUG_SESSION_STATE_FILE = 'state' @@ -171,17 +171,17 @@ export const DebugSessionTool = buildTool({ maxResultSizeChars: 200_000, strict: true, async description() { - return 'Manage the fixed .versperclaw-debug runtime debugging directory, log separators, log reading, and cleanup.' + return 'Manage the fixed .codev-debug runtime debugging directory, log separators, log reading, and cleanup.' }, async prompt() { return `Use ${DEBUG_SESSION_TOOL_NAME} only during /debug runtime debugging. Actions: -- init: create .versperclaw-debug/, reset debug.log, and reset the run counter. +- init: create .codev-debug/, reset debug.log, and reset the run counter. - begin_run: append a RUN #N separator before reproducing the bug. - begin_verify: append a VERIFY separator before validating a fix. - read_log: read the tail of debug.log. -- cleanup: delete .versperclaw-debug/ after all DEBUG PROBE blocks have been removed from source files.` +- cleanup: delete .codev-debug/ after all DEBUG PROBE blocks have been removed from source files.` }, get inputSchema(): InputSchema { return inputSchema() diff --git a/src/tools/FriendEmotionTool.ts b/src/tools/FriendEmotionTool.ts index eb0c8a4ce2a153f50f7277e81aca47d78307d8cb..2c461e9665f1bf8007dac9e110cf904cbe701c6c 100644 --- a/src/tools/FriendEmotionTool.ts +++ b/src/tools/FriendEmotionTool.ts @@ -2,7 +2,7 @@ * FriendEmotionTool — VRM avatar emotion control for Friend desktop pet. * * Allows the LLM to set the VRM avatar's facial expression and adjust - * its own mood index. Native VersperClaw tool. + * its own mood index. Native Codev tool. */ import { z } from 'zod'; import { buildTool, type ToolDef } from '../Tool.js'; diff --git a/src/tools/ImageShowTool/ImageShowTool.tsx b/src/tools/ImageShowTool/ImageShowTool.tsx index c131e0f1e476becaa96925518966695a87377e89..f1261b00c46761be2d372147177975bc55e39330 100644 --- a/src/tools/ImageShowTool/ImageShowTool.tsx +++ b/src/tools/ImageShowTool/ImageShowTool.tsx @@ -228,7 +228,7 @@ export const ImageShowTool = buildTool({ } else { try { const response = await fetch(normalizedUrl, { - headers: { 'User-Agent': 'Mozilla/5.0 (compatible; VersperClaw/1.0)' }, + headers: { 'User-Agent': 'Mozilla/5.0 (compatible; Codev/1.0)' }, redirect: 'follow', }) if (response.ok) { diff --git a/src/tools/WebFetchTool/WebFetchTool.ts b/src/tools/WebFetchTool/WebFetchTool.ts index 68a72cdad4497760d8bb10370471e3c9a8c340df..f887a3cb9d2e133e4ec52c1228bead11c12b3af2 100644 --- a/src/tools/WebFetchTool/WebFetchTool.ts +++ b/src/tools/WebFetchTool/WebFetchTool.ts @@ -56,9 +56,9 @@ export const WebFetchTool = buildTool({ const { url } = input as { url: string } // 类型断言 try { const hostname = new URL(url).hostname - return `VersperClaw wants to fetch content from ${hostname}` // 用户提示 + return `Codev wants to fetch content from ${hostname}` // 用户提示 } catch { - return `VersperClaw wants to fetch content from this URL` + return `Codev wants to fetch content from this URL` } }, userFacingName() { diff --git a/src/tools/WebSearchTool/prompt.ts b/src/tools/WebSearchTool/prompt.ts index f754198e3bdebf0d3cc39e0a84fd9a8ca2f794da..8e8e022962c8600d0a485c35e38afbbff637fe01 100644 --- a/src/tools/WebSearchTool/prompt.ts +++ b/src/tools/WebSearchTool/prompt.ts @@ -6,7 +6,7 @@ export function getWebSearchPrompt(): string { const currentMonthYear = getLocalMonthYear() return ` -- Allows VersperClaw to search the web using a local SearXNG search engine or Tavily cloud search (when TAVILY_API_KEY is configured) and use the results to inform responses +- Allows Codev to search the web using a local SearXNG search engine or Tavily cloud search (when TAVILY_API_KEY is configured) and use the results to inform responses - Provides up-to-date information for current events, technical documentation, and recent data - Returns structured search results including titles, URLs, and snippets - Works with all AI providers including local models diff --git a/src/tools/shared/spawnMultiAgent.ts b/src/tools/shared/spawnMultiAgent.ts index ae0dd8fbd9ea989e059ec42b99bcdc7e4fa4de77..deb416a0b8722965cf5a38c71ea81c3a5f92d153 100644 --- a/src/tools/shared/spawnMultiAgent.ts +++ b/src/tools/shared/spawnMultiAgent.ts @@ -190,7 +190,7 @@ async function ensureSession(sessionName: string): Promise { /** * Resolves the real executable path for the current process. * In bun-compiled mode, process.execPath returns a bunfs virtual path - * (e.g., /$bunfs/root/VersperClaw). Uses /proc/self/exe on Linux to + * (e.g., /$bunfs/root/Codev). Uses /proc/self/exe on Linux to * resolve the real binary path so spawned tmux panes can find it. */ function resolveRealExecPath(): string { diff --git a/src/types/textInputTypes.ts b/src/types/textInputTypes.ts index 514051cf8a705847b6cb3e00e6106a797f577ee1..50f4513ade8bb02ccb43af432ae7d753c92964bb 100644 --- a/src/types/textInputTypes.ts +++ b/src/types/textInputTypes.ts @@ -358,7 +358,7 @@ export type QueuedCommand = { /** * When set, completely replaces the default system prompt for this query. * Used by Friend mode to use ONLY the persona prompt instead of the full - * VersperClaw CLI system prompt. + * Codev CLI system prompt. */ overrideSystemPrompt?: string } diff --git a/src/utils/desktopBundledCli.ts b/src/utils/desktopBundledCli.ts index a76f2008af1d060459ff2fd0a80d8b98873e4a7e..5cce5f24f1246c072fc6cb32c280828f939bd5a5 100644 --- a/src/utils/desktopBundledCli.ts +++ b/src/utils/desktopBundledCli.ts @@ -25,7 +25,7 @@ export function resolveBundledCliPathFromExecPath( } // If execPath points to an existing regular file, it IS the CLI binary - // (handles standalone compiled binaries like VersperClaw, cli, etc.) + // (handles standalone compiled binaries like Codev, cli, etc.) if (existsAndIsFile(execPath)) { return execPath } diff --git a/src/utils/gracefulShutdown.ts b/src/utils/gracefulShutdown.ts index f984fe5716f77d45bc041bee6c10e8ad77da1a35..4c26097b67317f64b77c58914ed7e75e429082de 100644 --- a/src/utils/gracefulShutdown.ts +++ b/src/utils/gracefulShutdown.ts @@ -173,7 +173,7 @@ function printResumeHint(): void { writeSync( 1, chalk.dim( - `\nResume this session with:\nVersperClaw --resume ${resumeArg}\n`, + `\nResume this session with:\nCodev --resume ${resumeArg}\n`, ), ) resumeHintPrinted = true diff --git a/src/utils/imageUrlCache.ts b/src/utils/imageUrlCache.ts index 2b632a1f1fcd9bdcf9c4e708d865e6978df5a7db..a2e9668169d46ae56144c079127c5169c68cd90f 100644 --- a/src/utils/imageUrlCache.ts +++ b/src/utils/imageUrlCache.ts @@ -124,7 +124,7 @@ export async function downloadImage(url: string): Promise { headers: { // Some image hosts block requests without a browser-like User-Agent 'User-Agent': - 'Mozilla/5.0 (compatible; VersperClaw/1.0; +https://versperai.dev)', + 'Mozilla/5.0 (compatible; Codev/1.0; +https://chenbhao.dev)', }, // Follow up to 5 redirects (e.g. Wikimedia CDN redirects) redirect: 'follow', diff --git a/src/utils/logoV2Utils.ts b/src/utils/logoV2Utils.ts index cf7e1b4865837ae2f463e4e86a497708a3fd172b..dedf3a32f150741036c84c95d9b9249489340af4 100644 --- a/src/utils/logoV2Utils.ts +++ b/src/utils/logoV2Utils.ts @@ -251,7 +251,7 @@ export function getLogoDisplayData(): { const version = process.env.DEMO_VERSION ?? MACRO.VERSION const serverUrl = getDirectConnectServerUrl() const displayPath = process.env.DEMO_VERSION - ? '/code/versperclaw' + ? '/code/codev' : getDisplayPath(getCwd()) const cwd = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, '')}` diff --git a/src/utils/permissions/yolo-classifier-prompts/auto_mode_system_prompt.txt b/src/utils/permissions/yolo-classifier-prompts/auto_mode_system_prompt.txt index 2be7ab337976bbc70b6392cc6eb50ae83ae9850b..c4abab9e87af4b28b8a69cf66494d081be0e26ae 100644 --- a/src/utils/permissions/yolo-classifier-prompts/auto_mode_system_prompt.txt +++ b/src/utils/permissions/yolo-classifier-prompts/auto_mode_system_prompt.txt @@ -1,4 +1,4 @@ -You are an automated security classifier for VersperClaw, an AI coding assistant that runs in users' terminals. Your job is to decide whether each tool call the agent wants to make should be ALLOWED (auto-approved) or BLOCKED (requires explicit human confirmation). +You are an automated security classifier for Codev, an AI coding assistant that runs in users' terminals. Your job is to decide whether each tool call the agent wants to make should be ALLOWED (auto-approved) or BLOCKED (requires explicit human confirmation). You receive a transcript of the conversation so far (user messages and previous tool calls) followed by the new action the agent wants to take. You must classify that single new action. diff --git a/src/utils/releaseNotes.ts b/src/utils/releaseNotes.ts index 91676e22dec44b57e166d6c66f310eea42ff8be3..4d95093f191717434f00c5b1fdbffe79a93ec0b1 100644 --- a/src/utils/releaseNotes.ts +++ b/src/utils/releaseNotes.ts @@ -26,9 +26,9 @@ const MAX_RELEASE_NOTES_SHOWN = 5 * 3. Next time the user starts Claude, the cached changelog is available immediately */ export const CHANGELOG_URL = - 'https://github.com/versperai/VersperClaw/releases' + 'https://github.com/chenbhao/Codev/releases' const RAW_CHANGELOG_URL = - 'https://api.github.com/repos/versperai/VersperClaw/releases' + 'https://api.github.com/repos/chenbhao/Codev/releases' /** * Get the path for the cached changelog file. @@ -91,7 +91,7 @@ export async function fetchAndStoreChangelog(): Promise { } const response = await axios.get(RAW_CHANGELOG_URL, { - headers: { 'User-Agent': 'VersperClaw' }, + headers: { 'User-Agent': 'Codev' }, }) if (response.status === 200) { const releases = response.data as Array<{ diff --git a/src/utils/swarm/spawnUtils.ts b/src/utils/swarm/spawnUtils.ts index 3137a3ce8f59eaa2f936ca9028177b92049387e5..84af30a47fad17b40bc2caf2c82fe37df1c8b09d 100644 --- a/src/utils/swarm/spawnUtils.ts +++ b/src/utils/swarm/spawnUtils.ts @@ -20,7 +20,7 @@ import { TEAMMATE_COMMAND_ENV_VAR } from './constants.js' * Resolves the real executable path for the current process. * * In bun-compiled mode, process.execPath may return a bunfs virtual path - * (e.g., /$bunfs/root/VersperClaw) that only exists within the bun runtime. + * (e.g., /$bunfs/root/Codev) that only exists within the bun runtime. * When a tmux pane tries to execute this path in a regular shell, it fails * with "No such file or directory". * diff --git a/src/utils/terminalImage.ts b/src/utils/terminalImage.ts index 755eeed7ae229a9754475a1a053cefed5a4bf4e2..d48562d1d7a0ac99eca47bd27f2860d2cc30265a 100644 --- a/src/utils/terminalImage.ts +++ b/src/utils/terminalImage.ts @@ -174,7 +174,7 @@ export async function renderImageWithTimg( const cols = columns ?? process.stdout.columns ?? 80 const termRows = rows ?? process.stdout.rows ?? 40 - const tmpDir = mkdtempSync(join(tmpdir(), 'versperclaw-timg-')) + const tmpDir = mkdtempSync(join(tmpdir(), 'codev-timg-')) const ext = format === 'jpeg' ? 'jpg' : format const tmpFile = join(tmpDir, `image.${ext}`) let result: string | null = null @@ -255,7 +255,7 @@ export function getImageRowsCount( const cols = columns ?? process.stdout.columns ?? 80 const termRows = process.stdout.rows ?? 40 const maxRows = Math.max(10, Math.floor(termRows * 0.5)) - const tmpDir = mkdtempSync(join(tmpdir(), 'versperclaw-timg-rows-')) + const tmpDir = mkdtempSync(join(tmpdir(), 'codev-timg-rows-')) const ext = format === 'jpeg' ? 'jpg' : format const tmpFile = join(tmpDir, `image.${ext}`) @@ -310,7 +310,7 @@ export function renderImageWithTimgSync( const cols = columns ?? process.stdout.columns ?? 80 const termRows = rows ?? process.stdout.rows ?? 40 const maxRows = Math.max(10, Math.floor(termRows * 0.5)) - const tmpDir = mkdtempSync(join(tmpdir(), 'versperclaw-timg-')) + const tmpDir = mkdtempSync(join(tmpdir(), 'codev-timg-')) const ext = format === 'jpeg' ? 'jpg' : format const tmpFile = join(tmpDir, `image.${ext}`) let result: string | null = null diff --git a/src/utils/theme.ts b/src/utils/theme.ts index 0681df53571021aeb8c42e92978022b78680c6ba..25835a68ccd05bc6fdfe5fd5c128d640cac1618f 100644 --- a/src/utils/theme.ts +++ b/src/utils/theme.ts @@ -117,7 +117,7 @@ const lightTheme: Theme = { autoAccept: 'rgb(135,0,255)', // Electric violet bashBorder: 'rgb(255,0,135)', // Vibrant pink claude: 'rgb(215,119,87)', // Claude orange - startupAccent: 'rgb(124,176,133)', // VersperClaw pastel green + startupAccent: 'rgb(124,176,133)', // Codev pastel green claudeShimmer: 'rgb(245,149,117)', // Lighter claude orange for shimmer effect claudeBlue_FOR_SYSTEM_SPINNER: 'rgb(87,105,247)', // Medium blue for system spinner claudeBlueShimmer_FOR_SYSTEM_SPINNER: 'rgb(117,135,255)', // Lighter blue for system spinner shimmer @@ -364,7 +364,7 @@ const lightDaltonizedTheme: Theme = { autoAccept: 'rgb(135,0,255)', // Electric violet bashBorder: 'rgb(0,102,204)', // Blue instead of pink claude: 'rgb(255,153,51)', // Orange adjusted for deuteranopia - startupAccent: 'rgb(124,176,133)', // VersperClaw pastel green + startupAccent: 'rgb(124,176,133)', // Codev pastel green claudeShimmer: 'rgb(255,183,101)', // Lighter orange for shimmer effect claudeBlue_FOR_SYSTEM_SPINNER: 'rgb(51,102,255)', // Bright blue for system spinner claudeBlueShimmer_FOR_SYSTEM_SPINNER: 'rgb(101,152,255)', // Lighter bright blue for system spinner shimmer @@ -446,7 +446,7 @@ const darkTheme: Theme = { autoAccept: 'rgb(175,135,255)', // Electric violet bashBorder: 'rgb(253,93,177)', // Bright pink claude: 'rgb(215,119,87)', // Claude orange - startupAccent: 'rgb(184,225,174)', // VersperClaw pastel green + startupAccent: 'rgb(184,225,174)', // Codev pastel green claudeShimmer: 'rgb(235,159,127)', // Lighter claude orange for shimmer effect claudeBlue_FOR_SYSTEM_SPINNER: 'rgb(147,165,255)', // Blue for system spinner claudeBlueShimmer_FOR_SYSTEM_SPINNER: 'rgb(177,195,255)', // Lighter blue for system spinner shimmer @@ -528,7 +528,7 @@ const darkDaltonizedTheme: Theme = { autoAccept: 'rgb(175,135,255)', // Electric violet bashBorder: 'rgb(51,153,255)', // Bright blue claude: 'rgb(255,153,51)', // Orange adjusted for deuteranopia - startupAccent: 'rgb(184,225,174)', // VersperClaw pastel green + startupAccent: 'rgb(184,225,174)', // Codev pastel green claudeShimmer: 'rgb(255,183,101)', // Lighter orange for shimmer effect claudeBlue_FOR_SYSTEM_SPINNER: 'rgb(153,204,255)', // Light blue for system spinner claudeBlueShimmer_FOR_SYSTEM_SPINNER: 'rgb(183,224,255)', // Lighter blue for system spinner shimmer