abidi556/doge-code
GitHub: abidi556/doge-code
基于逆向还原的 Claude Code 源码深度魔改,支持自定义接口地址、代理转发和多模型协议转接的可自托管 AI 编程助手。
Stars: 0 | Forks: 0
# Doge Code
[](README.md)
[](README.md)
[](README.md)
[](README.md)
[](README.md)
[](README.md)

## 这是什么
[`Doge Code`](README.md) 基于一份还原后的 [`Claude Code`](README.md) 源码树继续修改而来。
可以把它理解为:
- 基底仍然是“通过 source map 逆向还原 + 缺失模块补齐”得到的可运行代码树
- 但在此之上,加入了这个 Fork 自己的目标和行为调整
- 目标不是“100% 忠于上游”,而是“让它更适合折腾、适合代理转接、适合自定义模型接入”
如果用 ACG 比喻,大概属于:
- 原作:[`Claude Code`](README.md)
- 本作:[`Doge Code`](README.md)
- 定位:不是官方 BD 修正集,而是高强度民间魔改但努力保持剧情逻辑自洽的外传 OVA
## 当前定位
这个仓库当前强调的是以下方向:
- 支持自定义 Anthropic 兼容接口地址
- 正在加入 OpenAI Chat Completions ↔ Anthropic Messages 转接能力
- 支持自定义 API Key
- 支持自定义模型与模型列表管理
- 尽量把自定义接入数据收口到 [`~/.doge`](README.md) 路径体系
- 在保留 CLI/TUI 主体结构的前提下,降低对官方登录流的绑定
换句话说,它现在更像一个“可自托管 / 可代理 / 可转接”的 [`Claude Code`](README.md) 变体。
## 与原版 Claude Code 的数据隔离
[`Doge Code`](README.md) 默认**不应**与原版 [`Claude Code`](README.md) 共用配置和缓存目录。
当前 Fork 已明确把默认用户目录收口到:
- 配置目录:[`~/.doge`](README.md)
- 全局配置文件:[`~/.doge/.claude.json`](README.md)
这样做的目的,是避免以下问题:
- 原版 [`Claude Code`](README.md) 的登录态污染 [`Doge Code`](README.md)
- 原版保存的 endpoint / token / model 配置影响 Doge 的代理转接逻辑
- 两边共用 [`.claude.json`](README.md) 或 [`.claude/`](README.md) 导致奇怪的网络、认证、模型或 UI 异常
如果用户以前装过原版 [`Claude Code`](README.md),再运行 [`Doge Code`](README.md) 时出现“明明没这么配却读到了旧配置”的现象,通常就是历史数据混用导致的。
建议:
- 原版继续使用它自己的 [`.claude`](README.md) / [`.claude.json`](README.md)
- [`Doge Code`](README.md) 使用 [`.doge`](README.md) 目录
- 如需手动指定,也可以通过 [`CLAUDE_CONFIG_DIR`](README.md) 为 [`Doge Code`](README.md) 指向独立目录
一句话总结:
## OpenAI 兼容接口说明
[`Doge Code`](README.md) 正在加入一个“中间转接层”模式,用来让内部仍按 Anthropic Messages 结构工作的主逻辑,转发到 OpenAI Chat Completions 接口。
目标行为是:
- 内部程序仍按 Anthropic Messages 模式组织请求
- 当选择 OpenAI API 格式时,由中间层把 Messages 请求改写成 Chat Completions 请求
- 远端返回 Chat Completions 流后,再由中间层回转成内部可消费的 Messages 风格流事件
这意味着它不是简单改一个 Base URL,而是协议级别的输入输出流转接。
当前状态:
- API 格式选择界面与配置持久化已加入
- OpenAI 兼容转接模块正在迭代中
- 目前仍属于开发中功能,可能出现流式事件不完整、消息映射异常、部分工具调用兼容不足等情况
如果你只是想稳定使用,建议优先走 Anthropic 兼容接口模式;如果你在测试 OpenAI 格式,请把它视为实验功能。
## 和原始还原仓库的关系
这个仓库**不是**上游官方源码仓库,也**不是** pristine 状态的 Claude Code。
它有两层历史:
1. 第一层:还原后的源码树
2. 第二层:基于该源码树继续进行的 Fork 改造
因此你会看到两类差异同时存在:
- 来自恢复过程的 shim、fallback、兼容层
- 来自 Doge Code 的主动魔改
这两类改动都是真实存在的,不建议把当前代码误判成“官方上游源码镜像”。
## 当前状态
- 该源码树已经可以在本地开发流程中恢复并运行
- [`bun install`](README.md) 可用于安装依赖
- [`bun run dev`](README.md) 可用于启动恢复后的 CLI/TUI
- [`bun run version`](README.md) 可用于输出当前版本信息
- 项目已被继续改造成 [`Doge Code`](README.md) 分支,部分行为和 UI 已不再与原始 Claude Code 一致
- 部分区域仍保留恢复期 fallback,因此行为可能与上游实现不同
- OpenAI API 格式转接功能仍在开发中,当前并非完全稳定
## 为什么会有这个仓库
因为 source map 并不能召唤完整原仓库,最多只能说“把灵魂碎片召回来一部分”。
常见缺口包括:
- 类型专用文件缺失
- 构建产物和中间文件缺失
- 私有包包装层无法恢复
- 原生绑定无法恢复
- 动态导入资源不完整
因此这个仓库的目标从一开始就不是考古式供奉,而是:
- 先恢复到可运行
- 再恢复到可维护
- 最后在能跑的基础上,按需求继续 Fork
简而言之:
## 运行方式
环境要求:
- Bun 1.3.5 或更高版本
- Node.js 24 或更高版本
安装依赖:
bun install
## 快速安装(推荐开发者直接源码使用)
如果你是直接拉这个仓库源码来用,最快的方式是用 [`bun link`](README.md) 把它注册成全局命令。
### 方式一:源码目录内直接注册
在仓库根目录执行:
bun install
bun link
注册成功后:
- 全局包名是 [`@doge-code/cli`](package.json:2)
- 命令名是 [`doge`](package.json:24)
此后可直接运行:
doge
### 方式二:在其他项目中引用 link 包
如果你要在别的工程里依赖它,可以使用:
bun link @doge-code/cli
或者在 [`package.json`](package.json) 中写:
{
"dependencies": {
"@doge-code/cli": "link:@doge-code/cli"
}
}
## 使用 Git 直接源码级更新
这个 Fork 很适合直接通过 Git 拉取更新,而不是走传统已发布包升级。
典型更新流程:
git pull
bun install
bun link
含义分别是:
- [`git pull`](README.md):拉取最新源码改动
- [`bun install`](README.md):同步依赖变化
- [`bun link`](README.md):刷新全局 link 注册,确保命令入口与当前源码一致
如果你本地就是长期用源码目录跑 [`Doge Code`](README.md),这基本就是“源码级更新”的标准姿势。
### 一个推荐工作流
首次安装:
git clone
cd claude-code-rev
bun install
bun link
doge
后续更新:
git pull
bun install
bun link
doge
## 命令与包名
运行 [`Doge Code`](README.md) CLI:
bun run dev
安装为全局命令后,默认命令名为:
doge
也就是说,这个 Fork 现在的目标入口名是 [`doge`](README.md),而不是 [`claude`](README.md)。
如果你使用 [`bun link`](README.md) 进行全局注册链接,那么现在注册出来的包名也不再是原版名,而是:
@doge-code/cli
输出版本号:
bun run version
## Buddy 宠物系统用法
这个 Fork 内置了一个名为 [`Buddy`](README.md) 的小企鹅宠物,会显示在输入框旁边,并在部分对话后冒泡吐槽或打气。
常用命令如下:
- 启用 / 唤出 Buddy:
/buddy
- 摸摸 Buddy(触发爱心动画):
/buddy pet
- 临时关闭 Buddy(静音,不再显示冒泡):
/buddy mute
- 重新打开 Buddy:
/buddy unmute
- 查看命令帮助:
/buddy help
补充说明:
- 当前这份 Fork 已默认带一个可用的 Buddy,通常启动后就是开启状态
- [`/buddy mute`](README.md) 是“关闭显示和冒泡”,不是删除宠物数据
- [`/buddy unmute`](README.md) 会恢复显示
- 如果你在聊天里直接提到 `Buddy`,它有时会自己在气泡里回应
## 说明与免责声明
- 本仓库是 [`Claude Code`](README.md) 的 Fork:[`Doge Code`](README.md)
- 它包含恢复期代码与后续 Fork 改动,不代表官方立场
- 如果某些行为看起来“很像官方,但又不完全像”,那通常不是你看错了,而是这确实是恢复版 + 魔改版的叠加态
- 如果某些文案偶尔带一点 ACG 味,那是彩蛋,不是类型系统坏掉了(至少不全是)
标签:AI工作流, AI编程助手, Anthropic API, API Key管理, API代理, Bun, Claude Code魔改, DLL 劫持, Doge Code, GNU通用公共许可证, LLM代理, MITM代理, Node.js, OpenAI API, Source Map还原, TUI工具, TypeScript, 云资产清单, 代理转接, 代码补全, 大语言模型, 威胁情报, 安全插件, 开发者工具, 开源Fork, 提示词工程, 模型管理, 模型转发, 策略决策点, 自动化攻击, 自定义模型接入, 自托管AI, 逆向工程