Code Refactor

السجل الرسمي أدوات المطورين

Refactor legacy code into modern, idiomatic code without changing its behavior.

التثبيت

أضف هذا إلى إعدادات MCP في عميلك (Claude Desktop: claude_desktop_config.json، وCursor: ‏.cursor/mcp.json، ويستخدم VS Code وغيره الصيغة نفسها «mcpServers»).

Remote (streamable-http)
Claude Code
claude mcp add --transport http code-refactor 'https://code-refactor-api.app.workbuddy.host/mcp'
إعداد JSON (Claude Desktop وCursor وVS Code)
{
    "mcpServers": {
        "code-refactor": {
            "type": "http",
            "url": "https://code-refactor-api.app.workbuddy.host/mcp"
        }
    }
}
NPM package workbuddy-code-refactor-connector
Claude Code
claude mcp add code-refactor -e 'REFACTOR_BACKEND=ollama' -e 'OPENAI_BASE_URL=<OPENAI_BASE_URL>' -e 'OPENAI_API_KEY=<your openai_api_key>' -e 'OPENAI_MODEL=deepseek-chat' -e 'OLLAMA_HOST=http://127.0.0.1:11434' -e 'OLLAMA_MODEL=qwen2.5-coder' -e 'REFACTOR_TIMEOUT_MS=180000' -- npx -y workbuddy-code-refactor-connector@1.0.4
إعداد JSON (Claude Desktop وCursor وVS Code)
{
    "mcpServers": {
        "code-refactor": {
            "command": "npx",
            "args": [
                "-y",
                "workbuddy-code-refactor-connector@1.0.4"
            ],
            "env": {
                "REFACTOR_BACKEND": "ollama",
                "OPENAI_BASE_URL": "<OPENAI_BASE_URL>",
                "OPENAI_API_KEY": "<your openai_api_key>",
                "OPENAI_MODEL": "deepseek-chat",
                "OLLAMA_HOST": "http://127.0.0.1:11434",
                "OLLAMA_MODEL": "qwen2.5-coder",
                "REFACTOR_TIMEOUT_MS": "180000"
            }
        }
    }
}

متغيرات البيئة

  • REFACTOR_BACKEND Inference backend: 'ollama' (local, code stays on your machine, default) or 'openai' (any OpenAI-compatible cloud endpoint, e.g. DeepSeek).
  • OPENAI_BASE_URL Base URL of the OpenAI-compatible endpoint, e.g. https://api.deepseek.com/v1. Required when REFACTOR_BACKEND=openai.
  • OPENAI_API_KEY سري API key for the cloud endpoint, e.g. a DeepSeek key. Only needed when REFACTOR_BACKEND=openai.
  • OPENAI_MODEL Cloud model name, e.g. deepseek-chat.
  • OLLAMA_HOST Ollama server address used when REFACTOR_BACKEND=ollama.
  • OLLAMA_MODEL Ollama model name used when REFACTOR_BACKEND=ollama.
  • REFACTOR_TIMEOUT_MS Per-call timeout in milliseconds. Raise it for slow local CPU inference.

التوثيق

مأخوذ من ملف README للمشروع على GitHub ويُحدَّث أسبوعيًا. تفتح الروابط على GitHub.

المحتويات
  1. 代码重构助手
  2. 这是什么
  3. 功能
  4. 快速开始
  5. 使用方式
  6. 配置
  7. 运维工具
  8. 项目结构
  9. 开源版与托管版
  10. 在各大平台使用
  11. 常见问题
  12. 贡献
  13. 许可证

代码重构助手

把遗留代码重构为现代规范代码,保持原有接口与行为不变

一个基于本地大模型的代码重构服务。输入一段源代码和一句重构要求,输出重构后的完整代码。

代码不离开你的机器 —— 核心版通过本地 Ollama 推理,无任何数据上传。

快速开始 · 功能 · 使用方式 · 定价 · 贡献


这是什么

历史项目里总有些代码:能跑,但没人愿意碰。变量叫 a、tmp1、data2,三层嵌套的 if 里塞着业务逻辑,同一个校验规则在五个地方各写了一遍。

