内容
<div align="center">
<img src="https://s3.whykusanagi.xyz/optimized_assets/hypnosis_expression_trans_ghub.png" alt="Celeste - Corrupted AI Assistant" width="300"/>
<sub>Character artwork by [いかわさ (ikawasa23)](https://x.com/ikawasa23)</sub>
# 👁️ Celeste CLI - 交互式 AI 助手
**一款具有腐朽美学的溢价命令行界面,适用于 CelesteAI**
[](https://golang.org/)
[](LICENSE)
[](https://github.com/charmbracelet/bubbletea)
*使用 Charm's Bubble Tea 构建,提供无闪烁、现代化的终端体验*
</div>
---
## ✨ 什么是 Celeste CLI?
Celeste CLI 是一个**全功能的独立代理开发工具**,具有自己的个性,特点包括:
- 🎨 **溢价 TUI** - 无闪烁渲染,腐朽主题美学
- 🔮 **44 个内置工具** - 文件 I/O、shell、网络搜索、代码图、代码审查、集合搜索、git、加密、子代理编排等
- 📖 **`.grimoire` 项目上下文** - 个性主题项目配置文件,自动发现和自动初始化
- 🧠 **代码图 + 语义搜索** - MinHash + BM25 融合排名,LSH 带状表用于亚线性查询,结构化重排;tree-sitter TypeScript 解析,用于准确的调用图边;嵌入式 celeste-stopwords v1.0.0 噪声过滤器
- 🔍 **基于图的 code review** - 结构分析检测存根、延迟重定向、占位符、错误吞咽和硬编码值
- 🔌 **直接 Codegraph MCP 工具** - `celeste_index`、`celeste_code_search`、`celeste_code_review`、`celeste_code_graph`、`celeste_code_symbols` 直接从缓存图提供(无需聊天-LLM 往返,无 `max_tokens` 天花板,流式进度通知)
- 🔒 **权限系统** - 多层允许/拒绝/询问规则,带有模式匹配
- 💾 **会话持久性** - JSONL 自动保存、恢复、文件检查点,带有过期检测和恢复
- 🌐 **多提供商** - Grok/xAI(默认)、OpenAI、Anthropic(原生 SDK)、Gemini、Venice.ai、Vertex AI、OpenRouter、Sakana AI
- 💰 **成本跟踪** - 按模型定价,实时会话成本显示
- 🪝 **钩子** - `.grimoire` 中定义的预/后工具执行钩子
- 🧠 **扩展思考** - 利用推理代币(Claude、Gemini、Grok)带有 `/effort` 控制
- 🖼️ **图像输入** - 多模态支持视觉能力模型
- 🎭 **Celeste 个性** - 嵌入式 AI 个性,带有传记准确的回应
- 🔗 **区块链工具** - IPFS、Alchemy、钱包安全监控
### 三种运行时模式
| 模式 | 命令 | 功能 |
|------|---------|-------------|
| **聊天** | `celeste chat`(默认) | 交互式聊天,自动循环工具调用(50 次安全上限)。 |
| **代理** | `/agent <goal>`(在 TUI 中)或 `celeste agent --goal "..."` | 完全自主的多轮代理,带有规划、文件 I/O、检查点和恢复。对于长期任务。 |
| **编排器** | `/orchestrate <goal>`(在 TUI 中) | 代理运行时带有第二个审查模型,批判和辩论输出。对于高质量的交付成果。 |
> **聊天 vs 代理**:聊天是交互式的,带有工具自动循环 - 您引导对话,而 Celeste 根据需要调用工具。代理是一个单独的自主运行时,带有自己的回合循环、规划阶段、检查点存储和工作区感知。编排器在代理之上添加了一个审查模型。
---
## 🚀 快速开始
### 快速安装(推荐)
如果您已安装 Go 1.23+:
```bash
go install github.com/whykusanagi/celeste-cli/cmd/celeste@latest
```
`celeste` 二进制文件将安装到 `$GOPATH/bin`(或默认的 `~/go/bin`)。
**要求:**
- Go 1.26.0 或更高版本
- `$GOPATH/bin`(或 `~/go/bin`)在您的 PATH 中
要添加到 PATH:
```bash
export PATH="$PATH:$(go env GOPATH)/bin"
```
### 手动安装
或者,从源代码构建:
```bash
# 克隆仓库
git clone https://github.com/whykusanagi/celeste-cli.git
cd celeste-cli
# 构建并安装到 ~/.local/bin(处理 macOS 代码签名)
make install
```
> **macOS 注意:** 不要将二进制文件复制到现有的 `~/.local/bin/celeste` 上 - 在 Apple Silicon 上,这会使 ad-hoc 代码签名无效,内核将在启动时 SIGKILL 它。`make install` 直接构建到目标并重新签名。如果您手动安装,请直接构建到目标并重新签名:
>
> ```bash
> go build -o ~/.local/bin/celeste ./cmd/celeste
> codesign --force --sign - ~/.local/bin/celeste # 仅限 macOS
> ```
### 首次运行
**xAI/Grok(默认 - 推荐):**
```bash
celeste config --set-key YOUR_XAI_KEY
celeste chat
```
**使用集合(RAG):**
```bash
celeste config --set-key YOUR_XAI_KEY
celeste config --set-management-key YOUR_XAI_MANAGEMENT_KEY
celeste collections list # 查看可用集合
celeste collections enable <id> # 启用聊天
celeste chat
```
**OpenAI:**
```bash
celeste config --init openai
celeste -config openai config --set-key YOUR_OPENAI_KEY
celeste -config openai chat
```
**Sakana(Fugu):**
```bash
celeste config --init sakana
celeste -config sakana config --set-url https://api.sakana.ai/v1 --set-key YOUR_SAKANA_KEY --set-model fugu
celeste -config sakana chat
```
从 Fugu 安装 (`curl -fsSL https://sakana.ai/fugu/install | bash`) 或您的 Sakana 帐户中获取密钥。使用 `--set-model fugu-ultra` 以获取更重的多代理变体。
**其他提供商:** `celeste config --init <name>` 其中 name 为:`grok`、`openai`、`venice`、`elevenlabs`、`sakana`
### 项目设置
当您进入项目目录时,Celeste 自动初始化:
```bash
cd your-project
celeste chat
# 创建 .grimoire(项目上下文),索引代码图,加载记忆
```
或手动:
```bash
celeste init # 创建 .grimoire
celeste index # 构建代码图
celeste index status # 检查图统计信息
```
---
## 🔒 安全与验证
所有 Celeste CLI 版本都使用 GPG 进行加密签名,以确保真实性和完整性。
### 快速验证
在下载二进制文件之前,请验证其真实性:
```bash
# 下载验证脚本
curl -O https://raw.githubusercontent.com/whykusanagi/celeste-cli/main/scripts/verify.sh
chmod +x verify.sh
# 验证下载
./verify.sh celeste-linux-amd64.tar.gz
```
### 手动验证
有关手动验证或更多详细信息,请参阅完整的 [验证指南](VERIFY.md)。
**发布签名:**
- 所有提交都使用 GPG 签名
- 所有发布版本都包含 GPG 签名
- 校验和使用 GPG 签名
- 完整的构建元数据清单
**PGP 密钥信息:**
- **密钥 ID**:`875849AB1D541C55`
- **指纹**:`9404 90EF 09DA 3132 2BF7 FD83 8758 49AB 1D54 1C55`
- **Keybase**:[@whykusanagi](https://keybase.io/whykusanagi)
- **GitHub**:[whykusanagi.gpg](https://github.com/whykusanagi.gpg)
**导入密钥** - 使用存储库副本;它带有发布版本签名的子密钥:
```bash
# 从此存储库(推荐 - 完整的密钥,带有签名子密钥)
curl -O https://raw.githubusercontent.com/whykusanagi/celeste-cli/main/whykusanagi.asc
gpg --import whykusanagi.asc
# 交叉检查主要指纹与 GitHub 提供的信息:
gpg --fingerprint 940490EF09DA31322BF7FD83875849AB1D541C55
# → 9404 90EF 09DA 3132 2BF7 FD83 8758 49AB 1D54 1C55
```
有关安全问题,请参阅我们的 [安全政策](SECURITY.md) 或联系 security@whykusanagi.xyz。
---
## 📚 目录
- [安装](#-快速开始)
- [安全与验证](#-安全与验证)
- [功能](#-功能)
- [工具系统(44 个工具)](#-工具系统44-个工具)
- [Claude 代码集成](#-claude-代码集成)
- [比较](#-如何比较celeste)
- [LLM 提供商兼容性](#-llm-提供商兼容性)
- [函数调用流程](#-函数调用流程-mermaid-图表)
- [配置](#%EF%B8%8F-配置)
- [用法](#-用法)
- [架构](#%EF%B8%8F-架构)
- [文档](#-文档)
- [贡献](#-贡献)
---
## 🎯 功能
### 交互式 TUI 模式
- **无闪烁渲染** - 双缓冲 Bubble Tea 渲染(无屏幕撕裂)
- **可滚动聊天** - PgUp/PgDown 导航聊天历史记录
- **输入历史记录** - 使用箭头键浏览以前的消息(类似 bash 历史记录)
- **技能面板** - 实时技能执行状态,带有恶魔眼动画
- **腐朽主题** - Lip Gloss 样式,带有粉色/紫色深渊美学
- **实时流媒体 + 腐朽动画** - 逐代币流媒体,带有腐朽短语的 typing 指针
- **Markdown 渲染** - 使用 glamour 的 markdown,带有腐朽主题(代码块、表格、标题、粗体)
### 工具系统(v1.10)
**44 个内置工具**,由 AI 函数调用支持:
- 开发工具(bash、读取/写入/修补文件、搜索、列出文件)
- 代码图(语义搜索,带有 MinHash+BM25 融合、代码审查、符号分析、tree-sitter TypeScript 解析)
- 直接 Codegraph MCP 工具 (`celeste_index`、`celeste_code_search`、`celeste_code_review`、`celeste_code_graph`、`celeste_code_symbols` - 直接提供,无需聊天-LLM 往返)
- Git(状态、日志)
- 网络(搜索、获取)
- 信息服务(天气、货币、Twitch、YouTube)
- 实用工具(转换、编码、生成器、二维码)
- 生产力(提醒、笔记、待办事项跟踪)
- 区块链(IPFS、Alchemy、钱包安全)
- 子代理编排 (`spawn_agent`、`post_message`)
[查看完整的工具列表](#-工具系统44-个工具)
### 集合支持(xAI RAG)
- **上传自定义文档** - 使用您自己的文档创建知识库
- **语义搜索** - Celeste 在回答问题时自动搜索集合
- **交互式 TUI** - 在聊天中使用 `/collections` 命令管理集合
- **CLI 管理** - 从命令行创建、上传、启用/禁用集合
[查看集合指南](docs/COLLECTIONS.md) 以了解设置和使用方法。
### 工具系统(v1.7)
- **MCP(模型上下文协议)支持**,适用于外部工具服务器
- **权限系统**,带有可配置的允许/拒绝规则
- **流式工具执行**,带有并发调度
- **自动上下文窗口管理**
### 会话管理
- **对话持久性** - 无缝自动保存和恢复会话
- **消息历史记录** - 完整的对话日志,带有时间戳
- **会话列表** - 浏览并加载以前的会话 ID
- **会话清除** - 需要时批量删除会话
### 多提供商支持(8 个提供商)
- ✅ **Grok/xAI**(grok-4.20-0309-non-reasoning)- **默认** - 可靠的工具调用,无推理代币燃烧,从不路由到成本禁止的 grok-4.3 • 代币跟踪 ✓
- ✅ **OpenAI**(gpt-4.1-mini,gpt-4.1)- 完整的函数调用,带有流媒体 • 代币跟踪 ✓
- ✅ **Anthropic Claude**(claude-sonnet-4-5)- 原生 SDK,带有提示缓存和扩展思考 • 代币跟踪 ✓
- ✅ **Google Gemini AI**(gemini-2.5-flash)- 简单的 API 密钥,免费层,完整的流媒体 • 代币跟踪 ✓
- ⚠️ **Google Vertex AI**(gemini-2.5-flash)- 企业,需要 GCP 项目 + 账单 • 代币跟踪 ✓
- ✅ **Venice.ai**(venice-uncensored)- NSFW 模式,图像生成/缩放 • 代币跟踪 ✓
- ✅ **OpenRouter**(多提供商)- 并行函数调用支持 • 代币跟踪 ✓
- ✅ **Sakana AI**(fugu,fugu-ultra)- 1M 上下文,OpenAI 兼容的聊天完成,深度推理 • 代币跟踪 ✓
**动态模型选择** - 自动为每个提供商选择最佳的工具调用能力
**能力指示器** - 标题中带有视觉反馈(✓ 技能 / ⚠️ 无技能)
[查看完整兼容性矩阵](#-llm-提供商兼容性)
### 配置
- **基于 JSON 的配置** - 现代 `~/.celeste/config.json` 格式
- **命名配置** - 多配置文件支持(openai、grok、venice 等)
- **技能配置** - 单独的 `skills.json` 用于特定技能的 API 密钥
- **秘密处理** - 单独的 `secrets.json` 以支持向后兼容性
- **个性注入** - 可配置的 Celeste 个性提示
- **环境覆盖** - 环境变量覆盖文件配置
---
## 🔮 工具系统(44 个工具)
Celeste CLI 使用 **OpenAI 兼容的函数调用** 来支持其工具。您不会直接调用工具 - 您自然聊天,AI 决定何时调用它们。
### 开发工具(8 个工具)
| 工具 | 描述 |
|------|-------------|
| **bash** | 在工作区执行 shell 命令 |
| **read_file** | 读取带有检查点的文件 |
| **write_file** | 写入文件,带有快照备份 |
| **patch_file** | 应用目标编辑文件 |
| **list_files** | 列出目录内容,带有 glob 模式 |
| **search** | 使用正则表达式搜索文件内容 |
| **git_status** | 显示工作树状态 |
| **git_log** | 显示提交历史记录 |
### 代码图工具(6 个工具)
| 工具 | 描述 |
|------|-------------|
| **code_search** | 跨所有索引符号的 MinHash 语义搜索 |
| **code_review** | 基于图的 code review(6 类别:存根、延迟重定向、占位符、TODO、错误吞咽、硬编码值) |
| **code_graph** | 查询符号关系和调用链 |
| **code_symbols** | 列出文件或包中的符号 |
| **code_impact** | 爆破半径分析:哪些调用者受到更改符号的影响 |
| **code_snapshot** | 保存和差异图状态以跟踪会话间发生了什么变化 |
> **v1.10 准确性改进:** STUB 检测现在跳过 dunder 方法 (`__init__`, `__lt__`, ...)、`@abstractmethod` 装饰的方法和 `Protocol` / `ABC` / `ABCMeta` 类的方法 - 消除了最大的假阳性类。 带有 `@syntax` 调用和 `@property.setter` 赋值现在被捕获为调用边,产生更准确的影响/调用者计数。
### 子代理编排工具(2 个工具)
| 工具 | 描述 |
|------|-------------|
| **spawn_agent** | 启动一个子代理来处理子任务;支持 DAG 依赖、工作树隔离和后台执行 |
| **post_message** | 将消息发送到另一个子代理的邮箱,元素名称用于松散耦合的协调 |
您永远不会直接调用这些 - 您在聊天时描述多步骤工作,Celeste 决定何时委托。
**`spawn_agent` 参数:
| 参数 | 类型 | 描述 |
|-----------|------|-------------|
| `goal` | 字符串 | **(必填)** 子代理应该实现的目标 |
| `workspace` | 字符串 | 工作目录(默认为当前工作区) |
| `task_id` | 字符串 | 用于 DAG 依赖项引用的唯一 ID |
| `depends_on` | 字符串数组 | 必须在启动此子代理之前完成的任务 ID |
| `max_turns` | 整数 | 最大代理回合(默认 20;提高复杂任务,增加降低简单查找) |
| `isolate_worktree` | 布尔值 | 在自己的 git 工作树中运行,以便并发子代理不会相互冲突于同一文件;合并后返回成功,删除后 |
| `background_after` | 整数 | 秒数,在此之后自动将慢速子代理后台化,以便父级立即继续。结果在 `/agents` 出现时显示。 `0` = 前台/阻塞(默认)。 |
| `persona` | 对象 | 覆盖个性滑块 (`flirt`, `warmth`, `register`, `lewdness`, `r18`) 或加载命名 `preset` |
**`post_message` 参数:
| 参数 | 类型 | 描述 |
|-----------|------|-------------|
| `to` | 字符串 | **(必填)** 接收者元素名称 (`fire`, `water`, `earth`, `light`, `dark`, `wind`, …) |
| `message` | 字符串 | **(必填)** 消息正文,当接收者代理下次启动时传递 |
**TUI 命令:
```
/agents 列出所有已启动的子代理及其状态(等待/运行/完成/失败)
/agents resume <id> 从其最后一个检查点恢复失败的子代理
/agents kill <id|name> 取消特定的正在进行的子代理(按 ID、任务 ID 或屏幕名称,例如 "mizu")
```
**示例 - 使用 DAG 进行并行音频制作:
当您要求 Celeste 制作音频时,带有语音和音效混合在一起,模型会发出如下 DAG:
```json
{ "goal": "generate voice narration", "task_id": "voice" }
{ "goal": "generate SFX layer", "task_id": "sfx" }
{ "goal": "mix voice and SFX tracks", "task_id": "mix", "depends_on": ["voice", "sfx"] }
```
混音器等待两个音频和 SFX 完成,然后开始处理它们的上下文注入结果。
**示例 - 带有工作树的隔离文件编辑:
```json
{ "goal": "refactor auth module", "isolate_worktree": true }
```
子代理在单独的 git 工作树中工作,因此其更改不会与父级或其他同时编辑相同文件的子代理发生冲突。成功后更改会合并回来;无论如何,工作树都会被删除。
**可靠性:** 暂时的 LLM 错误(429 速率限制、5xx、网络丢包)会自动重试,带有指数退火 - 429 重试最多 3 次(2 秒 / 4 秒 / 8 秒),服务器错误最多 2 次(1 秒 / 2 秒),网络错误最多 2 次(1 秒 / 2 秒)。 这适用于主循环和所有子代理。 4xx 错误(除 429 外)立即失败。
### 占卜与娱乐
| 技能 | 描述 | 依赖 |
|-------|-------------|--------------|
| **塔罗牌阅读** | 三张牌或凯尔特十字布局 | 塔罗牌 API(需要身份验证令牌) |
**示例:**
```
您:给我一个塔罗牌阅读
Celeste:*调用塔罗牌阅读技能*
Celeste:您的牌显示... [解释]
```
### 内容与媒体
| 技能 | 描述 | 依赖 |
|-------|-------------|--------------|
| **NSFW 模式** | Venice.ai 无审查回复 | Venice.ai API 密钥 |
| **内容生成** | 平台特定模板(Twitter/TikTok/YouTube/Discord) | 无(LLM 驱动) |
| **图像生成** | Venice.ai 图片创建 | Venice.ai API 密钥 |
**示例:**
```
你:生成一个关于网络安全的推文
Celeste:*调用 generate_content 技能*
Celeste:这是你的推文:[280 个字符的推文,带有钩子]
```
### 信息服务
| 技能 | 描述 | 依赖 |
|-------|-------------|--------------|
| **天气** | 当前天气状况和预报 | wttr.in API(免费,无需密钥) |
| **货币转换器** | 实时汇率 | ExchangeRate-API(免费) |
| **Twitch 直播检查** | 检查主播是否在线 | Twitch API(需要客户端 ID) |
| **YouTube 视频** | 获取频道的最新上传视频 | YouTube Data API(需要密钥) |
**示例:**
```
你:10001 的天气怎么样?
Celeste:*调用 get_weather 技能*
Celeste:纽约市的天气是 45°F,阴天...
```
### 实用工具(9 个技能)
| 技能 | 描述 | 依赖 |
|-------|-------------|--------------|
| **单位转换器** | 长度、重量、温度、体积 | 无(本地计算) |
| **时区转换器** | 在时区之间转换时间 | 无(本地计算) |
| **哈希生成器** | MD5、SHA256、SHA512 | 无(crypto/sha256) |
| **Base64 编码** | 将文本编码为 base64 | 无(encoding/base64) |
| **Base64 解码** | 将 base64 解码为文本 | 无(encoding/base64) |
| **UUID 生成器** | 生成随机 UUID(v4) | 无(google/uuid) |
| **密码生成器** | 安全的随机密码(可定制) | 无(crypto/rand) |
| **二维码生成器** | 从文本/URL 创建二维码 | 无(skip2/go-qrcode) |
**示例:**
```
你:将 100 英里转换为公里
Celeste:*调用 convert_units 技能*
Celeste:100 英里是 160.93 公里
```
### 生产力(5 个技能)
| 技能 | 描述 | 依赖 |
|-------|-------------|--------------|
| **设置提醒** | 创建带有时间戳的提醒 | 本地存储(~/.celeste/reminders.json) |
| **列出提醒** | 查看所有活动提醒 | 本地存储 |
| **保存笔记** | 按名称存储笔记 | 本地存储(~/.celeste/notes.json) |
| **获取笔记** | 检索保存的笔记 | 本地存储 |
| **列出笔记** | 查看所有保存的笔记名称 | 本地存储 |
**示例:**
```
你:提醒我在明天 3 点给妈妈打电话
Celeste:*调用 set_reminder 技能*
Celeste:在 2025 年 12 月 4 日 3:00 PM 设置提醒
你:保存一个名为 groceries 的笔记:牛奶、鸡蛋、面包
Celeste:*调用 save_note 技能*
Celeste:笔记 'groceries' 保存成功!
```
### 技能配置
特定于技能的 API 密钥存储在 `~/.celeste/skills.json` 中:
```json
{
"venice_api_key": "your-venice-key",
"tarot_auth_token": "Basic xxx",
"weather_default_zip_code": "12345",
"twitch_client_id": "your-client-id",
"youtube_api_key": "your-youtube-key"
}
```
**通过 CLI 配置:**
```bash
celeste config --set-venice-key <key>
celeste config --set-weather-zip 12345
celeste config --set-twitch-client-id <id>
celeste config --set-youtube-key <key>
celeste config --set-tarot-token <token>
```
### 🔒 权限门控
Celeste 在 TUI 模式下对每个工具执行运行 **严格的权限门控**。在默认权限模式下:
- **只读工具**(read_file、search、list_files、code_search、git_status 等)自动批准并保持静默。
- **写入/破坏性工具**(write_file、patch_file、bash、spawn_agent 等)暂停并在执行前显示模态窗口。
当出现模态窗口时,按下以下按键之一:
| 键 | 操作 |
|-----|--------|
| `a` | 允许此次调用一次 |
| `A` | 始终允许此工具(将规则持久化到 `~/.celeste/permissions.json`) |
| `d` | 拒绝此次调用 |
| `D` | 始终拒绝此工具(将拒绝规则持久化) |
在无头或非 TUI 环境中,任何触发模态窗口的工具默认被 **拒绝** - 门控不能被静默绕过。
**`/confirm`** - 切换一个互补的 LLM 级别行为:开启时,Celeste 会提出一个纯语言总结它计划做的事情,并在发出写入工具调用前等待你的批准。这是在提示级别,而不是硬模态门控。
```
/confirm # 切换 - Celeste 讲述计划并在写入前等待
```
---
## 🔌 Claude 代码集成
Celeste v1.9.0+ 将代码图暴露为 **一流的 MCP 工具**(无需聊天-LLM 往返,无输出令牌上限,逐字结果)。在每个工作区注册 `celeste serve` 一次,任何 MCP 客户端 - Claude Code、Codex、Cursor 等 - 都可以访问:
- `celeste_index` - `status`、`update`、`rebuild` 操作,带有 `notifications/progress` 流式传输
- `celeste_code_search` - 语义搜索(MinHash Jaccard + BM25 融合 + 结构化重排序)
- `celeste_code_review` - 结构化代码审查发现,以 JSON 形式呈现
- `celeste_code_graph` - 符号调用者、被调用者、引用
- `celeste_code_symbols` - 列出文件或包中的符号
索引是 **显式的**:查询工具永远不会自动重新索引。在代码更改后,调用者调用 `celeste_index { operation: "update" }` 以刷新图。
```bash
# 将 Celeste 添加为 MCP 服务器(每个工作区一次)
claude mcp add celeste celeste serve
```
可选地,安装 [celeste-for-claude](https://github.com/whykusanagi/celeste-for-claude) 配套组件,用于 persona 路由的技能命令包装器(`/celeste-review`、`/celeste-search`、`/celeste-graph`、`/celeste-context`):
```bash
git clone https://github.com/whykusanagi/celeste-for-claude.git
cp celeste-for-claude/skills/*.md ~/.claude/commands/
```
Claude Code 保持控制,Celeste 提供图智能。直接工具适用于工具驱动的工作流程;persona 路由技能是自然语言交互的便捷方式。
---
## 📊 Celeste 比较
| | **Celeste CLI** | **OpenClaw** | **Picobot** | **oh-my-pi** | **gptme** |
|---|---|---|---|---|---|
| **焦点** | 代理编码 | 个人 AI 助手 | 轻量级 AI 机器人 | CLI 编码代理 | CLI 编码代理 |
| **语言** | Go | TypeScript | Go | TS + Rust | Python |
| **部署** | 54MB 二进制,无依赖 | Node.js(~393MB) | 9MB 二进制 | Bun + Rust | pip 包 |
| **RAM** | 低 | 高(Node.js) | ~10MB | 中等 | 中等 |
| **提供商** | 8(原生 + OpenAI 兼容) | OpenAI 主要 | 仅 OpenAI | 6+ | 7+ |
| **工具** | 44 | 许多 | 16 | 许多 | ~10 |
| **代码图** | 是(MinHash) | 否 | 否 | 否 | 否 |
| **代码审查** | 是(6 类别) | 否 | 否 | 否 | 否 |
| **集合/RAG** | 是(xAI) | 否 | 否 | 否 | 是 |
| **MCP** | 服务器 + 客户端 | 部分 | 客户端 | 完整 | 是 |
**Celeste 的独特优势:** 代码图与语义搜索、结构化代码审查、持久项目内存、`.grimoire` 上下文与过时跟踪、具有打字动画的腐蚀美学 UI。没有其他项目将编译二进制 + 代码智能 + MCP 服务器结合起来。
参见 [docs/COMPARISON.md](docs/COMPARISON.md) 以获取详细分析。
---
## 🌐 LLM 提供商兼容性
Celeste CLI 需要 **OpenAI 风格的函数调用** 才能使技能正常工作。并非所有 LLM 提供商都支持此功能。
### ⚠️ 聊天模型 vs 代理模型(阅读这 - 提供商特定陷阱)
普通 **聊天** 与任何模型一起使用。但 **工具/技能、子代理和 `/orchestrate`** 需要一个支持 **函数调用** 的模型 - 并且在 *每个* 提供商中,一些模型支持,而其他模型不支持:
- **Venice.ai** - 按模型变化;Celeste 检查 **实时 Venice 目录**(一些 `*-uncensored` 模型支持工具,一些 `e2ee-*` 模型不支持)
- **OpenRouter** - 许多模型缺乏工具/函数调用支持;Celeste 检查 **实时 OpenRouter 目录**
- **OpenAI** - 旧的/instruct 模型不支持;`gpt-4.1*`/`gpt-4o*` 支持
- **Grok/xAI** - 非推理模型可以技术上调用工具,但在驱动多步骤代理流程方面很弱(它们可能会出现故障,甚至伪造结果,例如声称他们创建了一个子代理,但实际上并没有)
如果您的单个模型不支持(或不能可靠地调用)工具,**聊天看起来很好,但代理模式会中断** - 令人困惑的是,通常表现为幻觉成功而不是出错。
**Celeste 将模型分为两类,以免陷入困境:**
| 字段 | 用于 | 要求 |
|-------|----------|-------------|
| `model` | 聊天、TTS | 任何(廉价或无审查的非工具模型是可以的) |
| `agent_model` | 代理 / `/orchestrate` / 子代理 | **必须支持函数调用**(如果未设置,则默认为 `model`) |
```json
{
"model": "venice-uncensored",
"agent_model": "gpt-4.1-mini"
}
```
Celeste 在代理启动时如果解析的代理模型不支持函数调用,则会打印 **大警告**,以便您立即捕获它,而不是调试一个“幻觉”的代理。
### 快速参考矩阵
| 提供商 | 函数调用 | 状态 | 设置难度 |
|----------|------------------|---------|------------------|
| **OpenAI** | ✅ 原生 | 完全支持 | 容易 |
| **Grok (xAI)** | ✅ OpenAI 兼容 | 完全支持 | 容易 |
| **DigitalOcean** | ⚠️ 仅限云函数 | 有限 | 高级(需要云部署) |
| **Venice.ai** | ⚠️ 依赖模型(目录检查) | 按模型通过实时目录;选择一个支持工具的模型作为 `agent_model` | 中等 |
| **OpenRouter** | ⚠️ 依赖模型(目录检查) | 按模型通过实时目录;检查后再使用作为 `agent_model` | 中等 |
| **ElevenLabs** | ❓ 未知 | 需要测试 | 未知 |
| **本地(Ollama)** | ⚠️ 取决于模型 | 变化 | 中等(依赖模型) |
### ✅ 完全支持:Grok/xAI(默认)
**设置:**
```bash
celeste config --set-key your-xai-key
celeste chat
```
默认配置指向 xAI (`https://api.x.ai/v1`,模型 `grok-4.20-0309-non-reasoning`)- 可靠的函数调用,无推理令牌燃烧,并且永远不会路由到成本禁止的 grok-4.3。避免使用 `grok-4-1-*` 模型:xAI 会将它们静默路由到 grok-4.3。
### ✅ 完全支持:OpenAI
**设置:**
```bash
celeste config --set-key sk-your-openai-key
celeste config --set-url https://api.openai.com/v1
celeste config --set-model gpt-4.1-mini
celeste chat
```
### ⚠️ 有限支持:DigitalOcean
**限制:** DigitalOcean AI 代理需要 **云托管函数**。技能无法在本地执行。
**为什么技能不会工作:**
- Celeste CLI 在本地执行技能(单位转换器、二维码生成器等)
- DigitalOcean 期待云端 HTTP 端点
- 无法在本地执行与 DigitalOcean 架构的桥梁
**解决方法:**
1. 改用 OpenAI 或 Grok
2. 将技能部署为云函数(高级)
3. 使用 Celeste CLI 而不使用技能(仅聊天)
### 提供商兼容性测试
运行自动化测试以验证函数调用:
```bash
# 测试 OpenAI
OPENAI_API_KEY=your-key go test ./cmd/celeste/llm -run TestOpenAI_FunctionCalling -v
# 测试 Grok
GROK_API_KEY=your-key go test ./cmd/celeste/llm -run TestGrok_FunctionCalling -v
# 测试 Venice.ai
VENICE_API_KEY=your-key go test ./cmd/celeste/llm -run TestVeniceAI_FunctionCalling -v
```
**预期输出(工作):**
```
=== RUN TestOpenAI_FunctionCalling
✅ OpenAI 函数调用有效! 调用 get_weather with location=new york
--- PASS: TestOpenAI_FunctionCalling (2.34s)
```
**预期输出(不工作):```
=== RUN TestVeniceAI_FunctionCalling
⚠️ Venice.ai 函数调用失败:工具不支持
--- SKIP: TestVeniceAI_FunctionCalling
```
📚 **参见 [docs/LLM_PROVIDERS.md](docs/LLM_PROVIDERS.md) 以获取完整的提供商兼容性指南**
---
## 🎨 函数调用流程(Mermaid 图)
这是技能在底层的工作原理:
```mermaid
%%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#4a90e2','primaryTextColor':'#fff','primaryBorderColor':'#357abd','lineColor':'#6c757d','secondaryColor':'#7c3aed','tertiaryColor':'#10b981','noteBkgColor':'#fef3c7','noteTextColor':'#92400e'}}}%%
sequenceDiagram
actor User
participant CLI as Celeste CLI
participant LLM as LLM Provider
participant Skill as Skill Handler
participant API as External API
User->>+CLI: "What's the weather in NYC?"
Celeste: *calls LLM*
LLM-->>-CLI: Send message + tools definition
Note right of LLM: AI decides:<br/>need weather data
LLM-->>-CLI: tool_calls: get_weather(location="NYC")
CLI->>+Skill: Execute get_weather handler
Skill->>+API: Fetch weather data (wttr.in)
API-->>-Skill: JSON weather response
Skill-->>-CLI: Formatted weather data
CLI->>+LLM: Send tool result back
Note right of LLM: Generate natural<br/>response
LLM-->>-CLI: "It's 45°F and cloudy in NYC..."
CLI->>-User: Display response with typing animation
```
### 要点:
1. **每次请求都发送工具** - 所有可用的技能都列在 API 调用中
2. **LLM 决定何时调用** - 您不必手动调用技能,AI 会自行决定
3. **本地执行** - 技能在您的机器上运行(除非它们需要外部 API)
4. **结果发送回 LLM** - 工具结果被格式化并返回以供解释
5. **自然语言输出** - LLM 将结构化数据转换为对话式响应
**这需要 OpenAI 风格的函数调用支持!** 没有此功能的提供商将忽略工具,并像它们无权访问数据一样做出响应。
#### 上下文管理和分析
| 命令 | 操作 |
|---------|--------|
| `/context` | 显示当前令牌使用情况、成本估算和上下文窗口状态 |
| `/stats` | 显示使用情况分析仪表盘,包含提供商/模型明细 |
| `/export [格式]` | 导出当前会话(支持 json、md、csv 格式) |
**提供商支持的令牌跟踪:**
✅ **完整支持** (返回使用数据并自动跟踪令牌):
- OpenAI (gpt-4o、gpt-4o-mini 等)
- xAI/Grok (grok-4.20-0309-non-reasoning [默认],grok-build-0.1 等)
- Venice.ai (venice-uncensored 等)
- Google Gemini AI Studio (gemini-2.0-flash 等)
- Google Vertex AI (通过 OpenAI 端点使用 gemini 模型)
- OpenRouter (所有模型)
- **DigitalOcean Gradient** (Agent API with RAG - 支持 stream_options.include_usage)
❌ **不支持** (仅使用估算):
- Anthropic Claude (原生 API - 格式不同,尚未实施)
- ElevenLabs (语音 API)
**示例:**
```bash
# 检查当前上下文使用情况
/context
# 显示:令牌使用(12.5K/128K),成本($0.034),警告级别
# 查看分析仪表盘
/stats
# 显示:生命周期使用情况、热门模型、提供商明细、每日统计数据
# 将对话导出为 Markdown
/export md
# 保存到:~/.celeste/exports/session_<id>_<timestamp>.md
# 导出为 JSON 以便程序化访问
/export json
```
**注意:** 当使用不支持令牌跟踪的提供商(Anthropic 原生 API,ElevenLabs)时,Celeste CLI 将根据字符数估算令牌(约 4 个字符 = 1 个令牌),但不会显示确切的 API 使用情况或成本。要使用准确的令牌跟踪和上下文管理功能,请使用上述标记为 ✅ 的提供商。
### 单次消息模式(非交互式)
```bash
# 发送单个消息并退出
celeste message "生命的意义是什么?"
# 或使用简写
celeste "你好,Celeste!"
```
### 会话管理
```bash
# 列出已保存的会话
celeste session --list
# 加载特定会话
celeste session --load abc123def
# 清除所有会话
celeste session --clear
```
会话会自动保存到 `~/.celeste/sessions/`,可以稍后恢复。
### 技能管理
```bash
# 列出可用技能(带描述)
celeste skills --list
# 初始化默认技能配置文件
celeste skills --init
```
### 版本和帮助
```bash
# 显示版本
celeste version
celeste --version
# 显示帮助
celeste help
celeste --help
```
### 🔥 NSFW 模式(Venice.ai 集成)
NSFW 模式通过 Venice.ai 提供无审查聊天和 NSFW 图片生成:
**激活 NSFW 模式:**
```bash
# 在聊天中输入:
/nsfw
# 头部将显示:🔥 NSFW • img:lustify-sdxl
```
**图片生成命令:**
```bash
# 使用默认模型生成(lustify-sdxl)
image: 赛博朋克城市风景 夜晚
# 生成动漫风格图片
anime: 魔法少女 持剑
# 生成梦幻风格图片
dream: 超现实宇宙景观
# 对单个生成使用特定模型
image[venice-sd35]: 写实主义肖像
# 提升现有图片
upscale: ~/path/to/image.jpg
```
**模型管理:**
```bash
# 设置默认图片模型
/set-model wai-Illustrious
# 查看可用模型
/set-model
# 可用模型:
# - lustify-sdxl (默认 NSFW)
# - wai-Illustrious (动漫风格)
# - hidream (梦幻风格)
# - nano-banana-pro
# - venice-sd35 (Stable Diffusion 3.5)
# - lustify-v7
# - qwen-image
```
**图片质量设置:**
所有图片默认生成高质量:
- **步骤**:40(1-50,越高越详细)
- **CFG 缩放比例**:12.0(0-20,越高提示词遵从度越强)
- **尺寸**:1024x1024(最高 1280x1280)
- **格式**:PNG(无损)
- **安全模式**:禁用(无 NSFW 模糊)
**下载位置:**
图片默认保存到 `~/Downloads`。可在 `~/.celeste/skills.json` 中自定义:
```json
{
"downloads_dir": "~/Pictures"
}
```
**LLM 提示词链接:**
让无审查 LLM 为你编写提示词:
```
You: 编写详细的 NSFW 动漫场景描述
Celeste: [生成详细提示词]
You: image: [粘贴 Celeste 的提示词]
Celeste: *根据 AI 编写的提示词生成图片*
```
**返回安全模式:**
```bash
/safe
# 返回 OpenAI 端点并启用技能
```
**配置:**
将 Venice.ai API 密钥添加到 `~/.celeste/skills.json`:
```json
{
"venice_api_key": "your-venice-api-key",
"venice_base_url": "https://api.venice.ai/api/v1",
"venice_model": "venice-uncensored",
"venice_image_model": "lustify-sdxl",
"downloads_dir": "~/Downloads"
}
```
**限制:**
- 在 NSFW 模式下禁用函数调用(Venice 无审查不支持)
- 技能不可用(使用 /safe 重新启用)
- 不支持视频生成(Venice API 限制)
---
## 🏗️ 架构
### 项目结构
```
celeste-cli/
├── cmd/celeste/ # 主应用程序
│ ├── main.go # CLI 入口点
│ ├── tui/ # Bubble Tea TUI 组件
│ │ ├── app.go # 主 TUI 模型和更新循环
│ │ ├── chat.go # 可滚动视口(消息)
│ │ ├── input.go # 文本输入 + 历史记录
│ │ ├── skills.go # 技能面板(执行状态)
│ │ ├── styles.go # Lip Gloss 主题(损坏的审美)
│ │ ├── streaming.go # 模拟打字动画
│ │ └── messages.go # Bubble Tea 消息(事件)
│ ├── tools/ # 统一工具系统
│ │ ├── builtin/ # 所有内置工具实现
│ │ └── mcp/ # MCP 客户端用于外部工具
│ ├── permissions/ # 工具权限系统
│ ├── context/ # 令牌预算和上下文管理
│ ├── llm/ # LLM 客户端
│ │ ├── client.go # OpenAI 兼容客户端
│ │ ├── stream.go # 流处理(SSE)
│ │ └── providers_test.go # 提供商兼容性测试
│ ├── config/ # 配置管理
│ │ ├── config.go # JSON 配置(加载/保存/命名)
│ │ └── session.go # 会话持久性
│ └── prompts/ # 人物提示词
│ ├── celeste.go # 提示词加载器
│ └── celeste_essence.json # 嵌入式 Celeste 人格
├── docs/ # 文档
│ ├── LLM_PROVIDERS.md # 提供商兼容性指南
│ ├── CAPABILITIES.md # Celeste 可以做什么(生态系统)
│ ├── PERSONALITY.md # Celeste 人格快速参考
│ └── ROUTING.md # 子代理路由(生态系统)
├── LICENSE # MIT 许可证
├── CHANGELOG.md # 版本历史
├── CONTRIBUTING.md # 贡献指南
├── SECURITY.md # 安全策略
└── README.md # 此文件
```
### 组件流程图
```mermaid
%%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#4a90e2','secondaryColor':'#7c3aed','tertiaryColor':'#10b981','primaryTextColor':'#fff','lineColor':'#6c757d','fontSize':'14px'}}}%%
flowchart TB
subgraph CLI["🖥️ CLI 入口(main.go)"]
style CLI fill:#e8f4f8,stroke:#4a90e2,stroke-width:2px
Main[解析参数] --> |chat| TUI[启动 TUI]
Main --> |config| Config[配置管理器]
Main --> |session| Session[会话管理器]
Main --> |skills| Skills[技能注册]
Main --> |help| Help[打印帮助]
end
subgraph TUI_Layer["🎨 TUI 层(Bubble Tea)"]
style TUI_Layer fill:#f3e8ff,stroke:#7c3aed,stroke-width:2px
TUI --> Header[标题栏]
TUI --> Viewport[聊天视口]
TUI --> Input[文本输入 + 历史记录]
TUI --> SkillsPanel[技能面板]
TUI --> Status[状态栏]
end
subgraph Backend["⚙️ 后端(业务逻辑)"]
style Backend fill:#fef3c7,stroke:#f59e0b,stroke-width:2px
Input --> |用户消息| LLM[LLM 客户端]
LLM --> |流式传输块| Stream[流处理]
Stream --> |SSE 解析| SimType[模拟打字]
SimType --> |字符逐一渲染| Viewport
LLM --> |检测到工具调用| Executor[技能执行器]
Executor --> |查找| Registry[技能注册]
Registry --> |执行| Handler[技能处理]
Handler --> |结果| Executor
Executor --> |工具结果| LLM
LLM --> |最终响应| Stream
end
subgraph Storage["💾 持久层"]
style Storage fill:#d1fae5,stroke:#10b981,stroke-width:2px
Config --> ConfigFiles["~/.celeste/config.json"]
Session --> SessionFiles["~/.celeste/sessions/*.json"]
Handler --> |提醒/笔记| LocalStorage["~/.celeste/reminders.json"]
end
subgraph External["🌐 外部 API"]
style External fill:#fee2e2,stroke:#ef4444,stroke-width:2px
Handler --> |天气| WttrIn[wttr.in API]
Handler --> |塔罗牌| TarotAPI[塔罗牌功能]
Handler --> |NSFW/图片| VeniceAI[Venice.ai]
Handler --> |货币| ExchangeRate[汇率-API]
Handler --> |Twitch| TwitchAPI[Twitch API]
Handler --> |YouTube| YouTubeAPI[YouTube 数据 API]
end
classDef entryPoint fill:#4a90e2,stroke:#357abd,color:#fff
classDef uiComponent fill:#7c3aed,stroke:#6b21a8,color:#fff
classDef business fill:#f59e0b,stroke:#d97706,color:#fff
classDef storage fill:#10b981,stroke:#059669,color:#fff
classDef external fill:#ef4444,stroke:#dc2626,color:#fff
class Main,TUI entryPoint
class LLM,Stream,Executor business
class ConfigFiles,SessionFiles,LocalStorage storage
class WttrIn,TarotAPI,VeniceAI,ExchangeRate,TwitchAPI,YouTubeAPI external
```
### 数据流:用户消息 → 响应
1. **用户输入** → 文本输入组件(带历史记录)
2. **TUI 更新** → Bubble Tea 更新循环处理输入
3. **LLM 请求** → 客户端将消息 + 工具发送到 OpenAI/Grok
4. **流式解析** → 解析 SSE 块(文本或工具调用)
5. **工具执行** (如果有工具调用):
- 执行器接收工具调用 JSON
- 注册表查找技能处理
- 处理器执行(本地或 API 调用)
- 结果发送回 LLM
6. **响应流** → LLM 生成自然语言响应
7. **模拟打字** → 字符逐一渲染(如果启用)
8. **视口更新** → 聊天历史记录更新新消息
9. **会话保存** → 自动保存对话到磁盘
---
## 🎨 主题
TUI 使用 **corrupted-theme** 色彩调色板灵感来自 Celeste 的深渊美学:
| 颜色 | 十六进制 | RGB | 用途 |
|-------|-----|-----|-------|
| **强调色** | `#d94f90` | `rgb(217, 79, 144)` | 标题栏、提示词、突出显示、用户消息 |
| **紫色** | `#8b5cf6` | `rgb(139, 92, 246)` | 函数调用、次要元素、技能名称 |
| **深紫色** | `#6d28d9` | `rgb(109, 40, 217)` | 边框、细微强调 |
| **背景** | `#0a0a0a` | `rgb(10, 10, 10)` | 主背景(终端) |
| **表面** | `#1a1a1a` | `rgb(26, 26, 26)` | 提升表面、面板 |
| **文本** | `#f5f1f8` | `rgb(245, 241, 248)` | 主要文本、助手消息 |
| **变暗** | `#7a7085` | `rgb(122, 112, 133)` | 提示、时间戳、次要文本 |
| **成功** | `#10b981` | `rgb(16, 185, 129)` | 技能成功指示 |
| **错误** | `#ef4444` | `rgb(239, 68, 68)` | 错误、警告 |
### 恶魔眼动画
当 Celeste 正在思考时,会播放恶魔眼动画:
```
👁️ → 1.21+(使用 go 1.24.0 获取最新功能)
- **终端** 支持 256 色(iTerm2、Alacritty、Windows Terminal 等)
- **API 密钥** (用于测试技能):
- OpenAI API 密钥(聊天必填)
- Venice.ai API 密钥(可选,用于 NSFW/图片技能)
- YouTube Data API 密钥(可选,用于 YouTube 技能)
- Twitch Client ID(可选,用于 Twitch 技能)
### 从源码构建
```bash
cd celeste-cli
go mod tidy
go build -o celeste ./cmd/celeste
```
### 运行测试
```bash
# 运行所有测试
go test ./...
# 运行覆盖率测试
go test -cover ./...
# 运行特定包测试
go test ./cmd/celeste/skills -v
# 运行提供商兼容性测试
OPENAI_API_KEY=sk-xxx go test ./cmd/Celeste/llm -run TestOpenAI_FunctionCalling -v
```
### 代码质量检查
```bash
# 格式化代码
gofmt -w ./cmd
# 运行 linter
go vet ./...
# 检查未使用的导入
goimports -w ./cmd
```
### 依赖项
| 包 | 用途 | 版本 |
|---------|---------|---------|
| `github.com/charmbracelet/bubbletea` | TUI 框架 | v1.3.10 |
| `github.com/charmbracelet/bubbles` | TUI 组件(viewport、textinput) | v0.21.0 |
| `github.com/charmbracelet/lipgloss` | 样式引擎 | v1.1.0 |
| `github.com/sashabaranov/go-openai` | OpenAI 客户端(流式传输、函数调用) | v1.20.4 |
| `github.com/google/uuid` | UUID 生成 | v1.6.0 |
| `github.com/skip2/go-qrcode` | QR 码生成 | v0.0.0-20200617195104 |
| `github.com/stretchr/testify` | 测试框架 | v1.11.1 |
### 分支策略
- **main** - 仅稳定版本
- **feature/bubbletea-tui** - 当前开发分支(TUI 实现)
- 功能分支 - 从 `feature/bubbletea-tui` 分叉
```bash
git checkout feature/bubbletea-tui
git checkout -b feature/your-feature-name
```
3. **进行更改**
4. **彻底测试**:
```bash
go test ./...
go vet ./...
gofmt -l ./cmd # 应返回空值
```
5. **提交拉取请求** 到 `feature/bubbletea-tui`
### 贡献者快速入门
1. **复刻仓库**
2. 从 `feature/bubbletea-tui` 创建功能分支:
```bash
git checkout feature/bubbletea-tui
git checkout -b feature/your-feature-name
```
3. **进行更改**
4. **彻底测试**:
```bash
go test ./...
go vet ./...
gofmt -l ./cmd # 应返回空值
```
5. **提交拉取请求** 到 `feature/bubbletea-tui`
### 贡献领域
- 🧪 **测试** - 提供商兼容性测试、技能单元测试、集成测试
- 📚 **文档** - 改进指南、添加示例、翻译成其他语言
- 🎨 **主题** - 替代配色方案、终端主题
- 🔮 **技能** - 新技能实现(需要函数调用支持)
- 🐛 **错误修复** - 参见 [GitHub Issues](https://github.com/whykusanagi/celeste-cli/issues)
- ⚡ **性能优化** - 优化流式传输、减少内存使用
### 测试您的更改
在提交 PR 之前:
```bash
# 构建成功
go build -o celeste ./cmd/celeste
# 所有测试通过
go test ./...
# 无 vet 警告
go vet ./...
```
### 构建错误
**错误:** `go: go.mod 需要更新;要更新,请运行:go mod tidy`
**解决方案:**
```bash
go mod tidy
go build -o celeste ./cmd/celeste
```
**错误:** `package X not in GOROOT`
**解决方案:**
```bash
# 更新依赖项
go get -u ./...
go mod tidy
```
---
## 📖 文档
开发者和贡献者的综合文档:
### 核心文档
- **[ARCHITECTURE.md](docs/ARCHITECTURE.md)** - 系统设计、组件关系和数据流图
- **[TESTING.md](docs/TESTING.md)** - 测试指南,包含示例、覆盖率报告和最佳实践
- **[CONTRIBUTING.md](docs/CONTRIBUTING.md)** - 如何贡献:添加技能、提供商和命令
- **[LLM_PROVIDERS.md](docs/LLM_PROVIDERS.md)** - 提供商兼容性矩阵和设置指南
- **[STYLE_GUIDE.md](docs/STYLE_GUIDE.md)** - 代码格式化标准和约定
### 测试覆盖率(v1.2.0)
整体覆盖率:**17.4%**,涵盖关键包
| 包 | 覆盖率 | 状态 |
|---------|----------|--------|
| prompts | 97.1% | ✅ 优秀 |
| providers | 72.8% | ✅ 优秀 |
| config | 52.0% | ✅ 良好 |
| commands | 25.8% | ⚠️ 中等 |
| venice | 22.6% | ⚠️ 中等 |
| skills | 12.2% | ⚠️ 低 |
| llm | 0% | ❌ 需要模拟 |
| tui | 0% | ❌ 需要模拟 |
参见 [TESTING.md](docs/TESTING.md) 了解详细信息。
---
## 🤝 贡献
我们欢迎贡献!请参阅 [CONTRIBUTING.md](docs/CONTRIBUTING.md) 获取详细指南。
### 贡献者快速入门
1. **复刻仓库**
2. 从 `feature/bubbletea-tui` 创建功能分支:
```bash
git checkout feature/bubbletea-tui
git checkout -b feature/your-feature-name
```
3. **进行更改**
4. **彻底测试**:
```bash
go test ./...
go vet ./...
gofmt -l ./cmd # 应返回空值
```
5. **提交拉取请求** 到 `feature/bubbletea-tui`
### 贡献领域
- 🧪 **测试** - 提供商兼容性测试、技能单元测试、集成测试
- 📚 **文档** - 改进指南、添加示例、翻译成其他语言
- 🎨 **主题** - 替代配色方案、终端主题
- 🔮 **技能** - 新技能实现(需要函数调用支持)
- 🐛 **错误修复** - 参见 [GitHub Issues](https://github.com/whykusanagi/celeste-cli/issues)
- ⚡ **性能优化** - 优化流式传输、减少内存使用
### 测试您的更改
在提交 PR 之前:
```bash
# 构建成功
go build -o celeste ./cmd/celeste
# 所有测试通过
go test ./...
# 无 vet 警告
go vet ./...
```
# 代码格式化
gofmt -w ./cmd
git diff # 应该显示无更改
---
## 📄 许可证
本项目在 **MIT License** 下获得许可 - 詳情请参阅 [LICENSE](LICENSE) 文件。
---
## 🔗 链接
- [文档](docs/)
- [贡献](CONTRIBUTING.md)
- [安全策略](SECURITY.md)
- [变更日志](CHANGELOG.md)
---
## 🙏 致谢
- **[Charm](https://charm.sh/)** - Bubble Tea, Bubbles, 和 Lip Gloss TUI 框架
- **[sashabaranov/go-openai](https://github.com/sashabaranov/go-openai)** - OpenAI Go 客户端
- **OpenAI** - 函数调用 API
- **xAI** - Grok API
- **Venice.ai** - 无审查 AI 模型
- **wttr.in** - 免费天气 API
---
## 📞 支持
- **问题:** [GitHub Issues](https://github.com/whykusanagi/celeste-cli/issues)
- **安全:** 请参阅 [SECURITY.md](SECURITY.md)
- **文档:** [docs/](docs/)
- **社区:** [Discord](https://discord.gg/whykusanagi) (即将推出)
---
<div align="center">
**由 [@whykusanagi](https://github.com/whykusanagi) 使用 💜 构建**
*"深渊通过终端低语..." - Celeste*
</div>
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器