CometixCode
English | 简体中文
一个基于终端的 AI 编程助手,用 Rust 编写,是 Anthropic Claude Code 的 1:1 重新实现。
非官方项目,与 Anthropic 无关联。 这是一个通过研读已发布的 Claude Code CLI 构建的独立重实现项目。“Claude” 和 “Claude Code” 是 Anthropic, PBC 的商标。本项目未获得 Anthropic 的任何认可或支持。
项目简介
Claude Code 的终端 UI 基于 TypeScript 的 React + Ink 构建。CometixCode 则在 Rust 上基于 iocraft 复现它——iocraft 是一个 React 风格的保留模式 TUI 框架,在结构上与 Ink 对应:组件、hooks、声明式元素一应俱全。该移植逐文件跟随原版实现,而非重新发明架构:TypeScript 组件映射为 Rust 组件,hook 对应 hook,所有有意的偏离都会在源码中的相应位置记录说明。
项目基于 [CometixTUI] 构建,这是 iocraft 的一个 fork,包含本次移植所需的底层能力(行级 diff、事件传播、SIGCONT 自恢复、IME 光标、括号粘贴、网格布局)。
项目仍在开发中。交互循环、工具执行、权限、MCP 和斜杠命令的大部分功能已实现,其他部分尚在进行中。
构建
前提条件
Rust 1.88+(edition 2024)。除此之外无其他依赖——不需要系统库,也不需要 pkg-config。Unicode 分词与排序基于 ICU4X 实现,其数据已编译进二进制文件。
构建与运行
cargo build --release
cargo run --release
生成的二进制文件为 cometix。
交叉编译 Windows 版本
rustup target add x86_64-pc-windows-gnu
cargo build --release --target x86_64-pc-windows-gnu
PATH 中需要安装 mingw-w64 工具链:有四个依赖项需要编译 C 或汇编代码(onig_sys、ring、tree-sitter、tree-sitter-bash)。它们均采用静态链接,因此生成的 .exe 无需附带任何 DLL。
ripgrep
文件搜索通过调用外部 rg 命令实现。Claude Code 在其 npm 包中内置了打包好的 ripgrep 并执行该路径;CometixCode 保持了相同的结构——ripgrep 二进制是外部资产,从不编译进可执行文件。
查找顺序:
- 可执行文件旁的
vendor/ripgrep/<arch>-<os>/rg(发布归档) - 源码树中的
vendor/ripgrep/<arch>-<os>/rg(开发环境) - 主机
PATH上的rg
因此,既可以在 vendor/ripgrep/ 下放置指定版本的 ripgrep,也可以直接安装 rg。/doctor 命令会报告当前使用的是哪一个。设置 USE_BUILTIN_RIPGREP=0 可强制使用主机上的二进制。
测试
just test # 通过 cargo-nextest 运行完整测试套件——质量门禁
just t <pattern> # 子串过滤
just check # 仅类型/借用检查,不进行链接
cargo test 不是本 crate 的有效质量门禁。它会在单个进程中以线程方式运行整个测试套件,而本代码库存在进程级状态(环境变量、OnceLock 缓存),会导致状态在测试之间泄漏。just test 在 cargo-nextest 下运行,为每个测试提供独立进程,并固定测试本应继承的主机状态。justfile 文件头部解释了这些措施背后的考量。
社区
致谢
- [ClaudeCodeRev] —— 本移植所依据的分析成果。此处的每个行为细节都来自通过它对 Claude Code 的逆向研究。
- [CometixTUI] —— 本项目所基于的 TUI 框架,是 iocraft 的一个 fork,包含移植所需的与 Ink 对齐的底层能力。
- [marked-rs] ——
marked的 Rust 移植版,Claude Code 使用它解析 Markdown。 - [anthropic-sdk-rs] ——
@anthropic-ai/sdk的 Rust 移植版,用作 API 客户端。 - [nucleo] —— 来自 Helix 编辑器项目,是文件、命令和 agent 补全背后的模糊匹配器。