这个项目做的就是把这些代码改造好。它不修复 bug、不添加功能,只改结构——让代码好读、好改,同时保证外部行为完全不变。

核心能力由本地 Ollama 上的代码模型(默认 deepseek-coder)驱动,可以以 MCP Server、HTTP API、技能包 等多种形态接入你现有的工作流。

功能

能力说明
命名规范化把 f、a、tmp1 改为能表达意图的命名
重复逻辑提取识别重复代码片段,提取为独立函数或方法
控制流简化嵌套条件改为提前返回(卫语句),合并冗余分支
类型标注补充为 Python、TypeScript 补充类型标注
文档注释生成按语言惯例补充 docstring / JSDoc / Javadoc
语法现代化回调改 async/await、var 改 let/const、循环改推导式

支持语言:Python · JavaScript · TypeScript · Java · Go · Rust · C · C++

设计原则

重构这件事,改坏比不改更糟。所以本项目有两条硬约束:

  1. 不改公共接口 —— 函数名、类名、参数签名、返回值结构保持原样(除非你明确要求改)
  2. 保持行为等价 —— 重构后逻辑与原代码一致,不顺手修 bug

快速开始

前置条件
  • Python 3.11+ 或 Node.js 18+
  • Ollama 已安装并运行
  • 已拉取代码模型:ollama pull deepseek-coder
方式一:本地 Python 直接调用
git clone https://github.com/zhouhengchang/code-refactor.git
cd code-refactor
python shared/refactor_core.py   # 内置自测,会先检查服务再跑一个示例

也可以在自己的代码里调用:

# -*- coding: utf-8 -*-
"""最小调用示例。"""

from shared.refactor_core import refactor_code, check_ollama_status

# 先确认环境就绪
print(check_ollama_status())

# 执行重构
result = refactor_code(
    code="def f(a):\n    r = []\n    for i in a:\n        if i % 2 == 0:\n            r.append(i * i)\n    return r\n",
    task="重命名为有意义的函数名与变量名,补充类型标注与中文注释",
    language="python",
)

if result["ok"]:
    print(result["code"])
else:
    print("失败:", result["error"])
方式二:作为 MCP Server 接入(Claude Desktop / WorkBuddy / 任意 MCP 客户端)

已发布到 npm,不用克隆仓库,直接在 MCP 客户端配置里引用:

{
  "mcpServers": {
    "code-refactor": {
      "command": "npx",
      "args": ["-y", "workbuddy-code-refactor-connector"],
      "env": {
        "REFACTOR_BACKEND": "ollama",
        "OLLAMA_HOST": "http://localhost:11434",
        "OLLAMA_MODEL": "deepseek-coder"
      }
    }
  }
}

npm 包:workbuddy-code-refactor-connector

也可以从源码运行,便于自己改代码:

cd workbuddy-connector/server
npm install

然后把上面的 command 改成 node,args 改成 ["/绝对路径/to/workbuddy-connector/server/index.js"] 即可。

重启客户端后即可使用 refactor_code 和 check_status 两个工具。

方式三:Docker 部署 HTTP 服务
docker build -t code-refactor-xpack:1.0.0 -f xpack-server/Dockerfile .
docker run -p 8000:8000 \
  -e OLLAMA_HOST=http://host.docker.internal:11434 \
  -e OLLAMA_MODEL=deepseek-coder \
  code-refactor-xpack:1.0.0

调用:

curl -X POST http://localhost:8000/refactor \
  -H "Content-Type: application/json" \
  -d '{
    "code": "def f(a):\n    return [i*i for i in a if i % 2 == 0]\n",
    "task": "函数名与变量名改为有意义的命名,补充类型标注",
    "language": "python"
  }'

使用方式

输入
参数必填说明
code是待重构代码,≤ 20000 字符
task是重构要求,越具体效果越好
language否语言标识,不填自动判断
输出
{
  "ok": true,
  "code": "重构后的完整代码",
  "model": "deepseek-coder",
  "language": "python",
  "elapsed_ms": 3820
}

