weaver-work-cli 0.1.20 → 0.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -11
- package/dist/core/refs.js +39 -36
- package/dist/internal/e10/auth/commands.js +33 -18
- package/dist/internal/e10/auth/session.js +60 -2
- package/dist/internal/e10/auth/xiaoe.js +253 -53
- package/dist/internal/e10/context.js +18 -6
- package/dist/internal/e10/request-runtime.js +3 -1
- package/dist/shortcuts/caizhilian/operations/confirm.js +1 -1
- package/dist/shortcuts/caizhilian/operations/handlers/file-collection.js +901 -20
- package/dist/shortcuts/caizhilian/operations/handlers/folder.js +55 -0
- package/dist/shortcuts/caizhilian/operations/handlers/setting-attach.js +4 -4
- package/dist/shortcuts/caizhilian/operations/specs.js +75 -0
- package/dist/shortcuts/hrm/manifest.js +16 -9
- package/dist/shortcuts/hrm/operations/registry.js +2 -0
- package/dist/shortcuts/hrm/operations/resolve.js +449 -0
- package/dist/shortcuts/invoice/host.js +5 -4
- package/dist/shortcuts/meeting/operations/eb/association.js +151 -0
- package/dist/shortcuts/meeting/operations/eb/attendance-summary.js +153 -0
- package/dist/shortcuts/meeting/operations/eb/catalog.js +185 -13
- package/dist/shortcuts/meeting/operations/eb/conflict.js +17 -11
- package/dist/shortcuts/meeting/operations/eb/decision.js +385 -0
- package/dist/shortcuts/meeting/operations/eb/factory.js +222 -35
- package/dist/shortcuts/meeting/operations/eb/index.js +18 -1
- package/dist/shortcuts/meeting/operations/eb/link.js +212 -0
- package/dist/shortcuts/meeting/operations/eb/task-progress.js +123 -0
- package/dist/shortcuts/meeting/operations/env.js +78 -61
- package/dist/shortcuts/meeting/operations/link.js +125 -0
- package/dist/shortcuts/meeting/operations/registry.js +2 -0
- package/dist/shortcuts/meeting/operations/shared.js +13 -0
- package/dist/shortcuts/workflow/host.js +5 -1
- package/dist/shortcuts/workflow/operations/form.js +95 -11
- package/dist/shortcuts/workflow/operations/read.js +785 -26
- package/docs/e10-auth.md +8 -2
- package/docs/hrm.md +34 -2
- package/docs/invoice.md +3 -0
- package/package.json +2 -2
- package/scripts/xiaoe_env.py +118 -0
- package/skill-template/domains/hrm.md +2 -1
- package/skill-template/skill-template.md +1 -1
- package/skills/weaver-e10-blog/SKILL.md +1 -1
- package/skills/weaver-e10-caizhilian/SKILL.md +5 -4
- package/skills/weaver-e10-caizhilian/references/file-collection.md +37 -0
- package/skills/weaver-e10-caizhilian/references/folder.md +5 -1
- package/skills/weaver-e10-caizhilian/references/setting-attach.md +35 -5
- package/skills/weaver-e10-caizhilian/references/source-manifest.json +620 -5
- package/skills/weaver-e10-calendar/SKILL.md +1 -1
- package/skills/weaver-e10-ebuilder-form/SKILL.md +1 -1
- package/skills/weaver-e10-esb/SKILL.md +1 -1
- package/skills/weaver-e10-hrm/SKILL.md +52 -5
- package/skills/weaver-e10-hrm/references/org.md +107 -1
- package/skills/weaver-e10-jinchengda/SKILL.md +2 -1
- package/skills/weaver-e10-jiuchuanhui/SKILL.md +1 -1
- package/skills/weaver-e10-jucailin/SKILL.md +1 -1
- package/skills/weaver-e10-mail/SKILL.md +1 -1
- package/skills/weaver-e10-meeting/SKILL.md +27 -11
- package/skills/weaver-e10-meeting/references/meeting-eb.md +162 -7
- package/skills/weaver-e10-meeting/references/meeting-verification.md +271 -0
- package/skills/weaver-e10-meeting.zip +0 -0
- package/skills/weaver-e10-okr/SKILL.md +1 -1
- package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
- package/skills/weaver-e10-plan/SKILL.md +1 -1
- package/skills/weaver-e10-qiyecheng/SKILL.md +1 -1
- package/skills/weaver-e10-shared/SKILL.md +10 -13
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +11 -17
- package/skills/weaver-e10-shared/references/non-interactive-environment.md +21 -14
- package/skills/weaver-e10-shijingran/SKILL.md +1 -1
- package/skills/weaver-e10-skill-maker/SKILL.md +1 -1
- package/skills/weaver-e10-skill-maker/references/weaver-skill-style.md +1 -1
- package/skills/weaver-e10-wenshuding/SKILL.md +1 -1
- package/skills/weaver-e10-workflow/SKILL.md +19 -19
- package/skills/weaver-e10-workflow/references/source-manifest.json +13 -13
- package/skills/weaver-e10-workflow/references/workflow-create.md +11 -7
- package/skills/weaver-e10-workflow/references/workflow-query.md +9 -14
- package/skills/weaver-e10-yepiaotong/SKILL.md +1 -2
- package/skills/weaver-e10-yimiaoban/SKILL.md +1 -1
- package/skills/weaver-e10-yimiaoban/references/source-manifest.json +3 -3
- package/skills/weaver-e10-ziguanjia/SKILL.md +1 -1
|
@@ -17,9 +17,12 @@
|
|
|
17
17
|
| 列表/总数 | 筛选条件走 **URL query**(参数名为 eBuilder 配置的占位符名,如 `hrmmember`、`mt_status`,**不是表 dataKey**);body 必须带 `datajson`;CLI 先 count 再 list(同条件),`total` 来自 count |
|
|
18
18
|
| 详情 | `getFormDataByPk`,body 顶层 `mainTable.id` |
|
|
19
19
|
| 写操作 | body 用 **`datas` 数组**包裹 `mainTable`(缺 `datas` 会报"datas节点未找到"),`header.operator` 为当前用户 |
|
|
20
|
-
|
|
|
21
|
-
|
|
|
20
|
+
| 日期字段(**两种格式并存,务必看清**) | **① 多数不带秒 `yyyy-MM-dd HH:mm`**:会议 `begin_datetime` / `end_datetime`、决议明细 `begin_datetime` / `end_datetime`;**② 少数必须带秒 `yyyy-MM-dd HH:mm:ss`**:决议任务 `finish_date`、签到 `sign_time` / `signback_time` / `allow_late_time`。传错会报「传入字段:xxx…不满足传入格式」(2026-09-21 真机实测)|
|
|
21
|
+
| **写/改操作的主键** | **update 的主键必须走 URL**(形如 `POST /updateFormData/{interfacePk}?id=<主键>`):只放在 body 的 `datas[].mainTable.id` 会被拒,报「**主键传入不能为空**」(2026-09-21 真机实测 `update_meeting_sign_info`)。CLI 已按接口声明自动携带,body 里同时保留 `id` 以满足文档「id 必填」。|
|
|
22
|
+
| 人员 id(**分场景,勿混**) | **决议 / 冲突检测 / 会议人员 → HRM 员工 id**(形如 `1305319992400396336`):`executors`、`rummager`、`hrm_members`、`signMember` 筛选用;**签到表的 `user_id` → 实测存的是 E10 userId**(形如 `6788539829119521816`),补签匹配按它比对。姓名→员工 id 用 `weaver-e10-hrm`。⚠️ 传错**不报错**,但会静默查不到 / 冲突漏检 |
|
|
22
23
|
| 新建/更新 | create 不传 id(系统生成);update/delete 必传 id |
|
|
24
|
+
| **⚠️ 返回结构(必读)** | **人员 / 关联 / 状态 / 选择类字段返回的是「对象数组」,不是字符串**,形如 `[{"name":"崔智友","id":"1305319807700025376"}]` —— 取 id 读 `[0].id`、取显示名读 `[0].name`;**禁止**把整个数组直接当字符串拼接(会显示成 `System.Object[]`,看起来像"字段为空")。已实测这类字段:`executors` / `rummager` / `mt_id` / `relate_decision` / `decision_status` / `detail1[].executor` / `detail1[].finish_status`;而 `finish_date` / `id` / 日期 / 普通文本字段是字符串 |
|
|
25
|
+
| **⚠️ 写操作失败语义(必读)** | **EB 写接口"报错"≠"没有写入"**:实测 `create_mt_decision` 因字段校验失败(传了不被接受的 `data_status`)返回错误,但主表与明细**已经落库**,重试后产生了**重复决议 + 重复任务**。因此:写操作失败后**必须先回查**(`list` / `detail`)再决定重试或删除;CLI 的语义化写操作(`decision.publish` 等)在拿不到明确成功证据时会抛 **`partial`** 而非普通失败,并按此提示调用方 |
|
|
23
26
|
|
|
24
27
|
## operation 清单
|
|
25
28
|
|
|
@@ -36,6 +39,9 @@
|
|
|
36
39
|
| 会议议题 9.x | `meeting.eb.topic.list` / `.detail` | `meeting.eb.topic.update` / `.delete` | query_mt_topic_list(+count) / query_mt_topic_info / update_mt_topic_info / delete_mt_topic_info |
|
|
37
40
|
| 应用设置 7.x | `meeting.eb.baseSet.get` | — | query_meeting_baseset |
|
|
38
41
|
| 冲突检测 | `meeting.eb.conflict.room` / `.member`(只读) | — | query_roomusage_list / query_mtDetail_list + query_meeting_receipt_list(+count) |
|
|
42
|
+
| **决议概述** | `meeting.eb.decision.list` / `.detail` | `meeting.eb.decision.create` / `.delete` / **`.publish`(推荐)** | query_mt_decision_list(+count) / query_mt_decision_info / create_mt_decision / delete_mt_decision / update_mt_isdecision |
|
|
43
|
+
| **决议任务** | `meeting.eb.decisionTask.list` | `meeting.eb.decisionTask.update` | query_mt_decision_task_list(+count) / update_mt_decision_task |
|
|
44
|
+
| **补签(语义化)** | — | `meeting.eb.sign.mark` | update_meeting_sign_info(自动定位签到记录 id)|
|
|
39
45
|
|
|
40
46
|
## 常用命令
|
|
41
47
|
|
|
@@ -66,24 +72,104 @@ weaver-work-cli --json meeting run meeting.eb.meeting.create.prepare --input-jso
|
|
|
66
72
|
- write prepare:`{ status: 'AWAITING_CONFIRMATION', preview: { interfacePk, kind, body, path, notes }, continuation }`——**先向用户摘要 body 内容再确认**。
|
|
67
73
|
- write apply:`{ status: 'COMPLETE', interfacePk, dataIds }`;回读用对应 list/detail 核对。
|
|
68
74
|
|
|
75
|
+
## 会议决议与决议任务(EB 版,2026-09-21 新增)
|
|
76
|
+
|
|
77
|
+
**用途**:把会议成果(结合会议议题、纪要、用户提供的文档/信息)**汇总成决议**,系统按决议明细**自动生成待办任务**,后续可跟踪完成情况。
|
|
78
|
+
|
|
79
|
+
### 一句话链路
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
① meeting.eb.decision.publish ← 推荐入口:写「决议概述 + 明细」,并自动把会议标为已决议
|
|
83
|
+
├ 内部第 1 步 create_mt_decision 写概述(mt_content)+ 明细(detail1,每条 = 一项待办)
|
|
84
|
+
└ 内部第 2 步 update_mt_isdecision 写回会议:decision_Id + is_decision=2 + mt_status=8
|
|
85
|
+
② (用户配置的 ESB 联动)按决议明细生成「决议任务」数据 —— CLI 不参与、不写任务表
|
|
86
|
+
③ meeting.eb.decisionTask.list 查任务(按会议 / 执行人 / 状态)
|
|
87
|
+
④ meeting.eb.decisionTask.update 按执行人更新任务完成状态
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 关键字段口径(务必按此传)
|
|
91
|
+
|
|
92
|
+
- **`mt_content`**:决议概述文本(一段话),由调用方汇总后传入,CLI 不生成内容。
|
|
93
|
+
- **不要传 `data_status`**:`create_mt_decision` **不接受**该字段(真机报 `DataError:dataKey:data_status,该字段不存在`),提交状态由系统自动置 `1`(回查列表 `data_status=1`,ESB 联动照常触发)。
|
|
94
|
+
- **`detail1`(决议明细,至少 1 条)**:
|
|
95
|
+
| 字段 | 必填 | 说明 |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| `decision_title` | ✅ | 决议标题(= 任务标题)|
|
|
98
|
+
| `executors` | ✅ | 执行人,**HRM 员工 id**(多人逗号分隔)|
|
|
99
|
+
| `begin_datetime` / `end_datetime` | ✅ | `yyyy-MM-dd HH:mm` |
|
|
100
|
+
| `decision_status` | ✅ | 0未完成 / 1已完成 / 2已延期(默认 0)|
|
|
101
|
+
| `rummager` | ⭕ | 检查人,**员工 id**(**非必填**)|
|
|
102
|
+
| `related_type` | ⭕ | 0未关联 / 1日程 / 2任务(默认 0)|
|
|
103
|
+
| `sort_number` | ⭕ | 明细序号,省略时按数组顺序自动编号 |
|
|
104
|
+
- **`data_status`**:创建时 CLI **固定传 `1`(提交)** —— 传 0(暂存)**不会触发 ESB 联动,决议任务永远不会生成**。
|
|
105
|
+
- **会议侧**:`is_decision=2`(决议提交完成)+ `decision_Id=<决议概述 id>` + `mt_status=8`(结束)。**产生决议后会议即视为结束**,这是服务端口径(服务端源码 `decisionStatus==2` 时 `isover=true`)。
|
|
106
|
+
- **任务侧**:`mainTable` = 一条任务(含 `decision_title` / `executors` / `decision_status` / `mt_id` / `relate_decision`);`detail1` = 各执行人的 `finish_status`(0未完成/1已完成/2已延期)+ `finish_date`。
|
|
107
|
+
|
|
108
|
+
### 返回结构(解析前必读,2026-09-21 真机实测)
|
|
109
|
+
|
|
110
|
+
`decision.list` / `decisionTask.list` / `decision.detail` 中,**人员、关联、状态类字段返回的是「对象数组」而不是字符串**:
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
"executors": [{ "name": "崔智友", "id": "1305319807700025376" }]
|
|
114
|
+
"rummager": [{ "name": "裴永俊", "id": "1305319812204708008" }]
|
|
115
|
+
"mt_id": [{ "name": "你好中国", "id": "1316455906280819022" }]
|
|
116
|
+
"relate_decision": [{ "name": "会议决议概述表-…", "id": "1316456666740138910" }]
|
|
117
|
+
"decision_status": [{ "name": "未完成", "id": "0" }]
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
⇒ 取 id 读 `[0].id`、取显示名读 `[0].name`;**不要**把整个数组直接当字符串拼进回复(会显示成 `System.Object[]`)。
|
|
121
|
+
`detail1[]` 里 **`executor` 是对象数组**,而 **`finish_status` 是字符串**(形如 `"未完成"` / `"已完成"`),`finish_date` / `id` 也是字符串。
|
|
122
|
+
⚠️ **`decisionTask.list` 的 `detail1` 并非每行都返回**(真机实测:同一批任务里只有部分行带 `detail1`)—— 需要逐个执行人的完成状态时,不要假设每条都有 `detail1`;主表 `decision_status` 与 `detail1[].finish_status` 是两套状态(**主表归检查人维护,CLI 只更新 `detail1`**)。
|
|
123
|
+
|
|
124
|
+
**筛选参数(已真机验证生效)**:
|
|
125
|
+
- `decision.list` / `decisionTask.list`:`mt_id` = **会议 id**(不是决议 id、不是任务 id)。用无关会议 id 查询返回 0 条、用真实会议 id 返回正确条数 ⇒ 参数确实生效。
|
|
126
|
+
- `decisionTask.list` 另支持 `relate_decision`(决议概述 id)、`executors`(员工 id)、`decision_status`。
|
|
127
|
+
- 实测样例:「你好中国」(`mt_id=1316455906280819022`)→ 决议 1 条 + 决议任务 2 条(「解决方案」「研究方案」,执行人崔智友、检查人裴永俊);**证明 ESB 联动确实按决议明细生成了任务**。
|
|
128
|
+
|
|
129
|
+
### 必须遵守的行为
|
|
130
|
+
|
|
131
|
+
1. **优先用 `meeting.eb.decision.publish`**,不要手写"create 完再 markDecided"两步 —— 漏第二步会造成「决议建了、会议却还显示未决议」的半成品状态。
|
|
132
|
+
2. **一次会议只有一个决议概述**:重复 publish 前先 `decision.list`(按 `mt_id`)确认是否已有。
|
|
133
|
+
3. **明细至少 1 条**:没有明细等于没有任务,CLI 直接拒绝(`missing_required_field`)。
|
|
134
|
+
4. **`publish` 是写操作**:必须先 `prepare` 给用户看预览(概述 + 明细逐条),用户确认后才 `apply`。
|
|
135
|
+
5. **部分失败必须如实转达**:
|
|
136
|
+
- 决议已建但**写回会议失败** → 抛 `partial`,消息含 `decision_Id` —— **不要重复创建决议**,可稍后用 `meeting.eb.meeting.markDecided` 补标记(正文里说明了这点)。
|
|
137
|
+
- 决议可能已写入但**没返回 `dataIds`** → 抛 `partial`,提示先用 `decision.list(mt_id)` 回查,**同样不要重复创建**。
|
|
138
|
+
6. **任务与进度的读法(真机实测口径)**:
|
|
139
|
+
- **一条决议明细 = 一个任务**;明细里写多个执行人 ⇒ 该任务**多人共同跟进**(实测:1 明细 + 2 执行人 → 只生成 1 个任务)。
|
|
140
|
+
- **更新**用 `meeting.eb.decisionTask.update`:按 `executor` 写 `detail1`(`finish_status` 未完成/已完成/已延期 + `finish_date` **带秒**)。
|
|
141
|
+
**`finish_date` 是服务端必填**;把任务改回「未完成」时传一个**空格**即可显式清空。
|
|
142
|
+
**同一执行人重复更新 = 覆盖该人记录,不同执行人 = 追加**(实测两人跟进后 detail1 保留两条,互不覆盖)。
|
|
143
|
+
- ★ **读进度直接用 `decisionTask.list` 返回的 `data.progress`**(不必自己解析 detail1):
|
|
144
|
+
`progress.summary` = 整页汇总(`total` / `done` / `overdue` / `inProgress` / `pending`);
|
|
145
|
+
`progress.items[].progress` = 逐任务 `{ total, done, overdue, pending, status, members[] }`,
|
|
146
|
+
其中 `status ∈ done 全员完成 | overdue 有人延期 | inProgress 部分完成 | pending 尚未开始`,
|
|
147
|
+
`members[]` 给出每人 `executorId` / `executorName` / `status` / `finishDate`。
|
|
148
|
+
⚠️ 统计以 `executors` 为人员基准:**未跟进的执行人也会计入 `total` 并算作 `pending`**(不会漏人)。
|
|
149
|
+
- 原始信息仍可从 `rows[].detail1`(每人 `finish_status` / `finish_date` / `executor`)读取;`rows` **原样返回、未被改写**。
|
|
150
|
+
⚠️ **`mainTable.decision_status` 不可作为进度依据**:实测**始终为「未完成」**,既不随 detail1 变化,也无法经 `update_mt_decision_task` 写入(该接口只映射 detail1)。
|
|
151
|
+
- 查询:`meeting.eb.decisionTask.list`(按 `mt_id` 查某会议全部任务 / 按 `executors` 传员工 id 查某人的任务 / 分页 `pageNo`+`pageSize`)。
|
|
152
|
+
7. **`executors` / `rummager` / `user_id` 一律传 HRM 员工 id**(不是 E10 userId)—— 传错不报错但会静默失效。
|
|
153
|
+
|
|
69
154
|
## 冲突检测(EB 版,强制)
|
|
70
155
|
|
|
71
156
|
> 2026-09-20 补齐:此前 EB 版建会**没有任何冲突校验** —— 重复占用同一间会议室、参会人在同一时段撞会都不会被拦住。
|
|
72
157
|
|
|
73
158
|
- **自动强制(建会/变更自带)**:`meeting.eb.meeting.create.prepare` 与 `meeting.eb.meeting.change.prepare` 在生成确认预览**之前**自动执行会议室与参会人冲突检测(传了 `address` / `hrm_members` 才会真的发起查询)。命中时按应用设置处置:
|
|
74
159
|
- `room_conflict=1` / `member_conflict=1`(禁止提交)→ 抛 `conflict_rejected`:**直接停止,不询问、不新建**;
|
|
75
|
-
- `room_conflict=0` / `member_conflict=0`(仅提醒)→ 写入 `warnings
|
|
160
|
+
- `room_conflict=0` / `member_conflict=0`(仅提醒)→ 写入 `warnings`:**如实告知冲突 + 建议换时间/换地点 + 决定权交用户**;CLI 与服务端都不阻止提交,但 CLI **不主动建议忽略冲突**,也不提供"忽略 / 强制"类选项;
|
|
76
161
|
- 检测请求本身失败 → 抛 `conflict_check_failed`(fail-closed:宁可拦住,不可漏检)。
|
|
77
162
|
- **只查不建**:`meeting.eb.conflict.room` / `meeting.eb.conflict.member`,返回 `verdict`:`ok` 无冲突 / `warn` 仅提醒 / `rejected` 禁止提交 / `skipped` 应用设置已关闭该项检测。
|
|
78
163
|
- **口径(与 standalone skill 一致,不可擅改)**:
|
|
79
164
|
- 策略来自 `meeting.eb.baseSet.get` → `room_conflict_chk` / `room_conflict`、`member_conflict_chk` / `member_conflict`(`chk=0` 表示关闭检测,**页面同样不校验**);
|
|
80
|
-
- 会议室:查占用视图 `query_roomusage_list
|
|
165
|
+
- 会议室:查占用视图 `query_roomusage_list`(**过滤参数 `address` = 会议室 id**;时间重叠:占用开始 < 我的结束 且 占用结束 > 我的开始;占用视图只对有效状态生成,无需再过滤状态)。⚠️ 该接口**返回体的 `address` 字段为空**,会议室要读 **`room_id`** —— 别据此误判成"检测失效";
|
|
81
166
|
- 参会人:**2 次请求方案(无 N+1)** —— `query_mtDetail_list`(时间范围 + `mt_status=1,2,8,9`)取候选会议 → `query_meeting_receipt_list?mt_id=<多值批量>`(分批 + 分页拉全)→ 本地求交集;**禁止**退回「逐场会议查回执」的旧做法;
|
|
82
167
|
- 参会人以**回执表 `member_id`** 为准(会议表 `hrm_members` 是渲染文本,不可靠),且只统计 `member_type=1`(参会人员);
|
|
168
|
+
- ⚠️ **传参口径(2026-09-20 实测)**:`hrm_members` 必须是 **HRM 员工 id**;传 E10 userId **不报错**,但与回执 `member_id` 比对不上 → **静默漏检**(表现为"无冲突")。人员 → 员工 id 用 `weaver-e10-hrm`;
|
|
83
169
|
- `org_members`(参会部门)CLI **不展开**成员,因此只有 `hrm_members` 参与人员冲突检测 —— 该情况会以 warning 如实说明,需要覆盖部门成员时请先把部门展开为员工 id。
|
|
84
170
|
- **冲突处置的唯一依据就是应用设置**(`room_conflict` / `member_conflict`),CLI 不额外加码、也不引入任何隐藏校验:
|
|
85
171
|
- `1`「禁止提交」→ 怎么都不允许提交,直接拒绝(`conflict_rejected`);
|
|
86
|
-
- `0`「仅提醒」→
|
|
172
|
+
- `0`「仅提醒」→ 如实告知冲突并建议换时间/换地点,**是否继续由用户决定**(`prepare` 只给 `warnings`,不阻止 `apply`);CLI **不主动建议忽略冲突**。
|
|
87
173
|
|
|
88
174
|
## 建会特别说明(EB 版)
|
|
89
175
|
|
|
@@ -92,7 +178,76 @@ weaver-work-cli --json meeting run meeting.eb.meeting.create.prepare --input-jso
|
|
|
92
178
|
- 未开启 → 可 `meeting.eb.meeting.create.prepare`。
|
|
93
179
|
2. `mt_hours` 由 CLI 按 `begin_datetime`/`end_datetime` **自动计算**(小时,支持小数),无需用户提供。
|
|
94
180
|
3. `caller`/`contacter` 未指明时 CLI 默认填当前用户。
|
|
95
|
-
4.
|
|
181
|
+
4. ⭐ **建会成功后 CLI 会自动补建关联数据**(占用 / 回执 / 签到)—— 自定义接口 `create_meeting` **不会**像页面建会那样生成它们,而这三样是**冲突检测与补签的硬依赖**:
|
|
182
|
+
- **占用** `create_roomusage`:`room_id` = 会议的 `address`、`startdate`/`enddate` 与会议一致(缺它 ⇒ 会议室冲突检测查不到本场会);
|
|
183
|
+
- **回执** `create_meeting_receipt`:按 `hrm_members` **逐人一条**(`member_type=1`、`member_manager` = `member_id`)(缺它 ⇒ 参会人冲突检测失效);
|
|
184
|
+
- **签到** `create_meeting_sign`:按 `hrm_members` **逐人一条**(缺它 ⇒ `meeting.eb.sign.mark` 补签无记录可用)。
|
|
185
|
+
- 结果在 `apply` 返回的 **`data.association`**:`{ status: COMPLETE|PARTIAL, mtId, created: { roomUsage, receipt, sign }, warnings }`。
|
|
186
|
+
- **补建失败不中断建会**(主写入已成功)→ 只进 `association.warnings` 并说明后果;**不要因补建失败而重试建会**(会重复建会)。
|
|
187
|
+
- 未传 `address` → 跳过占用;未传 `hrm_members`(如仅用 `org_members` 指定部门,CLI 不展开部门成员)→ 跳过回执与签到,均在 warnings 中说明。
|
|
188
|
+
- 需要"取消会议释放占用"时用 `meeting.eb.meeting.delete`(会级联回收 占用/回执/签到);`delete_roomusage` 在本环境报「主键传入不能为空」,不可用。
|
|
189
|
+
|
|
190
|
+
## 出席情况汇总(`data.progress`,2026-09-22)
|
|
191
|
+
|
|
192
|
+
`meeting.eb.sign.list` 与 `meeting.eb.receipt.list` 的返回也附带 `data.progress`(机制同 `decisionTask.list`:**纯 CLI 侧计算、原始 `rows` 原样返回、不动服务端**):
|
|
193
|
+
|
|
194
|
+
- **`progress.page`** = `{ pageNo, pageSize, pageCount, total }`。
|
|
195
|
+
⚠️ **`summary` 里的计数只覆盖当前页**(`total` 才是全部条数)—— 要全量统计请传足够大的 `pageSize`(上限 200)或逐页累加,别把当页数字当总数。
|
|
196
|
+
- **签到** `progress.summary`:`total` / `signed` / `notSigned` / `signedOut` / `attendanceRate` / `byState`(`normal`·`leave`·`late`·`earlyLeave`·`notSignedOut`·`lateAndNotSignedOut`·`lateAndEarlyLeave`·`absent`·`notSigned`·`unknown`)。
|
|
197
|
+
⚠️ **未签到 = `is_sign` 与 `sign_time` 都为空**;**`is_sign=0` 是「缺席」**(已表态没来)—— 两者语义不同,别混在一起算出席率。
|
|
198
|
+
- **回执** `progress.summary`:`total` / `attend` / `decline` / `noReply` / `replyRate` / `attendRate` / `byMemberType`(`attendee`·`customer`·`other`)/ `bookRoom` / `bookTicket`。
|
|
199
|
+
⚠️ **`attend_status` 为空 = 未回执**(不是"不参加");`0` 不参加、`1` 参加。
|
|
200
|
+
- 两张表的 `mt_id` 语义不同:**签到表回的是会议名称文本,回执表回的是会议 id** —— 汇总里统一叫 `mtRef`(原样透出)。
|
|
201
|
+
|
|
202
|
+
## 详情页链接(`meeting.link`,2026-09-23 新增)
|
|
203
|
+
|
|
204
|
+
链接地址**随模式不同**,且 EB 版必须按表 tag 解析 `objid`(随环境变化、**不等于 formId**),
|
|
205
|
+
因此**禁止手工拼 URL** —— 一律用 `meeting.link` 生成(`objid` 按 `baseUrl|tenantKey` 长期缓存)。
|
|
206
|
+
|
|
207
|
+
| 模式 | 对象 | URL 模板 |
|
|
208
|
+
|---|---|---|
|
|
209
|
+
| EB 版 | 全部对象 | `{baseUrl}/sp/ebdfpage/card/0/{objid}/{dataid}`(`card` 后的 `0` **恒为 0**) |
|
|
210
|
+
| 标准版 | 会议详情 | `{baseUrl}/sp/meeting/meetingSingle?meetingId={meetingid}` |
|
|
211
|
+
| 标准版 | 会议室 / 会议类型 | 没有单页 → 只输出数据、不附链接 |
|
|
212
|
+
|
|
213
|
+
EB 表 tag 映射(`meeting.link` 的 `type` 取值,也可用 `tag` 直接指定表 tag):
|
|
214
|
+
|
|
215
|
+
| type | 表 tag | 对象 |
|
|
216
|
+
|---|---|---|
|
|
217
|
+
| `meeting`(默认) | `uf_mt_detail` | 会议 |
|
|
218
|
+
| `room` | `uf_mt_room_base` | 会议室 |
|
|
219
|
+
| `roomType` | `uf_mt_room_type` | 会议室类型 |
|
|
220
|
+
| `roomUsage` | `uf_mt_room_usage` | 会议室占用 |
|
|
221
|
+
| `setting` | `uf_mt_base_set` | 应用设置 |
|
|
222
|
+
| `mtType` | `uf_mt_type` | 会议类型 |
|
|
223
|
+
| `sign` | `uf_mt_sign` | 签到 |
|
|
224
|
+
| `receipt` | `uf_mt_receipt_member` | 回执 |
|
|
225
|
+
| `topic` | `uf_mt_topic` | 议题 |
|
|
226
|
+
| `minutes` | `uf_mt_minutes` | 纪要 |
|
|
227
|
+
|
|
228
|
+
Windows PowerShell:
|
|
229
|
+
|
|
230
|
+
```powershell
|
|
231
|
+
weaver-work-cli --json meeting run meeting.link --input-json '{"dataId":"1305624900858404950","type":"meeting","name":"周会"}'
|
|
232
|
+
weaver-work-cli --json meeting run meeting.link --input-json '{"dataIds":["1305624900858404950","1305624900858404951"],"name":"周会"}'
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
macOS/Linux(bash/zsh):
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
weaver-work-cli --json meeting run meeting.link --input-json '{"dataId":"1305624900858404950","type":"meeting","name":"周会"}'
|
|
239
|
+
weaver-work-cli --json meeting run meeting.link --input-json '{"dataIds":["1305624900858404950","1305624900858404951"],"name":"周会"}'
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
**输出与用法**:
|
|
243
|
+
|
|
244
|
+
- 单条:`data.path` / `data.url` / `data.markdown`(只有传了 `name` 才带 markdown)。
|
|
245
|
+
- 批量:`data.items[]`(列表输出时一次生成全部链接,别逐条调用)。
|
|
246
|
+
- `data.source`:`dynamic`(本次解析到 objid)/ `cache`(命中缓存)/ `none`(未取到或标准版无单页)。
|
|
247
|
+
- **解析失败只降级**:`url=null` + `warnings`,不抛错、不影响主业务结果 —— 如实说明"链接暂不可用",
|
|
248
|
+
**不要**因此重试,更不要自己拼 URL。
|
|
249
|
+
- `mode` 默认 `auto`(复用 `meeting.env.detect` 的模式判定与缓存);只有明确知道模式时才显式传 `eb` / `standard`。
|
|
250
|
+
- **输出格式**:链接必须内联到名称单元格(`[会议名称](url)`),**禁止**单列「详情链接」一行。
|
|
96
251
|
|
|
97
252
|
## 注意
|
|
98
253
|
|
|
@@ -110,5 +265,5 @@ weaver-work-cli --json meeting run meeting.eb.meeting.create.prepare --input-jso
|
|
|
110
265
|
- `eb_write_not_applied`:接口返回 `datajson.status=false`,服务端未生效,核对字段与权限。
|
|
111
266
|
- `target_changed` / `continuation_expired`:重新 prepare 并再次确认。
|
|
112
267
|
- `partial/write_uncertain`:写请求发出后连接中断,**禁止自动重试**,先 list/detail 回查是否已生效。
|
|
113
|
-
- `conflict_rejected`:命中冲突且应用设置为**禁止提交** —— 立即停止,建议用户换时间或换地点;若应用设置为**仅提醒**,则只写入 `warnings
|
|
268
|
+
- `conflict_rejected`:命中冲突且应用设置为**禁止提交** —— 立即停止,建议用户换时间或换地点;若应用设置为**仅提醒**,则只写入 `warnings`(不抛错),**是否继续由用户决定**(CLI 不主动建议忽略冲突)。
|
|
114
269
|
- `conflict_check_failed`:冲突检测接口调用失败(fail-closed,直接拒绝建会),核对占用/回执接口权限后重试。
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# 会议模块全功能验证清单(99 个 operation)
|
|
2
|
+
|
|
3
|
+
> **给执行方(其他智能体)的结论**:本 skill 通过 `weaver-work-cli` 暴露会议模块**全部 99 个 operation**
|
|
4
|
+
> (标准版 28 + EB 版 70 + 跨模式 1),**除本文「第 6 节 不在范围」列出的 8 项外,全部可在真机上验证完成**。
|
|
5
|
+
> 本文提供可直接照做的流程、逐条判据与负向用例;请按本文顺序执行,逐条留证据。
|
|
6
|
+
|
|
7
|
+
## 1. 先决条件(缺一不可)
|
|
8
|
+
|
|
9
|
+
1. **CLI**:`weaver-work-cli --version`。未安装或读取失败 → **必须先提示用户先补齐**(安装方式以共享规则为准,Agent 不能自行安装)。
|
|
10
|
+
2. **共享规则**:先读 `../weaver-e10-shared/SKILL.md`(安装、E10 认证、JSON 输出、高风险写入规则)。
|
|
11
|
+
3. **登录态**:`weaver-work-cli auth status --json` → `valid=true`;否 `=` `session_expired` 时按共享规则处理,**禁止**自行拼 Cookie。
|
|
12
|
+
4. **环境模式(强制第一步)**:`meeting.env.detect` → `mode=eb` 或 `mode=standard`。
|
|
13
|
+
- `mode=eb` → 只能用 `meeting.eb.*`;`mode=standard` → 只能用标准版 operation。
|
|
14
|
+
- **两套接口与数据互不相通**,在 EB 环境调标准版接口只会拿到空数据(反之亦然)。
|
|
15
|
+
5. **多租户提醒**:同一账号在不同站点(baseUrl)看到的会议不同;验证前先记录 `baseUrl` 与 `userId`,写入类验证**只用自建数据**。
|
|
16
|
+
|
|
17
|
+
## 2. 验证纪律(硬规则,违反即结论无效)
|
|
18
|
+
|
|
19
|
+
| 规则 | 说明 |
|
|
20
|
+
|---|---|
|
|
21
|
+
| 写入四步走 | `prepare` → 向用户/发起方摘要 preview → `apply`(`confirm:true` + `continuation`)→ **回读** → **清理** |
|
|
22
|
+
| 只用自建数据 | 写入验证一律新建名为 `CLI-VERIFY-<时间戳>` 的会议/会议室/类型/议题,**禁止**改动或删除他人真实数据 |
|
|
23
|
+
| 不跳步 | **禁止**跳过 prepare 直接 apply;**禁止**用真实会议试删除 |
|
|
24
|
+
| 失败也是结论 | FAIL 必须原文给出 `error.type/subtype` 与报错文案,**禁止**把失败写成"没有数据" |
|
|
25
|
+
| EB 写失败 ≠ 没写入 | EB 接口报校验错误时数据可能已落库 → **先回查再决定重试**(否则产生重复数据) |
|
|
26
|
+
| 每条留证据 | 记录 `operation` + 入参摘要 + 关键输出片段(id / status / count),便于复核 |
|
|
27
|
+
| continuation | 默认 10 分钟有效;过期返回 `continuation_expired` → 重新 prepare,**不要**重用旧 token |
|
|
28
|
+
|
|
29
|
+
## 3. 判据代号(下文表格中引用)
|
|
30
|
+
|
|
31
|
+
| 代号 | 含义 |
|
|
32
|
+
|---|---|
|
|
33
|
+
| `R-LIST` | `ok=true`;`total` 与 `count` 自洽(`total>=count`);`rows` 每项含 `mainTable`(EB)或业务字段(标准版);`pageNo/pageSize` 回显正确 |
|
|
34
|
+
| `R-DETAIL` | `ok=true` 且 `data` 非空;id 不存在时必须报 `not_found`(**不是**返回空对象) |
|
|
35
|
+
| `R-COUNT` | `withCount:true` 时 `total` 存在;count 与 list 允许不一致时以 `max(total, count)` 为准 |
|
|
36
|
+
| `W-PREP` | `status=AWAITING_CONFIRMATION`,含 `preview`(path/body)+ `continuation`;EB 的 update/delete `preview.path` **必带 `?id=<主键>`** |
|
|
37
|
+
| `W-APPLY` | `status=COMPLETE`;随后按"回读"列核对 |
|
|
38
|
+
| `W-FAIL-SAFE` | 缺必填 → `missing_required_field`;未确认 → `confirmation.required`;主键缺失 → 服务端原文报错(不得静默成功) |
|
|
39
|
+
| `W-CLEAN` | 用删除类 operation 清理自建数据;EB 清理首选 `meeting.eb.meeting.delete`(级联回收占用/回执/签到) |
|
|
40
|
+
|
|
41
|
+
## 4. 全量清单
|
|
42
|
+
|
|
43
|
+
### 4.1 标准版(28 个,`mode=standard`)
|
|
44
|
+
|
|
45
|
+
| # | operation | 风险 | 必填入参 | 判据 | 回读 / 清理 |
|
|
46
|
+
|---|---|---|---|---|---|
|
|
47
|
+
| 1 | `meeting.env.detect` | read | — | 返回 `mode` + `baseUrl`;`refresh:true` 能强制刷新 | — |
|
|
48
|
+
| 2 | `meeting.calendar.base` | read | — | 返回工作日/时段等日历基础设置 | — |
|
|
49
|
+
| 3 | `meeting.detail.field` | read | `id` | `R-DETAIL` | 用 `meeting.list` 取 id |
|
|
50
|
+
| 4 | `meeting.list` | read | — | `R-LIST`(客户端按 `filterDate` 过滤,天然覆盖各角色) | — |
|
|
51
|
+
| 5 | `meeting.room.list` | read | — | `R-LIST`(`beginDate`/`endDate`/`onlyAvailable` 生效) | — |
|
|
52
|
+
| 6 | `meeting.room.usage` | read | — | `R-LIST`(`roomid`+`currentdate` 定位占用视图) | — |
|
|
53
|
+
| 7 | `meeting.type.list` | read | — | `R-LIST` | — |
|
|
54
|
+
| 8 | `meeting.conflict.room` | read | `beginDatetime`,`endDatetime`,`address` | 返回冲突判定(`cansub`);同房间同时间应有冲突 | — |
|
|
55
|
+
| 9 | `meeting.conflict.member` | read | `beginDatetime`,`endDatetime`,`hrmids` | 同上,人员维度 | — |
|
|
56
|
+
| 10 | `meeting.conflict.roomAttribute` | read | `beginDatetime`,`endDatetime`,`address` | 同上,会议室属性维度 | — |
|
|
57
|
+
| 11 | `meeting.create.prepare` | read-before-write | `name`,`beginDatetime`,`endDatetime` | `W-PREP` + 内部自动跑冲突检测(`conflict_rejected` 属正常拒绝路径) | 记 `continuation` |
|
|
58
|
+
| 12 | `meeting.create.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | `meeting.list` 应出现;清理用 `meeting.delete.*` |
|
|
59
|
+
| 13 | `meeting.cancel.prepare` | read-before-write | `id` | `W-PREP` | — |
|
|
60
|
+
| 14 | `meeting.cancel.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读状态=已取消;不可用自建会议时跳过 |
|
|
61
|
+
| 15 | `meeting.delete.prepare` | read-before-write | `id` | `W-PREP` | — |
|
|
62
|
+
| 16 | `meeting.delete.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | **软删**:正常列表不再出现(进回收站) |
|
|
63
|
+
| 17 | `meeting.change.prepare` | read-before-write | `id` | `W-PREP`;按会议状态自动决定 `operateType`(草稿=UPDATE/正常=CHANGE) | — |
|
|
64
|
+
| 18 | `meeting.change.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读被改字段(如名称/时间) |
|
|
65
|
+
| 19 | `meeting.receipt.list` | read | `mtId` | `R-LIST` | 用 `mtId` 关联会议 |
|
|
66
|
+
| 20 | `meeting.receipt.update.prepare` | read-before-write | `mtId`,`memberId`,`attendStatus` | `W-PREP` | — |
|
|
67
|
+
| 21 | `meeting.receipt.update.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | `receipt.list` 回读 `attendStatus` |
|
|
68
|
+
| 22 | `meeting.sign.list` | read | `mtId` | `R-LIST`(返回 `signs[].id`,是补签/签退/清除的入参来源) | — |
|
|
69
|
+
| 23 | `meeting.sign.mark.prepare` | read-before-write | `id`(签到记录 id) | `W-PREP` | — |
|
|
70
|
+
| 24 | `meeting.sign.mark.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | `sign.list` 回读 `sign_time` 有值 |
|
|
71
|
+
| 25 | `meeting.sign.back.prepare` | read-before-write | `id` | `W-PREP` | — |
|
|
72
|
+
| 26 | `meeting.sign.back.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读签退时间 |
|
|
73
|
+
| 27 | `meeting.sign.clear.prepare` | read-before-write | `id` | `W-PREP` | — |
|
|
74
|
+
| 28 | `meeting.sign.clear.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读签到记录已清空 |
|
|
75
|
+
|
|
76
|
+
### 4.2 EB 版 · 会议与冲突(`mode=eb`)
|
|
77
|
+
|
|
78
|
+
| # | operation | 风险 | 必填入参 | 判据 | 回读 / 清理 |
|
|
79
|
+
|---|---|---|---|---|---|
|
|
80
|
+
| 29 | `meeting.eb.meeting.list` | read | — | `R-LIST`+`R-COUNT`;分页必须落 body `pageInfo`(只放 URL 会恒回 10 条) | — |
|
|
81
|
+
| 30 | `meeting.eb.meeting.detail` | read | `id` | `R-DETAIL`(数据在 `datas[0].mainTable`) | — |
|
|
82
|
+
| 31 | `meeting.eb.meeting.create.prepare` | read-before-write | `mt_creator`,`mt_name`,`begin_datetime`,`end_datetime`,`mt_status`,`operate_type` | `W-PREP`;内部先读 `baseSet` 判流程建会 + 冲突检测 | 记 `continuation` |
|
|
83
|
+
| 32 | `meeting.eb.meeting.create.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY`;`data.association` 应报占用/回执/签到补建结果 | 回读 list;`W-CLEAN` |
|
|
84
|
+
| 33 | `meeting.eb.meeting.change.prepare` | read-before-write | `id`,`operate_type` | `W-PREP`(取消用 `operate_type=CANCEL` + `mt_status=4`) | — |
|
|
85
|
+
| 34 | `meeting.eb.meeting.change.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读被改字段 |
|
|
86
|
+
| 35 | `meeting.eb.meeting.delete.prepare` | read-before-write | `id` | `W-PREP`(preview.path 带 `?id=`) | — |
|
|
87
|
+
| 36 | `meeting.eb.meeting.delete.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 list 不含;**级联回收占用/回执/签到** |
|
|
88
|
+
| 37 | `meeting.eb.meeting.markDecided.prepare` | read-before-write | `id`,`is_decision` | `W-PREP` | — |
|
|
89
|
+
| 38 | `meeting.eb.meeting.markDecided.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 `is_decision`/`decision_Id` |
|
|
90
|
+
| 39 | `meeting.eb.conflict.room` | read | `beginDatetime`,`endDatetime`,`address` | 返回冲突结论;自建会议后应能识别本场会 | — |
|
|
91
|
+
| 40 | `meeting.eb.conflict.member` | read | `beginDatetime`,`endDatetime`,`hrmMembers` | 同上,参会人维度 | — |
|
|
92
|
+
|
|
93
|
+
### 4.3 EB 版 · 会议室 / 占用
|
|
94
|
+
|
|
95
|
+
| # | operation | 风险 | 必填入参 | 判据 | 回读 / 清理 |
|
|
96
|
+
|---|---|---|---|---|---|
|
|
97
|
+
| 41 | `meeting.eb.room.list` | read | — | `R-LIST`+`R-COUNT` | — |
|
|
98
|
+
| 42 | `meeting.eb.room.detail` | read | `id` | `R-DETAIL` | — |
|
|
99
|
+
| 43 | `meeting.eb.room.create.prepare` | read-before-write | `room_name`,`hrm_ids`,`org_id`,`status` | `W-PREP` | 记 `continuation` |
|
|
100
|
+
| 44 | `meeting.eb.room.create.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 list;清理用 `.delete.*` |
|
|
101
|
+
| 45 | `meeting.eb.room.update.prepare` | read-before-write | `id` | `W-PREP`(preview.path 带 `?id=`) | — |
|
|
102
|
+
| 46 | `meeting.eb.room.update.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读被改字段 |
|
|
103
|
+
| 47 | `meeting.eb.room.delete.prepare` | read-before-write | `id` | `W-PREP` | — |
|
|
104
|
+
| 48 | `meeting.eb.room.delete.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 list 不含(**只删自建会议室**) |
|
|
105
|
+
| 49 | `meeting.eb.roomUsage.list` | read | — | `R-LIST`+`R-COUNT` | — |
|
|
106
|
+
| 50 | `meeting.eb.roomUsage.detail` | read | `id` | `R-DETAIL` | — |
|
|
107
|
+
| 51 | `meeting.eb.roomUsage.create.prepare` | read-before-write | `mt_id` | `W-PREP` | 记 `continuation` |
|
|
108
|
+
| 52 | `meeting.eb.roomUsage.create.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 list;**表关联字段是 `room_id`** |
|
|
109
|
+
| 53 | `meeting.eb.roomUsage.delete.prepare` | read-before-write | `id` | `W-PREP` | 见第 6 节:apply 侧环境已知异常 |
|
|
110
|
+
| 54 | `meeting.eb.roomUsage.delete.apply` | high-risk-write | `confirm`,`continuation` | 见第 6 节(改用 `meeting.eb.meeting.delete` 级联释放) | — |
|
|
111
|
+
|
|
112
|
+
### 4.4 EB 版 · 签到 / 回执
|
|
113
|
+
|
|
114
|
+
| # | operation | 风险 | 必填入参 | 判据 | 回读 / 清理 |
|
|
115
|
+
|---|---|---|---|---|---|
|
|
116
|
+
| 55 | `meeting.eb.sign.list` | read | — | `R-LIST`+`R-COUNT`;`data.progress.summary` 含 `signed/notSigned/attendanceRate/byState`,并带 `progress.page` | 注意 `mt_id` 返回的是**会议名称**,筛选参数 `mt_id` 才是会议 id |
|
|
117
|
+
| 56 | `meeting.eb.sign.detail` | read | `id` | `R-DETAIL` | — |
|
|
118
|
+
| 57 | `meeting.eb.sign.create.prepare` | read-before-write | `mt_id` | `W-PREP` | 记 `continuation` |
|
|
119
|
+
| 58 | `meeting.eb.sign.create.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 list(时间字段**必须带秒**) |
|
|
120
|
+
| 59 | `meeting.eb.sign.update.prepare` | read-before-write | `id`,`mt_id` | `W-PREP`(preview.path 带 `?id=`) | — |
|
|
121
|
+
| 60 | `meeting.eb.sign.update.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读被改字段 |
|
|
122
|
+
| 61 | `meeting.eb.sign.mark.prepare` | read-before-write | `mt_id`,`user_id` | `W-PREP`;**补签走更新,不是新增** | 记 `continuation` |
|
|
123
|
+
| 62 | `meeting.eb.sign.mark.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 `sign.list` 的 `sign_time` |
|
|
124
|
+
| 63 | `meeting.eb.receipt.list` | read | — | `R-LIST`+`R-COUNT`;`progress.summary` 含 `attend/decline/noReply/replyRate` | `attend_status` 空=未回执、`0`=不参加、`1`=参加 |
|
|
125
|
+
| 64 | `meeting.eb.receipt.detail` | read | `id` | `R-DETAIL` | — |
|
|
126
|
+
| 65 | `meeting.eb.receipt.create.prepare` | read-before-write | `mt_id`,`member_type`,`member_id`,`member_manager` | `W-PREP` | 记 `continuation` |
|
|
127
|
+
| 66 | `meeting.eb.receipt.create.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 list;清理随会议删除 |
|
|
128
|
+
| 67 | `meeting.eb.receipt.update.prepare` | read-before-write | `id`,`mt_id`,`member_id`,`attend_status` | `W-PREP` | — |
|
|
129
|
+
| 68 | `meeting.eb.receipt.update.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 `attend_status` |
|
|
130
|
+
|
|
131
|
+
### 4.5 EB 版 · 纪要 / 类型 / 议题
|
|
132
|
+
|
|
133
|
+
| # | operation | 风险 | 必填入参 | 判据 | 回读 / 清理 |
|
|
134
|
+
|---|---|---|---|---|---|
|
|
135
|
+
| 69 | `meeting.eb.minute.list` | read | — | `R-LIST`+`R-COUNT`;`mt_id` 支持逗号多值;关键字:`mt_minutes_subject`/`mt_minutes_no`/`parse_content`(正文 HTML)/`minutes_status` | 创建见第 6 节(无自定义接口) |
|
|
136
|
+
| 70 | `meeting.eb.type.list` | read | — | `R-LIST`+`R-COUNT` | — |
|
|
137
|
+
| 71 | `meeting.eb.type.create.prepare` | read-before-write | `type_name` | `W-PREP` | 记 `continuation` |
|
|
138
|
+
| 72 | `meeting.eb.type.create.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 list;清理用 `.delete.*` |
|
|
139
|
+
| 73 | `meeting.eb.type.delete.prepare` | read-before-write | `id` | `W-PREP` | — |
|
|
140
|
+
| 74 | `meeting.eb.type.delete.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 list 不含(**只删自建类型**) |
|
|
141
|
+
| 75 | `meeting.eb.topicType.list` | read | — | `R-LIST`+`R-COUNT` | — |
|
|
142
|
+
| 76 | `meeting.eb.topicType.detail` | read | `id` | `R-DETAIL` | — |
|
|
143
|
+
| 77 | `meeting.eb.topicType.update.prepare` | read-before-write | `id` | `W-PREP`;**先读原值**(部分字段 detail 不回值,需从 list 取) | 记 `continuation` |
|
|
144
|
+
| 78 | `meeting.eb.topicType.update.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读被改字段 |
|
|
145
|
+
| 79 | `meeting.eb.topicType.delete.prepare` | read-before-write | `id` | `W-PREP` | — |
|
|
146
|
+
| 80 | `meeting.eb.topicType.delete.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 list 不含 |
|
|
147
|
+
| 81 | `meeting.eb.topic.list` | read | — | `R-LIST`+`R-COUNT`(议题为 EB 独有) | — |
|
|
148
|
+
| 82 | `meeting.eb.topic.detail` | read | `id` | `R-DETAIL` | — |
|
|
149
|
+
| 83 | `meeting.eb.topic.update.prepare` | read-before-write | `id` | `W-PREP` | 记 `continuation` |
|
|
150
|
+
| 84 | `meeting.eb.topic.update.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读被改字段 |
|
|
151
|
+
| 85 | `meeting.eb.topic.delete.prepare` | read-before-write | `id` | `W-PREP` | — |
|
|
152
|
+
| 86 | `meeting.eb.topic.delete.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 list 不含(**只删自建议题**) |
|
|
153
|
+
|
|
154
|
+
### 4.6 EB 版 · 应用设置 / 决议 / 决议任务
|
|
155
|
+
|
|
156
|
+
| # | operation | 风险 | 必填入参 | 判据 | 回读 / 清理 |
|
|
157
|
+
|---|---|---|---|---|---|
|
|
158
|
+
| 87 | `meeting.eb.baseSet.get` | read | — | 返回 `only_flow_create` / `open_mt_approve` / 冲突策略 | 建会前必读 |
|
|
159
|
+
| 88 | `meeting.eb.decision.list` | read | — | `R-LIST`+`R-COUNT` | — |
|
|
160
|
+
| 89 | `meeting.eb.decision.detail` | read | `id` | `R-DETAIL`(带 `detail1` 明细) | — |
|
|
161
|
+
| 90 | `meeting.eb.decision.create.prepare` | read-before-write | `mt_id`,`mt_content`,`detail1` | `W-PREP` | 记 `continuation` |
|
|
162
|
+
| 91 | `meeting.eb.decision.create.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 `decision.list`(**写失败也可能已落库,先回查**) |
|
|
163
|
+
| 92 | `meeting.eb.decision.delete.prepare` | read-before-write | `id` | `W-PREP` | — |
|
|
164
|
+
| 93 | `meeting.eb.decision.delete.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 list 不含(**只删自建决议**) |
|
|
165
|
+
| 94 | `meeting.eb.decision.publish.prepare` | read-before-write | `mt_id`,`mt_content`,`detail1` | `W-PREP`;发布 = 写决议 **+ 自动把会议标为已决议** | 记 `continuation` |
|
|
166
|
+
| 95 | `meeting.eb.decision.publish.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 `decision.list` + 会议 `is_decision=1` |
|
|
167
|
+
| 96 | `meeting.eb.decisionTask.list` | read | — | `R-LIST`+`R-COUNT`;`data.progress.summary={total,done,overdue,inProgress,pending}`、`items[].progress.members[]` | 人员基准取主表 `executors`,**未跟进的执行人也计入 total 且算 pending** |
|
|
168
|
+
| 97 | `meeting.eb.decisionTask.update.prepare` | read-before-write | `id`,`detail1` | `W-PREP`;`finish_status` 非法枚举需报 `invalid_enum` | 记 `continuation` |
|
|
169
|
+
| 98 | `meeting.eb.decisionTask.update.apply` | high-risk-write | `confirm`,`continuation` | `W-APPLY` | 回读 `decisionTask.list` 的 `detail1.finish_status`(改回未完成需传空格清空 `finish_date`) |
|
|
170
|
+
|
|
171
|
+
> **计数**:标准版 28(#1–#28)+ EB 版 70(#29–#98)+ 跨模式 1(#99)= **99**,与 `weaver-work-cli meeting schema` 的 operation 数一致。
|
|
172
|
+
|
|
173
|
+
### 4.7 跨模式(EB / 标准版都可用)
|
|
174
|
+
|
|
175
|
+
| # | operation | 风险 | 必填入参 | 判据 | 回读 / 清理 |
|
|
176
|
+
|---|---|---|---|---|---|
|
|
177
|
+
| 99 | `meeting.link` | read | `dataId`(或 `dataIds`) | EB 模式:`source=dynamic`(首次)/`cache`(二次),`url` = `{baseUrl}/sp/ebdfpage/card/0/{objid}/{dataid}`,长 id 不得被舍入;标准版:`url` = `{baseUrl}/sp/meeting/meetingSingle?meetingId=`,且**不发任何请求**;会议室/会议类型在标准版下 `url=null` 且有 warning | 解析失败只降级为 `url=null` + `warnings`,不抛错 |
|
|
178
|
+
|
|
179
|
+
## 5. 最少可跑示例(两平台各一份)
|
|
180
|
+
|
|
181
|
+
Windows PowerShell:
|
|
182
|
+
|
|
183
|
+
```powershell
|
|
184
|
+
weaver-work-cli --json meeting run meeting.env.detect --input-json '{"refresh":true}'
|
|
185
|
+
weaver-work-cli --json meeting run meeting.eb.meeting.list --input-json '{"pageNo":1,"pageSize":20,"withCount":true}'
|
|
186
|
+
weaver-work-cli --json meeting run meeting.eb.decisionTask.list --input-json '{"pageNo":1,"pageSize":20,"withCount":true}'
|
|
187
|
+
weaver-work-cli --json meeting run meeting.eb.meeting.create.prepare --input-json '{"mt_creator":"<userId>","mt_name":"CLI-VERIFY-001","begin_datetime":"2026-09-24 09:00","end_datetime":"2026-09-24 10:00","mt_status":"2","operate_type":"ADD"}'
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
macOS/Linux(bash/zsh):
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
weaver-work-cli --json meeting run meeting.env.detect --input-json '{"refresh":true}'
|
|
194
|
+
weaver-work-cli --json meeting run meeting.eb.meeting.list --input-json '{"pageNo":1,"pageSize":20,"withCount":true}'
|
|
195
|
+
weaver-work-cli --json meeting run meeting.eb.decisionTask.list --input-json '{"pageNo":1,"pageSize":20,"withCount":true}'
|
|
196
|
+
weaver-work-cli --json meeting run meeting.eb.meeting.create.prepare --input-json '{"mt_creator":"<userId>","mt_name":"CLI-VERIFY-001","begin_datetime":"2026-09-24 09:00","end_datetime":"2026-09-24 10:00","mt_status":"2","operate_type":"ADD"}'
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### 5.1 EB 写链路验证模板(六步,可照抄)
|
|
200
|
+
|
|
201
|
+
1. `meeting.eb.meeting.create.prepare`(`mt_name` 用 `CLI-VERIFY-<时间戳>`)→ 记 `continuation`、检查 `preview.body`。
|
|
202
|
+
2. `meeting.eb.meeting.create.apply`(`confirm:true` + `continuation`)→ 看 `data.association`(占用/回执/签到补建结果与 warnings)。
|
|
203
|
+
3. `meeting.eb.meeting.list` 回读 → 拿到自建会议 id 与状态。
|
|
204
|
+
4. 业务子链路:占用(`roomUsage.list?mt_id=`)/签到(`sign.list?mt_id=`)/回执(`receipt.list?mt_id=`)/决议(`decision.create|publish`)/决议任务(`decisionTask.list?mt_id=`)。
|
|
205
|
+
5. 冲突复验:用同一 `address` + 同一时间段再跑 `meeting.eb.conflict.room` → 应识别冲突(`conflict_rejected` 或非空 warnings)。
|
|
206
|
+
6. 清理:`meeting.eb.meeting.delete.prepare` → `apply`(级联回收占用/回执/签到;决议任务按设计保留)。
|
|
207
|
+
|
|
208
|
+
### 5.2 标准版写链路验证模板
|
|
209
|
+
|
|
210
|
+
1. `meeting.create.prepare`(名称 `CLI-VERIFY-<时间戳>`,`yyyy-MM-dd HH:mm`)→ 记 `continuation`。
|
|
211
|
+
2. `meeting.create.apply` → `meeting.list` 回读拿 id。
|
|
212
|
+
3. `meeting.change.*`(改名称)→ 回读确认字段已变。
|
|
213
|
+
4. `meeting.cancel.*` → 回读状态;再 `meeting.delete.*` → 回读列表已移除。
|
|
214
|
+
|
|
215
|
+
## 6. 不在范围(8 项,**不可验证**,需如实答复,禁止伪造)
|
|
216
|
+
|
|
217
|
+
| 功能 | 事实与证据 | 正确答复 |
|
|
218
|
+
|---|---|---|
|
|
219
|
+
| EB 会议纪要**创建 / 更新 / 删除** | 无自定义 interfacePk(只有 `query_meeting_minute_list/_count`);EB 侧纪要表 tag=`uf_mt_minutes`,只能走 OpenAPI `dataset/v2/saveFormData` | 说明只能在系统页面创建,或按 OpenAPI 通用能力人工处理 |
|
|
220
|
+
| `meeting.eb.roomUsage.delete.apply` | 真机实测:URL 带 `?id=` 仍报「主键传入不能为空」(eBuilder 侧配置问题,已穷尽) | 释放占用改走 `meeting.eb.meeting.delete`(**级联回收**) |
|
|
221
|
+
| 标准版会议室管理(增/改/删/锁定) | 服务端接口未实现 | EB 环境用 `meeting.eb.room.*`;标准版引导页面操作 |
|
|
222
|
+
| 标准版会议类型管理 | 服务端接口未实现 | EB 环境用 `meeting.eb.type.*` |
|
|
223
|
+
| 提前结束会议 `meeting.over` | 服务端为空实现(假成功),CLI 不提供 | 引导用户在系统页面结束 |
|
|
224
|
+
| 本人扫码签到(`signMeeting`)、签到二维码、大屏签到 | 依赖现场二维码票据 + 设备 IP,AI 代签破坏签到真实性 | 引导用户现场扫码/H5 签到 |
|
|
225
|
+
| 回收站(列表 / 还原 / 强制还原) | 本阶段未实现(`delete` 为软删,数据可还原但 CLI 无入口) | 引导用户到会议回收站页面操作 |
|
|
226
|
+
| 决议任务删除 | 任务由 ESB 自动生成,**不提供删除**;进度用 `decisionTask.update` 维护 | 说明按设计不支持删除,改为更新完成状态 |
|
|
227
|
+
|
|
228
|
+
> 附加归属事实(避免误报):**排座在 EB 版没有该功能**;**标准版会议本身没有议题/纪要**(EB 独有);两套数据互不相通。
|
|
229
|
+
|
|
230
|
+
## 7. 负向与边界用例(14 项,验证"完整"的关键)
|
|
231
|
+
|
|
232
|
+
| # | 场景 | 构造 | 期望 |
|
|
233
|
+
|---|---|---|---|
|
|
234
|
+
| 1 | 必填缺失 | EB `meeting.create.prepare` 不传 `mt_name` | `missing_required_field`(不得静默通过) |
|
|
235
|
+
| 2 | 未确认 | 直接调 `*.apply` 不传 `confirm` | `confirmation.required` |
|
|
236
|
+
| 3 | 无效 continuation | `apply` 传过期/伪造 token | `continuation_expired` |
|
|
237
|
+
| 4 | id 不存在 | `meeting.eb.meeting.detail` 传不存在 id | `not_found` |
|
|
238
|
+
| 5 | 日期格式(不带秒) | EB 会议 `begin_datetime` 传 `2026-09-24 09:00:00` | 报「不满足传入格式」 |
|
|
239
|
+
| 6 | 日期格式(必须带秒) | 决议任务 `finish_date` 传 `2026-09-24 09:00` | 报格式错误/必填错误 |
|
|
240
|
+
| 7 | 非法枚举 | `decisionTask.update` 传 `finish_status=9` | `invalid_enum` |
|
|
241
|
+
| 8 | 分页 | `pageNo=2` 与第 1 页不重复;`total>pageSize` 时 `count=pageSize` | `pageInfo` 必须进 body,否则恒回 10 条 |
|
|
242
|
+
| 9 | 多值筛选 | `mt_id=A,B`(逗号) | 结果 = A + B 之和(实测纪要 27+23=50) |
|
|
243
|
+
| 10 | 空格清空 | `decisionTask.update` 传 `finish_date=" "` | 落库为空串(服务端 trim),状态回到"未完成" |
|
|
244
|
+
| 11 | 主键走 URL | 看 EB update/delete 的 `preview.path` | 必须带 `?id=<主键>`;只放 body 会报「主键传入不能为空」 |
|
|
245
|
+
| 12 | 冲突拦截 | 同房间同时间段重复建会 | `conflict_rejected`(应用设置=禁止)或非空 `warnings`(=仅提醒) |
|
|
246
|
+
| 13 | 越权 | 用他人不可见会议 id 执行 `change.prepare` | 服务端权限文案**原文转达**(如"您没有变更权限!") |
|
|
247
|
+
| 14 | 汇总口径 | `decisionTask.list` / `sign.list` / `receipt.list` | `progress.page` 明确给出「当页条数 vs 总数」;未跟进执行人计入 total;`is_sign="0"`(缺席)与空(未签到)**分开统计** |
|
|
248
|
+
|
|
249
|
+
## 8. 回执报告模板(执行方产出)
|
|
250
|
+
|
|
251
|
+
| # | operation | 结果(PASS/FAIL/跳过) | 关键证据 | 备注 |
|
|
252
|
+
|---|---|---|---|---|
|
|
253
|
+
| 1 | `meeting.env.detect` | PASS | `mode=eb, baseUrl=…` | — |
|
|
254
|
+
| … | … | … | … | … |
|
|
255
|
+
|
|
256
|
+
必须附:环境(`baseUrl`/`userId`/`mode`)、时间戳、**失败项的原始 `error.type/subtype` 与报错文案**、
|
|
257
|
+
自建数据清单(id + 名称)与清理结果(是否已删、残留说明)。
|
|
258
|
+
|
|
259
|
+
## 9. 可直接粘贴给其他智能体的提示词
|
|
260
|
+
|
|
261
|
+
```text
|
|
262
|
+
你是会议模块的验证执行方。请读取本 skill 的 references/meeting-verification.md,按其中的顺序与判据,
|
|
263
|
+
对当前环境的会议功能做一次**全量验证**(标准版 28 + EB 版 70,共 98 个 operation):
|
|
264
|
+
|
|
265
|
+
1. 先做先决条件 4 步(CLI 版本、共享规则、登录态、meeting.env.detect 判定 mode),并把结果报给我。
|
|
266
|
+
2. 按 mode 选择对应的一套 operation,逐条执行第 4 节表格中的判据;只读直接跑,
|
|
267
|
+
写入按「prepare → 我给确认 → apply → 回读 → 清理」四步走,**只用自建数据**(名称带 CLI-VERIFY- 前缀)。
|
|
268
|
+
3. 第 6 节的 8 项不在范围,**不要尝试**,如实说明即可;第 7 节的 14 个负向用例必须逐个跑。
|
|
269
|
+
4. 任何失败都要给出原始 error.type/subtype 与报错文案,禁止把失败写成"没有数据"。
|
|
270
|
+
5. 最后按第 8 节模板给我一份完整回执,并列出未清理干净的数据 id。
|
|
271
|
+
```
|
|
Binary file
|
|
@@ -17,7 +17,7 @@ cliHelp: "weaver-work-cli okr --help"
|
|
|
17
17
|
|
|
18
18
|
# 泛微E10 OKR 目标管理
|
|
19
19
|
|
|
20
|
-
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI
|
|
20
|
+
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
|
|
21
21
|
**`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
|
|
22
22
|
|
|
23
23
|
本技能覆盖 OKR 目标管理业务域:**目标分页查询**、**目标详情**、**关键成果查询与保存**、**目标对齐**、**目标评论**、**目标详情页链接**、**链路判定**。所有写操作(新建/编辑目标、保存关键成果、添加目标对齐)全部走 `prepare -> apply` 确认协议。
|
|
@@ -573,7 +573,7 @@
|
|
|
573
573
|
}
|
|
574
574
|
},
|
|
575
575
|
"artifactBaseline": {
|
|
576
|
-
"aggregateSha256": "
|
|
576
|
+
"aggregateSha256": "a7f377dea03cae7c8dfb0db3eafd1b99a87af21c10ab5dd04773d7b4270d9475",
|
|
577
577
|
"files": [
|
|
578
578
|
{
|
|
579
579
|
"path": "src/shortcuts/okr/errors.ts",
|
|
@@ -647,8 +647,8 @@
|
|
|
647
647
|
},
|
|
648
648
|
{
|
|
649
649
|
"path": "skills/weaver-e10-okr/SKILL.md",
|
|
650
|
-
"size":
|
|
651
|
-
"sha256": "
|
|
650
|
+
"size": 10465,
|
|
651
|
+
"sha256": "200e19e57c42b086b57294e3aacb6ab45d471c43374cf8c901a80644cd4e03d1"
|
|
652
652
|
},
|
|
653
653
|
{
|
|
654
654
|
"path": "docs/okr.md",
|
|
@@ -15,7 +15,7 @@ cliHelp: "weaver-work-cli plan --help"
|
|
|
15
15
|
|
|
16
16
|
# 泛微E10计划报告
|
|
17
17
|
|
|
18
|
-
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI
|
|
18
|
+
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
|
|
19
19
|
**`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
|
|
20
20
|
|
|
21
21
|
本技能覆盖报告业务域:**汇总生成报告**(多模块采集后整合)、**查询报告详情**、**分页查询报告**、**新建**、**修改**、**发布**、**撤回**、**发送提交提醒**、**查看报告评论**。写操作全部走 prepare→apply 确认协议。
|
|
@@ -17,7 +17,7 @@ cliHelp: "weaver-work-cli fna --help"
|
|
|
17
17
|
|
|
18
18
|
# weaver-work-cli 齐业成费控(FNA)Skill
|
|
19
19
|
|
|
20
|
-
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI
|
|
20
|
+
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md),其中包含安装、E10 认证、JSON 输出和高风险写入规则。若共享规则不存在、CLI 未安装或读取失败,说明本技能的必需依赖缺失,必须调用宿主提供的提问/确认弹框,向用户说明必须补齐 `weaver-work-cli` 与共享 skill `weaver-e10-shared`(不补齐本技能无法执行)及补齐计划,并把下面两条待执行命令原样完整展示在确认信息中;Agent 不能在未确认时自行安装。用户明确确认后,Agent 必须直接代为按顺序执行且每条仅执行一次,不得要求或引导用户手动执行:① 缺 CLI 时执行 `npm install -g weaver-work-cli`;② 再执行 `weaver-work-cli skills install shared --target-dir <SKILLS_ROOT>` 装回共享 skill,`<SKILLS_ROOT>` 取本 SKILL.md 所在目录的上一级绝对目录(即与本技能同级的 skills 根目录),不要省略 `--target-dir`——省略会装进默认目录,导致本技能依然读不到共享规则。命令均成功后重新读取共享规则;仍读不到就停止并把结果报告用户,不得凭猜测继续。**
|
|
21
21
|
**`--is-connector` 判据**:用户明确使用连接器、或上下文要求用连接器完成任务 → 传 `true`;本次任务或上下文直接选择单独技能 → 不传;用户没有明确说明时,按**正在运行的这份 Skill 是哪一级**定——**用户级(条目标 `(user)`)不传,连接器级(标 `(connector)`)传**(同名 Skill 只会运行用户级那一份)。传 `true` 时不要再写 `--profile` / `--base-url`。完整规则见 [`../weaver-e10-shared/SKILL.md`](../weaver-e10-shared/SKILL.md)。
|
|
22
22
|
|
|
23
23
|
所有调用统一走 `weaver-work-cli fna ...`,禁止绕过 CLI 直接 curl/fetch E10 接口,禁止读取、复制、打印或解析 Cookie、ETEAMSID、Token 或 `~/.e10-cli` 等认证目录;登录诊断只允许 `weaver-work-cli auth root/status/profile list/profile current`、`weaver-work-cli doctor --e10` 和业务命令 JSON 错误。
|