rclone 贡献者开发指南:从 Bug 报告、三层测试到新增后端的完整工程实践
本指南以仓库根目录的 CONTRIBUTING.md 为骨架,系统梳理 rclone("rsync for cloud storage")开源项目面向贡献者的全套工程规范:如何撰写一份高质量的 Bug 报告、如何用 Go 从源码构建并在 Git/GitHub 上提交改动、项目三层测试体系(代码质量检查、单元测试、集成测试)怎么跑、新增后端 / 命令 / 插件应遵循的文件组织与文档书写规则。读完本文,你将掌握一套可直接执行的操作流程,能够以符合 rclone 社区标准的方式提交 Bug 修复或新功能,并理解其背后 Makefile、fs 核心接口与测试框架的设计逻辑。
一、写出一份高质量 Bug 报告
rclone 的维护者将用户问题分成两类:提问与缺陷。如果你只是不确定某个行为是否正常,或需要使用建议,应优先在官方论坛提问,而不是直接提 Issue——Issue 通道应当留给可以复现的真实缺陷。
正式提交 Issue 之前,建议先用最新测试版(beta 版)复现一次,很多问题在新版本中已经修复。一份合格的 Bug 报告在描述问题之外,应尽量包含以下可复现信息:
- rclone 版本:
rclone version的输出(仓库根目录的 VERSION 文件记录当前版本号,cmd/version目录对应命令实现); - 操作系统与位数:例如 "Windows 10, 64 bit";
- 你正在执行的命令:例如
rclone copy /tmp remote:tmp; - 带
-vv的完整日志:例如rclone -vv copy /tmp remote:tmp的输出。-vv会让 fs/log 输出全量调试信息,是定位问题最快的手段; - 若日志包含密钥:先用文本编辑器打开日志,把敏感信息(token、密码等)打码后再粘贴,防止凭据泄露。
从仓库文档侧看,docs/content/bugs.md 是面向用户补充的故障排查入口,Issue 之外可参照其思路先自查。
二、从零开始搭建本地开发环境
rclone 采用"Fork → Clone → 本地编译 → 功能分支 → PR"的标准 GitHub 协作流。Contributing 文档假设你已具备基本的 Git 与 Go 环境。
2.1 克隆仓库并配置远端
先把本仓库克隆到本地,将官方源重命名为 upstream,再把自己的 Fork 添加为 origin:
git clone https://gitcode.com/GitHub_Trending/rc/rclone.git
cd rclone
git remote rename origin upstream
# 如果 GitHub 账号配置了 SSH 密钥:
git remote add origin git@github.com:YOURUSER/rclone.git
# 否则使用 HTTPS:
git remote add origin https://github.com/YOURUSER/rclone.git
upstream 用于同步官方主分支,origin 用于推送你自己的分支。本指南后续终端命令默认都在这个 rclone 目录内执行。
2.2 安装 Go 并验证编译
安装 Go 后先确认版本:
go version
然后编译并运行属于你自己的 rclone:
go build
./rclone version
文档特别提示:用 make 代替 go build 可以获得更精确的版本号并支持更多构建选项。仓库根目录的 Makefile 中 rclone: 目标正是读取 git 版本信息拼接 LDFLAGS 后再编译,产物会带上准确的 git commit 标识,便于后续提交 Issue 或 PR 时定位代码状态。
2.3 创建功能分支开始开发
git checkout -b my-new-feature
如果你尚未配置好编辑器,可以参考 Go 社区主流的 IDE/编辑器插件;动手前最好先通读下文"源码结构地图"一节,快速定位改动落点。开发完成后,先在改动所在的目录跑单元测试:
cd folder/with/changed/files
go test -v
注意:部分单元测试依赖名为 TestXXX 的测试远端(例如 TestSwift),没有配置对应远端时相关测试会被跳过(详见"后端单元测试"小节)。简单的 Bug 修复做到这一步通常已经足够;涉及面更广的改动请继续阅读下面的"测试体系"章节。
三、AI 辅助贡献:欢迎但责任在作者
rclone 明确欢迎开发者使用 AI 编码助手(Claude Code、Codex、Cursor、Gemini CLI 等)辅助编写贡献代码。仓库根目录专门放置了 AGENTS.md,用于向 AI 工具描述项目约定;写作本文档的仓库中还一并提供了 CLAUDE.md 供相关工具参考。使用 AI 工具时,应把 AGENTS.md 指向工具,让生成的代码贴合 rclone 的风格。
但无论是否使用 AI,对提交的代码负责的都是你本人。在发起 Pull Request 之前必须确认:
- 你能理解改动中的每一行,并能解释其正确性——reviewer 提问时应能不借助工具直接作答;
- 你确实编译并运行过:最低要求是
go build与make quicktest全部通过;改动后端时,还应尽可能对真实远端跑后端测试; - 改动是经过验证的真实修复/功能,而非"看起来合理"的猜测。无法编译、跑不过测试、使用了不存在的 API、或者与描述不符的 AI 生成 PR,都是在浪费维护者时间,很可能直接被关闭;
- 你已删减注释。AI 倾向于添加大量复述代码语义或叙述改动过程的冗余注释,请裁减到与 AGENTS.md 规定的代码注释风格一致。
一句话总结:AI 助手是帮助你贡献的工具,而不是替代你理解与测试自己工作的借口。
四、Git 与 GitHub 协作工作流
4.1 提交与修改提交
遵循"Commit message 规范"一节的规则组织提交信息:
git checkout my-new-feature # 切换到你的分支
git status # 查看新增与修改的文件
git add FILENAME # 选中 FILENAME 进入暂存
git status # 再次确认待提交内容
git commit # 执行提交
git log # 查看提交记录,按 q 退出
想修改最近一次提交的信息或内容:
git commit --amend
如果被 amend 的提交已经 push 到 GitHub,则需按下文方式强制替换远端历史。
4.2 替换已推送的提交
强制改写分支历史前,应让协作者知情:
git push --force origin my-new-feature
4.3 让改动基于最新的 master
当被要求"rebase 到最新上游"时:
git checkout master
git fetch upstream
git merge --ff-only
git push origin --follow-tags # 可选:同步更新你在 GitHub 上的 fork
git checkout my-new-feature
git rebase master
rebase 的是已推送的提交时,同样需要强制推送替换。
4.4 合并(Squash)多个提交
当被要求把多个提交压成一个时,先数一下要合并的数量:
git log # 例如要合并最近 2 个提交
git reset --soft HEAD~2 # 撤销最近 2 个提交,但保留改动
git status # 检查一切符合预期
确认无误后创建新的合并提交:
git commit # 把撤销的提交合并为一个新提交
如果中途想反悔,可用 reflog 回滚:
git reflog # 确认 HEAD{1} 是你之前的状态
git reset --soft 'HEAD@{1}' # 回滚到之前的状态
经验丰富或遇到复杂情况时,也可以直接用 git rebase -i master。
4.5 持续集成
rclone 目前使用 GitHub Actions 进行构建与测试;Fork 后该配置会自动生效,可从仓库的 Actions 页查看结果。每次 push 分支到 GitHub 时,CI 会自动运行 quicktest(见下节),这是一条隐形的质量红线。
五、rclone 的三层测试体系
rclone 的测试全部建立在 Go 官方 testing 框架之上,并在其上方叠加了针对云存储场景的集成测试机制。对贡献者而言,可把测试分为三层逐级验证。
5.1 第一层:代码质量检查(lint)
安装 golangci-lint 后,可以本地复现 CI 中的静态检查。执行方式二选一:
make check
golangci-lint run ./...
查看根目录 Makefile 中 check: 目标(第 110-114 行)可知,它实际运行两件事:golangci-lint run ./... 与 bin/markdown-lint。也就是说,代码风格统一与 Markdown 格式检查会一起把关。这类测试专门拦截低级错误(例如忘记检查 error 返回值),跑通它们意味着你的代码与其他后端保持同一套编码标准。
首次使用可能需要安装 golangci-lint,仓库已封装好:
make build_dep
对应 Makefile 中的目标会用 bin/get-github-release.go 自动下载解压匹配版本的 golangci-lint。
5.2 第二层:快速测试(quicktest)
在项目顶层运行全部测试:
go test -v ./...
或使用 make 封装:
make quicktest
Makefile 中 quicktest 的实际命令值得注意:
RCLONE_CONFIG="/notfound" go test $(LDFLAGS) $(BUILDTAGS) -timeout 20m ./...
它通过 RCLONE_CONFIG="/notfound" 让测试进程读不到你机器上真实的 rclone 配置文件,避免本机远端配置污染测试结果;-timeout 20m 则是为 cmd/gitannex 的端到端测试留出余量(在慢速 CI 上它们可能超过 Go 默认的 10 分钟)。当你 push 分支后,CI 会跑同样的 quicktest。
5.3 第三层:后端单元测试与集成测试
rclone 同时包含单元测试与集成测试。由于对云存储逐接口打桩既困难也无意义,rclone 的单元测试允许直接跑在真实远端上,机制是在默认配置文件中创建名字特殊的远端。
以改动 drive 后端为例,先在配置文件中建立名为 TestDrive 的远端,然后在 drive 目录跑单元测试——如果 TestDrive: 未定义,对应测试会被自动跳过:
cd backend/drive
go test -v
接着跑覆盖 rclone 全部核心操作(copy、move、sync……)的集成测试。它们默认针对本地文件系统执行,但同样可以指定任意远端:
cd fs/sync
go test -v -remote TestDrive:
go test -v -remote TestDrive: -fast-list
cd fs/operations
go test -v -remote TestDrive:
其中 -fast-list 用来额外验证后端实现了 ListR(快速目录列举)时路径是否正确。若希望用集成测试框架统一跑这些测试并生成 HTML 报告、带失败重试,则从项目根目录执行:
go run ./fstest/test_all -backends drive
fstest 目录就是为此设计的集成测试基础设施:fstest/fstests 存放可作用于任意后端的通用用例,fstest/test_all 是统一调度器,其被测后端清单在 fstest/test_all/config.yaml 中声明——这也是"新增后端"章节要求改动的文件。
5.4 全量集成测试
如果要在所有远端上跑全部集成测试,回到项目根目录执行:
make check
make test
命令可能依赖额外 Go 包,先安装:
make build_dep
Makefile 中 test: 目标会先编译出 test_all 二进制再执行,并把日志写入 test_all.log。全量集成测试每天在官方集成测试服务器上自动运行,可在对应站点查看结果。
六、源码结构地图:改动前先定位模块
Contributing 文档按顶层目录描绘了 rclone 的模块化布局,这里结合仓库实际情况逐项说明:
| 顶层目录 | 职责 | 关键入口/子模块 |
|---|---|---|
backend |
对接各云厂商的文件系统后端 | backend/all 通过空导入一次性注册所有后端;其下每个子目录是一个独立后端,如 backend/drive、backend/s3 |
bin |
构建与维护用脚本 | make_backend_docs.py、manage_backends.py、markdown-lint 等 |
cmd |
全部 rclone 命令 | cmd/all 汇总加载所有命令;命令文档由源码自动生成 |
cmdtest |
命令、flag、环境变量的端到端测试 | 独立于单元测试的验收层 |
docs |
文档与官网 | docs/content 手工维护正文;docs/content/commands 与 docs/content/flags.md 等为自动生成 |
fs |
核心定义(保持最小化) | fs/types.go 定义接口;accounting 限速统计、filter 过滤、operations 同步原语、sync 目录同步、walk 目录遍历 |
fstest |
集成测试框架 | fstests 后端通用用例、test_all 统一调度、mockdir/mockobject 打桩 |
graphics |
网站用图片素材 | —— |
lib |
后端共享库 | rest REST 抽象、oauthutil OAuth 辅助、pacer 带退避的重试、encoder 路径编码、plugin Go 插件支持 |
librclone |
内存态嵌入 API | 供其他语言/程序内嵌 rclone |
vfs |
虚拟文件系统层 | 支撑 mount 等命令 |
架构上最关键的是 fs/types.go:一个后端(remote)本质上是实现了 Fs 接口的对象。该接口(第 17 行起)要求至少提供四个核心方法:
List:列举目录下对象与子目录;NewObject:按路径查找对象;Put:把数据上传为对象;Mkdir/Rmdir:创建 / 删除(容器或桶)目录。
在此基础上,fs/features.go 以"可选特性"的方式表达不同云端的能力差异(是否支持 ListR、服务器端复制、元数据等),接口注释明确指出"可选接口见 features.go"。这正解释了为什么新后端只要实现核心接口、再尽可能实现可选方法,就能无缝接入 rclone 庞大的命令与同步框架。
七、编写与维护文档的工程规范
rclone 对文档的要求几乎和代码一样严格:绝大多数文档来自 docs/content 下的 Markdown 源文件,且大量内容是由源码自动生成的。
7.1 Markdown 规范与自动检查
文档源码遵循 CommonMark 规范并兼容 GitHub Flavored Markdown(GFM)。格式与风格由 lint 检查——即上文 make check 里的 bin/markdown-lint——在 PR 阶段强制把关。规范大体遵循 Ciro Santilli 的 Markdown Style Guide,可将其作为写作参考。
7.2 标题锚点的"坑"
网站 HTML 由 Hugo 从 Markdown 生成,但 Hugo 生成锚点标题的算法与 GitHub 渲染器不同:Hugo 会忽略行首的 - 等字符。例如标题为 --config string 时:
- 官网文档内链必须写成
#config-string; - GitHub 预览页里正确写法却是
#--config-string。
因此文档内的标题锚点链接要按 Hugo 规则书写,且 GitHub 的 Markdown 预览不能作为链接是否正确的可靠验证。
7.3 分清"手工维护"与"自动生成"
- 命令文档(
docs/content/commands/rclone_*.md)整体自动生成,改动必须落在对应命令的 Go 源码上。例如rclone ls的帮助文本写在 cmd/ls/ls.go 的 cobra 命令Long:字段中,由make commanddocs(内部调用rclone gendocs --config=/notfound docs/content/)重新生成; - 部分文档含"自动生成段落",标记有
autogenerated注释(如docs/content下各后端文档中的 options 部分),只能编辑对应.go源码再重新生成; - 仓库根目录的
MANUAL.*与rclone.1也是自动生成产物; - 自动生成在发布流程完成。可查看 Makefile 中
doc:、backenddocs:、rcdocs:、commanddocs:等目标了解机制。为功能写文档时无需手动运行这些命令。
7.4 新增全局 flag
新增通用 flag(非后端专属)时,把它写进 docs/content/docs.md,且按字母序排列。
7.5 新增后端 option:Help: 字段的艺术
后端专属参数定义在 Go 源码里,通过 Help: 字段被 rclone config 与文档共用。真实示例见 backend/ftp/ftp.go 的 Options 注册——每个选项都有 Name 与 Help,例如 host 的 Help 是 "FTP host to connect to.\n\nE.g. \"ftp.example.com\"."。书写规范:
- 首句写该选项最重要的一句话,单行一个句子:
- 该文本会用作命令行 flag 帮助,并会与其他信息(如默认值)拼接,因此必须写成完整句子;
- 以句号结尾(文档显示句号,生成 flag 帮助时自动去掉);
- 尽量控制在 80 字符内,减少终端换行;
- 更多细节另起新段落(空一行
"\n\n"分隔):与 Markdown 一样,单个换行被忽略,两个换行才产生新段落;此段会显示在rclone config交互与文档中(后者由make backenddocs注入,通常在发布前执行); - 枚举型选项使用
Examples:字段:每个枚举值有自己的Help:,与主选项不同,它们以无序列表渲染,因此单个换行即可产生新列表项;像国家名这类枚举值以不加句号为佳。
验证结果用:
make backenddocs
该目标(Makefile)实际执行 bin/make_backend_docs.py,会更新 docs/content 下各后端文档的自动生成段落。要点:
- 需要本机装有 Python;
- 可带后端名参数只更新某个后端:
python3 bin/make_backend_docs.py remote; - 切勿把更新后的 Markdown 提交进 PR:该步骤属于发布流程。自动生成段落若被手工改动会在发布时丢失,因此 CI 有一项 PR 检查会对自动生成段落内的改动报错;自动生成段落之外的手工修改当然要正常提交。
检查最终网页效果可运行:
make serve
它会先构建站点(make website 在 docs 目录执行 hugo),再以 hugo server --logLevel info -w --disableFastRender --ignoreCache 本地起服务供浏览器预览。请重点检查新增链接,尤其留意上文标题锚点算法差异。需要本机装有 Hugo。小改动也可直接使用 GitHub 在线编辑器,但记得锚点差异意味着在线预览不一定完全可靠。
7.6 命令文档
更新命令的文档必须改源码,例如 cmd/ls/ls.go。flag 帮助字符串要求单行单句、句尾不加句号(因为会与其他信息如默认值无修改拼接)。改动合并后,可在每日更新的文档站点(每日 07:00 UTC 同步 master)核验;进入正式版后即出现在主站文档中。
八、Commit Message 规范
第一行是**写给用户(而非开发者)**的变更摘要,并以前缀标注变更目录加冒号。Changelog 只依据这些首行生成,所以务必写好:
- 有更多内容时空一行续写;重点说明为什么需要这次改动——commit 本身展示了改了什么;
- 宁多勿少。对比"改动前 vs 改动后"的行为非常有用;想象 12 个月后忘掉一切的自己;
- 若修复某个 Issue,写
Fixes #1234(可放主题行);不想关闭关联 Issue 则只写#1234使其关联到该 Issue。
短提交示例:
drive: add team drive support - fixes #885
长提交示例:
mount: fix hang on errored upload
In certain circumstances, if an upload failed then the mount could hang
indefinitely. This was fixed by closing the read pipe after the Put
completed. This will cause the write side to return a pipe closed
error fixing the hang.
Fixes #1498
九、依赖管理
rclone 使用 Go Modules(go 1.11+)管理依赖,可以在 GOPATH 之外构建。新增依赖 github.com/ncw/new_dependency:
go get github.com/ncw/new_dependency
go get 会把依赖写入 go.mod 与 go.sum。除非确有必要,不要主动为包添加版本约束。请把 go mod 生成的 go.mod、go.sum 变更与你的代码变更放在同一个 commit 提交。
更新单个依赖:
go get golang.org/x/crypto
同样单 commit 提交。全量更新则用:
make update
对应 Makefile 执行 go get -u -t ./... 与 go mod tidy,把所有模块升级到最新稳定版。这一步通常安排在发布周期早期,给新版本依赖留出充分测试时间。
十、更新一个既有后端
修改后端后,请同时跑它的单元测试与集成测试。假设后端名为 remote:
- 在配置文件中为测试创建名为
TestRemote的配置项; - 进入后端目录跑单元测试:
cd remote
go test -v
- 进入
fs目录跑集成测试:
cd fs
go test -v -remote TestRemote:
更详细的测试说明见上文"测试体系"章节。
十一、从零编写一个新后端
在 rclone 术语中,一个文件系统后端被称为 remote 或 fs。下文以 remote 作示例名。
11.1 前期研究
- 通读 fs/types.go 中定义的接口(
Fs、Info、Object等); - 研读一到两个现存后端作为模板。
11.2 起步要点
- 创建
backend/remote/remote.go(从相似后端复制):- 目录型后端(无桶概念、需要目录缓存)建议参照 backend/box,它示范了 dircache 的用法;
- 桶型后端建议参照 backend/b2;
- 把新后端加入 backend/all/all.go 的导入列表,与其他几十个后端一起通过空导入统一注册;
- 基于 HTTP 的后端,最易维护的方式是使用 lib/rest 模块;若厂商提供了高质量的官方 Go SDK,则优先用 SDK;
- 尽量实现尽可能多的可选方法(Features),后端越好用;
- 使用 lib/encoder 确保任意路径名都能被正确编码,并用
rclone info确定所需编码规则:
rclone purge -v TestRemote:rclone-info
rclone test info --all --remote-encoding None -vv --write-json remote.json TestRemote:rclone-info
go run cmd/test/info/internal/build_csv/main.go -o remote.csv remote.json
把生成的 remote.csv 用表格软件打开分析编码问题。
11.3 快速合入的硬性准则
- 务必用 lib/rest 实现 REST 风格后端及 XML/JSON 解析;
- 务必使用 fs/fshttp 提供的 Client 或 Transport——它免费带来
--dump bodies、--tpslimit、--user-agent等能力; - 务必严格照抄示例后端:代码顺序、函数名、布局、结构保持一致;不要随意挪动结构,不要删除注释;
- 不要把后端拆成
fs.go与object.go两个文件(个别老后端是这种风格,不要模仿); - 务必把 API 类型定义放在独立文件,首选
api/types.go; - 请牢记:rclone 有大量后端需要长期维护,让它们彼此尽量相似是最高优先级。
11.4 单元测试
- 创建名为
TestRemote的配置项供测试使用; - 创建
backend/remote/remote_test.go,从参照后端复制并调整; - 用
go test -v保证全部通过。
11.5 集成测试与合入门槛
- 把新后端加入 fstest/test_all/config.yaml,之后即可用框架跑测试:
go run ./fstest/test_all -backends remote
- 或手动跑集成测试:
cd fs/operations
go test -v -remote TestRemote:
cd fs/sync
go test -v -remote TestRemote:
- 若后端实现了
ListR,额外验证 fast-list 路径:
go test -v -remote TestRemote: -fast-list
新后端合入前还需要满足两点:
go run ./fstest/test_all -backends remote干净通过(并把结果附在 PR 中);- 提供该后端的一个测试账号,以便维护者接入集成测试服务器持续验证。无法测试的后端极易腐坏,甚至可能被移除。
11.6 后端文档
把后端写进文档,remote 列表按全名(如 Google Drive 对应 drive)字母序排列,本地文件系统放最后。
先添加数据文件 docs/data/backends/remote.yaml(该目录现存每个后端一份 YAML),用于生成总览表格与分级信息:
bin/manage_backends.py create docs/data/backends/remote.yaml
# 编辑补全字段
bin/manage_backends.py features docs/data/backends/remote.yaml
然后编辑以下文件:
README.md—— GitHub 主页;docs/content/remote.md—— 主文档页(后端 options 由make backenddocs自动注入,务必保留autogenerated options注释标记,再用bin/make_backend_docs.py remote刷新);docs/content/docs.md—— config 章节的 remote 清单;docs/content/_index.md—— 官网首页;docs/layouts/chrome/navbar.html—— 网站导航;bin/make_manual.py—— 把页面加入docs常量。
写完后运行 make serve 在浏览器里检查页面与链接(内、外部)是否正常。
十二、其他扩展路径:S3 厂商、插件与 out-of-tree
12.1 新增 S3 厂商
S3 是独立的生态子问题,Contributing 文档直接指向专用指南:backend/s3/README.md。其 provider 配置以 YAML 形式维护在 backend/s3/provider,新厂商通常只需按模板新增 YAML 配置,无需改动核心代码。
12.2 编写 Go 插件(plugin)
后端、命令等新特性也可以"树外"通过 Go 插件方式提供:改动保存在动态加载的文件里,而非编译进主二进制。适合无法合入上游或不想维护 fork 的场景。相关源码在 lib/plugin,其 plugin.go 的 init() 在启动时读取 RCLONE_PLUGIN_PATH 环境变量指定目录、逐一尝试打开匹配文件。
使用要点:
- 命名:必须形如
librcloneplugin_KIND_NAME.so,KIND取backend、command或bundle。例如 PiFS 后端插件应命名为librcloneplugin_backend_pifs.so; - 加载:目前仅支持 macOS 与 Linux(Windows 受 Go 本身限制);要求 rclone v1.50 或更高;
$RCLONE_PLUGIN_PATH目录下的所有插件都会被加载;该环境变量不存在则插件功能整体禁用; - 版本匹配:插件必须用与宿主完全相同的 rclone 源码与 Go 版本编译,否则无法工作。
构建方法:把你的扩展放到独立仓库,顶层包名改为 main,确认 rclone --version、插件依赖的 rclone 版本与本地 Go 版本一致后执行:
go build -buildmode=plugin -o PLUGIN_NAME.so .
12.3 树外保留后端或命令
rclone 本身设计为高度模块化,不借助插件也可以把私有后端或专用命令放在主源码树之外——且全平台支持(不限于 macOS/Linux),比插件方案门槛更低。典型场景是访问企业专有系统的后端、或满足特殊需求的命令。官方提供了一个 tree 外后端示例(memory 后端改名为 ram 的样板),可作为实现参考,对应的内存版后端本体见 backend/memory。
十三、发布流程
发布操作有独立文档,见根目录 RELEASE.md。它与本文的关系是:贡献者的文档、MANUAL.*、rclone.1 等产物会在发布流程中统一重新生成,因此贡献阶段无需手动维护它们。
参考文件速查
- 总规范:CONTRIBUTING.md(本文唯一事实主体)
- 目录结构与工具约定:AGENTS.md、CLAUDE.md
- 构建与测试目标:Makefile(
quicktest/check/test/backenddocs/doc/serve/update等) - 核心接口:fs/types.go、fs/features.go
- 后端注册与实例:backend/all、backend/box、backend/b2、backend/ftp(Options
Help:示例)、backend/s3/README.md - 测试设施:fstest/test_all/config.yaml、
fs/operations、fs/sync - 文档源:docs/content/docs.md、docs/content/flags.md、docs/data/backends、docs/layouts/chrome/navbar.html、bin/make_backend_docs.py、bin/manage_backends.py
- 插件机制:lib/plugin/plugin.go
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00