失败时返回 {"ok": false, "error": "可读中文错误信息", "error_type": "..."},不抛异常、不暴露堆栈。

task 怎么写

这是影响结果质量最大的一个变量。

别这样写换成这样
「优化一下」「把五层嵌套 if 改为提前返回,提取重复的参数校验为独立函数」
「太乱了」「统一命名规范,拆分超过 50 行的函数,补充中文注释」
「改写好点」「把回调写法改为 async/await,保留原有的错误处理分支」
使用建议
  • 一次一个目标。 「重构 + 加功能」拆成两步做。
  • 长代码分批。 单次 ≤ 300 行为宜,按函数粒度提交。
  • 结果先验证再应用。 跑一遍现有测试再替换生产代码。

配置

全部通过环境变量注入,代码中不含任何密钥。

环境变量默认值说明
REFACTOR_BACKENDollama推理后端:ollama(本地)或 openai(任意 OpenAI 兼容接口)
OLLAMA_HOSThttp://127.0.0.1:11434Ollama 服务地址
OLLAMA_MODELdeepseek-coder本地模型
OPENAI_BASE_URLhttps://api.deepseek.com/v1云端接口地址(REFACTOR_BACKEND=openai 时生效)
OPENAI_API_KEY—云端密钥,仅从环境变量读取,永不写进代码
OPENAI_MODELdeepseek-flash云端模型(DeepSeek 官方在列:deepseek-flash / deepseek-v4-pro)
REFACTOR_TIMEOUT180超时秒数(Python)
REFACTOR_TIMEOUT_MS180000超时毫秒数(Node.js)

本地和云端两套后端同一份代码,切换只改环境变量:

# 改用云端 OpenAI 兼容接口
export REFACTOR_BACKEND=openai
export OPENAI_API_KEY=sk-xxxx

超时默认给到 180 秒,是因为在纯 CPU 的低配机器上本地推理可能需要 1 分钟以上。如果你的机器有 GPU,可以调小。

想用更小更快的本地模型:OLLAMA_MODEL=qwen2.5-coder:1.5b。

运维工具

tools/ 下有两个自检脚本,改完配置或轮换密钥后建议跑一遍,避免"改完才发现用不了":

脚本作用
tools/rotate_key.py密钥轮换:先校验鉴权 / 余额 / 真实调用三关,全过才允许写入;替换前自动备份,可一键回滚
tools/verify_online.py线上体检:依次请求 /healthz、/status、/refactor,确认新配置在生产环境真正生效
# 只验证,不改任何文件
python tools/rotate_key.py --check --key sk-xxxx

# 验证通过后写入 .env
python tools/rotate_key.py --apply --key sk-xxxx

# 线上实例体检
python tools/verify_online.py https://your-host/

rotate_key.py 只改 .env 里 OPENAI_API_KEY 一行,其余配置原样保留。

项目结构

code-refactor/
├── shared/refactor_core.py      # 核心逻辑(唯一真源)
├── workbuddy-connector/         # WorkBuddy / MCP 连接器
├── xpack-server/                # OpenAPI + FastAPI + Dockerfile
├── coze-skill/                  # 扣子技能包
├── skillhub-skill/              # SkillHub Pay Skill
├── alipay-ai/                   # 支付宝 AI收 接入配置
├── xinghuo-agent/               # 讯飞星火智能体配置
├── tools/                       # 密钥轮换与线上体检脚本
└── github-repo/                 # 本文档所在的开源仓库

开源版与托管版

本项目采用 Freemium 模式:核心能力完全开源免费,托管服务面向不想自己部署的用户。

开源版(MIT)托管版 Pro
价格免费¥29/月(含 200 次调用)
或 ¥1/次按需付费
部署自己部署 Ollama无需部署,开箱即用
模型你自己选的模型更大的代码模型,效果更好
速度取决于你的硬件GPU 加速,平均 3-5 秒响应
语言支持8 种8 种 + 优先级支持
批量重构需自行封装支持仓库级批量重构
私有部署—支持
支持社区 Issue优先工单响应

