memory-gateway-sync
v0.13.0
Published
Memory 双写插件:fs.watch 感知变化后同步到外部 Gateway
Readme
OpenClaw 插件侧方案
插件信息
| 项目 | 值 |
|------|----|
| 插件 ID | memory-gateway-sync |
| kind | generic(不替换 memory slot) |
| 安装路径 | /home/node/.openclaw/extensions/memory-gateway-sync/ |
| 作用 | 监听 MEMORY.md / memory/*.md 变化,POST 到 Gateway |
目录结构(部署到容器内)
memory-gateway-sync/
├── openclaw.plugin.json
├── package.json
└── src/
└── index.tsopenclaw.plugin.json
{
"id": "memory-gateway-sync",
"name": "Memory Gateway Sync",
"description": "fs.watch 监听 MEMORY 文件变化,双写到外部 Gateway",
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"gatewayUrl": {
"type": "string",
"description": "Gateway POST 地址"
},
"gatewayToken": {
"type": "string",
"description": "Bearer Token"
},
"debounceMs": {
"type": "number",
"default": 1500,
"description": "防抖延迟毫秒数"
},
"agentId": {
"type": "string",
"description": "当前 agent 标识,写入 Gateway 时携带"
}
}
}
}package.json
{
"name": "@openclaw/memory-gateway-sync",
"version": "0.1.0",
"type": "module",
"openclaw": {
"extensions": ["./src/index.ts"]
}
}openclaw.json 配置(在容器内 /home/node/.openclaw/openclaw.json 中添加)
"plugins": {
"entries": {
"memory-gateway-sync": {
"enabled": true,
"config": {
"gatewayUrl": "http://172.22.39.89:8765/api/memory/ingest",
"gatewayToken": "your-secret-token",
"debounceMs": 1500,
"agentId": "main"
}
}
}
}核心逻辑说明(src/index.ts)
启动时
- 从插件配置读取
gatewayUrl、gatewayToken、debounceMs - 计算 workspace 路径:
~/.openclaw/workspace/ - 确保
MEMORY.md和memory/目录存在 - 分别挂载
fs.watch
文件变化时
- 记录文件路径,启动防抖计时(同一文件 debounceMs 内只处理一次)
- 计时结束后:读取文件完整内容
- 构造 payload:
{ path, content, agentId, syncedAt } fetch POST到 Gateway- 成功:打 info 日志;失败:打 warn 日志,不抛异常
不处理的情况
- 非
.md文件的变化 memory/二级子目录(暂不递归,可后续扩展)- 文件删除事件(只关心写入)
关键约束
- Gateway 失败不能影响 OpenClaw 正常运行(所有 Gateway 调用都 try/catch)
- 不替换 memory-core,不干预读取链路
- 只监听两个位置:
MEMORY.md和memory/,不监听其他文件
