← 返回列表
需源码安装
CodeBuddy API 代理
暂不能直接安装(需源码编译或环境不满足):仓库缺少 package.json,无法用 dsh 插件安装命令安装。 · 最近上游提交 2026/9/23 · 已提供中文文档
一个面向国内外 CodeBuddy 后端的轻量级 API 代理,提供兼容 OpenAI、Anthropic 和 Responses 的 API,并原生支持 Claude Code、Codex CLI 和 DeepSeek Harness。
综合分
43.3
GitHub 分
43.3
用户评分
—
★ Stars
17
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add hawklithm/workbuddy2api仓库缺少 package.json,无法用 dsh 插件安装命令安装,改用 GitHub 源安装
信任档位:已验证本站已于 2 天前真实安装成功(L4 · 真实安装)
- 是什么
- dsh 原生插件 · chat
- 装得上吗
- 本站已真实安装成功(L4 · 真实安装,非静态推断)
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 0 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
🟢实装验证通过· 2026/9/22
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/24(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包workbuddy2api(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
仓库缺少 package.json,无法用 dsh 插件安装命令安装
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/22 08:26:38
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成CodeBuddy API 代理
一个轻量级 API 代理服务,将 CodeBuddy 的底层接口转换为标准的 OpenAI、Anthropic 和 Responses 协议格式。
中文版文档见 README_zh.md。
✨ 核心特性
- 协议转换 - 支持 OpenAI Chat Completions、Anthropic Messages API 和 Responses 三种标准格式
- 脱敏处理 - 内置智能脱敏模块,自动过滤敏感信息(账号、密码、密钥、品牌词、路径等),以减轻基于审查的误拦截
- 消息压缩 - 智能压缩历史消息,大幅降低 token 消耗(非常适合 Codex CLI 等长上下文场景)
- 工具调用支持 - 完整支持 function calling 和 tool use,并自动过滤无效的工具定义
- DSML 解析 - 自动检测并转换 DeepSeek Markup Language(DSML)工具调用
- 流式响应 - SSE 流式输出,实时返回生成内容,内置 60 秒超时保护
- 国内外后端 - 默认使用国内 CodeBuddy,通过 --global 切换到国际 CodeBuddy 服务,会话与模型目录相互隔离
- 多账号管理 - 支持多个登录状态的隔离,便于在工作/个人账号之间切换
安装
推荐使用 uv 从 PyPI 运行:
安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
运行最新可用版本(uv 会自动创建环境并安装依赖)
uv run --with workbuddy2api python -m codebuddy_proxy \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
强制刷新缓存并运行最新版本
uv run --refresh-package workbuddy2api --with workbuddy2api \
python -m codebuddy_proxy \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
后续启动无需手动激活虚拟环境,只需重复上面的 uv run 命令即可。
从本地源码运行
在项目根目录下运行以下命令,以使用工作区源码而非已发布的 PyPI 版本:
同步本地项目依赖
uv sync
启动本地源码
uv run python -m codebuddy_proxy --desensitize
首次使用时,需要登录:
uv run python -m codebuddy_proxy --login --desensitize
快速开始
1. 启动代理
使用最新版本(推荐)
uv run --with workbuddy2api python -m codebuddy_proxy --desensitize
首次使用:登录并启动
uv run --with workbuddy2api python -m codebuddy_proxy --login --desensitize
国际服务:首次登录并启动
uv run --with workbuddy2api python -m codebuddy_proxy --global --login --desensitize
国际服务:后续启动bash
uv run --with workbuddy2api python -m codebuddy_proxy --global --desensitize
默认监听 http://127.0.0.1:8787。
国内和国际 CodeBuddy 后端
该代理同时支持两个 CodeBuddy 区域。国内模式仍为默认模式,
因此现有的启动命令可继续保持不变地使用。
| 模式 | 启动选项 | 上游端点 | 默认会话文件 |
| --- | --- | --- | --- |
| 国内(默认) | 无 | https://copilot.tencent.com | ~/.codebuddy-session.json |
| 国际 | --global | https://www.codebuddy.ai | ~/.codebuddy-global-session.json |
国际服务的首次登录和日常启动:
bash
First login
uv run --with workbuddy2api python -m codebuddy_proxy \
--global --login --desensitize
Later starts reuse the international session
uv run --with workbuddy2api python -m codebuddy_proxy \
--global --desensitize
如果该包已作为命令安装,等效的简写形式为
workbuddy2api --global --login。从源码运行时,请使用
uv run python -m codebuddy_proxy --global --login。
--global 仅更改上游服务。Codex CLI、Claude Code/CC Switch、
OpenCode 及其他客户端继续使用相同的本地代理 URL。
所选的配置文件还控制 /v1/models 返回的模型目录。
国内和国际会话被有意隔离。显式指定的
--session-file 优先,但其保存的后端和端点必须与
当前启动选项匹配。该代理会拒绝不匹配的凭据,并且
不会修改原始文件。
对于自定义国际端点,请始终使用专用会话文件:
bash
uv run --with workbuddy2api python -m codebuddy_proxy \
--global \
--endpoint https://staging-codebuddy.tencent.com \
--session-file "$HOME/.codebuddy-global-staging-session.json" \
--login
端点优先级为:显式 --endpoint > --global 配置文件默认值
非全局模式下的 CODEBUDDY_ENDPOINT > 国内默认端点。
因此,不带 --endpoint 的 --global 无法通过 CODEBUDDY_ENDPOINT
重定向到国内主机。
运行时模型目录从打包的配置文件资源
src/codebuddy_proxy/models_config.domestic.json 和
src/codebuddy_proxy/models_config.global.json 加载。根目录下的
models_config.json 仅作为国内目录的开发兼容副本保留,
并非运行时数据源。
2. 验证
bash
curl http://127.0.0.1:8787/health
curl http://127.0.0.1:8787/v1/models
健康检查响应会报告当前活动的 backend(domestic 或 global)以及
upstream_endpoint,这使得在连接客户端之前可以轻松确认所选区域。
3. 连接客户端
Codex CLI
编辑 ~/.codex/config.toml:
toml
[model_providers.codebuddy]
name = "CodeBuddy (via local proxy)"
base_url = "http://127.0.0.1:8787/v1"
wire_api = "responses"
[profiles.codebuddy]
model = "glm-5.2"
model_provider = "codebuddy"
用法:
bash
codex --profile codebuddy "your task"
Claude Code + CC Switch
将以下内容添加到你的 CC Switch 配置中:
json
{
"DeepSeek-V4": {
"base_url": "http://127.0.0.1:8787/v1/messages",
"api_key": "",
"model": "deepseek-v4-pro"
}
}
OpenCode
编辑项目根目录下的 opencode.json:
json
{
"$schema": "https://opencode.ai/config.json",
"model": "codebuddy/glm-5.2",
"providers": {
"codebuddy": {
"name": "CodeBuddy (via local proxy)",
"package": "@opencode-ai/ai/providers/openai-compatible",
"settings": {
"baseURL": "http://127.0.0.1:8787/v1",
"apiKey": "noop"
},
"models": {
"glm-5.2": { "modelID": "glm-5.2", "name": "GLM-5.2" },
"deepseek-v4-pro": { "modelID": "deepseek-v4-pro", "name": "DeepSeek V4 Pro" },
"kimi-k2.7": { "modelID": "kimi-k2.7", "name": "Kimi K2.7" }
}
}
}
}
启动 opencode 后,使用 /models 命令在 codebuddy 提供商下选择一个模型(例如 codebuddy/glm-5.2)。
注意:baseURL 指向本地代理;apiKey 可以是任意占位值(本地代理不校验密钥)。models 的键是 OpenCode 内部用于选择模型的模型 ID,而 modelID 是发送给代理的实际模型名称。密钥字段请使用 apiKey(而不是某些旧模板中的 env_key),以避免绑定错误的提供商语义。
Grok CLI
编辑 ~/.grok/config.toml,为每个指向本地代理的模型添加一个 [model.] 条目。Grok 默认使用 OpenAI Chat Completions 后端(/v1/chat/completions),本代理支持该后端:
toml
[models]
default = "hy3" # optional: set your default model
[model.hy3]
model = "hy3" # model id sent to the proxy
base_url = "http://127.0.0.1:8787/v1"
name = "HY3 Main" # shown in the model picker
api_key = "noop" # any placeholder value works
[model.dv4f]
model = "deepseek-v4-flash"
base_url = "http://127.0.0.1:8787/v1"
name = "DeepSeek V4 Flash"
api_key = "noop"
然后在 TUI 中使用 /model hy3(或 Ctrl+M 模型选择器)切换到代理模型,或者使用 grok -m hy3 "your task" 以无头模式运行。
注意:base_url 指向本地代理;api_key 可以是任意占位值(本地代理不校验密钥)。你还可以根据需求设置 api_backend = "responses" 以使用 /v1/responses 端点,或设置为 "messages" 以使用 Anthropic 的 /v1/messages 端点。
Oh My Pi (OMP)
Oh My Pi 是一个终端编码代理(原名 pi)。它从 ~/.omp/agent/models.yml 读取自定义提供商,因此本地代理被配置为一个无需密钥的 OpenAI 兼容端点。
添加一个 codebuddy 提供商(具体模型遵循 /v1/models 返回的 ID,例如 hy3、glm-5.2、deepseek-v4-flash、kimi-k2.7):yaml
~/.omp/agent/models.yml
providers:
codebuddy:
baseUrl: http://127.0.0.1:8787/v1
api: openai-completions
auth: none
models:
- id: hy3
name: Hy3 (CodeBuddy)
reasoning: true
contextWindow: 192000
maxTokens: 64000
- id: glm-5.2
name: GLM-5.2 (CodeBuddy)
reasoning: true
contextWindow: 1000000
maxTokens: 48000
- id: deepseek-v4-flash
name: DeepSeek V4 Flash (CodeBuddy)
reasoning: true
contextWindow: 1000000
maxTokens: 50000
- id: kimi-k2.7
name: Kimi K2.7 (CodeBuddy)
reasoning: true
contextWindow: 256000
maxTokens: 32000
说明:
- auth: none 将该提供商标记为无密钥,因此由代理自身的会话文件处理身份验证。无需 apiKey(代理本身也不会校验密钥)。
- api: openai-completions 会通过 /v1/chat/completions 路由请求,该代理支持此端点。如果你的 OMP 构建或模型需要改用 Responses 传输格式,请使用 api: openai-responses(通过 /v1/responses 路由)。
- 该代理在转发到 CodeBuddy 之前,已经会从工具 schema 中剥离 OpenAI 扩展字段(strict、additionalProperties),因此你通常不需要 disableStrictTools: true —— 只有当某个 CodeBuddy 后端版本开始拒绝工具请求时,才添加它。
在 OMP 中使用 /model codebuddy/hy3 选择模型(或将其设置为 OMP 配置文件中的默认模型),或者使用 omp --model codebuddy/hy3 "your task" 以无头模式运行。模型选择依据精确的 provider/modelId。
其他 OpenAI 兼容客户端
- Base URL:http://127.0.0.1:8787/v1
- API Key:留空(或使用你在启动时通过 --api-key 设置的值)
- 模型名称:glm-5.2 / deepseek-v4-pro / kimi-k2.7 / auto 等。
命令行参数
bash
--host HOST 绑定地址(默认 127.0.0.1)
--port PORT 绑定端口(默认 8787)
--global 使用国际版 CodeBuddy 后端(默认国内版)
--endpoint ENDPOINT CodeBuddy 后端地址(覆盖配置文件默认值)
--session-file PATH 会话文件路径(默认按配置文件隔离)
--log-file PATH JSONL 日志文件(默认 ~/.workbuddy2api/codebuddy-proxy.jsonl)
--desensitize 启用脱敏(推荐)
--optimize-context 启用消息压缩(推荐用于 Codex CLI)
--login 启动时执行浏览器登录
--no-browser 登录时不打开浏览器
--verbose-llm 记录完整的 LLM 请求/响应内容
(默认:仅摘要,节省 98% 空间)
--mock-dir DIR 使用模拟数据(用于测试)
环境变量
bash
CODEBUDDY_PROXY_HOST # 等同于 --host
CODEBUDDY_PROXY_PORT # 等同于 --port
CODEBUDDY_ENDPOINT # 非全局模式下的端点回退值
CODEBUDDY_PROXY_LOG_FILE # 等同于 --log-file
常见场景
首次使用(需要登录)
bash
uv run --with workbuddy2api python -m codebuddy_proxy --login \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
浏览器打开并登录后,代理会自动启动。
国际后端的首次登录:
bash
uv run --with workbuddy2api python -m codebuddy_proxy --global --login \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
日常使用(自动读取登录状态)
bash
uv run --with workbuddy2api python -m codebuddy_proxy --desensitize \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
对于国际后端,每次启动时都要保留 --global:
bash
uv run --with workbuddy2api python -m codebuddy_proxy --global --desensitize \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
Codex CLI 场景(启用压缩)
bash
uv run --with workbuddy2api python -m codebuddy_proxy --desensitize --optimize-context \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
多账号切换
bash
账号 1
uv run --with workbuddy2api python -m codebuddy_proxy --session-file ~/.codebuddy-work.json --login \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
账号 2
uv run --with workbuddy2api python -m codebuddy_proxy --session-file ~/.codebuddy-personal.json --login \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
监听所有接口(局域网共享)
bash
uv run --with workbuddy2api python -m codebuddy_proxy --host 0.0.0.0 --desensitize \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
API 端点
默认情况下,所有端点都不需要在请求中额外提供令牌;代理使用本地会话进行身份验证。
| 方法 | 路径 | 用途 |
| --- | --- | --- |
| GET | /health | 查询本地服务和认证状态 |
| GET | /v1/models | 查询 CodeBuddy 模型列表 |
| POST | /v1/chat/completions | OpenAI Chat Completions,支持工具和流式传输 |
| POST | /v1/responses | Responses API,兼容 Codex CLI |
| POST | /v1/messages | Anthropic Messages API,兼容 Claude Code / CC Switch |
/health - 健康检查
bash
curl http://127.0.0.1:8787/health
响应示例:
json
{
"status": "ok",
"uptime_seconds": 123,
"authenticated": true,
"token_valid": true,
"backend": "global",
"upstream_endpoint": "https://www.codebuddy.ai"
}
/v1/models - 模型列表
bash
curl http://127.0.0.1:8787/v1/models
以 OpenAI 格式返回当前后端的模型目录。data[].id 是后续请求中使用的
model 值;国内模式和国际模式可能暴露不同的模型 ID。
/v1/chat/completions - OpenAI Chat
非流式请求:
bash
curl http://127.0.0.1:8787/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "deepseek-v4-flash",
"messages": [{"role": "user", "content": "Write a quicksort"}]
}'
流式请求:
bash
curl -N http://127.0.0.1:8787/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "glm-5.2",
"stream": true,
"messages": [{"role": "user", "content": "hi"}]
}'
支持完整的 OpenAI 功能集,包括 tools、tool_choice 和 stream_options。
/v1/responses - Responses API
用于 Codex CLI 兼容性:
bash
curl http://127.0.0.1:8787/v1/responses \
-H 'Content-Type: application/json' \
-d '{
"model": "default",
"input": "Write a quicksort"
}'
支持 instructions(系统提示词)、消息形式的 input、tools、tool_choice 和 stream。
💡 提示: 使用 --optimize-context 可大幅减少 Codex CLI 的 token 消耗。
/v1/messages - Anthropic Messages
用于 Claude Code / CC Switch 兼容性:
bash
curl http://127.0.0.1:8787/v1/messages \
-H 'Content-Type: application/json' \
-d '{
"model": "deepseek-v4-pro",
"max_tokens": 4096,
"messages": [{"role": "user", "content": "hi"}]
}'
设置 "stream": true 会返回 Anthropic SSE 事件流。
高级功能
脱敏(--desensitize)
在系统消息中的敏感词中插入零宽空格(U+200B),破坏后端的关键词匹配,缓解合规模板被审核误拦截的问题。
何时使用
强烈建议启用的场景:
1. 接入 Claude Code / CC Switch
- Claude Code 的系统提示词包含大量 Anthropic 品牌词和安全合规声明
- 腾讯后端可能将竞品品牌词(“Claude”、“Anthropic”)视为敏感内容
- 若不脱敏,几乎每个请求都会被审核拦截
2. 接入 Codex CLI / Oh My Posh 等 agentic 工具
- 这些工具的系统提示词包含大量安全术语(DoS、exploit、credential testing 等)
- 即使是合规的“拒绝有害请求”声明也可能被关键词匹配误拦截
3. 使用包含安全术语的自定义系统提示词
- 与安全研究和渗透测试相关的合规对话
- 生成需要讨论漏洞和攻击防御的技术文档
典型错误信息:json
{
"error": {
"message": "内容违规",
"type": "content_policy_violation"
}
}
或者后端返回空响应 / 连接中断。
不需要使用的场景:
- ✅ 普通对话(无安全术语)
- ✅ 使用官方 CodeBuddy 客户端(已内置处理)
- ✅ 纯代码生成(无品牌词 / 安全声明)
典型使用场景
场景 1:接入 Claude Code
bash
必须使用 --desensitize,否则几乎每个请求都会被拦截
uv run --with workbuddy2api python -m codebuddy_proxy --desensitize \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
在 Claude Code / CC Switch 中配置
Base URL: http://127.0.0.1:8787/v1/messages
案例 2:与 Codex CLI 集成
同时启用脱敏和消息压缩(最佳配置)
uv run --with workbuddy2api python -m codebuddy_proxy --desensitize --optimize-context \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
在 Codex CLI 配置文件中
base_url: http://127.0.0.1:8787/v1/responses
案例 3:安全研究对话
启用脱敏以避免合规术语被误拦截
uv run --with workbuddy2api python -m codebuddy_proxy --desensitize \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
示例请求
curl http://127.0.0.1:8787/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "deepseek-v4-pro",
"messages": [
{
"role": "system",
"content": "You are a security expert. Refuse requests for exploit development."
},
{
"role": "user",
"content": "Explain defenses against SQL injection"
}
]
}'
工作原理
原始
"Refuse requests for DoS attacks and exploit development."
脱敏后(插入零宽空格 U+200B)
"Refuse requests for DoS attacks and exploit development."
人类/模型:看起来完全一样
后端审查:关键词匹配失败
处理范围
- ✅ system 角色消息(默认)
- ✅ developer 角色消息
- ✅ Codex CLI / Claude Code 注入的 Harness 用户消息
- ✅ tools 的 description 字段
- ❌ user/assistant 消息(保持原样,因此正常对话不受影响)
敏感词列表
大约 80 个安全/合规术语:
- 攻击类型:DoS、DDoS、exploit、SQL injection、XSS、malware……
- 安全术语:vulnerability、penetration testing、privilege escalation……
- 品牌术语:Claude Code、Anthropic(以避免竞争品牌触发审查)
完整列表位于 desensitize.py 中的 SENSITIVE_TERMS。
注意事项
- ✅ 仅处理合规声明;不绕过对有害输入的审查
- ✅ 仅修改系统消息;真实用户输入保持原样
- ⚠️ 零宽空格对人类/模型是透明的,但会影响精确字符串匹配
- ⚠️ 性能开销:100k/天)
- ✅ 频繁遇到“context”错误
- ✅ 每次请求都发送完整历史记录
- ❌ 不适用于短对话 / 简单请求
使用方法
启用消息压缩
uv run --with workbuddy2api python -m codebuddy_proxy --optimize-context \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
同时启用两项功能(推荐用于 Codex CLI)
uv run --with workbuddy2api python -m codebuddy_proxy --desensitize --optimize-context \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
工作原理
保守模式(非智能体请求)
仅进行长度裁剪:
- System → 截断至 1200 个字符
- User → 3200 个字符
- Assistant → 保留首尾摘要(1800)
- Tool 输出 → 压缩至 1600 个字符
激进模式(智能体 CLI 请求)
自动检测智能体请求(工具中包含 exec_command、apply_patch 等,或消息中包含 harness 标记),并将其重构为最小语义闭包:
1. 丢弃 harness 消息 — 移除所有 Codex/Claude Code 注入的 system/user 消息
2. 保留近期上下文 — 从尾部保留 ≤8 条消息 / ≤7000 个字符
3. 摘要历史 — 将较早的历史压缩为规则摘要(每行一条)
4. Schema 收敛 — 仅保留结构字段,丢弃描述(最大的空间占用者)
5. 压缩工具输出/参数 — 保留关键部分,省略其余部分
示例效果
原始请求:
- 消息:50 条,120,000 个字符
- 工具:15 个,45,000 个字符
- 总计:约 165,000 个字符(约 40k tokens)
压缩后:
- 消息:12 条,18,000 个字符
- 工具:15 个,8,000 个字符
- 总计:约 26,000 个字符(约 6k tokens)
节省:约 85% tokens
日志验证
启用后,日志会记录压缩统计信息:
grep projection_applied "$HOME/.workbuddy2api/codebuddy-proxy.jsonl" | jq .
示例输出:
{
"event": "projection_applied",
"protocol": "responses",
"mode": "aggressive",
"original_messages": 50,
"projected_messages": 12,
"original_message_chars": 120000,
"projected_message_chars": 18000,
"dropped_harness_messages": 8
}
注意事项
- ✅ 仅用于 /v1/responses;不影响 chat/messages 端点
- ✅ 保留语义闭包;模型仍可进行推理
- ⚠️ 历史被摘要;精确细节需要重新运行工具来获取
- ⚠️ Schema 被裁剪;描述等辅助信息会丢失
- ⚠️ 性能开销:<10ms(遍历 + 压缩)
日志记录
日志包括:
- 文本日志:$HOME/.workbuddy2api/proxy.log(每日轮转,保留 30 天)
- 结构化日志:$HOME/.workbuddy2api/codebuddy-proxy.jsonl(每日轮转,保留 30 天,完整请求/响应)
每条 JSONL 记录包含 app_version、system_version、python_version 和 machine 字段;启动时还会记录一条 startup 事件。
你也可以为日志文件指定绝对路径:
uv run --with workbuddy2api python -m codebuddy_proxy \
--desensitize \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
查看日志:
实时跟踪
tail -f "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
查看流式事件
tail -100 "$HOME/.workbuddy2api/codebuddy-proxy.jsonl" | jq 'select(.event | startswith("stream"))'
统计超时次数
jq 'select(.event=="stream_timeout")' "$HOME/.workbuddy2api/codebuddy-proxy.jsonl" | wc -l
验证脱敏
grep desensitize_applied "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
验证压缩(查看统计信息)
grep projection_applied "$HOME/.workbuddy2api/codebuddy-proxy.jsonl" | jq .
故障排查
找不到会话文件
首次使用需要登录:
uv run --with workbuddy2api python -m codebuddy_proxy --login \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
对于国际后端,在同一命令中添加 --global。它会创建并在之后复用
~/.codebuddy-global-session.json。
会话后端或端点不匹配
不要将国内会话复用于国际后端,也不要将生产会话复用于自定义端点。使用你
之后计划使用的相同后端选项登录:
国际默认端点
uv run --with workbuddy2api python -m codebuddy_proxy --global --login
使用隔离会话的自定义国际端点
uv run --with workbuddy2api python -m codebuddy_proxy \
--global --endpoint https://staging-codebuddy.tencent.com \
--session-file "$HOME/.codebuddy-global-staging-session.json" --login
代理会有意拒绝不匹配的会话元数据,而不是将保存的令牌发送到另一台主机。
401 认证失败
令牌已过期;请重新登录:
uv run --with workbuddy2api python -m codebuddy_proxy --login \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
审核拦截
启用脱敏:
uv run --with workbuddy2api python -m codebuddy_proxy --desensitize \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
如果仍被拦截,请尝试压缩(仅限 /v1/responses):
uv run --with workbuddy2api python -m codebuddy_proxy --desensitize --optimize-context \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
端口已被占用
lsof -i :8787
uv run --with workbuddy2api python -m codebuddy_proxy --port 8788 \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
SOCKS 代理错误
httpx[socks] 依赖会自动安装。如果问题仍然存在,请检查环境变量:
env | grep -i proxy
临时禁用代理:
unset http_proxy https_proxy all_proxy
uv run --with workbuddy2api python -m codebuddy_proxy \
--log-file "$HOME/.workbuddy2api/codebuddy-proxy.jsonl"
技术细节
- 架构:FastAPI + httpx(异步)
- 并发:支持 1000+ 并发请求
- 超时:连接 10 秒,读取 30 秒
- 流式:完整的流式日志(started / progress / completed / timeout)
免责声明
本项目仅供学习与研究目的使用。请遵守 CodeBuddy 的服务条款。
- 本项目不提供任何形式的保证
- 因使用本项目而产生的任何后果均由用户自行承担
- 请勿将本项目用于任何违反 CodeBuddy 服务条款的用途
- 请勿将本项目用于商业用途扫码进群