欢迎贡献!本指南说清楚怎么加新组件 / 怎么改老组件 / 怎么确保不被上游变更打破。
- 零外部依赖(核心包):trace-context / permission-policy-engine / project-container 三个核心包只依赖 Node 内置 API。新组件如果需要外部依赖,请先讨论。
- adapter 装饰器不 patch 内核:新增组件不应该 monkey-patch MyAgents Runtime,而要通过
withPolicyEngine/withNewTrace这类装饰器接入。 - 数据带
version: "1.0":每个持久化文件(config.json / ndjson)必须有版本字段,schema 升级走 migration。 - fail-closed 默认行为:policy / auth 类组件默认 deny / ask,不要默认 allow。
- 审计独立:每个写入操作走 ndjson 落盘,且审计文件独立于业务数据目录(业务数据损坏也能查历史)。
- 损坏行静默跳过:reader 不能因为一行坏掉就 throw。
以 "Logging 组件" 为例。
mkdir -p packages/logging-component/{src,tests}{
"name": "@yourname/logging-component",
"version": "0.1.0",
"type": "module",
"license": "AGPL-3.0",
"engines": { "node": ">=22" }
}- 导出 纯函数 + 类型(不要导类,避免单例污染)
- 依赖 Node 内置 API 即可
- 入口文件用 .ts 后缀(用
--experimental-strip-types跑测试)
最少 8 个测试覆盖:
- happy path(2 个)
- 边界(empty / max / min)
- 错误(invalid input / file not found / permission denied)
- 性能 / 大数据(防爆)
- 损坏行处理
- 跨包 / 版本升级兼容
在 packages/openclaw-plugins/openclaw-plugin-{name}/ 写:
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
const plugin = {
id: "{name}",
name: "{Name}",
register(api: OpenClawPluginApi) {
api.registerCli(({ program }) => {
program.command("myagents-{name}").action(...);
});
},
};
export default plugin;加上 openclaw.plugin.json:
{
"id": "{name}",
"name": "{Name}",
"version": "0.1.0",
"main": "./index.ts"
}参考现有 mountPermissionPolicy / mountProjectContainer 模式:
export async function mountLogging(api: OpenClawPluginApi, cfg: PluginConfig) {
// 独立 try-catch,失败不阻塞其他组件
const instance = new LoggingCore({ logDir: cfg.log_dir });
(api as any).logging = instance;
}mountLogging(api, cfg).catch(err =>
console.warn("[myagents-components] Logging mount failed:", err)
);在 tests/integration.test.ts 加新场景,验证你的组件和其它组件协同工作。
- 在 ROOT
README.md测试矩阵加一行 - 在
CHANGELOG.md加 unreleased 条目
npm test确保所有测试通过。
- TypeScript with
--experimental-strip-types - 用 ESM(
"type": "module"),不用 CommonJS - 用
node:test写测试,不用 jest / vitest - 优先用 Node 内置 API(fs/path/crypto),不引入 lodash / axios
- 中文注释 OK,用户可见的 CLI 输出必须是英文
- 所有测试通过(
npm test) - 新组件带
version: "1.0"字段 - 失败有优雅降级(不 throw)
- 没有引入新的 npm 依赖(核心包)
- OpenClaw 插件有
openclaw.plugin.jsonmanifest - 跨包集成测试覆盖新场景
- ROOT README + CHANGELOG 已更新
Title: feat: 加 XX 组件(短描述)
## Why
背景 / 解决什么 issue / 动机
## What
新增什么 / 改了什么
## 测试
- 新增 X 个单测
- 新增 Y 个集成场景
- npm test 跑通截图
## 抗"全丢"特性
- 数据带 version
- 失败降级
- 审计独立
Closes #NNN
有问题在 GitHub Issues 开 issue,或者直接看 knowledge/ 目录下的设计文档。