refactor(db-query): 本地库改走 db-conn.sh,远程迁至 db-remote.json

- db_query.py 重写:本地库由 agents.entries 动态推导并调用 db-conn.sh(账号 agent_<id>,不用 root、脚本不接触口令);远程改读 db-remote.json 的 password_env,SSH 隧道逻辑未改动
- db-config.json 更名为 db-config.json.deprecated-20260916(保留备查);新建 ~/.config/clawdbot/db-remote.json(3 个 VPS 主库,仅存口令键名,无明文)
- 同步调用方文档:workspace/MEMORY.md、wellness 与 tab 技能文档、workspace-finances/SOUL.md(删除含明文口令的旧连接块)
- 注:workspace/skills/** 受 .gitignore 覆盖,db-query 技能本体的改动仅存于磁盘未入库
- 已知遗留:workspace-finances/db_config.json(含明文)被 23 个历史脚本引用,未动
This commit is contained in:
2026-09-16 11:52:30 +08:00
parent 68b621b281
commit f33afa77bb
5 changed files with 56 additions and 39 deletions
@@ -12,14 +12,18 @@ date: "2026-08-25T13:29:04.543Z"
## 数据库连接 ## 数据库连接
复用 db-query skill 配置,数据库名「按摩放松」: 本库 `wellness` 是 agent `wellness` 的本地私有库:库名 = agent id,账号 `agent_wellness`,唯一入口 `db-conn.sh`
```bash ```bash
python3 skills/db-query/scripts/db_query.py --database "按摩放松" --query "<SQL>" # 推荐(新机制唯一入口)
~/.openclaw/scripts/db-conn.sh wellness --sql "<SQL>"
# 也可以走 db-query skill(内部同样走 db-conn.sh
python3 /home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py --database wellness --query "<SQL>"
``` ```
- 连接方式:localhost Docker MySQL127.0.0.1:3306),user=rootpassword 已配置 - 连接方式:本机 Docker MySQL 容器,账号 `agent_wellness`**禁止 root、禁止 docker exec 直连、禁止跨库**
- 所有查询/写入都走 db-query 脚本,凭据不直连 - 口令存 `~/.openclaw/.env``DB_PASSWORD_放松保健`,由 `db-conn.sh` 内部读取(不进命令行、不打印)
- 执行路径:`/home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py` - 执行路径:`/home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py`
## 表结构 ## 表结构
+8 -9
View File
@@ -32,12 +32,11 @@
| 应急金(月应储蓄/月开销) | 3-6个月 | <1个月 | | 应急金(月应储蓄/月开销) | 3-6个月 | <1个月 |
| 投资占比(投资/总资产) | 20-40% | - | | 投资占比(投资/总资产) | 20-40% | - |
## 数据库连接 ## 数据库连接2026-09-16 迁移到新机制)
- 配置文件: `db_config.json`chmod 600,仅本用户可读)
- host: 127.0.0.1 - **库名 = agent id**`finances`;账号固定 `agent_finances`
- port: 3306 - **唯一入口**`~/.openclaw/scripts/db-conn.sh finances [--sql "<SQL>"]`
- user: root - 口令存 `~/.openclaw/.env``DB_PASSWORD_理财`,由脚本内部读取(**不进命令行、不打印**)
- password: 5gynj20J - **禁止**:使用 root、`docker exec` 直连、访问其它 agent 的库
- database: finances - 历史遗留:工作区里 2026-07/08 的一次性导入脚本仍读旧的 `db_config.json`(含 root 明文口令),
- 读取方式: Python中 `json.load(open('db_config.json'))` **不要照抄这种写法**;新脚本一律走 `db-conn.sh`
- **禁止**在Python代码、SQL脚本中硬编码密码
+8 -3
View File
@@ -9,14 +9,19 @@ description: "管理 tab 项目数据库(本地 MySQL tab 库)。新增/去
## 数据库连接 ## 数据库连接
连接库名「**tab**」 本库 `tab` 是 agent `tab` 的本地私有库(账号 `agent_tab`,唯一入口 `db-conn.sh`
```bash ```bash
# 推荐(新机制唯一入口)
~/.openclaw/scripts/db-conn.sh tab --sql "<SQL>"
# 也可以走 db-query skill(内部同样走 db-conn.sh
python3 /home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py --database "tab" --query "<SQL>" python3 /home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py --database "tab" --query "<SQL>"
``` ```
- 本地 Docker MySQL127.0.0.1:3306),user=root,密码已配置 - 本地 Docker MySQL 容器,账号 `agent_tab`**禁止 root、禁止 docker exec 直连、禁止跨库**
- 凭据不直连,统一走 db-query 脚本 - 口令存 `~/.openclaw/.env``DB_PASSWORD_导航页`,由 `db-conn.sh` 内部读取(不进命令行、不打印)
- 输出为 **TSV、无表头**`mysql -N -B`),解析时按制表符切分
- 注意:`order` 是保留字,涉及时必须用反引号 `` `order` `` - 注意:`order` 是保留字,涉及时必须用反引号 `` `order` ``
## 表结构(三张) ## 表结构(三张)
+8 -4
View File
@@ -9,14 +9,18 @@ description: "管理按摩放松记录:查询/新增技师联系人(cc_contr
## 数据库连接 ## 数据库连接
复用 db-query skill 配置,数据库名「按摩放松」: 本库 `wellness` 是 agent `wellness` 的本地私有库:库名 = agent id,账号 `agent_wellness`,唯一入口 `db-conn.sh`
```bash ```bash
python3 skills/db-query/scripts/db_query.py --database "按摩放松" --query "<SQL>" # 推荐(新机制唯一入口)
~/.openclaw/scripts/db-conn.sh wellness --sql "<SQL>"
# 也可以走 db-query skill(内部同样走 db-conn.sh
python3 /home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py --database wellness --query "<SQL>"
``` ```
- 连接方式:localhost Docker MySQL127.0.0.1:3306),user=rootpassword 已配置 - 连接方式:本机 Docker MySQL 容器,账号 `agent_wellness`**禁止 root、禁止 docker exec 直连、禁止跨库**
- 所有查询/写入都走 db-query 脚本,凭据不直连 - 口令存 `~/.openclaw/.env``DB_PASSWORD_放松保健`,由 `db-conn.sh` 内部读取(不进命令行、不打印)
- 执行路径:`/home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py` - 执行路径:`/home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py`
## 表结构 ## 表结构
+24 -19
View File
@@ -30,28 +30,33 @@
**「本地数据库」「本地 MySQL」= 本机 Docker 容器 MySQL**(非远程、非 WSL),统一环境定义: **「本地数据库」「本地 MySQL」= 本机 Docker 容器 MySQL**(非远程、非 WSL),统一环境定义:
- **连接**`127.0.0.1:3306`user=root(密码在 db-config.json - **连接**本机 Docker MySQL 容器(宿主端口 `127.0.0.1:3306`;入口脚本在容器内执行 mysql,不经 TCP);**库名 = agent id**,账号固定 `agent_<id>`;口令存 `~/.openclaw/.env``DB_PASSWORD_<中文名>`,由脚本内部读取(不进命令行、不进 stdout
- **本质**:跑在本机 Docker 里的 MySQL 容器(`docker ps` 可见,端口映射 3306 - **本质**:跑在本机 Docker 里的 MySQL 容器(`docker ps` 可见,端口映射 3306
- **操作方式**一律走 `db-query` skill`python3 skills/db-query/scripts/db_query.py --database "<库名>" --query "<SQL>"`,凭据不直连 - **操作方式****唯一入口** `~/.openclaw/scripts/db-conn.sh <agent_id> [--sql "<SQL>"]``db-query` skill`python3 skills/db-query/scripts/db_query.py --database <agent_id> --query "<SQL>"`已改为内部走同一入口,亦可使用
- **库清单**db-config.json「name」):tab / 按摩放松(wellness) / 卷儿记账(juaner) / 理财财务(finances) / 健身健康(fitness) / 后端开发(main) / 简历管理(resume) / 旅行规划(travel) - **红线**:禁止使用 root、禁止 `docker exec` 直连、禁止跨库访问
- **对照**:远程库是 `101.34.227.188:3306` 那几个 VPS 主库(dmp_serp/dmp_smdm/dmp_smes),不是本地 - **库清单**(库名 = agent id,括号内为权威中文名):tab(导航页) / wellness(放松保健) / juaner(卷儿) / finances(理财) / fitness(健康) / main(助手) / resume(简历) / travel(旅行) / sql(SQL) / note(笔记) / pbs(PBS备份)
- **对照**:远程库是 `101.34.227.188:3306` 那几个 VPS 主库(dmp_serp/dmp_smdm/dmp_smes),不是本地;配置在 `~/.config/clawdbot/db-remote.json`**不含明文口令**,口令走 `.env``MYSQL_PWD_SQL`
- **旧机制**`~/.config/clawdbot/db-config.json` 已于 2026-09-16 重命名为 `db-config.json.deprecated-20260916`(仅备回滚),已无引用
### 本地库 ↔ Agent 映射(同一 Docker MySQL 实例) ### 本地库 ↔ Agent 映射(同一 Docker MySQL 实例)
> 所有本地库都在**同一个** 127.0.0.1:3306 容器里,不是每个库一个实例。每个库都有归属 agent(下表);db-query「name」列是连库时用的描述名 > 所有本地库都在**同一个** 127.0.0.1:3306 容器里,不是每个库一个实例**库名 = 归属 agent id**,账号 = `agent_<id>`,唯一入口 = `db-conn.sh`
| 数据库(库名) | 归属 agent | 用途 | db-query「name」 | | 数据库(库名) | 归属 agent | 权威中文名 | 用途 | 连接方式 |
|------|-----------|------|------| |------|-----------|-----------|------|------|
| `tab` | **tab** | 引擎/站点/站点类型 | tab | | `tab` | **tab** | 导航页 | 引擎/站点/站点类型 | `db-conn.sh tab` |
| `wellness` | **wellness** | 按摩放松记录 | 按摩放松 | | `wellness` | **wellness** | 放松保健 | 放松保健记录(技师联系人/放松记录) | `db-conn.sh wellness` |
| `finances` | **finances** | 家庭理财财务 | 理财财务 | | `finances` | **finances** | 理财 | 家庭理财、收支分析 | `db-conn.sh finances` |
| `fitness` | **fitness** | 健身健康 | 健身健康 | | `fitness` | **fitness** | 健康 | 健身减脂、饮食与运动记录 | `db-conn.sh fitness` |
| `resume` | **resume** | 简历管理 | 简历管理 | | `resume` | **resume** | 简历 | 简历评审优化、面试准备 | `db-conn.sh resume` |
| `travel` | **travel** | 旅行规划 | 旅行规划 | | `travel` | **travel** | 旅行 | 行程规划、目的地推荐 | `db-conn.sh travel` |
| `juaner` | **juaner** | 卷儿记账todos/transactions | 卷儿记账 | | `juaner` | **juaner** | 卷儿 | 记账户应用数据todos/transactions | `db-conn.sh juaner` |
| `main` | **main** | 主库(conversation_notes/tasks/user_preferences | 后端开发 | | `main` | **main** | 助手 | 后端应用主库(conversation_notes/tasks/user_preferences | `db-conn.sh main` |
| `sql` | **sql** | SQL | SQL/数据库工作库 | `db-conn.sh sql` |
| `note` | **note** | 笔记 | 笔记归档 | `db-conn.sh note` |
| `pbs` | **pbs** | PBS备份 | PBS 备份 | `db-conn.sh pbs` |
> 注:`juaner` agent 是杨锦书陪伴助手,但它同时管理 `juaner` 记账库;`main` agent 是主助手,其 `main` 库即后端应用主库 > 注:`juaner` agent 是杨锦书陪伴助手,`juaner` 库是记账户应用的数据;`main` 库是后端应用主库。新机制下每个 agent 只持有并只访问以自己 id 命名的库,互相不可见
> 触发词:用户一提「本地数据库 / 本地 MySQL / Docker 里的库」→ 默认指上述 127.0.0.1:3306 的 Docker 实例。拿不准就按这个核对。 > 触发词:用户一提「本地数据库 / 本地 MySQL / Docker 里的库」→ 默认指上述 127.0.0.1:3306 的 Docker 实例。拿不准就按这个核对。
@@ -102,7 +107,7 @@
| Agent | 职责 | | Agent | 职责 |
|-------|------| |-------|------|
| **main** | 主助手:统一调度、记忆管理、日常对话、任务分发;其 `main` 库(后端开发conversation_notes/tasks/user_preferences)归 main 管理 | | **main** | 主助手:统一调度、记忆管理、日常对话、任务分发;其 `main` 库(后端应用主库conversation_notes/tasks/user_preferences)归 main 管理 |
| **resume** | 简历助手:简历评审优化、面试准备、职业建议;**同时负责周报生成**(维云智造G5周报 → 存入钉邮草稿箱,带 weekly-report-g5 skill | | **resume** | 简历助手:简历评审优化、面试准备、职业建议;**同时负责周报生成**(维云智造G5周报 → 存入钉邮草稿箱,带 weekly-report-g5 skill |
| **travel** | 旅途助手:行程规划、目的地推荐、交通住宿、美食签证 | | **travel** | 旅途助手:行程规划、目的地推荐、交通住宿、美食签证 |
| **fitness** | 健身 🏋️:健康减脂教练、饮食记录分析、运动跟踪、平台期突破 | | **fitness** | 健身 🏋️:健康减脂教练、饮食记录分析、运动跟踪、平台期突破 |
@@ -111,8 +116,8 @@
| **note** | 笔记 📝:管理/归档 /home/yangxuan/seafile/笔记(Obsidian 库),整理对话产生的知识文档 | | **note** | 笔记 📝:管理/归档 /home/yangxuan/seafile/笔记(Obsidian 库),整理对话产生的知识文档 |
| **juaner** | 卷儿 👧:杨锦书专属陪伴助手;同时管理 `juaner` 记账库(todos/transactions | | **juaner** | 卷儿 👧:杨锦书专属陪伴助手;同时管理 `juaner` 记账库(todos/transactions |
| **pbs** | PBS备份 💾:Proxmox Backup Server (pbs01) 备份管理,中文交互(Tailscale 100.115.195.195SSH 免密 root,见 workspace-pbs/AGENTS.md | | **pbs** | PBS备份 💾:Proxmox Backup Server (pbs01) 备份管理,中文交互(Tailscale 100.115.195.195SSH 免密 root,见 workspace-pbs/AGENTS.md |
| **wellness** | 放松保健 💆:管理按摩放松记录(本地 MySQL wellness),查询/新增技师联系人(cc_contract)和放松记录(cc_contract_record)db-query「按摩放松」连接,见 workspace-wellness/skills/wellness | | **wellness** | 放松保健 💆:管理放松保健记录(本地 MySQL `wellness` 库,账号 `agent_wellness`),查询/新增技师联系人(cc_contract)和放松记录(cc_contract_record)入口 `db-conn.sh wellness``db-query --database wellness`,见 workspace-wellness/skills/wellness |
| **tab** | 项目管理 🗄️:管理 tab 项目数据库(本地 MySQL tab),新增引擎/站点/站点类型(含去重)、启用禁用(status 切换),icon 自动取 favicondb-query「tab」连接,见 workspace-tab/skills/tab | | **tab** | 项目管理 🗄️:管理 tab 项目数据库(本地 MySQL `tab` 库,账号 `agent_tab`),新增引擎/站点/站点类型(含去重)、启用禁用(status 切换),icon 自动取 favicon入口 `db-conn.sh tab``db-query --database tab`,见 workspace-tab/skills/tab |
- config 见 `openclaw.json``agents.list` - config 见 `openclaw.json``agents.list`
- `subagents.allowAgents` 已设为 `["*"]`main 可 spawn 任意 agent - `subagents.allowAgents` 已设为 `["*"]`main 可 spawn 任意 agent