From f33afa77bb4f36f88858b8d08931a3eb3cdc3598 Mon Sep 17 00:00:00 2001 From: openclaw-314 Date: Wed, 16 Sep 2026 11:52:30 +0800 Subject: [PATCH] =?UTF-8?q?refactor(db-query):=20=E6=9C=AC=E5=9C=B0?= =?UTF-8?q?=E5=BA=93=E6=94=B9=E8=B5=B0=20db-conn.sh=EF=BC=8C=E8=BF=9C?= =?UTF-8?q?=E7=A8=8B=E8=BF=81=E8=87=B3=20db-remote.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - db_query.py 重写:本地库由 agents.entries 动态推导并调用 db-conn.sh(账号 agent_,不用 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 个历史脚本引用,未动 --- .../wellness-20260825-6804d40cde/PROPOSAL.md | 12 ++++-- workspace-finances/SOUL.md | 17 ++++---- workspace-tab/skills/tab/SKILL.md | 11 +++-- workspace-wellness/skills/wellness/SKILL.md | 12 ++++-- workspace/MEMORY.md | 43 +++++++++++-------- 5 files changed, 56 insertions(+), 39 deletions(-) diff --git a/skill-workshop/proposals/wellness-20260825-6804d40cde/PROPOSAL.md b/skill-workshop/proposals/wellness-20260825-6804d40cde/PROPOSAL.md index cbbf782..e3e32b7 100644 --- a/skill-workshop/proposals/wellness-20260825-6804d40cde/PROPOSAL.md +++ b/skill-workshop/proposals/wellness-20260825-6804d40cde/PROPOSAL.md @@ -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 -python3 skills/db-query/scripts/db_query.py --database "按摩放松" --query "" +# 推荐(新机制唯一入口) +~/.openclaw/scripts/db-conn.sh wellness --sql "" + +# 也可以走 db-query skill(内部同样走 db-conn.sh) +python3 /home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py --database wellness --query "" ``` -- 连接方式:localhost Docker MySQL(127.0.0.1:3306),user=root,password 已配置 -- 所有查询/写入都走 db-query 脚本,凭据不直连 +- 连接方式:本机 Docker MySQL 容器,账号 `agent_wellness`(**禁止 root、禁止 docker exec 直连、禁止跨库**) +- 口令存 `~/.openclaw/.env` 的 `DB_PASSWORD_放松保健`,由 `db-conn.sh` 内部读取(不进命令行、不打印) - 执行路径:`/home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py` ## 表结构 diff --git a/workspace-finances/SOUL.md b/workspace-finances/SOUL.md index e3d95a8..f5c982d 100644 --- a/workspace-finances/SOUL.md +++ b/workspace-finances/SOUL.md @@ -32,12 +32,11 @@ | 应急金(月应储蓄/月开销) | 3-6个月 | <1个月 | | 投资占比(投资/总资产) | 20-40% | - | -## 数据库连接 -- 配置文件: `db_config.json`(chmod 600,仅本用户可读) -- host: 127.0.0.1 -- port: 3306 -- user: root -- password: 5gynj20J -- database: finances -- 读取方式: Python中 `json.load(open('db_config.json'))` -- **禁止**在Python代码、SQL脚本中硬编码密码 +## 数据库连接(2026-09-16 迁移到新机制) + +- **库名 = agent id**:`finances`;账号固定 `agent_finances` +- **唯一入口**:`~/.openclaw/scripts/db-conn.sh finances [--sql ""]` +- 口令存 `~/.openclaw/.env` 的 `DB_PASSWORD_理财`,由脚本内部读取(**不进命令行、不打印**) +- **禁止**:使用 root、`docker exec` 直连、访问其它 agent 的库 +- 历史遗留:工作区里 2026-07/08 的一次性导入脚本仍读旧的 `db_config.json`(含 root 明文口令), + **不要照抄这种写法**;新脚本一律走 `db-conn.sh` diff --git a/workspace-tab/skills/tab/SKILL.md b/workspace-tab/skills/tab/SKILL.md index b70a077..da1319a 100644 --- a/workspace-tab/skills/tab/SKILL.md +++ b/workspace-tab/skills/tab/SKILL.md @@ -9,14 +9,19 @@ description: "管理 tab 项目数据库(本地 MySQL tab 库)。新增/去 ## 数据库连接 -连接库名「**tab**」: +本库 `tab` 是 agent `tab` 的本地私有库(账号 `agent_tab`,唯一入口 `db-conn.sh`): ```bash +# 推荐(新机制唯一入口) +~/.openclaw/scripts/db-conn.sh tab --sql "" + +# 也可以走 db-query skill(内部同样走 db-conn.sh) python3 /home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py --database "tab" --query "" ``` -- 本地 Docker MySQL(127.0.0.1:3306),user=root,密码已配置 -- 凭据不直连,统一走 db-query 脚本 +- 本地 Docker MySQL 容器,账号 `agent_tab`(**禁止 root、禁止 docker exec 直连、禁止跨库**) +- 口令存 `~/.openclaw/.env` 的 `DB_PASSWORD_导航页`,由 `db-conn.sh` 内部读取(不进命令行、不打印) +- 输出为 **TSV、无表头**(`mysql -N -B`),解析时按制表符切分 - 注意:`order` 是保留字,涉及时必须用反引号 `` `order` `` ## 表结构(三张) diff --git a/workspace-wellness/skills/wellness/SKILL.md b/workspace-wellness/skills/wellness/SKILL.md index 9d7d728..cf495f9 100644 --- a/workspace-wellness/skills/wellness/SKILL.md +++ b/workspace-wellness/skills/wellness/SKILL.md @@ -9,14 +9,18 @@ description: "管理按摩放松记录:查询/新增技师联系人(cc_contr ## 数据库连接 -复用 db-query skill 配置,数据库名「按摩放松」: +本库 `wellness` 是 agent `wellness` 的本地私有库:库名 = agent id,账号 `agent_wellness`,唯一入口 `db-conn.sh`。 ```bash -python3 skills/db-query/scripts/db_query.py --database "按摩放松" --query "" +# 推荐(新机制唯一入口) +~/.openclaw/scripts/db-conn.sh wellness --sql "" + +# 也可以走 db-query skill(内部同样走 db-conn.sh) +python3 /home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py --database wellness --query "" ``` -- 连接方式:localhost Docker MySQL(127.0.0.1:3306),user=root,password 已配置 -- 所有查询/写入都走 db-query 脚本,凭据不直连 +- 连接方式:本机 Docker MySQL 容器,账号 `agent_wellness`(**禁止 root、禁止 docker exec 直连、禁止跨库**) +- 口令存 `~/.openclaw/.env` 的 `DB_PASSWORD_放松保健`,由 `db-conn.sh` 内部读取(不进命令行、不打印) - 执行路径:`/home/yangxuan/.openclaw/workspace/skills/db-query/scripts/db_query.py` ## 表结构 diff --git a/workspace/MEMORY.md b/workspace/MEMORY.md index cc3ccea..81650cc 100644 --- a/workspace/MEMORY.md +++ b/workspace/MEMORY.md @@ -30,28 +30,33 @@ **「本地数据库」「本地 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_`;口令存 `~/.openclaw/.env` 的 `DB_PASSWORD_<中文名>`,由脚本内部读取(不进命令行、不进 stdout) - **本质**:跑在本机 Docker 里的 MySQL 容器(`docker ps` 可见,端口映射 3306) -- **操作方式**:一律走 `db-query` skill(`python3 skills/db-query/scripts/db_query.py --database "<库名>" --query ""`),凭据不直连 -- **库清单**(db-config.json「name」):tab / 按摩放松(wellness) / 卷儿记账(juaner) / 理财财务(finances) / 健身健康(fitness) / 后端开发(main) / 简历管理(resume) / 旅行规划(travel) -- **对照**:远程库是 `101.34.227.188:3306` 那几个 VPS 主库(dmp_serp/dmp_smdm/dmp_smes),不是本地 +- **操作方式**:**唯一入口** `~/.openclaw/scripts/db-conn.sh [--sql ""]`;`db-query` skill(`python3 skills/db-query/scripts/db_query.py --database --query ""`)已改为内部走同一入口,亦可使用 +- **红线**:禁止使用 root、禁止 `docker exec` 直连、禁止跨库访问 +- **库清单**(库名 = 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 实例) -> 所有本地库都在**同一个** 127.0.0.1:3306 容器里,不是每个库一个实例。每个库都有归属 agent(下表);db-query「name」列是连库时用的描述名。 +> 所有本地库都在**同一个** 127.0.0.1:3306 容器里,不是每个库一个实例;**库名 = 归属 agent id**,账号 = `agent_`,唯一入口 = `db-conn.sh`。 -| 数据库(库名) | 归属 agent | 用途 | db-query「name」 | -|------|-----------|------|------| -| `tab` | **tab** | 引擎/站点/站点类型 | tab | -| `wellness` | **wellness** | 按摩放松记录 | 按摩放松 | -| `finances` | **finances** | 家庭理财财务 | 理财财务 | -| `fitness` | **fitness** | 健身健康 | 健身健康 | -| `resume` | **resume** | 简历管理 | 简历管理 | -| `travel` | **travel** | 旅行规划 | 旅行规划 | -| `juaner` | **juaner** | 卷儿记账(todos/transactions) | 卷儿记账 | -| `main` | **main** | 主库(conversation_notes/tasks/user_preferences) | 后端开发 | +| 数据库(库名) | 归属 agent | 权威中文名 | 用途 | 连接方式 | +|------|-----------|-----------|------|------| +| `tab` | **tab** | 导航页 | 引擎/站点/站点类型 | `db-conn.sh tab` | +| `wellness` | **wellness** | 放松保健 | 放松保健记录(技师联系人/放松记录) | `db-conn.sh wellness` | +| `finances` | **finances** | 理财 | 家庭理财、收支分析 | `db-conn.sh finances` | +| `fitness` | **fitness** | 健康 | 健身减脂、饮食与运动记录 | `db-conn.sh fitness` | +| `resume` | **resume** | 简历 | 简历评审优化、面试准备 | `db-conn.sh resume` | +| `travel` | **travel** | 旅行 | 行程规划、目的地推荐 | `db-conn.sh travel` | +| `juaner` | **juaner** | 卷儿 | 记账户应用数据(todos/transactions) | `db-conn.sh juaner` | +| `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 实例。拿不准就按这个核对。 @@ -102,7 +107,7 @@ | Agent | 职责 | |-------|------| -| **main** | 主助手:统一调度、记忆管理、日常对话、任务分发;其 `main` 库(后端开发,conversation_notes/tasks/user_preferences)归 main 管理 | +| **main** | 主助手:统一调度、记忆管理、日常对话、任务分发;其 `main` 库(后端应用主库,conversation_notes/tasks/user_preferences)归 main 管理 | | **resume** | 简历助手:简历评审优化、面试准备、职业建议;**同时负责周报生成**(维云智造G5周报 → 存入钉邮草稿箱,带 weekly-report-g5 skill) | | **travel** | 旅途助手:行程规划、目的地推荐、交通住宿、美食签证 | | **fitness** | 健身 🏋️:健康减脂教练、饮食记录分析、运动跟踪、平台期突破 | @@ -111,8 +116,8 @@ | **note** | 笔记 📝:管理/归档 /home/yangxuan/seafile/笔记(Obsidian 库),整理对话产生的知识文档 | | **juaner** | 卷儿 👧:杨锦书专属陪伴助手;同时管理 `juaner` 记账库(todos/transactions) | | **pbs** | PBS备份 💾:Proxmox Backup Server (pbs01) 备份管理,中文交互(Tailscale 100.115.195.195,SSH 免密 root,见 workspace-pbs/AGENTS.md) | -| **wellness** | 放松保健 💆:管理按摩放松记录(本地 MySQL wellness 库),查询/新增技师联系人(cc_contract)和放松记录(cc_contract_record),db-query「按摩放松」连接,见 workspace-wellness/skills/wellness | -| **tab** | 项目管理 🗄️:管理 tab 项目数据库(本地 MySQL tab 库),新增引擎/站点/站点类型(含去重)、启用禁用(status 切换),icon 自动取 favicon,db-query「tab」连接,见 workspace-tab/skills/tab | +| **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` 库,账号 `agent_tab`),新增引擎/站点/站点类型(含去重)、启用禁用(status 切换),icon 自动取 favicon,入口 `db-conn.sh tab`/`db-query --database tab`,见 workspace-tab/skills/tab | - config 见 `openclaw.json` → `agents.list` - `subagents.allowAgents` 已设为 `["*"]`,main 可 spawn 任意 agent