360 Secure SkillHub
360 安全技能中心

weixin-quote

纯指导型技能:指导 agent 在用户明确同意并完成可校验备份后,修改本机 openclaw-weixin 渠道插件源码,使引用某条消息追问时把被引用原文注入模型上下文;含发送侧记录、按消息 id 精确/邻近匹配、持久化与过期及权限约束,以及构建、重启、验证和回滚步骤。不含补丁文件,不安装插件包。

yechang1450
yechang1450
热度 38.31
最近更新 2026-09-12 10:36:29
分类:开发依赖:代码执行 / 读写文件应用场景:代码生成 / API 集成 / 调试排错

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add weixin-quote
Metadata
license
MIT
name
weixin-quote
description
微信渠道『引用即上下文』的『功能装载器』(纯指导型)。**仅在用户明确要求为 openclaw-weixin 渠道启用/修复引用追问时**使用(触发短语:启用微信引用上下文、修复 openclaw-weixin 引用匹配)。本技能指导 agent 先取得明确同意并完成可校验的备份,**之后**才修改用户本机的微信渠道插件源码;完成后引用 bot 消息追问可被准确理解。

微信引用即上下文 —— 指导型装载与验证

目标:让 agent 按本文件的规格,修改用户本机已安装的微信渠道插件,使其具备"引用即上下文"(引用某条消息追问时,把被引用消息的原文注入模型上下文)。 本技能不含补丁文件、不安装任何插件包。

激活条件(必须先确认)

  • 只有当用户明确要求为 openclaw-weixin 渠道启用或修复引用追问时才执行本技能。
  • 触发短语(需与渠道/插件语境同时出现):启用微信引用上下文 / 修复 openclaw-weixin 引用匹配。
  • 命中后先复述将要做什么并取得用户确认;确认前不要读改任何文件(只读检查除外)。

不可协商的顺序(违反则中止)

① 只读定位 → ② 说明并取得明确同意 → ③ 备份并校验 → ④ 实现 → ⑤ 确定性构建 → ⑥ 重启 → ⑦ 验证 → ⑧ 报告与回滚

  • ①之前不得写入;③完成并校验前不得进入 ④。
  • 同意必须明确:列明目标路径、插件版本、将改文件、计划改动、将要持久化的数据、以及重启影响。
  • 用户拒绝/含糊/撤回 → 中止,不做任何改动。

权限边界(硬性)

  • 禁止在 sudo / root / 管理员终端下执行写入、构建。
  • 插件位于系统级位置时 → 停止,建议改到用户级位置(或由用户自行处理权限),不要提权修改。

目标行为(规格)

  1. 发送侧记录:每次发送成功后记录 {接收方, 服务端 message_id(精确字符串), 正文}。
    • message_id 从 sendMessage 原始响应文本正则提取精确字符串回填。
  2. 引用侧解析:引用时取入站 ref 的 msg_id,在记录中查找:
    • 优先精确 id 匹配;再 id 邻近(|差| ≤ 1000);未命中用正文子串兜底。
    • 匹配必须限定在同一 账号 + 接收方 + 会话内;出现多个候选时拒绝自动选择(显式标记未解析)。
    • 命中则注入被引用原文(建议 [引用: <原文>]);未命中显式标记,禁止按时间猜测。
  3. 持久化(含强制约束)
    • 跨进程/重启可用(建议状态目录下的 SQLite,如 openclaw-weixin/quote-index.sqlite)。
    • 强制:24 小时过期 + 每接收方上限(建议 80 条)事务性执行;过期/超限即删。
    • 强制:数据库与目录仅属主可读写(POSIX 0600/0700;Windows 限制到当前用户 ACL);权限不安全则拒绝启动该索引。
    • 最小化:只保留解析所需的最小内容;不把消息正文写进日志(探针只记方法、长度、非敏感 id)。
    • 用户可控:提供查看/禁用/清除索引的方式;索引默认排除在普通备份之外,除非用户明确选择包含。
  4. 可观测探针:发送 [send-resp];命中 [quote-hit] method=id ... textLen=…(不含正文)。

⚠️ 三个必须避开的实现坑

  1. 服务端 id 超过 Number.MAX_SAFE_INTEGER:禁止用 Number 比较(会四舍五入导致匹配失败);必须正则取字符串 + BigInt/字符串比较。
  2. 时间戳不可作主判据:服务器 create_time 与本地时间偏差不稳定,只能粗筛。
  3. 内存 Map 会丢:必须落盘;持久化失败时保留进程内兜底,不重发已发送消息。

执行步骤

  1. 只读定位(不写):openclaw plugins inspect openclaw-weixin --json → 取 rootDir/installPath 与 packageVersion;阅读 src/api/api.ts、src/messaging/send.ts、src/messaging/inbound.ts、src/messaging/outbound-memory.ts。已有等效实现则只校验不改。
  2. 说明并取得明确同意(含将持久化的数据种类与保留策略)。
  3. 备份并校验:按相对路径复制到 <rootDir>/.clawbot-backup-<时间戳>/,校验可读完整;失败则中止。
  4. 实现规格(含"三个坑"与持久化的强制约束)。
  5. 确定性构建(仅当改动 .ts):优先 npm ci --ignore-scripts(要求可审阅且一致的 lockfile);不要无约束 npm install;无 lockfile/不一致/来源不可信 → 停止并询问;构建失败 → 用备份还原。
  6. 重启:openclaw gateway restart,等 20-30 秒。
  7. 验证:发送侧 [send-resp];引用一条新 bot 回复 → [quote-hit] method=id ... textLen=… 且回复贴合被引用内容;重启后再引用一次仍命中(验证持久化);确认索引文件权限仅属主。
  8. 报告:改动文件、备份目录、索引位置与保留策略、验证结果、精确回滚步骤(含清除索引)。

回滚与升级

  • 回滚:用备份覆盖回去 + 删除索引文件,重启。
  • 官方插件升级会覆盖改动:重新执行本技能(从第 1 步开始)。

隐私

  • 不读取/外发密钥;不把消息正文写入日志;索引仅本机、仅属主可读、有强制过期与上限。