{"skill":{"slug":"multi-user-privacy","displayName":"Multi User Privacy","summary":"Automatically identifies users, isolates memories, filters sensitive content, manages sessions and sub-agents, and enforces role-based privacy and quota cont...","description":"# Multi-User Privacy 技能\n\n> **版本：v0.9.0** - Gateway 自动创建子代理版  \n> **定位：** ClawHub 首个多用户隐私保护技能  \n> **状态：** ✅ 生产环境验证  \n> **更新**: 2026-03-12 - 实现 Gateway 自动创建子代理功能\n\n---\n\n## 🌟 核心功能\n\n### 1. 身份识别 ✅\n- ✅ 自动识别管理员/普通用户\n- ✅ 基于账号 ID 自动分类\n- ✅ 不同身份不同权限\n\n### 2. 记忆隔离 ✅\n- ✅ 记忆文件物理隔离\n- ✅ 普通用户无法访问 MEMORY.md\n- ✅ 每个用户独立记忆空间\n- ✅ 文件系统级别保护\n\n### 3. 隐私检查 ✅\n- ✅ 回复前敏感词检查\n- ✅ 防止泄露其他账号信息\n- ✅ 自动过滤敏感内容\n- ✅ 每个对话都是独立世界\n\n### 4. 项目权限 ✅\n- ✅ 项目归属检查\n- ✅ 防止越权操作\n- ✅ 细粒度权限控制\n\n### 5. 异常检测 ✅\n- ✅ 频繁失败自动封禁\n- ✅ 行为数据库记录\n- ✅ 自动告警通知\n\n### 6. 实时告警 ✅\n- ✅ 监控隐私违规\n- ✅ 立即通知管理员\n- ✅ 完整日志记录\n\n### 7. 配置热更新 ✅\n- ✅ 修改配置无需重启\n- ✅ 自动监听文件变化\n- ✅ 即时生效\n\n### 8. 性能优化 ✅\n- ✅ 配置缓存（100 倍提升）\n- ✅ 行为数据库缓存\n- ✅ 自动清理过期缓存\n\n### 9. Session 管理 ✅\n- ✅ Session 检查（确保对话隔离）\n- ✅ 用户专属 session 记录\n- ✅ Session 不匹配警告\n\n### 10. 子代理自动创建 🆕 (v0.9.0)\n- ✅ Gateway 收到消息时自动检测新用户\n- ✅ 自动创建专属子代理（pending 队列机制）\n- ✅ 消息自动路由到对应子代理\n- ✅ 完全自动化，无需手动干预\n- ✅ 支持主流程或定时任务处理 pending 队列\n\n### 11. 配额管理 🆕\n- ✅ 管理员无限配额\n- ✅ 普通用户资源限制（磁盘/Token/消息）\n- ✅ 配额超限自动拒绝\n- ✅ 每日自动重置\n- ✅ 详细使用日志\n\n---\n\n## 🎯 隔离架构\n\n### 完整隔离方案\n\n```\n┌─────────────────────────────────────────────────────────┐\n│                    主代理 (路由器)                       │\n├─────────────────────────────────────────────────────────┤\n│                                                         │\n│  1️⃣ 身份识别层                                          │\n│     └── 读取 sender_id                                  │\n│         ├── 管理员 (ou_b96f5424607baf3a0455b55e0f4a2213)│\n│         └── 普通用户                                    │\n│                    ↓                                    │\n│  2️⃣ Session 管理层                                       │\n│     └── 查找或创建用户专属 session                       │\n│         ├── session_laoliu                              │\n│         ├── session_sun                                 │\n│         └── session_xie                                 │\n│                    ↓                                    │\n│  3️⃣ 记忆隔离层                                          │\n│     └── 加载对应记忆文件                                 │\n│         ├── 管理员：MEMORY.md + 当日记忆                 │\n│         └── 普通用户：users/{user_id}.md + 当日记忆     │\n│                    ↓                                    │\n│  4️⃣ 隐私检查层                                          │\n│     └── 回复前检查                                       │\n│         ├── 敏感词检查                                   │\n│         ├── 账号 ID 检查                                  │\n│         └── 角色称呼检查                                 │\n│                    ↓                                    │\n│  5️⃣ 子代理路由层                                         │\n│     └── 转发到对应子代理                                 │\n│         ├── 子代理处理                                   │\n│         └── 返回回复                                     │\n│                                                         │\n└─────────────────────────────────────────────────────────┘\n```\n\n---\n\n## 📋 技术实现\n\n### 1. 身份识别\n\n```javascript\n// privacy-guard.js\nfunction getUserIdFromContext(context) {\n    const chatId = context.chat_id || context.user_id || context.sender_id;\n    if (!chatId) return null;\n    \n    const match = chatId.match(/(ou_[a-z0-9]+)/);\n    return match ? match[1] : null;\n}\n\nfunction isAdmin(userId) {\n    return userId === ADMIN_ID; // ou_b96f5424607baf3a0455b55e0f4a2213\n}\n```\n\n### 2. 记忆隔离\n\n```javascript\n// privacy-guard.js\nfunction loadMemory(userId) {\n    const results = { loaded: [], missing: [] };\n    const today = new Date().toISOString().split('T')[0];\n    const USER_MEMORY_DIR = path.join(MEMORY_DIR, 'users');\n    \n    // 管理员：加载完整记忆\n    if (isAdmin(userId)) {\n        if (fs.existsSync(MEMORY_PATH)) {\n            results.loaded.push(MEMORY_PATH);\n        }\n    } else {\n        // 普通用户：只能访问自己的记忆\n        const userMemoryPath = path.join(USER_MEMORY_DIR, `${userId}.md`);\n        if (fs.existsSync(userMemoryPath)) {\n            results.loaded.push(userMemoryPath);\n        }\n    }\n    \n    // 所有用户都可以访问当日记忆\n    const todayPath = path.join(MEMORY_DIR, `${today}.md`);\n    if (fs.existsSync(todayPath)) {\n        results.loaded.push(todayPath);\n    }\n    \n    return results;\n}\n```\n\n### 3. 隐私检查\n\n```javascript\n// privacy-guard.js\nfunction enhancedCheck(message, userId) {\n    const issues = [];\n    \n    // 如果不是管理员，检查敏感词\n    if (!isAdmin(userId)) {\n        const forbiddenTerms = ['老刘', '主人', '管理员', '主账号'];\n        \n        for (const term of forbiddenTerms) {\n            if (message.includes(term)) {\n                issues.push({\n                    type: 'forbidden_term',\n                    value: term,\n                    severity: 'high',\n                    message: `检测到敏感词汇：${term}`\n                });\n            }\n        }\n        \n        // 检查是否暗示其他账号存在\n        const otherAccountPatterns = [\n            /其他账号/g,\n            /另一个用户/g,\n            /还有人/g,\n            /除了你之外/g\n        ];\n        \n        for (const pattern of otherAccountPatterns) {\n            if (pattern.test(message)) {\n                issues.push({\n                    type: 'isolation_breach',\n                    value: pattern.toString(),\n                    severity: 'medium',\n                    message: '暗示其他账号存在'\n                });\n            }\n        }\n    }\n    \n    return {\n        passed: issues.length === 0,\n        issues,\n        blocked: issues.some(i => i.severity === 'high')\n    };\n}\n```\n\n### 4. Session 管理\n\n```javascript\n// session-guard.js\nclass SessionManager {\n    constructor() {\n        this.sessions = this.loadSessionDB();\n    }\n    \n    async getSession(userId) {\n        // 检查是否已有 session\n        if (this.sessions[userId]) {\n            return this.sessions[userId];\n        }\n        \n        // 创建新 session\n        const session = {\n            userId,\n            createdAt: new Date().toISOString(),\n            lastActiveAt: new Date().toISOString(),\n            messageCount: 0\n        };\n        \n        this.sessions[userId] = session;\n        this.saveSessionDB();\n        \n        return session;\n    }\n    \n    checkSessionMatch(currentUserId, expectedUserId) {\n        return currentUserId === expectedUserId;\n    }\n}\n```\n\n### 5. 子代理路由\n\n```javascript\n// subagent-router.js\nclass SubAgentRouter {\n    constructor() {\n        this.userSessions = this.loadRouterDB();\n    }\n    \n    async getUserSession(userId) {\n        // 检查是否已有子代理\n        if (this.userSessions[userId]) {\n            return this.userSessions[userId];\n        }\n        \n        // 创建新子代理\n        const session = await sessions_spawn({\n            label: userId,\n            task: `${userId} 的专属子代理`,\n            mode: 'session',\n            thread: true\n        });\n        \n        this.userSessions[userId] = session;\n        this.saveRouterDB();\n        \n        return session;\n    }\n}\n```\n\n---\n\n## 🚀 快速开始\n\n### 安装\n\n```bash\n# 通过 ClawHub 安装\nnpx clawhub install multi-user-privacy\n\n# 或手动安装\ngit clone https://github.com/your-repo/multi-user-privacy.git\ncp -r multi-user-privacy ~/.openclaw/skills/\n```\n\n### 配置\n\n**1. 创建隐私配置文件**\n\n```bash\ncat > ~/.openclaw/workspace/.privacy-config.json << 'EOF'\n{\n  \"admin\": {\n    \"id\": \"ou_b96f5424607baf3a0455b55e0f4a2213\",\n    \"name\": \"管理员\",\n    \"role\": \"admin\"\n  },\n  \"privacy\": {\n    \"mode\": \"strict\",\n    \"forbiddenTerms\": [\"敏感词 1\", \"敏感词 2\"]\n  }\n}\nEOF\n```\n\n**2. 创建项目配置文件**\n\n```bash\ncat > ~/.openclaw/workspace/.projects-config.json << 'EOF'\n{\n  \"projects\": {\n    \"your-project\": {\n      \"name\": \"你的项目\",\n      \"owner\": \"your_user_id\",\n      \"collaborators\": [\"collab_id_1\", \"collab_id_2\"]\n    }\n  }\n}\nEOF\n```\n\n**3. 启用自动注入**\n\n在 OpenClaw 主入口添加：\n\n```javascript\n// ~/.openclaw/runtime/main.js 开头\nrequire('./skills/multi-user-privacy/scripts/auto-inject');\n```\n\n---\n\n## 📖 使用方式\n\n### 查看 Session 统计\n\n```bash\nnode scripts/session-guard.js stats\n```\n\n### 查看日志\n\n```bash\nnode scripts/view-logs.js\n```\n\n### 查看子代理路由\n\n```bash\nnode scripts/subagent-router.js list\n```\n\n### 清空 Session 数据库\n\n```bash\nnode scripts/session-guard.js clear\n```\n\n---\n\n## 📊 版本历史\n\n### v0.9.0 (2026-03-12) - Gateway 自动创建子代理版 🆕\n- ✅ Gateway 收到消息时自动检测新用户\n- ✅ 自动创建专属子代理（pending 队列机制）\n- ✅ 集成到 privacy-guard.js\n- ✅ 完整测试覆盖（87.5% 通过率）\n- ✅ 详细日志记录\n- ✅ 支持主流程或定时任务处理\n\n### v0.8.0 (2026-03-11) - 生产就绪版\n- ✅ 完整隔离架构\n- ✅ 5 层防护机制\n- ✅ 生产环境验证\n\n### v0.7.0 (2026-03-11) - 子代理自动路由\n- ✅ 自动为每个用户创建专属子代理\n- ✅ 消息自动路由到对应子代理\n\n### v0.6.0 (2026-03-11) - Session 会话管理\n- ✅ Session 检查（确保对话隔离）\n- ✅ 用户专属 session 记录\n\n### v0.5.0 (2026-03-11) - P2 改进完整版\n- ✅ 异常行为检测\n- ✅ 实时告警系统\n- ✅ 配置热更新\n- ✅ 性能优化\n\n---\n\n## 📞 支持\n\n- 文档：查看本文件\n- 问题：提交 Issue\n- 更新日志：查看 CHANGELOG.md\n\n---\n\n## 📄 许可证\n\nMIT License\n","tags":{"latest":"0.9.2"},"stats":{"comments":0,"downloads":788,"installsAllTime":0,"installsCurrent":0,"stars":0,"versions":3},"createdAt":1773292656140,"updatedAt":1779078052546},"latestVersion":{"version":"0.9.2","createdAt":1773294006765,"changelog":"- Initial release of v0.9.2 with 90 new files added.\n- Introduced session management, memory isolation, privacy guard, and quota logic.\n- Added scripts and documentation for multi-user privacy, subagent auto-creation, and configuration.\n- Included project plans, technical reports, and detailed setup guides.\n- Core features implemented: strict privacy checks, physical memory isolation per user, session routing, and quota enforcement.\n- Provided integration instructions for use with ClawHub/OpenClaw systems.","license":"MIT-0"},"metadata":null,"owner":{"handle":"lz84","userId":"s177fx8t6q4hpdyghcqgwv2fc1884we0","displayName":"lz84","image":"https://avatars.githubusercontent.com/u/5940037?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780089846311}}