该选哪个?

  • 代码不能出内网 / 想完全掌控 → 开源版,直接克隆部署
  • 本机没有 GPU、不想折腾环境、需要更好的重构质量 → 托管版

👉 托管版入口: https://code-refactor.app.workbuddy.host

托管版同样承诺:代码仅用于本次推理,不留存、不用于模型训练。

在各大平台使用

本服务已适配以下平台,可按需取用对应目录下的配置文件:

平台形态配置 / 入口
npm可执行 MCP Server(已上线)npx -y workbuddy-code-refactor-connector
WorkBuddy 开放平台Connector / MCP Serverworkbuddy-connector/
XPack MCP 交易平台OpenAPI → MCP 服务xpack-server/openapi.json
扣子(Coze)技能商店 Skillcoze-skill/skill.json
SkillHubPay Skillskillhub-skill/manifest.json
支付宝 AI收按调用即时收款alipay-ai/alipay-ai-config.json
讯飞星火智能体 / 独立 APIxinghuo-agent/agent-config.json

常见问题

Q:为什么非要本地跑?云端 API 不是更方便? 代码是核心资产。本地推理意味着你的代码一个字节都不会离开你的机器——这对企业代码库往往是硬性要求。想省事就用托管版。

Q:重构会不会改坏我的代码? 设计上不会改变外部行为,但这不构成保证。上生产前请务必跑测试。 项目的第一原则就是"不改接口、不改行为",但模型输出总有不确定性,代码审查不可省。

Q:支持多大的代码? 单次 20000 字符以内,建议 300 行以内。更大的文件按函数拆分。

Q:能只重构一个函数吗? 可以,只把那个函数贴进来就行。

Q:为什么用 deepseek-coder? 在代码任务上表现稳定,是本地小体量模型里性价比较好的选择。你可以通过 OLLAMA_MODEL 换成任何 Ollama 模型。

注意:Ollama 上的 deepseek-coder 标签实际是 约 776MB 的小体量版本,并不是原版的 6.7B。算力允许的话,换成 qwen2.5-coder:7b 效果会明显更好。

Q:响应慢怎么办? 换更小的模型(qwen2.5-coder:1.5b)、缩小单次重构范围、或确认本机没有其他任务在抢 GPU。用托管版也能绕开本地算力限制。

贡献

欢迎 Issue 和 PR。特别需要这些方向的帮助:

  • 新的重构模式 —— 你反复手动做的事,可能就是下一个内置能力
  • 语言适配 —— 目前对 Kotlin、Swift、PHP 的支持还比较弱
  • 测试用例 —— 尤其是"重构后行为保持一致"的验证用例

提 PR 前请确认:代码有中文注释、不含硬编码密钥、通过现有测试。

许可证

MIT —— 可自由商用、修改、分发。


如果这个项目帮你省下了清理遗留代码的时间,给个 ⭐ 是最好的鼓励。

赞助这个项目 · 提交 Issue

الأسئلة الشائعة

ما هو Code Refactor؟

Refactor legacy code into modern, idiomatic code without changing its behavior.

كيف أثبّت Code Refactor؟

يعمل كخادم بعيد. في Claude Code: claude mcp add --transport http code-refactor 'https://code-refactor-api.app.workbuddy.host/mcp'. وفي العملاء الآخرين، الصق إعداد JSON من هذه الصفحة في إعدادات MCP الخاصة بهم.

هل يحتاج Code Refactor إلى مفتاح API؟

نعم. يتطلب OPENAI_API_KEY، وتضبطها في إعداداته.

هل Code Refactor مفتوح المصدر؟

نعم. شيفرته متاحة على GitHub بترخيص MIT.

من يصون Code Refactor؟

ينشره zhouhengchang. يدرجه AI.tn لكنه لا يصونه ولا يوصي به.

من سجل MCP الرسمي. الإدراج ليس توصية: راجع شيفرة الخادم وصلاحياته قبل منحه الوصول إلى بياناتك.