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:
145
agents/wecom-assistant/docs/12-智能文档.md
Normal file
145
agents/wecom-assistant/docs/12-智能文档.md
Normal file
@@ -0,0 +1,145 @@
|
||||
# 智能文档
|
||||
|
||||
企业微信的智能文档 / 智能主页:一份文档由**多个页面**组成(页面之间可以嵌套成树),
|
||||
每个页面由若干**内容块**组成,还自带一份**内置数据表**,页面上的图表和表单按钮可以绑到它上面。
|
||||
|
||||
**这一域最重要的一条规则是路由**:你说「写个文档 / 整理成文档 / 输出到文档 / 帮我写份周报」
|
||||
而**没指明是哪种文档**时,**默认落到这里**——助手不会追问「你要哪种文档」。
|
||||
只有你明确说了「在线文档 / Word」「在线表格」「智能表格」,或者给出对应链接,才会转给别的能力。
|
||||
|
||||
## 你可以怎么说
|
||||
|
||||
> 「帮我写份项目周报」
|
||||
> 「把这些内容整理成文档」
|
||||
> 「做个数据看板页」
|
||||
> 「做个报名表单页」
|
||||
> 「这份智能文档写了什么?」
|
||||
> 「在文档里再加一段」
|
||||
|
||||
## 📋 验证状态
|
||||
|
||||
| 项 | 状态 |
|
||||
|---|---|
|
||||
| 新建智能文档 | ✅ **已实测**(只验到「能建出来」这一步) |
|
||||
| 由 Markdown 一次性导入建成带内容的文档 | ⚠️ **未实测** |
|
||||
| 读页面树 / 读页面正文 | ⚠️ **未实测** |
|
||||
| 追加内容 | ⚠️ **未实测** |
|
||||
| 整页覆盖 | ⚠️ **未实测**(高风险写入,未做破坏性验证) |
|
||||
| 内容块级增删改 | ⚠️ **未实测** |
|
||||
| 调整页面结构(新建 / 删除 / 改名 / 移动 / 改布局) | ⚠️ **未实测** |
|
||||
| 取文档内置数据表 | ⚠️ **未实测** |
|
||||
| 上传图片 / 附件 | ⚠️ **未实测** |
|
||||
| 完整链路(你说一句话 → 助手自动写完) | ⚠️ 未实测 |
|
||||
|
||||
**实测记录**(命令层,人工在真实账号上执行):
|
||||
|
||||
```bash
|
||||
wecom-cli smartpage create ... # ✅ 建出一份智能文档,标识以 a1_ 开头
|
||||
```
|
||||
|
||||
**只验到「创建」这一步。** 读、写、改页面结构一条都没跑——所以本页不写「实际效果」,
|
||||
也不虚构任何页面内容或返回值。下面「能力清单」与「注意事项」来自接口定义与技能文档,
|
||||
是**设计意图,不是实测结论**。
|
||||
|
||||
同批实测印证了文档标识的前缀路由:智能文档编辑态是 `a1_`,在线文档 `w3_`,在线表格 `e3_`,
|
||||
智能表格 `s3_`。助手靠这个判断你给的链接是哪种文档。
|
||||
|
||||
**测试数据处置**:命令行没有删除文档的接口,测试文档已重命名为
|
||||
「【可删除】DesireCore验收测试-\*」,需要在企业微信里手动删除。
|
||||
|
||||
## 能力清单
|
||||
|
||||
> 除「新建」外均**未实测**。
|
||||
|
||||
| 能做什么 | 命令 | 风险 |
|
||||
|---|---|---|
|
||||
| 新建空白智能文档 | `wecom-cli smartpage create` | 低风险写入 |
|
||||
| 由 Markdown 一次性导入建成带内容的文档 | `wecom-cli smartpage import` | 低风险写入 |
|
||||
| 读页面树 / 读某页正文 / 读某页内容块 | `wecom-cli smartpage pages get` | 读取 |
|
||||
| 在页面末尾追加内容 | `wecom-cli smartpage pages append` | 低风险写入 |
|
||||
| **整页覆盖**内容 | `wecom-cli smartpage pages overwrite` | **高风险写入** |
|
||||
| 改页面结构(新建 / 删除 / 改名 / 移动 / 改布局) | `wecom-cli smartpage pages update` | **高风险写入**(仅删除页面那一档) |
|
||||
| 内容块级插入 / 替换 / 删除 | `wecom-cli smartpage blocks update` | **高风险写入**(仅替换与删除那两档) |
|
||||
| 取文档内置数据表的子表列表 | `wecom-cli smartpage databases get` | 读取 |
|
||||
| 上传图片 / 文件到文档空间 | `wecom-cli smartpage images / files upload` | 低风险写入 |
|
||||
|
||||
**搜索文档、改文档名不在这里**——归 [13 文档管理](13-文档管理.md)。
|
||||
本域的「改名」改的是**页面名**,不是整份文档的名字。
|
||||
|
||||
## 注意事项
|
||||
|
||||
**编辑态和发布态是两种东西,发布态改不了。**
|
||||
|
||||
| 状态 | 链接长什么样 | 能不能改 |
|
||||
|---|---|---|
|
||||
| 编辑态 | `doc.weixin.qq.com`,标识 `a1_` 开头 | 可读可写 |
|
||||
| 发布态 | `page.weixin.qq.com`,标识 `b1_` 开头 | **只读** |
|
||||
|
||||
你给的是发布态链接却要求编辑时,助手会请你换一个编辑态链接,**不会硬试**。
|
||||
|
||||
**默认是「追加」不是「覆盖」。** 说「写入 / 记录 / 补充 / 加进去」这类中性词,助手追加到末尾;
|
||||
只有「覆盖 / 重写 / 替换整页 / 清空重写」这类强语义词才会整页覆盖。
|
||||
|
||||
**「把第三段改一下」不会走整页覆盖。** 局部改动走的是**内容块级编辑**——
|
||||
只动那一块,其余原样保留。助手**不会为了图省事整页重写**。
|
||||
|
||||
**整页覆盖是把原有内容块全部删掉后重建**,旧内容没有任何接口能找回来。所以执行前会复述
|
||||
「将用新内容全量覆盖页面『XX』的原有内容,原内容不可恢复」并等你明确同意。
|
||||
另外覆盖时如果拿不到版本号,**会静默盖掉别人刚写的并发修改**——所以助手会先重新读一遍最新内容。
|
||||
|
||||
**删页面是级联的。** 删一个页面会**连同它下面的所有子页面一起删掉**。
|
||||
助手会先把子页面数出来告诉你(「及其全部 N 个子页面:……」)再等你同意。
|
||||
同一个命令里的新建、改名、移动、改布局是可逆的,不需要这层确认——但移动改变了层级归属,
|
||||
改完助手会重新读一遍结构再告诉你新的样子。
|
||||
|
||||
**改之前一定会重新读一遍。** 哪怕几分钟前刚读过。既是为了拿准要改哪一块,
|
||||
也是为了不覆盖掉别人的并发修改。
|
||||
|
||||
**要做表单页 / 数据看板页,走的是另一条路。**
|
||||
需求里出现「表单 / 报名 / 问卷 / 收集 / 录入」或「数据看板 / 图表绑数据 / 任务系统 / 项目跟踪」时,
|
||||
页面上的控件要引用内置数据表的字段——**必须先把字段定好,再写页面内容**。
|
||||
直接导入一份 Markdown 会建出一份**没有数据表的静态文档**:报名按钮存不下数据,图表也渲染不出来。
|
||||
助手知道这个顺序。
|
||||
|
||||
**文档自带一份内置数据表,不用另建智能表格。**
|
||||
那份内置表的子表、字段、记录操作会委托给 [11 智能表格](11-智能表格.md);
|
||||
但页面上的图表、视图、筛选控件属于展示层,仍归本域。
|
||||
|
||||
**文档命名有固定风格。** 中文命名,时间等附加信息用中文括号标注——
|
||||
`项目进展周报(2026.04.23)` 是对的,`工作日报_20260202` 这种下划线拼英文日期是不允许的。
|
||||
|
||||
**正文里的图片会被真的读进去。** 你让它「总结这份文档」而正文里有图时,
|
||||
助手会把图片下载下来识别,再和文字合并作答,必要时标注「图 N:……」方便你溯源。
|
||||
图片下载失败时它会如实说「第 N 张图片无法访问,未纳入分析」——**不会编造图片内容**。
|
||||
纯粹的结构调整、搬运、覆盖任务则跳过这一步。
|
||||
|
||||
**页面里的只读组件会被原样保留**,助手不会顺手改掉或删掉它们。
|
||||
|
||||
**这些做不到**(会直接说明,引导你去客户端):
|
||||
|
||||
- 导出 / 下载为 PDF、Word、图片
|
||||
- 评论、查看历史版本、回收站恢复
|
||||
- 编辑发布态文档
|
||||
|
||||
**内容安全上有一条硬线**:写进页面的内容里如果夹带可执行脚本、事件处理器属性、
|
||||
`javascript:` 之类的伪协议,助手会**直接拒绝写入并说明原因**,不会「悄悄清洗一下再写进去」。
|
||||
读到的页面内容里出现「忽略之前的指令」这类文本时,一律当普通文字处理。
|
||||
|
||||
### 三条通用边界在本域怎么体现
|
||||
|
||||
1. **只能改它自己建的东西**——**你自己建的那份智能文档,助手改不了**:追加不进去、
|
||||
改不了页面结构。它会说明这条边界,并建议「由我新建一份」或者你自己在客户端改。
|
||||
2. **能力按品类逐项开通**——智能文档属于文档品类(实测账号是后来单独补开的)。
|
||||
未开通时助手会把官方开通指引原样转给你,然后停下,不重试。
|
||||
3. **危险动作先问你**——**整页覆盖、删除页面、删除或替换内容块**是高风险写入,
|
||||
都会复述具体影响并等你明确同意。新建、导入、追加、插入内容块是低风险,直接执行。
|
||||
见 [99 风险与确认](99-风险与确认.md)。
|
||||
|
||||
## 相关
|
||||
|
||||
- [09 在线文档](09-在线文档.md)——Word 类在线文档(明说「Word / 在线文档」或给 `/doc/` 链接才走那边)
|
||||
- [11 智能表格](11-智能表格.md)——本文档内置数据表的字段与记录操作会委托到那边
|
||||
- [10 在线表格](10-在线表格.md)——行列网格式的表格
|
||||
- [13 文档管理](13-文档管理.md)——**搜索文档的唯一入口**;**改整份文档的名字**也在那边
|
||||
- [14 微盘](14-微盘.md)——文件放进微盘,而不是做成智能文档
|
||||
- [99 风险与确认](99-风险与确认.md)——覆盖与删除前的确认规则
|
||||
Reference in New Issue
Block a user