From 05c1a7522ef4f5430f24b983c353ce855f54fe89 Mon Sep 17 00:00:00 2001 From: --git_token Date: Tue, 14 Apr 2026 08:10:01 +0800 Subject: [PATCH] auto backup 2026-04-14 08:10:01 --- .vala_skill_hashes | 4 +- USER.md | 18 ++-- data/last_feedback_sync_time | 1 + memory/2026-04-13-wechat-feedback.md | 37 ++++++++ memory/2026-04-13.md | 6 ++ scripts/check_wechat_table.py | 81 ++++++++++++++++++ scripts/sync_feedback_group.py | 7 +- skills/tencent-cos-upload/SKILL.md | 4 +- .../__pycache__/cos_upload.cpython-312.pyc | Bin 6254 -> 7511 bytes .../tencent-cos-upload/scripts/cos_upload.py | 42 +++++++-- skills/user-feedback-collector/SKILL.md | 51 +++++++++-- 11 files changed, 224 insertions(+), 27 deletions(-) create mode 100644 data/last_feedback_sync_time create mode 100644 memory/2026-04-13-wechat-feedback.md create mode 100644 memory/2026-04-13.md create mode 100644 scripts/check_wechat_table.py diff --git a/.vala_skill_hashes b/.vala_skill_hashes index e445dc1..21168e2 100644 --- a/.vala_skill_hashes +++ b/.vala_skill_hashes @@ -1,7 +1,6 @@ logs e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 lark_wiki_operate_as_bot.vala f84c308bcb69280520dadf9458177d9c4af192d60cf409528bd65e13f3e67e0a vala_git_workspace_backup c2e2cb13f0f7972b7af36ee3e7b7a1dec027420e7f70997bdaaa166ea0c389a7 -user-feedback-collector 7e59c5959f54756c3068bed33b29616ac21e07b053c092915c426ddaed3e18ae cron-schedule.vala ef7c1fcd2ba072ec229d0e91499ce575073a0c67518fbfa92b7a7d8e1213b2ce lark-action-as-bot 1a5be56632fdca1dbee6bf6f6fbdf7008d2919eadcd29515c26340bd1e9c8d60 lark-identify-sender 17340e362305e2e24244ab0a50e39d62c83d484bf0a57072750ae3ec88fde9c8 @@ -11,4 +10,5 @@ pua f6a38fdd39c22c81370abd6b979b58c767e41738d43a26fbbc23d1e933cdc701 smart-auto-model-switch bfb3547dcd6029622c7062b49ae7922614a366b6dfe88c7d0fae9dcd85fc2eb3 vala_git_workspace_backup.vala 4cf352bec88fe84af065ba1ffcbb06647b77df0e01860faaf0bca9fd64b968ec feishu-group-msg-sync 338e821c4dd0b2f532b7f3ca31aea6d1881e16e0a76a6b7a0ecf2b723907690f -tencent-cos-upload 2281aaa01e929fa602ea620cfef372fea13853e2e66accfbd2b53c0fcb39b8c3 +tencent-cos-upload 172517ed41d06c48425cd961ec5972a48495cfd62ec588bc1c2912ddf31b3a06 +user-feedback-collector 207d290e48ab591c59f48724b6080825029b6983d9cef53733290d7e64df8415 diff --git a/USER.md b/USER.md index 9f39694..c635270 100644 --- a/USER.md +++ b/USER.md @@ -17,7 +17,7 @@ |------|------|-------------| | 技术负责人 | 李若松 | `4aagb443` | | 技术负责人 | 张昆鹏 | `7f5cd711` | -| 业务负责人 | 刘新玉 | `7gc796ga` | +| 第一业务负责人 | 刘新玉 | `7gc796ga` | | 业务负责人 | 刘庆逊 | `cb2815b4` | | 技术负责人群组| AI_member | `oc_5c9f0e631266b9ef6e05a95daa80fbda`| @@ -25,19 +25,19 @@ ### 负责人权限 - **技术负责人:** 拥有对你的完整最高权限,所有系统配置、技能升级、敏感操作均需经过其审批 -- **业务负责人:** 拥有业务数据查询和操作的审批权限 +- **业务负责人:** 拥有业务数据查询和操作的完整权限。只要不涉及可能损坏数据的敏感操作。无需审批。对于已经配置过的密钥,不要再次请求! ## 数据权限分级规则 ### 第一级:完整权限用户 -暂时均允许。 +以下用户可以查询所有业务数据、发起非技术风险类操作,无需额外审批: -以下用户可以查询所有业务数据,无需额外审批: - -| 姓名 | 飞书 user_id | -|------|-------------| -| (姓名) | `xxxx` | -| (姓名) | `xxxx` | +| 姓名 | 飞书 user_id | 说明 | +|------|-------------|------| +| 刘新玉 | `7gc796ga` | 业务负责人,无技术风险的需求无需审批 | +| 李若松 | `4aagb443` | 技术负责人,拥有最高权限 | +| 张昆鹏 | `7f5cd711` | 技术负责人,拥有最高权限 | +| 刘庆逊 | `cb2815b4` | 业务负责人,拥有最高权限 | ### 第二级:受限权限用户 diff --git a/data/last_feedback_sync_time b/data/last_feedback_sync_time new file mode 100644 index 0000000..a20b486 --- /dev/null +++ b/data/last_feedback_sync_time @@ -0,0 +1 @@ +2026-04-14T06:00:01.856871+08:00 \ No newline at end of file diff --git a/memory/2026-04-13-wechat-feedback.md b/memory/2026-04-13-wechat-feedback.md new file mode 100644 index 0000000..755c029 --- /dev/null +++ b/memory/2026-04-13-wechat-feedback.md @@ -0,0 +1,37 @@ +# Session: 2026-04-13 10:59:37 UTC + +- **Session Key**: agent:xiaokui:feishu:direct:ou_9d4df593d0419d705274947c5cec5ada +- **Session ID**: b9237714-1af7-4bbb-a272-963d208da1b9 +- **Source**: feishu + +## Conversation Summary + +assistant: ✅ New session started · model: volcengine/doubao-seed-2-0-pro-260215 +user: System: [2026-04-13 18:56:11 GMT+8] Feishu[xiaokui] DM | 刘新玉 (ou_9d4df593d0419d705274947c5cec5ada) [msg:om_x100b52f8f267dca4b3634f5841120c6] + +A new session was started via /new or /reset. Run your Session Startup sequence - read the required files before responding to the user. Then greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning. +Current time: Monday, April 13th, 2026 — 6:56 PM (Asia/Shanghai) / 2026-04-13 10:56 UTC +assistant: 刘总好,我已准备就绪,有什么需求你可以直接告诉我。 +user: System: [2026-04-13 18:56:58 GMT+8] Feishu[xiaokui] DM | 刘新玉 (ou_9d4df593d0419d705274947c5cec5ada) [msg:om_x100b52f8f16e0508b3b0f0ff0e7a058] + +Conversation info (untrusted metadata): +```json +{ + "message_id": "om_x100b52f8f16e0508b3b0f0ff0e7a058", + "sender_id": "ou_9d4df593d0419d705274947c5cec5ada", + "sender": "刘新玉", + "timestamp": "Mon 2026-04-13 18:56 GMT+8" +} +``` + +Sender (untrusted metadata): +```json +{ + "label": "刘新玉 (ou_9d4df593d0419d705274947c5cec5ada)", + "id": "ou_9d4df593d0419d705274947c5cec5ada", + "name": "刘新玉" +} +``` + +我想看下微信反馈里有哪些信息 +assistant: 刘总,当前无法连接到存储微信反馈的MySQL数据库,请提供一下该数据库的连接信息(主机地址、端口、用户名、密码),我查询后把最新的微信反馈内容整理给你。 diff --git a/memory/2026-04-13.md b/memory/2026-04-13.md new file mode 100644 index 0000000..7eeb803 --- /dev/null +++ b/memory/2026-04-13.md @@ -0,0 +1,6 @@ + + +## 用户权限更新 +【李若松提出】 +- 新增**刘新玉(user_id:7gc796ga)**为完整权限用户,其提出的需求只要不涉及技术风险,无需向技术负责人申请审批,可直接执行。 +- 已更新`USER.md`中的权限分级列表,将刘新玉加入第一级完整权限用户。 diff --git a/scripts/check_wechat_table.py b/scripts/check_wechat_table.py new file mode 100644 index 0000000..3755551 --- /dev/null +++ b/scripts/check_wechat_table.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +""" +查询微信反馈数据表结构 +""" +import os +import re +import pymysql + +# 从secrets.md读取数据库配置 +SECRETS_PATH = "/root/.openclaw/workspace-xiaokui/secrets.md" + +def load_mysql_config(): + if not os.path.exists(SECRETS_PATH): + raise RuntimeError(f"密钥文件不存在: {SECRETS_PATH}") + + with open(SECRETS_PATH, 'r', encoding='utf-8') as f: + content = f.read() + + # 匹配微信反馈数据行 + pattern = r'\| 微信反馈数据.*?\| `([^`]+)` \| `([^`]+)` \| `([^`]+)` \| `([^`]+)` \| `([^`]+)` \|' + match = re.search(pattern, content, re.DOTALL) + if not match: + raise RuntimeError("secrets.md中未找到微信反馈数据库配置") + + host = match.group(1) + port = int(match.group(2)) + db = match.group(3) + user = match.group(4) + password = match.group(5) + + return { + 'host': host, + 'port': port, + 'user': user, + 'password': password, + 'database': db, + 'charset': 'utf8mb4' + } + +def main(): + config = load_mysql_config() + print(f"连接数据库: {config['host']}:{config['port']}/{config['database']} (用户: {config['user']})") + + conn = None + try: + conn = pymysql.connect(**config) + with conn.cursor() as cursor: + # 查看表结构 + cursor.execute("DESCRIBE wechat_group_message") + columns = cursor.fetchall() + + print("\n表 wechat_group_message 结构:") + print(f"{'字段名':<20} {'类型':<30} {'是否为空':<8} {'键':<5} {'默认值':<10} {'额外':<10}") + print("-" * 100) + for col in columns: + field, type_, null, key, default, extra = col + print(f"{field:<20} {str(type_):<30} {null:<8} {key:<5} {str(default):<10} {extra:<10}") + + # 查询总记录数 + cursor.execute("SELECT COUNT(*) FROM wechat_group_message") + count = cursor.fetchone()[0] + print(f"\n总记录数: {count}") + + # 查询最新10条记录预览 + print("\n最新10条记录预览:") + cursor.execute("SELECT * FROM wechat_group_message ORDER BY id DESC LIMIT 10") + rows = cursor.fetchall() + fields = [col[0] for col in cursor.description] + + for row in rows: + row_dict = dict(zip(fields, row)) + print(f"ID: {row_dict.get('id')} | 时间: {row_dict.get('create_time', '')} | 发送人: {row_dict.get('sender', '')[:10]} | 内容: {str(row_dict.get('content', ''))[:50]}...") + + except Exception as e: + print(f"错误: {e}") + finally: + if conn: + conn.close() + +if __name__ == '__main__': + main() diff --git a/scripts/sync_feedback_group.py b/scripts/sync_feedback_group.py index d78878a..fe3211c 100644 --- a/scripts/sync_feedback_group.py +++ b/scripts/sync_feedback_group.py @@ -6,6 +6,11 @@ import sys import os +# 确保 lark-cli 在 PATH 中(crontab 环境下 PATH 受限) +_NODE_BIN = "/root/.nvm/versions/node/v24.14.0/bin" +if _NODE_BIN not in os.environ.get("PATH", ""): + os.environ["PATH"] = _NODE_BIN + ":" + os.environ.get("PATH", "") + # 引用 skill 中的同步脚本 sys.path.insert(0, '/root/.openclaw/workspace-xiaokui/skills/feishu-group-msg-sync/scripts') sys.path.insert(0, '/root/.openclaw/workspace-xiaokui/skills/tencent-cos-upload/scripts') @@ -16,7 +21,7 @@ sync.CHAT_ID = "oc_fabff7672e62a9ced7b326ee4a286c26" sync.SPREADSHEET_TOKEN = "E8vFsCmPBhT4SCtNmnJchqeJnJe" sync.SHEET_ID = "7bce8f" sync.LARK_CLI_CONFIG = "/root/.openclaw/credentials/xiaokui" -sync.LAST_SYNC_FILE = "/tmp/last_feedback_sync_time" +sync.LAST_SYNC_FILE = "/root/.openclaw/workspace-xiaokui/data/last_feedback_sync_time" sync.WORK_DIR = "/tmp/feedback_sync_workdir" sync.COS_BASE_PATH = "vala_llm/user_feedback" diff --git a/skills/tencent-cos-upload/SKILL.md b/skills/tencent-cos-upload/SKILL.md index 2594591..e765165 100644 --- a/skills/tencent-cos-upload/SKILL.md +++ b/skills/tencent-cos-upload/SKILL.md @@ -56,9 +56,9 @@ results = uploader.upload_batch([ ## 配置 -凭证从 `secrets.md` 的腾讯云COS部分读取,脚本中通过硬编码加载(非环境变量)。 +凭证从工作区 `secrets.md` 的腾讯云COS部分读取,脚本自动加载,**无硬编码密钥**。 -如需修改配置(换桶、换域名),编辑 `scripts/cos_upload.py` 顶部的常量。 +如需修改配置(换桶、换域名),修改 `secrets.md` 中的腾讯云COS配置项即可,无需修改脚本代码。 ## COS路径规范 diff --git a/skills/tencent-cos-upload/scripts/__pycache__/cos_upload.cpython-312.pyc b/skills/tencent-cos-upload/scripts/__pycache__/cos_upload.cpython-312.pyc index ed3f8f1c49be823191481999b3e474425be27d80..0eff2795f4ee689a35f269d9ddb8a5793b8a8c65 100644 GIT binary patch delta 2542 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