# 开源与贡献 ReMe 已开源,项目仓库托管于 GitHub: **https://github.com/agentscope-ai/ReMe** --- ## 如何参与贡献 感谢你对 ReMe 的关注。ReMe 是一个面向 Agent 的、文件优先的自进化记忆系统,欢迎通过问题反馈、文档改进、测试补充、Bug 修复和新能力开发参与贡献。 如果是第一次本地运行,先看 [快速开始](./quick_start.md)。如果改动涉及运行时分层、Job、Step 或组件,先看 [ReMe 代码框架](./framework.md);如果改动涉及 workspace 目录、frontmatter、wikilink 或 chunking,先看 [Memory as File](./memory_as_file.md)。 ### 1. 开始之前 在投入实现前,建议先完成以下检查: - 查看 [Open Issues](https://github.com/agentscope-ai/ReMe/issues),确认是否已有相关问题或讨论。 - 如果相关 Issue 已存在且仍开放,请在评论中说明你想处理它,避免重复工作。 - 如果没有相关 Issue,请新建 Issue 描述背景、目标行为、可能的实现方向和影响范围。 - 对较大的功能变更,建议先和维护者对齐接口、配置、兼容性和测试策略,再提交实现。 ### 2. 本地开发环境 ReMe 的核心代码位于: - `reme/`:Python 包源码,包括配置、组件、服务、Job、Step、schema 和工具函数。 - `pyproject.toml`:项目元数据、依赖、可选依赖、命令入口和测试配置。 - `tests/`:单元测试和集成测试。 项目要求 Python 3.11 及以上。建议使用虚拟环境开发: ```bash python -m venv .venv source .venv/bin/activate pip install -e reme_studio -e ".[dev,full]" cd reme_studio npm ci npm run build:static cd .. pre-commit install ``` ### 3. 代码开发范式 开发 ReMe 代码前,请先阅读 [ReMe 代码框架](./framework.md)。新增或修改核心能力时,应遵照其中描述的分层与调用链: ```text CLI / Client -> Service -> Application -> Job -> Step -> Component / Workspace ``` 也就是说: - 面向用户或外部系统暴露的能力,优先通过 Job 编排,再由 Service 暴露为 CLI、HTTP 或 MCP 可调用接口。 - 可复用基础设施放在 `reme/components/`,通过 `BaseComponent.bind()` 声明组件依赖。 - 业务原子操作放在 `reme/steps/`,通过 `BaseStep.Ref` 访问 file store、agent wrapper、catalog、LLM 等组件。 - 请求、响应和持久化数据结构放在 `reme/schema/` 或 `reme/enumeration/`,不要把隐式结构散落在 Step 内部。 - 配置驱动的默认行为写入 `reme/config/default.yaml`,并保持默认配置可启动、可测试。 新增 Step 或 Job 时,特别注意以下约定: - 使用 `@R.register("")` 注册实现,注册名应稳定、清晰,并与配置中的 `backend` 对齐。 - 新增 Step 文件后,确认所在包的 `__init__.py` 会 import 该模块,否则注册表不会加载它。 - Step 只处理单个业务原子操作;跨步骤流程应放在 Job 配置或专门的编排 Step 中。 - Job 负责组合 Step,并决定普通、流式、后台或定时执行方式;是否对外暴露由 `enable_serve` 控制。 - Step 需要组件时优先使用 `BaseStep.Ref`,不要在 Step 内重新构造全局组件或绕过 `ApplicationContext`。 - 涉及文件、索引、图谱、front matter、wikilink 的行为,应保持 workspace-relative 路径语义一致。 - 新能力应补充 `tests/unit/` 中的快速测试;跨组件、LLM、embedding 或服务行为再放入 `tests/integration/`。 ### 4. 代码与文档修改建议 根据改动类型选择合适的入口: | 改动类型 | 主要位置 | 建议 | |----------------|-------------------------------------------------------|------------------------------------------------------------------------------------------------------| | 配置或启动行为 | `reme/config/`、`reme/application.py`、`reme/reme.py` | 保持默认配置可运行,避免破坏现有 CLI、HTTP 和 MCP 入口 | | 组件能力 | `reme/components/` | 优先复用 `BaseComponent`、registry 和上下文对象 | | Job 或 Step | `reme/components/job/`、`reme/steps/` | 遵照 [ReMe 代码框架](./framework.md) 的 Job -> Step 范式,保持请求、响应 schema 清晰,并补充对应测试 | | 数据结构 | `reme/schema/`、`reme/enumeration/` | 注意序列化兼容性和已有 front matter、wikilink 语义 | | 工具函数 | `reme/utils/` | 保持函数边界小,并用单元测试覆盖边界情况 | | 用户文档 | `docs/zh/`、`README.md` | 当用户可见行为变化时同步更新文档 | 如果改动涉及 LLM、embedding、外部服务、文件监听或后台任务,请同时说明依赖条件、失败行为和本地验证方式。 ### 5. 提交信息格式 建议遵循 [Conventional Commits](https://www.conventionalcommits.org/) 规范,以保持历史记录清晰。 格式: ```text (): ``` 常用类型: - `feat`:新功能 - `fix`:Bug 修复 - `docs`:仅文档 - `style`:代码风格调整,不改变行为 - `refactor`:重构,不修复 Bug 也不添加功能 - `perf`:性能改进 - `test`:添加或更新测试 - `chore`:构建、工具或维护工作 示例: ```bash feat(search): add link expansion option fix(file-graph): handle pending wikilinks after move docs(memory): update auto memory guide test(config): cover default yaml parsing chore(pre-commit): update lint hooks ``` ### 6. Pull Request 标题 PR 标题建议使用相同格式: ```text (): ``` 要求: - 类型使用 `feat`、`fix`、`docs`、`test`、`refactor`、`chore`、`perf`、`style`、`build` 或 `revert`。 - 作用域使用小写字母、数字、连字符或下划线。 - 描述保持简短,说明这次 PR 的实际效果。 示例: ```text feat(auto-memory): persist source conversation metadata fix(markdown): keep wikilink aliases during edit docs(zh): add contribution guide ``` ### 7. 提交前检查 提交或发起 PR 前,请至少运行: ```bash pre-commit run --all-files pytest ``` 如果只改了局部代码,可以先运行更小范围的测试: ```bash pytest tests/unit/test_search_step.py pytest tests/unit/test_reme_cli.py ``` 如果 `pre-commit` 自动修改了文件,请提交这些修改后重新运行检查,直到全部通过。 当前 pre-commit 配置包括 YAML/TOML/JSON 检查、私钥检测、尾随空格检查、`black`、`flake8`、`pylint` 和 `pyroma`。代码格式主要遵循: - `black --line-length=120` - `flake8 --max-line-length=120` - `pylint --max-line-length=120` 部分集成测试可能依赖 LLM、embedding 或外部服务配置。若无法在本地完整运行,请在 PR 描述中说明跳过原因和已完成的替代验证。 ### 8. 测试要求 请根据改动风险补充测试: - 修复 Bug 时,优先添加能复现问题的回归测试。 - 新增 Step、Job 或组件时,至少补充核心路径和失败路径测试。 - 修改索引、图谱、wikilink、front matter、文件读写等共享逻辑时,补充边界用例。 - 修改 CLI、服务或配置解析时,覆盖用户可见入口。 - 文档-only 改动通常不需要新增测试,但仍建议运行 `pre-commit run --all-files`。 测试文件按现有结构放置: - `tests/unit/`:无需真实外部服务的快速测试。 - `tests/integration/`:跨组件或依赖外部配置的集成测试。 ### 9. 文档贡献 当你的修改会影响用户如何安装、配置、调用或理解 ReMe 时,请同步更新文档。 文档位于: ```text docs/ ``` 建议文档保持: - 标题明确,直接说明能力或流程。 - 命令可以复制运行。 - 涉及路径时使用仓库内真实路径,例如 `reme/config/default.yaml`、`reme/steps/`、`tests/unit/`。 - 涉及默认行为时,以当前代码和 `pyproject.toml`、默认配置为准。 --- ## 获取帮助 - Bugs 和功能请求:[GitHub Issues](https://github.com/agentscope-ai/ReMe/issues) - 项目主页:[GitHub Repository](https://github.com/agentscope-ai/ReMe) - 文档站点:[https://reme.agentscope.io](https://reme.agentscope.io) --- 感谢你为 ReMe 做出贡献。你的改进会帮助 Agent 的长期记忆更可读、可控、可维护。