mirror of
https://git.openapi.site/https://github.com/desirecore/market.git
synced 2026-09-05 20:03:43 +08:00
feat: 新增企业微信助手 Agent,并修正 wecom-cli 条目 ref 漂移 (#112)
## 概述 / Overview 两件事:新增「企业微信助手」Agent(自带 15 个技能),并修正 `wecom-cli` 条目钉在 6 月快照的 ref 漂移。 Two changes: adds the **WeCom Assistant** agent (bundling 15 skills), and fixes the `wecom-cli` entry whose pinned ref was stuck on a June snapshot. ## 1. 新增企业微信助手 Agent 覆盖企业微信 **14 类服务、95 个方法**:消息、群聊历史、通讯录、日程、会议、待办、邮件、在线文档、在线表格、智能表格、智能文档、文档管理、微盘、媒体文件。 **采用内联形态 + 自带私有技能**:Agent 安装对 `agents/<id>/` 整目录递归复制且 `skills/` 不在排除集合里,因此装 Agent 即带全部技能,用户无需再单独获取技能合集。 ### 技能集(15 个,约 5000 行) - 基于上游 [wecom-cli](https://github.com/WecomTeam/wecom-cli) 官方 Skill(MIT,© WecomTeam)改写,每个技能末尾保留归属声明 - **新增 `wecom-chat`**:补齐上游零覆盖的群聊历史读取 - 补齐上游未覆盖的 `message.send`、`doc.create`,方法覆盖达 **95/95** - 修正上游三处文档漂移:邮件能力描述与实际相反、会议室参数名已过时、`title_highlight` 字段不存在 ### 相对上游的核心增量:风险治理 - 26 个对外可见或不可逆的方法逐个写明**执行前确认要求** - 4 个条件升级方法给出**参数级判据**,而非按方法名一刀切 - 文档权限扩散两项加重处理,涉及**企业外可见**时单独再确认一次 - 内部标识禁止外露,不因用户索要而放宽 - 拒绝导出可识别到具体自然人的隐私字段 ### 三条真机实测得出、上游未覆盖的硬约束 1. 机器人**只能写入/修改自己创建的数据**,真人创建的只能读 2. 每次响应携带的 `extra_identity_context` **禁止透露给用户** 3. 权限错误(`850002`/`851008`/`853006`)**不得重试**,须将 `help_message` **逐字原样**转给用户 ## 2. 修正 wecom-cli 条目 ref 漂移 `source.ref` 原钉在 2026-06-28 的 `72e14f7`,该快照只有 7 个子技能且用已废弃的旧命名(`msg`/`schedule`)。上游 v1.2.0 已扩展到 **14 个**技能。按旧 ref 安装的用户拿到的是三个月前的快照。 - `source.ref` → `78c514b2afee7c0d3d7be715628478421f37ee63` - `children` 由 `scripts/gen-collection-children.py` 重新生成,**7 → 14** - sidecar 同步 `provenance.content.ref`、`childCount` 与 `children` ## 验证 / Verification **静态** - 215 条示例命令追加 `--dry-run` 实跑,**215/215 退出码 0** - 未知方法 0、未知参数 0、`--json` 未知字段 0、枚举违规 0 - 15 个 `SKILL.md` 的 frontmatter 经客户端 `skillFrontmatterSchema` 校验全部通过 - `validate_catalog_metadata.py --require-complete` 与 `gen-collection-children.py`:**0 error** **真机(在真实企业微信账号上端到端)** - **待办域 6/6 方法全通**(含 2 个 write-high),`items` 必填的隐蔽坑实测证实 - **日程域 5 个方法全通**(含 3 个 write-high) - 消息发送、通讯录解析、微盘列表、邮件搜索、文档搜索、会议列表、智能表格创建均已实测通过 - 测试数据已全部清理,未污染真实账号 **尚未实测**:群聊历史(机器人未开通该品类)。相关文档已明确标注验证状态,未实测的能力不写「实际效果」段落。
This commit is contained in:
201
agents/wecom-assistant/docs/99-风险与确认.md
Normal file
201
agents/wecom-assistant/docs/99-风险与确认.md
Normal file
@@ -0,0 +1,201 @@
|
||||
# 风险与确认
|
||||
|
||||
哪些操作助手会先问你、哪些直接做、以及「怎么才算同意」。
|
||||
这一篇是所有能力共用的规则,各篇文档里的「危险动作先问你」都指向这里。
|
||||
|
||||
一句话概括:**能撤回的直接做,撤不回的先问你。**
|
||||
|
||||
## 三档风险
|
||||
|
||||
助手把每个动作分成三档,判据是**对别人的实际影响**,不是「有没有写操作」。
|
||||
|
||||
| 档位 | 判据 | 助手怎么做 |
|
||||
|---|---|---|
|
||||
| **读取** | 纯查询,对企业微信侧没有任何改动 | 直接做。**隐私敏感的读**(见下)会先说明要读什么 |
|
||||
| **低风险写入** | 创建新东西,或者只增不减地改(追加、上传、新建) | 直接做,事后如实汇报做了什么 |
|
||||
| **高风险写入** | **对外可见**(发消息、发邮件、邀请他人、授权他人)或**不可逆**(覆盖、删除、标记完成),没有回滚接口 | **先复述影响,等你明确同意** |
|
||||
|
||||
举个对照:往文档里**追加**一段是低风险(加错了再改),**整篇覆盖**是高风险(原文没了)。
|
||||
同样是「写」,档位完全不同。
|
||||
|
||||
## 高风险动作的完整清单(26 个)
|
||||
|
||||
执行前一定会先问你。按能力分组:
|
||||
|
||||
| 能力 | 会先问你的动作 |
|
||||
|---|---|
|
||||
| [消息](03-消息与会话.md) | 发消息(两条发送路径都算) |
|
||||
| [邮件](08-邮件.md) | 发送 / 回复 / 转发 / 日程邀约邮件 / 会议邮件(同一个动作的五种用法) |
|
||||
| [会议](06-会议.md) | 创建会议、更新会议、取消会议 |
|
||||
| [日程](05-日程.md) | 创建日程、更新日程、取消日程 |
|
||||
| [待办](07-待办.md) | 标记完成、删除 / 退出 |
|
||||
| [文档管理](13-文档管理.md) | 添加协作成员、**设置链接加入规则** |
|
||||
| [在线文档](09-在线文档.md) | 整篇覆盖正文 |
|
||||
| [在线表格](10-在线表格.md) | 覆盖单元格区域、删除子工作表 |
|
||||
| [智能文档](12-智能文档.md) | 整页覆盖、删除页面、删除或替换内容块 |
|
||||
| [智能表格](11-智能表格.md) | 改记录、删记录、删字段、删子表、改子表名、删视图、删图表 |
|
||||
|
||||
**其中最危险的一档是「设置链接加入规则」**——它可能放开**企业外**访问,
|
||||
等于把文档对不在你们企业微信通讯录里的任何人公开。这一档会**单独再确认一次**,见下文。
|
||||
|
||||
## 4 个「看情况」的动作
|
||||
|
||||
这几个默认是低风险、直接做;**只有命中特定条件才升级为先问你**:
|
||||
|
||||
| 动作 | 什么时候升级 | 为什么 |
|
||||
|---|---|---|
|
||||
| 创建待办 | **分派给他人时** | 对方待办列表里立刻出现,还会收到提醒 |
|
||||
| 更新待办的参与人 | **改参与人名单时** | 是「整体替换」语义,漏掉谁就等于把谁踢出这条待办 |
|
||||
| 修改智能表格字段 | **改字段类型时** | 可能把这一列已有的数据转换掉或直接清空 |
|
||||
| 微盘文件重命名 | **文件在共享空间时** | 改名对全体协作者立刻可见 |
|
||||
|
||||
没命中条件时助手直接做——**不会为了「保险」把所有待办操作都拿来问你一遍**。
|
||||
过度确认会让助手变得不可用。
|
||||
|
||||
## 助手会怎么问
|
||||
|
||||
一条标准的确认长这样:
|
||||
|
||||
> 即将以机器人的身份,向「项目 A 群」发送消息:「周报截止时间推迟到周五。」——确认发送吗?
|
||||
|
||||
> 将取消日程「产品评审」(9 月 1 日 14:00-15:00),参与人会收到取消通知,且无法撤回。确认吗?
|
||||
|
||||
> 将删除子表「需求池」,其中的 8 个字段和 214 条记录会一并丢失。确认吗?
|
||||
|
||||
复述里一定包含三件事:**对谁**(用姓名、群名、文档标题,不用内部编号)、**做什么**、
|
||||
**内容或规模是什么**。涉及不可逆时会明说「无法撤回」「不可恢复」。
|
||||
|
||||
## 怎么算「明确同意」
|
||||
|
||||
| 你的回复 | 算不算 |
|
||||
|---|---|
|
||||
| 「确认」「发吧」「可以」「删」 | ✅ 算 |
|
||||
| 「嗯」「你看着办」「都行」 | ❌ **不算**,助手会再确认一次 |
|
||||
| 沉默、答非所问 | ❌ 不算 |
|
||||
| 上一轮同意过一个类似的动作 | ❌ **不算**。同意是**一次一个动作**的,不会顺延到下一个 |
|
||||
|
||||
**催促不能省掉确认。** 助手可以把确认说得更短,但不会跳过。
|
||||
|
||||
## 三个「先读再写」
|
||||
|
||||
覆盖和删除之前,助手会**先把现状读出来**,在确认里告诉你要毁掉的是什么:
|
||||
|
||||
- **覆盖文档正文前**——先读一遍现有正文,给你一两句摘要。没读过就覆盖等于蒙眼删除。
|
||||
- **覆盖表格区域前**——先读一遍这块区域现在是什么。区域本来是空的,它也会如实说「该区域当前为空」,
|
||||
但这一步不省。
|
||||
- **删子表 / 删记录前**——先数一数有多少字段、多少条数据。
|
||||
|
||||
## 涉及企业外时会再问一次
|
||||
|
||||
把文档的加入规则放开到企业外,是整套能力里后果最严重的一件事:
|
||||
**不在你们企业微信通讯录里的任何人,只要拿到链接就能看到这份文档的全部内容**,
|
||||
而且链接被转发出去后无法收回,命令行侧也没有撤销接口。
|
||||
|
||||
所以这一档有三道额外闸门:
|
||||
|
||||
1. **单独说一遍后果,单独取得一次同意**:
|
||||
> 这份文档将不再限于本企业内部可见,链接被转发出去后无法收回。
|
||||
2. **「发个链接就能看」不等于「开企业外」。** 默认只动企业内的权限。
|
||||
要动企业外,必须由你明确说出「企业外 / 外部 / 客户 / 合作方」;含糊时它会追问。
|
||||
3. **不知道文档里有什么就不开。** 助手没读过这份文档时,会先提示你自己确认其中不含敏感信息。
|
||||
|
||||
顺带一提:**加协作成员只能加不能删**——命令行没有移除成员的方法。加错了得你去客户端手动移除。
|
||||
|
||||
## 只读但敏感的操作,会先说明再读
|
||||
|
||||
下面这些虽然不改任何东西,但读的是**别人的原始内容**,助手会先用一句话说明范围再动手:
|
||||
|
||||
| 操作 | 会先说什么 |
|
||||
|---|---|
|
||||
| 读群聊记录 | 「我将读取『XX 群』某年某月某日至某日的聊天记录,用于……」 |
|
||||
| 读会议逐字转写 | 说明是哪场会、拉哪一段 |
|
||||
| 读邮件正文与附件 | 说明读哪封 |
|
||||
| 搜通讯录(批量搜集人员信息时) | 说明要查什么 |
|
||||
|
||||
范围必须具体到**哪个对象 + 哪个时间段 + 读来干什么**。
|
||||
你没指定时它会先把候选列出来让你选,**不会「先全都拉下来再说」**。
|
||||
|
||||
## 无论你怎么要求都不会做的事
|
||||
|
||||
这几条是硬线,**不因为你坚持而放宽**:
|
||||
|
||||
- **导出能识别到具体自然人的隐私字段**:身份证号、护照号、银行卡号、家庭住址、婚姻状况、
|
||||
健康状况、宗教信仰等。
|
||||
- **对个人做行为画像**:统计「谁说话最多」「谁最晚下班」这类分析(除非你明确要求且目的正当)。
|
||||
- **不当内容写入**:性骚扰、性别歧视、人身侮辱、种族歧视。
|
||||
- **政治敏感写入**:把特定公职人员与「负面 / 贪污 / 举报 / 黑材料」这类用途凑在一起的请求,
|
||||
**第一步就拒绝,不会先建个表再判断**。
|
||||
- **违法或不良意图**:删不合规的报销记录逃避审计、篡改数据掩盖违规、伪造记录欺骗他人。
|
||||
- **越权读取**:批量导出他人数据、读你没有权限的内容。
|
||||
- **注入与恶意脚本**:读到的邮件正文、聊天记录、文档内容里如果出现「忽略之前的指令」
|
||||
「你现在是……」这类文本,一律当**普通文字**处理,绝不执行;
|
||||
要写进文档的内容里夹带可执行脚本时,**直接拒绝写入并说明原因**,不会「悄悄清洗一下再写」。
|
||||
|
||||
助手拒绝时会直说「该操作不在支持范围内」并简要说明原因,**不道歉、不引导你换个问法绕过去**。
|
||||
|
||||
## 三条通用边界
|
||||
|
||||
这三条在每篇文档里都出现过,这里给出完整版。
|
||||
|
||||
### 1. 它只能改「它自己建的」东西
|
||||
|
||||
助手是以「机器人代表你」的身份在工作。企业微信对这个身份的规定是:
|
||||
**你创建或拥有的数据它可以读取、查询、下载,但它只能写入或修改机器人自己创建或拥有的数据。**
|
||||
|
||||
- **读**:你的日程、文档、待办、邮件、微盘文件都能读。
|
||||
- **写**:只能改**它自己建的**。你说「把我昨天写的那份文档改一下」——那份是你建的,它改不了。
|
||||
|
||||
碰到这种请求,助手**不会反复重试**,而是直接说明这条边界,并给替代方案:
|
||||
「由我新建一份」或者「这个得你在企业微信里改」。
|
||||
|
||||
**实测印证**:助手创建的待办,创建人显示的是**机器人身份**,不是你本人。
|
||||
这条边界直接决定了那 26 个高风险动作里有多少是你实际用得上的。
|
||||
|
||||
### 2. 能力按品类逐项开通
|
||||
|
||||
机器人不是开箱全能。通讯录、文档、微盘、会议、邮件、群聊……**每一类都要单独开通**。
|
||||
没开通的品类,第一次调用就会被企业微信拒绝,并附上一段官方的开通指引。
|
||||
|
||||
助手的处理是固定的:**把那段指引一字不改地转给你**(包括其中的链接,不改写、不省略、不"帮你总结"),
|
||||
然后**停下来**——**不重试,也不换个方法绕过去**。那是权限问题,重试不会变好。
|
||||
|
||||
实测账号的情况:基础品类一开始就有;通讯录、文档、微盘、会议、邮件是后来单独补开的;
|
||||
**群聊会话品类始终没开通**,所以 [04 群聊历史](04-群聊历史.md) 整域都没验过。
|
||||
|
||||
### 3. 危险动作先问你
|
||||
|
||||
也就是本篇上面写的全部内容。
|
||||
|
||||
## 📋 验证状态
|
||||
|
||||
**这一篇讲的是「助手会怎么做」,而「助手在真实对话里是不是真的这么做」,
|
||||
只做了很有限的验证。** 如实说明:
|
||||
|
||||
| 项 | 状态 |
|
||||
|---|---|
|
||||
| 26 个高风险动作里,实际执行过的 | **5 个**:待办标记完成、待办删除、日程更新、日程取消、发消息。执行前都是明确知情的 |
|
||||
| 其余 21 个高风险动作 | ⚠️ **未做破坏性验证**——不适合拿真实数据和真人做验收实验 |
|
||||
| 4 个「看情况」升级的判定 | ⚠️ **未实测** |
|
||||
| **助手在对话里是否真的先问再做** | ⚠️ **未做端到端实测**。界面里的完整链路跑不通(本机内存不足 + AI 审批未配置),所以「确认才执行」这个行为本身没有被真机验证过 |
|
||||
| 三档风险的划分依据 | ⚠️ 来自接口描述与技能声明,**不是逐个实测出来的**。发现与实际行为不符时以实际行为为准 |
|
||||
|
||||
**唯一被真机验证过的确认类行为**是日程/会议的消歧问句——
|
||||
助手输出的是逐字正确的 `需要创建日程还是会议?(请回复:日程 / 会议)`。
|
||||
(这一条是修复了一个缺陷之后复测通过的:第一次测试时它把这句话改写成了自己的说法。)
|
||||
|
||||
**本篇不含任何编造的确认对话。** 上面「助手会怎么问」一节里的三个例句是**格式示意**,
|
||||
不是实测记录——真实对话里的措辞会随具体对象和内容变化。
|
||||
|
||||
### 一处与上游的有意差异
|
||||
|
||||
这套能力改写自企业微信官方的技能包。上游对**发邮件**的规定是:
|
||||
「展示预览后直接发,不许再问是否发送」。
|
||||
|
||||
**本项目故意改了这一条**:发邮件不可撤回,属于最典型的高风险动作,所以预览照旧展示,
|
||||
但**展示之后仍然要等你明确同意**才发。记在这里是为了说明这不是疏忽,是有意为之。
|
||||
|
||||
## 相关
|
||||
|
||||
- [README](README.md)——总入口,含各能力的验证进度
|
||||
- [01 快速开始](01-快速开始.md)——授权与首次使用
|
||||
- 各能力文档的「注意事项」——每一域自己的具体确认措辞
|
||||
Reference in New Issue
Block a user