feat(agent): 建立 agent 创建规范与数据库自动化

- scripts/new-agent.sh:建库/建号/授权/写 .env/创建 agent/渲染中文模板/自检,幂等且默认拒绝覆盖
- scripts/agent-templates/:5 个中文模板(IDENTITY/SOUL/AGENTS/MEMORY/USER)
- skills/agent-provisioning/:main 创建 agent 的唯一入口与红线(description 覆盖中英触发说法)
- workspace/:修复悬空 gitlink,将 9 个配置文档纳入版本控制(含新增创建 agent 与数据库红线)
- docs/:设计文档(含附录 A 实测发现)、实现计划(含 sudo 事故修正)
- .gitignore:workspace 白名单,避免数据/技能/媒体进入版本库
This commit is contained in:
2026-09-16 11:18:16 +08:00
parent 0b20494f78
commit 83439ee623
22 changed files with 1054 additions and 7 deletions
+23 -5
View File
@@ -420,17 +420,35 @@ PG_PASS="$(grep -E '^PGPASSWORD=' "$ENV_FILE" | head -1 | cut -d= -f2- | tr -d '
`git add "workspace-${WS}/db/"` 同理。
**验收(Task C**
> ⚠️ **实测教训(2026-09-16,已造成真实故障)**
> **绝不要用 `sudo` 跑本脚本**:生产路径是 **yangxuan 的 crontab**root crontab 为空)。
> 用 `sudo` 跑会生成 **root 属主**的备份目录/文件,导致**次日 3:00 的 yangxuan cron 写不进去**
> 备份从此天天失败。实测证据:`workspace-{juaner,wellness,tab}/db` 曾是 root 属主,
> 这 3 个库自 **2026-08-26** 起每天 `❌ 备份失败`(日志 `workspace/db/backup.log`)。
```bash
# 0) 前置:修复 root 属主的 db 目录(否则这 3 个库必然继续失败)
for d in /home/yangxuan/.openclaw/workspace*/db; do
[ -d "$d" ] && [ "$(stat -c %U "$d")" = "root" ] && sudo -n chown -R yangxuan:yangxuan "$d"
done
stat -c '%U:%G %n' /home/yangxuan/.openclaw/workspace*/db # 应全部为 yangxuan:yangxuan
# 1) 语法
sudo bash -n /usr/local/bin/backup-agent-dbs.sh
# 2) 手动跑一次(观察新增 agent 是否被纳入
sudo /usr/local/bin/backup-agent-dbs.sh; tail -20 ~/.openclaw/workspace/db/backup.log
# 3) 确认备份文件落在各 workspace 的 db/ 下且已 gz
bash -n /usr/local/bin/backup-agent-dbs.sh
# 2) 手动跑一次(以 yangxuan 身份,**不加 sudo**
/usr/local/bin/backup-agent-dbs.sh; tail -20 ~/.openclaw/workspace/db/backup.log
# → 期望日志出现「备份目标:…」且成功的库数 = 库真实存在且已在 agents.entries 中的 agent 数
# 3) 确认备份文件落在各 workspace 的 db/ 下且已 gz、属主为 yangxuan
ls -la ~/.openclaw/workspace-*/db/*_$(date +%Y%m%d).sql.gz 2>/dev/null | head
# 4) 确认脚本内无明文密码
sudo grep -nE 'MYSQL_PASS="|PG_PASS="' /usr/local/bin/backup-agent-dbs.sh
grep -nE 'MYSQL_PASS="|PG_PASS="' /usr/local/bin/backup-agent-dbs.sh
```
> **另一处必须知道的差异**`.env` 中**没有** `MYSQL_PWD_ROOT`(只有 `MYSQL_PWD`)。
> 正确写法是「优先 `MYSQL_PWD_ROOT`、回退 `MYSQL_PWD`」,这样 Task A/E 之后补上该键会自动生效。
> 另注意:`openclaw` 不在 `agents.entries`(当前只有 11 个 id),**它必须先进入该配置才会被动态发现**(Task E 处理)。
---
## Task Dmain 红线 + 文档索引