文章

我把 agileconfig 交给我了 openclaw

我把 agileconfig 交给我了 openclaw

我把 AgileConfig 交给了 Openclaw

大家都知道 AgileConfig 是我的开源项目,一般有人提新的需求我是不接的。最近有人提了一个 issue(https://github.com/dotnetcore/AgileConfig/issues/232),正好最近在折腾 AI 写代码,于是我就让 openclaw 给我看看这个 issue,让他给我出出主意。

方案设计

原本以为它会顺着 issue 作者的思路出个方案。事实上它给出的建议远远要比 issue 上原来的想法高级。 Openclaw 给我设计了一个 Sync Plugin 机制,核心思路是让 AgileConfig 在保持原有配置中心角色的同时,能够将配置变更推送到外部存储系统。 这个方案有点惊艳到我了。但是 AI 也不是完美无缺。比如它就没想到同步失败怎么处理。再跟它讨论几轮之后,最终确认了方案。
核心原则:

  • 单向同步:AgileConfig 是唯一的配置写入源,避免双向同步的冲突问题
  • 插件化:同步目标可扩展(etcd、consul、k8s configmap、redis 等)
  • 异步可靠:配置变更异步同步,失败可重试
  • 可选功能:不影响原有核心功能,用户可按需开启
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
┌─────────────────────────────────────────────────────────────────┐
│                      AgileConfig Server                          │
├─────────────────────────────────────────────────────────────────┤
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────────────┐  │
│  │  Admin UI   │───▶│ Config Store│───▶│ WebSocket Push      │  │
│  │  (管理配置)  │    │  (主存储)    │    │ (实时推送给.NET客户端)│  │
│  └─────────────┘    └──────┬──────┘    └─────────────────────┘  │
│                            │                                    │
│                            ▼                                    │
│                   ┌─────────────────┐                          │
│                   │  Sync Engine    │                          │
│                   │  (同步引擎)      │                          │
│                   └────────┬────────┘                          │
│                            │                                    │
│         ┌──────────────────┼──────────────────┐                │
│         ▼                  ▼                  ▼                │
│  ┌────────────┐    ┌────────────┐    ┌────────────┐           │
│  │ EtcdPlugin │    │ConsulPlugin│    │ K8sPlugin  │  ...      │
│  └────────────┘    └────────────┘    └────────────┘           │
└─────────────────────────────────────────────────────────────────┘
         │                  │                  │
         ▼                  ▼                  ▼
    ┌─────────┐       ┌─────────┐       ┌─────────────┐
    │  etcd   │       │ consul  │       │ ConfigMap   │
    └─────────┘       └─────────┘       └─────────────┘
         │                  │                  │
         ▼                  ▼                  ▼
    ┌──────────────────────────────────────────────────┐
    │   Go / Java / Node.js / Python 等原生客户端读取    │
    └──────────────────────────────────────────────────┘

代码实现

接下来,我让 Openclaw 按照这个设计思路去实现代码。整个过程我都是口头描述需求,Openclaw 负责具体的编码工作。这没啥可说的,哗哗哗就写出来了。这个生产力简直了。

主要完成的内容包括:

  • 实现 SyncPlugin 基础框架和契约接口
  • 实现 etcd 同步插件
  • 修复事件总线实例分裂问题
  • 完善配置解析鲁棒性
  • 调整 UI 自动化测试选择器

测试阶段

代码写完后,我同样让 Openclaw 去跑测试。不光是单元测试。我还它设计了一些 e2e 测试的用例。然后它就把前后端全部跑起来以及 etcd 也跑起来。通过 playwright 自己操作浏览器去测试。如果测试失败它会自动分析原因,尝试修复测试脚本或者修复代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# AgileConfig SyncPlugin E2E 测试报告

## 测试结果汇总

- 总计:7
- 通过:7 ✅
- 失败:0 ❌

## 详细结果

- T0-1 Etcd 健康检查 ✅ PASS
- T1-1 App 页面可见 Create 按钮 ✅ PASS
- T2-1 Config API 新增并可查询 ✅ PASS
- T3-1 Config Publish 后待发布计数归零 ✅ PASS
- T4-1 Config 编辑并删除链路 ✅ PASS
- T5-1 UI Add/Edit/Delete + Publish All ✅ PASS
- T6-1 SyncPlugin 发布后写入 etcd ✅ PASS

...

总结

回顾整个过程,我没有写一行代码,没有跑一个测试,完完全全是由 Openclaw 替我完成的。我只是在手机上确认这个过程,给出意见而已。

这个模式可能就是未来程序员写代码的模式——不再是亲手敲击每一行代码,而是与 AI 协作,把精力放在更高层次的设计和决策上。

本文由作者按照 CC BY 4.0 进行授权